Repository: shadowsocks/shadowsocks-android Branch: master Commit: ae28fd91931f Files: 309 Total size: 1.6 MB Directory structure: gitextract_e5trxlyi/ ├── .circleci/ │ └── config.yml ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ ├── feature_request.md │ │ └── questions-support-requests-other.md │ ├── doc-json.md │ ├── faq.md │ ├── faq.ru.md │ └── workflows/ │ └── e2e-test.yml ├── .gitignore ├── .gitmodules ├── .travis.yml ├── AUTHORS ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── build.gradle.kts ├── buildSrc/ │ ├── build.gradle.kts │ ├── settings.gradle.kts │ └── src/ │ └── main/ │ └── kotlin/ │ └── Helpers.kt ├── core/ │ ├── .gitignore │ ├── build.gradle.kts │ ├── gfwlist/ │ │ ├── gen.pl │ │ ├── gen.py │ │ └── parse.py │ ├── proguard-rules.pro │ ├── schemas/ │ │ ├── com.github.shadowsocks.database.PrivateDatabase/ │ │ │ ├── 26.json │ │ │ ├── 27.json │ │ │ ├── 28.json │ │ │ └── 29.json │ │ └── com.github.shadowsocks.database.PublicDatabase/ │ │ └── 3.json │ └── src/ │ ├── androidTest/ │ │ └── java/ │ │ └── com/ │ │ └── github/ │ │ └── shadowsocks/ │ │ ├── acl/ │ │ │ └── AclTest.kt │ │ ├── database/ │ │ │ ├── MigrationTest.kt │ │ │ └── ProfileTest.kt │ │ └── net/ │ │ └── SubnetTest.kt │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── aidl/ │ │ │ └── com/ │ │ │ └── github/ │ │ │ └── shadowsocks/ │ │ │ └── aidl/ │ │ │ ├── IShadowsocksService.aidl │ │ │ ├── IShadowsocksServiceCallback.aidl │ │ │ └── TrafficStats.aidl │ │ ├── assets/ │ │ │ └── acl/ │ │ │ ├── bypass-china.acl │ │ │ ├── bypass-lan-china.acl │ │ │ ├── bypass-lan.acl │ │ │ ├── china-list.acl │ │ │ └── gfwlist.acl │ │ ├── java/ │ │ │ └── com/ │ │ │ └── github/ │ │ │ └── shadowsocks/ │ │ │ ├── BootReceiver.kt │ │ │ ├── Core.kt │ │ │ ├── UrlImportActivity.kt │ │ │ ├── VpnRequestActivity.kt │ │ │ ├── acl/ │ │ │ │ ├── Acl.kt │ │ │ │ └── AclSyncer.kt │ │ │ ├── aidl/ │ │ │ │ ├── ShadowsocksConnection.kt │ │ │ │ └── TrafficStats.kt │ │ │ ├── bg/ │ │ │ │ ├── BaseService.kt │ │ │ │ ├── Executable.kt │ │ │ │ ├── GuardedProcessPool.kt │ │ │ │ ├── LocalDnsWorker.kt │ │ │ │ ├── ProxyInstance.kt │ │ │ │ ├── ProxyService.kt │ │ │ │ ├── ServiceNotification.kt │ │ │ │ ├── TrafficMonitor.kt │ │ │ │ ├── TransproxyService.kt │ │ │ │ └── VpnService.kt │ │ │ ├── database/ │ │ │ │ ├── KeyValuePair.kt │ │ │ │ ├── PrivateDatabase.kt │ │ │ │ ├── Profile.kt │ │ │ │ ├── ProfileManager.kt │ │ │ │ ├── PublicDatabase.kt │ │ │ │ └── migration/ │ │ │ │ └── RecreateSchemaMigration.kt │ │ │ ├── net/ │ │ │ │ ├── ConcurrentLocalSocketListener.kt │ │ │ │ ├── DefaultNetworkListener.kt │ │ │ │ ├── DnsResolverCompat.kt │ │ │ │ ├── HttpsTest.kt │ │ │ │ ├── LocalSocketListener.kt │ │ │ │ └── Subnet.kt │ │ │ ├── plugin/ │ │ │ │ ├── NativePlugin.kt │ │ │ │ ├── NoPlugin.kt │ │ │ │ ├── Plugin.kt │ │ │ │ ├── PluginConfiguration.kt │ │ │ │ ├── PluginList.kt │ │ │ │ ├── PluginManager.kt │ │ │ │ └── ResolvedPlugin.kt │ │ │ ├── preference/ │ │ │ │ ├── DataStore.kt │ │ │ │ ├── EditTextPreferenceModifiers.kt │ │ │ │ ├── OnPreferenceDataStoreChangeListener.kt │ │ │ │ └── RoomPreferenceDataStore.kt │ │ │ ├── subscription/ │ │ │ │ ├── Subscription.kt │ │ │ │ └── SubscriptionService.kt │ │ │ ├── utils/ │ │ │ │ ├── ActivityResultContracts.kt │ │ │ │ ├── ArrayIterator.kt │ │ │ │ ├── Commandline.kt │ │ │ │ ├── Constants.kt │ │ │ │ ├── DeviceStorageApp.kt │ │ │ │ ├── DirectBoot.kt │ │ │ │ ├── Sorters.kt │ │ │ │ └── Utils.kt │ │ │ └── widget/ │ │ │ └── AutoCollapseTextView.kt │ │ ├── jni/ │ │ │ ├── Android.mk │ │ │ ├── Application.mk │ │ │ └── build-shared-executable.mk │ │ ├── res/ │ │ │ ├── color-v24/ │ │ │ │ └── ic_launcher_foreground_shadow.xml │ │ │ ├── drawable/ │ │ │ │ ├── ic_file_cloud_download.xml │ │ │ │ ├── ic_launcher_monochrome.xml │ │ │ │ └── ic_service_active.xml │ │ │ ├── drawable-anydpi-v24/ │ │ │ │ └── ic_launcher_foreground.xml │ │ │ ├── mipmap-anydpi-v24/ │ │ │ │ └── banner.xml │ │ │ ├── mipmap-anydpi-v26/ │ │ │ │ └── ic_launcher.xml │ │ │ ├── values/ │ │ │ │ ├── arrays.xml │ │ │ │ ├── colors.xml │ │ │ │ └── strings.xml │ │ │ ├── values-ar/ │ │ │ │ └── strings.xml │ │ │ ├── values-de/ │ │ │ │ └── strings.xml │ │ │ ├── values-es/ │ │ │ │ └── strings.xml │ │ │ ├── values-fa/ │ │ │ │ └── strings.xml │ │ │ ├── values-fr/ │ │ │ │ └── strings.xml │ │ │ ├── values-ja/ │ │ │ │ └── strings.xml │ │ │ ├── values-ko/ │ │ │ │ └── strings.xml │ │ │ ├── values-ru/ │ │ │ │ └── strings.xml │ │ │ ├── values-tr/ │ │ │ │ └── strings.xml │ │ │ ├── values-uk/ │ │ │ │ └── strings.xml │ │ │ ├── values-zh-rCN/ │ │ │ │ └── strings.xml │ │ │ ├── values-zh-rTW/ │ │ │ │ └── strings.xml │ │ │ └── xml/ │ │ │ ├── backup_descriptor.xml │ │ │ ├── default_configs.xml │ │ │ ├── locales_config.xml │ │ │ └── network_security_config.xml │ │ └── rust/ │ │ └── linker-wrapper.py │ └── test/ │ └── java/ │ └── com/ │ └── github/ │ └── shadowsocks/ │ └── database/ │ └── KeyValuePairTest.kt ├── detekt.yml ├── gradle/ │ ├── gradle-daemon-jvm.properties │ ├── libs.versions.toml │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat ├── mobile/ │ ├── .gitignore │ ├── build.gradle.kts │ ├── google-services.json │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── com/ │ │ └── github/ │ │ └── shadowsocks/ │ │ ├── AboutFragment.kt │ │ ├── App.kt │ │ ├── AppManager.kt │ │ ├── GlobalSettingsFragment.kt │ │ ├── GlobalSettingsPreferenceFragment.kt │ │ ├── MainActivity.kt │ │ ├── ProfileConfigActivity.kt │ │ ├── ProfileConfigFragment.kt │ │ ├── ProfilesFragment.kt │ │ ├── QuickToggleShortcut.kt │ │ ├── ScannerActivity.kt │ │ ├── ToolbarFragment.kt │ │ ├── UdpFallbackProfileActivity.kt │ │ ├── acl/ │ │ │ └── CustomRulesFragment.kt │ │ ├── bg/ │ │ │ └── TileService.kt │ │ ├── preference/ │ │ │ ├── PluginConfigurationDialogFragment.kt │ │ │ ├── PluginPreference.kt │ │ │ └── PluginPreferenceDialogFragment.kt │ │ ├── subscription/ │ │ │ └── SubscriptionFragment.kt │ │ ├── tasker/ │ │ │ ├── ActionListener.kt │ │ │ ├── ConfigActivity.kt │ │ │ └── Settings.kt │ │ └── widget/ │ │ ├── FabProgressBehavior.kt │ │ ├── ServiceButton.kt │ │ ├── StatsBar.kt │ │ ├── UndoSnackbarManager.kt │ │ └── WindowInsetsListeners.kt │ └── res/ │ ├── color/ │ │ ├── background_service.xml │ │ └── nav_item_tint.xml │ ├── drawable/ │ │ ├── background_profile.xml │ │ ├── background_selectable.xml │ │ ├── ic_action_assignment.xml │ │ ├── ic_action_copyright.xml │ │ ├── ic_action_delete.xml │ │ ├── ic_action_description.xml │ │ ├── ic_action_dns.xml │ │ ├── ic_action_done.xml │ │ ├── ic_action_help_outline.xml │ │ ├── ic_action_lock.xml │ │ ├── ic_action_lock_open.xml │ │ ├── ic_action_note_add.xml │ │ ├── ic_action_settings.xml │ │ ├── ic_app_shortcut_background.xml │ │ ├── ic_av_playlist_add.xml │ │ ├── ic_communication_phonelink_ring.xml │ │ ├── ic_device_data_usage.xml │ │ ├── ic_device_developer_mode.xml │ │ ├── ic_file_cloud_queue.xml │ │ ├── ic_file_file_upload.xml │ │ ├── ic_hardware_router.xml │ │ ├── ic_image_camera_alt.xml │ │ ├── ic_image_edit.xml │ │ ├── ic_image_looks_6.xml │ │ ├── ic_image_photo.xml │ │ ├── ic_maps_360.xml │ │ ├── ic_maps_directions.xml │ │ ├── ic_maps_directions_boat.xml │ │ ├── ic_navigation_apps.xml │ │ ├── ic_navigation_menu.xml │ │ ├── ic_notification_enhanced_encryption.xml │ │ ├── ic_qu_camera_launcher.xml │ │ ├── ic_qu_shadowsocks_foreground.xml │ │ ├── ic_qu_shadowsocks_launcher.xml │ │ ├── ic_service_busy.xml │ │ ├── ic_service_connected.xml │ │ ├── ic_service_connecting.xml │ │ ├── ic_service_idle.xml │ │ ├── ic_service_stopped.xml │ │ ├── ic_service_stopping.xml │ │ ├── ic_settings_password.xml │ │ ├── ic_social_emoji_symbols.xml │ │ └── ic_social_share.xml │ ├── drawable-v26/ │ │ ├── ic_qu_camera_launcher.xml │ │ └── ic_qu_shadowsocks_launcher.xml │ ├── layout/ │ │ ├── dialog_acl_rule.xml │ │ ├── dialog_subscription.xml │ │ ├── icon_list_item_2.xml │ │ ├── layout_about.xml │ │ ├── layout_apps.xml │ │ ├── layout_apps_item.xml │ │ ├── layout_custom_rules.xml │ │ ├── layout_global_settings.xml │ │ ├── layout_list.xml │ │ ├── layout_main.xml │ │ ├── layout_profile.xml │ │ ├── layout_profile_config.xml │ │ ├── layout_scanner.xml │ │ ├── layout_subscriptions.xml │ │ ├── layout_tasker.xml │ │ ├── layout_udp_fallback.xml │ │ ├── navigation_header.xml │ │ └── preference_dialog_password.xml │ ├── menu/ │ │ ├── app_manager_menu.xml │ │ ├── custom_rules_menu.xml │ │ ├── custom_rules_selection.xml │ │ ├── navigation_main.xml │ │ ├── profile_config_menu.xml │ │ ├── profile_manager_menu.xml │ │ ├── profile_share_popup.xml │ │ ├── scanner_menu.xml │ │ └── subscription_menu.xml │ ├── raw/ │ │ └── about.html │ ├── values/ │ │ ├── arrays.xml │ │ ├── colors.xml │ │ ├── dimen.xml │ │ └── styles.xml │ ├── values-night/ │ │ └── colors.xml │ └── xml/ │ ├── pref_global.xml │ ├── pref_profile.xml │ └── shortcuts.xml ├── plugin/ │ ├── .gitignore │ ├── CHANGES.md │ ├── README.md │ ├── build.gradle.kts │ ├── doc.md │ ├── gradle.properties │ └── src/ │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── github/ │ │ │ └── shadowsocks/ │ │ │ └── plugin/ │ │ │ ├── AlertDialogFragment.kt │ │ │ ├── ConfigurationActivity.kt │ │ │ ├── HelpActivity.kt │ │ │ ├── HelpCallback.kt │ │ │ ├── NativePluginProvider.kt │ │ │ ├── OptionsCapableActivity.kt │ │ │ ├── PathProvider.kt │ │ │ ├── PluginContract.kt │ │ │ ├── PluginOptions.kt │ │ │ ├── Utils.kt │ │ │ └── fragment/ │ │ │ ├── AlertDialogFragment.kt │ │ │ └── Utils.kt │ │ └── res/ │ │ ├── color/ │ │ │ └── mtrl_text_btn_text_color_selector.xml │ │ ├── drawable/ │ │ │ └── ic_navigation_close.xml │ │ ├── layout/ │ │ │ └── toolbar_light_dark.xml │ │ ├── values/ │ │ │ ├── colors.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ ├── values-de/ │ │ │ └── strings.xml │ │ ├── values-es/ │ │ │ └── strings.xml │ │ ├── values-fa/ │ │ │ └── strings.xml │ │ ├── values-fr/ │ │ │ └── strings.xml │ │ ├── values-ja/ │ │ │ └── strings.xml │ │ ├── values-ko/ │ │ │ └── strings.xml │ │ ├── values-night/ │ │ │ └── colors.xml │ │ ├── values-ru/ │ │ │ └── strings.xml │ │ ├── values-tr/ │ │ │ └── strings.xml │ │ ├── values-uk/ │ │ │ └── strings.xml │ │ ├── values-v29/ │ │ │ └── styles.xml │ │ ├── values-zh-rCN/ │ │ │ └── strings.xml │ │ └── values-zh-rTW/ │ │ └── strings.xml │ └── test/ │ └── java/ │ └── com/ │ └── github/ │ └── shadowsocks/ │ └── plugin/ │ └── PluginOptionsTest.kt ├── privacy_policy.md ├── release.sh ├── repositories.gradle.kts ├── settings.gradle.kts ├── test-e2e.sh ├── translate.py └── tv/ ├── .gitignore ├── build.gradle.kts ├── google-services.json └── src/ ├── freedom/ │ └── res/ │ └── values/ │ └── styles.xml └── main/ ├── AndroidManifest.xml ├── java/ │ └── com/ │ └── github/ │ └── shadowsocks/ │ └── tv/ │ ├── App.kt │ ├── MainActivity.kt │ ├── MainFragment.kt │ ├── MainPreferenceFragment.kt │ ├── ProfilesDialogFragment.kt │ └── preference/ │ └── LeanbackSingleListPreferenceDialogFragment.kt └── res/ ├── layout/ │ ├── activity_main.xml │ └── leanback_list_preference_item_single_2.xml ├── values/ │ └── styles.xml └── xml/ └── pref_main.xml ================================================ FILE CONTENTS ================================================ ================================================ FILE: .circleci/config.yml ================================================ version: 2.1 orbs: android: circleci/android@2.3.0 jobs: build: executor: name: android/android-docker tag: 2025.04.1-ndk resource-class: large environment: GRADLE_OPTS: -Dorg.gradle.workers.max=1 -Dorg.gradle.daemon=false -Dkotlin.compiler.execution.strategy="in-process" RUST_VERSION: 1.86.0 steps: - checkout - run: git submodule update --init --recursive - run: curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain $RUST_VERSION -y - run: name: Update environment variables command: | echo 'export PATH="$HOME"/.cargo/bin:"$PATH"' >> "$BASH_ENV" - run: rustup target add armv7-linux-androideabi aarch64-linux-android i686-linux-android x86_64-linux-android - android/restore-gradle-cache - run: name: Run Build and Tests command: ./gradlew assembleDebug check -PCARGO_PROFILE=debug - android/save-gradle-cache - store_artifacts: path: mobile/build/outputs/apk destination: apk/mobile - store_artifacts: path: tv/build/outputs/apk destination: apk/tv - store_artifacts: path: core/build/reports destination: reports/core - store_artifacts: path: mobile/build/reports destination: reports/mobile - store_artifacts: path: plugin/build/reports destination: reports/plugin - store_artifacts: path: tv/build/reports destination: reports/tv workflows: test: jobs: - build ================================================ FILE: .github/FUNDING.yml ================================================ github: [Mygod] ================================================ FILE: .github/ISSUE_TEMPLATE/bug_report.md ================================================ --- name: Bug report about: Create a report to help us improve title: '' labels: bug assignees: '' --- Please read contributing guidelines. Thanks. **Describe the bug** A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error **Expected behavior** A clear and concise description of what you expected to happen. **Screenshots** If applicable, add screenshots to help explain your problem. **Smartphone (please complete the following information):** - Android/Chrome OS version: [e.g. "7.0.0_r14" or "71.0.3578.94 (32-bit)", more detailed description is preferred] - Device: [e.g. Google Pixel XL] - Version: [e.g. version code "v3.0.0" or commit ID "a073f85"] - Last version that did not exhibit the issue: [not applicable] **Configuration** Put an `x` inside the [ ] that applies. * [ ] IPv4 server address * [ ] IPv6 server address * [ ] Client IPv4 availability * [ ] Client IPv6 availability * Encrypt method: * Route * [ ] All * [ ] Bypass LAN * [ ] Bypass China * [ ] Bypass LAN & China * [ ] GFW List * [ ] China List * [ ] Custom rules * [ ] IPv6 route * [ ] Apps VPN mode * [ ] Bypass mode * Remote DNS: 8.8.8.8 * [ ] DNS over UDP * Plugin configuration (if applicable): * [ ] Auto Connect * [ ] TCP Fast Open * If you're not using VPN mode, please supply more details here: **Additional context** Add any other context about the problem here. ================================================ FILE: .github/ISSUE_TEMPLATE/feature_request.md ================================================ --- name: Feature request about: Suggest an idea for this project title: '' labels: enhancement assignees: '' --- Please read contributing guidelines. Thanks. **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] **Describe the solution you'd like** A clear and concise description of what you want to happen. **Describe alternatives you've considered** A clear and concise description of any alternative solutions or features you've considered. **Additional context** Add any other context or screenshots about the feature request here. ================================================ FILE: .github/ISSUE_TEMPLATE/questions-support-requests-other.md ================================================ --- name: Questions/Support requests/Other about: You should probably use the forum title: '' labels: question assignees: '' --- Please use the forum at https://discourse.shadowsocks.org/c/implementations/shadowsocks-android instead. Your issue will probably be closed. ================================================ FILE: .github/doc-json.md ================================================ # Documentation for JSON format shadowsocks-android accepts processing Shadowsocks configs through JSON files. This documentation is targeted towards Shadowsocks server maintainers, who might need to distribute server configs through subscription JSON files, which is supported since [v5.0.0](https://github.com/shadowsocks/shadowsocks-android/releases/tag/v5.0.0). ## `Profile` JSON object In general, shadowsocks-android respects [the specification at shadowsocks.org](https://shadowsocks.org/en/config/quick-guide.html). A JSON object is recognized as a `Profile` (i.e. a valid server config), if all of the following required fields are present and valid: * `server` * `server_port` * `password` * `method` These fields have the same meaning as specified by shadowsocks.org. The specification at shadowsocks.org additionally specifies two additional fields, which is not used by shadowsocks-android: * `local_port`: This field is configured globally through "SOCKS5 proxy port". * `timeout`: This field is hardcoded to 600 in shadowsocks-android (however, it is only used as a write timeout, so long idle connections like GMS heartbeat are allowed). Additionally, shadowsocks-android accepts the following optional fields: * `plugin`: shadowsocks-android plugin ID or [alias](https://github.com/shadowsocks/shadowsocks-android/pull/2431). * `plugin_opts`: Plugin options [as specified in shadowsocks.org](https://shadowsocks.org/en/spec/Plugin.html). * `remarks`: "Profile Name". (also used by [shadowsocks-windows](https://github.com/shadowsocks/shadowsocks-windows)) * `udp_fallback`: "UDP Fallback", should be a `Profile` JSON object or null. The following optional fields are "Feature Settings" in shadowsocks-android, if omitted, their values will be copied from currently selected profile: * `route`: "Route", should be one of `all`, `bypass-lan`, `bypass-china`, `bypass-lan-china`, `gfwlist`, `china-list`, `custom-rules`. * `ipv6`: "IPv6 Route", Boolean. * `proxy_apps`: "Apps VPN mode", is a JSON object with the following fields: - `enabled`: Boolean. - `bypass`: Boolean, whether the app specified should be bypassed or proxied. - `android_list`: An array of strings, specifying a list of Android app [package names](https://developer.android.com/studio/build/application-id). * `udpdns`: "Send DNS over UDP", Boolean. `Profile` objects can have additional fields, which will be ignored by shadowsocks-android. ## Parsing/Importing JSON shadowsocks-android imports JSON using the following logic, which should support all reasonable formats of JSON files containing `Profile`s, including `gui-config.json` used by shadowsocks-windows. 1. On input a JSON file, try to recognize it as a `Profile`. 2. If input is an object and all the required fields of a `Profile` is present, return the parsed `Profile`. 3. Otherwise if input is an object, recursively search for `Profile`s in each field and return all found `Profile`s. 4. Otherwise if input is an array, recursively search for `Profile`s for each element and return all found `Profile`s. 5. Conclude that there is no `Profile` in input. In general, subscription JSON file can be in any structure, as long as they contain the `Profile` JSON objects recognized by the above procedure. ## Exporting JSON The easiest way to write JSON files is to configure them in shadowsocks-android and export the JSON file using the app. The output will be a JSON file consisting of a JSON array with all the `Profile`s. ## Subscription update behavior In shadowsocks-android, `Profile` is indexed by the triple `(server, server_port, remarks)`. If two `Profile`s share the exact same triple, they will be treated as the exact same `Profile`, despite possibly having different plugins, passwords, or even encryption methods. When doing subscription updates, * If an old `Profile` shares the same triple as a new `Profile`, the following field in the old `Profile` will be updated: `password`, `method`, `plugin`, `plugin_opts`, `udp_fallback`. This ensures that user configured feature settings and traffic stats are preserved. * If two `Profile` across all the subscriptions share the exact same triple, the behavior is undefined. Please avoid this if possible. ## Appendix: Sample exported JSON file ```json [ { "server": "198.199.101.152", "server_port": 8388, "password": "u1rRWTssNv0p", "method": "aes-256-cfb", "remarks": "Example 1" }, { "server": "198.199.101.12", "server_port": 8388, "password": "u1rRWTssNv0p", "method": "aes-256-cfb", "plugin": "v2ray", "plugin_opts": "host=www.example.com", "remarks": "Example 2", "route": "bypass-lan-china", "remote_dns": "dns.google", "ipv6": true, "metered": false, "proxy_apps": { "enabled": true, "bypass": true, "android_list": [ "com.eg.android.AlipayGphone", "com.wudaokou.hippo", "com.zhihu.android" ] }, "udpdns": false } ] ``` ================================================ FILE: .github/faq.md ================================================ ### Troubleshooting Cannot connect to server: 1. Stop battery saver if it's active; 2. Check your config; 3. Wipe app data. Crash: [Submit an issue](https://github.com/shadowsocks/shadowsocks-android/issues/new) with logcat attached, or submit a crash report to Google Play. Then, try wiping app data. ### How to create a widget and/or switch profile based on network connectivity? Use [Tasker](http://tasker.dinglisch.net/) integration. ### Why is NAT mode deprecated? 1. Requiring ROOT permission; 2. No IPv6 support; 3. No UDP relay support. ### How to remove the exclamation mark when using VPN mode? The exclamation mark in the Wi-Fi/cellular icon appears because the system fails to connect to portal server (defaults to `clients3.google.com`) without VPN connection. To remove it, follow the instructions in [this article](https://www.noisyfox.cn/45.html). (in Simplified Chinese) ### Why is my ROM not supported? 1. Some ROM has broken VPNService implementation, especially for IPv6; 2. Some ROM has aggressive (or called broken) background service killing policy; 3. Some ROM like [Flyme](https://github.com/shadowsocks/shadowsocks-android/issues/1821) is basically broken **in every way possible**; 4. If you have Xposed framework and/or battery saver apps, it's likely that this app wouldn't work well with these either. * Fixes for MIUI: [#772](https://github.com/shadowsocks/shadowsocks-android/issues/772) * Fixes for EMUI: [#888](https://github.com/shadowsocks/shadowsocks-android/issues/888) * Fixes for Huawei: [#1091 (comment)](https://github.com/shadowsocks/shadowsocks-android/issues/1091#issuecomment-276949836) * Related to Xposed: [#1414](https://github.com/shadowsocks/shadowsocks-android/issues/1414) * Samsung and/or Brevent: [#1410](https://github.com/shadowsocks/shadowsocks-android/issues/1410) * Another Samsung: [#1712](https://github.com/shadowsocks/shadowsocks-android/issues/1712) * Samsung with GMS: [#2138](https://github.com/shadowsocks/shadowsocks-android/issues/2138) * Don't install this app on SD card because of permission issues: [#1124 (comment)](https://github.com/shadowsocks/shadowsocks-android/issues/1124#issuecomment-307556453) * `INTERACT_ACROSS_USERS` permission missing: [#1184](https://github.com/shadowsocks/shadowsocks-android/issues/1184) ### How to pause Shadowsocks service? * For Android 7.0+: Use quick switch tile in Quick Settings; * Use Tasker integration; * Add a profile with per-app proxy enabled for Shadowsocks only, bypass mode off. ### Why does Shadowsocks consume so much battery on Android 5.0+? As Shadowsocks takes over the whole device network, any battery used by network activities from other apps are also counted as those from Shadowsocks. So, the battery usage of Shadowsocks equals to the sum of all the network activities of your device. Shadowsocks itself is a totally I/O bound application on modern Android devices, which is expected not to consume any notable battery. So if you notice a significant increase in battery usage after you use Shadowsocks, it's most likely caused by other apps. For example, Google Play services can consume more battery after being able to connecting to Google, etc. More details: https://kb.adguard.com/en/android/solving-problems/battery ### It works fine under Wi-Fi but can't connect through cellular data? Allow this app to consume background data in app settings. ### How to use Transproxy mode? 1. Install [AFWall+](https://github.com/ukanth/afwall); 2. Set custom script: ```sh IP6TABLES=/system/bin/ip6tables IPTABLES=/system/bin/iptables ULIMIT=/system/bin/ulimit SHADOWSOCKS_UID=`dumpsys package com.github.shadowsocks | grep userId | cut -d= -f2 - | cut -d' ' -f1 -` PORT_DNS=5450 PORT_TRANSPROXY=8200 $ULIMIT -n 4096 $IP6TABLES -F $IP6TABLES -A INPUT -j DROP $IP6TABLES -A OUTPUT -j DROP $IPTABLES -t nat -F OUTPUT $IPTABLES -t nat -A OUTPUT -o lo -j RETURN $IPTABLES -t nat -A OUTPUT -d 127.0.0.1 -j RETURN $IPTABLES -t nat -A OUTPUT -m owner --uid-owner $SHADOWSOCKS_UID -j RETURN $IPTABLES -t nat -A OUTPUT -p tcp --dport 53 -j DNAT --to-destination 127.0.0.1:$PORT_DNS $IPTABLES -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to-destination 127.0.0.1:$PORT_DNS $IPTABLES -t nat -A OUTPUT -p tcp -j DNAT --to-destination 127.0.0.1:$PORT_TRANSPROXY $IPTABLES -t nat -A OUTPUT -p udp -j DNAT --to-destination 127.0.0.1:$PORT_TRANSPROXY ``` 3. Set custom shutdown script: ```sh IP6TABLES=/system/bin/ip6tables IPTABLES=/system/bin/iptables $IPTABLES -t nat -F OUTPUT $IP6TABLES -F ``` 4. Make sure to allow traffic for Shadowsocks; 5. Start Shadowsocks transproxy service and enable firewall. ================================================ FILE: .github/faq.ru.md ================================================ ### Решение проблем Не получается подключиться к серверу: 1. Выключите режим энергосбережения, если он активен; 2. Проверьте настройки; 3. Сотрите данные приложения. Не работает: [Добавьте отчет](https://github.com/shadowsocks/shadowsocks-android/issues/new) прикрепив лог (logcat), или отправьте отзыв в Google Play. Затем попробуйте стереть данные приложения. ### Как добавить виджет и/или переключать профиль на основании состояния сети? Использйте интеграцию с [Tasker](http://tasker.dinglisch.net/). ### Почему режим NAT более не поддерживается? 1. Требуются ROOT права; 2. Нет поддержки IPv6; 3. Нет поддержки UDP relay. ### Как убрать восклицательный знак когда используется режим VPN? Восклицательный знак на значке Wi-Fi/Сотовой связи появляется, потому что система не может подключиться к portal-серверу (по-умолчанию к `clients3.google.com`) без VPN подключения. Чтобы убрать его, следуйте инструкциям в [этом топике](https://www.noisyfox.cn/45.html). (на упрощенном китайском) ### Почему мой ROM не поддерживается? 1. Некоторые ROM используют неправильную реализацию службы VPN, особенно IPv6; 2. Некоторые ROM используют агрессивную (или так называемую испорченную) неправильную политику остановки фоновых служб; 3. Некоторые ROM, такие как [Flyme](https://github.com/shadowsocks/shadowsocks-android/issues/1821) просто не работают **в любом случае**; 4. Если вы используете фреймворк Xposed и/или приложения для энергосбережения, вероятно наше приложение не будет нормально работать с ними. * Исправления для MIUI: [#772](https://github.com/shadowsocks/shadowsocks-android/issues/772) * Исправления для EMUI: [#888](https://github.com/shadowsocks/shadowsocks-android/issues/888) * Иправления для Huawei: [#1091 (комментарий)](https://github.com/shadowsocks/shadowsocks-android/issues/1091#issuecomment-276949836) * Связанные с Xposed: [#1414](https://github.com/shadowsocks/shadowsocks-android/issues/1414) * Samsung и/или Brevent: [#1410](https://github.com/shadowsocks/shadowsocks-android/issues/1410) * Ещё Samsung: [#1712](https://github.com/shadowsocks/shadowsocks-android/issues/1712) * Не устанавливайте это приложение на SD карту, из-за проблем с разрешениями: [#1124 (комментарий)](https://github.com/shadowsocks/shadowsocks-android/issues/1124#issuecomment-307556453) * Отсутствует разрешение `INTERACT_ACROSS_USERS`: [#1184](https://github.com/shadowsocks/shadowsocks-android/issues/1184) ### Как приостановить службу Shadowsocks? * Для Android 7.0+: Используйте переключатель в быстрых настройках; * Используйте интеграцию с Tasker; * Добавьте профиль c выбранными приложениями, которые будут работать через Shadowsocks прокси, выключив обходной режим. ### Почему Shadowsocks потребляет так много энергии на Android 5.0+? Так как Shadowsocks работает со всем траффиком устройства, заряд батареи используемый другими приложениями также считается за тот, что использует Shadowsocks. Таким образом использование батареи Shadowsocks'ом равен сумме всей активности устройства в сети. Shadowsocks сам по себе в общем-то является приложением связанного процесса ввода/вывода на современных Android устройствах, которое, ожидаемо, не потребляет значительного количества энергии. Так что если вы заметите значительное увеличение потребляемой энергии после того, как вы использовали Shadowsocks, это скорее всего вызванно другими приложениями. Например, сервисы Google Play могут потреблять больше энергии после того, как смогут подключиться к Google, и т.д. Больше информации: https://kb.adguard.com/en/android/solving-problems/battery ### Оно прекрасно работает при Wi-Fi но не может подключиться через сотовую связь? Разрешите этому приложению передачу данных в фоновом режиме в настройках приложения. Если у вас оперератор Yota, то увы, но они запрещают P2P-траффик, коим является (или просто определяется фильтрами оператора как P2P-траффик) Shadowsocks. Оператор не будет предпринимать никаких действий для решения данной проблемы. ### Как использовать режим Transproxy (прозрачный прокси)? 1. Установите [AFWall+](https://github.com/ukanth/afwall); 2. Настройте пользовательский скрипт: ```sh IP6TABLES=/system/bin/ip6tables IPTABLES=/system/bin/iptables ULIMIT=/system/bin/ulimit SHADOWSOCKS_UID=`dumpsys package com.github.shadowsocks | grep userId | cut -d= -f2 - | cut -d' ' -f1 -` PORT_DNS=5450 PORT_TRANSPROXY=8200 $ULIMIT -n 4096 $IP6TABLES -F $IP6TABLES -A INPUT -j DROP $IP6TABLES -A OUTPUT -j DROP $IPTABLES -t nat -F OUTPUT $IPTABLES -t nat -A OUTPUT -o lo -j RETURN $IPTABLES -t nat -A OUTPUT -d 127.0.0.1 -j RETURN $IPTABLES -t nat -A OUTPUT -m owner --uid-owner $SHADOWSOCKS_UID -j RETURN $IPTABLES -t nat -A OUTPUT -p tcp --dport 53 -j DNAT --to-destination 127.0.0.1:$PORT_DNS $IPTABLES -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to-destination 127.0.0.1:$PORT_DNS $IPTABLES -t nat -A OUTPUT -p tcp -j DNAT --to-destination 127.0.0.1:$PORT_TRANSPROXY $IPTABLES -t nat -A OUTPUT -p udp -j DNAT --to-destination 127.0.0.1:$PORT_TRANSPROXY ``` 3. Настройте пользовательский скрипт отключения: ```sh IP6TABLES=/system/bin/ip6tables IPTABLES=/system/bin/iptables $IPTABLES -t nat -F OUTPUT $IP6TABLES -F ``` 4. Убедитесь, что траффик для Shadowsocks разрешен; 5. Запустите службу прозрачного прокси (transproxy) в Shadowsocks и включите брандмауэр. ================================================ FILE: .github/workflows/e2e-test.yml ================================================ name: E2E Test on: push: branches: [master] pull_request: workflow_dispatch: jobs: e2e-test: runs-on: ubuntu-latest timeout-minutes: 45 steps: - uses: actions/checkout@v4 with: submodules: recursive - uses: actions/setup-java@v4 with: distribution: jetbrains java-version: 21 - uses: dtolnay/rust-toolchain@stable with: targets: x86_64-linux-android - name: Enable KVM run: | echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' \ | sudo tee /etc/udev/rules.d/99-kvm4all.rules sudo udevadm control --reload-rules sudo udevadm trigger --name-match=kvm - name: Gradle cache uses: actions/cache@v4 with: path: | ~/.gradle/caches ~/.gradle/wrapper key: gradle-${{ hashFiles('**/*.gradle*', 'gradle/wrapper/gradle-wrapper.properties') }} - name: Cargo cache uses: actions/cache@v4 with: path: | ~/.cargo/registry ~/.cargo/git core/src/main/rust/shadowsocks-rust/target key: cargo-${{ hashFiles('core/src/main/rust/shadowsocks-rust/Cargo.lock') }} - name: Build debug APK (x86_64) run: ./gradlew assembleDebug -PCARGO_PROFILE=debug -PTARGET_ABI=x86_64 - name: Build ssserver run: | cd core/src/main/rust/shadowsocks-rust cargo build --release --bin ssserver --features "server,aead-cipher,logging" - name: E2E Test uses: ReactiveCircus/android-emulator-runner@v2 with: api-level: 34 target: google_apis arch: x86_64 force-avd-creation: true emulator-options: >- -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim disable-animations: true script: bash test-e2e.sh env: SKIP_EMULATOR_BOOT: "true" ADB: adb APK: ${{ github.workspace }}/mobile/build/outputs/apk/debug/mobile-x86_64-debug.apk SSSERVER: ${{ github.workspace }}/core/src/main/rust/shadowsocks-rust/target/release/ssserver - name: Upload screenshots uses: actions/upload-artifact@v4 if: always() with: name: e2e-screenshots path: screen_*.png ================================================ FILE: .gitignore ================================================ # Gradle & Android Studio local.properties .gradle/ .externalNativeBuild/ build/ captures/ release/ .idea/ *.iml # release apks *.apk .DS_Store ================================================ FILE: .gitmodules ================================================ [submodule "core/src/main/jni/badvpn"] path = core/src/main/jni/badvpn url = https://github.com/shadowsocks/badvpn.git branch = shadowsocks-android [submodule "core/src/main/jni/libancillary"] path = core/src/main/jni/libancillary url = https://github.com/shadowsocks/libancillary.git branch = shadowsocks-android [submodule "core/src/main/jni/libevent"] path = core/src/main/jni/libevent url = https://github.com/shadowsocks/libevent.git branch = shadowsocks-android [submodule "core/src/main/jni/redsocks"] path = core/src/main/jni/redsocks url = https://github.com/shadowsocks/redsocks.git branch = shadowsocks-android [submodule "core/src/main/rust/shadowsocks-rust"] path = core/src/main/rust/shadowsocks-rust url = https://github.com/shadowsocks/shadowsocks-rust.git ================================================ FILE: .travis.yml ================================================ sudo: required addons: artifacts: true services: - docker before_install: - docker pull circleci/android:api-28-ndk - chmod -R a+wrx . script: - docker run --rm -v ${PWD}:/build circleci/android:api-28-ndk bash -c "cd /build; ./gradlew assembleDebug check" ================================================ FILE: AUTHORS ================================================ Shadowsocks-android was originally created in late 2013, by Max Lv . Here is an inevitably incomplete list of MUCH-APPRECIATED CONTRIBUTORS -- people who have submitted patches, fixed bugs, added translations, and generally made shadowsocks-android that much better: https://github.com/shadowsocks/shadowsocks-android/graphs/contributors ================================================ FILE: CONTRIBUTING.md ================================================ # Submitting Issues * Issues can be submitted in two different places: 1) [The GitHub issue log](https://github.com/shadowsocks/shadowsocks-android/issues) 2) [The Shadowsocks.org Discourse Forum](https://discourse.shadowsocks.org/c/implementations/shadowsocks-android) * Please search for your issues in both places before submitting new issues. * If you have any questions, please check the [FAQ](https://github.com/shadowsocks/shadowsocks-android/blob/master/.github/faq.md) and the questions submitted at the [Discourse Forum](https://discourse.shadowsocks.org/c/implementations/shadowsocks-android). * General discussions should go to the [Discourse Forum](https://discourse.shadowsocks.org/c/implementations/shadowsocks-android). * Always provide information asked in the template unless you know what you're doing. * Utilizing Logcat would also be helpful. ================================================ FILE: LICENSE ================================================ Copyright (C) 2017 by Max Lv Copyright (C) 2017 by Mygod Studio 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 . ================================================ FILE: README.md ================================================ ## [Shadowsocks](https://shadowsocks.org) for Android [![CircleCI](https://circleci.com/gh/shadowsocks/shadowsocks-android.svg?style=shield)](https://circleci.com/gh/shadowsocks/shadowsocks-android) [![API](https://img.shields.io/badge/API-23%2B-brightgreen.svg?style=flat)](https://android-arsenal.com/api?level=23) [![Releases](https://img.shields.io/github/downloads/shadowsocks/shadowsocks-android/total.svg)](https://github.com/shadowsocks/shadowsocks-android/releases) [![Language: Kotlin](https://img.shields.io/github/languages/top/shadowsocks/shadowsocks-android.svg)](https://github.com/shadowsocks/shadowsocks-android/search?l=kotlin) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/22ca240f272445548e332a42d5a20d95)](https://www.codacy.com/gh/shadowsocks/shadowsocks-android/dashboard?utm_source=github.com&utm_medium=referral&utm_content=shadowsocks/shadowsocks-android&utm_campaign=Badge_Grade) [![License: GPL-3.0](https://img.shields.io/badge/license-GPL--3.0-orange.svg)](https://www.gnu.org/licenses/gpl-3.0) for Android & Chrome OS ([beta](https://play.google.com/apps/testing/com.github.shadowsocks)) for Android TV ([beta](https://play.google.com/apps/testing/com.github.shadowsocks.tv)) ### PREREQUISITES * JDK 11+ * Android SDK - Android NDK * Rust with Android targets installed using `rustup target add armv7-linux-androideabi aarch64-linux-android i686-linux-android x86_64-linux-android` ### BUILD You can check whether the latest commit builds under UNIX environment by checking Travis status. * Install prerequisites * Clone the repo using `git clone --recurse-submodules ` or update submodules using `git submodule update --init --recursive` * Build it using Android Studio or gradle script ### CONTRIBUTING If you are interested in contributing or getting involved with this project, please read the CONTRIBUTING page for more information. The page can be found [here](https://github.com/shadowsocks/shadowsocks-android/blob/master/CONTRIBUTING.md). ### [TRANSLATE](https://discourse.shadowsocks.org/t/poeditor-translation-main-thread/30) ## OPEN SOURCE LICENSES ### LICENSE Copyright (C) 2017 by Max Lv <> Copyright (C) 2017 by Mygod Studio <> 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 . ================================================ FILE: build.gradle.kts ================================================ // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { alias(libs.plugins.versions) alias(libs.plugins.ksp) apply false } buildscript { apply(from = "repositories.gradle.kts") repositories { google() mavenCentral() gradlePluginPortal() } dependencies { classpath(libs.android.gradle) classpath(libs.dokka) classpath(libs.firebase.crashlytics.gradle) classpath(libs.google.oss.licenses) classpath(libs.google.services) classpath(libs.gradle.maven.publish) classpath(libs.kotlin.gradle) classpath(libs.rust.android) } } allprojects { apply(from = "${rootProject.projectDir}/repositories.gradle.kts") } // skip uploading the mapping to Crashlytics subprojects { tasks.whenTaskAdded { if (name.contains("uploadCrashlyticsMappingFile")) enabled = false } } ================================================ FILE: buildSrc/build.gradle.kts ================================================ plugins { `kotlin-dsl` } apply(from = "../repositories.gradle.kts") dependencies { implementation(libs.android.gradle) implementation(libs.kotlin.gradle) } ================================================ FILE: buildSrc/settings.gradle.kts ================================================ dependencyResolutionManagement { versionCatalogs { create("libs") { from(files("../gradle/libs.versions.toml")) } } } ================================================ FILE: buildSrc/src/main/kotlin/Helpers.kt ================================================ import com.android.build.api.dsl.CommonExtension import com.android.build.gradle.BaseExtension import org.gradle.api.JavaVersion import org.gradle.api.Project import org.gradle.kotlin.dsl.dependencies import org.gradle.kotlin.dsl.getByName import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension private val Project.android get() = extensions.getByName("android") private val BaseExtension.lint get() = (this as CommonExtension<*, *, *, *, *, *>).lint val Project.currentFlavor get() = gradle.startParameter.taskNames.let { tasks -> when { tasks.any { it.contains("Release", ignoreCase = true) } -> "release" tasks.any { it.contains("Debug", ignoreCase = true) } -> "debug" else -> "debug".also { println("Warning: No match found for $tasks") } } } fun Project.setupCommon() { val javaVersion = JavaVersion.VERSION_11 android.apply { compileSdkVersion(36) defaultConfig { minSdk = 23 targetSdk = 36 testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } compileOptions { sourceCompatibility = javaVersion targetCompatibility = javaVersion } lint.apply { warning += "ExtraTranslation" warning += "ImpliedQuantity" informational += "MissingQuantity" informational += "MissingTranslation" } } extensions.getByName("kotlin").compilerOptions.jvmTarget .set(JvmTarget.fromTarget(javaVersion.toString())) } fun Project.setupCore() { setupCommon() android.apply { defaultConfig { versionCode = 5030550 versionName = "5.3.5-nightly" } compileOptions.isCoreLibraryDesugaringEnabled = true lint.apply { disable += "BadConfigurationProvider" warning += "RestrictedApi" disable += "UseAppTint" } buildFeatures.buildConfig = true } } fun Project.setupApp() { setupCore() android.apply { defaultConfig.resourceConfigurations.addAll(listOf( "ar", "de", "es", "fa", "fr", "ja", "ko", "ru", "tr", "uk", "zh-rCN", "zh-rTW", )) buildTypes { getByName("debug") { isPseudoLocalesEnabled = true packagingOptions.doNotStrip("**/libsslocal.so") } getByName("release") { isShrinkResources = true isMinifyEnabled = true proguardFile(getDefaultProguardFile("proguard-android.txt")) } } lint.disable += "RemoveWorkManagerInitializer" packagingOptions.jniLibs.useLegacyPackaging = true splits.abi { isEnable = true isUniversalApk = true } } dependencies.add("implementation", project(":core")) } ================================================ FILE: core/.gitignore ================================================ /build /.cxx/ ================================================ FILE: core/build.gradle.kts ================================================ import com.android.build.gradle.internal.tasks.factory.dependsOn plugins { id("com.android.library") id("com.google.devtools.ksp") id("org.mozilla.rust-android-gradle.rust-android") kotlin("android") id("kotlin-parcelize") } setupCore() val allAbis = mapOf("arm" to "armeabi-v7a", "arm64" to "arm64-v8a", "x86" to "x86", "x86_64" to "x86_64") val targetAbi = findProperty("TARGET_ABI")?.toString() android { namespace = "com.github.shadowsocks.core" defaultConfig { consumerProguardFiles("proguard-rules.pro") externalNativeBuild.ndkBuild { val abis = if (targetAbi != null) listOf(allAbis.getValue(targetAbi)) else allAbis.values.toList() abiFilters(*abis.toTypedArray()) arguments("-j${Runtime.getRuntime().availableProcessors()}") } ksp { arg("room.incremental", "true") arg("room.schemaLocation", "$projectDir/schemas") } } externalNativeBuild.ndkBuild.path("src/main/jni/Android.mk") sourceSets.getByName("androidTest") { assets.setSrcDirs(assets.srcDirs + files("$projectDir/schemas")) } buildFeatures.aidl = true } cargo { module = "src/main/rust/shadowsocks-rust" libname = "sslocal" targets = if (targetAbi != null) listOf(targetAbi) else listOf("arm", "arm64", "x86", "x86_64") profile = findProperty("CARGO_PROFILE")?.toString() ?: currentFlavor extraCargoBuildArguments = listOf("--bin", libname!!) featureSpec.noDefaultBut(arrayOf( "stream-cipher", "aead-cipher-extra", "logging", "local-flow-stat", "local-dns", "aead-cipher-2022", )) exec = { spec, toolchain -> run { try { Runtime.getRuntime().exec(arrayOf("python3", "-V")) spec.environment("RUST_ANDROID_GRADLE_PYTHON_COMMAND", "python3") project.logger.lifecycle("Python 3 detected.") } catch (e: java.io.IOException) { project.logger.lifecycle("No python 3 detected.") try { Runtime.getRuntime().exec(arrayOf("python", "-V")) spec.environment("RUST_ANDROID_GRADLE_PYTHON_COMMAND", "python") project.logger.lifecycle("Python detected.") } catch (e: java.io.IOException) { throw GradleException("No any python version detected. You should install the python first to compile project.") } } // https://developer.android.com/guide/practices/page-sizes#other-build-systems spec.environment("RUST_ANDROID_GRADLE_CC_LINK_ARG", "-Wl,-z,max-page-size=16384,-soname,lib$libname.so") spec.environment("RUST_ANDROID_GRADLE_LINKER_WRAPPER_PY", "$projectDir/$module/../linker-wrapper.py") spec.environment("RUST_ANDROID_GRADLE_TARGET", "target/${toolchain.target}/$profile/lib$libname.so") } } } tasks.whenTaskAdded { when (name) { "mergeDebugJniLibFolders", "mergeReleaseJniLibFolders" -> { dependsOn("cargoBuild") inputs.dir(layout.buildDirectory.dir("rustJniLibs/android")) } } } tasks.register("cargoClean") { executable("cargo") // cargo.cargoCommand args("clean") workingDir("$projectDir/${cargo.module}") } tasks.clean.dependsOn("cargoClean") dependencies { api(project(":plugin")) api(libs.androidx.core.ktx) api(libs.androidx.lifecycle.livedata.core.ktx) api(libs.androidx.preference) api(libs.androidx.room.runtime) api(libs.androidx.work.multiprocess) api(libs.androidx.work.runtime.ktx) api(libs.dnsjava) api(libs.firebase.analytics) api(libs.firebase.crashlytics) api(libs.kotlinx.coroutines.android) api(libs.kotlinx.coroutines.play.services) api(libs.material) api(libs.play.services.oss.licenses) api(libs.timber) coreLibraryDesugaring(libs.desugar) ksp(libs.androidx.room.compiler) testImplementation(libs.junit) androidTestImplementation(libs.androidx.espresso.core) androidTestImplementation(libs.androidx.junit.ktx) androidTestImplementation(libs.androidx.room.testing) androidTestImplementation(libs.androidx.test.runner) } ================================================ FILE: core/gfwlist/gen.pl ================================================ #!/usr/bin/env perl ## ArchLinux install package via pacman: perl-net-cidr-lite use strict; use warnings; use Net::CIDR::Lite; my $cidr = Net::CIDR::Lite->new; while (my $line=<>) { $cidr->add($line); } foreach my $line( @{$cidr->list} ) { print "$line\n"; } ================================================ FILE: core/gfwlist/gen.py ================================================ #!/usr/bin/python # -*- encoding: utf8 -*- import sys import IPy def main(): china_list_set = IPy.IPSet() for line in sys.stdin: china_list_set.add(IPy.IP(line)) # 输出结果 for ip in china_list_set: print '' + str(ip) + '' if __name__ == "__main__": main() ================================================ FILE: core/gfwlist/parse.py ================================================ #!/usr/bin/python # -*- coding: utf-8 -*- import pkgutil import urlparse import socket import logging from argparse import ArgumentParser from datetime import date __all__ = ['main'] def parse_args(): parser = ArgumentParser() parser.add_argument('-i', '--input', dest='input', required=True, help='path to gfwlist', metavar='GFWLIST') parser.add_argument('-f', '--file', dest='output', required=True, help='path to output acl', metavar='ACL') return parser.parse_args() def decode_gfwlist(content): # decode base64 if have to try: return content.decode('base64') except: return content def get_hostname(something): try: # quite enough for GFW if not something.startswith('http:'): something = 'http://' + something r = urlparse.urlparse(something) return r.hostname except Exception as e: logging.error(e) return None def add_domain_to_set(s, something): hostname = get_hostname(something) if hostname is not None: if hostname.startswith('.'): hostname = hostname.lstrip('.') if hostname.endswith('/'): hostname = hostname.rstrip('/') if hostname: s.add(hostname) def parse_gfwlist(content): gfwlist = content.splitlines(False) domains = set() for line in gfwlist: if line.find('.*') >= 0: continue elif line.find('*') >= 0: line = line.replace('*', '/') if line.startswith('!'): continue elif line.startswith('['): continue elif line.startswith('@'): # ignore white list continue elif line.startswith('||'): add_domain_to_set(domains, line.lstrip('||')) elif line.startswith('|'): add_domain_to_set(domains, line.lstrip('|')) elif line.startswith('.'): add_domain_to_set(domains, line.lstrip('.')) else: add_domain_to_set(domains, line) # TODO: reduce ['www.google.com', 'google.com'] to ['google.com'] return domains def generate_acl(domains): header ="""# # GFW list from https://github.com/gfwlist/gfwlist/blob/master/gfwlist.txt # updated on DATE # [bypass_all] [proxy_list] """ header = header.replace('DATE', str(date.today())) proxy_content = "" ip_content = "" for domain in sorted(domains): try: socket.inet_aton(domain) ip_content += (domain + "\n") except socket.error: domain = domain.replace('.', '\.') proxy_content += ('(?:^|\.)' + domain + '$\n') proxy_content = header + ip_content + proxy_content return proxy_content def main(): args = parse_args() with open(args.input, 'rb') as f: content = f.read() content = decode_gfwlist(content) domains = parse_gfwlist(content) acl_content = generate_acl(domains) with open(args.output, 'wb') as f: f.write(acl_content) if __name__ == '__main__': main() ================================================ FILE: core/proguard-rules.pro ================================================ # Add project specific ProGuard rules here. # You can control the set of applied configuration files using the # proguardFiles setting in build.gradle. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html # If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #} # Uncomment this to preserve the line number information for # debugging stack traces. -keepattributes SourceFile,LineNumberTable -dontobfuscate -dontwarn lombok.Generated -dontwarn org.slf4j.impl.StaticLoggerBinder -dontwarn org.xbill.DNS.spi.DnsjavaInetAddressResolverProvider -dontwarn sun.net.spi.nameservice.NameServiceDescriptor # If you keep the line number information, uncomment this to # hide the original source file name. #-renamesourcefileattribute SourceFile ================================================ FILE: core/schemas/com.github.shadowsocks.database.PrivateDatabase/26.json ================================================ { "formatVersion": 1, "database": { "version": 26, "identityHash": "a69accf94393d71abdb60873d4ea74a2", "entities": [ { "tableName": "Profile", "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT, `host` TEXT NOT NULL, `remotePort` INTEGER NOT NULL, `password` TEXT NOT NULL, `method` TEXT NOT NULL, `route` TEXT NOT NULL, `remoteDns` TEXT NOT NULL, `proxyApps` INTEGER NOT NULL, `bypass` INTEGER NOT NULL, `udpdns` INTEGER NOT NULL, `ipv6` INTEGER NOT NULL, `individual` TEXT NOT NULL, `tx` INTEGER NOT NULL, `rx` INTEGER NOT NULL, `userOrder` INTEGER NOT NULL, `plugin` TEXT)", "fields": [ { "fieldPath": "id", "columnName": "id", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "name", "columnName": "name", "affinity": "TEXT", "notNull": false }, { "fieldPath": "host", "columnName": "host", "affinity": "TEXT", "notNull": true }, { "fieldPath": "remotePort", "columnName": "remotePort", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "password", "columnName": "password", "affinity": "TEXT", "notNull": true }, { "fieldPath": "method", "columnName": "method", "affinity": "TEXT", "notNull": true }, { "fieldPath": "route", "columnName": "route", "affinity": "TEXT", "notNull": true }, { "fieldPath": "remoteDns", "columnName": "remoteDns", "affinity": "TEXT", "notNull": true }, { "fieldPath": "proxyApps", "columnName": "proxyApps", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "bypass", "columnName": "bypass", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "udpdns", "columnName": "udpdns", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "ipv6", "columnName": "ipv6", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "individual", "columnName": "individual", "affinity": "TEXT", "notNull": true }, { "fieldPath": "tx", "columnName": "tx", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "rx", "columnName": "rx", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "userOrder", "columnName": "userOrder", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "plugin", "columnName": "plugin", "affinity": "TEXT", "notNull": false } ], "primaryKey": { "columnNames": [ "id" ], "autoGenerate": true }, "indices": [], "foreignKeys": [] }, { "tableName": "KeyValuePair", "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`key` TEXT NOT NULL, `valueType` INTEGER NOT NULL, `value` BLOB NOT NULL, PRIMARY KEY(`key`))", "fields": [ { "fieldPath": "key", "columnName": "key", "affinity": "TEXT", "notNull": true }, { "fieldPath": "valueType", "columnName": "valueType", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "value", "columnName": "value", "affinity": "BLOB", "notNull": true } ], "primaryKey": { "columnNames": [ "key" ], "autoGenerate": false }, "indices": [], "foreignKeys": [] } ], "setupQueries": [ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, \"a69accf94393d71abdb60873d4ea74a2\")" ] } } ================================================ FILE: core/schemas/com.github.shadowsocks.database.PrivateDatabase/27.json ================================================ { "formatVersion": 1, "database": { "version": 27, "identityHash": "8743c2e56bdbdabca7fcb89dff5434ba", "entities": [ { "tableName": "Profile", "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT, `host` TEXT NOT NULL, `remotePort` INTEGER NOT NULL, `password` TEXT NOT NULL, `method` TEXT NOT NULL, `route` TEXT NOT NULL, `remoteDns` TEXT NOT NULL, `proxyApps` INTEGER NOT NULL, `bypass` INTEGER NOT NULL, `udpdns` INTEGER NOT NULL, `ipv6` INTEGER NOT NULL, `individual` TEXT NOT NULL, `tx` INTEGER NOT NULL, `rx` INTEGER NOT NULL, `userOrder` INTEGER NOT NULL, `plugin` TEXT, `udpFallback` INTEGER)", "fields": [ { "fieldPath": "id", "columnName": "id", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "name", "columnName": "name", "affinity": "TEXT", "notNull": false }, { "fieldPath": "host", "columnName": "host", "affinity": "TEXT", "notNull": true }, { "fieldPath": "remotePort", "columnName": "remotePort", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "password", "columnName": "password", "affinity": "TEXT", "notNull": true }, { "fieldPath": "method", "columnName": "method", "affinity": "TEXT", "notNull": true }, { "fieldPath": "route", "columnName": "route", "affinity": "TEXT", "notNull": true }, { "fieldPath": "remoteDns", "columnName": "remoteDns", "affinity": "TEXT", "notNull": true }, { "fieldPath": "proxyApps", "columnName": "proxyApps", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "bypass", "columnName": "bypass", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "udpdns", "columnName": "udpdns", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "ipv6", "columnName": "ipv6", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "individual", "columnName": "individual", "affinity": "TEXT", "notNull": true }, { "fieldPath": "tx", "columnName": "tx", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "rx", "columnName": "rx", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "userOrder", "columnName": "userOrder", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "plugin", "columnName": "plugin", "affinity": "TEXT", "notNull": false }, { "fieldPath": "udpFallback", "columnName": "udpFallback", "affinity": "INTEGER", "notNull": false } ], "primaryKey": { "columnNames": [ "id" ], "autoGenerate": true }, "indices": [], "foreignKeys": [] }, { "tableName": "KeyValuePair", "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`key` TEXT NOT NULL, `valueType` INTEGER NOT NULL, `value` BLOB NOT NULL, PRIMARY KEY(`key`))", "fields": [ { "fieldPath": "key", "columnName": "key", "affinity": "TEXT", "notNull": true }, { "fieldPath": "valueType", "columnName": "valueType", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "value", "columnName": "value", "affinity": "BLOB", "notNull": true } ], "primaryKey": { "columnNames": [ "key" ], "autoGenerate": false }, "indices": [], "foreignKeys": [] } ], "setupQueries": [ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, \"8743c2e56bdbdabca7fcb89dff5434ba\")" ] } } ================================================ FILE: core/schemas/com.github.shadowsocks.database.PrivateDatabase/28.json ================================================ { "formatVersion": 1, "database": { "version": 28, "identityHash": "b60ecca4d684ffe73173478bffd50a17", "entities": [ { "tableName": "Profile", "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT, `host` TEXT NOT NULL, `remotePort` INTEGER NOT NULL, `password` TEXT NOT NULL, `method` TEXT NOT NULL, `route` TEXT NOT NULL, `remoteDns` TEXT NOT NULL, `proxyApps` INTEGER NOT NULL, `bypass` INTEGER NOT NULL, `udpdns` INTEGER NOT NULL, `ipv6` INTEGER NOT NULL, `metered` INTEGER NOT NULL, `individual` TEXT NOT NULL, `tx` INTEGER NOT NULL, `rx` INTEGER NOT NULL, `userOrder` INTEGER NOT NULL, `plugin` TEXT, `udpFallback` INTEGER)", "fields": [ { "fieldPath": "id", "columnName": "id", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "name", "columnName": "name", "affinity": "TEXT", "notNull": false }, { "fieldPath": "host", "columnName": "host", "affinity": "TEXT", "notNull": true }, { "fieldPath": "remotePort", "columnName": "remotePort", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "password", "columnName": "password", "affinity": "TEXT", "notNull": true }, { "fieldPath": "method", "columnName": "method", "affinity": "TEXT", "notNull": true }, { "fieldPath": "route", "columnName": "route", "affinity": "TEXT", "notNull": true }, { "fieldPath": "remoteDns", "columnName": "remoteDns", "affinity": "TEXT", "notNull": true }, { "fieldPath": "proxyApps", "columnName": "proxyApps", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "bypass", "columnName": "bypass", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "udpdns", "columnName": "udpdns", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "ipv6", "columnName": "ipv6", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "metered", "columnName": "metered", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "individual", "columnName": "individual", "affinity": "TEXT", "notNull": true }, { "fieldPath": "tx", "columnName": "tx", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "rx", "columnName": "rx", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "userOrder", "columnName": "userOrder", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "plugin", "columnName": "plugin", "affinity": "TEXT", "notNull": false }, { "fieldPath": "udpFallback", "columnName": "udpFallback", "affinity": "INTEGER", "notNull": false } ], "primaryKey": { "columnNames": [ "id" ], "autoGenerate": true }, "indices": [], "foreignKeys": [] }, { "tableName": "KeyValuePair", "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`key` TEXT NOT NULL, `valueType` INTEGER NOT NULL, `value` BLOB NOT NULL, PRIMARY KEY(`key`))", "fields": [ { "fieldPath": "key", "columnName": "key", "affinity": "TEXT", "notNull": true }, { "fieldPath": "valueType", "columnName": "valueType", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "value", "columnName": "value", "affinity": "BLOB", "notNull": true } ], "primaryKey": { "columnNames": [ "key" ], "autoGenerate": false }, "indices": [], "foreignKeys": [] } ], "setupQueries": [ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, \"b60ecca4d684ffe73173478bffd50a17\")" ] } } ================================================ FILE: core/schemas/com.github.shadowsocks.database.PrivateDatabase/29.json ================================================ { "formatVersion": 1, "database": { "version": 29, "identityHash": "5b5c55a1277c63e14416316f9198ed43", "entities": [ { "tableName": "Profile", "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT, `host` TEXT NOT NULL, `remotePort` INTEGER NOT NULL, `password` TEXT NOT NULL, `method` TEXT NOT NULL, `route` TEXT NOT NULL, `remoteDns` TEXT NOT NULL, `proxyApps` INTEGER NOT NULL, `bypass` INTEGER NOT NULL, `udpdns` INTEGER NOT NULL, `ipv6` INTEGER NOT NULL, `metered` INTEGER NOT NULL, `individual` TEXT NOT NULL, `plugin` TEXT, `udpFallback` INTEGER, `subscription` INTEGER NOT NULL, `tx` INTEGER NOT NULL, `rx` INTEGER NOT NULL, `userOrder` INTEGER NOT NULL)", "fields": [ { "fieldPath": "id", "columnName": "id", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "name", "columnName": "name", "affinity": "TEXT", "notNull": false }, { "fieldPath": "host", "columnName": "host", "affinity": "TEXT", "notNull": true }, { "fieldPath": "remotePort", "columnName": "remotePort", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "password", "columnName": "password", "affinity": "TEXT", "notNull": true }, { "fieldPath": "method", "columnName": "method", "affinity": "TEXT", "notNull": true }, { "fieldPath": "route", "columnName": "route", "affinity": "TEXT", "notNull": true }, { "fieldPath": "remoteDns", "columnName": "remoteDns", "affinity": "TEXT", "notNull": true }, { "fieldPath": "proxyApps", "columnName": "proxyApps", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "bypass", "columnName": "bypass", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "udpdns", "columnName": "udpdns", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "ipv6", "columnName": "ipv6", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "metered", "columnName": "metered", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "individual", "columnName": "individual", "affinity": "TEXT", "notNull": true }, { "fieldPath": "plugin", "columnName": "plugin", "affinity": "TEXT", "notNull": false }, { "fieldPath": "udpFallback", "columnName": "udpFallback", "affinity": "INTEGER", "notNull": false }, { "fieldPath": "subscription", "columnName": "subscription", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "tx", "columnName": "tx", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "rx", "columnName": "rx", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "userOrder", "columnName": "userOrder", "affinity": "INTEGER", "notNull": true } ], "primaryKey": { "columnNames": [ "id" ], "autoGenerate": true }, "indices": [], "foreignKeys": [] }, { "tableName": "KeyValuePair", "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`key` TEXT NOT NULL, `valueType` INTEGER NOT NULL, `value` BLOB NOT NULL, PRIMARY KEY(`key`))", "fields": [ { "fieldPath": "key", "columnName": "key", "affinity": "TEXT", "notNull": true }, { "fieldPath": "valueType", "columnName": "valueType", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "value", "columnName": "value", "affinity": "BLOB", "notNull": true } ], "primaryKey": { "columnNames": [ "key" ], "autoGenerate": false }, "indices": [], "foreignKeys": [] } ], "views": [], "setupQueries": [ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '5b5c55a1277c63e14416316f9198ed43')" ] } } ================================================ FILE: core/schemas/com.github.shadowsocks.database.PublicDatabase/3.json ================================================ { "formatVersion": 1, "database": { "version": 3, "identityHash": "f1aab1fb633378621635c344dbc8ac7b", "entities": [ { "tableName": "KeyValuePair", "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`key` TEXT NOT NULL, `valueType` INTEGER NOT NULL, `value` BLOB NOT NULL, PRIMARY KEY(`key`))", "fields": [ { "fieldPath": "key", "columnName": "key", "affinity": "TEXT", "notNull": true }, { "fieldPath": "valueType", "columnName": "valueType", "affinity": "INTEGER", "notNull": true }, { "fieldPath": "value", "columnName": "value", "affinity": "BLOB", "notNull": true } ], "primaryKey": { "columnNames": [ "key" ], "autoGenerate": false }, "indices": [], "foreignKeys": [] } ], "setupQueries": [ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, \"f1aab1fb633378621635c344dbc8ac7b\")" ] } } ================================================ FILE: core/src/androidTest/java/com/github/shadowsocks/acl/AclTest.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.acl import org.junit.Assert import org.junit.Test class AclTest { companion object { const val BYPASS_BASE = """[bypass_all] [proxy_list]""" const val INPUT1 = """$BYPASS_BASE 1.0.1.0/24 2000::/8 (?:^|\.)4tern\.com$ """ const val INPUT2 = """[proxy_all] [bypass_list] 10.3.0.0/16 10.0.0.0/8 (?:^|\.)chrome\.com$ [proxy_list] # ignored 0.0.0.0/0 (?:^|\.)about\.google$ """ } @Test fun parse() { Assert.assertEquals(INPUT1, Acl().fromReader(INPUT1.reader()).toString()) Assert.assertEquals(INPUT2, Acl().fromReader(INPUT2.reader()).toString()) } } ================================================ FILE: core/src/androidTest/java/com/github/shadowsocks/database/MigrationTest.kt ================================================ /******************************************************************************* * * * Copyright (C) 2019 by Max Lv * * Copyright (C) 2019 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.database import androidx.room.testing.MigrationTestHelper import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.platform.app.InstrumentationRegistry import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import java.io.IOException @RunWith(AndroidJUnit4::class) class MigrationTest { companion object { private const val TEST_DB = "migration-test" } @get:Rule val privateDatabase = MigrationTestHelper(InstrumentationRegistry.getInstrumentation(), PrivateDatabase::class.java.canonicalName, FrameworkSQLiteOpenHelperFactory()) @Test @Throws(IOException::class) fun migrate27() { val db = privateDatabase.createDatabase(TEST_DB, 26) db.close() privateDatabase.runMigrationsAndValidate(TEST_DB, 27, true, PrivateDatabase.Migration27) } @Test @Throws(IOException::class) fun migrate28() { val db = privateDatabase.createDatabase(TEST_DB, 27) db.close() privateDatabase.runMigrationsAndValidate(TEST_DB, 28, true, PrivateDatabase.Migration28) } } ================================================ FILE: core/src/androidTest/java/com/github/shadowsocks/database/ProfileTest.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.database import androidx.core.net.toUri import org.junit.Assert import org.junit.Test class ProfileTest { @Test fun parsing() { val results = Profile.findAllUrls("garble ss://YmYtY2ZiOnRlc3RAMTkyLjE2OC4xMDAuMTo4ODg4#example-server garble") .toList() Assert.assertEquals(1, results.size) Assert.assertEquals("ss://YmYtY2ZiOnRlc3Q@192.168.100.1:8888#example-server".toUri(), results.single().toUri()) } } ================================================ FILE: core/src/androidTest/java/com/github/shadowsocks/net/SubnetTest.kt ================================================ package com.github.shadowsocks.net import android.net.InetAddresses.parseNumericAddress import org.junit.Assert import org.junit.Test import java.net.InetAddress class SubnetTest { @Test fun parsingAndEquals() { Assert.assertEquals(Subnet(InetAddress.getByName("1.10.11.12"), 25), Subnet.fromString("1.10.11.12/25")) Assert.assertEquals(Subnet(InetAddress.getByName("12.118.130.86"), 32), Subnet.fromString("12.118.130.86")) Assert.assertEquals(Subnet(InetAddress.getByName("caec:cec6:c4ef:bb7b:1a78:d055:216d:3a78"), 96), Subnet.fromString("caec:cec6:c4ef:bb7b:1a78:d055:216d:3a78/96")) Assert.assertEquals(Subnet(InetAddress.getByName("be37:44bd:8630:7a0:2a3d:ff95:dd33:42f0"), 128), Subnet.fromString("be37:44bd:8630:7a0:2a3d:ff95:dd33:42f0")) Assert.assertNotEquals(Subnet.fromString("1.2.3.4/12"), Subnet.fromString("1.2.3.5/12")) } @Test fun invalidParsings() { Assert.assertEquals(null, Subnet.fromString("1.2.3.456")) Assert.assertEquals(null, Subnet.fromString("ffff::f0000")) Assert.assertEquals(null, Subnet.fromString("caec:cec6:c4ef:bb7b:1a78:d055:216d:3a78/129")) Assert.assertEquals(null, Subnet.fromString("caec:cec6:c4ef:bb7b:1a78:d055:216d:3a78/129")) Assert.assertEquals(null, Subnet.fromString("caec:cec6:c4ef:bb7b:1a78:d055:216d:3a78/-99")) Assert.assertEquals(null, Subnet.fromString("caec:cec6:c4ef:bb7b:1a78:d055:216d:3a78/1/0")) } @Test fun matching1() { val matcher = Subnet.fromString("1.10.11.12/25")!!.toImmutable() Assert.assertFalse(matcher.matches(parseNumericAddress("1.10.10.12").address)) Assert.assertTrue(matcher.matches(parseNumericAddress("1.10.11.13").address)) Assert.assertFalse(matcher.matches(parseNumericAddress("1.10.11.212").address)) } @Test fun matching2() { val matcher = Subnet.fromString("14.208.0.0/12")!!.toImmutable() Assert.assertTrue(matcher.matches(parseNumericAddress("14.215.178.36").address)) Assert.assertTrue(matcher.matches(parseNumericAddress("14.215.178.37").address)) Assert.assertFalse(matcher.matches(parseNumericAddress("1.10.11.212").address)) } } ================================================ FILE: core/src/main/AndroidManifest.xml ================================================ ================================================ FILE: core/src/main/aidl/com/github/shadowsocks/aidl/IShadowsocksService.aidl ================================================ package com.github.shadowsocks.aidl; import com.github.shadowsocks.aidl.IShadowsocksServiceCallback; interface IShadowsocksService { int getState(); String getProfileName(); void registerCallback(in IShadowsocksServiceCallback cb); void startListeningForBandwidth(in IShadowsocksServiceCallback cb, long timeout); oneway void stopListeningForBandwidth(in IShadowsocksServiceCallback cb); oneway void unregisterCallback(in IShadowsocksServiceCallback cb); } ================================================ FILE: core/src/main/aidl/com/github/shadowsocks/aidl/IShadowsocksServiceCallback.aidl ================================================ package com.github.shadowsocks.aidl; import com.github.shadowsocks.aidl.TrafficStats; oneway interface IShadowsocksServiceCallback { void stateChanged(int state, String profileName, String msg); void trafficUpdated(long profileId, in TrafficStats stats); // Traffic data has persisted to database, listener should refetch their data from database void trafficPersisted(long profileId); } ================================================ FILE: core/src/main/aidl/com/github/shadowsocks/aidl/TrafficStats.aidl ================================================ package com.github.shadowsocks.aidl; parcelable TrafficStats; ================================================ FILE: core/src/main/assets/acl/bypass-china.acl ================================================ [proxy_all] [bypass_list] 1.0.1.0/24 1.0.2.0/23 1.0.8.0/21 1.0.32.0/19 1.1.0.0/24 1.1.2.0/23 1.1.4.0/22 1.1.8.0/21 1.1.16.0/20 1.1.32.0/19 1.2.0.0/23 1.2.2.0/24 1.2.4.0/22 1.2.8.0/21 1.2.16.0/20 1.2.32.0/19 1.2.64.0/18 1.3.0.0/16 1.4.1.0/24 1.4.2.0/23 1.4.4.0/22 1.4.8.0/21 1.4.16.0/20 1.4.32.0/19 1.4.64.0/18 1.8.0.0/16 1.10.0.0/21 1.10.8.0/23 1.10.11.0/24 1.10.12.0/22 1.10.16.0/20 1.10.32.0/19 1.10.64.0/18 1.12.0.0/14 1.24.0.0/13 1.45.0.0/16 1.48.0.0/14 1.56.0.0/13 1.68.0.0/14 1.80.0.0/12 1.116.0.0/14 1.180.0.0/14 1.184.0.0/15 1.188.0.0/14 1.192.0.0/13 1.202.0.0/15 1.204.0.0/14 14.0.0.0/21 14.0.12.0/22 14.1.0.0/22 14.1.24.0/22 14.1.96.0/22 14.1.108.0/22 14.16.0.0/12 14.102.128.0/22 14.102.156.0/22 14.102.180.0/22 14.103.0.0/16 14.104.0.0/13 14.112.0.0/12 14.130.0.0/15 14.134.0.0/15 14.144.0.0/12 14.192.60.0/22 14.192.76.0/22 14.196.0.0/15 14.204.0.0/15 14.208.0.0/12 27.0.128.0/21 27.0.160.0/21 27.0.188.0/22 27.0.204.0/22 27.0.208.0/21 27.8.0.0/13 27.16.0.0/12 27.34.232.0/21 27.36.0.0/14 27.40.0.0/13 27.50.40.0/21 27.50.128.0/17 27.54.72.0/21 27.54.152.0/21 27.54.192.0/18 27.98.208.0/20 27.98.224.0/19 27.99.128.0/17 27.103.0.0/16 27.106.128.0/18 27.106.204.0/22 27.109.32.0/19 27.109.124.0/22 27.112.0.0/18 27.112.80.0/20 27.112.112.0/21 27.113.128.0/18 27.115.0.0/17 27.116.44.0/22 27.121.72.0/21 27.121.120.0/21 27.128.0.0/15 27.131.220.0/22 27.144.0.0/16 27.148.0.0/14 27.152.0.0/13 27.184.0.0/13 27.192.0.0/11 27.224.0.0/14 36.0.0.0/22 36.0.8.0/21 36.0.16.0/20 36.0.32.0/19 36.0.64.0/18 36.0.128.0/17 36.1.0.0/16 36.4.0.0/14 36.16.0.0/12 36.32.0.0/14 36.36.0.0/16 36.37.0.0/19 36.37.36.0/23 36.37.39.0/24 36.37.40.0/21 36.37.48.0/20 36.40.0.0/13 36.48.0.0/15 36.51.0.0/16 36.56.0.0/13 36.96.0.0/11 36.128.0.0/10 36.192.0.0/11 36.248.0.0/14 36.254.0.0/16 36.255.116.0/22 36.255.128.0/22 36.255.164.0/22 36.255.172.0/22 36.255.176.0/22 39.0.0.0/24 39.0.2.0/23 39.0.4.0/22 39.0.8.0/21 39.0.16.0/20 39.0.32.0/19 39.0.64.0/18 39.0.128.0/17 39.64.0.0/11 39.96.0.0/13 39.104.0.0/14 39.108.0.0/16 39.128.0.0/10 40.72.0.0/15 40.125.128.0/17 40.126.64.0/18 42.0.0.0/22 42.0.8.0/21 42.0.16.0/21 42.0.24.0/22 42.0.32.0/19 42.0.128.0/17 42.1.0.0/19 42.1.32.0/20 42.1.48.0/21 42.1.56.0/22 42.1.128.0/17 42.4.0.0/14 42.48.0.0/13 42.56.0.0/14 42.62.0.0/17 42.62.128.0/19 42.62.160.0/20 42.62.180.0/22 42.62.184.0/21 42.63.0.0/16 42.80.0.0/15 42.83.64.0/20 42.83.80.0/22 42.83.88.0/21 42.83.96.0/19 42.83.128.0/17 42.84.0.0/14 42.88.0.0/13 42.96.64.0/19 42.96.96.0/21 42.96.108.0/22 42.96.112.0/20 42.96.128.0/17 42.97.0.0/16 42.99.0.0/18 42.99.64.0/19 42.99.96.0/20 42.99.112.0/22 42.99.120.0/21 42.100.0.0/14 42.120.0.0/15 42.122.0.0/16 42.123.0.0/19 42.123.36.0/22 42.123.40.0/21 42.123.48.0/20 42.123.64.0/18 42.123.128.0/17 42.128.0.0/12 42.156.0.0/19 42.156.36.0/22 42.156.40.0/21 42.156.48.0/20 42.156.64.0/18 42.156.128.0/17 42.157.0.0/16 42.158.0.0/15 42.160.0.0/12 42.176.0.0/13 42.184.0.0/15 42.186.0.0/16 42.187.0.0/18 42.187.64.0/19 42.187.96.0/20 42.187.112.0/21 42.187.120.0/22 42.187.128.0/17 42.192.0.0/13 42.201.0.0/17 42.202.0.0/15 42.204.0.0/14 42.208.0.0/12 42.224.0.0/12 42.240.0.0/16 42.242.0.0/15 42.244.0.0/14 42.248.0.0/13 43.224.12.0/22 43.224.24.0/22 43.224.44.0/22 43.224.52.0/22 43.224.56.0/22 43.224.64.0/21 43.224.72.0/22 43.224.80.0/22 43.224.100.0/22 43.224.144.0/22 43.224.160.0/22 43.224.176.0/22 43.224.184.0/22 43.224.200.0/21 43.224.208.0/21 43.224.216.0/22 43.224.240.0/22 43.225.76.0/22 43.225.84.0/22 43.225.120.0/21 43.225.140.0/22 43.225.172.0/22 43.225.180.0/22 43.225.208.0/22 43.225.216.0/21 43.225.224.0/20 43.225.240.0/21 43.225.252.0/22 43.226.32.0/19 43.226.64.0/19 43.226.96.0/20 43.226.112.0/21 43.226.120.0/22 43.226.128.0/18 43.226.192.0/20 43.226.208.0/21 43.226.236.0/22 43.226.240.0/20 43.227.0.0/21 43.227.8.0/22 43.227.32.0/19 43.227.64.0/19 43.227.96.0/21 43.227.104.0/22 43.227.136.0/21 43.227.144.0/22 43.227.152.0/21 43.227.160.0/20 43.227.176.0/21 43.227.188.0/22 43.227.192.0/19 43.227.232.0/22 43.227.248.0/21 43.228.0.0/18 43.228.64.0/21 43.228.76.0/22 43.228.100.0/22 43.228.116.0/22 43.228.120.0/22 43.228.132.0/22 43.228.136.0/22 43.228.148.0/22 43.228.152.0/22 43.228.188.0/22 43.229.40.0/22 43.229.48.0/22 43.229.56.0/22 43.229.96.0/22 43.229.120.0/22 43.229.136.0/21 43.229.144.0/22 43.229.168.0/21 43.229.176.0/20 43.229.192.0/21 43.229.216.0/21 43.229.232.0/21 43.230.20.0/22 43.230.32.0/22 43.230.68.0/22 43.230.72.0/22 43.230.84.0/22 43.230.124.0/22 43.230.136.0/22 43.230.168.0/22 43.230.220.0/22 43.230.224.0/19 43.231.32.0/20 43.231.80.0/20 43.231.96.0/20 43.231.136.0/21 43.231.144.0/20 43.231.160.0/20 43.231.176.0/21 43.236.0.0/15 43.238.0.0/16 43.239.0.0/19 43.239.32.0/20 43.239.48.0/22 43.239.116.0/22 43.239.120.0/22 43.239.172.0/22 43.239.176.0/22 43.240.0.0/22 43.240.56.0/21 43.240.68.0/22 43.240.72.0/21 43.240.84.0/22 43.240.124.0/22 43.240.128.0/21 43.240.136.0/22 43.240.144.0/22 43.240.156.0/22 43.240.160.0/19 43.240.192.0/19 43.240.236.0/22 43.240.240.0/20 43.241.0.0/20 43.241.16.0/21 43.241.48.0/22 43.241.76.0/22 43.241.80.0/20 43.241.112.0/22 43.241.168.0/21 43.241.176.0/21 43.241.184.0/22 43.241.196.0/22 43.241.208.0/20 43.241.224.0/20 43.241.240.0/22 43.241.248.0/21 43.242.8.0/21 43.242.16.0/20 43.242.44.0/22 43.242.48.0/20 43.242.64.0/22 43.242.72.0/21 43.242.80.0/20 43.242.96.0/22 43.242.144.0/20 43.242.160.0/21 43.242.168.0/22 43.242.180.0/22 43.242.188.0/22 43.242.192.0/21 43.242.204.0/22 43.242.216.0/21 43.242.252.0/22 43.243.4.0/22 43.243.8.0/21 43.243.16.0/22 43.243.24.0/22 43.243.88.0/22 43.243.128.0/22 43.243.136.0/22 43.243.144.0/21 43.243.156.0/22 43.243.168.0/22 43.243.180.0/22 43.243.188.0/22 43.243.228.0/22 43.243.232.0/22 43.243.244.0/22 43.246.0.0/18 43.246.64.0/19 43.246.96.0/22 43.246.112.0/22 43.246.212.0/22 43.246.228.0/22 43.247.4.0/22 43.247.8.0/22 43.247.44.0/22 43.247.48.0/22 43.247.68.0/22 43.247.76.0/22 43.247.84.0/22 43.247.88.0/21 43.247.96.0/21 43.247.108.0/22 43.247.112.0/22 43.247.148.0/22 43.247.152.0/22 43.247.176.0/20 43.247.196.0/22 43.247.200.0/21 43.247.208.0/20 43.247.224.0/19 43.248.0.0/21 43.248.20.0/22 43.248.28.0/22 43.248.48.0/22 43.248.76.0/22 43.248.80.0/20 43.248.96.0/19 43.248.128.0/20 43.248.144.0/21 43.248.176.0/20 43.248.192.0/20 43.248.208.0/22 43.248.228.0/22 43.248.232.0/22 43.248.244.0/22 43.249.4.0/22 43.249.8.0/22 43.249.120.0/22 43.249.132.0/22 43.249.136.0/22 43.249.144.0/20 43.249.160.0/21 43.249.168.0/22 43.249.192.0/22 43.249.236.0/22 43.250.4.0/22 43.250.12.0/22 43.250.16.0/21 43.250.28.0/22 43.250.32.0/21 43.250.72.0/22 43.250.96.0/20 43.250.112.0/21 43.250.128.0/22 43.250.144.0/21 43.250.160.0/22 43.250.168.0/21 43.250.176.0/22 43.250.200.0/22 43.250.212.0/22 43.250.216.0/21 43.250.236.0/22 43.250.244.0/22 43.251.4.0/22 43.251.8.0/21 43.251.36.0/22 43.251.100.0/22 43.251.116.0/22 43.251.192.0/22 43.251.232.0/21 43.251.244.0/22 43.252.40.0/22 43.252.48.0/22 43.252.56.0/22 43.252.224.0/22 43.254.0.0/21 43.254.8.0/22 43.254.24.0/22 43.254.36.0/22 43.254.44.0/22 43.254.52.0/22 43.254.64.0/22 43.254.72.0/22 43.254.84.0/22 43.254.88.0/21 43.254.100.0/22 43.254.104.0/22 43.254.112.0/21 43.254.128.0/22 43.254.136.0/21 43.254.144.0/20 43.254.168.0/21 43.254.180.0/22 43.254.184.0/21 43.254.192.0/21 43.254.200.0/22 43.254.208.0/22 43.254.220.0/22 43.254.224.0/20 43.254.240.0/22 43.254.248.0/21 43.255.0.0/21 43.255.8.0/22 43.255.16.0/22 43.255.48.0/22 43.255.64.0/20 43.255.84.0/22 43.255.96.0/22 43.255.108.0/22 43.255.144.0/22 43.255.168.0/22 43.255.176.0/22 43.255.184.0/22 43.255.192.0/22 43.255.200.0/21 43.255.208.0/21 43.255.224.0/21 43.255.232.0/22 43.255.244.0/22 45.40.192.0/18 45.65.16.0/20 45.112.132.0/22 45.112.188.0/22 45.112.208.0/20 45.112.228.0/22 45.112.232.0/21 45.113.12.0/22 45.113.16.0/20 45.113.40.0/22 45.113.52.0/22 45.113.56.0/22 45.113.72.0/22 45.113.144.0/21 45.113.168.0/22 45.113.176.0/22 45.113.184.0/22 45.113.200.0/21 45.113.208.0/20 45.113.240.0/22 45.113.252.0/22 45.114.0.0/22 45.114.12.0/22 45.114.32.0/22 45.114.40.0/22 45.114.52.0/22 45.114.96.0/22 45.114.104.0/21 45.114.124.0/22 45.114.136.0/22 45.114.196.0/22 45.114.200.0/22 45.114.228.0/22 45.114.252.0/22 45.115.44.0/22 45.115.100.0/22 45.115.120.0/22 45.115.132.0/22 45.115.144.0/22 45.115.156.0/22 45.115.164.0/22 45.115.200.0/22 45.115.212.0/22 45.115.228.0/22 45.115.236.0/22 45.115.244.0/22 45.115.248.0/22 45.116.12.0/22 45.116.16.0/22 45.116.24.0/22 45.116.32.0/21 45.116.52.0/22 45.116.96.0/21 45.116.140.0/22 45.116.152.0/22 45.116.208.0/22 45.117.8.0/22 45.117.20.0/22 45.117.68.0/22 45.117.124.0/22 45.117.252.0/22 45.119.52.0/22 45.119.60.0/22 45.119.64.0/21 45.119.72.0/22 45.119.104.0/22 45.119.116.0/22 45.119.232.0/22 45.120.100.0/22 45.120.140.0/22 45.120.164.0/22 45.120.220.0/22 45.120.240.0/22 45.121.20.0/22 45.121.52.0/22 45.121.64.0/21 45.121.72.0/22 45.121.92.0/22 45.121.96.0/22 45.121.172.0/22 45.121.176.0/22 45.121.212.0/22 45.121.240.0/20 45.122.0.0/19 45.122.32.0/21 45.122.40.0/22 45.122.60.0/22 45.122.64.0/19 45.122.96.0/20 45.122.112.0/21 45.122.160.0/19 45.122.192.0/20 45.122.208.0/21 45.122.216.0/22 45.123.28.0/22 45.123.32.0/21 45.123.44.0/22 45.123.48.0/20 45.123.64.0/20 45.123.80.0/21 45.123.88.0/22 45.123.120.0/22 45.123.128.0/21 45.123.136.0/22 45.123.148.0/22 45.123.152.0/21 45.123.164.0/22 45.123.168.0/21 45.123.176.0/21 45.123.184.0/22 45.123.204.0/22 45.123.212.0/22 45.123.224.0/19 45.124.0.0/22 45.124.20.0/22 45.124.28.0/22 45.124.32.0/21 45.124.44.0/22 45.124.68.0/22 45.124.76.0/22 45.124.80.0/22 45.124.100.0/22 45.124.124.0/22 45.124.172.0/22 45.124.176.0/22 45.124.208.0/22 45.124.248.0/22 45.125.12.0/22 45.125.16.0/22 45.125.24.0/21 45.125.32.0/22 45.125.44.0/22 45.125.52.0/22 45.125.56.0/22 45.125.76.0/22 45.125.80.0/20 45.125.96.0/21 45.125.104.0/22 45.125.136.0/22 45.126.48.0/21 45.126.100.0/22 45.126.108.0/22 45.126.112.0/21 45.126.120.0/22 45.126.212.0/22 45.126.220.0/22 45.127.8.0/21 45.127.96.0/22 45.127.116.0/22 45.127.124.0/22 45.127.128.0/22 45.127.144.0/21 45.127.156.0/22 45.127.216.0/22 45.248.8.0/22 45.248.80.0/21 45.248.88.0/22 45.248.96.0/20 45.248.128.0/21 45.248.204.0/22 45.248.208.0/20 45.248.224.0/19 45.249.0.0/21 45.249.12.0/22 45.249.16.0/20 45.249.32.0/21 45.249.92.0/22 45.249.112.0/22 45.249.180.0/22 45.249.188.0/22 45.249.192.0/20 45.249.208.0/21 45.250.12.0/22 45.250.16.0/22 45.250.28.0/22 45.250.32.0/21 45.250.40.0/22 45.250.76.0/22 45.250.80.0/20 45.250.96.0/22 45.250.104.0/21 45.250.112.0/20 45.250.128.0/20 45.250.144.0/21 45.250.152.0/22 45.250.164.0/22 45.250.180.0/22 45.250.184.0/21 45.250.192.0/22 45.251.0.0/22 45.251.8.0/22 45.251.16.0/21 45.251.52.0/22 45.251.84.0/22 45.251.88.0/21 45.251.96.0/21 45.251.120.0/21 45.251.136.0/21 45.251.144.0/20 45.251.160.0/19 45.251.192.0/19 45.251.224.0/22 45.251.240.0/22 45.252.0.0/19 45.252.32.0/20 45.252.48.0/22 45.252.60.0/22 45.252.84.0/22 45.252.88.0/21 45.252.96.0/19 45.252.128.0/19 45.252.160.0/20 45.252.176.0/22 45.252.192.0/19 45.252.224.0/21 45.252.232.0/22 45.253.0.0/18 45.253.64.0/20 45.253.80.0/21 45.253.92.0/22 45.253.96.0/20 45.253.112.0/21 45.253.120.0/22 45.253.132.0/22 45.253.136.0/21 45.253.144.0/20 45.253.160.0/19 45.253.192.0/19 45.253.224.0/20 45.253.240.0/22 45.254.0.0/19 45.254.40.0/22 45.254.48.0/20 45.254.64.0/18 45.254.128.0/18 45.254.192.0/19 45.254.224.0/21 45.254.236.0/22 45.254.240.0/22 45.254.248.0/22 45.255.0.0/17 45.255.132.0/22 45.255.136.0/21 45.255.144.0/20 45.255.160.0/19 45.255.192.0/19 45.255.224.0/20 45.255.240.0/21 45.255.248.0/22 47.92.0.0/14 47.96.0.0/11 49.4.0.0/14 49.51.0.0/16 49.52.0.0/14 49.64.0.0/11 49.112.0.0/13 49.120.0.0/14 49.128.0.0/24 49.128.2.0/23 49.128.4.0/22 49.140.0.0/15 49.152.0.0/14 49.208.0.0/14 49.220.0.0/14 49.232.0.0/14 49.239.0.0/18 49.239.192.0/18 49.246.224.0/19 52.80.0.0/14 52.130.0.0/15 54.222.0.0/15 58.14.0.0/15 58.16.0.0/13 58.24.0.0/15 58.30.0.0/15 58.32.0.0/11 58.65.232.0/21 58.66.0.0/15 58.68.128.0/17 58.82.0.0/17 58.83.0.0/16 58.87.64.0/18 58.99.128.0/17 58.100.0.0/15 58.116.0.0/14 58.128.0.0/13 58.144.0.0/16 58.154.0.0/15 58.192.0.0/11 58.240.0.0/12 59.32.0.0/11 59.64.0.0/12 59.80.0.0/14 59.107.0.0/16 59.108.0.0/14 59.151.0.0/17 59.152.16.0/20 59.152.32.0/21 59.152.64.0/20 59.152.112.0/21 59.153.4.0/22 59.153.32.0/22 59.153.60.0/22 59.153.64.0/21 59.153.72.0/22 59.153.92.0/22 59.153.116.0/22 59.153.136.0/22 59.153.152.0/21 59.153.164.0/22 59.153.168.0/21 59.153.176.0/20 59.153.192.0/22 59.155.0.0/16 59.172.0.0/14 59.191.0.0/17 59.191.240.0/20 59.192.0.0/10 60.0.0.0/11 60.55.0.0/16 60.63.0.0/16 60.160.0.0/11 60.194.0.0/15 60.200.0.0/13 60.208.0.0/12 60.232.0.0/15 60.235.0.0/16 60.245.128.0/17 60.247.0.0/16 60.252.0.0/16 60.253.128.0/17 60.255.0.0/16 61.4.80.0/20 61.4.176.0/20 61.8.160.0/20 61.14.212.0/22 61.14.216.0/21 61.14.240.0/21 61.28.0.0/17 61.29.128.0/18 61.29.192.0/19 61.29.224.0/20 61.45.128.0/18 61.45.224.0/20 61.47.128.0/18 61.48.0.0/13 61.87.192.0/18 61.128.0.0/10 61.232.0.0/14 61.236.0.0/15 61.240.0.0/14 62.234.0.0/16 68.79.0.0/18 69.230.192.0/18 69.231.128.0/18 69.234.192.0/18 69.235.128.0/18 71.131.192.0/18 71.132.0.0/18 71.136.64.0/18 71.137.0.0/18 81.68.0.0/14 82.156.0.0/15 91.234.36.0/24 94.191.0.0/17 101.0.0.0/22 101.1.0.0/22 101.2.172.0/22 101.4.0.0/14 101.16.0.0/12 101.33.128.0/17 101.34.0.0/15 101.36.0.0/14 101.40.0.0/13 101.48.0.0/15 101.50.8.0/21 101.50.56.0/22 101.52.0.0/16 101.53.100.0/22 101.54.0.0/16 101.55.224.0/21 101.64.0.0/13 101.72.0.0/14 101.76.0.0/15 101.78.0.0/22 101.78.32.0/19 101.80.0.0/12 101.96.0.0/21 101.96.8.0/22 101.96.16.0/20 101.96.128.0/17 101.99.96.0/19 101.101.64.0/19 101.101.100.0/24 101.101.102.0/23 101.101.104.0/21 101.101.112.0/20 101.102.64.0/19 101.102.100.0/23 101.102.102.0/24 101.102.104.0/21 101.102.112.0/20 101.104.0.0/14 101.110.64.0/19 101.110.96.0/20 101.110.116.0/22 101.110.120.0/21 101.120.0.0/14 101.124.0.0/15 101.126.0.0/16 101.128.0.0/22 101.128.8.0/21 101.128.16.0/20 101.128.32.0/19 101.129.0.0/16 101.130.0.0/15 101.132.0.0/14 101.144.0.0/12 101.192.0.0/13 101.200.0.0/15 101.203.128.0/19 101.203.160.0/21 101.203.172.0/22 101.203.176.0/20 101.204.0.0/14 101.224.0.0/13 101.232.0.0/15 101.234.64.0/21 101.234.76.0/22 101.234.80.0/20 101.234.96.0/19 101.236.0.0/14 101.240.0.0/13 101.248.0.0/15 101.251.0.0/22 101.251.8.0/21 101.251.16.0/20 101.251.32.0/19 101.251.64.0/18 101.251.128.0/17 101.252.0.0/15 101.254.0.0/16 103.1.8.0/22 103.1.20.0/22 103.1.24.0/22 103.1.72.0/22 103.1.88.0/22 103.1.168.0/22 103.2.108.0/22 103.2.156.0/22 103.2.164.0/22 103.2.200.0/21 103.2.208.0/21 103.3.84.0/22 103.3.88.0/21 103.3.96.0/19 103.3.128.0/20 103.3.148.0/22 103.3.152.0/21 103.4.56.0/22 103.4.168.0/22 103.4.184.0/22 103.4.224.0/22 103.5.36.0/22 103.5.52.0/22 103.5.56.0/22 103.5.152.0/22 103.5.168.0/22 103.5.192.0/22 103.5.252.0/22 103.6.76.0/22 103.6.108.0/22 103.6.220.0/22 103.6.228.0/22 103.7.4.0/22 103.7.28.0/22 103.7.140.0/22 103.7.212.0/22 103.7.216.0/21 103.8.0.0/21 103.8.8.0/22 103.8.32.0/22 103.8.52.0/22 103.8.68.0/22 103.8.108.0/22 103.8.156.0/22 103.8.200.0/21 103.8.220.0/22 103.9.8.0/22 103.9.24.0/22 103.9.108.0/22 103.9.152.0/22 103.9.192.0/22 103.9.248.0/21 103.10.0.0/22 103.10.16.0/22 103.10.84.0/22 103.10.140.0/22 103.11.16.0/22 103.11.168.0/22 103.11.180.0/22 103.12.32.0/22 103.12.68.0/22 103.12.92.0/22 103.12.136.0/22 103.12.184.0/22 103.12.232.0/22 103.13.12.0/22 103.13.124.0/22 103.13.144.0/22 103.13.196.0/22 103.13.220.0/22 103.13.244.0/22 103.14.32.0/22 103.14.84.0/22 103.14.100.0/22 103.14.132.0/22 103.14.136.0/22 103.14.156.0/22 103.14.240.0/22 103.15.4.0/22 103.15.8.0/22 103.15.16.0/22 103.15.96.0/22 103.15.200.0/22 103.16.52.0/22 103.16.80.0/21 103.16.88.0/22 103.16.108.0/22 103.16.124.0/22 103.17.40.0/22 103.17.64.0/22 103.17.120.0/22 103.17.136.0/22 103.17.160.0/22 103.17.204.0/22 103.17.228.0/22 103.18.192.0/22 103.18.208.0/21 103.18.224.0/22 103.19.0.0/22 103.19.12.0/22 103.19.40.0/21 103.19.64.0/21 103.19.72.0/22 103.19.232.0/22 103.20.12.0/22 103.20.32.0/22 103.20.44.0/22 103.20.68.0/22 103.20.112.0/22 103.20.128.0/22 103.20.160.0/22 103.20.248.0/22 103.21.112.0/21 103.21.136.0/21 103.21.176.0/22 103.21.208.0/22 103.21.240.0/22 103.22.0.0/18 103.22.64.0/19 103.22.100.0/22 103.22.104.0/21 103.22.112.0/20 103.22.188.0/22 103.22.228.0/22 103.22.252.0/22 103.23.8.0/22 103.23.56.0/22 103.23.160.0/21 103.23.176.0/22 103.23.228.0/22 103.24.24.0/22 103.24.116.0/22 103.24.128.0/22 103.24.144.0/22 103.24.176.0/22 103.24.184.0/22 103.24.220.0/22 103.24.228.0/22 103.24.248.0/21 103.25.8.0/23 103.25.20.0/22 103.25.24.0/21 103.25.32.0/21 103.25.40.0/22 103.25.48.0/22 103.25.64.0/21 103.25.148.0/22 103.25.156.0/22 103.25.216.0/22 103.26.0.0/22 103.26.64.0/22 103.26.76.0/22 103.26.132.0/22 103.26.156.0/22 103.26.160.0/22 103.26.228.0/22 103.26.240.0/22 103.27.4.0/22 103.27.12.0/22 103.27.24.0/22 103.27.56.0/22 103.27.96.0/22 103.27.184.0/22 103.27.208.0/21 103.27.240.0/22 103.28.4.0/22 103.28.8.0/22 103.28.184.0/22 103.28.204.0/22 103.28.212.0/22 103.29.16.0/22 103.29.128.0/21 103.29.136.0/22 103.30.20.0/22 103.30.96.0/22 103.30.148.0/22 103.30.200.0/22 103.30.228.0/22 103.30.236.0/22 103.31.0.0/22 103.31.48.0/20 103.31.64.0/21 103.31.148.0/22 103.31.160.0/22 103.31.168.0/22 103.31.200.0/22 103.31.236.0/22 103.32.0.0/15 103.34.0.0/16 103.35.0.0/19 103.35.32.0/20 103.35.48.0/22 103.35.104.0/22 103.35.116.0/22 103.35.180.0/22 103.35.200.0/22 103.35.220.0/22 103.36.28.0/22 103.36.36.0/22 103.36.56.0/21 103.36.64.0/22 103.36.72.0/22 103.36.96.0/22 103.36.132.0/22 103.36.136.0/22 103.36.160.0/19 103.36.192.0/19 103.36.224.0/20 103.36.240.0/21 103.37.0.0/22 103.37.12.0/22 103.37.16.0/22 103.37.24.0/22 103.37.44.0/22 103.37.52.0/22 103.37.56.0/22 103.37.72.0/22 103.37.100.0/22 103.37.104.0/22 103.37.124.0/22 103.37.136.0/21 103.37.144.0/20 103.37.160.0/21 103.37.172.0/22 103.37.176.0/22 103.37.188.0/22 103.37.208.0/20 103.37.248.0/21 103.38.0.0/22 103.38.32.0/22 103.38.40.0/21 103.38.56.0/22 103.38.76.0/22 103.38.84.0/22 103.38.92.0/22 103.38.96.0/22 103.38.116.0/22 103.38.132.0/22 103.38.140.0/22 103.38.224.0/21 103.38.232.0/22 103.38.252.0/22 103.39.16.0/22 103.39.64.0/22 103.39.88.0/22 103.39.100.0/22 103.39.104.0/21 103.39.160.0/19 103.39.200.0/21 103.39.208.0/20 103.39.224.0/21 103.39.232.0/22 103.40.12.0/22 103.40.16.0/20 103.40.32.0/20 103.40.88.0/22 103.40.100.0/22 103.40.192.0/22 103.40.212.0/22 103.40.220.0/22 103.40.228.0/22 103.40.232.0/21 103.40.240.0/20 103.41.0.0/22 103.41.16.0/22 103.41.52.0/22 103.41.140.0/22 103.41.148.0/22 103.41.152.0/22 103.41.160.0/21 103.41.220.0/22 103.41.224.0/21 103.41.232.0/22 103.42.8.0/22 103.42.24.0/21 103.42.32.0/22 103.42.64.0/21 103.42.76.0/22 103.42.104.0/22 103.42.180.0/22 103.42.232.0/22 103.43.16.0/22 103.43.84.0/22 103.43.96.0/21 103.43.104.0/22 103.43.124.0/22 103.43.184.0/22 103.43.192.0/21 103.43.208.0/22 103.43.220.0/22 103.43.224.0/22 103.43.232.0/22 103.43.240.0/22 103.44.56.0/22 103.44.80.0/22 103.44.88.0/22 103.44.120.0/21 103.44.132.0/22 103.44.144.0/22 103.44.168.0/22 103.44.176.0/20 103.44.192.0/20 103.44.224.0/22 103.44.236.0/22 103.44.240.0/20 103.45.0.0/18 103.45.72.0/21 103.45.80.0/20 103.45.96.0/19 103.45.128.0/18 103.45.192.0/19 103.45.224.0/22 103.45.248.0/22 103.46.0.0/22 103.46.12.0/22 103.46.16.0/20 103.46.32.0/19 103.46.64.0/18 103.46.128.0/21 103.46.136.0/22 103.46.152.0/21 103.46.160.0/20 103.46.176.0/21 103.46.244.0/22 103.46.248.0/22 103.47.4.0/22 103.47.20.0/22 103.47.36.0/22 103.47.40.0/22 103.47.48.0/22 103.47.80.0/22 103.47.96.0/22 103.47.108.0/22 103.47.116.0/22 103.47.120.0/22 103.47.136.0/21 103.47.212.0/22 103.48.52.0/22 103.48.92.0/22 103.48.144.0/20 103.48.202.0/23 103.48.216.0/21 103.48.224.0/20 103.48.240.0/21 103.49.12.0/22 103.49.20.0/22 103.49.72.0/21 103.49.92.0/22 103.49.96.0/22 103.49.108.0/22 103.49.128.0/22 103.49.176.0/21 103.49.196.0/22 103.49.248.0/22 103.50.36.0/22 103.50.44.0/22 103.50.48.0/20 103.50.64.0/21 103.50.72.0/22 103.50.108.0/22 103.50.112.0/20 103.50.132.0/22 103.50.136.0/21 103.50.172.0/22 103.50.176.0/20 103.50.192.0/21 103.50.200.0/22 103.50.220.0/22 103.50.224.0/20 103.50.240.0/21 103.50.248.0/22 103.52.40.0/22 103.52.72.0/21 103.52.80.0/21 103.52.96.0/21 103.52.104.0/22 103.52.160.0/21 103.52.172.0/22 103.52.176.0/22 103.52.184.0/22 103.52.196.0/22 103.53.4.0/22 103.53.64.0/21 103.53.92.0/22 103.53.100.0/22 103.53.124.0/22 103.53.128.0/20 103.53.144.0/22 103.53.180.0/22 103.53.204.0/22 103.53.208.0/21 103.53.216.0/22 103.53.236.0/22 103.53.248.0/22 103.54.8.0/22 103.54.48.0/22 103.54.60.0/22 103.54.160.0/21 103.54.212.0/22 103.54.240.0/22 103.55.24.0/22 103.55.80.0/22 103.55.120.0/22 103.55.152.0/22 103.55.172.0/22 103.55.204.0/22 103.55.208.0/22 103.55.228.0/22 103.55.236.0/22 103.56.8.0/22 103.56.16.0/21 103.56.32.0/22 103.56.52.0/22 103.56.56.0/21 103.56.72.0/21 103.56.140.0/22 103.56.152.0/22 103.56.184.0/22 103.56.200.0/22 103.57.12.0/22 103.57.52.0/22 103.57.56.0/22 103.57.76.0/22 103.57.136.0/22 103.57.196.0/22 103.58.24.0/22 103.59.76.0/22 103.59.100.0/22 103.59.112.0/20 103.59.128.0/22 103.59.148.0/22 103.59.164.0/22 103.60.32.0/22 103.60.44.0/22 103.60.164.0/22 103.60.228.0/22 103.60.236.0/22 103.61.60.0/22 103.61.104.0/22 103.61.140.0/22 103.61.152.0/21 103.61.160.0/22 103.61.172.0/22 103.61.176.0/22 103.61.184.0/21 103.62.24.0/22 103.62.52.0/22 103.62.72.0/21 103.62.80.0/21 103.62.88.0/22 103.62.96.0/19 103.62.128.0/21 103.62.156.0/22 103.62.160.0/19 103.62.192.0/22 103.62.204.0/22 103.62.208.0/20 103.62.224.0/22 103.63.32.0/19 103.63.64.0/20 103.63.80.0/21 103.63.88.0/22 103.63.140.0/22 103.63.144.0/22 103.63.152.0/22 103.63.160.0/20 103.63.176.0/21 103.63.184.0/22 103.63.192.0/20 103.63.208.0/22 103.63.240.0/20 103.64.0.0/21 103.64.24.0/21 103.64.32.0/19 103.64.64.0/18 103.64.140.0/22 103.64.144.0/22 103.64.152.0/21 103.64.160.0/19 103.64.192.0/18 103.65.0.0/20 103.65.16.0/22 103.65.36.0/22 103.65.40.0/22 103.65.48.0/20 103.65.64.0/19 103.65.100.0/22 103.65.104.0/21 103.65.112.0/22 103.65.144.0/20 103.65.160.0/20 103.66.32.0/22 103.66.40.0/22 103.66.92.0/22 103.66.108.0/22 103.66.200.0/22 103.66.216.0/22 103.66.240.0/20 103.67.0.0/21 103.67.8.0/22 103.67.100.0/22 103.67.104.0/21 103.67.112.0/20 103.67.128.0/20 103.67.144.0/21 103.67.172.0/22 103.67.192.0/22 103.67.212.0/22 103.67.252.0/22 103.68.64.0/22 103.68.88.0/22 103.68.100.0/22 103.68.128.0/22 103.68.192.0/22 103.69.16.0/22 103.69.116.0/22 103.69.132.0/22 103.69.152.0/22 103.69.212.0/22 103.70.8.0/22 103.70.148.0/22 103.70.184.0/22 103.70.220.0/22 103.70.224.0/22 103.70.236.0/22 103.70.252.0/22 103.71.0.0/22 103.71.32.0/22 103.71.48.0/22 103.71.68.0/22 103.71.72.0/22 103.71.80.0/21 103.71.88.0/22 103.71.120.0/21 103.71.128.0/22 103.71.144.0/22 103.71.196.0/22 103.71.200.0/22 103.71.232.0/22 103.72.12.0/22 103.72.16.0/20 103.72.32.0/20 103.72.48.0/21 103.72.112.0/20 103.72.128.0/21 103.72.144.0/21 103.72.172.0/22 103.72.180.0/22 103.72.224.0/19 103.73.0.0/19 103.73.48.0/22 103.73.88.0/22 103.73.96.0/22 103.73.116.0/22 103.73.120.0/22 103.73.128.0/20 103.73.144.0/22 103.73.168.0/22 103.73.176.0/22 103.73.204.0/22 103.73.208.0/22 103.73.240.0/21 103.73.248.0/22 103.74.24.0/21 103.74.32.0/20 103.74.48.0/22 103.74.56.0/21 103.74.80.0/22 103.74.124.0/22 103.74.148.0/22 103.74.152.0/21 103.74.204.0/22 103.74.232.0/22 103.75.16.0/22 103.75.88.0/21 103.75.104.0/21 103.75.112.0/22 103.75.120.0/22 103.75.128.0/22 103.75.144.0/22 103.75.152.0/22 103.75.236.0/24 103.76.60.0/22 103.76.64.0/21 103.76.72.0/22 103.76.84.0/22 103.76.92.0/22 103.76.216.0/21 103.76.224.0/22 103.77.28.0/22 103.77.52.0/22 103.77.56.0/22 103.77.72.0/22 103.77.88.0/21 103.77.132.0/22 103.77.148.0/22 103.77.220.0/22 103.78.56.0/21 103.78.64.0/21 103.78.124.0/22 103.78.172.0/22 103.78.176.0/22 103.78.196.0/22 103.78.228.0/22 103.79.24.0/21 103.79.36.0/22 103.79.40.0/21 103.79.52.0/22 103.79.56.0/21 103.79.64.0/21 103.79.80.0/21 103.79.120.0/22 103.79.136.0/22 103.79.188.0/22 103.79.192.0/20 103.79.208.0/21 103.79.240.0/22 103.80.24.0/21 103.80.44.0/22 103.80.72.0/22 103.80.176.0/21 103.80.184.0/22 103.80.192.0/22 103.80.200.0/22 103.80.232.0/22 103.81.4.0/22 103.81.8.0/22 103.81.16.0/21 103.81.44.0/22 103.81.48.0/22 103.81.96.0/22 103.81.120.0/22 103.81.148.0/22 103.81.164.0/22 103.81.168.0/22 103.81.183.0/24 103.81.184.0/22 103.81.200.0/22 103.81.232.0/22 103.82.52.0/22 103.82.60.0/22 103.82.68.0/22 103.82.84.0/22 103.82.104.0/22 103.82.224.0/22 103.82.236.0/22 103.83.44.0/22 103.83.52.0/22 103.83.60.0/22 103.83.64.0/22 103.83.72.0/22 103.83.112.0/22 103.83.120.0/22 103.83.180.0/22 103.84.0.0/22 103.84.12.0/22 103.84.16.0/20 103.84.48.0/22 103.84.64.0/22 103.84.72.0/22 103.84.92.0/22 103.84.108.0/22 103.84.136.0/22 103.85.20.0/22 103.85.24.0/22 103.85.44.0/22 103.85.48.0/22 103.85.84.0/22 103.85.136.0/22 103.85.144.0/22 103.85.164.0/22 103.85.168.0/21 103.85.176.0/22 103.85.224.0/22 103.86.28.0/22 103.86.32.0/22 103.86.44.0/22 103.86.60.0/22 103.86.68.0/22 103.86.80.0/21 103.86.88.0/22 103.86.204.0/22 103.86.208.0/20 103.86.224.0/19 103.87.0.0/21 103.87.20.0/22 103.87.32.0/22 103.87.72.0/22 103.87.96.0/22 103.87.132.0/22 103.87.180.0/22 103.87.224.0/22 103.88.4.0/22 103.88.8.0/21 103.88.16.0/21 103.88.32.0/21 103.88.60.0/22 103.88.64.0/22 103.88.72.0/22 103.88.96.0/21 103.88.164.0/22 103.88.176.0/22 103.88.184.0/21 103.88.212.0/22 103.89.28.0/22 103.89.96.0/20 103.89.112.0/21 103.89.148.0/22 103.89.172.0/22 103.89.184.0/21 103.89.192.0/19 103.89.224.0/21 103.90.52.0/22 103.90.92.0/22 103.90.100.0/22 103.90.104.0/21 103.90.112.0/20 103.90.128.0/21 103.90.152.0/22 103.90.168.0/22 103.90.173.0/24 103.90.176.0/22 103.90.188.0/22 103.90.192.0/22 103.91.36.0/22 103.91.40.0/22 103.91.108.0/22 103.91.152.0/22 103.91.176.0/22 103.91.200.0/22 103.91.208.0/21 103.91.219.0/24 103.91.236.0/22 103.91.252.0/22 103.92.0.0/20 103.92.48.0/20 103.92.64.0/20 103.92.80.0/22 103.92.86.0/24 103.92.88.0/22 103.92.108.0/22 103.92.124.0/22 103.92.128.0/24 103.92.132.0/22 103.92.156.0/22 103.92.164.0/22 103.92.168.0/21 103.92.176.0/20 103.92.192.0/22 103.92.236.0/22 103.92.240.0/20 103.93.0.0/21 103.93.28.0/22 103.93.76.0/22 103.93.84.0/22 103.93.121.0/24 103.93.152.0/22 103.93.180.0/22 103.93.204.0/22 103.94.12.0/22 103.94.20.0/22 103.94.28.0/22 103.94.32.0/20 103.94.72.0/22 103.94.88.0/22 103.94.116.0/22 103.94.160.0/22 103.94.180.0/22 103.94.200.0/22 103.95.28.0/22 103.95.52.0/22 103.95.64.0/21 103.95.88.0/21 103.95.116.0/22 103.95.128.0/22 103.95.136.0/21 103.95.144.0/22 103.95.152.0/22 103.95.207.0/24 103.95.216.0/21 103.95.224.0/22 103.95.236.0/22 103.95.240.0/20 103.96.0.0/22 103.96.8.0/22 103.96.80.0/22 103.96.124.0/22 103.96.136.0/22 103.96.140.0/24 103.96.148.0/22 103.96.152.0/21 103.96.160.0/19 103.96.192.0/20 103.96.208.0/21 103.96.216.0/22 103.97.8.0/21 103.97.16.0/20 103.97.32.0/21 103.97.40.0/22 103.97.56.0/21 103.97.64.0/21 103.97.72.0/22 103.97.80.0/22 103.97.112.0/21 103.97.128.0/22 103.97.144.0/21 103.97.188.0/22 103.97.192.0/22 103.97.224.0/22 103.97.228.0/23 103.98.28.0/23 103.98.40.0/21 103.98.48.0/22 103.98.56.0/22 103.98.80.0/22 103.98.88.0/21 103.98.96.0/21 103.98.124.0/22 103.98.136.0/21 103.98.144.0/22 103.98.164.0/22 103.98.168.0/22 103.98.180.0/22 103.98.196.0/22 103.98.216.0/21 103.98.224.0/21 103.98.232.0/22 103.98.240.0/20 103.99.40.0/23 103.99.52.0/22 103.99.56.0/21 103.99.76.0/22 103.99.104.0/22 103.99.116.0/22 103.99.120.0/22 103.99.152.0/22 103.99.220.0/22 103.99.232.0/21 103.100.0.0/22 103.100.32.0/22 103.100.40.0/22 103.100.48.0/20 103.100.64.0/21 103.100.88.0/22 103.100.116.0/22 103.100.140.0/22 103.100.144.0/22 103.100.236.0/22 103.100.240.0/22 103.100.248.0/21 103.101.4.0/22 103.101.8.0/21 103.101.28.0/22 103.101.60.0/22 103.101.120.0/21 103.101.144.0/21 103.101.153.0/24 103.101.180.0/22 103.101.184.0/22 103.102.76.0/22 103.102.80.0/22 103.102.168.0/21 103.102.180.0/22 103.102.184.0/21 103.102.192.0/21 103.102.200.0/22 103.102.208.0/21 103.103.12.0/22 103.103.16.0/22 103.103.36.0/22 103.103.68.0/22 103.103.72.0/22 103.103.176.0/22 103.103.188.0/22 103.103.200.0/21 103.103.220.0/22 103.103.224.0/21 103.103.232.0/22 103.103.248.0/21 103.104.0.0/21 103.104.36.0/22 103.104.40.0/22 103.104.64.0/22 103.104.104.0/22 103.104.152.0/22 103.104.168.0/21 103.104.188.0/22 103.104.198.0/23 103.104.252.0/22 103.105.0.0/21 103.105.12.0/22 103.105.16.0/22 103.105.23.0/24 103.105.56.0/21 103.105.116.0/22 103.105.132.0/22 103.105.180.0/22 103.105.184.0/22 103.105.200.0/21 103.105.220.0/22 103.106.36.0/22 103.106.40.0/21 103.106.60.0/22 103.106.68.0/22 103.106.96.0/22 103.106.120.0/22 103.106.128.0/21 103.106.160.0/22 103.106.188.0/22 103.106.196.0/22 103.106.202.0/23 103.106.212.0/22 103.106.244.0/22 103.106.252.0/22 103.107.0.0/22 103.107.8.0/24 103.107.28.0/22 103.107.32.0/22 103.107.44.0/22 103.107.72.0/22 103.107.108.0/22 103.107.164.0/22 103.107.168.0/22 103.107.188.0/22 103.107.192.0/22 103.107.208.0/20 103.108.52.0/22 103.108.64.0/22 103.108.160.0/21 103.108.184.0/23 103.108.188.0/23 103.108.192.0/21 103.108.208.0/21 103.108.224.0/22 103.108.244.0/22 103.108.251.0/24 103.109.20.0/22 103.109.48.0/22 103.109.88.0/22 103.109.106.0/23 103.109.248.0/22 103.110.32.0/22 103.110.80.0/23 103.110.92.0/22 103.110.100.0/22 103.110.116.0/22 103.110.127.0/24 103.110.128.0/23 103.110.131.0/24 103.110.132.0/22 103.110.136.0/22 103.110.152.0/21 103.110.188.0/22 103.110.204.0/22 103.111.38.0/23 103.111.64.0/22 103.111.172.0/22 103.111.252.0/22 103.112.28.0/22 103.112.68.0/22 103.112.72.0/22 103.112.88.0/21 103.112.96.0/22 103.112.108.0/22 103.112.112.0/21 103.112.140.0/22 103.112.172.0/22 103.112.184.0/22 103.112.208.0/22 103.113.4.0/22 103.113.92.0/22 103.113.144.0/22 103.113.220.0/22 103.113.232.0/21 103.114.4.0/22 103.114.28.0/22 103.114.68.0/22 103.114.72.0/22 103.114.100.0/22 103.114.132.0/22 103.114.148.0/22 103.114.156.0/22 103.114.176.0/22 103.114.212.0/22 103.114.236.0/22 103.114.240.0/22 103.115.16.0/22 103.115.40.0/21 103.115.48.0/20 103.115.64.0/21 103.115.92.0/22 103.115.120.0/22 103.115.148.0/22 103.115.204.0/23 103.115.248.0/22 103.116.20.0/22 103.116.40.0/22 103.116.64.0/22 103.116.72.0/21 103.116.92.0/22 103.116.120.0/22 103.116.128.0/22 103.116.132.0/23 103.116.148.0/22 103.116.184.0/22 103.116.206.0/23 103.116.220.0/22 103.116.224.0/21 103.117.16.0/22 103.117.72.0/22 103.117.88.0/22 103.117.132.0/22 103.117.136.0/22 103.117.188.0/22 103.117.220.0/22 103.118.19.0/24 103.118.36.0/22 103.118.52.0/22 103.118.56.0/21 103.118.64.0/21 103.118.72.0/22 103.118.88.0/22 103.118.173.0/24 103.118.192.0/19 103.118.240.0/20 103.119.0.0/22 103.119.12.0/22 103.119.16.0/22 103.119.28.0/22 103.119.44.0/22 103.119.104.0/22 103.119.115.0/24 103.119.156.0/22 103.119.180.0/22 103.119.200.0/22 103.119.224.0/22 103.120.52.0/22 103.120.72.0/22 103.120.76.0/24 103.120.88.0/22 103.120.96.0/21 103.120.140.0/22 103.120.196.0/22 103.120.224.0/22 103.121.52.0/22 103.121.92.0/22 103.121.160.0/21 103.121.250.0/24 103.121.252.0/22 103.122.48.0/22 103.122.176.0/22 103.122.192.0/22 103.122.240.0/22 103.123.4.0/22 103.123.56.0/22 103.123.88.0/21 103.123.116.0/22 103.123.160.0/22 103.123.176.0/22 103.123.200.0/21 103.123.208.0/21 103.124.24.0/22 103.124.48.0/22 103.124.64.0/22 103.124.212.0/22 103.124.216.0/22 103.125.20.0/22 103.125.44.0/22 103.125.132.0/22 103.125.164.0/22 103.125.196.0/22 103.125.236.0/22 103.125.248.0/22 103.126.0.0/22 103.126.16.0/22 103.126.44.0/22 103.126.100.0/22 103.126.124.0/22 103.126.128.0/21 103.126.208.0/22 103.126.241.0/24 103.129.52.0/22 103.130.132.0/22 103.130.152.0/24 103.130.160.0/22 103.130.228.0/22 103.131.20.0/22 103.131.36.0/22 103.131.152.0/22 103.131.168.0/22 103.131.176.0/22 103.131.224.0/21 103.131.240.0/22 103.132.60.0/22 103.132.64.0/20 103.132.80.0/22 103.132.104.0/21 103.132.112.0/21 103.132.120.0/22 103.132.160.0/21 103.132.188.0/22 103.132.208.0/21 103.132.234.0/23 103.133.12.0/22 103.133.40.0/22 103.133.128.0/22 103.133.136.0/22 103.133.176.0/22 103.133.232.0/22 103.134.12.0/24 103.134.196.0/22 103.135.80.0/22 103.135.124.0/22 103.135.148.0/22 103.135.156.0/22 103.135.160.0/21 103.135.176.0/22 103.135.184.0/22 103.135.192.0/21 103.135.236.0/22 103.136.128.0/22 103.136.232.0/22 103.137.58.0/23 103.137.60.0/24 103.137.76.0/22 103.137.136.0/23 103.137.149.0/24 103.137.180.0/22 103.137.236.0/22 103.138.2.0/23 103.138.12.0/23 103.138.80.0/22 103.138.134.0/23 103.138.156.0/23 103.138.208.0/23 103.138.220.0/23 103.138.246.0/23 103.138.248.0/23 103.139.0.0/22 103.139.22.0/23 103.139.113.0/24 103.139.134.0/23 103.139.136.0/23 103.139.172.0/23 103.139.200.0/23 103.139.204.0/23 103.139.212.0/23 103.140.8.0/23 103.140.14.0/23 103.140.46.0/23 103.140.70.0/23 103.140.126.0/23 103.140.140.0/23 103.140.144.0/23 103.140.152.0/23 103.140.192.0/22 103.140.228.0/23 103.141.10.0/23 103.141.36.0/23 103.141.58.0/23 103.141.128.0/23 103.141.186.0/23 103.141.190.0/23 103.141.242.0/23 103.142.0.0/23 103.142.28.0/23 103.142.58.0/23 103.142.82.0/23 103.142.96.0/23 103.142.102.0/23 103.142.122.0/23 103.142.126.0/24 103.142.128.0/23 103.142.140.0/23 103.142.154.0/23 103.142.156.0/23 103.142.172.0/23 103.142.180.0/23 103.142.186.0/23 103.142.190.0/23 103.142.220.0/23 103.142.230.0/24 103.142.234.0/23 103.142.238.0/23 103.142.248.0/23 103.143.16.0/22 103.143.31.0/24 103.143.74.0/23 103.143.120.0/23 103.143.124.0/23 103.143.132.0/22 103.143.174.0/23 103.143.228.0/23 103.144.40.0/23 103.144.52.0/23 103.144.66.0/23 103.144.70.0/23 103.144.72.0/23 103.144.88.0/24 103.144.108.0/23 103.144.136.0/23 103.144.148.0/23 103.144.158.0/23 103.144.240.0/23 103.145.38.0/23 103.145.40.0/22 103.145.60.0/23 103.145.72.0/23 103.145.80.0/23 103.145.86.0/23 103.145.92.0/22 103.145.98.0/23 103.145.106.0/23 103.145.122.0/23 103.145.188.0/22 103.146.6.0/23 103.146.72.0/23 103.146.88.0/22 103.146.124.0/23 103.192.0.0/19 103.192.48.0/21 103.192.56.0/22 103.192.84.0/22 103.192.88.0/21 103.192.96.0/20 103.192.112.0/22 103.192.128.0/20 103.192.144.0/22 103.192.164.0/22 103.192.188.0/22 103.192.208.0/21 103.192.216.0/22 103.192.252.0/22 103.193.40.0/21 103.193.120.0/21 103.193.140.0/22 103.193.144.0/21 103.193.160.0/22 103.193.188.0/22 103.193.192.0/22 103.193.212.0/22 103.193.216.0/21 103.193.224.0/20 103.193.240.0/22 103.194.16.0/22 103.195.104.0/22 103.195.112.0/22 103.195.136.0/22 103.195.148.0/22 103.195.152.0/22 103.195.160.0/22 103.195.192.0/22 103.196.60.0/22 103.196.64.0/22 103.196.72.0/22 103.196.88.0/21 103.196.96.0/22 103.196.168.0/22 103.196.204.0/22 103.197.180.0/22 103.197.228.0/22 103.198.20.0/22 103.198.60.0/22 103.198.64.0/22 103.198.72.0/22 103.198.124.0/22 103.198.156.0/22 103.198.180.0/22 103.198.196.0/22 103.198.200.0/22 103.198.216.0/21 103.198.224.0/20 103.198.240.0/21 103.199.164.0/22 103.199.196.0/22 103.199.228.0/22 103.199.248.0/21 103.200.28.0/22 103.200.32.0/22 103.200.52.0/22 103.200.64.0/21 103.200.136.0/21 103.200.144.0/20 103.200.160.0/19 103.200.192.0/22 103.200.220.0/22 103.200.224.0/19 103.201.0.0/20 103.201.16.0/21 103.201.28.0/22 103.201.32.0/19 103.201.64.0/22 103.201.76.0/22 103.201.80.0/20 103.201.96.0/20 103.201.112.0/21 103.201.120.0/22 103.201.152.0/21 103.201.160.0/19 103.201.192.0/18 103.202.0.0/19 103.202.32.0/20 103.202.56.0/21 103.202.64.0/18 103.202.128.0/20 103.202.144.0/22 103.202.152.0/21 103.202.160.0/19 103.202.192.0/20 103.202.212.0/22 103.202.228.0/22 103.202.236.0/22 103.202.240.0/20 103.203.0.0/19 103.203.32.0/22 103.203.52.0/22 103.203.56.0/22 103.203.96.0/19 103.203.128.0/22 103.203.140.0/22 103.203.164.0/22 103.203.168.0/22 103.203.192.0/22 103.203.200.0/22 103.203.212.0/22 103.203.216.0/22 103.204.24.0/22 103.204.72.0/22 103.204.88.0/22 103.204.112.0/22 103.204.136.0/21 103.204.144.0/21 103.204.152.0/22 103.204.196.0/22 103.204.232.0/21 103.205.4.0/22 103.205.8.0/22 103.205.40.0/21 103.205.52.0/22 103.205.108.0/22 103.205.116.0/22 103.205.120.0/22 103.205.136.0/22 103.205.162.0/24 103.205.188.0/22 103.205.192.0/21 103.205.200.0/22 103.205.236.0/22 103.205.248.0/21 103.206.0.0/22 103.206.44.0/22 103.206.108.0/22 103.206.148.0/22 103.207.48.0/22 103.207.104.0/22 103.207.164.0/22 103.207.184.0/21 103.207.192.0/20 103.207.208.0/21 103.207.220.0/22 103.207.228.0/22 103.207.232.0/22 103.208.12.0/22 103.208.16.0/22 103.208.28.0/22 103.208.40.0/21 103.208.48.0/22 103.208.148.0/22 103.209.112.0/22 103.209.136.0/22 103.209.200.0/22 103.209.208.0/22 103.209.216.0/22 103.210.0.0/22 103.210.20.0/22 103.210.96.0/22 103.210.156.0/22 103.210.160.0/19 103.210.216.0/22 103.211.44.0/22 103.211.96.0/21 103.211.156.0/22 103.211.164.0/22 103.211.192.0/22 103.211.220.0/22 103.211.224.0/22 103.211.248.0/22 103.212.0.0/20 103.212.32.0/22 103.212.44.0/22 103.212.48.0/22 103.212.84.0/22 103.212.100.0/22 103.212.104.0/21 103.212.148.0/22 103.212.164.0/22 103.212.196.0/22 103.212.200.0/22 103.212.228.0/22 103.212.252.0/22 103.213.40.0/21 103.213.48.0/20 103.213.64.0/19 103.213.96.0/22 103.213.132.0/22 103.213.136.0/21 103.213.144.0/20 103.213.160.0/19 103.213.248.0/22 103.214.32.0/22 103.214.48.0/22 103.214.84.0/22 103.214.168.0/22 103.214.212.0/22 103.214.240.0/21 103.215.28.0/22 103.215.32.0/21 103.215.44.0/22 103.215.48.0/22 103.215.100.0/22 103.215.104.0/21 103.215.116.0/22 103.215.120.0/22 103.215.140.0/22 103.215.184.0/22 103.215.228.0/22 103.216.4.0/22 103.216.8.0/21 103.216.16.0/20 103.216.32.0/20 103.216.64.0/22 103.216.108.0/22 103.216.136.0/22 103.216.152.0/22 103.216.224.0/21 103.216.240.0/20 103.217.0.0/18 103.217.168.0/22 103.217.180.0/22 103.217.184.0/21 103.217.192.0/20 103.218.0.0/22 103.218.8.0/21 103.218.16.0/21 103.218.28.0/22 103.218.32.0/19 103.218.64.0/19 103.218.184.0/22 103.218.192.0/20 103.218.208.0/21 103.218.216.0/22 103.219.24.0/21 103.219.32.0/21 103.219.64.0/22 103.219.84.0/22 103.219.88.0/21 103.219.96.0/21 103.219.176.0/22 103.219.184.0/22 103.220.48.0/20 103.220.64.0/22 103.220.92.0/22 103.220.96.0/20 103.220.116.0/22 103.220.120.0/21 103.220.128.0/20 103.220.144.0/21 103.220.152.0/22 103.220.160.0/19 103.220.192.0/21 103.220.200.0/22 103.220.240.0/20 103.221.0.0/19 103.221.32.0/20 103.221.48.0/22 103.221.88.0/21 103.221.96.0/19 103.221.128.0/18 103.221.192.0/20 103.222.0.0/20 103.222.16.0/22 103.222.24.0/21 103.222.32.0/19 103.222.64.0/18 103.222.128.0/18 103.222.192.0/19 103.222.224.0/21 103.222.232.0/22 103.222.240.0/21 103.223.16.0/20 103.223.32.0/19 103.223.64.0/18 103.223.128.0/21 103.223.140.0/22 103.223.144.0/20 103.223.160.0/20 103.223.176.0/21 103.223.188.0/22 103.223.192.0/18 103.224.0.0/22 103.224.40.0/21 103.224.60.0/22 103.224.80.0/22 103.224.220.0/22 103.224.224.0/21 103.224.232.0/22 103.225.84.0/22 103.226.16.0/22 103.226.40.0/22 103.226.56.0/21 103.226.80.0/22 103.226.132.0/22 103.226.156.0/22 103.226.180.0/22 103.226.196.0/22 103.227.48.0/22 103.227.72.0/21 103.227.80.0/22 103.227.100.0/22 103.227.120.0/22 103.227.132.0/22 103.227.136.0/22 103.227.196.0/22 103.227.204.0/22 103.227.212.0/22 103.227.228.0/22 103.228.12.0/22 103.228.28.0/22 103.228.68.0/22 103.228.88.0/22 103.228.128.0/22 103.228.136.0/22 103.228.160.0/22 103.228.176.0/22 103.228.204.0/22 103.228.208.0/22 103.228.228.0/22 103.228.232.0/22 103.229.20.0/22 103.229.60.0/22 103.229.136.0/22 103.229.148.0/22 103.229.172.0/22 103.229.212.0/22 103.229.216.0/21 103.229.228.0/22 103.229.236.0/22 103.229.240.0/22 103.230.0.0/22 103.230.28.0/22 103.230.44.0/22 103.230.96.0/22 103.230.196.0/22 103.230.200.0/21 103.230.212.0/22 103.230.236.0/22 103.231.16.0/21 103.231.64.0/21 103.231.144.0/22 103.231.180.0/22 103.231.184.0/22 103.231.244.0/22 103.232.4.0/22 103.232.144.0/22 103.232.188.0/22 103.232.212.0/22 103.233.4.0/22 103.233.44.0/22 103.233.52.0/22 103.233.104.0/22 103.233.128.0/22 103.233.136.0/22 103.233.228.0/22 103.234.0.0/22 103.234.20.0/22 103.234.56.0/22 103.234.128.0/22 103.234.172.0/22 103.234.180.0/22 103.234.244.0/22 103.235.16.0/22 103.235.48.0/22 103.235.56.0/21 103.235.80.0/21 103.235.128.0/20 103.235.144.0/21 103.235.184.0/22 103.235.192.0/22 103.235.200.0/22 103.235.220.0/22 103.235.224.0/19 103.236.0.0/18 103.236.64.0/19 103.236.96.0/22 103.236.120.0/22 103.236.184.0/22 103.236.220.0/22 103.236.232.0/22 103.236.240.0/20 103.237.0.0/20 103.237.24.0/21 103.237.68.0/22 103.237.88.0/22 103.237.152.0/22 103.237.176.0/20 103.237.192.0/18 103.238.0.0/21 103.238.16.0/20 103.238.32.0/20 103.238.48.0/21 103.238.56.0/22 103.238.88.0/21 103.238.96.0/22 103.238.132.0/22 103.238.140.0/22 103.238.144.0/22 103.238.160.0/19 103.238.196.0/22 103.238.204.0/22 103.238.252.0/22 103.239.0.0/22 103.239.44.0/22 103.239.68.0/22 103.239.96.0/22 103.239.152.0/21 103.239.176.0/21 103.239.184.0/22 103.239.192.0/21 103.239.204.0/22 103.239.208.0/22 103.239.224.0/22 103.239.244.0/22 103.240.16.0/22 103.240.36.0/22 103.240.72.0/22 103.240.84.0/22 103.240.124.0/22 103.240.156.0/22 103.240.172.0/22 103.240.188.0/22 103.240.244.0/22 103.241.12.0/22 103.241.72.0/22 103.241.92.0/22 103.241.96.0/22 103.241.160.0/22 103.241.184.0/21 103.241.220.0/22 103.242.64.0/22 103.242.128.0/21 103.242.160.0/22 103.242.168.0/21 103.242.176.0/22 103.242.200.0/22 103.242.212.0/22 103.242.220.0/22 103.242.240.0/22 103.243.136.0/22 103.243.252.0/22 103.244.16.0/22 103.244.58.0/23 103.244.60.0/22 103.244.64.0/20 103.244.80.0/21 103.244.116.0/22 103.244.164.0/22 103.244.232.0/22 103.244.252.0/22 103.245.23.0/24 103.245.52.0/22 103.245.60.0/22 103.245.80.0/22 103.245.124.0/22 103.245.128.0/22 103.246.8.0/21 103.246.120.0/21 103.246.132.0/22 103.246.152.0/21 103.247.168.0/21 103.247.176.0/22 103.247.200.0/22 103.247.212.0/22 103.248.0.0/23 103.248.64.0/22 103.248.100.0/22 103.248.124.0/22 103.248.152.0/22 103.248.168.0/22 103.248.192.0/22 103.248.212.0/22 103.248.220.0/22 103.248.224.0/22 103.249.8.0/21 103.249.52.0/22 103.249.104.0/22 103.249.128.0/22 103.249.136.0/22 103.249.144.0/22 103.249.164.0/22 103.249.168.0/21 103.249.176.0/22 103.249.188.0/22 103.249.192.0/22 103.249.244.0/22 103.249.252.0/22 103.250.32.0/22 103.250.104.0/22 103.250.124.0/22 103.250.180.0/22 103.250.192.0/22 103.250.216.0/22 103.250.224.0/22 103.250.236.0/22 103.250.248.0/21 103.251.32.0/21 103.251.84.0/22 103.251.96.0/22 103.251.124.0/22 103.251.128.0/22 103.251.160.0/22 103.251.192.0/22 103.251.204.0/22 103.251.236.0/22 103.251.240.0/22 103.252.28.0/22 103.252.36.0/22 103.252.64.0/22 103.252.96.0/22 103.252.104.0/22 103.252.172.0/22 103.252.204.0/22 103.252.208.0/22 103.252.232.0/22 103.252.248.0/22 103.253.4.0/22 103.253.60.0/22 103.253.204.0/22 103.253.220.0/22 103.253.224.0/22 103.253.232.0/22 103.254.8.0/22 103.254.20.0/22 103.254.64.0/20 103.254.112.0/22 103.254.176.0/22 103.254.188.0/22 103.254.196.0/24 103.254.220.0/22 103.255.56.0/22 103.255.68.0/22 103.255.88.0/21 103.255.136.0/21 103.255.184.0/22 103.255.200.0/22 103.255.212.0/22 103.255.228.0/22 106.0.0.0/24 106.0.2.0/23 106.0.4.0/22 106.0.8.0/21 106.0.16.0/20 106.0.44.0/22 106.0.64.0/18 106.2.0.0/15 106.4.0.0/14 106.8.0.0/15 106.11.0.0/16 106.12.0.0/14 106.16.0.0/12 106.32.0.0/12 106.48.0.0/15 106.50.0.0/16 106.52.0.0/14 106.56.0.0/13 106.74.0.0/15 106.80.0.0/12 106.108.0.0/14 106.112.0.0/12 106.224.0.0/12 109.244.0.0/16 110.6.0.0/15 110.16.0.0/14 110.34.40.0/21 110.40.0.0/14 110.44.12.0/22 110.44.144.0/20 110.48.0.0/16 110.51.0.0/16 110.52.0.0/15 110.56.0.0/13 110.64.0.0/15 110.72.0.0/15 110.75.0.0/16 110.76.0.0/18 110.76.132.0/22 110.76.156.0/22 110.76.184.0/22 110.76.192.0/18 110.77.0.0/17 110.80.0.0/13 110.88.0.0/14 110.92.68.0/22 110.93.32.0/19 110.94.0.0/15 110.96.0.0/11 110.152.0.0/14 110.156.0.0/15 110.165.32.0/19 110.166.0.0/15 110.172.192.0/18 110.173.0.0/19 110.173.32.0/20 110.173.64.0/18 110.173.192.0/19 110.176.0.0/12 110.192.0.0/11 110.228.0.0/14 110.232.32.0/19 110.236.0.0/15 110.240.0.0/12 111.0.0.0/10 111.66.0.0/16 111.67.192.0/20 111.68.64.0/19 111.72.0.0/13 111.85.0.0/16 111.91.192.0/19 111.92.248.0/21 111.112.0.0/14 111.116.0.0/15 111.118.200.0/21 111.119.64.0/18 111.119.128.0/19 111.120.0.0/14 111.124.0.0/16 111.126.0.0/15 111.128.0.0/11 111.160.0.0/13 111.170.0.0/16 111.172.0.0/14 111.176.0.0/13 111.186.0.0/15 111.192.0.0/12 111.208.0.0/13 111.221.28.0/24 111.221.128.0/17 111.222.0.0/16 111.223.4.0/22 111.223.8.0/21 111.223.16.0/22 111.223.240.0/22 111.223.248.0/22 111.224.0.0/13 111.235.96.0/19 111.235.156.0/22 111.235.160.0/19 112.0.0.0/10 112.64.0.0/14 112.73.0.0/16 112.74.0.0/15 112.80.0.0/12 112.96.0.0/13 112.109.128.0/17 112.111.0.0/16 112.112.0.0/14 112.116.0.0/15 112.122.0.0/15 112.124.0.0/14 112.128.0.0/14 112.132.0.0/16 112.137.48.0/21 112.192.0.0/14 112.224.0.0/11 113.0.0.0/13 113.8.0.0/15 113.11.192.0/19 113.12.0.0/14 113.16.0.0/15 113.18.0.0/16 113.21.232.0/21 113.24.0.0/14 113.31.0.0/16 113.44.0.0/14 113.48.0.0/14 113.52.160.0/19 113.52.228.0/22 113.54.0.0/15 113.56.0.0/15 113.58.0.0/16 113.59.0.0/17 113.59.224.0/22 113.62.0.0/15 113.64.0.0/10 113.128.0.0/15 113.130.96.0/20 113.130.112.0/21 113.132.0.0/14 113.136.0.0/13 113.194.0.0/15 113.197.100.0/22 113.200.0.0/15 113.202.0.0/16 113.204.0.0/14 113.208.96.0/19 113.208.128.0/17 113.209.0.0/16 113.212.0.0/18 113.212.64.0/22 113.212.88.0/22 113.212.100.0/22 113.212.184.0/21 113.213.0.0/17 113.214.0.0/15 113.218.0.0/15 113.220.0.0/14 113.224.0.0/12 113.240.0.0/13 113.248.0.0/14 114.28.0.0/16 114.31.64.0/21 114.54.0.0/15 114.60.0.0/14 114.64.0.0/14 114.68.0.0/16 114.79.64.0/18 114.80.0.0/12 114.96.0.0/13 114.104.0.0/14 114.110.0.0/20 114.110.64.0/18 114.111.0.0/19 114.111.160.0/19 114.112.0.0/14 114.116.0.0/15 114.118.0.0/16 114.119.0.0/17 114.119.192.0/18 114.132.0.0/16 114.135.0.0/16 114.138.0.0/15 114.141.64.0/21 114.141.80.0/21 114.141.128.0/18 114.196.0.0/15 114.198.248.0/21 114.208.0.0/12 114.224.0.0/11 115.24.0.0/14 115.28.0.0/15 115.31.64.0/20 115.32.0.0/14 115.42.56.0/22 115.44.0.0/14 115.48.0.0/12 115.69.64.0/20 115.84.0.0/18 115.84.192.0/19 115.85.192.0/18 115.100.0.0/14 115.104.0.0/14 115.120.0.0/14 115.124.16.0/20 115.148.0.0/14 115.152.0.0/13 115.166.64.0/19 115.168.0.0/13 115.180.0.0/14 115.187.0.0/20 115.190.0.0/15 115.192.0.0/11 115.224.0.0/12 116.0.8.0/21 116.0.24.0/21 116.1.0.0/16 116.2.0.0/15 116.4.0.0/14 116.8.0.0/14 116.13.0.0/16 116.16.0.0/12 116.50.0.0/20 116.52.0.0/14 116.56.0.0/15 116.58.128.0/20 116.58.208.0/20 116.60.0.0/14 116.66.0.0/17 116.66.176.0/22 116.68.136.0/21 116.68.176.0/21 116.69.0.0/16 116.70.0.0/17 116.76.0.0/14 116.85.0.0/16 116.89.144.0/20 116.89.240.0/22 116.90.80.0/20 116.90.184.0/21 116.95.0.0/16 116.112.0.0/14 116.116.0.0/15 116.128.0.0/10 116.192.0.0/16 116.193.16.0/20 116.193.32.0/19 116.193.152.0/22 116.193.164.0/22 116.193.176.0/21 116.194.0.0/15 116.196.0.0/16 116.197.160.0/21 116.198.0.0/16 116.199.0.0/17 116.199.128.0/19 116.204.0.0/17 116.204.132.0/22 116.204.168.0/22 116.204.216.0/22 116.204.232.0/21 116.204.244.0/22 116.205.0.0/16 116.206.92.0/22 116.206.176.0/22 116.207.0.0/16 116.208.0.0/14 116.212.160.0/20 116.213.44.0/22 116.213.64.0/18 116.213.128.0/17 116.214.32.0/19 116.214.64.0/20 116.214.128.0/17 116.215.0.0/16 116.216.0.0/14 116.224.0.0/12 116.242.0.0/15 116.244.0.0/14 116.248.0.0/15 116.251.64.0/18 116.252.0.0/15 116.254.104.0/21 116.254.128.0/17 116.255.128.0/17 117.8.0.0/13 117.21.0.0/16 117.22.0.0/15 117.24.0.0/13 117.32.0.0/13 117.40.0.0/14 117.44.0.0/15 117.48.0.0/14 117.53.48.0/20 117.53.176.0/20 117.57.0.0/16 117.58.0.0/17 117.59.0.0/16 117.60.0.0/14 117.64.0.0/13 117.72.0.0/15 117.74.64.0/19 117.74.128.0/17 117.75.0.0/16 117.76.0.0/14 117.80.0.0/12 117.100.0.0/15 117.103.16.0/20 117.103.40.0/21 117.103.72.0/21 117.103.128.0/20 117.104.168.0/21 117.106.0.0/15 117.112.0.0/13 117.120.64.0/18 117.120.128.0/17 117.121.0.0/17 117.121.128.0/18 117.121.192.0/21 117.122.128.0/17 117.124.0.0/14 117.128.0.0/10 118.24.0.0/15 118.26.0.0/16 118.28.0.0/14 118.64.0.0/15 118.66.0.0/16 118.67.112.0/20 118.72.0.0/13 118.80.0.0/15 118.84.0.0/15 118.88.32.0/19 118.88.64.0/18 118.88.128.0/17 118.89.0.0/16 118.91.240.0/20 118.102.16.0/20 118.102.32.0/21 118.103.164.0/22 118.103.168.0/21 118.103.176.0/22 118.107.180.0/22 118.112.0.0/13 118.120.0.0/14 118.124.0.0/15 118.126.0.0/16 118.127.128.0/19 118.132.0.0/14 118.144.0.0/14 118.178.0.0/16 118.180.0.0/14 118.184.0.0/16 118.186.0.0/15 118.188.0.0/16 118.190.0.0/15 118.192.0.0/16 118.193.0.0/20 118.193.32.0/19 118.193.64.0/20 118.193.96.0/19 118.193.128.0/17 118.194.0.0/15 118.196.0.0/14 118.202.0.0/15 118.204.0.0/14 118.212.0.0/15 118.215.192.0/18 118.224.0.0/14 118.228.0.0/15 118.230.0.0/16 118.239.0.0/16 118.242.0.0/16 118.244.0.0/14 118.248.0.0/13 119.0.0.0/15 119.2.0.0/19 119.2.128.0/17 119.3.0.0/16 119.4.0.0/14 119.10.0.0/17 119.15.136.0/21 119.16.0.0/16 119.18.192.0/20 119.18.208.0/21 119.18.224.0/19 119.19.0.0/16 119.20.0.0/14 119.27.64.0/18 119.27.128.0/17 119.28.0.0/15 119.30.48.0/20 119.31.192.0/19 119.32.0.0/13 119.40.0.0/18 119.40.64.0/20 119.40.128.0/17 119.41.0.0/16 119.42.0.0/19 119.42.52.0/22 119.42.128.0/20 119.42.224.0/19 119.44.0.0/15 119.48.0.0/13 119.57.0.0/16 119.58.0.0/16 119.59.128.0/17 119.60.0.0/15 119.62.0.0/16 119.63.32.0/19 119.75.208.0/20 119.78.0.0/15 119.80.0.0/16 119.82.208.0/20 119.84.0.0/14 119.88.0.0/14 119.96.0.0/13 119.108.0.0/15 119.112.0.0/12 119.128.0.0/12 119.144.0.0/14 119.148.160.0/19 119.151.192.0/18 119.160.200.0/21 119.161.120.0/21 119.161.128.0/17 119.162.0.0/15 119.164.0.0/14 119.176.0.0/12 119.232.0.0/15 119.235.128.0/18 119.248.0.0/14 119.252.96.0/21 119.252.240.0/20 119.253.0.0/16 119.254.0.0/15 120.0.0.0/12 120.24.0.0/14 120.30.0.0/15 120.32.0.0/12 120.48.0.0/15 120.52.0.0/14 120.64.0.0/13 120.72.32.0/19 120.72.128.0/17 120.76.0.0/14 120.80.0.0/13 120.88.8.0/21 120.90.0.0/15 120.92.0.0/16 120.94.0.0/15 120.128.0.0/13 120.136.16.0/21 120.136.128.0/18 120.137.0.0/17 120.143.128.0/19 120.192.0.0/10 121.0.8.0/21 121.0.16.0/20 121.4.0.0/15 121.8.0.0/13 121.16.0.0/12 121.32.0.0/13 121.40.0.0/14 121.46.0.0/18 121.46.76.0/22 121.46.128.0/17 121.47.0.0/16 121.48.0.0/15 121.50.8.0/21 121.51.0.0/16 121.52.160.0/19 121.52.208.0/20 121.52.224.0/19 121.54.176.0/21 121.54.188.0/22 121.55.0.0/18 121.56.0.0/15 121.58.0.0/17 121.58.136.0/21 121.58.144.0/20 121.58.160.0/21 121.59.0.0/16 121.60.0.0/14 121.68.0.0/14 121.76.0.0/15 121.79.128.0/18 121.89.0.0/16 121.100.128.0/17 121.101.0.0/18 121.101.208.0/20 121.192.0.0/13 121.200.192.0/21 121.201.0.0/16 121.204.0.0/14 121.224.0.0/12 121.248.0.0/14 121.255.0.0/16 122.0.64.0/18 122.0.128.0/17 122.4.0.0/14 122.8.0.0/15 122.10.128.0/22 122.10.132.0/23 122.10.136.0/23 122.10.164.0/22 122.10.168.0/21 122.10.176.0/20 122.10.192.0/22 122.10.200.0/21 122.10.208.0/21 122.10.216.0/22 122.10.228.0/22 122.10.232.0/21 122.10.240.0/22 122.11.0.0/17 122.12.0.0/15 122.14.0.0/16 122.48.0.0/16 122.49.0.0/18 122.51.0.0/16 122.64.0.0/11 122.96.0.0/15 122.102.0.0/20 122.102.64.0/19 122.112.0.0/14 122.119.0.0/16 122.128.100.0/22 122.128.120.0/21 122.136.0.0/13 122.144.128.0/17 122.152.192.0/18 122.156.0.0/14 122.188.0.0/14 122.192.0.0/14 122.198.0.0/16 122.200.40.0/21 122.200.64.0/18 122.201.48.0/20 122.204.0.0/14 122.224.0.0/12 122.240.0.0/13 122.248.24.0/21 122.248.48.0/20 122.255.64.0/21 123.0.128.0/18 123.4.0.0/14 123.8.0.0/13 123.49.128.0/17 123.50.160.0/19 123.52.0.0/14 123.56.0.0/14 123.60.0.0/15 123.62.0.0/16 123.64.0.0/11 123.96.0.0/15 123.98.0.0/17 123.99.128.0/17 123.100.0.0/19 123.101.0.0/16 123.103.0.0/17 123.108.128.0/20 123.108.208.0/20 123.112.0.0/12 123.128.0.0/13 123.136.80.0/20 123.137.0.0/16 123.138.0.0/15 123.144.0.0/12 123.160.0.0/12 123.176.60.0/22 123.176.80.0/20 123.177.0.0/16 123.178.0.0/15 123.180.0.0/14 123.184.0.0/13 123.196.0.0/15 123.199.128.0/17 123.206.0.0/15 123.232.0.0/14 123.242.0.0/17 123.242.192.0/21 123.244.0.0/14 123.249.0.0/16 123.253.108.0/22 123.253.240.0/22 123.254.96.0/21 124.6.64.0/18 124.14.0.0/15 124.16.0.0/15 124.20.0.0/14 124.28.192.0/18 124.29.0.0/17 124.31.0.0/16 124.40.112.0/20 124.40.128.0/18 124.40.192.0/19 124.40.240.0/22 124.42.0.0/16 124.47.0.0/18 124.64.0.0/15 124.66.0.0/17 124.67.0.0/16 124.68.0.0/14 124.72.0.0/13 124.88.0.0/13 124.108.8.0/21 124.108.40.0/21 124.109.96.0/21 124.112.0.0/13 124.126.0.0/15 124.128.0.0/13 124.147.128.0/17 124.150.137.0/24 124.151.0.0/16 124.152.0.0/16 124.160.0.0/13 124.172.0.0/14 124.192.0.0/15 124.196.0.0/16 124.200.0.0/13 124.220.0.0/14 124.224.0.0/12 124.240.0.0/17 124.240.128.0/18 124.242.0.0/16 124.243.192.0/18 124.248.0.0/17 124.249.0.0/16 124.250.0.0/15 124.254.0.0/18 125.31.192.0/18 125.32.0.0/12 125.58.128.0/17 125.61.128.0/17 125.62.0.0/18 125.64.0.0/11 125.96.0.0/15 125.98.0.0/16 125.104.0.0/13 125.112.0.0/12 125.169.0.0/16 125.171.0.0/16 125.208.0.0/18 125.210.0.0/15 125.213.0.0/17 125.214.96.0/19 125.215.0.0/18 125.216.0.0/13 125.254.128.0/17 128.108.0.0/16 129.28.0.0/16 129.204.0.0/16 129.211.0.0/16 132.232.0.0/16 134.175.0.0/16 137.59.59.0/24 137.59.88.0/22 139.5.56.0/21 139.5.80.0/22 139.5.92.0/22 139.5.108.0/22 139.5.128.0/22 139.5.160.0/22 139.5.192.0/22 139.5.204.0/22 139.5.208.0/21 139.5.244.0/22 139.9.0.0/16 139.129.0.0/16 139.148.0.0/16 139.155.0.0/16 139.159.0.0/16 139.170.0.0/16 139.176.0.0/16 139.183.0.0/16 139.186.0.0/16 139.189.0.0/16 139.196.0.0/14 139.200.0.0/13 139.208.0.0/13 139.217.0.0/16 139.219.0.0/16 139.220.0.0/15 139.224.0.0/16 139.226.0.0/15 140.75.0.0/16 140.143.0.0/16 140.179.0.0/16 140.205.0.0/16 140.206.0.0/15 140.210.0.0/16 140.224.0.0/16 140.237.0.0/16 140.240.0.0/16 140.243.0.0/16 140.246.0.0/16 140.249.0.0/16 140.250.0.0/16 140.255.0.0/16 144.0.0.0/16 144.7.0.0/16 144.12.0.0/16 144.48.8.0/22 144.48.64.0/22 144.48.88.0/22 144.48.156.0/22 144.48.180.0/22 144.48.184.0/22 144.48.204.0/22 144.48.208.0/21 144.48.220.0/22 144.48.252.0/22 144.52.0.0/16 144.123.0.0/16 144.255.0.0/16 146.56.192.0/18 146.196.56.0/22 146.196.68.0/22 146.196.72.0/22 146.196.92.0/22 146.196.112.0/21 146.196.124.0/22 148.70.0.0/16 150.0.0.0/16 150.115.0.0/16 150.121.0.0/16 150.122.0.0/16 150.129.136.0/22 150.129.192.0/22 150.129.216.0/22 150.129.252.0/22 150.138.0.0/15 150.158.0.0/16 150.223.0.0/16 150.242.0.0/21 150.242.8.0/22 150.242.28.0/22 150.242.44.0/22 150.242.48.0/21 150.242.56.0/22 150.242.76.0/22 150.242.80.0/22 150.242.92.0/22 150.242.96.0/22 150.242.112.0/21 150.242.120.0/22 150.242.152.0/21 150.242.160.0/21 150.242.168.0/22 150.242.184.0/21 150.242.192.0/22 150.242.212.0/22 150.242.224.0/20 150.242.240.0/21 150.242.248.0/22 150.255.0.0/16 152.104.128.0/17 152.136.0.0/16 153.0.0.0/16 153.3.0.0/16 153.34.0.0/15 153.36.0.0/15 153.99.0.0/16 153.101.0.0/16 153.118.0.0/15 154.8.128.0/17 157.0.0.0/16 157.18.0.0/16 157.61.0.0/16 157.119.0.0/22 157.119.8.0/21 157.119.16.0/22 157.119.28.0/22 157.119.68.0/22 157.119.112.0/22 157.119.132.0/22 157.119.136.0/21 157.119.144.0/20 157.119.160.0/21 157.119.172.0/22 157.119.192.0/21 157.119.240.0/22 157.119.252.0/22 157.122.0.0/16 157.148.0.0/16 157.156.0.0/16 157.255.0.0/16 159.75.0.0/16 159.226.0.0/16 160.19.208.0/21 160.19.216.0/22 160.20.48.0/22 160.202.60.0/22 160.202.148.0/22 160.202.152.0/22 160.202.168.0/22 160.202.212.0/22 160.202.216.0/21 160.202.224.0/19 160.238.64.0/22 161.189.0.0/16 161.207.0.0/16 162.14.0.0/16 162.105.0.0/16 163.0.0.0/16 163.47.4.0/22 163.53.0.0/20 163.53.36.0/22 163.53.40.0/21 163.53.48.0/20 163.53.64.0/22 163.53.88.0/21 163.53.96.0/19 163.53.128.0/21 163.53.136.0/22 163.53.160.0/20 163.53.188.0/22 163.53.220.0/22 163.53.240.0/22 163.125.0.0/16 163.142.0.0/16 163.177.0.0/16 163.179.0.0/16 163.204.0.0/16 164.52.0.0/17 166.111.0.0/16 167.139.0.0/16 167.189.0.0/16 167.220.244.0/22 168.160.0.0/16 170.179.0.0/16 171.8.0.0/13 171.34.0.0/15 171.36.0.0/14 171.40.0.0/13 171.80.0.0/12 171.104.0.0/13 171.112.0.0/12 171.208.0.0/12 172.81.192.0/18 175.0.0.0/12 175.16.0.0/13 175.24.0.0/14 175.30.0.0/15 175.42.0.0/15 175.44.0.0/16 175.46.0.0/15 175.48.0.0/12 175.64.0.0/11 175.102.0.0/16 175.106.128.0/17 175.111.144.0/20 175.111.160.0/20 175.111.184.0/22 175.146.0.0/15 175.148.0.0/14 175.152.0.0/14 175.158.96.0/22 175.160.0.0/12 175.176.156.0/22 175.176.176.0/22 175.176.188.0/22 175.176.192.0/22 175.178.0.0/16 175.184.128.0/18 175.185.0.0/16 175.186.0.0/15 175.188.0.0/14 180.76.0.0/14 180.84.0.0/15 180.86.0.0/16 180.88.0.0/14 180.94.56.0/21 180.94.96.0/20 180.94.120.0/21 180.95.128.0/17 180.96.0.0/11 180.129.128.0/17 180.130.0.0/16 180.136.0.0/13 180.148.16.0/21 180.148.152.0/21 180.148.216.0/21 180.148.224.0/19 180.149.128.0/19 180.149.236.0/22 180.150.160.0/19 180.152.0.0/13 180.160.0.0/12 180.178.112.0/21 180.178.192.0/18 180.184.0.0/14 180.188.0.0/17 180.189.148.0/22 180.200.252.0/22 180.201.0.0/16 180.202.0.0/15 180.208.0.0/15 180.210.212.0/22 180.210.224.0/19 180.212.0.0/15 180.222.224.0/19 180.223.0.0/16 180.233.0.0/18 180.233.64.0/19 180.233.144.0/22 180.235.64.0/19 180.235.112.0/22 180.235.136.0/22 182.16.144.0/21 182.16.192.0/19 182.18.0.0/17 182.23.184.0/21 182.23.200.0/21 182.32.0.0/12 182.48.96.0/19 182.49.0.0/16 182.50.0.0/20 182.50.112.0/20 182.51.0.0/16 182.54.0.0/17 182.54.244.0/22 182.61.0.0/16 182.80.0.0/13 182.88.0.0/14 182.92.0.0/16 182.96.0.0/11 182.128.0.0/12 182.144.0.0/13 182.157.0.0/16 182.160.64.0/19 182.174.0.0/15 182.200.0.0/13 182.236.128.0/17 182.237.24.0/21 182.238.0.0/16 182.239.0.0/19 182.240.0.0/13 182.254.0.0/16 182.255.32.0/21 182.255.60.0/22 183.0.0.0/10 183.64.0.0/13 183.78.160.0/21 183.78.180.0/22 183.81.172.0/22 183.81.180.0/22 183.84.0.0/15 183.91.128.0/22 183.91.136.0/21 183.91.144.0/20 183.92.0.0/14 183.128.0.0/11 183.160.0.0/13 183.168.0.0/15 183.170.0.0/16 183.172.0.0/14 183.182.0.0/19 183.184.0.0/13 183.192.0.0/10 185.203.36.0/22 188.131.128.0/17 192.51.188.0/24 192.55.46.0/24 192.55.68.0/22 192.102.204.0/23 192.124.154.0/24 192.140.128.0/21 192.140.136.0/22 192.140.156.0/22 192.140.160.0/19 192.140.192.0/20 192.140.208.0/21 192.144.128.0/17 192.197.113.0/24 193.112.0.0/16 198.175.100.0/22 199.212.57.0/24 202.0.100.0/23 202.0.122.0/23 202.0.176.0/22 202.3.128.0/23 202.3.134.0/24 202.4.128.0/19 202.4.252.0/22 202.5.208.0/21 202.5.216.0/22 202.6.6.0/23 202.6.66.0/23 202.6.72.0/23 202.6.87.0/24 202.6.88.0/23 202.6.92.0/23 202.6.103.0/24 202.6.108.0/24 202.6.110.0/23 202.6.114.0/24 202.6.176.0/20 202.8.0.0/24 202.8.2.0/23 202.8.4.0/23 202.8.12.0/24 202.8.24.0/24 202.8.77.0/24 202.8.120.0/22 202.8.128.0/19 202.8.192.0/20 202.9.32.0/24 202.9.34.0/23 202.9.48.0/23 202.9.51.0/24 202.9.52.0/23 202.9.54.0/24 202.9.57.0/24 202.9.58.0/23 202.10.64.0/20 202.10.112.0/20 202.12.1.0/24 202.12.2.0/24 202.12.17.0/24 202.12.18.0/23 202.12.72.0/24 202.12.84.0/23 202.12.96.0/24 202.12.98.0/23 202.12.106.0/24 202.12.111.0/24 202.12.116.0/24 202.14.64.0/23 202.14.69.0/24 202.14.73.0/24 202.14.74.0/23 202.14.76.0/24 202.14.78.0/23 202.14.88.0/24 202.14.97.0/24 202.14.104.0/23 202.14.108.0/23 202.14.111.0/24 202.14.114.0/23 202.14.118.0/23 202.14.124.0/23 202.14.127.0/24 202.14.129.0/24 202.14.135.0/24 202.14.136.0/24 202.14.149.0/24 202.14.151.0/24 202.14.157.0/24 202.14.158.0/23 202.14.169.0/24 202.14.170.0/23 202.14.172.0/22 202.14.176.0/24 202.14.184.0/23 202.14.208.0/23 202.14.213.0/24 202.14.219.0/24 202.14.220.0/24 202.14.222.0/23 202.14.225.0/24 202.14.226.0/23 202.14.231.0/24 202.14.235.0/24 202.14.236.0/22 202.14.246.0/24 202.14.251.0/24 202.20.66.0/24 202.20.79.0/24 202.20.87.0/24 202.20.88.0/23 202.20.90.0/24 202.20.94.0/23 202.20.114.0/24 202.20.117.0/24 202.20.120.0/24 202.20.125.0/24 202.20.126.0/23 202.21.48.0/20 202.21.131.0/24 202.21.132.0/24 202.21.141.0/24 202.21.142.0/24 202.21.147.0/24 202.21.148.0/24 202.21.150.0/23 202.21.152.0/23 202.21.154.0/24 202.21.156.0/24 202.22.248.0/21 202.27.12.0/24 202.27.14.0/24 202.27.136.0/23 202.36.226.0/24 202.38.0.0/22 202.38.8.0/21 202.38.48.0/20 202.38.64.0/18 202.38.128.0/21 202.38.136.0/23 202.38.138.0/24 202.38.140.0/22 202.38.146.0/23 202.38.149.0/24 202.38.150.0/23 202.38.152.0/22 202.38.156.0/24 202.38.158.0/23 202.38.160.0/23 202.38.164.0/22 202.38.168.0/22 202.38.176.0/23 202.38.184.0/21 202.38.192.0/18 202.40.4.0/23 202.40.7.0/24 202.40.15.0/24 202.40.135.0/24 202.40.136.0/24 202.40.140.0/24 202.40.143.0/24 202.40.144.0/23 202.40.150.0/24 202.40.155.0/24 202.40.156.0/24 202.40.158.0/23 202.40.162.0/24 202.41.8.0/23 202.41.11.0/24 202.41.12.0/23 202.41.128.0/24 202.41.130.0/23 202.41.152.0/21 202.41.192.0/24 202.41.196.0/22 202.41.200.0/22 202.41.240.0/20 202.43.76.0/22 202.43.144.0/20 202.44.16.0/20 202.44.48.0/22 202.44.67.0/24 202.44.74.0/24 202.44.97.0/24 202.44.129.0/24 202.44.132.0/23 202.44.146.0/23 202.45.0.0/23 202.45.2.0/24 202.45.15.0/24 202.45.16.0/20 202.46.16.0/23 202.46.18.0/24 202.46.20.0/23 202.46.32.0/19 202.46.128.0/24 202.46.224.0/20 202.47.82.0/23 202.47.96.0/20 202.47.126.0/24 202.47.128.0/24 202.47.130.0/23 202.52.33.0/24 202.52.34.0/24 202.52.47.0/24 202.52.143.0/24 202.52.144.0/24 202.53.140.0/24 202.53.143.0/24 202.57.192.0/20 202.57.212.0/22 202.57.216.0/22 202.57.240.0/20 202.58.0.0/24 202.58.101.0/24 202.58.104.0/22 202.58.112.0/22 202.59.0.0/23 202.59.212.0/22 202.59.236.0/24 202.59.240.0/24 202.60.48.0/21 202.60.96.0/21 202.60.112.0/20 202.60.132.0/22 202.60.136.0/21 202.60.144.0/20 202.61.68.0/22 202.61.76.0/22 202.61.88.0/22 202.61.123.0/24 202.61.127.0/24 202.62.112.0/22 202.62.248.0/22 202.62.252.0/24 202.62.255.0/24 202.63.80.0/20 202.63.160.0/19 202.63.248.0/22 202.63.253.0/24 202.65.0.0/21 202.65.8.0/23 202.65.96.0/20 202.66.168.0/22 202.67.0.0/22 202.69.4.0/22 202.69.16.0/20 202.70.0.0/19 202.70.96.0/20 202.70.192.0/20 202.71.32.0/20 202.72.40.0/21 202.72.80.0/20 202.72.112.0/20 202.73.128.0/22 202.73.240.0/20 202.74.8.0/21 202.74.36.0/24 202.74.42.0/24 202.74.52.0/24 202.74.80.0/20 202.74.232.0/22 202.74.254.0/23 202.75.208.0/20 202.75.252.0/22 202.76.252.0/22 202.77.80.0/21 202.77.92.0/22 202.78.8.0/21 202.79.224.0/21 202.79.248.0/22 202.80.192.0/20 202.81.0.0/22 202.81.176.0/20 202.83.252.0/22 202.84.0.0/20 202.84.16.0/23 202.84.22.0/24 202.84.24.0/21 202.85.208.0/20 202.86.249.0/24 202.86.252.0/22 202.87.80.0/20 202.88.32.0/22 202.89.8.0/21 202.89.96.0/22 202.89.108.0/22 202.89.119.0/24 202.89.232.0/21 202.90.0.0/22 202.90.16.0/20 202.90.37.0/24 202.90.96.0/19 202.90.193.0/24 202.90.196.0/24 202.90.205.0/24 202.90.224.0/20 202.91.0.0/22 202.91.36.0/22 202.91.96.0/20 202.91.128.0/22 202.91.176.0/20 202.91.224.0/19 202.92.0.0/22 202.92.8.0/21 202.92.48.0/20 202.92.252.0/22 202.93.0.0/22 202.93.252.0/22 202.94.68.0/24 202.94.74.0/24 202.94.81.0/24 202.94.92.0/22 202.95.240.0/21 202.95.252.0/22 202.96.0.0/12 202.112.0.0/13 202.120.0.0/15 202.122.0.0/21 202.122.32.0/21 202.122.64.0/19 202.122.112.0/20 202.122.128.0/24 202.122.132.0/24 202.123.96.0/20 202.123.116.0/22 202.123.120.0/22 202.124.16.0/21 202.124.24.0/22 202.125.107.0/24 202.125.109.0/24 202.125.112.0/20 202.125.176.0/20 202.127.0.0/21 202.127.12.0/22 202.127.16.0/20 202.127.40.0/21 202.127.48.0/20 202.127.112.0/20 202.127.128.0/19 202.127.160.0/21 202.127.192.0/20 202.127.208.0/23 202.127.212.0/22 202.127.216.0/21 202.127.224.0/19 202.129.208.0/24 202.130.0.0/19 202.130.39.0/24 202.130.224.0/19 202.131.16.0/21 202.131.48.0/20 202.131.208.0/20 202.133.32.0/20 202.134.58.0/24 202.134.128.0/20 202.134.208.0/20 202.136.48.0/20 202.136.208.0/20 202.136.224.0/20 202.136.248.0/22 202.137.231.0/24 202.140.140.0/22 202.140.144.0/20 202.141.160.0/19 202.142.16.0/20 202.143.4.0/22 202.143.16.0/20 202.143.32.0/20 202.143.56.0/21 202.143.100.0/22 202.143.104.0/22 202.144.196.0/22 202.146.160.0/20 202.146.186.0/24 202.146.188.0/22 202.146.196.0/22 202.146.200.0/21 202.147.144.0/20 202.148.32.0/20 202.148.64.0/18 202.149.32.0/19 202.149.160.0/19 202.149.224.0/19 202.150.16.0/20 202.150.32.0/20 202.150.56.0/22 202.150.192.0/20 202.150.224.0/19 202.151.0.0/22 202.151.33.0/24 202.151.128.0/19 202.152.176.0/20 202.153.0.0/22 202.153.7.0/24 202.153.48.0/20 202.157.192.0/19 202.158.160.0/19 202.158.242.0/24 202.160.140.0/22 202.160.156.0/22 202.160.176.0/20 202.162.67.0/24 202.162.75.0/24 202.164.0.0/20 202.164.96.0/19 202.165.176.0/20 202.165.208.0/20 202.165.239.0/24 202.165.240.0/23 202.165.243.0/24 202.165.245.0/24 202.165.251.0/24 202.165.252.0/22 202.166.224.0/19 202.168.80.0/22 202.168.128.0/20 202.168.160.0/19 202.170.128.0/19 202.170.216.0/21 202.170.224.0/19 202.171.216.0/21 202.171.232.0/24 202.171.235.0/24 202.172.0.0/22 202.172.7.0/24 202.173.0.0/22 202.173.6.0/24 202.173.8.0/21 202.173.112.0/22 202.173.224.0/19 202.174.64.0/20 202.174.124.0/22 202.176.224.0/19 202.179.160.0/20 202.179.240.0/20 202.180.128.0/19 202.180.208.0/21 202.181.8.0/22 202.181.28.0/22 202.181.112.0/20 202.182.32.0/20 202.182.192.0/19 202.189.0.0/18 202.189.80.0/20 202.189.184.0/21 202.191.0.0/24 202.191.68.0/22 202.191.72.0/21 202.191.80.0/20 202.192.0.0/12 203.0.4.0/22 203.0.10.0/23 203.0.18.0/24 203.0.24.0/24 203.0.42.0/23 203.0.45.0/24 203.0.46.0/23 203.0.81.0/24 203.0.82.0/23 203.0.90.0/23 203.0.96.0/23 203.0.104.0/21 203.0.114.0/23 203.0.122.0/24 203.0.128.0/24 203.0.130.0/23 203.0.132.0/22 203.0.137.0/24 203.0.142.0/24 203.0.144.0/24 203.0.146.0/24 203.0.148.0/24 203.0.150.0/23 203.0.152.0/24 203.0.177.0/24 203.0.224.0/24 203.1.4.0/22 203.1.18.0/24 203.1.26.0/23 203.1.65.0/24 203.1.66.0/23 203.1.70.0/23 203.1.76.0/23 203.1.90.0/24 203.1.97.0/24 203.1.98.0/23 203.1.100.0/22 203.1.108.0/24 203.1.253.0/24 203.1.254.0/24 203.2.64.0/21 203.2.73.0/24 203.2.112.0/21 203.2.126.0/23 203.2.140.0/24 203.2.150.0/24 203.2.152.0/22 203.2.156.0/23 203.2.160.0/21 203.2.180.0/23 203.2.196.0/23 203.2.209.0/24 203.2.214.0/23 203.2.226.0/23 203.2.229.0/24 203.2.236.0/23 203.3.68.0/24 203.3.72.0/23 203.3.75.0/24 203.3.80.0/21 203.3.96.0/22 203.3.105.0/24 203.3.112.0/21 203.3.120.0/24 203.3.123.0/24 203.3.135.0/24 203.3.139.0/24 203.3.143.0/24 203.4.132.0/23 203.4.134.0/24 203.4.151.0/24 203.4.152.0/22 203.4.174.0/23 203.4.180.0/24 203.4.186.0/24 203.4.205.0/24 203.4.208.0/22 203.4.227.0/24 203.4.230.0/23 203.5.4.0/23 203.5.7.0/24 203.5.8.0/23 203.5.11.0/24 203.5.21.0/24 203.5.22.0/24 203.5.44.0/24 203.5.46.0/23 203.5.52.0/22 203.5.56.0/23 203.5.60.0/23 203.5.114.0/23 203.5.118.0/24 203.5.120.0/24 203.5.172.0/24 203.5.180.0/23 203.5.182.0/24 203.5.185.0/24 203.5.186.0/24 203.5.188.0/23 203.5.190.0/24 203.5.195.0/24 203.5.214.0/23 203.5.218.0/23 203.6.131.0/24 203.6.136.0/24 203.6.138.0/23 203.6.142.0/24 203.6.150.0/23 203.6.157.0/24 203.6.159.0/24 203.6.224.0/20 203.6.248.0/23 203.7.129.0/24 203.7.138.0/23 203.7.147.0/24 203.7.150.0/23 203.7.158.0/24 203.7.192.0/23 203.7.200.0/24 203.8.0.0/24 203.8.8.0/24 203.8.23.0/24 203.8.70.0/24 203.8.82.0/24 203.8.86.0/23 203.8.91.0/24 203.8.110.0/23 203.8.115.0/24 203.8.166.0/23 203.8.169.0/24 203.8.173.0/24 203.8.184.0/24 203.8.186.0/23 203.8.190.0/23 203.8.192.0/24 203.8.197.0/24 203.8.198.0/23 203.8.203.0/24 203.8.209.0/24 203.8.210.0/23 203.8.212.0/22 203.8.217.0/24 203.8.220.0/24 203.9.32.0/24 203.9.36.0/23 203.9.57.0/24 203.9.63.0/24 203.9.65.0/24 203.9.70.0/23 203.9.72.0/24 203.9.75.0/24 203.9.76.0/23 203.9.96.0/22 203.9.100.0/23 203.9.108.0/24 203.9.158.0/24 203.10.34.0/24 203.10.56.0/24 203.10.74.0/23 203.10.84.0/22 203.10.88.0/24 203.10.95.0/24 203.10.125.0/24 203.11.70.0/24 203.11.76.0/22 203.11.82.0/24 203.11.84.0/22 203.11.100.0/22 203.11.109.0/24 203.11.117.0/24 203.11.122.0/24 203.11.126.0/24 203.11.136.0/22 203.11.141.0/24 203.11.142.0/23 203.11.180.0/22 203.11.208.0/22 203.12.16.0/24 203.12.19.0/24 203.12.24.0/24 203.12.57.0/24 203.12.65.0/24 203.12.66.0/24 203.12.70.0/23 203.12.87.0/24 203.12.100.0/23 203.12.103.0/24 203.12.114.0/24 203.12.118.0/24 203.12.130.0/24 203.12.137.0/24 203.12.196.0/22 203.12.211.0/24 203.12.219.0/24 203.12.226.0/24 203.12.240.0/22 203.13.18.0/24 203.13.24.0/24 203.13.44.0/23 203.13.88.0/23 203.13.92.0/22 203.13.173.0/24 203.13.224.0/23 203.13.227.0/24 203.13.233.0/24 203.14.24.0/22 203.14.33.0/24 203.14.56.0/24 203.14.61.0/24 203.14.62.0/24 203.14.104.0/24 203.14.114.0/23 203.14.118.0/24 203.14.162.0/24 203.14.192.0/24 203.14.194.0/23 203.14.214.0/24 203.14.231.0/24 203.14.246.0/24 203.15.0.0/20 203.15.20.0/23 203.15.22.0/24 203.15.87.0/24 203.15.88.0/23 203.15.105.0/24 203.15.112.0/21 203.15.130.0/23 203.15.149.0/24 203.15.151.0/24 203.15.156.0/22 203.15.174.0/24 203.15.227.0/24 203.15.232.0/21 203.15.240.0/23 203.15.246.0/24 203.16.10.0/24 203.16.12.0/23 203.16.16.0/21 203.16.27.0/24 203.16.38.0/24 203.16.49.0/24 203.16.50.0/23 203.16.58.0/24 203.16.63.0/24 203.16.133.0/24 203.16.161.0/24 203.16.162.0/24 203.16.186.0/23 203.16.228.0/24 203.16.238.0/24 203.16.240.0/24 203.16.245.0/24 203.17.2.0/24 203.17.18.0/24 203.17.28.0/24 203.17.39.0/24 203.17.56.0/24 203.17.74.0/23 203.17.88.0/23 203.17.136.0/24 203.17.164.0/24 203.17.187.0/24 203.17.190.0/23 203.17.231.0/24 203.17.233.0/24 203.17.248.0/23 203.17.255.0/24 203.18.2.0/23 203.18.4.0/24 203.18.7.0/24 203.18.31.0/24 203.18.37.0/24 203.18.48.0/23 203.18.52.0/24 203.18.72.0/22 203.18.80.0/23 203.18.87.0/24 203.18.100.0/23 203.18.105.0/24 203.18.107.0/24 203.18.110.0/24 203.18.129.0/24 203.18.131.0/24 203.18.132.0/23 203.18.144.0/24 203.18.153.0/24 203.18.199.0/24 203.18.208.0/24 203.18.211.0/24 203.18.215.0/24 203.19.1.0/24 203.19.18.0/24 203.19.24.0/24 203.19.30.0/24 203.19.32.0/21 203.19.41.0/24 203.19.44.0/23 203.19.46.0/24 203.19.58.0/24 203.19.60.0/23 203.19.64.0/24 203.19.68.0/24 203.19.72.0/24 203.19.101.0/24 203.19.111.0/24 203.19.131.0/24 203.19.133.0/24 203.19.144.0/24 203.19.147.0/24 203.19.149.0/24 203.19.156.0/24 203.19.176.0/24 203.19.178.0/23 203.19.208.0/24 203.19.228.0/22 203.19.233.0/24 203.19.242.0/24 203.19.248.0/23 203.19.255.0/24 203.20.17.0/24 203.20.40.0/23 203.20.44.0/24 203.20.48.0/24 203.20.61.0/24 203.20.65.0/24 203.20.84.0/23 203.20.89.0/24 203.20.106.0/23 203.20.115.0/24 203.20.117.0/24 203.20.118.0/23 203.20.122.0/24 203.20.126.0/23 203.20.135.0/24 203.20.136.0/21 203.20.150.0/24 203.20.230.0/24 203.20.232.0/24 203.20.236.0/24 203.21.0.0/23 203.21.2.0/24 203.21.8.0/24 203.21.10.0/24 203.21.18.0/24 203.21.33.0/24 203.21.34.0/24 203.21.41.0/24 203.21.44.0/24 203.21.68.0/24 203.21.82.0/24 203.21.96.0/22 203.21.124.0/24 203.21.136.0/23 203.21.145.0/24 203.21.206.0/24 203.22.24.0/24 203.22.28.0/23 203.22.31.0/24 203.22.68.0/24 203.22.76.0/24 203.22.78.0/24 203.22.84.0/24 203.22.87.0/24 203.22.92.0/22 203.22.99.0/24 203.22.106.0/24 203.22.122.0/23 203.22.131.0/24 203.22.163.0/24 203.22.166.0/24 203.22.170.0/24 203.22.176.0/21 203.22.194.0/24 203.22.242.0/23 203.22.245.0/24 203.22.246.0/24 203.22.252.0/23 203.23.0.0/24 203.23.47.0/24 203.23.61.0/24 203.23.62.0/23 203.23.73.0/24 203.23.85.0/24 203.23.92.0/22 203.23.98.0/24 203.23.107.0/24 203.23.112.0/24 203.23.130.0/24 203.23.140.0/23 203.23.172.0/24 203.23.182.0/24 203.23.186.0/23 203.23.192.0/24 203.23.197.0/24 203.23.198.0/24 203.23.204.0/22 203.23.224.0/24 203.23.226.0/23 203.23.228.0/22 203.23.249.0/24 203.23.251.0/24 203.24.13.0/24 203.24.18.0/24 203.24.27.0/24 203.24.43.0/24 203.24.56.0/24 203.24.58.0/24 203.24.67.0/24 203.24.74.0/24 203.24.79.0/24 203.24.80.0/23 203.24.84.0/23 203.24.86.0/24 203.24.90.0/24 203.24.111.0/24 203.24.112.0/24 203.24.116.0/24 203.24.122.0/23 203.24.145.0/24 203.24.152.0/23 203.24.157.0/24 203.24.161.0/24 203.24.167.0/24 203.24.186.0/23 203.24.199.0/24 203.24.202.0/24 203.24.212.0/23 203.24.217.0/24 203.24.219.0/24 203.24.244.0/24 203.25.19.0/24 203.25.20.0/23 203.25.46.0/24 203.25.48.0/21 203.25.64.0/23 203.25.91.0/24 203.25.99.0/24 203.25.100.0/24 203.25.106.0/24 203.25.131.0/24 203.25.135.0/24 203.25.138.0/24 203.25.147.0/24 203.25.153.0/24 203.25.154.0/23 203.25.164.0/24 203.25.166.0/24 203.25.174.0/23 203.25.180.0/24 203.25.182.0/24 203.25.191.0/24 203.25.199.0/24 203.25.200.0/24 203.25.202.0/23 203.25.208.0/20 203.25.229.0/24 203.25.235.0/24 203.25.236.0/24 203.25.242.0/24 203.26.12.0/24 203.26.34.0/24 203.26.49.0/24 203.26.50.0/24 203.26.55.0/24 203.26.56.0/23 203.26.60.0/24 203.26.65.0/24 203.26.68.0/24 203.26.76.0/24 203.26.80.0/24 203.26.84.0/24 203.26.97.0/24 203.26.102.0/23 203.26.115.0/24 203.26.116.0/24 203.26.129.0/24 203.26.143.0/24 203.26.144.0/24 203.26.148.0/23 203.26.154.0/24 203.26.158.0/23 203.26.170.0/24 203.26.173.0/24 203.26.176.0/24 203.26.185.0/24 203.26.202.0/23 203.26.210.0/24 203.26.214.0/24 203.26.222.0/24 203.26.224.0/24 203.26.228.0/24 203.26.232.0/24 203.27.0.0/24 203.27.10.0/24 203.27.15.0/24 203.27.16.0/24 203.27.20.0/24 203.27.22.0/23 203.27.40.0/24 203.27.45.0/24 203.27.53.0/24 203.27.65.0/24 203.27.66.0/24 203.27.81.0/24 203.27.88.0/24 203.27.102.0/24 203.27.109.0/24 203.27.117.0/24 203.27.121.0/24 203.27.122.0/23 203.27.125.0/24 203.27.200.0/24 203.27.202.0/24 203.27.233.0/24 203.27.241.0/24 203.27.250.0/24 203.28.10.0/24 203.28.12.0/24 203.28.33.0/24 203.28.34.0/23 203.28.43.0/24 203.28.44.0/24 203.28.54.0/24 203.28.56.0/24 203.28.73.0/24 203.28.74.0/24 203.28.76.0/24 203.28.86.0/24 203.28.88.0/24 203.28.112.0/24 203.28.131.0/24 203.28.136.0/24 203.28.140.0/24 203.28.145.0/24 203.28.165.0/24 203.28.169.0/24 203.28.170.0/24 203.28.178.0/23 203.28.185.0/24 203.28.187.0/24 203.28.196.0/24 203.28.226.0/23 203.28.239.0/24 203.29.2.0/24 203.29.8.0/23 203.29.13.0/24 203.29.14.0/24 203.29.28.0/24 203.29.46.0/24 203.29.57.0/24 203.29.61.0/24 203.29.63.0/24 203.29.69.0/24 203.29.73.0/24 203.29.81.0/24 203.29.90.0/24 203.29.95.0/24 203.29.100.0/24 203.29.103.0/24 203.29.112.0/24 203.29.120.0/22 203.29.182.0/23 203.29.187.0/24 203.29.189.0/24 203.29.190.0/24 203.29.205.0/24 203.29.210.0/24 203.29.217.0/24 203.29.227.0/24 203.29.231.0/24 203.29.233.0/24 203.29.234.0/24 203.29.248.0/24 203.29.254.0/23 203.30.16.0/23 203.30.25.0/24 203.30.27.0/24 203.30.29.0/24 203.30.66.0/24 203.30.81.0/24 203.30.87.0/24 203.30.111.0/24 203.30.121.0/24 203.30.123.0/24 203.30.152.0/24 203.30.156.0/24 203.30.162.0/24 203.30.173.0/24 203.30.175.0/24 203.30.187.0/24 203.30.194.0/24 203.30.217.0/24 203.30.220.0/24 203.30.222.0/24 203.30.232.0/23 203.30.235.0/24 203.30.240.0/23 203.30.246.0/24 203.30.250.0/23 203.31.45.0/24 203.31.46.0/24 203.31.49.0/24 203.31.51.0/24 203.31.54.0/23 203.31.69.0/24 203.31.72.0/24 203.31.80.0/24 203.31.85.0/24 203.31.97.0/24 203.31.105.0/24 203.31.106.0/24 203.31.108.0/23 203.31.124.0/24 203.31.162.0/24 203.31.174.0/24 203.31.177.0/24 203.31.181.0/24 203.31.187.0/24 203.31.189.0/24 203.31.204.0/24 203.31.220.0/24 203.31.222.0/23 203.31.225.0/24 203.31.229.0/24 203.31.248.0/23 203.31.253.0/24 203.32.20.0/24 203.32.48.0/23 203.32.56.0/24 203.32.60.0/24 203.32.62.0/24 203.32.68.0/23 203.32.76.0/24 203.32.81.0/24 203.32.84.0/23 203.32.95.0/24 203.32.102.0/24 203.32.105.0/24 203.32.130.0/24 203.32.133.0/24 203.32.140.0/24 203.32.152.0/24 203.32.186.0/23 203.32.192.0/24 203.32.196.0/24 203.32.203.0/24 203.32.204.0/23 203.32.212.0/24 203.33.4.0/24 203.33.7.0/24 203.33.8.0/21 203.33.21.0/24 203.33.26.0/24 203.33.32.0/24 203.33.63.0/24 203.33.64.0/24 203.33.67.0/24 203.33.68.0/24 203.33.73.0/24 203.33.79.0/24 203.33.100.0/24 203.33.122.0/24 203.33.129.0/24 203.33.131.0/24 203.33.145.0/24 203.33.156.0/24 203.33.158.0/23 203.33.174.0/24 203.33.185.0/24 203.33.200.0/24 203.33.202.0/23 203.33.204.0/24 203.33.206.0/23 203.33.214.0/23 203.33.224.0/23 203.33.226.0/24 203.33.233.0/24 203.33.243.0/24 203.33.250.0/24 203.34.4.0/24 203.34.21.0/24 203.34.27.0/24 203.34.39.0/24 203.34.48.0/23 203.34.54.0/24 203.34.56.0/23 203.34.67.0/24 203.34.69.0/24 203.34.76.0/24 203.34.92.0/24 203.34.106.0/24 203.34.113.0/24 203.34.147.0/24 203.34.150.0/24 203.34.152.0/23 203.34.161.0/24 203.34.162.0/24 203.34.187.0/24 203.34.192.0/21 203.34.204.0/22 203.34.232.0/24 203.34.240.0/24 203.34.242.0/24 203.34.245.0/24 203.34.251.0/24 203.55.2.0/23 203.55.4.0/24 203.55.10.0/24 203.55.13.0/24 203.55.22.0/24 203.55.30.0/24 203.55.93.0/24 203.55.101.0/24 203.55.109.0/24 203.55.110.0/24 203.55.116.0/23 203.55.119.0/24 203.55.128.0/23 203.55.146.0/23 203.55.192.0/24 203.55.196.0/24 203.55.218.0/23 203.55.221.0/24 203.55.224.0/24 203.56.1.0/24 203.56.4.0/24 203.56.12.0/24 203.56.24.0/24 203.56.38.0/24 203.56.40.0/24 203.56.46.0/24 203.56.48.0/21 203.56.68.0/23 203.56.82.0/23 203.56.84.0/23 203.56.95.0/24 203.56.110.0/24 203.56.121.0/24 203.56.161.0/24 203.56.169.0/24 203.56.172.0/23 203.56.175.0/24 203.56.183.0/24 203.56.185.0/24 203.56.187.0/24 203.56.192.0/24 203.56.198.0/24 203.56.201.0/24 203.56.208.0/23 203.56.210.0/24 203.56.214.0/24 203.56.216.0/24 203.56.227.0/24 203.56.228.0/24 203.56.231.0/24 203.56.232.0/24 203.56.240.0/24 203.56.252.0/24 203.56.254.0/24 203.57.5.0/24 203.57.6.0/24 203.57.12.0/23 203.57.28.0/24 203.57.39.0/24 203.57.46.0/24 203.57.58.0/24 203.57.61.0/24 203.57.66.0/24 203.57.69.0/24 203.57.70.0/23 203.57.73.0/24 203.57.90.0/24 203.57.101.0/24 203.57.109.0/24 203.57.123.0/24 203.57.157.0/24 203.57.200.0/24 203.57.202.0/24 203.57.206.0/24 203.57.222.0/24 203.57.224.0/20 203.57.246.0/23 203.57.249.0/24 203.57.253.0/24 203.57.254.0/23 203.62.2.0/24 203.62.131.0/24 203.62.139.0/24 203.62.161.0/24 203.62.197.0/24 203.62.228.0/22 203.62.234.0/24 203.62.246.0/24 203.76.160.0/22 203.76.168.0/22 203.76.208.0/21 203.76.216.0/22 203.76.240.0/21 203.77.180.0/22 203.78.48.0/20 203.78.156.0/22 203.79.0.0/20 203.79.32.0/20 203.80.4.0/23 203.80.32.0/20 203.80.57.0/24 203.80.129.0/24 203.80.132.0/22 203.80.136.0/21 203.80.144.0/20 203.81.0.0/21 203.81.16.0/20 203.81.244.0/22 203.82.0.0/23 203.82.16.0/21 203.82.112.0/20 203.82.224.0/20 203.83.0.0/22 203.83.8.0/21 203.83.56.0/21 203.83.224.0/20 203.86.0.0/17 203.86.250.0/24 203.86.254.0/23 203.88.32.0/19 203.88.100.0/22 203.88.192.0/19 203.89.0.0/22 203.89.8.0/21 203.89.100.0/22 203.89.133.0/24 203.89.136.0/22 203.89.144.0/24 203.90.0.0/22 203.90.8.0/21 203.90.128.0/18 203.90.192.0/19 203.91.32.0/19 203.91.96.0/20 203.91.120.0/21 203.92.0.0/22 203.92.6.0/24 203.92.160.0/19 203.93.0.0/16 203.94.0.0/19 203.95.0.0/21 203.95.96.0/19 203.95.128.0/18 203.95.200.0/21 203.95.208.0/22 203.95.224.0/19 203.99.8.0/21 203.99.16.0/20 203.99.80.0/20 203.100.32.0/20 203.100.48.0/21 203.100.58.0/24 203.100.60.0/24 203.100.63.0/24 203.100.80.0/20 203.100.96.0/19 203.100.192.0/20 203.104.32.0/20 203.105.96.0/19 203.105.128.0/19 203.107.0.0/17 203.110.160.0/19 203.110.208.0/20 203.110.232.0/23 203.110.234.0/24 203.114.80.0/20 203.114.244.0/22 203.118.192.0/19 203.118.241.0/24 203.118.248.0/22 203.119.24.0/21 203.119.32.0/22 203.119.80.0/22 203.119.85.0/24 203.119.113.0/24 203.119.114.0/23 203.119.116.0/22 203.119.120.0/21 203.119.128.0/17 203.123.58.0/24 203.128.32.0/19 203.128.96.0/19 203.128.224.0/21 203.129.8.0/21 203.130.32.0/19 203.132.32.0/19 203.134.240.0/21 203.135.96.0/19 203.135.160.0/20 203.142.219.0/24 203.142.224.0/19 203.144.96.0/19 203.145.0.0/19 203.148.0.0/18 203.148.64.0/20 203.148.80.0/22 203.148.86.0/23 203.149.92.0/22 203.152.64.0/19 203.152.128.0/19 203.153.0.0/22 203.156.192.0/18 203.158.16.0/21 203.160.52.0/22 203.160.104.0/21 203.160.129.0/24 203.160.192.0/19 203.161.0.0/22 203.161.180.0/24 203.161.183.0/24 203.161.192.0/19 203.166.160.0/19 203.167.28.0/22 203.168.0.0/19 203.170.58.0/23 203.171.0.0/22 203.171.208.0/24 203.171.224.0/20 203.174.4.0/24 203.174.6.0/23 203.174.96.0/19 203.175.128.0/19 203.175.192.0/18 203.176.0.0/18 203.176.64.0/19 203.176.168.0/21 203.184.80.0/20 203.185.189.0/24 203.187.160.0/19 203.189.0.0/23 203.189.6.0/23 203.189.112.0/22 203.189.192.0/19 203.189.232.0/22 203.189.240.0/22 203.190.96.0/20 203.190.249.0/24 203.191.0.0/23 203.191.2.0/24 203.191.5.0/24 203.191.7.0/24 203.191.16.0/20 203.191.64.0/18 203.191.133.0/24 203.191.144.0/20 203.192.0.0/19 203.193.224.0/19 203.194.120.0/21 203.195.64.0/19 203.195.112.0/21 203.195.128.0/17 203.196.0.0/20 203.196.28.0/22 203.201.181.0/24 203.201.182.0/24 203.202.236.0/22 203.205.64.0/19 203.205.128.0/17 203.207.64.0/18 203.207.128.0/17 203.208.0.0/20 203.208.16.0/22 203.208.32.0/19 203.209.224.0/19 203.212.0.0/20 203.212.80.0/20 203.215.232.0/21 203.217.164.0/22 203.223.0.0/20 203.223.16.0/21 204.52.191.0/24 210.2.0.0/19 210.5.0.0/19 210.5.56.0/21 210.5.128.0/19 210.7.56.0/21 210.12.0.0/15 210.14.64.0/19 210.14.112.0/20 210.14.128.0/17 210.15.0.0/17 210.15.128.0/18 210.16.104.0/22 210.16.128.0/18 210.21.0.0/16 210.22.0.0/16 210.23.32.0/19 210.25.0.0/16 210.26.0.0/15 210.28.0.0/14 210.32.0.0/12 210.51.0.0/16 210.52.0.0/15 210.56.192.0/19 210.72.0.0/14 210.76.0.0/15 210.78.0.0/16 210.79.64.0/18 210.79.224.0/19 210.82.0.0/15 210.87.128.0/18 210.185.192.0/18 210.192.96.0/19 211.64.0.0/13 211.80.0.0/12 211.96.0.0/13 211.136.0.0/13 211.144.0.0/12 211.160.0.0/13 212.64.0.0/17 212.129.128.0/17 218.0.0.0/11 218.56.0.0/13 218.64.0.0/11 218.96.0.0/14 218.100.88.0/21 218.100.96.0/19 218.100.128.0/17 218.104.0.0/14 218.108.0.0/15 218.185.192.0/19 218.185.240.0/21 218.192.0.0/12 218.240.0.0/13 218.249.0.0/16 219.72.0.0/16 219.82.0.0/16 219.83.128.0/17 219.90.68.0/22 219.90.72.0/21 219.128.0.0/11 219.216.0.0/13 219.224.0.0/12 219.242.0.0/15 219.244.0.0/14 220.101.192.0/18 220.112.0.0/14 220.152.128.0/17 220.154.0.0/15 220.158.240.0/22 220.160.0.0/11 220.192.0.0/12 220.231.0.0/18 220.231.128.0/17 220.232.64.0/18 220.234.0.0/16 220.242.0.0/15 220.247.136.0/21 220.248.0.0/14 220.252.0.0/16 221.0.0.0/13 221.8.0.0/14 221.12.0.0/17 221.12.128.0/18 221.13.0.0/16 221.14.0.0/15 221.122.0.0/15 221.128.128.0/17 221.129.0.0/16 221.130.0.0/15 221.133.224.0/19 221.136.0.0/15 221.172.0.0/14 221.176.0.0/13 221.192.0.0/14 221.196.0.0/15 221.198.0.0/16 221.199.0.0/17 221.199.128.0/18 221.199.192.0/20 221.199.224.0/19 221.200.0.0/13 221.208.0.0/12 221.224.0.0/12 222.16.0.0/12 222.32.0.0/11 222.64.0.0/11 222.125.0.0/16 222.126.128.0/17 222.128.0.0/12 222.160.0.0/14 222.168.0.0/13 222.176.0.0/12 222.192.0.0/11 222.240.0.0/13 222.248.0.0/15 223.0.0.0/12 223.20.0.0/15 223.27.184.0/22 223.29.208.0/22 223.29.252.0/22 223.64.0.0/11 223.96.0.0/12 223.112.0.0/14 223.116.0.0/15 223.120.128.0/17 223.121.128.0/17 223.122.0.0/15 223.124.0.0/14 223.128.0.0/15 223.144.0.0/12 223.160.0.0/14 223.166.0.0/15 223.192.0.0/15 223.198.0.0/15 223.201.0.0/16 223.202.0.0/15 223.208.0.0/13 223.220.0.0/15 223.223.176.0/20 223.223.192.0/20 223.240.0.0/13 223.248.0.0/14 223.252.128.0/17 223.254.0.0/16 223.255.0.0/17 223.255.236.0/22 223.255.252.0/23 2001:250::/31 2001:252::/32 2001:254::/32 2001:256::/32 2001:7fa:5::/48 2001:7fa:10::/48 2001:c68::/32 2001:cc0::/32 2001:da8::/31 2001:daa::/32 2001:dc7::/32 2001:dd8:1::/48 2001:dd8:5::/48 2001:dd8:1a::/48 2001:dd9::/48 2001:df0:27e::/48 2001:df0:423::/48 2001:df0:2180::/48 2001:df0:2d80::/48 2001:df0:2e00::/48 2001:df0:2e80::/48 2001:df0:4500::/48 2001:df0:4580::/48 2001:df0:5d00::/47 2001:df0:5d80::/48 2001:df0:9a00::/48 2001:df0:b180::/48 2001:df0:bf80::/48 2001:df0:d180::/48 2001:df0:d880::/48 2001:df1:680::/48 2001:df1:c80::/48 2001:df1:2080::/48 2001:df1:3d00::/48 2001:df1:4180::/48 2001:df1:4580::/48 2001:df1:5280::/48 2001:df1:5b80::/48 2001:df1:6180::/48 2001:df1:6b80::/48 2001:df1:8b00::/48 2001:df1:a100::/48 2001:df1:b980::/48 2001:df1:bd80::/48 2001:df1:c900::/48 2001:df1:d100::/48 2001:df1:d180::/48 2001:df1:da00::/48 2001:df1:e600::/48 2001:df1:f480::/48 2001:df1:f580::/48 2001:df1:fd80::/48 2001:df2:80::/48 2001:df2:180::/47 2001:df2:5200::/48 2001:df2:5780::/48 2001:df2:5a80::/48 2001:df3:b100::/48 2001:df4:1500::/48 2001:df4:2f00::/48 2001:df4:5900::/48 2001:df4:cf00::/48 2001:df5:7800::/48 2001:df6:100::/48 2001:df6:f00::/48 2001:df6:1c00::/48 2001:df6:3d00::/48 2001:df6:5d00::/48 2001:df6:6800::/48 2001:df6:df00::/48 2001:df6:f400::/48 2001:df7:5900::/48 2001:df7:6600::/48 2001:df7:ab00::/48 2001:e08::/32 2001:e18::/32 2001:e80::/32 2001:e88::/32 2001:f38::/32 2001:f88::/32 2001:4438::/32 2001:4510::/29 2400:1040::/32 2400:12c0::/32 2400:1340::/32 2400:1380::/32 2400:15c0::/32 2400:1640::/32 2400:16c0::/32 2400:1740::/32 2400:17c0::/32 2400:1840::/32 2400:18c0::/32 2400:1940::/32 2400:19c0::/32 2400:1a40::/32 2400:1ac0::/32 2400:1b40::/32 2400:1cc0::/32 2400:1d40::/32 2400:1dc0::/32 2400:1e40::/32 2400:1ec0::/32 2400:1f40::/32 2400:1fc0::/32 2400:3040::/32 2400:3140::/32 2400:31c0::/32 2400:3200::/32 2400:3280::/32 2400:32c0::/32 2400:3340::/32 2400:33c0::/32 2400:3440::/32 2400:34c0::/32 2400:3540::/32 2400:35c0::/32 2400:3600::/32 2400:3640::/32 2400:36c0::/32 2400:38c0::/32 2400:39c0::/32 2400:3a00::/32 2400:3a40::/32 2400:3b40::/32 2400:3bc0::/32 2400:3c40::/32 2400:3cc0::/32 2400:3e00::/32 2400:3f40::/32 2400:3fc0::/32 2400:4440::/32 2400:44c0::/32 2400:4540::/32 2400:4600::/32 2400:4640::/32 2400:46c0::/32 2400:4740::/32 2400:4bc0::/32 2400:4e00::/32 2400:4e40::/32 2400:5080::/32 2400:5280::/32 2400:5400::/32 2400:5580::/32 2400:55c0::/32 2400:5600::/32 2400:5640::/32 2400:56c0::/32 2400:57c0::/32 2400:5840::/32 2400:5a00::/32 2400:5a40::/32 2400:5ac0::/32 2400:5b40::/32 2400:5bc0::/32 2400:5c40::/32 2400:5c80::/32 2400:5cc0::/32 2400:5e80::/32 2400:5fc0::/32 2400:6000::/32 2400:6040::/32 2400:60c0::/32 2400:61c0::/32 2400:6200::/32 2400:6600::/32 2400:6640::/32 2400:66c0::/32 2400:6740::/32 2400:67c0::/32 2400:6840::/32 2400:68c0::/32 2400:6940::/32 2400:69c0::/32 2400:6a00::/32 2400:6a40::/32 2400:6ac0::/32 2400:6b40::/32 2400:6bc0::/32 2400:6c40::/32 2400:6cc0::/32 2400:6d40::/32 2400:6dc0::/32 2400:6e00::/32 2400:6e40::/32 2400:6ec0::/32 2400:6f40::/32 2400:6f80::/32 2400:6fc0::/32 2400:7040::/32 2400:7100::/32 2400:7140::/32 2400:71c0::/32 2400:7200::/32 2400:7240::/32 2400:72c0::/32 2400:7340::/32 2400:73c0::/32 2400:7440::/32 2400:74c0::/32 2400:7540::/32 2400:75c0::/32 2400:7640::/32 2400:7680::/32 2400:76c0::/32 2400:7740::/32 2400:77c0::/32 2400:79c0::/32 2400:7ac0::/32 2400:7bc0::/32 2400:7f80::/32 2400:7fc0::/32 2400:8080::/32 2400:8200::/32 2400:82c0::/32 2400:8580::/32 2400:8600::/32 2400:8780::/32 2400:87c0::/32 2400:8840::/32 2400:8980::/32 2400:89c0::/32 2400:8e00::/32 2400:8f00::/32 2400:8fc0::/32 2400:9040::/32 2400:9340::/32 2400:9580::/32 2400:95c0::/32 2400:9600::/32 2400:98c0::/32 2400:9a00::/32 2400:9dc0::/32 2400:9e00::/32 2400:a040::/32 2400:a380::/32 2400:a480::/32 2400:a6c0::/32 2400:a780::/32 2400:a8c0::/32 2400:a900::/32 2400:a980::/29 2400:abc0::/32 2400:ae00::/32 2400:b200::/32 2400:b2c0::/32 2400:b500::/32 2400:b600::/32 2400:b6c0::/32 2400:b700::/32 2400:b7c0::/32 2400:b8c0::/32 2400:b9c0::/32 2400:ba00::/32 2400:ba40::/31 2400:bac0::/32 2400:bc40::/32 2400:be00::/32 2400:bf00::/32 2400:c200::/32 2400:c380::/32 2400:c840::/32 2400:c8c0::/32 2400:c940::/32 2400:c9c0::/32 2400:ca40::/32 2400:cac0::/32 2400:cb40::/32 2400:cb80::/32 2400:cbc0::/32 2400:cc40::/32 2400:cc80::/32 2400:ccc0::/32 2400:cd40::/32 2400:cdc0::/32 2400:ce00::/32 2400:ce40::/32 2400:cf40::/32 2400:cf80::/32 2400:cfc0::/32 2400:d0c0::/32 2400:d100::/32 2400:d1c0::/32 2400:d200::/32 2400:d300::/32 2400:d380::/32 2400:d440::/32 2400:d600::/32 2400:d6c0::/32 2400:d780::/32 2400:da00::/32 2400:dd00::/28 2400:dd40::/32 2400:de00::/32 2400:de80::/32 2400:e0c0::/32 2400:e140::/32 2400:e5c0::/32 2400:e680::/32 2400:e880::/32 2400:ebc0::/32 2400:edc0::/32 2400:ee00::/32 2400:eec0::/32 2400:ef40::/32 2400:f480::/32 2400:f540::/32 2400:f5c0::/32 2400:f7c0::/32 2400:f840::/32 2400:f980::/32 2400:fac0::/32 2400:fb40::/32 2400:fbc0::/32 2400:fc40::/32 2400:fcc0::/32 2400:fe00::/32 2401:80::/32 2401:140::/32 2401:1c0::/32 2401:540::/32 2401:780::/32 2401:7c0::/32 2401:9c0::/32 2401:a00::/32 2401:a40::/32 2401:ac0::/32 2401:b40::/32 2401:bc0::/32 2401:c40::/32 2401:cc0::/32 2401:d40::/32 2401:e00::/32 2401:1000::/32 2401:11c0::/32 2401:1200::/32 2401:12c0::/32 2401:15c0::/32 2401:1740::/32 2401:18c0::/32 2401:1940::/32 2401:19c0::/32 2401:1a40::/32 2401:1ac0::/32 2401:1d40::/32 2401:1dc0::/32 2401:1e00::/32 2401:1ec0::/32 2401:1f40::/32 2401:2040::/32 2401:2080::/32 2401:23c0::/32 2401:2600::/32 2401:2780::/32 2401:2980::/32 2401:2a00::/32 2401:2b40::/32 2401:2e00::/32 2401:3100::/32 2401:3380::/32 2401:33c0::/32 2401:3440::/32 2401:3480::/32 2401:34c0::/32 2401:3640::/32 2401:3780::/32 2401:3800::/32 2401:3880::/32 2401:3980::/32 2401:3a00::/32 2401:3a80::/32 2401:3b80::/32 2401:3c80::/32 2401:3d80::/32 2401:3e80::/32 2401:3f80::/32 2401:4080::/32 2401:4180::/32 2401:4280::/32 2401:4380::/32 2401:4480::/32 2401:4580::/32 2401:4680::/32 2401:4780::/32 2401:4880::/32 2401:4a80::/32 2401:4b00::/32 2401:4f80::/32 2401:5180::/32 2401:5680::/32 2401:56c0::/32 2401:59c0::/32 2401:5b40::/32 2401:5c80::/32 2401:7180::/32 2401:71c0::/32 2401:7240::/32 2401:7340::/32 2401:7580::/32 2401:7680::/32 2401:7700::/32 2401:7780::/32 2401:7880::/32 2401:7980::/32 2401:7a00::/32 2401:7a80::/32 2401:7b80::/32 2401:7bc0::/32 2401:7c80::/32 2401:7cc0::/32 2401:7d40::/32 2401:7d80::/32 2401:7e00::/32 2401:7f80::/32 2401:8200::/32 2401:82c0::/32 2401:8380::/32 2401:8540::/32 2401:8600::/32 2401:8680::/32 2401:8840::/32 2401:8d00::/32 2401:8e40::/32 2401:8f40::/32 2401:8fc0::/32 2401:9340::/32 2401:9380::/32 2401:9600::/32 2401:96c0::/32 2401:9740::/32 2401:98c0::/32 2401:9a00::/32 2401:9ac0::/32 2401:9b40::/32 2401:9bc0::/32 2401:9dc0::/32 2401:9e40::/32 2401:9f80::/32 2401:a140::/32 2401:a180::/32 2401:a340::/32 2401:a3c0::/32 2401:a4c0::/32 2401:a540::/32 2401:a5c0::/32 2401:a640::/32 2401:a940::/32 2401:a980::/32 2401:aa00::/32 2401:aa40::/32 2401:acc0::/32 2401:ad40::/32 2401:adc0::/32 2401:b040::/32 2401:b180::/32 2401:b340::/32 2401:b400::/32 2401:b480::/32 2401:b4c0::/32 2401:b540::/32 2401:b580::/32 2401:b600::/32 2401:b680::/32 2401:b6c0::/32 2401:b7c0::/32 2401:b940::/32 2401:ba00::/32 2401:ba40::/32 2401:bb80::/32 2401:be00::/32 2401:c200::/32 2401:c540::/32 2401:c600::/32 2401:c640::/32 2401:c6c0::/32 2401:c840::/32 2401:c8c0::/32 2401:ca00::/32 2401:ca80::/32 2401:cb80::/32 2401:cc00::/32 2401:ce00::/32 2401:cf40::/32 2401:cfc0::/32 2401:d0c0::/32 2401:d140::/32 2401:d180::/32 2401:d2c0::/32 2401:d340::/32 2401:d780::/32 2401:da00::/32 2401:de00::/32 2401:e080::/32 2401:e0c0::/32 2401:e140::/32 2401:e240::/32 2401:e2c0::/32 2401:e340::/32 2401:e6c0::/32 2401:e840::/32 2401:e8c0::/32 2401:e940::/32 2401:e9c0::/32 2401:ec00::/32 2401:ec40::/32 2401:f300::/32 2401:f7c0::/32 2401:fa80::/32 2401:fac0::/32 2401:fb80::/32 2401:fc80::/32 2401:fe80::/32 2401:ffc0::/32 2402:440::/32 2402:5c0::/32 2402:840::/32 2402:880::/32 2402:ac0::/32 2402:e00::/32 2402:fc0::/32 2402:1000::/32 2402:1440::/32 2402:14c0::/32 2402:1540::/32 2402:1600::/32 2402:1740::/32 2402:19c0::/32 2402:1ec0::/32 2402:1f40::/32 2402:1f80::/32 2402:2000::/32 2402:2280::/32 2402:22c0::/32 2402:2440::/32 2402:24c0::/32 2402:2540::/32 2402:2640::/32 2402:2780::/32 2402:27c0::/32 2402:2a00::/32 2402:2b80::/32 2402:2bc0::/32 2402:2d00::/32 2402:2d80::/32 2402:2e80::/32 2402:2f40::/32 2402:3040::/32 2402:3080::/32 2402:3140::/32 2402:3180::/32 2402:31c0::/32 2402:3240::/32 2402:33c0::/32 2402:39c0::/32 2402:3a40::/32 2402:3ac0::/32 2402:3c00::/32 2402:3e00::/32 2402:3ec0::/32 2402:3f40::/32 2402:3f80::/32 2402:4140::/32 2402:42c0::/32 2402:4340::/32 2402:43c0::/32 2402:4440::/32 2402:4500::/32 2402:4540::/32 2402:4a00::/32 2402:4a40::/32 2402:4a80::/32 2402:4ac0::/32 2402:4b80::/32 2402:4bc0::/32 2402:4c40::/32 2402:4d80::/32 2402:4e00::/32 2402:4ec0::/32 2402:4f80::/32 2402:50c0::/32 2402:5140::/32 2402:5180::/32 2402:51c0::/32 2402:5240::/32 2402:52c0::/32 2402:5340::/32 2402:5880::/32 2402:5940::/32 2402:59c0::/32 2402:5a40::/32 2402:5b40::/32 2402:5bc0::/32 2402:5d00::/32 2402:5e00::/32 2402:5e40::/32 2402:5ec0::/32 2402:5f40::/32 2402:6280::/32 2402:62c0::/32 2402:64c0::/32 2402:65c0::/32 2402:66c0::/32 2402:6740::/32 2402:67c0::/32 2402:6a00::/32 2402:6b40::/32 2402:6bc0::/32 2402:6dc0::/32 2402:6e00::/32 2402:6e80::/32 2402:6ec0::/32 2402:6f40::/32 2402:6fc0::/32 2402:7040::/32 2402:7080::/32 2402:70c0::/32 2402:7140::/32 2402:71c0::/32 2402:7240::/32 2402:72c0::/32 2402:7540::/32 2402:75c0::/32 2402:7740::/32 2402:7d00::/32 2402:7d80::/32 2402:8180::/32 2402:8280::/32 2402:8300::/32 2402:8380::/32 2402:85c0::/32 2402:87c0::/32 2402:8800::/32 2402:8840::/32 2402:8900::/32 2402:8940::/32 2402:89c0::/32 2402:8b40::/32 2402:8bc0::/32 2402:8cc0::/32 2402:8d40::/32 2402:8f40::/32 2402:8f80::/32 2402:9240::/32 2402:92c0::/32 2402:93c0::/32 2402:9440::/32 2402:9480::/32 2402:94c0::/32 2402:9580::/32 2402:95c0::/32 2402:9680::/32 2402:96c0::/32 2402:9840::/32 2402:98c0::/32 2402:9940::/32 2402:9a80::/32 2402:9b80::/32 2402:9f80::/32 2402:9fc0::/32 2402:a080::/32 2402:a180::/32 2402:a200::/32 2402:a240::/32 2402:a280::/32 2402:a380::/32 2402:a3c0::/32 2402:a640::/32 2402:a680::/32 2402:a6c0::/32 2402:a840::/32 2402:a880::/32 2402:a9c0::/32 2402:aa80::/32 2402:ab80::/32 2402:ae00::/32 2402:ae40::/32 2402:aec0::/32 2402:af80::/32 2402:afc0::/32 2402:b080::/32 2402:b200::/32 2402:b380::/32 2402:b3c0::/32 2402:b440::/32 2402:b6c0::/32 2402:b880::/32 2402:b8c0::/32 2402:b940::/32 2402:b980::/32 2402:ba80::/32 2402:bac0::/32 2402:bbc0::/32 2402:bec0::/32 2402:bf80::/32 2402:c280::/32 2402:c3c0::/32 2402:c5c0::/32 2402:c9c0::/32 2402:cbc0::/32 2402:cc40::/32 2402:cc80::/32 2402:cf00::/32 2402:cf40::/32 2402:d040::/32 2402:d140::/32 2402:d2c0::/32 2402:d300::/32 2402:d340::/32 2402:d380::/32 2402:d5c0::/32 2402:d6c0::/32 2402:d740::/32 2402:d780::/32 2402:d880::/32 2402:d980::/32 2402:da40::/32 2402:db40::/32 2402:dcc0::/32 2402:de40::/32 2402:dec0::/32 2402:df40::/32 2402:dfc0::/32 2402:e040::/32 2402:e0c0::/32 2402:e140::/32 2402:e2c0::/32 2402:e3c0::/32 2402:e480::/32 2402:e540::/32 2402:e680::/32 2402:e740::/32 2402:e780::/32 2402:e7c0::/32 2402:e880::/32 2402:e980::/32 2402:eb80::/32 2402:ec80::/32 2402:ed80::/32 2402:ef40::/32 2402:ef80::/32 2402:f000::/32 2402:f140::/32 2402:f340::/32 2402:f3c0::/32 2402:f480::/32 2402:f540::/32 2402:f580::/32 2402:f740::/32 2402:f780::/32 2402:f8c0::/32 2402:f980::/32 2402:f9c0::/32 2402:fac0::/32 2402:fcc0::/32 2402:ff40::/32 2402:ffc0::/32 2403:600::/32 2403:700::/32 2403:7c0::/32 2403:800::/31 2403:980::/32 2403:a80::/32 2403:b80::/32 2403:c80::/32 2403:d40::/32 2403:d80::/32 2403:e80::/32 2403:f00::/32 2403:f40::/32 2403:f80::/32 2403:fc0::/32 2403:1180::/32 2403:1340::/32 2403:1440::/32 2403:1580::/32 2403:16c0::/32 2403:17c0::/32 2403:1980::/32 2403:1a40::/32 2403:1b80::/32 2403:1c80::/32 2403:1d80::/32 2403:1dc0::/32 2403:1e80::/32 2403:1ec0::/32 2403:1f80::/32 2403:2040::/32 2403:2080::/32 2403:2180::/32 2403:2240::/32 2403:2280::/32 2403:2380::/32 2403:2440::/32 2403:24c0::/32 2403:2580::/32 2403:25c0::/32 2403:2680::/32 2403:26c0::/32 2403:2740::/32 2403:2780::/32 2403:28c0::/32 2403:2940::/32 2403:2a00::/32 2403:2a40::/32 2403:2ac0::/32 2403:2b40::/32 2403:2bc0::/32 2403:2cc0::/32 2403:2d80::/32 2403:2f40::/32 2403:2fc0::/32 2403:3040::/32 2403:30c0::/32 2403:3140::/32 2403:3280::/32 2403:32c0::/32 2403:3380::/32 2403:3480::/32 2403:3580::/32 2403:3640::/32 2403:3680::/32 2403:36c0::/32 2403:3740::/32 2403:3780::/32 2403:37c0::/32 2403:3840::/32 2403:3880::/32 2403:38c0::/32 2403:3940::/32 2403:3980::/32 2403:39c0::/32 2403:3a40::/32 2403:3b40::/32 2403:3b80::/32 2403:3bc0::/32 2403:3c40::/32 2403:3c80::/32 2403:3cc0::/32 2403:3d40::/32 2403:3d80::/32 2403:3dc0::/32 2403:3e80::/32 2403:3ec0::/32 2403:3f40::/32 2403:3f80::/32 2403:4080::/32 2403:4180::/32 2403:4240::/32 2403:4280::/32 2403:4300::/32 2403:4380::/32 2403:4580::/32 2403:4680::/32 2403:4840::/32 2403:4880::/32 2403:4980::/32 2403:4a40::/32 2403:4a80::/32 2403:4b40::/32 2403:4b80::/32 2403:4c80::/32 2403:4cc0::/32 2403:4d40::/32 2403:4d80::/32 2403:4ec0::/32 2403:5040::/32 2403:5080::/32 2403:50c0::/32 2403:5280::/32 2403:5380::/32 2403:54c0::/32 2403:5540::/32 2403:5580::/32 2403:5640::/32 2403:5780::/32 2403:58c0::/32 2403:5980::/32 2403:5a80::/32 2403:5b40::/32 2403:5b80::/32 2403:5c80::/32 2403:5d80::/32 2403:5e40::/32 2403:5e80::/32 2403:5ec0::/32 2403:5f80::/32 2403:5fc0::/32 2403:6080::/32 2403:6180::/32 2403:6280::/32 2403:62c0::/32 2403:6380::/32 2403:6580::/32 2403:6680::/32 2403:6740::/32 2403:6780::/32 2403:6880::/32 2403:6980::/32 2403:6a00::/32 2403:6c80::/32 2403:6d40::/32 2403:6d80::/32 2403:6e80::/32 2403:6f40::/32 2403:6fc0::/32 2403:7040::/32 2403:7080::/32 2403:7180::/32 2403:7280::/32 2403:7380::/32 2403:7480::/32 2403:7540::/32 2403:7580::/32 2403:76c0::/32 2403:7700::/32 2403:7840::/32 2403:78c0::/32 2403:7a80::/32 2403:7b00::/32 2403:7d80::/32 2403:7e80::/32 2403:7f80::/32 2403:8080::/32 2403:8180::/32 2403:8280::/32 2403:8380::/32 2403:83c0::/32 2403:8480::/32 2403:8580::/32 2403:8880::/32 2403:8900::/32 2403:8980::/32 2403:8a40::/32 2403:8a80::/32 2403:8b00::/32 2403:8b80::/32 2403:8c00::/32 2403:8c80::/32 2403:8d00::/32 2403:8d80::/32 2403:8f80::/32 2403:9080::/32 2403:9180::/32 2403:9280::/32 2403:9380::/32 2403:9480::/32 2403:9580::/32 2403:9680::/32 2403:9780::/32 2403:9880::/32 2403:9a80::/32 2403:9ac0::/32 2403:9b00::/32 2403:9b40::/32 2403:9b80::/32 2403:9c80::/32 2403:9d00::/32 2403:9d80::/32 2403:9e40::/32 2403:9e80::/32 2403:9ec0::/32 2403:9f80::/32 2403:a100::/32 2403:a140::/32 2403:a200::/32 2403:a300::/32 2403:a480::/32 2403:a580::/32 2403:a680::/32 2403:a6c0::/32 2403:a780::/32 2403:a880::/32 2403:a940::/32 2403:a980::/32 2403:a9c0::/32 2403:aa40::/32 2403:aa80::/32 2403:ab80::/32 2403:ac00::/32 2403:af80::/32 2403:b080::/32 2403:b180::/32 2403:b280::/32 2403:b380::/32 2403:b400::/32 2403:b480::/32 2403:b580::/32 2403:b680::/32 2403:b780::/32 2403:b880::/32 2403:b980::/32 2403:ba40::/32 2403:c040::/32 2403:c080::/32 2403:c100::/32 2403:c140::/32 2403:c180::/32 2403:c3c0::/32 2403:c440::/32 2403:c480::/32 2403:c4c0::/32 2403:c980::/32 2403:cdc0::/32 2403:cec0::/32 2403:cf80::/32 2403:d080::/32 2403:d180::/32 2403:d280::/32 2403:d2c0::/32 2403:d380::/32 2403:d400::/32 2403:d440::/32 2403:d480::/32 2403:d580::/32 2403:d680::/32 2403:d780::/32 2403:d7c0::/32 2403:d880::/32 2403:d980::/32 2403:d9c0::/32 2403:da80::/32 2403:dac0::/32 2403:db00::/32 2403:db80::/32 2403:dc80::/32 2403:dd80::/32 2403:de80::/32 2403:df80::/32 2403:e080::/32 2403:e180::/32 2403:e280::/32 2403:e300::/32 2403:e480::/32 2403:e500::/32 2403:e580::/32 2403:e640::/32 2403:e680::/32 2403:e700::/32 2403:e780::/32 2403:e7c0::/32 2403:e880::/32 2403:e980::/32 2403:ea80::/32 2403:eac0::/32 2403:eb80::/32 2403:ec80::/32 2403:ed00::/32 2403:ed40::/32 2403:ed80::/32 2403:ee80::/32 2403:ef80::/32 2403:f080::/32 2403:f100::/32 2403:f180::/32 2403:f240::/32 2403:f280::/32 2403:f300::/32 2403:f380::/32 2403:f4c0::/32 2403:f580::/32 2403:f740::/32 2403:f8c0::/32 2403:f980::/32 2403:fb00::/32 2403:fb80::/32 2403:fc40::/32 2403:fe40::/32 2403:fe80::/32 2403:fec0::/32 2403:ff80::/32 2403:ffc0::/32 2404:100::/32 2404:158::/32 2404:240::/32 2404:280::/32 2404:440::/32 2404:480::/32 2404:680::/32 2404:a80::/32 2404:b80::/32 2404:bc0::/32 2404:c40::/32 2404:d80::/32 2404:f00::/32 2404:f80::/32 2404:1080::/32 2404:10c0::/32 2404:1180::/32 2404:14c0::/32 2404:1880::/32 2404:1c80::/32 2404:1cc0::/32 2404:1d80::/32 2404:1e80::/32 2404:1f40::/32 2404:21c0::/32 2404:30c0::/32 2404:3140::/32 2404:31c0::/32 2404:3240::/32 2404:32c0::/32 2404:3300::/32 2404:3340::/32 2404:3480::/32 2404:35c0::/32 2404:3640::/32 2404:36c0::/32 2404:3700::/32 2404:3740::/32 2404:37c0::/32 2404:3840::/32 2404:3940::/32 2404:3b00::/32 2404:3bc0::/32 2404:3c40::/32 2404:3f40::/32 2404:4080::/32 2404:41c0::/32 2404:4540::/32 2404:4740::/32 2404:4bc0::/32 2404:4d00::/32 2404:4dc0::/32 2404:51c0::/32 2404:5640::/32 2404:5a80::/32 2404:5b00::/32 2404:5d00::/32 2404:5e80::/32 2404:6000::/32 2404:6100::/32 2404:6380::/32 2404:6500::/32 2404:65c0::/32 2404:6a40::/32 2404:6f80::/32 2404:7100::/32 2404:7180::/32 2404:71c0::/32 2404:7240::/32 2404:74c0::/32 2404:7600::/32 2404:7740::/32 2404:7940::/32 2404:7d00::/32 2404:8040::/32 2404:80c0::/32 2404:8140::/32 2404:81c0::/32 2404:8480::/32 2404:8580::/32 2404:8700::/32 2404:8880::/32 2404:8a80::/32 2404:8b00::/32 2404:8dc0::/32 2404:9340::/32 2404:9880::/32 2404:9b80::/32 2404:9c80::/32 2404:a000::/32 2404:a080::/32 2404:a0c0::/32 2404:a180::/32 2404:a240::/32 2404:a740::/32 2404:b100::/32 2404:b340::/32 2404:b3c0::/32 2404:b440::/32 2404:b4c0::/32 2404:b900::/32 2404:bbc0::/32 2404:bc40::/32 2404:c1c0::/32 2404:c240::/32 2404:c2c0::/32 2404:c300::/32 2404:c3c0::/32 2404:c440::/32 2404:c4c0::/32 2404:c540::/32 2404:c5c0::/32 2404:c640::/32 2404:c940::/32 2404:c9c0::/32 2404:cd00::/32 2404:d040::/32 2404:d080::/32 2404:d140::/32 2404:d280::/32 2404:d3c0::/32 2404:d480::/32 2404:d640::/32 2404:d6c0::/32 2404:d780::/32 2404:d7c0::/32 2404:d840::/32 2404:dd80::/32 2404:df00::/32 2404:e180::/32 2404:e280::/32 2404:e540::/32 2404:e5c0::/32 2404:e780::/32 2404:e880::/32 2404:e8c0::/32 2404:eb40::/32 2404:eb80::/32 2404:ec40::/32 2404:ecc0::/32 2404:edc0::/32 2404:f040::/32 2404:f4c0::/32 2404:f7c0::/32 2405:80::/32 2405:480::/32 2405:580::/32 2405:680::/32 2405:6c0::/32 2405:780::/32 2405:880::/32 2405:940::/32 2405:980::/32 2405:9c0::/32 2405:a80::/32 2405:b80::/32 2405:c80::/32 2405:d80::/32 2405:e80::/32 2405:f40::/32 2405:f80::/32 2405:1080::/32 2405:1180::/32 2405:1280::/32 2405:1380::/32 2405:1480::/32 2405:1580::/32 2405:1680::/32 2405:18c0::/32 2405:1c80::/32 2405:1d80::/32 2405:1e80::/32 2405:1f80::/32 2405:1fc0::/32 2405:2080::/32 2405:2180::/32 2405:2280::/32 2405:2340::/32 2405:2380::/32 2405:2480::/32 2405:24c0::/32 2405:2580::/32 2405:2680::/32 2405:2780::/32 2405:2880::/32 2405:2980::/32 2405:2a80::/32 2405:2b80::/32 2405:2bc0::/32 2405:2c80::/32 2405:2d80::/32 2405:2e80::/32 2405:2ec0::/32 2405:2f40::/32 2405:2f80::/32 2405:3140::/32 2405:31c0::/32 2405:37c0::/32 2405:3880::/32 2405:3980::/32 2405:39c0::/32 2405:3a80::/32 2405:3ac0::/32 2405:3b00::/32 2405:3b80::/32 2405:3bc0::/32 2405:3c40::/32 2405:3c80::/32 2405:3d80::/32 2405:3e80::/32 2405:3f40::/32 2405:3f80::/32 2405:4080::/32 2405:4140::/32 2405:4180::/32 2405:41c0::/32 2405:4280::/32 2405:4380::/32 2405:4480::/32 2405:44c0::/32 2405:4540::/32 2405:4580::/32 2405:4680::/32 2405:4780::/32 2405:4880::/32 2405:4980::/32 2405:4a80::/32 2405:4b80::/32 2405:4d40::/32 2405:4e80::/32 2405:4f80::/32 2405:5080::/32 2405:5180::/32 2405:5240::/32 2405:5280::/32 2405:52c0::/32 2405:5380::/32 2405:5480::/32 2405:5580::/32 2405:5680::/32 2405:5780::/32 2405:57c0::/32 2405:5880::/32 2405:5980::/32 2405:5a80::/32 2405:5b00::/32 2405:5b80::/32 2405:5c80::/32 2405:5cc0::/32 2405:5d40::/32 2405:5d80::/32 2405:5dc0::/32 2405:5e80::/32 2405:5f80::/32 2405:6080::/32 2405:6180::/32 2405:6200::/32 2405:66c0::/32 2405:6880::/32 2405:68c0::/32 2405:6940::/32 2405:69c0::/32 2405:6a80::/32 2405:6b80::/32 2405:6c80::/32 2405:6d80::/32 2405:6e80::/32 2405:6f00::/32 2405:6f80::/32 2405:7040::/32 2405:7080::/32 2405:7180::/32 2405:7240::/32 2405:7280::/32 2405:7380::/32 2405:7480::/32 2405:7580::/32 2405:7680::/32 2405:7780::/32 2405:7880::/32 2405:78c0::/32 2405:7980::/32 2405:79c0::/32 2405:7a80::/32 2405:7b80::/32 2405:7c80::/32 2405:7d40::/32 2405:7f40::/32 2405:7fc0::/32 2405:8280::/32 2405:83c0::/32 2405:8480::/32 2405:84c0::/32 2405:8580::/32 2405:8680::/32 2405:8780::/32 2405:8880::/32 2405:8980::/32 2405:8a40::/32 2405:8a80::/32 2405:8ac0::/32 2405:8b40::/32 2405:8b80::/32 2405:8c80::/32 2405:8d80::/32 2405:8e80::/32 2405:8f40::/32 2405:8f80::/32 2405:9080::/32 2405:9180::/32 2405:9280::/32 2405:9300::/32 2405:9340::/32 2405:9380::/32 2405:93c0::/32 2405:9480::/32 2405:94c0::/32 2405:9580::/32 2405:9680::/32 2405:9700::/32 2405:9780::/32 2405:9880::/32 2405:9900::/32 2405:9980::/32 2405:9a80::/32 2405:9b00::/32 2405:9b80::/32 2405:9e00::/32 2405:a500::/32 2405:a680::/32 2405:a900::/32 2405:a980::/32 2405:aa80::/32 2405:ab00::/32 2405:ad00::/32 2405:af00::/32 2405:b100::/32 2405:b300::/32 2405:b880::/32 2405:b980::/32 2405:bb00::/32 2405:bd00::/32 2405:bd80::/32 2405:be80::/32 2405:bf00::/32 2405:c280::/32 2405:c380::/32 2405:c480::/32 2405:c500::/32 2405:c580::/32 2405:c680::/32 2405:c780::/32 2405:c880::/32 2405:c980::/32 2405:ca80::/32 2405:cb80::/32 2405:cc80::/32 2405:cd80::/32 2405:ce80::/32 2405:d280::/32 2405:d700::/32 2405:d900::/32 2405:e000::/32 2405:e600::/32 2405:ee80::/32 2405:f380::/32 2405:f580::/32 2405:fe80::/32 2405:ff80::/32 2406:80::/32 2406:280::/32 2406:880::/32 2406:d80::/32 2406:e80::/32 2406:f80::/32 2406:1080::/32 2406:1100::/32 2406:1180::/32 2406:1280::/32 2406:1380::/32 2406:1480::/32 2406:1580::/32 2406:1680::/32 2406:1780::/32 2406:1880::/32 2406:1980::/32 2406:1a80::/32 2406:1b80::/32 2406:1c80::/32 2406:1d80::/32 2406:1e80::/32 2406:1f80::/32 2406:2080::/32 2406:2580::/32 2406:2700::/32 2406:2780::/32 2406:2880::/32 2406:2980::/32 2406:2a80::/32 2406:2b80::/32 2406:2c80::/32 2406:2d80::/32 2406:2e80::/32 2406:2f80::/32 2406:3080::/32 2406:3180::/32 2406:3280::/32 2406:3300::/32 2406:3380::/32 2406:3480::/32 2406:3580::/32 2406:3680::/32 2406:3700::/32 2406:3780::/32 2406:3880::/32 2406:3980::/32 2406:3d80::/32 2406:3e80::/32 2406:3f80::/32 2406:4080::/32 2406:4180::/32 2406:4280::/32 2406:4380::/32 2406:4480::/32 2406:4500::/32 2406:4680::/32 2406:4980::/32 2406:4b80::/32 2406:4c80::/32 2406:4d00::/32 2406:4d80::/32 2406:4e80::/32 2406:4f00::/32 2406:4f80::/32 2406:5080::/32 2406:5180::/32 2406:5280::/32 2406:5380::/32 2406:5480::/32 2406:5580::/32 2406:5680::/32 2406:5780::/32 2406:5880::/32 2406:5980::/32 2406:5d80::/32 2406:5e80::/32 2406:5f80::/32 2406:6080::/32 2406:6100::/32 2406:6180::/32 2406:6280::/32 2406:6300::/32 2406:6380::/32 2406:6480::/32 2406:6500::/32 2406:6580::/32 2406:6680::/32 2406:6780::/32 2406:6880::/32 2406:6980::/32 2406:6a80::/32 2406:6b80::/32 2406:6c80::/32 2406:6d80::/32 2406:6e80::/32 2406:6f80::/32 2406:7080::/32 2406:7280::/32 2406:7380::/32 2406:7480::/32 2406:7580::/32 2406:7680::/32 2406:7780::/32 2406:7880::/32 2406:7980::/32 2406:7a80::/32 2406:7b80::/32 2406:7c80::/32 2406:7d00::/32 2406:7d80::/32 2406:7e80::/32 2406:7f80::/32 2406:8080::/32 2406:8180::/32 2406:8280::/32 2406:8380::/32 2406:8480::/32 2406:8500::/32 2406:8580::/32 2406:8780::/32 2406:8880::/32 2406:8980::/32 2406:8a80::/32 2406:8b80::/32 2406:8c80::/32 2406:8d80::/32 2406:8e80::/32 2406:8f80::/32 2406:9180::/32 2406:9200::/32 2406:9280::/32 2406:9380::/32 2406:9480::/32 2406:9780::/32 2406:9d80::/32 2406:9e80::/32 2406:9f80::/32 2406:a080::/32 2406:a180::/32 2406:a280::/32 2406:a380::/32 2406:a480::/32 2406:a580::/32 2406:a680::/32 2406:a780::/32 2406:a880::/32 2406:a980::/32 2406:aa80::/32 2406:ab80::/32 2406:ac80::/32 2406:ad80::/32 2406:ae80::/32 2406:af80::/32 2406:b080::/32 2406:b880::/32 2406:b980::/32 2406:ba80::/32 2406:bb80::/32 2406:bc80::/32 2406:bd80::/32 2406:be80::/32 2406:bf80::/32 2406:c080::/32 2406:c180::/32 2406:c280::/32 2406:c480::/32 2406:c580::/32 2406:c680::/32 2406:c780::/32 2406:c880::/32 2406:c900::/32 2406:c980::/32 2406:ca80::/32 2406:cb80::/32 2406:cc80::/32 2406:cd80::/32 2406:ce80::/32 2406:cf00::/30 2406:cf80::/32 2406:d080::/32 2406:d180::/32 2406:d280::/32 2406:d380::/32 2406:d480::/32 2406:d580::/32 2406:d680::/32 2406:d780::/32 2406:d880::/32 2406:d980::/32 2406:db80::/32 2406:dc80::/32 2406:dd00::/32 2406:dd80::/32 2406:de80::/32 2406:df80::/32 2406:e080::/32 2406:e180::/32 2406:e280::/32 2406:e380::/32 2406:e500::/32 2406:e580::/32 2406:e680::/32 2406:e780::/32 2406:f280::/32 2406:f300::/32 2406:f980::/32 2406:fc80::/32 2406:fd80::/32 2406:fe80::/32 2406:ff00::/32 2407:480::/32 2407:580::/32 2407:1180::/32 2407:1900::/32 2407:1d00::/32 2407:1e80::/32 2407:2280::/32 2407:2380::/32 2407:2780::/32 2407:3700::/32 2407:3900::/32 2407:4580::/32 2407:4680::/32 2407:4880::/32 2407:4980::/32 2407:4a80::/32 2407:4c80::/32 2407:4d80::/32 2407:4e80::/32 2407:4f00::/32 2407:5380::/32 2407:5500::/32 2407:5780::/32 2407:6580::/32 2407:6a80::/32 2407:7680::/32 2407:7780::/32 2407:7880::/32 2407:7980::/32 2407:7c80::/32 2407:7d00::/32 2407:7d80::/32 2407:7e80::/32 2407:8880::/32 2407:8b80::/32 2407:9080::/32 2407:9180::/32 2407:9680::/32 2407:9980::/32 2407:9f00::/32 2407:9f80::/32 2407:a480::/32 2407:a880::/32 2407:ad80::/32 2407:ae80::/32 2407:af80::/32 2407:b080::/32 2407:b180::/32 2407:b280::/32 2407:b380::/32 2407:b580::/32 2407:b680::/32 2407:b780::/32 2407:b880::/32 2407:b980::/32 2407:ba00::/32 2407:ba80::/32 2407:bb80::/32 2407:bc00::/32 2407:bc80::/32 2407:bd80::/32 2407:be80::/32 2407:bf80::/32 2407:c080::/32 2407:c380::/32 2407:c400::/32 2407:c480::/32 2407:c580::/32 2407:c680::/32 2407:c780::/32 2407:c880::/32 2407:c900::/32 2407:c980::/32 2407:cb80::/32 2407:cc80::/32 2407:cd80::/32 2407:ce80::/32 2407:cf00::/32 2407:cf80::/32 2407:d480::/32 2407:d580::/32 2407:d680::/32 2407:d780::/32 2407:d880::/32 2407:d980::/32 2407:da80::/32 2407:db80::/32 2407:dc80::/32 2407:dd80::/32 2407:de80::/32 2407:df80::/32 2407:e080::/32 2407:e180::/32 2407:e280::/32 2407:e380::/32 2407:e480::/32 2407:e580::/32 2407:e680::/32 2407:e780::/32 2407:e800::/32 2407:ea80::/32 2407:eb80::/32 2407:ec80::/32 2407:ed80::/32 2407:ee80::/32 2407:ef80::/32 2407:f080::/32 2407:f180::/32 2407:f280::/32 2407:f380::/32 2407:f480::/32 2407:f580::/32 2407:f680::/32 2407:f780::/32 2407:f880::/32 2407:f980::/32 2407:fa80::/32 2407:fb80::/32 2407:fc80::/32 2407:fd80::/32 2408:4000::/22 2408:8000::/20 2409:8000::/20 240a:4000::/21 240a:8000::/21 240a:c000::/20 240b:8000::/21 240c::/28 240c:4000::/22 240c:8000::/21 240c:c000::/20 240d:4000::/21 240d:8000::/24 240e::/18 240f:4000::/24 240f:8000::/24 240f:c000::/24 [proxy_list] # Telegram IPs$ 91.108.4.0/22 91.108.8.0/21 91.108.16.0/21 91.108.36.0/22 91.108.56.0/22 109.239.140.0/24 149.154.160.0/20 14.102.250.18 14.102.250.19 174.142.105.153 50.7.31.230 67.220.91.15 67.220.91.18 67.220.91.23 69.65.19.160 72.52.81.22 85.17.73.31 (?:^|\.)030buy\.com$ (?:^|\.)0rz\.tw$ (?:^|\.)1-apple\.com\.tw$ (?:^|\.)10\.tt$ (?:^|\.)1000giri\.net$ (?:^|\.)100ke\.org$ (?:^|\.)10conditionsoflove\.com$ (?:^|\.)10musume\.com$ (?:^|\.)123rf\.com$ (?:^|\.)12bet\.com$ (?:^|\.)12vpn\.com$ (?:^|\.)12vpn\.net$ (?:^|\.)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$ (?:^|\.)1984bbs\.com$ (?:^|\.)1984bbs\.org$ (?:^|\.)1989report\.hkja\.org\.hk$ (?:^|\.)1991way\.com$ (?:^|\.)1998cdp\.org$ (?:^|\.)1bao\.org$ (?:^|\.)1dumb\.com$ (?:^|\.)1e100\.net$ (?:^|\.)1eew\.com$ (?:^|\.)1mobile\.com$ (?:^|\.)1pondo\.tv$ (?:^|\.)2-hand\.info$ (?:^|\.)2000fun\.com$ (?:^|\.)2008xianzhang\.info$ (?:^|\.)2017\.hk$ (?:^|\.)21andy\.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$ (?:^|\.)43110\.cf$ (?:^|\.)466453\.com$ (?:^|\.)4bluestones\.biz$ (?:^|\.)4chan\.com$ (?:^|\.)4dq\.com$ (?:^|\.)4everproxy\.com$ (?:^|\.)4irc\.com$ (?:^|\.)4mydomain\.com$ (?:^|\.)4pu\.com$ (?:^|\.)4rbtv\.com$ (?:^|\.)4shared\.com$ (?:^|\.)51\.ca$ (?:^|\.)51jav\.org$ (?:^|\.)51luoben\.com$ (?:^|\.)5278\.cc$ (?:^|\.)5299\.tv$ (?:^|\.)56cun04\.jigsy\.com$ (?:^|\.)5aimiku\.com$ (?:^|\.)5i01\.com$ (?:^|\.)5isotoi5\.org$ (?:^|\.)5maodang\.com$ (?:^|\.)63i\.com$ (?:^|\.)64memo$ (?:^|\.)64museum\.org$ (?:^|\.)64tianwang\.com$ (?:^|\.)64wiki\.com$ (?:^|\.)66\.ca$ (?:^|\.)666kb\.com$ (?:^|\.)6park\.com$ (?:^|\.)6parker\.com$ (?:^|\.)7capture\.com$ (?:^|\.)7cow\.com$ (?:^|\.)8-d\.com$ (?:^|\.)85cc\.net$ (?:^|\.)85cc\.us$ (?:^|\.)85st\.com$ (?:^|\.)881903\.com$ (?:^|\.)888\.com$ (?:^|\.)888poker\.com$ (?:^|\.)89-64\.org$ (?:^|\.)89\.64\.charter\.constitutionalism\.solutions$ (?:^|\.)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$ (?:^|\.)9gag\.com$ (?:^|\.)a-normal-day\.com$ (?:^|\.)a248\.e\.akamai\.net$ (?:^|\.)a5\.com\.ru$ (?:^|\.)aamacau\.com$ (?:^|\.)abc\.com$ (?:^|\.)abc\.net\.au$ (?:^|\.)abc\.pp\.ru$ (?:^|\.)abc\.xyz$ (?:^|\.)abchinese\.com$ (?:^|\.)abclite\.net$ (?:^|\.)abebooks\.com$ (?:^|\.)abematv\.akamaized\.net$ (?:^|\.)abitno\.linpie\.com$ (?:^|\.)ablwang\.com$ (?:^|\.)aboluowang\.com$ (?:^|\.)about\.google$ (?:^|\.)aboutgfw\.com$ (?:^|\.)abs\.edu$ (?:^|\.)ac\.jiruan\.net$ (?:^|\.)accim\.org$ (?:^|\.)aceros-de-hispania\.com$ (?:^|\.)acevpn\.com$ (?:^|\.)acg18\.me$ (?:^|\.)acgkj\.com$ (?:^|\.)acmedia365\.com$ (?:^|\.)acmetoy\.com$ (?:^|\.)acnw\.com\.au$ (?:^|\.)actfortibet\.org$ (?:^|\.)actimes\.com\.au$ (?:^|\.)activpn\.com$ (?:^|\.)aculo\.us$ (?:^|\.)adcex\.com$ (?:^|\.)addictedtocoffee\.de$ (?:^|\.)adelaidebbs\.com$ (?:^|\.)admin\.recaptcha\.net$ (?:^|\.)admob\.com$ (?:^|\.)adpl\.org\.hk$ (?:^|\.)ads-twitter\.com$ (?:^|\.)adsense\.com$ (?:^|\.)adult-sex-games\.com$ (?:^|\.)adult\.friendfinder\.com$ (?:^|\.)adultfriendfinder\.com$ (?:^|\.)adultkeep\.net$ (?:^|\.)advanscene\.com$ (?:^|\.)advertfan\.com$ (?:^|\.)ae\.hao123\.com$ (?:^|\.)ae\.org$ (?:^|\.)aenhancers\.com$ (?:^|\.)aex\.com$ (?:^|\.)af\.mil$ (?:^|\.)afantibbs\.com$ (?:^|\.)agnesb\.fr$ (?:^|\.)agoogleaday\.com$ (?:^|\.)agro\.hk$ (?:^|\.)ahr0chm6ly95zwnslm5lda$ (?:^|\.)ai-kan\.net$ (?:^|\.)ai-wen\.net$ (?:^|\.)ai\.binwang\.me$ (?:^|\.)ai\.google$ (?:^|\.)aiph\.net$ (?:^|\.)airasia\.com$ (?:^|\.)airconsole\.com$ (?:^|\.)airvpn\.org$ (?:^|\.)aisex\.com$ (?:^|\.)ait\.org\.tw$ (?:^|\.)aiweiwei\.com$ (?:^|\.)aiweiweiblog\.com$ (?:^|\.)akademiye\.org$ (?:^|\.)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$ (?:^|\.)alkasir\.com$ (?:^|\.)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$ (?:^|\.)ameblo\.jp$ (?:^|\.)americangreencard\.com$ (?:^|\.)americanunfinished\.com$ (?:^|\.)amiblockedornot\.com$ (?:^|\.)amigobbs\.net$ (?:^|\.)amitabhafoundation\.us$ (?:^|\.)amnesty\.org$ (?:^|\.)amnesty\.org\.hk$ (?:^|\.)amnesty\.tw$ (?:^|\.)amnestyusa\.org$ (?:^|\.)amnyemachen\.org$ (?:^|\.)amoiist\.com$ (?:^|\.)ampproject\.org$ (?:^|\.)amtb-taipei\.org$ (?:^|\.)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$ (?:^|\.)animeshippuuden\.com$ (?:^|\.)aniscartujo\.com$ (?:^|\.)annatam\.com$ (?:^|\.)anobii\.com$ (?:^|\.)anontext\.com$ (?:^|\.)anonymise\.us$ (?:^|\.)anonymitynetwork\.com$ (?:^|\.)anonymizer\.com$ (?:^|\.)anonymouse\.org$ (?:^|\.)anpopo\.com$ (?:^|\.)answering-islam\.org$ (?:^|\.)anthonycalzadilla\.com$ (?:^|\.)anti1984\.com$ (?:^|\.)antichristendom\.com$ (?:^|\.)antiwave\.net$ (?:^|\.)anyporn\.com$ (?:^|\.)anysex\.com$ (?:^|\.)aobo\.com\.au$ (?:^|\.)aofriend\.com$ (?:^|\.)aofriend\.com\.au$ (?:^|\.)aojiao\.org$ (?:^|\.)aolchannels\.aol\.com$ (?:^|\.)aomiwang\.com$ (?:^|\.)apartmentratings\.com$ (?:^|\.)apartments\.com$ (?:^|\.)apetube\.com$ (?:^|\.)api-secure\.recaptcha\.net$ (?:^|\.)api-verify\.recaptcha\.net$ (?:^|\.)api\.ai$ (?:^|\.)api\.dropboxapi\.com$ (?:^|\.)api\.linksalpha\.com$ (?:^|\.)api\.proxlet\.com$ (?:^|\.)api\.pureapk\.com$ (?:^|\.)api\.recaptcha\.net$ (?:^|\.)apiary\.io$ (?:^|\.)apidocs\.linksalpha\.com$ (?:^|\.)apigee\.com$ (?:^|\.)apk-dl\.com$ (?:^|\.)apkdler\.com$ (?:^|\.)apkmirror\.com$ (?:^|\.)apkmonk\.com$ (?:^|\.)apkplz\.com$ (?:^|\.)apkpure\.com$ (?:^|\.)aplusvpn\.com$ (?:^|\.)app\.box\.com$ (?:^|\.)app\.heywire\.com$ (?:^|\.)app\.smartmailcloud\.com$ (?:^|\.)app\.tutanota\.com$ (?:^|\.)appdownloader\.net$ (?:^|\.)appledaily\.com$ (?:^|\.)appledaily\.com\.hk$ (?:^|\.)appledaily\.com\.tw$ (?:^|\.)appshopper\.com$ (?:^|\.)appsocks\.net$ (?:^|\.)appspot\.com$ (?:^|\.)appsto\.re$ (?:^|\.)aptoide\.com$ (?:^|\.)ar\.hao123\.com$ (?:^|\.)archive\.fo$ (?:^|\.)archive\.is$ (?:^|\.)archive\.li$ (?:^|\.)archive\.org$ (?:^|\.)archive\.today$ (?:^|\.)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$ (?:^|\.)asianews\.it$ (?:^|\.)asiansexdiary\.com$ (?:^|\.)asianspiss\.com$ (?:^|\.)asianwomensfilm\.de$ (?:^|\.)asiatgp\.com$ (?:^|\.)asiatoday\.us$ (?:^|\.)askstudent\.com$ (?:^|\.)askynz\.net$ (?:^|\.)assembla\.com$ (?:^|\.)assets\.bwbx\.io$ (?:^|\.)assimp\.org$ (?:^|\.)astrill\.com$ (?:^|\.)atc\.org\.au$ (?:^|\.)atchinese\.com$ (?:^|\.)atdmt\.com$ (?:^|\.)atgfw\.org$ (?:^|\.)athenaeizou\.com$ (?:^|\.)atlanta168\.com$ (?:^|\.)atlaspost\.com$ (?:^|\.)atnext\.com$ (?:^|\.)authorizeddns\.net$ (?:^|\.)authorizeddns\.org$ (?:^|\.)authorizeddns\.us$ (?:^|\.)autodraw\.com$ (?:^|\.)av-e-body\.com$ (?:^|\.)av\.com$ (?:^|\.)av\.movie$ (?:^|\.)av\.nightlife141\.com$ (?:^|\.)avaaz\.org$ (?:^|\.)avbody\.tv$ (?:^|\.)avcity\.tv$ (?:^|\.)avcool\.com$ (?:^|\.)avdb\.in$ (?:^|\.)avdb\.tv$ (?:^|\.)avfantasy\.com$ (?:^|\.)avgle\.com$ (?:^|\.)avidemux\.org$ (?:^|\.)avmo\.pw$ (?:^|\.)avmoo\.com$ (?:^|\.)avmoo\.net$ (?:^|\.)avmoo\.pw$ (?:^|\.)avoision\.com$ (?:^|\.)avyahoo\.com$ (?:^|\.)axureformac\.com$ (?:^|\.)azerbaycan\.tv$ (?:^|\.)azerimix\.com$ (?:^|\.)azubu\.tv$ (?:^|\.)b0ne\.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$ (?:^|\.)bandwagonhost\.com$ (?:^|\.)bangbrosnetwork\.com$ (?:^|\.)bangchen\.net$ (?:^|\.)bangdream\.space$ (?:^|\.)bangyoulater\.com$ (?:^|\.)bankmobilevibe\.com$ (?:^|\.)bannedbook\.org$ (?:^|\.)bannednews\.org$ (?:^|\.)banorte\.com$ (?:^|\.)baramangaonline\.com$ (?:^|\.)barenakedislam\.com$ (?:^|\.)barnabu\.co\.uk$ (?:^|\.)barton\.de$ (?:^|\.)bartvpn\.com$ (?:^|\.)bash-hackers\.org$ (?:^|\.)bastillepost\.com$ (?:^|\.)bayvoice\.net$ (?:^|\.)bb-chat\.tv$ (?:^|\.)bb\.ttv\.com\.tw$ (?:^|\.)bbc\.co\.uk$ (?:^|\.)bbc\.com$ (?:^|\.)bbc\.in$ (?:^|\.)bbcchinese\.com$ (?:^|\.)bbchat\.tv$ (?:^|\.)bbci\.co\.uk$ (?:^|\.)bbg\.gov$ (?:^|\.)bbkz\.com$ (?:^|\.)bbnradio\.org$ (?:^|\.)bbs-tw\.com$ (?:^|\.)bbs\.brockbbs\.com$ (?:^|\.)bbs\.cantonese\.asia$ (?:^|\.)bbs\.ecstart\.com$ (?:^|\.)bbs\.hanminzu\.org$ (?:^|\.)bbs\.hasi\.wang$ (?:^|\.)bbs\.huasing\.org$ (?:^|\.)bbs\.junglobal\.net$ (?:^|\.)bbs\.kimy\.com\.tw$ (?:^|\.)bbs\.mikocon\.com$ (?:^|\.)bbs\.morbell\.com$ (?:^|\.)bbs\.mychat\.to$ (?:^|\.)bbs\.netbig\.com$ (?:^|\.)bbs\.ozchinese\.com$ (?:^|\.)bbs\.qmzdd\.com$ (?:^|\.)bbs\.sina\.com$ (?:^|\.)bbs\.sina\.com%2f$ (?:^|\.)bbs\.skykiwi\.com$ (?:^|\.)bbs\.sou-tong\.org$ (?:^|\.)bbs\.tuitui\.info$ (?:^|\.)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$ (?:^|\.)beijingspring\.com$ (?:^|\.)beijingzx\.org$ (?:^|\.)belamionline\.com$ (?:^|\.)bell\.wiki$ (?:^|\.)bemywife\.cc$ (?:^|\.)beric\.me$ (?:^|\.)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$ (?:^|\.)big\.one$ (?:^|\.)bigfools\.com$ (?:^|\.)bigjapanesesex\.com$ (?:^|\.)bigmoney\.biz$ (?:^|\.)bignews\.org$ (?:^|\.)bigsound\.org$ (?:^|\.)biliworld\.com$ (?:^|\.)billypan\.com$ (?:^|\.)binance\.com$ (?:^|\.)binux\.me$ (?:^|\.)bipic\.net$ (?:^|\.)bird\.so$ (?:^|\.)bit-z\.com$ (?:^|\.)bit\.do$ (?:^|\.)bit\.ly$ (?:^|\.)bitc\.bme\.emory\.edu$ (?:^|\.)bitcointalk\.org$ (?:^|\.)bitcoinworld\.com$ (?:^|\.)bitfinex\.com$ (?:^|\.)bithumb\.com$ (?:^|\.)bitinka\.com\.ar$ (?:^|\.)bitmex\.com$ (?:^|\.)bitshare\.com$ (?:^|\.)bitsnoop\.com$ (?:^|\.)bitvise\.com$ (?:^|\.)bizhat\.com$ (?:^|\.)bjnewlife\.org$ (?:^|\.)bjs\.org$ (?:^|\.)bjzc\.org$ (?:^|\.)bl-doujinsouko\.com$ (?:^|\.)blacklogic\.com$ (?:^|\.)blackvpn\.com$ (?:^|\.)blewpass\.com$ (?:^|\.)blinkx\.com$ (?:^|\.)blinw\.com$ (?:^|\.)blip\.tv$ (?:^|\.)blockcn\.com$ (?:^|\.)blockless\.com$ (?:^|\.)blog\.calibre-ebook\.com$ (?:^|\.)blog\.cnyes\.com$ (?:^|\.)blog\.daum\.net$ (?:^|\.)blog\.de$ (?:^|\.)blog\.exblog\.co\.jp$ (?:^|\.)blog\.excite\.co\.jp$ (?:^|\.)blog\.expofutures\.com$ (?:^|\.)blog\.fizzik\.com$ (?:^|\.)blog\.foolsmountain\.com$ (?:^|\.)blog\.fuckgfw233\.org$ (?:^|\.)blog\.goo\.ne\.jp$ (?:^|\.)blog\.google$ (?:^|\.)blog\.inoreader\.com$ (?:^|\.)blog\.istef\.info$ (?:^|\.)blog\.jackjia\.com$ (?:^|\.)blog\.jp$ (?:^|\.)blog\.kangye\.org$ (?:^|\.)blog\.lester850\.info$ (?:^|\.)blog\.martinoei\.com$ (?:^|\.)blog\.pathtosharepoint\.com$ (?:^|\.)blog\.pentalogic\.net$ (?:^|\.)blog\.qooza\.hk$ (?:^|\.)blog\.ranxiang\.com$ (?:^|\.)blog\.sina\.com\.tw$ (?:^|\.)blog\.sogoo\.org$ (?:^|\.)blog\.soylent\.com$ (?:^|\.)blog\.syx86\.cn$ (?:^|\.)blog\.syx86\.com$ (?:^|\.)blog\.taragana\.com$ (?:^|\.)blog\.tiney\.com$ (?:^|\.)blog\.workflow\.is$ (?:^|\.)blog\.xuite\.net$ (?:^|\.)blog\.youthwant\.com\.tw$ (?:^|\.)blog\.youxu\.info$ (?:^|\.)blogblog\.com$ (?:^|\.)blogcatalog\.com$ (?:^|\.)blogcity\.me$ (?:^|\.)blogdns\.org$ (?:^|\.)blogger\.com$ (?:^|\.)blogimg\.jp$ (?:^|\.)bloglines\.com$ (?:^|\.)bloglovin\.com$ (?:^|\.)blogs\.icerocket\.com$ (?:^|\.)blogs\.libraryinformationtechnology\.com$ (?:^|\.)blogs\.tampabay\.com$ (?:^|\.)blogs\.yahoo\.co\.jp$ (?:^|\.)blogspot(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?){1,2}$ (?:^|\.)blogtd\.net$ (?:^|\.)blogtd\.org$ (?:^|\.)bloodshed\.net$ (?:^|\.)bloomberg\.cn$ (?:^|\.)bloomberg\.com$ (?:^|\.)bloomberg\.de$ (?:^|\.)bloombergview\.com$ (?:^|\.)bloomfortune\.com$ (?:^|\.)blueangellive\.com$ (?:^|\.)bmfinn\.com$ (?:^|\.)bnews\.co$ (?:^|\.)bnn\.co$ (?:^|\.)bnrmetal\.com$ (?:^|\.)boardreader\.com$ (?:^|\.)bod\.asia$ (?:^|\.)bodog88\.com$ (?:^|\.)bolehvpn\.net$ (?:^|\.)bolin\.netfirms\.com$ (?:^|\.)bonbonme\.com$ (?:^|\.)bonbonsex\.com$ (?:^|\.)bonfoundation\.org$ (?:^|\.)bongacams\.com$ (?:^|\.)boobstagram\.com$ (?:^|\.)book\.com\.tw$ (?:^|\.)book\.zi5\.me$ (?:^|\.)bookepub\.com$ (?:^|\.)books\.com\.tw$ (?:^|\.)booktopia\.com\.au$ (?:^|\.)boomssr\.com$ (?:^|\.)bot\.nu$ (?:^|\.)botanwang\.com$ (?:^|\.)bowenpress\.com$ (?:^|\.)boxpn\.com$ (?:^|\.)boxun$ (?:^|\.)boxun\.com$ (?:^|\.)boxun\.tv$ (?:^|\.)boxunblog\.com$ (?:^|\.)boxunclub\.com$ (?:^|\.)boyangu\.com$ (?:^|\.)boyfriendtv\.com$ (?:^|\.)boysfood\.com$ (?:^|\.)boysmaster\.com$ (?:^|\.)br\.hao123\.com$ (?:^|\.)br\.st$ (?:^|\.)brainyquote\.com$ (?:^|\.)brandonhutchinson\.com$ (?:^|\.)braumeister\.org$ (?:^|\.)bravotube\.net$ (?:^|\.)brazzers\.com$ (?:^|\.)break\.com$ (?:^|\.)breakgfw\.com$ (?:^|\.)breaking911\.com$ (?:^|\.)breakingtweets\.com$ (?:^|\.)breakwall\.net$ (?:^|\.)briefdream\.com$ (?:^|\.)briian\.com$ (?:^|\.)brizzly\.com$ (?:^|\.)brkmd\.com$ (?:^|\.)broadbook\.com$ (?:^|\.)broadpressinc\.com$ (?:^|\.)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$ (?:^|\.)bullog\.org$ (?:^|\.)bullogger\.com$ (?:^|\.)bunbunhk\.com$ (?:^|\.)busayari\.com$ (?:^|\.)businessinsider\.com$ (?:^|\.)businesstoday\.com\.tw$ (?:^|\.)businessweek\.com$ (?:^|\.)busu\.org$ (?:^|\.)busytrade\.com$ (?:^|\.)buugaa\.com$ (?:^|\.)buy\.yahoo\.com\.tw$ (?:^|\.)buzzhand\.com$ (?:^|\.)buzzhand\.net$ (?:^|\.)buzzorange\.com$ (?:^|\.)bvpn\.com$ (?:^|\.)bwgyhw\.com$ (?:^|\.)bwh1\.net$ (?:^|\.)bwsj\.hk$ (?:^|\.)bx\.in\.th$ (?:^|\.)bx\.tl$ (?:^|\.)bynet\.co\.il$ (?:^|\.)c-est-simple\.com$ (?:^|\.)c-spanvideo\.org$ (?:^|\.)c100tibet\.org$ (?:^|\.)c1522\.mooo\.com$ (?:^|\.)c2cx\.com$ (?:^|\.)cablegatesearch\.net$ (?:^|\.)cachinese\.com$ (?:^|\.)cacnw\.com$ (?:^|\.)cactusvpn\.com$ (?:^|\.)cafepress\.com$ (?:^|\.)cahr\.org\.tw$ (?:^|\.)calameo\.com$ (?:^|\.)calebelston\.com$ (?:^|\.)calgarychinese\.ca$ (?:^|\.)calgarychinese\.com$ (?:^|\.)calgarychinese\.net$ (?:^|\.)cam4\.com$ (?:^|\.)cam4\.jp$ (?:^|\.)cam4\.sg$ (?:^|\.)camfrog\.com$ (?:^|\.)cams\.com$ (?:^|\.)cams\.org\.sg$ (?:^|\.)canadameet\.com$ (?:^|\.)canalporno\.com$ (?:^|\.)canyu\.org$ (?:^|\.)cao\.im$ (?:^|\.)caobian\.info$ (?:^|\.)caochangqing\.com$ (?:^|\.)cap\.org\.hk$ (?:^|\.)carabinasypistolas\.com$ (?:^|\.)cardinalkungfoundation\.org$ (?:^|\.)carfax\.com$ (?:^|\.)cari\.com\.my$ (?:^|\.)caribbeancom\.com$ (?:^|\.)carmotorshow\.com$ (?:^|\.)cartoonmovement\.com$ (?:^|\.)casadeltibetbcn\.org$ (?:^|\.)casatibet\.org\.mx$ (?:^|\.)casino\.williamhill\.com$ (?:^|\.)casinobellini\.com$ (?:^|\.)casinoking\.com$ (?:^|\.)casinoriva\.com$ (?:^|\.)castbox\.fm$ (?:^|\.)catch22\.net$ (?:^|\.)catchgod\.com$ (?:^|\.)catfightpayperview\.xxx$ (?:^|\.)catholic\.org\.hk$ (?:^|\.)catholic\.org\.tw$ (?:^|\.)cathvoice\.org\.tw$ (?:^|\.)cattt\.com$ (?:^|\.)cbc\.ca$ (?:^|\.)cbs\.ntu\.edu\.tw$ (?:^|\.)cbsnews\.com$ (?:^|\.)cbtc\.org\.hk$ (?:^|\.)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$ (?:^|\.)cdn$ (?:^|\.)cdn-apple\.com$ (?:^|\.)cdn-images\.mailchimp\.com$ (?:^|\.)cdn\.assets\.lfpcontent\.com$ (?:^|\.)cdn\.helixstudios\.net$ (?:^|\.)cdn\.printfriendly\.com$ (?:^|\.)cdn\.seatguru\.com$ (?:^|\.)cdn\.softlayer\.net$ (?:^|\.)cdn1\.lp\.saboom\.com$ (?:^|\.)cdnews\.com\.tw$ (?:^|\.)cdninstagram\.com$ (?:^|\.)cdp1989\.org$ (?:^|\.)cdp1998\.org$ (?:^|\.)cdp2006\.org$ (?:^|\.)cdpa\.url\.tw$ (?:^|\.)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$ (?:^|\.)certificate\.revocationcheck\.com$ (?:^|\.)cfhks\.org\.hk$ (?:^|\.)cfos\.de$ (?:^|\.)cftfc\.com$ (?:^|\.)cgdepot\.org$ (?:^|\.)cgst\.edu$ (?:^|\.)ch\.shvoong\.com$ (?:^|\.)change\.org$ (?:^|\.)changeip\.name$ (?:^|\.)changeip\.net$ (?:^|\.)changeip\.org$ (?:^|\.)changp\.com$ (?:^|\.)changsa\.net$ (?:^|\.)channel8news\.sg$ (?:^|\.)chaoex\.com$ (?:^|\.)chapm25\.com$ (?:^|\.)chatnook\.com$ (?:^|\.)chaturbate\.com$ (?:^|\.)chengmingmag\.com$ (?:^|\.)chenguangcheng\.com$ (?:^|\.)chenpokong\.com$ (?:^|\.)chenpokong\.net$ (?:^|\.)chenshan20042005\.wordpress\.com$ (?:^|\.)cherrysave\.com$ (?:^|\.)chhongbi\.org$ (?:^|\.)chicagoncmtv\.com$ (?:^|\.)china-mmm\.jp\.net$ (?:^|\.)china-mmm\.net$ (?:^|\.)china-mmm\.sa\.com$ (?:^|\.)china-review\.com\.ua$ (?:^|\.)china-week\.com$ (?:^|\.)china\.hket\.com$ (?:^|\.)china\.ucanews\.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$ (?:^|\.)chinaview\.wordpress\.com$ (?:^|\.)chinaway\.org$ (?:^|\.)chinaworker\.info$ (?:^|\.)chinaxchina\.com$ (?:^|\.)chinayouth\.org\.hk$ (?:^|\.)chinayuanmin\.org$ (?:^|\.)chinese-hermit\.net$ (?:^|\.)chinese-leaders\.org$ (?:^|\.)chinese-memorial\.org$ (?:^|\.)chinese\.donga\.com$ (?:^|\.)chinese\.engadget\.com$ (?:^|\.)chinese\.irib\.ir$ (?:^|\.)chinese\.soifind\.com$ (?:^|\.)chinesedaily\.com$ (?:^|\.)chinesedailynews\.com$ (?:^|\.)chinesedemocracy\.com$ (?:^|\.)chinesegay\.org$ (?:^|\.)chinesen\.de$ (?:^|\.)chinesenews\.net\.au$ (?:^|\.)chinesepen\.org$ (?:^|\.)chinesetalks\.net$ (?:^|\.)chineseupress\.com$ (?:^|\.)chingcheong\.com$ (?:^|\.)chinman\.net$ (?:^|\.)chithu\.org$ (?:^|\.)chn\.chosun\.com$ (?:^|\.)chobit\.cc$ (?:^|\.)chrdnet\.com$ (?:^|\.)christianfreedom\.org$ (?:^|\.)christianstudy\.com$ (?:^|\.)christiantimes\.org\.hk$ (?:^|\.)christusrex\.org$ (?:^|\.)chrlawyers\.hk$ (?:^|\.)chrome\.com$ (?:^|\.)chromecast\.com$ (?:^|\.)chromeexperiments\.com$ (?:^|\.)chromercise\.com$ (?:^|\.)chromestatus\.com$ (?:^|\.)chromium\.org$ (?:^|\.)chuang-yen\.org$ (?:^|\.)chubold\.com$ (?:^|\.)chubun\.com$ (?:^|\.)chuizi\.net$ (?:^|\.)churchinhongkong\.org$ (?:^|\.)chushigangdrug\.ch$ (?:^|\.)cienen\.com$ (?:^|\.)cineastentreff\.de$ (?:^|\.)cipfg\.org$ (?:^|\.)circlethebayfortibet\.org$ (?:^|\.)cirosantilli\.com$ (?:^|\.)citizencn\.com$ (?:^|\.)citizenlab\.org$ (?:^|\.)citizenscommission\.hk$ (?:^|\.)citizensradio\.org$ (?:^|\.)city365\.ca$ (?:^|\.)city9x\.com$ (?:^|\.)citypopulation\.de$ (?:^|\.)citytalk\.tw$ (?:^|\.)civicparty\.hk$ (?:^|\.)civildisobediencemovement\.org$ (?:^|\.)civilhrfront\.org$ (?:^|\.)civiliangunner\.com$ (?:^|\.)civilmedia\.tw$ (?:^|\.)ck101\.com$ (?:^|\.)cl\.d0z\.net$ (?:^|\.)clarionproject\.org$ (?:^|\.)classicalguitarblog\.net$ (?:^|\.)clb\.org\.hk$ (?:^|\.)cldr\.unicode\.org$ (?:^|\.)cleansite\.biz$ (?:^|\.)cleansite\.info$ (?:^|\.)cleansite\.us$ (?:^|\.)clearharmony\.net$ (?:^|\.)clearsurance\.com$ (?:^|\.)clearwisdom\.net$ (?:^|\.)clementine-player\.org$ (?:^|\.)cling\.omy\.sg$ (?:^|\.)clinica-tibet\.ru$ (?:^|\.)clipfish\.de$ (?:^|\.)cloakpoint\.com$ (?:^|\.)cloud\.feedly\.com$ (?:^|\.)cloud\.mail\.ru$ (?:^|\.)club1069\.com$ (?:^|\.)clyp\.it$ (?:^|\.)cmcn\.org$ (?:^|\.)cmi\.org\.tw$ (?:^|\.)cmp\.hku\.hk$ (?:^|\.)cms\.gov$ (?:^|\.)cmule\.com$ (?:^|\.)cmule\.org$ (?:^|\.)cmx\.im$ (?:^|\.)cn-proxy\.com$ (?:^|\.)cn\.calameo\.com$ (?:^|\.)cn\.dayabook\.com$ (?:^|\.)cn\.fmnnow\.com$ (?:^|\.)cn\.freeones\.com$ (?:^|\.)cn\.giganews\.com$ (?:^|\.)cn\.ibtimes\.com$ (?:^|\.)cn\.nytstyle\.com$ (?:^|\.)cn\.sandscotaicentral\.com$ (?:^|\.)cn\.shafaqna\.com$ (?:^|\.)cn\.streetvoice\.com$ (?:^|\.)cn\.thegay\.com$ (?:^|\.)cn\.uncyclopedia\.wikia\.com$ (?:^|\.)cn\.uptodown\.com$ (?:^|\.)cn\.voa\.mobi$ (?:^|\.)cn2\.streetvoice\.com$ (?:^|\.)cn6\.eu$ (?:^|\.)cna\.com\.tw$ (?:^|\.)cnabc\.com$ (?:^|\.)cnbbnews\.wordpress\.com$ (?:^|\.)cnd\.org$ (?:^|\.)cnex\.org\.cn$ (?:^|\.)cnineu\.com$ (?:^|\.)cnn\.com$ (?:^|\.)cnnews\.chosun\.com$ (?:^|\.)cnpolitics\.org$ (?:^|\.)cnproxy\.com$ (?:^|\.)co\.ng\.mil$ (?:^|\.)coat\.co\.jp$ (?:^|\.)cobinhood\.com$ (?:^|\.)cochina\.co$ (?:^|\.)cochina\.org$ (?:^|\.)code1984\.com$ (?:^|\.)codeshare\.io$ (?:^|\.)codeskulptor\.org$ (?:^|\.)coin2co\.in$ (?:^|\.)coinbene\.com$ (?:^|\.)coinegg\.com$ (?:^|\.)coinex\.com$ (?:^|\.)coingi\.com$ (?:^|\.)coinrail\.co\.kr$ (?:^|\.)cointiger\.com$ (?:^|\.)cointobe\.com$ (?:^|\.)coinut\.com$ (?:^|\.)collateralmurder\.com$ (?:^|\.)collateralmurder\.org$ (?:^|\.)com\.google$ (?:^|\.)comefromchina\.com$ (?:^|\.)comic-mega\.me$ (?:^|\.)commandarms\.com$ (?:^|\.)commentshk\.com$ (?:^|\.)communistcrimes\.org$ (?:^|\.)community\.windy\.com$ (?:^|\.)communitychoicecu\.com$ (?:^|\.)compileheart\.com$ (?:^|\.)compress\.to$ (?:^|\.)connect\.facebook\.net$ (?:^|\.)conoha\.jp$ (?:^|\.)contactmagazine\.net$ (?:^|\.)contests\.twilio\.com$ (?:^|\.)convio\.net$ (?:^|\.)coobay\.com$ (?:^|\.)coolaler\.com$ (?:^|\.)coolder\.com$ (?:^|\.)coolloud\.org\.tw$ (?:^|\.)coolncute\.com$ (?:^|\.)coolstuffinc\.com$ (?:^|\.)corumcollege\.com$ (?:^|\.)cos-moe\.com$ (?:^|\.)cosmic\.monar\.ch$ (?:^|\.)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$ (?:^|\.)crrev\.com$ (?:^|\.)crucial\.com$ (?:^|\.)csdparty\.com$ (?:^|\.)css\.pixnet\.in$ (?:^|\.)csuchen\.de$ (?:^|\.)csw\.org\.uk$ (?:^|\.)ct\.org\.tw$ (?:^|\.)ctao\.org$ (?:^|\.)ctfriend\.net$ (?:^|\.)cthlo\.github\.io$ (?:^|\.)ctitv\.com\.tw$ (?:^|\.)cts\.com\.tw$ (?:^|\.)cuhkacs\.org$ (?:^|\.)cuihua\.org$ (?:^|\.)cuiweiping\.net$ (?:^|\.)culture\.tw$ (?:^|\.)cumlouder\.com$ (?:^|\.)curvefish\.com$ (?:^|\.)cusu\.hk$ (?:^|\.)cutscenes\.net$ (?:^|\.)cw\.com\.tw$ (?:^|\.)cyberghost\.natado\.com$ (?:^|\.)cyberghostvpn\.com$ (?:^|\.)cynscribe\.com$ (?:^|\.)cytode\.us$ (?:^|\.)d-fukyu\.com$ (?:^|\.)d100\.net$ (?:^|\.)d1b183sg0nvnuh\.cloudfront\.net$ (?:^|\.)d1c37gjwa26taa\.cloudfront\.net$ (?:^|\.)d2bay\.com$ (?:^|\.)d2pass\.com$ (?:^|\.)d3c33hcgiwev3\.cloudfront\.net$ (?:^|\.)d3rhr7kgmtrq1v\.cloudfront\.net$ (?:^|\.)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$ (?:^|\.)dailymotion\.com$ (?:^|\.)dailynews\.sina\.com$ (?:^|\.)dailynews\.sina\.com%2f$ (?:^|\.)dailyview\.tw$ (?:^|\.)daiphapinfo\.net$ (?:^|\.)dajiyuan\.com$ (?:^|\.)dajiyuan\.de$ (?:^|\.)dajiyuan\.eu$ (?:^|\.)dajusha\.baywords\.com$ (?:^|\.)dalailama-archives\.org$ (?:^|\.)dalailama\.com$ (?:^|\.)dalailama\.mn$ (?:^|\.)dalailama\.ru$ (?:^|\.)dalailama\.usc\.edu$ (?:^|\.)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$ (?:^|\.)danbooru\.donmai\.us$ (?:^|\.)danke4china\.net$ (?:^|\.)danwei\.org$ (?:^|\.)daodu14\.jigsy\.com$ (?:^|\.)daolan\.net$ (?:^|\.)daozhongxing\.org$ (?:^|\.)darktech\.org$ (?:^|\.)darktoy\.net$ (?:^|\.)darpa\.mil$ (?:^|\.)dastrassi\.org$ (?:^|\.)data-vocabulary\.org$ (?:^|\.)data\.flurry\.com$ (?:^|\.)data\.gov\.tw$ (?:^|\.)daum\.net$ (?:^|\.)david-kilgour\.com$ (?:^|\.)dawangidc\.com$ (?:^|\.)daxa\.cn$ (?:^|\.)daylife\.com$ (?:^|\.)db\.tt$ (?:^|\.)dbc\.hk$ (?:^|\.)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$ (?:^|\.)deaftone\.com$ (?:^|\.)debug\.com$ (?:^|\.)deck\.ly$ (?:^|\.)decodet\.co$ (?:^|\.)deepmind\.com$ (?:^|\.)deezer\.com$ (?:^|\.)definebabe\.com$ (?:^|\.)deja\.com$ (?:^|\.)delcamp\.net$ (?:^|\.)delicious\.com$ (?:^|\.)demo\.opera-mini\.net$ (?:^|\.)democrats\.org$ (?:^|\.)depositphotos\.com$ (?:^|\.)derekhsu\.homeip\.net$ (?:^|\.)desc\.se$ (?:^|\.)design\.google$ (?:^|\.)desipro\.de$ (?:^|\.)dessci\.com$ (?:^|\.)destiny\.xfiles\.to$ (?:^|\.)destroy-china\.jp$ (?:^|\.)deutsche-welle\.de$ (?:^|\.)developers\.box\.net$ (?:^|\.)devio\.us$ (?:^|\.)devpn\.com$ (?:^|\.)dfas\.mil$ (?:^|\.)dfn\.org$ (?:^|\.)dharamsalanet\.com$ (?:^|\.)dharmakara\.net$ (?:^|\.)dhcp\.biz$ (?:^|\.)diaoyuislands\.org$ (?:^|\.)dictionary\.goo\.ne\.jp$ (?:^|\.)difangwenge\.org$ (?:^|\.)digiland\.tw$ (?:^|\.)digisfera\.com$ (?:^|\.)digitalnomadsproject\.org$ (?:^|\.)diigo\.com$ (?:^|\.)dilber\.se$ (?:^|\.)dingchin\.com\.tw$ (?:^|\.)dipity\.com$ (?:^|\.)directcreative\.com$ (?:^|\.)discoins\.com$ (?:^|\.)disconnect\.me$ (?:^|\.)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$ (?:^|\.)dl\.box\.net$ (?:^|\.)dlsite\.com$ (?:^|\.)dlyoutube\.com$ (?:^|\.)dm530\.net$ (?:^|\.)dmcdn\.net$ (?:^|\.)dmm\.co\.jp$ (?:^|\.)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$ (?:^|\.)dogfartnetwork\.com$ (?:^|\.)dojin\.com$ (?:^|\.)dok-forum\.net$ (?:^|\.)dolc\.de$ (?:^|\.)dolf\.org\.hk$ (?:^|\.)dollf\.com$ (?:^|\.)domain\.club\.tw$ (?:^|\.)domainhelp\.search\.com$ (?:^|\.)domains\.google$ (?:^|\.)domaintoday\.com\.au$ (?:^|\.)dongtaiwang\.com$ (?:^|\.)dongtaiwang\.net$ (?:^|\.)dongyangjing\.com$ (?:^|\.)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$ (?:^|\.)download\.aircrack-ng\.org$ (?:^|\.)download\.cnet\.com$ (?:^|\.)download\.ithome\.com\.tw$ (?:^|\.)dphk\.org$ (?:^|\.)dpp\.org\.tw$ (?:^|\.)dpr\.info$ (?:^|\.)dragonex\.io$ (?:^|\.)dragonsprings\.org$ (?:^|\.)dreamamateurs\.com$ (?:^|\.)drepung\.org$ (?:^|\.)drgan\.net$ (?:^|\.)drmingxia\.org$ (?:^|\.)dropbooks\.tv$ (?:^|\.)dropbox\.com$ (?:^|\.)dropboxusercontent\.com$ (?:^|\.)drsunacademy\.com$ (?:^|\.)drtuber\.com$ (?:^|\.)dscn\.info$ (?:^|\.)dsmtp\.com$ (?:^|\.)dstk\.dk$ (?:^|\.)dtdns\.net$ (?:^|\.)dtiblog\.com$ (?:^|\.)dtic\.mil$ (?:^|\.)dtwang\.org$ (?:^|\.)duanzhihu\.com$ (?:^|\.)duck\.com$ (?:^|\.)duckdns\.org$ (?:^|\.)duckduckgo-owned-server\.yahoo\.net$ (?:^|\.)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$ (?:^|\.)dvdpac\.com$ (?:^|\.)dvorak\.org$ (?:^|\.)dw-world\.com$ (?:^|\.)dw-world\.de$ (?:^|\.)dw\.com$ (?:^|\.)dw\.de$ (?:^|\.)dwnews\.com$ (?:^|\.)dwnews\.net$ (?:^|\.)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$ (?:^|\.)dynupdate\.no-ip\.com$ (?:^|\.)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$ (?:^|\.)eastturkistancc\.org$ (?:^|\.)eastturkistangovernmentinexile\.us$ (?:^|\.)easyca\.ca$ (?:^|\.)easypic\.com$ (?:^|\.)ebony-beauty\.com$ (?:^|\.)ebook\.hyread\.com\.tw$ (?:^|\.)ebookbrowse\.com$ (?:^|\.)ebookee\.com$ (?:^|\.)ebtcbank\.com$ (?:^|\.)ecfa\.org\.tw$ (?:^|\.)echofon\.com$ (?:^|\.)ecimg\.tw$ (?:^|\.)ecministry\.net$ (?:^|\.)economist\.com$ (?:^|\.)ecsm\.vs\.com$ (?:^|\.)edgecastcdn\.net$ (?:^|\.)edicypages\.com$ (?:^|\.)edmontonchina\.cn$ (?:^|\.)edmontonservice\.com$ (?:^|\.)edns\.biz$ (?:^|\.)edoors\.com$ (?:^|\.)edubridge\.com$ (?:^|\.)edupro\.org$ (?:^|\.)eeas\.europa\.eu$ (?:^|\.)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$ (?:^|\.)embr\.in$ (?:^|\.)emilylau\.org\.hk$ (?:^|\.)empfil\.com$ (?:^|\.)emule-ed2k\.com$ (?:^|\.)emulefans\.com$ (?:^|\.)emuparadise\.me$ (?:^|\.)en\.favotter\.net$ (?:^|\.)en\.hao123\.com$ (?:^|\.)enanyang\.my$ (?:^|\.)encyclopedia\.com$ (?:^|\.)enewstree\.com$ (?:^|\.)enfal\.de$ (?:^|\.)engagedaily\.org$ (?:^|\.)englishforeveryone\.org$ (?:^|\.)englishfromengland\.co\.uk$ (?:^|\.)englishpen\.org$ (?:^|\.)enlighten\.org\.tw$ (?:^|\.)entermap\.com$ (?:^|\.)entnt\.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$ (?:^|\.)esurance\.com$ (?:^|\.)etaa\.org\.au$ (?:^|\.)etadult\.com$ (?:^|\.)etaiwannews\.com$ (?:^|\.)etherdelta\.com$ (?:^|\.)etizer\.org$ (?:^|\.)etokki\.com$ (?:^|\.)etools\.ncol\.com$ (?:^|\.)etowns\.net$ (?:^|\.)etowns\.org$ (?:^|\.)ettoday\.net$ (?:^|\.)etvonline\.hk$ (?:^|\.)eu\.org$ (?:^|\.)eucasino\.com$ (?:^|\.)eulam\.com$ (?:^|\.)eurekavpt\.com$ (?:^|\.)euronews\.com$ (?:^|\.)evchk\.wikia\.com$ (?:^|\.)evschool\.net$ (?:^|\.)exblog\.jp$ (?:^|\.)exchristian\.hk$ (?:^|\.)exmo\.com$ (?:^|\.)exmormon\.org$ (?:^|\.)expatshield\.com$ (?:^|\.)expecthim\.com$ (?:^|\.)expekt\.com$ (?:^|\.)experts-univers\.com$ (?:^|\.)exploader\.net$ (?:^|\.)expressvpn\.com$ (?:^|\.)exrates\.me$ (?:^|\.)extmatrix\.com$ (?:^|\.)extremetube\.com$ (?:^|\.)exx\.com$ (?:^|\.)eyevio\.jp$ (?:^|\.)eyny\.com$ (?:^|\.)ezpc\.tk$ (?:^|\.)ezpeer\.com$ (?:^|\.)ezua\.com$ (?:^|\.)fa\.gov\.tw$ (?:^|\.)facebook\.br$ (?:^|\.)facebook\.com$ (?:^|\.)facebook\.design$ (?:^|\.)facebook\.hu$ (?:^|\.)facebook\.in$ (?:^|\.)facebook\.nl$ (?:^|\.)facebook\.se$ (?:^|\.)facebookmail\.com$ (?:^|\.)facebookquotes4u\.com$ (?:^|\.)faceless\.me$ (?:^|\.)facesofnyfw\.com$ (?:^|\.)facesoftibetanselfimmolators\.info$ (?:^|\.)fail\.hk$ (?:^|\.)faith100\.org$ (?:^|\.)faithfuleye\.com$ (?:^|\.)faiththedog\.info$ (?:^|\.)fakku\.net$ (?:^|\.)falsefire\.com$ (?:^|\.)falun-co\.org$ (?:^|\.)falun-ny\.net$ (?:^|\.)falun\.caltech\.edu$ (?:^|\.)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$ (?:^|\.)fangbinxing\.com$ (?:^|\.)fangeming\.com$ (?:^|\.)fangeqiang\.com$ (?:^|\.)fanglizhi\.info$ (?:^|\.)fangmincn\.org$ (?:^|\.)fangong\.forums-free\.com$ (?:^|\.)fangong\.org$ (?:^|\.)fangongheike\.com$ (?:^|\.)fanhaodang\.com$ (?:^|\.)fanqiang\.tk$ (?:^|\.)fanqianghou\.com$ (?:^|\.)fanqiangyakexi\.net$ (?:^|\.)fanqiangzhe\.com$ (?:^|\.)fanswong\.com$ (?:^|\.)fanyue\.info$ (?:^|\.)fapdu\.com$ (?:^|\.)faproxy\.com$ (?:^|\.)faqserv\.com$ (?:^|\.)fartit\.com$ (?:^|\.)farwestchina\.com$ (?:^|\.)fast\.wistia\.com$ (?:^|\.)fastpic\.ru$ (?:^|\.)fastssh\.com$ (?:^|\.)faststone\.org$ (?:^|\.)fatbtc\.com$ (?:^|\.)favstar\.fm$ (?:^|\.)fawanghuihui\.org$ (?:^|\.)faydao\.com$ (?:^|\.)fb\.com$ (?:^|\.)fb\.me$ (?:^|\.)fbaddins\.com$ (?:^|\.)fbcdn\.net$ (?:^|\.)fbsbx\.com$ (?:^|\.)fbworkmail\.com$ (?:^|\.)fc2\.com$ (?:^|\.)fc2blog\.net$ (?:^|\.)fc2china\.com$ (?:^|\.)fc2cn\.com$ (?:^|\.)fda\.gov\.tw$ (?:^|\.)fdc64\.de$ (?:^|\.)fdc64\.org$ (?:^|\.)fdc89\.jp$ (?:^|\.)feedburner\.com$ (?:^|\.)feeds\.fileforum\.com$ (?:^|\.)feelssh\.com$ (?:^|\.)feer\.com$ (?:^|\.)feifeiss\.com$ (?:^|\.)feitian-california\.org$ (?:^|\.)feitianacademy\.org$ (?:^|\.)feministteacher\.com$ (?:^|\.)fengzhenghu\.com$ (?:^|\.)fengzhenghu\.net$ (?:^|\.)fevernet\.com$ (?:^|\.)ff\.im$ (?:^|\.)fffff\.at$ (?:^|\.)fflick\.com$ (?:^|\.)ffvpn\.com$ (?:^|\.)fgmtv\.net$ (?:^|\.)fgmtv\.org$ (?:^|\.)fhreports\.net$ (?:^|\.)fiddle\.jshell\.net$ (?:^|\.)figprayer\.com$ (?:^|\.)fileflyer\.com$ (?:^|\.)files2me\.com$ (?:^|\.)fileserve\.com$ (?:^|\.)filesor\.com$ (?:^|\.)fillthesquare\.org$ (?:^|\.)filmingfortibet\.org$ (?:^|\.)filmy\.olabloga\.pl$ (?:^|\.)filthdump\.com$ (?:^|\.)financetwitter\.com$ (?:^|\.)finchvpn\.com$ (?:^|\.)findmespot\.com$ (?:^|\.)findyoutube\.com$ (?:^|\.)findyoutube\.net$ (?:^|\.)fingerdaily\.com$ (?:^|\.)finler\.net$ (?:^|\.)firearmsworld\.net$ (?:^|\.)firebaseio\.com$ (?:^|\.)fireofliberty\.org$ (?:^|\.)firetweet\.io$ (?:^|\.)firstfivefollowers\.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$ (?:^|\.)flyvpn\.com$ (?:^|\.)flyzy2005\.com$ (?:^|\.)fnac\.be$ (?:^|\.)fnac\.com$ (?:^|\.)fochk\.org$ (?:^|\.)focustaiwan\.tw$ (?:^|\.)focusvpn\.com$ (?:^|\.)fofg-europe\.net$ (?:^|\.)fofg\.org$ (?:^|\.)fofldfradio\.org$ (?:^|\.)fooooo\.com$ (?:^|\.)footwiball\.com$ (?:^|\.)foreignpolicy\.com$ (?:^|\.)forum\.baby-kingdom\.com$ (?:^|\.)forum\.cyberctm\.com$ (?:^|\.)forum\.idsam\.com$ (?:^|\.)forum\.my903\.com$ (?:^|\.)forum\.mymaji\.com$ (?:^|\.)forum\.omy\.sg$ (?:^|\.)forum\.palmislife\.com$ (?:^|\.)forum\.setty\.com\.tw$ (?:^|\.)forum\.sina\.com\.hk$ (?:^|\.)forum\.slime\.com\.tw$ (?:^|\.)forum\.tvb\.com$ (?:^|\.)forum\.xinbao\.de$ (?:^|\.)forum4hk\.com$ (?:^|\.)fotile\.me$ (?:^|\.)fourface\.nodesnoop\.com$ (?:^|\.)fourthinternational\.org$ (?:^|\.)foxdie\.us$ (?:^|\.)foxgay\.com$ (?:^|\.)foxsub\.com$ (?:^|\.)foxtang\.com$ (?:^|\.)fpmt-osel\.org$ (?:^|\.)fpmt\.org$ (?:^|\.)fpmt\.tw$ (?:^|\.)fpmtmexico\.org$ (?:^|\.)fq\.wikia\.com$ (?:^|\.)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$ (?:^|\.)freebrowser\.org$ (?:^|\.)freechal\.com$ (?:^|\.)freechina\.net$ (?:^|\.)freechina\.news$ (?:^|\.)freechinaforum\.org$ (?:^|\.)freechinaweibo\.com$ (?:^|\.)freeddns\.com$ (?:^|\.)freeddns\.org$ (?:^|\.)freedomchina\.info$ (?:^|\.)freedomcollection\.org$ (?:^|\.)freedomhouse\.org$ (?:^|\.)freedominfonetweb\.wordpress\.com$ (?:^|\.)freedomsherald\.org$ (?:^|\.)freeforums\.org$ (?:^|\.)freefq\.com$ (?:^|\.)freefuckvids\.com$ (?:^|\.)freegao\.com$ (?:^|\.)freeilhamtohti\.org$ (?:^|\.)freekwonpyong\.org$ (?:^|\.)freelotto\.com$ (?:^|\.)freeman2\.com$ (?:^|\.)freemoren\.com$ (?:^|\.)freemorenews\.com$ (?:^|\.)freemuse\.org$ (?:^|\.)freenet$ (?:^|\.)freenet-china\.org$ (?:^|\.)freenetproject\.org$ (?:^|\.)freenewscn\.com$ (?:^|\.)freeopenvpn\.com$ (?:^|\.)freeoz\.org$ (?:^|\.)freessh\.us$ (?:^|\.)freetcp\.com$ (?:^|\.)freetibet\.net$ (?:^|\.)freetibet\.org$ (?:^|\.)freetibetanheroes\.org$ (?:^|\.)freeviewmovies\.com$ (?:^|\.)freevpn\.me$ (?:^|\.)freevpn\.nl$ (?:^|\.)freewallpaper4\.me$ (?:^|\.)freewebs\.com$ (?:^|\.)freewechat\.com$ (?:^|\.)freeweibo\.com$ (?:^|\.)freewww\.biz$ (?:^|\.)freewww\.info$ (?:^|\.)freexinwen\.com$ (?:^|\.)freeyellow\.com$ (?:^|\.)freeyoutubeproxy\.net$ (?:^|\.)friendfeed-media\.com$ (?:^|\.)friendfeed\.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$ (?:^|\.)fucd\.com$ (?:^|\.)fuckcnnic\.net$ (?:^|\.)fuckgfw\.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$ (?:^|\.)gabocorp\.com$ (?:^|\.)gaeproxy\.com$ (?:^|\.)gaforum\.org$ (?:^|\.)galaxymacau\.com$ (?:^|\.)galenwu\.com$ (?:^|\.)galstars\.net$ (?:^|\.)game735\.com$ (?:^|\.)gamebase\.com\.tw$ (?:^|\.)gamejolt\.com$ (?:^|\.)gamer-cds\.cdn\.hinet\.net$ (?:^|\.)gamer\.com\.tw$ (?:^|\.)gamer2-cds\.cdn\.hinet\.net$ (?:^|\.)gamez\.com\.tw$ (?:^|\.)gamousa\.com$ (?:^|\.)ganges\.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$ (?:^|\.)gcmasia\.com$ (?:^|\.)gcpnews\.com$ (?:^|\.)gcr\.io$ (?:^|\.)gdbt\.net$ (?:^|\.)gdzf\.org$ (?:^|\.)geek-art\.net$ (?:^|\.)geekerhome\.com$ (?:^|\.)geekheart\.info$ (?:^|\.)gekikame\.com$ (?:^|\.)gelbooru\.com$ (?:^|\.)geocities\.co\.jp$ (?:^|\.)geocities\.com$ (?:^|\.)geocities\.jp$ (?:^|\.)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$ (?:^|\.)getmdl\.io$ (?:^|\.)getoutline\.org$ (?:^|\.)getsocialscope\.com$ (?:^|\.)getsync\.com$ (?:^|\.)gettrials\.com$ (?:^|\.)gettyimages\.com$ (?:^|\.)getuploader\.com$ (?:^|\.)gfbv\.de$ (?:^|\.)gfgold\.com\.hk$ (?:^|\.)gfsale\.com$ (?:^|\.)gfw\.org\.ua$ (?:^|\.)gfw\.press$ (?:^|\.)ggpht\.com$ (?:^|\.)ggssl\.com$ (?:^|\.)ghostpath\.com$ (?:^|\.)ghut\.org$ (?:^|\.)giantessnight\.com$ (?:^|\.)gifree\.com$ (?:^|\.)giga-web\.jp$ (?:^|\.)gigporno\.ru$ (?:^|\.)girlbanker\.com$ (?:^|\.)git\.io$ (?:^|\.)github\.com$ (?:^|\.)githubusercontent\.com$ (?:^|\.)gizlen\.net$ (?:^|\.)gjczz\.com$ (?:^|\.)glass8\.eu$ (?:^|\.)global\.bing\.com$ (?:^|\.)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$ (?:^|\.)gmbd\.cn$ (?:^|\.)gmhz\.org$ (?:^|\.)gmll\.org$ (?:^|\.)gmodules\.com$ (?:^|\.)gmozomg\.izihost\.org$ (?:^|\.)gnci\.org\.hk$ (?:^|\.)go-pki\.com$ (?:^|\.)go\.nesnode\.com$ (?:^|\.)go141\.com$ (?:^|\.)goagent\.biz$ (?:^|\.)goagent\.codeplex\.com$ (?:^|\.)goagentplus\.com$ (?:^|\.)gobet\.cc$ (?:^|\.)godfootsteps\.org$ (?:^|\.)godns\.work$ (?:^|\.)godoc\.org$ (?:^|\.)godsdirectcontact\.co\.uk$ (?:^|\.)godsdirectcontact\.org$ (?:^|\.)godsdirectcontact\.org\.tw$ (?:^|\.)godsimmediatecontact\.com$ (?:^|\.)gogotunnel\.com$ (?:^|\.)gohappy\.com\.tw$ (?:^|\.)gojet\.krtco\.com\.tw$ (?:^|\.)gokbayrak\.com$ (?:^|\.)golang\.org$ (?:^|\.)goldbet\.com$ (?:^|\.)goldbetsports\.com$ (?:^|\.)goldeneyevault\.com$ (?:^|\.)goldenfrog\.com$ (?:^|\.)goldjizz\.com$ (?:^|\.)goldstep\.net$ (?:^|\.)goldwave\.com$ (?:^|\.)gongm\.in$ (?:^|\.)gongmeng\.info$ (?:^|\.)gongminliliang\.com$ (?:^|\.)gongwt\.com$ (?:^|\.)goo\.gl$ (?:^|\.)gooday\.xyz$ (?:^|\.)gooddns\.info$ (?:^|\.)goodreaders\.com$ (?:^|\.)goodreads\.com$ (?:^|\.)goodtv\.com\.tw$ (?:^|\.)goodtv\.tv$ (?:^|\.)goofind\.com$ (?:^|\.)google(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?){1,2}$ (?:^|\.)googleapis(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?){1,2}$ (?:^|\.)googleapps\.com$ (?:^|\.)googlearth\.com$ (?:^|\.)googleartproject\.com$ (?:^|\.)googleblog\.com$ (?:^|\.)googlebot\.com$ (?:^|\.)googlechinawebmaster\.com$ (?:^|\.)googlecode\.com$ (?:^|\.)googlecommerce\.com$ (?:^|\.)googledomains\.com$ (?:^|\.)googledrive\.com$ (?:^|\.)googleearth\.com$ (?:^|\.)googlegroups\.com$ (?:^|\.)googlehosted\.com$ (?:^|\.)googleideas\.com$ (?:^|\.)googleinsidesearch\.com$ (?:^|\.)googlelabs\.com$ (?:^|\.)googlemail\.com$ (?:^|\.)googlemashups\.com$ (?:^|\.)googlepagecreator\.com$ (?:^|\.)googleplay\.com$ (?:^|\.)googleplus\.com$ (?:^|\.)googlescholar\.com$ (?:^|\.)googlesile\.com$ (?:^|\.)googlesource\.com$ (?:^|\.)googleusercontent\.com$ (?:^|\.)googlevideo\.com$ (?:^|\.)googleweblight\.com$ (?:^|\.)googlezip\.net$ (?:^|\.)gopetition\.com$ (?:^|\.)goproxing\.net$ (?:^|\.)goregrish\.com$ (?:^|\.)gospelherald\.com$ (?:^|\.)got-game\.org$ (?:^|\.)gotdns\.ch$ (?:^|\.)gotgeeks\.com$ (?:^|\.)gotrusted\.com$ (?:^|\.)gotw\.ca$ (?:^|\.)gov\.taipei$ (?:^|\.)gov\.tw$ (?:^|\.)gr8domain\.biz$ (?:^|\.)gr8name\.biz$ (?:^|\.)grammaly\.com$ (?:^|\.)grandtrial\.org$ (?:^|\.)grangorz\.org$ (?:^|\.)graphis\.ne\.jp$ (?:^|\.)graphql\.org$ (?:^|\.)greasespot\.net$ (?:^|\.)great-firewall\.com$ (?:^|\.)great-roc\.org$ (?:^|\.)greatfire\.org$ (?:^|\.)greatfire\.us7\.list-manage\.com$ (?:^|\.)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$ (?:^|\.)groups\.google\.cn$ (?:^|\.)grow\.google$ (?:^|\.)gs-discuss\.com$ (?:^|\.)gsp\.target\.com$ (?:^|\.)gstatic\.com$ (?:^|\.)gtricks\.com$ (?:^|\.)gts-vpn\.com$ (?:^|\.)gu-chu-sum\.org$ (?:^|\.)guaguass\.com$ (?:^|\.)guaguass\.org$ (?:^|\.)guancha\.org$ (?:^|\.)guaneryu\.com$ (?:^|\.)guangming\.com\.my$ (?:^|\.)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$ (?:^|\.)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$ (?:^|\.)hackthatphone\.net$ (?:^|\.)hahaxixi\.github\.io$ (?:^|\.)hahlo\.com$ (?:^|\.)hakkatv\.org\.tw$ (?:^|\.)handcraftedsoftware\.org$ (?:^|\.)hanunyi\.com$ (?:^|\.)hao\.news$ (?:^|\.)haoel\.github\.io$ (?:^|\.)happy-vpn\.com$ (?:^|\.)haproxy\.org$ (?:^|\.)hardsextube\.com$ (?:^|\.)harunyahya\.com$ (?:^|\.)hautelook\.com$ (?:^|\.)hautelookcdn\.com$ (?:^|\.)have8\.com$ (?:^|\.)hbg\.com$ (?:^|\.)hbo\.com$ (?:^|\.)hclips\.com$ (?:^|\.)hd\.stheadline\.com$ (?:^|\.)hdlt\.me$ (?:^|\.)hdtvb\.net$ (?:^|\.)hdzog\.com$ (?:^|\.)heartyit\.com$ (?:^|\.)heavy-r\.com$ (?:^|\.)hec\.su$ (?:^|\.)hecaitou\.net$ (?:^|\.)hechaji\.com$ (?:^|\.)heeact\.edu\.tw$ (?:^|\.)hegre-art\.com$ (?:^|\.)heix\.pp\.ru$ (?:^|\.)helloandroid\.com$ (?:^|\.)helloqueer\.com$ (?:^|\.)helloss\.pw$ (?:^|\.)hellotxt\.com$ (?:^|\.)hellouk\.org$ (?:^|\.)help\.linksalpha\.com$ (?:^|\.)helpeachpeople\.com$ (?:^|\.)helplinfen\.com$ (?:^|\.)helpster\.de$ (?:^|\.)helpzhuling\.org$ (?:^|\.)hentai\.to$ (?:^|\.)hentaitube\.tv$ (?:^|\.)hentaivideoworld\.com$ (?:^|\.)heqinglian\.net$ (?:^|\.)heungkongdiscuss\.com$ (?:^|\.)hexieshe\.com$ (?:^|\.)hexieshe\.xyz$ (?:^|\.)hexxeh\.net$ (?:^|\.)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$ (?:^|\.)hihiforum\.com$ (?:^|\.)hihistory\.net$ (?:^|\.)hiitch\.com$ (?:^|\.)hikinggfw\.org$ (?:^|\.)hilive\.tv$ (?:^|\.)himalayan-foundation\.org$ (?:^|\.)himalayanglacier\.com$ (?:^|\.)himemix\.com$ (?:^|\.)himemix\.net$ (?:^|\.)hitbtc\.com$ (?:^|\.)hitomi\.la$ (?:^|\.)hiwifi\.com$ (?:^|\.)hizb-ut-tahrir\.info$ (?:^|\.)hizb-ut-tahrir\.org$ (?:^|\.)hizbuttahrir\.org$ (?:^|\.)hjclub\.info$ (?:^|\.)hk-pub\.com$ (?:^|\.)hk\.frienddy\.com$ (?:^|\.)hk\.geocities\.com$ (?:^|\.)hk\.gradconnection\.com$ (?:^|\.)hk\.hao123img\.com$ (?:^|\.)hk\.jiepang\.com$ (?:^|\.)hk\.knowledge\.yahoo\.com$ (?:^|\.)hk\.myblog\.yahoo\.com$ (?:^|\.)hk\.news\.yahoo\.com$ (?:^|\.)hk\.rd\.yahoo\.com$ (?:^|\.)hk\.search\.yahoo\.com$ (?:^|\.)hk\.video\.news\.yahoo\.com$ (?:^|\.)hk\.yahoo\.com$ (?:^|\.)hk01\.com$ (?:^|\.)hk32168\.com$ (?:^|\.)hka8964\.wordpress\.com$ (?:^|\.)hkacg\.com$ (?:^|\.)hkacg\.net$ (?:^|\.)hkanews\.wordpress\.com$ (?:^|\.)hkatvnews\.com$ (?:^|\.)hkbc\.net$ (?:^|\.)hkbf\.org$ (?:^|\.)hkbookcity\.com$ (?:^|\.)hkchurch\.org$ (?:^|\.)hkci\.org\.hk$ (?:^|\.)hkcmi\.edu$ (?:^|\.)hkcnews\.com$ (?:^|\.)hkcoc\.com$ (?:^|\.)hkcoc\.weather\.com\.hk$ (?:^|\.)hkdailynews\.com\.hk$ (?:^|\.)hkday\.net$ (?:^|\.)hkdf\.org$ (?:^|\.)hkej\.com$ (?:^|\.)hkepc\.com$ (?:^|\.)hkfaa\.com$ (?:^|\.)hkfreezone\.com$ (?:^|\.)hkfront\.org$ (?:^|\.)hkgalden\.com$ (?:^|\.)hkgolden\.com$ (?:^|\.)hkgreenradio\.org$ (?:^|\.)hkheadline\.com$ (?:^|\.)hkhkhk\.com$ (?:^|\.)hkhrc\.org\.hk$ (?:^|\.)hkhrm\.org\.hk$ (?:^|\.)hkip\.org\.uk$ (?:^|\.)hkjc\.com$ (?:^|\.)hkjp\.org$ (?:^|\.)hklft\.com$ (?:^|\.)hklts\.org\.hk$ (?:^|\.)hkptu\.org$ (?:^|\.)hkreporter\.com$ (?:^|\.)hkreporter\.loved\.hk$ (?:^|\.)hkupop\.hku\.hk$ (?:^|\.)hkusu\.net$ (?:^|\.)hkvwet\.com$ (?:^|\.)hkwcc\.org\.hk$ (?:^|\.)hkzone\.org$ (?:^|\.)hmonghot\.com$ (?:^|\.)hmv\.co\.jp$ (?:^|\.)hmvdigital\.ca$ (?:^|\.)hmvdigital\.com$ (?:^|\.)hnjhj\.com$ (?:^|\.)hnntube\.com$ (?:^|\.)hola\.com$ (?:^|\.)hola\.org$ (?:^|\.)holymountaincn\.com$ (?:^|\.)holyspiritspeaks\.org$ (?:^|\.)home\.sina\.com$ (?:^|\.)home\.so-net\.net\.tw$ (?:^|\.)homedepot\.com$ (?:^|\.)homeperversion\.com$ (?:^|\.)homeservershow\.com$ (?:^|\.)hongkongfp\.com$ (?:^|\.)hongmeimei\.com$ (?:^|\.)hongzhi\.li$ (?:^|\.)hootsuite\.com$ (?:^|\.)hoovers\.com$ (?:^|\.)hopedialogue\.org$ (?:^|\.)hopto\.org$ (?:^|\.)hornygamer\.com$ (?:^|\.)hornytrip\.com$ (?:^|\.)hotav\.tv$ (?:^|\.)hotels\.cn$ (?:^|\.)hotfrog\.com\.tw$ (?:^|\.)hotgoo\.com$ (?:^|\.)hotpornshow\.com$ (?:^|\.)hotpot\.hk$ (?:^|\.)hotshame\.com$ (?:^|\.)hotspotshield\.com$ (?:^|\.)hotvpn\.com$ (?:^|\.)hougaige\.com$ (?:^|\.)howtoforge\.com$ (?:^|\.)hoxx\.com$ (?:^|\.)hpa\.gov\.tw$ (?:^|\.)hqcdp\.org$ (?:^|\.)hqjapanesesex\.com$ (?:^|\.)hqmovies\.com$ (?:^|\.)hqsbnet\.wordpress\.com$ (?:^|\.)hqsbonline\.wordpress\.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$ (?:^|\.)https$ (?:^|\.)https443\.net$ (?:^|\.)https443\.org$ (?:^|\.)hua-yue\.net$ (?:^|\.)huaglad\.com$ (?:^|\.)huanghuagang\.org$ (?:^|\.)huangyiyu\.com$ (?:^|\.)huaren\.us$ (?:^|\.)huaren4us\.com$ (?:^|\.)huashangnews\.com$ (?:^|\.)huaxia-news\.com$ (?:^|\.)huaxiabao\.org$ (?:^|\.)huaxin\.ph$ (?:^|\.)huayuworld\.org$ (?:^|\.)hudatoriq\.web\.id$ (?:^|\.)hudson\.org$ (?:^|\.)huffingtonpost\.com$ (?:^|\.)hugoroy\.eu$ (?:^|\.)huhaitai\.com$ (?:^|\.)huhamhire\.com$ (?:^|\.)huiyi\.in$ (?:^|\.)hulkshare\.com$ (?:^|\.)hulu\.com$ (?:^|\.)huluim\.com$ (?:^|\.)hum$ (?:^|\.)humanrightsbriefing\.org$ (?:^|\.)hung-ya\.com$ (?:^|\.)hungerstrikeforaids\.org$ (?:^|\.)huobi\.com$ (?:^|\.)huobi\.pro$ (?:^|\.)huobipro\.com$ (?:^|\.)huping\.net$ (?:^|\.)hurgokbayrak\.com$ (?:^|\.)hurriyet\.com\.tr$ (?:^|\.)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$ (?:^|\.)i-cable\.com$ (?:^|\.)i-part\.com\.tw$ (?:^|\.)i\.lithium\.com$ (?:^|\.)i1\.hk$ (?:^|\.)i2p2\.de$ (?:^|\.)i2runner\.com$ (?:^|\.)i818hk\.com$ (?:^|\.)iam\.soy$ (?:^|\.)iamtopone\.com$ (?:^|\.)iask\.bz$ (?:^|\.)iask\.ca$ (?:^|\.)iav19\.com$ (?:^|\.)ibiblio\.org$ (?:^|\.)iblist\.com$ (?:^|\.)iblogserv-f\.net$ (?:^|\.)ibros\.org$ (?:^|\.)ibvpn\.com$ (?:^|\.)icams\.com$ (?:^|\.)ice\.audionow\.com$ (?:^|\.)icij\.org$ (?:^|\.)icl-fi\.org$ (?:^|\.)icoco\.com$ (?:^|\.)iconpaper\.org$ (?:^|\.)icu-project\.org$ (?:^|\.)id\.hao123\.com$ (?:^|\.)id\.heroku\.com$ (?:^|\.)iddddg\.com$ (?:^|\.)idemocracy\.asia$ (?:^|\.)identi\.ca$ (?:^|\.)idiomconnection\.com$ (?:^|\.)idouga\.com$ (?:^|\.)idreamx\.com$ (?:^|\.)idv\.tw$ (?:^|\.)ieasy5\.com$ (?:^|\.)ied2k\.net$ (?:^|\.)ienergy1\.com$ (?:^|\.)if\.ttt$ (?:^|\.)ifan\.cz\.cc$ (?:^|\.)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$ (?:^|\.)iipdigital\.usembassy\.gov$ (?:^|\.)ikstar\.com$ (?:^|\.)ikwb\.com$ (?:^|\.)illusionfactory\.com$ (?:^|\.)ilove80\.be$ (?:^|\.)ilovelongtoes\.com$ (?:^|\.)im\.tv$ (?:^|\.)im88\.tw$ (?:^|\.)imageab\.com$ (?:^|\.)imagefap\.com$ (?:^|\.)imageflea\.com$ (?:^|\.)images-gaytube\.com$ (?:^|\.)images\.comico\.tw$ (?:^|\.)imageshack\.us$ (?:^|\.)imagevenue\.com$ (?:^|\.)imagezilla\.net$ (?:^|\.)imb\.org$ (?:^|\.)imdb\.com$ (?:^|\.)img$ (?:^|\.)img\.dlsite\.jp$ (?:^|\.)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$ (?:^|\.)in99\.org$ (?:^|\.)incapdns\.net$ (?:^|\.)incloak\.com$ (?:^|\.)incredibox\.fr$ (?:^|\.)indiandefensenews\.in$ (?:^|\.)indiemerch\.com$ (?:^|\.)info-graf\.fr$ (?:^|\.)initiativesforchina\.org$ (?:^|\.)inkui\.com$ (?:^|\.)inmediahk\.net$ (?:^|\.)innermongolia\.org$ (?:^|\.)inote\.tw$ (?:^|\.)insecam\.org$ (?:^|\.)insidevoa\.com$ (?:^|\.)instagram\.com$ (?:^|\.)instanthq\.com$ (?:^|\.)institut-tibetain\.org$ (?:^|\.)international-news\.newsmagazine\.asia$ (?:^|\.)internet\.org$ (?:^|\.)internetdefenseleague\.org$ (?:^|\.)internetfreedom\.org$ (?:^|\.)internetpopculture\.com$ (?:^|\.)inthenameofconfuciusmovie\.com$ (?:^|\.)investigating\.wordpress\.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$ (?:^|\.)iredmail\.org$ (?:^|\.)ironbigfools\.compython\.net$ (?:^|\.)ironpython\.net$ (?:^|\.)ironsocket\.com$ (?:^|\.)is-a-hunter\.com$ (?:^|\.)is\.gd$ (?:^|\.)isaacmao\.com$ (?:^|\.)isasecret\.com$ (?:^|\.)isc\.sans\.edu$ (?:^|\.)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$ (?:^|\.)istiqlalhewer\.com$ (?:^|\.)istockphoto\.com$ (?:^|\.)isunaffairs\.com$ (?:^|\.)isuntv\.com$ (?:^|\.)itaboo\.info$ (?:^|\.)itaiwan\.gov\.tw$ (?:^|\.)italiatibet\.org$ (?:^|\.)itasoftware\.com$ (?:^|\.)itemdb\.com$ (?:^|\.)ithelp\.ithome\.com\.tw$ (?:^|\.)its\.caltech\.edu$ (?:^|\.)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$ (?:^|\.)izaobao\.us$ (?:^|\.)izles\.net$ (?:^|\.)izlesem\.org$ (?:^|\.)j\.mp$ (?:^|\.)ja\.wikipedia\.org$ (?:^|\.)jamaat\.org$ (?:^|\.)jamyangnorbu\.com$ (?:^|\.)jandyx\.com$ (?:^|\.)janwongphoto\.com$ (?:^|\.)japan-whores\.com$ (?:^|\.)japanfirst\.asianfreeforum\.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$ (?:^|\.)jiehua\.cz$ (?:^|\.)jieshibaobao\.com$ (?:^|\.)jigglegifs\.com$ (?:^|\.)jigong1024\.com$ (?:^|\.)jihadintel\.meforum\.org$ (?:^|\.)jihadology\.net$ (?:^|\.)jiji\.com$ (?:^|\.)jims\.net$ (?:^|\.)jinbushe\.org$ (?:^|\.)jingpin\.org$ (?:^|\.)jingsim\.org$ (?:^|\.)jinpianwang\.com$ (?:^|\.)jinroukong\.com$ (?:^|\.)jintian\.net$ (?:^|\.)jinx\.com$ (?:^|\.)jitouch\.com$ (?:^|\.)jizzthis\.com$ (?:^|\.)jjgirls\.com$ (?:^|\.)jkb\.cc$ (?:^|\.)jkforum\.net$ (?:^|\.)jkub\.com$ (?:^|\.)jma\.go\.jp$ (?:^|\.)jmscult\.com$ (?:^|\.)joachims\.org$ (?:^|\.)jobnewera\.wordpress\.com$ (?:^|\.)jobso\.tv$ (?:^|\.)joinmastodon\.org$ (?:^|\.)journalchretien\.net$ (?:^|\.)journalofdemocracy\.org$ (?:^|\.)joymiihub\.com$ (?:^|\.)joyourself\.com$ (?:^|\.)jp\.hao123\.com$ (?:^|\.)jpl\.nasa\.gov$ (?:^|\.)jpopforum\.net$ (?:^|\.)jtvnw\.net$ (?:^|\.)jubushoushen\.com$ (?:^|\.)juhuaren\.com$ (?:^|\.)jukujo-club\.com$ (?:^|\.)juliepost\.com$ (?:^|\.)juliereyc\.com$ (?:^|\.)junauza\.com$ (?:^|\.)june4commemoration\.org$ (?:^|\.)junefourth-20\.net$ (?:^|\.)jungleheart\.com$ (?:^|\.)juoaa\.com$ (?:^|\.)justdied\.com$ (?:^|\.)justfreevpn\.com$ (?:^|\.)justicefortenzin\.org$ (?:^|\.)justpaste\.it$ (?:^|\.)justtristan\.com$ (?:^|\.)juyuange\.org$ (?:^|\.)juziyue\.com$ (?:^|\.)jwmusic\.org$ (?:^|\.)jyxf\.net$ (?:^|\.)k-doujin\.net$ (?:^|\.)ka-wai\.com$ (?:^|\.)kagyu\.org$ (?:^|\.)kagyu\.org\.za$ (?:^|\.)kagyumonlam\.org$ (?:^|\.)kagyunews\.com\.hk$ (?:^|\.)kagyuoffice\.org$ (?:^|\.)kagyuoffice\.org\.tw$ (?:^|\.)kaiyuan\.de$ (?:^|\.)kakao\.com$ (?:^|\.)kalachakralugano\.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$ (?:^|\.)kb\.monitorware\.com$ (?:^|\.)kba-tx\.org$ (?:^|\.)kcoolonline\.com$ (?:^|\.)kebrum\.com$ (?:^|\.)kechara\.com$ (?:^|\.)keepandshare\.com$ (?:^|\.)keezmovies\.com$ (?:^|\.)kendatire\.com$ (?:^|\.)kendincos\.net$ (?:^|\.)kenengba\.com$ (?:^|\.)keontech\.net$ (?:^|\.)kepard\.com$ (?:^|\.)kex\.com$ (?:^|\.)keycdn\.com$ (?:^|\.)khabdha\.org$ (?:^|\.)khatrimaza\.org$ (?:^|\.)khmusic\.com\.tw$ (?:^|\.)kichiku-doujinko\.com$ (?:^|\.)kik\.com$ (?:^|\.)killwall\.com$ (?:^|\.)kindleren\.com$ (?:^|\.)kineox\.free\.fr$ (?:^|\.)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$ (?:^|\.)kmuh\.org\.tw$ (?:^|\.)knowledgerush\.com$ (?:^|\.)kobo\.com$ (?:^|\.)kobobooks\.com$ (?:^|\.)kodingen\.com$ (?:^|\.)kompozer\.net$ (?:^|\.)konachan\.com$ (?:^|\.)kone\.com$ (?:^|\.)koolsolutions\.com$ (?:^|\.)koornk\.com$ (?:^|\.)koranmandarin\.com$ (?:^|\.)korenan2\.com$ (?:^|\.)ksdl\.org$ (?:^|\.)ksnews\.com\.tw$ (?:^|\.)kspcoin\.com$ (?:^|\.)ktzhk\.com$ (?:^|\.)kucoin\.com$ (?:^|\.)kui\.name$ (?:^|\.)kun\.im$ (?:^|\.)kurashsultan\.com$ (?:^|\.)kurtmunger\.com$ (?:^|\.)kusocity\.com$ (?:^|\.)kwcg\.ca$ (?:^|\.)kwongwah\.com\.my$ (?:^|\.)kxsw\.life$ (?:^|\.)kyofun\.com$ (?:^|\.)kyohk\.net$ (?:^|\.)kyoyue\.com$ (?:^|\.)kyzyhello\.com$ (?:^|\.)kzeng\.info$ (?:^|\.)la-forum\.org$ (?:^|\.)labiennale\.org$ (?:^|\.)ladbrokes\.com$ (?:^|\.)lagranepoca\.com$ (?:^|\.)lalulalu\.com$ (?:^|\.)lama\.com\.tw$ (?:^|\.)lamayeshe\.com$ (?:^|\.)lamnia\.co\.uk$ (?:^|\.)lamrim\.com$ (?:^|\.)lanterncn\.cn$ (?:^|\.)lantosfoundation\.org$ (?:^|\.)laod\.cn$ (?:^|\.)laogai\.org$ (?:^|\.)laomiu\.com$ (?:^|\.)laoyang\.info$ (?:^|\.)laptoplockdown\.com$ (?:^|\.)laqingdan\.net$ (?:^|\.)larsgeorge\.com$ (?:^|\.)lastcombat\.com$ (?:^|\.)lastfm\.es$ (?:^|\.)latelinenews\.com$ (?:^|\.)latibet\.org$ (?:^|\.)lbank\.info$ (?:^|\.)ld\.hao123img\.com$ (?:^|\.)le-vpn\.com$ (?:^|\.)leafyvpn\.net$ (?:^|\.)lecloud\.net$ (?:^|\.)leeao\.com\.cn$ (?:^|\.)lefora\.com$ (?:^|\.)left21\.hk$ (?:^|\.)legalporno\.com$ (?:^|\.)legaltech\.law\.com$ (?:^|\.)legsjapan\.com$ (?:^|\.)leirentv\.ca$ (?:^|\.)leisurecafe\.ca$ (?:^|\.)leisurepro\.com$ (?:^|\.)lematin\.ch$ (?:^|\.)lemonde\.fr$ (?:^|\.)lenwhite\.com$ (?:^|\.)lerosua\.org$ (?:^|\.)lers\.google$ (?:^|\.)lesoir\.be$ (?:^|\.)letou\.com$ (?:^|\.)letscorp\.net$ (?:^|\.)lflink\.com$ (?:^|\.)lflinkup\.com$ (?:^|\.)lflinkup\.net$ (?:^|\.)lflinkup\.org$ (?:^|\.)lhakar\.org$ (?:^|\.)lhasocialwork\.org$ (?:^|\.)liangyou\.net$ (?:^|\.)liangzhichuanmei\.com$ (?:^|\.)lianyue\.net$ (?:^|\.)liaowangxizang\.net$ (?:^|\.)liberal\.org\.hk$ (?:^|\.)libertytimes\.com\.tw$ (?:^|\.)library\.usc\.cuhk\.edu\.hk$ (?:^|\.)lidecheng\.com$ (?:^|\.)lifemiles\.com$ (?:^|\.)lighten\.org\.tw$ (?:^|\.)lighti\.me$ (?:^|\.)lightnovel\.cn$ (?:^|\.)lihkg\.com$ (?:^|\.)like\.com$ (?:^|\.)limiao\.net$ (?:^|\.)line-apps\.com$ (?:^|\.)line-scdn\.net$ (?:^|\.)line\.me$ (?:^|\.)line\.naver\.jp$ (?:^|\.)linear-abematv\.akamaized\.net$ (?:^|\.)linglingfa\.com$ (?:^|\.)lingvodics\.com$ (?:^|\.)linkedin\.com$ (?:^|\.)link-o-rama\.com$ (?:^|\.)linkideo\.com$ (?:^|\.)linkuswell\.com$ (?:^|\.)linux\.org\.hk$ (?:^|\.)linuxtoy\.org$ (?:^|\.)lionsroar\.com$ (?:^|\.)lipuman\.com$ (?:^|\.)liquidvpn\.com$ (?:^|\.)listentoyoutube\.com$ (?:^|\.)listorious\.com$ (?:^|\.)lists\.w3\.org$ (?:^|\.)liu-xiaobo\.org$ (?:^|\.)liudejun\.com$ (?:^|\.)liuhanyu\.com$ (?:^|\.)liujianshu\.com$ (?:^|\.)liuxiaobo\.net$ (?:^|\.)liuxiaotong\.com$ (?:^|\.)livecoin\.net$ (?:^|\.)livedoor\.jp$ (?:^|\.)liveleak\.com$ (?:^|\.)livestation\.com$ (?:^|\.)livestream\.com$ (?:^|\.)livevideo\.com$ (?:^|\.)livingonline\.us$ (?:^|\.)livingstream\.com$ (?:^|\.)liwangyang\.com$ (?:^|\.)lizhizhuangbi\.com$ (?:^|\.)lkcn\.net$ (?:^|\.)llss\.me$ (?:^|\.)load\.to$ (?:^|\.)lobsangwangyal\.com$ (?:^|\.)localbitcoins\.com$ (?:^|\.)localdomain\.ws$ (?:^|\.)localpresshk\.com$ (?:^|\.)lockestek\.com$ (?:^|\.)logbot\.net$ (?:^|\.)login\.target\.com$ (?:^|\.)logiqx\.com$ (?:^|\.)londonchinese\.ca$ (?:^|\.)longhair\.hk$ (?:^|\.)longmusic\.com$ (?:^|\.)longtermly\.net$ (?:^|\.)longtoes\.com$ (?:^|\.)lookpic\.com$ (?:^|\.)looktoronto\.com$ (?:^|\.)lotsawahouse\.org$ (?:^|\.)lotuslight\.org\.hk$ (?:^|\.)lotuslight\.org\.tw$ (?:^|\.)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$ (?:^|\.)luke54\.com$ (?:^|\.)luke54\.org$ (?:^|\.)lupm\.org$ (?:^|\.)lushstories\.com$ (?:^|\.)luxebc\.com$ (?:^|\.)lvhai\.org$ (?:^|\.)lvv2\.com$ (?:^|\.)lyfhk\.net$ (?:^|\.)lzmtnews\.org$ (?:^|\.)m\.hkgalden\.com$ (?:^|\.)m\.me$ (?:^|\.)m\.plixi\.com$ (?:^|\.)m\.slandr\.net$ (?:^|\.)ma\.hao123\.com$ (?:^|\.)macgamestore\.com$ (?:^|\.)macrovpn\.com$ (?:^|\.)macts\.com\.tw$ (?:^|\.)mad-ar\.ch$ (?:^|\.)madewithcode\.com$ (?:^|\.)madonna-av\.com$ (?:^|\.)madrau\.com$ (?:^|\.)madthumbs\.com$ (?:^|\.)magazines\.sina\.com\.tw$ (?:^|\.)magic-net\.info$ (?:^|\.)mahabodhi\.org$ (?:^|\.)maiio\.net$ (?:^|\.)mail-archive\.com$ (?:^|\.)maildns\.xyz$ (?:^|\.)maiplus\.com$ (?:^|\.)maizhong\.org$ (?:^|\.)makemymood\.com$ (?:^|\.)makkahnewspaper\.com$ (?:^|\.)makzhou\.warehouse333\.com$ (?:^|\.)malaysiakini\.com$ (?:^|\.)mamingzhe\.com$ (?:^|\.)manchukuo\.net$ (?:^|\.)mangafox\.com$ (?:^|\.)mangafox\.me$ (?:^|\.)maniash\.com$ (?:^|\.)manicur4ik\.ru$ (?:^|\.)mansion\.com$ (?:^|\.)mansionpoker\.com$ (?:^|\.)manta\.com$ (?:^|\.)maplew\.com$ (?:^|\.)marc\.info$ (?:^|\.)marguerite\.su$ (?:^|\.)martau\.com$ (?:^|\.)martincartoons\.com$ (?:^|\.)martsangkagyuofficial\.org$ (?:^|\.)maruta\.be$ (?:^|\.)marxist\.com$ (?:^|\.)marxist\.net$ (?:^|\.)marxists\.org$ (?:^|\.)mash\.to$ (?:^|\.)maskedip\.com$ (?:^|\.)mastodon\.cloud$ (?:^|\.)mastodon\.host$ (?:^|\.)mastodon\.social$ (?:^|\.)matainja\.com$ (?:^|\.)material\.io$ (?:^|\.)mathable\.io$ (?:^|\.)mathiew-badimon\.com$ (?:^|\.)matome-plus\.com$ (?:^|\.)matome-plus\.net$ (?:^|\.)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$ (?:^|\.)me\.youthwant\.com\.tw$ (?:^|\.)meansys\.com$ (?:^|\.)media\.nu\.nl$ (?:^|\.)media\.org\.hk$ (?:^|\.)mediachinese\.com$ (?:^|\.)mediafire\.com$ (?:^|\.)mediafreakcity\.com$ (?:^|\.)medium\.com$ (?:^|\.)meetav\.com$ (?:^|\.)meetup\.com$ (?:^|\.)mefeedia\.com$ (?:^|\.)mefound\.com$ (?:^|\.)mega\.nz$ (?:^|\.)megaproxy\.com$ (?:^|\.)megarotic\.com$ (?:^|\.)megavideo\.com$ (?:^|\.)megurineluka\.com$ (?:^|\.)meirixiaochao\.com$ (?:^|\.)meltoday\.com$ (?:^|\.)meme\.yahoo\.com$ (?:^|\.)memehk\.com$ (?:^|\.)memorybbs\.com$ (?:^|\.)memri\.org$ (?:^|\.)memrijttm\.org$ (?:^|\.)mercatox\.com$ (?:^|\.)mercyprophet\.org$ (?:^|\.)mergersandinquisitions\.org$ (?:^|\.)meridian-trust\.org$ (?:^|\.)meripet\.biz$ (?:^|\.)meripet\.com$ (?:^|\.)merit-times\.com\.tw$ (?:^|\.)meshrep\.com$ (?:^|\.)mesotw\.com$ (?:^|\.)messenger\.com$ (?:^|\.)metacafe\.com$ (?:^|\.)metart\.com$ (?:^|\.)metarthunter\.com$ (?:^|\.)meteorshowersonline\.com$ (?:^|\.)metrohk\.com\.hk$ (?:^|\.)metrolife\.ca$ (?:^|\.)metroradio\.com\.hk$ (?:^|\.)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$ (?:^|\.)mike\.cz\.cc$ (?:^|\.)mikesoltys\.com$ (?:^|\.)milph\.net$ (?:^|\.)milsurps\.com$ (?:^|\.)mimiai\.net$ (?:^|\.)mimivip\.com$ (?:^|\.)mimivv\.com$ (?:^|\.)mindrolling\.org$ (?:^|\.)minghui-a\.org$ (?:^|\.)minghui-b\.org$ (?:^|\.)minghui-school\.org$ (?:^|\.)minghui\.or\.kr$ (?:^|\.)minghui\.org$ (?:^|\.)minghuiyw\.wordpress\.com$ (?:^|\.)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$ (?:^|\.)mist\.vip$ (?:^|\.)mitao\.com\.tw$ (?:^|\.)mitbbs\.com$ (?:^|\.)mitbbsau\.com$ (?:^|\.)mixero\.com$ (?:^|\.)mixpod\.com$ (?:^|\.)mixx\.com$ (?:^|\.)mizzmona\.com$ (?:^|\.)mjib\.gov\.tw$ (?:^|\.)mjlsh\.usc\.cuhk\.edu\.hk$ (?:^|\.)mk5000\.com$ (?:^|\.)mlcool\.com$ (?:^|\.)mlzs\.work$ (?:^|\.)mm-cg\.com$ (?:^|\.)mmaaxx\.com$ (?:^|\.)mmmca\.com$ (?:^|\.)mnewstv\.com$ (?:^|\.)mo\.nightlife141\.com$ (?:^|\.)mobatek\.net$ (?:^|\.)mobile01\.com$ (?:^|\.)mobileways\.de$ (?:^|\.)moby\.to$ (?:^|\.)mobypicture\.com$ (?:^|\.)moeaic\.gov\.tw$ (?:^|\.)moeerolibrary\.com$ (?:^|\.)mofa\.gov\.tw$ (?:^|\.)mofaxiehui\.com$ (?:^|\.)mofos\.com$ (?:^|\.)mog\.com$ (?:^|\.)mohu\.club$ (?:^|\.)mohu\.ml$ (?:^|\.)mojim\.com$ (?:^|\.)mol\.gov\.tw$ (?:^|\.)molihua\.org$ (?:^|\.)mondex\.org$ (?:^|\.)money-link\.com\.tw$ (?:^|\.)moneyhome\.biz$ (?:^|\.)monitorchina\.org$ (?:^|\.)monster\.com$ (?:^|\.)moodyz\.com$ (?:^|\.)moonbbs\.com$ (?:^|\.)moonbingo\.com$ (?:^|\.)morningsun\.org$ (?:^|\.)moroneta\.com$ (?:^|\.)mos\.ru$ (?:^|\.)motherless\.com$ (?:^|\.)motiyun\.com$ (?:^|\.)motor4ik\.ru$ (?:^|\.)mousebreaker\.com$ (?:^|\.)movements\.org$ (?:^|\.)moviefap\.com$ (?:^|\.)mp3buscador\.com$ (?:^|\.)mp3ye\.eu$ (?:^|\.)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$ (?:^|\.)mswe1\.org$ (?:^|\.)mthruf\.com$ (?:^|\.)mtw\.tl$ (?:^|\.)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$ (?:^|\.)mx\.hao123\.com$ (?:^|\.)mx981\.com$ (?:^|\.)my-formosa\.com$ (?:^|\.)my-private-network\.co\.uk$ (?:^|\.)my-proxy\.com$ (?:^|\.)my\.mail\.ru$ (?:^|\.)my\.opera\.com$ (?:^|\.)my\.pcloud\.com$ (?:^|\.)my03\.com$ (?:^|\.)myactimes\.com$ (?:^|\.)myanniu\.com$ (?:^|\.)myaudiocast\.com$ (?:^|\.)myav\.com\.tw$ (?:^|\.)mybbs\.us$ (?:^|\.)mybet\.com$ (?:^|\.)myca168\.com$ (?:^|\.)mycanadanow\.com$ (?:^|\.)mychinamyhome\.com$ (?:^|\.)mychinanet\.com$ (?:^|\.)mychinanews\.com$ (?:^|\.)mychinese\.news$ (?:^|\.)mycnnews\.com$ (?:^|\.)mycould\.com$ (?:^|\.)mydad\.info$ (?:^|\.)myddns\.com$ (?:^|\.)myeasytv\.com$ (?:^|\.)myeclipseide\.com$ (?:^|\.)myforum\.com\.hk$ (?:^|\.)myforum\.com\.uk$ (?:^|\.)myfreecams\.com$ (?:^|\.)myfreepaysite\.com$ (?:^|\.)myfreshnet\.com$ (?:^|\.)myftp\.info$ (?:^|\.)myftp\.name$ (?:^|\.)myiphide\.com$ (?:^|\.)mykomica\.org$ (?:^|\.)mylftv\.com$ (?:^|\.)mymediarom\.com$ (?:^|\.)mymoe\.moe$ (?:^|\.)mymom\.info$ (?:^|\.)mymusic\.net\.tw$ (?:^|\.)mynetav\.net$ (?:^|\.)mynetav\.org$ (?:^|\.)mynumber\.org$ (?:^|\.)myparagliding\.com$ (?:^|\.)mypicture\.info$ (?:^|\.)mypop3\.net$ (?:^|\.)mypop3\.org$ (?:^|\.)mypopescu\.com$ (?:^|\.)myradio\.hk$ (?:^|\.)myreadingmanga\.info$ (?:^|\.)mysecondarydns\.com$ (?:^|\.)myshare\.url\.com\.tw$ (?:^|\.)mysinablog\.com$ (?:^|\.)mysite\.verizon\.net$ (?:^|\.)myspace\.com$ (?:^|\.)myspacecdn\.com$ (?:^|\.)mytalkbox\.com$ (?:^|\.)mytizi\.com$ (?:^|\.)mywww\.biz$ (?:^|\.)myz\.info$ (?:^|\.)naacoalition\.org$ (?:^|\.)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$ (?:^|\.)nat\.gov\.tw$ (?:^|\.)nat\.moe$ (?:^|\.)national-lottery\.co\.uk$ (?:^|\.)nationsonline\.org$ (?:^|\.)nationwide\.com$ (?:^|\.)naughtyamerica\.com$ (?:^|\.)navyfamily\.navy\.mil$ (?:^|\.)navyreserve\.navy\.mil$ (?:^|\.)naweeklytimes\.com$ (?:^|\.)nbtvpn\.com$ (?:^|\.)nccwatch\.org\.tw$ (?:^|\.)nch\.com\.tw$ (?:^|\.)ncn\.org$ (?:^|\.)nde\.de$ (?:^|\.)ndr\.de$ (?:^|\.)ned\.org$ (?:^|\.)nekoslovakia\.net$ (?:^|\.)nemesis2\.qx\.net$ (?:^|\.)neo-miracle\.com$ (?:^|\.)nepusoku\.com$ (?:^|\.)net-fits\.pro$ (?:^|\.)netbirds\.com$ (?:^|\.)netcolony\.com$ (?:^|\.)netflix\.com$ (?:^|\.)netme\.cc$ (?:^|\.)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$ (?:^|\.)newipnow\.com$ (?:^|\.)newlandmagazine\.com\.au$ (?:^|\.)newnews\.ca$ (?:^|\.)news\.cnyes\.com$ (?:^|\.)news\.hk\.msn\.com$ (?:^|\.)news\.hkpeanut\.com$ (?:^|\.)news\.msn\.com\.tw$ (?:^|\.)news\.nationalgeographic\.com$ (?:^|\.)news\.now\.com$ (?:^|\.)news\.now\.com%2fhome$ (?:^|\.)news\.omy\.sg$ (?:^|\.)news\.seehua\.com$ (?:^|\.)news\.sina\.com\.hk$ (?:^|\.)news\.sina\.com\.tw$ (?:^|\.)news\.sinchew\.com\.my$ (?:^|\.)news\.singtao\.ca$ (?:^|\.)news\.tvb\.com$ (?:^|\.)news\.tvbs\.com\.tw$ (?:^|\.)news\.yahoo\.com$ (?:^|\.)news100\.com\.tw$ (?:^|\.)newsancai\.com$ (?:^|\.)newschinacomment\.org$ (?:^|\.)newscn\.org$ (?:^|\.)newsdetox\.ca$ (?:^|\.)newsdh\.com$ (?:^|\.)newspeak\.cc$ (?:^|\.)newstamago\.com$ (?:^|\.)newstapa\.org$ (?:^|\.)newstarnet\.com$ (?:^|\.)newtaiwan\.com\.tw$ (?:^|\.)newtalk\.tw$ (?:^|\.)newyorktimes\.com$ (?:^|\.)nexon\.com$ (?:^|\.)next11\.co\.jp$ (?:^|\.)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$ (?:^|\.)nga\.mil$ (?:^|\.)ngensis\.com$ (?:^|\.)nhentai\.net$ (?:^|\.)nhi\.gov\.tw$ (?:^|\.)nhk-ondemand\.jp$ (?:^|\.)nic\.cz\.cc$ (?:^|\.)nic\.google$ (?:^|\.)nic\.gov$ (?:^|\.)nicovideo\.jp$ (?:^|\.)nighost\.org$ (?:^|\.)nikkei\.com$ (?:^|\.)ninecommentaries\.com$ (?:^|\.)ninjacloak\.com$ (?:^|\.)ninjaproxy\.ninja$ (?:^|\.)nintendium\.com$ (?:^|\.)ninth\.biz$ (?:^|\.)niu\.moe$ (?:^|\.)niusnews\.com$ (?:^|\.)njactb\.org$ (?:^|\.)njuice\.com$ (?:^|\.)nko\.navy\.mil$ (?:^|\.)nlfreevpn\.com$ (?:^|\.)no-ip\.org$ (?:^|\.)nobel\.se$ (?:^|\.)nobelprize\.org$ (?:^|\.)nobodycanstop\.us$ (?:^|\.)nofile\.io$ (?:^|\.)nokogiri\.org$ (?:^|\.)nokola\.com$ (?:^|\.)noodlevpn\.com$ (?:^|\.)norbulingka\.org$ (?:^|\.)nordstrom\.com$ (?:^|\.)nordstromimage\.com$ (?:^|\.)nordstromrack\.com$ (?:^|\.)nordvpn\.com$ (?:^|\.)notify\.dropboxapi\.com$ (?:^|\.)nottinghampost\.com$ (?:^|\.)novelasia\.com$ (?:^|\.)now\.com$ (?:^|\.)now\.im$ (?:^|\.)nownews\.com$ (?:^|\.)nowtorrents\.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\.cz$ (?:^|\.)ntdtv\.org$ (?:^|\.)ntdtv\.ru$ (?:^|\.)ntdtvla\.com$ (?:^|\.)ntrfun\.com$ (?:^|\.)ntsna\.gov\.tw$ (?:^|\.)nubiles\.net$ (?:^|\.)nuexpo\.com$ (?:^|\.)nukistream\.com$ (?:^|\.)nurgo-software\.com$ (?:^|\.)nusatrip\.com$ (?:^|\.)nutaku\.net$ (?:^|\.)nuuvem\.com$ (?:^|\.)nuvid\.com$ (?:^|\.)nuzcom\.com$ (?:^|\.)nvdst\.com$ (?:^|\.)nvquan\.org$ (?:^|\.)nvtongzhisheng\.org$ (?:^|\.)nwtca\.org$ (?:^|\.)ny\.stgloballink\.com$ (?:^|\.)ny\.visiontimes\.com$ (?:^|\.)nyaa\.eu$ (?:^|\.)nydus\.ca$ (?:^|\.)nylon-angel\.com$ (?:^|\.)nylonstockingsonline\.com$ (?:^|\.)nyt\.com$ (?:^|\.)nytchina\.com$ (?:^|\.)nytcn\.me$ (?:^|\.)nytco\.com$ (?:^|\.)nyti\.ms$ (?:^|\.)nytimes\.com$ (?:^|\.)nytimes\.map\.fastly\.net$ (?:^|\.)nytimg\.com$ (?:^|\.)nytstyle\.com$ (?:^|\.)nzchinese\.com$ (?:^|\.)nzchinese\.net\.nz$ (?:^|\.)observechina\.net$ (?:^|\.)obutu\.com$ (?:^|\.)ocaspro\.com$ (?:^|\.)occupytiananmen\.com$ (?:^|\.)oclp\.hk$ (?:^|\.)ocreampies\.com$ (?:^|\.)ocry\.com$ (?:^|\.)october-review\.org$ (?:^|\.)oculus\.com$ (?:^|\.)oculuscdn\.com$ (?:^|\.)oex\.com$ (?:^|\.)offbeatchina\.com$ (?:^|\.)officeoftibet\.com$ (?:^|\.)ofile\.org$ (?:^|\.)ogaoga\.org$ (?:^|\.)ogate\.org$ (?:^|\.)oikos\.com\.tw$ (?:^|\.)oiktv\.com$ (?:^|\.)oizoblog\.com$ (?:^|\.)ok\.ru$ (?:^|\.)okayfreedom\.com$ (?:^|\.)okex\.com$ (?:^|\.)okk\.tw$ (?:^|\.)old-cat\.net$ (?:^|\.)old\.honeynet\.org$ (?:^|\.)old\.nabble\.com$ (?:^|\.)olumpo\.com$ (?:^|\.)olympicwatch\.org$ (?:^|\.)omgili\.com$ (?:^|\.)omni7\.jp$ (?:^|\.)omnitalk\.com$ (?:^|\.)omnitalk\.org$ (?:^|\.)on\.cc$ (?:^|\.)on2\.com$ (?:^|\.)onapp\.com$ (?:^|\.)onedrive\.live\.com$ (?:^|\.)onedumb\.com$ (?:^|\.)onejav\.com$ (?:^|\.)onion\.city$ (?:^|\.)online\.recoveryversion\.org$ (?:^|\.)onlinecha\.com$ (?:^|\.)onlineyoutube\.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$ (?:^|\.)openvpn\.net$ (?:^|\.)openvpn\.org$ (?:^|\.)openwebster\.com$ (?:^|\.)openwrt\.org\.cn$ (?:^|\.)opml\.radiotime\.com$ (?:^|\.)opus-gaming\.com$ (?:^|\.)organcare\.org\.tw$ (?:^|\.)organharvestinvestigation\.net$ (?:^|\.)organiccrap\.com$ (?:^|\.)orgasm\.com$ (?:^|\.)orgfree\.com$ (?:^|\.)orient-doll\.com$ (?:^|\.)orientaldaily\.com\.my$ (?:^|\.)orn\.jp$ (?:^|\.)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$ (?:^|\.)overplay\.net$ (?:^|\.)oversea\.istarshine\.com$ (?:^|\.)ow\.ly$ (?:^|\.)owl\.li$ (?:^|\.)oyax\.com$ (?:^|\.)oyghan\.com$ (?:^|\.)ozchinese\.com$ (?:^|\.)ozvoice\.org$ (?:^|\.)ozxw\.com$ (?:^|\.)ozyoyo\.com$ (?:^|\.)pachosting\.com$ (?:^|\.)pacificpoker\.com$ (?:^|\.)packages\.debian\.org$ (?:^|\.)packetix\.net$ (?:^|\.)pacopacomama\.com$ (?:^|\.)padmanet\.com$ (?:^|\.)page\.bid\.yahoo\.com$ (?:^|\.)page2rss\.com$ (?:^|\.)pagodabox\.com$ (?:^|\.)palacemoon\.com$ (?:^|\.)paldengyal\.com$ (?:^|\.)paljorpublications\.com$ (?:^|\.)paltalk\.com$ (?:^|\.)panamapapers\.sueddeutsche\.de$ (?:^|\.)pandapow\.co$ (?:^|\.)pandapow\.net$ (?:^|\.)pandavpn-jp\.com$ (?:^|\.)pandora\.com$ (?:^|\.)pandora\.tv$ (?:^|\.)panluan\.net$ (?:^|\.)panoramio\.com$ (?:^|\.)pao-pao\.net$ (?:^|\.)paper\.li$ (?:^|\.)paperb\.us$ (?:^|\.)paradisehill\.cc$ (?:^|\.)paradisepoker\.com$ (?:^|\.)parkansky\.com$ (?:^|\.)partycasino\.com$ (?:^|\.)partypoker\.com$ (?:^|\.)passion\.com$ (?:^|\.)passiontimes\.hk$ (?:^|\.)paste\.ee$ (?:^|\.)pastebin\.com$ (?:^|\.)pastie\.org$ (?:^|\.)pbs\.org$ (?:^|\.)pbwiki\.com$ (?:^|\.)pbworks\.com$ (?:^|\.)pbxes\.com$ (?:^|\.)pbxes\.org$ (?:^|\.)pcanywhere\.net$ (?:^|\.)pcc\.gov\.tw$ (?:^|\.)pcdvd\.com\.tw$ (?:^|\.)pchome\.com\.tw$ (?:^|\.)pcij\.org$ (?:^|\.)pcstore\.com\.tw$ (?:^|\.)pct\.org\.tw$ (?:^|\.)pdetails\.com$ (?:^|\.)pdproxy\.com$ (?:^|\.)pds\.nasa\.gov$ (?:^|\.)peace\.ca$ (?:^|\.)peacefire\.org$ (?:^|\.)peacehall\.com$ (?:^|\.)pearlher\.org$ (?:^|\.)peeasian\.com$ (?:^|\.)pekingduck\.org$ (?:^|\.)pemulihan\.or\.id$ (?:^|\.)pen\.io$ (?:^|\.)penchinese\.com$ (?:^|\.)penchinese\.net$ (?:^|\.)pengyulong\.com$ (?:^|\.)penisbot\.com$ (?:^|\.)penthouse\.com$ (?:^|\.)pentoy\.hk$ (?:^|\.)peoplebookcafe\.com$ (?:^|\.)peoplenews\.tw$ (?:^|\.)peopo\.org$ (?:^|\.)percy\.in$ (?:^|\.)perfectgirls\.net$ (?:^|\.)perfectvpn\.net$ (?:^|\.)periscope\.tv$ (?:^|\.)persecutionblog\.com$ (?:^|\.)persiankitty\.com$ (?:^|\.)pfd\.org\.hk$ (?:^|\.)phapluan\.org$ (?:^|\.)phayul\.com$ (?:^|\.)philborges\.com$ (?:^|\.)philly\.com$ (?:^|\.)phmsociety\.org$ (?:^|\.)phncdn\.com$ (?:^|\.)phobos\.apple\.com$ (?:^|\.)phosphation13\.rssing\.com$ (?:^|\.)photodharma\.net$ (?:^|\.)photofocus\.com$ (?:^|\.)phuquocservices\.com$ (?:^|\.)picacomic\.com$ (?:^|\.)picacomiccn\.com$ (?:^|\.)picasaweb\.com$ (?:^|\.)picidae\.net$ (?:^|\.)pictures\.playboy\.com$ (?:^|\.)picturesocial\.com$ (?:^|\.)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\.de$ (?:^|\.)pinterest\.dk$ (?:^|\.)pinterest\.fr$ (?:^|\.)pinterest\.jp$ (?:^|\.)pinterest\.nl$ (?:^|\.)pinterest\.se$ (?:^|\.)pioneer-worker\.forums-free\.com$ (?:^|\.)pipii\.tv$ (?:^|\.)piposay\.com$ (?:^|\.)piraattilahti\.org$ (?:^|\.)piring\.com$ (?:^|\.)pixelqi\.com$ (?:^|\.)pixiv\.net$ (?:^|\.)pixnet\.net$ (?:^|\.)pk\.com$ (?:^|\.)pki\.goog$ (?:^|\.)placemix\.com$ (?:^|\.)playboy\.com$ (?:^|\.)playboyplus\.com$ (?:^|\.)player\.fm$ (?:^|\.)playno1\.com$ (?:^|\.)playpcesor\.com$ (?:^|\.)plays\.com\.tw$ (?:^|\.)plm\.org\.hk$ (?:^|\.)plunder\.com$ (?:^|\.)plurk\.com$ (?:^|\.)plus\.codes$ (?:^|\.)plus28\.com$ (?:^|\.)plusbb\.com$ (?:^|\.)pmatehunter\.com$ (?:^|\.)pmates\.com$ (?:^|\.)po2b\.com$ (?:^|\.)pobieramy\.top$ (?:^|\.)podictionary\.com$ (?:^|\.)pokerstars\.com$ (?:^|\.)pokerstars\.net$ (?:^|\.)politicalchina\.org$ (?:^|\.)politicalconsultation\.org$ (?:^|\.)politiscales\.net$ (?:^|\.)poloniex\.com$ (?:^|\.)polymer-project\.org$ (?:^|\.)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$ (?:^|\.)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$ (?:^|\.)prayforchina\.net$ (?:^|\.)premeforwindows7\.com$ (?:^|\.)premproxy\.com$ (?:^|\.)presentationzen\.com$ (?:^|\.)presidentlee\.tw$ (?:^|\.)prestige-av\.com$ (?:^|\.)pride\.google$ (?:^|\.)prism-break\.org$ (?:^|\.)prisoner-state-secret-journal-premier$ (?:^|\.)prisoneralert\.com$ (?:^|\.)pritunl\.com$ (?:^|\.)privacybox\.de$ (?:^|\.)private\.com$ (?:^|\.)privateinternetaccess\.com$ (?:^|\.)privatepaste\.com$ (?:^|\.)privatetunnel\.com$ (?:^|\.)privatevpn\.com$ (?:^|\.)procopytips\.com$ (?:^|\.)prosiben\.de$ (?:^|\.)protonvpn\.com$ (?:^|\.)provideocoalition\.com$ (?:^|\.)provpnaccounts\.com$ (?:^|\.)proxfree\.com$ (?:^|\.)proxifier\.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$ (?:^|\.)psiphon\.ca$ (?:^|\.)psiphon\.civisec\.org$ (?:^|\.)psiphon3\.com$ (?:^|\.)psiphontoday\.com$ (?:^|\.)pts\.org\.tw$ (?:^|\.)ptt\.cc$ (?:^|\.)pttvan\.org$ (?:^|\.)pubu\.com\.tw$ (?:^|\.)puffinbrowser\.com$ (?:^|\.)puffstore\.com$ (?:^|\.)pullfolio\.com$ (?:^|\.)pulse\.yahoo\.com$ (?:^|\.)punyu\.com$ (?:^|\.)pure18\.com$ (?:^|\.)pureconcepts\.net$ (?:^|\.)pureinsight\.org$ (?:^|\.)purepdf\.com$ (?:^|\.)purevpn\.com$ (?:^|\.)purplelotus\.org$ (?:^|\.)pursuestar\.com$ (?:^|\.)pushchinawall\.com$ (?:^|\.)pussyspace\.com$ (?:^|\.)putihome\.org$ (?:^|\.)putlocker\.com$ (?:^|\.)putty\.org$ (?:^|\.)puuko\.com$ (?:^|\.)pwned\.com$ (?:^|\.)python\.com$ (?:^|\.)python\.com\.tw$ (?:^|\.)pythonhackers\.com$ (?:^|\.)pytorch\.org$ (?:^|\.)q%3dfreedom$ (?:^|\.)q%3dtriangle$ (?:^|\.)q=freedom$ (?:^|\.)q=triangle$ (?:^|\.)qanote\.com$ (?:^|\.)qgirl\.com\.tw$ (?:^|\.)qhigh\.com$ (?:^|\.)qi-gong\.me$ (?:^|\.)qiandao\.today$ (?:^|\.)qiangyou\.org$ (?:^|\.)qidian\.ca$ (?:^|\.)qienkuen\.org$ (?:^|\.)qiwen\.lu$ (?:^|\.)qixianglu\.cn$ (?:^|\.)qkshare\.com$ (?:^|\.)qoos\.com$ (?:^|\.)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$ (?:^|\.)qxbbs\.org$ (?:^|\.)r18\.com$ (?:^|\.)ra\.gg$ (?:^|\.)radicalparty\.org$ (?:^|\.)radiko\.jp$ (?:^|\.)radioaustralia\.net\.au$ (?:^|\.)radiohilight\.net$ (?:^|\.)radiovaticana\.org$ (?:^|\.)radiovncr\.com$ (?:^|\.)rael\.org$ (?:^|\.)raggedbanner\.com$ (?:^|\.)raidcall\.com\.tw$ (?:^|\.)raidtalk\.com\.tw$ (?:^|\.)rainbowplan\.org$ (?:^|\.)raizoji\.or\.jp$ (?:^|\.)ramcity\.com\.au$ (?:^|\.)rangwang\.biz$ (?:^|\.)rangzen\.com$ (?:^|\.)rangzen\.net$ (?:^|\.)rangzen\.org$ (?:^|\.)ranyunfei\.com$ (?:^|\.)rapbull\.net$ (?:^|\.)rapidgator\.net$ (?:^|\.)rapidmoviez\.com$ (?:^|\.)rapidvpn\.com$ (?:^|\.)raremovie\.cc$ (?:^|\.)raremovie\.net$ (?:^|\.)rawgit\.com$ (?:^|\.)rawgithub\.com$ (?:^|\.)razyboard\.com$ (?:^|\.)rcam\.target\.com$ (?:^|\.)rcinet\.ca$ (?:^|\.)rconversation\.blogs\.com$ (?:^|\.)rd\.com$ (?:^|\.)rdio\.com$ (?:^|\.)read01\.com$ (?:^|\.)read100\.com$ (?:^|\.)readingtimes\.com\.tw$ (?:^|\.)readmoo\.com$ (?:^|\.)readydown\.com$ (?:^|\.)realcourage\.org$ (?:^|\.)realforum\.zkiz\.com$ (?:^|\.)realitykings\.com$ (?:^|\.)realraptalk\.com$ (?:^|\.)realsexpass\.com$ (?:^|\.)rebatesrule\.net$ (?:^|\.)recordhistory\.org$ (?:^|\.)recovery\.org\.tw$ (?:^|\.)recoveryversion\.com\.tw$ (?:^|\.)red-lang\.org$ (?:^|\.)redballoonsolidarity\.org$ (?:^|\.)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$ (?:^|\.)religioustolerance\.org$ (?:^|\.)remembering_tiananmen_20_years$ (?:^|\.)renminbao\.com$ (?:^|\.)renyurenquan\.org$ (?:^|\.)research\.jmsc\.hku\.hk$ (?:^|\.)resilio\.com$ (?:^|\.)retweeteffect\.com$ (?:^|\.)retweetist\.com$ (?:^|\.)retweetrank\.com$ (?:^|\.)reuters\.com$ (?:^|\.)reutersmedia\.net$ (?:^|\.)revleft\.com$ (?:^|\.)revver\.com$ (?:^|\.)rfa\.org$ (?:^|\.)rfachina\.com$ (?:^|\.)rfalive1\.akacast\.akamaistream\.net$ (?:^|\.)rfamobile\.org$ (?:^|\.)rfaweb\.org$ (?:^|\.)rferl\.org$ (?:^|\.)rfi\.fr$ (?:^|\.)rfi\.my$ (?:^|\.)rg3\.github\.io$ (?:^|\.)rightbtc\.com$ (?:^|\.)rigpa\.org$ (?:^|\.)riku\.me$ (?:^|\.)rileyguide\.com$ (?:^|\.)ritouki\.jp$ (?:^|\.)ritter\.vg$ (?:^|\.)rixcloud\.com$ (?:^|\.)rixcloud\.us$ (?:^|\.)rlwlw\.com$ (?:^|\.)rmjdw\.com$ (?:^|\.)rmjdw132\.info$ (?:^|\.)roadshow\.hk$ (?:^|\.)roboforex\.com$ (?:^|\.)robustnessiskey\.com$ (?:^|\.)rocket-inc\.net$ (?:^|\.)rocksdb\.org$ (?:^|\.)rojo\.com$ (?:^|\.)rolia\.net$ (?:^|\.)ronjoneswriter\.com$ (?:^|\.)roodo\.com$ (?:^|\.)rosechina\.net$ (?:^|\.)rotten\.com$ (?:^|\.)rsdlmonitor\.com$ (?:^|\.)rsf-chinese\.org$ (?:^|\.)rsf\.org$ (?:^|\.)rsgamen\.org$ (?:^|\.)rssmeme\.com$ (?:^|\.)rtalabel\.org$ (?:^|\.)rthk\.hk$ (?:^|\.)rthk\.org\.hk$ (?:^|\.)rthklive2-lh\.akamaihd\.net$ (?:^|\.)rti\.org\.tw$ (?:^|\.)rtycminnesota\.org$ (?:^|\.)ruanyifeng\.com$ (?:^|\.)rukor\.org$ (?:^|\.)runbtx\.com$ (?:^|\.)rushbee\.com$ (?:^|\.)ruten\.com\.tw$ (?:^|\.)rutube\.ru$ (?:^|\.)ruyiseek\.com$ (?:^|\.)rxhj\.net$ (?:^|\.)s-cute\.com$ (?:^|\.)s-dragon\.org$ (?:^|\.)s1\.nudezz\.com$ (?:^|\.)s1heng\.com$ (?:^|\.)s1s1s1\.com$ (?:^|\.)s3-ap-northeast-1\.amazonaws\.com$ (?:^|\.)s3-ap-southeast-2\.amazonaws\.com$ (?:^|\.)s8forum\.com$ (?:^|\.)sa\.hao123\.com$ (?:^|\.)sacks\.com$ (?:^|\.)sacom\.hk$ (?:^|\.)sadistic-v\.com$ (?:^|\.)sadpanda\.us$ (?:^|\.)safervpn\.com$ (?:^|\.)safety\.google$ (?:^|\.)saintyculture\.com$ (?:^|\.)saiq\.me$ (?:^|\.)sakuralive\.com$ (?:^|\.)sakya\.org$ (?:^|\.)salvation\.org\.hk$ (?:^|\.)samair\.ru$ (?:^|\.)sambhota\.org$ (?:^|\.)sanmin\.com\.tw$ (?:^|\.)sapikachu\.net$ (?:^|\.)saveliuxiaobo\.com$ (?:^|\.)savemedia\.com$ (?:^|\.)savethedate\.foo$ (?:^|\.)savethesounds\.info$ (?:^|\.)savetibet\.de$ (?:^|\.)savetibet\.fr$ (?:^|\.)savetibet\.nl$ (?:^|\.)savetibet\.org$ (?:^|\.)savetibet\.ru$ (?:^|\.)savetibetstore\.org$ (?:^|\.)savevid\.com$ (?:^|\.)say2\.info$ (?:^|\.)sbme\.me$ (?:^|\.)sbs\.com\.au$ (?:^|\.)scache\.vzw\.com$ (?:^|\.)scache1\.vzw\.com$ (?:^|\.)scache2\.vzw\.com$ (?:^|\.)scasino\.com$ (?:^|\.)schema\.org$ (?:^|\.)sciencenets\.com$ (?:^|\.)scieron\.com$ (?:^|\.)scmp\.com$ (?:^|\.)scmpchinese\.com$ (?:^|\.)scramble\.io$ (?:^|\.)scribd\.com$ (?:^|\.)scriptspot\.com$ (?:^|\.)seapuff\.com$ (?:^|\.)search$ (?:^|\.)search\.aol\.com$ (?:^|\.)search\.yahoo\.co\.jp$ (?:^|\.)search\.yahoo\.com$ (?:^|\.)searchtruth\.com$ (?:^|\.)secretchina\.com$ (?:^|\.)secretgarden\.no$ (?:^|\.)secretsline\.biz$ (?:^|\.)secure\.hustler\.com$ (?:^|\.)secure\.logmein\.com$ (?:^|\.)secure\.raxcdn\.com$ (?:^|\.)securetunnel\.com$ (?:^|\.)securityinabox\.org$ (?:^|\.)securitykiss\.com$ (?:^|\.)seed4\.me$ (?:^|\.)seesmic\.com$ (?:^|\.)seevpn\.com$ (?:^|\.)seezone\.net$ (?:^|\.)sejie\.com$ (?:^|\.)sellclassics\.com$ (?:^|\.)sendsmtp\.com$ (?:^|\.)sendspace\.com$ (?:^|\.)servehttp\.com$ (?:^|\.)serveuser\.com$ (?:^|\.)serveusers\.com$ (?:^|\.)sesawe\.net$ (?:^|\.)sesawe\.org$ (?:^|\.)sethwklein\.net$ (?:^|\.)setn\.com$ (?:^|\.)settv\.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$ (?:^|\.)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$ (?:^|\.)shambalapost\.com$ (?:^|\.)shambhalasun\.com$ (?:^|\.)shangfang\.org$ (?:^|\.)shapeservices\.com$ (?:^|\.)share\.america\.gov$ (?:^|\.)share\.dmhy\.org$ (?:^|\.)share\.ovi\.com$ (?:^|\.)share\.youthwant\.com\.tw$ (?:^|\.)sharebee\.com$ (?:^|\.)sharecool\.org$ (?:^|\.)sharpdaily\.com\.hk$ (?:^|\.)sharpdaily\.hk$ (?:^|\.)sharpdaily\.tw$ (?:^|\.)shat-tibet\.com$ (?:^|\.)shattered\.io$ (?:^|\.)sheikyermami\.com$ (?:^|\.)shellfire\.de$ (?:^|\.)shenshou\.org$ (?:^|\.)shenyun\.com$ (?:^|\.)shenyunperformingarts\.org$ (?:^|\.)shenzhoufilm\.com$ (?:^|\.)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$ (?:^|\.)shopping\.com$ (?:^|\.)showbiz\.omy\.sg$ (?:^|\.)showhaotu\.com$ (?:^|\.)showtime\.jp$ (?:^|\.)shutterstock\.com$ (?:^|\.)shwchurch\.org$ (?:^|\.)shwchurch3\.com$ (?:^|\.)siddharthasintent\.org$ (?:^|\.)sidelinesnews\.com$ (?:^|\.)sidelinessportseatery\.com$ (?:^|\.)sierrafriendsoftibet\.org$ (?:^|\.)sijihuisuo\.club$ (?:^|\.)sijihuisuo\.com$ (?:^|\.)sikaozhe1997\.github\.io$ (?:^|\.)silkbook\.com$ (?:^|\.)simbolostwitter\.com$ (?:^|\.)simplecd\.org$ (?:^|\.)simpleproductivityblog\.com$ (?:^|\.)sinchew\.com\.my$ (?:^|\.)singaporepools\.com\.sg$ (?:^|\.)singfortibet\.com$ (?:^|\.)singpao\.com\.hk$ (?:^|\.)singtao\.com$ (?:^|\.)singtaousa\.com$ (?:^|\.)sino-monthly\.com$ (?:^|\.)sinoants\.com$ (?:^|\.)sinocast\.com$ (?:^|\.)sinocism\.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$ (?:^|\.)siteks\.uk\.to$ (?:^|\.)sitemaps\.org$ (?:^|\.)six-degrees\.io$ (?:^|\.)sixth\.biz$ (?:^|\.)sjrt\.org$ (?:^|\.)sjum\.cn$ (?:^|\.)sketchappsources\.com$ (?:^|\.)skimtube\.com$ (?:^|\.)skybet\.com$ (?:^|\.)skyking\.com\.tw$ (?:^|\.)skyvegas\.com$ (?:^|\.)skyxvpn\.com$ (?:^|\.)slacker\.com$ (?:^|\.)slaytizle\.com$ (?:^|\.)sleazydream\.com$ (?:^|\.)slheng\.com$ (?:^|\.)slickvpn\.com$ (?:^|\.)slideshare\.net$ (?:^|\.)slinkset\.com$ (?:^|\.)slutload\.com$ (?:^|\.)slutmoonbeam\.com$ (?:^|\.)slyip\.com$ (?:^|\.)slyip\.net$ (?:^|\.)sm-miracle\.com$ (?:^|\.)smartdnsproxy\.com$ (?:^|\.)smarthide\.com$ (?:^|\.)smchbooks\.com$ (?:^|\.)smh\.com\.au$ (?:^|\.)smhric\.org$ (?:^|\.)smith\.edu$ (?:^|\.)smyxy\.org$ (?:^|\.)snapchat\.com$ (?:^|\.)snaptu\.com$ (?:^|\.)sndcdn\.com$ (?:^|\.)sneakme\.net$ (?:^|\.)snowlionpub\.com$ (?:^|\.)sobees\.com$ (?:^|\.)soc\.mil$ (?:^|\.)socialwhale\.com$ (?:^|\.)socks-proxy\.net$ (?:^|\.)sockscap64\.com$ (?:^|\.)sockslist\.net$ (?:^|\.)socrec\.org$ (?:^|\.)sod\.co\.jp$ (?:^|\.)sodatea\.github\.io$ (?:^|\.)softether-download\.com$ (?:^|\.)softether\.co\.jp$ (?:^|\.)softether\.org$ (?:^|\.)softfamous\.com$ (?:^|\.)softsmirror\.cf$ (?:^|\.)softwarebychuck\.com$ (?:^|\.)softwaredownload\.gitbooks\.io$ (?:^|\.)sogclub\.com$ (?:^|\.)sogrady\.me$ (?:^|\.)soh\.tw$ (?:^|\.)sohcradio\.com$ (?:^|\.)sohfrance\.org$ (?:^|\.)sokamonline\.com$ (?:^|\.)sokmil\.com$ (?:^|\.)solarsystem\.nasa\.gov$ (?:^|\.)solidaritetibet\.org$ (?:^|\.)solidfiles\.com$ (?:^|\.)somee\.com$ (?:^|\.)songjianjun\.com$ (?:^|\.)sonicbbs\.cc$ (?:^|\.)sonidodelaesperanza\.org$ (?:^|\.)sopcast\.com$ (?:^|\.)sopcast\.org$ (?:^|\.)sorazone\.net$ (?:^|\.)sorting-algorithms\.com$ (?:^|\.)sos\.org$ (?:^|\.)sosreader\.com$ (?:^|\.)sostibet\.org$ (?:^|\.)soubory\.com$ (?:^|\.)soul-plus\.net$ (?:^|\.)soulcaliburhentai\.net$ (?:^|\.)soumo\.info$ (?:^|\.)soundcloud\.com$ (?:^|\.)soundofhope\.kr$ (?:^|\.)soundofhope\.org$ (?:^|\.)soup\.io$ (?:^|\.)soupofmedia\.com$ (?:^|\.)sourceforge\.net$ (?:^|\.)sourcewadio\.com$ (?:^|\.)southnews\.com\.tw$ (?:^|\.)sowers\.org\.hk$ (?:^|\.)soylentnews\.org$ (?:^|\.)spaces\.hightail\.com$ (?:^|\.)spankbang\.com$ (?:^|\.)spankingtube\.com$ (?:^|\.)spankwire\.com$ (?:^|\.)spb\.com$ (?:^|\.)speakerdeck\.com$ (?:^|\.)specxinzl\.jigsy\.com$ (?:^|\.)speedify\.com$ (?:^|\.)spem\.at$ (?:^|\.)spencertipping\.com$ (?:^|\.)spendee\.com$ (?:^|\.)spicevpn\.com$ (?:^|\.)spideroak\.com$ (?:^|\.)spike\.com$ (?:^|\.)sports\.williamhill\.com$ (?:^|\.)spotflux\.com$ (?:^|\.)spotify\.com$ (?:^|\.)spreadshirt\.es$ (?:^|\.)spring4u\.info$ (?:^|\.)springboardplatform\.com$ (?:^|\.)sprite\.org$ (?:^|\.)sproutcore\.com$ (?:^|\.)sproxy\.info$ (?:^|\.)squirly\.info$ (?:^|\.)srcf\.ucam\.org$ (?:^|\.)srocket\.us$ (?:^|\.)ss-link\.com$ (?:^|\.)ss\.carryzhou\.com$ (?:^|\.)ss\.levyhsu\.com$ (?:^|\.)ss\.pythonic\.life$ (?:^|\.)ss7\.vzw\.com$ (?:^|\.)ssglobal\.co$ (?:^|\.)ssglobal\.me$ (?:^|\.)ssh91\.com$ (?:^|\.)ssl\.webpack\.de$ (?:^|\.)ssl443\.org$ (?:^|\.)sspanel\.net$ (?:^|\.)sspro\.ml$ (?:^|\.)ssr\.tools$ (?:^|\.)ssrshare\.com$ (?:^|\.)sss\.camp$ (?:^|\.)sstmlt\.moe$ (?:^|\.)sstmlt\.net$ (?:^|\.)stackoverflow\.com$ (?:^|\.)stage64\.hk$ (?:^|\.)standupfortibet\.org$ (?:^|\.)stanford\.edu$ (?:^|\.)starfishfx\.com$ (?:^|\.)starp2p\.com$ (?:^|\.)startpage\.com$ (?:^|\.)startuplivingchina\.com$ (?:^|\.)stat\.gov\.tw$ (?:^|\.)static-economist\.com$ (?:^|\.)static\.comico\.tw$ (?:^|\.)static\.shemalez\.com$ (?:^|\.)static01\.nyt\.com$ (?:^|\.)staticflickr\.com$ (?:^|\.)statueofdemocracy\.org$ (?:^|\.)stc\.com\.sa$ (?:^|\.)steamcommunity\.com$ (?:^|\.)steel-storm\.com$ (?:^|\.)steemit\.com$ (?:^|\.)steganos\.com$ (?:^|\.)steganos\.net$ (?:^|\.)stepchina\.com$ (?:^|\.)stephaniered\.com$ (?:^|\.)sthoo\.com$ (?:^|\.)stickam\.com$ (?:^|\.)stickeraction\.com$ (?:^|\.)stileproject\.com$ (?:^|\.)sto\.cc$ (?:^|\.)stoporganharvesting\.org$ (?:^|\.)stoptibetcrisis\.net$ (?:^|\.)storagenewsletter\.com$ (?:^|\.)store\.steampowered\.com$ (?:^|\.)stories\.google$ (?:^|\.)storify\.com$ (?:^|\.)storm\.mg$ (?:^|\.)stormmediagroup\.com$ (?:^|\.)stoweboyd\.com$ (?:^|\.)stranabg\.com$ (?:^|\.)straplessdildo\.com$ (?:^|\.)streamingthe\.net$ (?:^|\.)streema\.com$ (?:^|\.)strikingly\.com$ (?:^|\.)strongvpn\.com$ (?:^|\.)strongwindpress\.com$ (?:^|\.)student\.tw$ (?:^|\.)studentsforafreetibet\.org$ (?:^|\.)stumbleupon\.com$ (?:^|\.)stupidvideos\.com$ (?:^|\.)subacme\.rerouted\.org$ (?:^|\.)successfn\.com$ (?:^|\.)sugarsync\.com$ (?:^|\.)sugobbs\.com$ (?:^|\.)sugumiru18\.com$ (?:^|\.)suissl\.com$ (?:^|\.)sujiatun\.wordpress\.com$ (?:^|\.)sukebei\.nyaa\.si$ (?:^|\.)sulian\.me$ (?:^|\.)summify\.com$ (?:^|\.)sumrando\.com$ (?:^|\.)sun1911\.com$ (?:^|\.)sunmedia\.ca$ (?:^|\.)sunporno\.com$ (?:^|\.)sunskyforum\.com$ (?:^|\.)sunta\.com\.tw$ (?:^|\.)sunvpn\.net$ (?:^|\.)sunwinism\.joinbbs\.net$ (?:^|\.)suoluo\.org$ (?:^|\.)supchina\.com$ (?:^|\.)superfreevpn\.com$ (?:^|\.)superokayama\.com$ (?:^|\.)superpages\.com$ (?:^|\.)supervpn\.net$ (?:^|\.)superzooi\.com$ (?:^|\.)suppig\.net$ (?:^|\.)suprememastertv\.com$ (?:^|\.)surfeasy\.com$ (?:^|\.)surfeasy\.com\.au$ (?:^|\.)suroot\.com$ (?:^|\.)surrenderat20\.net$ (?:^|\.)sustainability\.google$ (?:^|\.)suyangg\.com$ (?:^|\.)svsfx\.com$ (?:^|\.)swagbucks\.com$ (?:^|\.)swissinfo\.ch$ (?:^|\.)swissvpn\.net$ (?:^|\.)switch1\.jp$ (?:^|\.)switchvpn\.net$ (?:^|\.)sydneytoday\.com$ (?:^|\.)sylfoundation\.org$ (?:^|\.)syncback\.com$ (?:^|\.)synergyse\.com$ (?:^|\.)sysresccd\.org$ (?:^|\.)sytes\.net$ (?:^|\.)szbbs\.net$ (?:^|\.)szetowah\.org\.hk$ (?:^|\.)t-g\.com$ (?:^|\.)t\.co$ (?:^|\.)t\.me$ (?:^|\.)t\.orzdream\.com$ (?:^|\.)t35\.com$ (?:^|\.)t66y\.com$ (?:^|\.)taa-usa\.org$ (?:^|\.)taaze\.tw$ (?:^|\.)tabtter\.jp$ (?:^|\.)tacc\.cwb\.gov\.tw$ (?:^|\.)tacem\.org$ (?:^|\.)taconet\.com\.tw$ (?:^|\.)taedp\.org\.tw$ (?:^|\.)tafm\.org$ (?:^|\.)tagwa\.org\.au$ (?:^|\.)tagwalk\.com$ (?:^|\.)tahr\.org\.tw$ (?:^|\.)taipei\.gov\.tw$ (?:^|\.)taipeisociety\.org$ (?:^|\.)taiwan-sex\.com$ (?:^|\.)taiwanbible\.com$ (?:^|\.)taiwancon\.com$ (?:^|\.)taiwandaily\.net$ (?:^|\.)taiwandc\.org$ (?:^|\.)taiwanjobs\.gov\.tw$ (?:^|\.)taiwanjustice\.com$ (?:^|\.)taiwanjustice\.net$ (?:^|\.)taiwankiss\.com$ (?:^|\.)taiwannation\.50webs\.com$ (?:^|\.)taiwannation\.com$ (?:^|\.)taiwannation\.com\.tw$ (?:^|\.)taiwanncf\.org\.tw$ (?:^|\.)taiwannews\.com\.tw$ (?:^|\.)taiwantp\.net$ (?:^|\.)taiwantt\.org\.tw$ (?:^|\.)taiwanus\.net$ (?:^|\.)taiwanyes\.com$ (?:^|\.)taiwanyes\.ning\.com$ (?:^|\.)talk853\.com$ (?:^|\.)talkboxapp\.com$ (?:^|\.)talkcc\.com$ (?:^|\.)talkonly\.net$ (?:^|\.)tamiaode\.tk$ (?:^|\.)tanc\.org$ (?:^|\.)tangben\.com$ (?:^|\.)tangren\.us$ (?:^|\.)taoism\.net$ (?:^|\.)taolun\.info$ (?:^|\.)tapanwap\.com$ (?:^|\.)tapatalk\.com$ (?:^|\.)tarr\.uspto\.gov$ (?:^|\.)tascn\.com\.au$ (?:^|\.)taup\.net$ (?:^|\.)taweet\.com$ (?:^|\.)tbcollege\.org$ (?:^|\.)tbi\.org\.hk$ (?:^|\.)tbicn\.org$ (?:^|\.)tbjyt\.org$ (?:^|\.)tbpic\.info$ (?:^|\.)tbrc\.org$ (?:^|\.)tbs-rainbow\.org$ (?:^|\.)tbsec\.org$ (?:^|\.)tbskkinabalu\.page\.tl$ (?:^|\.)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$ (?:^|\.)tdm\.com\.mo$ (?:^|\.)teachparentstech\.org$ (?:^|\.)teamamericany\.com$ (?:^|\.)tech2\.in\.com$ (?:^|\.)techviz\.net$ (?:^|\.)teck\.in$ (?:^|\.)teco-hk\.org$ (?:^|\.)teco-mo\.org$ (?:^|\.)teddysun\.com$ (?:^|\.)teeniefuck\.net$ (?:^|\.)teensinasia\.com$ (?:^|\.)telecomspace\.com$ (?:^|\.)telegram\.dog$ (?:^|\.)telegram\.me$ (?:^|\.)telegram\.org$ (?:^|\.)telegramdownload\.com$ (?:^|\.)telegraph\.co\.uk$ (?:^|\.)telesco\.pe$ (?:^|\.)tellme\.pw$ (?:^|\.)tenacy\.com$ (?:^|\.)tensorflow\.org$ (?:^|\.)tenzinpalmo\.com$ (?:^|\.)terminus2049\.github\.io$ (?:^|\.)tew\.org$ (?:^|\.)textnow\.me$ (?:^|\.)tfhub\.dev$ (?:^|\.)th\.hao123\.com$ (?:^|\.)thaicn\.com$ (?:^|\.)thb\.gov\.tw$ (?:^|\.)theatrum-belli\.com$ (?:^|\.)thebcomplex\.com$ (?:^|\.)theblemish\.com$ (?:^|\.)thebobs\.com$ (?:^|\.)thebodyshop-usa\.com$ (?:^|\.)thecenter\.mit\.edu$ (?:^|\.)thechinabeat\.org$ (?:^|\.)thedalailamamovie\.com$ (?:^|\.)thedw\.us$ (?:^|\.)thefacebook\.com$ (?:^|\.)thefrontier\.hk$ (?:^|\.)thegioitinhoc\.vn$ (?:^|\.)thegly\.com$ (?:^|\.)thehots\.info$ (?:^|\.)thehousenews\.com$ (?:^|\.)thehun\.net$ (?:^|\.)theinitium\.com$ (?:^|\.)thenewslens\.com$ (?:^|\.)thepiratebay\.org$ (?:^|\.)theporndude\.com$ (?:^|\.)theportalwiki\.com$ (?:^|\.)thereallove\.kr$ (?:^|\.)therock\.net\.nz$ (?:^|\.)thespeeder\.com$ (?:^|\.)thestandnews\.com$ (?:^|\.)thetibetcenter\.org$ (?:^|\.)thetibetconnection\.org$ (?:^|\.)thetibetmuseum\.org$ (?:^|\.)thetibetpost\.com$ (?:^|\.)thetinhat\.com$ (?:^|\.)thetrotskymovie\.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-info\.net$ (?:^|\.)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$ (?:^|\.)tibetanfeministcollective\.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$ (?:^|\.)tibetlibre\.free\.fr$ (?:^|\.)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$ (?:^|\.)tiltbrush\.com$ (?:^|\.)timdir\.com$ (?:^|\.)time\.com$ (?:^|\.)times\.hinet\.net$ (?:^|\.)timesofindia\.indiatimes\.com$ (?:^|\.)timsah\.com$ (?:^|\.)tinc-vpn\.org$ (?:^|\.)tineye\.com$ (?:^|\.)tintuc101\.com$ (?:^|\.)tiny\.cc$ (?:^|\.)tinychat\.com$ (?:^|\.)tinypaste\.com$ (?:^|\.)tipo\.gov\.tw$ (?:^|\.)tistory\.com$ (?:^|\.)tkcs-collins\.com$ (?:^|\.)tl\.gd$ (?:^|\.)tma\.co\.jp$ (?:^|\.)tmagazine\.com$ (?:^|\.)tmdfish\.com$ (?:^|\.)tmi\.me$ (?:^|\.)tmpp\.org$ (?:^|\.)tn1\.shemalez\.com$ (?:^|\.)tn2\.shemalez\.com$ (?:^|\.)tn3\.shemalez\.com$ (?:^|\.)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$ (?:^|\.)tongil\.or\.kr$ (?:^|\.)tono-oka\.jp$ (?:^|\.)tonyyan\.net$ (?:^|\.)toodoc\.com$ (?:^|\.)toonel\.net$ (?:^|\.)top\.tv$ (?:^|\.)top10vpn\.com$ (?:^|\.)top81\.ws$ (?:^|\.)topbtc\.com$ (?:^|\.)topic\.youthwant\.com\.tw$ (?:^|\.)topnews\.in$ (?:^|\.)toppornsites\.com$ (?:^|\.)topshareware\.com$ (?:^|\.)topsy\.com$ (?:^|\.)toptip\.ca$ (?:^|\.)tor\.blingblingsquad\.net$ (?:^|\.)tor\.cn\.uptodown\.com$ (?:^|\.)tor\.updatestar\.com$ (?:^|\.)tora\.to$ (?:^|\.)torcn\.com$ (?:^|\.)torguard\.net$ (?:^|\.)torproject\.org$ (?:^|\.)torrentprivacy\.com$ (?:^|\.)torrentproject\.se$ (?:^|\.)torrenty\.org$ (?:^|\.)torrentz\.eu$ (?:^|\.)torvpn\.com$ (?:^|\.)tosh\.comedycentral\.com$ (?:^|\.)totalvpn\.com$ (?:^|\.)toutiaoabc\.com$ (?:^|\.)toutyrater\.github\.io$ (?:^|\.)towngain\.com$ (?:^|\.)toypark\.in$ (?:^|\.)toythieves\.com$ (?:^|\.)toytractorshow\.com$ (?:^|\.)tparents\.org$ (?:^|\.)tpi\.org\.tw$ (?:^|\.)tracfone\.com$ (?:^|\.)traffichaus\.com$ (?:^|\.)trans\.wenweipo\.com$ (?:^|\.)transparency\.org$ (?:^|\.)treemall\.com\.tw$ (?:^|\.)trendsmap\.com$ (?:^|\.)trialofccp\.org$ (?:^|\.)trickip\.net$ (?:^|\.)trickip\.org$ (?:^|\.)trimondi\.de$ (?:^|\.)trouw\.nl$ (?:^|\.)trt\.net\.tr$ (?:^|\.)trtc\.com\.tw$ (?:^|\.)truebuddha-md\.org$ (?:^|\.)trulyergonomic\.com$ (?:^|\.)truth101\.co\.tv$ (?:^|\.)truthontour\.org$ (?:^|\.)truveo\.com$ (?:^|\.)tryheart\.jp$ (?:^|\.)tsctv\.net$ (?:^|\.)tsdr\.uspto\.gov$ (?:^|\.)tsemtulku\.com$ (?:^|\.)tsquare\.tv$ (?:^|\.)tsu\.org\.tw$ (?:^|\.)tsunagarumon\.com$ (?:^|\.)tt1069\.com$ (?:^|\.)tttan\.com$ (?:^|\.)ttvnw\.net$ (?:^|\.)tu8964\.com$ (?:^|\.)tubaholic\.com$ (?:^|\.)tube\.com$ (?:^|\.)tube8\.com$ (?:^|\.)tube911\.com$ (?:^|\.)tubecup\.com$ (?:^|\.)tubegals\.com$ (?:^|\.)tubeislam\.com$ (?:^|\.)tubepornclassic\.com$ (?:^|\.)tubestack\.com$ (?:^|\.)tubewolf\.com$ (?:^|\.)tui\.orzdream\.com$ (?:^|\.)tuibeitu\.net$ (?:^|\.)tuidang\.net$ (?:^|\.)tuidang\.org$ (?:^|\.)tuidang\.se$ (?:^|\.)tuitwit\.com$ (?:^|\.)tumblr\.com$ (?:^|\.)tumutanzi\.com$ (?:^|\.)tumview\.com$ (?:^|\.)tunein\.com$ (?:^|\.)tunnelbear\.com$ (?:^|\.)tunnelr\.com$ (?:^|\.)tuo8\.blue$ (?:^|\.)tuo8\.cc$ (?:^|\.)tuo8\.club$ (?:^|\.)tuo8\.fit$ (?:^|\.)tuo8\.hk$ (?:^|\.)tuo8\.in$ (?:^|\.)tuo8\.ninja$ (?:^|\.)tuo8\.org$ (?:^|\.)tuo8\.pw$ (?:^|\.)tuo8\.red$ (?:^|\.)tuo8\.space$ (?:^|\.)turansam\.org$ (?:^|\.)turbobit\.net$ (?:^|\.)turbohide\.com$ (?:^|\.)turbotwitter\.com$ (?:^|\.)turntable\.fm$ (?:^|\.)tushycash\.com$ (?:^|\.)tuvpn\.com$ (?:^|\.)tuzaijidi\.com$ (?:^|\.)tv\.com$ (?:^|\.)tvants\.com$ (?:^|\.)tvboxnow\.com$ (?:^|\.)tvider\.com$ (?:^|\.)tvmost\.com\.hk$ (?:^|\.)tvplayvideos\.com$ (?:^|\.)tvunetworks\.com$ (?:^|\.)tw-blog\.com$ (?:^|\.)tw-npo\.org$ (?:^|\.)tw\.answers\.yahoo\.com$ (?:^|\.)tw\.bid\.yahoo\.com$ (?:^|\.)tw\.gigacircle\.com$ (?:^|\.)tw\.hao123\.com$ (?:^|\.)tw\.iqiyi\.com$ (?:^|\.)tw\.jiepang\.com$ (?:^|\.)tw\.knowledge\.yahoo\.com$ (?:^|\.)tw\.mall\.yahoo\.com$ (?:^|\.)tw\.mobi\.yahoo\.com$ (?:^|\.)tw\.money\.yahoo\.com$ (?:^|\.)tw\.myblog\.yahoo\.com$ (?:^|\.)tw\.news\.yahoo\.com$ (?:^|\.)tw\.streetvoice\.com$ (?:^|\.)tw\.tomonews\.net$ (?:^|\.)tw\.voa\.mobi$ (?:^|\.)tw\.yahoo\.com$ (?:^|\.)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$ (?:^|\.)tweets\.seraph\.me$ (?:^|\.)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$ (?:^|\.)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$ (?:^|\.)twskype\.com$ (?:^|\.)twstar\.net$ (?:^|\.)twt\.tl$ (?:^|\.)twtkr\.com$ (?:^|\.)twtr2src\.ogaoga\.org$ (?:^|\.)twtrland\.com$ (?:^|\.)twttr\.com$ (?:^|\.)twurl\.nl$ (?:^|\.)twyac\.org$ (?:^|\.)txxx\.com$ (?:^|\.)tycool\.com$ (?:^|\.)typepad\.com$ (?:^|\.)u9un\.com$ (?:^|\.)ub0\.cc$ (?:^|\.)ubddns\.org$ (?:^|\.)uberproxy\.net$ (?:^|\.)uc-japan\.org$ (?:^|\.)ucdc1998\.org$ (?:^|\.)uderzo\.it$ (?:^|\.)udn\.com$ (?:^|\.)udn\.com\.tw$ (?:^|\.)udnbkk\.com$ (?:^|\.)uforadio\.com\.tw$ (?:^|\.)ufreevpn\.com$ (?:^|\.)ugo\.com$ (?:^|\.)uhdwallpapers\.org$ (?:^|\.)uhrp\.org$ (?:^|\.)uighur\.narod\.ru$ (?:^|\.)uighur\.nl$ (?:^|\.)uighurbiz\.net$ (?:^|\.)ukcdp\.co\.uk$ (?:^|\.)ukliferadio\.co\.uk$ (?:^|\.)uku\.im$ (?:^|\.)ulike\.net$ (?:^|\.)ulop\.net$ (?:^|\.)ultrareach$ (?:^|\.)ultrasurf$ (?:^|\.)ultravpn\.fr$ (?:^|\.)ultraxs\.com$ (?:^|\.)umich\.edu$ (?:^|\.)unblock-us\.com$ (?:^|\.)unblock\.cn\.com$ (?:^|\.)unblockdmm\.com$ (?:^|\.)unblocker\.yt$ (?:^|\.)unblocksit\.es$ (?:^|\.)uncyclomedia\.org$ (?:^|\.)uncyclopedia\.hk$ (?:^|\.)uncyclopedia\.tw$ (?:^|\.)underwoodammo\.com$ (?:^|\.)unholyknight\.com$ (?:^|\.)uni\.cc$ (?:^|\.)unification\.net$ (?:^|\.)unification\.org\.tw$ (?:^|\.)unirule\.cloud$ (?:^|\.)unitedsocialpress\.com$ (?:^|\.)unix100\.com$ (?:^|\.)unknownspace\.org$ (?:^|\.)unodedos\.com$ (?:^|\.)unpo\.org$ (?:^|\.)unseen\.is$ (?:^|\.)untraceable\.us$ (?:^|\.)uocn\.org$ (?:^|\.)upcoming\.yahoo\.com$ (?:^|\.)updates\.tdesktop\.com$ (?:^|\.)upholdjustice\.org$ (?:^|\.)upload4u\.info$ (?:^|\.)uploaded\.net$ (?:^|\.)uploaded\.to$ (?:^|\.)uploadstation\.com$ (?:^|\.)upmedia\.mg$ (?:^|\.)upornia\.com$ (?:^|\.)uproxy\.org$ (?:^|\.)upwill\.org$ (?:^|\.)ur7s\.com$ (?:^|\.)uraban\.me$ (?:^|\.)urbansurvival\.com$ (?:^|\.)urchin\.com$ (?:^|\.)urlborg\.com$ (?:^|\.)urlparser\.com$ (?:^|\.)us\.to$ (?:^|\.)usacn\.com$ (?:^|\.)usaip\.eu$ (?:^|\.)userapi\.nytlog\.com$ (?:^|\.)users\.skynet\.be$ (?:^|\.)usfk\.mil$ (?:^|\.)ushuarencity\.echainhost\.com$ (?:^|\.)usinfo\.state\.gov$ (?:^|\.)usma\.edu$ (?:^|\.)usmc\.mil$ (?:^|\.)usmgtcg\.ning\.com$ (?:^|\.)usno\.navy\.mil$ (?:^|\.)usocctn\.com$ (?:^|\.)ustream\.tv$ (?:^|\.)usunitednews\.com$ (?:^|\.)usus\.cc$ (?:^|\.)utopianpal\.com$ (?:^|\.)uu-gg\.com$ (?:^|\.)uukanshu\.com$ (?:^|\.)uvwxyz\.xyz$ (?:^|\.)uwants\.com$ (?:^|\.)uwants\.net$ (?:^|\.)uyghur-j\.org$ (?:^|\.)uyghur\.co\.uk$ (?:^|\.)uyghuramerican\.org$ (?:^|\.)uyghurcanadiansociety\.org$ (?:^|\.)uyghurcongress\.org$ (?:^|\.)uyghurensemble\.co\.uk$ (?:^|\.)uyghurpen\.org$ (?:^|\.)uyghurpress\.com$ (?:^|\.)uyghurstudies\.org$ (?:^|\.)uygur\.fc2web\.com$ (?:^|\.)uygur\.org$ (?:^|\.)uymaarip\.com$ (?:^|\.)v2ex\.com$ (?:^|\.)v2ray\.com$ (?:^|\.)van001\.com$ (?:^|\.)van698\.com$ (?:^|\.)vanemu\.cn$ (?:^|\.)vanilla-jp\.com$ (?:^|\.)vanpeople\.com$ (?:^|\.)vansky\.com$ (?:^|\.)vaticannews\.va$ (?:^|\.)vatn\.org$ (?:^|\.)vcf-online\.org$ (?:^|\.)vcfbuilder\.org$ (?:^|\.)vds\.rightster\.com$ (?:^|\.)vegas\.williamhill\.com$ (?:^|\.)vegasred\.com$ (?:^|\.)velkaepocha\.sk$ (?:^|\.)venbbs\.com$ (?:^|\.)venchina\.com$ (?:^|\.)venetianmacao\.com$ (?:^|\.)ventureswell\.com$ (?:^|\.)veoh\.com$ (?:^|\.)vermonttibet\.org$ (?:^|\.)versavpn\.com$ (?:^|\.)verybs\.com$ (?:^|\.)vevo\.com$ (?:^|\.)vft\.com\.tw$ (?:^|\.)viber\.com$ (?:^|\.)vica\.info$ (?:^|\.)victimsofcommunism\.org$ (?:^|\.)vid\.me$ (?:^|\.)vidble\.com$ (?:^|\.)video\.aol\.ca$ (?:^|\.)video\.aol\.co\.uk$ (?:^|\.)video\.aol\.com$ (?:^|\.)video\.ap\.org$ (?:^|\.)video\.fdbox\.com$ (?:^|\.)video\.foxbusiness\.com$ (?:^|\.)video\.pbs\.org$ (?:^|\.)video\.yahoo\.com$ (?:^|\.)videobam\.com$ (?:^|\.)videodetective\.com$ (?:^|\.)videomega\.tv$ (?:^|\.)videomo\.com$ (?:^|\.)videopediaworld\.com$ (?:^|\.)videopress\.com$ (?:^|\.)vidinfo\.org$ (?:^|\.)vietdaikynguyen\.com$ (?:^|\.)vijayatemple\.org$ (?:^|\.)vimeo\.com$ (?:^|\.)vimperator\.org$ (?:^|\.)vincnd\.com$ (?:^|\.)vine\.co$ (?:^|\.)vinniev\.com$ (?:^|\.)vip-enterprise\.com$ (?:^|\.)virtualrealporn\.com$ (?:^|\.)visibletweets\.com$ (?:^|\.)vital247\.org$ (?:^|\.)viu\.com$ (?:^|\.)viu\.tv$ (?:^|\.)vivahentai4u\.net$ (?:^|\.)vivatube\.com$ (?:^|\.)vivthomas\.com$ (?:^|\.)vizvaz\.com$ (?:^|\.)vjav\.com$ (?:^|\.)vjmedia\.com\.hk$ (?:^|\.)vllcs\.org$ (?:^|\.)vlog\.xuite\.net$ (?:^|\.)vmixcore\.com$ (?:^|\.)vmpsoft\.com$ (?:^|\.)vn\.hao123\.com$ (?:^|\.)vnet\.link$ (?:^|\.)voa-11\.akacast\.akamaistream\.net$ (?:^|\.)voacantonese\.com$ (?:^|\.)voachinese\.com$ (?:^|\.)voachineseblog\.com$ (?:^|\.)voagd\.com$ (?:^|\.)voanews\.com$ (?:^|\.)voatibetan\.com$ (?:^|\.)voatibetanenglish\.com$ (?:^|\.)vocativ\.com$ (?:^|\.)vocn\.tv$ (?:^|\.)vod-abematv\.akamaized\.net$ (?:^|\.)vod\.wwe\.com$ (?:^|\.)vot\.org$ (?:^|\.)vovo2000\.com$ (?:^|\.)voxer\.com$ (?:^|\.)voy\.com$ (?:^|\.)vpn\.ac$ (?:^|\.)vpn\.cjb\.net$ (?:^|\.)vpn\.cmu\.edu$ (?:^|\.)vpn\.sv\.cmu\.edu$ (?:^|\.)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$ (?:^|\.)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$ (?:^|\.)vtunnel\.com$ (?:^|\.)vuku\.cc$ (?:^|\.)vultryhw\.com$ (?:^|\.)w\.idaiwan\.com$ (?:^|\.)w3schools\.com$ (?:^|\.)waffle1999\.com$ (?:^|\.)wahas\.com$ (?:^|\.)waigaobu\.com$ (?:^|\.)waikeung\.org$ (?:^|\.)wailaike\.net$ (?:^|\.)waiwaier\.com$ (?:^|\.)wallmama\.com$ (?:^|\.)wallornot\.org$ (?:^|\.)wallpapercasa\.com$ (?:^|\.)wallproxy\.com$ (?:^|\.)waltermartin\.com$ (?:^|\.)waltermartin\.org$ (?:^|\.)wanderinghorse\.net$ (?:^|\.)wangafu\.net$ (?:^|\.)wangjinbo\.org$ (?:^|\.)wanglixiong\.com$ (?:^|\.)wango\.org$ (?:^|\.)wangruoshui\.net$ (?:^|\.)want-daily\.com$ (?:^|\.)wanz-factory\.com$ (?:^|\.)wapedia\.mobi$ (?:^|\.)warbler\.iconfactory\.net$ (?:^|\.)waselpro\.com$ (?:^|\.)washeng\.net$ (?:^|\.)watch8x\.com$ (?:^|\.)watchinese\.com$ (?:^|\.)watchmygf\.net$ (?:^|\.)wattpad\.com$ (?:^|\.)wav\.tv$ (?:^|\.)waveprotocol\.org$ (?:^|\.)waymo\.com$ (?:^|\.)wda\.gov\.tw$ (?:^|\.)wdf5\.com$ (?:^|\.)wearehairy\.com$ (?:^|\.)wearn\.com$ (?:^|\.)web\.dev$ (?:^|\.)web2project\.net$ (?:^|\.)webbang\.net$ (?:^|\.)webevader\.org$ (?:^|\.)webfreer\.com$ (?:^|\.)webjb\.org$ (?:^|\.)weblagu\.com$ (?:^|\.)webmproject\.org$ (?:^|\.)webrtc\.org$ (?:^|\.)webrush\.net$ (?:^|\.)webs-tv\.net$ (?:^|\.)website\.informer\.com$ (?:^|\.)websitepulse\.com$ (?:^|\.)webwarper\.net$ (?:^|\.)webworkerdaily\.com$ (?:^|\.)weekmag\.info$ (?:^|\.)wefightcensorship\.org$ (?:^|\.)wefong\.com$ (?:^|\.)wego\.here\.com$ (?:^|\.)weiboleak\.com$ (?:^|\.)weiboscope\.jmsc\.hku\.hk$ (?:^|\.)weihuo\.org$ (?:^|\.)weijingsheng\.org$ (?:^|\.)weiming\.info$ (?:^|\.)weiquanwang\.org$ (?:^|\.)weisuo\.ws$ (?:^|\.)welovecock\.com$ (?:^|\.)wemigrate\.org$ (?:^|\.)wengewang\.com$ (?:^|\.)wengewang\.org$ (?:^|\.)wenhui\.ch$ (?:^|\.)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$ (?:^|\.)whitebear\.freebearblog\.org$ (?:^|\.)whodns\.xyz$ (?:^|\.)whoer\.net$ (?:^|\.)whotalking\.com$ (?:^|\.)whylover\.com$ (?:^|\.)whyx\.org$ (?:^|\.)widevine\.com$ (?:^|\.)wikaba\.com$ (?:^|\.)wiki\.cnitter\.com$ (?:^|\.)wiki\.esu\.im$ (?:^|\.)wiki\.gamerp\.jp$ (?:^|\.)wiki\.jqueryui\.com$ (?:^|\.)wiki\.keso\.cn$ (?:^|\.)wiki\.moegirl\.org$ (?:^|\.)wiki\.oauth\.net$ (?:^|\.)wiki\.phonegap\.com$ (?:^|\.)wikileaks-forum\.com$ (?:^|\.)wikileaks\.ch$ (?:^|\.)wikileaks\.com$ (?:^|\.)wikileaks\.de$ (?:^|\.)wikileaks\.eu$ (?:^|\.)wikileaks\.lu$ (?:^|\.)wikileaks\.org$ (?:^|\.)wikileaks\.pl$ (?:^|\.)wikilivres\.info$ (?:^|\.)wikimapia\.org$ (?:^|\.)wikipedia\.org$ (?:^|\.)wikiwiki\.jp$ (?:^|\.)wildammo\.com$ (?:^|\.)williamhill\.com$ (?:^|\.)willw\.net$ (?:^|\.)windowsphoneme\.com$ (?:^|\.)windscribe\.com$ (?:^|\.)wingamestore\.com$ (?:^|\.)wingy\.site$ (?:^|\.)winning11\.com$ (?:^|\.)winwhispers\.info$ (?:^|\.)wire\.com$ (?:^|\.)wiredbytes\.com$ (?:^|\.)wiredpen\.com$ (?:^|\.)wisdompubs\.org$ (?:^|\.)wisevid\.com$ (?:^|\.)withgoogle\.com$ (?:^|\.)withyoutube\.com$ (?:^|\.)witnessleeteaching\.com$ (?:^|\.)witopia\.net$ (?:^|\.)wizcrafts\.net$ (?:^|\.)wjbk\.org$ (?:^|\.)wlcnew\.jigsy\.com$ (?:^|\.)wlx\.sowiki\.net$ (?:^|\.)wn\.com$ (?:^|\.)wnacg\.com$ (?:^|\.)wnacg\.org$ (?:^|\.)wo\.tc$ (?:^|\.)wo3ttt\.wordpress\.com$ (?:^|\.)woeser\.com$ (?:^|\.)woesermiddle-way\.net$ (?:^|\.)wokar\.org$ (?:^|\.)wolfax\.com$ (?:^|\.)woolyss\.com$ (?:^|\.)woopie\.jp$ (?:^|\.)woopie\.tv$ (?:^|\.)wordpress\.com$ (?:^|\.)workatruna\.com$ (?:^|\.)workerdemo\.org\.hk$ (?:^|\.)workerempowerment\.org$ (?:^|\.)workersthebig\.net$ (?:^|\.)worldcat\.org$ (?:^|\.)worldjournal\.com$ (?:^|\.)worldvpn\.net$ (?:^|\.)wow-life\.net$ (?:^|\.)wow\.com$ (?:^|\.)wowgirls\.com$ (?:^|\.)wowlegacy\.ml$ (?:^|\.)wowporn\.com$ (?:^|\.)wowrk\.com$ (?:^|\.)woxinghuiguo\.com$ (?:^|\.)woyaolian\.org$ (?:^|\.)wozy\.in$ (?:^|\.)wp\.com$ (?:^|\.)wpoforum\.com$ (?:^|\.)wqyd\.org$ (?:^|\.)wrchina\.org$ (?:^|\.)wretch\.cc$ (?:^|\.)writer\.zoho\.com$ (?:^|\.)wsgzao\.github\.io$ (?:^|\.)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$ (?:^|\.)wwitv\.com$ (?:^|\.)www\.ajsands\.com$ (?:^|\.)www\.americorps\.gov$ (?:^|\.)www\.antd\.org$ (?:^|\.)www\.aolnews\.com$ (?:^|\.)www\.businessinsider\.com\.au$ (?:^|\.)www\.citizenlab\.org$ (?:^|\.)www\.cmoinc\.org$ (?:^|\.)www\.cool18\.com$ (?:^|\.)www\.dmm\.com$ (?:^|\.)www\.dwheeler\.com$ (?:^|\.)www\.eastturkistan\.net$ (?:^|\.)www\.gmiddle\.com$ (?:^|\.)www\.gmiddle\.net$ (?:^|\.)www\.hustlercash\.com$ (?:^|\.)www\.idlcoyote\.com$ (?:^|\.)www\.imdb\.com$ (?:^|\.)www\.kindleren\.com$ (?:^|\.)www\.klip\.me$ (?:^|\.)www\.lamenhu\.com$ (?:^|\.)www\.lib\.virginia\.edu$ (?:^|\.)www\.linksalpha\.com$ (?:^|\.)www\.m-sport\.co\.uk$ (?:^|\.)www\.metro\.taipei$ (?:^|\.)www\.monlamit\.org$ (?:^|\.)www\.moztw\.org$ (?:^|\.)www\.nbc\.com$ (?:^|\.)www\.orchidbbs\.com$ (?:^|\.)www\.owind\.com$ (?:^|\.)www\.oxid\.it$ (?:^|\.)www\.powerpointninja\.com$ (?:^|\.)www\.s4miniarchive\.com$ (?:^|\.)www\.sciencemag\.org$ (?:^|\.)www\.shadowsocks\.com$ (?:^|\.)www\.shwchurch\.org$ (?:^|\.)www\.skype\.com$ (?:^|\.)www\.tablesgenerator\.com$ (?:^|\.)www\.taiwanonline\.cc$ (?:^|\.)www\.taup\.org\.tw$ (?:^|\.)www\.thechinastory\.org$ (?:^|\.)www\.wan-press\.org$ (?:^|\.)www\.wangruowang\.org$ (?:^|\.)www\.websnapr\.com$ (?:^|\.)www\.zensur\.freerk\.com$ (?:^|\.)www1\.american\.edu$ (?:^|\.)www1\.biz$ (?:^|\.)www2\.ohchr\.org$ (?:^|\.)www2\.rocketbbs\.com$ (?:^|\.)wwwhost\.biz$ (?:^|\.)wzyboy\.im$ (?:^|\.)x-art\.com$ (?:^|\.)x-berry\.com$ (?:^|\.)x-wall\.org$ (?:^|\.)x\.company$ (?:^|\.)x1949x\.com$ (?:^|\.)x24hr\.com$ (?:^|\.)x365x\.com$ (?:^|\.)xa\.yimg\.com$ (?:^|\.)xanga\.com$ (?:^|\.)xbabe\.com$ (?:^|\.)xbookcn\.com$ (?:^|\.)xbtce\.com$ (?:^|\.)xcafe\.in$ (?:^|\.)xcity\.jp$ (?:^|\.)xcritic\.com$ (?:^|\.)xerotica\.com$ (?:^|\.)xfinity\.com$ (?:^|\.)xfm\.pp\.ru$ (?:^|\.)xgmyd\.com$ (?:^|\.)xhamster\.com$ (?:^|\.)xianba\.net$ (?:^|\.)xianchawang\.net$ (?:^|\.)xianjian\.tw$ (?:^|\.)xianqiao\.net$ (?:^|\.)xiaobaiwu\.com$ (?:^|\.)xiaochuncnjp\.com$ (?:^|\.)xiaod\.in$ (?:^|\.)xiaohexie\.com$ (?:^|\.)xiaolan\.me$ (?:^|\.)xiaoma\.org$ (?:^|\.)xiezhua\.com$ (?:^|\.)xihua\.es$ (?:^|\.)xijie\.wordpress\.com$ (?:^|\.)xing\.com$ (?:^|\.)xinhuanet\.org$ (?:^|\.)xinmiao\.com\.hk$ (?:^|\.)xinqimeng\.over-blog\.com$ (?:^|\.)xinsheng\.net$ (?:^|\.)xinshijue\.com$ (?:^|\.)xinyubbs\.net$ (?:^|\.)xiongpian\.com$ (?:^|\.)xiuren\.org$ (?:^|\.)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--czq75pvv1aj5c\.org$ (?:^|\.)xn--i2ru8q2qg\.com$ (?:^|\.)xn--ngstr-lra8j\.com$ (?:^|\.)xn--oiq\.cc$ (?:^|\.)xn--p8j9a0d9c9a\.xn--q9jyb4c$ (?:^|\.)xnxx\.com$ (?:^|\.)xpdo\.net$ (?:^|\.)xpud\.org$ (?:^|\.)xrentdvd\.com$ (?:^|\.)xskywalker\.com$ (?:^|\.)xskywalker\.net$ (?:^|\.)xtube\.com$ (?:^|\.)xuchao\.net$ (?:^|\.)xuchao\.org$ (?:^|\.)xuehua\.us$ (?:^|\.)xuzhiyong\.net$ (?:^|\.)xvideo\.cc$ (?:^|\.)xvideos\.com$ (?:^|\.)xvideos\.es$ (?:^|\.)xxbbx\.com$ (?:^|\.)xxlmovies\.com$ (?:^|\.)xxuz\.com$ (?:^|\.)xxx\.com$ (?:^|\.)xxx\.xxx$ (?:^|\.)xxxfuckmom\.com$ (?:^|\.)xxxx\.com\.au$ (?:^|\.)xxxy\.biz$ (?:^|\.)xxxy\.info$ (?:^|\.)xxxymovies\.com$ (?:^|\.)xys\.dxiong\.com$ (?:^|\.)xys\.org$ (?:^|\.)xysblogs\.org$ (?:^|\.)xyy69\.com$ (?:^|\.)xyy69\.info$ (?:^|\.)yahoo\.com\.hk$ (?:^|\.)yakbutterblues\.com$ (?:^|\.)yam\.com$ (?:^|\.)yam\.org\.tw$ (?:^|\.)yanghengjun\.com$ (?:^|\.)yangjianli\.com$ (?:^|\.)yasni\.co\.uk$ (?:^|\.)yayabay\.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$ (?:^|\.)yilubbs\.com$ (?:^|\.)yingsuoss\.com$ (?:^|\.)yinlei\.org$ (?:^|\.)yipub\.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$ (?:^|\.)youthnetradio\.org$ (?:^|\.)youtu\.be$ (?:^|\.)youtube-nocookie\.com$ (?:^|\.)youtube\.com$ (?:^|\.)youtubecn\.com$ (?:^|\.)youtubeeducation\.com$ (?:^|\.)youtubegaming\.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$ (?:^|\.)yzzk\.com$ (?:^|\.)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$ (?:^|\.)zenmate\.com\.ru$ (?:^|\.)zeronet\.io$ (?:^|\.)zeutch\.com$ (?:^|\.)zfreet\.com$ (?:^|\.)zgsddh\.com$ (?:^|\.)zgzcjj\.net$ (?:^|\.)zh\.bitterwinter\.org$ (?:^|\.)zh\.ecdm\.wikia\.com$ (?:^|\.)zh\.pokerstrategy\.com$ (?:^|\.)zh\.pttpedia\.wikia\.com$ (?:^|\.)zh\.uncyclopedia\.wikia\.com$ (?:^|\.)zh\.wikinews\.org$ (?:^|\.)zh\.wikisource\.org$ (?:^|\.)zhanbin\.net$ (?:^|\.)zhangboli\.net$ (?:^|\.)zhangtianliang\.com$ (?:^|\.)zhanlve\.org$ (?:^|\.)zhao\.1984\.city$ (?:^|\.)zhao\.jinhai\.de$ (?:^|\.)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$ (?:^|\.)ziddu\.com$ (?:^|\.)zillionk\.com$ (?:^|\.)zim\.vn$ (?:^|\.)zinio\.com$ (?:^|\.)ziporn\.com$ (?:^|\.)zippyshare\.com$ (?:^|\.)zkaip\.com$ (?:^|\.)zmw\.cn$ (?:^|\.)zodgame\.us$ (?:^|\.)zomobo\.net$ (?:^|\.)zonaeuropa\.com$ (?:^|\.)zonghexinwen\.com$ (?:^|\.)zonghexinwen\.net$ (?:^|\.)zoogvpn\.com$ (?:^|\.)zootool\.com$ (?:^|\.)zoozle\.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$ (?:^|\.)zyzc9\.com$ (?:^|\.)zzcartoon\.com$ (?:^|\.)zzcloud\.me$ (?:^|\.)zzux\.com$ ================================================ FILE: core/src/main/assets/acl/bypass-lan-china.acl ================================================ [proxy_all] [bypass_list] 0.0.0.0/8 10.0.0.0/8 100.64.0.0/10 127.0.0.0/8 169.254.0.0/16 172.16.0.0/12 192.0.0.0/24 192.0.2.0/24 192.31.196.0/24 192.52.193.0/24 192.88.99.0/24 192.168.0.0/16 192.175.48.0/24 198.18.0.0/15 198.51.100.0/24 203.0.113.0/24 224.0.0.0/3 1.0.1.0/24 1.0.2.0/23 1.0.8.0/21 1.0.32.0/19 1.1.0.0/24 1.1.2.0/23 1.1.4.0/22 1.1.8.0/21 1.1.16.0/20 1.1.32.0/19 1.2.0.0/23 1.2.2.0/24 1.2.4.0/22 1.2.8.0/21 1.2.16.0/20 1.2.32.0/19 1.2.64.0/18 1.3.0.0/16 1.4.1.0/24 1.4.2.0/23 1.4.4.0/22 1.4.8.0/21 1.4.16.0/20 1.4.32.0/19 1.4.64.0/18 1.8.0.0/16 1.10.0.0/21 1.10.8.0/23 1.10.11.0/24 1.10.12.0/22 1.10.16.0/20 1.10.32.0/19 1.10.64.0/18 1.12.0.0/14 1.24.0.0/13 1.45.0.0/16 1.48.0.0/14 1.56.0.0/13 1.68.0.0/14 1.80.0.0/12 1.116.0.0/14 1.180.0.0/14 1.184.0.0/15 1.188.0.0/14 1.192.0.0/13 1.202.0.0/15 1.204.0.0/14 14.0.0.0/21 14.0.12.0/22 14.1.0.0/22 14.1.24.0/22 14.1.96.0/22 14.1.108.0/22 14.16.0.0/12 14.102.128.0/22 14.102.156.0/22 14.102.180.0/22 14.103.0.0/16 14.104.0.0/13 14.112.0.0/12 14.130.0.0/15 14.134.0.0/15 14.144.0.0/12 14.192.60.0/22 14.192.76.0/22 14.196.0.0/15 14.204.0.0/15 14.208.0.0/12 27.0.128.0/21 27.0.160.0/21 27.0.188.0/22 27.0.204.0/22 27.0.208.0/21 27.8.0.0/13 27.16.0.0/12 27.34.232.0/21 27.36.0.0/14 27.40.0.0/13 27.50.40.0/21 27.50.128.0/17 27.54.72.0/21 27.54.152.0/21 27.54.192.0/18 27.98.208.0/20 27.98.224.0/19 27.99.128.0/17 27.103.0.0/16 27.106.128.0/18 27.106.204.0/22 27.109.32.0/19 27.109.124.0/22 27.112.0.0/18 27.112.80.0/20 27.112.112.0/21 27.113.128.0/18 27.115.0.0/17 27.116.44.0/22 27.121.72.0/21 27.121.120.0/21 27.128.0.0/15 27.131.220.0/22 27.144.0.0/16 27.148.0.0/14 27.152.0.0/13 27.184.0.0/13 27.192.0.0/11 27.224.0.0/14 36.0.0.0/22 36.0.8.0/21 36.0.16.0/20 36.0.32.0/19 36.0.64.0/18 36.0.128.0/17 36.1.0.0/16 36.4.0.0/14 36.16.0.0/12 36.32.0.0/14 36.36.0.0/16 36.37.0.0/19 36.37.36.0/23 36.37.39.0/24 36.37.40.0/21 36.37.48.0/20 36.40.0.0/13 36.48.0.0/15 36.51.0.0/16 36.56.0.0/13 36.96.0.0/11 36.128.0.0/10 36.192.0.0/11 36.248.0.0/14 36.254.0.0/16 36.255.116.0/22 36.255.128.0/22 36.255.164.0/22 36.255.172.0/22 36.255.176.0/22 39.0.0.0/24 39.0.2.0/23 39.0.4.0/22 39.0.8.0/21 39.0.16.0/20 39.0.32.0/19 39.0.64.0/18 39.0.128.0/17 39.64.0.0/11 39.96.0.0/13 39.104.0.0/14 39.108.0.0/16 39.128.0.0/10 40.72.0.0/15 40.125.128.0/17 40.126.64.0/18 42.0.0.0/22 42.0.8.0/21 42.0.16.0/21 42.0.24.0/22 42.0.32.0/19 42.0.128.0/17 42.1.0.0/19 42.1.32.0/20 42.1.48.0/21 42.1.56.0/22 42.1.128.0/17 42.4.0.0/14 42.48.0.0/13 42.56.0.0/14 42.62.0.0/17 42.62.128.0/19 42.62.160.0/20 42.62.180.0/22 42.62.184.0/21 42.63.0.0/16 42.80.0.0/15 42.83.64.0/20 42.83.80.0/22 42.83.88.0/21 42.83.96.0/19 42.83.128.0/17 42.84.0.0/14 42.88.0.0/13 42.96.64.0/19 42.96.96.0/21 42.96.108.0/22 42.96.112.0/20 42.96.128.0/17 42.97.0.0/16 42.99.0.0/18 42.99.64.0/19 42.99.96.0/20 42.99.112.0/22 42.99.120.0/21 42.100.0.0/14 42.120.0.0/15 42.122.0.0/16 42.123.0.0/19 42.123.36.0/22 42.123.40.0/21 42.123.48.0/20 42.123.64.0/18 42.123.128.0/17 42.128.0.0/12 42.156.0.0/19 42.156.36.0/22 42.156.40.0/21 42.156.48.0/20 42.156.64.0/18 42.156.128.0/17 42.157.0.0/16 42.158.0.0/15 42.160.0.0/12 42.176.0.0/13 42.184.0.0/15 42.186.0.0/16 42.187.0.0/18 42.187.64.0/19 42.187.96.0/20 42.187.112.0/21 42.187.120.0/22 42.187.128.0/17 42.192.0.0/13 42.201.0.0/17 42.202.0.0/15 42.204.0.0/14 42.208.0.0/12 42.224.0.0/12 42.240.0.0/16 42.242.0.0/15 42.244.0.0/14 42.248.0.0/13 43.224.12.0/22 43.224.24.0/22 43.224.44.0/22 43.224.52.0/22 43.224.56.0/22 43.224.64.0/21 43.224.72.0/22 43.224.80.0/22 43.224.100.0/22 43.224.144.0/22 43.224.160.0/22 43.224.176.0/22 43.224.184.0/22 43.224.200.0/21 43.224.208.0/21 43.224.216.0/22 43.224.240.0/22 43.225.76.0/22 43.225.84.0/22 43.225.120.0/21 43.225.140.0/22 43.225.172.0/22 43.225.180.0/22 43.225.208.0/22 43.225.216.0/21 43.225.224.0/20 43.225.240.0/21 43.225.252.0/22 43.226.32.0/19 43.226.64.0/19 43.226.96.0/20 43.226.112.0/21 43.226.120.0/22 43.226.128.0/18 43.226.192.0/20 43.226.208.0/21 43.226.236.0/22 43.226.240.0/20 43.227.0.0/21 43.227.8.0/22 43.227.32.0/19 43.227.64.0/19 43.227.96.0/21 43.227.104.0/22 43.227.136.0/21 43.227.144.0/22 43.227.152.0/21 43.227.160.0/20 43.227.176.0/21 43.227.188.0/22 43.227.192.0/19 43.227.232.0/22 43.227.248.0/21 43.228.0.0/18 43.228.64.0/21 43.228.76.0/22 43.228.100.0/22 43.228.116.0/22 43.228.120.0/22 43.228.132.0/22 43.228.136.0/22 43.228.148.0/22 43.228.152.0/22 43.228.188.0/22 43.229.40.0/22 43.229.48.0/22 43.229.56.0/22 43.229.96.0/22 43.229.120.0/22 43.229.136.0/21 43.229.144.0/22 43.229.168.0/21 43.229.176.0/20 43.229.192.0/21 43.229.216.0/21 43.229.232.0/21 43.230.20.0/22 43.230.32.0/22 43.230.68.0/22 43.230.72.0/22 43.230.84.0/22 43.230.124.0/22 43.230.136.0/22 43.230.168.0/22 43.230.220.0/22 43.230.224.0/19 43.231.32.0/20 43.231.80.0/20 43.231.96.0/20 43.231.136.0/21 43.231.144.0/20 43.231.160.0/20 43.231.176.0/21 43.236.0.0/15 43.238.0.0/16 43.239.0.0/19 43.239.32.0/20 43.239.48.0/22 43.239.116.0/22 43.239.120.0/22 43.239.172.0/22 43.239.176.0/22 43.240.0.0/22 43.240.56.0/21 43.240.68.0/22 43.240.72.0/21 43.240.84.0/22 43.240.124.0/22 43.240.128.0/21 43.240.136.0/22 43.240.144.0/22 43.240.156.0/22 43.240.160.0/19 43.240.192.0/19 43.240.236.0/22 43.240.240.0/20 43.241.0.0/20 43.241.16.0/21 43.241.48.0/22 43.241.76.0/22 43.241.80.0/20 43.241.112.0/22 43.241.168.0/21 43.241.176.0/21 43.241.184.0/22 43.241.196.0/22 43.241.208.0/20 43.241.224.0/20 43.241.240.0/22 43.241.248.0/21 43.242.8.0/21 43.242.16.0/20 43.242.44.0/22 43.242.48.0/20 43.242.64.0/22 43.242.72.0/21 43.242.80.0/20 43.242.96.0/22 43.242.144.0/20 43.242.160.0/21 43.242.168.0/22 43.242.180.0/22 43.242.188.0/22 43.242.192.0/21 43.242.204.0/22 43.242.216.0/21 43.242.252.0/22 43.243.4.0/22 43.243.8.0/21 43.243.16.0/22 43.243.24.0/22 43.243.88.0/22 43.243.128.0/22 43.243.136.0/22 43.243.144.0/21 43.243.156.0/22 43.243.168.0/22 43.243.180.0/22 43.243.188.0/22 43.243.228.0/22 43.243.232.0/22 43.243.244.0/22 43.246.0.0/18 43.246.64.0/19 43.246.96.0/22 43.246.112.0/22 43.246.212.0/22 43.246.228.0/22 43.247.4.0/22 43.247.8.0/22 43.247.44.0/22 43.247.48.0/22 43.247.68.0/22 43.247.76.0/22 43.247.84.0/22 43.247.88.0/21 43.247.96.0/21 43.247.108.0/22 43.247.112.0/22 43.247.148.0/22 43.247.152.0/22 43.247.176.0/20 43.247.196.0/22 43.247.200.0/21 43.247.208.0/20 43.247.224.0/19 43.248.0.0/21 43.248.20.0/22 43.248.28.0/22 43.248.48.0/22 43.248.76.0/22 43.248.80.0/20 43.248.96.0/19 43.248.128.0/20 43.248.144.0/21 43.248.176.0/20 43.248.192.0/20 43.248.208.0/22 43.248.228.0/22 43.248.232.0/22 43.248.244.0/22 43.249.4.0/22 43.249.8.0/22 43.249.120.0/22 43.249.132.0/22 43.249.136.0/22 43.249.144.0/20 43.249.160.0/21 43.249.168.0/22 43.249.192.0/22 43.249.236.0/22 43.250.4.0/22 43.250.12.0/22 43.250.16.0/21 43.250.28.0/22 43.250.32.0/21 43.250.72.0/22 43.250.96.0/20 43.250.112.0/21 43.250.128.0/22 43.250.144.0/21 43.250.160.0/22 43.250.168.0/21 43.250.176.0/22 43.250.200.0/22 43.250.212.0/22 43.250.216.0/21 43.250.236.0/22 43.250.244.0/22 43.251.4.0/22 43.251.8.0/21 43.251.36.0/22 43.251.100.0/22 43.251.116.0/22 43.251.192.0/22 43.251.232.0/21 43.251.244.0/22 43.252.40.0/22 43.252.48.0/22 43.252.56.0/22 43.252.224.0/22 43.254.0.0/21 43.254.8.0/22 43.254.24.0/22 43.254.36.0/22 43.254.44.0/22 43.254.52.0/22 43.254.64.0/22 43.254.72.0/22 43.254.84.0/22 43.254.88.0/21 43.254.100.0/22 43.254.104.0/22 43.254.112.0/21 43.254.128.0/22 43.254.136.0/21 43.254.144.0/20 43.254.168.0/21 43.254.180.0/22 43.254.184.0/21 43.254.192.0/21 43.254.200.0/22 43.254.208.0/22 43.254.220.0/22 43.254.224.0/20 43.254.240.0/22 43.254.248.0/21 43.255.0.0/21 43.255.8.0/22 43.255.16.0/22 43.255.48.0/22 43.255.64.0/20 43.255.84.0/22 43.255.96.0/22 43.255.108.0/22 43.255.144.0/22 43.255.168.0/22 43.255.176.0/22 43.255.184.0/22 43.255.192.0/22 43.255.200.0/21 43.255.208.0/21 43.255.224.0/21 43.255.232.0/22 43.255.244.0/22 45.40.192.0/18 45.65.16.0/20 45.112.132.0/22 45.112.188.0/22 45.112.208.0/20 45.112.228.0/22 45.112.232.0/21 45.113.12.0/22 45.113.16.0/20 45.113.40.0/22 45.113.52.0/22 45.113.56.0/22 45.113.72.0/22 45.113.144.0/21 45.113.168.0/22 45.113.176.0/22 45.113.184.0/22 45.113.200.0/21 45.113.208.0/20 45.113.240.0/22 45.113.252.0/22 45.114.0.0/22 45.114.12.0/22 45.114.32.0/22 45.114.40.0/22 45.114.52.0/22 45.114.96.0/22 45.114.104.0/21 45.114.124.0/22 45.114.136.0/22 45.114.196.0/22 45.114.200.0/22 45.114.228.0/22 45.114.252.0/22 45.115.44.0/22 45.115.100.0/22 45.115.120.0/22 45.115.132.0/22 45.115.144.0/22 45.115.156.0/22 45.115.164.0/22 45.115.200.0/22 45.115.212.0/22 45.115.228.0/22 45.115.236.0/22 45.115.244.0/22 45.115.248.0/22 45.116.12.0/22 45.116.16.0/22 45.116.24.0/22 45.116.32.0/21 45.116.52.0/22 45.116.96.0/21 45.116.140.0/22 45.116.152.0/22 45.116.208.0/22 45.117.8.0/22 45.117.20.0/22 45.117.68.0/22 45.117.124.0/22 45.117.252.0/22 45.119.52.0/22 45.119.60.0/22 45.119.64.0/21 45.119.72.0/22 45.119.104.0/22 45.119.116.0/22 45.119.232.0/22 45.120.100.0/22 45.120.140.0/22 45.120.164.0/22 45.120.220.0/22 45.120.240.0/22 45.121.20.0/22 45.121.52.0/22 45.121.64.0/21 45.121.72.0/22 45.121.92.0/22 45.121.96.0/22 45.121.172.0/22 45.121.176.0/22 45.121.212.0/22 45.121.240.0/20 45.122.0.0/19 45.122.32.0/21 45.122.40.0/22 45.122.60.0/22 45.122.64.0/19 45.122.96.0/20 45.122.112.0/21 45.122.160.0/19 45.122.192.0/20 45.122.208.0/21 45.122.216.0/22 45.123.28.0/22 45.123.32.0/21 45.123.44.0/22 45.123.48.0/20 45.123.64.0/20 45.123.80.0/21 45.123.88.0/22 45.123.120.0/22 45.123.128.0/21 45.123.136.0/22 45.123.148.0/22 45.123.152.0/21 45.123.164.0/22 45.123.168.0/21 45.123.176.0/21 45.123.184.0/22 45.123.204.0/22 45.123.212.0/22 45.123.224.0/19 45.124.0.0/22 45.124.20.0/22 45.124.28.0/22 45.124.32.0/21 45.124.44.0/22 45.124.68.0/22 45.124.76.0/22 45.124.80.0/22 45.124.100.0/22 45.124.124.0/22 45.124.172.0/22 45.124.176.0/22 45.124.208.0/22 45.124.248.0/22 45.125.12.0/22 45.125.16.0/22 45.125.24.0/21 45.125.32.0/22 45.125.44.0/22 45.125.52.0/22 45.125.56.0/22 45.125.76.0/22 45.125.80.0/20 45.125.96.0/21 45.125.104.0/22 45.125.136.0/22 45.126.48.0/21 45.126.100.0/22 45.126.108.0/22 45.126.112.0/21 45.126.120.0/22 45.126.212.0/22 45.126.220.0/22 45.127.8.0/21 45.127.96.0/22 45.127.116.0/22 45.127.124.0/22 45.127.128.0/22 45.127.144.0/21 45.127.156.0/22 45.127.216.0/22 45.248.8.0/22 45.248.80.0/21 45.248.88.0/22 45.248.96.0/20 45.248.128.0/21 45.248.204.0/22 45.248.208.0/20 45.248.224.0/19 45.249.0.0/21 45.249.12.0/22 45.249.16.0/20 45.249.32.0/21 45.249.92.0/22 45.249.112.0/22 45.249.180.0/22 45.249.188.0/22 45.249.192.0/20 45.249.208.0/21 45.250.12.0/22 45.250.16.0/22 45.250.28.0/22 45.250.32.0/21 45.250.40.0/22 45.250.76.0/22 45.250.80.0/20 45.250.96.0/22 45.250.104.0/21 45.250.112.0/20 45.250.128.0/20 45.250.144.0/21 45.250.152.0/22 45.250.164.0/22 45.250.180.0/22 45.250.184.0/21 45.250.192.0/22 45.251.0.0/22 45.251.8.0/22 45.251.16.0/21 45.251.52.0/22 45.251.84.0/22 45.251.88.0/21 45.251.96.0/21 45.251.120.0/21 45.251.136.0/21 45.251.144.0/20 45.251.160.0/19 45.251.192.0/19 45.251.224.0/22 45.251.240.0/22 45.252.0.0/19 45.252.32.0/20 45.252.48.0/22 45.252.60.0/22 45.252.84.0/22 45.252.88.0/21 45.252.96.0/19 45.252.128.0/19 45.252.160.0/20 45.252.176.0/22 45.252.192.0/19 45.252.224.0/21 45.252.232.0/22 45.253.0.0/18 45.253.64.0/20 45.253.80.0/21 45.253.92.0/22 45.253.96.0/20 45.253.112.0/21 45.253.120.0/22 45.253.132.0/22 45.253.136.0/21 45.253.144.0/20 45.253.160.0/19 45.253.192.0/19 45.253.224.0/20 45.253.240.0/22 45.254.0.0/19 45.254.40.0/22 45.254.48.0/20 45.254.64.0/18 45.254.128.0/18 45.254.192.0/19 45.254.224.0/21 45.254.236.0/22 45.254.240.0/22 45.254.248.0/22 45.255.0.0/17 45.255.132.0/22 45.255.136.0/21 45.255.144.0/20 45.255.160.0/19 45.255.192.0/19 45.255.224.0/20 45.255.240.0/21 45.255.248.0/22 47.92.0.0/14 47.96.0.0/11 49.4.0.0/14 49.51.0.0/16 49.52.0.0/14 49.64.0.0/11 49.112.0.0/13 49.120.0.0/14 49.128.0.0/24 49.128.2.0/23 49.128.4.0/22 49.140.0.0/15 49.152.0.0/14 49.208.0.0/14 49.220.0.0/14 49.232.0.0/14 49.239.0.0/18 49.239.192.0/18 49.246.224.0/19 52.80.0.0/14 52.130.0.0/15 54.222.0.0/15 58.14.0.0/15 58.16.0.0/13 58.24.0.0/15 58.30.0.0/15 58.32.0.0/11 58.65.232.0/21 58.66.0.0/15 58.68.128.0/17 58.82.0.0/17 58.83.0.0/16 58.87.64.0/18 58.99.128.0/17 58.100.0.0/15 58.116.0.0/14 58.128.0.0/13 58.144.0.0/16 58.154.0.0/15 58.192.0.0/11 58.240.0.0/12 59.32.0.0/11 59.64.0.0/12 59.80.0.0/14 59.107.0.0/16 59.108.0.0/14 59.151.0.0/17 59.152.16.0/20 59.152.32.0/21 59.152.64.0/20 59.152.112.0/21 59.153.4.0/22 59.153.32.0/22 59.153.60.0/22 59.153.64.0/21 59.153.72.0/22 59.153.92.0/22 59.153.116.0/22 59.153.136.0/22 59.153.152.0/21 59.153.164.0/22 59.153.168.0/21 59.153.176.0/20 59.153.192.0/22 59.155.0.0/16 59.172.0.0/14 59.191.0.0/17 59.191.240.0/20 59.192.0.0/10 60.0.0.0/11 60.55.0.0/16 60.63.0.0/16 60.160.0.0/11 60.194.0.0/15 60.200.0.0/13 60.208.0.0/12 60.232.0.0/15 60.235.0.0/16 60.245.128.0/17 60.247.0.0/16 60.252.0.0/16 60.253.128.0/17 60.255.0.0/16 61.4.80.0/20 61.4.176.0/20 61.8.160.0/20 61.14.212.0/22 61.14.216.0/21 61.14.240.0/21 61.28.0.0/17 61.29.128.0/18 61.29.192.0/19 61.29.224.0/20 61.45.128.0/18 61.45.224.0/20 61.47.128.0/18 61.48.0.0/13 61.87.192.0/18 61.128.0.0/10 61.232.0.0/14 61.236.0.0/15 61.240.0.0/14 62.234.0.0/16 68.79.0.0/18 69.230.192.0/18 69.231.128.0/18 69.234.192.0/18 69.235.128.0/18 71.131.192.0/18 71.132.0.0/18 71.136.64.0/18 71.137.0.0/18 81.68.0.0/14 82.156.0.0/15 91.234.36.0/24 94.191.0.0/17 101.0.0.0/22 101.1.0.0/22 101.2.172.0/22 101.4.0.0/14 101.16.0.0/12 101.33.128.0/17 101.34.0.0/15 101.36.0.0/14 101.40.0.0/13 101.48.0.0/15 101.50.8.0/21 101.50.56.0/22 101.52.0.0/16 101.53.100.0/22 101.54.0.0/16 101.55.224.0/21 101.64.0.0/13 101.72.0.0/14 101.76.0.0/15 101.78.0.0/22 101.78.32.0/19 101.80.0.0/12 101.96.0.0/21 101.96.8.0/22 101.96.16.0/20 101.96.128.0/17 101.99.96.0/19 101.101.64.0/19 101.101.100.0/24 101.101.102.0/23 101.101.104.0/21 101.101.112.0/20 101.102.64.0/19 101.102.100.0/23 101.102.102.0/24 101.102.104.0/21 101.102.112.0/20 101.104.0.0/14 101.110.64.0/19 101.110.96.0/20 101.110.116.0/22 101.110.120.0/21 101.120.0.0/14 101.124.0.0/15 101.126.0.0/16 101.128.0.0/22 101.128.8.0/21 101.128.16.0/20 101.128.32.0/19 101.129.0.0/16 101.130.0.0/15 101.132.0.0/14 101.144.0.0/12 101.192.0.0/13 101.200.0.0/15 101.203.128.0/19 101.203.160.0/21 101.203.172.0/22 101.203.176.0/20 101.204.0.0/14 101.224.0.0/13 101.232.0.0/15 101.234.64.0/21 101.234.76.0/22 101.234.80.0/20 101.234.96.0/19 101.236.0.0/14 101.240.0.0/13 101.248.0.0/15 101.251.0.0/22 101.251.8.0/21 101.251.16.0/20 101.251.32.0/19 101.251.64.0/18 101.251.128.0/17 101.252.0.0/15 101.254.0.0/16 103.1.8.0/22 103.1.20.0/22 103.1.24.0/22 103.1.72.0/22 103.1.88.0/22 103.1.168.0/22 103.2.108.0/22 103.2.156.0/22 103.2.164.0/22 103.2.200.0/21 103.2.208.0/21 103.3.84.0/22 103.3.88.0/21 103.3.96.0/19 103.3.128.0/20 103.3.148.0/22 103.3.152.0/21 103.4.56.0/22 103.4.168.0/22 103.4.184.0/22 103.4.224.0/22 103.5.36.0/22 103.5.52.0/22 103.5.56.0/22 103.5.152.0/22 103.5.168.0/22 103.5.192.0/22 103.5.252.0/22 103.6.76.0/22 103.6.108.0/22 103.6.220.0/22 103.6.228.0/22 103.7.4.0/22 103.7.28.0/22 103.7.140.0/22 103.7.212.0/22 103.7.216.0/21 103.8.0.0/21 103.8.8.0/22 103.8.32.0/22 103.8.52.0/22 103.8.68.0/22 103.8.108.0/22 103.8.156.0/22 103.8.200.0/21 103.8.220.0/22 103.9.8.0/22 103.9.24.0/22 103.9.108.0/22 103.9.152.0/22 103.9.192.0/22 103.9.248.0/21 103.10.0.0/22 103.10.16.0/22 103.10.84.0/22 103.10.140.0/22 103.11.16.0/22 103.11.168.0/22 103.11.180.0/22 103.12.32.0/22 103.12.68.0/22 103.12.92.0/22 103.12.136.0/22 103.12.184.0/22 103.12.232.0/22 103.13.12.0/22 103.13.124.0/22 103.13.144.0/22 103.13.196.0/22 103.13.220.0/22 103.13.244.0/22 103.14.32.0/22 103.14.84.0/22 103.14.100.0/22 103.14.132.0/22 103.14.136.0/22 103.14.156.0/22 103.14.240.0/22 103.15.4.0/22 103.15.8.0/22 103.15.16.0/22 103.15.96.0/22 103.15.200.0/22 103.16.52.0/22 103.16.80.0/21 103.16.88.0/22 103.16.108.0/22 103.16.124.0/22 103.17.40.0/22 103.17.64.0/22 103.17.120.0/22 103.17.136.0/22 103.17.160.0/22 103.17.204.0/22 103.17.228.0/22 103.18.192.0/22 103.18.208.0/21 103.18.224.0/22 103.19.0.0/22 103.19.12.0/22 103.19.40.0/21 103.19.64.0/21 103.19.72.0/22 103.19.232.0/22 103.20.12.0/22 103.20.32.0/22 103.20.44.0/22 103.20.68.0/22 103.20.112.0/22 103.20.128.0/22 103.20.160.0/22 103.20.248.0/22 103.21.112.0/21 103.21.136.0/21 103.21.176.0/22 103.21.208.0/22 103.21.240.0/22 103.22.0.0/18 103.22.64.0/19 103.22.100.0/22 103.22.104.0/21 103.22.112.0/20 103.22.188.0/22 103.22.228.0/22 103.22.252.0/22 103.23.8.0/22 103.23.56.0/22 103.23.160.0/21 103.23.176.0/22 103.23.228.0/22 103.24.24.0/22 103.24.116.0/22 103.24.128.0/22 103.24.144.0/22 103.24.176.0/22 103.24.184.0/22 103.24.220.0/22 103.24.228.0/22 103.24.248.0/21 103.25.8.0/23 103.25.20.0/22 103.25.24.0/21 103.25.32.0/21 103.25.40.0/22 103.25.48.0/22 103.25.64.0/21 103.25.148.0/22 103.25.156.0/22 103.25.216.0/22 103.26.0.0/22 103.26.64.0/22 103.26.76.0/22 103.26.132.0/22 103.26.156.0/22 103.26.160.0/22 103.26.228.0/22 103.26.240.0/22 103.27.4.0/22 103.27.12.0/22 103.27.24.0/22 103.27.56.0/22 103.27.96.0/22 103.27.184.0/22 103.27.208.0/21 103.27.240.0/22 103.28.4.0/22 103.28.8.0/22 103.28.184.0/22 103.28.204.0/22 103.28.212.0/22 103.29.16.0/22 103.29.128.0/21 103.29.136.0/22 103.30.20.0/22 103.30.96.0/22 103.30.148.0/22 103.30.200.0/22 103.30.228.0/22 103.30.236.0/22 103.31.0.0/22 103.31.48.0/20 103.31.64.0/21 103.31.148.0/22 103.31.160.0/22 103.31.168.0/22 103.31.200.0/22 103.31.236.0/22 103.32.0.0/15 103.34.0.0/16 103.35.0.0/19 103.35.32.0/20 103.35.48.0/22 103.35.104.0/22 103.35.116.0/22 103.35.180.0/22 103.35.200.0/22 103.35.220.0/22 103.36.28.0/22 103.36.36.0/22 103.36.56.0/21 103.36.64.0/22 103.36.72.0/22 103.36.96.0/22 103.36.132.0/22 103.36.136.0/22 103.36.160.0/19 103.36.192.0/19 103.36.224.0/20 103.36.240.0/21 103.37.0.0/22 103.37.12.0/22 103.37.16.0/22 103.37.24.0/22 103.37.44.0/22 103.37.52.0/22 103.37.56.0/22 103.37.72.0/22 103.37.100.0/22 103.37.104.0/22 103.37.124.0/22 103.37.136.0/21 103.37.144.0/20 103.37.160.0/21 103.37.172.0/22 103.37.176.0/22 103.37.188.0/22 103.37.208.0/20 103.37.248.0/21 103.38.0.0/22 103.38.32.0/22 103.38.40.0/21 103.38.56.0/22 103.38.76.0/22 103.38.84.0/22 103.38.92.0/22 103.38.96.0/22 103.38.116.0/22 103.38.132.0/22 103.38.140.0/22 103.38.224.0/21 103.38.232.0/22 103.38.252.0/22 103.39.16.0/22 103.39.64.0/22 103.39.88.0/22 103.39.100.0/22 103.39.104.0/21 103.39.160.0/19 103.39.200.0/21 103.39.208.0/20 103.39.224.0/21 103.39.232.0/22 103.40.12.0/22 103.40.16.0/20 103.40.32.0/20 103.40.88.0/22 103.40.100.0/22 103.40.192.0/22 103.40.212.0/22 103.40.220.0/22 103.40.228.0/22 103.40.232.0/21 103.40.240.0/20 103.41.0.0/22 103.41.16.0/22 103.41.52.0/22 103.41.140.0/22 103.41.148.0/22 103.41.152.0/22 103.41.160.0/21 103.41.220.0/22 103.41.224.0/21 103.41.232.0/22 103.42.8.0/22 103.42.24.0/21 103.42.32.0/22 103.42.64.0/21 103.42.76.0/22 103.42.104.0/22 103.42.180.0/22 103.42.232.0/22 103.43.16.0/22 103.43.84.0/22 103.43.96.0/21 103.43.104.0/22 103.43.124.0/22 103.43.184.0/22 103.43.192.0/21 103.43.208.0/22 103.43.220.0/22 103.43.224.0/22 103.43.232.0/22 103.43.240.0/22 103.44.56.0/22 103.44.80.0/22 103.44.88.0/22 103.44.120.0/21 103.44.132.0/22 103.44.144.0/22 103.44.168.0/22 103.44.176.0/20 103.44.192.0/20 103.44.224.0/22 103.44.236.0/22 103.44.240.0/20 103.45.0.0/18 103.45.72.0/21 103.45.80.0/20 103.45.96.0/19 103.45.128.0/18 103.45.192.0/19 103.45.224.0/22 103.45.248.0/22 103.46.0.0/22 103.46.12.0/22 103.46.16.0/20 103.46.32.0/19 103.46.64.0/18 103.46.128.0/21 103.46.136.0/22 103.46.152.0/21 103.46.160.0/20 103.46.176.0/21 103.46.244.0/22 103.46.248.0/22 103.47.4.0/22 103.47.20.0/22 103.47.36.0/22 103.47.40.0/22 103.47.48.0/22 103.47.80.0/22 103.47.96.0/22 103.47.108.0/22 103.47.116.0/22 103.47.120.0/22 103.47.136.0/21 103.47.212.0/22 103.48.52.0/22 103.48.92.0/22 103.48.144.0/20 103.48.202.0/23 103.48.216.0/21 103.48.224.0/20 103.48.240.0/21 103.49.12.0/22 103.49.20.0/22 103.49.72.0/21 103.49.92.0/22 103.49.96.0/22 103.49.108.0/22 103.49.128.0/22 103.49.176.0/21 103.49.196.0/22 103.49.248.0/22 103.50.36.0/22 103.50.44.0/22 103.50.48.0/20 103.50.64.0/21 103.50.72.0/22 103.50.108.0/22 103.50.112.0/20 103.50.132.0/22 103.50.136.0/21 103.50.172.0/22 103.50.176.0/20 103.50.192.0/21 103.50.200.0/22 103.50.220.0/22 103.50.224.0/20 103.50.240.0/21 103.50.248.0/22 103.52.40.0/22 103.52.72.0/21 103.52.80.0/21 103.52.96.0/21 103.52.104.0/22 103.52.160.0/21 103.52.172.0/22 103.52.176.0/22 103.52.184.0/22 103.52.196.0/22 103.53.4.0/22 103.53.64.0/21 103.53.92.0/22 103.53.100.0/22 103.53.124.0/22 103.53.128.0/20 103.53.144.0/22 103.53.180.0/22 103.53.204.0/22 103.53.208.0/21 103.53.216.0/22 103.53.236.0/22 103.53.248.0/22 103.54.8.0/22 103.54.48.0/22 103.54.60.0/22 103.54.160.0/21 103.54.212.0/22 103.54.240.0/22 103.55.24.0/22 103.55.80.0/22 103.55.120.0/22 103.55.152.0/22 103.55.172.0/22 103.55.204.0/22 103.55.208.0/22 103.55.228.0/22 103.55.236.0/22 103.56.8.0/22 103.56.16.0/21 103.56.32.0/22 103.56.52.0/22 103.56.56.0/21 103.56.72.0/21 103.56.140.0/22 103.56.152.0/22 103.56.184.0/22 103.56.200.0/22 103.57.12.0/22 103.57.52.0/22 103.57.56.0/22 103.57.76.0/22 103.57.136.0/22 103.57.196.0/22 103.58.24.0/22 103.59.76.0/22 103.59.100.0/22 103.59.112.0/20 103.59.128.0/22 103.59.148.0/22 103.59.164.0/22 103.60.32.0/22 103.60.44.0/22 103.60.164.0/22 103.60.228.0/22 103.60.236.0/22 103.61.60.0/22 103.61.104.0/22 103.61.140.0/22 103.61.152.0/21 103.61.160.0/22 103.61.172.0/22 103.61.176.0/22 103.61.184.0/21 103.62.24.0/22 103.62.52.0/22 103.62.72.0/21 103.62.80.0/21 103.62.88.0/22 103.62.96.0/19 103.62.128.0/21 103.62.156.0/22 103.62.160.0/19 103.62.192.0/22 103.62.204.0/22 103.62.208.0/20 103.62.224.0/22 103.63.32.0/19 103.63.64.0/20 103.63.80.0/21 103.63.88.0/22 103.63.140.0/22 103.63.144.0/22 103.63.152.0/22 103.63.160.0/20 103.63.176.0/21 103.63.184.0/22 103.63.192.0/20 103.63.208.0/22 103.63.240.0/20 103.64.0.0/21 103.64.24.0/21 103.64.32.0/19 103.64.64.0/18 103.64.140.0/22 103.64.144.0/22 103.64.152.0/21 103.64.160.0/19 103.64.192.0/18 103.65.0.0/20 103.65.16.0/22 103.65.36.0/22 103.65.40.0/22 103.65.48.0/20 103.65.64.0/19 103.65.100.0/22 103.65.104.0/21 103.65.112.0/22 103.65.144.0/20 103.65.160.0/20 103.66.32.0/22 103.66.40.0/22 103.66.92.0/22 103.66.108.0/22 103.66.200.0/22 103.66.216.0/22 103.66.240.0/20 103.67.0.0/21 103.67.8.0/22 103.67.100.0/22 103.67.104.0/21 103.67.112.0/20 103.67.128.0/20 103.67.144.0/21 103.67.172.0/22 103.67.192.0/22 103.67.212.0/22 103.67.252.0/22 103.68.64.0/22 103.68.88.0/22 103.68.100.0/22 103.68.128.0/22 103.68.192.0/22 103.69.16.0/22 103.69.116.0/22 103.69.132.0/22 103.69.152.0/22 103.69.212.0/22 103.70.8.0/22 103.70.148.0/22 103.70.184.0/22 103.70.220.0/22 103.70.224.0/22 103.70.236.0/22 103.70.252.0/22 103.71.0.0/22 103.71.32.0/22 103.71.48.0/22 103.71.68.0/22 103.71.72.0/22 103.71.80.0/21 103.71.88.0/22 103.71.120.0/21 103.71.128.0/22 103.71.144.0/22 103.71.196.0/22 103.71.200.0/22 103.71.232.0/22 103.72.12.0/22 103.72.16.0/20 103.72.32.0/20 103.72.48.0/21 103.72.112.0/20 103.72.128.0/21 103.72.144.0/21 103.72.172.0/22 103.72.180.0/22 103.72.224.0/19 103.73.0.0/19 103.73.48.0/22 103.73.88.0/22 103.73.96.0/22 103.73.116.0/22 103.73.120.0/22 103.73.128.0/20 103.73.144.0/22 103.73.168.0/22 103.73.176.0/22 103.73.204.0/22 103.73.208.0/22 103.73.240.0/21 103.73.248.0/22 103.74.24.0/21 103.74.32.0/20 103.74.48.0/22 103.74.56.0/21 103.74.80.0/22 103.74.124.0/22 103.74.148.0/22 103.74.152.0/21 103.74.204.0/22 103.74.232.0/22 103.75.16.0/22 103.75.88.0/21 103.75.104.0/21 103.75.112.0/22 103.75.120.0/22 103.75.128.0/22 103.75.144.0/22 103.75.152.0/22 103.75.236.0/24 103.76.60.0/22 103.76.64.0/21 103.76.72.0/22 103.76.84.0/22 103.76.92.0/22 103.76.216.0/21 103.76.224.0/22 103.77.28.0/22 103.77.52.0/22 103.77.56.0/22 103.77.72.0/22 103.77.88.0/21 103.77.132.0/22 103.77.148.0/22 103.77.220.0/22 103.78.56.0/21 103.78.64.0/21 103.78.124.0/22 103.78.172.0/22 103.78.176.0/22 103.78.196.0/22 103.78.228.0/22 103.79.24.0/21 103.79.36.0/22 103.79.40.0/21 103.79.52.0/22 103.79.56.0/21 103.79.64.0/21 103.79.80.0/21 103.79.120.0/22 103.79.136.0/22 103.79.188.0/22 103.79.192.0/20 103.79.208.0/21 103.79.240.0/22 103.80.24.0/21 103.80.44.0/22 103.80.72.0/22 103.80.176.0/21 103.80.184.0/22 103.80.192.0/22 103.80.200.0/22 103.80.232.0/22 103.81.4.0/22 103.81.8.0/22 103.81.16.0/21 103.81.44.0/22 103.81.48.0/22 103.81.96.0/22 103.81.120.0/22 103.81.148.0/22 103.81.164.0/22 103.81.168.0/22 103.81.183.0/24 103.81.184.0/22 103.81.200.0/22 103.81.232.0/22 103.82.52.0/22 103.82.60.0/22 103.82.68.0/22 103.82.84.0/22 103.82.104.0/22 103.82.224.0/22 103.82.236.0/22 103.83.44.0/22 103.83.52.0/22 103.83.60.0/22 103.83.64.0/22 103.83.72.0/22 103.83.112.0/22 103.83.120.0/22 103.83.180.0/22 103.84.0.0/22 103.84.12.0/22 103.84.16.0/20 103.84.48.0/22 103.84.64.0/22 103.84.72.0/22 103.84.92.0/22 103.84.108.0/22 103.84.136.0/22 103.85.20.0/22 103.85.24.0/22 103.85.44.0/22 103.85.48.0/22 103.85.84.0/22 103.85.136.0/22 103.85.144.0/22 103.85.164.0/22 103.85.168.0/21 103.85.176.0/22 103.85.224.0/22 103.86.28.0/22 103.86.32.0/22 103.86.44.0/22 103.86.60.0/22 103.86.68.0/22 103.86.80.0/21 103.86.88.0/22 103.86.204.0/22 103.86.208.0/20 103.86.224.0/19 103.87.0.0/21 103.87.20.0/22 103.87.32.0/22 103.87.72.0/22 103.87.96.0/22 103.87.132.0/22 103.87.180.0/22 103.87.224.0/22 103.88.4.0/22 103.88.8.0/21 103.88.16.0/21 103.88.32.0/21 103.88.60.0/22 103.88.64.0/22 103.88.72.0/22 103.88.96.0/21 103.88.164.0/22 103.88.176.0/22 103.88.184.0/21 103.88.212.0/22 103.89.28.0/22 103.89.96.0/20 103.89.112.0/21 103.89.148.0/22 103.89.172.0/22 103.89.184.0/21 103.89.192.0/19 103.89.224.0/21 103.90.52.0/22 103.90.92.0/22 103.90.100.0/22 103.90.104.0/21 103.90.112.0/20 103.90.128.0/21 103.90.152.0/22 103.90.168.0/22 103.90.173.0/24 103.90.176.0/22 103.90.188.0/22 103.90.192.0/22 103.91.36.0/22 103.91.40.0/22 103.91.108.0/22 103.91.152.0/22 103.91.176.0/22 103.91.200.0/22 103.91.208.0/21 103.91.219.0/24 103.91.236.0/22 103.91.252.0/22 103.92.0.0/20 103.92.48.0/20 103.92.64.0/20 103.92.80.0/22 103.92.86.0/24 103.92.88.0/22 103.92.108.0/22 103.92.124.0/22 103.92.128.0/24 103.92.132.0/22 103.92.156.0/22 103.92.164.0/22 103.92.168.0/21 103.92.176.0/20 103.92.192.0/22 103.92.236.0/22 103.92.240.0/20 103.93.0.0/21 103.93.28.0/22 103.93.76.0/22 103.93.84.0/22 103.93.121.0/24 103.93.152.0/22 103.93.180.0/22 103.93.204.0/22 103.94.12.0/22 103.94.20.0/22 103.94.28.0/22 103.94.32.0/20 103.94.72.0/22 103.94.88.0/22 103.94.116.0/22 103.94.160.0/22 103.94.180.0/22 103.94.200.0/22 103.95.28.0/22 103.95.52.0/22 103.95.64.0/21 103.95.88.0/21 103.95.116.0/22 103.95.128.0/22 103.95.136.0/21 103.95.144.0/22 103.95.152.0/22 103.95.207.0/24 103.95.216.0/21 103.95.224.0/22 103.95.236.0/22 103.95.240.0/20 103.96.0.0/22 103.96.8.0/22 103.96.80.0/22 103.96.124.0/22 103.96.136.0/22 103.96.140.0/24 103.96.148.0/22 103.96.152.0/21 103.96.160.0/19 103.96.192.0/20 103.96.208.0/21 103.96.216.0/22 103.97.8.0/21 103.97.16.0/20 103.97.32.0/21 103.97.40.0/22 103.97.56.0/21 103.97.64.0/21 103.97.72.0/22 103.97.80.0/22 103.97.112.0/21 103.97.128.0/22 103.97.144.0/21 103.97.188.0/22 103.97.192.0/22 103.97.224.0/22 103.97.228.0/23 103.98.28.0/23 103.98.40.0/21 103.98.48.0/22 103.98.56.0/22 103.98.80.0/22 103.98.88.0/21 103.98.96.0/21 103.98.124.0/22 103.98.136.0/21 103.98.144.0/22 103.98.164.0/22 103.98.168.0/22 103.98.180.0/22 103.98.196.0/22 103.98.216.0/21 103.98.224.0/21 103.98.232.0/22 103.98.240.0/20 103.99.40.0/23 103.99.52.0/22 103.99.56.0/21 103.99.76.0/22 103.99.104.0/22 103.99.116.0/22 103.99.120.0/22 103.99.152.0/22 103.99.220.0/22 103.99.232.0/21 103.100.0.0/22 103.100.32.0/22 103.100.40.0/22 103.100.48.0/20 103.100.64.0/21 103.100.88.0/22 103.100.116.0/22 103.100.140.0/22 103.100.144.0/22 103.100.236.0/22 103.100.240.0/22 103.100.248.0/21 103.101.4.0/22 103.101.8.0/21 103.101.28.0/22 103.101.60.0/22 103.101.120.0/21 103.101.144.0/21 103.101.153.0/24 103.101.180.0/22 103.101.184.0/22 103.102.76.0/22 103.102.80.0/22 103.102.168.0/21 103.102.180.0/22 103.102.184.0/21 103.102.192.0/21 103.102.200.0/22 103.102.208.0/21 103.103.12.0/22 103.103.16.0/22 103.103.36.0/22 103.103.68.0/22 103.103.72.0/22 103.103.176.0/22 103.103.188.0/22 103.103.200.0/21 103.103.220.0/22 103.103.224.0/21 103.103.232.0/22 103.103.248.0/21 103.104.0.0/21 103.104.36.0/22 103.104.40.0/22 103.104.64.0/22 103.104.104.0/22 103.104.152.0/22 103.104.168.0/21 103.104.188.0/22 103.104.198.0/23 103.104.252.0/22 103.105.0.0/21 103.105.12.0/22 103.105.16.0/22 103.105.23.0/24 103.105.56.0/21 103.105.116.0/22 103.105.132.0/22 103.105.180.0/22 103.105.184.0/22 103.105.200.0/21 103.105.220.0/22 103.106.36.0/22 103.106.40.0/21 103.106.60.0/22 103.106.68.0/22 103.106.96.0/22 103.106.120.0/22 103.106.128.0/21 103.106.160.0/22 103.106.188.0/22 103.106.196.0/22 103.106.202.0/23 103.106.212.0/22 103.106.244.0/22 103.106.252.0/22 103.107.0.0/22 103.107.8.0/24 103.107.28.0/22 103.107.32.0/22 103.107.44.0/22 103.107.72.0/22 103.107.108.0/22 103.107.164.0/22 103.107.168.0/22 103.107.188.0/22 103.107.192.0/22 103.107.208.0/20 103.108.52.0/22 103.108.64.0/22 103.108.160.0/21 103.108.184.0/23 103.108.188.0/23 103.108.192.0/21 103.108.208.0/21 103.108.224.0/22 103.108.244.0/22 103.108.251.0/24 103.109.20.0/22 103.109.48.0/22 103.109.88.0/22 103.109.106.0/23 103.109.248.0/22 103.110.32.0/22 103.110.80.0/23 103.110.92.0/22 103.110.100.0/22 103.110.116.0/22 103.110.127.0/24 103.110.128.0/23 103.110.131.0/24 103.110.132.0/22 103.110.136.0/22 103.110.152.0/21 103.110.188.0/22 103.110.204.0/22 103.111.38.0/23 103.111.64.0/22 103.111.172.0/22 103.111.252.0/22 103.112.28.0/22 103.112.68.0/22 103.112.72.0/22 103.112.88.0/21 103.112.96.0/22 103.112.108.0/22 103.112.112.0/21 103.112.140.0/22 103.112.172.0/22 103.112.184.0/22 103.112.208.0/22 103.113.4.0/22 103.113.92.0/22 103.113.144.0/22 103.113.220.0/22 103.113.232.0/21 103.114.4.0/22 103.114.28.0/22 103.114.68.0/22 103.114.72.0/22 103.114.100.0/22 103.114.132.0/22 103.114.148.0/22 103.114.156.0/22 103.114.176.0/22 103.114.212.0/22 103.114.236.0/22 103.114.240.0/22 103.115.16.0/22 103.115.40.0/21 103.115.48.0/20 103.115.64.0/21 103.115.92.0/22 103.115.120.0/22 103.115.148.0/22 103.115.204.0/23 103.115.248.0/22 103.116.20.0/22 103.116.40.0/22 103.116.64.0/22 103.116.72.0/21 103.116.92.0/22 103.116.120.0/22 103.116.128.0/22 103.116.132.0/23 103.116.148.0/22 103.116.184.0/22 103.116.206.0/23 103.116.220.0/22 103.116.224.0/21 103.117.16.0/22 103.117.72.0/22 103.117.88.0/22 103.117.132.0/22 103.117.136.0/22 103.117.188.0/22 103.117.220.0/22 103.118.19.0/24 103.118.36.0/22 103.118.52.0/22 103.118.56.0/21 103.118.64.0/21 103.118.72.0/22 103.118.88.0/22 103.118.173.0/24 103.118.192.0/19 103.118.240.0/20 103.119.0.0/22 103.119.12.0/22 103.119.16.0/22 103.119.28.0/22 103.119.44.0/22 103.119.104.0/22 103.119.115.0/24 103.119.156.0/22 103.119.180.0/22 103.119.200.0/22 103.119.224.0/22 103.120.52.0/22 103.120.72.0/22 103.120.76.0/24 103.120.88.0/22 103.120.96.0/21 103.120.140.0/22 103.120.196.0/22 103.120.224.0/22 103.121.52.0/22 103.121.92.0/22 103.121.160.0/21 103.121.250.0/24 103.121.252.0/22 103.122.48.0/22 103.122.176.0/22 103.122.192.0/22 103.122.240.0/22 103.123.4.0/22 103.123.56.0/22 103.123.88.0/21 103.123.116.0/22 103.123.160.0/22 103.123.176.0/22 103.123.200.0/21 103.123.208.0/21 103.124.24.0/22 103.124.48.0/22 103.124.64.0/22 103.124.212.0/22 103.124.216.0/22 103.125.20.0/22 103.125.44.0/22 103.125.132.0/22 103.125.164.0/22 103.125.196.0/22 103.125.236.0/22 103.125.248.0/22 103.126.0.0/22 103.126.16.0/22 103.126.44.0/22 103.126.100.0/22 103.126.124.0/22 103.126.128.0/21 103.126.208.0/22 103.126.241.0/24 103.129.52.0/22 103.130.132.0/22 103.130.152.0/24 103.130.160.0/22 103.130.228.0/22 103.131.20.0/22 103.131.36.0/22 103.131.152.0/22 103.131.168.0/22 103.131.176.0/22 103.131.224.0/21 103.131.240.0/22 103.132.60.0/22 103.132.64.0/20 103.132.80.0/22 103.132.104.0/21 103.132.112.0/21 103.132.120.0/22 103.132.160.0/21 103.132.188.0/22 103.132.208.0/21 103.132.234.0/23 103.133.12.0/22 103.133.40.0/22 103.133.128.0/22 103.133.136.0/22 103.133.176.0/22 103.133.232.0/22 103.134.12.0/24 103.134.196.0/22 103.135.80.0/22 103.135.124.0/22 103.135.148.0/22 103.135.156.0/22 103.135.160.0/21 103.135.176.0/22 103.135.184.0/22 103.135.192.0/21 103.135.236.0/22 103.136.128.0/22 103.136.232.0/22 103.137.58.0/23 103.137.60.0/24 103.137.76.0/22 103.137.136.0/23 103.137.149.0/24 103.137.180.0/22 103.137.236.0/22 103.138.2.0/23 103.138.12.0/23 103.138.80.0/22 103.138.134.0/23 103.138.156.0/23 103.138.208.0/23 103.138.220.0/23 103.138.246.0/23 103.138.248.0/23 103.139.0.0/22 103.139.22.0/23 103.139.113.0/24 103.139.134.0/23 103.139.136.0/23 103.139.172.0/23 103.139.200.0/23 103.139.204.0/23 103.139.212.0/23 103.140.8.0/23 103.140.14.0/23 103.140.46.0/23 103.140.70.0/23 103.140.126.0/23 103.140.140.0/23 103.140.144.0/23 103.140.152.0/23 103.140.192.0/22 103.140.228.0/23 103.141.10.0/23 103.141.36.0/23 103.141.58.0/23 103.141.128.0/23 103.141.186.0/23 103.141.190.0/23 103.141.242.0/23 103.142.0.0/23 103.142.28.0/23 103.142.58.0/23 103.142.82.0/23 103.142.96.0/23 103.142.102.0/23 103.142.122.0/23 103.142.126.0/24 103.142.128.0/23 103.142.140.0/23 103.142.154.0/23 103.142.156.0/23 103.142.172.0/23 103.142.180.0/23 103.142.186.0/23 103.142.190.0/23 103.142.220.0/23 103.142.230.0/24 103.142.234.0/23 103.142.238.0/23 103.142.248.0/23 103.143.16.0/22 103.143.31.0/24 103.143.74.0/23 103.143.120.0/23 103.143.124.0/23 103.143.132.0/22 103.143.174.0/23 103.143.228.0/23 103.144.40.0/23 103.144.52.0/23 103.144.66.0/23 103.144.70.0/23 103.144.72.0/23 103.144.88.0/24 103.144.108.0/23 103.144.136.0/23 103.144.148.0/23 103.144.158.0/23 103.144.240.0/23 103.145.38.0/23 103.145.40.0/22 103.145.60.0/23 103.145.72.0/23 103.145.80.0/23 103.145.86.0/23 103.145.92.0/22 103.145.98.0/23 103.145.106.0/23 103.145.122.0/23 103.145.188.0/22 103.146.6.0/23 103.146.72.0/23 103.146.88.0/22 103.146.124.0/23 103.192.0.0/19 103.192.48.0/21 103.192.56.0/22 103.192.84.0/22 103.192.88.0/21 103.192.96.0/20 103.192.112.0/22 103.192.128.0/20 103.192.144.0/22 103.192.164.0/22 103.192.188.0/22 103.192.208.0/21 103.192.216.0/22 103.192.252.0/22 103.193.40.0/21 103.193.120.0/21 103.193.140.0/22 103.193.144.0/21 103.193.160.0/22 103.193.188.0/22 103.193.192.0/22 103.193.212.0/22 103.193.216.0/21 103.193.224.0/20 103.193.240.0/22 103.194.16.0/22 103.195.104.0/22 103.195.112.0/22 103.195.136.0/22 103.195.148.0/22 103.195.152.0/22 103.195.160.0/22 103.195.192.0/22 103.196.60.0/22 103.196.64.0/22 103.196.72.0/22 103.196.88.0/21 103.196.96.0/22 103.196.168.0/22 103.196.204.0/22 103.197.180.0/22 103.197.228.0/22 103.198.20.0/22 103.198.60.0/22 103.198.64.0/22 103.198.72.0/22 103.198.124.0/22 103.198.156.0/22 103.198.180.0/22 103.198.196.0/22 103.198.200.0/22 103.198.216.0/21 103.198.224.0/20 103.198.240.0/21 103.199.164.0/22 103.199.196.0/22 103.199.228.0/22 103.199.248.0/21 103.200.28.0/22 103.200.32.0/22 103.200.52.0/22 103.200.64.0/21 103.200.136.0/21 103.200.144.0/20 103.200.160.0/19 103.200.192.0/22 103.200.220.0/22 103.200.224.0/19 103.201.0.0/20 103.201.16.0/21 103.201.28.0/22 103.201.32.0/19 103.201.64.0/22 103.201.76.0/22 103.201.80.0/20 103.201.96.0/20 103.201.112.0/21 103.201.120.0/22 103.201.152.0/21 103.201.160.0/19 103.201.192.0/18 103.202.0.0/19 103.202.32.0/20 103.202.56.0/21 103.202.64.0/18 103.202.128.0/20 103.202.144.0/22 103.202.152.0/21 103.202.160.0/19 103.202.192.0/20 103.202.212.0/22 103.202.228.0/22 103.202.236.0/22 103.202.240.0/20 103.203.0.0/19 103.203.32.0/22 103.203.52.0/22 103.203.56.0/22 103.203.96.0/19 103.203.128.0/22 103.203.140.0/22 103.203.164.0/22 103.203.168.0/22 103.203.192.0/22 103.203.200.0/22 103.203.212.0/22 103.203.216.0/22 103.204.24.0/22 103.204.72.0/22 103.204.88.0/22 103.204.112.0/22 103.204.136.0/21 103.204.144.0/21 103.204.152.0/22 103.204.196.0/22 103.204.232.0/21 103.205.4.0/22 103.205.8.0/22 103.205.40.0/21 103.205.52.0/22 103.205.108.0/22 103.205.116.0/22 103.205.120.0/22 103.205.136.0/22 103.205.162.0/24 103.205.188.0/22 103.205.192.0/21 103.205.200.0/22 103.205.236.0/22 103.205.248.0/21 103.206.0.0/22 103.206.44.0/22 103.206.108.0/22 103.206.148.0/22 103.207.48.0/22 103.207.104.0/22 103.207.164.0/22 103.207.184.0/21 103.207.192.0/20 103.207.208.0/21 103.207.220.0/22 103.207.228.0/22 103.207.232.0/22 103.208.12.0/22 103.208.16.0/22 103.208.28.0/22 103.208.40.0/21 103.208.48.0/22 103.208.148.0/22 103.209.112.0/22 103.209.136.0/22 103.209.200.0/22 103.209.208.0/22 103.209.216.0/22 103.210.0.0/22 103.210.20.0/22 103.210.96.0/22 103.210.156.0/22 103.210.160.0/19 103.210.216.0/22 103.211.44.0/22 103.211.96.0/21 103.211.156.0/22 103.211.164.0/22 103.211.192.0/22 103.211.220.0/22 103.211.224.0/22 103.211.248.0/22 103.212.0.0/20 103.212.32.0/22 103.212.44.0/22 103.212.48.0/22 103.212.84.0/22 103.212.100.0/22 103.212.104.0/21 103.212.148.0/22 103.212.164.0/22 103.212.196.0/22 103.212.200.0/22 103.212.228.0/22 103.212.252.0/22 103.213.40.0/21 103.213.48.0/20 103.213.64.0/19 103.213.96.0/22 103.213.132.0/22 103.213.136.0/21 103.213.144.0/20 103.213.160.0/19 103.213.248.0/22 103.214.32.0/22 103.214.48.0/22 103.214.84.0/22 103.214.168.0/22 103.214.212.0/22 103.214.240.0/21 103.215.28.0/22 103.215.32.0/21 103.215.44.0/22 103.215.48.0/22 103.215.100.0/22 103.215.104.0/21 103.215.116.0/22 103.215.120.0/22 103.215.140.0/22 103.215.184.0/22 103.215.228.0/22 103.216.4.0/22 103.216.8.0/21 103.216.16.0/20 103.216.32.0/20 103.216.64.0/22 103.216.108.0/22 103.216.136.0/22 103.216.152.0/22 103.216.224.0/21 103.216.240.0/20 103.217.0.0/18 103.217.168.0/22 103.217.180.0/22 103.217.184.0/21 103.217.192.0/20 103.218.0.0/22 103.218.8.0/21 103.218.16.0/21 103.218.28.0/22 103.218.32.0/19 103.218.64.0/19 103.218.184.0/22 103.218.192.0/20 103.218.208.0/21 103.218.216.0/22 103.219.24.0/21 103.219.32.0/21 103.219.64.0/22 103.219.84.0/22 103.219.88.0/21 103.219.96.0/21 103.219.176.0/22 103.219.184.0/22 103.220.48.0/20 103.220.64.0/22 103.220.92.0/22 103.220.96.0/20 103.220.116.0/22 103.220.120.0/21 103.220.128.0/20 103.220.144.0/21 103.220.152.0/22 103.220.160.0/19 103.220.192.0/21 103.220.200.0/22 103.220.240.0/20 103.221.0.0/19 103.221.32.0/20 103.221.48.0/22 103.221.88.0/21 103.221.96.0/19 103.221.128.0/18 103.221.192.0/20 103.222.0.0/20 103.222.16.0/22 103.222.24.0/21 103.222.32.0/19 103.222.64.0/18 103.222.128.0/18 103.222.192.0/19 103.222.224.0/21 103.222.232.0/22 103.222.240.0/21 103.223.16.0/20 103.223.32.0/19 103.223.64.0/18 103.223.128.0/21 103.223.140.0/22 103.223.144.0/20 103.223.160.0/20 103.223.176.0/21 103.223.188.0/22 103.223.192.0/18 103.224.0.0/22 103.224.40.0/21 103.224.60.0/22 103.224.80.0/22 103.224.220.0/22 103.224.224.0/21 103.224.232.0/22 103.225.84.0/22 103.226.16.0/22 103.226.40.0/22 103.226.56.0/21 103.226.80.0/22 103.226.132.0/22 103.226.156.0/22 103.226.180.0/22 103.226.196.0/22 103.227.48.0/22 103.227.72.0/21 103.227.80.0/22 103.227.100.0/22 103.227.120.0/22 103.227.132.0/22 103.227.136.0/22 103.227.196.0/22 103.227.204.0/22 103.227.212.0/22 103.227.228.0/22 103.228.12.0/22 103.228.28.0/22 103.228.68.0/22 103.228.88.0/22 103.228.128.0/22 103.228.136.0/22 103.228.160.0/22 103.228.176.0/22 103.228.204.0/22 103.228.208.0/22 103.228.228.0/22 103.228.232.0/22 103.229.20.0/22 103.229.60.0/22 103.229.136.0/22 103.229.148.0/22 103.229.172.0/22 103.229.212.0/22 103.229.216.0/21 103.229.228.0/22 103.229.236.0/22 103.229.240.0/22 103.230.0.0/22 103.230.28.0/22 103.230.44.0/22 103.230.96.0/22 103.230.196.0/22 103.230.200.0/21 103.230.212.0/22 103.230.236.0/22 103.231.16.0/21 103.231.64.0/21 103.231.144.0/22 103.231.180.0/22 103.231.184.0/22 103.231.244.0/22 103.232.4.0/22 103.232.144.0/22 103.232.188.0/22 103.232.212.0/22 103.233.4.0/22 103.233.44.0/22 103.233.52.0/22 103.233.104.0/22 103.233.128.0/22 103.233.136.0/22 103.233.228.0/22 103.234.0.0/22 103.234.20.0/22 103.234.56.0/22 103.234.128.0/22 103.234.172.0/22 103.234.180.0/22 103.234.244.0/22 103.235.16.0/22 103.235.48.0/22 103.235.56.0/21 103.235.80.0/21 103.235.128.0/20 103.235.144.0/21 103.235.184.0/22 103.235.192.0/22 103.235.200.0/22 103.235.220.0/22 103.235.224.0/19 103.236.0.0/18 103.236.64.0/19 103.236.96.0/22 103.236.120.0/22 103.236.184.0/22 103.236.220.0/22 103.236.232.0/22 103.236.240.0/20 103.237.0.0/20 103.237.24.0/21 103.237.68.0/22 103.237.88.0/22 103.237.152.0/22 103.237.176.0/20 103.237.192.0/18 103.238.0.0/21 103.238.16.0/20 103.238.32.0/20 103.238.48.0/21 103.238.56.0/22 103.238.88.0/21 103.238.96.0/22 103.238.132.0/22 103.238.140.0/22 103.238.144.0/22 103.238.160.0/19 103.238.196.0/22 103.238.204.0/22 103.238.252.0/22 103.239.0.0/22 103.239.44.0/22 103.239.68.0/22 103.239.96.0/22 103.239.152.0/21 103.239.176.0/21 103.239.184.0/22 103.239.192.0/21 103.239.204.0/22 103.239.208.0/22 103.239.224.0/22 103.239.244.0/22 103.240.16.0/22 103.240.36.0/22 103.240.72.0/22 103.240.84.0/22 103.240.124.0/22 103.240.156.0/22 103.240.172.0/22 103.240.188.0/22 103.240.244.0/22 103.241.12.0/22 103.241.72.0/22 103.241.92.0/22 103.241.96.0/22 103.241.160.0/22 103.241.184.0/21 103.241.220.0/22 103.242.64.0/22 103.242.128.0/21 103.242.160.0/22 103.242.168.0/21 103.242.176.0/22 103.242.200.0/22 103.242.212.0/22 103.242.220.0/22 103.242.240.0/22 103.243.136.0/22 103.243.252.0/22 103.244.16.0/22 103.244.58.0/23 103.244.60.0/22 103.244.64.0/20 103.244.80.0/21 103.244.116.0/22 103.244.164.0/22 103.244.232.0/22 103.244.252.0/22 103.245.23.0/24 103.245.52.0/22 103.245.60.0/22 103.245.80.0/22 103.245.124.0/22 103.245.128.0/22 103.246.8.0/21 103.246.120.0/21 103.246.132.0/22 103.246.152.0/21 103.247.168.0/21 103.247.176.0/22 103.247.200.0/22 103.247.212.0/22 103.248.0.0/23 103.248.64.0/22 103.248.100.0/22 103.248.124.0/22 103.248.152.0/22 103.248.168.0/22 103.248.192.0/22 103.248.212.0/22 103.248.220.0/22 103.248.224.0/22 103.249.8.0/21 103.249.52.0/22 103.249.104.0/22 103.249.128.0/22 103.249.136.0/22 103.249.144.0/22 103.249.164.0/22 103.249.168.0/21 103.249.176.0/22 103.249.188.0/22 103.249.192.0/22 103.249.244.0/22 103.249.252.0/22 103.250.32.0/22 103.250.104.0/22 103.250.124.0/22 103.250.180.0/22 103.250.192.0/22 103.250.216.0/22 103.250.224.0/22 103.250.236.0/22 103.250.248.0/21 103.251.32.0/21 103.251.84.0/22 103.251.96.0/22 103.251.124.0/22 103.251.128.0/22 103.251.160.0/22 103.251.192.0/22 103.251.204.0/22 103.251.236.0/22 103.251.240.0/22 103.252.28.0/22 103.252.36.0/22 103.252.64.0/22 103.252.96.0/22 103.252.104.0/22 103.252.172.0/22 103.252.204.0/22 103.252.208.0/22 103.252.232.0/22 103.252.248.0/22 103.253.4.0/22 103.253.60.0/22 103.253.204.0/22 103.253.220.0/22 103.253.224.0/22 103.253.232.0/22 103.254.8.0/22 103.254.20.0/22 103.254.64.0/20 103.254.112.0/22 103.254.176.0/22 103.254.188.0/22 103.254.196.0/24 103.254.220.0/22 103.255.56.0/22 103.255.68.0/22 103.255.88.0/21 103.255.136.0/21 103.255.184.0/22 103.255.200.0/22 103.255.212.0/22 103.255.228.0/22 106.0.0.0/24 106.0.2.0/23 106.0.4.0/22 106.0.8.0/21 106.0.16.0/20 106.0.44.0/22 106.0.64.0/18 106.2.0.0/15 106.4.0.0/14 106.8.0.0/15 106.11.0.0/16 106.12.0.0/14 106.16.0.0/12 106.32.0.0/12 106.48.0.0/15 106.50.0.0/16 106.52.0.0/14 106.56.0.0/13 106.74.0.0/15 106.80.0.0/12 106.108.0.0/14 106.112.0.0/12 106.224.0.0/12 109.244.0.0/16 110.6.0.0/15 110.16.0.0/14 110.34.40.0/21 110.40.0.0/14 110.44.12.0/22 110.44.144.0/20 110.48.0.0/16 110.51.0.0/16 110.52.0.0/15 110.56.0.0/13 110.64.0.0/15 110.72.0.0/15 110.75.0.0/16 110.76.0.0/18 110.76.132.0/22 110.76.156.0/22 110.76.184.0/22 110.76.192.0/18 110.77.0.0/17 110.80.0.0/13 110.88.0.0/14 110.92.68.0/22 110.93.32.0/19 110.94.0.0/15 110.96.0.0/11 110.152.0.0/14 110.156.0.0/15 110.165.32.0/19 110.166.0.0/15 110.172.192.0/18 110.173.0.0/19 110.173.32.0/20 110.173.64.0/18 110.173.192.0/19 110.176.0.0/12 110.192.0.0/11 110.228.0.0/14 110.232.32.0/19 110.236.0.0/15 110.240.0.0/12 111.0.0.0/10 111.66.0.0/16 111.67.192.0/20 111.68.64.0/19 111.72.0.0/13 111.85.0.0/16 111.91.192.0/19 111.92.248.0/21 111.112.0.0/14 111.116.0.0/15 111.118.200.0/21 111.119.64.0/18 111.119.128.0/19 111.120.0.0/14 111.124.0.0/16 111.126.0.0/15 111.128.0.0/11 111.160.0.0/13 111.170.0.0/16 111.172.0.0/14 111.176.0.0/13 111.186.0.0/15 111.192.0.0/12 111.208.0.0/13 111.221.28.0/24 111.221.128.0/17 111.222.0.0/16 111.223.4.0/22 111.223.8.0/21 111.223.16.0/22 111.223.240.0/22 111.223.248.0/22 111.224.0.0/13 111.235.96.0/19 111.235.156.0/22 111.235.160.0/19 112.0.0.0/10 112.64.0.0/14 112.73.0.0/16 112.74.0.0/15 112.80.0.0/12 112.96.0.0/13 112.109.128.0/17 112.111.0.0/16 112.112.0.0/14 112.116.0.0/15 112.122.0.0/15 112.124.0.0/14 112.128.0.0/14 112.132.0.0/16 112.137.48.0/21 112.192.0.0/14 112.224.0.0/11 113.0.0.0/13 113.8.0.0/15 113.11.192.0/19 113.12.0.0/14 113.16.0.0/15 113.18.0.0/16 113.21.232.0/21 113.24.0.0/14 113.31.0.0/16 113.44.0.0/14 113.48.0.0/14 113.52.160.0/19 113.52.228.0/22 113.54.0.0/15 113.56.0.0/15 113.58.0.0/16 113.59.0.0/17 113.59.224.0/22 113.62.0.0/15 113.64.0.0/10 113.128.0.0/15 113.130.96.0/20 113.130.112.0/21 113.132.0.0/14 113.136.0.0/13 113.194.0.0/15 113.197.100.0/22 113.200.0.0/15 113.202.0.0/16 113.204.0.0/14 113.208.96.0/19 113.208.128.0/17 113.209.0.0/16 113.212.0.0/18 113.212.64.0/22 113.212.88.0/22 113.212.100.0/22 113.212.184.0/21 113.213.0.0/17 113.214.0.0/15 113.218.0.0/15 113.220.0.0/14 113.224.0.0/12 113.240.0.0/13 113.248.0.0/14 114.28.0.0/16 114.31.64.0/21 114.54.0.0/15 114.60.0.0/14 114.64.0.0/14 114.68.0.0/16 114.79.64.0/18 114.80.0.0/12 114.96.0.0/13 114.104.0.0/14 114.110.0.0/20 114.110.64.0/18 114.111.0.0/19 114.111.160.0/19 114.112.0.0/14 114.116.0.0/15 114.118.0.0/16 114.119.0.0/17 114.119.192.0/18 114.132.0.0/16 114.135.0.0/16 114.138.0.0/15 114.141.64.0/21 114.141.80.0/21 114.141.128.0/18 114.196.0.0/15 114.198.248.0/21 114.208.0.0/12 114.224.0.0/11 115.24.0.0/14 115.28.0.0/15 115.31.64.0/20 115.32.0.0/14 115.42.56.0/22 115.44.0.0/14 115.48.0.0/12 115.69.64.0/20 115.84.0.0/18 115.84.192.0/19 115.85.192.0/18 115.100.0.0/14 115.104.0.0/14 115.120.0.0/14 115.124.16.0/20 115.148.0.0/14 115.152.0.0/13 115.166.64.0/19 115.168.0.0/13 115.180.0.0/14 115.187.0.0/20 115.190.0.0/15 115.192.0.0/11 115.224.0.0/12 116.0.8.0/21 116.0.24.0/21 116.1.0.0/16 116.2.0.0/15 116.4.0.0/14 116.8.0.0/14 116.13.0.0/16 116.16.0.0/12 116.50.0.0/20 116.52.0.0/14 116.56.0.0/15 116.58.128.0/20 116.58.208.0/20 116.60.0.0/14 116.66.0.0/17 116.66.176.0/22 116.68.136.0/21 116.68.176.0/21 116.69.0.0/16 116.70.0.0/17 116.76.0.0/14 116.85.0.0/16 116.89.144.0/20 116.89.240.0/22 116.90.80.0/20 116.90.184.0/21 116.95.0.0/16 116.112.0.0/14 116.116.0.0/15 116.128.0.0/10 116.192.0.0/16 116.193.16.0/20 116.193.32.0/19 116.193.152.0/22 116.193.164.0/22 116.193.176.0/21 116.194.0.0/15 116.196.0.0/16 116.197.160.0/21 116.198.0.0/16 116.199.0.0/17 116.199.128.0/19 116.204.0.0/17 116.204.132.0/22 116.204.168.0/22 116.204.216.0/22 116.204.232.0/21 116.204.244.0/22 116.205.0.0/16 116.206.92.0/22 116.206.176.0/22 116.207.0.0/16 116.208.0.0/14 116.212.160.0/20 116.213.44.0/22 116.213.64.0/18 116.213.128.0/17 116.214.32.0/19 116.214.64.0/20 116.214.128.0/17 116.215.0.0/16 116.216.0.0/14 116.224.0.0/12 116.242.0.0/15 116.244.0.0/14 116.248.0.0/15 116.251.64.0/18 116.252.0.0/15 116.254.104.0/21 116.254.128.0/17 116.255.128.0/17 117.8.0.0/13 117.21.0.0/16 117.22.0.0/15 117.24.0.0/13 117.32.0.0/13 117.40.0.0/14 117.44.0.0/15 117.48.0.0/14 117.53.48.0/20 117.53.176.0/20 117.57.0.0/16 117.58.0.0/17 117.59.0.0/16 117.60.0.0/14 117.64.0.0/13 117.72.0.0/15 117.74.64.0/19 117.74.128.0/17 117.75.0.0/16 117.76.0.0/14 117.80.0.0/12 117.100.0.0/15 117.103.16.0/20 117.103.40.0/21 117.103.72.0/21 117.103.128.0/20 117.104.168.0/21 117.106.0.0/15 117.112.0.0/13 117.120.64.0/18 117.120.128.0/17 117.121.0.0/17 117.121.128.0/18 117.121.192.0/21 117.122.128.0/17 117.124.0.0/14 117.128.0.0/10 118.24.0.0/15 118.26.0.0/16 118.28.0.0/14 118.64.0.0/15 118.66.0.0/16 118.67.112.0/20 118.72.0.0/13 118.80.0.0/15 118.84.0.0/15 118.88.32.0/19 118.88.64.0/18 118.88.128.0/17 118.89.0.0/16 118.91.240.0/20 118.102.16.0/20 118.102.32.0/21 118.103.164.0/22 118.103.168.0/21 118.103.176.0/22 118.107.180.0/22 118.112.0.0/13 118.120.0.0/14 118.124.0.0/15 118.126.0.0/16 118.127.128.0/19 118.132.0.0/14 118.144.0.0/14 118.178.0.0/16 118.180.0.0/14 118.184.0.0/16 118.186.0.0/15 118.188.0.0/16 118.190.0.0/15 118.192.0.0/16 118.193.0.0/20 118.193.32.0/19 118.193.64.0/20 118.193.96.0/19 118.193.128.0/17 118.194.0.0/15 118.196.0.0/14 118.202.0.0/15 118.204.0.0/14 118.212.0.0/15 118.215.192.0/18 118.224.0.0/14 118.228.0.0/15 118.230.0.0/16 118.239.0.0/16 118.242.0.0/16 118.244.0.0/14 118.248.0.0/13 119.0.0.0/15 119.2.0.0/19 119.2.128.0/17 119.3.0.0/16 119.4.0.0/14 119.10.0.0/17 119.15.136.0/21 119.16.0.0/16 119.18.192.0/20 119.18.208.0/21 119.18.224.0/19 119.19.0.0/16 119.20.0.0/14 119.27.64.0/18 119.27.128.0/17 119.28.0.0/15 119.30.48.0/20 119.31.192.0/19 119.32.0.0/13 119.40.0.0/18 119.40.64.0/20 119.40.128.0/17 119.41.0.0/16 119.42.0.0/19 119.42.52.0/22 119.42.128.0/20 119.42.224.0/19 119.44.0.0/15 119.48.0.0/13 119.57.0.0/16 119.58.0.0/16 119.59.128.0/17 119.60.0.0/15 119.62.0.0/16 119.63.32.0/19 119.75.208.0/20 119.78.0.0/15 119.80.0.0/16 119.82.208.0/20 119.84.0.0/14 119.88.0.0/14 119.96.0.0/13 119.108.0.0/15 119.112.0.0/12 119.128.0.0/12 119.144.0.0/14 119.148.160.0/19 119.151.192.0/18 119.160.200.0/21 119.161.120.0/21 119.161.128.0/17 119.162.0.0/15 119.164.0.0/14 119.176.0.0/12 119.232.0.0/15 119.235.128.0/18 119.248.0.0/14 119.252.96.0/21 119.252.240.0/20 119.253.0.0/16 119.254.0.0/15 120.0.0.0/12 120.24.0.0/14 120.30.0.0/15 120.32.0.0/12 120.48.0.0/15 120.52.0.0/14 120.64.0.0/13 120.72.32.0/19 120.72.128.0/17 120.76.0.0/14 120.80.0.0/13 120.88.8.0/21 120.90.0.0/15 120.92.0.0/16 120.94.0.0/15 120.128.0.0/13 120.136.16.0/21 120.136.128.0/18 120.137.0.0/17 120.143.128.0/19 120.192.0.0/10 121.0.8.0/21 121.0.16.0/20 121.4.0.0/15 121.8.0.0/13 121.16.0.0/12 121.32.0.0/13 121.40.0.0/14 121.46.0.0/18 121.46.76.0/22 121.46.128.0/17 121.47.0.0/16 121.48.0.0/15 121.50.8.0/21 121.51.0.0/16 121.52.160.0/19 121.52.208.0/20 121.52.224.0/19 121.54.176.0/21 121.54.188.0/22 121.55.0.0/18 121.56.0.0/15 121.58.0.0/17 121.58.136.0/21 121.58.144.0/20 121.58.160.0/21 121.59.0.0/16 121.60.0.0/14 121.68.0.0/14 121.76.0.0/15 121.79.128.0/18 121.89.0.0/16 121.100.128.0/17 121.101.0.0/18 121.101.208.0/20 121.192.0.0/13 121.200.192.0/21 121.201.0.0/16 121.204.0.0/14 121.224.0.0/12 121.248.0.0/14 121.255.0.0/16 122.0.64.0/18 122.0.128.0/17 122.4.0.0/14 122.8.0.0/15 122.10.128.0/22 122.10.132.0/23 122.10.136.0/23 122.10.164.0/22 122.10.168.0/21 122.10.176.0/20 122.10.192.0/22 122.10.200.0/21 122.10.208.0/21 122.10.216.0/22 122.10.228.0/22 122.10.232.0/21 122.10.240.0/22 122.11.0.0/17 122.12.0.0/15 122.14.0.0/16 122.48.0.0/16 122.49.0.0/18 122.51.0.0/16 122.64.0.0/11 122.96.0.0/15 122.102.0.0/20 122.102.64.0/19 122.112.0.0/14 122.119.0.0/16 122.128.100.0/22 122.128.120.0/21 122.136.0.0/13 122.144.128.0/17 122.152.192.0/18 122.156.0.0/14 122.188.0.0/14 122.192.0.0/14 122.198.0.0/16 122.200.40.0/21 122.200.64.0/18 122.201.48.0/20 122.204.0.0/14 122.224.0.0/12 122.240.0.0/13 122.248.24.0/21 122.248.48.0/20 122.255.64.0/21 123.0.128.0/18 123.4.0.0/14 123.8.0.0/13 123.49.128.0/17 123.50.160.0/19 123.52.0.0/14 123.56.0.0/14 123.60.0.0/15 123.62.0.0/16 123.64.0.0/11 123.96.0.0/15 123.98.0.0/17 123.99.128.0/17 123.100.0.0/19 123.101.0.0/16 123.103.0.0/17 123.108.128.0/20 123.108.208.0/20 123.112.0.0/12 123.128.0.0/13 123.136.80.0/20 123.137.0.0/16 123.138.0.0/15 123.144.0.0/12 123.160.0.0/12 123.176.60.0/22 123.176.80.0/20 123.177.0.0/16 123.178.0.0/15 123.180.0.0/14 123.184.0.0/13 123.196.0.0/15 123.199.128.0/17 123.206.0.0/15 123.232.0.0/14 123.242.0.0/17 123.242.192.0/21 123.244.0.0/14 123.249.0.0/16 123.253.108.0/22 123.253.240.0/22 123.254.96.0/21 124.6.64.0/18 124.14.0.0/15 124.16.0.0/15 124.20.0.0/14 124.28.192.0/18 124.29.0.0/17 124.31.0.0/16 124.40.112.0/20 124.40.128.0/18 124.40.192.0/19 124.40.240.0/22 124.42.0.0/16 124.47.0.0/18 124.64.0.0/15 124.66.0.0/17 124.67.0.0/16 124.68.0.0/14 124.72.0.0/13 124.88.0.0/13 124.108.8.0/21 124.108.40.0/21 124.109.96.0/21 124.112.0.0/13 124.126.0.0/15 124.128.0.0/13 124.147.128.0/17 124.150.137.0/24 124.151.0.0/16 124.152.0.0/16 124.160.0.0/13 124.172.0.0/14 124.192.0.0/15 124.196.0.0/16 124.200.0.0/13 124.220.0.0/14 124.224.0.0/12 124.240.0.0/17 124.240.128.0/18 124.242.0.0/16 124.243.192.0/18 124.248.0.0/17 124.249.0.0/16 124.250.0.0/15 124.254.0.0/18 125.31.192.0/18 125.32.0.0/12 125.58.128.0/17 125.61.128.0/17 125.62.0.0/18 125.64.0.0/11 125.96.0.0/15 125.98.0.0/16 125.104.0.0/13 125.112.0.0/12 125.169.0.0/16 125.171.0.0/16 125.208.0.0/18 125.210.0.0/15 125.213.0.0/17 125.214.96.0/19 125.215.0.0/18 125.216.0.0/13 125.254.128.0/17 128.108.0.0/16 129.28.0.0/16 129.204.0.0/16 129.211.0.0/16 132.232.0.0/16 134.175.0.0/16 137.59.59.0/24 137.59.88.0/22 139.5.56.0/21 139.5.80.0/22 139.5.92.0/22 139.5.108.0/22 139.5.128.0/22 139.5.160.0/22 139.5.192.0/22 139.5.204.0/22 139.5.208.0/21 139.5.244.0/22 139.9.0.0/16 139.129.0.0/16 139.148.0.0/16 139.155.0.0/16 139.159.0.0/16 139.170.0.0/16 139.176.0.0/16 139.183.0.0/16 139.186.0.0/16 139.189.0.0/16 139.196.0.0/14 139.200.0.0/13 139.208.0.0/13 139.217.0.0/16 139.219.0.0/16 139.220.0.0/15 139.224.0.0/16 139.226.0.0/15 140.75.0.0/16 140.143.0.0/16 140.179.0.0/16 140.205.0.0/16 140.206.0.0/15 140.210.0.0/16 140.224.0.0/16 140.237.0.0/16 140.240.0.0/16 140.243.0.0/16 140.246.0.0/16 140.249.0.0/16 140.250.0.0/16 140.255.0.0/16 144.0.0.0/16 144.7.0.0/16 144.12.0.0/16 144.48.8.0/22 144.48.64.0/22 144.48.88.0/22 144.48.156.0/22 144.48.180.0/22 144.48.184.0/22 144.48.204.0/22 144.48.208.0/21 144.48.220.0/22 144.48.252.0/22 144.52.0.0/16 144.123.0.0/16 144.255.0.0/16 146.56.192.0/18 146.196.56.0/22 146.196.68.0/22 146.196.72.0/22 146.196.92.0/22 146.196.112.0/21 146.196.124.0/22 148.70.0.0/16 150.0.0.0/16 150.115.0.0/16 150.121.0.0/16 150.122.0.0/16 150.129.136.0/22 150.129.192.0/22 150.129.216.0/22 150.129.252.0/22 150.138.0.0/15 150.158.0.0/16 150.223.0.0/16 150.242.0.0/21 150.242.8.0/22 150.242.28.0/22 150.242.44.0/22 150.242.48.0/21 150.242.56.0/22 150.242.76.0/22 150.242.80.0/22 150.242.92.0/22 150.242.96.0/22 150.242.112.0/21 150.242.120.0/22 150.242.152.0/21 150.242.160.0/21 150.242.168.0/22 150.242.184.0/21 150.242.192.0/22 150.242.212.0/22 150.242.224.0/20 150.242.240.0/21 150.242.248.0/22 150.255.0.0/16 152.104.128.0/17 152.136.0.0/16 153.0.0.0/16 153.3.0.0/16 153.34.0.0/15 153.36.0.0/15 153.99.0.0/16 153.101.0.0/16 153.118.0.0/15 154.8.128.0/17 157.0.0.0/16 157.18.0.0/16 157.61.0.0/16 157.119.0.0/22 157.119.8.0/21 157.119.16.0/22 157.119.28.0/22 157.119.68.0/22 157.119.112.0/22 157.119.132.0/22 157.119.136.0/21 157.119.144.0/20 157.119.160.0/21 157.119.172.0/22 157.119.192.0/21 157.119.240.0/22 157.119.252.0/22 157.122.0.0/16 157.148.0.0/16 157.156.0.0/16 157.255.0.0/16 159.75.0.0/16 159.226.0.0/16 160.19.208.0/21 160.19.216.0/22 160.20.48.0/22 160.202.60.0/22 160.202.148.0/22 160.202.152.0/22 160.202.168.0/22 160.202.212.0/22 160.202.216.0/21 160.202.224.0/19 160.238.64.0/22 161.189.0.0/16 161.207.0.0/16 162.14.0.0/16 162.105.0.0/16 163.0.0.0/16 163.47.4.0/22 163.53.0.0/20 163.53.36.0/22 163.53.40.0/21 163.53.48.0/20 163.53.64.0/22 163.53.88.0/21 163.53.96.0/19 163.53.128.0/21 163.53.136.0/22 163.53.160.0/20 163.53.188.0/22 163.53.220.0/22 163.53.240.0/22 163.125.0.0/16 163.142.0.0/16 163.177.0.0/16 163.179.0.0/16 163.204.0.0/16 164.52.0.0/17 166.111.0.0/16 167.139.0.0/16 167.189.0.0/16 167.220.244.0/22 168.160.0.0/16 170.179.0.0/16 171.8.0.0/13 171.34.0.0/15 171.36.0.0/14 171.40.0.0/13 171.80.0.0/12 171.104.0.0/13 171.112.0.0/12 171.208.0.0/12 172.81.192.0/18 175.0.0.0/12 175.16.0.0/13 175.24.0.0/14 175.30.0.0/15 175.42.0.0/15 175.44.0.0/16 175.46.0.0/15 175.48.0.0/12 175.64.0.0/11 175.102.0.0/16 175.106.128.0/17 175.111.144.0/20 175.111.160.0/20 175.111.184.0/22 175.146.0.0/15 175.148.0.0/14 175.152.0.0/14 175.158.96.0/22 175.160.0.0/12 175.176.156.0/22 175.176.176.0/22 175.176.188.0/22 175.176.192.0/22 175.178.0.0/16 175.184.128.0/18 175.185.0.0/16 175.186.0.0/15 175.188.0.0/14 180.76.0.0/14 180.84.0.0/15 180.86.0.0/16 180.88.0.0/14 180.94.56.0/21 180.94.96.0/20 180.94.120.0/21 180.95.128.0/17 180.96.0.0/11 180.129.128.0/17 180.130.0.0/16 180.136.0.0/13 180.148.16.0/21 180.148.152.0/21 180.148.216.0/21 180.148.224.0/19 180.149.128.0/19 180.149.236.0/22 180.150.160.0/19 180.152.0.0/13 180.160.0.0/12 180.178.112.0/21 180.178.192.0/18 180.184.0.0/14 180.188.0.0/17 180.189.148.0/22 180.200.252.0/22 180.201.0.0/16 180.202.0.0/15 180.208.0.0/15 180.210.212.0/22 180.210.224.0/19 180.212.0.0/15 180.222.224.0/19 180.223.0.0/16 180.233.0.0/18 180.233.64.0/19 180.233.144.0/22 180.235.64.0/19 180.235.112.0/22 180.235.136.0/22 182.16.144.0/21 182.16.192.0/19 182.18.0.0/17 182.23.184.0/21 182.23.200.0/21 182.32.0.0/12 182.48.96.0/19 182.49.0.0/16 182.50.0.0/20 182.50.112.0/20 182.51.0.0/16 182.54.0.0/17 182.54.244.0/22 182.61.0.0/16 182.80.0.0/13 182.88.0.0/14 182.92.0.0/16 182.96.0.0/11 182.128.0.0/12 182.144.0.0/13 182.157.0.0/16 182.160.64.0/19 182.174.0.0/15 182.200.0.0/13 182.236.128.0/17 182.237.24.0/21 182.238.0.0/16 182.239.0.0/19 182.240.0.0/13 182.254.0.0/16 182.255.32.0/21 182.255.60.0/22 183.0.0.0/10 183.64.0.0/13 183.78.160.0/21 183.78.180.0/22 183.81.172.0/22 183.81.180.0/22 183.84.0.0/15 183.91.128.0/22 183.91.136.0/21 183.91.144.0/20 183.92.0.0/14 183.128.0.0/11 183.160.0.0/13 183.168.0.0/15 183.170.0.0/16 183.172.0.0/14 183.182.0.0/19 183.184.0.0/13 183.192.0.0/10 185.203.36.0/22 188.131.128.0/17 192.51.188.0/24 192.55.46.0/24 192.55.68.0/22 192.102.204.0/23 192.124.154.0/24 192.140.128.0/21 192.140.136.0/22 192.140.156.0/22 192.140.160.0/19 192.140.192.0/20 192.140.208.0/21 192.144.128.0/17 192.197.113.0/24 193.112.0.0/16 198.175.100.0/22 199.212.57.0/24 202.0.100.0/23 202.0.122.0/23 202.0.176.0/22 202.3.128.0/23 202.3.134.0/24 202.4.128.0/19 202.4.252.0/22 202.5.208.0/21 202.5.216.0/22 202.6.6.0/23 202.6.66.0/23 202.6.72.0/23 202.6.87.0/24 202.6.88.0/23 202.6.92.0/23 202.6.103.0/24 202.6.108.0/24 202.6.110.0/23 202.6.114.0/24 202.6.176.0/20 202.8.0.0/24 202.8.2.0/23 202.8.4.0/23 202.8.12.0/24 202.8.24.0/24 202.8.77.0/24 202.8.120.0/22 202.8.128.0/19 202.8.192.0/20 202.9.32.0/24 202.9.34.0/23 202.9.48.0/23 202.9.51.0/24 202.9.52.0/23 202.9.54.0/24 202.9.57.0/24 202.9.58.0/23 202.10.64.0/20 202.10.112.0/20 202.12.1.0/24 202.12.2.0/24 202.12.17.0/24 202.12.18.0/23 202.12.72.0/24 202.12.84.0/23 202.12.96.0/24 202.12.98.0/23 202.12.106.0/24 202.12.111.0/24 202.12.116.0/24 202.14.64.0/23 202.14.69.0/24 202.14.73.0/24 202.14.74.0/23 202.14.76.0/24 202.14.78.0/23 202.14.88.0/24 202.14.97.0/24 202.14.104.0/23 202.14.108.0/23 202.14.111.0/24 202.14.114.0/23 202.14.118.0/23 202.14.124.0/23 202.14.127.0/24 202.14.129.0/24 202.14.135.0/24 202.14.136.0/24 202.14.149.0/24 202.14.151.0/24 202.14.157.0/24 202.14.158.0/23 202.14.169.0/24 202.14.170.0/23 202.14.172.0/22 202.14.176.0/24 202.14.184.0/23 202.14.208.0/23 202.14.213.0/24 202.14.219.0/24 202.14.220.0/24 202.14.222.0/23 202.14.225.0/24 202.14.226.0/23 202.14.231.0/24 202.14.235.0/24 202.14.236.0/22 202.14.246.0/24 202.14.251.0/24 202.20.66.0/24 202.20.79.0/24 202.20.87.0/24 202.20.88.0/23 202.20.90.0/24 202.20.94.0/23 202.20.114.0/24 202.20.117.0/24 202.20.120.0/24 202.20.125.0/24 202.20.126.0/23 202.21.48.0/20 202.21.131.0/24 202.21.132.0/24 202.21.141.0/24 202.21.142.0/24 202.21.147.0/24 202.21.148.0/24 202.21.150.0/23 202.21.152.0/23 202.21.154.0/24 202.21.156.0/24 202.22.248.0/21 202.27.12.0/24 202.27.14.0/24 202.27.136.0/23 202.36.226.0/24 202.38.0.0/22 202.38.8.0/21 202.38.48.0/20 202.38.64.0/18 202.38.128.0/21 202.38.136.0/23 202.38.138.0/24 202.38.140.0/22 202.38.146.0/23 202.38.149.0/24 202.38.150.0/23 202.38.152.0/22 202.38.156.0/24 202.38.158.0/23 202.38.160.0/23 202.38.164.0/22 202.38.168.0/22 202.38.176.0/23 202.38.184.0/21 202.38.192.0/18 202.40.4.0/23 202.40.7.0/24 202.40.15.0/24 202.40.135.0/24 202.40.136.0/24 202.40.140.0/24 202.40.143.0/24 202.40.144.0/23 202.40.150.0/24 202.40.155.0/24 202.40.156.0/24 202.40.158.0/23 202.40.162.0/24 202.41.8.0/23 202.41.11.0/24 202.41.12.0/23 202.41.128.0/24 202.41.130.0/23 202.41.152.0/21 202.41.192.0/24 202.41.196.0/22 202.41.200.0/22 202.41.240.0/20 202.43.76.0/22 202.43.144.0/20 202.44.16.0/20 202.44.48.0/22 202.44.67.0/24 202.44.74.0/24 202.44.97.0/24 202.44.129.0/24 202.44.132.0/23 202.44.146.0/23 202.45.0.0/23 202.45.2.0/24 202.45.15.0/24 202.45.16.0/20 202.46.16.0/23 202.46.18.0/24 202.46.20.0/23 202.46.32.0/19 202.46.128.0/24 202.46.224.0/20 202.47.82.0/23 202.47.96.0/20 202.47.126.0/24 202.47.128.0/24 202.47.130.0/23 202.52.33.0/24 202.52.34.0/24 202.52.47.0/24 202.52.143.0/24 202.52.144.0/24 202.53.140.0/24 202.53.143.0/24 202.57.192.0/20 202.57.212.0/22 202.57.216.0/22 202.57.240.0/20 202.58.0.0/24 202.58.101.0/24 202.58.104.0/22 202.58.112.0/22 202.59.0.0/23 202.59.212.0/22 202.59.236.0/24 202.59.240.0/24 202.60.48.0/21 202.60.96.0/21 202.60.112.0/20 202.60.132.0/22 202.60.136.0/21 202.60.144.0/20 202.61.68.0/22 202.61.76.0/22 202.61.88.0/22 202.61.123.0/24 202.61.127.0/24 202.62.112.0/22 202.62.248.0/22 202.62.252.0/24 202.62.255.0/24 202.63.80.0/20 202.63.160.0/19 202.63.248.0/22 202.63.253.0/24 202.65.0.0/21 202.65.8.0/23 202.65.96.0/20 202.66.168.0/22 202.67.0.0/22 202.69.4.0/22 202.69.16.0/20 202.70.0.0/19 202.70.96.0/20 202.70.192.0/20 202.71.32.0/20 202.72.40.0/21 202.72.80.0/20 202.72.112.0/20 202.73.128.0/22 202.73.240.0/20 202.74.8.0/21 202.74.36.0/24 202.74.42.0/24 202.74.52.0/24 202.74.80.0/20 202.74.232.0/22 202.74.254.0/23 202.75.208.0/20 202.75.252.0/22 202.76.252.0/22 202.77.80.0/21 202.77.92.0/22 202.78.8.0/21 202.79.224.0/21 202.79.248.0/22 202.80.192.0/20 202.81.0.0/22 202.81.176.0/20 202.83.252.0/22 202.84.0.0/20 202.84.16.0/23 202.84.22.0/24 202.84.24.0/21 202.85.208.0/20 202.86.249.0/24 202.86.252.0/22 202.87.80.0/20 202.88.32.0/22 202.89.8.0/21 202.89.96.0/22 202.89.108.0/22 202.89.119.0/24 202.89.232.0/21 202.90.0.0/22 202.90.16.0/20 202.90.37.0/24 202.90.96.0/19 202.90.193.0/24 202.90.196.0/24 202.90.205.0/24 202.90.224.0/20 202.91.0.0/22 202.91.36.0/22 202.91.96.0/20 202.91.128.0/22 202.91.176.0/20 202.91.224.0/19 202.92.0.0/22 202.92.8.0/21 202.92.48.0/20 202.92.252.0/22 202.93.0.0/22 202.93.252.0/22 202.94.68.0/24 202.94.74.0/24 202.94.81.0/24 202.94.92.0/22 202.95.240.0/21 202.95.252.0/22 202.96.0.0/12 202.112.0.0/13 202.120.0.0/15 202.122.0.0/21 202.122.32.0/21 202.122.64.0/19 202.122.112.0/20 202.122.128.0/24 202.122.132.0/24 202.123.96.0/20 202.123.116.0/22 202.123.120.0/22 202.124.16.0/21 202.124.24.0/22 202.125.107.0/24 202.125.109.0/24 202.125.112.0/20 202.125.176.0/20 202.127.0.0/21 202.127.12.0/22 202.127.16.0/20 202.127.40.0/21 202.127.48.0/20 202.127.112.0/20 202.127.128.0/19 202.127.160.0/21 202.127.192.0/20 202.127.208.0/23 202.127.212.0/22 202.127.216.0/21 202.127.224.0/19 202.129.208.0/24 202.130.0.0/19 202.130.39.0/24 202.130.224.0/19 202.131.16.0/21 202.131.48.0/20 202.131.208.0/20 202.133.32.0/20 202.134.58.0/24 202.134.128.0/20 202.134.208.0/20 202.136.48.0/20 202.136.208.0/20 202.136.224.0/20 202.136.248.0/22 202.137.231.0/24 202.140.140.0/22 202.140.144.0/20 202.141.160.0/19 202.142.16.0/20 202.143.4.0/22 202.143.16.0/20 202.143.32.0/20 202.143.56.0/21 202.143.100.0/22 202.143.104.0/22 202.144.196.0/22 202.146.160.0/20 202.146.186.0/24 202.146.188.0/22 202.146.196.0/22 202.146.200.0/21 202.147.144.0/20 202.148.32.0/20 202.148.64.0/18 202.149.32.0/19 202.149.160.0/19 202.149.224.0/19 202.150.16.0/20 202.150.32.0/20 202.150.56.0/22 202.150.192.0/20 202.150.224.0/19 202.151.0.0/22 202.151.33.0/24 202.151.128.0/19 202.152.176.0/20 202.153.0.0/22 202.153.7.0/24 202.153.48.0/20 202.157.192.0/19 202.158.160.0/19 202.158.242.0/24 202.160.140.0/22 202.160.156.0/22 202.160.176.0/20 202.162.67.0/24 202.162.75.0/24 202.164.0.0/20 202.164.96.0/19 202.165.176.0/20 202.165.208.0/20 202.165.239.0/24 202.165.240.0/23 202.165.243.0/24 202.165.245.0/24 202.165.251.0/24 202.165.252.0/22 202.166.224.0/19 202.168.80.0/22 202.168.128.0/20 202.168.160.0/19 202.170.128.0/19 202.170.216.0/21 202.170.224.0/19 202.171.216.0/21 202.171.232.0/24 202.171.235.0/24 202.172.0.0/22 202.172.7.0/24 202.173.0.0/22 202.173.6.0/24 202.173.8.0/21 202.173.112.0/22 202.173.224.0/19 202.174.64.0/20 202.174.124.0/22 202.176.224.0/19 202.179.160.0/20 202.179.240.0/20 202.180.128.0/19 202.180.208.0/21 202.181.8.0/22 202.181.28.0/22 202.181.112.0/20 202.182.32.0/20 202.182.192.0/19 202.189.0.0/18 202.189.80.0/20 202.189.184.0/21 202.191.0.0/24 202.191.68.0/22 202.191.72.0/21 202.191.80.0/20 202.192.0.0/12 203.0.4.0/22 203.0.10.0/23 203.0.18.0/24 203.0.24.0/24 203.0.42.0/23 203.0.45.0/24 203.0.46.0/23 203.0.81.0/24 203.0.82.0/23 203.0.90.0/23 203.0.96.0/23 203.0.104.0/21 203.0.114.0/23 203.0.122.0/24 203.0.128.0/24 203.0.130.0/23 203.0.132.0/22 203.0.137.0/24 203.0.142.0/24 203.0.144.0/24 203.0.146.0/24 203.0.148.0/24 203.0.150.0/23 203.0.152.0/24 203.0.177.0/24 203.0.224.0/24 203.1.4.0/22 203.1.18.0/24 203.1.26.0/23 203.1.65.0/24 203.1.66.0/23 203.1.70.0/23 203.1.76.0/23 203.1.90.0/24 203.1.97.0/24 203.1.98.0/23 203.1.100.0/22 203.1.108.0/24 203.1.253.0/24 203.1.254.0/24 203.2.64.0/21 203.2.73.0/24 203.2.112.0/21 203.2.126.0/23 203.2.140.0/24 203.2.150.0/24 203.2.152.0/22 203.2.156.0/23 203.2.160.0/21 203.2.180.0/23 203.2.196.0/23 203.2.209.0/24 203.2.214.0/23 203.2.226.0/23 203.2.229.0/24 203.2.236.0/23 203.3.68.0/24 203.3.72.0/23 203.3.75.0/24 203.3.80.0/21 203.3.96.0/22 203.3.105.0/24 203.3.112.0/21 203.3.120.0/24 203.3.123.0/24 203.3.135.0/24 203.3.139.0/24 203.3.143.0/24 203.4.132.0/23 203.4.134.0/24 203.4.151.0/24 203.4.152.0/22 203.4.174.0/23 203.4.180.0/24 203.4.186.0/24 203.4.205.0/24 203.4.208.0/22 203.4.227.0/24 203.4.230.0/23 203.5.4.0/23 203.5.7.0/24 203.5.8.0/23 203.5.11.0/24 203.5.21.0/24 203.5.22.0/24 203.5.44.0/24 203.5.46.0/23 203.5.52.0/22 203.5.56.0/23 203.5.60.0/23 203.5.114.0/23 203.5.118.0/24 203.5.120.0/24 203.5.172.0/24 203.5.180.0/23 203.5.182.0/24 203.5.185.0/24 203.5.186.0/24 203.5.188.0/23 203.5.190.0/24 203.5.195.0/24 203.5.214.0/23 203.5.218.0/23 203.6.131.0/24 203.6.136.0/24 203.6.138.0/23 203.6.142.0/24 203.6.150.0/23 203.6.157.0/24 203.6.159.0/24 203.6.224.0/20 203.6.248.0/23 203.7.129.0/24 203.7.138.0/23 203.7.147.0/24 203.7.150.0/23 203.7.158.0/24 203.7.192.0/23 203.7.200.0/24 203.8.0.0/24 203.8.8.0/24 203.8.23.0/24 203.8.70.0/24 203.8.82.0/24 203.8.86.0/23 203.8.91.0/24 203.8.110.0/23 203.8.115.0/24 203.8.166.0/23 203.8.169.0/24 203.8.173.0/24 203.8.184.0/24 203.8.186.0/23 203.8.190.0/23 203.8.192.0/24 203.8.197.0/24 203.8.198.0/23 203.8.203.0/24 203.8.209.0/24 203.8.210.0/23 203.8.212.0/22 203.8.217.0/24 203.8.220.0/24 203.9.32.0/24 203.9.36.0/23 203.9.57.0/24 203.9.63.0/24 203.9.65.0/24 203.9.70.0/23 203.9.72.0/24 203.9.75.0/24 203.9.76.0/23 203.9.96.0/22 203.9.100.0/23 203.9.108.0/24 203.9.158.0/24 203.10.34.0/24 203.10.56.0/24 203.10.74.0/23 203.10.84.0/22 203.10.88.0/24 203.10.95.0/24 203.10.125.0/24 203.11.70.0/24 203.11.76.0/22 203.11.82.0/24 203.11.84.0/22 203.11.100.0/22 203.11.109.0/24 203.11.117.0/24 203.11.122.0/24 203.11.126.0/24 203.11.136.0/22 203.11.141.0/24 203.11.142.0/23 203.11.180.0/22 203.11.208.0/22 203.12.16.0/24 203.12.19.0/24 203.12.24.0/24 203.12.57.0/24 203.12.65.0/24 203.12.66.0/24 203.12.70.0/23 203.12.87.0/24 203.12.100.0/23 203.12.103.0/24 203.12.114.0/24 203.12.118.0/24 203.12.130.0/24 203.12.137.0/24 203.12.196.0/22 203.12.211.0/24 203.12.219.0/24 203.12.226.0/24 203.12.240.0/22 203.13.18.0/24 203.13.24.0/24 203.13.44.0/23 203.13.88.0/23 203.13.92.0/22 203.13.173.0/24 203.13.224.0/23 203.13.227.0/24 203.13.233.0/24 203.14.24.0/22 203.14.33.0/24 203.14.56.0/24 203.14.61.0/24 203.14.62.0/24 203.14.104.0/24 203.14.114.0/23 203.14.118.0/24 203.14.162.0/24 203.14.192.0/24 203.14.194.0/23 203.14.214.0/24 203.14.231.0/24 203.14.246.0/24 203.15.0.0/20 203.15.20.0/23 203.15.22.0/24 203.15.87.0/24 203.15.88.0/23 203.15.105.0/24 203.15.112.0/21 203.15.130.0/23 203.15.149.0/24 203.15.151.0/24 203.15.156.0/22 203.15.174.0/24 203.15.227.0/24 203.15.232.0/21 203.15.240.0/23 203.15.246.0/24 203.16.10.0/24 203.16.12.0/23 203.16.16.0/21 203.16.27.0/24 203.16.38.0/24 203.16.49.0/24 203.16.50.0/23 203.16.58.0/24 203.16.63.0/24 203.16.133.0/24 203.16.161.0/24 203.16.162.0/24 203.16.186.0/23 203.16.228.0/24 203.16.238.0/24 203.16.240.0/24 203.16.245.0/24 203.17.2.0/24 203.17.18.0/24 203.17.28.0/24 203.17.39.0/24 203.17.56.0/24 203.17.74.0/23 203.17.88.0/23 203.17.136.0/24 203.17.164.0/24 203.17.187.0/24 203.17.190.0/23 203.17.231.0/24 203.17.233.0/24 203.17.248.0/23 203.17.255.0/24 203.18.2.0/23 203.18.4.0/24 203.18.7.0/24 203.18.31.0/24 203.18.37.0/24 203.18.48.0/23 203.18.52.0/24 203.18.72.0/22 203.18.80.0/23 203.18.87.0/24 203.18.100.0/23 203.18.105.0/24 203.18.107.0/24 203.18.110.0/24 203.18.129.0/24 203.18.131.0/24 203.18.132.0/23 203.18.144.0/24 203.18.153.0/24 203.18.199.0/24 203.18.208.0/24 203.18.211.0/24 203.18.215.0/24 203.19.1.0/24 203.19.18.0/24 203.19.24.0/24 203.19.30.0/24 203.19.32.0/21 203.19.41.0/24 203.19.44.0/23 203.19.46.0/24 203.19.58.0/24 203.19.60.0/23 203.19.64.0/24 203.19.68.0/24 203.19.72.0/24 203.19.101.0/24 203.19.111.0/24 203.19.131.0/24 203.19.133.0/24 203.19.144.0/24 203.19.147.0/24 203.19.149.0/24 203.19.156.0/24 203.19.176.0/24 203.19.178.0/23 203.19.208.0/24 203.19.228.0/22 203.19.233.0/24 203.19.242.0/24 203.19.248.0/23 203.19.255.0/24 203.20.17.0/24 203.20.40.0/23 203.20.44.0/24 203.20.48.0/24 203.20.61.0/24 203.20.65.0/24 203.20.84.0/23 203.20.89.0/24 203.20.106.0/23 203.20.115.0/24 203.20.117.0/24 203.20.118.0/23 203.20.122.0/24 203.20.126.0/23 203.20.135.0/24 203.20.136.0/21 203.20.150.0/24 203.20.230.0/24 203.20.232.0/24 203.20.236.0/24 203.21.0.0/23 203.21.2.0/24 203.21.8.0/24 203.21.10.0/24 203.21.18.0/24 203.21.33.0/24 203.21.34.0/24 203.21.41.0/24 203.21.44.0/24 203.21.68.0/24 203.21.82.0/24 203.21.96.0/22 203.21.124.0/24 203.21.136.0/23 203.21.145.0/24 203.21.206.0/24 203.22.24.0/24 203.22.28.0/23 203.22.31.0/24 203.22.68.0/24 203.22.76.0/24 203.22.78.0/24 203.22.84.0/24 203.22.87.0/24 203.22.92.0/22 203.22.99.0/24 203.22.106.0/24 203.22.122.0/23 203.22.131.0/24 203.22.163.0/24 203.22.166.0/24 203.22.170.0/24 203.22.176.0/21 203.22.194.0/24 203.22.242.0/23 203.22.245.0/24 203.22.246.0/24 203.22.252.0/23 203.23.0.0/24 203.23.47.0/24 203.23.61.0/24 203.23.62.0/23 203.23.73.0/24 203.23.85.0/24 203.23.92.0/22 203.23.98.0/24 203.23.107.0/24 203.23.112.0/24 203.23.130.0/24 203.23.140.0/23 203.23.172.0/24 203.23.182.0/24 203.23.186.0/23 203.23.192.0/24 203.23.197.0/24 203.23.198.0/24 203.23.204.0/22 203.23.224.0/24 203.23.226.0/23 203.23.228.0/22 203.23.249.0/24 203.23.251.0/24 203.24.13.0/24 203.24.18.0/24 203.24.27.0/24 203.24.43.0/24 203.24.56.0/24 203.24.58.0/24 203.24.67.0/24 203.24.74.0/24 203.24.79.0/24 203.24.80.0/23 203.24.84.0/23 203.24.86.0/24 203.24.90.0/24 203.24.111.0/24 203.24.112.0/24 203.24.116.0/24 203.24.122.0/23 203.24.145.0/24 203.24.152.0/23 203.24.157.0/24 203.24.161.0/24 203.24.167.0/24 203.24.186.0/23 203.24.199.0/24 203.24.202.0/24 203.24.212.0/23 203.24.217.0/24 203.24.219.0/24 203.24.244.0/24 203.25.19.0/24 203.25.20.0/23 203.25.46.0/24 203.25.48.0/21 203.25.64.0/23 203.25.91.0/24 203.25.99.0/24 203.25.100.0/24 203.25.106.0/24 203.25.131.0/24 203.25.135.0/24 203.25.138.0/24 203.25.147.0/24 203.25.153.0/24 203.25.154.0/23 203.25.164.0/24 203.25.166.0/24 203.25.174.0/23 203.25.180.0/24 203.25.182.0/24 203.25.191.0/24 203.25.199.0/24 203.25.200.0/24 203.25.202.0/23 203.25.208.0/20 203.25.229.0/24 203.25.235.0/24 203.25.236.0/24 203.25.242.0/24 203.26.12.0/24 203.26.34.0/24 203.26.49.0/24 203.26.50.0/24 203.26.55.0/24 203.26.56.0/23 203.26.60.0/24 203.26.65.0/24 203.26.68.0/24 203.26.76.0/24 203.26.80.0/24 203.26.84.0/24 203.26.97.0/24 203.26.102.0/23 203.26.115.0/24 203.26.116.0/24 203.26.129.0/24 203.26.143.0/24 203.26.144.0/24 203.26.148.0/23 203.26.154.0/24 203.26.158.0/23 203.26.170.0/24 203.26.173.0/24 203.26.176.0/24 203.26.185.0/24 203.26.202.0/23 203.26.210.0/24 203.26.214.0/24 203.26.222.0/24 203.26.224.0/24 203.26.228.0/24 203.26.232.0/24 203.27.0.0/24 203.27.10.0/24 203.27.15.0/24 203.27.16.0/24 203.27.20.0/24 203.27.22.0/23 203.27.40.0/24 203.27.45.0/24 203.27.53.0/24 203.27.65.0/24 203.27.66.0/24 203.27.81.0/24 203.27.88.0/24 203.27.102.0/24 203.27.109.0/24 203.27.117.0/24 203.27.121.0/24 203.27.122.0/23 203.27.125.0/24 203.27.200.0/24 203.27.202.0/24 203.27.233.0/24 203.27.241.0/24 203.27.250.0/24 203.28.10.0/24 203.28.12.0/24 203.28.33.0/24 203.28.34.0/23 203.28.43.0/24 203.28.44.0/24 203.28.54.0/24 203.28.56.0/24 203.28.73.0/24 203.28.74.0/24 203.28.76.0/24 203.28.86.0/24 203.28.88.0/24 203.28.112.0/24 203.28.131.0/24 203.28.136.0/24 203.28.140.0/24 203.28.145.0/24 203.28.165.0/24 203.28.169.0/24 203.28.170.0/24 203.28.178.0/23 203.28.185.0/24 203.28.187.0/24 203.28.196.0/24 203.28.226.0/23 203.28.239.0/24 203.29.2.0/24 203.29.8.0/23 203.29.13.0/24 203.29.14.0/24 203.29.28.0/24 203.29.46.0/24 203.29.57.0/24 203.29.61.0/24 203.29.63.0/24 203.29.69.0/24 203.29.73.0/24 203.29.81.0/24 203.29.90.0/24 203.29.95.0/24 203.29.100.0/24 203.29.103.0/24 203.29.112.0/24 203.29.120.0/22 203.29.182.0/23 203.29.187.0/24 203.29.189.0/24 203.29.190.0/24 203.29.205.0/24 203.29.210.0/24 203.29.217.0/24 203.29.227.0/24 203.29.231.0/24 203.29.233.0/24 203.29.234.0/24 203.29.248.0/24 203.29.254.0/23 203.30.16.0/23 203.30.25.0/24 203.30.27.0/24 203.30.29.0/24 203.30.66.0/24 203.30.81.0/24 203.30.87.0/24 203.30.111.0/24 203.30.121.0/24 203.30.123.0/24 203.30.152.0/24 203.30.156.0/24 203.30.162.0/24 203.30.173.0/24 203.30.175.0/24 203.30.187.0/24 203.30.194.0/24 203.30.217.0/24 203.30.220.0/24 203.30.222.0/24 203.30.232.0/23 203.30.235.0/24 203.30.240.0/23 203.30.246.0/24 203.30.250.0/23 203.31.45.0/24 203.31.46.0/24 203.31.49.0/24 203.31.51.0/24 203.31.54.0/23 203.31.69.0/24 203.31.72.0/24 203.31.80.0/24 203.31.85.0/24 203.31.97.0/24 203.31.105.0/24 203.31.106.0/24 203.31.108.0/23 203.31.124.0/24 203.31.162.0/24 203.31.174.0/24 203.31.177.0/24 203.31.181.0/24 203.31.187.0/24 203.31.189.0/24 203.31.204.0/24 203.31.220.0/24 203.31.222.0/23 203.31.225.0/24 203.31.229.0/24 203.31.248.0/23 203.31.253.0/24 203.32.20.0/24 203.32.48.0/23 203.32.56.0/24 203.32.60.0/24 203.32.62.0/24 203.32.68.0/23 203.32.76.0/24 203.32.81.0/24 203.32.84.0/23 203.32.95.0/24 203.32.102.0/24 203.32.105.0/24 203.32.130.0/24 203.32.133.0/24 203.32.140.0/24 203.32.152.0/24 203.32.186.0/23 203.32.192.0/24 203.32.196.0/24 203.32.203.0/24 203.32.204.0/23 203.32.212.0/24 203.33.4.0/24 203.33.7.0/24 203.33.8.0/21 203.33.21.0/24 203.33.26.0/24 203.33.32.0/24 203.33.63.0/24 203.33.64.0/24 203.33.67.0/24 203.33.68.0/24 203.33.73.0/24 203.33.79.0/24 203.33.100.0/24 203.33.122.0/24 203.33.129.0/24 203.33.131.0/24 203.33.145.0/24 203.33.156.0/24 203.33.158.0/23 203.33.174.0/24 203.33.185.0/24 203.33.200.0/24 203.33.202.0/23 203.33.204.0/24 203.33.206.0/23 203.33.214.0/23 203.33.224.0/23 203.33.226.0/24 203.33.233.0/24 203.33.243.0/24 203.33.250.0/24 203.34.4.0/24 203.34.21.0/24 203.34.27.0/24 203.34.39.0/24 203.34.48.0/23 203.34.54.0/24 203.34.56.0/23 203.34.67.0/24 203.34.69.0/24 203.34.76.0/24 203.34.92.0/24 203.34.106.0/24 203.34.113.0/24 203.34.147.0/24 203.34.150.0/24 203.34.152.0/23 203.34.161.0/24 203.34.162.0/24 203.34.187.0/24 203.34.192.0/21 203.34.204.0/22 203.34.232.0/24 203.34.240.0/24 203.34.242.0/24 203.34.245.0/24 203.34.251.0/24 203.55.2.0/23 203.55.4.0/24 203.55.10.0/24 203.55.13.0/24 203.55.22.0/24 203.55.30.0/24 203.55.93.0/24 203.55.101.0/24 203.55.109.0/24 203.55.110.0/24 203.55.116.0/23 203.55.119.0/24 203.55.128.0/23 203.55.146.0/23 203.55.192.0/24 203.55.196.0/24 203.55.218.0/23 203.55.221.0/24 203.55.224.0/24 203.56.1.0/24 203.56.4.0/24 203.56.12.0/24 203.56.24.0/24 203.56.38.0/24 203.56.40.0/24 203.56.46.0/24 203.56.48.0/21 203.56.68.0/23 203.56.82.0/23 203.56.84.0/23 203.56.95.0/24 203.56.110.0/24 203.56.121.0/24 203.56.161.0/24 203.56.169.0/24 203.56.172.0/23 203.56.175.0/24 203.56.183.0/24 203.56.185.0/24 203.56.187.0/24 203.56.192.0/24 203.56.198.0/24 203.56.201.0/24 203.56.208.0/23 203.56.210.0/24 203.56.214.0/24 203.56.216.0/24 203.56.227.0/24 203.56.228.0/24 203.56.231.0/24 203.56.232.0/24 203.56.240.0/24 203.56.252.0/24 203.56.254.0/24 203.57.5.0/24 203.57.6.0/24 203.57.12.0/23 203.57.28.0/24 203.57.39.0/24 203.57.46.0/24 203.57.58.0/24 203.57.61.0/24 203.57.66.0/24 203.57.69.0/24 203.57.70.0/23 203.57.73.0/24 203.57.90.0/24 203.57.101.0/24 203.57.109.0/24 203.57.123.0/24 203.57.157.0/24 203.57.200.0/24 203.57.202.0/24 203.57.206.0/24 203.57.222.0/24 203.57.224.0/20 203.57.246.0/23 203.57.249.0/24 203.57.253.0/24 203.57.254.0/23 203.62.2.0/24 203.62.131.0/24 203.62.139.0/24 203.62.161.0/24 203.62.197.0/24 203.62.228.0/22 203.62.234.0/24 203.62.246.0/24 203.76.160.0/22 203.76.168.0/22 203.76.208.0/21 203.76.216.0/22 203.76.240.0/21 203.77.180.0/22 203.78.48.0/20 203.78.156.0/22 203.79.0.0/20 203.79.32.0/20 203.80.4.0/23 203.80.32.0/20 203.80.57.0/24 203.80.129.0/24 203.80.132.0/22 203.80.136.0/21 203.80.144.0/20 203.81.0.0/21 203.81.16.0/20 203.81.244.0/22 203.82.0.0/23 203.82.16.0/21 203.82.112.0/20 203.82.224.0/20 203.83.0.0/22 203.83.8.0/21 203.83.56.0/21 203.83.224.0/20 203.86.0.0/17 203.86.250.0/24 203.86.254.0/23 203.88.32.0/19 203.88.100.0/22 203.88.192.0/19 203.89.0.0/22 203.89.8.0/21 203.89.100.0/22 203.89.133.0/24 203.89.136.0/22 203.89.144.0/24 203.90.0.0/22 203.90.8.0/21 203.90.128.0/18 203.90.192.0/19 203.91.32.0/19 203.91.96.0/20 203.91.120.0/21 203.92.0.0/22 203.92.6.0/24 203.92.160.0/19 203.93.0.0/16 203.94.0.0/19 203.95.0.0/21 203.95.96.0/19 203.95.128.0/18 203.95.200.0/21 203.95.208.0/22 203.95.224.0/19 203.99.8.0/21 203.99.16.0/20 203.99.80.0/20 203.100.32.0/20 203.100.48.0/21 203.100.58.0/24 203.100.60.0/24 203.100.63.0/24 203.100.80.0/20 203.100.96.0/19 203.100.192.0/20 203.104.32.0/20 203.105.96.0/19 203.105.128.0/19 203.107.0.0/17 203.110.160.0/19 203.110.208.0/20 203.110.232.0/23 203.110.234.0/24 203.114.80.0/20 203.114.244.0/22 203.118.192.0/19 203.118.241.0/24 203.118.248.0/22 203.119.24.0/21 203.119.32.0/22 203.119.80.0/22 203.119.85.0/24 203.119.113.0/24 203.119.114.0/23 203.119.116.0/22 203.119.120.0/21 203.119.128.0/17 203.123.58.0/24 203.128.32.0/19 203.128.96.0/19 203.128.224.0/21 203.129.8.0/21 203.130.32.0/19 203.132.32.0/19 203.134.240.0/21 203.135.96.0/19 203.135.160.0/20 203.142.219.0/24 203.142.224.0/19 203.144.96.0/19 203.145.0.0/19 203.148.0.0/18 203.148.64.0/20 203.148.80.0/22 203.148.86.0/23 203.149.92.0/22 203.152.64.0/19 203.152.128.0/19 203.153.0.0/22 203.156.192.0/18 203.158.16.0/21 203.160.52.0/22 203.160.104.0/21 203.160.129.0/24 203.160.192.0/19 203.161.0.0/22 203.161.180.0/24 203.161.183.0/24 203.161.192.0/19 203.166.160.0/19 203.167.28.0/22 203.168.0.0/19 203.170.58.0/23 203.171.0.0/22 203.171.208.0/24 203.171.224.0/20 203.174.4.0/24 203.174.6.0/23 203.174.96.0/19 203.175.128.0/19 203.175.192.0/18 203.176.0.0/18 203.176.64.0/19 203.176.168.0/21 203.184.80.0/20 203.185.189.0/24 203.187.160.0/19 203.189.0.0/23 203.189.6.0/23 203.189.112.0/22 203.189.192.0/19 203.189.232.0/22 203.189.240.0/22 203.190.96.0/20 203.190.249.0/24 203.191.0.0/23 203.191.2.0/24 203.191.5.0/24 203.191.7.0/24 203.191.16.0/20 203.191.64.0/18 203.191.133.0/24 203.191.144.0/20 203.192.0.0/19 203.193.224.0/19 203.194.120.0/21 203.195.64.0/19 203.195.112.0/21 203.195.128.0/17 203.196.0.0/20 203.196.28.0/22 203.201.181.0/24 203.201.182.0/24 203.202.236.0/22 203.205.64.0/19 203.205.128.0/17 203.207.64.0/18 203.207.128.0/17 203.208.0.0/20 203.208.16.0/22 203.208.32.0/19 203.209.224.0/19 203.212.0.0/20 203.212.80.0/20 203.215.232.0/21 203.217.164.0/22 203.223.0.0/20 203.223.16.0/21 204.52.191.0/24 210.2.0.0/19 210.5.0.0/19 210.5.56.0/21 210.5.128.0/19 210.7.56.0/21 210.12.0.0/15 210.14.64.0/19 210.14.112.0/20 210.14.128.0/17 210.15.0.0/17 210.15.128.0/18 210.16.104.0/22 210.16.128.0/18 210.21.0.0/16 210.22.0.0/16 210.23.32.0/19 210.25.0.0/16 210.26.0.0/15 210.28.0.0/14 210.32.0.0/12 210.51.0.0/16 210.52.0.0/15 210.56.192.0/19 210.72.0.0/14 210.76.0.0/15 210.78.0.0/16 210.79.64.0/18 210.79.224.0/19 210.82.0.0/15 210.87.128.0/18 210.185.192.0/18 210.192.96.0/19 211.64.0.0/13 211.80.0.0/12 211.96.0.0/13 211.136.0.0/13 211.144.0.0/12 211.160.0.0/13 212.64.0.0/17 212.129.128.0/17 218.0.0.0/11 218.56.0.0/13 218.64.0.0/11 218.96.0.0/14 218.100.88.0/21 218.100.96.0/19 218.100.128.0/17 218.104.0.0/14 218.108.0.0/15 218.185.192.0/19 218.185.240.0/21 218.192.0.0/12 218.240.0.0/13 218.249.0.0/16 219.72.0.0/16 219.82.0.0/16 219.83.128.0/17 219.90.68.0/22 219.90.72.0/21 219.128.0.0/11 219.216.0.0/13 219.224.0.0/12 219.242.0.0/15 219.244.0.0/14 220.101.192.0/18 220.112.0.0/14 220.152.128.0/17 220.154.0.0/15 220.158.240.0/22 220.160.0.0/11 220.192.0.0/12 220.231.0.0/18 220.231.128.0/17 220.232.64.0/18 220.234.0.0/16 220.242.0.0/15 220.247.136.0/21 220.248.0.0/14 220.252.0.0/16 221.0.0.0/13 221.8.0.0/14 221.12.0.0/17 221.12.128.0/18 221.13.0.0/16 221.14.0.0/15 221.122.0.0/15 221.128.128.0/17 221.129.0.0/16 221.130.0.0/15 221.133.224.0/19 221.136.0.0/15 221.172.0.0/14 221.176.0.0/13 221.192.0.0/14 221.196.0.0/15 221.198.0.0/16 221.199.0.0/17 221.199.128.0/18 221.199.192.0/20 221.199.224.0/19 221.200.0.0/13 221.208.0.0/12 221.224.0.0/12 222.16.0.0/12 222.32.0.0/11 222.64.0.0/11 222.125.0.0/16 222.126.128.0/17 222.128.0.0/12 222.160.0.0/14 222.168.0.0/13 222.176.0.0/12 222.192.0.0/11 222.240.0.0/13 222.248.0.0/15 223.0.0.0/12 223.20.0.0/15 223.27.184.0/22 223.29.208.0/22 223.29.252.0/22 223.64.0.0/11 223.96.0.0/12 223.112.0.0/14 223.116.0.0/15 223.120.128.0/17 223.121.128.0/17 223.122.0.0/15 223.124.0.0/14 223.128.0.0/15 223.144.0.0/12 223.160.0.0/14 223.166.0.0/15 223.192.0.0/15 223.198.0.0/15 223.201.0.0/16 223.202.0.0/15 223.208.0.0/13 223.220.0.0/15 223.223.176.0/20 223.223.192.0/20 223.240.0.0/13 223.248.0.0/14 223.252.128.0/17 223.254.0.0/16 223.255.0.0/17 223.255.236.0/22 223.255.252.0/23 2001:250::/31 2001:252::/32 2001:254::/32 2001:256::/32 2001:7fa:5::/48 2001:7fa:10::/48 2001:c68::/32 2001:cc0::/32 2001:da8::/31 2001:daa::/32 2001:dc7::/32 2001:dd8:1::/48 2001:dd8:5::/48 2001:dd8:1a::/48 2001:dd9::/48 2001:df0:27e::/48 2001:df0:423::/48 2001:df0:2180::/48 2001:df0:2d80::/48 2001:df0:2e00::/48 2001:df0:2e80::/48 2001:df0:4500::/48 2001:df0:4580::/48 2001:df0:5d00::/47 2001:df0:5d80::/48 2001:df0:9a00::/48 2001:df0:b180::/48 2001:df0:bf80::/48 2001:df0:d180::/48 2001:df0:d880::/48 2001:df1:680::/48 2001:df1:c80::/48 2001:df1:2080::/48 2001:df1:3d00::/48 2001:df1:4180::/48 2001:df1:4580::/48 2001:df1:5280::/48 2001:df1:5b80::/48 2001:df1:6180::/48 2001:df1:6b80::/48 2001:df1:8b00::/48 2001:df1:a100::/48 2001:df1:b980::/48 2001:df1:bd80::/48 2001:df1:c900::/48 2001:df1:d100::/48 2001:df1:d180::/48 2001:df1:da00::/48 2001:df1:e600::/48 2001:df1:f480::/48 2001:df1:f580::/48 2001:df1:fd80::/48 2001:df2:80::/48 2001:df2:180::/47 2001:df2:5200::/48 2001:df2:5780::/48 2001:df2:5a80::/48 2001:df3:b100::/48 2001:df4:1500::/48 2001:df4:2f00::/48 2001:df4:5900::/48 2001:df4:cf00::/48 2001:df5:7800::/48 2001:df6:100::/48 2001:df6:f00::/48 2001:df6:1c00::/48 2001:df6:3d00::/48 2001:df6:5d00::/48 2001:df6:6800::/48 2001:df6:df00::/48 2001:df6:f400::/48 2001:df7:5900::/48 2001:df7:6600::/48 2001:df7:ab00::/48 2001:e08::/32 2001:e18::/32 2001:e80::/32 2001:e88::/32 2001:f38::/32 2001:f88::/32 2001:4438::/32 2001:4510::/29 2400:1040::/32 2400:12c0::/32 2400:1340::/32 2400:1380::/32 2400:15c0::/32 2400:1640::/32 2400:16c0::/32 2400:1740::/32 2400:17c0::/32 2400:1840::/32 2400:18c0::/32 2400:1940::/32 2400:19c0::/32 2400:1a40::/32 2400:1ac0::/32 2400:1b40::/32 2400:1cc0::/32 2400:1d40::/32 2400:1dc0::/32 2400:1e40::/32 2400:1ec0::/32 2400:1f40::/32 2400:1fc0::/32 2400:3040::/32 2400:3140::/32 2400:31c0::/32 2400:3200::/32 2400:3280::/32 2400:32c0::/32 2400:3340::/32 2400:33c0::/32 2400:3440::/32 2400:34c0::/32 2400:3540::/32 2400:35c0::/32 2400:3600::/32 2400:3640::/32 2400:36c0::/32 2400:38c0::/32 2400:39c0::/32 2400:3a00::/32 2400:3a40::/32 2400:3b40::/32 2400:3bc0::/32 2400:3c40::/32 2400:3cc0::/32 2400:3e00::/32 2400:3f40::/32 2400:3fc0::/32 2400:4440::/32 2400:44c0::/32 2400:4540::/32 2400:4600::/32 2400:4640::/32 2400:46c0::/32 2400:4740::/32 2400:4bc0::/32 2400:4e00::/32 2400:4e40::/32 2400:5080::/32 2400:5280::/32 2400:5400::/32 2400:5580::/32 2400:55c0::/32 2400:5600::/32 2400:5640::/32 2400:56c0::/32 2400:57c0::/32 2400:5840::/32 2400:5a00::/32 2400:5a40::/32 2400:5ac0::/32 2400:5b40::/32 2400:5bc0::/32 2400:5c40::/32 2400:5c80::/32 2400:5cc0::/32 2400:5e80::/32 2400:5fc0::/32 2400:6000::/32 2400:6040::/32 2400:60c0::/32 2400:61c0::/32 2400:6200::/32 2400:6600::/32 2400:6640::/32 2400:66c0::/32 2400:6740::/32 2400:67c0::/32 2400:6840::/32 2400:68c0::/32 2400:6940::/32 2400:69c0::/32 2400:6a00::/32 2400:6a40::/32 2400:6ac0::/32 2400:6b40::/32 2400:6bc0::/32 2400:6c40::/32 2400:6cc0::/32 2400:6d40::/32 2400:6dc0::/32 2400:6e00::/32 2400:6e40::/32 2400:6ec0::/32 2400:6f40::/32 2400:6f80::/32 2400:6fc0::/32 2400:7040::/32 2400:7100::/32 2400:7140::/32 2400:71c0::/32 2400:7200::/32 2400:7240::/32 2400:72c0::/32 2400:7340::/32 2400:73c0::/32 2400:7440::/32 2400:74c0::/32 2400:7540::/32 2400:75c0::/32 2400:7640::/32 2400:7680::/32 2400:76c0::/32 2400:7740::/32 2400:77c0::/32 2400:79c0::/32 2400:7ac0::/32 2400:7bc0::/32 2400:7f80::/32 2400:7fc0::/32 2400:8080::/32 2400:8200::/32 2400:82c0::/32 2400:8580::/32 2400:8600::/32 2400:8780::/32 2400:87c0::/32 2400:8840::/32 2400:8980::/32 2400:89c0::/32 2400:8e00::/32 2400:8f00::/32 2400:8fc0::/32 2400:9040::/32 2400:9340::/32 2400:9580::/32 2400:95c0::/32 2400:9600::/32 2400:98c0::/32 2400:9a00::/32 2400:9dc0::/32 2400:9e00::/32 2400:a040::/32 2400:a380::/32 2400:a480::/32 2400:a6c0::/32 2400:a780::/32 2400:a8c0::/32 2400:a900::/32 2400:a980::/29 2400:abc0::/32 2400:ae00::/32 2400:b200::/32 2400:b2c0::/32 2400:b500::/32 2400:b600::/32 2400:b6c0::/32 2400:b700::/32 2400:b7c0::/32 2400:b8c0::/32 2400:b9c0::/32 2400:ba00::/32 2400:ba40::/31 2400:bac0::/32 2400:bc40::/32 2400:be00::/32 2400:bf00::/32 2400:c200::/32 2400:c380::/32 2400:c840::/32 2400:c8c0::/32 2400:c940::/32 2400:c9c0::/32 2400:ca40::/32 2400:cac0::/32 2400:cb40::/32 2400:cb80::/32 2400:cbc0::/32 2400:cc40::/32 2400:cc80::/32 2400:ccc0::/32 2400:cd40::/32 2400:cdc0::/32 2400:ce00::/32 2400:ce40::/32 2400:cf40::/32 2400:cf80::/32 2400:cfc0::/32 2400:d0c0::/32 2400:d100::/32 2400:d1c0::/32 2400:d200::/32 2400:d300::/32 2400:d380::/32 2400:d440::/32 2400:d600::/32 2400:d6c0::/32 2400:d780::/32 2400:da00::/32 2400:dd00::/28 2400:dd40::/32 2400:de00::/32 2400:de80::/32 2400:e0c0::/32 2400:e140::/32 2400:e5c0::/32 2400:e680::/32 2400:e880::/32 2400:ebc0::/32 2400:edc0::/32 2400:ee00::/32 2400:eec0::/32 2400:ef40::/32 2400:f480::/32 2400:f540::/32 2400:f5c0::/32 2400:f7c0::/32 2400:f840::/32 2400:f980::/32 2400:fac0::/32 2400:fb40::/32 2400:fbc0::/32 2400:fc40::/32 2400:fcc0::/32 2400:fe00::/32 2401:80::/32 2401:140::/32 2401:1c0::/32 2401:540::/32 2401:780::/32 2401:7c0::/32 2401:9c0::/32 2401:a00::/32 2401:a40::/32 2401:ac0::/32 2401:b40::/32 2401:bc0::/32 2401:c40::/32 2401:cc0::/32 2401:d40::/32 2401:e00::/32 2401:1000::/32 2401:11c0::/32 2401:1200::/32 2401:12c0::/32 2401:15c0::/32 2401:1740::/32 2401:18c0::/32 2401:1940::/32 2401:19c0::/32 2401:1a40::/32 2401:1ac0::/32 2401:1d40::/32 2401:1dc0::/32 2401:1e00::/32 2401:1ec0::/32 2401:1f40::/32 2401:2040::/32 2401:2080::/32 2401:23c0::/32 2401:2600::/32 2401:2780::/32 2401:2980::/32 2401:2a00::/32 2401:2b40::/32 2401:2e00::/32 2401:3100::/32 2401:3380::/32 2401:33c0::/32 2401:3440::/32 2401:3480::/32 2401:34c0::/32 2401:3640::/32 2401:3780::/32 2401:3800::/32 2401:3880::/32 2401:3980::/32 2401:3a00::/32 2401:3a80::/32 2401:3b80::/32 2401:3c80::/32 2401:3d80::/32 2401:3e80::/32 2401:3f80::/32 2401:4080::/32 2401:4180::/32 2401:4280::/32 2401:4380::/32 2401:4480::/32 2401:4580::/32 2401:4680::/32 2401:4780::/32 2401:4880::/32 2401:4a80::/32 2401:4b00::/32 2401:4f80::/32 2401:5180::/32 2401:5680::/32 2401:56c0::/32 2401:59c0::/32 2401:5b40::/32 2401:5c80::/32 2401:7180::/32 2401:71c0::/32 2401:7240::/32 2401:7340::/32 2401:7580::/32 2401:7680::/32 2401:7700::/32 2401:7780::/32 2401:7880::/32 2401:7980::/32 2401:7a00::/32 2401:7a80::/32 2401:7b80::/32 2401:7bc0::/32 2401:7c80::/32 2401:7cc0::/32 2401:7d40::/32 2401:7d80::/32 2401:7e00::/32 2401:7f80::/32 2401:8200::/32 2401:82c0::/32 2401:8380::/32 2401:8540::/32 2401:8600::/32 2401:8680::/32 2401:8840::/32 2401:8d00::/32 2401:8e40::/32 2401:8f40::/32 2401:8fc0::/32 2401:9340::/32 2401:9380::/32 2401:9600::/32 2401:96c0::/32 2401:9740::/32 2401:98c0::/32 2401:9a00::/32 2401:9ac0::/32 2401:9b40::/32 2401:9bc0::/32 2401:9dc0::/32 2401:9e40::/32 2401:9f80::/32 2401:a140::/32 2401:a180::/32 2401:a340::/32 2401:a3c0::/32 2401:a4c0::/32 2401:a540::/32 2401:a5c0::/32 2401:a640::/32 2401:a940::/32 2401:a980::/32 2401:aa00::/32 2401:aa40::/32 2401:acc0::/32 2401:ad40::/32 2401:adc0::/32 2401:b040::/32 2401:b180::/32 2401:b340::/32 2401:b400::/32 2401:b480::/32 2401:b4c0::/32 2401:b540::/32 2401:b580::/32 2401:b600::/32 2401:b680::/32 2401:b6c0::/32 2401:b7c0::/32 2401:b940::/32 2401:ba00::/32 2401:ba40::/32 2401:bb80::/32 2401:be00::/32 2401:c200::/32 2401:c540::/32 2401:c600::/32 2401:c640::/32 2401:c6c0::/32 2401:c840::/32 2401:c8c0::/32 2401:ca00::/32 2401:ca80::/32 2401:cb80::/32 2401:cc00::/32 2401:ce00::/32 2401:cf40::/32 2401:cfc0::/32 2401:d0c0::/32 2401:d140::/32 2401:d180::/32 2401:d2c0::/32 2401:d340::/32 2401:d780::/32 2401:da00::/32 2401:de00::/32 2401:e080::/32 2401:e0c0::/32 2401:e140::/32 2401:e240::/32 2401:e2c0::/32 2401:e340::/32 2401:e6c0::/32 2401:e840::/32 2401:e8c0::/32 2401:e940::/32 2401:e9c0::/32 2401:ec00::/32 2401:ec40::/32 2401:f300::/32 2401:f7c0::/32 2401:fa80::/32 2401:fac0::/32 2401:fb80::/32 2401:fc80::/32 2401:fe80::/32 2401:ffc0::/32 2402:440::/32 2402:5c0::/32 2402:840::/32 2402:880::/32 2402:ac0::/32 2402:e00::/32 2402:fc0::/32 2402:1000::/32 2402:1440::/32 2402:14c0::/32 2402:1540::/32 2402:1600::/32 2402:1740::/32 2402:19c0::/32 2402:1ec0::/32 2402:1f40::/32 2402:1f80::/32 2402:2000::/32 2402:2280::/32 2402:22c0::/32 2402:2440::/32 2402:24c0::/32 2402:2540::/32 2402:2640::/32 2402:2780::/32 2402:27c0::/32 2402:2a00::/32 2402:2b80::/32 2402:2bc0::/32 2402:2d00::/32 2402:2d80::/32 2402:2e80::/32 2402:2f40::/32 2402:3040::/32 2402:3080::/32 2402:3140::/32 2402:3180::/32 2402:31c0::/32 2402:3240::/32 2402:33c0::/32 2402:39c0::/32 2402:3a40::/32 2402:3ac0::/32 2402:3c00::/32 2402:3e00::/32 2402:3ec0::/32 2402:3f40::/32 2402:3f80::/32 2402:4140::/32 2402:42c0::/32 2402:4340::/32 2402:43c0::/32 2402:4440::/32 2402:4500::/32 2402:4540::/32 2402:4a00::/32 2402:4a40::/32 2402:4a80::/32 2402:4ac0::/32 2402:4b80::/32 2402:4bc0::/32 2402:4c40::/32 2402:4d80::/32 2402:4e00::/32 2402:4ec0::/32 2402:4f80::/32 2402:50c0::/32 2402:5140::/32 2402:5180::/32 2402:51c0::/32 2402:5240::/32 2402:52c0::/32 2402:5340::/32 2402:5880::/32 2402:5940::/32 2402:59c0::/32 2402:5a40::/32 2402:5b40::/32 2402:5bc0::/32 2402:5d00::/32 2402:5e00::/32 2402:5e40::/32 2402:5ec0::/32 2402:5f40::/32 2402:6280::/32 2402:62c0::/32 2402:64c0::/32 2402:65c0::/32 2402:66c0::/32 2402:6740::/32 2402:67c0::/32 2402:6a00::/32 2402:6b40::/32 2402:6bc0::/32 2402:6dc0::/32 2402:6e00::/32 2402:6e80::/32 2402:6ec0::/32 2402:6f40::/32 2402:6fc0::/32 2402:7040::/32 2402:7080::/32 2402:70c0::/32 2402:7140::/32 2402:71c0::/32 2402:7240::/32 2402:72c0::/32 2402:7540::/32 2402:75c0::/32 2402:7740::/32 2402:7d00::/32 2402:7d80::/32 2402:8180::/32 2402:8280::/32 2402:8300::/32 2402:8380::/32 2402:85c0::/32 2402:87c0::/32 2402:8800::/32 2402:8840::/32 2402:8900::/32 2402:8940::/32 2402:89c0::/32 2402:8b40::/32 2402:8bc0::/32 2402:8cc0::/32 2402:8d40::/32 2402:8f40::/32 2402:8f80::/32 2402:9240::/32 2402:92c0::/32 2402:93c0::/32 2402:9440::/32 2402:9480::/32 2402:94c0::/32 2402:9580::/32 2402:95c0::/32 2402:9680::/32 2402:96c0::/32 2402:9840::/32 2402:98c0::/32 2402:9940::/32 2402:9a80::/32 2402:9b80::/32 2402:9f80::/32 2402:9fc0::/32 2402:a080::/32 2402:a180::/32 2402:a200::/32 2402:a240::/32 2402:a280::/32 2402:a380::/32 2402:a3c0::/32 2402:a640::/32 2402:a680::/32 2402:a6c0::/32 2402:a840::/32 2402:a880::/32 2402:a9c0::/32 2402:aa80::/32 2402:ab80::/32 2402:ae00::/32 2402:ae40::/32 2402:aec0::/32 2402:af80::/32 2402:afc0::/32 2402:b080::/32 2402:b200::/32 2402:b380::/32 2402:b3c0::/32 2402:b440::/32 2402:b6c0::/32 2402:b880::/32 2402:b8c0::/32 2402:b940::/32 2402:b980::/32 2402:ba80::/32 2402:bac0::/32 2402:bbc0::/32 2402:bec0::/32 2402:bf80::/32 2402:c280::/32 2402:c3c0::/32 2402:c5c0::/32 2402:c9c0::/32 2402:cbc0::/32 2402:cc40::/32 2402:cc80::/32 2402:cf00::/32 2402:cf40::/32 2402:d040::/32 2402:d140::/32 2402:d2c0::/32 2402:d300::/32 2402:d340::/32 2402:d380::/32 2402:d5c0::/32 2402:d6c0::/32 2402:d740::/32 2402:d780::/32 2402:d880::/32 2402:d980::/32 2402:da40::/32 2402:db40::/32 2402:dcc0::/32 2402:de40::/32 2402:dec0::/32 2402:df40::/32 2402:dfc0::/32 2402:e040::/32 2402:e0c0::/32 2402:e140::/32 2402:e2c0::/32 2402:e3c0::/32 2402:e480::/32 2402:e540::/32 2402:e680::/32 2402:e740::/32 2402:e780::/32 2402:e7c0::/32 2402:e880::/32 2402:e980::/32 2402:eb80::/32 2402:ec80::/32 2402:ed80::/32 2402:ef40::/32 2402:ef80::/32 2402:f000::/32 2402:f140::/32 2402:f340::/32 2402:f3c0::/32 2402:f480::/32 2402:f540::/32 2402:f580::/32 2402:f740::/32 2402:f780::/32 2402:f8c0::/32 2402:f980::/32 2402:f9c0::/32 2402:fac0::/32 2402:fcc0::/32 2402:ff40::/32 2402:ffc0::/32 2403:600::/32 2403:700::/32 2403:7c0::/32 2403:800::/31 2403:980::/32 2403:a80::/32 2403:b80::/32 2403:c80::/32 2403:d40::/32 2403:d80::/32 2403:e80::/32 2403:f00::/32 2403:f40::/32 2403:f80::/32 2403:fc0::/32 2403:1180::/32 2403:1340::/32 2403:1440::/32 2403:1580::/32 2403:16c0::/32 2403:17c0::/32 2403:1980::/32 2403:1a40::/32 2403:1b80::/32 2403:1c80::/32 2403:1d80::/32 2403:1dc0::/32 2403:1e80::/32 2403:1ec0::/32 2403:1f80::/32 2403:2040::/32 2403:2080::/32 2403:2180::/32 2403:2240::/32 2403:2280::/32 2403:2380::/32 2403:2440::/32 2403:24c0::/32 2403:2580::/32 2403:25c0::/32 2403:2680::/32 2403:26c0::/32 2403:2740::/32 2403:2780::/32 2403:28c0::/32 2403:2940::/32 2403:2a00::/32 2403:2a40::/32 2403:2ac0::/32 2403:2b40::/32 2403:2bc0::/32 2403:2cc0::/32 2403:2d80::/32 2403:2f40::/32 2403:2fc0::/32 2403:3040::/32 2403:30c0::/32 2403:3140::/32 2403:3280::/32 2403:32c0::/32 2403:3380::/32 2403:3480::/32 2403:3580::/32 2403:3640::/32 2403:3680::/32 2403:36c0::/32 2403:3740::/32 2403:3780::/32 2403:37c0::/32 2403:3840::/32 2403:3880::/32 2403:38c0::/32 2403:3940::/32 2403:3980::/32 2403:39c0::/32 2403:3a40::/32 2403:3b40::/32 2403:3b80::/32 2403:3bc0::/32 2403:3c40::/32 2403:3c80::/32 2403:3cc0::/32 2403:3d40::/32 2403:3d80::/32 2403:3dc0::/32 2403:3e80::/32 2403:3ec0::/32 2403:3f40::/32 2403:3f80::/32 2403:4080::/32 2403:4180::/32 2403:4240::/32 2403:4280::/32 2403:4300::/32 2403:4380::/32 2403:4580::/32 2403:4680::/32 2403:4840::/32 2403:4880::/32 2403:4980::/32 2403:4a40::/32 2403:4a80::/32 2403:4b40::/32 2403:4b80::/32 2403:4c80::/32 2403:4cc0::/32 2403:4d40::/32 2403:4d80::/32 2403:4ec0::/32 2403:5040::/32 2403:5080::/32 2403:50c0::/32 2403:5280::/32 2403:5380::/32 2403:54c0::/32 2403:5540::/32 2403:5580::/32 2403:5640::/32 2403:5780::/32 2403:58c0::/32 2403:5980::/32 2403:5a80::/32 2403:5b40::/32 2403:5b80::/32 2403:5c80::/32 2403:5d80::/32 2403:5e40::/32 2403:5e80::/32 2403:5ec0::/32 2403:5f80::/32 2403:5fc0::/32 2403:6080::/32 2403:6180::/32 2403:6280::/32 2403:62c0::/32 2403:6380::/32 2403:6580::/32 2403:6680::/32 2403:6740::/32 2403:6780::/32 2403:6880::/32 2403:6980::/32 2403:6a00::/32 2403:6c80::/32 2403:6d40::/32 2403:6d80::/32 2403:6e80::/32 2403:6f40::/32 2403:6fc0::/32 2403:7040::/32 2403:7080::/32 2403:7180::/32 2403:7280::/32 2403:7380::/32 2403:7480::/32 2403:7540::/32 2403:7580::/32 2403:76c0::/32 2403:7700::/32 2403:7840::/32 2403:78c0::/32 2403:7a80::/32 2403:7b00::/32 2403:7d80::/32 2403:7e80::/32 2403:7f80::/32 2403:8080::/32 2403:8180::/32 2403:8280::/32 2403:8380::/32 2403:83c0::/32 2403:8480::/32 2403:8580::/32 2403:8880::/32 2403:8900::/32 2403:8980::/32 2403:8a40::/32 2403:8a80::/32 2403:8b00::/32 2403:8b80::/32 2403:8c00::/32 2403:8c80::/32 2403:8d00::/32 2403:8d80::/32 2403:8f80::/32 2403:9080::/32 2403:9180::/32 2403:9280::/32 2403:9380::/32 2403:9480::/32 2403:9580::/32 2403:9680::/32 2403:9780::/32 2403:9880::/32 2403:9a80::/32 2403:9ac0::/32 2403:9b00::/32 2403:9b40::/32 2403:9b80::/32 2403:9c80::/32 2403:9d00::/32 2403:9d80::/32 2403:9e40::/32 2403:9e80::/32 2403:9ec0::/32 2403:9f80::/32 2403:a100::/32 2403:a140::/32 2403:a200::/32 2403:a300::/32 2403:a480::/32 2403:a580::/32 2403:a680::/32 2403:a6c0::/32 2403:a780::/32 2403:a880::/32 2403:a940::/32 2403:a980::/32 2403:a9c0::/32 2403:aa40::/32 2403:aa80::/32 2403:ab80::/32 2403:ac00::/32 2403:af80::/32 2403:b080::/32 2403:b180::/32 2403:b280::/32 2403:b380::/32 2403:b400::/32 2403:b480::/32 2403:b580::/32 2403:b680::/32 2403:b780::/32 2403:b880::/32 2403:b980::/32 2403:ba40::/32 2403:c040::/32 2403:c080::/32 2403:c100::/32 2403:c140::/32 2403:c180::/32 2403:c3c0::/32 2403:c440::/32 2403:c480::/32 2403:c4c0::/32 2403:c980::/32 2403:cdc0::/32 2403:cec0::/32 2403:cf80::/32 2403:d080::/32 2403:d180::/32 2403:d280::/32 2403:d2c0::/32 2403:d380::/32 2403:d400::/32 2403:d440::/32 2403:d480::/32 2403:d580::/32 2403:d680::/32 2403:d780::/32 2403:d7c0::/32 2403:d880::/32 2403:d980::/32 2403:d9c0::/32 2403:da80::/32 2403:dac0::/32 2403:db00::/32 2403:db80::/32 2403:dc80::/32 2403:dd80::/32 2403:de80::/32 2403:df80::/32 2403:e080::/32 2403:e180::/32 2403:e280::/32 2403:e300::/32 2403:e480::/32 2403:e500::/32 2403:e580::/32 2403:e640::/32 2403:e680::/32 2403:e700::/32 2403:e780::/32 2403:e7c0::/32 2403:e880::/32 2403:e980::/32 2403:ea80::/32 2403:eac0::/32 2403:eb80::/32 2403:ec80::/32 2403:ed00::/32 2403:ed40::/32 2403:ed80::/32 2403:ee80::/32 2403:ef80::/32 2403:f080::/32 2403:f100::/32 2403:f180::/32 2403:f240::/32 2403:f280::/32 2403:f300::/32 2403:f380::/32 2403:f4c0::/32 2403:f580::/32 2403:f740::/32 2403:f8c0::/32 2403:f980::/32 2403:fb00::/32 2403:fb80::/32 2403:fc40::/32 2403:fe40::/32 2403:fe80::/32 2403:fec0::/32 2403:ff80::/32 2403:ffc0::/32 2404:100::/32 2404:158::/32 2404:240::/32 2404:280::/32 2404:440::/32 2404:480::/32 2404:680::/32 2404:a80::/32 2404:b80::/32 2404:bc0::/32 2404:c40::/32 2404:d80::/32 2404:f00::/32 2404:f80::/32 2404:1080::/32 2404:10c0::/32 2404:1180::/32 2404:14c0::/32 2404:1880::/32 2404:1c80::/32 2404:1cc0::/32 2404:1d80::/32 2404:1e80::/32 2404:1f40::/32 2404:21c0::/32 2404:30c0::/32 2404:3140::/32 2404:31c0::/32 2404:3240::/32 2404:32c0::/32 2404:3300::/32 2404:3340::/32 2404:3480::/32 2404:35c0::/32 2404:3640::/32 2404:36c0::/32 2404:3700::/32 2404:3740::/32 2404:37c0::/32 2404:3840::/32 2404:3940::/32 2404:3b00::/32 2404:3bc0::/32 2404:3c40::/32 2404:3f40::/32 2404:4080::/32 2404:41c0::/32 2404:4540::/32 2404:4740::/32 2404:4bc0::/32 2404:4d00::/32 2404:4dc0::/32 2404:51c0::/32 2404:5640::/32 2404:5a80::/32 2404:5b00::/32 2404:5d00::/32 2404:5e80::/32 2404:6000::/32 2404:6100::/32 2404:6380::/32 2404:6500::/32 2404:65c0::/32 2404:6a40::/32 2404:6f80::/32 2404:7100::/32 2404:7180::/32 2404:71c0::/32 2404:7240::/32 2404:74c0::/32 2404:7600::/32 2404:7740::/32 2404:7940::/32 2404:7d00::/32 2404:8040::/32 2404:80c0::/32 2404:8140::/32 2404:81c0::/32 2404:8480::/32 2404:8580::/32 2404:8700::/32 2404:8880::/32 2404:8a80::/32 2404:8b00::/32 2404:8dc0::/32 2404:9340::/32 2404:9880::/32 2404:9b80::/32 2404:9c80::/32 2404:a000::/32 2404:a080::/32 2404:a0c0::/32 2404:a180::/32 2404:a240::/32 2404:a740::/32 2404:b100::/32 2404:b340::/32 2404:b3c0::/32 2404:b440::/32 2404:b4c0::/32 2404:b900::/32 2404:bbc0::/32 2404:bc40::/32 2404:c1c0::/32 2404:c240::/32 2404:c2c0::/32 2404:c300::/32 2404:c3c0::/32 2404:c440::/32 2404:c4c0::/32 2404:c540::/32 2404:c5c0::/32 2404:c640::/32 2404:c940::/32 2404:c9c0::/32 2404:cd00::/32 2404:d040::/32 2404:d080::/32 2404:d140::/32 2404:d280::/32 2404:d3c0::/32 2404:d480::/32 2404:d640::/32 2404:d6c0::/32 2404:d780::/32 2404:d7c0::/32 2404:d840::/32 2404:dd80::/32 2404:df00::/32 2404:e180::/32 2404:e280::/32 2404:e540::/32 2404:e5c0::/32 2404:e780::/32 2404:e880::/32 2404:e8c0::/32 2404:eb40::/32 2404:eb80::/32 2404:ec40::/32 2404:ecc0::/32 2404:edc0::/32 2404:f040::/32 2404:f4c0::/32 2404:f7c0::/32 2405:80::/32 2405:480::/32 2405:580::/32 2405:680::/32 2405:6c0::/32 2405:780::/32 2405:880::/32 2405:940::/32 2405:980::/32 2405:9c0::/32 2405:a80::/32 2405:b80::/32 2405:c80::/32 2405:d80::/32 2405:e80::/32 2405:f40::/32 2405:f80::/32 2405:1080::/32 2405:1180::/32 2405:1280::/32 2405:1380::/32 2405:1480::/32 2405:1580::/32 2405:1680::/32 2405:18c0::/32 2405:1c80::/32 2405:1d80::/32 2405:1e80::/32 2405:1f80::/32 2405:1fc0::/32 2405:2080::/32 2405:2180::/32 2405:2280::/32 2405:2340::/32 2405:2380::/32 2405:2480::/32 2405:24c0::/32 2405:2580::/32 2405:2680::/32 2405:2780::/32 2405:2880::/32 2405:2980::/32 2405:2a80::/32 2405:2b80::/32 2405:2bc0::/32 2405:2c80::/32 2405:2d80::/32 2405:2e80::/32 2405:2ec0::/32 2405:2f40::/32 2405:2f80::/32 2405:3140::/32 2405:31c0::/32 2405:37c0::/32 2405:3880::/32 2405:3980::/32 2405:39c0::/32 2405:3a80::/32 2405:3ac0::/32 2405:3b00::/32 2405:3b80::/32 2405:3bc0::/32 2405:3c40::/32 2405:3c80::/32 2405:3d80::/32 2405:3e80::/32 2405:3f40::/32 2405:3f80::/32 2405:4080::/32 2405:4140::/32 2405:4180::/32 2405:41c0::/32 2405:4280::/32 2405:4380::/32 2405:4480::/32 2405:44c0::/32 2405:4540::/32 2405:4580::/32 2405:4680::/32 2405:4780::/32 2405:4880::/32 2405:4980::/32 2405:4a80::/32 2405:4b80::/32 2405:4d40::/32 2405:4e80::/32 2405:4f80::/32 2405:5080::/32 2405:5180::/32 2405:5240::/32 2405:5280::/32 2405:52c0::/32 2405:5380::/32 2405:5480::/32 2405:5580::/32 2405:5680::/32 2405:5780::/32 2405:57c0::/32 2405:5880::/32 2405:5980::/32 2405:5a80::/32 2405:5b00::/32 2405:5b80::/32 2405:5c80::/32 2405:5cc0::/32 2405:5d40::/32 2405:5d80::/32 2405:5dc0::/32 2405:5e80::/32 2405:5f80::/32 2405:6080::/32 2405:6180::/32 2405:6200::/32 2405:66c0::/32 2405:6880::/32 2405:68c0::/32 2405:6940::/32 2405:69c0::/32 2405:6a80::/32 2405:6b80::/32 2405:6c80::/32 2405:6d80::/32 2405:6e80::/32 2405:6f00::/32 2405:6f80::/32 2405:7040::/32 2405:7080::/32 2405:7180::/32 2405:7240::/32 2405:7280::/32 2405:7380::/32 2405:7480::/32 2405:7580::/32 2405:7680::/32 2405:7780::/32 2405:7880::/32 2405:78c0::/32 2405:7980::/32 2405:79c0::/32 2405:7a80::/32 2405:7b80::/32 2405:7c80::/32 2405:7d40::/32 2405:7f40::/32 2405:7fc0::/32 2405:8280::/32 2405:83c0::/32 2405:8480::/32 2405:84c0::/32 2405:8580::/32 2405:8680::/32 2405:8780::/32 2405:8880::/32 2405:8980::/32 2405:8a40::/32 2405:8a80::/32 2405:8ac0::/32 2405:8b40::/32 2405:8b80::/32 2405:8c80::/32 2405:8d80::/32 2405:8e80::/32 2405:8f40::/32 2405:8f80::/32 2405:9080::/32 2405:9180::/32 2405:9280::/32 2405:9300::/32 2405:9340::/32 2405:9380::/32 2405:93c0::/32 2405:9480::/32 2405:94c0::/32 2405:9580::/32 2405:9680::/32 2405:9700::/32 2405:9780::/32 2405:9880::/32 2405:9900::/32 2405:9980::/32 2405:9a80::/32 2405:9b00::/32 2405:9b80::/32 2405:9e00::/32 2405:a500::/32 2405:a680::/32 2405:a900::/32 2405:a980::/32 2405:aa80::/32 2405:ab00::/32 2405:ad00::/32 2405:af00::/32 2405:b100::/32 2405:b300::/32 2405:b880::/32 2405:b980::/32 2405:bb00::/32 2405:bd00::/32 2405:bd80::/32 2405:be80::/32 2405:bf00::/32 2405:c280::/32 2405:c380::/32 2405:c480::/32 2405:c500::/32 2405:c580::/32 2405:c680::/32 2405:c780::/32 2405:c880::/32 2405:c980::/32 2405:ca80::/32 2405:cb80::/32 2405:cc80::/32 2405:cd80::/32 2405:ce80::/32 2405:d280::/32 2405:d700::/32 2405:d900::/32 2405:e000::/32 2405:e600::/32 2405:ee80::/32 2405:f380::/32 2405:f580::/32 2405:fe80::/32 2405:ff80::/32 2406:80::/32 2406:280::/32 2406:880::/32 2406:d80::/32 2406:e80::/32 2406:f80::/32 2406:1080::/32 2406:1100::/32 2406:1180::/32 2406:1280::/32 2406:1380::/32 2406:1480::/32 2406:1580::/32 2406:1680::/32 2406:1780::/32 2406:1880::/32 2406:1980::/32 2406:1a80::/32 2406:1b80::/32 2406:1c80::/32 2406:1d80::/32 2406:1e80::/32 2406:1f80::/32 2406:2080::/32 2406:2580::/32 2406:2700::/32 2406:2780::/32 2406:2880::/32 2406:2980::/32 2406:2a80::/32 2406:2b80::/32 2406:2c80::/32 2406:2d80::/32 2406:2e80::/32 2406:2f80::/32 2406:3080::/32 2406:3180::/32 2406:3280::/32 2406:3300::/32 2406:3380::/32 2406:3480::/32 2406:3580::/32 2406:3680::/32 2406:3700::/32 2406:3780::/32 2406:3880::/32 2406:3980::/32 2406:3d80::/32 2406:3e80::/32 2406:3f80::/32 2406:4080::/32 2406:4180::/32 2406:4280::/32 2406:4380::/32 2406:4480::/32 2406:4500::/32 2406:4680::/32 2406:4980::/32 2406:4b80::/32 2406:4c80::/32 2406:4d00::/32 2406:4d80::/32 2406:4e80::/32 2406:4f00::/32 2406:4f80::/32 2406:5080::/32 2406:5180::/32 2406:5280::/32 2406:5380::/32 2406:5480::/32 2406:5580::/32 2406:5680::/32 2406:5780::/32 2406:5880::/32 2406:5980::/32 2406:5d80::/32 2406:5e80::/32 2406:5f80::/32 2406:6080::/32 2406:6100::/32 2406:6180::/32 2406:6280::/32 2406:6300::/32 2406:6380::/32 2406:6480::/32 2406:6500::/32 2406:6580::/32 2406:6680::/32 2406:6780::/32 2406:6880::/32 2406:6980::/32 2406:6a80::/32 2406:6b80::/32 2406:6c80::/32 2406:6d80::/32 2406:6e80::/32 2406:6f80::/32 2406:7080::/32 2406:7280::/32 2406:7380::/32 2406:7480::/32 2406:7580::/32 2406:7680::/32 2406:7780::/32 2406:7880::/32 2406:7980::/32 2406:7a80::/32 2406:7b80::/32 2406:7c80::/32 2406:7d00::/32 2406:7d80::/32 2406:7e80::/32 2406:7f80::/32 2406:8080::/32 2406:8180::/32 2406:8280::/32 2406:8380::/32 2406:8480::/32 2406:8500::/32 2406:8580::/32 2406:8780::/32 2406:8880::/32 2406:8980::/32 2406:8a80::/32 2406:8b80::/32 2406:8c80::/32 2406:8d80::/32 2406:8e80::/32 2406:8f80::/32 2406:9180::/32 2406:9200::/32 2406:9280::/32 2406:9380::/32 2406:9480::/32 2406:9780::/32 2406:9d80::/32 2406:9e80::/32 2406:9f80::/32 2406:a080::/32 2406:a180::/32 2406:a280::/32 2406:a380::/32 2406:a480::/32 2406:a580::/32 2406:a680::/32 2406:a780::/32 2406:a880::/32 2406:a980::/32 2406:aa80::/32 2406:ab80::/32 2406:ac80::/32 2406:ad80::/32 2406:ae80::/32 2406:af80::/32 2406:b080::/32 2406:b880::/32 2406:b980::/32 2406:ba80::/32 2406:bb80::/32 2406:bc80::/32 2406:bd80::/32 2406:be80::/32 2406:bf80::/32 2406:c080::/32 2406:c180::/32 2406:c280::/32 2406:c480::/32 2406:c580::/32 2406:c680::/32 2406:c780::/32 2406:c880::/32 2406:c900::/32 2406:c980::/32 2406:ca80::/32 2406:cb80::/32 2406:cc80::/32 2406:cd80::/32 2406:ce80::/32 2406:cf00::/30 2406:cf80::/32 2406:d080::/32 2406:d180::/32 2406:d280::/32 2406:d380::/32 2406:d480::/32 2406:d580::/32 2406:d680::/32 2406:d780::/32 2406:d880::/32 2406:d980::/32 2406:db80::/32 2406:dc80::/32 2406:dd00::/32 2406:dd80::/32 2406:de80::/32 2406:df80::/32 2406:e080::/32 2406:e180::/32 2406:e280::/32 2406:e380::/32 2406:e500::/32 2406:e580::/32 2406:e680::/32 2406:e780::/32 2406:f280::/32 2406:f300::/32 2406:f980::/32 2406:fc80::/32 2406:fd80::/32 2406:fe80::/32 2406:ff00::/32 2407:480::/32 2407:580::/32 2407:1180::/32 2407:1900::/32 2407:1d00::/32 2407:1e80::/32 2407:2280::/32 2407:2380::/32 2407:2780::/32 2407:3700::/32 2407:3900::/32 2407:4580::/32 2407:4680::/32 2407:4880::/32 2407:4980::/32 2407:4a80::/32 2407:4c80::/32 2407:4d80::/32 2407:4e80::/32 2407:4f00::/32 2407:5380::/32 2407:5500::/32 2407:5780::/32 2407:6580::/32 2407:6a80::/32 2407:7680::/32 2407:7780::/32 2407:7880::/32 2407:7980::/32 2407:7c80::/32 2407:7d00::/32 2407:7d80::/32 2407:7e80::/32 2407:8880::/32 2407:8b80::/32 2407:9080::/32 2407:9180::/32 2407:9680::/32 2407:9980::/32 2407:9f00::/32 2407:9f80::/32 2407:a480::/32 2407:a880::/32 2407:ad80::/32 2407:ae80::/32 2407:af80::/32 2407:b080::/32 2407:b180::/32 2407:b280::/32 2407:b380::/32 2407:b580::/32 2407:b680::/32 2407:b780::/32 2407:b880::/32 2407:b980::/32 2407:ba00::/32 2407:ba80::/32 2407:bb80::/32 2407:bc00::/32 2407:bc80::/32 2407:bd80::/32 2407:be80::/32 2407:bf80::/32 2407:c080::/32 2407:c380::/32 2407:c400::/32 2407:c480::/32 2407:c580::/32 2407:c680::/32 2407:c780::/32 2407:c880::/32 2407:c900::/32 2407:c980::/32 2407:cb80::/32 2407:cc80::/32 2407:cd80::/32 2407:ce80::/32 2407:cf00::/32 2407:cf80::/32 2407:d480::/32 2407:d580::/32 2407:d680::/32 2407:d780::/32 2407:d880::/32 2407:d980::/32 2407:da80::/32 2407:db80::/32 2407:dc80::/32 2407:dd80::/32 2407:de80::/32 2407:df80::/32 2407:e080::/32 2407:e180::/32 2407:e280::/32 2407:e380::/32 2407:e480::/32 2407:e580::/32 2407:e680::/32 2407:e780::/32 2407:e800::/32 2407:ea80::/32 2407:eb80::/32 2407:ec80::/32 2407:ed80::/32 2407:ee80::/32 2407:ef80::/32 2407:f080::/32 2407:f180::/32 2407:f280::/32 2407:f380::/32 2407:f480::/32 2407:f580::/32 2407:f680::/32 2407:f780::/32 2407:f880::/32 2407:f980::/32 2407:fa80::/32 2407:fb80::/32 2407:fc80::/32 2407:fd80::/32 2408:4000::/22 2408:8000::/20 2409:8000::/20 240a:4000::/21 240a:8000::/21 240a:c000::/20 240b:8000::/21 240c::/28 240c:4000::/22 240c:8000::/21 240c:c000::/20 240d:4000::/21 240d:8000::/24 240e::/18 240f:4000::/24 240f:8000::/24 240f:c000::/24 [proxy_list] # Telegram IPs$ 91.108.4.0/22 91.108.8.0/21 91.108.16.0/21 91.108.36.0/22 91.108.56.0/22 109.239.140.0/24 149.154.160.0/20 14.102.250.18 14.102.250.19 174.142.105.153 50.7.31.230 67.220.91.15 67.220.91.18 67.220.91.23 69.65.19.160 72.52.81.22 85.17.73.31 (?:^|\.)030buy\.com$ (?:^|\.)0rz\.tw$ (?:^|\.)1-apple\.com\.tw$ (?:^|\.)10\.tt$ (?:^|\.)1000giri\.net$ (?:^|\.)100ke\.org$ (?:^|\.)10conditionsoflove\.com$ (?:^|\.)10musume\.com$ (?:^|\.)123rf\.com$ (?:^|\.)12bet\.com$ (?:^|\.)12vpn\.com$ (?:^|\.)12vpn\.net$ (?:^|\.)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$ (?:^|\.)1984bbs\.com$ (?:^|\.)1984bbs\.org$ (?:^|\.)1989report\.hkja\.org\.hk$ (?:^|\.)1991way\.com$ (?:^|\.)1998cdp\.org$ (?:^|\.)1bao\.org$ (?:^|\.)1dumb\.com$ (?:^|\.)1e100\.net$ (?:^|\.)1eew\.com$ (?:^|\.)1mobile\.com$ (?:^|\.)1pondo\.tv$ (?:^|\.)2-hand\.info$ (?:^|\.)2000fun\.com$ (?:^|\.)2008xianzhang\.info$ (?:^|\.)2017\.hk$ (?:^|\.)21andy\.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$ (?:^|\.)43110\.cf$ (?:^|\.)466453\.com$ (?:^|\.)4bluestones\.biz$ (?:^|\.)4chan\.com$ (?:^|\.)4dq\.com$ (?:^|\.)4everproxy\.com$ (?:^|\.)4irc\.com$ (?:^|\.)4mydomain\.com$ (?:^|\.)4pu\.com$ (?:^|\.)4rbtv\.com$ (?:^|\.)4shared\.com$ (?:^|\.)51\.ca$ (?:^|\.)51jav\.org$ (?:^|\.)51luoben\.com$ (?:^|\.)5278\.cc$ (?:^|\.)5299\.tv$ (?:^|\.)56cun04\.jigsy\.com$ (?:^|\.)5aimiku\.com$ (?:^|\.)5i01\.com$ (?:^|\.)5isotoi5\.org$ (?:^|\.)5maodang\.com$ (?:^|\.)63i\.com$ (?:^|\.)64memo$ (?:^|\.)64museum\.org$ (?:^|\.)64tianwang\.com$ (?:^|\.)64wiki\.com$ (?:^|\.)66\.ca$ (?:^|\.)666kb\.com$ (?:^|\.)6park\.com$ (?:^|\.)6parker\.com$ (?:^|\.)7capture\.com$ (?:^|\.)7cow\.com$ (?:^|\.)8-d\.com$ (?:^|\.)85cc\.net$ (?:^|\.)85cc\.us$ (?:^|\.)85st\.com$ (?:^|\.)881903\.com$ (?:^|\.)888\.com$ (?:^|\.)888poker\.com$ (?:^|\.)89-64\.org$ (?:^|\.)89\.64\.charter\.constitutionalism\.solutions$ (?:^|\.)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$ (?:^|\.)9gag\.com$ (?:^|\.)a-normal-day\.com$ (?:^|\.)a248\.e\.akamai\.net$ (?:^|\.)a5\.com\.ru$ (?:^|\.)aamacau\.com$ (?:^|\.)abc\.com$ (?:^|\.)abc\.net\.au$ (?:^|\.)abc\.pp\.ru$ (?:^|\.)abc\.xyz$ (?:^|\.)abchinese\.com$ (?:^|\.)abclite\.net$ (?:^|\.)abebooks\.com$ (?:^|\.)abematv\.akamaized\.net$ (?:^|\.)abitno\.linpie\.com$ (?:^|\.)ablwang\.com$ (?:^|\.)aboluowang\.com$ (?:^|\.)about\.google$ (?:^|\.)aboutgfw\.com$ (?:^|\.)abs\.edu$ (?:^|\.)ac\.jiruan\.net$ (?:^|\.)accim\.org$ (?:^|\.)aceros-de-hispania\.com$ (?:^|\.)acevpn\.com$ (?:^|\.)acg18\.me$ (?:^|\.)acgkj\.com$ (?:^|\.)acmedia365\.com$ (?:^|\.)acmetoy\.com$ (?:^|\.)acnw\.com\.au$ (?:^|\.)actfortibet\.org$ (?:^|\.)actimes\.com\.au$ (?:^|\.)activpn\.com$ (?:^|\.)aculo\.us$ (?:^|\.)adcex\.com$ (?:^|\.)addictedtocoffee\.de$ (?:^|\.)adelaidebbs\.com$ (?:^|\.)admin\.recaptcha\.net$ (?:^|\.)admob\.com$ (?:^|\.)adpl\.org\.hk$ (?:^|\.)ads-twitter\.com$ (?:^|\.)adsense\.com$ (?:^|\.)adult-sex-games\.com$ (?:^|\.)adult\.friendfinder\.com$ (?:^|\.)adultfriendfinder\.com$ (?:^|\.)adultkeep\.net$ (?:^|\.)advanscene\.com$ (?:^|\.)advertfan\.com$ (?:^|\.)ae\.hao123\.com$ (?:^|\.)ae\.org$ (?:^|\.)aenhancers\.com$ (?:^|\.)aex\.com$ (?:^|\.)af\.mil$ (?:^|\.)afantibbs\.com$ (?:^|\.)agnesb\.fr$ (?:^|\.)agoogleaday\.com$ (?:^|\.)agro\.hk$ (?:^|\.)ahr0chm6ly95zwnslm5lda$ (?:^|\.)ai-kan\.net$ (?:^|\.)ai-wen\.net$ (?:^|\.)ai\.binwang\.me$ (?:^|\.)ai\.google$ (?:^|\.)aiph\.net$ (?:^|\.)airasia\.com$ (?:^|\.)airconsole\.com$ (?:^|\.)airvpn\.org$ (?:^|\.)aisex\.com$ (?:^|\.)ait\.org\.tw$ (?:^|\.)aiweiwei\.com$ (?:^|\.)aiweiweiblog\.com$ (?:^|\.)akademiye\.org$ (?:^|\.)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$ (?:^|\.)alkasir\.com$ (?:^|\.)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$ (?:^|\.)ameblo\.jp$ (?:^|\.)americangreencard\.com$ (?:^|\.)americanunfinished\.com$ (?:^|\.)amiblockedornot\.com$ (?:^|\.)amigobbs\.net$ (?:^|\.)amitabhafoundation\.us$ (?:^|\.)amnesty\.org$ (?:^|\.)amnesty\.org\.hk$ (?:^|\.)amnesty\.tw$ (?:^|\.)amnestyusa\.org$ (?:^|\.)amnyemachen\.org$ (?:^|\.)amoiist\.com$ (?:^|\.)ampproject\.org$ (?:^|\.)amtb-taipei\.org$ (?:^|\.)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$ (?:^|\.)animeshippuuden\.com$ (?:^|\.)aniscartujo\.com$ (?:^|\.)annatam\.com$ (?:^|\.)anobii\.com$ (?:^|\.)anontext\.com$ (?:^|\.)anonymise\.us$ (?:^|\.)anonymitynetwork\.com$ (?:^|\.)anonymizer\.com$ (?:^|\.)anonymouse\.org$ (?:^|\.)anpopo\.com$ (?:^|\.)answering-islam\.org$ (?:^|\.)anthonycalzadilla\.com$ (?:^|\.)anti1984\.com$ (?:^|\.)antichristendom\.com$ (?:^|\.)antiwave\.net$ (?:^|\.)anyporn\.com$ (?:^|\.)anysex\.com$ (?:^|\.)aobo\.com\.au$ (?:^|\.)aofriend\.com$ (?:^|\.)aofriend\.com\.au$ (?:^|\.)aojiao\.org$ (?:^|\.)aolchannels\.aol\.com$ (?:^|\.)aomiwang\.com$ (?:^|\.)apartmentratings\.com$ (?:^|\.)apartments\.com$ (?:^|\.)apetube\.com$ (?:^|\.)api-secure\.recaptcha\.net$ (?:^|\.)api-verify\.recaptcha\.net$ (?:^|\.)api\.ai$ (?:^|\.)api\.dropboxapi\.com$ (?:^|\.)api\.linksalpha\.com$ (?:^|\.)api\.proxlet\.com$ (?:^|\.)api\.pureapk\.com$ (?:^|\.)api\.recaptcha\.net$ (?:^|\.)apiary\.io$ (?:^|\.)apidocs\.linksalpha\.com$ (?:^|\.)apigee\.com$ (?:^|\.)apk-dl\.com$ (?:^|\.)apkdler\.com$ (?:^|\.)apkmirror\.com$ (?:^|\.)apkmonk\.com$ (?:^|\.)apkplz\.com$ (?:^|\.)apkpure\.com$ (?:^|\.)aplusvpn\.com$ (?:^|\.)app\.box\.com$ (?:^|\.)app\.heywire\.com$ (?:^|\.)app\.smartmailcloud\.com$ (?:^|\.)app\.tutanota\.com$ (?:^|\.)appdownloader\.net$ (?:^|\.)appledaily\.com$ (?:^|\.)appledaily\.com\.hk$ (?:^|\.)appledaily\.com\.tw$ (?:^|\.)appshopper\.com$ (?:^|\.)appsocks\.net$ (?:^|\.)appspot\.com$ (?:^|\.)appsto\.re$ (?:^|\.)aptoide\.com$ (?:^|\.)ar\.hao123\.com$ (?:^|\.)archive\.fo$ (?:^|\.)archive\.is$ (?:^|\.)archive\.li$ (?:^|\.)archive\.org$ (?:^|\.)archive\.today$ (?:^|\.)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$ (?:^|\.)asianews\.it$ (?:^|\.)asiansexdiary\.com$ (?:^|\.)asianspiss\.com$ (?:^|\.)asianwomensfilm\.de$ (?:^|\.)asiatgp\.com$ (?:^|\.)asiatoday\.us$ (?:^|\.)askstudent\.com$ (?:^|\.)askynz\.net$ (?:^|\.)assembla\.com$ (?:^|\.)assets\.bwbx\.io$ (?:^|\.)assimp\.org$ (?:^|\.)astrill\.com$ (?:^|\.)atc\.org\.au$ (?:^|\.)atchinese\.com$ (?:^|\.)atdmt\.com$ (?:^|\.)atgfw\.org$ (?:^|\.)athenaeizou\.com$ (?:^|\.)atlanta168\.com$ (?:^|\.)atlaspost\.com$ (?:^|\.)atnext\.com$ (?:^|\.)authorizeddns\.net$ (?:^|\.)authorizeddns\.org$ (?:^|\.)authorizeddns\.us$ (?:^|\.)autodraw\.com$ (?:^|\.)av-e-body\.com$ (?:^|\.)av\.com$ (?:^|\.)av\.movie$ (?:^|\.)av\.nightlife141\.com$ (?:^|\.)avaaz\.org$ (?:^|\.)avbody\.tv$ (?:^|\.)avcity\.tv$ (?:^|\.)avcool\.com$ (?:^|\.)avdb\.in$ (?:^|\.)avdb\.tv$ (?:^|\.)avfantasy\.com$ (?:^|\.)avgle\.com$ (?:^|\.)avidemux\.org$ (?:^|\.)avmo\.pw$ (?:^|\.)avmoo\.com$ (?:^|\.)avmoo\.net$ (?:^|\.)avmoo\.pw$ (?:^|\.)avoision\.com$ (?:^|\.)avyahoo\.com$ (?:^|\.)axureformac\.com$ (?:^|\.)azerbaycan\.tv$ (?:^|\.)azerimix\.com$ (?:^|\.)azubu\.tv$ (?:^|\.)b0ne\.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$ (?:^|\.)bandwagonhost\.com$ (?:^|\.)bangbrosnetwork\.com$ (?:^|\.)bangchen\.net$ (?:^|\.)bangdream\.space$ (?:^|\.)bangyoulater\.com$ (?:^|\.)bankmobilevibe\.com$ (?:^|\.)bannedbook\.org$ (?:^|\.)bannednews\.org$ (?:^|\.)banorte\.com$ (?:^|\.)baramangaonline\.com$ (?:^|\.)barenakedislam\.com$ (?:^|\.)barnabu\.co\.uk$ (?:^|\.)barton\.de$ (?:^|\.)bartvpn\.com$ (?:^|\.)bash-hackers\.org$ (?:^|\.)bastillepost\.com$ (?:^|\.)bayvoice\.net$ (?:^|\.)bb-chat\.tv$ (?:^|\.)bb\.ttv\.com\.tw$ (?:^|\.)bbc\.co\.uk$ (?:^|\.)bbc\.com$ (?:^|\.)bbc\.in$ (?:^|\.)bbcchinese\.com$ (?:^|\.)bbchat\.tv$ (?:^|\.)bbci\.co\.uk$ (?:^|\.)bbg\.gov$ (?:^|\.)bbkz\.com$ (?:^|\.)bbnradio\.org$ (?:^|\.)bbs-tw\.com$ (?:^|\.)bbs\.brockbbs\.com$ (?:^|\.)bbs\.cantonese\.asia$ (?:^|\.)bbs\.ecstart\.com$ (?:^|\.)bbs\.hanminzu\.org$ (?:^|\.)bbs\.hasi\.wang$ (?:^|\.)bbs\.huasing\.org$ (?:^|\.)bbs\.junglobal\.net$ (?:^|\.)bbs\.kimy\.com\.tw$ (?:^|\.)bbs\.mikocon\.com$ (?:^|\.)bbs\.morbell\.com$ (?:^|\.)bbs\.mychat\.to$ (?:^|\.)bbs\.netbig\.com$ (?:^|\.)bbs\.ozchinese\.com$ (?:^|\.)bbs\.qmzdd\.com$ (?:^|\.)bbs\.sina\.com$ (?:^|\.)bbs\.sina\.com%2f$ (?:^|\.)bbs\.skykiwi\.com$ (?:^|\.)bbs\.sou-tong\.org$ (?:^|\.)bbs\.tuitui\.info$ (?:^|\.)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$ (?:^|\.)beijingspring\.com$ (?:^|\.)beijingzx\.org$ (?:^|\.)belamionline\.com$ (?:^|\.)bell\.wiki$ (?:^|\.)bemywife\.cc$ (?:^|\.)beric\.me$ (?:^|\.)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$ (?:^|\.)big\.one$ (?:^|\.)bigfools\.com$ (?:^|\.)bigjapanesesex\.com$ (?:^|\.)bigmoney\.biz$ (?:^|\.)bignews\.org$ (?:^|\.)bigsound\.org$ (?:^|\.)biliworld\.com$ (?:^|\.)billypan\.com$ (?:^|\.)binance\.com$ (?:^|\.)binux\.me$ (?:^|\.)bipic\.net$ (?:^|\.)bird\.so$ (?:^|\.)bit-z\.com$ (?:^|\.)bit\.do$ (?:^|\.)bit\.ly$ (?:^|\.)bitc\.bme\.emory\.edu$ (?:^|\.)bitcointalk\.org$ (?:^|\.)bitcoinworld\.com$ (?:^|\.)bitfinex\.com$ (?:^|\.)bithumb\.com$ (?:^|\.)bitinka\.com\.ar$ (?:^|\.)bitmex\.com$ (?:^|\.)bitshare\.com$ (?:^|\.)bitsnoop\.com$ (?:^|\.)bitvise\.com$ (?:^|\.)bizhat\.com$ (?:^|\.)bjnewlife\.org$ (?:^|\.)bjs\.org$ (?:^|\.)bjzc\.org$ (?:^|\.)bl-doujinsouko\.com$ (?:^|\.)blacklogic\.com$ (?:^|\.)blackvpn\.com$ (?:^|\.)blewpass\.com$ (?:^|\.)blinkx\.com$ (?:^|\.)blinw\.com$ (?:^|\.)blip\.tv$ (?:^|\.)blockcn\.com$ (?:^|\.)blockless\.com$ (?:^|\.)blog\.calibre-ebook\.com$ (?:^|\.)blog\.cnyes\.com$ (?:^|\.)blog\.daum\.net$ (?:^|\.)blog\.de$ (?:^|\.)blog\.exblog\.co\.jp$ (?:^|\.)blog\.excite\.co\.jp$ (?:^|\.)blog\.expofutures\.com$ (?:^|\.)blog\.fizzik\.com$ (?:^|\.)blog\.foolsmountain\.com$ (?:^|\.)blog\.fuckgfw233\.org$ (?:^|\.)blog\.goo\.ne\.jp$ (?:^|\.)blog\.google$ (?:^|\.)blog\.inoreader\.com$ (?:^|\.)blog\.istef\.info$ (?:^|\.)blog\.jackjia\.com$ (?:^|\.)blog\.jp$ (?:^|\.)blog\.kangye\.org$ (?:^|\.)blog\.lester850\.info$ (?:^|\.)blog\.martinoei\.com$ (?:^|\.)blog\.pathtosharepoint\.com$ (?:^|\.)blog\.pentalogic\.net$ (?:^|\.)blog\.qooza\.hk$ (?:^|\.)blog\.ranxiang\.com$ (?:^|\.)blog\.sina\.com\.tw$ (?:^|\.)blog\.sogoo\.org$ (?:^|\.)blog\.soylent\.com$ (?:^|\.)blog\.syx86\.cn$ (?:^|\.)blog\.syx86\.com$ (?:^|\.)blog\.taragana\.com$ (?:^|\.)blog\.tiney\.com$ (?:^|\.)blog\.workflow\.is$ (?:^|\.)blog\.xuite\.net$ (?:^|\.)blog\.youthwant\.com\.tw$ (?:^|\.)blog\.youxu\.info$ (?:^|\.)blogblog\.com$ (?:^|\.)blogcatalog\.com$ (?:^|\.)blogcity\.me$ (?:^|\.)blogdns\.org$ (?:^|\.)blogger\.com$ (?:^|\.)blogimg\.jp$ (?:^|\.)bloglines\.com$ (?:^|\.)bloglovin\.com$ (?:^|\.)blogs\.icerocket\.com$ (?:^|\.)blogs\.libraryinformationtechnology\.com$ (?:^|\.)blogs\.tampabay\.com$ (?:^|\.)blogs\.yahoo\.co\.jp$ (?:^|\.)blogspot(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?){1,2}$ (?:^|\.)blogtd\.net$ (?:^|\.)blogtd\.org$ (?:^|\.)bloodshed\.net$ (?:^|\.)bloomberg\.cn$ (?:^|\.)bloomberg\.com$ (?:^|\.)bloomberg\.de$ (?:^|\.)bloombergview\.com$ (?:^|\.)bloomfortune\.com$ (?:^|\.)blueangellive\.com$ (?:^|\.)bmfinn\.com$ (?:^|\.)bnews\.co$ (?:^|\.)bnn\.co$ (?:^|\.)bnrmetal\.com$ (?:^|\.)boardreader\.com$ (?:^|\.)bod\.asia$ (?:^|\.)bodog88\.com$ (?:^|\.)bolehvpn\.net$ (?:^|\.)bolin\.netfirms\.com$ (?:^|\.)bonbonme\.com$ (?:^|\.)bonbonsex\.com$ (?:^|\.)bonfoundation\.org$ (?:^|\.)bongacams\.com$ (?:^|\.)boobstagram\.com$ (?:^|\.)book\.com\.tw$ (?:^|\.)book\.zi5\.me$ (?:^|\.)bookepub\.com$ (?:^|\.)books\.com\.tw$ (?:^|\.)booktopia\.com\.au$ (?:^|\.)boomssr\.com$ (?:^|\.)bot\.nu$ (?:^|\.)botanwang\.com$ (?:^|\.)bowenpress\.com$ (?:^|\.)boxpn\.com$ (?:^|\.)boxun$ (?:^|\.)boxun\.com$ (?:^|\.)boxun\.tv$ (?:^|\.)boxunblog\.com$ (?:^|\.)boxunclub\.com$ (?:^|\.)boyangu\.com$ (?:^|\.)boyfriendtv\.com$ (?:^|\.)boysfood\.com$ (?:^|\.)boysmaster\.com$ (?:^|\.)br\.hao123\.com$ (?:^|\.)br\.st$ (?:^|\.)brainyquote\.com$ (?:^|\.)brandonhutchinson\.com$ (?:^|\.)braumeister\.org$ (?:^|\.)bravotube\.net$ (?:^|\.)brazzers\.com$ (?:^|\.)break\.com$ (?:^|\.)breakgfw\.com$ (?:^|\.)breaking911\.com$ (?:^|\.)breakingtweets\.com$ (?:^|\.)breakwall\.net$ (?:^|\.)briefdream\.com$ (?:^|\.)briian\.com$ (?:^|\.)brizzly\.com$ (?:^|\.)brkmd\.com$ (?:^|\.)broadbook\.com$ (?:^|\.)broadpressinc\.com$ (?:^|\.)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$ (?:^|\.)bullog\.org$ (?:^|\.)bullogger\.com$ (?:^|\.)bunbunhk\.com$ (?:^|\.)busayari\.com$ (?:^|\.)businessinsider\.com$ (?:^|\.)businesstoday\.com\.tw$ (?:^|\.)businessweek\.com$ (?:^|\.)busu\.org$ (?:^|\.)busytrade\.com$ (?:^|\.)buugaa\.com$ (?:^|\.)buy\.yahoo\.com\.tw$ (?:^|\.)buzzhand\.com$ (?:^|\.)buzzhand\.net$ (?:^|\.)buzzorange\.com$ (?:^|\.)bvpn\.com$ (?:^|\.)bwgyhw\.com$ (?:^|\.)bwh1\.net$ (?:^|\.)bwsj\.hk$ (?:^|\.)bx\.in\.th$ (?:^|\.)bx\.tl$ (?:^|\.)bynet\.co\.il$ (?:^|\.)c-est-simple\.com$ (?:^|\.)c-spanvideo\.org$ (?:^|\.)c100tibet\.org$ (?:^|\.)c1522\.mooo\.com$ (?:^|\.)c2cx\.com$ (?:^|\.)cablegatesearch\.net$ (?:^|\.)cachinese\.com$ (?:^|\.)cacnw\.com$ (?:^|\.)cactusvpn\.com$ (?:^|\.)cafepress\.com$ (?:^|\.)cahr\.org\.tw$ (?:^|\.)calameo\.com$ (?:^|\.)calebelston\.com$ (?:^|\.)calgarychinese\.ca$ (?:^|\.)calgarychinese\.com$ (?:^|\.)calgarychinese\.net$ (?:^|\.)cam4\.com$ (?:^|\.)cam4\.jp$ (?:^|\.)cam4\.sg$ (?:^|\.)camfrog\.com$ (?:^|\.)cams\.com$ (?:^|\.)cams\.org\.sg$ (?:^|\.)canadameet\.com$ (?:^|\.)canalporno\.com$ (?:^|\.)canyu\.org$ (?:^|\.)cao\.im$ (?:^|\.)caobian\.info$ (?:^|\.)caochangqing\.com$ (?:^|\.)cap\.org\.hk$ (?:^|\.)carabinasypistolas\.com$ (?:^|\.)cardinalkungfoundation\.org$ (?:^|\.)carfax\.com$ (?:^|\.)cari\.com\.my$ (?:^|\.)caribbeancom\.com$ (?:^|\.)carmotorshow\.com$ (?:^|\.)cartoonmovement\.com$ (?:^|\.)casadeltibetbcn\.org$ (?:^|\.)casatibet\.org\.mx$ (?:^|\.)casino\.williamhill\.com$ (?:^|\.)casinobellini\.com$ (?:^|\.)casinoking\.com$ (?:^|\.)casinoriva\.com$ (?:^|\.)castbox\.fm$ (?:^|\.)catch22\.net$ (?:^|\.)catchgod\.com$ (?:^|\.)catfightpayperview\.xxx$ (?:^|\.)catholic\.org\.hk$ (?:^|\.)catholic\.org\.tw$ (?:^|\.)cathvoice\.org\.tw$ (?:^|\.)cattt\.com$ (?:^|\.)cbc\.ca$ (?:^|\.)cbs\.ntu\.edu\.tw$ (?:^|\.)cbsnews\.com$ (?:^|\.)cbtc\.org\.hk$ (?:^|\.)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$ (?:^|\.)cdn$ (?:^|\.)cdn-apple\.com$ (?:^|\.)cdn-images\.mailchimp\.com$ (?:^|\.)cdn\.assets\.lfpcontent\.com$ (?:^|\.)cdn\.helixstudios\.net$ (?:^|\.)cdn\.printfriendly\.com$ (?:^|\.)cdn\.seatguru\.com$ (?:^|\.)cdn\.softlayer\.net$ (?:^|\.)cdn1\.lp\.saboom\.com$ (?:^|\.)cdnews\.com\.tw$ (?:^|\.)cdninstagram\.com$ (?:^|\.)cdp1989\.org$ (?:^|\.)cdp1998\.org$ (?:^|\.)cdp2006\.org$ (?:^|\.)cdpa\.url\.tw$ (?:^|\.)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$ (?:^|\.)certificate\.revocationcheck\.com$ (?:^|\.)cfhks\.org\.hk$ (?:^|\.)cfos\.de$ (?:^|\.)cftfc\.com$ (?:^|\.)cgdepot\.org$ (?:^|\.)cgst\.edu$ (?:^|\.)ch\.shvoong\.com$ (?:^|\.)change\.org$ (?:^|\.)changeip\.name$ (?:^|\.)changeip\.net$ (?:^|\.)changeip\.org$ (?:^|\.)changp\.com$ (?:^|\.)changsa\.net$ (?:^|\.)channel8news\.sg$ (?:^|\.)chaoex\.com$ (?:^|\.)chapm25\.com$ (?:^|\.)chatnook\.com$ (?:^|\.)chaturbate\.com$ (?:^|\.)chengmingmag\.com$ (?:^|\.)chenguangcheng\.com$ (?:^|\.)chenpokong\.com$ (?:^|\.)chenpokong\.net$ (?:^|\.)chenshan20042005\.wordpress\.com$ (?:^|\.)cherrysave\.com$ (?:^|\.)chhongbi\.org$ (?:^|\.)chicagoncmtv\.com$ (?:^|\.)china-mmm\.jp\.net$ (?:^|\.)china-mmm\.net$ (?:^|\.)china-mmm\.sa\.com$ (?:^|\.)china-review\.com\.ua$ (?:^|\.)china-week\.com$ (?:^|\.)china\.hket\.com$ (?:^|\.)china\.ucanews\.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$ (?:^|\.)chinaview\.wordpress\.com$ (?:^|\.)chinaway\.org$ (?:^|\.)chinaworker\.info$ (?:^|\.)chinaxchina\.com$ (?:^|\.)chinayouth\.org\.hk$ (?:^|\.)chinayuanmin\.org$ (?:^|\.)chinese-hermit\.net$ (?:^|\.)chinese-leaders\.org$ (?:^|\.)chinese-memorial\.org$ (?:^|\.)chinese\.donga\.com$ (?:^|\.)chinese\.engadget\.com$ (?:^|\.)chinese\.irib\.ir$ (?:^|\.)chinese\.soifind\.com$ (?:^|\.)chinesedaily\.com$ (?:^|\.)chinesedailynews\.com$ (?:^|\.)chinesedemocracy\.com$ (?:^|\.)chinesegay\.org$ (?:^|\.)chinesen\.de$ (?:^|\.)chinesenews\.net\.au$ (?:^|\.)chinesepen\.org$ (?:^|\.)chinesetalks\.net$ (?:^|\.)chineseupress\.com$ (?:^|\.)chingcheong\.com$ (?:^|\.)chinman\.net$ (?:^|\.)chithu\.org$ (?:^|\.)chn\.chosun\.com$ (?:^|\.)chobit\.cc$ (?:^|\.)chrdnet\.com$ (?:^|\.)christianfreedom\.org$ (?:^|\.)christianstudy\.com$ (?:^|\.)christiantimes\.org\.hk$ (?:^|\.)christusrex\.org$ (?:^|\.)chrlawyers\.hk$ (?:^|\.)chrome\.com$ (?:^|\.)chromecast\.com$ (?:^|\.)chromeexperiments\.com$ (?:^|\.)chromercise\.com$ (?:^|\.)chromestatus\.com$ (?:^|\.)chromium\.org$ (?:^|\.)chuang-yen\.org$ (?:^|\.)chubold\.com$ (?:^|\.)chubun\.com$ (?:^|\.)chuizi\.net$ (?:^|\.)churchinhongkong\.org$ (?:^|\.)chushigangdrug\.ch$ (?:^|\.)cienen\.com$ (?:^|\.)cineastentreff\.de$ (?:^|\.)cipfg\.org$ (?:^|\.)circlethebayfortibet\.org$ (?:^|\.)cirosantilli\.com$ (?:^|\.)citizencn\.com$ (?:^|\.)citizenlab\.org$ (?:^|\.)citizenscommission\.hk$ (?:^|\.)citizensradio\.org$ (?:^|\.)city365\.ca$ (?:^|\.)city9x\.com$ (?:^|\.)citypopulation\.de$ (?:^|\.)citytalk\.tw$ (?:^|\.)civicparty\.hk$ (?:^|\.)civildisobediencemovement\.org$ (?:^|\.)civilhrfront\.org$ (?:^|\.)civiliangunner\.com$ (?:^|\.)civilmedia\.tw$ (?:^|\.)ck101\.com$ (?:^|\.)cl\.d0z\.net$ (?:^|\.)clarionproject\.org$ (?:^|\.)classicalguitarblog\.net$ (?:^|\.)clb\.org\.hk$ (?:^|\.)cldr\.unicode\.org$ (?:^|\.)cleansite\.biz$ (?:^|\.)cleansite\.info$ (?:^|\.)cleansite\.us$ (?:^|\.)clearharmony\.net$ (?:^|\.)clearsurance\.com$ (?:^|\.)clearwisdom\.net$ (?:^|\.)clementine-player\.org$ (?:^|\.)cling\.omy\.sg$ (?:^|\.)clinica-tibet\.ru$ (?:^|\.)clipfish\.de$ (?:^|\.)cloakpoint\.com$ (?:^|\.)cloud\.feedly\.com$ (?:^|\.)cloud\.mail\.ru$ (?:^|\.)club1069\.com$ (?:^|\.)clyp\.it$ (?:^|\.)cmcn\.org$ (?:^|\.)cmi\.org\.tw$ (?:^|\.)cmp\.hku\.hk$ (?:^|\.)cms\.gov$ (?:^|\.)cmule\.com$ (?:^|\.)cmule\.org$ (?:^|\.)cmx\.im$ (?:^|\.)cn-proxy\.com$ (?:^|\.)cn\.calameo\.com$ (?:^|\.)cn\.dayabook\.com$ (?:^|\.)cn\.fmnnow\.com$ (?:^|\.)cn\.freeones\.com$ (?:^|\.)cn\.giganews\.com$ (?:^|\.)cn\.ibtimes\.com$ (?:^|\.)cn\.nytstyle\.com$ (?:^|\.)cn\.sandscotaicentral\.com$ (?:^|\.)cn\.shafaqna\.com$ (?:^|\.)cn\.streetvoice\.com$ (?:^|\.)cn\.thegay\.com$ (?:^|\.)cn\.uncyclopedia\.wikia\.com$ (?:^|\.)cn\.uptodown\.com$ (?:^|\.)cn\.voa\.mobi$ (?:^|\.)cn2\.streetvoice\.com$ (?:^|\.)cn6\.eu$ (?:^|\.)cna\.com\.tw$ (?:^|\.)cnabc\.com$ (?:^|\.)cnbbnews\.wordpress\.com$ (?:^|\.)cnd\.org$ (?:^|\.)cnex\.org\.cn$ (?:^|\.)cnineu\.com$ (?:^|\.)cnn\.com$ (?:^|\.)cnnews\.chosun\.com$ (?:^|\.)cnpolitics\.org$ (?:^|\.)cnproxy\.com$ (?:^|\.)co\.ng\.mil$ (?:^|\.)coat\.co\.jp$ (?:^|\.)cobinhood\.com$ (?:^|\.)cochina\.co$ (?:^|\.)cochina\.org$ (?:^|\.)code1984\.com$ (?:^|\.)codeshare\.io$ (?:^|\.)codeskulptor\.org$ (?:^|\.)coin2co\.in$ (?:^|\.)coinbene\.com$ (?:^|\.)coinegg\.com$ (?:^|\.)coinex\.com$ (?:^|\.)coingi\.com$ (?:^|\.)coinrail\.co\.kr$ (?:^|\.)cointiger\.com$ (?:^|\.)cointobe\.com$ (?:^|\.)coinut\.com$ (?:^|\.)collateralmurder\.com$ (?:^|\.)collateralmurder\.org$ (?:^|\.)com\.google$ (?:^|\.)comefromchina\.com$ (?:^|\.)comic-mega\.me$ (?:^|\.)commandarms\.com$ (?:^|\.)commentshk\.com$ (?:^|\.)communistcrimes\.org$ (?:^|\.)community\.windy\.com$ (?:^|\.)communitychoicecu\.com$ (?:^|\.)compileheart\.com$ (?:^|\.)compress\.to$ (?:^|\.)connect\.facebook\.net$ (?:^|\.)conoha\.jp$ (?:^|\.)contactmagazine\.net$ (?:^|\.)contests\.twilio\.com$ (?:^|\.)convio\.net$ (?:^|\.)coobay\.com$ (?:^|\.)coolaler\.com$ (?:^|\.)coolder\.com$ (?:^|\.)coolloud\.org\.tw$ (?:^|\.)coolncute\.com$ (?:^|\.)coolstuffinc\.com$ (?:^|\.)corumcollege\.com$ (?:^|\.)cos-moe\.com$ (?:^|\.)cosmic\.monar\.ch$ (?:^|\.)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$ (?:^|\.)crrev\.com$ (?:^|\.)crucial\.com$ (?:^|\.)csdparty\.com$ (?:^|\.)css\.pixnet\.in$ (?:^|\.)csuchen\.de$ (?:^|\.)csw\.org\.uk$ (?:^|\.)ct\.org\.tw$ (?:^|\.)ctao\.org$ (?:^|\.)ctfriend\.net$ (?:^|\.)cthlo\.github\.io$ (?:^|\.)ctitv\.com\.tw$ (?:^|\.)cts\.com\.tw$ (?:^|\.)cuhkacs\.org$ (?:^|\.)cuihua\.org$ (?:^|\.)cuiweiping\.net$ (?:^|\.)culture\.tw$ (?:^|\.)cumlouder\.com$ (?:^|\.)curvefish\.com$ (?:^|\.)cusu\.hk$ (?:^|\.)cutscenes\.net$ (?:^|\.)cw\.com\.tw$ (?:^|\.)cyberghost\.natado\.com$ (?:^|\.)cyberghostvpn\.com$ (?:^|\.)cynscribe\.com$ (?:^|\.)cytode\.us$ (?:^|\.)d-fukyu\.com$ (?:^|\.)d100\.net$ (?:^|\.)d1b183sg0nvnuh\.cloudfront\.net$ (?:^|\.)d1c37gjwa26taa\.cloudfront\.net$ (?:^|\.)d2bay\.com$ (?:^|\.)d2pass\.com$ (?:^|\.)d3c33hcgiwev3\.cloudfront\.net$ (?:^|\.)d3rhr7kgmtrq1v\.cloudfront\.net$ (?:^|\.)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$ (?:^|\.)dailymotion\.com$ (?:^|\.)dailynews\.sina\.com$ (?:^|\.)dailynews\.sina\.com%2f$ (?:^|\.)dailyview\.tw$ (?:^|\.)daiphapinfo\.net$ (?:^|\.)dajiyuan\.com$ (?:^|\.)dajiyuan\.de$ (?:^|\.)dajiyuan\.eu$ (?:^|\.)dajusha\.baywords\.com$ (?:^|\.)dalailama-archives\.org$ (?:^|\.)dalailama\.com$ (?:^|\.)dalailama\.mn$ (?:^|\.)dalailama\.ru$ (?:^|\.)dalailama\.usc\.edu$ (?:^|\.)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$ (?:^|\.)danbooru\.donmai\.us$ (?:^|\.)danke4china\.net$ (?:^|\.)danwei\.org$ (?:^|\.)daodu14\.jigsy\.com$ (?:^|\.)daolan\.net$ (?:^|\.)daozhongxing\.org$ (?:^|\.)darktech\.org$ (?:^|\.)darktoy\.net$ (?:^|\.)darpa\.mil$ (?:^|\.)dastrassi\.org$ (?:^|\.)data-vocabulary\.org$ (?:^|\.)data\.flurry\.com$ (?:^|\.)data\.gov\.tw$ (?:^|\.)daum\.net$ (?:^|\.)david-kilgour\.com$ (?:^|\.)dawangidc\.com$ (?:^|\.)daxa\.cn$ (?:^|\.)daylife\.com$ (?:^|\.)db\.tt$ (?:^|\.)dbc\.hk$ (?:^|\.)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$ (?:^|\.)deaftone\.com$ (?:^|\.)debug\.com$ (?:^|\.)deck\.ly$ (?:^|\.)decodet\.co$ (?:^|\.)deepmind\.com$ (?:^|\.)deezer\.com$ (?:^|\.)definebabe\.com$ (?:^|\.)deja\.com$ (?:^|\.)delcamp\.net$ (?:^|\.)delicious\.com$ (?:^|\.)demo\.opera-mini\.net$ (?:^|\.)democrats\.org$ (?:^|\.)depositphotos\.com$ (?:^|\.)derekhsu\.homeip\.net$ (?:^|\.)desc\.se$ (?:^|\.)design\.google$ (?:^|\.)desipro\.de$ (?:^|\.)dessci\.com$ (?:^|\.)destiny\.xfiles\.to$ (?:^|\.)destroy-china\.jp$ (?:^|\.)deutsche-welle\.de$ (?:^|\.)developers\.box\.net$ (?:^|\.)devio\.us$ (?:^|\.)devpn\.com$ (?:^|\.)dfas\.mil$ (?:^|\.)dfn\.org$ (?:^|\.)dharamsalanet\.com$ (?:^|\.)dharmakara\.net$ (?:^|\.)dhcp\.biz$ (?:^|\.)diaoyuislands\.org$ (?:^|\.)dictionary\.goo\.ne\.jp$ (?:^|\.)difangwenge\.org$ (?:^|\.)digiland\.tw$ (?:^|\.)digisfera\.com$ (?:^|\.)digitalnomadsproject\.org$ (?:^|\.)diigo\.com$ (?:^|\.)dilber\.se$ (?:^|\.)dingchin\.com\.tw$ (?:^|\.)dipity\.com$ (?:^|\.)directcreative\.com$ (?:^|\.)discoins\.com$ (?:^|\.)disconnect\.me$ (?:^|\.)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$ (?:^|\.)dl\.box\.net$ (?:^|\.)dlsite\.com$ (?:^|\.)dlyoutube\.com$ (?:^|\.)dm530\.net$ (?:^|\.)dmcdn\.net$ (?:^|\.)dmm\.co\.jp$ (?:^|\.)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$ (?:^|\.)dogfartnetwork\.com$ (?:^|\.)dojin\.com$ (?:^|\.)dok-forum\.net$ (?:^|\.)dolc\.de$ (?:^|\.)dolf\.org\.hk$ (?:^|\.)dollf\.com$ (?:^|\.)domain\.club\.tw$ (?:^|\.)domainhelp\.search\.com$ (?:^|\.)domains\.google$ (?:^|\.)domaintoday\.com\.au$ (?:^|\.)dongtaiwang\.com$ (?:^|\.)dongtaiwang\.net$ (?:^|\.)dongyangjing\.com$ (?:^|\.)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$ (?:^|\.)download\.aircrack-ng\.org$ (?:^|\.)download\.cnet\.com$ (?:^|\.)download\.ithome\.com\.tw$ (?:^|\.)dphk\.org$ (?:^|\.)dpp\.org\.tw$ (?:^|\.)dpr\.info$ (?:^|\.)dragonex\.io$ (?:^|\.)dragonsprings\.org$ (?:^|\.)dreamamateurs\.com$ (?:^|\.)drepung\.org$ (?:^|\.)drgan\.net$ (?:^|\.)drmingxia\.org$ (?:^|\.)dropbooks\.tv$ (?:^|\.)dropbox\.com$ (?:^|\.)dropboxusercontent\.com$ (?:^|\.)drsunacademy\.com$ (?:^|\.)drtuber\.com$ (?:^|\.)dscn\.info$ (?:^|\.)dsmtp\.com$ (?:^|\.)dstk\.dk$ (?:^|\.)dtdns\.net$ (?:^|\.)dtiblog\.com$ (?:^|\.)dtic\.mil$ (?:^|\.)dtwang\.org$ (?:^|\.)duanzhihu\.com$ (?:^|\.)duck\.com$ (?:^|\.)duckdns\.org$ (?:^|\.)duckduckgo-owned-server\.yahoo\.net$ (?:^|\.)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$ (?:^|\.)dvdpac\.com$ (?:^|\.)dvorak\.org$ (?:^|\.)dw-world\.com$ (?:^|\.)dw-world\.de$ (?:^|\.)dw\.com$ (?:^|\.)dw\.de$ (?:^|\.)dwnews\.com$ (?:^|\.)dwnews\.net$ (?:^|\.)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$ (?:^|\.)dynupdate\.no-ip\.com$ (?:^|\.)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$ (?:^|\.)eastturkistancc\.org$ (?:^|\.)eastturkistangovernmentinexile\.us$ (?:^|\.)easyca\.ca$ (?:^|\.)easypic\.com$ (?:^|\.)ebony-beauty\.com$ (?:^|\.)ebook\.hyread\.com\.tw$ (?:^|\.)ebookbrowse\.com$ (?:^|\.)ebookee\.com$ (?:^|\.)ebtcbank\.com$ (?:^|\.)ecfa\.org\.tw$ (?:^|\.)echofon\.com$ (?:^|\.)ecimg\.tw$ (?:^|\.)ecministry\.net$ (?:^|\.)economist\.com$ (?:^|\.)ecsm\.vs\.com$ (?:^|\.)edgecastcdn\.net$ (?:^|\.)edicypages\.com$ (?:^|\.)edmontonchina\.cn$ (?:^|\.)edmontonservice\.com$ (?:^|\.)edns\.biz$ (?:^|\.)edoors\.com$ (?:^|\.)edubridge\.com$ (?:^|\.)edupro\.org$ (?:^|\.)eeas\.europa\.eu$ (?:^|\.)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$ (?:^|\.)embr\.in$ (?:^|\.)emilylau\.org\.hk$ (?:^|\.)empfil\.com$ (?:^|\.)emule-ed2k\.com$ (?:^|\.)emulefans\.com$ (?:^|\.)emuparadise\.me$ (?:^|\.)en\.favotter\.net$ (?:^|\.)en\.hao123\.com$ (?:^|\.)enanyang\.my$ (?:^|\.)encyclopedia\.com$ (?:^|\.)enewstree\.com$ (?:^|\.)enfal\.de$ (?:^|\.)engagedaily\.org$ (?:^|\.)englishforeveryone\.org$ (?:^|\.)englishfromengland\.co\.uk$ (?:^|\.)englishpen\.org$ (?:^|\.)enlighten\.org\.tw$ (?:^|\.)entermap\.com$ (?:^|\.)entnt\.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$ (?:^|\.)esurance\.com$ (?:^|\.)etaa\.org\.au$ (?:^|\.)etadult\.com$ (?:^|\.)etaiwannews\.com$ (?:^|\.)etherdelta\.com$ (?:^|\.)etizer\.org$ (?:^|\.)etokki\.com$ (?:^|\.)etools\.ncol\.com$ (?:^|\.)etowns\.net$ (?:^|\.)etowns\.org$ (?:^|\.)ettoday\.net$ (?:^|\.)etvonline\.hk$ (?:^|\.)eu\.org$ (?:^|\.)eucasino\.com$ (?:^|\.)eulam\.com$ (?:^|\.)eurekavpt\.com$ (?:^|\.)euronews\.com$ (?:^|\.)evchk\.wikia\.com$ (?:^|\.)evschool\.net$ (?:^|\.)exblog\.jp$ (?:^|\.)exchristian\.hk$ (?:^|\.)exmo\.com$ (?:^|\.)exmormon\.org$ (?:^|\.)expatshield\.com$ (?:^|\.)expecthim\.com$ (?:^|\.)expekt\.com$ (?:^|\.)experts-univers\.com$ (?:^|\.)exploader\.net$ (?:^|\.)expressvpn\.com$ (?:^|\.)exrates\.me$ (?:^|\.)extmatrix\.com$ (?:^|\.)extremetube\.com$ (?:^|\.)exx\.com$ (?:^|\.)eyevio\.jp$ (?:^|\.)eyny\.com$ (?:^|\.)ezpc\.tk$ (?:^|\.)ezpeer\.com$ (?:^|\.)ezua\.com$ (?:^|\.)fa\.gov\.tw$ (?:^|\.)facebook\.br$ (?:^|\.)facebook\.com$ (?:^|\.)facebook\.design$ (?:^|\.)facebook\.hu$ (?:^|\.)facebook\.in$ (?:^|\.)facebook\.nl$ (?:^|\.)facebook\.se$ (?:^|\.)facebookmail\.com$ (?:^|\.)facebookquotes4u\.com$ (?:^|\.)faceless\.me$ (?:^|\.)facesofnyfw\.com$ (?:^|\.)facesoftibetanselfimmolators\.info$ (?:^|\.)fail\.hk$ (?:^|\.)faith100\.org$ (?:^|\.)faithfuleye\.com$ (?:^|\.)faiththedog\.info$ (?:^|\.)fakku\.net$ (?:^|\.)falsefire\.com$ (?:^|\.)falun-co\.org$ (?:^|\.)falun-ny\.net$ (?:^|\.)falun\.caltech\.edu$ (?:^|\.)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$ (?:^|\.)fangbinxing\.com$ (?:^|\.)fangeming\.com$ (?:^|\.)fangeqiang\.com$ (?:^|\.)fanglizhi\.info$ (?:^|\.)fangmincn\.org$ (?:^|\.)fangong\.forums-free\.com$ (?:^|\.)fangong\.org$ (?:^|\.)fangongheike\.com$ (?:^|\.)fanhaodang\.com$ (?:^|\.)fanqiang\.tk$ (?:^|\.)fanqianghou\.com$ (?:^|\.)fanqiangyakexi\.net$ (?:^|\.)fanqiangzhe\.com$ (?:^|\.)fanswong\.com$ (?:^|\.)fanyue\.info$ (?:^|\.)fapdu\.com$ (?:^|\.)faproxy\.com$ (?:^|\.)faqserv\.com$ (?:^|\.)fartit\.com$ (?:^|\.)farwestchina\.com$ (?:^|\.)fast\.wistia\.com$ (?:^|\.)fastpic\.ru$ (?:^|\.)fastssh\.com$ (?:^|\.)faststone\.org$ (?:^|\.)fatbtc\.com$ (?:^|\.)favstar\.fm$ (?:^|\.)fawanghuihui\.org$ (?:^|\.)faydao\.com$ (?:^|\.)fb\.com$ (?:^|\.)fb\.me$ (?:^|\.)fbaddins\.com$ (?:^|\.)fbcdn\.net$ (?:^|\.)fbsbx\.com$ (?:^|\.)fbworkmail\.com$ (?:^|\.)fc2\.com$ (?:^|\.)fc2blog\.net$ (?:^|\.)fc2china\.com$ (?:^|\.)fc2cn\.com$ (?:^|\.)fda\.gov\.tw$ (?:^|\.)fdc64\.de$ (?:^|\.)fdc64\.org$ (?:^|\.)fdc89\.jp$ (?:^|\.)feedburner\.com$ (?:^|\.)feeds\.fileforum\.com$ (?:^|\.)feelssh\.com$ (?:^|\.)feer\.com$ (?:^|\.)feifeiss\.com$ (?:^|\.)feitian-california\.org$ (?:^|\.)feitianacademy\.org$ (?:^|\.)feministteacher\.com$ (?:^|\.)fengzhenghu\.com$ (?:^|\.)fengzhenghu\.net$ (?:^|\.)fevernet\.com$ (?:^|\.)ff\.im$ (?:^|\.)fffff\.at$ (?:^|\.)fflick\.com$ (?:^|\.)ffvpn\.com$ (?:^|\.)fgmtv\.net$ (?:^|\.)fgmtv\.org$ (?:^|\.)fhreports\.net$ (?:^|\.)fiddle\.jshell\.net$ (?:^|\.)figprayer\.com$ (?:^|\.)fileflyer\.com$ (?:^|\.)files2me\.com$ (?:^|\.)fileserve\.com$ (?:^|\.)filesor\.com$ (?:^|\.)fillthesquare\.org$ (?:^|\.)filmingfortibet\.org$ (?:^|\.)filmy\.olabloga\.pl$ (?:^|\.)filthdump\.com$ (?:^|\.)financetwitter\.com$ (?:^|\.)finchvpn\.com$ (?:^|\.)findmespot\.com$ (?:^|\.)findyoutube\.com$ (?:^|\.)findyoutube\.net$ (?:^|\.)fingerdaily\.com$ (?:^|\.)finler\.net$ (?:^|\.)firearmsworld\.net$ (?:^|\.)firebaseio\.com$ (?:^|\.)fireofliberty\.org$ (?:^|\.)firetweet\.io$ (?:^|\.)firstfivefollowers\.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$ (?:^|\.)flyvpn\.com$ (?:^|\.)flyzy2005\.com$ (?:^|\.)fnac\.be$ (?:^|\.)fnac\.com$ (?:^|\.)fochk\.org$ (?:^|\.)focustaiwan\.tw$ (?:^|\.)focusvpn\.com$ (?:^|\.)fofg-europe\.net$ (?:^|\.)fofg\.org$ (?:^|\.)fofldfradio\.org$ (?:^|\.)fooooo\.com$ (?:^|\.)footwiball\.com$ (?:^|\.)foreignpolicy\.com$ (?:^|\.)forum\.baby-kingdom\.com$ (?:^|\.)forum\.cyberctm\.com$ (?:^|\.)forum\.idsam\.com$ (?:^|\.)forum\.my903\.com$ (?:^|\.)forum\.mymaji\.com$ (?:^|\.)forum\.omy\.sg$ (?:^|\.)forum\.palmislife\.com$ (?:^|\.)forum\.setty\.com\.tw$ (?:^|\.)forum\.sina\.com\.hk$ (?:^|\.)forum\.slime\.com\.tw$ (?:^|\.)forum\.tvb\.com$ (?:^|\.)forum\.xinbao\.de$ (?:^|\.)forum4hk\.com$ (?:^|\.)fotile\.me$ (?:^|\.)fourface\.nodesnoop\.com$ (?:^|\.)fourthinternational\.org$ (?:^|\.)foxdie\.us$ (?:^|\.)foxgay\.com$ (?:^|\.)foxsub\.com$ (?:^|\.)foxtang\.com$ (?:^|\.)fpmt-osel\.org$ (?:^|\.)fpmt\.org$ (?:^|\.)fpmt\.tw$ (?:^|\.)fpmtmexico\.org$ (?:^|\.)fq\.wikia\.com$ (?:^|\.)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$ (?:^|\.)freebrowser\.org$ (?:^|\.)freechal\.com$ (?:^|\.)freechina\.net$ (?:^|\.)freechina\.news$ (?:^|\.)freechinaforum\.org$ (?:^|\.)freechinaweibo\.com$ (?:^|\.)freeddns\.com$ (?:^|\.)freeddns\.org$ (?:^|\.)freedomchina\.info$ (?:^|\.)freedomcollection\.org$ (?:^|\.)freedomhouse\.org$ (?:^|\.)freedominfonetweb\.wordpress\.com$ (?:^|\.)freedomsherald\.org$ (?:^|\.)freeforums\.org$ (?:^|\.)freefq\.com$ (?:^|\.)freefuckvids\.com$ (?:^|\.)freegao\.com$ (?:^|\.)freeilhamtohti\.org$ (?:^|\.)freekwonpyong\.org$ (?:^|\.)freelotto\.com$ (?:^|\.)freeman2\.com$ (?:^|\.)freemoren\.com$ (?:^|\.)freemorenews\.com$ (?:^|\.)freemuse\.org$ (?:^|\.)freenet$ (?:^|\.)freenet-china\.org$ (?:^|\.)freenetproject\.org$ (?:^|\.)freenewscn\.com$ (?:^|\.)freeopenvpn\.com$ (?:^|\.)freeoz\.org$ (?:^|\.)freessh\.us$ (?:^|\.)freetcp\.com$ (?:^|\.)freetibet\.net$ (?:^|\.)freetibet\.org$ (?:^|\.)freetibetanheroes\.org$ (?:^|\.)freeviewmovies\.com$ (?:^|\.)freevpn\.me$ (?:^|\.)freevpn\.nl$ (?:^|\.)freewallpaper4\.me$ (?:^|\.)freewebs\.com$ (?:^|\.)freewechat\.com$ (?:^|\.)freeweibo\.com$ (?:^|\.)freewww\.biz$ (?:^|\.)freewww\.info$ (?:^|\.)freexinwen\.com$ (?:^|\.)freeyellow\.com$ (?:^|\.)freeyoutubeproxy\.net$ (?:^|\.)friendfeed-media\.com$ (?:^|\.)friendfeed\.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$ (?:^|\.)fucd\.com$ (?:^|\.)fuckcnnic\.net$ (?:^|\.)fuckgfw\.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$ (?:^|\.)gabocorp\.com$ (?:^|\.)gaeproxy\.com$ (?:^|\.)gaforum\.org$ (?:^|\.)galaxymacau\.com$ (?:^|\.)galenwu\.com$ (?:^|\.)galstars\.net$ (?:^|\.)game735\.com$ (?:^|\.)gamebase\.com\.tw$ (?:^|\.)gamejolt\.com$ (?:^|\.)gamer-cds\.cdn\.hinet\.net$ (?:^|\.)gamer\.com\.tw$ (?:^|\.)gamer2-cds\.cdn\.hinet\.net$ (?:^|\.)gamez\.com\.tw$ (?:^|\.)gamousa\.com$ (?:^|\.)ganges\.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$ (?:^|\.)gcmasia\.com$ (?:^|\.)gcpnews\.com$ (?:^|\.)gcr\.io$ (?:^|\.)gdbt\.net$ (?:^|\.)gdzf\.org$ (?:^|\.)geek-art\.net$ (?:^|\.)geekerhome\.com$ (?:^|\.)geekheart\.info$ (?:^|\.)gekikame\.com$ (?:^|\.)gelbooru\.com$ (?:^|\.)geocities\.co\.jp$ (?:^|\.)geocities\.com$ (?:^|\.)geocities\.jp$ (?:^|\.)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$ (?:^|\.)getmdl\.io$ (?:^|\.)getoutline\.org$ (?:^|\.)getsocialscope\.com$ (?:^|\.)getsync\.com$ (?:^|\.)gettrials\.com$ (?:^|\.)gettyimages\.com$ (?:^|\.)getuploader\.com$ (?:^|\.)gfbv\.de$ (?:^|\.)gfgold\.com\.hk$ (?:^|\.)gfsale\.com$ (?:^|\.)gfw\.org\.ua$ (?:^|\.)gfw\.press$ (?:^|\.)ggpht\.com$ (?:^|\.)ggssl\.com$ (?:^|\.)ghostpath\.com$ (?:^|\.)ghut\.org$ (?:^|\.)giantessnight\.com$ (?:^|\.)gifree\.com$ (?:^|\.)giga-web\.jp$ (?:^|\.)gigporno\.ru$ (?:^|\.)girlbanker\.com$ (?:^|\.)git\.io$ (?:^|\.)github\.com$ (?:^|\.)githubusercontent\.com$ (?:^|\.)gizlen\.net$ (?:^|\.)gjczz\.com$ (?:^|\.)glass8\.eu$ (?:^|\.)global\.bing\.com$ (?:^|\.)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$ (?:^|\.)gmbd\.cn$ (?:^|\.)gmhz\.org$ (?:^|\.)gmll\.org$ (?:^|\.)gmodules\.com$ (?:^|\.)gmozomg\.izihost\.org$ (?:^|\.)gnci\.org\.hk$ (?:^|\.)go-pki\.com$ (?:^|\.)go\.nesnode\.com$ (?:^|\.)go141\.com$ (?:^|\.)goagent\.biz$ (?:^|\.)goagent\.codeplex\.com$ (?:^|\.)goagentplus\.com$ (?:^|\.)gobet\.cc$ (?:^|\.)godfootsteps\.org$ (?:^|\.)godns\.work$ (?:^|\.)godoc\.org$ (?:^|\.)godsdirectcontact\.co\.uk$ (?:^|\.)godsdirectcontact\.org$ (?:^|\.)godsdirectcontact\.org\.tw$ (?:^|\.)godsimmediatecontact\.com$ (?:^|\.)gogotunnel\.com$ (?:^|\.)gohappy\.com\.tw$ (?:^|\.)gojet\.krtco\.com\.tw$ (?:^|\.)gokbayrak\.com$ (?:^|\.)golang\.org$ (?:^|\.)goldbet\.com$ (?:^|\.)goldbetsports\.com$ (?:^|\.)goldeneyevault\.com$ (?:^|\.)goldenfrog\.com$ (?:^|\.)goldjizz\.com$ (?:^|\.)goldstep\.net$ (?:^|\.)goldwave\.com$ (?:^|\.)gongm\.in$ (?:^|\.)gongmeng\.info$ (?:^|\.)gongminliliang\.com$ (?:^|\.)gongwt\.com$ (?:^|\.)goo\.gl$ (?:^|\.)gooday\.xyz$ (?:^|\.)gooddns\.info$ (?:^|\.)goodreaders\.com$ (?:^|\.)goodreads\.com$ (?:^|\.)goodtv\.com\.tw$ (?:^|\.)goodtv\.tv$ (?:^|\.)goofind\.com$ (?:^|\.)google(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?){1,2}$ (?:^|\.)googleapis(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?){1,2}$ (?:^|\.)googleapps\.com$ (?:^|\.)googlearth\.com$ (?:^|\.)googleartproject\.com$ (?:^|\.)googleblog\.com$ (?:^|\.)googlebot\.com$ (?:^|\.)googlechinawebmaster\.com$ (?:^|\.)googlecode\.com$ (?:^|\.)googlecommerce\.com$ (?:^|\.)googledomains\.com$ (?:^|\.)googledrive\.com$ (?:^|\.)googleearth\.com$ (?:^|\.)googlegroups\.com$ (?:^|\.)googlehosted\.com$ (?:^|\.)googleideas\.com$ (?:^|\.)googleinsidesearch\.com$ (?:^|\.)googlelabs\.com$ (?:^|\.)googlemail\.com$ (?:^|\.)googlemashups\.com$ (?:^|\.)googlepagecreator\.com$ (?:^|\.)googleplay\.com$ (?:^|\.)googleplus\.com$ (?:^|\.)googlescholar\.com$ (?:^|\.)googlesile\.com$ (?:^|\.)googlesource\.com$ (?:^|\.)googleusercontent\.com$ (?:^|\.)googlevideo\.com$ (?:^|\.)googleweblight\.com$ (?:^|\.)googlezip\.net$ (?:^|\.)gopetition\.com$ (?:^|\.)goproxing\.net$ (?:^|\.)goregrish\.com$ (?:^|\.)gospelherald\.com$ (?:^|\.)got-game\.org$ (?:^|\.)gotdns\.ch$ (?:^|\.)gotgeeks\.com$ (?:^|\.)gotrusted\.com$ (?:^|\.)gotw\.ca$ (?:^|\.)gov\.taipei$ (?:^|\.)gov\.tw$ (?:^|\.)gr8domain\.biz$ (?:^|\.)gr8name\.biz$ (?:^|\.)grammaly\.com$ (?:^|\.)grandtrial\.org$ (?:^|\.)grangorz\.org$ (?:^|\.)graphis\.ne\.jp$ (?:^|\.)graphql\.org$ (?:^|\.)greasespot\.net$ (?:^|\.)great-firewall\.com$ (?:^|\.)great-roc\.org$ (?:^|\.)greatfire\.org$ (?:^|\.)greatfire\.us7\.list-manage\.com$ (?:^|\.)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$ (?:^|\.)groups\.google\.cn$ (?:^|\.)grow\.google$ (?:^|\.)gs-discuss\.com$ (?:^|\.)gsp\.target\.com$ (?:^|\.)gstatic\.com$ (?:^|\.)gtricks\.com$ (?:^|\.)gts-vpn\.com$ (?:^|\.)gu-chu-sum\.org$ (?:^|\.)guaguass\.com$ (?:^|\.)guaguass\.org$ (?:^|\.)guancha\.org$ (?:^|\.)guaneryu\.com$ (?:^|\.)guangming\.com\.my$ (?:^|\.)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$ (?:^|\.)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$ (?:^|\.)hackthatphone\.net$ (?:^|\.)hahaxixi\.github\.io$ (?:^|\.)hahlo\.com$ (?:^|\.)hakkatv\.org\.tw$ (?:^|\.)handcraftedsoftware\.org$ (?:^|\.)hanunyi\.com$ (?:^|\.)hao\.news$ (?:^|\.)haoel\.github\.io$ (?:^|\.)happy-vpn\.com$ (?:^|\.)haproxy\.org$ (?:^|\.)hardsextube\.com$ (?:^|\.)harunyahya\.com$ (?:^|\.)hautelook\.com$ (?:^|\.)hautelookcdn\.com$ (?:^|\.)have8\.com$ (?:^|\.)hbg\.com$ (?:^|\.)hbo\.com$ (?:^|\.)hclips\.com$ (?:^|\.)hd\.stheadline\.com$ (?:^|\.)hdlt\.me$ (?:^|\.)hdtvb\.net$ (?:^|\.)hdzog\.com$ (?:^|\.)heartyit\.com$ (?:^|\.)heavy-r\.com$ (?:^|\.)hec\.su$ (?:^|\.)hecaitou\.net$ (?:^|\.)hechaji\.com$ (?:^|\.)heeact\.edu\.tw$ (?:^|\.)hegre-art\.com$ (?:^|\.)heix\.pp\.ru$ (?:^|\.)helloandroid\.com$ (?:^|\.)helloqueer\.com$ (?:^|\.)helloss\.pw$ (?:^|\.)hellotxt\.com$ (?:^|\.)hellouk\.org$ (?:^|\.)help\.linksalpha\.com$ (?:^|\.)helpeachpeople\.com$ (?:^|\.)helplinfen\.com$ (?:^|\.)helpster\.de$ (?:^|\.)helpzhuling\.org$ (?:^|\.)hentai\.to$ (?:^|\.)hentaitube\.tv$ (?:^|\.)hentaivideoworld\.com$ (?:^|\.)heqinglian\.net$ (?:^|\.)heungkongdiscuss\.com$ (?:^|\.)hexieshe\.com$ (?:^|\.)hexieshe\.xyz$ (?:^|\.)hexxeh\.net$ (?:^|\.)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$ (?:^|\.)hihiforum\.com$ (?:^|\.)hihistory\.net$ (?:^|\.)hiitch\.com$ (?:^|\.)hikinggfw\.org$ (?:^|\.)hilive\.tv$ (?:^|\.)himalayan-foundation\.org$ (?:^|\.)himalayanglacier\.com$ (?:^|\.)himemix\.com$ (?:^|\.)himemix\.net$ (?:^|\.)hitbtc\.com$ (?:^|\.)hitomi\.la$ (?:^|\.)hiwifi\.com$ (?:^|\.)hizb-ut-tahrir\.info$ (?:^|\.)hizb-ut-tahrir\.org$ (?:^|\.)hizbuttahrir\.org$ (?:^|\.)hjclub\.info$ (?:^|\.)hk-pub\.com$ (?:^|\.)hk\.frienddy\.com$ (?:^|\.)hk\.geocities\.com$ (?:^|\.)hk\.gradconnection\.com$ (?:^|\.)hk\.hao123img\.com$ (?:^|\.)hk\.jiepang\.com$ (?:^|\.)hk\.knowledge\.yahoo\.com$ (?:^|\.)hk\.myblog\.yahoo\.com$ (?:^|\.)hk\.news\.yahoo\.com$ (?:^|\.)hk\.rd\.yahoo\.com$ (?:^|\.)hk\.search\.yahoo\.com$ (?:^|\.)hk\.video\.news\.yahoo\.com$ (?:^|\.)hk\.yahoo\.com$ (?:^|\.)hk01\.com$ (?:^|\.)hk32168\.com$ (?:^|\.)hka8964\.wordpress\.com$ (?:^|\.)hkacg\.com$ (?:^|\.)hkacg\.net$ (?:^|\.)hkanews\.wordpress\.com$ (?:^|\.)hkatvnews\.com$ (?:^|\.)hkbc\.net$ (?:^|\.)hkbf\.org$ (?:^|\.)hkbookcity\.com$ (?:^|\.)hkchurch\.org$ (?:^|\.)hkci\.org\.hk$ (?:^|\.)hkcmi\.edu$ (?:^|\.)hkcnews\.com$ (?:^|\.)hkcoc\.com$ (?:^|\.)hkcoc\.weather\.com\.hk$ (?:^|\.)hkdailynews\.com\.hk$ (?:^|\.)hkday\.net$ (?:^|\.)hkdf\.org$ (?:^|\.)hkej\.com$ (?:^|\.)hkepc\.com$ (?:^|\.)hkfaa\.com$ (?:^|\.)hkfreezone\.com$ (?:^|\.)hkfront\.org$ (?:^|\.)hkgalden\.com$ (?:^|\.)hkgolden\.com$ (?:^|\.)hkgreenradio\.org$ (?:^|\.)hkheadline\.com$ (?:^|\.)hkhkhk\.com$ (?:^|\.)hkhrc\.org\.hk$ (?:^|\.)hkhrm\.org\.hk$ (?:^|\.)hkip\.org\.uk$ (?:^|\.)hkjc\.com$ (?:^|\.)hkjp\.org$ (?:^|\.)hklft\.com$ (?:^|\.)hklts\.org\.hk$ (?:^|\.)hkptu\.org$ (?:^|\.)hkreporter\.com$ (?:^|\.)hkreporter\.loved\.hk$ (?:^|\.)hkupop\.hku\.hk$ (?:^|\.)hkusu\.net$ (?:^|\.)hkvwet\.com$ (?:^|\.)hkwcc\.org\.hk$ (?:^|\.)hkzone\.org$ (?:^|\.)hmonghot\.com$ (?:^|\.)hmv\.co\.jp$ (?:^|\.)hmvdigital\.ca$ (?:^|\.)hmvdigital\.com$ (?:^|\.)hnjhj\.com$ (?:^|\.)hnntube\.com$ (?:^|\.)hola\.com$ (?:^|\.)hola\.org$ (?:^|\.)holymountaincn\.com$ (?:^|\.)holyspiritspeaks\.org$ (?:^|\.)home\.sina\.com$ (?:^|\.)home\.so-net\.net\.tw$ (?:^|\.)homedepot\.com$ (?:^|\.)homeperversion\.com$ (?:^|\.)homeservershow\.com$ (?:^|\.)hongkongfp\.com$ (?:^|\.)hongmeimei\.com$ (?:^|\.)hongzhi\.li$ (?:^|\.)hootsuite\.com$ (?:^|\.)hoovers\.com$ (?:^|\.)hopedialogue\.org$ (?:^|\.)hopto\.org$ (?:^|\.)hornygamer\.com$ (?:^|\.)hornytrip\.com$ (?:^|\.)hotav\.tv$ (?:^|\.)hotels\.cn$ (?:^|\.)hotfrog\.com\.tw$ (?:^|\.)hotgoo\.com$ (?:^|\.)hotpornshow\.com$ (?:^|\.)hotpot\.hk$ (?:^|\.)hotshame\.com$ (?:^|\.)hotspotshield\.com$ (?:^|\.)hotvpn\.com$ (?:^|\.)hougaige\.com$ (?:^|\.)howtoforge\.com$ (?:^|\.)hoxx\.com$ (?:^|\.)hpa\.gov\.tw$ (?:^|\.)hqcdp\.org$ (?:^|\.)hqjapanesesex\.com$ (?:^|\.)hqmovies\.com$ (?:^|\.)hqsbnet\.wordpress\.com$ (?:^|\.)hqsbonline\.wordpress\.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$ (?:^|\.)https$ (?:^|\.)https443\.net$ (?:^|\.)https443\.org$ (?:^|\.)hua-yue\.net$ (?:^|\.)huaglad\.com$ (?:^|\.)huanghuagang\.org$ (?:^|\.)huangyiyu\.com$ (?:^|\.)huaren\.us$ (?:^|\.)huaren4us\.com$ (?:^|\.)huashangnews\.com$ (?:^|\.)huaxia-news\.com$ (?:^|\.)huaxiabao\.org$ (?:^|\.)huaxin\.ph$ (?:^|\.)huayuworld\.org$ (?:^|\.)hudatoriq\.web\.id$ (?:^|\.)hudson\.org$ (?:^|\.)huffingtonpost\.com$ (?:^|\.)hugoroy\.eu$ (?:^|\.)huhaitai\.com$ (?:^|\.)huhamhire\.com$ (?:^|\.)huiyi\.in$ (?:^|\.)hulkshare\.com$ (?:^|\.)hulu\.com$ (?:^|\.)huluim\.com$ (?:^|\.)hum$ (?:^|\.)humanrightsbriefing\.org$ (?:^|\.)hung-ya\.com$ (?:^|\.)hungerstrikeforaids\.org$ (?:^|\.)huobi\.com$ (?:^|\.)huobi\.pro$ (?:^|\.)huobipro\.com$ (?:^|\.)huping\.net$ (?:^|\.)hurgokbayrak\.com$ (?:^|\.)hurriyet\.com\.tr$ (?:^|\.)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$ (?:^|\.)i-cable\.com$ (?:^|\.)i-part\.com\.tw$ (?:^|\.)i\.lithium\.com$ (?:^|\.)i1\.hk$ (?:^|\.)i2p2\.de$ (?:^|\.)i2runner\.com$ (?:^|\.)i818hk\.com$ (?:^|\.)iam\.soy$ (?:^|\.)iamtopone\.com$ (?:^|\.)iask\.bz$ (?:^|\.)iask\.ca$ (?:^|\.)iav19\.com$ (?:^|\.)ibiblio\.org$ (?:^|\.)iblist\.com$ (?:^|\.)iblogserv-f\.net$ (?:^|\.)ibros\.org$ (?:^|\.)ibvpn\.com$ (?:^|\.)icams\.com$ (?:^|\.)ice\.audionow\.com$ (?:^|\.)icij\.org$ (?:^|\.)icl-fi\.org$ (?:^|\.)icoco\.com$ (?:^|\.)iconpaper\.org$ (?:^|\.)icu-project\.org$ (?:^|\.)id\.hao123\.com$ (?:^|\.)id\.heroku\.com$ (?:^|\.)iddddg\.com$ (?:^|\.)idemocracy\.asia$ (?:^|\.)identi\.ca$ (?:^|\.)idiomconnection\.com$ (?:^|\.)idouga\.com$ (?:^|\.)idreamx\.com$ (?:^|\.)idv\.tw$ (?:^|\.)ieasy5\.com$ (?:^|\.)ied2k\.net$ (?:^|\.)ienergy1\.com$ (?:^|\.)if\.ttt$ (?:^|\.)ifan\.cz\.cc$ (?:^|\.)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$ (?:^|\.)iipdigital\.usembassy\.gov$ (?:^|\.)ikstar\.com$ (?:^|\.)ikwb\.com$ (?:^|\.)illusionfactory\.com$ (?:^|\.)ilove80\.be$ (?:^|\.)ilovelongtoes\.com$ (?:^|\.)im\.tv$ (?:^|\.)im88\.tw$ (?:^|\.)imageab\.com$ (?:^|\.)imagefap\.com$ (?:^|\.)imageflea\.com$ (?:^|\.)images-gaytube\.com$ (?:^|\.)images\.comico\.tw$ (?:^|\.)imageshack\.us$ (?:^|\.)imagevenue\.com$ (?:^|\.)imagezilla\.net$ (?:^|\.)imb\.org$ (?:^|\.)imdb\.com$ (?:^|\.)img$ (?:^|\.)img\.dlsite\.jp$ (?:^|\.)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$ (?:^|\.)in99\.org$ (?:^|\.)incapdns\.net$ (?:^|\.)incloak\.com$ (?:^|\.)incredibox\.fr$ (?:^|\.)indiandefensenews\.in$ (?:^|\.)indiemerch\.com$ (?:^|\.)info-graf\.fr$ (?:^|\.)initiativesforchina\.org$ (?:^|\.)inkui\.com$ (?:^|\.)inmediahk\.net$ (?:^|\.)innermongolia\.org$ (?:^|\.)inote\.tw$ (?:^|\.)insecam\.org$ (?:^|\.)insidevoa\.com$ (?:^|\.)instagram\.com$ (?:^|\.)instanthq\.com$ (?:^|\.)institut-tibetain\.org$ (?:^|\.)international-news\.newsmagazine\.asia$ (?:^|\.)internet\.org$ (?:^|\.)internetdefenseleague\.org$ (?:^|\.)internetfreedom\.org$ (?:^|\.)internetpopculture\.com$ (?:^|\.)inthenameofconfuciusmovie\.com$ (?:^|\.)investigating\.wordpress\.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$ (?:^|\.)iredmail\.org$ (?:^|\.)ironbigfools\.compython\.net$ (?:^|\.)ironpython\.net$ (?:^|\.)ironsocket\.com$ (?:^|\.)is-a-hunter\.com$ (?:^|\.)is\.gd$ (?:^|\.)isaacmao\.com$ (?:^|\.)isasecret\.com$ (?:^|\.)isc\.sans\.edu$ (?:^|\.)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$ (?:^|\.)istiqlalhewer\.com$ (?:^|\.)istockphoto\.com$ (?:^|\.)isunaffairs\.com$ (?:^|\.)isuntv\.com$ (?:^|\.)itaboo\.info$ (?:^|\.)itaiwan\.gov\.tw$ (?:^|\.)italiatibet\.org$ (?:^|\.)itasoftware\.com$ (?:^|\.)itemdb\.com$ (?:^|\.)ithelp\.ithome\.com\.tw$ (?:^|\.)its\.caltech\.edu$ (?:^|\.)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$ (?:^|\.)izaobao\.us$ (?:^|\.)izles\.net$ (?:^|\.)izlesem\.org$ (?:^|\.)j\.mp$ (?:^|\.)ja\.wikipedia\.org$ (?:^|\.)jamaat\.org$ (?:^|\.)jamyangnorbu\.com$ (?:^|\.)jandyx\.com$ (?:^|\.)janwongphoto\.com$ (?:^|\.)japan-whores\.com$ (?:^|\.)japanfirst\.asianfreeforum\.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$ (?:^|\.)jiehua\.cz$ (?:^|\.)jieshibaobao\.com$ (?:^|\.)jigglegifs\.com$ (?:^|\.)jigong1024\.com$ (?:^|\.)jihadintel\.meforum\.org$ (?:^|\.)jihadology\.net$ (?:^|\.)jiji\.com$ (?:^|\.)jims\.net$ (?:^|\.)jinbushe\.org$ (?:^|\.)jingpin\.org$ (?:^|\.)jingsim\.org$ (?:^|\.)jinpianwang\.com$ (?:^|\.)jinroukong\.com$ (?:^|\.)jintian\.net$ (?:^|\.)jinx\.com$ (?:^|\.)jitouch\.com$ (?:^|\.)jizzthis\.com$ (?:^|\.)jjgirls\.com$ (?:^|\.)jkb\.cc$ (?:^|\.)jkforum\.net$ (?:^|\.)jkub\.com$ (?:^|\.)jma\.go\.jp$ (?:^|\.)jmscult\.com$ (?:^|\.)joachims\.org$ (?:^|\.)jobnewera\.wordpress\.com$ (?:^|\.)jobso\.tv$ (?:^|\.)joinmastodon\.org$ (?:^|\.)journalchretien\.net$ (?:^|\.)journalofdemocracy\.org$ (?:^|\.)joymiihub\.com$ (?:^|\.)joyourself\.com$ (?:^|\.)jp\.hao123\.com$ (?:^|\.)jpl\.nasa\.gov$ (?:^|\.)jpopforum\.net$ (?:^|\.)jtvnw\.net$ (?:^|\.)jubushoushen\.com$ (?:^|\.)juhuaren\.com$ (?:^|\.)jukujo-club\.com$ (?:^|\.)juliepost\.com$ (?:^|\.)juliereyc\.com$ (?:^|\.)junauza\.com$ (?:^|\.)june4commemoration\.org$ (?:^|\.)junefourth-20\.net$ (?:^|\.)jungleheart\.com$ (?:^|\.)juoaa\.com$ (?:^|\.)justdied\.com$ (?:^|\.)justfreevpn\.com$ (?:^|\.)justicefortenzin\.org$ (?:^|\.)justpaste\.it$ (?:^|\.)justtristan\.com$ (?:^|\.)juyuange\.org$ (?:^|\.)juziyue\.com$ (?:^|\.)jwmusic\.org$ (?:^|\.)jyxf\.net$ (?:^|\.)k-doujin\.net$ (?:^|\.)ka-wai\.com$ (?:^|\.)kagyu\.org$ (?:^|\.)kagyu\.org\.za$ (?:^|\.)kagyumonlam\.org$ (?:^|\.)kagyunews\.com\.hk$ (?:^|\.)kagyuoffice\.org$ (?:^|\.)kagyuoffice\.org\.tw$ (?:^|\.)kaiyuan\.de$ (?:^|\.)kakao\.com$ (?:^|\.)kalachakralugano\.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$ (?:^|\.)kb\.monitorware\.com$ (?:^|\.)kba-tx\.org$ (?:^|\.)kcoolonline\.com$ (?:^|\.)kebrum\.com$ (?:^|\.)kechara\.com$ (?:^|\.)keepandshare\.com$ (?:^|\.)keezmovies\.com$ (?:^|\.)kendatire\.com$ (?:^|\.)kendincos\.net$ (?:^|\.)kenengba\.com$ (?:^|\.)keontech\.net$ (?:^|\.)kepard\.com$ (?:^|\.)kex\.com$ (?:^|\.)keycdn\.com$ (?:^|\.)khabdha\.org$ (?:^|\.)khatrimaza\.org$ (?:^|\.)khmusic\.com\.tw$ (?:^|\.)kichiku-doujinko\.com$ (?:^|\.)kik\.com$ (?:^|\.)killwall\.com$ (?:^|\.)kindleren\.com$ (?:^|\.)kineox\.free\.fr$ (?:^|\.)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$ (?:^|\.)kmuh\.org\.tw$ (?:^|\.)knowledgerush\.com$ (?:^|\.)kobo\.com$ (?:^|\.)kobobooks\.com$ (?:^|\.)kodingen\.com$ (?:^|\.)kompozer\.net$ (?:^|\.)konachan\.com$ (?:^|\.)kone\.com$ (?:^|\.)koolsolutions\.com$ (?:^|\.)koornk\.com$ (?:^|\.)koranmandarin\.com$ (?:^|\.)korenan2\.com$ (?:^|\.)ksdl\.org$ (?:^|\.)ksnews\.com\.tw$ (?:^|\.)kspcoin\.com$ (?:^|\.)ktzhk\.com$ (?:^|\.)kucoin\.com$ (?:^|\.)kui\.name$ (?:^|\.)kun\.im$ (?:^|\.)kurashsultan\.com$ (?:^|\.)kurtmunger\.com$ (?:^|\.)kusocity\.com$ (?:^|\.)kwcg\.ca$ (?:^|\.)kwongwah\.com\.my$ (?:^|\.)kxsw\.life$ (?:^|\.)kyofun\.com$ (?:^|\.)kyohk\.net$ (?:^|\.)kyoyue\.com$ (?:^|\.)kyzyhello\.com$ (?:^|\.)kzeng\.info$ (?:^|\.)la-forum\.org$ (?:^|\.)labiennale\.org$ (?:^|\.)ladbrokes\.com$ (?:^|\.)lagranepoca\.com$ (?:^|\.)lalulalu\.com$ (?:^|\.)lama\.com\.tw$ (?:^|\.)lamayeshe\.com$ (?:^|\.)lamnia\.co\.uk$ (?:^|\.)lamrim\.com$ (?:^|\.)lanterncn\.cn$ (?:^|\.)lantosfoundation\.org$ (?:^|\.)laod\.cn$ (?:^|\.)laogai\.org$ (?:^|\.)laomiu\.com$ (?:^|\.)laoyang\.info$ (?:^|\.)laptoplockdown\.com$ (?:^|\.)laqingdan\.net$ (?:^|\.)larsgeorge\.com$ (?:^|\.)lastcombat\.com$ (?:^|\.)lastfm\.es$ (?:^|\.)latelinenews\.com$ (?:^|\.)latibet\.org$ (?:^|\.)lbank\.info$ (?:^|\.)ld\.hao123img\.com$ (?:^|\.)le-vpn\.com$ (?:^|\.)leafyvpn\.net$ (?:^|\.)lecloud\.net$ (?:^|\.)leeao\.com\.cn$ (?:^|\.)lefora\.com$ (?:^|\.)left21\.hk$ (?:^|\.)legalporno\.com$ (?:^|\.)legaltech\.law\.com$ (?:^|\.)legsjapan\.com$ (?:^|\.)leirentv\.ca$ (?:^|\.)leisurecafe\.ca$ (?:^|\.)leisurepro\.com$ (?:^|\.)lematin\.ch$ (?:^|\.)lemonde\.fr$ (?:^|\.)lenwhite\.com$ (?:^|\.)lerosua\.org$ (?:^|\.)lers\.google$ (?:^|\.)lesoir\.be$ (?:^|\.)letou\.com$ (?:^|\.)letscorp\.net$ (?:^|\.)lflink\.com$ (?:^|\.)lflinkup\.com$ (?:^|\.)lflinkup\.net$ (?:^|\.)lflinkup\.org$ (?:^|\.)lhakar\.org$ (?:^|\.)lhasocialwork\.org$ (?:^|\.)liangyou\.net$ (?:^|\.)liangzhichuanmei\.com$ (?:^|\.)lianyue\.net$ (?:^|\.)liaowangxizang\.net$ (?:^|\.)liberal\.org\.hk$ (?:^|\.)libertytimes\.com\.tw$ (?:^|\.)library\.usc\.cuhk\.edu\.hk$ (?:^|\.)lidecheng\.com$ (?:^|\.)lifemiles\.com$ (?:^|\.)lighten\.org\.tw$ (?:^|\.)lighti\.me$ (?:^|\.)lightnovel\.cn$ (?:^|\.)lihkg\.com$ (?:^|\.)like\.com$ (?:^|\.)limiao\.net$ (?:^|\.)line-apps\.com$ (?:^|\.)line-scdn\.net$ (?:^|\.)line\.me$ (?:^|\.)line\.naver\.jp$ (?:^|\.)linear-abematv\.akamaized\.net$ (?:^|\.)linglingfa\.com$ (?:^|\.)lingvodics\.com$ (?:^|\.)link-o-rama\.com$ (?:^|\.)linkedin\.com$ (?:^|\.)linkideo\.com$ (?:^|\.)linkuswell\.com$ (?:^|\.)linux\.org\.hk$ (?:^|\.)linuxtoy\.org$ (?:^|\.)lionsroar\.com$ (?:^|\.)lipuman\.com$ (?:^|\.)liquidvpn\.com$ (?:^|\.)listentoyoutube\.com$ (?:^|\.)listorious\.com$ (?:^|\.)lists\.w3\.org$ (?:^|\.)liu-xiaobo\.org$ (?:^|\.)liudejun\.com$ (?:^|\.)liuhanyu\.com$ (?:^|\.)liujianshu\.com$ (?:^|\.)liuxiaobo\.net$ (?:^|\.)liuxiaotong\.com$ (?:^|\.)livecoin\.net$ (?:^|\.)livedoor\.jp$ (?:^|\.)liveleak\.com$ (?:^|\.)livestation\.com$ (?:^|\.)livestream\.com$ (?:^|\.)livevideo\.com$ (?:^|\.)livingonline\.us$ (?:^|\.)livingstream\.com$ (?:^|\.)liwangyang\.com$ (?:^|\.)lizhizhuangbi\.com$ (?:^|\.)lkcn\.net$ (?:^|\.)llss\.me$ (?:^|\.)load\.to$ (?:^|\.)lobsangwangyal\.com$ (?:^|\.)localbitcoins\.com$ (?:^|\.)localdomain\.ws$ (?:^|\.)localpresshk\.com$ (?:^|\.)lockestek\.com$ (?:^|\.)logbot\.net$ (?:^|\.)login\.target\.com$ (?:^|\.)logiqx\.com$ (?:^|\.)londonchinese\.ca$ (?:^|\.)longhair\.hk$ (?:^|\.)longmusic\.com$ (?:^|\.)longtermly\.net$ (?:^|\.)longtoes\.com$ (?:^|\.)lookpic\.com$ (?:^|\.)looktoronto\.com$ (?:^|\.)lotsawahouse\.org$ (?:^|\.)lotuslight\.org\.hk$ (?:^|\.)lotuslight\.org\.tw$ (?:^|\.)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$ (?:^|\.)luke54\.com$ (?:^|\.)luke54\.org$ (?:^|\.)lupm\.org$ (?:^|\.)lushstories\.com$ (?:^|\.)luxebc\.com$ (?:^|\.)lvhai\.org$ (?:^|\.)lvv2\.com$ (?:^|\.)lyfhk\.net$ (?:^|\.)lzmtnews\.org$ (?:^|\.)m\.hkgalden\.com$ (?:^|\.)m\.me$ (?:^|\.)m\.plixi\.com$ (?:^|\.)m\.slandr\.net$ (?:^|\.)ma\.hao123\.com$ (?:^|\.)macgamestore\.com$ (?:^|\.)macrovpn\.com$ (?:^|\.)macts\.com\.tw$ (?:^|\.)mad-ar\.ch$ (?:^|\.)madewithcode\.com$ (?:^|\.)madonna-av\.com$ (?:^|\.)madrau\.com$ (?:^|\.)madthumbs\.com$ (?:^|\.)magazines\.sina\.com\.tw$ (?:^|\.)magic-net\.info$ (?:^|\.)mahabodhi\.org$ (?:^|\.)maiio\.net$ (?:^|\.)mail-archive\.com$ (?:^|\.)maildns\.xyz$ (?:^|\.)maiplus\.com$ (?:^|\.)maizhong\.org$ (?:^|\.)makemymood\.com$ (?:^|\.)makkahnewspaper\.com$ (?:^|\.)makzhou\.warehouse333\.com$ (?:^|\.)malaysiakini\.com$ (?:^|\.)mamingzhe\.com$ (?:^|\.)manchukuo\.net$ (?:^|\.)mangafox\.com$ (?:^|\.)mangafox\.me$ (?:^|\.)maniash\.com$ (?:^|\.)manicur4ik\.ru$ (?:^|\.)mansion\.com$ (?:^|\.)mansionpoker\.com$ (?:^|\.)manta\.com$ (?:^|\.)maplew\.com$ (?:^|\.)marc\.info$ (?:^|\.)marguerite\.su$ (?:^|\.)martau\.com$ (?:^|\.)martincartoons\.com$ (?:^|\.)martsangkagyuofficial\.org$ (?:^|\.)maruta\.be$ (?:^|\.)marxist\.com$ (?:^|\.)marxist\.net$ (?:^|\.)marxists\.org$ (?:^|\.)mash\.to$ (?:^|\.)maskedip\.com$ (?:^|\.)mastodon\.cloud$ (?:^|\.)mastodon\.host$ (?:^|\.)mastodon\.social$ (?:^|\.)matainja\.com$ (?:^|\.)material\.io$ (?:^|\.)mathable\.io$ (?:^|\.)mathiew-badimon\.com$ (?:^|\.)matome-plus\.com$ (?:^|\.)matome-plus\.net$ (?:^|\.)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$ (?:^|\.)me\.youthwant\.com\.tw$ (?:^|\.)meansys\.com$ (?:^|\.)media\.nu\.nl$ (?:^|\.)media\.org\.hk$ (?:^|\.)mediachinese\.com$ (?:^|\.)mediafire\.com$ (?:^|\.)mediafreakcity\.com$ (?:^|\.)medium\.com$ (?:^|\.)meetav\.com$ (?:^|\.)meetup\.com$ (?:^|\.)mefeedia\.com$ (?:^|\.)mefound\.com$ (?:^|\.)mega\.nz$ (?:^|\.)megaproxy\.com$ (?:^|\.)megarotic\.com$ (?:^|\.)megavideo\.com$ (?:^|\.)megurineluka\.com$ (?:^|\.)meirixiaochao\.com$ (?:^|\.)meltoday\.com$ (?:^|\.)meme\.yahoo\.com$ (?:^|\.)memehk\.com$ (?:^|\.)memorybbs\.com$ (?:^|\.)memri\.org$ (?:^|\.)memrijttm\.org$ (?:^|\.)mercatox\.com$ (?:^|\.)mercyprophet\.org$ (?:^|\.)mergersandinquisitions\.org$ (?:^|\.)meridian-trust\.org$ (?:^|\.)meripet\.biz$ (?:^|\.)meripet\.com$ (?:^|\.)merit-times\.com\.tw$ (?:^|\.)meshrep\.com$ (?:^|\.)mesotw\.com$ (?:^|\.)messenger\.com$ (?:^|\.)metacafe\.com$ (?:^|\.)metart\.com$ (?:^|\.)metarthunter\.com$ (?:^|\.)meteorshowersonline\.com$ (?:^|\.)metrohk\.com\.hk$ (?:^|\.)metrolife\.ca$ (?:^|\.)metroradio\.com\.hk$ (?:^|\.)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$ (?:^|\.)mike\.cz\.cc$ (?:^|\.)mikesoltys\.com$ (?:^|\.)milph\.net$ (?:^|\.)milsurps\.com$ (?:^|\.)mimiai\.net$ (?:^|\.)mimivip\.com$ (?:^|\.)mimivv\.com$ (?:^|\.)mindrolling\.org$ (?:^|\.)minghui-a\.org$ (?:^|\.)minghui-b\.org$ (?:^|\.)minghui-school\.org$ (?:^|\.)minghui\.or\.kr$ (?:^|\.)minghui\.org$ (?:^|\.)minghuiyw\.wordpress\.com$ (?:^|\.)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$ (?:^|\.)mist\.vip$ (?:^|\.)mitao\.com\.tw$ (?:^|\.)mitbbs\.com$ (?:^|\.)mitbbsau\.com$ (?:^|\.)mixero\.com$ (?:^|\.)mixpod\.com$ (?:^|\.)mixx\.com$ (?:^|\.)mizzmona\.com$ (?:^|\.)mjib\.gov\.tw$ (?:^|\.)mjlsh\.usc\.cuhk\.edu\.hk$ (?:^|\.)mk5000\.com$ (?:^|\.)mlcool\.com$ (?:^|\.)mlzs\.work$ (?:^|\.)mm-cg\.com$ (?:^|\.)mmaaxx\.com$ (?:^|\.)mmmca\.com$ (?:^|\.)mnewstv\.com$ (?:^|\.)mo\.nightlife141\.com$ (?:^|\.)mobatek\.net$ (?:^|\.)mobile01\.com$ (?:^|\.)mobileways\.de$ (?:^|\.)moby\.to$ (?:^|\.)mobypicture\.com$ (?:^|\.)moeaic\.gov\.tw$ (?:^|\.)moeerolibrary\.com$ (?:^|\.)mofa\.gov\.tw$ (?:^|\.)mofaxiehui\.com$ (?:^|\.)mofos\.com$ (?:^|\.)mog\.com$ (?:^|\.)mohu\.club$ (?:^|\.)mohu\.ml$ (?:^|\.)mojim\.com$ (?:^|\.)mol\.gov\.tw$ (?:^|\.)molihua\.org$ (?:^|\.)mondex\.org$ (?:^|\.)money-link\.com\.tw$ (?:^|\.)moneyhome\.biz$ (?:^|\.)monitorchina\.org$ (?:^|\.)monster\.com$ (?:^|\.)moodyz\.com$ (?:^|\.)moonbbs\.com$ (?:^|\.)moonbingo\.com$ (?:^|\.)morningsun\.org$ (?:^|\.)moroneta\.com$ (?:^|\.)mos\.ru$ (?:^|\.)motherless\.com$ (?:^|\.)motiyun\.com$ (?:^|\.)motor4ik\.ru$ (?:^|\.)mousebreaker\.com$ (?:^|\.)movements\.org$ (?:^|\.)moviefap\.com$ (?:^|\.)mp3buscador\.com$ (?:^|\.)mp3ye\.eu$ (?:^|\.)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$ (?:^|\.)mswe1\.org$ (?:^|\.)mthruf\.com$ (?:^|\.)mtw\.tl$ (?:^|\.)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$ (?:^|\.)mx\.hao123\.com$ (?:^|\.)mx981\.com$ (?:^|\.)my-formosa\.com$ (?:^|\.)my-private-network\.co\.uk$ (?:^|\.)my-proxy\.com$ (?:^|\.)my\.mail\.ru$ (?:^|\.)my\.opera\.com$ (?:^|\.)my\.pcloud\.com$ (?:^|\.)my03\.com$ (?:^|\.)myactimes\.com$ (?:^|\.)myanniu\.com$ (?:^|\.)myaudiocast\.com$ (?:^|\.)myav\.com\.tw$ (?:^|\.)mybbs\.us$ (?:^|\.)mybet\.com$ (?:^|\.)myca168\.com$ (?:^|\.)mycanadanow\.com$ (?:^|\.)mychinamyhome\.com$ (?:^|\.)mychinanet\.com$ (?:^|\.)mychinanews\.com$ (?:^|\.)mychinese\.news$ (?:^|\.)mycnnews\.com$ (?:^|\.)mycould\.com$ (?:^|\.)mydad\.info$ (?:^|\.)myddns\.com$ (?:^|\.)myeasytv\.com$ (?:^|\.)myeclipseide\.com$ (?:^|\.)myforum\.com\.hk$ (?:^|\.)myforum\.com\.uk$ (?:^|\.)myfreecams\.com$ (?:^|\.)myfreepaysite\.com$ (?:^|\.)myfreshnet\.com$ (?:^|\.)myftp\.info$ (?:^|\.)myftp\.name$ (?:^|\.)myiphide\.com$ (?:^|\.)mykomica\.org$ (?:^|\.)mylftv\.com$ (?:^|\.)mymediarom\.com$ (?:^|\.)mymoe\.moe$ (?:^|\.)mymom\.info$ (?:^|\.)mymusic\.net\.tw$ (?:^|\.)mynetav\.net$ (?:^|\.)mynetav\.org$ (?:^|\.)mynumber\.org$ (?:^|\.)myparagliding\.com$ (?:^|\.)mypicture\.info$ (?:^|\.)mypop3\.net$ (?:^|\.)mypop3\.org$ (?:^|\.)mypopescu\.com$ (?:^|\.)myradio\.hk$ (?:^|\.)myreadingmanga\.info$ (?:^|\.)mysecondarydns\.com$ (?:^|\.)myshare\.url\.com\.tw$ (?:^|\.)mysinablog\.com$ (?:^|\.)mysite\.verizon\.net$ (?:^|\.)myspace\.com$ (?:^|\.)myspacecdn\.com$ (?:^|\.)mytalkbox\.com$ (?:^|\.)mytizi\.com$ (?:^|\.)mywww\.biz$ (?:^|\.)myz\.info$ (?:^|\.)naacoalition\.org$ (?:^|\.)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$ (?:^|\.)nat\.gov\.tw$ (?:^|\.)nat\.moe$ (?:^|\.)national-lottery\.co\.uk$ (?:^|\.)nationsonline\.org$ (?:^|\.)nationwide\.com$ (?:^|\.)naughtyamerica\.com$ (?:^|\.)navyfamily\.navy\.mil$ (?:^|\.)navyreserve\.navy\.mil$ (?:^|\.)naweeklytimes\.com$ (?:^|\.)nbtvpn\.com$ (?:^|\.)nccwatch\.org\.tw$ (?:^|\.)nch\.com\.tw$ (?:^|\.)ncn\.org$ (?:^|\.)nde\.de$ (?:^|\.)ndr\.de$ (?:^|\.)ned\.org$ (?:^|\.)nekoslovakia\.net$ (?:^|\.)nemesis2\.qx\.net$ (?:^|\.)neo-miracle\.com$ (?:^|\.)nepusoku\.com$ (?:^|\.)net-fits\.pro$ (?:^|\.)netbirds\.com$ (?:^|\.)netcolony\.com$ (?:^|\.)netflix\.com$ (?:^|\.)netme\.cc$ (?:^|\.)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$ (?:^|\.)newipnow\.com$ (?:^|\.)newlandmagazine\.com\.au$ (?:^|\.)newnews\.ca$ (?:^|\.)news\.cnyes\.com$ (?:^|\.)news\.hk\.msn\.com$ (?:^|\.)news\.hkpeanut\.com$ (?:^|\.)news\.msn\.com\.tw$ (?:^|\.)news\.nationalgeographic\.com$ (?:^|\.)news\.now\.com$ (?:^|\.)news\.now\.com%2fhome$ (?:^|\.)news\.omy\.sg$ (?:^|\.)news\.seehua\.com$ (?:^|\.)news\.sina\.com\.hk$ (?:^|\.)news\.sina\.com\.tw$ (?:^|\.)news\.sinchew\.com\.my$ (?:^|\.)news\.singtao\.ca$ (?:^|\.)news\.tvb\.com$ (?:^|\.)news\.tvbs\.com\.tw$ (?:^|\.)news\.yahoo\.com$ (?:^|\.)news100\.com\.tw$ (?:^|\.)newsancai\.com$ (?:^|\.)newschinacomment\.org$ (?:^|\.)newscn\.org$ (?:^|\.)newsdetox\.ca$ (?:^|\.)newsdh\.com$ (?:^|\.)newspeak\.cc$ (?:^|\.)newstamago\.com$ (?:^|\.)newstapa\.org$ (?:^|\.)newstarnet\.com$ (?:^|\.)newtaiwan\.com\.tw$ (?:^|\.)newtalk\.tw$ (?:^|\.)newyorktimes\.com$ (?:^|\.)nexon\.com$ (?:^|\.)next11\.co\.jp$ (?:^|\.)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$ (?:^|\.)nga\.mil$ (?:^|\.)ngensis\.com$ (?:^|\.)nhentai\.net$ (?:^|\.)nhi\.gov\.tw$ (?:^|\.)nhk-ondemand\.jp$ (?:^|\.)nic\.cz\.cc$ (?:^|\.)nic\.google$ (?:^|\.)nic\.gov$ (?:^|\.)nicovideo\.jp$ (?:^|\.)nighost\.org$ (?:^|\.)nikkei\.com$ (?:^|\.)ninecommentaries\.com$ (?:^|\.)ninjacloak\.com$ (?:^|\.)ninjaproxy\.ninja$ (?:^|\.)nintendium\.com$ (?:^|\.)ninth\.biz$ (?:^|\.)niu\.moe$ (?:^|\.)niusnews\.com$ (?:^|\.)njactb\.org$ (?:^|\.)njuice\.com$ (?:^|\.)nko\.navy\.mil$ (?:^|\.)nlfreevpn\.com$ (?:^|\.)no-ip\.org$ (?:^|\.)nobel\.se$ (?:^|\.)nobelprize\.org$ (?:^|\.)nobodycanstop\.us$ (?:^|\.)nofile\.io$ (?:^|\.)nokogiri\.org$ (?:^|\.)nokola\.com$ (?:^|\.)noodlevpn\.com$ (?:^|\.)norbulingka\.org$ (?:^|\.)nordstrom\.com$ (?:^|\.)nordstromimage\.com$ (?:^|\.)nordstromrack\.com$ (?:^|\.)nordvpn\.com$ (?:^|\.)notify\.dropboxapi\.com$ (?:^|\.)nottinghampost\.com$ (?:^|\.)novelasia\.com$ (?:^|\.)now\.com$ (?:^|\.)now\.im$ (?:^|\.)nownews\.com$ (?:^|\.)nowtorrents\.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\.cz$ (?:^|\.)ntdtv\.org$ (?:^|\.)ntdtv\.ru$ (?:^|\.)ntdtvla\.com$ (?:^|\.)ntrfun\.com$ (?:^|\.)ntsna\.gov\.tw$ (?:^|\.)nubiles\.net$ (?:^|\.)nuexpo\.com$ (?:^|\.)nukistream\.com$ (?:^|\.)nurgo-software\.com$ (?:^|\.)nusatrip\.com$ (?:^|\.)nutaku\.net$ (?:^|\.)nuuvem\.com$ (?:^|\.)nuvid\.com$ (?:^|\.)nuzcom\.com$ (?:^|\.)nvdst\.com$ (?:^|\.)nvquan\.org$ (?:^|\.)nvtongzhisheng\.org$ (?:^|\.)nwtca\.org$ (?:^|\.)ny\.stgloballink\.com$ (?:^|\.)ny\.visiontimes\.com$ (?:^|\.)nyaa\.eu$ (?:^|\.)nydus\.ca$ (?:^|\.)nylon-angel\.com$ (?:^|\.)nylonstockingsonline\.com$ (?:^|\.)nyt\.com$ (?:^|\.)nytchina\.com$ (?:^|\.)nytcn\.me$ (?:^|\.)nytco\.com$ (?:^|\.)nyti\.ms$ (?:^|\.)nytimes\.com$ (?:^|\.)nytimes\.map\.fastly\.net$ (?:^|\.)nytimg\.com$ (?:^|\.)nytstyle\.com$ (?:^|\.)nzchinese\.com$ (?:^|\.)nzchinese\.net\.nz$ (?:^|\.)observechina\.net$ (?:^|\.)obutu\.com$ (?:^|\.)ocaspro\.com$ (?:^|\.)occupytiananmen\.com$ (?:^|\.)oclp\.hk$ (?:^|\.)ocreampies\.com$ (?:^|\.)ocry\.com$ (?:^|\.)october-review\.org$ (?:^|\.)oculus\.com$ (?:^|\.)oculuscdn\.com$ (?:^|\.)oex\.com$ (?:^|\.)offbeatchina\.com$ (?:^|\.)officeoftibet\.com$ (?:^|\.)ofile\.org$ (?:^|\.)ogaoga\.org$ (?:^|\.)ogate\.org$ (?:^|\.)oikos\.com\.tw$ (?:^|\.)oiktv\.com$ (?:^|\.)oizoblog\.com$ (?:^|\.)ok\.ru$ (?:^|\.)okayfreedom\.com$ (?:^|\.)okex\.com$ (?:^|\.)okk\.tw$ (?:^|\.)old-cat\.net$ (?:^|\.)old\.honeynet\.org$ (?:^|\.)old\.nabble\.com$ (?:^|\.)olumpo\.com$ (?:^|\.)olympicwatch\.org$ (?:^|\.)omgili\.com$ (?:^|\.)omni7\.jp$ (?:^|\.)omnitalk\.com$ (?:^|\.)omnitalk\.org$ (?:^|\.)on\.cc$ (?:^|\.)on2\.com$ (?:^|\.)onapp\.com$ (?:^|\.)onedrive\.live\.com$ (?:^|\.)onedumb\.com$ (?:^|\.)onejav\.com$ (?:^|\.)onion\.city$ (?:^|\.)online\.recoveryversion\.org$ (?:^|\.)onlinecha\.com$ (?:^|\.)onlineyoutube\.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$ (?:^|\.)openvpn\.net$ (?:^|\.)openvpn\.org$ (?:^|\.)openwebster\.com$ (?:^|\.)openwrt\.org\.cn$ (?:^|\.)opml\.radiotime\.com$ (?:^|\.)opus-gaming\.com$ (?:^|\.)organcare\.org\.tw$ (?:^|\.)organharvestinvestigation\.net$ (?:^|\.)organiccrap\.com$ (?:^|\.)orgasm\.com$ (?:^|\.)orgfree\.com$ (?:^|\.)orient-doll\.com$ (?:^|\.)orientaldaily\.com\.my$ (?:^|\.)orn\.jp$ (?:^|\.)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$ (?:^|\.)overplay\.net$ (?:^|\.)oversea\.istarshine\.com$ (?:^|\.)ow\.ly$ (?:^|\.)owl\.li$ (?:^|\.)oyax\.com$ (?:^|\.)oyghan\.com$ (?:^|\.)ozchinese\.com$ (?:^|\.)ozvoice\.org$ (?:^|\.)ozxw\.com$ (?:^|\.)ozyoyo\.com$ (?:^|\.)pachosting\.com$ (?:^|\.)pacificpoker\.com$ (?:^|\.)packages\.debian\.org$ (?:^|\.)packetix\.net$ (?:^|\.)pacopacomama\.com$ (?:^|\.)padmanet\.com$ (?:^|\.)page\.bid\.yahoo\.com$ (?:^|\.)page2rss\.com$ (?:^|\.)pagodabox\.com$ (?:^|\.)palacemoon\.com$ (?:^|\.)paldengyal\.com$ (?:^|\.)paljorpublications\.com$ (?:^|\.)paltalk\.com$ (?:^|\.)panamapapers\.sueddeutsche\.de$ (?:^|\.)pandapow\.co$ (?:^|\.)pandapow\.net$ (?:^|\.)pandavpn-jp\.com$ (?:^|\.)pandora\.com$ (?:^|\.)pandora\.tv$ (?:^|\.)panluan\.net$ (?:^|\.)panoramio\.com$ (?:^|\.)pao-pao\.net$ (?:^|\.)paper\.li$ (?:^|\.)paperb\.us$ (?:^|\.)paradisehill\.cc$ (?:^|\.)paradisepoker\.com$ (?:^|\.)parkansky\.com$ (?:^|\.)partycasino\.com$ (?:^|\.)partypoker\.com$ (?:^|\.)passion\.com$ (?:^|\.)passiontimes\.hk$ (?:^|\.)paste\.ee$ (?:^|\.)pastebin\.com$ (?:^|\.)pastie\.org$ (?:^|\.)pbs\.org$ (?:^|\.)pbwiki\.com$ (?:^|\.)pbworks\.com$ (?:^|\.)pbxes\.com$ (?:^|\.)pbxes\.org$ (?:^|\.)pcanywhere\.net$ (?:^|\.)pcc\.gov\.tw$ (?:^|\.)pcdvd\.com\.tw$ (?:^|\.)pchome\.com\.tw$ (?:^|\.)pcij\.org$ (?:^|\.)pcstore\.com\.tw$ (?:^|\.)pct\.org\.tw$ (?:^|\.)pdetails\.com$ (?:^|\.)pdproxy\.com$ (?:^|\.)pds\.nasa\.gov$ (?:^|\.)peace\.ca$ (?:^|\.)peacefire\.org$ (?:^|\.)peacehall\.com$ (?:^|\.)pearlher\.org$ (?:^|\.)peeasian\.com$ (?:^|\.)pekingduck\.org$ (?:^|\.)pemulihan\.or\.id$ (?:^|\.)pen\.io$ (?:^|\.)penchinese\.com$ (?:^|\.)penchinese\.net$ (?:^|\.)pengyulong\.com$ (?:^|\.)penisbot\.com$ (?:^|\.)penthouse\.com$ (?:^|\.)pentoy\.hk$ (?:^|\.)peoplebookcafe\.com$ (?:^|\.)peoplenews\.tw$ (?:^|\.)peopo\.org$ (?:^|\.)percy\.in$ (?:^|\.)perfectgirls\.net$ (?:^|\.)perfectvpn\.net$ (?:^|\.)periscope\.tv$ (?:^|\.)persecutionblog\.com$ (?:^|\.)persiankitty\.com$ (?:^|\.)pfd\.org\.hk$ (?:^|\.)phapluan\.org$ (?:^|\.)phayul\.com$ (?:^|\.)philborges\.com$ (?:^|\.)philly\.com$ (?:^|\.)phmsociety\.org$ (?:^|\.)phncdn\.com$ (?:^|\.)phobos\.apple\.com$ (?:^|\.)phosphation13\.rssing\.com$ (?:^|\.)photodharma\.net$ (?:^|\.)photofocus\.com$ (?:^|\.)phuquocservices\.com$ (?:^|\.)picacomic\.com$ (?:^|\.)picacomiccn\.com$ (?:^|\.)picasaweb\.com$ (?:^|\.)picidae\.net$ (?:^|\.)pictures\.playboy\.com$ (?:^|\.)picturesocial\.com$ (?:^|\.)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\.de$ (?:^|\.)pinterest\.dk$ (?:^|\.)pinterest\.fr$ (?:^|\.)pinterest\.jp$ (?:^|\.)pinterest\.nl$ (?:^|\.)pinterest\.se$ (?:^|\.)pioneer-worker\.forums-free\.com$ (?:^|\.)pipii\.tv$ (?:^|\.)piposay\.com$ (?:^|\.)piraattilahti\.org$ (?:^|\.)piring\.com$ (?:^|\.)pixelqi\.com$ (?:^|\.)pixiv\.net$ (?:^|\.)pixnet\.net$ (?:^|\.)pk\.com$ (?:^|\.)pki\.goog$ (?:^|\.)placemix\.com$ (?:^|\.)playboy\.com$ (?:^|\.)playboyplus\.com$ (?:^|\.)player\.fm$ (?:^|\.)playno1\.com$ (?:^|\.)playpcesor\.com$ (?:^|\.)plays\.com\.tw$ (?:^|\.)plm\.org\.hk$ (?:^|\.)plunder\.com$ (?:^|\.)plurk\.com$ (?:^|\.)plus\.codes$ (?:^|\.)plus28\.com$ (?:^|\.)plusbb\.com$ (?:^|\.)pmatehunter\.com$ (?:^|\.)pmates\.com$ (?:^|\.)po2b\.com$ (?:^|\.)pobieramy\.top$ (?:^|\.)podictionary\.com$ (?:^|\.)pokerstars\.com$ (?:^|\.)pokerstars\.net$ (?:^|\.)politicalchina\.org$ (?:^|\.)politicalconsultation\.org$ (?:^|\.)politiscales\.net$ (?:^|\.)poloniex\.com$ (?:^|\.)polymer-project\.org$ (?:^|\.)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$ (?:^|\.)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$ (?:^|\.)prayforchina\.net$ (?:^|\.)premeforwindows7\.com$ (?:^|\.)premproxy\.com$ (?:^|\.)presentationzen\.com$ (?:^|\.)presidentlee\.tw$ (?:^|\.)prestige-av\.com$ (?:^|\.)pride\.google$ (?:^|\.)prism-break\.org$ (?:^|\.)prisoner-state-secret-journal-premier$ (?:^|\.)prisoneralert\.com$ (?:^|\.)pritunl\.com$ (?:^|\.)privacybox\.de$ (?:^|\.)private\.com$ (?:^|\.)privateinternetaccess\.com$ (?:^|\.)privatepaste\.com$ (?:^|\.)privatetunnel\.com$ (?:^|\.)privatevpn\.com$ (?:^|\.)procopytips\.com$ (?:^|\.)prosiben\.de$ (?:^|\.)protonvpn\.com$ (?:^|\.)provideocoalition\.com$ (?:^|\.)provpnaccounts\.com$ (?:^|\.)proxfree\.com$ (?:^|\.)proxifier\.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$ (?:^|\.)psiphon\.ca$ (?:^|\.)psiphon\.civisec\.org$ (?:^|\.)psiphon3\.com$ (?:^|\.)psiphontoday\.com$ (?:^|\.)pts\.org\.tw$ (?:^|\.)ptt\.cc$ (?:^|\.)pttvan\.org$ (?:^|\.)pubu\.com\.tw$ (?:^|\.)puffinbrowser\.com$ (?:^|\.)puffstore\.com$ (?:^|\.)pullfolio\.com$ (?:^|\.)pulse\.yahoo\.com$ (?:^|\.)punyu\.com$ (?:^|\.)pure18\.com$ (?:^|\.)pureconcepts\.net$ (?:^|\.)pureinsight\.org$ (?:^|\.)purepdf\.com$ (?:^|\.)purevpn\.com$ (?:^|\.)purplelotus\.org$ (?:^|\.)pursuestar\.com$ (?:^|\.)pushchinawall\.com$ (?:^|\.)pussyspace\.com$ (?:^|\.)putihome\.org$ (?:^|\.)putlocker\.com$ (?:^|\.)putty\.org$ (?:^|\.)puuko\.com$ (?:^|\.)pwned\.com$ (?:^|\.)python\.com$ (?:^|\.)python\.com\.tw$ (?:^|\.)pythonhackers\.com$ (?:^|\.)pytorch\.org$ (?:^|\.)q%3dfreedom$ (?:^|\.)q%3dtriangle$ (?:^|\.)q=freedom$ (?:^|\.)q=triangle$ (?:^|\.)qanote\.com$ (?:^|\.)qgirl\.com\.tw$ (?:^|\.)qhigh\.com$ (?:^|\.)qi-gong\.me$ (?:^|\.)qiandao\.today$ (?:^|\.)qiangyou\.org$ (?:^|\.)qidian\.ca$ (?:^|\.)qienkuen\.org$ (?:^|\.)qiwen\.lu$ (?:^|\.)qixianglu\.cn$ (?:^|\.)qkshare\.com$ (?:^|\.)qoos\.com$ (?:^|\.)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$ (?:^|\.)qxbbs\.org$ (?:^|\.)r18\.com$ (?:^|\.)ra\.gg$ (?:^|\.)radicalparty\.org$ (?:^|\.)radiko\.jp$ (?:^|\.)radioaustralia\.net\.au$ (?:^|\.)radiohilight\.net$ (?:^|\.)radiovaticana\.org$ (?:^|\.)radiovncr\.com$ (?:^|\.)rael\.org$ (?:^|\.)raggedbanner\.com$ (?:^|\.)raidcall\.com\.tw$ (?:^|\.)raidtalk\.com\.tw$ (?:^|\.)rainbowplan\.org$ (?:^|\.)raizoji\.or\.jp$ (?:^|\.)ramcity\.com\.au$ (?:^|\.)rangwang\.biz$ (?:^|\.)rangzen\.com$ (?:^|\.)rangzen\.net$ (?:^|\.)rangzen\.org$ (?:^|\.)ranyunfei\.com$ (?:^|\.)rapbull\.net$ (?:^|\.)rapidgator\.net$ (?:^|\.)rapidmoviez\.com$ (?:^|\.)rapidvpn\.com$ (?:^|\.)raremovie\.cc$ (?:^|\.)raremovie\.net$ (?:^|\.)rawgit\.com$ (?:^|\.)rawgithub\.com$ (?:^|\.)razyboard\.com$ (?:^|\.)rcam\.target\.com$ (?:^|\.)rcinet\.ca$ (?:^|\.)rconversation\.blogs\.com$ (?:^|\.)rd\.com$ (?:^|\.)rdio\.com$ (?:^|\.)read01\.com$ (?:^|\.)read100\.com$ (?:^|\.)readingtimes\.com\.tw$ (?:^|\.)readmoo\.com$ (?:^|\.)readydown\.com$ (?:^|\.)realcourage\.org$ (?:^|\.)realforum\.zkiz\.com$ (?:^|\.)realitykings\.com$ (?:^|\.)realraptalk\.com$ (?:^|\.)realsexpass\.com$ (?:^|\.)rebatesrule\.net$ (?:^|\.)recordhistory\.org$ (?:^|\.)recovery\.org\.tw$ (?:^|\.)recoveryversion\.com\.tw$ (?:^|\.)red-lang\.org$ (?:^|\.)redballoonsolidarity\.org$ (?:^|\.)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$ (?:^|\.)religioustolerance\.org$ (?:^|\.)remembering_tiananmen_20_years$ (?:^|\.)renminbao\.com$ (?:^|\.)renyurenquan\.org$ (?:^|\.)research\.jmsc\.hku\.hk$ (?:^|\.)resilio\.com$ (?:^|\.)retweeteffect\.com$ (?:^|\.)retweetist\.com$ (?:^|\.)retweetrank\.com$ (?:^|\.)reuters\.com$ (?:^|\.)reutersmedia\.net$ (?:^|\.)revleft\.com$ (?:^|\.)revver\.com$ (?:^|\.)rfa\.org$ (?:^|\.)rfachina\.com$ (?:^|\.)rfalive1\.akacast\.akamaistream\.net$ (?:^|\.)rfamobile\.org$ (?:^|\.)rfaweb\.org$ (?:^|\.)rferl\.org$ (?:^|\.)rfi\.fr$ (?:^|\.)rfi\.my$ (?:^|\.)rg3\.github\.io$ (?:^|\.)rightbtc\.com$ (?:^|\.)rigpa\.org$ (?:^|\.)riku\.me$ (?:^|\.)rileyguide\.com$ (?:^|\.)ritouki\.jp$ (?:^|\.)ritter\.vg$ (?:^|\.)rixcloud\.com$ (?:^|\.)rixcloud\.us$ (?:^|\.)rlwlw\.com$ (?:^|\.)rmjdw\.com$ (?:^|\.)rmjdw132\.info$ (?:^|\.)roadshow\.hk$ (?:^|\.)roboforex\.com$ (?:^|\.)robustnessiskey\.com$ (?:^|\.)rocket-inc\.net$ (?:^|\.)rocksdb\.org$ (?:^|\.)rojo\.com$ (?:^|\.)rolia\.net$ (?:^|\.)ronjoneswriter\.com$ (?:^|\.)roodo\.com$ (?:^|\.)rosechina\.net$ (?:^|\.)rotten\.com$ (?:^|\.)rsdlmonitor\.com$ (?:^|\.)rsf-chinese\.org$ (?:^|\.)rsf\.org$ (?:^|\.)rsgamen\.org$ (?:^|\.)rssmeme\.com$ (?:^|\.)rtalabel\.org$ (?:^|\.)rthk\.hk$ (?:^|\.)rthk\.org\.hk$ (?:^|\.)rthklive2-lh\.akamaihd\.net$ (?:^|\.)rti\.org\.tw$ (?:^|\.)rtycminnesota\.org$ (?:^|\.)ruanyifeng\.com$ (?:^|\.)rukor\.org$ (?:^|\.)runbtx\.com$ (?:^|\.)rushbee\.com$ (?:^|\.)ruten\.com\.tw$ (?:^|\.)rutube\.ru$ (?:^|\.)ruyiseek\.com$ (?:^|\.)rxhj\.net$ (?:^|\.)s-cute\.com$ (?:^|\.)s-dragon\.org$ (?:^|\.)s1\.nudezz\.com$ (?:^|\.)s1heng\.com$ (?:^|\.)s1s1s1\.com$ (?:^|\.)s3-ap-northeast-1\.amazonaws\.com$ (?:^|\.)s3-ap-southeast-2\.amazonaws\.com$ (?:^|\.)s8forum\.com$ (?:^|\.)sa\.hao123\.com$ (?:^|\.)sacks\.com$ (?:^|\.)sacom\.hk$ (?:^|\.)sadistic-v\.com$ (?:^|\.)sadpanda\.us$ (?:^|\.)safervpn\.com$ (?:^|\.)safety\.google$ (?:^|\.)saintyculture\.com$ (?:^|\.)saiq\.me$ (?:^|\.)sakuralive\.com$ (?:^|\.)sakya\.org$ (?:^|\.)salvation\.org\.hk$ (?:^|\.)samair\.ru$ (?:^|\.)sambhota\.org$ (?:^|\.)sanmin\.com\.tw$ (?:^|\.)sapikachu\.net$ (?:^|\.)saveliuxiaobo\.com$ (?:^|\.)savemedia\.com$ (?:^|\.)savethedate\.foo$ (?:^|\.)savethesounds\.info$ (?:^|\.)savetibet\.de$ (?:^|\.)savetibet\.fr$ (?:^|\.)savetibet\.nl$ (?:^|\.)savetibet\.org$ (?:^|\.)savetibet\.ru$ (?:^|\.)savetibetstore\.org$ (?:^|\.)savevid\.com$ (?:^|\.)say2\.info$ (?:^|\.)sbme\.me$ (?:^|\.)sbs\.com\.au$ (?:^|\.)scache\.vzw\.com$ (?:^|\.)scache1\.vzw\.com$ (?:^|\.)scache2\.vzw\.com$ (?:^|\.)scasino\.com$ (?:^|\.)schema\.org$ (?:^|\.)sciencenets\.com$ (?:^|\.)scieron\.com$ (?:^|\.)scmp\.com$ (?:^|\.)scmpchinese\.com$ (?:^|\.)scramble\.io$ (?:^|\.)scribd\.com$ (?:^|\.)scriptspot\.com$ (?:^|\.)seapuff\.com$ (?:^|\.)search$ (?:^|\.)search\.aol\.com$ (?:^|\.)search\.yahoo\.co\.jp$ (?:^|\.)search\.yahoo\.com$ (?:^|\.)searchtruth\.com$ (?:^|\.)secretchina\.com$ (?:^|\.)secretgarden\.no$ (?:^|\.)secretsline\.biz$ (?:^|\.)secure\.hustler\.com$ (?:^|\.)secure\.logmein\.com$ (?:^|\.)secure\.raxcdn\.com$ (?:^|\.)securetunnel\.com$ (?:^|\.)securityinabox\.org$ (?:^|\.)securitykiss\.com$ (?:^|\.)seed4\.me$ (?:^|\.)seesmic\.com$ (?:^|\.)seevpn\.com$ (?:^|\.)seezone\.net$ (?:^|\.)sejie\.com$ (?:^|\.)sellclassics\.com$ (?:^|\.)sendsmtp\.com$ (?:^|\.)sendspace\.com$ (?:^|\.)servehttp\.com$ (?:^|\.)serveuser\.com$ (?:^|\.)serveusers\.com$ (?:^|\.)sesawe\.net$ (?:^|\.)sesawe\.org$ (?:^|\.)sethwklein\.net$ (?:^|\.)setn\.com$ (?:^|\.)settv\.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$ (?:^|\.)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$ (?:^|\.)shambalapost\.com$ (?:^|\.)shambhalasun\.com$ (?:^|\.)shangfang\.org$ (?:^|\.)shapeservices\.com$ (?:^|\.)share\.america\.gov$ (?:^|\.)share\.dmhy\.org$ (?:^|\.)share\.ovi\.com$ (?:^|\.)share\.youthwant\.com\.tw$ (?:^|\.)sharebee\.com$ (?:^|\.)sharecool\.org$ (?:^|\.)sharpdaily\.com\.hk$ (?:^|\.)sharpdaily\.hk$ (?:^|\.)sharpdaily\.tw$ (?:^|\.)shat-tibet\.com$ (?:^|\.)shattered\.io$ (?:^|\.)sheikyermami\.com$ (?:^|\.)shellfire\.de$ (?:^|\.)shenshou\.org$ (?:^|\.)shenyun\.com$ (?:^|\.)shenyunperformingarts\.org$ (?:^|\.)shenzhoufilm\.com$ (?:^|\.)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$ (?:^|\.)shopping\.com$ (?:^|\.)showbiz\.omy\.sg$ (?:^|\.)showhaotu\.com$ (?:^|\.)showtime\.jp$ (?:^|\.)shutterstock\.com$ (?:^|\.)shwchurch\.org$ (?:^|\.)shwchurch3\.com$ (?:^|\.)siddharthasintent\.org$ (?:^|\.)sidelinesnews\.com$ (?:^|\.)sidelinessportseatery\.com$ (?:^|\.)sierrafriendsoftibet\.org$ (?:^|\.)sijihuisuo\.club$ (?:^|\.)sijihuisuo\.com$ (?:^|\.)sikaozhe1997\.github\.io$ (?:^|\.)silkbook\.com$ (?:^|\.)simbolostwitter\.com$ (?:^|\.)simplecd\.org$ (?:^|\.)simpleproductivityblog\.com$ (?:^|\.)sinchew\.com\.my$ (?:^|\.)singaporepools\.com\.sg$ (?:^|\.)singfortibet\.com$ (?:^|\.)singpao\.com\.hk$ (?:^|\.)singtao\.com$ (?:^|\.)singtaousa\.com$ (?:^|\.)sino-monthly\.com$ (?:^|\.)sinoants\.com$ (?:^|\.)sinocast\.com$ (?:^|\.)sinocism\.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$ (?:^|\.)siteks\.uk\.to$ (?:^|\.)sitemaps\.org$ (?:^|\.)six-degrees\.io$ (?:^|\.)sixth\.biz$ (?:^|\.)sjrt\.org$ (?:^|\.)sjum\.cn$ (?:^|\.)sketchappsources\.com$ (?:^|\.)skimtube\.com$ (?:^|\.)skybet\.com$ (?:^|\.)skyking\.com\.tw$ (?:^|\.)skyvegas\.com$ (?:^|\.)skyxvpn\.com$ (?:^|\.)slacker\.com$ (?:^|\.)slaytizle\.com$ (?:^|\.)sleazydream\.com$ (?:^|\.)slheng\.com$ (?:^|\.)slickvpn\.com$ (?:^|\.)slideshare\.net$ (?:^|\.)slinkset\.com$ (?:^|\.)slutload\.com$ (?:^|\.)slutmoonbeam\.com$ (?:^|\.)slyip\.com$ (?:^|\.)slyip\.net$ (?:^|\.)sm-miracle\.com$ (?:^|\.)smartdnsproxy\.com$ (?:^|\.)smarthide\.com$ (?:^|\.)smchbooks\.com$ (?:^|\.)smh\.com\.au$ (?:^|\.)smhric\.org$ (?:^|\.)smith\.edu$ (?:^|\.)smyxy\.org$ (?:^|\.)snapchat\.com$ (?:^|\.)snaptu\.com$ (?:^|\.)sndcdn\.com$ (?:^|\.)sneakme\.net$ (?:^|\.)snowlionpub\.com$ (?:^|\.)sobees\.com$ (?:^|\.)soc\.mil$ (?:^|\.)socialwhale\.com$ (?:^|\.)socks-proxy\.net$ (?:^|\.)sockscap64\.com$ (?:^|\.)sockslist\.net$ (?:^|\.)socrec\.org$ (?:^|\.)sod\.co\.jp$ (?:^|\.)sodatea\.github\.io$ (?:^|\.)softether-download\.com$ (?:^|\.)softether\.co\.jp$ (?:^|\.)softether\.org$ (?:^|\.)softfamous\.com$ (?:^|\.)softsmirror\.cf$ (?:^|\.)softwarebychuck\.com$ (?:^|\.)softwaredownload\.gitbooks\.io$ (?:^|\.)sogclub\.com$ (?:^|\.)sogrady\.me$ (?:^|\.)soh\.tw$ (?:^|\.)sohcradio\.com$ (?:^|\.)sohfrance\.org$ (?:^|\.)sokamonline\.com$ (?:^|\.)sokmil\.com$ (?:^|\.)solarsystem\.nasa\.gov$ (?:^|\.)solidaritetibet\.org$ (?:^|\.)solidfiles\.com$ (?:^|\.)somee\.com$ (?:^|\.)songjianjun\.com$ (?:^|\.)sonicbbs\.cc$ (?:^|\.)sonidodelaesperanza\.org$ (?:^|\.)sopcast\.com$ (?:^|\.)sopcast\.org$ (?:^|\.)sorazone\.net$ (?:^|\.)sorting-algorithms\.com$ (?:^|\.)sos\.org$ (?:^|\.)sosreader\.com$ (?:^|\.)sostibet\.org$ (?:^|\.)soubory\.com$ (?:^|\.)soul-plus\.net$ (?:^|\.)soulcaliburhentai\.net$ (?:^|\.)soumo\.info$ (?:^|\.)soundcloud\.com$ (?:^|\.)soundofhope\.kr$ (?:^|\.)soundofhope\.org$ (?:^|\.)soup\.io$ (?:^|\.)soupofmedia\.com$ (?:^|\.)sourceforge\.net$ (?:^|\.)sourcewadio\.com$ (?:^|\.)southnews\.com\.tw$ (?:^|\.)sowers\.org\.hk$ (?:^|\.)soylentnews\.org$ (?:^|\.)spaces\.hightail\.com$ (?:^|\.)spankbang\.com$ (?:^|\.)spankingtube\.com$ (?:^|\.)spankwire\.com$ (?:^|\.)spb\.com$ (?:^|\.)speakerdeck\.com$ (?:^|\.)specxinzl\.jigsy\.com$ (?:^|\.)speedify\.com$ (?:^|\.)spem\.at$ (?:^|\.)spencertipping\.com$ (?:^|\.)spendee\.com$ (?:^|\.)spicevpn\.com$ (?:^|\.)spideroak\.com$ (?:^|\.)spike\.com$ (?:^|\.)sports\.williamhill\.com$ (?:^|\.)spotflux\.com$ (?:^|\.)spotify\.com$ (?:^|\.)spreadshirt\.es$ (?:^|\.)spring4u\.info$ (?:^|\.)springboardplatform\.com$ (?:^|\.)sprite\.org$ (?:^|\.)sproutcore\.com$ (?:^|\.)sproxy\.info$ (?:^|\.)squirly\.info$ (?:^|\.)srcf\.ucam\.org$ (?:^|\.)srocket\.us$ (?:^|\.)ss-link\.com$ (?:^|\.)ss\.carryzhou\.com$ (?:^|\.)ss\.levyhsu\.com$ (?:^|\.)ss\.pythonic\.life$ (?:^|\.)ss7\.vzw\.com$ (?:^|\.)ssglobal\.co$ (?:^|\.)ssglobal\.me$ (?:^|\.)ssh91\.com$ (?:^|\.)ssl\.webpack\.de$ (?:^|\.)ssl443\.org$ (?:^|\.)sspanel\.net$ (?:^|\.)sspro\.ml$ (?:^|\.)ssr\.tools$ (?:^|\.)ssrshare\.com$ (?:^|\.)sss\.camp$ (?:^|\.)sstmlt\.moe$ (?:^|\.)sstmlt\.net$ (?:^|\.)stackoverflow\.com$ (?:^|\.)stage64\.hk$ (?:^|\.)standupfortibet\.org$ (?:^|\.)stanford\.edu$ (?:^|\.)starfishfx\.com$ (?:^|\.)starp2p\.com$ (?:^|\.)startpage\.com$ (?:^|\.)startuplivingchina\.com$ (?:^|\.)stat\.gov\.tw$ (?:^|\.)static-economist\.com$ (?:^|\.)static\.comico\.tw$ (?:^|\.)static\.shemalez\.com$ (?:^|\.)static01\.nyt\.com$ (?:^|\.)staticflickr\.com$ (?:^|\.)statueofdemocracy\.org$ (?:^|\.)stc\.com\.sa$ (?:^|\.)steamcommunity\.com$ (?:^|\.)steel-storm\.com$ (?:^|\.)steemit\.com$ (?:^|\.)steganos\.com$ (?:^|\.)steganos\.net$ (?:^|\.)stepchina\.com$ (?:^|\.)stephaniered\.com$ (?:^|\.)sthoo\.com$ (?:^|\.)stickam\.com$ (?:^|\.)stickeraction\.com$ (?:^|\.)stileproject\.com$ (?:^|\.)sto\.cc$ (?:^|\.)stoporganharvesting\.org$ (?:^|\.)stoptibetcrisis\.net$ (?:^|\.)storagenewsletter\.com$ (?:^|\.)store\.steampowered\.com$ (?:^|\.)stories\.google$ (?:^|\.)storify\.com$ (?:^|\.)storm\.mg$ (?:^|\.)stormmediagroup\.com$ (?:^|\.)stoweboyd\.com$ (?:^|\.)stranabg\.com$ (?:^|\.)straplessdildo\.com$ (?:^|\.)streamingthe\.net$ (?:^|\.)streema\.com$ (?:^|\.)strikingly\.com$ (?:^|\.)strongvpn\.com$ (?:^|\.)strongwindpress\.com$ (?:^|\.)student\.tw$ (?:^|\.)studentsforafreetibet\.org$ (?:^|\.)stumbleupon\.com$ (?:^|\.)stupidvideos\.com$ (?:^|\.)subacme\.rerouted\.org$ (?:^|\.)successfn\.com$ (?:^|\.)sugarsync\.com$ (?:^|\.)sugobbs\.com$ (?:^|\.)sugumiru18\.com$ (?:^|\.)suissl\.com$ (?:^|\.)sujiatun\.wordpress\.com$ (?:^|\.)sukebei\.nyaa\.si$ (?:^|\.)sulian\.me$ (?:^|\.)summify\.com$ (?:^|\.)sumrando\.com$ (?:^|\.)sun1911\.com$ (?:^|\.)sunmedia\.ca$ (?:^|\.)sunporno\.com$ (?:^|\.)sunskyforum\.com$ (?:^|\.)sunta\.com\.tw$ (?:^|\.)sunvpn\.net$ (?:^|\.)sunwinism\.joinbbs\.net$ (?:^|\.)suoluo\.org$ (?:^|\.)supchina\.com$ (?:^|\.)superfreevpn\.com$ (?:^|\.)superokayama\.com$ (?:^|\.)superpages\.com$ (?:^|\.)supervpn\.net$ (?:^|\.)superzooi\.com$ (?:^|\.)suppig\.net$ (?:^|\.)suprememastertv\.com$ (?:^|\.)surfeasy\.com$ (?:^|\.)surfeasy\.com\.au$ (?:^|\.)suroot\.com$ (?:^|\.)surrenderat20\.net$ (?:^|\.)sustainability\.google$ (?:^|\.)suyangg\.com$ (?:^|\.)svsfx\.com$ (?:^|\.)swagbucks\.com$ (?:^|\.)swissinfo\.ch$ (?:^|\.)swissvpn\.net$ (?:^|\.)switch1\.jp$ (?:^|\.)switchvpn\.net$ (?:^|\.)sydneytoday\.com$ (?:^|\.)sylfoundation\.org$ (?:^|\.)syncback\.com$ (?:^|\.)synergyse\.com$ (?:^|\.)sysresccd\.org$ (?:^|\.)sytes\.net$ (?:^|\.)szbbs\.net$ (?:^|\.)szetowah\.org\.hk$ (?:^|\.)t-g\.com$ (?:^|\.)t\.co$ (?:^|\.)t\.me$ (?:^|\.)t\.orzdream\.com$ (?:^|\.)t35\.com$ (?:^|\.)t66y\.com$ (?:^|\.)taa-usa\.org$ (?:^|\.)taaze\.tw$ (?:^|\.)tabtter\.jp$ (?:^|\.)tacc\.cwb\.gov\.tw$ (?:^|\.)tacem\.org$ (?:^|\.)taconet\.com\.tw$ (?:^|\.)taedp\.org\.tw$ (?:^|\.)tafm\.org$ (?:^|\.)tagwa\.org\.au$ (?:^|\.)tagwalk\.com$ (?:^|\.)tahr\.org\.tw$ (?:^|\.)taipei\.gov\.tw$ (?:^|\.)taipeisociety\.org$ (?:^|\.)taiwan-sex\.com$ (?:^|\.)taiwanbible\.com$ (?:^|\.)taiwancon\.com$ (?:^|\.)taiwandaily\.net$ (?:^|\.)taiwandc\.org$ (?:^|\.)taiwanjobs\.gov\.tw$ (?:^|\.)taiwanjustice\.com$ (?:^|\.)taiwanjustice\.net$ (?:^|\.)taiwankiss\.com$ (?:^|\.)taiwannation\.50webs\.com$ (?:^|\.)taiwannation\.com$ (?:^|\.)taiwannation\.com\.tw$ (?:^|\.)taiwanncf\.org\.tw$ (?:^|\.)taiwannews\.com\.tw$ (?:^|\.)taiwantp\.net$ (?:^|\.)taiwantt\.org\.tw$ (?:^|\.)taiwanus\.net$ (?:^|\.)taiwanyes\.com$ (?:^|\.)taiwanyes\.ning\.com$ (?:^|\.)talk853\.com$ (?:^|\.)talkboxapp\.com$ (?:^|\.)talkcc\.com$ (?:^|\.)talkonly\.net$ (?:^|\.)tamiaode\.tk$ (?:^|\.)tanc\.org$ (?:^|\.)tangben\.com$ (?:^|\.)tangren\.us$ (?:^|\.)taoism\.net$ (?:^|\.)taolun\.info$ (?:^|\.)tapanwap\.com$ (?:^|\.)tapatalk\.com$ (?:^|\.)tarr\.uspto\.gov$ (?:^|\.)tascn\.com\.au$ (?:^|\.)taup\.net$ (?:^|\.)taweet\.com$ (?:^|\.)tbcollege\.org$ (?:^|\.)tbi\.org\.hk$ (?:^|\.)tbicn\.org$ (?:^|\.)tbjyt\.org$ (?:^|\.)tbpic\.info$ (?:^|\.)tbrc\.org$ (?:^|\.)tbs-rainbow\.org$ (?:^|\.)tbsec\.org$ (?:^|\.)tbskkinabalu\.page\.tl$ (?:^|\.)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$ (?:^|\.)tdm\.com\.mo$ (?:^|\.)teachparentstech\.org$ (?:^|\.)teamamericany\.com$ (?:^|\.)tech2\.in\.com$ (?:^|\.)techviz\.net$ (?:^|\.)teck\.in$ (?:^|\.)teco-hk\.org$ (?:^|\.)teco-mo\.org$ (?:^|\.)teddysun\.com$ (?:^|\.)teeniefuck\.net$ (?:^|\.)teensinasia\.com$ (?:^|\.)telecomspace\.com$ (?:^|\.)telegram\.dog$ (?:^|\.)telegram\.me$ (?:^|\.)telegram\.org$ (?:^|\.)telegramdownload\.com$ (?:^|\.)telegraph\.co\.uk$ (?:^|\.)telesco\.pe$ (?:^|\.)tellme\.pw$ (?:^|\.)tenacy\.com$ (?:^|\.)tensorflow\.org$ (?:^|\.)tenzinpalmo\.com$ (?:^|\.)terminus2049\.github\.io$ (?:^|\.)tew\.org$ (?:^|\.)textnow\.me$ (?:^|\.)tfhub\.dev$ (?:^|\.)th\.hao123\.com$ (?:^|\.)thaicn\.com$ (?:^|\.)thb\.gov\.tw$ (?:^|\.)theatrum-belli\.com$ (?:^|\.)thebcomplex\.com$ (?:^|\.)theblemish\.com$ (?:^|\.)thebobs\.com$ (?:^|\.)thebodyshop-usa\.com$ (?:^|\.)thecenter\.mit\.edu$ (?:^|\.)thechinabeat\.org$ (?:^|\.)thedalailamamovie\.com$ (?:^|\.)thedw\.us$ (?:^|\.)thefacebook\.com$ (?:^|\.)thefrontier\.hk$ (?:^|\.)thegioitinhoc\.vn$ (?:^|\.)thegly\.com$ (?:^|\.)thehots\.info$ (?:^|\.)thehousenews\.com$ (?:^|\.)thehun\.net$ (?:^|\.)theinitium\.com$ (?:^|\.)thenewslens\.com$ (?:^|\.)thepiratebay\.org$ (?:^|\.)theporndude\.com$ (?:^|\.)theportalwiki\.com$ (?:^|\.)thereallove\.kr$ (?:^|\.)therock\.net\.nz$ (?:^|\.)thespeeder\.com$ (?:^|\.)thestandnews\.com$ (?:^|\.)thetibetcenter\.org$ (?:^|\.)thetibetconnection\.org$ (?:^|\.)thetibetmuseum\.org$ (?:^|\.)thetibetpost\.com$ (?:^|\.)thetinhat\.com$ (?:^|\.)thetrotskymovie\.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-info\.net$ (?:^|\.)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$ (?:^|\.)tibetanfeministcollective\.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$ (?:^|\.)tibetlibre\.free\.fr$ (?:^|\.)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$ (?:^|\.)tiltbrush\.com$ (?:^|\.)timdir\.com$ (?:^|\.)time\.com$ (?:^|\.)times\.hinet\.net$ (?:^|\.)timesofindia\.indiatimes\.com$ (?:^|\.)timsah\.com$ (?:^|\.)tinc-vpn\.org$ (?:^|\.)tineye\.com$ (?:^|\.)tintuc101\.com$ (?:^|\.)tiny\.cc$ (?:^|\.)tinychat\.com$ (?:^|\.)tinypaste\.com$ (?:^|\.)tipo\.gov\.tw$ (?:^|\.)tistory\.com$ (?:^|\.)tkcs-collins\.com$ (?:^|\.)tl\.gd$ (?:^|\.)tma\.co\.jp$ (?:^|\.)tmagazine\.com$ (?:^|\.)tmdfish\.com$ (?:^|\.)tmi\.me$ (?:^|\.)tmpp\.org$ (?:^|\.)tn1\.shemalez\.com$ (?:^|\.)tn2\.shemalez\.com$ (?:^|\.)tn3\.shemalez\.com$ (?:^|\.)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$ (?:^|\.)tongil\.or\.kr$ (?:^|\.)tono-oka\.jp$ (?:^|\.)tonyyan\.net$ (?:^|\.)toodoc\.com$ (?:^|\.)toonel\.net$ (?:^|\.)top\.tv$ (?:^|\.)top10vpn\.com$ (?:^|\.)top81\.ws$ (?:^|\.)topbtc\.com$ (?:^|\.)topic\.youthwant\.com\.tw$ (?:^|\.)topnews\.in$ (?:^|\.)toppornsites\.com$ (?:^|\.)topshareware\.com$ (?:^|\.)topsy\.com$ (?:^|\.)toptip\.ca$ (?:^|\.)tor\.blingblingsquad\.net$ (?:^|\.)tor\.cn\.uptodown\.com$ (?:^|\.)tor\.updatestar\.com$ (?:^|\.)tora\.to$ (?:^|\.)torcn\.com$ (?:^|\.)torguard\.net$ (?:^|\.)torproject\.org$ (?:^|\.)torrentprivacy\.com$ (?:^|\.)torrentproject\.se$ (?:^|\.)torrenty\.org$ (?:^|\.)torrentz\.eu$ (?:^|\.)torvpn\.com$ (?:^|\.)tosh\.comedycentral\.com$ (?:^|\.)totalvpn\.com$ (?:^|\.)toutiaoabc\.com$ (?:^|\.)toutyrater\.github\.io$ (?:^|\.)towngain\.com$ (?:^|\.)toypark\.in$ (?:^|\.)toythieves\.com$ (?:^|\.)toytractorshow\.com$ (?:^|\.)tparents\.org$ (?:^|\.)tpi\.org\.tw$ (?:^|\.)tracfone\.com$ (?:^|\.)traffichaus\.com$ (?:^|\.)trans\.wenweipo\.com$ (?:^|\.)transparency\.org$ (?:^|\.)treemall\.com\.tw$ (?:^|\.)trendsmap\.com$ (?:^|\.)trialofccp\.org$ (?:^|\.)trickip\.net$ (?:^|\.)trickip\.org$ (?:^|\.)trimondi\.de$ (?:^|\.)trouw\.nl$ (?:^|\.)trt\.net\.tr$ (?:^|\.)trtc\.com\.tw$ (?:^|\.)truebuddha-md\.org$ (?:^|\.)trulyergonomic\.com$ (?:^|\.)truth101\.co\.tv$ (?:^|\.)truthontour\.org$ (?:^|\.)truveo\.com$ (?:^|\.)tryheart\.jp$ (?:^|\.)tsctv\.net$ (?:^|\.)tsdr\.uspto\.gov$ (?:^|\.)tsemtulku\.com$ (?:^|\.)tsquare\.tv$ (?:^|\.)tsu\.org\.tw$ (?:^|\.)tsunagarumon\.com$ (?:^|\.)tt1069\.com$ (?:^|\.)tttan\.com$ (?:^|\.)ttvnw\.net$ (?:^|\.)tu8964\.com$ (?:^|\.)tubaholic\.com$ (?:^|\.)tube\.com$ (?:^|\.)tube8\.com$ (?:^|\.)tube911\.com$ (?:^|\.)tubecup\.com$ (?:^|\.)tubegals\.com$ (?:^|\.)tubeislam\.com$ (?:^|\.)tubepornclassic\.com$ (?:^|\.)tubestack\.com$ (?:^|\.)tubewolf\.com$ (?:^|\.)tui\.orzdream\.com$ (?:^|\.)tuibeitu\.net$ (?:^|\.)tuidang\.net$ (?:^|\.)tuidang\.org$ (?:^|\.)tuidang\.se$ (?:^|\.)tuitwit\.com$ (?:^|\.)tumblr\.com$ (?:^|\.)tumutanzi\.com$ (?:^|\.)tumview\.com$ (?:^|\.)tunein\.com$ (?:^|\.)tunnelbear\.com$ (?:^|\.)tunnelr\.com$ (?:^|\.)tuo8\.blue$ (?:^|\.)tuo8\.cc$ (?:^|\.)tuo8\.club$ (?:^|\.)tuo8\.fit$ (?:^|\.)tuo8\.hk$ (?:^|\.)tuo8\.in$ (?:^|\.)tuo8\.ninja$ (?:^|\.)tuo8\.org$ (?:^|\.)tuo8\.pw$ (?:^|\.)tuo8\.red$ (?:^|\.)tuo8\.space$ (?:^|\.)turansam\.org$ (?:^|\.)turbobit\.net$ (?:^|\.)turbohide\.com$ (?:^|\.)turbotwitter\.com$ (?:^|\.)turntable\.fm$ (?:^|\.)tushycash\.com$ (?:^|\.)tuvpn\.com$ (?:^|\.)tuzaijidi\.com$ (?:^|\.)tv\.com$ (?:^|\.)tvants\.com$ (?:^|\.)tvboxnow\.com$ (?:^|\.)tvider\.com$ (?:^|\.)tvmost\.com\.hk$ (?:^|\.)tvplayvideos\.com$ (?:^|\.)tvunetworks\.com$ (?:^|\.)tw-blog\.com$ (?:^|\.)tw-npo\.org$ (?:^|\.)tw\.answers\.yahoo\.com$ (?:^|\.)tw\.bid\.yahoo\.com$ (?:^|\.)tw\.gigacircle\.com$ (?:^|\.)tw\.hao123\.com$ (?:^|\.)tw\.iqiyi\.com$ (?:^|\.)tw\.jiepang\.com$ (?:^|\.)tw\.knowledge\.yahoo\.com$ (?:^|\.)tw\.mall\.yahoo\.com$ (?:^|\.)tw\.mobi\.yahoo\.com$ (?:^|\.)tw\.money\.yahoo\.com$ (?:^|\.)tw\.myblog\.yahoo\.com$ (?:^|\.)tw\.news\.yahoo\.com$ (?:^|\.)tw\.streetvoice\.com$ (?:^|\.)tw\.tomonews\.net$ (?:^|\.)tw\.voa\.mobi$ (?:^|\.)tw\.yahoo\.com$ (?:^|\.)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$ (?:^|\.)tweets\.seraph\.me$ (?:^|\.)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$ (?:^|\.)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$ (?:^|\.)twskype\.com$ (?:^|\.)twstar\.net$ (?:^|\.)twt\.tl$ (?:^|\.)twtkr\.com$ (?:^|\.)twtr2src\.ogaoga\.org$ (?:^|\.)twtrland\.com$ (?:^|\.)twttr\.com$ (?:^|\.)twurl\.nl$ (?:^|\.)twyac\.org$ (?:^|\.)txxx\.com$ (?:^|\.)tycool\.com$ (?:^|\.)typepad\.com$ (?:^|\.)u9un\.com$ (?:^|\.)ub0\.cc$ (?:^|\.)ubddns\.org$ (?:^|\.)uberproxy\.net$ (?:^|\.)uc-japan\.org$ (?:^|\.)ucdc1998\.org$ (?:^|\.)uderzo\.it$ (?:^|\.)udn\.com$ (?:^|\.)udn\.com\.tw$ (?:^|\.)udnbkk\.com$ (?:^|\.)uforadio\.com\.tw$ (?:^|\.)ufreevpn\.com$ (?:^|\.)ugo\.com$ (?:^|\.)uhdwallpapers\.org$ (?:^|\.)uhrp\.org$ (?:^|\.)uighur\.narod\.ru$ (?:^|\.)uighur\.nl$ (?:^|\.)uighurbiz\.net$ (?:^|\.)ukcdp\.co\.uk$ (?:^|\.)ukliferadio\.co\.uk$ (?:^|\.)uku\.im$ (?:^|\.)ulike\.net$ (?:^|\.)ulop\.net$ (?:^|\.)ultrareach$ (?:^|\.)ultrasurf$ (?:^|\.)ultravpn\.fr$ (?:^|\.)ultraxs\.com$ (?:^|\.)umich\.edu$ (?:^|\.)unblock-us\.com$ (?:^|\.)unblock\.cn\.com$ (?:^|\.)unblockdmm\.com$ (?:^|\.)unblocker\.yt$ (?:^|\.)unblocksit\.es$ (?:^|\.)uncyclomedia\.org$ (?:^|\.)uncyclopedia\.hk$ (?:^|\.)uncyclopedia\.tw$ (?:^|\.)underwoodammo\.com$ (?:^|\.)unholyknight\.com$ (?:^|\.)uni\.cc$ (?:^|\.)unification\.net$ (?:^|\.)unification\.org\.tw$ (?:^|\.)unirule\.cloud$ (?:^|\.)unitedsocialpress\.com$ (?:^|\.)unix100\.com$ (?:^|\.)unknownspace\.org$ (?:^|\.)unodedos\.com$ (?:^|\.)unpo\.org$ (?:^|\.)unseen\.is$ (?:^|\.)untraceable\.us$ (?:^|\.)uocn\.org$ (?:^|\.)upcoming\.yahoo\.com$ (?:^|\.)updates\.tdesktop\.com$ (?:^|\.)upholdjustice\.org$ (?:^|\.)upload4u\.info$ (?:^|\.)uploaded\.net$ (?:^|\.)uploaded\.to$ (?:^|\.)uploadstation\.com$ (?:^|\.)upmedia\.mg$ (?:^|\.)upornia\.com$ (?:^|\.)uproxy\.org$ (?:^|\.)upwill\.org$ (?:^|\.)ur7s\.com$ (?:^|\.)uraban\.me$ (?:^|\.)urbansurvival\.com$ (?:^|\.)urchin\.com$ (?:^|\.)urlborg\.com$ (?:^|\.)urlparser\.com$ (?:^|\.)us\.to$ (?:^|\.)usacn\.com$ (?:^|\.)usaip\.eu$ (?:^|\.)userapi\.nytlog\.com$ (?:^|\.)users\.skynet\.be$ (?:^|\.)usfk\.mil$ (?:^|\.)ushuarencity\.echainhost\.com$ (?:^|\.)usinfo\.state\.gov$ (?:^|\.)usma\.edu$ (?:^|\.)usmc\.mil$ (?:^|\.)usmgtcg\.ning\.com$ (?:^|\.)usno\.navy\.mil$ (?:^|\.)usocctn\.com$ (?:^|\.)ustream\.tv$ (?:^|\.)usunitednews\.com$ (?:^|\.)usus\.cc$ (?:^|\.)utopianpal\.com$ (?:^|\.)uu-gg\.com$ (?:^|\.)uukanshu\.com$ (?:^|\.)uvwxyz\.xyz$ (?:^|\.)uwants\.com$ (?:^|\.)uwants\.net$ (?:^|\.)uyghur-j\.org$ (?:^|\.)uyghur\.co\.uk$ (?:^|\.)uyghuramerican\.org$ (?:^|\.)uyghurcanadiansociety\.org$ (?:^|\.)uyghurcongress\.org$ (?:^|\.)uyghurensemble\.co\.uk$ (?:^|\.)uyghurpen\.org$ (?:^|\.)uyghurpress\.com$ (?:^|\.)uyghurstudies\.org$ (?:^|\.)uygur\.fc2web\.com$ (?:^|\.)uygur\.org$ (?:^|\.)uymaarip\.com$ (?:^|\.)v2ex\.com$ (?:^|\.)v2ray\.com$ (?:^|\.)van001\.com$ (?:^|\.)van698\.com$ (?:^|\.)vanemu\.cn$ (?:^|\.)vanilla-jp\.com$ (?:^|\.)vanpeople\.com$ (?:^|\.)vansky\.com$ (?:^|\.)vaticannews\.va$ (?:^|\.)vatn\.org$ (?:^|\.)vcf-online\.org$ (?:^|\.)vcfbuilder\.org$ (?:^|\.)vds\.rightster\.com$ (?:^|\.)vegas\.williamhill\.com$ (?:^|\.)vegasred\.com$ (?:^|\.)velkaepocha\.sk$ (?:^|\.)venbbs\.com$ (?:^|\.)venchina\.com$ (?:^|\.)venetianmacao\.com$ (?:^|\.)ventureswell\.com$ (?:^|\.)veoh\.com$ (?:^|\.)vermonttibet\.org$ (?:^|\.)versavpn\.com$ (?:^|\.)verybs\.com$ (?:^|\.)vevo\.com$ (?:^|\.)vft\.com\.tw$ (?:^|\.)viber\.com$ (?:^|\.)vica\.info$ (?:^|\.)victimsofcommunism\.org$ (?:^|\.)vid\.me$ (?:^|\.)vidble\.com$ (?:^|\.)video\.aol\.ca$ (?:^|\.)video\.aol\.co\.uk$ (?:^|\.)video\.aol\.com$ (?:^|\.)video\.ap\.org$ (?:^|\.)video\.fdbox\.com$ (?:^|\.)video\.foxbusiness\.com$ (?:^|\.)video\.pbs\.org$ (?:^|\.)video\.yahoo\.com$ (?:^|\.)videobam\.com$ (?:^|\.)videodetective\.com$ (?:^|\.)videomega\.tv$ (?:^|\.)videomo\.com$ (?:^|\.)videopediaworld\.com$ (?:^|\.)videopress\.com$ (?:^|\.)vidinfo\.org$ (?:^|\.)vietdaikynguyen\.com$ (?:^|\.)vijayatemple\.org$ (?:^|\.)vimeo\.com$ (?:^|\.)vimperator\.org$ (?:^|\.)vincnd\.com$ (?:^|\.)vine\.co$ (?:^|\.)vinniev\.com$ (?:^|\.)vip-enterprise\.com$ (?:^|\.)virtualrealporn\.com$ (?:^|\.)visibletweets\.com$ (?:^|\.)vital247\.org$ (?:^|\.)viu\.com$ (?:^|\.)viu\.tv$ (?:^|\.)vivahentai4u\.net$ (?:^|\.)vivatube\.com$ (?:^|\.)vivthomas\.com$ (?:^|\.)vizvaz\.com$ (?:^|\.)vjav\.com$ (?:^|\.)vjmedia\.com\.hk$ (?:^|\.)vllcs\.org$ (?:^|\.)vlog\.xuite\.net$ (?:^|\.)vmixcore\.com$ (?:^|\.)vmpsoft\.com$ (?:^|\.)vn\.hao123\.com$ (?:^|\.)vnet\.link$ (?:^|\.)voa-11\.akacast\.akamaistream\.net$ (?:^|\.)voacantonese\.com$ (?:^|\.)voachinese\.com$ (?:^|\.)voachineseblog\.com$ (?:^|\.)voagd\.com$ (?:^|\.)voanews\.com$ (?:^|\.)voatibetan\.com$ (?:^|\.)voatibetanenglish\.com$ (?:^|\.)vocativ\.com$ (?:^|\.)vocn\.tv$ (?:^|\.)vod-abematv\.akamaized\.net$ (?:^|\.)vod\.wwe\.com$ (?:^|\.)vot\.org$ (?:^|\.)vovo2000\.com$ (?:^|\.)voxer\.com$ (?:^|\.)voy\.com$ (?:^|\.)vpn\.ac$ (?:^|\.)vpn\.cjb\.net$ (?:^|\.)vpn\.cmu\.edu$ (?:^|\.)vpn\.sv\.cmu\.edu$ (?:^|\.)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$ (?:^|\.)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$ (?:^|\.)vtunnel\.com$ (?:^|\.)vuku\.cc$ (?:^|\.)vultryhw\.com$ (?:^|\.)w\.idaiwan\.com$ (?:^|\.)w3schools\.com$ (?:^|\.)waffle1999\.com$ (?:^|\.)wahas\.com$ (?:^|\.)waigaobu\.com$ (?:^|\.)waikeung\.org$ (?:^|\.)wailaike\.net$ (?:^|\.)waiwaier\.com$ (?:^|\.)wallmama\.com$ (?:^|\.)wallornot\.org$ (?:^|\.)wallpapercasa\.com$ (?:^|\.)wallproxy\.com$ (?:^|\.)waltermartin\.com$ (?:^|\.)waltermartin\.org$ (?:^|\.)wanderinghorse\.net$ (?:^|\.)wangafu\.net$ (?:^|\.)wangjinbo\.org$ (?:^|\.)wanglixiong\.com$ (?:^|\.)wango\.org$ (?:^|\.)wangruoshui\.net$ (?:^|\.)want-daily\.com$ (?:^|\.)wanz-factory\.com$ (?:^|\.)wapedia\.mobi$ (?:^|\.)warbler\.iconfactory\.net$ (?:^|\.)waselpro\.com$ (?:^|\.)washeng\.net$ (?:^|\.)watch8x\.com$ (?:^|\.)watchinese\.com$ (?:^|\.)watchmygf\.net$ (?:^|\.)wattpad\.com$ (?:^|\.)wav\.tv$ (?:^|\.)waveprotocol\.org$ (?:^|\.)waymo\.com$ (?:^|\.)wda\.gov\.tw$ (?:^|\.)wdf5\.com$ (?:^|\.)wearehairy\.com$ (?:^|\.)wearn\.com$ (?:^|\.)web\.dev$ (?:^|\.)web2project\.net$ (?:^|\.)webbang\.net$ (?:^|\.)webevader\.org$ (?:^|\.)webfreer\.com$ (?:^|\.)webjb\.org$ (?:^|\.)weblagu\.com$ (?:^|\.)webmproject\.org$ (?:^|\.)webrtc\.org$ (?:^|\.)webrush\.net$ (?:^|\.)webs-tv\.net$ (?:^|\.)website\.informer\.com$ (?:^|\.)websitepulse\.com$ (?:^|\.)webwarper\.net$ (?:^|\.)webworkerdaily\.com$ (?:^|\.)weekmag\.info$ (?:^|\.)wefightcensorship\.org$ (?:^|\.)wefong\.com$ (?:^|\.)wego\.here\.com$ (?:^|\.)weiboleak\.com$ (?:^|\.)weiboscope\.jmsc\.hku\.hk$ (?:^|\.)weihuo\.org$ (?:^|\.)weijingsheng\.org$ (?:^|\.)weiming\.info$ (?:^|\.)weiquanwang\.org$ (?:^|\.)weisuo\.ws$ (?:^|\.)welovecock\.com$ (?:^|\.)wemigrate\.org$ (?:^|\.)wengewang\.com$ (?:^|\.)wengewang\.org$ (?:^|\.)wenhui\.ch$ (?:^|\.)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$ (?:^|\.)whitebear\.freebearblog\.org$ (?:^|\.)whodns\.xyz$ (?:^|\.)whoer\.net$ (?:^|\.)whotalking\.com$ (?:^|\.)whylover\.com$ (?:^|\.)whyx\.org$ (?:^|\.)widevine\.com$ (?:^|\.)wikaba\.com$ (?:^|\.)wiki\.cnitter\.com$ (?:^|\.)wiki\.esu\.im$ (?:^|\.)wiki\.gamerp\.jp$ (?:^|\.)wiki\.jqueryui\.com$ (?:^|\.)wiki\.keso\.cn$ (?:^|\.)wiki\.moegirl\.org$ (?:^|\.)wiki\.oauth\.net$ (?:^|\.)wiki\.phonegap\.com$ (?:^|\.)wikileaks-forum\.com$ (?:^|\.)wikileaks\.ch$ (?:^|\.)wikileaks\.com$ (?:^|\.)wikileaks\.de$ (?:^|\.)wikileaks\.eu$ (?:^|\.)wikileaks\.lu$ (?:^|\.)wikileaks\.org$ (?:^|\.)wikileaks\.pl$ (?:^|\.)wikilivres\.info$ (?:^|\.)wikimapia\.org$ (?:^|\.)wikipedia\.org$ (?:^|\.)wikiwiki\.jp$ (?:^|\.)wildammo\.com$ (?:^|\.)williamhill\.com$ (?:^|\.)willw\.net$ (?:^|\.)windowsphoneme\.com$ (?:^|\.)windscribe\.com$ (?:^|\.)wingamestore\.com$ (?:^|\.)wingy\.site$ (?:^|\.)winning11\.com$ (?:^|\.)winwhispers\.info$ (?:^|\.)wire\.com$ (?:^|\.)wiredbytes\.com$ (?:^|\.)wiredpen\.com$ (?:^|\.)wisdompubs\.org$ (?:^|\.)wisevid\.com$ (?:^|\.)withgoogle\.com$ (?:^|\.)withyoutube\.com$ (?:^|\.)witnessleeteaching\.com$ (?:^|\.)witopia\.net$ (?:^|\.)wizcrafts\.net$ (?:^|\.)wjbk\.org$ (?:^|\.)wlcnew\.jigsy\.com$ (?:^|\.)wlx\.sowiki\.net$ (?:^|\.)wn\.com$ (?:^|\.)wnacg\.com$ (?:^|\.)wnacg\.org$ (?:^|\.)wo\.tc$ (?:^|\.)wo3ttt\.wordpress\.com$ (?:^|\.)woeser\.com$ (?:^|\.)woesermiddle-way\.net$ (?:^|\.)wokar\.org$ (?:^|\.)wolfax\.com$ (?:^|\.)woolyss\.com$ (?:^|\.)woopie\.jp$ (?:^|\.)woopie\.tv$ (?:^|\.)wordpress\.com$ (?:^|\.)workatruna\.com$ (?:^|\.)workerdemo\.org\.hk$ (?:^|\.)workerempowerment\.org$ (?:^|\.)workersthebig\.net$ (?:^|\.)worldcat\.org$ (?:^|\.)worldjournal\.com$ (?:^|\.)worldvpn\.net$ (?:^|\.)wow-life\.net$ (?:^|\.)wow\.com$ (?:^|\.)wowgirls\.com$ (?:^|\.)wowlegacy\.ml$ (?:^|\.)wowporn\.com$ (?:^|\.)wowrk\.com$ (?:^|\.)woxinghuiguo\.com$ (?:^|\.)woyaolian\.org$ (?:^|\.)wozy\.in$ (?:^|\.)wp\.com$ (?:^|\.)wpoforum\.com$ (?:^|\.)wqyd\.org$ (?:^|\.)wrchina\.org$ (?:^|\.)wretch\.cc$ (?:^|\.)writer\.zoho\.com$ (?:^|\.)wsgzao\.github\.io$ (?:^|\.)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$ (?:^|\.)wwitv\.com$ (?:^|\.)www\.ajsands\.com$ (?:^|\.)www\.americorps\.gov$ (?:^|\.)www\.antd\.org$ (?:^|\.)www\.aolnews\.com$ (?:^|\.)www\.businessinsider\.com\.au$ (?:^|\.)www\.citizenlab\.org$ (?:^|\.)www\.cmoinc\.org$ (?:^|\.)www\.cool18\.com$ (?:^|\.)www\.dmm\.com$ (?:^|\.)www\.dwheeler\.com$ (?:^|\.)www\.eastturkistan\.net$ (?:^|\.)www\.gmiddle\.com$ (?:^|\.)www\.gmiddle\.net$ (?:^|\.)www\.hustlercash\.com$ (?:^|\.)www\.idlcoyote\.com$ (?:^|\.)www\.imdb\.com$ (?:^|\.)www\.kindleren\.com$ (?:^|\.)www\.klip\.me$ (?:^|\.)www\.lamenhu\.com$ (?:^|\.)www\.lib\.virginia\.edu$ (?:^|\.)www\.linksalpha\.com$ (?:^|\.)www\.m-sport\.co\.uk$ (?:^|\.)www\.metro\.taipei$ (?:^|\.)www\.monlamit\.org$ (?:^|\.)www\.moztw\.org$ (?:^|\.)www\.nbc\.com$ (?:^|\.)www\.orchidbbs\.com$ (?:^|\.)www\.owind\.com$ (?:^|\.)www\.oxid\.it$ (?:^|\.)www\.powerpointninja\.com$ (?:^|\.)www\.s4miniarchive\.com$ (?:^|\.)www\.sciencemag\.org$ (?:^|\.)www\.shadowsocks\.com$ (?:^|\.)www\.shwchurch\.org$ (?:^|\.)www\.skype\.com$ (?:^|\.)www\.tablesgenerator\.com$ (?:^|\.)www\.taiwanonline\.cc$ (?:^|\.)www\.taup\.org\.tw$ (?:^|\.)www\.thechinastory\.org$ (?:^|\.)www\.wan-press\.org$ (?:^|\.)www\.wangruowang\.org$ (?:^|\.)www\.websnapr\.com$ (?:^|\.)www\.zensur\.freerk\.com$ (?:^|\.)www1\.american\.edu$ (?:^|\.)www1\.biz$ (?:^|\.)www2\.ohchr\.org$ (?:^|\.)www2\.rocketbbs\.com$ (?:^|\.)wwwhost\.biz$ (?:^|\.)wzyboy\.im$ (?:^|\.)x-art\.com$ (?:^|\.)x-berry\.com$ (?:^|\.)x-wall\.org$ (?:^|\.)x\.company$ (?:^|\.)x1949x\.com$ (?:^|\.)x24hr\.com$ (?:^|\.)x365x\.com$ (?:^|\.)xa\.yimg\.com$ (?:^|\.)xanga\.com$ (?:^|\.)xbabe\.com$ (?:^|\.)xbookcn\.com$ (?:^|\.)xbtce\.com$ (?:^|\.)xcafe\.in$ (?:^|\.)xcity\.jp$ (?:^|\.)xcritic\.com$ (?:^|\.)xerotica\.com$ (?:^|\.)xfinity\.com$ (?:^|\.)xfm\.pp\.ru$ (?:^|\.)xgmyd\.com$ (?:^|\.)xhamster\.com$ (?:^|\.)xianba\.net$ (?:^|\.)xianchawang\.net$ (?:^|\.)xianjian\.tw$ (?:^|\.)xianqiao\.net$ (?:^|\.)xiaobaiwu\.com$ (?:^|\.)xiaochuncnjp\.com$ (?:^|\.)xiaod\.in$ (?:^|\.)xiaohexie\.com$ (?:^|\.)xiaolan\.me$ (?:^|\.)xiaoma\.org$ (?:^|\.)xiezhua\.com$ (?:^|\.)xihua\.es$ (?:^|\.)xijie\.wordpress\.com$ (?:^|\.)xing\.com$ (?:^|\.)xinhuanet\.org$ (?:^|\.)xinmiao\.com\.hk$ (?:^|\.)xinqimeng\.over-blog\.com$ (?:^|\.)xinsheng\.net$ (?:^|\.)xinshijue\.com$ (?:^|\.)xinyubbs\.net$ (?:^|\.)xiongpian\.com$ (?:^|\.)xiuren\.org$ (?:^|\.)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--czq75pvv1aj5c\.org$ (?:^|\.)xn--i2ru8q2qg\.com$ (?:^|\.)xn--ngstr-lra8j\.com$ (?:^|\.)xn--oiq\.cc$ (?:^|\.)xn--p8j9a0d9c9a\.xn--q9jyb4c$ (?:^|\.)xnxx\.com$ (?:^|\.)xpdo\.net$ (?:^|\.)xpud\.org$ (?:^|\.)xrentdvd\.com$ (?:^|\.)xskywalker\.com$ (?:^|\.)xskywalker\.net$ (?:^|\.)xtube\.com$ (?:^|\.)xuchao\.net$ (?:^|\.)xuchao\.org$ (?:^|\.)xuehua\.us$ (?:^|\.)xuzhiyong\.net$ (?:^|\.)xvideo\.cc$ (?:^|\.)xvideos\.com$ (?:^|\.)xvideos\.es$ (?:^|\.)xxbbx\.com$ (?:^|\.)xxlmovies\.com$ (?:^|\.)xxuz\.com$ (?:^|\.)xxx\.com$ (?:^|\.)xxx\.xxx$ (?:^|\.)xxxfuckmom\.com$ (?:^|\.)xxxx\.com\.au$ (?:^|\.)xxxy\.biz$ (?:^|\.)xxxy\.info$ (?:^|\.)xxxymovies\.com$ (?:^|\.)xys\.dxiong\.com$ (?:^|\.)xys\.org$ (?:^|\.)xysblogs\.org$ (?:^|\.)xyy69\.com$ (?:^|\.)xyy69\.info$ (?:^|\.)yahoo\.com\.hk$ (?:^|\.)yakbutterblues\.com$ (?:^|\.)yam\.com$ (?:^|\.)yam\.org\.tw$ (?:^|\.)yanghengjun\.com$ (?:^|\.)yangjianli\.com$ (?:^|\.)yasni\.co\.uk$ (?:^|\.)yayabay\.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$ (?:^|\.)yilubbs\.com$ (?:^|\.)yingsuoss\.com$ (?:^|\.)yinlei\.org$ (?:^|\.)yipub\.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$ (?:^|\.)youthnetradio\.org$ (?:^|\.)youtu\.be$ (?:^|\.)youtube-nocookie\.com$ (?:^|\.)youtube\.com$ (?:^|\.)youtubecn\.com$ (?:^|\.)youtubeeducation\.com$ (?:^|\.)youtubegaming\.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$ (?:^|\.)yzzk\.com$ (?:^|\.)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$ (?:^|\.)zenmate\.com\.ru$ (?:^|\.)zeronet\.io$ (?:^|\.)zeutch\.com$ (?:^|\.)zfreet\.com$ (?:^|\.)zgsddh\.com$ (?:^|\.)zgzcjj\.net$ (?:^|\.)zh\.bitterwinter\.org$ (?:^|\.)zh\.ecdm\.wikia\.com$ (?:^|\.)zh\.pokerstrategy\.com$ (?:^|\.)zh\.pttpedia\.wikia\.com$ (?:^|\.)zh\.uncyclopedia\.wikia\.com$ (?:^|\.)zh\.wikinews\.org$ (?:^|\.)zh\.wikisource\.org$ (?:^|\.)zhanbin\.net$ (?:^|\.)zhangboli\.net$ (?:^|\.)zhangtianliang\.com$ (?:^|\.)zhanlve\.org$ (?:^|\.)zhao\.1984\.city$ (?:^|\.)zhao\.jinhai\.de$ (?:^|\.)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$ (?:^|\.)ziddu\.com$ (?:^|\.)zillionk\.com$ (?:^|\.)zim\.vn$ (?:^|\.)zinio\.com$ (?:^|\.)ziporn\.com$ (?:^|\.)zippyshare\.com$ (?:^|\.)zkaip\.com$ (?:^|\.)zmw\.cn$ (?:^|\.)zodgame\.us$ (?:^|\.)zomobo\.net$ (?:^|\.)zonaeuropa\.com$ (?:^|\.)zonghexinwen\.com$ (?:^|\.)zonghexinwen\.net$ (?:^|\.)zoogvpn\.com$ (?:^|\.)zootool\.com$ (?:^|\.)zoozle\.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$ (?:^|\.)zyzc9\.com$ (?:^|\.)zzcartoon\.com$ (?:^|\.)zzcloud\.me$ (?:^|\.)zzux\.com$ ================================================ FILE: core/src/main/assets/acl/bypass-lan.acl ================================================ [proxy_all] [bypass_list] 0.0.0.0/8 10.0.0.0/8 100.64.0.0/10 127.0.0.0/8 169.254.0.0/16 172.16.0.0/12 192.0.0.0/24 192.0.2.0/24 192.31.196.0/24 192.52.193.0/24 192.88.99.0/24 192.168.0.0/16 192.175.48.0/24 198.18.0.0/15 198.51.100.0/24 203.0.113.0/24 224.0.0.0/3 ================================================ FILE: core/src/main/assets/acl/china-list.acl ================================================ [bypass_all] [proxy_list] 1.0.1.0/24 1.0.2.0/23 1.0.8.0/21 1.0.32.0/19 1.1.0.0/24 1.1.2.0/23 1.1.4.0/22 1.1.8.0/21 1.1.16.0/20 1.1.32.0/19 1.2.0.0/23 1.2.2.0/24 1.2.4.0/22 1.2.8.0/21 1.2.16.0/20 1.2.32.0/19 1.2.64.0/18 1.3.0.0/16 1.4.1.0/24 1.4.2.0/23 1.4.4.0/22 1.4.8.0/21 1.4.16.0/20 1.4.32.0/19 1.4.64.0/18 1.8.0.0/16 1.10.0.0/21 1.10.8.0/23 1.10.11.0/24 1.10.12.0/22 1.10.16.0/20 1.10.32.0/19 1.10.64.0/18 1.12.0.0/14 1.18.128.0/24 1.24.0.0/13 1.45.0.0/16 1.48.0.0/14 1.56.0.0/13 1.68.0.0/14 1.80.0.0/12 1.116.0.0/14 1.180.0.0/14 1.184.0.0/15 1.188.0.0/14 1.192.0.0/13 1.202.0.0/15 1.204.0.0/14 8.128.0.0/10 8.208.64.0/18 8.209.0.0/21 8.209.8.0/23 8.209.12.0/22 8.209.16.0/20 8.209.32.0/19 8.209.128.0/17 8.210.0.0/15 8.212.0.0/14 8.216.0.0/13 14.0.0.0/21 14.0.12.0/22 14.1.0.0/22 14.1.24.0/22 14.1.96.0/22 14.1.108.0/22 14.16.0.0/12 14.102.128.0/22 14.102.156.0/22 14.102.180.0/22 14.103.0.0/16 14.104.0.0/13 14.112.0.0/12 14.130.0.0/15 14.134.0.0/15 14.144.0.0/12 14.192.60.0/22 14.192.76.0/22 14.196.0.0/15 14.204.0.0/15 14.208.0.0/12 20.134.160.0/20 20.139.160.0/20 23.48.214.0/24 27.0.128.0/21 27.0.160.0/21 27.0.188.0/22 27.0.204.0/22 27.0.208.0/21 27.8.0.0/13 27.16.0.0/12 27.34.232.0/21 27.36.0.0/14 27.40.0.0/13 27.50.40.0/21 27.50.128.0/17 27.54.72.0/21 27.54.152.0/21 27.54.192.0/18 27.98.208.0/20 27.98.224.0/19 27.99.128.0/17 27.103.0.0/16 27.106.128.0/18 27.106.204.0/22 27.109.32.0/19 27.109.124.0/22 27.112.0.0/18 27.112.80.0/20 27.112.112.0/21 27.113.128.0/18 27.115.0.0/17 27.116.44.0/22 27.121.72.0/21 27.121.120.0/21 27.128.0.0/15 27.131.220.0/22 27.144.0.0/16 27.148.0.0/14 27.152.0.0/13 27.184.0.0/13 27.192.0.0/11 27.224.0.0/14 36.0.0.0/22 36.0.8.0/21 36.0.16.0/20 36.0.32.0/19 36.0.64.0/18 36.0.128.0/17 36.1.0.0/16 36.4.0.0/14 36.16.0.0/12 36.32.0.0/14 36.36.0.0/16 36.37.0.0/19 36.37.36.0/23 36.37.39.0/24 36.37.40.0/21 36.37.48.0/20 36.40.0.0/13 36.48.0.0/15 36.51.0.0/16 36.56.0.0/13 36.96.0.0/11 36.128.0.0/10 36.192.0.0/11 36.248.0.0/14 36.254.0.0/16 36.255.116.0/22 36.255.128.0/22 36.255.164.0/22 36.255.172.0/22 36.255.176.0/22 39.0.0.0/24 39.0.2.0/23 39.0.4.0/22 39.0.8.0/21 39.0.16.0/20 39.0.32.0/19 39.0.64.0/18 39.0.128.0/17 39.64.0.0/11 39.96.0.0/13 39.104.0.0/14 39.108.0.0/16 39.109.120.0/23 39.128.0.0/10 40.0.176.0/20 40.0.247.0/24 40.0.248.0/22 40.0.252.0/23 40.0.255.0/24 40.72.0.0/15 40.77.136.112/28 40.77.236.224/27 40.77.254.64/27 40.125.128.0/17 40.126.64.0/18 40.198.10.0/24 40.198.16.0/21 40.198.24.0/23 40.251.225.0/24 40.251.227.0/24 42.0.0.0/22 42.0.8.0/21 42.0.16.0/21 42.0.24.0/22 42.0.32.0/19 42.0.128.0/17 42.1.0.0/19 42.1.32.0/20 42.1.48.0/21 42.1.56.0/22 42.1.128.0/17 42.4.0.0/14 42.48.0.0/13 42.56.0.0/14 42.62.0.0/17 42.62.128.0/19 42.62.160.0/20 42.62.180.0/22 42.62.184.0/21 42.63.0.0/16 42.80.0.0/15 42.83.64.0/20 42.83.80.0/22 42.83.88.0/21 42.83.96.0/19 42.83.128.0/17 42.84.0.0/14 42.88.0.0/13 42.96.64.0/19 42.96.96.0/21 42.96.108.0/22 42.96.112.0/20 42.96.128.0/17 42.97.0.0/16 42.99.0.0/18 42.99.64.0/19 42.99.96.0/20 42.99.112.0/22 42.99.120.0/21 42.100.0.0/14 42.120.0.0/15 42.122.0.0/16 42.123.0.0/19 42.123.36.0/22 42.123.40.0/21 42.123.48.0/20 42.123.64.0/18 42.123.128.0/17 42.128.0.0/12 42.156.0.0/19 42.156.36.0/22 42.156.40.0/21 42.156.48.0/20 42.156.64.0/18 42.156.128.0/17 42.157.0.0/16 42.158.0.0/15 42.160.0.0/12 42.176.0.0/13 42.184.0.0/15 42.186.0.0/16 42.187.0.0/18 42.187.64.0/19 42.187.96.0/20 42.187.112.0/21 42.187.120.0/22 42.187.128.0/17 42.192.0.0/13 42.201.0.0/17 42.202.0.0/15 42.204.0.0/14 42.208.0.0/12 42.224.0.0/12 42.240.0.0/16 42.242.0.0/15 42.244.0.0/14 42.248.0.0/13 43.224.12.0/22 43.224.24.0/22 43.224.44.0/22 43.224.52.0/22 43.224.56.0/22 43.224.64.0/21 43.224.72.0/22 43.224.80.0/22 43.224.100.0/22 43.224.144.0/22 43.224.160.0/22 43.224.176.0/22 43.224.184.0/22 43.224.200.0/21 43.224.208.0/21 43.224.216.0/22 43.224.240.0/22 43.225.76.0/22 43.225.84.0/22 43.225.120.0/21 43.225.140.0/22 43.225.172.0/22 43.225.180.0/22 43.225.208.0/22 43.225.216.0/21 43.225.224.0/20 43.225.240.0/21 43.225.252.0/22 43.226.32.0/19 43.226.64.0/19 43.226.96.0/20 43.226.112.0/21 43.226.120.0/22 43.226.128.0/18 43.226.192.0/20 43.226.208.0/21 43.226.236.0/22 43.226.240.0/20 43.227.0.0/21 43.227.8.0/22 43.227.32.0/19 43.227.64.0/19 43.227.96.0/21 43.227.104.0/22 43.227.136.0/21 43.227.144.0/22 43.227.152.0/21 43.227.160.0/20 43.227.176.0/21 43.227.188.0/22 43.227.192.0/19 43.227.232.0/22 43.227.248.0/21 43.228.0.0/18 43.228.64.0/21 43.228.76.0/22 43.228.100.0/22 43.228.116.0/22 43.228.120.0/22 43.228.132.0/22 43.228.136.0/22 43.228.148.0/22 43.228.152.0/22 43.228.188.0/22 43.229.40.0/22 43.229.48.0/22 43.229.56.0/22 43.229.96.0/22 43.229.120.0/22 43.229.136.0/21 43.229.144.0/22 43.229.168.0/21 43.229.176.0/20 43.229.192.0/21 43.229.216.0/21 43.229.232.0/21 43.230.20.0/22 43.230.32.0/22 43.230.68.0/22 43.230.72.0/22 43.230.84.0/22 43.230.124.0/22 43.230.136.0/22 43.230.168.0/22 43.230.220.0/22 43.230.224.0/19 43.231.12.0/22 43.231.32.0/20 43.231.80.0/20 43.231.96.0/20 43.231.136.0/21 43.231.144.0/20 43.231.160.0/20 43.231.176.0/21 43.236.0.0/15 43.238.0.0/16 43.239.0.0/19 43.239.32.0/20 43.239.48.0/22 43.239.116.0/22 43.239.120.0/22 43.239.172.0/22 43.239.176.0/22 43.240.0.0/22 43.240.56.0/21 43.240.68.0/22 43.240.72.0/21 43.240.84.0/22 43.240.124.0/22 43.240.128.0/21 43.240.136.0/22 43.240.144.0/22 43.240.156.0/22 43.240.160.0/19 43.240.192.0/19 43.240.236.0/22 43.240.240.0/20 43.241.0.0/20 43.241.16.0/21 43.241.48.0/22 43.241.76.0/22 43.241.80.0/20 43.241.112.0/22 43.241.168.0/21 43.241.176.0/21 43.241.184.0/22 43.241.196.0/22 43.241.208.0/20 43.241.224.0/20 43.241.240.0/22 43.241.248.0/21 43.242.8.0/21 43.242.16.0/20 43.242.44.0/22 43.242.48.0/20 43.242.64.0/22 43.242.72.0/21 43.242.80.0/20 43.242.96.0/22 43.242.144.0/20 43.242.160.0/21 43.242.168.0/22 43.242.180.0/22 43.242.188.0/22 43.242.192.0/21 43.242.204.0/22 43.242.216.0/21 43.242.252.0/22 43.243.4.0/22 43.243.8.0/21 43.243.16.0/22 43.243.24.0/22 43.243.88.0/22 43.243.128.0/22 43.243.136.0/22 43.243.144.0/21 43.243.156.0/22 43.243.168.0/22 43.243.180.0/22 43.243.188.0/22 43.243.228.0/22 43.243.232.0/22 43.243.244.0/22 43.246.0.0/18 43.246.64.0/19 43.246.96.0/22 43.246.112.0/22 43.246.212.0/22 43.246.228.0/22 43.247.4.0/22 43.247.8.0/22 43.247.44.0/22 43.247.48.0/22 43.247.68.0/22 43.247.76.0/22 43.247.84.0/22 43.247.88.0/21 43.247.96.0/21 43.247.108.0/22 43.247.112.0/22 43.247.148.0/22 43.247.152.0/22 43.247.176.0/20 43.247.196.0/22 43.247.200.0/21 43.247.208.0/20 43.247.224.0/19 43.248.0.0/21 43.248.20.0/22 43.248.28.0/22 43.248.48.0/22 43.248.76.0/22 43.248.80.0/20 43.248.96.0/19 43.248.128.0/20 43.248.144.0/21 43.248.176.0/20 43.248.192.0/20 43.248.208.0/22 43.248.228.0/22 43.248.232.0/22 43.248.244.0/22 43.249.4.0/22 43.249.8.0/22 43.249.24.0/22 43.249.120.0/22 43.249.132.0/22 43.249.136.0/22 43.249.144.0/20 43.249.160.0/21 43.249.168.0/22 43.249.192.0/22 43.249.236.0/22 43.250.4.0/22 43.250.12.0/22 43.250.16.0/21 43.250.28.0/22 43.250.32.0/21 43.250.72.0/22 43.250.96.0/20 43.250.112.0/21 43.250.128.0/22 43.250.144.0/21 43.250.160.0/22 43.250.168.0/21 43.250.176.0/22 43.250.200.0/22 43.250.212.0/22 43.250.216.0/21 43.250.236.0/22 43.250.244.0/22 43.251.4.0/22 43.251.8.0/21 43.251.36.0/22 43.251.100.0/22 43.251.116.0/22 43.251.192.0/22 43.251.232.0/21 43.251.244.0/22 43.252.40.0/22 43.252.48.0/22 43.252.56.0/22 43.252.224.0/22 43.254.0.0/21 43.254.8.0/22 43.254.24.0/22 43.254.36.0/22 43.254.44.0/22 43.254.52.0/22 43.254.64.0/22 43.254.72.0/22 43.254.84.0/22 43.254.88.0/21 43.254.100.0/22 43.254.104.0/22 43.254.112.0/21 43.254.128.0/22 43.254.136.0/21 43.254.144.0/20 43.254.168.0/21 43.254.180.0/22 43.254.184.0/21 43.254.192.0/21 43.254.200.0/22 43.254.208.0/22 43.254.220.0/22 43.254.224.0/20 43.254.240.0/22 43.254.248.0/21 43.255.0.0/21 43.255.8.0/22 43.255.16.0/22 43.255.48.0/22 43.255.64.0/20 43.255.84.0/22 43.255.96.0/22 43.255.108.0/22 43.255.144.0/22 43.255.168.0/22 43.255.176.0/22 43.255.184.0/22 43.255.192.0/22 43.255.200.0/21 43.255.208.0/21 43.255.224.0/21 43.255.232.0/22 43.255.244.0/22 45.12.227.0/24 45.40.192.0/18 45.65.16.0/20 45.94.120.0/22 45.112.132.0/22 45.112.188.0/22 45.112.208.0/20 45.112.228.0/22 45.112.232.0/21 45.113.12.0/22 45.113.16.0/20 45.113.40.0/22 45.113.52.0/22 45.113.56.0/22 45.113.72.0/22 45.113.144.0/21 45.113.168.0/22 45.113.176.0/22 45.113.184.0/22 45.113.200.0/21 45.113.208.0/20 45.113.228.0/22 45.113.240.0/22 45.113.252.0/22 45.114.0.0/22 45.114.12.0/22 45.114.32.0/22 45.114.40.0/22 45.114.52.0/22 45.114.96.0/22 45.114.104.0/21 45.114.124.0/22 45.114.136.0/22 45.114.196.0/22 45.114.200.0/22 45.114.228.0/22 45.114.237.0/24 45.114.238.0/23 45.114.252.0/22 45.115.44.0/22 45.115.100.0/22 45.115.120.0/22 45.115.132.0/22 45.115.144.0/22 45.115.156.0/22 45.115.164.0/22 45.115.200.0/22 45.115.212.0/22 45.115.228.0/22 45.115.236.0/22 45.115.244.0/22 45.115.248.0/22 45.116.12.0/22 45.116.16.0/22 45.116.24.0/22 45.116.32.0/21 45.116.52.0/22 45.116.96.0/21 45.116.140.0/22 45.116.152.0/22 45.116.208.0/22 45.117.8.0/22 45.117.20.0/22 45.117.68.0/22 45.117.124.0/22 45.117.252.0/22 45.119.52.0/22 45.119.60.0/22 45.119.64.0/21 45.119.72.0/22 45.119.104.0/22 45.119.116.0/22 45.119.232.0/22 45.120.100.0/22 45.120.140.0/22 45.120.164.0/22 45.120.180.128/27 45.120.220.0/22 45.120.240.0/22 45.121.20.0/22 45.121.52.0/22 45.121.64.0/21 45.121.72.0/22 45.121.92.0/22 45.121.96.0/22 45.121.104.0/22 45.121.172.0/22 45.121.176.0/22 45.121.212.0/22 45.121.240.0/20 45.122.0.0/19 45.122.32.0/21 45.122.40.0/22 45.122.60.0/22 45.122.64.0/19 45.122.96.0/20 45.122.112.0/21 45.122.160.0/19 45.122.192.0/20 45.122.208.0/21 45.122.216.0/22 45.123.28.0/22 45.123.32.0/21 45.123.44.0/22 45.123.48.0/20 45.123.64.0/20 45.123.80.0/21 45.123.88.0/22 45.123.120.0/22 45.123.128.0/21 45.123.136.0/22 45.123.148.0/22 45.123.152.0/21 45.123.164.0/22 45.123.168.0/21 45.123.176.0/21 45.123.184.0/22 45.123.204.0/22 45.123.212.0/22 45.123.224.0/19 45.124.0.0/22 45.124.20.0/22 45.124.28.0/22 45.124.32.0/21 45.124.44.0/22 45.124.68.0/22 45.124.76.0/22 45.124.80.0/22 45.124.100.0/22 45.124.124.0/22 45.124.172.0/22 45.124.176.0/22 45.124.208.0/22 45.124.248.0/21 45.125.12.0/22 45.125.16.0/22 45.125.24.0/21 45.125.32.0/22 45.125.44.0/22 45.125.52.0/22 45.125.56.0/22 45.125.76.0/22 45.125.80.0/20 45.125.96.0/21 45.125.104.0/22 45.125.136.0/22 45.126.48.0/21 45.126.100.0/22 45.126.108.0/22 45.126.112.0/21 45.126.120.0/22 45.126.212.0/22 45.126.220.0/22 45.127.8.0/21 45.127.96.0/22 45.127.116.0/22 45.127.124.0/22 45.127.128.0/22 45.127.144.0/21 45.127.156.0/22 45.127.216.0/22 45.136.44.0/24 45.248.8.0/22 45.248.80.0/21 45.248.88.0/22 45.248.96.0/20 45.248.128.0/21 45.248.204.0/22 45.248.208.0/20 45.248.224.0/19 45.249.0.0/21 45.249.12.0/22 45.249.16.0/20 45.249.32.0/21 45.249.92.0/22 45.249.112.0/22 45.249.180.0/22 45.249.188.0/22 45.249.192.0/20 45.249.208.0/21 45.250.12.0/22 45.250.16.0/22 45.250.28.0/22 45.250.32.0/21 45.250.40.0/22 45.250.76.0/22 45.250.80.0/20 45.250.96.0/22 45.250.104.0/21 45.250.112.0/20 45.250.128.0/20 45.250.144.0/21 45.250.152.0/22 45.250.164.0/22 45.250.180.0/22 45.250.184.0/21 45.250.192.0/22 45.251.0.0/22 45.251.8.0/22 45.251.16.0/21 45.251.52.0/22 45.251.84.0/22 45.251.88.0/21 45.251.96.0/21 45.251.120.0/21 45.251.136.0/21 45.251.144.0/20 45.251.160.0/19 45.251.192.0/19 45.251.224.0/22 45.251.240.0/22 45.252.0.0/19 45.252.32.0/20 45.252.48.0/22 45.252.60.0/22 45.252.84.0/22 45.252.88.0/21 45.252.96.0/19 45.252.128.0/19 45.252.160.0/20 45.252.176.0/22 45.252.192.0/19 45.252.224.0/21 45.252.232.0/22 45.253.0.0/18 45.253.64.0/20 45.253.80.0/21 45.253.92.0/22 45.253.96.0/20 45.253.112.0/21 45.253.120.0/22 45.253.130.0/23 45.253.132.0/22 45.253.136.0/21 45.253.144.0/20 45.253.160.0/19 45.253.192.0/18 45.254.0.0/19 45.254.40.0/22 45.254.48.0/20 45.254.64.0/18 45.254.128.0/18 45.254.192.0/19 45.254.224.0/21 45.254.236.0/22 45.254.240.0/22 45.254.248.0/22 45.255.0.0/17 45.255.132.0/22 45.255.136.0/21 45.255.144.0/20 45.255.160.0/19 45.255.192.0/19 45.255.224.0/20 45.255.240.0/21 45.255.248.0/22 46.248.24.0/23 47.92.0.0/14 47.96.0.0/11 49.4.0.0/14 49.51.0.0/16 49.52.0.0/14 49.64.0.0/11 49.112.0.0/13 49.120.0.0/14 49.128.0.0/24 49.128.2.0/23 49.128.4.0/22 49.140.0.0/15 49.152.0.0/14 49.208.0.0/14 49.220.0.0/14 49.232.0.0/14 49.239.0.0/18 49.239.192.0/18 49.246.224.0/19 52.80.0.0/14 52.94.249.0/27 52.130.0.0/15 54.222.0.0/15 54.231.208.0/20 54.240.224.0/24 57.92.96.0/20 58.14.0.0/15 58.16.0.0/13 58.24.0.0/15 58.30.0.0/15 58.32.0.0/11 58.65.232.0/21 58.66.0.0/15 58.68.128.0/17 58.82.0.0/17 58.83.0.0/16 58.87.64.0/18 58.99.128.0/17 58.100.0.0/15 58.116.0.0/14 58.128.0.0/13 58.144.0.0/16 58.154.0.0/15 58.192.0.0/11 58.240.0.0/12 59.32.0.0/11 59.64.0.0/12 59.80.0.0/14 59.107.0.0/16 59.108.0.0/14 59.151.0.0/17 59.152.16.0/20 59.152.32.0/21 59.152.64.0/20 59.152.112.0/21 59.153.4.0/22 59.153.32.0/22 59.153.60.0/22 59.153.64.0/21 59.153.72.0/22 59.153.92.0/22 59.153.116.0/22 59.153.136.0/22 59.153.152.0/21 59.153.164.0/22 59.153.168.0/21 59.153.176.0/20 59.153.192.0/22 59.155.0.0/16 59.172.0.0/14 59.191.0.0/17 59.191.240.0/20 59.192.0.0/10 60.0.0.0/11 60.55.0.0/16 60.63.0.0/16 60.160.0.0/11 60.194.0.0/15 60.200.0.0/13 60.208.0.0/12 60.232.0.0/15 60.235.0.0/16 60.245.128.0/17 60.247.0.0/16 60.252.0.0/16 60.253.128.0/17 60.255.0.0/16 61.4.80.0/20 61.4.176.0/20 61.8.160.0/20 61.14.212.0/22 61.14.216.0/21 61.14.240.0/21 61.28.0.0/17 61.29.128.0/18 61.29.192.0/19 61.29.224.0/20 61.45.128.0/18 61.45.224.0/20 61.47.128.0/18 61.48.0.0/13 61.87.192.0/18 61.128.0.0/10 61.232.0.0/14 61.236.0.0/15 61.240.0.0/14 62.234.0.0/16 64.85.27.0/24 68.79.0.0/18 69.230.192.0/18 69.231.128.0/18 69.234.192.0/18 69.235.128.0/18 71.131.192.0/18 71.132.0.0/18 71.136.64.0/18 71.137.0.0/18 72.163.240.0/23 72.163.248.0/22 81.68.0.0/14 82.156.0.0/15 87.254.207.0/24 93.183.14.0/24 93.183.18.0/24 94.191.0.0/17 101.0.0.0/22 101.1.0.0/22 101.2.172.0/22 101.4.0.0/14 101.16.0.0/12 101.32.0.0/12 101.48.0.0/15 101.50.8.0/21 101.50.56.0/22 101.52.0.0/16 101.53.100.0/22 101.54.0.0/16 101.55.224.0/21 101.64.0.0/13 101.72.0.0/14 101.76.0.0/15 101.78.0.0/22 101.78.32.0/19 101.80.0.0/12 101.96.0.0/21 101.96.8.0/22 101.96.16.0/20 101.96.128.0/17 101.99.96.0/19 101.101.64.0/19 101.101.100.0/24 101.101.102.0/23 101.101.104.0/21 101.101.112.0/20 101.102.64.0/19 101.102.100.0/23 101.102.102.0/24 101.102.104.0/21 101.102.112.0/20 101.104.0.0/14 101.110.64.0/19 101.110.96.0/20 101.110.116.0/22 101.110.120.0/21 101.120.0.0/14 101.124.0.0/15 101.126.0.0/16 101.128.0.0/22 101.128.8.0/21 101.128.16.0/20 101.128.32.0/19 101.129.0.0/16 101.130.0.0/15 101.132.0.0/14 101.144.0.0/12 101.192.0.0/13 101.200.0.0/15 101.203.128.0/19 101.203.160.0/21 101.203.172.0/22 101.203.176.0/20 101.204.0.0/14 101.224.0.0/13 101.232.0.0/15 101.234.64.0/21 101.234.76.0/22 101.234.80.0/20 101.234.96.0/19 101.236.0.0/14 101.240.0.0/13 101.248.0.0/15 101.251.0.0/22 101.251.8.0/21 101.251.16.0/20 101.251.32.0/19 101.251.64.0/18 101.251.128.0/17 101.252.0.0/15 101.254.0.0/16 102.176.130.0/24 103.1.8.0/22 103.1.20.0/22 103.1.24.0/22 103.1.72.0/22 103.1.88.0/22 103.1.168.0/22 103.2.108.0/22 103.2.156.0/22 103.2.164.0/22 103.2.200.0/21 103.2.208.0/21 103.3.84.0/22 103.3.88.0/21 103.3.96.0/19 103.3.128.0/20 103.3.148.0/22 103.3.152.0/21 103.4.56.0/22 103.4.168.0/22 103.4.184.0/22 103.4.224.0/22 103.5.36.0/22 103.5.52.0/22 103.5.56.0/22 103.5.152.0/22 103.5.168.0/22 103.5.192.0/22 103.5.252.0/22 103.6.76.0/22 103.6.108.0/22 103.6.120.0/22 103.6.220.0/22 103.6.228.0/22 103.7.4.0/22 103.7.28.0/22 103.7.140.0/22 103.7.212.0/22 103.7.216.0/21 103.8.0.0/21 103.8.8.0/22 103.8.32.0/22 103.8.52.0/22 103.8.68.0/22 103.8.108.0/22 103.8.156.0/22 103.8.200.0/21 103.8.220.0/22 103.9.8.0/22 103.9.24.0/22 103.9.108.0/22 103.9.152.0/22 103.9.192.0/22 103.9.248.0/21 103.10.0.0/22 103.10.16.0/22 103.10.84.0/22 103.10.111.0/24 103.10.140.0/22 103.11.16.0/22 103.11.168.0/22 103.11.180.0/22 103.12.32.0/22 103.12.68.0/22 103.12.92.0/22 103.12.136.0/22 103.12.184.0/22 103.12.232.0/22 103.13.12.0/22 103.13.124.0/22 103.13.144.0/22 103.13.196.0/22 103.13.220.0/22 103.13.244.0/22 103.14.32.0/22 103.14.84.0/22 103.14.100.0/22 103.14.132.0/22 103.14.136.0/22 103.14.156.0/22 103.14.240.0/22 103.15.4.0/22 103.15.8.0/22 103.15.16.0/22 103.15.96.0/22 103.15.200.0/22 103.16.52.0/22 103.16.80.0/21 103.16.88.0/22 103.16.108.0/22 103.16.124.0/22 103.17.40.0/22 103.17.64.0/22 103.17.120.0/22 103.17.136.0/22 103.17.160.0/22 103.17.204.0/22 103.17.228.0/22 103.18.192.0/22 103.18.208.0/21 103.18.224.0/22 103.19.0.0/22 103.19.12.0/22 103.19.40.0/21 103.19.64.0/21 103.19.72.0/22 103.19.232.0/22 103.20.12.0/22 103.20.32.0/22 103.20.44.0/22 103.20.68.0/22 103.20.112.0/22 103.20.128.0/22 103.20.160.0/22 103.20.248.0/22 103.21.112.0/21 103.21.136.0/21 103.21.176.0/22 103.21.208.0/22 103.21.240.0/22 103.22.0.0/18 103.22.64.0/19 103.22.100.0/22 103.22.104.0/21 103.22.112.0/20 103.22.188.0/22 103.22.228.0/22 103.22.252.0/22 103.23.8.0/22 103.23.56.0/22 103.23.160.0/21 103.23.176.0/22 103.23.228.0/22 103.24.24.0/22 103.24.116.0/22 103.24.128.0/22 103.24.144.0/22 103.24.176.0/22 103.24.184.0/22 103.24.220.0/22 103.24.228.0/22 103.24.248.0/21 103.25.8.0/23 103.25.20.0/22 103.25.24.0/21 103.25.32.0/21 103.25.40.0/22 103.25.48.0/22 103.25.64.0/21 103.25.148.0/22 103.25.156.0/22 103.25.216.0/22 103.26.0.0/22 103.26.64.0/22 103.26.76.0/22 103.26.116.0/22 103.26.132.0/22 103.26.156.0/22 103.26.160.0/22 103.26.228.0/22 103.26.240.0/22 103.27.4.0/22 103.27.12.0/22 103.27.24.0/22 103.27.56.0/22 103.27.96.0/22 103.27.184.0/22 103.27.208.0/21 103.27.240.0/22 103.28.4.0/22 103.28.8.0/22 103.28.184.0/22 103.28.204.0/22 103.28.212.0/22 103.29.16.0/22 103.29.128.0/21 103.29.136.0/22 103.30.20.0/22 103.30.96.0/22 103.30.148.0/22 103.30.200.0/22 103.30.228.0/22 103.30.236.0/22 103.31.0.0/22 103.31.48.0/20 103.31.64.0/21 103.31.72.0/24 103.31.148.0/22 103.31.160.0/22 103.31.168.0/22 103.31.200.0/22 103.31.236.0/22 103.32.0.0/15 103.34.0.0/16 103.35.0.0/19 103.35.32.0/20 103.35.48.0/22 103.35.104.0/22 103.35.116.0/22 103.35.180.0/22 103.35.200.0/22 103.35.220.0/22 103.36.28.0/22 103.36.36.0/22 103.36.56.0/21 103.36.64.0/22 103.36.72.0/22 103.36.96.0/22 103.36.132.0/22 103.36.136.0/22 103.36.160.0/19 103.36.192.0/19 103.36.224.0/20 103.36.240.0/21 103.37.0.0/22 103.37.12.0/22 103.37.16.0/22 103.37.24.0/22 103.37.44.0/22 103.37.52.0/22 103.37.56.0/22 103.37.72.0/22 103.37.100.0/22 103.37.104.0/22 103.37.124.0/22 103.37.136.0/21 103.37.144.0/20 103.37.160.0/21 103.37.172.0/22 103.37.176.0/22 103.37.188.0/22 103.37.208.0/20 103.37.248.0/21 103.38.0.0/22 103.38.32.0/22 103.38.40.0/21 103.38.56.0/22 103.38.76.0/22 103.38.84.0/22 103.38.92.0/22 103.38.96.0/22 103.38.116.0/22 103.38.132.0/22 103.38.140.0/22 103.38.220.0/22 103.38.224.0/21 103.38.232.0/22 103.38.252.0/22 103.39.16.0/22 103.39.64.0/22 103.39.88.0/22 103.39.100.0/22 103.39.104.0/21 103.39.160.0/19 103.39.200.0/21 103.39.208.0/20 103.39.224.0/21 103.39.232.0/22 103.40.12.0/22 103.40.16.0/20 103.40.32.0/20 103.40.88.0/22 103.40.100.0/22 103.40.112.0/22 103.40.192.0/22 103.40.212.0/22 103.40.220.0/22 103.40.228.0/22 103.40.232.0/21 103.40.240.0/20 103.41.0.0/22 103.41.16.0/22 103.41.52.0/22 103.41.140.0/22 103.41.148.0/22 103.41.152.0/22 103.41.160.0/21 103.41.220.0/22 103.41.224.0/21 103.41.232.0/22 103.42.8.0/22 103.42.24.0/21 103.42.32.0/22 103.42.64.0/21 103.42.76.0/22 103.42.104.0/22 103.42.180.0/22 103.42.232.0/22 103.43.16.0/22 103.43.26.0/23 103.43.84.0/22 103.43.96.0/21 103.43.104.0/22 103.43.124.0/22 103.43.184.0/22 103.43.192.0/21 103.43.208.0/22 103.43.220.0/22 103.43.224.0/22 103.43.232.0/22 103.43.240.0/22 103.44.56.0/22 103.44.80.0/22 103.44.88.0/22 103.44.120.0/21 103.44.132.0/22 103.44.144.0/22 103.44.152.0/22 103.44.168.0/22 103.44.176.0/20 103.44.192.0/20 103.44.224.0/22 103.44.236.0/22 103.44.240.0/20 103.45.0.0/18 103.45.72.0/21 103.45.80.0/20 103.45.96.0/19 103.45.128.0/18 103.45.192.0/19 103.45.224.0/22 103.45.248.0/22 103.46.0.0/22 103.46.12.0/22 103.46.16.0/20 103.46.32.0/19 103.46.64.0/18 103.46.128.0/21 103.46.136.0/22 103.46.152.0/21 103.46.160.0/20 103.46.176.0/21 103.46.244.0/22 103.46.248.0/22 103.47.4.0/22 103.47.20.0/22 103.47.36.0/22 103.47.40.0/22 103.47.48.0/22 103.47.80.0/22 103.47.96.0/22 103.47.108.0/22 103.47.116.0/22 103.47.120.0/22 103.47.136.0/21 103.47.212.0/22 103.48.52.0/22 103.48.92.0/22 103.48.144.0/20 103.48.202.0/23 103.48.216.0/21 103.48.224.0/20 103.48.240.0/21 103.49.12.0/22 103.49.20.0/22 103.49.72.0/21 103.49.92.0/22 103.49.96.0/22 103.49.108.0/22 103.49.128.0/22 103.49.176.0/21 103.49.196.0/22 103.49.248.0/22 103.50.36.0/22 103.50.44.0/22 103.50.48.0/20 103.50.64.0/21 103.50.72.0/22 103.50.92.0/22 103.50.108.0/22 103.50.112.0/20 103.50.132.0/22 103.50.136.0/21 103.50.172.0/22 103.50.176.0/20 103.50.192.0/21 103.50.200.0/22 103.50.220.0/22 103.50.224.0/20 103.50.240.0/21 103.50.248.0/22 103.52.40.0/22 103.52.72.0/21 103.52.80.0/21 103.52.96.0/21 103.52.104.0/22 103.52.160.0/21 103.52.172.0/22 103.52.176.0/22 103.52.184.0/22 103.52.196.0/22 103.53.4.0/22 103.53.64.0/21 103.53.92.0/22 103.53.100.0/22 103.53.124.0/22 103.53.128.0/20 103.53.144.0/22 103.53.160.0/22 103.53.180.0/22 103.53.204.0/22 103.53.208.0/21 103.53.216.0/22 103.53.236.0/22 103.53.248.0/22 103.54.8.0/22 103.54.48.0/22 103.54.60.0/22 103.54.160.0/21 103.54.212.0/22 103.54.228.0/22 103.54.240.0/22 103.55.24.0/22 103.55.80.0/22 103.55.120.0/22 103.55.152.0/22 103.55.172.0/22 103.55.204.0/22 103.55.208.0/22 103.55.228.0/22 103.55.236.0/22 103.55.240.0/22 103.56.8.0/22 103.56.16.0/21 103.56.32.0/22 103.56.52.0/22 103.56.56.0/21 103.56.72.0/21 103.56.140.0/22 103.56.152.0/22 103.56.184.0/22 103.56.200.0/22 103.57.12.0/22 103.57.52.0/22 103.57.56.0/22 103.57.76.0/22 103.57.136.0/22 103.57.196.0/22 103.58.24.0/22 103.59.76.0/22 103.59.100.0/22 103.59.112.0/20 103.59.128.0/22 103.59.148.0/22 103.59.164.0/22 103.60.32.0/22 103.60.44.0/22 103.60.164.0/22 103.60.228.0/22 103.60.236.0/22 103.61.60.0/22 103.61.104.0/22 103.61.140.0/22 103.61.152.0/21 103.61.160.0/22 103.61.172.0/22 103.61.176.0/22 103.61.184.0/21 103.62.24.0/22 103.62.52.0/22 103.62.72.0/21 103.62.80.0/21 103.62.88.0/22 103.62.96.0/19 103.62.128.0/21 103.62.156.0/22 103.62.160.0/19 103.62.192.0/22 103.62.204.0/22 103.62.208.0/20 103.62.224.0/22 103.63.32.0/19 103.63.64.0/20 103.63.80.0/21 103.63.88.0/22 103.63.140.0/22 103.63.144.0/22 103.63.152.0/22 103.63.160.0/20 103.63.176.0/21 103.63.184.0/22 103.63.192.0/20 103.63.208.0/22 103.63.240.0/20 103.64.0.0/21 103.64.24.0/21 103.64.32.0/19 103.64.64.0/18 103.64.140.0/22 103.64.144.0/22 103.64.152.0/21 103.64.160.0/19 103.64.192.0/18 103.65.0.0/20 103.65.16.0/22 103.65.36.0/22 103.65.40.0/22 103.65.48.0/20 103.65.64.0/19 103.65.100.0/22 103.65.104.0/21 103.65.112.0/20 103.65.128.0/21 103.65.136.0/22 103.65.144.0/20 103.65.160.0/20 103.66.32.0/22 103.66.40.0/22 103.66.92.0/22 103.66.108.0/22 103.66.200.0/22 103.66.216.0/22 103.66.240.0/20 103.67.0.0/21 103.67.8.0/22 103.67.40.0/21 103.67.48.0/20 103.67.64.0/18 103.67.128.0/20 103.67.144.0/21 103.67.172.0/22 103.67.192.0/22 103.67.212.0/22 103.67.252.0/22 103.68.64.0/22 103.68.88.0/22 103.68.100.0/22 103.68.128.0/22 103.68.192.0/22 103.69.16.0/22 103.69.116.0/22 103.69.132.0/22 103.69.152.0/22 103.69.212.0/22 103.70.8.0/22 103.70.148.0/22 103.70.184.0/22 103.70.220.0/22 103.70.224.0/22 103.70.236.0/22 103.70.252.0/22 103.71.0.0/22 103.71.32.0/22 103.71.48.0/22 103.71.68.0/22 103.71.72.0/22 103.71.80.0/21 103.71.88.0/22 103.71.120.0/21 103.71.128.0/22 103.71.144.0/22 103.71.196.0/22 103.71.200.0/22 103.71.232.0/22 103.72.12.0/22 103.72.16.0/20 103.72.32.0/20 103.72.48.0/21 103.72.112.0/20 103.72.128.0/21 103.72.144.0/21 103.72.172.0/22 103.72.180.0/22 103.72.224.0/19 103.73.0.0/19 103.73.48.0/22 103.73.88.0/22 103.73.96.0/22 103.73.116.0/22 103.73.120.0/22 103.73.128.0/20 103.73.144.0/22 103.73.168.0/22 103.73.176.0/22 103.73.204.0/22 103.73.208.0/22 103.73.240.0/21 103.73.248.0/22 103.74.24.0/21 103.74.32.0/20 103.74.48.0/22 103.74.56.0/21 103.74.80.0/22 103.74.124.0/22 103.74.148.0/22 103.74.152.0/21 103.74.204.0/22 103.74.232.0/22 103.75.16.0/22 103.75.87.0/24 103.75.88.0/21 103.75.104.0/21 103.75.112.0/22 103.75.120.0/22 103.75.128.0/22 103.75.144.0/22 103.75.152.0/22 103.75.236.0/24 103.76.60.0/22 103.76.64.0/21 103.76.72.0/22 103.76.84.0/22 103.76.92.0/22 103.76.216.0/21 103.76.224.0/22 103.77.28.0/22 103.77.52.0/22 103.77.56.0/22 103.77.72.0/22 103.77.88.0/21 103.77.132.0/22 103.77.148.0/22 103.77.220.0/22 103.78.56.0/21 103.78.64.0/21 103.78.124.0/22 103.78.172.0/22 103.78.176.0/22 103.78.196.0/22 103.78.228.0/22 103.79.24.0/21 103.79.36.0/22 103.79.40.0/21 103.79.52.0/22 103.79.56.0/21 103.79.64.0/21 103.79.80.0/21 103.79.120.0/22 103.79.136.0/22 103.79.188.0/22 103.79.192.0/20 103.79.208.0/21 103.79.240.0/22 103.80.24.0/21 103.80.44.0/22 103.80.72.0/22 103.80.176.0/21 103.80.184.0/22 103.80.192.0/22 103.80.200.0/22 103.80.232.0/22 103.81.4.0/22 103.81.8.0/22 103.81.16.0/21 103.81.44.0/22 103.81.48.0/22 103.81.96.0/22 103.81.120.0/22 103.81.148.0/22 103.81.164.0/22 103.81.168.0/22 103.81.183.0/24 103.81.184.0/22 103.81.200.0/22 103.81.232.0/22 103.82.52.0/22 103.82.60.0/22 103.82.68.0/22 103.82.84.0/22 103.82.104.0/22 103.82.224.0/22 103.82.236.0/22 103.83.44.0/22 103.83.52.0/22 103.83.60.0/22 103.83.64.0/22 103.83.72.0/22 103.83.112.0/22 103.83.120.0/22 103.83.132.0/22 103.83.180.0/22 103.84.0.0/22 103.84.12.0/22 103.84.16.0/20 103.84.48.0/22 103.84.56.0/22 103.84.64.0/22 103.84.72.0/22 103.84.92.0/22 103.84.108.0/22 103.84.136.0/22 103.85.20.0/22 103.85.24.0/22 103.85.44.0/22 103.85.48.0/21 103.85.56.0/22 103.85.84.0/22 103.85.136.0/22 103.85.144.0/22 103.85.164.0/22 103.85.168.0/21 103.85.176.0/22 103.85.224.0/22 103.86.28.0/22 103.86.32.0/22 103.86.44.0/22 103.86.60.0/22 103.86.68.0/22 103.86.80.0/21 103.86.88.0/22 103.86.129.0/24 103.86.204.0/22 103.86.208.0/20 103.86.224.0/19 103.87.0.0/21 103.87.20.0/22 103.87.32.0/22 103.87.72.0/22 103.87.96.0/22 103.87.132.0/22 103.87.180.0/22 103.87.224.0/22 103.88.4.0/22 103.88.8.0/21 103.88.16.0/21 103.88.32.0/21 103.88.60.0/22 103.88.64.0/22 103.88.72.0/22 103.88.96.0/21 103.88.152.0/23 103.88.164.0/22 103.88.176.0/22 103.88.184.0/21 103.88.212.0/22 103.89.28.0/22 103.89.96.0/20 103.89.112.0/21 103.89.148.0/22 103.89.172.0/22 103.89.184.0/21 103.89.192.0/19 103.89.224.0/21 103.90.52.0/22 103.90.92.0/22 103.90.100.0/22 103.90.104.0/21 103.90.112.0/20 103.90.128.0/21 103.90.152.0/22 103.90.168.0/22 103.90.173.0/24 103.90.176.0/22 103.90.188.0/22 103.90.192.0/22 103.91.36.0/22 103.91.40.0/22 103.91.108.0/22 103.91.152.0/22 103.91.176.0/22 103.91.200.0/22 103.91.208.0/21 103.91.219.0/24 103.91.236.0/22 103.91.252.0/22 103.92.0.0/20 103.92.48.0/20 103.92.64.0/20 103.92.80.0/22 103.92.86.0/24 103.92.88.0/22 103.92.108.0/22 103.92.124.0/22 103.92.128.0/24 103.92.132.0/22 103.92.156.0/22 103.92.164.0/22 103.92.168.0/21 103.92.176.0/20 103.92.192.0/22 103.92.236.0/22 103.92.240.0/20 103.93.0.0/21 103.93.28.0/22 103.93.76.0/22 103.93.84.0/22 103.93.121.0/24 103.93.152.0/22 103.93.180.0/22 103.93.204.0/22 103.94.12.0/22 103.94.20.0/22 103.94.28.0/22 103.94.32.0/20 103.94.72.0/22 103.94.88.0/22 103.94.116.0/22 103.94.160.0/22 103.94.180.0/22 103.94.200.0/22 103.95.28.0/22 103.95.52.0/22 103.95.64.0/21 103.95.88.0/21 103.95.116.0/22 103.95.128.0/22 103.95.136.0/21 103.95.144.0/22 103.95.152.0/22 103.95.207.0/24 103.95.216.0/21 103.95.224.0/22 103.95.236.0/22 103.95.240.0/20 103.96.0.0/22 103.96.8.0/22 103.96.80.0/22 103.96.124.0/22 103.96.136.0/22 103.96.140.0/24 103.96.148.0/22 103.96.152.0/21 103.96.160.0/19 103.96.192.0/20 103.96.208.0/21 103.96.216.0/22 103.97.8.0/21 103.97.16.0/20 103.97.32.0/21 103.97.40.0/22 103.97.56.0/21 103.97.64.0/21 103.97.72.0/22 103.97.80.0/22 103.97.112.0/21 103.97.128.0/22 103.97.144.0/21 103.97.188.0/22 103.97.192.0/22 103.97.224.0/22 103.97.228.0/23 103.98.28.0/23 103.98.40.0/21 103.98.48.0/22 103.98.56.0/22 103.98.80.0/22 103.98.88.0/21 103.98.96.0/21 103.98.124.0/22 103.98.136.0/21 103.98.144.0/22 103.98.164.0/22 103.98.168.0/22 103.98.180.0/22 103.98.196.0/22 103.98.216.0/21 103.98.224.0/21 103.98.232.0/22 103.98.240.0/20 103.99.40.0/23 103.99.52.0/22 103.99.56.0/21 103.99.76.0/22 103.99.104.0/22 103.99.116.0/22 103.99.120.0/22 103.99.132.0/22 103.99.136.0/21 103.99.144.0/22 103.99.152.0/22 103.99.220.0/22 103.99.232.0/21 103.100.0.0/22 103.100.32.0/22 103.100.40.0/22 103.100.48.0/20 103.100.64.0/21 103.100.88.0/22 103.100.116.0/22 103.100.140.0/22 103.100.144.0/22 103.100.236.0/22 103.100.240.0/22 103.100.248.0/21 103.101.4.0/22 103.101.8.0/21 103.101.28.0/22 103.101.60.0/22 103.101.120.0/21 103.101.144.0/21 103.101.153.0/24 103.101.180.0/22 103.101.184.0/22 103.102.76.0/22 103.102.80.0/22 103.102.168.0/21 103.102.180.0/22 103.102.184.0/21 103.102.192.0/21 103.102.200.0/22 103.102.208.0/21 103.103.12.0/22 103.103.16.0/22 103.103.36.0/22 103.103.68.0/22 103.103.72.0/22 103.103.176.0/22 103.103.188.0/22 103.103.200.0/21 103.103.220.0/22 103.103.224.0/21 103.103.232.0/22 103.103.248.0/21 103.104.0.0/21 103.104.36.0/22 103.104.40.0/22 103.104.64.0/22 103.104.104.0/22 103.104.152.0/22 103.104.168.0/21 103.104.188.0/22 103.104.198.0/23 103.104.252.0/22 103.105.0.0/21 103.105.12.0/22 103.105.16.0/22 103.105.23.0/24 103.105.56.0/21 103.105.116.0/22 103.105.132.0/22 103.105.180.0/22 103.105.184.0/22 103.105.200.0/21 103.105.220.0/22 103.106.36.0/22 103.106.40.0/21 103.106.60.0/22 103.106.68.0/22 103.106.96.0/22 103.106.120.0/22 103.106.128.0/21 103.106.160.0/22 103.106.188.0/22 103.106.196.0/22 103.106.202.0/23 103.106.212.0/22 103.106.244.0/22 103.106.252.0/22 103.107.0.0/22 103.107.8.0/24 103.107.28.0/22 103.107.32.0/22 103.107.44.0/22 103.107.72.0/22 103.107.108.0/22 103.107.164.0/22 103.107.168.0/22 103.107.188.0/22 103.107.192.0/22 103.107.208.0/20 103.108.52.0/22 103.108.64.0/22 103.108.160.0/21 103.108.184.0/23 103.108.188.0/23 103.108.192.0/21 103.108.208.0/21 103.108.224.0/22 103.108.244.0/22 103.108.251.0/24 103.109.20.0/22 103.109.48.0/22 103.109.88.0/22 103.109.106.0/23 103.109.248.0/22 103.110.32.0/22 103.110.80.0/23 103.110.92.0/22 103.110.100.0/22 103.110.116.0/22 103.110.127.0/24 103.110.128.0/23 103.110.131.0/24 103.110.132.0/22 103.110.136.0/22 103.110.152.0/21 103.110.188.0/22 103.110.204.0/22 103.111.38.0/23 103.111.64.0/22 103.111.172.0/22 103.111.252.0/22 103.112.28.0/22 103.112.68.0/22 103.112.72.0/22 103.112.88.0/21 103.112.96.0/22 103.112.108.0/22 103.112.112.0/21 103.112.140.0/22 103.112.172.0/22 103.112.184.0/22 103.112.208.0/22 103.113.4.0/22 103.113.92.0/22 103.113.144.0/22 103.113.220.0/22 103.113.232.0/21 103.114.4.0/22 103.114.28.0/22 103.114.68.0/22 103.114.72.0/22 103.114.100.0/22 103.114.132.0/22 103.114.148.0/22 103.114.156.0/22 103.114.176.0/22 103.114.212.0/22 103.114.236.0/22 103.114.240.0/22 103.115.16.0/22 103.115.40.0/21 103.115.48.0/20 103.115.64.0/21 103.115.92.0/22 103.115.120.0/22 103.115.148.0/22 103.115.204.0/23 103.115.248.0/22 103.116.20.0/22 103.116.40.0/22 103.116.64.0/22 103.116.72.0/21 103.116.92.0/22 103.116.120.0/22 103.116.128.0/22 103.116.132.0/23 103.116.148.0/22 103.116.184.0/22 103.116.206.0/23 103.116.220.0/22 103.116.224.0/21 103.117.16.0/22 103.117.72.0/22 103.117.88.0/22 103.117.132.0/22 103.117.136.0/22 103.117.188.0/22 103.117.220.0/22 103.118.19.0/24 103.118.36.0/22 103.118.52.0/22 103.118.56.0/21 103.118.64.0/21 103.118.72.0/22 103.118.88.0/22 103.118.173.0/24 103.118.192.0/19 103.118.240.0/20 103.119.0.0/22 103.119.12.0/22 103.119.16.0/22 103.119.28.0/22 103.119.44.0/22 103.119.104.0/22 103.119.115.0/24 103.119.156.0/22 103.119.180.0/22 103.119.200.0/22 103.119.224.0/22 103.120.52.0/22 103.120.72.0/22 103.120.76.0/24 103.120.88.0/22 103.120.96.0/21 103.120.140.0/22 103.120.196.0/22 103.120.224.0/22 103.121.52.0/22 103.121.92.0/22 103.121.160.0/21 103.121.250.0/24 103.121.252.0/22 103.122.48.0/22 103.122.176.0/22 103.122.192.0/22 103.122.240.0/22 103.123.4.0/22 103.123.56.0/22 103.123.88.0/21 103.123.116.0/22 103.123.160.0/22 103.123.176.0/22 103.123.200.0/21 103.123.208.0/21 103.124.24.0/22 103.124.48.0/22 103.124.64.0/22 103.124.212.0/22 103.124.216.0/22 103.125.20.0/22 103.125.44.0/22 103.125.132.0/22 103.125.164.0/22 103.125.196.0/22 103.125.236.0/22 103.125.248.0/22 103.126.0.0/22 103.126.16.0/22 103.126.44.0/22 103.126.100.0/22 103.126.124.0/22 103.126.128.0/21 103.126.208.0/22 103.126.241.0/24 103.129.52.0/22 103.129.148.0/22 103.130.132.0/22 103.130.152.0/24 103.130.160.0/22 103.130.228.0/22 103.131.20.0/22 103.131.36.0/22 103.131.152.0/22 103.131.168.0/22 103.131.176.0/22 103.131.224.0/21 103.131.240.0/22 103.132.60.0/22 103.132.64.0/20 103.132.80.0/22 103.132.104.0/21 103.132.112.0/21 103.132.120.0/22 103.132.160.0/21 103.132.188.0/22 103.132.208.0/21 103.132.234.0/23 103.133.12.0/22 103.133.40.0/22 103.133.128.0/22 103.133.136.0/22 103.133.176.0/22 103.133.232.0/22 103.134.12.0/24 103.134.196.0/22 103.135.80.0/22 103.135.124.0/22 103.135.148.0/22 103.135.156.0/22 103.135.160.0/21 103.135.176.0/22 103.135.184.0/22 103.135.192.0/21 103.135.236.0/22 103.136.128.0/22 103.136.232.0/22 103.137.57.0/24 103.137.58.0/23 103.137.60.0/24 103.137.76.0/22 103.137.136.0/23 103.137.149.0/24 103.137.180.0/22 103.137.236.0/22 103.138.2.0/23 103.138.12.0/23 103.138.80.0/22 103.138.134.0/23 103.138.156.0/23 103.138.208.0/23 103.138.220.0/23 103.138.246.0/23 103.138.248.0/23 103.139.0.0/22 103.139.22.0/23 103.139.113.0/24 103.139.134.0/23 103.139.136.0/23 103.139.172.0/23 103.139.200.0/23 103.139.204.0/23 103.139.212.0/23 103.140.8.0/23 103.140.14.0/23 103.140.46.0/23 103.140.70.0/23 103.140.126.0/23 103.140.140.0/23 103.140.144.0/23 103.140.152.0/23 103.140.192.0/22 103.140.228.0/23 103.141.10.0/23 103.141.36.0/23 103.141.58.0/23 103.141.128.0/23 103.141.186.0/23 103.141.190.0/23 103.141.242.0/23 103.142.0.0/23 103.142.28.0/23 103.192.0.0/19 103.192.48.0/21 103.192.56.0/22 103.192.84.0/22 103.192.88.0/21 103.192.96.0/20 103.192.112.0/22 103.192.128.0/20 103.192.144.0/22 103.192.164.0/22 103.192.188.0/22 103.192.208.0/21 103.192.216.0/22 103.192.252.0/22 103.193.40.0/21 103.193.120.0/21 103.193.140.0/22 103.193.144.0/21 103.193.160.0/22 103.193.188.0/22 103.193.192.0/22 103.193.212.0/22 103.193.216.0/21 103.193.224.0/20 103.193.240.0/22 103.194.16.0/22 103.194.230.0/23 103.195.104.0/22 103.195.112.0/22 103.195.136.0/22 103.195.148.0/22 103.195.152.0/22 103.195.160.0/22 103.195.192.0/22 103.196.60.0/22 103.196.64.0/22 103.196.72.0/22 103.196.88.0/21 103.196.96.0/22 103.196.168.0/22 103.196.185.0/24 103.196.186.0/23 103.196.204.0/22 103.197.180.0/22 103.197.228.0/22 103.197.253.0/24 103.197.254.0/23 103.198.20.0/22 103.198.60.0/22 103.198.64.0/22 103.198.72.0/22 103.198.124.0/22 103.198.156.0/22 103.198.180.0/22 103.198.196.0/22 103.198.200.0/22 103.198.216.0/21 103.198.224.0/20 103.198.240.0/21 103.199.164.0/22 103.199.196.0/22 103.199.228.0/22 103.199.248.0/21 103.200.28.0/22 103.200.32.0/22 103.200.52.0/22 103.200.64.0/21 103.200.136.0/21 103.200.144.0/20 103.200.160.0/19 103.200.192.0/22 103.200.220.0/22 103.200.224.0/19 103.201.0.0/20 103.201.16.0/21 103.201.28.0/22 103.201.32.0/19 103.201.64.0/22 103.201.76.0/22 103.201.80.0/20 103.201.96.0/20 103.201.112.0/21 103.201.120.0/22 103.201.152.0/21 103.201.160.0/19 103.201.192.0/18 103.202.0.0/19 103.202.32.0/20 103.202.56.0/21 103.202.64.0/18 103.202.128.0/20 103.202.144.0/22 103.202.152.0/21 103.202.160.0/19 103.202.192.0/20 103.202.212.0/22 103.202.228.0/22 103.202.236.0/22 103.202.240.0/20 103.203.0.0/19 103.203.32.0/22 103.203.52.0/22 103.203.56.0/22 103.203.96.0/19 103.203.128.0/22 103.203.140.0/22 103.203.164.0/22 103.203.168.0/22 103.203.192.0/22 103.203.200.0/22 103.203.212.0/22 103.203.216.0/22 103.204.24.0/22 103.204.72.0/22 103.204.88.0/22 103.204.112.0/22 103.204.136.0/21 103.204.144.0/21 103.204.152.0/22 103.204.196.0/22 103.204.232.0/21 103.205.4.0/22 103.205.8.0/22 103.205.40.0/21 103.205.52.0/22 103.205.108.0/22 103.205.116.0/22 103.205.120.0/22 103.205.136.0/22 103.205.162.0/24 103.205.188.0/22 103.205.192.0/21 103.205.200.0/22 103.205.236.0/22 103.205.248.0/21 103.206.0.0/22 103.206.44.0/22 103.206.108.0/22 103.206.148.0/22 103.207.48.0/22 103.207.104.0/22 103.207.164.0/22 103.207.184.0/21 103.207.192.0/20 103.207.208.0/21 103.207.220.0/22 103.207.228.0/22 103.207.232.0/22 103.208.12.0/22 103.208.16.0/22 103.208.28.0/22 103.208.40.0/21 103.208.48.0/22 103.208.148.0/22 103.209.112.0/22 103.209.136.0/22 103.209.200.0/22 103.209.208.0/22 103.209.216.0/22 103.210.0.0/22 103.210.20.0/22 103.210.96.0/22 103.210.156.0/22 103.210.160.0/19 103.210.216.0/22 103.211.44.0/22 103.211.96.0/21 103.211.156.0/22 103.211.164.0/22 103.211.168.0/22 103.211.192.0/22 103.211.220.0/22 103.211.224.0/22 103.211.248.0/22 103.212.0.0/20 103.212.32.0/22 103.212.44.0/22 103.212.48.0/22 103.212.84.0/22 103.212.100.0/22 103.212.104.0/21 103.212.148.0/22 103.212.164.0/22 103.212.196.0/22 103.212.200.0/22 103.212.228.0/22 103.212.252.0/22 103.213.40.0/21 103.213.48.0/20 103.213.64.0/19 103.213.96.0/22 103.213.132.0/22 103.213.136.0/21 103.213.144.0/20 103.213.160.0/19 103.213.248.0/21 103.214.32.0/22 103.214.48.0/22 103.214.84.0/22 103.214.168.0/22 103.214.212.0/22 103.214.240.0/21 103.215.28.0/22 103.215.32.0/21 103.215.44.0/22 103.215.48.0/22 103.215.100.0/22 103.215.104.0/21 103.215.116.0/22 103.215.120.0/22 103.215.140.0/22 103.215.184.0/22 103.215.228.0/22 103.216.4.0/22 103.216.8.0/21 103.216.16.0/20 103.216.32.0/20 103.216.64.0/22 103.216.108.0/22 103.216.136.0/22 103.216.152.0/22 103.216.224.0/21 103.216.240.0/20 103.217.0.0/18 103.217.168.0/22 103.217.180.0/22 103.217.184.0/21 103.217.192.0/20 103.218.0.0/22 103.218.8.0/21 103.218.16.0/21 103.218.28.0/22 103.218.32.0/19 103.218.64.0/19 103.218.184.0/22 103.218.192.0/20 103.218.208.0/21 103.218.216.0/22 103.219.24.0/21 103.219.32.0/21 103.219.64.0/22 103.219.84.0/22 103.219.88.0/21 103.219.96.0/21 103.219.176.0/22 103.219.184.0/22 103.220.48.0/20 103.220.64.0/22 103.220.92.0/22 103.220.96.0/20 103.220.116.0/22 103.220.120.0/21 103.220.128.0/20 103.220.144.0/21 103.220.152.0/22 103.220.160.0/19 103.220.192.0/21 103.220.200.0/22 103.220.240.0/20 103.221.0.0/19 103.221.32.0/20 103.221.48.0/22 103.221.88.0/21 103.221.96.0/19 103.221.128.0/18 103.221.192.0/20 103.222.0.0/20 103.222.16.0/22 103.222.24.0/21 103.222.32.0/19 103.222.64.0/18 103.222.128.0/18 103.222.192.0/19 103.222.224.0/21 103.222.232.0/22 103.222.240.0/21 103.223.16.0/20 103.223.32.0/19 103.223.64.0/18 103.223.128.0/21 103.223.140.0/22 103.223.144.0/20 103.223.160.0/20 103.223.176.0/21 103.223.188.0/22 103.223.192.0/18 103.224.0.0/22 103.224.40.0/21 103.224.60.0/22 103.224.80.0/22 103.224.220.0/22 103.224.224.0/21 103.224.232.0/22 103.225.84.0/22 103.226.16.0/22 103.226.40.0/22 103.226.56.0/21 103.226.80.0/22 103.226.116.0/22 103.226.132.0/22 103.226.156.0/22 103.226.180.0/22 103.226.196.0/22 103.227.48.0/22 103.227.72.0/21 103.227.80.0/22 103.227.100.0/22 103.227.120.0/22 103.227.132.0/22 103.227.136.0/22 103.227.196.0/22 103.227.204.0/22 103.227.212.0/22 103.227.228.0/22 103.228.12.0/22 103.228.28.0/22 103.228.68.0/22 103.228.88.0/22 103.228.128.0/22 103.228.136.0/22 103.228.160.0/22 103.228.176.0/22 103.228.204.0/22 103.228.208.0/22 103.228.228.0/22 103.228.232.0/22 103.229.20.0/22 103.229.60.0/22 103.229.136.0/22 103.229.148.0/22 103.229.172.0/22 103.229.212.0/22 103.229.216.0/21 103.229.228.0/22 103.229.236.0/22 103.229.240.0/22 103.230.0.0/22 103.230.28.0/22 103.230.40.0/21 103.230.96.0/22 103.230.196.0/22 103.230.200.0/21 103.230.212.0/22 103.230.236.0/22 103.231.16.0/21 103.231.64.0/21 103.231.144.0/22 103.231.180.0/22 103.231.184.0/22 103.231.244.0/22 103.232.4.0/22 103.232.144.0/22 103.232.188.0/22 103.232.212.0/22 103.233.4.0/22 103.233.44.0/22 103.233.52.0/22 103.233.104.0/22 103.233.128.0/22 103.233.136.0/22 103.233.228.0/22 103.234.0.0/22 103.234.20.0/22 103.234.56.0/22 103.234.124.0/22 103.234.128.0/22 103.234.172.0/22 103.234.180.0/22 103.234.244.0/22 103.235.16.0/22 103.235.48.0/22 103.235.56.0/21 103.235.80.0/21 103.235.128.0/20 103.235.144.0/21 103.235.184.0/22 103.235.192.0/22 103.235.200.0/22 103.235.220.0/22 103.235.224.0/19 103.236.0.0/18 103.236.64.0/19 103.236.96.0/22 103.236.120.0/22 103.236.184.0/22 103.236.220.0/22 103.236.232.0/22 103.236.240.0/20 103.237.0.0/20 103.237.24.0/21 103.237.68.0/22 103.237.88.0/22 103.237.152.0/22 103.237.176.0/20 103.237.192.0/18 103.238.0.0/21 103.238.16.0/20 103.238.32.0/20 103.238.48.0/21 103.238.56.0/22 103.238.88.0/21 103.238.96.0/22 103.238.132.0/22 103.238.140.0/22 103.238.144.0/22 103.238.160.0/19 103.238.196.0/22 103.238.204.0/22 103.238.252.0/22 103.239.0.0/22 103.239.44.0/22 103.239.68.0/22 103.239.96.0/22 103.239.152.0/21 103.239.176.0/21 103.239.184.0/22 103.239.192.0/21 103.239.204.0/22 103.239.208.0/22 103.239.224.0/22 103.239.244.0/22 103.240.16.0/22 103.240.36.0/22 103.240.72.0/22 103.240.84.0/22 103.240.124.0/22 103.240.156.0/22 103.240.172.0/22 103.240.188.0/22 103.240.244.0/22 103.241.12.0/22 103.241.72.0/22 103.241.92.0/22 103.241.96.0/22 103.241.160.0/22 103.241.184.0/21 103.241.220.0/22 103.242.64.0/22 103.242.128.0/21 103.242.160.0/22 103.242.168.0/21 103.242.176.0/22 103.242.200.0/22 103.242.212.0/22 103.242.220.0/22 103.242.240.0/22 103.243.136.0/22 103.243.252.0/22 103.244.16.0/22 103.244.58.0/23 103.244.60.0/22 103.244.64.0/20 103.244.80.0/21 103.244.116.0/22 103.244.164.0/22 103.244.232.0/22 103.244.252.0/22 103.245.23.0/24 103.245.52.0/22 103.245.60.0/22 103.245.80.0/22 103.245.124.0/22 103.245.128.0/22 103.246.8.0/21 103.246.120.0/21 103.246.132.0/22 103.246.152.0/21 103.247.168.0/21 103.247.176.0/22 103.247.200.0/22 103.247.212.0/22 103.248.0.0/23 103.248.64.0/22 103.248.100.0/22 103.248.124.0/22 103.248.152.0/22 103.248.168.0/22 103.248.192.0/22 103.248.212.0/22 103.248.220.0/22 103.248.224.0/21 103.249.8.0/21 103.249.52.0/22 103.249.104.0/22 103.249.128.0/22 103.249.136.0/22 103.249.144.0/22 103.249.164.0/22 103.249.168.0/21 103.249.176.0/22 103.249.188.0/22 103.249.192.0/22 103.249.244.0/22 103.249.252.0/22 103.250.32.0/22 103.250.104.0/22 103.250.124.0/22 103.250.180.0/22 103.250.192.0/22 103.250.216.0/22 103.250.224.0/22 103.250.236.0/22 103.250.248.0/21 103.251.32.0/21 103.251.84.0/22 103.251.96.0/22 103.251.124.0/22 103.251.128.0/22 103.251.160.0/22 103.251.192.0/22 103.251.204.0/22 103.251.236.0/22 103.251.240.0/22 103.252.28.0/22 103.252.36.0/22 103.252.64.0/22 103.252.96.0/22 103.252.104.0/22 103.252.172.0/22 103.252.204.0/22 103.252.208.0/22 103.252.232.0/22 103.252.248.0/22 103.253.4.0/22 103.253.60.0/22 103.253.204.0/22 103.253.220.0/22 103.253.224.0/22 103.253.232.0/22 103.254.8.0/22 103.254.20.0/22 103.254.64.0/20 103.254.112.0/22 103.254.176.0/22 103.254.188.0/22 103.254.196.0/24 103.254.220.0/22 103.255.56.0/22 103.255.68.0/22 103.255.88.0/21 103.255.136.0/21 103.255.184.0/22 103.255.200.0/22 103.255.208.0/21 103.255.228.0/22 104.222.196.0/24 106.0.0.0/24 106.0.2.0/23 106.0.4.0/22 106.0.8.0/21 106.0.16.0/20 106.0.44.0/22 106.0.64.0/18 106.2.0.0/15 106.4.0.0/14 106.8.0.0/15 106.11.0.0/16 106.12.0.0/14 106.16.0.0/12 106.32.0.0/12 106.48.0.0/15 106.50.0.0/16 106.52.0.0/14 106.56.0.0/13 106.74.0.0/15 106.80.0.0/12 106.108.0.0/14 106.112.0.0/12 106.224.0.0/12 109.71.4.0/24 109.244.0.0/16 110.6.0.0/15 110.16.0.0/14 110.34.40.0/21 110.40.0.0/14 110.44.12.0/22 110.44.144.0/20 110.48.0.0/16 110.51.0.0/16 110.52.0.0/15 110.56.0.0/13 110.64.0.0/15 110.72.0.0/15 110.75.0.0/16 110.76.0.0/18 110.76.132.0/22 110.76.156.0/22 110.76.184.0/22 110.76.192.0/18 110.77.0.0/17 110.80.0.0/13 110.88.0.0/14 110.92.68.0/22 110.93.32.0/19 110.94.0.0/15 110.96.0.0/11 110.152.0.0/14 110.156.0.0/15 110.165.32.0/19 110.166.0.0/15 110.172.192.0/18 110.173.0.0/19 110.173.32.0/20 110.173.64.0/18 110.173.192.0/19 110.176.0.0/12 110.192.0.0/11 110.228.0.0/14 110.232.32.0/19 110.236.0.0/15 110.240.0.0/12 111.0.0.0/10 111.66.0.0/16 111.67.192.0/20 111.68.64.0/19 111.72.0.0/13 111.85.0.0/16 111.91.192.0/19 111.92.248.0/21 111.112.0.0/14 111.116.0.0/15 111.118.200.0/21 111.119.64.0/18 111.119.128.0/19 111.120.0.0/14 111.124.0.0/16 111.126.0.0/15 111.128.0.0/11 111.160.0.0/13 111.170.0.0/16 111.172.0.0/14 111.176.0.0/13 111.186.0.0/15 111.192.0.0/12 111.208.0.0/13 111.221.28.0/24 111.221.128.0/17 111.222.0.0/16 111.223.4.0/22 111.223.8.0/21 111.223.16.0/22 111.223.240.0/22 111.223.248.0/22 111.224.0.0/13 111.235.96.0/19 111.235.156.0/22 111.235.160.0/19 112.0.0.0/10 112.64.0.0/14 112.73.0.0/16 112.74.0.0/15 112.80.0.0/12 112.96.0.0/13 112.109.128.0/17 112.111.0.0/16 112.112.0.0/14 112.116.0.0/15 112.122.0.0/15 112.124.0.0/14 112.128.0.0/14 112.132.0.0/16 112.137.48.0/21 112.192.0.0/14 112.224.0.0/11 113.0.0.0/13 113.8.0.0/15 113.11.192.0/19 113.12.0.0/14 113.16.0.0/15 113.18.0.0/16 113.21.232.0/21 113.24.0.0/14 113.31.0.0/16 113.44.0.0/14 113.48.0.0/14 113.52.160.0/19 113.52.228.0/22 113.54.0.0/15 113.56.0.0/15 113.58.0.0/16 113.59.0.0/17 113.59.224.0/22 113.62.0.0/15 113.64.0.0/10 113.128.0.0/15 113.130.96.0/20 113.130.112.0/21 113.132.0.0/14 113.136.0.0/13 113.194.0.0/15 113.197.100.0/22 113.197.104.0/22 113.200.0.0/15 113.202.0.0/16 113.204.0.0/14 113.208.96.0/19 113.208.128.0/17 113.209.0.0/16 113.212.0.0/18 113.212.64.0/22 113.212.88.0/22 113.212.100.0/22 113.212.184.0/21 113.213.0.0/17 113.214.0.0/15 113.218.0.0/15 113.220.0.0/14 113.224.0.0/12 113.240.0.0/13 113.248.0.0/14 114.28.0.0/16 114.31.64.0/21 114.54.0.0/15 114.60.0.0/14 114.64.0.0/14 114.68.0.0/16 114.79.64.0/18 114.80.0.0/12 114.96.0.0/13 114.104.0.0/14 114.110.0.0/20 114.110.64.0/18 114.111.0.0/19 114.111.160.0/19 114.112.0.0/13 114.132.0.0/16 114.135.0.0/16 114.138.0.0/15 114.141.64.0/21 114.141.80.0/21 114.141.128.0/18 114.196.0.0/15 114.198.248.0/21 114.208.0.0/12 114.224.0.0/11 115.24.0.0/14 115.28.0.0/15 115.31.64.0/20 115.32.0.0/14 115.42.56.0/22 115.44.0.0/14 115.48.0.0/12 115.69.64.0/20 115.84.0.0/18 115.84.192.0/19 115.85.192.0/18 115.100.0.0/14 115.104.0.0/14 115.120.0.0/14 115.124.16.0/20 115.148.0.0/14 115.152.0.0/13 115.166.64.0/19 115.168.0.0/13 115.180.0.0/14 115.187.0.0/20 115.190.0.0/15 115.192.0.0/11 115.224.0.0/12 116.0.8.0/21 116.0.24.0/21 116.1.0.0/16 116.2.0.0/15 116.4.0.0/14 116.8.0.0/14 116.13.0.0/16 116.16.0.0/12 116.50.0.0/20 116.52.0.0/14 116.56.0.0/15 116.58.128.0/20 116.58.208.0/20 116.60.0.0/14 116.66.0.0/17 116.66.176.0/22 116.68.136.0/21 116.68.176.0/21 116.69.0.0/16 116.70.0.0/17 116.76.0.0/14 116.85.0.0/16 116.89.144.0/20 116.89.240.0/22 116.90.80.0/20 116.90.184.0/21 116.95.0.0/16 116.112.0.0/14 116.116.0.0/15 116.128.0.0/10 116.192.0.0/16 116.193.16.0/20 116.193.32.0/19 116.193.152.0/22 116.193.164.0/22 116.193.176.0/21 116.194.0.0/15 116.196.0.0/16 116.197.160.0/21 116.197.180.0/23 116.198.0.0/16 116.199.0.0/17 116.199.128.0/19 116.204.0.0/17 116.204.132.0/22 116.204.168.0/22 116.204.216.0/22 116.204.232.0/21 116.204.244.0/22 116.205.0.0/16 116.206.92.0/22 116.206.176.0/22 116.207.0.0/16 116.208.0.0/14 116.212.160.0/20 116.213.44.0/22 116.213.64.0/18 116.213.128.0/17 116.214.32.0/19 116.214.64.0/20 116.214.128.0/17 116.215.0.0/16 116.216.0.0/14 116.224.0.0/12 116.242.0.0/15 116.244.0.0/14 116.248.0.0/15 116.251.64.0/18 116.252.0.0/15 116.254.104.0/21 116.254.128.0/17 116.255.128.0/17 117.8.0.0/13 117.21.0.0/16 117.22.0.0/15 117.24.0.0/13 117.32.0.0/13 117.40.0.0/14 117.44.0.0/15 117.48.0.0/14 117.53.48.0/20 117.53.176.0/20 117.57.0.0/16 117.58.0.0/17 117.59.0.0/16 117.60.0.0/14 117.64.0.0/13 117.72.0.0/15 117.74.64.0/19 117.74.128.0/17 117.75.0.0/16 117.76.0.0/14 117.80.0.0/12 117.100.0.0/15 117.103.16.0/20 117.103.40.0/21 117.103.72.0/21 117.103.128.0/20 117.104.168.0/21 117.106.0.0/15 117.112.0.0/13 117.120.64.0/18 117.120.128.0/17 117.121.0.0/17 117.121.128.0/18 117.121.192.0/21 117.122.128.0/17 117.124.0.0/14 117.128.0.0/10 118.24.0.0/15 118.26.0.0/16 118.28.0.0/14 118.64.0.0/15 118.66.0.0/16 118.67.112.0/20 118.72.0.0/13 118.80.0.0/15 118.84.0.0/15 118.88.32.0/19 118.88.64.0/18 118.88.128.0/17 118.89.0.0/16 118.91.240.0/20 118.102.16.0/20 118.102.32.0/21 118.103.164.0/22 118.103.168.0/21 118.103.176.0/22 118.103.245.0/24 118.103.246.0/23 118.107.180.0/22 118.112.0.0/13 118.120.0.0/14 118.124.0.0/15 118.126.0.0/16 118.127.128.0/19 118.132.0.0/14 118.144.0.0/14 118.178.0.0/16 118.180.0.0/14 118.184.0.0/16 118.186.0.0/15 118.188.0.0/16 118.190.0.0/15 118.192.0.0/16 118.193.0.0/20 118.193.32.0/19 118.193.64.0/20 118.193.96.0/19 118.193.128.0/17 118.194.0.0/15 118.196.0.0/14 118.202.0.0/15 118.204.0.0/14 118.212.0.0/15 118.215.192.0/18 118.224.0.0/14 118.228.0.0/15 118.230.0.0/16 118.239.0.0/16 118.242.0.0/16 118.244.0.0/14 118.248.0.0/13 119.0.0.0/15 119.2.0.0/19 119.2.128.0/17 119.3.0.0/16 119.4.0.0/14 119.8.0.0/16 119.10.0.0/17 119.15.136.0/21 119.16.0.0/16 119.18.192.0/20 119.18.208.0/21 119.18.224.0/19 119.19.0.0/16 119.20.0.0/14 119.27.64.0/18 119.27.128.0/17 119.28.0.0/15 119.30.48.0/20 119.31.192.0/19 119.32.0.0/13 119.40.0.0/18 119.40.64.0/20 119.40.128.0/17 119.41.0.0/16 119.42.0.0/19 119.42.52.0/22 119.42.128.0/20 119.42.224.0/19 119.44.0.0/15 119.48.0.0/13 119.57.0.0/16 119.58.0.0/16 119.59.128.0/17 119.60.0.0/15 119.62.0.0/16 119.63.32.0/19 119.75.208.0/20 119.78.0.0/15 119.80.0.0/16 119.82.208.0/20 119.84.0.0/14 119.88.0.0/14 119.96.0.0/13 119.108.0.0/15 119.112.0.0/12 119.128.0.0/12 119.144.0.0/14 119.148.160.0/19 119.151.192.0/18 119.160.200.0/21 119.161.120.0/21 119.161.128.0/17 119.162.0.0/15 119.164.0.0/14 119.176.0.0/12 119.232.0.0/15 119.235.128.0/18 119.248.0.0/14 119.252.96.0/21 119.252.240.0/20 119.253.0.0/16 119.254.0.0/15 120.0.0.0/12 120.24.0.0/14 120.30.0.0/15 120.32.0.0/12 120.48.0.0/15 120.52.0.0/14 120.64.0.0/13 120.72.32.0/19 120.72.128.0/17 120.76.0.0/14 120.80.0.0/13 120.88.8.0/21 120.90.0.0/15 120.92.0.0/16 120.94.0.0/15 120.128.0.0/13 120.136.16.0/21 120.136.128.0/18 120.137.0.0/17 120.143.128.0/19 120.192.0.0/10 121.0.8.0/21 121.0.16.0/20 121.4.0.0/15 121.8.0.0/13 121.16.0.0/12 121.32.0.0/13 121.40.0.0/14 121.46.0.0/18 121.46.76.0/22 121.46.128.0/17 121.47.0.0/16 121.48.0.0/15 121.50.8.0/21 121.51.0.0/16 121.52.160.0/19 121.52.208.0/20 121.52.224.0/19 121.54.176.0/21 121.54.188.0/22 121.55.0.0/18 121.56.0.0/15 121.58.0.0/17 121.58.136.0/21 121.58.144.0/20 121.58.160.0/21 121.59.0.0/16 121.60.0.0/14 121.68.0.0/14 121.76.0.0/15 121.79.128.0/18 121.89.0.0/16 121.100.128.0/17 121.101.0.0/18 121.101.208.0/20 121.192.0.0/13 121.200.192.0/21 121.201.0.0/16 121.204.0.0/14 121.224.0.0/12 121.248.0.0/14 121.255.0.0/16 122.0.64.0/18 122.0.128.0/17 122.4.0.0/14 122.8.0.0/15 122.10.128.0/17 122.11.0.0/17 122.12.0.0/15 122.14.0.0/16 122.48.0.0/16 122.49.0.0/18 122.51.0.0/16 122.64.0.0/11 122.96.0.0/15 122.98.144.0/20 122.98.160.0/21 122.98.172.0/22 122.98.176.0/20 122.98.192.0/21 122.98.232.0/21 122.98.240.0/20 122.102.0.0/20 122.102.64.0/19 122.112.0.0/14 122.119.0.0/16 122.128.100.0/22 122.128.120.0/21 122.136.0.0/13 122.144.128.0/17 122.152.192.0/18 122.156.0.0/14 122.188.0.0/14 122.192.0.0/14 122.198.0.0/16 122.200.40.0/21 122.200.64.0/18 122.201.48.0/20 122.204.0.0/14 122.224.0.0/12 122.240.0.0/13 122.248.24.0/21 122.248.48.0/20 122.255.64.0/21 123.0.128.0/18 123.4.0.0/14 123.8.0.0/13 123.49.128.0/17 123.50.160.0/19 123.52.0.0/14 123.56.0.0/14 123.60.0.0/15 123.62.0.0/16 123.64.0.0/11 123.96.0.0/15 123.98.0.0/17 123.99.128.0/17 123.100.0.0/19 123.100.232.0/24 123.101.0.0/16 123.103.0.0/17 123.108.128.0/20 123.108.208.0/20 123.112.0.0/12 123.128.0.0/13 123.136.80.0/20 123.137.0.0/16 123.138.0.0/15 123.144.0.0/12 123.160.0.0/12 123.176.60.0/22 123.176.80.0/20 123.177.0.0/16 123.178.0.0/15 123.180.0.0/14 123.184.0.0/13 123.196.0.0/15 123.199.128.0/17 123.206.0.0/15 123.232.0.0/14 123.242.0.0/17 123.242.192.0/21 123.244.0.0/14 123.249.0.0/16 123.253.108.0/22 123.253.240.0/22 123.254.96.0/21 124.6.64.0/18 124.14.0.0/15 124.16.0.0/15 124.20.0.0/14 124.28.192.0/18 124.29.0.0/17 124.31.0.0/16 124.40.112.0/20 124.40.128.0/18 124.40.192.0/19 124.40.240.0/22 124.42.0.0/16 124.47.0.0/18 124.64.0.0/15 124.66.0.0/17 124.67.0.0/16 124.68.0.0/14 124.72.0.0/13 124.88.0.0/13 124.108.8.0/21 124.108.40.0/21 124.109.96.0/21 124.112.0.0/13 124.126.0.0/15 124.128.0.0/13 124.147.128.0/17 124.150.137.0/24 124.151.0.0/16 124.152.0.0/16 124.160.0.0/13 124.172.0.0/14 124.192.0.0/15 124.196.0.0/16 124.200.0.0/13 124.220.0.0/14 124.224.0.0/12 124.240.0.0/17 124.240.128.0/18 124.242.0.0/16 124.243.192.0/18 124.248.0.0/17 124.249.0.0/16 124.250.0.0/15 124.254.0.0/18 125.31.192.0/18 125.32.0.0/12 125.58.128.0/17 125.61.128.0/17 125.62.0.0/18 125.64.0.0/11 125.96.0.0/15 125.98.0.0/16 125.104.0.0/13 125.112.0.0/12 125.169.0.0/16 125.171.0.0/16 125.208.0.0/18 125.210.0.0/15 125.213.0.0/17 125.214.96.0/19 125.215.0.0/18 125.216.0.0/13 125.254.128.0/17 128.108.0.0/16 129.28.0.0/16 129.204.0.0/16 129.211.0.0/16 129.223.254.0/24 129.227.0.0/20 129.227.32.0/19 129.227.64.0/18 129.227.128.0/23 129.227.132.0/22 129.227.136.0/21 129.227.144.0/20 129.227.160.0/19 129.227.192.0/18 130.214.218.0/23 131.228.96.0/24 131.253.12.0/29 131.253.12.80/28 131.253.12.240/29 132.232.0.0/16 132.237.134.0/24 132.237.150.0/24 134.175.0.0/16 135.159.208.0/20 135.244.80.0/20 137.59.59.0/24 137.59.88.0/22 138.32.244.0/22 139.5.56.0/21 139.5.80.0/22 139.5.92.0/22 139.5.108.0/22 139.5.128.0/22 139.5.160.0/22 139.5.192.0/22 139.5.204.0/22 139.5.208.0/21 139.5.244.0/22 139.9.0.0/16 139.129.0.0/16 139.148.0.0/16 139.155.0.0/16 139.159.0.0/16 139.170.0.0/16 139.176.0.0/16 139.183.0.0/16 139.186.0.0/16 139.189.0.0/16 139.196.0.0/14 139.200.0.0/13 139.208.0.0/13 139.217.0.0/16 139.219.0.0/16 139.220.0.0/15 139.224.0.0/16 139.226.0.0/15 140.75.0.0/16 140.101.208.0/24 140.143.0.0/16 140.179.0.0/16 140.205.0.0/16 140.206.0.0/15 140.210.0.0/16 140.224.0.0/16 140.237.0.0/16 140.240.0.0/16 140.242.223.0/24 140.242.224.0/24 140.243.0.0/16 140.246.0.0/16 140.249.0.0/16 140.250.0.0/16 140.255.0.0/16 144.0.0.0/16 144.7.0.0/16 144.12.0.0/16 144.36.146.0/23 144.48.8.0/21 144.48.64.0/22 144.48.88.0/22 144.48.156.0/22 144.48.180.0/22 144.48.184.0/22 144.48.204.0/22 144.48.208.0/21 144.48.220.0/22 144.48.252.0/22 144.52.0.0/16 144.123.0.0/16 144.211.80.0/24 144.211.138.0/24 144.255.0.0/16 146.56.192.0/18 146.196.56.0/22 146.196.68.0/22 146.196.72.0/22 146.196.92.0/22 146.196.112.0/21 146.196.124.0/22 146.217.137.0/24 146.222.79.0/24 146.222.81.0/24 146.222.94.0/24 147.243.13.32/27 147.243.13.64/27 147.243.14.32/27 148.70.0.0/16 150.0.0.0/16 150.115.0.0/16 150.121.0.0/16 150.122.0.0/16 150.129.136.0/22 150.129.192.0/22 150.129.216.0/22 150.129.252.0/22 150.138.0.0/15 150.158.0.0/16 150.222.88.0/23 150.223.0.0/16 150.242.0.0/21 150.242.8.0/22 150.242.28.0/22 150.242.44.0/22 150.242.48.0/21 150.242.56.0/22 150.242.76.0/22 150.242.80.0/22 150.242.92.0/22 150.242.96.0/22 150.242.112.0/21 150.242.120.0/22 150.242.152.0/21 150.242.160.0/21 150.242.168.0/22 150.242.184.0/21 150.242.192.0/22 150.242.212.0/22 150.242.224.0/20 150.242.240.0/21 150.242.248.0/22 150.255.0.0/16 152.32.178.0/23 152.32.205.0/24 152.32.206.0/23 152.32.208.0/20 152.32.224.0/19 152.104.128.0/17 152.136.0.0/16 153.0.0.0/16 153.3.0.0/16 153.34.0.0/15 153.36.0.0/15 153.99.0.0/16 153.101.0.0/16 153.118.0.0/15 154.8.128.0/17 156.107.160.0/24 156.107.170.0/24 156.154.62.0/23 157.0.0.0/16 157.18.0.0/16 157.61.0.0/16 157.119.0.0/22 157.119.8.0/21 157.119.16.0/22 157.119.28.0/22 157.119.68.0/22 157.119.112.0/22 157.119.132.0/22 157.119.136.0/21 157.119.144.0/20 157.119.160.0/21 157.119.172.0/22 157.119.192.0/21 157.119.240.0/22 157.119.252.0/22 157.122.0.0/16 157.133.186.0/23 157.133.192.0/21 157.133.212.0/24 157.133.236.0/24 157.148.0.0/16 157.156.0.0/16 157.255.0.0/16 159.75.0.0/16 159.221.232.0/22 159.226.0.0/16 160.19.208.0/21 160.19.216.0/22 160.20.48.0/22 160.62.10.0/24 160.83.109.0/24 160.83.110.0/23 160.202.60.0/22 160.202.148.0/22 160.202.152.0/22 160.202.168.0/22 160.202.212.0/22 160.202.216.0/21 160.202.224.0/19 160.238.64.0/22 161.163.0.0/21 161.163.28.0/23 161.163.176.0/24 161.163.178.0/23 161.163.180.0/22 161.189.0.0/16 161.207.0.0/16 162.14.0.0/16 162.105.0.0/16 163.0.0.0/16 163.47.4.0/22 163.53.0.0/20 163.53.36.0/22 163.53.40.0/21 163.53.48.0/20 163.53.64.0/22 163.53.88.0/21 163.53.96.0/19 163.53.128.0/21 163.53.136.0/22 163.53.160.0/20 163.53.188.0/22 163.53.220.0/22 163.53.236.0/22 163.53.240.0/22 163.116.202.0/23 163.125.0.0/16 163.142.0.0/16 163.177.0.0/16 163.179.0.0/16 163.204.0.0/16 163.244.246.0/24 164.52.0.0/17 165.156.30.0/24 166.111.0.0/16 167.139.0.0/16 167.189.0.0/16 167.220.244.0/22 168.159.144.0/21 168.159.152.0/22 168.159.156.0/23 168.159.158.0/24 168.160.0.0/16 168.230.0.0/24 170.179.0.0/16 170.225.224.0/23 170.252.152.0/21 171.8.0.0/13 171.34.0.0/15 171.36.0.0/14 171.40.0.0/13 171.80.0.0/12 171.104.0.0/13 171.112.0.0/12 171.208.0.0/12 172.81.192.0/18 175.0.0.0/12 175.16.0.0/13 175.24.0.0/14 175.30.0.0/15 175.42.0.0/15 175.44.0.0/16 175.46.0.0/15 175.48.0.0/12 175.64.0.0/11 175.102.0.0/16 175.106.128.0/17 175.111.144.0/20 175.111.160.0/20 175.111.184.0/22 175.146.0.0/15 175.148.0.0/14 175.152.0.0/14 175.158.96.0/22 175.160.0.0/12 175.176.156.0/22 175.176.176.0/22 175.176.188.0/22 175.176.192.0/22 175.178.0.0/16 175.184.128.0/18 175.185.0.0/16 175.186.0.0/15 175.188.0.0/14 180.76.0.0/14 180.84.0.0/15 180.86.0.0/16 180.88.0.0/14 180.94.56.0/21 180.94.96.0/20 180.94.120.0/21 180.95.128.0/17 180.96.0.0/11 180.129.128.0/17 180.130.0.0/16 180.136.0.0/13 180.148.16.0/21 180.148.152.0/21 180.148.216.0/21 180.148.224.0/19 180.149.128.0/19 180.149.236.0/22 180.150.160.0/19 180.152.0.0/13 180.160.0.0/12 180.178.112.0/21 180.178.192.0/18 180.184.0.0/14 180.188.0.0/17 180.189.148.0/22 180.200.252.0/22 180.201.0.0/16 180.202.0.0/15 180.208.0.0/15 180.210.212.0/22 180.210.224.0/19 180.212.0.0/15 180.222.224.0/19 180.223.0.0/16 180.233.0.0/18 180.233.64.0/19 180.233.144.0/22 180.235.64.0/19 180.235.112.0/22 180.235.136.0/22 182.16.144.0/21 182.16.192.0/19 182.18.0.0/17 182.23.184.0/21 182.23.200.0/21 182.32.0.0/12 182.48.96.0/19 182.49.0.0/16 182.50.0.0/20 182.50.112.0/20 182.51.0.0/16 182.54.0.0/17 182.54.244.0/22 182.61.0.0/16 182.80.0.0/13 182.88.0.0/14 182.92.0.0/16 182.96.0.0/11 182.128.0.0/12 182.144.0.0/13 182.157.0.0/16 182.160.64.0/19 182.174.0.0/15 182.200.0.0/13 182.236.128.0/17 182.237.24.0/21 182.238.0.0/16 182.239.0.0/19 182.240.0.0/13 182.254.0.0/16 182.255.32.0/21 182.255.60.0/22 183.0.0.0/10 183.64.0.0/13 183.78.160.0/21 183.78.180.0/22 183.81.172.0/22 183.81.180.0/22 183.84.0.0/15 183.91.128.0/22 183.91.136.0/21 183.91.144.0/20 183.92.0.0/14 183.128.0.0/11 183.160.0.0/13 183.168.0.0/15 183.170.0.0/16 183.172.0.0/14 183.182.0.0/19 183.184.0.0/13 183.192.0.0/10 185.109.236.0/24 188.131.128.0/17 192.11.23.0/24 192.11.26.0/24 192.11.39.0/24 192.11.236.0/24 192.23.191.0/24 192.51.188.0/24 192.55.10.0/23 192.55.40.0/24 192.55.46.0/24 192.55.68.0/22 192.102.204.0/22 192.124.154.0/24 192.137.31.0/24 192.139.136.0/24 192.140.128.0/21 192.140.136.0/22 192.140.156.0/22 192.140.160.0/19 192.140.192.0/20 192.140.208.0/21 192.144.128.0/17 192.163.11.0/24 192.197.113.0/24 192.232.97.0/24 193.20.64.0/22 193.112.0.0/16 194.138.136.0/24 194.138.202.0/23 194.138.245.0/24 198.175.100.0/22 198.208.17.0/24 198.208.19.0/24 199.7.72.0/24 199.65.192.0/21 199.212.57.0/24 199.244.144.0/24 202.0.100.0/23 202.0.122.0/23 202.0.176.0/22 202.1.105.0/24 202.1.106.0/24 202.3.128.0/23 202.3.134.0/24 202.4.128.0/19 202.4.252.0/22 202.5.208.0/21 202.5.216.0/22 202.6.6.0/23 202.6.66.0/23 202.6.72.0/23 202.6.87.0/24 202.6.88.0/23 202.6.92.0/23 202.6.103.0/24 202.6.108.0/24 202.6.110.0/23 202.6.114.0/24 202.6.176.0/20 202.8.0.0/24 202.8.2.0/23 202.8.4.0/23 202.8.12.0/24 202.8.24.0/24 202.8.77.0/24 202.8.120.0/22 202.8.128.0/19 202.8.192.0/20 202.9.32.0/24 202.9.34.0/23 202.9.48.0/23 202.9.51.0/24 202.9.52.0/23 202.9.54.0/24 202.9.57.0/24 202.9.58.0/23 202.10.64.0/20 202.10.112.0/20 202.12.1.0/24 202.12.2.0/24 202.12.17.0/24 202.12.18.0/23 202.12.72.0/24 202.12.84.0/23 202.12.96.0/24 202.12.98.0/23 202.12.106.0/24 202.12.111.0/24 202.12.116.0/24 202.14.64.0/23 202.14.69.0/24 202.14.73.0/24 202.14.74.0/23 202.14.76.0/24 202.14.78.0/23 202.14.88.0/24 202.14.97.0/24 202.14.104.0/23 202.14.108.0/23 202.14.111.0/24 202.14.114.0/23 202.14.118.0/23 202.14.124.0/23 202.14.127.0/24 202.14.129.0/24 202.14.135.0/24 202.14.136.0/24 202.14.149.0/24 202.14.151.0/24 202.14.157.0/24 202.14.158.0/23 202.14.169.0/24 202.14.170.0/23 202.14.172.0/22 202.14.176.0/24 202.14.184.0/23 202.14.208.0/23 202.14.213.0/24 202.14.219.0/24 202.14.220.0/24 202.14.222.0/23 202.14.225.0/24 202.14.226.0/23 202.14.231.0/24 202.14.235.0/24 202.14.236.0/22 202.14.246.0/24 202.14.251.0/24 202.20.66.0/24 202.20.79.0/24 202.20.87.0/24 202.20.88.0/23 202.20.90.0/24 202.20.94.0/23 202.20.114.0/24 202.20.117.0/24 202.20.120.0/24 202.20.125.0/24 202.20.126.0/23 202.21.48.0/20 202.21.131.0/24 202.21.132.0/24 202.21.141.0/24 202.21.142.0/24 202.21.147.0/24 202.21.148.0/24 202.21.150.0/23 202.21.152.0/23 202.21.154.0/24 202.21.156.0/24 202.21.208.0/24 202.22.248.0/21 202.27.12.0/24 202.27.14.0/24 202.27.136.0/23 202.36.226.0/24 202.38.0.0/22 202.38.8.0/21 202.38.48.0/20 202.38.64.0/18 202.38.128.0/21 202.38.136.0/23 202.38.138.0/24 202.38.140.0/22 202.38.146.0/23 202.38.149.0/24 202.38.150.0/23 202.38.152.0/22 202.38.156.0/24 202.38.158.0/23 202.38.160.0/23 202.38.164.0/22 202.38.168.0/22 202.38.176.0/23 202.38.184.0/21 202.38.192.0/18 202.40.4.0/23 202.40.7.0/24 202.40.15.0/24 202.40.135.0/24 202.40.136.0/24 202.40.140.0/24 202.40.143.0/24 202.40.144.0/23 202.40.150.0/24 202.40.155.0/24 202.40.156.0/24 202.40.158.0/23 202.40.162.0/24 202.41.8.0/23 202.41.11.0/24 202.41.12.0/23 202.41.128.0/24 202.41.130.0/23 202.41.142.0/24 202.41.152.0/21 202.41.192.0/24 202.41.196.0/22 202.41.200.0/22 202.41.240.0/20 202.43.76.0/22 202.43.144.0/20 202.44.16.0/20 202.44.48.0/22 202.44.67.0/24 202.44.74.0/24 202.44.97.0/24 202.44.129.0/24 202.44.132.0/23 202.44.146.0/23 202.45.0.0/23 202.45.2.0/24 202.45.15.0/24 202.45.16.0/20 202.46.16.0/23 202.46.18.0/24 202.46.20.0/23 202.46.32.0/19 202.46.128.0/24 202.46.224.0/20 202.47.82.0/23 202.47.96.0/20 202.47.126.0/24 202.47.128.0/24 202.47.130.0/23 202.52.33.0/24 202.52.34.0/24 202.52.47.0/24 202.52.143.0/24 202.52.144.0/24 202.53.140.0/24 202.53.143.0/24 202.57.192.0/20 202.57.212.0/22 202.57.216.0/22 202.57.240.0/20 202.58.0.0/24 202.58.101.0/24 202.58.104.0/22 202.58.112.0/22 202.59.0.0/23 202.59.212.0/22 202.59.236.0/24 202.59.240.0/24 202.60.48.0/21 202.60.96.0/21 202.60.112.0/20 202.60.132.0/22 202.60.136.0/21 202.60.144.0/20 202.61.68.0/22 202.61.76.0/22 202.61.88.0/22 202.61.123.0/24 202.61.127.0/24 202.62.112.0/22 202.62.248.0/22 202.62.252.0/24 202.62.255.0/24 202.63.80.0/20 202.63.160.0/19 202.63.248.0/22 202.63.253.0/24 202.65.0.0/21 202.65.8.0/23 202.65.96.0/20 202.66.168.0/22 202.67.0.0/22 202.69.4.0/22 202.69.16.0/20 202.70.0.0/19 202.70.96.0/20 202.70.192.0/20 202.71.32.0/20 202.72.40.0/21 202.72.80.0/20 202.72.112.0/20 202.73.128.0/22 202.73.240.0/20 202.74.8.0/21 202.74.36.0/24 202.74.42.0/24 202.74.52.0/24 202.74.80.0/20 202.74.232.0/22 202.74.254.0/23 202.75.208.0/20 202.75.252.0/22 202.76.247.0/24 202.76.252.0/22 202.77.80.0/21 202.77.92.0/22 202.78.8.0/21 202.79.224.0/21 202.79.248.0/22 202.80.192.0/20 202.81.0.0/22 202.81.176.0/20 202.83.252.0/22 202.84.0.0/20 202.84.16.0/23 202.84.22.0/24 202.84.24.0/21 202.85.208.0/20 202.86.249.0/24 202.86.252.0/22 202.87.80.0/20 202.88.32.0/22 202.89.8.0/21 202.89.96.0/22 202.89.108.0/22 202.89.119.0/24 202.89.232.0/21 202.90.0.0/22 202.90.16.0/20 202.90.37.0/24 202.90.96.0/19 202.90.193.0/24 202.90.196.0/24 202.90.205.0/24 202.90.224.0/20 202.91.0.0/22 202.91.36.0/22 202.91.96.0/20 202.91.128.0/22 202.91.176.0/20 202.91.224.0/19 202.92.0.0/22 202.92.8.0/21 202.92.48.0/20 202.92.252.0/22 202.93.0.0/22 202.93.252.0/22 202.94.0.0/19 202.94.68.0/24 202.94.74.0/24 202.94.81.0/24 202.94.92.0/22 202.95.4.0/22 202.95.240.0/21 202.95.252.0/22 202.96.0.0/12 202.112.0.0/13 202.120.0.0/15 202.122.0.0/21 202.122.32.0/21 202.122.64.0/19 202.122.112.0/20 202.122.128.0/24 202.122.132.0/24 202.123.96.0/20 202.123.116.0/22 202.123.120.0/22 202.124.16.0/21 202.124.24.0/22 202.125.107.0/24 202.125.109.0/24 202.125.112.0/20 202.125.176.0/20 202.127.0.0/21 202.127.12.0/22 202.127.16.0/20 202.127.40.0/21 202.127.48.0/20 202.127.112.0/20 202.127.128.0/19 202.127.160.0/21 202.127.192.0/20 202.127.208.0/23 202.127.212.0/22 202.127.216.0/21 202.127.224.0/19 202.129.208.0/24 202.130.0.0/19 202.130.39.0/24 202.130.224.0/19 202.131.16.0/21 202.131.48.0/20 202.131.208.0/20 202.133.32.0/20 202.134.58.0/24 202.134.128.0/20 202.134.208.0/20 202.136.48.0/20 202.136.208.0/20 202.136.224.0/20 202.136.248.0/22 202.136.254.0/23 202.137.231.0/24 202.140.140.0/22 202.140.144.0/20 202.141.160.0/19 202.142.16.0/20 202.143.4.0/22 202.143.16.0/20 202.143.32.0/20 202.143.56.0/21 202.143.100.0/22 202.143.104.0/22 202.144.196.0/22 202.146.160.0/20 202.146.186.0/24 202.146.188.0/22 202.146.196.0/22 202.146.200.0/21 202.147.144.0/20 202.148.32.0/20 202.148.64.0/18 202.149.32.0/19 202.149.160.0/19 202.149.224.0/19 202.150.16.0/20 202.150.32.0/20 202.150.56.0/22 202.150.192.0/20 202.150.224.0/19 202.151.0.0/22 202.151.33.0/24 202.151.128.0/19 202.152.176.0/20 202.153.0.0/22 202.153.7.0/24 202.153.48.0/20 202.157.192.0/19 202.158.160.0/19 202.158.242.0/24 202.160.140.0/22 202.160.156.0/22 202.160.176.0/20 202.162.67.0/24 202.162.75.0/24 202.164.0.0/20 202.164.96.0/19 202.165.96.0/21 202.165.104.0/22 202.165.176.0/20 202.165.208.0/20 202.165.239.0/24 202.165.240.0/23 202.165.243.0/24 202.165.245.0/24 202.165.251.0/24 202.165.252.0/22 202.166.224.0/19 202.168.80.0/22 202.168.128.0/20 202.168.160.0/19 202.170.128.0/19 202.170.216.0/21 202.170.224.0/19 202.171.216.0/21 202.171.232.0/24 202.171.235.0/24 202.172.0.0/22 202.172.7.0/24 202.173.0.0/22 202.173.6.0/24 202.173.8.0/21 202.173.112.0/22 202.173.224.0/19 202.174.64.0/20 202.174.124.0/22 202.176.224.0/19 202.179.160.0/20 202.179.240.0/20 202.180.128.0/19 202.180.208.0/21 202.181.8.0/22 202.181.28.0/22 202.181.112.0/20 202.182.32.0/20 202.182.192.0/19 202.189.0.0/18 202.189.80.0/20 202.189.184.0/21 202.191.0.0/24 202.191.68.0/22 202.191.72.0/21 202.191.80.0/20 202.192.0.0/12 203.0.4.0/22 203.0.10.0/23 203.0.18.0/24 203.0.24.0/24 203.0.42.0/23 203.0.45.0/24 203.0.46.0/23 203.0.81.0/24 203.0.82.0/23 203.0.90.0/23 203.0.96.0/23 203.0.104.0/21 203.0.114.0/23 203.0.122.0/24 203.0.128.0/24 203.0.130.0/23 203.0.132.0/22 203.0.137.0/24 203.0.142.0/24 203.0.144.0/24 203.0.146.0/24 203.0.148.0/24 203.0.150.0/23 203.0.152.0/24 203.0.177.0/24 203.0.224.0/24 203.1.4.0/22 203.1.18.0/24 203.1.26.0/23 203.1.65.0/24 203.1.66.0/23 203.1.70.0/23 203.1.76.0/23 203.1.90.0/24 203.1.97.0/24 203.1.98.0/23 203.1.100.0/22 203.1.108.0/24 203.1.253.0/24 203.1.254.0/24 203.2.64.0/21 203.2.73.0/24 203.2.112.0/21 203.2.126.0/23 203.2.140.0/24 203.2.150.0/24 203.2.152.0/22 203.2.156.0/23 203.2.160.0/21 203.2.180.0/23 203.2.196.0/23 203.2.209.0/24 203.2.214.0/23 203.2.226.0/23 203.2.229.0/24 203.2.236.0/23 203.3.68.0/24 203.3.72.0/23 203.3.75.0/24 203.3.80.0/21 203.3.96.0/22 203.3.105.0/24 203.3.112.0/21 203.3.120.0/24 203.3.123.0/24 203.3.135.0/24 203.3.139.0/24 203.3.143.0/24 203.4.132.0/23 203.4.134.0/24 203.4.151.0/24 203.4.152.0/22 203.4.174.0/23 203.4.180.0/24 203.4.186.0/24 203.4.205.0/24 203.4.208.0/22 203.4.227.0/24 203.4.230.0/23 203.5.4.0/23 203.5.7.0/24 203.5.8.0/23 203.5.11.0/24 203.5.21.0/24 203.5.22.0/24 203.5.44.0/24 203.5.46.0/23 203.5.52.0/22 203.5.56.0/23 203.5.60.0/23 203.5.114.0/23 203.5.118.0/24 203.5.120.0/24 203.5.172.0/24 203.5.180.0/23 203.5.182.0/24 203.5.185.0/24 203.5.186.0/24 203.5.188.0/23 203.5.190.0/24 203.5.195.0/24 203.5.214.0/23 203.5.218.0/23 203.6.131.0/24 203.6.136.0/24 203.6.138.0/23 203.6.142.0/24 203.6.150.0/23 203.6.157.0/24 203.6.159.0/24 203.6.224.0/20 203.6.248.0/23 203.7.129.0/24 203.7.138.0/23 203.7.147.0/24 203.7.150.0/23 203.7.158.0/24 203.7.192.0/23 203.7.200.0/24 203.8.0.0/24 203.8.8.0/24 203.8.23.0/24 203.8.70.0/24 203.8.82.0/24 203.8.86.0/23 203.8.91.0/24 203.8.110.0/23 203.8.115.0/24 203.8.166.0/23 203.8.169.0/24 203.8.173.0/24 203.8.184.0/24 203.8.186.0/23 203.8.190.0/23 203.8.192.0/24 203.8.197.0/24 203.8.198.0/23 203.8.203.0/24 203.8.209.0/24 203.8.210.0/23 203.8.212.0/22 203.8.217.0/24 203.8.220.0/24 203.9.32.0/24 203.9.36.0/23 203.9.57.0/24 203.9.63.0/24 203.9.65.0/24 203.9.70.0/23 203.9.72.0/24 203.9.75.0/24 203.9.76.0/23 203.9.96.0/22 203.9.100.0/23 203.9.108.0/24 203.9.158.0/24 203.10.34.0/24 203.10.56.0/24 203.10.74.0/23 203.10.84.0/22 203.10.88.0/24 203.10.95.0/24 203.10.125.0/24 203.11.70.0/24 203.11.76.0/22 203.11.82.0/24 203.11.84.0/22 203.11.100.0/22 203.11.109.0/24 203.11.117.0/24 203.11.122.0/24 203.11.126.0/24 203.11.136.0/22 203.11.141.0/24 203.11.142.0/23 203.11.180.0/22 203.11.208.0/22 203.12.16.0/24 203.12.19.0/24 203.12.24.0/24 203.12.57.0/24 203.12.65.0/24 203.12.66.0/24 203.12.70.0/23 203.12.87.0/24 203.12.90.0/24 203.12.92.0/22 203.12.100.0/23 203.12.103.0/24 203.12.114.0/24 203.12.118.0/24 203.12.130.0/24 203.12.137.0/24 203.12.196.0/22 203.12.211.0/24 203.12.219.0/24 203.12.226.0/24 203.12.240.0/22 203.13.18.0/24 203.13.24.0/24 203.13.44.0/23 203.13.88.0/23 203.13.92.0/22 203.13.173.0/24 203.13.224.0/23 203.13.227.0/24 203.13.233.0/24 203.14.24.0/22 203.14.33.0/24 203.14.56.0/24 203.14.61.0/24 203.14.62.0/24 203.14.104.0/24 203.14.114.0/23 203.14.118.0/24 203.14.162.0/24 203.14.184.0/21 203.14.192.0/24 203.14.194.0/23 203.14.214.0/24 203.14.231.0/24 203.14.246.0/24 203.15.0.0/20 203.15.20.0/23 203.15.22.0/24 203.15.87.0/24 203.15.88.0/23 203.15.105.0/24 203.15.112.0/21 203.15.130.0/23 203.15.149.0/24 203.15.151.0/24 203.15.156.0/22 203.15.174.0/24 203.15.227.0/24 203.15.232.0/21 203.15.240.0/23 203.15.246.0/24 203.16.10.0/24 203.16.12.0/23 203.16.16.0/21 203.16.27.0/24 203.16.38.0/24 203.16.49.0/24 203.16.50.0/23 203.16.58.0/24 203.16.63.0/24 203.16.133.0/24 203.16.161.0/24 203.16.162.0/24 203.16.186.0/23 203.16.228.0/24 203.16.238.0/24 203.16.240.0/24 203.16.245.0/24 203.17.2.0/24 203.17.18.0/24 203.17.28.0/24 203.17.39.0/24 203.17.56.0/24 203.17.74.0/23 203.17.88.0/23 203.17.136.0/24 203.17.164.0/24 203.17.187.0/24 203.17.190.0/23 203.17.231.0/24 203.17.233.0/24 203.17.248.0/23 203.17.255.0/24 203.18.2.0/23 203.18.4.0/24 203.18.7.0/24 203.18.31.0/24 203.18.37.0/24 203.18.48.0/23 203.18.52.0/24 203.18.72.0/22 203.18.80.0/23 203.18.87.0/24 203.18.100.0/23 203.18.105.0/24 203.18.107.0/24 203.18.110.0/24 203.18.129.0/24 203.18.131.0/24 203.18.132.0/23 203.18.144.0/24 203.18.153.0/24 203.18.199.0/24 203.18.208.0/24 203.18.211.0/24 203.18.215.0/24 203.19.1.0/24 203.19.18.0/24 203.19.24.0/24 203.19.30.0/24 203.19.32.0/21 203.19.41.0/24 203.19.44.0/23 203.19.46.0/24 203.19.58.0/24 203.19.60.0/23 203.19.64.0/24 203.19.68.0/24 203.19.72.0/24 203.19.101.0/24 203.19.111.0/24 203.19.131.0/24 203.19.133.0/24 203.19.144.0/24 203.19.147.0/24 203.19.149.0/24 203.19.156.0/24 203.19.176.0/24 203.19.178.0/23 203.19.208.0/24 203.19.228.0/22 203.19.233.0/24 203.19.242.0/24 203.19.248.0/23 203.19.255.0/24 203.20.17.0/24 203.20.40.0/23 203.20.44.0/24 203.20.48.0/24 203.20.61.0/24 203.20.65.0/24 203.20.84.0/23 203.20.89.0/24 203.20.106.0/23 203.20.115.0/24 203.20.117.0/24 203.20.118.0/23 203.20.122.0/24 203.20.126.0/23 203.20.135.0/24 203.20.136.0/21 203.20.150.0/24 203.20.230.0/24 203.20.232.0/24 203.20.236.0/24 203.21.0.0/23 203.21.2.0/24 203.21.8.0/24 203.21.10.0/24 203.21.18.0/24 203.21.33.0/24 203.21.34.0/24 203.21.41.0/24 203.21.44.0/24 203.21.68.0/24 203.21.82.0/24 203.21.96.0/22 203.21.124.0/24 203.21.136.0/23 203.21.145.0/24 203.21.206.0/24 203.22.24.0/24 203.22.28.0/23 203.22.31.0/24 203.22.68.0/24 203.22.76.0/24 203.22.78.0/24 203.22.84.0/24 203.22.87.0/24 203.22.92.0/22 203.22.99.0/24 203.22.106.0/24 203.22.122.0/23 203.22.131.0/24 203.22.163.0/24 203.22.166.0/24 203.22.170.0/24 203.22.176.0/21 203.22.194.0/24 203.22.242.0/23 203.22.245.0/24 203.22.246.0/24 203.22.252.0/23 203.23.0.0/24 203.23.47.0/24 203.23.61.0/24 203.23.62.0/23 203.23.73.0/24 203.23.85.0/24 203.23.92.0/22 203.23.98.0/24 203.23.107.0/24 203.23.112.0/24 203.23.130.0/24 203.23.140.0/23 203.23.172.0/24 203.23.182.0/24 203.23.186.0/23 203.23.192.0/24 203.23.197.0/24 203.23.198.0/24 203.23.204.0/22 203.23.224.0/24 203.23.226.0/23 203.23.228.0/22 203.23.249.0/24 203.23.251.0/24 203.24.13.0/24 203.24.18.0/24 203.24.27.0/24 203.24.43.0/24 203.24.56.0/24 203.24.58.0/24 203.24.67.0/24 203.24.74.0/24 203.24.79.0/24 203.24.80.0/23 203.24.84.0/23 203.24.86.0/24 203.24.90.0/24 203.24.111.0/24 203.24.112.0/24 203.24.116.0/24 203.24.122.0/23 203.24.145.0/24 203.24.152.0/23 203.24.157.0/24 203.24.161.0/24 203.24.167.0/24 203.24.186.0/23 203.24.199.0/24 203.24.202.0/24 203.24.212.0/23 203.24.217.0/24 203.24.219.0/24 203.24.244.0/24 203.25.19.0/24 203.25.20.0/23 203.25.46.0/24 203.25.48.0/21 203.25.64.0/23 203.25.91.0/24 203.25.99.0/24 203.25.100.0/24 203.25.106.0/24 203.25.131.0/24 203.25.135.0/24 203.25.138.0/24 203.25.147.0/24 203.25.153.0/24 203.25.154.0/23 203.25.164.0/24 203.25.166.0/24 203.25.174.0/23 203.25.180.0/24 203.25.182.0/24 203.25.191.0/24 203.25.199.0/24 203.25.200.0/24 203.25.202.0/23 203.25.208.0/20 203.25.229.0/24 203.25.235.0/24 203.25.236.0/24 203.25.242.0/24 203.26.12.0/24 203.26.34.0/24 203.26.49.0/24 203.26.50.0/24 203.26.55.0/24 203.26.56.0/23 203.26.60.0/24 203.26.65.0/24 203.26.68.0/24 203.26.76.0/24 203.26.80.0/24 203.26.84.0/24 203.26.97.0/24 203.26.102.0/23 203.26.115.0/24 203.26.116.0/24 203.26.129.0/24 203.26.143.0/24 203.26.144.0/24 203.26.148.0/23 203.26.154.0/24 203.26.158.0/23 203.26.161.0/24 203.26.170.0/24 203.26.173.0/24 203.26.176.0/24 203.26.185.0/24 203.26.202.0/23 203.26.210.0/24 203.26.214.0/24 203.26.222.0/24 203.26.224.0/24 203.26.228.0/24 203.26.232.0/24 203.27.0.0/24 203.27.10.0/24 203.27.15.0/24 203.27.16.0/24 203.27.20.0/24 203.27.22.0/23 203.27.40.0/24 203.27.45.0/24 203.27.53.0/24 203.27.65.0/24 203.27.66.0/24 203.27.81.0/24 203.27.88.0/24 203.27.102.0/24 203.27.109.0/24 203.27.117.0/24 203.27.121.0/24 203.27.122.0/23 203.27.125.0/24 203.27.200.0/24 203.27.202.0/24 203.27.233.0/24 203.27.241.0/24 203.27.250.0/24 203.28.10.0/24 203.28.12.0/24 203.28.33.0/24 203.28.34.0/23 203.28.43.0/24 203.28.44.0/24 203.28.54.0/24 203.28.56.0/24 203.28.73.0/24 203.28.74.0/24 203.28.76.0/24 203.28.86.0/24 203.28.88.0/24 203.28.112.0/24 203.28.131.0/24 203.28.136.0/24 203.28.140.0/24 203.28.145.0/24 203.28.165.0/24 203.28.169.0/24 203.28.170.0/24 203.28.178.0/23 203.28.185.0/24 203.28.187.0/24 203.28.196.0/24 203.28.226.0/23 203.28.239.0/24 203.29.2.0/24 203.29.8.0/23 203.29.13.0/24 203.29.14.0/24 203.29.28.0/24 203.29.46.0/24 203.29.57.0/24 203.29.61.0/24 203.29.63.0/24 203.29.69.0/24 203.29.73.0/24 203.29.81.0/24 203.29.90.0/24 203.29.95.0/24 203.29.100.0/24 203.29.103.0/24 203.29.112.0/24 203.29.120.0/22 203.29.182.0/23 203.29.187.0/24 203.29.189.0/24 203.29.190.0/24 203.29.205.0/24 203.29.210.0/24 203.29.217.0/24 203.29.227.0/24 203.29.231.0/24 203.29.233.0/24 203.29.234.0/24 203.29.248.0/24 203.29.254.0/23 203.30.16.0/23 203.30.25.0/24 203.30.27.0/24 203.30.29.0/24 203.30.66.0/24 203.30.81.0/24 203.30.87.0/24 203.30.111.0/24 203.30.121.0/24 203.30.123.0/24 203.30.152.0/24 203.30.156.0/24 203.30.162.0/24 203.30.173.0/24 203.30.175.0/24 203.30.187.0/24 203.30.194.0/24 203.30.217.0/24 203.30.220.0/24 203.30.222.0/24 203.30.232.0/23 203.30.235.0/24 203.30.240.0/23 203.30.246.0/24 203.30.250.0/23 203.31.45.0/24 203.31.46.0/24 203.31.49.0/24 203.31.51.0/24 203.31.54.0/23 203.31.69.0/24 203.31.72.0/24 203.31.80.0/24 203.31.85.0/24 203.31.97.0/24 203.31.105.0/24 203.31.106.0/24 203.31.108.0/23 203.31.124.0/24 203.31.162.0/24 203.31.174.0/24 203.31.177.0/24 203.31.181.0/24 203.31.187.0/24 203.31.189.0/24 203.31.204.0/24 203.31.220.0/24 203.31.222.0/23 203.31.225.0/24 203.31.229.0/24 203.31.248.0/23 203.31.253.0/24 203.32.20.0/24 203.32.48.0/23 203.32.56.0/24 203.32.60.0/24 203.32.62.0/24 203.32.68.0/23 203.32.76.0/24 203.32.81.0/24 203.32.84.0/23 203.32.95.0/24 203.32.102.0/24 203.32.105.0/24 203.32.130.0/24 203.32.133.0/24 203.32.140.0/24 203.32.152.0/24 203.32.186.0/23 203.32.192.0/24 203.32.196.0/24 203.32.203.0/24 203.32.204.0/23 203.32.212.0/24 203.33.4.0/24 203.33.7.0/24 203.33.8.0/21 203.33.21.0/24 203.33.26.0/24 203.33.32.0/24 203.33.63.0/24 203.33.64.0/24 203.33.67.0/24 203.33.68.0/24 203.33.73.0/24 203.33.79.0/24 203.33.100.0/24 203.33.122.0/24 203.33.129.0/24 203.33.131.0/24 203.33.145.0/24 203.33.156.0/24 203.33.158.0/23 203.33.174.0/24 203.33.185.0/24 203.33.200.0/24 203.33.202.0/23 203.33.204.0/24 203.33.206.0/23 203.33.214.0/23 203.33.224.0/23 203.33.226.0/24 203.33.233.0/24 203.33.243.0/24 203.33.250.0/24 203.34.4.0/24 203.34.21.0/24 203.34.27.0/24 203.34.39.0/24 203.34.48.0/23 203.34.54.0/24 203.34.56.0/23 203.34.67.0/24 203.34.69.0/24 203.34.76.0/24 203.34.92.0/24 203.34.106.0/24 203.34.113.0/24 203.34.147.0/24 203.34.150.0/24 203.34.152.0/23 203.34.161.0/24 203.34.162.0/24 203.34.187.0/24 203.34.192.0/21 203.34.204.0/22 203.34.232.0/24 203.34.240.0/24 203.34.242.0/24 203.34.245.0/24 203.34.251.0/24 203.55.2.0/23 203.55.4.0/24 203.55.10.0/24 203.55.13.0/24 203.55.22.0/24 203.55.30.0/24 203.55.93.0/24 203.55.101.0/24 203.55.109.0/24 203.55.110.0/24 203.55.116.0/23 203.55.119.0/24 203.55.128.0/23 203.55.146.0/23 203.55.192.0/24 203.55.196.0/24 203.55.218.0/23 203.55.221.0/24 203.55.224.0/24 203.56.1.0/24 203.56.4.0/24 203.56.12.0/24 203.56.24.0/24 203.56.38.0/24 203.56.40.0/24 203.56.46.0/24 203.56.48.0/21 203.56.68.0/23 203.56.82.0/23 203.56.84.0/23 203.56.95.0/24 203.56.110.0/24 203.56.121.0/24 203.56.161.0/24 203.56.169.0/24 203.56.172.0/23 203.56.175.0/24 203.56.183.0/24 203.56.185.0/24 203.56.187.0/24 203.56.192.0/24 203.56.198.0/24 203.56.201.0/24 203.56.208.0/23 203.56.210.0/24 203.56.214.0/24 203.56.216.0/24 203.56.227.0/24 203.56.228.0/24 203.56.231.0/24 203.56.232.0/24 203.56.240.0/24 203.56.252.0/24 203.56.254.0/24 203.57.5.0/24 203.57.6.0/24 203.57.12.0/23 203.57.28.0/24 203.57.39.0/24 203.57.46.0/24 203.57.58.0/24 203.57.61.0/24 203.57.66.0/24 203.57.69.0/24 203.57.70.0/23 203.57.73.0/24 203.57.90.0/24 203.57.101.0/24 203.57.109.0/24 203.57.123.0/24 203.57.157.0/24 203.57.200.0/24 203.57.202.0/24 203.57.206.0/24 203.57.222.0/24 203.57.224.0/20 203.57.246.0/23 203.57.249.0/24 203.57.253.0/24 203.57.254.0/23 203.62.2.0/24 203.62.131.0/24 203.62.139.0/24 203.62.161.0/24 203.62.197.0/24 203.62.228.0/22 203.62.234.0/24 203.62.246.0/24 203.65.240.0/22 203.76.160.0/22 203.76.168.0/22 203.76.208.0/21 203.76.216.0/22 203.76.240.0/21 203.77.180.0/22 203.78.48.0/20 203.78.156.0/22 203.79.0.0/20 203.79.32.0/20 203.80.4.0/23 203.80.32.0/20 203.80.57.0/24 203.80.129.0/24 203.80.132.0/22 203.80.136.0/21 203.80.144.0/20 203.81.0.0/21 203.81.16.0/20 203.81.244.0/22 203.82.0.0/23 203.82.16.0/21 203.82.112.0/20 203.82.224.0/20 203.83.0.0/22 203.83.8.0/21 203.83.56.0/21 203.83.224.0/20 203.86.0.0/17 203.86.250.0/24 203.86.254.0/23 203.88.32.0/19 203.88.100.0/22 203.88.192.0/19 203.89.0.0/22 203.89.8.0/21 203.89.100.0/22 203.89.133.0/24 203.89.136.0/22 203.89.144.0/24 203.90.0.0/22 203.90.8.0/21 203.90.128.0/18 203.90.192.0/19 203.91.32.0/19 203.91.96.0/20 203.91.120.0/21 203.92.0.0/22 203.92.6.0/24 203.92.160.0/19 203.93.0.0/16 203.94.0.0/19 203.95.0.0/21 203.95.96.0/19 203.95.128.0/18 203.95.200.0/21 203.95.208.0/22 203.95.224.0/19 203.99.8.0/21 203.99.16.0/20 203.99.80.0/20 203.100.32.0/20 203.100.48.0/21 203.100.58.0/24 203.100.60.0/24 203.100.63.0/24 203.100.80.0/20 203.100.96.0/19 203.100.192.0/20 203.104.32.0/20 203.105.96.0/19 203.105.128.0/19 203.107.0.0/17 203.110.160.0/19 203.110.208.0/20 203.110.232.0/23 203.110.234.0/24 203.114.80.0/20 203.114.244.0/22 203.118.192.0/19 203.118.241.0/24 203.118.248.0/22 203.119.24.0/21 203.119.32.0/22 203.119.80.0/22 203.119.85.0/24 203.119.113.0/24 203.119.114.0/23 203.119.116.0/22 203.119.120.0/21 203.119.128.0/17 203.123.58.0/24 203.128.32.0/19 203.128.96.0/19 203.128.128.0/24 203.128.224.0/21 203.129.8.0/21 203.130.32.0/19 203.132.32.0/19 203.134.240.0/21 203.135.96.0/19 203.135.160.0/20 203.142.12.0/23 203.142.219.0/24 203.142.224.0/19 203.144.96.0/19 203.145.0.0/19 203.148.0.0/18 203.148.64.0/20 203.148.80.0/22 203.148.86.0/23 203.149.92.0/22 203.152.64.0/19 203.152.128.0/19 203.153.0.0/22 203.156.192.0/18 203.158.16.0/21 203.160.52.0/22 203.160.104.0/21 203.160.129.0/24 203.160.192.0/19 203.161.0.0/22 203.161.180.0/24 203.161.183.0/24 203.161.192.0/19 203.166.160.0/19 203.167.28.0/22 203.168.0.0/19 203.170.58.0/23 203.171.0.0/22 203.171.208.0/24 203.171.224.0/20 203.174.4.0/24 203.174.6.0/23 203.174.96.0/19 203.175.128.0/19 203.175.192.0/18 203.176.0.0/18 203.176.64.0/19 203.176.168.0/21 203.184.80.0/20 203.185.189.0/24 203.187.160.0/19 203.189.0.0/23 203.189.6.0/23 203.189.112.0/22 203.189.192.0/19 203.189.232.0/22 203.189.240.0/22 203.190.96.0/20 203.190.249.0/24 203.191.0.0/23 203.191.2.0/24 203.191.5.0/24 203.191.7.0/24 203.191.16.0/20 203.191.64.0/18 203.191.133.0/24 203.191.144.0/20 203.192.0.0/19 203.193.224.0/19 203.194.120.0/21 203.195.64.0/19 203.195.112.0/21 203.195.128.0/17 203.196.0.0/20 203.196.28.0/22 203.201.181.0/24 203.201.182.0/24 203.202.236.0/22 203.205.64.0/19 203.205.128.0/17 203.207.64.0/18 203.207.128.0/17 203.208.0.0/20 203.208.16.0/22 203.208.32.0/19 203.209.224.0/19 203.212.0.0/20 203.212.80.0/20 203.215.232.0/21 203.217.164.0/22 203.222.192.0/20 203.223.0.0/20 203.223.16.0/21 204.52.191.0/24 204.55.160.0/24 204.74.96.0/24 204.114.176.0/23 206.219.44.0/23 206.219.50.0/23 206.219.52.0/23 207.89.20.0/24 210.2.0.0/19 210.5.0.0/19 210.5.56.0/21 210.5.128.0/19 210.7.56.0/21 210.12.0.0/15 210.14.64.0/19 210.14.112.0/20 210.14.128.0/17 210.15.0.0/17 210.15.128.0/18 210.16.104.0/22 210.16.128.0/18 210.21.0.0/16 210.22.0.0/16 210.23.32.0/19 210.25.0.0/16 210.26.0.0/15 210.28.0.0/14 210.32.0.0/12 210.51.0.0/16 210.52.0.0/15 210.56.192.0/19 210.72.0.0/14 210.76.0.0/15 210.78.0.0/16 210.79.64.0/18 210.79.224.0/19 210.82.0.0/15 210.87.128.0/18 210.185.192.0/18 210.192.96.0/19 211.64.0.0/13 211.80.0.0/12 211.96.0.0/13 211.136.0.0/13 211.144.0.0/12 211.160.0.0/13 212.64.0.0/17 212.129.128.0/17 218.0.0.0/11 218.56.0.0/13 218.64.0.0/11 218.96.0.0/14 218.100.88.0/21 218.100.96.0/19 218.100.128.0/17 218.104.0.0/14 218.108.0.0/15 218.185.192.0/19 218.185.240.0/21 218.192.0.0/12 218.240.0.0/13 218.249.0.0/16 219.72.0.0/16 219.82.0.0/16 219.83.128.0/17 219.90.68.0/22 219.90.72.0/21 219.128.0.0/11 219.216.0.0/13 219.224.0.0/12 219.242.0.0/15 219.244.0.0/14 220.101.192.0/18 220.112.0.0/14 220.152.128.0/17 220.154.0.0/15 220.158.240.0/22 220.160.0.0/11 220.192.0.0/12 220.231.0.0/18 220.231.128.0/17 220.232.64.0/18 220.234.0.0/16 220.242.0.0/15 220.247.136.0/21 220.248.0.0/14 220.252.0.0/16 221.0.0.0/13 221.8.0.0/14 221.12.0.0/17 221.12.128.0/18 221.13.0.0/16 221.14.0.0/15 221.122.0.0/15 221.128.128.0/17 221.129.0.0/16 221.130.0.0/15 221.133.224.0/19 221.136.0.0/15 221.172.0.0/14 221.176.0.0/13 221.192.0.0/14 221.196.0.0/15 221.198.0.0/16 221.199.0.0/17 221.199.128.0/18 221.199.192.0/20 221.199.224.0/19 221.200.0.0/13 221.208.0.0/12 221.224.0.0/12 222.16.0.0/12 222.32.0.0/11 222.64.0.0/11 222.125.0.0/16 222.126.128.0/17 222.128.0.0/12 222.160.0.0/14 222.168.0.0/13 222.176.0.0/12 222.192.0.0/11 222.240.0.0/13 222.248.0.0/15 223.0.0.0/12 223.20.0.0/15 223.27.184.0/22 223.29.208.0/22 223.29.252.0/22 223.64.0.0/11 223.96.0.0/12 223.112.0.0/14 223.116.0.0/15 223.120.0.0/13 223.128.0.0/15 223.144.0.0/12 223.160.0.0/14 223.166.0.0/15 223.192.0.0/15 223.198.0.0/15 223.201.0.0/16 223.202.0.0/15 223.208.0.0/13 223.220.0.0/15 223.223.176.0/20 223.223.192.0/20 223.240.0.0/13 223.248.0.0/14 223.252.128.0/17 223.254.0.0/16 223.255.0.0/17 223.255.236.0/22 223.255.252.0/23 ================================================ FILE: core/src/main/assets/acl/gfwlist.acl ================================================ # # GFW list from https://github.com/gfwlist/gfwlist/blob/master/gfwlist.txt # [bypass_all] [proxy_list] # Telegram IPs$ 91.108.4.0/22 91.108.8.0/21 91.108.16.0/21 91.108.36.0/22 91.108.56.0/22 109.239.140.0/24 149.154.160.0/20 14.102.250.18 14.102.250.19 174.142.105.153 50.7.31.230 67.220.91.15 67.220.91.18 67.220.91.23 69.65.19.160 72.52.81.22 85.17.73.31 (?:^|\.)030buy\.com$ (?:^|\.)0rz\.tw$ (?:^|\.)1-apple\.com\.tw$ (?:^|\.)10\.tt$ (?:^|\.)1000giri\.net$ (?:^|\.)100ke\.org$ (?:^|\.)10conditionsoflove\.com$ (?:^|\.)10musume\.com$ (?:^|\.)123rf\.com$ (?:^|\.)12bet\.com$ (?:^|\.)12vpn\.com$ (?:^|\.)12vpn\.net$ (?:^|\.)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$ (?:^|\.)1984bbs\.com$ (?:^|\.)1984bbs\.org$ (?:^|\.)1989report\.hkja\.org\.hk$ (?:^|\.)1991way\.com$ (?:^|\.)1998cdp\.org$ (?:^|\.)1bao\.org$ (?:^|\.)1dumb\.com$ (?:^|\.)1e100\.net$ (?:^|\.)1eew\.com$ (?:^|\.)1mobile\.com$ (?:^|\.)1pondo\.tv$ (?:^|\.)2-hand\.info$ (?:^|\.)2000fun\.com$ (?:^|\.)2008xianzhang\.info$ (?:^|\.)2017\.hk$ (?:^|\.)21andy\.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$ (?:^|\.)43110\.cf$ (?:^|\.)466453\.com$ (?:^|\.)4bluestones\.biz$ (?:^|\.)4chan\.com$ (?:^|\.)4dq\.com$ (?:^|\.)4everproxy\.com$ (?:^|\.)4irc\.com$ (?:^|\.)4mydomain\.com$ (?:^|\.)4pu\.com$ (?:^|\.)4rbtv\.com$ (?:^|\.)4shared\.com$ (?:^|\.)51\.ca$ (?:^|\.)51jav\.org$ (?:^|\.)51luoben\.com$ (?:^|\.)5278\.cc$ (?:^|\.)5299\.tv$ (?:^|\.)56cun04\.jigsy\.com$ (?:^|\.)5aimiku\.com$ (?:^|\.)5i01\.com$ (?:^|\.)5isotoi5\.org$ (?:^|\.)5maodang\.com$ (?:^|\.)63i\.com$ (?:^|\.)64memo$ (?:^|\.)64museum\.org$ (?:^|\.)64tianwang\.com$ (?:^|\.)64wiki\.com$ (?:^|\.)66\.ca$ (?:^|\.)666kb\.com$ (?:^|\.)6park\.com$ (?:^|\.)6parker\.com$ (?:^|\.)7capture\.com$ (?:^|\.)7cow\.com$ (?:^|\.)8-d\.com$ (?:^|\.)85cc\.net$ (?:^|\.)85cc\.us$ (?:^|\.)85st\.com$ (?:^|\.)881903\.com$ (?:^|\.)888\.com$ (?:^|\.)888poker\.com$ (?:^|\.)89-64\.org$ (?:^|\.)89\.64\.charter\.constitutionalism\.solutions$ (?:^|\.)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$ (?:^|\.)9gag\.com$ (?:^|\.)a-normal-day\.com$ (?:^|\.)a248\.e\.akamai\.net$ (?:^|\.)a5\.com\.ru$ (?:^|\.)aamacau\.com$ (?:^|\.)abc\.com$ (?:^|\.)abc\.net\.au$ (?:^|\.)abc\.pp\.ru$ (?:^|\.)abc\.xyz$ (?:^|\.)abchinese\.com$ (?:^|\.)abclite\.net$ (?:^|\.)abebooks\.com$ (?:^|\.)abematv\.akamaized\.net$ (?:^|\.)abitno\.linpie\.com$ (?:^|\.)ablwang\.com$ (?:^|\.)aboluowang\.com$ (?:^|\.)about\.google$ (?:^|\.)aboutgfw\.com$ (?:^|\.)abs\.edu$ (?:^|\.)ac\.jiruan\.net$ (?:^|\.)accim\.org$ (?:^|\.)aceros-de-hispania\.com$ (?:^|\.)acevpn\.com$ (?:^|\.)acg18\.me$ (?:^|\.)acgkj\.com$ (?:^|\.)acmedia365\.com$ (?:^|\.)acmetoy\.com$ (?:^|\.)acnw\.com\.au$ (?:^|\.)actfortibet\.org$ (?:^|\.)actimes\.com\.au$ (?:^|\.)activpn\.com$ (?:^|\.)aculo\.us$ (?:^|\.)adcex\.com$ (?:^|\.)addictedtocoffee\.de$ (?:^|\.)adelaidebbs\.com$ (?:^|\.)admin\.recaptcha\.net$ (?:^|\.)admob\.com$ (?:^|\.)adpl\.org\.hk$ (?:^|\.)ads-twitter\.com$ (?:^|\.)adsense\.com$ (?:^|\.)adult-sex-games\.com$ (?:^|\.)adult\.friendfinder\.com$ (?:^|\.)adultfriendfinder\.com$ (?:^|\.)adultkeep\.net$ (?:^|\.)advanscene\.com$ (?:^|\.)advertfan\.com$ (?:^|\.)ae\.hao123\.com$ (?:^|\.)ae\.org$ (?:^|\.)aenhancers\.com$ (?:^|\.)aex\.com$ (?:^|\.)af\.mil$ (?:^|\.)afantibbs\.com$ (?:^|\.)agnesb\.fr$ (?:^|\.)agoogleaday\.com$ (?:^|\.)agro\.hk$ (?:^|\.)ahr0chm6ly95zwnslm5lda$ (?:^|\.)ai-kan\.net$ (?:^|\.)ai-wen\.net$ (?:^|\.)ai\.binwang\.me$ (?:^|\.)ai\.google$ (?:^|\.)aiph\.net$ (?:^|\.)airasia\.com$ (?:^|\.)airconsole\.com$ (?:^|\.)airvpn\.org$ (?:^|\.)aisex\.com$ (?:^|\.)ait\.org\.tw$ (?:^|\.)aiweiwei\.com$ (?:^|\.)aiweiweiblog\.com$ (?:^|\.)akademiye\.org$ (?:^|\.)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$ (?:^|\.)alkasir\.com$ (?:^|\.)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$ (?:^|\.)ameblo\.jp$ (?:^|\.)americangreencard\.com$ (?:^|\.)americanunfinished\.com$ (?:^|\.)amiblockedornot\.com$ (?:^|\.)amigobbs\.net$ (?:^|\.)amitabhafoundation\.us$ (?:^|\.)amnesty\.org$ (?:^|\.)amnesty\.org\.hk$ (?:^|\.)amnesty\.tw$ (?:^|\.)amnestyusa\.org$ (?:^|\.)amnyemachen\.org$ (?:^|\.)amoiist\.com$ (?:^|\.)ampproject\.org$ (?:^|\.)amtb-taipei\.org$ (?:^|\.)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$ (?:^|\.)animeshippuuden\.com$ (?:^|\.)aniscartujo\.com$ (?:^|\.)annatam\.com$ (?:^|\.)anobii\.com$ (?:^|\.)anontext\.com$ (?:^|\.)anonymise\.us$ (?:^|\.)anonymitynetwork\.com$ (?:^|\.)anonymizer\.com$ (?:^|\.)anonymouse\.org$ (?:^|\.)anpopo\.com$ (?:^|\.)answering-islam\.org$ (?:^|\.)anthonycalzadilla\.com$ (?:^|\.)anti1984\.com$ (?:^|\.)antichristendom\.com$ (?:^|\.)antiwave\.net$ (?:^|\.)anyporn\.com$ (?:^|\.)anysex\.com$ (?:^|\.)aobo\.com\.au$ (?:^|\.)aofriend\.com$ (?:^|\.)aofriend\.com\.au$ (?:^|\.)aojiao\.org$ (?:^|\.)aolchannels\.aol\.com$ (?:^|\.)aomiwang\.com$ (?:^|\.)apartmentratings\.com$ (?:^|\.)apartments\.com$ (?:^|\.)apetube\.com$ (?:^|\.)api-secure\.recaptcha\.net$ (?:^|\.)api-verify\.recaptcha\.net$ (?:^|\.)api\.ai$ (?:^|\.)api\.dropboxapi\.com$ (?:^|\.)api\.linksalpha\.com$ (?:^|\.)api\.proxlet\.com$ (?:^|\.)api\.pureapk\.com$ (?:^|\.)api\.recaptcha\.net$ (?:^|\.)apiary\.io$ (?:^|\.)apidocs\.linksalpha\.com$ (?:^|\.)apigee\.com$ (?:^|\.)apk-dl\.com$ (?:^|\.)apkdler\.com$ (?:^|\.)apkmirror\.com$ (?:^|\.)apkmonk\.com$ (?:^|\.)apkplz\.com$ (?:^|\.)apkpure\.com$ (?:^|\.)aplusvpn\.com$ (?:^|\.)app\.box\.com$ (?:^|\.)app\.heywire\.com$ (?:^|\.)app\.smartmailcloud\.com$ (?:^|\.)app\.tutanota\.com$ (?:^|\.)appdownloader\.net$ (?:^|\.)appledaily\.com$ (?:^|\.)appledaily\.com\.hk$ (?:^|\.)appledaily\.com\.tw$ (?:^|\.)appshopper\.com$ (?:^|\.)appsocks\.net$ (?:^|\.)appspot\.com$ (?:^|\.)appsto\.re$ (?:^|\.)aptoide\.com$ (?:^|\.)ar\.hao123\.com$ (?:^|\.)archive\.fo$ (?:^|\.)archive\.is$ (?:^|\.)archive\.li$ (?:^|\.)archive\.org$ (?:^|\.)archive\.today$ (?:^|\.)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$ (?:^|\.)asianews\.it$ (?:^|\.)asiansexdiary\.com$ (?:^|\.)asianspiss\.com$ (?:^|\.)asianwomensfilm\.de$ (?:^|\.)asiatgp\.com$ (?:^|\.)asiatoday\.us$ (?:^|\.)askstudent\.com$ (?:^|\.)askynz\.net$ (?:^|\.)assembla\.com$ (?:^|\.)assets\.bwbx\.io$ (?:^|\.)assimp\.org$ (?:^|\.)astrill\.com$ (?:^|\.)atc\.org\.au$ (?:^|\.)atchinese\.com$ (?:^|\.)atdmt\.com$ (?:^|\.)atgfw\.org$ (?:^|\.)athenaeizou\.com$ (?:^|\.)atlanta168\.com$ (?:^|\.)atlaspost\.com$ (?:^|\.)atnext\.com$ (?:^|\.)authorizeddns\.net$ (?:^|\.)authorizeddns\.org$ (?:^|\.)authorizeddns\.us$ (?:^|\.)autodraw\.com$ (?:^|\.)av-e-body\.com$ (?:^|\.)av\.com$ (?:^|\.)av\.movie$ (?:^|\.)av\.nightlife141\.com$ (?:^|\.)avaaz\.org$ (?:^|\.)avbody\.tv$ (?:^|\.)avcity\.tv$ (?:^|\.)avcool\.com$ (?:^|\.)avdb\.in$ (?:^|\.)avdb\.tv$ (?:^|\.)avfantasy\.com$ (?:^|\.)avgle\.com$ (?:^|\.)avidemux\.org$ (?:^|\.)avmo\.pw$ (?:^|\.)avmoo\.com$ (?:^|\.)avmoo\.net$ (?:^|\.)avmoo\.pw$ (?:^|\.)avoision\.com$ (?:^|\.)avyahoo\.com$ (?:^|\.)axureformac\.com$ (?:^|\.)azerbaycan\.tv$ (?:^|\.)azerimix\.com$ (?:^|\.)azubu\.tv$ (?:^|\.)b0ne\.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$ (?:^|\.)bandwagonhost\.com$ (?:^|\.)bangbrosnetwork\.com$ (?:^|\.)bangchen\.net$ (?:^|\.)bangdream\.space$ (?:^|\.)bangyoulater\.com$ (?:^|\.)bankmobilevibe\.com$ (?:^|\.)bannedbook\.org$ (?:^|\.)bannednews\.org$ (?:^|\.)banorte\.com$ (?:^|\.)baramangaonline\.com$ (?:^|\.)barenakedislam\.com$ (?:^|\.)barnabu\.co\.uk$ (?:^|\.)barton\.de$ (?:^|\.)bartvpn\.com$ (?:^|\.)bash-hackers\.org$ (?:^|\.)bastillepost\.com$ (?:^|\.)bayvoice\.net$ (?:^|\.)bb-chat\.tv$ (?:^|\.)bb\.ttv\.com\.tw$ (?:^|\.)bbc\.co\.uk$ (?:^|\.)bbc\.com$ (?:^|\.)bbc\.in$ (?:^|\.)bbcchinese\.com$ (?:^|\.)bbchat\.tv$ (?:^|\.)bbci\.co\.uk$ (?:^|\.)bbg\.gov$ (?:^|\.)bbkz\.com$ (?:^|\.)bbnradio\.org$ (?:^|\.)bbs-tw\.com$ (?:^|\.)bbs\.brockbbs\.com$ (?:^|\.)bbs\.cantonese\.asia$ (?:^|\.)bbs\.ecstart\.com$ (?:^|\.)bbs\.hanminzu\.org$ (?:^|\.)bbs\.hasi\.wang$ (?:^|\.)bbs\.huasing\.org$ (?:^|\.)bbs\.junglobal\.net$ (?:^|\.)bbs\.kimy\.com\.tw$ (?:^|\.)bbs\.mikocon\.com$ (?:^|\.)bbs\.morbell\.com$ (?:^|\.)bbs\.mychat\.to$ (?:^|\.)bbs\.netbig\.com$ (?:^|\.)bbs\.ozchinese\.com$ (?:^|\.)bbs\.qmzdd\.com$ (?:^|\.)bbs\.sina\.com$ (?:^|\.)bbs\.sina\.com%2f$ (?:^|\.)bbs\.skykiwi\.com$ (?:^|\.)bbs\.sou-tong\.org$ (?:^|\.)bbs\.tuitui\.info$ (?:^|\.)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$ (?:^|\.)beijingspring\.com$ (?:^|\.)beijingzx\.org$ (?:^|\.)belamionline\.com$ (?:^|\.)bell\.wiki$ (?:^|\.)bemywife\.cc$ (?:^|\.)beric\.me$ (?:^|\.)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$ (?:^|\.)big\.one$ (?:^|\.)bigfools\.com$ (?:^|\.)bigjapanesesex\.com$ (?:^|\.)bigmoney\.biz$ (?:^|\.)bignews\.org$ (?:^|\.)bigsound\.org$ (?:^|\.)biliworld\.com$ (?:^|\.)billypan\.com$ (?:^|\.)binance\.com$ (?:^|\.)binux\.me$ (?:^|\.)bipic\.net$ (?:^|\.)bird\.so$ (?:^|\.)bit-z\.com$ (?:^|\.)bit\.do$ (?:^|\.)bit\.ly$ (?:^|\.)bitc\.bme\.emory\.edu$ (?:^|\.)bitcointalk\.org$ (?:^|\.)bitcoinworld\.com$ (?:^|\.)bitfinex\.com$ (?:^|\.)bithumb\.com$ (?:^|\.)bitinka\.com\.ar$ (?:^|\.)bitmex\.com$ (?:^|\.)bitshare\.com$ (?:^|\.)bitsnoop\.com$ (?:^|\.)bitvise\.com$ (?:^|\.)bizhat\.com$ (?:^|\.)bjnewlife\.org$ (?:^|\.)bjs\.org$ (?:^|\.)bjzc\.org$ (?:^|\.)bl-doujinsouko\.com$ (?:^|\.)blacklogic\.com$ (?:^|\.)blackvpn\.com$ (?:^|\.)blewpass\.com$ (?:^|\.)blinkx\.com$ (?:^|\.)blinw\.com$ (?:^|\.)blip\.tv$ (?:^|\.)blockcn\.com$ (?:^|\.)blockless\.com$ (?:^|\.)blog\.calibre-ebook\.com$ (?:^|\.)blog\.cnyes\.com$ (?:^|\.)blog\.daum\.net$ (?:^|\.)blog\.de$ (?:^|\.)blog\.exblog\.co\.jp$ (?:^|\.)blog\.excite\.co\.jp$ (?:^|\.)blog\.expofutures\.com$ (?:^|\.)blog\.fizzik\.com$ (?:^|\.)blog\.foolsmountain\.com$ (?:^|\.)blog\.fuckgfw233\.org$ (?:^|\.)blog\.goo\.ne\.jp$ (?:^|\.)blog\.google$ (?:^|\.)blog\.inoreader\.com$ (?:^|\.)blog\.istef\.info$ (?:^|\.)blog\.jackjia\.com$ (?:^|\.)blog\.jp$ (?:^|\.)blog\.kangye\.org$ (?:^|\.)blog\.lester850\.info$ (?:^|\.)blog\.martinoei\.com$ (?:^|\.)blog\.pathtosharepoint\.com$ (?:^|\.)blog\.pentalogic\.net$ (?:^|\.)blog\.qooza\.hk$ (?:^|\.)blog\.ranxiang\.com$ (?:^|\.)blog\.sina\.com\.tw$ (?:^|\.)blog\.sogoo\.org$ (?:^|\.)blog\.soylent\.com$ (?:^|\.)blog\.syx86\.cn$ (?:^|\.)blog\.syx86\.com$ (?:^|\.)blog\.taragana\.com$ (?:^|\.)blog\.tiney\.com$ (?:^|\.)blog\.workflow\.is$ (?:^|\.)blog\.xuite\.net$ (?:^|\.)blog\.youthwant\.com\.tw$ (?:^|\.)blog\.youxu\.info$ (?:^|\.)blogblog\.com$ (?:^|\.)blogcatalog\.com$ (?:^|\.)blogcity\.me$ (?:^|\.)blogdns\.org$ (?:^|\.)blogger\.com$ (?:^|\.)blogimg\.jp$ (?:^|\.)bloglines\.com$ (?:^|\.)bloglovin\.com$ (?:^|\.)blogs\.icerocket\.com$ (?:^|\.)blogs\.libraryinformationtechnology\.com$ (?:^|\.)blogs\.tampabay\.com$ (?:^|\.)blogs\.yahoo\.co\.jp$ (?:^|\.)blogspot(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?){1,2}$ (?:^|\.)blogtd\.net$ (?:^|\.)blogtd\.org$ (?:^|\.)bloodshed\.net$ (?:^|\.)bloomberg\.cn$ (?:^|\.)bloomberg\.com$ (?:^|\.)bloomberg\.de$ (?:^|\.)bloombergview\.com$ (?:^|\.)bloomfortune\.com$ (?:^|\.)blueangellive\.com$ (?:^|\.)bmfinn\.com$ (?:^|\.)bnews\.co$ (?:^|\.)bnn\.co$ (?:^|\.)bnrmetal\.com$ (?:^|\.)boardreader\.com$ (?:^|\.)bod\.asia$ (?:^|\.)bodog88\.com$ (?:^|\.)bolehvpn\.net$ (?:^|\.)bolin\.netfirms\.com$ (?:^|\.)bonbonme\.com$ (?:^|\.)bonbonsex\.com$ (?:^|\.)bonfoundation\.org$ (?:^|\.)bongacams\.com$ (?:^|\.)boobstagram\.com$ (?:^|\.)book\.com\.tw$ (?:^|\.)book\.zi5\.me$ (?:^|\.)bookepub\.com$ (?:^|\.)books\.com\.tw$ (?:^|\.)booktopia\.com\.au$ (?:^|\.)boomssr\.com$ (?:^|\.)bot\.nu$ (?:^|\.)botanwang\.com$ (?:^|\.)bowenpress\.com$ (?:^|\.)boxpn\.com$ (?:^|\.)boxun$ (?:^|\.)boxun\.com$ (?:^|\.)boxun\.tv$ (?:^|\.)boxunblog\.com$ (?:^|\.)boxunclub\.com$ (?:^|\.)boyangu\.com$ (?:^|\.)boyfriendtv\.com$ (?:^|\.)boysfood\.com$ (?:^|\.)boysmaster\.com$ (?:^|\.)br\.hao123\.com$ (?:^|\.)br\.st$ (?:^|\.)brainyquote\.com$ (?:^|\.)brandonhutchinson\.com$ (?:^|\.)braumeister\.org$ (?:^|\.)bravotube\.net$ (?:^|\.)brazzers\.com$ (?:^|\.)break\.com$ (?:^|\.)breakgfw\.com$ (?:^|\.)breaking911\.com$ (?:^|\.)breakingtweets\.com$ (?:^|\.)breakwall\.net$ (?:^|\.)briefdream\.com$ (?:^|\.)briian\.com$ (?:^|\.)brizzly\.com$ (?:^|\.)brkmd\.com$ (?:^|\.)broadbook\.com$ (?:^|\.)broadpressinc\.com$ (?:^|\.)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$ (?:^|\.)bullog\.org$ (?:^|\.)bullogger\.com$ (?:^|\.)bunbunhk\.com$ (?:^|\.)busayari\.com$ (?:^|\.)businessinsider\.com$ (?:^|\.)businesstoday\.com\.tw$ (?:^|\.)businessweek\.com$ (?:^|\.)busu\.org$ (?:^|\.)busytrade\.com$ (?:^|\.)buugaa\.com$ (?:^|\.)buy\.yahoo\.com\.tw$ (?:^|\.)buzzhand\.com$ (?:^|\.)buzzhand\.net$ (?:^|\.)buzzorange\.com$ (?:^|\.)bvpn\.com$ (?:^|\.)bwgyhw\.com$ (?:^|\.)bwh1\.net$ (?:^|\.)bwsj\.hk$ (?:^|\.)bx\.in\.th$ (?:^|\.)bx\.tl$ (?:^|\.)bynet\.co\.il$ (?:^|\.)c-est-simple\.com$ (?:^|\.)c-spanvideo\.org$ (?:^|\.)c100tibet\.org$ (?:^|\.)c1522\.mooo\.com$ (?:^|\.)c2cx\.com$ (?:^|\.)cablegatesearch\.net$ (?:^|\.)cachinese\.com$ (?:^|\.)cacnw\.com$ (?:^|\.)cactusvpn\.com$ (?:^|\.)cafepress\.com$ (?:^|\.)cahr\.org\.tw$ (?:^|\.)calameo\.com$ (?:^|\.)calebelston\.com$ (?:^|\.)calgarychinese\.ca$ (?:^|\.)calgarychinese\.com$ (?:^|\.)calgarychinese\.net$ (?:^|\.)cam4\.com$ (?:^|\.)cam4\.jp$ (?:^|\.)cam4\.sg$ (?:^|\.)camfrog\.com$ (?:^|\.)cams\.com$ (?:^|\.)cams\.org\.sg$ (?:^|\.)canadameet\.com$ (?:^|\.)canalporno\.com$ (?:^|\.)canyu\.org$ (?:^|\.)cao\.im$ (?:^|\.)caobian\.info$ (?:^|\.)caochangqing\.com$ (?:^|\.)cap\.org\.hk$ (?:^|\.)carabinasypistolas\.com$ (?:^|\.)cardinalkungfoundation\.org$ (?:^|\.)carfax\.com$ (?:^|\.)cari\.com\.my$ (?:^|\.)caribbeancom\.com$ (?:^|\.)carmotorshow\.com$ (?:^|\.)cartoonmovement\.com$ (?:^|\.)casadeltibetbcn\.org$ (?:^|\.)casatibet\.org\.mx$ (?:^|\.)casino\.williamhill\.com$ (?:^|\.)casinobellini\.com$ (?:^|\.)casinoking\.com$ (?:^|\.)casinoriva\.com$ (?:^|\.)castbox\.fm$ (?:^|\.)catch22\.net$ (?:^|\.)catchgod\.com$ (?:^|\.)catfightpayperview\.xxx$ (?:^|\.)catholic\.org\.hk$ (?:^|\.)catholic\.org\.tw$ (?:^|\.)cathvoice\.org\.tw$ (?:^|\.)cattt\.com$ (?:^|\.)cbc\.ca$ (?:^|\.)cbs\.ntu\.edu\.tw$ (?:^|\.)cbsnews\.com$ (?:^|\.)cbtc\.org\.hk$ (?:^|\.)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$ (?:^|\.)cdn$ (?:^|\.)cdn-apple\.com$ (?:^|\.)cdn-images\.mailchimp\.com$ (?:^|\.)cdn\.assets\.lfpcontent\.com$ (?:^|\.)cdn\.helixstudios\.net$ (?:^|\.)cdn\.printfriendly\.com$ (?:^|\.)cdn\.seatguru\.com$ (?:^|\.)cdn\.softlayer\.net$ (?:^|\.)cdn1\.lp\.saboom\.com$ (?:^|\.)cdnews\.com\.tw$ (?:^|\.)cdninstagram\.com$ (?:^|\.)cdp1989\.org$ (?:^|\.)cdp1998\.org$ (?:^|\.)cdp2006\.org$ (?:^|\.)cdpa\.url\.tw$ (?:^|\.)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$ (?:^|\.)certificate\.revocationcheck\.com$ (?:^|\.)cfhks\.org\.hk$ (?:^|\.)cfos\.de$ (?:^|\.)cftfc\.com$ (?:^|\.)cgdepot\.org$ (?:^|\.)cgst\.edu$ (?:^|\.)ch\.shvoong\.com$ (?:^|\.)change\.org$ (?:^|\.)changeip\.name$ (?:^|\.)changeip\.net$ (?:^|\.)changeip\.org$ (?:^|\.)changp\.com$ (?:^|\.)changsa\.net$ (?:^|\.)channel8news\.sg$ (?:^|\.)chaoex\.com$ (?:^|\.)chapm25\.com$ (?:^|\.)chatnook\.com$ (?:^|\.)chaturbate\.com$ (?:^|\.)chengmingmag\.com$ (?:^|\.)chenguangcheng\.com$ (?:^|\.)chenpokong\.com$ (?:^|\.)chenpokong\.net$ (?:^|\.)chenshan20042005\.wordpress\.com$ (?:^|\.)cherrysave\.com$ (?:^|\.)chhongbi\.org$ (?:^|\.)chicagoncmtv\.com$ (?:^|\.)china-mmm\.jp\.net$ (?:^|\.)china-mmm\.net$ (?:^|\.)china-mmm\.sa\.com$ (?:^|\.)china-review\.com\.ua$ (?:^|\.)china-week\.com$ (?:^|\.)china\.hket\.com$ (?:^|\.)china\.ucanews\.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$ (?:^|\.)chinaview\.wordpress\.com$ (?:^|\.)chinaway\.org$ (?:^|\.)chinaworker\.info$ (?:^|\.)chinaxchina\.com$ (?:^|\.)chinayouth\.org\.hk$ (?:^|\.)chinayuanmin\.org$ (?:^|\.)chinese-hermit\.net$ (?:^|\.)chinese-leaders\.org$ (?:^|\.)chinese-memorial\.org$ (?:^|\.)chinese\.donga\.com$ (?:^|\.)chinese\.engadget\.com$ (?:^|\.)chinese\.irib\.ir$ (?:^|\.)chinese\.soifind\.com$ (?:^|\.)chinesedaily\.com$ (?:^|\.)chinesedailynews\.com$ (?:^|\.)chinesedemocracy\.com$ (?:^|\.)chinesegay\.org$ (?:^|\.)chinesen\.de$ (?:^|\.)chinesenews\.net\.au$ (?:^|\.)chinesepen\.org$ (?:^|\.)chinesetalks\.net$ (?:^|\.)chineseupress\.com$ (?:^|\.)chingcheong\.com$ (?:^|\.)chinman\.net$ (?:^|\.)chithu\.org$ (?:^|\.)chn\.chosun\.com$ (?:^|\.)chobit\.cc$ (?:^|\.)chrdnet\.com$ (?:^|\.)christianfreedom\.org$ (?:^|\.)christianstudy\.com$ (?:^|\.)christiantimes\.org\.hk$ (?:^|\.)christusrex\.org$ (?:^|\.)chrlawyers\.hk$ (?:^|\.)chrome\.com$ (?:^|\.)chromecast\.com$ (?:^|\.)chromeexperiments\.com$ (?:^|\.)chromercise\.com$ (?:^|\.)chromestatus\.com$ (?:^|\.)chromium\.org$ (?:^|\.)chuang-yen\.org$ (?:^|\.)chubold\.com$ (?:^|\.)chubun\.com$ (?:^|\.)chuizi\.net$ (?:^|\.)churchinhongkong\.org$ (?:^|\.)chushigangdrug\.ch$ (?:^|\.)cienen\.com$ (?:^|\.)cineastentreff\.de$ (?:^|\.)cipfg\.org$ (?:^|\.)circlethebayfortibet\.org$ (?:^|\.)cirosantilli\.com$ (?:^|\.)citizencn\.com$ (?:^|\.)citizenlab\.org$ (?:^|\.)citizenscommission\.hk$ (?:^|\.)citizensradio\.org$ (?:^|\.)city365\.ca$ (?:^|\.)city9x\.com$ (?:^|\.)citypopulation\.de$ (?:^|\.)citytalk\.tw$ (?:^|\.)civicparty\.hk$ (?:^|\.)civildisobediencemovement\.org$ (?:^|\.)civilhrfront\.org$ (?:^|\.)civiliangunner\.com$ (?:^|\.)civilmedia\.tw$ (?:^|\.)ck101\.com$ (?:^|\.)cl\.d0z\.net$ (?:^|\.)clarionproject\.org$ (?:^|\.)classicalguitarblog\.net$ (?:^|\.)clb\.org\.hk$ (?:^|\.)cldr\.unicode\.org$ (?:^|\.)cleansite\.biz$ (?:^|\.)cleansite\.info$ (?:^|\.)cleansite\.us$ (?:^|\.)clearharmony\.net$ (?:^|\.)clearsurance\.com$ (?:^|\.)clearwisdom\.net$ (?:^|\.)clementine-player\.org$ (?:^|\.)cling\.omy\.sg$ (?:^|\.)clinica-tibet\.ru$ (?:^|\.)clipfish\.de$ (?:^|\.)cloakpoint\.com$ (?:^|\.)cloud\.feedly\.com$ (?:^|\.)cloud\.mail\.ru$ (?:^|\.)club1069\.com$ (?:^|\.)clyp\.it$ (?:^|\.)cmcn\.org$ (?:^|\.)cmi\.org\.tw$ (?:^|\.)cmp\.hku\.hk$ (?:^|\.)cms\.gov$ (?:^|\.)cmule\.com$ (?:^|\.)cmule\.org$ (?:^|\.)cmx\.im$ (?:^|\.)cn-proxy\.com$ (?:^|\.)cn\.calameo\.com$ (?:^|\.)cn\.dayabook\.com$ (?:^|\.)cn\.fmnnow\.com$ (?:^|\.)cn\.freeones\.com$ (?:^|\.)cn\.giganews\.com$ (?:^|\.)cn\.ibtimes\.com$ (?:^|\.)cn\.nytstyle\.com$ (?:^|\.)cn\.sandscotaicentral\.com$ (?:^|\.)cn\.shafaqna\.com$ (?:^|\.)cn\.streetvoice\.com$ (?:^|\.)cn\.thegay\.com$ (?:^|\.)cn\.uncyclopedia\.wikia\.com$ (?:^|\.)cn\.uptodown\.com$ (?:^|\.)cn\.voa\.mobi$ (?:^|\.)cn2\.streetvoice\.com$ (?:^|\.)cn6\.eu$ (?:^|\.)cna\.com\.tw$ (?:^|\.)cnabc\.com$ (?:^|\.)cnbbnews\.wordpress\.com$ (?:^|\.)cnd\.org$ (?:^|\.)cnex\.org\.cn$ (?:^|\.)cnineu\.com$ (?:^|\.)cnn\.com$ (?:^|\.)cnnews\.chosun\.com$ (?:^|\.)cnpolitics\.org$ (?:^|\.)cnproxy\.com$ (?:^|\.)co\.ng\.mil$ (?:^|\.)coat\.co\.jp$ (?:^|\.)cobinhood\.com$ (?:^|\.)cochina\.co$ (?:^|\.)cochina\.org$ (?:^|\.)code1984\.com$ (?:^|\.)codeshare\.io$ (?:^|\.)codeskulptor\.org$ (?:^|\.)coin2co\.in$ (?:^|\.)coinbene\.com$ (?:^|\.)coinegg\.com$ (?:^|\.)coinex\.com$ (?:^|\.)coingi\.com$ (?:^|\.)coinrail\.co\.kr$ (?:^|\.)cointiger\.com$ (?:^|\.)cointobe\.com$ (?:^|\.)coinut\.com$ (?:^|\.)collateralmurder\.com$ (?:^|\.)collateralmurder\.org$ (?:^|\.)com\.google$ (?:^|\.)comefromchina\.com$ (?:^|\.)comic-mega\.me$ (?:^|\.)commandarms\.com$ (?:^|\.)commentshk\.com$ (?:^|\.)communistcrimes\.org$ (?:^|\.)community\.windy\.com$ (?:^|\.)communitychoicecu\.com$ (?:^|\.)compileheart\.com$ (?:^|\.)compress\.to$ (?:^|\.)connect\.facebook\.net$ (?:^|\.)conoha\.jp$ (?:^|\.)contactmagazine\.net$ (?:^|\.)contests\.twilio\.com$ (?:^|\.)convio\.net$ (?:^|\.)coobay\.com$ (?:^|\.)coolaler\.com$ (?:^|\.)coolder\.com$ (?:^|\.)coolloud\.org\.tw$ (?:^|\.)coolncute\.com$ (?:^|\.)coolstuffinc\.com$ (?:^|\.)corumcollege\.com$ (?:^|\.)cos-moe\.com$ (?:^|\.)cosmic\.monar\.ch$ (?:^|\.)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$ (?:^|\.)crrev\.com$ (?:^|\.)crucial\.com$ (?:^|\.)csdparty\.com$ (?:^|\.)css\.pixnet\.in$ (?:^|\.)csuchen\.de$ (?:^|\.)csw\.org\.uk$ (?:^|\.)ct\.org\.tw$ (?:^|\.)ctao\.org$ (?:^|\.)ctfriend\.net$ (?:^|\.)cthlo\.github\.io$ (?:^|\.)ctitv\.com\.tw$ (?:^|\.)cts\.com\.tw$ (?:^|\.)cuhkacs\.org$ (?:^|\.)cuihua\.org$ (?:^|\.)cuiweiping\.net$ (?:^|\.)culture\.tw$ (?:^|\.)cumlouder\.com$ (?:^|\.)curvefish\.com$ (?:^|\.)cusu\.hk$ (?:^|\.)cutscenes\.net$ (?:^|\.)cw\.com\.tw$ (?:^|\.)cyberghost\.natado\.com$ (?:^|\.)cyberghostvpn\.com$ (?:^|\.)cynscribe\.com$ (?:^|\.)cytode\.us$ (?:^|\.)d-fukyu\.com$ (?:^|\.)d100\.net$ (?:^|\.)d1b183sg0nvnuh\.cloudfront\.net$ (?:^|\.)d1c37gjwa26taa\.cloudfront\.net$ (?:^|\.)d2bay\.com$ (?:^|\.)d2pass\.com$ (?:^|\.)d3c33hcgiwev3\.cloudfront\.net$ (?:^|\.)d3rhr7kgmtrq1v\.cloudfront\.net$ (?:^|\.)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$ (?:^|\.)dailymotion\.com$ (?:^|\.)dailynews\.sina\.com$ (?:^|\.)dailynews\.sina\.com%2f$ (?:^|\.)dailyview\.tw$ (?:^|\.)daiphapinfo\.net$ (?:^|\.)dajiyuan\.com$ (?:^|\.)dajiyuan\.de$ (?:^|\.)dajiyuan\.eu$ (?:^|\.)dajusha\.baywords\.com$ (?:^|\.)dalailama-archives\.org$ (?:^|\.)dalailama\.com$ (?:^|\.)dalailama\.mn$ (?:^|\.)dalailama\.ru$ (?:^|\.)dalailama\.usc\.edu$ (?:^|\.)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$ (?:^|\.)danbooru\.donmai\.us$ (?:^|\.)danke4china\.net$ (?:^|\.)danwei\.org$ (?:^|\.)daodu14\.jigsy\.com$ (?:^|\.)daolan\.net$ (?:^|\.)daozhongxing\.org$ (?:^|\.)darktech\.org$ (?:^|\.)darktoy\.net$ (?:^|\.)darpa\.mil$ (?:^|\.)dastrassi\.org$ (?:^|\.)data-vocabulary\.org$ (?:^|\.)data\.flurry\.com$ (?:^|\.)data\.gov\.tw$ (?:^|\.)daum\.net$ (?:^|\.)david-kilgour\.com$ (?:^|\.)dawangidc\.com$ (?:^|\.)daxa\.cn$ (?:^|\.)daylife\.com$ (?:^|\.)db\.tt$ (?:^|\.)dbc\.hk$ (?:^|\.)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$ (?:^|\.)deaftone\.com$ (?:^|\.)debug\.com$ (?:^|\.)deck\.ly$ (?:^|\.)decodet\.co$ (?:^|\.)deepmind\.com$ (?:^|\.)deezer\.com$ (?:^|\.)definebabe\.com$ (?:^|\.)deja\.com$ (?:^|\.)delcamp\.net$ (?:^|\.)delicious\.com$ (?:^|\.)demo\.opera-mini\.net$ (?:^|\.)democrats\.org$ (?:^|\.)depositphotos\.com$ (?:^|\.)derekhsu\.homeip\.net$ (?:^|\.)desc\.se$ (?:^|\.)design\.google$ (?:^|\.)desipro\.de$ (?:^|\.)dessci\.com$ (?:^|\.)destiny\.xfiles\.to$ (?:^|\.)destroy-china\.jp$ (?:^|\.)deutsche-welle\.de$ (?:^|\.)developers\.box\.net$ (?:^|\.)devio\.us$ (?:^|\.)devpn\.com$ (?:^|\.)dfas\.mil$ (?:^|\.)dfn\.org$ (?:^|\.)dharamsalanet\.com$ (?:^|\.)dharmakara\.net$ (?:^|\.)dhcp\.biz$ (?:^|\.)diaoyuislands\.org$ (?:^|\.)dictionary\.goo\.ne\.jp$ (?:^|\.)difangwenge\.org$ (?:^|\.)digiland\.tw$ (?:^|\.)digisfera\.com$ (?:^|\.)digitalnomadsproject\.org$ (?:^|\.)diigo\.com$ (?:^|\.)dilber\.se$ (?:^|\.)dingchin\.com\.tw$ (?:^|\.)dipity\.com$ (?:^|\.)directcreative\.com$ (?:^|\.)discoins\.com$ (?:^|\.)disconnect\.me$ (?:^|\.)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$ (?:^|\.)dl\.box\.net$ (?:^|\.)dlsite\.com$ (?:^|\.)dlyoutube\.com$ (?:^|\.)dm530\.net$ (?:^|\.)dmcdn\.net$ (?:^|\.)dmm\.co\.jp$ (?:^|\.)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$ (?:^|\.)dogfartnetwork\.com$ (?:^|\.)dojin\.com$ (?:^|\.)dok-forum\.net$ (?:^|\.)dolc\.de$ (?:^|\.)dolf\.org\.hk$ (?:^|\.)dollf\.com$ (?:^|\.)domain\.club\.tw$ (?:^|\.)domainhelp\.search\.com$ (?:^|\.)domains\.google$ (?:^|\.)domaintoday\.com\.au$ (?:^|\.)dongtaiwang\.com$ (?:^|\.)dongtaiwang\.net$ (?:^|\.)dongyangjing\.com$ (?:^|\.)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$ (?:^|\.)download\.aircrack-ng\.org$ (?:^|\.)download\.cnet\.com$ (?:^|\.)download\.ithome\.com\.tw$ (?:^|\.)dphk\.org$ (?:^|\.)dpp\.org\.tw$ (?:^|\.)dpr\.info$ (?:^|\.)dragonex\.io$ (?:^|\.)dragonsprings\.org$ (?:^|\.)dreamamateurs\.com$ (?:^|\.)drepung\.org$ (?:^|\.)drgan\.net$ (?:^|\.)drmingxia\.org$ (?:^|\.)dropbooks\.tv$ (?:^|\.)dropbox\.com$ (?:^|\.)dropboxusercontent\.com$ (?:^|\.)drsunacademy\.com$ (?:^|\.)drtuber\.com$ (?:^|\.)dscn\.info$ (?:^|\.)dsmtp\.com$ (?:^|\.)dstk\.dk$ (?:^|\.)dtdns\.net$ (?:^|\.)dtiblog\.com$ (?:^|\.)dtic\.mil$ (?:^|\.)dtwang\.org$ (?:^|\.)duanzhihu\.com$ (?:^|\.)duck\.com$ (?:^|\.)duckdns\.org$ (?:^|\.)duckduckgo-owned-server\.yahoo\.net$ (?:^|\.)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$ (?:^|\.)dvdpac\.com$ (?:^|\.)dvorak\.org$ (?:^|\.)dw-world\.com$ (?:^|\.)dw-world\.de$ (?:^|\.)dw\.com$ (?:^|\.)dw\.de$ (?:^|\.)dwnews\.com$ (?:^|\.)dwnews\.net$ (?:^|\.)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$ (?:^|\.)dynupdate\.no-ip\.com$ (?:^|\.)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$ (?:^|\.)eastturkistancc\.org$ (?:^|\.)eastturkistangovernmentinexile\.us$ (?:^|\.)easyca\.ca$ (?:^|\.)easypic\.com$ (?:^|\.)ebony-beauty\.com$ (?:^|\.)ebook\.hyread\.com\.tw$ (?:^|\.)ebookbrowse\.com$ (?:^|\.)ebookee\.com$ (?:^|\.)ebtcbank\.com$ (?:^|\.)ecfa\.org\.tw$ (?:^|\.)echofon\.com$ (?:^|\.)ecimg\.tw$ (?:^|\.)ecministry\.net$ (?:^|\.)economist\.com$ (?:^|\.)ecsm\.vs\.com$ (?:^|\.)edgecastcdn\.net$ (?:^|\.)edicypages\.com$ (?:^|\.)edmontonchina\.cn$ (?:^|\.)edmontonservice\.com$ (?:^|\.)edns\.biz$ (?:^|\.)edoors\.com$ (?:^|\.)edubridge\.com$ (?:^|\.)edupro\.org$ (?:^|\.)eeas\.europa\.eu$ (?:^|\.)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$ (?:^|\.)embr\.in$ (?:^|\.)emilylau\.org\.hk$ (?:^|\.)empfil\.com$ (?:^|\.)emule-ed2k\.com$ (?:^|\.)emulefans\.com$ (?:^|\.)emuparadise\.me$ (?:^|\.)en\.favotter\.net$ (?:^|\.)en\.hao123\.com$ (?:^|\.)enanyang\.my$ (?:^|\.)encyclopedia\.com$ (?:^|\.)enewstree\.com$ (?:^|\.)enfal\.de$ (?:^|\.)engagedaily\.org$ (?:^|\.)englishforeveryone\.org$ (?:^|\.)englishfromengland\.co\.uk$ (?:^|\.)englishpen\.org$ (?:^|\.)enlighten\.org\.tw$ (?:^|\.)entermap\.com$ (?:^|\.)entnt\.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$ (?:^|\.)esurance\.com$ (?:^|\.)etaa\.org\.au$ (?:^|\.)etadult\.com$ (?:^|\.)etaiwannews\.com$ (?:^|\.)etherdelta\.com$ (?:^|\.)etizer\.org$ (?:^|\.)etokki\.com$ (?:^|\.)etools\.ncol\.com$ (?:^|\.)etowns\.net$ (?:^|\.)etowns\.org$ (?:^|\.)ettoday\.net$ (?:^|\.)etvonline\.hk$ (?:^|\.)eu\.org$ (?:^|\.)eucasino\.com$ (?:^|\.)eulam\.com$ (?:^|\.)eurekavpt\.com$ (?:^|\.)euronews\.com$ (?:^|\.)evchk\.wikia\.com$ (?:^|\.)evschool\.net$ (?:^|\.)exblog\.jp$ (?:^|\.)exchristian\.hk$ (?:^|\.)exmo\.com$ (?:^|\.)exmormon\.org$ (?:^|\.)expatshield\.com$ (?:^|\.)expecthim\.com$ (?:^|\.)expekt\.com$ (?:^|\.)experts-univers\.com$ (?:^|\.)exploader\.net$ (?:^|\.)expressvpn\.com$ (?:^|\.)exrates\.me$ (?:^|\.)extmatrix\.com$ (?:^|\.)extremetube\.com$ (?:^|\.)exx\.com$ (?:^|\.)eyevio\.jp$ (?:^|\.)eyny\.com$ (?:^|\.)ezpc\.tk$ (?:^|\.)ezpeer\.com$ (?:^|\.)ezua\.com$ (?:^|\.)fa\.gov\.tw$ (?:^|\.)facebook\.br$ (?:^|\.)facebook\.com$ (?:^|\.)facebook\.design$ (?:^|\.)facebook\.hu$ (?:^|\.)facebook\.in$ (?:^|\.)facebook\.nl$ (?:^|\.)facebook\.se$ (?:^|\.)facebookmail\.com$ (?:^|\.)facebookquotes4u\.com$ (?:^|\.)faceless\.me$ (?:^|\.)facesofnyfw\.com$ (?:^|\.)facesoftibetanselfimmolators\.info$ (?:^|\.)fail\.hk$ (?:^|\.)faith100\.org$ (?:^|\.)faithfuleye\.com$ (?:^|\.)faiththedog\.info$ (?:^|\.)fakku\.net$ (?:^|\.)falsefire\.com$ (?:^|\.)falun-co\.org$ (?:^|\.)falun-ny\.net$ (?:^|\.)falun\.caltech\.edu$ (?:^|\.)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$ (?:^|\.)fangbinxing\.com$ (?:^|\.)fangeming\.com$ (?:^|\.)fangeqiang\.com$ (?:^|\.)fanglizhi\.info$ (?:^|\.)fangmincn\.org$ (?:^|\.)fangong\.forums-free\.com$ (?:^|\.)fangong\.org$ (?:^|\.)fangongheike\.com$ (?:^|\.)fanhaodang\.com$ (?:^|\.)fanqiang\.tk$ (?:^|\.)fanqianghou\.com$ (?:^|\.)fanqiangyakexi\.net$ (?:^|\.)fanqiangzhe\.com$ (?:^|\.)fanswong\.com$ (?:^|\.)fanyue\.info$ (?:^|\.)fapdu\.com$ (?:^|\.)faproxy\.com$ (?:^|\.)faqserv\.com$ (?:^|\.)fartit\.com$ (?:^|\.)farwestchina\.com$ (?:^|\.)fast\.wistia\.com$ (?:^|\.)fastpic\.ru$ (?:^|\.)fastssh\.com$ (?:^|\.)faststone\.org$ (?:^|\.)fatbtc\.com$ (?:^|\.)favstar\.fm$ (?:^|\.)fawanghuihui\.org$ (?:^|\.)faydao\.com$ (?:^|\.)fb\.com$ (?:^|\.)fb\.me$ (?:^|\.)fbaddins\.com$ (?:^|\.)fbcdn\.net$ (?:^|\.)fbsbx\.com$ (?:^|\.)fbworkmail\.com$ (?:^|\.)fc2\.com$ (?:^|\.)fc2blog\.net$ (?:^|\.)fc2china\.com$ (?:^|\.)fc2cn\.com$ (?:^|\.)fda\.gov\.tw$ (?:^|\.)fdc64\.de$ (?:^|\.)fdc64\.org$ (?:^|\.)fdc89\.jp$ (?:^|\.)feedburner\.com$ (?:^|\.)feeds\.fileforum\.com$ (?:^|\.)feelssh\.com$ (?:^|\.)feer\.com$ (?:^|\.)feifeiss\.com$ (?:^|\.)feitian-california\.org$ (?:^|\.)feitianacademy\.org$ (?:^|\.)feministteacher\.com$ (?:^|\.)fengzhenghu\.com$ (?:^|\.)fengzhenghu\.net$ (?:^|\.)fevernet\.com$ (?:^|\.)ff\.im$ (?:^|\.)fffff\.at$ (?:^|\.)fflick\.com$ (?:^|\.)ffvpn\.com$ (?:^|\.)fgmtv\.net$ (?:^|\.)fgmtv\.org$ (?:^|\.)fhreports\.net$ (?:^|\.)fiddle\.jshell\.net$ (?:^|\.)figprayer\.com$ (?:^|\.)fileflyer\.com$ (?:^|\.)files2me\.com$ (?:^|\.)fileserve\.com$ (?:^|\.)filesor\.com$ (?:^|\.)fillthesquare\.org$ (?:^|\.)filmingfortibet\.org$ (?:^|\.)filmy\.olabloga\.pl$ (?:^|\.)filthdump\.com$ (?:^|\.)financetwitter\.com$ (?:^|\.)finchvpn\.com$ (?:^|\.)findmespot\.com$ (?:^|\.)findyoutube\.com$ (?:^|\.)findyoutube\.net$ (?:^|\.)fingerdaily\.com$ (?:^|\.)finler\.net$ (?:^|\.)firearmsworld\.net$ (?:^|\.)firebaseio\.com$ (?:^|\.)fireofliberty\.org$ (?:^|\.)firetweet\.io$ (?:^|\.)firstfivefollowers\.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$ (?:^|\.)flyvpn\.com$ (?:^|\.)flyzy2005\.com$ (?:^|\.)fnac\.be$ (?:^|\.)fnac\.com$ (?:^|\.)fochk\.org$ (?:^|\.)focustaiwan\.tw$ (?:^|\.)focusvpn\.com$ (?:^|\.)fofg-europe\.net$ (?:^|\.)fofg\.org$ (?:^|\.)fofldfradio\.org$ (?:^|\.)fooooo\.com$ (?:^|\.)footwiball\.com$ (?:^|\.)foreignpolicy\.com$ (?:^|\.)forum\.baby-kingdom\.com$ (?:^|\.)forum\.cyberctm\.com$ (?:^|\.)forum\.idsam\.com$ (?:^|\.)forum\.my903\.com$ (?:^|\.)forum\.mymaji\.com$ (?:^|\.)forum\.omy\.sg$ (?:^|\.)forum\.palmislife\.com$ (?:^|\.)forum\.setty\.com\.tw$ (?:^|\.)forum\.sina\.com\.hk$ (?:^|\.)forum\.slime\.com\.tw$ (?:^|\.)forum\.tvb\.com$ (?:^|\.)forum\.xinbao\.de$ (?:^|\.)forum4hk\.com$ (?:^|\.)fotile\.me$ (?:^|\.)fourface\.nodesnoop\.com$ (?:^|\.)fourthinternational\.org$ (?:^|\.)foxdie\.us$ (?:^|\.)foxgay\.com$ (?:^|\.)foxsub\.com$ (?:^|\.)foxtang\.com$ (?:^|\.)fpmt-osel\.org$ (?:^|\.)fpmt\.org$ (?:^|\.)fpmt\.tw$ (?:^|\.)fpmtmexico\.org$ (?:^|\.)fq\.wikia\.com$ (?:^|\.)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$ (?:^|\.)freebrowser\.org$ (?:^|\.)freechal\.com$ (?:^|\.)freechina\.net$ (?:^|\.)freechina\.news$ (?:^|\.)freechinaforum\.org$ (?:^|\.)freechinaweibo\.com$ (?:^|\.)freeddns\.com$ (?:^|\.)freeddns\.org$ (?:^|\.)freedomchina\.info$ (?:^|\.)freedomcollection\.org$ (?:^|\.)freedomhouse\.org$ (?:^|\.)freedominfonetweb\.wordpress\.com$ (?:^|\.)freedomsherald\.org$ (?:^|\.)freeforums\.org$ (?:^|\.)freefq\.com$ (?:^|\.)freefuckvids\.com$ (?:^|\.)freegao\.com$ (?:^|\.)freeilhamtohti\.org$ (?:^|\.)freekwonpyong\.org$ (?:^|\.)freelotto\.com$ (?:^|\.)freeman2\.com$ (?:^|\.)freemoren\.com$ (?:^|\.)freemorenews\.com$ (?:^|\.)freemuse\.org$ (?:^|\.)freenet$ (?:^|\.)freenet-china\.org$ (?:^|\.)freenetproject\.org$ (?:^|\.)freenewscn\.com$ (?:^|\.)freeopenvpn\.com$ (?:^|\.)freeoz\.org$ (?:^|\.)freessh\.us$ (?:^|\.)freetcp\.com$ (?:^|\.)freetibet\.net$ (?:^|\.)freetibet\.org$ (?:^|\.)freetibetanheroes\.org$ (?:^|\.)freeviewmovies\.com$ (?:^|\.)freevpn\.me$ (?:^|\.)freevpn\.nl$ (?:^|\.)freewallpaper4\.me$ (?:^|\.)freewebs\.com$ (?:^|\.)freewechat\.com$ (?:^|\.)freeweibo\.com$ (?:^|\.)freewww\.biz$ (?:^|\.)freewww\.info$ (?:^|\.)freexinwen\.com$ (?:^|\.)freeyellow\.com$ (?:^|\.)freeyoutubeproxy\.net$ (?:^|\.)friendfeed-media\.com$ (?:^|\.)friendfeed\.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$ (?:^|\.)fucd\.com$ (?:^|\.)fuckcnnic\.net$ (?:^|\.)fuckgfw\.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$ (?:^|\.)gabocorp\.com$ (?:^|\.)gaeproxy\.com$ (?:^|\.)gaforum\.org$ (?:^|\.)galaxymacau\.com$ (?:^|\.)galenwu\.com$ (?:^|\.)galstars\.net$ (?:^|\.)game735\.com$ (?:^|\.)gamebase\.com\.tw$ (?:^|\.)gamejolt\.com$ (?:^|\.)gamer-cds\.cdn\.hinet\.net$ (?:^|\.)gamer\.com\.tw$ (?:^|\.)gamer2-cds\.cdn\.hinet\.net$ (?:^|\.)gamez\.com\.tw$ (?:^|\.)gamousa\.com$ (?:^|\.)ganges\.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$ (?:^|\.)gcmasia\.com$ (?:^|\.)gcpnews\.com$ (?:^|\.)gcr\.io$ (?:^|\.)gdbt\.net$ (?:^|\.)gdzf\.org$ (?:^|\.)geek-art\.net$ (?:^|\.)geekerhome\.com$ (?:^|\.)geekheart\.info$ (?:^|\.)gekikame\.com$ (?:^|\.)gelbooru\.com$ (?:^|\.)geocities\.co\.jp$ (?:^|\.)geocities\.com$ (?:^|\.)geocities\.jp$ (?:^|\.)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$ (?:^|\.)getmdl\.io$ (?:^|\.)getoutline\.org$ (?:^|\.)getsocialscope\.com$ (?:^|\.)getsync\.com$ (?:^|\.)gettrials\.com$ (?:^|\.)gettyimages\.com$ (?:^|\.)getuploader\.com$ (?:^|\.)gfbv\.de$ (?:^|\.)gfgold\.com\.hk$ (?:^|\.)gfsale\.com$ (?:^|\.)gfw\.org\.ua$ (?:^|\.)gfw\.press$ (?:^|\.)ggpht\.com$ (?:^|\.)ggssl\.com$ (?:^|\.)ghostpath\.com$ (?:^|\.)ghut\.org$ (?:^|\.)giantessnight\.com$ (?:^|\.)gifree\.com$ (?:^|\.)giga-web\.jp$ (?:^|\.)gigporno\.ru$ (?:^|\.)girlbanker\.com$ (?:^|\.)git\.io$ (?:^|\.)github\.com$ (?:^|\.)githubusercontent\.com$ (?:^|\.)gizlen\.net$ (?:^|\.)gjczz\.com$ (?:^|\.)glass8\.eu$ (?:^|\.)global\.bing\.com$ (?:^|\.)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$ (?:^|\.)gmbd\.cn$ (?:^|\.)gmhz\.org$ (?:^|\.)gmll\.org$ (?:^|\.)gmodules\.com$ (?:^|\.)gmozomg\.izihost\.org$ (?:^|\.)gnci\.org\.hk$ (?:^|\.)go-pki\.com$ (?:^|\.)go\.nesnode\.com$ (?:^|\.)go141\.com$ (?:^|\.)goagent\.biz$ (?:^|\.)goagent\.codeplex\.com$ (?:^|\.)goagentplus\.com$ (?:^|\.)gobet\.cc$ (?:^|\.)godfootsteps\.org$ (?:^|\.)godns\.work$ (?:^|\.)godoc\.org$ (?:^|\.)godsdirectcontact\.co\.uk$ (?:^|\.)godsdirectcontact\.org$ (?:^|\.)godsdirectcontact\.org\.tw$ (?:^|\.)godsimmediatecontact\.com$ (?:^|\.)gogotunnel\.com$ (?:^|\.)gohappy\.com\.tw$ (?:^|\.)gojet\.krtco\.com\.tw$ (?:^|\.)gokbayrak\.com$ (?:^|\.)golang\.org$ (?:^|\.)goldbet\.com$ (?:^|\.)goldbetsports\.com$ (?:^|\.)goldeneyevault\.com$ (?:^|\.)goldenfrog\.com$ (?:^|\.)goldjizz\.com$ (?:^|\.)goldstep\.net$ (?:^|\.)goldwave\.com$ (?:^|\.)gongm\.in$ (?:^|\.)gongmeng\.info$ (?:^|\.)gongminliliang\.com$ (?:^|\.)gongwt\.com$ (?:^|\.)goo\.gl$ (?:^|\.)gooday\.xyz$ (?:^|\.)gooddns\.info$ (?:^|\.)goodreaders\.com$ (?:^|\.)goodreads\.com$ (?:^|\.)goodtv\.com\.tw$ (?:^|\.)goodtv\.tv$ (?:^|\.)goofind\.com$ (?:^|\.)google(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?){1,2}$ (?:^|\.)googleapis(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?){1,2}$ (?:^|\.)googleapps\.com$ (?:^|\.)googlearth\.com$ (?:^|\.)googleartproject\.com$ (?:^|\.)googleblog\.com$ (?:^|\.)googlebot\.com$ (?:^|\.)googlechinawebmaster\.com$ (?:^|\.)googlecode\.com$ (?:^|\.)googlecommerce\.com$ (?:^|\.)googledomains\.com$ (?:^|\.)googledrive\.com$ (?:^|\.)googleearth\.com$ (?:^|\.)googlegroups\.com$ (?:^|\.)googlehosted\.com$ (?:^|\.)googleideas\.com$ (?:^|\.)googleinsidesearch\.com$ (?:^|\.)googlelabs\.com$ (?:^|\.)googlemail\.com$ (?:^|\.)googlemashups\.com$ (?:^|\.)googlepagecreator\.com$ (?:^|\.)googleplay\.com$ (?:^|\.)googleplus\.com$ (?:^|\.)googlescholar\.com$ (?:^|\.)googlesile\.com$ (?:^|\.)googlesource\.com$ (?:^|\.)googleusercontent\.com$ (?:^|\.)googlevideo\.com$ (?:^|\.)googleweblight\.com$ (?:^|\.)googlezip\.net$ (?:^|\.)gopetition\.com$ (?:^|\.)goproxing\.net$ (?:^|\.)goregrish\.com$ (?:^|\.)gospelherald\.com$ (?:^|\.)got-game\.org$ (?:^|\.)gotdns\.ch$ (?:^|\.)gotgeeks\.com$ (?:^|\.)gotrusted\.com$ (?:^|\.)gotw\.ca$ (?:^|\.)gov\.taipei$ (?:^|\.)gov\.tw$ (?:^|\.)gr8domain\.biz$ (?:^|\.)gr8name\.biz$ (?:^|\.)grammaly\.com$ (?:^|\.)grandtrial\.org$ (?:^|\.)grangorz\.org$ (?:^|\.)graphis\.ne\.jp$ (?:^|\.)graphql\.org$ (?:^|\.)greasespot\.net$ (?:^|\.)great-firewall\.com$ (?:^|\.)great-roc\.org$ (?:^|\.)greatfire\.org$ (?:^|\.)greatfire\.us7\.list-manage\.com$ (?:^|\.)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$ (?:^|\.)groups\.google\.cn$ (?:^|\.)grow\.google$ (?:^|\.)gs-discuss\.com$ (?:^|\.)gsp\.target\.com$ (?:^|\.)gstatic\.com$ (?:^|\.)gtricks\.com$ (?:^|\.)gts-vpn\.com$ (?:^|\.)gu-chu-sum\.org$ (?:^|\.)guaguass\.com$ (?:^|\.)guaguass\.org$ (?:^|\.)guancha\.org$ (?:^|\.)guaneryu\.com$ (?:^|\.)guangming\.com\.my$ (?:^|\.)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$ (?:^|\.)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$ (?:^|\.)hackthatphone\.net$ (?:^|\.)hahaxixi\.github\.io$ (?:^|\.)hahlo\.com$ (?:^|\.)hakkatv\.org\.tw$ (?:^|\.)handcraftedsoftware\.org$ (?:^|\.)hanunyi\.com$ (?:^|\.)hao\.news$ (?:^|\.)haoel\.github\.io$ (?:^|\.)happy-vpn\.com$ (?:^|\.)haproxy\.org$ (?:^|\.)hardsextube\.com$ (?:^|\.)harunyahya\.com$ (?:^|\.)hautelook\.com$ (?:^|\.)hautelookcdn\.com$ (?:^|\.)have8\.com$ (?:^|\.)hbg\.com$ (?:^|\.)hbo\.com$ (?:^|\.)hclips\.com$ (?:^|\.)hd\.stheadline\.com$ (?:^|\.)hdlt\.me$ (?:^|\.)hdtvb\.net$ (?:^|\.)hdzog\.com$ (?:^|\.)heartyit\.com$ (?:^|\.)heavy-r\.com$ (?:^|\.)hec\.su$ (?:^|\.)hecaitou\.net$ (?:^|\.)hechaji\.com$ (?:^|\.)heeact\.edu\.tw$ (?:^|\.)hegre-art\.com$ (?:^|\.)heix\.pp\.ru$ (?:^|\.)helloandroid\.com$ (?:^|\.)helloqueer\.com$ (?:^|\.)helloss\.pw$ (?:^|\.)hellotxt\.com$ (?:^|\.)hellouk\.org$ (?:^|\.)help\.linksalpha\.com$ (?:^|\.)helpeachpeople\.com$ (?:^|\.)helplinfen\.com$ (?:^|\.)helpster\.de$ (?:^|\.)helpzhuling\.org$ (?:^|\.)hentai\.to$ (?:^|\.)hentaitube\.tv$ (?:^|\.)hentaivideoworld\.com$ (?:^|\.)heqinglian\.net$ (?:^|\.)heungkongdiscuss\.com$ (?:^|\.)hexieshe\.com$ (?:^|\.)hexieshe\.xyz$ (?:^|\.)hexxeh\.net$ (?:^|\.)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$ (?:^|\.)hihiforum\.com$ (?:^|\.)hihistory\.net$ (?:^|\.)hiitch\.com$ (?:^|\.)hikinggfw\.org$ (?:^|\.)hilive\.tv$ (?:^|\.)himalayan-foundation\.org$ (?:^|\.)himalayanglacier\.com$ (?:^|\.)himemix\.com$ (?:^|\.)himemix\.net$ (?:^|\.)hitbtc\.com$ (?:^|\.)hitomi\.la$ (?:^|\.)hiwifi\.com$ (?:^|\.)hizb-ut-tahrir\.info$ (?:^|\.)hizb-ut-tahrir\.org$ (?:^|\.)hizbuttahrir\.org$ (?:^|\.)hjclub\.info$ (?:^|\.)hk-pub\.com$ (?:^|\.)hk\.frienddy\.com$ (?:^|\.)hk\.geocities\.com$ (?:^|\.)hk\.gradconnection\.com$ (?:^|\.)hk\.hao123img\.com$ (?:^|\.)hk\.jiepang\.com$ (?:^|\.)hk\.knowledge\.yahoo\.com$ (?:^|\.)hk\.myblog\.yahoo\.com$ (?:^|\.)hk\.news\.yahoo\.com$ (?:^|\.)hk\.rd\.yahoo\.com$ (?:^|\.)hk\.search\.yahoo\.com$ (?:^|\.)hk\.video\.news\.yahoo\.com$ (?:^|\.)hk\.yahoo\.com$ (?:^|\.)hk01\.com$ (?:^|\.)hk32168\.com$ (?:^|\.)hka8964\.wordpress\.com$ (?:^|\.)hkacg\.com$ (?:^|\.)hkacg\.net$ (?:^|\.)hkanews\.wordpress\.com$ (?:^|\.)hkatvnews\.com$ (?:^|\.)hkbc\.net$ (?:^|\.)hkbf\.org$ (?:^|\.)hkbookcity\.com$ (?:^|\.)hkchurch\.org$ (?:^|\.)hkci\.org\.hk$ (?:^|\.)hkcmi\.edu$ (?:^|\.)hkcnews\.com$ (?:^|\.)hkcoc\.com$ (?:^|\.)hkcoc\.weather\.com\.hk$ (?:^|\.)hkdailynews\.com\.hk$ (?:^|\.)hkday\.net$ (?:^|\.)hkdf\.org$ (?:^|\.)hkej\.com$ (?:^|\.)hkepc\.com$ (?:^|\.)hkfaa\.com$ (?:^|\.)hkfreezone\.com$ (?:^|\.)hkfront\.org$ (?:^|\.)hkgalden\.com$ (?:^|\.)hkgolden\.com$ (?:^|\.)hkgreenradio\.org$ (?:^|\.)hkheadline\.com$ (?:^|\.)hkhkhk\.com$ (?:^|\.)hkhrc\.org\.hk$ (?:^|\.)hkhrm\.org\.hk$ (?:^|\.)hkip\.org\.uk$ (?:^|\.)hkjc\.com$ (?:^|\.)hkjp\.org$ (?:^|\.)hklft\.com$ (?:^|\.)hklts\.org\.hk$ (?:^|\.)hkptu\.org$ (?:^|\.)hkreporter\.com$ (?:^|\.)hkreporter\.loved\.hk$ (?:^|\.)hkupop\.hku\.hk$ (?:^|\.)hkusu\.net$ (?:^|\.)hkvwet\.com$ (?:^|\.)hkwcc\.org\.hk$ (?:^|\.)hkzone\.org$ (?:^|\.)hmonghot\.com$ (?:^|\.)hmv\.co\.jp$ (?:^|\.)hmvdigital\.ca$ (?:^|\.)hmvdigital\.com$ (?:^|\.)hnjhj\.com$ (?:^|\.)hnntube\.com$ (?:^|\.)hola\.com$ (?:^|\.)hola\.org$ (?:^|\.)holymountaincn\.com$ (?:^|\.)holyspiritspeaks\.org$ (?:^|\.)home\.sina\.com$ (?:^|\.)home\.so-net\.net\.tw$ (?:^|\.)homedepot\.com$ (?:^|\.)homeperversion\.com$ (?:^|\.)homeservershow\.com$ (?:^|\.)hongkongfp\.com$ (?:^|\.)hongmeimei\.com$ (?:^|\.)hongzhi\.li$ (?:^|\.)hootsuite\.com$ (?:^|\.)hoovers\.com$ (?:^|\.)hopedialogue\.org$ (?:^|\.)hopto\.org$ (?:^|\.)hornygamer\.com$ (?:^|\.)hornytrip\.com$ (?:^|\.)hotav\.tv$ (?:^|\.)hotels\.cn$ (?:^|\.)hotfrog\.com\.tw$ (?:^|\.)hotgoo\.com$ (?:^|\.)hotpornshow\.com$ (?:^|\.)hotpot\.hk$ (?:^|\.)hotshame\.com$ (?:^|\.)hotspotshield\.com$ (?:^|\.)hotvpn\.com$ (?:^|\.)hougaige\.com$ (?:^|\.)howtoforge\.com$ (?:^|\.)hoxx\.com$ (?:^|\.)hpa\.gov\.tw$ (?:^|\.)hqcdp\.org$ (?:^|\.)hqjapanesesex\.com$ (?:^|\.)hqmovies\.com$ (?:^|\.)hqsbnet\.wordpress\.com$ (?:^|\.)hqsbonline\.wordpress\.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$ (?:^|\.)https$ (?:^|\.)https443\.net$ (?:^|\.)https443\.org$ (?:^|\.)hua-yue\.net$ (?:^|\.)huaglad\.com$ (?:^|\.)huanghuagang\.org$ (?:^|\.)huangyiyu\.com$ (?:^|\.)huaren\.us$ (?:^|\.)huaren4us\.com$ (?:^|\.)huashangnews\.com$ (?:^|\.)huaxia-news\.com$ (?:^|\.)huaxiabao\.org$ (?:^|\.)huaxin\.ph$ (?:^|\.)huayuworld\.org$ (?:^|\.)hudatoriq\.web\.id$ (?:^|\.)hudson\.org$ (?:^|\.)huffingtonpost\.com$ (?:^|\.)hugoroy\.eu$ (?:^|\.)huhaitai\.com$ (?:^|\.)huhamhire\.com$ (?:^|\.)huiyi\.in$ (?:^|\.)hulkshare\.com$ (?:^|\.)hulu\.com$ (?:^|\.)huluim\.com$ (?:^|\.)hum$ (?:^|\.)humanrightsbriefing\.org$ (?:^|\.)hung-ya\.com$ (?:^|\.)hungerstrikeforaids\.org$ (?:^|\.)huobi\.com$ (?:^|\.)huobi\.pro$ (?:^|\.)huobipro\.com$ (?:^|\.)huping\.net$ (?:^|\.)hurgokbayrak\.com$ (?:^|\.)hurriyet\.com\.tr$ (?:^|\.)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$ (?:^|\.)i-cable\.com$ (?:^|\.)i-part\.com\.tw$ (?:^|\.)i\.lithium\.com$ (?:^|\.)i1\.hk$ (?:^|\.)i2p2\.de$ (?:^|\.)i2runner\.com$ (?:^|\.)i818hk\.com$ (?:^|\.)iam\.soy$ (?:^|\.)iamtopone\.com$ (?:^|\.)iask\.bz$ (?:^|\.)iask\.ca$ (?:^|\.)iav19\.com$ (?:^|\.)ibiblio\.org$ (?:^|\.)iblist\.com$ (?:^|\.)iblogserv-f\.net$ (?:^|\.)ibros\.org$ (?:^|\.)ibvpn\.com$ (?:^|\.)icams\.com$ (?:^|\.)ice\.audionow\.com$ (?:^|\.)icij\.org$ (?:^|\.)icl-fi\.org$ (?:^|\.)icoco\.com$ (?:^|\.)iconpaper\.org$ (?:^|\.)icu-project\.org$ (?:^|\.)id\.hao123\.com$ (?:^|\.)id\.heroku\.com$ (?:^|\.)iddddg\.com$ (?:^|\.)idemocracy\.asia$ (?:^|\.)identi\.ca$ (?:^|\.)idiomconnection\.com$ (?:^|\.)idouga\.com$ (?:^|\.)idreamx\.com$ (?:^|\.)idv\.tw$ (?:^|\.)ieasy5\.com$ (?:^|\.)ied2k\.net$ (?:^|\.)ienergy1\.com$ (?:^|\.)if\.ttt$ (?:^|\.)ifan\.cz\.cc$ (?:^|\.)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$ (?:^|\.)iipdigital\.usembassy\.gov$ (?:^|\.)ikstar\.com$ (?:^|\.)ikwb\.com$ (?:^|\.)illusionfactory\.com$ (?:^|\.)ilove80\.be$ (?:^|\.)ilovelongtoes\.com$ (?:^|\.)im\.tv$ (?:^|\.)im88\.tw$ (?:^|\.)imageab\.com$ (?:^|\.)imagefap\.com$ (?:^|\.)imageflea\.com$ (?:^|\.)images-gaytube\.com$ (?:^|\.)images\.comico\.tw$ (?:^|\.)imageshack\.us$ (?:^|\.)imagevenue\.com$ (?:^|\.)imagezilla\.net$ (?:^|\.)imb\.org$ (?:^|\.)imdb\.com$ (?:^|\.)img$ (?:^|\.)img\.dlsite\.jp$ (?:^|\.)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$ (?:^|\.)in99\.org$ (?:^|\.)incapdns\.net$ (?:^|\.)incloak\.com$ (?:^|\.)incredibox\.fr$ (?:^|\.)indiandefensenews\.in$ (?:^|\.)indiemerch\.com$ (?:^|\.)info-graf\.fr$ (?:^|\.)initiativesforchina\.org$ (?:^|\.)inkui\.com$ (?:^|\.)inmediahk\.net$ (?:^|\.)innermongolia\.org$ (?:^|\.)inote\.tw$ (?:^|\.)insecam\.org$ (?:^|\.)insidevoa\.com$ (?:^|\.)instagram\.com$ (?:^|\.)instanthq\.com$ (?:^|\.)institut-tibetain\.org$ (?:^|\.)international-news\.newsmagazine\.asia$ (?:^|\.)internet\.org$ (?:^|\.)internetdefenseleague\.org$ (?:^|\.)internetfreedom\.org$ (?:^|\.)internetpopculture\.com$ (?:^|\.)inthenameofconfuciusmovie\.com$ (?:^|\.)investigating\.wordpress\.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$ (?:^|\.)iredmail\.org$ (?:^|\.)ironbigfools\.compython\.net$ (?:^|\.)ironpython\.net$ (?:^|\.)ironsocket\.com$ (?:^|\.)is-a-hunter\.com$ (?:^|\.)is\.gd$ (?:^|\.)isaacmao\.com$ (?:^|\.)isasecret\.com$ (?:^|\.)isc\.sans\.edu$ (?:^|\.)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$ (?:^|\.)istiqlalhewer\.com$ (?:^|\.)istockphoto\.com$ (?:^|\.)isunaffairs\.com$ (?:^|\.)isuntv\.com$ (?:^|\.)itaboo\.info$ (?:^|\.)itaiwan\.gov\.tw$ (?:^|\.)italiatibet\.org$ (?:^|\.)itasoftware\.com$ (?:^|\.)itemdb\.com$ (?:^|\.)ithelp\.ithome\.com\.tw$ (?:^|\.)its\.caltech\.edu$ (?:^|\.)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$ (?:^|\.)izaobao\.us$ (?:^|\.)izles\.net$ (?:^|\.)izlesem\.org$ (?:^|\.)j\.mp$ (?:^|\.)ja\.wikipedia\.org$ (?:^|\.)jamaat\.org$ (?:^|\.)jamyangnorbu\.com$ (?:^|\.)jandyx\.com$ (?:^|\.)janwongphoto\.com$ (?:^|\.)japan-whores\.com$ (?:^|\.)japanfirst\.asianfreeforum\.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$ (?:^|\.)jiehua\.cz$ (?:^|\.)jieshibaobao\.com$ (?:^|\.)jigglegifs\.com$ (?:^|\.)jigong1024\.com$ (?:^|\.)jihadintel\.meforum\.org$ (?:^|\.)jihadology\.net$ (?:^|\.)jiji\.com$ (?:^|\.)jims\.net$ (?:^|\.)jinbushe\.org$ (?:^|\.)jingpin\.org$ (?:^|\.)jingsim\.org$ (?:^|\.)jinpianwang\.com$ (?:^|\.)jinroukong\.com$ (?:^|\.)jintian\.net$ (?:^|\.)jinx\.com$ (?:^|\.)jitouch\.com$ (?:^|\.)jizzthis\.com$ (?:^|\.)jjgirls\.com$ (?:^|\.)jkb\.cc$ (?:^|\.)jkforum\.net$ (?:^|\.)jkub\.com$ (?:^|\.)jma\.go\.jp$ (?:^|\.)jmscult\.com$ (?:^|\.)joachims\.org$ (?:^|\.)jobnewera\.wordpress\.com$ (?:^|\.)jobso\.tv$ (?:^|\.)joinmastodon\.org$ (?:^|\.)journalchretien\.net$ (?:^|\.)journalofdemocracy\.org$ (?:^|\.)joymiihub\.com$ (?:^|\.)joyourself\.com$ (?:^|\.)jp\.hao123\.com$ (?:^|\.)jpl\.nasa\.gov$ (?:^|\.)jpopforum\.net$ (?:^|\.)jtvnw\.net$ (?:^|\.)jubushoushen\.com$ (?:^|\.)juhuaren\.com$ (?:^|\.)jukujo-club\.com$ (?:^|\.)juliepost\.com$ (?:^|\.)juliereyc\.com$ (?:^|\.)junauza\.com$ (?:^|\.)june4commemoration\.org$ (?:^|\.)junefourth-20\.net$ (?:^|\.)jungleheart\.com$ (?:^|\.)juoaa\.com$ (?:^|\.)justdied\.com$ (?:^|\.)justfreevpn\.com$ (?:^|\.)justicefortenzin\.org$ (?:^|\.)justpaste\.it$ (?:^|\.)justtristan\.com$ (?:^|\.)juyuange\.org$ (?:^|\.)juziyue\.com$ (?:^|\.)jwmusic\.org$ (?:^|\.)jyxf\.net$ (?:^|\.)k-doujin\.net$ (?:^|\.)ka-wai\.com$ (?:^|\.)kagyu\.org$ (?:^|\.)kagyu\.org\.za$ (?:^|\.)kagyumonlam\.org$ (?:^|\.)kagyunews\.com\.hk$ (?:^|\.)kagyuoffice\.org$ (?:^|\.)kagyuoffice\.org\.tw$ (?:^|\.)kaiyuan\.de$ (?:^|\.)kakao\.com$ (?:^|\.)kalachakralugano\.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$ (?:^|\.)kb\.monitorware\.com$ (?:^|\.)kba-tx\.org$ (?:^|\.)kcoolonline\.com$ (?:^|\.)kebrum\.com$ (?:^|\.)kechara\.com$ (?:^|\.)keepandshare\.com$ (?:^|\.)keezmovies\.com$ (?:^|\.)kendatire\.com$ (?:^|\.)kendincos\.net$ (?:^|\.)kenengba\.com$ (?:^|\.)keontech\.net$ (?:^|\.)kepard\.com$ (?:^|\.)kex\.com$ (?:^|\.)keycdn\.com$ (?:^|\.)khabdha\.org$ (?:^|\.)khatrimaza\.org$ (?:^|\.)khmusic\.com\.tw$ (?:^|\.)kichiku-doujinko\.com$ (?:^|\.)kik\.com$ (?:^|\.)killwall\.com$ (?:^|\.)kindleren\.com$ (?:^|\.)kineox\.free\.fr$ (?:^|\.)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$ (?:^|\.)kmuh\.org\.tw$ (?:^|\.)knowledgerush\.com$ (?:^|\.)kobo\.com$ (?:^|\.)kobobooks\.com$ (?:^|\.)kodingen\.com$ (?:^|\.)kompozer\.net$ (?:^|\.)konachan\.com$ (?:^|\.)kone\.com$ (?:^|\.)koolsolutions\.com$ (?:^|\.)koornk\.com$ (?:^|\.)koranmandarin\.com$ (?:^|\.)korenan2\.com$ (?:^|\.)ksdl\.org$ (?:^|\.)ksnews\.com\.tw$ (?:^|\.)kspcoin\.com$ (?:^|\.)ktzhk\.com$ (?:^|\.)kucoin\.com$ (?:^|\.)kui\.name$ (?:^|\.)kun\.im$ (?:^|\.)kurashsultan\.com$ (?:^|\.)kurtmunger\.com$ (?:^|\.)kusocity\.com$ (?:^|\.)kwcg\.ca$ (?:^|\.)kwongwah\.com\.my$ (?:^|\.)kxsw\.life$ (?:^|\.)kyofun\.com$ (?:^|\.)kyohk\.net$ (?:^|\.)kyoyue\.com$ (?:^|\.)kyzyhello\.com$ (?:^|\.)kzeng\.info$ (?:^|\.)la-forum\.org$ (?:^|\.)labiennale\.org$ (?:^|\.)ladbrokes\.com$ (?:^|\.)lagranepoca\.com$ (?:^|\.)lalulalu\.com$ (?:^|\.)lama\.com\.tw$ (?:^|\.)lamayeshe\.com$ (?:^|\.)lamnia\.co\.uk$ (?:^|\.)lamrim\.com$ (?:^|\.)lanterncn\.cn$ (?:^|\.)lantosfoundation\.org$ (?:^|\.)laod\.cn$ (?:^|\.)laogai\.org$ (?:^|\.)laomiu\.com$ (?:^|\.)laoyang\.info$ (?:^|\.)laptoplockdown\.com$ (?:^|\.)laqingdan\.net$ (?:^|\.)larsgeorge\.com$ (?:^|\.)lastcombat\.com$ (?:^|\.)lastfm\.es$ (?:^|\.)latelinenews\.com$ (?:^|\.)latibet\.org$ (?:^|\.)lbank\.info$ (?:^|\.)ld\.hao123img\.com$ (?:^|\.)le-vpn\.com$ (?:^|\.)leafyvpn\.net$ (?:^|\.)lecloud\.net$ (?:^|\.)leeao\.com\.cn$ (?:^|\.)lefora\.com$ (?:^|\.)left21\.hk$ (?:^|\.)legalporno\.com$ (?:^|\.)legaltech\.law\.com$ (?:^|\.)legsjapan\.com$ (?:^|\.)leirentv\.ca$ (?:^|\.)leisurecafe\.ca$ (?:^|\.)leisurepro\.com$ (?:^|\.)lematin\.ch$ (?:^|\.)lemonde\.fr$ (?:^|\.)lenwhite\.com$ (?:^|\.)lerosua\.org$ (?:^|\.)lers\.google$ (?:^|\.)lesoir\.be$ (?:^|\.)letou\.com$ (?:^|\.)letscorp\.net$ (?:^|\.)lflink\.com$ (?:^|\.)lflinkup\.com$ (?:^|\.)lflinkup\.net$ (?:^|\.)lflinkup\.org$ (?:^|\.)lhakar\.org$ (?:^|\.)lhasocialwork\.org$ (?:^|\.)liangyou\.net$ (?:^|\.)liangzhichuanmei\.com$ (?:^|\.)lianyue\.net$ (?:^|\.)liaowangxizang\.net$ (?:^|\.)liberal\.org\.hk$ (?:^|\.)libertytimes\.com\.tw$ (?:^|\.)library\.usc\.cuhk\.edu\.hk$ (?:^|\.)lidecheng\.com$ (?:^|\.)lifemiles\.com$ (?:^|\.)lighten\.org\.tw$ (?:^|\.)lighti\.me$ (?:^|\.)lightnovel\.cn$ (?:^|\.)lihkg\.com$ (?:^|\.)like\.com$ (?:^|\.)limiao\.net$ (?:^|\.)line-apps\.com$ (?:^|\.)line-scdn\.net$ (?:^|\.)line\.me$ (?:^|\.)line\.naver\.jp$ (?:^|\.)linear-abematv\.akamaized\.net$ (?:^|\.)linglingfa\.com$ (?:^|\.)lingvodics\.com$ (?:^|\.)linkedin\.com$ (?:^|\.)link-o-rama\.com$ (?:^|\.)linkideo\.com$ (?:^|\.)linkuswell\.com$ (?:^|\.)linux\.org\.hk$ (?:^|\.)linuxtoy\.org$ (?:^|\.)lionsroar\.com$ (?:^|\.)lipuman\.com$ (?:^|\.)liquidvpn\.com$ (?:^|\.)listentoyoutube\.com$ (?:^|\.)listorious\.com$ (?:^|\.)lists\.w3\.org$ (?:^|\.)liu-xiaobo\.org$ (?:^|\.)liudejun\.com$ (?:^|\.)liuhanyu\.com$ (?:^|\.)liujianshu\.com$ (?:^|\.)liuxiaobo\.net$ (?:^|\.)liuxiaotong\.com$ (?:^|\.)livecoin\.net$ (?:^|\.)livedoor\.jp$ (?:^|\.)liveleak\.com$ (?:^|\.)livestation\.com$ (?:^|\.)livestream\.com$ (?:^|\.)livevideo\.com$ (?:^|\.)livingonline\.us$ (?:^|\.)livingstream\.com$ (?:^|\.)liwangyang\.com$ (?:^|\.)lizhizhuangbi\.com$ (?:^|\.)lkcn\.net$ (?:^|\.)llss\.me$ (?:^|\.)load\.to$ (?:^|\.)lobsangwangyal\.com$ (?:^|\.)localbitcoins\.com$ (?:^|\.)localdomain\.ws$ (?:^|\.)localpresshk\.com$ (?:^|\.)lockestek\.com$ (?:^|\.)logbot\.net$ (?:^|\.)login\.target\.com$ (?:^|\.)logiqx\.com$ (?:^|\.)londonchinese\.ca$ (?:^|\.)longhair\.hk$ (?:^|\.)longmusic\.com$ (?:^|\.)longtermly\.net$ (?:^|\.)longtoes\.com$ (?:^|\.)lookpic\.com$ (?:^|\.)looktoronto\.com$ (?:^|\.)lotsawahouse\.org$ (?:^|\.)lotuslight\.org\.hk$ (?:^|\.)lotuslight\.org\.tw$ (?:^|\.)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$ (?:^|\.)luke54\.com$ (?:^|\.)luke54\.org$ (?:^|\.)lupm\.org$ (?:^|\.)lushstories\.com$ (?:^|\.)luxebc\.com$ (?:^|\.)lvhai\.org$ (?:^|\.)lvv2\.com$ (?:^|\.)lyfhk\.net$ (?:^|\.)lzmtnews\.org$ (?:^|\.)m\.hkgalden\.com$ (?:^|\.)m\.me$ (?:^|\.)m\.plixi\.com$ (?:^|\.)m\.slandr\.net$ (?:^|\.)ma\.hao123\.com$ (?:^|\.)macgamestore\.com$ (?:^|\.)macrovpn\.com$ (?:^|\.)macts\.com\.tw$ (?:^|\.)mad-ar\.ch$ (?:^|\.)madewithcode\.com$ (?:^|\.)madonna-av\.com$ (?:^|\.)madrau\.com$ (?:^|\.)madthumbs\.com$ (?:^|\.)magazines\.sina\.com\.tw$ (?:^|\.)magic-net\.info$ (?:^|\.)mahabodhi\.org$ (?:^|\.)maiio\.net$ (?:^|\.)mail-archive\.com$ (?:^|\.)maildns\.xyz$ (?:^|\.)maiplus\.com$ (?:^|\.)maizhong\.org$ (?:^|\.)makemymood\.com$ (?:^|\.)makkahnewspaper\.com$ (?:^|\.)makzhou\.warehouse333\.com$ (?:^|\.)malaysiakini\.com$ (?:^|\.)mamingzhe\.com$ (?:^|\.)manchukuo\.net$ (?:^|\.)mangafox\.com$ (?:^|\.)mangafox\.me$ (?:^|\.)maniash\.com$ (?:^|\.)manicur4ik\.ru$ (?:^|\.)mansion\.com$ (?:^|\.)mansionpoker\.com$ (?:^|\.)manta\.com$ (?:^|\.)maplew\.com$ (?:^|\.)marc\.info$ (?:^|\.)marguerite\.su$ (?:^|\.)martau\.com$ (?:^|\.)martincartoons\.com$ (?:^|\.)martsangkagyuofficial\.org$ (?:^|\.)maruta\.be$ (?:^|\.)marxist\.com$ (?:^|\.)marxist\.net$ (?:^|\.)marxists\.org$ (?:^|\.)mash\.to$ (?:^|\.)maskedip\.com$ (?:^|\.)mastodon\.cloud$ (?:^|\.)mastodon\.host$ (?:^|\.)mastodon\.social$ (?:^|\.)matainja\.com$ (?:^|\.)material\.io$ (?:^|\.)mathable\.io$ (?:^|\.)mathiew-badimon\.com$ (?:^|\.)matome-plus\.com$ (?:^|\.)matome-plus\.net$ (?:^|\.)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$ (?:^|\.)me\.youthwant\.com\.tw$ (?:^|\.)meansys\.com$ (?:^|\.)media\.nu\.nl$ (?:^|\.)media\.org\.hk$ (?:^|\.)mediachinese\.com$ (?:^|\.)mediafire\.com$ (?:^|\.)mediafreakcity\.com$ (?:^|\.)medium\.com$ (?:^|\.)meetav\.com$ (?:^|\.)meetup\.com$ (?:^|\.)mefeedia\.com$ (?:^|\.)mefound\.com$ (?:^|\.)mega\.nz$ (?:^|\.)megaproxy\.com$ (?:^|\.)megarotic\.com$ (?:^|\.)megavideo\.com$ (?:^|\.)megurineluka\.com$ (?:^|\.)meirixiaochao\.com$ (?:^|\.)meltoday\.com$ (?:^|\.)meme\.yahoo\.com$ (?:^|\.)memehk\.com$ (?:^|\.)memorybbs\.com$ (?:^|\.)memri\.org$ (?:^|\.)memrijttm\.org$ (?:^|\.)mercatox\.com$ (?:^|\.)mercyprophet\.org$ (?:^|\.)mergersandinquisitions\.org$ (?:^|\.)meridian-trust\.org$ (?:^|\.)meripet\.biz$ (?:^|\.)meripet\.com$ (?:^|\.)merit-times\.com\.tw$ (?:^|\.)meshrep\.com$ (?:^|\.)mesotw\.com$ (?:^|\.)messenger\.com$ (?:^|\.)metacafe\.com$ (?:^|\.)metart\.com$ (?:^|\.)metarthunter\.com$ (?:^|\.)meteorshowersonline\.com$ (?:^|\.)metrohk\.com\.hk$ (?:^|\.)metrolife\.ca$ (?:^|\.)metroradio\.com\.hk$ (?:^|\.)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$ (?:^|\.)mike\.cz\.cc$ (?:^|\.)mikesoltys\.com$ (?:^|\.)milph\.net$ (?:^|\.)milsurps\.com$ (?:^|\.)mimiai\.net$ (?:^|\.)mimivip\.com$ (?:^|\.)mimivv\.com$ (?:^|\.)mindrolling\.org$ (?:^|\.)minghui-a\.org$ (?:^|\.)minghui-b\.org$ (?:^|\.)minghui-school\.org$ (?:^|\.)minghui\.or\.kr$ (?:^|\.)minghui\.org$ (?:^|\.)minghuiyw\.wordpress\.com$ (?:^|\.)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$ (?:^|\.)mist\.vip$ (?:^|\.)mitao\.com\.tw$ (?:^|\.)mitbbs\.com$ (?:^|\.)mitbbsau\.com$ (?:^|\.)mixero\.com$ (?:^|\.)mixpod\.com$ (?:^|\.)mixx\.com$ (?:^|\.)mizzmona\.com$ (?:^|\.)mjib\.gov\.tw$ (?:^|\.)mjlsh\.usc\.cuhk\.edu\.hk$ (?:^|\.)mk5000\.com$ (?:^|\.)mlcool\.com$ (?:^|\.)mlzs\.work$ (?:^|\.)mm-cg\.com$ (?:^|\.)mmaaxx\.com$ (?:^|\.)mmmca\.com$ (?:^|\.)mnewstv\.com$ (?:^|\.)mo\.nightlife141\.com$ (?:^|\.)mobatek\.net$ (?:^|\.)mobile01\.com$ (?:^|\.)mobileways\.de$ (?:^|\.)moby\.to$ (?:^|\.)mobypicture\.com$ (?:^|\.)moeaic\.gov\.tw$ (?:^|\.)moeerolibrary\.com$ (?:^|\.)mofa\.gov\.tw$ (?:^|\.)mofaxiehui\.com$ (?:^|\.)mofos\.com$ (?:^|\.)mog\.com$ (?:^|\.)mohu\.club$ (?:^|\.)mohu\.ml$ (?:^|\.)mojim\.com$ (?:^|\.)mol\.gov\.tw$ (?:^|\.)molihua\.org$ (?:^|\.)mondex\.org$ (?:^|\.)money-link\.com\.tw$ (?:^|\.)moneyhome\.biz$ (?:^|\.)monitorchina\.org$ (?:^|\.)monster\.com$ (?:^|\.)moodyz\.com$ (?:^|\.)moonbbs\.com$ (?:^|\.)moonbingo\.com$ (?:^|\.)morningsun\.org$ (?:^|\.)moroneta\.com$ (?:^|\.)mos\.ru$ (?:^|\.)motherless\.com$ (?:^|\.)motiyun\.com$ (?:^|\.)motor4ik\.ru$ (?:^|\.)mousebreaker\.com$ (?:^|\.)movements\.org$ (?:^|\.)moviefap\.com$ (?:^|\.)mp3buscador\.com$ (?:^|\.)mp3ye\.eu$ (?:^|\.)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$ (?:^|\.)mswe1\.org$ (?:^|\.)mthruf\.com$ (?:^|\.)mtw\.tl$ (?:^|\.)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$ (?:^|\.)mx\.hao123\.com$ (?:^|\.)mx981\.com$ (?:^|\.)my-formosa\.com$ (?:^|\.)my-private-network\.co\.uk$ (?:^|\.)my-proxy\.com$ (?:^|\.)my\.mail\.ru$ (?:^|\.)my\.opera\.com$ (?:^|\.)my\.pcloud\.com$ (?:^|\.)my03\.com$ (?:^|\.)myactimes\.com$ (?:^|\.)myanniu\.com$ (?:^|\.)myaudiocast\.com$ (?:^|\.)myav\.com\.tw$ (?:^|\.)mybbs\.us$ (?:^|\.)mybet\.com$ (?:^|\.)myca168\.com$ (?:^|\.)mycanadanow\.com$ (?:^|\.)mychinamyhome\.com$ (?:^|\.)mychinanet\.com$ (?:^|\.)mychinanews\.com$ (?:^|\.)mychinese\.news$ (?:^|\.)mycnnews\.com$ (?:^|\.)mycould\.com$ (?:^|\.)mydad\.info$ (?:^|\.)myddns\.com$ (?:^|\.)myeasytv\.com$ (?:^|\.)myeclipseide\.com$ (?:^|\.)myforum\.com\.hk$ (?:^|\.)myforum\.com\.uk$ (?:^|\.)myfreecams\.com$ (?:^|\.)myfreepaysite\.com$ (?:^|\.)myfreshnet\.com$ (?:^|\.)myftp\.info$ (?:^|\.)myftp\.name$ (?:^|\.)myiphide\.com$ (?:^|\.)mykomica\.org$ (?:^|\.)mylftv\.com$ (?:^|\.)mymediarom\.com$ (?:^|\.)mymoe\.moe$ (?:^|\.)mymom\.info$ (?:^|\.)mymusic\.net\.tw$ (?:^|\.)mynetav\.net$ (?:^|\.)mynetav\.org$ (?:^|\.)mynumber\.org$ (?:^|\.)myparagliding\.com$ (?:^|\.)mypicture\.info$ (?:^|\.)mypop3\.net$ (?:^|\.)mypop3\.org$ (?:^|\.)mypopescu\.com$ (?:^|\.)myradio\.hk$ (?:^|\.)myreadingmanga\.info$ (?:^|\.)mysecondarydns\.com$ (?:^|\.)myshare\.url\.com\.tw$ (?:^|\.)mysinablog\.com$ (?:^|\.)mysite\.verizon\.net$ (?:^|\.)myspace\.com$ (?:^|\.)myspacecdn\.com$ (?:^|\.)mytalkbox\.com$ (?:^|\.)mytizi\.com$ (?:^|\.)mywww\.biz$ (?:^|\.)myz\.info$ (?:^|\.)naacoalition\.org$ (?:^|\.)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$ (?:^|\.)nat\.gov\.tw$ (?:^|\.)nat\.moe$ (?:^|\.)national-lottery\.co\.uk$ (?:^|\.)nationsonline\.org$ (?:^|\.)nationwide\.com$ (?:^|\.)naughtyamerica\.com$ (?:^|\.)navyfamily\.navy\.mil$ (?:^|\.)navyreserve\.navy\.mil$ (?:^|\.)naweeklytimes\.com$ (?:^|\.)nbtvpn\.com$ (?:^|\.)nccwatch\.org\.tw$ (?:^|\.)nch\.com\.tw$ (?:^|\.)ncn\.org$ (?:^|\.)nde\.de$ (?:^|\.)ndr\.de$ (?:^|\.)ned\.org$ (?:^|\.)nekoslovakia\.net$ (?:^|\.)nemesis2\.qx\.net$ (?:^|\.)neo-miracle\.com$ (?:^|\.)nepusoku\.com$ (?:^|\.)net-fits\.pro$ (?:^|\.)netbirds\.com$ (?:^|\.)netcolony\.com$ (?:^|\.)netflix\.com$ (?:^|\.)netme\.cc$ (?:^|\.)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$ (?:^|\.)newipnow\.com$ (?:^|\.)newlandmagazine\.com\.au$ (?:^|\.)newnews\.ca$ (?:^|\.)news\.cnyes\.com$ (?:^|\.)news\.hk\.msn\.com$ (?:^|\.)news\.hkpeanut\.com$ (?:^|\.)news\.msn\.com\.tw$ (?:^|\.)news\.nationalgeographic\.com$ (?:^|\.)news\.now\.com$ (?:^|\.)news\.now\.com%2fhome$ (?:^|\.)news\.omy\.sg$ (?:^|\.)news\.seehua\.com$ (?:^|\.)news\.sina\.com\.hk$ (?:^|\.)news\.sina\.com\.tw$ (?:^|\.)news\.sinchew\.com\.my$ (?:^|\.)news\.singtao\.ca$ (?:^|\.)news\.tvb\.com$ (?:^|\.)news\.tvbs\.com\.tw$ (?:^|\.)news\.yahoo\.com$ (?:^|\.)news100\.com\.tw$ (?:^|\.)newsancai\.com$ (?:^|\.)newschinacomment\.org$ (?:^|\.)newscn\.org$ (?:^|\.)newsdetox\.ca$ (?:^|\.)newsdh\.com$ (?:^|\.)newspeak\.cc$ (?:^|\.)newstamago\.com$ (?:^|\.)newstapa\.org$ (?:^|\.)newstarnet\.com$ (?:^|\.)newtaiwan\.com\.tw$ (?:^|\.)newtalk\.tw$ (?:^|\.)newyorktimes\.com$ (?:^|\.)nexon\.com$ (?:^|\.)next11\.co\.jp$ (?:^|\.)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$ (?:^|\.)nga\.mil$ (?:^|\.)ngensis\.com$ (?:^|\.)nhentai\.net$ (?:^|\.)nhi\.gov\.tw$ (?:^|\.)nhk-ondemand\.jp$ (?:^|\.)nic\.cz\.cc$ (?:^|\.)nic\.google$ (?:^|\.)nic\.gov$ (?:^|\.)nicovideo\.jp$ (?:^|\.)nighost\.org$ (?:^|\.)nikkei\.com$ (?:^|\.)ninecommentaries\.com$ (?:^|\.)ninjacloak\.com$ (?:^|\.)ninjaproxy\.ninja$ (?:^|\.)nintendium\.com$ (?:^|\.)ninth\.biz$ (?:^|\.)niu\.moe$ (?:^|\.)niusnews\.com$ (?:^|\.)njactb\.org$ (?:^|\.)njuice\.com$ (?:^|\.)nko\.navy\.mil$ (?:^|\.)nlfreevpn\.com$ (?:^|\.)no-ip\.org$ (?:^|\.)nobel\.se$ (?:^|\.)nobelprize\.org$ (?:^|\.)nobodycanstop\.us$ (?:^|\.)nofile\.io$ (?:^|\.)nokogiri\.org$ (?:^|\.)nokola\.com$ (?:^|\.)noodlevpn\.com$ (?:^|\.)norbulingka\.org$ (?:^|\.)nordstrom\.com$ (?:^|\.)nordstromimage\.com$ (?:^|\.)nordstromrack\.com$ (?:^|\.)nordvpn\.com$ (?:^|\.)notify\.dropboxapi\.com$ (?:^|\.)nottinghampost\.com$ (?:^|\.)novelasia\.com$ (?:^|\.)now\.com$ (?:^|\.)now\.im$ (?:^|\.)nownews\.com$ (?:^|\.)nowtorrents\.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\.cz$ (?:^|\.)ntdtv\.org$ (?:^|\.)ntdtv\.ru$ (?:^|\.)ntdtvla\.com$ (?:^|\.)ntrfun\.com$ (?:^|\.)ntsna\.gov\.tw$ (?:^|\.)nubiles\.net$ (?:^|\.)nuexpo\.com$ (?:^|\.)nukistream\.com$ (?:^|\.)nurgo-software\.com$ (?:^|\.)nusatrip\.com$ (?:^|\.)nutaku\.net$ (?:^|\.)nuuvem\.com$ (?:^|\.)nuvid\.com$ (?:^|\.)nuzcom\.com$ (?:^|\.)nvdst\.com$ (?:^|\.)nvquan\.org$ (?:^|\.)nvtongzhisheng\.org$ (?:^|\.)nwtca\.org$ (?:^|\.)ny\.stgloballink\.com$ (?:^|\.)ny\.visiontimes\.com$ (?:^|\.)nyaa\.eu$ (?:^|\.)nydus\.ca$ (?:^|\.)nylon-angel\.com$ (?:^|\.)nylonstockingsonline\.com$ (?:^|\.)nyt\.com$ (?:^|\.)nytchina\.com$ (?:^|\.)nytcn\.me$ (?:^|\.)nytco\.com$ (?:^|\.)nyti\.ms$ (?:^|\.)nytimes\.com$ (?:^|\.)nytimes\.map\.fastly\.net$ (?:^|\.)nytimg\.com$ (?:^|\.)nytstyle\.com$ (?:^|\.)nzchinese\.com$ (?:^|\.)nzchinese\.net\.nz$ (?:^|\.)observechina\.net$ (?:^|\.)obutu\.com$ (?:^|\.)ocaspro\.com$ (?:^|\.)occupytiananmen\.com$ (?:^|\.)oclp\.hk$ (?:^|\.)ocreampies\.com$ (?:^|\.)ocry\.com$ (?:^|\.)october-review\.org$ (?:^|\.)oculus\.com$ (?:^|\.)oculuscdn\.com$ (?:^|\.)oex\.com$ (?:^|\.)offbeatchina\.com$ (?:^|\.)officeoftibet\.com$ (?:^|\.)ofile\.org$ (?:^|\.)ogaoga\.org$ (?:^|\.)ogate\.org$ (?:^|\.)oikos\.com\.tw$ (?:^|\.)oiktv\.com$ (?:^|\.)oizoblog\.com$ (?:^|\.)ok\.ru$ (?:^|\.)okayfreedom\.com$ (?:^|\.)okex\.com$ (?:^|\.)okk\.tw$ (?:^|\.)old-cat\.net$ (?:^|\.)old\.honeynet\.org$ (?:^|\.)old\.nabble\.com$ (?:^|\.)olumpo\.com$ (?:^|\.)olympicwatch\.org$ (?:^|\.)omgili\.com$ (?:^|\.)omni7\.jp$ (?:^|\.)omnitalk\.com$ (?:^|\.)omnitalk\.org$ (?:^|\.)on\.cc$ (?:^|\.)on2\.com$ (?:^|\.)onapp\.com$ (?:^|\.)onedrive\.live\.com$ (?:^|\.)onedumb\.com$ (?:^|\.)onejav\.com$ (?:^|\.)onion\.city$ (?:^|\.)online\.recoveryversion\.org$ (?:^|\.)onlinecha\.com$ (?:^|\.)onlineyoutube\.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$ (?:^|\.)openvpn\.net$ (?:^|\.)openvpn\.org$ (?:^|\.)openwebster\.com$ (?:^|\.)openwrt\.org\.cn$ (?:^|\.)opml\.radiotime\.com$ (?:^|\.)opus-gaming\.com$ (?:^|\.)organcare\.org\.tw$ (?:^|\.)organharvestinvestigation\.net$ (?:^|\.)organiccrap\.com$ (?:^|\.)orgasm\.com$ (?:^|\.)orgfree\.com$ (?:^|\.)orient-doll\.com$ (?:^|\.)orientaldaily\.com\.my$ (?:^|\.)orn\.jp$ (?:^|\.)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$ (?:^|\.)overplay\.net$ (?:^|\.)oversea\.istarshine\.com$ (?:^|\.)ow\.ly$ (?:^|\.)owl\.li$ (?:^|\.)oyax\.com$ (?:^|\.)oyghan\.com$ (?:^|\.)ozchinese\.com$ (?:^|\.)ozvoice\.org$ (?:^|\.)ozxw\.com$ (?:^|\.)ozyoyo\.com$ (?:^|\.)pachosting\.com$ (?:^|\.)pacificpoker\.com$ (?:^|\.)packages\.debian\.org$ (?:^|\.)packetix\.net$ (?:^|\.)pacopacomama\.com$ (?:^|\.)padmanet\.com$ (?:^|\.)page\.bid\.yahoo\.com$ (?:^|\.)page2rss\.com$ (?:^|\.)pagodabox\.com$ (?:^|\.)palacemoon\.com$ (?:^|\.)paldengyal\.com$ (?:^|\.)paljorpublications\.com$ (?:^|\.)paltalk\.com$ (?:^|\.)panamapapers\.sueddeutsche\.de$ (?:^|\.)pandapow\.co$ (?:^|\.)pandapow\.net$ (?:^|\.)pandavpn-jp\.com$ (?:^|\.)pandora\.com$ (?:^|\.)pandora\.tv$ (?:^|\.)panluan\.net$ (?:^|\.)panoramio\.com$ (?:^|\.)pao-pao\.net$ (?:^|\.)paper\.li$ (?:^|\.)paperb\.us$ (?:^|\.)paradisehill\.cc$ (?:^|\.)paradisepoker\.com$ (?:^|\.)parkansky\.com$ (?:^|\.)partycasino\.com$ (?:^|\.)partypoker\.com$ (?:^|\.)passion\.com$ (?:^|\.)passiontimes\.hk$ (?:^|\.)paste\.ee$ (?:^|\.)pastebin\.com$ (?:^|\.)pastie\.org$ (?:^|\.)pbs\.org$ (?:^|\.)pbwiki\.com$ (?:^|\.)pbworks\.com$ (?:^|\.)pbxes\.com$ (?:^|\.)pbxes\.org$ (?:^|\.)pcanywhere\.net$ (?:^|\.)pcc\.gov\.tw$ (?:^|\.)pcdvd\.com\.tw$ (?:^|\.)pchome\.com\.tw$ (?:^|\.)pcij\.org$ (?:^|\.)pcstore\.com\.tw$ (?:^|\.)pct\.org\.tw$ (?:^|\.)pdetails\.com$ (?:^|\.)pdproxy\.com$ (?:^|\.)pds\.nasa\.gov$ (?:^|\.)peace\.ca$ (?:^|\.)peacefire\.org$ (?:^|\.)peacehall\.com$ (?:^|\.)pearlher\.org$ (?:^|\.)peeasian\.com$ (?:^|\.)pekingduck\.org$ (?:^|\.)pemulihan\.or\.id$ (?:^|\.)pen\.io$ (?:^|\.)penchinese\.com$ (?:^|\.)penchinese\.net$ (?:^|\.)pengyulong\.com$ (?:^|\.)penisbot\.com$ (?:^|\.)penthouse\.com$ (?:^|\.)pentoy\.hk$ (?:^|\.)peoplebookcafe\.com$ (?:^|\.)peoplenews\.tw$ (?:^|\.)peopo\.org$ (?:^|\.)percy\.in$ (?:^|\.)perfectgirls\.net$ (?:^|\.)perfectvpn\.net$ (?:^|\.)periscope\.tv$ (?:^|\.)persecutionblog\.com$ (?:^|\.)persiankitty\.com$ (?:^|\.)pfd\.org\.hk$ (?:^|\.)phapluan\.org$ (?:^|\.)phayul\.com$ (?:^|\.)philborges\.com$ (?:^|\.)philly\.com$ (?:^|\.)phmsociety\.org$ (?:^|\.)phncdn\.com$ (?:^|\.)phobos\.apple\.com$ (?:^|\.)phosphation13\.rssing\.com$ (?:^|\.)photodharma\.net$ (?:^|\.)photofocus\.com$ (?:^|\.)phuquocservices\.com$ (?:^|\.)picacomic\.com$ (?:^|\.)picacomiccn\.com$ (?:^|\.)picasaweb\.com$ (?:^|\.)picidae\.net$ (?:^|\.)pictures\.playboy\.com$ (?:^|\.)picturesocial\.com$ (?:^|\.)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\.de$ (?:^|\.)pinterest\.dk$ (?:^|\.)pinterest\.fr$ (?:^|\.)pinterest\.jp$ (?:^|\.)pinterest\.nl$ (?:^|\.)pinterest\.se$ (?:^|\.)pioneer-worker\.forums-free\.com$ (?:^|\.)pipii\.tv$ (?:^|\.)piposay\.com$ (?:^|\.)piraattilahti\.org$ (?:^|\.)piring\.com$ (?:^|\.)pixelqi\.com$ (?:^|\.)pixiv\.net$ (?:^|\.)pixnet\.net$ (?:^|\.)pk\.com$ (?:^|\.)pki\.goog$ (?:^|\.)placemix\.com$ (?:^|\.)playboy\.com$ (?:^|\.)playboyplus\.com$ (?:^|\.)player\.fm$ (?:^|\.)playno1\.com$ (?:^|\.)playpcesor\.com$ (?:^|\.)plays\.com\.tw$ (?:^|\.)plm\.org\.hk$ (?:^|\.)plunder\.com$ (?:^|\.)plurk\.com$ (?:^|\.)plus\.codes$ (?:^|\.)plus28\.com$ (?:^|\.)plusbb\.com$ (?:^|\.)pmatehunter\.com$ (?:^|\.)pmates\.com$ (?:^|\.)po2b\.com$ (?:^|\.)pobieramy\.top$ (?:^|\.)podictionary\.com$ (?:^|\.)pokerstars\.com$ (?:^|\.)pokerstars\.net$ (?:^|\.)politicalchina\.org$ (?:^|\.)politicalconsultation\.org$ (?:^|\.)politiscales\.net$ (?:^|\.)poloniex\.com$ (?:^|\.)polymer-project\.org$ (?:^|\.)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$ (?:^|\.)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$ (?:^|\.)prayforchina\.net$ (?:^|\.)premeforwindows7\.com$ (?:^|\.)premproxy\.com$ (?:^|\.)presentationzen\.com$ (?:^|\.)presidentlee\.tw$ (?:^|\.)prestige-av\.com$ (?:^|\.)pride\.google$ (?:^|\.)prism-break\.org$ (?:^|\.)prisoner-state-secret-journal-premier$ (?:^|\.)prisoneralert\.com$ (?:^|\.)pritunl\.com$ (?:^|\.)privacybox\.de$ (?:^|\.)private\.com$ (?:^|\.)privateinternetaccess\.com$ (?:^|\.)privatepaste\.com$ (?:^|\.)privatetunnel\.com$ (?:^|\.)privatevpn\.com$ (?:^|\.)procopytips\.com$ (?:^|\.)prosiben\.de$ (?:^|\.)protonvpn\.com$ (?:^|\.)provideocoalition\.com$ (?:^|\.)provpnaccounts\.com$ (?:^|\.)proxfree\.com$ (?:^|\.)proxifier\.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$ (?:^|\.)psiphon\.ca$ (?:^|\.)psiphon\.civisec\.org$ (?:^|\.)psiphon3\.com$ (?:^|\.)psiphontoday\.com$ (?:^|\.)pts\.org\.tw$ (?:^|\.)ptt\.cc$ (?:^|\.)pttvan\.org$ (?:^|\.)pubu\.com\.tw$ (?:^|\.)puffinbrowser\.com$ (?:^|\.)puffstore\.com$ (?:^|\.)pullfolio\.com$ (?:^|\.)pulse\.yahoo\.com$ (?:^|\.)punyu\.com$ (?:^|\.)pure18\.com$ (?:^|\.)pureconcepts\.net$ (?:^|\.)pureinsight\.org$ (?:^|\.)purepdf\.com$ (?:^|\.)purevpn\.com$ (?:^|\.)purplelotus\.org$ (?:^|\.)pursuestar\.com$ (?:^|\.)pushchinawall\.com$ (?:^|\.)pussyspace\.com$ (?:^|\.)putihome\.org$ (?:^|\.)putlocker\.com$ (?:^|\.)putty\.org$ (?:^|\.)puuko\.com$ (?:^|\.)pwned\.com$ (?:^|\.)python\.com$ (?:^|\.)python\.com\.tw$ (?:^|\.)pythonhackers\.com$ (?:^|\.)pytorch\.org$ (?:^|\.)q%3dfreedom$ (?:^|\.)q%3dtriangle$ (?:^|\.)q=freedom$ (?:^|\.)q=triangle$ (?:^|\.)qanote\.com$ (?:^|\.)qgirl\.com\.tw$ (?:^|\.)qhigh\.com$ (?:^|\.)qi-gong\.me$ (?:^|\.)qiandao\.today$ (?:^|\.)qiangyou\.org$ (?:^|\.)qidian\.ca$ (?:^|\.)qienkuen\.org$ (?:^|\.)qiwen\.lu$ (?:^|\.)qixianglu\.cn$ (?:^|\.)qkshare\.com$ (?:^|\.)qoos\.com$ (?:^|\.)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$ (?:^|\.)qxbbs\.org$ (?:^|\.)r18\.com$ (?:^|\.)ra\.gg$ (?:^|\.)radicalparty\.org$ (?:^|\.)radiko\.jp$ (?:^|\.)radioaustralia\.net\.au$ (?:^|\.)radiohilight\.net$ (?:^|\.)radiovaticana\.org$ (?:^|\.)radiovncr\.com$ (?:^|\.)rael\.org$ (?:^|\.)raggedbanner\.com$ (?:^|\.)raidcall\.com\.tw$ (?:^|\.)raidtalk\.com\.tw$ (?:^|\.)rainbowplan\.org$ (?:^|\.)raizoji\.or\.jp$ (?:^|\.)ramcity\.com\.au$ (?:^|\.)rangwang\.biz$ (?:^|\.)rangzen\.com$ (?:^|\.)rangzen\.net$ (?:^|\.)rangzen\.org$ (?:^|\.)ranyunfei\.com$ (?:^|\.)rapbull\.net$ (?:^|\.)rapidgator\.net$ (?:^|\.)rapidmoviez\.com$ (?:^|\.)rapidvpn\.com$ (?:^|\.)raremovie\.cc$ (?:^|\.)raremovie\.net$ (?:^|\.)rawgit\.com$ (?:^|\.)rawgithub\.com$ (?:^|\.)razyboard\.com$ (?:^|\.)rcam\.target\.com$ (?:^|\.)rcinet\.ca$ (?:^|\.)rconversation\.blogs\.com$ (?:^|\.)rd\.com$ (?:^|\.)rdio\.com$ (?:^|\.)read01\.com$ (?:^|\.)read100\.com$ (?:^|\.)readingtimes\.com\.tw$ (?:^|\.)readmoo\.com$ (?:^|\.)readydown\.com$ (?:^|\.)realcourage\.org$ (?:^|\.)realforum\.zkiz\.com$ (?:^|\.)realitykings\.com$ (?:^|\.)realraptalk\.com$ (?:^|\.)realsexpass\.com$ (?:^|\.)rebatesrule\.net$ (?:^|\.)recordhistory\.org$ (?:^|\.)recovery\.org\.tw$ (?:^|\.)recoveryversion\.com\.tw$ (?:^|\.)red-lang\.org$ (?:^|\.)redballoonsolidarity\.org$ (?:^|\.)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$ (?:^|\.)religioustolerance\.org$ (?:^|\.)remembering_tiananmen_20_years$ (?:^|\.)renminbao\.com$ (?:^|\.)renyurenquan\.org$ (?:^|\.)research\.jmsc\.hku\.hk$ (?:^|\.)resilio\.com$ (?:^|\.)retweeteffect\.com$ (?:^|\.)retweetist\.com$ (?:^|\.)retweetrank\.com$ (?:^|\.)reuters\.com$ (?:^|\.)reutersmedia\.net$ (?:^|\.)revleft\.com$ (?:^|\.)revver\.com$ (?:^|\.)rfa\.org$ (?:^|\.)rfachina\.com$ (?:^|\.)rfalive1\.akacast\.akamaistream\.net$ (?:^|\.)rfamobile\.org$ (?:^|\.)rfaweb\.org$ (?:^|\.)rferl\.org$ (?:^|\.)rfi\.fr$ (?:^|\.)rfi\.my$ (?:^|\.)rg3\.github\.io$ (?:^|\.)rightbtc\.com$ (?:^|\.)rigpa\.org$ (?:^|\.)riku\.me$ (?:^|\.)rileyguide\.com$ (?:^|\.)ritouki\.jp$ (?:^|\.)ritter\.vg$ (?:^|\.)rixcloud\.com$ (?:^|\.)rixcloud\.us$ (?:^|\.)rlwlw\.com$ (?:^|\.)rmjdw\.com$ (?:^|\.)rmjdw132\.info$ (?:^|\.)roadshow\.hk$ (?:^|\.)roboforex\.com$ (?:^|\.)robustnessiskey\.com$ (?:^|\.)rocket-inc\.net$ (?:^|\.)rocksdb\.org$ (?:^|\.)rojo\.com$ (?:^|\.)rolia\.net$ (?:^|\.)ronjoneswriter\.com$ (?:^|\.)roodo\.com$ (?:^|\.)rosechina\.net$ (?:^|\.)rotten\.com$ (?:^|\.)rsdlmonitor\.com$ (?:^|\.)rsf-chinese\.org$ (?:^|\.)rsf\.org$ (?:^|\.)rsgamen\.org$ (?:^|\.)rssmeme\.com$ (?:^|\.)rtalabel\.org$ (?:^|\.)rthk\.hk$ (?:^|\.)rthk\.org\.hk$ (?:^|\.)rthklive2-lh\.akamaihd\.net$ (?:^|\.)rti\.org\.tw$ (?:^|\.)rtycminnesota\.org$ (?:^|\.)ruanyifeng\.com$ (?:^|\.)rukor\.org$ (?:^|\.)runbtx\.com$ (?:^|\.)rushbee\.com$ (?:^|\.)ruten\.com\.tw$ (?:^|\.)rutube\.ru$ (?:^|\.)ruyiseek\.com$ (?:^|\.)rxhj\.net$ (?:^|\.)s-cute\.com$ (?:^|\.)s-dragon\.org$ (?:^|\.)s1\.nudezz\.com$ (?:^|\.)s1heng\.com$ (?:^|\.)s1s1s1\.com$ (?:^|\.)s3-ap-northeast-1\.amazonaws\.com$ (?:^|\.)s3-ap-southeast-2\.amazonaws\.com$ (?:^|\.)s8forum\.com$ (?:^|\.)sa\.hao123\.com$ (?:^|\.)sacks\.com$ (?:^|\.)sacom\.hk$ (?:^|\.)sadistic-v\.com$ (?:^|\.)sadpanda\.us$ (?:^|\.)safervpn\.com$ (?:^|\.)safety\.google$ (?:^|\.)saintyculture\.com$ (?:^|\.)saiq\.me$ (?:^|\.)sakuralive\.com$ (?:^|\.)sakya\.org$ (?:^|\.)salvation\.org\.hk$ (?:^|\.)samair\.ru$ (?:^|\.)sambhota\.org$ (?:^|\.)sanmin\.com\.tw$ (?:^|\.)sapikachu\.net$ (?:^|\.)saveliuxiaobo\.com$ (?:^|\.)savemedia\.com$ (?:^|\.)savethedate\.foo$ (?:^|\.)savethesounds\.info$ (?:^|\.)savetibet\.de$ (?:^|\.)savetibet\.fr$ (?:^|\.)savetibet\.nl$ (?:^|\.)savetibet\.org$ (?:^|\.)savetibet\.ru$ (?:^|\.)savetibetstore\.org$ (?:^|\.)savevid\.com$ (?:^|\.)say2\.info$ (?:^|\.)sbme\.me$ (?:^|\.)sbs\.com\.au$ (?:^|\.)scache\.vzw\.com$ (?:^|\.)scache1\.vzw\.com$ (?:^|\.)scache2\.vzw\.com$ (?:^|\.)scasino\.com$ (?:^|\.)schema\.org$ (?:^|\.)sciencenets\.com$ (?:^|\.)scieron\.com$ (?:^|\.)scmp\.com$ (?:^|\.)scmpchinese\.com$ (?:^|\.)scramble\.io$ (?:^|\.)scribd\.com$ (?:^|\.)scriptspot\.com$ (?:^|\.)seapuff\.com$ (?:^|\.)search$ (?:^|\.)search\.aol\.com$ (?:^|\.)search\.yahoo\.co\.jp$ (?:^|\.)search\.yahoo\.com$ (?:^|\.)searchtruth\.com$ (?:^|\.)secretchina\.com$ (?:^|\.)secretgarden\.no$ (?:^|\.)secretsline\.biz$ (?:^|\.)secure\.hustler\.com$ (?:^|\.)secure\.logmein\.com$ (?:^|\.)secure\.raxcdn\.com$ (?:^|\.)securetunnel\.com$ (?:^|\.)securityinabox\.org$ (?:^|\.)securitykiss\.com$ (?:^|\.)seed4\.me$ (?:^|\.)seesmic\.com$ (?:^|\.)seevpn\.com$ (?:^|\.)seezone\.net$ (?:^|\.)sejie\.com$ (?:^|\.)sellclassics\.com$ (?:^|\.)sendsmtp\.com$ (?:^|\.)sendspace\.com$ (?:^|\.)servehttp\.com$ (?:^|\.)serveuser\.com$ (?:^|\.)serveusers\.com$ (?:^|\.)sesawe\.net$ (?:^|\.)sesawe\.org$ (?:^|\.)sethwklein\.net$ (?:^|\.)setn\.com$ (?:^|\.)settv\.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$ (?:^|\.)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$ (?:^|\.)shambalapost\.com$ (?:^|\.)shambhalasun\.com$ (?:^|\.)shangfang\.org$ (?:^|\.)shapeservices\.com$ (?:^|\.)share\.america\.gov$ (?:^|\.)share\.dmhy\.org$ (?:^|\.)share\.ovi\.com$ (?:^|\.)share\.youthwant\.com\.tw$ (?:^|\.)sharebee\.com$ (?:^|\.)sharecool\.org$ (?:^|\.)sharpdaily\.com\.hk$ (?:^|\.)sharpdaily\.hk$ (?:^|\.)sharpdaily\.tw$ (?:^|\.)shat-tibet\.com$ (?:^|\.)shattered\.io$ (?:^|\.)sheikyermami\.com$ (?:^|\.)shellfire\.de$ (?:^|\.)shenshou\.org$ (?:^|\.)shenyun\.com$ (?:^|\.)shenyunperformingarts\.org$ (?:^|\.)shenzhoufilm\.com$ (?:^|\.)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$ (?:^|\.)shopping\.com$ (?:^|\.)showbiz\.omy\.sg$ (?:^|\.)showhaotu\.com$ (?:^|\.)showtime\.jp$ (?:^|\.)shutterstock\.com$ (?:^|\.)shwchurch\.org$ (?:^|\.)shwchurch3\.com$ (?:^|\.)siddharthasintent\.org$ (?:^|\.)sidelinesnews\.com$ (?:^|\.)sidelinessportseatery\.com$ (?:^|\.)sierrafriendsoftibet\.org$ (?:^|\.)sijihuisuo\.club$ (?:^|\.)sijihuisuo\.com$ (?:^|\.)sikaozhe1997\.github\.io$ (?:^|\.)silkbook\.com$ (?:^|\.)simbolostwitter\.com$ (?:^|\.)simplecd\.org$ (?:^|\.)simpleproductivityblog\.com$ (?:^|\.)sinchew\.com\.my$ (?:^|\.)singaporepools\.com\.sg$ (?:^|\.)singfortibet\.com$ (?:^|\.)singpao\.com\.hk$ (?:^|\.)singtao\.com$ (?:^|\.)singtaousa\.com$ (?:^|\.)sino-monthly\.com$ (?:^|\.)sinoants\.com$ (?:^|\.)sinocast\.com$ (?:^|\.)sinocism\.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$ (?:^|\.)siteks\.uk\.to$ (?:^|\.)sitemaps\.org$ (?:^|\.)six-degrees\.io$ (?:^|\.)sixth\.biz$ (?:^|\.)sjrt\.org$ (?:^|\.)sjum\.cn$ (?:^|\.)sketchappsources\.com$ (?:^|\.)skimtube\.com$ (?:^|\.)skybet\.com$ (?:^|\.)skyking\.com\.tw$ (?:^|\.)skyvegas\.com$ (?:^|\.)skyxvpn\.com$ (?:^|\.)slacker\.com$ (?:^|\.)slaytizle\.com$ (?:^|\.)sleazydream\.com$ (?:^|\.)slheng\.com$ (?:^|\.)slickvpn\.com$ (?:^|\.)slideshare\.net$ (?:^|\.)slinkset\.com$ (?:^|\.)slutload\.com$ (?:^|\.)slutmoonbeam\.com$ (?:^|\.)slyip\.com$ (?:^|\.)slyip\.net$ (?:^|\.)sm-miracle\.com$ (?:^|\.)smartdnsproxy\.com$ (?:^|\.)smarthide\.com$ (?:^|\.)smchbooks\.com$ (?:^|\.)smh\.com\.au$ (?:^|\.)smhric\.org$ (?:^|\.)smith\.edu$ (?:^|\.)smyxy\.org$ (?:^|\.)snapchat\.com$ (?:^|\.)snaptu\.com$ (?:^|\.)sndcdn\.com$ (?:^|\.)sneakme\.net$ (?:^|\.)snowlionpub\.com$ (?:^|\.)sobees\.com$ (?:^|\.)soc\.mil$ (?:^|\.)socialwhale\.com$ (?:^|\.)socks-proxy\.net$ (?:^|\.)sockscap64\.com$ (?:^|\.)sockslist\.net$ (?:^|\.)socrec\.org$ (?:^|\.)sod\.co\.jp$ (?:^|\.)sodatea\.github\.io$ (?:^|\.)softether-download\.com$ (?:^|\.)softether\.co\.jp$ (?:^|\.)softether\.org$ (?:^|\.)softfamous\.com$ (?:^|\.)softsmirror\.cf$ (?:^|\.)softwarebychuck\.com$ (?:^|\.)softwaredownload\.gitbooks\.io$ (?:^|\.)sogclub\.com$ (?:^|\.)sogrady\.me$ (?:^|\.)soh\.tw$ (?:^|\.)sohcradio\.com$ (?:^|\.)sohfrance\.org$ (?:^|\.)sokamonline\.com$ (?:^|\.)sokmil\.com$ (?:^|\.)solarsystem\.nasa\.gov$ (?:^|\.)solidaritetibet\.org$ (?:^|\.)solidfiles\.com$ (?:^|\.)somee\.com$ (?:^|\.)songjianjun\.com$ (?:^|\.)sonicbbs\.cc$ (?:^|\.)sonidodelaesperanza\.org$ (?:^|\.)sopcast\.com$ (?:^|\.)sopcast\.org$ (?:^|\.)sorazone\.net$ (?:^|\.)sorting-algorithms\.com$ (?:^|\.)sos\.org$ (?:^|\.)sosreader\.com$ (?:^|\.)sostibet\.org$ (?:^|\.)soubory\.com$ (?:^|\.)soul-plus\.net$ (?:^|\.)soulcaliburhentai\.net$ (?:^|\.)soumo\.info$ (?:^|\.)soundcloud\.com$ (?:^|\.)soundofhope\.kr$ (?:^|\.)soundofhope\.org$ (?:^|\.)soup\.io$ (?:^|\.)soupofmedia\.com$ (?:^|\.)sourceforge\.net$ (?:^|\.)sourcewadio\.com$ (?:^|\.)southnews\.com\.tw$ (?:^|\.)sowers\.org\.hk$ (?:^|\.)soylentnews\.org$ (?:^|\.)spaces\.hightail\.com$ (?:^|\.)spankbang\.com$ (?:^|\.)spankingtube\.com$ (?:^|\.)spankwire\.com$ (?:^|\.)spb\.com$ (?:^|\.)speakerdeck\.com$ (?:^|\.)specxinzl\.jigsy\.com$ (?:^|\.)speedify\.com$ (?:^|\.)spem\.at$ (?:^|\.)spencertipping\.com$ (?:^|\.)spendee\.com$ (?:^|\.)spicevpn\.com$ (?:^|\.)spideroak\.com$ (?:^|\.)spike\.com$ (?:^|\.)sports\.williamhill\.com$ (?:^|\.)spotflux\.com$ (?:^|\.)spotify\.com$ (?:^|\.)spreadshirt\.es$ (?:^|\.)spring4u\.info$ (?:^|\.)springboardplatform\.com$ (?:^|\.)sprite\.org$ (?:^|\.)sproutcore\.com$ (?:^|\.)sproxy\.info$ (?:^|\.)squirly\.info$ (?:^|\.)srcf\.ucam\.org$ (?:^|\.)srocket\.us$ (?:^|\.)ss-link\.com$ (?:^|\.)ss\.carryzhou\.com$ (?:^|\.)ss\.levyhsu\.com$ (?:^|\.)ss\.pythonic\.life$ (?:^|\.)ss7\.vzw\.com$ (?:^|\.)ssglobal\.co$ (?:^|\.)ssglobal\.me$ (?:^|\.)ssh91\.com$ (?:^|\.)ssl\.webpack\.de$ (?:^|\.)ssl443\.org$ (?:^|\.)sspanel\.net$ (?:^|\.)sspro\.ml$ (?:^|\.)ssr\.tools$ (?:^|\.)ssrshare\.com$ (?:^|\.)sss\.camp$ (?:^|\.)sstmlt\.moe$ (?:^|\.)sstmlt\.net$ (?:^|\.)stackoverflow\.com$ (?:^|\.)stage64\.hk$ (?:^|\.)standupfortibet\.org$ (?:^|\.)stanford\.edu$ (?:^|\.)starfishfx\.com$ (?:^|\.)starp2p\.com$ (?:^|\.)startpage\.com$ (?:^|\.)startuplivingchina\.com$ (?:^|\.)stat\.gov\.tw$ (?:^|\.)static-economist\.com$ (?:^|\.)static\.comico\.tw$ (?:^|\.)static\.shemalez\.com$ (?:^|\.)static01\.nyt\.com$ (?:^|\.)staticflickr\.com$ (?:^|\.)statueofdemocracy\.org$ (?:^|\.)stc\.com\.sa$ (?:^|\.)steamcommunity\.com$ (?:^|\.)steel-storm\.com$ (?:^|\.)steemit\.com$ (?:^|\.)steganos\.com$ (?:^|\.)steganos\.net$ (?:^|\.)stepchina\.com$ (?:^|\.)stephaniered\.com$ (?:^|\.)sthoo\.com$ (?:^|\.)stickam\.com$ (?:^|\.)stickeraction\.com$ (?:^|\.)stileproject\.com$ (?:^|\.)sto\.cc$ (?:^|\.)stoporganharvesting\.org$ (?:^|\.)stoptibetcrisis\.net$ (?:^|\.)storagenewsletter\.com$ (?:^|\.)store\.steampowered\.com$ (?:^|\.)stories\.google$ (?:^|\.)storify\.com$ (?:^|\.)storm\.mg$ (?:^|\.)stormmediagroup\.com$ (?:^|\.)stoweboyd\.com$ (?:^|\.)stranabg\.com$ (?:^|\.)straplessdildo\.com$ (?:^|\.)streamingthe\.net$ (?:^|\.)streema\.com$ (?:^|\.)strikingly\.com$ (?:^|\.)strongvpn\.com$ (?:^|\.)strongwindpress\.com$ (?:^|\.)student\.tw$ (?:^|\.)studentsforafreetibet\.org$ (?:^|\.)stumbleupon\.com$ (?:^|\.)stupidvideos\.com$ (?:^|\.)subacme\.rerouted\.org$ (?:^|\.)successfn\.com$ (?:^|\.)sugarsync\.com$ (?:^|\.)sugobbs\.com$ (?:^|\.)sugumiru18\.com$ (?:^|\.)suissl\.com$ (?:^|\.)sujiatun\.wordpress\.com$ (?:^|\.)sukebei\.nyaa\.si$ (?:^|\.)sulian\.me$ (?:^|\.)summify\.com$ (?:^|\.)sumrando\.com$ (?:^|\.)sun1911\.com$ (?:^|\.)sunmedia\.ca$ (?:^|\.)sunporno\.com$ (?:^|\.)sunskyforum\.com$ (?:^|\.)sunta\.com\.tw$ (?:^|\.)sunvpn\.net$ (?:^|\.)sunwinism\.joinbbs\.net$ (?:^|\.)suoluo\.org$ (?:^|\.)supchina\.com$ (?:^|\.)superfreevpn\.com$ (?:^|\.)superokayama\.com$ (?:^|\.)superpages\.com$ (?:^|\.)supervpn\.net$ (?:^|\.)superzooi\.com$ (?:^|\.)suppig\.net$ (?:^|\.)suprememastertv\.com$ (?:^|\.)surfeasy\.com$ (?:^|\.)surfeasy\.com\.au$ (?:^|\.)suroot\.com$ (?:^|\.)surrenderat20\.net$ (?:^|\.)sustainability\.google$ (?:^|\.)suyangg\.com$ (?:^|\.)svsfx\.com$ (?:^|\.)swagbucks\.com$ (?:^|\.)swissinfo\.ch$ (?:^|\.)swissvpn\.net$ (?:^|\.)switch1\.jp$ (?:^|\.)switchvpn\.net$ (?:^|\.)sydneytoday\.com$ (?:^|\.)sylfoundation\.org$ (?:^|\.)syncback\.com$ (?:^|\.)synergyse\.com$ (?:^|\.)sysresccd\.org$ (?:^|\.)sytes\.net$ (?:^|\.)szbbs\.net$ (?:^|\.)szetowah\.org\.hk$ (?:^|\.)t-g\.com$ (?:^|\.)t\.co$ (?:^|\.)t\.me$ (?:^|\.)t\.orzdream\.com$ (?:^|\.)t35\.com$ (?:^|\.)t66y\.com$ (?:^|\.)taa-usa\.org$ (?:^|\.)taaze\.tw$ (?:^|\.)tabtter\.jp$ (?:^|\.)tacc\.cwb\.gov\.tw$ (?:^|\.)tacem\.org$ (?:^|\.)taconet\.com\.tw$ (?:^|\.)taedp\.org\.tw$ (?:^|\.)tafm\.org$ (?:^|\.)tagwa\.org\.au$ (?:^|\.)tagwalk\.com$ (?:^|\.)tahr\.org\.tw$ (?:^|\.)taipei\.gov\.tw$ (?:^|\.)taipeisociety\.org$ (?:^|\.)taiwan-sex\.com$ (?:^|\.)taiwanbible\.com$ (?:^|\.)taiwancon\.com$ (?:^|\.)taiwandaily\.net$ (?:^|\.)taiwandc\.org$ (?:^|\.)taiwanjobs\.gov\.tw$ (?:^|\.)taiwanjustice\.com$ (?:^|\.)taiwanjustice\.net$ (?:^|\.)taiwankiss\.com$ (?:^|\.)taiwannation\.50webs\.com$ (?:^|\.)taiwannation\.com$ (?:^|\.)taiwannation\.com\.tw$ (?:^|\.)taiwanncf\.org\.tw$ (?:^|\.)taiwannews\.com\.tw$ (?:^|\.)taiwantp\.net$ (?:^|\.)taiwantt\.org\.tw$ (?:^|\.)taiwanus\.net$ (?:^|\.)taiwanyes\.com$ (?:^|\.)taiwanyes\.ning\.com$ (?:^|\.)talk853\.com$ (?:^|\.)talkboxapp\.com$ (?:^|\.)talkcc\.com$ (?:^|\.)talkonly\.net$ (?:^|\.)tamiaode\.tk$ (?:^|\.)tanc\.org$ (?:^|\.)tangben\.com$ (?:^|\.)tangren\.us$ (?:^|\.)taoism\.net$ (?:^|\.)taolun\.info$ (?:^|\.)tapanwap\.com$ (?:^|\.)tapatalk\.com$ (?:^|\.)tarr\.uspto\.gov$ (?:^|\.)tascn\.com\.au$ (?:^|\.)taup\.net$ (?:^|\.)taweet\.com$ (?:^|\.)tbcollege\.org$ (?:^|\.)tbi\.org\.hk$ (?:^|\.)tbicn\.org$ (?:^|\.)tbjyt\.org$ (?:^|\.)tbpic\.info$ (?:^|\.)tbrc\.org$ (?:^|\.)tbs-rainbow\.org$ (?:^|\.)tbsec\.org$ (?:^|\.)tbskkinabalu\.page\.tl$ (?:^|\.)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$ (?:^|\.)tdm\.com\.mo$ (?:^|\.)teachparentstech\.org$ (?:^|\.)teamamericany\.com$ (?:^|\.)tech2\.in\.com$ (?:^|\.)techviz\.net$ (?:^|\.)teck\.in$ (?:^|\.)teco-hk\.org$ (?:^|\.)teco-mo\.org$ (?:^|\.)teddysun\.com$ (?:^|\.)teeniefuck\.net$ (?:^|\.)teensinasia\.com$ (?:^|\.)telecomspace\.com$ (?:^|\.)telegram\.dog$ (?:^|\.)telegram\.me$ (?:^|\.)telegram\.org$ (?:^|\.)telegramdownload\.com$ (?:^|\.)telegraph\.co\.uk$ (?:^|\.)telesco\.pe$ (?:^|\.)tellme\.pw$ (?:^|\.)tenacy\.com$ (?:^|\.)tensorflow\.org$ (?:^|\.)tenzinpalmo\.com$ (?:^|\.)terminus2049\.github\.io$ (?:^|\.)tew\.org$ (?:^|\.)textnow\.me$ (?:^|\.)tfhub\.dev$ (?:^|\.)th\.hao123\.com$ (?:^|\.)thaicn\.com$ (?:^|\.)thb\.gov\.tw$ (?:^|\.)theatrum-belli\.com$ (?:^|\.)thebcomplex\.com$ (?:^|\.)theblemish\.com$ (?:^|\.)thebobs\.com$ (?:^|\.)thebodyshop-usa\.com$ (?:^|\.)thecenter\.mit\.edu$ (?:^|\.)thechinabeat\.org$ (?:^|\.)thedalailamamovie\.com$ (?:^|\.)thedw\.us$ (?:^|\.)thefacebook\.com$ (?:^|\.)thefrontier\.hk$ (?:^|\.)thegioitinhoc\.vn$ (?:^|\.)thegly\.com$ (?:^|\.)thehots\.info$ (?:^|\.)thehousenews\.com$ (?:^|\.)thehun\.net$ (?:^|\.)theinitium\.com$ (?:^|\.)thenewslens\.com$ (?:^|\.)thepiratebay\.org$ (?:^|\.)theporndude\.com$ (?:^|\.)theportalwiki\.com$ (?:^|\.)thereallove\.kr$ (?:^|\.)therock\.net\.nz$ (?:^|\.)thespeeder\.com$ (?:^|\.)thestandnews\.com$ (?:^|\.)thetibetcenter\.org$ (?:^|\.)thetibetconnection\.org$ (?:^|\.)thetibetmuseum\.org$ (?:^|\.)thetibetpost\.com$ (?:^|\.)thetinhat\.com$ (?:^|\.)thetrotskymovie\.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-info\.net$ (?:^|\.)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$ (?:^|\.)tibetanfeministcollective\.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$ (?:^|\.)tibetlibre\.free\.fr$ (?:^|\.)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$ (?:^|\.)tiltbrush\.com$ (?:^|\.)timdir\.com$ (?:^|\.)time\.com$ (?:^|\.)times\.hinet\.net$ (?:^|\.)timesofindia\.indiatimes\.com$ (?:^|\.)timsah\.com$ (?:^|\.)tinc-vpn\.org$ (?:^|\.)tineye\.com$ (?:^|\.)tintuc101\.com$ (?:^|\.)tiny\.cc$ (?:^|\.)tinychat\.com$ (?:^|\.)tinypaste\.com$ (?:^|\.)tipo\.gov\.tw$ (?:^|\.)tistory\.com$ (?:^|\.)tkcs-collins\.com$ (?:^|\.)tl\.gd$ (?:^|\.)tma\.co\.jp$ (?:^|\.)tmagazine\.com$ (?:^|\.)tmdfish\.com$ (?:^|\.)tmi\.me$ (?:^|\.)tmpp\.org$ (?:^|\.)tn1\.shemalez\.com$ (?:^|\.)tn2\.shemalez\.com$ (?:^|\.)tn3\.shemalez\.com$ (?:^|\.)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$ (?:^|\.)tongil\.or\.kr$ (?:^|\.)tono-oka\.jp$ (?:^|\.)tonyyan\.net$ (?:^|\.)toodoc\.com$ (?:^|\.)toonel\.net$ (?:^|\.)top\.tv$ (?:^|\.)top10vpn\.com$ (?:^|\.)top81\.ws$ (?:^|\.)topbtc\.com$ (?:^|\.)topic\.youthwant\.com\.tw$ (?:^|\.)topnews\.in$ (?:^|\.)toppornsites\.com$ (?:^|\.)topshareware\.com$ (?:^|\.)topsy\.com$ (?:^|\.)toptip\.ca$ (?:^|\.)tor\.blingblingsquad\.net$ (?:^|\.)tor\.cn\.uptodown\.com$ (?:^|\.)tor\.updatestar\.com$ (?:^|\.)tora\.to$ (?:^|\.)torcn\.com$ (?:^|\.)torguard\.net$ (?:^|\.)torproject\.org$ (?:^|\.)torrentprivacy\.com$ (?:^|\.)torrentproject\.se$ (?:^|\.)torrenty\.org$ (?:^|\.)torrentz\.eu$ (?:^|\.)torvpn\.com$ (?:^|\.)tosh\.comedycentral\.com$ (?:^|\.)totalvpn\.com$ (?:^|\.)toutiaoabc\.com$ (?:^|\.)toutyrater\.github\.io$ (?:^|\.)towngain\.com$ (?:^|\.)toypark\.in$ (?:^|\.)toythieves\.com$ (?:^|\.)toytractorshow\.com$ (?:^|\.)tparents\.org$ (?:^|\.)tpi\.org\.tw$ (?:^|\.)tracfone\.com$ (?:^|\.)traffichaus\.com$ (?:^|\.)trans\.wenweipo\.com$ (?:^|\.)transparency\.org$ (?:^|\.)treemall\.com\.tw$ (?:^|\.)trendsmap\.com$ (?:^|\.)trialofccp\.org$ (?:^|\.)trickip\.net$ (?:^|\.)trickip\.org$ (?:^|\.)trimondi\.de$ (?:^|\.)trouw\.nl$ (?:^|\.)trt\.net\.tr$ (?:^|\.)trtc\.com\.tw$ (?:^|\.)truebuddha-md\.org$ (?:^|\.)trulyergonomic\.com$ (?:^|\.)truth101\.co\.tv$ (?:^|\.)truthontour\.org$ (?:^|\.)truveo\.com$ (?:^|\.)tryheart\.jp$ (?:^|\.)tsctv\.net$ (?:^|\.)tsdr\.uspto\.gov$ (?:^|\.)tsemtulku\.com$ (?:^|\.)tsquare\.tv$ (?:^|\.)tsu\.org\.tw$ (?:^|\.)tsunagarumon\.com$ (?:^|\.)tt1069\.com$ (?:^|\.)tttan\.com$ (?:^|\.)ttvnw\.net$ (?:^|\.)tu8964\.com$ (?:^|\.)tubaholic\.com$ (?:^|\.)tube\.com$ (?:^|\.)tube8\.com$ (?:^|\.)tube911\.com$ (?:^|\.)tubecup\.com$ (?:^|\.)tubegals\.com$ (?:^|\.)tubeislam\.com$ (?:^|\.)tubepornclassic\.com$ (?:^|\.)tubestack\.com$ (?:^|\.)tubewolf\.com$ (?:^|\.)tui\.orzdream\.com$ (?:^|\.)tuibeitu\.net$ (?:^|\.)tuidang\.net$ (?:^|\.)tuidang\.org$ (?:^|\.)tuidang\.se$ (?:^|\.)tuitwit\.com$ (?:^|\.)tumblr\.com$ (?:^|\.)tumutanzi\.com$ (?:^|\.)tumview\.com$ (?:^|\.)tunein\.com$ (?:^|\.)tunnelbear\.com$ (?:^|\.)tunnelr\.com$ (?:^|\.)tuo8\.blue$ (?:^|\.)tuo8\.cc$ (?:^|\.)tuo8\.club$ (?:^|\.)tuo8\.fit$ (?:^|\.)tuo8\.hk$ (?:^|\.)tuo8\.in$ (?:^|\.)tuo8\.ninja$ (?:^|\.)tuo8\.org$ (?:^|\.)tuo8\.pw$ (?:^|\.)tuo8\.red$ (?:^|\.)tuo8\.space$ (?:^|\.)turansam\.org$ (?:^|\.)turbobit\.net$ (?:^|\.)turbohide\.com$ (?:^|\.)turbotwitter\.com$ (?:^|\.)turntable\.fm$ (?:^|\.)tushycash\.com$ (?:^|\.)tuvpn\.com$ (?:^|\.)tuzaijidi\.com$ (?:^|\.)tv\.com$ (?:^|\.)tvants\.com$ (?:^|\.)tvboxnow\.com$ (?:^|\.)tvider\.com$ (?:^|\.)tvmost\.com\.hk$ (?:^|\.)tvplayvideos\.com$ (?:^|\.)tvunetworks\.com$ (?:^|\.)tw-blog\.com$ (?:^|\.)tw-npo\.org$ (?:^|\.)tw\.answers\.yahoo\.com$ (?:^|\.)tw\.bid\.yahoo\.com$ (?:^|\.)tw\.gigacircle\.com$ (?:^|\.)tw\.hao123\.com$ (?:^|\.)tw\.iqiyi\.com$ (?:^|\.)tw\.jiepang\.com$ (?:^|\.)tw\.knowledge\.yahoo\.com$ (?:^|\.)tw\.mall\.yahoo\.com$ (?:^|\.)tw\.mobi\.yahoo\.com$ (?:^|\.)tw\.money\.yahoo\.com$ (?:^|\.)tw\.myblog\.yahoo\.com$ (?:^|\.)tw\.news\.yahoo\.com$ (?:^|\.)tw\.streetvoice\.com$ (?:^|\.)tw\.tomonews\.net$ (?:^|\.)tw\.voa\.mobi$ (?:^|\.)tw\.yahoo\.com$ (?:^|\.)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$ (?:^|\.)tweets\.seraph\.me$ (?:^|\.)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$ (?:^|\.)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$ (?:^|\.)twskype\.com$ (?:^|\.)twstar\.net$ (?:^|\.)twt\.tl$ (?:^|\.)twtkr\.com$ (?:^|\.)twtr2src\.ogaoga\.org$ (?:^|\.)twtrland\.com$ (?:^|\.)twttr\.com$ (?:^|\.)twurl\.nl$ (?:^|\.)twyac\.org$ (?:^|\.)txxx\.com$ (?:^|\.)tycool\.com$ (?:^|\.)typepad\.com$ (?:^|\.)u9un\.com$ (?:^|\.)ub0\.cc$ (?:^|\.)ubddns\.org$ (?:^|\.)uberproxy\.net$ (?:^|\.)uc-japan\.org$ (?:^|\.)ucdc1998\.org$ (?:^|\.)uderzo\.it$ (?:^|\.)udn\.com$ (?:^|\.)udn\.com\.tw$ (?:^|\.)udnbkk\.com$ (?:^|\.)uforadio\.com\.tw$ (?:^|\.)ufreevpn\.com$ (?:^|\.)ugo\.com$ (?:^|\.)uhdwallpapers\.org$ (?:^|\.)uhrp\.org$ (?:^|\.)uighur\.narod\.ru$ (?:^|\.)uighur\.nl$ (?:^|\.)uighurbiz\.net$ (?:^|\.)ukcdp\.co\.uk$ (?:^|\.)ukliferadio\.co\.uk$ (?:^|\.)uku\.im$ (?:^|\.)ulike\.net$ (?:^|\.)ulop\.net$ (?:^|\.)ultrareach$ (?:^|\.)ultrasurf$ (?:^|\.)ultravpn\.fr$ (?:^|\.)ultraxs\.com$ (?:^|\.)umich\.edu$ (?:^|\.)unblock-us\.com$ (?:^|\.)unblock\.cn\.com$ (?:^|\.)unblockdmm\.com$ (?:^|\.)unblocker\.yt$ (?:^|\.)unblocksit\.es$ (?:^|\.)uncyclomedia\.org$ (?:^|\.)uncyclopedia\.hk$ (?:^|\.)uncyclopedia\.tw$ (?:^|\.)underwoodammo\.com$ (?:^|\.)unholyknight\.com$ (?:^|\.)uni\.cc$ (?:^|\.)unification\.net$ (?:^|\.)unification\.org\.tw$ (?:^|\.)unirule\.cloud$ (?:^|\.)unitedsocialpress\.com$ (?:^|\.)unix100\.com$ (?:^|\.)unknownspace\.org$ (?:^|\.)unodedos\.com$ (?:^|\.)unpo\.org$ (?:^|\.)unseen\.is$ (?:^|\.)untraceable\.us$ (?:^|\.)uocn\.org$ (?:^|\.)upcoming\.yahoo\.com$ (?:^|\.)updates\.tdesktop\.com$ (?:^|\.)upholdjustice\.org$ (?:^|\.)upload4u\.info$ (?:^|\.)uploaded\.net$ (?:^|\.)uploaded\.to$ (?:^|\.)uploadstation\.com$ (?:^|\.)upmedia\.mg$ (?:^|\.)upornia\.com$ (?:^|\.)uproxy\.org$ (?:^|\.)upwill\.org$ (?:^|\.)ur7s\.com$ (?:^|\.)uraban\.me$ (?:^|\.)urbansurvival\.com$ (?:^|\.)urchin\.com$ (?:^|\.)urlborg\.com$ (?:^|\.)urlparser\.com$ (?:^|\.)us\.to$ (?:^|\.)usacn\.com$ (?:^|\.)usaip\.eu$ (?:^|\.)userapi\.nytlog\.com$ (?:^|\.)users\.skynet\.be$ (?:^|\.)usfk\.mil$ (?:^|\.)ushuarencity\.echainhost\.com$ (?:^|\.)usinfo\.state\.gov$ (?:^|\.)usma\.edu$ (?:^|\.)usmc\.mil$ (?:^|\.)usmgtcg\.ning\.com$ (?:^|\.)usno\.navy\.mil$ (?:^|\.)usocctn\.com$ (?:^|\.)ustream\.tv$ (?:^|\.)usunitednews\.com$ (?:^|\.)usus\.cc$ (?:^|\.)utopianpal\.com$ (?:^|\.)uu-gg\.com$ (?:^|\.)uukanshu\.com$ (?:^|\.)uvwxyz\.xyz$ (?:^|\.)uwants\.com$ (?:^|\.)uwants\.net$ (?:^|\.)uyghur-j\.org$ (?:^|\.)uyghur\.co\.uk$ (?:^|\.)uyghuramerican\.org$ (?:^|\.)uyghurcanadiansociety\.org$ (?:^|\.)uyghurcongress\.org$ (?:^|\.)uyghurensemble\.co\.uk$ (?:^|\.)uyghurpen\.org$ (?:^|\.)uyghurpress\.com$ (?:^|\.)uyghurstudies\.org$ (?:^|\.)uygur\.fc2web\.com$ (?:^|\.)uygur\.org$ (?:^|\.)uymaarip\.com$ (?:^|\.)v2ex\.com$ (?:^|\.)v2ray\.com$ (?:^|\.)van001\.com$ (?:^|\.)van698\.com$ (?:^|\.)vanemu\.cn$ (?:^|\.)vanilla-jp\.com$ (?:^|\.)vanpeople\.com$ (?:^|\.)vansky\.com$ (?:^|\.)vaticannews\.va$ (?:^|\.)vatn\.org$ (?:^|\.)vcf-online\.org$ (?:^|\.)vcfbuilder\.org$ (?:^|\.)vds\.rightster\.com$ (?:^|\.)vegas\.williamhill\.com$ (?:^|\.)vegasred\.com$ (?:^|\.)velkaepocha\.sk$ (?:^|\.)venbbs\.com$ (?:^|\.)venchina\.com$ (?:^|\.)venetianmacao\.com$ (?:^|\.)ventureswell\.com$ (?:^|\.)veoh\.com$ (?:^|\.)vermonttibet\.org$ (?:^|\.)versavpn\.com$ (?:^|\.)verybs\.com$ (?:^|\.)vevo\.com$ (?:^|\.)vft\.com\.tw$ (?:^|\.)viber\.com$ (?:^|\.)vica\.info$ (?:^|\.)victimsofcommunism\.org$ (?:^|\.)vid\.me$ (?:^|\.)vidble\.com$ (?:^|\.)video\.aol\.ca$ (?:^|\.)video\.aol\.co\.uk$ (?:^|\.)video\.aol\.com$ (?:^|\.)video\.ap\.org$ (?:^|\.)video\.fdbox\.com$ (?:^|\.)video\.foxbusiness\.com$ (?:^|\.)video\.pbs\.org$ (?:^|\.)video\.yahoo\.com$ (?:^|\.)videobam\.com$ (?:^|\.)videodetective\.com$ (?:^|\.)videomega\.tv$ (?:^|\.)videomo\.com$ (?:^|\.)videopediaworld\.com$ (?:^|\.)videopress\.com$ (?:^|\.)vidinfo\.org$ (?:^|\.)vietdaikynguyen\.com$ (?:^|\.)vijayatemple\.org$ (?:^|\.)vimeo\.com$ (?:^|\.)vimperator\.org$ (?:^|\.)vincnd\.com$ (?:^|\.)vine\.co$ (?:^|\.)vinniev\.com$ (?:^|\.)vip-enterprise\.com$ (?:^|\.)virtualrealporn\.com$ (?:^|\.)visibletweets\.com$ (?:^|\.)vital247\.org$ (?:^|\.)viu\.com$ (?:^|\.)viu\.tv$ (?:^|\.)vivahentai4u\.net$ (?:^|\.)vivatube\.com$ (?:^|\.)vivthomas\.com$ (?:^|\.)vizvaz\.com$ (?:^|\.)vjav\.com$ (?:^|\.)vjmedia\.com\.hk$ (?:^|\.)vllcs\.org$ (?:^|\.)vlog\.xuite\.net$ (?:^|\.)vmixcore\.com$ (?:^|\.)vmpsoft\.com$ (?:^|\.)vn\.hao123\.com$ (?:^|\.)vnet\.link$ (?:^|\.)voa-11\.akacast\.akamaistream\.net$ (?:^|\.)voacantonese\.com$ (?:^|\.)voachinese\.com$ (?:^|\.)voachineseblog\.com$ (?:^|\.)voagd\.com$ (?:^|\.)voanews\.com$ (?:^|\.)voatibetan\.com$ (?:^|\.)voatibetanenglish\.com$ (?:^|\.)vocativ\.com$ (?:^|\.)vocn\.tv$ (?:^|\.)vod-abematv\.akamaized\.net$ (?:^|\.)vod\.wwe\.com$ (?:^|\.)vot\.org$ (?:^|\.)vovo2000\.com$ (?:^|\.)voxer\.com$ (?:^|\.)voy\.com$ (?:^|\.)vpn\.ac$ (?:^|\.)vpn\.cjb\.net$ (?:^|\.)vpn\.cmu\.edu$ (?:^|\.)vpn\.sv\.cmu\.edu$ (?:^|\.)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$ (?:^|\.)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$ (?:^|\.)vtunnel\.com$ (?:^|\.)vuku\.cc$ (?:^|\.)vultryhw\.com$ (?:^|\.)w\.idaiwan\.com$ (?:^|\.)w3schools\.com$ (?:^|\.)waffle1999\.com$ (?:^|\.)wahas\.com$ (?:^|\.)waigaobu\.com$ (?:^|\.)waikeung\.org$ (?:^|\.)wailaike\.net$ (?:^|\.)waiwaier\.com$ (?:^|\.)wallmama\.com$ (?:^|\.)wallornot\.org$ (?:^|\.)wallpapercasa\.com$ (?:^|\.)wallproxy\.com$ (?:^|\.)waltermartin\.com$ (?:^|\.)waltermartin\.org$ (?:^|\.)wanderinghorse\.net$ (?:^|\.)wangafu\.net$ (?:^|\.)wangjinbo\.org$ (?:^|\.)wanglixiong\.com$ (?:^|\.)wango\.org$ (?:^|\.)wangruoshui\.net$ (?:^|\.)want-daily\.com$ (?:^|\.)wanz-factory\.com$ (?:^|\.)wapedia\.mobi$ (?:^|\.)warbler\.iconfactory\.net$ (?:^|\.)waselpro\.com$ (?:^|\.)washeng\.net$ (?:^|\.)watch8x\.com$ (?:^|\.)watchinese\.com$ (?:^|\.)watchmygf\.net$ (?:^|\.)wattpad\.com$ (?:^|\.)wav\.tv$ (?:^|\.)waveprotocol\.org$ (?:^|\.)waymo\.com$ (?:^|\.)wda\.gov\.tw$ (?:^|\.)wdf5\.com$ (?:^|\.)wearehairy\.com$ (?:^|\.)wearn\.com$ (?:^|\.)web\.dev$ (?:^|\.)web2project\.net$ (?:^|\.)webbang\.net$ (?:^|\.)webevader\.org$ (?:^|\.)webfreer\.com$ (?:^|\.)webjb\.org$ (?:^|\.)weblagu\.com$ (?:^|\.)webmproject\.org$ (?:^|\.)webrtc\.org$ (?:^|\.)webrush\.net$ (?:^|\.)webs-tv\.net$ (?:^|\.)website\.informer\.com$ (?:^|\.)websitepulse\.com$ (?:^|\.)webwarper\.net$ (?:^|\.)webworkerdaily\.com$ (?:^|\.)weekmag\.info$ (?:^|\.)wefightcensorship\.org$ (?:^|\.)wefong\.com$ (?:^|\.)wego\.here\.com$ (?:^|\.)weiboleak\.com$ (?:^|\.)weiboscope\.jmsc\.hku\.hk$ (?:^|\.)weihuo\.org$ (?:^|\.)weijingsheng\.org$ (?:^|\.)weiming\.info$ (?:^|\.)weiquanwang\.org$ (?:^|\.)weisuo\.ws$ (?:^|\.)welovecock\.com$ (?:^|\.)wemigrate\.org$ (?:^|\.)wengewang\.com$ (?:^|\.)wengewang\.org$ (?:^|\.)wenhui\.ch$ (?:^|\.)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$ (?:^|\.)whitebear\.freebearblog\.org$ (?:^|\.)whodns\.xyz$ (?:^|\.)whoer\.net$ (?:^|\.)whotalking\.com$ (?:^|\.)whylover\.com$ (?:^|\.)whyx\.org$ (?:^|\.)widevine\.com$ (?:^|\.)wikaba\.com$ (?:^|\.)wiki\.cnitter\.com$ (?:^|\.)wiki\.esu\.im$ (?:^|\.)wiki\.gamerp\.jp$ (?:^|\.)wiki\.jqueryui\.com$ (?:^|\.)wiki\.keso\.cn$ (?:^|\.)wiki\.moegirl\.org$ (?:^|\.)wiki\.oauth\.net$ (?:^|\.)wiki\.phonegap\.com$ (?:^|\.)wikileaks-forum\.com$ (?:^|\.)wikileaks\.ch$ (?:^|\.)wikileaks\.com$ (?:^|\.)wikileaks\.de$ (?:^|\.)wikileaks\.eu$ (?:^|\.)wikileaks\.lu$ (?:^|\.)wikileaks\.org$ (?:^|\.)wikileaks\.pl$ (?:^|\.)wikilivres\.info$ (?:^|\.)wikimapia\.org$ (?:^|\.)wikipedia\.org$ (?:^|\.)wikiwiki\.jp$ (?:^|\.)wildammo\.com$ (?:^|\.)williamhill\.com$ (?:^|\.)willw\.net$ (?:^|\.)windowsphoneme\.com$ (?:^|\.)windscribe\.com$ (?:^|\.)wingamestore\.com$ (?:^|\.)wingy\.site$ (?:^|\.)winning11\.com$ (?:^|\.)winwhispers\.info$ (?:^|\.)wire\.com$ (?:^|\.)wiredbytes\.com$ (?:^|\.)wiredpen\.com$ (?:^|\.)wisdompubs\.org$ (?:^|\.)wisevid\.com$ (?:^|\.)withgoogle\.com$ (?:^|\.)withyoutube\.com$ (?:^|\.)witnessleeteaching\.com$ (?:^|\.)witopia\.net$ (?:^|\.)wizcrafts\.net$ (?:^|\.)wjbk\.org$ (?:^|\.)wlcnew\.jigsy\.com$ (?:^|\.)wlx\.sowiki\.net$ (?:^|\.)wn\.com$ (?:^|\.)wnacg\.com$ (?:^|\.)wnacg\.org$ (?:^|\.)wo\.tc$ (?:^|\.)wo3ttt\.wordpress\.com$ (?:^|\.)woeser\.com$ (?:^|\.)woesermiddle-way\.net$ (?:^|\.)wokar\.org$ (?:^|\.)wolfax\.com$ (?:^|\.)woolyss\.com$ (?:^|\.)woopie\.jp$ (?:^|\.)woopie\.tv$ (?:^|\.)wordpress\.com$ (?:^|\.)workatruna\.com$ (?:^|\.)workerdemo\.org\.hk$ (?:^|\.)workerempowerment\.org$ (?:^|\.)workersthebig\.net$ (?:^|\.)worldcat\.org$ (?:^|\.)worldjournal\.com$ (?:^|\.)worldvpn\.net$ (?:^|\.)wow-life\.net$ (?:^|\.)wow\.com$ (?:^|\.)wowgirls\.com$ (?:^|\.)wowlegacy\.ml$ (?:^|\.)wowporn\.com$ (?:^|\.)wowrk\.com$ (?:^|\.)woxinghuiguo\.com$ (?:^|\.)woyaolian\.org$ (?:^|\.)wozy\.in$ (?:^|\.)wp\.com$ (?:^|\.)wpoforum\.com$ (?:^|\.)wqyd\.org$ (?:^|\.)wrchina\.org$ (?:^|\.)wretch\.cc$ (?:^|\.)writer\.zoho\.com$ (?:^|\.)wsgzao\.github\.io$ (?:^|\.)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$ (?:^|\.)wwitv\.com$ (?:^|\.)www\.ajsands\.com$ (?:^|\.)www\.americorps\.gov$ (?:^|\.)www\.antd\.org$ (?:^|\.)www\.aolnews\.com$ (?:^|\.)www\.businessinsider\.com\.au$ (?:^|\.)www\.citizenlab\.org$ (?:^|\.)www\.cmoinc\.org$ (?:^|\.)www\.cool18\.com$ (?:^|\.)www\.dmm\.com$ (?:^|\.)www\.dwheeler\.com$ (?:^|\.)www\.eastturkistan\.net$ (?:^|\.)www\.gmiddle\.com$ (?:^|\.)www\.gmiddle\.net$ (?:^|\.)www\.hustlercash\.com$ (?:^|\.)www\.idlcoyote\.com$ (?:^|\.)www\.imdb\.com$ (?:^|\.)www\.kindleren\.com$ (?:^|\.)www\.klip\.me$ (?:^|\.)www\.lamenhu\.com$ (?:^|\.)www\.lib\.virginia\.edu$ (?:^|\.)www\.linksalpha\.com$ (?:^|\.)www\.m-sport\.co\.uk$ (?:^|\.)www\.metro\.taipei$ (?:^|\.)www\.monlamit\.org$ (?:^|\.)www\.moztw\.org$ (?:^|\.)www\.nbc\.com$ (?:^|\.)www\.orchidbbs\.com$ (?:^|\.)www\.owind\.com$ (?:^|\.)www\.oxid\.it$ (?:^|\.)www\.powerpointninja\.com$ (?:^|\.)www\.s4miniarchive\.com$ (?:^|\.)www\.sciencemag\.org$ (?:^|\.)www\.shadowsocks\.com$ (?:^|\.)www\.shwchurch\.org$ (?:^|\.)www\.skype\.com$ (?:^|\.)www\.tablesgenerator\.com$ (?:^|\.)www\.taiwanonline\.cc$ (?:^|\.)www\.taup\.org\.tw$ (?:^|\.)www\.thechinastory\.org$ (?:^|\.)www\.wan-press\.org$ (?:^|\.)www\.wangruowang\.org$ (?:^|\.)www\.websnapr\.com$ (?:^|\.)www\.zensur\.freerk\.com$ (?:^|\.)www1\.american\.edu$ (?:^|\.)www1\.biz$ (?:^|\.)www2\.ohchr\.org$ (?:^|\.)www2\.rocketbbs\.com$ (?:^|\.)wwwhost\.biz$ (?:^|\.)wzyboy\.im$ (?:^|\.)x-art\.com$ (?:^|\.)x-berry\.com$ (?:^|\.)x-wall\.org$ (?:^|\.)x\.company$ (?:^|\.)x1949x\.com$ (?:^|\.)x24hr\.com$ (?:^|\.)x365x\.com$ (?:^|\.)xa\.yimg\.com$ (?:^|\.)xanga\.com$ (?:^|\.)xbabe\.com$ (?:^|\.)xbookcn\.com$ (?:^|\.)xbtce\.com$ (?:^|\.)xcafe\.in$ (?:^|\.)xcity\.jp$ (?:^|\.)xcritic\.com$ (?:^|\.)xerotica\.com$ (?:^|\.)xfinity\.com$ (?:^|\.)xfm\.pp\.ru$ (?:^|\.)xgmyd\.com$ (?:^|\.)xhamster\.com$ (?:^|\.)xianba\.net$ (?:^|\.)xianchawang\.net$ (?:^|\.)xianjian\.tw$ (?:^|\.)xianqiao\.net$ (?:^|\.)xiaobaiwu\.com$ (?:^|\.)xiaochuncnjp\.com$ (?:^|\.)xiaod\.in$ (?:^|\.)xiaohexie\.com$ (?:^|\.)xiaolan\.me$ (?:^|\.)xiaoma\.org$ (?:^|\.)xiezhua\.com$ (?:^|\.)xihua\.es$ (?:^|\.)xijie\.wordpress\.com$ (?:^|\.)xing\.com$ (?:^|\.)xinhuanet\.org$ (?:^|\.)xinmiao\.com\.hk$ (?:^|\.)xinqimeng\.over-blog\.com$ (?:^|\.)xinsheng\.net$ (?:^|\.)xinshijue\.com$ (?:^|\.)xinyubbs\.net$ (?:^|\.)xiongpian\.com$ (?:^|\.)xiuren\.org$ (?:^|\.)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--czq75pvv1aj5c\.org$ (?:^|\.)xn--i2ru8q2qg\.com$ (?:^|\.)xn--ngstr-lra8j\.com$ (?:^|\.)xn--oiq\.cc$ (?:^|\.)xn--p8j9a0d9c9a\.xn--q9jyb4c$ (?:^|\.)xnxx\.com$ (?:^|\.)xpdo\.net$ (?:^|\.)xpud\.org$ (?:^|\.)xrentdvd\.com$ (?:^|\.)xskywalker\.com$ (?:^|\.)xskywalker\.net$ (?:^|\.)xtube\.com$ (?:^|\.)xuchao\.net$ (?:^|\.)xuchao\.org$ (?:^|\.)xuehua\.us$ (?:^|\.)xuzhiyong\.net$ (?:^|\.)xvideo\.cc$ (?:^|\.)xvideos\.com$ (?:^|\.)xvideos\.es$ (?:^|\.)xxbbx\.com$ (?:^|\.)xxlmovies\.com$ (?:^|\.)xxuz\.com$ (?:^|\.)xxx\.com$ (?:^|\.)xxx\.xxx$ (?:^|\.)xxxfuckmom\.com$ (?:^|\.)xxxx\.com\.au$ (?:^|\.)xxxy\.biz$ (?:^|\.)xxxy\.info$ (?:^|\.)xxxymovies\.com$ (?:^|\.)xys\.dxiong\.com$ (?:^|\.)xys\.org$ (?:^|\.)xysblogs\.org$ (?:^|\.)xyy69\.com$ (?:^|\.)xyy69\.info$ (?:^|\.)yahoo\.com\.hk$ (?:^|\.)yakbutterblues\.com$ (?:^|\.)yam\.com$ (?:^|\.)yam\.org\.tw$ (?:^|\.)yanghengjun\.com$ (?:^|\.)yangjianli\.com$ (?:^|\.)yasni\.co\.uk$ (?:^|\.)yayabay\.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$ (?:^|\.)yilubbs\.com$ (?:^|\.)yingsuoss\.com$ (?:^|\.)yinlei\.org$ (?:^|\.)yipub\.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$ (?:^|\.)youthnetradio\.org$ (?:^|\.)youtu\.be$ (?:^|\.)youtube-nocookie\.com$ (?:^|\.)youtube\.com$ (?:^|\.)youtubecn\.com$ (?:^|\.)youtubeeducation\.com$ (?:^|\.)youtubegaming\.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$ (?:^|\.)yzzk\.com$ (?:^|\.)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$ (?:^|\.)zenmate\.com\.ru$ (?:^|\.)zeronet\.io$ (?:^|\.)zeutch\.com$ (?:^|\.)zfreet\.com$ (?:^|\.)zgsddh\.com$ (?:^|\.)zgzcjj\.net$ (?:^|\.)zh\.bitterwinter\.org$ (?:^|\.)zh\.ecdm\.wikia\.com$ (?:^|\.)zh\.pokerstrategy\.com$ (?:^|\.)zh\.pttpedia\.wikia\.com$ (?:^|\.)zh\.uncyclopedia\.wikia\.com$ (?:^|\.)zh\.wikinews\.org$ (?:^|\.)zh\.wikisource\.org$ (?:^|\.)zhanbin\.net$ (?:^|\.)zhangboli\.net$ (?:^|\.)zhangtianliang\.com$ (?:^|\.)zhanlve\.org$ (?:^|\.)zhao\.1984\.city$ (?:^|\.)zhao\.jinhai\.de$ (?:^|\.)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$ (?:^|\.)ziddu\.com$ (?:^|\.)zillionk\.com$ (?:^|\.)zim\.vn$ (?:^|\.)zinio\.com$ (?:^|\.)ziporn\.com$ (?:^|\.)zippyshare\.com$ (?:^|\.)zkaip\.com$ (?:^|\.)zmw\.cn$ (?:^|\.)zodgame\.us$ (?:^|\.)zomobo\.net$ (?:^|\.)zonaeuropa\.com$ (?:^|\.)zonghexinwen\.com$ (?:^|\.)zonghexinwen\.net$ (?:^|\.)zoogvpn\.com$ (?:^|\.)zootool\.com$ (?:^|\.)zoozle\.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$ (?:^|\.)zyzc9\.com$ (?:^|\.)zzcartoon\.com$ (?:^|\.)zzcloud\.me$ (?:^|\.)zzux\.com$ ================================================ FILE: core/src/main/java/com/github/shadowsocks/BootReceiver.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks import android.content.BroadcastReceiver import android.content.ComponentName import android.content.Context import android.content.Intent import android.content.pm.PackageManager import android.os.Build import com.github.shadowsocks.Core.app import com.github.shadowsocks.preference.DataStore class BootReceiver : BroadcastReceiver() { companion object { private val componentName by lazy { ComponentName(app, BootReceiver::class.java) } var enabled: Boolean get() = app.packageManager.getComponentEnabledSetting(componentName) == PackageManager.COMPONENT_ENABLED_STATE_ENABLED set(value) = app.packageManager.setComponentEnabledSetting(componentName, if (value) PackageManager.COMPONENT_ENABLED_STATE_ENABLED else PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP) } override fun onReceive(context: Context, intent: Intent) { if (!DataStore.persistAcrossReboot) { // sanity check enabled = false return } val doStart = when (intent.action) { Intent.ACTION_BOOT_COMPLETED -> !DataStore.directBootAware Intent.ACTION_LOCKED_BOOT_COMPLETED -> DataStore.directBootAware else -> DataStore.directBootAware || Build.VERSION.SDK_INT >= 24 && Core.user.isUserUnlocked } if (doStart) Core.startService() } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/Core.kt ================================================ /******************************************************************************* * * * Copyright (C) 2018 by Max Lv * * Copyright (C) 2018 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks import android.app.ActivityManager import android.app.Application import android.app.NotificationChannel import android.app.NotificationManager import android.app.PendingIntent import android.app.admin.DevicePolicyManager import android.content.ClipData import android.content.ClipDescription import android.content.ClipboardManager import android.content.Context import android.content.Intent import android.content.pm.PackageInfo import android.content.pm.PackageManager import android.net.ConnectivityManager import android.os.Build import android.os.UserManager import android.util.Log import androidx.annotation.RequiresApi import androidx.annotation.VisibleForTesting import androidx.core.content.ContextCompat import androidx.core.content.getSystemService import androidx.core.os.persistableBundleOf import com.github.shadowsocks.acl.Acl import com.github.shadowsocks.aidl.ShadowsocksConnection import com.github.shadowsocks.core.BuildConfig import com.github.shadowsocks.core.R import com.github.shadowsocks.database.Profile import com.github.shadowsocks.database.ProfileManager import com.github.shadowsocks.preference.DataStore import com.github.shadowsocks.subscription.SubscriptionService import com.github.shadowsocks.utils.Action import com.github.shadowsocks.utils.DeviceStorageApp import com.github.shadowsocks.utils.DirectBoot import com.github.shadowsocks.utils.Key import com.google.firebase.FirebaseApp import com.google.firebase.crashlytics.FirebaseCrashlytics import kotlinx.coroutines.DEBUG_PROPERTY_NAME import kotlinx.coroutines.DEBUG_PROPERTY_VALUE_ON import timber.log.Timber import java.io.File import java.io.IOException import kotlin.reflect.KClass object Core { lateinit var app: Application @VisibleForTesting set lateinit var configureIntent: (Context) -> PendingIntent val activity by lazy { app.getSystemService()!! } val clipboard by lazy { app.getSystemService()!! } val connectivity by lazy { app.getSystemService()!! } val notification by lazy { app.getSystemService()!! } val user by lazy { app.getSystemService()!! } val packageInfo: PackageInfo by lazy { getPackageInfo(app.packageName) } val deviceStorage by lazy { if (Build.VERSION.SDK_INT < 24) app else DeviceStorageApp(app) } val directBootSupported by lazy { Build.VERSION.SDK_INT >= 24 && try { app.getSystemService()?.storageEncryptionStatus == DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE_PER_USER } catch (_: RuntimeException) { false } } val activeProfileIds get() = ProfileManager.getProfile(DataStore.profileId).let { if (it == null) emptyList() else listOfNotNull(it.id, it.udpFallback) } val currentProfile: ProfileManager.ExpandedProfile? get() { if (DataStore.directBootAware) DirectBoot.getDeviceProfile()?.apply { return this } return ProfileManager.expand(ProfileManager.getProfile(DataStore.profileId) ?: return null) } fun switchProfile(id: Long): Profile { val result = ProfileManager.getProfile(id) ?: ProfileManager.createProfile() DataStore.profileId = result.id return result } fun init(app: Application, configureClass: KClass) { this.app = app this.configureIntent = { PendingIntent.getActivity(it, 0, Intent(it, configureClass.java) .setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT), PendingIntent.FLAG_IMMUTABLE) } if (Build.VERSION.SDK_INT >= 24) { // migrate old files deviceStorage.moveDatabaseFrom(app, Key.DB_PUBLIC) val old = Acl.getFile(Acl.CUSTOM_RULES_USER, app) if (old.canRead()) { Acl.getFile(Acl.CUSTOM_RULES_USER).writeText(old.readText()) old.delete() } } // overhead of debug mode is minimal: https://github.com/Kotlin/kotlinx.coroutines/blob/f528898/docs/debugging.md#debug-mode System.setProperty(DEBUG_PROPERTY_NAME, DEBUG_PROPERTY_VALUE_ON) FirebaseApp.initializeApp(deviceStorage) // multiple processes needs manual set-up FirebaseCrashlytics.getInstance().setCustomKey("build", Build.DISPLAY) Timber.plant(object : Timber.DebugTree() { override fun log(priority: Int, tag: String?, message: String, t: Throwable?) { if (t == null) { if (priority != Log.DEBUG || BuildConfig.DEBUG) Log.println(priority, tag, message) FirebaseCrashlytics.getInstance().log("${"XXVDIWEF".getOrElse(priority) { 'X' }}/$tag: $message") } else { if (priority >= Log.WARN || priority == Log.DEBUG) Log.println(priority, tag, message) if (priority >= Log.INFO) FirebaseCrashlytics.getInstance().recordException(t) } } }) // handle data restored/crash if (Build.VERSION.SDK_INT >= 24 && DataStore.directBootAware && user.isUserUnlocked) { DirectBoot.flushTrafficStats() } if (DataStore.publicStore.getLong(Key.assetUpdateTime, -1) != packageInfo.lastUpdateTime) { val assetManager = app.assets try { for (file in assetManager.list("acl")!!) assetManager.open("acl/$file").use { input -> File(deviceStorage.noBackupFilesDir, file).outputStream().use { output -> input.copyTo(output) } } } catch (e: IOException) { Timber.w(e) } DataStore.publicStore.putLong(Key.assetUpdateTime, packageInfo.lastUpdateTime) } updateNotificationChannels() } fun updateNotificationChannels() { if (Build.VERSION.SDK_INT >= 26) @RequiresApi(26) { notification.createNotificationChannels(listOf( NotificationChannel("service-vpn", app.getText(R.string.service_vpn), if (Build.VERSION.SDK_INT >= 28) NotificationManager.IMPORTANCE_MIN else NotificationManager.IMPORTANCE_LOW), // #1355 NotificationChannel("service-proxy", app.getText(R.string.service_proxy), NotificationManager.IMPORTANCE_LOW), NotificationChannel("service-transproxy", app.getText(R.string.service_transproxy), NotificationManager.IMPORTANCE_LOW), SubscriptionService.notificationChannel)) notification.deleteNotificationChannel("service-nat") // NAT mode is gone for good } } fun getPackageInfo(packageName: String) = app.packageManager.getPackageInfo(packageName, if (Build.VERSION.SDK_INT >= 28) PackageManager.GET_SIGNING_CERTIFICATES else @Suppress("DEPRECATION") PackageManager.GET_SIGNATURES)!! fun trySetPrimaryClip(clip: String, isSensitive: Boolean = false) = try { clipboard.setPrimaryClip(ClipData.newPlainText(null, clip).apply { if (isSensitive && Build.VERSION.SDK_INT >= 24) { description.extras = persistableBundleOf(ClipDescription.EXTRA_IS_SENSITIVE to true) } }) true } catch (e: RuntimeException) { Timber.d(e) false } fun startService() = ContextCompat.startForegroundService(app, Intent(app, ShadowsocksConnection.serviceClass)) fun reloadService() = app.sendBroadcast(Intent(Action.RELOAD).setPackage(app.packageName)) fun stopService() = app.sendBroadcast(Intent(Action.CLOSE).setPackage(app.packageName)) } ================================================ FILE: core/src/main/java/com/github/shadowsocks/UrlImportActivity.kt ================================================ /******************************************************************************* * * * Copyright (C) 2019 by Max Lv * * Copyright (C) 2019 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks import android.content.DialogInterface import android.os.Bundle import android.os.Parcelable import android.widget.Toast import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import com.github.shadowsocks.core.R import com.github.shadowsocks.database.Profile import com.github.shadowsocks.database.ProfileManager import com.github.shadowsocks.plugin.fragment.AlertDialogFragment import com.github.shadowsocks.plugin.fragment.Empty import com.github.shadowsocks.plugin.fragment.showAllowingStateLoss import kotlinx.parcelize.Parcelize class UrlImportActivity : AppCompatActivity() { @Parcelize data class ProfilesArg(val profiles: List) : Parcelable class ImportProfilesDialogFragment : AlertDialogFragment() { override fun AlertDialog.Builder.prepare(listener: DialogInterface.OnClickListener) { setTitle(R.string.add_profile_dialog) setPositiveButton(R.string.yes, listener) setNegativeButton(R.string.no, listener) setMessage(arg.profiles.joinToString("\n")) } override fun onClick(dialog: DialogInterface?, which: Int) { if (which == DialogInterface.BUTTON_POSITIVE) arg.profiles.forEach { ProfileManager.createProfile(it) } requireActivity().finish() } override fun onDismiss(dialog: DialogInterface) { super.onDismiss(dialog) requireActivity().finish() } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) when (val dialog = handleShareIntent()) { null -> { Toast.makeText(this, R.string.profile_invalid_input, Toast.LENGTH_SHORT).show() finish() } else -> dialog.showAllowingStateLoss(supportFragmentManager) } } private fun handleShareIntent() = intent.data?.toString()?.let { sharedStr -> val profiles = Profile.findAllUrls(sharedStr, Core.currentProfile?.main).toList() if (profiles.isEmpty()) null else ImportProfilesDialogFragment().apply { arg(ProfilesArg(profiles)) key() } } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/VpnRequestActivity.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks import android.app.KeyguardManager import android.content.BroadcastReceiver import android.content.Intent import android.content.IntentFilter import android.os.Bundle import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.core.content.getSystemService import com.github.shadowsocks.core.R import com.github.shadowsocks.preference.DataStore import com.github.shadowsocks.utils.Key import com.github.shadowsocks.utils.StartService import com.github.shadowsocks.utils.broadcastReceiver class VpnRequestActivity : AppCompatActivity() { private var receiver: BroadcastReceiver? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) if (DataStore.serviceMode != Key.modeVpn) { finish() return } if (getSystemService()!!.isKeyguardLocked) { receiver = broadcastReceiver { _, _ -> connect.launch(null) } registerReceiver(receiver, IntentFilter(Intent.ACTION_USER_PRESENT)) } else connect.launch(null) } private val connect = registerForActivityResult(StartService()) { if (it) Toast.makeText(this, R.string.vpn_permission_denied, Toast.LENGTH_LONG).show() finish() } override fun onDestroy() { super.onDestroy() if (receiver != null) unregisterReceiver(receiver) } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/acl/Acl.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.acl import android.content.Context import androidx.recyclerview.widget.SortedList import com.github.shadowsocks.Core import com.github.shadowsocks.net.Subnet import com.github.shadowsocks.utils.BaseSorter import com.github.shadowsocks.utils.URLSorter import com.github.shadowsocks.utils.asIterable import kotlinx.coroutines.Job import kotlinx.coroutines.ensureActive import kotlinx.coroutines.runBlocking import timber.log.Timber import java.io.File import java.io.IOException import java.io.Reader import java.net.HttpURLConnection import java.net.URL import java.net.URLConnection import kotlin.coroutines.coroutineContext class Acl { companion object { const val ALL = "all" const val BYPASS_LAN = "bypass-lan" const val BYPASS_CHN = "bypass-china" const val BYPASS_LAN_CHN = "bypass-lan-china" const val GFWLIST = "gfwlist" const val CHINALIST = "china-list" const val CUSTOM_RULES = "custom-rules" const val CUSTOM_RULES_USER = "custom-rules-user" private val networkAclParser = "^IMPORT_URL\\s*<(.+)>\\s*$".toRegex() fun getFile(id: String, context: Context = Core.deviceStorage) = File(context.noBackupFilesDir, "$id.acl") var customRules: Acl get() { val acl = Acl() val file = getFile(CUSTOM_RULES_USER) if (file.canRead()) acl.fromReader(file.reader(), true) if (!acl.bypass) { acl.bypass = true acl.subnets.clear() } return acl } set(value) = getFile(CUSTOM_RULES_USER).writeText(value.toString()) fun save(id: String, acl: Acl) = getFile(id).writeText(acl.toString()) suspend fun parse(reader: Reader, bypassHostnames: (String) -> T, proxyHostnames: (String) -> T, urls: ((URL) -> T)? = null, defaultBypass: Boolean = false): Pair> { var bypass = defaultBypass val bypassSubnets = mutableListOf() val proxySubnets = mutableListOf() var hostnames: ((String) -> T)? = if (defaultBypass) proxyHostnames else bypassHostnames var subnets: MutableList? = if (defaultBypass) proxySubnets else bypassSubnets reader.useLines { for (line in it) { coroutineContext[Job]!!.ensureActive() val input = (if (urls == null) line else { val blocks = line.split('#', limit = 2) val url = networkAclParser.matchEntire(blocks.getOrElse(1) { "" })?.groupValues?.getOrNull(1) if (url != null) urls(URL(url)) blocks[0] }).trim() if (input.getOrNull(0) == '[') when (input) { "[outbound_block_list]" -> { hostnames = null subnets = null } "[black_list]", "[bypass_list]" -> { hostnames = bypassHostnames subnets = bypassSubnets } "[white_list]", "[proxy_list]" -> { hostnames = proxyHostnames subnets = proxySubnets } "[reject_all]", "[bypass_all]" -> bypass = true "[accept_all]", "[proxy_all]" -> bypass = false else -> error("Unrecognized block: $input") } else if (subnets != null && input.isNotEmpty()) { val subnet = Subnet.fromString(input) if (subnet == null) hostnames!!(input) else subnets!!.add(subnet) } } } return bypass to if (bypass) proxySubnets else bypassSubnets } } private open class DefaultSorter> : BaseSorter() { override fun compareNonNull(o1: T, o2: T): Int = o1.compareTo(o2) } private object StringSorter : DefaultSorter() private object SubnetSorter : DefaultSorter() val bypassHostnames = SortedList(String::class.java, StringSorter) val proxyHostnames = SortedList(String::class.java, StringSorter) val subnets = SortedList(Subnet::class.java, SubnetSorter) val urls = SortedList(URL::class.java, URLSorter) var bypass = false fun fromAcl(other: Acl): Acl { bypassHostnames.clear() for (item in other.bypassHostnames.asIterable()) bypassHostnames.add(item) proxyHostnames.clear() for (item in other.proxyHostnames.asIterable()) proxyHostnames.add(item) subnets.clear() for (item in other.subnets.asIterable()) subnets.add(item) urls.clear() for (item in other.urls.asIterable()) urls.add(item) bypass = other.bypass return this } fun fromReader(reader: Reader, defaultBypass: Boolean = false): Acl { bypassHostnames.clear() proxyHostnames.clear() subnets.clear() urls.clear() val (bypass, subnets) = runBlocking { parse(reader, bypassHostnames::add, proxyHostnames::add, urls::add, defaultBypass) } this.bypass = bypass for (item in subnets) this.subnets.add(item) return this } fun fromId(id: String): Acl = try { fromReader(getFile(id).bufferedReader()) } catch (_: IOException) { this } suspend fun flatten(depth: Int, connect: suspend (URL) -> URLConnection): Acl { if (depth > 0) for (url in urls.asIterable()) { val child = Acl().fromReader(connect(url).also { (it as? HttpURLConnection)?.instanceFollowRedirects = true }.getInputStream().bufferedReader(), bypass) child.flatten(depth - 1, connect) if (bypass != child.bypass) { Timber.w("Imported network ACL has a conflicting mode set. " + "This will probably not work as intended. URL: $url") child.subnets.clear() // subnets for the different mode are discarded child.bypass = bypass } for (item in child.bypassHostnames.asIterable()) bypassHostnames.add(item) for (item in child.proxyHostnames.asIterable()) proxyHostnames.add(item) for (item in child.subnets.asIterable()) subnets.add(item) } urls.clear() return this } override fun toString(): String { val result = StringBuilder() result.append(if (bypass) "[bypass_all]\n" else "[proxy_all]\n") val bypassList = (if (bypass) { bypassHostnames.asIterable().asSequence() } else { subnets.asIterable().asSequence().map(Subnet::toString) + bypassHostnames.asIterable().asSequence() }).toList() val proxyList = (if (bypass) { subnets.asIterable().asSequence().map(Subnet::toString) + proxyHostnames.asIterable().asSequence() } else { proxyHostnames.asIterable().asSequence() }).toList() if (bypassList.isNotEmpty()) { result.append("[bypass_list]\n") result.append(bypassList.joinToString("\n")) result.append('\n') } if (proxyList.isNotEmpty()) { result.append("[proxy_list]\n") result.append(proxyList.joinToString("\n")) result.append('\n') } result.append(urls.asIterable().joinToString("") { "#IMPORT_URL <$it>\n" }) return result.toString() } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/acl/AclSyncer.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.acl import android.content.Context import android.os.Build import android.util.Log import androidx.work.Configuration import androidx.work.Constraints import androidx.work.CoroutineWorker import androidx.work.Data import androidx.work.ExistingWorkPolicy import androidx.work.NetworkType import androidx.work.OneTimeWorkRequestBuilder import androidx.work.WorkManager import androidx.work.WorkerParameters import com.github.shadowsocks.Core import com.github.shadowsocks.Core.app import com.github.shadowsocks.core.BuildConfig import com.github.shadowsocks.preference.DataStore import com.github.shadowsocks.utils.useCancellable import kotlinx.coroutines.Dispatchers import timber.log.Timber import java.io.IOException import java.net.HttpURLConnection import java.net.URL import java.util.concurrent.TimeUnit class AclSyncer(context: Context, workerParams: WorkerParameters) : CoroutineWorker(context, workerParams) { companion object { private const val KEY_ROUTE = "route" fun schedule(route: String) { if (Build.VERSION.SDK_INT >= 24 && !Core.user.isUserUnlocked) return // work does not support this if (!WorkManager.isInitialized()) WorkManager.initialize(app, Configuration.Builder().apply { setDefaultProcessName(app.packageName + ":bg") setMinimumLoggingLevel(if (BuildConfig.DEBUG) Log.VERBOSE else Log.INFO) setWorkerCoroutineContext(Dispatchers.IO) }.build()) WorkManager.getInstance(app).enqueueUniqueWork( route, ExistingWorkPolicy.REPLACE, OneTimeWorkRequestBuilder().apply { setInputData(Data.Builder().putString(KEY_ROUTE, route).build()) setConstraints(Constraints.Builder().apply { setRequiredNetworkType(NetworkType.UNMETERED) setRequiresCharging(true) }.build()) setInitialDelay(10, TimeUnit.SECONDS) }.build()) } } override suspend fun doWork(): Result = try { val route = inputData.getString(KEY_ROUTE)!! val connection = URL("https://shadowsocks.org/acl/android/v1/$route.acl") .openConnection(DataStore.proxy) as HttpURLConnection val acl = connection.useCancellable { inputStream.bufferedReader().use { it.readText() } } Acl.getFile(route).printWriter().use { it.write(acl) } Result.success() } catch (e: IOException) { Timber.d(e) if (runAttemptCount > 5) Result.failure() else Result.retry() } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/aidl/ShadowsocksConnection.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.aidl import android.content.ComponentName import android.content.Context import android.content.Intent import android.content.ServiceConnection import android.os.IBinder import android.os.RemoteException import com.github.shadowsocks.bg.BaseService import com.github.shadowsocks.bg.ProxyService import com.github.shadowsocks.bg.TransproxyService import com.github.shadowsocks.bg.VpnService import com.github.shadowsocks.preference.DataStore import com.github.shadowsocks.utils.Action import com.github.shadowsocks.utils.Key import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch /** * This object should be compact as it will not get GC-ed. */ class ShadowsocksConnection(private var listenForDeath: Boolean = false) : ServiceConnection, IBinder.DeathRecipient { companion object { val serviceClass get() = when (DataStore.serviceMode) { Key.modeProxy -> ProxyService::class Key.modeVpn -> VpnService::class Key.modeTransproxy -> TransproxyService::class else -> throw UnknownError() }.java } interface Callback { fun stateChanged(state: BaseService.State, profileName: String?, msg: String?) fun trafficUpdated(profileId: Long, stats: TrafficStats) { } fun trafficPersisted(profileId: Long) { } fun onServiceConnected(service: IShadowsocksService) /** * Different from Android framework, this method will be called even when you call `detachService`. */ fun onServiceDisconnected() { } fun onBinderDied() { } } private var connectionActive = false private var callbackRegistered = false private var callback: Callback? = null private val serviceCallback = object : IShadowsocksServiceCallback.Stub() { override fun stateChanged(state: Int, profileName: String?, msg: String?) { val callback = callback ?: return GlobalScope.launch(Dispatchers.Main.immediate) { callback.stateChanged(BaseService.State.entries[state], profileName, msg) } } override fun trafficUpdated(profileId: Long, stats: TrafficStats) { val callback = callback ?: return GlobalScope.launch(Dispatchers.Main.immediate) { callback.trafficUpdated(profileId, stats) } } override fun trafficPersisted(profileId: Long) { val callback = callback ?: return GlobalScope.launch(Dispatchers.Main.immediate) { callback.trafficPersisted(profileId) } } } private var binder: IBinder? = null var bandwidthTimeout = 0L set(value) { try { if (value > 0) service?.startListeningForBandwidth(serviceCallback, value) else service?.stopListeningForBandwidth(serviceCallback) } catch (_: RemoteException) { } field = value } var service: IShadowsocksService? = null override fun onServiceConnected(name: ComponentName?, binder: IBinder) { this.binder = binder val service = IShadowsocksService.Stub.asInterface(binder)!! this.service = service try { if (listenForDeath) binder.linkToDeath(this, 0) check(!callbackRegistered) service.registerCallback(serviceCallback) callbackRegistered = true if (bandwidthTimeout > 0) service.startListeningForBandwidth(serviceCallback, bandwidthTimeout) } catch (_: RemoteException) { } callback!!.onServiceConnected(service) } override fun onServiceDisconnected(name: ComponentName?) { unregisterCallback() callback?.onServiceDisconnected() service = null binder = null } override fun binderDied() { service = null callbackRegistered = false callback?.also { GlobalScope.launch(Dispatchers.Main.immediate) { it.onBinderDied() } } } private fun unregisterCallback() { val service = service if (service != null && callbackRegistered) try { service.unregisterCallback(serviceCallback) } catch (_: RemoteException) { } callbackRegistered = false } fun connect(context: Context, callback: Callback) { if (connectionActive) return connectionActive = true check(this.callback == null) this.callback = callback val intent = Intent(context, serviceClass).setAction(Action.SERVICE) context.bindService(intent, this, Context.BIND_AUTO_CREATE) } fun disconnect(context: Context) { unregisterCallback() if (connectionActive) try { context.unbindService(this) } catch (_: IllegalArgumentException) { } // ignore connectionActive = false if (listenForDeath) try { binder?.unlinkToDeath(this, 0) } catch (_: NoSuchElementException) { } binder = null try { service?.stopListeningForBandwidth(serviceCallback) } catch (_: RemoteException) { } service = null callback = null } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/aidl/TrafficStats.kt ================================================ /******************************************************************************* * * * Copyright (C) 2019 by Max Lv * * Copyright (C) 2019 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.aidl import android.os.Parcelable import kotlinx.parcelize.Parcelize @Parcelize data class TrafficStats( // Bytes per second var txRate: Long = 0L, var rxRate: Long = 0L, // Bytes for the current session var txTotal: Long = 0L, var rxTotal: Long = 0L ) : Parcelable { operator fun plus(other: TrafficStats) = TrafficStats( txRate + other.txRate, rxRate + other.rxRate, txTotal + other.txTotal, rxTotal + other.rxTotal) } ================================================ FILE: core/src/main/java/com/github/shadowsocks/bg/BaseService.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.bg import android.app.Service import android.content.Context import android.content.Intent import android.content.IntentFilter import android.os.Build import android.os.IBinder import android.os.RemoteCallbackList import android.os.RemoteException import androidx.core.content.ContextCompat import androidx.core.os.bundleOf import com.github.shadowsocks.BootReceiver import com.github.shadowsocks.Core import com.github.shadowsocks.Core.app import com.github.shadowsocks.acl.Acl import com.github.shadowsocks.aidl.IShadowsocksService import com.github.shadowsocks.aidl.IShadowsocksServiceCallback import com.github.shadowsocks.aidl.TrafficStats import com.github.shadowsocks.core.R import com.github.shadowsocks.net.DnsResolverCompat import com.github.shadowsocks.preference.DataStore import com.github.shadowsocks.utils.Action import com.github.shadowsocks.utils.broadcastReceiver import com.github.shadowsocks.utils.readableMessage import com.google.firebase.analytics.FirebaseAnalytics import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.Job import kotlinx.coroutines.cancel import kotlinx.coroutines.cancelAndJoin import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import timber.log.Timber import java.io.File import java.io.IOException import java.net.URL /** * This object uses WeakMap to simulate the effects of multi-inheritance. */ object BaseService { enum class State(val canStop: Boolean = false) { /** * Idle state is only used by UI and will never be returned by BaseService. */ Idle, Connecting(true), Connected(true), Stopping, Stopped, } const val CONFIG_FILE = "shadowsocks.conf" const val CONFIG_FILE_UDP = "shadowsocks-udp.conf" interface ExpectedException class ExpectedExceptionWrapper(e: Exception) : Exception(e.localizedMessage, e), ExpectedException class Data internal constructor(private val service: Interface) { var state = State.Stopped var processes: GuardedProcessPool? = null var proxy: ProxyInstance? = null var udpFallback: ProxyInstance? = null var localDns: LocalDnsWorker? = null var notification: ServiceNotification? = null val closeReceiver = broadcastReceiver { _, intent -> when (intent.action) { Intent.ACTION_SHUTDOWN -> service.persistStats() Action.RELOAD -> service.forceLoad() else -> service.stopRunner() } } var closeReceiverRegistered = false val binder = Binder(this) var connectingJob: Job? = null fun changeState(s: State, msg: String? = null) { if (state == s && msg == null) return binder.stateChanged(s, msg) state = s } } class Binder(private var data: Data? = null) : IShadowsocksService.Stub(), CoroutineScope, AutoCloseable { private val callbacks = object : RemoteCallbackList() { override fun onCallbackDied(callback: IShadowsocksServiceCallback?, cookie: Any?) { super.onCallbackDied(callback, cookie) stopListeningForBandwidth(callback ?: return) } } private val bandwidthListeners = mutableMapOf() // the binder is the real identifier override val coroutineContext = Dispatchers.Main.immediate + Job() private var looper: Job? = null override fun getState(): Int = (data?.state ?: State.Idle).ordinal override fun getProfileName(): String = data?.proxy?.profile?.formattedName ?: "Idle" override fun registerCallback(cb: IShadowsocksServiceCallback) { callbacks.register(cb) } private fun broadcast(work: (IShadowsocksServiceCallback) -> Unit) { val count = callbacks.beginBroadcast() try { repeat(count) { try { work(callbacks.getBroadcastItem(it)) } catch (_: RemoteException) { } catch (e: Exception) { Timber.w(e) } } } finally { callbacks.finishBroadcast() } } private suspend fun loop() { while (true) { delay(bandwidthListeners.values.minOrNull() ?: return) val proxies = listOfNotNull(data?.proxy, data?.udpFallback) val stats = proxies .map { Pair(it.profile.id, it.trafficMonitor?.requestUpdate()) } .filter { it.second != null } .map { Triple(it.first, it.second!!.first, it.second!!.second) } if (stats.any { it.third } && data?.state == State.Connected && bandwidthListeners.isNotEmpty()) { val sum = stats.fold(TrafficStats()) { a, b -> a + b.second } broadcast { item -> if (bandwidthListeners.contains(item.asBinder())) { stats.forEach { (id, stats) -> item.trafficUpdated(id, stats) } item.trafficUpdated(0, sum) } } } } } override fun startListeningForBandwidth(cb: IShadowsocksServiceCallback, timeout: Long) { launch { if (bandwidthListeners.isEmpty() and (bandwidthListeners.put(cb.asBinder(), timeout) == null)) { check(looper == null) looper = launch { loop() } } if (data?.state != State.Connected) return@launch var sum = TrafficStats() val data = data val proxy = data?.proxy ?: return@launch proxy.trafficMonitor?.out.also { stats -> cb.trafficUpdated(proxy.profile.id, if (stats == null) sum else { sum += stats stats }) } data.udpFallback?.also { udpFallback -> udpFallback.trafficMonitor?.out.also { stats -> cb.trafficUpdated(udpFallback.profile.id, if (stats == null) TrafficStats() else { sum += stats stats }) } } cb.trafficUpdated(0, sum) } } override fun stopListeningForBandwidth(cb: IShadowsocksServiceCallback) { launch { if (bandwidthListeners.remove(cb.asBinder()) != null && bandwidthListeners.isEmpty()) { looper!!.cancel() looper = null } } } override fun unregisterCallback(cb: IShadowsocksServiceCallback) { stopListeningForBandwidth(cb) // saves an RPC, and safer callbacks.unregister(cb) } fun stateChanged(s: State, msg: String?) = launch { val profileName = profileName broadcast { it.stateChanged(s.ordinal, profileName, msg) } } fun trafficPersisted(ids: List) = launch { if (bandwidthListeners.isNotEmpty() && ids.isNotEmpty()) broadcast { item -> if (bandwidthListeners.contains(item.asBinder())) ids.forEach(item::trafficPersisted) } } override fun close() { callbacks.kill() cancel() data = null } } interface Interface { val data: Data val tag: String fun createNotification(profileName: String): ServiceNotification fun onBind(intent: Intent): IBinder? = if (intent.action == Action.SERVICE) data.binder else null fun forceLoad() { val s = data.state when { s == State.Stopped -> startRunner() s.canStop -> stopRunner(true) else -> Timber.w("Illegal state $s when invoking use") } } val isVpnService get() = false suspend fun startProcesses() { val context = if (Build.VERSION.SDK_INT < 24 || Core.user.isUserUnlocked) app else Core.deviceStorage val configRoot = context.noBackupFilesDir val udpFallback = data.udpFallback data.proxy!!.start(this, File(Core.deviceStorage.noBackupFilesDir, "stat_main"), File(configRoot, CONFIG_FILE), if (udpFallback == null && data.proxy?.plugin == null) "tcp_and_udp" else "tcp_only") if (udpFallback?.plugin != null) throw ExpectedExceptionWrapper(IllegalStateException( "UDP fallback cannot have plugins")) udpFallback?.start(this, File(Core.deviceStorage.noBackupFilesDir, "stat_udp"), File(configRoot, CONFIG_FILE_UDP), "udp_only", false) data.localDns = LocalDnsWorker(this::rawResolver).apply { start() } } fun startRunner() { this as Context if (Build.VERSION.SDK_INT >= 26) startForegroundService(Intent(this, javaClass)) else startService(Intent(this, javaClass)) } fun killProcesses(scope: CoroutineScope) { data.processes?.run { close(scope) data.processes = null } data.localDns?.shutdown(scope) data.localDns = null } fun stopRunner(restart: Boolean = false, msg: String? = null) { if (data.state == State.Stopping) return // channge the state data.changeState(State.Stopping) GlobalScope.launch(Dispatchers.Main.immediate) { FirebaseAnalytics.getInstance(this@Interface as Service).logEvent("stop", bundleOf(FirebaseAnalytics.Param.METHOD to tag)) data.connectingJob?.cancelAndJoin() // ensure stop connecting first this@Interface as Service // we use a coroutineScope here to allow clean-up in parallel coroutineScope { killProcesses(this) // clean up receivers val data = data if (data.closeReceiverRegistered) { unregisterReceiver(data.closeReceiver) data.closeReceiverRegistered = false } data.notification?.destroy() data.notification = null val ids = listOfNotNull(data.proxy, data.udpFallback).map { it.shutdown(this) it.profile.id } data.proxy = null data.udpFallback = null data.binder.trafficPersisted(ids) } // change the state data.changeState(State.Stopped, msg) // stop the service if nothing has bound to it if (restart) startRunner() else { BootReceiver.enabled = false stopSelf() } } } fun persistStats() = listOfNotNull(data.proxy, data.udpFallback).forEach { it.trafficMonitor?.persistStats(it.profile.id) } suspend fun preInit() { } suspend fun rawResolver(query: ByteArray) = DnsResolverCompat.resolveRawOnActiveNetwork(query) suspend fun openConnection(url: URL) = url.openConnection() fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { val data = data if (data.state != State.Stopped) return Service.START_NOT_STICKY val expanded = Core.currentProfile this as Context if (expanded == null) { // gracefully shutdown: https://stackoverflow.com/q/47337857/2245107 data.notification = createNotification("") stopRunner(false, getString(R.string.profile_empty)) return Service.START_NOT_STICKY } val (profile, fallback) = expanded try { data.proxy = ProxyInstance(profile) data.udpFallback = if (fallback == null) null else ProxyInstance(fallback, profile.route) } catch (e: IllegalArgumentException) { data.notification = createNotification("") stopRunner(false, e.message) return Service.START_NOT_STICKY } BootReceiver.enabled = DataStore.persistAcrossReboot if (!data.closeReceiverRegistered) { ContextCompat.registerReceiver(this, data.closeReceiver, IntentFilter().apply { addAction(Action.RELOAD) addAction(Intent.ACTION_SHUTDOWN) addAction(Action.CLOSE) }, ContextCompat.RECEIVER_NOT_EXPORTED) data.closeReceiverRegistered = true } data.notification = createNotification(profile.formattedName) FirebaseAnalytics.getInstance(this).logEvent("start", bundleOf(FirebaseAnalytics.Param.METHOD to tag)) data.changeState(State.Connecting) data.connectingJob = GlobalScope.launch(Dispatchers.Main.immediate) { try { Executable.killAll() // clean up old processes preInit() if (profile.route == Acl.CUSTOM_RULES) try { withContext(Dispatchers.IO) { Acl.customRules.flatten(10, this@Interface::openConnection).also { Acl.save(Acl.CUSTOM_RULES, it) } } } catch (e: IOException) { throw ExpectedExceptionWrapper(e) } data.processes = GuardedProcessPool { Timber.w(it) stopRunner(false, it.readableMessage) } startProcesses() data.proxy!!.scheduleUpdate() data.udpFallback?.scheduleUpdate() data.changeState(State.Connected) } catch (_: CancellationException) { // if the job was cancelled, it is canceller's responsibility to call stopRunner } catch (exc: Throwable) { if (exc is ExpectedException) Timber.d(exc) else Timber.w(exc) stopRunner(false, "${getString(R.string.service_failed)}: ${exc.readableMessage}") } finally { data.connectingJob = null } } return Service.START_NOT_STICKY } } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/bg/Executable.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.bg import android.system.ErrnoException import android.system.Os import android.system.OsConstants import android.text.TextUtils import timber.log.Timber import java.io.File import java.io.IOException object Executable { const val REDSOCKS = "libredsocks.so" const val SS_LOCAL = "libsslocal.so" const val TUN2SOCKS = "libtun2socks.so" private val EXECUTABLES = setOf(SS_LOCAL, REDSOCKS, TUN2SOCKS) fun killAll() { for (process in File("/proc").listFiles { _, name -> TextUtils.isDigitsOnly(name) } ?: return) { val exe = File(try { File(process, "cmdline").inputStream().bufferedReader().readText() } catch (_: IOException) { continue }.split(Character.MIN_VALUE, limit = 2).first()) if (EXECUTABLES.contains(exe.name)) try { Os.kill(process.name.toInt(), OsConstants.SIGKILL) } catch (e: ErrnoException) { if (e.errno != OsConstants.ESRCH) { Timber.w("SIGKILL ${exe.absolutePath} (${process.name}) failed") Timber.w(e) } } } } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/bg/GuardedProcessPool.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.bg import android.os.Build import android.os.SystemClock import android.system.ErrnoException import android.system.Os import android.system.OsConstants import androidx.annotation.MainThread import com.github.shadowsocks.Core import com.github.shadowsocks.utils.Commandline import kotlinx.coroutines.* import kotlinx.coroutines.channels.Channel import timber.log.Timber import java.io.File import java.io.IOException import java.io.InputStream import kotlin.concurrent.thread class GuardedProcessPool(private val onFatal: suspend (IOException) -> Unit) : CoroutineScope { companion object { private val pid by lazy { Class.forName("java.lang.ProcessManager\$ProcessImpl").getDeclaredField("pid").apply { isAccessible = true } } } private inner class Guard(private val cmd: List) { private lateinit var process: Process private fun streamLogger(input: InputStream, logger: (String) -> Unit) = try { input.bufferedReader().forEachLine(logger) } catch (_: IOException) { } // ignore fun start() { process = ProcessBuilder(cmd).directory(Core.deviceStorage.noBackupFilesDir).start() } suspend fun looper(onRestartCallback: (suspend () -> Unit)?) { var running = true val cmdName = File(cmd.first()).nameWithoutExtension val exitChannel = Channel() try { while (true) { thread(name = "stderr-$cmdName") { streamLogger(process.errorStream) { Timber.tag(cmdName).e(it) } } thread(name = "stdout-$cmdName") { streamLogger(process.inputStream) { Timber.tag(cmdName).v(it) } // this thread also acts as a daemon thread for waitFor runBlocking { exitChannel.send(process.waitFor()) } } val startTime = SystemClock.elapsedRealtime() val exitCode = exitChannel.receive() running = false when { SystemClock.elapsedRealtime() - startTime < 1000 -> throw IOException( "$cmdName exits too fast (exit code: $exitCode)") exitCode == 128 + OsConstants.SIGKILL -> Timber.w("$cmdName was killed") else -> Timber.w(IOException("$cmdName unexpectedly exits with code $exitCode")) } Timber.i("restart process: ${Commandline.toString(cmd)} (last exit code: $exitCode)") start() running = true onRestartCallback?.invoke() } } catch (e: IOException) { Timber.w("error occurred. stop guard: ${Commandline.toString(cmd)}") GlobalScope.launch(Dispatchers.Main) { onFatal(e) } } finally { if (running) withContext(NonCancellable) { // clean-up cannot be cancelled if (Build.VERSION.SDK_INT < 24) { try { Os.kill(pid.get(process) as Int, OsConstants.SIGTERM) } catch (e: ErrnoException) { if (e.errno != OsConstants.ESRCH) Timber.w(e) } catch (e: ReflectiveOperationException) { Timber.w(e) } if (withTimeoutOrNull(500) { exitChannel.receive() } != null) return@withContext } process.destroy() // kill the process if (Build.VERSION.SDK_INT >= 26) { if (withTimeoutOrNull(1000) { exitChannel.receive() } != null) return@withContext process.destroyForcibly() // Force to kill the process if it's still alive } exitChannel.receive() } // otherwise process already exited, nothing to be done } } } override val coroutineContext = Dispatchers.Main.immediate + Job() @MainThread fun start(cmd: List, onRestartCallback: (suspend () -> Unit)? = null) { Timber.i("start process: ${Commandline.toString(cmd)}") Guard(cmd).apply { start() // if start fails, IOException will be thrown directly launch { looper(onRestartCallback) } } } @MainThread fun close(scope: CoroutineScope) { cancel() coroutineContext[Job]!!.also { job -> scope.launch { job.join() } } } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/bg/LocalDnsWorker.kt ================================================ package com.github.shadowsocks.bg import android.net.LocalSocket import com.github.shadowsocks.Core import com.github.shadowsocks.net.ConcurrentLocalSocketListener import com.github.shadowsocks.net.DnsResolverCompat import com.github.shadowsocks.utils.readableMessage import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.TimeoutCancellationException import kotlinx.coroutines.launch import org.xbill.DNS.Message import org.xbill.DNS.Rcode import timber.log.Timber import java.io.DataInputStream import java.io.DataOutputStream import java.io.File import java.io.IOException class LocalDnsWorker(private val resolver: suspend (ByteArray) -> ByteArray) : ConcurrentLocalSocketListener( "LocalDnsThread", File(Core.deviceStorage.noBackupFilesDir, "local_dns_path")), CoroutineScope { override fun acceptInternal(socket: LocalSocket) = error("big no no") override fun accept(socket: LocalSocket) { launch { socket.use { val input = DataInputStream(socket.inputStream) val query = try { ByteArray(input.readUnsignedShort()).also { input.read(it) } } catch (e: IOException) { // connection early close possibly due to resolving timeout return@use Timber.d(e) } try { resolver(query) } catch (e: Exception) { when (e) { is TimeoutCancellationException -> Timber.w("Resolving timed out") is CancellationException -> { } // ignore is IOException -> Timber.d(e) is UnsupportedOperationException -> Timber.w(e.message) else -> Timber.w(e) } try { DnsResolverCompat.prepareDnsResponse(Message(query)).apply { header.rcode = Rcode.SERVFAIL }.toWire() } catch (_: IOException) { byteArrayOf() // return empty if cannot parse packet } }?.let { response -> try { val output = DataOutputStream(socket.outputStream) output.writeShort(response.size) output.write(response) } catch (e: IOException) { Timber.d(e.readableMessage) } } } } } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/bg/ProxyInstance.kt ================================================ /******************************************************************************* * * * Copyright (C) 2019 by Max Lv * * Copyright (C) 2019 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.bg import android.content.Context import android.util.Base64 import com.github.shadowsocks.Core.app import com.github.shadowsocks.acl.Acl import com.github.shadowsocks.acl.AclSyncer import com.github.shadowsocks.core.R import com.github.shadowsocks.database.Profile import com.github.shadowsocks.plugin.PluginConfiguration import com.github.shadowsocks.plugin.PluginManager import com.github.shadowsocks.preference.DataStore import kotlinx.coroutines.CoroutineScope import org.json.JSONArray import org.json.JSONObject import java.io.File import java.net.URI import java.net.URISyntaxException /** * This class sets up environment for ss-local. */ class ProxyInstance(val profile: Profile, private val route: String = profile.route) { init { require(profile.host.isNotEmpty() && (profile.method == "none" || profile.password.isNotEmpty())) { app.getString(R.string.proxy_empty) } // check the crypto require(profile.method !in arrayOf("aes-192-gcm", "chacha20", "salsa20")) { "cipher ${profile.method} is deprecated." } // check the key format for aead-2022-cipher if (profile.method in setOf( "2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha20-poly1305", )) { for (pwd in profile.password.split(":")) { require(Base64.decode(pwd, Base64.DEFAULT).size in arrayOf(16, 32)) { "The Base64 Key is invalid." } } } } private var configFile: File? = null var trafficMonitor: TrafficMonitor? = null val plugin by lazy { PluginManager.init(PluginConfiguration(profile.plugin ?: "")) } /** * Sensitive shadowsocks configuration file requires extra protection. It may be stored in encrypted storage or * device storage, depending on which is currently available. */ fun start(service: BaseService.Interface, stat: File, configFile: File, mode: String, dnsRelay: Boolean = true) { // setup traffic monitor path trafficMonitor = TrafficMonitor(stat) // init JSON config this.configFile = configFile val config = profile.toJson() plugin?.let { (path, opts, isV2) -> if (service.isVpnService) { if (isV2) opts["__android_vpn"] = "" else config.put("plugin_args", JSONArray(arrayOf("-V"))) } config.put("plugin", path).put("plugin_opts", opts.toString()) } config.put("dns", "unix://local_dns_path") config.put("mode", mode) config.put("locals", JSONArray().apply { // local SOCKS5 proxy put(JSONObject().apply { put("local_address", DataStore.listenAddress) put("local_port", DataStore.portProxy) put("local_udp_address", DataStore.listenAddress) put("local_udp_port", DataStore.portProxy) put("mode", mode) }) // local DNS proxy if (dnsRelay) try { URI("dns://${profile.remoteDns}") } catch (e: URISyntaxException) { throw BaseService.ExpectedExceptionWrapper(e) }.let { dns -> put(JSONObject().apply { put("local_address", DataStore.listenAddress) put("local_port", DataStore.portLocalDns) put("local_dns_address", "local_dns_path") put("remote_dns_address", dns.host ?: "0.0.0.0") put("remote_dns_port", if (dns.port < 0) 53 else dns.port) put("protocol", "dns") }) } }) configFile.writeText(config.toString()) // build the command line val cmd = arrayListOf( File((service as Context).applicationInfo.nativeLibraryDir, Executable.SS_LOCAL).absolutePath, "--stat-path", stat.absolutePath, "-c", configFile.absolutePath, ) if (service.isVpnService) cmd += "--vpn" if (route != Acl.ALL) { cmd += "--acl" cmd += Acl.getFile(route).absolutePath } service.data.processes!!.start(cmd) } fun scheduleUpdate() { if (route !in arrayOf(Acl.ALL, Acl.CUSTOM_RULES)) AclSyncer.schedule(route) } fun shutdown(scope: CoroutineScope) { trafficMonitor?.apply { thread.shutdown(scope) persistStats(profile.id) // Make sure update total traffic when stopping the runner } trafficMonitor = null configFile?.delete() // remove old config possibly in device storage configFile = null } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/bg/ProxyService.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.bg import android.app.Service import android.content.Intent /** * Shadowsocks service at its minimum. */ class ProxyService : Service(), BaseService.Interface { override val data = BaseService.Data(this) override val tag: String get() = "ShadowsocksProxyService" override fun createNotification(profileName: String): ServiceNotification = ServiceNotification(this, profileName, "service-proxy", true) override fun onBind(intent: Intent) = super.onBind(intent) override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int = super.onStartCommand(intent, flags, startId) override fun onDestroy() { super.onDestroy() data.binder.close() } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/bg/ServiceNotification.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.bg import android.app.PendingIntent import android.app.Service import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter import android.os.Build import android.os.PowerManager import android.text.format.Formatter import androidx.core.app.NotificationCompat import androidx.core.app.ServiceCompat import androidx.core.content.ContextCompat import androidx.core.content.getSystemService import com.github.shadowsocks.Core import com.github.shadowsocks.aidl.IShadowsocksServiceCallback import com.github.shadowsocks.aidl.TrafficStats import com.github.shadowsocks.core.R import com.github.shadowsocks.utils.Action /** * User can customize visibility of notification since Android 8. * The default visibility: * * Android 8.x: always visible due to system limitations * VPN: always invisible because of VPN notification/icon * Other: always visible * * See also: https://github.com/aosp-mirror/platform_frameworks_base/commit/070d142993403cc2c42eca808ff3fafcee220ac4 */ class ServiceNotification(private val service: BaseService.Interface, profileName: String, channel: String, visible: Boolean = false) : BroadcastReceiver() { private val callback: IShadowsocksServiceCallback by lazy { object : IShadowsocksServiceCallback.Stub() { override fun stateChanged(state: Int, profileName: String?, msg: String?) { } // ignore override fun trafficUpdated(profileId: Long, stats: TrafficStats) { if (profileId != 0L) return builder.apply { setContentText((service as Context).getString(R.string.traffic, service.getString(R.string.speed, Formatter.formatFileSize(service, stats.txRate)), service.getString(R.string.speed, Formatter.formatFileSize(service, stats.rxRate)))) setSubText(service.getString(R.string.traffic, Formatter.formatFileSize(service, stats.txTotal), Formatter.formatFileSize(service, stats.rxTotal))) } show() } override fun trafficPersisted(profileId: Long) { } } } private var callbackRegistered = false private val builder = NotificationCompat.Builder(service as Context, channel) .setWhen(0) .setColor(ContextCompat.getColor(service, R.color.material_primary_500)) .setTicker(service.getString(R.string.forward_success)) .setContentTitle(profileName) .setContentIntent(Core.configureIntent(service)) .setSmallIcon(R.drawable.ic_service_active) .setCategory(NotificationCompat.CATEGORY_SERVICE) .setPriority(if (visible) NotificationCompat.PRIORITY_LOW else NotificationCompat.PRIORITY_MIN) init { service as Context val closeAction = NotificationCompat.Action.Builder( R.drawable.ic_navigation_close, service.getText(R.string.stop), PendingIntent.getBroadcast(service, 0, Intent(Action.CLOSE).setPackage(service.packageName), PendingIntent.FLAG_IMMUTABLE)).apply { setAuthenticationRequired(true) setShowsUserInterface(false) }.build() if (Build.VERSION.SDK_INT < 24) builder.addAction(closeAction) else builder.addInvisibleAction(closeAction) updateCallback(service.getSystemService()?.isInteractive != false) service.registerReceiver(this, IntentFilter().apply { addAction(Intent.ACTION_SCREEN_ON) addAction(Intent.ACTION_SCREEN_OFF) }) show() } override fun onReceive(context: Context, intent: Intent) { if (service.data.state == BaseService.State.Connected) updateCallback(intent.action == Intent.ACTION_SCREEN_ON) } private fun updateCallback(screenOn: Boolean) { if (screenOn) { service.data.binder.registerCallback(callback) service.data.binder.startListeningForBandwidth(callback, 1000) callbackRegistered = true } else if (callbackRegistered) { // unregister callback to save battery service.data.binder.unregisterCallback(callback) callbackRegistered = false } } private fun show() = (service as Service).startForeground(1, builder.build()) fun destroy() { (service as Service).unregisterReceiver(this) updateCallback(false) ServiceCompat.stopForeground(service, ServiceCompat.STOP_FOREGROUND_REMOVE) } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/bg/TrafficMonitor.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.bg import android.net.LocalSocket import android.os.SystemClock import com.github.shadowsocks.aidl.TrafficStats import com.github.shadowsocks.database.ProfileManager import com.github.shadowsocks.net.LocalSocketListener import com.github.shadowsocks.preference.DataStore import com.github.shadowsocks.utils.DirectBoot import java.io.File import java.io.IOException import java.nio.ByteBuffer import java.nio.ByteOrder class TrafficMonitor(statFile: File) { val thread = object : LocalSocketListener("TrafficMonitor-" + statFile.name, statFile) { private val buffer = ByteArray(16) private val stat = ByteBuffer.wrap(buffer).order(ByteOrder.LITTLE_ENDIAN) override fun acceptInternal(socket: LocalSocket) { when (val read = socket.inputStream.read(buffer)) { -1 -> return 16 -> { } else -> throw IOException("Unexpected traffic stat length $read") } val tx = stat.getLong(0) val rx = stat.getLong(8) if (current.txTotal != tx) { current.txTotal = tx dirty = true } if (current.rxTotal != rx) { current.rxTotal = rx dirty = true } } }.apply { start() } val current = TrafficStats() var out = TrafficStats() private var timestampLast = 0L private var dirty = false private var persisted: TrafficStats? = null fun requestUpdate(): Pair { val now = SystemClock.elapsedRealtime() val delta = now - timestampLast timestampLast = now var updated = false if (delta != 0L) { if (dirty) { out = current.copy().apply { txRate = (txTotal - out.txTotal) * 1000 / delta rxRate = (rxTotal - out.rxTotal) * 1000 / delta } dirty = false updated = true } else { if (out.txRate != 0L) { out.txRate = 0 updated = true } if (out.rxRate != 0L) { out.rxRate = 0 updated = true } } } return Pair(out, updated) } fun persistStats(id: Long) { val current = current check(persisted == null || persisted == current) { "Data loss occurred" } persisted = current try { // profile may have host, etc. modified and thus a re-fetch is necessary (possible race condition) val profile = ProfileManager.getProfile(id) ?: return profile.tx += current.txTotal profile.rx += current.rxTotal ProfileManager.updateProfile(profile) } catch (e: IOException) { if (!DataStore.directBootAware) throw e // we should only reach here because we're in direct boot val profile = DirectBoot.getDeviceProfile()!!.toList().single { it.id == id } profile.tx += current.txTotal profile.rx += current.rxTotal profile.dirty = true DirectBoot.update(profile) DirectBoot.listenForUnlock() } } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/bg/TransproxyService.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.bg import android.app.Service import android.content.Intent import com.github.shadowsocks.Core import com.github.shadowsocks.preference.DataStore import java.io.File class TransproxyService : Service(), BaseService.Interface { override val data = BaseService.Data(this) override val tag: String get() = "ShadowsocksTransproxyService" override fun createNotification(profileName: String): ServiceNotification = ServiceNotification(this, profileName, "service-transproxy", true) override fun onBind(intent: Intent) = super.onBind(intent) override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int = super.onStartCommand(intent, flags, startId) private fun startRedsocksDaemon() { File(Core.deviceStorage.noBackupFilesDir, "redsocks.conf").writeText("""base { log_debug = off; log_info = off; log = stderr; daemon = off; redirector = iptables; } redsocks { local_ip = ${DataStore.listenAddress}; local_port = ${DataStore.portTransproxy}; ip = 127.0.0.1; port = ${DataStore.portProxy}; type = socks5; } """) data.processes!!.start(listOf( File(applicationInfo.nativeLibraryDir, Executable.REDSOCKS).absolutePath, "-c", "redsocks.conf")) } override suspend fun startProcesses() { startRedsocksDaemon() super.startProcesses() } override fun onDestroy() { super.onDestroy() data.binder.close() } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/bg/VpnService.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.bg import android.annotation.SuppressLint import android.content.Intent import android.content.pm.PackageManager import android.net.LocalSocket import android.net.LocalSocketAddress import android.net.Network import android.os.Build import android.os.ParcelFileDescriptor import android.system.ErrnoException import android.system.Os import android.system.OsConstants import com.github.shadowsocks.Core import com.github.shadowsocks.acl.Acl import com.github.shadowsocks.core.R import com.github.shadowsocks.net.ConcurrentLocalSocketListener import com.github.shadowsocks.net.DefaultNetworkListener import com.github.shadowsocks.net.DnsResolverCompat import com.github.shadowsocks.net.Subnet import com.github.shadowsocks.preference.DataStore import com.github.shadowsocks.utils.int import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.delay import kotlinx.coroutines.launch import timber.log.Timber import java.io.File import java.io.FileDescriptor import java.io.IOException import java.net.URL import android.net.VpnService as BaseVpnService class VpnService : BaseVpnService(), BaseService.Interface { companion object { private const val VPN_MTU = 1500 private const val PRIVATE_VLAN4_CLIENT = "172.19.0.1" private const val PRIVATE_VLAN4_ROUTER = "172.19.0.2" private const val PRIVATE_VLAN6_CLIENT = "fdfe:dcba:9876::1" private const val PRIVATE_VLAN6_ROUTER = "fdfe:dcba:9876::2" private fun FileDescriptor.use(block: (FileDescriptor) -> T) = try { block(this) } finally { try { Os.close(this) } catch (_: ErrnoException) { } } } private inner class ProtectWorker : ConcurrentLocalSocketListener("ShadowsocksVpnThread", File(Core.deviceStorage.noBackupFilesDir, "protect_path")) { override fun acceptInternal(socket: LocalSocket) { if (socket.inputStream.read() == -1) return val success = socket.ancillaryFileDescriptors!!.single()!!.use { fd -> underlyingNetwork.let { network -> if (network != null) try { network.bindSocket(fd) return@let true } catch (e: IOException) { @SuppressLint("NewApi") when ((e.cause as? ErrnoException)?.errno) { OsConstants.EPERM, OsConstants.EACCES, OsConstants.ENONET -> Timber.d(e) else -> Timber.w(e) } return@let false } protect(fd.int) } } try { socket.outputStream.write(if (success) 0 else 1) } catch (_: IOException) { } // ignore connection early close } } inner class NullConnectionException : NullPointerException(), BaseService.ExpectedException { override fun getLocalizedMessage() = getString(R.string.reboot_required) } override val data = BaseService.Data(this) override val tag: String get() = "ShadowsocksVpnService" override fun createNotification(profileName: String): ServiceNotification = ServiceNotification(this, profileName, "service-vpn") private var conn: ParcelFileDescriptor? = null private var worker: ProtectWorker? = null private var active = false private var metered = false @Volatile private var underlyingNetwork: Network? = null set(value) { field = value if (active) setUnderlyingNetworks(underlyingNetworks) } private val underlyingNetworks get() = // clearing underlyingNetworks makes Android 9 consider the network to be metered if (Build.VERSION.SDK_INT == 28 && metered) null else underlyingNetwork?.let { arrayOf(it) } override fun onBind(intent: Intent) = when (intent.action) { SERVICE_INTERFACE -> super.onBind(intent) else -> super.onBind(intent) } override fun onRevoke() = stopRunner() override fun killProcesses(scope: CoroutineScope) { super.killProcesses(scope) active = false scope.launch { DefaultNetworkListener.stop(this) } worker?.shutdown(scope) worker = null conn?.close() conn = null } override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int = super.onStartCommand(intent, flags, startId) override suspend fun preInit() { // double check prepare to workaround bugs in certain OS if (prepare(this) != null) throw NullConnectionException() DefaultNetworkListener.start(this) { underlyingNetwork = it } } override suspend fun rawResolver(query: ByteArray) = // no need to listen for network here as this is only used for forwarding local DNS queries. // retries should be attempted by client. DnsResolverCompat.resolveRaw(underlyingNetwork ?: throw IOException("no network"), query) override suspend fun openConnection(url: URL) = DefaultNetworkListener.get().openConnection(url) override suspend fun startProcesses() { worker = ProtectWorker().apply { start() } super.startProcesses() sendFd(startVpn()) } override val isVpnService get() = true private fun startVpn(): FileDescriptor { val profile = data.proxy!!.profile val builder = Builder() .setConfigureIntent(Core.configureIntent(this)) .setSession(profile.formattedName) .setMtu(VPN_MTU) .addAddress(PRIVATE_VLAN4_CLIENT, 30) .addDnsServer(PRIVATE_VLAN4_ROUTER) if (profile.ipv6) builder.addAddress(PRIVATE_VLAN6_CLIENT, 126) val me = packageName if (profile.proxyApps) { profile.individual.split('\n') .filter { it != me } .forEach { try { if (profile.bypass) builder.addDisallowedApplication(it) else builder.addAllowedApplication(it) } catch (ex: PackageManager.NameNotFoundException) { Timber.w(ex) } } if (profile.bypass) builder.addDisallowedApplication(me) } else { builder.addDisallowedApplication(me) } when (profile.route) { Acl.ALL, Acl.BYPASS_CHN, Acl.CUSTOM_RULES -> { builder.addRoute("0.0.0.0", 0) if (profile.ipv6) builder.addRoute("::", 0) } else -> { resources.getStringArray(R.array.bypass_private_route).forEach { val subnet = Subnet.fromString(it)!! builder.addRoute(subnet.address.hostAddress!!, subnet.prefixSize) } builder.addRoute(PRIVATE_VLAN4_ROUTER, 32) // https://issuetracker.google.com/issues/149636790 if (profile.ipv6) builder.addRoute("2000::", 3) } } metered = profile.metered active = true // possible race condition here? builder.setUnderlyingNetworks(underlyingNetworks) if (Build.VERSION.SDK_INT >= 29) builder.setMetered(metered) val conn = builder.establish() ?: throw NullConnectionException() this.conn = conn val cmd = arrayListOf(File(applicationInfo.nativeLibraryDir, Executable.TUN2SOCKS).absolutePath, "--netif-ipaddr", PRIVATE_VLAN4_ROUTER, "--socks-server-addr", "${DataStore.listenAddress}:${DataStore.portProxy}", "--tunmtu", VPN_MTU.toString(), "--sock-path", "sock_path", "--dnsgw", "127.0.0.1:${DataStore.portLocalDns}", "--loglevel", "warning") if (profile.ipv6) { cmd += "--netif-ip6addr" cmd += PRIVATE_VLAN6_ROUTER } cmd += "--enable-udprelay" data.processes!!.start(cmd, onRestartCallback = { try { sendFd(conn.fileDescriptor) } catch (e: ErrnoException) { stopRunner(false, e.message) } }) return conn.fileDescriptor } private suspend fun sendFd(fd: FileDescriptor) { var tries = 0 val path = File(Core.deviceStorage.noBackupFilesDir, "sock_path").absolutePath while (true) try { delay(50L shl tries) LocalSocket().use { localSocket -> localSocket.connect(LocalSocketAddress(path, LocalSocketAddress.Namespace.FILESYSTEM)) localSocket.setFileDescriptorsForSend(arrayOf(fd)) localSocket.outputStream.write(42) } return } catch (e: IOException) { if (tries > 5) throw e tries += 1 } } override fun onDestroy() { super.onDestroy() data.binder.close() } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/database/KeyValuePair.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.database import androidx.room.* import java.io.ByteArrayOutputStream import java.nio.ByteBuffer @Entity class KeyValuePair() { companion object { const val TYPE_UNINITIALIZED = 0 const val TYPE_BOOLEAN = 1 const val TYPE_FLOAT = 2 @Deprecated("Use TYPE_LONG.") const val TYPE_INT = 3 const val TYPE_LONG = 4 const val TYPE_STRING = 5 const val TYPE_STRING_SET = 6 } @androidx.room.Dao interface Dao { @Query("SELECT * FROM `KeyValuePair` WHERE `key` = :key") operator fun get(key: String): KeyValuePair? @Insert(onConflict = OnConflictStrategy.REPLACE) fun put(value: KeyValuePair): Long @Query("DELETE FROM `KeyValuePair` WHERE `key` = :key") fun delete(key: String): Int } @PrimaryKey var key: String = "" var valueType: Int = TYPE_UNINITIALIZED var value: ByteArray = ByteArray(0) val boolean: Boolean? get() = if (valueType == TYPE_BOOLEAN) ByteBuffer.wrap(value).get() != 0.toByte() else null val float: Float? get() = if (valueType == TYPE_FLOAT) ByteBuffer.wrap(value).float else null @Suppress("DEPRECATION") @Deprecated("Use long.", ReplaceWith("long")) val int: Int? get() = if (valueType == TYPE_INT) ByteBuffer.wrap(value).int else null val long: Long? get() = when (valueType) { @Suppress("DEPRECATION") TYPE_INT -> ByteBuffer.wrap(value).int.toLong() TYPE_LONG -> ByteBuffer.wrap(value).long else -> null } val string: String? get() = if (valueType == TYPE_STRING) String(value) else null val stringSet: Set? get() = if (valueType == TYPE_STRING_SET) { val buffer = ByteBuffer.wrap(value) val result = HashSet() while (buffer.hasRemaining()) { val chArr = ByteArray(buffer.int) buffer.get(chArr) result.add(String(chArr)) } result } else null @Ignore constructor(key: String) : this() { this.key = key } // putting null requires using DataStore fun put(value: Boolean): KeyValuePair { valueType = TYPE_BOOLEAN this.value = ByteBuffer.allocate(1).put((if (value) 1 else 0).toByte()).array() return this } fun put(value: Float): KeyValuePair { valueType = TYPE_FLOAT this.value = ByteBuffer.allocate(4).putFloat(value).array() return this } @Suppress("DEPRECATION") @Deprecated("Use long.") fun put(value: Int): KeyValuePair { valueType = TYPE_INT this.value = ByteBuffer.allocate(4).putInt(value).array() return this } fun put(value: Long): KeyValuePair { valueType = TYPE_LONG this.value = ByteBuffer.allocate(8).putLong(value).array() return this } fun put(value: String): KeyValuePair { valueType = TYPE_STRING this.value = value.toByteArray() return this } fun put(value: Set): KeyValuePair { valueType = TYPE_STRING_SET val stream = ByteArrayOutputStream() val intBuffer = ByteBuffer.allocate(4) for (v in value) { intBuffer.rewind() stream.write(intBuffer.putInt(v.length).array()) stream.write(v.toByteArray()) } this.value = stream.toByteArray() return this } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/database/PrivateDatabase.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.database import androidx.room.Database import androidx.room.Room import androidx.room.RoomDatabase import androidx.room.TypeConverters import androidx.room.migration.Migration import androidx.sqlite.db.SupportSQLiteDatabase import com.github.shadowsocks.Core.app import com.github.shadowsocks.database.migration.RecreateSchemaMigration import com.github.shadowsocks.utils.Key import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch @Database(entities = [Profile::class, KeyValuePair::class], version = 29) @TypeConverters(Profile.SubscriptionStatus::class) abstract class PrivateDatabase : RoomDatabase() { companion object { private val instance by lazy { Room.databaseBuilder(app, PrivateDatabase::class.java, Key.DB_PROFILE).apply { addMigrations( Migration26, Migration27, Migration28, Migration29 ) allowMainThreadQueries() enableMultiInstanceInvalidation() fallbackToDestructiveMigration() setQueryExecutor { GlobalScope.launch { it.run() } } }.build() } val profileDao get() = instance.profileDao() val kvPairDao get() = instance.keyValuePairDao() } abstract fun profileDao(): Profile.Dao abstract fun keyValuePairDao(): KeyValuePair.Dao object Migration26 : RecreateSchemaMigration(25, 26, "Profile", "(`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT, `host` TEXT NOT NULL, `remotePort` INTEGER NOT NULL, `password` TEXT NOT NULL, `method` TEXT NOT NULL, `route` TEXT NOT NULL, `remoteDns` TEXT NOT NULL, `proxyApps` INTEGER NOT NULL, `bypass` INTEGER NOT NULL, `udpdns` INTEGER NOT NULL, `ipv6` INTEGER NOT NULL, `individual` TEXT NOT NULL, `tx` INTEGER NOT NULL, `rx` INTEGER NOT NULL, `userOrder` INTEGER NOT NULL, `plugin` TEXT)", "`id`, `name`, `host`, `remotePort`, `password`, `method`, `route`, `remoteDns`, `proxyApps`, `bypass`, `udpdns`, `ipv6`, `individual`, `tx`, `rx`, `userOrder`, `plugin`") { override fun migrate(database: SupportSQLiteDatabase) { super.migrate(database) PublicDatabase.Migration3.migrate(database) } } object Migration27 : Migration(26, 27) { override fun migrate(database: SupportSQLiteDatabase) = database.execSQL("ALTER TABLE `Profile` ADD COLUMN `udpFallback` INTEGER") } object Migration28 : Migration(27, 28) { override fun migrate(database: SupportSQLiteDatabase) = database.execSQL("ALTER TABLE `Profile` ADD COLUMN `metered` INTEGER NOT NULL DEFAULT 0") } object Migration29 : Migration(28, 29) { override fun migrate(database: SupportSQLiteDatabase) = database.execSQL("ALTER TABLE `Profile` ADD COLUMN `subscription` INTEGER NOT NULL DEFAULT " + Profile.SubscriptionStatus.UserConfigured.persistedValue) } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/database/Profile.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.database import android.annotation.TargetApi import android.net.Uri import android.os.Parcelable import android.util.Base64 import android.util.LongSparseArray import androidx.core.net.toUri import androidx.room.Entity import androidx.room.Ignore import androidx.room.Insert import androidx.room.PrimaryKey import androidx.room.Query import androidx.room.TypeConverter import androidx.room.Update import com.github.shadowsocks.plugin.PluginConfiguration import com.github.shadowsocks.plugin.PluginOptions import com.github.shadowsocks.preference.DataStore import com.github.shadowsocks.utils.Key import com.github.shadowsocks.utils.parsePort import kotlinx.parcelize.Parcelize import org.json.JSONArray import org.json.JSONObject import org.json.JSONTokener import timber.log.Timber import java.io.Serializable import java.net.URI import java.net.URISyntaxException import java.util.Locale @Entity @Parcelize data class Profile( @PrimaryKey(autoGenerate = true) var id: Long = 0, // user configurable fields var name: String? = "", var host: String = "example.shadowsocks.org", var remotePort: Int = 8388, var password: String = "u1rRWTssNv0p", var method: String = "aes-256-cfb", var route: String = "all", var remoteDns: String = "dns.google", var proxyApps: Boolean = false, var bypass: Boolean = false, var udpdns: Boolean = false, var ipv6: Boolean = false, @TargetApi(28) var metered: Boolean = false, var individual: String = "", var plugin: String? = null, var udpFallback: Long? = null, // managed fields var subscription: SubscriptionStatus = SubscriptionStatus.UserConfigured, var tx: Long = 0, var rx: Long = 0, var userOrder: Long = 0, @Ignore // not persisted in db, only used by direct boot var dirty: Boolean = false ) : Parcelable, Serializable { enum class SubscriptionStatus(val persistedValue: Int) { UserConfigured(0), Active(1), /** * This profile is no longer present in subscriptions. */ Obsolete(2), ; companion object { @JvmStatic @TypeConverter fun of(value: Int) = entries.single { it.persistedValue == value } @JvmStatic @TypeConverter fun toInt(status: SubscriptionStatus) = status.persistedValue } } companion object { private const val serialVersionUID = 1L private val pattern = """(?i)ss://[-a-zA-Z0-9+&@#/%?=.~*'()|!:,;_\[\]]*[-a-zA-Z0-9+&@#/%=.~*'()|\[\]]""".toRegex() private val userInfoPattern = "^(.+?):(.*)$".toRegex() private val legacyPattern = "^(.+?):(.*)@(.+?):(\\d+?)$".toRegex() fun findAllUrls(data: CharSequence?, feature: Profile? = null) = pattern.findAll(data ?: "").map { val uri = it.value.toUri() try { if (uri.userInfo == null) { val match = legacyPattern.matchEntire(String(Base64.decode(uri.host, Base64.NO_PADDING))) if (match != null) { val profile = Profile() feature?.copyFeatureSettingsTo(profile) profile.method = match.groupValues[1].lowercase(Locale.ENGLISH) profile.password = match.groupValues[2] profile.host = match.groupValues[3] profile.remotePort = match.groupValues[4].toInt() profile.plugin = uri.getQueryParameter(Key.plugin) profile.name = uri.fragment profile } else { Timber.e("Unrecognized URI: ${it.value}") null } } else { val match = userInfoPattern.matchEntire(String(Base64.decode(uri.userInfo, Base64.NO_PADDING or Base64.NO_WRAP or Base64.URL_SAFE))) if (match != null) { val profile = Profile() feature?.copyFeatureSettingsTo(profile) profile.method = match.groupValues[1] profile.password = match.groupValues[2] // bug in Android: https://code.google.com/p/android/issues/detail?id=192855 try { val javaURI = URI(it.value) profile.host = javaURI.host ?: "" if (profile.host.firstOrNull() == '[' && profile.host.lastOrNull() == ']') { profile.host = profile.host.substring(1, profile.host.length - 1) } profile.remotePort = javaURI.port profile.plugin = uri.getQueryParameter(Key.plugin) profile.name = uri.fragment ?: "" profile } catch (e: URISyntaxException) { Timber.e("Invalid URI: ${it.value}") null } } else { Timber.e("Unknown user info: ${it.value}") null } } } catch (e: IllegalArgumentException) { Timber.e("Invalid base64 detected: ${it.value}") null } }.filterNotNull() private class JsonParser(private val feature: Profile? = null) : ArrayList() { val fallbackMap = mutableMapOf() private fun tryParse(json: JSONObject, fallback: Boolean = false): Profile? { val host = json.optString("server") if (host.isNullOrEmpty()) return null val remotePort = json.optInt("server_port") if (remotePort <= 0) return null val password = json.optString("password") if (password.isNullOrEmpty()) return null val method = json.optString("method") if (method.isNullOrEmpty()) return null return Profile().also { it.host = host it.remotePort = remotePort it.password = password it.method = method }.apply { feature?.copyFeatureSettingsTo(this) val id = json.optString("plugin") if (!id.isNullOrEmpty()) { plugin = PluginOptions(id, json.optString("plugin_opts")).toString(false) } name = json.optString("remarks") route = json.optString("route", route) if (fallback) return@apply remoteDns = json.optString("remote_dns", remoteDns) ipv6 = json.optBoolean("ipv6", ipv6) metered = json.optBoolean("metered", metered) json.optJSONObject("proxy_apps")?.also { obj -> proxyApps = obj.optBoolean("enabled", proxyApps) bypass = obj.optBoolean("bypass", bypass) individual = obj.optJSONArray("android_list")?.let { 0.until(it.length()).joinToString("\n", transform = it::optString) } ?: individual } udpdns = json.optBoolean("udpdns", udpdns) json.optJSONObject("udp_fallback")?.let { tryParse(it, true) }?.also { fallbackMap[this] = it } } } fun process(json: Any?) { when (json) { is JSONObject -> { val profile = tryParse(json) if (profile != null) add(profile) else json.keys().forEach { process(json.opt(it)) } } is JSONArray -> 0.until(json.length()).forEach { process(json.opt(it)) } // ignore other types } } fun finalize(create: (Profile) -> Profile) { val profiles = ProfileManager.getAllProfiles() ?: emptyList() for ((profile, fallback) in fallbackMap) { val match = profiles.firstOrNull { fallback.host == it.host && fallback.remotePort == it.remotePort && fallback.password == it.password && fallback.method == it.method && it.plugin.isNullOrEmpty() } profile.udpFallback = (match ?: create(fallback)).id ProfileManager.updateProfile(profile) } } } fun parseJson(json: String, feature: Profile? = null, create: (Profile) -> Profile) { JsonParser(feature).run { JSONTokener(json).apply { while (more()) process(nextValue()) } for (i in indices) { val fallback = fallbackMap.remove(this[i]) this[i] = create(this[i]) fallback?.also { fallbackMap[this[i]] = it } } finalize(create) } } } @androidx.room.Dao interface Dao { @Query("SELECT * FROM `Profile` WHERE `id` = :id") operator fun get(id: Long): Profile? @Query("SELECT * FROM `Profile` WHERE `Subscription` != 2 ORDER BY `userOrder`") fun listActive(): List @Query("SELECT * FROM `Profile`") fun listAll(): List @Query("SELECT MAX(`userOrder`) + 1 FROM `Profile`") fun nextOrder(): Long? @Query("SELECT 1 FROM `Profile` LIMIT 1") fun isNotEmpty(): Boolean @Insert fun create(value: Profile): Long @Update fun update(value: Profile): Int @Query("DELETE FROM `Profile` WHERE `id` = :id") fun delete(id: Long): Int @Query("DELETE FROM `Profile`") fun deleteAll(): Int } val formattedAddress get() = (if (host.contains(":")) "[%s]:%d" else "%s:%d").format(host, remotePort) val formattedName get() = if (name.isNullOrEmpty()) formattedAddress else name!! fun copyFeatureSettingsTo(profile: Profile) { profile.route = route profile.ipv6 = ipv6 profile.metered = metered profile.proxyApps = proxyApps profile.bypass = bypass profile.individual = individual profile.udpdns = udpdns } fun toUri(): Uri { val auth = Base64.encodeToString("$method:$password".toByteArray(), Base64.NO_PADDING or Base64.NO_WRAP or Base64.URL_SAFE) val wrappedHost = if (host.contains(':')) "[$host]" else host val builder = Uri.Builder() .scheme("ss") .encodedAuthority("$auth@$wrappedHost:$remotePort") val configuration = PluginConfiguration(plugin ?: "") if (configuration.selected.isNotEmpty()) { builder.appendQueryParameter(Key.plugin, configuration.getOptions().toString(false)) } if (!name.isNullOrEmpty()) builder.fragment(name) return builder.build() } override fun toString() = toUri().toString() fun toJson(profiles: LongSparseArray? = null): JSONObject = JSONObject().apply { put("server", host) put("server_port", remotePort) put("password", password) put("method", method) if (profiles == null) return@apply PluginConfiguration(plugin ?: "").getOptions().also { if (it.id.isNotEmpty()) { put("plugin", it.id) put("plugin_opts", it.toString()) } } put("remarks", name) put("route", route) put("remote_dns", remoteDns) put("ipv6", ipv6) put("metered", metered) put("proxy_apps", JSONObject().apply { put("enabled", proxyApps) if (proxyApps) { put("bypass", bypass) // android_ prefix is used because package names are Android specific put("android_list", JSONArray(individual.split("\n"))) } }) put("udpdns", udpdns) val fallback = profiles.get(udpFallback ?: return@apply) if (fallback != null && fallback.plugin.isNullOrEmpty()) fallback.toJson().also { put("udp_fallback", it) } } fun serialize() { DataStore.editingId = id DataStore.privateStore.putString(Key.name, name) DataStore.privateStore.putString(Key.host, host) DataStore.privateStore.putString(Key.remotePort, remotePort.toString()) DataStore.privateStore.putString(Key.password, password) DataStore.privateStore.putString(Key.route, route) DataStore.privateStore.putString(Key.remoteDns, remoteDns) DataStore.privateStore.putString(Key.method, method) DataStore.proxyApps = proxyApps DataStore.bypass = bypass DataStore.privateStore.putBoolean(Key.udpdns, udpdns) DataStore.privateStore.putBoolean(Key.ipv6, ipv6) DataStore.privateStore.putBoolean(Key.metered, metered) DataStore.individual = individual DataStore.plugin = plugin ?: "" DataStore.udpFallback = udpFallback DataStore.privateStore.remove(Key.dirty) } fun deserialize() { check(id == 0L || DataStore.editingId == id) DataStore.editingId = null // It's assumed that default values are never used, so 0/false/null is always used even if that isn't the case name = DataStore.privateStore.getString(Key.name) ?: "" // It's safe to trim the hostname, as we expect no leading or trailing whitespaces here host = (DataStore.privateStore.getString(Key.host) ?: "").trim() remotePort = parsePort(DataStore.privateStore.getString(Key.remotePort), 8388, 1) password = DataStore.privateStore.getString(Key.password) ?: "" method = DataStore.privateStore.getString(Key.method) ?: "" route = DataStore.privateStore.getString(Key.route) ?: "" remoteDns = DataStore.privateStore.getString(Key.remoteDns) ?: "" proxyApps = DataStore.proxyApps bypass = DataStore.bypass udpdns = DataStore.privateStore.getBoolean(Key.udpdns, false) ipv6 = DataStore.privateStore.getBoolean(Key.ipv6, false) metered = DataStore.privateStore.getBoolean(Key.metered, false) individual = DataStore.individual plugin = DataStore.plugin udpFallback = DataStore.udpFallback } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/database/ProfileManager.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.database import android.database.sqlite.SQLiteCantOpenDatabaseException import android.util.LongSparseArray import com.github.shadowsocks.Core import com.github.shadowsocks.preference.DataStore import com.github.shadowsocks.utils.DirectBoot import com.github.shadowsocks.utils.forEachTry import org.json.JSONArray import timber.log.Timber import java.io.IOException import java.io.InputStream import java.io.Serializable import java.sql.SQLException /** * SQLExceptions are not caught (and therefore will cause crash) for insert/update transactions * to ensure we are in a consistent state. */ object ProfileManager { interface Listener { fun onAdd(profile: Profile) fun onRemove(profileId: Long) fun onCleared() fun reloadProfiles() } var listener: Listener? = null data class ExpandedProfile(val main: Profile, val udpFallback: Profile?) : Serializable { companion object { private const val serialVersionUID = 1L } fun toList() = listOfNotNull(main, udpFallback) } @Throws(SQLException::class) fun createProfile(profile: Profile = Profile()): Profile { profile.id = 0 profile.userOrder = PrivateDatabase.profileDao.nextOrder() ?: 0 profile.id = PrivateDatabase.profileDao.create(profile) listener?.onAdd(profile) return profile } fun createProfilesFromJson(jsons: Sequence, replace: Boolean = false) { val profiles = if (replace) getAllProfiles()?.associateBy { it.formattedAddress } else null val feature = if (replace) { profiles?.values?.singleOrNull { it.id == DataStore.profileId } } else Core.currentProfile?.main val lazyClear = lazy { clear() } jsons.asIterable().forEachTry { json -> Profile.parseJson(json.bufferedReader().readText(), feature) { if (replace) { lazyClear.value // if two profiles has the same address, treat them as the same profile and copy stats over profiles?.get(it.formattedAddress)?.apply { it.tx = tx it.rx = rx } } createProfile(it) } } } fun serializeToJson(profiles: List? = getActiveProfiles()): JSONArray? { if (profiles == null) return null val lookup = LongSparseArray(profiles.size).apply { profiles.forEach { put(it.id, it) } } return JSONArray(profiles.map { it.toJson(lookup) }.toTypedArray()) } /** * Note: It's caller's responsibility to update DirectBoot profile if necessary. */ @Throws(SQLException::class) fun updateProfile(profile: Profile) = check(PrivateDatabase.profileDao.update(profile) == 1) @Throws(IOException::class) fun getProfile(id: Long): Profile? = try { PrivateDatabase.profileDao[id] } catch (ex: SQLiteCantOpenDatabaseException) { throw IOException(ex) } catch (ex: SQLException) { Timber.w(ex) null } @Throws(IOException::class) fun expand(profile: Profile) = ExpandedProfile(profile, profile.udpFallback?.let { getProfile(it) }) @Throws(SQLException::class) fun delProfile(id: Long) { check(PrivateDatabase.profileDao.delete(id) == 1) listener?.onRemove(id) if (id in Core.activeProfileIds && DataStore.directBootAware) DirectBoot.clean() } @Throws(SQLException::class) fun clear() = PrivateDatabase.profileDao.deleteAll().also { // listener is not called since this won't be used in mobile submodule DirectBoot.clean() listener?.onCleared() } @Throws(IOException::class) fun ensureNotEmpty() { val nonEmpty = try { PrivateDatabase.profileDao.isNotEmpty() } catch (ex: SQLiteCantOpenDatabaseException) { throw IOException(ex) } catch (ex: SQLException) { Timber.w(ex) false } if (!nonEmpty) DataStore.profileId = createProfile().id } @Throws(IOException::class) fun getActiveProfiles(): List? = try { PrivateDatabase.profileDao.listActive() } catch (ex: SQLiteCantOpenDatabaseException) { throw IOException(ex) } catch (ex: SQLException) { Timber.w(ex) null } @Throws(IOException::class) fun getAllProfiles(): List? = try { PrivateDatabase.profileDao.listAll() } catch (ex: SQLiteCantOpenDatabaseException) { throw IOException(ex) } catch (ex: SQLException) { Timber.w(ex) null } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/database/PublicDatabase.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.database import androidx.room.Database import androidx.room.Room import androidx.room.RoomDatabase import com.github.shadowsocks.Core import com.github.shadowsocks.database.migration.RecreateSchemaMigration import com.github.shadowsocks.utils.Key import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch @Database(entities = [KeyValuePair::class], version = 3) abstract class PublicDatabase : RoomDatabase() { companion object { private val instance by lazy { Room.databaseBuilder(Core.deviceStorage, PublicDatabase::class.java, Key.DB_PUBLIC).apply { addMigrations( Migration3 ) allowMainThreadQueries() enableMultiInstanceInvalidation() fallbackToDestructiveMigration() setQueryExecutor { GlobalScope.launch { it.run() } } }.build() } val kvPairDao get() = instance.keyValuePairDao() } abstract fun keyValuePairDao(): KeyValuePair.Dao internal object Migration3 : RecreateSchemaMigration(2, 3, "KeyValuePair", "(`key` TEXT NOT NULL, `valueType` INTEGER NOT NULL, `value` BLOB NOT NULL, PRIMARY KEY(`key`))", "`key`, `valueType`, `value`") } ================================================ FILE: core/src/main/java/com/github/shadowsocks/database/migration/RecreateSchemaMigration.kt ================================================ /******************************************************************************* * * * Copyright (C) 2018 by Max Lv * * Copyright (C) 2018 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.database.migration import androidx.room.migration.Migration import androidx.sqlite.db.SupportSQLiteDatabase open class RecreateSchemaMigration(oldVersion: Int, newVersion: Int, private val table: String, private val schema: String, private val keys: String) : Migration(oldVersion, newVersion) { override fun migrate(database: SupportSQLiteDatabase) { database.execSQL("CREATE TABLE `tmp` $schema") database.execSQL("INSERT INTO `tmp` ($keys) SELECT $keys FROM `$table`") database.execSQL("DROP TABLE `$table`") database.execSQL("ALTER TABLE `tmp` RENAME TO `$table`") } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/net/ConcurrentLocalSocketListener.kt ================================================ /******************************************************************************* * * * Copyright (C) 2019 by Max Lv * * Copyright (C) 2019 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.net import android.net.LocalSocket import kotlinx.coroutines.* import timber.log.Timber import java.io.File abstract class ConcurrentLocalSocketListener(name: String, socketFile: File) : LocalSocketListener(name, socketFile), CoroutineScope { override val coroutineContext = Dispatchers.IO + SupervisorJob() + CoroutineExceptionHandler { _, t -> Timber.w(t) } override fun accept(socket: LocalSocket) { launch { super.accept(socket) } } override fun shutdown(scope: CoroutineScope) { running = false cancel() super.shutdown(scope) coroutineContext[Job]!!.also { job -> scope.launch { job.join() } } } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/net/DefaultNetworkListener.kt ================================================ /******************************************************************************* * * * Copyright (C) 2019 by Max Lv * * Copyright (C) 2019 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.net import android.annotation.TargetApi import android.net.ConnectivityManager import android.net.Network import android.net.NetworkCapabilities import android.net.NetworkRequest import android.os.Build import android.os.Handler import android.os.Looper import com.github.shadowsocks.Core import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.channels.actor import kotlinx.coroutines.runBlocking import java.net.UnknownHostException object DefaultNetworkListener { private sealed class NetworkMessage { class Start(val key: Any, val listener: (Network?) -> Unit) : NetworkMessage() class Get : NetworkMessage() { val response = CompletableDeferred() } class Stop(val key: Any) : NetworkMessage() class Put(val network: Network) : NetworkMessage() class Update(val network: Network) : NetworkMessage() class Lost(val network: Network) : NetworkMessage() } private val networkActor = GlobalScope.actor(Dispatchers.Unconfined) { val listeners = mutableMapOf Unit>() var network: Network? = null val pendingRequests = arrayListOf() for (message in channel) when (message) { is NetworkMessage.Start -> { if (listeners.isEmpty()) register() listeners[message.key] = message.listener if (network != null) message.listener(network) } is NetworkMessage.Get -> { check(listeners.isNotEmpty()) { "Getting network without any listeners is not supported" } if (network == null) pendingRequests += message else message.response.complete(network) } is NetworkMessage.Stop -> if (listeners.isNotEmpty() && // was not empty listeners.remove(message.key) != null && listeners.isEmpty()) { network = null unregister() } is NetworkMessage.Put -> { network = message.network pendingRequests.forEach { it.response.complete(message.network) } pendingRequests.clear() listeners.values.forEach { it(network) } } is NetworkMessage.Update -> if (network == message.network) listeners.values.forEach { it(network) } is NetworkMessage.Lost -> if (network == message.network) { network = null listeners.values.forEach { it(null) } } } } suspend fun start(key: Any, listener: (Network?) -> Unit) = networkActor.send(NetworkMessage.Start(key, listener)) suspend fun get() = if (fallback) { Core.connectivity.activeNetwork ?: throw UnknownHostException() // failed to listen, return current if available } else NetworkMessage.Get().run { networkActor.send(this) response.await() } suspend fun stop(key: Any) = networkActor.send(NetworkMessage.Stop(key)) // NB: this runs in ConnectivityThread, and this behavior cannot be changed until API 26 private object Callback : ConnectivityManager.NetworkCallback() { override fun onAvailable(network: Network) = runBlocking { networkActor.send(NetworkMessage.Put(network)) } override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities) { // it's a good idea to refresh capabilities runBlocking { networkActor.send(NetworkMessage.Update(network)) } } override fun onLost(network: Network) = runBlocking { networkActor.send(NetworkMessage.Lost(network)) } } private var fallback = false private val request = NetworkRequest.Builder().apply { addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED) if (Build.VERSION.SDK_INT == 23) { // workarounds for OEM bugs removeCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) removeCapability(NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL) } }.build() private val mainHandler = Handler(Looper.getMainLooper()) /** * Unfortunately registerDefaultNetworkCallback is going to return VPN interface since Android P DP1: * https://android.googlesource.com/platform/frameworks/base/+/dda156ab0c5d66ad82bdcf76cda07cbc0a9c8a2e * * This makes doing a requestNetwork with REQUEST necessary so that we don't get ALL possible networks that * satisfies default network capabilities but only THE default network. Unfortunately, we need to have * android.permission.CHANGE_NETWORK_STATE to be able to call requestNetwork. * * Source: https://android.googlesource.com/platform/frameworks/base/+/2df4c7d/services/core/java/com/android/server/ConnectivityService.java#887 */ private fun register() { when (Build.VERSION.SDK_INT) { in 31..Int.MAX_VALUE -> @TargetApi(31) { Core.connectivity.registerBestMatchingNetworkCallback(request, Callback, mainHandler) } in 28 until 31 -> @TargetApi(28) { // we want REQUEST here instead of LISTEN Core.connectivity.requestNetwork(request, Callback, mainHandler) } in 26 until 28 -> @TargetApi(26) { Core.connectivity.registerDefaultNetworkCallback(Callback, mainHandler) } in 24 until 26 -> @TargetApi(24) { Core.connectivity.registerDefaultNetworkCallback(Callback) } else -> try { fallback = false Core.connectivity.requestNetwork(request, Callback) } catch (e: RuntimeException) { fallback = true // known bug on API 23: https://stackoverflow.com/a/33509180/2245107 } } } private fun unregister() = Core.connectivity.unregisterNetworkCallback(Callback) } ================================================ FILE: core/src/main/java/com/github/shadowsocks/net/DnsResolverCompat.kt ================================================ /******************************************************************************* * * * Copyright (C) 2019 by Max Lv * * Copyright (C) 2019 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.net import android.annotation.TargetApi import android.net.DnsResolver import android.net.Network import android.os.Build import android.os.CancellationSignal import com.github.shadowsocks.Core import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Runnable import kotlinx.coroutines.suspendCancellableCoroutine import kotlinx.coroutines.withContext import org.xbill.DNS.AAAARecord import org.xbill.DNS.ARecord import org.xbill.DNS.DClass import org.xbill.DNS.Flags import org.xbill.DNS.Message import org.xbill.DNS.Name import org.xbill.DNS.Opcode import org.xbill.DNS.PTRRecord import org.xbill.DNS.ReverseMap import org.xbill.DNS.Section import org.xbill.DNS.Type import java.io.IOException import java.net.Inet4Address import java.net.Inet6Address import java.net.InetAddress import java.util.concurrent.Executor import kotlin.coroutines.resume import kotlin.coroutines.resumeWithException sealed class DnsResolverCompat { companion object : DnsResolverCompat() { private val instance by lazy { when (Build.VERSION.SDK_INT) { in 29..Int.MAX_VALUE -> DnsResolverCompat29 in 23 until 29 -> DnsResolverCompat23 else -> error("Unsupported API level") } } override suspend fun resolve(network: Network, host: String) = instance.resolve(network, host) override suspend fun resolveOnActiveNetwork(host: String) = instance.resolveOnActiveNetwork(host) override suspend fun resolveRaw(network: Network, query: ByteArray) = instance.resolveRaw(network, query) override suspend fun resolveRawOnActiveNetwork(query: ByteArray) = instance.resolveRawOnActiveNetwork(query) // additional platform-independent DNS helpers /** * TTL returned from localResolver is set to 120. Android API does not provide TTL, * so we suppose Android apps should not care about TTL either. */ private const val TTL = 120L fun prepareDnsResponse(request: Message) = Message(request.header.id).apply { header.setFlag(Flags.QR.toInt()) // this is a response header.setFlag(Flags.RA.toInt()) // recursion available if (request.header.getFlag(Flags.RD.toInt())) header.setFlag(Flags.RD.toInt()) request.question?.also { addRecord(it, Section.QUESTION) } } } abstract suspend fun resolve(network: Network, host: String): Array abstract suspend fun resolveOnActiveNetwork(host: String): Array abstract suspend fun resolveRaw(network: Network, query: ByteArray): ByteArray abstract suspend fun resolveRawOnActiveNetwork(query: ByteArray): ByteArray private data object DnsResolverCompat23 : DnsResolverCompat() { /** * This dispatcher is used for noncancellable possibly-forever-blocking operations in network IO. * * See also: https://issuetracker.google.com/issues/133874590 */ private val unboundedIO by lazy { if (Core.activity.isLowRamDevice) Dispatchers.IO else Dispatchers.IO.limitedParallelism(Int.MAX_VALUE, "unboundedIO") } override suspend fun resolve(network: Network, host: String) = withContext(unboundedIO) { network.getAllByName(host) } override suspend fun resolveOnActiveNetwork(host: String) = withContext(unboundedIO) { InetAddress.getAllByName(host) } private suspend fun resolveRaw(query: ByteArray, networkSpecified: Boolean = true, hostResolver: suspend (String) -> Array): ByteArray { val request = try { Message(query) } catch (e: IOException) { throw UnsupportedOperationException(e) // unrecognized packet } when (val opcode = request.header.opcode) { Opcode.QUERY -> { } else -> throw UnsupportedOperationException("Unsupported opcode $opcode") } val question = request.question val isIpv6 = when (val type = question?.type) { Type.A -> false Type.AAAA -> true Type.PTR -> { /* Android does not provide a PTR lookup API for Network prior to Android 10 */ if (networkSpecified) throw IOException(UnsupportedOperationException("Network unspecified")) val ip = try { ReverseMap.fromName(question.name) } catch (e: IOException) { throw UnsupportedOperationException(e) // unrecognized PTR name } val hostname = withContext(unboundedIO) { ip.hostName }.let { hostname -> if (hostname == ip.hostAddress) null else Name.fromString("$hostname.") } return prepareDnsResponse(request).apply { hostname?.let { addRecord(PTRRecord(question.name, DClass.IN, TTL, it), Section.ANSWER) } }.toWire() } else -> throw UnsupportedOperationException("Unsupported query type $type") } val host = question.name.canonicalize().toString(true) return prepareDnsResponse(request).apply { for (address in hostResolver(host).asIterable().run { if (isIpv6) filterIsInstance() else filterIsInstance() }) addRecord(when (address) { is Inet4Address -> ARecord(question.name, DClass.IN, TTL, address) is Inet6Address -> AAAARecord(question.name, DClass.IN, TTL, address) else -> error("Unsupported address $address") }, Section.ANSWER) }.toWire() } override suspend fun resolveRaw(network: Network, query: ByteArray) = resolveRaw(query) { resolve(network, it) } override suspend fun resolveRawOnActiveNetwork(query: ByteArray) = resolveRaw(query, false, this::resolveOnActiveNetwork) } @TargetApi(29) private object DnsResolverCompat29 : DnsResolverCompat(), Executor { /** * This executor will run on its caller directly. On Q beta 3 thru 4, this results in calling in main thread. */ override fun execute(command: Runnable) = command.run() private val activeNetwork get() = Core.connectivity.activeNetwork ?: throw IOException("no network") override suspend fun resolve(network: Network, host: String): Array { return suspendCancellableCoroutine { cont -> val signal = CancellationSignal() cont.invokeOnCancellation { signal.cancel() } // retry should be handled by client instead DnsResolver.getInstance().query(network, host, DnsResolver.FLAG_NO_RETRY, this, signal, object : DnsResolver.Callback> { override fun onAnswer(answer: Collection, rcode: Int) = cont.resume(answer.toTypedArray()) override fun onError(error: DnsResolver.DnsException) = cont.resumeWithException(IOException(error)) }) } } override suspend fun resolveOnActiveNetwork(host: String) = resolve(activeNetwork, host) override suspend fun resolveRaw(network: Network, query: ByteArray): ByteArray { return suspendCancellableCoroutine { cont -> val signal = CancellationSignal() cont.invokeOnCancellation { signal.cancel() } DnsResolver.getInstance().rawQuery(network, query, DnsResolver.FLAG_NO_RETRY, this, signal, object : DnsResolver.Callback { override fun onAnswer(answer: ByteArray, rcode: Int) = cont.resume(answer) override fun onError(error: DnsResolver.DnsException) = cont.resumeWithException(IOException(error)) }) } } override suspend fun resolveRawOnActiveNetwork(query: ByteArray) = resolveRaw(activeNetwork, query) } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/net/HttpsTest.kt ================================================ /******************************************************************************* * * * Copyright (C) 2018 by Max Lv * * Copyright (C) 2018 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.net import android.os.Build import android.os.SystemClock import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.github.shadowsocks.Core.app import com.github.shadowsocks.core.R import com.github.shadowsocks.preference.DataStore import com.github.shadowsocks.utils.useCancellable import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.Job import kotlinx.coroutines.launch import java.io.IOException import java.net.HttpURLConnection import java.net.URL import java.net.URLConnection /** * Based on: https://android.googlesource.com/platform/frameworks/base/+/b19a838/services/core/java/com/android/server/connectivity/NetworkMonitor.java#1071 */ class HttpsTest : ViewModel() { sealed class Status { protected abstract val status: CharSequence open fun retrieve(setStatus: (CharSequence) -> Unit, errorCallback: (String) -> Unit) = setStatus(status) data object Idle : Status() { override val status get() = app.getText(R.string.vpn_connected) } data object Testing : Status() { override val status get() = app.getText(R.string.connection_test_testing) } class Success(private val elapsed: Long) : Status() { override val status get() = app.getString(R.string.connection_test_available, elapsed) } sealed class Error : Status() { override val status get() = app.getText(R.string.connection_test_fail) protected abstract val error: String private var shown = false override fun retrieve(setStatus: (CharSequence) -> Unit, errorCallback: (String) -> Unit) { super.retrieve(setStatus, errorCallback) if (shown) return shown = true errorCallback(error) } class UnexpectedResponseCode(private val code: Int) : Error() { override val error get() = app.getString(R.string.connection_test_error_status_code, code) } class IOFailure(private val e: IOException) : Error() { override val error get() = app.getString(R.string.connection_test_error, e.message) } } } private var running: Job? = null val status = MutableLiveData(Status.Idle) fun testConnection() { cancelTest() status.value = Status.Testing val url = URL("https://cp.cloudflare.com") val conn = url.openConnection(DataStore.proxy) as HttpURLConnection conn.setRequestProperty("Connection", "close") conn.instanceFollowRedirects = false conn.useCaches = false running = GlobalScope.launch(Dispatchers.Main.immediate) { status.value = conn.useCancellable { try { val start = SystemClock.elapsedRealtime() val code = responseCode val elapsed = SystemClock.elapsedRealtime() - start if (code == 204 || code == 200 && responseLength == 0L) Status.Success(elapsed) else Status.Error.UnexpectedResponseCode(code) } catch (e: IOException) { Status.Error.IOFailure(e) } finally { disconnect() } } } } private fun cancelTest() { running?.cancel() running = null } fun invalidate() { cancelTest() status.value = Status.Idle } private val URLConnection.responseLength: Long get() = if (Build.VERSION.SDK_INT >= 24) contentLengthLong else contentLength.toLong() } ================================================ FILE: core/src/main/java/com/github/shadowsocks/net/LocalSocketListener.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.net import android.annotation.SuppressLint import android.net.LocalServerSocket import android.net.LocalSocket import android.net.LocalSocketAddress import android.system.ErrnoException import android.system.Os import android.system.OsConstants import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.onFailure import kotlinx.coroutines.channels.trySendBlocking import kotlinx.coroutines.launch import timber.log.Timber import java.io.File import java.io.IOException abstract class LocalSocketListener(name: String, socketFile: File) : Thread(name) { private val localSocket = LocalSocket().apply { socketFile.delete() // It's a must-have to close and reuse previous local socket. bind(LocalSocketAddress(socketFile.absolutePath, LocalSocketAddress.Namespace.FILESYSTEM)) } private val serverSocket = LocalServerSocket(localSocket.fileDescriptor) private val closeChannel = Channel(1) @Volatile protected var running = true /** * Inherited class do not need to close input/output streams as they will be closed automatically. */ protected open fun accept(socket: LocalSocket) = socket.use { acceptInternal(socket) } protected abstract fun acceptInternal(socket: LocalSocket) final override fun run() { localSocket.use { while (running) { try { accept(serverSocket.accept()) } catch (e: IOException) { if (running) Timber.w(e) continue } } } closeChannel.trySendBlocking(Unit).onFailure { throw it!! } } @SuppressLint("NewApi") open fun shutdown(scope: CoroutineScope) { running = false localSocket.fileDescriptor?.apply { // see also: https://issuetracker.google.com/issues/36945762#comment15 if (valid()) try { Os.shutdown(this, OsConstants.SHUT_RDWR) } catch (e: ErrnoException) { // suppress fd inactive or already closed if (e.errno != OsConstants.EBADF && e.errno != OsConstants.ENOTCONN) throw e.rethrowAsSocketException() } } scope.launch { closeChannel.receive() } } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/net/Subnet.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.net import com.github.shadowsocks.utils.parseNumericAddress import java.net.InetAddress import java.util.* class Subnet(val address: InetAddress, val prefixSize: Int) : Comparable { companion object { fun fromString(value: String, lengthCheck: Int = -1): Subnet? { val parts = value.split('/', limit = 2) val addr = parts[0].parseNumericAddress() ?: return null check(lengthCheck < 0 || addr.address.size == lengthCheck) return if (parts.size == 2) try { val prefixSize = parts[1].toInt() if (prefixSize < 0 || prefixSize > addr.address.size shl 3) null else Subnet(addr, prefixSize) } catch (_: NumberFormatException) { null } else Subnet(addr, addr.address.size shl 3) } } private val addressLength get() = address.address.size shl 3 init { require(prefixSize in 0..addressLength) { "prefixSize $prefixSize not in 0..$addressLength" } } class Immutable(private val a: ByteArray, private val prefixSize: Int = 0) { companion object : Comparator { override fun compare(a: Immutable, b: Immutable): Int { check(a.a.size == b.a.size) for (i in a.a.indices) { val result = a.a[i].compareTo(b.a[i]) if (result != 0) return result } return 0 } } fun matches(b: Immutable) = matches(b.a) fun matches(b: ByteArray): Boolean { if (a.size != b.size) return false var i = 0 while (i * 8 < prefixSize && i * 8 + 8 <= prefixSize) { if (a[i] != b[i]) return false ++i } return i * 8 == prefixSize || a[i] == (b[i].toInt() and -(1 shl i * 8 + 8 - prefixSize)).toByte() } } fun toImmutable() = Immutable(address.address.also { var i = prefixSize / 8 if (prefixSize % 8 > 0) { it[i] = (it[i].toInt() and -(1 shl i * 8 + 8 - prefixSize)).toByte() ++i } while (i < it.size) it[i++] = 0 }, prefixSize) override fun toString(): String = if (prefixSize == addressLength) address.hostAddress!! else address.hostAddress!! + '/' + prefixSize private fun Byte.unsigned() = toInt() and 0xFF override fun compareTo(other: Subnet): Int { val addrThis = address.address val addrThat = other.address.address var result = addrThis.size.compareTo(addrThat.size) // IPv4 address goes first if (result != 0) return result for (i in addrThis.indices) { result = addrThis[i].unsigned().compareTo(addrThat[i].unsigned()) // undo sign extension of signed byte if (result != 0) return result } return prefixSize.compareTo(other.prefixSize) } override fun equals(other: Any?): Boolean { val that = other as? Subnet return address == that?.address && prefixSize == that.prefixSize } override fun hashCode(): Int = Objects.hash(address, prefixSize) } ================================================ FILE: core/src/main/java/com/github/shadowsocks/plugin/NativePlugin.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.plugin import android.content.pm.ResolveInfo class NativePlugin(resolveInfo: ResolveInfo) : ResolvedPlugin(resolveInfo) { init { check(resolveInfo.providerInfo != null) } override val componentInfo get() = resolveInfo.providerInfo!! } ================================================ FILE: core/src/main/java/com/github/shadowsocks/plugin/NoPlugin.kt ================================================ package com.github.shadowsocks.plugin import com.github.shadowsocks.Core.app object NoPlugin : Plugin() { override val id: String get() = "" override val label: CharSequence get() = app.getText(com.github.shadowsocks.core.R.string.plugin_disabled) } ================================================ FILE: core/src/main/java/com/github/shadowsocks/plugin/Plugin.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.plugin import android.graphics.drawable.Drawable abstract class Plugin { abstract val id: String open val idAliases get() = emptyArray() abstract val label: CharSequence open val icon: Drawable? get() = null open val defaultConfig: String? get() = null open val packageName: String get() = "" open val trusted: Boolean get() = true open val directBootAware: Boolean get() = true override fun equals(other: Any?): Boolean { if (this === other) return true if (javaClass != other?.javaClass) return false return id == (other as Plugin).id } override fun hashCode() = id.hashCode() } ================================================ FILE: core/src/main/java/com/github/shadowsocks/plugin/PluginConfiguration.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.plugin import com.github.shadowsocks.utils.Commandline import timber.log.Timber import java.util.* class PluginConfiguration(val pluginsOptions: Map, val selected: String) { private constructor(plugins: List) : this( plugins.filter { it.id.isNotEmpty() }.associateBy { it.id }, if (plugins.isEmpty()) "" else plugins[0].id) constructor(plugin: String) : this(plugin.split('\n').map { line -> if (line.startsWith("kcptun ")) { val opt = PluginOptions() opt.id = "kcptun" try { val iterator = Commandline.translateCommandline(line).drop(1).iterator() while (iterator.hasNext()) { val option = iterator.next() when { option == "--nocomp" -> opt["nocomp"] = null option.startsWith("--") -> opt[option.substring(2)] = iterator.next() else -> throw IllegalArgumentException("Unknown kcptun parameter: $option") } } } catch (exc: Exception) { Timber.w(exc) } opt } else PluginOptions(line) }) fun getOptions( id: String = selected, defaultConfig: () -> String? = { PluginManager.fetchPlugins().lookup[id]?.defaultConfig } ) = if (id.isEmpty()) PluginOptions() else pluginsOptions[id] ?: PluginOptions(id, defaultConfig()) override fun toString(): String { val result = LinkedList() for ((id, opt) in pluginsOptions) if (id == this.selected) result.addFirst(opt) else result.addLast(opt) if (!pluginsOptions.contains(selected)) result.addFirst(getOptions()) return result.joinToString("\n") { it.toString(false) } } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/plugin/PluginList.kt ================================================ /******************************************************************************* * * * Copyright (C) 2020 by Max Lv * * Copyright (C) 2020 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.plugin import android.content.Intent import android.content.pm.PackageManager import android.widget.Toast import com.github.shadowsocks.Core.app class PluginList : ArrayList() { init { add(NoPlugin) addAll(app.packageManager.queryIntentContentProviders( Intent(PluginContract.ACTION_NATIVE_PLUGIN), PackageManager.GET_META_DATA) .filter { it.providerInfo.exported }.map { NativePlugin(it) }) } val lookup = mutableMapOf().apply { for (plugin in this@PluginList) { fun check(old: Plugin?) { if (old != null && old !== plugin) { val packages = this@PluginList.filter { it.id == plugin.id }.joinToString { it.packageName } val message = "Conflicting plugins found from: $packages" Toast.makeText(app, message, Toast.LENGTH_LONG).show() throw IllegalStateException(message) } } check(put(plugin.id, plugin)) for (alias in plugin.idAliases) check(put(alias, plugin)) } } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/plugin/PluginManager.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.plugin import android.annotation.SuppressLint import android.content.BroadcastReceiver import android.content.ContentResolver import android.content.Intent import android.content.pm.ComponentInfo import android.content.pm.PackageManager import android.content.pm.ProviderInfo import android.content.pm.Signature import android.database.Cursor import android.net.Uri import android.os.Build import android.system.Os import android.util.Base64 import android.widget.Toast import androidx.core.os.bundleOf import com.github.shadowsocks.Core import com.github.shadowsocks.Core.app import com.github.shadowsocks.bg.BaseService import com.github.shadowsocks.utils.listenForPackageChanges import com.github.shadowsocks.utils.signaturesCompat import timber.log.Timber import java.io.File import java.io.FileNotFoundException object PluginManager { class PluginNotFoundException(private val plugin: String) : FileNotFoundException(plugin), BaseService.ExpectedException { override fun getLocalizedMessage() = app.getString(com.github.shadowsocks.core.R.string.plugin_unknown, plugin) } /** * Trusted signatures by the app. Third-party fork should add their public key to their fork if the developer wishes * to publish or has published plugins for this app. You can obtain your public key by executing: * * $ keytool -export -alias key-alias -keystore /path/to/keystore.jks -rfc * * If you don't plan to publish any plugin but is developing/has developed some, it's not necessary to add your * public key yet since it will also automatically trust packages signed by the same signatures, e.g. debug keys. */ val trustedSignatures by lazy { (Core.packageInfo.signaturesCompat?.toSet() ?: emptySet()) + Signature(Base64.decode( // @Mygod """ |MIIDWzCCAkOgAwIBAgIEUzfv8DANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJD |TjEOMAwGA1UECBMFTXlnb2QxDjAMBgNVBAcTBU15Z29kMQ4wDAYDVQQKEwVNeWdv |ZDEOMAwGA1UECxMFTXlnb2QxDjAMBgNVBAMTBU15Z29kMCAXDTE0MDUwMjA5MjQx |OVoYDzMwMTMwOTAyMDkyNDE5WjBdMQswCQYDVQQGEwJDTjEOMAwGA1UECBMFTXln |b2QxDjAMBgNVBAcTBU15Z29kMQ4wDAYDVQQKEwVNeWdvZDEOMAwGA1UECxMFTXln |b2QxDjAMBgNVBAMTBU15Z29kMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC |AQEAjm5ikHoP3w6zavvZU5bRo6Birz41JL/nZidpdww21q/G9APA+IiJMUeeocy0 |L7/QY8MQZABVwNq79LXYWJBcmmFXM9xBPgDqQP4uh9JsvazCI9bvDiMn92mz9HiS |Sg9V4KGg0AcY0r230KIFo7hz+2QBp1gwAAE97myBfA3pi3IzJM2kWsh4LWkKQMfL |M6KDhpb4mdDQnHlgi4JWe3SYbLtpB6whnTqjHaOzvyiLspx1tmrb0KVxssry9KoX |YQzl56scfE/QJX0jJ5qYmNAYRCb4PibMuNSGB2NObDabSOMAdT4JLueOcHZ/x9tw |agGQ9UdymVZYzf8uqc+29ppKdQIDAQABoyEwHzAdBgNVHQ4EFgQUBK4uJ0cqmnho |6I72VmOVQMvVCXowDQYJKoZIhvcNAQELBQADggEBABZQ3yNESQdgNJg+NRIcpF9l |YSKZvrBZ51gyrC7/2ZKMpRIyXruUOIrjuTR5eaONs1E4HI/uA3xG1eeW2pjPxDnO |zgM4t7EPH6QbzibihoHw1MAB/mzECzY8r11PBhDQlst0a2hp+zUNR8CLbpmPPqTY |RSo6EooQ7+NBejOXysqIF1q0BJs8Y5s/CaTOmgbL7uPCkzArB6SS/hzXgDk5gw6v |wkGeOtzcj1DlbUTvt1s5GlnwBTGUmkbLx+YUje+n+IBgMbohLUDYBtUHylRVgMsc |1WS67kDqeJiiQZvrxvyW6CZZ/MIGI+uAkkj3DqJpaZirkwPgvpcOIrjZy0uFvQM= """, Base64.DEFAULT)) + Signature(Base64.decode( // @madeye """ |MIICQzCCAaygAwIBAgIETV9OhjANBgkqhkiG9w0BAQUFADBmMQswCQYDVQQGEwJjbjERMA8GA1UE |CBMIU2hhbmdoYWkxDzANBgNVBAcTBlB1ZG9uZzEUMBIGA1UEChMLRnVkYW4gVW5pdi4xDDAKBgNV |BAsTA1BQSTEPMA0GA1UEAxMGTWF4IEx2MB4XDTExMDIxOTA1MDA1NFoXDTM2MDIxMzA1MDA1NFow |ZjELMAkGA1UEBhMCY24xETAPBgNVBAgTCFNoYW5naGFpMQ8wDQYDVQQHEwZQdWRvbmcxFDASBgNV |BAoTC0Z1ZGFuIFVuaXYuMQwwCgYDVQQLEwNQUEkxDzANBgNVBAMTBk1heCBMdjCBnzANBgkqhkiG |9w0BAQEFAAOBjQAwgYkCgYEAq6lA8LqdeEI+es9SDX85aIcx8LoL3cc//iRRi+2mFIWvzvZ+bLKr |4Wd0rhu/iU7OeMm2GvySFyw/GdMh1bqh5nNPLiRxAlZxpaZxLOdRcxuvh5Nc5yzjM+QBv8ECmuvu |AOvvT3UDmA0AMQjZqSCmxWIxc/cClZ/0DubreBo2st0CAwEAATANBgkqhkiG9w0BAQUFAAOBgQAQ |Iqonxpwk2ay+Dm5RhFfZyG9SatM/JNFx2OdErU16WzuK1ItotXGVJaxCZv3u/tTwM5aaMACGED5n |AvHaDGCWynY74oDAopM4liF/yLe1wmZDu6Zo/7fXrH+T03LBgj2fcIkUfN1AA4dvnBo8XWAm9VrI |1iNuLIssdhDz3IL9Yg== """, Base64.DEFAULT)) } private var receiver: BroadcastReceiver? = null private var cachedPlugins: PluginList? = null fun fetchPlugins() = synchronized(this) { if (receiver == null) receiver = app.listenForPackageChanges { synchronized(this) { receiver = null cachedPlugins = null } } if (cachedPlugins == null) cachedPlugins = PluginList() cachedPlugins!! } private fun buildUri(id: String) = Uri.Builder() .scheme(PluginContract.SCHEME) .authority(PluginContract.AUTHORITY) .path("/$id") .build() fun buildIntent(id: String, action: String): Intent = Intent(action, buildUri(id)) data class InitResult( val path: String, val options: PluginOptions, val isV2: Boolean = false, ) // the following parts are meant to be used by :bg @Throws(Throwable::class) fun init(configuration: PluginConfiguration): InitResult? { if (configuration.selected.isEmpty()) return null var throwable: Throwable? = null try { val result = initNative(configuration) if (result != null) return result } catch (t: Throwable) { if (throwable == null) throwable = t else Timber.w(t) } // add other plugin types here throw throwable ?: PluginNotFoundException(configuration.selected) } private fun initNative(configuration: PluginConfiguration): InitResult? { var flags = PackageManager.GET_META_DATA if (Build.VERSION.SDK_INT >= 24) { flags = flags or PackageManager.MATCH_DIRECT_BOOT_UNAWARE or PackageManager.MATCH_DIRECT_BOOT_AWARE } val providers = app.packageManager.queryIntentContentProviders( Intent(PluginContract.ACTION_NATIVE_PLUGIN, buildUri(configuration.selected)), flags) .filter { it.providerInfo.exported } if (providers.isEmpty()) return null if (providers.size > 1) { val message = "Conflicting plugins found from: ${providers.joinToString { it.providerInfo.packageName }}" Toast.makeText(app, message, Toast.LENGTH_LONG).show() throw IllegalStateException(message) } val provider = providers.single().providerInfo val options = configuration.getOptions { provider.loadString(PluginContract.METADATA_KEY_DEFAULT_CONFIG) } val isV2 = (provider.applicationInfo.metaData?.getString(PluginContract.METADATA_KEY_VERSION) ?.substringBefore('.')?.toIntOrNull() ?: 0) >= 2 var failure: Throwable? = null try { initNativeFaster(provider)?.also { return InitResult(it, options, isV2) } } catch (t: Throwable) { Timber.w("Initializing native plugin faster mode failed") failure = t } val uri = Uri.Builder().apply { scheme(ContentResolver.SCHEME_CONTENT) authority(provider.authority) }.build() try { return initNativeFast(app.contentResolver, options, uri)?.let { InitResult(it, options, isV2) } } catch (t: Throwable) { Timber.w("Initializing native plugin fast mode failed") failure?.also { t.addSuppressed(it) } failure = t } try { return initNativeSlow(app.contentResolver, options, uri)?.let { InitResult(it, options, isV2) } } catch (t: Throwable) { failure?.also { t.addSuppressed(it) } throw t } } private fun initNativeFaster(provider: ProviderInfo): String? { return provider.loadString(PluginContract.METADATA_KEY_EXECUTABLE_PATH)?.let { relativePath -> File(provider.applicationInfo.nativeLibraryDir).resolve(relativePath).apply { check(canExecute()) }.absolutePath } } private fun initNativeFast(cr: ContentResolver, options: PluginOptions, uri: Uri): String? { return cr.call(uri, PluginContract.METHOD_GET_EXECUTABLE, null, bundleOf(PluginContract.EXTRA_OPTIONS to options.id))?.getString(PluginContract.EXTRA_ENTRY)?.also { check(File(it).canExecute()) } } @SuppressLint("Recycle") private fun initNativeSlow(cr: ContentResolver, options: PluginOptions, uri: Uri): String? { var initialized = false fun entryNotFound(): Nothing = throw IndexOutOfBoundsException("Plugin entry binary not found") val pluginDir = File(Core.deviceStorage.noBackupFilesDir, "plugin") (cr.query(uri, arrayOf(PluginContract.COLUMN_PATH, PluginContract.COLUMN_MODE), null, null, null) ?: return null).use { cursor -> if (!cursor.moveToFirst()) entryNotFound() pluginDir.deleteRecursively() if (!pluginDir.mkdirs()) throw FileNotFoundException("Unable to create plugin directory") val pluginDirPath = pluginDir.absolutePath + '/' do { val path = cursor.getString(0) val file = File(pluginDir, path) check(file.absolutePath.startsWith(pluginDirPath)) cr.openInputStream(uri.buildUpon().path(path).build())!!.use { inStream -> file.outputStream().use { outStream -> inStream.copyTo(outStream) } } Os.chmod(file.absolutePath, when (cursor.getType(1)) { Cursor.FIELD_TYPE_INTEGER -> cursor.getInt(1) Cursor.FIELD_TYPE_STRING -> cursor.getString(1).toInt(8) else -> throw IllegalArgumentException("File mode should be of type int") }) if (path == options.id) initialized = true } while (cursor.moveToNext()) } if (!initialized) entryNotFound() return File(pluginDir, options.id).absolutePath } fun ComponentInfo.loadString(key: String) = when (val value = metaData.get(key)) { is String -> value is Int -> app.packageManager.getResourcesForApplication(applicationInfo).getString(value) null -> null else -> error("meta-data $key has invalid type ${value.javaClass}") } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/plugin/ResolvedPlugin.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.plugin import android.content.pm.ComponentInfo import android.content.pm.ResolveInfo import android.graphics.drawable.Drawable import android.os.Build import com.github.shadowsocks.Core import com.github.shadowsocks.Core.app import com.github.shadowsocks.plugin.PluginManager.loadString import com.github.shadowsocks.utils.signaturesCompat abstract class ResolvedPlugin(protected val resolveInfo: ResolveInfo) : Plugin() { protected abstract val componentInfo: ComponentInfo override val id by lazy { componentInfo.loadString(PluginContract.METADATA_KEY_ID)!! } override val idAliases: Array by lazy { when (val value = componentInfo.metaData.get(PluginContract.METADATA_KEY_ID_ALIASES)) { is String -> arrayOf(value) is Int -> app.packageManager.getResourcesForApplication(componentInfo.applicationInfo).run { when (getResourceTypeName(value)) { "string" -> arrayOf(getString(value)) else -> getStringArray(value) } } null -> emptyArray() else -> error("unknown type for plugin meta-data idAliases") } } override val label: CharSequence get() = resolveInfo.loadLabel(app.packageManager) override val icon: Drawable get() = resolveInfo.loadIcon(app.packageManager) override val defaultConfig by lazy { componentInfo.loadString(PluginContract.METADATA_KEY_DEFAULT_CONFIG) } override val packageName: String get() = componentInfo.packageName override val trusted by lazy { Core.getPackageInfo(packageName).signaturesCompat?.any(PluginManager.trustedSignatures::contains) == true } override val directBootAware get() = Build.VERSION.SDK_INT < 24 || componentInfo.directBootAware } ================================================ FILE: core/src/main/java/com/github/shadowsocks/preference/DataStore.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.preference import android.os.Binder import androidx.preference.PreferenceDataStore import com.github.shadowsocks.BootReceiver import com.github.shadowsocks.Core import com.github.shadowsocks.database.PrivateDatabase import com.github.shadowsocks.database.PublicDatabase import com.github.shadowsocks.utils.DirectBoot import com.github.shadowsocks.utils.Key import com.github.shadowsocks.utils.parsePort import java.net.InetSocketAddress import java.net.Proxy object DataStore : OnPreferenceDataStoreChangeListener { val publicStore = RoomPreferenceDataStore(PublicDatabase.kvPairDao) // privateStore will only be used as temp storage for ProfileConfigFragment val privateStore = RoomPreferenceDataStore(PrivateDatabase.kvPairDao) init { publicStore.registerChangeListener(this) } override fun onPreferenceDataStoreChanged(store: PreferenceDataStore, key: String) { when (key) { Key.id -> if (directBootAware) DirectBoot.update() } } // hopefully hashCode = mHandle doesn't change, currently this is true from KitKat to Nougat private val userIndex by lazy { Binder.getCallingUserHandle().hashCode() } private fun getLocalPort(key: String, default: Int): Int { val value = publicStore.getInt(key) return if (value != null) { publicStore.putString(key, value.toString()) value } else parsePort(publicStore.getString(key), default + userIndex) } var profileId: Long get() = publicStore.getLong(Key.id) ?: 0 set(value) = publicStore.putLong(Key.id, value) val persistAcrossReboot get() = publicStore.getBoolean(Key.persistAcrossReboot) ?: BootReceiver.enabled.also { publicStore.putBoolean(Key.persistAcrossReboot, it) } val canToggleLocked: Boolean get() = publicStore.getBoolean(Key.directBootAware) == true val directBootAware: Boolean get() = Core.directBootSupported && canToggleLocked val serviceMode get() = publicStore.getString(Key.serviceMode) ?: Key.modeVpn val listenAddress get() = if (publicStore.getBoolean(Key.shareOverLan, false)) "0.0.0.0" else "127.0.0.1" var portProxy: Int get() = getLocalPort(Key.portProxy, 1080) set(value) = publicStore.putString(Key.portProxy, value.toString()) val proxy get() = Proxy(Proxy.Type.SOCKS, InetSocketAddress("127.0.0.1", portProxy)) var portLocalDns: Int get() = getLocalPort(Key.portLocalDns, 5450) set(value) = publicStore.putString(Key.portLocalDns, value.toString()) var portTransproxy: Int get() = getLocalPort(Key.portTransproxy, 8200) set(value) = publicStore.putString(Key.portTransproxy, value.toString()) /** * Initialize settings that have complicated default values. */ fun initGlobal() { persistAcrossReboot if (publicStore.getString(Key.portProxy) == null) portProxy = portProxy if (publicStore.getString(Key.portLocalDns) == null) portLocalDns = portLocalDns if (publicStore.getString(Key.portTransproxy) == null) portTransproxy = portTransproxy } var editingId: Long? get() = privateStore.getLong(Key.id) set(value) = privateStore.putLong(Key.id, value) var proxyApps: Boolean get() = privateStore.getBoolean(Key.proxyApps) ?: false set(value) = privateStore.putBoolean(Key.proxyApps, value) var bypass: Boolean get() = privateStore.getBoolean(Key.bypass) ?: false set(value) = privateStore.putBoolean(Key.bypass, value) var individual: String get() = privateStore.getString(Key.individual) ?: "" set(value) = privateStore.putString(Key.individual, value) var plugin: String get() = privateStore.getString(Key.plugin) ?: "" set(value) = privateStore.putString(Key.plugin, value) var udpFallback: Long? get() = privateStore.getLong(Key.udpFallback) set(value) = privateStore.putLong(Key.udpFallback, value) var dirty: Boolean get() = privateStore.getBoolean(Key.dirty) ?: false set(value) = privateStore.putBoolean(Key.dirty, value) } ================================================ FILE: core/src/main/java/com/github/shadowsocks/preference/EditTextPreferenceModifiers.kt ================================================ /******************************************************************************* * * * Copyright (C) 2019 by Max Lv * * Copyright (C) 2019 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.preference import android.graphics.Typeface import android.text.InputFilter import android.view.inputmethod.EditorInfo import android.widget.EditText import androidx.preference.EditTextPreference object EditTextPreferenceModifiers { object Monospace : EditTextPreference.OnBindEditTextListener { override fun onBindEditText(editText: EditText) { editText.typeface = Typeface.MONOSPACE } } object Port : EditTextPreference.OnBindEditTextListener { private val portLengthFilter = arrayOf(InputFilter.LengthFilter(5)) override fun onBindEditText(editText: EditText) { editText.inputType = EditorInfo.TYPE_CLASS_NUMBER editText.filters = portLengthFilter editText.setSingleLine() editText.setSelection(editText.text.length) } } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/preference/OnPreferenceDataStoreChangeListener.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.preference import androidx.preference.PreferenceDataStore interface OnPreferenceDataStoreChangeListener { fun onPreferenceDataStoreChanged(store: PreferenceDataStore, key: String) } ================================================ FILE: core/src/main/java/com/github/shadowsocks/preference/RoomPreferenceDataStore.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.preference import androidx.preference.PreferenceDataStore import com.github.shadowsocks.database.KeyValuePair import java.util.HashSet @Suppress("MemberVisibilityCanBePrivate", "unused") open class RoomPreferenceDataStore(private val kvPairDao: KeyValuePair.Dao) : PreferenceDataStore() { fun getBoolean(key: String) = kvPairDao[key]?.boolean fun getFloat(key: String) = kvPairDao[key]?.float fun getInt(key: String) = kvPairDao[key]?.long?.toInt() fun getLong(key: String) = kvPairDao[key]?.long fun getString(key: String) = kvPairDao[key]?.string fun getStringSet(key: String) = kvPairDao[key]?.stringSet override fun getBoolean(key: String, defValue: Boolean) = getBoolean(key) ?: defValue override fun getFloat(key: String, defValue: Float) = getFloat(key) ?: defValue override fun getInt(key: String, defValue: Int) = getInt(key) ?: defValue override fun getLong(key: String, defValue: Long) = getLong(key) ?: defValue override fun getString(key: String, defValue: String?) = getString(key) ?: defValue override fun getStringSet(key: String, defValue: MutableSet?) = getStringSet(key) ?: defValue fun putBoolean(key: String, value: Boolean?) = if (value == null) remove(key) else putBoolean(key, value) fun putFloat(key: String, value: Float?) = if (value == null) remove(key) else putFloat(key, value) fun putInt(key: String, value: Int?) = if (value == null) remove(key) else putLong(key, value.toLong()) fun putLong(key: String, value: Long?) = if (value == null) remove(key) else putLong(key, value) override fun putBoolean(key: String, value: Boolean) { kvPairDao.put(KeyValuePair(key).put(value)) fireChangeListener(key) } override fun putFloat(key: String, value: Float) { kvPairDao.put(KeyValuePair(key).put(value)) fireChangeListener(key) } override fun putInt(key: String, value: Int) { kvPairDao.put(KeyValuePair(key).put(value.toLong())) fireChangeListener(key) } override fun putLong(key: String, value: Long) { kvPairDao.put(KeyValuePair(key).put(value)) fireChangeListener(key) } override fun putString(key: String, value: String?) = if (value == null) remove(key) else { kvPairDao.put(KeyValuePair(key).put(value)) fireChangeListener(key) } override fun putStringSet(key: String, values: MutableSet?) = if (values == null) remove(key) else { kvPairDao.put(KeyValuePair(key).put(values)) fireChangeListener(key) } fun remove(key: String) { kvPairDao.delete(key) fireChangeListener(key) } private val listeners = HashSet() private fun fireChangeListener(key: String) = listeners.forEach { it.onPreferenceDataStoreChanged(this, key) } fun registerChangeListener(listener: OnPreferenceDataStoreChangeListener) = listeners.add(listener) fun unregisterChangeListener(listener: OnPreferenceDataStoreChangeListener) = listeners.remove(listener) } ================================================ FILE: core/src/main/java/com/github/shadowsocks/subscription/Subscription.kt ================================================ /******************************************************************************* * * * Copyright (C) 2020 by Max Lv * * Copyright (C) 2020 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.subscription import androidx.recyclerview.widget.SortedList import com.github.shadowsocks.preference.DataStore import com.github.shadowsocks.utils.URLSorter import com.github.shadowsocks.utils.asIterable import java.io.Reader import java.net.URL class Subscription { companion object { private const val SUBSCRIPTION = "subscription" var instance: Subscription get() { val sub = Subscription() val str = DataStore.publicStore.getString(SUBSCRIPTION) if (str != null) sub.fromReader(str.reader()) return sub } set(value) = DataStore.publicStore.putString(SUBSCRIPTION, value.toString()) } val urls = SortedList(URL::class.java, URLSorter) fun fromReader(reader: Reader): Subscription { urls.clear() reader.useLines { for (line in it) try { urls.add(URL(line)) } catch (_: Exception) { } } return this } override fun toString(): String { val result = StringBuilder() result.append(urls.asIterable().joinToString("\n")) return result.toString() } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/subscription/SubscriptionService.kt ================================================ /******************************************************************************* * * * Copyright (C) 2020 by Max Lv * * Copyright (C) 2020 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.subscription import android.app.NotificationChannel import android.app.NotificationManager import android.app.PendingIntent import android.app.Service import android.content.Intent import android.content.IntentFilter import android.os.IBinder import android.widget.Toast import androidx.annotation.RequiresApi import androidx.core.app.NotificationCompat import androidx.core.content.ContextCompat import androidx.lifecycle.MutableLiveData import com.github.shadowsocks.Core import com.github.shadowsocks.Core.app import com.github.shadowsocks.core.R import com.github.shadowsocks.database.Profile import com.github.shadowsocks.database.ProfileManager import com.github.shadowsocks.preference.DataStore import com.github.shadowsocks.utils.Action import com.github.shadowsocks.utils.asIterable import com.github.shadowsocks.utils.broadcastReceiver import com.github.shadowsocks.utils.readableMessage import com.github.shadowsocks.utils.useCancellable import kotlinx.coroutines.CoroutineExceptionHandler import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.Job import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.coroutines.cancel import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import timber.log.Timber import java.io.File import java.io.InputStream import java.net.HttpURLConnection import java.net.URL class SubscriptionService : Service(), CoroutineScope { companion object { private const val NOTIFICATION_CHANNEL = "service-subscription" private const val NOTIFICATION_ID = 2 val idle = MutableLiveData(true) val notificationChannel @RequiresApi(26) get() = NotificationChannel(NOTIFICATION_CHANNEL, app.getText(R.string.service_subscription), NotificationManager.IMPORTANCE_LOW) } override val coroutineContext = SupervisorJob() + CoroutineExceptionHandler { _, t -> Timber.w(t) } private var worker: Job? = null private val cancelReceiver = broadcastReceiver { _, _ -> worker?.cancel() } private var counter = 0 private var receiverRegistered = false override fun onBind(intent: Intent?): IBinder? = null override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { if (worker == null) { idle.value = false if (!receiverRegistered) { ContextCompat.registerReceiver(this, cancelReceiver, IntentFilter(Action.ABORT), ContextCompat.RECEIVER_NOT_EXPORTED) receiverRegistered = true } worker = launch { val urls = Subscription.instance.urls val notification = NotificationCompat.Builder(this@SubscriptionService, NOTIFICATION_CHANNEL).apply { color = ContextCompat.getColor(this@SubscriptionService, R.color.material_primary_500) priority = NotificationCompat.PRIORITY_LOW addAction(NotificationCompat.Action.Builder( R.drawable.ic_navigation_close, getText(R.string.stop), PendingIntent.getBroadcast(this@SubscriptionService, 0, Intent(Action.ABORT).setPackage(packageName), PendingIntent.FLAG_IMMUTABLE)).apply { setShowsUserInterface(false) }.build()) setCategory(NotificationCompat.CATEGORY_PROGRESS) setContentTitle(getString(R.string.service_subscription_working, 0, urls.size())) setOngoing(true) setProgress(urls.size(), 0, false) setSmallIcon(R.drawable.ic_file_cloud_download) setWhen(0) } Core.notification.notify(NOTIFICATION_ID, notification.build()) counter = 0 val workers = urls.asIterable().map { url -> fetchJsonAsync(url, urls.size(), notification) } try { val localJsons = workers.awaitAll() withContext(Dispatchers.Main) { Core.notification.notify(NOTIFICATION_ID, notification.apply { setContentTitle(getText(R.string.service_subscription_finishing)) setProgress(0, 0, true) }.build()) createProfilesFromSubscription(localJsons.asSequence().filterNotNull().map { it.inputStream() }) } } finally { for (worker in workers) { worker.cancel() try { worker.getCompleted()?.apply { if (!delete()) deleteOnExit() } } catch (_: Exception) { } } GlobalScope.launch(Dispatchers.Main) { Core.notification.cancel(NOTIFICATION_ID) idle.value = true } check(worker != null) worker = null stopSelf(startId) } } } else stopSelf(startId) return START_NOT_STICKY } private fun fetchJsonAsync(url: URL, max: Int, notification: NotificationCompat.Builder) = async(Dispatchers.IO) { val tempFile = File.createTempFile("subscription-", ".json", cacheDir) try { (url.openConnection() as HttpURLConnection).useCancellable { tempFile.outputStream().use { out -> inputStream.copyTo(out) } } tempFile } catch (e: Exception) { Timber.d(e) launch(Dispatchers.Main) { Toast.makeText(this@SubscriptionService, e.readableMessage, Toast.LENGTH_LONG).show() } if (!tempFile.delete()) tempFile.deleteOnExit() null } finally { withContext(Dispatchers.Main) { counter += 1 Core.notification.notify(NOTIFICATION_ID, notification.apply { setContentTitle(getString(R.string.service_subscription_working, counter, max)) setProgress(max, counter, false) }.build()) } } } private fun createProfilesFromSubscription(jsons: Sequence) { val currentId = DataStore.profileId val profiles = ProfileManager.getAllProfiles() val subscriptions = mutableMapOf, Profile>() val toUpdate = mutableSetOf() var feature: Profile? = null profiles?.forEach { profile -> // preprocessing phase if (currentId == profile.id) feature = profile if (profile.subscription == Profile.SubscriptionStatus.UserConfigured) return@forEach if (subscriptions.putIfAbsent(profile.name to profile.formattedAddress, profile) != null) { ProfileManager.delProfile(profile.id) if (currentId == profile.id) DataStore.profileId = 0 } else if (profile.subscription == Profile.SubscriptionStatus.Active) { toUpdate.add(profile.id) profile.subscription = Profile.SubscriptionStatus.Obsolete } } for (json in jsons.asIterable()) try { Profile.parseJson(json.bufferedReader().readText(), feature) { subscriptions.compute(it.name to it.formattedAddress) { _, oldProfile -> when (oldProfile?.subscription) { Profile.SubscriptionStatus.Active -> { Timber.w("Duplicate profiles detected. Please use different profile names and/or " + "address:port for better subscription support.") oldProfile } Profile.SubscriptionStatus.Obsolete -> { toUpdate.add(oldProfile.id) oldProfile.password = it.password oldProfile.method = it.method oldProfile.plugin = it.plugin oldProfile.udpFallback = it.udpFallback oldProfile.subscription = Profile.SubscriptionStatus.Active oldProfile } else -> ProfileManager.createProfile(it.apply { subscription = Profile.SubscriptionStatus.Active }) } }!! } } catch (e: Exception) { Timber.d(e) Toast.makeText(this, e.readableMessage, Toast.LENGTH_LONG).show() } profiles?.forEach { profile -> if (toUpdate.contains(profile.id)) ProfileManager.updateProfile(profile) } ProfileManager.listener?.reloadProfiles() } override fun onDestroy() { cancel() if (receiverRegistered) unregisterReceiver(cancelReceiver) super.onDestroy() } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/utils/ActivityResultContracts.kt ================================================ /******************************************************************************* * * * Copyright (C) 2020 by Max Lv * * Copyright (C) 2020 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.utils import android.app.Activity import android.content.Context import android.content.Intent import android.net.VpnService import androidx.activity.result.contract.ActivityResultContract import androidx.activity.result.contract.ActivityResultContracts import com.github.shadowsocks.Core import com.github.shadowsocks.preference.DataStore import timber.log.Timber private val jsonMimeTypes = arrayOf("application/*", "text/*") object OpenJson : ActivityResultContracts.GetMultipleContents() { override fun createIntent(context: Context, input: String) = super.createIntent(context, jsonMimeTypes.first()).apply { putExtra(Intent.EXTRA_MIME_TYPES, jsonMimeTypes) } } object SaveJson : ActivityResultContracts.CreateDocument("application/json") { override fun createIntent(context: Context, input: String) = super.createIntent(context, "profiles.json") } class StartService : ActivityResultContract() { private var cachedIntent: Intent? = null override fun getSynchronousResult(context: Context, input: Void?): SynchronousResult? { if (DataStore.serviceMode == Key.modeVpn) VpnService.prepare(context)?.let { intent -> cachedIntent = intent return null } Core.startService() return SynchronousResult(false) } override fun createIntent(context: Context, input: Void?) = cachedIntent!!.also { cachedIntent = null } override fun parseResult(resultCode: Int, intent: Intent?) = if (resultCode == Activity.RESULT_OK) { Core.startService() false } else { Timber.e("Failed to start VpnService: $intent") true } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/utils/ArrayIterator.kt ================================================ /******************************************************************************* * * * Copyright (C) 2018 by Max Lv * * Copyright (C) 2018 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.utils import androidx.recyclerview.widget.SortedList private sealed class ArrayIterator : Iterator { abstract val size: Int abstract operator fun get(index: Int): T private var count = 0 override fun hasNext() = count < size override fun next(): T = if (hasNext()) this[count++] else throw NoSuchElementException() } private class SortedListIterator(private val list: SortedList) : ArrayIterator() { override val size get() = list.size() override fun get(index: Int) = list[index] } fun SortedList.asIterable() = Iterable { SortedListIterator(this) } ================================================ FILE: core/src/main/java/com/github/shadowsocks/utils/Commandline.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.utils import java.util.* /** * Commandline objects help handling command lines specifying processes to * execute. * * The class can be used to define a command line as nested elements or as a * helper to define a command line by an application. * * * ` *

*   

*     

*     

*     

*   


*


` * * * Based on: https://github.com/apache/ant/blob/588ce1f/src/main/org/apache/tools/ant/types/Commandline.java * * Adds support for escape character '\'. */ object Commandline { /** * Quote the parts of the given array in way that makes them * usable as command line arguments. * @param args the list of arguments to quote. * @return empty string for null or no command, else every argument split * by spaces and quoted by quoting rules. */ fun toString(args: Iterable?): String { // empty path return empty string args ?: return "" // path containing one or more elements val result = StringBuilder() for (arg in args) { if (result.isNotEmpty()) result.append(' ') arg.indices.map { arg[it] }.forEach { when (it) { ' ', '\\', '"', '\'' -> { result.append('\\') // intentionally no break result.append(it) } else -> result.append(it) } } } return result.toString() } /** * Quote the parts of the given array in way that makes them * usable as command line arguments. * @param args the list of arguments to quote. * @return empty string for null or no command, else every argument split * by spaces and quoted by quoting rules. */ fun toString(args: Array) = toString(args.asIterable()) // thanks to Java, arrays aren't iterable /** * Crack a command line. * @param toProcess the command line to process. * @return the command line broken into strings. * An empty or null toProcess parameter results in a zero sized array. */ fun translateCommandline(toProcess: String?): Array { if (toProcess.isNullOrEmpty()) { //no command? no string return arrayOf() } // parse with a simple finite state machine val normal = 0 val inQuote = 1 val inDoubleQuote = 2 var state = normal val tok = StringTokenizer(toProcess, "\\\"\' ", true) val result = ArrayList() val current = StringBuilder() var lastTokenHasBeenQuoted = false var lastTokenIsSlash = false while (tok.hasMoreTokens()) { val nextTok = tok.nextToken() when (state) { inQuote -> if ("\'" == nextTok) { lastTokenHasBeenQuoted = true state = normal } else current.append(nextTok) inDoubleQuote -> when (nextTok) { "\"" -> if (lastTokenIsSlash) { current.append(nextTok) lastTokenIsSlash = false } else { lastTokenHasBeenQuoted = true state = normal } "\\" -> lastTokenIsSlash = if (lastTokenIsSlash) { current.append(nextTok) false } else true else -> { if (lastTokenIsSlash) { current.append("\\") // unescaped lastTokenIsSlash = false } current.append(nextTok) } } else -> { when { lastTokenIsSlash -> { current.append(nextTok) lastTokenIsSlash = false } "\\" == nextTok -> lastTokenIsSlash = true "\'" == nextTok -> state = inQuote "\"" == nextTok -> state = inDoubleQuote " " == nextTok -> if (lastTokenHasBeenQuoted || current.isNotEmpty()) { result.add(current.toString()) current.setLength(0) } else -> current.append(nextTok) } lastTokenHasBeenQuoted = false } } } if (lastTokenHasBeenQuoted || current.isNotEmpty()) result.add(current.toString()) require(state != inQuote && state != inDoubleQuote) { "unbalanced quotes in $toProcess" } require(!lastTokenIsSlash) { "escape character following nothing in $toProcess" } return result.toTypedArray() } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/utils/Constants.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.utils object Key { /** * Public config that doesn't need to be kept secret. */ const val DB_PUBLIC = "config.db" const val DB_PROFILE = "profile.db" const val id = "profileId" const val name = "profileName" const val individual = "Proxyed" const val serviceMode = "serviceMode" const val modeProxy = "proxy" const val modeVpn = "vpn" const val modeTransproxy = "transproxy" const val shareOverLan = "shareOverLan" const val portProxy = "portProxy" const val portLocalDns = "portLocalDns" const val portTransproxy = "portTransproxy" const val route = "route" const val persistAcrossReboot = "isAutoConnect" const val directBootAware = "directBootAware" const val proxyApps = "isProxyApps" const val bypass = "isBypassApps" const val udpdns = "isUdpDns" const val ipv6 = "isIpv6" const val metered = "metered" const val host = "proxy" const val password = "sitekey" const val method = "encMethod" const val remotePort = "remotePortNum" const val remoteDns = "remoteDns" const val plugin = "plugin" const val pluginConfigure = "plugin.configure" const val udpFallback = "udpFallback" const val dirty = "profileDirty" const val assetUpdateTime = "assetUpdateTime" // TV specific values const val controlStats = "control.stats" const val controlImport = "control.import" const val controlExport = "control.export" const val about = "about" const val aboutOss = "about.ossLicenses" } object Action { const val SERVICE = "com.github.shadowsocks.SERVICE" const val CLOSE = "com.github.shadowsocks.CLOSE" const val RELOAD = "com.github.shadowsocks.RELOAD" const val ABORT = "com.github.shadowsocks.ABORT" const val EXTRA_PROFILE_ID = "com.github.shadowsocks.EXTRA_PROFILE_ID" } ================================================ FILE: core/src/main/java/com/github/shadowsocks/utils/DeviceStorageApp.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.utils import android.annotation.SuppressLint import android.annotation.TargetApi import android.app.Application import android.content.ComponentCallbacks import android.content.Context import android.content.res.Configuration @SuppressLint("MissingSuperCall", "Registered") @TargetApi(24) class DeviceStorageApp(private val app: Application) : Application() { init { attachBaseContext(app.createDeviceProtectedStorageContext()) } /** * Thou shalt not get the REAL underlying application context which would no longer be operating under device * protected storage. */ override fun getApplicationContext(): Context = this override fun onCreate() = app.onCreate() override fun onTerminate() = app.onTerminate() override fun onConfigurationChanged(newConfig: Configuration) = app.onConfigurationChanged(newConfig) override fun onLowMemory() = app.onLowMemory() override fun onTrimMemory(level: Int) = app.onTrimMemory(level) override fun registerComponentCallbacks(callback: ComponentCallbacks?) = app.registerComponentCallbacks(callback) override fun unregisterComponentCallbacks(callback: ComponentCallbacks?) = app.unregisterComponentCallbacks(callback) override fun registerActivityLifecycleCallbacks(callback: ActivityLifecycleCallbacks?) = app.registerActivityLifecycleCallbacks(callback) override fun unregisterActivityLifecycleCallbacks(callback: ActivityLifecycleCallbacks?) = app.unregisterActivityLifecycleCallbacks(callback) override fun registerOnProvideAssistDataListener(callback: OnProvideAssistDataListener?) = app.registerOnProvideAssistDataListener(callback) override fun unregisterOnProvideAssistDataListener(callback: OnProvideAssistDataListener?) = app.unregisterOnProvideAssistDataListener(callback) } ================================================ FILE: core/src/main/java/com/github/shadowsocks/utils/DirectBoot.kt ================================================ package com.github.shadowsocks.utils import android.annotation.TargetApi import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter import com.github.shadowsocks.Core import com.github.shadowsocks.Core.app import com.github.shadowsocks.bg.BaseService import com.github.shadowsocks.database.Profile import com.github.shadowsocks.database.ProfileManager import com.github.shadowsocks.preference.DataStore import java.io.File import java.io.IOException import java.io.ObjectInputStream import java.io.ObjectOutputStream @TargetApi(24) object DirectBoot : BroadcastReceiver() { private val file = File(Core.deviceStorage.noBackupFilesDir, "directBootProfile") private var registered = false fun getDeviceProfile(): ProfileManager.ExpandedProfile? = try { ObjectInputStream(file.inputStream()).use { it.readObject() as? ProfileManager.ExpandedProfile } } catch (_: IOException) { null } fun clean() { file.delete() File(Core.deviceStorage.noBackupFilesDir, BaseService.CONFIG_FILE).delete() File(Core.deviceStorage.noBackupFilesDir, BaseService.CONFIG_FILE_UDP).delete() } /** * app.currentProfile will call this. */ fun update(profile: Profile? = ProfileManager.getProfile(DataStore.profileId)) = if (profile == null) clean() else ObjectOutputStream(file.outputStream()).use { it.writeObject(ProfileManager.expand(profile)) } fun flushTrafficStats() { getDeviceProfile()?.also { (profile, fallback) -> if (profile.dirty) ProfileManager.updateProfile(profile) if (fallback?.dirty == true) ProfileManager.updateProfile(fallback) } update() } fun listenForUnlock() { if (registered) return app.registerReceiver(this, IntentFilter(Intent.ACTION_BOOT_COMPLETED)) registered = true } override fun onReceive(context: Context, intent: Intent) { flushTrafficStats() app.unregisterReceiver(this) registered = false } } ================================================ FILE: core/src/main/java/com/github/shadowsocks/utils/Sorters.kt ================================================ /******************************************************************************* * * * Copyright (C) 2020 by Max Lv * * Copyright (C) 2020 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.utils import androidx.recyclerview.widget.SortedList import java.net.URL abstract class BaseSorter : SortedList.Callback() { override fun onInserted(position: Int, count: Int) { } override fun areContentsTheSame(oldItem: T?, newItem: T?): Boolean = oldItem == newItem override fun onMoved(fromPosition: Int, toPosition: Int) { } override fun onChanged(position: Int, count: Int) { } override fun onRemoved(position: Int, count: Int) { } override fun areItemsTheSame(item1: T?, item2: T?): Boolean = item1 == item2 override fun compare(o1: T?, o2: T?): Int = if (o1 == null) if (o2 == null) 0 else 1 else if (o2 == null) -1 else compareNonNull(o1, o2) abstract fun compareNonNull(o1: T, o2: T): Int } object URLSorter : BaseSorter() { private val ordering = compareBy({ it.host }, { it.port }, { it.file }, { it.protocol }) override fun compareNonNull(o1: URL, o2: URL): Int = ordering.compare(o1, o2) } ================================================ FILE: core/src/main/java/com/github/shadowsocks/utils/Utils.kt ================================================ /******************************************************************************* * * * Copyright (C) 2018 by Max Lv * * Copyright (C) 2018 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.utils import android.annotation.SuppressLint import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter import android.content.pm.PackageInfo import android.content.res.Resources import android.os.Build import android.system.Os import android.system.OsConstants import android.util.TypedValue import androidx.annotation.AttrRes import androidx.preference.Preference import kotlinx.coroutines.CancellationException import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.InternalCoroutinesApi import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.job import kotlinx.coroutines.launch import kotlinx.coroutines.suspendCancellableCoroutine import kotlinx.coroutines.withContext import timber.log.Timber import java.io.FileDescriptor import java.net.HttpURLConnection import java.net.InetAddress import kotlin.coroutines.resume import kotlin.coroutines.resumeWithException inline fun Iterable.forEachTry(action: (T) -> Unit) { var result: Exception? = null for (element in this) try { action(element) } catch (e: Exception) { if (result == null) result = e else result.addSuppressed(e) } if (result != null) { Timber.d(result) throw result } } val Throwable.readableMessage get() = localizedMessage ?: javaClass.name /** * https://android.googlesource.com/platform/prebuilts/runtime/+/94fec32/appcompat/hiddenapi-light-greylist.txt#9466 */ private val getInt = FileDescriptor::class.java.getDeclaredMethod("getInt$") val FileDescriptor.int get() = getInt.invoke(this) as Int private val parseNumericAddress by lazy @SuppressLint("SoonBlockedPrivateApi") { InetAddress::class.java.getDeclaredMethod("parseNumericAddress", String::class.java).apply { isAccessible = true } } /** * A slightly more performant variant of parseNumericAddress. * * Bug in Android 9.0 and lower: https://issuetracker.google.com/issues/123456213 */ fun String?.parseNumericAddress(): InetAddress? = Os.inet_pton(OsConstants.AF_INET, this) ?: Os.inet_pton(OsConstants.AF_INET6, this)?.let { if (Build.VERSION.SDK_INT >= 29) it else parseNumericAddress.invoke(null, this) as InetAddress } suspend fun HttpURLConnection.useCancellable(block: suspend HttpURLConnection.() -> T) = coroutineScope { @OptIn(InternalCoroutinesApi::class) // https://github.com/Kotlin/kotlinx.coroutines/issues/4117 coroutineContext.job.invokeOnCompletion(true) { if (Build.VERSION.SDK_INT >= 26) disconnect() else GlobalScope.launch(Dispatchers.IO) { disconnect() } } try { withContext(Dispatchers.IO) { block() } } finally { if (Build.VERSION.SDK_INT >= 26) disconnect() else GlobalScope.launch(Dispatchers.IO) { disconnect() } } } fun parsePort(str: String?, default: Int, min: Int = 1025): Int { val value = str?.toIntOrNull() ?: default return if (value < min || value > 65535) default else value } fun broadcastReceiver(callback: (Context, Intent) -> Unit): BroadcastReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) = callback(context, intent) } fun Context.listenForPackageChanges(onetime: Boolean = true, callback: () -> Unit) = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { callback() if (onetime) context.unregisterReceiver(this) } }.apply { registerReceiver(this, IntentFilter().apply { addAction(Intent.ACTION_PACKAGE_ADDED) addAction(Intent.ACTION_PACKAGE_REMOVED) addDataScheme("package") }) } val PackageInfo.signaturesCompat get() = if (Build.VERSION.SDK_INT >= 28) signingInfo?.apkContentsSigners else @Suppress("DEPRECATION") signatures /** * Based on: https://stackoverflow.com/a/26348729/2245107 */ fun Resources.Theme.resolveResourceId(@AttrRes resId: Int): Int { val typedValue = TypedValue() if (!resolveAttribute(resId, typedValue, true)) throw Resources.NotFoundException() return typedValue.resourceId } fun Preference.remove() = parent!!.removePreference(this) ================================================ FILE: core/src/main/java/com/github/shadowsocks/widget/AutoCollapseTextView.kt ================================================ /******************************************************************************* * * * Copyright (C) 2018 by Max Lv * * Copyright (C) 2018 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.widget import android.content.Context import android.graphics.Rect import android.util.AttributeSet import android.view.MotionEvent import androidx.appcompat.widget.AppCompatTextView import androidx.core.view.isGone import timber.log.Timber class AutoCollapseTextView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : AppCompatTextView(context, attrs, defStyleAttr) { override fun onTextChanged(text: CharSequence?, start: Int, lengthBefore: Int, lengthAfter: Int) { super.onTextChanged(text, start, lengthBefore, lengthAfter) isGone = text.isNullOrEmpty() } // #1874 override fun onFocusChanged(focused: Boolean, direction: Int, previouslyFocusedRect: Rect?) = try { super.onFocusChanged(focused, direction, previouslyFocusedRect) } catch (e: IndexOutOfBoundsException) { Timber.w(e) } override fun onTouchEvent(event: MotionEvent?) = try { super.onTouchEvent(event) } catch (e: IndexOutOfBoundsException) { Timber.w(e) false } } ================================================ FILE: core/src/main/jni/Android.mk ================================================ # Copyright (C) 2009 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # LOCAL_PATH := $(call my-dir) ROOT_PATH := $(LOCAL_PATH) BUILD_SHARED_EXECUTABLE := $(LOCAL_PATH)/build-shared-executable.mk ######################################################## ## libevent ######################################################## include $(CLEAR_VARS) LIBEVENT_SOURCES := \ buffer.c bufferevent.c event.c \ bufferevent_pair.c bufferevent_filter.c \ bufferevent_sock.c bufferevent_ratelim.c \ evthread.c log.c evutil.c evutil_rand.c evutil_time.c evmap.c epoll.c poll.c signal.c select.c LOCAL_MODULE := event LOCAL_SRC_FILES := $(addprefix libevent/, $(LIBEVENT_SOURCES)) LOCAL_CFLAGS := -I$(LOCAL_PATH)/libevent \ -I$(LOCAL_PATH)/libevent/include \ -Wno-error=implicit-function-declaration include $(BUILD_STATIC_LIBRARY) ######################################################## ## libancillary ######################################################## include $(CLEAR_VARS) ANCILLARY_SOURCE := fd_recv.c fd_send.c LOCAL_MODULE := libancillary LOCAL_CFLAGS += -I$(LOCAL_PATH)/libancillary LOCAL_SRC_FILES := $(addprefix libancillary/, $(ANCILLARY_SOURCE)) include $(BUILD_STATIC_LIBRARY) ######################################################## ## redsocks ######################################################## include $(CLEAR_VARS) REDSOCKS_SOURCES := base.c http-connect.c \ log.c md5.c socks5.c \ base64.c http-auth.c http-relay.c main.c \ parser.c redsocks.c socks4.c utils.c LOCAL_STATIC_LIBRARIES := libevent LOCAL_MODULE := redsocks LOCAL_SRC_FILES := $(addprefix redsocks/, $(REDSOCKS_SOURCES)) LOCAL_CFLAGS := -std=gnu99 -DUSE_IPTABLES -D_GNU_SOURCE \ -I$(LOCAL_PATH)/redsocks \ -I$(LOCAL_PATH)/libevent/include \ -I$(LOCAL_PATH)/libevent include $(BUILD_SHARED_EXECUTABLE) ######################################################## ## tun2socks ######################################################## include $(CLEAR_VARS) LOCAL_CFLAGS := -std=gnu99 LOCAL_CFLAGS += -DBADVPN_THREADWORK_USE_PTHREAD -DBADVPN_LINUX -DBADVPN_BREACTOR_BADVPN -D_GNU_SOURCE LOCAL_CFLAGS += -DBADVPN_USE_SIGNALFD -DBADVPN_USE_EPOLL LOCAL_CFLAGS += -DBADVPN_LITTLE_ENDIAN -DBADVPN_THREAD_SAFE LOCAL_CFLAGS += -DNDEBUG -DANDROID LOCAL_CFLAGS += -Wno-parentheses -Wno-unused-value # LOCAL_CFLAGS += -DTUN2SOCKS_JNI LOCAL_STATIC_LIBRARIES := libancillary LOCAL_C_INCLUDES:= \ $(LOCAL_PATH)/libancillary \ $(LOCAL_PATH)/badvpn/lwip/src/include \ $(LOCAL_PATH)/badvpn/lwip/custom \ $(LOCAL_PATH)/badvpn/ TUN2SOCKS_SOURCES := \ base/BLog_syslog.c \ system/BReactor_badvpn.c \ system/BSignal.c \ system/BConnection_common.c \ system/BConnection_unix.c \ system/BTime.c \ system/BUnixSignal.c \ system/BNetwork.c \ flow/StreamRecvInterface.c \ flow/PacketRecvInterface.c \ flow/PacketPassInterface.c \ flow/StreamPassInterface.c \ flow/SinglePacketBuffer.c \ flow/BufferWriter.c \ flow/PacketBuffer.c \ flow/PacketStreamSender.c \ flow/PacketPassConnector.c \ flow/PacketProtoFlow.c \ flow/PacketPassFairQueue.c \ flow/PacketProtoEncoder.c \ flow/PacketProtoDecoder.c \ socksclient/BSocksClient.c \ tuntap/BTap.c \ lwip/src/core/udp.c \ lwip/src/core/memp.c \ lwip/src/core/init.c \ lwip/src/core/pbuf.c \ lwip/src/core/tcp.c \ lwip/src/core/tcp_out.c \ lwip/src/core/netif.c \ lwip/src/core/def.c \ lwip/src/core/ip.c \ lwip/src/core/mem.c \ lwip/src/core/tcp_in.c \ lwip/src/core/stats.c \ lwip/src/core/inet_chksum.c \ lwip/src/core/timeouts.c \ lwip/src/core/ipv4/icmp.c \ lwip/src/core/ipv4/igmp.c \ lwip/src/core/ipv4/ip4_addr.c \ lwip/src/core/ipv4/ip4_frag.c \ lwip/src/core/ipv4/ip4.c \ lwip/src/core/ipv4/autoip.c \ lwip/src/core/ipv6/ethip6.c \ lwip/src/core/ipv6/inet6.c \ lwip/src/core/ipv6/ip6_addr.c \ lwip/src/core/ipv6/mld6.c \ lwip/src/core/ipv6/dhcp6.c \ lwip/src/core/ipv6/icmp6.c \ lwip/src/core/ipv6/ip6.c \ lwip/src/core/ipv6/ip6_frag.c \ lwip/src/core/ipv6/nd6.c \ lwip/custom/sys.c \ tun2socks/tun2socks.c \ base/DebugObject.c \ base/BLog.c \ base/BPending.c \ system/BDatagram_unix.c \ flowextra/PacketPassInactivityMonitor.c \ socks_udp_client/SocksUdpClient.c \ tun2socks/SocksUdpGwClient.c \ udpgw_client/UdpGwClient.c LOCAL_MODULE := tun2socks LOCAL_LDLIBS := -ldl -llog LOCAL_SRC_FILES := $(addprefix badvpn/, $(TUN2SOCKS_SOURCES)) include $(BUILD_SHARED_EXECUTABLE) ================================================ FILE: core/src/main/jni/Application.mk ================================================ APP_STL := c++_static APP_SUPPORT_FLEXIBLE_PAGE_SIZES := true ================================================ FILE: core/src/main/jni/build-shared-executable.mk ================================================ # Copyright (C) 2009 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # this file is included from Android.mk files to build a target-specific # executable program # # Modified by @Mygod, based on: # https://android.googlesource.com/platform/ndk/+/a355a4e/build/core/build-shared-library.mk # https://android.googlesource.com/platform/ndk/+/a355a4e/build/core/build-executable.mk LOCAL_BUILD_SCRIPT := BUILD_EXECUTABLE LOCAL_MAKEFILE := $(local-makefile) $(call check-defined-LOCAL_MODULE,$(LOCAL_BUILD_SCRIPT)) $(call check-LOCAL_MODULE,$(LOCAL_MAKEFILE)) $(call check-LOCAL_MODULE_FILENAME) # we are building target objects my := TARGET_ $(call handle-module-filename,lib,$(TARGET_SONAME_EXTENSION)) $(call handle-module-built) LOCAL_MODULE_CLASS := EXECUTABLE include $(BUILD_SYSTEM)/build-module.mk ================================================ FILE: core/src/main/res/color-v24/ic_launcher_foreground_shadow.xml ================================================ ================================================ FILE: core/src/main/res/drawable/ic_file_cloud_download.xml ================================================ ================================================ FILE: core/src/main/res/drawable/ic_launcher_monochrome.xml ================================================ ================================================ FILE: core/src/main/res/drawable/ic_service_active.xml ================================================ ================================================ FILE: core/src/main/res/drawable-anydpi-v24/ic_launcher_foreground.xml ================================================ ================================================ FILE: core/src/main/res/mipmap-anydpi-v24/banner.xml ================================================ ================================================ FILE: core/src/main/res/mipmap-anydpi-v26/ic_launcher.xml ================================================ ================================================ FILE: core/src/main/res/values/arrays.xml ================================================ NONE CHACHA20-IETF AES-128-GCM AES_128_GCM_SIV AES-256-GCM AES_256_GCM_SIV CHACHA20-IETF-POLY1305 XCHACHA20-IETF-POLY1305 2022-BLAKE3-AES-128-GCM 2022-BLAKE3-AES-256-GCM 2022-BLAKE3-CHACHA20-POLY1305 RC4-MD5 AES-128-CFB AES-192-CFB AES-256-CFB AES-128-CTR AES-192-CTR AES-256-CTR BF-CFB CAMELLIA-128-CFB CAMELLIA-192-CFB CAMELLIA-256-CFB none chacha20-ietf aes-128-gcm aes-128-gcm-siv aes-256-gcm aes-256-gcm-siv chacha20-ietf-poly1305 xchacha20-ietf-poly1305 2022-blake3-aes-128-gcm 2022-blake3-aes-256-gcm 2022-blake3-chacha20-poly1305 rc4-md5 aes-128-cfb aes-192-cfb aes-256-cfb aes-128-ctr aes-192-ctr aes-256-ctr bf-cfb camellia-128-cfb camellia-192-cfb camellia-256-cfb 1.0.0.0/8 2.0.0.0/7 4.0.0.0/6 8.0.0.0/7 11.0.0.0/8 12.0.0.0/6 16.0.0.0/4 32.0.0.0/3 64.0.0.0/3 96.0.0.0/6 100.0.0.0/10 100.128.0.0/9 101.0.0.0/8 102.0.0.0/7 104.0.0.0/5 112.0.0.0/10 112.64.0.0/11 112.96.0.0/12 112.112.0.0/13 112.120.0.0/14 112.124.0.0/19 112.124.32.0/21 112.124.40.0/22 112.124.44.0/23 112.124.46.0/24 112.124.48.0/20 112.124.64.0/18 112.124.128.0/17 112.125.0.0/16 112.126.0.0/15 112.128.0.0/9 113.0.0.0/8 114.0.0.0/10 114.64.0.0/11 114.96.0.0/12 114.112.0.0/15 114.114.0.0/18 114.114.64.0/19 114.114.96.0/20 114.114.112.0/23 114.114.115.0/24 114.114.116.0/22 114.114.120.0/21 114.114.128.0/17 114.115.0.0/16 114.116.0.0/14 114.120.0.0/13 114.128.0.0/9 115.0.0.0/8 116.0.0.0/6 120.0.0.0/6 124.0.0.0/7 126.0.0.0/8 128.0.0.0/3 160.0.0.0/5 168.0.0.0/8 169.0.0.0/9 169.128.0.0/10 169.192.0.0/11 169.224.0.0/12 169.240.0.0/13 169.248.0.0/14 169.252.0.0/15 169.255.0.0/16 170.0.0.0/7 172.0.0.0/12 172.32.0.0/11 172.64.0.0/10 172.128.0.0/9 173.0.0.0/8 174.0.0.0/7 176.0.0.0/4 192.0.0.8/29 192.0.0.16/28 192.0.0.32/27 192.0.0.64/26 192.0.0.128/25 192.0.1.0/24 192.0.3.0/24 192.0.4.0/22 192.0.8.0/21 192.0.16.0/20 192.0.32.0/19 192.0.64.0/18 192.0.128.0/17 192.1.0.0/16 192.2.0.0/15 192.4.0.0/14 192.8.0.0/13 192.16.0.0/12 192.32.0.0/11 192.64.0.0/12 192.80.0.0/13 192.88.0.0/18 192.88.64.0/19 192.88.96.0/23 192.88.98.0/24 192.88.100.0/22 192.88.104.0/21 192.88.112.0/20 192.88.128.0/17 192.89.0.0/16 192.90.0.0/15 192.92.0.0/14 192.96.0.0/11 192.128.0.0/11 192.160.0.0/13 192.169.0.0/16 192.170.0.0/15 192.172.0.0/14 192.176.0.0/12 192.192.0.0/10 193.0.0.0/8 194.0.0.0/7 196.0.0.0/7 198.0.0.0/12 198.16.0.0/15 198.20.0.0/14 198.24.0.0/13 198.32.0.0/12 198.48.0.0/15 198.50.0.0/16 198.51.0.0/18 198.51.64.0/19 198.51.96.0/22 198.51.101.0/24 198.51.102.0/23 198.51.104.0/21 198.51.112.0/20 198.51.128.0/17 198.52.0.0/14 198.56.0.0/13 198.64.0.0/10 198.128.0.0/9 199.0.0.0/8 200.0.0.0/7 202.0.0.0/8 203.0.0.0/18 203.0.64.0/19 203.0.96.0/20 203.0.112.0/24 203.0.114.0/23 203.0.116.0/22 203.0.120.0/21 203.0.128.0/17 203.1.0.0/16 203.2.0.0/15 203.4.0.0/14 203.8.0.0/13 203.16.0.0/12 203.32.0.0/11 203.64.0.0/10 203.128.0.0/9 204.0.0.0/6 208.0.0.0/4 @string/service_mode_proxy @string/service_mode_vpn @string/service_mode_transproxy proxy vpn transproxy ================================================ FILE: core/src/main/res/values/colors.xml ================================================ #7488A1 ================================================ FILE: core/src/main/res/values/strings.xml ================================================ Shadowsocks Toggle Send email Service mode Proxy only VPN Transproxy Share over LAN SOCKS5 proxy port Local DNS port Transproxy port Remote DNS %1$s↑\t%2$s↓ Sent: \t\t\t\t\t%3$s\t↑\t%1$s\nReceived: \t%4$s\t↓\t%2$s %s/s Check Connectivity Testing… Success: HTTPS handshake took %dms Fail to detect internet connection: %s Internet Unavailable Error code: #%d Profile Name Server Remote Port Password Encrypt Method IPv6 Route Redirect IPv6 traffic to remote Metered Hint Hint system to treat VPN as metered Route All Bypass LAN Bypass mainland China Bypass LAN & mainland China GFW List China List Apps VPN mode Configure VPN mode for selected apps On Off Mode Bypass Enable this option to bypass selected apps Auto Connect Enable Shadowsocks on startup/app update if it was running before Allow Toggling in Lock Screen Your selected profile information will be less protected 1 hostname configured %d hostnames configured Send DNS over UDP Requires UDP forwarding on server side UDP Fallback VPN Service Proxy Service Transproxy Service Shadowsocks started. Failed to connect the remote server Stop Shutting down… %s Permission denied to create a VPN service Failed to start VPN service. You might need to reboot your device. No valid profile data found. Please select a profile Proxy/Password should not be empty Connect Profiles Settings FAQ https://github.com/shadowsocks/shadowsocks-android/blob/master/.github/faq.md About Shadowsocks %s Edit Share Add Profile Apply Settings to All Profiles Export… Export to file… Export to Clipboard Import from Clipboard Import from file… Replace from file… Successfully export! Failed to export. Successfully import! Failed to import. Profile config Remove Are you sure you want to remove this profile? QR code Add this Shadowsocks Profile? Scan QR code Manual Settings Camera permission is required for scanning QR code. Removed %d items removed Undo Start the service Connect to the current server Connect to %s Switch to %s Use the current profile Connecting… Connected, tap to check connection Not connected Subscriptions Add a subscription Edit subscription Refresh servers from subscription Subscription Service Syncing subscriptions… (%d of %d) Finishing up… Custom rules Add rule(s)… Subnet or Hostname PCRE pattern Domain name and all its subdomain names URL to online config Edit rule Cleartext HTTP traffic is insecure Plugin Configure… Disabled Unknown plugin %s Warning: This plugin does not seem to come from a known trusted source. Plugin: %s This plugin might not work with Auto Connect ================================================ FILE: core/src/main/res/values-ar/strings.xml ================================================ "تغيير" "سيرفر ال DNS" "ارسل: \t%3$s\t↑\t%1$s استقبل: \t%4$s\t↓\t%2$s" "اختبار الاتصال…" "فشل فحص اتصال الانترنت: %s" "لا يوجد اتصال بالانترنت" "خطآ رقم: #%d" "السيرفر" "المنفذ" "كلمة المرور" "طريقة التشفير" ================================================ FILE: core/src/main/res/values-de/strings.xml ================================================ "Umschalten" "Remote-DNS" "Gesendet: \t\t\t\t\t%3$s\t↑\t%1$s Empfangen: \t%4$s\t↓\t%2$s" "Prüfe Verbindung…" "Erfolg: HTTPS-Handshake benötigte %dms" "Scheinbar keine Internetverbindung: %s" "Keine Internetverbindung" "Fehlercode: #%d" "Profilname" "Remote-Port" "Passwort" "Verschlüsselungsmethode" "IPv6-Route" "Leite IPv6-Traffic zu Remote um" "GFW-Liste" "VPN-Modus je App" "Konfiguriere VPN-Modus für einzelne Apps" "Ein" "Umgehen" "Aktiviere um ausgewählte Apps zu umgehen" "Automatisch verbinden" "Starte Shadowsocks bei Systemstart/nach App-Update automatisch, falls es zuvor aktiv war" "Umschalten benötigt eventuell ROOT-Zugriff" "Nicht unterstützte Kernel-Version: %s < 3.7.1" "Sende DNS über UDP" "Benötigt serverseitiges UDP-Forwarding" "Shadowsocks wurde gestartet." "Ungültiger Servername" "Verbindung zum Remote-Server fehlgeschlagen" "Stopp" "Fahre herunter…" "VPN-Dienst konnte nicht gestartet werden. Eventuell musst du dein Gerät neu starten." "Kein gültiges Profil gefunden." "Bitte wähle ein Profil" "Proxy/Passwort sollte nicht leer sein" "Verbinden" "Profile" "Einstellungen" "Über diese App" "Bearbeiten" "Teilen" "Profil hinzufügen" "Einstellungen für alle Profile übernehmen" "In Zwischenablage exportieren" "Aus Zwischenablage importieren" "Erfolgreich exportiert!" "Export fehlgeschlagen." "Erfolgreich importiert!" "Import fehlgeschlagen." "Profil-Config" "Entfernen" "Bist du sicher, dass du dieses Profil entfernen möchtest?" "QR-Code" "Möchtest du dieses Shadowsocks-Profil hinzufügen?" "QR-Code scannen" "Entfernt" "%d Einträge entfernt" "Rückgängig" "Dienst starten" "Mit aktuellem Server verbinden" "Mit %s verbinden" "Auf %s wechseln" "Aktuelles Profil verwenden" "Gesendet:" "Empfangen:" "Verbinde…" "Verbunden, tippe um Verbindung zu prüfen" "Nicht verbunden" "Benutzerdefinierte Regeln" "Regel(n) hinzufügen…" "Regel bearbeiten" "Alle" "LAN umgehen" "Festlandchina umgehen" "LAN und Festlandchina umgehen" "China-Liste" "PCRE-Ausdruck für Subnets oder Hostnamen" "Domain-Name und alle Subdomains" "Konfigurieren…" "Deaktiviert" "Unbekanntes Plugin %s" "Warnung: Das Plugin scheint aus einer nicht vertrauenswürdigen Quelle zu stammen." "Zum Einscannen des QR-Codes wird Kamerazugriff benötigt." "VPN-Dienst" "Manuelle Einstellungen" "Fortgeschritten" "Service-Modus" "Nur Proxy" "SOCKS5 Proxy-Port" "Lokaler DNS-Port" "Transproxy-Port" "Proxy-Dienst" "Transproxy-Dienst" "Keine Berechtigung zum Einrichten eines VPN-Dienstes" "Shadowsocks bei Systemstart aktivieren. Stattdessen wird always-on VPN empfohlen." "Erlaube Umschalten während Gerät gesperrt ist" "Das ausgewählte Profil wird so schlechter geschützt" "URL zur Online-Konfiguration" "Aus Datei importieren…" "Dark-Modus" "Nach Betriebssystem richten" "Automatisch umschalten" "Ein" "Aus" "E-Mail senden" "Exportieren…" "Als Datei exportieren…" "Klartext HTTP-Traffic ist unsicher" "Über LAN teilen" "Verbindung prüfen" "Bitte installiere einen Dateimanager, z.B. MiXplorer" "Umschalten fehlgeschlagen" "UDP-Fallback" "Aus Datei ersetzen…" "Aus" "Modus" "Datenlimit-Mitteilung" "Teile Betriebssystem mit, dass VPN-Verbindung Datenlimit besitzt" "1 Hostname konfiguriert" "%d Hostnamen konfiguriert" "Subscription hinzufügen" "Subscription bearbeiten" "Serverliste mithilfe Subscription aktualisieren" "Subscription-Dienst" "Synchronisiere Subscriptions… (%d von %d)" "Gleich fertig..." "Dieses Plugin funktioniert eventuell nicht mit \"Automatisch verbinden\"" ================================================ FILE: core/src/main/res/values-es/strings.xml ================================================ "Alternar" "DNS Remoto" "Enviado: \t\t\t\t\t%3$s\t↑\t%1$s Recibido: \t%4$s\t↓\t%2$s" "Probando…" "Éxito: El establecimiento de la comunicación HTTPS tomó %dms" "Fallo al detectar conexión a Internet: %s" "Internet no disponible" "Código de error: #%d" "Nombre de Perfil" "Servidor" "Puerto Remoto" "Contraseña" "Método de Cifrado" "Ruta IPv6" "Redireccionar tráfico IPv6 a ruta" "Ruta" "Lista GFW" "Apps en modo VPN" "Configurar modo VPN para las apps seleccionadas" "Encendido" "Modo Bypass" "Conexión Automática" "Activar Shadowsocks al iniciar" "Versión del Núcleo sin soporte: %s < 3.7.1" "Enviar DNS sobre UDP" "Shadowsocks inició." "Nombre de servidor inválido" "Fallo al conectar al servidor remoto" "Detener" "Apagando…" "Fallo al iniciar servicio VPN. Puede que tengas que reiniciar tu dispositivo." "No se ha encontrado datos de perfil válidos." "Por favor selecciona un perfil" "Proxy/Contraseña no deberían estar vacíos" "Conectar" "Perfiles" "Preferencias" "FAQ" "Acerca de" "Editar" "Compartir" "Agregar Perfil" "Aplicar preferencias a todos los Perfiles" "Exportar a portapapeles" "Importar desde portapapeles" "¡Exportado satisfactoriamente!" "Fallo al exportar." "¡Importado satisfactoriamente!" "Fallo al importar." "Configuración de Perfil" "Remover" "¿Estás seguro de querer remover este perfil?" "Código QR/NFC" "Agregar este Perfil Shadowsocks?" "Escanear código QR" "Removido" "%d elementos removidos" "Deshacer" "Iniciar el servicio" "Conectar al servidor actual" "Conectar a %s" "Cambiar a %s" "Usar el perfil actual" "Enviado:" "Recibido:" "Conectando…" "Conectado, presiona para verificar la conexión" "No conectado" "Reglas personalizadas" "Agregar regla(s)…" "Editar regla" "Todo" "Complemento" "Configurar…" "Deshabilitado" "Complemento desconocido %s" "Precaución: Este complemento no parece venir de una fuente confiable." "Complemento: %s" "Se requiere permiso de cámara para escanear códigos QR." "Servicio VPN" "Configuración manual" "Avanzado" "Modo de servicio" "Sólo Proxy" "VPN" "Puerto proxy SOCKS5" "Puerto DNS local" "Servicio Proxy" "Servicio Transproxy" "Permiso denegado al crear servicio VPN" "La información del perfil seleccionado será menos protegida" "Importar desde archivo…" "Modo nocturno" "Seguir sistema" "Auto" "Encendido" "Apagado" "Enviar email" "Exportar…" "Exportar a archivo…" "Compartir por LAN" "Verificar conectividad" "Por favor, instala un explorador de archivos como MiXplorer" "Reemplazar desde archivo…" ================================================ FILE: core/src/main/res/values-fa/strings.xml ================================================ "شدوساکس" "تغییر وضعیت" "DNS از راه دور" "ارسال: \t\t\t\t\t%3$s\t↑\t%1$s دریافت: \t%4$s\t↓\t%2$s" "در حال آزمایش…" "موفقیت: دستیابی به HTTPS انجام شد. %d میلی‌ثانیه" "اتصال اینترنت شناسایی نشد: %s" "ارتباط با اینترنت فراهم نیست" "کد خطا: #%d" "نام پروفایل" "سرور" "پورت سرور" "کلمه عبور" "روش رمزگذاری" "مسیر IPv6" "ترافیک IPv6 را به سرور هدایت کن" "مسیر" "لیست فیلترینگ" "برنامه های حالت VPN" "تنظیم حالت VPN برای اپلیکیشن‌های انتخاب شده" "روشن" "کنار گذاشتن" "این گزینه را فعال کنید تا اپلیکیشن‌های انتخاب شده از VPN استفاده نکنند" "وصل‌شدن اتوماتیک" "فعال‌شدن شدوساکس لحظه روشن‌شدن گوشی بروزرسانی شود اگر از قبل درحال اجرا بوده است" "تغییر وضعیت ممکن است به مجوز ROOT نیاز داشته باشد" "نسخه هسته پشتیبانی نشده: %s <3.7.1" "ارسال DNS از طریق UDP" "نیاز به جابجایی UDP در سمت سرور دارد" "شدوساکس فعال شد." "آدرس سرور نامعتبر است" "اتصال به سرور ناموفق بود!" "متوقف کردن" "خاموش شدن…" "سرویس VPN شروع نشد. شاید لازم باشد دستگاه خود را Restart کنید." "هیچ پروفایل معتبری یافت نشد!" "لطفا یک پروفایل انتخاب کنید." "پروکسی یا کلمه‌عبور نباید خالی باشند!" "اتصال" "پروفایل‌ها" "تنظیمات" "سوالات متداول" "درباره ما" "شدوساکس %s" "ویرایش" "به اشتراک گذاری" "افزودن پروفایل" "اعمال تنظیمات برای همه پروفایل‌ها" "صدور به کلیپ‌بورد" "ورود از کلیپ‌بورد" "صدور موفقیت‌آمیز!" "صدور ناموفق!" "وارد کردن با موفقیت انجام شد!" "خطا در هنگام وارد کردن!" "تنظیمات پروفایل" "حذف" "آیا مطمئن هستید که می‌خواهید این پروفایل را حذف کنید؟" "کد QR" "این پروفایل شدوساکس اضافه شود؟" "اسکن‌کردن کد QR" "%d مورد حذف شد" "بازگرداندن" "فعال‌کردن سرویس" "وصل‌شدن به سرور فعلی" "وصل شدن به" "تغییر به" "استفاده از پروفایل فعلی" "ارسال:" "دریافت شده:" "در حال اتصال…" "وصل شد، برای بررسی اتصال ضربه (Tap) بزنید." "اتصال برقرار نیست!" "قوانین سفارشی" "اضافه کردن قوانین" "ویرایش قانون" "همه" "صرف‌نظر کردن از شبکه داخلی" "صرفه‌نظر کردن از سایت‌های سرزمین چین" "صرف‌نظر کردن از شبکه داخلی و سایت‌های سرزمین چین" "فهرست سرزمین چین" "زیر شبکه یا نام میزبان الگوی PCRE" "نام دامنه و تمام نامهای زیر دامنه آن" "پلاگین" "تنظیم..." "غیر فعال" "پلاگین ناشناخته %s" "هشدار: به نظر نمی رسد که این افزونه از یک منبع معتبر شناخته شده باشد." "پلاگین %s" "مجوز دسترسی به دوربین برای اسکن کردن کد QR مورد نیاز است." "سرویس VPN" "تنظیمات دستی" "پیشرفته" "حالت سرویس" "فقط پروکسی" "ترانس‌پروکسی" "پورت پروکسی SOCKS5" "پورت DNS محلی" "پورت ترانس‌پروکسی" "سرویس پروکسی" "سرویس ترانس‌پروکسی" "مجوز برای ساخت VPN فراهم نیست" "شدوساکس را از ابتدا فعال کن. توصیه می‌شود که به جای این گزینه از گزینه Always-ON VPN استفاده شود" "مجاز به تغییر در صفحه‌ی قفل" "اطلاعات پروفایل انتخابی شما کمتر محافظت می شود" "URL به پیکربندی آنلاین" "وارد کردن فایل‌ از..." "حالت شب" "سیستم را دنبال کنید" "خودکار" "روشن" "خاموش" "ارسال ایمیل" "صادر کردن..." "صادر کردن به پرونده..." "Cleartext ترافیک HTTP ناامن است" "اشتراک‌گذاری از طریق LAN" "بررسی اتصال" "لطفاً یک فایل منیجر مانند MiXplorer نصب کنید" "خطا در تغییر وضعیت" "جایگزین کردن با فایل..." "خاموش" "حالت" "اشاره شده" "سیستم اشاره برای درمان VPN به عنوان اندازه گیری شده" "نام میزبان پیکربندی شده است" "اشتراک" "ایجاد اشتراک" "ویرایش اشتراک" "سرورها را از اشتراک تازه کنید" "خدمات اشتراک" "همگام سازی اشتراک ها… (%d از%d)" "درحال پایان دادن..." "این پلاگین ممکن است با اتصال خودکار کار نکند" ================================================ FILE: core/src/main/res/values-fr/strings.xml ================================================ "Basculer" "DNS Distant" "Envoyé : \t%3$s\t↑\t%1$s Reçu : \t\t\t%4$s\t↓\t%2$s" "Essai…" "Succès : le handshake HTTPS a pris %dms" "Impossible de détecter la connexion Internet :%s" "Internet Indisponible" "Code de l'Erreur : #%d" "Nom du Profil" "Serveur" "Port Distant" "Mot de passe" "Méthode d'Encryption" "Route IPv6" "Rediriger le trafic IPv6 vers le serveur distant" "Route" "Liste GFW" "Mode VPN Apps" "Configurer le mode VPN pour les applications sélectionnées" "Activé" "Mode exclusion" "Activer cette option pour exclure les applications sélectionnées" "Connection auto" "Activer Shadowsocks au démarrage" "Activer nécessite la permission ROOT" "Version du noyau non supportée : %s <3.7.1" "Faire suivre toutes les requêtes DNS au serveur distant" "Shadowsocks a démarré" "Nom de serveur invalide" "Échec de la connexion au serveur distant" "Stopper" "Arrêt en cours…" "Impossible de démarrer le service VPN. Vous devrez peut-être redémarrer votre appareil." "Pas de donnée de profil valide trouvée." "Veuillez sélectionner un profil" "Le mot de passe/proxy ne doit pas être vide" "Connexion" "Profils" "Paramètres" "À propos" "Éditer" "Partager" "Ajouter un Profil" "Appliquer les Paramètres à tous les Profils" "Exporter vers le presse-papiers" "Importer depuis le presse-papiers" "Exporté avec succès !" "Échec de l'exportation" "Importé avec succès !" "Échec de l’importation." "Config profil" "Supprimer" "Êtes-vous sûr de vouloir supprimer ce profil?" "QR Code/NFC" "Ajouter ce profil Shadowsocks?" "Scanner le QR Code" "Supprimé" "%d éléments supprimés" "Annuler" "Démarrer le service" "Se connecter au serveur courant" "Se connecter à %s" "Basculer sur %s" "Utiliser le profil actuel" "Envoyé :" "Reçu :" "Connexion…" "Connecté, toucher pour vérifier la connexion" "Non connecté" "Règles personnalisées" "Ajouter une/des règle(s)" "Modifier une règle" "Toutes" "Exclure le LAN" "Exclure la Chine continentale" "Exclure LAN et Chine continentale" "Pattern PCRE sous-réseau ou hôte" "Nom de domaine et tous ses noms de sous-domaines" "Configurer…" "Désactivé" "Plugin inconnu %s" "Attention : ce plugin ne semble pas provenir d'une source fiable reconnue." "Plugin : %s" "La permission Appareil photo est nécessaire pour scanner le QR code." "Service VPN" "Paramètres manuels" "Avancé" "Mode Service" "Proxy seul" "Port proxy SOCKS5" "Port DNS local" "Port Transproxy" "Service Proxy" "Service Transproxy" "Permission de créer un service VPN refusée" "Activer Shadowsocks au démarrage. Plutôt recommandé d'utiliser le VPN permanent" "Activation-Désactivation sur écran verrouillé" "Vos informations de profil sélectionnées seront moins protégées" "URL de config en ligne" "Importer depuis un fichier…" "Mode nuit" "Suivre la config système" "Envoyer un email" "Exporter…" "Exporter dans un fichier…" "Le trafic HTTP en clair n'est pas sécurisé" "Partager sur le réseau local" "Vérifier la connectivité" "Veuillez installer un gestionnaire de fichier tel que MiXplorer" ================================================ FILE: core/src/main/res/values-ja/strings.xml ================================================ "ON/OFF" "リモートDNS" "送信済み: \t%3$s\t↑\t%1$s/s 受信済み: \t%4$s\t↓\t%2$s/s" "テスト中…" "成功: %dmsの遅延" "失敗しました:%s" "インターネット利用不可" "ステータスコード無効: #%d" "サーバー名" "サーバーアドレス" "リモートポート" "パスワード" "暗号化方式" "IPv6 プロキシ" "リモートサーバーに IPv6 パケットを転送" "プロキシ方式" "中国本土からアクセス不可なアドレス以外を迂回する" "アプリ別のVPNモードを使用" "アプリ別のVPNモードを設定" "ON" "バイパスモード(迂回モード)" "このモードを選択した場合、指定したアプリのパケットはプロキシを経由しない" "自動接続" "システム起動時にバックグラウンドで本サービスを開始" "使用するには ROOT 権限が必要" "ご利用のカーネルバージョンはサポートしておりません:%s < 3.7.1" "DNS 転送" "DNS プロトコルでリモードサーバーにパケットを転送" "バックグラウンドでサービスを開始しました" "サーバーが無効です" "リモートサーバーに接続できません" "中止" "停止中……" "バックグランドサービスの起動に失敗しました:%s" "VPN サービスの起動に失敗しました、デバイスの再起動を試みて下さい" "有効なプロファイルが見つかりません" "プロファイルを選択して下さい" "サーバアドレスやパスワードの入力が必要です" "接続" "プロファイル" "オプション設定" "よくある質問" "本アプリについて" "編集" "共有" "プロファイルを追加" "設定をすべてのプロファイルに適応する" "クリップボードに出力" "クリップボードからインポート" "クリップボードの出力に成功しました" "クリップボードの出力に失敗しました" "インポートに成功しました" "インポートに失敗しました" "プロファイル編集" "削除" "このプロファイルを削除しますか" "QR コード / NFC" "Shadowsocks用プロファイルを追加しますか" "QR コードを読み取る" "削除しました %d 個のアイテムを削除しました" "元に戻す" "サービスを開始" "現在のサーバーに接続する" "%s に接続" "%s に切り替え" "現在のプロファイルを使用する" "送信済み:" "受信済み:" "接続中…" "接続済み、タップして接続状況をチェック" "未接続" "カスタムルール" "ルールを追加…" "ルールを編集" "すべて" "LAN アドレスを迂回する" "中国本土のアドレスを迂回する" "LAN 及び中国本土のアドレスを迂回する" "中国本土のアドレス以外を迂回する" "サブネットまたはホスト名のPCREパターン" "ドメイン及び全てのサブドメイン" "プラグイン" "設定…" "無効" "不明なプラグイン %s" "警告:このプラグインは信頼されていないソースからの可能性があります" "プラグイン: %s" "QRコードをスキャンするにはカメラ権限が必要です。" "VPNサービス" "手動設定" "アドバンス" "サービスモード" "プロキシのみ" "トランスプロキシ" "SOCKS5プロキシポート" "ローカルDNSポート" "トランスプロキシポート" "プロキシサービス" "トランスプロキシサービス" "VPNサービス作成のアクセス許可が拒否されました" "起動時にShadowsockを有効。 VPN常時接続の使用をお勧めします" "ロック画面の切り替えを許可する" "選択されたプロファイル情報はより少ない保護を受けることになります" "オンライン設定のURL" "ファイルからのインポート" "夜間モード" "システムに基づく" "オート" "開く" "閉じる" "電子メール送信" "エクスポート" "ファイルへエクスポート" "クリアテキスト(平文)通信は安全ではありません" "LAN経由でシェア" "接続チェック中" "ファイルマネージャーをインストールしてください(MiXplorerなど)" "切り替え失敗" "UDPフォールバック" "ファイルから置き換え" "オフ" "モード" "従量制提示" "VPNは従量制であることをシステムに知らせる" "設定された%dホスト名" "購読する" "サブスクリプションを追加" "サブスクリプションを編集" "サブスクリプションを更新" "サブスクリプションサービス" "サブスクリプションの更新(%d / %d)" "サブスクリプション更新" ================================================ FILE: core/src/main/res/values-ko/strings.xml ================================================ "켜기/끄기" "원격 DNS" "송신: \t%3$s\t↑\t%1$s/s 수신: \t%4$s\t↓\t%2$s/s" "검사 중…" "인터넷 연결을 찾을 수 없습니다: %s" "인터넷에 연결할 수 없습니다" "오류 코드: #%d" "프로필 이름" "서버 주소" "원격 포트" "비밀번호" "암호화 방법" "IPv6 라우팅" "IPv6 트래픽도 원격으로 리다이렉트 합니다" "라우팅 대상" "GFW 리스트" "원하는 앱만 프락시 적용하기" "선택한 앱에만 프락시를 적용합니다" "활성화" "선택된 앱들만 프록시 적용 제외하기" "이 옵션을 활성화하면 선택된 앱들은 프락시를 사용하지 않습니다" "자동 접속" "장치가 켜질 때 Shadowsocks를 자동으로 활성화합니다" "루트 권한이 필요합니다" "지원하지 않는 버전의 커널입니다: %s < 3.7.1" "DNS 포워딩" "모든 DNS 요청을 외부로 포워딩 합니다" "Shadowsocks가 시작되었습니다" "잘못된 서버 이름입니다" "원격 서버에 접속하는 데 실패했습니다" "중지" "종료 중…" "VPN 서비스를 시작하는 데 실패했습니다. 장치를 재시작해 보세요." "올바른 프로필 데이터를 찾을 수 없습니다" "프로필을 선택해 주세요" "서버 주소와 비밀번호는 반드시 입력해야 합니다" "접속" "프로필" "설정" "자주 묻는 질문" "이 앱에 대하여" "수정" "공유" "프로필 추가" "설정을 모든 프로필에 적용" "클립보드로 내보내기" "클립보드에서 불러오기" "성공적으로 내보냈습니다" "내보내기에 실패했습니다" "성공적으로 불러왔습니다" "불러오는 데 실패했습니다" "프로필 설정" "삭제" "정말 이 프로필을 삭제하시겠습니까?" "QR 코드/NFC" "이 Shadowsocks 프로필을 추가하시겠습니까?" "QR 코드 읽기" "삭제했습니다" "실행 취소" "서비스 시작" "현재 서버에 연결" "%s로 연결" "%s로 바꾸기" "현재 프로필 사용" "송신:" "수신:" "연결 중…" "연결 완료. 탭 하면 연결 상태를 검사합니다." "연결되지 않음" "사용자 정의 규칙" "서브넷 혹은 호스트 이름 PCRE 패턴" "플러그인" "플러그인 설정…" "비활성화 됨" "알 수 없는 플러그인: %s" "경고: 이 플러그인은 신뢰할 수 있는 출처에서 온 것이 아닌 것 같습니다" "플러그인: %s" "QR 코드를 읽어 들이려면 카메라 권한이 필요합니다" ================================================ FILE: core/src/main/res/values-ru/strings.xml ================================================ "Подключение" "Удалённая DNS" "Отправлено: \t%3$s\t↑\t%1$s Получено: \t\t\t%4$s\t↓\t%2$s" "Проверка…" "Успешно: рукопожатие HTTPS заняло %d мс" "Сбой проверки интернет-соединения: %s" "Нет доступа к Интернету" "Код ошибки: #%d" "Имя профиля" "Сервер" "Удалённый порт" "Пароль" "Метод шифрования" "Маршрутизация IPv6" "Перенаправлять трафик IPv6 на удалённый сервер" "Маршрут" "Список GFW" "Работа VPN в конкретных приложениях" "Настроить работу VPN только в нужных приложениях" "Вкл." "Чёрный список" "Включите эту функцию для работы выбранных приложений в обход прокси" "Автоподключение" "Запускать Shadowsocks при включении/после обновления приложения, если оно было запущено до этого" "Переключение может запрашивать Root (права суперпользователя)" "Неподдерживаемая версия ядра: %s < 3.7.1" "Посылать DNS-запросы через UDP" "Требовать перенаправление UDP на удалённом сервере" "Shadowsocks запущен." "Неправильное имя сервера" "Ошибка при подключении к удалённому серверу" "Остановить" "Остановка…" "Не удалось запустить службу VPN. Возможно, следует перезагрузить устройство." "Не найдено действительных данных профиля." "Выберите профиль" "Прокси/пароль не должны быть пустыми" "Подключить" "Профили" "Настройки" "ЧаВо/FAQ" "https://github.com/shadowsocks/shadowsocks-android/blob/master/.github/faq.ru.md" "О приложении" "Изменить" "Поделиться" "Добавить профиль" "Применить ко всем профилям" "В буфер обмена" "Взять из буфера обмена" "Экспортировано успешно!" "Не удалось экспортировать." "Импортировано успешно!" "Не удалось импортировать." "Настройка профиля" "Удалить" "Удалить этот профиль?" "QR-код" "Добавить этот профиль Shadowsocks?" "Сканировать QR-код" "Удалён %d элемент" "Удалено элементов: %d" "Удалено элементов: %d" "Удалено элементов: %d" "Вернуть" "Запустить службу" "Подключиться к текущему серверу" "Подключиться к %s" "Переключиться на %s" "Использовать текущий профиль" "Отправлено:" "Получено:" "Соединение…" "Подключено, нажмите для проверки соединения" "Не подключено" "Свои правила" "Добавить правило…" "Изменить правило" "Все" "Все, кроме LAN" "Все, кроме Китая" "Все, кроме LAN и Китая" "Список Китая" "Подсеть или имя хоста, записанное регулярным выражением (PCRE)" "Доменное имя и все его поддомены" "Плагин" "Настроить…" "Нет" "Неизвестный плагин %s" "Внимание: этот плагин появился из непроверенного источника." "Плагин: %s" "Разрешение камеры требуется для сканирования QR-кодов." "Служба VPN" "Заполнить вручную" "Дополнительные" "Режим работы" "Только прокси" "Прозрачный прокси" "Порт SOCKS5-прокси" "Локальный порт DNS" "Порт прозрачного прокси" "Служба прокси" "Служба прозрачного прокси" "Нет разрешения на создание VPN-соединения" "Запускать Shadowsocks при включении устройства. Лучше использовать режим Always-on VPN (Постоянная VPN)." "%s/с" "Разрешить переключение на экране блокировки" "Данные в выбранном профиле будут хуже защищены" "URL конфигурации" "Взять из файла…" "Тёмная тема" "Как в системе" "Авто" "Вкл." "Откл." "Отправить письмо" "Экспорт…" "Сохранить в файл…" "Текстовый трафик HTTP не защищён" "Поделиться через LAN" "Проверить подключение" "Установите файловый менеджер (например, MiXplorer)" "Не удалось переключить" "Возврат к UDP" "Заменить файлом…" "Откл." "Режим" "Лимитное подключение" "Сообщить системе, что VPN с тарификацией трафика" "Настроено 1 имя хоста" "Настроено имён хостов: %d" "Настроено имён хостов: %d" "Настроено имён хостов: %d" "Подписки" "Добавить подписку" "Изменить подписку" "Обновить серверы из подписки" "Служба подписки" "Синхронизация подписок… (%d из %d)" "Завершение…" "Этот плагин может не работать с «Автоподключением»" ================================================ FILE: core/src/main/res/values-tr/strings.xml ================================================ "Aç/Kapa" "Uzaktan DNS" "Yüklendi: \t\t\t\t\t%3$s\t↑\t%1$s İndirildi: \t%4$s\t↓\t%2$s" "Test ediliyor…" "İnternet bağlantısı bulunamadı: %s" "İnternet Bağlantısı Bulunamadı" "Hata kodu: #%d" "Profil İsmi" "Sunucu" "Uzaktan Port" "Şifre" "Şifreleme Methodu" "IPv6 trafiğini remote'a yönlendir" "Rota" "GFW Listesi" "Uygulamalar VPN modu" "Seçili uygulamalar için VPN'i yapılandır" "Açık" "Bypass Modu" "Seçili uygulamaları bypass etmek için bu seçeneği açın" "Otomatik Bağlan" "Shadowsocks'ı cihazı başlatırken aç" "Açıp kapamak için ROOT yetkisi gerekiyor" "Desteklenmeyen kernel sürümü: %s < 3.7.1" "DNS yönlendirme" "Tüm DNS isteklerini remote'a yönlendir" "Shadowsocks başlatıldı." "Geçersiz sunucu ismi" "Remote sunucuya bağlanma hatası" "Dur" "Kapatılıyor…" "VPN servisi başlatılırken hata. Cihazınızı yeniden başlatmanız gerekebilir." "Geçerli profil verisi bulunamadı." "Lütfen profil seçiniz" "Proxy/Şifre alanları boş olmamalı" "Bağlan" "Profiller" "Ayarlar" "SSS" "Hakkında" "Düzenle" "Paylaş" "Profil Ekle" "Ayarları tüm profillere uygula" "Clipboarda ekle" "Clipboarddan al" "Ekleme başarılı!" "Ekleme başarısız." "Alım başarılı!" "Alım başarısız." "Profil ayarları" "Kaldır" "Bu profili kaldırmak istediğinize emin misiniz?" "QR kodu/NFC" "Bu Shadowsocks Profilini ekle?" "QR kodu tarat" "Kaldırıldı" "%d nesne kaldırıldı" "Geri al" "Servisi başlat" "Şu anki sunucuya bağlan" "%s 'a bağlan" "%s 'a çevir" "Şu anki profili kullan" "Gönderildi:" "Alındı:" "Bağlanılıyor…" "Bağlandı, test etmek için tıklayın" "Bağlı değil" "Kişisel kurallar" "Kural(lar) ekle…" "Kuralları düzenle" "Hepsi" "LAN bypassla" "Çin Anakara'sını bypassla" "Lan ve Çin Anakarası'nı bypassla" "Çin lıstesı" "Subnet veya Sunucu Adı PCRE düzeni" "Domain ve alt domain isimleri" "Eklenti" "Ayarla…" "Kapalı" "Bilinmeyen eklenti %s" "Dikkat: Bu eklenti bilinen bir kaynaktan değil." "Eklenti: %s" "QR kodu okumak için kamera izni gerekli." "VPN Servisi" "Manuel Ayarlar" "Gelişmiş" "Servis modu" "Sadece proxy" "SOCKS5 proxy portu" "Yerel DNS portu" "Transproxy portu" "Proxy Servisi" "Transproxy Servisi" "VPN servisi yaratma isteği reddedildi" "Shadowsockı cihazla beraber başlat. Bunun yerine her zaman açık VPN kullanılması tavsiye edilirö" "Ekran kitliyken açıp kapamaya izin ver." "Seçili profil bilginiz daha az korunacak." "Online ayarlar URL'i" "Dosyadan al…" "Gece modu" "Takip sistemi" "Oto" "Açık" "Kapalı" ================================================ FILE: core/src/main/res/values-uk/strings.xml ================================================ "Інтернет недоступний" "Назва профілю" "Сервер" "Пароль" "Метод шифрування" "Ввімк" "Автоматичне підключення" "Дозволити запуск Shadowsocks при ввімкнені пристрою чи оновленні застосунку, якщо він був запущений до того" "Зупинити" "Вимкнення…" "Не вдалося запустити службу VPN. Може знадобитися перезавантаження пристрою." "Не знайдено дійсних даних профілю." "Оберіть профіль" "Під'єднатися" "Профілі" "Налаштування" "ЧаПи" "Про застосунок" "Редагувати" "Поділитися" "Додати профіль" "Застосувати налаштування до всіх профілів" "Експортувати в буфер обміну" "Імпортувати з буферу обміну" "Експортовано успішно!" "Не вдалося експортувати." "Імпортовано успішно!" "Не вдалося імпортувати." "Налаштування профілю" "Видалити" "Ви дійсно хочете видалити цей профіль?" "QR-код" "Додати цей профіль Shadowsocks?" "Зчитати QR-код" "Видалено" "Видалено" "Видалено" "Видалено: %d" "Скасувати дію" "Запустити службу" "Під'єднатися до поточного сервера" "Під'єднатися до %s" "Перемкнутися на %s" "Використовувати поточний профіль" "Надіслано:" "Отримано:" "Під'єднання…" "Під'єднано. Торкніться, щоб перевірити з'єднання." "Не під'єднано" "Власні правила" "Додати правило…" "Редагувати правило" "Всі" "Оминати локальні мережі" "Оминати Китай" "Оминати локальні мережі та Китай" "Ім'я домену та всі імена піддоменів" "Плагін" "Налаштувати…" "Вимкнено" "Невідомий плагін: %s" "Увага: схоже, цей плагін не походить з надійного джерела." "Плагін: %s" "Для зчитування QR-коду необхідно дозволити використання камери." "Служба VPN" "Ручне налаштування" "Розширені" "Лише проксі" "Вмикати Shadowsocks при ввімкнені пристрою. Рекомендовано натомість використовувати постійно ввімкнену VPN." "%s/с" "Дозволити перемикання на екрані блокування" "Іморт з файлу…" "Нічний режим" "Згідно з налаштуваннями системи" "Автоматично" "Ввімк" "Вимк" "Надіслати лист" "Експорт…" "Експорт до файлу…" "Поділитися через локальну мережу" "Будь ласка, встановіть менеджер файлів, наприклад, MiXplorer" "Не вдалося перемкнути" "Замінити з файлу…" "Вимк" "Режим" "Цей плагін може не працювати з автоматичним під'єднанням" ================================================ FILE: core/src/main/res/values-zh-rCN/strings.xml ================================================ "开关" "远程 DNS" "上传: \t%3$s\t↑\t%1$s 下载: \t%4$s\t↓\t%2$s" "测试中…" "连接成功:HTTPS 握手延时 %d 毫秒" "失败:%s" "无互联网连接" "状态码无效(#%d)" "配置名称" "服务器" "远程端口" "密码" "加密方式" "IPv6 路由" "转发 IPv6 流量到远程服务器" "路由" "GFW 列表" "分应用 VPN" "允许部分应用绕过 VPN" "启用" "绕行" "绕过选择的应用" "自动连接" "系统启动或应用更新后自动恢复运行" "切换可能需要 ROOT 权限" "不支持的内核版本: %s < 3.7.1" "使用 UDP DNS" "需要远程服务器支持 UDP 转发" "后台服务已开始运行。" "服务器名无效" "无法连接远程服务器" "停止" "正在关闭…" "后台服务启动失败:%s" "VPN 服务启动失败。你可能需要重启设备。" "未找到有效的配置文件。" "请选择配置文件" "代理服务器地址及密码不能为空" "连接" "配置文件" "设置选项" "常见问题" "关于" "影梭 (Shadowsocks) %s" "编辑" "分享" "添加配置文件" "应用设置到所有配置文件" "导出至剪贴板" "从剪贴板导入" "导出至剪贴板成功" "导出至剪贴板失败" "导入成功" "导入失败" "配置文件设置" "删除" "您确定要删除此配置文件?" "二维码" "为影梭添加此配置文件?" "扫描二维码" "已删除 %d 项" "撤销" "启动服务" "连接到当前服务器" "连接到 %s" "切换到 %s" "使用当前配置" "发送:" "接收:" "连接中…" "已连接,点击测试连接" "未连接" "自定义规则" "添加规则…" "编辑规则" "全局" "绕过局域网地址" "绕过中国大陆地址" "绕过局域网及中国大陆地址" "仅代理中国大陆地址" "子网/域名 PCRE 正则表达式" "域名及其子域名" "插件" "配置…" "禁用" "未知插件 %s" "警告:该插件似乎并非来自已知的可信源。" "插件:%s" "扫描二维码需要获得使用相机的权限。" "VPN 服务" "手动设置" "高级选项" "服务模式" "仅代理" "透明代理" "SOCKS5 代理端口" "本地 DNS 端口" "透明代理端口" "代理模式" "透明代理模式" "创建 VPN 服务权限不足" "允许 Shadowsocks 随系统启动,建议使用始终开启的 VPN" "允许锁屏时切换" "选中的配置信息会不那么安全" "在线规则文件 URL" "从文件导入…" "夜间模式" "跟随系统" "自动" "开启" "关闭" "发送电子邮件" "导出…" "导出至文件…" "HTTP 明文流量不安全" "通过局域网分享" "检查连接" "请安装文件管理器,如 MiXplorer" "切换失败" "UDP 配置" "从文件替换…" "关" "模式" "网络限制" "使系统视此 VPN 为按流量计费" "配置了 %d 个主机名" "订阅" "添加订阅" "编辑订阅" "更新订阅" "订阅服务" "正在更新订阅 (%d / %d)" "订阅更新中" ================================================ FILE: core/src/main/res/values-zh-rTW/strings.xml ================================================ "影梭" "切換" "遠程 DNS" "傳送: \t%3$s\t↑\t%1$s/s 接收: \t%4$s\t↓\t%2$s/s" "測試中……" "成功: HTTPS 握手延遲 %d 毫秒" "偵測出網際網路連線失敗: %s" "無法使用網際網路" "錯誤碼: (#%d)" "設定檔名稱" "伺服器" "遠端連接埠" "密碼" "加密方法" "IPv6 路由" "向遠端重新導向 IPv6 流量" "路由" "GFW List" "個別應用程式的 VPN" "為已選擇的應用程式設定 VPN" "開" "略過模式" "啟用此選項,會略過已選擇的應用程式" "自動連線" "在裝置啟動時啟用 Shadowsocks" "切換需要 ROOT 權限" "不支援的核心版本:%s < 3.7.1" "DNS 轉送" "使用 UDP 向遠端轉送 DNS 封包" "Shadowsocks 已啟動。" "伺服器名稱無效" "連線至遠端伺服器失敗" "停止" "關閉中…" "後台服務啟動失敗:%s" "VPN 服務啟動失敗。您或許需要重新啟動您的裝置。" "未找到有效的設定檔資料。" "請選擇設定檔" "Proxy 或密碼不可以空白" "連線" "設定檔" "設定" "常見問題" "關於" "Shadowsocks %s" "編輯" "分享" "新增設定檔" "套用設定至所有設定檔" "匯出至剪貼簿" "從剪貼簿匯入" "成功匯出!" "匯出失敗。" "成功匯入!" "匯入失敗。" "設定檔設定" "刪除" "您確定要移除這個設定檔嗎?" "QR 碼 / NFC" "為 Shadowsocks 新增此設定檔?" "掃描 QR 碼" "已移除 %d 項" "復原" "啟動服務" "連線至目前的伺服器" "連線至 %s" "切換至 %s" "使用目前的設定檔" "傳送:" "接收:" "連線中…" "已連線,輕觸以檢查連線能力" "未連線" "自訂規則" "新增規則…" "編輯規則" "全部" "略過區域網路" "略過中國大陸" "略過區域網路及中國大陸" "China List" "子網路/主機名稱 PCRE 模式" "網域及其所有子網域" "外掛程式" "設定…" "停用" "未知插件 %s" "警告:此外掛程式似乎不是來自一個已知的受信任來源。" "外掛程式: %s" "掃描 QR 碼需要相機權限。" "VPN 服務" "手動設置" "高級" "服務模式" "仅代理" "透明代理" "SOCKS5 代理連接埠" "本地 DNS 連接埠" "透明代理連接埠" "代理服務" "透明代理服務" "没有權限創建 VPN 服務" "允許 Shadowsocks 隨系統啟動,建議使用始終開啟的 VPN" "允許鎖屏時切換" "選中的配置信息會不那麼安全" "在線規則文件 URL" "從文件導入…" "夜間模式" "跟隨系統" "自動" "開啟" "關閉" "發送電子郵件" "導出…" "導出至文件…" "HTTP 明文流量不安全" "通過局域網分享" "檢查連接" "請安裝文件管理器,如 MiXplorer" "切換失敗" "UDP 配置" "從文件替換…" "關" "模式" "網絡限制" "使系統視此 VPN 為按流量計費" "配置了 %d 個主機名" "訂閱" "添加訂閱" "編輯訂閱" "更新訂閱" "訂閱服務" "正在更新訂閱 (%d / %d)" "訂閱更新中" ================================================ FILE: core/src/main/res/xml/backup_descriptor.xml ================================================ ================================================ FILE: core/src/main/res/xml/default_configs.xml ================================================ proxy_url https://socks123.azureedge.net/get.php ================================================ FILE: core/src/main/res/xml/locales_config.xml ================================================ ================================================ FILE: core/src/main/res/xml/network_security_config.xml ================================================ ================================================ FILE: core/src/main/rust/linker-wrapper.py ================================================ from __future__ import absolute_import, print_function, unicode_literals import os import shlex import shutil import subprocess import sys rustcc = os.environ['RUST_ANDROID_GRADLE_CC'] if sys.platform == 'msys' or sys.platform == 'cygwin': import ctypes cygdll = 'cygwin1.dll' if sys.platform == 'cygwin' else 'msys-2.0.dll' cygwin = ctypes.cdll.LoadLibrary(cygdll) def win2posix(path): CCP_WIN_W_TO_POSIX = 3 size = cygwin.cygwin_conv_path(CCP_WIN_W_TO_POSIX, path, 0, 0) retval = ctypes.create_string_buffer(size) cygwin.cygwin_conv_path(CCP_WIN_W_TO_POSIX, path, retval, size) return retval.value.decode() rustcc = win2posix(rustcc) args = [rustcc, os.environ['RUST_ANDROID_GRADLE_CC_LINK_ARG']] + sys.argv[1:] def update_in_place(arglist): # The `gcc` library is not included starting from NDK version 23. # Work around by using `unwind` replacement. ndk_major_version = os.environ["CARGO_NDK_MAJOR_VERSION"] if ndk_major_version.isdigit(): if 23 <= int(ndk_major_version): for i, arg in enumerate(arglist): if arg.startswith("-lgcc"): # This is one way to preserve line endings. arglist[i] = "-lunwind" + arg[len("-lgcc") :] update_in_place(args) for arg in args: if arg.startswith("@"): fileargs = open(arg[1:], "r").read().splitlines(keepends=True) update_in_place(fileargs) open(arg[1:], "w").write("".join(fileargs)) linkargfileName = '' if (sys.platform == 'msys' or sys.platform == 'cygwin') and len(''.join(args)) > 8191: import codecs import tempfile def posix2win(path): CCP_POSIX_TO_WIN_W = 1 size = cygwin.cygwin_conv_path(CCP_POSIX_TO_WIN_W, str(path).encode(), 0, 0) retval = ctypes.create_unicode_buffer(size) cygwin.cygwin_conv_path(CCP_POSIX_TO_WIN_W, str(path).encode(), retval, size) return retval.value # response file should be use UTF-16 with BOM linkargfile = tempfile.NamedTemporaryFile(delete=False) linkargfile.write(codecs.BOM_UTF16_LE) linkargfile.write('\n'.join(sys.argv[1:]).encode('utf-16-le')) linkargfile.close() linkargfileName = linkargfile.name linkargfileNameW = posix2win(linkargfileName) args = [rustcc, os.environ['RUST_ANDROID_GRADLE_CC_LINK_ARG'], '@' + linkargfileNameW] # This only appears when the subprocess call fails, but it's helpful then. printable_cmd = " ".join(shlex.quote(arg) for arg in args) print(printable_cmd) code = subprocess.call(args) if code == 0: sys_argv = sys.argv if sys.platform == 'msys' or sys.platform == 'cygwin' or sys.platform == 'win32': linkargs = list(filter(lambda s: s.startswith('@') and s.find('linker-arguments') != -1, sys.argv[1:])) if linkargs != []: with open(linkargs[0][1:]) as f: sys_argv = f.read().splitlines() shutil.copyfile(sys_argv[sys_argv.index('-o') + 1], os.environ['RUST_ANDROID_GRADLE_TARGET']) if linkargfileName != '': os.unlink(linkargfileName) sys.exit(code) ================================================ FILE: core/src/test/java/com/github/shadowsocks/database/KeyValuePairTest.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.database import org.junit.Assert import org.junit.Test class KeyValuePairTest { @Test fun putAndGet() { val kvp = KeyValuePair() Assert.assertEquals(true, kvp.put(true).boolean) Assert.assertEquals(3f, kvp.put(3f).float) @Suppress("DEPRECATION") Assert.assertEquals(3L, kvp.put(3).long) Assert.assertEquals(3L, kvp.put(3L).long) Assert.assertEquals("3", kvp.put("3").string) val set = (0 until 3).map(Int::toString).toSet() Assert.assertEquals(set, kvp.put(set).stringSet) Assert.assertEquals(null, kvp.boolean) } } ================================================ FILE: detekt.yml ================================================ comments: active: false complexity: LabeledExpression: active: false TooManyFunctions: ignoreDeprecated: true ignoreOverridden: true exceptions: TooGenericExceptionCaught: active: false formatting: CommentSpacing: active: false Indentation: active: false naming: MemberNameEqualsClassName: active: false style: MagicNumber: active: false ================================================ FILE: gradle/gradle-daemon-jvm.properties ================================================ #This file is generated by updateDaemonJvm toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/ff1d4fc92bcfc9d3799beabb4e70cfa3/redirect toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/08ce182188ada0b93565cd9ca4a4ab32/redirect toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/c5760d82d08e6c26884debb23736ea57/redirect toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/08ce182188ada0b93565cd9ca4a4ab32/redirect toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/021e528cbed860c875a9016f29ee13c1/redirect toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/6141bf023dcc7a96c47cad75c59b054e/redirect toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/ff1d4fc92bcfc9d3799beabb4e70cfa3/redirect toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/08ce182188ada0b93565cd9ca4a4ab32/redirect toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/22860963aebba7217b72b98c4f9a5cfb/redirect toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/a6eb06d81d82a782734ef3b616ba2684/redirect toolchainVendor=JETBRAINS toolchainVersion=21 ================================================ FILE: gradle/libs.versions.toml ================================================ [versions] camera = "1.5.2" coroutines = "1.10.2" lifecycle = "2.10.0" room = "2.8.4" work = "2.11.0" [libraries] android-gradle = "com.android.tools.build:gradle:8.13.2" androidx-browser = "androidx.browser:browser:1.9.0" androidx-camera-camera2 = { module = "androidx.camera:camera-camera2", version.ref = "camera" } androidx-camera-lifecycle = { module = "androidx.camera:camera-lifecycle", version.ref = "camera" } androidx-camera-view = { module = "androidx.camera:camera-view", version.ref = "camera" } androidx-concurrent-futures-ktx = "androidx.concurrent:concurrent-futures-ktx:1.3.0" androidx-constraintlayout = "androidx.constraintlayout:constraintlayout:2.2.1" androidx-core-ktx = "androidx.core:core-ktx:1.17.0" androidx-espresso-core = "androidx.test.espresso:espresso-core:3.7.0" androidx-fragment-ktx = "androidx.fragment:fragment-ktx:1.8.9" androidx-junit-ktx = "androidx.test.ext:junit-ktx:1.3.0" androidx-leanback-preference = "androidx.leanback:leanback-preference:1.2.0" androidx-lifecycle-livedata-core-ktx = { module = "androidx.lifecycle:lifecycle-livedata-core-ktx", version.ref = "lifecycle" } androidx-lifecycle-runtime-ktx = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "lifecycle" } androidx-preference = "androidx.preference:preference:1.2.1" androidx-room-compiler = { module = "androidx.room:room-compiler", version.ref = "room" } androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = "room" } androidx-room-testing = { module = "androidx.room:room-testing", version.ref = "room" } androidx-test-runner = "androidx.test:runner:1.7.0" androidx-work-multiprocess = { module = "androidx.work:work-multiprocess", version.ref = "work" } androidx-work-runtime-ktx = { module = "androidx.work:work-runtime-ktx", version.ref = "work" } barcode-scanning = "com.google.mlkit:barcode-scanning:17.3.0" desugar = "com.android.tools:desugar_jdk_libs:2.1.5" dnsjava = "dnsjava:dnsjava:3.6.4" dokka = "org.jetbrains.dokka:dokka-gradle-plugin:2.1.0" fastscroll = "me.zhanghai.android.fastscroll:library:1.3.0" firebase-analytics = "com.google.firebase:firebase-analytics:23.0.0" firebase-crashlytics = "com.google.firebase:firebase-crashlytics:20.0.4" firebase-crashlytics-gradle = "com.google.firebase:firebase-crashlytics-gradle:3.0.6" google-oss-licenses = "com.google.android.gms:oss-licenses-plugin:0.10.10" google-services = "com.google.gms:google-services:4.4.4" gradle-maven-publish = "com.vanniktech:gradle-maven-publish-plugin:0.36.0" junit = "junit:junit:4.13.2" kotlin-gradle = "org.jetbrains.kotlin:kotlin-gradle-plugin:2.2.0" kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "coroutines" } kotlinx-coroutines-play-services = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-play-services", version.ref = "coroutines" } locale-api = "com.twofortyfouram:android-plugin-api-for-locale:1.0.4" material = "com.google.android.material:material:1.13.0" play-services-oss-licenses = "com.google.android.gms:play-services-oss-licenses:17.3.0" preferencex-simplemenu = "com.takisoft.preferencex:preferencex-simplemenu:1.1.0" rust-android = "org.mozilla.rust-android-gradle:plugin:0.9.6" timber = "com.jakewharton.timber:timber:5.0.1" zxing = "com.google.zxing:core:3.5.4" [plugins] ksp = "com.google.devtools.ksp:2.3.4" versions = "com.github.ben-manes.versions:0.53.0" ================================================ FILE: gradle/wrapper/gradle-wrapper.properties ================================================ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists ================================================ FILE: gradle.properties ================================================ # Project-wide Gradle settings. # IDE (e.g. Android Studio) users: # Gradle settings configured through the IDE *will override* # any settings specified in this file. # For more details on how to configure your build environment visit # http://www.gradle.org/docs/current/userguide/build_environment.html # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. android.enableJetifier=true android.enableR8.fullMode=true android.enableResourceOptimizations=false android.nonTransitiveRClass=false android.useAndroidX=true # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC # systemProp.http.proxyHost=127.0.0.1 # systemProp.http.proxyPort=1080 ================================================ FILE: gradlew ================================================ #!/bin/sh # # Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # SPDX-License-Identifier: Apache-2.0 # ############################################################################## # # Gradle start up script for POSIX generated by Gradle. # # Important for running: # # (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is # noncompliant, but you have some other compliant shell such as ksh or # bash, then to run this script, type that shell name before the whole # command line, like: # # ksh Gradle # # Busybox and similar reduced shells will NOT work, because this script # requires all of these POSIX shell features: # * functions; # * expansions «$var», «${var}», «${var:-default}», «${var+SET}», # «${var#prefix}», «${var%suffix}», and «$( cmd )»; # * compound commands having a testable exit status, especially «case»; # * various built-in commands including «command», «set», and «ulimit». # # Important for patching: # # (2) This script targets any POSIX shell, so it avoids extensions provided # by Bash, Ksh, etc; in particular arrays are avoided. # # The "traditional" practice of packing multiple parameters into a # space-separated string is a well documented source of bugs and security # problems, so this is (mostly) avoided, by progressively accumulating # options in "$@", and eventually passing that to Java. # # Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, # and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; # see the in-line comments for details. # # There are tweaks for specific operating systems such as AIX, CygWin, # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template # https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. # ############################################################################## # Attempt to set APP_HOME # Resolve links: $0 may be a link app_path=$0 # Need this for daisy-chained symlinks. while APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path [ -h "$app_path" ] do ls=$( ls -ld "$app_path" ) link=${ls#*' -> '} case $link in #( /*) app_path=$link ;; #( *) app_path=$APP_HOME$link ;; esac done # This is normally unused # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum warn () { echo "$*" } >&2 die () { echo echo "$*" echo exit 1 } >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false case "$( uname )" in #( CYGWIN* ) cygwin=true ;; #( Darwin* ) darwin=true ;; #( MSYS* | MINGW* ) msys=true ;; #( NONSTOP* ) nonstop=true ;; esac CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables JAVACMD=$JAVA_HOME/jre/sh/java else JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else JAVACMD=java if ! command -v java >/dev/null 2>&1 then die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi fi # Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac fi # Collect all arguments for the java command, stacking in reverse order: # * args from the command line # * the main class name # * -classpath # * -D...appname settings # * --module-path (only if needed) # * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. # For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) JAVACMD=$( cygpath --unix "$JAVACMD" ) # Now convert the arguments - kludge to limit ourselves to /bin/sh for arg do if case $arg in #( -*) false ;; # don't mess with options #( /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath [ -e "$t" ] ;; #( *) false ;; esac then arg=$( cygpath --path --ignore --mixed "$arg" ) fi # Roll the args list around exactly as many times as the number of # args, so each arg winds up back in the position where it started, but # possibly modified. # # NB: a `for` loop captures its iteration list before it begins, so # changing the positional parameters here affects neither the number of # iterations, nor the values presented in `arg`. shift # remove old arg set -- "$@" "$arg" # push replacement arg done fi # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Collect all arguments for the java command: # * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # and any embedded shellness will be escaped. # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ -classpath "$CLASSPATH" \ -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" # Stop when "xargs" is not available. if ! command -v xargs >/dev/null 2>&1 then die "xargs is not available" fi # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. # # In Bash we could simply go: # # readarray ARGS < <( xargs -n1 <<<"$var" ) && # set -- "${ARGS[@]}" "$@" # # but POSIX shell has neither arrays nor command substitution, so instead we # post-process each arg (as a line of input to sed) to backslash-escape any # character that might be a shell metacharacter, then use eval to reverse # that process (while maintaining the separation between arguments), and wrap # the whole thing up as a single "set" statement. # # This will of course break if any of these variables contains a newline or # an unmatched quote. # eval "set -- $( printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | xargs -n1 | sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | tr '\n' ' ' )" '"$@"' exec "$JAVACMD" "$@" ================================================ FILE: gradlew.bat ================================================ @rem @rem Copyright 2015 the original author or authors. @rem @rem Licensed under the Apache License, Version 2.0 (the "License"); @rem you may not use this file except in compliance with the License. @rem You may obtain a copy of the License at @rem @rem https://www.apache.org/licenses/LICENSE-2.0 @rem @rem Unless required by applicable law or agreed to in writing, software @rem distributed under the License is distributed on an "AS IS" BASIS, @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem @rem SPDX-License-Identifier: Apache-2.0 @rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @rem @rem ########################################################################## @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 if "%DIRNAME%"=="" set DIRNAME=. @rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @rem Resolve any "." and ".." in APP_HOME to make it shorter. for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute echo. 1>&2 echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 echo. 1>&2 echo Please set the JAVA_HOME variable in your environment to match the 1>&2 echo location of your Java installation. 1>&2 goto fail :findJavaFromJavaHome set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute echo. 1>&2 echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 echo. 1>&2 echo Please set the JAVA_HOME variable in your environment to match the 1>&2 echo location of your Java installation. 1>&2 goto fail :execute @rem Setup the command line set CLASSPATH= @rem Execute Gradle "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! set EXIT_CODE=%ERRORLEVEL% if %EXIT_CODE% equ 0 set EXIT_CODE=1 if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal :omega ================================================ FILE: mobile/.gitignore ================================================ /build ================================================ FILE: mobile/build.gradle.kts ================================================ plugins { id("com.android.application") id("com.google.android.gms.oss-licenses-plugin") id("com.google.gms.google-services") id("com.google.firebase.crashlytics") kotlin("android") id("kotlin-parcelize") } setupApp() android { namespace = "com.github.shadowsocks" defaultConfig.applicationId = "com.github.shadowsocks" } dependencies { coreLibraryDesugaring(libs.desugar) implementation(libs.androidx.browser) implementation(libs.androidx.camera.camera2) implementation(libs.androidx.camera.lifecycle) implementation(libs.androidx.camera.view) implementation(libs.androidx.concurrent.futures.ktx) implementation(libs.androidx.constraintlayout) implementation(libs.androidx.lifecycle.runtime.ktx) implementation(libs.barcode.scanning) implementation(libs.fastscroll) implementation(libs.locale.api) implementation(libs.preferencex.simplemenu) implementation(libs.zxing) testImplementation(libs.junit) androidTestImplementation(libs.androidx.espresso.core) androidTestImplementation(libs.androidx.test.runner) } ================================================ FILE: mobile/google-services.json ================================================ { "project_info": { "project_number": "261400168171", "firebase_url": "https://admob-app-id-3330146721.firebaseio.com", "project_id": "admob-app-id-3330146721", "storage_bucket": "admob-app-id-3330146721.appspot.com" }, "client": [ { "client_info": { "mobilesdk_app_id": "1:261400168171:android:dbdd6331c434162f", "android_client_info": { "package_name": "com.github.shadowsocks" } }, "oauth_client": [ { "client_id": "261400168171-pcgrp7aprh210vvfc6vut3am2n3chopq.apps.googleusercontent.com", "client_type": 1, "android_info": { "package_name": "com.github.shadowsocks", "certificate_hash": "7309a97ff2680788113c6d0ce53898b911885ff5" } }, { "client_id": "261400168171-sfik8o3pj7e243583olorh7s5974vab1.apps.googleusercontent.com", "client_type": 1, "android_info": { "package_name": "com.github.shadowsocks", "certificate_hash": "58a90f84cfe99d4280aec677c9a1292fae131677" } }, { "client_id": "261400168171-g7aelv5bu012ojr7dod7lq09c9anjimh.apps.googleusercontent.com", "client_type": 3 } ], "api_key": [ { "current_key": "AIzaSyCee3fAad7nb3YsxeUO9mqqHFfAvsSCbVs" } ], "services": { "appinvite_service": { "other_platform_oauth_client": [ { "client_id": "261400168171-g7aelv5bu012ojr7dod7lq09c9anjimh.apps.googleusercontent.com", "client_type": 3 } ] } }, "admob_app_id": "ca-app-pub-3283768469187309~3571758745" }, { "client_info": { "mobilesdk_app_id": "1:261400168171:android:0dbac07695d93817", "android_client_info": { "package_name": "com.github.shadowsocks.tv" } }, "oauth_client": [ { "client_id": "261400168171-g7aelv5bu012ojr7dod7lq09c9anjimh.apps.googleusercontent.com", "client_type": 3 } ], "api_key": [ { "current_key": "AIzaSyCee3fAad7nb3YsxeUO9mqqHFfAvsSCbVs" } ], "services": { "appinvite_service": { "other_platform_oauth_client": [ { "client_id": "261400168171-g7aelv5bu012ojr7dod7lq09c9anjimh.apps.googleusercontent.com", "client_type": 3 } ] } } } ], "configuration_version": "1" } ================================================ FILE: mobile/src/main/AndroidManifest.xml ================================================ ================================================ FILE: mobile/src/main/java/com/github/shadowsocks/AboutFragment.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks import android.content.Intent import android.os.Bundle import android.text.SpannableStringBuilder import android.text.method.LinkMovementMethod import android.text.style.ClickableSpan import android.text.style.URLSpan import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TextView import androidx.core.net.toUri import androidx.core.text.HtmlCompat import androidx.core.text.parseAsHtml import androidx.core.view.ViewCompat import com.github.shadowsocks.widget.ListHolderListener import com.github.shadowsocks.widget.MainListListener import com.google.android.gms.oss.licenses.OssLicensesMenuActivity class AboutFragment : ToolbarFragment() { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? = inflater.inflate(R.layout.layout_about, container, false) override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) ViewCompat.setOnApplyWindowInsetsListener(view, ListHolderListener) toolbar.title = getString(R.string.about_title, BuildConfig.VERSION_NAME) view.findViewById(R.id.tv_about).apply { ViewCompat.setOnApplyWindowInsetsListener(this, MainListListener) text = SpannableStringBuilder(resources.openRawResource(R.raw.about).bufferedReader().readText() .parseAsHtml(HtmlCompat.FROM_HTML_SEPARATOR_LINE_BREAK_LIST_ITEM)).apply { for (span in getSpans(0, length, URLSpan::class.java)) { setSpan(object : ClickableSpan() { override fun onClick(view: View) = when { span.url.startsWith("#") -> { startActivity(Intent(context, OssLicensesMenuActivity::class.java)) } span.url.startsWith("mailto:") -> { startActivity(Intent.createChooser(Intent().apply { action = Intent.ACTION_SENDTO data = span.url.toUri() }, getString(R.string.send_email))) } else -> (activity as MainActivity).launchUrl(span.url) } }, getSpanStart(span), getSpanEnd(span), getSpanFlags(span)) removeSpan(span) } } movementMethod = LinkMovementMethod.getInstance() } } } ================================================ FILE: mobile/src/main/java/com/github/shadowsocks/App.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks import android.app.Application import android.content.res.Configuration import androidx.appcompat.app.AppCompatDelegate class App : Application() { override fun onCreate() { super.onCreate() Core.init(this, MainActivity::class) AppCompatDelegate.setCompatVectorFromResourcesEnabled(true) } override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) Core.updateNotificationChannels() } } ================================================ FILE: mobile/src/main/java/com/github/shadowsocks/AppManager.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks import android.Manifest import android.animation.Animator import android.animation.AnimatorListenerAdapter import android.annotation.SuppressLint import android.content.BroadcastReceiver import android.content.Intent import android.content.pm.ApplicationInfo import android.content.pm.PackageInfo import android.content.pm.PackageManager import android.graphics.drawable.Drawable import android.os.Bundle import android.util.SparseBooleanArray import android.view.* import android.widget.Filter import android.widget.Filterable import android.widget.ImageView import android.widget.RadioGroup import android.widget.SearchView import android.widget.Switch import android.widget.TextView import androidx.annotation.UiThread import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.Toolbar import androidx.core.util.set import androidx.core.view.ViewCompat import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.DefaultItemAnimator import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.github.shadowsocks.Core.app import com.github.shadowsocks.database.ProfileManager import com.github.shadowsocks.preference.DataStore import com.github.shadowsocks.utils.DirectBoot import com.github.shadowsocks.utils.listenForPackageChanges import com.github.shadowsocks.widget.ListHolderListener import com.github.shadowsocks.widget.ListListener import com.google.android.material.snackbar.Snackbar import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.ensureActive import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import me.zhanghai.android.fastscroll.FastScrollerBuilder import me.zhanghai.android.fastscroll.PopupTextProvider import kotlin.coroutines.coroutineContext class AppManager : AppCompatActivity() { companion object { @SuppressLint("StaticFieldLeak") private var instance: AppManager? = null private const val SWITCH = "switch" private var receiver: BroadcastReceiver? = null private var cachedApps: Map? = null private fun getCachedApps(pm: PackageManager) = synchronized(AppManager) { if (receiver == null) receiver = app.listenForPackageChanges { synchronized(AppManager) { receiver = null cachedApps = null } instance?.loadApps() } // Labels and icons can change on configuration (locale, etc.) changes, therefore they are not cached. val cachedApps = cachedApps ?: pm.getInstalledPackages( PackageManager.GET_PERMISSIONS or PackageManager.MATCH_UNINSTALLED_PACKAGES) .filter { when (it.packageName) { app.packageName -> false "android" -> true else -> it.requestedPermissions?.contains(Manifest.permission.INTERNET) == true } } .associateBy { it.packageName } this.cachedApps = cachedApps cachedApps } } private class ProxiedApp(private val pm: PackageManager, private val appInfo: ApplicationInfo, val packageName: String) { val name: CharSequence = appInfo.loadLabel(pm) // cached for sorting val icon: Drawable get() = appInfo.loadIcon(pm) val uid get() = appInfo.uid } private inner class AppViewHolder(view: View) : RecyclerView.ViewHolder(view), View.OnClickListener { private lateinit var item: ProxiedApp init { view.setOnClickListener(this) } fun bind(app: ProxiedApp) { item = app itemView.findViewById(R.id.itemicon).setImageDrawable(app.icon) itemView.findViewById(R.id.title).text = app.name itemView.findViewById(R.id.desc).text = "${app.packageName} (${app.uid})" itemView.findViewById(R.id.itemcheck).isChecked = isProxiedApp(app) } fun handlePayload(payloads: List) { if (payloads.contains(SWITCH)) itemView.findViewById(R.id.itemcheck).isChecked = isProxiedApp(item) } override fun onClick(v: View?) { if (isProxiedApp(item)) proxiedUids.delete(item.uid) else proxiedUids[item.uid] = true DataStore.individual = apps.filter { isProxiedApp(it) }.joinToString("\n") { it.packageName } DataStore.dirty = true appsAdapter.notifyItemRangeChanged(0, appsAdapter.itemCount, SWITCH) } } private inner class AppsAdapter : RecyclerView.Adapter(), Filterable, PopupTextProvider { private var filteredApps = apps suspend fun reload() { apps = getCachedApps(packageManager).map { (packageName, packageInfo) -> coroutineContext[Job]!!.ensureActive() ProxiedApp(packageManager, packageInfo.applicationInfo!!, packageName) }.sortedWith(compareBy({ !isProxiedApp(it) }, { it.name.toString() })) } override fun onBindViewHolder(holder: AppViewHolder, position: Int) = holder.bind(filteredApps[position]) override fun onBindViewHolder(holder: AppViewHolder, position: Int, payloads: List) { if (payloads.isNotEmpty()) { @Suppress("UNCHECKED_CAST") holder.handlePayload(payloads as List) return } onBindViewHolder(holder, position) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AppViewHolder = AppViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.layout_apps_item, parent, false)) override fun getItemCount(): Int = filteredApps.size private val filterImpl = object : Filter() { override fun performFiltering(constraint: CharSequence) = FilterResults().apply { val filteredApps = if (constraint.isEmpty()) apps else apps.filter { it.name.contains(constraint, true) || it.packageName.contains(constraint, true) || it.uid.toString().contains(constraint) } count = filteredApps.size values = filteredApps } override fun publishResults(constraint: CharSequence, results: FilterResults) { @Suppress("UNCHECKED_CAST") filteredApps = results.values as List notifyDataSetChanged() } } override fun getFilter(): Filter = filterImpl override fun getPopupText(view: View, position: Int) = filteredApps[position].name.firstOrNull()?.toString() ?: "" } private val loading by lazy { findViewById(R.id.loading) } private lateinit var toolbar: Toolbar private lateinit var bypassGroup: RadioGroup private lateinit var list: RecyclerView private lateinit var search: SearchView private val proxiedUids = SparseBooleanArray() private var loader: Job? = null private var apps = emptyList() private val appsAdapter = AppsAdapter() private val shortAnimTime by lazy { resources.getInteger(android.R.integer.config_shortAnimTime).toLong() } private fun View.crossFadeFrom(other: View) { clearAnimation() other.clearAnimation() if (visibility == View.VISIBLE && other.visibility == View.GONE) return alpha = 0F visibility = View.VISIBLE animate().alpha(1F).duration = shortAnimTime other.animate().alpha(0F).setListener(object : AnimatorListenerAdapter() { override fun onAnimationEnd(animation: Animator) { other.visibility = View.GONE } }).duration = shortAnimTime } private fun initProxiedUids(str: String = DataStore.individual) { proxiedUids.clear() val apps = getCachedApps(packageManager) for (line in str.lineSequence()) proxiedUids[(apps[line] ?: continue).applicationInfo!!.uid] = true } private fun isProxiedApp(app: ProxiedApp) = proxiedUids[app.uid] @UiThread private fun loadApps() { loader?.cancel() loader = lifecycleScope.launch { loading.crossFadeFrom(list) val adapter = list.adapter as AppsAdapter withContext(Dispatchers.IO) { adapter.reload() } adapter.filter.filter(search.query) list.crossFadeFrom(loading) } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.layout_apps) ListHolderListener.setup(this) toolbar = findViewById(R.id.toolbar) setSupportActionBar(toolbar) supportActionBar!!.setDisplayHomeAsUpEnabled(true) if (!DataStore.proxyApps) { DataStore.proxyApps = true DataStore.dirty = true } bypassGroup = findViewById(R.id.bypassGroup) bypassGroup.check(if (DataStore.bypass) R.id.btn_bypass else R.id.btn_on) bypassGroup.setOnCheckedChangeListener { _, checkedId -> DataStore.dirty = true when (checkedId) { R.id.btn_off -> { DataStore.proxyApps = false finish() } R.id.btn_on -> DataStore.bypass = false R.id.btn_bypass -> DataStore.bypass = true } } initProxiedUids() list = findViewById(R.id.list) ViewCompat.setOnApplyWindowInsetsListener(list, ListListener) list.layoutManager = LinearLayoutManager(this, RecyclerView.VERTICAL, false) list.itemAnimator = DefaultItemAnimator() list.adapter = appsAdapter FastScrollerBuilder(list).useMd2Style().build() search = findViewById(R.id.search) search.setOnQueryTextListener(object : SearchView.OnQueryTextListener { override fun onQueryTextSubmit(query: String?) = false override fun onQueryTextChange(newText: String?) = true.also { appsAdapter.filter.filter(newText) } }) instance = this loadApps() } override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.app_manager_menu, menu) return true } override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { R.id.action_apply_all -> { val profiles = ProfileManager.getAllProfiles() if (profiles != null) { val proxiedAppString = DataStore.individual profiles.forEach { it.individual = proxiedAppString it.bypass = DataStore.bypass ProfileManager.updateProfile(it) } if (DataStore.directBootAware) DirectBoot.update() Snackbar.make(list, R.string.action_apply_all, Snackbar.LENGTH_LONG).show() } else Snackbar.make(list, R.string.action_export_err, Snackbar.LENGTH_LONG).show() return true } R.id.action_export_clipboard -> { val success = Core.trySetPrimaryClip("${DataStore.bypass}\n${DataStore.individual}") Snackbar.make(list, if (success) R.string.action_export_msg else R.string.action_export_err, Snackbar.LENGTH_LONG).show() return true } R.id.action_import_clipboard -> { val proxiedAppString = Core.clipboard.primaryClip?.getItemAt(0)?.text?.toString() if (!proxiedAppString.isNullOrEmpty()) { val i = proxiedAppString.indexOf('\n') try { val (enabled, apps) = if (i < 0) { proxiedAppString to "" } else proxiedAppString.substring(0, i) to proxiedAppString.substring(i + 1) bypassGroup.check(if (enabled.toBoolean()) R.id.btn_bypass else R.id.btn_on) DataStore.individual = apps DataStore.dirty = true Snackbar.make(list, R.string.action_import_msg, Snackbar.LENGTH_LONG).show() initProxiedUids(apps) appsAdapter.notifyItemRangeChanged(0, appsAdapter.itemCount, SWITCH) return true } catch (_: IllegalArgumentException) { } } Snackbar.make(list, R.string.action_import_err, Snackbar.LENGTH_LONG).show() } } return super.onOptionsItemSelected(item) } override fun supportNavigateUpTo(upIntent: Intent) = super.supportNavigateUpTo(upIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) override fun onKeyUp(keyCode: Int, event: KeyEvent?) = if (keyCode == KeyEvent.KEYCODE_MENU) { if (toolbar.isOverflowMenuShowing) toolbar.hideOverflowMenu() else toolbar.showOverflowMenu() } else super.onKeyUp(keyCode, event) override fun onDestroy() { instance = null loader?.cancel() super.onDestroy() } } ================================================ FILE: mobile/src/main/java/com/github/shadowsocks/GlobalSettingsFragment.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.view.ViewCompat import com.github.shadowsocks.widget.ListHolderListener class GlobalSettingsFragment : ToolbarFragment() { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? = inflater.inflate(R.layout.layout_global_settings, container, false) override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) ViewCompat.setOnApplyWindowInsetsListener(view, ListHolderListener) toolbar.setTitle(R.string.settings) } } ================================================ FILE: mobile/src/main/java/com/github/shadowsocks/GlobalSettingsPreferenceFragment.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks import android.os.Build import android.os.Bundle import android.view.View import androidx.core.view.ViewCompat import androidx.preference.EditTextPreference import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat import androidx.preference.SwitchPreference import com.github.shadowsocks.bg.BaseService import com.github.shadowsocks.preference.DataStore import com.github.shadowsocks.preference.EditTextPreferenceModifiers import com.github.shadowsocks.utils.DirectBoot import com.github.shadowsocks.utils.Key import com.github.shadowsocks.utils.remove import com.github.shadowsocks.widget.MainListListener class GlobalSettingsPreferenceFragment : PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { preferenceManager.preferenceDataStore = DataStore.publicStore DataStore.initGlobal() addPreferencesFromResource(R.xml.pref_global) findPreference(Key.persistAcrossReboot)!!.setOnPreferenceChangeListener { _, value -> BootReceiver.enabled = value as Boolean true } val canToggleLocked = findPreference(Key.directBootAware)!! if (Build.VERSION.SDK_INT >= 24) canToggleLocked.setOnPreferenceChangeListener { _, newValue -> if (Core.directBootSupported && newValue as Boolean) DirectBoot.update() else DirectBoot.clean() true } else canToggleLocked.remove() val serviceMode = findPreference(Key.serviceMode)!! val portProxy = findPreference(Key.portProxy)!! portProxy.setOnBindEditTextListener(EditTextPreferenceModifiers.Port) val portLocalDns = findPreference(Key.portLocalDns)!! portLocalDns.setOnBindEditTextListener(EditTextPreferenceModifiers.Port) val portTransproxy = findPreference(Key.portTransproxy)!! portTransproxy.setOnBindEditTextListener(EditTextPreferenceModifiers.Port) val onServiceModeChange = Preference.OnPreferenceChangeListener { _, newValue -> portTransproxy.isEnabled = newValue as String? == Key.modeTransproxy true } val listener: (BaseService.State) -> Unit = { val stopped = it == BaseService.State.Stopped serviceMode.isEnabled = stopped portProxy.isEnabled = stopped portLocalDns.isEnabled = stopped if (stopped) onServiceModeChange.onPreferenceChange(serviceMode, DataStore.serviceMode) else { portTransproxy.isEnabled = false } } listener((activity as MainActivity).state) MainActivity.stateListener = listener serviceMode.onPreferenceChangeListener = onServiceModeChange } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) ViewCompat.setOnApplyWindowInsetsListener(listView, MainListListener) } override fun onDestroy() { MainActivity.stateListener = null super.onDestroy() } } ================================================ FILE: mobile/src/main/java/com/github/shadowsocks/MainActivity.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks import android.content.ActivityNotFoundException import android.os.Bundle import android.os.RemoteException import android.view.KeyCharacterMap import android.view.KeyEvent import android.view.MenuItem import android.view.View import android.view.ViewGroup import androidx.activity.OnBackPressedCallback import androidx.appcompat.app.AppCompatActivity import androidx.browser.customtabs.CustomTabColorSchemeParams import androidx.browser.customtabs.CustomTabsIntent import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.core.content.ContextCompat import androidx.core.net.toUri import androidx.core.view.* import androidx.drawerlayout.widget.DrawerLayout import androidx.preference.PreferenceDataStore import com.github.shadowsocks.acl.CustomRulesFragment import com.github.shadowsocks.aidl.IShadowsocksService import com.github.shadowsocks.aidl.ShadowsocksConnection import com.github.shadowsocks.aidl.TrafficStats import com.github.shadowsocks.bg.BaseService import com.github.shadowsocks.preference.DataStore import com.github.shadowsocks.preference.OnPreferenceDataStoreChangeListener import com.github.shadowsocks.subscription.SubscriptionFragment import com.github.shadowsocks.utils.Key import com.github.shadowsocks.utils.StartService import com.github.shadowsocks.widget.ListHolderListener import com.github.shadowsocks.widget.ServiceButton import com.github.shadowsocks.widget.StatsBar import com.google.android.material.navigation.NavigationView import com.google.android.material.snackbar.Snackbar import com.google.firebase.analytics.FirebaseAnalytics class MainActivity : AppCompatActivity(), ShadowsocksConnection.Callback, OnPreferenceDataStoreChangeListener, NavigationView.OnNavigationItemSelectedListener { companion object { var stateListener: ((BaseService.State) -> Unit)? = null } // UI private lateinit var fab: ServiceButton private lateinit var stats: StatsBar internal lateinit var drawer: DrawerLayout private lateinit var navigation: NavigationView lateinit var snackbar: CoordinatorLayout private set fun snackbar(text: CharSequence = "") = Snackbar.make(snackbar, text, Snackbar.LENGTH_LONG).apply { anchorView = fab } private val customTabsIntent by lazy { CustomTabsIntent.Builder().apply { setColorScheme(CustomTabsIntent.COLOR_SCHEME_SYSTEM) setColorSchemeParams(CustomTabsIntent.COLOR_SCHEME_LIGHT, CustomTabColorSchemeParams.Builder().apply { setToolbarColor(ContextCompat.getColor(this@MainActivity, R.color.light_color_primary)) }.build()) setColorSchemeParams(CustomTabsIntent.COLOR_SCHEME_DARK, CustomTabColorSchemeParams.Builder().apply { setToolbarColor(ContextCompat.getColor(this@MainActivity, R.color.dark_color_primary)) }.build()) }.build() } fun launchUrl(uri: String) = try { customTabsIntent.launchUrl(this, uri.toUri()) } catch (_: ActivityNotFoundException) { snackbar(uri).show() } // service var state = BaseService.State.Idle override fun stateChanged(state: BaseService.State, profileName: String?, msg: String?) = changeState(state, msg) override fun trafficUpdated(profileId: Long, stats: TrafficStats) { if (profileId == 0L) this@MainActivity.stats.updateTraffic( stats.txRate, stats.rxRate, stats.txTotal, stats.rxTotal) if (state != BaseService.State.Stopping) { (supportFragmentManager.findFragmentById(R.id.fragment_holder) as? ProfilesFragment) ?.onTrafficUpdated(profileId, stats) } } override fun trafficPersisted(profileId: Long) { ProfilesFragment.instance?.onTrafficPersisted(profileId) } private fun changeState(state: BaseService.State, msg: String? = null, animate: Boolean = true) { fab.changeState(state, this.state, animate) stats.changeState(state, animate) if (msg != null) snackbar(getString(R.string.vpn_error, msg)).show() this.state = state ProfilesFragment.instance?.profilesAdapter?.notifyDataSetChanged() // refresh button enabled state stateListener?.invoke(state) } private fun toggle() = if (state.canStop) Core.stopService() else connect.launch(null) private val connection = ShadowsocksConnection(true) override fun onServiceConnected(service: IShadowsocksService) = changeState(try { BaseService.State.entries[service.state] } catch (_: RemoteException) { BaseService.State.Idle }) override fun onServiceDisconnected() = changeState(BaseService.State.Idle) override fun onBinderDied() { connection.disconnect(this) connection.connect(this, this) } private val connect = registerForActivityResult(StartService()) { if (it) snackbar().setText(R.string.vpn_permission_denied).show() } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) WindowCompat.setDecorFitsSystemWindows(window, false) setContentView(R.layout.layout_main) snackbar = findViewById(R.id.snackbar) ViewCompat.setOnApplyWindowInsetsListener(snackbar, ListHolderListener) stats = findViewById(R.id.stats) stats.setOnClickListener { if (state == BaseService.State.Connected) stats.testConnection() } drawer = findViewById(R.id.drawer) val drawerHandler = object : OnBackPressedCallback(drawer.isOpen), DrawerLayout.DrawerListener { override fun handleOnBackPressed() = drawer.closeDrawers() override fun onDrawerSlide(drawerView: View, slideOffset: Float) { } override fun onDrawerOpened(drawerView: View) { isEnabled = true } override fun onDrawerClosed(drawerView: View) { isEnabled = false } override fun onDrawerStateChanged(newState: Int) { isEnabled = newState == DrawerLayout.STATE_IDLE == drawer.isOpen } } onBackPressedDispatcher.addCallback(drawerHandler) drawer.addDrawerListener(drawerHandler) navigation = findViewById(R.id.navigation) navigation.setNavigationItemSelectedListener(this) if (savedInstanceState == null) { navigation.menu.findItem(R.id.profiles).isChecked = true displayFragment(ProfilesFragment()) } fab = findViewById(R.id.fab) fab.initProgress(findViewById(R.id.fabProgress)) fab.setOnClickListener { toggle() } ViewCompat.setOnApplyWindowInsetsListener(fab) { view, insets -> view.updateLayoutParams { bottomMargin = insets.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom + resources.getDimensionPixelOffset(R.dimen.mtrl_bottomappbar_fab_bottom_margin) } insets } changeState(BaseService.State.Idle, animate = false) // reset everything to init state connection.connect(this, this) DataStore.publicStore.registerChangeListener(this) } override fun onPreferenceDataStoreChanged(store: PreferenceDataStore, key: String) { when (key) { Key.serviceMode -> { connection.disconnect(this) connection.connect(this, this) } } } private fun displayFragment(fragment: ToolbarFragment) { supportFragmentManager.beginTransaction().replace(R.id.fragment_holder, fragment).commitAllowingStateLoss() drawer.closeDrawers() } override fun onNavigationItemSelected(item: MenuItem): Boolean { if (item.isChecked) drawer.closeDrawers() else { when (item.itemId) { R.id.profiles -> { displayFragment(ProfilesFragment()) connection.bandwidthTimeout = connection.bandwidthTimeout // request stats update } R.id.globalSettings -> displayFragment(GlobalSettingsFragment()) R.id.about -> { FirebaseAnalytics.getInstance(this).logEvent("about", null) displayFragment(AboutFragment()) } R.id.faq -> { launchUrl(getString(R.string.faq_url)) return true } R.id.customRules -> displayFragment(CustomRulesFragment()) R.id.subscriptions -> displayFragment(SubscriptionFragment()) else -> return false } item.isChecked = true } return true } override fun onStart() { super.onStart() connection.bandwidthTimeout = 500 } override fun onKeyShortcut(keyCode: Int, event: KeyEvent) = when { keyCode == KeyEvent.KEYCODE_G && event.hasModifiers(KeyEvent.META_CTRL_ON) -> { toggle() true } keyCode == KeyEvent.KEYCODE_T && event.hasModifiers(KeyEvent.META_CTRL_ON) -> { stats.testConnection() true } else -> (supportFragmentManager.findFragmentById(R.id.fragment_holder) as ToolbarFragment).toolbar.menu.let { it.setQwertyMode(KeyCharacterMap.load(event.deviceId).keyboardType != KeyCharacterMap.NUMERIC) it.performShortcut(keyCode, event, 0) } } override fun onStop() { connection.bandwidthTimeout = 0 super.onStop() } override fun onDestroy() { super.onDestroy() DataStore.publicStore.unregisterChangeListener(this) connection.disconnect(this) } } ================================================ FILE: mobile/src/main/java/com/github/shadowsocks/ProfileConfigActivity.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks import android.app.Activity import android.content.DialogInterface import android.os.Bundle import androidx.activity.OnBackPressedCallback import androidx.activity.result.component1 import androidx.activity.result.component2 import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import com.github.shadowsocks.plugin.PluginContract import com.github.shadowsocks.plugin.fragment.AlertDialogFragment import com.github.shadowsocks.plugin.fragment.Empty import com.github.shadowsocks.preference.DataStore import com.github.shadowsocks.widget.ListHolderListener class ProfileConfigActivity : AppCompatActivity() { class UnsavedChangesDialogFragment : AlertDialogFragment() { override fun AlertDialog.Builder.prepare(listener: DialogInterface.OnClickListener) { setTitle(R.string.unsaved_changes_prompt) setPositiveButton(R.string.yes, listener) setNegativeButton(R.string.no, listener) setNeutralButton(android.R.string.cancel, null) } } val unsavedChangesHandler = object : OnBackPressedCallback(DataStore.dirty) { override fun handleOnBackPressed() = UnsavedChangesDialogFragment().apply { key() }.show(supportFragmentManager, null) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.layout_profile_config) ListHolderListener.setup(this) setSupportActionBar(findViewById(R.id.toolbar)) supportActionBar!!.apply { setDisplayHomeAsUpEnabled(true) setHomeAsUpIndicator(R.drawable.ic_navigation_close) } onBackPressedDispatcher.addCallback(unsavedChangesHandler) } override fun onResume() { super.onResume() unsavedChangesHandler.isEnabled = DataStore.dirty } override fun onSupportNavigateUp(): Boolean { if (!super.onSupportNavigateUp()) finish() return true } val pluginHelp = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { (resultCode, data) -> if (resultCode == Activity.RESULT_OK) AlertDialog.Builder(this) .setTitle("?") .setMessage(data?.getCharSequenceExtra(PluginContract.EXTRA_HELP_MESSAGE)) .show() } } ================================================ FILE: mobile/src/main/java/com/github/shadowsocks/ProfileConfigFragment.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks import android.app.Activity import android.content.BroadcastReceiver import android.content.Context import android.content.DialogInterface import android.content.Intent import android.os.Build import android.os.Bundle import android.os.Parcelable import android.view.Menu import android.view.MenuInflater import android.view.MenuItem import android.view.View import androidx.activity.result.component1 import androidx.activity.result.component2 import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AlertDialog import androidx.core.view.MenuProvider import androidx.core.view.ViewCompat import androidx.fragment.app.setFragmentResultListener import androidx.lifecycle.lifecycleScope import androidx.preference.EditTextPreference import androidx.preference.Preference import androidx.preference.PreferenceDataStore import androidx.preference.PreferenceFragmentCompat import androidx.preference.SwitchPreference import com.github.shadowsocks.database.Profile import com.github.shadowsocks.database.ProfileManager import com.github.shadowsocks.plugin.NoPlugin import com.github.shadowsocks.plugin.PluginConfiguration import com.github.shadowsocks.plugin.PluginContract import com.github.shadowsocks.plugin.PluginManager import com.github.shadowsocks.plugin.PluginOptions import com.github.shadowsocks.plugin.fragment.AlertDialogFragment import com.github.shadowsocks.plugin.fragment.Empty import com.github.shadowsocks.plugin.fragment.showAllowingStateLoss import com.github.shadowsocks.preference.DataStore import com.github.shadowsocks.preference.EditTextPreferenceModifiers import com.github.shadowsocks.preference.OnPreferenceDataStoreChangeListener import com.github.shadowsocks.preference.PluginConfigurationDialogFragment import com.github.shadowsocks.preference.PluginPreference import com.github.shadowsocks.preference.PluginPreferenceDialogFragment import com.github.shadowsocks.utils.Action import com.github.shadowsocks.utils.DirectBoot import com.github.shadowsocks.utils.Key import com.github.shadowsocks.utils.listenForPackageChanges import com.github.shadowsocks.utils.readableMessage import com.github.shadowsocks.utils.remove import com.github.shadowsocks.widget.ListListener import com.google.android.material.snackbar.Snackbar import kotlinx.coroutines.launch import kotlinx.parcelize.Parcelize class ProfileConfigFragment : PreferenceFragmentCompat(), Preference.OnPreferenceChangeListener, OnPreferenceDataStoreChangeListener { companion object PasswordSummaryProvider : Preference.SummaryProvider { override fun provideSummary(preference: EditTextPreference) = "\u2022".repeat(preference.text?.length ?: 0) } @Parcelize data class ProfileIdArg(val profileId: Long) : Parcelable class DeleteConfirmationDialogFragment : AlertDialogFragment() { override fun AlertDialog.Builder.prepare(listener: DialogInterface.OnClickListener) { setTitle(R.string.delete_confirm_prompt) setPositiveButton(R.string.yes) { _, _ -> ProfileManager.delProfile(arg.profileId) requireActivity().finish() } setNegativeButton(R.string.no, null) } } private var profileId = -1L private lateinit var isProxyApps: SwitchPreference private lateinit var plugin: PluginPreference private lateinit var pluginConfigure: EditTextPreference private lateinit var pluginConfiguration: PluginConfiguration private lateinit var receiver: BroadcastReceiver private lateinit var udpFallback: Preference private fun makeDirt() { DataStore.dirty = true (activity as ProfileConfigActivity).unsavedChangesHandler.isEnabled = true } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { preferenceManager.preferenceDataStore = DataStore.privateStore val activity = requireActivity() profileId = activity.intent.getLongExtra(Action.EXTRA_PROFILE_ID, -1L) if (profileId != -1L && profileId != DataStore.editingId) { activity.finish() return } activity.addMenuProvider(object : MenuProvider { override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) = menuInflater.inflate(R.menu.profile_config_menu, menu) override fun onMenuItemSelected(item: MenuItem) = when (item.itemId) { R.id.action_delete -> { DeleteConfirmationDialogFragment().apply { arg(ProfileIdArg(profileId)) key() }.show(parentFragmentManager, null) true } R.id.action_apply -> { saveAndExit() true } else -> false } }, this) addPreferencesFromResource(R.xml.pref_profile) findPreference(Key.remotePort)!!.setOnBindEditTextListener(EditTextPreferenceModifiers.Port) findPreference(Key.password)!!.summaryProvider = PasswordSummaryProvider val serviceMode = DataStore.serviceMode findPreference(Key.ipv6)!!.isEnabled = serviceMode == Key.modeVpn isProxyApps = findPreference(Key.proxyApps)!! isProxyApps.isEnabled = serviceMode == Key.modeVpn isProxyApps.setOnPreferenceChangeListener { _, newValue -> startActivity(Intent(activity, AppManager::class.java)) if (newValue as Boolean) makeDirt() newValue } findPreference(Key.metered)!!.apply { if (Build.VERSION.SDK_INT >= 28) isEnabled = serviceMode == Key.modeVpn else remove() } plugin = findPreference(Key.plugin)!! pluginConfigure = findPreference(Key.pluginConfigure)!! pluginConfigure.setOnBindEditTextListener(EditTextPreferenceModifiers.Monospace) pluginConfigure.onPreferenceChangeListener = this pluginConfiguration = PluginConfiguration(DataStore.plugin) initPlugins() udpFallback = findPreference(Key.udpFallback)!! DataStore.privateStore.registerChangeListener(this) val profile = ProfileManager.getProfile(profileId) ?: Profile() if (profile.subscription == Profile.SubscriptionStatus.Active) { findPreference(Key.name)!!.isEnabled = false findPreference(Key.host)!!.isEnabled = false findPreference(Key.password)!!.isEnabled = false findPreference(Key.method)!!.isEnabled = false findPreference(Key.remotePort)!!.isEnabled = false plugin.isEnabled = false pluginConfigure.isEnabled = false udpFallback.isEnabled = false } } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) ViewCompat.setOnApplyWindowInsetsListener(listView, ListListener) setFragmentResultListener(PluginPreferenceDialogFragment::class.java.name) { _, bundle -> val selected = plugin.plugins.lookup.getValue( bundle.getString(PluginPreferenceDialogFragment.KEY_SELECTED_ID)!!) val override = pluginConfiguration.pluginsOptions.keys.firstOrNull { plugin.plugins.lookup[it] == selected } pluginConfiguration = PluginConfiguration(pluginConfiguration.pluginsOptions, override ?: selected.id) DataStore.plugin = pluginConfiguration.toString() makeDirt() plugin.value = pluginConfiguration.selected pluginConfigure.isEnabled = selected !is NoPlugin pluginConfigure.text = pluginConfiguration.getOptions().toString() if (!selected.trusted) { Snackbar.make(requireView(), R.string.plugin_untrusted, Snackbar.LENGTH_LONG).show() } } AlertDialogFragment.setResultListener(this) { which, _ -> when (which) { DialogInterface.BUTTON_POSITIVE -> saveAndExit() DialogInterface.BUTTON_NEGATIVE -> requireActivity().finish() } } } private fun initPlugins() { plugin.value = pluginConfiguration.selected plugin.init() pluginConfigure.isEnabled = plugin.selectedEntry?.let { it is NoPlugin } == false pluginConfigure.text = pluginConfiguration.getOptions().toString() } private fun showPluginEditor() { PluginConfigurationDialogFragment().apply { setArg(Key.pluginConfigure, pluginConfiguration.selected) setTargetFragment(this@ProfileConfigFragment, 0) }.showAllowingStateLoss(parentFragmentManager, Key.pluginConfigure) } private fun saveAndExit() { val profile = ProfileManager.getProfile(profileId) ?: Profile() profile.id = profileId profile.deserialize() ProfileManager.updateProfile(profile) ProfilesFragment.instance?.profilesAdapter?.deepRefreshId(profileId) if (profileId in Core.activeProfileIds && DataStore.directBootAware) DirectBoot.update() requireActivity().finish() } override fun onAttach(context: Context) { super.onAttach(context) receiver = context.listenForPackageChanges(false) { // wait until changes were flushed lifecycleScope.launch { initPlugins() } } } override fun onResume() { super.onResume() isProxyApps.isChecked = DataStore.proxyApps // fetch proxyApps updated by AppManager val fallbackProfile = DataStore.udpFallback?.let { ProfileManager.getProfile(it) } if (fallbackProfile == null) udpFallback.setSummary(R.string.plugin_disabled) else udpFallback.summary = fallbackProfile.formattedName } override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean = try { val selected = pluginConfiguration.selected pluginConfiguration = PluginConfiguration(pluginConfiguration.pluginsOptions + (pluginConfiguration.selected to PluginOptions(selected, newValue as? String?)), selected) DataStore.plugin = pluginConfiguration.toString() makeDirt() true } catch (exc: RuntimeException) { Snackbar.make(requireView(), exc.readableMessage, Snackbar.LENGTH_LONG).show() false } override fun onPreferenceDataStoreChanged(store: PreferenceDataStore, key: String) { if (key != Key.proxyApps && findPreference(key) != null) makeDirt() } override fun onDisplayPreferenceDialog(preference: Preference) { when (preference.key) { Key.plugin -> PluginPreferenceDialogFragment().apply { setArg(Key.plugin) setTargetFragment(this@ProfileConfigFragment, 0) }.showAllowingStateLoss(parentFragmentManager, Key.plugin) Key.pluginConfigure -> { val intent = PluginManager.buildIntent(plugin.selectedEntry!!.id, PluginContract.ACTION_CONFIGURE) if (intent.resolveActivity(requireContext().packageManager) == null) showPluginEditor() else { configurePlugin.launch(intent .putExtra(PluginContract.EXTRA_OPTIONS, pluginConfiguration.getOptions().toString())) } } else -> super.onDisplayPreferenceDialog(preference) } } private val configurePlugin = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { (resultCode, data) -> when (resultCode) { Activity.RESULT_OK -> { val options = data?.getStringExtra(PluginContract.EXTRA_OPTIONS) pluginConfigure.text = options onPreferenceChange(pluginConfigure, options) } PluginContract.RESULT_FALLBACK -> showPluginEditor() } } override fun onDetach() { requireContext().unregisterReceiver(receiver) super.onDetach() } override fun onDestroy() { DataStore.privateStore.unregisterChangeListener(this) super.onDestroy() } } ================================================ FILE: mobile/src/main/java/com/github/shadowsocks/ProfilesFragment.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks import android.content.ActivityNotFoundException import android.content.Intent import android.graphics.Bitmap import android.graphics.Color import android.net.Uri import android.os.Bundle import android.text.format.Formatter import android.util.LongSparseArray import android.view.LayoutInflater import android.view.MenuItem import android.view.View import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView import androidx.activity.result.ActivityResultLauncher import androidx.appcompat.widget.PopupMenu import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.TooltipCompat import androidx.core.os.bundleOf import androidx.core.view.ViewCompat import androidx.fragment.app.DialogFragment import androidx.recyclerview.widget.* import com.github.shadowsocks.aidl.TrafficStats import com.github.shadowsocks.bg.BaseService import com.github.shadowsocks.database.Profile import com.github.shadowsocks.database.ProfileManager import com.github.shadowsocks.plugin.PluginConfiguration import com.github.shadowsocks.plugin.fragment.showAllowingStateLoss import com.github.shadowsocks.preference.DataStore import com.github.shadowsocks.utils.Action import com.github.shadowsocks.utils.OpenJson import com.github.shadowsocks.utils.SaveJson import com.github.shadowsocks.utils.readableMessage import com.github.shadowsocks.widget.ListHolderListener import com.github.shadowsocks.widget.MainListListener import com.github.shadowsocks.widget.UndoSnackbarManager import com.google.zxing.BarcodeFormat import com.google.zxing.EncodeHintType import com.google.zxing.MultiFormatWriter import com.google.zxing.WriterException import timber.log.Timber import java.nio.charset.StandardCharsets class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener, SearchView.OnQueryTextListener { companion object { /** * used for callback from stateChanged from MainActivity */ var instance: ProfilesFragment? = null private const val KEY_URL = "com.github.shadowsocks.QRCodeDialog.KEY_URL" private val iso88591 = StandardCharsets.ISO_8859_1.newEncoder() } /** * Is ProfilesFragment editable at all. */ private val isEnabled get() = (activity as MainActivity).state.let { it.canStop || it == BaseService.State.Stopped } private fun isProfileEditable(id: Long) = (activity as MainActivity).state == BaseService.State.Stopped || id !in Core.activeProfileIds class QRCodeDialog() : DialogFragment() { constructor(url: String) : this() { arguments = bundleOf(Pair(KEY_URL, url)) } /** * Based on: * https://android.googlesource.com/platform/packages/apps/Settings/+/0d706f0/src/com/android/settings/wifi/qrcode/QrCodeGenerator.java * https://android.googlesource.com/platform/packages/apps/Settings/+/8a9ccfd/src/com/android/settings/wifi/dpp/WifiDppQrCodeGeneratorFragment.java#153 */ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?) = try { val url = arguments?.getString(KEY_URL)!! val size = resources.getDimensionPixelSize(R.dimen.qrcode_size) val hints = mutableMapOf() if (!iso88591.canEncode(url)) hints[EncodeHintType.CHARACTER_SET] = StandardCharsets.UTF_8.name() val qrBits = MultiFormatWriter().encode(url, BarcodeFormat.QR_CODE, size, size, hints) ImageView(context).apply { layoutParams = ViewGroup.LayoutParams(size, size) setImageBitmap(Bitmap.createBitmap(size, size, Bitmap.Config.RGB_565).apply { for (x in 0 until size) for (y in 0 until size) { setPixel(x, y, if (qrBits.get(x, y)) Color.BLACK else Color.WHITE) } }) } } catch (e: WriterException) { Timber.w(e) (activity as MainActivity).snackbar().setText(e.readableMessage).show() dismiss() null } } inner class ProfileViewHolder(view: View) : RecyclerView.ViewHolder(view), View.OnClickListener, PopupMenu.OnMenuItemClickListener { internal lateinit var item: Profile private val text1 = itemView.findViewById(android.R.id.text1) private val text2 = itemView.findViewById(android.R.id.text2) private val traffic = itemView.findViewById(R.id.traffic) private val edit = itemView.findViewById(R.id.edit) private val subscription = itemView.findViewById(R.id.subscription) init { edit.setOnClickListener { item = ProfileManager.getProfile(item.id)!! startConfig(item) } subscription.setOnClickListener { item = ProfileManager.getProfile(item.id) ?: return@setOnClickListener startConfig(item) } TooltipCompat.setTooltipText(edit, edit.contentDescription) TooltipCompat.setTooltipText(subscription, subscription.contentDescription) itemView.setOnClickListener(this) val share = itemView.findViewById(R.id.share) share.setOnClickListener { val popup = PopupMenu(requireContext(), share) popup.menuInflater.inflate(R.menu.profile_share_popup, popup.menu) popup.setOnMenuItemClickListener(this) popup.show() } TooltipCompat.setTooltipText(share, share.contentDescription) } fun bind(item: Profile) { this.item = item val editable = isProfileEditable(item.id) edit.isEnabled = editable edit.alpha = if (editable) 1F else .5F subscription.isEnabled = editable subscription.alpha = if (editable) 1F else .5F var tx = item.tx var rx = item.rx statsCache[item.id]?.apply { tx += txTotal rx += rxTotal } text1.text = item.formattedName text2.text = ArrayList().apply { if (!item.name.isNullOrEmpty()) this += item.formattedAddress val id = PluginConfiguration(item.plugin ?: "").selected if (id.isNotEmpty()) this += getString(R.string.profile_plugin, id) }.joinToString("\n") val context = requireContext() traffic.text = if (tx <= 0 && rx <= 0) null else getString(R.string.traffic, Formatter.formatFileSize(context, tx), Formatter.formatFileSize(context, rx)) if (item.id == DataStore.profileId) { itemView.isSelected = true selectedItem = this } else { itemView.isSelected = false if (selectedItem === this) selectedItem = null } if (item.subscription == Profile.SubscriptionStatus.Active) { edit.visibility = View.GONE subscription.visibility = View.VISIBLE } else { edit.visibility = View.VISIBLE subscription.visibility = View.GONE } } override fun onClick(v: View?) { if (isEnabled) { val activity = activity as MainActivity val old = DataStore.profileId Core.switchProfile(item.id) profilesAdapter.refreshId(old) itemView.isSelected = true if (activity.state.canStop) Core.reloadService() } } override fun onMenuItemClick(item: MenuItem): Boolean = when (item.itemId) { R.id.action_qr_code -> { QRCodeDialog(this.item.toString()).showAllowingStateLoss(parentFragmentManager) true } R.id.action_export_clipboard -> { val success = Core.trySetPrimaryClip(this.item.toString(), true) (activity as MainActivity).snackbar().setText( if (success) R.string.action_export_msg else R.string.action_export_err).show() true } else -> false } } inner class ProfilesAdapter : RecyclerView.Adapter(), ProfileManager.Listener { internal val profiles = ProfileManager.getActiveProfiles()?.toMutableList() ?: mutableListOf() private val updated = HashSet() init { setHasStableIds(true) // see: http://stackoverflow.com/a/32488059/2245107 } override fun onBindViewHolder(holder: ProfileViewHolder, position: Int) = holder.bind(profiles[position]) override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ProfileViewHolder = ProfileViewHolder( LayoutInflater.from(parent.context).inflate(R.layout.layout_profile, parent, false)) override fun getItemCount(): Int = profiles.size override fun getItemId(position: Int): Long = profiles[position].id override fun onAdd(profile: Profile) { undoManager.flush() val pos = itemCount profiles += profile notifyItemInserted(pos) } fun filter(name: String) { val active = ProfileManager.getActiveProfiles()?.toMutableList() ?: mutableListOf() profiles.clear() val locale = resources.configuration.locale val lower = name.lowercase(locale) profiles.addAll(active.filter { it.name?.lowercase(locale)?.contains(lower) == true || it.host.lowercase(locale).contains(lower) }) notifyDataSetChanged() } fun move(from: Int, to: Int) { undoManager.flush() val first = profiles[from] var previousOrder = first.userOrder val (step, range) = if (from < to) Pair(1, from until to) else Pair(-1, from downTo to + 1) for (i in range) { val next = profiles[i + step] val order = next.userOrder next.userOrder = previousOrder previousOrder = order profiles[i] = next updated.add(next) } first.userOrder = previousOrder profiles[to] = first updated.add(first) notifyItemMoved(from, to) } fun commitMove() { updated.forEach { ProfileManager.updateProfile(it) } updated.clear() } fun remove(pos: Int) { profiles.removeAt(pos) notifyItemRemoved(pos) } fun undo(actions: List>) { for ((index, item) in actions) { profiles.add(index, item) notifyItemInserted(index) } } fun commit(actions: List>) { for ((_, item) in actions) ProfileManager.delProfile(item.id) } fun refreshId(id: Long) { val index = profiles.indexOfFirst { it.id == id } if (index >= 0) notifyItemChanged(index) } fun deepRefreshId(id: Long) { val index = profiles.indexOfFirst { it.id == id } if (index < 0) return profiles[index] = ProfileManager.getProfile(id)!! notifyItemChanged(index) } override fun onRemove(profileId: Long) { val index = profiles.indexOfFirst { it.id == profileId } if (index < 0) return profiles.removeAt(index) notifyItemRemoved(index) if (profileId == DataStore.profileId) DataStore.profileId = 0 // switch to null profile } override fun onCleared() { profiles.clear() notifyDataSetChanged() } override fun reloadProfiles() { profiles.clear() ProfileManager.getActiveProfiles()?.let { profiles.addAll(it) } notifyDataSetChanged() } } private var selectedItem: ProfileViewHolder? = null val profilesAdapter by lazy { ProfilesAdapter() } private lateinit var profilesList: RecyclerView private val layoutManager by lazy { LinearLayoutManager(context, RecyclerView.VERTICAL, false) } private lateinit var undoManager: UndoSnackbarManager private val statsCache = LongSparseArray() private fun startConfig(profile: Profile) { profile.serialize() startActivity(Intent(context, ProfileConfigActivity::class.java).putExtra(Action.EXTRA_PROFILE_ID, profile.id)) } override fun onQueryTextChange(query: String): Boolean { profilesAdapter.filter(query) return false } override fun onQueryTextSubmit(query: String): Boolean = false override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? = inflater.inflate(R.layout.layout_list, container, false) override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) ViewCompat.setOnApplyWindowInsetsListener(view, ListHolderListener) toolbar.setTitle(R.string.profiles) toolbar.inflateMenu(R.menu.profile_manager_menu) toolbar.setOnMenuItemClickListener(this) val searchView = toolbar.findViewById(R.id.action_search) searchView.setOnQueryTextListener(this) searchView.queryHint = getString(android.R.string.search_go) ProfileManager.ensureNotEmpty() profilesList = view.findViewById(R.id.list) ViewCompat.setOnApplyWindowInsetsListener(profilesList, MainListListener) profilesList.layoutManager = layoutManager profilesList.addItemDecoration(DividerItemDecoration(context, layoutManager.orientation)) layoutManager.scrollToPosition(profilesAdapter.profiles.indexOfFirst { it.id == DataStore.profileId }) val animator = DefaultItemAnimator() animator.supportsChangeAnimations = false // prevent fading-in/out when rebinding profilesList.itemAnimator = animator profilesList.adapter = profilesAdapter instance = this ProfileManager.listener = profilesAdapter undoManager = UndoSnackbarManager(activity as MainActivity, profilesAdapter::undo, profilesAdapter::commit) ItemTouchHelper(object : ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP or ItemTouchHelper.DOWN, ItemTouchHelper.START) { override fun getSwipeDirs(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder): Int = if (isProfileEditable((viewHolder as ProfileViewHolder).item.id)) { super.getSwipeDirs(recyclerView, viewHolder) } else 0 override fun getDragDirs(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder): Int = if (isEnabled) super.getDragDirs(recyclerView, viewHolder) else 0 override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) { val index = viewHolder.bindingAdapterPosition profilesAdapter.remove(index) undoManager.remove(Pair(index, (viewHolder as ProfileViewHolder).item)) } override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean { profilesAdapter.move(viewHolder.bindingAdapterPosition, target.bindingAdapterPosition) return true } override fun clearView(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder) { super.clearView(recyclerView, viewHolder) profilesAdapter.commitMove() } }).attachToRecyclerView(profilesList) } override fun onMenuItemClick(item: MenuItem): Boolean { return when (item.itemId) { R.id.action_scan_qr_code -> { startActivity(Intent(context, ScannerActivity::class.java)) true } R.id.action_import_clipboard -> { try { val profiles = Profile.findAllUrls( Core.clipboard.primaryClip!!.getItemAt(0).text, Core.currentProfile?.main ).toList() if (profiles.isNotEmpty()) { profiles.forEach { ProfileManager.createProfile(it) } (activity as MainActivity).snackbar().setText(R.string.action_import_msg).show() return true } } catch (exc: Exception) { Timber.d(exc) } (activity as MainActivity).snackbar().setText(R.string.action_import_err).show() true } R.id.action_import_file -> { startFilesForResult(importProfiles) true } R.id.action_replace_file -> { startFilesForResult(replaceProfiles) true } R.id.action_manual_settings -> { startConfig(ProfileManager.createProfile( Profile().also { Core.currentProfile?.main?.copyFeatureSettingsTo(it) })) true } R.id.action_export_clipboard -> { val profiles = ProfileManager.getActiveProfiles() val success = profiles != null && Core.trySetPrimaryClip(profiles.joinToString("\n"), true) (activity as MainActivity).snackbar().setText( if (success) R.string.action_export_msg else R.string.action_export_err).show() true } R.id.action_export_file -> { startFilesForResult(exportProfiles) true } else -> false } } private fun startFilesForResult(launcher: ActivityResultLauncher) { try { return launcher.launch("") } catch (_: ActivityNotFoundException) { } catch (_: SecurityException) { } (activity as MainActivity).snackbar(getString(R.string.file_manager_missing)).show() } private fun importOrReplaceProfiles(dataUris: List, replace: Boolean = false) { if (dataUris.isEmpty()) return val activity = activity as MainActivity try { ProfileManager.createProfilesFromJson(dataUris.asSequence().map { activity.contentResolver.openInputStream(it) }.filterNotNull(), replace) } catch (e: Exception) { activity.snackbar(e.readableMessage).show() } } private val importProfiles = registerForActivityResult(OpenJson) { importOrReplaceProfiles(it) } private val replaceProfiles = registerForActivityResult(OpenJson) { importOrReplaceProfiles(it, true) } private val exportProfiles = registerForActivityResult(SaveJson) { data -> if (data != null) ProfileManager.serializeToJson()?.let { profiles -> val activity = activity as MainActivity try { activity.contentResolver.openOutputStream(data)!!.bufferedWriter().use { it.write(profiles.toString(2)) } } catch (e: Exception) { Timber.w(e) activity.snackbar(e.readableMessage).show() } } } fun onTrafficUpdated(profileId: Long, stats: TrafficStats) { if (profileId != 0L) { // ignore aggregate stats statsCache.put(profileId, stats) profilesAdapter.refreshId(profileId) } } fun onTrafficPersisted(profileId: Long) { statsCache.remove(profileId) profilesAdapter.deepRefreshId(profileId) } override fun onDestroyView() { undoManager.flush() super.onDestroyView() } override fun onDestroy() { instance = null ProfileManager.listener = null super.onDestroy() } } ================================================ FILE: mobile/src/main/java/com/github/shadowsocks/QuickToggleShortcut.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks import android.app.Activity import android.content.Intent import android.content.pm.ShortcutManager import android.os.Build import android.os.Bundle import androidx.core.content.getSystemService import androidx.core.content.pm.ShortcutInfoCompat import androidx.core.content.pm.ShortcutManagerCompat import androidx.core.graphics.drawable.IconCompat import com.github.shadowsocks.aidl.IShadowsocksService import com.github.shadowsocks.aidl.ShadowsocksConnection import com.github.shadowsocks.bg.BaseService @Suppress("DEPRECATION") @Deprecated("This shortcut is inefficient and should be superseded by TileService for API 24+.") class QuickToggleShortcut : Activity(), ShadowsocksConnection.Callback { private val connection = ShadowsocksConnection() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) if (intent.action == Intent.ACTION_CREATE_SHORTCUT) { setResult(RESULT_OK, ShortcutManagerCompat.createShortcutResultIntent(this, ShortcutInfoCompat.Builder(this, "toggle") .setIntent(Intent(this, QuickToggleShortcut::class.java).setAction(Intent.ACTION_MAIN)) .setIcon(IconCompat.createWithResource(this, R.drawable.ic_qu_shadowsocks_launcher)) .setShortLabel(getString(R.string.quick_toggle)) .build())) finish() } else { connection.connect(this, this) if (Build.VERSION.SDK_INT >= 25) getSystemService()!!.reportShortcutUsed("toggle") } } override fun onServiceConnected(service: IShadowsocksService) { val state = BaseService.State.entries[service.state] when { state.canStop -> Core.stopService() state == BaseService.State.Stopped -> Core.startService() } finish() } override fun stateChanged(state: BaseService.State, profileName: String?, msg: String?) { } override fun onDestroy() { connection.disconnect(this) super.onDestroy() } } ================================================ FILE: mobile/src/main/java/com/github/shadowsocks/ScannerActivity.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks import android.Manifest import android.content.Intent import android.content.pm.ShortcutManager import android.net.Uri import android.os.Build import android.os.Bundle import android.view.Menu import android.view.MenuItem import android.widget.Toast import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity import androidx.camera.core.Camera import androidx.camera.core.CameraSelector import androidx.camera.core.ExperimentalGetImage import androidx.camera.core.ImageAnalysis import androidx.camera.core.ImageProxy import androidx.camera.core.Preview import androidx.camera.core.resolutionselector.ResolutionSelector import androidx.camera.core.resolutionselector.ResolutionStrategy import androidx.camera.lifecycle.ProcessCameraProvider import androidx.camera.view.PreviewView import androidx.concurrent.futures.await import androidx.core.content.getSystemService import androidx.lifecycle.lifecycleScope import com.github.shadowsocks.Core.app import com.github.shadowsocks.database.Profile import com.github.shadowsocks.database.ProfileManager import com.github.shadowsocks.utils.forEachTry import com.github.shadowsocks.utils.readableMessage import com.github.shadowsocks.widget.ListHolderListener import com.google.mlkit.vision.barcode.BarcodeScannerOptions import com.google.mlkit.vision.barcode.BarcodeScanning import com.google.mlkit.vision.barcode.ZoomSuggestionOptions import com.google.mlkit.vision.barcode.common.Barcode import com.google.mlkit.vision.common.InputImage import kotlinx.coroutines.CancellationException import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.asExecutor import kotlinx.coroutines.launch import kotlinx.coroutines.tasks.await import kotlinx.coroutines.withContext import timber.log.Timber class ScannerActivity : AppCompatActivity(), ImageAnalysis.Analyzer, ZoomSuggestionOptions.ZoomCallback { private val scanner = BarcodeScanning.getClient(BarcodeScannerOptions.Builder().apply { setBarcodeFormats(Barcode.FORMAT_QR_CODE) setZoomSuggestionOptions(ZoomSuggestionOptions.Builder(this@ScannerActivity).build()) }.build()) private val imageAnalysis by lazy { ImageAnalysis.Builder().apply { setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST) setBackgroundExecutor(Dispatchers.Default.asExecutor()) }.build().also { it.setAnalyzer(Dispatchers.Main.immediate.asExecutor(), this) } } private var camera: Camera? = null @ExperimentalGetImage override fun analyze(image: ImageProxy) { val mediaImage = image.image ?: return lifecycleScope.launch { val result = try { process { InputImage.fromMediaImage(mediaImage, image.imageInfo.rotationDegrees) }.also { if (it) imageAnalysis.clearAnalyzer() } } catch (_: CancellationException) { return@launch } catch (e: Exception) { return@launch Timber.w(e) } finally { image.close() } if (result) onSupportNavigateUp() } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) if (Build.VERSION.SDK_INT >= 25) getSystemService()!!.reportShortcutUsed("scan") setContentView(R.layout.layout_scanner) ListHolderListener.setup(this) setSupportActionBar(findViewById(R.id.toolbar)) supportActionBar!!.setDisplayHomeAsUpEnabled(true) lifecycle.addObserver(scanner) requestCamera.launch(Manifest.permission.CAMERA) } private val requestCamera = registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted -> if (granted) lifecycleScope.launch { val cameraProvider = ProcessCameraProvider.getInstance(this@ScannerActivity).await() val selector = if (cameraProvider.hasCamera(CameraSelector.DEFAULT_BACK_CAMERA)) { CameraSelector.DEFAULT_BACK_CAMERA } else CameraSelector.DEFAULT_FRONT_CAMERA val preview = Preview.Builder().apply { setResolutionSelector(ResolutionSelector.Builder().apply { setResolutionStrategy(ResolutionStrategy.HIGHEST_AVAILABLE_STRATEGY) }.build()) }.build() preview.setSurfaceProvider(findViewById(R.id.barcode).surfaceProvider) try { camera = cameraProvider.bindToLifecycle(this@ScannerActivity, selector, preview, imageAnalysis) } catch (e: IllegalArgumentException) { Timber.d(e) startImport() } } else permissionMissing() } override fun setZoom(ratio: Float): Boolean { val camera = camera ?: return false camera.cameraControl.setZoomRatio(ratio) return true } private suspend inline fun process(feature: Profile? = Core.currentProfile?.main, crossinline image: () -> InputImage): Boolean { val barcodes = withContext(Dispatchers.Default) { scanner.process(image()).await() } var result = false for (profile in Profile.findAllUrls(barcodes.mapNotNull { it.rawValue }.joinToString("\n"), feature)) { ProfileManager.createProfile(profile) result = true } return result } private fun permissionMissing() { Toast.makeText(this, R.string.add_profile_scanner_permission_required, Toast.LENGTH_SHORT).show() startImport() } override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.scanner_menu, menu) return true } override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) { R.id.action_import_clipboard -> { startImport(true) true } else -> false } /** * See also: https://stackoverflow.com/a/31350642/2245107 */ override fun shouldUpRecreateTask(targetIntent: Intent?) = super.shouldUpRecreateTask(targetIntent) || isTaskRoot private var finished = false override fun onSupportNavigateUp(): Boolean { if (finished) return false finished = true return super.onSupportNavigateUp() } private fun startImport(manual: Boolean = false) = (if (manual) import else importFinish).launch("image/*") private val import = registerForActivityResult(ActivityResultContracts.GetMultipleContents()) { importOrFinish(it) } private val importFinish = registerForActivityResult(ActivityResultContracts.GetMultipleContents()) { importOrFinish(it, true) } private fun importOrFinish(dataUris: List, finish: Boolean = false) { if (dataUris.isNotEmpty()) lifecycleScope.launch(Dispatchers.Main.immediate) { onSupportNavigateUp() val feature = Core.currentProfile?.main try { var success = false dataUris.forEachTry { uri -> if (process(feature) { InputImage.fromFilePath(app, uri) }) success = true } Toast.makeText(app, if (success) R.string.action_import_msg else R.string.action_import_err, Toast.LENGTH_SHORT).show() } catch (e: Exception) { Toast.makeText(app, e.readableMessage, Toast.LENGTH_LONG).show() } } else if (finish) onSupportNavigateUp() } } ================================================ FILE: mobile/src/main/java/com/github/shadowsocks/ToolbarFragment.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks import android.os.Bundle import android.view.View import androidx.appcompat.widget.Toolbar import androidx.core.view.GravityCompat import androidx.fragment.app.Fragment open class ToolbarFragment : Fragment() { lateinit var toolbar: Toolbar override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) toolbar = view.findViewById(R.id.toolbar) toolbar.setNavigationIcon(R.drawable.ic_navigation_menu) toolbar.setNavigationOnClickListener { (activity as MainActivity).drawer.openDrawer(GravityCompat.START) } } } ================================================ FILE: mobile/src/main/java/com/github/shadowsocks/UdpFallbackProfileActivity.kt ================================================ /******************************************************************************* * * * Copyright (C) 2019 by Max Lv * * Copyright (C) 2019 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks import android.content.res.Resources import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.CheckedTextView import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.Toolbar import androidx.core.view.ViewCompat import androidx.recyclerview.widget.DefaultItemAnimator import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.github.shadowsocks.database.Profile import com.github.shadowsocks.database.ProfileManager import com.github.shadowsocks.plugin.PluginConfiguration import com.github.shadowsocks.preference.DataStore import com.github.shadowsocks.utils.resolveResourceId import com.github.shadowsocks.widget.ListHolderListener import com.github.shadowsocks.widget.ListListener class UdpFallbackProfileActivity : AppCompatActivity() { inner class ProfileViewHolder(view: View) : RecyclerView.ViewHolder(view), View.OnClickListener { private var item: Profile? = null private val text = itemView.findViewById(android.R.id.text1) init { view.setBackgroundResource(theme.resolveResourceId(android.R.attr.selectableItemBackground)) itemView.setOnClickListener(this) } fun bind(item: Profile?) { this.item = item if (item == null) text.setText(R.string.plugin_disabled) else text.text = item.formattedName text.isChecked = udpFallback == item?.id } override fun onClick(v: View?) { DataStore.udpFallback = item?.id DataStore.dirty = true finish() } } inner class ProfilesAdapter : RecyclerView.Adapter() { internal val profiles = (ProfileManager.getActiveProfiles()?.toMutableList() ?: mutableListOf()) .filter { it.id != editingId && PluginConfiguration(it.plugin ?: "").selected.isEmpty() } override fun onBindViewHolder(holder: ProfileViewHolder, position: Int) = holder.bind(if (position == 0) null else profiles[position - 1]) override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ProfileViewHolder = ProfileViewHolder( LayoutInflater.from(parent.context).inflate(Resources.getSystem() .getIdentifier("select_dialog_singlechoice_material", "layout", "android"), parent, false)) override fun getItemCount(): Int = 1 + profiles.size } private var editingId = DataStore.editingId private var udpFallback = DataStore.udpFallback private val profilesAdapter = ProfilesAdapter() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) if (editingId == null) { finish() return } setContentView(R.layout.layout_udp_fallback) ListHolderListener.setup(this) val toolbar = findViewById(R.id.toolbar) toolbar.setTitle(R.string.udp_fallback) toolbar.setNavigationIcon(R.drawable.ic_navigation_close) toolbar.setNavigationOnClickListener { finish() } findViewById(R.id.list).apply { ViewCompat.setOnApplyWindowInsetsListener(this, ListListener) itemAnimator = DefaultItemAnimator() adapter = profilesAdapter layoutManager = LinearLayoutManager(this@UdpFallbackProfileActivity, RecyclerView.VERTICAL, false).apply { if (DataStore.udpFallback != null) { scrollToPosition(profilesAdapter.profiles.indexOfFirst { it.id == DataStore.udpFallback } + 1) } } } } } ================================================ FILE: mobile/src/main/java/com/github/shadowsocks/acl/CustomRulesFragment.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.acl import android.annotation.SuppressLint import android.content.Context import android.content.DialogInterface import android.os.Bundle import android.os.Parcelable import android.text.Editable import android.text.TextWatcher import android.view.* import android.widget.AdapterView import android.widget.EditText import android.widget.Spinner import android.widget.TextView import androidx.activity.OnBackPressedCallback import androidx.appcompat.app.AlertDialog import androidx.appcompat.widget.Toolbar import androidx.core.content.ContextCompat import androidx.core.view.ViewCompat import androidx.recyclerview.widget.DefaultItemAnimator import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.github.shadowsocks.Core import com.github.shadowsocks.MainActivity import com.github.shadowsocks.R import com.github.shadowsocks.ToolbarFragment import com.github.shadowsocks.bg.BaseService import com.github.shadowsocks.net.Subnet import com.github.shadowsocks.plugin.fragment.AlertDialogFragment import com.github.shadowsocks.utils.asIterable import com.github.shadowsocks.utils.readableMessage import com.github.shadowsocks.utils.resolveResourceId import com.github.shadowsocks.widget.ListHolderListener import com.github.shadowsocks.widget.MainListListener import com.github.shadowsocks.widget.UndoSnackbarManager import com.google.android.material.textfield.TextInputLayout import kotlinx.parcelize.Parcelize import me.zhanghai.android.fastscroll.FastScrollerBuilder import timber.log.Timber import java.net.IDN import java.net.MalformedURLException import java.net.URL import java.util.regex.PatternSyntaxException class CustomRulesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener, ActionMode.Callback { companion object { private const val SELECTED_SUBNETS = "com.github.shadowsocks.acl.CustomRulesFragment.SELECTED_SUBNETS" private const val SELECTED_HOSTNAMES = "com.github.shadowsocks.acl.CustomRulesFragment.SELECTED_HOSTNAMES" private const val SELECTED_URLS = "com.github.shadowsocks.acl.CustomRulesFragment.SELECTED_URLS" // unescaped lol: (?<=^(?:\(\^\|\\\.\)|\^\(\.\*\\\.\)\?|\(\?:\^\|\\\.\))).*(?=\$$) private val domainPattern = "(?<=^(?:\\(\\^\\|\\\\\\.\\)|\\^\\(\\.\\*\\\\\\.\\)\\?|\\(\\?:\\^\\|\\\\\\.\\))).*(?=\\\$\$)".toRegex() private fun AclItem(item: Any) = when (item) { is String -> AclItem(item, false) is Subnet -> AclItem(item.toString(), false) is URL -> AclItem(item.toString(), true) else -> throw IllegalArgumentException("item") } } private enum class Template { Generic, Domain, Url; } @Parcelize data class AclItem(val item: String = "", val isUrl: Boolean = false) : Parcelable { fun toAny() = if (isUrl) URL(item) else Subnet.fromString(item) ?: item } @Parcelize data class AclArg(val item: AclItem? = null) : Parcelable @Parcelize data class AclEditResult(val edited: AclItem?, val replacing: AclItem?) : Parcelable class AclRuleDialogFragment : AlertDialogFragment(), TextWatcher, AdapterView.OnItemSelectedListener { private lateinit var templateSelector: Spinner private lateinit var editText: EditText private lateinit var inputLayout: TextInputLayout private val positive by lazy { (dialog as AlertDialog).getButton(AlertDialog.BUTTON_POSITIVE) } override fun AlertDialog.Builder.prepare(listener: DialogInterface.OnClickListener) { val activity = requireActivity() @SuppressLint("InflateParams") val view = activity.layoutInflater.inflate(R.layout.dialog_acl_rule, null) templateSelector = view.findViewById(R.id.template_selector) editText = view.findViewById(R.id.content) inputLayout = view.findViewById(R.id.content_layout) templateSelector.setSelection(Template.Generic.ordinal) val arg = arg.item editText.setText(arg?.item) when { arg == null -> { } arg.isUrl -> templateSelector.setSelection(Template.Url.ordinal) Subnet.fromString(arg.item) == null -> { val match = domainPattern.find(arg.item) if (match != null) { templateSelector.setSelection(Template.Domain.ordinal) editText.setText(IDN.toUnicode(match.value.replace("\\.", "."), IDN.ALLOW_UNASSIGNED or IDN.USE_STD3_ASCII_RULES)) } } } templateSelector.onItemSelectedListener = this@AclRuleDialogFragment editText.addTextChangedListener(this@AclRuleDialogFragment) setTitle(R.string.edit_rule) setPositiveButton(android.R.string.ok, listener) setNegativeButton(android.R.string.cancel, null) if (!arg?.item.isNullOrEmpty()) setNeutralButton(R.string.delete, listener) setView(view) } override fun onStart() { super.onStart() validate() } override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { } override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { } override fun afterTextChanged(s: Editable) = validate(value = s) override fun onNothingSelected(parent: AdapterView<*>?) = check(false) override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) = validate(position) private fun validate(template: Int = templateSelector.selectedItemPosition, value: Editable = editText.text) { var message = "" positive.isEnabled = when (Template.entries[template]) { Template.Generic -> value.toString().run { try { if (Subnet.fromString(this) == null) toPattern() true } catch (e: PatternSyntaxException) { message = e.readableMessage false } } Template.Domain -> try { IDN.toASCII(value.toString(), IDN.ALLOW_UNASSIGNED or IDN.USE_STD3_ASCII_RULES) true } catch (e: IllegalArgumentException) { message = e.cause?.readableMessage ?: e.readableMessage false } Template.Url -> try { val url = URL(value.toString()) if ("http".equals(url.protocol, true)) message = getString(R.string.cleartext_http_warning) true } catch (e: MalformedURLException) { message = e.readableMessage false } } inputLayout.error = message } override fun ret(which: Int) = when (which) { DialogInterface.BUTTON_POSITIVE -> { AclEditResult(editText.text.toString().let { text -> when (Template.entries[templateSelector.selectedItemPosition]) { Template.Generic -> AclItem(text) Template.Domain -> AclItem(IDN.toASCII(text, IDN.ALLOW_UNASSIGNED or IDN.USE_STD3_ASCII_RULES) .replace(".", "\\.").let { "(?:^|\\.)$it\$" }) Template.Url -> AclItem(text, true) } }, arg.item) } DialogInterface.BUTTON_NEUTRAL -> AclEditResult(null, arg.item) else -> null } override fun onClick(dialog: DialogInterface?, which: Int) { if (which != DialogInterface.BUTTON_NEGATIVE) super.onClick(dialog, which) } } private inner class AclRuleViewHolder(view: View) : RecyclerView.ViewHolder(view), View.OnClickListener, View.OnLongClickListener { lateinit var item: Any private val text = view.findViewById(android.R.id.text1) init { view.isFocusable = true view.setOnClickListener(this) view.setOnLongClickListener(this) view.setBackgroundResource(R.drawable.background_selectable) } fun bind(hostname: String) { item = hostname text.text = hostname itemView.isSelected = selectedItems.contains(hostname) } fun bind(subnet: Subnet) { item = subnet text.text = subnet.toString() itemView.isSelected = selectedItems.contains(subnet) } fun bind(url: URL) { item = url text.text = url.toString() itemView.isSelected = selectedItems.contains(url) } override fun onClick(v: View?) { if (selectedItems.isNotEmpty()) onLongClick(v) else AclRuleDialogFragment().apply { arg(AclArg(AclItem(item))) key() }.show(parentFragmentManager, null) } override fun onLongClick(v: View?): Boolean { if (!selectedItems.add(item)) selectedItems.remove(item) // toggle onSelectedItemsUpdated() itemView.isSelected = !itemView.isSelected return true } } private inner class AclRulesAdapter : RecyclerView.Adapter() { private val acl = Acl.customRules private var savePending = false override fun onBindViewHolder(holder: AclRuleViewHolder, i: Int) { val j = i - acl.subnets.size() if (j < 0) holder.bind(acl.subnets[i]) else { val k = j - acl.proxyHostnames.size() if (k < 0) holder.bind(acl.proxyHostnames[j]) else holder.bind(acl.urls[k]) } } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = AclRuleViewHolder(LayoutInflater .from(parent.context).inflate(android.R.layout.simple_list_item_1, parent, false)) override fun getItemCount(): Int = acl.subnets.size() + acl.proxyHostnames.size() + acl.urls.size() private fun apply() { if (!savePending) { savePending = true list.post { Acl.customRules = acl savePending = false } } } fun add(item: Any): Int? = when (item) { is Subnet -> addSubnet(item) is String -> addHostname(item) is URL -> addURL(item) else -> null } fun addSubnet(subnet: Subnet): Int { val old = acl.subnets.size() val index = acl.subnets.add(subnet) if (old != acl.subnets.size()) { notifyItemInserted(index) apply() } return index } fun addHostname(hostname: String): Int { val old = acl.proxyHostnames.size() val index = acl.subnets.size() + acl.proxyHostnames.add(hostname) if (old != acl.proxyHostnames.size()) { notifyItemInserted(index) apply() } return index } fun addURL(url: URL): Int { val old = acl.urls.size() val index = acl.subnets.size() + acl.proxyHostnames.size() + acl.urls.add(url) if (old != acl.urls.size()) { notifyItemInserted(index) apply() } return index } fun addToProxy(input: String): Int? { val acl = Acl().fromReader(input.reader(), true) var result: Int? = null if (acl.bypass) acl.subnets.asIterable().asSequence().map { addSubnet(it) } .forEach { if (result == null) result = it } (acl.proxyHostnames.asIterable().asSequence().map { addHostname(it) } + acl.urls.asIterable().asSequence().map { addURL(it) }) .forEach { if (result == null) result = it } return result } fun remove(i: Int) { val j = i - acl.subnets.size() if (j < 0) { undoManager.remove(Pair(i, acl.subnets[i])) acl.subnets.removeItemAt(i) } else { val k = j - acl.proxyHostnames.size() if (k < 0) { undoManager.remove(Pair(j, acl.proxyHostnames[j])) acl.proxyHostnames.removeItemAt(j) } else { undoManager.remove(Pair(k, acl.urls[k])) acl.urls.removeItemAt(k) } } notifyItemRemoved(i) apply() } fun remove(item: Any) { when (item) { is Subnet -> { notifyItemRemoved(acl.subnets.indexOf(item)) acl.subnets.remove(item) apply() } is String -> { notifyItemRemoved(acl.subnets.size() + acl.proxyHostnames.indexOf(item)) acl.proxyHostnames.remove(item) apply() } is URL -> { notifyItemRemoved(acl.subnets.size() + acl.proxyHostnames.size() + acl.urls.indexOf(item)) acl.urls.remove(item) apply() } } } fun removeSelected() { undoManager.remove(selectedItems.map { Pair(0, it) }) selectedItems.forEach { remove(it) } selectedItems.clear() onSelectedItemsUpdated() } fun undo(actions: List>) { for ((_, item) in actions) add(item) } fun selectAll() { selectedItems.clear() selectedItems.addAll(acl.subnets.asIterable()) selectedItems.addAll(acl.proxyHostnames.asIterable()) selectedItems.addAll(acl.urls.asIterable()) onSelectedItemsUpdated() notifyDataSetChanged() } } private val isEnabled get() = (activity as? MainActivity)?.state == BaseService.State.Stopped || Core.currentProfile?.main?.route != Acl.CUSTOM_RULES private val selectedItems = HashSet() private val adapter by lazy { AclRulesAdapter() } private lateinit var list: RecyclerView private var mode: ActionMode? = null private lateinit var undoManager: UndoSnackbarManager private fun onSelectedItemsUpdated() { if (selectedItems.isEmpty()) mode?.finish() else if (mode == null) { mode = toolbar.startActionMode(this) backHandler.isEnabled = true } } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? = inflater.inflate(R.layout.layout_custom_rules, container, false) override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) ViewCompat.setOnApplyWindowInsetsListener(view, ListHolderListener) AlertDialogFragment.setResultListener(this) { which, ret -> val (edited, replacing) = ret ?: return@setResultListener replacing?.toAny()?.let { item -> adapter.remove(item) if (which == DialogInterface.BUTTON_NEUTRAL) undoManager.remove(Pair(-1, item)) } if (edited != null) adapter.add(edited.toAny())?.also { list.post { list.scrollToPosition(it) } } } if (savedInstanceState != null) { selectedItems.addAll(savedInstanceState.getStringArray(SELECTED_SUBNETS) ?.mapNotNull { Subnet.fromString(it) } ?: listOf()) selectedItems.addAll(savedInstanceState.getStringArray(SELECTED_HOSTNAMES) ?: arrayOf()) selectedItems.addAll(savedInstanceState.getStringArray(SELECTED_URLS)?.map { URL(it) } ?: listOf()) onSelectedItemsUpdated() } toolbar.setTitle(R.string.custom_rules) toolbar.inflateMenu(R.menu.custom_rules_menu) toolbar.setOnMenuItemClickListener(this) val activity = activity as MainActivity list = view.findViewById(R.id.list) ViewCompat.setOnApplyWindowInsetsListener(list, MainListListener) list.layoutManager = LinearLayoutManager(activity, RecyclerView.VERTICAL, false) list.itemAnimator = DefaultItemAnimator() list.adapter = adapter FastScrollerBuilder(list).useMd2Style().build() undoManager = UndoSnackbarManager(activity, adapter::undo) ItemTouchHelper(object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.START) { override fun getSwipeDirs(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder): Int = if (isEnabled && selectedItems.isEmpty()) super.getSwipeDirs(recyclerView, viewHolder) else 0 override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) = adapter.remove(viewHolder.bindingAdapterPosition) override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean = false }).attachToRecyclerView(list) } private val backHandler = object : OnBackPressedCallback(false) { override fun handleOnBackPressed() { mode?.finish() } } override fun onAttach(context: Context) { super.onAttach(context) requireActivity().onBackPressedDispatcher.addCallback(backHandler) } override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) outState.putStringArray(SELECTED_SUBNETS, selectedItems.filterIsInstance().map(Subnet::toString) .toTypedArray()) outState.putStringArray(SELECTED_HOSTNAMES, selectedItems.filterIsInstance().toTypedArray()) outState.putStringArray(SELECTED_URLS, selectedItems.filterIsInstance().map(URL::toString).toTypedArray()) } private fun copySelected() { val acl = Acl() acl.bypass = true selectedItems.forEach { when (it) { is Subnet -> acl.subnets.add(it) is String -> acl.proxyHostnames.add(it) is URL -> acl.urls.add(it) } } val success = Core.trySetPrimaryClip(acl.toString()) (activity as MainActivity).snackbar().setText( if (success) R.string.action_export_msg else R.string.action_export_err).show() } override fun onMenuItemClick(item: MenuItem): Boolean = when (item.itemId) { R.id.action_manual_settings -> { AclRuleDialogFragment().apply { arg(AclArg(AclItem())) key() }.show(parentFragmentManager, null) true } R.id.action_import_clipboard -> { try { check(adapter.addToProxy(Core.clipboard.primaryClip!!.getItemAt(0).text.toString()) != null) } catch (exc: Exception) { (activity as MainActivity).snackbar().setText(R.string.action_import_err).show() Timber.d(exc) } true } R.id.action_import_gfwlist -> { val acl = Acl().fromId(Acl.GFWLIST) if (acl.bypass) acl.subnets.asIterable().forEach { adapter.addSubnet(it) } acl.proxyHostnames.asIterable().forEach { adapter.addHostname(it) } acl.urls.asIterable().forEach { adapter.addURL(it) } true } else -> false } override fun onDetach() { backHandler.remove() undoManager.flush() mode?.finish() super.onDetach() } override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean { val activity = requireActivity() activity.window.statusBarColor = ContextCompat.getColor(activity, android.R.color.black) activity.menuInflater.inflate(R.menu.custom_rules_selection, menu) toolbar.touchscreenBlocksFocus = true return true } override fun onPrepareActionMode(mode: ActionMode, menu: Menu): Boolean = false override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean = when (item.itemId) { R.id.action_select_all -> { adapter.selectAll() true } R.id.action_cut -> { copySelected() adapter.removeSelected() true } R.id.action_copy -> { copySelected() true } R.id.action_delete -> { adapter.removeSelected() true } else -> false } override fun onDestroyActionMode(mode: ActionMode) { val activity = requireActivity() activity.window.statusBarColor = ContextCompat.getColor(activity, activity.theme.resolveResourceId(android.R.attr.statusBarColor)) toolbar.touchscreenBlocksFocus = false selectedItems.clear() onSelectedItemsUpdated() adapter.notifyDataSetChanged() backHandler.isEnabled = false this.mode = null } } ================================================ FILE: mobile/src/main/java/com/github/shadowsocks/bg/TileService.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.bg import android.app.KeyguardManager import android.graphics.drawable.Icon import android.service.quicksettings.Tile import androidx.annotation.RequiresApi import androidx.core.content.getSystemService import com.github.shadowsocks.Core import com.github.shadowsocks.R import com.github.shadowsocks.aidl.IShadowsocksService import com.github.shadowsocks.aidl.ShadowsocksConnection import com.github.shadowsocks.preference.DataStore import android.service.quicksettings.TileService as BaseTileService @RequiresApi(24) class TileService : BaseTileService(), ShadowsocksConnection.Callback { private val iconIdle by lazy { Icon.createWithResource(this, R.drawable.ic_service_idle) } private val iconBusy by lazy { Icon.createWithResource(this, R.drawable.ic_service_busy) } private val iconConnected by lazy { Icon.createWithResource(this, R.drawable.ic_service_active) } private val keyguard by lazy { getSystemService()!! } private var tapPending = false private val connection = ShadowsocksConnection() override fun stateChanged(state: BaseService.State, profileName: String?, msg: String?) = updateTile(state) { profileName } override fun onServiceConnected(service: IShadowsocksService) { updateTile(BaseService.State.entries[service.state]) { service.profileName } if (tapPending) { tapPending = false toggle() } } override fun onStartListening() { super.onStartListening() connection.connect(this, this) } override fun onStopListening() { connection.disconnect(this) super.onStopListening() } override fun onClick() { if (isLocked && !DataStore.canToggleLocked) unlockAndRun(this::toggle) else toggle() } private fun updateTile(serviceState: BaseService.State, profileName: () -> String?) { qsTile?.apply { label = null when (serviceState) { BaseService.State.Idle -> error("serviceState") BaseService.State.Connecting -> { icon = iconBusy state = Tile.STATE_ACTIVE } BaseService.State.Connected -> { icon = iconConnected if (!keyguard.isDeviceLocked) label = profileName() state = Tile.STATE_ACTIVE } BaseService.State.Stopping -> { icon = iconBusy state = Tile.STATE_UNAVAILABLE } BaseService.State.Stopped -> { icon = iconIdle state = Tile.STATE_INACTIVE } } label = label ?: getString(R.string.app_name) updateTile() } } private fun toggle() { val service = connection.service if (service == null) tapPending = true else BaseService.State.entries[service.state].let { state -> when { state.canStop -> Core.stopService() state == BaseService.State.Stopped -> Core.startService() } } } } ================================================ FILE: mobile/src/main/java/com/github/shadowsocks/preference/PluginConfigurationDialogFragment.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.preference import android.view.View import android.widget.EditText import androidx.appcompat.app.AlertDialog import androidx.core.os.bundleOf import androidx.preference.EditTextPreferenceDialogFragmentCompat import androidx.preference.PreferenceDialogFragmentCompat import com.github.shadowsocks.ProfileConfigActivity import com.github.shadowsocks.plugin.PluginContract import com.github.shadowsocks.plugin.PluginManager class PluginConfigurationDialogFragment : EditTextPreferenceDialogFragmentCompat() { companion object { private const val PLUGIN_ID_FRAGMENT_TAG = "com.github.shadowsocks.preference.PluginConfigurationDialogFragment.PLUGIN_ID" } fun setArg(key: String, plugin: String) { arguments = bundleOf(PreferenceDialogFragmentCompat.ARG_KEY to key, PLUGIN_ID_FRAGMENT_TAG to plugin) } private lateinit var editText: EditText override fun onPrepareDialogBuilder(builder: AlertDialog.Builder) { super.onPrepareDialogBuilder(builder) val intent = PluginManager.buildIntent(arguments?.getString(PLUGIN_ID_FRAGMENT_TAG)!!, PluginContract.ACTION_HELP) val activity = activity as ProfileConfigActivity if (intent.resolveActivity(activity.packageManager) != null) builder.setNeutralButton("?") { _, _ -> activity.pluginHelp.launch(intent.putExtra(PluginContract.EXTRA_OPTIONS, editText.text.toString())) } } override fun onBindDialogView(view: View) { super.onBindDialogView(view) editText = view.findViewById(android.R.id.edit) } } ================================================ FILE: mobile/src/main/java/com/github/shadowsocks/preference/PluginPreference.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.preference import android.content.Context import android.graphics.drawable.Drawable import android.util.AttributeSet import androidx.preference.ListPreference import com.github.shadowsocks.R import com.github.shadowsocks.plugin.PluginList import com.github.shadowsocks.plugin.PluginManager class PluginPreference(context: Context, attrs: AttributeSet? = null) : ListPreference(context, attrs) { companion object FallbackProvider : SummaryProvider { override fun provideSummary(preference: PluginPreference) = preference.selectedEntry?.label ?: preference.unknownValueSummary.format(preference.value) } lateinit var plugins: PluginList val selectedEntry get() = plugins.lookup[value] private val entryIcon: Drawable? get() = selectedEntry?.icon private val unknownValueSummary = context.getString(R.string.plugin_unknown) private var listener: OnPreferenceChangeListener? = null override fun getOnPreferenceChangeListener(): OnPreferenceChangeListener? = listener override fun setOnPreferenceChangeListener(listener: OnPreferenceChangeListener?) { this.listener = listener } init { super.setOnPreferenceChangeListener { preference, newValue -> val listener = listener if (listener == null || listener.onPreferenceChange(preference, newValue)) { value = newValue.toString() icon = entryIcon true } else false } } fun init() { plugins = PluginManager.fetchPlugins() entryValues = plugins.lookup.map { it.key }.toTypedArray() icon = entryIcon summaryProvider = FallbackProvider } override fun onSetInitialValue(defaultValue: Any?) { super.onSetInitialValue(defaultValue) init() } } ================================================ FILE: mobile/src/main/java/com/github/shadowsocks/preference/PluginPreferenceDialogFragment.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.preference import android.app.Dialog import android.content.ActivityNotFoundException import android.content.Intent import android.graphics.Typeface import android.net.Uri import android.os.Bundle import android.provider.Settings import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView import androidx.appcompat.widget.TooltipCompat import androidx.core.os.bundleOf import androidx.core.view.isGone import androidx.core.view.isVisible import androidx.fragment.app.setFragmentResult import androidx.preference.PreferenceDialogFragmentCompat import androidx.recyclerview.widget.DefaultItemAnimator import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.github.shadowsocks.R import com.github.shadowsocks.plugin.Plugin import com.google.android.material.bottomsheet.BottomSheetDialog class PluginPreferenceDialogFragment : PreferenceDialogFragmentCompat() { companion object { const val KEY_SELECTED_ID = "id" } private inner class IconListViewHolder(val dialog: BottomSheetDialog, view: View) : RecyclerView.ViewHolder(view), View.OnClickListener, View.OnLongClickListener { private lateinit var plugin: Plugin private val text1 = view.findViewById(android.R.id.text1) private val text2 = view.findViewById(android.R.id.text2) private val icon = view.findViewById(android.R.id.icon) private val unlock = view.findViewById(R.id.unlock).apply { TooltipCompat.setTooltipText(this, getText(R.string.plugin_auto_connect_unlock_only)) } init { view.setOnClickListener(this) view.setOnLongClickListener(this) } fun bind(plugin: Plugin, selected: Boolean = false) { this.plugin = plugin val label = plugin.label text1.text = label text2.text = plugin.id val typeface = if (selected) Typeface.BOLD else Typeface.NORMAL text1.setTypeface(null, typeface) text2.setTypeface(null, typeface) text2.isVisible = plugin.id.isNotEmpty() && label != plugin.id icon.setImageDrawable(plugin.icon) unlock.isGone = plugin.directBootAware || !DataStore.persistAcrossReboot } override fun onClick(v: View?) { clicked = plugin dialog.dismiss() } override fun onLongClick(v: View?) = try { startActivity(Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.Builder() .scheme("package") .opaquePart(plugin.packageName) .build())) true } catch (_: ActivityNotFoundException) { false } } private inner class IconListAdapter(private val dialog: BottomSheetDialog) : RecyclerView.Adapter() { override fun getItemCount(): Int = preference.plugins.size override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = IconListViewHolder(dialog, LayoutInflater.from(parent.context).inflate(R.layout.icon_list_item_2, parent, false)) override fun onBindViewHolder(holder: IconListViewHolder, position: Int) { if (selected < 0) holder.bind(preference.plugins[position]) else when (position) { 0 -> holder.bind(preference.selectedEntry!!, true) in selected + 1..Int.MAX_VALUE -> holder.bind(preference.plugins[position]) else -> holder.bind(preference.plugins[position - 1]) } } } fun setArg(key: String) { arguments = bundleOf(ARG_KEY to key) } private val preference by lazy { getPreference() as PluginPreference } private val selected by lazy { preference.plugins.indexOf(preference.selectedEntry) } private var clicked: Plugin? = null override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val activity = requireActivity() val dialog = BottomSheetDialog(activity, theme) val recycler = RecyclerView(activity) val padding = resources.getDimensionPixelOffset(R.dimen.bottom_sheet_padding) recycler.setPadding(0, padding, 0, padding) recycler.setHasFixedSize(true) recycler.layoutManager = LinearLayoutManager(activity) recycler.itemAnimator = DefaultItemAnimator() recycler.adapter = IconListAdapter(dialog) recycler.layoutParams = ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) dialog.setContentView(recycler) return dialog } override fun onDialogClosed(positiveResult: Boolean) { val clicked = clicked if (clicked != null && clicked != preference.selectedEntry) { setFragmentResult(javaClass.name, bundleOf(KEY_SELECTED_ID to clicked.id)) } } } ================================================ FILE: mobile/src/main/java/com/github/shadowsocks/subscription/SubscriptionFragment.kt ================================================ /******************************************************************************* * * * Copyright (C) 2020 by Max Lv * * Copyright (C) 2020 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.subscription import android.annotation.SuppressLint import android.content.DialogInterface import android.content.Intent import android.os.Bundle import android.os.Parcelable import android.text.Editable import android.text.TextWatcher import android.view.LayoutInflater import android.view.MenuItem import android.view.View import android.view.ViewGroup import android.widget.AdapterView import android.widget.EditText import android.widget.TextView import androidx.appcompat.app.AlertDialog import androidx.appcompat.widget.Toolbar import androidx.core.view.ViewCompat import androidx.recyclerview.widget.DefaultItemAnimator import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.github.shadowsocks.MainActivity import com.github.shadowsocks.R import com.github.shadowsocks.ToolbarFragment import com.github.shadowsocks.plugin.fragment.AlertDialogFragment import com.github.shadowsocks.utils.readableMessage import com.github.shadowsocks.widget.ListHolderListener import com.github.shadowsocks.widget.MainListListener import com.github.shadowsocks.widget.UndoSnackbarManager import com.google.android.material.textfield.TextInputLayout import kotlinx.parcelize.Parcelize import me.zhanghai.android.fastscroll.FastScrollerBuilder import java.net.MalformedURLException import java.net.URL class SubscriptionFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener { @Parcelize data class SubItem(val item: String? = null) : Parcelable @Parcelize data class SubEditResult(val edited: String?, val replacing: String?) : Parcelable class SubDialogFragment : AlertDialogFragment(), TextWatcher, AdapterView.OnItemSelectedListener { private lateinit var editText: EditText private lateinit var inputLayout: TextInputLayout private val positive by lazy { (dialog as AlertDialog).getButton(AlertDialog.BUTTON_POSITIVE) } override fun AlertDialog.Builder.prepare(listener: DialogInterface.OnClickListener) { val activity = requireActivity() @SuppressLint("InflateParams") val view = activity.layoutInflater.inflate(R.layout.dialog_subscription, null) editText = view.findViewById(R.id.content) inputLayout = view.findViewById(R.id.content_layout) editText.setText(arg.item) editText.addTextChangedListener(this@SubDialogFragment) setTitle(R.string.edit_subscription) setPositiveButton(android.R.string.ok, listener) setNegativeButton(android.R.string.cancel, null) if (!arg.item.isNullOrEmpty()) setNeutralButton(R.string.delete, listener) setView(view) } override fun onStart() { super.onStart() validate() } override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {} override fun afterTextChanged(s: Editable) = validate(value = s) override fun onNothingSelected(parent: AdapterView<*>?) = check(false) override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) = validate() private fun validate(value: Editable = editText.text) { var message = "" positive.isEnabled = try { val url = URL(value.toString()) if ("http".equals(url.protocol, true)) message = getString(R.string.cleartext_http_warning) true } catch (e: MalformedURLException) { message = e.readableMessage false } inputLayout.error = message } override fun ret(which: Int) = when (which) { DialogInterface.BUTTON_POSITIVE -> SubEditResult(editText.text.toString(), arg.item) DialogInterface.BUTTON_NEUTRAL -> SubEditResult(null, arg.item) else -> null } override fun onClick(dialog: DialogInterface?, which: Int) { if (which != DialogInterface.BUTTON_NEGATIVE) super.onClick(dialog, which) } } private inner class SubViewHolder(view: View) : RecyclerView.ViewHolder(view), View.OnClickListener { lateinit var item: URL private val text = view.findViewById(android.R.id.text1) init { view.isFocusable = true view.setOnClickListener(this) view.setBackgroundResource(R.drawable.background_selectable) } fun bind(url: URL) { item = url text.text = url.toString() } override fun onClick(v: View?) { SubDialogFragment().apply { arg(SubItem(item.toString())) key() }.show(parentFragmentManager, null) } } private inner class SubscriptionAdapter : RecyclerView.Adapter() { private val subscription = Subscription.instance private var savePending = false override fun onBindViewHolder(holder: SubViewHolder, i: Int) { holder.bind(subscription.urls[i]) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = SubViewHolder(LayoutInflater .from(parent.context).inflate(android.R.layout.simple_list_item_1, parent, false)) override fun getItemCount(): Int = subscription.urls.size() private fun apply() { if (!savePending) { savePending = true list.post { Subscription.instance = subscription savePending = false } } } fun add(url: URL): Int { val old = subscription.urls.size() val index = subscription.urls.add(url) if (old != subscription.urls.size()) { notifyItemInserted(index) apply() } return index } fun remove(i: Int) { undoManager.remove(Pair(i, subscription.urls[i])) subscription.urls.removeItemAt(i) notifyItemRemoved(i) apply() } fun remove(item: URL) { notifyItemRemoved(subscription.urls.indexOf(item)) subscription.urls.remove(item) apply() } fun undo(actions: List>) { for ((_, item) in actions) when (item) { is URL -> { add(item) } } } } private val adapter by lazy { SubscriptionAdapter() } private lateinit var list: RecyclerView private lateinit var undoManager: UndoSnackbarManager override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? = inflater.inflate(R.layout.layout_subscriptions, container, false) override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) ViewCompat.setOnApplyWindowInsetsListener(view, ListHolderListener) AlertDialogFragment.setResultListener(this) { which, ret -> val (edited, replacing) = ret ?: return@setResultListener replacing?.let { item -> val url = URL(item) adapter.remove(url) if (which == DialogInterface.BUTTON_NEUTRAL) undoManager.remove(-1 to url) } if (edited != null) adapter.add(URL(edited)).also { list.post { list.scrollToPosition(it) } } } toolbar.setTitle(R.string.subscriptions) toolbar.inflateMenu(R.menu.subscription_menu) toolbar.setOnMenuItemClickListener(this) SubscriptionService.idle.observe(viewLifecycleOwner) { toolbar.menu.findItem(R.id.action_update_subscription).isEnabled = it } val activity = activity as MainActivity list = view.findViewById(R.id.list) ViewCompat.setOnApplyWindowInsetsListener(list, MainListListener) list.layoutManager = LinearLayoutManager(activity, RecyclerView.VERTICAL, false) list.itemAnimator = DefaultItemAnimator() list.adapter = adapter FastScrollerBuilder(list).useMd2Style().build() undoManager = UndoSnackbarManager(activity, adapter::undo) ItemTouchHelper(object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.START) { override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) = adapter.remove(viewHolder.bindingAdapterPosition) override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean = false }).attachToRecyclerView(list) } override fun onMenuItemClick(item: MenuItem): Boolean = when (item.itemId) { R.id.action_manual_settings -> { SubDialogFragment().apply { arg(SubItem()) key() }.show(parentFragmentManager, null) true } R.id.action_update_subscription -> { val context = requireContext() context.startService(Intent(context, SubscriptionService::class.java)) true } else -> false } override fun onDetach() { undoManager.flush() super.onDetach() } } ================================================ FILE: mobile/src/main/java/com/github/shadowsocks/tasker/ActionListener.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.tasker import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import com.github.shadowsocks.Core import com.github.shadowsocks.database.ProfileManager class ActionListener : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { val settings = Settings.fromIntent(intent) var changed = false if (ProfileManager.getProfile(settings.profileId) != null) { Core.switchProfile(settings.profileId) changed = true } if (settings.switchOn) { Core.startService() if (changed) Core.reloadService() } else Core.stopService() } } ================================================ FILE: mobile/src/main/java/com/github/shadowsocks/tasker/ConfigActivity.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.tasker import android.app.Activity import android.content.res.Resources import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.CheckedTextView import android.widget.Switch import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.Toolbar import androidx.core.view.ViewCompat import androidx.recyclerview.widget.DefaultItemAnimator import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.github.shadowsocks.R import com.github.shadowsocks.database.Profile import com.github.shadowsocks.database.ProfileManager import com.github.shadowsocks.utils.resolveResourceId import com.github.shadowsocks.widget.ListHolderListener import com.github.shadowsocks.widget.ListListener class ConfigActivity : AppCompatActivity() { inner class ProfileViewHolder(view: View) : RecyclerView.ViewHolder(view), View.OnClickListener { private var item: Profile? = null private val text = itemView.findViewById(android.R.id.text1) init { view.setBackgroundResource(theme.resolveResourceId(android.R.attr.selectableItemBackground)) itemView.setOnClickListener(this) } fun bindDefault() { item = null text.setText(R.string.profile_default) text.isChecked = taskerOption.profileId < 0 } fun bind(item: Profile) { this.item = item text.text = item.formattedName text.isChecked = taskerOption.profileId == item.id } override fun onClick(v: View?) { taskerOption.switchOn = switch.isChecked val item = item taskerOption.profileId = item?.id ?: -1 setResult(Activity.RESULT_OK, taskerOption.toIntent(this@ConfigActivity)) finish() } } inner class ProfilesAdapter : RecyclerView.Adapter() { internal val profiles = ProfileManager.getActiveProfiles()?.toMutableList() ?: mutableListOf() override fun onBindViewHolder(holder: ProfileViewHolder, position: Int) = if (position == 0) holder.bindDefault() else holder.bind(profiles[position - 1]) override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ProfileViewHolder = ProfileViewHolder( LayoutInflater.from(parent.context).inflate(Resources.getSystem() .getIdentifier("select_dialog_singlechoice_material", "layout", "android"), parent, false)) override fun getItemCount(): Int = 1 + profiles.size } private lateinit var taskerOption: Settings private lateinit var switch: Switch private val profilesAdapter = ProfilesAdapter() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val intent = intent if (intent == null) { finish() return } taskerOption = Settings.fromIntent(intent) setContentView(R.layout.layout_tasker) ListHolderListener.setup(this) val toolbar = findViewById(R.id.toolbar) toolbar.setTitle(R.string.app_name) toolbar.setNavigationIcon(R.drawable.ic_navigation_close) toolbar.setNavigationOnClickListener { finish() } switch = findViewById(R.id.serviceSwitch) switch.isChecked = taskerOption.switchOn findViewById(R.id.list).apply { ViewCompat.setOnApplyWindowInsetsListener(this, ListListener) itemAnimator = DefaultItemAnimator() adapter = profilesAdapter layoutManager = LinearLayoutManager(this@ConfigActivity, RecyclerView.VERTICAL, false).apply { if (taskerOption.profileId >= 0) { scrollToPosition(profilesAdapter.profiles.indexOfFirst { it.id == taskerOption.profileId } + 1) } } } } } ================================================ FILE: mobile/src/main/java/com/github/shadowsocks/tasker/Settings.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.tasker import android.content.Context import android.content.Intent import android.os.Bundle import androidx.core.os.bundleOf import com.github.shadowsocks.R import com.github.shadowsocks.database.ProfileManager import com.twofortyfouram.locale.api.Intent as ApiIntent class Settings(bundle: Bundle?) { companion object { private const val KEY_SWITCH_ON = "switch_on" private const val KEY_PROFILE_ID = "profile_id" fun fromIntent(intent: Intent) = Settings(intent.getBundleExtra(ApiIntent.EXTRA_BUNDLE)) } var switchOn: Boolean = bundle?.getBoolean(KEY_SWITCH_ON, true) ?: true var profileId: Long init { profileId = bundle?.getLong(KEY_PROFILE_ID, -1L) ?: -1L if (profileId < 0) profileId = (bundle?.getInt(KEY_PROFILE_ID, -1) ?: -1).toLong() } fun toIntent(context: Context): Intent { val profile = ProfileManager.getProfile(profileId) return Intent() .putExtra(ApiIntent.EXTRA_BUNDLE, bundleOf(Pair(KEY_SWITCH_ON, switchOn), Pair(KEY_PROFILE_ID, profileId))) .putExtra(ApiIntent.EXTRA_STRING_BLURB, if (profile != null) context.getString( if (switchOn) R.string.start_service else R.string.stop_service, profile.formattedName) else context.getString(if (switchOn) R.string.start_service_default else R.string.stop)) } } ================================================ FILE: mobile/src/main/java/com/github/shadowsocks/widget/FabProgressBehavior.kt ================================================ /******************************************************************************* * * * Copyright (C) 2021 by Max Lv * * Copyright (C) 2021 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.widget import android.content.Context import android.util.AttributeSet import android.view.View import androidx.coordinatorlayout.widget.CoordinatorLayout import com.google.android.material.progressindicator.CircularProgressIndicator class FabProgressBehavior(context: Context, attrs: AttributeSet?) : CoordinatorLayout.Behavior(context, attrs) { override fun layoutDependsOn(parent: CoordinatorLayout, child: CircularProgressIndicator, dependency: View) = dependency.id == (child.layoutParams as CoordinatorLayout.LayoutParams).anchorId override fun onLayoutChild(parent: CoordinatorLayout, child: CircularProgressIndicator, layoutDirection: Int): Boolean { val size = parent.getDependencies(child).single().measuredHeight + child.trackThickness return if (child.indicatorSize != size) { child.indicatorSize = size true } else false } } ================================================ FILE: mobile/src/main/java/com/github/shadowsocks/widget/ServiceButton.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.widget import android.content.Context import android.graphics.drawable.Drawable import android.os.Build import android.util.AttributeSet import android.view.PointerIcon import android.view.View import androidx.annotation.DrawableRes import androidx.appcompat.widget.TooltipCompat import androidx.dynamicanimation.animation.DynamicAnimation import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.lifecycleScope import androidx.lifecycle.withStarted import androidx.vectordrawable.graphics.drawable.Animatable2Compat import androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat import com.github.shadowsocks.R import com.github.shadowsocks.bg.BaseService import com.google.android.material.floatingactionbutton.FloatingActionButton import com.google.android.material.progressindicator.BaseProgressIndicator import kotlinx.coroutines.Job import kotlinx.coroutines.delay import kotlinx.coroutines.launch import java.util.ArrayDeque class ServiceButton @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : FloatingActionButton(context, attrs, defStyleAttr), DynamicAnimation.OnAnimationEndListener { private val callback = object : Animatable2Compat.AnimationCallback() { override fun onAnimationEnd(drawable: Drawable) { super.onAnimationEnd(drawable) var next = animationQueue.peek() ?: return if (next.icon.current == drawable) { animationQueue.pop() next = animationQueue.peek() ?: return } next.start() } } private inner class AnimatedState(@DrawableRes resId: Int, private val onStart: BaseProgressIndicator<*>.() -> Unit = { hideProgress() }) { val icon: AnimatedVectorDrawableCompat = AnimatedVectorDrawableCompat.create(context, resId)!!.apply { registerAnimationCallback(this@ServiceButton.callback) } fun start() { setImageDrawable(icon) icon.start() progress.onStart() } fun stop() = icon.stop() } private val iconStopped by lazy { AnimatedState(R.drawable.ic_service_stopped) } private val iconConnecting by lazy { AnimatedState(R.drawable.ic_service_connecting) { hideProgress() delayedAnimation = (context as LifecycleOwner).lifecycleScope.launch { delay(context.resources.getInteger(android.R.integer.config_mediumAnimTime) + 1000L) context.lifecycle.withStarted { isIndeterminate = true show() } } } } private val iconConnected by lazy { AnimatedState(R.drawable.ic_service_connected) { delayedAnimation?.cancel() setProgressCompat(1, true) } } private val iconStopping by lazy { AnimatedState(R.drawable.ic_service_stopping) } private val animationQueue = ArrayDeque() private var checked = false private var delayedAnimation: Job? = null private lateinit var progress: BaseProgressIndicator<*> fun initProgress(progress: BaseProgressIndicator<*>) { this.progress = progress progress.progressDrawable?.addSpringAnimationEndListener(this) } override fun onAnimationEnd(animation: DynamicAnimation>?, canceled: Boolean, value: Float, velocity: Float) { if (!canceled) progress.hide() } private fun hideProgress() { delayedAnimation?.cancel() progress.hide() } override fun onCreateDrawableState(extraSpace: Int): IntArray { val drawableState = super.onCreateDrawableState(extraSpace + 1) if (checked) View.mergeDrawableStates(drawableState, intArrayOf(android.R.attr.state_checked)) return drawableState } fun changeState(state: BaseService.State, previousState: BaseService.State, animate: Boolean) { when (state) { BaseService.State.Connecting -> changeState(iconConnecting, animate) BaseService.State.Connected -> changeState(iconConnected, animate) BaseService.State.Stopping -> { changeState(iconStopping, animate && previousState == BaseService.State.Connected) } else -> changeState(iconStopped, animate) } checked = state == BaseService.State.Connected refreshDrawableState() val description = context.getText(if (state.canStop) R.string.stop else R.string.connect) contentDescription = description TooltipCompat.setTooltipText(this, description) val enabled = state.canStop || state == BaseService.State.Stopped isEnabled = enabled if (Build.VERSION.SDK_INT >= 24) pointerIcon = PointerIcon.getSystemIcon(context, if (enabled) PointerIcon.TYPE_HAND else PointerIcon.TYPE_WAIT) } private fun changeState(icon: AnimatedState, animate: Boolean) { fun counters(a: AnimatedState, b: AnimatedState): Boolean = a == iconStopped && b == iconConnecting || a == iconConnecting && b == iconStopped || a == iconConnected && b == iconStopping || a == iconStopping && b == iconConnected if (animate) { if (animationQueue.size < 2 || !counters(animationQueue.last, icon)) { animationQueue.add(icon) if (animationQueue.size == 1) icon.start() } else animationQueue.removeLast() } else { animationQueue.peekFirst()?.stop() animationQueue.clear() icon.start() // force ensureAnimatorSet to be called so that stop() will work icon.stop() } } } ================================================ FILE: mobile/src/main/java/com/github/shadowsocks/widget/StatsBar.kt ================================================ /******************************************************************************* * * * Copyright (C) 2018 by Max Lv * * Copyright (C) 2018 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.widget import android.content.Context import android.text.format.Formatter import android.util.AttributeSet import android.view.View import android.widget.TextView import androidx.activity.viewModels import androidx.appcompat.widget.TooltipCompat import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.core.view.doOnPreDraw import com.github.shadowsocks.MainActivity import com.github.shadowsocks.R import com.github.shadowsocks.bg.BaseService import com.github.shadowsocks.net.HttpsTest import com.google.android.material.bottomappbar.BottomAppBar class StatsBar @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = R.attr.bottomAppBarStyle) : BottomAppBar(context, attrs, defStyleAttr) { private lateinit var statusText: TextView private lateinit var txText: TextView private lateinit var rxText: TextView private lateinit var txRateText: TextView private lateinit var rxRateText: TextView private val tester by (context as MainActivity).viewModels() private lateinit var behavior: Behavior override fun getBehavior(): Behavior { if (!this::behavior.isInitialized) behavior = object : Behavior() { override fun onNestedScroll(coordinatorLayout: CoordinatorLayout, child: BottomAppBar, target: View, dxConsumed: Int, dyConsumed: Int, dxUnconsumed: Int, dyUnconsumed: Int, type: Int, consumed: IntArray) { super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed + dyUnconsumed, dxUnconsumed, 0, type, consumed) } } return behavior } override fun setOnClickListener(l: OnClickListener?) { statusText = findViewById(R.id.status) txText = findViewById(R.id.tx) txRateText = findViewById(R.id.txRate) rxText = findViewById(R.id.rx) rxRateText = findViewById(R.id.rxRate) super.setOnClickListener(l) } private fun setStatus(text: CharSequence) { statusText.text = text TooltipCompat.setTooltipText(this, text) } fun changeState(state: BaseService.State, animate: Boolean) { val activity = context as MainActivity if ((state == BaseService.State.Connected).also { hideOnScroll = it }) { doOnPreDraw { performShow(animate) } tester.status.observe(activity) { it.retrieve(this::setStatus) { msg -> activity.snackbar(msg).show() } } } else { doOnPreDraw { performHide(animate) } updateTraffic(0, 0, 0, 0) tester.status.removeObservers(activity) if (state != BaseService.State.Idle) tester.invalidate() setStatus(context.getText(when (state) { BaseService.State.Connecting -> R.string.connecting BaseService.State.Stopping -> R.string.stopping else -> R.string.not_connected })) } } fun updateTraffic(txRate: Long, rxRate: Long, txTotal: Long, rxTotal: Long) { txText.text = "▲ ${Formatter.formatFileSize(context, txTotal)}" rxText.text = "▼ ${Formatter.formatFileSize(context, rxTotal)}" txRateText.text = context.getString(R.string.speed, Formatter.formatFileSize(context, txRate)) rxRateText.text = context.getString(R.string.speed, Formatter.formatFileSize(context, rxRate)) } fun testConnection() = tester.testConnection() } ================================================ FILE: mobile/src/main/java/com/github/shadowsocks/widget/UndoSnackbarManager.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.widget import com.github.shadowsocks.MainActivity import com.github.shadowsocks.R import com.google.android.material.snackbar.Snackbar /** * @param activity MainActivity. * //@param view The view to find a parent from. * @param undo Callback for undoing removals. * @param commit Callback for committing removals. * @tparam T Item type. */ class UndoSnackbarManager(private val activity: MainActivity, private val undo: (List>) -> Unit, commit: ((List>) -> Unit)? = null) { private val recycleBin = ArrayList>() private val removedCallback = object : Snackbar.Callback() { override fun onDismissed(transientBottomBar: Snackbar?, event: Int) { if (last === transientBottomBar && event != DISMISS_EVENT_ACTION) { commit?.invoke(recycleBin) recycleBin.clear() last = null } } } private var last: Snackbar? = null fun remove(items: Collection>) { recycleBin.addAll(items) val count = recycleBin.size activity.snackbar(activity.resources.getQuantityString(R.plurals.removed, count, count)).apply { addCallback(removedCallback) setAction(R.string.undo) { undo(recycleBin.reversed()) recycleBin.clear() } last = this show() } } fun remove(vararg items: Pair) = remove(items.toList()) fun flush() = last?.dismiss() } ================================================ FILE: mobile/src/main/java/com/github/shadowsocks/widget/WindowInsetsListeners.kt ================================================ /******************************************************************************* * * * Copyright (C) 2019 by Max Lv * * Copyright (C) 2019 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.widget import android.view.View import androidx.appcompat.app.AppCompatActivity import androidx.core.graphics.Insets import androidx.core.view.* import com.github.shadowsocks.R object ListHolderListener : OnApplyWindowInsetsListener { override fun onApplyWindowInsets(view: View, insets: WindowInsetsCompat): WindowInsetsCompat { val statusBarInsets = insets.getInsets(WindowInsetsCompat.Type.statusBars()) view.setPadding(statusBarInsets.left, statusBarInsets.top, statusBarInsets.right, statusBarInsets.bottom) return WindowInsetsCompat.Builder(insets).apply { setInsets(WindowInsetsCompat.Type.statusBars(), Insets.NONE) }.build() } fun setup(activity: AppCompatActivity) = activity.findViewById(android.R.id.content).let { ViewCompat.setOnApplyWindowInsetsListener(it, ListHolderListener) WindowCompat.setDecorFitsSystemWindows(activity.window, false) } } object MainListListener : OnApplyWindowInsetsListener { override fun onApplyWindowInsets(view: View, insets: WindowInsetsCompat) = insets.apply { view.updatePadding(bottom = view.resources.getDimensionPixelOffset(R.dimen.main_list_padding_bottom) + insets.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom) } } object ListListener : OnApplyWindowInsetsListener { override fun onApplyWindowInsets(view: View, insets: WindowInsetsCompat) = insets.apply { view.updatePadding(bottom = insets.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom) } } ================================================ FILE: mobile/src/main/res/color/background_service.xml ================================================ ================================================ FILE: mobile/src/main/res/color/nav_item_tint.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/background_profile.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/background_selectable.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_action_assignment.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_action_copyright.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_action_delete.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_action_description.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_action_dns.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_action_done.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_action_help_outline.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_action_lock.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_action_lock_open.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_action_note_add.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_action_settings.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_app_shortcut_background.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_av_playlist_add.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_communication_phonelink_ring.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_device_data_usage.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_device_developer_mode.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_file_cloud_queue.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_file_file_upload.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_hardware_router.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_image_camera_alt.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_image_edit.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_image_looks_6.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_image_photo.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_maps_360.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_maps_directions.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_maps_directions_boat.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_navigation_apps.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_navigation_menu.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_notification_enhanced_encryption.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_qu_camera_launcher.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_qu_shadowsocks_foreground.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_qu_shadowsocks_launcher.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_service_busy.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_service_connected.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_service_connecting.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_service_idle.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_service_stopped.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_service_stopping.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_settings_password.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_social_emoji_symbols.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable/ic_social_share.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable-v26/ic_qu_camera_launcher.xml ================================================ ================================================ FILE: mobile/src/main/res/drawable-v26/ic_qu_shadowsocks_launcher.xml ================================================ ================================================ FILE: mobile/src/main/res/layout/dialog_acl_rule.xml ================================================ ================================================ FILE: mobile/src/main/res/layout/dialog_subscription.xml ================================================ ================================================ FILE: mobile/src/main/res/layout/icon_list_item_2.xml ================================================ ================================================ FILE: mobile/src/main/res/layout/layout_about.xml ================================================ ================================================ FILE: mobile/src/main/res/layout/layout_apps.xml ================================================ ================================================ FILE: mobile/src/main/res/layout/layout_apps_item.xml ================================================ ================================================ FILE: mobile/src/main/res/layout/layout_custom_rules.xml ================================================ ================================================ FILE: mobile/src/main/res/layout/layout_global_settings.xml ================================================ ================================================ FILE: mobile/src/main/res/layout/layout_list.xml ================================================ ================================================ FILE: mobile/src/main/res/layout/layout_main.xml ================================================ ================================================ FILE: mobile/src/main/res/layout/layout_profile.xml ================================================ ================================================ FILE: mobile/src/main/res/layout/layout_profile_config.xml ================================================ ================================================ FILE: mobile/src/main/res/layout/layout_scanner.xml ================================================ ================================================ FILE: mobile/src/main/res/layout/layout_subscriptions.xml ================================================ ================================================ FILE: mobile/src/main/res/layout/layout_tasker.xml ================================================ ================================================ FILE: mobile/src/main/res/layout/layout_udp_fallback.xml ================================================ ================================================ FILE: mobile/src/main/res/layout/navigation_header.xml ================================================ ================================================ FILE: mobile/src/main/res/layout/preference_dialog_password.xml ================================================ ================================================ FILE: mobile/src/main/res/menu/app_manager_menu.xml ================================================ ================================================ FILE: mobile/src/main/res/menu/custom_rules_menu.xml ================================================ ================================================ FILE: mobile/src/main/res/menu/custom_rules_selection.xml ================================================ ================================================ FILE: mobile/src/main/res/menu/navigation_main.xml ================================================ ================================================ FILE: mobile/src/main/res/menu/profile_config_menu.xml ================================================ ================================================ FILE: mobile/src/main/res/menu/profile_manager_menu.xml ================================================ ================================================ FILE: mobile/src/main/res/menu/profile_share_popup.xml ================================================ ================================================ FILE: mobile/src/main/res/menu/scanner_menu.xml ================================================ ================================================ FILE: mobile/src/main/res/menu/subscription_menu.xml ================================================ ================================================ FILE: mobile/src/main/res/raw/about.html ================================================

A Shadowsocks client for Android, written in Kotlin.

Copyright (C) 2017 by Max Lv max.c.lv@gmail.com

Copyright (C) 2017 by Mygod Studio contact-shadowsocks-android@mygod.be

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 http://www.gnu.org/licenses/.

Open Source Licenses

================================================ FILE: mobile/src/main/res/values/arrays.xml ================================================ @string/route_entry_all @string/route_entry_bypass_lan @string/route_entry_bypass_chn @string/route_entry_bypass_lan_chn @string/route_entry_gfwlist @string/route_entry_chinalist @string/custom_rules all bypass-lan bypass-china bypass-lan-china gfwlist china-list custom-rules @string/acl_rule_templates_generic @string/acl_rule_templates_domain @string/acl_rule_online_config @string/service_mode_proxy @string/service_mode_vpn @string/service_mode_transproxy proxy vpn transproxy ================================================ FILE: mobile/src/main/res/values/colors.xml ================================================ @color/material_primary_100 @color/material_primary_300 #ffab00 ================================================ FILE: mobile/src/main/res/values/dimen.xml ================================================ 264dp 8dp 88dp 8dp ================================================ FILE: mobile/src/main/res/values/styles.xml ================================================ ================================================ FILE: mobile/src/main/res/values-night/colors.xml ================================================ @color/material_primary_800 @color/material_primary_600 ================================================ FILE: mobile/src/main/res/xml/pref_global.xml ================================================ ================================================ FILE: mobile/src/main/res/xml/pref_profile.xml ================================================ ================================================ FILE: mobile/src/main/res/xml/shortcuts.xml ================================================ ================================================ FILE: plugin/.gitignore ================================================ /build ================================================ FILE: plugin/CHANGES.md ================================================ * 2.0.1: * Moved `AlertDialogFragment` and related utilities to `fragment` package, with support for Fragment Result API from AndroidX Fragment 1.3. * Dependency updates: - `androidx.fragment:fragment-ktx:1.3.3`; - `com.google.android.material:material:1.3.0`; - `org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.32`. * 2.0.0: * Deprecated passing `-V` and `--fast-open` to plugin. Please find `__android_vpn` option passed via plugin options. * Dependency updates: - `androidx.core:core-ktx:1.3.2`; - `androidx.drawerlayout:drawerlayout:1.1.1`; - `com.google.android.material:material:1.2.1`; - `org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10`. * 1.3.4: * Optional new metadata `com.github.shadowsocks.plugin.id.aliases` for plugin ID aliases; (see doc for `PluginContract.METADATA_KEY_ID_ALIASES` and main documentation "Plugin ID Aliasing" for more information) * Please use `android:path` instead of `android:pathPrefix`, sample code in documentations have been updated to reflect this recommendation. * Added missing documentation regarding direct boot support. Please add `android:directBootAware="true"` with proper support for your `provider` if possible. * You can now use `android:resources` on `meta-data` tags. (main/host app update required, however, you should never use dynamic resources) * Fix occasional crash in `AlertDialogFragment`. * Translation updates. * Dependency updates: - `androidx.core:core-ktx:1.2.0`; - `com.google.android.material:material:1.1.0`. * 1.3.3: * Fix a build script issue. * 1.3.2: * Fix first key-value pair disappearing with null value. (#2391) * Dependency updates: - `androidx.core:core-ktx:1.1.0`; - `com.google.android.material:material:1.1.0-rc01`; - `org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.61`. * 1.3.1: * New theme resource `Theme.Shadowsocks.Immersive` for better Android Q-esque translucent navigation bars. This is an opt-in feature. Please add `android:theme="@style/Theme.Shadowsocks.Immersive"` to your `` to enable this theme. * New color resources `light_*` and `dark_*` for passing to custom tabs; * Dependency updates: - `androidx.core:core-ktx:1.1.0-rc03`; - `androidx.drawerlayout:drawerlayout:1.1.0-alpha03`; - `com.google.android.material:material:1.1.0-alpha09`; - `org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.41`. * 1.3.0: * Optional new metadata `com.github.shadowsocks.plugin.executable_path` for even faster initialization; (see doc for `PluginContract.METADATA_KEY_EXECUTABLE_PATH` for more information) * Breaking API change: `val AlertDialogFragment.ret: Ret?` => `fun AlertDialogFragment.ret(which: Int): Ret?`; (nothing needs to be done if you are not using this API) * Dependency updates: - Now targeting API 29; - `androidx.core:core-ktx:1.1.0-rc01`; - `com.google.android.material:material:1.1.0-alpha07`; - `org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.40`. * 1.2.0: * New helper class `AlertDialogFragment` for creating `AlertDialog` that persists through configuration changes; * Dependency update: `com.google.android.material:material:1.1.0-alpha03`. * 1.1.0: * Having control characters in plugin options is no longer allowed. If this breaks your plugin, you are doing it wrong. * New helper method: `PluginOptions.putWithDefault`. * 1.0.0: * BREAKING CHANGE: Plugins developed using this version and forward require shadowsocks-android 4.6.5 or higher. * `PathProvider` now takes `Int` instead of `String` for file modes; * Refactor to AndroidX; * No longer depends on preference libraries. * 0.1.1: * Rewritten in Kotlin; * Fix assert not working; * Min API 21; * Update support library version to 27.1.1. * 0.0.4: * Enlarge text size of number pickers; * Update support library version to 26.0.0. * 0.0.3: * Update support library version to 25.2.0. * 0.0.2: * Add `getOrDefault` to `PluginOptions`; * Update support library version to 25.1.1. * 0.0.1: Initial release. ================================================ FILE: plugin/README.md ================================================ # shadowsocks-android plugin framework [Documentation](doc.md) | [Change log](CHANGES.md) Support library for easier development on [shadowsocks plugin](https://github.com/shadowsocks/shadowsocks-org/issues/28) for Android. Also includes some useful resources to easily get consistent styling with the main app. ## Official plugins These are some plugins ready to use on shadowsocks-android. * [v2ray](https://github.com/shadowsocks/v2ray-plugin-android) * [kcptun](https://github.com/shadowsocks/kcptun-android/releases) * [simple-obfs](https://github.com/shadowsocks/simple-obfs-android/releases) ## Developer's guide This library is designed with Java interoperability in mind so theoretically you can use this library with other languages and/or build tools but there isn't documentation for that yet. This guide is written for Scala + SBT. Contributions are welcome. ### Package name There are no arbitrary restrictions/requirements on package name, component name and content provider authority, but you're suggested to follow the format in this documentations. For package name, use `com.github.shadowsocks.plugin.$PLUGIN_ID` if it only contains a single plugin to prevent duplicated plugins. In some places hyphens are not accepted, for example package name. In that case, hyphens `-` should be changed into underscores `_`. For example, the package name for `obfs-local` would probably be `com.github.shadowsocks.plugin.obfs_local`. ### Add dependency First you need to add this library to your dependencies. This library is written mostly in Kotlin but can also work with Java-only projects: ```gradle implementation 'com.github.shadowsocks:plugin:$LATEST_VERSION' ``` ### Native binary configuration First you need to get your native binary compiling on Android platform. * [Sample project for C](https://github.com/shadowsocks/simple-obfs-android/tree/4f82c4a4e415d666e70a7e2e60955cb0d85c1615); * [Sample project for Go](https://github.com/shadowsocks/v2ray-plugin-android/tree/172bd4cec0276112828614482fb646b79dbf1540). In addition to functionalities of a normal plugin, it has to support these additional options: * `__android_vpn`: VPN mode. In this case, the plugin should pass all file descriptors that needs protecting from VPN connections (i.e. its traffic will not be forwarded through the VPN) through an ancillary message to `./protect_path`. ### Implement a binary provider You just need to implement two or three methods. For example for `v2ray`: ```kotlin class BinaryProvider : NativePluginProvider() { override fun populateFiles(provider: PathProvider) { provider.addPath("v2ray", 0b111101101) // add additional files here } // remove this method to disable fast mode, read more in the documentation override fun getExecutable() = context!!.applicationInfo.nativeLibraryDir + "/libv2ray.so" override fun openFile(uri: Uri): ParcelFileDescriptor = when (uri.path) { "/v2ray" -> ParcelFileDescriptor.open(File(getExecutable()), ParcelFileDescriptor.MODE_READ_ONLY) // handle additional files here else -> throw FileNotFoundException() } } ``` Then add it to your manifest: ```xml ... ... ... ``` ### Add user interfaces You should add to your plugin app a configuration activity or a help activity or both if you're going to use `ConfigurationActivity.fallbackToManualEditor`. #### Configuration activity This is used if found instead of a manual input dialog when user clicks "Configure..." in the main app. This gives you maximum freedom of the user interface. To implement this, you need to extend `ConfigurationActivity` and you will get current options via `onInitializePluginOptions(PluginOptions)` and you can invoke `saveChanges(PluginOptions)` or `discardChanges()` before `finish()` or `fallbackToManualEditor()`. Then add it to your manifest: ```xml ... ... ... ``` #### Help activity/callback This is started when user taps "?" in manual editor. To implement this, you need to extend `HelpCallback` if you want a simple dialog with help message as `CharSequence` or `HelpActivity` if you want to provide custom user interface, implement the required methods, then add it to your manifest: ```xml ... ... ... ``` Great. Now your plugin is ready to use. ================================================ FILE: plugin/build.gradle.kts ================================================ plugins { id("com.android.library") id("com.vanniktech.maven.publish") kotlin("android") id("kotlin-parcelize") } setupCommon() android { namespace = "com.github.shadowsocks.plugin" lint.informational += "GradleDependency" } dependencies { coreLibraryDesugaring(libs.desugar) api(libs.androidx.core.ktx) api(libs.androidx.fragment.ktx) api(libs.material) testImplementation(libs.junit) androidTestImplementation(libs.androidx.test.runner) androidTestImplementation(libs.androidx.espresso.core) } ================================================ FILE: plugin/doc.md ================================================ # Overview Plugin should be bundled as an apk. `$PLUGIN_ID` in this documentation corresponds to the executable name for the plugin in order to be cross-platform, e.g. `obfs-local`. An apk can have more than one plugins bundled. We don't care as long as they have different `$PLUGIN_ID`. For duplicated plugin ID, host should refuse to start. There are no arbitrary restrictions/requirements on package name, component name and content provider authority, but you're suggested to follow the format in this documentations. For package name, use `com.github.shadowsocks.plugin.$PLUGIN_ID` if it only contains a single plugin to prevent duplicated plugins. In some places hyphens are not accepted, for example package name. In that case, hyphens `-` should be changed into underscores `_`. For example, the package name for `obfs-local` would probably be `com.github.shadowsocks.plugin.obfs_local`. It's advised to use this library for easier development, but you're free to start from scratch following this documentation. # Plugin configuration Plugins get their args configured via one of the following two options: * A configuration activity; ([example](https://github.com/shadowsocks/simple-obfs-android/tree/4f82c4a4e415d666e70a7e2e60955cb0d85c1615)) * If no configuration activity is found or the activity requests the fallback mode, the fallback mode will be used: user manual input and optional help message. ([example](https://github.com/shadowsocks/kcptun-android/tree/41f42077e177618553417c16559784a51e9d8c4c)) Your user interface need not be consistent with shadowsocks-android styling - you don't need to use preferences UI at all if you don't feel like it - however it's recommended to use Material Design at minimum. ## Configuration activity If the plugin provides a configuration activity, it will be started when user picks your plugin and taps configure. It: * MUST have action: `com.github.shadowsocks.plugin.ACTION_CONFIGURE`; * MUST have category: `android.intent.category.DEFAULT`; * MUST be able to receive data URI `plugin://com.github.shadowsocks/$PLUGIN_ID`; * SHOULD parse string extra `com.github.shadowsocks.plugin.EXTRA_OPTIONS` (all options as a single string) and display the current options; * SHOULD distinguish between server settings and feature settings in some way, e.g. for `obfs-local`, `obfs` is a server setting and `obfs_host` is a feature setting; * On finish, it SHOULD return one of the following results: - `RESULT_OK = 0`: In this case it MUST return the data Intent with the new `com.github.shadowsocks.plugin.EXTRA_OPTIONS`; - `RESULT_CANCELED = -1`: Nothing will be changed; - `RESULT_FALLBACK = 1`: Fallback mode is requested and the host should display the fallback editor. This corresponds to `com.github.shadowsocks.plugin.ConfigurationActivity` in the plugin library. Here's what a proper configuration activity usually should look like in `AndroidManifest.xml`: ```xml ... ... ... ``` ## Help activity/callback If the plugin doesn't provide a configuration activity, it's highly recommended to provide a help message in the form of an Activity. It: * MUST have action: `com.github.shadowsocks.plugin.ACTION_HELP`; * MUST have category: `android.intent.category.DEFAULT`; * MUST be able to receive data URI `plugin://com.github.shadowsocks/$PLUGIN_ID`; * CAN parse string extra `com.github.shadowsocks.plugin.EXTRA_OPTIONS` and display some more relevant information; * SHOULD parse `@NightMode` int extra `com.github.shadowsocks.plugin.EXTRA_NIGHT_MODE` and act accordingly; * SHOULD either: - Be invisible and return help message with CharSequence extra `com.github.shadowsocks.plugin.EXTRA_HELP_MESSAGE` in the data intent with `RESULT_OK`; (in this case, a simple dialog will be shown containing the message) - Be visible and return `RESULT_CANCELED`. * SHOULD distinguish between server settings and feature settings in some way, e.g. for `simple_obfs`, `obfs` is a server setting and `obfs_host` is a feature setting. This corresponds to `com.github.shadowsocks.plugin.HelpActivity` or `com.github.shadowsocks.plugin.HelpCallback` in the plugin library. Here's what a proper help activity/callback usually should look like in `AndroidManifest.xml`: ```xml ... ... ... ``` # Plugin implementation Every plugin can be either in native mode or JVM mode. ## Native mode In native mode, plugins are provided as native executables and `shadowsocks-libev`'s plugin mode will be used. Every native mode plugin MUST have a content provider to provide the native executables (since they can exceed 1M which is the limit of Intent size) that: * MUST have `android:label` and `android:icon`; (may be inherited from parent `application`) * SHOULD have `android:directBootAware="true"` with proper support if possible; * MUST have an intent filter with action `com.github.shadowsocks.plugin.ACTION_NATIVE_PLUGIN`; (used for discovering plugins) * MUST have meta-data `com.github.shadowsocks.plugin.id` with string value `$PLUGIN_ID` or a string resource; * MUST have an intent filter with action `com.github.shadowsocks.plugin.ACTION_NATIVE_PLUGIN` and data `plugin://com.github.shadowsocks/$PLUGIN_ID`; (used for configuring plugin) * CAN have meta-data `com.github.shadowsocks.plugin.default_config` with string value or a string resource, default is empty; * MUST implement `query` that returns the file list which MUST include `$PLUGIN_ID` when having these as arguments: - `uri = "content://$authority_of_your_provider`; - `projection = ["path", "mode"]`; (relative path, for example `obfs-local`; file mode as integer, for example `0b110100100`) - `selection = null`; - `selectionArgs = null`; - `sortOrder = null`; * MUST implement `openFile` that for files returned in `query`, `openFile` with `mode = "r"` returns a valid `ParcelFileDescriptor` for reading. For example, `uri` can be `content://com.github.shadowsocks.plugin.kcptun/kcptun`. This corresponds to `com.github.shadowsocks.plugin.NativePluginProvider` in the plugin library. Here's what a proper native plugin provider usually should look like in `AndroidManifest.xml`: ```xml ... ... ... ``` ## Native mode without binary copying If your plugin binary executable can run in place, you can support native mode without binary copying. To support this mode, your `ContentProvider` must first support native mode with binary copying (this will be used if the fast routine fails) and: * MUST implement `call` that returns absolute path to the entry executable as `com.github.shadowsocks.plugin.EXTRA_ENTRY` when having `method = "shadowsocks:getExecutable"`; (`com.github.shadowsocks.plugin.EXTRA_OPTIONS` is provided in extras as well just in case you need them) * SHOULD define `android:installLocation="internalOnly"` for `` in AndroidManifest.xml; * SHOULD define `android:extractNativeLibs="true"` for `` in AndroidManifest.xml; If you don't plan to support this mode, you can just throw `UnsupportedOperationException` when being invoked. It will fallback to the slow routine automatically. ### Native mode without binary copying and setup Additionally, if your plugin only needs to supply the path of your executable without doing any extra setup work, you can use an additional `meta-data` with name `com.github.shadowsocks.plugin.executable_path` to supply executable path to your native binary. This allows the host app to launch your plugin without ever launching your app. ## JVM mode This feature hasn't been implemented yet. Please open an issue if you need this. # Plugin security Plugins are certified using package signatures and shadowsocks-android will consider these signatures as trusted: * Signatures by [trusted sources](/mobile/src/main/java/com/github/shadowsocks/plugin/PluginManager.kt#L39) which includes: - @madeye, i.e. the signer of the main repo; - The main repo doesn't contain any other trusted signatures. Third-party forks should add their signatures to this trusted sources if they have plugins signed by them before publishing their source code. * Current package signature, which means: - If you get apk from shadowsocks-android releases or Google Play, this means only apk signed by @madeye will be recognized as trusted. - If you get apk from a third-party fork, all plugins from that developer will get recognized as trusted automatically even if its source code isn't available anywhere online. A warning will be shown for untrusted plugins. No arbitrary restrictions will be applied. # Plugin platform versioning In order to be able to identify compatible and incompatible plugins, [Semantic Versioning](http://semver.org/) will be used. >Given a version number MAJOR.MINOR.PATCH, increment the: > >1. MAJOR version when you make incompatible API changes, >2. MINOR version when you add functionality in a backwards-compatible manner, and >3. PATCH version when you make backwards-compatible bug fixes. Plugin app must include this in their application tag: (which should be automatically included if you are using our library) ``` ``` # Plugin ID Aliasing To implement plugin ID aliasing, you: * MUST define meta-data `com.github.shadowsocks.plugin.id.aliases` in your plugin content provider with `android:value="alias"`, or use `android:resources` to specify a string resource or string array resource for multiple aliases. * MUST be able to be matched by `com.github.shadowsocks.plugin.ACTION_NATIVE_PLUGIN` when invoked on alias. To do this, you SHOULD use multiple `intent-filter` and use a different `android:path` for each alias. Alternatively, you MAY also use a single `intent-filter` and use `android:pathPattern` to match all your aliases at once. You MUST NOT use `android:pathPrefix` or allow `android:pathPattern` to match undeclared plugin ID/alias as it might create a conflict with other plugins. * SHOULD NOT add or change `intent-filter` for activities to include your aliases -- your plugin ID will always be used. For example: ```xml ... ... ... ... ... ``` # Android TV Android TV client does not invoke configuration activities. Therefore your plugins should automatically work with them. ================================================ FILE: plugin/gradle.properties ================================================ GROUP=com.github.shadowsocks VERSION_NAME=2.0.1 POM_ARTIFACT_ID=plugin POM_NAME=Shadowsocks Plugin POM_PACKAGING=aar POM_DESCRIPTION=SIP003 plugin for Shadowsocks POM_INCEPTION_YEAR=2018 POM_URL=https://github.com/shadowsocks/shadowsocks-android POM_SCM_URL=https://github.com/shadowsocks/shadowsocks-android POM_SCM_CONNECTION=scm:git:git://github.com/shadowsocks/shadowsocks-android.git POM_SCM_DEV_CONNECTION=scm:git:ssh://git@github.com/shadowsocks/shadowsocks-android.git POM_LICENCE_NAME=The GNU General Public License v3.0 POM_LICENCE_URL=https://www.gnu.org/licenses/gpl-3.0.html POM_LICENCE_DIST=repo POM_DEVELOPER_ID=Mygod POM_DEVELOPER_NAME=Mygod Studio ================================================ FILE: plugin/src/main/AndroidManifest.xml ================================================ ================================================ FILE: plugin/src/main/java/com/github/shadowsocks/plugin/AlertDialogFragment.kt ================================================ /******************************************************************************* * * * Copyright (C) 2019 by Max Lv * * Copyright (C) 2019 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.plugin import android.app.Activity import android.content.DialogInterface import android.content.Intent import android.os.Bundle import android.os.Parcelable import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatDialogFragment import androidx.fragment.app.Fragment /** * Based on: https://android.googlesource.com/platform/packages/apps/ExactCalculator/+/8c43f06/src/com/android/calculator2/AlertDialogFragment.java */ @Suppress("DEPRECATION") @Deprecated("Related APIs are deprecated in AndroidX", ReplaceWith("fragment.AlertDialogFragment")) abstract class AlertDialogFragment : AppCompatDialogFragment(), DialogInterface.OnClickListener { companion object { private const val KEY_ARG = "arg" private const val KEY_RET = "ret" fun getRet(data: Intent) = data.extras!!.getParcelable(KEY_RET)!! } protected abstract fun AlertDialog.Builder.prepare(listener: DialogInterface.OnClickListener) protected val arg by lazy { requireArguments().getParcelable(KEY_ARG)!! } protected open fun ret(which: Int): Ret? = null fun withArg(arg: Arg) = apply { arguments = Bundle().apply { putParcelable(KEY_ARG, arg) } } override fun onCreateDialog(savedInstanceState: Bundle?): AlertDialog = AlertDialog.Builder(requireContext()).also { it.prepare(this) }.create() override fun onClick(dialog: DialogInterface?, which: Int) { targetFragment?.onActivityResult(targetRequestCode, which, ret(which)?.let { Intent().replaceExtras(Bundle().apply { putParcelable(KEY_RET, it) }) }) } override fun onDismiss(dialog: DialogInterface) { super.onDismiss(dialog) onClick(dialog, Activity.RESULT_CANCELED) } fun show(target: Fragment, requestCode: Int = 0, tag: String = javaClass.simpleName) { setTargetFragment(target, requestCode) showAllowingStateLoss(target.fragmentManager ?: return, tag) } } ================================================ FILE: plugin/src/main/java/com/github/shadowsocks/plugin/ConfigurationActivity.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.plugin import android.app.Activity import android.content.Intent /** * Base class for configuration activity. A configuration activity is started when user wishes to configure the * selected plugin. To create a configuration activity, extend this class, implement abstract methods, invoke * `saveChanges(options)` and `discardChanges()` when appropriate, and add it to your manifest like this: * *
<manifest>
 *    ...
 *    <application>
 *        ...
 *        <activity android:name=".ConfigureActivity">
 *            <intent-filter>
 *                <action android:name="com.github.shadowsocks.plugin.ACTION_CONFIGURE"/>
 *                <category android:name="android.intent.category.DEFAULT"/>
 *                <data android:scheme="plugin"
 *                         android:host="com.github.shadowsocks"
 *                         android:path="/$PLUGIN_ID"/>
 *            </intent-filter>
 *        </activity>
 *        ...
 *    </application>
 *</manifest>
*/ abstract class ConfigurationActivity : OptionsCapableActivity() { /** * Equivalent to setResult(RESULT_CANCELED). */ fun discardChanges() = setResult(Activity.RESULT_CANCELED) /** * Equivalent to setResult(RESULT_OK, args_with_correct_format). * * @param options PluginOptions to save. */ fun saveChanges(options: PluginOptions) = setResult(Activity.RESULT_OK, Intent().putExtra(PluginContract.EXTRA_OPTIONS, options.toString())) /** * Finish this activity and request manual editor to pop up instead. */ fun fallbackToManualEditor() { setResult(PluginContract.RESULT_FALLBACK) finish() } } ================================================ FILE: plugin/src/main/java/com/github/shadowsocks/plugin/HelpActivity.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.plugin /** * Base class for a help activity. A help activity is started when user taps help when configuring options for your * plugin. To create a help activity, just extend this class, and add it to your manifest like this: * *
<manifest>
 *    ...
 *    <application>
 *        ...
 *        <activity android:name=".HelpActivity">
 *            <intent-filter>
 *                <action android:name="com.github.shadowsocks.plugin.ACTION_HELP"/>
 *                <category android:name="android.intent.category.DEFAULT"/>
 *                <data android:scheme="plugin"
 *                         android:host="com.github.shadowsocks"
 *                         android:path="/$PLUGIN_ID"/>
 *            </intent-filter>
 *        </activity>
 *        ...
 *    </application>
 *</manifest>
*/ abstract class HelpActivity : OptionsCapableActivity() { override fun onInitializePluginOptions(options: PluginOptions) { } } ================================================ FILE: plugin/src/main/java/com/github/shadowsocks/plugin/HelpCallback.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.plugin import android.content.Intent /** * HelpCallback is an HelpActivity but you just need to produce a CharSequence help message instead of having to * provide UI. To create a help callback, just extend this class, implement abstract methods, and add it to your * manifest following the same procedure as adding a HelpActivity. */ abstract class HelpCallback : HelpActivity() { abstract fun produceHelpMessage(options: PluginOptions): CharSequence override fun onInitializePluginOptions(options: PluginOptions) { setResult(RESULT_OK, Intent().putExtra(PluginContract.EXTRA_HELP_MESSAGE, produceHelpMessage(options))) finish() } } ================================================ FILE: plugin/src/main/java/com/github/shadowsocks/plugin/NativePluginProvider.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.plugin import android.content.ContentProvider import android.content.ContentValues import android.database.Cursor import android.database.MatrixCursor import android.net.Uri import android.os.Bundle import android.os.ParcelFileDescriptor import androidx.core.os.bundleOf /** * Base class for a native plugin provider. A native plugin provider offers read-only access to files that are required * to run a plugin, such as binary files and other configuration files. To create a native plugin provider, extend this * class, implement the abstract methods, and add it to your manifest like this: * *
<manifest>
 *    ...
 *    <application>
 *        ...
 *        <provider android:name="com.github.shadowsocks.$PLUGIN_ID.BinaryProvider"
 *                     android:authorities="com.github.shadowsocks.plugin.$PLUGIN_ID.BinaryProvider">
 *            <intent-filter>
 *                <category android:name="com.github.shadowsocks.plugin.ACTION_NATIVE_PLUGIN" />
 *            </intent-filter>
 *        </provider>
 *        ...
 *    </application>
 *</manifest>
*/ abstract class NativePluginProvider : ContentProvider() { override fun getType(uri: Uri): String? = "application/x-elf" override fun onCreate(): Boolean = true /** * Provide all files needed for native plugin. * * @param provider A helper object to use to add files. */ protected abstract fun populateFiles(provider: PathProvider) override fun query(uri: Uri, projection: Array?, selection: String?, selectionArgs: Array?, sortOrder: String?): Cursor? { check(selection == null && selectionArgs == null && sortOrder == null) val result = MatrixCursor(projection) populateFiles(PathProvider(uri, result)) return result } /** * Returns executable entry absolute path. * This is used for fast mode initialization where ss-local launches your native binary at the path given directly. * In order for this to work, plugin app is encouraged to have the following in its AndroidManifest.xml: * - android:installLocation="internalOnly" for * - android:extractNativeLibs="true" for * * Default behavior is throwing UnsupportedOperationException. If you don't wish to use this feature, use the * default behavior. * * @return Absolute path for executable entry. */ open fun getExecutable(): String = throw UnsupportedOperationException() abstract fun openFile(uri: Uri): ParcelFileDescriptor override fun openFile(uri: Uri, mode: String): ParcelFileDescriptor { check(mode == "r") return openFile(uri) } override fun call(method: String, arg: String?, extras: Bundle?): Bundle? = when (method) { PluginContract.METHOD_GET_EXECUTABLE -> bundleOf(Pair(PluginContract.EXTRA_ENTRY, getExecutable())) else -> super.call(method, arg, extras) } // Methods that should not be used override fun insert(uri: Uri, values: ContentValues?): Uri? = throw UnsupportedOperationException() override fun update(uri: Uri, values: ContentValues?, selection: String?, selectionArgs: Array?): Int = throw UnsupportedOperationException() override fun delete(uri: Uri, selection: String?, selectionArgs: Array?): Int = throw UnsupportedOperationException() } ================================================ FILE: plugin/src/main/java/com/github/shadowsocks/plugin/OptionsCapableActivity.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.plugin import android.content.Intent import android.os.Bundle import android.widget.Toast import androidx.appcompat.app.AppCompatActivity /** * Activity that's capable of getting EXTRA_OPTIONS input. */ abstract class OptionsCapableActivity : AppCompatActivity() { protected fun pluginOptions(intent: Intent = this.intent) = try { PluginOptions("", intent.getStringExtra(PluginContract.EXTRA_OPTIONS)) } catch (exc: IllegalArgumentException) { Toast.makeText(this, exc.message, Toast.LENGTH_SHORT).show() PluginOptions() } /** * Populate args to your user interface. * * @param options PluginOptions parsed. */ protected abstract fun onInitializePluginOptions(options: PluginOptions = pluginOptions()) override fun onPostCreate(savedInstanceState: Bundle?) { super.onPostCreate(savedInstanceState) if (savedInstanceState == null) onInitializePluginOptions() } } ================================================ FILE: plugin/src/main/java/com/github/shadowsocks/plugin/PathProvider.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.plugin import android.database.MatrixCursor import android.net.Uri import java.io.File /** * Helper class to provide relative paths of files to copy. */ class PathProvider internal constructor(baseUri: Uri, private val cursor: MatrixCursor) { private val basePath = baseUri.path?.trim('/') ?: "" fun addPath(path: String, mode: Int = 0b110100100): PathProvider { val trimmed = path.trim('/') if (trimmed.startsWith(basePath)) cursor.newRow() .add(PluginContract.COLUMN_PATH, trimmed) .add(PluginContract.COLUMN_MODE, mode) return this } fun addTo(file: File, to: String = "", mode: Int = 0b110100100): PathProvider { var sub = to + file.name if (basePath.startsWith(sub)) if (file.isDirectory) { sub += '/' file.listFiles()!!.forEach { addTo(it, sub, mode) } } else addPath(sub, mode) return this } fun addAt(file: File, at: String = "", mode: Int = 0b110100100): PathProvider { if (basePath.startsWith(at)) { if (file.isDirectory) file.listFiles()!!.forEach { addTo(it, at, mode) } else addPath(at, mode) } return this } } ================================================ FILE: plugin/src/main/java/com/github/shadowsocks/plugin/PluginContract.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.plugin /** * The contract between the plugin provider and host. Contains definitions for the supported actions, extras, etc. * * This class is written in Java to keep Java interoperability. */ object PluginContract { /** * ContentProvider Action: Used for NativePluginProvider. * * Constant Value: "com.github.shadowsocks.plugin.ACTION_NATIVE_PLUGIN" */ const val ACTION_NATIVE_PLUGIN = "com.github.shadowsocks.plugin.ACTION_NATIVE_PLUGIN" /** * Activity Action: Used for ConfigurationActivity. * * Constant Value: "com.github.shadowsocks.plugin.ACTION_CONFIGURE" */ const val ACTION_CONFIGURE = "com.github.shadowsocks.plugin.ACTION_CONFIGURE" /** * Activity Action: Used for HelpActivity or HelpCallback. * * Constant Value: "com.github.shadowsocks.plugin.ACTION_HELP" */ const val ACTION_HELP = "com.github.shadowsocks.plugin.ACTION_HELP" /** * The lookup key for a string that provides the plugin entry binary. * * Example: "/data/data/com.github.shadowsocks.plugin.obfs_local/lib/libobfs-local.so" * * Constant Value: "com.github.shadowsocks.plugin.EXTRA_ENTRY" */ const val EXTRA_ENTRY = "com.github.shadowsocks.plugin.EXTRA_ENTRY" /** * The lookup key for a string that provides the options as a string. * * Example: "obfs=http;obfs-host=www.baidu.com" * * Constant Value: "com.github.shadowsocks.plugin.EXTRA_OPTIONS" */ const val EXTRA_OPTIONS = "com.github.shadowsocks.plugin.EXTRA_OPTIONS" /** * The lookup key for a CharSequence that provides user relevant help message. * * Example: "obfs=|tls> Enable obfuscating: HTTP or TLS (Experimental). * obfs-host= Hostname for obfuscating (Experimental)." * * Constant Value: "com.github.shadowsocks.plugin.EXTRA_HELP_MESSAGE" */ const val EXTRA_HELP_MESSAGE = "com.github.shadowsocks.plugin.EXTRA_HELP_MESSAGE" /** * The metadata key to retrieve plugin version. Required for plugin applications. * * Constant Value: "com.github.shadowsocks.plugin.version" */ const val METADATA_KEY_VERSION = "com.github.shadowsocks.plugin.version" /** * The metadata key to retrieve plugin id. Required for plugins. * * Constant Value: "com.github.shadowsocks.plugin.id" */ const val METADATA_KEY_ID = "com.github.shadowsocks.plugin.id" /** * The metadata key to retrieve plugin id aliases. * Can be a string (representing one alias) or a resource to a string or string array. * * Constant Value: "com.github.shadowsocks.plugin.id.aliases" */ const val METADATA_KEY_ID_ALIASES = "com.github.shadowsocks.plugin.id.aliases" /** * The metadata key to retrieve default configuration. Default value is empty. * * Constant Value: "com.github.shadowsocks.plugin.default_config" */ const val METADATA_KEY_DEFAULT_CONFIG = "com.github.shadowsocks.plugin.default_config" /** * The metadata key to retrieve executable path to your native binary. * This path should be relative to your application's nativeLibraryDir. * * If this is set, the host app will prefer this value and (probably) not launch your app at all (aka faster mode). * In order for this to work, plugin app is encouraged to have the following in its AndroidManifest.xml: * - android:installLocation="internalOnly" for * - android:extractNativeLibs="true" for * * Do not use this if you plan to do some setup work before giving away your binary path, * or your native binary is not at a fixed location relative to your application's nativeLibraryDir. * * Since plugin lib: 1.3.0 * * Constant Value: "com.github.shadowsocks.plugin.executable_path" */ const val METADATA_KEY_EXECUTABLE_PATH = "com.github.shadowsocks.plugin.executable_path" const val METHOD_GET_EXECUTABLE = "shadowsocks:getExecutable" /** ConfigurationActivity result: fallback to manual edit mode. */ const val RESULT_FALLBACK = 1 /** * Relative to the file to be copied. This column is required. * * Example: "kcptun", "doc/help.txt" * * Type: String */ const val COLUMN_PATH = "path" /** * File mode bits. Default value is 644 in octal. * * Example: 0b110100100 (for 755 in octal) * * Type: Int or String (deprecated) */ const val COLUMN_MODE = "mode" /** * The scheme for general plugin actions. */ const val SCHEME = "plugin" /** * The authority for general plugin actions. */ const val AUTHORITY = "com.github.shadowsocks" } ================================================ FILE: plugin/src/main/java/com/github/shadowsocks/plugin/PluginOptions.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.plugin import java.util.* /** * Helper class for processing plugin options. * * Based on: https://github.com/apache/ant/blob/588ce1f/src/main/org/apache/tools/ant/types/Commandline.java */ class PluginOptions : HashMap { var id = "" constructor() : super() constructor(initialCapacity: Int) : super(initialCapacity) constructor(initialCapacity: Int, loadFactor: Float) : super(initialCapacity, loadFactor) private constructor(options: String?, parseId: Boolean) : this() { @Suppress("NAME_SHADOWING") var parseId = parseId if (options.isNullOrEmpty()) return check(options.all { !it.isISOControl() }) { "No control characters allowed." } val tokenizer = StringTokenizer("$options;", "\\=;", true) val current = StringBuilder() var key: String? = null while (tokenizer.hasMoreTokens()) when (val nextToken = tokenizer.nextToken()) { "\\" -> current.append(tokenizer.nextToken()) "=" -> if (key == null) { key = current.toString() current.setLength(0) } else current.append(nextToken) ";" -> { if (key != null) { put(key, current.toString()) key = null } else if (current.isNotEmpty()) { if (parseId) id = current.toString() else put(current.toString(), null) } current.setLength(0) parseId = false } else -> current.append(nextToken) } } constructor(options: String?) : this(options, true) constructor(id: String, options: String?) : this(options, false) { this.id = id } /** * Put but if value is null or default, the entry is deleted. * * @return Old value before put. */ fun putWithDefault(key: String, value: String?, default: String? = null) = if (value == null || value == default) remove(key) else put(key, value) private fun append(result: StringBuilder, str: String) = str.indices.map { str[it] }.forEach { when (it) { '\\', '=', ';' -> { result.append('\\') // intentionally no break result.append(it) } else -> result.append(it) } } fun toString(trimId: Boolean): String { val result = StringBuilder() if (!trimId) if (id.isEmpty()) return "" else append(result, id) for ((key, value) in entries) { if (result.isNotEmpty()) result.append(';') append(result, key) if (value != null) { result.append('=') append(result, value) } } return result.toString() } override fun toString(): String = toString(true) override fun equals(other: Any?): Boolean { if (this === other) return true return javaClass == other?.javaClass && super.equals(other) && id == (other as PluginOptions).id } override fun hashCode(): Int = Objects.hash(super.hashCode(), id) } ================================================ FILE: plugin/src/main/java/com/github/shadowsocks/plugin/Utils.kt ================================================ /******************************************************************************* * * * Copyright (C) 2020 by Max Lv * * Copyright (C) 2020 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ @file:JvmName("Utils") package com.github.shadowsocks.plugin import android.os.Parcelable import androidx.fragment.app.DialogFragment import androidx.fragment.app.FragmentManager import kotlinx.parcelize.Parcelize @Parcelize class Empty : Parcelable @JvmOverloads @Deprecated("Moved to fragment package", ReplaceWith("fragment.showAllowingStateLoss")) fun DialogFragment.showAllowingStateLoss(fragmentManager: FragmentManager, tag: String? = null) { if (!fragmentManager.isStateSaved) show(fragmentManager, tag) } ================================================ FILE: plugin/src/main/java/com/github/shadowsocks/plugin/fragment/AlertDialogFragment.kt ================================================ /******************************************************************************* * * * Copyright (C) 2020 by Max Lv * * Copyright (C) 2020 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.plugin.fragment import android.app.Activity import android.content.DialogInterface import android.os.Bundle import android.os.Parcelable import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatDialogFragment import androidx.fragment.app.Fragment import androidx.fragment.app.setFragmentResult import androidx.fragment.app.setFragmentResultListener import com.google.android.material.dialog.MaterialAlertDialogBuilder /** * Based on: https://android.googlesource.com/platform/packages/apps/ExactCalculator/+/8c43f06/src/com/android/calculator2/AlertDialogFragment.java */ abstract class AlertDialogFragment : AppCompatDialogFragment(), DialogInterface.OnClickListener { companion object { private const val KEY_RESULT = "result" private const val KEY_ARG = "arg" private const val KEY_RET = "ret" private const val KEY_WHICH = "which" fun setResultListener(fragment: Fragment, requestKey: String, listener: (Int, Ret?) -> Unit) { fragment.setFragmentResultListener(requestKey) { _, bundle -> listener(bundle.getInt(KEY_WHICH, Activity.RESULT_CANCELED), bundle.getParcelable(KEY_RET)) } } inline fun , Ret : Parcelable?> setResultListener( fragment: Fragment, noinline listener: (Int, Ret?) -> Unit) = setResultListener(fragment, T::class.java.name, listener) } protected abstract fun AlertDialog.Builder.prepare(listener: DialogInterface.OnClickListener) private val resultKey get() = requireArguments().getString(KEY_RESULT) protected val arg by lazy { requireArguments().getParcelable(KEY_ARG)!! } protected open fun ret(which: Int): Ret? = null private fun args() = arguments ?: Bundle().also { arguments = it } fun arg(arg: Arg) = args().putParcelable(KEY_ARG, arg) fun key(resultKey: String = javaClass.name) = args().putString(KEY_RESULT, resultKey) override fun onCreateDialog(savedInstanceState: Bundle?): AlertDialog = MaterialAlertDialogBuilder(requireContext()).also { it.prepare(this) }.create() override fun onClick(dialog: DialogInterface?, which: Int) { setFragmentResult(resultKey ?: return, Bundle().apply { putInt(KEY_WHICH, which) putParcelable(KEY_RET, ret(which) ?: return@apply) }) } override fun onDismiss(dialog: DialogInterface) { super.onDismiss(dialog) onClick(null, Activity.RESULT_CANCELED) } } ================================================ FILE: plugin/src/main/java/com/github/shadowsocks/plugin/fragment/Utils.kt ================================================ /******************************************************************************* * * * Copyright (C) 2020 by Max Lv * * Copyright (C) 2020 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ @file:JvmName("Utils") package com.github.shadowsocks.plugin.fragment import androidx.fragment.app.DialogFragment import androidx.fragment.app.FragmentManager typealias Empty = com.github.shadowsocks.plugin.Empty @JvmOverloads fun DialogFragment.showAllowingStateLoss(fragmentManager: FragmentManager, tag: String? = null) { if (!fragmentManager.isStateSaved) show(fragmentManager, tag) } ================================================ FILE: plugin/src/main/res/color/mtrl_text_btn_text_color_selector.xml ================================================ ================================================ FILE: plugin/src/main/res/drawable/ic_navigation_close.xml ================================================ ================================================ FILE: plugin/src/main/res/layout/toolbar_light_dark.xml ================================================ ================================================ FILE: plugin/src/main/res/values/colors.xml ================================================ #388E3C #00C853 #CFD8DC #90A4AE #607D8B #546E7A #455A64 @color/material_blue_grey_100 @color/material_blue_grey_300 @color/material_blue_grey_500 @color/material_blue_grey_600 @color/material_blue_grey_700 @color/material_blue_grey_800 @color/material_blue_grey_900 @color/material_green_a700 @color/material_primary_500 @color/material_primary_700 @color/material_primary_500 @color/material_primary_800 @color/material_primary_900 @color/material_primary_300 @color/light_color_primary @color/light_color_primary_dark @color/light_color_primary_text ================================================ FILE: plugin/src/main/res/values/strings.xml ================================================ Server Settings Feature Settings Changes not saved. Do you want to save? Yes No Apply Browse… Please install a file manager like MiXplorer ================================================ FILE: plugin/src/main/res/values/styles.xml ================================================ ================================================ FILE: plugin/src/main/res/values-de/strings.xml ================================================ "Servereinstellungen" "Funktionseinstellungen" "Änderungen nicht gespeichert. Speichern?" "Ja" "Nein" "Anwenden" "Bitte installiere einen Dateimanager, z.B. MiXplorer" "Durchsuchen..." ================================================ FILE: plugin/src/main/res/values-es/strings.xml ================================================ "Propiedades del Servidor" "Sí" "No" "Aplicar" "Por favor, instala un explorador de archivos como MiXplorer" ================================================ FILE: plugin/src/main/res/values-fa/strings.xml ================================================ "تنظیمات سرور" "تنظیمات ویژگی‌ها" "تغییرات ذخیره نشده‌اند. ذخیره شوند؟" "بله" "خیر" "تایید" "لطفاً یک فایل منیجر مانند MiXplorer نصب کنید" "مرور کردن..." ================================================ FILE: plugin/src/main/res/values-fr/strings.xml ================================================ "Paramètres du Serveur" "Paramètres des Fonctionnalités" "Changements non enregistrés. Voulez-vous enregistrer ?" "Oui" "Non" "Appliquer" "Veuillez installer un gestionnaire de fichier tel que MiXplorer" ================================================ FILE: plugin/src/main/res/values-ja/strings.xml ================================================ "サーバー設定" "機能設定" "変更は保存されておりません、保存しますか?" "はい" "いいえ" "適応" "ファイルマネージャーをインストールしてください(MiXplorerなど)" "参照…" ================================================ FILE: plugin/src/main/res/values-ko/strings.xml ================================================ "서버 설정" "기능 설정" "변경 사항이 저장되지 않았습니다. 저장하시겠습니까?" "예" "아니오" "적용" ================================================ FILE: plugin/src/main/res/values-night/colors.xml ================================================ @color/dark_color_primary @color/dark_color_primary_dark @color/dark_color_primary_text ================================================ FILE: plugin/src/main/res/values-ru/strings.xml ================================================ "Настройки сервера" "Функции" "Сохранить изменения?" "Да" "Нет" "Применить" "Установите файловый менеджер (например, MiXplorer)" "Открыть…" ================================================ FILE: plugin/src/main/res/values-tr/strings.xml ================================================ "Sunucu Ayarları" "Özellik Ayarları" "Değişiklikler kaydedilmedi. Kaydetmek ister misiniz?" "Evet" "Hayır" "Uygula" ================================================ FILE: plugin/src/main/res/values-uk/strings.xml ================================================ "Налаштування сервера" "Налаштування функцій" "Зміни не збережено. Зберегти?" "Так" "Ні" "Застосувати" "Будь ласка, встановіть менеджер файлів, наприклад, MiXplorer" ================================================ FILE: plugin/src/main/res/values-v29/styles.xml ================================================ ================================================ FILE: plugin/src/main/res/values-zh-rCN/strings.xml ================================================ "服务器设置" "功能设置" "是否要保存修改?" "是" "否" "应用" "请安装文件管理器,如 MiXplorer" "浏览…" ================================================ FILE: plugin/src/main/res/values-zh-rTW/strings.xml ================================================ "伺服器設定" "功能設定" "要儲存變更嗎?" "是" "否" "套用" "請安裝文件管理器,如 MiXplorer" "瀏覽…" ================================================ FILE: plugin/src/test/java/com/github/shadowsocks/plugin/PluginOptionsTest.kt ================================================ /******************************************************************************* * * * Copyright (C) 2017 by Max Lv * * Copyright (C) 2017 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.plugin import org.junit.Assert import org.junit.Test class PluginOptionsTest { @Test fun basic() { val o1 = PluginOptions("obfs-local;obfs=http;obfs-host=localhost") val o2 = PluginOptions("obfs-local", "obfs-host=localhost;obfs=http") Assert.assertEquals(o1.hashCode(), o2.hashCode()) Assert.assertEquals(true, o1 == o2) val o3 = PluginOptions(o1.toString(false)) Assert.assertEquals(true, o2 == o3) val o4 = PluginOptions(o2.id, o2.toString()) Assert.assertEquals(true, o3 == o4) } @Test fun nullValues() { val o = PluginOptions("", "a;b;c;d=3") Assert.assertEquals(true, o == PluginOptions("", o.toString())) } @Test fun escape() { val options = PluginOptions("escapeTest") options["subject"] = "value;semicolon" Assert.assertEquals(true, options == PluginOptions(options.toString(false))) options["key;semicolon"] = "object" Assert.assertEquals(true, options == PluginOptions(options.toString(false))) options["subject"] = "value=equals" Assert.assertEquals(true, options == PluginOptions(options.toString(false))) options["key=equals"] = "object" Assert.assertEquals(true, options == PluginOptions(options.toString(false))) options["advanced\\=;test"] = "in;=\\progress" Assert.assertEquals(true, options == PluginOptions(options.toString(false))) } } ================================================ FILE: privacy_policy.md ================================================ ## Privacy Policy The shadowsocks-android is built as an Open Source software. This app is provided by Shadowsocks Team at no cost and is intended for use as is. This page is used to inform visitors regarding our policies with the collection, use, and disclosure of Personal Information if anyone decided to use our app. If you choose to use our app, then you agree to the collection and use of information in relation to this policy. The Personal Information that we collect is used for providing and improving the app. We will not use or share your information with anyone except as described in this Privacy Policy. The terms used in this Privacy Policy have the same meanings as in our Terms and Conditions, which is accessible at Shadowsocks-android unless otherwise defined in this Privacy Policy. **Information Collection and Use** For a better experience, while using our app, we may require you to provide us with certain personally identifiable information. The information that we request will be retained by us and used as described in this privacy policy. The app does use third party services that may collect information used to identify you. Link to privacy policy of third party service providers used by the app * [Google Play Services](https://www.google.com/policies/privacy/) * [AdMob](https://support.google.com/admob/answer/6128543?hl=en) * [Firebase Analytics](https://firebase.google.com/policies/analytics) **Log Data** We want to inform you that whenever you use our app, in a case of an error in the app we collect data and information (through third party products) on your phone called Log Data. This Log Data may include information such as your device Internet Protocol (“IP”) address, device name, operating system version, the configuration of the app when utilizing our App, the time and date of your use of the app, and other statistics. **Cookies** Cookies are files with a small amount of data that are commonly used as anonymous unique identifiers. These are sent to your browser from the websites that you visit and are stored on your device's internal memory. This app does not use these “cookies” explicitly. However, the app may use third party code and libraries that use “cookies” to collect information and improve their services. You have the option to either accept or refuse these cookies and know when a cookie is being sent to your device. If you choose to refuse our cookies, you may not be able to use some portions of this app. **Security** We value your trust in providing us your Personal Information, thus we are striving to use commercially acceptable means of protecting it. But remember that no method of transmission over the internet, or method of electronic storage is 100% secure and reliable, and we cannot guarantee its absolute security. **Links to Other Sites** This app may contain links to other sites. If you click on a third-party link, you will be directed to that site. Note that these external sites are not operated by us. Therefore, we strongly advise you to review the Privacy Policy of these websites. We have no control over and assume no responsibility for the content, privacy policies, or practices of any third-party sites or services. **Children’s Privacy** These Services do not address anyone under the age of 13\. We do not knowingly collect personally identifiable information from children under 13\. In the case we discover that a child under 13 has provided us with personal information, we immediately delete this from our servers. If you are a parent or guardian and you are aware that your child has provided us with personal information, please contact us so that we will be able to do necessary actions. **Changes to This Privacy Policy** We may update our Privacy Policy from time to time. Thus, you are advised to review this page periodically for any changes. We will notify you of any changes by posting the new Privacy Policy on this page. These changes are effective immediately after they are posted on this page. **Contact Us** If you have any questions or suggestions about our Privacy Policy, do not hesitate to contact us. ================================================ FILE: release.sh ================================================ #!/bin/bash release=$1 cp mobile/build/outputs/apk/release/mobile-armeabi-v7a-release.apk shadowsocks-armeabi-v7a-"${release}".apk cp mobile/build/outputs/apk/release/mobile-arm64-v8a-release.apk shadowsocks-arm64-v8a-"${release}".apk cp mobile/build/outputs/apk/release/mobile-x86-release.apk shadowsocks-x86-"${release}".apk cp mobile/build/outputs/apk/release/mobile-x86_64-release.apk shadowsocks-x86_64-"${release}".apk cp mobile/build/outputs/apk/release/mobile-universal-release.apk shadowsocks--universal-"${release}".apk cp tv/build/outputs/apk/freedom/release/tv-freedom-armeabi-v7a-release.apk shadowsocks-tv-armeabi-v7a-"${release}".apk cp tv/build/outputs/apk/freedom/release/tv-freedom-arm64-v8a-release.apk shadowsocks-tv-arm64-v8a-"${release}".apk cp tv/build/outputs/apk/freedom/release/tv-freedom-x86-release.apk shadowsocks-tv-x86-"${release}".apk cp tv/build/outputs/apk/freedom/release/tv-freedom-x86_64-release.apk shadowsocks-tv-x86_64-"${release}".apk cp tv/build/outputs/apk/freedom/release/tv-freedom-universal-release.apk shadowsocks-tv-universal-"${release}".apk ================================================ FILE: repositories.gradle.kts ================================================ repositories { google() mavenCentral() } ================================================ FILE: settings.gradle.kts ================================================ plugins { id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0" } include(":core", ":plugin", ":mobile", ":tv") ================================================ FILE: test-e2e.sh ================================================ #!/usr/bin/env bash # # End-to-end test: shadowsocks-android on Android emulator # # Boots an emulator, starts ssserver on the host, installs the debug APK, # modifies the default profile via run-as + sqlite3 to point to our server, # taps the FAB to connect VPN, then verifies connectivity. # set -euo pipefail # ── Paths ─────────────────────────────────────────────────────────────────── SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" EMULATOR="${EMULATOR:-/Volumes/Data/workspace/android/emulator/emulator}" ADB="${ADB:-/Volumes/Data/workspace/android/platform-tools/adb}" AVD="${AVD:-Medium_Phone_API_36.1}" APK="${APK:-$SCRIPT_DIR/mobile/build/outputs/apk/debug/mobile-arm64-v8a-debug.apk}" SSSERVER="${SSSERVER:-$SCRIPT_DIR/core/src/main/rust/shadowsocks-rust/target/release/ssserver}" PKG="com.github.shadowsocks" # ── SS config ─────────────────────────────────────────────────────────────── SS_ADDR="0.0.0.0:8388" SS_PASSWORD="testpassword123" SS_METHOD="aes-256-gcm" SS_HOST_FROM_EMU="10.0.2.2" SS_PORT=8388 # ── Cleanup trap ──────────────────────────────────────────────────────────── SSSERVER_PID="" cleanup() { echo "" echo "=== Cleanup ===" if [[ -n "$SSSERVER_PID" ]] && kill -0 "$SSSERVER_PID" 2>/dev/null; then echo "Killing ssserver (PID $SSSERVER_PID)" kill "$SSSERVER_PID" 2>/dev/null || true wait "$SSSERVER_PID" 2>/dev/null || true fi if [[ "${SKIP_EMULATOR_BOOT:-}" != "true" ]] && "$ADB" get-state &>/dev/null; then echo "Shutting down emulator..." "$ADB" emu kill 2>/dev/null || true fi echo "Cleanup done." } trap cleanup EXIT # ── Helpers ───────────────────────────────────────────────────────────────── fail() { echo "FAIL: $*" >&2; exit 1; } info() { echo "--- $*"; } wait_for_boot() { info "Waiting for emulator to boot..." "$ADB" wait-for-device local n=0 while [[ $n -lt 120 ]]; do local val val=$("$ADB" shell getprop sys.boot_completed 2>/dev/null | tr -d '\r\n') if [[ "$val" == "1" ]]; then info "Emulator booted." return 0 fi sleep 2 n=$((n + 2)) done fail "Emulator did not boot within 120s" } screenshot() { local name="$1" "$ADB" shell screencap -p /sdcard/screen_${name}.png 2>/dev/null || true "$ADB" pull /sdcard/screen_${name}.png "$SCRIPT_DIR/screen_${name}.png" 2>/dev/null || true info " Screenshot saved: screen_${name}.png" } # ──────────────────────────────────────────────────────────────────────────── # Step 1: Verify prerequisites # ──────────────────────────────────────────────────────────────────────────── info "Step 1: Verify prerequisites" [[ -f "$SSSERVER" ]] || command -v "$SSSERVER" &>/dev/null || fail "ssserver not found at $SSSERVER" [[ -f "$APK" ]] || fail "APK not found at $APK" [[ "${SKIP_EMULATOR_BOOT:-}" == "true" ]] || [[ -x "$EMULATOR" ]] || command -v "$EMULATOR" &>/dev/null || fail "Emulator not found at $EMULATOR" [[ -x "$ADB" ]] || command -v "$ADB" &>/dev/null || fail "adb not found at $ADB" info "All prerequisites OK." # ──────────────────────────────────────────────────────────────────────────── # Step 2: Start ssserver # ──────────────────────────────────────────────────────────────────────────── info "Step 2: Starting ssserver on $SS_ADDR ..." "$SSSERVER" -s "$SS_ADDR" -k "$SS_PASSWORD" -m "$SS_METHOD" -U & SSSERVER_PID=$! sleep 1 kill -0 "$SSSERVER_PID" 2>/dev/null || fail "ssserver failed to start" info "ssserver running (PID $SSSERVER_PID)" # ──────────────────────────────────────────────────────────────────────────── # Step 3: Boot emulator # ──────────────────────────────────────────────────────────────────────────── if [[ "${SKIP_EMULATOR_BOOT:-}" == "true" ]]; then info "Step 3: Skipping emulator boot (SKIP_EMULATOR_BOOT=true)" "$ADB" wait-for-device info " Emulator already running." else info "Step 3: Booting emulator ($AVD) ..." "$EMULATOR" -avd "$AVD" -no-snapshot-load -no-audio -gpu auto & wait_for_boot sleep 5 "$ADB" shell input keyevent KEYCODE_HOME sleep 2 fi # Disable animations for reliable UI automation "$ADB" shell settings put global window_animation_scale 0 "$ADB" shell settings put global transition_animation_scale 0 "$ADB" shell settings put global animator_duration_scale 0 # ──────────────────────────────────────────────────────────────────────────── # Step 4: Install APK # ──────────────────────────────────────────────────────────────────────────── info "Step 4: Installing debug APK ..." # Uninstall any existing version first (release vs debug signatures differ) "$ADB" uninstall "$PKG" 2>/dev/null || true "$ADB" install -g "$APK" || fail "APK install failed" info "APK installed." # ──────────────────────────────────────────────────────────────────────────── # Step 5: Configure server profile via run-as + sqlite3 # ──────────────────────────────────────────────────────────────────────────── info "Step 5: Configuring profile..." # 5a. Launch app once to initialize databases. # ensureNotEmpty() creates a default profile (id=1) and sets profileId=1. # serviceMode defaults to "vpn". info " Launching app to initialize databases..." "$ADB" shell am start -W -n "$PKG/.MainActivity" sleep 8 screenshot "01_init" # Force a checkpoint to flush WAL into main database file "$ADB" shell am force-stop "$PKG" sleep 2 # 5b. Update the default profile (id=1) to point to our test server. # Profile table columns: id, name, host, remotePort, password, method, ... # With debug build, we can use run-as to copy the database out, modify it, and copy it back. info " Updating default profile via sqlite3..." # Extract profile.db and WAL/SHM files using exec-out (binary-safe) "$ADB" exec-out run-as "$PKG" cat databases/profile.db > /tmp/profile.db "$ADB" exec-out run-as "$PKG" cat databases/profile.db-wal > /tmp/profile.db-wal 2>/dev/null || true "$ADB" exec-out run-as "$PKG" cat databases/profile.db-shm > /tmp/profile.db-shm 2>/dev/null || true # Verify and checkpoint WAL into main DB file /tmp/profile.db sqlite3 /tmp/profile.db "PRAGMA wal_checkpoint(TRUNCATE);" 2>/dev/null || true # Check tables info " Tables in profile.db:" sqlite3 /tmp/profile.db ".tables" | while IFS= read -r line; do info " $line" done if ! sqlite3 /tmp/profile.db "SELECT count(*) FROM Profile;" >/dev/null 2>&1; then fail "Profile table not found — database may not have been initialized" fi # Modify the profile using host sqlite3 sqlite3 /tmp/profile.db "UPDATE Profile SET host='$SS_HOST_FROM_EMU', remotePort=$SS_PORT, password='$SS_PASSWORD', method='$SS_METHOD', name='Test Server' WHERE id=1;" # Verify update info " Verifying profile update..." sqlite3 /tmp/profile.db "SELECT id, name, host, remotePort, method FROM Profile;" | while IFS= read -r line; do info " Profile: $line" done # Push modified database back (without WAL — clean state) rm -f /tmp/profile.db-wal /tmp/profile.db-shm "$ADB" push /tmp/profile.db /data/local/tmp/profile.db "$ADB" shell "cat /data/local/tmp/profile.db | run-as $PKG sh -c 'cat > databases/profile.db'" # Remove old WAL/SHM so Room starts fresh "$ADB" shell "run-as $PKG rm -f databases/profile.db-wal databases/profile.db-shm" "$ADB" shell rm /data/local/tmp/profile.db info " Profile configuration done." # ──────────────────────────────────────────────────────────────────────────── # Step 6: Enable VPN # ──────────────────────────────────────────────────────────────────────────── info "Step 6: Enabling VPN..." # Launch the app "$ADB" shell am start -W -n "$PKG/.MainActivity" sleep 3 screenshot "02_app_launched" # Get screen dimensions SCREEN_SIZE=$("$ADB" shell wm size | grep -oE '[0-9]+x[0-9]+' | tail -1) SCREEN_W=$(echo "$SCREEN_SIZE" | cut -dx -f1) SCREEN_H=$(echo "$SCREEN_SIZE" | cut -dx -f2) info " Screen: ${SCREEN_W}x${SCREEN_H}" # Tap the FAB (connect button) — centered horizontally, near bottom. # On 1080x2400 @420dpi the FAB center is at ~93.5% of screen height. FAB_X=$((SCREEN_W / 2)) FAB_Y=$((SCREEN_H * 93 / 100)) info " Tapping FAB at ($FAB_X, $FAB_Y)..." "$ADB" shell input tap "$FAB_X" "$FAB_Y" sleep 2 screenshot "03_after_fab_tap" # Handle VPN consent dialog info " Checking for VPN consent dialog..." VPN_ACCEPTED=false for i in $(seq 1 15); do ACTIVITIES=$("$ADB" shell dumpsys activity activities 2>/dev/null || true) if echo "$ACTIVITIES" | grep -qi "vpndialogs\|com.android.vpndialogs"; then info " VPN consent dialog detected, accepting..." screenshot "04_vpn_dialog" sleep 1 # Use uiautomator dump to find the exact OK button coordinates "$ADB" shell uiautomator dump /sdcard/ui_dump.xml 2>/dev/null || true "$ADB" pull /sdcard/ui_dump.xml /tmp/ui_dump.xml 2>/dev/null || true UI_XML=$(cat /tmp/ui_dump.xml 2>/dev/null || true) info " UI dump obtained (${#UI_XML} chars)" # Log all button texts found for debugging BUTTONS=$(echo "$UI_XML" | tr '>' '\n' | grep -o 'text="[^"]*".*bounds="[^"]*"' || true) info " Buttons found:" echo "$BUTTONS" | while IFS= read -r line; do [[ -n "$line" ]] && info " $line" done # Extract OK button bounds from XML: text="OK" ... bounds="[x1,y1][x2,y2]" # Search for text="OK" or text="Allow" or text="확인" (various system locales) OK_LINE=$(echo "$UI_XML" | tr '>' '\n' | grep -E 'text="OK"|text="Allow"' | head -1 || true) if [[ -n "$OK_LINE" ]]; then OK_BOUNDS=$(echo "$OK_LINE" | grep -o 'bounds="\[[0-9]*,[0-9]*\]\[[0-9]*,[0-9]*\]"' || true) info " OK button bounds: $OK_BOUNDS" if [[ -n "$OK_BOUNDS" ]]; then # Parse [x1,y1][x2,y2] NUMS=$(echo "$OK_BOUNDS" | grep -o '[0-9]*') X1=$(echo "$NUMS" | sed -n '1p') Y1=$(echo "$NUMS" | sed -n '2p') X2=$(echo "$NUMS" | sed -n '3p') Y2=$(echo "$NUMS" | sed -n '4p') TAP_X=$(( (X1 + X2) / 2 )) TAP_Y=$(( (Y1 + Y2) / 2 )) info " Tapping OK at ($TAP_X, $TAP_Y)..." "$ADB" shell input tap "$TAP_X" "$TAP_Y" sleep 2 fi else info " OK button not found in UI dump, trying coordinate-based tap..." # From screenshot analysis: OK button is at ~82% x, ~59% y on 1080x2400 OK_TAP_X=$((SCREEN_W * 82 / 100)) OK_TAP_Y=$((SCREEN_H * 59 / 100)) info " Tapping estimated OK at ($OK_TAP_X, $OK_TAP_Y)..." "$ADB" shell input tap "$OK_TAP_X" "$OK_TAP_Y" sleep 2 fi # Fallback: if dialog still showing, try keyboard approach if "$ADB" shell dumpsys activity activities 2>/dev/null | grep -qi "vpndialogs"; then info " Dialog still showing, trying DPAD_RIGHT + ENTER..." "$ADB" shell input keyevent KEYCODE_DPAD_RIGHT sleep 0.3 "$ADB" shell input keyevent KEYCODE_ENTER sleep 2 fi # Second fallback: try TAB + ENTER if "$ADB" shell dumpsys activity activities 2>/dev/null | grep -qi "vpndialogs"; then info " Dialog still showing, trying TAB + ENTER..." "$ADB" shell input keyevent KEYCODE_TAB sleep 0.3 "$ADB" shell input keyevent KEYCODE_TAB sleep 0.3 "$ADB" shell input keyevent KEYCODE_ENTER sleep 2 fi VPN_ACCEPTED=true screenshot "05_after_vpn_accept" break fi sleep 1 done if [[ "$VPN_ACCEPTED" != "true" ]]; then info " No VPN consent dialog detected" screenshot "04_no_vpn_dialog" fi # ──────────────────────────────────────────────────────────────────────────── # Step 7: Verify VPN is connected # ──────────────────────────────────────────────────────────────────────────── info "Step 7: Verifying VPN connection..." sleep 8 screenshot "06_vpn_status" VPN_UP=false # Check tun0 interface (must exist for VPN to be working) info " Checking tun0 interface..." TUN_CHECK=$("$ADB" shell ip addr show tun0 2>&1 || true) if echo "$TUN_CHECK" | grep -q "inet "; then info " tun0 interface exists with IP address." echo "$TUN_CHECK" VPN_UP=true else echo "$TUN_CHECK" info " tun0 not found — VPN is NOT connected." info " Dumping relevant logcat..." "$ADB" logcat -d 2>/dev/null | grep -iE "shadowsocks|vpn|sslocal|tun|StartService" | tail -40 || true fi # Check service info " Checking shadowsocks service..." SVC_CHECK=$("$ADB" shell dumpsys activity services "$PKG" 2>&1 || true) if echo "$SVC_CHECK" | grep -qi "shadowsocks\|VpnService"; then info " Shadowsocks service is running." else info " WARNING: Could not confirm service state" fi # Dump sslocal-related logcat for debugging info " Recent sslocal/VPN logcat:" "$ADB" logcat -d 2>/dev/null | grep -iE "shadowsocks|sslocal|ssservice|vpn|tun" | tail -20 || true # ──────────────────────────────────────────────────────────────────────────── # Step 8: Test connectivity from inside the emulator # ──────────────────────────────────────────────────────────────────────────── info "Step 8: Testing connectivity through VPN..." PASS=0 TOTAL=4 # Test 1: VPN tunnel must be up info " Test 1: VPN tunnel (tun0) is active..." if [[ "$VPN_UP" == "true" ]]; then info " PASS: tun0 exists" PASS=$((PASS + 1)) else echo " FAIL: tun0 does not exist — VPN never connected" fi # Test 2: DNS resolution via ping (ping resolves hostname even if ICMP is dropped) info " Test 2: DNS resolution (ping -c1 google.com)..." DNS_OUT=$("$ADB" shell "ping -c 1 -W 5 google.com 2>&1" || true) if echo "$DNS_OUT" | grep -qE "PING google\.com \([0-9]+\.[0-9]+"; then info " PASS: DNS resolution succeeded (hostname resolved)" echo "$DNS_OUT" | head -1 PASS=$((PASS + 1)) else echo " FAIL: DNS resolution failed" echo "$DNS_OUT" fi # Test 3: TCP connect to 1.1.1.1:80 (proves TCP tunneling works) # Note: toybox nc on some Android versions lacks -z; use "echo | nc" instead. info " Test 3: TCP connect to 1.1.1.1:80..." NC1_EXIT=$("$ADB" shell "echo '' | nc -w 5 1.1.1.1 80 >/dev/null 2>&1; echo \$?" | tr -d '\r' | tail -1) if [[ "$NC1_EXIT" == "0" ]]; then info " PASS: TCP connect to 1.1.1.1:80 succeeded" PASS=$((PASS + 1)) else echo " FAIL: TCP connect to 1.1.1.1:80 failed (exit=$NC1_EXIT)" fi # Test 4: TCP connect to a different host (confirms full routing) info " Test 4: TCP connect to 8.8.8.8:443..." NC2_EXIT=$("$ADB" shell "echo '' | nc -w 5 8.8.8.8 443 >/dev/null 2>&1; echo \$?" | tr -d '\r' | tail -1) if [[ "$NC2_EXIT" == "0" ]]; then info " PASS: TCP connect to 8.8.8.8:443 succeeded" PASS=$((PASS + 1)) else echo " FAIL: TCP connect to 8.8.8.8:443 failed (exit=$NC2_EXIT)" fi # ──────────────────────────────────────────────────────────────────────────── # Summary # ──────────────────────────────────────────────────────────────────────────── echo "" echo "========================================" echo " E2E Test Results: $PASS/$TOTAL passed" echo "========================================" if [[ $PASS -eq $TOTAL ]]; then echo " ALL TESTS PASSED" exit 0 else echo " SOME TESTS FAILED" exit 1 fi ================================================ FILE: translate.py ================================================ #!/usr/bin/env python3 """ Copyright (C) 2019 by Max Lv Copyright (C) 2019 by Mygod Studio 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 . Usage: ./translate.py Prerequisite: pip install poeditor See also: https://poeditor.com/docs/languages """ import itertools import multiprocessing import os import sys import threading from multiprocessing.pool import ThreadPool from poeditor import POEditorAPI def main(api_token, project_id, languages, tags, file_path, header_comment): client = POEditorAPI(api_token) # See also: https://github.com/sporteasy/python-poeditor/pull/15 client.FILTER_BY += 'proofread' done = 0 lock = threading.Lock() def export_worker(params): ((language_code, language_id), (tag, module)) = params output = file_path.format(language_id, module) (_, temp) = client.export(project_id, language_code, 'android_strings', 'proofread', tag) try: if os.path.getsize(temp) > 0: try: os.makedirs(os.path.dirname(output)) except FileExistsError: pass with open(output, 'w') as writer: with open(temp) as reader: head = reader.readline() assert head.startswith(' Copyright (C) 2019 by Mygod Studio 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 . DO NOT EDIT: This file was automagically generated by script. If you are looking for contributing a translation, read this: https://discourse.shadowsocks.org/t/poeditor-translation-main-thread/30 --> ''', )) ================================================ FILE: tv/.gitignore ================================================ /build ================================================ FILE: tv/build.gradle.kts ================================================ plugins { id("com.android.application") id("com.google.android.gms.oss-licenses-plugin") id("com.google.gms.google-services") id("com.google.firebase.crashlytics") kotlin("android") } setupApp() android { namespace = "com.github.shadowsocks.tv" defaultConfig { applicationId = "com.github.shadowsocks.tv" buildConfigField("boolean", "FULLSCREEN", "false") } flavorDimensions.add("market") productFlavors { create("freedom") { dimension = "market" } create("google") { dimension = "market" buildConfigField("boolean", "FULLSCREEN", "true") } } } dependencies { coreLibraryDesugaring(libs.desugar) implementation(libs.androidx.leanback.preference) testImplementation(libs.junit) androidTestImplementation(libs.androidx.espresso.core) androidTestImplementation(libs.androidx.test.runner) } ================================================ FILE: tv/google-services.json ================================================ { "project_info": { "project_number": "261400168171", "firebase_url": "https://admob-app-id-3330146721.firebaseio.com", "project_id": "admob-app-id-3330146721", "storage_bucket": "admob-app-id-3330146721.appspot.com" }, "client": [ { "client_info": { "mobilesdk_app_id": "1:261400168171:android:dbdd6331c434162f", "android_client_info": { "package_name": "com.github.shadowsocks" } }, "oauth_client": [ { "client_id": "261400168171-sfik8o3pj7e243583olorh7s5974vab1.apps.googleusercontent.com", "client_type": 1, "android_info": { "package_name": "com.github.shadowsocks", "certificate_hash": "58a90f84cfe99d4280aec677c9a1292fae131677" } }, { "client_id": "261400168171-g7aelv5bu012ojr7dod7lq09c9anjimh.apps.googleusercontent.com", "client_type": 3 } ], "api_key": [ { "current_key": "AIzaSyCee3fAad7nb3YsxeUO9mqqHFfAvsSCbVs" } ], "services": { "analytics_service": { "status": 1 }, "appinvite_service": { "status": 1, "other_platform_oauth_client": [] }, "ads_service": { "status": 2 } }, "admob_app_id": "ca-app-pub-9097031975646651~3330146721" }, { "client_info": { "mobilesdk_app_id": "1:261400168171:android:0dbac07695d93817", "android_client_info": { "package_name": "com.github.shadowsocks.tv" } }, "oauth_client": [ { "client_id": "261400168171-g7aelv5bu012ojr7dod7lq09c9anjimh.apps.googleusercontent.com", "client_type": 3 } ], "api_key": [ { "current_key": "AIzaSyCee3fAad7nb3YsxeUO9mqqHFfAvsSCbVs" } ], "services": { "analytics_service": { "status": 1 }, "appinvite_service": { "status": 1, "other_platform_oauth_client": [] }, "ads_service": { "status": 2 } } } ], "configuration_version": "1" } ================================================ FILE: tv/src/freedom/res/values/styles.xml ================================================ ================================================ FILE: tv/src/main/AndroidManifest.xml ================================================ ================================================ FILE: tv/src/main/java/com/github/shadowsocks/tv/App.kt ================================================ /******************************************************************************* * * * Copyright (C) 2018 by Max Lv * * Copyright (C) 2018 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.tv import android.app.Application import android.content.res.Configuration import com.github.shadowsocks.Core class App : Application() { override fun onCreate() { super.onCreate() Core.init(this, MainActivity::class) } override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) Core.updateNotificationChannels() } } ================================================ FILE: tv/src/main/java/com/github/shadowsocks/tv/MainActivity.kt ================================================ /******************************************************************************* * * * Copyright (C) 2018 by Max Lv * * Copyright (C) 2018 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.tv import android.os.Bundle import androidx.appcompat.app.AppCompatActivity class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } } ================================================ FILE: tv/src/main/java/com/github/shadowsocks/tv/MainFragment.kt ================================================ /******************************************************************************* * * * Copyright (C) 2018 by Max Lv * * Copyright (C) 2018 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.tv import android.os.Bundle import android.view.View import android.view.ViewGroup import androidx.core.os.bundleOf import androidx.core.view.updateLayoutParams import androidx.leanback.preference.LeanbackPreferenceDialogFragmentCompat import androidx.leanback.preference.LeanbackSettingsFragmentCompat import androidx.preference.* import com.github.shadowsocks.bg.BaseService import com.github.shadowsocks.tv.preference.LeanbackSingleListPreferenceDialogFragment import com.github.shadowsocks.utils.Key class MainFragment : LeanbackSettingsFragmentCompat() { override fun onPreferenceStartInitialScreen() = startPreferenceFragment(MainPreferenceFragment()) override fun onPreferenceStartScreen(caller: PreferenceFragmentCompat, pref: PreferenceScreen): Boolean { onPreferenceStartInitialScreen() return true } override fun onPreferenceStartFragment(caller: PreferenceFragmentCompat, pref: Preference): Boolean = false override fun onPreferenceDisplayDialog(caller: PreferenceFragmentCompat, pref: Preference): Boolean { if (pref.key == Key.id) { if ((childFragmentManager.findFragmentById(R.id.settings_preference_fragment_container) as MainPreferenceFragment).state == BaseService.State.Stopped) { startPreferenceFragment(ProfilesDialogFragment().apply { arguments = bundleOf(Pair(LeanbackPreferenceDialogFragmentCompat.ARG_KEY, Key.id)) setTargetFragment(caller, 0) }) } return true } if (pref is ListPreference) { startPreferenceFragment(LeanbackSingleListPreferenceDialogFragment().apply { arguments = bundleOf(Pair(LeanbackPreferenceDialogFragmentCompat.ARG_KEY, pref.key)) setTargetFragment(caller, 0) }) return true } return super.onPreferenceDisplayDialog(caller, pref) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) if (BuildConfig.FULLSCREEN) { view.findViewById(R.id.settings_preference_fragment_container).updateLayoutParams { width = ViewGroup.LayoutParams.MATCH_PARENT } } } } ================================================ FILE: tv/src/main/java/com/github/shadowsocks/tv/MainPreferenceFragment.kt ================================================ /******************************************************************************* * * * Copyright (C) 2018 by Max Lv * * Copyright (C) 2018 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.tv import android.content.ActivityNotFoundException import android.content.Intent import android.os.Bundle import android.os.RemoteException import android.text.format.Formatter import android.widget.Toast import androidx.activity.result.ActivityResultLauncher import androidx.fragment.app.setFragmentResultListener import androidx.fragment.app.viewModels import androidx.leanback.preference.LeanbackPreferenceFragmentCompat import androidx.preference.* import com.github.shadowsocks.BootReceiver import com.github.shadowsocks.Core import com.github.shadowsocks.aidl.IShadowsocksService import com.github.shadowsocks.aidl.ShadowsocksConnection import com.github.shadowsocks.aidl.TrafficStats import com.github.shadowsocks.bg.BaseService import com.github.shadowsocks.database.ProfileManager import com.github.shadowsocks.net.HttpsTest import com.github.shadowsocks.preference.DataStore import com.github.shadowsocks.preference.EditTextPreferenceModifiers import com.github.shadowsocks.preference.OnPreferenceDataStoreChangeListener import com.github.shadowsocks.utils.* import com.google.android.gms.oss.licenses.OssLicensesMenuActivity import timber.log.Timber class MainPreferenceFragment : LeanbackPreferenceFragmentCompat(), ShadowsocksConnection.Callback, OnPreferenceDataStoreChangeListener { private lateinit var fab: ListPreference private lateinit var stats: Preference private lateinit var controlImport: Preference private lateinit var serviceMode: Preference private lateinit var shareOverLan: Preference private lateinit var portProxy: EditTextPreference private lateinit var portLocalDns: EditTextPreference private lateinit var portTransproxy: EditTextPreference private val onServiceModeChange = Preference.OnPreferenceChangeListener { _, newValue -> portTransproxy.isEnabled = newValue as String? == Key.modeTransproxy true } private val tester by viewModels() // service var state = BaseService.State.Idle private set override fun stateChanged(state: BaseService.State, profileName: String?, msg: String?) = changeState(state, msg) override fun trafficUpdated(profileId: Long, stats: TrafficStats) { if (profileId == 0L) context?.let { context -> this.stats.summary = getString(R.string.stat_summary, getString(R.string.speed, Formatter.formatFileSize(context, stats.txRate)), getString(R.string.speed, Formatter.formatFileSize(context, stats.rxRate)), Formatter.formatFileSize(context, stats.txTotal), Formatter.formatFileSize(context, stats.rxTotal)) } } private fun changeState(state: BaseService.State, msg: String? = null) { val context = context ?: return fab.isEnabled = state.canStop || state == BaseService.State.Stopped fab.setTitle(when (state) { BaseService.State.Connecting -> R.string.connecting BaseService.State.Connected -> R.string.stop BaseService.State.Stopping -> R.string.stopping else -> R.string.connect }) stats.setTitle(R.string.connection_test_pending) if ((state == BaseService.State.Connected).also { stats.isVisible = it }) tester.status.observe(this) { it.retrieve(stats::setTitle) { msg -> Toast.makeText(context, msg, Toast.LENGTH_LONG).show() } } else { trafficUpdated(0, TrafficStats()) tester.status.removeObservers(this) if (state != BaseService.State.Idle) tester.invalidate() } if (msg != null) Toast.makeText(context, getString(R.string.vpn_error, msg), Toast.LENGTH_SHORT).show() this.state = state val stopped = state == BaseService.State.Stopped controlImport.isEnabled = stopped serviceMode.isEnabled = stopped shareOverLan.isEnabled = stopped portProxy.isEnabled = stopped portLocalDns.isEnabled = stopped if (stopped) onServiceModeChange.onPreferenceChange(serviceMode, DataStore.serviceMode) else { portTransproxy.isEnabled = false } } private val connection = ShadowsocksConnection(true) override fun onServiceConnected(service: IShadowsocksService) = changeState(try { BaseService.State.entries[service.state] } catch (_: RemoteException) { BaseService.State.Idle }) override fun onServiceDisconnected() = changeState(BaseService.State.Idle) override fun onBinderDied() { connection.disconnect(requireContext()) connection.connect(requireContext(), this) } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { preferenceManager.preferenceDataStore = DataStore.publicStore DataStore.initGlobal() addPreferencesFromResource(R.xml.pref_main) setFragmentResultListener(ProfilesDialogFragment::class.java.name) { _, _ -> startService() } fab = findPreference(Key.id)!! populateProfiles() stats = findPreference(Key.controlStats)!! controlImport = findPreference(Key.controlImport)!! findPreference(Key.persistAcrossReboot)!!.setOnPreferenceChangeListener { _, value -> BootReceiver.enabled = value as Boolean true } serviceMode = findPreference(Key.serviceMode)!! shareOverLan = findPreference(Key.shareOverLan)!! portProxy = findPreference(Key.portProxy)!! portProxy.setOnBindEditTextListener(EditTextPreferenceModifiers.Port) portLocalDns = findPreference(Key.portLocalDns)!! portLocalDns.setOnBindEditTextListener(EditTextPreferenceModifiers.Port) portTransproxy = findPreference(Key.portTransproxy)!! portTransproxy.setOnBindEditTextListener(EditTextPreferenceModifiers.Port) serviceMode.onPreferenceChangeListener = onServiceModeChange findPreference(Key.about)!!.summary = getString(R.string.about_title, BuildConfig.VERSION_NAME) changeState(BaseService.State.Idle) // reset everything to init state connection.connect(requireContext(), this) DataStore.publicStore.registerChangeListener(this) } override fun onStart() { super.onStart() connection.bandwidthTimeout = 500 } override fun onResume() { super.onResume() fab.value = DataStore.profileId.toString() } private fun populateProfiles() { ProfileManager.ensureNotEmpty() val profiles = ProfileManager.getActiveProfiles()!! fab.value = null fab.entries = profiles.map { it.formattedName }.toTypedArray() fab.entryValues = profiles.map { it.id.toString() }.toTypedArray() } fun startService() { if (state == BaseService.State.Stopped) connect.launch(null) } override fun onPreferenceDataStoreChanged(store: PreferenceDataStore, key: String) { when (key) { Key.serviceMode -> { connection.disconnect(requireContext()) connection.connect(requireContext(), this) } } } override fun onStop() { connection.bandwidthTimeout = 0 super.onStop() } override fun onPreferenceTreeClick(preference: Preference): Boolean = when (preference.key) { Key.id -> { if (state == BaseService.State.Connected) Core.stopService() true } Key.controlStats -> { tester.testConnection() true } Key.controlImport -> { startFilesForResult(replaceProfiles) true } Key.controlExport -> { startFilesForResult(exportProfiles) true } Key.about -> { Toast.makeText(requireContext(), "https://shadowsocks.org/android", Toast.LENGTH_SHORT).show() true } Key.aboutOss -> { startActivity(Intent(context, OssLicensesMenuActivity::class.java)) true } else -> super.onPreferenceTreeClick(preference) } private fun startFilesForResult(launcher: ActivityResultLauncher) { try { return launcher.launch("") } catch (_: ActivityNotFoundException) { } catch (_: SecurityException) { } Toast.makeText(requireContext(), R.string.file_manager_missing, Toast.LENGTH_SHORT).show() } private val connect = registerForActivityResult(StartService()) { if (it) Toast.makeText(requireContext(), R.string.vpn_permission_denied, Toast.LENGTH_SHORT).show() } private val replaceProfiles = registerForActivityResult(OpenJson) { dataUris -> if (dataUris.isEmpty()) return@registerForActivityResult val context = requireContext() try { ProfileManager.createProfilesFromJson(dataUris.asSequence().map { context.contentResolver.openInputStream(it) }.filterNotNull(), true) } catch (e: Exception) { Timber.w(e) Toast.makeText(context, e.readableMessage, Toast.LENGTH_SHORT).show() } populateProfiles() } private val exportProfiles = registerForActivityResult(SaveJson) { data -> if (data != null) ProfileManager.serializeToJson()?.let { profiles -> val context = requireContext() try { context.contentResolver.openOutputStream(data)!!.bufferedWriter().use { it.write(profiles.toString(2)) } } catch (e: Exception) { Timber.w(e) Toast.makeText(context, e.readableMessage, Toast.LENGTH_SHORT).show() } } } override fun onDestroy() { super.onDestroy() DataStore.publicStore.unregisterChangeListener(this) val context = requireContext() connection.disconnect(context) } } ================================================ FILE: tv/src/main/java/com/github/shadowsocks/tv/ProfilesDialogFragment.kt ================================================ /******************************************************************************* * * * Copyright (C) 2018 by Max Lv * * Copyright (C) 2018 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.tv import android.os.Bundle import android.text.format.Formatter import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.CompoundButton import android.widget.TextView import androidx.fragment.app.setFragmentResult import androidx.leanback.preference.LeanbackListPreferenceDialogFragmentCompat import androidx.recyclerview.widget.RecyclerView import com.github.shadowsocks.Core import com.github.shadowsocks.database.ProfileManager import com.github.shadowsocks.plugin.PluginConfiguration import com.github.shadowsocks.preference.DataStore class ProfilesDialogFragment : LeanbackListPreferenceDialogFragmentCompat() { private inner class ProfileViewHolder(view: View) : RecyclerView.ViewHolder(view), View.OnClickListener { val widgetView = view.findViewById(R.id.button) val titleView = view.findViewById(android.R.id.title) init { view.findViewById(R.id.container).setOnClickListener(this) } override fun onClick(v: View) { val index = bindingAdapterPosition if (index == RecyclerView.NO_POSITION) return Core.switchProfile(adapter.profiles[index].id) setFragmentResult(ProfilesDialogFragment::class.java.name, Bundle.EMPTY) parentFragmentManager.popBackStack() adapter.notifyDataSetChanged() } } private inner class ProfilesAdapter : RecyclerView.Adapter() { val profiles = ProfileManager.getActiveProfiles()!! override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ProfileViewHolder( LayoutInflater.from(parent.context).inflate(R.layout.leanback_list_preference_item_single_2, parent, false)) override fun onBindViewHolder(holder: ProfileViewHolder, position: Int) { val profile = profiles[position] holder.widgetView.isChecked = profile.id == DataStore.profileId holder.titleView.text = profile.formattedName holder.itemView.findViewById(android.R.id.summary).text = ArrayList().apply { if (!profile.name.isNullOrEmpty()) this += profile.formattedAddress val id = PluginConfiguration(profile.plugin ?: "").selected if (id.isNotEmpty()) this += getString(R.string.profile_plugin, id) if (profile.tx > 0 || profile.rx > 0) this += getString(R.string.traffic, Formatter.formatFileSize(activity, profile.tx), Formatter.formatFileSize(activity, profile.rx)) }.joinToString("\n") } override fun getItemCount() = profiles.size } private val adapter = ProfilesAdapter() override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { return super.onCreateView(inflater, container, savedInstanceState)!!.apply { val list = findViewById(android.R.id.list) list.adapter = adapter list.layoutManager!!.scrollToPosition(adapter.profiles.indexOfFirst { it.id == DataStore.profileId }) } } } ================================================ FILE: tv/src/main/java/com/github/shadowsocks/tv/preference/LeanbackSingleListPreferenceDialogFragment.kt ================================================ /******************************************************************************* * * * Copyright (C) 2018 by Max Lv * * Copyright (C) 2018 by Mygod Studio * * * * 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 . * * * *******************************************************************************/ package com.github.shadowsocks.tv.preference import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.leanback.preference.LeanbackListPreferenceDialogFragmentCompat import androidx.recyclerview.widget.RecyclerView /** * Fix: scroll to selected item. */ open class LeanbackSingleListPreferenceDialogFragment : LeanbackListPreferenceDialogFragmentCompat() { companion object { private val mEntryValues = LeanbackListPreferenceDialogFragmentCompat::class.java .getDeclaredField("mEntryValues").apply { isAccessible = true } private val mInitialSelection = LeanbackListPreferenceDialogFragmentCompat::class.java .getDeclaredField("mInitialSelection").apply { isAccessible = true } } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val selected = mInitialSelection.get(this) as? String val index = (mEntryValues.get(this) as? Array<*>)?.indexOfFirst { selected == it } return super.onCreateView(inflater, container, savedInstanceState)!!.also { if (index != null) it.findViewById(android.R.id.list).layoutManager!!.scrollToPosition(index) } } } ================================================ FILE: tv/src/main/res/layout/activity_main.xml ================================================ ================================================ FILE: tv/src/main/res/layout/leanback_list_preference_item_single_2.xml ================================================ ================================================ FILE: tv/src/main/res/values/styles.xml ================================================ ================================================ FILE: tv/src/main/res/xml/pref_main.xml ================================================