Repository: paradiseduo/Trojan Branch: master Commit: 9e81416543b9 Files: 79 Total size: 1.6 MB Directory structure: gitextract_1x4lon3i/ ├── .gitattributes ├── Podfile ├── ProxyConfHelper/ │ ├── main.m │ └── version.h ├── README.md ├── Trojan/ │ ├── AppDelegate.swift │ ├── Assets.xcassets/ │ │ ├── AppIcon.appiconset/ │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── close.imageset/ │ │ │ └── Contents.json │ │ ├── copy.imageset/ │ │ │ └── Contents.json │ │ └── open.imageset/ │ │ └── Contents.json │ ├── Base.lproj/ │ │ └── MainMenu.xib │ ├── CommandLine.swift │ ├── File/ │ │ ├── abp.js │ │ ├── backchn.acl │ │ ├── chn.acl │ │ ├── gfwlist.acl │ │ ├── gfwlist.txt │ │ ├── user-rule.txt │ │ ├── whiteiplist.pac │ │ └── whitelist.pac │ ├── Info.plist │ ├── InstallHelper/ │ │ ├── install_helper.sh │ │ ├── install_privoxy.sh │ │ ├── install_trojan.sh │ │ ├── privoxy │ │ ├── privoxy.config.example │ │ ├── reload_conf_privoxy.sh │ │ ├── reload_conf_trojan.sh │ │ ├── remove_privoxy.sh │ │ ├── remove_trojan.sh │ │ ├── start_privoxy.sh │ │ ├── start_trojan.sh │ │ ├── stop_privoxy.sh │ │ ├── stop_trojan.sh │ │ └── trojan │ ├── LaunchAgentHelper.swift │ ├── LoginServiceKit.swift │ ├── ModeSwitcher.swift │ ├── NetworkMonitor/ │ │ ├── NetSpeedMonitor.h │ │ ├── NetSpeedMonitor.m │ │ └── SpeedTools.swift │ ├── PAC.swift │ ├── Profile/ │ │ ├── Configuration.swift │ │ ├── DefaultsConfig.h │ │ ├── Json.swift │ │ └── Profile.swift │ ├── ProxyConfHelper.h │ ├── ProxyConfHelper.m │ ├── StatusMenuManager.swift │ ├── Subscribe/ │ │ ├── Network.swift │ │ ├── Subscribe.swift │ │ ├── SubscribeManager.swift │ │ └── Utils.swift │ ├── Trojan-Bridging-Header.h │ ├── Trojan.entitlements │ ├── VersionChecker.swift │ ├── WIndows/ │ │ ├── Base.lproj/ │ │ │ ├── SettingWindowController.xib │ │ │ ├── SettingsWIndowController.xib │ │ │ └── SubscribePreferenceWindowController.xib │ │ ├── EditableNSTextView.swift │ │ ├── LogWindowController.swift │ │ ├── LogWindowController.xib │ │ ├── SettingWindowController.swift │ │ ├── SettingsWIndowController.swift │ │ ├── SubscribePreferenceWindowController.swift │ │ ├── ToastWindowController.swift │ │ ├── ToastWindowController.xib │ │ └── zh-Hans.lproj/ │ │ ├── SettingWindowController.strings │ │ ├── SettingsWIndowController.strings │ │ └── SubscribePreferenceWindowController.strings │ ├── en.lproj/ │ │ └── Localizable.strings │ ├── tcping/ │ │ ├── ConnectTestigManager.swift │ │ ├── GCDAsyncSocket.h │ │ ├── GCDAsyncSocket.m │ │ └── tcping.swift │ └── zh-Hans.lproj/ │ ├── Localizable.strings │ └── MainMenu.strings └── Trojan.xcodeproj/ └── project.pbxproj ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitattributes ================================================ *.js linguist-language=Swift *.pac linguist-language=Swift ================================================ FILE: Podfile ================================================ # Uncomment the next line to define a global platform for your project # platform :ios, '9.0' target 'ProxyConfHelper' do # Comment the next line if you don't want to use dynamic frameworks # use_frameworks! # Pods for ProxyConfHelper pod 'BRLOptionParser', '~> 0.3.1' end target 'Trojan' do # Comment the next line if you don't want to use dynamic frameworks use_frameworks! # Pods for Trojan pod 'GCDWebServer' pod 'Alamofire' end ================================================ FILE: ProxyConfHelper/main.m ================================================ // // main.m // ProxyConfHelper // // Created by ParadiseDuo on 2020/5/3. // Copyright © 2020 ParadiseDuo. All rights reserved. // #import #import #import #import "version.h" int main(int argc, const char * argv[]) { NSString* mode; NSString* pacURL; NSString* portString; NSString* privoxyPortString; BRLOptionParser *options = [BRLOptionParser new]; [options setBanner:@"Usage: %s [-v] [-m auto|global|off] [-u ] [-p ] [-r ]", argv[0]]; // Version [options addOption:"version" flag:'v' description:@"Print the version number." block:^{ printf("%s", [kProxyConfHelperVersion UTF8String]); exit(EXIT_SUCCESS); }]; // Help __weak typeof(options) weakOptions = options; [options addOption:"help" flag:'h' description:@"Show this message" block:^{ printf("%s", [[weakOptions description] UTF8String]); exit(EXIT_SUCCESS); }]; // Mode [options addOption:"mode" flag:'m' description:@"Proxy mode, may be: auto,global,off" argument:&mode]; [options addOption:"pac-url" flag:'u' description:@"PAC file url for auto mode." argument:&pacURL]; [options addOption:"port" flag:'p' description:@"Listen port for global mode." argument:&portString]; [options addOption:"privoxy-port" flag:'r' description:@"Privoxy Port for global mode." argument:&privoxyPortString]; NSMutableSet* networkServiceKeys = [NSMutableSet set]; [options addOption:"network-service" flag:'n' description:@"Manual specify the network profile need to set proxy." blockWithArgument:^(NSString* value){ [networkServiceKeys addObject:value]; }]; NSError *error = nil; if (![options parseArgc:argc argv:argv error:&error]) { const char * message = error.localizedDescription.UTF8String; fprintf(stderr, "%s: %s\n", argv[0], message); exit(EXIT_FAILURE); } if (mode) { if ([@"auto" isEqualToString:mode]) { if (!pacURL) { return 1; } } else if ([@"global" isEqualToString:mode]) { if (!portString) { return 1; } } else if (![@"off" isEqualToString:mode]) { return 1; } } else { printf("%s", [kProxyConfHelperVersion UTF8String]); return 0; } NSInteger port = 0; if (portString) { port = [portString integerValue]; if (0 == port) { return 1; } } NSInteger privoxyPort = 0; if (privoxyPortString) { privoxyPort = [privoxyPortString integerValue]; if (0 == privoxyPort) { return 1; } } static AuthorizationRef authRef; static AuthorizationFlags authFlags; authFlags = kAuthorizationFlagDefaults | kAuthorizationFlagExtendRights | kAuthorizationFlagInteractionAllowed | kAuthorizationFlagPreAuthorize; OSStatus authErr = AuthorizationCreate(nil, kAuthorizationEmptyEnvironment, authFlags, &authRef); if (authErr != noErr) { authRef = nil; NSLog(@"Error when create authorization"); return 1; } else { if (authRef == NULL) { NSLog(@"No authorization has been granted to modify network configuration"); return 1; } SCPreferencesRef prefRef = SCPreferencesCreateWithAuthorization(nil, CFSTR("Trojan"), nil, authRef); NSDictionary *sets = (__bridge NSDictionary *)SCPreferencesGetValue(prefRef, kSCPrefNetworkServices); NSMutableDictionary *proxies = [[NSMutableDictionary alloc] init]; [proxies setObject:[NSNumber numberWithInt:0] forKey:(NSString *)kCFNetworkProxiesHTTPEnable]; [proxies setObject:[NSNumber numberWithInt:0] forKey:(NSString *)kCFNetworkProxiesHTTPSEnable]; [proxies setObject:[NSNumber numberWithInt:0] forKey:(NSString *)kCFNetworkProxiesProxyAutoConfigEnable]; [proxies setObject:[NSNumber numberWithInt:0] forKey:(NSString *)kCFNetworkProxiesSOCKSEnable]; [proxies setObject:@[] forKey:(NSString *)kCFNetworkProxiesExceptionsList]; // 遍历系统中的网络设备列表,设置 AirPort 和 Ethernet 的代理 for (NSString *key in [sets allKeys]) { NSMutableDictionary *dict = [sets objectForKey:key]; NSString *hardware = [dict valueForKeyPath:@"Interface.Hardware"]; // NSLog(@"%@", hardware); BOOL modify = NO; if ([networkServiceKeys count] > 0) { if ([networkServiceKeys containsObject:key]) { modify = YES; } } else if ([hardware isEqualToString:@"AirPort"] || [hardware isEqualToString:@"Wi-Fi"] || [hardware isEqualToString:@"Ethernet"]) { modify = YES; } if (modify) { NSString* prefPath = [NSString stringWithFormat:@"/%@/%@/%@", kSCPrefNetworkServices , key, kSCEntNetProxies]; if ([mode isEqualToString:@"auto"]) { [proxies setObject:pacURL forKey:(NSString *)kCFNetworkProxiesProxyAutoConfigURLString]; [proxies setObject:[NSNumber numberWithInt:1] forKey:(NSString *)kCFNetworkProxiesProxyAutoConfigEnable]; SCPreferencesPathSetValue(prefRef, (__bridge CFStringRef)prefPath , (__bridge CFDictionaryRef)proxies); } else if ([mode isEqualToString:@"global"]) { [proxies setObject:@"127.0.0.1" forKey:(NSString *) kCFNetworkProxiesSOCKSProxy]; [proxies setObject:[NSNumber numberWithInteger:port] forKey:(NSString*) kCFNetworkProxiesSOCKSPort]; [proxies setObject:[NSNumber numberWithInt:1] forKey:(NSString*) kCFNetworkProxiesSOCKSEnable]; [proxies setObject:@[@"127.0.0.1", @"localhost"] forKey:(NSString *)kCFNetworkProxiesExceptionsList]; if (privoxyPort != 0) { [proxies setObject:@"127.0.0.1" forKey:(NSString *) kCFNetworkProxiesHTTPProxy]; [proxies setObject:[NSNumber numberWithInteger:privoxyPort] forKey:(NSString*) kCFNetworkProxiesHTTPPort]; [proxies setObject:[NSNumber numberWithInt:1] forKey:(NSString*) kCFNetworkProxiesHTTPEnable]; [proxies setObject:@"127.0.0.1" forKey:(NSString *) kCFNetworkProxiesHTTPSProxy]; [proxies setObject:[NSNumber numberWithInteger:privoxyPort] forKey:(NSString*) kCFNetworkProxiesHTTPSPort]; [proxies setObject:[NSNumber numberWithInt:1] forKey:(NSString*) kCFNetworkProxiesHTTPSEnable]; } SCPreferencesPathSetValue(prefRef, (__bridge CFStringRef)prefPath , (__bridge CFDictionaryRef)proxies); } else if ([mode isEqualToString:@"off"]) { if (pacURL != nil && portString != nil) { // 取原来的配置,判断是否为Trojan设置的 NSDictionary* oldProxies = (__bridge NSDictionary*)SCPreferencesPathGetValue(prefRef , (__bridge CFStringRef)prefPath); if (([oldProxies[(NSString *)kCFNetworkProxiesProxyAutoConfigURLString] containsString:pacURL] &&[oldProxies[(NSString *)kCFNetworkProxiesProxyAutoConfigEnable] isEqual:[NSNumber numberWithInt:1]]) ||([oldProxies[(NSString*)kCFNetworkProxiesSOCKSProxy] isEqualToString:@"127.0.0.1"] &&[oldProxies[(NSString*)kCFNetworkProxiesSOCKSPort] isEqualTo:[NSNumber numberWithInteger:port]] &&[oldProxies[(NSString*)kCFNetworkProxiesSOCKSEnable] isEqual:[NSNumber numberWithInt:1]]) ) { SCPreferencesPathSetValue(prefRef, (__bridge CFStringRef)prefPath , (__bridge CFDictionaryRef)proxies); } } else { SCPreferencesPathSetValue(prefRef, (__bridge CFStringRef)prefPath , (__bridge CFDictionaryRef)proxies); } } } } SCPreferencesCommitChanges(prefRef); SCPreferencesApplyChanges(prefRef); SCPreferencesSynchronize(prefRef); AuthorizationFree(authRef, kAuthorizationFlagDefaults); } printf("pac proxy set to %s", [mode UTF8String]); return 0; } ================================================ FILE: ProxyConfHelper/version.h ================================================ // // version.h // ProxyConfHelper // // Created by ParadiseDuo on 2020/5/3. // Copyright © 2020 ParadiseDuo. All rights reserved. // #ifndef version_h #define version_h #define kProxyConfHelperVersion @"1.0" #endif /* version_h */ ================================================ FILE: README.md ================================================

Trojan
Trojan

Trojan is a GUI program for trojan on macOS. [![Swift](https://img.shields.io/badge/swift-5.2-orange.svg)](https://swift.org/) [![platform](https://img.shields.io/badge/platform-macOS-green.svg)](https://github.com/MobSF/Mobile-Security-Framework-MobSF/) [![License](https://img.shields.io/:license-GPL--3.0--only-blue.svg)](https://www.gnu.org/licenses/gpl-3.0.html) ## Version: v2.1

## Install download [here](https://github.com/paradiseduo/Trojan/releases) and unzip file, Drag Trojan.app to Applications file ## Uninstall drop Trojan.app to Trash then open Terminal.app and input those commands: ```bash rm -rf /usr/local/var/log/trojan rm -rf ~/Documents/Trojan rm -rf /Library/Application\ Support/Trojan rm -rf ~/Library/Application\ Support/Trojan rm -rf ~/Library/Preferences/MacOS.Trojan.plist rm -rf ~/Library/LaunchAgents/MacOS.Trojan.local.plist rm -rf ~/Library/LaunchAgents/MacOS.Trojan.http.plist rm -rf ~/Library/Caches/MacOS.Trojan rm -rf ~/Library/Containers/MacOS.Trojan rm -rf ~/Library/Application\ Scripts/MacOS.Trojan rm -rf ~/Library/Containers/MacOS.Trojan.StartAtLoginLauncher rm -rf ~/Library/Application\ Scripts/MacOS.Trojan.StartAtLoginLauncher ``` ## Screenshots ### Menu

### Setting

## Star Trend [![Stargazers over time](https://starchart.cc/paradiseduo/Trojan.svg)](https://starchart.cc/paradiseduo/Trojan) ================================================ FILE: Trojan/AppDelegate.swift ================================================ // // AppDelegate.swift // Trojan // // Created by ParadiseDuo on 2020/4/7. // Copyright © 2020 ParadiseDuo. All rights reserved. // import Cocoa @NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate { func applicationDidFinishLaunching(_ aNotification: Notification) { } func applicationWillTerminate(_ aNotification: Notification) { // Insert code here to tear down your application } static func getLauncherStatus() -> Bool { return LoginServiceKit.isExistLoginItems() } static func setLauncherStatus(open: Bool) { if open { LoginServiceKit.addLoginItems() } else { LoginServiceKit.removeLoginItems() } } static func stopTrojan(finish: @escaping()->()) { StopTrojan { (s) in StopPrivoxy { (ss) in ProxyConfHelper.stopPACServer() ProxyConfHelper.disableProxy("hi") let defaults = UserDefaults.standard defaults.set(false, forKey: USERDEFAULTS_TROJAN_ON) defaults.synchronize() DispatchQueue.main.async { finish() } } } } } ================================================ FILE: Trojan/Assets.xcassets/AppIcon.appiconset/Contents.json ================================================ { "images" : [ { "filename" : "004-rocket.png", "idiom" : "mac", "scale" : "1x", "size" : "16x16" }, { "filename" : "004-rocket (1).png", "idiom" : "mac", "scale" : "2x", "size" : "16x16" }, { "filename" : "004-rocket (1)-1.png", "idiom" : "mac", "scale" : "1x", "size" : "32x32" }, { "filename" : "004-rocket (2).png", "idiom" : "mac", "scale" : "2x", "size" : "32x32" }, { "filename" : "004-rocket (3).png", "idiom" : "mac", "scale" : "1x", "size" : "128x128" }, { "filename" : "004-rocket (4).png", "idiom" : "mac", "scale" : "2x", "size" : "128x128" }, { "filename" : "004-rocket (4)-1.png", "idiom" : "mac", "scale" : "1x", "size" : "256x256" }, { "filename" : "004-rocket (5).png", "idiom" : "mac", "scale" : "2x", "size" : "256x256" }, { "filename" : "004-rocket (5)-1.png", "idiom" : "mac", "scale" : "1x", "size" : "512x512" }, { "filename" : "004-rocket (6).png", "idiom" : "mac", "scale" : "2x", "size" : "512x512" } ], "info" : { "author" : "xcode", "version" : 1 } } ================================================ FILE: Trojan/Assets.xcassets/Contents.json ================================================ { "info" : { "author" : "xcode", "version" : 1 } } ================================================ FILE: Trojan/Assets.xcassets/close.imageset/Contents.json ================================================ { "images" : [ { "filename" : "rocket (5).png", "idiom" : "universal", "scale" : "1x" }, { "filename" : "rocket (4).png", "idiom" : "universal", "scale" : "2x" }, { "filename" : "rocket (3).png", "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } ================================================ FILE: Trojan/Assets.xcassets/copy.imageset/Contents.json ================================================ { "images" : [ { "filename" : "copy.png", "idiom" : "universal", "scale" : "1x" }, { "filename" : "copy (1).png", "idiom" : "universal", "scale" : "2x" }, { "filename" : "copy (2).png", "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } ================================================ FILE: Trojan/Assets.xcassets/open.imageset/Contents.json ================================================ { "images" : [ { "filename" : "rocket.png", "idiom" : "universal", "scale" : "1x" }, { "filename" : "rocket (1).png", "idiom" : "universal", "scale" : "2x" }, { "filename" : "rocket (2).png", "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } ================================================ FILE: Trojan/Base.lproj/MainMenu.xib ================================================ ================================================ FILE: Trojan/CommandLine.swift ================================================ // // CommandLine.swift // Trojan // // Created by ParadiseDuo on 2020/4/2. // Copyright © 2020 Mac. All rights reserved. // import Foundation class CommandLine { static func async(task: Process, command: String, output: ((String) -> Void)? = nil, terminate: ((Int) -> Void)? = nil) { let utf8Command = "export LANG=en_US.UTF-8\n" + command async(task: task, shellPath: "/bin/bash", arguments: ["-c", utf8Command], output: output, terminate: terminate) } static func async(task: Process, shellPath: String, arguments: [String]? = nil, output: ((String) -> Void)? = nil, terminate: ((Int) -> Void)? = nil) { DispatchQueue.global().async { let pipe = Pipe() let outHandle = pipe.fileHandleForReading var environment = ProcessInfo.processInfo.environment environment["PATH"] = "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" task.environment = environment if arguments != nil { task.arguments = arguments! } task.launchPath = shellPath task.standardOutput = pipe outHandle.waitForDataInBackgroundAndNotify() var obs1 : NSObjectProtocol! obs1 = NotificationCenter.default.addObserver(forName: NSNotification.Name.NSFileHandleDataAvailable, object: outHandle, queue: nil) { notification -> Void in let data = outHandle.availableData if data.count > 0 { if let str = NSString(data: data, encoding: String.Encoding.utf8.rawValue) { DispatchQueue.main.async { output?(str as String) } } outHandle.waitForDataInBackgroundAndNotify() } else { NotificationCenter.default.removeObserver(obs1 as Any) pipe.fileHandleForReading.closeFile() } } var obs2 : NSObjectProtocol! obs2 = NotificationCenter.default.addObserver(forName: Process.didTerminateNotification, object: task, queue: nil) { notification -> Void in DispatchQueue.main.async { terminate?(Int(0)) } NotificationCenter.default.removeObserver(obs2 as Any) } task.launch() task.waitUntilExit() } } } ================================================ FILE: Trojan/File/abp.js ================================================ // Generated by gfwlist2pac in precise mode // https://github.com/clowwindy/gfwlist2pac var proxy = "SOCKS5 127.0.0.1:__SOCKS5PORT__; SOCKS 127.0.0.1:__SOCKS5PORT__; DIRECT;"; var rules = __RULES__; /* * This file is part of Adblock Plus , * Copyright (C) 2006-2014 Eyeo GmbH * * Adblock Plus is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as * published by the Free Software Foundation. * * Adblock Plus is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Adblock Plus. If not, see . */ function createDict() { var result = {}; result.__proto__ = null; return result; } function getOwnPropertyDescriptor(obj, key) { if (obj.hasOwnProperty(key)) { return obj[key]; } return null; } function extend(subclass, superclass, definition) { if (Object.__proto__) { definition.__proto__ = superclass.prototype; subclass.prototype = definition; } else { var tmpclass = function(){}, ret; tmpclass.prototype = superclass.prototype; subclass.prototype = new tmpclass(); subclass.prototype.constructor = superclass; for (var i in definition) { if (definition.hasOwnProperty(i)) { subclass.prototype[i] = definition[i]; } } } } function Filter(text) { this.text = text; this.subscriptions = []; } Filter.prototype = { text: null, subscriptions: null, toString: function() { return this.text; } }; Filter.knownFilters = createDict(); Filter.elemhideRegExp = /^([^\/\*\|\@"!]*?)#(\@)?(?:([\w\-]+|\*)((?:\([\w\-]+(?:[$^*]?=[^\(\)"]*)?\))*)|#([^{}]+))$/; Filter.regexpRegExp = /^(@@)?\/.*\/(?:\$~?[\w\-]+(?:=[^,\s]+)?(?:,~?[\w\-]+(?:=[^,\s]+)?)*)?$/; Filter.optionsRegExp = /\$(~?[\w\-]+(?:=[^,\s]+)?(?:,~?[\w\-]+(?:=[^,\s]+)?)*)$/; Filter.fromText = function(text) { if (text in Filter.knownFilters) { return Filter.knownFilters[text]; } var ret; if (text[0] == "!") { ret = new CommentFilter(text); } else { ret = RegExpFilter.fromText(text); } Filter.knownFilters[ret.text] = ret; return ret; }; function InvalidFilter(text, reason) { Filter.call(this, text); this.reason = reason; } extend(InvalidFilter, Filter, { reason: null }); function CommentFilter(text) { Filter.call(this, text); } extend(CommentFilter, Filter, { }); function ActiveFilter(text, domains) { Filter.call(this, text); this.domainSource = domains; } extend(ActiveFilter, Filter, { domainSource: null, domainSeparator: null, ignoreTrailingDot: true, domainSourceIsUpperCase: false, getDomains: function() { var prop = getOwnPropertyDescriptor(this, "domains"); if (prop) { return prop; } var domains = null; if (this.domainSource) { var source = this.domainSource; if (!this.domainSourceIsUpperCase) { source = source.toUpperCase(); } var list = source.split(this.domainSeparator); if (list.length == 1 && list[0][0] != "~") { domains = createDict(); domains[""] = false; if (this.ignoreTrailingDot) { list[0] = list[0].replace(/\.+$/, ""); } domains[list[0]] = true; } else { var hasIncludes = false; for (var i = 0; i < list.length; i++) { var domain = list[i]; if (this.ignoreTrailingDot) { domain = domain.replace(/\.+$/, ""); } if (domain == "") { continue; } var include; if (domain[0] == "~") { include = false; domain = domain.substr(1); } else { include = true; hasIncludes = true; } if (!domains) { domains = createDict(); } domains[domain] = include; } domains[""] = !hasIncludes; } this.domainSource = null; } return this.domains; }, sitekeys: null, isActiveOnDomain: function(docDomain, sitekey) { if (this.getSitekeys() && (!sitekey || this.getSitekeys().indexOf(sitekey.toUpperCase()) < 0)) { return false; } if (!this.getDomains()) { return true; } if (!docDomain) { return this.getDomains()[""]; } if (this.ignoreTrailingDot) { docDomain = docDomain.replace(/\.+$/, ""); } docDomain = docDomain.toUpperCase(); while (true) { if (docDomain in this.getDomains()) { return this.domains[docDomain]; } var nextDot = docDomain.indexOf("."); if (nextDot < 0) { break; } docDomain = docDomain.substr(nextDot + 1); } return this.domains[""]; }, isActiveOnlyOnDomain: function(docDomain) { if (!docDomain || !this.getDomains() || this.getDomains()[""]) { return false; } if (this.ignoreTrailingDot) { docDomain = docDomain.replace(/\.+$/, ""); } docDomain = docDomain.toUpperCase(); for (var domain in this.getDomains()) { if (this.domains[domain] && domain != docDomain && (domain.length <= docDomain.length || domain.indexOf("." + docDomain) != domain.length - docDomain.length - 1)) { return false; } } return true; } }); function RegExpFilter(text, regexpSource, contentType, matchCase, domains, thirdParty, sitekeys) { ActiveFilter.call(this, text, domains, sitekeys); if (contentType != null) { this.contentType = contentType; } if (matchCase) { this.matchCase = matchCase; } if (thirdParty != null) { this.thirdParty = thirdParty; } if (sitekeys != null) { this.sitekeySource = sitekeys; } if (regexpSource.length >= 2 && regexpSource[0] == "/" && regexpSource[regexpSource.length - 1] == "/") { var regexp = new RegExp(regexpSource.substr(1, regexpSource.length - 2), this.matchCase ? "" : "i"); this.regexp = regexp; } else { this.regexpSource = regexpSource; } } extend(RegExpFilter, ActiveFilter, { domainSourceIsUpperCase: true, length: 1, domainSeparator: "|", regexpSource: null, getRegexp: function() { var prop = getOwnPropertyDescriptor(this, "regexp"); if (prop) { return prop; } var source = this.regexpSource.replace(/\*+/g, "*").replace(/\^\|$/, "^").replace(/\W/g, "\\$&").replace(/\\\*/g, ".*").replace(/\\\^/g, "(?:[\\x00-\\x24\\x26-\\x2C\\x2F\\x3A-\\x40\\x5B-\\x5E\\x60\\x7B-\\x7F]|$)").replace(/^\\\|\\\|/, "^[\\w\\-]+:\\/+(?!\\/)(?:[^\\/]+\\.)?").replace(/^\\\|/, "^").replace(/\\\|$/, "$").replace(/^(\.\*)/, "").replace(/(\.\*)$/, ""); var regexp = new RegExp(source, this.matchCase ? "" : "i"); this.regexp = regexp; return regexp; }, contentType: 2147483647, matchCase: false, thirdParty: null, sitekeySource: null, getSitekeys: function() { var prop = getOwnPropertyDescriptor(this, "sitekeys"); if (prop) { return prop; } var sitekeys = null; if (this.sitekeySource) { sitekeys = this.sitekeySource.split("|"); this.sitekeySource = null; } this.sitekeys = sitekeys; return this.sitekeys; }, matches: function(location, contentType, docDomain, thirdParty, sitekey) { if (this.getRegexp().test(location) && this.isActiveOnDomain(docDomain, sitekey)) { return true; } return false; } }); RegExpFilter.prototype["0"] = "#this"; RegExpFilter.fromText = function(text) { var blocking = true; var origText = text; if (text.indexOf("@@") == 0) { blocking = false; text = text.substr(2); } var contentType = null; var matchCase = null; var domains = null; var sitekeys = null; var thirdParty = null; var collapse = null; var options; var match = text.indexOf("$") >= 0 ? Filter.optionsRegExp.exec(text) : null; if (match) { options = match[1].toUpperCase().split(","); text = match.input.substr(0, match.index); for (var _loopIndex6 = 0; _loopIndex6 < options.length; ++_loopIndex6) { var option = options[_loopIndex6]; var value = null; var separatorIndex = option.indexOf("="); if (separatorIndex >= 0) { value = option.substr(separatorIndex + 1); option = option.substr(0, separatorIndex); } option = option.replace(/-/, "_"); if (option in RegExpFilter.typeMap) { if (contentType == null) { contentType = 0; } contentType |= RegExpFilter.typeMap[option]; } else if (option[0] == "~" && option.substr(1) in RegExpFilter.typeMap) { if (contentType == null) { contentType = RegExpFilter.prototype.contentType; } contentType &= ~RegExpFilter.typeMap[option.substr(1)]; } else if (option == "MATCH_CASE") { matchCase = true; } else if (option == "~MATCH_CASE") { matchCase = false; } else if (option == "DOMAIN" && typeof value != "undefined") { domains = value; } else if (option == "THIRD_PARTY") { thirdParty = true; } else if (option == "~THIRD_PARTY") { thirdParty = false; } else if (option == "COLLAPSE") { collapse = true; } else if (option == "~COLLAPSE") { collapse = false; } else if (option == "SITEKEY" && typeof value != "undefined") { sitekeys = value; } else { return new InvalidFilter(origText, "Unknown option " + option.toLowerCase()); } } } if (!blocking && (contentType == null || contentType & RegExpFilter.typeMap.DOCUMENT) && (!options || options.indexOf("DOCUMENT") < 0) && !/^\|?[\w\-]+:/.test(text)) { if (contentType == null) { contentType = RegExpFilter.prototype.contentType; } contentType &= ~RegExpFilter.typeMap.DOCUMENT; } try { if (blocking) { return new BlockingFilter(origText, text, contentType, matchCase, domains, thirdParty, sitekeys, collapse); } else { return new WhitelistFilter(origText, text, contentType, matchCase, domains, thirdParty, sitekeys); } } catch (e) { return new InvalidFilter(origText, e); } }; RegExpFilter.typeMap = { OTHER: 1, SCRIPT: 2, IMAGE: 4, STYLESHEET: 8, OBJECT: 16, SUBDOCUMENT: 32, DOCUMENT: 64, XBL: 1, PING: 1, XMLHTTPREQUEST: 2048, OBJECT_SUBREQUEST: 4096, DTD: 1, MEDIA: 16384, FONT: 32768, BACKGROUND: 4, POPUP: 268435456, ELEMHIDE: 1073741824 }; RegExpFilter.prototype.contentType &= ~ (RegExpFilter.typeMap.ELEMHIDE | RegExpFilter.typeMap.POPUP); function BlockingFilter(text, regexpSource, contentType, matchCase, domains, thirdParty, sitekeys, collapse) { RegExpFilter.call(this, text, regexpSource, contentType, matchCase, domains, thirdParty, sitekeys); this.collapse = collapse; } extend(BlockingFilter, RegExpFilter, { collapse: null }); function WhitelistFilter(text, regexpSource, contentType, matchCase, domains, thirdParty, sitekeys) { RegExpFilter.call(this, text, regexpSource, contentType, matchCase, domains, thirdParty, sitekeys); } extend(WhitelistFilter, RegExpFilter, { }); function Matcher() { this.clear(); } Matcher.prototype = { filterByKeyword: null, keywordByFilter: null, clear: function() { this.filterByKeyword = createDict(); this.keywordByFilter = createDict(); }, add: function(filter) { if (filter.text in this.keywordByFilter) { return; } var keyword = this.findKeyword(filter); var oldEntry = this.filterByKeyword[keyword]; if (typeof oldEntry == "undefined") { this.filterByKeyword[keyword] = filter; } else if (oldEntry.length == 1) { this.filterByKeyword[keyword] = [oldEntry, filter]; } else { oldEntry.push(filter); } this.keywordByFilter[filter.text] = keyword; }, remove: function(filter) { if (!(filter.text in this.keywordByFilter)) { return; } var keyword = this.keywordByFilter[filter.text]; var list = this.filterByKeyword[keyword]; if (list.length <= 1) { delete this.filterByKeyword[keyword]; } else { var index = list.indexOf(filter); if (index >= 0) { list.splice(index, 1); if (list.length == 1) { this.filterByKeyword[keyword] = list[0]; } } } delete this.keywordByFilter[filter.text]; }, findKeyword: function(filter) { var result = ""; var text = filter.text; if (Filter.regexpRegExp.test(text)) { return result; } var match = Filter.optionsRegExp.exec(text); if (match) { text = match.input.substr(0, match.index); } if (text.substr(0, 2) == "@@") { text = text.substr(2); } var candidates = text.toLowerCase().match(/[^a-z0-9%*][a-z0-9%]{3,}(?=[^a-z0-9%*])/g); if (!candidates) { return result; } var hash = this.filterByKeyword; var resultCount = 16777215; var resultLength = 0; for (var i = 0, l = candidates.length; i < l; i++) { var candidate = candidates[i].substr(1); var count = candidate in hash ? hash[candidate].length : 0; if (count < resultCount || count == resultCount && candidate.length > resultLength) { result = candidate; resultCount = count; resultLength = candidate.length; } } return result; }, hasFilter: function(filter) { return filter.text in this.keywordByFilter; }, getKeywordForFilter: function(filter) { if (filter.text in this.keywordByFilter) { return this.keywordByFilter[filter.text]; } else { return null; } }, _checkEntryMatch: function(keyword, location, contentType, docDomain, thirdParty, sitekey) { var list = this.filterByKeyword[keyword]; for (var i = 0; i < list.length; i++) { var filter = list[i]; if (filter == "#this") { filter = list; } if (filter.matches(location, contentType, docDomain, thirdParty, sitekey)) { return filter; } } return null; }, matchesAny: function(location, contentType, docDomain, thirdParty, sitekey) { var candidates = location.toLowerCase().match(/[a-z0-9%]{3,}/g); if (candidates === null) { candidates = []; } candidates.push(""); for (var i = 0, l = candidates.length; i < l; i++) { var substr = candidates[i]; if (substr in this.filterByKeyword) { var result = this._checkEntryMatch(substr, location, contentType, docDomain, thirdParty, sitekey); if (result) { return result; } } } return null; } }; function CombinedMatcher() { this.blacklist = new Matcher(); this.whitelist = new Matcher(); this.resultCache = createDict(); } CombinedMatcher.maxCacheEntries = 1000; CombinedMatcher.prototype = { blacklist: null, whitelist: null, resultCache: null, cacheEntries: 0, clear: function() { this.blacklist.clear(); this.whitelist.clear(); this.resultCache = createDict(); this.cacheEntries = 0; }, add: function(filter) { if (filter instanceof WhitelistFilter) { this.whitelist.add(filter); } else { this.blacklist.add(filter); } if (this.cacheEntries > 0) { this.resultCache = createDict(); this.cacheEntries = 0; } }, remove: function(filter) { if (filter instanceof WhitelistFilter) { this.whitelist.remove(filter); } else { this.blacklist.remove(filter); } if (this.cacheEntries > 0) { this.resultCache = createDict(); this.cacheEntries = 0; } }, findKeyword: function(filter) { if (filter instanceof WhitelistFilter) { return this.whitelist.findKeyword(filter); } else { return this.blacklist.findKeyword(filter); } }, hasFilter: function(filter) { if (filter instanceof WhitelistFilter) { return this.whitelist.hasFilter(filter); } else { return this.blacklist.hasFilter(filter); } }, getKeywordForFilter: function(filter) { if (filter instanceof WhitelistFilter) { return this.whitelist.getKeywordForFilter(filter); } else { return this.blacklist.getKeywordForFilter(filter); } }, isSlowFilter: function(filter) { var matcher = filter instanceof WhitelistFilter ? this.whitelist : this.blacklist; if (matcher.hasFilter(filter)) { return !matcher.getKeywordForFilter(filter); } else { return !matcher.findKeyword(filter); } }, matchesAnyInternal: function(location, contentType, docDomain, thirdParty, sitekey) { var candidates = location.toLowerCase().match(/[a-z0-9%]{3,}/g); if (candidates === null) { candidates = []; } candidates.push(""); var blacklistHit = null; for (var i = 0, l = candidates.length; i < l; i++) { var substr = candidates[i]; if (substr in this.whitelist.filterByKeyword) { var result = this.whitelist._checkEntryMatch(substr, location, contentType, docDomain, thirdParty, sitekey); if (result) { return result; } } if (substr in this.blacklist.filterByKeyword && blacklistHit === null) { blacklistHit = this.blacklist._checkEntryMatch(substr, location, contentType, docDomain, thirdParty, sitekey); } } return blacklistHit; }, matchesAny: function(location, docDomain) { var key = location + " " + docDomain + " "; if (key in this.resultCache) { return this.resultCache[key]; } var result = this.matchesAnyInternal(location, 0, docDomain, null, null); if (this.cacheEntries >= CombinedMatcher.maxCacheEntries) { this.resultCache = createDict(); this.cacheEntries = 0; } this.resultCache[key] = result; this.cacheEntries++; return result; } }; var defaultMatcher = new CombinedMatcher(); var direct = 'DIRECT;'; for (var i = 0; i < rules.length; i++) { defaultMatcher.add(Filter.fromText(rules[i])); } function FindProxyForURL(url, host) { if (defaultMatcher.matchesAny(url, host) instanceof BlockingFilter) { return proxy; } return direct; } ================================================ FILE: Trojan/File/backchn.acl ================================================ #********************************************************************** # 04.18 # 2020年4月18日 20:28:30 # 转载需要注明版权和来源 # # 屏蔽常用网站、视频、手机rom广告&运营商劫持广告&数据跟踪&开屏广告 # # 参照lhie1的surge规则改编,致谢!! https://github.com/lhie1/Surge # 参照scomper的surge规则改编,致谢!! https://gist.github.com/scomper/915b04a974f9e11952babfd0bbb241a8/revisions # # 更新记录 https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/more/New.md # 下载地址 https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/banAD.acl # # 参数解释: # [proxy_all] 默认代理-本规则使用 # [bypass_all] 默认直连 # [outbound_block_list] 禁止访问列表 在28行 # [bypass_list] 直连列表 在6816多行 # [proxy_list] 代理列表 在1210多行 # [remote_dns] 远程 DNS 解析 -不加使用本地 DNS # #********************************************************************** [proxy_all] # 默认代理 #********************************************************************** [outbound_block_list] # 禁止访问列表 # 广告关键词 (^|\.)\w*admarvel\w*\.\w*$ (^|\.)\w*admaster\w*\.\w*$ (^|\.)\w*adsage\w*\.\w*$ (^|\.)\w*adsensor\w*\.\w*$ (^|\.)\w*adservice\w*\.\w*$ (^|\.)\w*adsh\w*\.\w*$ (^|\.)\w*adsmogo\w*\.\w*$ (^|\.)\w*adsrvmedia\w*\.\w*$ (^|\.)\w*adsserving\w*\.\w*$ (^|\.)\w*adsystem\w*\.\w*$ (^|\.)\w*adwords\w*\.\w*$ (^|\.)\w*analysis\w*\.\w*$ (^|\.)\w*analytics\w*\.\w*$ (^|\.)\w*applovin\w*\.\w*$ (^|\.)\w*appsflyer\w*\.\w*$ (^|\.)\w*domob\w*\.\w*$ (^|\.)\w*duomeng\w*\.\w*$ (^|\.)\w*dwtrack\w*\.\w*$ (^|\.)\w*guanggao\w*\.\w*$ (^|\.)\w*lianmeng\w*\.\w*$ (^|\.)\w*monitor\w*\.\w*$ (^|\.)\w*omgmta\w*\.\w*$ (^|\.)\w*omniture\w*\.\w*$ (^|\.)\w*openx\w*\.\w*$ (^|\.)\w*partnerad\w*\.\w*$ (^|\.)\w*pingfore\w*\.\w*$ (^|\.)\w*socdm\w*\.\w*$ (^|\.)\w*supersonicads\w*\.\w*$ (^|\.)\w*tracking\w*\.\w*$ (^|\.)\w*uedas\w*\.\w*$ (^|\.)\w*umeng\w*\.\w*$ (^|\.)\w*usage\w*\.\w*$ (^|\.)\w*wlmonitor\w*\.\w*$ (^|\.)\w*zjtoolbar\w*\.\w*$ (^|\.)ad\d{0,3}\..*$ (^|\.)ads\d{0,3}\..*$ (^|\.)tracking\..*$ # 163 (^|\.)(adgeo|bobo|fa|g|g1|gb|nex)(\.corp|)\.163\.com$ (^|\.)(analytics|img1|img2|mimg|push)\.126\.net$ (^|\.)(a|c|clkservice|conv|dsp|dsp-impr2|gorgon|rlogs|union|ydpushserver)\.youdao\.com$ (^|\.)(nc004x|nc045x|qt002x|tb060x|tb104x)\.corp\.youdao\.com$ (^|\.)(haitaoad|iadmatvideo)\.nosdn\.127\.net$ (^|\.)ir\.mail\.126\.com$ (^|\.)ir\.mail\.yeah\.net$ (^|\.)oimagea2\.ydstatic\.com$ (^|\.)pagechoice\.net$ (^|\.)prom\.gome\.com\.cn$ (^|\.)qchannel0\d\.cn$ (^|\.)static\.flv\.uuzuonline\.com$ (^|\.)wanproxy\.127\.net$ # 17173 (^|\.)cvda\.17173\.com$ (^|\.)imgapp\.yeyou\.com$ (^|\.)log1\.17173\.com$ (^|\.)s\.17173cdn\.com$ (^|\.)ue\.yeyoucdn\.com$ (^|\.)vda\.17173\.com$ # 178 (^|\.)analytics\.wanmei\.com$ (^|\.)gg\.stargame\.com$ # 2345 (^|\.)(dl|download|houtai|jifen|minipage|wan|jifendownload|zhushou)\.2345\.cn$ # 360 (^|\.)3600\.com$ (^|\.)gamebox\.360\.cn$ (^|\.)jiagu\.360\.cn$ (^|\.)kuaikan\.netmon\.360safe\.com$ (^|\.)leak\.360\.cn$ (^|\.)lianmeng\.360\.cn$ (^|\.)pub\.se\.360\.cn$ (^|\.)s\.so\.360\.cn$ (^|\.)shouji\.360\.cn$ (^|\.)soft\.data\.weather\.360\.cn$ (^|\.)stat\.360safe\.com$ (^|\.)stat\.m\.360\.cn$ (^|\.)update\.360safe\.com$ (^|\.)wan\.360\.cn$ # 58 (^|\.)(58|imp|stat)\.xgo\.com\.cn$ (^|\.)(brandshow|jing|track|tracklog)\.58\.com$ # Alibaba (^|\.)(adashx4yt|adash-c|ai|re|rj|simaba)\.m\.taobao\.com$ (^|\.)(afp|atanx|atanx2|gma|gtms\d\d)\.alicdn\.com$ (^|\.)(fav|m|redirect|srd|tns)\.simba\.taobao\.com$ (^|\.)(sdkinit|simaba|tyh)\.taobao\.com$ (^|\.)acjs\.aliyun\.com$ (^|\.)(adash-c|adashbc|adashxgc)\.ut\.taobao\.com$ (^|\.)alipaylog\.com$ (^|\.)amdc\.alipay\.com$ (^|\.)click\.mz\.simba\.taobao\.com$ (^|\.)g\.click\.taobao\.com$ (^|\.)g\.tbcdn\.cn$ (^|\.)hydra\.alibaba\.com$ (^|\.)pindao\.huoban\.taobao\.com$ (^|\.)show\.re\.taobao\.com$ (^|\.)strip\.taobaocdn\.com$ (^|\.)userimg\.qunar\.com$ (^|\.)yiliao\.hupan\.com$ # Adobe (^|\.)3dns-2\.adobe\.com$ (^|\.)3dns-3\.adobe\.com$ (^|\.)activate\.adobe\.com$ (^|\.)activate\.wip3\.adobe\.com$ (^|\.)activate-sea\.adobe\.com$ (^|\.)activate-sjc0\.adobe\.com$ (^|\.)adobe-dns\.adobe\.com$ (^|\.)adobe-dns-2\.adobe\.com$ (^|\.)adobe-dns-3\.adobe\.com$ (^|\.)ereg\.adobe\.com$ (^|\.)ereg\.wip3\.adobe\.com$ (^|\.)geo2\.adobe\.com$ (^|\.)hl2rcv\.adobe\.com$ (^|\.)hlrcv\.stage\.adobe\.com$ (^|\.)lm\.licenses\.adobe\.com$ (^|\.)lmlicenses\.wip4\.adobe\.com$ (^|\.)na1r\.services\.adobe\.com$ (^|\.)na2m-pr\.licenses\.adobe\.com$ (^|\.)practivate\.adobe\.com$ (^|\.)wip3\.adobe\.com$ (^|\.)wwis-dubc1-vip60\.adobe\.com$ # Apple (^|\.)adserver\.unityads\.unity3d\.com$ # AutoHome (^|\.)(33|adproxy|al|alert|applogapi|c|cmx|dspmnt|pcd|pvx|rd|rdx|stats)\.autohome\.com\.cn$ (^|\.)adm\d\.autoimg\.cn$ (^|\.)push\.app\.autohome\.com\.cn$ # Baidu (^|\.)(a|adm|adscdn|afd|als|anquan|appc|as|c|cb|cbjs|cbjslog|cjhq|cpro|cpro2|cpu|cpu-admin|crs|drmcmm|e|eclick|eiv|entry)\.baidu\.(com|cn)$ (^|\.)(hc|hm|hmma|hpd|imageplus|ma|mobads-logs|mobads|mtj|nsclick)\.baidu\.(com|cn)$ (^|\.)(pups|rj|rp|spcode|tk|tongji|tuisong|ucstat|ufosdk|union|utility|utk|videopush|wangmeng|wm|znsv)\.baidu\.(com|cn)$ (^|\.)ad\.duapps\.com$ (^|\.)ad\.player\.baidu\.com$ (^|\.)adx\.xiaodutv\.com$ (^|\.)ae\.bdstatic\.com$ (^|\.)antivirus\.baidu\.com$ (^|\.)api\.cpu\.baidu\.com$ (^|\.)api\.mobula\.sdk\.duapps\.com$ (^|\.)ashifen\.com$ (^|\.)baichuan\.baidu\.com$ (^|\.)baidu9635\.com$ (^|\.)baidustatic\.com$ (^|\.)baidutv\.baidu\.com$ (^|\.)baikebcs\.bdimg\.com$ (^|\.)banlv\.baidu\.com$ (^|\.)bar\.baidu\.com$ (^|\.)bdimg\.share\.baidu\.com$ (^|\.)bdplus\.baidu\.com$ (^|\.)btlaunch\.baidu\.com$ (^|\.)cleaner\.baidu\.com$ (^|\.)click\.bes\.baidu\.com$ (^|\.)click\.hm\.baidu\.com$ (^|\.)click\.qianqian\.com$ (^|\.)cm\.baidu\.com$ (^|\.)cm\.pos\.baidu\.com$ (^|\.)cpro\.baidustatic\.com$ (^|\.)cpro\.tieba\.baidu\.com$ (^|\.)cpro\.zhidao\.baidu\.com$ (^|\.)datax\.baidu\.com$ (^|\.)dl-vip\.bav\.baidu\.com$ (^|\.)dl-vip\.pcfaster\.baidu\.co\.th$ (^|\.)dl1sw\.baidu\.com$ (^|\.)dl2\.bav\.baidu\.com$ (^|\.)dl\.client\.baidu\.com$ (^|\.)dl\.ops\.baidu\.com$ (^|\.)dlsw\.baidu\.com$ (^|\.)dlsw\.br\.baidu\.com$ (^|\.)download\.bav\.baidu\.com$ (^|\.)download\.sd\.baidu\.com$ (^|\.)drmcmm\.baidu\.com$ (^|\.)dup\.baidustatic\.com$ (^|\.)dxp\.baidu\.com$ (^|\.)dzl\.baidu\.com$ (^|\.)ecma\.bdimg\.com$ (^|\.)ecmb\.bdimg\.com$ (^|\.)ecmc\.bdimg\.com$ (^|\.)em\.baidu\.com$ (^|\.)ers\.baidu\.com$ (^|\.)f10\.baidu\.com$ (^|\.)fc-\.cdn\.bcebos\.com$ (^|\.)fc-feed\.cdn\.bcebos\.com$ (^|\.)fclick\.baidu\.com$ (^|\.)feed\.baidu\.com$ (^|\.)fexclick\.baidu\.com$ (^|\.)g\.baidu\.com$ (^|\.)gimg\.baidu\.com$ (^|\.)guanjia\.baidu\.com$ (^|\.)idm-su\.baidu\.com$ (^|\.)iebar\.baidu\.com$ (^|\.)ikcode\.baidu\.com$ (^|\.)img01\.taotaosou\.cn$ (^|\.)img\.taotaosou\.cn$ (^|\.)itsdata\.map\.baidu\.com$ (^|\.)j\.br\.baidu\.com$ (^|\.)kstj\.baidu\.com$ (^|\.)log\.music\.baidu\.com$ (^|\.)log\.nuomi\.com$ (^|\.)m1\.baidu\.com$ (^|\.)mg09\.zhaopin\.com$ (^|\.)mipcache\.bdstatic\.com$ (^|\.)mpro\.baidu\.com$ (^|\.)msite\.baidu\.com$ (^|\.)neirong\.baidu\.com$ (^|\.)nsclickvideo\.baidu\.com$ (^|\.)openrcv\.baidu\.com$ (^|\.)pc\.videoclick\.baidu\.com$ (^|\.)pos\.baidu\.com$ (^|\.)pups\.bdimg\.com$ (^|\.)push\.music\.baidu\.com$ (^|\.)push\.zhanzhang\.baidu\.com$ (^|\.)qchannel0\d\.cn$ (^|\.)qianclick\.baidu\.com$ (^|\.)release\.baidu\.com$ (^|\.)res\.limei\.com$ (^|\.)res\.mi\.baidu\.com$ (^|\.)rigel\.baidustatic\.com$ (^|\.)river\.zhidao\.baidu\.com$ (^|\.)rplog\.baidu\.com$ (^|\.)s\.baidu\.com$ (^|\.)s\.cpro\.baidu\.com$ (^|\.)sa\.tuisong\.baidu\.com$ (^|\.)sclick\.baidu\.com$ (^|\.)sestat\.baidu\.com$ (^|\.)shadu\.baidu\.com$ (^|\.)share\.baidu\.com$ (^|\.)shifen\.com$ (^|\.)snippet\.pos\.baidu\.com$ (^|\.)sobar\.baidu\.com$ (^|\.)sobartop\.baidu\.com$ (^|\.)stat\.v\.baidu\.com$ (^|\.)su\.bdimg\.com$ (^|\.)su\.bdstatic\.com$ (^|\.)t10\.baidu\.com$ (^|\.)t11\.baidu\.com$ (^|\.)t12\.baidu\.com$ (^|\.)tkweb\.baidu\.com$ (^|\.)tob-cms\.bj\.bcebos\.com$ (^|\.)toolbar\.baidu\.com$ (^|\.)tracker\.baidu\.com$ (^|\.)tuijian\.baidu\.com$ (^|\.)uat1\.bfsspadserver\.8le8le\.com$ (^|\.)ubmcmm\.baidustatic\.com$ (^|\.)ulic\.baidu\.com$ (^|\.)ulog\.imap\.baidu\.com$ (^|\.)unionimage\.baidu\.com$ (^|\.)vv84\.bj\.bcebos\.com$ (^|\.)w\.gdown\.baidu\.com$ (^|\.)w\.x\.baidu\.com$ (^|\.)weishi\.baidu\.com$ (^|\.)wenku-cms\.bj\.bcebos\.com$ (^|\.)wisepush\.video\.baidu\.com$ (^|\.)wn\.pos\.baidu\.com$ (^|\.)zz\.bdstatic\.com$ (^|\.)zzy1\.quyaoya\.com$ # Book-app 起点 掌阅 书旗 宜搜 (^|\.)(adm|assets|tjlog)(\.ps|)\.easou\.com$ (^|\.)(ad|push|sys)\.zhangyue\.com$ (^|\.)(cj|game|tongji)\.qidian\.com$ (^|\.)aishowbger\.com$ (^|\.)api\.itaoxiaoshuo\.com$ (^|\.)bbcoe\.cn$ (^|\.)dkeyn\.com$ (^|\.)drdwy\.com$ (^|\.)e701\.net$ (^|\.)e\.aa985\.cn$ (^|\.)e\.v02u9\.cn$ (^|\.)ehxyz\.com$ (^|\.)ethod\.gzgmjcx\.com$ (^|\.)focuscat\.com$ (^|\.)hdswgc\.com$ (^|\.)jyd\.fjzdmy\.com$ (^|\.)m\.ourlj\.com$ (^|\.)m\.txtxr\.com$ (^|\.)m\.vsxet\.com$ (^|\.)miam4\.cn$ (^|\.)o\.if\.qidian\.com$ (^|\.)p\.vq6nsu\.cn$ (^|\.)picture\.duokan\.com$ (^|\.)pyerc\.com$ (^|\.)s1\.cmfu\.com$ (^|\.)sc\.shayugg\.com$ (^|\.)sdk\.cferw\.com$ (^|\.)sezvc\.com$ (^|\.)ut2\.shuqistat\.com$ (^|\.)xgcsr\.com$ (^|\.)xjq\.jxmqkj\.com$ (^|\.)xpe\.cxaerp\.com$ (^|\.)xtzxmy\.com$ (^|\.)xyrkl\.com$ (^|\.)zhuanfakong\.com$ # ByteDance 头条抖音 (^|\.)(ad|sm|dsp|nativeapp|partner|track)\.toutiao\.com$ (^|\.)ic\.snssdk\.com$ (^|\.)log\.snssdk\.com$ (^|\.)xlog\.snssdk\.com$ # Dangdang (^|\.)(a|click|schprompt|t)\.dangdang\.com$ # Duomi (^|\.)ad\.duomi\.com$ (^|\.)boxshows\.com$ # Facebook (^|\.)staticxx\.facebook\.com$ # Fang (^|\.)click1n\.soufun\.com$ (^|\.)clickm\.fang\.com$ (^|\.)clickn\.fang\.com$ (^|\.)countpvn\.light\.fang\.com$ (^|\.)countubn\.light\.soufun\.com$ (^|\.)mshow\.fang\.com$ (^|\.)tongji\.home\.soufun\.com$ # Google (^|\.)admob\.com$ (^|\.)ads\.gmodules\.com$ (^|\.)ads\.google\.com$ (^|\.)adservice\.google\.com$ (^|\.)afd\.l\.google\.com$ (^|\.)badad\.googleplex\.com$ (^|\.)csi\.gstatic\.com$ (^|\.)doubleclick(\.com|\.net)$ (^|\.)google-analytics\.com$ (^|\.)googleadservices\.com$ (^|\.)googleadsserving\.cn$ (^|\.)googlecommerce\.com$ (^|\.)googlesyndication\.com$ (^|\.)mobileads\.google\.com$ (^|\.)pagead-tpc\.l\.google\.com$ (^|\.)pagead\.google\.com$ (^|\.)pagead\.l\.google\.com$ (^|\.)service\.urchin\.com$ # JD (^|\.)(c-nfa|img-x|jrclick|jzt|policy)\.jd\.com$ (^|\.)ads\.union\.jd\.com$ (^|\.)cps\.360buy\.com$ (^|\.)stat\.m\.jd\.com$ # Kugou (^|\.)(bssdl|bssdlbig|d|downmobile|fanxing|gad|game|gamebox|gg|install|install2|kgmobilestat|minidcsc|mo|mobilelog|mvads|p|rtmonitor|sdn|tj)\.kugou\.com$ (^|\.)(msg|push|update)\.mobile\.kugou\.com$ (^|\.)ads\.service\.kugou\.com$ (^|\.)gcapi\.sy\.kugou\.com$ (^|\.)kuaikaiapp\.com$ (^|\.)log\.stat\.kugou\.com$ (^|\.)log\.web\.kugou\.com$ # Kuwo (^|\.)(deliver|g|log|kwmsg|mobilead|msclick2|msphoneclick|updatepage|wa|webstat)\.kuwo\.cn$ (^|\.)apk\.shouji\.koowo\.com$ (^|\.)g\.koowo\.com$ # Meizu flyme 魅族 (^|\.)(aider-res|api-flow|api-game|api-push|cal|ebook|game-res|infocenter|openapi-news|reader|tongji-res1|tongji|uxip)\.meizu\.com$ (^|\.)(bro|t-e|t-flow)\.flyme\.cn$ (^|\.)(ebook|game|push|reader|upush)\.res\.meizu\.com$ (^|\.)aries\.mzres\.com$ (^|\.)umid\.orion\.meizu\.com$ # Meitu (^|\.)(corp|gg|message|tuiguang)\.meitu\.com$ (^|\.)(dc|mdc|rabbit)\.meitustat\.com$ (^|\.)a\.koudai\.com$ (^|\.)adui\.tg\.meitu\.com$ (^|\.)meitubeauty\.meitudata\.com$ (^|\.)rabbit\.tg\.meitu\.com$ (^|\.)xiuxiu\.android\.dl\.meitu\.com$ (^|\.)xiuxiu\.mobile\.meitudata\.com$ # Miui 小米 (^|\.)(ad|ad1|shenghuo|xmpush)\.xiaomi\.com$ (^|\.)(a|wtradv)\.market\.xiaomi\.com$ (^|\.)(bss|de|dvb|jellyfish|stat)\.pandora\.xiaomi\.com$ (^|\.)(d|migc|migcreport|mis)\.g\.mi\.com$ (^|\.)(notice|ppurifier)\.game\.xiaomi\.com$ (^|\.)(r|security)\.browser\.miui\.com$ (^|\.)tracking\.miui\.com$ (^|\.)union\.mi\.com$ # Moji (^|\.)ad\.api\.moji\.com$ (^|\.)app\.moji001\.com$ (^|\.)cdn\.moji\.com$ (^|\.)cdn\.moji002\.com$ (^|\.)cdn2\.moji002\.com$ (^|\.)fds\.api\.moji\.com$ (^|\.)log\.moji\.com$ (^|\.)stat\.moji\.com$ (^|\.)ugc\.moji001\.com$ # Qingting\.fm (^|\.)(ad|admgr|logger)\.qingting\.fm$ (^|\.)dload\.qd\.qingting\.fm$ (^|\.)s\.qd\.qingting\.fm$ (^|\.)s\.qd\.qingtingfm\.com$ # QQ (^|\.)\w*omgmta\w*\.\w*$ (^|\.)(act|adsfile|bugly|buluo|gdt|monitor|pingma|pingtcss|report|tajs|tcss|uu)\.qq\.com$ (^|\.)ad\.qun\.qq\.com$ # RenRen (^|\.)jebe\.renren\.com$ (^|\.)ebp\.renren\.com$ (^|\.)jebe\.xnimg\.cn$ # Sina (^|\.)(adimg|pay|sax|sdkapp|sdkclick|trends|u1\.img|wbapp|wbclick|wbpctips)\.mobile\.sina\.cn$ (^|\.)(ad|ad\d|adbox|adm|d\d|dcads|dmp|leju|sax|sax\d|slog)\.sina\.com(\.cn|)$ (^|\.)(alitui|biz|game|wax)\.weibo\.com(\.cn|)$ (^|\.)cre\.dp\.sina\.cn$ (^|\.)gw5\.push\.mcp\.weibo\.cn$ (^|\.)log\.mix\.sina\.com\.cn$ (^|\.)mobileads\.dx\.cn$ (^|\.)newspush\.sinajs\.cn$ (^|\.)sdkapp\.uve\.weibo\.com$ (^|\.)tui\.weibo\.com$ (^|\.)wbapp\.uve\.weibo\.com$ (^|\.)zymo\.mps\.weibo\.com$ # Sougou (^|\.)(123|adsence|brand|cpc|epro|fair|files2|goto|golden1|inte|iwan|lu|pb|pd|pv|theta|wan|wangmeng)\.sogou\.com$ (^|\.)(123|galaxy|lu)\.sogoucdn\.com$ (^|\.)amfi\.gou\.sogou\.com$ # Teleplus (^|\.)applovin\.com$ (^|\.)guangzhuiyuan\.com$ # Twitter (^|\.)(ads|syndication|syndication-o|analytics|scribe|p)\.twitter\.com$ (^|\.)ads-twitter\.com$ (^|\.)tellapart\.com$ (^|\.)urls\.api\.twitter\.com$ # UC ali (^|\.)(adslot|applog|track)\.uc\.cn$ (^|\.)(cms|puds|uc|ucsec1|ucsec)\.ucweb\.com$ (^|\.)(log|patriot)\.cs\.pp\.cn$ (^|\.)api\.mp\.uc\.cn$ (^|\.)client\.video\.ucweb\.com$ (^|\.)dispatcher\.upmc\.uc\.cn$ (^|\.)huichuan\.sm\.cn$ (^|\.)iflow\.uczzd(\.\w{2,3}){1,2}$ (^|\.)m\.uczzd\.cn$ (^|\.)server\.m\.pp\.cn$ (^|\.)u\.uc123\.com$ (^|\.)u\.ucfly\.com$ # Weifeng (^|\.)aoodoo\.feng\.com$ (^|\.)fengbuy\.com$ (^|\.)push\.feng\.com$ (^|\.)we\.tm$ # WPS Office (^|\.)(bannera|rating6|cloudservice.*)\.kingsoft-office-service\.com$ (^|\.)(docerad|gou|info|minfo|notify|pcfg|push|wpsweb-dc)\.wps\.cn$ (^|\.)ad\.docer\.wps\.cn$ (^|\.)adm\.zookingsoft\.com$ (^|\.)bole\.shangshufang\.ksosoft\.com$ (^|\.)counter\.kingsoft\.com$ (^|\.)dl\.op\.wpscdn\.cn$ (^|\.)hoplink\.ksosoft\.com$ (^|\.)ic\.ksosoft\.com$ (^|\.)img.*\.mini\.cache\.wps\.cn$ (^|\.)img\.gou\.wpscdn\.cn$ (^|\.)ios-informationplatform\.wps\.cn$ (^|\.)mo\.res\.wpscdn\.cn$ (^|\.)news\.docer\.com$ (^|\.)news\.op\.wpscdn\.cn$ (^|\.)pc\.uf\.ksosoft\.com$ (^|\.)pixiu\.shangshufang\.ksosoft\.com$ (^|\.)up\.wps\.kingsoft\.com$ # Wi-Fi key (^|\.)(c|cdsget|news-imgpb|wifiapi\d\d|wkanc)\.51y5\.net$ # Ximalaya 喜马拉雅 (^|\.)(adse|linkeye|location|xdcs-collector)\.ximalaya\.com$ # Xunlei 迅雷app&看看 (^|\.)biz5\.kankan\.com$ (^|\.)float\.kankan\.com$ (^|\.)logic\.cpm\.cm\.kankan\.com$ (^|\.)hub5btmain\.sandai\.net$ (^|\.)hub5emu\.sandai\.net$ (^|\.)upgrade\.xl9\.xunlei\.com$ # Yahoo (^|\.)(ads|adserver|adss|analytics|beap-bc|comet|geo|gemini|p3p|ybp)\.yahoo\.com$ (^|\.)(analytics|locdrop|onepush)\.query\.yahoo\.com$ (^|\.)(ard|ane|yads)\.yahoo\.co\.jp$ (^|\.)(js-apac-ss|partnerads)\.ysm\.yahoo\.com$ (^|\.)ad\.wretch\.cc$ (^|\.)clicks\.beap\.bc\.yahoo\.com$ (^|\.)doubleplay-conf-yql\.media\.yahoo\.com$ (^|\.)flurry\.com$ (^|\.)m\.yap\.yahoo\.com$ (^|\.)uservoice\.com$ (^|\.)ws\.progrss\.yahoo\.com$ # Zhihu (^|\.)(sugar|zhihu-web-analytics)\.zhihu\.com$ # Ads in Video apps********************下面都是 # 6间房 (^|\.)(shrek|simba|union)\.6\.cn$ # Baofeng 暴风影音 (^|\.)logger\.baofeng\.com$ (^|\.)xs\.houyi\.baofeng\.net$ # Douyu (^|\.)dotcounter\.douyutv\.com$ # Fenghuang 凤凰TV (^|\.)(aoodoo|push|yes1)\.feng\.com$ (^|\.)(game|stadig)\.ifeng\.com$ (^|\.)api\.newad\.ifeng\.com$ (^|\.)exp\.3g\.ifeng\.com$ (^|\.)iis3g\.deliver\.ifeng\.com$ (^|\.)mfp\.deliver\.ifeng\.com$ # Funshion 风行 (^|\.)(pub|adm|jobsfe|po|pv|stat)\.funshion\.com$ # iqiyi PPS 爱奇艺 (^|\.)ad\.m\.iqiyi\.com$ (^|\.)afp\.iqiyi\.com$ (^|\.)c\.uaa\.iqiyi\.com$ (^|\.)cloudpush\.iqiyi\.com$ (^|\.)cm\.passport\.iqiyi\.com$ (^|\.)cupid\.iqiyi\.com$ (^|\.)emoticon\.sns\.iqiyi\.com$ (^|\.)gamecenter\.iqiyi\.com$ (^|\.)ifacelog\.iqiyi\.com$ (^|\.)mbdlog\.iqiyi\.com$ (^|\.)meta\.video\.qiyi\.com$ (^|\.)msg1\.video\.qiyi\.com$ (^|\.)msg2\.video\.qiyi\.com$ (^|\.)msg\.71\.am$ (^|\.)paopao\.iqiyi\.com$ (^|\.)paopao\d\.qiyipic\.com$ (^|\.)policy\.video\.iqiyi\.com$ (^|\.)yuedu\.iqiyi\.com$ 101.227.200.0/24 101.227.200.11/32 101.227.200.28/32 101.227.97.240/32 124.192.153.42/32 # Ku6 酷6 (^|\.)gug\.ku6cdn\.com$ (^|\.)st\.vq\.ku6\.cn$ (^|\.)pq\.stat\.ku6\.com$ (^|\.)static\.ku6\.com$ # LeTV 乐视 (^|\.)(ark|dc|fz|g3|minisite|pro|stat)\.letv\.com$ (^|\.)(1|2)\.letvlive\.com$ (^|\.)(i0|i3)\.letvimg\.com$ (^|\.)game\.letvstore\.com$ (^|\.)n\.mark\.letv\.com$ (^|\.)pro\.hoye\.letv\.com$ (^|\.)static\.app\.m\.letv\.com$ # MGTV 芒果TV (^|\.)(click|da|log|p2|res)\.hunantv\.com$ (^|\.)da\.mgtv\.com$ (^|\.)log\.v2\.hunantv\.com$ # Sohu 搜狐 (^|\.)(888|lm|push)\.tv\.sohu\.com$ (^|\.)(aty|bd|click|click2|ctr|pv|pb|wl|um)\.hd\.sohu\.com$ (^|\.)(ads|adnet|aty|epro|go|golden1|hui|inte|uranus|wan|yule|pv)\.sohu\.com$ (^|\.)(epro|golden1|inte|uranus|pv)\.sogou\.com$ (^|\.)(inte|lu|theta)\.sogoucdn\.com$ # PPTV、PPLive (^|\.)(de|jp)\.as\.pptv\.com$ (^|\.)(app|as)\.aplus\.pptv\.com$ (^|\.)afp\.pplive\.com$ (^|\.)asimgs\.pplive\.cn$ (^|\.)pp2\.pptv\.com$ (^|\.)stat\.pptv\.com$ # QQ Live (^|\.)aiseet\.aa\.atianqi\.com$ (^|\.)aiseet\.atianqi\.com$ (^|\.)btrace\.video\.qq\.com$ (^|\.)c\.l\.qq\.com$ (^|\.)dp3\.qq\.com$ (^|\.)livep\.l\.qq\.com$ (^|\.)lives\.l\.qq\.com$ (^|\.)livew\.l\.qq\.com$ (^|\.)mcgi\.v\.qq\.com$ (^|\.)mdevstat\.qqlive\.qq\.com$ (^|\.)omgmta1\.qq\.com$ (^|\.)p\.l\.qq\.com$ (^|\.)rcgi\.video\.qq\.com$ (^|\.)t\.l\.qq\.com$ (^|\.)u\.l\.qq\.com$ # Youku & Tudou (^|\.)(actives|dmapp|hz|iyes|l|lstat|lvip|msg|mobilemsg|myes|passport-log|stat|tdrec|wan|ykatr|ykrec|ykrectab)\.youku\.com$ (^|\.)(adcontrol|adplay|goods|iwstat|nstat|stat|stats)\.tudou\.com$ (^|\.)(ad|gamex)\.mobile\.youku\.com$ (^|\.)(dev-push|push|sdk)\.m\.youku\.com$ (^|\.)(p|r|v)\.l\.youku\.com$ (^|\.)a-dxk\.play\.api\.3g\.youku\.com$ (^|\.)ad\.api\.3g(\.tudou|\.youku)\.com$ (^|\.)ad\.api\.mobile\.youku\.com$ (^|\.)b\.smartvideo\.youku\.com$ (^|\.)c\.yes\.youku\.com$ (^|\.)dl\.g\.youku\.com$ (^|\.)e\.stat\.ykimg\.com$ (^|\.)hudong\.pl\.youku\.com$ (^|\.)l\.ykimg\.com$ (^|\.)p-log\.ykimg\.com$ (^|\.)p\.l\.ykimg\.com$ (^|\.)s\.p\.youku\.com$ (^|\.)store\.tv\.api\.3g\.youku\.com$ (^|\.)store\.xl\.api\.3g\.youku\.com$ (^|\.)test\.ott\.youku\.com$ (^|\.)val\.api\.youku\.com$ 117.177.248.17/32 117.177.248.41/32 223.87.176.139/32 223.87.176.176/32 223.87.177.180/32 223.87.177.182/32 223.87.177.184/32 223.87.177.43/32 223.87.177.47/32 223.87.177.80/32 223.87.182.101/32 223.87.182.102/32 223.87.182.11/32 223.87.182.52/32 # Youtube (^|\.)azabu-u\.ac\.jp$ (^|\.)couchcoaster\.jp$ (^|\.)delivery\.dmkt-sp\.jp$ (^|\.)ehg-youtube\.hitbox\.com$ (^|\.)m-78\.jp$ (^|\.)nichibenren\.or\.jp$ (^|\.)nicorette\.co\.kr$ (^|\.)ssl-youtube\.2cnt\.net$ (^|\.)youtube\.112\.2o7\.net$ (^|\.)youtube\.2cnt\.net$ # Others ads in Video apps (^|\.)(acsystem|ads|afp)\.wasu\.tv$ (^|\.)ads\.cdn\.tvb\.com$ (^|\.)c\.algovid\.com$ (^|\.)cc\.xtgreat\.com$ (^|\.)d\.dsp\.imageter\.com$ (^|\.)gg\.jtertp\.com$ (^|\.)gridsum-vd\.cntv\.cn$ (^|\.)kwflvcdn\.000dn\.com$ (^|\.)logstat\.t\.sfht\.com$ (^|\.)match\.rtbidder\.net$ (^|\.)n-st\.vip\.com$ (^|\.)pop\.uusee\.com$ (^|\.)static\.bshare\.cn$ (^|\.)static\.duoshuo\.com$ (^|\.)t\.cr-nielsen\.com$ (^|\.)terren\.cntv\.cn$ # Ads in Video apps end ********************上面都是 # 常用网站广告**************** (^|\.)(168|adshownew|stat)\.it168\.com$ (^|\.)(1|2)\.win7china\.com$ (^|\.)(801|803|806|808|bdj|dol|click)\.(tianya|tianyaui)\.cn$ (^|\.)(92x|its-dori)\.tumblr\.com$ (^|\.)(adm|eq|fund|ozone|stat|vaserviece)\.10jqka\.com\.cn$ (^|\.)(ad|adadmin|ads)\.house365\.com$ (^|\.)(ad|ads|counter)\.csdn\.net$ (^|\.)(ad|analytics|click|ganjituiguang|sta|tralog)\.ganji\.com$ (^|\.)(app-monitor|client-api|grand|mobile-pubt|newton-api)\.ele\.me$ (^|\.)(bd1|bd2)\.52che\.com$ (^|\.)(click|media|pv)\.(cheshi|cheshi-img)\.com$ (^|\.)(d0|dw|pv)\.xcar\.com\.cn$ (^|\.)a1\.itc\.cn$ (^|\.)ad\.12306\.cn$ (^|\.)ad\.3\.cn$ (^|\.)ad\.95306\.cn$ (^|\.)ad\.caiyunapp\.com$ (^|\.)ad\.cctv\.com$ (^|\.)ad\.cmvideo\.cn$ (^|\.)ad\.thepaper\.cn$ (^|\.)ad\.unimhk\.com$ (^|\.)adhome\.1fangchan\.com$ (^|\.)adm\.easou\.com$ (^|\.)ads\.feedly\.com$ (^|\.)ads\.genieessp\.com$ (^|\.)ads\.linkedin\.com$ (^|\.)adv\.ccb\.com$ (^|\.)advert\.api\.thejoyrun\.com$ (^|\.)api-deal\.kechenggezi\.com$ (^|\.)api-z\.weidian\.com$ (^|\.)bam\.nr-data\.net$ (^|\.)mobileads\.msn\.com$ (^|\.)bat\.bing\.com$ (^|\.)beacon\.tingyun\.com$ (^|\.)cdn\.jiuzhilan\.com$ (^|\.)collector\.githubapp\.com$ (^|\.)de\.soquair\.com$ (^|\.)e\.nexac\.com$ (^|\.)erebor\.douban\.com$ (^|\.)exp\.17wo\.cn$ (^|\.)game\.51yund\.com$ (^|\.)hosting\.miarroba\.info$ (^|\.)iadsdk\.apple\.com$ (^|\.)image\.gentags\.com$ (^|\.)log\.outbrain\.com$ (^|\.)m\.12306media\.com$ (^|\.)n\.cosbot\.cn$ (^|\.)pdl\.gionee\.com$ (^|\.)pica-juicy\.picacomic\.com$ (^|\.)pixel\.wp\.com$ (^|\.)pub\.mop\.com$ (^|\.)push\.wandoujia\.com$ (^|\.)qdp\.qidian\.com$ (^|\.)res\.gwifi\.com\.cn$ (^|\.)ssp\.kssws\.ks-cdn\.com$ (^|\.)stats\.chinaz\.com$ (^|\.)stats\.developingperspective\.com$ (^|\.)tjlog\.easou\.com$ (^|\.)tjlog\.ps\.easou\.com$ (^|\.)track\.hujiang\.com$ (^|\.)tracker\.yhd\.com$ (^|\.)up\.qingdaonews\.com$ # 广告联盟-国内**************** (^|\.)09mk\.cn$ (^|\.)100peng\.com$ (^|\.)114la\.com$ (^|\.)123juzi\.net$ (^|\.)138lm\.com$ (^|\.)17un\.com$ (^|\.)2cnt\.net$ (^|\.)3gmimo\.com$ (^|\.)3xx\.vip$ (^|\.)51\.la$ (^|\.)51taifu\.com$ (^|\.)51yes\.com$ (^|\.)600ad\.com$ (^|\.)6dad\.com$ (^|\.)70e\.com$ (^|\.)86\.cc$ (^|\.)8le8le\.com$ (^|\.)8ox\.cn$ (^|\.)95558000\.com$ (^|\.)99click\.com$ (^|\.)99youmeng\.com$ (^|\.)a3p4\.net$ (^|\.)acs86\.com$ (^|\.)acxiom-online\.com$ (^|\.)ad-brix\.com$ (^|\.)ad-delivery\.net$ (^|\.)ad-locus\.com$ (^|\.)ad-plus\.cn$ (^|\.)ad7\.com$ (^|\.)adadapted\.com$ (^|\.)adadvisor\.net$ (^|\.)adap\.tv$ (^|\.)adbana\.com$ (^|\.)adchina\.com$ (^|\.)adcome\.cn$ (^|\.)ader\.mobi$ (^|\.)adform\.net$ (^|\.)adfuture\.cn$ (^|\.)adhouyi\.com$ (^|\.)adinfuse\.com$ (^|\.)adirects\.com$ (^|\.)adjust\.com$ (^|\.)adjust\.io$ (^|\.)adkmob\.com$ (^|\.)adlive\.cn$ (^|\.)adlocus\.com$ (^|\.)admaji\.com$ (^|\.)admin6\.com$ (^|\.)admon\.cn$ (^|\.)adnyg\.com$ (^|\.)adpolestar\.net$ (^|\.)adpro\.cn$ (^|\.)adpush\.cn$ (^|\.)adquan\.com$ (^|\.)adreal\.cn$ (^|\.)ads8\.com$ (^|\.)adsame\.com$ (^|\.)adsmogo\.com$ (^|\.)adsmogo\.org$ (^|\.)adsunflower\.com$ (^|\.)adsunion\.com$ (^|\.)adtrk\.me$ (^|\.)adups\.com$ (^|\.)aduu\.cn$ (^|\.)advertising\.com$ (^|\.)adview\.cn$ (^|\.)advmob\.cn$ (^|\.)adwetec\.com$ (^|\.)adwhirl\.com$ (^|\.)adwo\.com$ (^|\.)adxmi\.com$ (^|\.)adyun\.com$ (^|\.)adzerk\.net$ (^|\.)agrant\.cn$ (^|\.)agrantsem\.com$ (^|\.)aihaoduo\.cn$ (^|\.)ajapk\.com$ (^|\.)allyes\.cn$ (^|\.)allyes\.com$ (^|\.)amazon-adsystem\.com$ (^|\.)amplitude\.com$ (^|\.)analysys\.cn$ (^|\.)angsrvr\.com$ (^|\.)anquan\.org$ (^|\.)anysdk\.com$ (^|\.)appadhoc\.com$ (^|\.)appads\.com$ (^|\.)appboy\.com$ (^|\.)appdriver\.cn$ (^|\.)appjiagu\.com$ (^|\.)applifier\.com$ (^|\.)appsflyer\.com$ (^|\.)atdmt\.com$ (^|\.)baifendian\.com$ (^|\.)banmamedia\.com$ (^|\.)baoyatu\.cc$ (^|\.)baycode\.cn$ (^|\.)bayimob\.com$ (^|\.)behe\.com$ (^|\.)bfshan\.cn$ (^|\.)biddingos\.com$ (^|\.)biddingx\.com$ (^|\.)bjvvqu\.cn$ (^|\.)bjxiaohua\.com$ (^|\.)bloggerads\.net$ (^|\.)branch\.io$ (^|\.)bsdev\.cn$ (^|\.)bshare\.cn$ (^|\.)btyou\.com$ (^|\.)bugtags\.com$ (^|\.)buysellads\.com$ (^|\.)c0563\.com$ (^|\.)cacafly\.com$ (^|\.)casee\.cn$ (^|\.)cdnmaster\.com$ (^|\.)chance-ad\.com$ (^|\.)chanet\.com\.cn$ (^|\.)chartbeat\.com$ (^|\.)chartboost\.com$ (^|\.)chengadx\.com$ (^|\.)chmae\.com$ (^|\.)clickadu\.com$ (^|\.)clicki\.cn$ (^|\.)clicktracks\.com$ (^|\.)clickzs\.com$ (^|\.)cloudmobi\.net$ (^|\.)cmcore\.com$ (^|\.)cnxad\.com$ (^|\.)cnzz\.com$ (^|\.)cnzzlink\.com$ (^|\.)cocounion\.com$ (^|\.)coocaatv\.com$ (^|\.)cooguo\.com$ (^|\.)coolguang\.com$ (^|\.)coremetrics\.com$ (^|\.)cpmchina\.co$ (^|\.)cpx24\.com$ (^|\.)crasheye\.cn$ (^|\.)crosschannel\.com$ (^|\.)ctrmi\.com$ (^|\.)customer-security\.online$ (^|\.)daoyoudao\.com$ (^|\.)datouniao\.com$ (^|\.)ddapp\.cn$ (^|\.)dianjoy\.com$ (^|\.)dianru\.com$ (^|\.)disqusads\.com$ (^|\.)domob\.cn$ (^|\.)domob\.com\.cn$ (^|\.)domob\.org$ (^|\.)dotmore\.com\.tw$ (^|\.)doubleverify\.com$ (^|\.)doudouguo\.com$ (^|\.)doumob\.com$ (^|\.)duanat\.com$ (^|\.)duiba\.com\.cn$ (^|\.)duomeng\.cn$ (^|\.)dxpmedia\.com$ (^|\.)edigitalsurvey\.com$ (^|\.)eduancm\.com$ (^|\.)emarbox\.com$ (^|\.)epsilon\.com$ (^|\.)exosrv\.com$ (^|\.)fancyapi\.com$ (^|\.)feitian001\.com$ (^|\.)feixin2\.com$ (^|\.)flashtalking\.com$ (^|\.)fraudmetrix\.cn$ (^|\.)gentags\.net$ (^|\.)gepush\.com$ (^|\.)getui\.com$ (^|\.)glispa\.com$ (^|\.)go-mpulse$ (^|\.)go-mpulse\.net$ (^|\.)godloveme\.cn$ (^|\.)gridsum\.com$ (^|\.)gridsumdissector\.cn$ (^|\.)gridsumdissector\.com$ (^|\.)growingio\.com$ (^|\.)guohead\.com$ (^|\.)guomob\.com$ (^|\.)haoghost\.com$ (^|\.)hivecn\.cn$ (^|\.)hypers\.com$ (^|\.)icast\.cn$ (^|\.)igexin\.com$ (^|\.)il8r\.com$ (^|\.)imageter\.com$ (^|\.)immob\.cn$ (^|\.)inad\.com$ (^|\.)inmobi\.cn$ (^|\.)inmobi\.net$ (^|\.)inmobicdn\.cn$ (^|\.)inmobicdn\.net$ (^|\.)innity\.com$ (^|\.)instabug\.com$ (^|\.)intely\.cn$ (^|\.)iperceptions\.com$ (^|\.)ipinyou\.com$ (^|\.)irs01\.com$ (^|\.)irs01\.net$ (^|\.)irs09\.com$ (^|\.)istreamsche\.com$ (^|\.)jesgoo\.com$ (^|\.)jiaeasy\.net$ (^|\.)jiguang\.cn$ (^|\.)jimdo\.com$ (^|\.)jisucn\.com$ (^|\.)jmgehn\.cn$ (^|\.)jpush\.cn$ (^|\.)jusha\.com$ (^|\.)juzi\.cn$ (^|\.)juzilm\.com$ (^|\.)kejet\.com$ (^|\.)kejet\.net$ (^|\.)keydot\.net$ (^|\.)keyrun\.cn$ (^|\.)kmd365\.com$ (^|\.)krux\.net$ (^|\.)lnk0\.com$ (^|\.)lnk8\.cn$ (^|\.)localytics\.com$ (^|\.)lomark\.cn$ (^|\.)lotuseed\.com$ (^|\.)lrswl\.com$ (^|\.)lufax\.com$ (^|\.)madhouse\.cn$ (^|\.)madmini\.com$ (^|\.)madserving\.com$ (^|\.)magicwindow\.cn$ (^|\.)mathtag\.com$ (^|\.)maysunmedia\.com$ (^|\.)mbai\.cn$ (^|\.)mediaplex\.com$ (^|\.)mediav\.com$ (^|\.)megajoy\.com$ (^|\.)meiqia\.com$ (^|\.)mgogo\.com$ (^|\.)miaozhen\.com$ (^|\.)microad-cn\.com$ (^|\.)miidi\.net$ (^|\.)mijifen\.com$ (^|\.)mixpanel\.com$ (^|\.)mjmobi\.com$ (^|\.)mng-ads\.com$ (^|\.)moad\.cn$ (^|\.)moatads\.com$ (^|\.)mobaders\.com$ (^|\.)mobclix\.com$ (^|\.)mobgi\.com$ (^|\.)mobisage\.cn$ (^|\.)mobvista\.com$ (^|\.)mopub\.com$ (^|\.)moquanad\.com$ (^|\.)mpush\.cn$ (^|\.)mxpnl\.com$ (^|\.)myhug\.cn$ (^|\.)mzy2014\.com$ (^|\.)networkbench\.com$ (^|\.)newrelic\.com$ (^|\.)ninebox\.cn$ (^|\.)ntalker\.com$ (^|\.)nylalobghyhirgh\.com$ (^|\.)o2omobi\.com$ (^|\.)oadz\.com$ (^|\.)oneapm\.com$ (^|\.)onetad\.com$ (^|\.)optaim\.com$ (^|\.)optimix\.asia$ (^|\.)optimix\.cn$ (^|\.)optimizely\.com$ (^|\.)optimizelyapis\.com$ (^|\.)overture\.com$ (^|\.)p0y\.cn$ (^|\.)pagechoice\.net$ (^|\.)pingdom\.net$ (^|\.)plugrush\.com$ (^|\.)popin\.cc$ (^|\.)pro\.cn$ (^|\.)publicidad\.net$ (^|\.)publicidad\.tv$ (^|\.)pubmatic\.com$ (^|\.)pubnub\.com$ (^|\.)qcl777\.com$ (^|\.)qiyou\.com$ (^|\.)qtmojo\.com$ (^|\.)quantcount\.com$ (^|\.)qucaigg\.com$ (^|\.)qumi\.com$ (^|\.)qxxys\.com$ (^|\.)reachmax\.cn$ (^|\.)responsys\.net$ (^|\.)revsci\.net$ (^|\.)rlcdn\.com$ (^|\.)rtbasia\.com$ (^|\.)sanya1\.com$ (^|\.)scupio\.com$ (^|\.)serving-sys\.com$ (^|\.)shuiguo\.com$ (^|\.)shuzilm\.cn$ (^|\.)similarweb\.com$ (^|\.)sitemeter\.com$ (^|\.)sitescout\.com$ (^|\.)sitetag\.us$ (^|\.)smartmad\.com$ (^|\.)social-touch\.com$ (^|\.)somecoding\.com$ (^|\.)sponsorpay\.com$ (^|\.)stargame\.com$ (^|\.)stg8\.com$ (^|\.)switchadhub\.com$ (^|\.)sycbbs\.com$ (^|\.)synacast\.com$ (^|\.)sysdig\.com$ (^|\.)tagtic\.cn$ (^|\.)talkingdata\.com$ (^|\.)talkingdata\.net$ (^|\.)tansuotv\.com$ (^|\.)tanv\.com$ (^|\.)tanx\.com$ (^|\.)tapjoy\.cn$ (^|\.)th7\.cn$ (^|\.)thoughtleadr\.com$ (^|\.)tianmidian\.com$ (^|\.)tiqcdn\.com$ (^|\.)touclick\.com$ (^|\.)trafficjam\.cn$ (^|\.)trafficmp\.com$ (^|\.)tuia\.cn$ (^|\.)ueadlian\.com$ (^|\.)uerzyr\.cn$ (^|\.)ugdtimg\.com$ (^|\.)ugvip\.com$ (^|\.)ujian\.cc$ (^|\.)ukeiae\.com$ (^|\.)umeng\.co$ (^|\.)umeng\.com$ (^|\.)umtrack\.com$ (^|\.)unimhk\.com$ (^|\.)union-wifi\.com$ (^|\.)union001\.com$ (^|\.)unionsy\.com$ (^|\.)unlitui\.com$ (^|\.)uri6\.com$ (^|\.)ushaqi\.com$ (^|\.)usingde\.com$ (^|\.)uuzu\.com$ (^|\.)uyunad\.com$ (^|\.)vamaker\.com$ (^|\.)voiceads\.cn$ (^|\.)voiceads\.com$ (^|\.)vpon\.com$ (^|\.)vungle\.cn$ (^|\.)vungle\.com$ (^|\.)waps\.cn$ (^|\.)wapx\.cn$ (^|\.)webterren\.com$ (^|\.)whpxy\.com$ (^|\.)winads\.cn$ (^|\.)winasdaq\.com$ (^|\.)wiyun\.com$ (^|\.)wooboo\.com\.cn$ (^|\.)wqmobile\.com$ (^|\.)wrating\.com$ (^|\.)wumii\.cn$ (^|\.)xcy8\.com$ (^|\.)xdrig\.com$ (^|\.)xiaozhen\.com$ (^|\.)xibao100\.com$ (^|\.)xtgreat\.com$ (^|\.)xy\.com$ (^|\.)yandui\.com$ (^|\.)yigao\.com$ (^|\.)yijifen\.com$ (^|\.)yinooo\.com$ (^|\.)yiqifa\.com$ (^|\.)yiwk\.com$ (^|\.)ylunion\.com$ (^|\.)ymapp\.com$ (^|\.)ymcdn\.cn$ (^|\.)yongyuelm\.com$ (^|\.)yooli\.com$ (^|\.)youmi\.net$ (^|\.)youxiaoad\.com$ (^|\.)yoyi\.com\.cn$ (^|\.)yoyi\.tv$ (^|\.)yrxmr\.com$ (^|\.)ysjwj\.com$ (^|\.)yunjiasu\.com$ (^|\.)yunpifu\.cn$ (^|\.)zampdsp\.com$ (^|\.)zamplus\.com$ (^|\.)zcdsp\.com$ (^|\.)zhidian3g\.cn$ (^|\.)zhiziyun\.com$ (^|\.)zhjfad\.com$ (^|\.)zqzxz\.com$ (^|\.)zzsx8\.com$ # 广告联盟-国外**************** (^|\.)acuityplatform\.com$ (^|\.)ad-stir\.com$ (^|\.)ad-survey\.com$ (^|\.)ad4game\.com$ (^|\.)adcloud\.jp$ (^|\.)adcolony\.com$ (^|\.)addthis\.com$ (^|\.)adfurikun\.jp$ (^|\.)adhigh\.net$ (^|\.)adhood\.com$ (^|\.)adinall\.com$ (^|\.)adition\.com$ (^|\.)adk2x\.com$ (^|\.)admarket\.mobi$ (^|\.)admarvel\.com$ (^|\.)admedia\.com$ (^|\.)adnxs\.com$ (^|\.)adotmob\.com$ (^|\.)adperium\.com$ (^|\.)adriver\.ru$ (^|\.)adroll\.com$ (^|\.)adsco\.re$ (^|\.)adservice\.com$ (^|\.)adsrvr\.org$ (^|\.)adsymptotic\.com$ (^|\.)adtaily\.com$ (^|\.)adtech\.de$ (^|\.)adtechjp\.com$ (^|\.)adtechus\.com$ (^|\.)airpush\.com$ (^|\.)am15\.net$ (^|\.)amobee\.com$ (^|\.)appier\.net$ (^|\.)applift\.com$ (^|\.)apsalar\.com$ (^|\.)atas\.io$ (^|\.)awempire\.com$ (^|\.)axonix\.com$ (^|\.)beintoo\.com$ (^|\.)bepolite\.eu$ (^|\.)bidtheatre\.com$ (^|\.)bidvertiser\.com$ (^|\.)blismedia\.com$ (^|\.)brucelead\.com$ (^|\.)bttrack\.com$ (^|\.)casalemedia\.com$ (^|\.)channeladvisor\.com$ (^|\.)connexity\.net$ (^|\.)criteo\.com$ (^|\.)criteo\.net$ (^|\.)csbew\.com$ (^|\.)demdex\.net$ (^|\.)directrev\.com$ (^|\.)dumedia\.ru$ (^|\.)effectivemeasure\.com$ (^|\.)effectivemeasure\.net$ (^|\.)eqads\.com$ (^|\.)everesttech\.net$ (^|\.)exoclick\.com$ (^|\.)extend\.tv$ (^|\.)eyereturn\.com$ (^|\.)fastapi\.net$ (^|\.)fastclick\.com$ (^|\.)fastclick\.net$ (^|\.)flurry\.com$ (^|\.)gosquared\.com$ (^|\.)gtags\.net$ (^|\.)heyzap\.com$ (^|\.)histats\.com$ (^|\.)hitslink\.com$ (^|\.)hot-mob\.com$ (^|\.)hyperpromote\.com$ (^|\.)i-mobile\.co\.jp$ (^|\.)imrworldwide\.com$ (^|\.)inmobi\.com$ (^|\.)intentiq\.com$ (^|\.)inter1ads\.com$ (^|\.)ipredictive\.com$ (^|\.)ironsrc\.com$ (^|\.)iskyworker\.com$ (^|\.)jizzads\.com$ (^|\.)juicyads\.com$ (^|\.)kochava\.com$ (^|\.)leadbolt\.com$ (^|\.)leadbolt\.net$ (^|\.)leadboltads\.net$ (^|\.)leadboltapps\.net$ (^|\.)leadboltmobile\.net$ (^|\.)lenzmx\.com$ (^|\.)liveadvert\.com$ (^|\.)marketgid\.com$ (^|\.)marketo\.com$ (^|\.)mdotm\.com$ (^|\.)medialytics\.com$ (^|\.)medialytics\.io$ (^|\.)meetrics\.com$ (^|\.)meetrics\.net$ (^|\.)mgid\.com$ (^|\.)millennialmedia\.com$ (^|\.)mobadme\.jp$ (^|\.)mobfox\.com$ (^|\.)mobileadtrading\.com$ (^|\.)mobilityware\.com$ (^|\.)mookie1\.com$ (^|\.)msads\.net$ (^|\.)mydas\.mobi$ (^|\.)nend\.net$ (^|\.)netshelter\.net$ (^|\.)nexage\.com$ (^|\.)owneriq\.net$ (^|\.)pixels\.asia$ (^|\.)plista\.com$ (^|\.)popads\.net$ (^|\.)powerlinks\.com$ (^|\.)propellerads\.com$ (^|\.)quantserve\.com$ (^|\.)rayjump\.com$ (^|\.)revdepo\.com$ (^|\.)rubiconproject\.com$ (^|\.)sape\.ru$ (^|\.)scorecardresearch\.com$ (^|\.)segment\.com$ (^|\.)serving-sys\.com$ (^|\.)sharethis\.com$ (^|\.)smaato\.com$ (^|\.)smaato\.net$ (^|\.)smartadserver\.com$ (^|\.)smartnews-ads\.com$ (^|\.)startapp\.com$ (^|\.)startappexchange\.com$ (^|\.)statcounter\.com$ (^|\.)steelhousemedia\.com$ (^|\.)stickyadstv\.com$ (^|\.)supersonic\.com$ (^|\.)tapjoy\.com$ (^|\.)tapjoyads\.com$ (^|\.)trafficjunky\.com$ (^|\.)tribalfusion\.com$ (^|\.)turn\.com$ (^|\.)vidoomy\.com$ (^|\.)viglink\.com$ (^|\.)voicefive\.com$ (^|\.)wedolook\.com$ (^|\.)yadro\.ru$ (^|\.)yengo\.com$ (^|\.)zedo\.com$ (^|\.)zemanta\.com$ # 垃圾网站 (^|\.)11h5\.com$ (^|\.)1kxun\.mobi$ (^|\.)519397\.com$ (^|\.)626uc\.com$ (^|\.)915\.com$ (^|\.)appget\.cn$ (^|\.)appuu\.cn$ (^|\.)coinhive\.com$ (^|\.)huodonghezi\.cn$ (^|\.)wanfeng1\.com$ (^|\.)wep016\.top (^|\.)win-stock\.com\.cn$ (^|\.)zantainet\.com$ ### 运营商广告 (^|\.)\w\w(\w|)dnserror\d(\d|)\.wo\.com\.cn (^|\.)114so\.cn$ (^|\.)go\.10086\.cn$ (^|\.)navi\.gd\.chinamobile\.com$ (^|\.)hivedata\.cc$ # 运营商广告IP段 1.3.0.10/32 10.72.25.0/24 23.42.186.24/32 23.66.147.48/32 23.235.156.167/32 27.255.67.120/32 42.51.146.207/32 45.34.240.72/32 46.165.197.153/32 46.165.197.231/32 47.89.59.182/32 47.90.50.177/32 47.93.103.196/32 47.94.89.32/32 47.96.162.122/32 58.215.179.159/32 60.19.29.16/28 60.19.29.21/28 60.190.139.164/32 60.191.124.196/32 60.210.17.0/24 60.210.17.12/24 61.129.70.132/32 61.132.216.232/32 61.132.221.146/32 61.132.255.128/25 61.132.255.212/32 61.132.255.222/25 61.147.184.18/32 61.152.223.15/32 61.160.200.223/32 61.160.200.242/32 61.160.200.252/32 61.174.50.128/25 61.174.50.167/25 61.191.12.74/32 61.191.206.4/32 67.229.224.28/32 69.28.57.245/32 74.117.182.77/32 78.140.131.214/32 101.201.29.182/32 101.251.211.235/32 103.249.254.113/32 104.195.62.12/32 104.197.140.120/32 104.198.198.188/32 106.75.65.90/32 106.75.65.92/32 106.187.95.251/32 107.21.113.76/32 108.171.248.234/32 111.30.135.167/32 111.63.135.0/24 111.73.45.147/32 111.175.220.160/29 111.175.220.164/32 111.206.13.0/24 111.206.22.0/24 112.74.95.46/32 112.124.115.215/32 113.57.230.88/32 113.207.57.24/32 114.55.123.44/32 114.95.102.77/32 114.247.28.96/32 115.29.141.121/32 115.29.247.48/32 115.182.16.79/32 116.55.227.242/32 116.206.22.7/32 117.25.133.209/32 117.144.242.32/32 118.144.88.126/32 118.144.88.208/28 118.144.88.215/28 118.144.88.215/32 119.4.249.166/32 119.188.13.0/24 120.26.151.246/32 120.27.34.156/32 120.55.199.139/32 120.76.189.132/32 120.80.57.123/32 120.132.57.41/32 120.132.63.203/32 120.197.89.239/32 120.198.116.0/24 121.15.207.243/32 121.43.75.169/32 121.199.73.185/32 121.201.11.95/32 121.201.108.2/32 121.251.255.0/24 122.225.103.120/32 122.226.223.163/32 122.227.254.195/32 122.228.236.165/32 123.56.152.96/32 123.57.94.184/32 123.57.162.39/32 123.59.78.229/32 123.59.152.170/32 123.125.111.0/24 123.139.154.0/24 123.139.154.201/24 124.14.21.147/32 124.14.21.151/32 124.160.194.11/32 124.232.160.178/32 125.46.61.28/32 125.89.69.5/32 139.159.32.82/32 139.196.239.52/32 139.224.26.92/32 139.224.74.148/32 146.148.85.61/32 162.212.181.32/32 173.208.177.227/32 175.6.223.15/32 180.76.155.58/32 180.76.162.60/32 180.76.171.28/32 180.76.172.149/32 180.76.181.213/32 180.166.52.24/32 182.92.81.104/32 183.6.188.224/29 183.6.188.226/29 183.59.53.184/29 183.59.53.187/29 183.59.53.237/32 183.131.79.30/32 183.131.79.130/32 198.40.52.11/32 202.104.1.27/32 202.105.165.202/32 205.209.138.102/32 211.98.71.192/29 211.98.71.195/29 211.103.159.32/32 211.137.132.89/32 211.139.178.49/32 211.149.225.23/32 211.167.105.131/32 218.25.246.118/32 218.93.127.37/32 219.234.83.60/32 220.115.251.25/32 220.196.52.141/32 221.179.46.128/25 221.179.46.190/25 221.179.140.0/24 221.179.183.0/24 221.179.191.0/24 221.204.213.222/32 221.228.17.152/32 221.228.214.101/32 221.231.6.79/32 222.73.156.235/32 222.186.61.91/32 222.186.61.95/32 222.186.61.96/32 222.186.61.97/32 222.187.226.96/32 223.6.255.99/32 #********************************************************************** [proxy_list] # 代理列表 # MyList (^|\.)423down\.com$ (^|\.)chaipip\.com$ (^|\.)hrtsea\.com$ (^|\.)laomo\.me$ (^|\.)mpyit\.com$ # CN域名直连 (^|\.)cn$ (^|\.)edu\.cn$ (^|\.)gov\.cn$ (^|\.)net\.cn$ (^|\.)org\.cn$ (^|\.)中国$ (^|\.)公司$ (^|\.)网络$ # 中国国内常见域名关键词直连 (^|\.)\w*-cn\w*\.\w*$ (^|\.)\w*0x\w*\.\w*$ (^|\.)\w*360buy\w*\.\w*$ (^|\.)\w*alicdn\w*\.\w*$ (^|\.)\w*alimama\w*\.\w*$ (^|\.)\w*alipay\w*\.\w*$ (^|\.)\w*appzapp\w*\.\w*$ (^|\.)\w*baidupcs\w*\.\w*$ (^|\.)\w*bilibili\w*\.\w*$ (^|\.)\w*ccgslb\w*\.\w*$ (^|\.)\w*chinacache\w*\.\w*$ (^|\.)\w*duobao\w*\.\w*$ (^|\.)\w*duolingo\w*\.\w*$ (^|\.)\w*jdpay\w*\.\w*$ (^|\.)\w*moke\w*\.\w*$ (^|\.)\w*qhimg\w*\.\w*$ (^|\.)\w*vpimg\w*\.\w*$ (^|\.)\w*xiami\w*\.\w*$ (^|\.)\w*xiaomi\w*\.\w*$ # 360 (^|\.)360\.com$ (^|\.)360kuai\.com$ (^|\.)360safe\.com$ (^|\.)dhrest\.com$ (^|\.)qhres\.com$ (^|\.)qhstatic\.com$ (^|\.)qhupdate\.com$ (^|\.)so\.com$ # 4399 (^|\.)4399\.com$ (^|\.)4399pk\.com$ (^|\.)5054399\.com$ (^|\.)img4399\.com$ # 58 (^|\.)58\.com$ # Alibaba (^|\.)1688\.com$ (^|\.)aliapp\.org$ (^|\.)alibaba\.com$ (^|\.)alibabacloud\.com$ (^|\.)alibabausercontent\.com$ (^|\.)alicdn\.com$ (^|\.)aliexpress\.com$ (^|\.)aliimg\.com$ (^|\.)alikunlun\.com$ (^|\.)alipay\.com$ (^|\.)alipayobjects\.com$ (^|\.)alisoft\.com$ (^|\.)aliyun\.com$ (^|\.)aliyuncdn\.com$ (^|\.)aliyuncs\.com$ (^|\.)amap\.com$ (^|\.)autonavi\.com$ (^|\.)dingtalk\.com$ (^|\.)ele\.me$ (^|\.)hichina\.com$ (^|\.)mmstat\.com$ (^|\.)mxhichina\.com$ (^|\.)soku\.com$ (^|\.)taobao\.com$ (^|\.)taobaocdn\.com$ (^|\.)tbcache\.com$ (^|\.)tbcdn\.com$ (^|\.)tmall\.com$ (^|\.)tmall\.hk$ (^|\.)ucweb\.com$ (^|\.)xiami\.com$ (^|\.)xiami\.net$ (^|\.)ykimg\.com$ (^|\.)youku\.com$ # Apple (^|\.)aaplimg\.com$ (^|\.)akadns\.net$ (^|\.)apple-cloudkit\.com$ (^|\.)apple\.co$ (^|\.)apple\.com$ (^|\.)appstore\.com$ (^|\.)cdn-apple\.com$ (^|\.)crashlytics\.com$ (^|\.)icloud-content\.com$ (^|\.)icloud\.com$ (^|\.)me\.com$ (^|\.)mzstatic\.com$ # Baidu (^|\.)baidu\.com$ (^|\.)baidubcr\.com$ (^|\.)baidupcs\.com$ (^|\.)baidustatic\.com$ (^|\.)bcebos\.com$ (^|\.)bdimg\.com$ (^|\.)bdstatic\.com$ (^|\.)bdurl\.net$ (^|\.)hao123\.com$ (^|\.)hao123img\.com$ (^|\.)jomodns\.com$ (^|\.)yunjiasu-cdn\.net$ # Bilibili (^|\.)acg\.tv$ (^|\.)acgvideo\.com$ (^|\.)b23\.tv$ (^|\.)biliapi\.com$ (^|\.)biliapi\.net$ (^|\.)bilibili\.com$ (^|\.)bilibili\.tv$ (^|\.)biligame\.com$ (^|\.)biligame\.net$ (^|\.)hdslb\.com$ (^|\.)im9\.com$ # Blizzard (^|\.)battle\.net$ (^|\.)battlenet\.com$ (^|\.)blizzard\.com$ # ByteDance (^|\.)bytedance\.com$ (^|\.)bytedance\.net$ (^|\.)bytedns\.net$ (^|\.)byteimg\.com$ (^|\.)feiliao\.com$ (^|\.)gifshow\.com$ (^|\.)huoshan\.com$ (^|\.)iesdouyin\.com$ (^|\.)ixigua\.com$ (^|\.)kspkg\.com$ (^|\.)pstatp\.com$ (^|\.)snssdk\.com$ (^|\.)toutiao\.com$ (^|\.)toutiao13\.com$ (^|\.)toutiaocdn\.com$ (^|\.)toutiaocdn\.net$ (^|\.)toutiaocloud\.com$ (^|\.)toutiaohao\.com$ (^|\.)toutiaohao\.net$ (^|\.)toutiaoimg\.com$ (^|\.)toutiaopage\.com$ (^|\.)wukong\.com$ (^|\.)zijieimg\.com$ (^|\.)zjbyte\.com$ (^|\.)zjcdn\.com$ # CCTV (^|\.)cctv\.com$ (^|\.)cctvpic\.com$ (^|\.)livechina\.com$ # ChinaNet (^|\.)21cn\.com$ # DiDi (^|\.)didialift\.com$ (^|\.)didiglobal\.com$ (^|\.)udache\.com$ # Douyu 斗鱼 (^|\.)douyu\.com$ (^|\.)douyu\.tv$ (^|\.)douyutv\.com$ # Epic (^|\.)epicgames\.com$ (^|\.)helpshift\.com$ (^|\.)paragon\.com$ (^|\.)unrealengine\.com$ # HuaWei (^|\.)dbankcdn\.com$ (^|\.)hc-cdn\.com$ (^|\.)hicloud\.com$ (^|\.)huawei\.com$ (^|\.)huaweicloud\.com$ (^|\.)huaweishop\.net$ (^|\.)hwccpc\.com$ (^|\.)vmall\.com$ (^|\.)vmallres\.com$ # Iflytek 科大讯飞 (^|\.)iflyink\.com$ (^|\.)iflyrec\.com$ (^|\.)iflytek\.com$ # Iqiyi (^|\.)71\.am$ (^|\.)71edge\.com$ (^|\.)iqiyi\.com$ (^|\.)iqiyipic\.com$ (^|\.)ppsimg\.com$ (^|\.)qiyi\.com$ (^|\.)qiyipic\.com$ (^|\.)qy\.net$ # JD (^|\.)360buy\.com$ (^|\.)360buyimg\.com$ (^|\.)jcloudcs\.com$ (^|\.)jd\.com$ (^|\.)jd\.hk$ (^|\.)jdcloud\.com$ (^|\.)jdpay\.com$ (^|\.)paipai\.com$ # Kingsoft (^|\.)iciba\.com$ (^|\.)ksosoft\.com$ (^|\.)ksyun\.com$ # Kuaishou 快手 (^|\.)kuaishou\.com$ (^|\.)yximgs\.com$ # Meitu (^|\.)meitu\.com$ (^|\.)meitudata\.com$ (^|\.)meitustat\.com$ (^|\.)meipai\.com$ # LeTV 乐视 (^|\.)le\.com$ (^|\.)lecloud\.com$ (^|\.)letv\.com$ (^|\.)letvcloud\.com$ (^|\.)letvimg\.com$ (^|\.)letvlive\.com$ (^|\.)letvstore\.com$ # MGTV 芒果TV (^|\.)hitv\.com$ (^|\.)hunantv\.com$ (^|\.)mgtv\.com$ # MI (^|\.)duokan\.com$ (^|\.)mi-img\.com$ (^|\.)mi\.com$ (^|\.)miui\.com$ (^|\.)xiaomi\.com$ (^|\.)xiaomi\.net$ (^|\.)xiaomicp\.com$ # NetEase (^|\.)126\.com$ (^|\.)126\.net$ (^|\.)127\.net$ (^|\.)163\.com$ (^|\.)163yun\.com$ (^|\.)lofter\.com$ (^|\.)netease\.com$ (^|\.)ydstatic\.com$ (^|\.)youdao\.com$ # PPTV、PPLive (^|\.)pplive\.com$ (^|\.)pptv\.com$ # PDD 拼多多 (^|\.)pinduoduo\.com$ (^|\.)yangkeduo\.com$ # Sina (^|\.)leju\.com$ (^|\.)miaopai\.com$ (^|\.)sina\.com$ (^|\.)sinaapp\.com$ (^|\.)sinaimg\.com$ (^|\.)weibo\.com$ (^|\.)weibocdn\.com$ (^|\.)xiaoka\.tv$ # Sohu Sogo (^|\.)go2map\.com$ (^|\.)sogo\.com$ (^|\.)sogou\.com$ (^|\.)sogoucdn\.com$ (^|\.)sohu-inc\.com$ (^|\.)sohu\.com$ (^|\.)sohucs\.com$ (^|\.)sohuno\.com$ (^|\.)sohurdc\.com$ (^|\.)v-56\.com$ # Sony (^|\.)playstation\.com$ (^|\.)playstation\.net$ (^|\.)playstationnetwork\.com$ (^|\.)sony\.com$ (^|\.)sonyentertainmentnetwork\.com$ # Spark (^|\.)amplitude\.com$ (^|\.)firebaseio\.com$ (^|\.)hockeyapp\.net$ (^|\.)smartmailcloud\.com$ # Steam (^|\.)steam-chat\.com$ (^|\.)steamgames\.com$ (^|\.)steamusercontent\.com$ (^|\.)steamcontent\.com$ (^|\.)steamstatic\.com$ (^|\.)steamcdn-a\.akamaihd\.net$ (^|\.)steamstat\.us$ # Tencent (^|\.)foxmail\.com $ (^|\.)gtimg\.com$ (^|\.)idqqimg\.com$ (^|\.)igamecj\.com$ (^|\.)myapp\.com$ (^|\.)myqcloud\.com$ (^|\.)qq\.com$ (^|\.)qqmail\.com$ (^|\.)qqurl\.com$ (^|\.)smtcdns\.com$ (^|\.)smtcdns\.net$ (^|\.)soso\.com$ (^|\.)tencent-cloud\.net$ (^|\.)tencent\.com$ (^|\.)tencentmind\.com$ (^|\.)tenpay\.com$ (^|\.)weixin\.com$ (^|\.)weiyun\.com$ # Vip 唯品会 (^|\.)appsimg\.com$ (^|\.)appvipshop\.com$ (^|\.)vip\.com$ (^|\.)vipstatic\.com$ # Ximalaya 喜马拉雅 (^|\.)ximalaya\.com$ (^|\.)xmcdn\.com$ # Xunlei 迅雷 (^|\.)00cdn\.com$ (^|\.)88cdn\.com$ (^|\.)kanimg\.com$ (^|\.)kankan\.com$ (^|\.)p2cdn\.com$ (^|\.)sandai\.net$ (^|\.)thundercdn\.com$ (^|\.)xunlei\.com$ # YYeTs 人人影视 (^|\.)jstucdn\.com$ (^|\.)zimuzu\.io$ (^|\.)zimuzu\.tv$ (^|\.)zmz001\.com$ (^|\.)zmz002\.com$ (^|\.)zmz003\.com$ (^|\.)zmz004\.com$ (^|\.)zmz2019\.com$ (^|\.)zmzapi\.com$ (^|\.)zmzapi\.net$ (^|\.)zmzfile\.com$ # Private Tracker (^|\.)\w*announce\w*\.\w*$ (^|\.)\w*torrent\w*\.\w*$ (^|\.)\w*tracker\w*\.\w*$ (^|\.)animetorrents\.me$ (^|\.)awesome-hd\.me$ (^|\.)beitai\.pt$ (^|\.)bittorrent\.com$ (^|\.)broadcasthe\.net$ (^|\.)chdbits\.co$ (^|\.)classix-unlimited\.co\.uk$ (^|\.)empornium\.me$ (^|\.)gazellegames\.net$ (^|\.)hd4fans\.org$ (^|\.)hdchina\.org$ (^|\.)hdhome\.org$ (^|\.)hdsky\.me$ (^|\.)hdtime\.org$ (^|\.)hdzone\.me$ (^|\.)icetorrent\.org$ (^|\.)jpopsuki\.eu$ (^|\.)keepfrds\.com$ (^|\.)leaguehd\.com$ (^|\.)m-team\.cc$ (^|\.)madsrevolution\.net$ (^|\.)msg\.vg$ (^|\.)nanyangpt\.com$ (^|\.)ncore\.cc$ (^|\.)open\.cd$ (^|\.)ourbits\.club$ (^|\.)passthepopcorn\.me$ (^|\.)privatehd\.to$ (^|\.)pthome\.net$ (^|\.)redacted\.ch$ (^|\.)springsunday\.net$ (^|\.)tjupt\.org$ (^|\.)totheglory\.im$ # TeamViewer (^|\.)teamviewer\.com$ 109.239.140.0/24 139.220.243.27/32 172.16.102.56/32 185.188.32.1/28 221.226.128.146/32 # Public Direct CDN 公共直连cdn #(^|\.)ajax\.aspnetcdn\.com$ #(^|\.)ajax\.cloudflare\.com$ #(^|\.)cdnjs\.cloudflare\.com$ #(^|\.)code\.jquery\.com$ (^|\.)baomitu\.com$ (^|\.)bootcss\.com$ (^|\.)jiasule\.com$ (^|\.)jsdelivr\.net$ (^|\.)staticfile\.org$ (^|\.)upaiyun\.com$ # AccelerateDirectSites (^|\.)12306\.com$ (^|\.)17173\.com$ (^|\.)17k\.com$ (^|\.)360doc\.com$ (^|\.)36kr\.com$ (^|\.)3dmgame\.com$ (^|\.)51cto\.com$ (^|\.)51job\.com$ (^|\.)51jobcdn\.com$ (^|\.)56\.com$ (^|\.)8686c\.com$ (^|\.)abchina\.com$ (^|\.)abercrombie\.com$ (^|\.)acfun\.tv$ (^|\.)air-matters\.com$ (^|\.)air-matters\.io$ (^|\.)aixifan\.com$ (^|\.)algocasts\.io$ (^|\.)babytree\.com$ (^|\.)babytreeimg\.com$ (^|\.)baicizhan\.com$ (^|\.)baidupan\.com$ (^|\.)baike\.com$ (^|\.)biqudu\.com$ (^|\.)biquge\.com$ (^|\.)bitauto\.com$ (^|\.)c-ctrip\.com$ (^|\.)camera360\.com$ (^|\.)cdnmama\.com$ (^|\.)chaoxing\.com$ (^|\.)che168\.com$ (^|\.)chinacache\.net$ (^|\.)chinaso\.com$ (^|\.)chinaz\.com$ (^|\.)chinaz\.net$ (^|\.)chuimg\.com$ (^|\.)cibntv\.net$ (^|\.)clouddn\.com$ (^|\.)cloudxns\.net$ (^|\.)cn163\.net$ (^|\.)cnbeta\.com$ (^|\.)cnbetacdn\.com$ (^|\.)cnblogs\.com$ (^|\.)cnki\.net$ (^|\.)cnmstl\.net$ (^|\.)coolapk\.com$ (^|\.)coolapkmarket\.com$ (^|\.)csdn\.net$ (^|\.)ctrip\.com$ (^|\.)dangdang\.com$ (^|\.)dfcfw\.com$ (^|\.)dianping\.com$ (^|\.)dilidili\.wang$ (^|\.)douban\.com$ (^|\.)doubanio\.com$ (^|\.)dpfile\.com$ (^|\.)duowan\.com$ (^|\.)dxycdn\.com$ (^|\.)dytt8\.net$ (^|\.)easou\.com$ (^|\.)eastday\.com$ (^|\.)eastmoney\.com$ (^|\.)ecitic\.com$ (^|\.)ewqcxz\.com$ (^|\.)fang\.com$ (^|\.)fantasy\.tv$ (^|\.)feng\.com$ (^|\.)fengkongcloud\.com$ (^|\.)fir\.im$ (^|\.)frdic\.com$ (^|\.)fresh-ideas\.cc$ (^|\.)ganji\.com$ (^|\.)ganjistatic1\.com$ (^|\.)geetest\.com$ (^|\.)geilicdn\.com$ (^|\.)godic\.net$ (^|\.)gravatar\.com$ (^|\.)guazi\.com$ (^|\.)gwdang\.com$ (^|\.)gzlzfm\.com$ (^|\.)haibian\.com$ (^|\.)haosou\.com$ (^|\.)hollisterco\.com$ (^|\.)hongxiu\.com$ (^|\.)huajiao\.com$ (^|\.)hupu\.com$ (^|\.)huxiucdn\.com$ (^|\.)huya\.com$ (^|\.)ifeng\.com$ (^|\.)ifengimg\.com$ (^|\.)images-amazon\.com$ (^|\.)infzm\.com$ (^|\.)ipip\.net$ (^|\.)it168\.com$ (^|\.)ithome\.com$ (^|\.)ixdzs\.com$ (^|\.)jianguoyun\.com$ (^|\.)jianshu\.com$ (^|\.)jianshu\.io$ (^|\.)jianshuapi\.com$ (^|\.)jiathis\.com$ (^|\.)jmstatic\.com$ (^|\.)jumei\.com$ (^|\.)kaola\.com$ (^|\.)knewone\.com$ (^|\.)koowo\.com$ (^|\.)ksyungslb\.com$ (^|\.)kuaidi100\.com$ (^|\.)kugou\.com$ (^|\.)lancdns\.com$ (^|\.)landiannews\.com$ (^|\.)lanzou\.com$ (^|\.)lemicp\.com$ (^|\.)letitfly\.me$ (^|\.)linkedin\.com$ (^|\.)lizhi\.fm$ (^|\.)lizhi\.io$ (^|\.)lizhifm\.com$ (^|\.)loli\.net$ (^|\.)luoo\.net$ (^|\.)lvmama\.com$ (^|\.)lxdns\.com$ (^|\.)maoyan\.com$ (^|\.)meilishuo\.com$ (^|\.)meituan\.com$ (^|\.)meituan\.net$ (^|\.)meizu\.com$ (^|\.)miguvideo\.com$ (^|\.)mobike\.com$ (^|\.)mogu\.com$ (^|\.)mogucdn\.com$ (^|\.)mogujie\.com$ (^|\.)moji\.com$ (^|\.)moke\.com$ (^|\.)msstatic\.com$ (^|\.)mubu\.com$ (^|\.)myunlu\.com$ (^|\.)nruan\.com$ (^|\.)nuomi\.com$ (^|\.)onedns\.net$ (^|\.)onlinedown\.net$ (^|\.)oracle\.com$ (^|\.)oschina\.net$ (^|\.)ourdvs\.com$ (^|\.)overcast\.fm$ (^|\.)paypal\.com$ (^|\.)polyv\.net$ (^|\.)qbox\.me$ (^|\.)qcloud\.com$ (^|\.)qcloudcdn\.com$ (^|\.)qdaily\.com$ (^|\.)qdmm\.com$ (^|\.)qhimg\.com$ (^|\.)qianqian\.com$ (^|\.)qidian\.com$ (^|\.)qihucdn\.com$ (^|\.)qin\.io$ (^|\.)qiniu\.com$ (^|\.)qiniucdn\.com$ (^|\.)qiniudn\.com$ (^|\.)qiushibaike\.com$ (^|\.)quanmin\.tv$ (^|\.)qunar\.com$ (^|\.)qunarzz\.com$ (^|\.)rarbg\.to$ (^|\.)repaik\.com$ (^|\.)rrmj\.tv$ (^|\.)ruguoapp\.com$ (^|\.)runoob\.com$ (^|\.)sankuai\.com$ (^|\.)segmentfault\.com$ (^|\.)sf-express\.com$ (^|\.)shumilou\.net$ (^|\.)simplecd\.me$ (^|\.)sm\.ms$ (^|\.)smzdm\.com$ (^|\.)snwx\.com$ (^|\.)soufunimg\.com$ (^|\.)ssl-images-amazon\.com$ (^|\.)sspai\.com$ (^|\.)startssl\.com$ (^|\.)suning\.com$ (^|\.)taihe\.com$ (^|\.)th-sjy\.com$ (^|\.)tianqi\.com$ (^|\.)tianqistatic\.com$ (^|\.)tianyancha\.com$ (^|\.)tianyaui\.com$ (^|\.)tietuku\.com$ (^|\.)tiexue\.net$ (^|\.)tmiaoo\.com$ (^|\.)trip\.com$ (^|\.)ttmeiju\.com$ (^|\.)tudou\.com$ (^|\.)tuniu\.com$ (^|\.)tuniucdn\.com$ (^|\.)umengcloud\.com$ (^|\.)upyun\.com$ (^|\.)uxengine\.net$ (^|\.)videocc\.net$ (^|\.)vmware\.com$ (^|\.)wandoujia\.com$ (^|\.)weather\.com$ (^|\.)weico\.cc$ (^|\.)weidian\.com$ (^|\.)weiphone\.com$ (^|\.)weiphone\.net$ (^|\.)womai\.com$ (^|\.)wscdns\.com$ (^|\.)xdrig\.com$ (^|\.)xhscdn\.com$ (^|\.)xiachufang\.com$ (^|\.)xiaohongshu\.com$ (^|\.)xiaojukeji\.com$ (^|\.)xinhuanet\.com$ (^|\.)xitek\.com$ (^|\.)xiumi\.us$ (^|\.)xslb\.net$ (^|\.)xueqiu\.com$ (^|\.)yach\.me$ (^|\.)yeepay\.com$ (^|\.)yhd\.com$ (^|\.)yihaodianimg\.com$ (^|\.)yinxiang\.com$ (^|\.)yinyuetai\.com$ (^|\.)yixia\.com$ (^|\.)ys168\.com$ (^|\.)yuewen\.com$ (^|\.)yy\.com$ (^|\.)yystatic\.com$ (^|\.)zealer\.com$ (^|\.)zhangzishi\.cc$ (^|\.)zhanqi\.tv$ (^|\.)zhaopin\.com$ (^|\.)zhihu\.com$ (^|\.)zhimg\.com$ (^|\.)zhongsou\.com$ (^|\.)zhuihd\.com$ # GFWList Whitelist (^|\.)connectivitycheck\.gstatic\.com$ (^|\.)cwb\.gov\.tw$ (^|\.)dbnsa\.gov\.tw$ (^|\.)eastcoast-nsa\.gov\.tw$ (^|\.)erv-nsa\.gov\.tw$ (^|\.)khm\.google\.com$ (^|\.)khm\.googleapis\.com$ (^|\.)khm0\.google\.com$ (^|\.)khm0\.googleapis\.com$ (^|\.)khm1\.google\.com$ (^|\.)khm1\.googleapis\.com$ (^|\.)khm2\.google\.com$ (^|\.)khm2\.googleapis\.com$ (^|\.)khm3\.google\.com$ (^|\.)khm3\.googleapis\.com$ (^|\.)khmdb\.google\.com$ (^|\.)khmdb\.googleapis\.com$ (^|\.)maolin-nsa\.gov\.tw$ (^|\.)matsu-nsa\.gov\.tw$ (^|\.)matsucc\.gov\.tw$ (^|\.)nankan\.gov\.tw$ (^|\.)necoast-nsa\.gov\.tw$ (^|\.)northguan-nsa\.gov\.tw$ (^|\.)penghu-nsa\.gov\.tw$ (^|\.)post\.gov\.tw$ (^|\.)redirector\.gvt1\.com$ (^|\.)siraya-nsa\.gov\.tw$ (^|\.)sunmoonlake\.gov\.tw$ (^|\.)tools\.google\.com$ (^|\.)trimt-nsa\.gov\.tw$ (^|\.)uluai\.com\.cn$ (^|\.)yda\.gov\.tw$ # 中国云服务商ip端 # 阿里 8.128.0.0/10 8.208.0.0/12 14.1.112.0/22 41.222.240.0/22 41.223.119.0/24 43.242.168.0/22 45.112.212.0/22 47.52.0.0/16 47.56.0.0/15 47.74.0.0/15 47.76.0.0/14 47.80.0.0/12 47.235.0.0/16 47.236.0.0/14 47.240.0.0/14 47.244.0.0/15 47.246.0.0/16 47.250.0.0/15 47.252.0.0/15 47.254.0.0/16 59.82.0.0/20 59.82.240.0/21 59.82.248.0/22 72.254.0.0/16 103.38.56.0/22 103.52.76.0/22 103.206.40.0/22 110.76.21.0/24 110.76.23.0/24 112.125.0.0/17 116.251.64.0/18 119.38.208.0/20 119.38.224.0/20 119.42.224.0/20 139.95.0.0/16 140.205.1.0/24 140.205.122.0/24 147.139.0.0/16 149.129.0.0/16 155.102.0.0/16 161.117.0.0/16 163.181.0.0/16 170.33.0.0/16 198.11.128.0/18 205.204.96.0/19 # 腾讯 qq 19.28.0.0/23 45.40.192.0/19 49.51.0.0/16 62.234.0.0/16 94.191.0.0/17 103.7.28.0/22 103.116.50.0/23 103.231.60.0/24 109.244.0.0/16 111.30.128.0/21 111.30.136.0/24 111.30.139.0/24 111.30.140.0/23 115.159.0.0/16 119.28.0.0/15 120.88.56.0/23 121.51.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 146.56.192.0/18 148.70.0.0/16 150.109.0.0/16 152.136.0.0/16 162.14.0.0/16 162.62.0.0/16 170.106.130.0/24 182.254.0.0/16 188.131.128.0/17 203.195.128.0/17 203.205.128.0/17 210.4.138.0/24 211.152.128.0/23 211.152.132.0/23 211.152.148.0/23 212.64.0.0/17 212.129.128.0/17 # 百度 Baidu 45.113.192.0/22 63.217.23.0/24 63.243.252.0/24 103.235.44.0/22 104.193.88.0/22 106.12.0.0/15 114.28.224.0/20 119.63.192.0/21 180.76.0.0/24 180.76.0.0/16 182.61.0.0/16 185.10.104.0/22 202.46.48.0/20 203.90.238.0/24 # 华为 huwei 43.254.0.0/22 45.249.212.0/22 49.4.0.0/17 78.101.192.0/19 78.101.224.0/20 81.52.161.0/24 85.97.220.0/22 103.31.200.0/22 103.69.140.0/23 103.218.216.0/22 114.115.128.0/17 114.116.0.0/16 116.63.128.0/18 116.66.184.0/22 116.71.96.0/20 116.71.128.0/21 116.71.136.0/22 116.71.141.0/24 116.71.142.0/24 116.71.243.0/24 116.71.244.0/24 116.71.251.0/24 117.78.0.0/18 119.3.0.0/16 119.8.0.0/21 119.8.32.0/19 121.36.0.0/17 121.36.128.0/18 121.37.0.0/17 122.112.128.0/17 139.9.0.0/18 139.9.64.0/19 139.9.100.0/22 139.9.104.0/21 139.9.112.0/20 139.9.128.0/18 139.9.192.0/19 139.9.224.0/20 139.9.240.0/21 139.9.248.0/22 139.159.128.0/19 139.159.160.0/22 139.159.164.0/23 139.159.168.0/21 139.159.176.0/20 139.159.192.0/18 159.138.0.0/18 159.138.64.0/21 159.138.79.0/24 159.138.80.0/20 159.138.96.0/20 159.138.112.0/21 159.138.125.0/24 159.138.128.0/18 159.138.192.0/20 159.138.223.0/24 159.138.224.0/19 168.195.92.0/22 185.176.76.0/22 197.199.0.0/18 197.210.163.0/24 197.252.1.0/24 197.252.2.0/23 197.252.4.0/22 197.252.8.0/21 200.32.52.0/24 200.32.54.0/24 200.32.57.0/24 203.135.0.0/22 203.135.4.0/23 203.135.8.0/23 203.135.11.0/24 203.135.13.0/24 203.135.20.0/24 203.135.22.0/23 203.135.24.0/23 203.135.26.0/24 203.135.29.0/24 203.135.33.0/24 203.135.38.0/23 203.135.40.0/24 203.135.43.0/24 203.135.48.0/24 203.135.50.0/24 # 网易 NetEase 42.186.0.0/16 45.127.128.0/22 45.195.24.0/24 45.253.132.0/22 45.253.240.0/22 45.254.48.0/23 59.111.0.0/20 59.111.128.0/17 103.71.120.0/21 103.71.128.0/22 103.71.196.0/22 103.71.200.0/22 103.72.12.0/22 103.72.18.0/23 103.72.24.0/22 103.72.28.0/23 103.72.38.0/23 103.72.40.0/23 103.72.44.0/22 103.72.48.0/21 103.72.128.0/21 103.74.24.0/21 103.74.48.0/22 103.126.92.0/22 103.129.252.0/22 103.131.252.0/22 103.135.240.0/22 103.196.64.0/22 106.2.32.0/19 106.2.64.0/18 114.113.196.0/22 114.113.200.0/22 115.236.112.0/20 115.238.76.0/22 123.58.160.0/19 223.252.192.0/19 # 360 101.198.128.0/18 101.198.192.0/19 101.199.196.0/22 # 国内ip地址 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.5.0/24 1.2.6.0/23 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/18 1.8.64.0/19 1.8.96.0/22 1.8.100.0/23 1.8.112.0/20 1.8.128.0/20 1.8.144.0/22 1.8.148.0/23 1.8.154.0/23 1.8.156.0/22 1.8.160.0/19 1.8.192.0/19 1.8.224.0/20 1.8.244.0/22 1.8.248.0/21 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/15 1.118.1.0/24 1.118.2.0/23 1.118.4.0/22 1.118.8.0/21 1.118.16.0/20 1.118.32.0/19 1.118.64.0/18 1.118.128.0/17 1.119.0.0/16 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 2.20.54.23/32 8.128.0.0/10 8.209.36.0/22 8.209.40.0/21 8.209.48.0/20 8.209.192.0/18 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.108.0/22 14.16.0.0/12 14.102.128.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.81.0.0/24 20.134.160.0/20 20.139.160.0/20 20.249.255.0/24 20.251.0.0/22 23.236.64.0/25 23.236.64.128/26 23.236.64.192/27 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.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/17 36.51.128.0/18 36.51.192.0/19 36.51.224.0/20 36.51.240.0/21 36.51.248.0/22 36.51.252.0/23 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 38.142.239.114/32 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.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/23 42.83.134.0/24 42.83.139.0/24 42.83.140.0/22 42.83.144.0/20 42.83.160.0/19 42.83.192.0/18 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/21 42.157.8.0/22 42.157.14.0/23 42.157.16.0/20 42.157.32.0/19 42.157.64.0/18 42.157.128.0/17 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/15 42.246.0.0/16 42.247.0.0/22 42.247.4.0/24 42.247.5.0/25 42.247.5.128/26 42.247.5.204/30 42.247.5.208/28 42.247.5.224/27 42.247.6.0/23 42.247.8.0/21 42.247.16.0/20 42.247.32.0/19 42.247.64.0/18 42.247.128.0/17 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.68.0/22 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.86.0/24 43.225.120.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/19 43.226.160.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.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/24 43.228.118.0/23 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.136.0/21 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.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.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.156.0/22 43.240.160.0/19 43.240.192.0/19 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.208.0/20 43.241.224.0/20 43.241.240.0/22 43.241.248.0/22 43.242.8.0/21 43.242.16.0/20 43.242.48.0/22 43.242.53.0/24 43.242.54.0/23 43.242.56.0/21 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.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.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.180.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.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.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/22 43.250.96.0/21 43.250.108.0/22 43.250.112.0/21 43.250.128.0/22 43.250.144.0/21 43.250.160.0/22 43.250.168.0/22 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.36.0/22 43.251.192.0/22 43.251.232.0/22 43.251.244.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/22 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.144.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/20 45.40.208.0/21 45.40.224.0/19 45.65.16.0/20 45.112.132.0/22 45.112.188.0/22 45.112.208.0/22 45.112.216.0/21 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.72.0/22 45.113.144.0/21 45.113.168.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.32.0/22 45.114.52.0/22 45.114.96.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.244.0/22 45.115.248.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.60.0/22 45.119.64.0/21 45.119.72.0/22 45.119.104.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.240.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.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.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.24.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.136.0/22 45.126.48.0/21 45.126.108.0/22 45.126.112.0/21 45.126.120.0/22 45.126.220.0/22 45.127.8.0/21 45.127.128.0/22 45.127.144.0/21 45.127.156.0/22 45.248.8.0/22 45.248.80.0/22 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.112.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.137.0/24 45.251.138.0/23 45.251.140.0/22 45.251.144.0/20 45.251.160.0/19 45.251.192.0/19 45.251.224.0/22 45.252.0.0/19 45.252.32.0/20 45.252.48.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/19 45.253.224.0/20 45.253.240.0/22 45.254.0.0/20 45.254.16.0/21 45.254.28.0/22 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/18 45.255.64.0/19 45.255.96.0/20 45.255.112.0/21 45.255.120.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.56.0/22 49.51.60.0/23 49.51.110.0/23 49.51.112.0/20 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 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/19 58.68.160.0/23 58.68.163.0/24 58.68.164.0/22 58.68.179.0/24 58.68.180.0/24 58.68.200.0/21 58.68.208.0/20 58.68.224.0/19 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/15 59.82.0.0/16 59.83.0.0/18 59.83.132.0/22 59.83.136.0/21 59.83.144.0/20 59.83.160.0/19 59.83.192.0/19 59.83.224.0/20 59.83.240.0/21 59.83.248.0/22 59.83.252.0/23 59.83.254.0/24 59.107.0.0/16 59.108.0.0/14 59.151.0.0/17 59.152.16.0/20 59.152.36.0/22 59.152.64.0/20 59.152.112.0/21 59.153.4.0/22 59.153.32.0/22 59.153.64.0/21 59.153.72.0/22 59.153.92.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.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.81.0/24 61.4.82.0/23 61.4.84.0/22 61.4.88.0/21 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 72.163.240.0/23 72.163.248.0/22 81.68.0.0/14 81.161.63.0/24 82.156.0.0/15 87.254.207.0/24 91.223.53.0/24 91.239.190.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/14 101.36.0.0/18 101.36.64.0/20 101.36.88.0/21 101.36.96.0/19 101.36.128.0/17 101.37.0.0/16 101.38.0.0/15 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/15 101.134.0.0/17 101.134.128.0/19 101.134.160.0/20 101.134.176.0/21 101.134.184.0/22 101.134.189.0/24 101.134.190.0/23 101.134.192.0/18 101.135.0.0/16 101.144.0.0/12 101.192.0.0/14 101.196.0.0/16 101.198.128.0/18 101.198.194.0/24 101.198.196.0/23 101.198.200.0/22 101.198.224.0/19 101.199.0.0/19 101.199.48.0/20 101.199.64.0/18 101.199.128.0/17 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.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.5.36.0/22 103.5.52.0/23 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.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.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.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.244.0/22 103.14.84.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/23 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.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/23 103.20.34.0/24 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.140.0/22 103.21.176.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.228.0/22 103.24.252.0/22 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.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.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.202.0/23 103.30.228.0/22 103.30.236.0/22 103.31.0.0/22 103.31.48.0/21 103.31.60.0/22 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.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.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.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.252.0/22 103.38.0.0/22 103.38.32.0/22 103.38.40.0/21 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/23 103.39.64.0/22 103.39.88.0/22 103.39.100.0/22 103.39.104.0/22 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.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.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/22 103.42.32.0/22 103.42.64.0/21 103.42.76.0/22 103.42.232.0/22 103.43.26.0/23 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.240.0/22 103.44.58.0/23 103.44.80.0/22 103.44.120.0/21 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.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.148.0/22 103.48.152.0/22 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.96.0/22 103.49.108.0/22 103.49.128.0/22 103.49.176.0/21 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.64.0/21 103.53.92.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.236.0/22 103.53.248.0/22 103.54.8.0/22 103.54.48.0/22 103.54.160.0/21 103.54.212.0/22 103.54.228.0/22 103.54.240.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.20.0/22 103.56.32.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.112.0/21 103.59.120.0/24 103.59.123.0/24 103.59.124.0/22 103.59.128.0/22 103.59.148.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/24 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.62.24.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/21 103.65.12.0/22 103.65.16.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.108.0/22 103.66.200.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/24 103.67.175.0/24 103.67.192.0/22 103.67.212.0/22 103.68.88.0/22 103.68.100.0/22 103.68.128.0/22 103.69.16.0/22 103.69.212.0/23 103.70.8.0/22 103.70.148.0/22 103.70.236.0/22 103.70.252.0/22 103.71.0.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.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/21 103.72.124.0/22 103.72.128.0/21 103.72.149.0/24 103.72.150.0/23 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.116.0/22 103.73.120.0/22 103.73.128.0/20 103.73.168.0/22 103.73.176.0/22 103.73.204.0/22 103.73.208.0/22 103.73.240.0/23 103.73.244.0/22 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.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.76.60.0/22 103.76.64.0/21 103.76.72.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.88.0/22 103.77.132.0/22 103.77.148.0/22 103.77.220.0/22 103.78.56.0/21 103.78.64.0/22 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.56.0/21 103.79.64.0/21 103.79.80.0/21 103.79.136.0/22 103.79.188.0/22 103.79.192.0/20 103.79.208.0/21 103.79.243.0/24 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.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.200.0/22 103.81.232.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.72.0/22 103.83.112.0/22 103.83.132.0/22 103.83.180.0/22 103.84.0.0/22 103.84.12.0/22 103.84.20.0/22 103.84.24.0/21 103.84.48.0/22 103.84.56.0/22 103.84.64.0/22 103.84.72.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.86.28.0/22 103.86.32.0/22 103.86.60.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.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.212.0/22 103.89.28.0/22 103.89.96.0/20 103.89.112.0/22 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.236.0/22 103.92.48.0/20 103.92.64.0/20 103.92.80.0/22 103.92.88.0/22 103.92.108.0/22 103.92.124.0/22 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.84.0/22 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.182.0/24 103.94.200.0/22 103.95.31.0/24 103.95.52.0/22 103.95.70.0/23 103.95.88.0/21 103.95.136.0/21 103.95.144.0/22 103.95.152.0/22 103.95.216.0/21 103.95.224.0/22 103.95.236.0/22 103.95.240.0/20 103.96.8.0/22 103.96.124.0/22 103.96.136.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.40.0/22 103.97.60.0/23 103.97.112.0/21 103.97.148.0/22 103.97.188.0/22 103.97.192.0/22 103.98.40.0/21 103.98.48.0/22 103.98.56.0/22 103.98.80.0/22 103.98.88.0/22 103.98.100.0/22 103.98.124.0/24 103.98.126.0/23 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/21 103.98.248.0/23 103.98.250.0/24 103.98.252.0/22 103.99.56.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/22 103.100.56.0/22 103.100.64.0/22 103.100.88.0/22 103.100.116.0/22 103.100.144.0/22 103.100.240.0/22 103.100.248.0/21 103.101.4.0/22 103.101.8.0/21 103.101.60.0/22 103.101.121.0/24 103.101.122.0/23 103.101.124.0/24 103.101.126.0/23 103.101.144.0/21 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/22 103.102.196.0/24 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.72.0/22 103.103.188.0/22 103.103.204.0/22 103.104.36.0/22 103.104.40.0/22 103.104.64.0/22 103.104.152.0/22 103.104.252.0/22 103.105.0.0/21 103.105.12.0/22 103.105.16.0/22 103.105.60.0/22 103.105.116.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.190.0/23 103.106.196.0/22 103.106.212.0/22 103.106.252.0/22 103.107.0.0/22 103.107.28.0/22 103.107.32.0/22 103.107.44.0/22 103.107.72.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.160.0/21 103.108.194.0/24 103.108.196.0/22 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.92.0/22 103.110.119.0/24 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.156.0/22 103.110.188.0/22 103.110.204.0/22 103.111.64.0/22 103.111.172.0/22 103.111.252.0/22 103.112.72.0/22 103.112.88.0/21 103.112.108.0/22 103.112.112.0/22 103.112.140.0/22 103.113.4.0/22 103.113.144.0/22 103.113.220.0/22 103.113.232.0/21 103.114.4.0/22 103.114.68.0/22 103.114.100.0/22 103.114.148.0/22 103.114.156.0/23 103.114.159.0/24 103.114.212.0/22 103.114.236.0/22 103.114.240.0/22 103.115.52.0/22 103.115.68.0/22 103.115.92.0/22 103.115.120.0/22 103.115.148.0/22 103.115.248.0/22 103.116.76.0/22 103.116.92.0/22 103.116.120.0/22 103.116.128.0/22 103.116.150.0/23 103.116.184.0/22 103.116.220.0/22 103.116.224.0/21 103.117.16.0/22 103.117.88.0/22 103.117.188.0/22 103.117.220.0/22 103.118.19.0/24 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.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/22 103.120.140.0/22 103.120.196.0/22 103.120.224.0/22 103.121.52.0/22 103.121.160.0/21 103.121.250.0/24 103.121.252.0/22 103.122.48.0/22 103.122.178.0/23 103.122.192.0/22 103.122.240.0/23 103.122.242.0/24 103.123.4.0/22 103.123.56.0/22 103.123.88.0/21 103.123.116.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.126.0.0/22 103.126.16.0/23 103.126.44.0/22 103.126.124.0/22 103.126.128.0/22 103.129.53.0/24 103.129.54.0/23 103.129.148.0/22 103.130.132.0/22 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.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.188.0/22 103.132.208.0/21 103.133.12.0/22 103.133.40.0/22 103.133.128.0/22 103.133.232.0/22 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.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.134.0/23 103.138.208.0/23 103.138.220.0/23 103.138.248.0/23 103.139.22.0/23 103.139.134.0/23 103.139.136.0/23 103.139.172.0/23 103.139.204.0/23 103.139.212.0/23 103.140.14.0/23 103.140.46.0/23 103.140.140.0/23 103.140.144.0/23 103.140.192.0/23 103.141.10.0/23 103.141.58.0/23 103.141.128.0/23 103.141.186.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.122.0/23 103.142.128.0/23 103.142.154.0/23 103.142.156.0/23 103.142.180.0/23 103.142.186.0/23 103.142.220.0/23 103.142.230.0/24 103.142.234.0/23 103.142.238.0/23 103.143.16.0/22 103.143.31.0/24 103.143.74.0/23 103.143.124.0/23 103.143.132.0/22 103.143.174.0/23 103.143.228.0/23 103.144.66.0/23 103.144.70.0/23 103.144.72.0/23 103.144.136.0/23 103.144.158.0/23 103.145.40.0/22 103.145.73.0/24 103.145.80.0/23 103.145.90.0/23 103.145.92.0/22 103.145.98.0/23 103.145.107.0/24 103.145.188.0/23 103.146.6.0/23 103.146.72.0/23 103.146.90.0/23 103.146.126.0/23 103.146.138.0/23 103.146.236.0/23 103.146.252.0/23 103.147.124.0/23 103.147.198.0/23 103.147.206.0/23 103.148.174.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/22 103.193.140.0/22 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.194.16.0/22 103.194.230.0/23 103.195.112.0/22 103.195.152.0/22 103.195.160.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.197.181.0/24 103.197.183.0/24 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.252.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.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.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.40.0/21 103.205.52.0/22 103.205.108.0/22 103.205.116.0/22 103.205.120.0/24 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.148.0/22 103.207.104.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.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.96.0/22 103.210.156.0/22 103.210.160.0/19 103.210.217.0/24 103.210.218.0/23 103.211.44.0/22 103.211.96.0/23 103.211.98.0/24 103.211.100.0/22 103.211.156.0/22 103.211.165.0/24 103.211.168.0/22 103.211.220.0/22 103.211.248.0/22 103.212.0.0/20 103.212.44.0/22 103.212.48.0/22 103.212.84.0/22 103.212.100.0/22 103.212.148.0/22 103.212.164.0/22 103.212.196.0/22 103.212.200.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.252.0/22 103.214.48.0/22 103.214.84.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.100.0/23 103.215.108.0/22 103.215.116.0/22 103.215.120.0/22 103.215.140.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.8.0/21 103.218.16.0/21 103.218.29.0/24 103.218.30.0/23 103.218.32.0/19 103.218.64.0/19 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/22 103.220.104.0/21 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/21 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.33.0/24 103.222.34.0/23 103.222.36.0/22 103.222.40.0/21 103.222.48.0/20 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/19 103.223.96.0/20 103.223.112.0/21 103.223.124.0/22 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.220.0/22 103.224.224.0/21 103.224.232.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/23 103.227.206.0/24 103.227.212.0/22 103.227.228.0/22 103.228.12.0/22 103.228.88.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.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.244.0/22 103.232.4.0/22 103.232.17.168/29 103.232.144.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.235.56.0/21 103.235.80.0/22 103.235.85.0/24 103.235.86.0/23 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.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.18.0/23 103.238.20.0/22 103.238.24.0/21 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/22 103.238.165.0/24 103.238.166.0/23 103.238.168.0/21 103.238.176.0/20 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.152.0/21 103.239.180.0/22 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.172.0/22 103.240.188.0/22 103.240.244.0/22 103.241.12.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/23 103.242.128.0/23 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/22 103.247.168.0/21 103.247.176.0/22 103.247.200.0/22 103.247.212.0/22 103.248.64.0/23 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.224.0/21 103.249.8.0/21 103.249.52.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/22 103.251.84.0/22 103.251.96.0/22 103.251.124.0/22 103.251.160.0/22 103.251.192.0/22 103.251.204.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/21 103.254.76.0/22 103.254.112.0/22 103.254.176.0/22 103.254.188.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/22 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/23 106.2.3.0/24 106.2.4.0/22 106.2.8.0/21 106.2.16.0/20 106.2.32.0/19 106.2.64.0/18 106.2.128.0/17 106.3.16.0/20 106.3.32.0/19 106.3.64.0/20 106.3.80.0/22 106.3.88.0/21 106.3.96.0/19 106.3.128.0/19 106.3.164.0/22 106.3.168.0/21 106.3.176.0/20 106.3.192.0/18 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/21 106.48.8.0/22 106.48.16.0/20 106.48.32.0/20 106.48.57.0/24 106.48.60.0/24 106.48.63.0/24 106.48.64.0/18 106.48.128.0/17 106.49.1.0/24 106.49.2.0/23 106.49.4.0/22 106.49.8.0/21 106.49.16.0/20 106.49.32.0/19 106.49.64.0/19 106.49.96.0/24 106.49.98.0/23 106.49.100.0/22 106.49.104.0/21 106.49.112.0/20 106.49.128.0/17 106.50.0.0/16 106.52.0.0/14 106.56.0.0/13 106.74.0.0/16 106.75.0.0/17 106.75.128.0/18 106.75.201.0/24 106.75.204.0/22 106.75.208.0/20 106.75.224.0/19 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/15 110.42.0.0/16 110.43.0.0/18 110.43.64.0/21 110.43.72.0/22 110.43.76.0/23 110.43.80.0/20 110.43.96.0/19 110.43.128.0/17 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/20 110.76.16.0/22 110.76.20.0/24 110.76.22.0/24 110.76.24.0/21 110.76.32.0/19 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.166.0.0/15 110.172.192.0/18 110.173.0.0/19 110.173.32.0/20 110.173.64.0/19 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.249.0/24 111.223.250.0/23 111.224.0.0/13 111.235.96.0/19 111.235.156.0/22 111.235.160.0/21 111.235.170.0/23 111.235.172.0/22 111.235.176.0/20 112.0.0.0/10 112.64.0.0/14 112.73.64.0/18 112.74.0.0/16 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/23 113.197.102.0/24 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.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/17 114.28.128.0/18 114.28.192.0/19 114.28.232.0/22 114.28.236.0/23 114.28.240.0/20 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.4.0/22 114.112.8.0/22 114.112.24.0/21 114.112.32.0/19 114.112.64.0/19 114.112.96.0/20 114.112.116.0/22 114.112.120.0/21 114.112.136.0/21 114.112.144.0/20 114.112.160.0/19 114.112.192.0/19 114.113.0.0/17 114.113.128.0/21 114.113.140.0/22 114.113.144.0/20 114.113.160.0/19 114.113.196.0/22 114.113.200.0/21 114.113.208.0/20 114.113.224.0/20 114.114.0.0/15 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/16 115.169.0.0/23 115.169.3.0/24 115.169.6.0/24 115.169.9.0/24 115.169.14.0/23 115.169.16.0/20 115.169.39.0/24 115.169.42.0/23 115.169.44.0/22 115.169.48.0/20 115.169.64.0/18 115.169.128.0/17 115.170.0.0/15 115.172.0.0/14 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/18 116.66.64.0/19 116.66.96.0/20 116.66.120.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/17 116.85.128.0/18 116.85.192.0/19 116.85.224.0/20 116.85.240.0/21 116.85.248.0/23 116.85.250.0/24 116.85.252.0/22 116.89.144.0/20 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.176.0/21 116.194.0.0/15 116.196.0.0/21 116.196.8.0/22 116.196.12.0/23 116.196.16.0/20 116.196.32.0/19 116.196.64.0/18 116.196.128.0/18 116.196.192.0/21 116.196.200.0/23 116.196.203.0/24 116.196.204.0/22 116.196.208.0/20 116.196.224.0/19 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.232.0/22 116.205.0.0/16 116.207.0.0/16 116.208.0.0/14 116.212.160.0/20 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.252.0.0/15 116.254.104.0/21 116.254.129.0/24 116.254.130.0/23 116.254.132.0/22 116.254.136.0/21 116.254.144.0/20 116.254.160.0/19 116.254.192.0/18 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/15 117.50.0.0/16 117.51.128.0/23 117.51.131.0/24 117.51.132.0/22 117.51.136.0/21 117.51.144.0/20 117.51.160.0/19 117.51.192.0/18 117.53.48.0/20 117.53.176.0/20 117.57.0.0/16 117.58.0.0/18 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/19 117.121.32.0/21 117.121.40.0/22 117.121.44.0/23 117.121.46.0/24 117.121.48.0/20 117.121.64.0/18 117.121.128.0/20 117.121.148.0/22 117.121.152.0/21 117.121.160.0/19 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/19 118.26.36.0/22 118.26.40.0/21 118.26.48.0/20 118.26.64.0/19 118.26.104.0/21 118.26.112.0/20 118.26.128.0/17 118.28.0.0/15 118.30.0.0/20 118.30.16.0/21 118.30.24.0/22 118.30.32.0/19 118.30.64.0/18 118.30.128.0/17 118.31.0.0/16 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.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.112.0.0/13 118.120.0.0/14 118.124.0.0/15 118.126.1.0/24 118.126.2.0/23 118.126.4.0/22 118.126.8.0/21 118.126.16.0/23 118.126.18.0/24 118.126.32.0/19 118.126.64.0/18 118.126.128.0/17 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.5.0/24 118.184.10.0/24 118.184.115.0/24 118.184.116.0/22 118.184.120.0/23 118.184.122.0/24 118.184.128.0/18 118.184.192.0/19 118.184.240.0/20 118.186.0.0/15 118.188.0.0/16 118.190.0.0/16 118.191.0.0/20 118.191.24.0/21 118.191.32.0/19 118.191.64.0/18 118.191.144.0/21 118.191.153.0/24 118.191.154.0/23 118.191.156.0/22 118.191.160.0/19 118.191.192.0/20 118.191.209.0/24 118.191.210.0/23 118.191.212.0/22 118.191.248.0/21 118.192.0.0/16 118.193.0.0/22 118.193.32.0/20 118.193.56.0/21 118.193.68.0/22 118.193.72.0/24 118.193.77.0/24 118.193.96.0/19 118.194.0.0/17 118.194.128.0/18 118.194.192.0/19 118.194.232.0/21 118.194.240.0/20 118.195.0.0/16 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/17 118.228.128.0/20 118.228.144.0/21 118.228.156.0/22 118.228.160.0/19 118.228.192.0/18 118.229.0.0/16 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.28.0/24 119.29.0.0/16 119.30.48.0/20 119.31.192.0/19 119.32.0.0/14 119.36.0.0/15 119.38.0.0/17 119.38.128.0/18 119.38.192.0/20 119.38.208.0/22 119.38.212.0/23 119.38.214.0/27 119.38.214.56/29 119.38.214.64/26 119.38.214.128/25 119.38.215.0/24 119.38.216.0/21 119.39.0.0/16 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/16 119.89.0.0/17 119.89.128.0/21 119.89.136.0/23 119.89.139.0/24 119.89.140.0/22 119.89.144.0/20 119.89.160.0/20 119.89.176.0/22 119.89.180.0/23 119.89.183.0/24 119.89.184.0/21 119.89.192.0/23 119.89.194.0/24 119.89.196.0/22 119.89.200.0/21 119.89.208.0/21 119.89.217.0/24 119.89.218.0/23 119.89.220.0/22 119.89.224.0/19 119.90.0.0/15 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/21 119.161.160.0/19 119.161.192.0/18 119.162.0.0/15 119.164.0.0/14 119.176.0.0/12 119.232.0.0/15 119.235.128.0/19 119.235.160.0/20 119.235.184.0/22 119.248.0.0/14 119.252.96.0/21 119.252.240.0/21 119.252.249.0/24 119.252.252.0/23 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/17 120.92.128.0/18 120.92.192.0/22 120.92.198.0/23 120.92.200.0/21 120.92.208.0/20 120.92.224.0/19 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.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.10.132.0/23 122.10.136.0/23 122.10.196.0/23 122.10.216.0/22 122.10.228.0/22 122.10.232.0/21 122.10.240.0/21 122.10.248.0/22 122.11.0.0/17 122.12.0.0/15 122.14.0.0/17 122.14.192.0/18 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/18 122.112.64.0/19 122.112.96.0/22 122.112.107.0/24 122.112.118.0/24 122.112.122.0/24 122.112.125.0/24 122.112.128.0/17 122.113.0.0/16 122.114.0.0/16 122.115.0.0/18 122.115.80.0/20 122.115.96.0/19 122.115.128.0/17 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/21 123.0.136.0/23 123.0.139.0/24 123.0.140.0/22 123.0.144.0/20 123.0.160.0/19 123.4.0.0/14 123.8.0.0/13 123.49.130.0/23 123.49.132.0/22 123.49.136.0/22 123.49.152.0/21 123.49.160.0/19 123.49.192.0/18 123.50.160.0/19 123.52.0.0/14 123.56.0.0/15 123.58.0.0/18 123.58.64.0/20 123.58.80.0/21 123.58.88.0/22 123.58.96.0/19 123.58.128.0/17 123.59.0.0/16 123.61.0.0/16 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/20 123.103.16.0/21 123.103.24.0/22 123.103.28.0/23 123.103.30.0/24 123.103.32.0/19 123.103.64.0/18 123.108.134.0/24 123.108.138.0/23 123.108.140.0/24 123.108.142.0/24 123.108.208.0/20 123.112.0.0/12 123.128.0.0/13 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.109.0/24 123.253.110.0/24 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/17 124.68.128.0/18 124.68.192.0/19 124.68.224.0/20 124.68.240.0/23 124.68.242.0/24 124.68.244.0/23 124.68.254.0/23 124.69.0.0/16 124.70.0.0/15 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/14 124.116.0.0/15 124.118.0.0/16 124.119.0.0/17 124.119.128.0/18 124.119.192.0/19 124.119.224.0/20 124.119.240.0/22 124.119.244.0/23 124.119.246.0/25 124.119.246.128/26 124.119.246.192/27 124.119.246.224/28 124.119.246.240/29 124.119.246.248/30 124.119.246.254/31 124.119.247.0/24 124.119.248.0/21 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/19 125.208.37.0/24 125.208.40.0/24 125.208.45.0/24 125.208.46.0/23 125.208.48.0/20 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.99.0/24 130.36.146.0/23 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.128.0/22 139.5.160.0/22 139.5.192.0/22 139.5.204.0/22 139.5.244.0/22 139.9.0.0/16 139.129.0.0/16 139.138.238.0/28 139.148.0.0/16 139.155.0.0/16 139.159.0.0/19 139.159.32.0/21 139.159.40.0/22 139.159.52.0/22 139.159.56.0/21 139.159.64.0/19 139.159.96.0/20 139.159.112.0/22 139.159.116.0/23 139.159.120.0/21 139.159.128.0/17 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/15 139.198.0.0/21 139.198.8.0/23 139.198.11.0/24 139.198.12.0/22 139.198.16.0/20 139.198.32.0/19 139.198.66.0/23 139.198.68.0/22 139.198.72.0/21 139.198.80.0/20 139.198.96.0/20 139.198.113.0/24 139.198.114.0/23 139.198.116.0/22 139.198.122.0/23 139.198.124.0/22 139.198.128.0/17 139.199.0.0/16 139.200.0.0/13 139.208.0.0/13 139.217.0.0/16 139.219.0.0/16 139.220.0.0/17 139.220.128.0/18 139.220.192.0/22 139.220.196.0/23 139.220.200.0/21 139.220.208.0/23 139.220.212.0/22 139.220.216.0/21 139.220.224.0/19 139.221.0.0/16 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/18 140.205.64.0/19 140.205.96.0/20 140.205.112.0/21 140.205.120.0/23 140.205.123.0/24 140.205.124.0/22 140.205.128.0/17 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.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.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.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.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/22 150.242.158.0/24 150.242.160.0/21 150.242.168.0/22 150.242.184.0/21 150.242.192.0/22 150.242.224.0/22 150.242.232.0/21 150.242.240.0/21 150.242.248.0/22 150.255.0.0/16 152.32.178.0/23 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 155.126.176.0/23 156.107.160.0/24 156.107.170.0/24 156.107.179.0/24 156.107.181.0/24 156.154.62.0/23 157.0.0.0/16 157.18.0.0/16 157.61.0.0/16 157.119.8.0/21 157.119.16.0/22 157.119.28.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/23 160.202.62.0/24 160.202.148.0/22 160.202.152.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/22 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.80.0/24 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.22.147.0/24 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.60.2.0/24 172.81.192.0/18 173.39.200.0/23 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.188.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.16.0/20 180.76.32.0/19 180.76.64.0/18 180.76.128.0/18 180.76.192.0/19 180.76.224.0/20 180.76.240.0/24 180.76.242.0/23 180.76.244.0/22 180.76.248.0/22 180.76.252.0/23 180.76.255.0/24 180.77.0.0/16 180.78.0.0/15 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.150.160.0/21 180.150.176.0/20 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.233.0/24 180.210.236.0/22 180.212.0.0/15 180.222.224.0/19 180.223.0.0/19 180.223.32.0/20 180.223.48.0/21 180.223.57.0/24 180.223.58.0/23 180.223.60.0/22 180.223.80.0/20 180.223.96.0/19 180.223.128.0/17 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 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/22 182.50.8.0/21 182.50.112.0/20 182.51.0.0/16 182.54.0.0/17 182.61.0.0/18 182.61.128.0/19 182.61.192.0/18 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/17 182.254.128.0/18 182.254.192.0/19 182.254.224.0/20 182.254.240.0/21 182.254.248.0/23 182.254.251.0/24 182.254.252.0/22 183.0.0.0/10 183.64.0.0/13 183.78.160.0/21 183.78.180.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.184.0.0/13 183.192.0.0/10 185.109.236.0/24 185.216.118.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.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.232.97.0/24 193.9.22.0/24 193.17.120.0/22 193.20.64.0/22 193.112.0.0/16 193.200.196.0/24 193.200.222.160/28 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.244.144.0/24 202.0.100.0/23 202.0.122.0/23 202.1.105.0/24 202.1.106.0/24 202.3.128.0/23 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.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/21 202.10.74.0/23 202.10.76.0/22 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.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.34.0/24 202.52.143.0/24 202.53.140.0/24 202.53.143.0/24 202.53.202.0/24 202.57.212.0/22 202.57.216.0/22 202.57.240.0/20 202.58.0.0/24 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.67.0.0/22 202.69.4.0/23 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.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.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.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.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.59.0/24 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.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.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.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/22 203.15.238.0/23 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.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.140.0/22 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.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.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.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.12.0/23 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.50.0/23 203.56.52.0/22 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.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/22 203.77.180.0/22 203.78.48.0/20 203.78.156.0/22 203.79.0.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.140.0/22 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.12.0/22 203.83.56.0/21 203.83.224.0/20 203.86.0.0/18 203.86.64.0/19 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.100.0/22 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/22 203.99.30.0/23 203.99.80.0/20 203.100.32.0/20 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/19 203.107.32.0/20 203.107.52.0/22 203.107.56.0/21 203.107.69.0/24 203.107.70.0/23 203.107.72.0/21 203.107.80.0/20 203.107.96.0/19 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/23 203.119.32.0/24 203.119.34.0/23 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.130.32.0/20 203.132.32.0/19 203.134.240.0/22 203.134.246.0/23 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.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.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/24 203.174.96.0/20 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.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.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.29.0/24 203.191.31.0/24 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.195.64.0/19 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.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.217.164.0/22 203.223.0.0/20 203.223.16.0/24 203.223.22.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/23 210.2.2.0/24 210.2.5.0/24 210.2.6.0/23 210.2.8.0/21 210.2.24.0/21 210.5.0.0/19 210.5.56.0/24 210.5.60.0/24 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.128.0/21 210.16.136.0/22 210.16.156.0/22 210.16.160.0/19 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/18 210.52.64.0/23 210.52.66.0/24 210.52.68.0/22 210.52.72.0/21 210.52.80.0/20 210.52.96.0/21 210.52.104.0/22 210.52.108.0/24 210.52.110.0/23 210.52.112.0/20 210.52.128.0/17 210.53.0.0/16 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/14 211.100.0.0/17 211.100.128.0/19 211.100.160.0/20 211.100.184.0/21 211.100.192.0/18 211.101.0.0/16 211.102.0.0/15 211.136.0.0/13 211.144.0.0/13 211.152.0.0/17 211.152.134.0/23 211.152.138.0/23 211.152.140.0/22 211.152.150.0/23 211.152.157.0/24 211.152.158.0/23 211.152.160.0/19 211.152.192.0/18 211.153.0.0/16 211.154.0.0/19 211.154.32.0/20 211.154.48.0/21 211.154.64.0/18 211.154.128.0/17 211.155.0.0/18 211.155.67.0/24 211.155.68.0/24 211.155.72.0/21 211.155.80.0/20 211.155.97.0/24 211.155.98.0/23 211.155.100.0/22 211.155.104.0/21 211.155.113.0/24 211.155.117.0/24 211.155.118.0/23 211.155.120.0/21 211.155.128.0/17 211.156.0.0/18 211.156.64.0/19 211.156.96.0/21 211.156.104.0/22 211.156.108.0/23 211.156.112.0/20 211.156.128.0/17 211.157.0.0/16 211.158.0.0/15 211.160.0.0/13 212.64.0.0/17 212.129.128.0/17 218.0.0.0/12 218.16.0.0/13 218.24.0.0/14 218.28.0.0/15 218.30.0.0/19 218.30.64.0/18 218.30.128.0/18 218.30.192.0/19 218.30.224.0/20 218.30.240.0/21 218.30.248.0/22 218.30.252.0/25 218.30.252.128/26 218.30.252.194/31 218.30.252.196/30 218.30.252.200/29 218.30.252.208/28 218.30.252.224/27 218.30.253.0/24 218.30.254.0/23 218.31.0.0/16 218.56.0.0/13 218.64.0.0/11 218.96.0.0/15 218.98.0.0/18 218.98.96.0/21 218.98.104.0/22 218.98.108.0/23 218.98.110.0/24 218.98.112.0/20 218.98.128.0/19 218.98.192.0/18 218.99.0.0/16 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.192.0.0/12 218.240.0.0/14 218.244.0.0/15 218.246.0.0/17 218.246.129.0/24 218.246.131.0/24 218.246.132.0/23 218.246.134.0/24 218.246.139.0/24 218.246.144.0/20 218.246.160.0/19 218.246.192.0/18 218.247.0.0/18 218.247.96.0/19 218.247.128.0/17 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/13 219.232.0.0/15 219.234.0.0/21 219.234.9.0/24 219.234.10.0/23 219.234.12.0/22 219.234.32.0/19 219.234.64.0/18 219.234.128.0/17 219.235.0.0/16 219.236.0.0/14 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/16 220.155.0.0/21 220.155.9.0/24 220.155.10.0/23 220.155.12.0/22 220.155.16.0/21 220.155.24.0/22 220.155.28.0/23 220.155.31.0/24 220.155.32.0/19 220.155.64.0/18 220.155.128.0/17 220.158.241.0/24 220.158.243.0/24 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/24 220.242.12.0/23 220.242.14.0/24 220.242.17.0/24 220.242.18.0/23 220.242.20.0/24 220.242.32.0/20 220.242.48.0/23 220.242.53.0/24 220.242.55.0/24 220.242.56.0/22 220.242.60.0/23 220.242.62.0/24 220.242.64.0/19 220.242.96.0/20 220.242.112.0/21 220.242.120.0/22 220.242.124.0/23 220.242.126.0/24 220.242.173.0/24 220.242.197.0/24 220.242.205.0/24 220.242.207.0/24 220.242.215.0/24 220.242.216.0/21 220.242.224.0/19 220.243.0.0/17 220.243.128.0/18 220.243.204.0/24 220.243.214.0/24 220.243.217.0/24 220.243.218.0/24 220.243.238.0/24 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/19 221.176.32.0/20 221.176.48.0/21 221.176.56.0/24 221.176.58.0/23 221.176.60.0/22 221.176.64.0/18 221.176.128.0/17 221.177.0.0/16 221.178.0.0/15 221.180.0.0/14 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/19 222.126.160.0/21 222.126.168.0/22 222.126.172.0/23 222.126.174.40/29 222.126.174.76/30 222.126.174.88/29 222.126.174.144/28 222.126.178.0/23 222.126.180.0/22 222.126.184.0/21 222.126.192.0/21 222.126.200.104/29 222.126.206.0/23 222.126.208.0/22 222.126.212.0/26 222.126.212.64/27 222.126.212.96/28 222.126.212.112/29 222.126.212.128/25 222.126.213.0/24 222.126.214.0/23 222.126.216.0/21 222.126.224.0/19 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.4.0/22 223.201.8.0/21 223.201.16.0/20 223.201.32.0/19 223.201.64.0/18 223.201.128.0/17 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/19 223.252.192.0/18 223.254.0.0/16 223.255.0.0/17 223.255.236.0/22 223.255.252.0/23 #********************************************************************** [bypass_list] # 直连列表 # MyList (^|\.)bit\.no\.com$ (^|\.)btlibrary\.me$ (^|\.)cccat\.io$ (^|\.)cloudcone\.com$ (^|\.)gameloft\.com$ (^|\.)inoreader\.com$ (^|\.)ip138\.com$ (^|\.)ping\.pe$ (^|\.)reddit\.com$ (^|\.)teddysun\.com$ (^|\.)textnow\.com$ (^|\.)tumbex\.com$ (^|\.)twdvd\.com$ (^|\.)unsplash\.com$ (^|\.)xn--i2ru8q2qg\.com$ (^|\.)yunpanjingling\.com$ (^|\.)ec2-54-210-142-85\.computer-1\.amazonaws\.com$ (^|\.)ec2-54-174-24-124\.computer-1\.amazonaws\.com$ (^|\.)ec2-54-174-178-70\.computer-1\.amazonaws\.com$ (^|\.)ec2-54-175-2-194\.computer-1\.amazonaws\.com$ (^|\.)ec2-54-210-54-246\.computer-1\.amazonaws\.com$ # 本地/局域网地址 ^(.*\.)?local$ ^(.*\.)?localhost$ ^(.*\.)?ip6-localhost$ ^(.*\.)?ip6-loopback$ ::ffff:0:0:0:0/1 ::ffff:128:0:0:0/1 10.0.0.0/8 100.64.0.0/10 127.0.0.0/8 172.16.0.0/12 192.168.0.0/16 # Router managed 路由器管理域名 (^|\.)hiwifi\.com$ (^|\.)leike\.cc$ (^|\.)miwifi\.com$ (^|\.)my\.router$ (^|\.)p\.to$ (^|\.)peiluyou\.com$ (^|\.)phicomm\.me$ (^|\.)routerlogin\.com$ (^|\.)tendawifi\.com$ (^|\.)zte\.home$ (^|\.)router\.asus\.com$ #GFWList IP start 85.17.73.31 174.142.105.153 199.59.148.20 38.103.165.50 50.7.31.230 67.220.91.15 67.220.91.18 67.220.91.23 69.65.19.160 72.52.81.22 14.102.250.18 14.102.250.19 #GFWList IP end 61.230.0.128 95.211.214.34 94.100.18.172 116.48.111.236 94.100.22.212 83.149.70.38 46.166.148.135 168.70.106.171 118.34.169.15 42.98.107.223 39.119.179.177 119.77.178.211 112.119.29.49 45.76.49.238 45.32.39.1 14.198.143.94 112.119.90.171 116.48.111.236 112.168.224.141 218.161.37.206 14.8.71.128 114.199.145.219 1.238.223.154 203.222.24.93 59.126.95.195 42.98.107.223 140.112.53.243 124.168.108.15 36.225.167.32 36.234.188.130 114.199.145.219 220.132.16.173 # 国外域名关键字 (^|\.)\w*1e100\w*\.\w*$ (^|\.)\w*abema\w*\.\w*$ (^|\.)\w*appledaily\w*\.\w*$ (^|\.)\w*avtb\w*\.\w*$ (^|\.)\w*beetalk\w*\.\w*$ (^|\.)\w*blogspot\w*\.\w*$ (^|\.)\w*dropbox\w*\.\w*$ (^|\.)\w*facebook\w*\.\w*$ (^|\.)\w*fbcdn\w*\.\w*$ (^|\.)\w*github\w*\.\w*$ (^|\.)\w*gmail\w*\.\w*$ (^|\.)\w*google\w*\.\w*$ (^|\.)\w*instagram\w*\.\w*$ (^|\.)\w*porn\w*\.\w*$ (^|\.)\w*sci-hub\w*\.\w*$ (^|\.)\w*spotify\w*\.\w*$ (^|\.)\w*telegram\w*\.\w*$ (^|\.)\w*twitter\w*\.\w*$ (^|\.)\w*whatsapp\w*\.\w*$ (^|\.)\w*youtube\w*\.\w*$ #GFWList (^|\.)030buy\.com$ (^|\.)0rz\.tw$ (^|\.)1000giri\.net$ (^|\.)100ke\.org$ (^|\.)10conditionsoflove\.com$ (^|\.)10musume\.com$ (^|\.)10\.tt$ (^|\.)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$ (^|\.)1-apple\.com\.tw$ (^|\.)1bao\.org$ (^|\.)1dumb\.com$ (^|\.)1e100\.net$ (^|\.)1eew\.com$ (^|\.)1mobile\.com$ (^|\.)1mobile\.tw$ (^|\.)1pondo\.tv$ (^|\.)2000fun\.com$ (^|\.)2008xianzhang\.info$ (^|\.)2017\.hk$ (^|\.)21andy\.com$ (^|\.)21join\.com$ (^|\.)21pron\.com$ (^|\.)21sextury\.com$ (^|\.)228\.net\.tw$ (^|\.)233abc\.com$ (^|\.)24hrs\.ca$ (^|\.)24smile\.org$ (^|\.)25u\.com$ (^|\.)2-hand\.info$ (^|\.)2lipstube\.com$ (^|\.)2shared\.com$ (^|\.)2waky\.com$ (^|\.)30boxes\.com$ (^|\.)315lz\.com$ (^|\.)32red\.com$ (^|\.)36rain\.com$ (^|\.)3a5a\.com$ (^|\.)3-a\.net$ (^|\.)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$ (^|\.)4sqi\.net$ (^|\.)51\.ca$ (^|\.)51jav\.org$ (^|\.)51luoben\.com$ (^|\.)5278\.cc$ (^|\.)5299\.tv$ (^|\.)56cun04\.jigsy\.com$ (^|\.)5aimiku\.com$ (^|\.)5i01\.com$ (^|\.)5isotoi5\.org$ (^|\.)5maodang\.com$ (^|\.)63i\.com$ (^|\.)64museum\.org$ (^|\.)64tianwang\.com$ (^|\.)64wiki\.com$ (^|\.)666kb\.com$ (^|\.)66\.ca$ (^|\.)6park\.com$ (^|\.)6parker\.com$ (^|\.)6parknews\.com$ (^|\.)7capture\.com$ (^|\.)7cow\.com$ (^|\.)85cc\.net$ (^|\.)85cc\.us$ (^|\.)85st\.com$ (^|\.)881903\.com$ (^|\.)888\.com$ (^|\.)888poker\.com$ (^|\.)89\.64\.charter\.constitutionalism\.solutions$ (^|\.)89-64\.org$ (^|\.)8-d\.com$ (^|\.)8news\.com\.tw$ (^|\.)8z1\.net$ (^|\.)9001700\.com$ (^|\.)908taiwan\.org$ (^|\.)91porn\.com$ (^|\.)91vps\.club$ (^|\.)92ccav\.com$ (^|\.)991\.com$ (^|\.)99btgc01\.com$ (^|\.)99cn\.info$ (^|\.)9bis\.com$ (^|\.)9bis\.net$ (^|\.)9gag\.com$ (^|\.)a248\.e\.akamai\.net$ (^|\.)a5\.com\.ru$ (^|\.)aamacau\.com$ (^|\.)abc\.com$ (^|\.)abchinese\.com$ (^|\.)abclite\.net$ (^|\.)abc\.net\.au$ (^|\.)abc\.pp\.ru$ (^|\.)abc\.xyz$ (^|\.)abebooks\.com$ (^|\.)abematv\.akamaized\.net$ (^|\.)abitno\.linpie\.com$ (^|\.)ablwang\.com$ (^|\.)aboluowang\.com$ (^|\.)aboutgfw\.com$ (^|\.)about\.google$ (^|\.)abs\.edu$ (^|\.)accim\.org$ (^|\.)aceros-de-hispania\.com$ (^|\.)acevpn\.com$ (^|\.)acg18\.me$ (^|\.)acgkj\.com$ (^|\.)ac\.jiruan\.net$ (^|\.)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$ (^|\.)adsense\.com$ (^|\.)ads-twitter\.com$ (^|\.)adult\.friendfinder\.com$ (^|\.)adultfriendfinder\.com$ (^|\.)adultkeep\.net$ (^|\.)adult-sex-games\.com$ (^|\.)advanscene\.com$ (^|\.)advertfan\.com$ (^|\.)ae\.hao123\.com$ (^|\.)aenhancers\.com$ (^|\.)ae\.org$ (^|\.)aex\.com$ (^|\.)afantibbs\.com$ (^|\.)af\.mil$ (^|\.)agnesb\.fr$ (^|\.)agoogleaday\.com$ (^|\.)agro\.hk$ (^|\.)ai\.binwang\.me$ (^|\.)ai\.google$ (^|\.)ai-kan\.net$ (^|\.)aiph\.net$ (^|\.)airasia\.com$ (^|\.)airconsole\.com$ (^|\.)airvpn\.org$ (^|\.)aisex\.com$ (^|\.)aiss\.anws\.gov\.tw$ (^|\.)ait\.org\.tw$ (^|\.)aiweiweiblog\.com$ (^|\.)aiweiwei\.com$ (^|\.)ai-wen\.net$ (^|\.)akademiye\.org$ (^|\.)akamaihd\.net$ (^|\.)akiba-online\.com$ (^|\.)akiba-web\.com$ (^|\.)akow\.org$ (^|\.)alabout\.com$ (^|\.)alanhou\.com$ (^|\.)alarab\.qa$ (^|\.)alasbarricadas\.org$ (^|\.)alexlur\.org$ (^|\.)alforattv\.net$ (^|\.)alhayat\.com$ (^|\.)alicejapan\.co\.jp$ (^|\.)aliengu\.com$ (^|\.)al-islam\.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$ (^|\.)al-qimmah\.net$ (^|\.)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\.com$ (^|\.)androidify\.com$ (^|\.)androidplus\.co$ (^|\.)androidtv\.com$ (^|\.)android-x86\.org$ (^|\.)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$ (^|\.)a-normal-day\.com$ (^|\.)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\.ai$ (^|\.)apiary\.io$ (^|\.)apidocs\.linksalpha\.com$ (^|\.)api\.dropboxapi\.com$ (^|\.)apigee\.com$ (^|\.)api\.linksalpha\.com$ (^|\.)api\.proxlet\.com$ (^|\.)api\.pureapk\.com$ (^|\.)api\.recaptcha\.net$ (^|\.)api-secure\.recaptcha\.net$ (^|\.)api-verify\.recaptcha\.net$ (^|\.)apk-dl\.com$ (^|\.)apkdler\.com$ (^|\.)apkmirror\.com$ (^|\.)apkmonk\.com$ (^|\.)apkplz\.com$ (^|\.)apkpure\.com$ (^|\.)aplusvpn\.com$ (^|\.)app\.box\.com$ (^|\.)appdownloader\.net$ (^|\.)app\.heywire\.com$ (^|\.)appledaily\.com$ (^|\.)appledaily\.com\.hk$ (^|\.)appledaily\.com\.tw$ (^|\.)appshopper\.com$ (^|\.)app\.smartmailcloud\.com$ (^|\.)appsocks\.net$ (^|\.)appspot\.com$ (^|\.)appsto\.re$ (^|\.)app\.tutanota\.com$ (^|\.)aptoide\.com$ (^|\.)archive\.fo$ (^|\.)archive\.is$ (^|\.)archive\.li$ (^|\.)archive\.org$ (^|\.)archives\.gov$ (^|\.)archives\.gov\.tw$ (^|\.)archive\.today$ (^|\.)arctosia\.com$ (^|\.)areca-backup\.org$ (^|\.)arena\.taipei$ (^|\.)arethusa\.su$ (^|\.)ar\.hao123\.com$ (^|\.)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$ (^|\.)atchinese\.com$ (^|\.)atc\.org\.au$ (^|\.)atdmt\.com$ (^|\.)atgfw\.org$ (^|\.)athenaeizou\.com$ (^|\.)atlanta168\.com$ (^|\.)atlaspost\.com$ (^|\.)atnext\.com$ (^|\.)authorizeddns\.net$ (^|\.)authorizeddns\.org$ (^|\.)authorizeddns\.us$ (^|\.)autodraw\.com$ (^|\.)avaaz\.org$ (^|\.)avbody\.tv$ (^|\.)avcity\.tv$ (^|\.)av\.com$ (^|\.)avcool\.com$ (^|\.)avdb\.in$ (^|\.)avdb\.tv$ (^|\.)av-e-body\.com$ (^|\.)avfantasy\.com$ (^|\.)avg\.com$ (^|\.)avgle\.com$ (^|\.)avidemux\.org$ (^|\.)avmoo\.com$ (^|\.)avmoo\.net$ (^|\.)avmoo\.pw$ (^|\.)avmo\.pw$ (^|\.)av\.movie$ (^|\.)av\.nightlife141\.com$ (^|\.)avoision\.com$ (^|\.)avyahoo\.com$ (^|\.)axureformac\.com$ (^|\.)azerbaycan\.tv$ (^|\.)azerimix\.com$ (^|\.)azubu\.tv$ (^|\.)azurewebsites\.net$ (^|\.)b0ne\.com$ (^|\.)babynet\.com\.hk$ (^|\.)backchina\.com$ (^|\.)backpackers\.com\.tw$ (^|\.)backtotiananmen\.com$ (^|\.)badiucao\.com$ (^|\.)badjojo\.com$ (^|\.)badoo\.com$ (^|\.)bahamut\.com\.tw$ (^|\.)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$ (^|\.)bbcchinese\.com$ (^|\.)bbc\.com$ (^|\.)bbc\.co\.uk$ (^|\.)bb-chat\.tv$ (^|\.)bbchat\.tv$ (^|\.)bbci\.co\.uk$ (^|\.)bbc\.in$ (^|\.)bbg\.gov$ (^|\.)bbkz\.com$ (^|\.)bbnradio\.org$ (^|\.)bbs\.brockbbs\.com$ (^|\.)bbs\.cantonese\.asia$ (^|\.)bbsdigest\.com$ (^|\.)bbs\.ecstart\.com$ (^|\.)bbsfeed\.com$ (^|\.)bbs\.hanminzu\.org$ (^|\.)bbs\.hasi\.wang$ (^|\.)bbs\.huasing\.org$ (^|\.)bbs\.junglobal\.net$ (^|\.)bbs\.kimy\.com\.tw$ (^|\.)bbsland\.com$ (^|\.)bbs\.mikocon\.com$ (^|\.)bbsmo\.com$ (^|\.)bbs\.morbell\.com$ (^|\.)bbs\.mychat\.to$ (^|\.)bbs\.netbig\.com$ (^|\.)bbsone\.com$ (^|\.)bbs\.ozchinese\.com$ (^|\.)bbs\.qmzdd\.com$ (^|\.)bbs\.sina\.com$ (^|\.)bbs\.skykiwi\.com$ (^|\.)bbs\.sou-tong\.org$ (^|\.)bbs\.tuitui\.info$ (^|\.)bbs-tw\.com$ (^|\.)bbtoystore\.com$ (^|\.)bb\.ttv\.com\.tw$ (^|\.)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$ (^|\.)bestvpnanalysis\.com$ (^|\.)bestvpn\.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$ (^|\.)bigfools\.com$ (^|\.)bigjapanesesex\.com$ (^|\.)bigmoney\.biz$ (^|\.)bignews\.org$ (^|\.)big\.one$ (^|\.)bigsound\.org$ (^|\.)biliworld\.com$ (^|\.)billypan\.com$ (^|\.)binance\.com$ (^|\.)binux\.me$ (^|\.)bipic\.net$ (^|\.)bird\.so$ (^|\.)bitc\.bme\.emory\.edu$ (^|\.)bitcointalk\.org$ (^|\.)bitcoinworld\.com$ (^|\.)bit\.do$ (^|\.)bitfinex\.com$ (^|\.)bithumb\.com$ (^|\.)bitinka\.com\.ar$ (^|\.)bit\.ly$ (^|\.)bitmex\.com$ (^|\.)bitshare\.com$ (^|\.)bitsnoop\.com$ (^|\.)bitvise\.com$ (^|\.)bit-z\.com$ (^|\.)bizhat\.com$ (^|\.)bjnewlife\.org$ (^|\.)bjs\.org$ (^|\.)bjzc\.org$ (^|\.)blacklogic\.com$ (^|\.)blackvpn\.com$ (^|\.)bl-doujinsouko\.com$ (^|\.)blewpass\.com$ (^|\.)blinkx\.com$ (^|\.)blinw\.com$ (^|\.)blip\.tv$ (^|\.)blockcn\.com$ (^|\.)blockless\.com$ (^|\.)blogblog\.com$ (^|\.)blog\.calibre-ebook\.com$ (^|\.)blogcatalog\.com$ (^|\.)blogcity\.me$ (^|\.)blog\.cnyes\.com$ (^|\.)blog\.daum\.net$ (^|\.)blog\.de$ (^|\.)blogdns\.org$ (^|\.)blog\.exblog\.co\.jp$ (^|\.)blog\.excite\.co\.jp$ (^|\.)blog\.expofutures\.com$ (^|\.)blog\.fizzik\.com$ (^|\.)blog\.foolsmountain\.com$ (^|\.)blog\.fuckgfw233\.org$ (^|\.)blogger\.com$ (^|\.)blog\.google$ (^|\.)blog\.goo\.ne\.jp$ (^|\.)blogimg\.jp$ (^|\.)blog\.inoreader\.com$ (^|\.)blog\.istef\.info$ (^|\.)blog\.jackjia\.com$ (^|\.)blog\.jp$ (^|\.)blog\.kangye\.org$ (^|\.)blog\.lester850\.info$ (^|\.)bloglines\.com$ (^|\.)bloglovin\.com$ (^|\.)blog\.martinoei\.com$ (^|\.)blog\.pathtosharepoint\.com$ (^|\.)blog\.pentalogic\.net$ (^|\.)blog\.qooza\.hk$ (^|\.)blog\.ranxiang\.com$ (^|\.)blogs\.icerocket\.com$ (^|\.)blog\.sina\.com\.tw$ (^|\.)blogs\.libraryinformationtechnology\.com$ (^|\.)blog\.sogoo\.org$ (^|\.)blog\.soylent\.com$ (^|\.)blogspot\.ae$ (^|\.)blogspot\.al$ (^|\.)blogspot\.am$ (^|\.)blogspot\.ba$ (^|\.)blogspot\.be$ (^|\.)blogspot\.bg$ (^|\.)blogspot\.ca$ (^|\.)blogspot\.cat$ (^|\.)blogspot\.ch$ (^|\.)blogspot\.cl$ (^|\.)blogspot\.com$ (^|\.)blogspot\.com\.ar$ (^|\.)blogspot\.com\.au$ (^|\.)blogspot\.com\.br$ (^|\.)blogspot\.com\.by$ (^|\.)blogspot\.com\.co$ (^|\.)blogspot\.com\.cy$ (^|\.)blogspot\.com\.ee$ (^|\.)blogspot\.com\.eg$ (^|\.)blogspot\.com\.es$ (^|\.)blogspot\.com\.mt$ (^|\.)blogspot\.com\.ng$ (^|\.)blogspot\.com\.tr$ (^|\.)blogspot\.com\.uy$ (^|\.)blogspot\.co\.uk$ (^|\.)blogspot\.cz$ (^|\.)blogspot\.de$ (^|\.)blogspot\.dk$ (^|\.)blogspot\.fi$ (^|\.)blogspot\.fr$ (^|\.)blogspot\.gr$ (^|\.)blogspot\.hk$ (^|\.)blogspot\.hr$ (^|\.)blogspot\.hu$ (^|\.)blogspot\.ie$ (^|\.)blogspot\.in$ (^|\.)blogspot\.is$ (^|\.)blogspot\.it$ (^|\.)blogspot\.jp$ (^|\.)blogspot\.kr$ (^|\.)blogspot\.li$ (^|\.)blogspot\.lt$ (^|\.)blogspot\.lu$ (^|\.)blogspot\.md$ (^|\.)blogspot\.mk$ (^|\.)blogspot\.mx$ (^|\.)blogspot\.my$ (^|\.)blogspot\.nl$ (^|\.)blogspot\.no$ (^|\.)blogspot\.pe$ (^|\.)blogspot\.pt$ (^|\.)blogspot\.qa$ (^|\.)blogspot\.ro$ (^|\.)blogspot\.ru$ (^|\.)blogspot\.se$ (^|\.)blogspot\.sg$ (^|\.)blogspot\.si$ (^|\.)blogspot\.sk$ (^|\.)blogspot\.sn$ (^|\.)blogspot\.tw$ (^|\.)blogspot\.ug$ (^|\.)blogs\.tampabay\.com$ (^|\.)blogs\.yahoo\.co\.jp$ (^|\.)blog\.syx86\.cn$ (^|\.)blog\.syx86\.com$ (^|\.)blog\.taragana\.com$ (^|\.)blogtd\.net$ (^|\.)blogtd\.org$ (^|\.)blog\.tiney\.com$ (^|\.)blog\.workflow\.is$ (^|\.)blog\.xuite\.net$ (^|\.)blog\.youthwant\.com\.tw$ (^|\.)blog\.youxu\.info$ (^|\.)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$ (^|\.)bookepub\.com$ (^|\.)books\.com\.tw$ (^|\.)booktopia\.com\.au$ (^|\.)book\.zi5\.me$ (^|\.)boomssr\.com$ (^|\.)botanwang\.com$ (^|\.)bot\.nu$ (^|\.)bowenpress\.com$ (^|\.)boxpn\.com$ (^|\.)boxunblog\.com$ (^|\.)boxunclub\.com$ (^|\.)boxun\.com$ (^|\.)boxun\.tv$ (^|\.)boyangu\.com$ (^|\.)boyfriendtv\.com$ (^|\.)boysfood\.com$ (^|\.)boysmaster\.com$ (^|\.)brainyquote\.com$ (^|\.)brandonhutchinson\.com$ (^|\.)braumeister\.org$ (^|\.)bravotube\.net$ (^|\.)brazzers\.com$ (^|\.)break\.com$ (^|\.)breakgfw\.com$ (^|\.)breaking911\.com$ (^|\.)breakingtweets\.com$ (^|\.)breakwall\.net$ (^|\.)br\.hao123\.com$ (^|\.)briefdream\.com$ (^|\.)briian\.com$ (^|\.)brizzly\.com$ (^|\.)brkmd\.com$ (^|\.)broadbook\.com$ (^|\.)broadpressinc\.com$ (^|\.)br\.st$ (^|\.)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$ (^|\.)bullogger\.com$ (^|\.)bullog\.org$ (^|\.)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$ (^|\.)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$ (^|\.)caobian\.info$ (^|\.)caochangqing\.com$ (^|\.)cao\.im$ (^|\.)cap\.org\.hk$ (^|\.)carabinasypistolas\.com$ (^|\.)cardinalkungfoundation\.org$ (^|\.)carfax\.com$ (^|\.)caribbeancom\.com$ (^|\.)cari\.com\.my$ (^|\.)carmotorshow\.com$ (^|\.)cartoonmovement\.com$ (^|\.)casadeltibetbcn\.org$ (^|\.)casatibet\.org\.mx$ (^|\.)casinobellini\.com$ (^|\.)casinoking\.com$ (^|\.)casinoriva\.com$ (^|\.)casino\.williamhill\.com$ (^|\.)castbox\.fm$ (^|\.)catch22\.net$ (^|\.)catchgod\.com$ (^|\.)catfightpayperview\.xxx$ (^|\.)catholic\.org\.hk$ (^|\.)catholic\.org\.tw$ (^|\.)cathvoice\.org\.tw$ (^|\.)cattt\.com$ (^|\.)cbc\.ca$ (^|\.)cbsnews\.com$ (^|\.)cbs\.ntu\.edu\.tw$ (^|\.)cbtc\.org\.hk$ (^|\.)cccat\.cc$ (^|\.)cccat\.co$ (^|\.)ccdtr\.org$ (^|\.)cchere\.com$ (^|\.)ccim\.org$ (^|\.)cclife\.ca$ (^|\.)cclifefl\.org$ (^|\.)cclife\.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$ (^|\.)cdn1\.lp\.saboom\.com$ (^|\.)cdn-apple\.com$ (^|\.)cdn\.assets\.lfpcontent\.com$ (^|\.)cdnews\.com\.tw$ (^|\.)cdn\.helixstudios\.net$ (^|\.)cdn-images\.mailchimp\.com$ (^|\.)cdninstagram\.com$ (^|\.)cdn\.printfriendly\.com$ (^|\.)cdn\.seatguru\.com$ (^|\.)cdn\.softlayer\.net$ (^|\.)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\.revocationcheck\.com$ (^|\.)certificate-transparency\.org$ (^|\.)c-est-simple\.com$ (^|\.)cfhks\.org\.hk$ (^|\.)cfos\.de$ (^|\.)cftfc\.com$ (^|\.)cgdepot\.org$ (^|\.)cgst\.edu$ (^|\.)changeip\.name$ (^|\.)changeip\.net$ (^|\.)changeip\.org$ (^|\.)change\.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$ (^|\.)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$ (^|\.)china\.hket\.com$ (^|\.)chinahorizon\.org$ (^|\.)chinahush\.com$ (^|\.)chinainperspective\.com$ (^|\.)chinainterimgov\.org$ (^|\.)chinalaborwatch\.org$ (^|\.)chinalawandpolicy\.com$ (^|\.)chinalawtranslate\.com$ (^|\.)china-mmm\.jp\.net$ (^|\.)china-mmm\.net$ (^|\.)china-mmm\.sa\.com$ (^|\.)chinamule\.com$ (^|\.)chinamz\.org$ (^|\.)chinanewscenter\.com$ (^|\.)chinapost\.com\.tw$ (^|\.)chinapress\.com\.my$ (^|\.)china-review\.com\.ua$ (^|\.)chinarightsia\.org$ (^|\.)chinasmile\.net$ (^|\.)chinasocialdemocraticparty\.com$ (^|\.)chinasoul\.org$ (^|\.)chinasucks\.net$ (^|\.)chinatimes\.com$ (^|\.)chinatopsex\.com$ (^|\.)chinatown\.com\.au$ (^|\.)chinatweeps\.com$ (^|\.)china\.ucanews\.com$ (^|\.)chinaview\.wordpress\.com$ (^|\.)chinaway\.org$ (^|\.)china-week\.com$ (^|\.)chinaworker\.info$ (^|\.)chinaxchina\.com$ (^|\.)chinayouth\.org\.hk$ (^|\.)chinayuanmin\.org$ (^|\.)chinesedaily\.com$ (^|\.)chinesedailynews\.com$ (^|\.)chinesedemocracy\.com$ (^|\.)chinese\.donga\.com$ (^|\.)chinese\.engadget\.com$ (^|\.)chinesegay\.org$ (^|\.)chinese-hermit\.net$ (^|\.)chinese\.irib\.ir$ (^|\.)chinese-leaders\.org$ (^|\.)chinese-memorial\.org$ (^|\.)chinesen\.de$ (^|\.)chinesenews\.net\.au$ (^|\.)chinesepen\.org$ (^|\.)chinese\.soifind\.com$ (^|\.)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$ (^|\.)chromecast\.com$ (^|\.)chrome\.com$ (^|\.)chromeexperiments\.com$ (^|\.)chromercise\.com$ (^|\.)chromestatus\.com$ (^|\.)chromium\.org$ (^|\.)ch\.shvoong\.com$ (^|\.)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$ (^|\.)clarionproject\.org$ (^|\.)classicalguitarblog\.net$ (^|\.)clb\.org\.hk$ (^|\.)cl\.d0z\.net$ (^|\.)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$ (^|\.)cn2\.streetvoice\.com$ (^|\.)cn6\.eu$ (^|\.)cnabc\.com$ (^|\.)cna\.com\.tw$ (^|\.)cnbbnews\.wordpress\.com$ (^|\.)cn\.calameo\.com$ (^|\.)cn\.dayabook\.com$ (^|\.)cnd\.org$ (^|\.)cnex\.org\.cn$ (^|\.)cn\.fmnnow\.com$ (^|\.)cn\.freeones\.com$ (^|\.)cn\.giganews\.com$ (^|\.)cn\.ibtimes\.com$ (^|\.)cnineu\.com$ (^|\.)cnn\.com$ (^|\.)cnnews\.chosun\.com$ (^|\.)cn\.nytstyle\.com$ (^|\.)cnpolitics\.org$ (^|\.)cn-proxy\.com$ (^|\.)cnproxy\.com$ (^|\.)cn\.sandscotaicentral\.com$ (^|\.)cn\.shafaqna\.com$ (^|\.)cn\.streetvoice\.com$ (^|\.)cn\.thegay\.com$ (^|\.)cn\.uncyclopedia\.wikia\.com$ (^|\.)cn\.uptodown\.com$ (^|\.)cn\.voa\.mobi$ (^|\.)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$ (^|\.)comefromchina\.com$ (^|\.)com\.google$ (^|\.)comic-mega\.me$ (^|\.)commandarms\.com$ (^|\.)commentshk\.com$ (^|\.)communistcrimes\.org$ (^|\.)communitychoicecu\.com$ (^|\.)community\.windy\.com$ (^|\.)compileheart\.com$ (^|\.)compress\.to$ (^|\.)co\.ng\.mil$ (^|\.)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$ (^|\.)cosmic\.monar\.ch$ (^|\.)cos-moe\.com$ (^|\.)cosplayjav\.pl$ (^|\.)costco\.com$ (^|\.)cotweet\.com$ (^|\.)counter\.social$ (^|\.)coursehero\.com$ (^|\.)cpj\.org$ (^|\.)cq99\.us$ (^|\.)crackle\.com$ (^|\.)crazys\.cc$ (^|\.)crazyshit\.com$ (^|\.)crbug\.com$ (^|\.)crchina\.org$ (^|\.)crd-net\.org$ (^|\.)creaders\.net$ (^|\.)creadersnet\.com$ (^|\.)creativelab5\.com$ (^|\.)crisisresponse\.google$ (^|\.)cristyli\.com$ (^|\.)crocotube\.com$ (^|\.)crossfire\.co\.kr$ (^|\.)crossthewall\.net$ (^|\.)crossvpn\.net$ (^|\.)crrev\.com$ (^|\.)crucial\.com$ (^|\.)csdparty\.com$ (^|\.)c-spanvideo\.org$ (^|\.)css\.pixnet\.in$ (^|\.)csuchen\.de$ (^|\.)csw\.org\.uk$ (^|\.)ctao\.org$ (^|\.)ctfriend\.net$ (^|\.)cthlo\.github\.io$ (^|\.)ctitv\.com\.tw$ (^|\.)ct\.org\.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$ (^|\.)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$ (^|\.)dailyview\.tw$ (^|\.)daiphapinfo\.net$ (^|\.)dajiyuan\.com$ (^|\.)dajiyuan\.de$ (^|\.)dajiyuan\.eu$ (^|\.)dajusha\.baywords\.com$ (^|\.)dalailama80\.org$ (^|\.)dalailama-archives\.org$ (^|\.)dalailamacenter\.org$ (^|\.)dalailama\.com$ (^|\.)dalailamafellows\.org$ (^|\.)dalailamafilm\.com$ (^|\.)dalailamafoundation\.org$ (^|\.)dalailamahindi\.com$ (^|\.)dalailamainaustralia\.org$ (^|\.)dalailamajapanese\.com$ (^|\.)dalailama\.mn$ (^|\.)dalailamaprotesters\.info$ (^|\.)dalailamaquotes\.org$ (^|\.)dalailama\.ru$ (^|\.)dalailamatrust\.org$ (^|\.)dalailama\.usc\.edu$ (^|\.)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\.flurry\.com$ (^|\.)data\.gov\.tw$ (^|\.)data-vocabulary\.org$ (^|\.)daum\.net$ (^|\.)david-kilgour\.com$ (^|\.)dawangidc\.com$ (^|\.)daxa\.cn$ (^|\.)daylife\.com$ (^|\.)dbc\.hk$ (^|\.)db\.tt$ (^|\.)dcard\.tw$ (^|\.)dcmilitary\.com$ (^|\.)ddc\.com\.tw$ (^|\.)ddhw\.info$ (^|\.)ddns\.info$ (^|\.)ddns\.me\.uk$ (^|\.)ddns\.mobi$ (^|\.)ddns\.ms$ (^|\.)ddns\.name$ (^|\.)ddns\.net$ (^|\.)ddns\.us$ (^|\.)deaftone\.com$ (^|\.)debug\.com$ (^|\.)deck\.ly$ (^|\.)decodet\.co$ (^|\.)deepmind\.com$ (^|\.)deezer\.com$ (^|\.)definebabe\.com$ (^|\.)deja\.com$ (^|\.)delcamp\.net$ (^|\.)delicious\.com$ (^|\.)democrats\.org$ (^|\.)demo\.opera-mini\.net$ (^|\.)demosisto\.hk$ (^|\.)depositphotos\.com$ (^|\.)derekhsu\.homeip\.net$ (^|\.)de-sci\.org$ (^|\.)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$ (^|\.)d-fukyu\.com$ (^|\.)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$ (^|\.)discuss4u\.com$ (^|\.)discuss\.com\.hk$ (^|\.)dish\.com$ (^|\.)disp\.cc$ (^|\.)disqus\.com$ (^|\.)dit-inc\.us$ (^|\.)dizhidizhi\.com$ (^|\.)dizhuzhishang\.com$ (^|\.)djangosnippets\.org$ (^|\.)djorz\.com$ (^|\.)dl\.box\.net$ (^|\.)dl-laby\.jp$ (^|\.)dlsite\.com$ (^|\.)dlyoutube\.com$ (^|\.)dm530\.net$ (^|\.)dmcdn\.net$ (^|\.)dmhy\.org$ (^|\.)dmm\.co\.jp$ (^|\.)dns04\.com$ (^|\.)dns05\.com$ (^|\.)dns1\.us$ (^|\.)dns2go\.com$ (^|\.)dns2\.us$ (^|\.)dnscrypt\.org$ (^|\.)dns-dns\.com$ (^|\.)dnset\.com$ (^|\.)dns\.google$ (^|\.)dnsrd\.com$ (^|\.)dnssec\.net$ (^|\.)dns-stuff\.com$ (^|\.)dnvod\.tv$ (^|\.)doctorvoice\.org$ (^|\.)documentingreality\.com$ (^|\.)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$ (^|\.)doubibackup\.com$ (^|\.)doub\.io$ (^|\.)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\.com$ (^|\.)duckduckgo-owned-server\.yahoo\.net$ (^|\.)duckload\.com$ (^|\.)duckmylife\.com$ (^|\.)duga\.jp$ (^|\.)duihuahrjournal\.org$ (^|\.)duihua\.org$ (^|\.)dumb1\.com$ (^|\.)dunyabulteni\.net$ (^|\.)duoweitimes\.com$ (^|\.)duping\.net$ (^|\.)duplicati\.com$ (^|\.)dupola\.com$ (^|\.)dupola\.net$ (^|\.)dushi\.ca$ (^|\.)dvdpac\.com$ (^|\.)dvorak\.org$ (^|\.)dw\.com$ (^|\.)dw\.de$ (^|\.)dwnews\.com$ (^|\.)dwnews\.net$ (^|\.)dw-world\.com$ (^|\.)dw-world\.de$ (^|\.)dynamicdns\.biz$ (^|\.)dynamicdns\.co\.uk$ (^|\.)dynamicdns\.me\.uk$ (^|\.)dynamic-dns\.net$ (^|\.)dynamicdns\.org\.uk$ (^|\.)dynawebinc\.com$ (^|\.)dyndns-ip\.com$ (^|\.)dyndns\.org$ (^|\.)dyndns-pics\.com$ (^|\.)dyndns\.pro$ (^|\.)dynssl\.com$ (^|\.)dynu\.com$ (^|\.)dynu\.net$ (^|\.)dynupdate\.no-ip\.com$ (^|\.)dysfz\.cc$ (^|\.)dzze\.com$ (^|\.)e123\.hk$ (^|\.)earlytibet\.com$ (^|\.)earthcam\.com$ (^|\.)earthvpn\.com$ (^|\.)eastern-ark\.com$ (^|\.)easternlightning\.org$ (^|\.)eastturkestan\.com$ (^|\.)eastturkistancc\.org$ (^|\.)eastturkistangovernmentinexile\.us$ (^|\.)eastturkistan-gov\.org$ (^|\.)easyca\.ca$ (^|\.)easypic\.com$ (^|\.)ebony-beauty\.com$ (^|\.)ebookbrowse\.com$ (^|\.)ebookee\.com$ (^|\.)ebook\.hyread\.com\.tw$ (^|\.)ebtcbank\.com$ (^|\.)ecfa\.org\.tw$ (^|\.)echofon\.com$ (^|\.)ecimg\.tw$ (^|\.)e-classical\.com\.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$ (^|\.)e-gold\.com$ (^|\.)e-hentaidb\.com$ (^|\.)e-hentai\.org$ (^|\.)eic-av\.com$ (^|\.)e-info\.org\.tw$ (^|\.)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$ (^|\.)enanyang\.my$ (^|\.)encyclopedia\.com$ (^|\.)enewstree\.com$ (^|\.)enfal\.de$ (^|\.)en\.favotter\.net$ (^|\.)engagedaily\.org$ (^|\.)englishforeveryone\.org$ (^|\.)englishfromengland\.co\.uk$ (^|\.)englishpen\.org$ (^|\.)en\.hao123\.com$ (^|\.)enlighten\.org\.tw$ (^|\.)entermap\.com$ (^|\.)entnt\.com$ (^|\.)environment\.google$ (^|\.)epac\.to$ (^|\.)epa\.gov\.tw$ (^|\.)episcopalchurch\.org$ (^|\.)epochhk\.com$ (^|\.)epochtimes-bg\.com$ (^|\.)epochtimes\.co\.il$ (^|\.)epochtimes\.co\.kr$ (^|\.)epochtimes\.com$ (^|\.)epochtimes\.cz$ (^|\.)epochtimes\.de$ (^|\.)epochtimes\.fr$ (^|\.)epochtimes\.ie$ (^|\.)epochtimes\.it$ (^|\.)epochtimes\.jp$ (^|\.)epochtimes-romania\.com$ (^|\.)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$ (^|\.)eromangadouzin\.com$ (^|\.)eromanga-kingdom\.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$ (^|\.)e-traderland\.net$ (^|\.)ettoday\.net$ (^|\.)etvonline\.hk$ (^|\.)eucasino\.com$ (^|\.)eulam\.com$ (^|\.)eu\.org$ (^|\.)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$ (^|\.)e-zone\.com\.hk$ (^|\.)ezpc\.tk$ (^|\.)ezpeer\.com$ (^|\.)ezua\.com$ (^|\.)facebook\.br$ (^|\.)facebook\.com$ (^|\.)facebook\.design$ (^|\.)facebook\.hu$ (^|\.)facebook\.in$ (^|\.)facebookmail\.com$ (^|\.)facebook\.nl$ (^|\.)facebookquotes4u\.com$ (^|\.)facebook\.se$ (^|\.)faceless\.me$ (^|\.)facesofnyfw\.com$ (^|\.)facesoftibetanselfimmolators\.info$ (^|\.)fa\.gov\.tw$ (^|\.)fail\.hk$ (^|\.)faith100\.org$ (^|\.)faithfuleye\.com$ (^|\.)faiththedog\.info$ (^|\.)fakku\.net$ (^|\.)falsefire\.com$ (^|\.)falunart\.org$ (^|\.)falunasia\.info$ (^|\.)falunau\.org$ (^|\.)falunaz\.net$ (^|\.)falun\.caltech\.edu$ (^|\.)falun-co\.org$ (^|\.)falundafa-dc\.org$ (^|\.)falundafa-florida\.org$ (^|\.)falundafaindia\.org$ (^|\.)falundafamuseum\.org$ (^|\.)falundafa-nc\.org$ (^|\.)falundafa\.org$ (^|\.)falundafa-pa\.net$ (^|\.)falundafa-sacramento\.org$ (^|\.)falungong\.club$ (^|\.)falungong\.de$ (^|\.)falungong\.org\.uk$ (^|\.)falunhr\.org$ (^|\.)faluninfo\.de$ (^|\.)faluninfo\.net$ (^|\.)falun-ny\.net$ (^|\.)falunpilipinas\.net$ (^|\.)falunworld\.net$ (^|\.)familyfed\.org$ (^|\.)famunion\.com$ (^|\.)fangbinxing\.com$ (^|\.)fangeming\.com$ (^|\.)fangeqiang\.com$ (^|\.)fanglizhi\.info$ (^|\.)fangmincn\.org$ (^|\.)fangong\.forums-free\.com$ (^|\.)fangongheike\.com$ (^|\.)fangong\.org$ (^|\.)fanhaodang\.com$ (^|\.)fan-qiang\.com$ (^|\.)fanqiangdang\.com$ (^|\.)fanqianghou\.com$ (^|\.)fanqiang\.tk$ (^|\.)fanqiangyakexi\.net$ (^|\.)fanqiangzhe\.com$ (^|\.)fanswong\.com$ (^|\.)fanyue\.info$ (^|\.)fapdu\.com$ (^|\.)faproxy\.com$ (^|\.)faqserv\.com$ (^|\.)fartit\.com$ (^|\.)farwestchina\.com$ (^|\.)fastpic\.ru$ (^|\.)fastssh\.com$ (^|\.)faststone\.org$ (^|\.)fast\.wistia\.com$ (^|\.)fatbtc\.com$ (^|\.)favstar\.fm$ (^|\.)fawanghuihui\.org$ (^|\.)faydao\.com$ (^|\.)fbaddins\.com$ (^|\.)fbcdn\.net$ (^|\.)fb\.com$ (^|\.)fb\.me$ (^|\.)fbsbx\.com$ (^|\.)fbworkmail\.com$ (^|\.)fc2blog\.net$ (^|\.)fc2china\.com$ (^|\.)fc2cn\.com$ (^|\.)fc2\.com$ (^|\.)fda\.gov\.tw$ (^|\.)fdc64\.de$ (^|\.)fdc64\.org$ (^|\.)fdc89\.jp$ (^|\.)feedburner\.com$ (^|\.)feeds\.fileforum\.com$ (^|\.)feedx\.net$ (^|\.)feelssh\.com$ (^|\.)feer\.com$ (^|\.)feifeiss\.com$ (^|\.)feitianacademy\.org$ (^|\.)feitian-california\.org$ (^|\.)feministteacher\.com$ (^|\.)fengzhenghu\.com$ (^|\.)fengzhenghu\.net$ (^|\.)fevernet\.com$ (^|\.)fffff\.at$ (^|\.)ff\.im$ (^|\.)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$ (^|\.)forum4hk\.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$ (^|\.)fotile\.me$ (^|\.)fourface\.nodesnoop\.com$ (^|\.)fourthinternational\.org$ (^|\.)foxdie\.us$ (^|\.)foxgay\.com$ (^|\.)foxsub\.com$ (^|\.)foxtang\.com$ (^|\.)fpmtmexico\.org$ (^|\.)fpmt\.org$ (^|\.)fpmt-osel\.org$ (^|\.)fpmt\.tw$ (^|\.)fqok\.org$ (^|\.)fqrouter\.com$ (^|\.)fq\.wikia\.com$ (^|\.)franklc\.com$ (^|\.)freakshare\.com$ (^|\.)free4u\.com\.ar$ (^|\.)freealim\.com$ (^|\.)freebrowser\.org$ (^|\.)freechal\.com$ (^|\.)freechinaforum\.org$ (^|\.)freechina\.net$ (^|\.)freechina\.news$ (^|\.)freechinaweibo\.com$ (^|\.)freeddns\.com$ (^|\.)freeddns\.org$ (^|\.)freedomchina\.info$ (^|\.)freedomcollection\.org$ (^|\.)freedomhouse\.org$ (^|\.)freedominfonetweb\.wordpress\.com$ (^|\.)freedomsherald\.org$ (^|\.)freeforums\.org$ (^|\.)freefq\.com$ (^|\.)free\.fr$ (^|\.)freefuckvids\.com$ (^|\.)freegao\.com$ (^|\.)free-gate\.org$ (^|\.)free-hada-now\.org$ (^|\.)freehongkong\.org$ (^|\.)freeilhamtohti\.org$ (^|\.)freekwonpyong\.org$ (^|\.)freelotto\.com$ (^|\.)freeman2\.com$ (^|\.)freemoren\.com$ (^|\.)freemorenews\.com$ (^|\.)freemuse\.org$ (^|\.)freenet-china\.org$ (^|\.)freenetproject\.org$ (^|\.)freenewscn\.com$ (^|\.)freeopenvpn\.com$ (^|\.)freeoz\.org$ (^|\.)free-proxy\.cz$ (^|\.)free-ssh\.com$ (^|\.)freessh\.us$ (^|\.)free-ss\.site$ (^|\.)freetcp\.com$ (^|\.)freetibetanheroes\.org$ (^|\.)freetibet\.net$ (^|\.)freetibet\.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\.com$ (^|\.)friendfeed-media\.com$ (^|\.)friends-of-tibet\.org$ (^|\.)friendsoftibet\.org$ (^|\.)fring\.com$ (^|\.)fringenetwork\.com$ (^|\.)fromchinatousa\.net$ (^|\.)frommel\.net$ (^|\.)from-pr\.com$ (^|\.)from-sd\.com$ (^|\.)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$ (^|\.)fuyindiantai\.org$ (^|\.)fuyin\.net$ (^|\.)fuyu\.org\.tw$ (^|\.)fw\.cm$ (^|\.)fxcm-chinese\.com$ (^|\.)fxnetworks\.com$ (^|\.)fzh999\.com$ (^|\.)fzh999\.net$ (^|\.)fzlm\.com$ (^|\.)g0v\.social$ (^|\.)g6hentai\.com$ (^|\.)gabocorp\.com$ (^|\.)gaeproxy\.com$ (^|\.)gaforum\.org$ (^|\.)galaxymacau\.com$ (^|\.)galenwu\.com$ (^|\.)galstars\.net$ (^|\.)game735\.com$ (^|\.)gamebase\.com\.tw$ (^|\.)gamejolt\.com$ (^|\.)gamer2-cds\.cdn\.hinet\.net$ (^|\.)gamer-cds\.cdn\.hinet\.net$ (^|\.)gamer\.com\.tw$ (^|\.)gamez\.com\.tw$ (^|\.)gamousa\.com$ (^|\.)ganges\.com$ (^|\.)gaoming\.net$ (^|\.)gaopi\.net$ (^|\.)gaozhisheng\.net$ (^|\.)gaozhisheng\.org$ (^|\.)gardennetworks\.com$ (^|\.)gardennetworks\.org$ (^|\.)g-area\.org$ (^|\.)gartlive\.com$ (^|\.)gatecoin\.com$ (^|\.)gate\.io$ (^|\.)gate-project\.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$ (^|\.)g\.co$ (^|\.)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$ (^|\.)getastrill\.com$ (^|\.)getchu\.com$ (^|\.)getcloak\.com$ (^|\.)get\.dev$ (^|\.)getfoxyproxy\.org$ (^|\.)getfreedur\.com$ (^|\.)getgom\.com$ (^|\.)get\.how$ (^|\.)geti2p\.net$ (^|\.)getiton\.com$ (^|\.)getjetso\.com$ (^|\.)getlantern\.org$ (^|\.)getmdl\.io$ (^|\.)getoutline\.org$ (^|\.)get\.page$ (^|\.)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$ (^|\.)gist\.github\.com$ (^|\.)github\.com$ (^|\.)git\.io$ (^|\.)gizlen\.net$ (^|\.)gjczz\.com$ (^|\.)glass8\.eu$ (^|\.)global\.bing\.com$ (^|\.)globaljihad\.net$ (^|\.)globalmediaoutreach\.com$ (^|\.)globalmuseumoncommunism\.org$ (^|\.)globalrescue\.net$ (^|\.)globaltm\.org$ (^|\.)globalvoicesonline\.org$ (^|\.)globalvoices\.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$ (^|\.)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$ (^|\.)go\.nesnode\.com$ (^|\.)gongmeng\.info$ (^|\.)gongm\.in$ (^|\.)gongminliliang\.com$ (^|\.)gongwt\.com$ (^|\.)gooday\.xyz$ (^|\.)gooddns\.info$ (^|\.)goodreaders\.com$ (^|\.)goodreads\.com$ (^|\.)goodtv\.com\.tw$ (^|\.)goodtv\.tv$ (^|\.)goofind\.com$ (^|\.)goo\.gl$ (^|\.)# Google TLDs$ (^|\.)google\.ad$ (^|\.)google\.ae$ (^|\.)google\.al$ (^|\.)google\.am$ (^|\.)google\.as$ (^|\.)google\.at$ (^|\.)google\.az$ (^|\.)google\.ba$ (^|\.)google\.be$ (^|\.)google\.bf$ (^|\.)google\.bg$ (^|\.)google\.bi$ (^|\.)google\.bj$ (^|\.)google\.bs$ (^|\.)google\.bt$ (^|\.)google\.by$ (^|\.)google\.ca$ (^|\.)google\.cat$ (^|\.)google\.cd$ (^|\.)google\.cf$ (^|\.)google\.cg$ (^|\.)google\.ch$ (^|\.)google\.ci$ (^|\.)google\.cl$ (^|\.)google\.cm$ (^|\.)google\.cn$ (^|\.)google\.co\.ao$ (^|\.)google\.co\.bw$ (^|\.)google\.co\.ck$ (^|\.)google\.co\.cr$ (^|\.)google\.co\.id$ (^|\.)google\.co\.il$ (^|\.)google\.co\.in$ (^|\.)google\.co\.jp$ (^|\.)google\.co\.ke$ (^|\.)google\.co\.kr$ (^|\.)google\.co\.ls$ (^|\.)google\.co\.ma$ (^|\.)google\.co\.mz$ (^|\.)google\.co\.nz$ (^|\.)google\.co\.th$ (^|\.)google\.co\.tz$ (^|\.)google\.co\.ug$ (^|\.)google\.co\.uk$ (^|\.)google\.co\.uz$ (^|\.)google\.co\.ve$ (^|\.)google\.co\.vi$ (^|\.)google\.co\.za$ (^|\.)google\.co\.zm$ (^|\.)google\.co\.zw$ (^|\.)google\.com$ (^|\.)google\.com\.af$ (^|\.)google\.com\.ag$ (^|\.)google\.com\.ai$ (^|\.)google\.com\.ar$ (^|\.)google\.com\.au$ (^|\.)google\.com\.bd$ (^|\.)google\.com\.bh$ (^|\.)google\.com\.bn$ (^|\.)google\.com\.bo$ (^|\.)google\.com\.br$ (^|\.)google\.com\.bz$ (^|\.)google\.com\.co$ (^|\.)google\.com\.cu$ (^|\.)google\.com\.cy$ (^|\.)google\.com\.do$ (^|\.)google\.com\.ec$ (^|\.)google\.com\.eg$ (^|\.)google\.com\.et$ (^|\.)google\.com\.fj$ (^|\.)google\.com\.gh$ (^|\.)google\.com\.gi$ (^|\.)google\.com\.gt$ (^|\.)google\.com\.hk$ (^|\.)google\.com\.jm$ (^|\.)google\.com\.kh$ (^|\.)google\.com\.kw$ (^|\.)google\.com\.lb$ (^|\.)google\.com\.ly$ (^|\.)google\.com\.mm$ (^|\.)google\.com\.mt$ (^|\.)google\.com\.mx$ (^|\.)google\.com\.my$ (^|\.)google\.com\.na$ (^|\.)google\.com\.nf$ (^|\.)google\.com\.ng$ (^|\.)google\.com\.ni$ (^|\.)google\.com\.np$ (^|\.)google\.com\.om$ (^|\.)google\.com\.pa$ (^|\.)google\.com\.pe$ (^|\.)google\.com\.pg$ (^|\.)google\.com\.ph$ (^|\.)google\.com\.pk$ (^|\.)google\.com\.pr$ (^|\.)google\.com\.py$ (^|\.)google\.com\.qa$ (^|\.)google\.com\.sa$ (^|\.)google\.com\.sb$ (^|\.)google\.com\.sg$ (^|\.)google\.com\.sl$ (^|\.)google\.com\.sv$ (^|\.)google\.com\.tj$ (^|\.)google\.com\.tr$ (^|\.)google\.com\.tw$ (^|\.)google\.com\.ua$ (^|\.)google\.com\.uy$ (^|\.)google\.com\.vc$ (^|\.)google\.com\.vn$ (^|\.)google\.cv$ (^|\.)google\.cz$ (^|\.)google\.de$ (^|\.)google\.dj$ (^|\.)google\.dk$ (^|\.)google\.dm$ (^|\.)google\.dz$ (^|\.)google\.ee$ (^|\.)google\.es$ (^|\.)google\.fi$ (^|\.)google\.fm$ (^|\.)google\.fr$ (^|\.)google\.ga$ (^|\.)google\.ge$ (^|\.)google\.gg$ (^|\.)google\.gl$ (^|\.)google\.gm$ (^|\.)google\.gp$ (^|\.)google\.gr$ (^|\.)google\.gy$ (^|\.)google\.hn$ (^|\.)google\.hr$ (^|\.)google\.ht$ (^|\.)google\.hu$ (^|\.)google\.ie$ (^|\.)google\.im$ (^|\.)google\.iq$ (^|\.)google\.is$ (^|\.)google\.it$ (^|\.)google\.je$ (^|\.)google\.jo$ (^|\.)google\.kg$ (^|\.)google\.ki$ (^|\.)google\.kz$ (^|\.)google\.la$ (^|\.)google\.li$ (^|\.)google\.lk$ (^|\.)google\.lt$ (^|\.)google\.lu$ (^|\.)google\.lv$ (^|\.)google\.md$ (^|\.)google\.me$ (^|\.)google\.mg$ (^|\.)google\.mk$ (^|\.)google\.ml$ (^|\.)google\.mn$ (^|\.)google\.ms$ (^|\.)google\.mu$ (^|\.)google\.mv$ (^|\.)google\.mw$ (^|\.)google\.ne$ (^|\.)google\.nl$ (^|\.)google\.no$ (^|\.)google\.nr$ (^|\.)google\.nu$ (^|\.)google\.pl$ (^|\.)google\.pn$ (^|\.)google\.ps$ (^|\.)google\.pt$ (^|\.)google\.ro$ (^|\.)google\.rs$ (^|\.)google\.ru$ (^|\.)google\.rw$ (^|\.)google\.sc$ (^|\.)google\.se$ (^|\.)google\.sh$ (^|\.)google\.si$ (^|\.)google\.sk$ (^|\.)google\.sm$ (^|\.)google\.sn$ (^|\.)google\.so$ (^|\.)google\.sr$ (^|\.)google\.st$ (^|\.)google\.td$ (^|\.)google\.tg$ (^|\.)google\.tk$ (^|\.)google\.tl$ (^|\.)google\.tm$ (^|\.)google\.tn$ (^|\.)google\.to$ (^|\.)google\.tt$ (^|\.)google\.vg$ (^|\.)google\.vu$ (^|\.)google\.ws$ (^|\.)# Google TLDs end$ (^|\.)googleapis\.cn$ (^|\.)googleapis\.com$ (^|\.)googleapps\.com$ (^|\.)googlearth\.com$ (^|\.)googleartproject\.com$ (^|\.)googleblog\.com$ (^|\.)googlebot\.com$ (^|\.)google\.calstate\.edu$ (^|\.)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$ (^|\.)go-pki\.com$ (^|\.)goproxing\.net$ (^|\.)goregrish\.com$ (^|\.)gospelherald\.com$ (^|\.)gotdns\.ch$ (^|\.)got-game\.org$ (^|\.)gotgeeks\.com$ (^|\.)gotrusted\.com$ (^|\.)gotw\.ca$ (^|\.)gov\.taipei$ (^|\.)gov\.tw$ (^|\.)g-queen\.com$ (^|\.)gr8domain\.biz$ (^|\.)gr8name\.biz$ (^|\.)grammaly\.com$ (^|\.)grandtrial\.org$ (^|\.)grangorz\.org$ (^|\.)graphis\.ne\.jp$ (^|\.)graphql\.org$ (^|\.)greasespot\.net$ (^|\.)greatfire\.org$ (^|\.)greatfire\.us7\.list-manage\.com$ (^|\.)greatfirewall\.biz$ (^|\.)great-firewall\.com$ (^|\.)greatfirewallofchina\.net$ (^|\.)greatfirewallofchina\.org$ (^|\.)great-roc\.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$ (^|\.)guaguass\.com$ (^|\.)guaguass\.org$ (^|\.)guancha\.org$ (^|\.)guaneryu\.com$ (^|\.)guangming\.com\.my$ (^|\.)guangnianvpn\.com$ (^|\.)guardster\.com$ (^|\.)gu-chu-sum\.org$ (^|\.)guishan\.org$ (^|\.)gumroad\.com$ (^|\.)gunsamerica\.com$ (^|\.)gunsandammo\.com$ (^|\.)gun-world\.net$ (^|\.)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$ (^|\.)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$ (^|\.)hanime\.tv$ (^|\.)hanunyi\.com$ (^|\.)haoel\.github\.io$ (^|\.)hao\.news$ (^|\.)happy-vpn\.com$ (^|\.)haproxy\.org$ (^|\.)hardsextube\.com$ (^|\.)harunyahya\.com$ (^|\.)hautelookcdn\.com$ (^|\.)hautelook\.com$ (^|\.)have8\.com$ (^|\.)hbg\.com$ (^|\.)hbo\.com$ (^|\.)h-china\.org$ (^|\.)hclips\.com$ (^|\.)hdlt\.me$ (^|\.)hd\.stheadline\.com$ (^|\.)hdtvb\.net$ (^|\.)hdzog\.com$ (^|\.)heartyit\.com$ (^|\.)heavy-r\.com$ (^|\.)hecaitou\.net$ (^|\.)hechaji\.com$ (^|\.)hec\.su$ (^|\.)heeact\.edu\.tw$ (^|\.)hegre-art\.com$ (^|\.)heix\.pp\.ru$ (^|\.)helloandroid\.com$ (^|\.)helloqueer\.com$ (^|\.)helloss\.pw$ (^|\.)hellotxt\.com$ (^|\.)hellouk\.org$ (^|\.)helpeachpeople\.com$ (^|\.)helplinfen\.com$ (^|\.)help\.linksalpha\.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$ (^|\.)hidden-advent\.org$ (^|\.)hidecloud\.com$ (^|\.)hidein\.net$ (^|\.)hideipvpn\.com$ (^|\.)hideman\.net$ (^|\.)hide\.me$ (^|\.)hideme\.nl$ (^|\.)hidemyass\.com$ (^|\.)hidemycomp\.com$ (^|\.)hidemy\.name$ (^|\.)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$ (^|\.)hi-on\.org\.tw$ (^|\.)hitbtc\.com$ (^|\.)hitomi\.la$ (^|\.)hizb-ut-tahrir\.info$ (^|\.)hizb-ut-tahrir\.org$ (^|\.)hizbuttahrir\.org$ (^|\.)hjclub\.info$ (^|\.)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$ (^|\.)hk\.frienddy\.com$ (^|\.)hkfront\.org$ (^|\.)hkgalden\.com$ (^|\.)hk\.geocities\.com$ (^|\.)hkgolden\.com$ (^|\.)hk\.gradconnection\.com$ (^|\.)hkgreenradio\.org$ (^|\.)hk\.hao123img\.com$ (^|\.)hkheadline\.com$ (^|\.)hkhkhk\.com$ (^|\.)hkhrc\.org\.hk$ (^|\.)hkhrm\.org\.hk$ (^|\.)hkip\.org\.uk$ (^|\.)hkjc\.com$ (^|\.)hk\.jiepang\.com$ (^|\.)hkjp\.org$ (^|\.)hk\.knowledge\.yahoo\.com$ (^|\.)hklft\.com$ (^|\.)hklts\.org\.hk$ (^|\.)hk\.myblog\.yahoo\.com$ (^|\.)hk\.news\.yahoo\.com$ (^|\.)hkptu\.org$ (^|\.)hk-pub\.com$ (^|\.)hk\.rd\.yahoo\.com$ (^|\.)hkreporter\.com$ (^|\.)hkreporter\.loved\.hk$ (^|\.)hk\.search\.yahoo\.com$ (^|\.)hkupop\.hku\.hk$ (^|\.)hkusu\.net$ (^|\.)hk\.video\.news\.yahoo\.com$ (^|\.)hkvwet\.com$ (^|\.)hkwcc\.org\.hk$ (^|\.)hk\.yahoo\.com$ (^|\.)hkzone\.org$ (^|\.)h-moe\.com$ (^|\.)hmonghot\.com$ (^|\.)hmv\.co\.jp$ (^|\.)hmvdigital\.ca$ (^|\.)hmvdigital\.com$ (^|\.)hnjhj\.com$ (^|\.)hnntube\.com$ (^|\.)hola\.com$ (^|\.)hola\.org$ (^|\.)holymountaincn\.com$ (^|\.)holyspiritspeaks\.org$ (^|\.)homedepot\.com$ (^|\.)homeperversion\.com$ (^|\.)homeservershow\.com$ (^|\.)home\.sina\.com$ (^|\.)home\.so-net\.net\.tw$ (^|\.)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$ (^|\.)hrweb\.org$ (^|\.)hrw\.org$ (^|\.)hsjp\.net$ (^|\.)hsselite\.com$ (^|\.)hstern\.net$ (^|\.)hst\.net\.tw$ (^|\.)hstt\.net$ (^|\.)htkou\.net$ (^|\.)htl\.li$ (^|\.)ht\.ly$ (^|\.)html5rocks\.com$ (^|\.)https443\.net$ (^|\.)https443\.org$ (^|\.)huaglad\.com$ (^|\.)huanghuagang\.org$ (^|\.)huangyiyu\.com$ (^|\.)huaren4us\.com$ (^|\.)huaren\.us$ (^|\.)huashangnews\.com$ (^|\.)huaxiabao\.org$ (^|\.)huaxia-news\.com$ (^|\.)huaxin\.ph$ (^|\.)hua-yue\.net$ (^|\.)huayuworld\.org$ (^|\.)hudatoriq\.web\.id$ (^|\.)hudson\.org$ (^|\.)huffingtonpost\.com$ (^|\.)hugoroy\.eu$ (^|\.)huhaitai\.com$ (^|\.)huhamhire\.com$ (^|\.)huiyi\.in$ (^|\.)hulkshare\.com$ (^|\.)hulu\.com$ (^|\.)huluim\.com$ (^|\.)humanrightsbriefing\.org$ (^|\.)hungerstrikeforaids\.org$ (^|\.)hung-ya\.com$ (^|\.)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$ (^|\.)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$ (^|\.)i-cable\.com$ (^|\.)icams\.com$ (^|\.)ice\.audionow\.com$ (^|\.)icij\.org$ (^|\.)icl-fi\.org$ (^|\.)icoco\.com$ (^|\.)iconpaper\.org$ (^|\.)icu-project\.org$ (^|\.)iddddg\.com$ (^|\.)idemocracy\.asia$ (^|\.)identi\.ca$ (^|\.)id\.hao123\.com$ (^|\.)id\.heroku\.com$ (^|\.)idiomconnection\.com$ (^|\.)idouga\.com$ (^|\.)idreamx\.com$ (^|\.)idv\.tw$ (^|\.)ieasy5\.com$ (^|\.)ied2k\.net$ (^|\.)ienergy1\.com$ (^|\.)ifan\.cz\.cc$ (^|\.)ifanqiang\.com$ (^|\.)ifcss\.org$ (^|\.)ifjc\.org$ (^|\.)ifreewares\.com$ (^|\.)if\.ttt$ (^|\.)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$ (^|\.)i\.lithium\.com$ (^|\.)illusionfactory\.com$ (^|\.)ilove80\.be$ (^|\.)ilovelongtoes\.com$ (^|\.)im88\.tw$ (^|\.)imageab\.com$ (^|\.)imagefap\.com$ (^|\.)imageflea\.com$ (^|\.)images\.comico\.tw$ (^|\.)images-gaytube\.com$ (^|\.)imageshack\.us$ (^|\.)imagevenue\.com$ (^|\.)imagezilla\.net$ (^|\.)imb\.org$ (^|\.)imdb\.com$ (^|\.)imgchili\.net$ (^|\.)img\.dlsite\.jp$ (^|\.)img\.ly$ (^|\.)imgmega\.com$ (^|\.)imgur\.com$ (^|\.)imkev\.com$ (^|\.)imlive\.com$ (^|\.)immigration\.gov\.tw$ (^|\.)immoral\.jp$ (^|\.)impact\.org\.au$ (^|\.)impp\.mn$ (^|\.)im\.tv$ (^|\.)in99\.org$ (^|\.)incapdns\.net$ (^|\.)incloak\.com$ (^|\.)incredibox\.fr$ (^|\.)indiandefensenews\.in$ (^|\.)indiemerch\.com$ (^|\.)in-disguise\.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$ (^|\.)internetdefenseleague\.org$ (^|\.)internetfreedom\.org$ (^|\.)internet\.org$ (^|\.)internetpopculture\.com$ (^|\.)inthenameofconfuciusmovie\.com$ (^|\.)investigating\.wordpress\.com$ (^|\.)inxian\.com$ (^|\.)iownyour\.biz$ (^|\.)iownyour\.org$ (^|\.)ipalter\.com$ (^|\.)i-part\.com\.tw$ (^|\.)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$ (^|\.)iptvbin\.com$ (^|\.)iptv\.com\.tw$ (^|\.)ipvanish\.com$ (^|\.)iredmail\.org$ (^|\.)ironbigfools\.compython\.net$ (^|\.)ironpython\.net$ (^|\.)ironsocket\.com$ (^|\.)isaacmao\.com$ (^|\.)is-a-hunter\.com$ (^|\.)isasecret\.com$ (^|\.)i-scmp\.com$ (^|\.)isc\.sans\.edu$ (^|\.)is\.gd$ (^|\.)isgreat\.org$ (^|\.)islahhaber\.net$ (^|\.)islamawareness\.net$ (^|\.)islamhouse\.com$ (^|\.)islamicity\.com$ (^|\.)islamicpluralism\.org$ (^|\.)islam\.org\.hk$ (^|\.)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$ (^|\.)itsaol\.com$ (^|\.)its\.caltech\.edu$ (^|\.)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$ (^|\.)izlesem\.org$ (^|\.)izles\.net$ (^|\.)jamaat\.org$ (^|\.)jamyangnorbu\.com$ (^|\.)jandyx\.com$ (^|\.)janwongphoto\.com$ (^|\.)japanfirst\.asianfreeforum\.com$ (^|\.)japantimes\.co\.jp$ (^|\.)japan-whores\.com$ (^|\.)jav101\.com$ (^|\.)jav2be\.com$ (^|\.)jav68\.tv$ (^|\.)javakiba\.org$ (^|\.)javbus\.com$ (^|\.)jav\.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$ (^|\.)ja\.wikipedia\.org$ (^|\.)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$ (^|\.)j\.mp$ (^|\.)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$ (^|\.)kagyumonlam\.org$ (^|\.)kagyunews\.com\.hk$ (^|\.)kagyuoffice\.org$ (^|\.)kagyuoffice\.org\.tw$ (^|\.)kagyu\.org$ (^|\.)kagyu\.org\.za$ (^|\.)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\.org$ (^|\.)karmapa-teachings\.org$ (^|\.)ka-wai\.com$ (^|\.)kawaiikawaii\.jp$ (^|\.)kawase\.com$ (^|\.)kba-tx\.org$ (^|\.)kb\.monitorware\.com$ (^|\.)kcoolonline\.com$ (^|\.)k-doujin\.net$ (^|\.)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$ (^|\.)kkbox\.com$ (^|\.)kknews\.cc$ (^|\.)kk-whys\.co\.jp$ (^|\.)kmuh\.org\.tw$ (^|\.)knowledgerush\.com$ (^|\.)kobobooks\.com$ (^|\.)kobo\.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$ (^|\.)labiennale\.org$ (^|\.)ladbrokes\.com$ (^|\.)la-forum\.org$ (^|\.)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$ (^|\.)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$ (^|\.)le-vpn\.com$ (^|\.)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$ (^|\.)lightyearvpn\.com$ (^|\.)lihkg\.com$ (^|\.)like\.com$ (^|\.)limiao\.net$ (^|\.)line-apps\.com$ (^|\.)linear-abematv\.akamaized\.net$ (^|\.)line\.me$ (^|\.)line\.naver\.jp$ (^|\.)line-scdn\.net$ (^|\.)linglingfa\.com$ (^|\.)lingvodics\.com$ (^|\.)linkideo\.com$ (^|\.)link-o-rama\.com$ (^|\.)linkuswell\.com$ (^|\.)linux\.org\.hk$ (^|\.)linuxtoy\.org$ (^|\.)lionsroar\.com$ (^|\.)lipuman\.com$ (^|\.)liquidvpn\.com$ (^|\.)listentoyoutube\.com$ (^|\.)listorious\.com$ (^|\.)lists\.w3\.org$ (^|\.)liudejun\.com$ (^|\.)liuhanyu\.com$ (^|\.)liujianshu\.com$ (^|\.)liuxiaobo\.net$ (^|\.)liu-xiaobo\.org$ (^|\.)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$ (^|\.)lsmchinese\.org$ (^|\.)lsmkorean\.org$ (^|\.)lsm\.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$ (^|\.)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$ (^|\.)ma\.hao123\.com$ (^|\.)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$ (^|\.)meansys\.com$ (^|\.)mediachinese\.com$ (^|\.)mediafire\.com$ (^|\.)mediafreakcity\.com$ (^|\.)media\.nu\.nl$ (^|\.)media\.org\.hk$ (^|\.)medium\.com$ (^|\.)meetav\.com$ (^|\.)meetup\.com$ (^|\.)mefeedia\.com$ (^|\.)mefound\.com$ (^|\.)mega\.nz$ (^|\.)megaproxy\.com$ (^|\.)megarotic\.com$ (^|\.)megavideo\.com$ (^|\.)megurineluka\.com$ (^|\.)meirixiaochao\.com$ (^|\.)meltoday\.com$ (^|\.)me\.me$ (^|\.)memehk\.com$ (^|\.)meme\.yahoo\.com$ (^|\.)memorybbs\.com$ (^|\.)memrijttm\.org$ (^|\.)memri\.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$ (^|\.)me\.youthwant\.com\.tw$ (^|\.)meyul\.com$ (^|\.)mfxmedia\.com$ (^|\.)mgoon\.com$ (^|\.)mgstage\.com$ (^|\.)mh4u\.org$ (^|\.)m\.hkgalden\.com$ (^|\.)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\.org$ (^|\.)minghui\.or\.kr$ (^|\.)minghui-school\.org$ (^|\.)minghuiyw\.wordpress\.com$ (^|\.)mingjinglishi\.com$ (^|\.)mingjingnews\.com$ (^|\.)mingjingtimes\.com$ (^|\.)mingpaocanada\.com$ (^|\.)mingpao\.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$ (^|\.)mitbbsau\.com$ (^|\.)mitbbs\.com$ (^|\.)mixero\.com$ (^|\.)mixpod\.com$ (^|\.)mixx\.com$ (^|\.)mizzmona\.com$ (^|\.)mjib\.gov\.tw$ (^|\.)mjlsh\.usc\.cuhk\.edu\.hk$ (^|\.)mk5000\.com$ (^|\.)mlcool\.com$ (^|\.)mlzs\.work$ (^|\.)mmaaxx\.com$ (^|\.)mm-cg\.com$ (^|\.)m\.me$ (^|\.)mmmca\.com$ (^|\.)mnewstv\.com$ (^|\.)mobatek\.net$ (^|\.)mobile01\.com$ (^|\.)mobileways\.de$ (^|\.)mobypicture\.com$ (^|\.)moby\.to$ (^|\.)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$ (^|\.)moneyhome\.biz$ (^|\.)money-link\.com\.tw$ (^|\.)mo\.nightlife141\.com$ (^|\.)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$ (^|\.)m\.plixi\.com$ (^|\.)mponline\.hk$ (^|\.)mqxd\.org$ (^|\.)mrbasic\.com$ (^|\.)mrbonus\.com$ (^|\.)mrface\.com$ (^|\.)mrslove\.com$ (^|\.)mrtweet\.com$ (^|\.)msa-it\.org$ (^|\.)msguancha\.com$ (^|\.)msha\.gov$ (^|\.)m\.slandr\.net$ (^|\.)mswe1\.org$ (^|\.)m-team\.cc$ (^|\.)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$ (^|\.)mx981\.com$ (^|\.)mx\.hao123\.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$ (^|\.)my-formosa\.com$ (^|\.)myforum\.com\.hk$ (^|\.)myforum\.com\.uk$ (^|\.)myfreecams\.com$ (^|\.)myfreepaysite\.com$ (^|\.)myfreshnet\.com$ (^|\.)myftp\.info$ (^|\.)myftp\.name$ (^|\.)myiphide\.com$ (^|\.)mykomica\.org$ (^|\.)mylftv\.com$ (^|\.)my\.mail\.ru$ (^|\.)mymediarom\.com$ (^|\.)mymoe\.moe$ (^|\.)mymom\.info$ (^|\.)mymusic\.net\.tw$ (^|\.)mynetav\.net$ (^|\.)mynetav\.org$ (^|\.)mynumber\.org$ (^|\.)my\.opera\.com$ (^|\.)myparagliding\.com$ (^|\.)my\.pcloud\.com$ (^|\.)mypicture\.info$ (^|\.)mypop3\.net$ (^|\.)mypop3\.org$ (^|\.)mypopescu\.com$ (^|\.)my-private-network\.co\.uk$ (^|\.)my-proxy\.com$ (^|\.)myradio\.hk$ (^|\.)myreadingmanga\.info$ (^|\.)mysecondarydns\.com$ (^|\.)myshare\.url\.com\.tw$ (^|\.)mysinablog\.com$ (^|\.)mysite\.verizon\.net$ (^|\.)myspacecdn\.com$ (^|\.)myspace\.com$ (^|\.)mytalkbox\.com$ (^|\.)mytizi\.com$ (^|\.)mywww\.biz$ (^|\.)myz\.info$ (^|\.)naacoalition\.org$ (^|\.)naitik\.net$ (^|\.)nakido\.com$ (^|\.)nakuz\.com$ (^|\.)nalandabodhi\.org$ (^|\.)nalandawest\.org$ (^|\.)namgyalmonastery\.org$ (^|\.)namgyal\.org$ (^|\.)namsisi\.com$ (^|\.)nanyang\.com$ (^|\.)nanyangpost\.com$ (^|\.)nanzao\.com$ (^|\.)naol\.ca$ (^|\.)naol\.cc$ (^|\.)nat\.gov\.tw$ (^|\.)national-lottery\.co\.uk$ (^|\.)nationsonline\.org$ (^|\.)nationwide\.com$ (^|\.)nat\.moe$ (^|\.)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$ (^|\.)netbirds\.com$ (^|\.)netcolony\.com$ (^|\.)net-fits\.pro$ (^|\.)netflix\.com$ (^|\.)netme\.cc$ (^|\.)netsneak\.com$ (^|\.)network54\.com$ (^|\.)networkedblogs\.com$ (^|\.)networktunnel\.net$ (^|\.)neverforget8964\.org$ (^|\.)new-3lunch\.net$ (^|\.)new96\.ca$ (^|\.)new-akiba\.com$ (^|\.)newcenturymc\.com$ (^|\.)newcenturynews\.com$ (^|\.)newchen\.com$ (^|\.)newgrounds\.com$ (^|\.)newipnow\.com$ (^|\.)newlandmagazine\.com\.au$ (^|\.)newnews\.ca$ (^|\.)news100\.com\.tw$ (^|\.)newsancai\.com$ (^|\.)newschinacomment\.org$ (^|\.)newscn\.org$ (^|\.)news\.cnyes\.com$ (^|\.)newsdetox\.ca$ (^|\.)newsdh\.com$ (^|\.)news\.hk\.msn\.com$ (^|\.)news\.hkpeanut\.com$ (^|\.)news\.msn\.com\.tw$ (^|\.)news\.nationalgeographic\.com$ (^|\.)news\.now\.com$ (^|\.)news\.omy\.sg$ (^|\.)newspeak\.cc$ (^|\.)news\.seehua\.com$ (^|\.)news\.sina\.com\.hk$ (^|\.)news\.sina\.com\.tw$ (^|\.)news\.sinchew\.com\.my$ (^|\.)news\.singtao\.ca$ (^|\.)newstamago\.com$ (^|\.)newstapa\.org$ (^|\.)newstarnet\.com$ (^|\.)news\.tvb\.com$ (^|\.)news\.tvbs\.com\.tw$ (^|\.)news\.yahoo\.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$ (^|\.)nobelprize\.org$ (^|\.)nobel\.se$ (^|\.)nobodycanstop\.us$ (^|\.)nofile\.io$ (^|\.)no-ip\.org$ (^|\.)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$ (^|\.)npsboost\.com$ (^|\.)nps\.gov$ (^|\.)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$ (^|\.)ntdtvla\.com$ (^|\.)ntdtv\.org$ (^|\.)ntdtv\.ru$ (^|\.)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$ (^|\.)nyaa\.eu$ (^|\.)nyaa\.si$ (^|\.)nydus\.ca$ (^|\.)nylon-angel\.com$ (^|\.)nylonstockingsonline\.com$ (^|\.)ny\.stgloballink\.com$ (^|\.)nytchina\.com$ (^|\.)nytcn\.me$ (^|\.)nytco\.com$ (^|\.)nyt\.com$ (^|\.)nytimes\.com$ (^|\.)nytimes\.map\.fastly\.net$ (^|\.)nytimg\.com$ (^|\.)nyti\.ms$ (^|\.)nytstyle\.com$ (^|\.)ny\.visiontimes\.com$ (^|\.)nzchinese\.com$ (^|\.)nzchinese\.net\.nz$ (^|\.)observechina\.net$ (^|\.)obutu\.com$ (^|\.)ocaspro\.com$ (^|\.)occupytiananmen\.com$ (^|\.)oclp\.hk$ (^|\.)ocreampies\.com$ (^|\.)ocry\.com$ (^|\.)october-review\.org$ (^|\.)oculuscdn\.com$ (^|\.)oculus\.com$ (^|\.)oex\.com$ (^|\.)offbeatchina\.com$ (^|\.)officeoftibet\.com$ (^|\.)ofile\.org$ (^|\.)ogaoga\.org$ (^|\.)ogate\.org$ (^|\.)oikos\.com\.tw$ (^|\.)oiktv\.com$ (^|\.)oizoblog\.com$ (^|\.)okayfreedom\.com$ (^|\.)okex\.com$ (^|\.)okk\.tw$ (^|\.)ok\.ru$ (^|\.)old-cat\.net$ (^|\.)old\.honeynet\.org$ (^|\.)old\.nabble\.com$ (^|\.)olumpo\.com$ (^|\.)olympicwatch\.org$ (^|\.)omgili\.com$ (^|\.)omni7\.jp$ (^|\.)omnitalk\.com$ (^|\.)omnitalk\.org$ (^|\.)on2\.com$ (^|\.)onapp\.com$ (^|\.)on\.cc$ (^|\.)onedrive\.live\.com$ (^|\.)onedumb\.com$ (^|\.)onejav\.com$ (^|\.)onion\.city$ (^|\.)onlinecha\.com$ (^|\.)online\.recoveryversion\.org$ (^|\.)onlineyoutube\.com$ (^|\.)onlytweets\.com$ (^|\.)onmoon\.com$ (^|\.)onmoon\.net$ (^|\.)onmypc\.biz$ (^|\.)onmypc\.info$ (^|\.)onmypc\.net$ (^|\.)onmypc\.org$ (^|\.)onmypc\.us$ (^|\.)onthehunt\.com$ (^|\.)ontrac\.com$ (^|\.)oopsforum\.com$ (^|\.)openallweb\.com$ (^|\.)open\.com\.hk$ (^|\.)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$ (^|\.)orientaldaily\.com\.my$ (^|\.)orient-doll\.com$ (^|\.)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$ (^|\.)owl\.li$ (^|\.)ow\.ly$ (^|\.)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$ (^|\.)page2rss\.com$ (^|\.)page\.bid\.yahoo\.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$ (^|\.)paperb\.us$ (^|\.)paper\.li$ (^|\.)paradisehill\.cc$ (^|\.)paradisepoker\.com$ (^|\.)parkansky\.com$ (^|\.)partycasino\.com$ (^|\.)partypoker\.com$ (^|\.)passion\.com$ (^|\.)passiontimes\.hk$ (^|\.)pastebin\.com$ (^|\.)paste\.ee$ (^|\.)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$ (^|\.)penchinese\.com$ (^|\.)penchinese\.net$ (^|\.)pengyulong\.com$ (^|\.)pen\.io$ (^|\.)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$ (^|\.)picacomiccn\.com$ (^|\.)picacomic\.com$ (^|\.)picasaweb\.com$ (^|\.)picidae\.net$ (^|\.)picturedip\.com$ (^|\.)picturesocial\.com$ (^|\.)pictures\.playboy\.com$ (^|\.)pimg\.tw$ (^|\.)pin6\.com$ (^|\.)pin-cong\.com$ (^|\.)pincong\.rocks$ (^|\.)ping\.fm$ (^|\.)pinimg\.com$ (^|\.)pinkrod\.com$ (^|\.)pinoy-n\.com$ (^|\.)pinterest\.at$ (^|\.)pinterest\.ca$ (^|\.)pinterest\.co\.kr$ (^|\.)pinterest\.com$ (^|\.)pinterest\.co\.uk$ (^|\.)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$ (^|\.)plus28\.com$ (^|\.)plusbb\.com$ (^|\.)plus\.codes$ (^|\.)pmatehunter\.com$ (^|\.)pmates\.com$ (^|\.)po2b\.com$ (^|\.)pobieramy\.top$ (^|\.)podictionary\.com$ (^|\.)pokerstars\.com$ (^|\.)pokerstars\.net$ (^|\.)politicalchina\.org$ (^|\.)politicalconsultation\.org$ (^|\.)politiscales\.net$ (^|\.)poloniex\.com$ (^|\.)polymerhk\.com$ (^|\.)polymer-project\.org$ (^|\.)popo\.tw$ (^|\.)popvote\.hk$ (^|\.)popyard\.com$ (^|\.)popyard\.org$ (^|\.)porn2\.com$ (^|\.)porn5\.com$ (^|\.)pornbase\.org$ (^|\.)porn\.com$ (^|\.)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$ (^|\.)powerapple\.com$ (^|\.)power\.com$ (^|\.)powercx\.com$ (^|\.)powerphoto\.org$ (^|\.)prayforchina\.net$ (^|\.)premeforwindows7\.com$ (^|\.)premproxy\.com$ (^|\.)presentationzen\.com$ (^|\.)presidentlee\.tw$ (^|\.)prestige-av\.com$ (^|\.)pride\.google$ (^|\.)prism-break\.org$ (^|\.)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$ (^|\.)psiphon3\.com$ (^|\.)psiphon\.ca$ (^|\.)psiphon\.civisec\.org$ (^|\.)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$ (^|\.)qanote\.com$ (^|\.)qgirl\.com\.tw$ (^|\.)qhigh\.com$ (^|\.)qiandao\.today$ (^|\.)qiangyou\.org$ (^|\.)qidian\.ca$ (^|\.)qienkuen\.org$ (^|\.)qi-gong\.me$ (^|\.)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$ (^|\.)quoracdn\.net$ (^|\.)quora\.com$ (^|\.)quran\.com$ (^|\.)quranexplorer\.com$ (^|\.)qusi8\.net$ (^|\.)qvodzy\.org$ (^|\.)qxbbs\.org$ (^|\.)qz\.com$ (^|\.)r18\.com$ (^|\.)radicalparty\.org$ (^|\.)radiko\.jp$ (^|\.)radioaustralia\.net\.au$ (^|\.)radiohilight\.net$ (^|\.)radiovaticana\.org$ (^|\.)radiovncr\.com$ (^|\.)rael\.org$ (^|\.)ra\.gg$ (^|\.)raggedbanner\.com$ (^|\.)raidcall\.com\.tw$ (^|\.)raidtalk\.com\.tw$ (^|\.)rainbowplan\.org$ (^|\.)raindrop\.io$ (^|\.)raizoji\.or\.jp$ (^|\.)ramcity\.com\.au$ (^|\.)rangwang\.biz$ (^|\.)rangzen\.com$ (^|\.)rangzen\.net$ (^|\.)rangzen\.org$ (^|\.)ranyunfei\.com$ (^|\.)rapbull\.net$ (^|\.)rapidgator\.net$ (^|\.)rapidmoviez\.com$ (^|\.)rapidvpn\.com$ (^|\.)rarbgprx\.org$ (^|\.)raremovie\.cc$ (^|\.)raremovie\.net$ (^|\.)rawgit\.com$ (^|\.)rawgithub\.com$ (^|\.)raw\.githubusercontent\.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$ (^|\.)redballoonsolidarity\.org$ (^|\.)redchinacn\.net$ (^|\.)redchinacn\.org$ (^|\.)redd\.it$ (^|\.)reddit\.com$ (^|\.)redditlist\.com$ (^|\.)redditmedia\.com$ (^|\.)redditstatic\.com$ (^|\.)redhotlabs\.com$ (^|\.)red-lang\.org$ (^|\.)redtube\.com$ (^|\.)referer\.us$ (^|\.)reflectivecode\.com$ (^|\.)registry\.google$ (^|\.)relaxbbs\.com$ (^|\.)relay\.com\.tw$ (^|\.)releaseinternational\.org$ (^|\.)religioustolerance\.org$ (^|\.)renminbao\.com$ (^|\.)renyurenquan\.org$ (^|\.)research\.jmsc\.hku\.hk$ (^|\.)resilio\.com$ (^|\.)retweeteffect\.com$ (^|\.)retweetist\.com$ (^|\.)retweetrank\.com$ (^|\.)reuters\.com$ (^|\.)reutersmedia\.net$ (^|\.)revleft\.com$ (^|\.)revver\.com$ (^|\.)rfachina\.com$ (^|\.)rfalive1\.akacast\.akamaistream\.net$ (^|\.)rfamobile\.org$ (^|\.)rfa\.org$ (^|\.)rfaweb\.org$ (^|\.)rferl\.org$ (^|\.)rfi\.fr$ (^|\.)rfi\.my$ (^|\.)rg3\.github\.io$ (^|\.)rightbtc\.com$ (^|\.)rigpa\.org$ (^|\.)riku\.me$ (^|\.)rileyguide\.com$ (^|\.)riseup\.net$ (^|\.)ritouki\.jp$ (^|\.)ritter\.vg$ (^|\.)rixcloud\.com$ (^|\.)rixcloud\.us$ (^|\.)rlwlw\.com$ (^|\.)rmjdw132\.info$ (^|\.)rmjdw\.com$ (^|\.)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$ (^|\.)rthklive2-lh\.akamaihd\.net$ (^|\.)rthk\.org\.hk$ (^|\.)rti\.org\.tw$ (^|\.)rtycminnesota\.org$ (^|\.)ruanyifeng\.com$ (^|\.)rukor\.org$ (^|\.)runbtx\.com$ (^|\.)rushbee\.com$ (^|\.)ruten\.com\.tw$ (^|\.)rutube\.ru$ (^|\.)ruyiseek\.com$ (^|\.)rxhj\.net$ (^|\.)s1heng\.com$ (^|\.)s1\.nudezz\.com$ (^|\.)s1s1s1\.com$ (^|\.)s3\.amazonaws\.com$ (^|\.)s3-ap-northeast-1\.amazonaws\.com$ (^|\.)s3-ap-southeast-2\.amazonaws\.com$ (^|\.)s8forum\.com$ (^|\.)sacks\.com$ (^|\.)sacom\.hk$ (^|\.)sadistic-v\.com$ (^|\.)sadpanda\.us$ (^|\.)safervpn\.com$ (^|\.)safety\.google$ (^|\.)sa\.hao123\.com$ (^|\.)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$ (^|\.)scache1\.vzw\.com$ (^|\.)scache2\.vzw\.com$ (^|\.)scache\.vzw\.com$ (^|\.)scasino\.com$ (^|\.)schema\.org$ (^|\.)sciencenets\.com$ (^|\.)scieron\.com$ (^|\.)scmpchinese\.com$ (^|\.)scmp\.com$ (^|\.)scramble\.io$ (^|\.)scribd\.com$ (^|\.)scriptspot\.com$ (^|\.)s-cute\.com$ (^|\.)s-dragon\.org$ (^|\.)seapuff\.com$ (^|\.)search\.aol\.com$ (^|\.)searchtruth\.com$ (^|\.)search\.xxx$ (^|\.)search\.yahoo\.co\.jp$ (^|\.)search\.yahoo\.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$ (^|\.)sex3\.com$ (^|\.)sex8\.cc$ (^|\.)sexandsubmission\.com$ (^|\.)sexbot\.com$ (^|\.)sex\.com$ (^|\.)sexhuang\.com$ (^|\.)sexhu\.com$ (^|\.)sexidude\.com$ (^|\.)sexinsex\.net$ (^|\.)sextvx\.com$ (^|\.)sexxxy\.biz$ (^|\.)sfileydy\.com$ (^|\.)sf\.net$ (^|\.)sfshibao\.com$ (^|\.)sftindia\.org$ (^|\.)sftuk\.org$ (^|\.)shadeyouvpn\.com$ (^|\.)shadow\.ma$ (^|\.)shadowsky\.xyz$ (^|\.)shadowsocks9\.com$ (^|\.)shadowsocks\.asia$ (^|\.)shadowsocks\.be$ (^|\.)shadowsocks\.com$ (^|\.)shadowsocks\.com\.hk$ (^|\.)shadowsocks\.org$ (^|\.)shadowsocks-r\.com$ (^|\.)shambalapost\.com$ (^|\.)shambhalasun\.com$ (^|\.)shangfang\.org$ (^|\.)shapeservices\.com$ (^|\.)share\.america\.gov$ (^|\.)sharebee\.com$ (^|\.)sharecool\.org$ (^|\.)share\.dmhy\.org$ (^|\.)share\.ovi\.com$ (^|\.)share\.youthwant\.com\.tw$ (^|\.)sharpdaily\.com\.hk$ (^|\.)sharpdaily\.hk$ (^|\.)sharpdaily\.tw$ (^|\.)shattered\.io$ (^|\.)shat-tibet\.com$ (^|\.)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$ (^|\.)shwchurch3\.com$ (^|\.)shwchurch\.org$ (^|\.)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$ (^|\.)sinoants\.com$ (^|\.)sinocast\.com$ (^|\.)sinocism\.com$ (^|\.)sino-monthly\.com$ (^|\.)sinomontreal\.ca$ (^|\.)sinonet\.ca$ (^|\.)sinopitt\.info$ (^|\.)sinoquebec\.com$ (^|\.)sipml5\.org$ (^|\.)sis001\.com$ (^|\.)sis001\.us$ (^|\.)sis\.xxx$ (^|\.)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$ (^|\.)smartdnsproxy\.com$ (^|\.)smarthide\.com$ (^|\.)smchbooks\.com$ (^|\.)smh\.com\.au$ (^|\.)smhric\.org$ (^|\.)smith\.edu$ (^|\.)sm-miracle\.com$ (^|\.)smyxy\.org$ (^|\.)snapchat\.com$ (^|\.)snaptu\.com$ (^|\.)sndcdn\.com$ (^|\.)sneakme\.net$ (^|\.)snowlionpub\.com$ (^|\.)sobees\.com$ (^|\.)socialwhale\.com$ (^|\.)sockscap64\.com$ (^|\.)sockslist\.net$ (^|\.)socks-proxy\.net$ (^|\.)soc\.mil$ (^|\.)socrec\.org$ (^|\.)sodatea\.github\.io$ (^|\.)sod\.co\.jp$ (^|\.)softether\.co\.jp$ (^|\.)softether-download\.com$ (^|\.)softether\.org$ (^|\.)softfamous\.com$ (^|\.)softsmirror\.cf$ (^|\.)softwarebychuck\.com$ (^|\.)softwaredownload\.gitbooks\.io$ (^|\.)sogclub\.com$ (^|\.)sogrady\.me$ (^|\.)sohcradio\.com$ (^|\.)sohfrance\.org$ (^|\.)soh\.tw$ (^|\.)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$ (^|\.)soulcaliburhentai\.net$ (^|\.)soul-plus\.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$ (^|\.)ss7\.vzw\.com$ (^|\.)ss\.carryzhou\.com$ (^|\.)ssglobal\.co$ (^|\.)ssglobal\.me$ (^|\.)ssh91\.com$ (^|\.)ssl443\.org$ (^|\.)ss\.levyhsu\.com$ (^|\.)ss-link\.com$ (^|\.)ssl\.webpack\.de$ (^|\.)sspanel\.net$ (^|\.)sspro\.ml$ (^|\.)ss\.pythonic\.life$ (^|\.)ssrshare\.com$ (^|\.)ssr\.tools$ (^|\.)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$ (^|\.)static01\.nyt\.com$ (^|\.)static\.comico\.tw$ (^|\.)static-economist\.com$ (^|\.)staticflickr\.com$ (^|\.)static\.shemalez\.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$ (^|\.)stormmediagroup\.com$ (^|\.)storm\.mg$ (^|\.)stoweboyd\.com$ (^|\.)stranabg\.com$ (^|\.)straplessdildo\.com$ (^|\.)streamingthe\.net$ (^|\.)streema\.com$ (^|\.)strikingly\.com$ (^|\.)strongvpn\.com$ (^|\.)strongwindpress\.com$ (^|\.)studentsforafreetibet\.org$ (^|\.)student\.tw$ (^|\.)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$ (^|\.)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$ (^|\.)tagwalk\.com$ (^|\.)tagwa\.org\.au$ (^|\.)tahr\.org\.tw$ (^|\.)taipei\.gov\.tw$ (^|\.)taipeisociety\.org$ (^|\.)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$ (^|\.)taiwan-sex\.com$ (^|\.)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$ (^|\.)tbicn\.org$ (^|\.)tbi\.org\.hk$ (^|\.)tbjyt\.org$ (^|\.)tbpic\.info$ (^|\.)tbrc\.org$ (^|\.)tbsec\.org$ (^|\.)tbskkinabalu\.page\.tl$ (^|\.)tbsmalaysia\.org$ (^|\.)tbsn\.org$ (^|\.)tbs-rainbow\.org$ (^|\.)tbsseattle\.org$ (^|\.)tbssqh\.org$ (^|\.)tbswd\.org$ (^|\.)tbtemple\.org\.uk$ (^|\.)tbthouston\.org$ (^|\.)tccwonline\.org$ (^|\.)tcewf\.org$ (^|\.)tchrd\.org$ (^|\.)tcnynj\.org$ (^|\.)t\.co$ (^|\.)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$ (^|\.)telegramdownload\.com$ (^|\.)telegram\.me$ (^|\.)telegram\.org$ (^|\.)telegraph\.co\.uk$ (^|\.)telesco\.pe$ (^|\.)tellme\.pw$ (^|\.)tenacy\.com$ (^|\.)tensorflow\.org$ (^|\.)tenzinpalmo\.com$ (^|\.)terminus2049\.github\.io$ (^|\.)tew\.org$ (^|\.)textnow\.me$ (^|\.)tfhub\.dev$ (^|\.)t-g\.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$ (^|\.)th\.hao123\.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$ (^|\.)tiantibooks\.org$ (^|\.)tianti\.io$ (^|\.)tianyantong\.org\.cn$ (^|\.)tianzhu\.org$ (^|\.)tibet3rdpole\.org$ (^|\.)tibetaction\.net$ (^|\.)tibetaid\.org$ (^|\.)tibetalk\.com$ (^|\.)tibetanaidproject\.org$ (^|\.)tibetan-alliance\.org$ (^|\.)tibetanarts\.org$ (^|\.)tibetanbuddhistinstitute\.org$ (^|\.)tibetancommunity\.org$ (^|\.)tibetancommunityuk\.net$ (^|\.)tibetanculture\.org$ (^|\.)tibetanfeministcollective\.org$ (^|\.)tibetan\.fr$ (^|\.)tibetanjournal\.com$ (^|\.)tibetanlanguage\.org$ (^|\.)tibetanliberation\.org$ (^|\.)tibetanpaintings\.com$ (^|\.)tibetanphotoproject\.com$ (^|\.)tibetanpoliticalreview\.org$ (^|\.)tibetanreview\.net$ (^|\.)tibetansports\.org$ (^|\.)tibetanwomen\.org$ (^|\.)tibetanyouthcongress\.org$ (^|\.)tibetanyouth\.org$ (^|\.)tibet\.a\.se$ (^|\.)tibet\.at$ (^|\.)tibet\.ca$ (^|\.)tibetcharity\.dk$ (^|\.)tibetcharity\.in$ (^|\.)tibetchild\.org$ (^|\.)tibetcity\.com$ (^|\.)tibetcollection\.com$ (^|\.)tibet\.com$ (^|\.)tibetcorps\.org$ (^|\.)tibet-envoy\.eu$ (^|\.)tibetexpress\.net$ (^|\.)tibetfocus\.com$ (^|\.)tibet-foundation\.org$ (^|\.)tibet\.fr$ (^|\.)tibetfund\.org$ (^|\.)tibetgermany\.com$ (^|\.)tibetgermany\.de$ (^|\.)tibethaus\.com$ (^|\.)tibetheritagefund\.org$ (^|\.)tibethouse\.jp$ (^|\.)tibethouse\.org$ (^|\.)tibet-house-trust\.co\.uk$ (^|\.)tibethouse\.us$ (^|\.)tibet-info\.net$ (^|\.)tibetinfonet\.net$ (^|\.)tibet-initiative\.de$ (^|\.)tibetjustice\.org$ (^|\.)tibetkomite\.dk$ (^|\.)tibetlibre\.free\.fr$ (^|\.)tibet-munich\.de$ (^|\.)tibetmuseum\.org$ (^|\.)tibet\.net$ (^|\.)tibetnetwork\.org$ (^|\.)tibet\.nu$ (^|\.)tibetoffice\.ch$ (^|\.)tibetoffice\.com\.au$ (^|\.)tibetoffice\.eu$ (^|\.)tibetoffice\.org$ (^|\.)tibetonline\.com$ (^|\.)tibetonline\.tv$ (^|\.)tibetoralhistory\.org$ (^|\.)tibet\.org$ (^|\.)tibet\.org\.tw$ (^|\.)tibetpolicy\.eu$ (^|\.)tibetrelieffund\.co\.uk$ (^|\.)tibetsites\.com$ (^|\.)tibet\.sk$ (^|\.)tibetsociety\.com$ (^|\.)tibetsun\.com$ (^|\.)tibetsupportgroup\.org$ (^|\.)tibetswiss\.ch$ (^|\.)tibettelegraph\.com$ (^|\.)tibettimes\.net$ (^|\.)tibet\.to$ (^|\.)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$ (^|\.)t\.me$ (^|\.)tmi\.me$ (^|\.)tmpp\.org$ (^|\.)tn1\.shemalez\.com$ (^|\.)tn2\.shemalez\.com$ (^|\.)tn3\.shemalez\.com$ (^|\.)tnaflix\.com$ (^|\.)tngrnow\.com$ (^|\.)tngrnow\.net$ (^|\.)tnp\.org$ (^|\.)togetter\.com$ (^|\.)toh\.info$ (^|\.)tokyo-247\.com$ (^|\.)tokyocn\.com$ (^|\.)tokyo-hot\.com$ (^|\.)tokyo-porn-tube\.com$ (^|\.)tongil\.or\.kr$ (^|\.)tono-oka\.jp$ (^|\.)tonyyan\.net$ (^|\.)toodoc\.com$ (^|\.)toonel\.net$ (^|\.)top10vpn\.com$ (^|\.)top81\.ws$ (^|\.)topbtc\.com$ (^|\.)topic\.youthwant\.com\.tw$ (^|\.)topnews\.in$ (^|\.)to-porno\.com$ (^|\.)toppornsites\.com$ (^|\.)topshareware\.com$ (^|\.)topsy\.com$ (^|\.)toptip\.ca$ (^|\.)top\.tv$ (^|\.)tora\.to$ (^|\.)tor\.blingblingsquad\.net$ (^|\.)torcn\.com$ (^|\.)tor\.cn\.uptodown\.com$ (^|\.)torguard\.net$ (^|\.)torproject\.org$ (^|\.)torrentprivacy\.com$ (^|\.)torrentproject\.se$ (^|\.)torrenty\.org$ (^|\.)torrentz\.eu$ (^|\.)tor\.updatestar\.com$ (^|\.)torvpn\.com$ (^|\.)t\.orzdream\.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$ (^|\.)transparency\.org$ (^|\.)trans\.wenweipo\.com$ (^|\.)treemall\.com\.tw$ (^|\.)trendsmap\.com$ (^|\.)trialofccp\.org$ (^|\.)trickip\.net$ (^|\.)trickip\.org$ (^|\.)trimondi\.de$ (^|\.)trouw\.nl$ (^|\.)trtc\.com\.tw$ (^|\.)trt\.net\.tr$ (^|\.)truebuddha-md\.org$ (^|\.)trulyergonomic\.com$ (^|\.)truth101\.co\.tv$ (^|\.)truthontour\.org$ (^|\.)truveo\.com$ (^|\.)tryheart\.jp$ (^|\.)tsctv\.net$ (^|\.)tsdr\.uspto\.gov$ (^|\.)tsemtulku\.com$ (^|\.)tsquare\.tv$ (^|\.)tsunagarumon\.com$ (^|\.)tsu\.org\.tw$ (^|\.)tt1069\.com$ (^|\.)tttan\.com$ (^|\.)ttvnw\.net$ (^|\.)tu8964\.com$ (^|\.)tubaholic\.com$ (^|\.)tube8\.com$ (^|\.)tube911\.com$ (^|\.)tube\.com$ (^|\.)tubecup\.com$ (^|\.)tubegals\.com$ (^|\.)tubeislam\.com$ (^|\.)tubepornclassic\.com$ (^|\.)tubestack\.com$ (^|\.)tubewolf\.com$ (^|\.)tuibeitu\.net$ (^|\.)tuidang\.net$ (^|\.)tuidang\.org$ (^|\.)tuidang\.se$ (^|\.)tui\.orzdream\.com$ (^|\.)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$ (^|\.)tvants\.com$ (^|\.)tvboxnow\.com$ (^|\.)tv\.com$ (^|\.)tvider\.com$ (^|\.)tvmost\.com\.hk$ (^|\.)tvplayvideos\.com$ (^|\.)tvunetworks\.com$ (^|\.)tw01\.org$ (^|\.)twaitter\.com$ (^|\.)tw\.answers\.yahoo\.com$ (^|\.)twapperkeeper\.com$ (^|\.)twaud\.io$ (^|\.)twavi\.com$ (^|\.)twbbs\.net\.tw$ (^|\.)twbbs\.org$ (^|\.)twbbs\.tw$ (^|\.)tw\.bid\.yahoo\.com$ (^|\.)tw-blog\.com$ (^|\.)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$ (^|\.)tw\.gigacircle\.com$ (^|\.)twgreatdaily\.com$ (^|\.)tw\.hao123\.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$ (^|\.)twimg\.edgesuite\.net$ (^|\.)twindexx\.com$ (^|\.)twip\.me$ (^|\.)twipple\.jp$ (^|\.)tw\.iqiyi\.com$ (^|\.)twishort\.com$ (^|\.)twistar\.cc$ (^|\.)twisterio\.com$ (^|\.)twister\.net\.co$ (^|\.)twisternow\.com$ (^|\.)twistory\.net$ (^|\.)twit2d\.com$ (^|\.)twitbrowser\.net$ (^|\.)twitcause\.com$ (^|\.)twitchcdn\.net$ (^|\.)twitch\.tv$ (^|\.)twitgether\.com$ (^|\.)twitgoo\.com$ (^|\.)twitiq\.com$ (^|\.)twitlonger\.com$ (^|\.)twitmania\.com$ (^|\.)twitoaster\.com$ (^|\.)twitonmsn\.com$ (^|\.)twitpic\.com$ (^|\.)twitstat\.com$ (^|\.)twittbot\.net$ (^|\.)twitter4j\.org$ (^|\.)twitter\.com$ (^|\.)twittercounter\.com$ (^|\.)twitterfeed\.com$ (^|\.)twittergadget\.com$ (^|\.)twitter\.jp$ (^|\.)twitterkr\.com$ (^|\.)twittermail\.com$ (^|\.)twitterrific\.com$ (^|\.)twittertim\.es$ (^|\.)twitthat\.com$ (^|\.)twitturk\.com$ (^|\.)twitturly\.com$ (^|\.)twitvid\.com$ (^|\.)twitzap\.com$ (^|\.)twiyia\.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$ (^|\.)twnorth\.org\.tw$ (^|\.)tw-npo\.org$ (^|\.)twskype\.com$ (^|\.)twstar\.net$ (^|\.)tw\.streetvoice\.com$ (^|\.)twtkr\.com$ (^|\.)tw\.tomonews\.net$ (^|\.)twtr2src\.ogaoga\.org$ (^|\.)twtrland\.com$ (^|\.)twt\.tl$ (^|\.)twttr\.com$ (^|\.)twurl\.nl$ (^|\.)tw\.voa\.mobi$ (^|\.)twyac\.org$ (^|\.)tw\.yahoo\.com$ (^|\.)txxx\.com$ (^|\.)tycool\.com$ (^|\.)typepad\.com$ (^|\.)u15\.info$ (^|\.)u9un\.com$ (^|\.)ub0\.cc$ (^|\.)ubddns\.org$ (^|\.)uberproxy\.net$ (^|\.)ucdc1998\.org$ (^|\.)uchicago\.edu$ (^|\.)uc-japan\.org$ (^|\.)uderzo\.it$ (^|\.)udnbkk\.com$ (^|\.)udn\.com$ (^|\.)udn\.com\.tw$ (^|\.)uforadio\.com\.tw$ (^|\.)ufreevpn\.com$ (^|\.)ugo\.com$ (^|\.)uhdwallpapers\.org$ (^|\.)uhrp\.org$ (^|\.)uighurbiz\.net$ (^|\.)uighur\.narod\.ru$ (^|\.)uighur\.nl$ (^|\.)ukcdp\.co\.uk$ (^|\.)ukliferadio\.co\.uk$ (^|\.)uku\.im$ (^|\.)ulike\.net$ (^|\.)ulop\.net$ (^|\.)ultravpn\.fr$ (^|\.)ultraxs\.com$ (^|\.)umich\.edu$ (^|\.)unblock\.cn\.com$ (^|\.)unblockdmm\.com$ (^|\.)unblocker\.yt$ (^|\.)unblocksit\.es$ (^|\.)unblock-us\.com$ (^|\.)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$ (^|\.)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$ (^|\.)us\.to$ (^|\.)ustream\.tv$ (^|\.)usunitednews\.com$ (^|\.)usus\.cc$ (^|\.)utopianpal\.com$ (^|\.)uu-gg\.com$ (^|\.)uukanshu\.com$ (^|\.)uvwxyz\.xyz$ (^|\.)uwants\.com$ (^|\.)uwants\.net$ (^|\.)uyghuramerican\.org$ (^|\.)uyghurcanadiansociety\.org$ (^|\.)uyghurcongress\.org$ (^|\.)uyghur\.co\.uk$ (^|\.)uyghurensemble\.co\.uk$ (^|\.)uyghur-j\.org$ (^|\.)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$ (^|\.)vcfbuilder\.org$ (^|\.)vcf-online\.org$ (^|\.)vds\.rightster\.com$ (^|\.)vegasred\.com$ (^|\.)vegas\.williamhill\.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$ (^|\.)vidble\.com$ (^|\.)video\.aol\.ca$ (^|\.)video\.aol\.com$ (^|\.)video\.aol\.co\.uk$ (^|\.)video\.ap\.org$ (^|\.)videobam\.com$ (^|\.)videodetective\.com$ (^|\.)video\.fdbox\.com$ (^|\.)video\.foxbusiness\.com$ (^|\.)videomega\.tv$ (^|\.)videomo\.com$ (^|\.)video\.pbs\.org$ (^|\.)videopediaworld\.com$ (^|\.)videopress\.com$ (^|\.)video\.yahoo\.com$ (^|\.)vidinfo\.org$ (^|\.)vid\.me$ (^|\.)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$ (^|\.)vnet\.link$ (^|\.)vn\.hao123\.com$ (^|\.)voa-11\.akacast\.akamaistream\.net$ (^|\.)voacantonese\.com$ (^|\.)voachineseblog\.com$ (^|\.)voachinese\.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$ (^|\.)vpn4all\.com$ (^|\.)vpn\.ac$ (^|\.)vpnaccount\.org$ (^|\.)vpnaccounts\.com$ (^|\.)vpnbook\.com$ (^|\.)vpn\.cjb\.net$ (^|\.)vpn\.cmu\.edu$ (^|\.)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$ (^|\.)vpn\.sv\.cmu\.edu$ (^|\.)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$ (^|\.)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$ (^|\.)washingtonpost\.com$ (^|\.)watch8x\.com$ (^|\.)watchinese\.com$ (^|\.)watchmygf\.net$ (^|\.)wattpad\.com$ (^|\.)waveprotocol\.org$ (^|\.)wav\.tv$ (^|\.)waymo\.com$ (^|\.)wda\.gov\.tw$ (^|\.)wdf5\.com$ (^|\.)wearehairy\.com$ (^|\.)wearn\.com$ (^|\.)web2project\.net$ (^|\.)webbang\.net$ (^|\.)web\.dev$ (^|\.)webevader\.org$ (^|\.)webfreer\.com$ (^|\.)webjb\.org$ (^|\.)weblagu\.com$ (^|\.)webmproject\.org$ (^|\.)webrtc\.org$ (^|\.)webrush\.net$ (^|\.)website\.informer\.com$ (^|\.)websitepulse\.com$ (^|\.)webs-tv\.net$ (^|\.)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$ (^|\.)w\.idaiwan\.com$ (^|\.)widevine\.com$ (^|\.)wikaba\.com$ (^|\.)wiki\.cnitter\.com$ (^|\.)wiki\.esu\.im$ (^|\.)wiki\.gamerp\.jp$ (^|\.)wiki\.jqueryui\.com$ (^|\.)wiki\.keso\.cn$ (^|\.)wikileaks\.ch$ (^|\.)wikileaks\.com$ (^|\.)wikileaks\.de$ (^|\.)wikileaks\.eu$ (^|\.)wikileaks-forum\.com$ (^|\.)wikileaks\.lu$ (^|\.)wikileaks\.org$ (^|\.)wikileaks\.pl$ (^|\.)wikilivres\.info$ (^|\.)wikimapia\.org$ (^|\.)wiki\.moegirl\.org$ (^|\.)wiki\.oauth\.net$ (^|\.)wikipedia\.org$ (^|\.)wiki\.phonegap\.com$ (^|\.)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$ (^|\.)wnacg\.com$ (^|\.)wnacg\.org$ (^|\.)wn\.com$ (^|\.)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$ (^|\.)wo\.tc$ (^|\.)wow\.com$ (^|\.)wowgirls\.com$ (^|\.)wowlegacy\.ml$ (^|\.)wow-life\.net$ (^|\.)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$ (^|\.)wsjhk\.com$ (^|\.)wsj\.net$ (^|\.)wtbn\.org$ (^|\.)wtfpeople\.com$ (^|\.)wuerkaixi\.com$ (^|\.)wufafangwen\.com$ (^|\.)wufi\.org\.tw$ (^|\.)wuguoguang\.com$ (^|\.)wujieliulan\.com$ (^|\.)wujie\.net$ (^|\.)wukangrui\.net$ (^|\.)wuw\.red$ (^|\.)wuyanblog\.com$ (^|\.)wwitv\.com$ (^|\.)www1\.american\.edu$ (^|\.)www1\.biz$ (^|\.)www2\.ohchr\.org$ (^|\.)www2\.rocketbbs\.com$ (^|\.)www\.abclite\.net$ (^|\.)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$ (^|\.)wwwhost\.biz$ (^|\.)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\.metro\.taipei$ (^|\.)www\.monlamit\.org$ (^|\.)www\.moztw\.org$ (^|\.)www\.m-sport\.co\.uk$ (^|\.)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\.wangruowang\.org$ (^|\.)www\.wan-press\.org$ (^|\.)www\.websnapr\.com$ (^|\.)www\.zensur\.freerk\.com$ (^|\.)wzyboy\.im$ (^|\.)x1949x\.com$ (^|\.)x24hr\.com$ (^|\.)x365x\.com$ (^|\.)xanga\.com$ (^|\.)x-art\.com$ (^|\.)xa\.yimg\.com$ (^|\.)xbabe\.com$ (^|\.)x-berry\.com$ (^|\.)xbookcn\.com$ (^|\.)xbtce\.com$ (^|\.)xcafe\.in$ (^|\.)xcity\.jp$ (^|\.)x\.company$ (^|\.)xcritic\.com$ (^|\.)xda-developers\.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$ (^|\.)x-wall\.org$ (^|\.)xxbbx\.com$ (^|\.)xxlmovies\.com$ (^|\.)xxuz\.com$ (^|\.)xxx\.com$ (^|\.)xxxfuckmom\.com$ (^|\.)xxxx\.com\.au$ (^|\.)xxx\.xxx$ (^|\.)xxxy\.biz$ (^|\.)xxxy\.info$ (^|\.)xxxymovies\.com$ (^|\.)xysblogs\.org$ (^|\.)xys\.dxiong\.com$ (^|\.)xys\.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$ (^|\.)yes123\.com\.tw$ (^|\.)yesasia\.com$ (^|\.)yesasia\.com\.hk$ (^|\.)yes-news\.com$ (^|\.)yespornplease\.com$ (^|\.)yes\.xxx$ (^|\.)yeyeclub\.com$ (^|\.)ygto\.com$ (^|\.)yhcw\.net$ (^|\.)yibada\.com$ (^|\.)yibaochina\.com$ (^|\.)yidio\.com$ (^|\.)yigeni\.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$ (^|\.)youdontcare\.com$ (^|\.)you-get\.org$ (^|\.)youjizz\.com$ (^|\.)youmaker\.com$ (^|\.)youngpornvideos\.com$ (^|\.)youngspiration\.hk$ (^|\.)youpai\.org$ (^|\.)youporn\.com$ (^|\.)youporngay\.com$ (^|\.)yourepeat\.com$ (^|\.)your-freedom\.net$ (^|\.)yourlisten\.com$ (^|\.)yourlust\.com$ (^|\.)yourprivatevpn\.com$ (^|\.)yourtrap\.com$ (^|\.)yousendit\.com$ (^|\.)youshun12\.com$ (^|\.)youthnetradio\.org$ (^|\.)youtu\.be$ (^|\.)youtubecn\.com$ (^|\.)youtube\.com$ (^|\.)youtubeeducation\.com$ (^|\.)youtubegaming\.com$ (^|\.)youtube-nocookie\.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$ (^|\.)zhanbin\.net$ (^|\.)zhangboli\.net$ (^|\.)zhangtianliang\.com$ (^|\.)zhanlve\.org$ (^|\.)zhao\.1984\.city$ (^|\.)zhao\.jinhai\.de$ (^|\.)zh\.bitterwinter\.org$ (^|\.)zh\.ecdm\.wikia\.com$ (^|\.)zhenghui\.org$ (^|\.)zhengjian\.org$ (^|\.)zhengwunet\.org$ (^|\.)zhenlibu1984\.com$ (^|\.)zhenlibu\.info$ (^|\.)zhenxiang\.biz$ (^|\.)zhinengluyou\.com$ (^|\.)zhongguo\.ca$ (^|\.)zhongguorenquan\.org$ (^|\.)zhongguotese\.net$ (^|\.)zhongmeng\.org$ (^|\.)zhoushuguang\.com$ (^|\.)zh\.pokerstrategy\.com$ (^|\.)zh\.pttpedia\.wikia\.com$ (^|\.)zhreader\.com$ (^|\.)zhuangbi\.me$ (^|\.)zhuanxing\.cn$ (^|\.)zhuatieba\.com$ (^|\.)zhuichaguoji\.org$ (^|\.)zh\.uncyclopedia\.wikia\.com$ (^|\.)zh\.wikinews\.org$ (^|\.)zh\.wikisource\.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$ (^|\.)zuobiao\.me$ (^|\.)zuo\.la$ (^|\.)zuola\.com$ (^|\.)zvereff\.com$ (^|\.)zynaima\.com$ (^|\.)zynamics\.com$ (^|\.)zyns\.com$ (^|\.)zyzc9\.com$ (^|\.)zzcartoon\.com$ (^|\.)zzcloud\.me$ (^|\.)zzux\.com$ # Amazon (^|\.)amazon\.co\.jp$ (^|\.)amazon\.com$ (^|\.)amazonaws\.com$ 13.32.0.0/15 13.35.0.0/17 18.184.0.0/15 18.194.0.0/15 18.208.0.0/13 18.232.0.0/14 52.58.0.0/15 52.74.0.0/16 52.77.0.0/16 52.84.0.0/15 52.200.0.0/13 54.93.0.0/16 54.156.0.0/14 54.226.0.0/15 54.230.156.0/22 # BBC (^|\.)\w*uk-live\w*\.\w*$ (^|\.)bbc\.co$ (^|\.)bbc\.com$ # Discord (^|\.)discord\.gg$ (^|\.)discord\.media$ (^|\.)discordapp\.com$ (^|\.)discordapp\.net$ # Facebook (^|\.)facebook\.com$ (^|\.)fb\.com$ (^|\.)fb\.me$ (^|\.)fbcdn\.com$ (^|\.)fbcdn\.net$ 31.13.24.0/21 31.13.64.0/18 45.64.40.0/22 66.220.144.0/20 69.63.176.0/20 69.171.224.0/19 74.119.76.0/22 103.4.96.0/22 129.134.0.0/17 157.240.0.0/17 173.252.64.0/18 179.60.192.0/22 185.60.216.0/22 204.15.20.0/22 # Github (^|\.)github\.com$ (^|\.)github\.io$ (^|\.)githubapp\.com$ (^|\.)githubassets\.com$ (^|\.)githubusercontent\.com$ (^|\.)s3\.amazonaws\.com$ # Google (^|\.)1e100\.net$ (^|\.)2mdn\.net$ (^|\.)app-measurement\.net$ (^|\.)g\.co$ (^|\.)ggpht\.com$ (^|\.)goo\.gl$ (^|\.)googleapis\.cn$ (^|\.)googleapis\.com$ (^|\.)gstatic\.cn$ (^|\.)gstatic\.com$ (^|\.)gvt0\.com$ (^|\.)gvt1\.com$ (^|\.)gvt2\.com$ (^|\.)gvt3\.com$ (^|\.)xn--ngstr-lra8j\.com$ (^|\.)youtu\.be$ (^|\.)youtube-nocookie\.com$ (^|\.)youtube\.com$ (^|\.)yt\.be$ (^|\.)ytimg\.com$ 8.8.8.8 8.8.4.4 74.125.0.0/16 173.194.0.0/16 # Instagram (^|\.)cdninstagram\.com$ (^|\.)instagram\.com$ (^|\.)instagr\.am$ (^|\.)akamaihd\.net$ # Kakao Talk (^|\.)kakao\.com$ (^|\.)kakao\.co\.kr$ (^|\.)kakaocdn\.net$ 1.201.0.0/24 27.0.236.0/22 103.27.148.0/22 103.246.56.0/22 110.76.140.0/22 113.61.104.0/22 # Line (^|\.)lin\.ee$ (^|\.)line-apps\.com$ (^|\.)line-cdn\.net$ (^|\.)line-scdn\.net$ (^|\.)line\.me$ (^|\.)line\.naver\.jp$ (^|\.)nhncorp\.jp$ 103.2.28.0/24 103.2.30.0/23 119.235.224.0/24 119.235.232.0/24 119.235.235.0/24 119.235.236.0/23 147.92.128.0/17 203.104.128.0/19 # Microsoft (^|\.)1drv\.com$ (^|\.)aadrm\.com$ (^|\.)acompli\.com$ (^|\.)acompli\.net$ (^|\.)aka\.ms$ (^|\.)akadns\.net$ (^|\.)aspnetcdn\.com$ (^|\.)assets-yammer\.com$ (^|\.)azure\.com$ (^|\.)azure\.net$ (^|\.)azureedge\.net$ (^|\.)azurerms\.com$ (^|\.)bing\.com$ (^|\.)cloudapp\.net$ (^|\.)cloudappsecurity\.com$ (^|\.)edgesuite\.net$ (^|\.)getmicrosoftkey\.com$ (^|\.)gfx\.ms$ (^|\.)hotmail\.com$ (^|\.)live\.com$ (^|\.)live\.net$ (^|\.)lync\.com$ (^|\.)microsoft\.com$ (^|\.)microsoftazuread-sso\.com$ (^|\.)microsoftonline-p\.com$ (^|\.)microsoftonline-p\.net$ (^|\.)microsoftonline\.com$ (^|\.)microsoftstream\.com$ (^|\.)msappproxy\.net$ (^|\.)msauth\.net$ (^|\.)msauthimages\.net$ (^|\.)msecnd\.net$ (^|\.)msedge\.net$ (^|\.)msft\.net$ (^|\.)msftauth\.net$ (^|\.)msftauthimages\.net$ (^|\.)msftidentity\.com$ (^|\.)msidentity\.com$ (^|\.)msn\.com$ (^|\.)msocdn\.com$ (^|\.)msocsp\.com$ (^|\.)mstea\.ms$ (^|\.)o365weve\.com$ (^|\.)oaspapps\.com$ (^|\.)office\.com$ (^|\.)office\.net$ (^|\.)office365\.com$ (^|\.)officecdn-microsoft-com\.akamaized\.net$ (^|\.)officeppe\.net$ (^|\.)omniroot\.com$ (^|\.)onedrive\.com$ (^|\.)onenote\.com$ (^|\.)onenote\.net$ (^|\.)onestore\.ms$ (^|\.)onmicrosoft\.com$ (^|\.)outlook\.com$ (^|\.)outlookmobile\.com$ (^|\.)phonefactor\.net$ (^|\.)public-trust\.com$ (^|\.)s-microsoft\.com$ (^|\.)sfbassets\.com$ (^|\.)sfx\.ms$ (^|\.)sharepoint\.com$ (^|\.)sharepointonline\.com$ (^|\.)skype\.com$ (^|\.)skypeassets\.com$ (^|\.)skypeforbusiness\.com$ (^|\.)staffhub\.ms$ (^|\.)svc\.ms$ (^|\.)sway-cdn\.com$ (^|\.)sway-extensions\.com$ (^|\.)sway\.com$ (^|\.)trafficmanager\.net$ (^|\.)uservoice\.com$ (^|\.)virtualearth\.net$ (^|\.)visualstudio\.com$ (^|\.)windows-ppe\.net$ (^|\.)windows\.com$ (^|\.)windows\.net$ (^|\.)windowsazure\.com$ (^|\.)windowsupdate\.com$ (^|\.)wunderlist\.com$ (^|\.)yammer\.com$ (^|\.)yammerusercontent\.com$ # MytvSUPER (^|\.)\w*nowtv100\w*\.\w*$ (^|\.)\w*rthklive\w*\.\w*$ (^|\.)mytvsuper\.com$ # Netflix (^|\.)netflix\.com$ (^|\.)netflix\.net$ (^|\.)nflxext\.com$ (^|\.)nflximg\.com$ (^|\.)nflximg\.net$ (^|\.)nflxvideo\.net$ 8.41.4.0/24 23.246.0.0/18 37.77.184.0/21 45.57.0.0/17 64.120.128.0/17 66.197.128.0/17 69.53.224.0/19 108.175.32.0/20 185.2.220.0/22 185.9.188.0/22 192.173.64.0/18 198.38.96.0/19 198.45.48.0/20 207.45.72.0/22 208.75.76.0/22 # OneDrive (^|\.)\w*1drv\w*\.\w*$ (^|\.)\w*onedrive\w*\.\w*$ (^|\.)\w*skydrive\w*\.\w*$ (^|\.)livefilestore\.com$ (^|\.)oneclient\.sfx\.ms$ (^|\.)onedrive\.com$ (^|\.)onedrive\.live\.com$ (^|\.)photos\.live\.com$ (^|\.)skydrive\.wns\.windows\.com$ (^|\.)spoprod-a\.akamaihd\.net$ (^|\.)storage\.live.com$ (^|\.)storage\.msn.com$ # Pixiv (^|\.)pixiv\.net$ (^|\.)pximg\.net$ # Porn (^|\.)\w*porn\w*\.\w*$ (^|\.)8teenxxx\.com$ (^|\.)ahcdn\.com$ (^|\.)bcvcdn\.com$ (^|\.)bongacams\.com$ (^|\.)chaturbate\.com$ (^|\.)dditscdn\.com$ (^|\.)livejasmin\.com$ (^|\.)rdtcdn\.com$ (^|\.)redtube\.com$ (^|\.)sb-cd\.com$ (^|\.)spankbang\.com$ (^|\.)t66y\.com$ (^|\.)xhamster\.com$ (^|\.)xnxx-cdn\.com$ (^|\.)xnxx\.com$ (^|\.)xvideos-cdn\.com$ (^|\.)xvideos\.com$ (^|\.)ypncdn\.com$ # ResiloSync (^|\.)config\.getsync\.com$ (^|\.)config\.resilio\.com$ 54.235.182.157/32 107.182.230.198/32 173.244.209.150/32 173.244.217.42/32 209.95.56.60/32 # Steam (^|\.)fanatical\.com$ (^|\.)humblebundle\.com$ (^|\.)steamcommunity\.com$ (^|\.)steampowered\.com$ (^|\.)steamstatic\.com$ # Telegram (^|\.)t\.me$ (^|\.)tdesktop\.com$ (^|\.)telegra\.ph$ (^|\.)telegram\.me$ (^|\.)telegram\.org$ 91.108.0.0/16 109.239.140.0/24 149.154.160.0/20 2001:67c:4e8::/48 2001:b28:f23d::/48 2001:b28:f23f::/48 # Twitch (^|\.)twitch\.tv$ (^|\.)ttvnw\.net$ (^|\.)jtvnw\.net$ (^|\.)akamaized\.net$ # Twitter (^|\.)t\.co$ (^|\.)twimg\.co$ (^|\.)twimg\.com$ (^|\.)twimg\.org$ # Whatsapp 18.194.0.0/15 34.224.0.0/12 54.242.0.0/15 50.22.198.204/30 208.43.122.128/27 108.168.174.0/16 173.192.231.32/27 158.85.5.192/27 174.37.243.0/16 158.85.46.128/27 173.192.222.160/27 184.173.128.0/17 158.85.224.160/27 75.126.150.0/16 69.171.235.0/16 #飞流直播 (^|\.)neulion\.com$ (^|\.)icntv\.xyz$ (^|\.)flzbcdn\.xyz$ #华文电视 (^|\.)ocnttv\.com$ ================================================ FILE: Trojan/File/chn.acl ================================================ #********************************************************************** # 04.15 # 2020年4月15日21:18:34 # 转载需要注明版权和来源 # # 屏蔽常用网站、视频、手机rom广告&运营商劫持广告&数据跟踪&开屏广告 # # 参照lhie1的surge规则改编,致谢!! https://github.com/lhie1/Surge # 参照scomper的surge规则改编,致谢!! https://gist.github.com/scomper/915b04a974f9e11952babfd0bbb241a8/revisions # # 参数解释: # [proxy_all] 默认代理-本规则使用 # [bypass_all] 默认直连 # [outbound_block_list] 禁止访问列表 在25行 # [bypass_list] 直连列表 在1207多行 # [proxy_list] 代理列表 在6874多行 # [remote_dns] 远程 DNS 解析 -不加使用本地 DNS # #********************************************************************** [proxy_all] # 默认代理 #********************************************************************** [outbound_block_list] # 禁止访问列表 # 广告关键词 (^|\.)\w*admarvel\w*\.\w*$ (^|\.)\w*admaster\w*\.\w*$ (^|\.)\w*adsage\w*\.\w*$ (^|\.)\w*adsensor\w*\.\w*$ (^|\.)\w*adservice\w*\.\w*$ (^|\.)\w*adsh\w*\.\w*$ (^|\.)\w*adsmogo\w*\.\w*$ (^|\.)\w*adsrvmedia\w*\.\w*$ (^|\.)\w*adsserving\w*\.\w*$ (^|\.)\w*adsystem\w*\.\w*$ (^|\.)\w*adwords\w*\.\w*$ (^|\.)\w*analysis\w*\.\w*$ (^|\.)\w*analytics\w*\.\w*$ (^|\.)\w*applovin\w*\.\w*$ (^|\.)\w*appsflyer\w*\.\w*$ (^|\.)\w*domob\w*\.\w*$ (^|\.)\w*duomeng\w*\.\w*$ (^|\.)\w*dwtrack\w*\.\w*$ (^|\.)\w*guanggao\w*\.\w*$ (^|\.)\w*lianmeng\w*\.\w*$ (^|\.)\w*monitor\w*\.\w*$ (^|\.)\w*omgmta\w*\.\w*$ (^|\.)\w*omniture\w*\.\w*$ (^|\.)\w*openx\w*\.\w*$ (^|\.)\w*partnerad\w*\.\w*$ (^|\.)\w*pingfore\w*\.\w*$ (^|\.)\w*socdm\w*\.\w*$ (^|\.)\w*supersonicads\w*\.\w*$ (^|\.)\w*tracking\w*\.\w*$ (^|\.)\w*uedas\w*\.\w*$ (^|\.)\w*usage\w*\.\w*$ (^|\.)\w*wlmonitor\w*\.\w*$ (^|\.)\w*zjtoolbar\w*\.\w*$ (^|\.)ad\d{0,3}\..*$ (^|\.)ads\d{0,3}\..*$ (^|\.)tracking\..*$ # 163 (^|\.)(adgeo|bobo|fa|g|g1|gb|nex)(\.corp|)\.163\.com$ (^|\.)(analytics|img1|img2|mimg|push)\.126\.net$ (^|\.)(a|c|clkservice|conv|dsp|dsp-impr2|gorgon|rlogs|union|ydpushserver)\.youdao\.com$ (^|\.)(nc004x|nc045x|qt002x|tb060x|tb104x)\.corp\.youdao\.com$ (^|\.)(haitaoad|iadmatvideo)\.nosdn\.127\.net$ (^|\.)ir\.mail\.126\.com$ (^|\.)ir\.mail\.yeah\.net$ (^|\.)oimagea2\.ydstatic\.com$ (^|\.)pagechoice\.net$ (^|\.)prom\.gome\.com\.cn$ (^|\.)qchannel0\d\.cn$ (^|\.)static\.flv\.uuzuonline\.com$ (^|\.)wanproxy\.127\.net$ # 17173 (^|\.)cvda\.17173\.com$ (^|\.)imgapp\.yeyou\.com$ (^|\.)log1\.17173\.com$ (^|\.)s\.17173cdn\.com$ (^|\.)ue\.yeyoucdn\.com$ (^|\.)vda\.17173\.com$ # 178 (^|\.)analytics\.wanmei\.com$ (^|\.)gg\.stargame\.com$ # 2345 (^|\.)(dl|download|houtai|jifen|minipage|wan|jifendownload|zhushou)\.2345\.cn$ # 360 (^|\.)3600\.com$ (^|\.)gamebox\.360\.cn$ (^|\.)jiagu\.360\.cn$ (^|\.)kuaikan\.netmon\.360safe\.com$ (^|\.)leak\.360\.cn$ (^|\.)lianmeng\.360\.cn$ (^|\.)pub\.se\.360\.cn$ (^|\.)s\.so\.360\.cn$ (^|\.)shouji\.360\.cn$ (^|\.)soft\.data\.weather\.360\.cn$ (^|\.)stat\.360safe\.com$ (^|\.)stat\.m\.360\.cn$ (^|\.)update\.360safe\.com$ (^|\.)wan\.360\.cn$ # 58 (^|\.)(58|imp|stat)\.xgo\.com\.cn$ (^|\.)(brandshow|jing|track|tracklog)\.58\.com$ # Alibaba (^|\.)(adashx4yt|adash-c|ai|re|rj|simaba)\.m\.taobao\.com$ (^|\.)(afp|atanx|atanx2|gma|gtms\d\d)\.alicdn\.com$ (^|\.)(fav|m|redirect|srd|tns)\.simba\.taobao\.com$ (^|\.)(sdkinit|simaba|tyh)\.taobao\.com$ (^|\.)acjs\.aliyun\.com$ (^|\.)(adash-c|adashbc|adashxgc)\.ut\.taobao\.com$ (^|\.)alipaylog\.com$ (^|\.)amdc\.alipay\.com$ (^|\.)click\.mz\.simba\.taobao\.com$ (^|\.)g\.click\.taobao\.com$ (^|\.)g\.tbcdn\.cn$ (^|\.)hydra\.alibaba\.com$ (^|\.)pindao\.huoban\.taobao\.com$ (^|\.)show\.re\.taobao\.com$ (^|\.)strip\.taobaocdn\.com$ (^|\.)userimg\.qunar\.com$ (^|\.)yiliao\.hupan\.com$ # Adobe (^|\.)3dns-2\.adobe\.com$ (^|\.)3dns-3\.adobe\.com$ (^|\.)activate\.adobe\.com$ (^|\.)activate\.wip3\.adobe\.com$ (^|\.)activate-sea\.adobe\.com$ (^|\.)activate-sjc0\.adobe\.com$ (^|\.)adobe-dns\.adobe\.com$ (^|\.)adobe-dns-2\.adobe\.com$ (^|\.)adobe-dns-3\.adobe\.com$ (^|\.)ereg\.adobe\.com$ (^|\.)ereg\.wip3\.adobe\.com$ (^|\.)geo2\.adobe\.com$ (^|\.)hl2rcv\.adobe\.com$ (^|\.)hlrcv\.stage\.adobe\.com$ (^|\.)lm\.licenses\.adobe\.com$ (^|\.)lmlicenses\.wip4\.adobe\.com$ (^|\.)na1r\.services\.adobe\.com$ (^|\.)na2m-pr\.licenses\.adobe\.com$ (^|\.)practivate\.adobe\.com$ (^|\.)wip3\.adobe\.com$ (^|\.)wwis-dubc1-vip60\.adobe\.com$ # Apple (^|\.)adserver\.unityads\.unity3d\.com$ # AutoHome (^|\.)(33|adproxy|al|alert|applogapi|c|cmx|dspmnt|pcd|pvx|rd|rdx|stats)\.autohome\.com\.cn$ (^|\.)adm\d\.autoimg\.cn$ (^|\.)push\.app\.autohome\.com\.cn$ # Baidu (^|\.)(a|adm|adscdn|afd|als|anquan|appc|as|c|cb|cbjs|cbjslog|cjhq|cpro|cpro2|cpu|cpu-admin|crs|drmcmm|e|eclick|eiv|entry)\.baidu\.(com|cn)$ (^|\.)(hc|hm|hmma|hpd|imageplus|ma|mobads-logs|mobads|mtj|nsclick)\.baidu\.(com|cn)$ (^|\.)(pups|rj|rp|spcode|tk|tongji|tuisong|ucstat|ufosdk|union|utility|utk|videopush|wangmeng|wm|znsv)\.baidu\.(com|cn)$ (^|\.)ad\.duapps\.com$ (^|\.)ad\.player\.baidu\.com$ (^|\.)adx\.xiaodutv\.com$ (^|\.)ae\.bdstatic\.com$ (^|\.)antivirus\.baidu\.com$ (^|\.)api\.cpu\.baidu\.com$ (^|\.)api\.mobula\.sdk\.duapps\.com$ (^|\.)ashifen\.com$ (^|\.)baichuan\.baidu\.com$ (^|\.)baidu9635\.com$ (^|\.)baidustatic\.com$ (^|\.)baidutv\.baidu\.com$ (^|\.)baikebcs\.bdimg\.com$ (^|\.)banlv\.baidu\.com$ (^|\.)bar\.baidu\.com$ (^|\.)bdimg\.share\.baidu\.com$ (^|\.)bdplus\.baidu\.com$ (^|\.)btlaunch\.baidu\.com$ (^|\.)cleaner\.baidu\.com$ (^|\.)click\.bes\.baidu\.com$ (^|\.)click\.hm\.baidu\.com$ (^|\.)click\.qianqian\.com$ (^|\.)cm\.baidu\.com$ (^|\.)cm\.pos\.baidu\.com$ (^|\.)cpro\.baidustatic\.com$ (^|\.)cpro\.tieba\.baidu\.com$ (^|\.)cpro\.zhidao\.baidu\.com$ (^|\.)datax\.baidu\.com$ (^|\.)dl-vip\.bav\.baidu\.com$ (^|\.)dl-vip\.pcfaster\.baidu\.co\.th$ (^|\.)dl1sw\.baidu\.com$ (^|\.)dl2\.bav\.baidu\.com$ (^|\.)dl\.client\.baidu\.com$ (^|\.)dl\.ops\.baidu\.com$ (^|\.)dlsw\.baidu\.com$ (^|\.)dlsw\.br\.baidu\.com$ (^|\.)download\.bav\.baidu\.com$ (^|\.)download\.sd\.baidu\.com$ (^|\.)drmcmm\.baidu\.com$ (^|\.)dup\.baidustatic\.com$ (^|\.)dxp\.baidu\.com$ (^|\.)dzl\.baidu\.com$ (^|\.)ecma\.bdimg\.com$ (^|\.)ecmb\.bdimg\.com$ (^|\.)ecmc\.bdimg\.com$ (^|\.)em\.baidu\.com$ (^|\.)ers\.baidu\.com$ (^|\.)f10\.baidu\.com$ (^|\.)fc-\.cdn\.bcebos\.com$ (^|\.)fc-feed\.cdn\.bcebos\.com$ (^|\.)fclick\.baidu\.com$ (^|\.)feed\.baidu\.com$ (^|\.)fexclick\.baidu\.com$ (^|\.)g\.baidu\.com$ (^|\.)gimg\.baidu\.com$ (^|\.)guanjia\.baidu\.com$ (^|\.)idm-su\.baidu\.com$ (^|\.)iebar\.baidu\.com$ (^|\.)ikcode\.baidu\.com$ (^|\.)img01\.taotaosou\.cn$ (^|\.)img\.taotaosou\.cn$ (^|\.)itsdata\.map\.baidu\.com$ (^|\.)j\.br\.baidu\.com$ (^|\.)kstj\.baidu\.com$ (^|\.)log\.music\.baidu\.com$ (^|\.)log\.nuomi\.com$ (^|\.)m1\.baidu\.com$ (^|\.)mg09\.zhaopin\.com$ (^|\.)mipcache\.bdstatic\.com$ (^|\.)mpro\.baidu\.com$ (^|\.)msite\.baidu\.com$ (^|\.)neirong\.baidu\.com$ (^|\.)nsclickvideo\.baidu\.com$ (^|\.)openrcv\.baidu\.com$ (^|\.)pc\.videoclick\.baidu\.com$ (^|\.)pos\.baidu\.com$ (^|\.)pups\.bdimg\.com$ (^|\.)push\.music\.baidu\.com$ (^|\.)push\.zhanzhang\.baidu\.com$ (^|\.)qchannel0\d\.cn$ (^|\.)qianclick\.baidu\.com$ (^|\.)release\.baidu\.com$ (^|\.)res\.limei\.com$ (^|\.)res\.mi\.baidu\.com$ (^|\.)rigel\.baidustatic\.com$ (^|\.)river\.zhidao\.baidu\.com$ (^|\.)rplog\.baidu\.com$ (^|\.)s\.baidu\.com$ (^|\.)s\.cpro\.baidu\.com$ (^|\.)sa\.tuisong\.baidu\.com$ (^|\.)sclick\.baidu\.com$ (^|\.)sestat\.baidu\.com$ (^|\.)shadu\.baidu\.com$ (^|\.)share\.baidu\.com$ (^|\.)shifen\.com$ (^|\.)snippet\.pos\.baidu\.com$ (^|\.)sobar\.baidu\.com$ (^|\.)sobartop\.baidu\.com$ (^|\.)stat\.v\.baidu\.com$ (^|\.)su\.bdimg\.com$ (^|\.)su\.bdstatic\.com$ (^|\.)t10\.baidu\.com$ (^|\.)t11\.baidu\.com$ (^|\.)t12\.baidu\.com$ (^|\.)tkweb\.baidu\.com$ (^|\.)tob-cms\.bj\.bcebos\.com$ (^|\.)toolbar\.baidu\.com$ (^|\.)tracker\.baidu\.com$ (^|\.)tuijian\.baidu\.com$ (^|\.)uat1\.bfsspadserver\.8le8le\.com$ (^|\.)ubmcmm\.baidustatic\.com$ (^|\.)ulic\.baidu\.com$ (^|\.)ulog\.imap\.baidu\.com$ (^|\.)unionimage\.baidu\.com$ (^|\.)vv84\.bj\.bcebos\.com$ (^|\.)w\.gdown\.baidu\.com$ (^|\.)w\.x\.baidu\.com$ (^|\.)weishi\.baidu\.com$ (^|\.)wenku-cms\.bj\.bcebos\.com$ (^|\.)wisepush\.video\.baidu\.com$ (^|\.)wn\.pos\.baidu\.com$ (^|\.)zz\.bdstatic\.com$ (^|\.)zzy1\.quyaoya\.com$ # Book-app 起点 掌阅 书旗 宜搜 (^|\.)(adm|assets|tjlog)(\.ps|)\.easou\.com$ (^|\.)(ad|push|sys)\.zhangyue\.com$ (^|\.)(cj|game|tongji)\.qidian\.com$ (^|\.)aishowbger\.com$ (^|\.)api\.itaoxiaoshuo\.com$ (^|\.)bbcoe\.cn$ (^|\.)dkeyn\.com$ (^|\.)drdwy\.com$ (^|\.)e701\.net$ (^|\.)e\.aa985\.cn$ (^|\.)e\.v02u9\.cn$ (^|\.)ehxyz\.com$ (^|\.)ethod\.gzgmjcx\.com$ (^|\.)focuscat\.com$ (^|\.)hdswgc\.com$ (^|\.)jyd\.fjzdmy\.com$ (^|\.)m\.ourlj\.com$ (^|\.)m\.txtxr\.com$ (^|\.)m\.vsxet\.com$ (^|\.)miam4\.cn$ (^|\.)o\.if\.qidian\.com$ (^|\.)p\.vq6nsu\.cn$ (^|\.)picture\.duokan\.com$ (^|\.)pyerc\.com$ (^|\.)s1\.cmfu\.com$ (^|\.)sc\.shayugg\.com$ (^|\.)sdk\.cferw\.com$ (^|\.)sezvc\.com$ (^|\.)ut2\.shuqistat\.com$ (^|\.)xgcsr\.com$ (^|\.)xjq\.jxmqkj\.com$ (^|\.)xpe\.cxaerp\.com$ (^|\.)xtzxmy\.com$ (^|\.)xyrkl\.com$ (^|\.)zhuanfakong\.com$ # ByteDance 头条抖音 (^|\.)(ad|sm|dsp|nativeapp|partner|track)\.toutiao\.com$ (^|\.)ic\.snssdk\.com$ (^|\.)log\.snssdk\.com$ (^|\.)xlog\.snssdk\.com$ # Dangdang (^|\.)(a|click|schprompt|t)\.dangdang\.com$ # Duomi (^|\.)ad\.duomi\.com$ (^|\.)boxshows\.com$ # Facebook (^|\.)staticxx\.facebook\.com$ # Fang (^|\.)click1n\.soufun\.com$ (^|\.)clickm\.fang\.com$ (^|\.)clickn\.fang\.com$ (^|\.)countpvn\.light\.fang\.com$ (^|\.)countubn\.light\.soufun\.com$ (^|\.)mshow\.fang\.com$ (^|\.)tongji\.home\.soufun\.com$ # Google (^|\.)admob\.com$ (^|\.)ads\.gmodules\.com$ (^|\.)ads\.google\.com$ (^|\.)adservice\.google\.com$ (^|\.)afd\.l\.google\.com$ (^|\.)badad\.googleplex\.com$ (^|\.)csi\.gstatic\.com$ (^|\.)doubleclick(\.com|\.net)$ (^|\.)google-analytics\.com$ (^|\.)googleadservices\.com$ (^|\.)googleadsserving\.cn$ (^|\.)googlecommerce\.com$ (^|\.)googlesyndication\.com$ (^|\.)mobileads\.google\.com$ (^|\.)pagead-tpc\.l\.google\.com$ (^|\.)pagead\.google\.com$ (^|\.)pagead\.l\.google\.com$ (^|\.)service\.urchin\.com$ # JD (^|\.)(c-nfa|img-x|jrclick|jzt|policy)\.jd\.com$ (^|\.)ads\.union\.jd\.com$ (^|\.)cps\.360buy\.com$ (^|\.)stat\.m\.jd\.com$ # Kugou (^|\.)(bssdl|bssdlbig|d|downmobile|fanxing|gad|game|gamebox|gg|install|install2|kgmobilestat|minidcsc|mo|mobilelog|mvads|p|rtmonitor|sdn|tj)\.kugou\.com$ (^|\.)(msg|push|update)\.mobile\.kugou\.com$ (^|\.)ads\.service\.kugou\.com$ (^|\.)gcapi\.sy\.kugou\.com$ (^|\.)kuaikaiapp\.com$ (^|\.)log\.stat\.kugou\.com$ (^|\.)log\.web\.kugou\.com$ # Kuwo (^|\.)(deliver|g|log|kwmsg|mobilead|msclick2|msphoneclick|updatepage|wa|webstat)\.kuwo\.cn$ (^|\.)apk\.shouji\.koowo\.com$ (^|\.)g\.koowo\.com$ # Meizu flyme 魅族 (^|\.)(aider-res|api-flow|api-game|api-push|cal|ebook|game-res|infocenter|openapi-news|reader|tongji-res1|tongji|uxip)\.meizu\.com$ (^|\.)(bro|t-e|t-flow)\.flyme\.cn$ (^|\.)(ebook|game|push|reader|upush)\.res\.meizu\.com$ (^|\.)aries\.mzres\.com$ (^|\.)umid\.orion\.meizu\.com$ # Meitu (^|\.)(corp|gg|message|tuiguang)\.meitu\.com$ (^|\.)(dc|mdc|rabbit)\.meitustat\.com$ (^|\.)a\.koudai\.com$ (^|\.)adui\.tg\.meitu\.com$ (^|\.)meitubeauty\.meitudata\.com$ (^|\.)rabbit\.tg\.meitu\.com$ (^|\.)xiuxiu\.android\.dl\.meitu\.com$ (^|\.)xiuxiu\.mobile\.meitudata\.com$ # Miui 小米 (^|\.)(ad|ad1|shenghuo|xmpush)\.xiaomi\.com$ (^|\.)(a|wtradv)\.market\.xiaomi\.com$ (^|\.)(bss|de|dvb|jellyfish|stat)\.pandora\.xiaomi\.com$ (^|\.)(d|migc|migcreport|mis)\.g\.mi\.com$ (^|\.)(notice|ppurifier)\.game\.xiaomi\.com$ (^|\.)(r|security)\.browser\.miui\.com$ (^|\.)tracking\.miui\.com$ (^|\.)union\.mi\.com$ # Moji (^|\.)ad\.api\.moji\.com$ (^|\.)app\.moji001\.com$ (^|\.)cdn\.moji002\.com$ (^|\.)cdn2\.moji002\.com$ (^|\.)fds\.api\.moji\.com$ (^|\.)log\.moji\.com$ (^|\.)stat\.moji\.com$ (^|\.)ugc\.moji001\.com$ # Qingting\.fm (^|\.)(ad|admgr|logger)\.qingting\.fm$ (^|\.)dload\.qd\.qingting\.fm$ (^|\.)s\.qd\.qingting\.fm$ (^|\.)s\.qd\.qingtingfm\.com$ # QQ (^|\.)\w*omgmta\w*\.\w*$ (^|\.)(act|adsfile|bugly|buluo|gdt|monitor|pingma|pingtcss|report|tajs|tcss|uu)\.qq\.com$ (^|\.)ad\.qun\.qq\.com$ # RenRen (^|\.)jebe\.renren\.com$ (^|\.)ebp\.renren\.com$ (^|\.)jebe\.xnimg\.cn$ # Sina (^|\.)(adimg|pay|sax|sdkapp|sdkclick|trends|u1\.img|wbapp|wbclick|wbpctips)\.mobile\.sina\.cn$ (^|\.)(ad|ad\d|adbox|adm|d\d|dcads|dmp|leju|sax|sax\d|slog)\.sina\.com(\.cn|)$ (^|\.)(alitui|biz|game|wax)\.weibo\.com(\.cn|)$ (^|\.)cre\.dp\.sina\.cn$ (^|\.)gw5\.push\.mcp\.weibo\.cn$ (^|\.)log\.mix\.sina\.com\.cn$ (^|\.)mobileads\.dx\.cn$ (^|\.)newspush\.sinajs\.cn$ (^|\.)sdkapp\.uve\.weibo\.com$ (^|\.)tui\.weibo\.com$ (^|\.)wbapp\.uve\.weibo\.com$ (^|\.)zymo\.mps\.weibo\.com$ # Sougou (^|\.)(123|adsence|brand|cpc|epro|fair|files2|goto|golden1|inte|iwan|lu|pb|pd|pv|theta|wan|wangmeng)\.sogou\.com$ (^|\.)(123|galaxy|lu)\.sogoucdn\.com$ (^|\.)amfi\.gou\.sogou\.com$ # Teleplus (^|\.)applovin\.com$ (^|\.)guangzhuiyuan\.com$ # Twitter (^|\.)(ads|syndication|syndication-o|analytics|scribe|p)\.twitter\.com$ (^|\.)ads-twitter\.com$ (^|\.)tellapart\.com$ (^|\.)urls\.api\.twitter\.com$ # UC ali (^|\.)(adslot|applog|track)\.uc\.cn$ (^|\.)(cms|puds|uc|ucsec1|ucsec)\.ucweb\.com$ (^|\.)(log|patriot)\.cs\.pp\.cn$ (^|\.)api\.mp\.uc\.cn$ (^|\.)client\.video\.ucweb\.com$ (^|\.)dispatcher\.upmc\.uc\.cn$ (^|\.)huichuan\.sm\.cn$ (^|\.)iflow\.uczzd(\.\w{2,3}){1,2}$ (^|\.)m\.uczzd\.cn$ (^|\.)server\.m\.pp\.cn$ (^|\.)u\.uc123\.com$ (^|\.)u\.ucfly\.com$ # Weifeng (^|\.)(aoodoo|push|yes1)\.feng\.com$ (^|\.)fengbuy\.com$ (^|\.)push\.feng\.com$ (^|\.)we\.tm$ # WPS Office (^|\.)(bannera|rating6|cloudservice.*)\.kingsoft-office-service\.com$ (^|\.)(docerad|gou|info|minfo|notify|pcfg|push|wpsweb-dc)\.wps\.cn$ (^|\.)ad\.docer\.wps\.cn$ (^|\.)adm\.zookingsoft\.com$ (^|\.)bole\.shangshufang\.ksosoft\.com$ (^|\.)counter\.kingsoft\.com$ (^|\.)dl\.op\.wpscdn\.cn$ (^|\.)hoplink\.ksosoft\.com$ (^|\.)ic\.ksosoft\.com$ (^|\.)img.*\.mini\.cache\.wps\.cn$ (^|\.)img\.gou\.wpscdn\.cn$ (^|\.)ios-informationplatform\.wps\.cn$ (^|\.)mo\.res\.wpscdn\.cn$ (^|\.)news\.docer\.com$ (^|\.)news\.op\.wpscdn\.cn$ (^|\.)pc\.uf\.ksosoft\.com$ (^|\.)pixiu\.shangshufang\.ksosoft\.com$ (^|\.)up\.wps\.kingsoft\.com$ # Wi-Fi key (^|\.)(c|cdsget|news-imgpb|wifiapi\d\d|wkanc)\.51y5\.net$ # Ximalaya 喜马拉雅 (^|\.)(adse|linkeye|location|xdcs-collector)\.ximalaya\.com$ # Xunlei 迅雷app&看看 (^|\.)biz5\.kankan\.com$ (^|\.)float\.kankan\.com$ (^|\.)logic\.cpm\.cm\.kankan\.com$ (^|\.)hub5btmain\.sandai\.net$ (^|\.)hub5emu\.sandai\.net$ (^|\.)upgrade\.xl9\.xunlei\.com$ # Yahoo (^|\.)(ads|adserver|adss|analytics|beap-bc|comet|geo|gemini|p3p|ybp)\.yahoo\.com$ (^|\.)(analytics|locdrop|onepush)\.query\.yahoo\.com$ (^|\.)(ard|ane|yads)\.yahoo\.co\.jp$ (^|\.)(js-apac-ss|partnerads)\.ysm\.yahoo\.com$ (^|\.)ad\.wretch\.cc$ (^|\.)clicks\.beap\.bc\.yahoo\.com$ (^|\.)doubleplay-conf-yql\.media\.yahoo\.com$ (^|\.)flurry\.com$ (^|\.)m\.yap\.yahoo\.com$ (^|\.)uservoice\.com$ (^|\.)ws\.progrss\.yahoo\.com$ # Zhihu (^|\.)(sugar|zhihu-web-analytics)\.zhihu\.com$ # Ads in Video apps********************下面都是 # 6间房 (^|\.)(shrek|simba|union)\.6\.cn$ # Baofeng 暴风影音 (^|\.)logger\.baofeng\.com$ (^|\.)xs\.houyi\.baofeng\.net$ # Douyu (^|\.)dotcounter\.douyutv\.com$ # Fenghuang 凤凰TV (^|\.)(game|stadig)\.ifeng\.com$ (^|\.)api\.newad\.ifeng\.com$ (^|\.)exp\.3g\.ifeng\.com$ (^|\.)iis3g\.deliver\.ifeng\.com$ (^|\.)mfp\.deliver\.ifeng\.com$ # Funshion 风行 (^|\.)(pub|adm|jobsfe|po|pv|stat)\.funshion\.com$ # iqiyi PPS 爱奇艺 (^|\.)ad\.m\.iqiyi\.com$ (^|\.)afp\.iqiyi\.com$ (^|\.)c\.uaa\.iqiyi\.com$ (^|\.)cloudpush\.iqiyi\.com$ (^|\.)cm\.passport\.iqiyi\.com$ (^|\.)cupid\.iqiyi\.com$ (^|\.)emoticon\.sns\.iqiyi\.com$ (^|\.)gamecenter\.iqiyi\.com$ (^|\.)ifacelog\.iqiyi\.com$ (^|\.)mbdlog\.iqiyi\.com$ (^|\.)meta\.video\.qiyi\.com$ (^|\.)msg1\.video\.qiyi\.com$ (^|\.)msg2\.video\.qiyi\.com$ (^|\.)msg\.71\.am$ (^|\.)paopao\.iqiyi\.com$ (^|\.)paopao\d\.qiyipic\.com$ (^|\.)policy\.video\.iqiyi\.com$ (^|\.)yuedu\.iqiyi\.com$ 101.227.200.0/24 101.227.200.11/32 101.227.200.28/32 101.227.97.240/32 124.192.153.42/32 # Ku6 酷6 (^|\.)gug\.ku6cdn\.com$ (^|\.)st\.vq\.ku6\.cn$ (^|\.)pq\.stat\.ku6\.com$ (^|\.)static\.ku6\.com$ # LeTV 乐视 (^|\.)(ark|dc|fz|g3|minisite|pro|stat)\.letv\.com$ (^|\.)(1|2)\.letvlive\.com$ (^|\.)(i0|i3)\.letvimg\.com$ (^|\.)game\.letvstore\.com$ (^|\.)n\.mark\.letv\.com$ (^|\.)pro\.hoye\.letv\.com$ (^|\.)static\.app\.m\.letv\.com$ # MGTV 芒果TV (^|\.)(click|da|log|p2|res)\.hunantv\.com$ (^|\.)da\.mgtv\.com$ (^|\.)log\.v2\.hunantv\.com$ # Sohu 搜狐 (^|\.)(888|lm|push)\.tv\.sohu\.com$ (^|\.)(aty|bd|click|click2|ctr|pv|pb|wl|um)\.hd\.sohu\.com$ (^|\.)(ads|adnet|aty|epro|go|golden1|hui|inte|uranus|wan|yule|pv)\.sohu\.com$ (^|\.)(epro|golden1|inte|uranus|pv)\.sogou\.com$ (^|\.)(inte|lu|theta)\.sogoucdn\.com$ # PPTV、PPLive (^|\.)(de|jp)\.as\.pptv\.com$ (^|\.)(app|as)\.aplus\.pptv\.com$ (^|\.)afp\.pplive\.com$ (^|\.)asimgs\.pplive\.cn$ (^|\.)pp2\.pptv\.com$ (^|\.)stat\.pptv\.com$ # QQ Live (^|\.)aiseet\.aa\.atianqi\.com$ (^|\.)aiseet\.atianqi\.com$ (^|\.)btrace\.video\.qq\.com$ (^|\.)c\.l\.qq\.com$ (^|\.)dp3\.qq\.com$ (^|\.)livep\.l\.qq\.com$ (^|\.)lives\.l\.qq\.com$ (^|\.)livew\.l\.qq\.com$ (^|\.)mcgi\.v\.qq\.com$ (^|\.)mdevstat\.qqlive\.qq\.com$ (^|\.)omgmta1\.qq\.com$ (^|\.)p\.l\.qq\.com$ (^|\.)rcgi\.video\.qq\.com$ (^|\.)t\.l\.qq\.com$ (^|\.)u\.l\.qq\.com$ # Youku & Tudou (^|\.)(actives|dmapp|hz|iyes|l|lstat|lvip|msg|mobilemsg|myes|passport-log|stat|tdrec|wan|ykatr|ykrec|ykrectab)\.youku\.com$ (^|\.)(adcontrol|adplay|goods|iwstat|nstat|stat|stats)\.tudou\.com$ (^|\.)(ad|gamex)\.mobile\.youku\.com$ (^|\.)(dev-push|push|sdk)\.m\.youku\.com$ (^|\.)(p|r|v)\.l\.youku\.com$ (^|\.)a-dxk\.play\.api\.3g\.youku\.com$ (^|\.)ad\.api\.3g(\.tudou|\.youku)\.com$ (^|\.)ad\.api\.mobile\.youku\.com$ (^|\.)b\.smartvideo\.youku\.com$ (^|\.)c\.yes\.youku\.com$ (^|\.)dl\.g\.youku\.com$ (^|\.)e\.stat\.ykimg\.com$ (^|\.)hudong\.pl\.youku\.com$ (^|\.)l\.ykimg\.com$ (^|\.)p-log\.ykimg\.com$ (^|\.)p\.l\.ykimg\.com$ (^|\.)s\.p\.youku\.com$ (^|\.)store\.tv\.api\.3g\.youku\.com$ (^|\.)store\.xl\.api\.3g\.youku\.com$ (^|\.)test\.ott\.youku\.com$ (^|\.)val\.api\.youku\.com$ 117.177.248.17/32 117.177.248.41/32 223.87.176.139/32 223.87.176.176/32 223.87.177.180/32 223.87.177.182/32 223.87.177.184/32 223.87.177.43/32 223.87.177.47/32 223.87.177.80/32 223.87.182.101/32 223.87.182.102/32 223.87.182.11/32 223.87.182.52/32 # Youtube (^|\.)azabu-u\.ac\.jp$ (^|\.)couchcoaster\.jp$ (^|\.)delivery\.dmkt-sp\.jp$ (^|\.)ehg-youtube\.hitbox\.com$ (^|\.)m-78\.jp$ (^|\.)nichibenren\.or\.jp$ (^|\.)nicorette\.co\.kr$ (^|\.)ssl-youtube\.2cnt\.net$ (^|\.)youtube\.112\.2o7\.net$ (^|\.)youtube\.2cnt\.net$ # Others ads in Video apps (^|\.)(acsystem|ads|afp)\.wasu\.tv$ (^|\.)ads\.cdn\.tvb\.com$ (^|\.)c\.algovid\.com$ (^|\.)cc\.xtgreat\.com$ (^|\.)d\.dsp\.imageter\.com$ (^|\.)gg\.jtertp\.com$ (^|\.)gridsum-vd\.cntv\.cn$ (^|\.)kwflvcdn\.000dn\.com$ (^|\.)logstat\.t\.sfht\.com$ (^|\.)match\.rtbidder\.net$ (^|\.)n-st\.vip\.com$ (^|\.)pop\.uusee\.com$ (^|\.)static\.bshare\.cn$ (^|\.)static\.duoshuo\.com$ (^|\.)t\.cr-nielsen\.com$ (^|\.)terren\.cntv\.cn$ # Ads in Video apps end ********************上面都是 # 常用网站广告**************** (^|\.)(168|adshownew|stat)\.it168\.com$ (^|\.)(1|2)\.win7china\.com$ (^|\.)(801|803|806|808|bdj|dol|click)\.(tianya|tianyaui)\.cn$ (^|\.)(92x|its-dori)\.tumblr\.com$ (^|\.)(adm|eq|fund|ozone|stat|vaserviece)\.10jqka\.com\.cn$ (^|\.)(ad|adadmin|ads)\.house365\.com$ (^|\.)(ad|ads|counter)\.csdn\.net$ (^|\.)(ad|analytics|click|ganjituiguang|sta|tralog)\.ganji\.com$ (^|\.)(app-monitor|client-api|grand|mobile-pubt|newton-api)\.ele\.me$ (^|\.)(bd1|bd2)\.52che\.com$ (^|\.)(click|media|pv)\.(cheshi|cheshi-img)\.com$ (^|\.)(d0|dw|pv)\.xcar\.com\.cn$ (^|\.)a1\.itc\.cn$ (^|\.)ad\.12306\.cn$ (^|\.)ad\.3\.cn$ (^|\.)ad\.95306\.cn$ (^|\.)ad\.caiyunapp\.com$ (^|\.)ad\.cctv\.com$ (^|\.)ad\.cmvideo\.cn$ (^|\.)ad\.thepaper\.cn$ (^|\.)ad\.unimhk\.com$ (^|\.)adhome\.1fangchan\.com$ (^|\.)adm\.easou\.com$ (^|\.)ads\.feedly\.com$ (^|\.)ads\.genieessp\.com$ (^|\.)ads\.linkedin\.com$ (^|\.)adv\.ccb\.com$ (^|\.)advert\.api\.thejoyrun\.com$ (^|\.)api-deal\.kechenggezi\.com$ (^|\.)api-z\.weidian\.com$ (^|\.)bam\.nr-data\.net$ (^|\.)mobileads\.msn\.com$ (^|\.)bat\.bing\.com$ (^|\.)beacon\.tingyun\.com$ (^|\.)cdn\.jiuzhilan\.com$ (^|\.)collector\.githubapp\.com$ (^|\.)de\.soquair\.com$ (^|\.)e\.nexac\.com$ (^|\.)erebor\.douban\.com$ (^|\.)exp\.17wo\.cn$ (^|\.)game\.51yund\.com$ (^|\.)hosting\.miarroba\.info$ (^|\.)iadsdk\.apple\.com$ (^|\.)image\.gentags\.com$ (^|\.)log\.outbrain\.com$ (^|\.)m\.12306media\.com$ (^|\.)n\.cosbot\.cn$ (^|\.)pdl\.gionee\.com$ (^|\.)pica-juicy\.picacomic\.com$ (^|\.)pixel\.wp\.com$ (^|\.)pub\.mop\.com$ (^|\.)push\.wandoujia\.com$ (^|\.)qdp\.qidian\.com$ (^|\.)res\.gwifi\.com\.cn$ (^|\.)ssp\.kssws\.ks-cdn\.com$ (^|\.)stats\.chinaz\.com$ (^|\.)stats\.developingperspective\.com$ (^|\.)tjlog\.easou\.com$ (^|\.)tjlog\.ps\.easou\.com$ (^|\.)track\.hujiang\.com$ (^|\.)tracker\.yhd\.com$ (^|\.)up\.qingdaonews\.com$ # 广告联盟-国内**************** (^|\.)09mk\.cn$ (^|\.)100peng\.com$ (^|\.)114la\.com$ (^|\.)123juzi\.net$ (^|\.)138lm\.com$ (^|\.)17un\.com$ (^|\.)2cnt\.net$ (^|\.)3gmimo\.com$ (^|\.)3xx\.vip$ (^|\.)51\.la$ (^|\.)51taifu\.com$ (^|\.)51yes\.com$ (^|\.)600ad\.com$ (^|\.)6dad\.com$ (^|\.)70e\.com$ (^|\.)86\.cc$ (^|\.)8le8le\.com$ (^|\.)8ox\.cn$ (^|\.)95558000\.com$ (^|\.)99click\.com$ (^|\.)99youmeng\.com$ (^|\.)a3p4\.net$ (^|\.)acs86\.com$ (^|\.)acxiom-online\.com$ (^|\.)ad-brix\.com$ (^|\.)ad-delivery\.net$ (^|\.)ad-locus\.com$ (^|\.)ad-plus\.cn$ (^|\.)ad7\.com$ (^|\.)adadapted\.com$ (^|\.)adadvisor\.net$ (^|\.)adap\.tv$ (^|\.)adbana\.com$ (^|\.)adchina\.com$ (^|\.)adcome\.cn$ (^|\.)ader\.mobi$ (^|\.)adform\.net$ (^|\.)adfuture\.cn$ (^|\.)adhouyi\.com$ (^|\.)adinfuse\.com$ (^|\.)adirects\.com$ (^|\.)adjust\.com$ (^|\.)adjust\.io$ (^|\.)adkmob\.com$ (^|\.)adlive\.cn$ (^|\.)adlocus\.com$ (^|\.)admaji\.com$ (^|\.)admin6\.com$ (^|\.)admon\.cn$ (^|\.)adnyg\.com$ (^|\.)adpolestar\.net$ (^|\.)adpro\.cn$ (^|\.)adpush\.cn$ (^|\.)adquan\.com$ (^|\.)adreal\.cn$ (^|\.)ads8\.com$ (^|\.)adsame\.com$ (^|\.)adsmogo\.com$ (^|\.)adsmogo\.org$ (^|\.)adsunflower\.com$ (^|\.)adsunion\.com$ (^|\.)adtrk\.me$ (^|\.)adups\.com$ (^|\.)aduu\.cn$ (^|\.)advertising\.com$ (^|\.)adview\.cn$ (^|\.)advmob\.cn$ (^|\.)adwetec\.com$ (^|\.)adwhirl\.com$ (^|\.)adwo\.com$ (^|\.)adxmi\.com$ (^|\.)adyun\.com$ (^|\.)adzerk\.net$ (^|\.)agrant\.cn$ (^|\.)agrantsem\.com$ (^|\.)aihaoduo\.cn$ (^|\.)ajapk\.com$ (^|\.)allyes\.cn$ (^|\.)allyes\.com$ (^|\.)amazon-adsystem\.com$ (^|\.)amplitude\.com$ (^|\.)analysys\.cn$ (^|\.)angsrvr\.com$ (^|\.)anquan\.org$ (^|\.)anysdk\.com$ (^|\.)appadhoc\.com$ (^|\.)appads\.com$ (^|\.)appboy\.com$ (^|\.)appdriver\.cn$ (^|\.)appjiagu\.com$ (^|\.)applifier\.com$ (^|\.)appsflyer\.com$ (^|\.)atdmt\.com$ (^|\.)baifendian\.com$ (^|\.)banmamedia\.com$ (^|\.)baoyatu\.cc$ (^|\.)baycode\.cn$ (^|\.)bayimob\.com$ (^|\.)behe\.com$ (^|\.)bfshan\.cn$ (^|\.)biddingos\.com$ (^|\.)biddingx\.com$ (^|\.)bjvvqu\.cn$ (^|\.)bjxiaohua\.com$ (^|\.)bloggerads\.net$ (^|\.)branch\.io$ (^|\.)bsdev\.cn$ (^|\.)bshare\.cn$ (^|\.)btyou\.com$ (^|\.)bugtags\.com$ (^|\.)buysellads\.com$ (^|\.)c0563\.com$ (^|\.)cacafly\.com$ (^|\.)casee\.cn$ (^|\.)cdnmaster\.com$ (^|\.)chance-ad\.com$ (^|\.)chanet\.com\.cn$ (^|\.)chartbeat\.com$ (^|\.)chartboost\.com$ (^|\.)chengadx\.com$ (^|\.)chmae\.com$ (^|\.)clickadu\.com$ (^|\.)clicki\.cn$ (^|\.)clicktracks\.com$ (^|\.)clickzs\.com$ (^|\.)cloudmobi\.net$ (^|\.)cmcore\.com$ (^|\.)cnxad\.com$ (^|\.)cnzz\.com$ (^|\.)cnzzlink\.com$ (^|\.)cocounion\.com$ (^|\.)coocaatv\.com$ (^|\.)cooguo\.com$ (^|\.)coolguang\.com$ (^|\.)coremetrics\.com$ (^|\.)cpmchina\.co$ (^|\.)cpx24\.com$ (^|\.)crasheye\.cn$ (^|\.)crosschannel\.com$ (^|\.)ctrmi\.com$ (^|\.)customer-security\.online$ (^|\.)daoyoudao\.com$ (^|\.)datouniao\.com$ (^|\.)ddapp\.cn$ (^|\.)dianjoy\.com$ (^|\.)dianru\.com$ (^|\.)disqusads\.com$ (^|\.)domob\.cn$ (^|\.)domob\.com\.cn$ (^|\.)domob\.org$ (^|\.)dotmore\.com\.tw$ (^|\.)doubleverify\.com$ (^|\.)doudouguo\.com$ (^|\.)doumob\.com$ (^|\.)duanat\.com$ (^|\.)duiba\.com\.cn$ (^|\.)duomeng\.cn$ (^|\.)dxpmedia\.com$ (^|\.)edigitalsurvey\.com$ (^|\.)eduancm\.com$ (^|\.)emarbox\.com$ (^|\.)epsilon\.com$ (^|\.)exosrv\.com$ (^|\.)fancyapi\.com$ (^|\.)feitian001\.com$ (^|\.)feixin2\.com$ (^|\.)flashtalking\.com$ (^|\.)fraudmetrix\.cn$ (^|\.)gentags\.net$ (^|\.)gepush\.com$ (^|\.)getui\.com$ (^|\.)glispa\.com$ (^|\.)go-mpulse$ (^|\.)go-mpulse\.net$ (^|\.)godloveme\.cn$ (^|\.)gridsum\.com$ (^|\.)gridsumdissector\.cn$ (^|\.)gridsumdissector\.com$ (^|\.)growingio\.com$ (^|\.)guohead\.com$ (^|\.)guomob\.com$ (^|\.)haoghost\.com$ (^|\.)hivecn\.cn$ (^|\.)hypers\.com$ (^|\.)icast\.cn$ (^|\.)igexin\.com$ (^|\.)il8r\.com$ (^|\.)imageter\.com$ (^|\.)immob\.cn$ (^|\.)inad\.com$ (^|\.)inmobi\.cn$ (^|\.)inmobi\.net$ (^|\.)inmobicdn\.cn$ (^|\.)inmobicdn\.net$ (^|\.)innity\.com$ (^|\.)instabug\.com$ (^|\.)intely\.cn$ (^|\.)iperceptions\.com$ (^|\.)ipinyou\.com$ (^|\.)irs01\.com$ (^|\.)irs01\.net$ (^|\.)irs09\.com$ (^|\.)istreamsche\.com$ (^|\.)jesgoo\.com$ (^|\.)jiaeasy\.net$ (^|\.)jiguang\.cn$ (^|\.)jimdo\.com$ (^|\.)jisucn\.com$ (^|\.)jmgehn\.cn$ (^|\.)jpush\.cn$ (^|\.)jusha\.com$ (^|\.)juzi\.cn$ (^|\.)juzilm\.com$ (^|\.)kejet\.com$ (^|\.)kejet\.net$ (^|\.)keydot\.net$ (^|\.)keyrun\.cn$ (^|\.)kmd365\.com$ (^|\.)krux\.net$ (^|\.)lnk0\.com$ (^|\.)lnk8\.cn$ (^|\.)localytics\.com$ (^|\.)lomark\.cn$ (^|\.)lotuseed\.com$ (^|\.)lrswl\.com$ (^|\.)lufax\.com$ (^|\.)madhouse\.cn$ (^|\.)madmini\.com$ (^|\.)madserving\.com$ (^|\.)magicwindow\.cn$ (^|\.)mathtag\.com$ (^|\.)maysunmedia\.com$ (^|\.)mbai\.cn$ (^|\.)mediaplex\.com$ (^|\.)mediav\.com$ (^|\.)megajoy\.com$ (^|\.)meiqia\.com$ (^|\.)mgogo\.com$ (^|\.)miaozhen\.com$ (^|\.)microad-cn\.com$ (^|\.)miidi\.net$ (^|\.)mijifen\.com$ (^|\.)mixpanel\.com$ (^|\.)mjmobi\.com$ (^|\.)mng-ads\.com$ (^|\.)moad\.cn$ (^|\.)moatads\.com$ (^|\.)mobaders\.com$ (^|\.)mobclix\.com$ (^|\.)mobgi\.com$ (^|\.)mobisage\.cn$ (^|\.)mobvista\.com$ (^|\.)mopub\.com$ (^|\.)moquanad\.com$ (^|\.)mpush\.cn$ (^|\.)mxpnl\.com$ (^|\.)myhug\.cn$ (^|\.)mzy2014\.com$ (^|\.)networkbench\.com$ (^|\.)newrelic\.com$ (^|\.)ninebox\.cn$ (^|\.)ntalker\.com$ (^|\.)nylalobghyhirgh\.com$ (^|\.)o2omobi\.com$ (^|\.)oadz\.com$ (^|\.)oneapm\.com$ (^|\.)onetad\.com$ (^|\.)optaim\.com$ (^|\.)optimix\.asia$ (^|\.)optimix\.cn$ (^|\.)optimizely\.com$ (^|\.)optimizelyapis\.com$ (^|\.)overture\.com$ (^|\.)p0y\.cn$ (^|\.)pagechoice\.net$ (^|\.)pingdom\.net$ (^|\.)plugrush\.com$ (^|\.)popin\.cc$ (^|\.)pro\.cn$ (^|\.)publicidad\.net$ (^|\.)publicidad\.tv$ (^|\.)pubmatic\.com$ (^|\.)pubnub\.com$ (^|\.)qcl777\.com$ (^|\.)qiyou\.com$ (^|\.)qtmojo\.com$ (^|\.)quantcount\.com$ (^|\.)qucaigg\.com$ (^|\.)qumi\.com$ (^|\.)qxxys\.com$ (^|\.)reachmax\.cn$ (^|\.)responsys\.net$ (^|\.)revsci\.net$ (^|\.)rlcdn\.com$ (^|\.)rtbasia\.com$ (^|\.)sanya1\.com$ (^|\.)scupio\.com$ (^|\.)serving-sys\.com$ (^|\.)shuiguo\.com$ (^|\.)shuzilm\.cn$ (^|\.)similarweb\.com$ (^|\.)sitemeter\.com$ (^|\.)sitescout\.com$ (^|\.)sitetag\.us$ (^|\.)smartmad\.com$ (^|\.)social-touch\.com$ (^|\.)somecoding\.com$ (^|\.)sponsorpay\.com$ (^|\.)stargame\.com$ (^|\.)stg8\.com$ (^|\.)switchadhub\.com$ (^|\.)sycbbs\.com$ (^|\.)synacast\.com$ (^|\.)sysdig\.com$ (^|\.)tagtic\.cn$ (^|\.)talkingdata\.com$ (^|\.)talkingdata\.net$ (^|\.)tansuotv\.com$ (^|\.)tanv\.com$ (^|\.)tanx\.com$ (^|\.)tapjoy\.cn$ (^|\.)th7\.cn$ (^|\.)thoughtleadr\.com$ (^|\.)tianmidian\.com$ (^|\.)tiqcdn\.com$ (^|\.)touclick\.com$ (^|\.)trafficjam\.cn$ (^|\.)trafficmp\.com$ (^|\.)tuia\.cn$ (^|\.)ueadlian\.com$ (^|\.)uerzyr\.cn$ (^|\.)ugdtimg\.com$ (^|\.)ugvip\.com$ (^|\.)ujian\.cc$ (^|\.)ukeiae\.com$ (^|\.)umeng\.co$ (^|\.)umeng\.com$ (^|\.)umtrack\.com$ (^|\.)unimhk\.com$ (^|\.)union-wifi\.com$ (^|\.)union001\.com$ (^|\.)unionsy\.com$ (^|\.)unlitui\.com$ (^|\.)uri6\.com$ (^|\.)ushaqi\.com$ (^|\.)usingde\.com$ (^|\.)uuzu\.com$ (^|\.)uyunad\.com$ (^|\.)vamaker\.com$ (^|\.)voiceads\.cn$ (^|\.)voiceads\.com$ (^|\.)vpon\.com$ (^|\.)vungle\.cn$ (^|\.)vungle\.com$ (^|\.)waps\.cn$ (^|\.)wapx\.cn$ (^|\.)webterren\.com$ (^|\.)whpxy\.com$ (^|\.)winads\.cn$ (^|\.)winasdaq\.com$ (^|\.)wiyun\.com$ (^|\.)wooboo\.com\.cn$ (^|\.)wqmobile\.com$ (^|\.)wrating\.com$ (^|\.)wumii\.cn$ (^|\.)xcy8\.com$ (^|\.)xdrig\.com$ (^|\.)xiaozhen\.com$ (^|\.)xibao100\.com$ (^|\.)xtgreat\.com$ (^|\.)xy\.com$ (^|\.)yandui\.com$ (^|\.)yigao\.com$ (^|\.)yijifen\.com$ (^|\.)yinooo\.com$ (^|\.)yiqifa\.com$ (^|\.)yiwk\.com$ (^|\.)ylunion\.com$ (^|\.)ymapp\.com$ (^|\.)ymcdn\.cn$ (^|\.)yongyuelm\.com$ (^|\.)yooli\.com$ (^|\.)youmi\.net$ (^|\.)youxiaoad\.com$ (^|\.)yoyi\.com\.cn$ (^|\.)yoyi\.tv$ (^|\.)yrxmr\.com$ (^|\.)ysjwj\.com$ (^|\.)yunjiasu\.com$ (^|\.)yunpifu\.cn$ (^|\.)zampdsp\.com$ (^|\.)zamplus\.com$ (^|\.)zcdsp\.com$ (^|\.)zhidian3g\.cn$ (^|\.)zhiziyun\.com$ (^|\.)zhjfad\.com$ (^|\.)zqzxz\.com$ (^|\.)zzsx8\.com$ # 广告联盟-国外**************** (^|\.)acuityplatform\.com$ (^|\.)ad-stir\.com$ (^|\.)ad-survey\.com$ (^|\.)ad4game\.com$ (^|\.)adcloud\.jp$ (^|\.)adcolony\.com$ (^|\.)addthis\.com$ (^|\.)adfurikun\.jp$ (^|\.)adhigh\.net$ (^|\.)adhood\.com$ (^|\.)adinall\.com$ (^|\.)adition\.com$ (^|\.)adk2x\.com$ (^|\.)admarket\.mobi$ (^|\.)admarvel\.com$ (^|\.)admedia\.com$ (^|\.)adnxs\.com$ (^|\.)adotmob\.com$ (^|\.)adperium\.com$ (^|\.)adriver\.ru$ (^|\.)adroll\.com$ (^|\.)adsco\.re$ (^|\.)adservice\.com$ (^|\.)adsrvr\.org$ (^|\.)adsymptotic\.com$ (^|\.)adtaily\.com$ (^|\.)adtech\.de$ (^|\.)adtechjp\.com$ (^|\.)adtechus\.com$ (^|\.)airpush\.com$ (^|\.)am15\.net$ (^|\.)amobee\.com$ (^|\.)appier\.net$ (^|\.)applift\.com$ (^|\.)apsalar\.com$ (^|\.)atas\.io$ (^|\.)awempire\.com$ (^|\.)axonix\.com$ (^|\.)beintoo\.com$ (^|\.)bepolite\.eu$ (^|\.)bidtheatre\.com$ (^|\.)bidvertiser\.com$ (^|\.)blismedia\.com$ (^|\.)brucelead\.com$ (^|\.)bttrack\.com$ (^|\.)casalemedia\.com$ (^|\.)channeladvisor\.com$ (^|\.)connexity\.net$ (^|\.)criteo\.com$ (^|\.)criteo\.net$ (^|\.)csbew\.com$ (^|\.)demdex\.net$ (^|\.)directrev\.com$ (^|\.)dumedia\.ru$ (^|\.)effectivemeasure\.com$ (^|\.)effectivemeasure\.net$ (^|\.)eqads\.com$ (^|\.)everesttech\.net$ (^|\.)exoclick\.com$ (^|\.)extend\.tv$ (^|\.)eyereturn\.com$ (^|\.)fastapi\.net$ (^|\.)fastclick\.com$ (^|\.)fastclick\.net$ (^|\.)flurry\.com$ (^|\.)gosquared\.com$ (^|\.)gtags\.net$ (^|\.)heyzap\.com$ (^|\.)histats\.com$ (^|\.)hitslink\.com$ (^|\.)hot-mob\.com$ (^|\.)hyperpromote\.com$ (^|\.)i-mobile\.co\.jp$ (^|\.)imrworldwide\.com$ (^|\.)inmobi\.com$ (^|\.)intentiq\.com$ (^|\.)inter1ads\.com$ (^|\.)ipredictive\.com$ (^|\.)ironsrc\.com$ (^|\.)iskyworker\.com$ (^|\.)jizzads\.com$ (^|\.)juicyads\.com$ (^|\.)kochava\.com$ (^|\.)leadbolt\.com$ (^|\.)leadbolt\.net$ (^|\.)leadboltads\.net$ (^|\.)leadboltapps\.net$ (^|\.)leadboltmobile\.net$ (^|\.)lenzmx\.com$ (^|\.)liveadvert\.com$ (^|\.)marketgid\.com$ (^|\.)marketo\.com$ (^|\.)mdotm\.com$ (^|\.)medialytics\.com$ (^|\.)medialytics\.io$ (^|\.)meetrics\.com$ (^|\.)meetrics\.net$ (^|\.)mgid\.com$ (^|\.)millennialmedia\.com$ (^|\.)mobadme\.jp$ (^|\.)mobfox\.com$ (^|\.)mobileadtrading\.com$ (^|\.)mobilityware\.com$ (^|\.)mookie1\.com$ (^|\.)msads\.net$ (^|\.)mydas\.mobi$ (^|\.)nend\.net$ (^|\.)netshelter\.net$ (^|\.)nexage\.com$ (^|\.)owneriq\.net$ (^|\.)pixels\.asia$ (^|\.)plista\.com$ (^|\.)popads\.net$ (^|\.)powerlinks\.com$ (^|\.)propellerads\.com$ (^|\.)quantserve\.com$ (^|\.)rayjump\.com$ (^|\.)revdepo\.com$ (^|\.)rubiconproject\.com$ (^|\.)sape\.ru$ (^|\.)scorecardresearch\.com$ (^|\.)segment\.com$ (^|\.)serving-sys\.com$ (^|\.)sharethis\.com$ (^|\.)smaato\.com$ (^|\.)smaato\.net$ (^|\.)smartadserver\.com$ (^|\.)smartnews-ads\.com$ (^|\.)startapp\.com$ (^|\.)startappexchange\.com$ (^|\.)statcounter\.com$ (^|\.)steelhousemedia\.com$ (^|\.)stickyadstv\.com$ (^|\.)supersonic\.com$ (^|\.)tapjoy\.com$ (^|\.)tapjoyads\.com$ (^|\.)trafficjunky\.com$ (^|\.)tribalfusion\.com$ (^|\.)turn\.com$ (^|\.)vidoomy\.com$ (^|\.)viglink\.com$ (^|\.)voicefive\.com$ (^|\.)wedolook\.com$ (^|\.)yadro\.ru$ (^|\.)yengo\.com$ (^|\.)zedo\.com$ (^|\.)zemanta\.com$ # 垃圾网站 (^|\.)11h5\.com$ (^|\.)1kxun\.mobi$ (^|\.)519397\.com$ (^|\.)626uc\.com$ (^|\.)915\.com$ (^|\.)appget\.cn$ (^|\.)appuu\.cn$ (^|\.)coinhive\.com$ (^|\.)huodonghezi\.cn$ (^|\.)wanfeng1\.com$ (^|\.)wep016\.top (^|\.)win-stock\.com\.cn$ (^|\.)zantainet\.com$ ### 运营商广告 (^|\.)\w\w(\w|)dnserror\d(\d|)\.wo\.com\.cn (^|\.)114so\.cn$ (^|\.)go\.10086\.cn$ (^|\.)navi\.gd\.chinamobile\.com$ (^|\.)hivedata\.cc$ # 运营商广告IP段 1.3.0.10/32 10.72.25.0/24 23.42.186.24/32 23.66.147.48/32 23.235.156.167/32 27.255.67.120/32 42.51.146.207/32 45.34.240.72/32 46.165.197.153/32 46.165.197.231/32 47.89.59.182/32 47.90.50.177/32 47.93.103.196/32 47.94.89.32/32 47.96.162.122/32 58.215.179.159/32 60.19.29.16/28 60.19.29.21/28 60.190.139.164/32 60.191.124.196/32 60.210.17.0/24 60.210.17.12/24 61.129.70.132/32 61.132.216.232/32 61.132.221.146/32 61.132.255.128/25 61.132.255.212/32 61.132.255.222/25 61.147.184.18/32 61.152.223.15/32 61.160.200.223/32 61.160.200.242/32 61.160.200.252/32 61.174.50.128/25 61.174.50.167/25 61.191.12.74/32 61.191.206.4/32 67.229.224.28/32 69.28.57.245/32 74.117.182.77/32 78.140.131.214/32 101.201.29.182/32 101.251.211.235/32 103.249.254.113/32 104.195.62.12/32 104.197.140.120/32 104.198.198.188/32 106.75.65.90/32 106.75.65.92/32 106.187.95.251/32 107.21.113.76/32 108.171.248.234/32 111.30.135.167/32 111.63.135.0/24 111.73.45.147/32 111.175.220.160/29 111.175.220.164/32 111.206.13.0/24 111.206.22.0/24 112.74.95.46/32 112.124.115.215/32 113.57.230.88/32 113.207.57.24/32 114.55.123.44/32 114.95.102.77/32 114.247.28.96/32 115.29.141.121/32 115.29.247.48/32 115.182.16.79/32 116.55.227.242/32 116.206.22.7/32 117.25.133.209/32 117.144.242.32/32 118.144.88.126/32 118.144.88.208/28 118.144.88.215/28 118.144.88.215/32 119.4.249.166/32 119.188.13.0/24 120.26.151.246/32 120.27.34.156/32 120.55.199.139/32 120.76.189.132/32 120.80.57.123/32 120.132.57.41/32 120.132.63.203/32 120.197.89.239/32 120.198.116.0/24 121.15.207.243/32 121.43.75.169/32 121.199.73.185/32 121.201.11.95/32 121.201.108.2/32 121.251.255.0/24 122.225.103.120/32 122.226.223.163/32 122.227.254.195/32 122.228.236.165/32 123.56.152.96/32 123.57.94.184/32 123.57.162.39/32 123.59.78.229/32 123.59.152.170/32 123.125.111.0/24 123.139.154.0/24 123.139.154.201/24 124.14.21.147/32 124.14.21.151/32 124.160.194.11/32 124.232.160.178/32 125.46.61.28/32 125.89.69.5/32 139.159.32.82/32 139.196.239.52/32 139.224.26.92/32 139.224.74.148/32 146.148.85.61/32 162.212.181.32/32 173.208.177.227/32 175.6.223.15/32 180.76.155.58/32 180.76.162.60/32 180.76.171.28/32 180.76.172.149/32 180.76.181.213/32 180.166.52.24/32 182.92.81.104/32 183.6.188.224/29 183.6.188.226/29 183.59.53.184/29 183.59.53.187/29 183.59.53.237/32 183.131.79.30/32 183.131.79.130/32 198.40.52.11/32 202.104.1.27/32 202.105.165.202/32 205.209.138.102/32 211.98.71.192/29 211.98.71.195/29 211.103.159.32/32 211.137.132.89/32 211.139.178.49/32 211.149.225.23/32 211.167.105.131/32 218.25.246.118/32 218.93.127.37/32 219.234.83.60/32 220.115.251.25/32 220.196.52.141/32 221.179.46.128/25 221.179.46.190/25 221.179.140.0/24 221.179.183.0/24 221.179.191.0/24 221.204.213.222/32 221.228.17.152/32 221.228.214.101/32 221.231.6.79/32 222.73.156.235/32 222.186.61.91/32 222.186.61.95/32 222.186.61.96/32 222.186.61.97/32 222.187.226.96/32 223.6.255.99/32 #********************************************************************** [bypass_list] # 直连列表 # MyList (^|\.)423down\.com$ (^|\.)chaipip\.com$ (^|\.)hrtsea\.com$ (^|\.)laomo\.me$ (^|\.)mpyit\.com$ # CN域名直连 (^|\.)cn$ (^|\.)edu\.cn$ (^|\.)gov\.cn$ (^|\.)net\.cn$ (^|\.)org\.cn$ (^|\.)中国$ (^|\.)公司$ (^|\.)网络$ # 中国国内常见域名关键词直连 (^|\.)\w*-cn\w*\.\w*$ (^|\.)\w*0x\w*\.\w*$ (^|\.)\w*360buy\w*\.\w*$ (^|\.)\w*alicdn\w*\.\w*$ (^|\.)\w*alimama\w*\.\w*$ (^|\.)\w*alipay\w*\.\w*$ (^|\.)\w*appzapp\w*\.\w*$ (^|\.)\w*baidupcs\w*\.\w*$ (^|\.)\w*bilibili\w*\.\w*$ (^|\.)\w*ccgslb\w*\.\w*$ (^|\.)\w*chinacache\w*\.\w*$ (^|\.)\w*duobao\w*\.\w*$ (^|\.)\w*duolingo\w*\.\w*$ (^|\.)\w*jdpay\w*\.\w*$ (^|\.)\w*moke\w*\.\w*$ (^|\.)\w*qhimg\w*\.\w*$ (^|\.)\w*vpimg\w*\.\w*$ (^|\.)\w*xiami\w*\.\w*$ (^|\.)\w*xiaomi\w*\.\w*$ # 360 (^|\.)360\.com$ (^|\.)360kuai\.com$ (^|\.)360safe\.com$ (^|\.)dhrest\.com$ (^|\.)qhres\.com$ (^|\.)qhstatic\.com$ (^|\.)qhupdate\.com$ (^|\.)so\.com$ # 4399 (^|\.)4399\.com$ (^|\.)4399pk\.com$ (^|\.)5054399\.com$ (^|\.)img4399\.com$ # 58 (^|\.)58\.com$ # Alibaba (^|\.)1688\.com$ (^|\.)aliapp\.org$ (^|\.)alibaba\.com$ (^|\.)alibabacloud\.com$ (^|\.)alibabausercontent\.com$ (^|\.)alicdn\.com$ (^|\.)aliexpress\.com$ (^|\.)aliimg\.com$ (^|\.)alikunlun\.com$ (^|\.)alipay\.com$ (^|\.)alipayobjects\.com$ (^|\.)alisoft\.com$ (^|\.)aliyun\.com$ (^|\.)aliyuncdn\.com$ (^|\.)aliyuncs\.com$ (^|\.)amap\.com$ (^|\.)autonavi\.com$ (^|\.)dingtalk\.com$ (^|\.)ele\.me$ (^|\.)hichina\.com$ (^|\.)mmstat\.com$ (^|\.)mxhichina\.com$ (^|\.)soku\.com$ (^|\.)taobao\.com$ (^|\.)taobaocdn\.com$ (^|\.)tbcache\.com$ (^|\.)tbcdn\.com$ (^|\.)tmall\.com$ (^|\.)tmall\.hk$ (^|\.)ucweb\.com$ (^|\.)xiami\.com$ (^|\.)xiami\.net$ (^|\.)ykimg\.com$ (^|\.)youku\.com$ # Apple (^|\.)aaplimg\.com$ (^|\.)akadns\.net$ (^|\.)apple-cloudkit\.com$ (^|\.)apple\.co$ (^|\.)apple\.com$ (^|\.)appstore\.com$ (^|\.)cdn-apple\.com$ (^|\.)crashlytics\.com$ (^|\.)icloud-content\.com$ (^|\.)icloud\.com$ (^|\.)me\.com$ (^|\.)mzstatic\.com$ # Baidu (^|\.)baidu\.com$ (^|\.)baidubcr\.com$ (^|\.)baidupcs\.com$ (^|\.)baidustatic\.com$ (^|\.)bcebos\.com$ (^|\.)bdimg\.com$ (^|\.)bdstatic\.com$ (^|\.)bdurl\.net$ (^|\.)hao123\.com$ (^|\.)hao123img\.com$ (^|\.)jomodns\.com$ (^|\.)yunjiasu-cdn\.net$ # Bilibili (^|\.)acg\.tv$ (^|\.)acgvideo\.com$ (^|\.)b23\.tv$ (^|\.)biliapi\.com$ (^|\.)biliapi\.net$ (^|\.)bilibili\.com$ (^|\.)bilibili\.tv$ (^|\.)biligame\.com$ (^|\.)biligame\.net$ (^|\.)hdslb\.com$ (^|\.)im9\.com$ # Blizzard (^|\.)battle\.net$ (^|\.)battlenet\.com$ (^|\.)blizzard\.com$ # ByteDance (^|\.)bytedance\.com$ (^|\.)bytedance\.net$ (^|\.)bytedns\.net$ (^|\.)byteimg\.com$ (^|\.)feiliao\.com$ (^|\.)gifshow\.com$ (^|\.)huoshan\.com$ (^|\.)iesdouyin\.com$ (^|\.)ixigua\.com$ (^|\.)kspkg\.com$ (^|\.)pstatp\.com$ (^|\.)snssdk\.com$ (^|\.)toutiao\.com$ (^|\.)toutiao13\.com$ (^|\.)toutiaocdn\.com$ (^|\.)toutiaocdn\.net$ (^|\.)toutiaocloud\.com$ (^|\.)toutiaohao\.com$ (^|\.)toutiaohao\.net$ (^|\.)toutiaoimg\.com$ (^|\.)toutiaopage\.com$ (^|\.)wukong\.com$ (^|\.)zijieimg\.com$ (^|\.)zjbyte\.com$ (^|\.)zjcdn\.com$ # CCTV (^|\.)cctv\.com$ (^|\.)cctvpic\.com$ (^|\.)livechina\.com$ # ChinaNet (^|\.)21cn\.com$ # DiDi (^|\.)didialift\.com$ (^|\.)didiglobal\.com$ (^|\.)udache\.com$ # Douyu 斗鱼 (^|\.)douyu\.com$ (^|\.)douyu\.tv$ (^|\.)douyutv\.com$ # Epic (^|\.)epicgames\.com$ (^|\.)helpshift\.com$ (^|\.)paragon\.com$ (^|\.)unrealengine\.com$ # Google China (^|\.)265\.com$ (^|\.)2mdn\.net$ (^|\.)alt[0-8]-mtalk\.google\.com$ (^|\.)app-measurement\.com$ (^|\.)beacons\.gcp\.gvt2\.com$ (^|\.)beacons\.gvt2\.com$ (^|\.)beacons3\.gvt2\.com$ (^|\.)c\.android\.clients\.google\.com$ (^|\.)cache\.pack\.google\.com$ (^|\.)checkin\.gstatic\.com$ (^|\.)clickserve\.dartsearch\.net$ (^|\.)clientservices\.googleapis\.com$ (^|\.)connectivitycheck\.gstatic\.com$ (^|\.)crl\.pki\.goog$ (^|\.)dl\.google\.com$ (^|\.)dl\.l\.google\.com$ (^|\.)fonts\.googleapis\.com$ (^|\.)fonts\.gstatic\.com$ (^|\.)googletagmanager\.com$ (^|\.)googletagservices\.com$ (^|\.)gtm\.oasisfeng\.com$ (^|\.)imasdk\.googleapis\.com$ (^|\.)kh\.google\.com$ (^|\.)khm\.google\.com$ (^|\.)khm\.googleapis\.com$ (^|\.)khm0\.google\.com$ (^|\.)khm0\.googleapis\.com$ (^|\.)khm1\.google\.com$ (^|\.)khm1\.googleapis\.com$ (^|\.)khm2\.google\.com$ (^|\.)khm2\.googleapis\.com$ (^|\.)khm3\.google\.com$ (^|\.)khm3\.googleapis\.com$ (^|\.)khmdb\.google\.com$ (^|\.)khmdb\.googleapis\.com$ (^|\.)mtalk\.google\.com$ (^|\.)ocsp\.pki\.goog$ (^|\.)recaptcha\.net$ (^|\.)redirector\.gvt1\.com$ (^|\.)safebrowsing-cache\.google\.com$ (^|\.)safebrowsing\.googleapis\.com$ (^|\.)settings\.crashlytics\.com$ (^|\.)ssl-google-analytics\.l\.google\.com$ (^|\.)ssl\.gstatic\.com$ (^|\.)toolbarqueries\.google\.com$ (^|\.)tools\.google\.com$ (^|\.)tools\.l\.google\.com$ (^|\.)update\.googleapis\.com$ (^|\.)www-googletagmanager\.l\.google\.com$ (^|\.)www\.gstatic\.com$ # HuaWei (^|\.)dbankcdn\.com$ (^|\.)hc-cdn\.com$ (^|\.)hicloud\.com$ (^|\.)huawei\.com$ (^|\.)huaweicloud\.com$ (^|\.)huaweishop\.net$ (^|\.)hwccpc\.com$ (^|\.)vmall\.com$ (^|\.)vmallres\.com$ # Iflytek 科大讯飞 (^|\.)iflyink\.com$ (^|\.)iflyrec\.com$ (^|\.)iflytek\.com$ # Iqiyi (^|\.)71\.am$ (^|\.)71edge\.com$ (^|\.)iqiyi\.com$ (^|\.)iqiyipic\.com$ (^|\.)ppsimg\.com$ (^|\.)qiyi\.com$ (^|\.)qiyipic\.com$ (^|\.)qy\.net$ # JD (^|\.)360buy\.com$ (^|\.)360buyimg\.com$ (^|\.)jcloudcs\.com$ (^|\.)jd\.com$ (^|\.)jd\.hk$ (^|\.)jdcloud\.com$ (^|\.)jdpay\.com$ (^|\.)paipai\.com$ # Kingsoft (^|\.)iciba\.com$ (^|\.)ksosoft\.com$ (^|\.)ksyun\.com$ # Kuaishou 快手 (^|\.)kuaishou\.com$ (^|\.)yximgs\.com$ # Meitu (^|\.)meitu\.com$ (^|\.)meitudata\.com$ (^|\.)meitustat\.com$ (^|\.)meipai\.com$ # LeTV 乐视 (^|\.)le\.com$ (^|\.)lecloud\.com$ (^|\.)letv\.com$ (^|\.)letvcloud\.com$ (^|\.)letvimg\.com$ (^|\.)letvlive\.com$ (^|\.)letvstore\.com$ # MGTV 芒果TV (^|\.)hitv\.com$ (^|\.)hunantv\.com$ (^|\.)mgtv\.com$ # MI (^|\.)duokan\.com$ (^|\.)mi-img\.com$ (^|\.)mi\.com$ (^|\.)miui\.com$ (^|\.)xiaomi\.com$ (^|\.)xiaomi\.net$ (^|\.)xiaomicp\.com$ # NetEase (^|\.)126\.com$ (^|\.)126\.net$ (^|\.)127\.net$ (^|\.)163\.com$ (^|\.)163yun\.com$ (^|\.)lofter\.com$ (^|\.)netease\.com$ (^|\.)ydstatic\.com$ (^|\.)youdao\.com$ # PPTV、PPLive (^|\.)pplive\.com$ (^|\.)pptv\.com$ # PDD 拼多多 (^|\.)pinduoduo\.com$ (^|\.)yangkeduo\.com$ # Sina (^|\.)leju\.com$ (^|\.)miaopai\.com$ (^|\.)sina\.com$ (^|\.)sinaapp\.com$ (^|\.)sinaimg\.com$ (^|\.)weibo\.com$ (^|\.)weibocdn\.com$ (^|\.)xiaoka\.tv$ # Sohu Sogo (^|\.)go2map\.com$ (^|\.)sogo\.com$ (^|\.)sogou\.com$ (^|\.)sogoucdn\.com$ (^|\.)sohu-inc\.com$ (^|\.)sohu\.com$ (^|\.)sohucs\.com$ (^|\.)sohuno\.com$ (^|\.)sohurdc\.com$ (^|\.)v-56\.com$ # Sony (^|\.)playstation\.com$ (^|\.)playstation\.net$ (^|\.)playstationnetwork\.com$ (^|\.)sony\.com$ (^|\.)sonyentertainmentnetwork\.com$ # Spark (^|\.)amplitude\.com$ (^|\.)firebaseio\.com$ (^|\.)hockeyapp\.net$ (^|\.)smartmailcloud\.com$ # Steam (^|\.)steam-chat\.com$ (^|\.)steamgames\.com$ (^|\.)steamusercontent\.com$ (^|\.)steamcontent\.com$ (^|\.)steamstatic\.com$ (^|\.)steamcdn-a\.akamaihd\.net$ (^|\.)steamstat\.us$ # Tencent (^|\.)foxmail\.com$ (^|\.)gtimg\.com$ (^|\.)idqqimg\.com$ (^|\.)igamecj\.com$ (^|\.)myapp\.com$ (^|\.)myqcloud\.com$ (^|\.)qq\.com$ (^|\.)qqmail\.com$ (^|\.)qqurl\.com$ (^|\.)smtcdns\.com$ (^|\.)smtcdns\.net$ (^|\.)soso\.com$ (^|\.)tencent-cloud\.net$ (^|\.)tencent\.com$ (^|\.)tencentmind\.com$ (^|\.)tenpay\.com$ (^|\.)wechat\.com$ (^|\.)weixin\.com$ (^|\.)weiyun\.com$ # Vip 唯品会 (^|\.)appsimg\.com$ (^|\.)appvipshop\.com$ (^|\.)vip\.com$ (^|\.)vipstatic\.com$ # Ximalaya 喜马拉雅 (^|\.)ximalaya\.com$ (^|\.)xmcdn\.com$ # Xunlei 迅雷 (^|\.)00cdn\.com$ (^|\.)88cdn\.com$ (^|\.)kanimg\.com$ (^|\.)kankan\.com$ (^|\.)p2cdn\.com$ (^|\.)sandai\.net$ (^|\.)thundercdn\.com$ (^|\.)xunlei\.com$ # YYeTs 人人影视 (^|\.)jstucdn\.com$ (^|\.)zimuzu\.io$ (^|\.)zimuzu\.tv$ (^|\.)zmz001\.com$ (^|\.)zmz002\.com$ (^|\.)zmz003\.com$ (^|\.)zmz004\.com$ (^|\.)zmz2019\.com$ (^|\.)zmzapi\.com$ (^|\.)zmzapi\.net$ (^|\.)zmzfile\.com$ # Private Tracker (^|\.)\w*announce\w*\.\w*$ (^|\.)\w*torrent\w*\.\w*$ (^|\.)\w*tracker\w*\.\w*$ (^|\.)animetorrents\.me$ (^|\.)awesome-hd\.me$ (^|\.)beitai\.pt$ (^|\.)bittorrent\.com$ (^|\.)broadcasthe\.net$ (^|\.)chdbits\.co$ (^|\.)classix-unlimited\.co\.uk$ (^|\.)empornium\.me$ (^|\.)gazellegames\.net$ (^|\.)hd4fans\.org$ (^|\.)hdchina\.org$ (^|\.)hdhome\.org$ (^|\.)hdsky\.me$ (^|\.)hdtime\.org$ (^|\.)hdzone\.me$ (^|\.)icetorrent\.org$ (^|\.)jpopsuki\.eu$ (^|\.)keepfrds\.com$ (^|\.)leaguehd\.com$ (^|\.)m-team\.cc$ (^|\.)madsrevolution\.net$ (^|\.)msg\.vg$ (^|\.)nanyangpt\.com$ (^|\.)ncore\.cc$ (^|\.)open\.cd$ (^|\.)ourbits\.club$ (^|\.)passthepopcorn\.me$ (^|\.)privatehd\.to$ (^|\.)pthome\.net$ (^|\.)redacted\.ch$ (^|\.)springsunday\.net$ (^|\.)tjupt\.org$ (^|\.)totheglory\.im$ # TeamViewer (^|\.)teamviewer\.com$ 109.239.140.0/24 139.220.243.27/32 172.16.102.56/32 185.188.32.1/28 221.226.128.146/32 # Public Direct CDN 公共直连cdn (^|\.)baomitu\.com$ (^|\.)bootcss\.com$ (^|\.)jiasule\.com$ (^|\.)jsdelivr\.net$ (^|\.)staticfile\.org$ (^|\.)upaiyun\.com$ # AccelerateDirectSites (^|\.)12306\.com$ (^|\.)17173\.com$ (^|\.)17k\.com$ (^|\.)360doc\.com$ (^|\.)36kr\.com$ (^|\.)3dmgame\.com$ (^|\.)51cto\.com$ (^|\.)51job\.com$ (^|\.)51jobcdn\.com$ (^|\.)56\.com$ (^|\.)8686c\.com$ (^|\.)abchina\.com$ (^|\.)abercrombie\.com$ (^|\.)acfun\.tv$ (^|\.)air-matters\.com$ (^|\.)air-matters\.io$ (^|\.)aixifan\.com$ (^|\.)algocasts\.io$ (^|\.)babytree\.com$ (^|\.)babytreeimg\.com$ (^|\.)baicizhan\.com$ (^|\.)baidupan\.com$ (^|\.)baike\.com$ (^|\.)biqudu\.com$ (^|\.)biquge\.com$ (^|\.)bitauto\.com$ (^|\.)c-ctrip\.com$ (^|\.)camera360\.com$ (^|\.)cdnmama\.com$ (^|\.)chaoxing\.com$ (^|\.)che168\.com$ (^|\.)chinacache\.net$ (^|\.)chinaso\.com$ (^|\.)chinaz\.com$ (^|\.)chinaz\.net$ (^|\.)chuimg\.com$ (^|\.)cibntv\.net$ (^|\.)clouddn\.com$ (^|\.)cloudxns\.net$ (^|\.)cn163\.net$ (^|\.)cnbeta\.com$ (^|\.)cnbetacdn\.com$ (^|\.)cnblogs\.com$ (^|\.)cnki\.net$ (^|\.)cnmstl\.net$ (^|\.)coolapk\.com$ (^|\.)coolapkmarket\.com$ (^|\.)csdn\.net$ (^|\.)ctrip\.com$ (^|\.)dangdang\.com$ (^|\.)dfcfw\.com$ (^|\.)dianping\.com$ (^|\.)dilidili\.wang$ (^|\.)douban\.com$ (^|\.)doubanio\.com$ (^|\.)dpfile\.com$ (^|\.)duowan\.com$ (^|\.)dxycdn\.com$ (^|\.)dytt8\.net$ (^|\.)easou\.com$ (^|\.)eastday\.com$ (^|\.)eastmoney\.com$ (^|\.)ecitic\.com$ (^|\.)ewqcxz\.com$ (^|\.)fang\.com$ (^|\.)fantasy\.tv$ (^|\.)feng\.com$ (^|\.)fengkongcloud\.com$ (^|\.)fir\.im$ (^|\.)frdic\.com$ (^|\.)fresh-ideas\.cc$ (^|\.)ganji\.com$ (^|\.)ganjistatic1\.com$ (^|\.)geetest\.com$ (^|\.)geilicdn\.com$ (^|\.)godic\.net$ (^|\.)gravatar\.com$ (^|\.)guazi\.com$ (^|\.)gwdang\.com$ (^|\.)gzlzfm\.com$ (^|\.)haibian\.com$ (^|\.)haosou\.com$ (^|\.)hollisterco\.com$ (^|\.)hongxiu\.com$ (^|\.)huajiao\.com$ (^|\.)hupu\.com$ (^|\.)huxiucdn\.com$ (^|\.)huya\.com$ (^|\.)ifeng\.com$ (^|\.)ifengimg\.com$ (^|\.)images-amazon\.com$ (^|\.)infzm\.com$ (^|\.)ipip\.net$ (^|\.)it168\.com$ (^|\.)ithome\.com$ (^|\.)ixdzs\.com$ (^|\.)jianguoyun\.com$ (^|\.)jianshu\.com$ (^|\.)jianshu\.io$ (^|\.)jianshuapi\.com$ (^|\.)jiathis\.com$ (^|\.)jmstatic\.com$ (^|\.)jumei\.com$ (^|\.)kaola\.com$ (^|\.)knewone\.com$ (^|\.)koowo\.com$ (^|\.)ksyungslb\.com$ (^|\.)kuaidi100\.com$ (^|\.)kugou\.com$ (^|\.)lancdns\.com$ (^|\.)landiannews\.com$ (^|\.)lanzou\.com$ (^|\.)lemicp\.com$ (^|\.)letitfly\.me$ (^|\.)linkedin\.com$ (^|\.)lizhi\.fm$ (^|\.)lizhi\.io$ (^|\.)lizhifm\.com$ (^|\.)loli\.net$ (^|\.)luoo\.net$ (^|\.)lvmama\.com$ (^|\.)lxdns\.com$ (^|\.)maoyan\.com$ (^|\.)meilishuo\.com$ (^|\.)meituan\.com$ (^|\.)meituan\.net$ (^|\.)meizu\.com$ (^|\.)miguvideo\.com$ (^|\.)mobike\.com$ (^|\.)mogu\.com$ (^|\.)mogucdn\.com$ (^|\.)mogujie\.com$ (^|\.)moji\.com$ (^|\.)moke\.com$ (^|\.)msstatic\.com$ (^|\.)mubu\.com$ (^|\.)myunlu\.com$ (^|\.)nruan\.com$ (^|\.)nuomi\.com$ (^|\.)onedns\.net$ (^|\.)onlinedown\.net$ (^|\.)oracle\.com$ (^|\.)oschina\.net$ (^|\.)ourdvs\.com$ (^|\.)overcast\.fm$ (^|\.)paypal\.com$ (^|\.)polyv\.net$ (^|\.)qbox\.me$ (^|\.)qcloud\.com$ (^|\.)qcloudcdn\.com$ (^|\.)qdaily\.com$ (^|\.)qdmm\.com$ (^|\.)qhimg\.com$ (^|\.)qianqian\.com$ (^|\.)qidian\.com$ (^|\.)qihucdn\.com$ (^|\.)qin\.io$ (^|\.)qiniu\.com$ (^|\.)qiniucdn\.com$ (^|\.)qiniudn\.com$ (^|\.)qiushibaike\.com$ (^|\.)quanmin\.tv$ (^|\.)qunar\.com$ (^|\.)qunarzz\.com$ (^|\.)rarbg\.to$ (^|\.)repaik\.com$ (^|\.)rrmj\.tv$ (^|\.)ruguoapp\.com$ (^|\.)runoob\.com$ (^|\.)sankuai\.com$ (^|\.)segmentfault\.com$ (^|\.)sf-express\.com$ (^|\.)shumilou\.net$ (^|\.)simplecd\.me$ (^|\.)sm\.ms$ (^|\.)smzdm\.com$ (^|\.)snwx\.com$ (^|\.)soufunimg\.com$ (^|\.)ssl-images-amazon\.com$ (^|\.)sspai\.com$ (^|\.)startssl\.com$ (^|\.)suning\.com$ (^|\.)taihe\.com$ (^|\.)th-sjy\.com$ (^|\.)tianqi\.com$ (^|\.)tianqistatic\.com$ (^|\.)tianyancha\.com$ (^|\.)tianyaui\.com$ (^|\.)tietuku\.com$ (^|\.)tiexue\.net$ (^|\.)tmiaoo\.com$ (^|\.)trip\.com$ (^|\.)ttmeiju\.com$ (^|\.)tudou\.com$ (^|\.)tuniu\.com$ (^|\.)tuniucdn\.com$ (^|\.)umengcloud\.com$ (^|\.)upyun\.com$ (^|\.)uxengine\.net$ (^|\.)videocc\.net$ (^|\.)vmware\.com$ (^|\.)wandoujia\.com$ (^|\.)weather\.com$ (^|\.)weico\.cc$ (^|\.)weidian\.com$ (^|\.)weiphone\.com$ (^|\.)weiphone\.net$ (^|\.)womai\.com$ (^|\.)wscdns\.com$ (^|\.)xdrig\.com$ (^|\.)xhscdn\.com$ (^|\.)xiachufang\.com$ (^|\.)xiaohongshu\.com$ (^|\.)xiaojukeji\.com$ (^|\.)xinhuanet\.com$ (^|\.)xitek\.com$ (^|\.)xiumi\.us$ (^|\.)xslb\.net$ (^|\.)xueqiu\.com$ (^|\.)yach\.me$ (^|\.)yeepay\.com$ (^|\.)yhd\.com$ (^|\.)yihaodianimg\.com$ (^|\.)yinxiang\.com$ (^|\.)yinyuetai\.com$ (^|\.)yixia\.com$ (^|\.)ys168\.com$ (^|\.)yuewen\.com$ (^|\.)yy\.com$ (^|\.)yystatic\.com$ (^|\.)zealer\.com$ (^|\.)zhangzishi\.cc$ (^|\.)zhanqi\.tv$ (^|\.)zhaopin\.com$ (^|\.)zhihu\.com$ (^|\.)zhimg\.com$ (^|\.)zhongsou\.com$ (^|\.)zhuihd\.com$ #********************************************************************** # 本地/局域网地址 ^(.*\.)?local$ ^(.*\.)?localhost$ ^(.*\.)?ip6-localhost$ ^(.*\.)?ip6-loopback$ # Router managed 路由器管理域名 (^|\.)hiwifi\.com$ (^|\.)leike\.cc$ (^|\.)miwifi\.com$ (^|\.)my\.router$ (^|\.)p\.to$ (^|\.)peiluyou\.com$ (^|\.)phicomm\.me$ (^|\.)routerlogin\.com$ (^|\.)tendawifi\.com$ (^|\.)zte\.home$ (^|\.)router\.asus\.com$ ::ffff:0:0:0:0/1 ::ffff:128:0:0:0/1 10.0.0.0/8 100.64.0.0/10 127.0.0.0/8 172.16.0.0/12 192.168.0.0/16 # 中国云服务商ip端 # 阿里 8.128.0.0/10 8.208.0.0/12 14.1.112.0/22 41.222.240.0/22 41.223.119.0/24 43.242.168.0/22 45.112.212.0/22 47.52.0.0/16 47.56.0.0/15 47.74.0.0/15 47.76.0.0/14 47.80.0.0/12 47.235.0.0/16 47.236.0.0/14 47.240.0.0/14 47.244.0.0/15 47.246.0.0/16 47.250.0.0/15 47.252.0.0/15 47.254.0.0/16 59.82.0.0/20 59.82.240.0/21 59.82.248.0/22 72.254.0.0/16 103.38.56.0/22 103.52.76.0/22 103.206.40.0/22 110.76.21.0/24 110.76.23.0/24 112.125.0.0/17 116.251.64.0/18 119.38.208.0/20 119.38.224.0/20 119.42.224.0/20 139.95.0.0/16 140.205.1.0/24 140.205.122.0/24 147.139.0.0/16 149.129.0.0/16 155.102.0.0/16 161.117.0.0/16 163.181.0.0/16 170.33.0.0/16 198.11.128.0/18 205.204.96.0/19 # 腾讯 qq 19.28.0.0/23 45.40.192.0/19 49.51.0.0/16 62.234.0.0/16 94.191.0.0/17 103.7.28.0/22 103.116.50.0/23 103.231.60.0/24 109.244.0.0/16 111.30.128.0/21 111.30.136.0/24 111.30.139.0/24 111.30.140.0/23 115.159.0.0/16 119.28.0.0/15 120.88.56.0/23 121.51.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 146.56.192.0/18 148.70.0.0/16 150.109.0.0/16 152.136.0.0/16 162.14.0.0/16 162.62.0.0/16 170.106.130.0/24 182.254.0.0/16 188.131.128.0/17 203.195.128.0/17 203.205.128.0/17 210.4.138.0/24 211.152.128.0/23 211.152.132.0/23 211.152.148.0/23 212.64.0.0/17 212.129.128.0/17 # 百度 Baidu 45.113.192.0/22 63.217.23.0/24 63.243.252.0/24 103.235.44.0/22 104.193.88.0/22 106.12.0.0/15 114.28.224.0/20 119.63.192.0/21 180.76.0.0/24 180.76.0.0/16 182.61.0.0/16 185.10.104.0/22 202.46.48.0/20 203.90.238.0/24 # 华为 huwei 43.254.0.0/22 45.249.212.0/22 49.4.0.0/17 78.101.192.0/19 78.101.224.0/20 81.52.161.0/24 85.97.220.0/22 103.31.200.0/22 103.69.140.0/23 103.218.216.0/22 114.115.128.0/17 114.116.0.0/16 116.63.128.0/18 116.66.184.0/22 116.71.96.0/20 116.71.128.0/21 116.71.136.0/22 116.71.141.0/24 116.71.142.0/24 116.71.243.0/24 116.71.244.0/24 116.71.251.0/24 117.78.0.0/18 119.3.0.0/16 119.8.0.0/21 119.8.32.0/19 121.36.0.0/17 121.36.128.0/18 121.37.0.0/17 122.112.128.0/17 139.9.0.0/18 139.9.64.0/19 139.9.100.0/22 139.9.104.0/21 139.9.112.0/20 139.9.128.0/18 139.9.192.0/19 139.9.224.0/20 139.9.240.0/21 139.9.248.0/22 139.159.128.0/19 139.159.160.0/22 139.159.164.0/23 139.159.168.0/21 139.159.176.0/20 139.159.192.0/18 159.138.0.0/18 159.138.64.0/21 159.138.79.0/24 159.138.80.0/20 159.138.96.0/20 159.138.112.0/21 159.138.125.0/24 159.138.128.0/18 159.138.192.0/20 159.138.223.0/24 159.138.224.0/19 168.195.92.0/22 185.176.76.0/22 197.199.0.0/18 197.210.163.0/24 197.252.1.0/24 197.252.2.0/23 197.252.4.0/22 197.252.8.0/21 200.32.52.0/24 200.32.54.0/24 200.32.57.0/24 203.135.0.0/22 203.135.4.0/23 203.135.8.0/23 203.135.11.0/24 203.135.13.0/24 203.135.20.0/24 203.135.22.0/23 203.135.24.0/23 203.135.26.0/24 203.135.29.0/24 203.135.33.0/24 203.135.38.0/23 203.135.40.0/24 203.135.43.0/24 203.135.48.0/24 203.135.50.0/24 # 网易 NetEase 42.186.0.0/16 45.127.128.0/22 45.195.24.0/24 45.253.132.0/22 45.253.240.0/22 45.254.48.0/23 59.111.0.0/20 59.111.128.0/17 103.71.120.0/21 103.71.128.0/22 103.71.196.0/22 103.71.200.0/22 103.72.12.0/22 103.72.18.0/23 103.72.24.0/22 103.72.28.0/23 103.72.38.0/23 103.72.40.0/23 103.72.44.0/22 103.72.48.0/21 103.72.128.0/21 103.74.24.0/21 103.74.48.0/22 103.126.92.0/22 103.129.252.0/22 103.131.252.0/22 103.135.240.0/22 103.196.64.0/22 106.2.32.0/19 106.2.64.0/18 114.113.196.0/22 114.113.200.0/22 115.236.112.0/20 115.238.76.0/22 123.58.160.0/19 223.252.192.0/19 # 360 101.198.128.0/18 101.198.192.0/19 101.199.196.0/22 # 国内ip地址 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.5.0/24 1.2.6.0/23 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/18 1.8.64.0/19 1.8.96.0/22 1.8.100.0/23 1.8.112.0/20 1.8.128.0/20 1.8.144.0/22 1.8.148.0/23 1.8.154.0/23 1.8.156.0/22 1.8.160.0/19 1.8.192.0/19 1.8.224.0/20 1.8.244.0/22 1.8.248.0/21 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/15 1.118.1.0/24 1.118.2.0/23 1.118.4.0/22 1.118.8.0/21 1.118.16.0/20 1.118.32.0/19 1.118.64.0/18 1.118.128.0/17 1.119.0.0/16 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 2.20.54.23/32 8.128.0.0/10 8.209.36.0/22 8.209.40.0/21 8.209.48.0/20 8.209.192.0/18 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.108.0/22 14.16.0.0/12 14.102.128.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.81.0.0/24 20.134.160.0/20 20.139.160.0/20 20.249.255.0/24 20.251.0.0/22 23.236.64.0/25 23.236.64.128/26 23.236.64.192/27 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.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/17 36.51.128.0/18 36.51.192.0/19 36.51.224.0/20 36.51.240.0/21 36.51.248.0/22 36.51.252.0/23 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 38.142.239.114/32 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.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/23 42.83.134.0/24 42.83.139.0/24 42.83.140.0/22 42.83.144.0/20 42.83.160.0/19 42.83.192.0/18 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/21 42.157.8.0/22 42.157.14.0/23 42.157.16.0/20 42.157.32.0/19 42.157.64.0/18 42.157.128.0/17 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/15 42.246.0.0/16 42.247.0.0/22 42.247.4.0/24 42.247.5.0/25 42.247.5.128/26 42.247.5.204/30 42.247.5.208/28 42.247.5.224/27 42.247.6.0/23 42.247.8.0/21 42.247.16.0/20 42.247.32.0/19 42.247.64.0/18 42.247.128.0/17 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.68.0/22 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.86.0/24 43.225.120.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/19 43.226.160.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.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/24 43.228.118.0/23 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.136.0/21 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.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.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.156.0/22 43.240.160.0/19 43.240.192.0/19 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.208.0/20 43.241.224.0/20 43.241.240.0/22 43.241.248.0/22 43.242.8.0/21 43.242.16.0/20 43.242.48.0/22 43.242.53.0/24 43.242.54.0/23 43.242.56.0/21 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.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.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.180.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.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.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/22 43.250.96.0/21 43.250.108.0/22 43.250.112.0/21 43.250.128.0/22 43.250.144.0/21 43.250.160.0/22 43.250.168.0/22 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.36.0/22 43.251.192.0/22 43.251.232.0/22 43.251.244.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/22 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.144.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/20 45.40.208.0/21 45.40.224.0/19 45.65.16.0/20 45.112.132.0/22 45.112.188.0/22 45.112.208.0/22 45.112.216.0/21 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.72.0/22 45.113.144.0/21 45.113.168.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.32.0/22 45.114.52.0/22 45.114.96.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.244.0/22 45.115.248.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.60.0/22 45.119.64.0/21 45.119.72.0/22 45.119.104.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.240.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.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.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.24.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.136.0/22 45.126.48.0/21 45.126.108.0/22 45.126.112.0/21 45.126.120.0/22 45.126.220.0/22 45.127.8.0/21 45.127.128.0/22 45.127.144.0/21 45.127.156.0/22 45.248.8.0/22 45.248.80.0/22 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.112.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.137.0/24 45.251.138.0/23 45.251.140.0/22 45.251.144.0/20 45.251.160.0/19 45.251.192.0/19 45.251.224.0/22 45.252.0.0/19 45.252.32.0/20 45.252.48.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/19 45.253.224.0/20 45.253.240.0/22 45.254.0.0/20 45.254.16.0/21 45.254.28.0/22 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/18 45.255.64.0/19 45.255.96.0/20 45.255.112.0/21 45.255.120.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.56.0/22 49.51.60.0/23 49.51.110.0/23 49.51.112.0/20 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 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/19 58.68.160.0/23 58.68.163.0/24 58.68.164.0/22 58.68.179.0/24 58.68.180.0/24 58.68.200.0/21 58.68.208.0/20 58.68.224.0/19 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/15 59.82.0.0/16 59.83.0.0/18 59.83.132.0/22 59.83.136.0/21 59.83.144.0/20 59.83.160.0/19 59.83.192.0/19 59.83.224.0/20 59.83.240.0/21 59.83.248.0/22 59.83.252.0/23 59.83.254.0/24 59.107.0.0/16 59.108.0.0/14 59.151.0.0/17 59.152.16.0/20 59.152.36.0/22 59.152.64.0/20 59.152.112.0/21 59.153.4.0/22 59.153.32.0/22 59.153.64.0/21 59.153.72.0/22 59.153.92.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.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.81.0/24 61.4.82.0/23 61.4.84.0/22 61.4.88.0/21 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 72.163.240.0/23 72.163.248.0/22 81.68.0.0/14 81.161.63.0/24 82.156.0.0/15 87.254.207.0/24 91.223.53.0/24 91.239.190.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/14 101.36.0.0/18 101.36.64.0/20 101.36.88.0/21 101.36.96.0/19 101.36.128.0/17 101.37.0.0/16 101.38.0.0/15 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/15 101.134.0.0/17 101.134.128.0/19 101.134.160.0/20 101.134.176.0/21 101.134.184.0/22 101.134.189.0/24 101.134.190.0/23 101.134.192.0/18 101.135.0.0/16 101.144.0.0/12 101.192.0.0/14 101.196.0.0/16 101.198.128.0/18 101.198.194.0/24 101.198.196.0/23 101.198.200.0/22 101.198.224.0/19 101.199.0.0/19 101.199.48.0/20 101.199.64.0/18 101.199.128.0/17 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.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.5.36.0/22 103.5.52.0/23 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.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.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.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.244.0/22 103.14.84.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/23 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.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/23 103.20.34.0/24 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.140.0/22 103.21.176.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.228.0/22 103.24.252.0/22 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.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.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.202.0/23 103.30.228.0/22 103.30.236.0/22 103.31.0.0/22 103.31.48.0/21 103.31.60.0/22 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.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.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.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.252.0/22 103.38.0.0/22 103.38.32.0/22 103.38.40.0/21 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/23 103.39.64.0/22 103.39.88.0/22 103.39.100.0/22 103.39.104.0/22 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.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.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/22 103.42.32.0/22 103.42.64.0/21 103.42.76.0/22 103.42.232.0/22 103.43.26.0/23 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.240.0/22 103.44.58.0/23 103.44.80.0/22 103.44.120.0/21 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.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.148.0/22 103.48.152.0/22 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.96.0/22 103.49.108.0/22 103.49.128.0/22 103.49.176.0/21 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.64.0/21 103.53.92.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.236.0/22 103.53.248.0/22 103.54.8.0/22 103.54.48.0/22 103.54.160.0/21 103.54.212.0/22 103.54.228.0/22 103.54.240.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.20.0/22 103.56.32.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.112.0/21 103.59.120.0/24 103.59.123.0/24 103.59.124.0/22 103.59.128.0/22 103.59.148.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/24 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.62.24.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/21 103.65.12.0/22 103.65.16.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.108.0/22 103.66.200.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/24 103.67.175.0/24 103.67.192.0/22 103.67.212.0/22 103.68.88.0/22 103.68.100.0/22 103.68.128.0/22 103.69.16.0/22 103.69.212.0/23 103.70.8.0/22 103.70.148.0/22 103.70.236.0/22 103.70.252.0/22 103.71.0.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.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/21 103.72.124.0/22 103.72.128.0/21 103.72.149.0/24 103.72.150.0/23 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.116.0/22 103.73.120.0/22 103.73.128.0/20 103.73.168.0/22 103.73.176.0/22 103.73.204.0/22 103.73.208.0/22 103.73.240.0/23 103.73.244.0/22 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.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.76.60.0/22 103.76.64.0/21 103.76.72.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.88.0/22 103.77.132.0/22 103.77.148.0/22 103.77.220.0/22 103.78.56.0/21 103.78.64.0/22 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.56.0/21 103.79.64.0/21 103.79.80.0/21 103.79.136.0/22 103.79.188.0/22 103.79.192.0/20 103.79.208.0/21 103.79.243.0/24 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.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.200.0/22 103.81.232.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.72.0/22 103.83.112.0/22 103.83.132.0/22 103.83.180.0/22 103.84.0.0/22 103.84.12.0/22 103.84.20.0/22 103.84.24.0/21 103.84.48.0/22 103.84.56.0/22 103.84.64.0/22 103.84.72.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.86.28.0/22 103.86.32.0/22 103.86.60.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.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.212.0/22 103.89.28.0/22 103.89.96.0/20 103.89.112.0/22 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.236.0/22 103.92.48.0/20 103.92.64.0/20 103.92.80.0/22 103.92.88.0/22 103.92.108.0/22 103.92.124.0/22 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.84.0/22 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.182.0/24 103.94.200.0/22 103.95.31.0/24 103.95.52.0/22 103.95.70.0/23 103.95.88.0/21 103.95.136.0/21 103.95.144.0/22 103.95.152.0/22 103.95.216.0/21 103.95.224.0/22 103.95.236.0/22 103.95.240.0/20 103.96.8.0/22 103.96.124.0/22 103.96.136.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.40.0/22 103.97.60.0/23 103.97.112.0/21 103.97.148.0/22 103.97.188.0/22 103.97.192.0/22 103.98.40.0/21 103.98.48.0/22 103.98.56.0/22 103.98.80.0/22 103.98.88.0/22 103.98.100.0/22 103.98.124.0/24 103.98.126.0/23 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/21 103.98.248.0/23 103.98.250.0/24 103.98.252.0/22 103.99.56.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/22 103.100.56.0/22 103.100.64.0/22 103.100.88.0/22 103.100.116.0/22 103.100.144.0/22 103.100.240.0/22 103.100.248.0/21 103.101.4.0/22 103.101.8.0/21 103.101.60.0/22 103.101.121.0/24 103.101.122.0/23 103.101.124.0/24 103.101.126.0/23 103.101.144.0/21 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/22 103.102.196.0/24 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.72.0/22 103.103.188.0/22 103.103.204.0/22 103.104.36.0/22 103.104.40.0/22 103.104.64.0/22 103.104.152.0/22 103.104.252.0/22 103.105.0.0/21 103.105.12.0/22 103.105.16.0/22 103.105.60.0/22 103.105.116.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.190.0/23 103.106.196.0/22 103.106.212.0/22 103.106.252.0/22 103.107.0.0/22 103.107.28.0/22 103.107.32.0/22 103.107.44.0/22 103.107.72.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.160.0/21 103.108.194.0/24 103.108.196.0/22 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.92.0/22 103.110.119.0/24 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.156.0/22 103.110.188.0/22 103.110.204.0/22 103.111.64.0/22 103.111.172.0/22 103.111.252.0/22 103.112.72.0/22 103.112.88.0/21 103.112.108.0/22 103.112.112.0/22 103.112.140.0/22 103.113.4.0/22 103.113.144.0/22 103.113.220.0/22 103.113.232.0/21 103.114.4.0/22 103.114.68.0/22 103.114.100.0/22 103.114.148.0/22 103.114.156.0/23 103.114.159.0/24 103.114.212.0/22 103.114.236.0/22 103.114.240.0/22 103.115.52.0/22 103.115.68.0/22 103.115.92.0/22 103.115.120.0/22 103.115.148.0/22 103.115.248.0/22 103.116.76.0/22 103.116.92.0/22 103.116.120.0/22 103.116.128.0/22 103.116.150.0/23 103.116.184.0/22 103.116.220.0/22 103.116.224.0/21 103.117.16.0/22 103.117.88.0/22 103.117.188.0/22 103.117.220.0/22 103.118.19.0/24 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.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/22 103.120.140.0/22 103.120.196.0/22 103.120.224.0/22 103.121.52.0/22 103.121.160.0/21 103.121.250.0/24 103.121.252.0/22 103.122.48.0/22 103.122.178.0/23 103.122.192.0/22 103.122.240.0/23 103.122.242.0/24 103.123.4.0/22 103.123.56.0/22 103.123.88.0/21 103.123.116.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.126.0.0/22 103.126.16.0/23 103.126.44.0/22 103.126.124.0/22 103.126.128.0/22 103.129.53.0/24 103.129.54.0/23 103.129.148.0/22 103.130.132.0/22 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.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.188.0/22 103.132.208.0/21 103.133.12.0/22 103.133.40.0/22 103.133.128.0/22 103.133.232.0/22 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.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.134.0/23 103.138.208.0/23 103.138.220.0/23 103.138.248.0/23 103.139.22.0/23 103.139.134.0/23 103.139.136.0/23 103.139.172.0/23 103.139.204.0/23 103.139.212.0/23 103.140.14.0/23 103.140.46.0/23 103.140.140.0/23 103.140.144.0/23 103.140.192.0/23 103.141.10.0/23 103.141.58.0/23 103.141.128.0/23 103.141.186.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.122.0/23 103.142.128.0/23 103.142.154.0/23 103.142.156.0/23 103.142.180.0/23 103.142.186.0/23 103.142.220.0/23 103.142.230.0/24 103.142.234.0/23 103.142.238.0/23 103.143.16.0/22 103.143.31.0/24 103.143.74.0/23 103.143.124.0/23 103.143.132.0/22 103.143.174.0/23 103.143.228.0/23 103.144.66.0/23 103.144.70.0/23 103.144.72.0/23 103.144.136.0/23 103.144.158.0/23 103.145.40.0/22 103.145.73.0/24 103.145.80.0/23 103.145.90.0/23 103.145.92.0/22 103.145.98.0/23 103.145.107.0/24 103.145.188.0/23 103.146.6.0/23 103.146.72.0/23 103.146.90.0/23 103.146.126.0/23 103.146.138.0/23 103.146.236.0/23 103.146.252.0/23 103.147.124.0/23 103.147.198.0/23 103.147.206.0/23 103.148.174.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/22 103.193.140.0/22 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.194.16.0/22 103.194.230.0/23 103.195.112.0/22 103.195.152.0/22 103.195.160.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.197.181.0/24 103.197.183.0/24 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.252.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.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.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.40.0/21 103.205.52.0/22 103.205.108.0/22 103.205.116.0/22 103.205.120.0/24 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.148.0/22 103.207.104.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.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.96.0/22 103.210.156.0/22 103.210.160.0/19 103.210.217.0/24 103.210.218.0/23 103.211.44.0/22 103.211.96.0/23 103.211.98.0/24 103.211.100.0/22 103.211.156.0/22 103.211.165.0/24 103.211.168.0/22 103.211.220.0/22 103.211.248.0/22 103.212.0.0/20 103.212.44.0/22 103.212.48.0/22 103.212.84.0/22 103.212.100.0/22 103.212.148.0/22 103.212.164.0/22 103.212.196.0/22 103.212.200.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.252.0/22 103.214.48.0/22 103.214.84.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.100.0/23 103.215.108.0/22 103.215.116.0/22 103.215.120.0/22 103.215.140.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.8.0/21 103.218.16.0/21 103.218.29.0/24 103.218.30.0/23 103.218.32.0/19 103.218.64.0/19 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/22 103.220.104.0/21 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/21 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.33.0/24 103.222.34.0/23 103.222.36.0/22 103.222.40.0/21 103.222.48.0/20 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/19 103.223.96.0/20 103.223.112.0/21 103.223.124.0/22 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.220.0/22 103.224.224.0/21 103.224.232.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/23 103.227.206.0/24 103.227.212.0/22 103.227.228.0/22 103.228.12.0/22 103.228.88.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.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.244.0/22 103.232.4.0/22 103.232.17.168/29 103.232.144.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.235.56.0/21 103.235.80.0/22 103.235.85.0/24 103.235.86.0/23 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.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.18.0/23 103.238.20.0/22 103.238.24.0/21 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/22 103.238.165.0/24 103.238.166.0/23 103.238.168.0/21 103.238.176.0/20 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.152.0/21 103.239.180.0/22 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.172.0/22 103.240.188.0/22 103.240.244.0/22 103.241.12.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/23 103.242.128.0/23 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/22 103.247.168.0/21 103.247.176.0/22 103.247.200.0/22 103.247.212.0/22 103.248.64.0/23 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.224.0/21 103.249.8.0/21 103.249.52.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/22 103.251.84.0/22 103.251.96.0/22 103.251.124.0/22 103.251.160.0/22 103.251.192.0/22 103.251.204.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/21 103.254.76.0/22 103.254.112.0/22 103.254.176.0/22 103.254.188.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/22 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/23 106.2.3.0/24 106.2.4.0/22 106.2.8.0/21 106.2.16.0/20 106.2.32.0/19 106.2.64.0/18 106.2.128.0/17 106.3.16.0/20 106.3.32.0/19 106.3.64.0/20 106.3.80.0/22 106.3.88.0/21 106.3.96.0/19 106.3.128.0/19 106.3.164.0/22 106.3.168.0/21 106.3.176.0/20 106.3.192.0/18 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/21 106.48.8.0/22 106.48.16.0/20 106.48.32.0/20 106.48.57.0/24 106.48.60.0/24 106.48.63.0/24 106.48.64.0/18 106.48.128.0/17 106.49.1.0/24 106.49.2.0/23 106.49.4.0/22 106.49.8.0/21 106.49.16.0/20 106.49.32.0/19 106.49.64.0/19 106.49.96.0/24 106.49.98.0/23 106.49.100.0/22 106.49.104.0/21 106.49.112.0/20 106.49.128.0/17 106.50.0.0/16 106.52.0.0/14 106.56.0.0/13 106.74.0.0/16 106.75.0.0/17 106.75.128.0/18 106.75.201.0/24 106.75.204.0/22 106.75.208.0/20 106.75.224.0/19 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/15 110.42.0.0/16 110.43.0.0/18 110.43.64.0/21 110.43.72.0/22 110.43.76.0/23 110.43.80.0/20 110.43.96.0/19 110.43.128.0/17 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/20 110.76.16.0/22 110.76.20.0/24 110.76.22.0/24 110.76.24.0/21 110.76.32.0/19 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.166.0.0/15 110.172.192.0/18 110.173.0.0/19 110.173.32.0/20 110.173.64.0/19 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.249.0/24 111.223.250.0/23 111.224.0.0/13 111.235.96.0/19 111.235.156.0/22 111.235.160.0/21 111.235.170.0/23 111.235.172.0/22 111.235.176.0/20 112.0.0.0/10 112.64.0.0/14 112.73.64.0/18 112.74.0.0/16 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/23 113.197.102.0/24 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.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/17 114.28.128.0/18 114.28.192.0/19 114.28.232.0/22 114.28.236.0/23 114.28.240.0/20 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.4.0/22 114.112.8.0/22 114.112.24.0/21 114.112.32.0/19 114.112.64.0/19 114.112.96.0/20 114.112.116.0/22 114.112.120.0/21 114.112.136.0/21 114.112.144.0/20 114.112.160.0/19 114.112.192.0/19 114.113.0.0/17 114.113.128.0/21 114.113.140.0/22 114.113.144.0/20 114.113.160.0/19 114.113.196.0/22 114.113.200.0/21 114.113.208.0/20 114.113.224.0/20 114.114.0.0/15 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/16 115.169.0.0/23 115.169.3.0/24 115.169.6.0/24 115.169.9.0/24 115.169.14.0/23 115.169.16.0/20 115.169.39.0/24 115.169.42.0/23 115.169.44.0/22 115.169.48.0/20 115.169.64.0/18 115.169.128.0/17 115.170.0.0/15 115.172.0.0/14 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/18 116.66.64.0/19 116.66.96.0/20 116.66.120.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/17 116.85.128.0/18 116.85.192.0/19 116.85.224.0/20 116.85.240.0/21 116.85.248.0/23 116.85.250.0/24 116.85.252.0/22 116.89.144.0/20 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.176.0/21 116.194.0.0/15 116.196.0.0/21 116.196.8.0/22 116.196.12.0/23 116.196.16.0/20 116.196.32.0/19 116.196.64.0/18 116.196.128.0/18 116.196.192.0/21 116.196.200.0/23 116.196.203.0/24 116.196.204.0/22 116.196.208.0/20 116.196.224.0/19 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.232.0/22 116.205.0.0/16 116.207.0.0/16 116.208.0.0/14 116.212.160.0/20 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.252.0.0/15 116.254.104.0/21 116.254.129.0/24 116.254.130.0/23 116.254.132.0/22 116.254.136.0/21 116.254.144.0/20 116.254.160.0/19 116.254.192.0/18 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/15 117.50.0.0/16 117.51.128.0/23 117.51.131.0/24 117.51.132.0/22 117.51.136.0/21 117.51.144.0/20 117.51.160.0/19 117.51.192.0/18 117.53.48.0/20 117.53.176.0/20 117.57.0.0/16 117.58.0.0/18 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/19 117.121.32.0/21 117.121.40.0/22 117.121.44.0/23 117.121.46.0/24 117.121.48.0/20 117.121.64.0/18 117.121.128.0/20 117.121.148.0/22 117.121.152.0/21 117.121.160.0/19 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/19 118.26.36.0/22 118.26.40.0/21 118.26.48.0/20 118.26.64.0/19 118.26.104.0/21 118.26.112.0/20 118.26.128.0/17 118.28.0.0/15 118.30.0.0/20 118.30.16.0/21 118.30.24.0/22 118.30.32.0/19 118.30.64.0/18 118.30.128.0/17 118.31.0.0/16 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.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.112.0.0/13 118.120.0.0/14 118.124.0.0/15 118.126.1.0/24 118.126.2.0/23 118.126.4.0/22 118.126.8.0/21 118.126.16.0/23 118.126.18.0/24 118.126.32.0/19 118.126.64.0/18 118.126.128.0/17 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.5.0/24 118.184.10.0/24 118.184.115.0/24 118.184.116.0/22 118.184.120.0/23 118.184.122.0/24 118.184.128.0/18 118.184.192.0/19 118.184.240.0/20 118.186.0.0/15 118.188.0.0/16 118.190.0.0/16 118.191.0.0/20 118.191.24.0/21 118.191.32.0/19 118.191.64.0/18 118.191.144.0/21 118.191.153.0/24 118.191.154.0/23 118.191.156.0/22 118.191.160.0/19 118.191.192.0/20 118.191.209.0/24 118.191.210.0/23 118.191.212.0/22 118.191.248.0/21 118.192.0.0/16 118.193.0.0/22 118.193.32.0/20 118.193.56.0/21 118.193.68.0/22 118.193.72.0/24 118.193.77.0/24 118.193.96.0/19 118.194.0.0/17 118.194.128.0/18 118.194.192.0/19 118.194.232.0/21 118.194.240.0/20 118.195.0.0/16 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/17 118.228.128.0/20 118.228.144.0/21 118.228.156.0/22 118.228.160.0/19 118.228.192.0/18 118.229.0.0/16 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.28.0/24 119.29.0.0/16 119.30.48.0/20 119.31.192.0/19 119.32.0.0/14 119.36.0.0/15 119.38.0.0/17 119.38.128.0/18 119.38.192.0/20 119.38.208.0/22 119.38.212.0/23 119.38.214.0/27 119.38.214.56/29 119.38.214.64/26 119.38.214.128/25 119.38.215.0/24 119.38.216.0/21 119.39.0.0/16 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/16 119.89.0.0/17 119.89.128.0/21 119.89.136.0/23 119.89.139.0/24 119.89.140.0/22 119.89.144.0/20 119.89.160.0/20 119.89.176.0/22 119.89.180.0/23 119.89.183.0/24 119.89.184.0/21 119.89.192.0/23 119.89.194.0/24 119.89.196.0/22 119.89.200.0/21 119.89.208.0/21 119.89.217.0/24 119.89.218.0/23 119.89.220.0/22 119.89.224.0/19 119.90.0.0/15 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/21 119.161.160.0/19 119.161.192.0/18 119.162.0.0/15 119.164.0.0/14 119.176.0.0/12 119.232.0.0/15 119.235.128.0/19 119.235.160.0/20 119.235.184.0/22 119.248.0.0/14 119.252.96.0/21 119.252.240.0/21 119.252.249.0/24 119.252.252.0/23 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/17 120.92.128.0/18 120.92.192.0/22 120.92.198.0/23 120.92.200.0/21 120.92.208.0/20 120.92.224.0/19 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.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.10.132.0/23 122.10.136.0/23 122.10.196.0/23 122.10.216.0/22 122.10.228.0/22 122.10.232.0/21 122.10.240.0/21 122.10.248.0/22 122.11.0.0/17 122.12.0.0/15 122.14.0.0/17 122.14.192.0/18 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/18 122.112.64.0/19 122.112.96.0/22 122.112.107.0/24 122.112.118.0/24 122.112.122.0/24 122.112.125.0/24 122.112.128.0/17 122.113.0.0/16 122.114.0.0/16 122.115.0.0/18 122.115.80.0/20 122.115.96.0/19 122.115.128.0/17 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/21 123.0.136.0/23 123.0.139.0/24 123.0.140.0/22 123.0.144.0/20 123.0.160.0/19 123.4.0.0/14 123.8.0.0/13 123.49.130.0/23 123.49.132.0/22 123.49.136.0/22 123.49.152.0/21 123.49.160.0/19 123.49.192.0/18 123.50.160.0/19 123.52.0.0/14 123.56.0.0/15 123.58.0.0/18 123.58.64.0/20 123.58.80.0/21 123.58.88.0/22 123.58.96.0/19 123.58.128.0/17 123.59.0.0/16 123.61.0.0/16 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/20 123.103.16.0/21 123.103.24.0/22 123.103.28.0/23 123.103.30.0/24 123.103.32.0/19 123.103.64.0/18 123.108.134.0/24 123.108.138.0/23 123.108.140.0/24 123.108.142.0/24 123.108.208.0/20 123.112.0.0/12 123.128.0.0/13 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.109.0/24 123.253.110.0/24 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/17 124.68.128.0/18 124.68.192.0/19 124.68.224.0/20 124.68.240.0/23 124.68.242.0/24 124.68.244.0/23 124.68.254.0/23 124.69.0.0/16 124.70.0.0/15 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/14 124.116.0.0/15 124.118.0.0/16 124.119.0.0/17 124.119.128.0/18 124.119.192.0/19 124.119.224.0/20 124.119.240.0/22 124.119.244.0/23 124.119.246.0/25 124.119.246.128/26 124.119.246.192/27 124.119.246.224/28 124.119.246.240/29 124.119.246.248/30 124.119.246.254/31 124.119.247.0/24 124.119.248.0/21 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/19 125.208.37.0/24 125.208.40.0/24 125.208.45.0/24 125.208.46.0/23 125.208.48.0/20 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.99.0/24 130.36.146.0/23 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.128.0/22 139.5.160.0/22 139.5.192.0/22 139.5.204.0/22 139.5.244.0/22 139.9.0.0/16 139.129.0.0/16 139.138.238.0/28 139.148.0.0/16 139.155.0.0/16 139.159.0.0/19 139.159.32.0/21 139.159.40.0/22 139.159.52.0/22 139.159.56.0/21 139.159.64.0/19 139.159.96.0/20 139.159.112.0/22 139.159.116.0/23 139.159.120.0/21 139.159.128.0/17 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/15 139.198.0.0/21 139.198.8.0/23 139.198.11.0/24 139.198.12.0/22 139.198.16.0/20 139.198.32.0/19 139.198.66.0/23 139.198.68.0/22 139.198.72.0/21 139.198.80.0/20 139.198.96.0/20 139.198.113.0/24 139.198.114.0/23 139.198.116.0/22 139.198.122.0/23 139.198.124.0/22 139.198.128.0/17 139.199.0.0/16 139.200.0.0/13 139.208.0.0/13 139.217.0.0/16 139.219.0.0/16 139.220.0.0/17 139.220.128.0/18 139.220.192.0/22 139.220.196.0/23 139.220.200.0/21 139.220.208.0/23 139.220.212.0/22 139.220.216.0/21 139.220.224.0/19 139.221.0.0/16 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/18 140.205.64.0/19 140.205.96.0/20 140.205.112.0/21 140.205.120.0/23 140.205.123.0/24 140.205.124.0/22 140.205.128.0/17 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.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.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.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.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/22 150.242.158.0/24 150.242.160.0/21 150.242.168.0/22 150.242.184.0/21 150.242.192.0/22 150.242.224.0/22 150.242.232.0/21 150.242.240.0/21 150.242.248.0/22 150.255.0.0/16 152.32.178.0/23 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 155.126.176.0/23 156.107.160.0/24 156.107.170.0/24 156.107.179.0/24 156.107.181.0/24 156.154.62.0/23 157.0.0.0/16 157.18.0.0/16 157.61.0.0/16 157.119.8.0/21 157.119.16.0/22 157.119.28.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/23 160.202.62.0/24 160.202.148.0/22 160.202.152.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/22 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.80.0/24 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.22.147.0/24 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.60.2.0/24 172.81.192.0/18 173.39.200.0/23 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.188.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.16.0/20 180.76.32.0/19 180.76.64.0/18 180.76.128.0/18 180.76.192.0/19 180.76.224.0/20 180.76.240.0/24 180.76.242.0/23 180.76.244.0/22 180.76.248.0/22 180.76.252.0/23 180.76.255.0/24 180.77.0.0/16 180.78.0.0/15 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.150.160.0/21 180.150.176.0/20 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.233.0/24 180.210.236.0/22 180.212.0.0/15 180.222.224.0/19 180.223.0.0/19 180.223.32.0/20 180.223.48.0/21 180.223.57.0/24 180.223.58.0/23 180.223.60.0/22 180.223.80.0/20 180.223.96.0/19 180.223.128.0/17 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 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/22 182.50.8.0/21 182.50.112.0/20 182.51.0.0/16 182.54.0.0/17 182.61.0.0/18 182.61.128.0/19 182.61.192.0/18 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/17 182.254.128.0/18 182.254.192.0/19 182.254.224.0/20 182.254.240.0/21 182.254.248.0/23 182.254.251.0/24 182.254.252.0/22 183.0.0.0/10 183.64.0.0/13 183.78.160.0/21 183.78.180.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.184.0.0/13 183.192.0.0/10 185.109.236.0/24 185.216.118.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.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.232.97.0/24 193.9.22.0/24 193.17.120.0/22 193.20.64.0/22 193.112.0.0/16 193.200.196.0/24 193.200.222.160/28 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.244.144.0/24 202.0.100.0/23 202.0.122.0/23 202.1.105.0/24 202.1.106.0/24 202.3.128.0/23 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.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/21 202.10.74.0/23 202.10.76.0/22 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.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.34.0/24 202.52.143.0/24 202.53.140.0/24 202.53.143.0/24 202.53.202.0/24 202.57.212.0/22 202.57.216.0/22 202.57.240.0/20 202.58.0.0/24 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.67.0.0/22 202.69.4.0/23 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.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.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.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.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.59.0/24 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.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.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.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/22 203.15.238.0/23 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.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.140.0/22 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.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.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.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.12.0/23 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.50.0/23 203.56.52.0/22 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.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/22 203.77.180.0/22 203.78.48.0/20 203.78.156.0/22 203.79.0.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.140.0/22 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.12.0/22 203.83.56.0/21 203.83.224.0/20 203.86.0.0/18 203.86.64.0/19 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.100.0/22 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/22 203.99.30.0/23 203.99.80.0/20 203.100.32.0/20 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/19 203.107.32.0/20 203.107.52.0/22 203.107.56.0/21 203.107.69.0/24 203.107.70.0/23 203.107.72.0/21 203.107.80.0/20 203.107.96.0/19 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/23 203.119.32.0/24 203.119.34.0/23 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.130.32.0/20 203.132.32.0/19 203.134.240.0/22 203.134.246.0/23 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.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.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/24 203.174.96.0/20 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.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.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.29.0/24 203.191.31.0/24 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.195.64.0/19 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.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.217.164.0/22 203.223.0.0/20 203.223.16.0/24 203.223.22.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/23 210.2.2.0/24 210.2.5.0/24 210.2.6.0/23 210.2.8.0/21 210.2.24.0/21 210.5.0.0/19 210.5.56.0/24 210.5.60.0/24 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.128.0/21 210.16.136.0/22 210.16.156.0/22 210.16.160.0/19 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/18 210.52.64.0/23 210.52.66.0/24 210.52.68.0/22 210.52.72.0/21 210.52.80.0/20 210.52.96.0/21 210.52.104.0/22 210.52.108.0/24 210.52.110.0/23 210.52.112.0/20 210.52.128.0/17 210.53.0.0/16 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/14 211.100.0.0/17 211.100.128.0/19 211.100.160.0/20 211.100.184.0/21 211.100.192.0/18 211.101.0.0/16 211.102.0.0/15 211.136.0.0/13 211.144.0.0/13 211.152.0.0/17 211.152.134.0/23 211.152.138.0/23 211.152.140.0/22 211.152.150.0/23 211.152.157.0/24 211.152.158.0/23 211.152.160.0/19 211.152.192.0/18 211.153.0.0/16 211.154.0.0/19 211.154.32.0/20 211.154.48.0/21 211.154.64.0/18 211.154.128.0/17 211.155.0.0/18 211.155.67.0/24 211.155.68.0/24 211.155.72.0/21 211.155.80.0/20 211.155.97.0/24 211.155.98.0/23 211.155.100.0/22 211.155.104.0/21 211.155.113.0/24 211.155.117.0/24 211.155.118.0/23 211.155.120.0/21 211.155.128.0/17 211.156.0.0/18 211.156.64.0/19 211.156.96.0/21 211.156.104.0/22 211.156.108.0/23 211.156.112.0/20 211.156.128.0/17 211.157.0.0/16 211.158.0.0/15 211.160.0.0/13 212.64.0.0/17 212.129.128.0/17 218.0.0.0/12 218.16.0.0/13 218.24.0.0/14 218.28.0.0/15 218.30.0.0/19 218.30.64.0/18 218.30.128.0/18 218.30.192.0/19 218.30.224.0/20 218.30.240.0/21 218.30.248.0/22 218.30.252.0/25 218.30.252.128/26 218.30.252.194/31 218.30.252.196/30 218.30.252.200/29 218.30.252.208/28 218.30.252.224/27 218.30.253.0/24 218.30.254.0/23 218.31.0.0/16 218.56.0.0/13 218.64.0.0/11 218.96.0.0/15 218.98.0.0/18 218.98.96.0/21 218.98.104.0/22 218.98.108.0/23 218.98.110.0/24 218.98.112.0/20 218.98.128.0/19 218.98.192.0/18 218.99.0.0/16 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.192.0.0/12 218.240.0.0/14 218.244.0.0/15 218.246.0.0/17 218.246.129.0/24 218.246.131.0/24 218.246.132.0/23 218.246.134.0/24 218.246.139.0/24 218.246.144.0/20 218.246.160.0/19 218.246.192.0/18 218.247.0.0/18 218.247.96.0/19 218.247.128.0/17 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/13 219.232.0.0/15 219.234.0.0/21 219.234.9.0/24 219.234.10.0/23 219.234.12.0/22 219.234.32.0/19 219.234.64.0/18 219.234.128.0/17 219.235.0.0/16 219.236.0.0/14 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/16 220.155.0.0/21 220.155.9.0/24 220.155.10.0/23 220.155.12.0/22 220.155.16.0/21 220.155.24.0/22 220.155.28.0/23 220.155.31.0/24 220.155.32.0/19 220.155.64.0/18 220.155.128.0/17 220.158.241.0/24 220.158.243.0/24 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/24 220.242.12.0/23 220.242.14.0/24 220.242.17.0/24 220.242.18.0/23 220.242.20.0/24 220.242.32.0/20 220.242.48.0/23 220.242.53.0/24 220.242.55.0/24 220.242.56.0/22 220.242.60.0/23 220.242.62.0/24 220.242.64.0/19 220.242.96.0/20 220.242.112.0/21 220.242.120.0/22 220.242.124.0/23 220.242.126.0/24 220.242.173.0/24 220.242.197.0/24 220.242.205.0/24 220.242.207.0/24 220.242.215.0/24 220.242.216.0/21 220.242.224.0/19 220.243.0.0/17 220.243.128.0/18 220.243.204.0/24 220.243.214.0/24 220.243.217.0/24 220.243.218.0/24 220.243.238.0/24 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/19 221.176.32.0/20 221.176.48.0/21 221.176.56.0/24 221.176.58.0/23 221.176.60.0/22 221.176.64.0/18 221.176.128.0/17 221.177.0.0/16 221.178.0.0/15 221.180.0.0/14 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/19 222.126.160.0/21 222.126.168.0/22 222.126.172.0/23 222.126.174.40/29 222.126.174.76/30 222.126.174.88/29 222.126.174.144/28 222.126.178.0/23 222.126.180.0/22 222.126.184.0/21 222.126.192.0/21 222.126.200.104/29 222.126.206.0/23 222.126.208.0/22 222.126.212.0/26 222.126.212.64/27 222.126.212.96/28 222.126.212.112/29 222.126.212.128/25 222.126.213.0/24 222.126.214.0/23 222.126.216.0/21 222.126.224.0/19 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.4.0/22 223.201.8.0/21 223.201.16.0/20 223.201.32.0/19 223.201.64.0/18 223.201.128.0/17 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/19 223.252.192.0/18 223.254.0.0/16 223.255.0.0/17 223.255.236.0/22 223.255.252.0/23 #********************************************************************** [proxy_list] # 代理列表 # MyList && Other (^|\.)bit\.no\.com$ (^|\.)btlibrary\.me$ (^|\.)cccat\.io$ (^|\.)cloudcone\.com$ (^|\.)gameloft\.com$ (^|\.)inoreader\.com$ (^|\.)ip138\.com$ (^|\.)ping\.pe$ (^|\.)reddit\.com$ (^|\.)teddysun\.com$ (^|\.)textnow\.com$ (^|\.)tumbex\.com$ (^|\.)twdvd\.com$ (^|\.)unsplash\.com$ (^|\.)xn--i2ru8q2qg\.com$ (^|\.)yunpanjingling\.com$ (^|\.)ec2-54-210-142-85\.computer-1\.amazonaws\.com$ (^|\.)ec2-54-174-24-124\.computer-1\.amazonaws\.com$ (^|\.)ec2-54-174-178-70\.computer-1\.amazonaws\.com$ (^|\.)ec2-54-175-2-194\.computer-1\.amazonaws\.com$ (^|\.)ec2-54-210-54-246\.computer-1\.amazonaws\.com$ # 国外域名 ^.*\.hk$ ^.*\.jp$ ^.*\.kr$ ^.*\.sg$ ^.*\.tw$ ^.*\.uk$ ^.*\.us$ # 国外域名关键字 (^|\.)\w*1e100\w*\.\w*$ (^|\.)\w*abema\w*\.\w*$ (^|\.)\w*appledaily\w*\.\w*$ (^|\.)\w*avtb\w*\.\w*$ (^|\.)\w*beetalk\w*\.\w*$ (^|\.)\w*blogspot\w*\.\w*$ (^|\.)\w*dropbox\w*\.\w*$ (^|\.)\w*facebook\w*\.\w*$ (^|\.)\w*fbcdn\w*\.\w*$ (^|\.)\w*github\w*\.\w*$ (^|\.)\w*gmail\w*\.\w*$ (^|\.)\w*google\w*\.\w*$ (^|\.)\w*instagram\w*\.\w*$ (^|\.)\w*porn\w*\.\w*$ (^|\.)\w*sci-hub\w*\.\w*$ (^|\.)\w*spotify\w*\.\w*$ (^|\.)\w*telegram\w*\.\w*$ (^|\.)\w*twitter\w*\.\w*$ (^|\.)\w*whatsapp\w*\.\w*$ (^|\.)\w*youtube\w*\.\w*$ # Top blocked sites (^|\.)4sqi\.net$ (^|\.)a248\.e\.akamai\.net$ (^|\.)adobedtm\.com$ (^|\.)ampproject\.org$ (^|\.)android\.com$ (^|\.)aolcdn\.com$ (^|\.)apkmirror\.com$ (^|\.)apkpure\.com$ (^|\.)app-measurement\.com$ (^|\.)appspot\.com$ (^|\.)archive\.org$ (^|\.)armorgames\.com$ (^|\.)aspnetcdn\.com$ (^|\.)awsstatic\.com$ (^|\.)azureedge\.net$ (^|\.)azurewebsites\.net$ (^|\.)bandwagonhost\.com$ (^|\.)bing\.com$ (^|\.)bkrtx\.com$ (^|\.)blogcdn\.com$ (^|\.)blogger\.com$ (^|\.)blogsmithmedia\.com$ (^|\.)blogspot\.com$ (^|\.)blogspot\.hk$ (^|\.)blogspot\.jp$ (^|\.)bloomberg\.cn$ (^|\.)bloomberg\.com$ (^|\.)box\.com$ (^|\.)cachefly\.net$ (^|\.)cdnst\.net$ (^|\.)cloudfront\.net$ (^|\.)comodoca\.com$ (^|\.)daum\.net$ (^|\.)demdex\.net$ (^|\.)deskconnect\.com$ (^|\.)disqus\.com$ (^|\.)disquscdn\.com$ (^|\.)dropbox\.com$ (^|\.)dropboxapi\.com$ (^|\.)dropboxstatic\.com$ (^|\.)dropboxusercontent\.com$ (^|\.)duckduckgo\.com$ (^|\.)edgecastcdn\.net$ (^|\.)edgekey\.net$ (^|\.)edgesuite\.net$ (^|\.)eurekavpt\.com$ (^|\.)fastmail\.com$ (^|\.)firebaseio\.com$ (^|\.)flickr\.com$ (^|\.)flipboard\.com$ (^|\.)gfx\.ms$ (^|\.)gongm\.in$ (^|\.)hulu\.com$ (^|\.)id\.heroku\.com$ (^|\.)io\.io$ (^|\.)issuu\.com$ (^|\.)ixquick\.com$ (^|\.)jtvnw\.net$ (^|\.)kat\.cr$ (^|\.)kik\.com$ (^|\.)kobo\.com$ (^|\.)kobobooks\.com$ (^|\.)licdn\.com$ (^|\.)live\.net$ (^|\.)livefilestore\.com$ (^|\.)llnwd\.net$ (^|\.)macrumors\.com$ (^|\.)medium\.com$ (^|\.)mega\.nz$ (^|\.)megaupload\.com$ (^|\.)messenger\.com$ (^|\.)netdna-cdn\.com$ (^|\.)nintendo\.net$ (^|\.)nsstatic\.net$ (^|\.)nytstyle\.com$ (^|\.)openvpn\.net$ (^|\.)periscope\.tv$ (^|\.)pinimg\.com$ (^|\.)pinterest\.com$ (^|\.)potato\.im$ (^|\.)prfct\.co$ (^|\.)pscp\.tv$ (^|\.)quora\.com$ (^|\.)resilio\.com$ (^|\.)sfx\.ms$ (^|\.)shadowsocks\.org$ (^|\.)slack-edge\.com$ (^|\.)smartdnsproxy\.com$ (^|\.)sndcdn\.com$ (^|\.)soundcloud\.com$ (^|\.)startpage\.com$ (^|\.)staticflickr\.com$ (^|\.)symauth\.com$ (^|\.)symcb\.com$ (^|\.)symcd\.com$ (^|\.)textnow\.com$ (^|\.)thefacebook\.com$ (^|\.)thepiratebay\.org$ (^|\.)torproject\.org$ (^|\.)trustasiassl\.com$ (^|\.)tumblr\.co$ (^|\.)tumblr\.com$ (^|\.)tvb\.com$ (^|\.)txmblr\.com$ (^|\.)v2ex\.com$ (^|\.)vimeo\.com$ (^|\.)vine\.co$ (^|\.)vox-cdn\.com$ (^|\.)wikileaks\.org$ (^|\.)wikipedia\.org$ # Amazon (^|\.)amazon\.co\.jp$ (^|\.)amazon\.com$ (^|\.)amazonaws\.com$ 13.32.0.0/15 13.35.0.0/17 18.184.0.0/15 18.194.0.0/15 18.208.0.0/13 18.232.0.0/14 52.58.0.0/15 52.74.0.0/16 52.77.0.0/16 52.84.0.0/15 52.200.0.0/13 54.93.0.0/16 54.156.0.0/14 54.226.0.0/15 54.230.156.0/22 # BBC (^|\.)\w*uk-live\w*\.\w*$ (^|\.)bbc\.co$ (^|\.)bbc\.com$ # Discord (^|\.)discord\.gg$ (^|\.)discord\.media$ (^|\.)discordapp\.com$ (^|\.)discordapp\.net$ # Facebook (^|\.)facebook\.com$ (^|\.)fb\.com$ (^|\.)fb\.me$ (^|\.)fbcdn\.com$ (^|\.)fbcdn\.net$ 31.13.24.0/21 31.13.64.0/18 45.64.40.0/22 66.220.144.0/20 69.63.176.0/20 69.171.224.0/19 74.119.76.0/22 103.4.96.0/22 129.134.0.0/17 157.240.0.0/17 173.252.64.0/18 179.60.192.0/22 185.60.216.0/22 204.15.20.0/22 # Github (^|\.)github\.com$ (^|\.)github\.io$ (^|\.)githubapp\.com$ (^|\.)githubassets\.com$ (^|\.)githubusercontent\.com$ (^|\.)s3\.amazonaws\.com$ # Google (^|\.)1e100\.net$ (^|\.)2mdn\.net$ (^|\.)app-measurement\.net$ (^|\.)g\.co$ (^|\.)ggpht\.com$ (^|\.)goo\.gl$ (^|\.)googleapis\.cn$ (^|\.)googleapis\.com$ (^|\.)gstatic\.cn$ (^|\.)gstatic\.com$ (^|\.)gvt0\.com$ (^|\.)gvt1\.com$ (^|\.)gvt2\.com$ (^|\.)gvt3\.com$ (^|\.)xn--ngstr-lra8j\.com$ (^|\.)youtu\.be$ (^|\.)youtube-nocookie\.com$ (^|\.)youtube\.com$ (^|\.)yt\.be$ (^|\.)ytimg\.com$ 8.8.8.8 8.8.4.4 74.125.0.0/16 173.194.0.0/16 # Instagram (^|\.)cdninstagram\.com$ (^|\.)instagram\.com$ (^|\.)instagr\.am$ (^|\.)akamaihd\.net$ # Kakao Talk (^|\.)kakao\.com$ (^|\.)kakao\.co\.kr$ (^|\.)kakaocdn\.net$ 1.201.0.0/24 27.0.236.0/22 103.27.148.0/22 103.246.56.0/22 110.76.140.0/22 113.61.104.0/22 # Line (^|\.)lin\.ee$ (^|\.)line-apps\.com$ (^|\.)line-cdn\.net$ (^|\.)line-scdn\.net$ (^|\.)line\.me$ (^|\.)line\.naver\.jp$ (^|\.)nhncorp\.jp$ 103.2.28.0/24 103.2.30.0/23 119.235.224.0/24 119.235.232.0/24 119.235.235.0/24 119.235.236.0/23 147.92.128.0/17 203.104.128.0/19 # Microsoft (^|\.)1drv\.com$ (^|\.)aadrm\.com$ (^|\.)acompli\.com$ (^|\.)acompli\.net$ (^|\.)aka\.ms$ (^|\.)akadns\.net$ (^|\.)aspnetcdn\.com$ (^|\.)assets-yammer\.com$ (^|\.)azure\.com$ (^|\.)azure\.net$ (^|\.)azureedge\.net$ (^|\.)azurerms\.com$ (^|\.)bing\.com$ (^|\.)cloudapp\.net$ (^|\.)cloudappsecurity\.com$ (^|\.)edgesuite\.net$ (^|\.)getmicrosoftkey\.com$ (^|\.)gfx\.ms$ (^|\.)hotmail\.com$ (^|\.)live\.com$ (^|\.)live\.net$ (^|\.)lync\.com$ (^|\.)microsoft\.com$ (^|\.)microsoftazuread-sso\.com$ (^|\.)microsoftonline-p\.com$ (^|\.)microsoftonline-p\.net$ (^|\.)microsoftonline\.com$ (^|\.)microsoftstream\.com$ (^|\.)msappproxy\.net$ (^|\.)msauth\.net$ (^|\.)msauthimages\.net$ (^|\.)msecnd\.net$ (^|\.)msedge\.net$ (^|\.)msft\.net$ (^|\.)msftauth\.net$ (^|\.)msftauthimages\.net$ (^|\.)msftidentity\.com$ (^|\.)msidentity\.com$ (^|\.)msn\.com$ (^|\.)msocdn\.com$ (^|\.)msocsp\.com$ (^|\.)mstea\.ms$ (^|\.)o365weve\.com$ (^|\.)oaspapps\.com$ (^|\.)office\.com$ (^|\.)office\.net$ (^|\.)office365\.com$ (^|\.)officecdn-microsoft-com\.akamaized\.net$ (^|\.)officeppe\.net$ (^|\.)omniroot\.com$ (^|\.)onedrive\.com$ (^|\.)onenote\.com$ (^|\.)onenote\.net$ (^|\.)onestore\.ms$ (^|\.)onmicrosoft\.com$ (^|\.)outlook\.com$ (^|\.)outlookmobile\.com$ (^|\.)phonefactor\.net$ (^|\.)public-trust\.com$ (^|\.)s-microsoft\.com$ (^|\.)sfbassets\.com$ (^|\.)sfx\.ms$ (^|\.)sharepoint\.com$ (^|\.)sharepointonline\.com$ (^|\.)skype\.com$ (^|\.)skypeassets\.com$ (^|\.)skypeforbusiness\.com$ (^|\.)staffhub\.ms$ (^|\.)svc\.ms$ (^|\.)sway-cdn\.com$ (^|\.)sway-extensions\.com$ (^|\.)sway\.com$ (^|\.)trafficmanager\.net$ (^|\.)uservoice\.com$ (^|\.)virtualearth\.net$ (^|\.)visualstudio\.com$ (^|\.)windows-ppe\.net$ (^|\.)windows\.com$ (^|\.)windows\.net$ (^|\.)windowsazure\.com$ (^|\.)windowsupdate\.com$ (^|\.)wunderlist\.com$ (^|\.)yammer\.com$ (^|\.)yammerusercontent\.com$ # MytvSUPER (^|\.)\w*nowtv100\w*\.\w*$ (^|\.)\w*rthklive\w*\.\w*$ (^|\.)mytvsuper\.com$ # Netflix (^|\.)netflix\.com$ (^|\.)netflix\.net$ (^|\.)nflxext\.com$ (^|\.)nflximg\.com$ (^|\.)nflximg\.net$ (^|\.)nflxvideo\.net$ 8.41.4.0/24 23.246.0.0/18 37.77.184.0/21 45.57.0.0/17 64.120.128.0/17 66.197.128.0/17 69.53.224.0/19 108.175.32.0/20 185.2.220.0/22 185.9.188.0/22 192.173.64.0/18 198.38.96.0/19 198.45.48.0/20 207.45.72.0/22 208.75.76.0/22 # OneDrive (^|\.)\w*1drv\w*\.\w*$ (^|\.)\w*onedrive\w*\.\w*$ (^|\.)\w*skydrive\w*\.\w*$ (^|\.)livefilestore\.com$ (^|\.)oneclient\.sfx\.ms$ (^|\.)onedrive\.com$ (^|\.)onedrive\.live\.com$ (^|\.)photos\.live\.com$ (^|\.)skydrive\.wns\.windows\.com$ (^|\.)spoprod-a\.akamaihd\.net$ (^|\.)storage\.live.com$ (^|\.)storage\.msn.com$ # Pixiv (^|\.)pixiv\.net$ (^|\.)pximg\.net$ # Porn (^|\.)\w*porn\w*\.\w*$ (^|\.)8teenxxx\.com$ (^|\.)ahcdn\.com$ (^|\.)bcvcdn\.com$ (^|\.)bongacams\.com$ (^|\.)chaturbate\.com$ (^|\.)dditscdn\.com$ (^|\.)livejasmin\.com$ (^|\.)rdtcdn\.com$ (^|\.)redtube\.com$ (^|\.)sb-cd\.com$ (^|\.)spankbang\.com$ (^|\.)t66y\.com$ (^|\.)xhamster\.com$ (^|\.)xnxx-cdn\.com$ (^|\.)xnxx\.com$ (^|\.)xvideos-cdn\.com$ (^|\.)xvideos\.com$ (^|\.)ypncdn\.com$ # ResiloSync (^|\.)config\.getsync\.com$ (^|\.)config\.resilio\.com$ 54.235.182.157/32 107.182.230.198/32 173.244.209.150/32 173.244.217.42/32 209.95.56.60/32 # Steam (^|\.)fanatical\.com$ (^|\.)humblebundle\.com$ (^|\.)steamcommunity\.com$ (^|\.)steampowered\.com$ (^|\.)steamstatic\.com$ # Telegram (^|\.)t\.me$ (^|\.)tdesktop\.com$ (^|\.)telegra\.ph$ (^|\.)telegram\.me$ (^|\.)telegram\.org$ 91.108.0.0/16 109.239.140.0/24 149.154.160.0/20 2001:67c:4e8::/48 2001:b28:f23d::/48 2001:b28:f23f::/48 # Twitch (^|\.)twitch\.tv$ (^|\.)ttvnw\.net$ (^|\.)jtvnw\.net$ (^|\.)akamaized\.net$ # Twitter (^|\.)t\.co$ (^|\.)twimg\.co$ (^|\.)twimg\.com$ (^|\.)twimg\.org$ # Whatsapp 18.194.0.0/15 34.224.0.0/12 54.242.0.0/15 50.22.198.204/30 208.43.122.128/27 108.168.174.0/16 173.192.231.32/27 158.85.5.192/27 174.37.243.0/16 158.85.46.128/27 173.192.222.160/27 184.173.128.0/17 158.85.224.160/27 75.126.150.0/16 69.171.235.0/16 #飞流直播 (^|\.)neulion\.com$ (^|\.)icntv\.xyz$ (^|\.)flzbcdn\.xyz$ #华文电视 (^|\.)ocnttv\.com$ ================================================ FILE: Trojan/File/gfwlist.acl ================================================ #********************************************************************** # 04.18 # 2020年4月18日 20:28:30 # 转载需要注明版权和来源 # 全部规则来自GFWList 没有白名单 # # 更新记录 https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/more/New.md # 下载地址 https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/gfwlist-banAD.acl # #********************************************************************** [bypass_all] ### 默认直连 自己可以自定义 ### [outbound_block_list] 禁止访问列表 ### [bypass_list] 直连列表 禁止访问列表 ### [proxy_list] 代理列表 #********************************************************************** [outbound_block_list] # 禁止访问列表 # 广告关键词 (^|\.)\w*admarvel\w*\.\w*$ (^|\.)\w*admaster\w*\.\w*$ (^|\.)\w*adsage\w*\.\w*$ (^|\.)\w*adsensor\w*\.\w*$ (^|\.)\w*adservice\w*\.\w*$ (^|\.)\w*adsh\w*\.\w*$ (^|\.)\w*adsmogo\w*\.\w*$ (^|\.)\w*adsrvmedia\w*\.\w*$ (^|\.)\w*adsserving\w*\.\w*$ (^|\.)\w*adsystem\w*\.\w*$ (^|\.)\w*adwords\w*\.\w*$ (^|\.)\w*analysis\w*\.\w*$ (^|\.)\w*analytics\w*\.\w*$ (^|\.)\w*applovin\w*\.\w*$ (^|\.)\w*appsflyer\w*\.\w*$ (^|\.)\w*domob\w*\.\w*$ (^|\.)\w*duomeng\w*\.\w*$ (^|\.)\w*dwtrack\w*\.\w*$ (^|\.)\w*guanggao\w*\.\w*$ (^|\.)\w*lianmeng\w*\.\w*$ (^|\.)\w*monitor\w*\.\w*$ (^|\.)\w*omgmta\w*\.\w*$ (^|\.)\w*omniture\w*\.\w*$ (^|\.)\w*openx\w*\.\w*$ (^|\.)\w*partnerad\w*\.\w*$ (^|\.)\w*pingfore\w*\.\w*$ (^|\.)\w*socdm\w*\.\w*$ (^|\.)\w*supersonicads\w*\.\w*$ (^|\.)\w*tracking\w*\.\w*$ (^|\.)\w*uedas\w*\.\w*$ (^|\.)\w*usage\w*\.\w*$ (^|\.)\w*wlmonitor\w*\.\w*$ (^|\.)\w*zjtoolbar\w*\.\w*$ (^|\.)ad\d{0,3}\..*$ (^|\.)ads\d{0,3}\..*$ (^|\.)tracking\..*$ # 163 (^|\.)(adgeo|bobo|fa|g|g1|gb|nex)(\.corp|)\.163\.com$ (^|\.)(analytics|img1|img2|mimg|push)\.126\.net$ (^|\.)(a|c|clkservice|conv|dsp|dsp-impr2|gorgon|rlogs|union|ydpushserver)\.youdao\.com$ (^|\.)(nc004x|nc045x|qt002x|tb060x|tb104x)\.corp\.youdao\.com$ (^|\.)(haitaoad|iadmatvideo)\.nosdn\.127\.net$ (^|\.)ir\.mail\.126\.com$ (^|\.)ir\.mail\.yeah\.net$ (^|\.)oimagea2\.ydstatic\.com$ (^|\.)pagechoice\.net$ (^|\.)prom\.gome\.com\.cn$ (^|\.)qchannel0\d\.cn$ (^|\.)static\.flv\.uuzuonline\.com$ (^|\.)wanproxy\.127\.net$ # 17173 (^|\.)cvda\.17173\.com$ (^|\.)imgapp\.yeyou\.com$ (^|\.)log1\.17173\.com$ (^|\.)s\.17173cdn\.com$ (^|\.)ue\.yeyoucdn\.com$ (^|\.)vda\.17173\.com$ # 178 (^|\.)analytics\.wanmei\.com$ (^|\.)gg\.stargame\.com$ # 2345 (^|\.)(dl|download|houtai|jifen|minipage|wan|jifendownload|zhushou)\.2345\.cn$ # 360 (^|\.)3600\.com$ (^|\.)gamebox\.360\.cn$ (^|\.)jiagu\.360\.cn$ (^|\.)kuaikan\.netmon\.360safe\.com$ (^|\.)leak\.360\.cn$ (^|\.)lianmeng\.360\.cn$ (^|\.)pub\.se\.360\.cn$ (^|\.)s\.so\.360\.cn$ (^|\.)shouji\.360\.cn$ (^|\.)soft\.data\.weather\.360\.cn$ (^|\.)stat\.360safe\.com$ (^|\.)stat\.m\.360\.cn$ (^|\.)update\.360safe\.com$ (^|\.)wan\.360\.cn$ # 58 (^|\.)(58|imp|stat)\.xgo\.com\.cn$ (^|\.)(brandshow|jing|track|tracklog)\.58\.com$ # Alibaba (^|\.)(adashx4yt|adash-c|ai|re|rj|simaba)\.m\.taobao\.com$ (^|\.)(afp|atanx|atanx2|gma|gtms\d\d)\.alicdn\.com$ (^|\.)(fav|m|redirect|srd|tns)\.simba\.taobao\.com$ (^|\.)(sdkinit|simaba|tyh)\.taobao\.com$ (^|\.)acjs\.aliyun\.com$ (^|\.)(adash-c|adashbc|adashxgc)\.ut\.taobao\.com$ (^|\.)alipaylog\.com$ (^|\.)amdc\.alipay\.com$ (^|\.)click\.mz\.simba\.taobao\.com$ (^|\.)g\.click\.taobao\.com$ (^|\.)g\.tbcdn\.cn$ (^|\.)hydra\.alibaba\.com$ (^|\.)pindao\.huoban\.taobao\.com$ (^|\.)show\.re\.taobao\.com$ (^|\.)strip\.taobaocdn\.com$ (^|\.)userimg\.qunar\.com$ (^|\.)yiliao\.hupan\.com$ # Adobe (^|\.)3dns-2\.adobe\.com$ (^|\.)3dns-3\.adobe\.com$ (^|\.)activate\.adobe\.com$ (^|\.)activate\.wip3\.adobe\.com$ (^|\.)activate-sea\.adobe\.com$ (^|\.)activate-sjc0\.adobe\.com$ (^|\.)adobe-dns\.adobe\.com$ (^|\.)adobe-dns-2\.adobe\.com$ (^|\.)adobe-dns-3\.adobe\.com$ (^|\.)ereg\.adobe\.com$ (^|\.)ereg\.wip3\.adobe\.com$ (^|\.)geo2\.adobe\.com$ (^|\.)hl2rcv\.adobe\.com$ (^|\.)hlrcv\.stage\.adobe\.com$ (^|\.)lm\.licenses\.adobe\.com$ (^|\.)lmlicenses\.wip4\.adobe\.com$ (^|\.)na1r\.services\.adobe\.com$ (^|\.)na2m-pr\.licenses\.adobe\.com$ (^|\.)practivate\.adobe\.com$ (^|\.)wip3\.adobe\.com$ (^|\.)wwis-dubc1-vip60\.adobe\.com$ # Apple (^|\.)adserver\.unityads\.unity3d\.com$ # AutoHome (^|\.)(33|adproxy|al|alert|applogapi|c|cmx|dspmnt|pcd|pvx|rd|rdx|stats)\.autohome\.com\.cn$ (^|\.)adm\d\.autoimg\.cn$ (^|\.)push\.app\.autohome\.com\.cn$ # Baidu (^|\.)(a|adm|adscdn|afd|als|anquan|appc|as|c|cb|cbjs|cbjslog|cjhq|cpro|cpro2|cpu|cpu-admin|crs|drmcmm|e|eclick|eiv|entry)\.baidu\.(com|cn)$ (^|\.)(hc|hm|hmma|hpd|imageplus|ma|mobads-logs|mobads|mtj|nsclick)\.baidu\.(com|cn)$ (^|\.)(pups|rj|rp|spcode|tk|tongji|tuisong|ucstat|ufosdk|union|utility|utk|videopush|wangmeng|wm|znsv)\.baidu\.(com|cn)$ (^|\.)ad\.duapps\.com$ (^|\.)ad\.player\.baidu\.com$ (^|\.)adx\.xiaodutv\.com$ (^|\.)ae\.bdstatic\.com$ (^|\.)antivirus\.baidu\.com$ (^|\.)api\.cpu\.baidu\.com$ (^|\.)api\.mobula\.sdk\.duapps\.com$ (^|\.)ashifen\.com$ (^|\.)baichuan\.baidu\.com$ (^|\.)baidu9635\.com$ (^|\.)baidustatic\.com$ (^|\.)baidutv\.baidu\.com$ (^|\.)baikebcs\.bdimg\.com$ (^|\.)banlv\.baidu\.com$ (^|\.)bar\.baidu\.com$ (^|\.)bdimg\.share\.baidu\.com$ (^|\.)bdplus\.baidu\.com$ (^|\.)btlaunch\.baidu\.com$ (^|\.)cleaner\.baidu\.com$ (^|\.)click\.bes\.baidu\.com$ (^|\.)click\.hm\.baidu\.com$ (^|\.)click\.qianqian\.com$ (^|\.)cm\.baidu\.com$ (^|\.)cm\.pos\.baidu\.com$ (^|\.)cpro\.baidustatic\.com$ (^|\.)cpro\.tieba\.baidu\.com$ (^|\.)cpro\.zhidao\.baidu\.com$ (^|\.)datax\.baidu\.com$ (^|\.)dl-vip\.bav\.baidu\.com$ (^|\.)dl-vip\.pcfaster\.baidu\.co\.th$ (^|\.)dl1sw\.baidu\.com$ (^|\.)dl2\.bav\.baidu\.com$ (^|\.)dl\.client\.baidu\.com$ (^|\.)dl\.ops\.baidu\.com$ (^|\.)dlsw\.baidu\.com$ (^|\.)dlsw\.br\.baidu\.com$ (^|\.)download\.bav\.baidu\.com$ (^|\.)download\.sd\.baidu\.com$ (^|\.)drmcmm\.baidu\.com$ (^|\.)dup\.baidustatic\.com$ (^|\.)dxp\.baidu\.com$ (^|\.)dzl\.baidu\.com$ (^|\.)ecma\.bdimg\.com$ (^|\.)ecmb\.bdimg\.com$ (^|\.)ecmc\.bdimg\.com$ (^|\.)em\.baidu\.com$ (^|\.)ers\.baidu\.com$ (^|\.)f10\.baidu\.com$ (^|\.)fc-\.cdn\.bcebos\.com$ (^|\.)fc-feed\.cdn\.bcebos\.com$ (^|\.)fclick\.baidu\.com$ (^|\.)feed\.baidu\.com$ (^|\.)fexclick\.baidu\.com$ (^|\.)g\.baidu\.com$ (^|\.)gimg\.baidu\.com$ (^|\.)guanjia\.baidu\.com$ (^|\.)idm-su\.baidu\.com$ (^|\.)iebar\.baidu\.com$ (^|\.)ikcode\.baidu\.com$ (^|\.)img01\.taotaosou\.cn$ (^|\.)img\.taotaosou\.cn$ (^|\.)itsdata\.map\.baidu\.com$ (^|\.)j\.br\.baidu\.com$ (^|\.)kstj\.baidu\.com$ (^|\.)log\.music\.baidu\.com$ (^|\.)log\.nuomi\.com$ (^|\.)m1\.baidu\.com$ (^|\.)mg09\.zhaopin\.com$ (^|\.)mipcache\.bdstatic\.com$ (^|\.)mpro\.baidu\.com$ (^|\.)msite\.baidu\.com$ (^|\.)neirong\.baidu\.com$ (^|\.)nsclickvideo\.baidu\.com$ (^|\.)openrcv\.baidu\.com$ (^|\.)pc\.videoclick\.baidu\.com$ (^|\.)pos\.baidu\.com$ (^|\.)pups\.bdimg\.com$ (^|\.)push\.music\.baidu\.com$ (^|\.)push\.zhanzhang\.baidu\.com$ (^|\.)qchannel0\d\.cn$ (^|\.)qianclick\.baidu\.com$ (^|\.)release\.baidu\.com$ (^|\.)res\.limei\.com$ (^|\.)res\.mi\.baidu\.com$ (^|\.)rigel\.baidustatic\.com$ (^|\.)river\.zhidao\.baidu\.com$ (^|\.)rplog\.baidu\.com$ (^|\.)s\.baidu\.com$ (^|\.)s\.cpro\.baidu\.com$ (^|\.)sa\.tuisong\.baidu\.com$ (^|\.)sclick\.baidu\.com$ (^|\.)sestat\.baidu\.com$ (^|\.)shadu\.baidu\.com$ (^|\.)share\.baidu\.com$ (^|\.)shifen\.com$ (^|\.)snippet\.pos\.baidu\.com$ (^|\.)sobar\.baidu\.com$ (^|\.)sobartop\.baidu\.com$ (^|\.)stat\.v\.baidu\.com$ (^|\.)su\.bdimg\.com$ (^|\.)su\.bdstatic\.com$ (^|\.)t10\.baidu\.com$ (^|\.)t11\.baidu\.com$ (^|\.)t12\.baidu\.com$ (^|\.)tkweb\.baidu\.com$ (^|\.)tob-cms\.bj\.bcebos\.com$ (^|\.)toolbar\.baidu\.com$ (^|\.)tracker\.baidu\.com$ (^|\.)tuijian\.baidu\.com$ (^|\.)uat1\.bfsspadserver\.8le8le\.com$ (^|\.)ubmcmm\.baidustatic\.com$ (^|\.)ulic\.baidu\.com$ (^|\.)ulog\.imap\.baidu\.com$ (^|\.)unionimage\.baidu\.com$ (^|\.)vv84\.bj\.bcebos\.com$ (^|\.)w\.gdown\.baidu\.com$ (^|\.)w\.x\.baidu\.com$ (^|\.)weishi\.baidu\.com$ (^|\.)wenku-cms\.bj\.bcebos\.com$ (^|\.)wisepush\.video\.baidu\.com$ (^|\.)wn\.pos\.baidu\.com$ (^|\.)zz\.bdstatic\.com$ (^|\.)zzy1\.quyaoya\.com$ # Book-app 起点 掌阅 书旗 宜搜 (^|\.)(adm|assets|tjlog)(\.ps|)\.easou\.com$ (^|\.)(ad|push|sys)\.zhangyue\.com$ (^|\.)(cj|game|tongji)\.qidian\.com$ (^|\.)aishowbger\.com$ (^|\.)api\.itaoxiaoshuo\.com$ (^|\.)bbcoe\.cn$ (^|\.)dkeyn\.com$ (^|\.)drdwy\.com$ (^|\.)e701\.net$ (^|\.)e\.aa985\.cn$ (^|\.)e\.v02u9\.cn$ (^|\.)ehxyz\.com$ (^|\.)ethod\.gzgmjcx\.com$ (^|\.)focuscat\.com$ (^|\.)hdswgc\.com$ (^|\.)jyd\.fjzdmy\.com$ (^|\.)m\.ourlj\.com$ (^|\.)m\.txtxr\.com$ (^|\.)m\.vsxet\.com$ (^|\.)miam4\.cn$ (^|\.)o\.if\.qidian\.com$ (^|\.)p\.vq6nsu\.cn$ (^|\.)picture\.duokan\.com$ (^|\.)pyerc\.com$ (^|\.)s1\.cmfu\.com$ (^|\.)sc\.shayugg\.com$ (^|\.)sdk\.cferw\.com$ (^|\.)sezvc\.com$ (^|\.)ut2\.shuqistat\.com$ (^|\.)xgcsr\.com$ (^|\.)xjq\.jxmqkj\.com$ (^|\.)xpe\.cxaerp\.com$ (^|\.)xtzxmy\.com$ (^|\.)xyrkl\.com$ (^|\.)zhuanfakong\.com$ # ByteDance 头条抖音 (^|\.)(ad|sm|dsp|nativeapp|partner|track)\.toutiao\.com$ (^|\.)ic\.snssdk\.com$ (^|\.)log\.snssdk\.com$ (^|\.)xlog\.snssdk\.com$ # Dangdang (^|\.)(a|click|schprompt|t)\.dangdang\.com$ # Duomi (^|\.)ad\.duomi\.com$ (^|\.)boxshows\.com$ # Facebook (^|\.)staticxx\.facebook\.com$ # Fang (^|\.)click1n\.soufun\.com$ (^|\.)clickm\.fang\.com$ (^|\.)clickn\.fang\.com$ (^|\.)countpvn\.light\.fang\.com$ (^|\.)countubn\.light\.soufun\.com$ (^|\.)mshow\.fang\.com$ (^|\.)tongji\.home\.soufun\.com$ # Google (^|\.)admob\.com$ (^|\.)ads\.gmodules\.com$ (^|\.)ads\.google\.com$ (^|\.)adservice\.google\.com$ (^|\.)afd\.l\.google\.com$ (^|\.)badad\.googleplex\.com$ (^|\.)csi\.gstatic\.com$ (^|\.)doubleclick(\.com|\.net)$ (^|\.)google-analytics\.com$ (^|\.)googleadservices\.com$ (^|\.)googleadsserving\.cn$ (^|\.)googlecommerce\.com$ (^|\.)googlesyndication\.com$ (^|\.)mobileads\.google\.com$ (^|\.)pagead-tpc\.l\.google\.com$ (^|\.)pagead\.google\.com$ (^|\.)pagead\.l\.google\.com$ (^|\.)service\.urchin\.com$ # JD (^|\.)(c-nfa|img-x|jrclick|jzt|policy)\.jd\.com$ (^|\.)ads\.union\.jd\.com$ (^|\.)cps\.360buy\.com$ (^|\.)stat\.m\.jd\.com$ # Kugou (^|\.)(bssdl|bssdlbig|d|downmobile|fanxing|gad|game|gamebox|gg|install|install2|kgmobilestat|minidcsc|mo|mobilelog|mvads|p|rtmonitor|sdn|tj)\.kugou\.com$ (^|\.)(msg|push|update)\.mobile\.kugou\.com$ (^|\.)ads\.service\.kugou\.com$ (^|\.)gcapi\.sy\.kugou\.com$ (^|\.)kuaikaiapp\.com$ (^|\.)log\.stat\.kugou\.com$ (^|\.)log\.web\.kugou\.com$ # Kuwo (^|\.)(deliver|g|log|kwmsg|mobilead|msclick2|msphoneclick|updatepage|wa|webstat)\.kuwo\.cn$ (^|\.)apk\.shouji\.koowo\.com$ (^|\.)g\.koowo\.com$ # Meizu flyme 魅族 (^|\.)(aider-res|api-flow|api-game|api-push|cal|ebook|game-res|infocenter|openapi-news|reader|tongji-res1|tongji|uxip)\.meizu\.com$ (^|\.)(bro|t-e|t-flow)\.flyme\.cn$ (^|\.)(ebook|game|push|reader|upush)\.res\.meizu\.com$ (^|\.)aries\.mzres\.com$ (^|\.)umid\.orion\.meizu\.com$ # Meitu (^|\.)(corp|gg|message|tuiguang)\.meitu\.com$ (^|\.)(dc|mdc|rabbit)\.meitustat\.com$ (^|\.)a\.koudai\.com$ (^|\.)adui\.tg\.meitu\.com$ (^|\.)meitubeauty\.meitudata\.com$ (^|\.)rabbit\.tg\.meitu\.com$ (^|\.)xiuxiu\.android\.dl\.meitu\.com$ (^|\.)xiuxiu\.mobile\.meitudata\.com$ # Miui 小米 (^|\.)(ad|ad1|shenghuo|xmpush)\.xiaomi\.com$ (^|\.)(a|wtradv)\.market\.xiaomi\.com$ (^|\.)(bss|de|dvb|jellyfish|stat)\.pandora\.xiaomi\.com$ (^|\.)(d|migc|migcreport|mis)\.g\.mi\.com$ (^|\.)(notice|ppurifier)\.game\.xiaomi\.com$ (^|\.)(r|security)\.browser\.miui\.com$ (^|\.)tracking\.miui\.com$ (^|\.)union\.mi\.com$ # Moji (^|\.)ad\.api\.moji\.com$ (^|\.)app\.moji001\.com$ (^|\.)cdn\.moji002\.com$ (^|\.)cdn2\.moji002\.com$ (^|\.)fds\.api\.moji\.com$ (^|\.)log\.moji\.com$ (^|\.)stat\.moji\.com$ (^|\.)ugc\.moji001\.com$ # Qingting\.fm (^|\.)(ad|admgr|logger)\.qingting\.fm$ (^|\.)dload\.qd\.qingting\.fm$ (^|\.)s\.qd\.qingting\.fm$ (^|\.)s\.qd\.qingtingfm\.com$ # QQ (^|\.)\w*omgmta\w*\.\w*$ (^|\.)(act|adsfile|bugly|buluo|gdt|monitor|pingma|pingtcss|report|tajs|tcss|uu)\.qq\.com$ (^|\.)ad\.qun\.qq\.com$ # RenRen (^|\.)jebe\.renren\.com$ (^|\.)ebp\.renren\.com$ (^|\.)jebe\.xnimg\.cn$ # Sina (^|\.)(adimg|pay|sax|sdkapp|sdkclick|trends|u1\.img|wbapp|wbclick|wbpctips)\.mobile\.sina\.cn$ (^|\.)(ad|ad\d|adbox|adm|d\d|dcads|dmp|leju|sax|sax\d|slog)\.sina\.com(\.cn|)$ (^|\.)(alitui|biz|game|wax)\.weibo\.com(\.cn|)$ (^|\.)cre\.dp\.sina\.cn$ (^|\.)gw5\.push\.mcp\.weibo\.cn$ (^|\.)log\.mix\.sina\.com\.cn$ (^|\.)mobileads\.dx\.cn$ (^|\.)newspush\.sinajs\.cn$ (^|\.)sdkapp\.uve\.weibo\.com$ (^|\.)tui\.weibo\.com$ (^|\.)wbapp\.uve\.weibo\.com$ (^|\.)zymo\.mps\.weibo\.com$ # Sougou (^|\.)(123|adsence|brand|cpc|epro|fair|files2|goto|golden1|inte|iwan|lu|pb|pd|pv|theta|wan|wangmeng)\.sogou\.com$ (^|\.)(123|galaxy|lu)\.sogoucdn\.com$ (^|\.)amfi\.gou\.sogou\.com$ # Teleplus (^|\.)applovin\.com$ (^|\.)guangzhuiyuan\.com$ # Twitter (^|\.)(ads|syndication|syndication-o|analytics|scribe|p)\.twitter\.com$ (^|\.)ads-twitter\.com$ (^|\.)tellapart\.com$ (^|\.)urls\.api\.twitter\.com$ # UC ali (^|\.)(adslot|applog|track)\.uc\.cn$ (^|\.)(cms|puds|uc|ucsec1|ucsec)\.ucweb\.com$ (^|\.)(log|patriot)\.cs\.pp\.cn$ (^|\.)api\.mp\.uc\.cn$ (^|\.)client\.video\.ucweb\.com$ (^|\.)dispatcher\.upmc\.uc\.cn$ (^|\.)huichuan\.sm\.cn$ (^|\.)iflow\.uczzd(\.\w{2,3}){1,2}$ (^|\.)m\.uczzd\.cn$ (^|\.)server\.m\.pp\.cn$ (^|\.)u\.uc123\.com$ (^|\.)u\.ucfly\.com$ # Weifeng (^|\.)(aoodoo|push|yes1)\.feng\.com$ (^|\.)fengbuy\.com$ (^|\.)push\.feng\.com$ (^|\.)we\.tm$ # WPS Office (^|\.)(bannera|rating6|cloudservice.*)\.kingsoft-office-service\.com$ (^|\.)(docerad|gou|info|minfo|notify|pcfg|push|wpsweb-dc)\.wps\.cn$ (^|\.)ad\.docer\.wps\.cn$ (^|\.)adm\.zookingsoft\.com$ (^|\.)bole\.shangshufang\.ksosoft\.com$ (^|\.)counter\.kingsoft\.com$ (^|\.)dl\.op\.wpscdn\.cn$ (^|\.)hoplink\.ksosoft\.com$ (^|\.)ic\.ksosoft\.com$ (^|\.)img.*\.mini\.cache\.wps\.cn$ (^|\.)img\.gou\.wpscdn\.cn$ (^|\.)ios-informationplatform\.wps\.cn$ (^|\.)mo\.res\.wpscdn\.cn$ (^|\.)news\.docer\.com$ (^|\.)news\.op\.wpscdn\.cn$ (^|\.)pc\.uf\.ksosoft\.com$ (^|\.)pixiu\.shangshufang\.ksosoft\.com$ (^|\.)up\.wps\.kingsoft\.com$ # Wi-Fi key (^|\.)(c|cdsget|news-imgpb|wifiapi\d\d|wkanc)\.51y5\.net$ # Ximalaya 喜马拉雅 (^|\.)(adse|linkeye|location|xdcs-collector)\.ximalaya\.com$ # Xunlei 迅雷app&看看 (^|\.)biz5\.kankan\.com$ (^|\.)float\.kankan\.com$ (^|\.)logic\.cpm\.cm\.kankan\.com$ (^|\.)hub5btmain\.sandai\.net$ (^|\.)hub5emu\.sandai\.net$ (^|\.)upgrade\.xl9\.xunlei\.com$ # Yahoo (^|\.)(ads|adserver|adss|analytics|beap-bc|comet|geo|gemini|p3p|ybp)\.yahoo\.com$ (^|\.)(analytics|locdrop|onepush)\.query\.yahoo\.com$ (^|\.)(ard|ane|yads)\.yahoo\.co\.jp$ (^|\.)(js-apac-ss|partnerads)\.ysm\.yahoo\.com$ (^|\.)ad\.wretch\.cc$ (^|\.)clicks\.beap\.bc\.yahoo\.com$ (^|\.)doubleplay-conf-yql\.media\.yahoo\.com$ (^|\.)flurry\.com$ (^|\.)m\.yap\.yahoo\.com$ (^|\.)uservoice\.com$ (^|\.)ws\.progrss\.yahoo\.com$ # Zhihu (^|\.)(sugar|zhihu-web-analytics)\.zhihu\.com$ # Ads in Video apps********************下面都是 # 6间房 (^|\.)(shrek|simba|union)\.6\.cn$ # Baofeng 暴风影音 (^|\.)logger\.baofeng\.com$ (^|\.)xs\.houyi\.baofeng\.net$ # Douyu (^|\.)dotcounter\.douyutv\.com$ # Fenghuang 凤凰TV (^|\.)(game|stadig)\.ifeng\.com$ (^|\.)api\.newad\.ifeng\.com$ (^|\.)exp\.3g\.ifeng\.com$ (^|\.)iis3g\.deliver\.ifeng\.com$ (^|\.)mfp\.deliver\.ifeng\.com$ # Funshion 风行 (^|\.)(pub|adm|jobsfe|po|pv|stat)\.funshion\.com$ # iqiyi PPS 爱奇艺 (^|\.)ad\.m\.iqiyi\.com$ (^|\.)afp\.iqiyi\.com$ (^|\.)c\.uaa\.iqiyi\.com$ (^|\.)cloudpush\.iqiyi\.com$ (^|\.)cm\.passport\.iqiyi\.com$ (^|\.)cupid\.iqiyi\.com$ (^|\.)emoticon\.sns\.iqiyi\.com$ (^|\.)gamecenter\.iqiyi\.com$ (^|\.)ifacelog\.iqiyi\.com$ (^|\.)mbdlog\.iqiyi\.com$ (^|\.)meta\.video\.qiyi\.com$ (^|\.)msg1\.video\.qiyi\.com$ (^|\.)msg2\.video\.qiyi\.com$ (^|\.)msg\.71\.am$ (^|\.)paopao\.iqiyi\.com$ (^|\.)paopao\d\.qiyipic\.com$ (^|\.)policy\.video\.iqiyi\.com$ (^|\.)yuedu\.iqiyi\.com$ 101.227.200.0/24 101.227.200.11/32 101.227.200.28/32 101.227.97.240/32 124.192.153.42/32 # Ku6 酷6 (^|\.)gug\.ku6cdn\.com$ (^|\.)st\.vq\.ku6\.cn$ (^|\.)pq\.stat\.ku6\.com$ (^|\.)static\.ku6\.com$ # LeTV 乐视 (^|\.)(ark|dc|fz|g3|minisite|pro|stat)\.letv\.com$ (^|\.)(1|2)\.letvlive\.com$ (^|\.)(i0|i3)\.letvimg\.com$ (^|\.)game\.letvstore\.com$ (^|\.)n\.mark\.letv\.com$ (^|\.)pro\.hoye\.letv\.com$ (^|\.)static\.app\.m\.letv\.com$ # MGTV 芒果TV (^|\.)(click|da|log|p2|res)\.hunantv\.com$ (^|\.)da\.mgtv\.com$ (^|\.)log\.v2\.hunantv\.com$ # Sohu 搜狐 (^|\.)(888|lm|push)\.tv\.sohu\.com$ (^|\.)(aty|bd|click|click2|ctr|pv|pb|wl|um)\.hd\.sohu\.com$ (^|\.)(ads|adnet|aty|epro|go|golden1|hui|inte|uranus|wan|yule|pv)\.sohu\.com$ (^|\.)(epro|golden1|inte|uranus|pv)\.sogou\.com$ (^|\.)(inte|lu|theta)\.sogoucdn\.com$ # PPTV、PPLive (^|\.)(de|jp)\.as\.pptv\.com$ (^|\.)(app|as)\.aplus\.pptv\.com$ (^|\.)afp\.pplive\.com$ (^|\.)asimgs\.pplive\.cn$ (^|\.)pp2\.pptv\.com$ (^|\.)stat\.pptv\.com$ # QQ Live (^|\.)aiseet\.aa\.atianqi\.com$ (^|\.)aiseet\.atianqi\.com$ (^|\.)btrace\.video\.qq\.com$ (^|\.)c\.l\.qq\.com$ (^|\.)dp3\.qq\.com$ (^|\.)livep\.l\.qq\.com$ (^|\.)lives\.l\.qq\.com$ (^|\.)livew\.l\.qq\.com$ (^|\.)mcgi\.v\.qq\.com$ (^|\.)mdevstat\.qqlive\.qq\.com$ (^|\.)omgmta1\.qq\.com$ (^|\.)p\.l\.qq\.com$ (^|\.)rcgi\.video\.qq\.com$ (^|\.)t\.l\.qq\.com$ (^|\.)u\.l\.qq\.com$ # Youku & Tudou (^|\.)(actives|dmapp|hz|iyes|l|lstat|lvip|msg|mobilemsg|myes|passport-log|stat|tdrec|wan|ykatr|ykrec|ykrectab)\.youku\.com$ (^|\.)(adcontrol|adplay|goods|iwstat|nstat|stat|stats)\.tudou\.com$ (^|\.)(ad|gamex)\.mobile\.youku\.com$ (^|\.)(dev-push|push|sdk)\.m\.youku\.com$ (^|\.)(p|r|v)\.l\.youku\.com$ (^|\.)a-dxk\.play\.api\.3g\.youku\.com$ (^|\.)ad\.api\.3g(\.tudou|\.youku)\.com$ (^|\.)ad\.api\.mobile\.youku\.com$ (^|\.)b\.smartvideo\.youku\.com$ (^|\.)c\.yes\.youku\.com$ (^|\.)dl\.g\.youku\.com$ (^|\.)e\.stat\.ykimg\.com$ (^|\.)hudong\.pl\.youku\.com$ (^|\.)l\.ykimg\.com$ (^|\.)p-log\.ykimg\.com$ (^|\.)p\.l\.ykimg\.com$ (^|\.)s\.p\.youku\.com$ (^|\.)store\.tv\.api\.3g\.youku\.com$ (^|\.)store\.xl\.api\.3g\.youku\.com$ (^|\.)test\.ott\.youku\.com$ (^|\.)val\.api\.youku\.com$ 117.177.248.17/32 117.177.248.41/32 223.87.176.139/32 223.87.176.176/32 223.87.177.180/32 223.87.177.182/32 223.87.177.184/32 223.87.177.43/32 223.87.177.47/32 223.87.177.80/32 223.87.182.101/32 223.87.182.102/32 223.87.182.11/32 223.87.182.52/32 # Youtube (^|\.)azabu-u\.ac\.jp$ (^|\.)couchcoaster\.jp$ (^|\.)delivery\.dmkt-sp\.jp$ (^|\.)ehg-youtube\.hitbox\.com$ (^|\.)m-78\.jp$ (^|\.)nichibenren\.or\.jp$ (^|\.)nicorette\.co\.kr$ (^|\.)ssl-youtube\.2cnt\.net$ (^|\.)youtube\.112\.2o7\.net$ (^|\.)youtube\.2cnt\.net$ # Others ads in Video apps (^|\.)(acsystem|ads|afp)\.wasu\.tv$ (^|\.)ads\.cdn\.tvb\.com$ (^|\.)c\.algovid\.com$ (^|\.)cc\.xtgreat\.com$ (^|\.)d\.dsp\.imageter\.com$ (^|\.)gg\.jtertp\.com$ (^|\.)gridsum-vd\.cntv\.cn$ (^|\.)kwflvcdn\.000dn\.com$ (^|\.)logstat\.t\.sfht\.com$ (^|\.)match\.rtbidder\.net$ (^|\.)n-st\.vip\.com$ (^|\.)pop\.uusee\.com$ (^|\.)static\.bshare\.cn$ (^|\.)static\.duoshuo\.com$ (^|\.)t\.cr-nielsen\.com$ (^|\.)terren\.cntv\.cn$ # Ads in Video apps end ********************上面都是 # 常用网站广告**************** (^|\.)(168|adshownew|stat)\.it168\.com$ (^|\.)(1|2)\.win7china\.com$ (^|\.)(801|803|806|808|bdj|dol|click)\.(tianya|tianyaui)\.cn$ (^|\.)(92x|its-dori)\.tumblr\.com$ (^|\.)(adm|eq|fund|ozone|stat|vaserviece)\.10jqka\.com\.cn$ (^|\.)(ad|adadmin|ads)\.house365\.com$ (^|\.)(ad|ads|counter)\.csdn\.net$ (^|\.)(ad|analytics|click|ganjituiguang|sta|tralog)\.ganji\.com$ (^|\.)(app-monitor|client-api|grand|mobile-pubt|newton-api)\.ele\.me$ (^|\.)(bd1|bd2)\.52che\.com$ (^|\.)(click|media|pv)\.(cheshi|cheshi-img)\.com$ (^|\.)(d0|dw|pv)\.xcar\.com\.cn$ (^|\.)a1\.itc\.cn$ (^|\.)ad\.12306\.cn$ (^|\.)ad\.3\.cn$ (^|\.)ad\.95306\.cn$ (^|\.)ad\.caiyunapp\.com$ (^|\.)ad\.cctv\.com$ (^|\.)ad\.cmvideo\.cn$ (^|\.)ad\.thepaper\.cn$ (^|\.)ad\.unimhk\.com$ (^|\.)adhome\.1fangchan\.com$ (^|\.)adm\.easou\.com$ (^|\.)ads\.feedly\.com$ (^|\.)ads\.genieessp\.com$ (^|\.)ads\.linkedin\.com$ (^|\.)adv\.ccb\.com$ (^|\.)advert\.api\.thejoyrun\.com$ (^|\.)api-deal\.kechenggezi\.com$ (^|\.)api-z\.weidian\.com$ (^|\.)bam\.nr-data\.net$ (^|\.)mobileads\.msn\.com$ (^|\.)bat\.bing\.com$ (^|\.)beacon\.tingyun\.com$ (^|\.)cdn\.jiuzhilan\.com$ (^|\.)collector\.githubapp\.com$ (^|\.)de\.soquair\.com$ (^|\.)e\.nexac\.com$ (^|\.)erebor\.douban\.com$ (^|\.)exp\.17wo\.cn$ (^|\.)game\.51yund\.com$ (^|\.)hosting\.miarroba\.info$ (^|\.)iadsdk\.apple\.com$ (^|\.)image\.gentags\.com$ (^|\.)log\.outbrain\.com$ (^|\.)m\.12306media\.com$ (^|\.)n\.cosbot\.cn$ (^|\.)pdl\.gionee\.com$ (^|\.)pica-juicy\.picacomic\.com$ (^|\.)pixel\.wp\.com$ (^|\.)pub\.mop\.com$ (^|\.)push\.wandoujia\.com$ (^|\.)qdp\.qidian\.com$ (^|\.)res\.gwifi\.com\.cn$ (^|\.)ssp\.kssws\.ks-cdn\.com$ (^|\.)stats\.chinaz\.com$ (^|\.)stats\.developingperspective\.com$ (^|\.)tjlog\.easou\.com$ (^|\.)tjlog\.ps\.easou\.com$ (^|\.)track\.hujiang\.com$ (^|\.)tracker\.yhd\.com$ (^|\.)up\.qingdaonews\.com$ # 广告联盟-国内**************** (^|\.)09mk\.cn$ (^|\.)100peng\.com$ (^|\.)114la\.com$ (^|\.)123juzi\.net$ (^|\.)138lm\.com$ (^|\.)17un\.com$ (^|\.)2cnt\.net$ (^|\.)3gmimo\.com$ (^|\.)3xx\.vip$ (^|\.)51\.la$ (^|\.)51taifu\.com$ (^|\.)51yes\.com$ (^|\.)600ad\.com$ (^|\.)6dad\.com$ (^|\.)70e\.com$ (^|\.)86\.cc$ (^|\.)8le8le\.com$ (^|\.)8ox\.cn$ (^|\.)95558000\.com$ (^|\.)99click\.com$ (^|\.)99youmeng\.com$ (^|\.)a3p4\.net$ (^|\.)acs86\.com$ (^|\.)acxiom-online\.com$ (^|\.)ad-brix\.com$ (^|\.)ad-delivery\.net$ (^|\.)ad-locus\.com$ (^|\.)ad-plus\.cn$ (^|\.)ad7\.com$ (^|\.)adadapted\.com$ (^|\.)adadvisor\.net$ (^|\.)adap\.tv$ (^|\.)adbana\.com$ (^|\.)adchina\.com$ (^|\.)adcome\.cn$ (^|\.)ader\.mobi$ (^|\.)adform\.net$ (^|\.)adfuture\.cn$ (^|\.)adhouyi\.com$ (^|\.)adinfuse\.com$ (^|\.)adirects\.com$ (^|\.)adjust\.com$ (^|\.)adjust\.io$ (^|\.)adkmob\.com$ (^|\.)adlive\.cn$ (^|\.)adlocus\.com$ (^|\.)admaji\.com$ (^|\.)admin6\.com$ (^|\.)admon\.cn$ (^|\.)adnyg\.com$ (^|\.)adpolestar\.net$ (^|\.)adpro\.cn$ (^|\.)adpush\.cn$ (^|\.)adquan\.com$ (^|\.)adreal\.cn$ (^|\.)ads8\.com$ (^|\.)adsame\.com$ (^|\.)adsmogo\.com$ (^|\.)adsmogo\.org$ (^|\.)adsunflower\.com$ (^|\.)adsunion\.com$ (^|\.)adtrk\.me$ (^|\.)adups\.com$ (^|\.)aduu\.cn$ (^|\.)advertising\.com$ (^|\.)adview\.cn$ (^|\.)advmob\.cn$ (^|\.)adwetec\.com$ (^|\.)adwhirl\.com$ (^|\.)adwo\.com$ (^|\.)adxmi\.com$ (^|\.)adyun\.com$ (^|\.)adzerk\.net$ (^|\.)agrant\.cn$ (^|\.)agrantsem\.com$ (^|\.)aihaoduo\.cn$ (^|\.)ajapk\.com$ (^|\.)allyes\.cn$ (^|\.)allyes\.com$ (^|\.)amazon-adsystem\.com$ (^|\.)amplitude\.com$ (^|\.)analysys\.cn$ (^|\.)angsrvr\.com$ (^|\.)anquan\.org$ (^|\.)anysdk\.com$ (^|\.)appadhoc\.com$ (^|\.)appads\.com$ (^|\.)appboy\.com$ (^|\.)appdriver\.cn$ (^|\.)appjiagu\.com$ (^|\.)applifier\.com$ (^|\.)appsflyer\.com$ (^|\.)atdmt\.com$ (^|\.)baifendian\.com$ (^|\.)banmamedia\.com$ (^|\.)baoyatu\.cc$ (^|\.)baycode\.cn$ (^|\.)bayimob\.com$ (^|\.)behe\.com$ (^|\.)bfshan\.cn$ (^|\.)biddingos\.com$ (^|\.)biddingx\.com$ (^|\.)bjvvqu\.cn$ (^|\.)bjxiaohua\.com$ (^|\.)bloggerads\.net$ (^|\.)branch\.io$ (^|\.)bsdev\.cn$ (^|\.)bshare\.cn$ (^|\.)btyou\.com$ (^|\.)bugtags\.com$ (^|\.)buysellads\.com$ (^|\.)c0563\.com$ (^|\.)cacafly\.com$ (^|\.)casee\.cn$ (^|\.)cdnmaster\.com$ (^|\.)chance-ad\.com$ (^|\.)chanet\.com\.cn$ (^|\.)chartbeat\.com$ (^|\.)chartboost\.com$ (^|\.)chengadx\.com$ (^|\.)chmae\.com$ (^|\.)clickadu\.com$ (^|\.)clicki\.cn$ (^|\.)clicktracks\.com$ (^|\.)clickzs\.com$ (^|\.)cloudmobi\.net$ (^|\.)cmcore\.com$ (^|\.)cnxad\.com$ (^|\.)cnzz\.com$ (^|\.)cnzzlink\.com$ (^|\.)cocounion\.com$ (^|\.)coocaatv\.com$ (^|\.)cooguo\.com$ (^|\.)coolguang\.com$ (^|\.)coremetrics\.com$ (^|\.)cpmchina\.co$ (^|\.)cpx24\.com$ (^|\.)crasheye\.cn$ (^|\.)crosschannel\.com$ (^|\.)ctrmi\.com$ (^|\.)customer-security\.online$ (^|\.)daoyoudao\.com$ (^|\.)datouniao\.com$ (^|\.)ddapp\.cn$ (^|\.)dianjoy\.com$ (^|\.)dianru\.com$ (^|\.)disqusads\.com$ (^|\.)domob\.cn$ (^|\.)domob\.com\.cn$ (^|\.)domob\.org$ (^|\.)dotmore\.com\.tw$ (^|\.)doubleverify\.com$ (^|\.)doudouguo\.com$ (^|\.)doumob\.com$ (^|\.)duanat\.com$ (^|\.)duiba\.com\.cn$ (^|\.)duomeng\.cn$ (^|\.)dxpmedia\.com$ (^|\.)edigitalsurvey\.com$ (^|\.)eduancm\.com$ (^|\.)emarbox\.com$ (^|\.)epsilon\.com$ (^|\.)exosrv\.com$ (^|\.)fancyapi\.com$ (^|\.)feitian001\.com$ (^|\.)feixin2\.com$ (^|\.)flashtalking\.com$ (^|\.)fraudmetrix\.cn$ (^|\.)gentags\.net$ (^|\.)gepush\.com$ (^|\.)getui\.com$ (^|\.)glispa\.com$ (^|\.)go-mpulse$ (^|\.)go-mpulse\.net$ (^|\.)godloveme\.cn$ (^|\.)gridsum\.com$ (^|\.)gridsumdissector\.cn$ (^|\.)gridsumdissector\.com$ (^|\.)growingio\.com$ (^|\.)guohead\.com$ (^|\.)guomob\.com$ (^|\.)haoghost\.com$ (^|\.)hivecn\.cn$ (^|\.)hypers\.com$ (^|\.)icast\.cn$ (^|\.)igexin\.com$ (^|\.)il8r\.com$ (^|\.)imageter\.com$ (^|\.)immob\.cn$ (^|\.)inad\.com$ (^|\.)inmobi\.cn$ (^|\.)inmobi\.net$ (^|\.)inmobicdn\.cn$ (^|\.)inmobicdn\.net$ (^|\.)innity\.com$ (^|\.)instabug\.com$ (^|\.)intely\.cn$ (^|\.)iperceptions\.com$ (^|\.)ipinyou\.com$ (^|\.)irs01\.com$ (^|\.)irs01\.net$ (^|\.)irs09\.com$ (^|\.)istreamsche\.com$ (^|\.)jesgoo\.com$ (^|\.)jiaeasy\.net$ (^|\.)jiguang\.cn$ (^|\.)jimdo\.com$ (^|\.)jisucn\.com$ (^|\.)jmgehn\.cn$ (^|\.)jpush\.cn$ (^|\.)jusha\.com$ (^|\.)juzi\.cn$ (^|\.)juzilm\.com$ (^|\.)kejet\.com$ (^|\.)kejet\.net$ (^|\.)keydot\.net$ (^|\.)keyrun\.cn$ (^|\.)kmd365\.com$ (^|\.)krux\.net$ (^|\.)lnk0\.com$ (^|\.)lnk8\.cn$ (^|\.)localytics\.com$ (^|\.)lomark\.cn$ (^|\.)lotuseed\.com$ (^|\.)lrswl\.com$ (^|\.)lufax\.com$ (^|\.)madhouse\.cn$ (^|\.)madmini\.com$ (^|\.)madserving\.com$ (^|\.)magicwindow\.cn$ (^|\.)mathtag\.com$ (^|\.)maysunmedia\.com$ (^|\.)mbai\.cn$ (^|\.)mediaplex\.com$ (^|\.)mediav\.com$ (^|\.)megajoy\.com$ (^|\.)meiqia\.com$ (^|\.)mgogo\.com$ (^|\.)miaozhen\.com$ (^|\.)microad-cn\.com$ (^|\.)miidi\.net$ (^|\.)mijifen\.com$ (^|\.)mixpanel\.com$ (^|\.)mjmobi\.com$ (^|\.)mng-ads\.com$ (^|\.)moad\.cn$ (^|\.)moatads\.com$ (^|\.)mobaders\.com$ (^|\.)mobclix\.com$ (^|\.)mobgi\.com$ (^|\.)mobisage\.cn$ (^|\.)mobvista\.com$ (^|\.)mopub\.com$ (^|\.)moquanad\.com$ (^|\.)mpush\.cn$ (^|\.)mxpnl\.com$ (^|\.)myhug\.cn$ (^|\.)mzy2014\.com$ (^|\.)networkbench\.com$ (^|\.)newrelic\.com$ (^|\.)ninebox\.cn$ (^|\.)ntalker\.com$ (^|\.)nylalobghyhirgh\.com$ (^|\.)o2omobi\.com$ (^|\.)oadz\.com$ (^|\.)oneapm\.com$ (^|\.)onetad\.com$ (^|\.)optaim\.com$ (^|\.)optimix\.asia$ (^|\.)optimix\.cn$ (^|\.)optimizely\.com$ (^|\.)optimizelyapis\.com$ (^|\.)overture\.com$ (^|\.)p0y\.cn$ (^|\.)pagechoice\.net$ (^|\.)pingdom\.net$ (^|\.)plugrush\.com$ (^|\.)popin\.cc$ (^|\.)pro\.cn$ (^|\.)publicidad\.net$ (^|\.)publicidad\.tv$ (^|\.)pubmatic\.com$ (^|\.)pubnub\.com$ (^|\.)qcl777\.com$ (^|\.)qiyou\.com$ (^|\.)qtmojo\.com$ (^|\.)quantcount\.com$ (^|\.)qucaigg\.com$ (^|\.)qumi\.com$ (^|\.)qxxys\.com$ (^|\.)reachmax\.cn$ (^|\.)responsys\.net$ (^|\.)revsci\.net$ (^|\.)rlcdn\.com$ (^|\.)rtbasia\.com$ (^|\.)sanya1\.com$ (^|\.)scupio\.com$ (^|\.)serving-sys\.com$ (^|\.)shuiguo\.com$ (^|\.)shuzilm\.cn$ (^|\.)similarweb\.com$ (^|\.)sitemeter\.com$ (^|\.)sitescout\.com$ (^|\.)sitetag\.us$ (^|\.)smartmad\.com$ (^|\.)social-touch\.com$ (^|\.)somecoding\.com$ (^|\.)sponsorpay\.com$ (^|\.)stargame\.com$ (^|\.)stg8\.com$ (^|\.)switchadhub\.com$ (^|\.)sycbbs\.com$ (^|\.)synacast\.com$ (^|\.)sysdig\.com$ (^|\.)tagtic\.cn$ (^|\.)talkingdata\.com$ (^|\.)talkingdata\.net$ (^|\.)tansuotv\.com$ (^|\.)tanv\.com$ (^|\.)tanx\.com$ (^|\.)tapjoy\.cn$ (^|\.)th7\.cn$ (^|\.)thoughtleadr\.com$ (^|\.)tianmidian\.com$ (^|\.)tiqcdn\.com$ (^|\.)touclick\.com$ (^|\.)trafficjam\.cn$ (^|\.)trafficmp\.com$ (^|\.)tuia\.cn$ (^|\.)ueadlian\.com$ (^|\.)uerzyr\.cn$ (^|\.)ugdtimg\.com$ (^|\.)ugvip\.com$ (^|\.)ujian\.cc$ (^|\.)ukeiae\.com$ (^|\.)umeng\.co$ (^|\.)umeng\.com$ (^|\.)umtrack\.com$ (^|\.)unimhk\.com$ (^|\.)union-wifi\.com$ (^|\.)union001\.com$ (^|\.)unionsy\.com$ (^|\.)unlitui\.com$ (^|\.)uri6\.com$ (^|\.)ushaqi\.com$ (^|\.)usingde\.com$ (^|\.)uuzu\.com$ (^|\.)uyunad\.com$ (^|\.)vamaker\.com$ (^|\.)voiceads\.cn$ (^|\.)voiceads\.com$ (^|\.)vpon\.com$ (^|\.)vungle\.cn$ (^|\.)vungle\.com$ (^|\.)waps\.cn$ (^|\.)wapx\.cn$ (^|\.)webterren\.com$ (^|\.)whpxy\.com$ (^|\.)winads\.cn$ (^|\.)winasdaq\.com$ (^|\.)wiyun\.com$ (^|\.)wooboo\.com\.cn$ (^|\.)wqmobile\.com$ (^|\.)wrating\.com$ (^|\.)wumii\.cn$ (^|\.)xcy8\.com$ (^|\.)xdrig\.com$ (^|\.)xiaozhen\.com$ (^|\.)xibao100\.com$ (^|\.)xtgreat\.com$ (^|\.)xy\.com$ (^|\.)yandui\.com$ (^|\.)yigao\.com$ (^|\.)yijifen\.com$ (^|\.)yinooo\.com$ (^|\.)yiqifa\.com$ (^|\.)yiwk\.com$ (^|\.)ylunion\.com$ (^|\.)ymapp\.com$ (^|\.)ymcdn\.cn$ (^|\.)yongyuelm\.com$ (^|\.)yooli\.com$ (^|\.)youmi\.net$ (^|\.)youxiaoad\.com$ (^|\.)yoyi\.com\.cn$ (^|\.)yoyi\.tv$ (^|\.)yrxmr\.com$ (^|\.)ysjwj\.com$ (^|\.)yunjiasu\.com$ (^|\.)yunpifu\.cn$ (^|\.)zampdsp\.com$ (^|\.)zamplus\.com$ (^|\.)zcdsp\.com$ (^|\.)zhidian3g\.cn$ (^|\.)zhiziyun\.com$ (^|\.)zhjfad\.com$ (^|\.)zqzxz\.com$ (^|\.)zzsx8\.com$ # 广告联盟-国外**************** (^|\.)acuityplatform\.com$ (^|\.)ad-stir\.com$ (^|\.)ad-survey\.com$ (^|\.)ad4game\.com$ (^|\.)adcloud\.jp$ (^|\.)adcolony\.com$ (^|\.)addthis\.com$ (^|\.)adfurikun\.jp$ (^|\.)adhigh\.net$ (^|\.)adhood\.com$ (^|\.)adinall\.com$ (^|\.)adition\.com$ (^|\.)adk2x\.com$ (^|\.)admarket\.mobi$ (^|\.)admarvel\.com$ (^|\.)admedia\.com$ (^|\.)adnxs\.com$ (^|\.)adotmob\.com$ (^|\.)adperium\.com$ (^|\.)adriver\.ru$ (^|\.)adroll\.com$ (^|\.)adsco\.re$ (^|\.)adservice\.com$ (^|\.)adsrvr\.org$ (^|\.)adsymptotic\.com$ (^|\.)adtaily\.com$ (^|\.)adtech\.de$ (^|\.)adtechjp\.com$ (^|\.)adtechus\.com$ (^|\.)airpush\.com$ (^|\.)am15\.net$ (^|\.)amobee\.com$ (^|\.)appier\.net$ (^|\.)applift\.com$ (^|\.)apsalar\.com$ (^|\.)atas\.io$ (^|\.)awempire\.com$ (^|\.)axonix\.com$ (^|\.)beintoo\.com$ (^|\.)bepolite\.eu$ (^|\.)bidtheatre\.com$ (^|\.)bidvertiser\.com$ (^|\.)blismedia\.com$ (^|\.)brucelead\.com$ (^|\.)bttrack\.com$ (^|\.)casalemedia\.com$ (^|\.)channeladvisor\.com$ (^|\.)connexity\.net$ (^|\.)criteo\.com$ (^|\.)criteo\.net$ (^|\.)csbew\.com$ (^|\.)demdex\.net$ (^|\.)directrev\.com$ (^|\.)dumedia\.ru$ (^|\.)effectivemeasure\.com$ (^|\.)effectivemeasure\.net$ (^|\.)eqads\.com$ (^|\.)everesttech\.net$ (^|\.)exoclick\.com$ (^|\.)extend\.tv$ (^|\.)eyereturn\.com$ (^|\.)fastapi\.net$ (^|\.)fastclick\.com$ (^|\.)fastclick\.net$ (^|\.)flurry\.com$ (^|\.)gosquared\.com$ (^|\.)gtags\.net$ (^|\.)heyzap\.com$ (^|\.)histats\.com$ (^|\.)hitslink\.com$ (^|\.)hot-mob\.com$ (^|\.)hyperpromote\.com$ (^|\.)i-mobile\.co\.jp$ (^|\.)imrworldwide\.com$ (^|\.)inmobi\.com$ (^|\.)intentiq\.com$ (^|\.)inter1ads\.com$ (^|\.)ipredictive\.com$ (^|\.)ironsrc\.com$ (^|\.)iskyworker\.com$ (^|\.)jizzads\.com$ (^|\.)juicyads\.com$ (^|\.)kochava\.com$ (^|\.)leadbolt\.com$ (^|\.)leadbolt\.net$ (^|\.)leadboltads\.net$ (^|\.)leadboltapps\.net$ (^|\.)leadboltmobile\.net$ (^|\.)lenzmx\.com$ (^|\.)liveadvert\.com$ (^|\.)marketgid\.com$ (^|\.)marketo\.com$ (^|\.)mdotm\.com$ (^|\.)medialytics\.com$ (^|\.)medialytics\.io$ (^|\.)meetrics\.com$ (^|\.)meetrics\.net$ (^|\.)mgid\.com$ (^|\.)millennialmedia\.com$ (^|\.)mobadme\.jp$ (^|\.)mobfox\.com$ (^|\.)mobileadtrading\.com$ (^|\.)mobilityware\.com$ (^|\.)mookie1\.com$ (^|\.)msads\.net$ (^|\.)mydas\.mobi$ (^|\.)nend\.net$ (^|\.)netshelter\.net$ (^|\.)nexage\.com$ (^|\.)owneriq\.net$ (^|\.)pixels\.asia$ (^|\.)plista\.com$ (^|\.)popads\.net$ (^|\.)powerlinks\.com$ (^|\.)propellerads\.com$ (^|\.)quantserve\.com$ (^|\.)rayjump\.com$ (^|\.)revdepo\.com$ (^|\.)rubiconproject\.com$ (^|\.)sape\.ru$ (^|\.)scorecardresearch\.com$ (^|\.)segment\.com$ (^|\.)serving-sys\.com$ (^|\.)sharethis\.com$ (^|\.)smaato\.com$ (^|\.)smaato\.net$ (^|\.)smartadserver\.com$ (^|\.)smartnews-ads\.com$ (^|\.)startapp\.com$ (^|\.)startappexchange\.com$ (^|\.)statcounter\.com$ (^|\.)steelhousemedia\.com$ (^|\.)stickyadstv\.com$ (^|\.)supersonic\.com$ (^|\.)tapjoy\.com$ (^|\.)tapjoyads\.com$ (^|\.)trafficjunky\.com$ (^|\.)tribalfusion\.com$ (^|\.)turn\.com$ (^|\.)vidoomy\.com$ (^|\.)viglink\.com$ (^|\.)voicefive\.com$ (^|\.)wedolook\.com$ (^|\.)yadro\.ru$ (^|\.)yengo\.com$ (^|\.)zedo\.com$ (^|\.)zemanta\.com$ # 垃圾网站 (^|\.)11h5\.com$ (^|\.)1kxun\.mobi$ (^|\.)519397\.com$ (^|\.)626uc\.com$ (^|\.)915\.com$ (^|\.)appget\.cn$ (^|\.)appuu\.cn$ (^|\.)coinhive\.com$ (^|\.)huodonghezi\.cn$ (^|\.)wanfeng1\.com$ (^|\.)wep016\.top (^|\.)win-stock\.com\.cn$ (^|\.)zantainet\.com$ ### 运营商广告 (^|\.)\w\w(\w|)dnserror\d(\d|)\.wo\.com\.cn (^|\.)114so\.cn$ (^|\.)go\.10086\.cn$ (^|\.)navi\.gd\.chinamobile\.com$ (^|\.)hivedata\.cc$ # 运营商广告IP段 1.3.0.10/32 10.72.25.0/24 23.42.186.24/32 23.66.147.48/32 23.235.156.167/32 27.255.67.120/32 42.51.146.207/32 45.34.240.72/32 46.165.197.153/32 46.165.197.231/32 47.89.59.182/32 47.90.50.177/32 47.93.103.196/32 47.94.89.32/32 47.96.162.122/32 58.215.179.159/32 60.19.29.16/28 60.19.29.21/28 60.190.139.164/32 60.191.124.196/32 60.210.17.0/24 60.210.17.12/24 61.129.70.132/32 61.132.216.232/32 61.132.221.146/32 61.132.255.128/25 61.132.255.212/32 61.132.255.222/25 61.147.184.18/32 61.152.223.15/32 61.160.200.223/32 61.160.200.242/32 61.160.200.252/32 61.174.50.128/25 61.174.50.167/25 61.191.12.74/32 61.191.206.4/32 67.229.224.28/32 69.28.57.245/32 74.117.182.77/32 78.140.131.214/32 101.201.29.182/32 101.251.211.235/32 103.249.254.113/32 104.195.62.12/32 104.197.140.120/32 104.198.198.188/32 106.75.65.90/32 106.75.65.92/32 106.187.95.251/32 107.21.113.76/32 108.171.248.234/32 111.30.135.167/32 111.63.135.0/24 111.73.45.147/32 111.175.220.160/29 111.175.220.164/32 111.206.13.0/24 111.206.22.0/24 112.74.95.46/32 112.124.115.215/32 113.57.230.88/32 113.207.57.24/32 114.55.123.44/32 114.95.102.77/32 114.247.28.96/32 115.29.141.121/32 115.29.247.48/32 115.182.16.79/32 116.55.227.242/32 116.206.22.7/32 117.25.133.209/32 117.144.242.32/32 118.144.88.126/32 118.144.88.208/28 118.144.88.215/28 118.144.88.215/32 119.4.249.166/32 119.188.13.0/24 120.26.151.246/32 120.27.34.156/32 120.55.199.139/32 120.76.189.132/32 120.80.57.123/32 120.132.57.41/32 120.132.63.203/32 120.197.89.239/32 120.198.116.0/24 121.15.207.243/32 121.43.75.169/32 121.199.73.185/32 121.201.11.95/32 121.201.108.2/32 121.251.255.0/24 122.225.103.120/32 122.226.223.163/32 122.227.254.195/32 122.228.236.165/32 123.56.152.96/32 123.57.94.184/32 123.57.162.39/32 123.59.78.229/32 123.59.152.170/32 123.125.111.0/24 123.139.154.0/24 123.139.154.201/24 124.14.21.147/32 124.14.21.151/32 124.160.194.11/32 124.232.160.178/32 125.46.61.28/32 125.89.69.5/32 139.159.32.82/32 139.196.239.52/32 139.224.26.92/32 139.224.74.148/32 146.148.85.61/32 162.212.181.32/32 173.208.177.227/32 175.6.223.15/32 180.76.155.58/32 180.76.162.60/32 180.76.171.28/32 180.76.172.149/32 180.76.181.213/32 180.166.52.24/32 182.92.81.104/32 183.6.188.224/29 183.6.188.226/29 183.59.53.184/29 183.59.53.187/29 183.59.53.237/32 183.131.79.30/32 183.131.79.130/32 198.40.52.11/32 202.104.1.27/32 202.105.165.202/32 205.209.138.102/32 211.98.71.192/29 211.98.71.195/29 211.103.159.32/32 211.137.132.89/32 211.139.178.49/32 211.149.225.23/32 211.167.105.131/32 218.25.246.118/32 218.93.127.37/32 219.234.83.60/32 220.115.251.25/32 220.196.52.141/32 221.179.46.128/25 221.179.46.190/25 221.179.140.0/24 221.179.183.0/24 221.179.191.0/24 221.204.213.222/32 221.228.17.152/32 221.228.214.101/32 221.231.6.79/32 222.73.156.235/32 222.186.61.91/32 222.186.61.95/32 222.186.61.96/32 222.186.61.97/32 222.187.226.96/32 223.6.255.99/32 #********************************************************************** [bypass_list] # 本地/局域网地址 ^(.*\.)?local$ ^(.*\.)?localhost$ ^(.*\.)?ip6-localhost$ ^(.*\.)?ip6-loopback$ # Google China (^|\.)265\.com$ (^|\.)2mdn\.net$ (^|\.)alt[0-8]-mtalk\.google\.com$ (^|\.)app-measurement\.com$ (^|\.)beacons\.gcp\.gvt2\.com$ (^|\.)beacons\.gvt2\.com$ (^|\.)beacons3\.gvt2\.com$ (^|\.)c\.android\.clients\.google\.com$ (^|\.)cache\.pack\.google\.com$ (^|\.)checkin\.gstatic\.com$ (^|\.)clickserve\.dartsearch\.net$ (^|\.)clientservices\.googleapis\.com$ (^|\.)connectivitycheck\.gstatic\.com$ (^|\.)crl\.pki\.goog$ (^|\.)dl\.google\.com$ (^|\.)dl\.l\.google\.com$ (^|\.)fonts\.googleapis\.com$ (^|\.)fonts\.gstatic\.com$ (^|\.)googletagmanager\.com$ (^|\.)googletagservices\.com$ (^|\.)gtm\.oasisfeng\.com$ (^|\.)imasdk\.googleapis\.com$ (^|\.)kh\.google\.com$ (^|\.)khm\.google\.com$ (^|\.)khm\.googleapis\.com$ (^|\.)khm0\.google\.com$ (^|\.)khm0\.googleapis\.com$ (^|\.)khm1\.google\.com$ (^|\.)khm1\.googleapis\.com$ (^|\.)khm2\.google\.com$ (^|\.)khm2\.googleapis\.com$ (^|\.)khm3\.google\.com$ (^|\.)khm3\.googleapis\.com$ (^|\.)khmdb\.google\.com$ (^|\.)khmdb\.googleapis\.com$ (^|\.)mtalk\.google\.com$ (^|\.)ocsp\.pki\.goog$ (^|\.)recaptcha\.net$ (^|\.)redirector\.gvt1\.com$ (^|\.)safebrowsing-cache\.google\.com$ (^|\.)safebrowsing\.googleapis\.com$ (^|\.)settings\.crashlytics\.com$ (^|\.)ssl-google-analytics\.l\.google\.com$ (^|\.)ssl\.gstatic\.com$ (^|\.)toolbarqueries\.google\.com$ (^|\.)tools\.google\.com$ (^|\.)tools\.l\.google\.com$ (^|\.)update\.googleapis\.com$ (^|\.)www-googletagmanager\.l\.google\.com$ (^|\.)www\.gstatic\.com$ # Router managed 路由器管理域名 (^|\.)hiwifi\.com$ (^|\.)leike\.cc$ (^|\.)miwifi\.com$ (^|\.)my\.router$ (^|\.)p\.to$ (^|\.)peiluyou\.com$ (^|\.)phicomm\.me$ (^|\.)routerlogin\.com$ (^|\.)tendawifi\.com$ (^|\.)zte\.home$ (^|\.)router\.asus\.com$ ::ffff:0:0:0:0/1 ::ffff:128:0:0:0/1 10.0.0.0/8 100.64.0.0/10 127.0.0.0/8 172.16.0.0/12 192.168.0.0/16 #********************************************************************** [proxy_list] # MyList (^|\.)bit\.no\.com$ (^|\.)btlibrary\.me$ (^|\.)cccat\.io$ (^|\.)cloudcone\.com$ (^|\.)gameloft\.com$ (^|\.)inoreader\.com$ (^|\.)ip138\.com$ (^|\.)ping\.pe$ (^|\.)reddit\.com$ (^|\.)teddysun\.com$ (^|\.)textnow\.com$ (^|\.)tumbex\.com$ (^|\.)twdvd\.com$ (^|\.)unsplash\.com$ (^|\.)xn--i2ru8q2qg\.com$ (^|\.)yunpanjingling\.com$ (^|\.)ec2-54-210-142-85\.computer-1\.amazonaws\.com$ (^|\.)ec2-54-174-24-124\.computer-1\.amazonaws\.com$ (^|\.)ec2-54-174-178-70\.computer-1\.amazonaws\.com$ (^|\.)ec2-54-175-2-194\.computer-1\.amazonaws\.com$ (^|\.)ec2-54-210-54-246\.computer-1\.amazonaws\.com$ # 国外域名 ^.*\.hk$ ^.*\.jp$ ^.*\.kr$ ^.*\.sg$ ^.*\.tw$ ^.*\.uk$ ^.*\.us$ # 国外域名关键字 (^|\.)\w*1e100\w*\.\w*$ (^|\.)\w*abema\w*\.\w*$ (^|\.)\w*appledaily\w*\.\w*$ (^|\.)\w*avtb\w*\.\w*$ (^|\.)\w*beetalk\w*\.\w*$ (^|\.)\w*blogspot\w*\.\w*$ (^|\.)\w*dropbox\w*\.\w*$ (^|\.)\w*facebook\w*\.\w*$ (^|\.)\w*fbcdn\w*\.\w*$ (^|\.)\w*github\w*\.\w*$ (^|\.)\w*gmail\w*\.\w*$ (^|\.)\w*google\w*\.\w*$ (^|\.)\w*instagram\w*\.\w*$ (^|\.)\w*porn\w*\.\w*$ (^|\.)\w*sci-hub\w*\.\w*$ (^|\.)\w*spotify\w*\.\w*$ (^|\.)\w*telegram\w*\.\w*$ (^|\.)\w*twitter\w*\.\w*$ (^|\.)\w*whatsapp\w*\.\w*$ (^|\.)\w*youtube\w*\.\w*$ # Google DNS 8.8.8.8 8.8.4.4 #GFWList IP start 14.102.250.18 14.102.250.19 38.103.165.50 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 174.142.105.153 199.59.148.20 #GFWList IP end 1.238.223.154 14.8.71.128 14.198.143.94 36.225.167.32 36.234.188.130 39.119.179.177 42.98.107.223 42.98.107.223 45.32.39.1 45.76.49.238 46.166.148.135 59.126.95.195 61.230.0.128 83.149.70.38 94.100.18.172 94.100.22.212 95.211.214.34 112.119.29.49 112.119.90.171 112.168.224.141 114.199.145.219 114.199.145.219 116.48.111.236 116.48.111.236 118.34.169.15 119.77.178.211 124.168.108.15 140.112.53.243 168.70.106.171 203.222.24.93 218.161.37.206 220.132.16.173 #GFWList (^|\.)030buy\.com$ (^|\.)0rz\.tw$ (^|\.)1000giri\.net$ (^|\.)100ke\.org$ (^|\.)10conditionsoflove\.com$ (^|\.)10musume\.com$ (^|\.)10\.tt$ (^|\.)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$ (^|\.)1-apple\.com\.tw$ (^|\.)1bao\.org$ (^|\.)1dumb\.com$ (^|\.)1e100\.net$ (^|\.)1eew\.com$ (^|\.)1mobile\.com$ (^|\.)1mobile\.tw$ (^|\.)1pondo\.tv$ (^|\.)2000fun\.com$ (^|\.)2008xianzhang\.info$ (^|\.)2017\.hk$ (^|\.)21andy\.com$ (^|\.)21join\.com$ (^|\.)21pron\.com$ (^|\.)21sextury\.com$ (^|\.)228\.net\.tw$ (^|\.)233abc\.com$ (^|\.)24hrs\.ca$ (^|\.)24smile\.org$ (^|\.)25u\.com$ (^|\.)2-hand\.info$ (^|\.)2lipstube\.com$ (^|\.)2shared\.com$ (^|\.)2waky\.com$ (^|\.)30boxes\.com$ (^|\.)315lz\.com$ (^|\.)32red\.com$ (^|\.)36rain\.com$ (^|\.)3a5a\.com$ (^|\.)3-a\.net$ (^|\.)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$ (^|\.)4sqi\.net$ (^|\.)51\.ca$ (^|\.)51jav\.org$ (^|\.)51luoben\.com$ (^|\.)5278\.cc$ (^|\.)5299\.tv$ (^|\.)56cun04\.jigsy\.com$ (^|\.)5aimiku\.com$ (^|\.)5i01\.com$ (^|\.)5isotoi5\.org$ (^|\.)5maodang\.com$ (^|\.)63i\.com$ (^|\.)64museum\.org$ (^|\.)64tianwang\.com$ (^|\.)64wiki\.com$ (^|\.)666kb\.com$ (^|\.)66\.ca$ (^|\.)6park\.com$ (^|\.)6parker\.com$ (^|\.)6parknews\.com$ (^|\.)7capture\.com$ (^|\.)7cow\.com$ (^|\.)85cc\.net$ (^|\.)85cc\.us$ (^|\.)85st\.com$ (^|\.)881903\.com$ (^|\.)888\.com$ (^|\.)888poker\.com$ (^|\.)89\.64\.charter\.constitutionalism\.solutions$ (^|\.)89-64\.org$ (^|\.)8-d\.com$ (^|\.)8news\.com\.tw$ (^|\.)8z1\.net$ (^|\.)9001700\.com$ (^|\.)908taiwan\.org$ (^|\.)91porn\.com$ (^|\.)91vps\.club$ (^|\.)92ccav\.com$ (^|\.)991\.com$ (^|\.)99btgc01\.com$ (^|\.)99cn\.info$ (^|\.)9bis\.com$ (^|\.)9bis\.net$ (^|\.)9gag\.com$ (^|\.)a248\.e\.akamai\.net$ (^|\.)a5\.com\.ru$ (^|\.)aamacau\.com$ (^|\.)abc\.com$ (^|\.)abchinese\.com$ (^|\.)abclite\.net$ (^|\.)abc\.net\.au$ (^|\.)abc\.pp\.ru$ (^|\.)abc\.xyz$ (^|\.)abebooks\.com$ (^|\.)abematv\.akamaized\.net$ (^|\.)abitno\.linpie\.com$ (^|\.)ablwang\.com$ (^|\.)aboluowang\.com$ (^|\.)aboutgfw\.com$ (^|\.)about\.google$ (^|\.)abs\.edu$ (^|\.)accim\.org$ (^|\.)aceros-de-hispania\.com$ (^|\.)acevpn\.com$ (^|\.)acg18\.me$ (^|\.)acgkj\.com$ (^|\.)ac\.jiruan\.net$ (^|\.)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$ (^|\.)adsense\.com$ (^|\.)ads-twitter\.com$ (^|\.)adult\.friendfinder\.com$ (^|\.)adultfriendfinder\.com$ (^|\.)adultkeep\.net$ (^|\.)adult-sex-games\.com$ (^|\.)advanscene\.com$ (^|\.)advertfan\.com$ (^|\.)ae\.hao123\.com$ (^|\.)aenhancers\.com$ (^|\.)ae\.org$ (^|\.)aex\.com$ (^|\.)afantibbs\.com$ (^|\.)af\.mil$ (^|\.)agnesb\.fr$ (^|\.)agoogleaday\.com$ (^|\.)agro\.hk$ (^|\.)ai\.binwang\.me$ (^|\.)ai\.google$ (^|\.)ai-kan\.net$ (^|\.)aiph\.net$ (^|\.)airasia\.com$ (^|\.)airconsole\.com$ (^|\.)airvpn\.org$ (^|\.)aisex\.com$ (^|\.)aiss\.anws\.gov\.tw$ (^|\.)ait\.org\.tw$ (^|\.)aiweiweiblog\.com$ (^|\.)aiweiwei\.com$ (^|\.)ai-wen\.net$ (^|\.)akademiye\.org$ (^|\.)akamaihd\.net$ (^|\.)akiba-online\.com$ (^|\.)akiba-web\.com$ (^|\.)akow\.org$ (^|\.)alabout\.com$ (^|\.)alanhou\.com$ (^|\.)alarab\.qa$ (^|\.)alasbarricadas\.org$ (^|\.)alexlur\.org$ (^|\.)alforattv\.net$ (^|\.)alhayat\.com$ (^|\.)alicejapan\.co\.jp$ (^|\.)aliengu\.com$ (^|\.)al-islam\.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$ (^|\.)al-qimmah\.net$ (^|\.)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\.com$ (^|\.)androidify\.com$ (^|\.)androidplus\.co$ (^|\.)androidtv\.com$ (^|\.)android-x86\.org$ (^|\.)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$ (^|\.)a-normal-day\.com$ (^|\.)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\.ai$ (^|\.)apiary\.io$ (^|\.)apidocs\.linksalpha\.com$ (^|\.)api\.dropboxapi\.com$ (^|\.)apigee\.com$ (^|\.)api\.linksalpha\.com$ (^|\.)api\.proxlet\.com$ (^|\.)api\.pureapk\.com$ (^|\.)api\.recaptcha\.net$ (^|\.)api-secure\.recaptcha\.net$ (^|\.)api-verify\.recaptcha\.net$ (^|\.)apk-dl\.com$ (^|\.)apkdler\.com$ (^|\.)apkmirror\.com$ (^|\.)apkmonk\.com$ (^|\.)apkplz\.com$ (^|\.)apkpure\.com$ (^|\.)aplusvpn\.com$ (^|\.)app\.box\.com$ (^|\.)appdownloader\.net$ (^|\.)app\.heywire\.com$ (^|\.)appledaily\.com$ (^|\.)appledaily\.com\.hk$ (^|\.)appledaily\.com\.tw$ (^|\.)appshopper\.com$ (^|\.)app\.smartmailcloud\.com$ (^|\.)appsocks\.net$ (^|\.)appspot\.com$ (^|\.)appsto\.re$ (^|\.)app\.tutanota\.com$ (^|\.)aptoide\.com$ (^|\.)archive\.fo$ (^|\.)archive\.is$ (^|\.)archive\.li$ (^|\.)archive\.org$ (^|\.)archives\.gov$ (^|\.)archives\.gov\.tw$ (^|\.)archive\.today$ (^|\.)arctosia\.com$ (^|\.)areca-backup\.org$ (^|\.)arena\.taipei$ (^|\.)arethusa\.su$ (^|\.)ar\.hao123\.com$ (^|\.)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$ (^|\.)atchinese\.com$ (^|\.)atc\.org\.au$ (^|\.)atdmt\.com$ (^|\.)atgfw\.org$ (^|\.)athenaeizou\.com$ (^|\.)atlanta168\.com$ (^|\.)atlaspost\.com$ (^|\.)atnext\.com$ (^|\.)authorizeddns\.net$ (^|\.)authorizeddns\.org$ (^|\.)authorizeddns\.us$ (^|\.)autodraw\.com$ (^|\.)avaaz\.org$ (^|\.)avbody\.tv$ (^|\.)avcity\.tv$ (^|\.)av\.com$ (^|\.)avcool\.com$ (^|\.)avdb\.in$ (^|\.)avdb\.tv$ (^|\.)av-e-body\.com$ (^|\.)avfantasy\.com$ (^|\.)avg\.com$ (^|\.)avgle\.com$ (^|\.)avidemux\.org$ (^|\.)avmoo\.com$ (^|\.)avmoo\.net$ (^|\.)avmoo\.pw$ (^|\.)avmo\.pw$ (^|\.)av\.movie$ (^|\.)av\.nightlife141\.com$ (^|\.)avoision\.com$ (^|\.)avyahoo\.com$ (^|\.)axureformac\.com$ (^|\.)azerbaycan\.tv$ (^|\.)azerimix\.com$ (^|\.)azubu\.tv$ (^|\.)azurewebsites\.net$ (^|\.)b0ne\.com$ (^|\.)babynet\.com\.hk$ (^|\.)backchina\.com$ (^|\.)backpackers\.com\.tw$ (^|\.)backtotiananmen\.com$ (^|\.)badiucao\.com$ (^|\.)badjojo\.com$ (^|\.)badoo\.com$ (^|\.)bahamut\.com\.tw$ (^|\.)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$ (^|\.)bbcchinese\.com$ (^|\.)bbc\.com$ (^|\.)bbc\.co\.uk$ (^|\.)bb-chat\.tv$ (^|\.)bbchat\.tv$ (^|\.)bbci\.co\.uk$ (^|\.)bbc\.in$ (^|\.)bbg\.gov$ (^|\.)bbkz\.com$ (^|\.)bbnradio\.org$ (^|\.)bbs\.brockbbs\.com$ (^|\.)bbs\.cantonese\.asia$ (^|\.)bbsdigest\.com$ (^|\.)bbs\.ecstart\.com$ (^|\.)bbsfeed\.com$ (^|\.)bbs\.hanminzu\.org$ (^|\.)bbs\.hasi\.wang$ (^|\.)bbs\.huasing\.org$ (^|\.)bbs\.junglobal\.net$ (^|\.)bbs\.kimy\.com\.tw$ (^|\.)bbsland\.com$ (^|\.)bbs\.mikocon\.com$ (^|\.)bbsmo\.com$ (^|\.)bbs\.morbell\.com$ (^|\.)bbs\.mychat\.to$ (^|\.)bbs\.netbig\.com$ (^|\.)bbsone\.com$ (^|\.)bbs\.ozchinese\.com$ (^|\.)bbs\.qmzdd\.com$ (^|\.)bbs\.sina\.com$ (^|\.)bbs\.skykiwi\.com$ (^|\.)bbs\.sou-tong\.org$ (^|\.)bbs\.tuitui\.info$ (^|\.)bbs-tw\.com$ (^|\.)bbtoystore\.com$ (^|\.)bb\.ttv\.com\.tw$ (^|\.)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$ (^|\.)bestvpnanalysis\.com$ (^|\.)bestvpn\.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$ (^|\.)bigfools\.com$ (^|\.)bigjapanesesex\.com$ (^|\.)bigmoney\.biz$ (^|\.)bignews\.org$ (^|\.)big\.one$ (^|\.)bigsound\.org$ (^|\.)biliworld\.com$ (^|\.)billypan\.com$ (^|\.)binance\.com$ (^|\.)binux\.me$ (^|\.)bipic\.net$ (^|\.)bird\.so$ (^|\.)bitc\.bme\.emory\.edu$ (^|\.)bitcointalk\.org$ (^|\.)bitcoinworld\.com$ (^|\.)bit\.do$ (^|\.)bitfinex\.com$ (^|\.)bithumb\.com$ (^|\.)bitinka\.com\.ar$ (^|\.)bit\.ly$ (^|\.)bitmex\.com$ (^|\.)bitshare\.com$ (^|\.)bitsnoop\.com$ (^|\.)bitvise\.com$ (^|\.)bit-z\.com$ (^|\.)bizhat\.com$ (^|\.)bjnewlife\.org$ (^|\.)bjs\.org$ (^|\.)bjzc\.org$ (^|\.)blacklogic\.com$ (^|\.)blackvpn\.com$ (^|\.)bl-doujinsouko\.com$ (^|\.)blewpass\.com$ (^|\.)blinkx\.com$ (^|\.)blinw\.com$ (^|\.)blip\.tv$ (^|\.)blockcn\.com$ (^|\.)blockless\.com$ (^|\.)blogblog\.com$ (^|\.)blog\.calibre-ebook\.com$ (^|\.)blogcatalog\.com$ (^|\.)blogcity\.me$ (^|\.)blog\.cnyes\.com$ (^|\.)blog\.daum\.net$ (^|\.)blog\.de$ (^|\.)blogdns\.org$ (^|\.)blog\.exblog\.co\.jp$ (^|\.)blog\.excite\.co\.jp$ (^|\.)blog\.expofutures\.com$ (^|\.)blog\.fizzik\.com$ (^|\.)blog\.foolsmountain\.com$ (^|\.)blog\.fuckgfw233\.org$ (^|\.)blogger\.com$ (^|\.)blog\.google$ (^|\.)blog\.goo\.ne\.jp$ (^|\.)blogimg\.jp$ (^|\.)blog\.inoreader\.com$ (^|\.)blog\.istef\.info$ (^|\.)blog\.jackjia\.com$ (^|\.)blog\.jp$ (^|\.)blog\.kangye\.org$ (^|\.)blog\.lester850\.info$ (^|\.)bloglines\.com$ (^|\.)bloglovin\.com$ (^|\.)blog\.martinoei\.com$ (^|\.)blog\.pathtosharepoint\.com$ (^|\.)blog\.pentalogic\.net$ (^|\.)blog\.qooza\.hk$ (^|\.)blog\.ranxiang\.com$ (^|\.)blogs\.icerocket\.com$ (^|\.)blog\.sina\.com\.tw$ (^|\.)blogs\.libraryinformationtechnology\.com$ (^|\.)blog\.sogoo\.org$ (^|\.)blog\.soylent\.com$ (^|\.)blogspot\.ae$ (^|\.)blogspot\.al$ (^|\.)blogspot\.am$ (^|\.)blogspot\.ba$ (^|\.)blogspot\.be$ (^|\.)blogspot\.bg$ (^|\.)blogspot\.ca$ (^|\.)blogspot\.cat$ (^|\.)blogspot\.ch$ (^|\.)blogspot\.cl$ (^|\.)blogspot\.com$ (^|\.)blogspot\.com\.ar$ (^|\.)blogspot\.com\.au$ (^|\.)blogspot\.com\.br$ (^|\.)blogspot\.com\.by$ (^|\.)blogspot\.com\.co$ (^|\.)blogspot\.com\.cy$ (^|\.)blogspot\.com\.ee$ (^|\.)blogspot\.com\.eg$ (^|\.)blogspot\.com\.es$ (^|\.)blogspot\.com\.mt$ (^|\.)blogspot\.com\.ng$ (^|\.)blogspot\.com\.tr$ (^|\.)blogspot\.com\.uy$ (^|\.)blogspot\.co\.uk$ (^|\.)blogspot\.cz$ (^|\.)blogspot\.de$ (^|\.)blogspot\.dk$ (^|\.)blogspot\.fi$ (^|\.)blogspot\.fr$ (^|\.)blogspot\.gr$ (^|\.)blogspot\.hk$ (^|\.)blogspot\.hr$ (^|\.)blogspot\.hu$ (^|\.)blogspot\.ie$ (^|\.)blogspot\.in$ (^|\.)blogspot\.is$ (^|\.)blogspot\.it$ (^|\.)blogspot\.jp$ (^|\.)blogspot\.kr$ (^|\.)blogspot\.li$ (^|\.)blogspot\.lt$ (^|\.)blogspot\.lu$ (^|\.)blogspot\.md$ (^|\.)blogspot\.mk$ (^|\.)blogspot\.mx$ (^|\.)blogspot\.my$ (^|\.)blogspot\.nl$ (^|\.)blogspot\.no$ (^|\.)blogspot\.pe$ (^|\.)blogspot\.pt$ (^|\.)blogspot\.qa$ (^|\.)blogspot\.ro$ (^|\.)blogspot\.ru$ (^|\.)blogspot\.se$ (^|\.)blogspot\.sg$ (^|\.)blogspot\.si$ (^|\.)blogspot\.sk$ (^|\.)blogspot\.sn$ (^|\.)blogspot\.tw$ (^|\.)blogspot\.ug$ (^|\.)blogs\.tampabay\.com$ (^|\.)blogs\.yahoo\.co\.jp$ (^|\.)blog\.syx86\.cn$ (^|\.)blog\.syx86\.com$ (^|\.)blog\.taragana\.com$ (^|\.)blogtd\.net$ (^|\.)blogtd\.org$ (^|\.)blog\.tiney\.com$ (^|\.)blog\.workflow\.is$ (^|\.)blog\.xuite\.net$ (^|\.)blog\.youthwant\.com\.tw$ (^|\.)blog\.youxu\.info$ (^|\.)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$ (^|\.)bookepub\.com$ (^|\.)books\.com\.tw$ (^|\.)booktopia\.com\.au$ (^|\.)book\.zi5\.me$ (^|\.)boomssr\.com$ (^|\.)botanwang\.com$ (^|\.)bot\.nu$ (^|\.)bowenpress\.com$ (^|\.)boxpn\.com$ (^|\.)boxunblog\.com$ (^|\.)boxunclub\.com$ (^|\.)boxun\.com$ (^|\.)boxun\.tv$ (^|\.)boyangu\.com$ (^|\.)boyfriendtv\.com$ (^|\.)boysfood\.com$ (^|\.)boysmaster\.com$ (^|\.)brainyquote\.com$ (^|\.)brandonhutchinson\.com$ (^|\.)braumeister\.org$ (^|\.)bravotube\.net$ (^|\.)brazzers\.com$ (^|\.)break\.com$ (^|\.)breakgfw\.com$ (^|\.)breaking911\.com$ (^|\.)breakingtweets\.com$ (^|\.)breakwall\.net$ (^|\.)br\.hao123\.com$ (^|\.)briefdream\.com$ (^|\.)briian\.com$ (^|\.)brizzly\.com$ (^|\.)brkmd\.com$ (^|\.)broadbook\.com$ (^|\.)broadpressinc\.com$ (^|\.)br\.st$ (^|\.)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$ (^|\.)bullogger\.com$ (^|\.)bullog\.org$ (^|\.)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$ (^|\.)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$ (^|\.)caobian\.info$ (^|\.)caochangqing\.com$ (^|\.)cao\.im$ (^|\.)cap\.org\.hk$ (^|\.)carabinasypistolas\.com$ (^|\.)cardinalkungfoundation\.org$ (^|\.)carfax\.com$ (^|\.)caribbeancom\.com$ (^|\.)cari\.com\.my$ (^|\.)carmotorshow\.com$ (^|\.)cartoonmovement\.com$ (^|\.)casadeltibetbcn\.org$ (^|\.)casatibet\.org\.mx$ (^|\.)casinobellini\.com$ (^|\.)casinoking\.com$ (^|\.)casinoriva\.com$ (^|\.)casino\.williamhill\.com$ (^|\.)castbox\.fm$ (^|\.)catch22\.net$ (^|\.)catchgod\.com$ (^|\.)catfightpayperview\.xxx$ (^|\.)catholic\.org\.hk$ (^|\.)catholic\.org\.tw$ (^|\.)cathvoice\.org\.tw$ (^|\.)cattt\.com$ (^|\.)cbc\.ca$ (^|\.)cbsnews\.com$ (^|\.)cbs\.ntu\.edu\.tw$ (^|\.)cbtc\.org\.hk$ (^|\.)cccat\.cc$ (^|\.)cccat\.co$ (^|\.)ccdtr\.org$ (^|\.)cchere\.com$ (^|\.)ccim\.org$ (^|\.)cclife\.ca$ (^|\.)cclifefl\.org$ (^|\.)cclife\.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$ (^|\.)cdn1\.lp\.saboom\.com$ (^|\.)cdn-apple\.com$ (^|\.)cdn\.assets\.lfpcontent\.com$ (^|\.)cdnews\.com\.tw$ (^|\.)cdn\.helixstudios\.net$ (^|\.)cdn-images\.mailchimp\.com$ (^|\.)cdninstagram\.com$ (^|\.)cdn\.printfriendly\.com$ (^|\.)cdn\.seatguru\.com$ (^|\.)cdn\.softlayer\.net$ (^|\.)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\.revocationcheck\.com$ (^|\.)certificate-transparency\.org$ (^|\.)c-est-simple\.com$ (^|\.)cfhks\.org\.hk$ (^|\.)cfos\.de$ (^|\.)cftfc\.com$ (^|\.)cgdepot\.org$ (^|\.)cgst\.edu$ (^|\.)changeip\.name$ (^|\.)changeip\.net$ (^|\.)changeip\.org$ (^|\.)change\.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$ (^|\.)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$ (^|\.)china\.hket\.com$ (^|\.)chinahorizon\.org$ (^|\.)chinahush\.com$ (^|\.)chinainperspective\.com$ (^|\.)chinainterimgov\.org$ (^|\.)chinalaborwatch\.org$ (^|\.)chinalawandpolicy\.com$ (^|\.)chinalawtranslate\.com$ (^|\.)china-mmm\.jp\.net$ (^|\.)china-mmm\.net$ (^|\.)china-mmm\.sa\.com$ (^|\.)chinamule\.com$ (^|\.)chinamz\.org$ (^|\.)chinanewscenter\.com$ (^|\.)chinapost\.com\.tw$ (^|\.)chinapress\.com\.my$ (^|\.)china-review\.com\.ua$ (^|\.)chinarightsia\.org$ (^|\.)chinasmile\.net$ (^|\.)chinasocialdemocraticparty\.com$ (^|\.)chinasoul\.org$ (^|\.)chinasucks\.net$ (^|\.)chinatimes\.com$ (^|\.)chinatopsex\.com$ (^|\.)chinatown\.com\.au$ (^|\.)chinatweeps\.com$ (^|\.)china\.ucanews\.com$ (^|\.)chinaview\.wordpress\.com$ (^|\.)chinaway\.org$ (^|\.)china-week\.com$ (^|\.)chinaworker\.info$ (^|\.)chinaxchina\.com$ (^|\.)chinayouth\.org\.hk$ (^|\.)chinayuanmin\.org$ (^|\.)chinesedaily\.com$ (^|\.)chinesedailynews\.com$ (^|\.)chinesedemocracy\.com$ (^|\.)chinese\.donga\.com$ (^|\.)chinese\.engadget\.com$ (^|\.)chinesegay\.org$ (^|\.)chinese-hermit\.net$ (^|\.)chinese\.irib\.ir$ (^|\.)chinese-leaders\.org$ (^|\.)chinese-memorial\.org$ (^|\.)chinesen\.de$ (^|\.)chinesenews\.net\.au$ (^|\.)chinesepen\.org$ (^|\.)chinese\.soifind\.com$ (^|\.)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$ (^|\.)chromecast\.com$ (^|\.)chrome\.com$ (^|\.)chromeexperiments\.com$ (^|\.)chromercise\.com$ (^|\.)chromestatus\.com$ (^|\.)chromium\.org$ (^|\.)ch\.shvoong\.com$ (^|\.)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$ (^|\.)clarionproject\.org$ (^|\.)classicalguitarblog\.net$ (^|\.)clb\.org\.hk$ (^|\.)cl\.d0z\.net$ (^|\.)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$ (^|\.)cn2\.streetvoice\.com$ (^|\.)cn6\.eu$ (^|\.)cnabc\.com$ (^|\.)cna\.com\.tw$ (^|\.)cnbbnews\.wordpress\.com$ (^|\.)cn\.calameo\.com$ (^|\.)cn\.dayabook\.com$ (^|\.)cnd\.org$ (^|\.)cnex\.org\.cn$ (^|\.)cn\.fmnnow\.com$ (^|\.)cn\.freeones\.com$ (^|\.)cn\.giganews\.com$ (^|\.)cn\.ibtimes\.com$ (^|\.)cnineu\.com$ (^|\.)cnn\.com$ (^|\.)cnnews\.chosun\.com$ (^|\.)cn\.nytstyle\.com$ (^|\.)cnpolitics\.org$ (^|\.)cn-proxy\.com$ (^|\.)cnproxy\.com$ (^|\.)cn\.sandscotaicentral\.com$ (^|\.)cn\.shafaqna\.com$ (^|\.)cn\.streetvoice\.com$ (^|\.)cn\.thegay\.com$ (^|\.)cn\.uncyclopedia\.wikia\.com$ (^|\.)cn\.uptodown\.com$ (^|\.)cn\.voa\.mobi$ (^|\.)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$ (^|\.)comefromchina\.com$ (^|\.)com\.google$ (^|\.)comic-mega\.me$ (^|\.)commandarms\.com$ (^|\.)commentshk\.com$ (^|\.)communistcrimes\.org$ (^|\.)communitychoicecu\.com$ (^|\.)community\.windy\.com$ (^|\.)compileheart\.com$ (^|\.)compress\.to$ (^|\.)co\.ng\.mil$ (^|\.)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$ (^|\.)cosmic\.monar\.ch$ (^|\.)cos-moe\.com$ (^|\.)cosplayjav\.pl$ (^|\.)costco\.com$ (^|\.)cotweet\.com$ (^|\.)counter\.social$ (^|\.)coursehero\.com$ (^|\.)cpj\.org$ (^|\.)cq99\.us$ (^|\.)crackle\.com$ (^|\.)crazys\.cc$ (^|\.)crazyshit\.com$ (^|\.)crbug\.com$ (^|\.)crchina\.org$ (^|\.)crd-net\.org$ (^|\.)creaders\.net$ (^|\.)creadersnet\.com$ (^|\.)creativelab5\.com$ (^|\.)crisisresponse\.google$ (^|\.)cristyli\.com$ (^|\.)crocotube\.com$ (^|\.)crossfire\.co\.kr$ (^|\.)crossthewall\.net$ (^|\.)crossvpn\.net$ (^|\.)crrev\.com$ (^|\.)crucial\.com$ (^|\.)csdparty\.com$ (^|\.)c-spanvideo\.org$ (^|\.)css\.pixnet\.in$ (^|\.)csuchen\.de$ (^|\.)csw\.org\.uk$ (^|\.)ctao\.org$ (^|\.)ctfriend\.net$ (^|\.)cthlo\.github\.io$ (^|\.)ctitv\.com\.tw$ (^|\.)ct\.org\.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$ (^|\.)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$ (^|\.)dailyview\.tw$ (^|\.)daiphapinfo\.net$ (^|\.)dajiyuan\.com$ (^|\.)dajiyuan\.de$ (^|\.)dajiyuan\.eu$ (^|\.)dajusha\.baywords\.com$ (^|\.)dalailama80\.org$ (^|\.)dalailama-archives\.org$ (^|\.)dalailamacenter\.org$ (^|\.)dalailama\.com$ (^|\.)dalailamafellows\.org$ (^|\.)dalailamafilm\.com$ (^|\.)dalailamafoundation\.org$ (^|\.)dalailamahindi\.com$ (^|\.)dalailamainaustralia\.org$ (^|\.)dalailamajapanese\.com$ (^|\.)dalailama\.mn$ (^|\.)dalailamaprotesters\.info$ (^|\.)dalailamaquotes\.org$ (^|\.)dalailama\.ru$ (^|\.)dalailamatrust\.org$ (^|\.)dalailama\.usc\.edu$ (^|\.)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\.flurry\.com$ (^|\.)data\.gov\.tw$ (^|\.)data-vocabulary\.org$ (^|\.)daum\.net$ (^|\.)david-kilgour\.com$ (^|\.)dawangidc\.com$ (^|\.)daxa\.cn$ (^|\.)daylife\.com$ (^|\.)dbc\.hk$ (^|\.)db\.tt$ (^|\.)dcard\.tw$ (^|\.)dcmilitary\.com$ (^|\.)ddc\.com\.tw$ (^|\.)ddhw\.info$ (^|\.)ddns\.info$ (^|\.)ddns\.me\.uk$ (^|\.)ddns\.mobi$ (^|\.)ddns\.ms$ (^|\.)ddns\.name$ (^|\.)ddns\.net$ (^|\.)ddns\.us$ (^|\.)deaftone\.com$ (^|\.)debug\.com$ (^|\.)deck\.ly$ (^|\.)decodet\.co$ (^|\.)deepmind\.com$ (^|\.)deezer\.com$ (^|\.)definebabe\.com$ (^|\.)deja\.com$ (^|\.)delcamp\.net$ (^|\.)delicious\.com$ (^|\.)democrats\.org$ (^|\.)demo\.opera-mini\.net$ (^|\.)demosisto\.hk$ (^|\.)depositphotos\.com$ (^|\.)derekhsu\.homeip\.net$ (^|\.)de-sci\.org$ (^|\.)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$ (^|\.)d-fukyu\.com$ (^|\.)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$ (^|\.)discuss4u\.com$ (^|\.)discuss\.com\.hk$ (^|\.)dish\.com$ (^|\.)disp\.cc$ (^|\.)disqus\.com$ (^|\.)dit-inc\.us$ (^|\.)dizhidizhi\.com$ (^|\.)dizhuzhishang\.com$ (^|\.)djangosnippets\.org$ (^|\.)djorz\.com$ (^|\.)dl\.box\.net$ (^|\.)dl-laby\.jp$ (^|\.)dlsite\.com$ (^|\.)dlyoutube\.com$ (^|\.)dm530\.net$ (^|\.)dmcdn\.net$ (^|\.)dmhy\.org$ (^|\.)dmm\.co\.jp$ (^|\.)dns04\.com$ (^|\.)dns05\.com$ (^|\.)dns1\.us$ (^|\.)dns2go\.com$ (^|\.)dns2\.us$ (^|\.)dnscrypt\.org$ (^|\.)dns-dns\.com$ (^|\.)dnset\.com$ (^|\.)dns\.google$ (^|\.)dnsrd\.com$ (^|\.)dnssec\.net$ (^|\.)dns-stuff\.com$ (^|\.)dnvod\.tv$ (^|\.)doctorvoice\.org$ (^|\.)documentingreality\.com$ (^|\.)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$ (^|\.)doubibackup\.com$ (^|\.)doub\.io$ (^|\.)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\.com$ (^|\.)duckduckgo-owned-server\.yahoo\.net$ (^|\.)duckload\.com$ (^|\.)duckmylife\.com$ (^|\.)duga\.jp$ (^|\.)duihuahrjournal\.org$ (^|\.)duihua\.org$ (^|\.)dumb1\.com$ (^|\.)dunyabulteni\.net$ (^|\.)duoweitimes\.com$ (^|\.)duping\.net$ (^|\.)duplicati\.com$ (^|\.)dupola\.com$ (^|\.)dupola\.net$ (^|\.)dushi\.ca$ (^|\.)dvdpac\.com$ (^|\.)dvorak\.org$ (^|\.)dw\.com$ (^|\.)dw\.de$ (^|\.)dwnews\.com$ (^|\.)dwnews\.net$ (^|\.)dw-world\.com$ (^|\.)dw-world\.de$ (^|\.)dynamicdns\.biz$ (^|\.)dynamicdns\.co\.uk$ (^|\.)dynamicdns\.me\.uk$ (^|\.)dynamic-dns\.net$ (^|\.)dynamicdns\.org\.uk$ (^|\.)dynawebinc\.com$ (^|\.)dyndns-ip\.com$ (^|\.)dyndns\.org$ (^|\.)dyndns-pics\.com$ (^|\.)dyndns\.pro$ (^|\.)dynssl\.com$ (^|\.)dynu\.com$ (^|\.)dynu\.net$ (^|\.)dynupdate\.no-ip\.com$ (^|\.)dysfz\.cc$ (^|\.)dzze\.com$ (^|\.)e123\.hk$ (^|\.)earlytibet\.com$ (^|\.)earthcam\.com$ (^|\.)earthvpn\.com$ (^|\.)eastern-ark\.com$ (^|\.)easternlightning\.org$ (^|\.)eastturkestan\.com$ (^|\.)eastturkistancc\.org$ (^|\.)eastturkistangovernmentinexile\.us$ (^|\.)eastturkistan-gov\.org$ (^|\.)easyca\.ca$ (^|\.)easypic\.com$ (^|\.)ebony-beauty\.com$ (^|\.)ebookbrowse\.com$ (^|\.)ebookee\.com$ (^|\.)ebook\.hyread\.com\.tw$ (^|\.)ebtcbank\.com$ (^|\.)ecfa\.org\.tw$ (^|\.)echofon\.com$ (^|\.)ecimg\.tw$ (^|\.)e-classical\.com\.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$ (^|\.)e-gold\.com$ (^|\.)e-hentaidb\.com$ (^|\.)e-hentai\.org$ (^|\.)eic-av\.com$ (^|\.)e-info\.org\.tw$ (^|\.)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$ (^|\.)enanyang\.my$ (^|\.)encyclopedia\.com$ (^|\.)enewstree\.com$ (^|\.)enfal\.de$ (^|\.)en\.favotter\.net$ (^|\.)engagedaily\.org$ (^|\.)englishforeveryone\.org$ (^|\.)englishfromengland\.co\.uk$ (^|\.)englishpen\.org$ (^|\.)en\.hao123\.com$ (^|\.)enlighten\.org\.tw$ (^|\.)entermap\.com$ (^|\.)entnt\.com$ (^|\.)environment\.google$ (^|\.)epac\.to$ (^|\.)epa\.gov\.tw$ (^|\.)episcopalchurch\.org$ (^|\.)epochhk\.com$ (^|\.)epochtimes-bg\.com$ (^|\.)epochtimes\.co\.il$ (^|\.)epochtimes\.co\.kr$ (^|\.)epochtimes\.com$ (^|\.)epochtimes\.cz$ (^|\.)epochtimes\.de$ (^|\.)epochtimes\.fr$ (^|\.)epochtimes\.ie$ (^|\.)epochtimes\.it$ (^|\.)epochtimes\.jp$ (^|\.)epochtimes-romania\.com$ (^|\.)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$ (^|\.)eromangadouzin\.com$ (^|\.)eromanga-kingdom\.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$ (^|\.)e-traderland\.net$ (^|\.)ettoday\.net$ (^|\.)etvonline\.hk$ (^|\.)eucasino\.com$ (^|\.)eulam\.com$ (^|\.)eu\.org$ (^|\.)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$ (^|\.)e-zone\.com\.hk$ (^|\.)ezpc\.tk$ (^|\.)ezpeer\.com$ (^|\.)ezua\.com$ (^|\.)facebook\.br$ (^|\.)facebook\.com$ (^|\.)facebook\.design$ (^|\.)facebook\.hu$ (^|\.)facebook\.in$ (^|\.)facebookmail\.com$ (^|\.)facebook\.nl$ (^|\.)facebookquotes4u\.com$ (^|\.)facebook\.se$ (^|\.)faceless\.me$ (^|\.)facesofnyfw\.com$ (^|\.)facesoftibetanselfimmolators\.info$ (^|\.)fa\.gov\.tw$ (^|\.)fail\.hk$ (^|\.)faith100\.org$ (^|\.)faithfuleye\.com$ (^|\.)faiththedog\.info$ (^|\.)fakku\.net$ (^|\.)falsefire\.com$ (^|\.)falunart\.org$ (^|\.)falunasia\.info$ (^|\.)falunau\.org$ (^|\.)falunaz\.net$ (^|\.)falun\.caltech\.edu$ (^|\.)falun-co\.org$ (^|\.)falundafa-dc\.org$ (^|\.)falundafa-florida\.org$ (^|\.)falundafaindia\.org$ (^|\.)falundafamuseum\.org$ (^|\.)falundafa-nc\.org$ (^|\.)falundafa\.org$ (^|\.)falundafa-pa\.net$ (^|\.)falundafa-sacramento\.org$ (^|\.)falungong\.club$ (^|\.)falungong\.de$ (^|\.)falungong\.org\.uk$ (^|\.)falunhr\.org$ (^|\.)faluninfo\.de$ (^|\.)faluninfo\.net$ (^|\.)falun-ny\.net$ (^|\.)falunpilipinas\.net$ (^|\.)falunworld\.net$ (^|\.)familyfed\.org$ (^|\.)famunion\.com$ (^|\.)fangbinxing\.com$ (^|\.)fangeming\.com$ (^|\.)fangeqiang\.com$ (^|\.)fanglizhi\.info$ (^|\.)fangmincn\.org$ (^|\.)fangong\.forums-free\.com$ (^|\.)fangongheike\.com$ (^|\.)fangong\.org$ (^|\.)fanhaodang\.com$ (^|\.)fan-qiang\.com$ (^|\.)fanqiangdang\.com$ (^|\.)fanqianghou\.com$ (^|\.)fanqiang\.tk$ (^|\.)fanqiangyakexi\.net$ (^|\.)fanqiangzhe\.com$ (^|\.)fanswong\.com$ (^|\.)fanyue\.info$ (^|\.)fapdu\.com$ (^|\.)faproxy\.com$ (^|\.)faqserv\.com$ (^|\.)fartit\.com$ (^|\.)farwestchina\.com$ (^|\.)fastpic\.ru$ (^|\.)fastssh\.com$ (^|\.)faststone\.org$ (^|\.)fast\.wistia\.com$ (^|\.)fatbtc\.com$ (^|\.)favstar\.fm$ (^|\.)fawanghuihui\.org$ (^|\.)faydao\.com$ (^|\.)fbaddins\.com$ (^|\.)fbcdn\.net$ (^|\.)fb\.com$ (^|\.)fb\.me$ (^|\.)fbsbx\.com$ (^|\.)fbworkmail\.com$ (^|\.)fc2blog\.net$ (^|\.)fc2china\.com$ (^|\.)fc2cn\.com$ (^|\.)fc2\.com$ (^|\.)fda\.gov\.tw$ (^|\.)fdc64\.de$ (^|\.)fdc64\.org$ (^|\.)fdc89\.jp$ (^|\.)feedburner\.com$ (^|\.)feeds\.fileforum\.com$ (^|\.)feedx\.net$ (^|\.)feelssh\.com$ (^|\.)feer\.com$ (^|\.)feifeiss\.com$ (^|\.)feitianacademy\.org$ (^|\.)feitian-california\.org$ (^|\.)feministteacher\.com$ (^|\.)fengzhenghu\.com$ (^|\.)fengzhenghu\.net$ (^|\.)fevernet\.com$ (^|\.)fffff\.at$ (^|\.)ff\.im$ (^|\.)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$ (^|\.)forum4hk\.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$ (^|\.)fotile\.me$ (^|\.)fourface\.nodesnoop\.com$ (^|\.)fourthinternational\.org$ (^|\.)foxdie\.us$ (^|\.)foxgay\.com$ (^|\.)foxsub\.com$ (^|\.)foxtang\.com$ (^|\.)fpmtmexico\.org$ (^|\.)fpmt\.org$ (^|\.)fpmt-osel\.org$ (^|\.)fpmt\.tw$ (^|\.)fqok\.org$ (^|\.)fqrouter\.com$ (^|\.)fq\.wikia\.com$ (^|\.)franklc\.com$ (^|\.)freakshare\.com$ (^|\.)free4u\.com\.ar$ (^|\.)freealim\.com$ (^|\.)freebrowser\.org$ (^|\.)freechal\.com$ (^|\.)freechinaforum\.org$ (^|\.)freechina\.net$ (^|\.)freechina\.news$ (^|\.)freechinaweibo\.com$ (^|\.)freeddns\.com$ (^|\.)freeddns\.org$ (^|\.)freedomchina\.info$ (^|\.)freedomcollection\.org$ (^|\.)freedomhouse\.org$ (^|\.)freedominfonetweb\.wordpress\.com$ (^|\.)freedomsherald\.org$ (^|\.)freeforums\.org$ (^|\.)freefq\.com$ (^|\.)free\.fr$ (^|\.)freefuckvids\.com$ (^|\.)freegao\.com$ (^|\.)free-gate\.org$ (^|\.)free-hada-now\.org$ (^|\.)freehongkong\.org$ (^|\.)freeilhamtohti\.org$ (^|\.)freekwonpyong\.org$ (^|\.)freelotto\.com$ (^|\.)freeman2\.com$ (^|\.)freemoren\.com$ (^|\.)freemorenews\.com$ (^|\.)freemuse\.org$ (^|\.)freenet-china\.org$ (^|\.)freenetproject\.org$ (^|\.)freenewscn\.com$ (^|\.)freeopenvpn\.com$ (^|\.)freeoz\.org$ (^|\.)free-proxy\.cz$ (^|\.)free-ssh\.com$ (^|\.)freessh\.us$ (^|\.)free-ss\.site$ (^|\.)freetcp\.com$ (^|\.)freetibetanheroes\.org$ (^|\.)freetibet\.net$ (^|\.)freetibet\.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\.com$ (^|\.)friendfeed-media\.com$ (^|\.)friends-of-tibet\.org$ (^|\.)friendsoftibet\.org$ (^|\.)fring\.com$ (^|\.)fringenetwork\.com$ (^|\.)fromchinatousa\.net$ (^|\.)frommel\.net$ (^|\.)from-pr\.com$ (^|\.)from-sd\.com$ (^|\.)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$ (^|\.)fuyindiantai\.org$ (^|\.)fuyin\.net$ (^|\.)fuyu\.org\.tw$ (^|\.)fw\.cm$ (^|\.)fxcm-chinese\.com$ (^|\.)fxnetworks\.com$ (^|\.)fzh999\.com$ (^|\.)fzh999\.net$ (^|\.)fzlm\.com$ (^|\.)g0v\.social$ (^|\.)g6hentai\.com$ (^|\.)gabocorp\.com$ (^|\.)gaeproxy\.com$ (^|\.)gaforum\.org$ (^|\.)galaxymacau\.com$ (^|\.)galenwu\.com$ (^|\.)galstars\.net$ (^|\.)game735\.com$ (^|\.)gamebase\.com\.tw$ (^|\.)gamejolt\.com$ (^|\.)gamer2-cds\.cdn\.hinet\.net$ (^|\.)gamer-cds\.cdn\.hinet\.net$ (^|\.)gamer\.com\.tw$ (^|\.)gamez\.com\.tw$ (^|\.)gamousa\.com$ (^|\.)ganges\.com$ (^|\.)gaoming\.net$ (^|\.)gaopi\.net$ (^|\.)gaozhisheng\.net$ (^|\.)gaozhisheng\.org$ (^|\.)gardennetworks\.com$ (^|\.)gardennetworks\.org$ (^|\.)g-area\.org$ (^|\.)gartlive\.com$ (^|\.)gatecoin\.com$ (^|\.)gate\.io$ (^|\.)gate-project\.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$ (^|\.)g\.co$ (^|\.)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$ (^|\.)getastrill\.com$ (^|\.)getchu\.com$ (^|\.)getcloak\.com$ (^|\.)get\.dev$ (^|\.)getfoxyproxy\.org$ (^|\.)getfreedur\.com$ (^|\.)getgom\.com$ (^|\.)get\.how$ (^|\.)geti2p\.net$ (^|\.)getiton\.com$ (^|\.)getjetso\.com$ (^|\.)getlantern\.org$ (^|\.)getmdl\.io$ (^|\.)getoutline\.org$ (^|\.)get\.page$ (^|\.)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$ (^|\.)gist\.github\.com$ (^|\.)github\.com$ (^|\.)git\.io$ (^|\.)gizlen\.net$ (^|\.)gjczz\.com$ (^|\.)glass8\.eu$ (^|\.)global\.bing\.com$ (^|\.)globaljihad\.net$ (^|\.)globalmediaoutreach\.com$ (^|\.)globalmuseumoncommunism\.org$ (^|\.)globalrescue\.net$ (^|\.)globaltm\.org$ (^|\.)globalvoicesonline\.org$ (^|\.)globalvoices\.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$ (^|\.)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$ (^|\.)go\.nesnode\.com$ (^|\.)gongmeng\.info$ (^|\.)gongm\.in$ (^|\.)gongminliliang\.com$ (^|\.)gongwt\.com$ (^|\.)gooday\.xyz$ (^|\.)gooddns\.info$ (^|\.)goodreaders\.com$ (^|\.)goodreads\.com$ (^|\.)goodtv\.com\.tw$ (^|\.)goodtv\.tv$ (^|\.)goofind\.com$ (^|\.)goo\.gl$ # Google TLDs$ (^|\.)google\.ad$ (^|\.)google\.ae$ (^|\.)google\.al$ (^|\.)google\.am$ (^|\.)google\.as$ (^|\.)google\.at$ (^|\.)google\.az$ (^|\.)google\.ba$ (^|\.)google\.be$ (^|\.)google\.bf$ (^|\.)google\.bg$ (^|\.)google\.bi$ (^|\.)google\.bj$ (^|\.)google\.bs$ (^|\.)google\.bt$ (^|\.)google\.by$ (^|\.)google\.ca$ (^|\.)google\.cat$ (^|\.)google\.cd$ (^|\.)google\.cf$ (^|\.)google\.cg$ (^|\.)google\.ch$ (^|\.)google\.ci$ (^|\.)google\.cl$ (^|\.)google\.cm$ (^|\.)google\.cn$ (^|\.)google\.co\.ao$ (^|\.)google\.co\.bw$ (^|\.)google\.co\.ck$ (^|\.)google\.co\.cr$ (^|\.)google\.co\.id$ (^|\.)google\.co\.il$ (^|\.)google\.co\.in$ (^|\.)google\.co\.jp$ (^|\.)google\.co\.ke$ (^|\.)google\.co\.kr$ (^|\.)google\.co\.ls$ (^|\.)google\.co\.ma$ (^|\.)google\.co\.mz$ (^|\.)google\.co\.nz$ (^|\.)google\.co\.th$ (^|\.)google\.co\.tz$ (^|\.)google\.co\.ug$ (^|\.)google\.co\.uk$ (^|\.)google\.co\.uz$ (^|\.)google\.co\.ve$ (^|\.)google\.co\.vi$ (^|\.)google\.co\.za$ (^|\.)google\.co\.zm$ (^|\.)google\.co\.zw$ (^|\.)google\.com$ (^|\.)google\.com\.af$ (^|\.)google\.com\.ag$ (^|\.)google\.com\.ai$ (^|\.)google\.com\.ar$ (^|\.)google\.com\.au$ (^|\.)google\.com\.bd$ (^|\.)google\.com\.bh$ (^|\.)google\.com\.bn$ (^|\.)google\.com\.bo$ (^|\.)google\.com\.br$ (^|\.)google\.com\.bz$ (^|\.)google\.com\.co$ (^|\.)google\.com\.cu$ (^|\.)google\.com\.cy$ (^|\.)google\.com\.do$ (^|\.)google\.com\.ec$ (^|\.)google\.com\.eg$ (^|\.)google\.com\.et$ (^|\.)google\.com\.fj$ (^|\.)google\.com\.gh$ (^|\.)google\.com\.gi$ (^|\.)google\.com\.gt$ (^|\.)google\.com\.hk$ (^|\.)google\.com\.jm$ (^|\.)google\.com\.kh$ (^|\.)google\.com\.kw$ (^|\.)google\.com\.lb$ (^|\.)google\.com\.ly$ (^|\.)google\.com\.mm$ (^|\.)google\.com\.mt$ (^|\.)google\.com\.mx$ (^|\.)google\.com\.my$ (^|\.)google\.com\.na$ (^|\.)google\.com\.nf$ (^|\.)google\.com\.ng$ (^|\.)google\.com\.ni$ (^|\.)google\.com\.np$ (^|\.)google\.com\.om$ (^|\.)google\.com\.pa$ (^|\.)google\.com\.pe$ (^|\.)google\.com\.pg$ (^|\.)google\.com\.ph$ (^|\.)google\.com\.pk$ (^|\.)google\.com\.pr$ (^|\.)google\.com\.py$ (^|\.)google\.com\.qa$ (^|\.)google\.com\.sa$ (^|\.)google\.com\.sb$ (^|\.)google\.com\.sg$ (^|\.)google\.com\.sl$ (^|\.)google\.com\.sv$ (^|\.)google\.com\.tj$ (^|\.)google\.com\.tr$ (^|\.)google\.com\.tw$ (^|\.)google\.com\.ua$ (^|\.)google\.com\.uy$ (^|\.)google\.com\.vc$ (^|\.)google\.com\.vn$ (^|\.)google\.cv$ (^|\.)google\.cz$ (^|\.)google\.de$ (^|\.)google\.dj$ (^|\.)google\.dk$ (^|\.)google\.dm$ (^|\.)google\.dz$ (^|\.)google\.ee$ (^|\.)google\.es$ (^|\.)google\.fi$ (^|\.)google\.fm$ (^|\.)google\.fr$ (^|\.)google\.ga$ (^|\.)google\.ge$ (^|\.)google\.gg$ (^|\.)google\.gl$ (^|\.)google\.gm$ (^|\.)google\.gp$ (^|\.)google\.gr$ (^|\.)google\.gy$ (^|\.)google\.hn$ (^|\.)google\.hr$ (^|\.)google\.ht$ (^|\.)google\.hu$ (^|\.)google\.ie$ (^|\.)google\.im$ (^|\.)google\.iq$ (^|\.)google\.is$ (^|\.)google\.it$ (^|\.)google\.je$ (^|\.)google\.jo$ (^|\.)google\.kg$ (^|\.)google\.ki$ (^|\.)google\.kz$ (^|\.)google\.la$ (^|\.)google\.li$ (^|\.)google\.lk$ (^|\.)google\.lt$ (^|\.)google\.lu$ (^|\.)google\.lv$ (^|\.)google\.md$ (^|\.)google\.me$ (^|\.)google\.mg$ (^|\.)google\.mk$ (^|\.)google\.ml$ (^|\.)google\.mn$ (^|\.)google\.ms$ (^|\.)google\.mu$ (^|\.)google\.mv$ (^|\.)google\.mw$ (^|\.)google\.ne$ (^|\.)google\.nl$ (^|\.)google\.no$ (^|\.)google\.nr$ (^|\.)google\.nu$ (^|\.)google\.pl$ (^|\.)google\.pn$ (^|\.)google\.ps$ (^|\.)google\.pt$ (^|\.)google\.ro$ (^|\.)google\.rs$ (^|\.)google\.ru$ (^|\.)google\.rw$ (^|\.)google\.sc$ (^|\.)google\.se$ (^|\.)google\.sh$ (^|\.)google\.si$ (^|\.)google\.sk$ (^|\.)google\.sm$ (^|\.)google\.sn$ (^|\.)google\.so$ (^|\.)google\.sr$ (^|\.)google\.st$ (^|\.)google\.td$ (^|\.)google\.tg$ (^|\.)google\.tk$ (^|\.)google\.tl$ (^|\.)google\.tm$ (^|\.)google\.tn$ (^|\.)google\.to$ (^|\.)google\.tt$ (^|\.)google\.vg$ (^|\.)google\.vu$ (^|\.)google\.ws$ # Google TLDs end$ (^|\.)googleapis\.cn$ (^|\.)googleapis\.com$ (^|\.)googleapps\.com$ (^|\.)googlearth\.com$ (^|\.)googleartproject\.com$ (^|\.)googleblog\.com$ (^|\.)googlebot\.com$ (^|\.)google\.calstate\.edu$ (^|\.)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$ (^|\.)go-pki\.com$ (^|\.)goproxing\.net$ (^|\.)goregrish\.com$ (^|\.)gospelherald\.com$ (^|\.)gotdns\.ch$ (^|\.)got-game\.org$ (^|\.)gotgeeks\.com$ (^|\.)gotrusted\.com$ (^|\.)gotw\.ca$ (^|\.)gov\.taipei$ (^|\.)gov\.tw$ (^|\.)g-queen\.com$ (^|\.)gr8domain\.biz$ (^|\.)gr8name\.biz$ (^|\.)grammaly\.com$ (^|\.)grandtrial\.org$ (^|\.)grangorz\.org$ (^|\.)graphis\.ne\.jp$ (^|\.)graphql\.org$ (^|\.)greasespot\.net$ (^|\.)greatfire\.org$ (^|\.)greatfire\.us7\.list-manage\.com$ (^|\.)greatfirewall\.biz$ (^|\.)great-firewall\.com$ (^|\.)greatfirewallofchina\.net$ (^|\.)greatfirewallofchina\.org$ (^|\.)great-roc\.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$ (^|\.)guaguass\.com$ (^|\.)guaguass\.org$ (^|\.)guancha\.org$ (^|\.)guaneryu\.com$ (^|\.)guangming\.com\.my$ (^|\.)guangnianvpn\.com$ (^|\.)guardster\.com$ (^|\.)gu-chu-sum\.org$ (^|\.)guishan\.org$ (^|\.)gumroad\.com$ (^|\.)gunsamerica\.com$ (^|\.)gunsandammo\.com$ (^|\.)gun-world\.net$ (^|\.)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$ (^|\.)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$ (^|\.)hanime\.tv$ (^|\.)hanunyi\.com$ (^|\.)haoel\.github\.io$ (^|\.)hao\.news$ (^|\.)happy-vpn\.com$ (^|\.)haproxy\.org$ (^|\.)hardsextube\.com$ (^|\.)harunyahya\.com$ (^|\.)hautelookcdn\.com$ (^|\.)hautelook\.com$ (^|\.)have8\.com$ (^|\.)hbg\.com$ (^|\.)hbo\.com$ (^|\.)h-china\.org$ (^|\.)hclips\.com$ (^|\.)hdlt\.me$ (^|\.)hd\.stheadline\.com$ (^|\.)hdtvb\.net$ (^|\.)hdzog\.com$ (^|\.)heartyit\.com$ (^|\.)heavy-r\.com$ (^|\.)hecaitou\.net$ (^|\.)hechaji\.com$ (^|\.)hec\.su$ (^|\.)heeact\.edu\.tw$ (^|\.)hegre-art\.com$ (^|\.)heix\.pp\.ru$ (^|\.)helloandroid\.com$ (^|\.)helloqueer\.com$ (^|\.)helloss\.pw$ (^|\.)hellotxt\.com$ (^|\.)hellouk\.org$ (^|\.)helpeachpeople\.com$ (^|\.)helplinfen\.com$ (^|\.)help\.linksalpha\.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$ (^|\.)hidden-advent\.org$ (^|\.)hidecloud\.com$ (^|\.)hidein\.net$ (^|\.)hideipvpn\.com$ (^|\.)hideman\.net$ (^|\.)hide\.me$ (^|\.)hideme\.nl$ (^|\.)hidemyass\.com$ (^|\.)hidemycomp\.com$ (^|\.)hidemy\.name$ (^|\.)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$ (^|\.)hi-on\.org\.tw$ (^|\.)hitbtc\.com$ (^|\.)hitomi\.la$ (^|\.)hizb-ut-tahrir\.info$ (^|\.)hizb-ut-tahrir\.org$ (^|\.)hizbuttahrir\.org$ (^|\.)hjclub\.info$ (^|\.)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$ (^|\.)hk\.frienddy\.com$ (^|\.)hkfront\.org$ (^|\.)hkgalden\.com$ (^|\.)hk\.geocities\.com$ (^|\.)hkgolden\.com$ (^|\.)hk\.gradconnection\.com$ (^|\.)hkgreenradio\.org$ (^|\.)hk\.hao123img\.com$ (^|\.)hkheadline\.com$ (^|\.)hkhkhk\.com$ (^|\.)hkhrc\.org\.hk$ (^|\.)hkhrm\.org\.hk$ (^|\.)hkip\.org\.uk$ (^|\.)hkjc\.com$ (^|\.)hk\.jiepang\.com$ (^|\.)hkjp\.org$ (^|\.)hk\.knowledge\.yahoo\.com$ (^|\.)hklft\.com$ (^|\.)hklts\.org\.hk$ (^|\.)hk\.myblog\.yahoo\.com$ (^|\.)hk\.news\.yahoo\.com$ (^|\.)hkptu\.org$ (^|\.)hk-pub\.com$ (^|\.)hk\.rd\.yahoo\.com$ (^|\.)hkreporter\.com$ (^|\.)hkreporter\.loved\.hk$ (^|\.)hk\.search\.yahoo\.com$ (^|\.)hkupop\.hku\.hk$ (^|\.)hkusu\.net$ (^|\.)hk\.video\.news\.yahoo\.com$ (^|\.)hkvwet\.com$ (^|\.)hkwcc\.org\.hk$ (^|\.)hk\.yahoo\.com$ (^|\.)hkzone\.org$ (^|\.)h-moe\.com$ (^|\.)hmonghot\.com$ (^|\.)hmv\.co\.jp$ (^|\.)hmvdigital\.ca$ (^|\.)hmvdigital\.com$ (^|\.)hnjhj\.com$ (^|\.)hnntube\.com$ (^|\.)hola\.com$ (^|\.)hola\.org$ (^|\.)holymountaincn\.com$ (^|\.)holyspiritspeaks\.org$ (^|\.)homedepot\.com$ (^|\.)homeperversion\.com$ (^|\.)homeservershow\.com$ (^|\.)home\.sina\.com$ (^|\.)home\.so-net\.net\.tw$ (^|\.)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$ (^|\.)hrweb\.org$ (^|\.)hrw\.org$ (^|\.)hsjp\.net$ (^|\.)hsselite\.com$ (^|\.)hstern\.net$ (^|\.)hst\.net\.tw$ (^|\.)hstt\.net$ (^|\.)htkou\.net$ (^|\.)htl\.li$ (^|\.)ht\.ly$ (^|\.)html5rocks\.com$ (^|\.)https443\.net$ (^|\.)https443\.org$ (^|\.)huaglad\.com$ (^|\.)huanghuagang\.org$ (^|\.)huangyiyu\.com$ (^|\.)huaren4us\.com$ (^|\.)huaren\.us$ (^|\.)huashangnews\.com$ (^|\.)huaxiabao\.org$ (^|\.)huaxia-news\.com$ (^|\.)huaxin\.ph$ (^|\.)hua-yue\.net$ (^|\.)huayuworld\.org$ (^|\.)hudatoriq\.web\.id$ (^|\.)hudson\.org$ (^|\.)huffingtonpost\.com$ (^|\.)hugoroy\.eu$ (^|\.)huhaitai\.com$ (^|\.)huhamhire\.com$ (^|\.)huiyi\.in$ (^|\.)hulkshare\.com$ (^|\.)hulu\.com$ (^|\.)huluim\.com$ (^|\.)humanrightsbriefing\.org$ (^|\.)hungerstrikeforaids\.org$ (^|\.)hung-ya\.com$ (^|\.)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$ (^|\.)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$ (^|\.)i-cable\.com$ (^|\.)icams\.com$ (^|\.)ice\.audionow\.com$ (^|\.)icij\.org$ (^|\.)icl-fi\.org$ (^|\.)icoco\.com$ (^|\.)iconpaper\.org$ (^|\.)icu-project\.org$ (^|\.)iddddg\.com$ (^|\.)idemocracy\.asia$ (^|\.)identi\.ca$ (^|\.)id\.hao123\.com$ (^|\.)id\.heroku\.com$ (^|\.)idiomconnection\.com$ (^|\.)idouga\.com$ (^|\.)idreamx\.com$ (^|\.)idv\.tw$ (^|\.)ieasy5\.com$ (^|\.)ied2k\.net$ (^|\.)ienergy1\.com$ (^|\.)ifan\.cz\.cc$ (^|\.)ifanqiang\.com$ (^|\.)ifcss\.org$ (^|\.)ifjc\.org$ (^|\.)ifreewares\.com$ (^|\.)if\.ttt$ (^|\.)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$ (^|\.)i\.lithium\.com$ (^|\.)illusionfactory\.com$ (^|\.)ilove80\.be$ (^|\.)ilovelongtoes\.com$ (^|\.)im88\.tw$ (^|\.)imageab\.com$ (^|\.)imagefap\.com$ (^|\.)imageflea\.com$ (^|\.)images\.comico\.tw$ (^|\.)images-gaytube\.com$ (^|\.)imageshack\.us$ (^|\.)imagevenue\.com$ (^|\.)imagezilla\.net$ (^|\.)imb\.org$ (^|\.)imdb\.com$ (^|\.)imgchili\.net$ (^|\.)img\.dlsite\.jp$ (^|\.)img\.ly$ (^|\.)imgmega\.com$ (^|\.)imgur\.com$ (^|\.)imkev\.com$ (^|\.)imlive\.com$ (^|\.)immigration\.gov\.tw$ (^|\.)immoral\.jp$ (^|\.)impact\.org\.au$ (^|\.)impp\.mn$ (^|\.)im\.tv$ (^|\.)in99\.org$ (^|\.)incapdns\.net$ (^|\.)incloak\.com$ (^|\.)incredibox\.fr$ (^|\.)indiandefensenews\.in$ (^|\.)indiemerch\.com$ (^|\.)in-disguise\.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$ (^|\.)internetdefenseleague\.org$ (^|\.)internetfreedom\.org$ (^|\.)internet\.org$ (^|\.)internetpopculture\.com$ (^|\.)inthenameofconfuciusmovie\.com$ (^|\.)investigating\.wordpress\.com$ (^|\.)inxian\.com$ (^|\.)iownyour\.biz$ (^|\.)iownyour\.org$ (^|\.)ipalter\.com$ (^|\.)i-part\.com\.tw$ (^|\.)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$ (^|\.)iptvbin\.com$ (^|\.)iptv\.com\.tw$ (^|\.)ipvanish\.com$ (^|\.)iredmail\.org$ (^|\.)ironbigfools\.compython\.net$ (^|\.)ironpython\.net$ (^|\.)ironsocket\.com$ (^|\.)isaacmao\.com$ (^|\.)is-a-hunter\.com$ (^|\.)isasecret\.com$ (^|\.)i-scmp\.com$ (^|\.)isc\.sans\.edu$ (^|\.)is\.gd$ (^|\.)isgreat\.org$ (^|\.)islahhaber\.net$ (^|\.)islamawareness\.net$ (^|\.)islamhouse\.com$ (^|\.)islamicity\.com$ (^|\.)islamicpluralism\.org$ (^|\.)islam\.org\.hk$ (^|\.)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$ (^|\.)itsaol\.com$ (^|\.)its\.caltech\.edu$ (^|\.)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$ (^|\.)izlesem\.org$ (^|\.)izles\.net$ (^|\.)jamaat\.org$ (^|\.)jamyangnorbu\.com$ (^|\.)jandyx\.com$ (^|\.)janwongphoto\.com$ (^|\.)japanfirst\.asianfreeforum\.com$ (^|\.)japantimes\.co\.jp$ (^|\.)japan-whores\.com$ (^|\.)jav101\.com$ (^|\.)jav2be\.com$ (^|\.)jav68\.tv$ (^|\.)javakiba\.org$ (^|\.)javbus\.com$ (^|\.)jav\.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$ (^|\.)ja\.wikipedia\.org$ (^|\.)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$ (^|\.)j\.mp$ (^|\.)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$ (^|\.)kagyumonlam\.org$ (^|\.)kagyunews\.com\.hk$ (^|\.)kagyuoffice\.org$ (^|\.)kagyuoffice\.org\.tw$ (^|\.)kagyu\.org$ (^|\.)kagyu\.org\.za$ (^|\.)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\.org$ (^|\.)karmapa-teachings\.org$ (^|\.)ka-wai\.com$ (^|\.)kawaiikawaii\.jp$ (^|\.)kawase\.com$ (^|\.)kba-tx\.org$ (^|\.)kb\.monitorware\.com$ (^|\.)kcoolonline\.com$ (^|\.)k-doujin\.net$ (^|\.)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$ (^|\.)kkbox\.com$ (^|\.)kknews\.cc$ (^|\.)kk-whys\.co\.jp$ (^|\.)kmuh\.org\.tw$ (^|\.)knowledgerush\.com$ (^|\.)kobobooks\.com$ (^|\.)kobo\.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$ (^|\.)labiennale\.org$ (^|\.)ladbrokes\.com$ (^|\.)la-forum\.org$ (^|\.)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$ (^|\.)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$ (^|\.)le-vpn\.com$ (^|\.)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$ (^|\.)lightyearvpn\.com$ (^|\.)lihkg\.com$ (^|\.)like\.com$ (^|\.)limiao\.net$ (^|\.)line-apps\.com$ (^|\.)linear-abematv\.akamaized\.net$ (^|\.)line\.me$ (^|\.)line\.naver\.jp$ (^|\.)line-scdn\.net$ (^|\.)linglingfa\.com$ (^|\.)lingvodics\.com$ (^|\.)linkideo\.com$ (^|\.)link-o-rama\.com$ (^|\.)linkuswell\.com$ (^|\.)linux\.org\.hk$ (^|\.)linuxtoy\.org$ (^|\.)lionsroar\.com$ (^|\.)lipuman\.com$ (^|\.)liquidvpn\.com$ (^|\.)listentoyoutube\.com$ (^|\.)listorious\.com$ (^|\.)lists\.w3\.org$ (^|\.)liudejun\.com$ (^|\.)liuhanyu\.com$ (^|\.)liujianshu\.com$ (^|\.)liuxiaobo\.net$ (^|\.)liu-xiaobo\.org$ (^|\.)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$ (^|\.)lsmchinese\.org$ (^|\.)lsmkorean\.org$ (^|\.)lsm\.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$ (^|\.)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$ (^|\.)ma\.hao123\.com$ (^|\.)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$ (^|\.)meansys\.com$ (^|\.)mediachinese\.com$ (^|\.)mediafire\.com$ (^|\.)mediafreakcity\.com$ (^|\.)media\.nu\.nl$ (^|\.)media\.org\.hk$ (^|\.)medium\.com$ (^|\.)meetav\.com$ (^|\.)meetup\.com$ (^|\.)mefeedia\.com$ (^|\.)mefound\.com$ (^|\.)mega\.nz$ (^|\.)megaproxy\.com$ (^|\.)megarotic\.com$ (^|\.)megavideo\.com$ (^|\.)megurineluka\.com$ (^|\.)meirixiaochao\.com$ (^|\.)meltoday\.com$ (^|\.)me\.me$ (^|\.)memehk\.com$ (^|\.)meme\.yahoo\.com$ (^|\.)memorybbs\.com$ (^|\.)memrijttm\.org$ (^|\.)memri\.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$ (^|\.)me\.youthwant\.com\.tw$ (^|\.)meyul\.com$ (^|\.)mfxmedia\.com$ (^|\.)mgoon\.com$ (^|\.)mgstage\.com$ (^|\.)mh4u\.org$ (^|\.)m\.hkgalden\.com$ (^|\.)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\.org$ (^|\.)minghui\.or\.kr$ (^|\.)minghui-school\.org$ (^|\.)minghuiyw\.wordpress\.com$ (^|\.)mingjinglishi\.com$ (^|\.)mingjingnews\.com$ (^|\.)mingjingtimes\.com$ (^|\.)mingpaocanada\.com$ (^|\.)mingpao\.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$ (^|\.)mitbbsau\.com$ (^|\.)mitbbs\.com$ (^|\.)mixero\.com$ (^|\.)mixpod\.com$ (^|\.)mixx\.com$ (^|\.)mizzmona\.com$ (^|\.)mjib\.gov\.tw$ (^|\.)mjlsh\.usc\.cuhk\.edu\.hk$ (^|\.)mk5000\.com$ (^|\.)mlcool\.com$ (^|\.)mlzs\.work$ (^|\.)mmaaxx\.com$ (^|\.)mm-cg\.com$ (^|\.)m\.me$ (^|\.)mmmca\.com$ (^|\.)mnewstv\.com$ (^|\.)mobatek\.net$ (^|\.)mobile01\.com$ (^|\.)mobileways\.de$ (^|\.)mobypicture\.com$ (^|\.)moby\.to$ (^|\.)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$ (^|\.)moneyhome\.biz$ (^|\.)money-link\.com\.tw$ (^|\.)mo\.nightlife141\.com$ (^|\.)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$ (^|\.)m\.plixi\.com$ (^|\.)mponline\.hk$ (^|\.)mqxd\.org$ (^|\.)mrbasic\.com$ (^|\.)mrbonus\.com$ (^|\.)mrface\.com$ (^|\.)mrslove\.com$ (^|\.)mrtweet\.com$ (^|\.)msa-it\.org$ (^|\.)msguancha\.com$ (^|\.)msha\.gov$ (^|\.)m\.slandr\.net$ (^|\.)mswe1\.org$ (^|\.)m-team\.cc$ (^|\.)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$ (^|\.)mx981\.com$ (^|\.)mx\.hao123\.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$ (^|\.)my-formosa\.com$ (^|\.)myforum\.com\.hk$ (^|\.)myforum\.com\.uk$ (^|\.)myfreecams\.com$ (^|\.)myfreepaysite\.com$ (^|\.)myfreshnet\.com$ (^|\.)myftp\.info$ (^|\.)myftp\.name$ (^|\.)myiphide\.com$ (^|\.)mykomica\.org$ (^|\.)mylftv\.com$ (^|\.)my\.mail\.ru$ (^|\.)mymediarom\.com$ (^|\.)mymoe\.moe$ (^|\.)mymom\.info$ (^|\.)mymusic\.net\.tw$ (^|\.)mynetav\.net$ (^|\.)mynetav\.org$ (^|\.)mynumber\.org$ (^|\.)my\.opera\.com$ (^|\.)myparagliding\.com$ (^|\.)my\.pcloud\.com$ (^|\.)mypicture\.info$ (^|\.)mypop3\.net$ (^|\.)mypop3\.org$ (^|\.)mypopescu\.com$ (^|\.)my-private-network\.co\.uk$ (^|\.)my-proxy\.com$ (^|\.)myradio\.hk$ (^|\.)myreadingmanga\.info$ (^|\.)mysecondarydns\.com$ (^|\.)myshare\.url\.com\.tw$ (^|\.)mysinablog\.com$ (^|\.)mysite\.verizon\.net$ (^|\.)myspacecdn\.com$ (^|\.)myspace\.com$ (^|\.)mytalkbox\.com$ (^|\.)mytizi\.com$ (^|\.)mywww\.biz$ (^|\.)myz\.info$ (^|\.)naacoalition\.org$ (^|\.)naitik\.net$ (^|\.)nakido\.com$ (^|\.)nakuz\.com$ (^|\.)nalandabodhi\.org$ (^|\.)nalandawest\.org$ (^|\.)namgyalmonastery\.org$ (^|\.)namgyal\.org$ (^|\.)namsisi\.com$ (^|\.)nanyang\.com$ (^|\.)nanyangpost\.com$ (^|\.)nanzao\.com$ (^|\.)naol\.ca$ (^|\.)naol\.cc$ (^|\.)nat\.gov\.tw$ (^|\.)national-lottery\.co\.uk$ (^|\.)nationsonline\.org$ (^|\.)nationwide\.com$ (^|\.)nat\.moe$ (^|\.)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$ (^|\.)netbirds\.com$ (^|\.)netcolony\.com$ (^|\.)net-fits\.pro$ (^|\.)netflix\.com$ (^|\.)netme\.cc$ (^|\.)netsneak\.com$ (^|\.)network54\.com$ (^|\.)networkedblogs\.com$ (^|\.)networktunnel\.net$ (^|\.)neverforget8964\.org$ (^|\.)new-3lunch\.net$ (^|\.)new96\.ca$ (^|\.)new-akiba\.com$ (^|\.)newcenturymc\.com$ (^|\.)newcenturynews\.com$ (^|\.)newchen\.com$ (^|\.)newgrounds\.com$ (^|\.)newipnow\.com$ (^|\.)newlandmagazine\.com\.au$ (^|\.)newnews\.ca$ (^|\.)news100\.com\.tw$ (^|\.)newsancai\.com$ (^|\.)newschinacomment\.org$ (^|\.)newscn\.org$ (^|\.)news\.cnyes\.com$ (^|\.)newsdetox\.ca$ (^|\.)newsdh\.com$ (^|\.)news\.hk\.msn\.com$ (^|\.)news\.hkpeanut\.com$ (^|\.)news\.msn\.com\.tw$ (^|\.)news\.nationalgeographic\.com$ (^|\.)news\.now\.com$ (^|\.)news\.omy\.sg$ (^|\.)newspeak\.cc$ (^|\.)news\.seehua\.com$ (^|\.)news\.sina\.com\.hk$ (^|\.)news\.sina\.com\.tw$ (^|\.)news\.sinchew\.com\.my$ (^|\.)news\.singtao\.ca$ (^|\.)newstamago\.com$ (^|\.)newstapa\.org$ (^|\.)newstarnet\.com$ (^|\.)news\.tvb\.com$ (^|\.)news\.tvbs\.com\.tw$ (^|\.)news\.yahoo\.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$ (^|\.)nobelprize\.org$ (^|\.)nobel\.se$ (^|\.)nobodycanstop\.us$ (^|\.)nofile\.io$ (^|\.)no-ip\.org$ (^|\.)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$ (^|\.)npsboost\.com$ (^|\.)nps\.gov$ (^|\.)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$ (^|\.)ntdtvla\.com$ (^|\.)ntdtv\.org$ (^|\.)ntdtv\.ru$ (^|\.)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$ (^|\.)nyaa\.eu$ (^|\.)nyaa\.si$ (^|\.)nydus\.ca$ (^|\.)nylon-angel\.com$ (^|\.)nylonstockingsonline\.com$ (^|\.)ny\.stgloballink\.com$ (^|\.)nytchina\.com$ (^|\.)nytcn\.me$ (^|\.)nytco\.com$ (^|\.)nyt\.com$ (^|\.)nytimes\.com$ (^|\.)nytimes\.map\.fastly\.net$ (^|\.)nytimg\.com$ (^|\.)nyti\.ms$ (^|\.)nytstyle\.com$ (^|\.)ny\.visiontimes\.com$ (^|\.)nzchinese\.com$ (^|\.)nzchinese\.net\.nz$ (^|\.)observechina\.net$ (^|\.)obutu\.com$ (^|\.)ocaspro\.com$ (^|\.)occupytiananmen\.com$ (^|\.)oclp\.hk$ (^|\.)ocreampies\.com$ (^|\.)ocry\.com$ (^|\.)october-review\.org$ (^|\.)oculuscdn\.com$ (^|\.)oculus\.com$ (^|\.)oex\.com$ (^|\.)offbeatchina\.com$ (^|\.)officeoftibet\.com$ (^|\.)ofile\.org$ (^|\.)ogaoga\.org$ (^|\.)ogate\.org$ (^|\.)oikos\.com\.tw$ (^|\.)oiktv\.com$ (^|\.)oizoblog\.com$ (^|\.)okayfreedom\.com$ (^|\.)okex\.com$ (^|\.)okk\.tw$ (^|\.)ok\.ru$ (^|\.)old-cat\.net$ (^|\.)old\.honeynet\.org$ (^|\.)old\.nabble\.com$ (^|\.)olumpo\.com$ (^|\.)olympicwatch\.org$ (^|\.)omgili\.com$ (^|\.)omni7\.jp$ (^|\.)omnitalk\.com$ (^|\.)omnitalk\.org$ (^|\.)on2\.com$ (^|\.)onapp\.com$ (^|\.)on\.cc$ (^|\.)onedrive\.live\.com$ (^|\.)onedumb\.com$ (^|\.)onejav\.com$ (^|\.)onion\.city$ (^|\.)onlinecha\.com$ (^|\.)online\.recoveryversion\.org$ (^|\.)onlineyoutube\.com$ (^|\.)onlytweets\.com$ (^|\.)onmoon\.com$ (^|\.)onmoon\.net$ (^|\.)onmypc\.biz$ (^|\.)onmypc\.info$ (^|\.)onmypc\.net$ (^|\.)onmypc\.org$ (^|\.)onmypc\.us$ (^|\.)onthehunt\.com$ (^|\.)ontrac\.com$ (^|\.)oopsforum\.com$ (^|\.)openallweb\.com$ (^|\.)open\.com\.hk$ (^|\.)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$ (^|\.)orientaldaily\.com\.my$ (^|\.)orient-doll\.com$ (^|\.)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$ (^|\.)owl\.li$ (^|\.)ow\.ly$ (^|\.)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$ (^|\.)page2rss\.com$ (^|\.)page\.bid\.yahoo\.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$ (^|\.)paperb\.us$ (^|\.)paper\.li$ (^|\.)paradisehill\.cc$ (^|\.)paradisepoker\.com$ (^|\.)parkansky\.com$ (^|\.)partycasino\.com$ (^|\.)partypoker\.com$ (^|\.)passion\.com$ (^|\.)passiontimes\.hk$ (^|\.)pastebin\.com$ (^|\.)paste\.ee$ (^|\.)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$ (^|\.)penchinese\.com$ (^|\.)penchinese\.net$ (^|\.)pengyulong\.com$ (^|\.)pen\.io$ (^|\.)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$ (^|\.)picacomiccn\.com$ (^|\.)picacomic\.com$ (^|\.)picasaweb\.com$ (^|\.)picidae\.net$ (^|\.)picturedip\.com$ (^|\.)picturesocial\.com$ (^|\.)pictures\.playboy\.com$ (^|\.)pimg\.tw$ (^|\.)pin6\.com$ (^|\.)pin-cong\.com$ (^|\.)pincong\.rocks$ (^|\.)ping\.fm$ (^|\.)pinimg\.com$ (^|\.)pinkrod\.com$ (^|\.)pinoy-n\.com$ (^|\.)pinterest\.at$ (^|\.)pinterest\.ca$ (^|\.)pinterest\.co\.kr$ (^|\.)pinterest\.com$ (^|\.)pinterest\.co\.uk$ (^|\.)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$ (^|\.)plus28\.com$ (^|\.)plusbb\.com$ (^|\.)plus\.codes$ (^|\.)pmatehunter\.com$ (^|\.)pmates\.com$ (^|\.)po2b\.com$ (^|\.)pobieramy\.top$ (^|\.)podictionary\.com$ (^|\.)pokerstars\.com$ (^|\.)pokerstars\.net$ (^|\.)politicalchina\.org$ (^|\.)politicalconsultation\.org$ (^|\.)politiscales\.net$ (^|\.)poloniex\.com$ (^|\.)polymerhk\.com$ (^|\.)polymer-project\.org$ (^|\.)popo\.tw$ (^|\.)popvote\.hk$ (^|\.)popyard\.com$ (^|\.)popyard\.org$ (^|\.)porn2\.com$ (^|\.)porn5\.com$ (^|\.)pornbase\.org$ (^|\.)porn\.com$ (^|\.)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$ (^|\.)powerapple\.com$ (^|\.)power\.com$ (^|\.)powercx\.com$ (^|\.)powerphoto\.org$ (^|\.)prayforchina\.net$ (^|\.)premeforwindows7\.com$ (^|\.)premproxy\.com$ (^|\.)presentationzen\.com$ (^|\.)presidentlee\.tw$ (^|\.)prestige-av\.com$ (^|\.)pride\.google$ (^|\.)prism-break\.org$ (^|\.)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$ (^|\.)psiphon3\.com$ (^|\.)psiphon\.ca$ (^|\.)psiphon\.civisec\.org$ (^|\.)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$ (^|\.)qanote\.com$ (^|\.)qgirl\.com\.tw$ (^|\.)qhigh\.com$ (^|\.)qiandao\.today$ (^|\.)qiangyou\.org$ (^|\.)qidian\.ca$ (^|\.)qienkuen\.org$ (^|\.)qi-gong\.me$ (^|\.)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$ (^|\.)quoracdn\.net$ (^|\.)quora\.com$ (^|\.)quran\.com$ (^|\.)quranexplorer\.com$ (^|\.)qusi8\.net$ (^|\.)qvodzy\.org$ (^|\.)qxbbs\.org$ (^|\.)qz\.com$ (^|\.)r18\.com$ (^|\.)radicalparty\.org$ (^|\.)radiko\.jp$ (^|\.)radioaustralia\.net\.au$ (^|\.)radiohilight\.net$ (^|\.)radiovaticana\.org$ (^|\.)radiovncr\.com$ (^|\.)rael\.org$ (^|\.)ra\.gg$ (^|\.)raggedbanner\.com$ (^|\.)raidcall\.com\.tw$ (^|\.)raidtalk\.com\.tw$ (^|\.)rainbowplan\.org$ (^|\.)raindrop\.io$ (^|\.)raizoji\.or\.jp$ (^|\.)ramcity\.com\.au$ (^|\.)rangwang\.biz$ (^|\.)rangzen\.com$ (^|\.)rangzen\.net$ (^|\.)rangzen\.org$ (^|\.)ranyunfei\.com$ (^|\.)rapbull\.net$ (^|\.)rapidgator\.net$ (^|\.)rapidmoviez\.com$ (^|\.)rapidvpn\.com$ (^|\.)rarbgprx\.org$ (^|\.)raremovie\.cc$ (^|\.)raremovie\.net$ (^|\.)rawgit\.com$ (^|\.)rawgithub\.com$ (^|\.)raw\.githubusercontent\.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$ (^|\.)redballoonsolidarity\.org$ (^|\.)redchinacn\.net$ (^|\.)redchinacn\.org$ (^|\.)redd\.it$ (^|\.)reddit\.com$ (^|\.)redditlist\.com$ (^|\.)redditmedia\.com$ (^|\.)redditstatic\.com$ (^|\.)redhotlabs\.com$ (^|\.)red-lang\.org$ (^|\.)redtube\.com$ (^|\.)referer\.us$ (^|\.)reflectivecode\.com$ (^|\.)registry\.google$ (^|\.)relaxbbs\.com$ (^|\.)relay\.com\.tw$ (^|\.)releaseinternational\.org$ (^|\.)religioustolerance\.org$ (^|\.)renminbao\.com$ (^|\.)renyurenquan\.org$ (^|\.)research\.jmsc\.hku\.hk$ (^|\.)resilio\.com$ (^|\.)retweeteffect\.com$ (^|\.)retweetist\.com$ (^|\.)retweetrank\.com$ (^|\.)reuters\.com$ (^|\.)reutersmedia\.net$ (^|\.)revleft\.com$ (^|\.)revver\.com$ (^|\.)rfachina\.com$ (^|\.)rfalive1\.akacast\.akamaistream\.net$ (^|\.)rfamobile\.org$ (^|\.)rfa\.org$ (^|\.)rfaweb\.org$ (^|\.)rferl\.org$ (^|\.)rfi\.fr$ (^|\.)rfi\.my$ (^|\.)rg3\.github\.io$ (^|\.)rightbtc\.com$ (^|\.)rigpa\.org$ (^|\.)riku\.me$ (^|\.)rileyguide\.com$ (^|\.)riseup\.net$ (^|\.)ritouki\.jp$ (^|\.)ritter\.vg$ (^|\.)rixcloud\.com$ (^|\.)rixcloud\.us$ (^|\.)rlwlw\.com$ (^|\.)rmjdw132\.info$ (^|\.)rmjdw\.com$ (^|\.)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$ (^|\.)rthklive2-lh\.akamaihd\.net$ (^|\.)rthk\.org\.hk$ (^|\.)rti\.org\.tw$ (^|\.)rtycminnesota\.org$ (^|\.)ruanyifeng\.com$ (^|\.)rukor\.org$ (^|\.)runbtx\.com$ (^|\.)rushbee\.com$ (^|\.)ruten\.com\.tw$ (^|\.)rutube\.ru$ (^|\.)ruyiseek\.com$ (^|\.)rxhj\.net$ (^|\.)s1heng\.com$ (^|\.)s1\.nudezz\.com$ (^|\.)s1s1s1\.com$ (^|\.)s3\.amazonaws\.com$ (^|\.)s3-ap-northeast-1\.amazonaws\.com$ (^|\.)s3-ap-southeast-2\.amazonaws\.com$ (^|\.)s8forum\.com$ (^|\.)sacks\.com$ (^|\.)sacom\.hk$ (^|\.)sadistic-v\.com$ (^|\.)sadpanda\.us$ (^|\.)safervpn\.com$ (^|\.)safety\.google$ (^|\.)sa\.hao123\.com$ (^|\.)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$ (^|\.)scache1\.vzw\.com$ (^|\.)scache2\.vzw\.com$ (^|\.)scache\.vzw\.com$ (^|\.)scasino\.com$ (^|\.)schema\.org$ (^|\.)sciencenets\.com$ (^|\.)scieron\.com$ (^|\.)scmpchinese\.com$ (^|\.)scmp\.com$ (^|\.)scramble\.io$ (^|\.)scribd\.com$ (^|\.)scriptspot\.com$ (^|\.)s-cute\.com$ (^|\.)s-dragon\.org$ (^|\.)seapuff\.com$ (^|\.)search\.aol\.com$ (^|\.)searchtruth\.com$ (^|\.)search\.xxx$ (^|\.)search\.yahoo\.co\.jp$ (^|\.)search\.yahoo\.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$ (^|\.)sex3\.com$ (^|\.)sex8\.cc$ (^|\.)sexandsubmission\.com$ (^|\.)sexbot\.com$ (^|\.)sex\.com$ (^|\.)sexhuang\.com$ (^|\.)sexhu\.com$ (^|\.)sexidude\.com$ (^|\.)sexinsex\.net$ (^|\.)sextvx\.com$ (^|\.)sexxxy\.biz$ (^|\.)sfileydy\.com$ (^|\.)sf\.net$ (^|\.)sfshibao\.com$ (^|\.)sftindia\.org$ (^|\.)sftuk\.org$ (^|\.)shadeyouvpn\.com$ (^|\.)shadow\.ma$ (^|\.)shadowsky\.xyz$ (^|\.)shadowsocks9\.com$ (^|\.)shadowsocks\.asia$ (^|\.)shadowsocks\.be$ (^|\.)shadowsocks\.com$ (^|\.)shadowsocks\.com\.hk$ (^|\.)shadowsocks\.org$ (^|\.)shadowsocks-r\.com$ (^|\.)shambalapost\.com$ (^|\.)shambhalasun\.com$ (^|\.)shangfang\.org$ (^|\.)shapeservices\.com$ (^|\.)share\.america\.gov$ (^|\.)sharebee\.com$ (^|\.)sharecool\.org$ (^|\.)share\.dmhy\.org$ (^|\.)share\.ovi\.com$ (^|\.)share\.youthwant\.com\.tw$ (^|\.)sharpdaily\.com\.hk$ (^|\.)sharpdaily\.hk$ (^|\.)sharpdaily\.tw$ (^|\.)shattered\.io$ (^|\.)shat-tibet\.com$ (^|\.)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$ (^|\.)shwchurch3\.com$ (^|\.)shwchurch\.org$ (^|\.)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$ (^|\.)sinoants\.com$ (^|\.)sinocast\.com$ (^|\.)sinocism\.com$ (^|\.)sino-monthly\.com$ (^|\.)sinomontreal\.ca$ (^|\.)sinonet\.ca$ (^|\.)sinopitt\.info$ (^|\.)sinoquebec\.com$ (^|\.)sipml5\.org$ (^|\.)sis001\.com$ (^|\.)sis001\.us$ (^|\.)sis\.xxx$ (^|\.)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$ (^|\.)smartdnsproxy\.com$ (^|\.)smarthide\.com$ (^|\.)smchbooks\.com$ (^|\.)smh\.com\.au$ (^|\.)smhric\.org$ (^|\.)smith\.edu$ (^|\.)sm-miracle\.com$ (^|\.)smyxy\.org$ (^|\.)snapchat\.com$ (^|\.)snaptu\.com$ (^|\.)sndcdn\.com$ (^|\.)sneakme\.net$ (^|\.)snowlionpub\.com$ (^|\.)sobees\.com$ (^|\.)socialwhale\.com$ (^|\.)sockscap64\.com$ (^|\.)sockslist\.net$ (^|\.)socks-proxy\.net$ (^|\.)soc\.mil$ (^|\.)socrec\.org$ (^|\.)sodatea\.github\.io$ (^|\.)sod\.co\.jp$ (^|\.)softether\.co\.jp$ (^|\.)softether-download\.com$ (^|\.)softether\.org$ (^|\.)softfamous\.com$ (^|\.)softsmirror\.cf$ (^|\.)softwarebychuck\.com$ (^|\.)softwaredownload\.gitbooks\.io$ (^|\.)sogclub\.com$ (^|\.)sogrady\.me$ (^|\.)sohcradio\.com$ (^|\.)sohfrance\.org$ (^|\.)soh\.tw$ (^|\.)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$ (^|\.)soulcaliburhentai\.net$ (^|\.)soul-plus\.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$ (^|\.)ss7\.vzw\.com$ (^|\.)ss\.carryzhou\.com$ (^|\.)ssglobal\.co$ (^|\.)ssglobal\.me$ (^|\.)ssh91\.com$ (^|\.)ssl443\.org$ (^|\.)ss\.levyhsu\.com$ (^|\.)ss-link\.com$ (^|\.)ssl\.webpack\.de$ (^|\.)sspanel\.net$ (^|\.)sspro\.ml$ (^|\.)ss\.pythonic\.life$ (^|\.)ssrshare\.com$ (^|\.)ssr\.tools$ (^|\.)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$ (^|\.)static01\.nyt\.com$ (^|\.)static\.comico\.tw$ (^|\.)static-economist\.com$ (^|\.)staticflickr\.com$ (^|\.)static\.shemalez\.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$ (^|\.)stormmediagroup\.com$ (^|\.)storm\.mg$ (^|\.)stoweboyd\.com$ (^|\.)stranabg\.com$ (^|\.)straplessdildo\.com$ (^|\.)streamingthe\.net$ (^|\.)streema\.com$ (^|\.)strikingly\.com$ (^|\.)strongvpn\.com$ (^|\.)strongwindpress\.com$ (^|\.)studentsforafreetibet\.org$ (^|\.)student\.tw$ (^|\.)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$ (^|\.)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$ (^|\.)tagwalk\.com$ (^|\.)tagwa\.org\.au$ (^|\.)tahr\.org\.tw$ (^|\.)taipei\.gov\.tw$ (^|\.)taipeisociety\.org$ (^|\.)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$ (^|\.)taiwan-sex\.com$ (^|\.)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$ (^|\.)tbicn\.org$ (^|\.)tbi\.org\.hk$ (^|\.)tbjyt\.org$ (^|\.)tbpic\.info$ (^|\.)tbrc\.org$ (^|\.)tbsec\.org$ (^|\.)tbskkinabalu\.page\.tl$ (^|\.)tbsmalaysia\.org$ (^|\.)tbsn\.org$ (^|\.)tbs-rainbow\.org$ (^|\.)tbsseattle\.org$ (^|\.)tbssqh\.org$ (^|\.)tbswd\.org$ (^|\.)tbtemple\.org\.uk$ (^|\.)tbthouston\.org$ (^|\.)tccwonline\.org$ (^|\.)tcewf\.org$ (^|\.)tchrd\.org$ (^|\.)tcnynj\.org$ (^|\.)t\.co$ (^|\.)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$ (^|\.)telegramdownload\.com$ (^|\.)telegram\.me$ (^|\.)telegram\.org$ (^|\.)telegraph\.co\.uk$ (^|\.)telesco\.pe$ (^|\.)tellme\.pw$ (^|\.)tenacy\.com$ (^|\.)tensorflow\.org$ (^|\.)tenzinpalmo\.com$ (^|\.)terminus2049\.github\.io$ (^|\.)tew\.org$ (^|\.)textnow\.me$ (^|\.)tfhub\.dev$ (^|\.)t-g\.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$ (^|\.)th\.hao123\.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$ (^|\.)tiantibooks\.org$ (^|\.)tianti\.io$ (^|\.)tianyantong\.org\.cn$ (^|\.)tianzhu\.org$ (^|\.)tibet3rdpole\.org$ (^|\.)tibetaction\.net$ (^|\.)tibetaid\.org$ (^|\.)tibetalk\.com$ (^|\.)tibetanaidproject\.org$ (^|\.)tibetan-alliance\.org$ (^|\.)tibetanarts\.org$ (^|\.)tibetanbuddhistinstitute\.org$ (^|\.)tibetancommunity\.org$ (^|\.)tibetancommunityuk\.net$ (^|\.)tibetanculture\.org$ (^|\.)tibetanfeministcollective\.org$ (^|\.)tibetan\.fr$ (^|\.)tibetanjournal\.com$ (^|\.)tibetanlanguage\.org$ (^|\.)tibetanliberation\.org$ (^|\.)tibetanpaintings\.com$ (^|\.)tibetanphotoproject\.com$ (^|\.)tibetanpoliticalreview\.org$ (^|\.)tibetanreview\.net$ (^|\.)tibetansports\.org$ (^|\.)tibetanwomen\.org$ (^|\.)tibetanyouthcongress\.org$ (^|\.)tibetanyouth\.org$ (^|\.)tibet\.a\.se$ (^|\.)tibet\.at$ (^|\.)tibet\.ca$ (^|\.)tibetcharity\.dk$ (^|\.)tibetcharity\.in$ (^|\.)tibetchild\.org$ (^|\.)tibetcity\.com$ (^|\.)tibetcollection\.com$ (^|\.)tibet\.com$ (^|\.)tibetcorps\.org$ (^|\.)tibet-envoy\.eu$ (^|\.)tibetexpress\.net$ (^|\.)tibetfocus\.com$ (^|\.)tibet-foundation\.org$ (^|\.)tibet\.fr$ (^|\.)tibetfund\.org$ (^|\.)tibetgermany\.com$ (^|\.)tibetgermany\.de$ (^|\.)tibethaus\.com$ (^|\.)tibetheritagefund\.org$ (^|\.)tibethouse\.jp$ (^|\.)tibethouse\.org$ (^|\.)tibet-house-trust\.co\.uk$ (^|\.)tibethouse\.us$ (^|\.)tibet-info\.net$ (^|\.)tibetinfonet\.net$ (^|\.)tibet-initiative\.de$ (^|\.)tibetjustice\.org$ (^|\.)tibetkomite\.dk$ (^|\.)tibetlibre\.free\.fr$ (^|\.)tibet-munich\.de$ (^|\.)tibetmuseum\.org$ (^|\.)tibet\.net$ (^|\.)tibetnetwork\.org$ (^|\.)tibet\.nu$ (^|\.)tibetoffice\.ch$ (^|\.)tibetoffice\.com\.au$ (^|\.)tibetoffice\.eu$ (^|\.)tibetoffice\.org$ (^|\.)tibetonline\.com$ (^|\.)tibetonline\.tv$ (^|\.)tibetoralhistory\.org$ (^|\.)tibet\.org$ (^|\.)tibet\.org\.tw$ (^|\.)tibetpolicy\.eu$ (^|\.)tibetrelieffund\.co\.uk$ (^|\.)tibetsites\.com$ (^|\.)tibet\.sk$ (^|\.)tibetsociety\.com$ (^|\.)tibetsun\.com$ (^|\.)tibetsupportgroup\.org$ (^|\.)tibetswiss\.ch$ (^|\.)tibettelegraph\.com$ (^|\.)tibettimes\.net$ (^|\.)tibet\.to$ (^|\.)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$ (^|\.)t\.me$ (^|\.)tmi\.me$ (^|\.)tmpp\.org$ (^|\.)tn1\.shemalez\.com$ (^|\.)tn2\.shemalez\.com$ (^|\.)tn3\.shemalez\.com$ (^|\.)tnaflix\.com$ (^|\.)tngrnow\.com$ (^|\.)tngrnow\.net$ (^|\.)tnp\.org$ (^|\.)togetter\.com$ (^|\.)toh\.info$ (^|\.)tokyo-247\.com$ (^|\.)tokyocn\.com$ (^|\.)tokyo-hot\.com$ (^|\.)tokyo-porn-tube\.com$ (^|\.)tongil\.or\.kr$ (^|\.)tono-oka\.jp$ (^|\.)tonyyan\.net$ (^|\.)toodoc\.com$ (^|\.)toonel\.net$ (^|\.)top10vpn\.com$ (^|\.)top81\.ws$ (^|\.)topbtc\.com$ (^|\.)topic\.youthwant\.com\.tw$ (^|\.)topnews\.in$ (^|\.)to-porno\.com$ (^|\.)toppornsites\.com$ (^|\.)topshareware\.com$ (^|\.)topsy\.com$ (^|\.)toptip\.ca$ (^|\.)top\.tv$ (^|\.)tora\.to$ (^|\.)tor\.blingblingsquad\.net$ (^|\.)torcn\.com$ (^|\.)tor\.cn\.uptodown\.com$ (^|\.)torguard\.net$ (^|\.)torproject\.org$ (^|\.)torrentprivacy\.com$ (^|\.)torrentproject\.se$ (^|\.)torrenty\.org$ (^|\.)torrentz\.eu$ (^|\.)tor\.updatestar\.com$ (^|\.)torvpn\.com$ (^|\.)t\.orzdream\.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$ (^|\.)transparency\.org$ (^|\.)trans\.wenweipo\.com$ (^|\.)treemall\.com\.tw$ (^|\.)trendsmap\.com$ (^|\.)trialofccp\.org$ (^|\.)trickip\.net$ (^|\.)trickip\.org$ (^|\.)trimondi\.de$ (^|\.)trouw\.nl$ (^|\.)trtc\.com\.tw$ (^|\.)trt\.net\.tr$ (^|\.)truebuddha-md\.org$ (^|\.)trulyergonomic\.com$ (^|\.)truth101\.co\.tv$ (^|\.)truthontour\.org$ (^|\.)truveo\.com$ (^|\.)tryheart\.jp$ (^|\.)tsctv\.net$ (^|\.)tsdr\.uspto\.gov$ (^|\.)tsemtulku\.com$ (^|\.)tsquare\.tv$ (^|\.)tsunagarumon\.com$ (^|\.)tsu\.org\.tw$ (^|\.)tt1069\.com$ (^|\.)tttan\.com$ (^|\.)ttvnw\.net$ (^|\.)tu8964\.com$ (^|\.)tubaholic\.com$ (^|\.)tube8\.com$ (^|\.)tube911\.com$ (^|\.)tube\.com$ (^|\.)tubecup\.com$ (^|\.)tubegals\.com$ (^|\.)tubeislam\.com$ (^|\.)tubepornclassic\.com$ (^|\.)tubestack\.com$ (^|\.)tubewolf\.com$ (^|\.)tuibeitu\.net$ (^|\.)tuidang\.net$ (^|\.)tuidang\.org$ (^|\.)tuidang\.se$ (^|\.)tui\.orzdream\.com$ (^|\.)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$ (^|\.)tvants\.com$ (^|\.)tvboxnow\.com$ (^|\.)tv\.com$ (^|\.)tvider\.com$ (^|\.)tvmost\.com\.hk$ (^|\.)tvplayvideos\.com$ (^|\.)tvunetworks\.com$ (^|\.)tw01\.org$ (^|\.)twaitter\.com$ (^|\.)tw\.answers\.yahoo\.com$ (^|\.)twapperkeeper\.com$ (^|\.)twaud\.io$ (^|\.)twavi\.com$ (^|\.)twbbs\.net\.tw$ (^|\.)twbbs\.org$ (^|\.)twbbs\.tw$ (^|\.)tw\.bid\.yahoo\.com$ (^|\.)tw-blog\.com$ (^|\.)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$ (^|\.)tw\.gigacircle\.com$ (^|\.)twgreatdaily\.com$ (^|\.)tw\.hao123\.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$ (^|\.)twimg\.edgesuite\.net$ (^|\.)twindexx\.com$ (^|\.)twip\.me$ (^|\.)twipple\.jp$ (^|\.)tw\.iqiyi\.com$ (^|\.)twishort\.com$ (^|\.)twistar\.cc$ (^|\.)twisterio\.com$ (^|\.)twister\.net\.co$ (^|\.)twisternow\.com$ (^|\.)twistory\.net$ (^|\.)twit2d\.com$ (^|\.)twitbrowser\.net$ (^|\.)twitcause\.com$ (^|\.)twitchcdn\.net$ (^|\.)twitch\.tv$ (^|\.)twitgether\.com$ (^|\.)twitgoo\.com$ (^|\.)twitiq\.com$ (^|\.)twitlonger\.com$ (^|\.)twitmania\.com$ (^|\.)twitoaster\.com$ (^|\.)twitonmsn\.com$ (^|\.)twitpic\.com$ (^|\.)twitstat\.com$ (^|\.)twittbot\.net$ (^|\.)twitter4j\.org$ (^|\.)twitter\.com$ (^|\.)twittercounter\.com$ (^|\.)twitterfeed\.com$ (^|\.)twittergadget\.com$ (^|\.)twitter\.jp$ (^|\.)twitterkr\.com$ (^|\.)twittermail\.com$ (^|\.)twitterrific\.com$ (^|\.)twittertim\.es$ (^|\.)twitthat\.com$ (^|\.)twitturk\.com$ (^|\.)twitturly\.com$ (^|\.)twitvid\.com$ (^|\.)twitzap\.com$ (^|\.)twiyia\.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$ (^|\.)twnorth\.org\.tw$ (^|\.)tw-npo\.org$ (^|\.)twskype\.com$ (^|\.)twstar\.net$ (^|\.)tw\.streetvoice\.com$ (^|\.)twtkr\.com$ (^|\.)tw\.tomonews\.net$ (^|\.)twtr2src\.ogaoga\.org$ (^|\.)twtrland\.com$ (^|\.)twt\.tl$ (^|\.)twttr\.com$ (^|\.)twurl\.nl$ (^|\.)tw\.voa\.mobi$ (^|\.)twyac\.org$ (^|\.)tw\.yahoo\.com$ (^|\.)txxx\.com$ (^|\.)tycool\.com$ (^|\.)typepad\.com$ (^|\.)u15\.info$ (^|\.)u9un\.com$ (^|\.)ub0\.cc$ (^|\.)ubddns\.org$ (^|\.)uberproxy\.net$ (^|\.)ucdc1998\.org$ (^|\.)uchicago\.edu$ (^|\.)uc-japan\.org$ (^|\.)uderzo\.it$ (^|\.)udnbkk\.com$ (^|\.)udn\.com$ (^|\.)udn\.com\.tw$ (^|\.)uforadio\.com\.tw$ (^|\.)ufreevpn\.com$ (^|\.)ugo\.com$ (^|\.)uhdwallpapers\.org$ (^|\.)uhrp\.org$ (^|\.)uighurbiz\.net$ (^|\.)uighur\.narod\.ru$ (^|\.)uighur\.nl$ (^|\.)ukcdp\.co\.uk$ (^|\.)ukliferadio\.co\.uk$ (^|\.)uku\.im$ (^|\.)ulike\.net$ (^|\.)ulop\.net$ (^|\.)ultravpn\.fr$ (^|\.)ultraxs\.com$ (^|\.)umich\.edu$ (^|\.)unblock\.cn\.com$ (^|\.)unblockdmm\.com$ (^|\.)unblocker\.yt$ (^|\.)unblocksit\.es$ (^|\.)unblock-us\.com$ (^|\.)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$ (^|\.)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$ (^|\.)us\.to$ (^|\.)ustream\.tv$ (^|\.)usunitednews\.com$ (^|\.)usus\.cc$ (^|\.)utopianpal\.com$ (^|\.)uu-gg\.com$ (^|\.)uukanshu\.com$ (^|\.)uvwxyz\.xyz$ (^|\.)uwants\.com$ (^|\.)uwants\.net$ (^|\.)uyghuramerican\.org$ (^|\.)uyghurcanadiansociety\.org$ (^|\.)uyghurcongress\.org$ (^|\.)uyghur\.co\.uk$ (^|\.)uyghurensemble\.co\.uk$ (^|\.)uyghur-j\.org$ (^|\.)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$ (^|\.)vcfbuilder\.org$ (^|\.)vcf-online\.org$ (^|\.)vds\.rightster\.com$ (^|\.)vegasred\.com$ (^|\.)vegas\.williamhill\.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$ (^|\.)vidble\.com$ (^|\.)video\.aol\.ca$ (^|\.)video\.aol\.com$ (^|\.)video\.aol\.co\.uk$ (^|\.)video\.ap\.org$ (^|\.)videobam\.com$ (^|\.)videodetective\.com$ (^|\.)video\.fdbox\.com$ (^|\.)video\.foxbusiness\.com$ (^|\.)videomega\.tv$ (^|\.)videomo\.com$ (^|\.)video\.pbs\.org$ (^|\.)videopediaworld\.com$ (^|\.)videopress\.com$ (^|\.)video\.yahoo\.com$ (^|\.)vidinfo\.org$ (^|\.)vid\.me$ (^|\.)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$ (^|\.)vnet\.link$ (^|\.)vn\.hao123\.com$ (^|\.)voa-11\.akacast\.akamaistream\.net$ (^|\.)voacantonese\.com$ (^|\.)voachineseblog\.com$ (^|\.)voachinese\.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$ (^|\.)vpn4all\.com$ (^|\.)vpn\.ac$ (^|\.)vpnaccount\.org$ (^|\.)vpnaccounts\.com$ (^|\.)vpnbook\.com$ (^|\.)vpn\.cjb\.net$ (^|\.)vpn\.cmu\.edu$ (^|\.)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$ (^|\.)vpn\.sv\.cmu\.edu$ (^|\.)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$ (^|\.)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$ (^|\.)washingtonpost\.com$ (^|\.)watch8x\.com$ (^|\.)watchinese\.com$ (^|\.)watchmygf\.net$ (^|\.)wattpad\.com$ (^|\.)waveprotocol\.org$ (^|\.)wav\.tv$ (^|\.)waymo\.com$ (^|\.)wda\.gov\.tw$ (^|\.)wdf5\.com$ (^|\.)wearehairy\.com$ (^|\.)wearn\.com$ (^|\.)web2project\.net$ (^|\.)webbang\.net$ (^|\.)web\.dev$ (^|\.)webevader\.org$ (^|\.)webfreer\.com$ (^|\.)webjb\.org$ (^|\.)weblagu\.com$ (^|\.)webmproject\.org$ (^|\.)webrtc\.org$ (^|\.)webrush\.net$ (^|\.)website\.informer\.com$ (^|\.)websitepulse\.com$ (^|\.)webs-tv\.net$ (^|\.)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$ (^|\.)w\.idaiwan\.com$ (^|\.)widevine\.com$ (^|\.)wikaba\.com$ (^|\.)wiki\.cnitter\.com$ (^|\.)wiki\.esu\.im$ (^|\.)wiki\.gamerp\.jp$ (^|\.)wiki\.jqueryui\.com$ (^|\.)wiki\.keso\.cn$ (^|\.)wikileaks\.ch$ (^|\.)wikileaks\.com$ (^|\.)wikileaks\.de$ (^|\.)wikileaks\.eu$ (^|\.)wikileaks-forum\.com$ (^|\.)wikileaks\.lu$ (^|\.)wikileaks\.org$ (^|\.)wikileaks\.pl$ (^|\.)wikilivres\.info$ (^|\.)wikimapia\.org$ (^|\.)wiki\.moegirl\.org$ (^|\.)wiki\.oauth\.net$ (^|\.)wikipedia\.org$ (^|\.)wiki\.phonegap\.com$ (^|\.)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$ (^|\.)wnacg\.com$ (^|\.)wnacg\.org$ (^|\.)wn\.com$ (^|\.)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$ (^|\.)wo\.tc$ (^|\.)wow\.com$ (^|\.)wowgirls\.com$ (^|\.)wowlegacy\.ml$ (^|\.)wow-life\.net$ (^|\.)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$ (^|\.)wsjhk\.com$ (^|\.)wsj\.net$ (^|\.)wtbn\.org$ (^|\.)wtfpeople\.com$ (^|\.)wuerkaixi\.com$ (^|\.)wufafangwen\.com$ (^|\.)wufi\.org\.tw$ (^|\.)wuguoguang\.com$ (^|\.)wujieliulan\.com$ (^|\.)wujie\.net$ (^|\.)wukangrui\.net$ (^|\.)wuw\.red$ (^|\.)wuyanblog\.com$ (^|\.)wwitv\.com$ (^|\.)www1\.american\.edu$ (^|\.)www1\.biz$ (^|\.)www2\.ohchr\.org$ (^|\.)www2\.rocketbbs\.com$ (^|\.)www\.abclite\.net$ (^|\.)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$ (^|\.)wwwhost\.biz$ (^|\.)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\.metro\.taipei$ (^|\.)www\.monlamit\.org$ (^|\.)www\.moztw\.org$ (^|\.)www\.m-sport\.co\.uk$ (^|\.)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\.wangruowang\.org$ (^|\.)www\.wan-press\.org$ (^|\.)www\.websnapr\.com$ (^|\.)www\.zensur\.freerk\.com$ (^|\.)wzyboy\.im$ (^|\.)x1949x\.com$ (^|\.)x24hr\.com$ (^|\.)x365x\.com$ (^|\.)xanga\.com$ (^|\.)x-art\.com$ (^|\.)xa\.yimg\.com$ (^|\.)xbabe\.com$ (^|\.)x-berry\.com$ (^|\.)xbookcn\.com$ (^|\.)xbtce\.com$ (^|\.)xcafe\.in$ (^|\.)xcity\.jp$ (^|\.)x\.company$ (^|\.)xcritic\.com$ (^|\.)xda-developers\.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$ (^|\.)x-wall\.org$ (^|\.)xxbbx\.com$ (^|\.)xxlmovies\.com$ (^|\.)xxuz\.com$ (^|\.)xxx\.com$ (^|\.)xxxfuckmom\.com$ (^|\.)xxxx\.com\.au$ (^|\.)xxx\.xxx$ (^|\.)xxxy\.biz$ (^|\.)xxxy\.info$ (^|\.)xxxymovies\.com$ (^|\.)xysblogs\.org$ (^|\.)xys\.dxiong\.com$ (^|\.)xys\.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$ (^|\.)yes123\.com\.tw$ (^|\.)yesasia\.com$ (^|\.)yesasia\.com\.hk$ (^|\.)yes-news\.com$ (^|\.)yespornplease\.com$ (^|\.)yes\.xxx$ (^|\.)yeyeclub\.com$ (^|\.)ygto\.com$ (^|\.)yhcw\.net$ (^|\.)yibada\.com$ (^|\.)yibaochina\.com$ (^|\.)yidio\.com$ (^|\.)yigeni\.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$ (^|\.)youdontcare\.com$ (^|\.)you-get\.org$ (^|\.)youjizz\.com$ (^|\.)youmaker\.com$ (^|\.)youngpornvideos\.com$ (^|\.)youngspiration\.hk$ (^|\.)youpai\.org$ (^|\.)youporn\.com$ (^|\.)youporngay\.com$ (^|\.)yourepeat\.com$ (^|\.)your-freedom\.net$ (^|\.)yourlisten\.com$ (^|\.)yourlust\.com$ (^|\.)yourprivatevpn\.com$ (^|\.)yourtrap\.com$ (^|\.)yousendit\.com$ (^|\.)youshun12\.com$ (^|\.)youthnetradio\.org$ (^|\.)youtu\.be$ (^|\.)youtubecn\.com$ (^|\.)youtube\.com$ (^|\.)youtubeeducation\.com$ (^|\.)youtubegaming\.com$ (^|\.)youtube-nocookie\.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$ (^|\.)zhanbin\.net$ (^|\.)zhangboli\.net$ (^|\.)zhangtianliang\.com$ (^|\.)zhanlve\.org$ (^|\.)zhao\.1984\.city$ (^|\.)zhao\.jinhai\.de$ (^|\.)zh\.bitterwinter\.org$ (^|\.)zh\.ecdm\.wikia\.com$ (^|\.)zhenghui\.org$ (^|\.)zhengjian\.org$ (^|\.)zhengwunet\.org$ (^|\.)zhenlibu1984\.com$ (^|\.)zhenlibu\.info$ (^|\.)zhenxiang\.biz$ (^|\.)zhinengluyou\.com$ (^|\.)zhongguo\.ca$ (^|\.)zhongguorenquan\.org$ (^|\.)zhongguotese\.net$ (^|\.)zhongmeng\.org$ (^|\.)zhoushuguang\.com$ (^|\.)zh\.pokerstrategy\.com$ (^|\.)zh\.pttpedia\.wikia\.com$ (^|\.)zhreader\.com$ (^|\.)zhuangbi\.me$ (^|\.)zhuanxing\.cn$ (^|\.)zhuatieba\.com$ (^|\.)zhuichaguoji\.org$ (^|\.)zh\.uncyclopedia\.wikia\.com$ (^|\.)zh\.wikinews\.org$ (^|\.)zh\.wikisource\.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$ (^|\.)zuobiao\.me$ (^|\.)zuo\.la$ (^|\.)zuola\.com$ (^|\.)zvereff\.com$ (^|\.)zynaima\.com$ (^|\.)zynamics\.com$ (^|\.)zyns\.com$ (^|\.)zyzc9\.com$ (^|\.)zzcartoon\.com$ (^|\.)zzcloud\.me$ (^|\.)zzux\.com$ # Amazon (^|\.)amazon\.co\.jp$ (^|\.)amazon\.com$ (^|\.)amazonaws\.com$ 13.32.0.0/15 13.35.0.0/17 18.184.0.0/15 18.194.0.0/15 18.208.0.0/13 18.232.0.0/14 52.58.0.0/15 52.74.0.0/16 52.77.0.0/16 52.84.0.0/15 52.200.0.0/13 54.93.0.0/16 54.156.0.0/14 54.226.0.0/15 54.230.156.0/22 # BBC (^|\.)\w*uk-live\w*\.\w*$ (^|\.)bbc\.co$ (^|\.)bbc\.com$ # Discord (^|\.)discord\.gg$ (^|\.)discord\.media$ (^|\.)discordapp\.com$ (^|\.)discordapp\.net$ # Facebook (^|\.)facebook\.com$ (^|\.)fb\.com$ (^|\.)fb\.me$ (^|\.)fbcdn\.com$ (^|\.)fbcdn\.net$ 31.13.24.0/21 31.13.64.0/18 45.64.40.0/22 66.220.144.0/20 69.63.176.0/20 69.171.224.0/19 74.119.76.0/22 103.4.96.0/22 129.134.0.0/17 157.240.0.0/17 173.252.64.0/18 179.60.192.0/22 185.60.216.0/22 204.15.20.0/22 # Github (^|\.)github\.com$ (^|\.)github\.io$ (^|\.)githubapp\.com$ (^|\.)githubassets\.com$ (^|\.)githubusercontent\.com$ (^|\.)s3\.amazonaws\.com$ # Google (^|\.)1e100\.net$ (^|\.)2mdn\.net$ (^|\.)app-measurement\.net$ (^|\.)g\.co$ (^|\.)ggpht\.com$ (^|\.)goo\.gl$ (^|\.)googleapis\.cn$ (^|\.)googleapis\.com$ (^|\.)gstatic\.cn$ (^|\.)gstatic\.com$ (^|\.)gvt0\.com$ (^|\.)gvt1\.com$ (^|\.)gvt2\.com$ (^|\.)gvt3\.com$ (^|\.)xn--ngstr-lra8j\.com$ (^|\.)youtu\.be$ (^|\.)youtube-nocookie\.com$ (^|\.)youtube\.com$ (^|\.)yt\.be$ (^|\.)ytimg\.com$ 74.125.0.0/16 173.194.0.0/16 # Instagram (^|\.)cdninstagram\.com$ (^|\.)instagram\.com$ (^|\.)instagr\.am$ (^|\.)akamaihd\.net$ # Kakao Talk (^|\.)kakao\.com$ (^|\.)kakao\.co\.kr$ (^|\.)kakaocdn\.net$ 1.201.0.0/24 27.0.236.0/22 103.27.148.0/22 103.246.56.0/22 110.76.140.0/22 113.61.104.0/22 # Line (^|\.)lin\.ee$ (^|\.)line-apps\.com$ (^|\.)line-cdn\.net$ (^|\.)line-scdn\.net$ (^|\.)line\.me$ (^|\.)line\.naver\.jp$ (^|\.)nhncorp\.jp$ 103.2.28.0/24 103.2.30.0/23 119.235.224.0/24 119.235.232.0/24 119.235.235.0/24 119.235.236.0/23 147.92.128.0/17 203.104.128.0/19 # Microsoft (^|\.)1drv\.com$ (^|\.)aadrm\.com$ (^|\.)acompli\.com$ (^|\.)acompli\.net$ (^|\.)aka\.ms$ (^|\.)akadns\.net$ (^|\.)aspnetcdn\.com$ (^|\.)assets-yammer\.com$ (^|\.)azure\.com$ (^|\.)azure\.net$ (^|\.)azureedge\.net$ (^|\.)azurerms\.com$ (^|\.)bing\.com$ (^|\.)cloudapp\.net$ (^|\.)cloudappsecurity\.com$ (^|\.)edgesuite\.net$ (^|\.)getmicrosoftkey\.com$ (^|\.)gfx\.ms$ (^|\.)hotmail\.com$ (^|\.)live\.com$ (^|\.)live\.net$ (^|\.)lync\.com$ (^|\.)microsoft\.com$ (^|\.)microsoftazuread-sso\.com$ (^|\.)microsoftonline-p\.com$ (^|\.)microsoftonline-p\.net$ (^|\.)microsoftonline\.com$ (^|\.)microsoftstream\.com$ (^|\.)msappproxy\.net$ (^|\.)msauth\.net$ (^|\.)msauthimages\.net$ (^|\.)msecnd\.net$ (^|\.)msedge\.net$ (^|\.)msft\.net$ (^|\.)msftauth\.net$ (^|\.)msftauthimages\.net$ (^|\.)msftidentity\.com$ (^|\.)msidentity\.com$ (^|\.)msn\.com$ (^|\.)msocdn\.com$ (^|\.)msocsp\.com$ (^|\.)mstea\.ms$ (^|\.)o365weve\.com$ (^|\.)oaspapps\.com$ (^|\.)office\.com$ (^|\.)office\.net$ (^|\.)office365\.com$ (^|\.)officecdn-microsoft-com\.akamaized\.net$ (^|\.)officeppe\.net$ (^|\.)omniroot\.com$ (^|\.)onedrive\.com$ (^|\.)onenote\.com$ (^|\.)onenote\.net$ (^|\.)onestore\.ms$ (^|\.)onmicrosoft\.com$ (^|\.)outlook\.com$ (^|\.)outlookmobile\.com$ (^|\.)phonefactor\.net$ (^|\.)public-trust\.com$ (^|\.)s-microsoft\.com$ (^|\.)sfbassets\.com$ (^|\.)sfx\.ms$ (^|\.)sharepoint\.com$ (^|\.)sharepointonline\.com$ (^|\.)skype\.com$ (^|\.)skypeassets\.com$ (^|\.)skypeforbusiness\.com$ (^|\.)staffhub\.ms$ (^|\.)svc\.ms$ (^|\.)sway-cdn\.com$ (^|\.)sway-extensions\.com$ (^|\.)sway\.com$ (^|\.)trafficmanager\.net$ (^|\.)uservoice\.com$ (^|\.)virtualearth\.net$ (^|\.)visualstudio\.com$ (^|\.)windows-ppe\.net$ (^|\.)windows\.com$ (^|\.)windows\.net$ (^|\.)windowsazure\.com$ (^|\.)windowsupdate\.com$ (^|\.)wunderlist\.com$ (^|\.)yammer\.com$ (^|\.)yammerusercontent\.com$ # MytvSUPER (^|\.)\w*nowtv100\w*\.\w*$ (^|\.)\w*rthklive\w*\.\w*$ (^|\.)mytvsuper\.com$ # Netflix (^|\.)netflix\.com$ (^|\.)netflix\.net$ (^|\.)nflxext\.com$ (^|\.)nflximg\.com$ (^|\.)nflximg\.net$ (^|\.)nflxvideo\.net$ 8.41.4.0/24 23.246.0.0/18 37.77.184.0/21 45.57.0.0/17 64.120.128.0/17 66.197.128.0/17 69.53.224.0/19 108.175.32.0/20 185.2.220.0/22 185.9.188.0/22 192.173.64.0/18 198.38.96.0/19 198.45.48.0/20 207.45.72.0/22 208.75.76.0/22 # OneDrive (^|\.)\w*1drv\w*\.\w*$ (^|\.)\w*onedrive\w*\.\w*$ (^|\.)\w*skydrive\w*\.\w*$ (^|\.)livefilestore\.com$ (^|\.)oneclient\.sfx\.ms$ (^|\.)onedrive\.com$ (^|\.)onedrive\.live\.com$ (^|\.)photos\.live\.com$ (^|\.)skydrive\.wns\.windows\.com$ (^|\.)spoprod-a\.akamaihd\.net$ (^|\.)storage\.live.com$ (^|\.)storage\.msn.com$ # Pixiv (^|\.)pixiv\.net$ (^|\.)pximg\.net$ # Porn (^|\.)\w*porn\w*\.\w*$ (^|\.)8teenxxx\.com$ (^|\.)ahcdn\.com$ (^|\.)bcvcdn\.com$ (^|\.)bongacams\.com$ (^|\.)chaturbate\.com$ (^|\.)dditscdn\.com$ (^|\.)livejasmin\.com$ (^|\.)rdtcdn\.com$ (^|\.)redtube\.com$ (^|\.)sb-cd\.com$ (^|\.)spankbang\.com$ (^|\.)t66y\.com$ (^|\.)xhamster\.com$ (^|\.)xnxx-cdn\.com$ (^|\.)xnxx\.com$ (^|\.)xvideos-cdn\.com$ (^|\.)xvideos\.com$ (^|\.)ypncdn\.com$ # ResiloSync (^|\.)config\.getsync\.com$ (^|\.)config\.resilio\.com$ 54.235.182.157/32 107.182.230.198/32 173.244.209.150/32 173.244.217.42/32 209.95.56.60/32 # Steam (^|\.)fanatical\.com$ (^|\.)humblebundle\.com$ (^|\.)steamcommunity\.com$ (^|\.)steampowered\.com$ (^|\.)steamstatic\.com$ # Telegram (^|\.)t\.me$ (^|\.)tdesktop\.com$ (^|\.)telegra\.ph$ (^|\.)telegram\.me$ (^|\.)telegram\.org$ 91.108.0.0/16 109.239.140.0/24 149.154.160.0/20 2001:67c:4e8::/48 2001:b28:f23d::/48 2001:b28:f23f::/48 # Twitch (^|\.)twitch\.tv$ (^|\.)ttvnw\.net$ (^|\.)jtvnw\.net$ (^|\.)akamaized\.net$ # Twitter (^|\.)t\.co$ (^|\.)twimg\.co$ (^|\.)twimg\.com$ (^|\.)twimg\.org$ # Whatsapp 18.194.0.0/15 34.224.0.0/12 54.242.0.0/15 50.22.198.204/30 208.43.122.128/27 108.168.174.0/16 173.192.231.32/27 158.85.5.192/27 174.37.243.0/16 158.85.46.128/27 173.192.222.160/27 184.173.128.0/17 158.85.224.160/27 75.126.150.0/16 69.171.235.0/16 #飞流直播 (^|\.)neulion\.com$ (^|\.)icntv\.xyz$ (^|\.)flzbcdn\.xyz$ #华文电视 (^|\.)ocnttv\.com$ ================================================ FILE: Trojan/File/gfwlist.txt ================================================ W0F1dG9Qcm94eSAwLjIuOV0KISBDaGVja3N1bTogYk1zbU53UENncXZCRjJzWGZu Y2xoZwohIEV4cGlyZXM6IDZoCiEgVGl0bGU6IEdGV0xpc3Q0TEwKISBHRldMaXN0 IHdpdGggRVZFUllUSElORyBpbmNsdWRlZAohIExhc3QgTW9kaWZpZWQ6IFNhdCwg MjIgU2VwIDIwMTggMTc6MjE6NDcgLTA0MDAKIQohIEhvbWVQYWdlOiBodHRwczov L2dpdGh1Yi5jb20vZ2Z3bGlzdC9nZndsaXN0CiEgTGljZW5zZTogaHR0cHM6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvbGdwbC0yLjEudHh0CiEK ISBHRldMaXN0IGlzIHVubGlrZWx5IHRvIGZ1bGx5IGNvbXByaXNlIHRoZSByZWFs CiEgcnVsZXMgYmVpbmcgZGVwbG95ZWQgaW5zaWRlIEdGVyBzeXN0ZW0uIFdlIHRy eQohIG91ciBiZXN0IHRvIGtlZXAgdGhlIGxpc3QgdXAgdG8gZGF0ZS4gUGxlYXNl CiEgY29udGFjdCB1cyByZWdhcmRpbmcgVVJMIHN1Ym1pc3Npb24gLyByZW1vdmFs LAohIG9yIHN1Z2dlc3Rpb24gLyBlbmhhbmNlbWVudCBhdCBpc3N1ZSB0cmFja2Vy OgohIGh0dHBzOi8vZ2l0aHViLmNvbS9nZndsaXN0L2dmd2xpc3QvaXNzdWVzLy4K CiEtLS0tLS0tLS00MDMvNDUxLzUyMCAmIFVSTCBSZWRpcmVjdHMtLS0tLS0tLS0K IS0tZWhlbnRhaQp8aHR0cDovLzg1LjE3LjczLjMxLwohLS18fGFkb3JhbWEuY29t Cnx8YWduZXNiLmZyCnx8YWtpYmEtd2ViLmNvbQp8fGFsdHJlYy5jb20KfHxhcGFy dG1lbnRyYXRpbmdzLmNvbQp8fGFwYXJ0bWVudHMuY29tCnx8YXJlbmEudGFpcGVp Cnx8YXNpYW5zcGlzcy5jb20KfHxhc3NpbXAub3JnCnx8YXRoZW5hZWl6b3UuY29t Cnx8YXp1YnUudHYKfHxiYW5rbW9iaWxldmliZS5jb20KfHxiYW5vcnRlLmNvbQp8 fGJhc2gtaGFja2Vycy5vcmcKfHxiZWVnLmNvbQp8fGdsb2JhbC5iaW5nLmNvbQp8 fGJsb29tYmVyZ3ZpZXcuY29tCnx8Ym9va3RvcGlhLmNvbS5hdQp8fGJveXNtYXN0 ZXIuY29tCnx8YnluZXQuY28uaWwKfHxjYXJmYXguY29tCi5jYXNpbm9iZWxsaW5p LmNvbQp8fGNhc2lub2JlbGxpbmkuY29tCnx8Y2VudGF1cm8uY29tLmJyCnx8Y2hv Yml0LmNjCnx8Y2xlYXJzdXJhbmNlLmNvbQp8fGltYWdlcy5jb21pY28udHcKfHxz dGF0aWMuY29taWNvLnR3Cnx8Y29zdGNvLmNvbQp8fGNyb3NzZmlyZS5jby5rcgp8 fGQycGFzcy5jb20KfHxkYXJwYS5taWwKfHxkYXdhbmdpZGMuY29tCnx8ZGVlemVy LmNvbQp8fGRlc2lwcm8uZGUKfHxkaW5nY2hpbi5jb20udHcKfHxkaXNjb3JkYXBw LmNvbQp8fGRpc2NvcmRhcHAubmV0Cnx8ZGlzaC5jb20KfGh0dHA6Ly9pbWcuZGxz aXRlLmpwLwp8fGRtNTMwLm5ldApzaGFyZS5kbWh5Lm9yZwpAQHxodHRwczovL3No YXJlLmRtaHkub3JnCnx8ZG1tLmNvLmpwCnxodHRwOi8vd3d3LmRtbS5jb20vbmV0 Z2FtZQp8fGRudm9kLnR2Cnx8ZHZkcGFjLmNvbQp8fGVlc3RpLmVlCnx8ZXN1cmFu Y2UuY29tCi5leHBla3QuY29tCnx8ZXhwZWt0LmNvbQouZXh0bWF0cml4LmNvbQp8 fGV4dG1hdHJpeC5jb20KfHxmYWtrdS5uZXQKfHxmYXN0cGljLnJ1Cnx8ZmlsZXNv ci5jb20KfHxmaW5hbmNldHdpdHRlci5jb20KfHxmbGlwYm9hcmQuY29tCnx8Zmxp dHRvLmNvbQp8fGZuYWMuYmUKfHxmbmFjLmNvbQp8fGZ1bmt5aW1nLmNvbQp8fGZ4 bmV0d29ya3MuY29tCnx8Zy1hcmVhLm9yZwp8fGdldHR5aW1hZ2VzLmNvbQp8fGdl dHVwbG9hZGVyLmNvbQohLS18aHR0cHM6Ly9naXRodWIuY29tL3Byb2dyYW10aGlu ay96aGFvCnxodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vcHJvZ3Jh bXRoaW5rL3poYW8KfHxnbGFzczguZXUKfHxnbHlwZS5jb20KfHxnbzE0MS5jb20K fHxndW8ubWVkaWEKfHxoYXV0ZWxvb2suY29tCnx8aGF1dGVsb29rY2RuLmNvbQp8 fHdlZ28uaGVyZS5jb20KfHxobXZkaWdpdGFsLmNhCnx8aG12ZGlnaXRhbC5jb20K fHxob21lZGVwb3QuY29tCnx8aG9vdmVycy5jb20KfHxodWx1LmNvbQp8fGh1bHVp bS5jb20KfGh0dHA6Ly9zZWN1cmUuaHVzdGxlci5jb20KfGh0dHA6Ly9odXN0bGVy Y2FzaC5jb20KfGh0dHA6Ly93d3cuaHVzdGxlcmNhc2guY29tCnx8aHlicmlkLWFu YWx5c2lzLmNvbQp8fGNkbiouaS1zY21wLmNvbQp8fGlsb3ZlbG9uZ3RvZXMuY29t CnxodHRwOi8vaW1nbWVnYS5jb20vKi5naWYuaHRtbAp8aHR0cDovL2ltZ21lZ2Eu Y29tLyouanBnLmh0bWwKfGh0dHA6Ly9pbWdtZWdhLmNvbS8qLmpwZWcuaHRtbAp8 aHR0cDovL2ltZ21lZ2EuY29tLyoucG5nLmh0bWwKfGh0dHA6Ly9pbWd1ci5jb20v dXBsb2FkCnxodHRwczovL2ltZ3VyLmNvbS91cGxvYWQKfHxpbWxpdmUuY29tCnx8 amF2aHViLm5ldAp8fGphdmh1Z2UuY29tCi5qYXZsaWJyYXJ5LmNvbQp8fGphdmxp YnJhcnkuY29tCnx8amNwZW5uZXkuY29tCnx8amltcy5uZXQKfHxqdWt1am8tY2x1 Yi5jb20KfHxqdWxpZXBvc3QuY29tCnx8a2F3YWlpa2F3YWlpLmpwCnx8a2VuZGF0 aXJlLmNvbQp8fGtoYXRyaW1hemEub3JnCnx8a2tib3guY29tCnx8bGVpc3VyZXBy by5jb20KfHxsaWZlbWlsZXMuY29tCnx8bG9uZ3RvZXMuY29tCnx8bG92ZXR2c2hv dy5jb20KfGh0dHA6Ly93d3cubS1zcG9ydC5jby51awp8fG1hY2dhbWVzdG9yZS5j b20KfHxtYWRvbm5hLWF2LmNvbQp8fG1hbmdhZm94LmNvbQp8fG1hbmdhZm94Lm1l Cnx8bWFudGEuY29tCnx8bWF0b21lLXBsdXMuY29tCnx8bWF0b21lLXBsdXMubmV0 Cnx8bWF0dHdpbGNveC5uZXQKfHxtZXRhcnRodW50ZXIuY29tCnx8bWZ4bWVkaWEu Y29tCnx8a2IubW9uaXRvcndhcmUuY29tCnx8bW9uc3Rlci5jb20KfHxtb29keXou Y29tCnx8bW9vbmJpbmdvLmNvbQp8fG1vcy5ydQp8fG1zaGEuZ292Cnx8bXV6dS50 dgp8fG12Zy5qcAoubXliZXQuY29tCnx8bXliZXQuY29tCnx8bmF0aW9ud2lkZS5j b20KfGh0dHA6Ly93d3cubmJjLmNvbS9saXZlCnx8bmVvLW1pcmFjbGUuY29tCnx8 bmV0ZmxpeC5jb20KfHxuZmx4aW1nLmNvbQp8fG5mbHhpbWcubmV0Cnx8bmZseGV4 dC5jb20KfHxuZmx4c28ubmV0Cnx8bmZseHZpZGVvLm5ldAp8fG5pYy5nb3YKfGh0 dHA6Ly9tby5uaWdodGxpZmUxNDEuY29tCnx8bm9yZHN0cm9tLmNvbQp8fG5vcmRz dHJvbWltYWdlLmNvbQp8fG5vcmRzdHJvbXJhY2suY29tCnx8bm90dGluZ2hhbXBv c3QuY29tCnx8bnRkdHYuY3oKfHxzMS5udWRlenouY29tCnx8bnVzYXRyaXAuY29t Cnx8bnV1dmVtLmNvbQp8fG9tbmk3LmpwCnx8b25hcHAuY29tCiEtLVdlIGFyZSBj b25mdXNlZCBhcyB3ZWxsCnx8b250cmFjLmNvbQpAQHxodHRwOi8vYmxvZy5vbnRy YWMuY29tCnx8cGFuZG9yYS5jb20KLnBhbmRvcmEudHYKfHxwYXJrYW5za3kuY29t Cnx8cGhtc29jaWV0eS5vcmcKfGh0dHA6Ly8qLnBpbWcudHcvCnx8cHVyZTE4LmNv bQp8fHB5dG9yY2gub3JnCnx8cXEuY28uemEKfHxyMTguY29tCnxodHRwOi8vcmFk aWtvLmpwCnx8cmFtY2l0eS5jb20uYXUKfHxyZC5jb20KfHxyZGlvLmNvbQp8aHR0 cHM6Ly9yaXNldXAubmV0Cnx8c2FkaXN0aWMtdi5jb20KfGh0dHA6Ly9jZG4qLnNl YXJjaC54eHgvCnx8c2hpa3NoYS5jb20KfHxzbGFja2VyLmNvbQp8fHNtLW1pcmFj bGUuY29tCnx8c295bGVudG5ld3Mub3JnCnx8c3BvdGlmeS5jb20KfHxzcHJlYWRz aGlydC5lcwp8fHNwcmluZ2JvYXJkcGxhdGZvcm0uY29tCnx8c3ByaXRlLm9yZwpA QHxodHRwOi8vc3RvcmUuc3ByaXRlLm9yZwp8fHN1cGVyb2theWFtYS5jb20KfHxz dXBlcnBhZ2VzLmNvbQp8fHN3YWdidWNrcy5jb20KfHxzd2l0Y2gxLmpwCnx8dGFw YW53YXAuY29tCnx8Z3NwLnRhcmdldC5jb20KfHxsb2dpbi50YXJnZXQuY29tCiEt LUBAfHxpbnRsLnRhcmdldC5jb20KfHxyY2FtLnRhcmdldC5jb20KfHx0aGVib2R5 c2hvcC11c2EuY29tCnx8dG1hLmNvLmpwCnx8dHJhY2ZvbmUuY29tCnx8dHJ5aGVh cnQuanAKfHx0dXJudGFibGUuZm0KfHx0d2Vya2luZ2J1dHQuY29tCnx8dWxvcC5u ZXQKfHx2ZWdhc3JlZC5jb20KfHx2ZXZvLmNvbQp8fHZpcC1lbnRlcnByaXNlLmNv bQp8aHR0cDovL3ZpdS50di9jaC8KfGh0dHA6Ly92aXUudHYvZW5jb3JlLwp8fHZt cHNvZnQuY29tCnxodHRwOi8vZWNzbS52cy5jb20vCnx8d2Fuei1mYWN0b3J5LmNv bQp8fHNzbC53ZWJwYWNrLmRlCnx8d2hlcmV0b3dhdGNoLmNvbQp8fHdpbmdhbWVz dG9yZS5jb20KfHx3aXpjcmFmdHMubmV0Cnx8dm9kLnd3ZS5jb20KfHx4ZmluaXR5 LmNvbQp8fHlvdXdpbi5jb20KfHx5dG4uY28ua3IKfHx6YXR0b28uY29tCnx8emlt LnZuCnx8em96b3Rvd24uY29tCgohIyMjIyMjIyMjIyMjIyNHZW5lcmFsIExpc3Qg U3RhcnQjIyMjIyMjIyMjIyMjIyMKIS0tLS0tLS0tLS0tLS0tLS0tLS1QdXJlIElQ LS0tLS0tLS0tLS0tLS0tLS0tLS0tCnx8MS4xLjEuMQoxNC4xMDIuMjUwLjE4CjE0 LjEwMi4yNTAuMTkKNTAuNy4zMS4yMzA6ODg5OAoxNzQuMTQyLjEwNS4xNTMKNjku NjUuMTkuMTYwCgohLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUlETi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KfHx4bi0tNGdxMTcxcC5jb20KfHx4bi0tY3pxNzVwdnYxYWo1 Yy5vcmcKfHx4bi0taTJydThxMnFnLmNvbQp8fHhuLS1vaXEuY2MKfHx4bi0tcDhq OWEwZDljOWEueG4tLXE5anliNGMKCiEtLS0tLS0tLS0tLS0tLS0tLUROUyBQb2lz b25pbmctLS0tLS0tLS0tLS0tLS0tLQohLS0tQW1hem9uLS0tCiEtfHxjZG4taW1h Z2VzLm1haWxjaGltcC5jb20KfGh0dHBzOi8vKi5zMy5hbWF6b25hd3MuY29tCnx8 czMtYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbQoKfHxhZ3JvLmhrCnx8YXBr bWlycm9yLmNvbQp8fGJpcmQuc28KfHxidXNpbmVzc2luc2lkZXIuY29tCnx8Ym9v bXNzci5jb20KfHxjYXN0Ym94LmZtCnx8Y21jbi5vcmcKfHxjbXguaW0KfHxkZXBv c2l0cGhvdG9zLmNvbQp8fGZhbmdlcWlhbmcuY29tCnx8Zmx5enkyMDA1LmNvbQp8 fGZyZWUtc3Muc2l0ZQp8fGJsb2cuZnVja2dmdzIzMy5vcmcKfHxnbG9iYWx2b2lj ZXMub3JnCnx8Z2xvcnlzdGFyLm1lCnx8aGJvLmNvbQp8fGlwZnMuaW8KfHxqYXBh bnRpbWVzLmNvLmpwCnx8amlqaS5jb20KfHxqaW54LmNvbQp8fGxpbmUtc2Nkbi5u ZXQKfHxpLmxpdGhpdW0uY29tCnx8Y2xvdWQubWFpbC5ydQp8fGNkbi1pbWFnZXMu bWFpbGNoaW1wLmNvbQp8fG1vaHUuY2x1Ygp8fG1vaHUubWwKfHxtYXN0b2Rvbi5o b3N0Cnx8ZGljdGlvbmFyeS5nb28ubmUuanAKfHxnby5uZXNub2RlLmNvbQp8fG5p a2tlaS5jb20KfHxub2ZpbGUuaW8KfHxub3cuY29tCnx8c3VrZWJlaS5ueWFhLnNp Cnx8b25lamF2LmNvbQp8fHBhc3RlLmVlCnx8bXkucGNsb3VkLmNvbQp8fHBpY2Fj b21pYy5jb20KfHxwaXhpdi5uZXQKfHxwcm90b252cG4uY29tCnx8cXVvcmEuY29t Cnx8Y2RuLnNlYXRndXJ1LmNvbQp8fHNlY3VyZS5yYXhjZG4uY29tCnx8cmVkZC5p dAp8fHJlZGRpdC5jb20KfHxyZWRkaXRtZWRpYS5jb20KfHxyZWRkaXRzdGF0aWMu Y29tCnx8cnNkbG1vbml0b3IuY29tCnx8c2hhZG93c29ja3MuYmUKfHxzaGFkb3dz b2NrczkuY29tCnx8dG4xLnNoZW1hbGV6LmNvbQp8fHRuMi5zaGVtYWxlei5jb20K fHx0bjMuc2hlbWFsZXouY29tCnx8c3RhdGljLnNoZW1hbGV6LmNvbQp8fHNvc3Jl YWRlci5jb20KfHxzdWxpYW4ubWUKfHxzdXBjaGluYS5jb20KfHx0ZWRkeXN1bi5j b20KfHx0ZXh0bm93Lm1lCnx8dGluZXllLmNvbQp8fHR1YmVwb3JuY2xhc3NpYy5j b20KfHx0d2l0Y2gudHYKfHx1a3UuaW0KfHx1bnNlZW4uaXMKfHxjbi51cHRvZG93 bi5jb20KfHx1cmFiYW4ubWUKfHx2cnNtYXNoLmNvbQp8fHNjYWNoZS52encuY29t Cnx8c2NhY2hlMS52encuY29tCnx8c2NhY2hlMi52encuY29tCnx8c3M3LnZ6dy5j b20KfHx3ZW56aGFvLmNhCnx8d2hhdHNvbndlaWJvLmNvbQp8fHdpcmUuY29tCnx8 eG0uY29tCnx8eHVlaHVhLnVzCgohLS0tRGlnaXRhbCBDdXJyZW5jeSBFeGNoYW5n ZShDUllQVE8pLS0tCnx8YWxsY29pbi5jb20KfHxhZGNleC5jb20KfHxiY2V4LmNh Cnx8Ymlib3guY29tCnx8YmlnLm9uZQp8fGJpbmFuY2UuY29tCnx8Yml0LXouY29t Cnx8Yml0Y29pbndvcmxkLmNvbQp8fGJpdGZpbmV4LmNvbQp8fGJpdGlua2EuY29t LmFyCnx8Yml0bWV4LmNvbQp8fGJ0Y2JhbmsuYmFuawp8fGJ0Y3RyYWRlLmltCnx8 YzJjeC5jb20KfHxjaGFvZXguY29tCnx8Y29pbjJjby5pbgouY29pbmVnZy5jb20K fHxjb2luZWdnLmNvbQp8fGNvaW5leC5jb20KIS0tfGh0dHBzOi8vd3d3LmNvaW5l eGNoYW5nZS5pby8KfHxjb2luZ2kuY29tCnx8Y29pbnJhaWwuY28ua3IKfHxjb2lu dG9iZS5jb20KfHxjb2ludXQuY29tCnx8ZGlzY29pbnMuY29tCnx8ZHJhZ29uZXgu aW8KfHxlYnRjYmFuay5jb20KfHxldGhlcmRlbHRhLmNvbQp8fGV4bW8uY29tCnx8 ZXhyYXRlcy5tZQp8fGV4eC5jb20KfHxmYXRidGMuY29tCnx8Z2F0ZS5pbwp8fGdh dGVjb2luLmNvbQp8fGhpdGJ0Yy5jb20KfHxodW9iaS5jb20KfHxodW9iaS5wcm8K fHxodW9iaXByby5jb20KfHxieC5pbi50aAp8fGpleC5jb20KfHxrZXguY29tCnx8 a3NwY29pbi5jb20KfHxrdWNvaW4uY29tCnx8bGJhbmsuaW5mbwp8fGxpdmVjb2lu Lm5ldAp8fG9leC5jb20KfHxva2V4LmNvbQp8fHJpZ2h0YnRjLmNvbQp8fHRvcGJ0 Yy5jb20KfHx4YnRjZS5jb20KfHx5b2JpdC5uZXQKfHx6Yi5jb20KCiEtLS0tLS0t LS0tLS0tLS0tRnJhdWRzICYgU2NhbXMtLS0tLS0tLS0tLS0tLS0tLQohIS0tLUNv bnRlbnQgRmFybShmYWtlIDUwMCBlcnJvciktLS0KfHxyZWFkMDEuY29tCnx8a2tu ZXdzLmNjCgpjaGluYS1tbW0uanAubmV0Ci5sc3hzenpnLmNvbQouY2hpbmEtbW1t Lm5ldAp8fGNoaW5hLW1tbS5uZXQKY2hpbmEtbW1tLnNhLmNvbQoKIS0tLS0tLS0t LS0tLS0tLS0tLS0tLUdyb3Vwcy0tLS0tLS0tLS0tLS0tLS0tLS0tCiEhLS0tQWZy YWlkIEZyZWVETlMtLS0KLmFsbG93ZWQub3JnCi5ub3cuaW0KCiEhLS0tQW1hem9u LS0tCnx8YW1hem9uLmNvLmpwCi5hbWF6b24uY29tL0RhbGFpLUxhbWEKYW1hem9u LmNvbS9Qcmlzb25lci1TdGF0ZS1TZWNyZXQtSm91cm5hbC1QcmVtaWVyCnMzLWFw LW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20KCiEhLS0tQU9MLS0tCnx8YW9sY2hh bm5lbHMuYW9sLmNvbQp2aWRlby5hb2wuY2EvdmlkZW8tZGV0YWlsCnZpZGVvLmFv bC5jby51ay92aWRlby1kZXRhaWwKdmlkZW8uYW9sLmNvbQp8fHZpZGVvLmFvbC5j b20KfHxzZWFyY2guYW9sLmNvbQp3d3cuYW9sbmV3cy5jb20KCiEhLS0tQXZNb28t LS0KLmF2bW8ucHcKIS0tfGh0dHA6Ly9hdm1vLnB3Ci5hdm1vby5jb20KfGh0dHA6 Ly9hdm1vby5jb20KLmF2bW9vLm5ldAp8aHR0cDovL2F2bW9vLm5ldAp8fGF2bW9v LnB3Ci5qYXZtb28ueHl6CnxodHRwOi8vamF2bW9vLnh5egouamF2dGFnLmNvbQp8 aHR0cDovL2phdnRhZy5jb20KLmphdnpvby5jb20KfGh0dHA6Ly9qYXZ6b28uY29t Ci50ZWxsbWUucHcKCiEhLS0tQkJDLS0tCiEtLS5iYmMuY28udWsvYmxvZ3MKIS0t LmJiYy5jby51ay9jaGluZXNlCiEtLS5iYmMuY28udWsvbmV3cy93b3JsZC1hc2lh LWNoaW5hCiEtLS5iYmMuY28udWsvdHYKIS0tLmJiYy5jby51ay96aG9uZ3dlbgoh LS0uYmJjLmNvbS91a2NoaW5hCiEtLS5iYmMuY29tL3pob25nd2VuCiEtLS5iYmMu Y29tJTJGemhvbmd3ZW4KIS0tbmV3cy5iYmMuY28udWsvb250aGlzZGF5Km5ld3Np ZF8yNDk2MDAwLzI0OTYyNzcKIS0tbmV3c2ZvcnVtcy5iYmMuY28udWsKLmJiYy5j b20KfHxiYmMuY29tCi5iYmMuY28udWsKfHxiYmMuY28udWsKfHxiYmNpLmNvLnVr Ci5iYmNjaGluZXNlLmNvbQp8fGJiY2NoaW5lc2UuY29tCnxodHRwOi8vYmJjLmlu CgohIS0tLUNoYW5nZUlQLS0tCi4xZHVtYi5jb20KLjI1dS5jb20KLjJ3YWt5LmNv bQouMy1hLm5ldAouNGRxLmNvbQouNG15ZG9tYWluLmNvbQouNHB1LmNvbQouYWNt ZXRveS5jb20KLmFsbW9zdG15LmNvbQouYW1lcmljYW51bmZpbmlzaGVkLmNvbQou YXV0aG9yaXplZGRucy5uZXQKLmF1dGhvcml6ZWRkbnMub3JnCi5hdXRob3JpemVk ZG5zLnVzCi5iaWdtb25leS5iaXoKLmNoYW5nZWlwLm5hbWUKLmNoYW5nZWlwLm5l dAouY2hhbmdlaXAub3JnCi5jbGVhbnNpdGUuYml6Ci5jbGVhbnNpdGUuaW5mbwou Y2xlYW5zaXRlLnVzCi5jb21wcmVzcy50bwouZGRucy5pbmZvCi5kZG5zLm1lLnVr Ci5kZG5zLm1vYmkKLmRkbnMubXMKLmRkbnMubmFtZQouZGRucy51cwouZGhjcC5i aXoKLmRucy1kbnMuY29tCi5kbnMtc3R1ZmYuY29tCi5kbnMwNC5jb20KLmRuczA1 LmNvbQouZG5zMS51cwouZG5zMi51cwouZG5zZXQuY29tCi5kbnNyZC5jb20KLmRz bXRwLmNvbQouZHVtYjEuY29tCi5keW5hbWljLWRucy5uZXQKLmR5bmFtaWNkbnMu Yml6Ci5keW5hbWljZG5zLmNvLnVrCi5keW5hbWljZG5zLm1lLnVrCi5keW5hbWlj ZG5zLm9yZy51awouZHluZG5zLnBybwouZHluc3NsLmNvbQouZWRucy5iaXoKLmVw YWMudG8KLmVzbXRwLmJpegouZXp1YS5jb20KLmZhcXNlcnYuY29tCi5mYXJ0aXQu Y29tCi5mcmVlZGRucy5jb20KLmZyZWV0Y3AuY29tCi5mcmVld3d3LmJpegouZnJl ZXd3dy5pbmZvCi5mdHAxLmJpegouZnRwc2VydmVyLmJpegouZ2V0dHJpYWxzLmNv bQouZ290LWdhbWUub3JnCi5ncjhkb21haW4uYml6Ci5ncjhuYW1lLmJpegouaHR0 cHM0NDMubmV0Ci5odHRwczQ0My5vcmcKLmlrd2IuY29tCi5pbnN0YW50aHEuY29t Ci5pb3dueW91ci5iaXoKLmlvd255b3VyLm9yZwouaXNhc2VjcmV0LmNvbQouaXRl bWRiLmNvbQouaXRzYW9sLmNvbQouamV0b3MuY29tCi5qa3ViLmNvbQouanVuZ2xl aGVhcnQuY29tCi5qdXN0ZGllZC5jb20KLmxmbGluay5jb20KLmxmbGlua3VwLmNv bQoubGZsaW5rdXAubmV0Ci5sZmxpbmt1cC5vcmcKLmxvbmdtdXNpYy5jb20KLm1l Zm91bmQuY29tCi5tb25leWhvbWUuYml6Ci5tcmJhc2ljLmNvbQoubXJib251cy5j b20KLm1yZmFjZS5jb20KLm1yc2xvdmUuY29tCi5teTAzLmNvbQoubXlkYWQuaW5m bwoubXlkZG5zLmNvbQoubXlmdHAuaW5mbwoubXlmdHAubmFtZQoubXlsZnR2LmNv bQoubXltb20uaW5mbwoubXluZXRhdi5uZXQKLm15bmV0YXYub3JnCi5teW51bWJl ci5vcmcKLm15cGljdHVyZS5pbmZvCi5teXBvcDMubmV0Ci5teXBvcDMub3JnCi5t eXNlY29uZGFyeWRucy5jb20KLm15d3d3LmJpegoubXl6LmluZm8KLm5pbnRoLmJp egoubnMwMS5iaXoKLm5zMDEuaW5mbwoubnMwMS51cwoubnMwMi5iaXoKLm5zMDIu aW5mbwoubnMwMi51cwoubnMxLm5hbWUKLm5zMi5uYW1lCi5uczMubmFtZQoub2Ny eS5jb20KLm9uZWR1bWIuY29tCi5vbm15cGMuYml6Ci5vbm15cGMuaW5mbwoub25t eXBjLm5ldAoub25teXBjLm9yZwoub25teXBjLnVzCi5vcmdhbmljY3JhcC5jb20K Lm90em8uY29tCi5vdXJob2JieS5jb20KLnBjYW55d2hlcmUubmV0Ci5wb3J0MjUu Yml6Ci5wcm94eWRucy5jb20KLnFoaWdoLmNvbQoucXBvZS5jb20KLnJlYmF0ZXNy dWxlLm5ldAouc2VsbGNsYXNzaWNzLmNvbQouc2VuZHNtdHAuY29tCi5zZXJ2ZXVz ZXIuY29tCi5zZXJ2ZXVzZXJzLmNvbQouc2V4aWR1ZGUuY29tCi5zZXh4eHkuYml6 Ci5zaXh0aC5iaXoKLnNxdWlybHkuaW5mbwouc3NsNDQzLm9yZwoudG9oLmluZm8K LnRveXRoaWV2ZXMuY29tCi50cmlja2lwLm5ldAoudHJpY2tpcC5vcmcKLnZpenZh ei5jb20KLndoYS5sYQoud2lrYWJhLmNvbQoud3d3MS5iaXoKLnd3d2hvc3QuYml6 CkBAfGh0dHA6Ly94eC53d3dob3N0LmJpegoueDI0aHIuY29tCi54eHV6LmNvbQou eHh4eS5iaXoKLnh4eHkuaW5mbwoueWd0by5jb20KLnlvdWRvbnRjYXJlLmNvbQou eW91cnRyYXAuY29tCi56eW5zLmNvbQouenp1eC5jb20KCiEhLS0tQ2xvdWRGcm9u dC0tLQpkMWIxODNzZzBudm51aC5jbG91ZGZyb250Lm5ldAp8aHR0cHM6Ly9kMWIx ODNzZzBudm51aC5jbG91ZGZyb250Lm5ldApkMWMzN2dqd2EyNnRhYS5jbG91ZGZy b250Lm5ldAp8aHR0cHM6Ly9kMWMzN2dqd2EyNnRhYS5jbG91ZGZyb250Lm5ldApk M2MzM2hjZ2l3ZXYzLmNsb3VkZnJvbnQubmV0CnxodHRwczovL2QzYzMzaGNnaXdl djMuY2xvdWRmcm9udC5uZXQKfHxkM3JocjdrZ210cnExdi5jbG91ZGZyb250Lm5l dAoKISEtLS1EdEROUy0tLQohIyMjaHR0cHM6Ly93d3cuZHRkbnMuY29tL2R0c2l0 ZS9mYXEKLjNkLWdhbWUuY29tCi40aXJjLmNvbQouYjBuZS5jb20KLmNoYXRub29r LmNvbQouZGFya3RlY2gub3JnCi5kZWFmdG9uZS5jb20KLmR0ZG5zLm5ldAouZWZm ZXJzLmNvbQouZXRvd25zLm5ldAouZXRvd25zLm9yZwouZmxuZXQub3JnCi5nb3Rn ZWVrcy5jb20KLnNjaWVyb24uY29tCi5zbHlpcC5jb20KLnNseWlwLm5ldAouc3Vy b290LmNvbQoKISEtLS1EeW5ETlMtLS0KISMjI2h0dHBzOi8vaGVscC5keW4uY29t L2xpc3Qtb2YtZHluLWRucy1wcm8tcmVtb3RlLWFjY2Vzcy1kb21haW4tbmFtZXMv Ci5ibG9nZG5zLm9yZwouZHluZG5zLm9yZwouZHluZG5zLWlwLmNvbQouZHluZG5z LXBpY3MuY29tCi5mcm9tLXNkLmNvbQouZnJvbS1wci5jb20KLmlzLWEtaHVudGVy LmNvbQoKISEtLS1EeW51LS0tCi5keW51LmNvbQouZHludS5uZXQKLmZyZWVkZG5z Lm9yZwoKISEtLS1GYWNlYm9vay0tLQpjZG5pbnN0YWdyYW0uY29tCnx8Y2RuaW5z dGFncmFtLmNvbQp8fGZhY2Vib29rLmJyCi5mYWNlYm9vay5jb20KfHxmYWNlYm9v ay5jb20KIS0tL15odHRwcz86XC9cL1teXC9dK2ZhY2Vib29rXC5jb20vCkBAfHx2 Ni5mYWNlYm9vay5jb20KfHxmYWNlYm9vay5kZXNpZ24KfHxjb25uZWN0LmZhY2Vi b29rLm5ldAp8fGZhY2Vib29rLmh1Cnx8ZmFjZWJvb2suaW4KfHxmYWNlYm9vay5u bAp8fGZhY2Vib29rLnNlCnx8ZmIuY29tCnx8ZmIubWUKfHxmYmNkbi5uZXQKfHxm YnNieC5jb20KfHxmYmFkZGlucy5jb20KfHxmYndvcmttYWlsLmNvbQouaW5zdGFn cmFtLmNvbQp8fGluc3RhZ3JhbS5jb20KfHxtLm1lCnx8bWVzc2VuZ2VyLmNvbQp8 fG9jdWx1cy5jb20KfHxvY3VsdXNjZG4uY29tCnx8cm9ja3NkYi5vcmcKQEB8fGlw Ni5zdGF0aWMuc2wtcmV2ZXJzZS5jb20KfHx0aGVmYWNlYm9vay5jb20KfHx3aGF0 c2FwcC5jb20KfHx3aGF0c2FwcC5uZXQKCiEhLS0tRlRDaGluZXNlLS0tCnxodHRw czovL3d3dy5mdGNoaW5lc2UuY29tCi5mdGNoaW5lc2UuY29tL2NoYW5uZWwvdmlk ZW8KLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDI3NTMKLmZ0Y2hpbmVzZS5jb20v c3RvcnkvMDAxMDI2NjE2Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTAyNjc0OQou ZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwMjY4MDcKLmZ0Y2hpbmVzZS5jb20vc3Rv cnkvMDAxMDI2ODA4Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTAyNjgzNAouZnRj aGluZXNlLmNvbS9zdG9yeS8wMDEwMjY4ODAKLmZ0Y2hpbmVzZS5jb20vc3Rvcnkv MDAxMDI3NDI5Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTAzMDM0MQouZnRjaGlu ZXNlLmNvbS9zdG9yeS8wMDEwMzA1MDIKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAx MDMwODAzCi5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTAzMTMxNwouZnRjaGluZXNl LmNvbS9zdG9yeS8wMDEwMzI2MTcKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDMy NjM2Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTAzMjY5MgouZnRjaGluZXNlLmNv bS9zdG9yeS8wMDEwMzI3NjIKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDMzMTM4 Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTAzNDkxNwouZnRjaGluZXNlLmNvbS9z dG9yeS8wMDEwMzQ5MjYKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDM0OTI3Ci5m dGNoaW5lc2UuY29tL3N0b3J5LzAwMTAzNDkyOAouZnRjaGluZXNlLmNvbS9zdG9y eS8wMDEwMzQ5NTIKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDM1ODkwCi5mdGNo aW5lc2UuY29tL3N0b3J5LzAwMTAzNTk3MgouZnRjaGluZXNlLmNvbS9zdG9yeS8w MDEwMzU5OTMKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDM2NDE3Ci5mdGNoaW5l c2UuY29tL3N0b3J5LzAwMTAzNzA5MAouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEw MzcwOTEKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDM4MTc4Ci5mdGNoaW5lc2Uu Y29tL3N0b3J5LzAwMTAzODE5OQouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwMzgy MjAKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDM4ODE5Ci5mdGNoaW5lc2UuY29t L3N0b3J5LzAwMTAzODg2MgouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwMzkwNjcK LmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDM5MTc4Ci5mdGNoaW5lc2UuY29tL3N0 b3J5LzAwMTAzOTIxMQouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwMzkyNzEKLmZ0 Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDM5Mjk1Ci5mdGNoaW5lc2UuY29tL3N0b3J5 LzAwMTAzOTM2OQouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwMzk0ODIKLmZ0Y2hp bmVzZS5jb20vc3RvcnkvMDAxMDM5NTM0Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAw MTAzOTU1NQouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwMzk1NzYKLmZ0Y2hpbmVz ZS5jb20vc3RvcnkvMDAxMDM5NzEyCi5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTAz OTc3OQouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwMzk4MDkKLmZ0Y2hpbmVzZS5j b20vc3RvcnkvMDAxMDQwMTM0Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA0MDgz NQouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNDA4OTAKLmZ0Y2hpbmVzZS5jb20v c3RvcnkvMDAxMDQwOTE4Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA0MDk5Mgou ZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNDEyMDkKLmZ0Y2hpbmVzZS5jb20vc3Rv cnkvMDAxMDQyMTAwCi5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA0MjI1MgouZnRj aGluZXNlLmNvbS9zdG9yeS8wMDEwNDIyNzIKLmZ0Y2hpbmVzZS5jb20vc3Rvcnkv MDAxMDQyMjgwCi5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA0MzAyOQouZnRjaGlu ZXNlLmNvbS9zdG9yeS8wMDEwNDMwNjYKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAx MDQzMDk2Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA0MzEyNAouZnRjaGluZXNl LmNvbS9zdG9yeS8wMDEwNDMxNTIKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDQz MTg5Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA0MzQyOAouZnRjaGluZXNlLmNv bS9zdG9yeS8wMDEwNDM0MzkKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDQzNTM0 Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA0MzY3NQouZnRjaGluZXNlLmNvbS9z dG9yeS8wMDEwNDM2ODAKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDQzNzAyCi5m dGNoaW5lc2UuY29tL3N0b3J5LzAwMTA0Mzg0OQouZnRjaGluZXNlLmNvbS9zdG9y eS8wMDEwNDQwOTkKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDQ0Nzc2Ci5mdGNo aW5lc2UuY29tL3N0b3J5LzAwMTA0NDg3MQouZnRjaGluZXNlLmNvbS9zdG9yeS8w MDEwNDQ4OTcKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDQ1MTE0Ci5mdGNoaW5l c2UuY29tL3N0b3J5LzAwMTA0NTEzOQouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEw NDUxODYKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDQ1NzU1Ci5mdGNoaW5lc2Uu Y29tL3N0b3J5LzAwMTA0NjA4NwouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNDYx MDUKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDQ2MTE4Ci5mdGNoaW5lc2UuY29t L3N0b3J5LzAwMTA0NjEzMgouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNDY1MTcK LmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDQ2ODIyCi5mdGNoaW5lc2UuY29tL3N0 b3J5LzAwMTA0Njg2NgouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNDY5NDIKLmZ0 Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDQ3MTgwCi5mdGNoaW5lc2UuY29tL3N0b3J5 LzAwMTA0NzIwNgouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNDczMDQKLmZ0Y2hp bmVzZS5jb20vc3RvcnkvMDAxMDQ3MzE3Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAw MTA0NzM0NQouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNDczNTgKLmZ0Y2hpbmVz ZS5jb20vc3RvcnkvMDAxMDQ3Mzc1Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA0 NzM4MQouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNDc0MTMKLmZ0Y2hpbmVzZS5j b20vc3RvcnkvMDAxMDQ3NDU2Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA0NzQ5 MQouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNDc1NDUKLmZ0Y2hpbmVzZS5jb20v c3RvcnkvMDAxMDQ3NTU4Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA0NzU2OAou ZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNDc2MjcKLmZ0Y2hpbmVzZS5jb20vc3Rv cnkvMDAxMDQ4MjkzCi5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA0ODM0MwouZnRj aGluZXNlLmNvbS9zdG9yeS8wMDEwNDg3MTAKLmZ0Y2hpbmVzZS5jb20vc3Rvcnkv MDAxMDQ5Mjg5Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA0OTM2MAouZnRjaGlu ZXNlLmNvbS9zdG9yeS8wMDEwNDk4OTYKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAx MDUwMTUyCi5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA1MTAyNwouZnRjaGluZXNl LmNvbS9zdG9yeS8wMDEwNTExNjEKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDUx MzcyCi5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA1MTQ3OQouZnRjaGluZXNlLmNv bS9zdG9yeS8wMDEwNTIxMzgKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDUyMTYx Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA1MjUyNQouZnRjaGluZXNlLmNvbS9z dG9yeS8wMDEwNTI1NDkKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDUyNzAxCi5m dGNoaW5lc2UuY29tL3N0b3J5LzAwMTA1Mjk2NQouZnRjaGluZXNlLmNvbS9zdG9y eS8wMDEwNTMxNDkKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDUzMTUwCi5mdGNo aW5lc2UuY29tL3N0b3J5LzAwMTA1MzIwMAouZnRjaGluZXNlLmNvbS9zdG9yeS8w MDEwNTM0MjUKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDUzNDk2Ci5mdGNoaW5l c2UuY29tL3N0b3J5LzAwMTA1MzUyNgouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEw NTM5MDYKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDU0MDQ5Ci5mdGNoaW5lc2Uu Y29tL3N0b3J5LzAwMTA1NDEwMwouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNTQx MDkKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDU0MTE5Ci5mdGNoaW5lc2UuY29t L3N0b3J5LzAwMTA1NDEyMwouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNTQxMzkK LmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDU0MTY2Ci5mdGNoaW5lc2UuY29tL3N0 b3J5LzAwMTA1NDE2OAouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNTQxOTAKLmZ0 Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDU0NDM3Ci5mdGNoaW5lc2UuY29tL3N0b3J5 LzAwMTA1NDUyNgouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNTQ2MDcKLmZ0Y2hp bmVzZS5jb20vc3RvcnkvMDAxMDU0NjQ0Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAw MTA1NDc4NgouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNTQ4NDMKLmZ0Y2hpbmVz ZS5jb20vc3RvcnkvMDAxMDU0OTI1Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA1 NDk0MAouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNTUwNTEKLmZ0Y2hpbmVzZS5j b20vc3RvcnkvMDAxMDU1MDYzCi5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA1NTA2 OQouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNTUxMzYKLmZ0Y2hpbmVzZS5jb20v c3RvcnkvMDAxMDU1MTcwCi5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA1NTIwMgou ZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNTUyNDIKLmZ0Y2hpbmVzZS5jb20vc3Rv cnkvMDAxMDU1MjYzCi5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA1NTI3NAouZnRj aGluZXNlLmNvbS9zdG9yeS8wMDEwNTUyOTkKLmZ0Y2hpbmVzZS5jb20vc3Rvcnkv MDAxMDU1NDgwCi5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA1NTU1MQouZnRjaGlu ZXNlLmNvbS9zdG9yeS8wMDEwNTU1NTkKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAx MDU1NTY2Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA1NTg0MAouZnRjaGluZXNl LmNvbS9zdG9yeS8wMDEwNTYwOTkKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDU2 MTA4Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA1NjEzMQouZnRjaGluZXNlLmNv bS9zdG9yeS8wMDEwNTYzNzUKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDU2NDkx Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA1NjUyOQouZnRjaGluZXNlLmNvbS9z dG9yeS8wMDEwNTY1MzQKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDU2NTM4Ci5m dGNoaW5lc2UuY29tL3N0b3J5LzAwMTA1NjU0MQouZnRjaGluZXNlLmNvbS9zdG9y eS8wMDEwNTY1NTQKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDU2NTU3Ci5mdGNo aW5lc2UuY29tL3N0b3J5LzAwMTA1NjU2MAouZnRjaGluZXNlLmNvbS9zdG9yeS8w MDEwNTY1NjcKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDU2NTc0Ci5mdGNoaW5l c2UuY29tL3N0b3J5LzAwMTA1NjU4OAouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEw NTY1OTQKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDU2NTk2Ci5mdGNoaW5lc2Uu Y29tL3N0b3J5LzAwMTA1NjY4NAouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNTY4 MzIKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDU2ODMzCi5mdGNoaW5lc2UuY29t L3N0b3J5LzAwMTA1Njg1MQouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNTY4NzQK LmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDU2ODk2Ci5mdGNoaW5lc2UuY29tL3N0 b3J5LzAwMTA1NjkyNwouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNTcwMTEKLmZ0 Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDU3MDE4Ci5mdGNoaW5lc2UuY29tL3N0b3J5 LzAwMTA1NzA0NAouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNTcxNjIKLmZ0Y2hp bmVzZS5jb20vc3RvcnkvMDAxMDU3NTAwCi5mdGNoaW5lc2UuY29tL3N0b3J5LzAw MTA1NzUwNAouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNTc1MDkKLmZ0Y2hpbmVz ZS5jb20vc3RvcnkvMDAxMDU3NTE4Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA1 NzUzMgouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNTc1MzMKLmZ0Y2hpbmVzZS5j b20vc3RvcnkvMDAxMDU3NTU2Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA1NzU4 MAouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNTc2MzgKLmZ0Y2hpbmVzZS5jb20v c3RvcnkvMDAxMDU3NjQ0Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA1NzgxNwou ZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNTc4NzUKLmZ0Y2hpbmVzZS5jb20vc3Rv cnkvMDAxMDU4MDA5Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA1ODA1NgouZnRj aGluZXNlLmNvbS9zdG9yeS8wMDEwNTgyMjQKLmZ0Y2hpbmVzZS5jb20vc3Rvcnkv MDAxMDU4MjU3Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA1ODI5NQouZnRjaGlu ZXNlLmNvbS9zdG9yeS8wMDEwNTgzMjgKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAx MDU4MzM5Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA1ODM0NAouZnRjaGluZXNl LmNvbS9zdG9yeS8wMDEwNTgzNTIKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDU4 NDEzCi5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA1ODQyMQouZnRjaGluZXNlLmNv bS9zdG9yeS8wMDEwNTg0NDAKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDU4NDU4 Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA1ODQ2OAouZnRjaGluZXNlLmNvbS9z dG9yeS8wMDEwNTg1NjEKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDU4NTY2Ci5m dGNoaW5lc2UuY29tL3N0b3J5LzAwMTA1ODU2NwouZnRjaGluZXNlLmNvbS9zdG9y eS8wMDEwNTg1ODUKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDU4NjI4Ci5mdGNo aW5lc2UuY29tL3N0b3J5LzAwMTA1ODY1NgouZnRjaGluZXNlLmNvbS9zdG9yeS8w MDEwNTg2NjUKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDU4Njc4Ci5mdGNoaW5l c2UuY29tL3N0b3J5LzAwMTA1ODY5MQouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEw NTg3MjEKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDU4NzI4Ci5mdGNoaW5lc2Uu Y29tL3N0b3J5LzAwMTA1OTQ2NAouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNTk0 ODQKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDU5NTM3Ci5mdGNoaW5lc2UuY29t L3N0b3J5LzAwMTA1OTUzOAouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNTk1NTEK LmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDU5ODE4Ci5mdGNoaW5lc2UuY29tL3N0 b3J5LzAwMTA1OTkxNAouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNTk5MjAKLmZ0 Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDU5OTU3Ci5mdGNoaW5lc2UuY29tL3N0b3J5 LzAwMTA2MDA4OAouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNjAxNTYKLmZ0Y2hp bmVzZS5jb20vc3RvcnkvMDAxMDYwMTU3Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAw MTA2MDE2MAouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNjAxODEKLmZ0Y2hpbmVz ZS5jb20vc3RvcnkvMDAxMDYwMTg1Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA2 MDQ5MwouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNjA0OTUKLmZ0Y2hpbmVzZS5j b20vc3RvcnkvMDAxMDYwNTkwCi5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA2MDg0 NgouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNjA4NDcKLmZ0Y2hpbmVzZS5jb20v c3RvcnkvMDAxMDYwODc1Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA2MDkyMQou ZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNjA5NDYKLmZ0Y2hpbmVzZS5jb20vc3Rv cnkvMDAxMDYxMTIwCi5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA2MTQ3NAouZnRj aGluZXNlLmNvbS9zdG9yeS8wMDEwNjE1MjQKLmZ0Y2hpbmVzZS5jb20vc3Rvcnkv MDAxMDYxNjQyCi5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA2MjAxNwouZnRjaGlu ZXNlLmNvbS9zdG9yeS8wMDEwNjIwMjAKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAx MDYyMDI4Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA2MjA5MgouZnRjaGluZXNl LmNvbS9zdG9yeS8wMDEwNjIwOTYKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDYy MTQ3Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA2MjE3NgouZnRjaGluZXNlLmNv bS9zdG9yeS8wMDEwNjIxODgKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDYyMjU0 Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA2MjM3NAouZnRjaGluZXNlLmNvbS9z dG9yeS8wMDEwNjI0ODIKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDYyNDk2Ci5m dGNoaW5lc2UuY29tL3N0b3J5LzAwMTA2MjUwMQouZnRjaGluZXNlLmNvbS9zdG9y eS8wMDEwNjI1MDgKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDYyNTE5Ci5mdGNo aW5lc2UuY29tL3N0b3J5LzAwMTA2MjU1NAouZnRjaGluZXNlLmNvbS9zdG9yeS8w MDEwNjI3NDEKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDYyNzk0Ci5mdGNoaW5l c2UuY29tL3N0b3J5LzAwMTA2MzE2MAouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEw NjMzNTkKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDYzNTEyCi5mdGNoaW5lc2Uu Y29tL3N0b3J5LzAwMTA2MzY2OAouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNjM2 OTIKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDYzNzYzCi5mdGNoaW5lc2UuY29t L3N0b3J5LzAwMTA2Mzc2NAouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNjM4MjYK LmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDY0MTI3Ci5mdGNoaW5lc2UuY29tL3N0 b3J5LzAwMTA2NDMxMgouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNjQ3MDUKLmZ0 Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDY0ODA3Ci5mdGNoaW5lc2UuY29tL3N0b3J5 LzAwMTA2NTEyMAouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNjUxNjgKLmZ0Y2hp bmVzZS5jb20vc3RvcnkvMDAxMDY1MjQ5Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAw MTA2NTI4NwouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNjUzMzcKLmZ0Y2hpbmVz ZS5jb20vc3RvcnkvMDAxMDY1NTQxCi5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA2 NTcxNQouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNjU3MzUKLmZ0Y2hpbmVzZS5j b20vc3RvcnkvMDAxMDY1NzU2Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA2NTgw MgouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNjYxMTIKLmZ0Y2hpbmVzZS5jb20v c3RvcnkvMDAxMDY2MTM2Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA2NjE0MAou ZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNjY0NjUKLmZ0Y2hpbmVzZS5jb20vc3Rv cnkvMDAxMDY2ODgxCi5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA2Njk1MAouZnRj aGluZXNlLmNvbS9zdG9yeS8wMDEwNjY5NTkKLmZ0Y2hpbmVzZS5jb20vc3Rvcnkv MDAxMDY3NDM1Cnd3dy5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA2NzQ3OQouZnRj aGluZXNlLmNvbS9zdG9yeS8wMDEwNjc1MjgKLmZ0Y2hpbmVzZS5jb20vc3Rvcnkv MDAxMDY3NTQ1Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA2NzU3MgouZnRjaGlu ZXNlLmNvbS9zdG9yeS8wMDEwNjc2NDgKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAx MDY3NjUwCi5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA2NzY4MAouZnRjaGluZXNl LmNvbS9zdG9yeS8wMDEwNjc2OTIKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDY3 ODcxCi5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA2NzkyMwouZnRjaGluZXNlLmNv bS9zdG9yeS8wMDEwNjgwNjIKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDY4MjQ4 Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA2ODI3OAouZnRjaGluZXNlLmNvbS9z dG9yeS8wMDEwNjgzNzkKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDY4NDgzCi5m dGNoaW5lc2UuY29tL3N0b3J5LzAwMTA2ODUwNgouZnRjaGluZXNlLmNvbS9zdG9y eS8wMDEwNjg1NDcKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDY4NjE2Ci5mdGNo aW5lc2UuY29tL3N0b3J5LzAwMTA2ODYyMgouZnRjaGluZXNlLmNvbS9zdG9yeS8w MDEwNjg3MDcKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDY5MTQ2Ci5mdGNoaW5l c2UuY29tL3N0b3J5LzAwMTA2OTM3MwouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEw Njk1MTYKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDY5NTE3Ci5mdGNoaW5lc2Uu Y29tL3N0b3J5LzAwMTA2OTY4NwouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNjk3 NDEKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDY5ODYxCi5mdGNoaW5lc2UuY29t L3N0b3J5LzAwMTA2OTk1MgouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNzAwNTMK LmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDcwMTc3Ci5mdGNoaW5lc2UuY29tL3N0 b3J5LzAwMTA3MDMwNwouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNzA4MDkKLmZ0 Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDcwOTkwCi5mdGNoaW5lc2UuY29tL3N0b3J5 LzAwMTA3MTA0MgouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNzEwNDQKLmZ0Y2hp bmVzZS5jb20vc3RvcnkvMDAxMDcxMTA2Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAw MTA3MTE2NgouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNzExODEKZnRjaGluZXNl LmNvbS9zdG9yeS8wMDEwNzEyMDAKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDcx MjA4Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA3MTIzOAouZnRjaGluZXNlLmNv bS9zdG9yeS8wMDEwNzE2ODMKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDcyMjcx Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA3MjM0OAouZnRjaGluZXNlLmNvbS9z dG9yeS8wMDEwNzI2NzcKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDcyNzk0Ci5m dGNoaW5lc2UuY29tL3N0b3J5LzAwMTA3Mjg1MwouZnRjaGluZXNlLmNvbS9zdG9y eS8wMDEwNzI4OTUKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDcyOTkzCi5mdGNo aW5lc2UuY29tL3N0b3J5LzAwMTA3MzA0MwouZnRjaGluZXNlLmNvbS9zdG9yeS8w MDEwNzMxMDMKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDczMTU3Ci5mdGNoaW5l c2UuY29tL3N0b3J5LzAwMTA3MzIxNgouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEw NzMyNDYKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDczMzA1Ci5mdGNoaW5lc2Uu Y29tL3N0b3J5LzAwMTA3MzMwNwouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNzM0 MDgKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDczNTM3Ci5mdGNoaW5lc2UuY29t L3N0b3J5LzAwMTA3MzY3MgouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNzM4NDkK LmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDczOTA2Ci5mdGNoaW5lc2UuY29tL3N0 b3J5LzAwMTA3NDA4OQouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNzQxMTAKLmZ0 Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDc0MTI4Ci5mdGNoaW5lc2UuY29tL3N0b3J5 LzAwMTA3NDE1NwouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNzQyNDYKLmZ0Y2hp bmVzZS5jb20vc3RvcnkvMDAxMDc0MzA3Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAw MTA3NDM0NwouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNzQ0MjMKLmZ0Y2hpbmVz ZS5jb20vc3RvcnkvMDAxMDc0NDU0Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA3 NDQ2NwouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNzQ0OTMKLmZ0Y2hpbmVzZS5j b20vc3RvcnkvMDAxMDc0NTUwCi5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA3NDU2 MgouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNzQ2NTMKLmZ0Y2hpbmVzZS5jb20v c3RvcnkvMDAxMDc0NjkzCi5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA3NDY5OQou ZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNzQ3MTIKLmZ0Y2hpbmVzZS5jb20vc3Rv cnkvMDAxMDc0NzEzCi5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA3NDc2OAouZnRj aGluZXNlLmNvbS9zdG9yeS8wMDEwNzQ3ODIKLmZ0Y2hpbmVzZS5jb20vc3Rvcnkv MDAxMDc0Nzk0Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA3NDgyMgouZnRjaGlu ZXNlLmNvbS9zdG9yeS8wMDEwNzQ4NzQKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAx MDc0ODkxCi5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA3NDkxOAouZnRjaGluZXNl LmNvbS9zdG9yeS8wMDEwNzUwODEKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDc1 MTM0Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA3NTIxNgouZnRjaGluZXNlLmNv bS9zdG9yeS8wMDEwNzUyMzAKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDc1MjYy Ci5mdGNoaW5lc2UuY29tL3N0b3J5LzAwMTA3NTI2OQouZnRjaGluZXNlLmNvbS9z dG9yeS8wMDEwNzU0OTEKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDc1NTAwCi5m dGNoaW5lc2UuY29tL3N0b3J5LzAwMTA3NTY1MAouZnRjaGluZXNlLmNvbS9zdG9y eS8wMDEwNzU2NzgKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDc1NzAzCi5mdGNo aW5lc2UuY29tL3N0b3J5LzAwMTA3NjA2NgouZnRjaGluZXNlLmNvbS9zdG9yeS8w MDEwNzYxNDIKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDc2NDU5Ci5mdGNoaW5l c2UuY29tL3N0b3J5LzAwMTA3NjQ3MAouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEw NzY1MzgKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDc2NTczCi5mdGNoaW5lc2Uu Y29tL3N0b3J5LzAwMTA3NjkwMQouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNzcw NjcKLmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDc3MjM1Ci5mdGNoaW5lc2UuY29t L3N0b3J5LzAwMTA3NzM0NAouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNzczOTAK LmZ0Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDc3MzkyCi5mdGNoaW5lc2UuY29tL3N0 b3J5LzAwMTA3NzQ2NQouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNzc0NjgKLmZ0 Y2hpbmVzZS5jb20vc3RvcnkvMDAxMDc3NDkyCi5mdGNoaW5lc2UuY29tL3N0b3J5 LzAwMTA3Nzc0NQouZnRjaGluZXNlLmNvbS9zdG9yeS8wMDEwNzc3NjgKLmZ0Y2hp bmVzZS5jb20vc3RvcnkvMDAxMDc3ODA0Ci5mdGNoaW5lc2UuY29tL3RhZy8lRTUl OEQlODElRTUlODUlQUIlRTUlQjElOEElRTQlQjglODklRTQlQjglQUQlRTUlODUl QTglRTQlQkMlOUEKLmZ0Y2hpbmVzZS5jb20vdGFnLyVFNiVCOCVBOSVFNSVBRSVC NiVFNSVBRSU5RAouZnRjaGluZXNlLmNvbS90YWcvJUU4JTk2JTg0JUU3JTg2JTk5 JUU2JTlEJUE1Ci5mdGNoaW5lc2UuY29tL3ZpZGVvLzE0MzcKLmZ0Y2hpbmVzZS5j b20vdmlkZW8vMTg4MgouZnRjaGluZXNlLmNvbS92aWRlby8yNDQ2Ci5mdGNoaW5l c2UuY29tL3ZpZGVvLzI2MDEKLmZ0Y2hpbmVzZS5jb20vY29tbWVudHMKCiEhLS0t R29vZ2xlLS0tCiEjIyNodHRwczovL3d3dy5nb29nbGUuY29tL3N1cHBvcnRlZF9k b21haW5zIyMjCiEuLi5HRldMaXN0IGRvZXNuJ3QgaW50ZW5kIHRvIHN1cHBvcnQg dHlwb3NxdWF0dGluZy4uLgp8fDFlMTAwLm5ldAp8fDQ2NjQ1My5jb20KfHxhYmMu eHl6Cnx8YWRtb2IuY29tCnx8YWRzZW5zZS5jb20KfHxhZ29vZ2xlYWRheS5jb20K fHxhaS5nb29nbGUKfHxhbXBwcm9qZWN0Lm9yZwp8fGFuZHJvaWQuY29tCnx8YW5k cm9pZGlmeS5jb20KfHxhcGkuYWkKLmFwcHNwb3QuY29tCnx8YXBwc3BvdC5jb20K fHxhdXRvZHJhdy5jb20KfHxibG9nLmdvb2dsZQp8fGJsb2dibG9nLmNvbQpibG9n c3BvdC5jb20KL15odHRwcz86XC9cL1teXC9dK2Jsb2dzcG90XC4oLiopLwouYmxv Z3Nwb3QuaGsKLmJsb2dzcG90LmpwCi5ibG9nc3BvdC50dwohLS18fGNhcGl0YWxn LmNvbQp8fGNlcnRpZmljYXRlLXRyYW5zcGFyZW5jeS5vcmcKfHxjaHJvbWUuY29t Cnx8Y2hyb21lY2FzdC5jb20KfHxjaHJvbWVleHBlcmltZW50cy5jb20KfHxjaHJv bWVyY2lzZS5jb20KfHxjaHJvbWVzdGF0dXMuY29tCnx8Y2hyb21pdW0ub3JnCnx8 Y29tLmdvb2dsZQp8fGNyZWF0aXZlbGFiNS5jb20KfHxjcnJldi5jb20KfHxkYXRh LXZvY2FidWxhcnkub3JnCnx8ZGVidWcuY29tCnx8ZGVlcG1pbmQuY29tCnx8ZGVq YS5jb20KfHxkZXNpZ24uZ29vZ2xlCnx8ZGlnaXNmZXJhLmNvbQp8fGRvbWFpbnMu Z29vZ2xlCnx8ZHVjay5jb20KfHxlbnZpcm9ubWVudC5nb29nbGUKfHxmZWVkYnVy bmVyLmNvbQp8fGZpcmViYXNlaW8uY29tCnx8Zy5jbwp8fGdjci5pbwp8fGdldC5h cHAKfHxnZXQuaG93Cnx8Z2V0bWRsLmlvCnx8Z2V0b3V0bGluZS5vcmcKfHxnZ3Bo dC5jb20KfHxnbWFpbC5jb20KfHxnbW9kdWxlcy5jb20KfHxnb2RvYy5vcmcKfHxn b2xhbmcub3JnCnx8Z29vLmdsCi5nb29nbGUuYWUKLmdvb2dsZS5hcwouZ29vZ2xl LmFtCi5nb29nbGUuYXQKLmdvb2dsZS5hegouZ29vZ2xlLmJhCi5nb29nbGUuYmUK Lmdvb2dsZS5iZwouZ29vZ2xlLmNhCi5nb29nbGUuY2QKLmdvb2dsZS5jaQouZ29v Z2xlLmNvLmlkCi5nb29nbGUuY28uanAKLmdvb2dsZS5jby5rcgouZ29vZ2xlLmNv Lm1hCi5nb29nbGUuY28udWsKLmdvb2dsZS5jb20KLmdvb2dsZS5kZQouZ29vZ2xl LmRqCi5nb29nbGUuZGsKLmdvb2dsZS5lcwouZ29vZ2xlLmZpCi5nb29nbGUuZm0K Lmdvb2dsZS5mcgouZ29vZ2xlLmdnCi5nb29nbGUuZ2wKLmdvb2dsZS5ncgouZ29v Z2xlLmllCi5nb29nbGUuaXMKLmdvb2dsZS5pdAouZ29vZ2xlLmpvCi5nb29nbGUu a3oKLmdvb2dsZS5sdgouZ29vZ2xlLm1uCi5nb29nbGUubXMKLmdvb2dsZS5ubAou Z29vZ2xlLm51Ci5nb29nbGUubm8KLmdvb2dsZS5ybwouZ29vZ2xlLnJ1Ci5nb29n bGUucncKLmdvb2dsZS5zYwouZ29vZ2xlLnNoCi5nb29nbGUuc2sKLmdvb2dsZS5z bQouZ29vZ2xlLnNuCi5nb29nbGUudGsKLmdvb2dsZS50bQouZ29vZ2xlLnRvCi5n b29nbGUudHQKLmdvb2dsZS52dQouZ29vZ2xlLndzCi9eaHR0cHM/OlwvXC8oW15c L10rXC4pKmdvb2dsZVwuKGFjfGFkfGFlfGFmfGFsfGFtfGFzfGF0fGF6fGJhfGJl fGJmfGJnfGJpfGJqfGJzfGJ0fGJ5fGNhfGNhdHxjZHxjZnxjZ3xjaHxjaXxjbHxj bXxjby5hb3xjby5id3xjby5ja3xjby5jcnxjby5pZHxjby5pbHxjby5pbnxjby5q cHxjby5rZXxjby5rcnxjby5sc3xjby5tYXxjb218Y29tLmFmfGNvbS5hZ3xjb20u YWl8Y29tLmFyfGNvbS5hdXxjb20uYmR8Y29tLmJofGNvbS5ibnxjb20uYm98Y29t LmJyfGNvbS5ienxjb20uY298Y29tLmN1fGNvbS5jeXxjb20uZG98Y29tLmVjfGNv bS5lZ3xjb20uZXR8Y29tLmZqfGNvbS5naHxjb20uZ2l8Y29tLmd0fGNvbS5oa3xj b20uam18Y29tLmtofGNvbS5rd3xjb20ubGJ8Y29tLmx5fGNvbS5tbXxjb20ubXR8 Y29tLm14fGNvbS5teXxjb20ubmF8Y29tLm5mfGNvbS5uZ3xjb20ubml8Y29tLm5w fGNvbS5vbXxjb20ucGF8Y29tLnBlfGNvbS5wZ3xjb20ucGh8Y29tLnBrfGNvbS5w cnxjb20ucHl8Y29tLnFhfGNvbS5zYXxjb20uc2J8Y29tLnNnfGNvbS5zbHxjb20u c3Z8Y29tLnRqfGNvbS50cnxjb20udHd8Y29tLnVhfGNvbS51eXxjb20udmN8Y29t LnZufGNvLm16fGNvLm56fGNvLnRofGNvLnR6fGNvLnVnfGNvLnVrfGNvLnV6fGNv LnZlfGNvLnZpfGNvLnphfGNvLnptfGNvLnp3fGN2fGN6fGRlfGRqfGRrfGRtfGR6 fGVlfGVzfGV1fGZpfGZtfGZyfGdhfGdlfGdnfGdsfGdtfGdwfGdyfGd5fGhrfGhu fGhyfGh0fGh1fGllfGltfGlxfGlzfGl0fGl0LmFvfGplfGpvfGtnfGtpfGt6fGxh fGxpfGxrfGx0fGx1fGx2fG1kfG1lfG1nfG1rfG1sfG1ufG1zfG11fG12fG13fG14 fG5lfG5sfG5vfG5yfG51fG9yZ3xwbHxwbnxwc3xwdHxyb3xyc3xydXxyd3xzY3xz ZXxzaHxzaXxza3xzbXxzbnxzb3xzcnxzdHx0ZHx0Z3x0a3x0bHx0bXx0bnx0b3x0 dHx1c3x2Z3x2bnx2dXx3cylcLy4qLwohLS18fGdvb2dsZS1hbmFseXRpY3MuY29t CiEtLXx8Z29vZ2xlYWRzZXJ2aWNlcy5jb20KfHxnb29nbGVhcGlzLmNuCnx8Z29v Z2xlYXBpcy5jb20KfHxnb29nbGVhcHBzLmNvbQp8fGdvb2dsZWFydHByb2plY3Qu Y29tCnx8Z29vZ2xlYmxvZy5jb20KfHxnb29nbGVib3QuY29tCiEtLXx8Z29vZ2xl Y2FwaXRhbC5jb20KfHxnb29nbGVjaGluYXdlYm1hc3Rlci5jb20KfHxnb29nbGVj b2RlLmNvbQp8fGdvb2dsZWNvbW1lcmNlLmNvbQp8fGdvb2dsZWRvbWFpbnMuY29t Cnx8Z29vZ2xlYXJ0aC5jb20KfHxnb29nbGVlYXJ0aC5jb20KfHxnb29nbGVkcml2 ZS5jb20KfHxnb29nbGVncm91cHMuY29tCnx8Z29vZ2xlaG9zdGVkLmNvbQp8fGdv b2dsZWlkZWFzLmNvbQp8fGdvb2dsZWluc2lkZXNlYXJjaC5jb20KfHxnb29nbGVs YWJzLmNvbQp8fGdvb2dsZW1haWwuY29tCnx8Z29vZ2xlbWFzaHVwcy5jb20KfHxn b29nbGVwYWdlY3JlYXRvci5jb20KfHxnb29nbGVwbGF5LmNvbQp8fGdvb2dsZXBs dXMuY29tCnx8Z29vZ2xlc2Nob2xhci5jb20KfHxnb29nbGVzb3VyY2UuY29tCiEt LXx8Z29vZ2xlc3luZGljYXRpb24uY29tCiEtLXx8Z29vZ2xldGFnbWFuYWdlci5j b20KIS0tfHxnb29nbGV0YWdzZXJ2aWNlcy5jb20KfHxnb29nbGV1c2VyY29udGVu dC5jb20KLmdvb2dsZXZpZGVvLmNvbQp8fGdvb2dsZXZpZGVvLmNvbQp8fGdvb2ds ZXdlYmxpZ2h0LmNvbQp8fGdvb2dsZXppcC5uZXQKfHxncm91cHMuZ29vZ2xlLmNu Cnx8Z3N0YXRpYy5jb20KIS0tfHxndi5jb20KfHxndnQwLmNvbQp8fGd2dDEuY29t CkBAfHxyZWRpcmVjdG9yLmd2dDEuY29tCnx8Z3Z0My5jb20KfHxnd3Rwcm9qZWN0 Lm9yZwp8fGh0bWw1cm9ja3MuY29tCnx8aWFtLnNveQp8fGlnb29nbGUuY29tCnx8 aXRhc29mdHdhcmUuY29tCnx8bGVycy5nb29nbGUKfHxsaWtlLmNvbQp8fG1hZGV3 aXRoY29kZS5jb20KfHxtYXRlcmlhbC5pbwp8fG5pYy5nb29nbGUKfHxvbjIuY29t Cnx8cGFub3JhbWlvLmNvbQp8fHBpY2FzYXdlYi5jb20KfHxwb2x5bWVyLXByb2pl Y3Qub3JnCnx8cXVlc3R2aXN1YWwuY29tCnx8YWRtaW4ucmVjYXB0Y2hhLm5ldAp8 fGFwaS5yZWNhcHRjaGEubmV0Cnx8YXBpLXNlY3VyZS5yZWNhcHRjaGEubmV0Cnx8 YXBpLXZlcmlmeS5yZWNhcHRjaGEubmV0Cnx8cmVkaG90bGFicy5jb20KfHxyZWdp c3RyeS5nb29nbGUKfHxzYXZldGhlZGF0ZS5mb28KfHxzY2hlbWEub3JnCnx8c2hh dHRlcmVkLmlvCnxodHRwOi8vc2lwbWw1Lm9yZy8KfHxzdG9yaWVzLmdvb2dsZQp8 fHN5bmVyZ3lzZS5jb20KfHx0ZWFjaHBhcmVudHN0ZWNoLm9yZwp8fHRlbnNvcmZs b3cub3JnCnx8dGhpbmt3aXRoZ29vZ2xlLmNvbQp8fHRpbHRicnVzaC5jb20KfHx1 cmNoaW4uY29tCiEtLXx8d3d3Lmdvb2dsZQp8fHdhdmVwcm90b2NvbC5vcmcKfHx3 YXltby5jb20KfHx3ZWJtcHJvamVjdC5vcmcKfHx3ZWJydGMub3JnCnx8d2hhdGJy b3dzZXIub3JnCnx8d2lkZXZpbmUuY29tCnx8d2l0aGdvb2dsZS5jb20KfHx3aXRo eW91dHViZS5jb20KfHx4LmNvbXBhbnkKfHx4bi0tbmdzdHItbHJhOGouY29tCnx8 eW91dHUuYmUKLnlvdXR1YmUuY29tCnx8eW91dHViZS5jb20KfHx5b3V0dWJlLW5v Y29va2llLmNvbQp8fHlvdXR1YmVlZHVjYXRpb24uY29tCnx8eW91dHViZWdhbWlu Zy5jb20KfHx5dC5iZQp8fHl0aW1nLmNvbQp8fHp5bmFtaWNzLmNvbQoKISEtLS1L aWNrQVNTLS0tCiEtLU9GRklDSUFMIFVSTCBsaXN0IGF0OiBodHRwczovL2thc3Rh dHVzLmNvbQoKISEtLS1OYXVnaHR5QW1lcmljYS0tLQp8fG5hdWdodHlhbWVyaWNh LmNvbQoKISEtLS1OWVRpbWVzLS0tCiEtLXx8ZDFmMWVyeWlxeWpzMHIuY2xvdWRm cm9udC5uZXQKIS0tfHxkM2xhcjA5eGJ3bHNnZS5jbG91ZGZyb250Lm5ldAohLS18 fGQzcTFxajlqenN1OG53LmNsb3VkZnJvbnQubmV0CiEtLXx8ZGM4eGwwbmR6bjJj Yi5jbG91ZGZyb250Lm5ldAohLS18fGExLm55dC5jb20KIS0tfHxpbnQubnl0LmNv bQohLS18fHMxLm55dC5jb20Kc3RhdGljMDEubnl0LmNvbQohLS18fHN0YXRpYzAx Lm55dC5jb20KIS0tfHx0eXBlZmFjZS5ueXQuY29tCnx8bnl0LmNvbQpueXRjaGlu YS5jb20Kbnl0Y24ubWUKfHxueXRjbi5tZQp8fG55dGNvLmNvbQp8aHR0cDovL255 dGkubXMvCi5ueXRpbWVzLmNvbQp8fG55dGltZXMuY29tCnx8bnl0aW1nLmNvbQp1 c2VyYXBpLm55dGxvZy5jb20KY24ubnl0c3R5bGUuY29tCnx8bnl0c3R5bGUuY29t CgohIS0tLVN0ZWFtLS0tCi5zdGVhbWNvbW11bml0eS5jb20KfHxzdGVhbWNvbW11 bml0eS5jb20KIS0tc3RlYW1jb21tdW5pdHkuY29tL3Byb2ZpbGVzLzc2NTYxMTk4 MDYyNzcxNjA5CiEtLXN0ZWFtY29tbXVuaXR5LmNvbS9ncm91cHMvTGliZXRUaWJl dAohLS1zdGVhbWNvbW11bml0eS5jb20vZ3JvdXBzL3pob25nZ29uZwohLS1zdGVh bWNvbW11bml0eS5jb20vaWQvQ0pUX0phY2t0b24KfGh0dHA6Ly9zdG9yZS5zdGVh bXBvd2VyZWQuY29tL2FwcC8zMzM2MDAKCiEhLS0tVGVsZWdyYW0tLS0KISEhLS0t RG9tYWluLS0tCnx8dC5tZQp8fHVwZGF0ZXMudGRlc2t0b3AuY29tCnx8dGVsZWdy YW0uZG9nCnx8dGVsZWdyYW0ubWUKfHx0ZWxlZ3JhbS5vcmcKLnRlbGVncmFtZG93 bmxvYWQuY29tCnx8dGVsZXNjby5wZQohISEtLS1JUC0tLQoKISEtLS1Ud2l0dGVy LS0tCnx8cGVyaXNjb3BlLnR2Ci5wc2NwLnR2Cnx8cHNjcC50dgoudC5jbwp8fHQu Y28KLnR3ZWV0ZGVjay5jb20KfHx0d2VldGRlY2suY29tCnx8dHdpbWcuY29tCi50 d2l0cGljLmNvbQp8fHR3aXRwaWMuY29tCi50d2l0dGVyLmNvbQp8fHR3aXR0ZXIu Y29tCnx8dHdpdHRlci5qcAp8fHZpbmUuY28KCiEhLS0tVGFpd2FuLS0tCnx8Z292 LnRhaXBlaQouZ292LnR3CnxodHRwczovL2Fpc3MuYW53cy5nb3YudHcKfHxhcmNo aXZlcy5nb3YudHcKfHx0YWNjLmN3Yi5nb3YudHcKfHxkYXRhLmdvdi50dwp8fGVw YS5nb3YudHcKfHxmYS5nb3YudHcKfHxmZGEuZ292LnR3Cnx8aHBhLmdvdi50dwp8 fGltbWlncmF0aW9uLmdvdi50dwp8fGl0YWl3YW4uZ292LnR3Cnx8bWppYi5nb3Yu dHcKfHxtb2VhaWMuZ292LnR3Cnx8bW9mYS5nb3YudHcKfHxtb2wuZ292LnR3Cnx8 bXZkaXMuZ292LnR3Cnx8bmF0Lmdvdi50dwp8fG5oaS5nb3YudHcKfHxucGEuZ292 LnR3Cnx8bnNjLmdvdi50dwp8fG50YmsuZ292LnR3Cnx8bnRibmEuZ292LnR3Cnx8 bnRidC5nb3YudHcKfHxudHNuYS5nb3YudHcKfHxwY2MuZ292LnR3Cnx8c3RhdC5n b3YudHcKfHx0YWlwZWkuZ292LnR3Cnx8dGFpd2Fuam9icy5nb3YudHcKfHx0aGIu Z292LnR3Cnx8dGlwby5nb3YudHcKfHx3ZGEuZ292LnR3Cgp8fHRlY28taGsub3Jn Cnx8dGVjby1tby5vcmcKCkBAfHxhZnR5Z2guZ292LnR3CkBAfHxhaWRlLmdvdi50 dwpAQHx8dHBkZS5haWRlLmdvdi50dwpAQHx8YXJ0ZS5nb3YudHcKQEB8fGNodWt1 YW5nLmdvdi50dwpAQHx8Y3diLmdvdi50dwpAQHx8Y3ljYWIuZ292LnR3CkBAfHxk Ym5zYS5nb3YudHcKQEB8fGRmLmdvdi50dwpAQHx8ZWFzdGNvYXN0LW5zYS5nb3Yu dHcKQEB8fGVydi1uc2EuZ292LnR3CkBAfHxncmIuZ292LnR3CkBAfHxneXNkLm55 Yy5nb3YudHcKQEB8fGhjaGNjLmdvdi50dwpAQHx8aHNpbmNodS1jYy5nb3YudHcK QEB8fGluZXIuZ292LnR3CkBAfHxrbHNpby5nb3YudHcKQEB8fGttc2VoLmdvdi50 dwpAQHx8bHVuZ3RhbmhyLmdvdi50dwpAQHx8bWFvbGluLW5zYS5nb3YudHcKQEB8 fG1hdHN1LW5ld3MuZ292LnR3CkBAfHxtYXRzdS1uc2EuZ292LnR3CkBAfHxtYXRz dWNjLmdvdi50dwpAQHx8bW9lLmdvdi50dwpAQHx8bXZkaXMuZ292LnR3CkBAfHxu YW5rYW4uZ292LnR3CkBAfHxuY3JlZS5nb3YudHcKQEB8fG5lY29hc3QtbnNhLmdv di50dwpAQHx8c2lyYXlhLW5zYS5nb3YudHcKQEB8fGNyb21vdGMubmF0Lmdvdi50 dwpAQHx8dGF4Lm5hdC5nb3YudHcKQEB8fG5lY29hc3QtbnNhLmdvdi50dwpAQHx8 bmVyLmdvdi50dwpAQHx8bm1tYmEuZ292LnR3CkBAfHxubXAuZ292LnR3CkBAfHxu bXZ0dGMuZ292LnR3CkBAfHxub3J0aGd1YW4tbnNhLmdvdi50dwpAQHx8bnBtLmdv di50dwpAQHx8bnN0bS5nb3YudHcKQEB8fG50ZG1oLmdvdi50dwpAQHx8bnRsLmdv di50dwpAQHx8bnRzZWMuZ292LnR3CkBAfHxudHVoLmdvdi50dwpAQHx8bnZyaS5n b3YudHcKQEB8fHBlbmdodS1uc2EuZ292LnR3CkBAfHxwb3N0Lmdvdi50dwpAQHx8 c2lyYXlhLW5zYS5nb3YudHcKQEB8fHN0ZHRpbWUuZ292LnR3CkBAfHxzdW5tb29u bGFrZS5nb3YudHcKQEB8fHRhaXR1bmctaG91c2UuZ292LnR3CkBAfHx0YW95dWFu Lmdvdi50dwpAQHx8dHBoY2MuZ292LnR3CkBAfHx0cmltdC1uc2EuZ292LnR3CkBA fHx2Z2h0cGUuZ292LnR3CkBAfHx2Z2hrcy5nb3YudHcKQEB8fHZnaHRjLmdvdi50 dwpAQHx8d2FuZmFuZy5nb3YudHcKQEB8fHlhdHNlbi5nb3YudHcKQEB8fHlkYS5n b3YudHcKCiEtLUBAfHw0cHBwYy5nb3YudHcKIS0tQEB8fDkyMS5nb3YudHcKIS0t QEB8fGRtdGlwLmdvdi50dwohLS1AQHx8ZXRyYWluaW5nLmdvdi50dwohLS1AQHx8 Z3NuLWNlcnQubmF0Lmdvdi50dwohLS1AQHx8bmljaS5uYXQuZ292LnR3CiEtLUBA fHxoY2MuZ292LnR3CiEtLUBAfHxoZW5nY2h1ZW4uZ292LnR3CiEtLUBAfHxraGNj Lmdvdi50dwohLS1AQHx8a2htcy5nb3YudHcKIS0tQEB8fGtrLmdvdi50dwohLS1A QHx8a2xjY2FiLmdvdi50dwohLS1AQHx8a2xyYS5nb3YudHcKIS0tQEB8fG5taC5n b3YudHcKIS0tQEB8fG5tdGwuZ292LnR3CiEtLUBAfHxwYWJwLmdvdi50dwohLS1A QHx8cGV0Lmdvdi50dwohLS1AQHx8dGNoYi5nb3YudHcKIS0tQEB8fHRjc2FjLmdv di50dwohLS1AQHx8dG5jc2VjLmdvdi50dwp8fGtpbm1lbi5vcmcudHcKCiEhLS0t VjJFWC0tLQoudjJleC5jb20KIS0tSW5jbHVkZWQgaW4gYWJvdmUgcnVsZTogZG5z LnYyZXguY29tCkBAfGh0dHA6Ly92MmV4LmNvbQpAQHxodHRwOi8vY2RuLnYyZXgu Y29tCkBAfGh0dHA6Ly9jbi52MmV4LmNvbQpAQHxodHRwOi8vaGsudjJleC5jb20K QEB8aHR0cDovL2kudjJleC5jb20KQEB8aHR0cDovL2xheC52MmV4LmNvbQpAQHxo dHRwOi8vbmV1ZS52MmV4LmNvbQpAQHxodHRwOi8vcGFnZXNwZWVkLnYyZXguY29t CkBAfGh0dHA6Ly9zdGF0aWMudjJleC5jb20KQEB8aHR0cDovL3dvcmtzcGFjZS52 MmV4LmNvbQpAQHxodHRwOi8vd3d3LnYyZXguY29tCgohIS0tLVlhaG9vLS0tCnx8 ZGF0YS5mbHVycnkuY29tCnBhZ2UuYmlkLnlhaG9vLmNvbQp0dy5iaWQueWFob28u Y29tCnxodHRwczovL3R3LmJpZC55YWhvby5jb20KYmxvZ3MueWFob28uY28uanAK fHxzZWFyY2gueWFob28uY28uanAKYnV5LnlhaG9vLmNvbS50dy9nZHNhbGUKaGsu eWFob28uY29tCmhrLmtub3dsZWRnZS55YWhvby5jb20KdHcubW9uZXkueWFob28u Y29tCmhrLm15YmxvZy55YWhvby5jb20KbmV3cy55YWhvby5jb20vY2hpbmEtYmxv Y2tzLWJiYwp8fGhrLm5ld3MueWFob28uY29tCmhrLnJkLnlhaG9vLmNvbQpoay5z ZWFyY2gueWFob28uY29tL3NlYXJjaApoay52aWRlby5uZXdzLnlhaG9vLmNvbS92 aWRlbwptZW1lLnlhaG9vLmNvbQohLS10dy55YWhvby5jb20KdHcuYW5zd2Vycy55 YWhvby5jb20KfGh0dHBzOi8vdHcuYW5zd2Vycy55YWhvby5jb20KfHx0dy5rbm93 bGVkZ2UueWFob28uY29tCnx8dHcubWFsbC55YWhvby5jb20KdHcueWFob28uY29t Cnx8dHcubW9iaS55YWhvby5jb20KdHcubXlibG9nLnlhaG9vLmNvbQp8fHR3Lm5l d3MueWFob28uY29tCnB1bHNlLnlhaG9vLmNvbQp1cGNvbWluZy55YWhvby5jb20K dmlkZW8ueWFob28uY29tCnx8eWFob28uY29tLmhrCnx8ZHVja2R1Y2tnby1vd25l ZC1zZXJ2ZXIueWFob28ubmV0CgohLS0tLS0tLS0tLS0tLS0tLS0tTnVtZXJpY3Mt LS0tLS0tLS0tLS0tLS0tLS0tLS0KLjAzMGJ1eS5jb20KLjByei50dwp8aHR0cDov LzByei50dwoxLWFwcGxlLmNvbS50dwp8fDEtYXBwbGUuY29tLnR3Ci4xMC50dAou MTAwa2Uub3JnCi4xMDAwZ2lyaS5uZXQKfHwxMDAwZ2lyaS5uZXQKLjEwY29uZGl0 aW9uc29mbG92ZS5jb20KfHwxMG11c3VtZS5jb20KMTIzcmYuY29tCi4xMmJldC5j b20KfHwxMmJldC5jb20KLjEydnBuLmNvbQouMTJ2cG4ubmV0Cnx8MTJ2cG4uY29t Cnx8MTJ2cG4ubmV0Ci4xMzguY29tCjE0MWhvbmdrb25nLmNvbS9mb3J1bQp8fDE0 MWpqLmNvbQouMTQxdHViZS5jb20KLjE2ODguY29tLmF1Ci4xNzNuZy5jb20KfHwx NzNuZy5jb20KLjE3N3BpYy5pbmZvCi4xN3QxN3AuY29tCnx8MThib2FyZC5jb20K fHwxOGJvYXJkLmluZm8KMThvbmx5Z2lybHMuY29tCi4xOHAycC5jb20KLjE4dmly Z2luc2V4LmNvbQouMTk0OWVyLm9yZwp6aGFvLjE5ODQuY2l0eQp8fHpoYW8uMTk4 NC5jaXR5CjE5ODRiYnMuY29tCnx8MTk4NGJicy5jb20KIS0tfHwxOTg0YmxvZy5j b20KLjE5ODRiYnMub3JnCnx8MTk4NGJicy5vcmcKLjE5OTF3YXkuY29tCnx8MTk5 MXdheS5jb20KLjE5OThjZHAub3JnCi4xYmFvLm9yZwp8aHR0cDovLzFiYW8ub3Jn Ci4xZWV3LmNvbQouMW1vYmlsZS5jb20KfGh0dHA6Ly8qLjFtb2JpbGUudHcKfHwx cG9uZG8udHYKLjItaGFuZC5pbmZvCi4yMDAwZnVuLmNvbS9iYnMKLjIwMDh4aWFu emhhbmcuaW5mbwp8fDIwMDh4aWFuemhhbmcuaW5mbwp8fDIwMTcuaGsKMjFhbmR5 LmNvbS9ibG9nCi4yMXByb24uY29tCjIxc2V4dHVyeS5jb20KLjIyOC5uZXQudHcK fHwyMzNhYmMuY29tCnx8MjRocnMuY2EKMjRzbWlsZS5vcmcKMmxpcHN0dWJlLmNv bQouMnNoYXJlZC5jb20KMzBib3hlcy5jb20KLjMxNWx6LmNvbQp8fDMycmVkLmNv bQp8fDM2cmFpbi5jb20KLjNhNWEuY29tCjNhcmFidHYuY29tCi4zYm95czJnaXJs cy5jb20KLjNwcm94eS5ydQouM3Jlbi5jYQouM3R1aS5uZXQKfHw0Ymx1ZXN0b25l cy5iaXoKLjRjaGFuLmNvbQohLS18fDRjaGFuLm9yZwouNGV2ZXJwcm94eS5jb20K fHw0ZXZlcnByb3h5LmNvbQp8fDRyYnR2LmNvbQp8fDRzaGFyZWQuY29tCnRhaXdh bm5hdGlvbi41MHdlYnMuY29tCnx8NTEuY2EKfHw1MWphdi5vcmcKLjUxbHVvYmVu LmNvbQp8fDUxbHVvYmVuLmNvbQouNTI3OC5jYwo1YWltaWt1LmNvbQo1aTAxLmNv bQouNWlzb3RvaTUub3JnCi41bWFvZGFuZy5jb20KfHw2M2kuY29tCi42NG11c2V1 bS5vcmcKNjR0aWFud2FuZy5jb20KNjR3aWtpLmNvbQouNjYuY2EKNjY2a2IuY29t CjZwYXJrLmNvbQp8fDZwYXJrLmNvbQp8fDZwYXJrZXIuY29tCnx8N2NhcHR1cmUu Y29tCi43Y293LmNvbQouOC1kLmNvbQp8aHR0cDovLzgtZC5jb20KODVjYy5uZXQK Ljg1Y2MudXMKfGh0dHA6Ly84NWNjLnVzCnxodHRwOi8vODVzdC5jb20KLjg4MTkw My5jb20vcGFnZS96aC10dy8KfHw4ODE5MDMuY29tCi44ODguY29tCi44ODhwb2tl ci5jb20KODkuNjQuY2hhcnRlci5jb25zdGl0dXRpb25hbGlzbS5zb2x1dGlvbnMK ODktNjQub3JnCnx8ODktNjQub3JnCi44bmV3cy5jb20udHcKLjh6MS5uZXQKfHw4 ejEubmV0Ci45MDAxNzAwLmNvbQp8aHR0cDovLzkwOHRhaXdhbi5vcmcvCnx8OTFw b3JuLmNvbQp8fDkxdnBzLmNsdWIKLjkyY2Nhdi5jb20KLjk5MS5jb20KfGh0dHA6 Ly85OTEuY29tCi45OWJ0Z2MwMS5jb20KfHw5OWJ0Z2MwMS5jb20KLjk5Y24uaW5m bwp8aHR0cDovLzk5Y24uaW5mbwp8fDliaXMuY29tCnx8OWJpcy5uZXQKCiEtLS0t LS0tLS0tLS0tLS0tLS0tLUFBLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoudGli ZXQuYS5zZQp8aHR0cDovL3RpYmV0LmEuc2UKfHxhLW5vcm1hbC1kYXkuY29tCmE1 LmNvbS5ydQp8aHR0cDovL2FhbWFjYXUuY29tCiEtLXxodHRwOi8vY2RuKi5hYmMu Y29tLwouYWJjLmNvbQouYWJjLm5ldC5hdQp8fGFiYy5uZXQuYXUKLmFiY2hpbmVz ZS5jb20KYWJjbGl0ZS5uZXQKfGh0dHBzOi8vd3d3LmFiY2xpdGUubmV0Ci5hYmx3 YW5nLmNvbQouYWJvbHVvd2FuZy5jb20KfHxhYm9sdW93YW5nLmNvbQouYWJvdXRn ZncuY29tCi5hYnMuZWR1Ci5hY2NpbS5vcmcKLmFjZXJvcy1kZS1oaXNwYW5pYS5j b20KLmFjZXZwbi5jb20KfHxhY2V2cG4uY29tCi5hY2cxOC5tZQp8aHR0cDovL2Fj ZzE4Lm1lCnx8YWNna2ouY29tCi5hY21lZGlhMzY1LmNvbQouYWNudy5jb20uYXUK YWN0Zm9ydGliZXQub3JnCmFjdGltZXMuY29tLmF1CmFjdGl2cG4uY29tCnx8YWN0 aXZwbi5jb20KfHxhY3Vsby51cwp8fGFkZGljdGVkdG9jb2ZmZWUuZGUKLmFkZWxh aWRlYmJzLmNvbS9iYnMKLmFkcGwub3JnLmhrCnxodHRwOi8vYWRwbC5vcmcuaGsK LmFkdWx0LXNleC1nYW1lcy5jb20KfHxhZHVsdC1zZXgtZ2FtZXMuY29tCmFkdWx0 ZnJpZW5kZmluZGVyLmNvbQphZHVsdGtlZXAubmV0L3BlZXBzaG93L21lbWJlcnMv bWFpbi5odG0KfHxhZHZhbnNjZW5lLmNvbQp8fGFkdmVydGZhbi5jb20KLmFlLm9y Zwp8fGFlbmhhbmNlcnMuY29tCnx8YWYubWlsCi5hZmFudGliYnMuY29tCnxodHRw Oi8vYWZhbnRpYmJzLmNvbQouYWkta2FuLm5ldAp8fGFpLWthbi5uZXQKYWktd2Vu Lm5ldAouYWlwaC5uZXQKfHxhaXBoLm5ldAouYWlyYXNpYS5jb20KfHxhaXJjb25z b2xlLmNvbQp8aHR0cDovL2Rvd25sb2FkLmFpcmNyYWNrLW5nLm9yZwouYWlydnBu Lm9yZwp8fGFpcnZwbi5vcmcKLmFpc2V4LmNvbQp8fGFpdC5vcmcudHcKYWl3ZWl3 ZWkuY29tCi5haXdlaXdlaWJsb2cuY29tCnx8YWl3ZWl3ZWlibG9nLmNvbQp8fHd3 dy5hanNhbmRzLmNvbQoKISEtLS1Ba2FtYWktLS0KYTI0OC5lLmFrYW1haS5uZXQK fHxhMjQ4LmUuYWthbWFpLm5ldAoKcmZhbGl2ZTEuYWthY2FzdC5ha2FtYWlzdHJl YW0ubmV0CnZvYS0xMS5ha2FjYXN0LmFrYW1haXN0cmVhbS5uZXQKCiEhLS00MDMK fHxhYmVtYXR2LmFrYW1haXplZC5uZXQKfHxsaW5lYXItYWJlbWF0di5ha2FtYWl6 ZWQubmV0Cnx8dm9kLWFiZW1hdHYuYWthbWFpemVkLm5ldAoKfGh0dHBzOi8vZmJj ZG4qLmFrYW1haWhkLm5ldC8KIS0tfHxmYmV4dGVybmFsLWEuYWthbWFpaGQubmV0 CiEtLXx8ZmJzdGF0aWMtYS5ha2FtYWloZC5uZXQKIS0tfGh0dHBzOi8vaWdjZG4q LmFrYW1haWhkLm5ldApydGhrbGl2ZTItbGguYWthbWFpaGQubmV0CgouYWthZGVt aXllLm9yZy91Zwp8aHR0cDovL2FrYWRlbWl5ZS5vcmcvdWcKfHxha2liYS1vbmxp bmUuY29tCnx8YWtvdy5vcmcKLmFsLWlzbGFtLmNvbQp8fGFsLXFpbW1haC5uZXQK fHxhbGFib3V0LmNvbQouYWxhbmhvdS5jb20KfGh0dHA6Ly9hbGFuaG91LmNvbQou YWxhcmFiLnFhCnx8YWxhc2JhcnJpY2FkYXMub3JnCmFsZXhsdXIub3JnCnx8YWxm b3JhdHR2Lm5ldAouYWxoYXlhdC5jb20KLmFsaWNlamFwYW4uY28uanAKYWxpZW5n dS5jb20KfHxhbGthc2lyLmNvbQp8fGFsbGNvbm5lY3RlZC5jbwouYWxsZHJhd25z ZXguY29tCnx8YWxsZHJhd25zZXguY29tCi5hbGxlcnZwbi5jb20KfHxhbGxmaW5l Z2lybHMuY29tCi5hbGxnaXJsbWFzc2FnZS5jb20KYWxsZ2lybHNhbGxvd2VkLm9y ZwouYWxsZ3JhdnVyZS5jb20KYWxsaWFuY2Uub3JnLmhrCi5hbGxpbmZhLmNvbQp8 aHR0cDovL2FsbGluZmEuY29tCi5hbGxqYWNrcG90c2Nhc2luby5jb20KfHxhbGxt b3ZpZS5jb20KfHxhbG1hc2Rhcm5ld3MuY29tCi5hbHBoYXBvcm5vLmNvbQp8fGFs dGVybmF0ZS10b29scy5jb20KYWx0ZXJuYXRpdmV0by5uZXQvc29mdHdhcmUKYWx2 aW5hbGV4YW5kZXIuY29tCmFsd2F5c2RhdGEuY29tCnx8YWx3YXlzZGF0YS5jb20K fHxhbHdheXNkYXRhLm5ldAouYWx3YXlzdnBuLmNvbQp8fGFsd2F5c3Zwbi5jb20K fHxhbTczMC5jb20uaGsKYW1lYmxvLmpwCnx8YW1lYmxvLmpwCnd3dzEuYW1lcmlj YW4uZWR1L3RlZC9pY2UvdGliZXQKfHxhbWVyaWNhbmdyZWVuY2FyZC5jb20KfGh0 dHA6Ly93d3cuYW1lcmljb3Jwcy5nb3YKfHxhbWlibG9ja2Vkb3Jub3QuY29tCi5h bWlnb2Jicy5uZXQKLmFtaXRhYmhhZm91bmRhdGlvbi51cwp8aHR0cDovL2FtaXRh YmhhZm91bmRhdGlvbi51cwouYW1uZXN0eS5vcmcKfHxhbW5lc3R5Lm9yZwp8fGFt bmVzdHkub3JnLmhrCi5hbW5lc3R5LnR3Ci5hbW5lc3R5dXNhLm9yZwp8fGFtbmVz dHl1c2Eub3JnCi5hbW55ZW1hY2hlbi5vcmcKLmFtb2lpc3QuY29tCi5hbXRiLXRh aXBlaS5vcmcKYW5kcm9pZHBsdXMuY28vYXBrCi5hbmR5Z29kLmNvbQp8aHR0cDov L2FuZHlnb2QuY29tCmFubmF0YW0uY29tL2NoaW5lc2UKfHxhbmNob3JmcmVlLmNv bQohLS1HSFMKfHxhbmNzY29uZi5vcmcKfHxhbmRmYXJhd2F5Lm5ldAp8fGFuZHJv aWQteDg2Lm9yZwphbmdlbGZpcmUuY29tL2hpL2hheWFzaGkKfHxhbmd1bGFyanMu b3JnCmFuaW1lY3JhenkubmV0Ci5hbmltZXNoaXBwdXVkZW4uY29tCmFuaXNjYXJ0 dWpvLmNvbQp8fGFuaXNjYXJ0dWpvLmNvbQp8fGFub2JpaS5jb20KYW5vbnltaXNl LnVzCi5hbm9ueW1pdHluZXR3b3JrLmNvbQouYW5vbnltaXplci5jb20KYW5vbnRl eHQuY29tCi5hbnBvcG8uY29tCi5hbnN3ZXJpbmctaXNsYW0ub3JnCnxodHRwOi8v d3d3LmFudGQub3JnCnx8YW50aG9ueWNhbHphZGlsbGEuY29tCi5hbnRpMTk4NC5j b20KYW50aWNocmlzdGVuZG9tLmNvbQouYW50aXdhdmUubmV0CnxodHRwOi8vYW50 aXdhdmUubmV0Ci5hbnlwb3JuLmNvbQouYW55c2V4LmNvbQp8aHR0cDovL2FueXNl eC5jb20KfHxhb2JvLmNvbS5hdQouYW9mcmllbmQuY29tCnxodHRwOi8vYW9mcmll bmQuY29tCi5hb2ZyaWVuZC5jb20uYXUKLmFvamlhby5vcmcKfHxhb21pd2FuZy5j b20KdmlkZW8uYXAub3JnCi5hcGV0dWJlLmNvbQp8fGFwaWFyeS5pbwouYXBpZ2Vl LmNvbQp8fGFwaWdlZS5jb20KYXBrLWRsLmNvbQphcGtkbGVyLmNvbS9hcGsvdmll dwouYXBrbW9uay5jb20vYXBwCnx8YXBrcGx6LmNvbQphcGtwdXJlLmNvbQp8fGFw a3B1cmUuY29tCi5hcGx1c3Zwbi5jb20KIS0tfHxhcHBhbm5pZS5jb20KLmFwcGRv d25sb2FkZXIubmV0L0FuZHJvaWQKLmFwcGxlZGFpbHkuY29tCnx8YXBwbGVkYWls eS5jb20KYXBwbGVkYWlseS5jb20uaGsKfHxhcHBsZWRhaWx5LmNvbS5oawphcHBs ZWRhaWx5LmNvbS50dwp8fGFwcGxlZGFpbHkuY29tLnR3Ci5hcHBzaG9wcGVyLmNv bQp8aHR0cDovL2FwcHNob3BwZXIuY29tCnx8YXBwc29ja3MubmV0Cnx8YXBwc3Rv LnJlCi5hcHRvaWRlLmNvbQp8fGFwdG9pZGUuY29tCnx8YXJjaGl2ZXMuZ292Ci5h cmNoaXZlLmZvCnx8YXJjaGl2ZS5mbwouYXJjaGl2ZS5pcwp8fGFyY2hpdmUuaXMK LmFyY2hpdmUubGkKfHxhcmNoaXZlLmxpCnx8YXJjaGl2ZS5vcmcKYXJjaGl2ZS50 b2RheQp8aHR0cHM6Ly9hcmNoaXZlLnRvZGF5Ci5hcmN0b3NpYS5jb20KfGh0dHA6 Ly9hcmN0b3NpYS5jb20KfHxhcmVjYS1iYWNrdXAub3JnCi5hcmV0aHVzYS5zdQp8 fGFyZXRodXNhLnN1Cnx8YXJsaW5ndG9uY2VtZXRlcnkubWlsCnx8YXJteS5taWwK LmFydDR0aWJldDE5OTgub3JnCmFydG9mcGVhY2Vmb3VuZGF0aW9uLm9yZwphcnRz eS5uZXQKfHxhc2FjcC5vcmcKLmFzYWhpY2hpbmVzZS5jb20KfHxhc2FoaWNoaW5l c2UuY29tCmFzZGZnLmpwL2RhYnIKYXNnLnRvCi5hc2lhLWdhbWluZy5jb20KLmFz aWFoYXJ2ZXN0Lm9yZwp8fGFzaWFoYXJ2ZXN0Lm9yZwphc2lhbmV3cy5pdAp8aHR0 cDovL2phcGFuZmlyc3QuYXNpYW5mcmVlZm9ydW0uY29tLwp8fGFzaWFuc2V4ZGlh cnkuY29tCnx8YXNpYW53b21lbnNmaWxtLmRlCi5hc2lhdGdwLmNvbQouYXNpYXRv ZGF5LnVzCnx8YXNrc3R1ZGVudC5jb20KLmFza3luei5uZXQKfHxhc2t5bnoubmV0 Cnx8YXNzZW1ibGEuY29tCnx8YXN0cmlsbC5jb20KfHxhdGMub3JnLmF1Ci5hdGNo aW5lc2UuY29tCnxodHRwOi8vYXRjaGluZXNlLmNvbQphdGdmdy5vcmcKLmF0bGFz cG9zdC5jb20KfHxhdGxhc3Bvc3QuY29tCnx8YXRkbXQuY29tCi5hdGxhbnRhMTY4 LmNvbS9mb3J1bQouYXRuZXh0LmNvbQp8fGF0bmV4dC5jb20KaWNlLmF1ZGlvbm93 LmNvbQouYXYuY29tCnx8YXYubW92aWUKLmF2LWUtYm9keS5jb20KYXZhYXoub3Jn Cnx8YXZhYXoub3JnCiEtLXx8YXZhc3QuY29tCi5hdmJvZHkudHYKLmF2Y2l0eS50 dgouYXZjb29sLmNvbQouYXZkYi5pbgp8fGF2ZGIuaW4KLmF2ZGIudHYKfHxhdmRi LnR2Ci5hdmZhbnRhc3kuY29tCi5hdmdsZS5jb20KfHxhdmdsZS5jb20KfHxhdmlk ZW11eC5vcmcKfHxhdm9pc2lvbi5jb20KLmF2eWFob28uY29tCnx8YXh1cmVmb3Jt YWMuY29tCi5hemVyYmF5Y2FuLnR2CmF6ZXJpbWl4LmNvbQohLS1ib3h1bi5henVy ZXdlYnNpdGVzLm5ldCBkb2Vzbid0IGV4aXN0Lgpib3h1biouYXp1cmV3ZWJzaXRl cy5uZXQKfHxib3h1biouYXp1cmV3ZWJzaXRlcy5uZXQKCiEtLS0tLS0tLS0tLS0t LS0tLS0tLUJCLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmb3J1bS5iYWJ5LWtp bmdkb20uY29tCmJhYnluZXQuY29tLmhrCmJhY2tjaGluYS5jb20KfHxiYWNrY2hp bmEuY29tCi5iYWNrcGFja2Vycy5jb20udHcvZm9ydW0KYmFja3RvdGlhbmFubWVu LmNvbQouYmFkaXVjYW8uY29tCnx8YmFkaXVjYW8uY29tCi5iYWRqb2pvLmNvbQpi YWRvby5jb20KfGh0dHA6Ly8qMi5iYWhhbXV0LmNvbS50dwp8fGJhaWR1LmpwCi5i YWlqaWUub3JnCnxodHRwOi8vYmFpamllLm9yZwp8fGJhaWxhbmRhaWx5LmNvbQp8 fGJhaXhpbmcubWUKfHxiYWtnZWVraG9tZS50awouYmFuYW5hLXZwbi5jb20KfHxi YW5hbmEtdnBuLmNvbQouYmFuZHdhZ29uaG9zdC5jb20KfHxiYW5kd2Fnb25ob3N0 LmNvbQouYmFuZ2Jyb3NuZXR3b3JrLmNvbQouYmFuZ2NoZW4ubmV0CnxodHRwOi8v YmFuZ2NoZW4ubmV0Cnx8YmFuZ3lvdWxhdGVyLmNvbQpiYW5uZWRib29rLm9yZwp8 fGJhbm5lZGJvb2sub3JnCi5iYW5uZWRuZXdzLm9yZwouYmFyYW1hbmdhb25saW5l LmNvbQp8aHR0cDovL2JhcmFtYW5nYW9ubGluZS5jb20KLmJhcmVuYWtlZGlzbGFt LmNvbQp8fGJhcm5hYnUuY28udWsKYmFydHZwbi5jb20KLmJhc3RpbGxlcG9zdC5j b20KYmF5dm9pY2UubmV0Cnx8YmF5dm9pY2UubmV0CmRhanVzaGEuYmF5d29yZHMu Y29tCnx8YmJjaGF0LnR2Cnx8YmItY2hhdC50dgouYmJnLmdvdgouYmJrei5jb20v Zm9ydW0KLmJibnJhZGlvLm9yZwpiYnMtdHcuY29tCi5iYnNkaWdlc3QuY29tL3Ro cmVhZAp8fGJic2ZlZWQuY29tCmJic2xhbmQuY29tCi5iYnNtby5jb20KLmJic29u ZS5jb20KYmJ0b3lzdG9yZS5jb20KLmJjYXN0LmNvLm56Ci5iY2MuY29tLnR3L2Jv YXJkCi5iY2NoaW5lc2UubmV0Ci5iY21vcm5pbmcuY29tCmJkc212aWRlb3MubmV0 Ci5iZWFjb25ldmVudHMuY29tCi5iZWJvLmNvbQp8fGJlYm8uY29tCi5iZWV2cG4u Y29tCnx8YmVldnBuLmNvbQouYmVoaW5ka2luay5jb20KfHxiZWlqaW5nMTk4OS5j b20KYmVpamluZ3NwcmluZy5jb20KfHxiZWlqaW5nc3ByaW5nLmNvbQouYmVpamlu Z3p4Lm9yZwp8aHR0cDovL2JlaWppbmd6eC5vcmcKLmJlbGFtaW9ubGluZS5jb20K LmJlbGwud2lraQp8aHR0cDovL2JlbGwud2lraQpiZW15d2lmZS5jYwpiZXJpYy5t ZQouYmVybGludHdpdHRlcndhbGwuY29tCnx8YmVybGludHdpdHRlcndhbGwuY29t Ci5iZXJtLmNvLm56Ci5iZXN0Zm9yY2hpbmEub3JnCnx8YmVzdGZvcmNoaW5hLm9y ZwouYmVzdGdvcmUuY29tCi5iZXN0cG9ybnN0YXJkYi5jb20KfHxiZXN0dnBuLmNv bQouYmVzdHZwbmFuYWx5c2lzLmNvbQouYmVzdHZwbnNlcnZlci5jb20KLmJlc3R2 cG5zZXJ2aWNlLmNvbQouYmVzdHZwbnVzYS5jb20KfHxiZXQzNjUuY29tCi5iZXRm YWlyLmNvbQp8fGJldHRlcm5ldC5jbwouYmV0dGVydnBuLmNvbQp8fGJldHRlcnZw bi5jb20KLmJldHR3ZWVuLmNvbQp8fGJldHR3ZWVuLmNvbQp8fGJldHZpY3Rvci5j b20KLmJld3d3Lm5ldAouYmV5b25kZmlyZXdhbGwuY29tCnx8YmZubi5vcmcKfHxi ZnNoLmhrCi5iZ3Zwbi5jb20KfHxiZ3Zwbi5jb20KLmJpYW5sZWkuY29tCkBAfHxi aWFubGVpLmNvbQpiaWFudGFpbGFqaWFvLmNvbQpiaWFudGFpbGFqaWFvLmluCi5i aWJsZXNmb3JhbWVyaWNhLm9yZwp8aHR0cDovL2JpYmxlc2ZvcmFtZXJpY2Eub3Jn Ci5iaWMyMDExLm9yZwpiaWdmb29scy5jb20KfHxiaWdqYXBhbmVzZXNleC5jb20K LmJpZ25ld3Mub3JnCnx8YmlnbmV3cy5vcmcKLmJpZ3NvdW5kLm9yZwouYmlsaXdv cmxkLmNvbQp8aHR0cDovL2JpbGl3b3JsZC5jb20KfGh0dHA6Ly9iaWxseXBhbi5j b20vd2lraQouYmludXgubWUKYWkuYmlud2FuZy5tZS9jb3VwbGV0CmJpcGljLm5l dAouYml0LmRvCnxodHRwOi8vYml0LmRvCi5iaXQubHkKfGh0dHA6Ly9iaXQubHkK IS0tfHxiaXRidWNrZXQub3JnCnx8Yml0Y29pbnRhbGsub3JnCi5iaXRzaGFyZS5j b20KfHxiaXRzaGFyZS5jb20KYml0c25vb3AuY29tCi5iaXR2aXNlLmNvbQp8fGJp dHZpc2UuY29tCmJpemhhdC5jb20KfHxibC1kb3VqaW5zb3Vrby5jb20KLmJqbmV3 bGlmZS5vcmcKLmJqcy5vcmcKYmp6Yy5vcmcKfHxianpjLm9yZwouYmxhY2tsb2dp Yy5jb20KLmJsYWNrdnBuLmNvbQp8fGJsYWNrdnBuLmNvbQpibGV3cGFzcy5jb20K dG9yLmJsaW5nYmxpbmdzcXVhZC5uZXQKLmJsaW5reC5jb20KfHxibGlua3guY29t CmJsaW53LmNvbQouYmxpcC50dgp8fGJsaXAudHYvCi5ibG9ja2NuLmNvbQp8fGJs b2NrY24uY29tCnx8YmxvY2tsZXNzLmNvbQp8fGJsb2cuZGUKLmJsb2cuanAKfGh0 dHA6Ly9ibG9nLmpwCkBAfHxqcHVzaC5jbgouYmxvZ2NhdGFsb2cuY29tCnx8Ymxv Z2NhdGFsb2cuY29tCnx8YmxvZ2NpdHkubWUKLmJsb2dnZXIuY29tCnx8YmxvZ2dl ci5jb20KYmxvZ2ltZy5qcAp8fGJsb2cua2FuZ3llLm9yZwouYmxvZ2xpbmVzLmNv bQp8fGJsb2dsaW5lcy5jb20KfHxibG9nbG92aW4uY29tCnJjb252ZXJzYXRpb24u YmxvZ3MuY29tCmJsb2d0ZC5uZXQKLmJsb2d0ZC5vcmcKfGh0dHA6Ly9ibG9ndGQu b3JnCnx8Ymxvb2RzaGVkLm5ldAouYmxvb21iZXJnLmNuCnx8Ymxvb21iZXJnLmNu Ci5ibG9vbWJlcmcuY29tCnx8Ymxvb21iZXJnLmNvbQpibG9vbWJlcmcuZGUKfHxi bG9vbWJlcmcuZGUKfHxibG9vbWZvcnR1bmUuY29tCmJsdWVhbmdlbGxpdmUuY29t Ci5ibWZpbm4uY29tCi5ibmV3cy5jbwp8fGJuZXdzLmNvCnx8Ym5ybWV0YWwuY29t CmJvYXJkcmVhZGVyLmNvbS90aHJlYWQKfHxib2FyZHJlYWRlci5jb20KLmJvZC5h c2lhCnxodHRwOi8vYm9kLmFzaWEKLmJvZG9nODguY29tCi5ib2xlaHZwbi5uZXQK fHxib2xlaHZwbi5uZXQKYm9uYm9ubWUuY29tCi5ib25ib25zZXguY29tCi5ib25m b3VuZGF0aW9uLm9yZwouYm9uZ2FjYW1zLmNvbQp8fGJvb2JzdGFncmFtLmNvbQp8 fGJvb2suY29tLnR3CmJvb2tlcHViLmNvbQp8fGJvb2tzLmNvbS50dwp8fGJvdGFu d2FuZy5jb20KLmJvdC5udQouYm93ZW5wcmVzcy5jb20KfHxib3dlbnByZXNzLmNv bQp8fGFwcC5ib3guY29tCmRsLmJveC5uZXQKfHxkbC5ib3gubmV0Ci5ib3hwbi5j b20KfHxib3hwbi5jb20KYm94dW4uY29tCnx8Ym94dW4uY29tCi5ib3h1bi50dgp8 fGJveHVuLnR2CmJveHVuYmxvZy5jb20KfHxib3h1bmJsb2cuY29tCi5ib3h1bmNs dWIuY29tCmJveWFuZ3UuY29tCi5ib3lmcmllbmR0di5jb20KLmJveXNmb29kLmNv bQp8fGJyLnN0Ci5icmFpbnlxdW90ZS5jb20vcXVvdGVzL2F1dGhvcnMvZC9kYWxh aV9sYW1hCnx8YnJhbmRvbmh1dGNoaW5zb24uY29tCnx8YnJhdW1laXN0ZXIub3Jn Ci5icmF2b3R1YmUubmV0Cnx8YnJhdm90dWJlLm5ldAouYnJhenplcnMuY29tCnx8 YnJhenplcnMuY29tCi5icmVhay5jb20KfHxicmVhay5jb20KYnJlYWtnZncuY29t Cnx8YnJlYWtnZncuY29tCmJyZWFraW5nOTExLmNvbQouYnJlYWtpbmd0d2VldHMu Y29tCnx8YnJlYWtpbmd0d2VldHMuY29tCnx8YnJlYWt3YWxsLm5ldApicmlpYW4u Y29tLzY1MTEvZnJlZWdhdGUKLmJyaWVmZHJlYW0uY29tLyVFNyVCNCVBMCVFNiVB MyVCQQpicml6emx5LmNvbQp8fGJyaXp6bHkuY29tCnx8YnJrbWQuY29tCmJyb2Fk Ym9vay5jb20KLmJyb2FkcHJlc3NpbmMuY29tCnx8YnJvYWRwcmVzc2luYy5jb20K YmJzLmJyb2NrYmJzLmNvbQpicnVjZXdhbmcubmV0Ci5icnV0YWx0Z3AuY29tCnx8 YnJ1dGFsdGdwLmNvbQouYnQybWFnLmNvbQp8fGJ0OTUuY29tCi5idGFpYS5jb20K LmJ0YnRhdi5jb20KfGh0dHA6Ly9idGRpZ2cub3JnCi5idGt1Lm1lCnx8YnRrdS5t ZQp8fGJ0a3Uub3JnCi5idHNwcmVhZC5jb20KLmJ0c3luY2tleXMuY29tCi5idWRh ZWR1Lm9yZwp8fGJ1ZGFlZHUub3JnCi5idWRkaGFuZXQuY29tLnR3L3pmcm9wL3Rp YmV0Ci5idWRkaGlzdGNoYW5uZWwudHYKLmJ1ZmZlcmVkLmNvbQp8aHR0cDovL2J1 ZmZlcmVkLmNvbQouYnVsbG9nLm9yZwp8fGJ1bGxvZy5vcmcKLmJ1bGxvZ2dlci5j b20KfHxidWxsb2dnZXIuY29tCmJ1bmJ1bmhrLmNvbQouYnVzYXlhcmkuY29tCnxo dHRwOi8vYnVzYXlhcmkuY29tCi5idXNpbmVzc2luc2lkZXIuY29tL2JpbmctY291 bGQtYmUtY2Vuc29yaW5nLXNlYXJjaC1yZXN1bHRzLTIwMTQKLmJ1c2luZXNzaW5z aWRlci5jb20vY2hpbmEtYmFua3MtcHJlcGFyaW5nLWZvci1kZWJ0LWltcGxvc2lv bi0yMDE0Ci5idXNpbmVzc2luc2lkZXIuY29tL2hvbmcta29uZy1hY3RpdmlzdHMt ZGVmeS1wb2xpY2UtdGVhci1nYXMtYXMtcHJvdGVzdHMtY29udGludWUtb3Zlcm5p Z2h0LTIwMTQKLmJ1c2luZXNzaW5zaWRlci5jb20vaW50ZXJuZXQtb3V0YWdlcy1y ZXBvcnRlZC1pbi1ub3J0aC1rb3JlYS0yMDE0Ci5idXNpbmVzc2luc2lkZXIuY29t L2lwaG9uZS02LWlzLWFwcHJvdmVkLWZvci1zYWxlLWluLWNoaW5hLTIwMTQKLmJ1 c2luZXNzaW5zaWRlci5jb20vbmZsLWFubm91bmNlcnMtc3VyZmFjZS10YWJsZXRz LTIwMTQKLmJ1c2luZXNzaW5zaWRlci5jb20vcGFuYW1hLXBhcGVycwouYnVzaW5l c3NpbnNpZGVyLmNvbS91bWJyZWxsYS1tYW4taG9uZy1rb25nLTIwMTQKfGh0dHA6 Ly93d3cuYnVzaW5lc3NpbnNpZGVyLmNvbS5hdS8qCi5idXNpbmVzc3dlZWsuY29t Ci5idXN1Lm9yZy9uZXdzCnxodHRwOi8vYnVzdS5vcmcvbmV3cwpidXN5dHJhZGUu Y29tCi5idXVnYWEuY29tCi5idXp6aGFuZC5jb20KLmJ1enpoYW5kLm5ldAouYnV6 em9yYW5nZS5jb20KfHxidXp6b3JhbmdlLmNvbQp8fGJ2cG4uY29tCmJ3c2ouaGsK fHxieC50bAoKIS0tLS0tLS0tLS0tLS0tLS0tLS0tQ0MtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCi5jLXNwYW52aWRlby5vcmcKfHxjLXNwYW52aWRlby5vcmcKfHxj LWVzdC1zaW1wbGUuY29tCi5jMTAwdGliZXQub3JnCnx8Y2FibGVnYXRlc2VhcmNo Lm5ldAouY2FjaGluZXNlLmNvbQouY2FjbncuY29tCnxodHRwOi8vY2FjbncuY29t Ci5jYWN0dXN2cG4uY29tCnx8Y2FjdHVzdnBuLmNvbQouY2FmZXByZXNzLmNvbQou Y2Foci5vcmcudHcKLmNhbGFtZW8uY29tL2Jvb2tzCmNuLmNhbGFtZW8uY29tCnxo dHRwOi8vY24uY2FsYW1lby5jb20KLmNhbGdhcnljaGluZXNlLmNhCi5jYWxnYXJ5 Y2hpbmVzZS5jb20KLmNhbGdhcnljaGluZXNlLm5ldAp8aHR0cDovL2Jsb2cuY2Fs aWJyZS1lYm9vay5jb20KfGh0dHA6Ly9nb29nbGUuY2Fsc3RhdGUuZWR1CmZhbHVu LmNhbHRlY2guZWR1Ci5pdHMuY2FsdGVjaC5lZHUvfmZhbHVuLwouY2FtNC5jb20K LmNhbTQuanAKLmNhbTQuc2cKLmNhbWZyb2cuY29tCnx8Y2FtZnJvZy5jb20KfHxj YW1zLmNvbQouY2Ftcy5vcmcuc2cKY2FuYWRhbWVldC5jb20KLmNhbmFscG9ybm8u Y29tCnxodHRwOi8vYmJzLmNhbnRvbmVzZS5hc2lhLwohLS1odHRwOi8vd3d3LmNh bnRvbmVzZS5hc2lhL2FjdGlvbi1iYnMuaHRtbAouY2FueXUub3JnCnx8Y2FueXUu b3JnCi5jYW8uaW0KLmNhb2JpYW4uaW5mbwp8fGNhb2JpYW4uaW5mbwpjYW9jaGFu Z3FpbmcuY29tCnx8Y2FvY2hhbmdxaW5nLmNvbQouY2FwLm9yZy5oawp8fGNhcC5v cmcuaGsKLmNhcmFiaW5hc3lwaXN0b2xhcy5jb20KY2FyZGluYWxrdW5nZm91bmRh dGlvbi5vcmcKY2FybW90b3JzaG93LmNvbQpzcy5jYXJyeXpob3UuY29tCi5jYXJ0 b29ubW92ZW1lbnQuY29tCnx8Y2FydG9vbm1vdmVtZW50LmNvbQouY2FzYWRlbHRp YmV0YmNuLm9yZwouY2FzYXRpYmV0Lm9yZy5teAp8aHR0cDovL2Nhc2F0aWJldC5v cmcubXgKY2FyaS5jb20ubXkKfHxjYXJpYmJlYW5jb20uY29tCi5jYXNpbm9raW5n LmNvbQouY2FzaW5vcml2YS5jb20KfHxjYXRjaDIyLm5ldAouY2F0Y2hnb2QuY29t CnxodHRwOi8vY2F0Y2hnb2QuY29tCnx8Y2F0ZmlnaHRwYXlwZXJ2aWV3Lnh4eAou Y2F0aG9saWMub3JnLmhrCnx8Y2F0aG9saWMub3JnLmhrCmNhdGhvbGljLm9yZy50 dwp8fGNhdGhvbGljLm9yZy50dwouY2F0aHZvaWNlLm9yZy50dwp8fGNhdHR0LmNv bQouY2JjLmNhCnx8Y2JjLmNhCi5jYnNuZXdzLmNvbS92aWRlbwouY2J0Yy5vcmcu aGsKIS0uY2NjLmRlCiEtfHxjY2MuZGUKfHxjY2NhdC5jYwp8fGNjY2F0LmNvCi5j Y2R0ci5vcmcKfHxjY2R0ci5vcmcKLmNjaGVyZS5jb20KfHxjY2hlcmUuY29tCi5j Y2ltLm9yZwouY2NsaWZlLmNhCmNjbGlmZS5vcmcKY2NsaWZlZmwub3JnCi5jY3Ro ZXJlLmNvbQp8fGNjdGhlcmUuY29tCi5jY3Rtd2ViLm5ldAouY2N0b25nYmFvLmNv bS9hcnRpY2xlLzIwNzg3MzIKY2N1ZS5jYQpjY3VlLmNvbQouY2N2b2ljZS5jYQou Y2N3Lm9yZy50dwouY2dkZXBvdC5vcmcKfGh0dHA6Ly9jZ2RlcG90Lm9yZwp8fGNk Ym9vay5vcmcKLmNkY3BhcnR5LmNvbQouY2RlZi5vcmcKfHxjZGVmLm9yZwp8fGNk aWcuaW5mbwpjZGpwLm9yZwp8fGNkanAub3JnCi5jZG4tYXBwbGUuY29tCnx8Y2Ru LWFwcGxlLmNvbQouY2RuZXdzLmNvbS50dwpjZHAxOTg5Lm9yZwpjZHAxOTk4Lm9y Zwp8fGNkcDE5OTgub3JnCmNkcDIwMDYub3JnCnx8Y2RwMjAwNi5vcmcKLmNkcGEu dXJsLnR3CmNkcGV1Lm9yZwpjZHB1c2Eub3JnCmNkcHdlYi5vcmcKfHxjZHB3ZWIu b3JnCmNkcHd1Lm9yZwp8fGNkcHd1Lm9yZwp8fGNkdy5jb20KLmNlY2MuZ292Cnx8 Y2VjYy5nb3YKfHxjZWxsdWxvLmluZm8KfHxjZW5ld3MuZXUKfHxjZW50ZXJmb3Jo dW1hbnJlcHJvZC5jb20KfHxjZW50cmFsbmF0aW9uLmNvbQouY2VudHVyeXMubmV0 CnxodHRwOi8vY2VudHVyeXMubmV0Ci5jZmhrcy5vcmcuaGsKLmNmb3MuZGUKLmNm dGZjLmNvbQouY2dzdC5lZHUKLmNoYW5nZS5vcmcKfHxjaGFuZ2Uub3JnCi5jaGFu Z3AuY29tCnx8Y2hhbmdwLmNvbQouY2hhbmdzYS5uZXQKfGh0dHA6Ly9jaGFuZ3Nh Lm5ldAouY2hhbm5lbDhuZXdzLnNnL25ld3M4Ci5jaGFwbTI1LmNvbQouY2hhdHVy YmF0ZS5jb20KLmNodWFuZy15ZW4ub3JnCmNoZW5nbWluZ21hZy5jb20KLmNoZW5n dWFuZ2NoZW5nLmNvbQp8fGNoZW5ndWFuZ2NoZW5nLmNvbQouY2hlbnBva29uZy5j b20KLmNoZW5wb2tvbmcubmV0CnxodHRwOi8vY2hlbnBva29uZy5uZXQKfHxjaGVy cnlzYXZlLmNvbQouY2hob25nYmkub3JnCmNoaWNhZ29uY210di5jb20KfGh0dHA6 Ly9jaGljYWdvbmNtdHYuY29tCi5jaGluYS13ZWVrLmNvbQpjaGluYTEwMS5jb20K fHxjaGluYTEwMS5jb20KfHxjaGluYTE4Lm9yZwp8fGNoaW5hMjEuY29tCmNoaW5h MjEub3JnCnx8Y2hpbmEyMS5vcmcKLmNoaW5hNTAwMC51cwpjaGluYWFmZmFpcnMu b3JnCnx8Y2hpbmFhZmZhaXJzLm9yZwp8fGNoaW5hYWlkLm1lCmNoaW5hYWlkLnVz CmNoaW5hYWlkLm9yZwpjaGluYWFpZC5uZXQKY2hpbmFjb21tZW50cy5vcmcKfHxj aGluYWNvbW1lbnRzLm9yZwouY2hpbmFjaGFuZ2Uub3JnCnx8Y2hpbmFjaGFuZ2Uu b3JnCmNoaW5hY2hhbm5lbC5oawp8fGNoaW5hY2hhbm5lbC5oawouY2hpbmFjaXR5 bmV3cy5iZQouY2hpbmFkaWFsb2d1ZS5uZXQKLmNoaW5hZGlnaXRhbHRpbWVzLm5l dAp8fGNoaW5hZGlnaXRhbHRpbWVzLm5ldAouY2hpbmFlbGVjdGlvbnMub3JnCnx8 Y2hpbmFlbGVjdGlvbnMub3JnCi5jaGluYWV3ZWVrbHkuY29tCnx8Y2hpbmFld2Vl a2x5LmNvbQp8fGNoaW5hZnJlZXByZXNzLm9yZwouY2hpbmFnYXRlLmNvbQpjaGlu YWdlZWtzLm9yZwpjaGluYWdmdy5vcmcKfHxjaGluYWdmdy5vcmcKLmNoaW5hZ29u ZXQuY29tCi5jaGluYWdyZWVucGFydHkub3JnCnx8Y2hpbmFncmVlbnBhcnR5Lm9y ZwouY2hpbmFob3Jpem9uLm9yZwp8fGNoaW5haG9yaXpvbi5vcmcKLmNoaW5haHVz aC5jb20KLmNoaW5haW5wZXJzcGVjdGl2ZS5jb20KfHxjaGluYWludGVyaW1nb3Yu b3JnCmNoaW5hbGFib3J3YXRjaC5vcmcKY2hpbmFsYXd0cmFuc2xhdGUuY29tCi5j aGluYXBvc3QuY29tLnR3L3RhaXdhbi9uYXRpb25hbC9uYXRpb25hbC1uZXdzCmNo aW5heGNoaW5hLmNvbS9ob3d0bwpjaGluYWxhd2FuZHBvbGljeS5jb20KLmNoaW5h bXVsZS5jb20KfHxjaGluYW11bGUuY29tCmNoaW5hbXoub3JnCi5jaGluYXByZXNz LmNvbS5teQp8fGNoaW5hcHJlc3MuY29tLm15Ci5jaGluYS1yZXZpZXcuY29tLnVh CnxodHRwOi8vY2hpbmEtcmV2aWV3LmNvbS51YQouY2hpbmFyaWdodHNpYS5vcmcK Y2hpbmFzbWlsZS5uZXQvZm9ydW1zCmNoaW5hc29jaWFsZGVtb2NyYXRpY3BhcnR5 LmNvbQp8fGNoaW5hc29jaWFsZGVtb2NyYXRpY3BhcnR5LmNvbQpjaGluYXNvdWwu b3JnCnx8Y2hpbmFzb3VsLm9yZwouY2hpbmFzdWNrcy5uZXQKLmNoaW5hdGltZXMu Y29tL3JlYWx0aW1lbmV3cy8yNjA0MDkvCnx8Y2hpbmF0b3BzZXguY29tCi5jaGlu YXRvd24uY29tLmF1CmNoaW5hdHdlZXBzLmNvbQpjaGluYXdheS5vcmcKLmNoaW5h d29ya2VyLmluZm8KfHxjaGluYXdvcmtlci5pbmZvCmNoaW5heW91dGgub3JnLmhr CmNoaW5heXVhbm1pbi5vcmcKfHxjaGluYXl1YW5taW4ub3JnCi5jaGluZXNlLWhl cm1pdC5uZXQKY2hpbmVzZS1sZWFkZXJzLm9yZwpjaGluZXNlLW1lbW9yaWFsLm9y ZwouY2hpbmVzZWRhaWx5LmNvbQp8fGNoaW5lc2VkYWlseW5ld3MuY29tCi5jaGlu ZXNlZGVtb2NyYWN5LmNvbQp8fGNoaW5lc2VkZW1vY3JhY3kuY29tCnx8Y2hpbmVz ZWdheS5vcmcKLmNoaW5lc2VuLmRlCnx8Y2hpbmVzZW4uZGUKLmNoaW5lc2VuZXdz Lm5ldC5hdS8KLmNoaW5lc2VwZW4ub3JnCi5jaGluZXNldGFsa3MubmV0L2NoCnx8 Y2hpbmVzZXVwcmVzcy5jb20KLmNoaW5nY2hlb25nLmNvbQp8fGNoaW5nY2hlb25n LmNvbQouY2hpbm1hbi5uZXQKfGh0dHA6Ly9jaGlubWFuLm5ldApjaGl0aHUub3Jn CnxodHRwOi8vY2huLmNob3N1bi5jb20KY25uZXdzLmNob3N1bi5jb20vY2xpZW50 L25ld3Mvdml3LmFzcD9jYXRlPUMwMSZtY2F0ZQouY2hyZG5ldC5jb20KfGh0dHA6 Ly9jaHJkbmV0LmNvbQouY2hyaXN0aWFuZnJlZWRvbS5vcmcKfGh0dHA6Ly9jaHJp c3RpYW5mcmVlZG9tLm9yZwpjaHJpc3RpYW5zdHVkeS5jb20KfHxjaHJpc3RpYW5z dHVkeS5jb20KY2hyaXN0dXNyZXgub3JnL3d3dzEvc2RjCi5jaHVib2xkLmNvbQpj aHVidW4uY29tCmNodWl6aS5uZXQKY2hyaXN0aWFudGltZXMub3JnLmhrCi5jaHJs YXd5ZXJzLmhrCnxodHRwOi8vY2hybGF3eWVycy5oawouY2h1cmNoaW5ob25na29u Zy5vcmcvYjUvaW5kZXgucGhwCnxodHRwOi8vY2h1cmNoaW5ob25na29uZy5vcmcv YjUvaW5kZXgucGhwCi5jaHVzaGlnYW5nZHJ1Zy5jaAouY2llbmVuLmNvbQouY2lu ZWFzdGVudHJlZmYuZGUKLmNpcGZnLm9yZwp8fGNpcmNsZXRoZWJheWZvcnRpYmV0 Lm9yZwp8fGNpcm9zYW50aWxsaS5jb20KLmNpdGl6ZW5jbi5jb20KfHxjaXRpemVu Y24uY29tCnxodHRwOi8vY2l0aXplbmxhYi5vcmcKfGh0dHA6Ly93d3cuY2l0aXpl bmxhYi5vcmcKfHxjaXRpemVuc2NvbW1pc3Npb24uaGsKLmNpdGl6ZW5sYWIub3Jn CmNpdGl6ZW5zcmFkaW8ub3JnCi5jaXR5MzY1LmNhCnxodHRwOi8vY2l0eTM2NS5j YQpjaXR5OXguY29tCnx8Y2l0eXBvcHVsYXRpb24uZGUKLmNpdHl0YWxrLnR3L2V2 ZW50Ci5jaXZpY3BhcnR5LmhrCnx8Y2l2aWNwYXJ0eS5oawouY2l2aWxkaXNvYmVk aWVuY2Vtb3ZlbWVudC5vcmcKY2l2aWxocmZyb250Lm9yZwp8fGNpdmlsaHJmcm9u dC5vcmcKLmNpdmlsaWFuZ3VubmVyLmNvbQouY2l2aWxtZWRpYS50dwp8fGNpdmls bWVkaWEudHcKcHNpcGhvbi5jaXZpc2VjLm9yZwp8fHZwbi5jamIubmV0Ci5jazEw MS5jb20KfHxjazEwMS5jb20KLmNsYXJpb25wcm9qZWN0Lm9yZy9uZXdzL2lzbGFt aWMtc3RhdGUtaXNpcy1pc2lsLXByb3BhZ2FuZGEKfHxjbGFzc2ljYWxndWl0YXJi bG9nLm5ldAouY2xiLm9yZy5oawpjbGVhcmhhcm1vbnkubmV0CmNsZWFyd2lzZG9t Lm5ldApjbGluaWNhLXRpYmV0LnJ1Ci5jbGlwZmlzaC5kZQpjbG9ha3BvaW50LmNv bQp8fGNsdWIxMDY5LmNvbQpjbWkub3JnLnR3CnxodHRwOi8vd3d3LmNtb2luYy5v cmcKY21wLmhrdS5oawpoa3Vwb3AuaGt1LmhrCnx8Y211bGUuY29tCnx8Y211bGUu b3JnCnx8Y21zLmdvdgp8aHR0cDovL3Zwbi5jbXUuZWR1CnxodHRwOi8vdnBuLnN2 LmNtdS5lZHUKLmNuNi5ldQouY25hLmNvbS50dwp8fGNuYS5jb20udHcKLmNuYWJj LmNvbQouY25kLm9yZwp8fGNuZC5vcmcKZG93bmxvYWQuY25ldC5jb20KLmNuZXgu b3JnLmNuCi5jbmluZXUuY29tCndpa2kuY25pdHRlci5jb20KLmNubi5jb20vdmlk ZW8KLmNucG9saXRpY3Mub3JnCnx8Y25wb2xpdGljcy5vcmcKLmNuLXByb3h5LmNv bQp8aHR0cDovL2NuLXByb3h5LmNvbQouY25wcm94eS5jb20KYmxvZy5jbnllcy5j b20KbmV3cy5jbnllcy5jb20KfHxjb2F0LmNvLmpwCi5jb2NoaW5hLmNvCnx8Y29j aGluYS5jbwp8fGNvY2hpbmEub3JnCi5jb2RlMTk4NC5jb20vNjQKfGh0dHA6Ly9n b2FnZW50LmNvZGVwbGV4LmNvbQp8fGNvZGVzaGFyZS5pbwp8fGNvZGVza3VscHRv ci5vcmcKfGh0dHA6Ly90b3NoLmNvbWVkeWNlbnRyYWwuY29tCmNvbWVmcm9tY2hp bmEuY29tCnx8Y29tZWZyb21jaGluYS5jb20KLmNvbWljLW1lZ2EubWUKY29tbWFu ZGFybXMuY29tCnx8Y29tbWVudHNoay5jb20KLmNvbW11bmlzdGNyaW1lcy5vcmcK fHxjb21tdW5pc3RjcmltZXMub3JnCnx8Y29tbXVuaXR5Y2hvaWNlY3UuY29tCnx8 Y29tcGlsZWhlYXJ0LmNvbQp8fGNvbm9oYS5qcAouY29udGFjdG1hZ2F6aW5lLm5l dAouY29udmlvLm5ldAouY29vYmF5LmNvbQp8aHR0cDovL3d3dy5jb29sMTguY29t L2JicyovCi5jb29sYWxlci5jb20KfHxjb29sYWxlci5jb20KY29vbGRlci5jb20K fHxjb29sZGVyLmNvbQp8fGNvb2xsb3VkLm9yZy50dwouY29vbG5jdXRlLmNvbQp8 fGNvb2xzdHVmZmluYy5jb20KY29ydW1jb2xsZWdlLmNvbQouY29zLW1vZS5jb20K fGh0dHA6Ly9jb3MtbW9lLmNvbQouY29zcGxheWphdi5wbAp8aHR0cDovL2Nvc3Bs YXlqYXYucGwKLmNvdHdlZXQuY29tCnx8Y290d2VldC5jb20KLmNvdXJzZWhlcm8u Y29tCnx8Y291cnNlaGVyby5jb20KY3BqLm9yZwp8fGNwai5vcmcKLmNxOTkudXMK fGh0dHA6Ly9jcTk5LnVzCmNyYWNrbGUuY29tCnx8Y3JhY2tsZS5jb20KLmNyYXp5 cy5jYwouY3JhenlzaGl0LmNvbQp8fGNyY2hpbmEub3JnCmNyZC1uZXQub3JnCmNy ZWFkZXJzLm5ldAp8fGNyZWFkZXJzLm5ldAouY3JlYWRlcnNuZXQuY29tCnx8Y3Jp c3R5bGkuY29tCi5jcm9jb3R1YmUuY29tCnxodHRwOi8vY3JvY290dWJlLmNvbQou Y3Jvc3N0aGV3YWxsLm5ldAp8fGNyb3NzdGhld2FsbC5uZXQKLmNyb3NzdnBuLm5l dAp8fGNyb3NzdnBuLm5ldAp8fGNydWNpYWwuY29tCmNzZHBhcnR5LmNvbQp8fGNz ZHBhcnR5LmNvbQp8fGNzdWNoZW4uZGUKLmNzdy5vcmcudWsKLmN0Lm9yZy50dwp8 fGN0Lm9yZy50dwouY3Rhby5vcmcKLmN0ZnJpZW5kLm5ldAouY3RpdHYuY29tLnR3 CmN0cy5jb20udHcKfGh0dHA6Ly9saWJyYXJ5LnVzYy5jdWhrLmVkdS5oay8KfGh0 dHA6Ly9tamxzaC51c2MuY3Voay5lZHUuaGsvCi5jdWhrYWNzLm9yZy9+YmVubmcK LmN1aWh1YS5vcmcKfHxjdWlodWEub3JnCi5jdWl3ZWlwaW5nLm5ldAp8fGN1aXdl aXBpbmcubmV0Cnx8Y3VsdHVyZS50dwouY3VtbG91ZGVyLmNvbQp8fGN1bWxvdWRl ci5jb20KfHxjdXJ2ZWZpc2guY29tCi5jdXN1LmhrCnx8Y3VzdS5oawouY3V0c2Nl bmVzLm5ldAouY3cuY29tLnR3Cnx8Y3cuY29tLnR3CnxodHRwOi8vZm9ydW0uY3li ZXJjdG0uY29tCmN5YmVyZ2hvc3R2cG4uY29tCnx8Y3liZXJnaG9zdHZwbi5jb20K fHxjeW5zY3JpYmUuY29tCmN5dG9kZS51cwp8fGlmYW4uY3ouY2MKfHxtaWtlLmN6 LmNjCnx8bmljLmN6LmNjCgohLS0tLS0tLS0tLS0tLS0tLS0tLS1ERC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KLmQtZnVreXUuY29tCnxodHRwOi8vZC1mdWt5dS5j b20KY2wuZDB6Lm5ldAouZDEwMC5uZXQKfHxkMTAwLm5ldAouZDJiYXkuY29tCnxo dHRwOi8vZDJiYXkuY29tCi5kYWJyLmNvLnVrCnx8ZGFici5jby51awpkYWJyLmV1 CmRhYnIubW9iaQp8fGRhYnIubW9iaQp8fGRhYnIubWUKZGFkYXppbS5jb20KfHxk YWRhemltLmNvbQouZGFkaTM2MC5jb20KLmRhZmFiZXQuY29tCmRhZmFnb29kLmNv bQpkYWZhaGFvLmNvbQouZGFmb2gub3JnCi5kYWZ0cG9ybi5jb20KLmRhZ2VsaWpr c2VzdGFuZGFhcmQubmwKLmRhaWRvc3R1cC5ydQp8aHR0cDovL2RhaWRvc3R1cC5y dQouZGFpbGlkYWlsaS5jb20KfHxkYWlsaWRhaWxpLmNvbQouZGFpbHltb3Rpb24u Y29tCnx8ZGFpbHltb3Rpb24uY29tCmRhaXBoYXBpbmZvLm5ldAouZGFqaXl1YW4u Y29tCnx8ZGFqaXl1YW4uZGUKZGFqaXl1YW4uZXUKZGFsYWlsYW1hLmNvbQouZGFs YWlsYW1hLm1uCnxodHRwOi8vZGFsYWlsYW1hLm1uCi5kYWxhaWxhbWEucnUKfHxk YWxhaWxhbWEucnUKZGFsYWlsYW1hODAub3JnCi5kYWxhaWxhbWEtYXJjaGl2ZXMu b3JnCi5kYWxhaWxhbWFjZW50ZXIub3JnCnxodHRwOi8vZGFsYWlsYW1hY2VudGVy Lm9yZwpkYWxhaWxhbWFmZWxsb3dzLm9yZwouZGFsYWlsYW1hZmlsbS5jb20KLmRh bGFpbGFtYWZvdW5kYXRpb24ub3JnCi5kYWxhaWxhbWFoaW5kaS5jb20KLmRhbGFp bGFtYWluYXVzdHJhbGlhLm9yZwouZGFsYWlsYW1hamFwYW5lc2UuY29tCi5kYWxh aWxhbWFwcm90ZXN0ZXJzLmluZm8KLmRhbGFpbGFtYXF1b3Rlcy5vcmcKLmRhbGFp bGFtYXRydXN0Lm9yZwouZGFsYWlsYW1hdmlzaXQub3JnLm56Ci5kYWxhaWxhbWF3 b3JsZC5jb20KfHxkYWxhaWxhbWF3b3JsZC5jb20KZGFsaWFubWVuZy5vcmcKfHxk YWxpYW5tZW5nLm9yZwouZGFsaXVsaWFuLm9yZwp8fGRhbGl1bGlhbi5vcmcKLmRh bmtlNGNoaW5hLm5ldAp8fGRhbmtlNGNoaW5hLm5ldAouZGFud2VpLm9yZwpkYW9s YW4ubmV0Ci5kYW96aG9uZ3hpbmcub3JnCmRhcmt0b3kubmV0Cnx8ZGFzdHJhc3Np Lm9yZwpibG9nLmRhdW0ubmV0L19ibG9nCi5kYXZpZC1raWxnb3VyLmNvbQp8aHR0 cDovL2RhdmlkLWtpbGdvdXIuY29tCmRheGEuY24KfHxkYXhhLmNuCmNuLmRheWFi b29rLmNvbQouZGF5bGlmZS5jb20vdG9waWMvZGFsYWlfbGFtYQp8fGRiLnR0Ci5k YmMuaGsvbWFpbgp8fGRjYXJkLnR3CmRjbWlsaXRhcnkuY29tCi5kZGMuY29tLnR3 Ci5kZGh3LmluZm8KfHxkZS1zY2kub3JnCi5kZS1zY2kub3JnCnBhY2thZ2VzLmRl Ymlhbi5vcmcvemgtY24vbGVubnkvZ3Bhc3MKfHxkZWNvZGV0LmNvCgohLS1Pcmln aW46Y2RuLWkzMCRfCiEtLUV4Y2VwdGlvbjogSG9tZXBhZ2UgYWNjZXNzIHdpdGhv dXQgcnN0CiEtLUtleXdvcmQgaXMgJF8KLmRlZmluZWJhYmUuY29tCgp8fGRlbGNh bXAubmV0CmRlbGljaW91cy5jb20vR0ZXYm9va21hcmsKLmRlbW9jcmF0cy5vcmcK fHxkZW1vY3JhdHMub3JnCnx8ZGVzYy5zZQp8fGRlc3NjaS5jb20KLmRlc3Ryb3kt Y2hpbmEuanAKfHxkZXV0c2NoZS13ZWxsZS5kZQohLS18fGRldmlhbnRhcnQuY29t CiEtLXx8ZGV2aWFudGFydC5uZXQKfHxkZXZpby51cwp8fGRldnBuLmNvbQp8fGRm YXMubWlsCmRmbi5vcmcKZGhhcm1ha2FyYS5uZXQKLmRoYXJhbXNhbGFuZXQuY29t Ci5kaWFveXVpc2xhbmRzLm9yZwp8fGRpYW95dWlzbGFuZHMub3JnCi5kaWZhbmd3 ZW5nZS5vcmcKfGh0dHA6Ly9kaWdpbGFuZC50dy8KfHxkaWdpdGFsbm9tYWRzcHJv amVjdC5vcmcKLmRpaWdvLmNvbQp8fGRpaWdvLmNvbQp8fGRpbGJlci5zZQp8fGZ1 cmwubmV0Ci5kaXBpdHkuY29tCnx8ZGlyZWN0Y3JlYXRpdmUuY29tCiEtLXx8ZGlz Y29ncy5jb20KIS0tQEB8fGNkbi5kaXNjb2dzLmNvbQp8aHR0cHM6Ly9zZWFyY2gu ZGlzY29ubmVjdC5tZQouZGlzY3Vzcy5jb20uaGsKfHxkaXNjdXNzLmNvbS5oawou ZGlzY3VzczR1LmNvbQpkaXNwLmNjCi5kaXNxdXMuY29tCnx8ZGlzcXVzLmNvbQou ZGl0LWluYy51cwp8fGRpdC1pbmMudXMKLmRpemhpZGl6aGkuY29tCnx8ZGl6aHV6 aGlzaGFuZy5jb20KZGphbmdvc25pcHBldHMub3JnCi5kam9yei5jb20KfHxkam9y ei5jb20KfHxkbC1sYWJ5LmpwCnx8ZGxzaXRlLmNvbQp8fGRseW91dHViZS5jb20K fHxkbWNkbi5uZXQKLmRuc2NyeXB0Lm9yZwp8fGRuc2NyeXB0Lm9yZwp8fGRuczJn by5jb20KfHxkbnNzZWMubmV0CmRvY3RvcnZvaWNlLm9yZwoKIS0tRG9nRmFydE5l dHdvcmsKLmRvZ2ZhcnRuZXR3b3JrLmNvbS90b3VyCmdsb3J5aG9sZS5jb20KCi5k b2ppbi5jb20KLmRvay1mb3J1bS5uZXQKfHxkb2xjLmRlCnx8ZG9sZi5vcmcuaGsK fHxkb2xsZi5jb20KLmRvbWFpbi5jbHViLnR3Ci5kb21haW50b2RheS5jb20uYXUK Y2hpbmVzZS5kb25nYS5jb20KZG9uZ3RhaXdhbmcuY29tCnx8ZG9uZ3RhaXdhbmcu Y29tCi5kb25ndGFpd2FuZy5uZXQKfHxkb25ndGFpd2FuZy5uZXQKLmRvbmd5YW5n amluZy5jb20KfGh0dHA6Ly9kYW5ib29ydS5kb25tYWkudXMKLmRvbnRmaWx0ZXIu dXMKfHxkb250bW92ZXRvY2hpbmEuY29tCi5kb3JqZXNodWdkZW4uY29tCi5kb3Rw bGFuZS5jb20KfHxkb3RwbGFuZS5jb20KfHxkb3RzdWIuY29tCi5kb3R2cG4uY29t Cnx8ZG90dnBuLmNvbQouZG91Yi5pbwp8fGRvdWIuaW8KfHxkb3Vnc2NyaXB0cy5j b20KfHxkb3Vob2thbmtvLm5ldAp8fGRvdWppbmNhZmUuY29tCmRvd2VpLm9yZwpk cGhrLm9yZwpkcHAub3JnLnR3Cnx8ZHBwLm9yZy50dwp8fGRwci5pbmZvCnx8ZHJh Z29uc3ByaW5ncy5vcmcKIS0tfHxkcmF3LmlvCi5kcmVhbWFtYXRldXJzLmNvbQou ZHJlcHVuZy5vcmcKfHxkcmdhbi5uZXQKLmRybWluZ3hpYS5vcmcKfGh0dHA6Ly9k cm1pbmd4aWEub3JnCnx8ZHJvcGJvb2tzLnR2Cnx8ZHJvcGJveC5jb20KfHxhcGku ZHJvcGJveGFwaS5jb20KfHxub3RpZnkuZHJvcGJveGFwaS5jb20KfHxkcm9wYm94 dXNlcmNvbnRlbnQuY29tCmRyc3VuYWNhZGVteS5jb20KLmRydHViZXIuY29tCi5k c2NuLmluZm8KfGh0dHA6Ly9kc2NuLmluZm8KLmRzdGsuZGsKfGh0dHA6Ly9kc3Rr LmRrCnx8ZHRpYmxvZy5jb20KfHxkdGljLm1pbAouZHR3YW5nLm9yZwouZHVhbnpo aWh1LmNvbQouZHVja2Rucy5vcmcKfGh0dHA6Ly9kdWNrZG5zLm9yZwouZHVja2R1 Y2tnby5jb20KfHxkdWNrZHVja2dvLmNvbQouZHVja2xvYWQuY29tL2Rvd25sb2Fk Cnx8ZHVja215bGlmZS5jb20KLmR1Z2EuanAKfGh0dHA6Ly9kdWdhLmpwCi5kdWlo dWEub3JnCnx8ZHVpaHVhLm9yZwp8fGR1aWh1YWhyam91cm5hbC5vcmcKLmR1bnlh YnVsdGVuaS5uZXQKLmR1b3dlaXRpbWVzLmNvbQp8fGR1b3dlaXRpbWVzLmNvbQpk dXBpbmcubmV0Cnx8ZHVwbGljYXRpLmNvbQpkdXBvbGEuY29tCmR1cG9sYS5uZXQK LmR1c2hpLmNhCnx8ZHZvcmFrLm9yZwouZHcuY29tCnx8ZHcuY29tCnx8ZHcuZGUK LmR3LXdvcmxkLmNvbQp8fGR3LXdvcmxkLmNvbQouZHctd29ybGQuZGUKfGh0dHA6 Ly9kdy13b3JsZC5kZQp3d3cuZHdoZWVsZXIuY29tCmR3bmV3cy5jb20KfHxkd25l d3MuY29tCmR3bmV3cy5uZXQKfHxkd25ld3MubmV0Cnh5cy5keGlvbmcuY29tCnx8 ZHluYXdlYmluYy5jb20KLmR6emUuY29tCgohLS0tLS0tLS0tLS0tLS0tLS0tLS1F RS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KfHxlLWNsYXNzaWNhbC5jb20udHcK fHxlLWdvbGQuY29tCi5lLWdvbGQuY29tCi5lLWhlbnRhaS5vcmcKfHxlLWhlbnRh aS5vcmcKLmUtaGVudGFpZGIuY29tCnxodHRwOi8vZS1oZW50YWlkYi5jb20KZS1p bmZvLm9yZy50dwouZS10cmFkZXJsYW5kLm5ldC9ib2FyZAouZS16b25lLmNvbS5o ay9kaXNjdXoKfGh0dHA6Ly9lLXpvbmUuY29tLmhrL2Rpc2N1egouZTEyMy5oawp8 fGUxMjMuaGsKLmVhcmx5dGliZXQuY29tCnxodHRwOi8vZWFybHl0aWJldC5jb20K LmVhcnRoY2FtLmNvbQouZWFydGh2cG4uY29tCnx8ZWFydGh2cG4uY29tCmVhc3Rl cm4tYXJrLmNvbQouZWFzdGVybmxpZ2h0bmluZy5vcmcKLmVhc3R0dXJrZXN0YW4u Y29tCnxodHRwOi8vd3d3LmVhc3R0dXJraXN0YW4ubmV0LwouZWFzdHR1cmtpc3Rh bi1nb3Yub3JnCi5lYXN0dHVya2lzdGFuY2Mub3JnCi5lYXN0dHVya2lzdGFuZ292 ZXJubWVudGluZXhpbGUudXMKfHxlYXN0dHVya2lzdGFuZ292ZXJubWVudGluZXhp bGUudXMKLmVhc3ljYS5jYQouZWFzeXBpYy5jb20KLmVib255LWJlYXV0eS5jb20K ZWJvb2ticm93c2UuY29tCmVib29rZWUuY29tCnx8ZWNmYS5vcmcudHcKdXNodWFy ZW5jaXR5LmVjaGFpbmhvc3QuY29tCnx8ZWNpbWcudHcKZWNtaW5pc3RyeS5uZXQK LmVjb25vbWlzdC5jb20KYmJzLmVjc3RhcnQuY29tCmVkZ2VjYXN0Y2RuLm5ldAp8 fGVkZ2VjYXN0Y2RuLm5ldAovdHdpbWdcLmVkZ2VzdWl0ZVwubmV0XC9cLz9hcHBs ZWRhaWx5LwplZGljeXBhZ2VzLmNvbQouZWRtb250b25jaGluYS5jbgouZWRtb250 b25zZXJ2aWNlLmNvbQplZG9vcnMuY29tCi5lZHVicmlkZ2UuY29tCnx8ZWR1YnJp ZGdlLmNvbQouZWR1cHJvLm9yZwp8fGVldnBuLmNvbQplZmNjLm9yZy5oawouZWZ1 a3QuY29tCnxodHRwOi8vZWZ1a3QuY29tCnx8ZWljLWF2LmNvbQp8fGVpcmVpbmlr b3RhZXJ1a2FpLmNvbQouZWlzYmIuY29tCi5la3Npc296bHVrLmNvbQp8fGVrc2lz b3psdWsuY29tCmVsZWN0aW9uc21ldGVyLmNvbQp8fGVsZ29vZy5pbQouZWxwYWlz LmNvbQp8fGVscGFpcy5jb20KLmVsdG9uZGlzbmV5LmNvbQouZW1hZ2EuY29tL2lu Zm8vMzQwNwplbWlseWxhdS5vcmcuaGsKLmVtYW5uYS5jb20vY2hpbmVzZVRyYWRp dGlvbmFsCmJpdGMuYm1lLmVtb3J5LmVkdS9+bHpob3UvYmxvZ3MKLmVtcGZpbC5j b20KLmVtdWxlLWVkMmsuY29tCnxodHRwOi8vZW11bGUtZWQyay5jb20KLmVtdWxl ZmFucy5jb20KfGh0dHA6Ly9lbXVsZWZhbnMuY29tCi5lbXVwYXJhZGlzZS5tZQou ZW5hbnlhbmcubXkKIS0tLmVuYW55YW5nLm15L25ld3MvMjAxNzA1MDIvJUU3JUJF JThFJUU1JTlCJUJEJUU0JUI5JThCJUU5JTlGJUIzJUU1JUE0JUE3JUU1JTlDJUIw JUU5JTlDJTg3JUUzJTgwJThBJUU4JThCJUI5JUU2JTlFJTlDJUUzJTgwJThCJUU3 JThCJUFDJUU1JUFFJUI2Cnx8ZW5ld3N0cmVlLmNvbQouZW5mYWwuZGUKY2hpbmVz ZS5lbmdhZGdldC5jb20KfHxlbmdhZ2VkYWlseS5vcmcKZW5nbGlzaGZvcmV2ZXJ5 b25lLm9yZwp8fGVuZ2xpc2hmcm9tZW5nbGFuZC5jby51awplbmdsaXNocGVuLm9y ZwouZW5saWdodGVuLm9yZy50dwp8fGVudGVybWFwLmNvbQouZW50bnQuY29tCnxo dHRwOi8vZW50bnQuY29tCi5lcGlzY29wYWxjaHVyY2gub3JnCi5lcG9jaGhrLmNv bQp8aHR0cDovL2Vwb2NoaGsuY29tCmVwb2NodGltZXMtYmcuY29tCnx8ZXBvY2h0 aW1lcy1iZy5jb20KZXBvY2h0aW1lcy1yb21hbmlhLmNvbQp8fGVwb2NodGltZXMt cm9tYW5pYS5jb20KZXBvY2h0aW1lcy5jby5pbAp8fGVwb2NodGltZXMuY28uaWwK ZXBvY2h0aW1lcy5jby5rcgp8fGVwb2NodGltZXMuY28ua3IKZXBvY2h0aW1lcy5j b20KfHxlcG9jaHRpbWVzLmNvbQouZXBvY2h0aW1lcy5jegplcG9jaHRpbWVzLmRl CmVwb2NodGltZXMuZnIKLmVwb2NodGltZXMuaWUKLmVwb2NodGltZXMuaXQKZXBv Y2h0aW1lcy5qcAplcG9jaHRpbWVzLnJ1CmVwb2NodGltZXMuc2UKZXBvY2h0aW1l c3RyLmNvbQouZXBvY2h3ZWVrLmNvbQp8fGVwb2Nod2Vlay5jb20KfHxlcG9jaHdl ZWtseS5jb20KLmVwb3JuZXIuY29tCi5lcXVpbmVub3cuY29tCmVyYWJhcnUubmV0 Ci5lcmFjb20uY29tLnR3Ci5lcmF5c29mdC5jb20udHIKLmVyZXB1Ymxpay5jb20K LmVyaWdodHMubmV0Cnx8ZXJpZ2h0cy5uZXQKLmVya3R2LmNvbQp8aHR0cDovL2Vy a3R2LmNvbQp8fGVybmVzdG1hbmRlbC5vcmcKfHxlcm9kYWl6ZW5zeXUuY29tCnx8 ZXJvZG91amlubG9nLmNvbQp8fGVyb2RvdWppbndvcmxkLmNvbQp8fGVyb21hbmdh LWtpbmdkb20uY29tCnx8ZXJvbWFuZ2Fkb3V6aW4uY29tCi5lcm9tb24ubmV0Cnxo dHRwOi8vZXJvbW9uLm5ldAouZXJvcHJvZmlsZS5jb20KLmVyb3RpY3NhbG9vbi5u ZXQKLmVzbGl0ZS5jb20KfHxlc2xpdGUuY29tCiEtLS5lc2xpdGUuY29tL3Byb2R1 Y3QKIS0tLmVzbGl0ZS5jb20vU2VhcmNoX0JXLmFzcHg/cQp3aWtpLmVzdS5pbS8l RTglOUIlQTQlRTglOUIlQTQlRTglQUYlQUQlRTUlQkQlOTUKLmV0YWEub3JnLmF1 Ci5ldGFkdWx0LmNvbQpldGFpd2FubmV3cy5jb20KfHxldGl6ZXIub3JnCnx8ZXRv a2tpLmNvbQohLS0uZXR0b2RheS5uZXQKLmV0dG9kYXkubmV0L25ld3MvMjAxNTEy MTYvNjE0MDgxCmV0dm9ubGluZS5oawouZXUub3JnCnx8ZXUub3JnCi5ldWNhc2lu by5jb20KLmV1bGFtLmNvbQouZXVyZWthdnB0LmNvbQp8fGV1cmVrYXZwdC5jb20K ZWVhcy5ldXJvcGEuZXUvZGVsZWdhdGlvbnMvY2hpbmEvcHJlc3NfY29ybmVyL2Fs bF9uZXdzL25ld3MvMjAxNS8yMDE1MDcxNl96aAplZWFzLmV1cm9wYS5ldS9zdGF0 ZW1lbnRzLWVlYXMvMjAxNS8xNTEwMjIKLmV2c2Nob29sLm5ldAp8aHR0cDovL2V2 c2Nob29sLm5ldAp8fGV4YmxvZy5qcAp8fGJsb2cuZXhibG9nLmNvLmpwCkBAfHx3 d3cuZXhibG9nLmpwCi5leGNocmlzdGlhbi5oawp8fGV4Y2hyaXN0aWFuLmhrCnxo dHRwOi8vYmxvZy5leGNpdGUuY28uanAKfHxleG1vcm1vbi5vcmcKfHxleHBhdHNo aWVsZC5jb20KLmV4cGVjdGhpbS5jb20KfHxleHBlY3RoaW0uY29tCmV4cGVydHMt dW5pdmVycy5jb20KfHxleHBsb2FkZXIubmV0Ci5leHByZXNzdnBuLmNvbQp8fGV4 cHJlc3N2cG4uY29tCi5leHRyZW1ldHViZS5jb20KZXlldmlvLmpwCnx8ZXlldmlv LmpwCi5leW55LmNvbQp8fGV5bnkuY29tCi5lenBjLnRrL2NhdGVnb3J5L3NvZnQK LmV6cGVlci5jb20KCiEtLS0tLS0tLS0tLS0tLS0tLS0tLUZGLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQp8fGZhY2Vib29rcXVvdGVzNHUuY29tCi5mYWNlbGVzcy5t ZQp8fGZhY2VsZXNzLm1lCnxodHRwOi8vZmFjZXNvZnRpYmV0YW5zZWxmaW1tb2xh dG9ycy5pbmZvCnx8ZmFjZXNvZm55ZncuY29tCi5mYWl0aDEwMC5vcmcKfGh0dHA6 Ly9mYWl0aDEwMC5vcmcKCiEtLUVuaGFuY2VtZW50OgohLS1odHRwOi8vZmFpdGhm dWxleWUuY29tLmRldGFpbC53ZWJzaXRlLwohLS1odHRwOi8vZmFpdGhmdWxleWUu Y29tLmlwYWRkcmVzcy5jb20vCi5mYWl0aGZ1bGV5ZS5jb20KCnx8ZmFpdGh0aGVk b2cuaW5mbwouZmFra3UubmV0Ci5mYWxzZWZpcmUuY29tCnx8ZmFsc2VmaXJlLmNv bQpmYWx1bi1jby5vcmcKZmFsdW5hcnQub3JnCnx8ZmFsdW5hc2lhLmluZm8KfGh0 dHA6Ly9mYWx1bmF1Lm9yZwouZmFsdW5hei5uZXQKZmFsdW5kYWZhLm9yZwpmYWx1 bmRhZmEtZGMub3JnCnx8ZmFsdW5kYWZhLWZsb3JpZGEub3JnCnx8ZmFsdW5kYWZh LW5jLm9yZwp8fGZhbHVuZGFmYS1wYS5uZXQKfHxmYWx1bmRhZmEtc2FjcmFtZW50 by5vcmcKZmFsdW4tbnkubmV0Cnx8ZmFsdW5kYWZhaW5kaWEub3JnCmZhbHVuZGFm YW11c2V1bS5vcmcKLmZhbHVuZ29uZy5jbHViCi5mYWx1bmdvbmcuZGUKZmFsdW5n b25nLm9yZy51awp8fGZhbHVuaHIub3JnCmZhbHVuaW5mby5kZQpmYWx1bmluZm8u bmV0Ci5mYWx1bnBpbGlwaW5hcy5uZXQKfHxmYWx1bndvcmxkLm5ldApmYW1pbHlm ZWQub3JnCi5mYW5nZW1pbmcuY29tCnx8ZmFuZ2xpemhpLmluZm8KfHxmYW5nb25n Lm9yZwpmYW5nb25naGVpa2UuY29tCi5mYW5xaWFuZy50awpmYW5xaWFuZ2hvdS5j b20KfHxmYW5xaWFuZ2hvdS5jb20KLmZhbnFpYW5nemhlLmNvbQp8fGZhbnFpYW5n emhlLmNvbQpmYXBkdS5jb20KZmFwcm94eS5jb20KIS0tLmZhcnhpYW4uY29tCi5m YXdhbmdodWlodWkub3JnCmZhbnFpYW5neWFrZXhpLm5ldApmYWlsLmhrCnx8ZmFt dW5pb24uY29tCi5mYW4tcWlhbmcuY29tCi5mYW5nYmlueGluZy5jb20KfHxmYW5n YmlueGluZy5jb20KZmFuZ2VtaW5nLmNvbQouZmFuZ21pbmNuLm9yZwp8fGZhbmdt aW5jbi5vcmcKLmZhbmhhb2RhbmcuY29tCnx8ZmFuc3dvbmcuY29tCi5mYW55dWUu aW5mbwouZmFyd2VzdGNoaW5hLmNvbQoKIS0tRmFzdGx5CmVuLmZhdm90dGVyLm5l dAohLS18fHJudy5nbG9iYWwuc3NsLmZhc3RseS5uZXQKIS0tfGh0dHBzOi8vKmds b2JhbC5zc2wuZmFzdGx5Lm5ldC8Kbnl0aW1lcy5tYXAuZmFzdGx5Lm5ldAp8fG55 dGltZXMubWFwLmZhc3RseS5uZXQKfHxmYXN0Lndpc3RpYS5jb20KCnx8ZmFzdHNz aC5jb20KfHxmYXN0c3RvbmUub3JnCmZhdnN0YXIuZm0KfHxmYXZzdGFyLmZtCmZh eWRhby5jb20vd2VibG9nCnx8ZmJzYnguY29tCi5mYzIuY29tCi5mYzJjaGluYS5j b20KLmZjMmNuLmNvbQp8fGZjMmNuLmNvbQpmYzJibG9nLm5ldAp8aHR0cDovL3V5 Z3VyLmZjMndlYi5jb20vCnZpZGVvLmZkYm94LmNvbQouZmRjNjQuZGUKLmZkYzY0 Lm9yZwouZmRjODkuanAKfHxmb3VyZmFjZS5ub2Rlc25vb3AuY29tCiEtLWZlZWRi b29rcy5tb2JpCnx8ZmVlbHNzaC5jb20KZmVlci5jb20KLmZlaWZlaXNzLmNvbQp8 aHR0cDovL2ZlaXRpYW5hY2FkZW15Lm9yZwouZmVpdGlhbi1jYWxpZm9ybmlhLm9y Zwp8fGZlbWluaXN0dGVhY2hlci5jb20KLmZlbmd6aGVuZ2h1LmNvbQp8fGZlbmd6 aGVuZ2h1LmNvbQouZmVuZ3poZW5naHUubmV0Cnx8ZmVuZ3poZW5naHUubmV0Ci5m ZXZlcm5ldC5jb20KfGh0dHA6Ly9mZi5pbQpmZmZmZi5hdApmZmxpY2suY29tCi5m ZnZwbi5jb20KZmdtdHYubmV0Ci5mZ210di5vcmcKLmZocmVwb3J0cy5uZXQKfGh0 dHA6Ly9maHJlcG9ydHMubmV0Ci5maWdwcmF5ZXIuY29tCnx8ZmlncHJheWVyLmNv bQouZmlsZWZseWVyLmNvbQp8fGZpbGVmbHllci5jb20KfGh0dHA6Ly9mZWVkcy5m aWxlZm9ydW0uY29tCi5maWxlczJtZS5jb20KLmZpbGVzZXJ2ZS5jb20vZmlsZQpm aWxsdGhlc3F1YXJlLm9yZwpmaWxtaW5nZm9ydGliZXQub3JnCi5maWx0aGR1bXAu Y29tCi5maW5jaHZwbi5jb20KfHxmaW5jaHZwbi5jb20KIS0tZmluZGJvb2sudHcK ZmluZG1lc3BvdC5jb20KfHxmaW5keW91dHViZS5jb20KfHxmaW5keW91dHViZS5u ZXQKLmZpbmdlcmRhaWx5LmNvbQpmaW5sZXIubmV0Ci5maXJlYXJtc3dvcmxkLm5l dAp8aHR0cDovL2ZpcmVhcm1zd29ybGQubmV0Ci5maXJlb2ZsaWJlcnR5Lm9yZwp8 fGZpcmVvZmxpYmVydHkub3JnCi5maXJldHdlZXQuaW8KfHxmaXJldHdlZXQuaW8K IS0tfHxmbGFnZm94Lm5ldAouZmxhZ3NvbmxpbmUuaXQKZmxlc2hib3QuY29tCi5m bGV1cnNkZXNsZXR0cmVzLmNvbQp8aHR0cDovL2ZsZXVyc2Rlc2xldHRyZXMuY29t Cnx8ZmxnZy51cwp8fGZsZ2p1c3RpY2Uub3JnCgohLS18fGZhcm02LnN0YXRpY2Zs aWNrci5jb20KIS0tLmZsaWNrci5jb20vcGhvdG9zLzQ2MjMxMDc3QE4wNgohLS0u ZmxpY2tyLmNvbS9ncm91cHMvYWl3ZWl3ZWkKIS0tLmZsaWNrci5jb20vcGhvdG9z L2RpZ2l0YWxib3kxMDAKIS0tLmZsaWNrci5jb20vcGhvdG9zL2Z6aGVuZ2h1CiEt LS5mbGlja3IuY29tL3Bob3Rvcy9sb25lbHlmb3gKIS0tZmxpY2tyLmNvbS9waG90 b3MvdmFudmFuLzUyOTkyNTE1NwohLS0uZmxpY2tyLmNvbS9waG90b3Mvd2ludGVy a2FuYWwKIS0tLmZsaWNrci5jb20vcGhvdG9zL3pvbGEKfHxmbGlja3IuY29tCnx8 c3RhdGljZmxpY2tyLmNvbQoKZmxpY2tyaGl2ZW1pbmQubmV0Ci5mbGlja3JpdmVy LmNvbQouZmxpbmcuY29tCnx8ZmxpcGthcnQuY29tCnx8ZmxvZy50dwouZmx5dnBu LmNvbQp8fGZseXZwbi5jb20KfGh0dHA6Ly9jbi5mbW5ub3cuY29tCmZvZmxkZnJh ZGlvLm9yZwpibG9nLmZvb2xzbW91bnRhaW4uY29tCi5mb3J1bTRoay5jb20KZmFu Z29uZy5mb3J1bXMtZnJlZS5jb20KcGlvbmVlci13b3JrZXIuZm9ydW1zLWZyZWUu Y29tCiEtLWZvdXJzcXVhcmUuY29tCiEtLXxodHRwOi8vNHNxLmNvbQp8aHR0cHM6 Ly9zcyouNHNxaS5uZXQKdmlkZW8uZm94YnVzaW5lc3MuY29tCnxodHRwOi8vZm94 Z2F5LmNvbQp8fGZyaW5nZW5ldHdvcmsuY29tCnx8ZmxlY2hlaW50aGVwZWNoZS5m cgouZm9jaGsub3JnCnxodHRwOi8vZm9jaGsub3JnCnx8Zm9jdXN0YWl3YW4udHcK LmZvY3VzdnBuLmNvbQp8fGZvZmcub3JnCi5mb2ZnLWV1cm9wZS5uZXQKLmZvb29v by5jb20KfHxmb29vb28uY29tCmZvb3R3aWJhbGwuY29tCi5mb3RpbGUubWUKfHxm b3VydGhpbnRlcm5hdGlvbmFsLm9yZwp8fGZveGRpZS51cwp8fGZveHN1Yi5jb20K Zm94dGFuZy5jb20KLmZwbXQub3JnCnxodHRwOi8vZnBtdC5vcmcKLmZwbXQudHcK LmZwbXQtb3NlbC5vcmcKfHxmcG10bWV4aWNvLm9yZwpmcW9rLm9yZwp8fGZxcm91 dGVyLmNvbQp8fGZyYW5rbGMuY29tCi5mcmVha3NoYXJlLmNvbQp8aHR0cDovL2Zy ZWFrc2hhcmUuY29tCnx8ZnJlZTR1LmNvbS5hcgpmcmVlLWdhdGUub3JnCi5mcmVl LWhhZGEtbm93Lm9yZwpmcmVlLXByb3h5LmN6Ci5mcmVlLmZyL2Fkc2wKa2luZW94 LmZyZWUuZnIKdGliZXRsaWJyZS5mcmVlLmZyCnx8ZnJlZWFsaW0uY29tCndoaXRl YmVhci5mcmVlYmVhcmJsb2cub3JnCnx8ZnJlZWJyb3dzZXIub3JnCi5mcmVlY2hh bC5jb20KLmZyZWVkb21jaGluYS5pbmZvCnx8ZnJlZWRvbWNoaW5hLmluZm8KLmZy ZWVkb21ob3VzZS5vcmcKfHxmcmVlZG9taG91c2Uub3JnCi5mcmVlZG9tc2hlcmFs ZC5vcmcKfHxmcmVlZG9tc2hlcmFsZC5vcmcKLmZyZWVmcS5jb20KLmZyZWVmdWNr dmlkcy5jb20KLmZyZWVnYW8uY29tCnx8ZnJlZWdhby5jb20KZnJlZWlsaGFtdG9o dGkub3JnCi5mcmVla3dvbnB5b25nLm9yZwp8fHNhdmVsaXV4aWFvYm8uY29tCi5m cmVlbG90dG8uY29tCnx8ZnJlZWxvdHRvLmNvbQpmcmVlbWFuMi5jb20KLmZyZWVv cGVudnBuLmNvbQpmcmVlbW9yZW4uY29tCmZyZWVtb3JlbmV3cy5jb20KZnJlZW11 c2Uub3JnL2FyY2hpdmVzLzc4OQpmcmVlbmV0LWNoaW5hLm9yZwpmcmVlbmV3c2Nu LmNvbQpjbi5mcmVlb25lcy5jb20KLmZyZWVvei5vcmcvYmJzCnx8ZnJlZW96Lm9y Zwp8fGZyZWVzc2gudXMKZnJlZTR1LmNvbS5hcgouZnJlZS1zc2guY29tCnx8ZnJl ZS1zc2guY29tCi5mcmVlY2hpbmEubmV3cy8KfHxmcmVlY2hpbmFmb3J1bS5vcmcK fHxmcmVlY2hpbmF3ZWliby5jb20KLmZyZWVkb21jb2xsZWN0aW9uLm9yZy9pbnRl cnZpZXdzL3JlYml5YV9rYWRlZXIKLmZyZWVmb3J1bXMub3JnCnx8ZnJlZW5ldHBy b2plY3Qub3JnCi5mcmVlb3oub3JnCi5mcmVldGliZXQubmV0Cnx8ZnJlZXRpYmV0 Lm9yZwouZnJlZXRpYmV0YW5oZXJvZXMub3JnCnxodHRwOi8vZnJlZXRpYmV0YW5o ZXJvZXMub3JnCi5mcmVldmlld21vdmllcy5jb20KLmZyZWV2cG4ubWUKfGh0dHA6 Ly9mcmVldnBuLm1lCnx8ZnJlZXdhbGxwYXBlcjQubWUKLmZyZWV3ZWJzLmNvbQou ZnJlZXdlY2hhdC5jb20KfHxmcmVld2VjaGF0LmNvbQpmcmVld2VpYm8uY29tCnx8 ZnJlZXdlaWJvLmNvbQouZnJlZXhpbndlbi5jb20KLmZyZWV5b3V0dWJlcHJveHku bmV0Cnx8ZnJlZXlvdXR1YmVwcm94eS5uZXQKZnJpZW5kZmVlZC5jb20KZnJpZW5k ZmVlZC1tZWRpYS5jb20vZTk5YTRlYmUyZmI0YzE5ODVjMmE1ODc3NWViNDQyMjk2 MWFhNWEyZQpmcmllbmRzLW9mLXRpYmV0Lm9yZwouZnJpZW5kc29mdGliZXQub3Jn CmZyZWVjaGluYS5uZXQKfGh0dHA6Ly93d3cuemVuc3VyLmZyZWVyay5jb20vCmZy ZWV2cG4ubmwKZnJlZXllbGxvdy5jb20KaGsuZnJpZW5kZHkuY29tL2hrCnxodHRw Oi8vYWR1bHQuZnJpZW5kZmluZGVyLmNvbS8KLmZyaW5nLmNvbQp8fGZyaW5nLmNv bQouZnJvbWNoaW5hdG91c2EubmV0Cnx8ZnJvbW1lbC5uZXQKLmZyb250bGluZWRl ZmVuZGVycy5vcmcKLmZyb290dnBuLmNvbQp8fGZyb290dnBuLmNvbQp8fGZzY2tl ZC5vcmcKLmZzdXJmLmNvbQouZnR2LmNvbS50dwpmdWNkLmNvbQouZnVja2Nubmlj Lm5ldAp8fGZ1Y2tjbm5pYy5uZXQKZnVja2dmdy5vcmcKfHxmdWxsZXJjb25zaWRl cmF0aW9uLmNvbQpmdWx1ZS5jb20KLmZ1bmYudHcKZnVucC5jb20KLmZ1cS5jb20K LmZ1cmhoZGwub3JnCnx8ZnVyaW5rYW4uY29tCi5mdXR1cmVjaGluYWZvcnVtLm9y Zwp8fGZ1dHVyZW1lc3NhZ2Uub3JnCi5mdXguY29tCi5mdXlpbi5uZXQKLmZ1eWlu ZGlhbnRhaS5vcmcKLmZ1eXUub3JnLnR3Cnx8ZncuY20KLmZ4Y20tY2hpbmVzZS5j b20KfHxmeGNtLWNoaW5lc2UuY29tCmZ6aDk5OS5jb20KZnpoOTk5Lm5ldApmemxt LmNvbQoKIS0tLS0tLS0tLS0tLS0tLS0tLS0tR0ctLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCi5nNmhlbnRhaS5jb20KfGh0dHA6Ly9nNmhlbnRhaS5jb20KfHxnLXF1 ZWVuLmNvbQp8fGdhYm9jb3JwLmNvbQouZ2FlcHJveHkuY29tCi5nYWZvcnVtLm9y ZwouZ2FsYXh5bWFjYXUuY29tCnx8Z2FsZW53dS5jb20KLmdhbHN0YXJzLm5ldAp8 fGdhbWU3MzUuY29tCmdhbWViYXNlLmNvbS50dwpnYW1lam9sdC5jb20KfGh0dHA6 Ly93aWtpLmdhbWVycC5qcAp8fGdhbWVyLmNvbS50dwouZ2FtZXIuY29tLnR3Ci5n YW1lei5jb20udHcKfHxnYW1lei5jb20udHcKLmdhbW91c2EuY29tCi5nYW9taW5n Lm5ldAp8fGdhb21pbmcubmV0Cmdhbmdlcy5jb20KLmdhb3BpLm5ldAp8aHR0cDov L2dhb3BpLm5ldAouZ2Fvemhpc2hlbmcub3JnCi5nYW96aGlzaGVuZy5uZXQKZ2Fy ZGVubmV0d29ya3MuY29tCnx8Z2FyZGVubmV0d29ya3Mub3JnCiEtLUlQIG9mIEdh cmRlbiBOZXR3b3JrCjcyLjUyLjgxLjIyCnx8Z2FydGxpdmUuY29tCnx8Z2F0ZS1w cm9qZWN0LmNvbQp8fGdhdGhlci5jb20KLmdhdGhlcnByb3h5LmNvbQpnYXRpLm9y Zy50dwouZ2F5YnViYmxlLmNvbQouZ2F5Y24ubmV0Ci5nYXlodWIuY29tCnx8Z2F5 bWFwLmNjCi5nYXltZW5yaW5nLmNvbQouZ2F5dHViZS5jb20KIS0tfHxnYXl0dWJl LmNvbQp8fGltYWdlcy1nYXl0dWJlLmNvbQouZ2F5d2F0Y2guY29tCnxodHRwOi8v Z2F5d2F0Y2guY29tCi5nYXpvdHViZS5jb20KfHxnYXpvdHViZS5jb20KfHxnY2Mu b3JnLmhrCnx8Z2Nsb29uZXkuY29tCnx8Z2NtYXNpYS5jb20KLmdjcG5ld3MuY29t CnxodHRwOi8vZ2NwbmV3cy5jb20KLmdkYnQubmV0L2ZvcnVtCmdkemYub3JnCnx8 Z2Vlay1hcnQubmV0CmdlZWtlcmhvbWUuY29tLzIwMTAvMDMveGl4aWFuZy1wcm9q ZWN0LWNyb3NzLWdmdwp8fGdlZWtoZWFydC5pbmZvCi5nZWtpa2FtZS5jb20KfGh0 dHA6Ly9nZWtpa2FtZS5jb20KLmdlbGJvb3J1LmNvbQp8aHR0cDovL2dlbGJvb3J1 LmNvbQohLS18fGdlbnVpdGVjLmNvbQouZ2VvY2l0aWVzLmNvLmpwCi5nZW9jaXRp ZXMuY29tL1NpbGljb25WYWxsZXkvQ2lyY3VpdC81NjgzL2Rvd25sb2FkLmh0bWwK aGsuZ2VvY2l0aWVzLmNvbQpnZW9jaXRpZXMuanAKLmdlcmVmb3VuZGF0aW9uLm9y Zwp8fGdldGFzdHJpbGwuY29tCi5nZXRjaHUuY29tCi5nZXRjbG9hay5jb20KfHxn ZXRjbG9hay5jb20KfHxnZXRmb3h5cHJveHkub3JnCi5nZXRmcmVlZHVyLmNvbQp8 fGdldGdvbS5jb20KLmdldGkycC5uZXQKfHxnZXRpMnAubmV0Ci5nZXRsYW50ZXJu Lm9yZwp8fGdldGxhbnRlcm4ub3JnCi5nZXRqZXRzby5jb20vZm9ydW0KZ2V0aXRv bi5jb20KLmdldHNvY2lhbHNjb3BlLmNvbQp8fGdldHN5bmMuY29tCmdmYnYuZGUK LmdmZ29sZC5jb20uaGsKLmdmc2FsZS5jb20KfHxnZnNhbGUuY29tCmdmdy5vcmcu dWEKLmdmdy5wcmVzcwp8fGdmdy5wcmVzcwouZ2dzc2wuY29tCnx8Z2dzc2wuY29t CiEtLXx8Z2hvc3Qub3JnCi5naG9zdHBhdGguY29tCnx8Z2hvc3RwYXRoLmNvbQp8 fGdodXQub3JnCi5naWFudGVzc25pZ2h0LmNvbQp8aHR0cDovL2dpYW50ZXNzbmln aHQuY29tCi5naWZyZWUuY29tCnx8Z2lnYS13ZWIuanAKdHcuZ2lnYWNpcmNsZS5j b20KfGh0dHA6Ly9jbi5naWdhbmV3cy5jb20vCmdpZ3Bvcm5vLnJ1Cnx8Z2lybGJh bmtlci5jb20KLmdpdC5pbwp8fGdpdC5pbwp8aHR0cDovL3NvZnR3YXJlZG93bmxv YWQuZ2l0Ym9va3MuaW8KCiEtLS1HaXRIdWItLS0KZ2l0aHViLmNvbS9nZXRsYW50 ZXJuCnxodHRwczovL2dpc3QuZ2l0aHViLmNvbQpodHRwOi8vY3RobG8uZ2l0aHVi LmlvL2hrdHYKaGFoYXhpeGkuZ2l0aHViLmlvCnxodHRwczovL2hhaGF4aXhpLmdp dGh1Yi5pbwp8fGhhb2VsLmdpdGh1Yi5pbwohLS18aHR0cDovL29uaW9uaGFja2Vy LmdpdGh1Yi5pbwp8fHNpa2FvemhlMTk5Ny5naXRodWIuaW8KfHxzb2RhdGVhLmdp dGh1Yi5pbwp8fHRlcm1pbnVzMjA0OS5naXRodWIuaW8Kd3NnemFvLmdpdGh1Yi5p bwp8aHR0cHM6Ly93c2d6YW8uZ2l0aHViLmlvCiEtLS5naXRodWIuaW8KCi5naXps ZW4ubmV0Cnx8Z2l6bGVuLm5ldAouZ2pjenouY29tCnx8Z2pjenouY29tCmdsb2Jh bGppaGFkLm5ldApnbG9iYWxtZWRpYW91dHJlYWNoLmNvbQpnbG9iYWxtdXNldW1v bmNvbW11bmlzbS5vcmcKfHxnbG9iYWxyZXNjdWUubmV0Ci5nbG9iYWx0bS5vcmcK Lmdsb2JhbHZvaWNlc29ubGluZS5vcmcKfHxnbG9iYWx2b2ljZXNvbmxpbmUub3Jn Cnx8Z2xvYmFsdnBuLm5ldAouZ2xvY2suY29tCmdsdWNrbWFuLmNvbS9EYWxhaUxh bWEKZ21iZC5jbgp8fGdtaHoub3JnCnxodHRwOi8vd3d3LmdtaWRkbGUuY29tCnxo dHRwOi8vd3d3LmdtaWRkbGUubmV0Ci5nbWxsLm9yZwp8fGduY2kub3JnLmhrCmdv LXBraS5jb20KfHxnb2FnZW50LmJpegp8fGdvYWdlbnRwbHVzLmNvbQpnb2JldC5j Ywpnb2Rmb290c3RlcHMub3JnCnx8Z29kZm9vdHN0ZXBzLm9yZwpnb2Rucy53b3Jr CmdvZHNkaXJlY3Rjb250YWN0LmNvLnVrCi5nb2RzZGlyZWN0Y29udGFjdC5vcmcK Z29kc2RpcmVjdGNvbnRhY3Qub3JnLnR3Ci5nb2RzaW1tZWRpYXRlY29udGFjdC5j b20KLmdvZ290dW5uZWwuY29tCnx8Z29oYXBweS5jb20udHcKLmdva2JheXJhay5j b20KLmdvbGRiZXQuY29tCnx8Z29sZGJldHNwb3J0cy5jb20KfHxnb2xkZW5leWV2 YXVsdC5jb20KLmdvbGRlbmZyb2cuY29tCnx8Z29sZGVuZnJvZy5jb20KLmdvbGRq aXp6LmNvbQp8aHR0cDovL2dvbGRqaXp6LmNvbQouZ29sZHN0ZXAubmV0Cnx8Z29s ZHdhdmUuY29tCmdvbmdtZW5nLmluZm8KZ29uZ20uaW4KZ29uZ21pbmxpbGlhbmcu Y29tCi5nb25nd3QuY29tCnxodHRwOi8vZ29uZ3d0LmNvbQpibG9nLmdvby5uZS5q cC9kdWNrLXRhaWxfMjAwOQouZ29vZGF5Lnh5egp8aHR0cDovL2dvb2RheS54eXoK Lmdvb2RyZWFkcy5jb20KfHxnb29kcmVhZHMuY29tCi5nb29kcmVhZGVycy5jb20K fHxnb29kcmVhZGVycy5jb20KLmdvb2R0di5jb20udHcKLmdvb2R0di50dgp8fGdv b2ZpbmQuY29tCi5nb29nbGVzaWxlLmNvbQouZ29wZXRpdGlvbi5jb20KfHxnb3Bl dGl0aW9uLmNvbQouZ29wcm94aW5nLm5ldAouZ290cnVzdGVkLmNvbQp8fGdvdHJ1 c3RlZC5jb20KfHxnb3R3LmNhCnx8Z3JhbW1hbHkuY29tCmdyYW5kdHJpYWwub3Jn Ci5ncmFwaGlzLm5lLmpwCnx8Z3JhcGhpcy5uZS5qcAp8fGdyYXBocWwub3JnCiEt LXx8cy5ncmF2YXRhci5jb20KZ3JlYXRmaXJld2FsbC5iaXoKfHxncmVhdGZpcmV3 YWxsb2ZjaGluYS5uZXQKLmdyZWF0ZmlyZXdhbGxvZmNoaW5hLm9yZwp8fGdyZWF0 ZmlyZXdhbGxvZmNoaW5hLm9yZwp8fGdyZWVuZmllbGRib29rc3RvcmUuY29tLmhr Ci5ncmVlbnBhcnR5Lm9yZy50dwp8fGdyZWVucGVhY2Uub3JnCi5ncmVlbnJlYWRp bmdzLmNvbS9mb3J1bQpncmVhdC1maXJld2FsbC5jb20KZ3JlYXQtcm9jLm9yZwpn cmVhdHJvYy5vcmcKZ3JlYXR6aG9uZ2h1YS5vcmcKLmdyZWVucGVhY2UuY29tLnR3 Ci5ncmVlbnZwbi5uZXQKfHxncmVlbnZwbi5uZXQKLmdyZWVudnBuLm9yZwp8fGdy b3R0eS1tb25kYXkuY29tCmdzLWRpc2N1c3MuY29tCnx8Z3RyaWNrcy5jb20KZ3Vh bmNoYS5vcmcKZ3VhbmVyeXUuY29tCi5ndWFyZHN0ZXIuY29tCi5ndW4td29ybGQu bmV0Cmd1bnNhbmRhbW1vLmNvbQp8fGd1dHRlcnVuY2Vuc29yZWQuY29tCnx8Z3Zt LmNvbS50dwouZ3ptLnR2Cnx8Z3pvbmUtYW5pbWUuaW5mbwoKIS0tLS0tLS0tLS0t LS1HSFMtLS0tLQohLXx8ZmVlZHMuY2JzbmV3cy5jb20KIS18fHd3dy5jaGluZXNl YWxidW1hcnQuY29tCnx8Y2xlbWVudGluZS1wbGF5ZXIub3JnCiEtfHxjbGVtZXNo YS5vcmcKIS18fHd3dy5jbG91ZGdpcmxmcmllbmQuY29tCiEtfHxjb2NvYXdpdGhs b3ZlLmNvbQohLXx8YmxvZy5jb250cm9sc3BhY2Uub3JnCiEtRAohLXx8d3d3LmRh aWx5Z3lhbi5jb20KIS18fGRhaWx5dG9kby5vcmcKIS18fGJsb2cuZGFubWFybmVy LmNvbQohLXx8Z2l0aHViLmRhbm1hcm5lci5jb20KIS18fGRlc2lnbi1zZWVkcy5j b20KIS18fGRlc2lnbmVycy1hcnRpc3RzLmNvbQohLXx8bWFpbC5kaXlhbmcub3Jn CiEtfHxibG9nLmRvdWdoZWxsbWFubi5jb20KIS18fGRvd25mb3JldmVyeW9uZW9y anVzdG1lLmNvbQohLXx8ZHJvaWRzZWN1cml0eS5jb20KIS18fHd3dy5kcm9wbW9j a3MuY29tCiEtfHxkdW1ibGl0dGxlbWFuLmNvbQohLUUKZWNob2Zvbi5jb20KIS18 fGVjaG9mb24uY29tCiEtfHxlcGMtamF2LmNvbQohLXx8ZXZlcmRhcmsuaW5mbwoh LXx8ZXZoZWFkLmNvbQohLUYKIS18fGZhY2lsZWxvZ2luLmNvbQohLXx8Ki5mYXRk dWNrLm9yZwohLXx8YmxvZy5mZGNuLm9yZwohLXx8ZmZ0b2dvLmNvbQohLXx8Zmxp Z2h0c2ltdGFsay5jb20KIS18fG1jbGVlLmZvb2xtZS5uZXQKIS18fHd3dy5mcmll bmRkZWNrLmNvbQohLXx8ZnJpbmdlc3BvaWxlcnMuY29tCiEtfHxmcmluZ2V0ZWxl dmlzaW9uLmNvbQohLXx8ZnVucGVhLmNvbQohLUcKIS18fGJsb2cuZ2F0ZWluLm9y ZwohLXx8ZmVlZHMuZ2F3a2VyLmNvbQohLXx8Z2Vla3RhbmcuY29tCiEtfHxnZW9o b3QudXMKIS18fGdldGFyb3VuZC5jb20KIS18fGdtZXIubmV0CiEtfHx3d3cuZ21v dGUub3JnCiEtfHxibG9nLmdvMndlYjIwLm5ldAohLXx8Z29vZ2xlLW1lbGFuZ2Uu Y29tCiEtfHxmYW1lLmdvbnpvbGFicy5vcmcKIS18fGdvdmVjbi5vcmcKIS18fGdx dWV1ZXMuY29tCiEtfHxncmFwaHljYWxjLmNvbQp8fGdyZWFzZXNwb3QubmV0CiEt fHxibG9nLmdyb3dsZm9yd2luZG93cy5jb20KIS1ICiEtfHxoY20uY29tLnR3CiEt fHxibG9nLmhlYWRpdXMuY29tCiEtfHxob2diYXlzb2Z0d2FyZS5jb20KIS18fGJs b2cuaG90b3Qub3JnCiEtfHxmZWVkcy5ob3dzdHVmZndvcmtzLmNvbQohLXx8aHVo YWl0YWkuY29tCiEtfHxibG9nLmh1bWFucmlnaHRzZmlyc3Qub3JnCiEtSQohLXx8 c2l0ZS5pY3UtcHJvamVjdC5vcmcKIS18fGlnb3J3YXJlLmNvbQohLXx8aWhhczEz Mzdjb2RlLmNvbQohLXx8aW5rbm91dmVhdS5jb20KIS18fGlub3RlLnR3CiEtfHxp cm9uaGVsbWV0LmNvbQohLXx8aXdmd2NmLmNvbQohLUoKIS18fGJsb2cuamFuZ210 LmNvbQohLXx8YmxvZy5qYXlmaWVsZHMuY29tCiEtfHxibG9nLmpvaW50Lm5ldAoh LXx8YmxvZy5qc3F1YXJlZGphdmFzY3JpcHQuY29tCiEtfHxibG9nLmp0Yndvcmxk LmNvbQohLUsKIS18fGthdGh5c2Nod2FsYmUuY29tCiEtfHx0b21hdG92cG4ua2Vp dGhtb3llci5jb20KIS18fHd3dy5rZWl0aG1veWVyLmNvbQohLXx8a2VuZGFsdmFu ZHlrZS5jb20KIS18fGJsb2cua2VuZ2FvLnR3CiEtfHxsb2cua2Vzby5jbgohLXx8 d3d3LmtoYW5hY2FkZW15Lm9yZwp8fHd3dy5rbGlwLm1lCiEtfHx1c2Jsb2FkZXJn eC5rb3VyZWlvLm5ldAohLXx8YmxvZy5rb3dhbGN6eWsuaW5mbwohLUwKIS18fGxh YnlyaW50aDIuY29tCiEtfHxsYXJzZ2VvcmdlLmNvbQohLXx8YmxvZy5sYXN0cGFz cy5jb20KIS18fGRvY3MubGF0ZXhsYWIub3JnCiEtfHxsZWFuZXNzYXlzLmNvbQoh LXx8YmxvZy5saWRhb2JpbmcuaW5mbwohLXx8bG9nLmxpZ2h0b3J5Lm5ldAohLXx8 ZmVlZHMubGltaS5uZXQKIS18fHd3dy5saXRlYXBwbGljYXRpb25zLmNvbQohLXx8 YmxvZy5saXVrYW5neHUuaW5mbwohLXx8dHdpdHRlci5saXVrYW5neHUuaW5mbwoh LXx8b2FzaXNuZXdzcm9vbS5saXZlNGV2ZXIudXMKIS18fHd3dy5sb2NrZXJnbm9t ZS5jb20KIS18fGxvY3FsLmNvbQpAQHx8c2l0ZS5sb2NxbC5jb20KIS18fGZlZWRz LmxvaWNsZW1ldXIuY29tCiEtfHxibG9nLmxvdWlzZ3JheS5jb20KIS1NCiEtfHxt YWRlYnlzb2ZhLmNvbQohLXx8bWFkZW1vaXNlbGxlcm9ib3QuY29tCiEtfHxtYXNh bWl4ZXMuY29tCiEtfHx3d3cubWV0YW11c2UubmV0CiEtfHxibG9nLm1ldGFzcGxv aXQuY29tCiEtfHxtaWxhemkuY29tCiEtfHx3d3cubWluaXdlYXRoZXIuY29tCiEt fHx0d2l0dGVyLm1pc3NpdS5jb20KIS18fHBsdXJrdG9wLWJ1dHRvbi5tbWRheXMu Y29tCiEtfHxmZWVkcy5tb2JpbGVyZWFkLmNvbQohLXx8d3d3Lm1vZGVybml6ci5j b20KIS18fHd3dy5tb2RrLml0CiEtfHxteXR3aXNoaXJ0LmNvbQohLU4KIS18fGJs b2cubmV0ZmxpeC5jb20KIS18fGJsb2cubmloaWxvZ2ljLmRrCiEtfHxudGxrLm9y ZwohLXx8bnZxdWFuLm9yZwohLXx8bm9nb29kYXRjb2RpbmcuY29tCiEtfHxibG9n Lm5vdGRvdC5uZXQKIS18fHd3dy5ub3RpZnkuaW8KIS1PCiEtfHxibG9nLm9idmlv dXMuY29tCiEtfHxvbmViaWdmbHVrZS5jb20KIS18fG92ZXJzdGltdWxhdGUuY29t CiEtUAohLXx8cGNnZWVrYmxvZy5jb20KIS18fGZlZWRzLnBkZmNobS5uZXQKIS18 fGZlZWRzLnBlb3BsZS5jb20KIS18fGJsb2cucGVyc2lzdGVudC5pbmZvCiEtfHxj aHJvbWUucGxhbnRzdnN6b21iaWVzLmNvbQohLXx8cG9ydGFibGVzb2Z0Lm9yZy5y dQohLXx8cHJhc2FubmF0ZWNoLm5ldAohLXx8dGFsay5uZXdzLnB0cy5vcmcudHcK IS18fHB5dGhvbi1leGNlbC5vcmcKIS1RCiEtUgohLXx8ci1jaGFydC5jb20KIS18 fHJhbWVzaHN1YnJhbWFuaWFuLm9yZwohLXx8cmFwaWQucGsKIS18fGJsb2cucmVu YW5zZS5jb20KIS18fHJvYmVydG1hby5jb20KIS18fHd3dy5yb21lby1mb3h0cm90 LmNvbQohLVMKIS18fHNhbG1peXVjay5jb20KIS18fHNhbXNhbC5jb20KIS18fGJs b2cuc2VlbWluZ2xlZS5jb20KIS18fGJsb2cuc2Zsb3cuY29tCiEtfHxibG9nLnNp Z2ZwZS5jb20KIS18fHNpbXBsZXRleHQud3MKIS18fHd3dy5za3VscHQub3JnCiEt fHxyc3Muc2xhc2hkb3Qub3JnCiEtfHxzbmlwcGV0c2FwcC5jb20KIS18fHcuc25z Lmx5CiEtfHx3d3cuc29jaWFsbm1vYmlsZS5jb20KIS18fHd3dy5zb2NpYWx3aG9p cy5jb20KIS18fHNwaXJpdGpiLm9yZwohLXx8c3Nib29rLmNvbQohLXx8c3NoZm9y d2FyZGluZy5jb20KIS18fHN0YXRpb25lcmlhLmNvbQp8fHN0ZXBoYW5pZXJlZC5j b20KIS18fHN1bmppZG9uZy5uZXQKIS18fHN5bml1bXNvZnR3YXJlLmNvbQpAQHx8 ZG93bmxvYWQuc3luaXVtc29mdHdhcmUuY29tCiEtVAohLXx8dGFneGVkby5jb20K IS18fGJsb2cudGF0b2ViYS5vcmcKIS18fHd3dy50ZWNoZm9iLmNvbQohLXx8dGVh Y2hwYXJlbnRzdGVjaC5vcmcKIS18fHRoZThwZW4uY29tCiEtfHx0aGVpcGhvbmV3 aWtpLmNvbQohLXx8YmxvZy50aGVzaWxlbnRudW1iZXIubWUKIS18fHRoZXNwb250 eS5jb20KIS18fHRoZXVsdHJhbGlueC5jb20KIS18fGJsb2cudGhpbmstYXN5bmMu Y29tCiEtfHx0b3JuYWRvd2ViLm9yZwohLXx8dHJhbnNwYXJlbnR1cHRpbWUuY29t CiEtfHx0cmlhbmd1bGF0aW9uYmxvZy5jb20KIS18fGJsb2cudHN1bmFuZXQubmV0 CiEtfHxlbi50dXhlcm8uY29tCiEtfHx0d2F6enVwLmNvbQohLXx8dHdlZXRzd2Vs bC5jb20KIS18fHR3aWJlcy5jb20KIS18fGFydC50d2dnLm9yZwohLXx8dHdpdmVy dC5jb20KIS1VCnxodHRwOi8vdWIwLmNjCiEtfHxqb25ueS51YnVudHUtdHcubmV0 CiEtfHxibG9nLnVtb25rZXkubmV0CiEtVgohLXx8dHAudmJhcC5jb20uYXUKIS18 fHd3dy52aXJ0dW91c3JvbS5jb20KIS18fGJsb2cudmlzaWJvdGVjaC5jb20KIS1X CiEtfHx3YXZlcHJvdG9jb2wub3JnCiEtfHx3d3cud2F2ZXNhbmRib3guY29tCiEt fHx3ZWJmZWUub3JnLnJ1CiEtfHxibG9nLndlYm1wcm9qZWN0Lm9yZwohLXx8d2Vi dXBkOC5vcmcKIS18fHd3dy53aGF0YnJvd3Nlci5vcmcKIS18fHd3dy53aGVyZWRv eW91Z28ubmV0CiEtfHx3aWxsaGFpbnMuY29tCiEtfHxmZWVkcy53aXJlZC5jb20K IS18fHdpc2VtYXBwaW5nLm9yZwp3b3p5LmluCiEtfHx3b3p5LmluLwohLXx8Ymxv Zy53dW5kZXJjb3VudGVyLmNvbQohLVgKIS18fHhkZWx0YS5vcmcKIS18fHhpYW9n YW96aS5vcmcKIS18fHhpbG91LnVzCiEtfHx4enkub3JnLnJ1CiEtWQohLXx8eW9v cGVyLmJlCiEtfHx0c29uZy55dW54aS5uZXQKIS1aCgpnb3NwZWxoZXJhbGQuY29t Cnx8Z29zcGVsaGVyYWxkLmNvbQp8aHR0cDovL2hrLmdyYWRjb25uZWN0aW9uLmNv bS8KfHxncmFuZ29yei5vcmcKZ3JlYXRmaXJlLm9yZwp8fGdyZWF0ZmlyZS5vcmcK Z3JlYXRmaXJld2FsbG9mY2hpbmEub3JnCnx8Z3JlYXRyb2MudHcKLmd0cy12cG4u Y29tCnxodHRwOi8vZ3RzLXZwbi5jb20KLmd1LWNodS1zdW0ub3JnCnxodHRwOi8v Z3UtY2h1LXN1bS5vcmcKLmd1YWd1YXNzLmNvbQp8aHR0cDovL2d1YWd1YXNzLmNv bQouZ3VhZ3Vhc3Mub3JnCnxodHRwOi8vZ3VhZ3Vhc3Mub3JnCi5ndWFuZ21pbmcu Y29tLm15Cmd1aXNoYW4ub3JnCnx8Z3Vpc2hhbi5vcmcKLmd1bXJvYWQuY29tCnx8 Z3Vtcm9hZC5jb20KfHxndW5zYW1lcmljYS5jb20KZ3VydW9ubGluZS5oawp8aHR0 cDovL2d2bGliLmNvbQouZ3lhbHdhcmlucG9jaGUuY29tCi5neWF0c29zdHVkaW8u Y29tCgohLS0tLS0tLS0tLS0tLS0tLS0tLS1ISC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KLmg1MjguY29tCi5oNWRtLmNvbQouaDVnYWxnYW1lLm1lCnx8aC1jaGlu YS5vcmcKLmgtbW9lLmNvbQp8aHR0cDovL2gtbW9lLmNvbQpoMW4xY2hpbmEub3Jn Ci5oYWNnLmNsdWIKfHxoYWNnLmNsdWIKLmhhY2cuaW4KfGh0dHA6Ly9oYWNnLmlu Ci5oYWNnLmxpCnxodHRwOi8vaGFjZy5saQouaGFjZy5tZQp8aHR0cDovL2hhY2cu bWUKLmhhY2cucmVkCnxodHRwOi8vaGFjZy5yZWQKLmhhY2tlbi5jYy9iYnMKLmhh Y2tlci5vcmcKfHxoYWNrdGhhdHBob25lLm5ldApoYWhsby5jb20KfHxoYWtrYXR2 Lm9yZy50dwouaGFuZGNyYWZ0ZWRzb2Z0d2FyZS5vcmcKfGh0dHA6Ly9iYnMuaGFu bWluenUub3JnLwouaGFudW55aS5jb20KLmhhby5uZXdzL25ld3MKfGh0dHA6Ly9h ZS5oYW8xMjMuY29tCnxodHRwOi8vYXIuaGFvMTIzLmNvbQp8aHR0cDovL2JyLmhh bzEyMy5jb20KfGh0dHA6Ly9lbi5oYW8xMjMuY29tCnxodHRwOi8vaWQuaGFvMTIz LmNvbQp8aHR0cDovL2pwLmhhbzEyMy5jb20KfGh0dHA6Ly9tYS5oYW8xMjMuY29t CnxodHRwOi8vbXguaGFvMTIzLmNvbQp8aHR0cDovL3NhLmhhbzEyMy5jb20KfGh0 dHA6Ly90aC5oYW8xMjMuY29tCnxodHRwOi8vdHcuaGFvMTIzLmNvbQp8aHR0cDov L3ZuLmhhbzEyMy5jb20KfGh0dHA6Ly9oay5oYW8xMjNpbWcuY29tCnxodHRwOi8v bGQuaGFvMTIzaW1nLmNvbQp8fGhhcHB5LXZwbi5jb20KLmhhcHJveHkub3JnCnx8 aGFyZHNleHR1YmUuY29tCi5oYXJ1bnlhaHlhLmNvbQp8aHR0cDovL2hhcnVueWFo eWEuY29tCmJicy5oYXNpLndhbmcKaGF2ZTguY29tCkBAfHxoYXlnby5jb20KLmhj bGlwcy5jb20KfHxoZGx0Lm1lCnx8aGR0dmIubmV0Ci5oZHpvZy5jb20KfGh0dHA6 Ly9oZHpvZy5jb20KfHxoZWFydHlpdC5jb20KLmhlYXZ5LXIuY29tCi5oZWMuc3UK fGh0dHA6Ly9oZWMuc3UKLmhlY2FpdG91Lm5ldAp8fGhlY2FpdG91Lm5ldAouaGVj aGFqaS5jb20KfHxoZWNoYWppLmNvbQp8fGhlZWFjdC5lZHUudHcKLmhlZ3JlLWFy dC5jb20KfGh0dHA6Ly9oZWdyZS1hcnQuY29tCnx8Y2RuLmhlbGl4c3R1ZGlvcy5u ZXQKfHxoZWxwbGluZmVuLmNvbQp8fGhlbGxvYW5kcm9pZC5jb20KfHxoZWxsb3F1 ZWVyLmNvbQouaGVsbG9zcy5wdwpoZWxsb3R4dC5jb20KfHxoZWxsb3R4dC5jb20K LmhlbnRhaS50bwouaGVsbG91ay5vcmcvZm9ydW0vbG9maXZlcnNpb24KLmhlbHBl YWNocGVvcGxlLmNvbQp8fGhlbHBlYWNocGVvcGxlLmNvbQp8fGhlbHBzdGVyLmRl Ci5oZWxwemh1bGluZy5vcmcKaGVudGFpdHViZS50dgouaGVudGFpdmlkZW93b3Js ZC5jb20KCiEjIyMjIyMjIyMjIy0tSGVyb2t1LS0jIyMjIyMjIyMjCiEtLXx8Z2V0 Y2xvdWRhcHAuY29tCiEtLXx8Y2wubHkKIS0tQEB8fGYuY2wubHkKIS0tRUMyIERO UyBQb2lzb25lZAp8fGlkLmhlcm9rdS5jb20KCmhlcWluZ2xpYW4ubmV0Cnx8aGV1 bmdrb25nZGlzY3Vzcy5jb20KLmhleGllc2hlLmNvbQp8fGhleGllc2hlLmNvbQp8 fGhleGllc2hlLnh5egohLS1Hb29nbGUgZW1wbG95ZWUgd2l0aGluIEdvb2dsZSBJ UAp8fGhleHhlaC5uZXQKYXBwLmhleXdpcmUuY29tCi5oZXl6by5jb20KLmhnc2Vh di5jb20KLmhoZGNiM29mZmljZS5vcmcKLmhodGhlc2FreWF0cml6aW4ub3JnCmhp LW9uLm9yZy50dwpoaWRkZW4tYWR2ZW50Lm9yZwp8fGhpZGRlbi1hZHZlbnQub3Jn CmhpZGVjbG91ZC5jb20vYmxvZy8yMDA4LzA3LzI5L2Z1Y2stYmVpamluZy1vbHlt cGljcy5odG1sCnx8aGlkZS5tZQouaGlkZWluLm5ldAouaGlkZWlwdnBuLmNvbQp8 fGhpZGVpcHZwbi5jb20KLmhpZGVtYW4ubmV0Cnx8aGlkZW1hbi5uZXQKaGlkZW1l Lm5sCnx8aGlkZW15Lm5hbWUKLmhpZGVteWFzcy5jb20KfHxoaWRlbXlhc3MuY29t CmhpZGVteWNvbXAuY29tCnx8aGlkZW15Y29tcC5jb20KLmhpaGlmb3J1bS5jb20K LmhpaGlzdG9yeS5uZXQKfHxoaWhpc3RvcnkubmV0Ci5oaWdmdy5jb20KaGlnaHBl YWtzcHVyZWVhcnRoLmNvbQp8fGhpZ2hyb2NrbWVkaWEuY29tCnx8aGlpdGNoLmNv bQp8fGhpa2luZ2dmdy5vcmcKLmhpbGl2ZS50dgouaGltYWxheWFuLWZvdW5kYXRp b24ub3JnCmhpbWFsYXlhbmdsYWNpZXIuY29tCi5oaW1lbWl4LmNvbQp8fGhpbWVt aXguY29tCi5oaW1lbWl4Lm5ldAp0aW1lcy5oaW5ldC5uZXQKLmhpdG9taS5sYQp8 aHR0cDovL2hpdG9taS5sYQouaGl3aWZpLmNvbQpAQHx8aGl3aWZpLmNvbQpoaXpi dXR0YWhyaXIub3JnCmhpemItdXQtdGFocmlyLmluZm8KaGl6Yi11dC10YWhyaXIu b3JnCi5oamNsdWIuaW5mbwouaGstcHViLmNvbS9mb3J1bQp8aHR0cDovL2hrLXB1 Yi5jb20KLmhrMDEuY29tCnx8aGswMS5jb20KLmhrMzIxNjguY29tCnx8aGszMjE2 OC5jb20KfHxoa2FjZy5jb20KfHxoa2FjZy5uZXQKLmhrYXR2bmV3cy5jb20KaGti Yy5uZXQKLmhrYmYub3JnCi5oa2Jvb2tjaXR5LmNvbQp8fGhrYm9va2NpdHkuY29t Ci5oa2NodXJjaC5vcmcKaGtjaS5vcmcuaGsKLmhrY21pLmVkdQp8fGhrY25ld3Mu Y29tCnx8aGtjb2MuY29tCmhrZGF5Lm5ldAouaGtkYWlseW5ld3MuY29tLmhrL2No aW5hLnBocApoa2RmLm9yZwouaGtlai5jb20KLmhrZXBjLmNvbS9mb3J1bS92aWV3 dGhyZWFkLnBocD90aWQ9MTE1MzMyMgpjaGluYS5oa2V0LmNvbQp8fGhrZmFhLmNv bQpoa2ZyZWV6b25lLmNvbQpoa2Zyb250Lm9yZwptLmhrZ2FsZGVuLmNvbQp8aHR0 cHM6Ly9tLmhrZ2FsZGVuLmNvbQpoa2dvbGRlbi5jb20KLmhrZ3JlZW5yYWRpby5v cmcvaG9tZQouaGtoZWFkbGluZS5jb20qYmxvZwouaGtoZWFkbGluZS5jb20vaW5z dGFudG5ld3MKaGtoa2hrLmNvbQpoa2hyYy5vcmcuaGsKaGtocm0ub3JnLmhrCnx8 aGtpcC5vcmcudWsKMTk4OXJlcG9ydC5oa2phLm9yZy5oawpoa2pjLmNvbQouaGtq cC5vcmcKLmhrbGZ0LmNvbQouaGtsdHMub3JnLmhrCnx8aGtsdHMub3JnLmhrCm5l d3MuaGtwZWFudXQuY29tCmhrcHR1Lm9yZwouaGtyZXBvcnRlci5jb20KfHxoa3Jl cG9ydGVyLmNvbQp8aHR0cDovL2hrdXBvcC5oa3UuaGsvCi5oa3VzdS5uZXQKfHxo a3VzdS5uZXQKLmhrdndldC5jb20KLmhrd2NjLm9yZy5oawp8fGhrem9uZS5vcmcK Lmhtb25naG90LmNvbQp8aHR0cDovL2htb25naG90LmNvbQouaG12LmNvLmpwLwpo bmpoai5jb20KfHxobmpoai5jb20KLmhubnR1YmUuY29tCnx8aG9sYS5jb20KfHxo b2xhLm9yZwpob2x5bW91bnRhaW5jbi5jb20KaG9seXNwaXJpdHNwZWFrcy5vcmcK fHxob2x5c3Bpcml0c3BlYWtzLm9yZwp8fGRlcmVraHN1LmhvbWVpcC5uZXQKLmhv bWVwZXJ2ZXJzaW9uLmNvbQp8aHR0cDovL2hvbWVzZXJ2ZXJzaG93LmNvbQp8aHR0 cDovL29sZC5ob25leW5ldC5vcmcvc2NhbnMvc2NhbjMxL3N1Yi9kb3VnX2VyaWMv c3BhbV90cmFuc2xhdGlvbi5odG1sCi5ob25na29uZ2ZwLmNvbQp8fGhvbmdrb25n ZnAuY29tCmhvbmdtZWltZWkuY29tCnx8aG9uZ3poaS5saQouaG9vdHN1aXRlLmNv bQp8fGhvb3RzdWl0ZS5jb20KLmhvcGVkaWFsb2d1ZS5vcmcKfGh0dHA6Ly9ob3Bl ZGlhbG9ndWUub3JnCi5ob3B0by5vcmcKLmhvcm55Z2FtZXIuY29tCi5ob3JueXRy aXAuY29tCnxodHRwOi8vaG9ybnl0cmlwLmNvbQouaG90YXYudHYKLmhvdGVscy5j bgpob3Rmcm9nLmNvbS50dwpob3Rnb28uY29tCi5ob3Rwb3Juc2hvdy5jb20KaG90 cG90LmhrCi5ob3RzaGFtZS5jb20KfHxob3RzcG90c2hpZWxkLmNvbQouaG90dnBu LmNvbQp8fGhvdHZwbi5jb20KfHxob3VnYWlnZS5jb20KfHxob3d0b2ZvcmdlLmNv bQp8fGhveHguY29tCi5ocWNkcC5vcmcKfHxocWNkcC5vcmcKfHxocWphcGFuZXNl c2V4LmNvbQpocW1vdmllcy5jb20KLmhyY2lyLmNvbQouaHJjY2hpbmEub3JnCi5o cmVhLm9yZwouaHJpY2hpbmEub3JnCnx8aHJpY2hpbmEub3JnCi5ocncub3JnCnx8 aHJ3Lm9yZwpocndlYi5vcmcKfHxoc2pwLm5ldAp8fGhzc2VsaXRlLmNvbQp8aHR0 cDovL2hzdC5uZXQudHcKLmhzdGVybi5uZXQKLmhzdHQubmV0Ci5odGtvdS5uZXQK fHxodGtvdS5uZXQKLmh1YS15dWUubmV0Ci5odWFnbGFkLmNvbQp8fGh1YWdsYWQu Y29tCi5odWFuZ2h1YWdhbmcub3JnCnx8aHVhbmdodWFnYW5nLm9yZwouaHVhbmd5 aXl1LmNvbQouaHVhcmVuLnVzCnx8aHVhcmVuLnVzCi5odWFyZW40dXMuY29tCi5o dWFzaGFuZ25ld3MuY29tCnxodHRwOi8vaHVhc2hhbmduZXdzLmNvbQpiYnMuaHVh c2luZy5vcmcKaHVheGlhLW5ld3MuY29tCmh1YXhpYWJhby5vcmcKaHVheGluLnBo Cnx8aHVheXV3b3JsZC5vcmcKLmh1ZmZpbmd0b25wb3N0LmNvbS9yZWJpeWEta2Fk ZWVyCnx8aHVnb3JveS5ldQp8fGh1aGFpdGFpLmNvbQp8fGh1aGFtaGlyZS5jb20K aHVpeWkuaW4KLmh1bGtzaGFyZS5jb20KaHVtYW5yaWdodHNicmllZmluZy5vcmcK fHxodW5nLXlhLmNvbQp8fGh1bmdlcnN0cmlrZWZvcmFpZHMub3JnCnx8aHVwaW5n Lm5ldApodXJnb2tiYXlyYWsuY29tCi5odXJyaXlldC5jb20udHIKLmh1dDIucnUK fHxodXRpYW55aS5uZXQKaHV0b25nOS5uZXQKaHV5YW5kZXguY29tCi5od2FkemFu LnR3Cnx8aHdheXVlLm9yZy50dwp8fGh3aW5mby5jb20KfHxoeHdrLm9yZwpoeHdx Lm9yZwp8fGh5cGVycmF0ZS5jb20KZWJvb2suaHlyZWFkLmNvbS50dwp8fGVib29r Lmh5cmVhZC5jb20udHcKCiEtLS0tLS0tLS0tLS0tLS0tLS0tLUlJLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQp8fGkxLmhrCnx8aTJwMi5kZQp8fGkycnVubmVyLmNv bQp8fGk4MThoay5jb20KLmktY2FibGUuY29tCi5pLXBhcnQuY29tLnR3Ci5pYW10 b3BvbmUuY29tCmlhc2suY2EKfHxpYXNrLmNhCmlhc2suYnoKfHxpYXNrLmJ6Ci5p YXYxOS5jb20KaWJpYmxpby5vcmcvcHViL3BhY2thZ2VzL2NjaWMKLmlibGlzdC5j b20KfHxpYmxvZ3NlcnYtZi5uZXQKaWJyb3Mub3JnCnxodHRwOi8vY24uaWJ0aW1l cy5jb20KLmlidnBuLmNvbQp8fGlidnBuLmNvbQppY2Ftcy5jb20KYmxvZ3MuaWNl cm9ja2V0LmNvbS90YWcKLmljaWoub3JnCnx8aWNpai5vcmcKfHxpY2wtZmkub3Jn Ci5pY29jby5jb20KfHxpY29jby5jb20KCiEtLTM4LjEwMy4xNjUuNTAKfHxmdXJi by5vcmcKIS0tfHxpY29uZmFjdG9yeS5jb20KfHx3YXJibGVyLmljb25mYWN0b3J5 Lm5ldAoKfHxpY29ucGFwZXIub3JnCiEtLSBHb29nbGUgUGFnZXMKfHxpY3UtcHJv amVjdC5vcmcKdy5pZGFpd2FuLmNvbS9mb3J1bQp8fGlkZGRkZy5jb20KaWRlbW9j cmFjeS5hc2lhCi5pZGVudGkuY2EKfHxpZGVudGkuY2EKfHxpZGlvbWNvbm5lY3Rp b24uY29tCnxodHRwOi8vd3d3LmlkbGNveW90ZS5jb20KLmlkb3VnYS5jb20KLmlk cmVhbXguY29tCmZvcnVtLmlkc2FtLmNvbQouaWR2LnR3Ci5pZWFzeTUuY29tCnxo dHRwOi8vaWVhc3k1LmNvbQouaWVkMmsubmV0Ci5pZW5lcmd5MS5jb20KfGh0dHA6 Ly9pZi50dHQvCmlmYW5xaWFuZy5jb20KLmlmY3NzLm9yZwp8fGlmY3NzLm9yZwpp ZmpjLm9yZwouaWZ0LnR0CnxodHRwOi8vaWZ0LnR0Cnx8aWZyZWV3YXJlcy5jb20K fHxpZ2NkLm5ldAouaWdmdy5uZXQKfHxpZ2Z3Lm5ldAouaWdmdy50ZWNoCnx8aWdm dy50ZWNoCi5pZ21nLmRlCnx8aWduaXRlZGV0cm9pdC5uZXQKLmlnb3RtYWlsLmNv bS50dwp8fGlndml0YS5jb20KfHxpaGFra2EubmV0Ci5paGFvLm9yZy9kejUKfHxp aWNucy5jb20KLmlrc3Rhci5jb20KfHxpbGx1c2lvbmZhY3RvcnkuY29tCnx8aWxv dmU4MC5iZQp8fGltLnR2CkBAfHxteXZsb2cuaW0udHYKfHxpbTg4LnR3Ci5pbWdj aGlsaS5uZXQKfGh0dHA6Ly9pbWdjaGlsaS5uZXQKLmltYWdlYWIuY29tCi5pbWFn ZWZhcC5jb20KfHxpbWFnZWZhcC5jb20KfHxpbWFnZWZsZWEuY29tCmltYWdlc2hh Y2sudXMKfHxpbWFnZXZlbnVlLmNvbQp8fGltYWdlemlsbGEubmV0Ci5pbWIub3Jn CnxodHRwOi8vaW1iLm9yZwoKIS0tSU1EQgp8aHR0cDovL3d3dy5pbWRiLmNvbS9u YW1lL25tMDQ4MjczMAouaW1kYi5jb20vdGl0bGUvdHQwODE5MzU0Ci5pbWRiLmNv bS90aXRsZS90dDE1NDAwNjgKLmltZGIuY29tL3RpdGxlL3R0NDkwODY0NAoKLmlt Zy5seQp8fGltZy5seQouaW1rZXYuY29tCnx8aW1rZXYuY29tCi5pbWxpdmUuY29t Ci5pbW1vcmFsLmpwCmltcGFjdC5vcmcuYXUKaW1wcC5tbgp8aHR0cDovL3RlY2gy LmluLmNvbS92aWRlby8KaW45OS5vcmcKaW4tZGlzZ3Vpc2UuY29tCi5pbmNhcGRu cy5uZXQKLmluY2xvYWsuY29tCnx8aW5jbG9hay5jb20KfHxpbmNyZWRpYm94LmZy Cnx8aW5kaWFuZGVmZW5zZW5ld3MuaW4KdGltZXNvZmluZGlhLmluZGlhdGltZXMu Y29tL2RhbGFpCnRpbWVzb2ZpbmRpYS5pbmRpYXRpbWVzLmNvbS9kZWZhdWx0aW50 ZXJzdGl0aWFsLmNtcwouaW5kaWVtZXJjaC5jb20KfHxpbmRpZW1lcmNoLmNvbQpp bmZvLWdyYWYuZnIKd2Vic2l0ZS5pbmZvcm1lci5jb20KLmluaXRpYXRpdmVzZm9y Y2hpbmEub3JnCi5pbmt1aS5jb20KLmlubWVkaWFoay5uZXQKfHxpbm1lZGlhaGsu bmV0Cnx8aW5uZXJtb25nb2xpYS5vcmcKfGh0dHA6Ly9ibG9nLmlub3JlYWRlci5j b20KLmlub3RlLnR3Ci5pbnNlY2FtLm9yZwp8aHR0cDovL2luc2VjYW0ub3JnCnx8 aW5zaWRldm9hLmNvbQouaW5zdGl0dXQtdGliZXRhaW4ub3JnCnxodHRwOi8vaW50 ZXJuZXQub3JnLwppbnRlcm5ldGRlZmVuc2VsZWFndWUub3JnCmludGVybmV0ZnJl ZWRvbS5vcmcKIS0tfHxpbnRlcnBvbC5pbnQKfHxpbnRlcm5ldHBvcGN1bHR1cmUu Y29tCmlueGlhbi5jb20KfHxpbnhpYW4uY29tCmlwYWx0ZXIuY29tCiEtLXx8aXBj Zi5vcmcudHcKLmlwZmlyZS5vcmcKfHxpcGhvbmU0aG9uZ2tvbmcuY29tCnx8aXBo b25laGFja3MuY29tCnx8aXBob25ldGFpd2FuLm9yZwp8fGlwaG9uaXguZnIKfHxp cGljdHVyZS5ydQouaXBqZXRhYmxlLm5ldAp8fGlwamV0YWJsZS5uZXQKLmlwb2Jh ci5jb20vcmVhZC5waHA/Cmlwb29jay5jb20vaW1nCi5pcG9ydGFsLm1lCnxodHRw Oi8vaXBvcnRhbC5tZQp8fGlwcG90di5jb20KLmlwcmVkYXRvci5zZQp8fGlwcmVk YXRvci5zZQouaXB0di5jb20udHcKfHxpcHR2YmluLmNvbQp8fGlwdmFuaXNoLmNv bQppcmVkbWFpbC5vcmcKY2hpbmVzZS5pcmliLmlyCnx8aXJvbmJpZ2Zvb2xzLmNv bXB5dGhvbi5uZXQKfHxpcm9ucHl0aG9uLm5ldAouaXJvbnNvY2tldC5jb20KfHxp cm9uc29ja2V0LmNvbQouaXMuZ2QKLmlzbGFoaGFiZXIubmV0Ci5pc2xhbS5vcmcu aGsKfGh0dHA6Ly9pc2xhbS5vcmcuaGsKLmlzbGFtYXdhcmVuZXNzLm5ldC9Bc2lh L0NoaW5hCi5pc2xhbWhvdXNlLmNvbQp8fGlzbGFtaG91c2UuY29tCi5pc2xhbWlj aXR5LmNvbQouaXNsYW1pY3BsdXJhbGlzbS5vcmcKLmlzbGFtdG9kYXkubmV0Ci5p c2FhY21hby5jb20KfHxpc2FhY21hby5jb20KfHxpc2dyZWF0Lm9yZwp8fGlzbWFl bGFuLmNvbQouaXNtYWxsdGl0cy5jb20KfHxpc21wcm9mZXNzaW9uYWwubmV0Cmlz b2h1bnQuY29tCnx8aXNyYWJveC5jb20KLmlzc3V1LmNvbQp8fGlzc3V1LmNvbQou aXN0YXJzLmNvLm56Cm92ZXJzZWEuaXN0YXJzaGluZS5jb20KfHxvdmVyc2VhLmlz dGFyc2hpbmUuY29tCmJsb2cuaXN0ZWYuaW5mby8yMDA3LzEwLzIxL215ZW50dW5u ZWwKLmlzdGlxbGFsaGV3ZXIuY29tCi5pc3RvY2twaG90by5jb20KaXN1bmFmZmFp cnMuY29tCmlzdW50di5jb20KaXRhYm9vLmluZm8KfHxpdGFib28uaW5mbwouaXRh bGlhdGliZXQub3JnCmRvd25sb2FkLml0aG9tZS5jb20udHcKaXRoZWxwLml0aG9t ZS5jb20udHcKfHxpdHNoaWRkZW4uY29tCi5pdHNreS5pdAouaXR3ZWV0Lm5ldAp8 aHR0cDovL2l0d2VldC5uZXQKLml1NDUuY29tCi5pdWhyZGYub3JnCnx8aXVocmRm Lm9yZwouaXVrc2t5LmNvbQouaXZhY3kuY29tCnx8aXZhY3kuY29tCi5pdmVyeWNk LmNvbQouaXZwbi5uZXQKIS0tfHxpdnBuLm5ldAp8fGl4cXVpY2suY29tCi5peHh4 LmNvbQppeW91cG9ydC5jb20KfHxpeW91cG9ydC5jb20KLml6YW9iYW8udXMKfHxn bW96b21nLml6aWhvc3Qub3JnCi5pemxlcy5uZXQKLml6bGVzZW0ub3JnCgohLS0t LS0tLS0tLS0tLS0tLS0tLS1KSi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KfHxq Lm1wCmJsb2cuamFja2ppYS5jb20KamFtYWF0Lm9yZwouamFteWFuZ25vcmJ1LmNv bQp8aHR0cDovL2phbXlhbmdub3JidS5jb20KLmphbmR5eC5jb20KfHxqYW53b25n cGhvdG8uY29tCnx8amFwYW4td2hvcmVzLmNvbQouamF2LmNvbQouamF2MTAxLmNv bQouamF2MmJlLmNvbQp8fGphdjJiZS5jb20KLmphdjY4LnR2Ci5qYXZha2liYS5v cmcKfGh0dHA6Ly9qYXZha2liYS5vcmcKLmphdmJ1cy5jb20KfHxqYXZidXMuY29t Cnx8amF2Zm9yLm1lCi5qYXZoZC5jb20KLmphdmhpcC5jb20KLmphdm1vYmlsZS5u ZXQKfGh0dHA6Ly9qYXZtb2JpbGUubmV0Ci5qYXZtb28uY29tCi5qYXZzZWVuLmNv bQp8aHR0cDovL2phdnNlZW4uY29tCmpidGFsa3MuY2MKamJ0YWxrcy5jb20KamJ0 YWxrcy5teQouamR3c3kuY29tCmplYW55aW0uY29tCnx8amZxdTM2LmNsdWIKfHxq ZnF1MzcueHl6Cnx8amdvb2RpZXMuY29tCi5qaWFuZ3dlaXBpbmcuY29tCnx8amlh bmd3ZWlwaW5nLmNvbQp8fGppYW95b3U4LmNvbQouamllaHVhLmN6Cnx8aGsuamll cGFuZy5jb20KfHx0dy5qaWVwYW5nLmNvbQpqaWVzaGliYW9iYW8uY29tCi5qaWdn bGVnaWZzLmNvbQo1NmN1bjA0LmppZ3N5LmNvbQpqaWdvbmcxMDI0LmNvbQpkYW9k dTE0LmppZ3N5LmNvbQpzcGVjeGluemwuamlnc3kuY29tCndsY25ldy5qaWdzeS5j b20KLmppaGFkb2xvZ3kubmV0CnxodHRwOi8vamloYWRvbG9neS5uZXQKamluYnVz aGUub3JnCnx8amluYnVzaGUub3JnCi5qaW5nc2ltLm9yZwp6aGFvLmppbmhhaS5k ZQpqaW5ncGluLm9yZwp8fGppbmdwaW4ub3JnCmppbnBpYW53YW5nLmNvbQouamlu cm91a29uZy5jb20KYWMuamlydWFuLm5ldAp8fGppdG91Y2guY29tCi5qaXp6dGhp cy5jb20KampnaXJscy5jb20KLmprYi5jYwp8aHR0cDovL2prYi5jYwpqa2ZvcnVt Lm5ldAp8fGptYS5nby5qcApyZXNlYXJjaC5qbXNjLmhrdS5oay9zb2NpYWwKd2Vp Ym9zY29wZS5qbXNjLmhrdS5oawouam1zY3VsdC5jb20KfGh0dHA6Ly9qbXNjdWx0 LmNvbQp8fGpvYWNoaW1zLm9yZwp8fGpvYnNvLnR2Ci5zdW53aW5pc20uam9pbmJi cy5uZXQKLmpvdXJuYWxjaHJldGllbi5uZXQKfHxqb3VybmFsb2ZkZW1vY3JhY3ku b3JnCi5qb3ltaWlodWIuY29tCi5qb3lvdXJzZWxmLmNvbQpqcG9wZm9ydW0ubmV0 Ci5qdWJ1c2hvdXNoZW4uY29tCnx8anVidXNob3VzaGVuLmNvbQohLS1Eb2FtaW4g cGFya2luZwouanVodWFyZW4uY29tCnx8anVsaWVyZXljLmNvbQp8fGp1bmF1emEu Y29tCi5qdW5lNGNvbW1lbW9yYXRpb24ub3JnCi5qdW5lZm91cnRoLTIwLm5ldAp8 fGp1bmVmb3VydGgtMjAubmV0Cnx8YmJzLmp1bmdsb2JhbC5uZXQKLmp1b2FhLmNv bQp8aHR0cDovL2p1b2FhLmNvbQpqdXN0ZnJlZXZwbi5jb20KLmp1c3RpY2Vmb3J0 ZW56aW4ub3JnCmp1c3RwYXN0ZS5pdApqdXN0dHJpc3Rhbi5jb20KanV5dWFuZ2Uu b3JnCmp1eml5dWUuY29tCnx8anV6aXl1ZS5jb20KfHxqd211c2ljLm9yZwpAQHx8 bXVzaWMuandtdXNpYy5vcmcKLmp5eGYubmV0CgohLS0tLS0tLS0tLS0tLS0tLS0t LS1LSy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KfHxrLWRvdWppbi5uZXQKfHxr YS13YWkuY29tCi5rYWd5dS5vcmcKfHxrYWd5dS5vcmcuemEKLmthZ3l1bW9ubGFt Lm9yZwoua2FneXVuZXdzLmNvbS5oawoua2FneXVvZmZpY2Uub3JnCnx8a2FneXVv ZmZpY2Uub3JnCnx8a2FneXVvZmZpY2Uub3JnLnR3Ci5rYWl5dWFuLmRlCi5rYWth by5jb20KfHxrYWthby5jb20KLmthbGFjaGFrcmFsdWdhbm8ub3JnCi5rYW5rYW4u dG9kYXkKLmthbm5ld3lvcmsuY29tCnx8a2FubmV3eW9yay5jb20KLmthbnNoaWZh bmcuY29tCnx8a2Fuc2hpZmFuZy5jb20KfHxrYW50aWUub3JnCmthbnpob25nZ3Vv LmNvbQprYW56aG9uZ2d1by5ldQoua2FvdGljLmNvbQp8fGthcmF5b3UuY29tCmth cmtodW5nLmNvbQoua2FybWFwYS5vcmcKLmthcm1hcGEtdGVhY2hpbmdzLm9yZwp8 fGthd2FzZS5jb20KLmtiYS10eC5vcmcKLmtjb29sb25saW5lLmNvbQoua2VicnVt LmNvbQp8fGtlYnJ1bS5jb20KLmtlY2hhcmEuY29tCi5rZWVwYW5kc2hhcmUuY29t L3Zpc2l0L3Zpc2l0X3BhZ2UucGhwP2k9Njg4MTU0CiEtLXx8a2VlcHZpZC5jb20K LmtlZXptb3ZpZXMuY29tCi5rZW5kaW5jb3MubmV0Ci5rZW5lbmdiYS5jb20KfHxr ZW5lbmdiYS5jb20KfHxrZW9udGVjaC5uZXQKLmtlcGFyZC5jb20KfHxrZXBhcmQu Y29tCndpa2kua2Vzby5jbi9Ib21lCnx8a2V5Y2RuLmNvbQoua2hhYmRoYS5vcmcK LmtobXVzaWMuY29tLnR3Cnx8a2ljaGlrdS1kb3VqaW5rby5jb20KLmtpay5jb20K fHxraWsuY29tCmJicy5raW15LmNvbS50dwoua2luZGxlcmVuLmNvbQp8aHR0cDov L2tpbmRsZXJlbi5jb20KfGh0dHA6Ly93d3cua2luZGxlcmVuLmNvbQoua2luZ2Rv bXNhbHZhdGlvbi5vcmcKfHxraW5nZG9tc2FsdmF0aW9uLm9yZwpraW5naG9zdC5j b20KIS0tLmtpbmdzdG9uZS5jb20udHcvYm9vay8KfHxraW5nc3RvbmUuY29tLnR3 Ci5raW5rLmNvbQpraWxsd2FsbC5jb20KfHxraWxsd2FsbC5jb20KfHxraW5tZW4u dHJhdmVsCi5raXIuanAKLmtpc3NiYmFvLmNuCnxodHRwOi8va2l3aS5regp8fGtr LXdoeXMuY28uanAKIS0tfHxrbXQub3JnLnR3Ci5rbXVoLm9yZy50dwoua25vd2xl ZGdlcnVzaC5jb20va3IvZW5jeWNsb3BlZGlhCi5rb2JvLmNvbQp8fGtvYm8uY29t Ci5rb2JvYm9va3MuY29tCnx8a29ib2Jvb2tzLmNvbQp8fGtvZGluZ2VuLmNvbQpA QHx8d3d3LmtvZGluZ2VuLmNvbQp8fGtvbXBvemVyLm5ldAoua29uYWNoYW4uY29t CnxodHRwOi8va29uYWNoYW4uY29tCi5rb25lLmNvbQp8fGtvb2xzb2x1dGlvbnMu Y29tCi5rb29ybmsuY29tCnx8a29vcm5rLmNvbQp8fGtvcmFubWFuZGFyaW4uY29t Ci5rb3JlbmFuMi5jb20KfGh0dHA6Ly9nb2pldC5rcnRjby5jb20udHcKLmtzZGwu b3JnCi5rc25ld3MuY29tLnR3Cnx8a3R6aGsuY29tCi5rdWkubmFtZS9ldmVudApr dW4uaW0KLmt1cmFzaHN1bHRhbi5jb20KfHxrdXJ0bXVuZ2VyLmNvbQprdXNvY2l0 eS5jb20KfHxrd2NnLmNhCmt3b25nd2FoLmNvbS5teQoua3hzdy5saWZlCnx8a3hz dy5saWZlCi5reW9mdW4uY29tCmt5b2hrLm5ldAp8fGt5b3l1ZS5jb20KLmt5enlo ZWxsby5jb20KfHxreXp5aGVsbG8uY29tCi5remVuZy5pbmZvCnx8a3plbmcuaW5m bwoKIS0tLS0tLS0tLS0tLS0tLS0tLS0tTEwtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCmxhLWZvcnVtLm9yZwpsYWRicm9rZXMuY29tCnx8bGFiaWVubmFsZS5vcmcK LmxhZ3JhbmVwb2NhLmNvbQp8fGxhZ3JhbmVwb2NhLmNvbQoubGFsdWxhbHUuY29t Ci5sYW1hLmNvbS50dwp8fGxhbWEuY29tLnR3Ci5sYW1heWVzaGUuY29tCnxodHRw Oi8vbGFtYXllc2hlLmNvbQp8aHR0cDovL3d3dy5sYW1lbmh1LmNvbQoubGFtbmlh LmNvLnVrCnx8bGFtbmlhLmNvLnVrCmxhbXJpbS5jb20KLmxhbnRlcm5jbi5jbgp8 aHR0cDovL2xhbnRlcm5jbi5jbgoubGFudG9zZm91bmRhdGlvbi5vcmcKLmxhb2Qu Y24KfGh0dHA6Ly9sYW9kLmNuCmxhb2dhaS5vcmcKfHxsYW9nYWkub3JnCmxhb21p dS5jb20KLmxhb3lhbmcuaW5mbwp8aHR0cDovL2xhb3lhbmcuaW5mbwp8fGxhcHRv cGxvY2tkb3duLmNvbQoubGFxaW5nZGFuLm5ldAp8fGxhcWluZ2Rhbi5uZXQKfHxs YXJzZ2VvcmdlLmNvbQoubGFzdGNvbWJhdC5jb20KfGh0dHA6Ly9sYXN0Y29tYmF0 LmNvbQp8fGxhc3RmbS5lcwpsYXRlbGluZW5ld3MuY29tCi5sYXRpYmV0Lm9yZwp8 fGxlLXZwbi5jb20KLmxlYWZ5dnBuLm5ldAp8fGxlYWZ5dnBuLm5ldApsZWVhby5j b20uY24vYmJzL2ZvcnVtLnBocAohLS18fGxlZWNoZXVreWFuLm9yZwpsZWZvcmEu Y29tCnx8bGVmdDIxLmhrCi5sZWdhbHBvcm5vLmNvbQoubGVnc2phcGFuLmNvbQp8 aHR0cDovL2xlaXJlbnR2LmNhCmxlaXN1cmVjYWZlLmNhCnx8bGVtYXRpbi5jaAou bGVtb25kZS5mcgp8fGxlbndoaXRlLmNvbQpsZXJvc3VhLm9yZwp8fGxlcm9zdWEu b3JnCmJsb2cubGVzdGVyODUwLmluZm8KfHxsZXNvaXIuYmUKLmxldG91LmNvbQps ZXRzY29ycC5uZXQKfHxsZXRzY29ycC5uZXQKfHxzcy5sZXZ5aHN1LmNvbQohNjku MTYuMTc1LjQyCnx8Y2RuLmFzc2V0cy5sZnBjb250ZW50LmNvbQoubGhha2FyLm9y Zwp8aHR0cDovL2xoYWthci5vcmcKLmxoYXNvY2lhbHdvcmsub3JnCi5saWFuZ3lv dS5uZXQKfHxsaWFuZ3lvdS5uZXQKLmxpYW55dWUubmV0Cnx8bGlhb3dhbmd4aXph bmcubmV0Ci5saWFvd2FuZ3hpemFuZy5uZXQKfHxsaWJlcmFsLm9yZy5oawoubGli ZXJ0eXRpbWVzLmNvbS50dwpibG9ncy5saWJyYXJ5aW5mb3JtYXRpb250ZWNobm9s b2d5LmNvbS9qeHl6Ci5saWRlY2hlbmcuY29tL2Jsb2cvZnVja2luZy1nZncKLmxp Z2h0ZW4ub3JnLnR3Ci5saWdodG5vdmVsLmNuCkBAfGh0dHBzOi8vd3d3LmxpZ2h0 bm92ZWwuY24KbGltaWFvLm5ldApsaW5rdXN3ZWxsLmNvbQphYml0bm8ubGlucGll LmNvbS91c2UtaXB2Ni10by1mdWNrLWdmdwp8fGxpbmUubWUKfHxsaW5lLWFwcHMu Y29tCi5saW5nbGluZ2ZhLmNvbQp8fGxpbmd2b2RpY3MuY29tCi5saW5rLW8tcmFt YS5jb20KfGh0dHA6Ly9saW5rLW8tcmFtYS5jb20KLmxpbmtpZGVvLmNvbQp8fGFw aS5saW5rc2FscGhhLmNvbQp8fGFwaWRvY3MubGlua3NhbHBoYS5jb20KfHx3d3cu bGlua3NhbHBoYS5jb20KfHxoZWxwLmxpbmtzYWxwaGEuY29tCnx8bGludXgub3Jn LmhrCmxpbnV4dG95Lm9yZy9hcmNoaXZlcy9pbnN0YWxsaW5nLXdlc3QtY2hhbWJl ci1vbi11YnVudHUKLmxpb25zcm9hci5jb20KLmxpcHVtYW4uY29tCnx8bGlxdWlk dnBuLmNvbQp8fGdyZWF0ZmlyZS51czcubGlzdC1tYW5hZ2UuY29tCnx8bGlzdGVu dG95b3V0dWJlLmNvbQpsaXN0b3Jpb3VzLmNvbQoubGl1LXhpYW9iby5vcmcKfHxs aXVkZWp1bi5jb20KLmxpdWhhbnl1LmNvbQoubGl1amlhbnNodS5jb20KfHxsaXVq aWFuc2h1LmNvbQoubGl1eGlhb2JvLm5ldAp8aHR0cDovL2xpdXhpYW9iby5uZXQK bGl1eGlhb3RvbmcuY29tCnx8bGl1eGlhb3RvbmcuY29tCi5saXZlZG9vci5qcAou bGl2ZWxlYWsuY29tCnx8bGl2ZWxlYWsuY29tCi5saXZlc3RhdGlvbi5jb20KbGl2 ZXN0cmVhbS5jb20KfHxsaXZlc3RyZWFtLmNvbQp8fGxpdmluZ29ubGluZS51cwp8 fGxpdmluZ3N0cmVhbS5jb20KfHxsaXZldmlkZW8uY29tCi5saXZldmlkZW8uY29t Ci5saXdhbmd5YW5nLmNvbQpsaXpoaXpodWFuZ2JpLmNvbQpsa2NuLm5ldAoubGxz cy5tZS8KLmxvYWQudG8KLmxvYnNhbmd3YW5neWFsLmNvbQoubG9jYWxkb21haW4u d3MKfHxsb2NhbGRvbWFpbi53cwpsb2NhbHByZXNzaGsuY29tCnx8bG9ja2VzdGVr LmNvbQpsb2dib3QubmV0Cnx8bG9naXF4LmNvbQpzZWN1cmUubG9nbWVpbi5jb20K fHxzZWN1cmUubG9nbWVpbi5jb20KLmxvbmRvbmNoaW5lc2UuY2EKLmxvbmdoYWly LmhrCmxvbmdtdXNpYy5jb20KfHxsb25ndGVybWx5Lm5ldAp8fGxvb2twaWMuY29t Ci5sb29rdG9yb250by5jb20KfGh0dHA6Ly9sb29rdG9yb250by5jb20KLmxvdHNh d2Fob3VzZS5vcmcvdGliZXRhbi1tYXN0ZXJzL2ZvdXJ0ZWVudGgtZGFsYWktbGFt YQoubG90dXNsaWdodC5vcmcuaGsKLmxvdHVzbGlnaHQub3JnLnR3CmhrcmVwb3J0 ZXIubG92ZWQuaGsKIS0tNDAzPwp8fGxwc2cuY29tCnx8bHJmei5jb20KLmxyaXAu b3JnCnx8bHJpcC5vcmcKLmxzZC5vcmcuaGsKfHxsc2Qub3JnLmhrCmxzZm9ydW0u bmV0Ci5sc20ub3JnCnx8bHNtLm9yZwoubHNtY2hpbmVzZS5vcmcKfHxsc21jaGlu ZXNlLm9yZwoubHNta29yZWFuLm9yZwp8fGxzbWtvcmVhbi5vcmcKLmxzbXJhZGlv LmNvbS9yYWRfYXJjaGl2ZXMKLmxzbXdlYmNhc3QuY29tCi5sdG4uY29tLnR3Cnxo dHRwOi8vbHRuLmNvbS50dwoubHVrZTU0LmNvbQoubHVrZTU0Lm9yZwoubHVwbS5v cmcKfHxsdXBtLm9yZwp8fGx1c2hzdG9yaWVzLmNvbQpsdXhlYmMuY29tCmx2aGFp Lm9yZwp8fGx2aGFpLm9yZwp8fGx2djIuY29tCi5seWZoay5uZXQKfGh0dHA6Ly9s eWZoay5uZXQKLmx6bXRuZXdzLm9yZwp8fGx6bXRuZXdzLm9yZwoKIS0tLS0tLS0t LS0tLS0tLS0tLS0tTU0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmh0dHA6Ly8q Lm0tdGVhbS5jYwohLS1tLXRlYW0uY2MvZm9ydW0KLm1hY3JvdnBuLmNvbQptYWN0 cy5jb20udHcKfHxtYWQtYXIuY2gKfHxtYWRyYXUuY29tCnx8bWFkdGh1bWJzLmNv bQp8fG1hZ2ljLW5ldC5pbmZvCm1haGFib2RoaS5vcmcKbXkubWFpbC5ydQoubWFp cGx1cy5jb20KfGh0dHA6Ly9tYWlwbHVzLmNvbQoubWFpemhvbmcub3JnCm1ha2th aG5ld3NwYXBlci5jb20KLm1hbWluZ3poZS5jb20KbWFuaWN1cjRpay5ydQoubWFw bGV3LmNvbQp8aHR0cDovL21hcGxldy5jb20KfHxtYXJjLmluZm8KbWFyZ3Vlcml0 ZS5zdQp8fG1hcnRpbmNhcnRvb25zLmNvbQptYXNrZWRpcC5jb20KLm1haWlvLm5l dAptYWlsLWFyY2hpdmUuY29tCi5tYWxheXNpYWtpbmkuY29tCnx8bWFrZW15bW9v ZC5jb20KLm1hbmNodWt1by5uZXQKLm1hbmlhc2guY29tCnxodHRwOi8vbWFuaWFz aC5jb20KLm1hbnNpb24uY29tCi5tYW5zaW9ucG9rZXIuY29tCiEtLXx8bWFyaW5l cy5taWwKIS0tbWFya21haWwub3JnKm1lc3NhZ2UKfHxtYXJ0YXUuY29tCnxodHRw Oi8vYmxvZy5tYXJ0aW5vZWkuY29tCi5tYXJ0c2FuZ2thZ3l1b2ZmaWNpYWwub3Jn CnxodHRwOi8vbWFydHNhbmdrYWd5dW9mZmljaWFsLm9yZwptYXJ1dGEuYmUvZm9y Z2V0Ci5tYXJ4aXN0LmNvbQp8fG1hcnhpc3QubmV0Ci5tYXJ4aXN0cy5vcmcvY2hp bmVzZQohLS18fG1hc2hhYmxlLmNvbQp8fG1hdGFpbmphLmNvbQp8fG1hdGhhYmxl LmlvCnx8bWF0aGlldy1iYWRpbW9uLmNvbQp8fG1hdHN1c2hpbWFrYWVkZS5jb20K fGh0dHA6Ly9tYXR1cmVqcC5jb20KbWF5aW1heWkuY29tCi5tYXhpbmcuanAKLm1j YWYuZWUKfGh0dHA6Ly9tY2FmLmVlCnx8bWNhZGZvcnVtcy5jb20KbWNmb2cuY29t Cm1jcmVhc2l0ZS5jb20KLm1kLXQub3JnCnx8bWQtdC5vcmcKfHxtZWFuc3lzLmNv bQoubWVkaWEub3JnLmhrCi5tZWRpYWNoaW5lc2UuY29tCnx8bWVkaWFjaGluZXNl LmNvbQoubWVkaWFmaXJlLmNvbS8/Ci5tZWRpYWZpcmUuY29tL2Rvd25sb2FkCi5t ZWRpYWZyZWFrY2l0eS5jb20KfHxtZWRpYWZyZWFrY2l0eS5jb20KLm1lZGl1bS5j b20KfHxtZWRpdW0uY29tCi5tZWV0YXYuY29tCnx8bWVldHVwLmNvbQptZWZlZWRp YS5jb20KamloYWRpbnRlbC5tZWZvcnVtLm9yZwp8fG1lZ2EubnoKfHxtZWdhcHJv eHkuY29tCnx8bWVnYXJvdGljLmNvbQptZWdhdmlkZW8uY29tCnx8bWVndXJpbmVs dWthLmNvbQptZWlyaXhpYW9jaGFvLmNvbQoubWVsdG9kYXkuY29tCi5tZW1laGsu Y29tCnx8bWVtZWhrLmNvbQptZW1vcnliYnMuY29tCi5tZW1yaS5vcmcKLm1lbXJp anR0bS5vcmcKLm1lcmN5cHJvcGhldC5vcmcKfGh0dHA6Ly9tZXJjeXByb3BoZXQu b3JnCi5tZXJpZGlhbi10cnVzdC5vcmcKfGh0dHA6Ly9tZXJpZGlhbi10cnVzdC5v cmcKLm1lcmlwZXQuYml6CnxodHRwOi8vbWVyaXBldC5iaXoKLm1lcmlwZXQuY29t CnxodHRwOi8vbWVyaXBldC5jb20KbWVyaXQtdGltZXMuY29tLnR3Cm1lc2hyZXAu Y29tCi5tZXNvdHcuY29tL2JicwptZXRhY2FmZS5jb20vd2F0Y2gKfHxtZXRlb3Jz aG93ZXJzb25saW5lLmNvbQp8aHR0cDovL3d3dy5tZXRyby50YWlwZWkvCi5tZXRy b2hrLmNvbS5oay8/Y21kPWRldGFpbCZjYXRlZ29yeUlEPTIKfHxtZXRyb2xpZmUu Y2EKLm1ldHJvcmFkaW8uY29tLmhrCnxodHRwOi8vbWV0cm9yYWRpby5jb20uaGsK bWV5b3UuanAKLm1leXVsLmNvbQp8fG1nb29uLmNvbQp8fG1nc3RhZ2UuY29tCnx8 bWg0dS5vcmcKbWhyYWRpby5vcmcKfGh0dHA6Ly9taWNoYWVsYW50aS5jb20KfHxt aWNoYWVsbWFya2V0bC5jb20KLm1pY3JvdnBuLmNvbQp8aHR0cDovL21pY3JvdnBu LmNvbQptaWRkbGUtd2F5Lm5ldAoubWloay5oay9mb3J1bQoubWloci5jb20KbWlo dWEub3JnCiEtLUlQCnx8bWlrZXNvbHR5cy5jb20KLm1pbHBoLm5ldAp8aHR0cDov L21pbHBoLm5ldAoubWlsc3VycHMuY29tCm1pbWlhaS5uZXQKLm1pbWl2aXAuY29t Ci5taW1pdnYuY29tCi5taW5kcm9sbGluZy5vcmcKfGh0dHA6Ly9taW5kcm9sbGlu Zy5vcmcKLm1pbmdodWkub3Iua3IKfGh0dHA6Ly9taW5naHVpLm9yLmtyCm1pbmdo dWkub3JnCnx8bWluZ2h1aS5vcmcKbWluZ2h1aS1hLm9yZwptaW5naHVpLWIub3Jn Cm1pbmdodWktc2Nob29sLm9yZwoubWluZ2ppbmdsaXNoaS5jb20KfHxtaW5namlu Z2xpc2hpLmNvbQptaW5namluZ25ld3MuY29tCnx8bWluZ2ppbmd0aW1lcy5jb20K Lm1pbmdwYW8uY29tCnx8bWluZ3Bhby5jb20KLm1pbmdwYW9jYW5hZGEuY29tCi5t aW5ncGFvbW9udGhseS5jb20KfGh0dHA6Ly9taW5ncGFvbW9udGhseS5jb20KbWlu Z3Bhb25ld3MuY29tCi5taW5ncGFvbnkuY29tCi5taW5ncGFvc2YuY29tCi5taW5n cGFvdG9yLmNvbQoubWluZ3Bhb3Zhbi5jb20KLm1pbmdzaGVuZ2Jhby5jb20KLm1p bmhodWUubmV0Ci5taW5pZm9ydW0ub3JnCi5taW5pc3RyeWJvb2tzLm9yZwoubWlu emh1aHVhLm5ldAp8fG1pbnpodWh1YS5uZXQKbWluemh1emhhbnhpYW4uY29tCm1p bnpodXpob25nZ3VvLm9yZwp8fG1pcm9ndWlkZS5jb20KbWlycm9yYm9va3MuY29t Ci5taXN0LnZpcAp0aGVjZW50ZXIubWl0LmVkdQoubWl0YW8uY29tLnR3Ci5taXRi YnMuY29tCnx8bWl0YmJzLmNvbQptaXRiYnNhdS5jb20KLm1peGVyby5jb20KfHxt aXhlcm8uY29tCm1peHBvZC5jb20KLm1peHguY29tCnx8bWl4eC5jb20KfHxtaXp6 bW9uYS5jb20KLm1rNTAwMC5jb20KLm1sY29vbC5jb20KfHxtbHpzLndvcmsKLm1t LWNnLmNvbQp8fG1tYWF4eC5jb20KLm1tbWNhLmNvbQptbmV3c3R2LmNvbQp8fG1v YmF0ZWsubmV0Ci5tb2JpbGUwMS5jb20KfHxtb2JpbGUwMS5jb20KfHxtb2JpbGV3 YXlzLmRlCi5tb2J5cGljdHVyZS5jb20KfGh0dHA6Ly9tb2J5LnRvCnx8bW9lZXJv bGlicmFyeS5jb20Kd2lraS5tb2VnaXJsLm9yZwoubW9mYXhpZWh1aS5jb20KLm1v Zm9zLmNvbQp8fG1vZy5jb20KbW9saWh1YS5vcmcKfHxtb25kZXgub3JnCi5tb25l eS1saW5rLmNvbS50dwp8aHR0cDovL21vbmV5LWxpbmsuY29tLnR3CnxodHRwOi8v d3d3Lm1vbmxhbWl0Lm9yZwoubW9vbmJicy5jb20KfHxtb29uYmJzLmNvbQpjMTUy Mi5tb29vLmNvbQp8fG1vbml0b3JjaGluYS5vcmcKYmJzLm1vcmJlbGwuY29tCnx8 bW9ybmluZ3N1bi5vcmcKfHxtb3JvbmV0YS5jb20KLm1vdGhlcmxlc3MuY29tCnxo dHRwOi8vbW90aGVybGVzcy5jb20KbW90b3I0aWsucnUKLm1vdXNlYnJlYWtlci5j b20KIS0tfHxtb3ZhYmxldHlwZS5jb20KLm1vdmVtZW50cy5vcmcKfHxtb3ZlbWVu dHMub3JnCnx8bW92aWVmYXAuY29tCnx8d3d3Lm1venR3Lm9yZwoubXAzYnVzY2Fk b3IuY29tCm1wM3llLmV1Cnx8bXBldHRpcy5jb20KbXBmaW5hbmNlLmNvbQptcGlu ZXdzLmNvbQptcG9ubGluZS5oawoubXF4ZC5vcmcKfGh0dHA6Ly9tcXhkLm9yZwpt cnR3ZWV0LmNvbQp8fG1ydHdlZXQuY29tCm5ld3MuaGsubXNuLmNvbQpuZXdzLm1z bi5jb20udHcKbXNndWFuY2hhLmNvbQoubXN3ZTEub3JnCnxodHRwOi8vbXN3ZTEu b3JnCnx8bXRocnVmLmNvbQptdWNob3N1Y2tvLmNvbQp8fG11bHRpcGx5LmNvbQpt dWx0aXByb3h5Lm9yZwptdWx0aXVwbG9hZC5jb20KLm11bGx2YWQubmV0Cnx8bXVs bHZhZC5uZXQKLm11bW15c2dvbGQuY29tCi5tdXJtdXIudHcKfGh0dHA6Ly9tdXJt dXIudHcKLm11c2ljYWRlLm5ldAoubXVzbGltdmlkZW8uY29tCnx8bXV6aS5jb20K fHxtdXppLm5ldAp8fG14OTgxLmNvbQoubXktZm9ybW9zYS5jb20KLm15LXByb3h5 LmNvbQoubXktcHJpdmF0ZS1uZXR3b3JrLmNvLnVrCnx8bXktcHJpdmF0ZS1uZXR3 b3JrLmNvLnVrCmZvcnVtLm15OTAzLmNvbQoubXlhY3RpbWVzLmNvbS9hY3RpbWVz Cnx8bXlhbm5pdS5jb20KLm15YXVkaW9jYXN0LmNvbQp8fG15YXVkaW9jYXN0LmNv bQoubXlhdi5jb20udHcvYmJzCi5teWJicy51cwoubXljYTE2OC5jb20KLm15Y2Fu YWRhbm93LmNvbQp8fGJicy5teWNoYXQudG8KfHxteWNoaW5hbXlob21lLmNvbQou bXljaGluYW15aG9tZS5jb20KLm15Y2hpbmFuZXQuY29tCi5teWNoaW5hbmV3cy5j b20KfHxteWNoaW5hbmV3cy5jb20KLm15Y2hpbmVzZS5uZXdzCnx8bXljbm5ld3Mu Y29tCnx8bXlrb21pY2Eub3JnCm15Y291bGQuY29tL2Rpc2N1egoubXllYXN5dHYu Y29tCnx8bXllY2xpcHNlaWRlLmNvbQoubXlmb3J1bS5jb20uaGsKfHxteWZvcnVt LmNvbS5oawp8fG15Zm9ydW0uY29tLnVrCi5teWZyZWVjYW1zLmNvbQoubXlmcmVl cGF5c2l0ZS5jb20KLm15ZnJlc2huZXQuY29tCi5teWlwaGlkZS5jb20KfHxteWlw aGlkZS5jb20KZm9ydW0ubXltYWppLmNvbQpteW1lZGlhcm9tLmNvbS9maWxlcy9i b3gKfHxteW1vZS5tb2UKfHxteW11c2ljLm5ldC50dwp8fG15cGFyYWdsaWRpbmcu Y29tCnx8bXlwb3Blc2N1LmNvbQpteXJhZGlvLmhrL3BvZGNhc3QKLm15cmVhZGlu Z21hbmdhLmluZm8KbXlzaW5hYmxvZy5jb20KLm15c3BhY2UuY29tCiEtLS5ibG9n cy5teXNwYWNlLmNvbQohLS18fGJsb2dzLm15c3BhY2UuY29tCiEtLXZpZHMubXlz cGFjZS5jb20vaW5kZXguY2ZtP2Z1c2VhY3Rpb249dmlkcy4KIS0tdmlld21vcmVw aWNzLm15c3BhY2UuY29tCnx8bXlzcGFjZWNkbi5jb20KLm15dGFsa2JveC5jb20K Lm15dGl6aS5jb20KCiEtLS0tLS0tLS0tLS0tLS0tLS0tLU5OLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQp8fG5hYWNvYWxpdGlvbi5vcmcKb2xkLm5hYmJsZS5jb20K fHxuYWl0aWsubmV0Ci5uYWt1ei5jb20vYmJzCnx8bmFsYW5kYWJvZGhpLm9yZwp8 fG5hbGFuZGF3ZXN0Lm9yZwoubmFtZ3lhbC5vcmcKbmFtZ3lhbG1vbmFzdGVyeS5v cmcKfHxuYW1zaXNpLmNvbQoubmFueWFuZy5jb20KfHxuYW55YW5nLmNvbQoubmFu eWFuZ3Bvc3QuY29tCnx8bmFueWFuZ3Bvc3QuY29tCi5uYW56YW8uY29tCiEtLS5u YW56YW8uY29tL3NjL2NoaW5hLzIwMjIzCiEtLS5uYW56YW8uY29tL3NjL2hrLW1h Y2F1LXR3Cnx8anBsLm5hc2EuZ292Cnx8cGRzLm5hc2EuZ292Cnx8c29sYXJzeXN0 ZW0ubmFzYS5nb3YKLm5ha2lkby5jb20KfHxuYWtpZG8uY29tCi5uYW9sLmNhCi5u YW9sLmNjCnVpZ2h1ci5uYXJvZC5ydQoubmF0Lm1vZQp8fG5hdC5tb2UKY3liZXJn aG9zdC5uYXRhZG8uY29tCnx8bmF0aW9uYWwtbG90dGVyeS5jby51awpuZXdzLm5h dGlvbmFsZ2VvZ3JhcGhpYy5jb20vbmV3cy8yMDE0LzA2LzE0MDYwMy10aWFuYW5t ZW4tc3F1YXJlCi5uYXRpb25zb25saW5lLm9yZy9vbmV3b3JsZC90aWJldAp8fGxp bmUubmF2ZXIuanAKfHxuYXZ5ZmFtaWx5Lm5hdnkubWlsCnx8bmF2eXJlc2VydmUu bmF2eS5taWwKfHxua28ubmF2eS5taWwKfHx1c25vLm5hdnkubWlsCm5hd2Vla2x5 dGltZXMuY29tCi5uYnR2cG4uY29tCnxodHRwOi8vbmJ0dnBuLmNvbQpuY2N3YXRj aC5vcmcudHcKLm5jaC5jb20udHcKLm5jbi5vcmcKfHxuY24ub3JnCnx8ZXRvb2xz Lm5jb2wuY29tCi5uZGUuZGUKLm5kci5kZQoubmVkLm9yZwp8fG5la29zbG92YWtp YS5uZXQKfHxuZXB1c29rdS5jb20KfHxuZXQtZml0cy5wcm8KIS0tYmJzbmV3Lm5l dGJpZy5jb20KYmJzLm5ldGJpZy5jb20KLm5ldGJpcmRzLmNvbQpuZXRjb2xvbnku Y29tCmJvbGluLm5ldGZpcm1zLmNvbQp8fG5ldG1lLmNjCm5ldHNuZWFrLmNvbQou bmV0d29yazU0LmNvbQpuZXR3b3JrZWRibG9ncy5jb20KLm5ldHdvcmt0dW5uZWwu bmV0Cm5ldmVyZm9yZ2V0ODk2NC5vcmcKbmV3LTNsdW5jaC5uZXQKLm5ldy1ha2li YS5jb20KLm5ldzk2LmNhCi5uZXdjZW50dXJ5bWMuY29tCnxodHRwOi8vbmV3Y2Vu dHVyeW1jLmNvbQpuZXdjZW50dXJ5bmV3cy5jb20KfHxuZXdjaGVuLmNvbQoubmV3 Y2hlbi5jb20KLm5ld2dyb3VuZHMuY29tCm5ld2lwbm93LmNvbQoubmV3bGFuZG1h Z2F6aW5lLmNvbS5hdQoubmV3bmV3cy5jYQpuZXdzMTAwLmNvbS50dwpuZXdzY2hp bmFjb21tZW50Lm9yZwoubmV3c2NuLm9yZwp8fG5ld3Njbi5vcmcKbmV3c3BlYWsu Y2Mvc3RvcnkKLm5ld3NhbmNhaS5jb20KfHxuZXdzYW5jYWkuY29tCi5uZXdzZGV0 b3guY2EKLm5ld3NkaC5jb20KfHxuZXdzdGFtYWdvLmNvbQp8fG5ld3N0YXBhLm9y ZwpuZXdzdGFybmV0LmNvbQoubmV3dGFpd2FuLmNvbS50dwpuZXd0YWxrLnR3Cnx8 bmV3dGFsay50dwpuZXd5b3JrdGltZXMuY29tCnx8bmV4b24uY29tCi5uZXh0MTEu Y28uanAKLm5leHRtYWcuY29tLnR3CgohLS1oayoubmV4dG1lZGlhLmNvbQohLS10 dyoubmV4dG1lZGlhLmNvbQohLS1zdGF0aWMqLm5leHRtZWRpYS5jb20KLm5leHRt ZWRpYS5jb20KCnx8bmV4dG9uLW5ldC5qcApuZXh0dHYuY29tLnR3Ci5uZmp0eWQu Y29tCnx8Y28ubmcubWlsCnx8bmdhLm1pbApuZ2Vuc2lzLmNvbQoubmhlbnRhaS5u ZXQKfGh0dHA6Ly9uaGVudGFpLm5ldAoubmhrLW9uZGVtYW5kLmpwCi5uaWNvdmlk ZW8uanAvd2F0Y2gKIS0tfHxuaWNvdmlkZW8uanAKfHxuaWdob3N0Lm9yZwphdi5u aWdodGxpZmUxNDEuY29tCm5pbmVjb21tZW50YXJpZXMuY29tCi5uaW5qYWNsb2Fr LmNvbQp8fG5pbmphcHJveHkubmluamEKbmludGVuZGl1bS5jb20KdGFpd2FueWVz Lm5pbmcuY29tCnVzbWd0Y2cubmluZy5jb20vZm9ydW0KfHxuaXVzbmV3cy5jb20K fHxuamFjdGIub3JnCm5qdWljZS5jb20KfHxuanVpY2UuY29tCm5sZnJlZXZwbi5j b20KCiEtLW5vLWlwLmNvbSNOT0lQCi5kZG5zLm5ldC8KLmdvb2RkbnMuaW5mbwp8 fGdvdGRucy5jaAoubWFpbGRucy54eXoKLm5vLWlwLm9yZwoub3BlbmRuLnh5egou c2VydmVodHRwLmNvbQpzeXRlcy5uZXQKLndob2Rucy54eXoKLnphcHRvLm9yZwp8 aHR0cDovL2R5bnVwZGF0ZS5uby1pcC5jb20vCgp8fG5vYmVsLnNlCiEtLS5ub2Jl bHByaXplLm9yZwohLS18aHR0cDovL25vYmVscHJpemUub3JnCm5vYmVscHJpemUu b3JnL25vYmVsX3ByaXplcy9wZWFjZS9sYXVyZWF0ZXMvMTk4OQpub2JlbHByaXpl Lm9yZy9ub2JlbF9wcml6ZXMvcGVhY2UvbGF1cmVhdGVzLzIwMTAKbm9ib2R5Y2Fu c3RvcC51cwp8fG5vYm9keWNhbnN0b3AudXMKfHxub2tvZ2lyaS5vcmcKfHxub2tv bGEuY29tCm5vb2RsZXZwbi5jb20KLm5vcmJ1bGluZ2thLm9yZwpub3JkdnBuLmNv bQp8fG5vcmR2cG4uY29tCnx8bm92ZWxhc2lhLmNvbQoubmV3cy5ub3cuY29tCnxo dHRwOi8vbmV3cy5ub3cuY29tCiEtLXxodHRwOi8vbmV3cy5ub3cuY29tL2hvbWUq Cm5ld3Mubm93LmNvbSUyRmhvbWUKfHxub3duZXdzLmNvbQoubm93dG9ycmVudHMu Y29tCi5ub3lwZi5jb20KfHxub3lwZi5jb20KfHxucGEuZ28uanAKLm5wbnQubWUK fGh0dHA6Ly9ucG50Lm1lCi5ucHMuZ292Ci5ucmFkaW8ubWUKfGh0dHA6Ly9ucmFk aW8ubWUKLm5yay5ubwp8fG5yay5ubwoubnRkLnR2Cnx8bnRkLnR2CiEhLS1Pcmln Om50ZHR2LmNvbQoubnRkdHYuY29tCnx8bnRkdHYuY29tCi5udGR0di5jby5rcgpu dGR0di5jYQpudGR0di5vcmcKbnRkdHYucnUKbnRkdHZsYS5jb20KLm50cmZ1bi5j b20KfHxjYnMubnR1LmVkdS50dwp8fG1lZGlhLm51Lm5sCi5udWJpbGVzLm5ldAp8 fG51ZXhwby5jb20KLm51a2lzdHJlYW0uY29tCnx8bnVyZ28tc29mdHdhcmUuY29t Cnx8bnV0YWt1Lm5ldAoubnV2aWQuY29tCnx8bnZkc3QuY29tCm51emNvbS5jb20K Lm52cXVhbi5vcmcKLm52dG9uZ3poaXNoZW5nLm9yZwp8aHR0cDovL252dG9uZ3po aXNoZW5nLm9yZwoubnd0Y2Eub3JnCnxodHRwOi8vbnlhYS5ldQohLS18fG55YWEu c2kKLm55ZHVzLmNhCm55bG9uLWFuZ2VsLmNvbQpueWxvbnN0b2NraW5nc29ubGlu ZS5jb20KIS0tbnlzaW5ndGFvLmNvbQoubnpjaGluZXNlLmNvbQp8fG56Y2hpbmVz ZS5uZXQubnoKCiEtLS0tLS0tLS0tLS0tLS0tLS0tLU9PLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQpvYnNlcnZlY2hpbmEubmV0Ci5vYnV0dS5jb20Kb2Nhc3Byby5j b20Kb2NjdXB5dGlhbmFubWVuLmNvbQpvY2xwLmhrCi5vY3JlYW1waWVzLmNvbQp8 fG9jdG9iZXItcmV2aWV3Lm9yZwpvZmZiZWF0Y2hpbmEuY29tCm9mZmljZW9mdGli ZXQuY29tCnxodHRwOi8vb2ZpbGUub3JnCnx8b2dhb2dhLm9yZwp0d3RyMnNyYy5v Z2FvZ2Eub3JnCi5vZ2F0ZS5vcmcKfHxvZ2F0ZS5vcmcKd3d3Mi5vaGNoci5vcmcv ZW5nbGlzaC9ib2RpZXMvY2F0L2RvY3Mvbmdvcy9JSV9DaGluYV80MS5wZGYKLm9p a29zLmNvbS50dy92NAoub2lrdHYuY29tCm9pem9ibG9nLmNvbQoub2sucnUKfHxv ay5ydQoub2theWZyZWVkb20uY29tCnx8b2theWZyZWVkb20uY29tCm9ray50dwp8 aHR0cDovL2ZpbG15Lm9sYWJsb2dhLnBsL3BsYXllcgpvbGQtY2F0Lm5ldAp8fG9s dW1wby5jb20KLm9seW1waWN3YXRjaC5vcmcKb21naWxpLmNvbQp8fG9tbml0YWxr LmNvbQp8fG9tbml0YWxrLm9yZwpjbGluZy5vbXkuc2cKZm9ydW0ub215LnNnCm5l d3Mub215LnNnCnNob3diaXoub215LnNnCnx8b24uY2MKfHxvbmVkcml2ZS5saXZl LmNvbQp8fG9uaW9uLmNpdHkKLm9ubGluZWNoYS5jb20KfHxvbmxpbmV5b3V0dWJl LmNvbQoub25seXR3ZWV0cy5jb20KfGh0dHA6Ly9vbmx5dHdlZXRzLmNvbQpvbm1v b24ubmV0Cm9ubW9vbi5jb20KLm9udGhlaHVudC5jb20KfGh0dHA6Ly9vbnRoZWh1 bnQuY29tCi5vb3BzZm9ydW0uY29tCm9wZW4uY29tLmhrCm9wZW5hbGx3ZWIuY29t Cm9wZW5kZW1vY3JhY3kubmV0Cnx8b3BlbmRlbW9jcmFjeS5uZXQKLm9wZW5lcnZw bi5pbgpvcGVuaWQubmV0Cnx8b3BlbmlkLm5ldAoub3BlbmxlYWtzLm9yZwp8fG9w ZW5sZWFrcy5vcmcKb3BlbnZwbi5uZXQKfHxvcGVudnBuLm5ldAp8fG9wZW53ZWJz dGVyLmNvbQoub3BlbndydC5vcmcuY24KQEB8fG9wZW53cnQub3JnLmNuCm15Lm9w ZXJhLmNvbS9kYWhlbWEKfHxkZW1vLm9wZXJhLW1pbmkubmV0Ci5vcHVzLWdhbWlu Zy5jb20KfGh0dHA6Ly9vcHVzLWdhbWluZy5jb20Kd3d3Lm9yY2hpZGJicy5jb20K Lm9yZ2FuY2FyZS5vcmcudHcKb3JnYW5oYXJ2ZXN0aW52ZXN0aWdhdGlvbi5uZXQK Lm9yZ2FzbS5jb20KLm9yZ2ZyZWUuY29tCnx8b3JpZW50LWRvbGwuY29tCm9yaWVu dGFsZGFpbHkuY29tLm15Cnx8b3JpZW50YWxkYWlseS5jb20ubXkKIS0tb3JpZW50 YWxkYWlseS5vbi5jYwp8fG9ybi5qcAp0Lm9yemRyZWFtLmNvbQp8fHQub3J6ZHJl YW0uY29tCnR1aS5vcnpkcmVhbS5jb20KfHxvcnppc3RpYy5vcmcKfHxvc2Zvb3Jh LmNvbQoub3RuZC5vcmcKfHxvdG5kLm9yZwp8fG90dG8uZGUKfHxvdXJkZWFyYW15 LmNvbQpvdXJzb2dvLmNvbQoub3Vyc3RlcHMuY29tLmF1Cnx8b3Vyc3RlcHMuY29t LmF1Ci5vdXJzd2ViLm5ldAp8fG91cnR2LmhrCnhpbnFpbWVuZy5vdmVyLWJsb2cu Y29tCnx8b3ZlcnBsYXkubmV0CnNoYXJlLm92aS5jb20vbWVkaWEKfGh0dHA6Ly9v d2wubGkKfGh0dHA6Ly9odC5seQp8aHR0cDovL2h0bC5saQp8aHR0cDovL21hc2gu dG8Kd3d3Lm93aW5kLmNvbQp8aHR0cDovL3d3dy5veGlkLml0Cm95YXguY29tCm95 Z2hhbi5jb20vd3BzCi5vemNoaW5lc2UuY29tL2Jicwp8fG93Lmx5CmJicy5vemNo aW5lc2UuY29tCi5venZvaWNlLm9yZwp8fG96dm9pY2Uub3JnCi5venh3LmNvbQou b3p5b3lvLmNvbQoKIS0tLS0tLS0tLS0tLS0tLS0tLS0tUFAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCnx8cGFjaG9zdGluZy5jb20KLnBhY2lmaWNwb2tlci5jb20K LnBhY2tldGl4Lm5ldAp8fHBhY29wYWNvbWFtYS5jb20KLnBhZG1hbmV0LmNvbQpw YWdlMnJzcy5jb20KfHxwYWdvZGFib3guY29tCi5wYWxhY2Vtb29uLmNvbQpmb3J1 bS5wYWxtaXNsaWZlLmNvbQp8fGVyaXZlcnNvZnQuY29tCi5wYWxkZW5neWFsLmNv bQpwYWxqb3JwdWJsaWNhdGlvbnMuY29tCi5wYWx0YWxrLmNvbQohLS18fHBhbmdj aS5uZXQKfHxwYW5kYXBvdy5jbwoucGFuZGFwb3cubmV0Ci5wYW5kYXZwbi1qcC5j b20KLnBhbmx1YW4ubmV0Cnx8cGFubHVhbi5uZXQKfHxwYW8tcGFvLm5ldApwYXBl ci5saQpwYXBlcmIudXMKLnBhcmFkaXNlaGlsbC5jYwoucGFyYWRpc2Vwb2tlci5j b20KLnBhcnR5Y2FzaW5vLmNvbQoucGFydHlwb2tlci5jb20KLnBhc3Npb24uY29t Cnx8cGFzc2lvbi5jb20KLnBhc3Npb250aW1lcy5oawpwYXN0ZWJpbi5jb20KLnBh c3RpZS5vcmcKfHxwYXN0aWUub3JnCnx8YmxvZy5wYXRodG9zaGFyZXBvaW50LmNv bQpwYnMub3JnL3dnYmgvcGFnZXMvZnJvbnRsaW5lL2dhdGUKcGJzLm9yZy93Z2Jo L3BhZ2VzL2Zyb250bGluZS90YW5rbWFuCnBicy5vcmcvd2diaC9wYWdlcy9mcm9u dGxpbmUvdGliZXQKdmlkZW8ucGJzLm9yZwoKIS0tUGJ3aWtpCnBid2lraS5jb20K fHxwYndvcmtzLmNvbQp8fGRldmVsb3BlcnMuYm94Lm5ldAp8fHdpa2kub2F1dGgu bmV0Cnx8d2lraS5waG9uZWdhcC5jb20KfHx3aWtpLmpxdWVyeXVpLmNvbQoKfHxw Ynhlcy5jb20KfHxwYnhlcy5vcmcKcGNkdmQuY29tLnR3Ci5wY2hvbWUuY29tLnR3 CnxodHRwOi8vcGNpai5vcmcKLnBjc3RvcmUuY29tLnR3Cnx8cGN0Lm9yZy50dwpw ZGV0YWlscy5jb20KfHxwZHByb3h5LmNvbQp8fHBlYWNlLmNhCnBlYWNlZmlyZS5v cmcKcGVhY2VoYWxsLmNvbQp8fHBlYWNlaGFsbC5jb20KfGh0dHA6Ly9wZWFybGhl ci5vcmcKLnBlZWFzaWFuLmNvbQoucGVraW5nZHVjay5vcmcKfHxwZWtpbmdkdWNr Lm9yZwoucGVtdWxpaGFuLm9yLmlkCnxodHRwOi8vcGVtdWxpaGFuLm9yLmlkCnx8 cGVuLmlvCnBlbmNoaW5lc2UuY29tCnx8cGVuY2hpbmVzZS5uZXQKLnBlbmNoaW5l c2UubmV0CnBlbmd5dWxvbmcuY29tCnBlbmlzYm90LmNvbQp8fGJsb2cucGVudGFs b2dpYy5uZXQKLnBlbnRob3VzZS5jb20KLnBlbnRveS5oay8lRTQlQjglQUQlRTUl OUMlOEIKLnBlbnRveS5oay8lRTYlOTklODIlRTQlQkElOEIKLnBlb3BsZWJvb2tj YWZlLmNvbQoucGVvcGxlbmV3cy50dwp8fHBlb3BsZW5ld3MudHcKLnBlb3BvLm9y Zwp8fHBlb3BvLm9yZwoucGVyY3kuaW4KLnBlcmZlY3RnaXJscy5uZXQKcGVyZmVj dHZwbi5uZXQKLnBlcnNlY3V0aW9uYmxvZy5jb20KLnBlcnNpYW5raXR0eS5jb20K cGZkLm9yZy5oawpwaGFwbHVhbi5vcmcKcGhheXVsLmNvbQpwaGlsYm9yZ2VzLmNv bQpwaGlsbHkuY29tCnx8cGhuY2RuLmNvbQp8fHBob3RvZGhhcm1hLm5ldAp8fHBo b3RvZm9jdXMuY29tCnx8cGh1cXVvY3NlcnZpY2VzLmNvbQp8fHBpY2Fjb21pY2Nu LmNvbQoucGljaWRhZS5uZXQKfHxpbWcqLnBpY3R1cmVkaXAuY29tCnBpY3R1cmVz b2NpYWwuY29tCnx8cGluLWNvbmcuY29tCi5waW42LmNvbQp8fHBpbjYuY29tCi5w aW5nLmZtCnx8cGluZy5mbQp8fHBpbmltZy5jb20KLnBpbmtyb2QuY29tCnx8cGlu b3ktbi5jb20KfHxwaW50ZXJlc3QuYXQKfHxwaW50ZXJlc3QuY28ua3IKfHxwaW50 ZXJlc3QuY28udWsKLnBpbnRlcmVzdC5jb20KfHxwaW50ZXJlc3QuY29tCnx8cGlu dGVyZXN0LmRlCnx8cGludGVyZXN0LmRrCnx8cGludGVyZXN0LmZyCnx8cGludGVy ZXN0LmpwCnx8cGludGVyZXN0Lm5sCnx8cGludGVyZXN0LnNlCi5waXBpaS50dgou cGlwb3NheS5jb20KcGlyYWF0dGlsYWh0aS5vcmcKLnBpcmluZy5jb20KfHxwaXhl bHFpLmNvbQp8fGNzcy5waXhuZXQuaW4KfHxwaXhuZXQubmV0Ci5waXhuZXQubmV0 Ci5way5jb20KfHxwbGFjZW1peC5jb20KIS0tLnBsYW5ldHN1enkub3JnCnxodHRw Oi8vcGljdHVyZXMucGxheWJveS5jb20KfHxwbGF5Ym95LmNvbQoucGxheWJveXBs dXMuY29tCnx8cGxheWJveXBsdXMuY29tCnx8cGxheWVyLmZtCi5wbGF5bm8xLmNv bQp8fHBsYXlubzEuY29tCnx8cGxheXBjZXNvci5jb20KcGxheXMuY29tLnR3Cnx8 bS5wbGl4aS5jb20KcGxtLm9yZy5oawpwbHVuZGVyLmNvbQoucGx1cmsuY29tCnx8 cGx1cmsuY29tCi5wbHVzMjguY29tCi5wbHVzYmIuY29tCi5wbWF0ZWh1bnRlci5j b20KfGh0dHA6Ly9wbWF0ZWh1bnRlci5jb20KLnBtYXRlcy5jb20KfHxwbzJiLmNv bQpwb2JpZXJhbXkudG9wCiEtLXx8cG9jb28ub3JnCnx8cG9kaWN0aW9uYXJ5LmNv bQoucG9rZXJzdGFycy5jb20KfHxwb2tlcnN0YXJzLmNvbQoucG9rZXJzdGFycy5u ZXQKemgucG9rZXJzdHJhdGVneS5jb20KcG9saXRpY2FsY2hpbmEub3JnCnBvbGl0 aWNhbGNvbnN1bHRhdGlvbi5vcmcKLnBvbGl0aXNjYWxlcy5uZXQKfHxwb2xvbmll eC5jb20KLnBvbHltZXJoay5jb20KfGh0dHA6Ly9wb2x5bWVyaGsuY29tCi5wb3Bv LnR3CiEtLXx8cG9wdWxhcnBhZ2VzLm5ldAp8fHBvcHZvdGUuaGsKcG9weWFyZC5j b20KfHxwb3B5YXJkLm9yZwoucG9ybi5jb20KLnBvcm4yLmNvbQoucG9ybjUuY29t Ci5wb3JuYmFzZS5vcmcKLnBvcm5lcmJyb3MuY29tCnx8cG9ybmhkLmNvbQoucG9y bmhvc3QuY29tCi5wb3JuaHViLmNvbQp8fHBvcm5odWIuY29tCi5wb3JuaHViZGV1 dHNjaC5uZXQKfGh0dHA6Ly9wb3JuaHViZGV1dHNjaC5uZXQKfHxwb3JubW0ubmV0 Ci5wb3Jub3hvLmNvbQoucG9ybnJhcGlkc2hhcmUuY29tCnx8cG9ybnJhcGlkc2hh cmUuY29tCi5wb3Juc2hhcmluZy5jb20KfGh0dHA6Ly9wb3Juc2hhcmluZy5jb20K LnBvcm5zb2NrZXQuY29tCi5wb3Juc3RhcmNsdWIuY29tCnx8cG9ybnN0YXJjbHVi LmNvbQoucG9ybnR1YmUuY29tCi5wb3JudHViZW5ld3MuY29tCi5wb3JudHZibG9n LmNvbQp8fHBvcm50dmJsb2cuY29tCi5wb3JudmlzaXQuY29tCi5wb3J0YWJsZXZw bi5ubAp8fHBvc2tvdGFuZXdzLmNvbQoucG9zdDAxLmNvbQoucG9zdDc2LmNvbQp8 fHBvc3Q3Ni5jb20KLnBvc3Q4NTIuY29tCnBvc3RhZHVsdC5jb20KLnBvc3RpbWcu b3JnCnx8cG90dnBuLmNvbQp8fHBvd2VyY3guY29tCi5wb3dlcnBob3RvLm9yZwp8 fHd3dy5wb3dlcnBvaW50bmluamEuY29tCnx8cHJlc2lkZW50bGVlLnR3Cnx8Y2Ru LnByaW50ZnJpZW5kbHkuY29tCi5wcml0dW5sLmNvbQpwcm92cG5hY2NvdW50cy5j b20KfHxwcm92cG5hY2NvdW50cy5jb20KLnByb3hmcmVlLmNvbQp8fHByb3hmcmVl LmNvbQpwcm94eWFub25pbW8uZXMKLnByb3h5bmV0d29yay5vcmcudWsKfHxwcm94 eW5ldHdvcmsub3JnLnVrCnx8cHRzLm9yZy50dwoucHR0dmFuLm9yZwpwdWJ1LmNv bS50dwpwdWZmaW5icm93c2VyLmNvbQpwdXJlaW5zaWdodC5vcmcKLnB1c2hjaGlu YXdhbGwuY29tCi5wdXR0eS5vcmcKfHxwdXR0eS5vcmcKCiEtLS0tLS0tLS0tLS0t UG9zdGVyb3VzLS0tLS0KfHxjYWxlYmVsc3Rvbi5jb20KfHxibG9nLmZpenppay5j b20KfHxuZi5pZC5hdQp8fHNvZ3JhZHkubWUKfHx2YXRuLm9yZwp8fHZlbnR1cmVz d2VsbC5jb20KfHx3aGVyZWlzd2VybmVyLmNvbQoKLnBvd2VyLmNvbQp8fHBvd2Vy LmNvbQpwb3dlcmFwcGxlLmNvbQp8fHBvd2VyYXBwbGUuY29tCnx8YWJjLnBwLnJ1 CmhlaXgucHAucnUKfHxwcmF5Zm9yY2hpbmEubmV0Cnx8cHJlbWVmb3J3aW5kb3dz Ny5jb20KfHxwcmVzZW50YXRpb256ZW4uY29tCnx8cHJlc3RpZ2UtYXYuY29tCnBy aXNvbmVyLXN0YXRlLXNlY3JldC1qb3VybmFsLXByZW1pZXIKLnByaXNvbmVyYWxl cnQuY29tCnx8cHJpdHVubC5jb20KfHxwcml2YWN5Ym94LmRlCi5wcml2YXRlLmNv bS9ob21lCnx8cHJpdmF0ZWludGVybmV0YWNjZXNzLmNvbQpwcml2YXRlcGFzdGUu Y29tCnx8cHJpdmF0ZXBhc3RlLmNvbQpwcml2YXRldHVubmVsLmNvbQp8fHByaXZh dGV0dW5uZWwuY29tCnx8cHJpdmF0ZXZwbi5jb20KfHxwcm9jb3B5dGlwcy5jb20K cHJvdmlkZW9jb2FsaXRpb24uY29tCnx8cHJvc2liZW4uZGUKcHJveGlmaWVyLmNv bQphcGkucHJveGxldC5jb20KfHxwcm94b21pdHJvbi5pbmZvCi5wcm94cG4uY29t Cnx8cHJveHBuLmNvbQoucHJveHlsaXN0Lm9yZy51awp8fHByb3h5bGlzdC5vcmcu dWsKLnByb3h5cHkubmV0Cnx8cHJveHlweS5uZXQKcHJveHlyb2FkLmNvbQoucHJv eHl0dW5uZWwubmV0CiEtLTQwMyBtYXliZQp8fHByb3llY3RvY2x1YmVzLmNvbQpw cm96ei5uZXQKcHNibG9nLm5hbWUKfHxwc2Jsb2cubmFtZQp8fHBzaXBob24uY2EK LnBzaXBob24zLmNvbQp8fHBzaXBob24zLmNvbQoucHNpcGhvbnRvZGF5LmNvbQou cHR0LmNjCnx8cHR0LmNjCi5wdWZmc3RvcmUuY29tCi5wdXVrby5jb20KfHxwdWxs Zm9saW8uY29tCi5wdW55dS5jb20vcHVueQp8fHB1cmVjb25jZXB0cy5uZXQKfHxw dXJlaW5zaWdodC5vcmcKfHxwdXJlcGRmLmNvbQp8fHB1cmV2cG4uY29tCi5wdXJw bGVsb3R1cy5vcmcKLnB1cnN1ZXN0YXIuY29tCnx8cHVyc3Vlc3Rhci5jb20KLnB1 c3N5c3BhY2UuY29tCi5wdXRpaG9tZS5vcmcKLnB1dGxvY2tlci5jb20vZmlsZQpw d25lZC5jb20KcHl0aG9uLmNvbQoucHl0aG9uLmNvbS50dwp8aHR0cDovL3B5dGhv bi5jb20udHcKcHl0aG9uaGFja2Vycy5jb20vcApzcy5weXRob25pYy5saWZlLwoK IS0tLS0tLS0tLS0tLS0tLS0tLS0tUVEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ci5xYW5vdGUuY29tCnx8cWFub3RlLmNvbQoucWdpcmwuY29tLnR3Cnx8cWlhbmRh by50b2RheQoucWktZ29uZy5tZQp8fHFpLWdvbmcubWUKIS0tIzkyMQp8fHFpYW5n eW91Lm9yZwoucWlkaWFuLmNhCi5xaWVua3Vlbi5vcmcKfHxxaWVua3Vlbi5vcmcK fHxxaXdlbi5sdQpxaXhpYW5nbHUuY24KYmJzLnFtemRkLmNvbQoucWtzaGFyZS5j b20KcW9vcy5jb20KfHxxb29zLmNvbQpibG9nLnFvb3phLmhrL2RhZmVuZ3FpeGkK fHxlZmtzb2Z0LmNvbQp8fHFzdGF0dXMuY29tCnx8cXR3ZWV0ZXIuY29tCnx8cXRy YWMuZXUKLnF1YW5uZW5nc2hlbi5vcmcKfGh0dHA6Ly9xdWFubmVuZ3NoZW4ub3Jn CnF1YW50dW1ib290ZXIubmV0Cnx8cXVpdGNjcC5uZXQKLnF1aXRjY3AubmV0Cnx8 cXVpdGNjcC5vcmcKLnF1aXRjY3Aub3JnCi5xdW9yYS5jb20vQ2hpbmFzLUZ1dHVy ZQoucXVyYW4uY29tCnxodHRwOi8vcXVyYW4uY29tCi5xdXJhbmV4cGxvcmVyLmNv bQpxdXNpOC5uZXQKLnF2b2R6eS5vcmcKbmVtZXNpczIucXgubmV0L3BhZ2VzL015 RW5UdW5uZWwKcXhiYnMub3JnCgohLS0tLS0tLS0tLS0tLS0tLS0tLS1SUi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KLnJhLmdnCnxodHRwOi8vcmEuZ2cvCi5yYWRp Y2FscGFydHkub3JnCnx8cmFlbC5vcmcKcmFkaWNhbHBhcnR5Lm9yZwpyYWRpb2F1 c3RyYWxpYS5uZXQuYXUKLnJhZGlvaGlsaWdodC5uZXQKfHxyYWRpb2hpbGlnaHQu bmV0Cm9wbWwucmFkaW90aW1lLmNvbQp8fHJhZGlvdmF0aWNhbmEub3JnCnx8cmFk aW92bmNyLmNvbQp8fHJhZ2dlZGJhbm5lci5jb20KfHxyYWlkY2FsbC5jb20udHcK LnJhaWR0YWxrLmNvbS50dwoucmFpbmJvd3BsYW4ub3JnL2Jicwp8aHR0cHM6Ly9y YWluZHJvcC5pby8KLnJhaXpvamkub3IuanAKfGh0dHA6Ly9yYWl6b2ppLm9yLmpw CnJhbmd3YW5nLmJpegpyYW5nemVuLmNvbQpyYW5nemVuLm5ldApyYW5nemVuLm9y Zwp8aHR0cDovL2Jsb2cucmFueGlhbmcuY29tLwpyYW55dW5mZWkuY29tCnx8cmFu eXVuZmVpLmNvbQoucmFwYnVsbC5uZXQKfGh0dHA6Ly9yYXBpZGdhdG9yLm5ldC8K fHxyYXBpZG1vdmllei5jb20KcmFwaWR2cG4uY29tCnx8cmFwaWR2cG4uY29tCi5y YXJlbW92aWUuY2MKfGh0dHA6Ly9yYXJlbW92aWUuY2MKLnJhcmVtb3ZpZS5uZXQK fGh0dHA6Ly9yYXJlbW92aWUubmV0Cnx8cmF3Z2l0LmNvbQp8fHJhd2dpdGh1Yi5j b20KIS0tLnJheWZtZS5jb20vYmJzCnx8cmF6eWJvYXJkLmNvbQpyY2luZXQuY2EK LnJlYWQxMDAuY29tCi5yZWFkaW5ndGltZXMuY29tLnR3Cnx8cmVhZGluZ3RpbWVz LmNvbS50dwp8fHJlYWRtb28uY29tCi5yZWFkeWRvd24uY29tCnxodHRwOi8vcmVh ZHlkb3duLmNvbQoucmVhbGNvdXJhZ2Uub3JnCi5yZWFsaXR5a2luZ3MuY29tCnx8 cmVhbGl0eWtpbmdzLmNvbQoucmVhbHJhcHRhbGsuY29tCi5yZWFsc2V4cGFzcy5j b20KLnJlY29yZGhpc3Rvcnkub3JnCi5yZWNvdmVyeS5vcmcudHcKfGh0dHA6Ly9v bmxpbmUucmVjb3Zlcnl2ZXJzaW9uLm9yZwp8fHJlY292ZXJ5dmVyc2lvbi5jb20u dHcKfHxyZWQtbGFuZy5vcmcKcmVkYmFsbG9vbnNvbGlkYXJpdHkub3JnCi5yZWRj aGluYWNuLm5ldAp8aHR0cDovL3JlZGNoaW5hY24ubmV0CnJlZGNoaW5hY24ub3Jn CnJlZHR1YmUuY29tCnJlZmVyZXIudXMKfHxyZWZlcmVyLnVzCnx8cmVmbGVjdGl2 ZWNvZGUuY29tCnJlbGF4YmJzLmNvbQoucmVsYXkuY29tLnR3Ci5yZWxlYXNlaW50 ZXJuYXRpb25hbC5vcmcKcmVsaWdpb3VzdG9sZXJhbmNlLm9yZwpyZW5taW5iYW8u Y29tCnx8cmVubWluYmFvLmNvbQoucmVueXVyZW5xdWFuLm9yZwp8fHJlbnl1cmVu cXVhbi5vcmcKfGh0dHA6Ly9jZXJ0aWZpY2F0ZS5yZXZvY2F0aW9uY2hlY2suY29t CnN1YmFjbWUucmVyb3V0ZWQub3JnCnx8cmVzaWxpby5jb20KLnJldXRlcnMuY29t Cnx8cmV1dGVycy5jb20KfHxyZXV0ZXJzbWVkaWEubmV0Ci5yZXZsZWZ0LmNvbQpy ZXR3ZWV0aXN0LmNvbQp8fHJldHdlZXRyYW5rLmNvbQohLS1jb25uZWN0ZWRjaGlu YS5yZXV0ZXJzLmNvbQohLS18aHR0cDovL3d3dy5yZXV0ZXJzLmNvbS9uZXdzL3Zp ZGVvCnJldnZlci5jb20KLnJmYS5vcmcKfHxyZmEub3JnCi5yZmFjaGluYS5jb20K LnJmYW1vYmlsZS5vcmcKcmZhd2ViLm9yZwp8fHJmZXJsLm9yZwoucmZpLmZyCnx8 cmZpLmZyCnxodHRwOi8vcmZpLm15LwohLS0ucmhjbG91ZC5jb20KIS0tRWRnZWNh c3QKfGh0dHA6Ly92ZHMucmlnaHRzdGVyLmNvbS8KLnJpZ3BhLm9yZwoucmlsZXln dWlkZS5jb20KcmlrdS5tZS8KLnJpdG91a2kuanAKfHxyaXR0ZXIudmcKLnJsd2x3 LmNvbQp8fHJsd2x3LmNvbQoucm1qZHcuY29tCi5ybWpkdzEzMi5pbmZvCi5yb2Fk c2hvdy5oawoucm9ib2ZvcmV4LmNvbQp8fHJvYnVzdG5lc3Npc2tleS5jb20KIS0t fHxyb2MtdGFpd2FuLm9yZwp8fHJvY2tldC1pbmMubmV0CnxodHRwOi8vd3d3Mi5y b2NrZXRiYnMuY29tLzExL2Jicy5jZ2k/aWQ9NW11cwp8aHR0cDovL3d3dzIucm9j a2V0YmJzLmNvbS8xMS9iYnMuY2dpP2lkPWZyZWVtZ2wKIS0tfHxyb2NtcC5vcmcK fHxyb2pvLmNvbQp8fHJvbmpvbmVzd3JpdGVyLmNvbQp8fHJvbGlhLm5ldAoucm9v ZG8uY29tCi5yb3NlY2hpbmEubmV0Ci5yb3R0ZW4uY29tCi5yc2Yub3JnCnx8cnNm Lm9yZwoucnNmLWNoaW5lc2Uub3JnCnx8cnNmLWNoaW5lc2Uub3JnCi5yc2dhbWVu Lm9yZwp8fHBob3NwaGF0aW9uMTMucnNzaW5nLmNvbQoucnNzbWVtZS5jb20KfHxy c3NtZW1lLmNvbQp8fHJ0YWxhYmVsLm9yZwoucnRoay5oawp8aHR0cDovL3J0aGsu aGsKLnJ0aGsub3JnLmhrCnxodHRwOi8vcnRoay5vcmcuaGsKLnJ0aS5vcmcudHcK fHxydGkub3JnLnR3Ci5ydHljbWlubmVzb3RhLm9yZwoucnVhbnlpZmVuZy5jb20v YmxvZypzb21lX3dheXNfdG9fYnJlYWtfdGhlX2dyZWF0X2ZpcmV3YWxsCnJ1a29y Lm9yZwoucnVzaGJlZS5jb20KLnJ1dGVuLmNvbS50dwpydXR1YmUucnUKLnJ1eWlz ZWVrLmNvbQoucnhoai5uZXQKfGh0dHA6Ly9yeGhqLm5ldAoKIS0tLS0tLS0tLS0t LS0tLS0tLS0tU1MtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi5zMXMxczEuY29t Cnx8cy1jdXRlLmNvbQoucy1kcmFnb24ub3JnCnx8czFoZW5nLmNvbQp8aHR0cDov L3d3dy5zNG1pbmlhcmNoaXZlLmNvbQp8fHM4Zm9ydW0uY29tCmNkbjEubHAuc2Fi b29tLmNvbQp8fHNhY2tzLmNvbQpzYWNvbS5oawp8fHNhY29tLmhrCnx8c2FkcGFu ZGEudXMKLnNhZmVydnBuLmNvbQp8fHNhZmVydnBuLmNvbQouc2FpbnR5Y3VsdHVy ZS5jb20KfGh0dHA6Ly9zYWludHljdWx0dXJlLmNvbQouc2FpcS5tZQp8fHNhaXEu bWUKfHxzYWt1cmFsaXZlLmNvbQouc2FreWEub3JnCi5zYWx2YXRpb24ub3JnLmhr Cnx8c2FsdmF0aW9uLm9yZy5oawouc2FtYWlyLnJ1L3Byb3h5L3R5cGUtMDEKLnNh bWJob3RhLm9yZwouY24uc2FuZHNjb3RhaWNlbnRyYWwuY29tCnxodHRwOi8vY24u c2FuZHNjb3RhaWNlbnRyYWwuY29tCi5zYW5taW4uY29tLnR3CnNhcGlrYWNodS5u ZXQKc2F2ZW1lZGlhLmNvbQpzYXZldGliZXQuZGUKc2F2ZXRpYmV0LmZyCnNhdmV0 aWJldC5ubAouc2F2ZXRpYmV0Lm9yZwp8fHNhdmV0aWJldC5vcmcKc2F2ZXRpYmV0 LnJ1Ci5zYXZldGliZXRzdG9yZS5vcmcKfHxzYXZldGliZXRzdG9yZS5vcmcKc2F2 ZXZpZC5jb20KfHxzYXkyLmluZm8KLnNibWUubWUKfGh0dHA6Ly9zYm1lLm1lCi5z YnMuY29tLmF1L3lvdXJsYW5ndWFnZQouc2Nhc2luby5jb20KfGh0dHA6Ly93d3cu c2NpZW5jZW1hZy5vcmcvY29udGVudC8zNDQvNjE4Ny85NTMKLnNjaWVuY2VuZXRz LmNvbQouc2NtcC5jb20KLnNjbXBjaGluZXNlLmNvbQp8fHNjcmFtYmxlLmlvCi5z Y3JpYmQuY29tCnx8c2NyaWJkLmNvbQp8fHNjcmlwdHNwb3QuY29tCnNlYXB1ZmYu Y29tCmRvbWFpbmhlbHAuc2VhcmNoLmNvbQouc2VhcmNodHJ1dGguY29tCnNlY3Jl dGNoaW5hLmNvbQp8fHNlY3JldGNoaW5hLmNvbQp8fHNlY3JldGdhcmRlbi5ubwou c2VjcmV0c2xpbmUuYml6Cnx8c2VjcmV0c2xpbmUuYml6Cnx8c2VjdXJldHVubmVs LmNvbQpzZWN1cml0eWluYWJveC5vcmcKfGh0dHBzOi8vc2VjdXJpdHlpbmFib3gu b3JnCi5zZWN1cml0eWtpc3MuY29tCnx8c2VjdXJpdHlraXNzLmNvbQp8fHNlZWQ0 Lm1lCm5ld3Muc2VlaHVhLmNvbQpzZWVzbWljLmNvbQp8fHNlZXZwbi5jb20KfHxz ZWV6b25lLm5ldApzZWppZS5jb20KLnNlbmRzcGFjZS5jb20KfGh0dHA6Ly90d2Vl dHMuc2VyYXBoLm1lLwpzZXNhd2UubmV0Cnx8c2VzYXdlLm5ldAouc2VzYXdlLm9y Zwp8fHNldGh3a2xlaW4ubmV0Ci5zZXRuLmNvbQouc2V0dHYuY29tLnR3CmZvcnVt LnNldHR5LmNvbS50dwouc2V2ZW5sb2FkLmNvbQp8fHNldmVubG9hZC5jb20KLnNl eC5jb20KLnNleC0xMS5jb20KfHxzZXgzLmNvbQp8fHNleDguY2MKLnNleGFuZHN1 Ym1pc3Npb24uY29tCi5zZXhib3QuY29tCi5zZXhodS5jb20KLnNleGh1YW5nLmNv bQpzZXhpbnNleC5uZXQKfHxzZXhpbnNleC5uZXQKLnNleHR2eC5jb20KCiEtLUlQ IG9mIFNleEluU2V4CjY3LjIyMC45MS4xNQo2Ny4yMjAuOTEuMTgKNjcuMjIwLjkx LjIzCgp8aHR0cDovLyouc2YubmV0Ci5zZmlsZXlkeS5jb20KfHxzZnNoaWJhby5j b20KLnNmdGluZGlhLm9yZwouc2Z0dWsub3JnCnx8c2Z0dWsub3JnCnx8c2hhZGV5 b3V2cG4uY29tCnNoYWRvdy5tYQouc2hhZG93c2t5Lnh5egouc2hhZG93c29ja3Mu YXNpYQp8fHd3dy5zaGFkb3dzb2Nrcy5jb20KLnNoYWRvd3NvY2tzLmNvbQp8fHNo YWRvd3NvY2tzLmNvbS5oawouc2hhZG93c29ja3Mub3JnCnx8c2hhZG93c29ja3Mu b3JnCnx8c2hhZG93c29ja3Mtci5jb20KfGh0dHA6Ly9jbi5zaGFmYXFuYS5jb20K LnNoYW1iYWxhcG9zdC5jb20KLnNoYW1iaGFsYXN1bi5jb20KLnNoYW5nZmFuZy5v cmcKfHxzaGFuZ2Zhbmcub3JnCnNoYXBlc2VydmljZXMuY29tCi5zaGFyZWJlZS5j b20KfHxzaGFyZWNvb2wub3JnCiEtLXx8c2hhcmtkb2xwaGluLmNvbQpzaGFycGRh aWx5LmNvbS5oawp8fHNoYXJwZGFpbHkuY29tLmhrCi5zaGFycGRhaWx5LmhrCi5z aGFycGRhaWx5LnR3Ci5zaGF0LXRpYmV0LmNvbQpzaGVpa3llcm1hbWkuY29tCi5z aGVsbGZpcmUuZGUKfHxzaGVsbGZpcmUuZGUKLnNoZW5zaG91Lm9yZwpzaGVueXVu LmNvbQpzaGVueXVucGVyZm9ybWluZ2FydHMub3JnCnx8c2hlbnl1bnBlcmZvcm1p bmdhcnRzLm9yZwpzaGVuemhvdWZpbG0uY29tCnx8c2hlbnpob3VmaWxtLmNvbQp8 fHNoZXJhYmd5YWx0c2VuLmNvbQouc2hpYXR2Lm5ldAouc2hpY2hlbmcub3JnCnNo aW55Y2hhbi5jb20Kc2hpcGNhbW91ZmxhZ2UuY29tCi5zaGlyZXlpc2h1bmppYW4u Y29tCi5zaGl0YW90di5vcmcKfHxzaGl4aWFvLm9yZwp8fHNoaXpoYW8ub3JnCnNo aXpoYW8ub3JnCnNoa3Nwci5tb2JpL2RhYnIKfHxzaG9kYW5ocS5jb20KfHxzaG9v c2h0aW1lLmNvbQouc2hvcDIwMDAuY29tLnR3Ci5zaG9wcGluZy5jb20KLnNob3do YW90dS5jb20KLnNob3d0aW1lLmpwCi5zaHV0dGVyc3RvY2suY29tCnx8c2h1dHRl cnN0b2NrLmNvbQpjaC5zaHZvb25nLmNvbQouc2h3Y2h1cmNoLm9yZwp8fHd3dy5z aHdjaHVyY2gub3JnCi5zaHdjaHVyY2gzLmNvbQp8aHR0cDovL3Nod2NodXJjaDMu Y29tCi5zaWRkaGFydGhhc2ludGVudC5vcmcKfHxzaWRlbGluZXNuZXdzLmNvbQou c2lkZWxpbmVzc3BvcnRzZWF0ZXJ5LmNvbQouc2lqaWh1aXN1by5jbHViCi5zaWpp aHVpc3VvLmNvbQouc2lsa2Jvb2suY29tCnx8c2ltYm9sb3N0d2l0dGVyLmNvbQpz aW1wbGVjZC5vcmcKfHxzaW1wbGVjZC5vcmcKQEB8fHNpbXBsZWNkLm1lCnNpbXBs ZXByb2R1Y3Rpdml0eWJsb2cuY29tCmJicy5zaW5hLmNvbS8KYmJzLnNpbmEuY29t JTJGCmJsb2cuc2luYS5jb20udHcKZGFpbHluZXdzLnNpbmEuY29tLwpkYWlseW5l d3Muc2luYS5jb20lMkYKZm9ydW0uc2luYS5jb20uaGsKaG9tZS5zaW5hLmNvbQp8 fG1hZ2F6aW5lcy5zaW5hLmNvbS50dwpuZXdzLnNpbmEuY29tLmhrCm5ld3Muc2lu YS5jb20udHcKbmV3cy5zaW5jaGV3LmNvbS5teQouc2luY2hldy5jb20ubXkvbm9k ZS8KLnNpbmNoZXcuY29tLm15L3RheG9ub215L3Rlcm0KLnNpbmdhcG9yZXBvb2xz LmNvbS5zZwp8fHNpbmdhcG9yZXBvb2xzLmNvbS5zZwouc2luZ2ZvcnRpYmV0LmNv bQouc2luZ3Bhby5jb20uaGsKc2luZ3Rhby5jb20KfHxzaW5ndGFvLmNvbQpuZXdz LnNpbmd0YW8uY2EKLnNpbmd0YW91c2EuY29tCnx8c2luZ3Rhb3VzYS5jb20KIS0t fHxjZHAuc2luaWNhLmVkdS50dwpzaW5vLW1vbnRobHkuY29tCnx8c2lub2Nhc3Qu Y29tCnNpbm9jaXNtLmNvbQpzaW5vbW9udHJlYWwuY2EKLnNpbm9uZXQuY2EKLnNp bm9waXR0LmluZm8KLnNpbm9hbnRzLmNvbQp8fHNpbm9hbnRzLmNvbQouc2lub3F1 ZWJlYy5jb20KLnNpZXJyYWZyaWVuZHNvZnRpYmV0Lm9yZwpzaXMueHh4Cnx8c2lz MDAxLmNvbQpzaXMwMDEudXMKLnNpdGUydW5ibG9jay5jb20KfHxzaXRlOTAubmV0 Ci5zaXRlYnJvLnR3Cnx8c2l0ZWtyZWF0b3IuY29tCnx8c2l0ZWtzLnVrLnRvCnx8 c2l0ZW1hcHMub3JnCi5zanJ0Lm9yZwp8aHR0cDovL3NqcnQub3JnCnx8c2p1bS5j bgp8fHNrZXRjaGFwcHNvdXJjZXMuY29tCnx8c2tpbXR1YmUuY29tCnx8c2t5YmV0 LmNvbQp8aHR0cDovL3VzZXJzLnNreW5ldC5iZS9yZXZlcy90aWJldGhvbWUuaHRt bAouc2t5a2luZy5jb20udHcKYmJzLnNreWtpd2kuY29tCnxodHRwOi8vd3d3LnNr eXBlLmNvbS9pbnRsLwp8aHR0cDovL3d3dy5za3lwZS5jb20vemgtSGFudAp8fHNr eXZlZ2FzLmNvbQoueHNreXdhbGtlci5jb20KfHx4c2t5d2Fsa2VyLmNvbQp8fHNr eXh2cG4uY29tCm0uc2xhbmRyLm5ldAouc2xheXRpemxlLmNvbQouc2xlYXp5ZHJl YW0uY29tCnx8c2xoZW5nLmNvbQp8fHNsaWRlc2hhcmUubmV0CmZvcnVtLnNsaW1l LmNvbS50dwouc2xpbmtzZXQuY29tCnx8c2xpY2t2cG4uY29tCi5zbHV0bG9hZC5j b20KfHxzbWFydGRuc3Byb3h5LmNvbQouc21hcnRoaWRlLmNvbQp8fGFwcC5zbWFy dG1haWxjbG91ZC5jb20Kc21jaGJvb2tzLmNvbQouc21oLmNvbS5hdS93b3JsZC9k ZWF0aC1vZi1jaGluZXNlLXBsYXlib3ktbGVhdmVzLWZyZXNoLXNjcmF0Y2hlcy1p bi1wYXJ0eS1wYWludHdvcmstMjAxMjA5MDMtMjVhOHYKc21ocmljLm9yZwouc21p dGguZWR1L2RhbGFpbGFtYQouc215eHkub3JnCiEtLVRPRE8tbm8taG9tZXBhZ2UK fHxzbmFwY2hhdC5jb20KLnNuYXB0dS5jb20KfHxzbmFwdHUuY29tCnx8c25kY2Ru LmNvbQpzbmVha21lLm5ldApzbm93bGlvbnB1Yi5jb20KaG9tZS5zby1uZXQubmV0 LnR3L3lpc2FfdHNhaQp8fHNvYy5taWwKLnNvY2tzY2FwNjQuY29tCnx8c29ja3Ns aXN0Lm5ldAouc29jcmVjLm9yZwp8aHR0cDovL3NvY3JlYy5vcmcKLnNvZC5jby5q cAouc29mdGV0aGVyLm9yZwp8fHNvZnRldGhlci5vcmcKLnNvZnRldGhlci1kb3du bG9hZC5jb20KfHxzb2Z0ZXRoZXItZG93bmxvYWQuY29tCnx8Y2RuLnNvZnRsYXll ci5uZXQKfHxzb2djbHViLmNvbQpzb2hjcmFkaW8uY29tCnx8c29oY3JhZGlvLmNv bQouc29rbWlsLmNvbQp8fHNvcnRpbmctYWxnb3JpdGhtcy5jb20KLnNvc3RpYmV0 Lm9yZwouc291bW8uaW5mbwp8fHNvdXAuaW8KQEB8fHN0YXRpYy5zb3VwLmlvCi5z b2JlZXMuY29tCnx8c29iZWVzLmNvbQpzb2NpYWx3aGFsZS5jb20KLnNvZnRldGhl ci5jby5qcAp8fHNvZnR3YXJlYnljaHVjay5jb20KYmxvZy5zb2dvby5vcmcKc29o LnR3Cnx8c29oLnR3CnNvaGZyYW5jZS5vcmcKfHxzb2hmcmFuY2Uub3JnCmNoaW5l c2Uuc29pZmluZC5jb20Kc29rYW1vbmxpbmUuY29tCi5zb2xpZGFyaXRldGliZXQu b3JnCi5zb2xpZGZpbGVzLmNvbQp8fHNvbWVlLmNvbQouc29uZ2ppYW5qdW4uY29t Cnx8c29uZ2ppYW5qdW4uY29tCi5zb25pY2Jicy5jYwouc29uaWRvZGVsYWVzcGVy YW56YS5vcmcKLnNvcGNhc3QuY29tCi5zb3BjYXN0Lm9yZwouc29yYXpvbmUubmV0 Cnx8c29zLm9yZwpiYnMuc291LXRvbmcub3JnCi5zb3Vib3J5LmNvbQp8aHR0cDov L3NvdWJvcnkuY29tCi5zb3VsLXBsdXMubmV0Ci5zb3VsY2FsaWJ1cmhlbnRhaS5u ZXQKfHxzb3VsY2FsaWJ1cmhlbnRhaS5uZXQKfHxzb3VuZGNsb3VkLmNvbQohLS18 aHR0cHM6Ly9zb3VuZGNsb3VkLmNvbS9wdW5rZ29kCi5zb3VuZG9maG9wZS5rcgpz b3VuZG9maG9wZS5vcmcKfHxzb3VuZG9maG9wZS5vcmcKfHxzb3Vwb2ZtZWRpYS5j b20KIS0tLnNvdXJjZWZvcmdlLm5ldAohLXxodHRwOi8vc291cmNlZm9yZ2UubmV0 CnxodHRwOi8vc291cmNlZm9yZ2UubmV0L3AqL3NoYWRvd3NvY2tzZ3VpLwouc291 cmNld2FkaW8uY29tCnNvdXRobmV3cy5jb20udHcKc293ZXJzLm9yZy5oawp8fHds eC5zb3dpa2kubmV0Cnx8c3BhbmtiYW5nLmNvbQouc3Bhbmtpbmd0dWJlLmNvbQou c3Bhbmt3aXJlLmNvbQp8fHNwYi5jb20KfHxzcGVha2VyZGVjay5jb20KfHxzcGVl ZGlmeS5jb20Kc3BlbS5hdAp8fHNwZW5jZXJ0aXBwaW5nLmNvbQp8fHNwaWNldnBu LmNvbQouc3BpZGVyb2FrLmNvbQp8fHNwaWRlcm9hay5jb20KLnNwaWtlLmNvbQou c3BvdGZsdXguY29tCnx8c3BvdGZsdXguY29tCi5zcHJpbmc0dS5pbmZvCnxodHRw Oi8vc3ByaW5nNHUuaW5mbwp8fHNwcm91dGNvcmUuY29tCnx8c3Byb3h5LmluZm8K fHxzcm9ja2V0LnVzCi5zcy1saW5rLmNvbQp8fHNzLWxpbmsuY29tCi5zc2dsb2Jh bC5jby93cAp8aHR0cDovL3NzZ2xvYmFsLmNvCi5zc2dsb2JhbC5tZQp8fHNzaDkx LmNvbQouc3Nwcm8ubWwKfGh0dHA6Ly9zc3Byby5tbAouc3Nyc2hhcmUuY29tCnx8 c3Nyc2hhcmUuY29tCnx8c3NzLmNhbXAKIS0tfGh0dHA6Ly9jZG4uc3N0YXRpYy5u ZXQvCnx8c3N0bWx0Lm1vZQpzc3RtbHQubmV0Cnx8c3N0bWx0Lm5ldAp8aHR0cDov L3N0YWNrb3ZlcmZsb3cuY29tL3VzZXJzLzg5NTI0NQouc3RhZ2U2NC5oawp8fHN0 YWdlNjQuaGsKfHxzdGFuZHVwZm9ydGliZXQub3JnCnN0YW5mb3JkLmVkdS9ncm91 cC9mYWx1bgp1c2luZm8uc3RhdGUuZ292Cnx8c3RhdHVlb2ZkZW1vY3JhY3kub3Jn Ci5zdGFyZmlzaGZ4LmNvbQouc3RhcnAycC5jb20KfHxzdGFycDJwLmNvbQouc3Rh cnRwYWdlLmNvbQp8fHN0YXJ0cGFnZS5jb20KLnN0YXJ0dXBsaXZpbmdjaGluYS5j b20KfGh0dHA6Ly9zdGFydHVwbGl2aW5nY2hpbmEuY29tCnx8c3RhdGljLWVjb25v bWlzdC5jb20KfHxzdGMuY29tLnNhCnx8c3RlZWwtc3Rvcm0uY29tCi5zdGVnYW5v cy5jb20KfHxzdGVnYW5vcy5jb20KLnN0ZWdhbm9zLm5ldAouc3RlcGNoaW5hLmNv bQohLS18fHN0ZXBtYW5pYS5jb20Kbnkuc3RnbG9iYWxsaW5rLmNvbQpoZC5zdGhl YWRsaW5lLmNvbS9uZXdzL3JlYWx0aW1lCnN0aG9vLmNvbQp8fHN0aG9vLmNvbQou c3RpY2thbS5jb20Kc3RpY2tlcmFjdGlvbi5jb20vc2VzYXdlCi5zdGlsZXByb2pl Y3QuY29tCi5zdG8uY2MKLnN0b3BvcmdhbmhhcnZlc3Rpbmcub3JnCnx8c3RvcmFn ZW5ld3NsZXR0ZXIuY29tCi5zdG9ybS5tZwp8fHN0b3JtLm1nCi5zdG9wdGliZXRj cmlzaXMubmV0Cnx8c3RvcHRpYmV0Y3Jpc2lzLm5ldAp8fHN0b3JpZnkuY29tCi5z dG9ybW1lZGlhZ3JvdXAuY29tCnx8c3Rvd2Vib3lkLmNvbQpzdHJhbmFiZy5jb20K fHxzdHJhcGxlc3NkaWxkby5jb20KfHxzdHJlYW1pbmd0aGUubmV0CnN0cmVlbWEu Y29tL3R2L05URFRWX0NoaW5lc2UKY24uc3RyZWV0dm9pY2UuY29tL2FydGljbGUK Y24uc3RyZWV0dm9pY2UuY29tL2RpYXJ5CmNuMi5zdHJlZXR2b2ljZS5jb20KdHcu c3RyZWV0dm9pY2UuY29tCi5zdHJpa2luZ2x5LmNvbQp8fHN0cm9uZ3Zwbi5jb20K LnN0cm9uZ3dpbmRwcmVzcy5jb20KLnN0dWRlbnQudHcvZGIKfHxzdHVkZW50c2Zv cmFmcmVldGliZXQub3JnCnx8c3R1bWJsZXVwb24uY29tCnN0dXBpZHZpZGVvcy5j b20KLnN1Y2Nlc3Nmbi5jb20KcGFuYW1hcGFwZXJzLnN1ZWRkZXV0c2NoZS5kZQou c3VnYXJzeW5jLmNvbQp8fHN1Z2Fyc3luYy5jb20KLnN1Z29iYnMuY29tCnx8c3Vn dW1pcnUxOC5jb20KfHxzdWlzc2wuY29tCnN1bW1pZnkuY29tCi5zdW1yYW5kby5j b20KfHxzdW1yYW5kby5jb20Kc3VuMTkxMS5jb20KLnN1bnBvcm5vLmNvbQp8fHN1 bm1lZGlhLmNhCnx8c3VucG9ybm8uY29tCi5zdW5za3lmb3J1bS5jb20KLnN1bnRh LmNvbS50dwouc3VudnBuLm5ldAouc3VvbHVvLm9yZwouc3VwZXJmcmVldnBuLmNv bQouc3VwZXJ2cG4ubmV0Cnx8c3VwZXJ2cG4ubmV0Ci5zdXBlcnpvb2kuY29tCnxo dHRwOi8vc3VwZXJ6b29pLmNvbQouc3VwcGlnLm5ldAouc3VwcmVtZW1hc3RlcnR2 LmNvbQp8aHR0cDovL3N1cHJlbWVtYXN0ZXJ0di5jb20KLnN1cmZlYXN5LmNvbQp8 fHN1cmZlYXN5LmNvbQouc3VyZmVhc3kuY29tLmF1CnxodHRwOi8vc3VyZmVhc3ku Y29tLmF1Cnx8c3VycmVuZGVyYXQyMC5uZXQKLnN1eWFuZ2cuY29tCnxodHRwOi8v c3V5YW5nZy5jb20KLnN2c2Z4LmNvbQouc3dpc3N2cG4ubmV0Cnx8c3dpc3N2cG4u bmV0CnN3aXRjaHZwbi5uZXQKfHxzd2l0Y2h2cG4ubmV0Ci5zeWRuZXl0b2RheS5j b20KfHxzeWRuZXl0b2RheS5jb20KLnN5bGZvdW5kYXRpb24ub3JnCnx8c3luY2Jh Y2suY29tCnN5c3Jlc2NjZC5vcmcKLnN5dGVzLm5ldApibG9nLnN5eDg2LmNvbS8y MDA5LzA5L3B1ZmYKYmxvZy5zeXg4Ni5jbi8yMDA5LzA5L3B1ZmYKLnN6YmJzLm5l dAouc3pldG93YWgub3JnLmhrCgohLS0tLS0tLS0tLS0tLS0tLS0tLS1UVC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KfHx0LWcuY29tCi50MzUuY29tCi50NjZ5LmNv bQp8fHQ2NnkuY29tCi50YWEtdXNhLm9yZwp8aHR0cDovL3RhYS11c2Eub3JnCi50 YWF6ZS50dwp8fHRhYXplLnR3CnxodHRwOi8vd3d3LnRhYmxlc2dlbmVyYXRvci5j b20vCnRhYnR0ZXIuanAKLnRhY2VtLm9yZwoudGFjb25ldC5jb20udHcKfHx0YWVk cC5vcmcudHcKLnRhZm0ub3JnCi50YWd3YS5vcmcuYXUKdGFnd2Fsay5jb20KfHx0 YWd3YWxrLmNvbQp0YWhyLm9yZy50dwoudGFpcGVpc29jaWV0eS5vcmcKfHx0YWlw ZWlzb2NpZXR5Lm9yZwoudGFpd2FuYmlibGUuY29tCi50YWl3YW5jb24uY29tCi50 YWl3YW5kYWlseS5uZXQKfHx0YWl3YW5kYWlseS5uZXQKLnRhaXdhbmRjLm9yZwoh LS18fHRhaXdhbmVtYmFzc3kub3JnCi50YWl3YW5qdXN0aWNlLmNvbQp0YWl3YW5r aXNzLmNvbQp0YWl3YW5uYXRpb24uY29tCnRhaXdhbm5hdGlvbi5jb20udHcKfHx0 YWl3YW5uY2Yub3JnLnR3Cnx8dGFpd2FubmV3cy5jb20udHcKfGh0dHA6Ly93d3cu dGFpd2Fub25saW5lLmNjLwohLS18fHRhaXdhbnRvZGF5LnR3CnRhaXdhbnRwLm5l dAp8fHRhaXdhbnR0Lm9yZy50dwp0YWl3YW51cy5uZXQKdGFpd2FueWVzLmNvbQp0 YWl3YW4tc2V4LmNvbQoudGFsazg1My5jb20KLnRhbGtib3hhcHAuY29tCnx8dGFs a2JveGFwcC5jb20KLnRhbGtvbmx5Lm5ldAp8fHRhbGtvbmx5Lm5ldAp8fHRhbWlh b2RlLnRrCnx8dGFuYy5vcmcKdGFuZ2Jlbi5jb20KLnRhbmdyZW4udXMKLnRhb2lz bS5uZXQKfGh0dHA6Ly90YW9pc20ubmV0Ci50YW9sdW4uaW5mbwp8fHRhb2x1bi5p bmZvCi50YXBhdGFsay5jb20KfHx0YXBhdGFsay5jb20KYmxvZy50YXJhZ2FuYS5j b20KLnRhc2NuLmNvbS5hdQp8fHRhdXAubmV0CnxodHRwOi8vd3d3LnRhdXAub3Jn LnR3Ci50YXdlZXQuY29tCnx8dGF3ZWV0LmNvbQoudGJjb2xsZWdlLm9yZwp8fHRi Y29sbGVnZS5vcmcKLnRiaS5vcmcuaGsKLnRiaWNuLm9yZwoudGJqeXQub3JnCnx8 dGJwaWMuaW5mbwoudGJyYy5vcmcKdGJzLXJhaW5ib3cub3JnCi50YnNlYy5vcmcK fHx0YnNlYy5vcmcKdGJza2tpbmFiYWx1LnBhZ2UudGwKLnRic21hbGF5c2lhLm9y ZwoudGJzbi5vcmcKfHx0YnNuLm9yZwoudGJzc2VhdHRsZS5vcmcKLnRic3NxaC5v cmcKfGh0dHA6Ly90YnNzcWgub3JnCnRic3dkLm9yZwoudGJ0ZW1wbGUub3JnLnVr Ci50YnRob3VzdG9uLm9yZwoudGNjd29ubGluZS5vcmcKLnRjZXdmLm9yZwp0Y2hy ZC5vcmcKdGNueW5qLm9yZwp8fHRjcHNwZWVkLmNvCi50Y3BzcGVlZC5jb20KfHx0 Y3BzcGVlZC5jb20KLnRjc29mYmMub3JnCi50Y3Nvdmkub3JnCi50ZG0uY29tLm1v CnRlYW1hbWVyaWNhbnkuY29tCiEtLU9WSAp8fHRlY2h2aXoubmV0Cnx8dGVjay5p bgoudGVlbmllZnVjay5uZXQKdGVlbnNpbmFzaWEuY29tCi50ZWxlY29tc3BhY2Uu Y29tCnx8dGVsZWdyYXBoLmNvLnVrCi50ZW5hY3kuY29tCnx8dGVuemlucGFsbW8u Y29tCi50ZXcub3JnCi50aGFpY24uY29tCnx8dGhlYXRydW0tYmVsbGkuY29tCnRo ZWJsZW1pc2guY29tCnx8dGhlYmNvbXBsZXguY29tCi50aGVib2JzLmNvbQp8fHRo ZWJvYnMuY29tCi50aGVjaGluYWJlYXQub3JnCnxodHRwOi8vd3d3LnRoZWNoaW5h c3Rvcnkub3JnL3llYXJib29rcy95ZWFyYm9vay0yMDEyLwoudGhlZGFsYWlsYW1h bW92aWUuY29tCnxodHRwOi8vdGhlZGFsYWlsYW1hbW92aWUuY29tCnx8dGhlZHcu dXMKdGhlZnJvbnRpZXIuaGsvdGYKY24udGhlZ2F5LmNvbQp8aHR0cDovL3RoZWdp b2l0aW5ob2Mudm4vCi50aGVnbHkuY29tCi50aGVob3RzLmluZm8KdGhlaG91c2Vu ZXdzLmNvbQp8fHRoZWh1bi5uZXQKLnRoZWluaXRpdW0uY29tCnx8dGhlaW5pdGl1 bS5jb20KLnRoZW5ld3NsZW5zLmNvbQp8fHRoZW5ld3NsZW5zLmNvbQoudGhlcGly YXRlYmF5Lm9yZwp8fHRoZXBpcmF0ZWJheS5vcmcKIS0tfHx0aGVwaXJhdGViYXku c2UKfHx0aGVwb3J0YWx3aWtpLmNvbQp0aGVyZWFsbG92ZS5rcgp0aGVyb2NrLm5l dC5uegp0aGVzcGVlZGVyLmNvbQp8fHRoZXN0YW5kbmV3cy5jb20KdGhldGliZXRj ZW50ZXIub3JnCnRoZXRpYmV0Y29ubmVjdGlvbi5vcmcKLnRoZXRpYmV0bXVzZXVt Lm9yZwoudGhldGliZXRwb3N0LmNvbQp8fHRoZXRpYmV0cG9zdC5jb20KIS0tVG9y Cnx8dGhldGluaGF0LmNvbQp0aGV0cm90c2t5bW92aWUuY29tCnRoZXZpdmVrc3Bv dC5jb20KfHx0aGV3Z28ub3JnCi50aGV5bmMuY29tCnxodHRwOi8vdGhleW5jLmNv bQoudGhpbmtpbmd0YWl3YW4uY29tCi50aGlzYXYuY29tCnxodHRwOi8vdGhpc2F2 LmNvbQoudGhsaWIub3JnCnx8dGhvbWFzYmVybmhhcmQub3JnCi50aG9uZ2RyZWFt cy5jb20KdGhyZWF0Y2hhb3MuY29tCnx8dGhyb3VnaG5pZ2h0c2ZpcmUuY29tCi50 aHVtYnppbGxhLmNvbQp8fHRoeXdvcmRzLmNvbQoudGh5d29yZHMuY29tLnR3CnRp YW5hbm1lbm1vdGhlci5vcmcKLnRpYW5hbm1lbmR1aXpoaS5jb20KfHx0aWFuYW5t ZW5kdWl6aGkuY29tCnx8dGlhbmFubWVudW5pdi5jb20KfHx0aWFuYW5tZW51bml2 Lm5ldAp8fHRpYW5kaXhpbmcub3JnCi50aWFuaHVheXVhbi5jb20KLnRpYW5sYXdv ZmZpY2UuY29tCnx8dGlhbnRpLmlvCnRpYW50aWJvb2tzLm9yZwp8fHRpYW50aWJv b2tzLm9yZwp0aWFueWFudG9uZy5vcmcuY24KLnRpYW56aHUub3JnCi50aWJldC5h dAp0aWJldC5jYQoudGliZXQuY29tCnx8dGliZXQuY29tCnRpYmV0LmZyCi50aWJl dC5uZXQKfHx0aWJldC5uZXQKdGliZXQubnUKLnRpYmV0Lm9yZwp8fHRpYmV0Lm9y ZwoudGliZXQuc2sKdGliZXQub3JnLnR3Ci50aWJldC50bwoudGliZXQtZW52b3ku ZXUKfHx0aWJldC1lbnZveS5ldQoudGliZXQtZm91bmRhdGlvbi5vcmcKLnRpYmV0 LWhvdXNlLXRydXN0LmNvLnVrCnRpYmV0LWluZm8ubmV0CnRpYmV0LWluaXRpYXRp dmUuZGUKfHx0aWJldC1pbml0aWF0aXZlLmRlCi50aWJldC1tdW5pY2guZGUKLnRp YmV0M3JkcG9sZS5vcmcKfGh0dHA6Ly90aWJldDNyZHBvbGUub3JnCnRpYmV0YWN0 aW9uLm5ldAp8fHRpYmV0YWN0aW9uLm5ldAoudGliZXRhaWQub3JnCnRpYmV0YWxr LmNvbQoudGliZXRhbi5mcgp0aWJldGFuLWFsbGlhbmNlLm9yZwoudGliZXRhbmFy dHMub3JnCi50aWJldGFuYnVkZGhpc3RpbnN0aXR1dGUub3JnCnxodHRwOi8vdGli ZXRhbmJ1ZGRoaXN0aW5zdGl0dXRlLm9yZwp0aWJldGFuY29tbXVuaXR5Lm9yZwou dGliZXRhbmpvdXJuYWwuY29tCi50aWJldGFubGFuZ3VhZ2Uub3JnCi50aWJldGFu bGliZXJhdGlvbi5vcmcKfHx0aWJldGFubGliZXJhdGlvbi5vcmcKLnRpYmV0Y29s bGVjdGlvbi5jb20KLnRpYmV0YW5haWRwcm9qZWN0Lm9yZwoudGliZXRhbmNvbW11 bml0eXVrLm5ldAp8aHR0cDovL3RpYmV0YW5jb21tdW5pdHl1ay5uZXQKdGliZXRh bmN1bHR1cmUub3JnCnRpYmV0YW5mZW1pbmlzdGNvbGxlY3RpdmUub3JnCi50aWJl dGFucGFpbnRpbmdzLmNvbQoudGliZXRhbnBob3RvcHJvamVjdC5jb20KLnRpYmV0 YW5wb2xpdGljYWxyZXZpZXcub3JnCi50aWJldGFucmV2aWV3Lm5ldAp8aHR0cDov L3RpYmV0YW5zcG9ydHMub3JnCi50aWJldGFud29tZW4ub3JnCnxodHRwOi8vdGli ZXRhbndvbWVuLm9yZwoudGliZXRhbnlvdXRoLm9yZwoudGliZXRhbnlvdXRoY29u Z3Jlc3Mub3JnCnx8dGliZXRhbnlvdXRoY29uZ3Jlc3Mub3JnCi50aWJldGNoYXJp dHkuZGsKdGliZXRjaGFyaXR5LmluCi50aWJldGNoaWxkLm9yZwoudGliZXRjaXR5 LmNvbQoudGliZXRjb3Jwcy5vcmcKLnRpYmV0ZXhwcmVzcy5uZXQKfGh0dHA6Ly90 aWJldGV4cHJlc3MubmV0CnRpYmV0Zm9jdXMuY29tCnRpYmV0ZnVuZC5vcmcKLnRp YmV0Z2VybWFueS5jb20KfHx0aWJldGdlcm1hbnkuZGUKLnRpYmV0aGF1cy5jb20K LnRpYmV0aGVyaXRhZ2VmdW5kLm9yZwp0aWJldGhvdXNlLmpwCnRpYmV0aG91c2Uu b3JnCnx8dGliZXRob3VzZS51cwoudGliZXRpbmZvbmV0Lm5ldAoudGliZXRqdXN0 aWNlLm9yZwoudGliZXRrb21pdGUuZGsKfGh0dHA6Ly90aWJldG11c2V1bS5vcmcK dGliZXRuZXR3b3JrLm9yZwp8fHRpYmV0bmV0d29yay5vcmcKLnRpYmV0b2ZmaWNl LmNoCnxodHRwOi8vdGliZXRvZmZpY2UuY2gKdGliZXRvZmZpY2UuZXUKdGliZXRv ZmZpY2Uub3JnCnRpYmV0b25saW5lLmNvbQp8fHRpYmV0b25saW5lLmNvbQoudGli ZXRvZmZpY2UuY29tLmF1CnxodHRwOi8vdGliZXRvZmZpY2UuY29tLmF1Cnx8dGli ZXRvbmxpbmUudHYKLnRpYmV0b25saW5lLnR2Ci50aWJldG9yYWxoaXN0b3J5Lm9y Zwp8aHR0cDovL3RpYmV0b3JhbGhpc3Rvcnkub3JnCi50aWJldHBvbGljeS5ldQou dGliZXRyZWxpZWZmdW5kLmNvLnVrCnRpYmV0c2l0ZXMuY29tCi50aWJldHNvY2ll dHkuY29tCnx8dGliZXRzb2NpZXR5LmNvbQoudGliZXRzdW4uY29tCi50aWJldHN1 cHBvcnRncm91cC5vcmcKfGh0dHA6Ly90aWJldHN1cHBvcnRncm91cC5vcmcKLnRp YmV0c3dpc3MuY2gKLnRpYmV0dGVsZWdyYXBoLmNvbQp0aWJldHRpbWVzLm5ldAp8 fHRpYmV0d3JpdGVzLm9yZwoudGlja2V0LmNvbS50dwoudGlnZXJ2cG4uY29tCnx8 dGlnZXJ2cG4uY29tCi50aW1kaXIuY29tCnxodHRwOi8vdGltZGlyLmNvbQoudGlt ZS5jb20KfGh0dHA6Ly90aW1lLmNvbQohLS0udGltZS5jb20vdGltZS90aW1lMTAw L2xlYWRlcnMvcHJvZmlsZS9yZWJlbAohLS0udGltZS5jb20vdGltZS9zcGVjaWFs cy9wYWNrYWdlcy9hcnRpY2xlLzAsMjg4MDQKIS0tLnRpbWUuY29tL3RpbWUvbWFn YXppbmUKLnRpbXNhaC5jb20KfHxibG9nLnRpbmV5LmNvbQp0aW50dWMxMDEuY29t Ci50aW55LmNjCnxodHRwOi8vdGlueS5jYwp0aW55Y2hhdC5jb20KfHx0aW55cGFz dGUuY29tCi50aXN0b3J5LmNvbQp8fHRrY3MtY29sbGlucy5jb20KLnRtYWdhemlu ZS5jb20KfHx0bWFnYXppbmUuY29tCi50bWRmaXNoLmNvbQp8aHR0cDovL3RtaS5t ZQoudG1wcC5vcmcKfGh0dHA6Ly90bXBwLm9yZwoudG5hZmxpeC5jb20KfHx0bmFm bGl4LmNvbQoudG5ncm5vdy5jb20KLnRuZ3Jub3cubmV0Ci50bnAub3JnCnxodHRw Oi8vdG5wLm9yZwoudG8tcG9ybm8uY29tCnx8dG8tcG9ybm8uY29tCnRvZ2V0dGVy LmNvbQoudG9reW8tMjQ3LmNvbQoudG9reW8taG90LmNvbQp8fHRva3lvLXBvcm4t dHViZS5jb20KfHx0b2t5b2NuLmNvbQp0dy50b21vbmV3cy5uZXQKLnRvbmdpbC5v ci5rcgoudG9uby1va2EuanAKdG9ueXlhbi5uZXQKLnRvb2RvYy5jb20KdG9vbmVs Lm5ldAp0b3A4MS53cwoudG9wbmV3cy5pbgoudG9wcG9ybnNpdGVzLmNvbQp8aHR0 cDovL3RvcHBvcm5zaXRlcy5jb20KLnRvcmd1YXJkLm5ldAp8fHRvcmd1YXJkLm5l dAp8fHRvcC50dgoudG9wc2hhcmV3YXJlLmNvbQoudG9wc3kuY29tCnx8dG9wc3ku Y29tCnx8dG9wdGlwLmNhCnRvcmEudG8KLnRvcmNuLmNvbQoudG9ycHJvamVjdC5v cmcKfHx0b3Jwcm9qZWN0Lm9yZwp0b3JyZW50cHJpdmFjeS5jb20KfHx0b3JyZW50 cHJpdmFjeS5jb20KfGh0dHA6Ly90b3JyZW50cHJvamVjdC5zZQp8fHRvcnJlbnR5 Lm9yZwp8fHRvcnJlbnR6LmV1Cnx8dG9ydnBuLmNvbQp8fHRvdGFsdnBuLmNvbQou dG91dGlhb2FiYy5jb20KdG93bmdhaW4uY29tCnRveXBhcmsuaW4KdG95dHJhY3Rv cnNob3cuY29tCi50cGFyZW50cy5vcmcKLnRwaS5vcmcudHcKfHx0cGkub3JnLnR3 CnRyYWZmaWNoYXVzLmNvbQp8fHRyYW5zcGFyZW5jeS5vcmcKfHx0cmVlbWFsbC5j b20udHcKdHJlbmRzbWFwLmNvbQp8fHRyZW5kc21hcC5jb20KLnRyaWFsb2ZjY3Au b3JnCnx8dHJpYWxvZmNjcC5vcmcKLnRyaW1vbmRpLmRlL1NETEUKLnRyb3V3Lm5s CnxodHRwOi8vdHJvdXcubmwKLnRydC5uZXQudHIKdHJ0Yy5jb20udHcKLnRydWVi dWRkaGEtbWQub3JnCnxodHRwOi8vdHJ1ZWJ1ZGRoYS1tZC5vcmcKdHJ1bHllcmdv bm9taWMuY29tCi50cnV0aDEwMS5jby50dgp8aHR0cDovL3RydXRoMTAxLmNvLnR2 Ci50cnV0aG9udG91ci5vcmcKfGh0dHA6Ly90cnV0aG9udG91ci5vcmcKLnRydXZl by5jb20KLnRzY3R2Lm5ldAoudHNlbXR1bGt1LmNvbQp0c3F1YXJlLnR2Ci50c3Uu b3JnLnR3CnRzdW5hZ2FydW1vbi5jb20KIS0tfGh0dHA6Ly93d3cudHN1cnUtYmly ZC5uZXQvCi50c2N0di5uZXQKfHx0dC1yc3Mub3JnCnx8dHQxMDY5LmNvbQoudHR0 YW4uY29tCnx8dHR0YW4uY29tCmJiLnR0di5jb20udHcvYmIKdHU4OTY0LmNvbQou dHViYWhvbGljLmNvbQoudHViZS5jb20KdHViZTguY29tCnx8dHViZTguY29tCi50 dWJlOTExLmNvbQp8fHR1YmU5MTEuY29tCi50dWJlY3VwLmNvbQoudHViZWdhbHMu Y29tCi50dWJlaXNsYW0uY29tCnxodHRwOi8vdHViZWlzbGFtLmNvbQoudHViZXN0 YWNrLmNvbQp8fHR1YmV3b2xmLmNvbQoudHVpYmVpdHUubmV0CnR1aWRhbmcubmV0 Ci50dWlkYW5nLm9yZwp8fHR1aWRhbmcub3JnCi50dWlkYW5nLnNlCmJicy50dWl0 dWkuaW5mbwoudHVtdXRhbnppLmNvbQp8aHR0cDovL3R1bXV0YW56aS5jb20KfHx0 dW12aWV3LmNvbQoudHVuZWluLmNvbQp8aHR0cDovL3R1bmVpbi5jb20KfHx0dW5u ZWxiZWFyLmNvbQoudHVubmVsci5jb20KfHx0dW5uZWxyLmNvbQoudHVvOC5ibHVl Cnx8dHVvOC5ibHVlCi50dW84LmNjCi50dW84LmNsdWIKfHx0dW84LmNsdWIKLnR1 bzguZml0Ci50dW84LmhrCi50dW84LmluCi50dW84Lm5pbmphCi50dW84Lm9yZwp8 fHR1bzguZml0Cnx8dHVvOC5vcmcKLnR1bzgucHcKfGh0dHA6Ly90dW84LnB3Cnx8 dHVvOC5yZWQKLnR1bzguc3BhY2UKdHVpdHdpdC5jb20KLnR1cmFuc2FtLm9yZwou dHVyYm9iaXQubmV0CnxodHRwOi8vdHVyYm9iaXQubmV0Ci50dXJib2hpZGUuY29t Cnx8dHVyYm9oaWRlLmNvbQoudHVzaHljYXNoLmNvbQp8aHR0cDovL3R1c2h5Y2Fz aC5jb20KfHxhcHAudHV0YW5vdGEuY29tCi50dXZwbi5jb20KfHx0dXZwbi5jb20K fGh0dHA6Ly90dXphaWppZGkuY29tCnxodHRwOi8vKi50dXphaWppZGkuY29tCi50 dzAxLm9yZwp8aHR0cDovL3R3MDEub3JnCgohLS0tVHVtYmxyLS0tCi50dW1ibHIu Y29tCnx8dHVtYmxyLmNvbQohLS1AQHx8YXNzZXRzLnR1bWJsci5jb20KIS0tQEB8 fGRhdGEudHVtYmxyLmNvbQohLS1AQHx8bWVkaWEudHVtYmxyLmNvbQohLS1AQHx8 c3RhdGljLnR1bWJsci5jb20KIS0tQEB8fHd3dy50dW1ibHIuY29tCnx8bGVjbG91 ZC5uZXQKfGh0dHA6Ly9jb3NtaWMubW9uYXIuY2gKfHxzbHV0bW9vbmJlYW0uY29t CnxodHRwOi8vYmxvZy5zb3lsZW50LmNvbQoKLnR2LmNvbQp8aHR0cDovL3R2LmNv bQp0dmFudHMuY29tCmZvcnVtLnR2Yi5jb20KbmV3cy50dmIuY29tL2xpc3Qvd29y bGQKbmV3cy50dmIuY29tL2xvY2FsCm5ld3MudHZicy5jb20udHcKLnR2Ym94bm93 LmNvbQp8aHR0cDovL3R2Ym94bm93LmNvbS8KdHZpZGVyLmNvbQoudHZtb3N0LmNv bS5oawoudHZwbGF5dmlkZW9zLmNvbQp8fHR2dW5ldHdvcmtzLmNvbQoudHctYmxv Zy5jb20KfGh0dHBzOi8vdHctYmxvZy5jb20KLnR3LW5wby5vcmcKLnR3YWl0dGVy LmNvbQp0d2FwcGVya2VlcGVyLmNvbQp8fHR3YXBwZXJrZWVwZXIuY29tCnx8dHdh dWQuaW8KLnR3YXVkLmlvCi50d2F2aS5jb20KLnR3YmJzLm5ldC50dwp0d2Jicy5v cmcKdHdiYnMudHcKfHx0d2Jsb2dnZXIuY29tCnR3ZWVwbWFnLmNvbQoudHdlZXBt bC5vcmcKfHx0d2VlcG1sLm9yZwoudHdlZXRiYWNrdXAuY29tCnx8dHdlZXRiYWNr dXAuY29tCnR3ZWV0Ym9hcmQuY29tCnx8dHdlZXRib2FyZC5jb20KLnR3ZWV0Ym9u ZXIuYml6Cnx8dHdlZXRib25lci5iaXoKLnR3ZWV0Y3MuY29tCnxodHRwOi8vdHdl ZXRjcy5jb20KfGh0dHA6Ly9kZWNrLmx5CiEtLSBPcGVyYXRpb24gZGlzY29udGlu dWVkCiEtLXx8dHdlZXRlLm5ldAohLS1tLnR3ZWV0ZS5uZXQKfHxtdHcudGwKfHx0 d2VldGVkdGltZXMuY29tCiEtLSBPcGVyYXRpb24gZGlzY29udGludWVkCiEtLXR3 ZWV0bWVtZS5jb20KfHx0d2VldG15bGFzdC5mbQp0d2VldHBob3RvLmNvbQp8fHR3 ZWV0cGhvdG8uY29tCnx8dHdlZXRyYW5zLmNvbQp0d2VldHJlZS5jb20KfHx0d2Vl dHJlZS5jb20KLnR3ZWV0dHVubmVsLmNvbQp8fHR3ZWV0dHVubmVsLmNvbQp8fHR3 ZWV0d2FsbHkuY29tCnR3ZWV0eW1haWwuY29tCnx8dHdlbHZlLnRvZGF5Ci50d2Vl ei5uZXQKfGh0dHA6Ly90d2Vlei5uZXQKfHx0d2Z0cC5vcmcKfHx0d2dyZWF0ZGFp bHkuY29tCnR3aWJhc2UuY29tCi50d2liYmxlLmRlCnx8dHdpYmJsZS5kZQp0d2li Ym9uLmNvbQp8fHR3aWJzLmNvbQoudHdpY291bnRyeS5vcmcKfGh0dHA6Ly90d2lj b3VudHJ5Lm9yZwp0d2ljc3kuY29tCi50d2llbmRzLmNvbQp8aHR0cDovL3R3aWVu ZHMuY29tCi50d2lmYW4uY29tCnxodHRwOi8vdHdpZmFuLmNvbQp0d2lmZm8uY29t Cnx8dHdpZmZvLmNvbQoudHdpbGlnaHRzZXguY29tCnR3aWxvZy5vcmcKdHdpbWJv dy5jb20KfHx0d2luZGV4eC5jb20KdHdpcHBsZS5qcAp8fHR3aXBwbGUuanAKfHx0 d2lwLm1lCnR3aXNob3J0LmNvbQp8fHR3aXNob3J0LmNvbQp0d2lzdGFyLmNjCnx8 dHdpc3Rlci5uZXQuY28KfHx0d2lzdGVyaW8uY29tCnR3aXN0ZXJub3cuY29tCnR3 aXN0b3J5Lm5ldAp0d2l0YnJvd3Nlci5uZXQKfHx0d2l0Y2F1c2UuY29tCnx8dHdp dGdldGhlci5jb20KfHx0d2lnZ2l0Lm9yZwp0d2l0Z29vLmNvbQp0d2l0aXEuY29t Cnx8dHdpdGlxLmNvbQoudHdpdGxvbmdlci5jb20KfHx0d2l0bG9uZ2VyLmNvbQp8 aHR0cDovL3RsLmdkLwp0d2l0bWFuaWEuY29tCnR3aXRvYXN0ZXIuY29tCnx8dHdp dG9hc3Rlci5jb20KfHx0d2l0b25tc24uY29tCiEtLVNhbWUgSVAKLnR3aXQyZC5j b20KfHx0d2l0MmQuY29tCi50d2l0c3RhdC5jb20KfHx0d2l0c3RhdC5jb20KfHxm aXJzdGZpdmVmb2xsb3dlcnMuY29tCnx8cmV0d2VldGVmZmVjdC5jb20KfHx0d2Vl cGxpa2UubWUKfHx0d2VlcGd1aWRlLmNvbQp8fHR1cmJvdHdpdHRlci5jb20KLnR3 aXR2aWQuY29tCnx8dHdpdHZpZC5jb20KfGh0dHA6Ly90d3QudGwKdHdpdHRib3Qu bmV0Cnx8YWRzLXR3aXR0ZXIuY29tCnx8dHd0dHIuY29tCnx8dHdpdHRlcjRqLm9y ZwoudHdpdHRlcmNvdW50ZXIuY29tCnx8dHdpdHRlcmNvdW50ZXIuY29tCnR3aXR0 ZXJmZWVkLmNvbQoudHdpdHRlcmdhZGdldC5jb20KfHx0d2l0dGVyZ2FkZ2V0LmNv bQoudHdpdHRlcmtyLmNvbQp8fHR3aXR0ZXJrci5jb20KfHx0d2l0dGVybWFpbC5j b20KfHx0d2l0dGVycmlmaWMuY29tCnR3aXR0ZXJ0aW0uZXMKfHx0d2l0dGVydGlt LmVzCnR3aXR0aGF0LmNvbQp8fHR3aXR0dXJrLmNvbQoudHdpdHR1cmx5LmNvbQp8 fHR3aXR0dXJseS5jb20KLnR3aXR6YXAuY29tCnR3aXlpYS5jb20KfHx0d3N0YXIu bmV0Ci50d3Rrci5jb20KfGh0dHA6Ly90d3Rrci5jb20KLnR3bm9ydGgub3JnLnR3 CnR3c2t5cGUuY29tCnR3dHJsYW5kLmNvbQp0d3VybC5ubAoudHd5YWMub3JnCnx8 dHd5YWMub3JnCi50eHh4LmNvbQoudHljb29sLmNvbQp8fHR5Y29vbC5jb20KCiEt LXR5cGVwYWQKfHx0eXBlcGFkLmNvbQpAQHx8d3d3LnR5cGVwYWQuY29tCkBAfHxz dGF0aWMudHlwZXBhZC5jb20KfHxibG9nLmV4cG9mdXR1cmVzLmNvbQp8fGxlZ2Fs dGVjaC5sYXcuY29tCnx8YmxvZ3MudGFtcGFiYXkuY29tCnx8Y29udGVzdHMudHdp bGlvLmNvbQohLWxhd3Byb2Zlc3NvcnMudHlwZXBhZC5jb20vY2hpbmFfbGF3X3By b2YKCiEtLS0tLS0tLS0tLS0tVHdpdGVzZS0tLS0tCi5lbWJyLmluCnx8ZW1ici5p bgoKIS0tLS0tLS0tLS0tLS0tLS0tLS0tVVUtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCi51OXVuLmNvbQp8fHU5dW4uY29tCi51YmRkbnMub3JnCnxodHRwOi8vdWJk ZG5zLm9yZwp8fHViZXJwcm94eS5uZXQKLnVjLWphcGFuLm9yZwp8fHVjLWphcGFu Lm9yZwouc3JjZi51Y2FtLm9yZy9zYWxvbi8KfGh0dHA6Ly9jaGluYS51Y2FuZXdz LmNvbS8KfHx1Y2RjMTk5OC5vcmcKfGh0dHA6Ly9odW0qLnVjaGljYWdvLmVkdS9m YWN1bHR5L3l3YW5nL2hpc3RvcnkKfHx1ZGVyem8uaXQKLnVkbi5jb20KfHx1ZG4u Y29tCnx8dWRuLmNvbS50dwp1ZG5ia2suY29tL2Jicwp8fHVmb3JhZGlvLmNvbS50 dwp1ZnJlZXZwbi5jb20KLnVnby5jb20KIS0tZ2hzCnx8dWhkd2FsbHBhcGVycy5v cmcKfHx1aHJwLm9yZwoudWlnaHVyLm5sCnx8dWlnaHVyLm5sCnVpZ2h1cmJpei5u ZXQKLnVsaWtlLm5ldAp1a2NkcC5jby51awp1a2xpZmVyYWRpby5jby51awp8fHVr bGlmZXJhZGlvLmNvLnVrCnVsdHJhdnBuLmZyCnx8dWx0cmF2cG4uZnIKdWx0cmF4 cy5jb20KdW1pY2guZWR1L35mYWx1bgp8fHVuYmxvY2suY24uY29tCi51bmJsb2Nr ZXIueXQKdW5ibG9jay11cy5jb20KfHx1bmJsb2NrLXVzLmNvbQoudW5ibG9ja2Rt bS5jb20KfGh0dHA6Ly91bmJsb2NrZG1tLmNvbQp8fHVuYmxvY2tzaXQuZXMKdW5j eWNsb21lZGlhLm9yZwoudW5jeWNsb3BlZGlhLmhrL3dpa2kKfGh0dHA6Ly91bmN5 Y2xvcGVkaWEuaGsKIS0tdW5jeWNsb3BlZGlhLmluZm8KfGh0dHA6Ly91bmN5Y2xv cGVkaWEudHcKdW5kZXJ3b29kYW1tby5jb20KfHx1bmRlcndvb2RhbW1vLmNvbQp8 fHVuaG9seWtuaWdodC5jb20KLnVuaS5jYwp8fGNsZHIudW5pY29kZS5vcmcKLnVu aWZpY2F0aW9uLm5ldAoudW5pZmljYXRpb24ub3JnLnR3Cnx8dW5pcnVsZS5jbG91 ZAoudW5pdGVkc29jaWFscHJlc3MuY29tCi51bml4MTAwLmNvbQp8fHVua25vd25z cGFjZS5vcmcKLnVub2RlZG9zLmNvbQp1bnBvLm9yZwoudW50cmFjZWFibGUudXMK fGh0dHA6Ly91bnRyYWNlYWJsZS51cwp8fHVvY24ub3JnCnRvci51cGRhdGVzdGFy LmNvbQoudXBob2xkanVzdGljZS5vcmcKLnVwbG9hZDR1LmluZm8KdXBsb2FkZWQu bmV0L2ZpbGUKfGh0dHA6Ly91cGxvYWRlZC5uZXQvZmlsZQp8aHR0cDovL3VwbG9h ZGVkLnRvL2ZpbGUKLnVwbG9hZHN0YXRpb24uY29tL2ZpbGUKLnVwbWVkaWEubWcK LnVwb3JuaWEuY29tCnxodHRwOi8vdXBvcm5pYS5jb20KfHx1cHJveHkub3JnCnxo dHRwOi8vdG9yLmNuLnVwdG9kb3duLmNvbS8KLnVwd2lsbC5vcmcKdXI3cy5jb20K fHx1cmJhbnN1cnZpdmFsLmNvbQpteXNoYXJlLnVybC5jb20udHcvCnx8dXJsYm9y Zy5jb20KfHx1cmxwYXJzZXIuY29tCnVzLnRvCnx8dXNhY24uY29tCi51c2FpcC5l dQp8fHVzYWlwLmV1CmRhbGFpbGFtYS51c2MuZWR1CmlpcGRpZ2l0YWwudXNlbWJh c3N5Lmdvdgp8fHVzZmsubWlsCnx8dXNtYS5lZHUKfHx1c21jLm1pbAoudXNvY2N0 bi5jb20KfGh0dHA6Ly90YXJyLnVzcHRvLmdvdi8KfHx0c2RyLnVzcHRvLmdvdgou dXN0cmVhbS50dgp8fHVzdHJlYW0udHYKIS0tfHx1c3R3cmFwLmluZm8KLnVzdW5p dGVkbmV3cy5jb20KfGh0dHA6Ly91c3VuaXRlZG5ld3MuY29tCnVzdXMuY2MKLnV0 b3BpYW5wYWwuY29tCnx8dXRvcGlhbnBhbC5jb20KLnV1LWdnLmNvbQoudXZ3eHl6 Lnh5egp8fHV2d3h5ei54eXoKLnV3YW50cy5jb20KLnV3YW50cy5uZXQKdXlnaHVy LmNvLnVrCnxodHRwOi8vdXlnaHVyLWoub3JnCnx8dXlnaHVyYW1lcmljYW4ub3Jn Ci51eWdodXJjYW5hZGlhbnNvY2lldHkub3JnCi51eWdodXJlbnNlbWJsZS5jby51 awp8fHV5Z2h1cmNvbmdyZXNzLm9yZwoudXlnaHVycGVuLm9yZwoudXlnaHVycHJl c3MuY29tCi51eWdodXJzdHVkaWVzLm9yZwp8aHR0cDovL3V5Z2h1cnN0dWRpZXMu b3JnCnV5Z3VyLm9yZwp8aHR0cDovL3V5bWFhcmlwLmNvbS8KCiEtLS0tLS0tLS0t LS0tLS0tLS0tLVZWLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoudjJyYXkuY29t CnxodHRwOi8vdjJyYXkuY29tCi52YW4wMDEuY29tCi52YW42OTguY29tCi52YW5l bXUuY24KLnZhbmlsbGEtanAuY29tCi52YW5wZW9wbGUuY29tCnZhbnNreS5jb20K fHx2Y2Ytb25saW5lLm9yZwp8fHZjZmJ1aWxkZXIub3JnCi52ZWdhc3JlZC5jb20K LnZlbGthZXBvY2hhLnNrCi52ZW5iYnMuY29tCi52ZW5jaGluYS5jb20KLnZlbmV0 aWFubWFjYW8uY29tCnx8dmVuZXRpYW5tYWNhby5jb20KdmVvaC5jb20KbXlzaXRl LnZlcml6b24ubmV0CnZlcm1vbnR0aWJldC5vcmcKLnZlcnNhdnBuLmNvbQp8fHZl cnNhdnBuLmNvbQp8fHZlcnlicy5jb20KLnZmdC5jb20udHcKLnZpYmVyLmNvbQp8 fHZpYmVyLmNvbQoudmljYS5pbmZvCi52aWN0aW1zb2Zjb21tdW5pc20ub3JnCnxo dHRwOi8vdmljdGltc29mY29tbXVuaXNtLm9yZwp8fHZpZC5tZQp8fHZpZGJsZS5j b20KdmlkZW9iYW0uY29tCnx8dmlkZW9iYW0uY29tCi52aWRlb2RldGVjdGl2ZS5j b20KLnZpZGVvbWVnYS50dgp8fHZpZGVvbWVnYS50dgoudmlkZW9tby5jb20Kdmlk ZW9wZWRpYXdvcmxkLmNvbQoudmlkZW9wcmVzcy5jb20KLnZpZGluZm8ub3JnL3Zp ZGVvCnZpZXRkYWlreW5ndXllbi5jb20KLnZpamF5YXRlbXBsZS5vcmcKdmltZW8u Y29tCnx8dmltZW8uY29tCnx8dmltcGVyYXRvci5vcmcKfHx2aW5jbmQuY29tCnx8 dmlubmlldi5jb20KfGh0dHA6Ly93d3cubGliLnZpcmdpbmlhLmVkdS9hcmVhLXN0 dWRpZXMvVGliZXQvdGliZXQuaHRtbAoudmlydHVhbHJlYWxwb3JuLmNvbQp8fHZp cnR1YWxyZWFscG9ybi5jb20KdmlzaWJsZXR3ZWV0cy5jb20KfGh0dHA6Ly9ueS52 aXNpb250aW1lcy5jb20KLnZpdGFsMjQ3Lm9yZwp8fHZpdS5jb20KLnZpdmFoZW50 YWk0dS5uZXQKLnZpdmF0dWJlLmNvbQoudml2dGhvbWFzLmNvbQp8fHZpdnRob21h cy5jb20KLnZqYXYuY29tCnx8dmphdi5jb20KLnZqbWVkaWEuY29tLmhrCi52bGxj cy5vcmcKfGh0dHA6Ly92bGxjcy5vcmcKfHx2bWl4Y29yZS5jb20KfHx2bmV0Lmxp bmsKY24udm9hLm1vYmkKdHcudm9hLm1vYmkKLnZvYWNoaW5lc2VibG9nLmNvbQp8 fHZvYWNoaW5lc2VibG9nLmNvbQp2b2FnZC5jb20KLnZvYWNhbnRvbmVzZS5jb20K fHx2b2FjYW50b25lc2UuY29tCnZvYWNoaW5lc2UuY29tCnx8dm9hY2hpbmVzZS5j b20KLnZvYW5ld3MuY29tCnx8dm9hbmV3cy5jb20Kdm9hdGliZXRhbi5jb20KfHx2 b2F0aWJldGFuLmNvbQoudm9hdGliZXRhbmVuZ2xpc2guY29tCnx8dm9hdGliZXRh bmVuZ2xpc2guY29tCi52b2NhdGl2LmNvbQp2b2NuLnR2Ci52b3Qub3JnCnx8dm90 Lm9yZwoudm92bzIwMDAuY29tCnxodHRwOi8vdm92bzIwMDAuY29tCi52b3hlci5j b20KfHx2b3hlci5jb20KLnZveS5jb20KfHx2cG4uYWMKLnZwbjRhbGwuY29tCnx8 dnBuNGFsbC5jb20KLnZwbmFjY291bnQub3JnCnxodHRwOi8vdnBuYWNjb3VudC5v cmcKLnZwbmFjY291bnRzLmNvbQp8fHZwbmFjY291bnRzLmNvbQoudnBuY29tcGFy aXNvbi5vcmcKLnZwbmN1cC5jb20KfHx2cG5jdXAuY29tCnZwbmJvb2suY29tCi52 cG5jb3Vwb25zLmNvbQp8aHR0cDovL3ZwbmNvdXBvbnMuY29tCi52cG5kYWRhLmNv bQp8fHZwbmRhZGEuY29tCi52cG5mYW4uY29tCnZwbmZpcmUuY29tCi52cG5maXJl cy5iaXoKLnZwbmZvcmdhbWUubmV0Cnx8dnBuZm9yZ2FtZS5uZXQKfHx2cG5nYXRl LmpwCi52cG5nYXRlLm5ldAp8fHZwbmdhdGUubmV0Ci52cG5ncmF0aXMubmV0CnZw bmhxLmNvbQoudnBubWFzdGVyLmNvbQp8fHZwbm1hc3Rlci5jb20KLnZwbm1lbnRv ci5jb20KfHx2cG5tZW50b3IuY29tCi52cG5pbmphLm5ldAp8fHZwbmluamEubmV0 Ci52cG5pbnRvdWNoLmNvbQp8fHZwbmludG91Y2gubmV0CnZwbmphY2suY29tCnx8 dnBuamFjay5jb20KLnZwbnBpY2suY29tCnx8dnBucGljay5jb20KfHx2cG5wb3Au Y29tCnx8dnBucHJvbmV0LmNvbQoudnBucmVhY3Rvci5jb20KfHx2cG5yZWFjdG9y LmNvbQp8fHZwbnJldmlld3ouY29tCi52cG5zZWN1cmUubWUKfHx2cG5zZWN1cmUu bWUKLnZwbnNoYXphbS5jb20KfHx2cG5zaGF6YW0uY29tCi52cG5zaGllbGRhcHAu Y29tCnx8dnBuc2hpZWxkYXBwLmNvbQoudnBuc3AuY29tCi52cG50cmFmZmljLmNv bQoudnBudHVubmVsLmNvbQp8fHZwbnR1bm5lbC5jb20KLnZwbnVrLmluZm8KfHx2 cG51ay5pbmZvCnx8dnBudW5saW1pdGVkYXBwLmNvbQoudnBudmlwLmNvbQp8fHZw bnZpcC5jb20KLnZwbndvcmxkd2lkZS5jb20KLnZwb3JuLmNvbQp8fHZwb3JuLmNv bQoudnBzZXIubmV0CkBAfHx2cHNlci5uZXQKdnJhaWVzYWdlc3NlLm5ldAoudnJt dHIuY29tCnx8dnR1bm5lbC5jb20KfHx2dWt1LmNjCgohLS0tLS0tLS0tLS0tLS0t LS0tLS1XVy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KbGlzdHMudzMub3JnL2Fy Y2hpdmVzL3B1YmxpYwp8fHczc2Nob29scy5jb20KfHx3YWZmbGUxOTk5LmNvbQou d2FoYXMuY29tCi53YWlnYW9idS5jb20Kd2Fpa2V1bmcub3JnL3BocF93aW5kCi53 YWlsYWlrZS5uZXQKLndhaXdhaWVyLmNvbQp8aHR0cDovL3dhaXdhaWVyLmNvbQp8 fHdhbGxtYW1hLmNvbQp3YWxsb3Jub3Qub3JnCnx8d2FsbHBhcGVyY2FzYS5jb20K LndhbGxwcm94eS5jb20KQEB8fHdhbGxwcm94eS5jb20uY24KfHx3YWx0ZXJtYXJ0 aW4uY29tCnx8d2FsdGVybWFydGluLm9yZwp8fHd3dy53YW4tcHJlc3Mub3JnCnx8 d2FuZGVyaW5naG9yc2UubmV0Cnx8d2FuZ2FmdS5uZXQKfHx3YW5namluYm8ub3Jn Ci53YW5namluYm8ub3JnCndhbmdsaXhpb25nLmNvbQoud2FuZ28ub3JnCnx8d2Fu Z28ub3JnCndhbmdydW9zaHVpLm5ldAp3d3cud2FuZ3J1b3dhbmcub3JnCndhbnQt ZGFpbHkuY29tCndhcGVkaWEubW9iaS96aHNpbXAKfHx3YXNlbHByby5jb20KLndh dGNoaW5lc2UuY29tCi53YXR0cGFkLmNvbQp8fHdhdHRwYWQuY29tCi5tYWt6aG91 LndhcmVob3VzZTMzMy5jb20Kd2FzaGVuZy5uZXQKLndhdGNoOHguY29tCnx8d2F0 Y2hteWdmLm5ldAp8fHdhdi50dgoud2RmNS5jb20KLndlYXJlaGFpcnkuY29tCi53 ZWFybi5jb20KfHx3ZWFybi5jb20KfGh0dHA6Ly9oa2NvYy53ZWF0aGVyLmNvbS5o awp8fGh1ZGF0b3JpcS53ZWIuaWQKfHx3ZWIycHJvamVjdC5uZXQKd2ViYmFuZy5u ZXQKLndlYmV2YWRlci5vcmcKLndlYmZyZWVyLmNvbQp3ZWJsYWd1LmNvbQoud2Vi amIub3JnCi53ZWJydXNoLm5ldAp3ZWJzLXR2Lm5ldAoud2Vic2l0ZXB1bHNlLmNv bS9oZWxwL3Rlc3R0b29scy5jaGluYS10ZXN0CnxodHRwOi8vd3d3LndlYnNuYXBy LmNvbQoud2Vid2FycGVyLm5ldAp8aHR0cDovL3dlYndhcnBlci5uZXQKd2Vid29y a2VyZGFpbHkuY29tCi53ZWVrbWFnLmluZm8KfHx3ZWZpZ2h0Y2Vuc29yc2hpcC5v cmcKLndlZm9uZy5jb20Kd2VpYm9sZWFrLmNvbQoud2VpaHVvLm9yZwp3ZWlqaW5n c2hlbmcub3JnCi53ZWltaW5nLmluZm8KfHx3ZWltaW5nLmluZm8Kd2VpcXVhbndh bmcub3JnCnxodHRwOi8vd2Vpc3VvLndzCi53ZWxvdmVjb2NrLmNvbQoud2VtaWdy YXRlLm9yZwp8aHR0cDovL3dlbWlncmF0ZS5vcmcKd2VuZ2V3YW5nLmNvbQp8fHdl bmdld2FuZy5vcmcKLndlbmh1aS5jaAp8aHR0cDovL3RyYW5zLndlbndlaXBvLmNv bS9nYi8KLndlbnh1ZWNpdHkuY29tCnx8d2VueHVlY2l0eS5jb20KLndlbnl1bmNo YW8uY29tCnx8d2VueXVuY2hhby5jb20KLndlc3RjYS5jb20KfHx3ZXN0Y2EuY29t Cnx8d2VzdGVybndvbHZlcy5jb20KLndlc3RraXQubmV0Cnx8d2VzdHBvaW50LmVk dQoud2VzdGVybnNodWdkZW5zb2NpZXR5Lm9yZwp3ZXRwdXNzeWdhbWVzLmNvbQou d2V0cGxhY2UuY29tCndleGlhb2JvLm9yZwp8fHdleGlhb2JvLm9yZwp3ZXpoaXlv bmcub3JnCnx8d2V6b25lLm5ldAoud2ZvcnVtLmNvbQp8fHdmb3J1bS5jb20vCi53 aGF0YmxvY2tlZC5jb20KfHx3aGF0YmxvY2tlZC5jb20KLndoZWF0c2VlZHMub3Jn Cnx8d2hlZWxvY2tzbGF0aW4uY29tCi53aGlwcGVkYXNzLmNvbQohLS18aHR0cDov L3doby5pcy8KLndob2VyLm5ldAp8fHdob2VyLm5ldAp3aG90YWxraW5nLmNvbQp3 aHlsb3Zlci5jb20KfHx3aHl4Lm9yZwp8aHR0cDovL3poLmVjZG0ud2lraWEuY29t CnxodHRwOi8vZXZjaGsud2lraWEuY29tCmZxLndpa2lhLmNvbQpjbi51bmN5Y2xv cGVkaWEud2lraWEuY29tCnpoLnVuY3ljbG9wZWRpYS53aWtpYS5jb20KfHx3aWtp bGVha3MuY2gKfHx3aWtpbGVha3MuY29tCnx8d2lraWxlYWtzLmRlCnx8d2lraWxl YWtzLmV1Cnx8d2lraWxlYWtzLmx1Ci53aWtpbGVha3Mub3JnCnx8d2lraWxlYWtz Lm9yZwp8fHdpa2lsZWFrcy5wbAoud2lraWxlYWtzLWZvcnVtLmNvbQp3aWxkYW1t by5jb20KLndpbGxpYW1oaWxsLmNvbQp8fGNvbGxhdGVyYWxtdXJkZXIuY29tCnx8 Y29sbGF0ZXJhbG11cmRlci5vcmcKd2lraWxpdnJlcy5pbmZvL3dpa2kvJUU5JTlC JUI2JUU1JTg1JUFCJUU1JUFFJUFBJUU3JUFCJUEwCnx8d2lraW1hcGlhLm9yZwoK IS0tLS0tLS0tLS0tLS1XaWtpcGVkaWEgUmVsYXRlZC0tLS0tLS0tLS0tLS0KISFF bWVyZ2VuY3kgbmVlZCBvbmx5KElQL1BvcnQgYmxvY2sgdXNhZ2UpISEKIS0tLS0t LTAtLS0tLS0KIS0tfHxtZWRpYXdpa2kub3JnCiEtLUBAfHxtLm1lZGlhd2lraS5v cmcKIS0tLS0tLTEtLS0tLS0KIS0tfHx3aWtpZGF0YS5vcmcKIS0tQEB8fG0ud2lr aWRhdGEub3JnCiEtLS0tLS0yLS0tLS0tCiEtLXx8d2lraW1lZGlhLm9yZwohLS1A QHx8bGlzdHMud2lraW1lZGlhLm9yZwohLS1AQHx8bS53aWtpbWVkaWEub3JnCiEt LUBAfHxwaGFicmljYXRvci53aWtpbWVkaWEub3JnCiEtLUBAfHx1cGxvYWQud2lr aW1lZGlhLm9yZwohLS1AQHx8d2lraXRlY2gud2lraW1lZGlhLm9yZwohLS0tLS0t My0tLS0tLQohLS18fHdpa2lib29rcy5vcmcKIS0tQEB8fG0ud2lraWJvb2tzLm9y ZwohLS0tLS0tNC0tLS0tLQohLS18fHdpa2l2ZXJzaXR5Lm9yZwohLS1AQHx8bS53 aWtpdmVyc2l0eS5vcmcKIS0tLS0tLTUtLS0tLS0KIS0tfHx3aWtpc291cmNlLm9y ZwohLS1AQHx8bS53aWtpc291cmNlLm9yZwp8aHR0cDovL3poLndpa2lzb3VyY2Uu b3JnCiEtLS0tLS02LS0tLS0tCiEtLXx8d2lraXF1b3RlLm9yZwohLS1AQHx8bS53 aWtpcXVvdGUub3JnCiEtLS0tLS03LS0tLS0tCiEtLXx8d2lraW5ld3Mub3JnCiEt LUBAfHxtLndpa2luZXdzLm9yZwp8fHpoLndpa2luZXdzLm9yZwohLS0tLS0tOC0t LS0tLQohLS18fHdpa2l2b3lhZ2Uub3JnCiEtLUBAfHxtLndpa2l2b3lhZ2Uub3Jn CiEtLXxodHRwOi8vemgud2lraXZveWFnZS5vcmcKIS0tLS0tLTktLS0tLS0KIS0t fHx3aWt0aW9uYXJ5Lm9yZwohLS1AQHx8bS53aWt0aW9uYXJ5Lm9yZwohLS18aHR0 cDovL3poLndpa3Rpb25hcnkub3JnCiEtLS0tLTEwLS0tLS0tCiEtLXx8d2lraW1l ZGlhZm91bmRhdGlvbi5vcmcKIS0tQEB8fG0ud2lraW1lZGlhZm91bmRhdGlvbi5v cmcKIS0tLS1NYWluLS0tLS0KIS0tfHx3aWtpcGVkaWEub3JnCnx8amEud2lraXBl ZGlhLm9yZwp6aC53aWtpcGVkaWEub3JnCiEtLXx8emgud2lraXBlZGlhLm9yZwp6 aC5tLndpa2lwZWRpYS5vcmcKfGh0dHBzOi8vemgubS53aWtpcGVkaWEub3JnCiEt LUBAfHxtLndpa2lwZWRpYS5vcmcKfGh0dHBzOi8vemgud2lraXBlZGlhLm9yZwoh LS1PdGhlciBMYW5ndWFnZXMgb2YgV2lraXBlZGlhCnd1dS53aWtpcGVkaWEub3Jn CnxodHRwczovL3d1dS53aWtpcGVkaWEub3JnCnpoLXl1ZS53aWtpcGVkaWEub3Jn CnxodHRwczovL3poLXl1ZS53aWtpcGVkaWEub3JnCgp8fHdpa2l3aWtpLmpwCnx8 Y2FzaW5vLndpbGxpYW1oaWxsLmNvbQp8fHNwb3J0cy53aWxsaWFtaGlsbC5jb20K fHx2ZWdhcy53aWxsaWFtaGlsbC5jb20KfHx3aWxsdy5uZXQKfHx3aW5kb3dzcGhv bmVtZS5jb20KLndpbmRzY3JpYmUuY29tCnx8d2luZHNjcmliZS5jb20KfHxjb21t dW5pdHkud2luZHkuY29tCnx8d2luZ3kuc2l0ZQp3aW5uaW5nMTEuY29tCndpbndo aXNwZXJzLmluZm8KfHx3aXJlZGJ5dGVzLmNvbQp8fHdpcmVkcGVuLmNvbQohLS18 fHdpcmVzaGFyay5vcmcKLndpc2RvbXB1YnMub3JnCi53aXNldmlkLmNvbQp8fHdp c2V2aWQuY29tCi53aXRuZXNzbGVldGVhY2hpbmcuY29tCi53aXRvcGlhLm5ldAou d2piay5vcmcKfHx3amJrLm9yZwp8aHR0cDovL3duLmNvbQoud25hY2cuY29tCi53 bmFjZy5vcmcKLndvLnRjCnx8d29lc2VyLmNvbQp8aHR0cDovL3dvZXNlcm1pZGRs ZS13YXkubmV0Lwoud29rYXIub3JnCnxodHRwOi8vd29rYXIub3JnCndvbGZheC5j b20KfHx3b2xmYXguY29tCnx8d29vbHlzcy5jb20Kd29vcGllLmpwCnx8d29vcGll LmpwCndvb3BpZS50dgp8fHdvb3BpZS50dgp8fHdvcmthdHJ1bmEuY29tCi53b3Jr ZXJkZW1vLm9yZy5oawp8fHdvcmtlcnN0aGViaWcubmV0Ci53b3JsZGNhdC5vcmcK d29ybGRqb3VybmFsLmNvbQoud29ybGR2cG4ubmV0Cnx8d29ybGR2cG4ubmV0Cgp8 fHZpZGVvcHJlc3MuY29tCi53b3JkcHJlc3MuY29tCnxodHRwOi8vKi53b3JkcHJl c3MuY29tCnx8Y2hlbnNoYW4yMDA0MjAwNS53b3JkcHJlc3MuY29tCnx8Y2hpbmF2 aWV3LndvcmRwcmVzcy5jb20KfHxjbmJibmV3cy53b3JkcHJlc3MuY29tCnx8ZnJl ZWRvbWluZm9uZXR3ZWIud29yZHByZXNzLmNvbQp8fGhrYTg5NjQud29yZHByZXNz LmNvbQp8fGhrYW5ld3Mud29yZHByZXNzLmNvbQp8fGhxc2JuZXQud29yZHByZXNz LmNvbQp8fGhxc2JvbmxpbmUud29yZHByZXNzLmNvbQp8fGludmVzdGlnYXRpbmcu d29yZHByZXNzLmNvbQp8fGpvYm5ld2VyYS53b3JkcHJlc3MuY29tCnx8bWluZ2h1 aXl3LndvcmRwcmVzcy5jb20KfHx3bzN0dHQud29yZHByZXNzLmNvbQp8fHN1amlh dHVuLndvcmRwcmVzcy5jb20KfHx4aWppZS53b3JkcHJlc3MuY29tCnx8d3AuY29t CgohLXx8d29ybXNjdWxwdG9yLmNvbQoud293LmNvbQoud293LWxpZmUubmV0Cnx8 d293bGVnYWN5Lm1sCnx8d293cG9ybi5jb20KfHx3b3dnaXJscy5jb20KLndvd3Jr LmNvbQp3b3hpbmdodWlndW8uY29tCi53b3lhb2xpYW4ub3JnCnxodHRwOi8vd295 YW9saWFuLm9yZwoud3BvZm9ydW0uY29tCnx8d3BvZm9ydW0uY29tCi53cXlkLm9y Zwp8fHdxeWQub3JnCndyY2hpbmEub3JnCndyZXRjaC5jYwohLWNuLndzai5jb20v Z2IvMjAxMzAyMTUvdGVjMTEzODUzLmFzcAoud3NqLmNvbQp8fHdzai5jb20KLndz ai5uZXQKfHx3c2oubmV0Ci53c2poay5jb20KLnd0Ym4ub3JnCi53dGZwZW9wbGUu Y29tCnd1ZXJrYWl4aS5jb20KfHx3dWZhZmFuZ3dlbi5jb20Kd3VmaS5vcmcudHcK fHx3dWd1b2d1YW5nLmNvbQp3dWppZS5uZXQKd3VqaWVsaXVsYW4uY29tCnx8d3Vq aWVsaXVsYW4uY29tCnd1a2FuZ3J1aS5uZXQKfHx3dXcucmVkCnx8d3V5YW5ibG9n LmNvbQoud3dpdHYuY29tCnx8d3dpdHYuY29tCnd6eWJveS5pbS9wb3N0LzE2MAoK IS0tLS0tLS0tLS0tLS0tLS0tLS0tWFgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ci54LWJlcnJ5LmNvbQp8fHgtYmVycnkuY29tCnx8eC1hcnQuY29tCnx8eC13YWxs Lm9yZwp4MTk0OXguY29tCngzNjV4LmNvbQp4YW5nYS5jb20KfHx4YmFiZS5jb20K Lnhib29rY24uY29tCnx8eGJvb2tjbi5jb20KfHx4Y2FmZS5pbgp8fHhjaXR5Lmpw Ci54Y3JpdGljLmNvbQp8aHR0cDovL2NkbioueGRhLWRldmVsb3BlcnMuY29tCi54 ZXJvdGljYS5jb20KZGVzdGlueS54ZmlsZXMudG8vdWJidGhyZWFkcwoueGZtLnBw LnJ1Ci54Z215ZC5jb20KfHx4Z215ZC5jb20KeGhhbXN0ZXIuY29tCnx8eGhhbXN0 ZXIuY29tCi54aWFuYmEubmV0Ci54aWFuY2hhd2FuZy5uZXQKLnhpYW5qaWFuLnR3 CnxodHRwOi8veGlhbmppYW4udHcKLnhpYW5xaWFvLm5ldAoueGlhb2JhaXd1LmNv bQoueGlhb2NodW5jbmpwLmNvbQoueGlhb2QuaW4KLnhpYW9oZXhpZS5jb20KfHx4 aWFvbGFuLm1lCnx8eGlhb21hLm9yZwp8fHhpYW9oZXhpZS5jb20KeGllemh1YS5j b20KLnhpaHVhLmVzCmZvcnVtLnhpbmJhby5kZS9mb3J1bQoueGluZy5jb20KfGh0 dHA6Ly94aW5nLmNvbQoueGlubWlhby5jb20uaGsKfHx4aW5taWFvLmNvbS5oawp4 aW5zaGVuZy5uZXQKeGluc2hpanVlLmNvbQp4aW5odWFuZXQub3JnCnxodHRwOi8v eGlueXViYnMubmV0Ci54aW9uZ3BpYW4uY29tCi54aXVyZW4ub3JnCnhpemFuZy16 aGl5ZS5vcmcKeGpwLmNjCnx8eGpwLmNjCnx8eGp0cmF2ZWxndWlkZS5jb20KeGxm bXRhbGsuY29tCnx8eGxmbXd6LmluZm8KfHx4bWwtdHJhaW5pbmctZ3VpZGUuY29t Cnhtb3ZpZXMuY29tCnx8eG54eC5jb20KeHBkby5uZXQKfHx4cHVkLm9yZwoueHJl bnRkdmQuY29tCi54c2t5d2Fsa2VyLm5ldAp8fHh0dWJlLmNvbQpibG9nLnh1aXRl Lm5ldAp2bG9nLnh1aXRlLm5ldAp4dXpoaXlvbmcubmV0Cnx8eHVjaGFvLm9yZwp4 dWNoYW8ubmV0Cnx8eHVjaGFvLm5ldAp4dmlkZW8uY2MKLnh2aWRlb3MuY29tCnx8 eHZpZGVvcy5jb20KfHx4dmlkZW9zLmVzCi54a2l3aS50ay8KLnh4YmJ4LmNvbQou eHhsbW92aWVzLmNvbQp8fHh4eC5jb20KLnh4eC54eHgKfGh0dHA6Ly94eHgueHh4 Ci54eHhmdWNrbW9tLmNvbQp8fHh4eHguY29tLmF1Ci54eHh5bW92aWVzLmNvbQp8 aHR0cDovL3h4eHltb3ZpZXMuY29tCnh5cy5vcmcKeHlzYmxvZ3Mub3JnCnh5eTY5 LmNvbQp4eXk2OS5pbmZvCgohLS0tLS0tLS0tLS0tLS0tLS0tLS1ZWS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KfHx5YWtidXR0ZXJibHVlcy5jb20KeWFtLmNvbQp8 fHlhbS5jb20KfHx5YW0ub3JnLnR3Ci55YW5naGVuZ2p1bi5jb20KeWFuZ2ppYW5s aS5jb20KLnlhc25pLmNvLnVrCnx8eWFzbmkuY28udWsKIS0tfHx5YXN1a3VuaS5v ci5qcAoueWF5YWJheS5jb20vZm9ydW0KLnlkeS5jb20KLnllYWh0ZWVudHViZS5j b20KfHx5ZWFodGVlbnR1YmUuY29tCnx8eWVjbC5uZXQKfHx5ZWVsb3UuY29tCnll ZXlpLmNvbQp5ZWdsZS5uZXQKfHx5ZWdsZS5uZXQKLnllcy54eHgKfHx5ZXMxMjMu Y29tLnR3Cnx8eWVzYXNpYS5jb20KfHx5ZXNhc2lhLmNvbS5oawoueWVzLW5ld3Mu Y29tCnxodHRwOi8veWVzLW5ld3MuY29tCi55ZXNwb3JucGxlYXNlLmNvbQp8fHll c3Bvcm5wbGVhc2UuY29tCnxodHRwOi8veWV5ZWNsdWIuY29tCiEtLXlmcm9nLmNv bQp8fHloY3cubmV0Ci55aWJhZGEuY29tCi55aWJhb2NoaW5hLmNvbQoueWlkaW8u Y29tCnx8eWlkaW8uY29tCnlpbHViYnMuY29tCnhhLnlpbWcuY29tCi55aW5nc3Vv c3MuY29tCi55aXB1Yi5jb20KfHx5aXB1Yi5jb20KeWlubGVpLm9yZy9tdAoueWl6 aGlob25neGluZy5jb20KLnlvYnQuY29tCi55b2J0LnR2Cnx8eW9idC50dgoueW9n aWNoZW4ub3JnCnx8eW9naWNoZW4ub3JnCi55b2xhc2l0ZS5jb20KLnlvbWl1cmku Y28uanAKeW9uZy5odQoueW9ya2Jicy5jYQp8fHlvdXh1LmluZm8KLnlvdWppenou Y29tCnx8eW91aml6ei5jb20KLnlvdW1ha2VyLmNvbQp8fHlvdW1ha2VyLmNvbQou eW91bmdwb3JudmlkZW9zLmNvbQp5b3VuZ3NwaXJhdGlvbi5oawoueW91cGFpLm9y Zwp8fHlvdXBhaS5vcmcKLnlvdXItZnJlZWRvbS5uZXQKfHx5b3VyZXBlYXQuY29t Ci55b3VycHJpdmF0ZXZwbi5jb20KfHx5b3VycHJpdmF0ZXZwbi5jb20KLnlvdXNl bmRpdC5jb20KfHx5b3VzZW5kaXQuY29tCi55b3V0aG5ldHJhZGlvLm9yZy90bWl0 L2ZvcnVtCmJsb2cueW91dGh3YW50LmNvbS50dwptZS55b3V0aHdhbnQuY29tLnR3 CnNoYXJlLnlvdXRod2FudC5jb20udHcKdG9waWMueW91dGh3YW50LmNvbS50dwou eW91cG9ybi5jb20KfHx5b3Vwb3JuLmNvbQoueW91cG9ybmdheS5jb20KfHx5b3Vw b3JuZ2F5LmNvbQoueW91cmxpc3Rlbi5jb20KfGh0dHA6Ly95b3VybGlzdGVuLmNv bQoueW91cmx1c3QuY29tCnxodHRwOi8veW91cmx1c3QuY29tCnlvdXNodW4xMi5j b20KLnlvdXR1YmVjbi5jb20KeW91dmVyc2lvbi5jb20KfHx5b3V2ZXJzaW9uLmNv bQpibG9nLnlvdXh1LmluZm8vMjAxMC8wMy8xNC93ZXN0LWNoYW1iZXIKeXRodC5u ZXQKeXVhbm1pbmcubmV0Ci55dWFuemhlbmd0YW5nLm9yZwoueXVsZ2h1bi5jb20K fHx5dW5jaGFvLm5ldAp8fHl1bnRpcHViLmNvbQoueXV2dXR1LmNvbQp8fHl2ZXNn ZWxleW4uY29tCi55d3B3LmNvbS9mb3J1bXMvaGlzdG9yeS9wb3N0L0EwL3AwL2h0 bWwvMjI3Cnl4NTEubmV0Ci55eWlpLm9yZwp8fHl5aWkub3JnCi55enprLmNvbQp8 aHR0cDovL3l6emsuY29tCgohLS0tLS0tLS0tLS0tLS0tLS0tLS1aWi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KemFjZWJvb2suY29tCi56YWxtb3MuY29tCnx8emFs bW9zLmNvbQp8fHphbm5lbC5jb20KLnphb2Jhby5jb20KfHx6YW9iYW8uY29tCnxo dHRwOi8vemFvYmFvLmNvbS5zZwp8fHphb2Jhby5jb20uc2cKLnphb3pvbi5jb20K fHx6ZG5ldC5jb20udHcKLnplbGxvLmNvbQp8fHplbGxvLmNvbQouemVuZ2ppbnlh bi5vcmcKLnplbm1hdGUuY29tCnx8emVubWF0ZS5jb20KfHx6ZW5tYXRlLmNvbS5y dQp8fHplcm9uZXQuaW8KfHx6ZXV0Y2guY29tCiEtLXd3dy56ZnJlZXQuY29tL3Bv c3QvdXNlanVtcC1icm93bnMuaHRtbAouemZyZWV0LmNvbQouemdzZGRoLmNvbQp6 Z3pjamoubmV0Ci56aGFuYmluLm5ldAp8fHpoYW5iaW4ubmV0Ci56aGFuZ2JvbGku bmV0Cnx8emhhbmd0aWFubGlhbmcuY29tCnx8emhhbmx2ZS5vcmcKemhlbmdodWku b3JnCi56aGVuZ2ppYW4ub3JnCnx8emhlbmdqaWFuLm9yZwp6aGVuZ3d1bmV0Lm9y Zwp6aGVubGlidS5pbmZvCnx8emhlbmxpYnUuaW5mbwouemhlbmxpYnUxOTg0LmNv bQp8fHpoZW5saWJ1MTk4NC5jb20KfGh0dHA6Ly96aGVueGlhbmcuYml6Ci56aGlu ZW5nbHV5b3UuY29tCnpob25nZ3VvLmNhCnxodHRwOi8vemhvbmdndW9yZW5xdWFu Lm9yZwp6aG9uZ2d1b3Rlc2UubmV0Cnx8emhvbmdndW90ZXNlLm5ldAp8fHpob25n bWVuZy5vcmcKLnpob3VzaHVndWFuZy5jb20KfHx6aHJlYWRlci5jb20KLnpodWFu Z2JpLm1lCnx8emh1YW5nYmkubWUKLnpodWFueGluZy5jbgp8fHpodWF0aWViYS5j b20Kemh1aWNoYWd1b2ppLm9yZwp8fHpodWljaGFndW9qaS5vcmcKfGh0dHA6Ly9i b29rLnppNS5tZQouemlkZHUuY29tL2Rvd25sb2FkCnx8emlsbGlvbmsuY29tCi56 aW5pby5jb20KfHx6aW5pby5jb20KLnppcG9ybi5jb20KLnppcHB5c2hhcmUuY29t Ci56a2FpcC5jb20KfHx6a2FpcC5jb20KcmVhbGZvcnVtLnpraXouY29tCiEtLXx8 emxpYi5uZXQKfHx6bXcuY24KLnpvZGdhbWUudXMKem9tb2JvLm5ldAouem9uYWV1 cm9wYS5jb20KfHx6b25hZXVyb3BhLmNvbQp8fHpvbmdoZXhpbndlbi5jb20KLnpv bmdoZXhpbndlbi5uZXQKfHx6b29ndnBuLmNvbQp8fHpvb3Rvb2wuY29tCi56b296 bGUubmV0CndyaXRlci56b2hvLmNvbQp8fHpvcnJvdnBuLmNvbQp8fHpwbi5pbQp8 fHpzcGVlZGVyLm1lCi56c3JoYW8uY29tCi56dW8ubGEKfHx6dW8ubGEKfHx6dW9i aWFvLm1lCi56dW9sYS5jb20KfHx6dW9sYS5jb20KfHx6dmVyZWZmLmNvbQouenlu YWltYS5jb20Kenl6YzkuY29tCi56emNhcnRvb24uY29tCiEjIyMjIyMjIyMjIyMj I0dlbmVyYWwgTGlzdCBFbmQjIyMjIyMjIyMjIyMjIyMjIwoKISMjIyMjIyMjIyMj U3VwcGxlbWVudGFsIExpc3QgU3RhcnQjIyMjIyMjIyMjIyMjCiEtLS0tLS0tLS0t LS0tLS0tLVVSTCBLZXl3b3Jkcy0tLS0tLS0tLS0tLS0tLS0tLQo2NG1lbW8KYUhS MGNITTZMeTk1WldOc0xtNWxkQQpmcmVlbmV0Ci5nb29nbGUuKi9mYWx1bgpwaG9i b3MuYXBwbGUuY29tKi92aWRlbwpxPWZyZWVkb20KcSUzRGZyZWVkb20KcmVtZW1i ZXJpbmdfdGlhbmFubWVuXzIwX3llYXJzCnNlYXJjaCpzYWZld2ViCnE9dHJpYW5n bGUKcSUzRFRyaWFuZ2xlCnVsdHJhcmVhY2gKdWx0cmFzdXJmCiEjIyMjIyMjIyMj IyMjU3VwcGxlbWVudGFsIExpc3QgRW5kIyMjIyMjIyMjIyMjIwoKISMjIyMjIyMj IyMjIyMjIyNXaGl0ZWxpc3QgU3RhcnQjIyMjIyMjIyMjIyMjIyMjCkBAfHxhbGl5 dW4uY29tCkBAfHxiYWlkdS5jb20KIS0tQEB8fGJpbmcuY29tCkBAfHxjaGluYXNv LmNvbQpAQHx8Y2hpbmF6LmNvbQpAQHxodHRwOi8vbnJjaC5jdWx0dXJlLnR3Lwoh LS1JU1AgY2FjaGUgd29ya3Mgc29tZXRpbWVzLCB2ZXJpZmllZCBhdCBkcnBlbmcg KyBnZWh1YS4KQEB8fGRsLmdvb2dsZS5jb20KQEB8fGtoLmdvb2dsZS5jb20KQEB8 fGtobS5nb29nbGUuY29tCkBAfHxraG0wLmdvb2dsZS5jb20KQEB8fGtobTEuZ29v Z2xlLmNvbQpAQHx8a2htMi5nb29nbGUuY29tCkBAfHxraG0zLmdvb2dsZS5jb20K QEB8fGtobWRiLmdvb2dsZS5jb20KQEB8fHRvb2xzLmdvb2dsZS5jb20KQEB8fGNs aWVudHNlcnZpY2VzLmdvb2dsZWFwaXMuY29tCkBAfHxmb250cy5nb29nbGVhcGlz LmNvbQpAQHx8a2htLmdvb2dsZWFwaXMuY29tCkBAfHxraG0wLmdvb2dsZWFwaXMu Y29tCkBAfHxraG0xLmdvb2dsZWFwaXMuY29tCkBAfHxraG0yLmdvb2dsZWFwaXMu Y29tCkBAfHxraG0zLmdvb2dsZWFwaXMuY29tCkBAfHxraG1kYi5nb29nbGVhcGlz LmNvbQpAQHx8c3RvcmFnZS5nb29nbGVhcGlzLmNvbQpAQHx8dHJhbnNsYXRlLmdv b2dsZWFwaXMuY29tCkBAfHx1cGRhdGUuZ29vZ2xlYXBpcy5jb20KQEB8fHNhZmVi cm93c2luZy5nb29nbGVhcGlzLmNvbQpAQHx8Y24uZ3JhdmF0YXIuY29tCkBAfHxj b25uZWN0aXZpdHljaGVjay5nc3RhdGljLmNvbQpAQHx8Y3NpLmdzdGF0aWMuY29t CkBAfHxmb250cy5nc3RhdGljLmNvbQpAQHx8c3NsLmdzdGF0aWMuY29tCkBAfHxo YW9zb3UuY29tCkBAfHxpcC5jbgpAQHx8amlrZS5jb20KQEB8aHR0cDovL3RyYW5z bGF0ZS5nb29nbGUuY24KQEB8aHR0cDovL3d3dy5nb29nbGUuY24vbWFwcwpAQHx8 aHR0cDIuZ29sYW5nLm9yZwpAQHx8Z292LmNuCkBAfHxxcS5jb20KQEB8fHNpbmEu Y24KQEB8fHNpbmEuY29tLmNuCkBAfHxzb2dvdS5jb20KQEB8fHNvLmNvbQpAQHx8 c29zby5jb20KQEB8fHVsdWFpLmNvbS5jbgpAQHx8d2VpYm8uY29tCkBAfHx5YWhv by5jbgpAQHx8eW91ZGFvLmNvbQpAQHx8emhvbmdzb3UuY29tCkBAfGh0dHA6Ly9p bWUuYmFpZHUuanAKISMjIyMjIyMjIyMjIyMjIyNXaGl0ZWxpc3QgRW5kIyMjIyMj IyMjIyMjIyMjIyMjCiEtLS0tLS0tLS0tLS0tLS0tLS0tLS1FT0YtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQo= ================================================ FILE: Trojan/File/user-rule.txt ================================================ ! Put user rules line by line in this file. ! See https://adblockplus.org/en/filter-cheatsheet ================================================ FILE: Trojan/File/whiteiplist.pac ================================================ var wall_proxy = "SOCKS5 127.0.0.1:1080;"; var nowall_proxy = "DIRECT;"; var direct = "DIRECT;"; var ip_proxy = "DIRECT;"; /* * Copyright (C) 2014 breakwa11 * https://github.com/breakwa11/gfw_whitelist */ var cnIpRange = [ {},{0x10001:1,0x10002:1,0x10003:1,0x10008:4,0x1000c:4,0x10020:16,0x10030:16,0x10100:1,0x10102:1,0x10103:1,0x10104:4,0x10108:4,0x1010c:4,0x10110:16,0x10120:16,0x10130:16,0x10200:1,0x10201:1,0x10202:1,0x10204:1,0x10205:1,0x10206:1,0x10207:1,0x10208:1,0x10209:1,0x1020a:1,0x1020b:1,0x1020c:4,0x10210:16,0x10220:16,0x10230:16,0x10240:64,0x10300:256,0x10401:1,0x10402:1,0x10403:1,0x10404:1,0x10405:1,0x10406:1,0x10407:1,0x10408:4,0x1040c:4,0x10410:16,0x10420:16,0x10430:16,0x10440:64,0x10800:256,0x10a00:4,0x10a04:4,0x10a08:1,0x10a09:1,0x10a0b:1,0x10a0c:4,0x10a10:16,0x10a20:16,0x10a30:16,0x10a40:64,0x10c00:1024,0x11800:1024,0x11c00:1024,0x12d00:256,0x13000:256,0x13100:256,0x13200:256,0x13300:256,0x13800:1024,0x13c00:1024,0x14400:1024,0x15000:1024,0x15400:1024,0x15800:1024,0x15c00:256,0x15d00:256,0x15e00:256,0x15f00:256,0x17400:1024,0x1b400:1024,0x1b800:256,0x1b900:256,0x1bc00:1024,0x1c000:1024,0x1c400:1024,0x1ca00:256,0x1cb00:256,0x1cc00:1024},{},{},{},{},{},{},{},{},{},{},{},{},{0xe0000:4,0xe0004:4,0xe000c:4,0xe0100:4,0xe0118:4,0xe0160:4,0xe016c:4,0xe1000:1024,0xe1400:1024,0xe1800:1024,0xe1c00:1024,0xe6680:4,0xe669c:4,0xe66b4:4,0xe6700:256,0xe6800:1024,0xe6c00:1024,0xe7000:1024,0xe7400:1024,0xe7800:1024,0xe7c00:1024,0xe8200:256,0xe8300:256,0xe8600:256,0xe8700:256,0xe9000:1024,0xe9400:1024,0xe9800:1024,0xe9c00:1024,0xec004:4,0xec03c:4,0xec04c:4,0xec400:256,0xec500:256,0xecc00:256,0xecd00:256,0xed000:1024,0xed400:1024,0xed800:1024,0xedc00:1024},{},{},{},{},{},{},{},{},{},{},{},{},{0x1b0080:4,0x1b0084:4,0x1b00a0:4,0x1b00a4:4,0x1b00bc:4,0x1b00cc:4,0x1b00d0:4,0x1b00d4:4,0x1b0800:1024,0x1b0c00:1024,0x1b1000:1024,0x1b1400:1024,0x1b1800:1024,0x1b1c00:1024,0x1b22e8:4,0x1b22ec:4,0x1b2400:1024,0x1b2800:1024,0x1b2c00:1024,0x1b3228:4,0x1b322c:4,0x1b3280:64,0x1b32c0:64,0x1b3648:4,0x1b364c:4,0x1b3698:4,0x1b369c:4,0x1b36c0:64,0x1b62d0:16,0x1b62e0:16,0x1b62f0:16,0x1b6380:64,0x1b63c0:64,0x1b6700:256,0x1b6a80:64,0x1b6acc:4,0x1b6d20:16,0x1b6d30:16,0x1b6d7c:4,0x1b7000:64,0x1b7050:16,0x1b7070:4,0x1b7074:4,0x1b7180:64,0x1b7300:64,0x1b7340:64,0x1b742c:4,0x1b7948:4,0x1b794c:4,0x1b7978:4,0x1b797c:4,0x1b8000:256,0x1b8100:256,0x1b83dc:4,0x1b9000:256,0x1b9400:1024,0x1b9800:1024,0x1b9c00:1024,0x1bb800:1024,0x1bbc00:1024,0x1bc000:1024,0x1bc400:1024,0x1bc800:1024,0x1bcc00:1024,0x1bd000:1024,0x1bd400:1024,0x1bd800:1024,0x1bdc00:1024,0x1be000:1024},{},{},{},{},{},{},{},{},{0x240000:4,0x240008:4,0x24000c:4,0x240010:16,0x240020:16,0x240030:16,0x240040:64,0x240080:64,0x2400c0:64,0x240100:256,0x240400:1024,0x241000:1024,0x241400:1024,0x241800:1024,0x241c00:1024,0x242000:1024,0x242400:256,0x242500:16,0x242510:16,0x242524:1,0x242525:1,0x242527:1,0x242528:4,0x24252c:4,0x242530:16,0x242800:1024,0x242c00:1024,0x243000:256,0x243100:256,0x243300:256,0x243800:1024,0x243c00:1024,0x246000:1024,0x246400:1024,0x246800:1024,0x246c00:1024,0x247000:1024,0x247400:1024,0x247800:1024,0x247c00:1024,0x248000:1024,0x248400:1024,0x248800:1024,0x248c00:1024,0x249000:1024,0x249400:1024,0x249800:1024,0x249c00:1024,0x24a000:1024,0x24a400:1024,0x24a800:1024,0x24ac00:1024,0x24b000:1024,0x24b400:1024,0x24b800:1024,0x24bc00:1024,0x24c000:1024,0x24c400:1024,0x24c800:1024,0x24cc00:1024,0x24d000:1024,0x24d400:1024,0x24d800:1024,0x24dc00:1024,0x24f800:1024,0x24fe00:256,0x24ff74:4,0x24ff80:4,0x24ffa4:4,0x24ffac:4,0x24ffb0:4,0x24ffc0:4},{},{},{0x270000:1,0x270002:1,0x270003:1,0x270004:4,0x270008:4,0x27000c:4,0x270010:16,0x270020:16,0x270030:16,0x270040:64,0x270080:64,0x2700c0:64,0x274000:1024,0x274400:1024,0x274800:1024,0x274c00:1024,0x275000:1024,0x275400:1024,0x275800:1024,0x275c00:1024,0x276000:1024,0x276400:1024,0x276800:1024,0x276c00:256,0x278000:1024,0x278400:1024,0x278800:1024,0x278c00:1024,0x279000:1024,0x279400:1024,0x279800:1024,0x279c00:1024,0x27a000:1024,0x27a400:1024,0x27a800:1024,0x27ac00:1024,0x27b000:1024,0x27b400:1024,0x27b800:1024,0x27bc00:1024},{0x284800:256,0x284900:256,0x287d80:64,0x287dc0:64,0x287e40:64},{},{0x2a0000:4,0x2a0008:4,0x2a000c:4,0x2a0010:4,0x2a0014:4,0x2a0018:4,0x2a0020:16,0x2a0030:16,0x2a0080:64,0x2a00c0:64,0x2a0100:16,0x2a0110:16,0x2a0120:16,0x2a0130:4,0x2a0134:4,0x2a0138:4,0x2a0180:64,0x2a01c0:64,0x2a0400:1024,0x2a3000:256,0x2a3100:256,0x2a3200:256,0x2a3300:256,0x2a3400:1024,0x2a3800:1024,0x2a3e00:64,0x2a3e40:64,0x2a3e80:16,0x2a3e90:16,0x2a3ea0:16,0x2a3eb4:4,0x2a3eb8:4,0x2a3ebc:4,0x2a3f00:256,0x2a5000:256,0x2a5100:256,0x2a5340:16,0x2a5350:4,0x2a5358:4,0x2a535c:4,0x2a5360:16,0x2a5370:16,0x2a5380:64,0x2a53c0:64,0x2a5400:1024,0x2a5800:1024,0x2a5c00:1024,0x2a6040:16,0x2a6050:16,0x2a6060:4,0x2a6064:4,0x2a606c:4,0x2a6070:16,0x2a6080:64,0x2a60c0:64,0x2a6100:256,0x2a6300:64,0x2a6340:16,0x2a6350:16,0x2a6360:16,0x2a6370:4,0x2a6378:4,0x2a637c:4,0x2a6400:1024,0x2a7800:256,0x2a7900:256,0x2a7a00:256,0x2a7b00:16,0x2a7b10:16,0x2a7b24:4,0x2a7b28:4,0x2a7b2c:4,0x2a7b30:16,0x2a7b40:64,0x2a7b80:64,0x2a7bc0:64,0x2a8000:1024,0x2a8400:1024,0x2a8800:1024,0x2a8c00:1024,0x2a9c00:16,0x2a9c10:16,0x2a9c24:4,0x2a9c28:4,0x2a9c2c:4,0x2a9c30:16,0x2a9c40:64,0x2a9c80:64,0x2a9cc0:64,0x2a9d00:256,0x2a9e00:256,0x2a9f00:256,0x2aa000:1024,0x2aa400:1024,0x2aa800:1024,0x2aac00:1024,0x2ab000:1024,0x2ab400:1024,0x2ab800:256,0x2ab900:256,0x2aba00:256,0x2abb00:64,0x2abb40:16,0x2abb50:16,0x2abb60:16,0x2abb70:4,0x2abb74:4,0x2abb78:4,0x2abb80:64,0x2abbc0:64,0x2ac000:256,0x2ac100:256,0x2ac200:4,0x2ac204:4,0x2ac208:4,0x2ac20c:4,0x2ac210:16,0x2ac220:16,0x2ac230:16,0x2ac240:64,0x2ac280:64,0x2ac2c0:64,0x2ac300:256,0x2ac400:1024,0x2ac900:64,0x2ac940:64,0x2aca00:256,0x2acb00:256,0x2acc00:1024,0x2ad000:1024,0x2ad400:1024,0x2ad800:1024,0x2adc00:1024,0x2ae000:1024,0x2ae400:1024,0x2ae800:1024,0x2aec00:1024,0x2af000:64,0x2af040:64,0x2af080:64,0x2af0c0:64,0x2af200:256,0x2af300:256,0x2af400:1024,0x2af800:1024,0x2afc00:1024},{0x2be00c:4,0x2be018:4,0x2be02c:4,0x2be034:4,0x2be038:4,0x2be040:4,0x2be044:4,0x2be048:4,0x2be050:4,0x2be064:4,0x2be090:4,0x2be0a0:4,0x2be0b0:4,0x2be0b8:4,0x2be0c8:4,0x2be0cc:4,0x2be0d0:4,0x2be0d4:4,0x2be0d8:4,0x2be0e0:4,0x2be0f0:4,0x2be14c:4,0x2be154:4,0x2be178:4,0x2be17c:4,0x2be18c:4,0x2be1ac:4,0x2be1b4:4,0x2be1d0:4,0x2be1d8:4,0x2be1dc:4,0x2be1e0:4,0x2be1e4:4,0x2be1e8:4,0x2be1ec:4,0x2be1f0:4,0x2be1f4:4,0x2be1fc:4,0x2be220:4,0x2be224:4,0x2be228:4,0x2be22c:4,0x2be230:4,0x2be234:4,0x2be238:4,0x2be23c:4,0x2be240:4,0x2be244:4,0x2be248:4,0x2be24c:4,0x2be250:4,0x2be254:4,0x2be258:4,0x2be25c:4,0x2be260:4,0x2be264:4,0x2be268:4,0x2be26c:4,0x2be270:4,0x2be274:4,0x2be278:4,0x2be280:4,0x2be284:4,0x2be288:4,0x2be28c:4,0x2be290:4,0x2be294:4,0x2be298:4,0x2be29c:4,0x2be2a0:4,0x2be2a4:4,0x2be2a8:4,0x2be2ac:4,0x2be2b0:4,0x2be2b4:4,0x2be2b8:4,0x2be2bc:4,0x2be2c0:4,0x2be2c4:4,0x2be2c8:4,0x2be2cc:4,0x2be2d0:4,0x2be2d4:4,0x2be2ec:4,0x2be2f0:4,0x2be2f4:4,0x2be2f8:4,0x2be2fc:4,0x2be300:4,0x2be304:4,0x2be308:4,0x2be31c:4,0x2be320:4,0x2be324:4,0x2be328:4,0x2be32c:4,0x2be330:4,0x2be334:4,0x2be338:4,0x2be33c:4,0x2be340:4,0x2be344:4,0x2be348:4,0x2be34c:4,0x2be350:4,0x2be354:4,0x2be358:4,0x2be35c:4,0x2be360:4,0x2be364:4,0x2be368:4,0x2be388:4,0x2be38c:4,0x2be390:4,0x2be398:4,0x2be39c:4,0x2be3a0:4,0x2be3a4:4,0x2be3a8:4,0x2be3ac:4,0x2be3b0:4,0x2be3b4:4,0x2be3bc:4,0x2be3c0:4,0x2be3c4:4,0x2be3c8:4,0x2be3cc:4,0x2be3d0:4,0x2be3d4:4,0x2be3d8:4,0x2be3dc:4,0x2be3e8:4,0x2be3f8:4,0x2be3fc:4,0x2be400:4,0x2be404:4,0x2be408:4,0x2be40c:4,0x2be410:4,0x2be414:4,0x2be418:4,0x2be41c:4,0x2be420:4,0x2be424:4,0x2be428:4,0x2be42c:4,0x2be430:4,0x2be434:4,0x2be438:4,0x2be43c:4,0x2be440:4,0x2be444:4,0x2be44c:4,0x2be464:4,0x2be474:4,0x2be478:4,0x2be484:4,0x2be488:4,0x2be494:4,0x2be498:4,0x2be4b4:4,0x2be4bc:4,0x2be4cc:4,0x2be4f0:4,0x2be510:4,0x2be528:4,0x2be530:4,0x2be538:4,0x2be560:4,0x2be56c:4,0x2be578:4,0x2be588:4,0x2be58c:4,0x2be590:4,0x2be5a8:4,0x2be5ac:4,0x2be5b0:4,0x2be5b4:4,0x2be5b8:4,0x2be5bc:4,0x2be5c0:4,0x2be5c4:4,0x2be5d8:4,0x2be5dc:4,0x2be5e8:4,0x2be5ec:4,0x2be614:4,0x2be620:4,0x2be644:4,0x2be648:4,0x2be654:4,0x2be67c:4,0x2be688:4,0x2be6a8:4,0x2be6dc:4,0x2be6e0:4,0x2be6e4:4,0x2be6e8:4,0x2be6ec:4,0x2be6f0:4,0x2be6f4:4,0x2be6f8:4,0x2be6fc:4,0x2be720:4,0x2be724:4,0x2be728:4,0x2be72c:4,0x2be750:4,0x2be754:4,0x2be758:4,0x2be75c:4,0x2be760:4,0x2be764:4,0x2be768:4,0x2be76c:4,0x2be788:4,0x2be78c:4,0x2be790:4,0x2be794:4,0x2be798:4,0x2be79c:4,0x2be7a0:4,0x2be7a4:4,0x2be7a8:4,0x2be7ac:4,0x2be7b0:4,0x2be7b4:4,0x2bec00:4,0x2bec04:4,0x2bec08:4,0x2bec0c:4,0x2bec10:4,0x2bec14:4,0x2bec18:4,0x2bec1c:4,0x2bec20:4,0x2bec24:4,0x2bec28:4,0x2bec2c:4,0x2bec30:4,0x2bec34:4,0x2bec38:4,0x2bec3c:4,0x2bec40:4,0x2bec44:4,0x2bec48:4,0x2bec4c:4,0x2bec50:4,0x2bec54:4,0x2bec58:4,0x2bec5c:4,0x2bec60:4,0x2bec64:4,0x2bec68:4,0x2bec6c:4,0x2bec70:4,0x2bec74:4,0x2bec78:4,0x2bec7c:4,0x2bec80:4,0x2bec84:4,0x2bec88:4,0x2bec8c:4,0x2bec90:4,0x2bec94:4,0x2bec98:4,0x2bec9c:4,0x2beca0:4,0x2beca4:4,0x2beca8:4,0x2becac:4,0x2becb0:4,0x2becb4:4,0x2becb8:4,0x2becbc:4,0x2becc0:4,0x2becc4:4,0x2becc8:4,0x2beccc:4,0x2becd0:4,0x2becd4:4,0x2becd8:4,0x2becdc:4,0x2bece0:4,0x2bece4:4,0x2bece8:4,0x2becec:4,0x2becf0:4,0x2becf4:4,0x2becf8:4,0x2becfc:4,0x2bed00:4,0x2bed04:4,0x2bed08:4,0x2bed0c:4,0x2bed10:4,0x2bed14:4,0x2bed18:4,0x2bed1c:4,0x2bed20:4,0x2bed24:4,0x2bed28:4,0x2bed2c:4,0x2bed30:4,0x2bed34:4,0x2bed38:4,0x2bed3c:4,0x2bed40:4,0x2bed44:4,0x2bed48:4,0x2bed4c:4,0x2bed50:4,0x2bed54:4,0x2bed58:4,0x2bed5c:4,0x2bed60:4,0x2bed64:4,0x2bed68:4,0x2bed6c:4,0x2bed70:4,0x2bed74:4,0x2bed78:4,0x2bed7c:4,0x2bed80:4,0x2bed84:4,0x2bed88:4,0x2bed8c:4,0x2bed90:4,0x2bed94:4,0x2bed98:4,0x2bed9c:4,0x2beda0:4,0x2beda4:4,0x2beda8:4,0x2bedac:4,0x2bedb0:4,0x2bedb4:4,0x2bedb8:4,0x2bedbc:4,0x2bedc0:4,0x2bedc4:4,0x2bedc8:4,0x2bedcc:4,0x2bedd0:4,0x2bedd4:4,0x2bedd8:4,0x2beddc:4,0x2bede0:4,0x2bede4:4,0x2bede8:4,0x2bedec:4,0x2bedf0:4,0x2bedf4:4,0x2bedf8:4,0x2bedfc:4,0x2bee00:4,0x2bee04:4,0x2bee08:4,0x2bee0c:4,0x2bee10:4,0x2bee14:4,0x2bee18:4,0x2bee1c:4,0x2bee20:4,0x2bee24:4,0x2bee28:4,0x2bee2c:4,0x2bee30:4,0x2bee34:4,0x2bee38:4,0x2bee3c:4,0x2bee40:4,0x2bee44:4,0x2bee48:4,0x2bee4c:4,0x2bee50:4,0x2bee54:4,0x2bee58:4,0x2bee5c:4,0x2bee60:4,0x2bee64:4,0x2bee68:4,0x2bee6c:4,0x2bee70:4,0x2bee74:4,0x2bee78:4,0x2bee7c:4,0x2bee80:4,0x2bee84:4,0x2bee88:4,0x2bee8c:4,0x2bee90:4,0x2bee94:4,0x2bee98:4,0x2bee9c:4,0x2beea0:4,0x2beea4:4,0x2beea8:4,0x2beeac:4,0x2beeb0:4,0x2beeb4:4,0x2beeb8:4,0x2beebc:4,0x2beec0:4,0x2beec4:4,0x2beec8:4,0x2beecc:4,0x2beed0:4,0x2beed4:4,0x2beed8:4,0x2beedc:4,0x2beee0:4,0x2beee4:4,0x2beee8:4,0x2beeec:4,0x2beef0:4,0x2beef4:4,0x2beef8:4,0x2beefc:4,0x2bef00:4,0x2bef04:4,0x2bef08:4,0x2bef0c:4,0x2bef10:4,0x2bef14:4,0x2bef18:4,0x2bef1c:4,0x2bef20:4,0x2bef24:4,0x2bef28:4,0x2bef2c:4,0x2bef30:4,0x2bef74:4,0x2bef78:4,0x2befac:4,0x2befb0:4,0x2bf000:4,0x2bf030:4,0x2bf038:4,0x2bf03c:4,0x2bf044:4,0x2bf048:4,0x2bf04c:4,0x2bf054:4,0x2bf07c:4,0x2bf080:4,0x2bf084:4,0x2bf088:4,0x2bf09c:4,0x2bf0a0:4,0x2bf0a4:4,0x2bf0a8:4,0x2bf0ac:4,0x2bf0b0:4,0x2bf0b4:4,0x2bf0b8:4,0x2bf0bc:4,0x2bf0c0:4,0x2bf0c4:4,0x2bf0c8:4,0x2bf0cc:4,0x2bf0d0:4,0x2bf0d4:4,0x2bf0d8:4,0x2bf0dc:4,0x2bf0ec:4,0x2bf0f0:4,0x2bf0f4:4,0x2bf0f8:4,0x2bf0fc:4,0x2bf100:4,0x2bf104:4,0x2bf108:4,0x2bf10c:4,0x2bf110:4,0x2bf114:4,0x2bf130:4,0x2bf14c:4,0x2bf150:4,0x2bf154:4,0x2bf158:4,0x2bf15c:4,0x2bf170:4,0x2bf1a8:4,0x2bf1ac:4,0x2bf1b0:4,0x2bf1b4:4,0x2bf1b8:4,0x2bf1c4:4,0x2bf1d0:4,0x2bf1d4:4,0x2bf1d8:4,0x2bf1dc:4,0x2bf1e0:4,0x2bf1e4:4,0x2bf1e8:4,0x2bf1ec:4,0x2bf1f0:4,0x2bf1f8:4,0x2bf1fc:4,0x2bf208:4,0x2bf20c:4,0x2bf210:4,0x2bf214:4,0x2bf218:4,0x2bf21c:4,0x2bf22c:4,0x2bf230:4,0x2bf234:4,0x2bf238:4,0x2bf23c:4,0x2bf240:4,0x2bf248:4,0x2bf24c:4,0x2bf250:4,0x2bf254:4,0x2bf258:4,0x2bf25c:4,0x2bf260:4,0x2bf290:4,0x2bf294:4,0x2bf298:4,0x2bf29c:4,0x2bf2a0:4,0x2bf2a4:4,0x2bf2a8:4,0x2bf2b4:4,0x2bf2bc:4,0x2bf2c0:4,0x2bf2c4:4,0x2bf2cc:4,0x2bf2d8:4,0x2bf2dc:4,0x2bf2fc:4,0x2bf304:4,0x2bf308:4,0x2bf30c:4,0x2bf310:4,0x2bf318:4,0x2bf358:4,0x2bf380:4,0x2bf388:4,0x2bf390:4,0x2bf394:4,0x2bf39c:4,0x2bf3a8:4,0x2bf3b4:4,0x2bf3bc:4,0x2bf3e4:4,0x2bf3e8:4,0x2bf3f4:4,0x2bf600:4,0x2bf604:4,0x2bf608:4,0x2bf60c:4,0x2bf610:4,0x2bf614:4,0x2bf618:4,0x2bf61c:4,0x2bf620:4,0x2bf624:4,0x2bf628:4,0x2bf62c:4,0x2bf630:4,0x2bf634:4,0x2bf638:4,0x2bf63c:4,0x2bf640:4,0x2bf644:4,0x2bf648:4,0x2bf64c:4,0x2bf650:4,0x2bf654:4,0x2bf658:4,0x2bf65c:4,0x2bf660:4,0x2bf6d4:4,0x2bf6e4:4,0x2bf704:4,0x2bf708:4,0x2bf72c:4,0x2bf730:4,0x2bf744:4,0x2bf74c:4,0x2bf754:4,0x2bf758:4,0x2bf75c:4,0x2bf760:4,0x2bf764:4,0x2bf76c:4,0x2bf770:4,0x2bf794:4,0x2bf798:4,0x2bf7b0:4,0x2bf7b4:4,0x2bf7b8:4,0x2bf7bc:4,0x2bf7c4:4,0x2bf7c8:4,0x2bf7cc:4,0x2bf7d0:4,0x2bf7d4:4,0x2bf7d8:4,0x2bf7dc:4,0x2bf7e0:4,0x2bf7e4:4,0x2bf7e8:4,0x2bf7ec:4,0x2bf7f0:4,0x2bf7f4:4,0x2bf7f8:4,0x2bf7fc:4,0x2bf800:4,0x2bf804:4,0x2bf814:4,0x2bf81c:4,0x2bf830:4,0x2bf84c:4,0x2bf850:4,0x2bf854:4,0x2bf858:4,0x2bf85c:4,0x2bf860:4,0x2bf864:4,0x2bf868:4,0x2bf86c:4,0x2bf870:4,0x2bf874:4,0x2bf878:4,0x2bf87c:4,0x2bf880:4,0x2bf884:4,0x2bf888:4,0x2bf88c:4,0x2bf890:4,0x2bf894:4,0x2bf8b0:4,0x2bf8b4:4,0x2bf8b8:4,0x2bf8bc:4,0x2bf8c0:4,0x2bf8c4:4,0x2bf8c8:4,0x2bf8cc:4,0x2bf8d0:4,0x2bf8e4:4,0x2bf8e8:4,0x2bf8f4:4,0x2bf900:4,0x2bf904:4,0x2bf908:4,0x2bf918:4,0x2bf978:4,0x2bf984:4,0x2bf988:4,0x2bf990:4,0x2bf994:4,0x2bf998:4,0x2bf99c:4,0x2bf9a0:4,0x2bf9a4:4,0x2bf9a8:4,0x2bf9c0:4,0x2bf9ec:4,0x2bfa04:4,0x2bfa0c:4,0x2bfa10:4,0x2bfa14:4,0x2bfa1c:4,0x2bfa20:4,0x2bfa24:4,0x2bfa48:4,0x2bfa60:4,0x2bfa64:4,0x2bfa68:4,0x2bfa6c:4,0x2bfa70:4,0x2bfa74:4,0x2bfa80:4,0x2bfa90:4,0x2bfa94:4,0x2bfaa0:4,0x2bfaa8:4,0x2bfaac:4,0x2bfab0:4,0x2bfac8:4,0x2bfad4:4,0x2bfad8:4,0x2bfadc:4,0x2bfaec:4,0x2bfaf4:4,0x2bfb04:4,0x2bfb08:4,0x2bfb0c:4,0x2bfb24:4,0x2bfb74:4,0x2bfbc0:4,0x2bfbe8:4,0x2bfbec:4,0x2bfbf4:4,0x2bfc28:4,0x2bfc30:4,0x2bfc38:4,0x2bfce0:4,0x2bfe00:4,0x2bfe04:4,0x2bfe08:4,0x2bfe18:4,0x2bfe24:4,0x2bfe2c:4,0x2bfe34:4,0x2bfe40:4,0x2bfe48:4,0x2bfe54:4,0x2bfe58:4,0x2bfe5c:4,0x2bfe64:4,0x2bfe68:4,0x2bfe70:4,0x2bfe74:4,0x2bfe80:4,0x2bfe88:4,0x2bfe8c:4,0x2bfe90:4,0x2bfe94:4,0x2bfe98:4,0x2bfe9c:4,0x2bfea8:4,0x2bfeac:4,0x2bfeb4:4,0x2bfeb8:4,0x2bfebc:4,0x2bfec0:4,0x2bfec4:4,0x2bfec8:4,0x2bfed0:4,0x2bfedc:4,0x2bfee0:4,0x2bfee4:4,0x2bfee8:4,0x2bfeec:4,0x2bfef0:4,0x2bfef8:4,0x2bfefc:4,0x2bff00:4,0x2bff04:4,0x2bff08:4,0x2bff10:4,0x2bff30:4,0x2bff3c:4,0x2bff40:4,0x2bff44:4,0x2bff48:4,0x2bff4c:4,0x2bff54:4,0x2bff60:4,0x2bff6c:4,0x2bff90:4,0x2bffa8:4,0x2bffb0:4,0x2bffb8:4,0x2bffc0:4,0x2bffc8:4,0x2bffcc:4,0x2bffd0:4,0x2bffd4:4,0x2bffe0:4,0x2bffe4:4,0x2bffe8:4,0x2bfff4:4},{},{0x2d4110:4,0x2d4114:4,0x2d4118:4,0x2d411c:4,0x2d7084:4,0x2d70bc:4,0x2d70d0:4,0x2d70d4:4,0x2d70d8:4,0x2d70dc:4,0x2d70e4:4,0x2d70e8:4,0x2d70ec:4,0x2d710c:4,0x2d7110:4,0x2d7114:4,0x2d7118:4,0x2d711c:4,0x2d7128:4,0x2d7134:4,0x2d7138:4,0x2d7148:4,0x2d716c:4,0x2d7190:4,0x2d7194:4,0x2d71a8:4,0x2d71b0:4,0x2d71b8:4,0x2d71c8:4,0x2d71cc:4,0x2d71d0:4,0x2d71d4:4,0x2d71d8:4,0x2d71dc:4,0x2d71e4:4,0x2d71f0:4,0x2d71fc:4,0x2d7200:4,0x2d720c:4,0x2d7220:4,0x2d7228:4,0x2d7234:4,0x2d7260:4,0x2d7268:4,0x2d7288:4,0x2d72c4:4,0x2d72c8:4,0x2d72e4:4,0x2d72ec:4,0x2d72fc:4,0x2d732c:4,0x2d7364:4,0x2d7378:4,0x2d7384:4,0x2d7390:4,0x2d739c:4,0x2d73a4:4,0x2d73c8:4,0x2d73d4:4,0x2d73d8:4,0x2d73e4:4,0x2d73ec:4,0x2d73f4:4,0x2d73f8:4,0x2d740c:4,0x2d7410:4,0x2d7414:4,0x2d7418:4,0x2d7420:4,0x2d7424:4,0x2d7434:4,0x2d743c:4,0x2d7440:4,0x2d7460:4,0x2d7464:4,0x2d748c:4,0x2d7498:4,0x2d74d0:4,0x2d7508:4,0x2d7514:4,0x2d7528:4,0x2d7544:4,0x2d757c:4,0x2d75fc:4,0x2d7734:4,0x2d773c:4,0x2d7740:4,0x2d7744:4,0x2d7748:4,0x2d7768:4,0x2d7774:4,0x2d77a0:4,0x2d77e8:4,0x2d7864:4,0x2d788c:4,0x2d789c:4,0x2d78a4:4,0x2d78dc:4,0x2d78f0:4,0x2d7914:4,0x2d7934:4,0x2d7940:4,0x2d7944:4,0x2d7948:4,0x2d795c:4,0x2d7960:4,0x2d7968:4,0x2d79ac:4,0x2d79b0:4,0x2d79d4:4,0x2d79f0:4,0x2d79f4:4,0x2d79f8:4,0x2d79fc:4,0x2d7a00:4,0x2d7a04:4,0x2d7a08:4,0x2d7a0c:4,0x2d7a10:4,0x2d7a14:4,0x2d7a18:4,0x2d7a1c:4,0x2d7a20:4,0x2d7a24:4,0x2d7a28:4,0x2d7a3c:4,0x2d7a40:4,0x2d7a44:4,0x2d7a48:4,0x2d7a4c:4,0x2d7a50:4,0x2d7a54:4,0x2d7a58:4,0x2d7a5c:4,0x2d7a60:4,0x2d7a64:4,0x2d7a68:4,0x2d7a6c:4,0x2d7a70:4,0x2d7a74:4,0x2d7aa0:4,0x2d7aa4:4,0x2d7aa8:4,0x2d7aac:4,0x2d7ab0:4,0x2d7ab4:4,0x2d7ab8:4,0x2d7abc:4,0x2d7ac0:4,0x2d7ac4:4,0x2d7ac8:4,0x2d7acc:4,0x2d7ad0:4,0x2d7ad4:4,0x2d7ad8:4,0x2d7b1c:4,0x2d7b20:4,0x2d7b24:4,0x2d7b2c:4,0x2d7b30:4,0x2d7b34:4,0x2d7b38:4,0x2d7b3c:4,0x2d7b40:4,0x2d7b44:4,0x2d7b48:4,0x2d7b4c:4,0x2d7b50:4,0x2d7b54:4,0x2d7b58:4,0x2d7b78:4,0x2d7b80:4,0x2d7b84:4,0x2d7b88:4,0x2d7b94:4,0x2d7b98:4,0x2d7b9c:4,0x2d7ba4:4,0x2d7ba8:4,0x2d7bac:4,0x2d7bb0:4,0x2d7bb4:4,0x2d7bb8:4,0x2d7bcc:4,0x2d7bd4:4,0x2d7be0:4,0x2d7be4:4,0x2d7be8:4,0x2d7bec:4,0x2d7bf0:4,0x2d7bf4:4,0x2d7bf8:4,0x2d7bfc:4,0x2d7c00:4,0x2d7c14:4,0x2d7c1c:4,0x2d7c20:4,0x2d7c24:4,0x2d7c2c:4,0x2d7c44:4,0x2d7c4c:4,0x2d7c50:4,0x2d7c64:4,0x2d7c7c:4,0x2d7cac:4,0x2d7cb0:4,0x2d7cd0:4,0x2d7cf8:4,0x2d7cfc:4,0x2d7d0c:4,0x2d7d10:4,0x2d7d18:4,0x2d7d1c:4,0x2d7d20:4,0x2d7d2c:4,0x2d7d34:4,0x2d7d38:4,0x2d7d4c:4,0x2d7d50:4,0x2d7d54:4,0x2d7d58:4,0x2d7d5c:4,0x2d7d60:4,0x2d7d64:4,0x2d7d68:4,0x2d7d88:4,0x2d7e30:4,0x2d7e34:4,0x2d7e64:4,0x2d7e6c:4,0x2d7e70:4,0x2d7e74:4,0x2d7e78:4,0x2d7ed4:4,0x2d7edc:4,0x2d7f08:4,0x2d7f0c:4,0x2d7f24:4,0x2d7f60:4,0x2d7f74:4,0x2d7f7c:4,0x2d7f80:4,0x2d7f90:4,0x2d7f94:4,0x2d7f9c:4,0x2d7fd8:4},{},{0x2f5c00:1024,0x2f6000:1024,0x2f6400:1024,0x2f6800:1024,0x2f6c00:1024,0x2f7000:1024,0x2f7400:1024,0x2f7800:1024,0x2f7c00:1024},{},{0x310400:1024,0x313300:256,0x313400:1024,0x314000:1024,0x314400:1024,0x314800:1024,0x314c00:1024,0x315000:1024,0x315400:1024,0x315800:1024,0x315c00:1024,0x317000:1024,0x317400:1024,0x317800:1024,0x318000:1,0x318002:1,0x318003:1,0x318004:4,0x318c00:256,0x318d00:256,0x319800:1024,0x31d000:256,0x31d100:256,0x31d200:256,0x31d300:256,0x31dc00:1024,0x31e800:1024,0x31ef00:64,0x31efc0:64,0x31f6e0:16,0x31f6f0:16},{},{},{0x345000:1024},{},{0x36de00:256,0x36df00:256},{},{},{},{0x3a0e00:256,0x3a0f00:256,0x3a1000:256,0x3a1100:64,0x3a1140:64,0x3a1180:64,0x3a11c0:64,0x3a1200:256,0x3a1300:256,0x3a1400:256,0x3a1500:256,0x3a1600:256,0x3a1700:256,0x3a1800:256,0x3a1900:256,0x3a1e00:256,0x3a1f00:256,0x3a2000:1024,0x3a2400:1024,0x3a2800:256,0x3a2900:256,0x3a2a00:256,0x3a2b00:256,0x3a2c00:1024,0x3a3000:1024,0x3a3400:1024,0x3a3800:256,0x3a3900:256,0x3a3a00:256,0x3a3b00:64,0x3a3b40:64,0x3a3b80:64,0x3a3bc0:64,0x3a3c00:1024,0x3a41e8:4,0x3a41ec:4,0x3a4200:256,0x3a4300:256,0x3a4480:64,0x3a44c0:64,0x3a5200:64,0x3a5240:64,0x3a5300:64,0x3a5340:64,0x3a5380:64,0x3a53c0:64,0x3a5740:64,0x3a6380:64,0x3a63c0:64,0x3a6400:256,0x3a6500:256,0x3a7400:1024,0x3a8000:1024,0x3a8400:1024,0x3a9000:256,0x3a9a00:256,0x3a9b00:256,0x3ac000:256,0x3ac100:256,0x3ac200:256,0x3ac300:256,0x3ac400:256,0x3ac500:256,0x3ac600:256,0x3ac700:256,0x3ac800:1024,0x3acc00:1024,0x3ad000:1024,0x3ad400:1024,0x3ad800:1024,0x3adc00:1024,0x3af000:256,0x3af100:256,0x3af200:256,0x3af300:256,0x3af400:256,0x3af500:256,0x3af600:256,0x3af700:256,0x3af800:1024,0x3afc00:1024},{0x3b2000:1024,0x3b2400:1024,0x3b2800:256,0x3b2900:256,0x3b2a00:256,0x3b2b00:256,0x3b2c00:1024,0x3b3000:256,0x3b3100:64,0x3b3140:64,0x3b3180:64,0x3b31c0:64,0x3b3200:256,0x3b3300:64,0x3b3340:64,0x3b3380:64,0x3b33c0:64,0x3b3400:1024,0x3b3800:1024,0x3b3c00:256,0x3b3d00:256,0x3b3e00:256,0x3b3f00:256,0x3b4000:1024,0x3b4400:1024,0x3b4800:256,0x3b4900:256,0x3b4a00:256,0x3b4b00:256,0x3b4c00:256,0x3b4d00:256,0x3b4e00:256,0x3b4f00:256,0x3b5000:256,0x3b5100:256,0x3b5200:256,0x3b5300:256,0x3b6b00:64,0x3b6b40:64,0x3b6b80:64,0x3b6bc0:64,0x3b6c00:256,0x3b6d00:256,0x3b6e00:256,0x3b6f00:256,0x3b9700:64,0x3b9740:64,0x3b9810:4,0x3b9814:4,0x3b9818:4,0x3b981c:4,0x3b9820:4,0x3b9824:4,0x3b9840:4,0x3b9844:4,0x3b9848:4,0x3b984c:4,0x3b9870:4,0x3b9874:4,0x3b9904:4,0x3b9920:4,0x3b993c:4,0x3b9940:4,0x3b9944:4,0x3b9948:4,0x3b995c:4,0x3b9974:4,0x3b9988:4,0x3b9998:4,0x3b999c:4,0x3b99a4:4,0x3b99a8:4,0x3b99ac:4,0x3b99b0:4,0x3b99b4:4,0x3b99b8:4,0x3b99bc:4,0x3b99c0:4,0x3b9b00:256,0x3bac00:256,0x3bad00:256,0x3bae00:256,0x3baf00:256,0x3bbf00:64,0x3bbf40:64,0x3bbff0:16,0x3bc000:1024,0x3bc400:1024,0x3bc800:1024,0x3bcc00:1024,0x3bd000:1024,0x3bd400:1024,0x3bd800:1024,0x3bdc00:1024,0x3be000:1024,0x3be400:1024,0x3be800:1024,0x3bec00:1024,0x3bf000:1024,0x3bf400:1024,0x3bf800:1024,0x3bfc00:1024},{0x3c0000:1024,0x3c0400:1024,0x3c0800:256,0x3c0900:256,0x3c0a00:256,0x3c0b00:256,0x3c0c00:256,0x3c0d00:64,0x3c0d40:64,0x3c0d80:64,0x3c0dc0:64,0x3c0e00:256,0x3c0f00:256,0x3c1000:1024,0x3c1400:1024,0x3c1800:1024,0x3c1c00:256,0x3c1d00:256,0x3c1e00:256,0x3c1f00:256,0x3c3700:256,0x3c3f00:256,0x3ca000:256,0x3ca100:256,0x3ca200:256,0x3ca300:256,0x3ca400:256,0x3ca500:256,0x3ca600:256,0x3ca700:256,0x3ca800:1024,0x3cac00:1024,0x3cb000:1024,0x3cb400:1024,0x3cb800:1024,0x3cbc00:1024,0x3cc200:256,0x3cc300:256,0x3cc800:1024,0x3ccc00:256,0x3ccd00:256,0x3cce00:256,0x3ccf00:256,0x3cd000:1024,0x3cd400:1024,0x3cd800:256,0x3cd900:256,0x3cda00:256,0x3cdb00:256,0x3cdc00:1024,0x3ce800:256,0x3ce900:256,0x3ceb00:256,0x3cf580:64,0x3cf5c0:64,0x3cf700:256,0x3cfc00:256,0x3cfd80:64,0x3cfdc0:64,0x3cff00:256},{0x3d0450:4,0x3d0454:4,0x3d0458:4,0x3d045c:4,0x3d04b0:16,0x3d08a0:16,0x3d0ed4:4,0x3d0ed8:4,0x3d0edc:4,0x3d0ef0:4,0x3d0ef4:4,0x3d1c00:16,0x3d1c10:16,0x3d1c20:16,0x3d1c30:16,0x3d1c40:64,0x3d1d80:64,0x3d1dc0:16,0x3d1dd0:16,0x3d1de0:16,0x3d1df0:16,0x3d2d80:64,0x3d2de0:16,0x3d2f80:64,0x3d3000:1024,0x3d3400:256,0x3d3500:256,0x3d3600:256,0x3d3700:256,0x3d57c0:64,0x3d8000:256,0x3d8100:256,0x3d8200:256,0x3d8300:256,0x3d8400:256,0x3d8500:64,0x3d8540:64,0x3d8580:64,0x3d85c0:64,0x3d8600:64,0x3d8640:16,0x3d8650:16,0x3d8660:16,0x3d8670:16,0x3d8680:64,0x3d86c0:64,0x3d8700:256,0x3d8800:64,0x3d8840:64,0x3d8880:64,0x3d88c0:64,0x3d8900:64,0x3d8940:64,0x3d8980:64,0x3d89c0:64,0x3d8a00:64,0x3d8a40:64,0x3d8a80:64,0x3d8ac0:64,0x3d8b00:64,0x3d8b40:64,0x3d8b80:64,0x3d8bc0:64,0x3d8c00:1024,0x3d9000:1024,0x3d9400:256,0x3d9500:256,0x3d9600:256,0x3d9700:256,0x3d9800:256,0x3d9900:256,0x3d9a00:256,0x3d9b00:256,0x3d9c00:256,0x3d9d00:256,0x3d9e00:64,0x3d9e40:64,0x3d9e80:64,0x3d9ec0:64,0x3d9f00:64,0x3d9f40:64,0x3d9f80:64,0x3d9fc0:64,0x3da000:256,0x3da100:64,0x3da140:64,0x3da180:64,0x3da1c0:64,0x3da200:256,0x3da300:256,0x3da400:256,0x3da500:256,0x3da600:256,0x3da700:256,0x3da800:256,0x3da900:256,0x3daa00:256,0x3dab00:256,0x3dac00:1024,0x3db000:256,0x3db100:256,0x3db200:256,0x3db300:256,0x3db400:64,0x3db440:64,0x3db480:64,0x3db4c0:64,0x3db500:256,0x3db600:256,0x3db700:256,0x3db800:1024,0x3dbc00:256,0x3dbd00:64,0x3dbd40:64,0x3dbd80:64,0x3dbdc0:64,0x3dbe00:256,0x3dbf00:256,0x3de800:1024,0x3dec00:256,0x3ded00:256,0x3df000:1024},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{0x650000:4,0x650100:4,0x6502ac:4,0x650400:1024,0x651000:1024,0x651400:1024,0x651800:1024,0x651c00:1024,0x652000:1024,0x652400:256,0x652500:256,0x652600:256,0x652700:256,0x652800:1024,0x652c00:1024,0x653000:256,0x653100:256,0x653208:4,0x65320c:4,0x653238:4,0x653400:256,0x653564:4,0x653600:256,0x6537e0:4,0x6537e4:4,0x654000:1024,0x654400:1024,0x654800:1024,0x654c00:256,0x654d00:256,0x654e00:4,0x654e20:16,0x654e30:16,0x655000:1024,0x655400:1024,0x655800:1024,0x655c00:1024,0x656000:4,0x656004:4,0x656008:4,0x656010:16,0x656080:64,0x6560c0:64,0x656360:16,0x656370:16,0x656540:16,0x656550:16,0x656564:1,0x656566:1,0x656567:1,0x656568:4,0x65656c:4,0x656570:16,0x656640:16,0x656650:16,0x656664:1,0x656665:1,0x656666:1,0x656668:4,0x65666c:4,0x656670:16,0x656800:1024,0x656e40:16,0x656e50:16,0x656e60:16,0x656e74:4,0x656e78:4,0x656e7c:4,0x657800:1024,0x657c00:256,0x657d00:256,0x657e00:256,0x658000:4,0x658008:4,0x65800c:4,0x658010:16,0x658020:16,0x658030:16,0x658100:256,0x658200:256,0x658300:256,0x658400:1024,0x659000:1024,0x659400:1024,0x659800:1024,0x659c00:1024,0x65c000:1024,0x65c400:1024,0x65c800:256,0x65c900:256,0x65cb80:16,0x65cb90:16,0x65cba0:4,0x65cba4:4,0x65cbac:4,0x65cbb0:16,0x65cc00:1024,0x65e000:1024,0x65e400:1024,0x65e800:256,0x65e900:256,0x65ea40:4,0x65ea44:4,0x65ea4c:4,0x65ea50:16,0x65ea60:16,0x65ea70:16,0x65ec00:1024,0x65f000:1024,0x65f400:1024,0x65f800:256,0x65f900:256,0x65fb00:4,0x65fb08:4,0x65fb0c:4,0x65fb10:16,0x65fb20:16,0x65fb30:16,0x65fb40:64,0x65fb80:64,0x65fbc0:64,0x65fc00:256,0x65fd00:256,0x65fe00:256},{},{0x670108:4,0x670114:4,0x670118:4,0x670148:4,0x670158:4,0x6701a8:4,0x67026c:4,0x67029c:4,0x6702a4:4,0x6702c8:4,0x6702cc:4,0x6702d0:4,0x6702d4:4,0x670354:4,0x670358:4,0x67035c:4,0x670360:4,0x670364:4,0x670368:4,0x67036c:4,0x670370:4,0x670374:4,0x670378:4,0x67037c:4,0x670380:4,0x670384:4,0x670388:4,0x67038c:4,0x670394:4,0x670398:4,0x67039c:4,0x670438:4,0x6704a8:4,0x6704b8:4,0x6704e0:4,0x670524:4,0x670534:4,0x670538:4,0x670598:4,0x6705a8:4,0x6705c0:4,0x6705fc:4,0x67064c:4,0x67066c:4,0x6706dc:4,0x6706e4:4,0x670704:4,0x67071c:4,0x67078c:4,0x6707d4:4,0x6707d8:4,0x6707dc:4,0x670804:4,0x670808:4,0x670820:4,0x670834:4,0x670844:4,0x67086c:4,0x67089c:4,0x6708c8:4,0x6708cc:4,0x6708dc:4,0x670908:4,0x670918:4,0x67096c:4,0x670998:4,0x6709f8:4,0x6709fc:4,0x670a00:4,0x670a10:4,0x670a54:4,0x670a8c:4,0x670ba8:4,0x670bb4:4,0x670c20:4,0x670c44:4,0x670c5c:4,0x670c88:4,0x670cb8:4,0x670ce8:4,0x670d0c:4,0x670d48:1,0x670d49:1,0x670d7c:4,0x670d90:4,0x670dc4:4,0x670ddc:4,0x670df4:4,0x670e54:4,0x670e64:4,0x670e70:4,0x670e84:4,0x670e88:4,0x670e9c:4,0x670ef0:4,0x670f04:4,0x670f08:4,0x670f10:4,0x670f60:4,0x670fc8:4,0x671034:4,0x671050:4,0x671054:4,0x671058:4,0x67106c:4,0x67107c:4,0x671128:4,0x671178:4,0x671188:4,0x6711a0:4,0x6711cc:4,0x6711e4:4,0x6712c0:4,0x6712d0:4,0x6712d4:4,0x6712e0:4,0x671300:4,0x67130c:4,0x671328:4,0x67132c:4,0x671340:4,0x671344:4,0x671348:4,0x6713e8:4,0x67140c:4,0x671420:4,0x67142c:4,0x671444:4,0x671470:4,0x671480:4,0x6714a0:4,0x6714f8:4,0x671570:4,0x671574:4,0x671588:4,0x67158c:4,0x6715b0:4,0x6715d0:4,0x6715f0:4,0x671600:4,0x671604:4,0x671608:4,0x67160c:4,0x671610:4,0x671614:4,0x671618:4,0x67161c:4,0x671620:4,0x671624:4,0x671628:4,0x67162c:4,0x671630:4,0x671634:4,0x671638:4,0x67163c:4,0x671640:4,0x671644:4,0x671648:4,0x67164c:4,0x671650:4,0x671654:4,0x671658:4,0x67165c:4,0x671664:4,0x671668:4,0x67166c:4,0x671670:4,0x671674:4,0x671678:4,0x67167c:4,0x6716bc:4,0x6716e4:4,0x6716fc:4,0x671708:4,0x671738:4,0x6717a0:4,0x6717a4:4,0x6717b0:4,0x6717e4:4,0x671874:4,0x671880:4,0x671890:4,0x6718b0:4,0x6718b8:4,0x6718dc:4,0x6718e4:4,0x6718f8:4,0x6718fc:4,0x671908:1,0x671909:1,0x671914:4,0x671918:4,0x67191c:4,0x671920:4,0x671924:4,0x671928:4,0x671930:4,0x671940:4,0x671944:4,0x671994:4,0x67199c:4,0x6719d8:4,0x671a00:4,0x671a40:4,0x671a4c:4,0x671a74:4,0x671a84:4,0x671a9c:4,0x671aa0:4,0x671ae4:4,0x671af0:4,0x671b04:4,0x671b0c:4,0x671b18:4,0x671b38:4,0x671b60:4,0x671bd0:4,0x671bf0:4,0x671c04:4,0x671c08:4,0x671ccc:4,0x671cd4:4,0x671d10:4,0x671d80:4,0x671d84:4,0x671d88:4,0x671e14:4,0x671e60:4,0x671e94:4,0x671ec8:4,0x671ee4:4,0x671eec:4,0x671f00:4,0x671f30:4,0x671f34:4,0x671f38:4,0x671f3c:4,0x671f40:4,0x671f44:4,0x671f94:4,0x671fa0:4,0x671fa8:4,0x671fc8:4,0x671fec:4,0x672000:4,0x672004:4,0x672008:4,0x67200c:4,0x672010:4,0x672014:4,0x672018:4,0x67201c:4,0x672020:4,0x672024:4,0x672028:4,0x67202c:4,0x672030:4,0x672034:4,0x672038:4,0x67203c:4,0x672040:4,0x672044:4,0x672048:4,0x67204c:4,0x672050:4,0x672054:4,0x672058:4,0x67205c:4,0x672060:4,0x672064:4,0x672068:4,0x67206c:4,0x672070:4,0x672074:4,0x672078:4,0x67207c:4,0x672080:4,0x672084:4,0x672088:4,0x67208c:4,0x672090:4,0x672094:4,0x672098:4,0x67209c:4,0x6720a0:4,0x6720a4:4,0x6720a8:4,0x6720ac:4,0x6720b0:4,0x6720b4:4,0x6720b8:4,0x6720bc:4,0x6720c0:4,0x6720c4:4,0x6720c8:4,0x6720cc:4,0x6720d0:4,0x6720d4:4,0x6720d8:4,0x6720dc:4,0x6720e0:4,0x6720e4:4,0x6720e8:4,0x6720ec:4,0x6720f0:4,0x6720f4:4,0x6720f8:4,0x6720fc:4,0x672100:4,0x672104:4,0x672108:4,0x67210c:4,0x672110:4,0x672114:4,0x672118:4,0x67211c:4,0x672120:4,0x672124:4,0x672128:4,0x67212c:4,0x672130:4,0x672134:4,0x672138:4,0x67213c:4,0x672140:4,0x672144:4,0x672148:4,0x67214c:4,0x672150:4,0x672154:4,0x672158:4,0x67215c:4,0x672160:4,0x672164:4,0x672168:4,0x67216c:4,0x672170:4,0x672174:4,0x672178:4,0x67217c:4,0x672180:4,0x672184:4,0x672188:4,0x67218c:4,0x672190:4,0x672194:4,0x672198:4,0x67219c:4,0x6721a0:4,0x6721a4:4,0x6721a8:4,0x6721ac:4,0x6721b0:4,0x6721b4:4,0x6721b8:4,0x6721bc:4,0x6721c0:4,0x6721c4:4,0x6721c8:4,0x6721cc:4,0x6721d0:4,0x6721d4:4,0x6721d8:4,0x6721dc:4,0x6721e0:4,0x6721e4:4,0x6721e8:4,0x6721ec:4,0x6721f0:4,0x6721f4:4,0x6721f8:4,0x6721fc:4,0x672200:4,0x672204:4,0x672208:4,0x67220c:4,0x672210:4,0x672214:4,0x672218:4,0x67221c:4,0x672220:4,0x672224:4,0x672228:4,0x67222c:4,0x672230:4,0x672234:4,0x672238:4,0x67223c:4,0x672240:4,0x672244:4,0x672248:4,0x67224c:4,0x672250:4,0x672254:4,0x672258:4,0x67225c:4,0x672260:4,0x672264:4,0x672268:4,0x67226c:4,0x672270:4,0x672274:4,0x672278:4,0x67227c:4,0x672280:4,0x672284:4,0x672288:4,0x67228c:4,0x672290:4,0x672294:4,0x672298:4,0x67229c:4,0x6722a0:4,0x6722a4:4,0x6722a8:4,0x6722ac:4,0x6722b0:4,0x6722b4:4,0x6722b8:4,0x6722bc:4,0x6722c0:4,0x6722c4:4,0x6722c8:4,0x6722cc:4,0x6722d0:4,0x6722d4:4,0x6722d8:4,0x6722dc:4,0x6722e0:4,0x6722e4:4,0x6722e8:4,0x6722ec:4,0x6722f0:4,0x6722f4:4,0x6722f8:4,0x6722fc:4,0x672300:4,0x672304:4,0x672308:4,0x67230c:4,0x672310:4,0x672314:4,0x672318:4,0x67231c:4,0x672320:4,0x672324:4,0x672328:4,0x67232c:4,0x672330:4,0x672368:4,0x672374:4,0x6723c8:4,0x6723dc:4,0x672414:4,0x67241c:4,0x672424:4,0x672438:4,0x67243c:4,0x672440:4,0x672448:4,0x672460:4,0x672484:4,0x672488:4,0x6724a0:4,0x6724a4:4,0x6724a8:4,0x6724ac:4,0x6724b0:4,0x6724b4:4,0x6724b8:4,0x6724bc:4,0x6724c0:4,0x6724c4:4,0x6724c8:4,0x6724cc:4,0x6724d0:4,0x6724d4:4,0x6724d8:4,0x6724dc:4,0x6724e0:4,0x6724e4:4,0x6724e8:4,0x6724ec:4,0x6724f0:4,0x6724f4:4,0x672500:4,0x67250c:4,0x672510:4,0x672518:4,0x67252c:4,0x672534:4,0x672538:4,0x672548:4,0x672564:4,0x672568:4,0x67257c:4,0x672588:4,0x67258c:4,0x672590:4,0x672594:4,0x672598:4,0x67259c:4,0x6725a0:4,0x6725a4:4,0x6725ac:4,0x6725b0:4,0x6725d0:4,0x6725d4:4,0x6725d8:4,0x6725dc:4,0x6725f8:4,0x6725fc:4,0x672600:4,0x672620:4,0x672628:4,0x67262c:4,0x672638:4,0x67264c:4,0x672654:4,0x67265c:4,0x672660:4,0x672674:4,0x672684:4,0x67268c:4,0x6726dc:4,0x6726e0:4,0x6726e4:4,0x6726e8:4,0x6726fc:4,0x672710:4,0x672740:4,0x672758:4,0x672764:4,0x672768:4,0x67276c:4,0x6727a0:4,0x6727a4:4,0x6727a8:4,0x6727ac:4,0x6727b0:4,0x6727b4:4,0x6727b8:4,0x6727bc:4,0x6727c8:4,0x6727cc:4,0x6727d0:4,0x6727d4:4,0x6727d8:4,0x6727dc:4,0x6727e0:4,0x6727e4:4,0x6727e8:4,0x67280c:4,0x672810:4,0x672814:4,0x672818:4,0x67281c:4,0x672820:4,0x672824:4,0x672828:4,0x67282c:4,0x672858:4,0x672864:4,0x672870:4,0x6728c0:4,0x6728d4:4,0x6728dc:4,0x6728e4:4,0x6728e8:4,0x6728ec:4,0x6728f0:4,0x6728f4:4,0x6728f8:4,0x6728fc:4,0x672900:4,0x672910:4,0x672934:4,0x672974:4,0x67298c:4,0x672994:4,0x672998:4,0x6729a0:4,0x6729a4:4,0x6729dc:4,0x6729e0:4,0x6729e4:4,0x6729e8:4,0x672a08:4,0x672a18:4,0x672a1c:4,0x672a20:4,0x672a40:4,0x672a44:4,0x672a4c:4,0x672a68:4,0x672ab4:4,0x672ae8:4,0x672b10:4,0x672b54:4,0x672b60:4,0x672b64:4,0x672b68:4,0x672b7c:4,0x672b84:4,0x672bb8:4,0x672bc0:4,0x672bc4:4,0x672bd0:4,0x672bdc:4,0x672be0:4,0x672be8:4,0x672bf0:4,0x672c38:4,0x672c50:4,0x672c58:4,0x672c78:4,0x672c7c:4,0x672c84:4,0x672c90:4,0x672ca8:4,0x672cb0:4,0x672cb4:4,0x672cb8:4,0x672cbc:4,0x672cc0:4,0x672cc4:4,0x672cc8:4,0x672ccc:4,0x672ce0:4,0x672cec:4,0x672cf0:4,0x672cf4:4,0x672cf8:4,0x672cfc:4,0x672d00:4,0x672d04:4,0x672d08:4,0x672d0c:4,0x672d10:4,0x672d14:4,0x672d18:4,0x672d1c:4,0x672d20:4,0x672d24:4,0x672d28:4,0x672d2c:4,0x672d30:4,0x672d34:4,0x672d38:4,0x672d3c:4,0x672d48:4,0x672d4c:4,0x672d50:4,0x672d54:4,0x672d58:4,0x672d5c:4,0x672d60:4,0x672d64:4,0x672d68:4,0x672d6c:4,0x672d70:4,0x672d74:4,0x672d78:4,0x672d7c:4,0x672d80:4,0x672d84:4,0x672d88:4,0x672d8c:4,0x672d90:4,0x672d94:4,0x672d98:4,0x672d9c:4,0x672da0:4,0x672da4:4,0x672da8:4,0x672dac:4,0x672db0:4,0x672db4:4,0x672db8:4,0x672dbc:4,0x672dc0:4,0x672dc4:4,0x672dc8:4,0x672dcc:4,0x672dd0:4,0x672dd4:4,0x672dd8:4,0x672ddc:4,0x672de0:4,0x672df8:4,0x672e00:4,0x672e0c:4,0x672e10:4,0x672e14:4,0x672e18:4,0x672e1c:4,0x672e20:4,0x672e24:4,0x672e28:4,0x672e2c:4,0x672e30:4,0x672e34:4,0x672e38:4,0x672e3c:4,0x672e40:4,0x672e44:4,0x672e48:4,0x672e4c:4,0x672e50:4,0x672e54:4,0x672e58:4,0x672e5c:4,0x672e60:4,0x672e64:4,0x672e68:4,0x672e6c:4,0x672e70:4,0x672e74:4,0x672e78:4,0x672e7c:4,0x672e80:4,0x672e84:4,0x672e88:4,0x672e98:4,0x672e9c:4,0x672ea0:4,0x672ea4:4,0x672ea8:4,0x672eac:4,0x672eb0:4,0x672eb4:4,0x672ef4:4,0x672ef8:4,0x672f04:4,0x672f14:4,0x672f24:4,0x672f28:4,0x672f30:4,0x672f50:4,0x672f60:4,0x672f6c:4,0x672f74:4,0x672f78:4,0x672f88:4,0x672f8c:4,0x672fc8:4,0x672fd4:4,0x672fdc:4,0x672ff8:4,0x673014:4,0x673034:4,0x67305c:4,0x673090:4,0x673094:4,0x673098:4,0x67309c:4,0x6730ca:1,0x6730cb:1,0x6730d8:4,0x6730dc:4,0x6730e0:4,0x6730e4:4,0x6730e8:4,0x6730ec:4,0x6730f0:4,0x6730f4:4,0x67310c:4,0x673114:4,0x673148:4,0x67314c:4,0x67315c:4,0x673160:4,0x67316c:4,0x673180:4,0x6731b0:4,0x6731b4:4,0x6731c4:4,0x6731f8:4,0x673224:4,0x67322c:4,0x673230:4,0x673234:4,0x673238:4,0x67323c:4,0x673240:4,0x673244:4,0x673248:4,0x67326c:4,0x673270:4,0x673274:4,0x673278:4,0x67327c:4,0x673284:4,0x673288:4,0x67328c:4,0x6732ac:4,0x6732b0:4,0x6732b4:4,0x6732b8:4,0x6732bc:4,0x6732c0:4,0x6732c4:4,0x6732c8:4,0x6732dc:4,0x6732e0:4,0x6732e4:4,0x6732e8:4,0x6732ec:4,0x6732f0:4,0x6732f4:4,0x6732f8:4,0x673428:4,0x673448:4,0x67344c:4,0x673450:4,0x673454:4,0x673460:4,0x673464:4,0x673468:4,0x6734a0:4,0x6734a4:4,0x6734ac:4,0x6734b0:4,0x6734b8:4,0x6734c4:4,0x673504:4,0x673540:4,0x673544:4,0x67355c:4,0x673564:4,0x67357c:4,0x673580:4,0x673584:4,0x673588:4,0x67358c:4,0x673590:4,0x6735a0:4,0x6735b4:4,0x6735cc:4,0x6735d0:4,0x6735d8:4,0x6735ec:4,0x6735f8:4,0x673608:4,0x673630:4,0x67363c:4,0x6736a0:4,0x6736a4:4,0x6736d4:4,0x6736e4:4,0x6736f0:4,0x673718:4,0x673750:4,0x673778:4,0x673798:4,0x6737ac:4,0x6737cc:4,0x6737d0:4,0x6737e4:4,0x6737ec:4,0x6737f0:4,0x673808:4,0x673810:4,0x673814:4,0x673820:4,0x673834:4,0x673838:4,0x67383c:4,0x673848:4,0x67384c:4,0x673864:4,0x673868:4,0x67388c:4,0x673898:4,0x6738b8:4,0x6738c8:4,0x6738d8:4,0x67390c:4,0x673934:4,0x673938:4,0x67394c:4,0x67396c:4,0x673988:4,0x6739c4:4,0x673a18:4,0x673ab6:1,0x673ab7:1,0x673b4c:4,0x673b64:4,0x673b70:4,0x673b74:4,0x673b78:4,0x673b7c:4,0x673b80:4,0x673b94:4,0x673ba4:4,0x673bd8:4,0x673c20:4,0x673c2c:4,0x673ca4:4,0x673ce4:4,0x673cec:4,0x673d3c:4,0x673d68:4,0x673d8c:4,0x673d98:4,0x673d9c:4,0x673da0:4,0x673dac:4,0x673db0:4,0x673db8:4,0x673dbc:4,0x673e18:4,0x673e34:4,0x673e48:4,0x673e4c:4,0x673e50:4,0x673e54:4,0x673e58:4,0x673e60:4,0x673e64:4,0x673e68:4,0x673e6c:4,0x673e70:4,0x673e74:4,0x673e78:4,0x673e7c:4,0x673e80:4,0x673e84:4,0x673e9c:4,0x673ea0:4,0x673ea4:4,0x673ea8:4,0x673eac:4,0x673eb0:4,0x673eb4:4,0x673eb8:4,0x673ebc:4,0x673ec0:4,0x673ecc:4,0x673ed0:4,0x673ed4:4,0x673ed8:4,0x673edc:4,0x673ee0:4,0x673f20:4,0x673f24:4,0x673f28:4,0x673f2c:4,0x673f30:4,0x673f34:4,0x673f38:4,0x673f3c:4,0x673f40:4,0x673f44:4,0x673f48:4,0x673f4c:4,0x673f50:4,0x673f54:4,0x673f58:4,0x673f8c:4,0x673f90:4,0x673f98:4,0x673fa0:4,0x673fa4:4,0x673fa8:4,0x673fac:4,0x673fb0:4,0x673fb4:4,0x673fb8:4,0x673fc0:4,0x673fc4:4,0x673fc8:4,0x673fcc:4,0x673fd0:4,0x673ff0:4,0x673ff4:4,0x673ff8:4,0x673ffc:4,0x67c000:4,0x67c004:4,0x67c008:4,0x67c00c:4,0x67c010:4,0x67c014:4,0x67c018:4,0x67c01c:4,0x67c030:4,0x67c034:4,0x67c038:4,0x67c054:4,0x67c058:4,0x67c05c:4,0x67c060:4,0x67c064:4,0x67c068:4,0x67c06c:4,0x67c070:4,0x67c080:4,0x67c084:4,0x67c088:4,0x67c08c:4,0x67c090:4,0x67c0a4:4,0x67c0bc:4,0x67c0d0:4,0x67c0d4:4,0x67c0d8:4,0x67c0fc:4,0x67c128:4,0x67c12c:4,0x67c178:4,0x67c17c:4,0x67c18c:4,0x67c190:4,0x67c194:4,0x67c1a0:4,0x67c1bc:4,0x67c1c0:4,0x67c1d4:4,0x67c1d8:4,0x67c1dc:4,0x67c1e0:4,0x67c1e4:4,0x67c1e8:4,0x67c1ec:4,0x67c1f0:4,0x67c210:4,0x67c2e6:1,0x67c2e7:1,0x67c368:4,0x67c370:4,0x67c388:4,0x67c394:4,0x67c398:4,0x67c3a0:4,0x67c3c0:4,0x67c43c:4,0x67c440:4,0x67c448:4,0x67c458:4,0x67c45c:4,0x67c460:4,0x67c4a8:4,0x67c4b8:4,0x67c4cc:4,0x67c5b4:4,0x67c5e4:4,0x67c5fc:4,0x67c614:4,0x67c63c:4,0x67c640:4,0x67c648:4,0x67c67c:4,0x67c69c:4,0x67c6b4:4,0x67c6c4:4,0x67c6c8:4,0x67c6d8:4,0x67c6dc:4,0x67c6e0:4,0x67c6e4:4,0x67c6e8:4,0x67c6ec:4,0x67c6f0:4,0x67c6f4:4,0x67c7a4:4,0x67c7c4:4,0x67c7e4:4,0x67c7f8:4,0x67c7fc:4,0x67c81c:4,0x67c820:4,0x67c834:4,0x67c840:4,0x67c844:4,0x67c888:4,0x67c88c:4,0x67c890:4,0x67c894:4,0x67c898:4,0x67c89c:4,0x67c8a0:4,0x67c8a4:4,0x67c8a8:4,0x67c8ac:4,0x67c8b0:4,0x67c8b4:4,0x67c8b8:4,0x67c8bc:4,0x67c8c0:4,0x67c8dc:4,0x67c8e0:4,0x67c8e4:4,0x67c8e8:4,0x67c8ec:4,0x67c8f0:4,0x67c8f4:4,0x67c8f8:4,0x67c8fc:4,0x67c900:4,0x67c904:4,0x67c908:4,0x67c90c:4,0x67c910:4,0x67c914:4,0x67c91c:4,0x67c920:4,0x67c924:4,0x67c928:4,0x67c92c:4,0x67c930:4,0x67c934:4,0x67c938:4,0x67c93c:4,0x67c940:4,0x67c94c:4,0x67c950:4,0x67c954:4,0x67c958:4,0x67c95c:4,0x67c960:4,0x67c964:4,0x67c968:4,0x67c96c:4,0x67c970:4,0x67c974:4,0x67c978:4,0x67c998:4,0x67c99c:4,0x67c9a0:4,0x67c9a4:4,0x67c9a8:4,0x67c9ac:4,0x67c9b0:4,0x67c9b4:4,0x67c9b8:4,0x67c9bc:4,0x67c9c0:4,0x67c9c4:4,0x67c9c8:4,0x67c9cc:4,0x67c9d0:4,0x67c9d4:4,0x67c9d8:4,0x67c9dc:4,0x67c9e0:4,0x67c9e4:4,0x67c9e8:4,0x67c9ec:4,0x67c9f0:4,0x67c9f4:4,0x67c9f8:4,0x67c9fc:4,0x67ca00:4,0x67ca04:4,0x67ca08:4,0x67ca0c:4,0x67ca10:4,0x67ca14:4,0x67ca18:4,0x67ca1c:4,0x67ca20:4,0x67ca24:4,0x67ca28:4,0x67ca2c:4,0x67ca38:4,0x67ca3c:4,0x67ca40:4,0x67ca44:4,0x67ca48:4,0x67ca4c:4,0x67ca50:4,0x67ca54:4,0x67ca58:4,0x67ca5c:4,0x67ca60:4,0x67ca64:4,0x67ca68:4,0x67ca6c:4,0x67ca70:4,0x67ca74:4,0x67ca78:4,0x67ca7c:4,0x67ca80:4,0x67ca84:4,0x67ca88:4,0x67ca8c:4,0x67ca90:4,0x67ca98:4,0x67ca9c:4,0x67caa0:4,0x67caa4:4,0x67caa8:4,0x67caac:4,0x67cab0:4,0x67cab4:4,0x67cab8:4,0x67cabc:4,0x67cac0:4,0x67cac4:4,0x67cac8:4,0x67cacc:4,0x67cad4:4,0x67cae4:4,0x67caec:4,0x67caf0:4,0x67caf4:4,0x67caf8:4,0x67cafc:4,0x67cb00:4,0x67cb04:4,0x67cb08:4,0x67cb0c:4,0x67cb10:4,0x67cb14:4,0x67cb18:4,0x67cb1c:4,0x67cb20:4,0x67cb34:4,0x67cb38:4,0x67cb60:4,0x67cb64:4,0x67cb68:4,0x67cb6c:4,0x67cb70:4,0x67cb74:4,0x67cb78:4,0x67cb7c:4,0x67cb80:4,0x67cb8c:4,0x67cba4:4,0x67cba8:4,0x67cbc0:4,0x67cbc8:4,0x67cbd4:4,0x67cbd8:4,0x67cc18:4,0x67cc48:4,0x67cc58:4,0x67cc70:4,0x67cc88:4,0x67cc8c:4,0x67cc90:4,0x67cc94:4,0x67cc98:4,0x67ccc4:4,0x67cce8:4,0x67ccec:4,0x67cd04:4,0x67cd08:4,0x67cd28:4,0x67cd2c:4,0x67cd34:4,0x67cd6c:4,0x67cd74:4,0x67cd78:4,0x67cd88:4,0x67cda2:1,0x67cdbc:4,0x67cdc0:4,0x67cdc4:4,0x67cdc8:4,0x67cdec:4,0x67cdf8:4,0x67cdfc:4,0x67ce00:4,0x67ce2c:4,0x67ce6c:4,0x67ce94:4,0x67cf30:4,0x67cf68:4,0x67cfa4:4,0x67cfb8:4,0x67cfbc:4,0x67cfc0:4,0x67cfc4:4,0x67cfc8:4,0x67cfcc:4,0x67cfd0:4,0x67cfd4:4,0x67cfdc:4,0x67cfe4:4,0x67cfe8:4,0x67d00c:4,0x67d010:4,0x67d01c:4,0x67d028:4,0x67d02c:4,0x67d030:4,0x67d094:4,0x67d170:4,0x67d188:4,0x67d1c8:4,0x67d1d0:4,0x67d1d8:4,0x67d1e8:4,0x67d200:4,0x67d260:4,0x67d29c:4,0x67d2a0:4,0x67d2a4:4,0x67d2a8:4,0x67d2ac:4,0x67d2b0:4,0x67d2b4:4,0x67d2b8:4,0x67d2bc:4,0x67d2d8:4,0x67d32c:4,0x67d360:4,0x67d364:4,0x67d39c:4,0x67d3a4:4,0x67d3a8:4,0x67d3c0:4,0x67d3dc:4,0x67d3e0:4,0x67d3e4:4,0x67e010:4,0x67e028:4,0x67e02c:4,0x67e03c:4,0x67e050:4,0x67e0dc:4,0x67e0e0:4,0x67e0e4:4,0x67e0e8:4,0x67e154:4,0x67e210:4,0x67e228:4,0x67e238:4,0x67e23c:4,0x67e250:4,0x67e274:4,0x67e284:4,0x67e29c:4,0x67e2b4:4,0x67e2c4:4,0x67e330:4,0x67e348:4,0x67e34c:4,0x67e350:4,0x67e364:4,0x67e378:4,0x67e384:4,0x67e388:4,0x67e3c4:4,0x67e3cc:4,0x67e3d4:4,0x67e3e4:4,0x67e40c:4,0x67e41c:4,0x67e444:4,0x67e458:4,0x67e480:4,0x67e4a0:4,0x67e4b0:4,0x67e4cc:4,0x67e4d0:4,0x67e4e4:4,0x67e4e8:4,0x67e514:4,0x67e588:4,0x67e594:4,0x67e5ac:4,0x67e5d4:4,0x67e5d8:4,0x67e5dc:4,0x67e5e4:4,0x67e5ec:4,0x67e5f0:4,0x67e600:4,0x67e61c:4,0x67e628:4,0x67e62c:4,0x67e660:4,0x67e6c4:4,0x67e6c8:4,0x67e6cc:4,0x67e6d4:4,0x67e6ec:4,0x67e710:4,0x67e714:4,0x67e740:4,0x67e744:4,0x67e790:4,0x67e7b4:4,0x67e7b8:4,0x67e7f4:4,0x67e804:4,0x67e890:4,0x67e8d4:4,0x67e904:4,0x67e92c:4,0x67e934:4,0x67e968:4,0x67e980:4,0x67e988:4,0x67e9e4:4,0x67ea00:4,0x67ea14:4,0x67ea38:4,0x67ea7c:4,0x67ea80:4,0x67eaac:4,0x67eab4:4,0x67eaf4:4,0x67eb10:4,0x67eb30:4,0x67eb38:4,0x67eb3c:4,0x67eb50:4,0x67eb54:4,0x67eb80:4,0x67eb84:4,0x67eb88:4,0x67eb8c:4,0x67eb90:4,0x67eb94:4,0x67ebb8:4,0x67ebc0:4,0x67ebc8:4,0x67ebdc:4,0x67ebe0:4,0x67ebe4:4,0x67ebe8:4,0x67ebec:4,0x67ebf0:4,0x67ebf4:4,0x67ebf8:4,0x67ebfc:4,0x67ec00:4,0x67ec04:4,0x67ec08:4,0x67ec0c:4,0x67ec10:4,0x67ec14:4,0x67ec18:4,0x67ec1c:4,0x67ec20:4,0x67ec24:4,0x67ec28:4,0x67ec2c:4,0x67ec30:4,0x67ec34:4,0x67ec38:4,0x67ec3c:4,0x67ec40:4,0x67ec44:4,0x67ec48:4,0x67ec4c:4,0x67ec50:4,0x67ec54:4,0x67ec58:4,0x67ec5c:4,0x67ec60:4,0x67ec78:4,0x67ecb8:4,0x67ecdc:4,0x67ece8:4,0x67ecf0:4,0x67ecf4:4,0x67ecf8:4,0x67ecfc:4,0x67ed00:4,0x67ed04:4,0x67ed08:4,0x67ed0c:4,0x67ed18:4,0x67ed1c:4,0x67ed44:4,0x67ed58:4,0x67ed98:4,0x67edb0:4,0x67edb4:4,0x67edb8:4,0x67edbc:4,0x67edc0:4,0x67edc4:4,0x67edc8:4,0x67edcc:4,0x67edd0:4,0x67edd4:4,0x67edd8:4,0x67eddc:4,0x67ede0:4,0x67ede4:4,0x67ede8:4,0x67edec:4,0x67edf0:4,0x67edf4:4,0x67edf8:4,0x67edfc:4,0x67ee00:4,0x67ee04:4,0x67ee10:4,0x67ee14:4,0x67ee18:4,0x67ee1c:4,0x67ee20:4,0x67ee24:4,0x67ee28:4,0x67ee2c:4,0x67ee30:4,0x67ee34:4,0x67ee38:4,0x67ee58:4,0x67ee5c:4,0x67ee60:4,0x67ee84:4,0x67ee8c:4,0x67ee90:4,0x67eea0:4,0x67eea4:4,0x67eea8:4,0x67eeac:4,0x67eeb0:4,0x67eeb4:4,0x67eeb8:4,0x67eebc:4,0x67eec4:4,0x67eecc:4,0x67eefc:4,0x67ef00:4,0x67ef28:4,0x67ef2c:4,0x67ef44:4,0x67ef60:4,0x67ef98:4,0x67ef9c:4,0x67efb0:4,0x67efb4:4,0x67efb8:4,0x67efc0:4,0x67efc4:4,0x67efcc:4,0x67efd0:4,0x67efe0:4,0x67eff4:4,0x67f010:4,0x67f024:4,0x67f048:4,0x67f054:4,0x67f07c:4,0x67f09c:4,0x67f0ac:4,0x67f0f4:4,0x67f10c:4,0x67f148:4,0x67f15c:4,0x67f160:4,0x67f1a0:4,0x67f1b8:4,0x67f1bc:4,0x67f1dc:4,0x67f208:4,0x67f240:4,0x67f280:4,0x67f284:4,0x67f2a0:4,0x67f2a8:4,0x67f2ac:4,0x67f2b0:4,0x67f2c8:4,0x67f2d4:4,0x67f2dc:4,0x67f2f0:4,0x67f388:4,0x67f3fc:4,0x67f410:4,0x67f43a:1,0x67f43b:1,0x67f43c:4,0x67f440:4,0x67f444:4,0x67f448:4,0x67f44c:4,0x67f450:4,0x67f454:4,0x67f474:4,0x67f4a4:4,0x67f4e8:4,0x67f4fc:4,0x67f517:1,0x67f534:4,0x67f53c:4,0x67f550:4,0x67f57c:4,0x67f580:4,0x67f608:4,0x67f60c:4,0x67f678:4,0x67f67c:4,0x67f684:4,0x67f698:4,0x67f69c:4,0x67f7a8:4,0x67f7ac:4,0x67f7b0:4,0x67f7c8:4,0x67f7d4:4,0x67f800:1,0x67f801:1,0x67f840:4,0x67f864:4,0x67f87c:4,0x67f898:4,0x67f8a8:4,0x67f8c0:4,0x67f8d4:4,0x67f8dc:4,0x67f8e0:4,0x67f8e4:4,0x67f908:4,0x67f90c:4,0x67f934:4,0x67f968:4,0x67f980:4,0x67f988:4,0x67f990:4,0x67f9a4:4,0x67f9a8:4,0x67f9ac:4,0x67f9b0:4,0x67f9bc:4,0x67f9c0:4,0x67f9f4:4,0x67f9fc:4,0x67fa20:4,0x67fa68:4,0x67fa7c:4,0x67fab4:4,0x67fac0:4,0x67fad8:4,0x67fae0:4,0x67faec:4,0x67faf8:4,0x67fafc:4,0x67fb20:4,0x67fb54:4,0x67fb60:4,0x67fb7c:4,0x67fb80:4,0x67fba0:4,0x67fbc0:4,0x67fbcc:4,0x67fbec:4,0x67fbf0:4,0x67fc1c:4,0x67fc24:4,0x67fc40:4,0x67fc68:4,0x67fcac:4,0x67fccc:4,0x67fcd0:4,0x67fce8:4,0x67fcf8:4,0x67fd04:4,0x67fd3c:4,0x67fdcc:4,0x67fddc:4,0x67fde0:4,0x67fde8:4,0x67fe08:4,0x67fe14:4,0x67fe40:4,0x67fe44:4,0x67fe48:4,0x67fe4c:4,0x67fe70:4,0x67feb0:4,0x67febc:4,0x67fec4:1,0x67fedc:4,0x67ff44:4,0x67ff58:4,0x67ff5c:4,0x67ff88:4,0x67ff8c:4,0x67ffb8:4,0x67ffc8:4,0x67ffd0:4,0x67ffd4:4,0x67ffe4:4},{},{},{0x6a0000:1,0x6a0002:1,0x6a0003:1,0x6a0004:4,0x6a0008:4,0x6a000c:4,0x6a0010:16,0x6a002c:4,0x6a0040:64,0x6a0200:256,0x6a0300:256,0x6a0400:1024,0x6a0800:256,0x6a0900:256,0x6a0b00:256,0x6a0c00:1024,0x6a1000:1024,0x6a1400:1024,0x6a1800:1024,0x6a1c00:1024,0x6a2000:1024,0x6a2400:1024,0x6a2800:1024,0x6a2c00:1024,0x6a3000:256,0x6a3100:256,0x6a3200:256,0x6a3400:1024,0x6a3800:1024,0x6a3c00:1024,0x6a4a00:256,0x6a4b00:256,0x6a5000:1024,0x6a5400:1024,0x6a5800:1024,0x6a5c00:1024,0x6a6c00:1024,0x6a7000:1024,0x6a7400:1024,0x6a7800:1024,0x6a7c00:1024,0x6ae000:1024,0x6ae400:1024,0x6ae800:1024,0x6aec00:1024},{},{},{},{0x6e0600:256,0x6e0700:256,0x6e1000:1024,0x6e2228:4,0x6e222c:4,0x6e2800:1024,0x6e2c0c:4,0x6e2c90:16,0x6e3000:256,0x6e3300:256,0x6e3400:256,0x6e3500:256,0x6e3800:1024,0x6e3c00:1024,0x6e4000:256,0x6e4100:256,0x6e4800:256,0x6e4900:256,0x6e4b00:64,0x6e4b40:64,0x6e4b80:16,0x6e4b90:16,0x6e4ba0:16,0x6e4bb0:16,0x6e4bc0:64,0x6e4c00:16,0x6e4c10:16,0x6e4c20:16,0x6e4c30:16,0x6e4c84:4,0x6e4c9c:4,0x6e4cb8:4,0x6e4cc0:64,0x6e4d00:64,0x6e4d40:64,0x6e5000:1024,0x6e5400:1024,0x6e5800:1024,0x6e5c44:4,0x6e5d20:16,0x6e5d30:16,0x6e5e00:256,0x6e5f00:256,0x6e6000:1024,0x6e6400:1024,0x6e6800:1024,0x6e6c00:1024,0x6e7000:1024,0x6e7400:1024,0x6e7800:1024,0x6e7c00:1024,0x6e9800:1024,0x6e9c00:256,0x6e9d00:256,0x6ea520:16,0x6ea530:16,0x6ea600:256,0x6ea700:256,0x6eacc0:64,0x6ead00:16,0x6ead10:16,0x6ead20:16,0x6ead40:16,0x6ead50:16,0x6ead60:16,0x6ead70:16,0x6eadc0:16,0x6eadd0:16,0x6eb000:1024,0x6eb400:1024,0x6eb800:1024,0x6ebc00:1024,0x6ec000:1024,0x6ec400:1024,0x6ec800:1024,0x6ecc00:1024,0x6ed000:1024,0x6ed400:1024,0x6ed800:1024,0x6edc00:1024,0x6ee400:1024,0x6ee820:16,0x6ee830:16,0x6eec00:256,0x6eed00:256,0x6ef000:1024,0x6ef400:1024,0x6ef800:1024,0x6efc00:1024},{0x6f0000:1024,0x6f0400:1024,0x6f0800:1024,0x6f0c00:1024,0x6f1000:1024,0x6f1400:1024,0x6f1800:1024,0x6f1c00:1024,0x6f2000:1024,0x6f2400:1024,0x6f2800:1024,0x6f2c00:1024,0x6f3000:1024,0x6f3400:1024,0x6f3800:1024,0x6f3c00:1024,0x6f4200:256,0x6f43c0:16,0x6f4440:16,0x6f4450:16,0x6f4800:1024,0x6f4c00:1024,0x6f5500:256,0x6f5bc0:16,0x6f5bd0:16,0x6f5cf8:4,0x6f5cfc:4,0x6f7000:256,0x6f7100:256,0x6f7200:256,0x6f7300:256,0x6f7400:256,0x6f7500:256,0x6f76c8:4,0x6f76cc:4,0x6f7740:64,0x6f7780:16,0x6f7790:16,0x6f7800:1024,0x6f7c00:256,0x6f7e00:256,0x6f7f00:256,0x6f8000:1024,0x6f8400:1024,0x6f8800:1024,0x6f8c00:1024,0x6f9000:1024,0x6f9400:1024,0x6f9800:1024,0x6f9c00:1024,0x6fa000:1024,0x6fa400:1024,0x6faa00:256,0x6fac00:1024,0x6fb000:1024,0x6fb400:1024,0x6fba00:256,0x6fbb00:256,0x6fc000:1024,0x6fc400:1024,0x6fc800:1024,0x6fcc00:1024,0x6fd000:1024,0x6fd400:1024,0x6fdd1c:1,0x6fdd80:64,0x6fddc0:64,0x6fde00:256,0x6fdf04:4,0x6fdf08:4,0x6fdf0c:4,0x6fdf10:4,0x6fdff0:4,0x6fdff8:4,0x6fe000:1024,0x6fe400:1024,0x6feb60:16,0x6feb70:16,0x6feb9c:4,0x6feba0:16,0x6febb0:16},{0x700000:1024,0x700400:1024,0x700800:1024,0x700c00:1024,0x701000:1024,0x701400:1024,0x701800:1024,0x701c00:1024,0x702000:1024,0x702400:1024,0x702800:1024,0x702c00:1024,0x703000:1024,0x703400:1024,0x703800:1024,0x703c00:1024,0x704000:256,0x704100:256,0x704200:256,0x704300:256,0x704900:256,0x704a00:256,0x704b00:256,0x705000:1024,0x705400:1024,0x705800:1024,0x705c00:1024,0x706000:256,0x706100:256,0x706200:256,0x706300:256,0x706400:1024,0x706d80:64,0x706dc0:64,0x706f00:256,0x707000:1024,0x707400:256,0x707500:256,0x707a00:256,0x707b00:256,0x707c00:1024,0x708000:1024,0x708400:256,0x708930:4,0x708934:4,0x70c000:1024,0x70e000:1024,0x70e400:1024,0x70e800:1024,0x70ec00:1024,0x70f000:1024,0x70f400:1024,0x70f800:1024,0x70fc00:1024},{0x710000:1024,0x710400:1024,0x710800:256,0x710900:256,0x710bc0:16,0x710bd0:16,0x710c00:1024,0x711000:256,0x711100:256,0x711200:256,0x7115e8:4,0x7115ec:4,0x711800:1024,0x711f00:256,0x712c00:1024,0x713000:1024,0x7134a0:16,0x7134b0:16,0x7134e4:4,0x713600:256,0x713700:256,0x713800:256,0x713900:256,0x713a00:256,0x713b00:64,0x713b40:64,0x713be0:4,0x713e00:256,0x713f00:256,0x714000:1024,0x714400:1024,0x714800:1024,0x714c00:1024,0x715000:1024,0x715400:1024,0x715800:1024,0x715c00:1024,0x716000:1024,0x716400:1024,0x716800:1024,0x716c00:1024,0x717000:1024,0x717400:1024,0x717800:1024,0x717c00:1024,0x718000:256,0x718100:256,0x718260:16,0x718270:4,0x718274:4,0x718400:1024,0x718800:1024,0x718c00:1024,0x71c200:256,0x71c300:256,0x71c564:4,0x71c800:256,0x71c900:256,0x71ca00:256,0x71cc00:1024,0x71d060:16,0x71d070:16,0x71d080:64,0x71d0c0:64,0x71d100:256,0x71d400:64,0x71d464:4,0x71d4b8:4,0x71d4bc:4,0x71d500:64,0x71d540:64,0x71d600:256,0x71d700:256,0x71da00:256,0x71db00:256,0x71dc00:1024,0x71e000:1024,0x71e400:1024,0x71e800:1024,0x71ec00:1024,0x71f000:1024,0x71f400:1024,0x71f800:1024},{0x721c00:256,0x721f40:4,0x721f44:4,0x723600:256,0x723700:256,0x723c00:1024,0x724000:1024,0x724400:256,0x724f40:64,0x725000:1024,0x725400:1024,0x725800:1024,0x725c00:1024,0x726000:1024,0x726400:1024,0x726800:1024,0x726e00:16,0x726e40:64,0x726f00:16,0x726f10:16,0x726fa0:16,0x726fb0:16,0x727000:1024,0x727400:256,0x727500:256,0x727600:256,0x727700:64,0x727740:64,0x727780:64,0x7277c0:4,0x7277c4:4,0x7277c8:4,0x7277cc:4,0x7277d0:16,0x7277e0:16,0x7277f0:16,0x728400:256,0x728700:256,0x728a00:256,0x728b00:256,0x728d40:4,0x728d44:4,0x728d50:4,0x728d54:4,0x728d80:64,0x72c400:256,0x72c500:256,0x72c6f8:4,0x72c6fc:4,0x72d000:1024,0x72d400:256,0x72d500:256,0x72d600:256,0x72d700:256,0x72d800:1024,0x72dc00:1024,0x72e000:1024,0x72e400:1024,0x72e800:1024,0x72ec00:1024,0x72f000:1024,0x72f400:1024,0x72f800:1024,0x72fc00:1024},{0x731800:1024,0x731c00:256,0x731d00:256,0x731f40:4,0x731f44:4,0x731f48:4,0x731f4c:4,0x732000:1024,0x732a38:4,0x732c00:256,0x732d00:256,0x732e00:256,0x732f00:256,0x733000:1024,0x733400:1024,0x733800:1024,0x733c00:1024,0x734540:16,0x735400:64,0x7354c0:16,0x7354d0:16,0x7355c0:64,0x736400:1024,0x736800:1024,0x737800:1024,0x737c10:16,0x739400:1024,0x739800:256,0x739900:256,0x739a00:256,0x739b00:256,0x739c00:256,0x739d00:256,0x739e00:256,0x739f00:256,0x73a640:16,0x73a650:16,0x73a800:1024,0x73ac00:1024,0x73b400:1024,0x73bb00:4,0x73bb04:4,0x73bb08:4,0x73bb0c:4,0x73be00:256,0x73bf00:256,0x73c000:1024,0x73c400:1024,0x73c800:1024,0x73cc00:1024,0x73d000:1024,0x73d400:1024,0x73d800:1024,0x73dc00:1024,0x73e000:1024,0x73e400:1024,0x73e800:1024,0x73ec00:1024},{0x740008:4,0x74000c:4,0x740018:4,0x74001c:4,0x740100:256,0x740200:256,0x740300:256,0x740400:1024,0x740800:1024,0x740d00:256,0x741000:1024,0x741400:1024,0x741800:1024,0x741c00:1024,0x743200:16,0x743400:1024,0x743800:256,0x743900:256,0x743a80:16,0x743ad0:16,0x743c00:1024,0x744200:64,0x744240:64,0x744488:4,0x74448c:4,0x7444b0:4,0x7444b4:4,0x744500:256,0x744600:64,0x744640:64,0x744c00:256,0x744d00:256,0x744e00:256,0x744f00:256,0x745500:256,0x745990:16,0x745a50:16,0x745ab8:4,0x745abc:4,0x745f00:256,0x747000:1024,0x747400:256,0x747500:256,0x748000:1024,0x748400:1024,0x748800:1024,0x748c00:1024,0x749000:1024,0x749400:1024,0x749800:1024,0x749c00:1024,0x74a000:1024,0x74a400:1024,0x74a800:1024,0x74ac00:1024,0x74b000:1024,0x74b400:1024,0x74b800:1024,0x74bc00:1024,0x74c000:256,0x74c110:16,0x74c120:16,0x74c130:16,0x74c198:4,0x74c1a4:4,0x74c1b0:4,0x74c1b4:4,0x74c200:256,0x74c300:256,0x74c400:256,0x74c5a0:4,0x74c5a4:4,0x74c600:256,0x74c700:64,0x74c740:64,0x74c780:16,0x74c790:16,0x74cc00:256,0x74cd00:256,0x74cf00:256,0x74d000:1024,0x74d4a0:16,0x74d528:4,0x74d52c:4,0x74d540:64,0x74d580:64,0x74d5c0:64,0x74d620:16,0x74d630:16,0x74d640:16,0x74d680:64,0x74d6c0:64,0x74d700:256,0x74d800:1024,0x74e000:1024,0x74e400:1024,0x74e800:1024,0x74ec00:1024,0x74f200:256,0x74f300:256,0x74f400:256,0x74f500:256,0x74f600:256,0x74f700:256,0x74f800:256,0x74f900:256,0x74fb40:64,0x74fc00:256,0x74fd00:256,0x74fe68:4,0x74fe6c:4,0x74fe80:64,0x74fec0:64,0x74ff80:64,0x74ffc0:64},{0x750800:1024,0x750c00:1024,0x751500:256,0x751600:256,0x751700:256,0x751800:1024,0x751c00:1024,0x752000:1024,0x752400:1024,0x752800:1024,0x752c00:256,0x752d00:256,0x753000:1024,0x753530:16,0x7535b0:16,0x753900:256,0x753a00:64,0x753a40:64,0x753b00:256,0x753c00:1024,0x754000:1024,0x754400:1024,0x754800:256,0x754900:256,0x754a40:16,0x754a50:16,0x754a80:64,0x754ac0:64,0x754b00:256,0x754c00:1024,0x755000:1024,0x755400:1024,0x755800:1024,0x755c00:1024,0x756400:256,0x756500:256,0x756710:16,0x756728:4,0x75672c:4,0x756748:4,0x75674c:4,0x756780:16,0x7568a8:4,0x7568ac:4,0x756a00:256,0x756b00:256,0x757000:1024,0x757400:1024,0x757840:64,0x757880:64,0x7578c0:64,0x757900:64,0x757940:64,0x757980:64,0x7579c0:4,0x7579c4:4,0x757a80:64,0x757ac0:64,0x757c00:1024,0x758000:1024,0x758400:1024,0x758800:1024,0x758c00:1024,0x759000:1024,0x759400:1024,0x759800:1024,0x759c00:1024,0x75a000:1024,0x75a400:1024,0x75a800:1024,0x75ac00:1024,0x75b000:1024,0x75b400:1024,0x75b800:1024,0x75bc00:1024},{0x761800:256,0x761900:256,0x761a00:256,0x761c00:256,0x761d00:256,0x761e00:256,0x761f00:256,0x764000:256,0x764100:256,0x764200:256,0x764370:16,0x764800:1024,0x764c00:1024,0x765000:256,0x765100:256,0x765400:256,0x765500:256,0x765820:16,0x765830:16,0x765840:64,0x765880:64,0x7658c0:64,0x765900:256,0x765bf0:16,0x766610:16,0x766620:4,0x766624:4,0x7667a4:4,0x7667a8:4,0x7667ac:4,0x7667b0:4,0x767000:1024,0x767400:1024,0x767800:1024,0x767c00:256,0x767d00:256,0x767e00:256,0x767f80:16,0x767f90:16,0x768400:1024,0x769000:1024,0x76b200:256,0x76b400:1024,0x76b800:64,0x76b840:64,0x76b880:64,0x76b8c0:64,0x76ba00:256,0x76bb00:256,0x76bc00:256,0x76be00:256,0x76bf00:256,0x76c000:256,0x76c100:16,0x76c120:16,0x76c130:16,0x76c140:16,0x76c160:16,0x76c170:16,0x76c180:64,0x76c1c0:64,0x76c200:64,0x76c240:64,0x76c280:64,0x76c2c0:64,0x76c300:64,0x76c340:64,0x76c380:64,0x76c3c0:64,0x76c400:1024,0x76ca00:256,0x76cb00:256,0x76cc00:1024,0x76d400:256,0x76d500:256,0x76e000:1024,0x76e400:256,0x76e500:256,0x76e600:256,0x76ef00:256,0x76f200:256,0x76f400:1024,0x76f800:1024,0x76fc00:1024},{0x770000:256,0x770100:256,0x770200:16,0x770210:16,0x770280:64,0x7702c0:64,0x770300:256,0x770400:1024,0x770800:256,0x770a00:64,0x770a40:64,0x770f88:4,0x770f8c:4,0x771000:256,0x7712c0:16,0x7712d0:4,0x7712d4:4,0x7712e0:16,0x7712f0:16,0x771300:256,0x771400:1024,0x771b40:64,0x771b80:16,0x771b90:16,0x771ba0:16,0x771bb0:16,0x771bc0:64,0x771c00:256,0x771d00:256,0x771e30:16,0x771fc0:16,0x771fd0:16,0x772000:1024,0x772400:256,0x772500:64,0x772540:64,0x772580:64,0x7725c0:64,0x772600:64,0x772640:64,0x772680:64,0x7726c0:16,0x7726d0:16,0x7726e0:16,0x7726f0:16,0x772700:256,0x772800:64,0x772840:16,0x772880:64,0x7728c0:64,0x772900:256,0x772a00:16,0x772a10:16,0x772a80:4,0x772a84:4,0x772a88:4,0x772a8c:4,0x772ae0:16,0x772af0:16,0x772c00:256,0x772d00:256,0x773000:1024,0x773400:1024,0x773900:256,0x773a00:256,0x773b80:64,0x773bc0:64,0x773c00:256,0x773d00:256,0x773e00:256,0x773f20:16,0x773f30:16,0x774bd0:16,0x774e00:256,0x774f00:256,0x775000:256,0x7752d0:16,0x775400:1024,0x775800:1024,0x776000:1024,0x776400:1024,0x776c00:256,0x776d00:256,0x777000:1024,0x777400:1024,0x777800:1024,0x777c00:1024,0x778000:1024,0x778400:1024,0x778800:1024,0x778c00:1024,0x779000:1024,0x7794a0:16,0x7794b0:16,0x7797c0:64,0x77a0c8:4,0x77a0cc:4,0x77a178:4,0x77a17c:4,0x77a180:64,0x77a1c0:64,0x77a200:256,0x77a300:256,0x77a400:1024,0x77b000:1024,0x77b400:1024,0x77b800:1024,0x77bc00:1024,0x77e800:256,0x77e900:256,0x77eb80:64,0x77f800:1024,0x77fc60:4,0x77fc64:4,0x77fcf0:16,0x77fd00:256,0x77fe00:256,0x77ff00:256},{0x780000:1024,0x780400:1024,0x780800:1024,0x780c00:1024,0x781800:1024,0x781e00:256,0x781f00:256,0x782000:1024,0x782400:1024,0x782800:1024,0x782c00:1024,0x783000:256,0x783100:256,0x783400:256,0x783500:256,0x783600:256,0x783700:256,0x784000:1024,0x784400:1024,0x784820:16,0x784830:16,0x784880:64,0x7848c0:64,0x784c00:1024,0x785000:1024,0x785400:1024,0x785808:4,0x78580c:4,0x785a00:256,0x785b00:256,0x785c00:256,0x785e00:256,0x785f00:256,0x788000:1024,0x788400:64,0x788440:64,0x788480:64,0x7884c0:64,0x788500:256,0x788600:256,0x788700:256,0x788810:4,0x788814:4,0x788880:64,0x788900:64,0x788940:64,0x788f80:16,0x788f90:16,0x78c000:1024,0x78c400:1024,0x78c800:1024,0x78cc00:1024,0x78d000:1024,0x78d400:1024,0x78d800:1024,0x78dc00:1024,0x78e000:1024,0x78e400:1024,0x78e800:1024,0x78ec00:1024,0x78f000:1024,0x78f400:1024,0x78f800:1024,0x78fc00:1024},{0x790008:4,0x79000c:4,0x790010:16,0x790400:256,0x790500:256,0x790800:1024,0x790c00:1024,0x791000:1024,0x791400:1024,0x791800:1024,0x791c00:256,0x791d00:256,0x791e00:256,0x791f00:256,0x792000:1024,0x792400:256,0x792500:256,0x792600:256,0x792700:256,0x792800:1024,0x792e00:64,0x792e4c:4,0x792e80:64,0x792ec0:64,0x792f00:256,0x793000:256,0x793100:256,0x793208:4,0x79320c:4,0x793300:256,0x7934a0:16,0x7934b0:16,0x7934d0:16,0x7934e0:16,0x7934f0:16,0x7936b0:4,0x7936b4:4,0x793700:64,0x793800:256,0x793900:256,0x793a00:64,0x793a40:64,0x793a88:4,0x793a8c:4,0x793a90:16,0x793aa0:4,0x793aa4:4,0x793b00:256,0x793c00:1024,0x794400:1024,0x794c00:256,0x794d00:256,0x794f80:64,0x795900:256,0x796480:64,0x7964c0:64,0x796500:64,0x7965d0:16,0x79c000:256,0x79c100:256,0x79c200:256,0x79c300:256,0x79c400:1024,0x79c8c0:4,0x79c8c4:4,0x79c900:256,0x79cc00:1024,0x79e000:1024,0x79e400:1024,0x79e800:1024,0x79ec00:1024,0x79f800:1024,0x79ff00:256},{0x7a0040:64,0x7a0080:64,0x7a00c0:64,0x7a0400:1024,0x7a0800:256,0x7a0900:256,0x7a0a00:64,0x7a0a40:64,0x7a0a80:4,0x7a0a84:1,0x7a0a85:1,0x7a0a86:1,0x7a0a87:1,0x7a0a88:1,0x7a0a89:1,0x7a0a8a:1,0x7a0a8b:1,0x7a0a8c:4,0x7a0a90:16,0x7a0aa0:16,0x7a0ab0:16,0x7a0ac0:64,0x7a0b00:64,0x7a0b40:64,0x7a0c00:256,0x7a0d00:256,0x7a0e00:256,0x7a3000:256,0x7a3100:64,0x7a3300:256,0x7a4000:1024,0x7a4400:1024,0x7a4800:1024,0x7a4c00:1024,0x7a5000:1024,0x7a5400:1024,0x7a5800:1024,0x7a5c00:1024,0x7a6000:256,0x7a6100:256,0x7a6600:16,0x7a6640:16,0x7a6650:16,0x7a7000:1024,0x7a7700:256,0x7a8064:4,0x7a8078:4,0x7a807c:4,0x7a8800:1024,0x7a8c00:1024,0x7a9080:64,0x7a90c0:64,0x7a98c0:64,0x7a9c00:1024,0x7abc00:1024,0x7ac000:1024,0x7ac600:256,0x7ac828:4,0x7ac82c:4,0x7ac840:64,0x7ac930:16,0x7acc00:1024,0x7ae000:1024,0x7ae400:1024,0x7ae800:1024,0x7aec00:1024,0x7af000:1024,0x7af400:1024,0x7af818:4,0x7af81c:4,0x7af830:16,0x7aff40:4,0x7aff44:4},{0x7b0080:64,0x7b0400:1024,0x7b0800:1024,0x7b0c00:1024,0x7b3180:64,0x7b31c0:64,0x7b32a0:16,0x7b32b0:16,0x7b3400:1024,0x7b3800:256,0x7b3900:256,0x7b3a00:64,0x7b3a40:64,0x7b3a80:64,0x7b3ac0:16,0x7b3ad0:16,0x7b3ae0:16,0x7b3af0:16,0x7b3b00:256,0x7b3c00:256,0x7b3d00:256,0x7b3e00:256,0x7b4000:1024,0x7b4400:1024,0x7b4800:1024,0x7b4c00:1024,0x7b5000:1024,0x7b5400:1024,0x7b5800:1024,0x7b5c00:1024,0x7b6000:256,0x7b6100:256,0x7b6200:64,0x7b6240:64,0x7b6380:64,0x7b63c0:64,0x7b6400:16,0x7b6410:16,0x7b6500:256,0x7b6700:64,0x7b6740:64,0x7b6c80:16,0x7b6cd0:16,0x7b7000:1024,0x7b7400:1024,0x7b7800:1024,0x7b7c00:1024,0x7b8000:1024,0x7b8400:1024,0x7b8850:16,0x7b8900:256,0x7b8a00:256,0x7b8b00:256,0x7b9000:1024,0x7b9400:256,0x7b9500:256,0x7b9600:256,0x7b9700:256,0x7b9800:1024,0x7b9c00:1024,0x7ba000:1024,0x7ba400:1024,0x7ba800:1024,0x7bac00:256,0x7bad00:256,0x7bae00:256,0x7baf00:256,0x7bb03c:4,0x7bb050:16,0x7bb100:256,0x7bb200:256,0x7bb300:256,0x7bb400:1024,0x7bb800:1024,0x7bbc00:1024,0x7bc400:256,0x7bc500:256,0x7bc780:64,0x7bc7c0:64,0x7bce00:256,0x7bcf00:256,0x7be800:1024,0x7bf200:64,0x7bf240:64,0x7bf2c0:4,0x7bf2c4:4,0x7bf400:1024,0x7bf900:256,0x7bfd00:256,0x7bfe60:4,0x7bfe64:4},{0x7c0640:64,0x7c0e00:256,0x7c0f00:256,0x7c1000:256,0x7c1100:256,0x7c1400:256,0x7c1500:16,0x7c1510:16,0x7c1520:16,0x7c1530:16,0x7c1540:64,0x7c1580:64,0x7c15c0:64,0x7c1600:256,0x7c1700:256,0x7c1cc0:64,0x7c1d00:64,0x7c1d40:64,0x7c1f00:256,0x7c2870:16,0x7c2880:64,0x7c28c0:16,0x7c28d0:16,0x7c28f0:4,0x7c2a00:64,0x7c2a40:64,0x7c2a80:64,0x7c2ac0:64,0x7c2f00:64,0x7c4000:256,0x7c4100:256,0x7c4200:64,0x7c4240:64,0x7c4300:256,0x7c4400:1024,0x7c4800:256,0x7c4900:256,0x7c4a00:256,0x7c4b00:256,0x7c4c00:1024,0x7c5800:256,0x7c5900:64,0x7c5940:64,0x7c5980:64,0x7c59c0:64,0x7c5a00:256,0x7c5b00:256,0x7c5c00:1024,0x7c6c08:4,0x7c6c0c:4,0x7c6c28:4,0x7c6c2c:4,0x7c6d60:4,0x7c6d64:4,0x7c7000:256,0x7c7100:256,0x7c7200:256,0x7c7300:256,0x7c7400:256,0x7c7500:256,0x7c7600:256,0x7c7700:256,0x7c7e00:256,0x7c7f00:256,0x7c8000:1024,0x7c8400:1024,0x7c9380:64,0x7c93c0:64,0x7c9700:256,0x7c9800:256,0x7c9c00:256,0x7ca000:256,0x7ca100:256,0x7ca200:256,0x7ca300:256,0x7ca400:1024,0x7cac00:256,0x7cad00:256,0x7cae00:256,0x7caf00:256,0x7cc000:256,0x7cc100:256,0x7cc400:256,0x7cc800:1024,0x7ccc00:1024,0x7cdc00:1024,0x7ce000:256,0x7ce100:256,0x7ce200:256,0x7ce300:256,0x7ce400:1024,0x7ce800:256,0x7ce900:256,0x7cea00:256,0x7ceb00:256,0x7cec00:1024,0x7cf000:64,0x7cf040:64,0x7cf080:64,0x7cf200:256,0x7cf3c0:64,0x7cf800:64,0x7cf840:64,0x7cf900:256,0x7cfa00:256,0x7cfb00:256,0x7cfe00:64},{0x7d1fc0:64,0x7d2000:256,0x7d2100:256,0x7d2200:256,0x7d2300:64,0x7d2340:64,0x7d2380:64,0x7d23c0:64,0x7d2400:1024,0x7d2800:1024,0x7d2c00:1024,0x7d3a80:64,0x7d3ac0:64,0x7d3d80:64,0x7d3dc0:64,0x7d3e00:64,0x7d4000:1024,0x7d4400:1024,0x7d4800:256,0x7d4900:256,0x7d4a00:256,0x7d4b00:256,0x7d4c00:64,0x7d4c40:64,0x7d4c80:64,0x7d4cc0:64,0x7d4d00:256,0x7d4e00:256,0x7d4f00:256,0x7d5000:1024,0x7d5400:1024,0x7d5800:1024,0x7d5c00:1024,0x7d6000:256,0x7d6100:256,0x7d6200:256,0x7d6800:1024,0x7d6c00:1024,0x7d7000:1024,0x7d7400:1024,0x7d7800:1024,0x7d7c00:1024,0x7da900:256,0x7dab00:256,0x7dd000:64,0x7dd200:256,0x7dd300:256,0x7dd500:64,0x7dd540:64,0x7dd660:16,0x7dd670:16,0x7dd700:64,0x7dd800:256,0x7dd900:256,0x7dda00:256,0x7ddb00:256,0x7ddc00:256,0x7ddd00:256,0x7dde00:256,0x7ddf00:256,0x7dfe80:64,0x7dfec0:64},{},{},{},{},{},{},{},{},{},{},{},{0x893b58:4},{},{0x8b0538:4,0x8b053c:4,0x8b0550:4,0x8b055c:4,0x8b056c:4,0x8b0900:256,0x8b8100:256,0x8b9400:256,0x8b9b00:256,0x8b9f00:256,0x8baa00:256,0x8bb000:256,0x8bb700:256,0x8bba00:256,0x8bbd00:256,0x8bc400:1024,0x8bc800:1024,0x8bcc00:1024,0x8bd000:1024,0x8bd400:1024,0x8bd900:256,0x8bdb00:256,0x8bdc00:256,0x8bdd00:256,0x8be000:256,0x8be200:256,0x8be300:256},{0x8c4b00:256,0x8c8f00:256,0x8ccd00:256,0x8cce00:256,0x8ccf00:256,0x8cd200:256,0x8ce000:256,0x8ced00:256,0x8cf000:256,0x8cf300:256,0x8cf600:256,0x8cf900:256,0x8cfa00:256,0x8cff00:256},{},{},{},{0x900000:256,0x900700:256,0x900c00:256,0x903400:256,0x907b00:256,0x90ff00:256},{},{0x92c438:4,0x92c444:4,0x92c448:4,0x92c44c:4},{},{},{},{0x960000:256,0x967300:256,0x967900:256,0x967a00:256,0x968188:4,0x968198:4,0x9681c0:4,0x9681d8:4,0x9681fc:4,0x968a00:256,0x968b00:256,0x96df00:256,0x96f200:4,0x96f204:4,0x96f208:4,0x96f21c:4,0x96f22c:4,0x96f230:4,0x96f234:4,0x96f238:4,0x96f24c:4,0x96f250:4,0x96f25c:4,0x96f260:4,0x96f270:4,0x96f274:4,0x96f278:4,0x96f298:4,0x96f29c:4,0x96f2a0:4,0x96f2a4:4,0x96f2a8:4,0x96f2b8:4,0x96f2bc:4,0x96f2c0:4,0x96f2d4:4,0x96f2e0:4,0x96f2e8:4,0x96f2ec:4,0x96f2f0:4,0x96f2f4:4,0x96f2f8:4,0x96ff00:256},{},{0x986880:64,0x9868c0:64},{0x990000:256,0x990300:256,0x992200:256,0x992300:256,0x992400:256,0x992500:256,0x996300:256,0x996500:256,0x997600:256,0x997700:256},{},{},{},{0x9d0000:256,0x9d1200:256,0x9d3d00:256,0x9d7a00:256,0x9d9400:256,0x9d9c00:256,0x9dff00:256},{},{0x9fe200:256},{0xa013d0:4,0xa013d4:4,0xa013d8:4,0xa01430:4,0xa0ca3c:4,0xa0ee40:4},{0xa1cf00:256},{0xa26900:256},{0xa30000:256,0xa32f04:4,0xa33500:4,0xa33504:4,0xa33508:4,0xa3350c:4,0xa33524:4,0xa33528:4,0xa3352c:4,0xa33530:4,0xa33534:4,0xa33538:4,0xa3353c:4,0xa33540:4,0xa33558:4,0xa3355c:4,0xa33560:4,0xa33564:4,0xa33568:4,0xa3356c:4,0xa33570:4,0xa33574:4,0xa33578:4,0xa3357c:4,0xa33580:4,0xa33584:4,0xa33588:4,0xa335a0:4,0xa335a4:4,0xa335a8:4,0xa335ac:4,0xa335bc:4,0xa335dc:4,0xa335f0:4,0xa37d00:256,0xa38e00:256,0xa3b100:256,0xa3b300:256,0xa3cc00:256},{},{},{0xa66f00:256},{0xa78b00:256,0xa7bd00:256,0xa7dcf4:4},{0xa8a000:256},{},{0xaab300:256},{0xab0800:1024,0xab0c00:1024,0xab2200:256,0xab2300:256,0xab2400:1024,0xab2800:1024,0xab2c00:1024,0xab5000:1024,0xab5400:1024,0xab5800:1024,0xab5c00:1024,0xab6800:1024,0xab6c00:1024,0xab7000:1024,0xab7400:1024,0xab7800:1024,0xab7c00:1024,0xabd000:1024,0xabd400:1024,0xabd800:1024,0xabdc00:1024},{},{},{},{0xaf0000:1024,0xaf0400:1024,0xaf0800:1024,0xaf0c00:1024,0xaf1000:1024,0xaf1400:1024,0xaf1800:1024,0xaf1e00:256,0xaf1f00:256,0xaf2a00:256,0xaf2b00:256,0xaf2c00:256,0xaf2e00:256,0xaf2f00:256,0xaf3000:1024,0xaf3400:1024,0xaf3800:1024,0xaf3c00:1024,0xaf4000:1024,0xaf4400:1024,0xaf4800:1024,0xaf4c00:1024,0xaf5000:1024,0xaf5400:1024,0xaf5800:1024,0xaf5c00:1024,0xaf6600:256,0xaf6a80:64,0xaf6ac0:64,0xaf6f6c:4,0xaf6f90:4,0xaf6f94:4,0xaf6f98:4,0xaf6f9c:4,0xaf6fa0:4,0xaf6fa4:4,0xaf6fa8:4,0xaf6fac:4,0xaf6fb8:4,0xaf9200:256,0xaf9300:256,0xaf9400:1024,0xaf9800:1024,0xaf9e60:4,0xafa000:1024,0xafa400:1024,0xafa800:1024,0xafac00:1024,0xafb09c:4,0xafb0b0:4,0xafb0bc:4,0xafb200:256,0xafb880:64,0xafb900:256,0xafba00:256,0xafbb00:256,0xafbc00:1024},{},{},{},{},{0xb44c00:256,0xb44d00:256,0xb44e00:256,0xb44f00:256,0xb45400:256,0xb45500:256,0xb45600:256,0xb45800:1024,0xb45e38:4,0xb45e3c:4,0xb45e60:16,0xb45e78:4,0xb45e7c:4,0xb45f80:64,0xb45fc0:64,0xb46000:1024,0xb46400:1024,0xb46800:1024,0xb46c00:1024,0xb47000:1024,0xb47400:1024,0xb47800:1024,0xb47c00:1024,0xb48180:64,0xb481c0:64,0xb48200:256,0xb48800:1024,0xb48c00:1024,0xb49410:4,0xb49414:4,0xb49498:4,0xb4949c:4,0xb494d8:4,0xb494dc:4,0xb494e0:16,0xb494f0:16,0xb49580:16,0xb49590:16,0xb496a0:16,0xb496b0:16,0xb49800:1024,0xb49c00:1024,0xb4a000:1024,0xb4a400:1024,0xb4a800:1024,0xb4ac00:1024,0xb4b270:4,0xb4b274:4,0xb4b2c0:64,0xb4b800:1024,0xb4bc00:64,0xb4bc40:64,0xb4bd94:4,0xb4c8fc:4,0xb4c900:256,0xb4ca00:256,0xb4cb00:256,0xb4d000:256,0xb4d100:256,0xb4d2d4:4,0xb4d2e0:16,0xb4d2f0:16,0xb4d400:256,0xb4d500:256,0xb4dee0:16,0xb4def0:16,0xb4df00:256,0xb4e900:64,0xb4e940:16,0xb4e950:16,0xb4e990:4,0xb4eb40:16,0xb4eb50:16,0xb4eb70:4,0xb4eb88:4},{},{0xb61090:4,0xb61094:4,0xb610c0:16,0xb610d0:16,0xb61200:64,0xb61240:64,0xb617b8:4,0xb617bc:4,0xb617c8:4,0xb617cc:4,0xb62000:1024,0xb62400:1024,0xb62800:1024,0xb62c00:1024,0xb63060:16,0xb63070:16,0xb63100:256,0xb63200:16,0xb63270:16,0xb63300:256,0xb63600:64,0xb63640:64,0xb636f4:4,0xb63d00:256,0xb65000:1024,0xb65400:1024,0xb65800:1024,0xb65c00:256,0xb66000:1024,0xb66400:1024,0xb66800:1024,0xb66c00:1024,0xb67000:1024,0xb67400:1024,0xb67800:1024,0xb67c00:1024,0xb68000:1024,0xb68400:1024,0xb68800:1024,0xb68c00:1024,0xb69000:1024,0xb69400:1024,0xb69d00:256,0xb6a040:16,0xb6a050:16,0xb6ae00:256,0xb6af00:256,0xb6c800:1024,0xb6cc00:1024,0xb6ec80:64,0xb6ecc0:64,0xb6ed18:4,0xb6ed1c:4,0xb6ee00:256,0xb6ef00:16,0xb6ef10:16,0xb6f000:1024,0xb6f400:1024,0xb6fe00:256},{0xb70000:1024,0xb70400:1024,0xb70800:1024,0xb70c00:1024,0xb71000:1024,0xb71400:1024,0xb71800:1024,0xb71c00:1024,0xb72000:1024,0xb72400:1024,0xb72800:1024,0xb72c00:1024,0xb73000:1024,0xb73400:1024,0xb73800:1024,0xb73c00:1024,0xb74000:1024,0xb74400:1024,0xb74ea0:4,0xb74ea4:4,0xb74eb4:4,0xb751ac:4,0xb751b4:4,0xb75400:256,0xb75500:256,0xb75b80:4,0xb75b88:4,0xb75b8c:4,0xb75b90:16,0xb75c00:1024,0xb78000:1024,0xb78400:1024,0xb78800:1024,0xb78c00:1024,0xb79000:1024,0xb79400:1024,0xb79800:1024,0xb79c00:1024,0xb7a000:1024,0xb7a400:1024,0xb7a800:256,0xb7a900:256,0xb7aa00:256,0xb7ac00:1024,0xb7b600:16,0xb7b610:16,0xb7b800:1024,0xb7bc00:1024,0xb7c000:1024,0xb7c400:1024,0xb7c800:1024,0xb7cc00:1024,0xb7d000:1024,0xb7d400:1024,0xb7d800:1024,0xb7dc00:1024,0xb7e000:1024,0xb7e400:1024,0xb7e800:1024,0xb7ec00:1024,0xb7f000:1024,0xb7f400:1024,0xb7f800:1024,0xb7fc00:1024},{},{},{},{},{},{},{},{},{0xc07c9a:1,0xc0bcaa:1},{},{},{},{},{},{},{},{},{},{0xca0064:1,0xca0065:1,0xca007a:1,0xca007b:1,0xca00b0:4,0xca0380:1,0xca0381:1,0xca0480:16,0xca0490:16,0xca04fc:4,0xca05d0:4,0xca05d4:4,0xca05d8:4,0xca0606:1,0xca0607:1,0xca0642:1,0xca0643:1,0xca0648:1,0xca0649:1,0xca0657:1,0xca0658:1,0xca0659:1,0xca065c:1,0xca065d:1,0xca0667:1,0xca066c:1,0xca066e:1,0xca066f:1,0xca0672:1,0xca06b0:16,0xca0800:1,0xca0802:1,0xca0803:1,0xca0804:1,0xca0805:1,0xca080c:1,0xca0818:1,0xca084d:1,0xca0880:16,0xca0890:16,0xca08c0:16,0xca0920:1,0xca0922:1,0xca0923:1,0xca0930:1,0xca0931:1,0xca0933:1,0xca0934:1,0xca0935:1,0xca0936:1,0xca0939:1,0xca093a:1,0xca093b:1,0xca0a40:16,0xca0a70:4,0xca0a74:4,0xca0a78:4,0xca0a7c:4,0xca0c01:1,0xca0c02:1,0xca0c11:1,0xca0c12:1,0xca0c13:1,0xca0c48:1,0xca0c54:1,0xca0c55:1,0xca0c60:1,0xca0c62:1,0xca0c63:1,0xca0c6a:1,0xca0c6f:1,0xca0c74:1,0xca0e40:1,0xca0e41:1,0xca0e45:1,0xca0e49:1,0xca0e4a:1,0xca0e4b:1,0xca0e4c:1,0xca0e4e:1,0xca0e4f:1,0xca0e58:1,0xca0e61:1,0xca0e68:1,0xca0e69:1,0xca0e6c:1,0xca0e6d:1,0xca0e6f:1,0xca0e72:1,0xca0e73:1,0xca0e76:1,0xca0e77:1,0xca0e7c:1,0xca0e7d:1,0xca0e7f:1,0xca0e81:1,0xca0e87:1,0xca0e88:1,0xca0e95:1,0xca0e97:1,0xca0e9d:1,0xca0e9e:1,0xca0e9f:1,0xca0ea9:1,0xca0eaa:1,0xca0eab:1,0xca0eac:4,0xca0eb0:1,0xca0eb8:1,0xca0eb9:1,0xca0ed0:1,0xca0ed1:1,0xca0ed5:1,0xca0edb:1,0xca0edc:1,0xca0ede:1,0xca0edf:1,0xca0ee1:1,0xca0ee2:1,0xca0ee3:1,0xca0ee7:1,0xca0eeb:1,0xca0eec:1,0xca0eed:1,0xca0eee:1,0xca0eef:1,0xca0ef6:1,0xca0efb:1,0xca1442:1,0xca144f:1,0xca1457:1,0xca1458:1,0xca1459:1,0xca145a:1,0xca145e:1,0xca145f:1,0xca1472:1,0xca1475:1,0xca1478:1,0xca147d:1,0xca147f:1,0xca1530:4,0xca1534:4,0xca1538:4,0xca153c:4,0xca1583:1,0xca1584:1,0xca158d:1,0xca158e:1,0xca1593:1,0xca1594:1,0xca1596:1,0xca1597:1,0xca1598:1,0xca1599:1,0xca159a:1,0xca159c:1,0xca16f8:4,0xca16fc:4,0xca1b88:1,0xca1b89:1,0xca2600:1,0xca2601:1,0xca2602:1,0xca2603:1,0xca2608:4,0xca260c:4,0xca2630:16,0xca2640:16,0xca2650:16,0xca2660:16,0xca2670:16,0xca2680:1,0xca2681:1,0xca2682:1,0xca2683:1,0xca2684:1,0xca2685:1,0xca2686:1,0xca2687:1,0xca2688:1,0xca2689:1,0xca268a:1,0xca268c:1,0xca268d:1,0xca268e:1,0xca268f:1,0xca2692:1,0xca2693:1,0xca2695:1,0xca2696:1,0xca2697:1,0xca2698:1,0xca2699:1,0xca269a:1,0xca269b:1,0xca269c:1,0xca269e:1,0xca269f:1,0xca26a0:1,0xca26a1:1,0xca26a4:4,0xca26a8:1,0xca26a9:1,0xca26aa:1,0xca26ab:1,0xca26b0:1,0xca26b1:1,0xca26b8:4,0xca26bc:4,0xca26c0:64,0xca2804:1,0xca2805:1,0xca2807:1,0xca280f:1,0xca2887:1,0xca2888:1,0xca288c:1,0xca288f:1,0xca2890:1,0xca2891:1,0xca2896:1,0xca289b:1,0xca289c:1,0xca289e:1,0xca289f:1,0xca28a2:1,0xca2908:1,0xca2909:1,0xca290b:1,0xca290c:1,0xca290d:1,0xca2980:1,0xca2982:1,0xca2983:1,0xca2998:4,0xca299c:4,0xca29c0:1,0xca29c4:4,0xca29c8:4,0xca29f0:16,0xca2b4c:4,0xca2b90:16,0xca2c10:16,0xca2c30:4,0xca2c43:1,0xca2c4a:1,0xca2c81:1,0xca2c84:1,0xca2c85:1,0xca2c92:1,0xca2c93:1,0xca2d00:1,0xca2d01:1,0xca2d02:1,0xca2d0f:1,0xca2d10:16,0xca2e10:1,0xca2e11:1,0xca2e12:1,0xca2e14:1,0xca2e15:1,0xca2e20:16,0xca2e30:16,0xca2e80:1,0xca2ee0:16,0xca2f52:1,0xca2f53:1,0xca2f60:4,0xca2f64:4,0xca2f68:4,0xca2f6c:4,0xca2f7e:1,0xca2f80:1,0xca2f82:1,0xca2f83:1,0xca39c0:4,0xca39c4:4,0xca39c8:4,0xca39cc:4,0xca39d4:4,0xca39d8:4,0xca39f0:16,0xca3a00:1,0xca3a68:4,0xca3a70:4,0xca3b00:1,0xca3bd4:4,0xca3be8:1,0xca3be9:1,0xca3bec:1,0xca3c30:4,0xca3c34:4,0xca3c60:4,0xca3c64:4,0xca3c70:16,0xca3c84:4,0xca3c88:4,0xca3c8c:4,0xca3c90:16,0xca3d44:4,0xca3d4c:4,0xca3d58:4,0xca3e70:4,0xca3ef8:4,0xca3efc:1,0xca3eff:1,0xca3f51:1,0xca3f52:1,0xca3f53:1,0xca3f54:4,0xca3f58:4,0xca3f5c:4,0xca3fa0:16,0xca3fb0:16,0xca3ff8:4,0xca4100:4,0xca4104:4,0xca4108:1,0xca4109:1,0xca4160:4,0xca4164:4,0xca4168:4,0xca416c:4,0xca42a8:4,0xca4300:4,0xca4504:4,0xca4510:16,0xca4600:16,0xca4610:16,0xca4660:16,0xca46c0:16,0xca4720:4,0xca4724:4,0xca4728:4,0xca472c:4,0xca4828:4,0xca482c:4,0xca4850:16,0xca4870:4,0xca4874:4,0xca4878:4,0xca487c:4,0xca4980:4,0xca49f0:4,0xca49f4:4,0xca49f8:4,0xca49fc:4,0xca4a08:4,0xca4a0c:4,0xca4a50:16,0xca4ae8:4,0xca4afe:1,0xca4aff:1,0xca4bd0:16,0xca4bfc:4,0xca4cfc:4,0xca4d50:4,0xca4d54:4,0xca4d5c:4,0xca4e08:4,0xca4e0c:4,0xca4fe0:4,0xca4fe4:4,0xca4ff8:4,0xca50c0:4,0xca50c4:4,0xca50c8:4,0xca50cc:4,0xca5100:4,0xca51b0:4,0xca51b4:4,0xca51b8:4,0xca51bc:4,0xca53fc:4,0xca5400:4,0xca5404:4,0xca5408:4,0xca540c:4,0xca5410:1,0xca5411:1,0xca5418:4,0xca541c:4,0xca55d0:16,0xca56f9:1,0xca56fc:4,0xca5750:16,0xca5820:4,0xca5908:4,0xca590c:4,0xca5960:4,0xca596c:4,0xca59e8:4,0xca59ec:4,0xca5a00:4,0xca5a10:4,0xca5a14:4,0xca5a18:4,0xca5a1c:4,0xca5a60:4,0xca5a64:4,0xca5a68:4,0xca5a6c:4,0xca5a70:16,0xca5ac4:1,0xca5ae0:16,0xca5b00:4,0xca5b60:16,0xca5b80:4,0xca5bb0:16,0xca5be0:16,0xca5bf0:16,0xca5c00:4,0xca5c08:4,0xca5c0c:4,0xca5c30:16,0xca5cfc:4,0xca5d00:4,0xca5dfc:4,0xca5e5c:4,0xca5f00:4,0xca5f04:4,0xca5f08:4,0xca5f0c:4,0xca5f10:16,0xca5ff0:4,0xca5ff4:4,0xca5ffc:4,0xca6000:64,0xca6040:4,0xca6044:4,0xca6048:4,0xca604c:4,0xca6050:16,0xca6060:4,0xca6064:4,0xca6068:4,0xca606c:4,0xca6070:16,0xca6080:4,0xca6084:4,0xca6088:4,0xca608c:4,0xca6090:16,0xca60a0:4,0xca60a4:4,0xca60a8:4,0xca60ac:4,0xca60b0:16,0xca60c0:4,0xca60c4:4,0xca60c8:4,0xca60cc:4,0xca60d0:16,0xca60e0:4,0xca60e4:4,0xca60e8:4,0xca60ec:4,0xca60f0:16,0xca6100:4,0xca6104:4,0xca6108:4,0xca610c:4,0xca6110:16,0xca6120:16,0xca6130:16,0xca6140:16,0xca6150:16,0xca6160:16,0xca6170:16,0xca6180:64,0xca61c0:16,0xca61d0:16,0xca61e0:4,0xca61e4:4,0xca61e8:4,0xca61ec:4,0xca61f0:16,0xca6200:4,0xca6204:4,0xca6208:4,0xca620c:4,0xca6210:16,0xca6220:4,0xca6224:4,0xca6228:4,0xca622c:4,0xca6230:16,0xca6240:16,0xca6250:16,0xca6260:4,0xca6264:4,0xca6268:4,0xca626c:4,0xca6270:16,0xca6280:16,0xca6290:16,0xca62a0:4,0xca62a4:4,0xca62a8:4,0xca62ac:4,0xca62b0:16,0xca62c0:4,0xca62c4:4,0xca62c8:4,0xca62cc:4,0xca62d0:16,0xca62e0:4,0xca62e4:4,0xca62e8:4,0xca62ec:4,0xca62f0:16,0xca6300:64,0xca6340:16,0xca6350:16,0xca6360:4,0xca6364:4,0xca6368:4,0xca636c:4,0xca6370:16,0xca6380:16,0xca6390:16,0xca63a0:4,0xca63a4:4,0xca63a8:4,0xca63ac:4,0xca63b0:16,0xca63c0:4,0xca63c4:4,0xca63c8:4,0xca63cc:4,0xca63d0:16,0xca63e0:4,0xca63e4:4,0xca63e8:4,0xca63ec:4,0xca63f0:16,0xca6400:4,0xca6404:4,0xca6408:4,0xca640c:4,0xca6410:16,0xca6420:16,0xca6430:16,0xca6440:4,0xca6444:4,0xca6448:4,0xca644c:4,0xca6450:16,0xca6460:4,0xca6464:4,0xca6468:4,0xca646c:4,0xca6470:16,0xca6480:4,0xca6484:4,0xca6488:4,0xca648c:4,0xca6490:16,0xca64a0:4,0xca64a4:4,0xca64a8:4,0xca64ac:4,0xca64b0:16,0xca64c0:4,0xca64c4:4,0xca64c8:4,0xca64cc:4,0xca64d0:16,0xca64e0:16,0xca64f0:16,0xca6500:64,0xca6540:16,0xca6550:16,0xca6560:16,0xca6570:16,0xca6580:64,0xca65c0:16,0xca65d0:16,0xca65e0:4,0xca65e4:4,0xca65e8:4,0xca65ec:4,0xca65f0:16,0xca6600:16,0xca6610:16,0xca6620:16,0xca6630:16,0xca6640:64,0xca6680:4,0xca6684:4,0xca6688:4,0xca668c:4,0xca6690:16,0xca66a0:16,0xca66b0:16,0xca66c0:4,0xca66c4:4,0xca66c8:4,0xca66cc:4,0xca66d0:16,0xca66e0:4,0xca66e4:4,0xca66e8:4,0xca66ec:4,0xca66f0:16,0xca6700:4,0xca6704:4,0xca6708:4,0xca670c:4,0xca6710:16,0xca6720:16,0xca6730:16,0xca6740:16,0xca6750:16,0xca6760:4,0xca6764:4,0xca6768:4,0xca676c:4,0xca6770:16,0xca6780:64,0xca67c0:16,0xca67d0:16,0xca67e0:4,0xca67e4:4,0xca67e8:4,0xca67ec:4,0xca67f0:16,0xca6800:256,0xca6900:256,0xca6a00:256,0xca6b00:64,0xca6b40:64,0xca6b80:64,0xca6bc0:64,0xca6c00:256,0xca6d00:256,0xca6e00:64,0xca6e40:64,0xca6e80:64,0xca6ec0:64,0xca6f00:64,0xca6f40:64,0xca6f80:16,0xca6f90:16,0xca6fa0:16,0xca6fb0:16,0xca6fc0:64,0xca7000:256,0xca7100:16,0xca7110:16,0xca7120:16,0xca7130:16,0xca7140:64,0xca7180:64,0xca71c0:16,0xca71d0:16,0xca71e0:16,0xca71f0:16,0xca7200:16,0xca7210:16,0xca7220:16,0xca7230:16,0xca7240:64,0xca7280:64,0xca72c0:64,0xca7300:16,0xca7310:16,0xca7320:16,0xca7330:16,0xca7340:64,0xca7380:64,0xca73c0:64,0xca7400:16,0xca7410:16,0xca7420:16,0xca7430:16,0xca7440:16,0xca7450:16,0xca7460:16,0xca7470:16,0xca7480:64,0xca74c0:64,0xca7500:64,0xca7540:64,0xca7580:64,0xca75c0:64,0xca7600:16,0xca7610:16,0xca7620:16,0xca7630:16,0xca7640:64,0xca7680:64,0xca76c0:64,0xca7700:16,0xca7710:16,0xca7720:16,0xca7730:16,0xca7740:16,0xca7750:16,0xca7760:16,0xca7770:16,0xca7780:64,0xca77c0:64,0xca7800:64,0xca7840:64,0xca7880:64,0xca78c0:64,0xca7900:256,0xca7a00:4,0xca7a04:4,0xca7a20:4,0xca7a24:4,0xca7a40:16,0xca7a50:16,0xca7a70:4,0xca7a74:4,0xca7a78:4,0xca7a7c:4,0xca7a80:1,0xca7a84:1,0xca7b60:16,0xca7b74:4,0xca7b78:4,0xca7c10:4,0xca7c14:4,0xca7c18:4,0xca7d70:16,0xca7db0:16,0xca7f00:1,0xca7f01:1,0xca7f02:1,0xca7f03:1,0xca7f04:1,0xca7f05:1,0xca7f06:1,0xca7f07:1,0xca7f0c:4,0xca7f10:16,0xca7f28:4,0xca7f2c:4,0xca7f30:16,0xca7f70:16,0xca7f80:16,0xca7f90:16,0xca7fa0:4,0xca7fa4:4,0xca7fc0:1,0xca7fc1:1,0xca7fc2:1,0xca7fc3:1,0xca7fc4:4,0xca7fc8:4,0xca7fcc:4,0xca7fd0:1,0xca7fd1:1,0xca7fd4:4,0xca7fd8:4,0xca7fdc:4,0xca7fe0:16,0xca7ff0:16,0xca8200:16,0xca8210:16,0xca82e0:16,0xca82f0:16,0xca8310:4,0xca8314:4,0xca8330:16,0xca83d0:16,0xca8520:16,0xca863a:1,0xca8680:16,0xca86d0:4,0xca86d4:4,0xca86d8:4,0xca86dc:4,0xca8830:16,0xca88d0:16,0xca88e0:16,0xca88f8:4,0xca89e7:1,0xca8c8c:4,0xca8c90:4,0xca8c94:4,0xca8c98:4,0xca8c9c:4,0xca8da0:16,0xca8db0:16,0xca8e10:16,0xca8f04:4,0xca8f10:16,0xca8f20:16,0xca8f38:4,0xca8f3c:4,0xca8f64:4,0xca8f68:4,0xca92a0:16,0xca92bc:4,0xca92c4:4,0xca92c8:4,0xca92cc:4,0xca9390:16,0xca9420:16,0xca9440:16,0xca9450:16,0xca9460:16,0xca9470:16,0xca9520:16,0xca9530:16,0xca95a0:16,0xca95b0:16,0xca95e0:16,0xca95f0:16,0xca9610:16,0xca9620:16,0xca9638:4,0xca96c0:16,0xca96e0:16,0xca96f0:16,0xca9700:4,0xca9780:16,0xca9790:16,0xca98b0:16,0xca9900:4,0xca9930:16,0xca9dc0:16,0xca9dd0:16,0xca9ea0:16,0xca9eb0:16,0xcaa08c:4,0xcaa09c:4,0xcaa0b0:16,0xcaa243:1,0xcaa24b:1,0xcaa400:16,0xcaa460:16,0xcaa470:16,0xcaa560:16,0xcaa5b0:16,0xcaa5d0:16,0xcaa5ef:1,0xcaa5f0:1,0xcaa5f1:1,0xcaa5f3:1,0xcaa5f5:1,0xcaa5fb:1,0xcaa5fc:4,0xcaa6e0:16,0xcaa6f0:16,0xcaa850:4,0xcaa880:4,0xcaa884:4,0xcaa888:4,0xcaa88c:4,0xcaa8a0:16,0xcaa8b0:16,0xcaaa80:16,0xcaaa90:16,0xcaaad8:4,0xcaaadc:4,0xcaaae0:16,0xcaaaf0:16,0xcaabd8:4,0xcaabdc:4,0xcaabeb:1,0xcaac00:4,0xcaad00:4,0xcaad08:4,0xcaad0c:4,0xcaad70:4,0xcaad78:4,0xcaade0:16,0xcaadf0:16,0xcaae40:16,0xcaae7c:4,0xcab0e0:16,0xcab0f0:16,0xcab3a0:4,0xcab3a4:4,0xcab3a8:4,0xcab3ac:4,0xcab3f0:16,0xcab480:16,0xcab490:16,0xcab4d0:4,0xcab4d4:4,0xcab508:4,0xcab51c:4,0xcab570:16,0xcab620:16,0xcab6c0:16,0xcab6d0:16,0xcabd00:64,0xcabd50:16,0xcabdb8:4,0xcabdbc:4,0xcabf00:1,0xcabf44:4,0xcabf48:4,0xcabf4c:4,0xcabf50:16,0xcac000:1024,0xcac400:1024,0xcac800:1024,0xcacc00:1024},{0xcb0004:4,0xcb000a:1,0xcb000b:1,0xcb0012:1,0xcb0018:1,0xcb002a:1,0xcb002b:1,0xcb002d:1,0xcb002e:1,0xcb002f:1,0xcb0051:1,0xcb0052:1,0xcb0053:1,0xcb005a:1,0xcb005b:1,0xcb0060:1,0xcb0061:1,0xcb0068:4,0xcb006c:4,0xcb0072:1,0xcb0073:1,0xcb007a:1,0xcb0080:1,0xcb0082:1,0xcb0083:1,0xcb0084:4,0xcb0089:1,0xcb008e:1,0xcb0090:1,0xcb0092:1,0xcb0094:1,0xcb0096:1,0xcb0097:1,0xcb0098:1,0xcb00b1:1,0xcb00e0:1,0xcb0104:4,0xcb0112:1,0xcb011a:1,0xcb011b:1,0xcb0141:1,0xcb0142:1,0xcb0143:1,0xcb0146:1,0xcb0147:1,0xcb014c:1,0xcb014d:1,0xcb015a:1,0xcb0161:1,0xcb0162:1,0xcb0163:1,0xcb0164:4,0xcb016c:1,0xcb01fd:1,0xcb01fe:1,0xcb0240:4,0xcb0244:4,0xcb0249:1,0xcb0270:4,0xcb0274:4,0xcb027e:1,0xcb027f:1,0xcb028c:1,0xcb0296:1,0xcb0298:4,0xcb029c:1,0xcb029d:1,0xcb02a0:4,0xcb02a4:4,0xcb02b4:1,0xcb02b5:1,0xcb02c4:1,0xcb02c5:1,0xcb02d1:1,0xcb02d6:1,0xcb02d7:1,0xcb02e2:1,0xcb02e3:1,0xcb02e5:1,0xcb02ec:1,0xcb02ed:1,0xcb0344:1,0xcb0348:1,0xcb0349:1,0xcb034b:1,0xcb0350:4,0xcb0354:4,0xcb0360:4,0xcb0369:1,0xcb0370:4,0xcb0374:4,0xcb0378:1,0xcb037b:1,0xcb0387:1,0xcb038b:1,0xcb038f:1,0xcb0484:1,0xcb0485:1,0xcb0486:1,0xcb0497:1,0xcb0498:4,0xcb04ae:1,0xcb04af:1,0xcb04b4:1,0xcb04ba:1,0xcb04cd:1,0xcb04d0:4,0xcb04e3:1,0xcb04e6:1,0xcb04e7:1,0xcb0504:1,0xcb0505:1,0xcb0507:1,0xcb0508:1,0xcb0509:1,0xcb050b:1,0xcb0515:1,0xcb0516:1,0xcb052c:1,0xcb052e:1,0xcb052f:1,0xcb0534:4,0xcb0538:1,0xcb0539:1,0xcb053c:1,0xcb053d:1,0xcb0572:1,0xcb0573:1,0xcb0576:1,0xcb0578:1,0xcb05ac:1,0xcb05b4:1,0xcb05b5:1,0xcb05b6:1,0xcb05b9:1,0xcb05ba:1,0xcb05bc:1,0xcb05bd:1,0xcb05be:1,0xcb05c3:1,0xcb05d6:1,0xcb05d7:1,0xcb05da:1,0xcb05db:1,0xcb0683:1,0xcb0688:1,0xcb068a:1,0xcb068b:1,0xcb068e:1,0xcb0696:1,0xcb0697:1,0xcb069d:1,0xcb069f:1,0xcb06e0:16,0xcb06f8:1,0xcb06f9:1,0xcb0781:1,0xcb078a:1,0xcb078b:1,0xcb0793:1,0xcb0796:1,0xcb0797:1,0xcb079e:1,0xcb07c0:1,0xcb07c1:1,0xcb07c8:1,0xcb0800:1,0xcb0808:1,0xcb0817:1,0xcb0818:4,0xcb081c:4,0xcb0846:1,0xcb0852:1,0xcb0856:1,0xcb0857:1,0xcb085b:1,0xcb086e:1,0xcb086f:1,0xcb0873:1,0xcb08a6:1,0xcb08a7:1,0xcb08a9:1,0xcb08ad:1,0xcb08b8:1,0xcb08ba:1,0xcb08bb:1,0xcb08be:1,0xcb08bf:1,0xcb08c0:1,0xcb08c5:1,0xcb08c6:1,0xcb08c7:1,0xcb08cb:1,0xcb08d1:1,0xcb08d2:1,0xcb08d3:1,0xcb08d4:4,0xcb08d9:1,0xcb08dc:1,0xcb0920:1,0xcb0924:1,0xcb0925:1,0xcb0939:1,0xcb093f:1,0xcb0941:1,0xcb0946:1,0xcb0947:1,0xcb0948:1,0xcb094b:1,0xcb094c:1,0xcb094d:1,0xcb0960:4,0xcb0964:1,0xcb0965:1,0xcb096c:1,0xcb099e:1,0xcb0a22:1,0xcb0a38:1,0xcb0a4a:1,0xcb0a4b:1,0xcb0a54:4,0xcb0a58:1,0xcb0a5f:1,0xcb0a7d:1,0xcb0b46:1,0xcb0b4c:4,0xcb0b52:1,0xcb0b54:4,0xcb0b64:4,0xcb0b6d:1,0xcb0b75:1,0xcb0b7a:1,0xcb0b7e:1,0xcb0b88:4,0xcb0b8d:1,0xcb0b8e:1,0xcb0b8f:1,0xcb0bb4:4,0xcb0bd0:4,0xcb0c10:1,0xcb0c13:1,0xcb0c18:1,0xcb0c39:1,0xcb0c41:1,0xcb0c42:1,0xcb0c46:1,0xcb0c47:1,0xcb0c57:1,0xcb0c58:4,0xcb0c5c:4,0xcb0c64:1,0xcb0c65:1,0xcb0c67:1,0xcb0c72:1,0xcb0c76:1,0xcb0c82:1,0xcb0c89:1,0xcb0cc4:4,0xcb0cc8:4,0xcb0ccc:4,0xcb0cd3:1,0xcb0cdb:1,0xcb0ce2:1,0xcb0cf0:4,0xcb0d12:1,0xcb0d18:1,0xcb0d2c:1,0xcb0d2d:1,0xcb0d50:4,0xcb0d54:4,0xcb0d58:1,0xcb0d59:1,0xcb0d5c:4,0xcb0dad:1,0xcb0de0:1,0xcb0de1:1,0xcb0de3:1,0xcb0de9:1,0xcb0e18:4,0xcb0e21:1,0xcb0e38:1,0xcb0e3d:1,0xcb0e3e:1,0xcb0e68:1,0xcb0e72:1,0xcb0e73:1,0xcb0e76:1,0xcb0ea2:1,0xcb0eb8:4,0xcb0ebc:4,0xcb0ec0:1,0xcb0ec2:1,0xcb0ec3:1,0xcb0ed6:1,0xcb0ee7:1,0xcb0ef6:1,0xcb0f00:16,0xcb0f14:1,0xcb0f15:1,0xcb0f16:1,0xcb0f57:1,0xcb0f58:1,0xcb0f59:1,0xcb0f69:1,0xcb0f70:4,0xcb0f74:4,0xcb0f82:1,0xcb0f83:1,0xcb0f95:1,0xcb0f97:1,0xcb0f9c:4,0xcb0fae:1,0xcb0fe3:1,0xcb0fe8:4,0xcb0fec:4,0xcb0ff0:1,0xcb0ff1:1,0xcb0ff6:1,0xcb100a:1,0xcb100c:1,0xcb100d:1,0xcb1010:4,0xcb1014:4,0xcb101b:1,0xcb1026:1,0xcb1031:1,0xcb1032:1,0xcb1033:1,0xcb103a:1,0xcb1085:1,0xcb10a1:1,0xcb10a2:1,0xcb10ba:1,0xcb10bb:1,0xcb10e4:1,0xcb10ee:1,0xcb10f0:1,0xcb10f5:1,0xcb1102:1,0xcb1112:1,0xcb111c:1,0xcb1127:1,0xcb1138:1,0xcb114a:1,0xcb114b:1,0xcb1158:1,0xcb1159:1,0xcb1188:1,0xcb11a4:1,0xcb11bb:1,0xcb11be:1,0xcb11bf:1,0xcb11e7:1,0xcb11e9:1,0xcb11f8:1,0xcb11ff:1,0xcb1202:1,0xcb1203:1,0xcb1204:1,0xcb1207:1,0xcb121f:1,0xcb1225:1,0xcb1230:1,0xcb1231:1,0xcb1234:1,0xcb1248:4,0xcb1250:1,0xcb1251:1,0xcb1257:1,0xcb1264:1,0xcb1265:1,0xcb1269:1,0xcb126b:1,0xcb126e:1,0xcb1281:1,0xcb1283:1,0xcb1284:1,0xcb1285:1,0xcb1290:1,0xcb1299:1,0xcb12c7:1,0xcb12d0:1,0xcb12d3:1,0xcb12d7:1,0xcb1312:1,0xcb1318:1,0xcb131e:1,0xcb1320:4,0xcb1324:4,0xcb1329:1,0xcb132c:1,0xcb132d:1,0xcb132e:1,0xcb133a:1,0xcb133c:1,0xcb133d:1,0xcb1340:1,0xcb1344:1,0xcb1348:1,0xcb1365:1,0xcb136f:1,0xcb1383:1,0xcb1385:1,0xcb1390:1,0xcb1395:1,0xcb139c:1,0xcb13b0:1,0xcb13b2:1,0xcb13b3:1,0xcb13d0:1,0xcb13e4:4,0xcb13e9:1,0xcb13f2:1,0xcb13f8:1,0xcb13f9:1,0xcb13ff:1,0xcb1411:1,0xcb1428:1,0xcb1429:1,0xcb1430:1,0xcb143d:1,0xcb1441:1,0xcb1454:1,0xcb1455:1,0xcb1459:1,0xcb146a:1,0xcb146b:1,0xcb1473:1,0xcb1475:1,0xcb1476:1,0xcb1477:1,0xcb147a:1,0xcb147e:1,0xcb147f:1,0xcb1487:1,0xcb1488:4,0xcb148c:4,0xcb1496:1,0xcb14e6:1,0xcb14e8:1,0xcb14ec:1,0xcb1500:1,0xcb1501:1,0xcb1502:1,0xcb1508:1,0xcb150a:1,0xcb1512:1,0xcb1521:1,0xcb1522:1,0xcb1529:1,0xcb152c:1,0xcb1544:1,0xcb1552:1,0xcb1560:4,0xcb157c:1,0xcb1588:1,0xcb1589:1,0xcb1591:1,0xcb15ce:1,0xcb1618:1,0xcb161c:1,0xcb161d:1,0xcb161f:1,0xcb1644:1,0xcb164c:1,0xcb164e:1,0xcb1654:1,0xcb1657:1,0xcb165c:4,0xcb1663:1,0xcb166a:1,0xcb167a:1,0xcb167b:1,0xcb1683:1,0xcb16a3:1,0xcb16a6:1,0xcb16aa:1,0xcb16b0:4,0xcb16b4:4,0xcb16c2:1,0xcb16f2:1,0xcb16f3:1,0xcb16f5:1,0xcb16f6:1,0xcb16fc:1,0xcb16fd:1,0xcb1700:1,0xcb172f:1,0xcb173d:1,0xcb173e:1,0xcb173f:1,0xcb1749:1,0xcb1755:1,0xcb175c:4,0xcb1762:1,0xcb176b:1,0xcb1770:1,0xcb1782:1,0xcb178c:1,0xcb178d:1,0xcb17ac:1,0xcb17b6:1,0xcb17ba:1,0xcb17bb:1,0xcb17c0:1,0xcb17c5:1,0xcb17c6:1,0xcb17cc:4,0xcb17e0:1,0xcb17e2:1,0xcb17e3:1,0xcb17e4:4,0xcb17f9:1,0xcb17fb:1,0xcb180d:1,0xcb1812:1,0xcb181b:1,0xcb182b:1,0xcb1838:1,0xcb183a:1,0xcb1843:1,0xcb184a:1,0xcb184f:1,0xcb1850:1,0xcb1851:1,0xcb1854:1,0xcb1855:1,0xcb1856:1,0xcb185a:1,0xcb186f:1,0xcb1870:1,0xcb1874:1,0xcb187a:1,0xcb187b:1,0xcb1891:1,0xcb1898:1,0xcb1899:1,0xcb189d:1,0xcb18a1:1,0xcb18a7:1,0xcb18ba:1,0xcb18bb:1,0xcb18c7:1,0xcb18ca:1,0xcb18d4:1,0xcb18d5:1,0xcb18d9:1,0xcb18db:1,0xcb18f4:1,0xcb1913:1,0xcb1914:1,0xcb1915:1,0xcb192e:1,0xcb1930:4,0xcb1934:4,0xcb1940:1,0xcb1941:1,0xcb195b:1,0xcb1963:1,0xcb1964:1,0xcb196a:1,0xcb1983:1,0xcb1987:1,0xcb198a:1,0xcb1993:1,0xcb1999:1,0xcb199a:1,0xcb199b:1,0xcb19a4:1,0xcb19a6:1,0xcb19ae:1,0xcb19af:1,0xcb19b4:1,0xcb19b6:1,0xcb19bf:1,0xcb19c7:1,0xcb19c8:1,0xcb19ca:1,0xcb19cb:1,0xcb19d0:16,0xcb19e5:1,0xcb19eb:1,0xcb19ec:1,0xcb19f2:1,0xcb1a0c:1,0xcb1a22:1,0xcb1a31:1,0xcb1a32:1,0xcb1a37:1,0xcb1a38:1,0xcb1a39:1,0xcb1a3c:1,0xcb1a41:1,0xcb1a44:1,0xcb1a4c:1,0xcb1a50:1,0xcb1a54:1,0xcb1a61:1,0xcb1a66:1,0xcb1a67:1,0xcb1a73:1,0xcb1a74:1,0xcb1a81:1,0xcb1a8f:1,0xcb1a90:1,0xcb1a94:1,0xcb1a95:1,0xcb1a9a:1,0xcb1a9e:1,0xcb1a9f:1,0xcb1aaa:1,0xcb1aad:1,0xcb1ab0:1,0xcb1ab9:1,0xcb1aca:1,0xcb1acb:1,0xcb1ad2:1,0xcb1ad6:1,0xcb1ade:1,0xcb1ae0:1,0xcb1ae4:1,0xcb1ae8:1,0xcb1b00:1,0xcb1b0a:1,0xcb1b0f:1,0xcb1b10:1,0xcb1b14:1,0xcb1b16:1,0xcb1b17:1,0xcb1b28:1,0xcb1b2d:1,0xcb1b35:1,0xcb1b41:1,0xcb1b42:1,0xcb1b51:1,0xcb1b58:1,0xcb1b66:1,0xcb1b6d:1,0xcb1b75:1,0xcb1b79:1,0xcb1b7a:1,0xcb1b7b:1,0xcb1b7d:1,0xcb1bc8:1,0xcb1bca:1,0xcb1be9:1,0xcb1bf1:1,0xcb1bfa:1,0xcb1c0a:1,0xcb1c0c:1,0xcb1c21:1,0xcb1c22:1,0xcb1c23:1,0xcb1c2b:1,0xcb1c2c:1,0xcb1c36:1,0xcb1c38:1,0xcb1c49:1,0xcb1c4a:1,0xcb1c4c:1,0xcb1c56:1,0xcb1c58:1,0xcb1c70:1,0xcb1c83:1,0xcb1c88:1,0xcb1c8c:1,0xcb1c91:1,0xcb1ca5:1,0xcb1ca9:1,0xcb1caa:1,0xcb1cb2:1,0xcb1cb3:1,0xcb1cb9:1,0xcb1cbb:1,0xcb1cc4:1,0xcb1ce2:1,0xcb1ce3:1,0xcb1cef:1,0xcb1d02:1,0xcb1d08:1,0xcb1d09:1,0xcb1d0d:1,0xcb1d0e:1,0xcb1d1c:1,0xcb1d2e:1,0xcb1d39:1,0xcb1d3d:1,0xcb1d3f:1,0xcb1d45:1,0xcb1d49:1,0xcb1d51:1,0xcb1d5a:1,0xcb1d5f:1,0xcb1d64:1,0xcb1d67:1,0xcb1d70:1,0xcb1d78:4,0xcb1db6:1,0xcb1db7:1,0xcb1dbb:1,0xcb1dbd:1,0xcb1dbe:1,0xcb1dcd:1,0xcb1dd2:1,0xcb1dd9:1,0xcb1de3:1,0xcb1de7:1,0xcb1de9:1,0xcb1dea:1,0xcb1df8:1,0xcb1dfe:1,0xcb1dff:1,0xcb1e10:1,0xcb1e11:1,0xcb1e19:1,0xcb1e1b:1,0xcb1e1d:1,0xcb1e42:1,0xcb1e51:1,0xcb1e57:1,0xcb1e6f:1,0xcb1e79:1,0xcb1e7b:1,0xcb1e98:1,0xcb1e9c:1,0xcb1ea2:1,0xcb1ead:1,0xcb1eaf:1,0xcb1ebb:1,0xcb1ec2:1,0xcb1ed9:1,0xcb1edc:1,0xcb1ede:1,0xcb1ee8:1,0xcb1ee9:1,0xcb1eeb:1,0xcb1ef0:1,0xcb1ef1:1,0xcb1ef6:1,0xcb1efa:1,0xcb1efb:1,0xcb1f2d:1,0xcb1f2e:1,0xcb1f31:1,0xcb1f33:1,0xcb1f36:1,0xcb1f37:1,0xcb1f45:1,0xcb1f48:1,0xcb1f50:1,0xcb1f55:1,0xcb1f61:1,0xcb1f69:1,0xcb1f6a:1,0xcb1f6c:1,0xcb1f6d:1,0xcb1f7c:1,0xcb1fa2:1,0xcb1fae:1,0xcb1fb1:1,0xcb1fb5:1,0xcb1fbb:1,0xcb1fbd:1,0xcb1fcc:1,0xcb1fdc:1,0xcb1fde:1,0xcb1fdf:1,0xcb1fe1:1,0xcb1fe5:1,0xcb1ff8:1,0xcb1ff9:1,0xcb1ffd:1,0xcb2014:1,0xcb2030:1,0xcb2031:1,0xcb2038:1,0xcb203c:1,0xcb203e:1,0xcb2044:1,0xcb2045:1,0xcb204c:1,0xcb2051:1,0xcb2054:1,0xcb2055:1,0xcb205f:1,0xcb2066:1,0xcb2069:1,0xcb2082:1,0xcb2085:1,0xcb208c:1,0xcb2098:1,0xcb20ba:1,0xcb20bb:1,0xcb20c0:1,0xcb20c4:1,0xcb20cb:1,0xcb20cc:1,0xcb20cd:1,0xcb20d4:1,0xcb2104:1,0xcb2107:1,0xcb2108:4,0xcb210c:4,0xcb2115:1,0xcb211a:1,0xcb2120:1,0xcb213f:1,0xcb2140:1,0xcb2143:1,0xcb2144:1,0xcb2149:1,0xcb214f:1,0xcb2164:1,0xcb217a:1,0xcb2181:1,0xcb2183:1,0xcb2191:1,0xcb219c:1,0xcb219e:1,0xcb219f:1,0xcb21ae:1,0xcb21b9:1,0xcb21c8:1,0xcb21ca:1,0xcb21cb:1,0xcb21cc:1,0xcb21ce:1,0xcb21cf:1,0xcb21d6:1,0xcb21d7:1,0xcb21e0:1,0xcb21e1:1,0xcb21e2:1,0xcb21e9:1,0xcb21f3:1,0xcb21fa:1,0xcb2204:1,0xcb2215:1,0xcb221b:1,0xcb2227:1,0xcb2230:1,0xcb2231:1,0xcb2236:1,0xcb2238:1,0xcb2239:1,0xcb2243:1,0xcb2245:1,0xcb224c:1,0xcb225c:1,0xcb226a:1,0xcb2271:1,0xcb2293:1,0xcb2296:1,0xcb2298:1,0xcb2299:1,0xcb22a1:1,0xcb22a2:1,0xcb22bb:1,0xcb22c0:4,0xcb22c4:4,0xcb22cc:4,0xcb22e8:1,0xcb22f0:1,0xcb22f2:1,0xcb22f5:1,0xcb22fb:1,0xcb3702:1,0xcb3703:1,0xcb3704:1,0xcb370a:1,0xcb370d:1,0xcb3716:1,0xcb371e:1,0xcb375d:1,0xcb3765:1,0xcb376d:1,0xcb376e:1,0xcb3774:1,0xcb3775:1,0xcb3777:1,0xcb3780:1,0xcb3781:1,0xcb3792:1,0xcb3793:1,0xcb37c0:1,0xcb37c4:1,0xcb37da:1,0xcb37db:1,0xcb37dd:1,0xcb37e0:1,0xcb3801:1,0xcb3804:1,0xcb380c:1,0xcb3818:1,0xcb3826:1,0xcb3828:1,0xcb382e:1,0xcb3830:4,0xcb3834:4,0xcb3844:1,0xcb3845:1,0xcb3852:1,0xcb3853:1,0xcb3854:1,0xcb3855:1,0xcb385f:1,0xcb386e:1,0xcb3879:1,0xcb38a1:1,0xcb38a9:1,0xcb38ac:1,0xcb38ad:1,0xcb38af:1,0xcb38b7:1,0xcb38b9:1,0xcb38bb:1,0xcb38c0:1,0xcb38c6:1,0xcb38c9:1,0xcb38d0:1,0xcb38d1:1,0xcb38d2:1,0xcb38d6:1,0xcb38d8:1,0xcb38e3:1,0xcb38e4:1,0xcb38e8:1,0xcb38f0:1,0xcb38fc:1,0xcb38fe:1,0xcb3905:1,0xcb3906:1,0xcb390c:1,0xcb390d:1,0xcb391c:1,0xcb3927:1,0xcb392e:1,0xcb393a:1,0xcb393d:1,0xcb3942:1,0xcb3945:1,0xcb3946:1,0xcb3947:1,0xcb3949:1,0xcb395a:1,0xcb3965:1,0xcb396d:1,0xcb397b:1,0xcb399d:1,0xcb39c8:1,0xcb39ca:1,0xcb39ce:1,0xcb39de:1,0xcb39e0:16,0xcb39f6:1,0xcb39f7:1,0xcb39f9:1,0xcb39fd:1,0xcb39fe:1,0xcb39ff:1,0xcb3e02:1,0xcb3e83:1,0xcb3e8b:1,0xcb3ea1:1,0xcb3ec5:1,0xcb3ee4:4,0xcb3eea:1,0xcb3ef6:1,0xcb4ca0:4,0xcb4ca8:4,0xcb4cd0:4,0xcb4cd4:4,0xcb4cd8:4,0xcb4cf0:4,0xcb4cf4:4,0xcb4db4:4,0xcb4e30:16,0xcb4e9c:4,0xcb4f00:16,0xcb4f20:16,0xcb5004:1,0xcb5005:1,0xcb5020:16,0xcb5039:1,0xcb5084:4,0xcb5088:4,0xcb508c:4,0xcb5090:16,0xcb5100:4,0xcb5104:4,0xcb5110:16,0xcb51f4:4,0xcb5200:1,0xcb5201:1,0xcb5210:4,0xcb5214:4,0xcb5270:4,0xcb5274:4,0xcb5278:4,0xcb527c:4,0xcb52e0:4,0xcb52e4:4,0xcb52e8:4,0xcb52ec:4,0xcb5300:4,0xcb5308:4,0xcb530c:4,0xcb5338:4,0xcb533c:4,0xcb53e0:16,0xcb5600:16,0xcb5610:16,0xcb5620:16,0xcb5630:16,0xcb5640:16,0xcb5650:16,0xcb5660:16,0xcb5670:16,0xcb56fe:1,0xcb56ff:1,0xcb5820:16,0xcb5830:16,0xcb58c0:16,0xcb58d0:16,0xcb5900:4,0xcb5908:4,0xcb590c:4,0xcb5988:4,0xcb5a00:4,0xcb5a08:4,0xcb5a0c:4,0xcb5a80:16,0xcb5a90:16,0xcb5aa0:16,0xcb5ab0:16,0xcb5ac0:16,0xcb5ad0:16,0xcb5b20:16,0xcb5b30:16,0xcb5b60:16,0xcb5b78:4,0xcb5b7c:4,0xcb5c00:4,0xcb5ca0:16,0xcb5cb0:16,0xcb5d00:4,0xcb5d04:4,0xcb5d08:1,0xcb5d09:1,0xcb5d0a:1,0xcb5d0b:1,0xcb5d0c:4,0xcb5d10:16,0xcb5d20:16,0xcb5d30:16,0xcb5d40:64,0xcb5d80:4,0xcb5d84:4,0xcb5d88:4,0xcb5d8c:1,0xcb5d8d:1,0xcb5d8e:1,0xcb5d8f:1,0xcb5d90:16,0xcb5da0:16,0xcb5db0:16,0xcb5dc0:64,0xcb5e00:4,0xcb5e04:4,0xcb5e08:4,0xcb5e0c:4,0xcb5e10:16,0xcb5f00:4,0xcb5f04:4,0xcb5f60:16,0xcb5f70:16,0xcb5f80:64,0xcb5fc8:4,0xcb5fcc:4,0xcb5fd0:4,0xcb5fe0:16,0xcb5ff0:16,0xcb6308:4,0xcb630c:4,0xcb6310:16,0xcb6350:16,0xcb6420:16,0xcb6430:4,0xcb6434:4,0xcb643f:1,0xcb6450:16,0xcb6460:16,0xcb6470:16,0xcb64c0:16,0xcb6820:16,0xcb6960:16,0xcb6970:16,0xcb6980:16,0xcb6990:16,0xcb6b00:64,0xcb6b40:64,0xcb6ea0:16,0xcb6eb0:16,0xcb6ed0:16,0xcb6ee8:1,0xcb6ee9:1,0xcb6eea:1,0xcb7250:4,0xcb7254:4,0xcb7258:4,0xcb725c:4,0xcb72f4:4,0xcb76c0:16,0xcb76d0:16,0xcb76f1:1,0xcb76f8:4,0xcb7718:4,0xcb771c:4,0xcb7720:4,0xcb7750:4,0xcb7755:1,0xcb7771:1,0xcb7772:1,0xcb7773:1,0xcb7774:4,0xcb7778:4,0xcb777c:4,0xcb7780:64,0xcb77c0:64,0xcb8020:16,0xcb8030:16,0xcb8060:16,0xcb8070:16,0xcb80e0:4,0xcb80e4:4,0xcb8108:4,0xcb810c:4,0xcb8220:16,0xcb8230:16,0xcb8420:16,0xcb8430:16,0xcb86f0:4,0xcb86f4:4,0xcb8760:16,0xcb8770:16,0xcb87a0:16,0xcb8ee0:16,0xcb8ef0:16,0xcb9060:16,0xcb9070:16,0xcb9100:16,0xcb9110:16,0xcb9400:64,0xcb9440:16,0xcb9450:4,0xcb9456:1,0xcb9457:1,0xcb955c:4,0xcb9840:16,0xcb9850:16,0xcb9880:16,0xcb9890:16,0xcb9900:4,0xcb9cc0:64,0xcb9e10:4,0xcb9e14:4,0xcba068:4,0xcba06c:4,0xcba081:1,0xcba0c0:16,0xcba0d0:16,0xcba100:4,0xcba1b4:1,0xcba1c0:16,0xcba1d0:16,0xcba6a0:16,0xcba6b0:16,0xcba71c:4,0xcba800:16,0xcba810:16,0xcbaa3a:1,0xcbaa3b:1,0xcbab00:4,0xcbabe0:16,0xcbae04:1,0xcbae07:1,0xcbae60:16,0xcbae70:16,0xcbaf80:16,0xcbaf90:16,0xcbafc0:64,0xcbb000:64,0xcbb040:16,0xcbb050:16,0xcbb0a8:4,0xcbb0ac:4,0xcbb850:16,0xcbbba0:16,0xcbbbb0:16,0xcbbd00:1,0xcbbd01:1,0xcbbd06:1,0xcbbd07:1,0xcbbd70:4,0xcbbdc0:16,0xcbbdd0:16,0xcbbde8:4,0xcbbdec:4,0xcbbdf0:4,0xcbbe60:16,0xcbbef9:1,0xcbbf00:1,0xcbbf01:1,0xcbbf10:16,0xcbbf40:64,0xcbbf90:4,0xcbbf94:4,0xcbbf98:4,0xcbbf9c:4,0xcbc000:16,0xcbc010:16,0xcbc1e0:16,0xcbc1f0:16,0xcbc278:4,0xcbc27c:4,0xcbc340:16,0xcbc350:16,0xcbc370:4,0xcbc374:4,0xcbc380:64,0xcbc3c0:64,0xcbc400:4,0xcbc404:4,0xcbc408:4,0xcbc40c:4,0xcbc41c:4,0xcbcaec:4,0xcbcd40:16,0xcbcd50:16,0xcbcd80:64,0xcbcdc0:64,0xcbcf40:64,0xcbcf80:64,0xcbcfc0:64,0xcbd000:16,0xcbd010:4,0xcbd020:16,0xcbd030:16,0xcbd1e0:16,0xcbd1f0:16,0xcbd400:16,0xcbd450:16,0xcbd7e8:4,0xcbd7ec:4,0xcbd9a4:4,0xcbdec0:16,0xcbdf00:16,0xcbdf10:4,0xcbdf14:4},{},{},{},{},{},{},{0xd20200:16,0xd20210:16,0xd20500:16,0xd20510:16,0xd20538:4,0xd2053c:4,0xd20580:16,0xd20590:16,0xd20738:4,0xd2073c:4,0xd20c00:64,0xd20c40:64,0xd20c80:64,0xd20cc0:64,0xd20d00:64,0xd20d40:64,0xd20d80:64,0xd20dc0:64,0xd20e40:16,0xd20e50:16,0xd20e70:16,0xd20e80:16,0xd20e90:16,0xd20ea0:16,0xd20eb0:16,0xd20ec0:16,0xd20ed0:16,0xd20ee0:16,0xd20ef0:16,0xd20f00:16,0xd20f10:16,0xd20f20:16,0xd20f30:16,0xd20f40:16,0xd20f50:16,0xd20f60:16,0xd20f70:16,0xd20f80:64,0xd21068:4,0xd21080:64,0xd21500:64,0xd21540:64,0xd21580:64,0xd215c0:64,0xd21600:256,0xd21720:16,0xd21730:16,0xd21900:256,0xd21a00:256,0xd21b00:256,0xd21c00:1024,0xd22000:1024,0xd22400:1024,0xd22800:1024,0xd22c00:1024,0xd23300:256,0xd23400:64,0xd23440:64,0xd23480:64,0xd234c0:64,0xd23500:64,0xd23540:64,0xd23580:64,0xd235c0:64,0xd238c0:16,0xd238d0:16,0xd24800:64,0xd24840:64,0xd24880:16,0xd24890:16,0xd248a0:16,0xd248b0:16,0xd248c0:64,0xd24900:16,0xd24910:16,0xd24920:16,0xd24930:16,0xd24940:64,0xd24980:64,0xd249c0:64,0xd24a00:16,0xd24a10:16,0xd24a20:16,0xd24a30:16,0xd24a40:16,0xd24a50:16,0xd24a60:16,0xd24a70:16,0xd24a80:16,0xd24a90:16,0xd24aa0:16,0xd24ab0:16,0xd24ac0:64,0xd24b00:256,0xd24c00:16,0xd24c10:16,0xd24c20:16,0xd24c30:16,0xd24c40:64,0xd24c80:64,0xd24cc0:64,0xd24d00:256,0xd24e00:16,0xd24e10:16,0xd24e20:16,0xd24e30:16,0xd24e40:64,0xd24e80:16,0xd24e90:16,0xd24ea0:16,0xd24eb0:16,0xd24ec0:64,0xd24f40:64,0xd24fe0:16,0xd24ff0:16,0xd25200:256,0xd25300:256,0xd25780:16,0xd25790:16,0xd257a0:16,0xd257b0:16,0xd2b9c0:64,0xd2c060:16,0xd2c070:16},{0xd34000:1024,0xd34400:256,0xd34500:256,0xd34600:256,0xd34700:256,0xd35000:256,0xd35100:256,0xd35200:256,0xd35300:256,0xd35400:256,0xd35500:256,0xd35600:256,0xd35700:256,0xd35800:256,0xd35900:256,0xd35a00:256,0xd35b00:256,0xd35c00:256,0xd35d00:256,0xd35e00:256,0xd35f00:256,0xd36000:256,0xd36100:256,0xd36200:256,0xd36300:64,0xd36340:16,0xd36350:16,0xd36360:16,0xd36370:16,0xd36380:64,0xd363c0:64,0xd36400:256,0xd36500:64,0xd36540:64,0xd36580:64,0xd365c0:64,0xd36600:256,0xd36700:64,0xd36740:64,0xd36780:64,0xd367c0:64,0xd38800:1024,0xd38c00:256,0xd38d00:256,0xd38e00:64,0xd38e40:64,0xd38e80:64,0xd38ec0:64,0xd38f00:256,0xd39000:256,0xd39100:256,0xd39200:256,0xd39300:256,0xd39400:1024,0xd39800:256,0xd39900:256,0xd39a00:256,0xd39b00:64,0xd39b40:16,0xd39b50:16,0xd39b60:16,0xd39b70:16,0xd39b80:64,0xd39bc0:64,0xd39c00:1024,0xd3a000:1024,0xd3a400:1024},{},{},{},{},{},{},{0xda0000:256,0xda0100:256,0xda0200:256,0xda0300:256,0xda0400:256,0xda0500:256,0xda0600:256,0xda0700:256,0xda0800:256,0xda0900:256,0xda0a00:256,0xda0b00:256,0xda0c00:256,0xda0d00:256,0xda0e00:256,0xda0f00:256,0xda1000:1024,0xda1400:256,0xda1500:64,0xda1540:64,0xda1580:64,0xda15c0:64,0xda1600:256,0xda1700:256,0xda1800:256,0xda1900:256,0xda1a00:256,0xda1b00:256,0xda1c00:256,0xda1d00:256,0xda1e00:256,0xda1f00:256,0xda3800:1024,0xda3c00:256,0xda3d00:256,0xda3e00:64,0xda3e40:64,0xda3e80:64,0xda3ec0:64,0xda3f00:256,0xda4000:256,0xda4100:256,0xda4200:256,0xda4300:64,0xda4340:64,0xda4380:64,0xda43c0:64,0xda4400:256,0xda4500:256,0xda4600:256,0xda4700:256,0xda4800:1024,0xda4c00:256,0xda4d00:256,0xda4e00:256,0xda4f00:256,0xda5000:1024,0xda5400:1024,0xda5800:1024,0xda5c00:1024,0xda6000:256,0xda6100:256,0xda6200:64,0xda6240:64,0xda6280:64,0xda62c0:16,0xda62d0:16,0xda62e0:16,0xda62f0:16,0xda6300:256,0xda6458:4,0xda645c:4,0xda6460:16,0xda6470:16,0xda6480:64,0xda64c0:64,0xda6800:64,0xda6840:64,0xda6880:16,0xda6890:16,0xda68a0:16,0xda68b0:16,0xda68c0:4,0xda68c4:4,0xda68c8:4,0xda68cc:4,0xda68d0:16,0xda68e0:16,0xda68f0:16,0xda6900:256,0xda6a00:256,0xda6b00:256,0xda6c00:256,0xda6d00:256,0xdab9c0:16,0xdab9d0:16,0xdab9f0:4,0xdab9f4:4,0xdac000:256,0xdac100:256,0xdac200:256,0xdac300:256,0xdac400:1024,0xdac800:1024,0xdacc00:256,0xdacd00:256,0xdace00:256,0xdacf00:256,0xdaf000:1024,0xdaf400:256,0xdaf500:256,0xdaf600:256,0xdaf700:256,0xdaf900:256},{0xdb4800:256,0xdb5200:256,0xdb5380:64,0xdb53c0:64,0xdb5a44:4,0xdb5a48:4,0xdb5a4c:4,0xdb8000:1024,0xdb8400:1024,0xdb8800:1024,0xdb8c00:1024,0xdb9000:1024,0xdb9400:256,0xdb9500:64,0xdb9540:64,0xdb9580:64,0xdb95c0:64,0xdb9600:16,0xdb9610:16,0xdb9620:16,0xdb9630:16,0xdb9640:16,0xdb9650:16,0xdb9660:16,0xdb9670:16,0xdb9680:64,0xdb96c0:64,0xdb9700:16,0xdb9710:16,0xdb9720:16,0xdb9730:16,0xdb9740:64,0xdb9780:64,0xdb97c0:64,0xdb9800:256,0xdb9900:256,0xdb9a00:256,0xdb9b00:256,0xdb9c00:256,0xdb9d00:256,0xdb9e00:64,0xdb9e40:64,0xdb9e80:64,0xdb9ec0:64,0xdb9f00:64,0xdb9f40:64,0xdb9f80:64,0xdb9fc0:64,0xdbd800:256,0xdbd900:256,0xdbda00:256,0xdbdb00:256,0xdbdc00:256,0xdbdd00:256,0xdbde00:256,0xdbdf00:256,0xdbe000:256,0xdbe100:256,0xdbe200:256,0xdbe300:256,0xdbe400:256,0xdbe500:256,0xdbe600:256,0xdbe700:256,0xdbe800:1024,0xdbec00:256,0xdbed00:256,0xdbee00:256,0xdbef00:256,0xdbf200:256,0xdbf300:256,0xdbf400:1024},{0xdc65c0:64,0xdc7000:1024,0xdc9880:64,0xdc98c0:64,0xdc9a00:256,0xdc9b00:256,0xdc9ef0:4,0xdca000:1024,0xdca400:1024,0xdca800:1024,0xdcac00:1024,0xdcb000:1024,0xdcb400:1024,0xdcb800:1024,0xdcbc00:1024,0xdcc000:256,0xdcc100:256,0xdcc200:256,0xdcc300:256,0xdcc400:1024,0xdcc800:1024,0xdccc00:1024,0xdce700:64,0xdce780:64,0xdce7c0:64,0xdce840:64,0xdcea00:256,0xdcf200:256,0xdcf300:256,0xdcf788:4,0xdcf78c:4,0xdcf800:1024,0xdcfc00:256},{0xdd0000:256,0xdd0100:256,0xdd0200:256,0xdd0300:64,0xdd0340:64,0xdd0380:64,0xdd03c0:64,0xdd0400:256,0xdd0500:64,0xdd0540:64,0xdd0580:64,0xdd05c0:64,0xdd0600:256,0xdd0700:16,0xdd0710:16,0xdd0720:16,0xdd0730:16,0xdd0740:16,0xdd0750:16,0xdd0760:16,0xdd0770:16,0xdd0780:64,0xdd07c0:64,0xdd0800:256,0xdd0900:256,0xdd0a00:256,0xdd0b00:64,0xdd0b40:64,0xdd0b80:64,0xdd0bc0:16,0xdd0bd0:16,0xdd0be0:16,0xdd0bf0:16,0xdd0c00:64,0xdd0c40:64,0xdd0c80:64,0xdd0d00:64,0xdd0d40:16,0xdd0d50:16,0xdd0d60:16,0xdd0d70:16,0xdd0d80:64,0xdd0dc0:64,0xdd0e00:256,0xdd0f00:256,0xdd7a00:256,0xdd7b00:256,0xdd8080:64,0xdd80c0:64,0xdd8100:256,0xdd8200:256,0xdd8300:256,0xdd85e0:16,0xdd85f0:16,0xdd8800:256,0xdd8900:256,0xddac00:1024,0xddb000:1024,0xddb400:1024,0xddc000:256,0xddc100:256,0xddc200:256,0xddc300:256,0xddc400:256,0xddc500:256,0xddc600:256,0xddc700:16,0xddc710:16,0xddc720:16,0xddc730:16,0xddc740:64,0xddc780:64,0xddc7c0:16,0xddc7e0:16,0xddc7f0:16,0xddc800:1024,0xddcc00:256,0xddcd00:256,0xddce00:256,0xddcf00:64,0xddcf40:64,0xddcf80:64,0xddcfc0:64,0xddd000:1024,0xddd400:256,0xddd500:256,0xddd600:256,0xddd700:256,0xddd800:1024,0xdddc00:1024,0xdde000:1024,0xdde400:1024,0xdde800:1024,0xddec00:256,0xdded00:256,0xddee00:256,0xddef00:64,0xddef40:64,0xddef80:64,0xddefc0:64},{0xde1000:256,0xde1100:256,0xde1200:256,0xde1300:256,0xde1400:256,0xde1500:256,0xde1600:256,0xde1700:256,0xde1800:256,0xde1900:256,0xde1a00:256,0xde1b00:256,0xde1c00:1024,0xde2000:1024,0xde2400:1024,0xde2800:1024,0xde2c00:1024,0xde3000:1024,0xde3400:1024,0xde3800:1024,0xde3c00:1024,0xde4000:1024,0xde4400:1024,0xde4800:256,0xde4900:256,0xde4a00:256,0xde4b00:256,0xde4c00:1024,0xde5000:256,0xde5100:256,0xde5200:256,0xde5300:64,0xde5340:64,0xde5380:64,0xde53c0:64,0xde5400:256,0xde5500:64,0xde5540:64,0xde5580:64,0xde55c0:64,0xde5600:256,0xde5700:256,0xde5800:256,0xde5900:256,0xde5a00:256,0xde5b00:256,0xde5c00:1024,0xde7d00:256,0xde7e80:64,0xde7ec0:64,0xde8000:1024,0xde8400:1024,0xde8800:1024,0xde8c00:1024,0xdea000:256,0xdea100:256,0xdea200:256,0xdea300:16,0xdea310:16,0xdea320:16,0xdea330:16,0xdea340:64,0xdea380:64,0xdea3c0:64,0xdea800:256,0xdea900:256,0xdeaa00:256,0xdeab00:256,0xdeac00:64,0xdeac40:64,0xdeac80:64,0xdeacc0:64,0xdead00:256,0xdeae00:256,0xdeaf00:256,0xdeb000:1024,0xdeb400:1024,0xdeb800:1024,0xdebc00:1024,0xdec000:1024,0xdec400:256,0xdec500:256,0xdec600:256,0xdec700:256,0xdec800:1024,0xdecc00:256,0xdecd00:256,0xdece00:256,0xdecf00:256,0xded000:1024,0xded400:1024,0xded800:256,0xded900:256,0xdeda00:256,0xdedb00:256,0xdedc00:256,0xdedd00:256,0xdede00:256,0xdedf00:256,0xdef000:1024,0xdef400:1024,0xdef800:256,0xdef900:64,0xdef940:64,0xdef980:16,0xdef990:16,0xdef9a0:16,0xdef9b0:16,0xdef9c0:64},{0xdf0000:256,0xdf0100:256,0xdf0200:256,0xdf0300:256,0xdf0400:1024,0xdf0800:1024,0xdf0c00:1024,0xdf1400:256,0xdf1500:256,0xdf1bb8:4,0xdf1dd0:4,0xdf1dfc:4,0xdf4000:1024,0xdf4400:1024,0xdf4800:1024,0xdf4c00:1024,0xdf5000:1024,0xdf5400:1024,0xdf5800:1024,0xdf5c00:1024,0xdf6000:1024,0xdf6400:1024,0xdf6800:1024,0xdf6c00:1024,0xdf7000:1024,0xdf7400:256,0xdf7500:256,0xdf7800:1024,0xdf7c00:1024,0xdf8000:256,0xdf8100:256,0xdf8208:4,0xdf9000:1024,0xdf9400:1024,0xdf9800:1024,0xdf9c00:1024,0xdfa000:1024,0xdfa600:256,0xdfa700:256,0xdfc000:256,0xdfc100:256,0xdfc600:256,0xdfc700:256,0xdfc900:256,0xdfca00:256,0xdfcb00:256,0xdfd000:1024,0xdfd400:256,0xdfd500:256,0xdfd600:256,0xdfd700:256,0xdfdc00:256,0xdfdd00:256,0xdfdfb0:16,0xdfdfc0:16,0xdff000:1024,0xdff400:1024,0xdff800:1024,0xdffc80:64,0xdffcc0:64,0xdffe00:256,0xdfff00:64,0xdfff40:64,0xdfffec:4,0xdffffc:2} ]; var cnIp16Range = { 0x400:1,0x404:1,0x408:1,0x410:1,0x428:1,0x3800:1,0x3804:1,0x3805:1,0x399a:1,0x3b00:1,0x3b01:1,0x6c02:1,0x6c03:1,0x6c8b:1,0x6cc8:1,0x6cd9:1,0x6cda:1,0x6d8b:1,0x6dab:1,0x6db4:1,0x6db5:1,0x6dc1:1,0x6dd0:1,0x6de5:1,0x6e0f:1,0x9000:1,0x9094:1,0x93fd:1,0x93fe:1,0x93ff:1,0x9c00:1,0xa800:1,0xa804:1,0xa8fa:1,0xa94d:1,0xa981:1,0xa98d:1,0xa9ec:1,0xaa70:1,0xaaed:1,0xab08:1,0xaf80:1,0xaf81:1,0xaf82:1,0xaf83:1,0xaf85:1,0xaf86:1,0xaf87:1,0xaf88:1,0xaf89:1,0xaf8a:1,0xaf8b:1,0xaf8c:1,0xaf8d:1,0xaf8e:1,0xaf8f:1,0xaf90:1,0xaf91:1,0xaf92:1,0xaf93:1,0xaf94:1,0xaf95:1,0xaf96:1,0xaf97:1,0xaf98:1,0xaf99:1,0xaf9a:1,0xaf9b:1,0xaf9c:1,0xaf9d:1,0xaf9e:1,0xafb0:1,0xafb1:1,0xafb2:1,0xafb3:1,0xafb4:1,0xafb5:1,0xafb6:1,0xafb7:1,0xafb8:1,0xafb9:1,0xafba:1,0xafbb:1,0xafbc:1,0xafbd:1,0xafbe:1,0xafc0:1,0xafc1:1,0xafc2:1,0xafc3:1,0xafc4:1,0xafc5:1,0xafc6:1,0xafc7:1,0xafc8:1,0xafc9:1,0xafca:1,0xafcb:1,0xafcc:1,0xafcd:1,0xafce:1,0xafcf:1,0xafd8:1,0xafd9:1,0xafdb:1,0xafdc:1,0xafdd:1,0xafde:1,0xafdf:1,0xafe0:1,0xafe1:1,0xafe2:1,0xafe3:1,0xafe4:1,0xafe5:1,0xafe6:1,0xafe7:1,0xafe8:1,0xafe9:1,0xafea:1,0xafeb:1,0xafec:1,0xafed:1,0xafef:1,0xaff0:1,0xaff3:1,0xaff8:1,0xaff9:1,0xaffa:1,0xaffb:1,0xaffc:1,0xaffd:1,0xaffe:1,0xafff:1,0xb504:1,0xb5c2:1,0xb5c3:1,0xb5c4:1,0xb5c5:1,0xb5c6:1,0xb5c7:1,0xb5c8:1,0xb5c9:1,0xb5ca:1,0xb5cb:1,0xb5cc:1,0xb5cd:1,0xb5ce:1,0xb5cf:1,0xb5d0:1,0xb5d1:1,0xb5d2:1,0xb5d3:1,0xb5d4:1,0xb5d5:1,0xb5d7:1,0xb5dc:1,0xb5dd:1,0xb5de:1,0xb5df:1,0xb5e1:1,0xb5e2:1,0xb5e3:1,0xb5e4:1,0xb5e5:1,0xb5e6:1,0xb5e7:1,0xb5e8:1,0xb5e9:1,0xb5ea:1,0xb5eb:1,0xb5ec:1,0xb5ed:1,0xb5ee:1,0xb5ef:1,0xb5f0:1,0xb5f1:1,0xb5f2:1,0xb5f3:1,0xb5f4:1,0xb5f5:1,0xb5f6:1,0xb5f8:1,0xb5f9:1,0xb5fb:1,0xb5fc:1,0xb5fd:1,0xb5fe:1,0xb5ff:1,0xc600:1,0xc7db:1,0xe907:1,0xee60:1,0xee61:1,0xee64:1,0xee65:1,0xee66:1,0xee67:1,0xeeff:1,0xf411:1,0xf412:1,0xf422:1,0xf43b:1,0xf470:1,0xf477:1,0xf4b7:1,0xf619:1,0x19400:1,0x19404:1,0x1940a:1,0x194c8:1,0x194d5:1,0x194df:1,0x19538:1,0x19580:1,0x1958d:1,0x19595:1,0x19599:1,0x195b9:1,0x19600:1,0x1972e:1,0x197a9:1,0x197ec:1,0x19c04:1,0x19c05:1,0x19c06:1,0x19c09:1,0x19c0a:1,0x19c0b:1,0x19c0d:1,0x19c0e:1,0x19c10:1,0x19c12:1,0x19c13:1,0x19c14:1,0x19c16:1,0x19c17:1,0x19c19:1,0x19c1b:1,0x19c1c:1,0x19c1e:1,0x19c1f:1,0x19c20:1,0x19c21:1,0x19c22:1,0x19c23:1,0x19c24:1,0x19c25:1,0x19c26:1,0x19c27:1,0x19c28:1,0x19c29:1,0x19c2a:1,0x19c2e:1,0x19c30:1,0x19c31:1,0x19c32:1,0x19c33:1,0x19c34:1,0x19c35:1,0x19c36:1,0x19c37:1,0x19c39:1,0x19c3a:1,0x19c3b:1,0x19c3c:1,0x19c3d:1,0x19c3f:1,0x19c40:1,0x19c41:1,0x19c44:1,0x19c45:1,0x19c46:1,0x19c47:1,0x19c4b:1,0x19c4c:1,0x19c4d:1,0x19c4f:1,0x19c50:1,0x19c51:1,0x19c52:1,0x19c53:1,0x19c55:1,0x19c56:1,0x19c57:1,0x19c58:1,0x19c59:1,0x19c5a:1,0x19c5b:1,0x19c5c:1,0x19c5e:1,0x19c5f:1,0x19c61:1,0x19c62:1,0x19c63:1,0x19c64:1,0x19c65:1,0x19c66:1,0x19c67:1,0x19c68:1,0x19c69:1,0x19c6a:1,0x19c6b:1,0x19c6c:1,0x19c6d:1,0x19c6f:1,0x19c70:1,0x19c73:1,0x19c74:1,0x19c76:1,0x19c78:1,0x19c79:1,0x19c7a:1,0x19c7b:1,0x19c7c:1,0x19c7d:1,0x19c7e:1,0x19c7f:1,0x19c80:1,0x19c81:1,0x19c82:1,0x19c83:1,0x19c84:1,0x19c85:1,0x19c86:1,0x19c87:1,0x19c88:1,0x19c89:1,0x19c8a:1,0x19c8b:1,0x19c8c:1,0x19c8d:1,0x19c8f:1,0x19c90:1,0x19c91:1,0x19c92:1,0x19c93:1,0x19c94:1,0x19c95:1,0x19c96:1,0x19c97:1,0x19c98:1,0x19c99:1,0x19c9a:1,0x19c9b:1,0x19c9c:1,0x19c9d:1,0x19c9e:1,0x19c9f:1,0x19ca0:1,0x19ca1:1,0x19ca3:1,0x19ca4:1,0x19ca5:1,0x19ca6:1,0x19ca7:1,0x19ca8:1,0x19ca9:1,0x19caa:1,0x19cab:1,0x19cac:1,0x19cad:1,0x19cae:1,0x19caf:1,0x19cb0:1,0x19cb1:1,0x19cb2:1,0x19cb3:1,0x19cb4:1,0x19cb5:1,0x19cb6:1,0x19cb7:1,0x19cb8:1,0x19cb9:1,0x19cba:1,0x19cbb:1,0x19cbc:1,0x19cbd:1,0x19cbe:1,0x19cbf:1,0x19cc0:1,0x19cc1:1,0x19cc2:1,0x19cc3:1,0x19cc4:1,0x19cc5:1,0x19cc6:1,0x19cc7:1,0x19cc8:1,0x19cc9:1,0x19cca:1,0x19ccb:1,0x19cd0:1,0x19cd1:1,0x19cd2:1,0x19cd3:1,0x19cd4:1,0x19cd5:1,0x19cd6:1,0x19cd7:1,0x19cd8:1,0x19cda:1,0x19cdb:1,0x19cdc:1,0x19cdd:1,0x19cde:1,0x19cdf:1,0x19ce0:1,0x19ce1:1,0x19ce2:1,0x19ce3:1,0x19ce4:1,0x19ce5:1,0x19ce6:1,0x19ce7:1,0x19ce8:1,0x19cea:1,0x19ced:1,0x19cee:1,0x19cef:1,0x19cf0:1,0x19cf2:1,0x19cf3:1,0x19cf4:1,0x19cf5:1,0x19cf6:1,0x19cf8:1,0x19cf9:1,0x19cfa:1,0x19cfb:1,0x19cfc:1,0x19cfd:1,0x19cfe:1,0x19cff:1,0x19f00:1,0x19f01:1,0x19f02:1,0x19f03:1,0x19f04:1,0x19f05:1,0x19f06:1,0x19f07:1,0x19f08:1,0x19f0b:1,0x19f0d:1,0x19f0e:1,0x19f0f:1,0x19f10:1,0x19f11:1,0x19f12:1,0x19f13:1,0x19f16:1,0x19f17:1,0x19f18:1,0x19f19:1,0x19f1a:1,0x19f1b:1,0x19f1e:1,0x19f1f:1,0x19f20:1,0x19f21:1,0x19f22:1,0x19f23:1,0x19f24:1,0x19f25:1,0x19f26:1,0x19f27:1,0x19f28:1,0x19f29:1,0x19f2a:1,0x19f2b:1,0x19f2c:1,0x19f2d:1,0x19f2e:1,0x19f2f:1,0x19f30:1,0x19f31:1,0x19f32:1,0x19f33:1,0x19f34:1,0x19f35:1,0x19f36:1,0x19f37:1,0x19f38:1,0x19f39:1,0x19f3a:1,0x19f3c:1,0x19f3d:1,0x19f3e:1,0x19f3f:1,0x19f40:1,0x19f42:1,0x19f45:1,0x19f46:1,0x19f47:1,0x19f48:1,0x19f49:1,0x19f4a:1,0x19f4b:1,0x19f4c:1,0x19f4d:1,0x19f4e:1,0x19f4f:1,0x19f80:1,0x19f81:1,0x19f83:1,0x19f85:1,0x19f88:1,0x19f89:1,0x19f8a:1,0x19f8b:1,0x19f8c:1,0x19f8d:1,0x19f8e:1,0x19f8f:1,0x19f90:1,0x19f91:1,0x19f92:1,0x19f93:1,0x19f94:1,0x19f96:1,0x19f97:1,0x19f98:1,0x19f99:1,0x19f9b:1,0x19f9c:1,0x19f9d:1,0x19f9e:1,0x19f9f:1,0x19fa0:1,0x19fa2:1,0x19fa3:1,0x19fa4:1,0x19fa5:1,0x19fa6:1,0x19fa7:1,0x19fa8:1,0x19fa9:1,0x19faa:1,0x19fab:1,0x19fac:1,0x19fad:1,0x19fae:1,0x19faf:1,0x19fb0:1,0x19fb1:1,0x19fb2:1,0x19fb3:1,0x19fb4:1,0x19fb5:1,0x19fb6:1,0x19fb7:1,0x19fb8:1,0x19fb9:1,0x19fba:1,0x19fbb:1,0x19fbc:1,0x19fbd:1,0x19fbe:1,0x19fbf:1,0x19fc0:1,0x19fc1:1,0x19fc2:1,0x19fc3:1,0x19fc4:1,0x19fc5:1,0x19fc6:1,0x19fc7:1,0x19fc8:1,0x19fc9:1,0x19fca:1,0x19fcb:1,0x19fce:1,0x19fcf:1,0x19fd0:1,0x19fd1:1,0x19fd2:1,0x19fd3:1,0x19fd4:1,0x19fd5:1,0x19fd6:1,0x19fd8:1,0x19fd9:1,0x19fda:1,0x19fde:1,0x19fdf:1,0x19fe0:1,0x19fe1:1,0x19fe2:1,0x19fe3:1,0x19fe4:1,0x19fe5:1,0x19fe6:1,0x19fe7:1,0x19fe8:1,0x19fe9:1,0x19fea:1,0x19feb:1,0x19fec:1,0x19fed:1,0x19fee:1,0x19fef:1,0x19ff0:1,0x19ff1:1,0x19ff2:1,0x19ff3:1,0x19ff4:1,0x19ff7:1,0x19ff8:1,0x19ff9:1,0x19ffa:1,0x19ffb:1,0x19ffd:1,0x19ffe:1,0x19fff:1,0x1a800:1,0x1b888:1,0x1b8b0:1,0x1b8b2:1,0x1b92e:1,0x1b930:1,0x1b932:1,0x1b971:1,0x1b974:1,0x1ba94:1,0x1bab4:1,0x1bab5:1,0x1bab7:1,0x1bba0:1,0x1bd0f:1,0x1bd11:1,0x1bd6f:1,0x1bd73:1,0x1bddb:1,0x1bdde:1,0x1bf74:1,0x1bf7c:1,0x1bf7f:1,0x1bfad:1,0x1bfae:1,0x1c224:1,0x1c42f:1,0x1c457:1,0x1c4d2:1,0x1c4d3:1,0x1c4ef:1,0x1c609:1,0x1c715:1,0x1c741:1,0x1c751:1,0x1c752:1,0x1c87d:1,0x1c9b8:1,0x1c9bc:1,0x1c9be:1,0x1c9df:1,0x1ca35:1,0x1cb1b:1,0x1cc7d:1,0x1cca8:1,0x1cd15:1,0x1cd53:1,0x1cdf0:1,0x1ce99:1,0x1ceec:1,0x1d000:1,0x1d0c8:1,0x1d0ea:1,0x1d0eb:1,0x1d112:1,0x1d166:1,0x1d169:1,0x1d16a:1,0x1d304:1,0x1d306:1,0x1d316:1,0x1d31e:1,0x1d352:1,0x1d354:1,0x1d358:1,0x1d359:1,0x1d3f9:1,0x1d4d4:1,0x1d4d6:1,0x1d529:1,0x1d59c:1,0x1d59d:1,0x1d59e:1,0x1d5a2:1,0x1d5e7:1,0x1d90d:1,0x1d960:1,0x1d96f:1,0x1d998:1,0x1d99e:1,0x1d9fe:1,0x1db04:1,0x1db05:1,0x1dc08:1,0x1dc3e:1,0x1dc4b:1,0x1dc6e:1,0x1dc78:1,0x1dc7f:1,0x1dc9b:1,0x1dca1:1,0x1dca8:1,0x1dcaa:1,0x1dcab:1,0x1dcfc:1,0x1dd2f:1,0x1dd4b:1,0x1de52:1,0x1de83:1,0x1de85:1,0x1dff1:1,0x1dff3:1,0x1e120:1,0x1e160:1,0x1e220:1,0x1e23e:1,0x1e400:1,0x1e4b9:1,0x1e4c8:1,0x1e4d2:1,0x1e4d3:1,0x1e4da:1,0x1e4ea:1,0x1e597:1,0x1e723:1,0x1e82a:1,0x1e998:1,0x1e999:1,0x1ea01:1,0x1eb20:1,0x1eb24:1,0x1ebe0:1,0x1ebfd:1,0x1ecca:1,0x1eceb:1,0x1ed90:1,0x1edb2:1,0x1edb3:1,0x1ee21:1,0x1eec0:1,0x1eec1:1,0x1efcb:1,0x1eff9:1,0x1f054:1,0x1f0a1:1,0x1f0a3:1,0x1f1b0:1,0x1f1b5:1,0x1f759:1,0x224ed:1,0x22c14:1,0x22c15:1,0x24b10:1,0x24b11:1,0x25a06:1,0x25a07:1,0x25bc8:1,0x25bc9:1,0x25bca:1,0x25bcb:1,0x2804f:1,0x28050:1,0x28328:1,0x283b9:1,0x28cbc:1,0x28cd4:1,0x28cd5:1,0x28cd6:1,0x28cd7:1,0x29f73:1,0x2bdbd:1,0x2bdbe:1,0x2be79:1,0x2bec2:1,0x2d178:1,0x2d179:1,0x2d250:1,0x2d252:1,0x2d253:1,0x2d256:1,0x2d25a:1,0x2d2c9:1,0x2d2f6:1,0x2d323:1,0x2d34b:1,0x2d37b:1,0x2d3a5:1,0x2d3a6:1,0x2d3ad:1,0x2d3ae:1,0x2d842:1,0x2d843:1,0x2d85e:1,0x2d85f:1,0x2d8c1:1,0x2d8c8:1,0x2d8c9:1,0x2d8db:1,0x2da81:1,0x2dbb4:1,0x2dbbc:1,0x2dd3a:1,0x2dd46:1,0x2dd6e:1,0x2ded8:1,0x301f2:1,0x302f2:1,0x32801:1,0x32802:1,0x3280e:1,0x32812:1,0x32813:1,0x32817:1,0x32818:1,0x32819:1,0x3281a:1,0x32820:1,0x32821:1,0x32822:1,0x32823:1,0x32824:1,0x32829:1,0x32830:1,0x32831:1,0x32839:1,0x3283a:1,0x3283b:1,0x32851:1,0x32854:1,0x32856:1,0x3285b:1,0x3286e:1,0x32898:1,0x32899:1,0x3289a:1,0x328a0:1,0x328a2:1,0x328a4:1,0x328a6:1,0x328a7:1,0x328ad:1,0x328ae:1,0x328b0:1,0x328b1:1,0x328b2:1,0x328b4:1,0x328b8:1,0x328ba:1,0x328bb:1,0x328bd:1,0x328be:1,0x328e7:1,0x328e8:1,0x328e9:1,0x328ec:1,0x328ef:1,0x328f0:1,0x328f1:1,0x328f2:1,0x328f5:1,0x328f9:1,0x328fb:1,0x328fd:1,0x328fe:1,0x328ff:1,0x32904:1,0x32905:1,0x3290a:1,0x3290c:1,0x32914:1,0x32918:1,0x32919:1,0x3291b:1,0x3291c:1,0x32920:1,0x32921:1,0x32926:1,0x32927:1,0x32928:1,0x32929:1,0x3292b:1,0x3292f:1,0x32933:1,0x32935:1,0x32938:1,0x3293f:1,0x32943:1,0x32944:1,0x32946:1,0x3294f:1,0x32950:1,0x32957:1,0x3295b:1,0x3295d:1,0x32960:1,0x32964:1,0x32965:1,0x32967:1,0x32968:1,0x32969:1,0x3296b:1,0x3296c:1,0x3296d:1,0x3296e:1,0x3296f:1,0x32970:1,0x32973:1,0x32974:1,0x32977:1,0x32979:1,0x3297c:1,0x3297f:1,0x32981:1,0x32982:1,0x32983:1,0x32984:1,0x32985:1,0x32987:1,0x32988:1,0x32989:1,0x3298a:1,0x3298b:1,0x3298d:1,0x3298e:1,0x3298f:1,0x32990:1,0x32991:1,0x32992:1,0x32993:1,0x32995:1,0x32997:1,0x32998:1,0x3299a:1,0x3299b:1,0x3299c:1,0x3299d:1,0x3299f:1,0x329be:1,0x329c4:1,0x329c7:1,0x329c8:1,0x329cc:1,0x329d0:1,0x329d1:1,0x329d8:1,0x329dc:1,0x329dd:1,0x329e8:1,0x329e9:1,0x329ea:1,0x329ed:1,0x329f0:1,0x329f5:1,0x329f6:1,0x329fc:1,0x329fd:1,0x329fe:1,0x329ff:1,0x32a08:1,0x32a0b:1,0x32a0c:1,0x32a0f:1,0x32a14:1,0x32a18:1,0x32a1a:1,0x32a1b:1,0x32a20:1,0x32a23:1,0x32a27:1,0x32a32:1,0x32a36:1,0x32a38:1,0x32a3c:1,0x32a3d:1,0x32a4a:1,0x32a4b:1,0x32a4e:1,0x32a50:1,0x32a51:1,0x32a54:1,0x32a56:1,0x32a57:1,0x32a58:1,0x32a5b:1,0x32a5c:1,0x32a5e:1,0x32a62:1,0x32a64:1,0x32a77:1,0x32a7a:1,0x32a82:1,0x32a89:1,0x32a90:1,0x32a91:1,0x32a95:1,0x32a96:1,0x32a97:1,0x32a9b:1,0x32aa1:1,0x32aa2:1,0x32aaa:1,0x32aab:1,0x32aaf:1,0x32ab0:1,0x32ab4:1,0x32ab5:1,0x32ab7:1,0x32ab9:1,0x32ac3:1,0x32ace:1,0x32acf:1,0x32ad2:1,0x32ad3:1,0x32ad4:1,0x32ad5:1,0x32ad8:1,0x32adb:1,0x32af5:1,0x32af6:1,0x32afc:1,0x32afd:1,0x32c00:1,0x32c01:1,0x32c02:1,0x32c03:1,0x32c04:1,0x32c05:1,0x32c07:1,0x32c09:1,0x32c0a:1,0x32c0b:1,0x32c0d:1,0x32c0e:1,0x32c12:1,0x32c13:1,0x32c14:1,0x32c15:1,0x32c16:1,0x32c17:1,0x32c1a:1,0x32c1b:1,0x32c1e:1,0x32c1f:1,0x32c20:1,0x32c21:1,0x32c22:1,0x32c23:1,0x32c24:1,0x32c25:1,0x32c26:1,0x32c28:1,0x32c29:1,0x32c2d:1,0x32c2e:1,0x32c2f:1,0x32c30:1,0x32c31:1,0x32c32:1,0x32c33:1,0x32c34:1,0x32c35:1,0x32c36:1,0x32c37:1,0x32c38:1,0x32c39:1,0x32c3a:1,0x32c3b:1,0x32c3c:1,0x32c3d:1,0x32c3e:1,0x32c3f:1,0x32c40:1,0x32c42:1,0x32c43:1,0x32c44:1,0x32c45:1,0x32c46:1,0x32c47:1,0x32c48:1,0x32c49:1,0x32c4a:1,0x32c4b:1,0x32c4c:1,0x32c4d:1,0x32c4e:1,0x32c4f:1,0x32c50:1,0x32c51:1,0x32c52:1,0x32c53:1,0x32c54:1,0x32c55:1,0x32c56:1,0x32c57:1,0x32c58:1,0x32c59:1,0x32c5a:1,0x32c5b:1,0x32c5c:1,0x32c5d:1,0x32c5e:1,0x32c5f:1,0x32c60:1,0x32c61:1,0x32c62:1,0x32c63:1,0x32c64:1,0x32c65:1,0x32c66:1,0x32c67:1,0x32c68:1,0x32c69:1,0x32c6a:1,0x32c6b:1,0x32c6c:1,0x32c6d:1,0x32c6f:1,0x32c70:1,0x32c71:1,0x32c72:1,0x32c73:1,0x32c74:1,0x32c75:1,0x32c76:1,0x32c77:1,0x32c78:1,0x32c79:1,0x32c7a:1,0x32c7b:1,0x32c7c:1,0x32c7d:1,0x32c7e:1,0x32c7f:1,0x32c80:1,0x32c81:1,0x32c82:1,0x32c83:1,0x32c84:1,0x32c85:1,0x32c86:1,0x32c87:1,0x32c88:1,0x32c89:1,0x32c8a:1,0x32c8b:1,0x32cdc:1,0x32cdd:1,0x32cde:1,0x32cdf:1,0x32ce0:1,0x32ce1:1,0x32ce2:1,0x32ce3:1,0x32ce4:1,0x32ce5:1,0x32ce6:1,0x32ce7:1,0x32cf8:1,0x32cfa:1,0x32cfb:1,0x32d32:1,0x32d33:1,0x32d36:1,0x32d38:1,0x32d3a:1,0x32d3c:1,0x32d40:1,0x32d42:1,0x32d44:1,0x32d47:1,0x32d48:1,0x32d49:1,0x32d4b:1,0x32d4c:1,0x32d4f:1,0x32d58:1,0x32d59:1,0x32d5b:1,0x32d60:1,0x32d63:1,0x32d64:1,0x32d66:1,0x32d68:1,0x32d6a:1,0x32d6b:1,0x32d6c:1,0x32d6d:1,0x32d70:1,0x32d72:1,0x32d74:1,0x32d76:1,0x32d78:1,0x32d7c:1,0x32d7d:1,0x32d7f:1,0x32d8c:1,0x32d8d:1,0x32d90:1,0x32d91:1,0x32d93:1,0x32da0:1,0x32da5:1,0x32da6:1,0x32dba:1,0x32dbb:1,0x32dc9:1,0x32dcb:1,0x32ddb:1,0x32ddc:1,0x32ddd:1,0x32e00:1,0x32e01:1,0x32e03:1,0x32e04:1,0x32e08:1,0x32e10:1,0x32e1b:1,0x32e1d:1,0x32e1e:1,0x32e3b:1,0x32e41:1,0x32e44:1,0x32e51:1,0x32e55:1,0x32e61:1,0x32e62:1,0x32e64:1,0x32e78:1,0x32e81:1,0x32e82:1,0x32e83:1,0x32e84:1,0x32e86:1,0x32e87:1,0x32e9a:1,0x32e9c:1,0x32ea0:1,0x32ea8:1,0x32eac:1,0x32eaf:1,0x32eb8:1,0x32eb9:1,0x32ebe:1,0x32ec1:1,0x32ec2:1,0x32ee1:1,0x32eee:1,0x32ef4:1,0x32ef5:1,0x32ef7:1,0x32ef9:1,0x32efb:1,0x32efc:1,0x32efe:1,0x32f00:1,0x32f07:1,0x32f09:1,0x32f0d:1,0x32f10:1,0x32f2b:1,0x32f35:1,0x32f40:1,0x32f47:1,0x32f50:1,0x32f51:1,0x32f5f:1,0x32f66:1,0x32f7b:1,0x32f7c:1,0x34808:1,0x34814:1,0x34816:1,0x3481c:1,0x34839:1,0x3483a:1,0x3483b:1,0x3483c:1,0x3483d:1,0x34841:1,0x3485c:1,0x348e3:1,0x34922:1,0x34924:1,0x34928:1,0x34929:1,0x3492a:1,0x34930:1,0x34938:1,0x3493a:1,0x3493f:1,0x3495e:1,0x34b01:1,0x34d8d:1,0x34e6d:1,0x3698b:1,0x36991:1,0x369a2:1,0x369a3:1,0x36ae7:1,0x36d69:1,0x36e58:1,0x36e59:1,0x36e5c:1,0x3727b:1,0x373de:1,0x3741c:1,0x3741d:1,0x3742f:1,0x37435:1,0x37617:1,0x3771c:1,0x3771f:1,0x37a8c:1,0x37be6:1,0x37c6e:1,0x37c77:1,0x37e08:1,0x37f7e:1,0x37f7f:1,0x37fff:1 }; var subnetIpRangeList = [ 0,1, 167772160,184549376, //10.0.0.0/8 2886729728,2887778304, //172.16.0.0/12 3232235520,3232301056, //192.168.0.0/16 2130706432,2130706688 //127.0.0.0/24 ]; var hasOwnProperty = Object.hasOwnProperty; function check_ipv4(host) { var re_ipv4 = /^\d+\.\d+\.\d+\.\d+$/g; if (re_ipv4.test(host)) { return true; } } function convertAddress(ipchars) { var bytes = ipchars.split('.'); var result = (bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | (bytes[3]); return result >>> 0; } function getProxyFromDirectIP(strIp) { var intIp = convertAddress(strIp); if ( isInSubnetRange(subnetIpRangeList, intIp) ) { return direct; } return ip_proxy; } function isInSingleRange(ipRange, intIp) { if ( hasOwnProperty.call(cnIp16Range, intIp >>> 6) ) { for ( var range = 1; range < 64; range*=4 ) { var master = intIp & ~(range-1); if ( hasOwnProperty.call(ipRange, master) ) return intIp - master < ipRange[master]; } } else { for ( var range = 64; range <= 1024; range*=4 ) { var master = intIp & ~(range-1); if ( hasOwnProperty.call(ipRange, master) ) return intIp - master < ipRange[master]; } } } function isInSubnetRange(ipRange, intIp) { for ( var i = 0; i < 10; i += 2 ) { if ( ipRange[i] <= intIp && intIp < ipRange[i+1] ) return true; } } function getProxyFromIP(strIp) { var intIp = convertAddress(strIp); if ( isInSubnetRange(subnetIpRangeList, intIp) ) { return direct; } var index = (intIp >>> 24) & 0xff; if ( isInSingleRange(cnIpRange[index], intIp >>> 8) ) { return nowall_proxy; } return wall_proxy; } function FindProxyForURL(url, host) { if ( isPlainHostName(host) === true ) { return direct; } if ( check_ipv4(host) === true ) { return getProxyFromDirectIP(host); } var strIp = dnsResolve(host); if (!strIp) { return wall_proxy; } return getProxyFromIP(strIp); } ================================================ FILE: Trojan/File/whitelist.pac ================================================ var wall_proxy = "SOCKS5 127.0.0.1:1080; SOCKS 127.0.0.1:1080;"; var nowall_proxy = "DIRECT;"; var direct = "DIRECT;"; var ip_proxy = "DIRECT;"; /* * Copyright (C) 2014 breakwa11 * https://github.com/breakwa11/gfw_whitelist */ var white_domains = {"am":{ "126":1, "51":1 },"biz":{ "7daysinn":1, "baozhuang":1, "bengfa":1, "changan":1, "chinafastener":1, "chongchuang":1, "dahuoji":1, "diandongche":1, "diaoding":1, "fishings":1, "hanjie":1, "intil":1, "kuangchan":1, "menchuang":1, "qianyan":1, "rohlan":1, "runhuayou":1, "shiyongjun":1, "shoutao":1, "tongye":1, "yuanyi":1, "zhaoming":1 },"cc":{ "0316":1, "0738":1, "163k":1, "1news":1, "21cp":1, "2che":1, "2ic":1, "3456":1, "365bh":1, "509":1, "55":1, "55g":1, "5648":1, "592wg":1, "6wang":1, "7190":1, "77wan":1, "7mo":1, "8682":1, "9844":1, "ahtc":1, "ahyx":1, "air":1, "anhui":1, "anqiu":1, "aoyou":1, "atax":1, "baise":1, "bamaol":1, "bczx":1, "bendiw":1, "bjjf":1, "byr":1, "cccity":1, "cctw":1, "chengche":1, "chinatimes":1, "chuban":1, "civilaviation":1, "comac":1, "cqnc":1, "d17":1, "denglu":1, "dker":1, "donglingying":1, "dqccc":1, "dyj":1, "ejiaju":1, "en":1, "eqz":1, "ewt":1, "fengfeng":1, "fm93":1, "gczx":1, "gf":1, "globalbuy":1, "gmtv":1, "gqw":1, "haitou":1, "hao315":1, "hb114":1, "hefei":1, "heyang":1, "heze":1, "hezerencai":1, "hongmen":1, "hty":1, "huaer":1, "huoshan":1, "huxi":1, "icoat":1, "jiangxia":1, "jinnong":1, "jinxian":1, "jinxun":1, "jz":1, "kjw":1, "kuge":1, "lbx":1, "ldz":1, "liaoba":1, "liulin":1, "longyu":1, "loyo":1, "lrd":1, "lyrc":1, "miit":1, "moko":1, "mzsky":1, "n21":1, "nandagang":1, "pingyin":1, "pinjie":1, "pp":1, "pp6":1, "pubone":1, "pyedu":1, "qcr":1, "qqzl":1, "qxw":1, "rc":1, "ruixing":1, "seeyoo":1, "sg8":1, "sgnet":1, "sh021":1, "shanhe":1, "shiyan":1, "shuichan":1, "sjhl":1, "sjz":1, "souge":1, "souyi":1, "starbaby":1, "suzhou":1, "suzo":1, "tcnews":1, "tcxw":1, "teambuy":1, "tkw":1, "tuku":1, "tyn":1, "ujian":1, "utt":1, "uu":1, "uyan":1, "vfe":1, "wandu":1, "webportal":1, "weishan":1, "wuqing":1, "wutongxiang":1, "wzcn":1, "xgz":1, "xialingying":1, "xidian":1, "xinzheng":1, "xszp":1, "yahui":1, "yc":1, "yl114":1, "ytrc":1, "ytx":1, "yutian":1, "yxi":1, "yzw":1, "zg5":1, "zhibo8":1, "zhuwang":1, "zmsc":1, "zyqc":1 },"cm":{ "4":1, "60":1, "bearing":1, "hebei":1, "yinshua":1 },"co":{ "425300":1, "banzhu":1, "hongfeng":1, "huas":1, "lixin":1, "xiaomayi":1, "xiapu":1, "ychdzx":1 },"com":{ "0-6":1, "0001688":1, "001cndc":1, "001en":1, "001jm":1, "001job":1, "001pp":1, "001sxy":1, "001uk":1, "001xin":1, "007swz":1, "00817":1, "0086gd":1, "01-123":1, "010lf":1, "01dai":1, "01dianzi":1, "01hr":1, "01w":1, "01wed":1, "020":1, "020h":1, "020job":1, "0214":1, "022china":1, "022net":1, "022s":1, "022v":1, "0231230":1, "023zp":1, "024zxw":1, "025ct":1, "025syedu":1, "025xl":1, "025zp":1, "027art":1, "029k":1, "0312mc":1, "0352fang":1, "0356f":1, "0357hz":1, "0371gaokao":1, "0371job":1, "0377auto":1, "0379city":1, "0384":1, "0396e":1, "03th":1, "0411hd":1, "04168":1, "0418fc":1, "0427":1, "0427qcw":1, "0430":1, "0437":1, "0460":1, "0470a":1, "0471fcw":1, "0510syedu":1, "0512zp":1, "0514":1, "0514rj":1, "051591":1, "0517cw":1, "0517w":1, "051jk":1, "0523zp":1, "05273":1, "0531":1, "0533":1, "0535-0411":1, "0537tt":1, "0537zp":1, "0538fc":1, "0543hr":1, "0546fdc":1, "0550":1, "055178":1, "0551fangchan":1, "0552jie":1, "0556zx":1, "0558":1, "0558t":1, "0559fc":1, "0561house":1, "0563job":1, "0564luan":1, "0566fc":1, "0566job":1, "0567":1, "0570fc":1, "057191":1, "0571car":1, "0573ren":1, "0575360":1, "0575bbs":1, "0575life":1, "057650":1, "0577cnw":1, "0577hr":1, "0577job":1, "0578rencai":1, "0578zhaopin":1, "0579com":1, "0591job":1, "05927":1, "0594":1, "0595job":1, "0595rc":1, "0596fc":1, "0598job":1, "0598rc":1, "059iu":1, "05info":1, "05sun":1, "060s":1, "0634":1, "0663job":1, "06abc":1, "07073":1, "07073sy":1, "0710go":1, "0712fang":1, "0715rc":1, "0715zp":1, "07177":1, "0719house":1, "0722fc":1, "0728f":1, "0730188":1, "0730news":1, "0731fdc":1, "0731jiaju":1, "0731job":1, "0734":1, "0734zpw":1, "0735":1, "07358":1, "0735jz":1, "0735zx":1, "0736fdc":1, "0739tt":1, "073yx":1, "0743063":1, "07430743":1, "0746news":1, "0750rc":1, "0752qc":1, "0755888":1, "0755caibao":1, "0755car":1, "0755rc":1, "0756home":1, "0756tong":1, "0757fc":1, "0757rc":1, "0760":1, "0760rc":1, "076299":1, "076650":1, "0769che":1, "0771rc":1, "0771td":1, "0772fang":1, "0772job":1, "0775fcw":1, "0775jzw":1, "0791look":1, "0791quanquan":1, "0797rs":1, "07jm":1, "07ka":1, "08115":1, "0818work":1, "0831che":1, "0832mh":1, "0835":1, "0838":1, "0838live":1, "0852diaoyu":1, "0852job":1, "0853rc":1, "0854job":1, "0855job":1, "0856job":1, "0857job":1, "0859job":1, "0890":1, "0891zp":1, "0898100":1, "0898dichan":1, "08cms":1, "08px":1, "0902rc":1, "0914cn":1, "0917":1, "0919123":1, "0921":1, "0931lanzhou":1, "0935":1, "09451":1, "0951job":1, "09635":1, "0991dj":1, "099sky":1, "09jz":1, "100":1, "100-tong":1, "10000fang":1, "10000job":1, "10000link":1, "10000tc":1, "1000tuan":1, "10010":1, "100580":1, "100afrc":1, "100ayrc":1, "100bt":1, "100cyrc":1, "100dnrc":1, "100dyrc":1, "100gcrc":1, "100gxrc":1, "100hcrc":1, "100jgsrc":1, "100jsrc":1, "100lcrc":1, "100lnrc":1, "100ndrc":1, "100njz":1, "100nkrc":1, "100ppi":1, "100qnrc":1, "100rjrc":1, "100scrc":1, "100t":1, "100thrc":1, "100warc":1, "100xfrc":1, "100xgrc":1, "100xiao":1, "100xuexi":1, "100xwrc":1, "100ydrc":1, "100ye":1, "100yfrc":1, "100yiyao":1, "100yxrc":1, "100zhuang":1, "101":1, "1010jz":1, "10155":1, "101jiajiao":1, "1024sj":1, "10339":1, "1039soft":1, "1065m":1, "108sq":1, "10fang":1, "10huan":1, "10s1":1, "10yan":1, "110":1, "1111":1, "111jz":1, "111ttt":1, "11315":1, "114160":1, "11464":1, "11467":1, "114best":1, "114chn":1, "114hrb":1, "114huoche":1, "114ic":1, "114jc":1, "114jcw":1, "114la":1, "114max":1, "114piaowu":1, "114px":1, "114qy":1, "114study":1, "115":1, "115800":1, "115img":1, "115kf":1, "1166":1, "11773":1, "117800":1, "1188":1, "118rc":1, "11919":1, "119g":1, "11chuangye":1, "11jk":1, "120-job":1, "120ask":1, "120askimages":1, "12114job":1, "12114rc":1, "121314":1, "122park":1, "12333sb":1, "1234wu":1, "12365auto":1, "123cha":1, "123fj":1, "123lvxing":1, "123xun":1, "123youhuo":1, "12530":1, "125job":1, "126":1, "128qd":1, "128uu":1, "12999":1, "12yao":1, "131cc":1, "133jz":1, "135edu":1, "1360":1, "136hr":1, "1377":1, "137home":1, "138edu":1, "138jm":1, "138job":1, "138mr":1, "139":1, "139life":1, "139shop":1, "13ejob":1, "13pr":1, "148-law":1, "1488":1, "15153":1, "1518":1, "1545ts":1, "155":1, "156580":1, "15666":1, "15880":1, "159":1, "15hr":1, "15sjw":1, "15w":1, "160":1, "161gg":1, "163":1, "163disk":1, "163k":1, "163yu":1, "164580":1, "1666":1, "1688":1, "16886000":1, "16888":1, "1688wan":1, "168dc":1, "168hm":1, "168hs":1, "168job":1, "168rc":1, "168tea":1, "168tex":1, "168xiezi":1, "16999":1, "16njl":1, "16sucai":1, "16tz":1, "17":1, "17173":1, "17173cdn":1, "1717518":1, "1717kf":1, "1717pk":1, "1718001":1, "1718china":1, "1718world":1, "172xiaoyuan":1, "173":1, "1732":1, "173daxue":1, "173eg":1, "173py":1, "173zy":1, "175game":1, "175kh":1, "176":1, "17611":1, "17673":1, "178":1, "17888":1, "178good":1, "178zmy":1, "179179":1, "1797wan":1, "17baba":1, "17dm":1, "17game":1, "17heli":1, "17house":1, "17k":1, "17liansuo":1, "17oh":1, "17ok":1, "17pr":1, "17sucai":1, "17u":1, "17ugo":1, "17yy":1, "17zwd":1, "18183":1, "1818hm":1, "188":1, "188cyw":1, "189house":1, "189rc":1, "189store":1, "18dao":1, "18ph":1, "18qiang":1, "18touch":1, "18yl":1, "1905":1, "197c":1, "198526":1, "198game":1, "199it":1, "19lou":1, "19yxw":1, "19zhan":1, "1dufish":1, "1dusou":1, "1dutm":1, "1gbru":1, "1kejian":1, "1m3d":1, "1mall":1, "1mishu":1, "1mit":1, "1n11":1, "1nongjing":1, "1nsou":1, "1peixun":1, "1qwe3r":1, "1stjc":1, "1t1t":1, "1techan":1, "1textile":1, "1ting":1, "1v1offcn":1, "1wandian":1, "1y2y":1, "1youxi":1, "1zhanok":1, "1zjob":1, "1zw":1, "2000888":1, "2008red":1, "200tc":1, "2011n":1, "21-cmjob":1, "21-rent":1, "21-sun":1, "21-used":1, "2100book":1, "210go":1, "211600":1, "211lx":1, "212300":1, "2125":1, "2197079":1, "21caas":1, "21cbh":1, "21ccnn":1, "21cn":1, "21cnhr":1, "21cnimg":1, "21cnjy":1, "21cp":1, "21dagong":1, "21dianyuan":1, "21dnn":1, "21edu8":1, "21food":1, "21hospital":1, "21hubei":1, "21ic":1, "21js":1, "21momo":1, "21our":1, "21part":1, "21pw":1, "21rcw":1, "21rv":1, "21so":1, "21tb":1, "21tyn":1, "21wecan":1, "21wenju":1, "21xc":1, "2200book":1, "221400job":1, "221700":1, "224700":1, "226500":1, "226y":1, "2298":1, "22edu":1, "233":1, "233000":1, "233863":1, "2344":1, "2345":1, "2366":1, "238200":1, "23ks":1, "246xf":1, "24jz":1, "24k99":1, "2500sz":1, "253u":1, "258":1, "258en":1, "25nc":1, "25pp":1, "25yz":1, "263":1, "263xmail":1, "264g":1, "265":1, "26595":1, "265g":1, "2688":1, "26abc":1, "28":1, "2881":1, "28hotel":1, "28sn":1, "28yj":1, "2cto":1, "2ge8":1, "2hua":1, "2m2j":1, "2mjob":1, "2mould":1, "2pjob":1, "2shequ":1, "2shoujie":1, "2smtc":1, "300p":1, "301688":1, "30556":1, "308308":1, "30edu":1, "310win":1, "311100":1, "312168":1, "312green":1, "313":1, "3145":1, "3155":1, "3158":1, "315che":1, "315hyw":1, "315online":1, "315weishi":1, "31alu":1, "31bear":1, "31bxg":1, "31byq":1, "31bzjx":1, "31expo":1, "31food":1, "31gcjx":1, "31gear":1, "31huiyi":1, "31jc":1, "31jgj":1, "31jiaju":1, "31jmw":1, "31jxw":1, "31mada":1, "31mold":1, "31pump":1, "31rzp":1, "31seal":1, "31spjx":1, "31taoci":1, "31wj":1, "31xjd":1, "31yj":1, "31zscl":1, "320106":1, "320921":1, "321200":1, "321cy":1, "3234":1, "323g":1, "32800":1, "32wan":1, "3310":1, "332527":1, "333job":1, "333ku":1, "33519":1, "3366":1, "337y":1, "33lc":1, "33ly":1, "33map":1, "33or":1, "3454":1, "34job":1, "35":1, "350ban":1, "352":1, "352200":1, "3533":1, "3566t":1, "35941":1, "35nic":1, "35q":1, "35rc":1, "35tool":1, "3603":1, "3608":1, "36099":1, "360aiyi":1, "360buy":1, "360buyimg":1, "360che":1, "360chuguo":1, "360doc":1, "360doo":1, "360eol":1, "360hun":1, "360hx":1, "360hy":1, "360kad":1, "360kan":1, "360kxr":1, "360safe":1, "360top":1, "360wbl":1, "360wyw":1, "360xh":1, "3618med":1, "361games":1, "364000":1, "365128":1, "36578":1, "36588zs":1, "365a8":1, "365ajw":1, "365anfang":1, "365art":1, "365auto":1, "365azw":1, "365bj":1, "365cgw":1, "365exam":1, "365heart":1, "365jilin":1, "365mo":1, "365rili":1, "365sji":1, "365tex":1, "365webcall":1, "365zhaosheng":1, "366x24":1, "368tea":1, "36hjob":1, "36kr":1, "36mc":1, "36nz":1, "37":1, "371":1, "37168":1, "371house":1, "3737":1, "3737k":1, "373f":1, "373house":1, "37937":1, "37cs":1, "37kfb":1, "37nixi":1, "37wan":1, "37wanimg":1, "3817":1, "3839":1, "387a":1, "3937":1, "3987":1, "39yss":1, "39yst":1, "3conline":1, "3d66":1, "3dfc":1, "3dkezhan":1, "3dmgame":1, "3dwwwgame":1, "3ghuashang":1, "3kfw":1, "3kk":1, "3lian":1, "3n110":1, "3qhouse":1, "3r66":1, "3s001":1, "3see":1, "3xgd":1, "400516":1, "4006666688":1, "4008000000":1, "4008885166":1, "400jz":1, "40279":1, "404000":1, "40407":1, "405400":1, "411au":1, "42144":1, "425300":1, "435200":1, "4355":1, "4399":1, "4399dmw":1, "4399j":1, "4399sy":1, "45575":1, "458hospital":1, "45fan":1, "45rc":1, "45win":1, "46518":1, "47365":1, "4738":1, "4765":1, "4779":1, "488u":1, "49you":1, "4gfy":1, "4yang":1, "500":1, "50018":1, "500wan":1, "5054399":1, "5068":1, "508job":1, "51":1, "51-cf":1, "510560":1, "5117":1, "5120":1, "51240":1, "51511":1, "5156edu":1, "5156rcw":1, "5173":1, "5173cdn":1, "51766":1, "5179":1, "517best":1, "517huizhou":1, "517tez":1, "5184":1, "518ad":1, "519d":1, "519dian":1, "51aimei":1, "51auto":1, "51bafu":1, "51bi":1, "51buy":1, "51bxg":1, "51chudui":1, "51chuli":1, "51cnhr":1, "51comp":1, "51credit":1, "51cto":1, "51daifu":1, "51ditu":1, "51dzrc":1, "51dzw":1, "51edu":1, "51etong":1, "51ey":1, "51fanli":1, "51fdc":1, "51flrc":1, "51g3":1, "51gaifang":1, "51haojob":1, "51hcw":1, "51hejia":1, "51iec":1, "51ielts":1, "51img1":1, "51jam":1, "51jiameng":1, "51jiaxiao":1, "51jiemeng":1, "51jingke":1, "51jishu":1, "51jiuhuo":1, "51job":1, "51jobcdn":1, "51jyrc":1, "51kids":1, "51kqn":1, "51langtu":1, "51liucheng":1, "51lunwen":1, "51lyrc":1, "51meishu":1, "51mingche":1, "51mobilejob":1, "51mole":1, "51mp3ring":1, "51nuoqi":1, "51offer":1, "51oscar":1, "51pla":1, "51qc":1, "51qingjiao":1, "51rc":1, "51rencai":1, "51report":1, "51seer":1, "51sheyuan":1, "51sole":1, "51t":1, "51talk":1, "51talkenglish":1, "51taonan":1, "51taoshi":1, "51tie":1, "51touch":1, "51ttyy":1, "51tz":1, "51valves":1, "51wan":1, "51wf":1, "51wj":1, "51wjrc":1, "51wyrc":1, "51xxr":1, "51yala":1, "51yes":1, "51yey":1, "51you":1, "51youcai":1, "51yougo":1, "51ysrc":1, "51yunli":1, "51zhantai":1, "51zhucai":1, "51zjxm":1, "51zsjc":1, "51ztzj":1, "51zuoche":1, "51zupu":1, "51zx":1, "51zyrc":1, "520":1, "520520520520520":1, "520apk":1, "520bn":1, "520e3e4":1, "520love520":1, "520wawa":1, "521che":1, "521g":1, "5234444":1, "52372":1, "5253":1, "526wan":1, "527pk":1, "52as":1, "52bar":1, "52bendi":1, "52bus":1, "52che":1, "52da":1, "52design":1, "52djq":1, "52fangzi":1, "52fuqing":1, "52guixi":1, "52hardware":1, "52hxw":1, "52jscn":1, "52njl":1, "52pk":1, "52solution":1, "52ykjob":1, "52yuanm":1, "52z":1, "52zhushan":1, "531city":1, "533":1, "5336":1, "538538":1, "5399":1, "53kf":1, "54086":1, "54114":1, "5433":1, "54heb":1, "54jj":1, "54job":1, "55":1, "550400":1, "55188":1, "55bbs":1, "55tuan":1, "55tuanimg":1, "55weixiu":1, "55you":1, "56":1, "56156":1, "5617":1, "56360":1, "5652":1, "5654":1, "566855":1, "5669":1, "566job":1, "56china":1, "56en":1, "56img":1, "56ml":1, "56mp":1, "56qss":1, "57023":1, "5741886":1, "576":1, "57616":1, "576tv":1, "5778":1, "577fang":1, "57821":1, "57go":1, "57info":1, "57qy":1, "57tibet":1, "57tuan":1, "58":1, "580k":1, "582hr":1, "5858":1, "586jz":1, "5874":1, "587766":1, "58dm":1, "58fenlei":1, "58food":1, "58game":1, "58guakao":1, "58house":1, "58pic":1, "58sing":1, "59120":1, "59178":1, "591hx":1, "591wed":1, "591wy":1, "5925car":1, "596fc":1, "597":1, "59706":1, "597rcw":1, "598rc":1, "59kankan":1, "5ajob":1, "5d6d":1, "5est":1, "5etv":1, "5fen":1, "5g":1, "5huu":1, "5i5j":1, "5i9u":1, "5ikfc":1, "5ipatent":1, "5its":1, "5iucn":1, "5iyq":1, "5jzp":1, "5khouse":1, "5lejob":1, "5read":1, "5sai":1, "5sw":1, "5u588":1, "5w":1, "6-china":1, "60malaysia":1, "61":1, "6103":1, "61166":1, "612345":1, "6164":1, "6168511":1, "6188":1, "618hr":1, "61baobao":1, "61bbw":1, "61ertong":1, "61flash":1, "61mami":1, "628":1, "632news":1, "64365":1, "646000":1, "64ma":1, "65":1, "651700":1, "6528":1, "65singapore":1, "65wan":1, "66163":1, "6637":1, "6665":1, "66667676":1, "666ccc":1, "6676":1, "6677000":1, "66880":1, "668city":1, "668map":1, "6695":1, "66diqiu":1, "66dt":1, "66house":1, "66liu":1, "66qhd":1, "66ruian":1, "66u":1, "66wc":1, "66wz":1, "66xue":1, "66yj":1, "66you":1, "66zhuang":1, "67":1, "6711":1, "678114":1, "6789uu":1, "678py":1, "680":1, "68211":1, "685":1, "688glass":1, "688n":1, "68hr":1, "68zhuan":1, "6949":1, "69hr":1, "69kan":1, "6eat":1, "6m":1, "6tennis":1, "6v68":1, "6zrc":1, "70":1, "703804":1, "70e":1, "70yx":1, "711g":1, "7120":1, "712100":1, "7192":1, "71lady":1, "71lm":1, "71study":1, "71zs":1, "72177":1, "7230":1, "7273":1, "72ce":1, "72g":1, "72xuan":1, "731c":1, "737":1, "7377":1, "7399":1, "73994":1, "74cms":1, "762rc":1, "7651":1, "766":1, "769car":1, "76jie":1, "7711":1, "77313":1, "774g":1, "7755":1, "777zp":1, "7788":1, "7789":1, "7799520":1, "77hunjia":1, "77l":1, "77vcd":1, "77zxw":1, "78187":1, "7878":1, "78793":1, "789gg":1, "78fz":1, "78hr":1, "78zph":1, "79":1, "7937":1, "7940":1, "7979la":1, "798edu":1, "799job":1, "79cha":1, "79w":1, "7ahr":1, "7c":1, "7caiyun":1, "7dapei":1, "7edown":1, "7fgame":1, "7hcn":1, "7hon":1, "7jia2":1, "7k35":1, "7k7k":1, "7mgame":1, "7po":1, "7stk":1, "7su":1, "7wsh":1, "7xz":1, "7y7":1, "7yueji":1, "800020308":1, "800hr":1, "800pai":1, "8014":1, "80881":1, "8090yxs":1, "80halta":1, "80tian":1, "81629":1, "818":1, "818222":1, "81tech":1, "81yy":1, "8211":1, "82222919":1, "82341":1, "826":1, "8264":1, "8265":1, "828g":1, "832200":1, "83480900":1, "83838":1, "8384cs":1, "8385":1, "84519":1, "84ktv":1, "860527":1, "860598":1, "862sc":1, "86516":1, "8684":1, "86933":1, "86anjie":1, "86djw":1, "86jobs":1, "86jzjob":1, "86kx":1, "86kyjob":1, "86lawyer":1, "86mdo":1, "86nb":1, "86office":1, "86pla":1, "86qc":1, "86wan":1, "86wind":1, "86zsw":1, "87188718":1, "8783":1, "87pk":1, "88":1, "88152":1, "8844":1, "88680":1, "88845678":1, "88999":1, "88h3":1, "88lan":1, "88mf":1, "88tc":1, "88yz":1, "89178":1, "895cn":1, "898tc":1, "8bo":1, "8btc":1, "8dn":1, "8fkd":1, "8le8le":1, "8tennis":1, "8uka":1, "8uuzg":1, "90576":1, "90tiyu":1, "90vs":1, "91":1, "911cha":1, "911xs":1, "913u":1, "9158":1, "917":1, "917rcw":1, "9188":1, "9191mr":1, "9191px":1, "91985":1, "91b2b":1, "91canyin":1, "91cps":1, "91danji":1, "91ddcc":1, "91huayi":1, "91jf":1, "91jm":1, "91jmw":1, "91job":1, "91jsj":1, "91open":1, "91px":1, "91rb":1, "91student":1, "91town":1, "91wan":1, "91yao":1, "92gzc":1, "92wudao":1, "92wy":1, "92you":1, "934dsw":1, "9355":1, "9377":1, "93pk":1, "93tyy":1, "94176":1, "941jy":1, "9453job":1, "94i5":1, "95060":1, "95081":1, "95191":1, "9553":1, "9564":1, "9588":1, "958shop":1, "95px":1, "960law":1, "960rc":1, "96211":1, "9637":1, "96520":1, "9666sr":1, "9669":1, "96963":1, "969g":1, "96hq":1, "96pk":1, "96u":1, "9724":1, "973":1, "9787":1, "97973":1, "97go":1, "98523":1, "988001":1, "988yx":1, "98player":1, "98znz":1, "99":1, "99114":1, "99166":1, "9939":1, "9949":1, "996":1, "9966333":1, "997788":1, "998":1, "999":1, "9991":1, "9996270":1, "999ask":1, "999brain":1, "99bill":1, "99cfw":1, "99fund":1, "99huizhou":1, "99ielts":1, "99inf":1, "99jianzhu":1, "99nahuo":1, "99pet":1, "99qh":1, "99sushe":1, "99wed":1, "99xr":1, "99ys":1, "99zuowen":1, "9che":1, "9chew":1, "9chun":1, "9first":1, "9ht":1, "9i5c":1, "9ijr":1, "9juren":1, "9k9k":1, "9ku":1, "9laodi":1, "9qc":1, "9sky":1, "9to":1, "9u":1, "9u8u":1, "9v8v":1, "9wee":1, "9ye":1, "9yjobtm":1, "9you":1, "9zjob":1, "a0598":1, "a1166":1, "a22":1, "a67":1, "a688888":1, "a8":1, "a9188":1, "a963":1, "abab":1, "abang":1, "abchina":1, "ablesky":1, "accgame":1, "aci-wh":1, "acs86":1, "acshoes":1, "adaicom":1, "addpv":1, "adiic":1, "admaimai":1, "admin5":1, "admin6":1, "adnxs":1, "adroll":1, "adsage":1, "adsame":1, "adsonar":1, "adtechus":1, "adyun":1, "aeenets":1, "af360":1, "afjk":1, "afjob88":1, "aft888":1, "afzhan":1, "ag365":1, "age06":1, "agrodt":1, "agrofairs":1, "agrosg":1, "ahauto":1, "ahbys":1, "ahchanyi":1, "ahgame":1, "ahglj":1, "ahgzdz":1, "ahjgxy":1, "ahjtxx":1, "ahjzw":1, "ahlags":1, "ahlib":1, "ahlife":1, "ahljnews":1, "ahmmhg":1, "ahqmdq":1, "ahssnews":1, "ahsyj":1, "ai96":1, "aibang":1, "aibo123":1, "aicai":1, "aichao521":1, "aicunfu":1, "aideschool":1, "aidiao":1, "aidigong":1, "aidr968":1, "aifang":1, "aifangke":1, "aifcdn":1, "aifengjie":1, "aigou":1, "aihami":1, "aihandu":1, "aihuigo":1, "aija":1, "aiju":1, "aiketour":1, "aili":1, "ailinzhou":1, "ailiuxue":1, "aimuju":1, "aipai":1, "airmb":1, "airtofly":1, "aituan":1, "aiyiqu":1, "aiyouxi":1, "aizhan":1, "aizhe58":1, "aizongyi":1, "ajkcdn":1, "ajkimg":1, "akangdi":1, "akdanji":1, "aksxw":1, "alacun":1, "aliapp":1, "alibaba":1, "alibado":1, "alibole":1, "alicdn":1, "aliexpress":1, "alifabu":1, "alihuahua":1, "aliimg":1, "aliloan":1, "alimama":1, "alipay":1, "alipayobjects":1, "aliresearch":1, "alisoft":1, "alitrip":1, "aliunicorn":1, "alivv":1, "alixixi":1, "aliyiyao":1, "aliyun":1, "aliyuncs":1, "alkuyi":1, "allbrightlaw":1, "allfang":1, "allyes":1, "altxw":1, "alu1886":1, "alyisheng":1, "am89":1, "amap":1, "ambow":1, "ampcn":1, "anatuprak":1, "anchi-china":1, "andaike":1, "anfan":1, "anfensi":1, "angeeks":1, "angelcrunch":1, "angelyeast":1, "anhuaedu":1, "anhuihr":1, "anhuijrw":1, "anhuinews":1, "animalchina":1, "anjian":1, "anjuke":1, "anjukestatic":1, "anqingonline":1, "anqu":1, "anquanbao":1, "anruan":1, "ansteelgroup":1, "antpedia":1, "anxiangren":1, "anxin":1, "anxjm":1, "any123":1, "any2000":1, "anzhi":1, "anzow":1, "aojiyouxue":1, "aojiyuke":1, "aojoo":1, "aoomoo":1, "aoshu":1, "aosoo":1, "aotutuan":1, "aoye":1, "aoyou":1, "ap88":1, "apabi":1, "apandim":1, "apclc":1, "apkyx":1, "app111":1, "app17":1, "apparelsos":1, "appchina":1, "appgame":1, "apple":1, "apple2003":1, "appvv":1, "appying":1, "aptchina":1, "apusic":1, "aqapk":1, "aqioo":1, "aqjfsy":1, "aqjob":1, "aqzpw":1, "aqzyzx":1, "archina":1, "arpun":1, "art456":1, "artebuy":1, "artgoin":1, "arting365":1, "artokok":1, "artrade":1, "artxun":1, "as2sc":1, "aseantradecenter":1, "asiabt":1, "asiae":1, "askci":1, "aslzw":1, "asp168":1, "aspcms":1, "astropulsion":1, "at918":1, "ataozx":1, "atdmt":1, "atobo":1, "atpanel":1, "auak":1, "austargroup":1, "austarstudy":1, "auto024":1, "auto18":1, "auto318":1, "auto328":1, "autobaidu":1, "autochina360":1, "autosup":1, "auyou":1, "av001":1, "aw99":1, "axmro":1, "ayrbs":1, "ayxxz":1, "b-fairy":1, "b-tea":1, "b2b110":1, "b2b168":1, "b2bic":1, "b2bkk":1, "b2bvip":1, "b2cedu":1, "b5m":1, "bababian":1, "babidou":1, "babymob":1, "babytree":1, "babytreeimg":1, "bafangwang":1, "bagb2b":1, "baicai":1, "baicheng":1, "baicmotor":1, "baidajob":1, "baidu":1, "baidustatic":1, "baiduyy":1, "baietu":1, "baifendian":1, "baifubao":1, "baihe":1, "baike":1, "baikemy":1, "bailitop":1, "bailvwang":1, "baimao":1, "baimei":1, "baimin":1, "baina":1, "baipaopao":1, "baipu365":1, "baiqi008":1, "baisha2004":1, "baishan":1, "baishuiapple":1, "baishunet":1, "baiwanzhan":1, "baixing":1, "baixinger":1, "baixingjd":1, "baiye5":1, "baiyou100":1, "bamaiwo":1, "bamaol":1, "bamboo18":1, "bamudi":1, "bamuyu":1, "banbijiang":1, "banggo":1, "banjiajia":1, "bank-of-china":1, "bankcomm":1, "bankhr":1, "bankofshanghai":1, "banksteel":1, "banma":1, "banwojia":1, "baobao88":1, "baobaolong":1, "baobaomm":1, "baobei360":1, "baobeihuijia":1, "baobeita":1, "baobidai":1, "baofeng":1, "baofoo":1, "baoji168":1, "baojidaily":1, "baojijob":1, "baojinews":1, "baojk":1, "baomihua":1, "baoming":1, "baoming88":1, "baoruan":1, "baoshanjie":1, "baosteel":1, "baotoufxh":1, "baoyuntong":1, "baozang":1, "baozifa":1, "baozoumanhua":1, "barmap":1, "batiaoyu":1, "batterydir":1, "batterykey":1, "baxue":1, "bayuche":1, "bazhibo":1, "bbbaaa":1, "bbhun":1, "bbioo":1, "bbs029":1, "bbsheji":1, "bbtcaster":1, "bbwfish":1, "bcactc":1, "bcjy123":1, "bcpcn":1, "bdall":1, "bdchina":1, "bdglj":1, "bdgycx":1, "bdimg":1, "bdmryj":1, "bdstatic":1, "becod":1, "beelink":1, "beianbeian":1, "beibaotu":1, "beibei":1, "beifabook":1, "beifangfoshifen":1, "beiguorc":1, "beihai365":1, "beihaidc":1, "beijinghuashen":1, "beijingrc":1, "beimeihongfeng":1, "beisen":1, "beitaichufang":1, "beiwaionline":1, "beiww":1, "benber":1, "bendibao":1, "bengbeng":1, "bengou":1, "benseshijue":1, "benshouji":1, "benxi0414":1, "berqin":1, "berui":1, "best73":1, "bestb2b":1, "besttrav":1, "betrad":1, "beva":1, "bf35":1, "bfedu":1, "bfjjw":1, "bfyx":1, "bgl88":1, "bgrimm":1, "bh-eye":1, "bh111":1, "bhxww":1, "biancui":1, "bianfeng":1, "bianmincn":1, "bianzhirensheng":1, "bibitie":1, "bidchance":1, "bieshu":1, "big-bit":1, "bijirim":1, "biketo":1, "bilibili":1, "biligame":1, "bilinstar":1, "bincailiuxue":1, "bingchengwang":1, "binzhuang":1, "bio1000":1, "bioon":1, "bisenet":1, "bitauto":1, "bitautoimg":1, "bitautotech":1, "bitscn":1, "biyangwang":1, "biyong007":1, "biz178":1, "biz72":1, "bizcn":1, "bj597":1, "bjbghc":1, "bjbus":1, "bjcankao":1, "bjccedu":1, "bjcec":1, "bjchild":1, "bjclio":1, "bjfair":1, "bjfisc":1, "bjlmfq":1, "bjmama":1, "bjmanyuan":1, "bjmti":1, "bjp321":1, "bjrc":1, "bjrcb":1, "bjsjwl":1, "bjsly":1, "bjsoyo":1, "bjspw":1, "bjsqgy":1, "bjsyqw":1, "bjtopli":1, "bjwmys":1, "bjxatq":1, "bjximei":1, "bjzqw":1, "bjzs114":1, "bkill":1, "blctwed":1, "bleju":1, "blemall":1, "bliao":1, "blimage":1, "blogbus":1, "blogchina":1, "blogcn":1, "bloves":1, "blqx":1, "blqy":1, "blshe":1, "bluehn":1, "blueidea":1, "bluekai":1, "blyol":1, "blyun":1, "bmlink":1, "bnagri":1, "bndaily":1, "bnjyks":1, "bnncn":1, "bnqgsl":1, "bnwin":1, "bo-yi":1, "boai":1, "boairc":1, "bokecc":1, "bokee":1, "bokerb":1, "bolijob":1, "booeoo":1, "bookschina":1, "boosj":1, "bootcss":1, "boqii":1, "bosscdn":1, "bossgoo":1, "bosshr":1, "bosslink":1, "boxuu":1, "bozhong":1, "bqqm":1, "brandcn":1, "breadtrip":1, "brightdairy":1, "bs265":1, "bsjhhzs":1, "bsrczpw":1, "bssmm":1, "bsyjrb":1, "btc114":1, "btc123":1, "btcha":1, "btd":1, "btophr":1, "btrcsc":1, "btsteel":1, "bufan":1, "buildhr":1, "bundpic":1, "burberry":1, "bus84":1, "busytrade":1, "buycarcn":1, "buyiju":1, "bww6bdd":1, "bx58":1, "bxd365":1, "bxdyt":1, "bxgtd":1, "bxjyw":1, "bxxy":1, "bxycw":1, "bxynzz":1, "bxzxw":1, "bycmw":1, "byecity":1, "byf":1, "byshr":1, "bytsylmr":1, "bzgd":1, "bzjw":1, "bzshw":1, "bzw315":1, "c-119":1, "c-bm":1, "c-c":1, "c-ctrip":1, "c-yl":1, "c029":1, "c969":1, "ca001":1, "ca168":1, "ca800":1, "caayee":1, "cabhr":1, "cabinetbuy":1, "cableabc":1, "caexpo":1, "cago365":1, "cai188":1, "caidianqu":1, "caigou2003":1, "caiguu":1, "caihao":1, "caijixia":1, "cailele":1, "cailiao":1, "caing":1, "caipiao365":1, "caipopo":1, "caixin":1, "caiyun":1, "cake400":1, "cali-light":1, "candou":1, "cang":1, "cangnan5":1, "cankaoxiaoxi":1, "canyin88":1, "caomeipai":1, "car0575":1, "car2100":1, "carcav":1, "cardbaobao":1, "carnoc":1, "carschina":1, "carxoo":1, "casemeet":1, "casvino":1, "casvm":1, "cat898":1, "catwaji":1, "cb12580":1, "cbe21":1, "cbigame":1, "cbinews":1, "cbminfo":1, "cboil":1, "cbrx":1, "cbskc":1, "cbsrc":1, "cc148":1, "cc961":1, "ccb":1, "cccwww":1, "ccdby":1, "ccedip":1, "ccedisp":1, "ccedpw":1, "ccement":1, "ccgoufang":1, "ccic":1, "ccidcom":1, "ccidnet":1, "ccjoy":1, "cclcn":1, "ccm-1":1, "ccn360":1, "ccnpic":1, "ccoalnews":1, "ccost":1, "ccpc360":1, "ccr100":1, "cct114":1, "cctcct":1, "cctiedu":1, "cctime":1, "cctv":1, "cctvcj":1, "cctvmall":1, "cctvpic":1, "ccutu":1, "ccwcw":1, "ccwushu":1, "cd-feiyue":1, "cdaidu":1, "cdbcw":1, "cddiaosu":1, "cdedu":1, "cdjsjx":1, "cdnet110":1, "cdqss":1, "cdrfjc":1, "cdrtvu":1, "cdscjd":1, "cdsme":1, "cdsydc":1, "cdyee":1, "cdygdq":1, "cdyipin":1, "cdyzg":1, "cdzgh":1, "ce-air":1, "ceair":1, "cebbank":1, "cecb2b":1, "ceccen":1, "cehome":1, "cehui8":1, "ceiea":1, "cement365":1, "cementren":1, "centanet":1, "centuryholding":1, "cenwor":1, "ceoeo":1, "ceotx":1, "ceowan":1, "ceramicschina":1, "cernet":1, "cersp":1, "ceunion":1, "cf668":1, "cfcyb":1, "cfd163":1, "cfhot":1, "cfmmc":1, "cguardian":1, "cguwan":1, "ch":1, "ch999":1, "chaduo":1, "chaej":1, "chahaoba":1, "chahaotai":1, "chaic":1, "chajie":1, "chamei":1, "champconsult":1, "chanel":1, "changfon":1, "changhongnet":1, "changjiangtimes":1, "changyou":1, "changzhinews":1, "chaoren":1, "chaoxing":1, "chaozhoudaily":1, "chasfz":1, "chashebao":1, "chazidian":1, "chazuo":1, "chcpmc":1, "che-piao":1, "che12":1, "che168":1, "che2":1, "cheaa":1, "cheari":1, "checkoo":1, "cheduo":1, "cheduoshao":1, "chefans":1, "chelink":1, "chem17":1, "chem960":1, "chem99":1, "chemayi":1, "chemdrug":1, "chemishu":1, "chemmade":1, "chemnet":1, "chemrc":1, "chemsb":1, "chengan5":1, "chengdechina":1, "chengdujjw":1, "chengguw":1, "chengkao365":1, "chengshiw":1, "chengshizg":1, "chengw":1, "chengyangnews":1, "chenhr":1, "chepin88":1, "chepinnet":1, "cheshi":1, "cheshi-img":1, "chetx":1, "chetxia":1, "chewen":1, "chexiu":1, "chexun":1, "cheyian":1, "cheyisou":1, "cheyou123":1, "cheyun":1, "chgcw":1, "chhkjob":1, "china":1, "china-3":1, "china-315":1, "china-ah":1, "china-asahi":1, "china-b":1, "china-cdt":1, "china-changlin":1, "china-channel":1, "china-chuwei":1, "china-d":1, "china-designer":1, "china-edai":1, "china-ef":1, "china-eia":1, "china-erzhong":1, "china-fire":1, "china-flower":1, "china-holiday":1, "china-huaxue":1, "china-insurance":1, "china-lushan":1, "china-nengyuan":1, "china-pub":1, "china-seeq":1, "china-shufajia":1, "china-slate":1, "china-sss":1, "china-up":1, "china-waste":1, "china-zibo":1, "china001":1, "china114net":1, "china12365":1, "china1f":1, "china2car":1, "china3-d":1, "chinaacc":1, "chinaamc":1, "chinaavl":1, "chinabathware":1, "chinabdh":1, "chinabdt":1, "chinabgao":1, "chinabidding":1, "chinabmi":1, "chinabreed":1, "chinabuses":1, "chinabx":1, "chinabyte":1, "chinabzp":1, "chinacarbide":1, "chinacars":1, "chinacbe":1, "chinaccm":1, "chinaccnet":1, "chinaceot":1, "chinachemnet":1, "chinachugui":1, "chinacnr":1, "chinacoal":1, "chinacoop":1, "chinacpx":1, "chinacqsb":1, "chinacreator":1, "chinacxgd":1, "chinadance":1, "chinadrtv":1, "chinadyt":1, "chinaedu":1, "chinaedunet":1, "chinaenvironment":1, "chinaeye":1, "chinafix":1, "chinaforklift":1, "chinafudaoban":1, "chinagiftsfair":1, "chinagoldgroup":1, "chinagzn":1, "chinahaoan":1, "chinahazelnut":1, "chinahbnet":1, "chinahightech":1, "chinahighway":1, "chinahr":1, "chinahrt":1, "chinahvacr":1, "chinaiiss":1, "chinaiol":1, "chinairn":1, "chinaitlab":1, "chinajnhb":1, "chinajob":1, "chinajsxx":1, "chinajxship":1, "chinajzw":1, "chinakaoyan":1, "chinakingo":1, "chinalao":1, "chinalawedu":1, "chinalawinfo":1, "chinaluxus":1, "chinalxnet":1, "chinameirongspa":1, "chinamendu":1, "chinamenwang":1, "chinamining":1, "chinamobile":1, "chinamsr":1, "chinamypp":1, "chinanetsun":1, "chinaneweast":1, "chinanews":1, "chinaningbo":1, "chinaoct":1, "chinaok":1, "chinaore":1, "chinapay":1, "chinapet":1, "chinapnr":1, "chinaports":1, "chinapp":1, "chinaqw":1, "chinaren":1, "chinasexq":1, "chinaso":1, "chinasq":1, "chinasspp":1, "chinaswitch":1, "chinasws":1, "chinatarena":1, "chinatat":1, "chinatibetnews":1, "chinatietong":1, "chinatour-net":1, "chinatsi":1, "chinauma":1, "chinaunicom":1, "chinaunionpay":1, "chinaups":1, "chinavegan":1, "chinavisual":1, "chinavnet":1, "chinavoa":1, "chinawatchnet":1, "chinawbsyxh":1, "chinawch":1, "chinaweiyu":1, "chinawestagr":1, "chinawjol":1, "chinawoodnet":1, "chinawudang":1, "chinawutong":1, "chinawuyuan":1, "chinaxiaokang":1, "chinaxinge":1, "chinaxq":1, "chinaxwcb":1, "chinayigui":1, "chinayouji":1, "chinayyjx":1, "chinaz":1, "chinazichan":1, "chinazikao":1, "chinazjy":1, "chinesecio":1, "chinesejy":1, "chizhoujob":1, "chizhouren":1, "chiznews":1, "chnart":1, "chnpac":1, "chnsuv":1, "chnvc":1, "chnweiyu":1, "chofn":1, "chtf":1, "chtgc":1, "chuandong":1, "chuangye":1, "chuangyemeng":1, "chuanke":1, "chuanmeicn":1, "chufw":1, "chuguo78":1, "chuguohome":1, "chunqiuwang":1, "chushan":1, "ci123":1, "ciceme":1, "ciif-expo":1, "ciku5":1, "cioage":1, "cisco":1, "cisregister":1, "citic":1, "citsnj":1, "city8":1, "citygf":1, "citysbs":1, "cityy":1, "civilness":1, "ciweek":1, "ciwong":1, "cjol":1, "cjrcsc":1, "cjyyw":1, "ckplayer":1, "cl0438":1, "cl597":1, "class01":1, "classic023":1, "clcmw":1, "cljmmm123":1, "clotheshr":1, "clothr":1, "clssn":1, "cmbchina":1, "cmejob":1, "cmfu":1, "cmge":1, "cmhk":1, "cmitsd":1, "cmol":1, "cmstop":1, "cmt178":1, "cmxrcw":1, "cn-122":1, "cn-diaoyu":1, "cn-office":1, "cn-roofexpert":1, "cn-truck":1, "cn010w":1, "cn0434":1, "cn0556":1, "cn0851":1, "cn0917":1, "cn12333":1, "cn21edu":1, "cn2che":1, "cn357":1, "cn5135":1, "cn539":1, "cn716":1, "cnad":1, "cnadtop":1, "cnagri":1, "cnaho":1, "cnair":1, "cnal":1, "cnautonews":1, "cnbeta":1, "cnblogs":1, "cnbzxw":1, "cnchainnet":1, "cnchu":1, "cncn":1, "cncookernet":1, "cncopter":1, "cncotton":1, "cncproduct":1, "cncraftinfo":1, "cncrk":1, "cnd8":1, "cndae":1, "cndesign":1, "cndingxi":1, "cndns":1, "cndoornet":1, "cndoors":1, "cndrsq":1, "cndrynet":1, "cndsi":1, "cndzys":1, "cnelc":1, "cnena":1, "cnep001":1, "cnepaper":1, "cnfeol":1, "cnffi":1, "cnfilternet":1, "cnfla":1, "cnfol":1, "cnfolimg":1, "cnforex":1, "cnfq":1, "cnfruit":1, "cnfzflw":1, "cngaosu":1, "cngba":1, "cngoto":1, "cngrain":1, "cnhaio":1, "cnhan":1, "cnhandan":1, "cnhangyun":1, "cnhmsq":1, "cnhnb":1, "cnhubei":1, "cnhvacrnet":1, "cnhzpjy":1, "cnipai":1, "cnipr":1, "cnjiaju":1, "cnjidan":1, "cnjj":1, "cnjnsb":1, "cnjob":1, "cnjsqw":1, "cnjxol":1, "cnjywl":1, "cnjzjj":1, "cnkang":1, "cnkjtf":1, "cnkjz":1, "cnledw":1, "cnlightnet":1, "cnluqiao":1, "cnluye":1, "cnmill":1, "cnmmhh":1, "cnmo":1, "cnnaihuo":1, "cnnb":1, "cnoee":1, "cnokcn":1, "cnoutdoor":1, "cnpatent":1, "cnpickups":1, "cnpkm":1, "cnpowdernet":1, "cnpubg":1, "cnpv":1, "cnqc":1, "cnqjc":1, "cnqjw":1, "cnradio":1, "cnrdn":1, "cnree":1, "cnrencai":1, "cnrepair":1, "cnrepark":1, "cnseeq":1, "cnshipnet":1, "cnshipping":1, "cnsikao":1, "cnsimin":1, "cnsnpj":1, "cnsphoto":1, "cnsqzx":1, "cnstock":1, "cnsuning":1, "cnsuv":1, "cnsyyx":1, "cnta":1, "cntaijiquan":1, "cntaiping":1, "cntc":1, "cntexjob":1, "cntheory":1, "cntour2":1, "cntrades":1, "cntronics":1, "cnv168":1, "cnwaternews":1, "cnwav":1, "cnwdjj":1, "cnwear":1, "cnwest":1, "cnwest88":1, "cnwinenews":1, "cnwpem":1, "cnwuyun":1, "cnxds":1, "cnxiantao":1, "cnxianzai":1, "cnyigui":1, "cnys":1, "cnyu":1, "cnyxs":1, "cnzao":1, "cnzhantuan":1, "cnzhengmu":1, "cnzjqi":1, "cnzsyz":1, "cnzz":1, "co188":1, "coal-link":1, "coalcn":1, "coaoo":1, "coatingol":1, "coco90":1, "cocoachina":1, "cofco":1, "cofeed":1, "cofool":1, "cogonline":1, "comicyu":1, "compete":1, "comsenz":1, "conshow":1, "coo8":1, "coodir":1, "cool-de":1, "coolxap":1, "coolzan":1, "coop100":1, "coopb2b":1, "cosco":1, "cozyee":1, "cp2y":1, "cpdyj":1, "cpooo":1, "cpp114":1, "cppfoto":1, "cps1688":1, "cps800":1, "cptjob":1, "cpv6":1, "cpvjob":1, "cq3a":1, "cq6":1, "cqbnda":1, "cqbnedu":1, "cqbnkx":1, "cqbnly":1, "cqbnrc":1, "cqbntv":1, "cqbys":1, "cqcb":1, "cqcoal":1, "cqcsrc":1, "cqdent":1, "cqduomi":1, "cqfire":1, "cqhaokou":1, "cqjiaz":1, "cqjjnet":1, "cqjob":1, "cqjsxx":1, "cqjy":1, "cqkx":1, "cqlozz":1, "cqmmgo":1, "cqncnews":1, "cqqiyi":1, "cqshenou":1, "cqskl":1, "cqtea":1, "cqtransit":1, "cquae":1, "cqvip":1, "cqwin":1, "cqxh120":1, "cqxiehe":1, "cqxsss":1, "cqzls":1, "cr173":1, "cr18g":1, "crabchina":1, "craftcontact":1, "crec4":1, "crecg":1, "cric":1, "crm1001":1, "crmgz":1, "crosswaycn":1, "crsky":1, "crystaledu":1, "cs-air":1, "cs090":1, "cs2sc":1, "cs53":1, "cs6s":1, "csadec":1, "csair":1, "csbew":1, "csc86":1, "cscec":1, "cscoal":1, "cscsf":1, "cscyw":1, "cseyzx":1, "csgc365":1, "csgm168":1, "csrcsc":1, "cssmoban":1, "cssyzxx":1, "csvw":1, "csxnews":1, "csxww":1, "csytv":1, "cszx":1, "ct10000":1, "ct108":1, "ct597":1, "ctaoci":1, "cteaw":1, "cthnet":1, "cthy":1, "ctiforum":1, "ctqcp":1, "ctrip":1, "ctsho":1, "cttsd":1, "ctule":1, "ctxyw":1, "cubead":1, "cuctv":1, "cug2313":1, "cunan":1, "cuncun8":1, "cuplayer":1, "custeel":1, "cut35":1, "cutv":1, "cwan":1, "cwddd":1, "cwestc":1, "cwiif":1, "cwmining":1, "cwroom":1, "cxhr":1, "cxwl":1, "cy":1, "cy580":1, "cy887":1, "cycnet":1, "cycoo":1, "cyol":1, "cz2sc":1, "cz365":1, "czbanbantong":1, "czbtv":1, "czepb":1, "czfcw":1, "czgjj":1, "czjpw":1, "czrrw":1, "czrxw":1, "czsrc":1, "cztour":1, "cztv":1, "czvv":1, "czwlgy":1, "czxiu":1, "d1cm":1, "d1net":1, "d8wed":1, "d9soft":1, "daba":1, "dachanet":1, "dachenglaw":1, "dachengnet":1, "dadipedia":1, "dadiwang":1, "dadou":1, "dadunet":1, "dafengso":1, "dagancn":1, "dagangcheng":1, "daguantao":1, "dahainan":1, "dahangzhou":1, "dahecc":1, "dahei":1, "daheshui":1, "dahoutao":1, "dahua8":1, "dahuawang":1, "dai911":1, "daibini":1, "daikuane":1, "dailyqd":1, "daisonghua":1, "daixiaomi":1, "daiyanbao":1, "dajiabao":1, "dajianet":1, "dajiazhao":1, "dajie":1, "damuzzz":1, "dance365":1, "dance888":1, "dang3":1, "dangdang":1, "dangjian":1, "danzhaowang":1, "daodao":1, "daogoubang":1, "daoguo":1, "daoxila":1, "dapu":1, "daqi":1, "daqsoft":1, "darczpw":1, "darongcheng":1, "darryring":1, "davinfo":1, "daxiangrc":1, "dayoo":1, "dayou123":1, "dazhaiwang":1, "dazhe5":1, "dazhenzimiao":1, "dazhongemiao":1, "dazhonghr":1, "dazhoushan":1, "dazibo":1, "dazpin":1, "db-nw":1, "db2car":1, "dbank":1, "dbgtzx":1, "dbtc888":1, "dc-cn":1, "dcqedu":1, "dcxnews":1, "ddcsh":1, "ddmap":1, "ddmapimg":1, "ddooo":1, "ddvip":1, "decwhy":1, "dedecms":1, "demage":1, "demaxiya":1, "denghuo":1, "deppon":1, "derenbs":1, "desktx":1, "destoon":1, "deyang5":1, "deyi":1, "deyiso":1, "dezhi":1, "dezhoudaily":1, "dfcfw":1, "dfdaily":1, "dfedu":1, "dfhdw":1, "dfhon":1, "dflgnc":1, "dfshw":1, "dfsrcw":1, "dg114":1, "dg121":1, "dgchangan":1, "dginfo":1, "dgjyw":1, "dglongmei":1, "dgqjj":1, "dgtx888":1, "dgyuanyi":1, "dgzzm":1, "dhgate":1, "dhifi":1, "diandian":1, "diandong":1, "dianji007":1, "dianli114":1, "dianpifa":1, "dianping":1, "dianpingba":1, "dianyuan":1, "diaochapai":1, "diaoyanbao":1, "diaoyu":1, "diaoyu123":1, "diaoyu520":1, "diaoyula":1, "diaoyuwang":1, "diaoyuweng":1, "dichan":1, "dili360":1, "dinghuaren":1, "dingsite":1, "dingxinhui":1, "dingyx":1, "dionly":1, "diqiuw":1, "dir001":1, "discoverhongkong":1, "discoversources":1, "discuz":1, "ditan360":1, "ditan369":1, "diyicai":1, "diyifanwen":1, "diyishijian":1, "diyiyou":1, "diypda":1, "diytrade":1, "djcb71":1, "djjw":1, "djkk":1, "djob":1, "djxww":1, "djye":1, "dld":1, "dldcdn":1, "dledu":1, "dlflavor":1, "dlgaoji":1, "dllake":1, "dlmonita":1, "dlxww":1, "dlysgh":1, "dm-rc":1, "dm0571":1, "dm456":1, "dmansg":1, "dmcbd":1, "dmzj":1, "dn1234":1, "dnwx":1, "doc88":1, "docer":1, "docin":1, "dodonew":1, "dog126":1, "doido":1, "dolcn":1, "donews":1, "dongao":1, "dongbeiol":1, "dongeedu":1, "dongfang":1, "dongfang8":1, "dongfangnews":1, "dongnanshan":1, "dongtangad":1, "dooland":1, "doomii":1, "doorhr":1, "dospy":1, "dostor":1, "douban":1, "douguo":1, "douluodalu123":1, "douxie":1, "dowater":1, "downhot":1, "downxia":1, "dpfile":1, "dpm360":1, "dq247":1, "dqccc":1, "dqcccc":1, "dqdaily":1, "dqguo":1, "dqiong":1, "dqjob88":1, "dqzc":1, "dreams-travel":1, "drivergenius":1, "driversdown":1, "ds123456":1, "ds599":1, "dsdod":1, "dsfdc":1, "dshigao":1, "dshmama":1, "dshrc":1, "dsrlzy":1, "dtcoalmine":1, "dtxmw":1, "duapp":1, "duba":1, "duitang":1, "dukuai":1, "duojiaochong":1, "duokan":1, "duomai":1, "duomeiren":1, "duomi":1, "duoshitong":1, "duoshuo":1, "duote":1, "duouoo":1, "duowan":1, "duoyewu":1, "duoyi":1, "dushicn":1, "dushifang":1, "duwenzhang":1, "duxiu":1, "dv37":1, "dwstatic":1, "dx-job":1, "dxda":1, "dxddcx":1, "dxszxy":1, "dxy":1, "dxycdn":1, "dxzx":1, "dycars":1, "dyfcw":1, "dyhjw":1, "dyplk":1, "dyqc":1, "dz-z":1, "dz1982":1, "dz666":1, "dzcnc":1, "dzmjw":1, "dzqiche":1, "dzrbs":1, "dzsc":1, "dzsm":1, "dzsrcw":1, "dzszb":1, "dzwindows":1, "dzwww":1, "dzxss":1, "dzyysb":1, "e-baojian":1, "e-chinalife":1, "e-jjj":1, "e-tiller":1, "e0514":1, "e0575":1, "e0734":1, "e118114":1, "e21cn":1, "e2say":1, "e521":1, "e8online":1, "ea3w":1, "ea56":1, "eabax":1, "eachnet":1, "eahui":1, "earthedu":1, "easdo":1, "easiu":1, "eastday":1, "easthome":1, "eastmoney":1, "eastsilver":1, "eastsoo":1, "easyreadtech":1, "easysofthome":1, "eayuan":1, "eb80":1, "ebay":1, "ebdoor":1, "ebigear":1, "ebioe":1, "ebnew":1, "ebrun":1, "ebscn":1, "ebseek":1, "ec51":1, "ec818":1, "ecaidian":1, "ecaihr":1, "eccn":1, "ecduo":1, "ecgoods":1, "echiele":1, "echinagov":1, "ecitic":1, "ecjyj":1, "ecp888":1, "ecppn":1, "ecqun":1, "ecshop":1, "edai":1, "edancheng":1, "edaocha":1, "ede35":1, "edu-hb":1, "edu-js":1, "edu03":1, "edu24ol":1, "edu5a":1, "edu80":1, "edu84":1, "edu88":1, "eduease":1, "eduego":1, "eduglobal":1, "edushi":1, "edutt":1, "eduu":1, "eduuu":1, "eduwo":1, "eduwsw":1, "eduyf":1, "edzx":1, "eechina":1, "eefocus":1, "eehu":1, "eeju":1, "eelly":1, "eeyy":1, "ef-school":1, "ef360":1, "efwang":1, "egou":1, "ehaier":1, "ehomeday":1, "ehometu":1, "ehr99":1, "ehvacr":1, "eicbs":1, "eiiq":1, "eis100":1, "eit0571":1, "ejee":1, "ejiacn":1, "ejier":1, "eju":1, "ek6":1, "ekaidian":1, "elanw":1, "eldawa":1, "ele001":1, "elecfans":1, "elecinfo":1, "elexcon":1, "eliushi":1, "ellechina":1, "ellll":1, "elong":1, "els001":1, "emarbox":1, "eminiye":1, "ems517":1, "emtx":1, "en51":1, "ename":1, "enbowang":1, "enchantshow":1, "enetedu":1, "eng24":1, "enguo":1, "enkj":1, "enshijob":1, "enterdesk":1, "eoaoo":1, "eoeandroid":1, "eoemarket":1, "eoffcn":1, "eooioo":1, "eooqoo":1, "eoouoo":1, "eoozoo":1, "eoriver":1, "epanshi":1, "epday":1, "epjob88":1, "epjyw":1, "epweike":1, "epzhaopin":1, "eq-hl":1, "eqyn":1, "erdsrsrc":1, "erongtu":1, "ersoso":1, "erya100":1, "escdn":1, "esfimg":1, "eshow365":1, "eshufa":1, "esljt":1, "esnai":1, "esongyuan":1, "esun88":1, "etao":1, "etest8":1, "ethainan":1, "etiantian":1, "etlong":1, "etoubao":1, "etpass":1, "etuan":1, "ev123":1, "evergrande":1, "everychina":1, "ewmzs":1, "ewoka":1, "eworldship":1, "ewsos":1, "ewteacher":1, "exam8":1, "examda":1, "examw":1, "exbulk":1, "exchangecn":1, "expo-china":1, "expoon":1, "expoooo":1, "expotu":1, "expowindow":1, "ey99":1, "eyaobei":1, "eyejoyful":1, "eyizhang":1, "eyou":1, "eyuyao":1, "eywedu":1, "ezhiol":1, "eztxw":1, "f139":1, "f1688":1, "f537":1, "fa-today":1, "fa597":1, "fabang":1, "fabao365":1, "fabu114":1, "fad123":1, "fafaku":1, "faidns":1, "faisco":1, "fala114":1, "faloo":1, "famen88":1, "famens":1, "famensi":1, "fancai":1, "fandian":1, "fang":1, "fang33":1, "fang99":1, "fangbx":1, "fangchan":1, "fangdd":1, "fangdr":1, "fanging":1, "fangjia":1, "fangjiadp":1, "fanglimei":1, "fangtan007":1, "fangte":1, "fangtoo":1, "fangxiaoer":1, "fangyi":1, "fangyou":1, "fangyuan365":1, "fangzhanhui":1, "fangzhur":1, "fanhuan":1, "fanlihe":1, "fanqieleyuan":1, "fanxuefei":1, "fanyizhijia":1, "far2000":1, "fastcdn":1, "favolist":1, "faw-mazda":1, "faw-vw":1, "fawan":1, "fblife":1, "fc0633":1, "fc571":1, "fccs":1, "fcg360":1, "fcgsnews":1, "fcjjr":1, "fcjob88":1, "fcrc114":1, "fcw6":1, "fcyhw":1, "fd597":1, "fdc0760":1, "fdgzw":1, "fdjzu":1, "fdkjgz":1, "feedsky":1, "feelcars":1, "feeyo":1, "fei580":1, "feicuiwuyu":1, "feiku":1, "feiliu":1, "feipin":1, "fenfen":1, "feng":1, "fengbao":1, "fengj":1, "fengjing":1, "fengniao":1, "fengone":1, "fengsung":1, "fengyunzhibo":1, "fenlei168":1, "fenlei265":1, "fenleidao":1, "fensui168":1, "ffpic":1, "fhlczy":1, "fhlyou":1, "fillseo":1, "fimmu":1, "financeun":1, "findlawimg":1, "findzd":1, "fj-hitech":1, "fj007":1, "fj987":1, "fjber":1, "fjcha":1, "fjcns":1, "fjcoop":1, "fjdaily":1, "fjdh":1, "fjhrss":1, "fjhun":1, "fjii":1, "fjjcjy":1, "fjjdrcw":1, "fjlh":1, "fjmwjx":1, "fjnacc":1, "fjnet":1, "fjpta":1, "fjsen":1, "fjsjs":1, "fjta":1, "fjtn":1, "fjzlym":1, "fjzol":1, "fl001":1, "fl78":1, "flash1890":1, "flashget":1, "floorb2b":1, "flower188":1, "flssw":1, "fltrp":1, "flyxg":1, "fnkq":1, "fnrcw":1, "fobshanghai":1, "focuschina":1, "folkw":1, "foloda":1, "foodjx":1, "foods1":1, "foodszs":1, "foojoo":1, "for68":1, "forbeschina":1, "fotile":1, "fpdisplay":1, "fpgadev":1, "fpwap":1, "fq597":1, "fractal-technology":1, "freehead":1, "frkq":1, "fs121":1, "fs31":1, "fsclzs":1, "fsdew":1, "fsjoy":1, "fslsg":1, "fstcb":1, "ft22":1, "ftchinese":1, "ftuan":1, "fujianec":1, "fujianrc":1, "fuliao":1, "fuling":1, "fuliyuwang":1, "fumubang":1, "fumuhui":1, "funfungolf":1, "funshion":1, "funxoo":1, "funxun":1, "fupiaopifa":1, "fuqiangw":1, "fuqing2006":1, "furniturebbs":1, "furnituremedia":1, "fututa":1, "fuwuce":1, "fuyoubank":1, "fwzjia":1, "fx168":1, "fx678":1, "fxxz":1, "fybxw":1, "fysns":1, "fytcw":1, "fz2sc":1, "fz597":1, "fzbm":1, "fzengine":1, "fzfzjx":1, "fzg360":1, "fzpig":1, "fzsjob":1, "g1080":1, "g12e":1, "g207":1, "g2b2b":1, "g7430":1, "gacmotor":1, "gai001":1, "gaibar":1, "gaitu":1, "gaizhui":1, "game080":1, "gamecomb":1, "gamersky":1, "gamesville":1, "gametea":1, "gamfe":1, "ganhuoche":1, "ganji":1, "ganjiangrc":1, "ganjistatic1":1, "ganniu":1, "ganwan":1, "ganxianw":1, "ganzhe":1, "gao7":1, "gao8dou":1, "gaodun":1, "gaofen":1, "gaokao":1, "gaokao789":1, "gaoqingren":1, "gaosiedu":1, "gaosubao":1, "gaoxiaola":1, "gaozhouba":1, "garply":1, "gasgoo":1, "gashr":1, "gasshow":1, "gather-sc":1, "gcchina":1, "gd-china":1, "gd-fishmarket":1, "gdcct":1, "gdcoop":1, "gdcrj":1, "gdedu123":1, "gdhbsh":1, "gdmm":1, "gdrc":1, "gdswine":1, "gdsxxw":1, "gdttc":1, "gdtuoling":1, "gdwca":1, "gdwest":1, "gdzj8":1, "geely":1, "geihui":1, "gemdale":1, "geo-show":1, "gesep":1, "gexing":1, "gezila":1, "gfan":1, "gfsns":1, "gg-art":1, "gg-led":1, "ggcj":1, "ghjie":1, "gift12345":1, "gitom":1, "gk-z":1, "gk99":1, "gkao":1, "gkong":1, "gkstk":1, "gkxx":1, "gkzhan":1, "glasseasy":1, "glasshr":1, "gldjc":1, "glinfo":1, "global-trade-center":1, "globalchemmade":1, "globalhardwares":1, "globalmarket":1, "globeimmi":1, "globrand":1, "glofang":1, "glrcw":1, "glyrc":1, "glzhuang":1, "gm86":1, "gmseb":1, "gndaily":1, "go007":1, "go2map":1, "go823":1, "go9939":1, "godsignal":1, "goepe":1, "gogocn":1, "gojiaju":1, "gold600":1, "gold678":1, "goldenholiday":1, "goldin168":1, "gong123":1, "gongcai":1, "gongchang":1, "gongjiao":1, "gongjiaomi":1, "gongkaocn":1, "gongkong":1, "gongyishibao":1, "gongzhou":1, "gonren":1, "goo2sc":1, "goocun":1, "goodbaby":1, "goodkejian":1, "google-analytics":1, "googleadservices":1, "googlesyndication":1, "googletagmanager":1, "googvv":1, "gooioo":1, "gooniu":1, "gooooal":1, "goootech":1, "gopinyin":1, "gopuu":1, "gotohz":1, "gotoip1":1, "gotoip2":1, "gotoip3":1, "gotoip4":1, "gotoip55":1, "gotoningbo":1, "gouchezixun":1, "goufang":1, "goufw":1, "gougou":1, "goulew":1, "goumin":1, "goupuzi":1, "goushe":1, "gouwuke":1, "gowulong":1, "gqren":1, "gqsoso":1, "grchina":1, "greatwuyi":1, "greentimes":1, "greenxf":1, "grfyw":1, "gridsources":1, "gridsumdissector":1, "grinm":1, "gsdpw":1, "gsftw":1, "gsheimeiren":1, "gsjb":1, "gsrcw":1, "gsstgs":1, "gstarcad":1, "gsxpz":1, "gtgqw":1, "gtimg":1, "gtja":1, "gtobal":1, "gtuu":1, "gtxh":1, "gtzyb":1, "guahao":1, "guan5":1, "guanchengrc":1, "guang":1, "guangdongrc":1, "guangguiyin":1, "guangshuishi":1, "guangxirc":1, "guanjiatu":1, "guanjoy":1, "guanyun520":1, "guanzhongrc":1, "gucheng":1, "gucn":1, "guhantai":1, "guidaye":1, "guidechem":1, "guiguanrc":1, "guijirc":1, "guijob":1, "guilincits":1, "guilinhd":1, "guilinlife":1, "guimi":1, "guiqianrc":1, "gulove":1, "guocar":1, "guolairen":1, "guolv":1, "guolvol":1, "guoshi":1, "guoxue":1, "gushiw":1, "gusuwang":1, "gutx":1, "guuoo":1, "guwanw":1, "guzhiwang":1, "gwyoo":1, "gwyou":1, "gwypxw":1, "gx123":1, "gx12301":1, "gx211":1, "gxbys":1, "gxcity":1, "gxfdcw":1, "gxfpw":1, "gxgymsxx":1, "gxhc365":1, "gxhouse":1, "gxhzxw":1, "gxjtaq":1, "gxnongmu":1, "gxorg":1, "gxqcw":1, "gxqxj":1, "gxrc":1, "gxrcw":1, "gxsky":1, "gxwj315":1, "gxybw":1, "gxylnews":1, "gy365":1, "gyxnews":1, "gyxuan":1, "gz91":1, "gzbsnc":1, "gzccps":1, "gzcofc":1, "gzcol":1, "gzcpc":1, "gzdfxw":1, "gzdsw":1, "gzedu":1, "gzh":1, "gzjuncheng":1, "gzlight":1, "gzmama":1, "gzmanny":1, "gzmtr":1, "gznet":1, "gzqnzyz":1, "gzred":1, "gzrencai":1, "gzrisingsteel":1, "gzsedu":1, "gzstv":1, "gzszk":1, "gztcdj":1, "gztv":1, "gzucard":1, "gzxuelun":1, "gzymj":1, "gzza":1, "h0591":1, "h2o-china":1, "habctv":1, "hackhome":1, "hackp":1, "hahaertong":1, "haibao":1, "haichaninfo":1, "haier":1, "haihuahr":1, "haihui1688":1, "haimanfeisi":1, "hainanfz":1, "haining":1, "hanbinwang":1, "hancheng":1, "handu":1, "hangye8":1, "hanweb":1, "hanxingtv":1, "hao0469":1, "hao123":1, "hao123img":1, "hao224":1, "hao315":1, "haob2b":1, "haobangni":1, "haochi123":1, "haochimei":1, "haodai":1, "haodf":1, "haodingdan":1, "haodou":1, "haofjj":1, "haofung":1, "haofz":1, "haogongzhang":1, "haojiudaili":1, "haoleyou":1, "haoliv":1, "haomzl":1, "haopoo":1, "haorc":1, "haote":1, "haotijin":1, "haotui":1, "haowangpu":1, "haowm":1, "haowu":1, "haoyisheng":1, "haoyiwujin":1, "haoyun56":1, "haozhanhui":1, "haozhou":1, "haozu":1, "haozuojia":1, "happypingpang":1, "harbin123":1, "harrenmedianetwork":1, "hatcy":1, "havehome":1, "haxiu":1, "hb30":1, "hbaas":1, "hbdjk":1, "hbeinews":1, "hbfxh":1, "hbfys":1, "hbfzb":1, "hbgajg":1, "hbgrain":1, "hbgsl":1, "hbhscpa":1, "hbjie":1, "hbjob88":1, "hbksw":1, "hbliti":1, "hbqc":1, "hbqnb":1, "hbrc":1, "hbshgzx":1, "hbsjz110":1, "hbsztv":1, "hbtcw":1, "hbtycp":1, "hbxfmp":1, "hbxmad":1, "hbydsy":1, "hbyidu":1, "hbzhan":1, "hbzkw":1, "hbzkwl":1, "hc360":1, "hc433":1, "hctvnet":1, "hcxww":1, "hd512":1, "hdeso":1, "hdmnw":1, "hdslb":1, "hdzp":1, "hdzxw":1, "he-nan":1, "healthoo":1, "healthr":1, "hebcoop":1, "hebdx":1, "hebeicdc":1, "hebeihr":1, "hebiw":1, "hebradio":1, "hebtv":1, "hefeiat":1, "hehu":1, "heiguang":1, "heima8":1, "hejun":1, "hekouqu":1, "hellozb":1, "hellozx":1, "henan100":1, "henanci":1, "henanedu":1, "henankf":1, "henanrc":1, "henantiyu":1, "henanweiye":1, "hengqian":1, "hengqijy":1, "hengyan":1, "hepan":1, "hepost":1, "hepuwang":1, "herostart":1, "herschina":1, "hersp":1, "hetda":1, "hexieshaanxi":1, "hexindai":1, "hexun":1, "heyuan163":1, "heze369":1, "hezejob":1, "hezeribao":1, "hf2sc":1, "hf365":1, "hfhouse":1, "hfk99":1, "hftogo":1, "hfwenshi":1, "hg-z":1, "hgjob":1, "hgqzj":1, "hgrencai":1, "hgzrc":1, "hh010":1, "hhczy":1, "hhhrs":1, "hhhtnews":1, "hhk365":1, "hhkao":1, "hhncp":1, "hhtravel":1, "hi0734":1, "hi1718":1, "hi2000":1, "hi772":1, "hiao":1, "hiapk":1, "hicct":1, "hicdma":1, "hichina":1, "hilizi":1, "himfr":1, "himinsy":1, "hipiao":1, "hirede":1, "hisense":1, "hisupplier":1, "hitao":1, "hjenglish":1, "hk515":1, "hkcts":1, "hkproperty":1, "hktdc":1, "hkxtzgl":1, "hldbtv":1, "hldnews":1, "hlgnet":1, "hljjc":1, "hljrtvu":1, "hljtcp":1, "hljtv":1, "hlpolice":1, "hly":1, "hlybar":1, "hmaow":1, "hme01":1, "hmecw":1, "hmlan":1, "hmw163":1, "hmw365":1, "hn12333":1, "hn987":1, "hnair":1, "hncdc":1, "hnchj":1, "hncoop":1, "hncpu":1, "hncsmjzs":1, "hnditu":1, "hnemap":1, "hnfgdj":1, "hnfxh":1, "hnfzb":1, "hngbjy":1, "hngfjy":1, "hnhjw":1, "hnhw":1, "hnhyrc":1, "hnkejixueyuan":1, "hnloushi":1, "hnmama":1, "hnnypp":1, "hnradio":1, "hnrc":1, "hnrcsc":1, "hnrczpw":1, "hnrsks":1, "hnsncb":1, "hnticai":1, "hntjtjw":1, "hnwencheng":1, "hnxxw666":1, "hnxxwzz":1, "hnxysteel":1, "hnyxhb":1, "hnyymd":1, "hnzhuang":1, "hnzqw":1, "hnzscl":1, "hnzssj":1, "hnzyzx":1, "hogesoft":1, "holdfine":1, "home77":1, "home898":1, "homeinns":1, "homekoo":1, "hometex114":1, "hometexnet":1, "homeun":1, "hong-men":1, "hongdamold":1, "hongen":1, "honghuowang":1, "hongjingedu":1, "hongmen":1, "hongniang":1, "hongshu":1, "hongtu":1, "hongxiu":1, "hongzao114":1, "hoopchina":1, "hooshong":1, "horsehr":1, "hosocorp":1, "hot178":1, "houcar":1, "houdao":1, "house365":1, "house371":1, "house666":1, "househr":1, "househy":1, "housoo":1, "houstyle":1, "houxue":1, "howbuy":1, "howjia":1, "howzhi":1, "hq-ielts":1, "hq0564":1, "hq88":1, "hqbpc":1, "hqcr":1, "hqdoor":1, "hqew":1, "hqjhw":1, "hql8":1, "hqlsw":1, "hqmianshou":1, "hqqrc":1, "hqsxy":1, "hqthw":1, "hqyj":1, "hr006":1, "hr025":1, "hr0571":1, "hr0660":1, "hr0751":1, "hr0752":1, "hr0753":1, "hr0755":1, "hr0759":1, "hr0766":1, "hr0898":1, "hr1000":1, "hr33":1, "hr369":1, "hr762":1, "hr763":1, "hrbanlv":1, "hrbit":1, "hrbjsd":1, "hrbuilds":1, "hrhorse":1, "hrpin":1, "hs-cn":1, "hsdcw":1, "hsdhq":1, "hshan":1, "hsjyxx":1, "hsmhw":1, "hsrcw":1, "hssanli":1, "hsw365":1, "hsx99":1, "htexam":1, "htinns":1, "htkaoyan":1, "htsec":1, "httpcn":1, "htyuqi":1, "hua":1, "huaban":1, "huabian":1, "huacolor":1, "huadaofengye":1, "huagu":1, "huaian":1, "huaibei163":1, "huainet":1, "huaiyangnews":1, "huajiemba":1, "huajx":1, "hualady":1, "hualongxiang":1, "huamanche":1, "huamu":1, "huanancn":1, "huangru":1, "huangye88":1, "huangyesoso":1, "huanjinrong":1, "huanq":1, "huanqiu":1, "huantu":1, "huapinwang":1, "huash":1, "huashihongfeng":1, "huasmaple":1, "huatai":1, "huatu":1, "huaue":1, "huawei":1, "huaxi100":1, "huaxia":1, "huaxirc":1, "huayin114":1, "huayin520":1, "huayuanjuye":1, "huayuejob":1, "huazhile":1, "huazhu":1, "hubai":1, "hubeirc":1, "hudong":1, "hugd":1, "hui800":1, "huibo":1, "huibojob":1, "huiche":1, "huiche100":1, "huilaimai":1, "huilan":1, "huimaiche":1, "huishangbao":1, "huishi365":1, "huishoushang":1, "huisou":1, "huitong123":1, "huitu":1, "huixiaodai":1, "huizcn":1, "huizhuang":1, "hujiang":1, "huluxia":1, "hunangy":1, "hunanpta":1, "hunanrc":1, "hunantv":1, "hunbys":1, "hunchunnet":1, "hunlimama":1, "hunqingren":1, "hunt007":1, "hunuo":1, "huobi":1, "huoche":1, "huochepiao":1, "huochepu":1, "huodongjia":1, "huodongxing":1, "huohu123":1, "huolinhe":1, "huoshannews":1, "huowan":1, "huoxue":1, "hupu":1, "hushi114":1, "huway":1, "huxiu":1, "hvbao":1, "hwlai":1, "hx-car":1, "hx116":1, "hx2car":1, "hx95":1, "hxen":1, "hxfzzx":1, "hxrc":1, "hxsd":1, "hxuu":1, "hxyjw":1, "hy123":1, "hydcd":1, "hyedu":1, "hyjzw":1, "hyqcw":1, "hyrmw":1, "hytechan":1, "hywlm":1, "hyxfhq":1, "hyxnews":1, "hyxww":1, "hz321":1, "hz66":1, "hzagro":1, "hzbj":1, "hzbx":1, "hzcnb":1, "hzcnc":1, "hzcskj":1, "hzgjj":1, "hzhr":1, "hzhuti":1, "hzins":1, "hzland":1, "hzlp":1, "hzlw":1, "hzmba":1, "hznews":1, "hznzcn":1, "hzqx":1, "hzrc":1, "hzshw":1, "hzsmesc":1, "hztbc":1, "hzti":1, "hzutc":1, "hzwmw":1, "i-jjj":1, "i-okla":1, "i0456":1, "i1515":1, "i8i8i8":1, "i9133":1, "iacmall":1, "iask":1, "ib-china":1, "ibamaol":1, "ibanggo":1, "ibangkf":1, "ibeifeng":1, "ibicn":1, "ibm":1, "ibusdb":1, "ic10":1, "ic37":1, "ic98":1, "icafe8":1, "icaile":1, "icbuy":1, "ichengzi":1, "ichtf":1, "iciba":1, "icis-china":1, "icjyw":1, "icpcw":1, "icson":1, "icxo":1, "icycn":1, "idcquan":1, "idcspy":1, "idongzhi":1, "idooor":1, "idqqimg":1, "idting":1, "ieche":1, "iecity":1, "iecworld":1, "iefang":1, "iezhan":1, "ifeng":1, "ifenghui":1, "ifengimg":1, "ifensi":1, "iflying":1, "ifsino":1, "igeak":1, "ihaiyan":1, "ihanhua":1, "ihei5":1, "iheima":1, "ihome99":1, "ihongyou":1, "ihoome":1, "ihuatong":1, "ii010":1, "iianews":1, "iiigo":1, "iiijjj":1, "iiyi":1, "ijia360":1, "ijiatv":1, "ijie":1, "ijinshan":1, "ijjnews":1, "ijxjj":1, "ik123":1, "ikaka":1, "ikanchai":1, "ikandian":1, "ikang":1, "ikuyy":1, "ilangwen":1, "ileehoo":1, "ilongre":1, "ilqut":1, "im286":1, "imanhua":1, "imeimama":1, "img.cctvpic":1, "imglefeng":1, "iminte":1, "imlvyou":1, "imosi":1, "imqq":1, "imrworldwide":1, "in-en":1, "in189":1, "inabr":1, "inanle":1, "inchedao":1, "indexedu":1, "inezha":1, "infiworks":1, "infobidding":1, "infohc":1, "infzm":1, "inhe":1, "inlishui":1, "inshion":1, "intel":1, "intertid":1, "inuobi":1, "investjilin":1, "invitemedia":1, "ioeoo":1, "iooeoo":1, "ioomoo":1, "iooqoo":1, "iooroo":1, "ioroo":1, "iouoo":1, "iouter":1, "iowoo":1, "ip138":1, "ip1840":1, "ipadown":1, "ipchina":1, "ipetfair":1, "ipincai":1, "ipingshan":1, "ipinyou":1, "iqilu":1, "iqingren":1, "iqiyi":1, "iraoping":1, "irrichina":1, "irs01":1, "isanmen":1, "ishaanxi":1, "ishangman":1, "ishowx":1, "isoucai":1, "it168":1, "it7t":1, "itbulo":1, "itchaguan":1, "itdcw":1, "iteye":1, "ithome":1, "itmop":1, "itoptrip":1, "itravelqq":1, "itshai":1, "itxinwen":1, "ivsky":1, "iwebchoice":1, "iwhr":1, "ixiaoma":1, "ixiawan":1, "ixumu":1, "iyaxin":1, "iyaya":1, "iyizhai":1, "iyuanhong":1, "iyxwzx":1, "iyzx":1, "izaojiao":1, "izda":1, "izdap":1, "izdinix":1, "izhufu":1, "izhuti":1, "j1":1, "j2014":1, "ja001":1, "jaecdn":1, "jaedu":1, "jarhu":1, "jaz581":1, "jb1000":1, "jbdown":1, "jbzyw":1, "jc114":1, "jc35":1, "jc68":1, "jc85":1, "jcbao":1, "jcbctv":1, "jcoal":1, "jcqzw":1, "jcrb":1, "jcrcw":1, "jcsychina":1, "jctrans":1, "jcwcn":1, "jcz001":1, "jczxb":1, "jd":1, "jd-cg":1, "jd100":1, "jdbbx":1, "jdcjsr":1, "jdgod":1, "jdjob88":1, "jdsc35":1, "jdw001":1, "jdypgxw":1, "jdzj":1, "jdzol":1, "jewelchina":1, "jfcaifu":1, "jfdaily":1, "jfgphzs":1, "jfinfo":1, "jgaoxiao":1, "jgcx56":1, "jgjob88":1, "jgjw":1, "jgsdaily":1, "jgxxw":1, "jh2sc":1, "jh597":1, "jhbezs":1, "jhcxl":1, "jhhssy":1, "jia":1, "jia360":1, "jia400":1, "jiafangyun":1, "jiagle":1, "jiahesj":1, "jiahesuji":1, "jiajiao114":1, "jiajiao400":1, "jiajiaoban":1, "jiaju":1, "jiaju001":1, "jiajumi":1, "jiajuol":1, "jiakao":1, "jiameng":1, "jiameng001":1, "jiameng8":1, "jiancai":1, "jiancaizhanhui":1, "jiangduoduo":1, "jiangdurencai":1, "jianghairc":1, "jianghuairc":1, "jiangmin":1, "jiangnews":1, "jiangshi":1, "jiangsurc":1, "jiangxirc":1, "jiankang":1, "jiankangzu":1, "jianke":1, "jiankongbao":1, "jianli-sky":1, "jianshe99":1, "jianso":1, "jianzhi8":1, "jianzhiabc":1, "jiaomai":1, "jiaoman":1, "jiaotanqihuo":1, "jiaoyimao":1, "jiaoyulei":1, "jiathis":1, "jiatx":1, "jiaxingsteel":1, "jiayouqiche":1, "jiayuan":1, "jiazhao":1, "jiazhuang6":1, "jichuang360":1, "jide123":1, "jidi":1, "jidongrc":1, "jiemeng8":1, "jiepei":1, "jietusoft":1, "jieyitong668":1, "jifang360":1, "jiiaa":1, "jijidi":1, "jike":1, "jilaibao":1, "jilaidai":1, "jilinfc":1, "jilinrc":1, "jilinzhaopin":1, "jin14":1, "jinbifun":1, "jincin":1, "jinfr":1, "jinfuzi":1, "jingchurc":1, "jingdianwan":1, "jingjiawang":1, "jingjinnews":1, "jingjishi":1, "jingpinke":1, "jingwei":1, "jingwumeishi":1, "jingyanbus":1, "jingzheng":1, "jingzhengu":1, "jinhejs":1, "jinhongmc":1, "jinhuatv":1, "jinjianginns":1, "jinkaoedu":1, "jinku":1, "jinlaoxi":1, "jinmajia":1, "jinmenrc":1, "jinpu":1, "jinquktv":1, "jinshangrc":1, "jinti":1, "jinxiang114":1, "jinyuan2008":1, "jitimes":1, "jitongtianxia":1, "jiu6":1, "jiudianzhaopin":1, "jiukuaiyou":1, "jiuxian":1, "jiuzhouxue":1, "jiwu":1, "jixinet":1, "jiyifa":1, "jiyuantour":1, "jj20":1, "jj831":1, "jjjaaa":1, "jjjgame":1, "jjjlll":1, "jjlxpz":1, "jjmmw":1, "jjsrcw":1, "jjtang":1, "jjwn":1, "jjzg365":1, "jk51":1, "jldledu":1, "jlhcszx":1, "jlit365":1, "jljbbs":1, "jljob88":1, "jllnzz":1, "jlmhk":1, "jlonline":1, "jlsgjt":1, "jlshumei":1, "jlsjswm":1, "jlsmm":1, "jluzh":1, "jlxtdz":1, "jlzkb":1, "jm-tour":1, "jmlr":1, "jmrb":1, "jmstatic":1, "jn001":1, "jnesc":1, "jnflsky":1, "jnlandao":1, "jnlc":1, "jnmama":1, "jnmc":1, "jnmte":1, "jnnc":1, "job-sky":1, "job0663":1, "job0768":1, "job100":1, "job10000":1, "job1001":1, "job120":1, "job128":1, "job168":1, "job2299":1, "job250":1, "job256":1, "job36":1, "job369":1, "job5156":1, "job592":1, "job616":1, "job700":1, "job8001":1, "job910":1, "job9151":1, "job98":1, "job9981":1, "job9988":1, "jobcn":1, "jobeast":1, "jobems":1, "jobfn":1, "jobgao":1, "jobgojob":1, "jobhb":1, "jobpin":1, "jobui":1, "jobuy":1, "jobvvv":1, "jobyun":1, "joeoo":1, "joingoo":1, "joobbe":1, "joojcc":1, "joojzz":1, "joouoo":1, "jooxoo":1, "joyes":1, "joyme":1, "joyo":1, "joyyang":1, "jpkjz":1, "jq-school":1, "jqw":1, "jr18":1, "jrb2b":1, "jrj":1, "jrlpw":1, "jrpengze":1, "jrrsq":1, "jrshx":1, "jrsmw":1, "jrw100":1, "jrxjnet":1, "jryghq":1, "jrzj":1, "jrzp":1, "js-lottery":1, "js0573":1, "js118114":1, "js119":1, "js811":1, "js95598":1, "jsbc":1, "jscj":1, "jsenews":1, "jsgc168":1, "jshealth":1, "jshyrsrc":1, "jshze":1, "jsjrc":1, "jslottery":1, "jsly001":1, "jsnxs":1, "jsqw":1, "jsrc":1, "jsrsrc":1, "jsrxny":1, "jssdw":1, "jssjys":1, "jstedu":1, "jstour":1, "jstv":1, "jswmw":1, "jsxlmed":1, "jsxmws":1, "jsyks":1, "jsymyjs":1, "jsypj":1, "jszhaobiao":1, "jszjsx":1, "jt122":1, "jtbole":1, "jthysh":1, "jtimg":1, "jtlhome":1, "jtxxol":1, "jtyjy":1, "ju51":1, "juanpi":1, "juchang":1, "juedui100":1, "juesheng":1, "jufengshang":1, "juhaof":1, "jujiaonet":1, "jumei":1, "junbaike":1, "junjiajob":1, "junshishu":1, "junzhe":1, "junzhuan":1, "junzimen":1, "juooo":1, "juoooo":1, "juren":1, "jutuw":1, "juwai":1, "juxia":1, "juyouxi":1, "juyuan":1, "jx09":1, "jx612345":1, "jxazjd":1, "jxcnt":1, "jxcua":1, "jxdcw":1, "jxdiguo":1, "jxdyf":1, "jxedt":1, "jxedu":1, "jxfdc":1, "jxfgts":1, "jxga":1, "jxgdw":1, "jxgsgl":1, "jxgydc":1, "jxhcw":1, "jxhi":1, "jxjas":1, "jxjatv":1, "jxjjx":1, "jxjtxy":1, "jxjyzy":1, "jxlcx":1, "jxllt":1, "jxltw":1, "jxpaw":1, "jxpf":1, "jxpta":1, "jxrcw":1, "jxrencai":1, "jxrsrc":1, "jxrtv":1, "jxsedu":1, "jxslsd":1, "jxsoso":1, "jxsrr":1, "jxt189":1, "jxteacher":1, "jxtourism":1, "jxtutechan":1, "jxwei":1, "jxycw":1, "jygycp":1, "jyrcjl":1, "jysedu":1, "jyyuan":1, "jz0574":1, "jz5u":1, "jzb":1, "jzcool":1, "jzjob007":1, "jznj":1, "jzpt":1, "jzqyw":1, "jzrb":1, "jzshsc":1, "jzvip":1, "jzwcom":1, "jzyx":1, "k0410":1, "k18":1, "k191":1, "k366":1, "k369":1, "k76":1, "k8008":1, "k8k9":1, "kaba365":1, "kadaiw":1, "kadang":1, "kaichewan":1, "kaifu":1, "kaifu7":1, "kaiwind":1, "kaixin001":1, "kakaba":1, "kameng":1, "kanbox":1, "kandeng":1, "kandian":1, "kanglu":1, "kangq":1, "kangzhi":1, "kanimg":1, "kankan":1, "kankanews":1, "kanshu":1, "kanzhun":1, "kaopu001":1, "kaoshi110":1, "kaoyan":1, "kaoyanfuxi":1, "kaoyee":1, "kaozc":1, "kazakhsoft":1, "kb-medical":1, "kds100":1, "kdslife":1, "kedou":1, "keepc":1, "kehou":1, "kejiqi":1, "kejixun":1, "kekenet":1, "kenfor":1, "keqii":1, "kesion":1, "keyunzhan":1, "kfsfu":1, "kfw001":1, "kimiss":1, "kingdee":1, "kingsoft":1, "kisdee":1, "kkeye":1, "kkk5":1, "kkkedu":1, "kmguolv":1, "kms88":1, "kmxsedu":1, "knowsky":1, "koeoo":1, "kongfz":1, "kongzhong":1, "konka":1, "kooaoo":1, "koofang":1, "koolearn":1, "koovoo":1, "koowo":1, "kooxoo":1, "koubei":1, "koudai":1, "kq81":1, "kq88":1, "kqs114":1, "kqzp":1, "ks116":1, "ks5u":1, "ksbao":1, "ksbbs":1, "kskino":1, "ktvcity":1, "ktxp":1, "ku6":1, "ku6cdn":1, "ku6img":1, "ku6vms":1, "kuai8":1, "kuaidi100":1, "kuaiji":1, "kuailezu":1, "kuailiyu":1, "kuaiyoujia":1, "kuakao":1, "kuche":1, "kufa88":1, "kugou":1, "kujiale":1, "kukuplay":1, "kunlun":1, "kunshanrc":1, "kuotu":1, "kuparts":1, "kuqyu":1, "kutj":1, "kutongji":1, "kuwan8":1, "kuyibu":1, "kuyiso":1, "kvov":1, "ky-akoya":1, "kyjia":1, "kyp":1, "kywmall":1, "kzhuang":1, "kzj365":1, "kzjdb":1, "l-zzz":1, "lacpj":1, "lady8844":1, "lafaso":1, "lagou":1, "laidianduo":1, "laidingba":1, "laifeng":1, "laijiuye":1, "laiwang":1, "lajmzs":1, "lamabang":1, "lamahui":1, "lan1001":1, "landai":1, "landchina":1, "landjs":1, "landtu":1, "lanfw":1, "langfly":1, "langtaojin":1, "lanhii":1, "lanou3g":1, "lanqi":1, "lanrentuku":1, "lanrenzhaofang":1, "lanrenzhijia":1, "lanshandichan":1, "lanyanwan":1, "laohu":1, "laoke":1, "laomoo":1, "laonanren":1, "laoqianzhuang":1, "laoren":1, "laser-chn":1, "laserfair":1, "lashou":1, "lashouimg":1, "lavago":1, "law-lib":1, "law-star":1, "law1818":1, "lawtimeimg":1, "lawyermr":1, "lawyerwq":1, "lazyren":1, "lbgoo":1, "lbx777":1, "lc-news":1, "lcfcw":1, "lchssy":1, "lcyx":1, "ldrczpw":1, "ldsshj":1, "leatherhr":1, "leazn":1, "lecai":1, "ledcac":1, "ledcax":1, "ledmmw":1, "ledth":1, "ledu":1, "ledwn":1, "lefeng":1, "leglek":1, "legolas-media":1, "legongchang":1, "lehecai":1, "leho":1, "leidian":1, "leiphone":1, "lejiaoyun":1, "lejj":1, "leju":1, "lejuju":1, "lengxiaohua":1, "lenovo":1, "lenovoqm":1, "leqiyou":1, "letao":1, "letfind":1, "letv":1, "letvcdn":1, "letvimg":1, "lexun":1, "leyoo":1, "leyou":1, "lezhi":1, "leziyou":1, "lfang":1, "lfkt":1, "lfxww":1, "lg":1, "lgmi":1, "lgrcsc":1, "lh36524":1, "li63":1, "liang360":1, "lianjia":1, "lianm":1, "liansuo":1, "liansuopinpai":1, "liantu":1, "liao1":1, "liaoing":1, "liaoshenrc":1, "liba":1, "lie-che":1, "liebiao":1, "liebo":1, "liecheng":1, "lieju":1, "liepin":1, "lierencai":1, "lietou":1, "lietou-static":1, "lieyou":1, "life139":1, "lifeyoyo":1, "lightget":1, "lightingchina":1, "lihaisheng":1, "linekong":1, "linezing":1, "linfangwang":1, "lingaoren":1, "lingnanrc":1, "lingshi":1, "lingtuan":1, "linjiang365":1, "link-future":1, "linkhx":1, "linkwan":1, "linuxdiyf":1, "linyiren":1, "liqucn":1, "lishi5":1, "lishifengyun":1, "litianbg":1, "liudu":1, "liuhe":1, "liuts":1, "liuxilife":1, "liuxue114":1, "liuxue360":1, "liuxue3600":1, "liuxue86":1, "liuxueca":1, "live754":1, "live800":1, "livnj":1, "liwai":1, "liwuyou":1, "liyezhongzhi":1, "liyi99":1, "lizi":1, "lj597":1, "ljforest":1, "ljspjm":1, "lkgame":1, "lldgd":1, "lllddd":1, "lltqc":1, "llvan":1, "llzg":1, "lm263":1, "lmbang":1, "lmdigi":1, "ln-rc":1, "ln2car":1, "ln632":1, "lndzz":1, "lnfisher":1, "lnlib":1, "lnpaw":1, "lnrsks":1, "lntvu":1, "lnzsks":1, "locoso":1, "lofter":1, "logclub":1, "logmein":1, "loho88":1, "lolbuku":1, "longchengrc":1, "longkangmiaomu":1, "longre":1, "longren":1, "longshangrc":1, "longtengcn":1, "longwenedu":1, "longzhouwan":1, "looedu":1, "loogoo":1, "loorin":1, "looyu":1, "looyuoms":1, "lotour":1, "louoo":1, "loupan":1, "lousw":1, "love169":1, "love21cn":1, "loveinhere":1, "loveliao":1, "lovingjob":1, "lp91":1, "lpb2b":1, "lpsrc":1, "lqjob88":1, "lqzp":1, "lrbaba":1, "lrswl":1, "ls666":1, "lsdag":1, "lsgzn":1, "lsnetlib":1, "lsrczpw":1, "lssdjt":1, "lssen":1, "lsszj":1, "lstcw":1, "lsw88":1, "lsyzzzz":1, "lszxyey":1, "luan163":1, "luaninfo":1, "luanren":1, "lubanu":1, "ludashi":1, "lufax":1, "lunwentianxia":1, "luoanguo":1, "luoherc":1, "luosi":1, "luoyuan597":1, "lure123":1, "lusongsong":1, "luwenwang":1, "luxtarget":1, "luzhou4":1, "lvhua":1, "lvlian5":1, "lvmama":1, "lvping":1, "lvse":1, "lvseba":1, "lvshou":1, "lvtu":1, "lvye":1, "lvyou114":1, "lvziyao":1, "lwcj":1, "lwedu":1, "lwhfishing":1, "lwhouse":1, "lwinfo":1, "lx0830":1, "lxdns":1, "lxtedu":1, "ly":1, "ly3506":1, "lycos":1, "lydfdz":1, "lyfcw":1, "lyfff":1, "lygbole":1, "lygczj":1, "lygmedia":1, "lygo":1, "lygrc":1, "lyhero":1, "lyielts":1, "lymffyjd":1, "lyqcw":1, "lyrcw":1, "lywww":1, "lywxww":1, "lywzc":1, "lzhuba":1, "lzlj":1, "lzsgaj":1, "m148":1, "m18":1, "m1905":1, "m3guo":1, "m598":1, "m6699":1, "machine35":1, "machine365":1, "machjobs":1, "made-in-china":1, "magedu":1, "mahua":1, "maichawang":1, "maidong100":1, "maifang":1, "maigoo":1, "maijipu":1, "maijx":1, "mainone":1, "maituan":1, "maiwaiwai":1, "maizufang":1, "makepolo":1, "malmam":1, "mamacn":1, "manggojia":1, "mangocity":1, "manmankan":1, "manyou":1, "manzuo":1, "mao114":1, "maomeilock":1, "maoren8":1, "maotiao":1, "maoyan":1, "maoyigu":1, "maoyiw":1, "maozhiwang":1, "map456":1, "mapabc":1, "mapbar":1, "marry5":1, "marry52":1, "marstv":1, "masamaso":1, "maslink":1, "mathtag":1, "mayi":1, "mayiw":1, "mayiyou":1, "mb5u":1, "mbachina":1, "mbahome":1, "mbalib":1, "mbaobao":1, "mbatrip":1, "mbscss":1, "mc-test":1, "mc1314":1, "mc870":1, "mcbaidu":1, "mcchina":1, "mcixi":1, "mcmqyc":1, "mdvoo":1, "meadin":1, "mechr":1, "med126":1, "med66":1, "medejob":1, "mediaplex":1, "mediav":1, "medic360":1, "medzpw":1, "meet99":1, "mei5w":1, "meidianwang":1, "meigui3":1, "meihongfeng":1, "meijing":1, "meijw":1, "meilele":1, "meilishuo":1, "meinv":1, "meinvjz":1, "meishanren":1, "meishichina":1, "meitantong":1, "meitanwang":1, "meitu":1, "meituan":1, "meiya":1, "meiyuanchun":1, "meizhou":1, "meizhouchina":1, "meizu":1, "memall360":1, "menkou":1, "menmian":1, "mepfair":1, "mercachina":1, "messebbs":1, "metalchina":1, "metaltechexpo":1, "metroer":1, "meyol":1, "mf08s":1, "mfdyy":1, "mfw365":1, "mgccjg":1, "mgknives":1, "mgshk":1, "mgyun":1, "mh28":1, "mhdz":1, "mhongfeng":1, "mi":1, "mianbao":1, "miaomudi":1, "miaotiao":1, "miaozhen":1, "micamika":1, "microad-cn":1, "microsoft":1, "midea":1, "miercn":1, "miliao":1, "mimimama":1, "mingche":1, "mingjian":1, "mingluji":1, "mingong123":1, "mingxing":1, "mingzhurc":1, "mining120":1, "mininghr":1, "minjiangrc":1, "mipang":1, "mirautomation":1, "misranim":1, "missyuan":1, "miui":1, "miyun360":1, "mizhe":1, "mjceo":1, "mjingpin":1, "mjjq":1, "mkzhan":1, "mlbuy":1, "mlt01":1, "mmall":1, "mmbang":1, "mmfj":1, "mmimm":1, "mmjyw":1, "mmrcw":1, "mmsfw":1, "mmstat":1, "mmstw":1, "mnkjxy":1, "mnpaw":1, "mnsfh":1, "mnwww":1, "mobao":1, "moejam":1, "mofang":1, "mofangge":1, "mogujie":1, "moke8":1, "momo35":1, "monfr":1, "monteamor":1, "monternet":1, "mookie1":1, "moonbasa":1, "mop":1, "morcato":1, "mosso":1, "motie":1, "motnt":1, "motorchina":1, "moukao":1, "mouldu":1, "moutaichina":1, "moxingwang":1, "moyiza":1, "mozillaonline":1, "mplife":1, "mr91":1, "msn":1, "mstxx":1, "mtime":1, "mtnets":1, "mtv123":1, "mtw001":1, "mumayi":1, "muniao":1, "muyee":1, "muyingjie":1, "muyingzhijia":1, "muzhiwan":1, "mw1950":1, "mx175":1, "mxwz":1, "my0511":1, "my0538":1, "my0792":1, "my0813":1, "my0832":1, "my399":1, "my3dparts":1, "my3w":1, "my4399":1, "my71":1, "myapp":1, "mybulkstock":1, "mybuxiu":1, "mybxg":1, "mycar168":1, "mychemjob":1, "mycimt":1, "mydown":1, "mydrivers":1, "myepjob":1, "myhard":1, "myjmw":1, "myjob":1, "mylegist":1, "mypethome":1, "mypharma":1, "myrice":1, "myrolan":1, "myshipjob":1, "myshuo":1, "mysipo":1, "mysteel":1, "mysteelcdn":1, "mysteelcms":1, "mysteelweekly":1, "mytophome":1, "mytv365":1, "myubbs":1, "myyouse":1, "myzhengxing":1, "mzedu":1, "mzrcw":1, "mzstatic":1, "mzwok":1, "mzyfz":1, "nahuo":1, "naliwan":1, "nanbuxc":1, "nandu":1, "nanjob":1, "nanningjie":1, "nanputuo":1, "nantaihu":1, "narkii":1, "narutom":1, "nb2car":1, "nba":1, "nbbltv":1, "nbch2sc":1, "nbcoop":1, "nbgjj":1, "nbjbsun":1, "nbjnzx":1, "nbqcrl":1, "nbradio":1, "nbwater":1, "nbyouth":1, "nc2sc":1, "ncdiy":1, "ncmgcc":1, "ncxww":1, "nd-medicine":1, "nd090":1, "nd2sc":1, "nd597":1, "nd999":1, "nddaily":1, "ndfang":1, "nduoa":1, "ne365":1, "ne51":1, "neeu":1, "neimengrc":1, "nengyuan":1, "nerjob":1, "nestcms":1, "net114":1, "netandtv":1, "netbian":1, "netease":1, "netor":1, "netqin":1, "netsun":1, "newft":1, "newhua":1, "newmaker":1, "newoo":1, "news18a":1, "newsccn":1, "newscnr":1, "newshainan":1, "newshuanan":1, "newsxc":1, "newsxy":1, "newsyc":1, "newzgc":1, "nfcmag":1, "nfrencai":1, "ngjy":1, "nh365":1, "nhaidu":1, "nhcsw":1, "nhjyw":1, "nhmgr":1, "nhshequ":1, "nhxxg":1, "nhzhaopin":1, "nhzj":1, "nianw":1, "night9":1, "nihaotw":1, "nihaowang":1, "nike17":1, "nimtt":1, "ningbochina":1, "ningboexport":1, "ninghai":1, "ninghaiauto":1, "ninxun":1, "nipic":1, "niua":1, "niuchengwang":1, "niutuku":1, "niuwan":1, "niuwz":1, "niwodai":1, "niwota":1, "nj110":1, "njhaiwai":1, "njltmp":1, "njmuseum":1, "njprice":1, "njrsrc":1, "njsjys":1, "njxjyw":1, "njycyj":1, "nkhxl":1, "nlxn":1, "nmgfic":1, "nmglabs":1, "nmgrc":1, "nmgzkj":1, "nmrcw":1, "nmsti":1, "nnhdqm":1, "nnjob":1, "nnn666":1, "nnwb":1, "nong828":1, "nongchengws":1, "nongji1688":1, "nongji360":1, "nongjx":1, "nongli":1, "nongmintv":1, "nongrisheng":1, "nongyao001":1, "nooeoo":1, "noojoo":1, "northtimes":1, "nowec":1, "nowscore":1, "np5":1, "np597":1, "npcka":1, "npckk":1, "npicp":1, "npjy":1, "npsxjy":1, "nrcce":1, "nrclady":1, "nrparking":1, "nsjy":1, "nsmovie":1, "nsoso":1, "nsw88":1, "nsy6":1, "ntalker":1, "ntccjy":1, "ntehs":1, "ntgjj":1, "ntjob88":1, "ntjoy":1, "ntlsxj":1, "ntup":1, "ntwenming":1, "nubb":1, "nuomi":1, "nurqut":1, "nvsheng":1, "nxbys":1, "nxedu":1, "nxfang":1, "ny1988":1, "ny3721":1, "ny688":1, "nyzpw":1, "nz165":1, "nz86":1, "nzczq":1, "nzjsw":1, "nzw-china":1, "o571":1, "oadz":1, "obolee":1, "oceanol":1, "oecr":1, "oeeee":1, "oemol":1, "oemresource":1, "offcn":1, "officese":1, "offifurniture":1, "ofuns":1, "ofweek":1, "ofzx":1, "oho168":1, "ohocn":1, "ohqly":1, "ohsx":1, "oicq88":1, "ok0559":1, "ok619":1, "okbuy":1, "okhqb":1, "oklx":1, "okmk":1, "okooo":1, "okyan":1, "ol-img":1, "olcdn":1, "older99":1, "ometal":1, "onccc":1, "one-all":1, "one101":1, "onekeyrom":1, "onlylady":1, "oodii":1, "oooggg":1, "ooopic":1, "operachina":1, "optaim":1, "or58":1, "oranpage":1, "oray":1, "ordosggzyjy":1, "orgcc":1, "orsoon":1, "ostudytour":1, "otcms":1, "oujiangrc":1, "ourbloom":1, "ourgame":1, "ourxun":1, "oussko":1, "outlets365":1, "ovodm":1, "ozhibao":1, "p-e-china":1, "p2p110":1, "p2p265":1, "p2pchina":1, "p2pfenhu":1, "p2pxing":1, "pahaoche":1, "paidai":1, "paipai":1, "paipaiimg":1, "paishoes":1, "paljw":1, "panduola":1, "panguso":1, "panjk":1, "paochefang":1, "paody":1, "paopaoku":1, "paoxue":1, "paratong":1, "paypal":1, "pazx888":1, "pc186":1, "pc3w":1, "pc51":1, "pc6":1, "pc841":1, "pcbeta":1, "pcpc521":1, "pcpop":1, "pcwl":1, "pcxxw":1, "pdhr":1, "pdsxww":1, "pe168":1, "peixun360":1, "peixun5":1, "peiyou":1, "pengchengrc":1, "pengfu":1, "pengke":1, "penglaiu":1, "pengpeng":1, "pengrc":1, "pengyou":1, "pengzerencai":1, "people258":1, "peoplerail":1, "pethr":1, "petzp":1, "pf168":1, "pf178":1, "pfwang":1, "pgpop":1, "ph66":1, "pharmjx":1, "phoenixtv":1, "php100":1, "phpchina":1, "phpwind":1, "piao":1, "piaodown":1, "piaoliang":1, "pimei":1, "pincai":1, "pinfengws":1, "pingan":1, "pinganfang":1, "pinganhd":1, "pingguolv":1, "pingshu8":1, "pingtan597":1, "pingtandao":1, "pingxiaow":1, "pinkecity":1, "pinla":1, "pinpai37":1, "pinshan":1, "pinyouc":1, "pinzhituan":1, "pipaw":1, "pixlr":1, "pizhou365":1, "pjtime":1, "pk38":1, "pkzx":1, "plxww":1, "pm91":1, "pnwww":1, "pnzpw":1, "pod100":1, "podinns":1, "poobuy":1, "pop-fashion":1, "pop136":1, "pop800":1, "popoho":1, "popwan":1, "powercdn":1, "ppaaol":1, "ppdai":1, "ppkao":1, "pplive":1, "pppaaa":1, "ppstream":1, "ppsxx":1, "pptv":1, "ppwan":1, "ppxmw":1, "ppzhan":1, "ppzhangui":1, "ppzuche":1, "prcedu":1, "prnasia":1, "psahz":1, "psbc":1, "pscjy":1, "psjia":1, "pstatp":1, "psychcn":1, "pszx":1, "pt597":1, "pt791":1, "ptacn":1, "ptbus":1, "ptdao":1, "ptjy":1, "ptlogin2.qq":1, "ptotour":1, "ptpcp":1, "puahome":1, "pubmatic":1, "puepu":1, "puercn":1, "puertea8":1, "puerteaking":1, "pumpbest":1, "pupuwang":1, "purchasingbbs":1, "pusa123":1, "pusa365":1, "putaomiaomu":1, "putclub":1, "puworld":1, "pvc123":1, "px020":1, "px0769":1, "px101":1, "px58":1, "px8":1, "pxrczpw":1, "py168":1, "pybxfc":1, "pybxrc":1, "pyinfo":1, "pyjia":1, "pyr6":1, "pyspajs":1, "pzoom":1, "pzsh":1, "pztuan":1, "pzzx":1, "q1":1, "qa114":1, "qbaobei":1, "qc188":1, "qc6":1, "qcloud":1, "qcoco":1, "qcrencai":1, "qctester":1, "qctsw":1, "qcw114":1, "qcwe":1, "qcwz8":1, "qdbeian":1, "qdfymr":1, "qdmm":1, "qdnrc":1, "qdnrm":1, "qdoulu":1, "qdshuangjie":1, "qdwenxue":1, "qdzkb":1, "qeecn":1, "qeejoo":1, "qegee":1, "qeqeqe":1, "qfang":1, "qfzp":1, "qgjxb":1, "qhccw":1, "qhdcc":1, "qhdnews":1, "qhdxw":1, "qhgate":1, "qhimg":1, "qhinfo":1, "qhjgj":1, "qhldzb":1, "qhlly":1, "qhmed":1, "qhnews":1, "qhongfeng":1, "qhsfgl":1, "qhsrcw":1, "qhswdx":1, "qhsxnqcz":1, "qhyedu":1, "qhzk":1, "qi-che":1, "qiancheng100":1, "qianggen":1, "qianhuaweb":1, "qianjia":1, "qianjiangjob":1, "qianlijob":1, "qianlima":1, "qianlong":1, "qianlongnews":1, "qianluntianxia":1, "qiannianzhicheng":1, "qianqian":1, "qianqishou":1, "qianqiuren":1, "qianxs":1, "qianyan001":1, "qianyecao":1, "qianzhan":1, "qianzhengdaiban":1, "qiaobutang":1, "qiaopinche":1, "qiaxing":1, "qibosoft":1, "qicaispace":1, "qiche-china":1, "qichetong":1, "qicou":1, "qidian":1, "qieta":1, "qihoo":1, "qihuiwang":1, "qikan":1, "qilibali":1, "qimbulak":1, "qinbei":1, "qincai":1, "qincaitou":1, "qingdaomedia":1, "qingdaonews":1, "qingdaozaixian":1, "qinglanart":1, "qingrenw":1, "qiniu":1, "qiniucdn":1, "qiniudn":1, "qinqiner":1, "qiongzhourc":1, "qipaoxian":1, "qipei001":1, "qipei8":1, "qipeiren":1, "qipeizhan":1, "qire123":1, "qishanwang":1, "qiuhongfeng":1, "qiushibaike":1, "qiushibang":1, "qiuxian":1, "qiyefabu":1, "qiyegu":1, "qiyeku":1, "qiyexxw":1, "qiyi":1, "qiyipic":1, "qiyouwang":1, "qiyu360":1, "qiyue":1, "qizuang":1, "qjrc":1, "qjy168":1, "qkfang":1, "qlgaokao":1, "qlmlxg":1, "qlnew":1, "qlrc":1, "qlswu":1, "qlteacher":1, "qlzpw":1, "qm120":1, "qm988":1, "qmango":1, "qmyue":1, "qnsb":1, "qooic":1, "qoomoo":1, "qopoo":1, "qouoo":1, "qp110":1, "qphome":1, "qq":1, "qq163":1, "qq190":1, "qqbaobao":1, "qqbiaoqing":1, "qqcyl":1, "qqdcw":1, "qqershou":1, "qqfangke":1, "qqgexingqianming":1, "qqhryz":1, "qqkqw":1, "qqma":1, "qqmail":1, "qqpifu":1, "qqqggg":1, "qqqooo":1, "qqtn":1, "qqtouxiang":1, "qqtu8":1, "qqwm2014":1, "qqwwr":1, "qqyy":1, "qqzssl":1, "qqzyw":1, "qstatic":1, "qsztc":1, "qtour":1, "qu-zhou":1, "qu114":1, "qu247":1, "qu97":1, "quanguoyoubian":1, "quanji":1, "quanjing":1, "quanjingke":1, "quanjinglian":1, "quanmama":1, "quanranchina":1, "quantserve":1, "quanwangtz":1, "quanzhi":1, "qudao":1, "qudao168":1, "qudong":1, "qufeizhou":1, "qufenlei":1, "quhua":1, "qulv":1, "quna":1, "qunar":1, "qunarzz":1, "qutouzi":1, "quweiwu":1, "quxiu":1, "quzhouwang":1, "qvod":1, "qw168":1, "qwjian":1, "qx121":1, "qx162":1, "qx818":1, "qxnzx":1, "qxw18":1, "qxyou":1, "qy6":1, "qycn":1, "qyer":1, "qyjpzx":1, "qymgc":1, "qyzyw":1, "qz123":1, "qz597":1, "qz828":1, "qzbbs":1, "qzcbs":1, "qzhxw":1, "qznews360":1, "qzone":1, "qzrcw":1, "qzrczpw":1, "qzshangwu":1, "qzwb":1, "radiotj":1, "rajyj":1, "rangeretech":1, "raorao":1, "rayp":1, "rc114":1, "rc365":1, "rc3721":1, "rc392":1, "rc536":1, "rc929":1, "rclawyer":1, "rcwlm":1, "rcxx":1, "readnovel":1, "real":1, "recycle366":1, "redidai":1, "redocn":1, "regishome":1, "rencai5":1, "rencaijob":1, "rencailu":1, "renren":1, "renren-inc":1, "renrentou":1, "renrenzhe":1, "renrzx":1, "renwen":1, "renzheng":1, "rfchina":1, "rhxj":1, "risfond":1, "rm0510":1, "rmburl":1, "roadoor":1, "robam":1, "roboo":1, "robot-china":1, "rohlan":1, "rong360":1, "rongjie360":1, "rongshidai":1, "rongshuxia":1, "rootinhenan":1, "roowei":1, "rpjiaoyi":1, "rrimg":1, "rrs":1, "rsqzs":1, "ruan8":1, "ruanmei":1, "rubberhr":1, "rubcn":1, "rugao35":1, "ruian":1, "ruiwen":1, "ruixinlong":1, "runsky":1, "rzrsrc":1, "s-msn":1, "s0593":1, "s163":1, "s1979":1, "sa26":1, "safe10000":1, "safecome":1, "saicgroup":1, "saifutong":1, "saige":1, "saimogroup":1, "saiqu":1, "samsung":1, "sanginn":1, "sanguosha":1, "sanhaostreet":1, "sankewang":1, "sanqan":1, "sanqin":1, "sanqindaily":1, "santudi":1, "sanyatour":1, "sanygroup":1, "sanyhi":1, "sanyujixie":1, "sasa123":1, "sc157":1, "sc2p":1, "sc7":1, "sc987":1, "scaleb2b":1, "scanscout":1, "scanv":1, "scbid":1, "scbsm":1, "sccnn":1, "scdms":1, "scgckj":1, "scgdj":1, "scgrain":1, "school51":1, "schoolmy":1, "sci99":1, "scnjnews":1, "scorecardresearch":1, "scpolicec":1, "scpspa":1, "scrc168":1, "screenb2b":1, "sctv":1, "scxcxj":1, "scxfxj":1, "scxlc":1, "scxttj":1, "scxyes":1, "sczfcg":1, "sczytv":1, "sd001":1, "sdcheshi":1, "sdchina":1, "sdcoop":1, "sddjw":1, "sdenews":1, "sdfdc":1, "sdfqmm":1, "sdg-china":1, "sdgw":1, "sdhltsp":1, "sdhssy":1, "sdjnnews":1, "sdjob":1, "sdjtcx":1, "sdlib":1, "sdnycxzy":1, "sdo":1, "sdongnews":1, "sdrc315":1, "sdticai":1, "sdwenhua":1, "sdxhce":1, "sdxiaohongxing":1, "seafang":1, "seburi":1, "see-say":1, "seecq":1, "seedit":1, "seekic":1, "seezy":1, "segahome":1, "segmentfault":1, "sendong":1, "senmit":1, "sensafish":1, "sensorshome":1, "seowhy":1, "serving-sys":1, "sewworld":1, "sf-express":1, "sfacg":1, "sflep":1, "sg-rc":1, "sg169":1, "sg560":1, "sgamer":1, "sgrcw":1, "sgzjkj":1, "sh-telue":1, "sh1188":1, "sh51766":1, "sh7":1, "sh91":1, "sha-steel":1, "shache":1, "shafa":1, "shanchengrc":1, "shandalu":1, "shandongbeihai":1, "shandongrc":1, "shang360":1, "shangbw":1, "shangdianp":1, "shangdu":1, "shanghaigm":1, "shanghaining":1, "shanghairc":1, "shangmuguoji":1, "shangpin":1, "shangpusou":1, "shangxiang":1, "shangxueba":1, "shangyici":1, "shanxirc":1, "shaoyoo":1, "shaqing":1, "shbtob":1, "shcaoan":1, "shccig":1, "shchehang":1, "shcnws":1, "shdazao":1, "shduer":1, "she120":1, "shechipin365":1, "shedunews":1, "shejiben":1, "shejiqun":1, "shejis":1, "shenchuang":1, "shendu":1, "shenghuadg":1, "shengpay":1, "shengpet":1, "shengyidi":1, "shengyuanguolv":1, "shenzhenair":1, "shenzhenhr":1, "shexiannet":1, "sheying8":1, "shgao":1, "shgjj":1, "shhbm":1, "shhkws":1, "shholip":1, "shibaili":1, "shidz":1, "shifenghk":1, "shihuahr":1, "shijiemil":1, "shilehui":1, "shilijiuxiang":1, "shiliunet":1, "shionry":1, "shipin588":1, "shipinzhuchi":1, "shippingchina":1, "shiwan":1, "shiyouhr":1, "shjmnc":1, "shjtaq":1, "shkss":1, "shlicang":1, "shlkjdyxgs":1, "shmcws":1, "shmds-edu":1, "shmet":1, "shmmw":1, "shoeshr":1, "shonsh":1, "shouduhr":1, "shoudurc":1, "shoudurx":1, "shouji":1, "shouliwang":1, "shouyao8":1, "shouyou":1, "shouyou520":1, "shouyoubus":1, "shouyoucdn":1, "shouyoutv":1, "show160":1, "showhua":1, "showji":1, "shrongtai":1, "shsti":1, "shsunedu":1, "shuame":1, "shucai001":1, "shufa":1, "shuguocn":1, "shuhai":1, "shuichan51":1, "shuigongye":1, "shuiguo":1, "shuiniaoticket":1, "shuiw114":1, "shunwang":1, "shuobao":1, "shuren100":1, "shushi100":1, "shuzixiaoyuan":1, "shwsdp":1, "shxbe":1, "shxdx":1, "shyywz":1, "si114":1, "sichuanrc":1, "sidelianghang":1, "sihongbbs":1, "siilu":1, "sijihf":1, "siliaojixie":1, "simwe":1, "sina":1, "sinaapp":1, "sinaedge":1, "sinaimg":1, "sinajs":1, "singbon":1, "sinmv":1, "sino-gas":1, "sino-manager":1, "sinocars":1, "sinochem":1, "sinochemoil":1, "sinoef":1, "sinohydro":1, "sinolub":1, "sinopec":1, "sinopecgroup":1, "sinopharm":1, "sinopipenet":1, "sinosig":1, "sinosteel":1, "sinotf":1, "sinotrans":1, "sinotrans-csc":1, "sirenji":1, "sisdown":1, "sissiok":1, "siyuefeng":1, "sj998":1, "sjapk":1, "sjdfgl":1, "sjfzxm":1, "sjjob88":1, "sjjy0738":1, "sjtinfo":1, "sjwg":1, "sjwj":1, "sjwyx":1, "sjxyx":1, "sjzcity":1, "sjzland":1, "sjzonline":1, "sjzyxh":1, "skinpp":1, "sksnc":1, "skxox":1, "skycn":1, "skyworth":1, "slaili":1, "sljob88":1, "sljyj":1, "slrbs":1, "slstm":1, "sm160":1, "sm597":1, "smartjx":1, "smecq":1, "smejs":1, "smestar":1, "smforestry":1, "smhzs":1, "smrcw":1, "smswike":1, "smvtc":1, "smwrc":1, "smzy":1, "snail":1, "snda":1, "sndhr":1, "sneac":1, "snedu":1, "snfox":1, "snjt":1, "snrtv":1, "snsyedu":1, "snupg":1, "snyu":1, "snzhao":1, "so":1, "soautos":1, "socang":1, "soche8":1, "sodao":1, "sofang":1, "soft515":1, "soft6":1, "soft711":1, "softbar":1, "sogou":1, "sogoucdn":1, "sogua":1, "sohu":1, "sohusce":1, "sojike":1, "sojump":1, "soku":1, "solarbe":1, "somenmian":1, "sonhoo":1, "soocang":1, "sooker":1, "sooopin":1, "sooshong":1, "sootoo":1, "sooxue":1, "soozhu":1, "soperson":1, "sortdoor":1, "soso":1, "sososteel":1, "soubaoad":1, "soucai":1, "souchebang":1, "soufun":1, "soufunimg":1, "soupei360":1, "soupu":1, "souqian":1, "southcn":1, "southmoney":1, "soutudi":1, "souxuexiao":1, "sowang":1, "soxsok":1, "soyuli":1, "sozhen":1, "sp0312":1, "spacechina":1, "spcce":1, "spdl":1, "speiyou":1, "spjixie":1, "spjobhr":1, "spjxcn":1, "sportscn":1, "springtour":1, "spsb114":1, "spzs":1, "sq1996":1, "sqzg":1, "srcdd":1, "srtong":1, "srxww":1, "srzc":1, "ss256":1, "sscmwl":1, "ssfun":1, "ssjzw":1, "sslibrary":1, "ssqzj":1, "ssrcsc":1, "ssreader":1, "sssggg":1, "sssjhw":1, "sssuuu":1, "ssswh":1, "sswoo":1, "st001":1, "st5":1, "standardcn":1, "starbaby":1, "starlott":1, "staticsdo":1, "stcn":1, "stdaily":1, "steelphone":1, "stnts":1, "stockstar":1, "stone365":1, "stonebuy":1, "stonemsn":1, "stonesm":1, "stonexp":1, "strong-imm":1, "strong-study":1, "studentboss":1, "studydao":1, "studyems":1, "studyez":1, "studyget":1, "studyie":1, "studyma":1, "studynl":1, "studysg":1, "suaee":1, "suanpi":1, "subaonet":1, "sucaitianxia":1, "sudasuta":1, "suizhoujie":1, "sulyxin":1, "sun0758":1, "sun0769":1, "sunily":1, "suning":1, "sunmen":1, "sunnychina":1, "sunplusedu":1, "sunrise-china":1, "sunsirs":1, "sunstu":1, "sunyeabiz":1, "suohoo":1, "supei":1, "susong51":1, "sutoo":1, "suwurc":1, "suxiege":1, "suyuedu":1, "suzhourc":1, "svisa":1, "swjoy":1, "swkong":1, "swwenshi":1, "sx597":1, "sxac":1, "sxbjedu":1, "sxcoal":1, "sxdygbjy":1, "sxfsw":1, "sxfyxh":1, "sxjzwb":1, "sxkp":1, "sxmtxs":1, "sxncb":1, "sxpmg":1, "sxpta":1, "sxrb":1, "sxrtv":1, "sxshealth":1, "sxsme":1, "sxsznews":1, "sxtdrn":1, "sxtour":1, "sxtvs":1, "sxvieworld":1, "sxworker":1, "sxxfqjyj":1, "sxxl":1, "sxycpc":1, "sxycrb":1, "sxyhq":1, "sxykmgy":1, "sy3688":1, "syb365":1, "sybang":1, "syflowers":1, "syingrc":1, "syiptv":1, "syj":1, "syjiancai":1, "symama":1, "syqnr":1, "syrcsc":1, "syrczpw":1, "sytlw":1, "syxwnet":1, "syyx":1, "sz121":1, "szaibite":1, "szbaws":1, "szcchy56":1, "szdagao":1, "szdfsk":1, "szdwyy":1, "szedu":1, "szehs":1, "szfa":1, "szfcol":1, "szffmr":1, "szfthp":1, "szhfdq":1, "szhk":1, "szhome":1, "szhua":1, "szhufu":1, "szjc8":1, "szlyw12306":1, "szmall":1, "szmama":1, "szmj":1, "szmolds":1, "sznews":1, "szooo":1, "szpxb":1, "szpxe":1, "szqcw":1, "szsanshang":1, "szsmw":1, "szsnews":1, "sztjyy":1, "szwudao":1, "szyc":1, "t0001":1, "t0376":1, "t139":1, "t262":1, "t55":1, "t960":1, "tahjlg":1, "tahongyuan":1, "taian":1, "taihainet":1, "taihexian":1, "taikang":1, "taiqiedu":1, "taishansong":1, "taizhou":1, "takungpao":1, "talyys":1, "tangdou":1, "tangjiu":1, "tangongye":1, "tantuw":1, "tanx":1, "tao123":1, "taobao":1, "taobaocdn":1, "taoche":1, "taoche100":1, "taoci":1, "taoci163":1, "taocijob":1, "taodake":1, "taofang":1, "taofen8":1, "taohuren":1, "taojindi":1, "taojinji":1, "taoke":1, "taoktv":1, "taolv365":1, "taopic":1, "taoren100":1, "taoshouyou":1, "taotaocar":1, "taowo2sc":1, "taoxiao":1, "taoxie":1, "taoxue":1, "taoxuexiao":1, "tapebuy":1, "tarkett1872":1, "tasjpf":1, "taskcn":1, "tatamr":1, "tatazx":1, "tatbsb":1, "taxfls":1, "tayffdb":1, "tbscache":1, "tcdai":1, "tcgimg":1, "tcl":1, "tcpjw":1, "tcrcsc":1, "tcrczpw":1, "tdfcw":1, "tdimg":1, "tdycr":1, "tdycw":1, "tdzyw":1, "te6":1, "tea160":1, "tea846":1, "teachercn":1, "teauo":1, "tech-food":1, "techan":1, "techanzhan":1, "teeqee":1, "telecomhr":1, "tencent":1, "tencentmind":1, "tenpay":1, "tentrue":1, "tesehunan":1, "testrust":1, "tex68":1, "texu1":1, "tezgc":1, "tezhongzhuangbei":1, "tfol":1, "tfysw":1, "tgbus":1, "tgnet":1, "the9":1, "thebeijingnews":1, "thethirdmedia":1, "thmz":1, "tianan-cyber":1, "tiancity":1, "tiandaoedu":1, "tianjihr":1, "tianjimedia":1, "tianjinrc":1, "tianjinwe":1, "tianqi":1, "tianshannet":1, "tianshanrc":1, "tiantian":1, "tianxia70":1, "tianyablog":1, "tianyaui":1, "tianyuimg":1, "tiaohao":1, "tibet3":1, "tibetcn":1, "tibetcul":1, "tibetinfor":1, "tiekuangshi":1, "tielingcn":1, "tietuku":1, "tieyou":1, "tigtag":1, "timedg":1, "tingbook":1, "tingroom":1, "titan24":1, "tjbhnews":1, "tjfic":1, "tjkx":1, "tjmama":1, "tjmsgk":1, "tjxqjy":1, "tjysyjs":1, "tl100":1, "tmall":1, "tmhtour":1, "tmjob88":1, "tmsf":1, "tmtpost":1, "to8to":1, "tobaccochina":1, "tobosu":1, "tochgo":1, "todayonhistory":1, "togoo":1, "toioo":1, "tom":1, "tom365":1, "tom61":1, "tomdurrie":1, "tompda":1, "tongbai8":1, "tongbu":1, "tongde":1, "tongleilive":1, "tongliaowang":1, "tonglingjob":1, "tonglukuaijian":1, "tongrenshi":1, "tongxue8":1, "tongyu800":1, "tongzhuo100":1, "tonong":1, "toobiao":1, "toobm":1, "toocle":1, "toofloor":1, "toojj":1, "toolsky":1, "tooopen":1, "tootour":1, "topfo":1, "topnews9":1, "topsage":1, "topu":1, "topzj":1, "tordax":1, "totob":1, "totocn":1, "touclick":1, "tourunion":1, "tourzj":1, "toutiao":1, "touzhijia":1, "toybaba":1, "toysbaba":1, "toysgu":1, "tozao":1, "tpooo":1, "tprtc":1, "tpzj":1, "tqedu":1, "tqkaoyan":1, "tqmba":1, "tqmpacc":1, "tqznedu":1, "trade2cn":1, "tranbbs":1, "travelsky":1, "tremormedia":1, "trip8080":1, "tripbaba":1, "trjcn":1, "trmhw":1, "trustexporter":1, "tryine":1, "trylist":1, "tsingming":1, "tsqyxxw":1, "tsrcw":1, "tswybjgs":1, "tt-ly":1, "tt0760":1, "tt268":1, "tteb":1, "tthonghuo":1, "ttkdex":1, "ttmam":1, "ttmeishi":1, "ttmn":1, "ttpet":1, "ttplayer":1, "ttpod":1, "ttteee":1, "ttyl5":1, "ttys5":1, "ttzcw":1, "tu50":1, "tuan800":1, "tuanche":1, "tuanimg":1, "tuanjiebao":1, "tuanweihui":1, "tuboshu":1, "tuchw":1, "tudinet":1, "tudou":1, "tudouui":1, "tugao":1, "tui18":1, "tuicool":1, "tuitui99":1, "tujia":1, "tuku":1, "tulaoshi":1, "tuliu":1, "tulvzu":1, "tumanduo":1, "tuniu":1, "tuniucdn":1, "tunliu588":1, "tuofubao":1, "tuohuangzu":1, "tupianzj":1, "tutechanw":1, "tutu66":1, "tuwan":1, "tv189":1, "tvhf":1, "tvhuan":1, "tvscn":1, "tvsou":1, "twwtn":1, "tx96345":1, "txdai":1, "txjly":1, "txooo":1, "txssw":1, "txtbbs":1, "txwb":1, "txwm":1, "ty360":1, "tybaba":1, "tyhr":1, "tylvyouw":1, "tz0852":1, "tz121":1, "tz1288":1, "tz2car":1, "tz911":1, "tz94":1, "tzcz":1, "tzfdc":1, "tzhr":1, "tzjob":1, "tzkd":1, "tzrc":1, "tzrl":1, "tzzfcg":1, "tzzp":1, "u009":1, "u0762":1, "u17":1, "u69cn":1, "u88":1, "u8k8":1, "u9time":1, "u9yoyo":1, "uc108":1, "uc129":1, "uctrac":1, "uehtml":1, "uemap":1, "ufangw":1, "uggd":1, "uhaidao":1, "uhenan":1, "uimaker":1, "uisdc":1, "ujob138":1, "ujob360":1, "ukecy":1, "ule":1, "ulinix":1, "ulunix":1, "umiwi":1, "un188":1, "unibao":1, "uninf":1, "unionli":1, "unionpay":1, "university-hr":1, "unjs":1, "unpcn":1, "uoeoo":1, "uoko":1, "uooqoo":1, "uouojk":1, "up360":1, "upaidui":1, "upaiyun":1, "ups":1, "upyun":1, "usbseries":1, "useso":1, "usportnews":1, "usteel":1, "utourworld":1, "uu2car":1, "uu38":1, "uu7c":1, "uueasy":1, "uusee":1, "uutuu":1, "uuu9":1, "uuufun":1, "uuxoo":1, "uuyoyo":1, "uuzhufu":1, "uuzu":1, "uwan":1, "uycar":1, "uycnr":1, "uydj":1, "uzai":1, "uzaicdn":1, "uzzf":1, "v2ex":1, "v312":1, "v3gp":1, "value500":1, "vancl":1, "vanclimg":1, "vanke":1, "vchangyi":1, "vcooline":1, "vdolady":1, "veerchina":1, "veg-china":1, "verycd":1, "verydz":1, "vhostgo":1, "vhuaqiao":1, "vibmro":1, "vicovico":1, "vikecn":1, "vip":1, "vip800":1, "vipcn":1, "vipshop":1, "viptijian":1, "vipyl":1, "visionunion":1, "visitgd":1, "visitsz":1, "vista123":1, "vivijk":1, "vizu":1, "vjia":1, "vlongbiz":1, "vmall":1, "vmovier":1, "vobao":1, "vodjk":1, "vooec":1, "vooroo":1, "vrbeing":1, "vsharing":1, "vsuch":1, "vvjob":1, "vvvdj":1, "vx":1, "vxinyou":1, "w7000":1, "w707":1, "wa8688":1, "waaku":1, "wabuw":1, "wadongxi":1, "wahawang":1, "waheaven":1, "waihuo":1, "waiwaitu":1, "waiyu8":1, "wallstreetcn":1, "wan":1, "wandodo":1, "wandoujia":1, "wangdai3":1, "wangdaibaike":1, "wangdaibang":1, "wangdaibangshou":1, "wangdaicaifu":1, "wangdaidp":1, "wangdaiguancha":1, "wangdaiqianyan":1, "wangdaisky":1, "wangdaitiandi":1, "wangdaiwuyou":1, "wangdaizhijia":1, "wangdaizhinan":1, "wanggou":1, "wanggou86":1, "wangjiags":1, "wangjiajg":1, "wangjinlou":1, "wangjiu":1, "wangpiao":1, "wangqi":1, "wangtu":1, "wanguan":1, "wangye":1, "wangyouhu":1, "wanjidao":1, "wanjingchina":1, "wanku":1, "wanlitong":1, "wanmei":1, "wanmeimr":1, "wansecheng":1, "wanxf":1, "wanxia":1, "wanyouxi7":1, "wanyx":1, "wanzhoujob":1, "wapurl":1, "warchina":1, "warcraftchina":1, "watchstor":1, "waterchina":1, "wbshsc":1, "wbtt315":1, "wcnimg":1, "wcsrcw":1, "wcwang":1, "wdj168":1, "wdji":1, "wdjyzx":1, "wdsjz":1, "wdzx":1, "wealink":1, "weamax":1, "weathercn":1, "web3389":1, "web4008":1, "webjx":1, "webpowerchina":1, "webterren":1, "webuuo":1, "webxgame":1, "wechatnet":1, "wed139":1, "wedba":1, "wedsoso":1, "wehefei":1, "weibo":1, "weicaifu":1, "weilanhaian":1, "weilanliuxue":1, "weimob":1, "weiningnews":1, "weinisi":1, "weiphone":1, "weixiaodian":1, "weizhangjilu":1, "weizhangwang":1, "weizhuangxiu":1, "weke":1, "weleve":1, "wemvp":1, "wendu":1, "wenjingjiaoyu":1, "wenjuan":1, "wenlingrc":1, "wenshizhai":1, "wenwuchina":1, "wenxue24":1, "wenyoutai":1, "wenzhouglasses":1, "wenzifanyi":1, "wesmp":1, "west263":1, "wf777":1, "wfbbs":1, "wff168":1, "wfjyxxg":1, "wfrsks":1, "wh3351":1, "whatchina":1, "whblct":1, "whcic":1, "whctv":1, "whedu21":1, "whhouse":1, "whicu":1, "whjm":1, "whjuren":1, "whlsgzn":1, "whqyw":1, "whrhkj":1, "whshangceng":1, "whwd":1, "whwz":1, "wifun":1, "wihu":1, "win007":1, "win7china":1, "win8china":1, "wincn":1, "windchn":1, "windows7en":1, "wine9":1, "winenice":1, "wines-info":1, "wingwit":1, "winhometex":1, "winshang":1, "winupon":1, "winxuan":1, "wishdown":1, "wj001":1, "wjdaily":1, "wjnin":1, "wjshw":1, "wkepu":1, "wkimg":1, "wlgyy":1, "wlkst":1, "wlmq":1, "wlmqwb":1, "wlool":1, "wlstock":1, "wlwcn":1, "wm927":1, "wmordos":1, "wmzhe":1, "wnrczpw":1, "wnwb":1, "wnxwzx":1, "wo116114":1, "wodingche":1, "wofang":1, "wofangwang":1, "woiyu":1, "wojubl":1, "wokanfang":1, "wokeji":1, "wokoko":1, "wolai":1, "womai":1, "woman91":1, "womenofchina":1, "woniu":1, "wood-china":1, "wood168":1, "wooshoes":1, "workec":1, "world-metal":1, "world-stone":1, "worldhm":1, "worldscrap":1, "worlduc":1, "wowchina":1, "woyaogexing":1, "woyewan":1, "woying":1, "woyouguanjia":1, "wpxap":1, "wrating":1, "wsbedu":1, "wsbynews":1, "wsche":1, "wshang":1, "wshangyun":1, "wsloan":1, "wsmhw":1, "wsqsgo":1, "wsxq":1, "wtdianlan":1, "wto9000":1, "wtt365":1, "wudang360":1, "wudao":1, "wudaotv":1, "wuhuansoft":1, "wujianghr":1, "wujue":1, "wulumuqijiaochetuoyun":1, "wumii":1, "wusa5":1, "wutongzi":1, "wuxingarden":1, "wuxirc":1, "wuxjob":1, "wuyishan":1, "wuyuan168":1, "wwenglish":1, "wxhouse":1, "wxjob":1, "wxmama":1, "wxrb":1, "wxthw":1, "wy000":1, "wyjiuyuanheiji":1, "wz121":1, "wz12333":1, "wz2sc":1, "wz517":1, "wzcbd":1, "wzfg":1, "wzhd":1, "wzjob":1, "wzms":1, "wzpeace":1, "wzsee":1, "wzszp":1, "wztvu":1, "wzwh":1, "wzyds":1, "wzzbtb":1, "x3cn":1, "x4321":1, "xa999":1, "xabbs":1, "xadlan":1, "xafc":1, "xahhw":1, "xajob":1, "xanet110":1, "xaonline":1, "xapcn":1, "xaprice":1, "xarc8":1, "xatvs":1, "xawan":1, "xawb":1, "xbaixing":1, "xbiao":1, "xbmhw":1, "xbxxb":1, "xbychemoxing":1, "xbymoxing":1, "xc0769":1, "xcarimg":1, "xcmg":1, "xcpxw":1, "xcrc999":1, "xcy8":1, "xd":1, "xdnice":1, "xdowns":1, "xdwan":1, "xf88":1, "xfbst":1, "xffcol":1, "xfqcol":1, "xfwed":1, "xfzc":1, "xgz":1, "xgzrc":1, "xh-expo":1, "xhcedu":1, "xhdedu":1, "xhuaian":1, "xiachufang":1, "xiadu":1, "xialinying":1, "xialv":1, "xiamenair":1, "xiami":1, "xian-tourism":1, "xianbey":1, "xianbx":1, "xiancn":1, "xiangauto":1, "xiangcunyou":1, "xianghunet":1, "xiangjiangyw":1, "xiangmu":1, "xiangrikui":1, "xiangshenghang":1, "xiangshu":1, "xianguo":1, "xianjj":1, "xianweizhang":1, "xianyuwang":1, "xiao84":1, "xiaohei":1, "xiaojiangguo123":1, "xiaoliangkou":1, "xiaoma":1, "xiaomi":1, "xiaomi001":1, "xiaomishu":1, "xiaomizha":1, "xiaonaodai":1, "xiaonei":1, "xiaopi":1, "xiaoshuo766":1, "xiaoxiangrc":1, "xiaoyeren":1, "xiaoyuanfeng":1, "xiaozhi123":1, "xiaozhu":1, "xiaozhustatic1":1, "xiashanet":1, "xiazaiba":1, "xiazaizhijia":1, "xicai":1, "xiche168":1, "xichengrc":1, "xiezilou":1, "xifeng2008":1, "xigu":1, "xihairc":1, "xilu":1, "ximalaya":1, "xincheping":1, "xincx":1, "xindaibao":1, "xinddy":1, "xinfenlei":1, "xingcishan":1, "xinggan":1, "xingjiezs":1, "xingmucaoye":1, "xingshu":1, "xingtaituan":1, "xingzuo123":1, "xingzuowu":1, "xinhainews":1, "xinhe99":1, "xinhua08":1, "xinhuacang":1, "xinhuanet":1, "xinhuatone":1, "xinjiewang":1, "xinjunshi":1, "xinkz":1, "xinli001":1, "xinli110":1, "xinlimaoyi":1, "xinluobo":1, "xinm123":1, "xinmanyuan":1, "xinmicn":1, "xinnet":1, "xinniangjie":1, "xinnong":1, "xinpg":1, "xinpian":1, "xinshaow":1, "xintaizhou":1, "xintuan":1, "xinwangjing":1, "xinxianrener":1, "xinxiqu":1, "xinxiwo":1, "xinxiyi":1, "xinxunwang":1, "xinyanju":1, "xinyi":1, "xinyurc":1, "xipu520":1, "xitek":1, "xituan":1, "xiu":1, "xiubei":1, "xiuke":1, "xiwenquan":1, "xixiarc":1, "xixik":1, "xiyuit":1, "xizhou":1, "xizi":1, "xj0993":1, "xj169":1, "xj5u":1, "xj71":1, "xj917":1, "xjcfan":1, "xjdaily":1, "xjflcp":1, "xjhr":1, "xjjjb":1, "xjrb":1, "xjtaobao":1, "xjtour":1, "xjtsnews":1, "xjw6188":1, "xkhouse":1, "xkwx":1, "xkxm":1, "xlsti":1, "xlys1904":1, "xlzx":1, "xm3502":1, "xmfc":1, "xmfish":1, "xmhljsz":1, "xmhouse":1, "xmwj":1, "xn121":1, "xna8":1, "xnjjob":1, "xnmtd":1, "xnonl":1, "xns315":1, "xnwsq":1, "xoeoo":1, "xoyo":1, "xp14":1, "xp510":1, "xp597":1, "xpgod":1, "xpxww":1, "xqingnet":1, "xrtvu":1, "xs9999":1, "xsbxw":1, "xsbz":1, "xshr":1, "xsjob":1, "xskhome":1, "xsool":1, "xsrtvu":1, "xszrcw":1, "xtcanlian":1, "xtjc":1, "xtuan":1, "xuanruanjian":1, "xuanwww":1, "xuanxuan":1, "xuchangbbs":1, "xudongjixie":1, "xue2you":1, "xue5156":1, "xueau":1, "xueda":1, "xueersi":1, "xueeu":1, "xuefu5":1, "xueid":1, "xuejiazhao":1, "xuejp":1, "xuekeedu":1, "xuekewang":1, "xueshanrc":1, "xuesoo":1, "xuexi111":1, "xuexiaodaquan":1, "xuexifangfa":1, "xuexigang":1, "xuexila":1, "xuexiniu":1, "xuexun":1, "xueyiyun":1, "xujc":1, "xumulc":1, "xumurc":1, "xumuren":1, "xungou":1, "xunlei":1, "xunleimil":1, "xunyangwang":1, "xunyiwenyao":1, "xunyou":1, "xutour":1, "xuzhoujob":1, "xw365":1, "xwen":1, "xwie":1, "xx007":1, "xx351":1, "xxdm":1, "xxhls":1, "xxluo":1, "xxplzx":1, "xxyw":1, "xy":1, "xy9981":1, "xya8":1, "xydhl":1, "xyfc":1, "xyg100":1, "xygmed":1, "xyppzx":1, "xyrczpw":1, "xyrtv":1, "xywy":1, "xyzs":1, "xzavt":1, "xzbfgg":1, "xzbhzl":1, "xzboyue":1, "xzfhgg":1, "xzjgw":1, "xzjxsg":1, "xzjyh":1, "xzrbw":1, "xzren":1, "xzsnw":1, "xzsyw":1, "xzuan":1, "xzxw":1, "xzxx":1, "xzyuhui":1, "xzyxdz":1, "y13255262618":1, "y2002":1, "y5201314":1, "ya247":1, "ya597":1, "yacol":1, "yahan-wenhua":1, "yahxi":1, "yakolux":1, "yananuniversity":1, "yandongjixie":1, "yangcheng8":1, "yanghongzhou":1, "yangjiajiao":1, "yangshitianqi":1, "yangtse":1, "yangzhi":1, "yanlimeirong":1, "yantaihr":1, "yantuchina":1, "yanxiu":1, "yanzhaorc":1, "yaochufa":1, "yaodou":1, "yaoee":1, "yaofangwang":1, "yaojobs":1, "yaolan":1, "yaoliwang":1, "yaolvyou":1, "yaowan":1, "yaozh":1, "yaozs":1, "yasn":1, "yayawan":1, "yb983":1, "ybbbs":1, "ybbgn":1, "ybjk":1, "ybvv":1, "ybxww":1, "ybyulong":1, "yc38":1, "yc678":1, "yc920":1, "ycbole":1, "yccar":1, "yccdn":1, "ycdyz":1, "ycgjj":1, "ychr":1, "ycicw":1, "ycpai":1, "ycrczpw":1, "ycrusher":1, "ycshequ":1, "ycwb":1, "ycxc":1, "ycywsh":1, "yczihua":1, "ydstatic":1, "ye40":1, "yeekang":1, "yeepay":1, "yeqiaohui":1, "yes515":1, "yesfr":1, "yeshj":1, "yesky":1, "yesmyimg":1, "yesmywine":1, "yeyou":1, "yeyoucdn":1, "yeyoudaquan":1, "yeyoujia":1, "yeyouw":1, "ygjj":1, "yhachina":1, "yhbimg":1, "yhd":1, "yhgcc":1, "yhjj":1, "yhkgjt":1, "yhnw":1, "yhwt":1, "yi7":1, "yi958":1, "yicai":1, "yiche":1, "yichemall":1, "yicheshi":1, "yidaba":1, "yieldmanager":1, "yifucj":1, "yihaodian":1, "yihaodianimg":1, "yijiaqin":1, "yilewan":1, "yili":1, "yingbishufa":1, "yingchuang":1, "yingjiesheng":1, "yingkelawyer":1, "yinglianre":1, "yingmoo":1, "yingsheng":1, "yingtanwang":1, "yingxiao360":1, "yingyu":1, "yinhangzhaopin":1, "yinlianbang":1, "yinsha":1, "yinshihui":1, "yintai":1, "yinxiuwang":1, "yinyuetai":1, "yiqifa":1, "yiqin":1, "yiqirong":1, "yiqisoo":1, "yiqisooimg":1, "yirendai":1, "yishizige":1, "yishu":1, "yisoche":1, "yisou":1, "yisou5":1, "yiweigou":1, "yiwu2":1, "yiwubuy":1, "yiwufair":1, "yiwugou":1, "yixieshi":1, "yixue001":1, "yixue99":1, "yixuezp":1, "yixun":1, "yiyedu":1, "yiyigreen":1, "yizhaoche":1, "yizhaopin":1, "yizhituo":1, "yizimg":1, "yjbys":1, "yjkyj":1, "yk0579":1, "ykimg":1, "ykrx":1, "yktchina":1, "yktworld":1, "ykwin":1, "yl1001":1, "yljy":1, "ylr114":1, "ylrb":1, "ylsw":1, "yltvb":1, "ylw168":1, "ylzmhzs":1, "ymfile":1, "ymt360":1, "ymxfishing":1, "yn114":1, "yn16":1, "yn56":1, "yn987":1, "yncoop":1, "yndaily":1, "yndtjj":1, "ynet":1, "ynfjw":1, "yngkseed":1, "yngp":1, "ynhouse":1, "ynhr":1, "yninfo":1, "ynit580":1, "ynjgy":1, "ynjtt":1, "ynpew":1, "ynpost":1, "ynpxrz":1, "ynshangji":1, "ynsugar":1, "yntch":1, "ynwangli":1, "ynwjs":1, "ynxdfpr":1, "ynzp":1, "yoao":1, "yodao":1, "yodbank":1, "yododo":1, "yofus":1, "yoher":1, "yohobuy":1, "yohoshow":1, "yoka":1, "yokacdn":1, "yolbax":1, "yongchengren":1, "yongjiangrc":1, "yongsao":1, "yongshengmold":1, "yongweizhiye":1, "yongzhou":1, "yoohouse":1, "yooli":1, "yooyo":1, "youba":1, "youban":1, "youbian":1, "youbianku":1, "youbibi":1, "youboy":1, "youc":1, "youdao":1, "youfangw":1, "yougou":1, "youhua":1, "youhunan":1, "youjiao":1, "youjindi":1, "youkecn":1, "youkee":1, "youkelai":1, "youku":1, "youlonger":1, "youmeiji":1, "younet":1, "yousee":1, "youshang":1, "youtx":1, "youwo":1, "youxi":1, "youxiake":1, "youxiduo":1, "youxiniao":1, "youxiping":1, "youxiqun":1, "youxiuhui":1, "youxiwangguo":1, "youyuan":1, "youyy":1, "youzu":1, "yoyobaby":1, "yoyojie":1, "yoyou":1, "ypall":1, "yqbdt":1, "yqcn":1, "yqdown":1, "yqrc":1, "yrd100":1, "yrdedu":1, "ys168":1, "yshsports":1, "yssjw":1, "ysxyyt":1, "ytbbs":1, "ytbxw":1, "ythouse":1, "ythuayi":1, "ytjob":1, "ytrain":1, "ytrczpw":1, "ytwrc":1, "ytxsoft":1, "ytxww":1, "yuanlai":1, "yuanlin":1, "yuanlin001":1, "yuanlin365":1, "yuanyetrip":1, "yubooa":1, "yuduxx":1, "yue365":1, "yuecheng":1, "yuejianglou":1, "yuemei":1, "yuhou":1, "yuhuan":1, "yuhuijob":1, "yujia":1, "yuloo":1, "yunbaoriji":1, "yuncheng":1, "yundaex":1, "yundianrc":1, "yunguicn":1, "yunhepan":1, "yunhosting":1, "yunos":1, "yunshipei":1, "yunshow":1, "yuntaodu":1, "yunuu":1, "yunyangrc":1, "yupoo":1, "yuqihuang":1, "yuqinge":1, "yurenwan":1, "yurun":1, "yusuan":1, "yutong":1, "yuxinews":1, "yuzhicl":1, "yw597":1, "ywbb":1, "yx-s":1, "yx618":1, "yxbao":1, "yxcyh":1, "yxdown":1, "yxduo":1, "yxlady":1, "yxm":1, "yxybb":1, "yxyey":1, "yxzoo":1, "yy":1, "yy138":1, "yy7091":1, "yy960":1, "yyarea":1, "yycqc":1, "yyfad":1, "yyfdcw":1, "yyfeicui":1, "yyjia":1, "yypxcn":1, "yyqcw":1, "yyrtv":1, "yysgsp":1, "yyt360":1, "yytcdn":1, "yyyqqq":1, "yyyyba":1, "yzdiaoyu":1, "yzdjbh":1, "yzfcw":1, "yzforex":1, "yzqcw":1, "yzrc":1, "yzwb":1, "yzxw":1, "yzydt":1, "z-china":1, "z699":1, "za169":1, "zangao":1, "zangyaofang":1, "zanzw":1, "zaoche168":1, "zaojiao":1, "zastatic":1, "zbcars":1, "zbhouse":1, "zbird":1, "zbjimg":1, "zblogcn":1, "zc85":1, "zcheer":1, "zcjob88":1, "zcmechanic":1, "zcom":1, "zcrcw":1, "zcwz":1, "zdface":1, "zdmimg":1, "zf875":1, "zf9918":1, "zg0543":1, "zgbfw":1, "zgbm":1, "zgchangfang":1, "zgchawang":1, "zgcmlm":1, "zgcwrc":1, "zgdhy":1, "zgdjyj":1, "zgdrive":1, "zgftjg":1, "zgfznews":1, "zgfzrc":1, "zggjj":1, "zggwyw":1, "zghgrc":1, "zghmjjw":1, "zghmsc":1, "zghqcy":1, "zgjczzw":1, "zgjf168":1, "zgjhjy":1, "zgjjc":1, "zgjjclw":1, "zgjkcyw":1, "zgjrrc":1, "zgjsks":1, "zgjsw":1, "zgjtb":1, "zgjxrc":1, "zgjzlw":1, "zgkjzx":1, "zgkqw":1, "zglqw":1, "zglxw":1, "zglyfzw":1, "zgmjrc":1, "zgmod":1, "zgnhzx":1, "zgong":1, "zgpinche":1, "zgpingshu":1, "zgppny":1, "zgqcrc":1, "zgqczj":1, "zgqpc":1, "zgqw":1, "zgqxn":1, "zgrcjyw":1, "zgrcw":1, "zgsbzlcy":1, "zgsc123":1, "zgshengsi":1, "zgsprc":1, "zgsxzs":1, "zgsyb":1, "zgsydw":1, "zgtnzx":1, "zgwdq":1, "zgwlrc":1, "zgwmrc":1, "zgxzw":1, "zgycrc":1, "zgycwx":1, "zgyey":1, "zgyyrc":1, "zgza":1, "zgzcw":1, "zgznh":1, "zgzx114":1, "zgzxzsw":1, "zh-hr":1, "zh-hz":1, "zh-sc":1, "zh28":1, "zh51home":1, "zh853":1, "zhanggame":1, "zhangjk":1, "zhangpu597":1, "zhaocaihr":1, "zhaochafa":1, "zhaokaoku":1, "zhaopin":1, "zhaopinxitong":1, "zhaoshang-sh":1, "zhaoshang01":1, "zhaoshang100":1, "zhaoshang800":1, "zhaoshangbao":1, "zhaosheng":1, "zhaotie":1, "zhazhi":1, "zhbiao":1, "zhbit":1, "zhcoo":1, "zhcpic":1, "zhcw":1, "zhe800":1, "zhefun":1, "zhejiangrc":1, "zhenai":1, "zhenai77":1, "zhenews":1, "zhenfangyuan":1, "zhengtongedu":1, "zhengwutong":1, "zhengzhoubus":1, "zhengzhoudongyang":1, "zhengzhoulvxing":1, "zhenpin":1, "zheyibu":1, "zhgnews":1, "zhhdq":1, "zhhtd":1, "zhibo8":1, "zhiboche":1, "zhicheng":1, "zhidian":1, "zhiding8":1, "zhidiy":1, "zhifang":1, "zhigame":1, "zhigou":1, "zhihu":1, "zhiji":1, "zhijia":1, "zhijinsteel":1, "zhijinwang":1, "zhileng":1, "zhimantian":1, "zhimg":1, "zhitechan":1, "zhituad":1, "zhiweiwenshi":1, "zhixiaoren":1, "zhixiaorenurl":1, "zhixuan":1, "zhiye":1, "zhiyoula":1, "zhiyuanyun":1, "zhizhen":1, "zhiziyun":1, "zhld":1, "zhongbuauto":1, "zhongkao":1, "zhonglongmotor":1, "zhongshangwang":1, "zhongso":1, "zhongsou":1, "zhongxingift":1, "zhongyidong":1, "zhongzhourc":1, "zhrmms":1, "zhsho":1, "zhsnxy":1, "zhtool":1, "zhtv":1, "zhuangjiba":1, "zhuangku":1, "zhuangpin":1, "zhuannet":1, "zhuantiku":1, "zhuapo":1, "zhuaxia":1, "zhubaijia":1, "zhubajie":1, "zhuicun":1, "zhujia360":1, "zhujiangrc":1, "zhujiangroad":1, "zhuke":1, "zhulang":1, "zhulituan":1, "zhulong":1, "zhuokearts":1, "zhuoku":1, "zhuqike":1, "zhuzao":1, "zhuzaohr":1, "zhuzhouwang":1, "zhwdw":1, "zhxjyw":1, "zhyedu":1, "zibosky":1, "zijiayoucn":1, "zikao1688":1, "zikao365":1, "zimilan":1, "zisha":1, "zisuyouw":1, "zitichina":1, "zixia":1, "zj":1, "zj121":1, "zj123":1, "zj60":1, "zj9":1, "zjbar":1, "zjcheshi":1, "zjcoal":1, "zjcoop":1, "zjcyts":1, "zjhnedu":1, "zjhq":1, "zjjsepc":1, "zjjta":1, "zjjyzx":1, "zjknews":1, "zjkonline":1, "zjks":1, "zjlottery":1, "zjlscourt":1, "zjolcdn":1, "zjpark":1, "zjphis":1, "zjpse":1, "zjrc":1, "zjrw":1, "zjrxz":1, "zjstv":1, "zjtcn":1, "zjwater":1, "zjwchc":1, "zjwmw":1, "zjxf119":1, "zjxxt":1, "zjyhtour":1, "zjypw":1, "zjzcj":1, "zk5u":1, "zk71":1, "zkxww":1, "zlhome":1, "zlt365":1, "zmd5":1, "zmingcx":1, "zmnedu":1, "znds":1, "znhr":1, "znimg":1, "znxkw":1, "zocai":1, "zoioo":1, "zol":1, "zongheng":1, "zongsifang":1, "zoomlion":1, "zoopda":1, "zoossoft":1, "zp365":1, "zp515":1, "zp666":1, "zpb365":1, "zplm":1, "zpzj":1, "zq6":1, "zqgame":1, "zqzq":1, "zr597":1, "zr98":1, "zs30":1, "zs310":1, "zsbicycle":1, "zsezt":1, "zshl":1, "zshouyou":1, "zshyqx":1, "zslz":1, "zsnet":1, "zsnets":1, "zssou":1, "zst365":1, "zstx88":1, "zt5":1, "ztedu":1, "ztgame":1, "ztsfc":1, "zuche":1, "zuchecdn":1, "zuchezu":1, "zudong":1, "zufang":1, "zugame":1, "zugou":1, "zuiyou":1, "zuiyouxi":1, "zujuan":1, "zulinbao":1, "zunyiol":1, "zuoche":1, "zuojiaju":1, "zuojiang":1, "zuowen":1, "zupuk":1, "zupulu":1, "zuzhirenshi":1, "zuzuche":1, "zwcad":1, "zwhz":1, "zwtxnews":1, "zx114w":1, "zx185":1, "zx79":1, "zx98":1, "zxdyw":1, "zxfishing":1, "zxhsd":1, "zxip":1, "zxiubbs":1, "zxrcw":1, "zxwbb":1, "zxxk":1, "zxyhw":1, "zxzhijia":1, "zy":1, "zy12580":1, "zycdxw":1, "zycmmt":1, "zyctd":1, "zynews":1, "zynw":1, "zyrb":1, "zyt-life":1, "zyue":1, "zyuexc":1, "zyzhan":1, "zz361":1, "zz51":1, "zz597":1, "zz91":1, "zzbaike":1, "zzbbs":1, "zzdjw":1, "zzfc":1, "zzgjj":1, "zzhcz":1, "zzidc":1, "zzjob88":1, "zzlwjy":1, "zzol360":1, "zzpgm":1, "zzqifan":1, "zzsfjc":1, "zzsr":1, "zzstep":1, "zztyedu":1, "zzwljc":1, "zzwms":1, "zzyjs":1, "zzyycc":1, "zzz4":1 },"de":{ "china-botschaft":1 },"edu":{ "snai":1, "sxrtvu":1 },"fm":{ "douban":1, "jing":1, "lvxing":1 },"fr":{ "amb-chine":1 },"hk":{ "95599":1, "ctrip.com":1, "hkidc":1, "takungpao.com":1, "xsren":1 },"im":{ "cli":1, "iapps":1, "iyy":1, "yixin":1 },"info":{ "gmold":1, "iyaya":1, "lztech":1, "meihua":1, "williamlong":1 },"jobs":{ "cn":1 },"jp":{ "china-embassy.or":1 },"kr":{ "ctrip.co":1 },"la":{ "33":1, "36":1, "51":1, "55":1, "900":1, "chaxun":1, "iz":1, "qzone":1, "ulinix":1 },"me":{ "21me":1, "bole":1, "dzj":1, "kyhs":1, "nanxi":1, "shijue":1, "tvb":1, "wmpic":1, "yuksel":1 },"mobi":{ "i1515":1 },"net":{ "001sj":1, "00615":1, "020p":1, "022job":1, "024anfang":1, "027":1, "0376":1, "0513":1, "0515car":1, "0517":1, "0566cn":1, "0577home":1, "0755":1, "0871job":1, "0875job":1, "0898":1, "0937":1, "10050":1, "100jiaoyu":1, "114my":1, "115800":1, "117800":1, "125cn":1, "126":1, "126job":1, "127":1, "12900":1, "158":1, "1616":1, "163":1, "16789":1, "177dj":1, "17eu":1, "17u":1, "18dao":1, "200":1, "21ccom":1, "21cp":1, "21ks":1, "21page":1, "21shte":1, "230la":1, "232100":1, "263":1, "269":1, "293":1, "2dx":1, "2liang":1, "2mdn":1, "33map":1, "360guakao":1, "360tz":1, "365kl":1, "370830":1, "37wan":1, "39":1, "39jhw":1, "3conline":1, "3ddl":1, "3edu":1, "3sjob":1, "3snews":1, "414500":1, "434300":1, "4399":1, "461000":1, "471700":1, "51":1, "51daifu":1, "51fanli":1, "51gaokao":1, "51hunter":1, "51la":1, "51test":1, "51zxw":1, "5251":1, "52cake":1, "52car":1, "52ch":1, "52hotel":1, "52jj":1, "52op":1, "52sales":1, "52tian":1, "52xiaoyuan":1, "533":1, "5460":1, "546300":1, "54cn":1, "54kefu":1, "5566":1, "557":1, "5678":1, "56888":1, "56ye":1, "571400":1, "5721":1, "5d6d":1, "5haoxue":1, "5i9u":1, "5zsz":1, "6259114":1, "68design":1, "71sou":1, "78dm":1, "7usa":1, "800400":1, "81629":1, "84bus":1, "8671":1, "86to81":1, "88353588":1, "91tea":1, "94117":1, "962":1, "962200":1, "96369":1, "96519":1, "97616":1, "999120":1, "acftu":1, "actoys":1, "admin5":1, "ah163":1, "ahage":1, "ahcl":1, "ajiang":1, "aladd":1, "ali213":1, "androidonline":1, "ankang":1, "anngo":1, "anyv":1, "artintern":1, "artron":1, "asp163":1, "aupu":1, "awotuan":1, "ayrc":1, "b2b168":1, "baidulian":1, "bailinsi":1, "baixing":1, "baoan":1, "baoye":1, "bbscms":1, "bd365":1, "bdinfo":1, "beianchaxun":1, "beifang":1, "bejoin":1, "bfxx":1, "bianjibu":1, "bjhytc":1, "bjmama":1, "blsy":1, "bmjob":1, "bokee":1, "bsjy":1, "buildjob":1, "byfdc":1, "bzcm":1, "c-ps":1, "c114":1, "caihao":1, "caiyn":1, "catv":1, "cbi360":1, "ccedin":1, "ccen":1, "ccmn":1, "cctb":1, "ccughc":1, "cdgtw":1, "cdjjedu":1, "cdn86":1, "cdrx":1, "cdyou":1, "ce02":1, "cer":1, "cfanclub":1, "cfedu":1, "changdedj":1, "chebiao":1, "chem365":1, "chetuanwang":1, "chexun":1, "china-cba":1, "china-cx":1, "china-lottery":1, "china-school":1, "china-train":1, "china123":1, "chinabug":1, "chinaccd":1, "chinacity":1, "chinacrane":1, "chinaeic":1, "chinaeol":1, "chinagames":1, "chinagb":1, "chinahrd":1, "chinahufa":1, "chinajoy":1, "chinametro":1, "chinamost":1, "chinamr":1, "chinapaper":1, "chinapipe":1, "chinaseed":1, "chinashishi":1, "chinauma":1, "chinaunix":1, "chinavalue":1, "chinawestnews":1, "chutou":1, "cidu":1, "cifco":1, "cippe":1, "citiz":1, "ciwong":1, "cixiedu":1, "cjdby":1, "cn":1, "cn2car":1, "cnbaowen":1, "cnchache":1, "cncn":1, "cndianlu":1, "cndog":1, "cneln":1, "cnfrp":1, "cngsda":1, "cnhbsb":1, "cnhuadong":1, "cninfo":1, "cnjky":1, "cnjyw":1, "cnki":1, "cnkoi":1, "cnkssb":1, "cnlinfo":1, "cnmf":1, "cnmsw":1, "cnnyjx":1, "cnool":1, "cnpension":1, "cnphotos":1, "cnread":1, "cnshicai":1, "cnsifa":1, "cnwen":1, "cnworld":1, "cnxishui":1, "cnyw":1, "cnzz":1, "codefans":1, "coovee":1, "copperhome":1, "corpease":1, "cpecc":1, "cphoto":1, "cqfishing":1, "cqgj":1, "cqhxjd":1, "cqmama":1, "cqnews":1, "cqqnb":1, "cqrc":1, "cqshebao":1, "cqwu":1, "cqxszx":1, "cqyc":1, "cqyun":1, "cqzx":1, "csats":1, "csdn":1, "csgia":1, "csln":1, "csmama":1, "csstoday":1, "cxtvu":1, "cyjyw":1, "cyol":1, "czch":1, "czinfo":1, "czonline":1, "d1xz":1, "da-hang":1, "dadiwang":1, "daoxila":1, "daozhou":1, "daqing":1, "dd001":1, "ddjob":1, "dehua":1, "demage":1, "dflr":1, "dfysw":1, "dgjy":1, "dgrc":1, "dianzhanggui":1, "diaochapai":1, "diaokeji":1, "dimeng":1, "discuz":1, "diwei":1, "dltm":1, "dlzj":1, "dmjob":1, "dmjy":1, "doubleclick":1, "doyoo":1, "doyouhike":1, "dqccc":1, "dragon-guide":1, "dt123":1, "duba":1, "dv37":1, "dvbbs":1, "dvimon":1, "dyedu":1, "dyfc":1, "dytt8":1, "dz169":1, "dzjob":1, "dzwork":1, "dzxw":1, "eamn":1, "edudh":1, "edudown":1, "edudt":1, "eeeqi":1, "emlog":1, "emushroom":1, "ershou":1, "esnai":1, "fangfa":1, "fayo":1, "fdlt":1, "fecn":1, "feijiu":1, "fengj":1, "fivecarts":1, "fjlib":1, "fjsy":1, "fjtv":1, "flash8":1, "foodmate":1, "forgechina":1, "foyuan":1, "frly":1, "fsjy":1, "ftutj":1, "futurescn":1, "fx120":1, "fxxww":1, "fynews":1, "fzxyyl":1, "gangong":1, "gaoan":1, "gayaha":1, "gcimg":1, "gdcct":1, "gdcic":1, "gdsin":1, "gfedu":1, "gg163":1, "gimoo":1, "globalimporter":1, "gongzhao":1, "goodacc":1, "gotozjj":1, "gouhuasuan":1, "gqsoso":1, "grfy":1, "gtcfla":1, "guqu":1, "gxbs":1, "gxcic":1, "gxer":1, "gxexam":1, "gxipo":1, "gxsti":1, "gyedu":1, "gz-travel":1, "gz007":1, "gzw":1, "haier":1, "hainan":1, "hainanpc":1, "haorencai":1, "hb123":1, "hb12369":1, "hbcdc":1, "hbhz":1, "hbnews":1, "hbrd":1, "hbycw":1, "hdzc":1, "hhjy":1, "hhncp":1, "hhsq":1, "hk-0898":1, "hkwb":1, "hledu":1, "hlgnet":1, "hlj":1, "hlje":1, "hm-3223":1, "hncic":1, "hnfz":1, "hngawj":1, "hngjj":1, "hnjkw":1, "hnkjonline":1, "hnlrx":1, "hnlzw":1, "hnnw":1, "hnol":1, "hnpi":1, "hnskl":1, "hnsxfj":1, "hntianya":1, "hnwn":1, "homomo":1, "hostadm":1, "hrbhw":1, "hrblaw":1, "hsjy":1, "htbenet":1, "hteacher":1, "htexam":1, "huaxiajiayuan":1, "huedu":1, "hunanedu":1, "huoche":1, "huochepiao":1, "hustonline":1, "hwit":1, "hxsx":1, "hxzg":1, "hyedu":1, "hyk123":1, "hynews":1, "hyxzx":1, "hyyxw":1, "hzedu":1, "hzjxy":1, "hzjys":1, "hzlib":1, "hzpzs":1, "hzrx":1, "hzyhrc":1, "icar168":1, "ichacha":1, "ilinyi":1, "imp3":1, "importfood":1, "indexedu":1, "inhe":1, "irs01":1, "ishang":1, "itcpn":1, "itiexue":1, "itpub":1, "itsogo":1, "itunion":1, "iwms":1, "jandan":1, "jb51":1, "jbedu":1, "jczsw":1, "jdedu":1, "jdzol":1, "jfxx":1, "jgedu":1, "jgny":1, "jhjy":1, "jiadinglife":1, "jiajushichang":1, "jiangsuedu":1, "jiaodong":1, "jiaoshizhaopin":1, "jiaozhou":1, "jichuang":1, "jiemo":1, "jieyue":1, "jinglao":1, "jingnei":1, "jinrongren":1, "jinshuju":1, "jius":1, "jixie":1, "jjwxc":1, "jl168":1, "jlqf":1, "jlstnet":1, "jnzxw":1, "job234":1, "jobinhe":1, "jsinfo":1, "jsr365":1, "jupai":1, "jwjy":1, "jxjjw":1, "jynews":1, "jysq":1, "jzcn":1, "jzdd":1, "kaidi163":1, "kanghu":1, "kantao":1, "kdnet":1, "kejet":1, "kejiqikan":1, "khez":1, "khly":1, "km169":1, "kmeb":1, "ksgs":1, "kuaidi100":1, "kuakao":1, "la-bbs":1, "labbase":1, "langge":1, "laohuangli":1, "lenosoft":1, "letian":1, "lh168":1, "lhjy":1, "li63":1, "lingw":1, "lingyuan":1, "linxi":1, "lipu":1, "liuxue51":1, "liveuc":1, "lixianedu":1, "ljia":1, "lmjx":1, "lnny":1, "longhoo":1, "longjiang":1, "longmen":1, "lonlife":1, "lotour":1, "ls520":1, "lsjyw":1, "ltesting":1, "luohuedu":1, "lwjy":1, "lwnews":1, "lyfxw":1, "lygrc":1, "lyjob":1, "lyjy":1, "lysk":1, "lyvec":1, "lywj":1, "lz54":1, "lzgd":1, "lzsq":1, "lzzy":1, "machineryinfo":1, "mafengwo":1, "makepolo":1, "map456":1, "masfy":1, "meishij":1, "meituan":1, "mm111":1, "mnrb":1, "mshw":1, "msxf":1, "mushroommarket":1, "mybu":1, "mycar168":1, "mycollect":1, "myhostadmin":1, "myrb":1, "mysteel":1, "nanrenwo":1, "nbcredit":1, "nbks":1, "nbol":1, "nbptweb":1, "nbzhaopin":1, "nengyuan":1, "net-school":1, "netat":1, "netover":1, "newasp":1, "newsmth":1, "newssc":1, "newyx":1, "ng114":1, "ngrx":1, "nhedu":1, "ninghai":1, "njbxjy":1, "nmgf":1, "nmtravel":1, "nnnews":1, "nongyezhan":1, "nosea":1, "nphoto":1, "ns365":1, "ntjy":1, "ntxx":1, "nurqut":1, "nxnews":1, "nxng":1, "ohedu":1, "oilchem":1, "onegreen":1, "onfun":1, "onlinedown":1, "oschina":1, "ourseo":1, "p5w":1, "pafj":1, "pageadmin":1, "pagechoice":1, "paixie":1, "paopaoche":1, "pchome":1, "phedu":1, "phome":1, "phpwind":1, "picol":1, "pingnan":1, "pjob":1, "pledu":1, "pnol":1, "polyv":1, "powereasy":1, "prestan":1, "pthl":1, "pynet":1, "pyrc":1, "pzzc":1, "qdedu":1, "qdhr":1, "qdmama":1, "qgnews":1, "qgny":1, "qgyyzs":1, "qikao":1, "qincai":1, "qiugouxinxi":1, "qnct":1, "qndb":1, "qp365":1, "qqxuan":1, "qyedu":1, "qyjz":1, "qzedu":1, "qzkj":1, "qzzs":1, "railcn":1, "raoke":1, "rc86":1, "rdedu":1, "rencai":1, "replays":1, "riridy":1, "rongchang":1, "rtbidder":1, "sandai":1, "sanwen":1, "sc-overseasinfo":1, "scedu":1, "scetc":1, "scfzw":1, "scjks":1, "scopen":1, "scpv":1, "scrtvu":1, "sddp":1, "sdedu":1, "sdinfo":1, "sdjxyj":1, "sdtyjixie":1, "sdyjdz":1, "seosrx":1, "sepu":1, "sg91":1, "sh1800":1, "shangc":1, "shanghaimuseum":1, "shanghaitour":1, "shanglin":1, "shaoyangnews":1, "shedu":1, "shengyijie":1, "sherc":1, "shlll":1, "shopin":1, "shouyouzhijia":1, "shuajizhijia":1, "shuanghui":1, "shxb":1, "shynws":1, "shyuzhi":1, "shzfzz":1, "silverlightchina":1, "sinahk":1, "single6":1, "sinoss":1, "sitall":1, "sjyzc":1, "smjy":1, "sohu":1, "songshuhui":1, "sosoo":1, "sosw":1, "sqjg":1, "sshr":1, "ssjy":1, "stedu":1, "suedu":1, "sunkf":1, "superlib":1, "supfree":1, "sxcm":1, "sxif":1, "sxinfo":1, "sxny":1, "sxri":1, "sxsedu":1, "sxxw":1, "syhouse":1, "syrcw":1, "syzxsx":1, "szeat":1, "szedu":1, "szol":1, "szonline":1, "szsti":1, "szykj":1, "t56":1, "tabanjia":1, "tainfo":1, "tajd":1, "taqc":1, "tczx":1, "tech110":1, "tengfang":1, "texrc":1, "tianya168":1, "tibetculture":1, "tieliren":1, "tiexue":1, "tigercity":1, "tingclass":1, "tjwang":1, "tlfw":1, "tmcdn":1, "tobosu":1, "togogo":1, "tongxiehui":1, "tourjob":1, "tqedu":1, "tqschool":1, "tripc":1, "tripsz":1, "trueland":1, "tsinghua-sz":1, "tt65":1, "tuanshan":1, "tuifu":1, "tulaomao":1, "tuoliji":1, "tuoxian":1, "tzhledu":1, "tzinfo":1, "u-start":1, "u148":1, "u520":1, "uker":1, "upweb":1, "usaedu":1, "v007":1, "vicp":1, "wanrendai":1, "wanxuan":1, "wddj":1, "weizhang":1, "wems":1, "wen8":1, "wgszq":1, "whedu":1, "whir":1, "whjy":1, "whjzw":1, "whxedu":1, "wjedu":1, "woai3d":1, "woja":1, "worldmr":1, "wrsa":1, "wrzc":1, "wto168":1, "wuca":1, "wufun":1, "wxtxgj":1, "wygf":1, "wz16":1, "wzdsb":1, "wzer":1, "wzjky":1, "wzjygh":1, "wzrc":1, "xamama":1, "xarc":1, "xbedu":1, "xcedu":1, "xdkb":1, "xfjw":1, "xhby":1, "xhedu":1, "xiangyang":1, "xiaomayi":1, "xichu":1, "xici":1, "xieso":1, "xingtai":1, "xinxijie":1, "xiusheji":1, "xiziwang":1, "xjauto":1, "xmmh":1, "xpjy":1, "xpsy":1, "xs163":1, "xsjk":1, "xsmp":1, "xtjob":1, "xtly":1, "xue":1, "xueche":1, "xuefo":1, "xunch":1, "xuqinghua":1, "xwcm":1, "xxsy":1, "xyrc":1, "xz120":1, "xzzp":1, "y80s":1, "yalj":1, "ybrc":1, "yc5":1, "ycdata":1, "yeah":1, "ygfishing":1, "yhjy":1, "yjhy":1, "ykedu":1, "ylsw":1, "ynedu":1, "yodak":1, "yongyao":1, "youxi5":1, "yoyone":1, "yx618":1, "yxjy":1, "yxol":1, "yyzs":1, "yzedu":1, "yzwb":1, "zailine":1, "zajy":1, "zbedu":1, "zbinfo":1, "zbnews":1, "zdic":1, "zg163":1, "zgcqxs":1, "zglbw":1, "zgnt":1, "zgwys":1, "zhangli":1, "zhaokao":1, "zhaoshang":1, "zhecheng":1, "zhige":1, "zhjy":1, "zhmmw":1, "zhnews":1, "zhong-yao":1, "zhongjiao":1, "zhongsou":1, "zhsti":1, "zhxww":1, "zhyw":1, "ziuziu":1, "zjcyts":1, "zjfishing":1, "zjk169":1, "zjkinfo":1, "zjnw":1, "zjtcm":1, "zjwu":1, "zjzj":1, "zjzs":1, "zk789":1, "zljob":1, "zoosnet":1, "zoossoft":1, "zprc":1, "zq8":1, "zsedu":1, "zssl":1, "ztnews":1, "ztsfc":1, "zy169":1, "zyrc":1, "zzdd":1, "zzhmw":1, "zzist":1, "zzjs":1, "zzph":1, "zzrc":1 },"org":{ "0513":1, "1000plan":1, "1203":1, "21gold":1, "50bang":1, "51honest":1, "60851":1, "7188":1, "8855":1, "8hy":1, "8lw":1, "96399":1, "acftu":1, "ailaba":1, "ambafrance-cn":1, "ankang06":1, "anquan":1, "antong":1, "aqbz":1, "baiquean":1, "banyuetan":1, "baomi":1, "bj148":1, "bjcdc":1, "bjjubao":1, "bjsdr":1, "btv":1, "btvu":1, "bznews":1, "ca-sme":1, "caderm":1, "caeexpo":1, "caexpo":1, "caiep":1, "campingchina":1, "canjiren":1, "ccpit":1, "ccpitnb":1, "cfachina":1, "chahua":1, "chengdu56":1, "china-consulate":1, "china-cotton":1, "china-embassy":1, "china10":1, "chinaasc":1, "chinacct":1, "chinacitywater":1, "chinacourt":1, "chinacses":1, "chinaculture":1, "chinadmoz":1, "chinaeda":1, "chinagwy":1, "chinagwyw":1, "chinaielts":1, "chinaiiss":1, "chinaleather":1, "chinanotary":1, "chinaports":1, "chinaql":1, "chinataiwan":1, "chinatruck":1, "chinaww":1, "chinazy":1, "chinca":1, "chineseconsulate":1, "chineseembassy":1, "chunni":1, "ci-bo":1, "cieccpa":1, "ciftis":1, "cltt":1, "cmes":1, "cn-ny":1, "cncma":1, "cncourt":1, "cnenergy":1, "cnfxj":1, "cngold":1, "cnlist":1, "cnqr":1, "cnsb":1, "cocos2d-x":1, "cottonchina":1, "cq315":1, "cqgh":1, "cqzx":1, "crgk":1, "csmes":1, "cxwy":1, "cxwz":1, "cyedu":1, "donglin":1, "dtjy":1, "duchang":1, "dxyq":1, "eccsp":1, "eguilin":1, "fjcyl":1, "fjkx":1, "flzxw":1, "foxue":1, "fyedu":1, "gazx":1, "gdql":1, "gedu":1, "gjgwy":1, "globalbook":1, "gming":1, "gsean":1, "guigu":1, "gwfk":1, "gxjubao":1, "gzlib":1, "gzredcross":1, "gzzyz":1, "hafxw":1, "hainanredcross":1, "hainei":1, "hanban":1, "hbcourt":1, "hbsfgk":1, "hdavec":1, "hebgcc":1, "hebgh":1, "hebpingan":1, "hebredcross":1, "hefei123":1, "henanredcross":1, "hengfeng":1, "hfib":1, "hljgh":1, "hlnmg":1, "hncourt":1, "hndpf":1, "hngh":1, "hnswtzb":1, "hnszgh":1, "hqfb":1, "hrsalon":1, "html5cn":1, "htzx":1, "humanrights-china":1, "huocheshikebiao":1, "hxfz":1, "hykaoyan":1, "hynews":1, "hzgh":1, "infx":1, "it-home":1, "jiaj":1, "jiangshi":1, "jiangsugqt":1, "jiansuji":1, "jinde":1, "jingjia":1, "jsfxh":1, "jsgh":1, "jsvolunteer":1, "jxtyzx":1, "keywin":1, "kvov":1, "liangjing":1, "liaotuo":1, "linjiang":1, "lmzm":1, "lnszgh":1, "lnwomen":1, "lohcn":1, "lygredcross":1, "meixun":1, "mghf":1, "mobiletrain":1, "namoc":1, "nanjing2014":1, "newchannel":1, "neworiental":1, "neworiental-k12":1, "neworientalgroup":1, "newssc":1, "ninghai":1, "njgh":1, "njxzzx":1, "nuli":1, "patachina":1, "pinggu":1, "puduw":1, "punchbox":1, "qhcl":1, "qhfx":1, "qinglian":1, "qqwangming":1, "qusu":1, "rainbowsoft":1, "rczp":1, "redcross-sha":1, "rfidchina":1, "rtsac":1, "sae-china":1, "scgh":1, "sclf":1, "sclib":1, "shidi":1, "shmould":1, "showchina":1, "shtour":1, "shufa":1, "shuzixiaoyuan":1, "shzgh":1, "smedu":1, "solidot":1, "sqzx":1, "staticfile":1, "suiw":1, "swchina":1, "sxly":1, "szfw":1, "taiwandao":1, "tielu":1, "trustutn":1, "ttedu":1, "tzedu":1, "visapro":1, "w3":1, "wanjia":1, "wcedu":1, "whgh":1, "whxz":1, "wooyun":1, "wopus":1, "world-culture":1, "wwfchina":1, "wx6":1, "wzgh":1, "xiaoxiaotong":1, "xinhua":1, "xinzhou":1, "xjcourt":1, "xjedu":1, "xnfw":1, "xuancheng":1, "xuetian":1, "xwjy":1, "xzass":1, "xzqh":1, "yaolu":1, "yczjda":1, "yeeyan":1, "ygym":1, "yhgh":1, "yylm":1, "zaoyang":1, "zgba":1, "zgjm":1, "zgjy":1, "zgjzy":1, "zgshfljjh":1, "zhaokuaidi":1, "zhaopinhui":1, "zhaoyang":1, "zhifujing":1, "zhongzhuan":1, "zhzyw":1, "zj315":1, "zjedu":1, "zjftu":1, "zjgqt":1, "zjjd":1, "zjjys":1, "zjlsedu":1, "zjmj":1, "zjscedu":1, "zjtxedu":1, "zjzj":1, "zkpeace":1, "zunhua":1, "zwbk":1, "zx110":1, "zycq":1, "zyxuan":1, "zzbm":1 },"sg":{ "iedu":1 },"sh":{ "sge":1 },"so":{ "haorenyuan":1, "lietou":1, "luyi":1, "shengqian":1, "soutudi":1, "wangxiao":1 },"tm":{ "stone":1 },"tv":{ "005":1, "0438":1, "0916":1, "1819":1, "1866":1, "1988":1, "19888":1, "2588":1, "3456":1, "5588":1, "5666":1, "5888":1, "5999":1, "7999":1, "9555":1, "9928":1, "9998":1, "acg":1, "bilibili":1, "caoxian":1, "cnnl":1, "cnsb":1, "dengzhou":1, "dydh":1, "dztv":1, "efang":1, "gamehome":1, "hao315":1, "hntv":1, "hoolo":1, "huaihai":1, "imgo":1, "jiyou":1, "jnnews":1, "liaozhai":1, "ocar":1, "pengzhou":1, "pps":1, "qbj":1, "shiqian":1, "wasu":1, "weihai":1, "zhenping":1, "zohi":1 },"tw":{ "hexun.com":1, "taiwandao":1 },"us":{ "pangu":1 },"ws":{ "0798":1 },"xn--fiqs8s":{ "":1 } }; var subnetIpRangeList = [ 0,1, 167772160,184549376, //10.0.0.0/8 2886729728,2887778304, //172.16.0.0/12 3232235520,3232301056, //192.168.0.0/16 2130706432,2130706688 //127.0.0.0/24 ]; var hasOwnProperty = Object.hasOwnProperty; function check_ipv4(host) { // check if the ipv4 format (TODO: ipv6) // http://home.deds.nl/~aeron/regex/ var re_ipv4 = /^\d+\.\d+\.\d+\.\d+$/g; if (re_ipv4.test(host)) { // in theory, we can add chnroutes test here. // but that is probably too much an overkill. return true; } } function convertAddress(ipchars) { var bytes = ipchars.split('.'); var result = (bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | (bytes[3]); return result >>> 0; } function isInSubnetRange(ipRange, intIp) { for ( var i = 0; i < 10; i += 2 ) { if ( ipRange[i] <= intIp && intIp < ipRange[i+1] ) return true; } } function getProxyFromDirectIP(strIp) { var intIp = convertAddress(strIp); if ( isInSubnetRange(subnetIpRangeList, intIp) ) { return direct; } return ip_proxy; } function isInDomains(domain_dict, host) { var suffix; var pos1 = host.lastIndexOf('.'); suffix = host.substring(pos1 + 1); if (suffix == "cn") { return true; } var domains = domain_dict[suffix]; if ( domains === undefined ) { return false; } host = host.substring(0, pos1); var pos = host.lastIndexOf('.'); while(1) { if (pos <= 0) { if (hasOwnProperty.call(domains, host)) { return true; } else { return false; } } suffix = host.substring(pos + 1); if (hasOwnProperty.call(domains, suffix)) { return true; } pos = host.lastIndexOf('.', pos - 1); } } function FindProxyForURL(url, host) { if ( isPlainHostName(host) === true ) { return direct; } if ( check_ipv4(host) === true ) { return getProxyFromDirectIP(host); } if ( isInDomains(white_domains, host) === true ) { return nowall_proxy; } return wall_proxy; } ================================================ FILE: Trojan/Info.plist ================================================ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIconFile CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType $(PRODUCT_BUNDLE_PACKAGE_TYPE) CFBundleShortVersionString 2.1 CFBundleVersion 1 LSApplicationCategoryType public.app-category.developer-tools LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) LSUIElement NSHumanReadableCopyright Copyright © 2020 ParadiseDuo. All rights reserved. NSMainNibFile MainMenu NSPrincipalClass NSApplication NSSupportsAutomaticTermination NSSupportsSuddenTermination ================================================ FILE: Trojan/InstallHelper/install_helper.sh ================================================ #!/bin/sh cd "$(dirname "${BASH_SOURCE[0]}")" sudo mkdir -p "/Library/Application Support/Trojan/" sudo cp ProxyConfHelper "/Library/Application Support/Trojan/" sudo chown root:admin "/Library/Application Support/Trojan/ProxyConfHelper" sudo chmod +s "/Library/Application Support/Trojan/ProxyConfHelper" echo done ================================================ FILE: Trojan/InstallHelper/install_privoxy.sh ================================================ #!/bin/sh cd "$(dirname "${BASH_SOURCE[0]}")" privoxyVersion=3.0.28.static mkdir -p "$HOME/Library/Application Support/Trojan/privoxy-$privoxyVersion" cp -f privoxy "$HOME/Library/Application Support/Trojan/privoxy-$privoxyVersion/" cp -f libpcre.1.dylib "$HOME/Library/Application Support/Trojan/privoxy-$privoxyVersion/" rm -f "$HOME/Library/Application Support/Trojan/privoxy" ln -s "$HOME/Library/Application Support/Trojan/privoxy-$privoxyVersion/privoxy" "$HOME/Library/Application Support/Trojan/privoxy" ln -sf "$HOME/Library/Application Support/Trojan/privoxy-$privoxyVersion/libpcre.1.dylib" "$HOME/Library/Application Support/Trojan/libpcre.1.dylib" echo done ================================================ FILE: Trojan/InstallHelper/install_trojan.sh ================================================ #!/bin/sh cd "$(dirname "${BASH_SOURCE[0]}")" trojanVersion=1.16.0 mkdir -p "$HOME/Library/Application Support/Trojan/trojan-$trojanVersion" cp -f trojan "$HOME/Library/Application Support/Trojan/trojan-$trojanVersion/" rm -f "$HOME/Library/Application Support/Trojan/trojan" ln -s "$HOME/Library/Application Support/Trojan/trojan-$trojanVersion/trojan" "$HOME/Library/Application Support/Trojan/trojan" echo done ================================================ FILE: Trojan/InstallHelper/privoxy.config.example ================================================ listen-address {http} toggle 1 enable-remote-toggle 1 enable-remote-http-toggle 1 enable-edit-actions 0 enforce-blocks 0 buffer-limit 4096 forwarded-connect-retries 0 accept-intercepted-requests 0 allow-cgi-request-crunching 0 split-large-forms 0 keep-alive-timeout 5 socket-timeout 60 forward-socks5 / {socks5} . forward 192.168.*.*/ . forward 10.*.*.*/ . forward 127.*.*.*/ . ================================================ FILE: Trojan/InstallHelper/reload_conf_privoxy.sh ================================================ #!/bin/sh launchctl unload "$HOME/Library/LaunchAgents/MacOS.Trojan.http.plist" launchctl load "$HOME/Library/LaunchAgents/MacOS.Trojan.http.plist" ================================================ FILE: Trojan/InstallHelper/reload_conf_trojan.sh ================================================ #!/bin/sh launchctl unload "$HOME/Library/LaunchAgents/MacOS.Trojan.local.plist" launchctl load "$HOME/Library/LaunchAgents/MacOS.Trojan.local.plist" ================================================ FILE: Trojan/InstallHelper/remove_privoxy.sh ================================================ #!/bin/sh rm -rf "$HOME/Library/LaunchAgents/MacOS.Trojan.http.plist" ================================================ FILE: Trojan/InstallHelper/remove_trojan.sh ================================================ #!/bin/sh rm -f "$HOME/Library/LaunchAgents/MacOS.Trojan.local.plist" ================================================ FILE: Trojan/InstallHelper/start_privoxy.sh ================================================ #!/bin/sh launchctl load "$HOME/Library/LaunchAgents/MacOS.Trojan.http.plist" ================================================ FILE: Trojan/InstallHelper/start_trojan.sh ================================================ #!/bin/sh launchctl load "$HOME/Library/LaunchAgents/MacOS.Trojan.local.plist" ================================================ FILE: Trojan/InstallHelper/stop_privoxy.sh ================================================ #!/bin/sh launchctl unload "$HOME/Library/LaunchAgents/MacOS.Trojan.http.plist" ================================================ FILE: Trojan/InstallHelper/stop_trojan.sh ================================================ #!/bin/sh launchctl unload "$HOME/Library/LaunchAgents/MacOS.Trojan.local.plist" ================================================ FILE: Trojan/LaunchAgentHelper.swift ================================================ // // LaunchAgentHelper.swift // Trojan // // Created by ParadiseDuo on 2020/5/5. // Copyright © 2020 ParadiseDuo. All rights reserved. // import Foundation import CommonCrypto extension Data { func sha1() -> String { let data = self var digest = [UInt8](repeating: 0, count: Int(CC_SHA1_DIGEST_LENGTH)) CC_SHA1((data as NSData).bytes, CC_LONG(data.count), &digest) let hexBytes = digest.map { String(format: "%02hhx", $0) } return hexBytes.joined(separator: "") } } func getFileSHA1Sum(_ filepath: String) -> String { let fileMgr = FileManager.default if fileMgr.fileExists(atPath: filepath) { if let data = try? Data(contentsOf: URL(fileURLWithPath: filepath)) { return data.sha1() } } return "" } func generateTrojanLauchAgentPlist() -> Bool { let trojanPath = NSHomeDirectory() + APP_SUPPORT_DIR + "trojan" let launchAgentDirPath = NSHomeDirectory() + LAUNCH_AGENT_DIR let plistFilepath = launchAgentDirPath + LAUNCH_AGENT_CONF_TROJAN_NAME // Ensure launch agent directory is existed. let fileMgr = FileManager.default if !fileMgr.fileExists(atPath: launchAgentDirPath) { try! fileMgr.createDirectory(atPath: launchAgentDirPath, withIntermediateDirectories: true, attributes: nil) } let oldSha1Sum = getFileSHA1Sum(plistFilepath) let arguments = [trojanPath, "--log", LOG_PATH, "--config", CONFIG_PATH] // For a complete listing of the keys, see the launchd.plist manual page. let dict: NSMutableDictionary = [ "Label": "MacOS.Trojan.local", "WorkingDirectory": NSHomeDirectory() + APP_SUPPORT_DIR, "KeepAlive": true, "StandardOutPath": LOG_PATH, "StandardErrorPath": LOG_PATH, "ProgramArguments": arguments, "EnvironmentVariables": ["DYLD_LIBRARY_PATH": NSHomeDirectory() + APP_SUPPORT_DIR] ] dict.write(toFile: plistFilepath, atomically: true) let Sha1Sum = getFileSHA1Sum(plistFilepath) if oldSha1Sum != Sha1Sum { return true } else { return false } } func InstallTrojanLocal(finish: @escaping(_ success: Bool)->()) { let fileMgr = FileManager.default let homeDir = NSHomeDirectory() let appSupportDir = homeDir+APP_SUPPORT_DIR if !fileMgr.fileExists(atPath: appSupportDir + "trojan-\(TROJAN_VERSION)/trojan") { let bundle = Bundle.main let installerPath = bundle.path(forResource: "install_trojan.sh", ofType: nil) let task = Process.launchedProcess(launchPath: installerPath!, arguments: [""]) task.waitUntilExit() if task.terminationStatus == 0 { NSLog("Install trojan succeeded.") DispatchQueue.main.async { finish(true) } } else { NSLog("Install trojan failed.") DispatchQueue.main.async { finish(false) } } } else { finish(true) } } func ReloadConfTrojan(finish: @escaping(_ success: Bool)->()) { let bundle = Bundle.main let installerPath = bundle.path(forResource: "reload_conf_trojan.sh", ofType: nil) let task = Process.launchedProcess(launchPath: installerPath!, arguments: [""]) task.waitUntilExit() if task.terminationStatus == 0 { NSLog("Reload trojan succeeded.") DispatchQueue.main.async { finish(true) } } else { NSLog("Reload trojan failed.") DispatchQueue.main.async { finish(false) } } } func StartTrojan(finish: @escaping(_ success: Bool)->()) { let bundle = Bundle.main let installerPath = bundle.path(forResource: "start_trojan.sh", ofType: nil) let task = Process.launchedProcess(launchPath: installerPath!, arguments: [""]) task.waitUntilExit() if task.terminationStatus == 0 { NSLog("Start trojan succeeded.") DispatchQueue.main.async { finish(true) } } else { NSLog("Start trojan failed.") DispatchQueue.main.async { finish(false) } } } func StopTrojan(finish: @escaping(_ success: Bool)->()) { let bundle = Bundle.main let installerPath = bundle.path(forResource: "stop_trojan.sh", ofType: nil) let task = Process.launchedProcess(launchPath: installerPath!, arguments: [""]) task.waitUntilExit() if task.terminationStatus == 0 { NSLog("Stop trojan succeeded.") DispatchQueue.main.async { finish(true) } } else { NSLog("Stop trojan failed.") DispatchQueue.main.async { finish(false) } } } func RemoveTrojan(finish: @escaping(_ success: Bool)->()) { let bundle = Bundle.main let installerPath = bundle.path(forResource: "remove_trojan.sh", ofType: nil) let task = Process.launchedProcess(launchPath: installerPath!, arguments: [""]) task.waitUntilExit() if task.terminationStatus == 0 { NSLog("Remove trojan succeeded.") DispatchQueue.main.async { finish(true) } } else { NSLog("Remove trojan failed.") DispatchQueue.main.async { finish(false) } } } func writeTrojanConfFile(_ jsonString: String) -> Bool { let url = NSURL.fileURL(withPath: CONFIG_PATH) do { let oldSum = getFileSHA1Sum(CONFIG_PATH) try FileManager.default.removeItem(atPath: CONFIG_PATH) try jsonString.write(to: url, atomically: true, encoding: String.Encoding.utf8) let newSum = getFileSHA1Sum(CONFIG_PATH) DispatchQueue.main.asyncAfter(deadline: DispatchTime.now()+0.5) { Profiles.shared.save() } if oldSum == newSum { return false } return true } catch let error { print("saveProfile: ", error) } return false } func SyncTrojan(finish: @escaping(_ success: Bool)->()) { func Sync(_ suc: Bool){ SyncPrivoxy { SyncPac() finish(suc) } } var changed: Bool = false changed = changed || generateTrojanLauchAgentPlist() let mgr = Profile.shared if mgr.client != nil && mgr.client.remote_addr != "" { changed = changed || writeTrojanConfFile(Profile.shared.jsonString) if UserDefaults.standard.bool(forKey: USERDEFAULTS_TROJAN_ON) { ReloadConfTrojan { (suc) in Sync(suc) } } else { Sync(true) } } else { StopTrojan { (s) in Sync(true) } } } func generatePrivoxyLauchAgentPlist() -> Bool { let privoxyPath = NSHomeDirectory() + APP_SUPPORT_DIR + "privoxy" let logFilePath = NSHomeDirectory() + "/Library/Logs/privoxy.log" let launchAgentDirPath = NSHomeDirectory() + LAUNCH_AGENT_DIR let plistFilepath = launchAgentDirPath + LAUNCH_AGENT_CONF_PRIVOXY_NAME // Ensure launch agent directory is existed. let fileMgr = FileManager.default if !fileMgr.fileExists(atPath: launchAgentDirPath) { try! fileMgr.createDirectory(atPath: launchAgentDirPath, withIntermediateDirectories: true, attributes: nil) } let oldSha1Sum = getFileSHA1Sum(plistFilepath) let arguments = [privoxyPath, "--no-daemon", "privoxy.config"] // For a complete listing of the keys, see the launchd.plist manual page. let dict: NSMutableDictionary = [ "Label": "MacOS.Trojan.http", "WorkingDirectory": NSHomeDirectory() + APP_SUPPORT_DIR, "KeepAlive": true, "StandardOutPath": logFilePath, "StandardErrorPath": logFilePath, "ProgramArguments": arguments, "EnvironmentVariables": ["DYLD_LIBRARY_PATH": NSHomeDirectory() + APP_SUPPORT_DIR] ] dict.write(toFile: plistFilepath, atomically: true) let Sha1Sum = getFileSHA1Sum(plistFilepath) if oldSha1Sum != Sha1Sum { return true } else { return false } } func ReloadConfPrivoxy(finish: @escaping(_ success: Bool)->()) { let bundle = Bundle.main let installerPath = bundle.path(forResource: "reload_conf_privoxy.sh", ofType: nil) let task = Process.launchedProcess(launchPath: installerPath!, arguments: [""]) task.waitUntilExit() if task.terminationStatus == 0 { NSLog("Reload privoxy succeeded.") DispatchQueue.main.async { finish(true) } } else { NSLog("Reload privoxy failed.") DispatchQueue.main.async { finish(false) } } } func StartPrivoxy(finish: @escaping(_ success: Bool)->()) { if generatePrivoxyLauchAgentPlist() { let bundle = Bundle.main let installerPath = bundle.path(forResource: "start_privoxy.sh", ofType: nil) let task = Process.launchedProcess(launchPath: installerPath!, arguments: [""]) task.waitUntilExit() if task.terminationStatus == 0 { NSLog("Start privoxy succeeded.") DispatchQueue.main.async { finish(true) } } else { NSLog("Start privoxy failed.") DispatchQueue.main.async { finish(false) } } } else { NSLog("Start privoxy failed.") DispatchQueue.main.async { finish(false) } } } func StopPrivoxy(finish: @escaping(_ success: Bool)->()) { let bundle = Bundle.main let installerPath = bundle.path(forResource: "stop_privoxy.sh", ofType: nil) let task = Process.launchedProcess(launchPath: installerPath!, arguments: [""]) task.waitUntilExit() if task.terminationStatus == 0 { NSLog("Stop privoxy succeeded.") DispatchQueue.main.async { finish(true) } } else { NSLog("Stop privoxy failed.") DispatchQueue.main.async { finish(false) } } } func InstallPrivoxy(finish: @escaping(_ success: Bool)->()) { let fileMgr = FileManager.default let homeDir = NSHomeDirectory() let appSupportDir = homeDir+APP_SUPPORT_DIR if !fileMgr.fileExists(atPath: appSupportDir + "privoxy-\(PRIVOXY_VERSION)/privoxy") || !fileMgr.fileExists(atPath: appSupportDir + "libpcre.1.dylib") { let bundle = Bundle.main let installerPath = bundle.path(forResource: "install_privoxy.sh", ofType: nil) let task = Process.launchedProcess(launchPath: installerPath!, arguments: [""]) task.waitUntilExit() if task.terminationStatus == 0 { NSLog("Install privoxy succeeded.") DispatchQueue.main.async { finish(true) } } else { NSLog("Install privoxy failed.") DispatchQueue.main.async { finish(false) } } } else { finish(true) } } func RemovePrivoxy(finish: @escaping(_ success: Bool)->()) { let bundle = Bundle.main let installerPath = bundle.path(forResource: "remove_privoxy.sh", ofType: nil) let task = Process.launchedProcess(launchPath: installerPath!, arguments: [""]) task.waitUntilExit() if task.terminationStatus == 0 { NSLog("Remove privoxy succeeded.") DispatchQueue.main.async { finish(true) } } else { NSLog("Remove privoxy failed.") DispatchQueue.main.async { finish(false) } } } func writePrivoxyConfFile() -> Bool { do { let defaults = UserDefaults.standard let bundle = Bundle.main let examplePath = bundle.path(forResource: "privoxy.config.example", ofType: nil) var example = try String(contentsOfFile: examplePath!, encoding: .utf8) example = example.replacingOccurrences(of: "{http}", with: defaults.string(forKey: USERDEFAULTS_LOCAL_HTTP_LISTEN_ADDRESS)! + ":" + String(defaults.integer(forKey: USERDEFAULTS_LOCAL_HTTP_LISTEN_PORT))) example = example.replacingOccurrences(of: "{socks5}", with: defaults.string(forKey: USERDEFAULTS_LOCAL_SOCKS5_LISTEN_ADDRESS)! + ":" + String(defaults.integer(forKey: USERDEFAULTS_LOCAL_SOCKS5_LISTEN_PORT))) let data = example.data(using: .utf8) let filepath = NSHomeDirectory() + APP_SUPPORT_DIR + "privoxy.config" let oldSum = getFileSHA1Sum(filepath) try data?.write(to: URL(fileURLWithPath: filepath), options: .atomic) let newSum = getFileSHA1Sum(filepath) if oldSum == newSum { return false } return true } catch { NSLog("Write privoxy file failed.") } return false } func removePrivoxyConfFile() { do { let filepath = NSHomeDirectory() + APP_SUPPORT_DIR + "privoxy.config" try FileManager.default.removeItem(atPath: filepath) } catch { } } func SyncPrivoxy(finish: @escaping()->()) { var changed: Bool = false changed = changed || generatePrivoxyLauchAgentPlist() let mgr = Profile.shared if mgr.client != nil && mgr.client.remote_addr != "" { changed = changed || writePrivoxyConfFile() let on = UserDefaults.standard.bool(forKey: USERDEFAULTS_LOCAL_HTTP_ON) && UserDefaults.standard.bool(forKey: USERDEFAULTS_TROJAN_ON) if on { ReloadConfPrivoxy { (success) in finish() } } else { StopPrivoxy { (success) in removePrivoxyConfFile() finish() } } } else { finish() } } ================================================ FILE: Trojan/LoginServiceKit.swift ================================================ // // LoginServiceKit.swift // // LoginServiceKit // GitHub: https://github.com/clipy // HP: https://clipy-app.com // // Copyright © 2015-2019 Clipy Project. // // // Some code copyright 2009 Naotaka Morimoto. // // Much of this code was taken and adapted from GTMLoginItems of Google // Toolbox for Mac and QSBPreferenceWindowController of Quick Search Box // for the Mac by Google Inc. // This code is also released under Apache License, Version 2.0. // // Copyright (c) 2008-2009 Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // import Cocoa public final class LoginServiceKit: NSObject {} public extension LoginServiceKit { static func isExistLoginItems(at path: String = Bundle.main.bundlePath) -> Bool { return (loginItem(at: path) != nil) } @discardableResult static func addLoginItems(at path: String = Bundle.main.bundlePath) -> Bool { guard !isExistLoginItems(at: path) else { return false } guard let sharedFileList = LSSharedFileListCreate(nil, kLSSharedFileListSessionLoginItems.takeRetainedValue(), nil) else { return false } let loginItemList = sharedFileList.takeRetainedValue() let url = URL(fileURLWithPath: path) LSSharedFileListInsertItemURL(loginItemList, kLSSharedFileListItemBeforeFirst.takeRetainedValue(), nil, nil, url as CFURL, nil, nil) return true } @discardableResult static func removeLoginItems(at path: String = Bundle.main.bundlePath) -> Bool { guard isExistLoginItems(at: path) else { return false } guard let sharedFileList = LSSharedFileListCreate(nil, kLSSharedFileListSessionLoginItems.takeRetainedValue(), nil) else { return false } let loginItemList = sharedFileList.takeRetainedValue() let url = URL(fileURLWithPath: path) let loginItemsListSnapshot: NSArray = LSSharedFileListCopySnapshot(loginItemList, nil).takeRetainedValue() guard let loginItems = loginItemsListSnapshot as? [LSSharedFileListItem] else { return false } for loginItem in loginItems { guard let resolvedUrl = LSSharedFileListItemCopyResolvedURL(loginItem, 0, nil) else { continue } let itemUrl = resolvedUrl.takeRetainedValue() as URL guard url.absoluteString == itemUrl.absoluteString else { continue } LSSharedFileListItemRemove(loginItemList, loginItem) } return true } } private extension LoginServiceKit { static func loginItem(at path: String) -> LSSharedFileListItem? { guard !path.isEmpty else { return nil } guard let sharedFileList = LSSharedFileListCreate(nil, kLSSharedFileListSessionLoginItems.takeRetainedValue(), nil) else { return nil } let loginItemList = sharedFileList.takeRetainedValue() let url = URL(fileURLWithPath: path) let loginItemsListSnapshot: NSArray = LSSharedFileListCopySnapshot(loginItemList, nil).takeRetainedValue() guard let loginItems = loginItemsListSnapshot as? [LSSharedFileListItem] else { return nil } for loginItem in loginItems { guard let resolvedUrl = LSSharedFileListItemCopyResolvedURL(loginItem, 0, nil) else { continue } let itemUrl = resolvedUrl.takeRetainedValue() as URL guard url.absoluteString == itemUrl.absoluteString else { continue } return loginItem } return nil } } ================================================ FILE: Trojan/ModeSwitcher.swift ================================================ // // ModeSwitch.swift // Trojan // // Created by ParadiseDuo on 2020/5/12. // Copyright © 2020 MacClient. All rights reserved. // import Foundation enum Mode { case PAC case GLOBAL case ACLAUTO case WHITELIST case MANUAL case CHINA static func switchTo(_ mode: Mode) { let d = UserDefaults.standard if let currentMode = d.string(forKey: USERDEFAULTS_RUNNING_MODE), let acl = d.string(forKey: USERDEFAULTS_ACL_FILE_NAME) { switch mode { case .PAC: if currentMode == "auto" { return } case .GLOBAL: if currentMode == "global" { return } case .ACLAUTO: if currentMode == "whiteList" && acl == "gfwlist.acl" { return } case .WHITELIST: if currentMode == "whiteList" && acl == "chn.acl" { return } case .MANUAL: if currentMode == "manual" { return } case .CHINA: if currentMode == "whiteList" && acl == "backchn.acl" { return } } } switch mode { case .PAC: d.setValue("auto", forKey: USERDEFAULTS_RUNNING_MODE) d.setValue("", forKey: USERDEFAULTS_ACL_FILE_NAME) break case .GLOBAL: d.setValue("global", forKey: USERDEFAULTS_RUNNING_MODE) d.setValue("", forKey: USERDEFAULTS_ACL_FILE_NAME) break case .ACLAUTO: d.setValue("whiteList", forKey: USERDEFAULTS_RUNNING_MODE) d.setValue("gfwlist.acl", forKey: USERDEFAULTS_ACL_FILE_NAME) break case .WHITELIST: d.setValue("whiteList", forKey: USERDEFAULTS_RUNNING_MODE) d.setValue("chn.acl", forKey: USERDEFAULTS_ACL_FILE_NAME) break case .MANUAL: d.setValue("manual", forKey: USERDEFAULTS_RUNNING_MODE) d.setValue("", forKey: USERDEFAULTS_ACL_FILE_NAME) break case .CHINA: d.setValue("whiteList", forKey: USERDEFAULTS_RUNNING_MODE) d.setValue("backchn.acl", forKey: USERDEFAULTS_ACL_FILE_NAME) break } d.synchronize() SyncTrojan { (suc) in StatusMenuManager.applyConfig { (suc) in NotificationCenter.default.post(name: NOTIFY_UPDATE_RUNNING_MODE_MENU, object: nil) } } } } ================================================ FILE: Trojan/NetworkMonitor/NetSpeedMonitor.h ================================================ // // NetSpeedMonitor.h // Test // // Created by ParadiseDuo on 2020/3/22. // Copyright © 2020 ParadiseDuo. All rights reserved. // #import NS_ASSUME_NONNULL_BEGIN @interface NetSpeedMonitor : NSObject + (NSString *)primaryInterface; - (void)timeInterval:(NSTimeInterval)interval downloadAndUploadSpeed:(void (^)(double, double))speeds; @end NS_ASSUME_NONNULL_END ================================================ FILE: Trojan/NetworkMonitor/NetSpeedMonitor.m ================================================ // // NetSpeedMonitor.m // Test // // Created by ParadiseDuo on 2020/3/22. // Copyright © 2020 ParadiseDuo. All rights reserved. // #import "NetSpeedMonitor.h" #import #import #import #import #import #import @interface NetSpeedMonitor() @property(nonatomic, copy) NSMutableDictionary * lastData; @property(nonatomic) size_t sysctlBufferSize; @property(nonatomic) uint8_t *sysctlBuffer; @end @implementation NetSpeedMonitor void SystemProxyChangeCallBack(SCDynamicStoreRef store, CFArrayRef changedKeys,void *info){ [NetSpeedMonitor primaryInterface]; } - (instancetype)init { if (self = [super init]) { [NetSpeedMonitor primaryInterface]; [self addPrimaryInterfaceObserver]; self.lastData = [[NSMutableDictionary alloc] init]; self.sysctlBufferSize = 0; self.sysctlBuffer = malloc(self.sysctlBufferSize); [self netStatsForInterval:1.0]; return self; } return nil; } - (NSMutableDictionary *)netStatsForInterval:(NSTimeInterval)sampleInterval { int mib[] = {CTL_NET, PF_ROUTE, 0, 0, NET_RT_IFLIST,0}; size_t currentSize = 0; if (sysctl(mib, 6, NULL, ¤tSize, NULL, 0) != 0) { return nil; } if (!self.sysctlBuffer || (currentSize > self.sysctlBufferSize)) { if (self.sysctlBuffer) { free(self.sysctlBuffer); } self.sysctlBufferSize = 0; self.sysctlBuffer = malloc(currentSize); if (!self.sysctlBuffer) { return nil; } self.sysctlBufferSize = currentSize; } if (sysctl(mib, 6, self.sysctlBuffer, ¤tSize, NULL, 0) != 0) { return nil; } uint8_t *currentData = self.sysctlBuffer; uint8_t *currentDataEnd = self.sysctlBuffer + currentSize; NSMutableDictionary *newStats = [NSMutableDictionary dictionary]; while (currentData < currentDataEnd) { // Expecting interface data struct if_msghdr *ifmsg = (struct if_msghdr *)currentData; if (ifmsg->ifm_type != RTM_IFINFO) { currentData += ifmsg->ifm_msglen; continue; } // Must not be loopback if (ifmsg->ifm_flags & IFF_LOOPBACK) { currentData += ifmsg->ifm_msglen; continue; } // Only look at link layer items struct sockaddr_dl *sdl = (struct sockaddr_dl *)(ifmsg + 1); if (sdl->sdl_family != AF_LINK) { currentData += ifmsg->ifm_msglen; continue; } // Build the interface name to string so we can key off it NSString *interfaceName = [[NSString alloc] initWithBytes:sdl->sdl_data length:sdl->sdl_nlen encoding:NSASCIIStringEncoding]; if (!interfaceName) { currentData += ifmsg->ifm_msglen; continue; } // Load in old statistics for this interface NSDictionary *oldStats = [self.lastData objectForKey:interfaceName]; if (oldStats && (ifmsg->ifm_flags & IFF_UP)) { // Non-PPP data is sized at u_long, which means we need to deal // with 32-bit and 64-bit differently uint64_t lastTotalIn = [[oldStats objectForKey:@"totalin"] unsignedLongLongValue]; uint64_t lastTotalOut = [[oldStats objectForKey:@"totalout"] unsignedLongLongValue]; // New totals uint64_t totalIn = 0, totalOut = 0; // Values are always 32 bit and can overflow uint32_t lastifIn = [[oldStats objectForKey:@"ifin"] unsignedIntValue]; uint32_t lastifOut = [[oldStats objectForKey:@"ifout"] unsignedIntValue]; if (lastifIn > ifmsg->ifm_data.ifi_ibytes) { totalIn = lastTotalIn + ifmsg->ifm_data.ifi_ibytes + UINT_MAX - lastifIn + 1; } else { totalIn = lastTotalIn + (ifmsg->ifm_data.ifi_ibytes - lastifIn); } if (lastifOut > ifmsg->ifm_data.ifi_obytes) { totalOut = lastTotalOut + ifmsg->ifm_data.ifi_obytes + UINT_MAX - lastifOut + 1; } else { totalOut = lastTotalOut + (ifmsg->ifm_data.ifi_obytes - lastifOut); } // New deltas (64-bit overflow guard, full paranoia) uint64_t deltaIn = (totalIn > lastTotalIn) ? (totalIn - lastTotalIn)>>1 : 0; uint64_t deltaOut = (totalOut > lastTotalOut) ? (totalOut - lastTotalOut)>>1 : 0; [newStats setObject:[NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithUnsignedInt:ifmsg->ifm_data.ifi_ibytes], @"ifin", [NSNumber numberWithUnsignedInt:ifmsg->ifm_data.ifi_obytes], @"ifout", [NSNumber numberWithUnsignedLongLong:deltaIn], @"deltain", [NSNumber numberWithUnsignedLongLong:deltaOut], @"deltaout", [NSNumber numberWithUnsignedLongLong:totalIn], @"totalin", [NSNumber numberWithUnsignedLongLong:totalOut], @"totalout", nil] forKey:interfaceName]; } else { [newStats setObject:[NSDictionary dictionaryWithObjectsAndKeys: // Paranoia, is this where the neg numbers came from? [NSNumber numberWithUnsignedInt:ifmsg->ifm_data.ifi_ibytes], @"ifin", [NSNumber numberWithUnsignedInt:ifmsg->ifm_data.ifi_obytes], @"ifout", [NSNumber numberWithUnsignedLongLong:ifmsg->ifm_data.ifi_ibytes], @"totalin", [NSNumber numberWithUnsignedLongLong:ifmsg->ifm_data.ifi_obytes], @"totalout", nil] forKey:interfaceName]; } // Continue on currentData += ifmsg->ifm_msglen; } // Store and return self.lastData = [[NSMutableDictionary alloc] initWithDictionary:newStats]; return newStats; } + (NSString *)primaryInterface { #if TARGET_OS_IPHONE #if !TARGET_IPHONE_SIMULATOR && !TARGET_OS_TV const char* primaryInterface = "en0"; // WiFi interface on iOS #endif #else const char* primaryInterface = NULL; SCDynamicStoreRef store = SCDynamicStoreCreate(kCFAllocatorDefault, CFSTR("Trojan"), NULL, NULL); if (store) { CFPropertyListRef info = SCDynamicStoreCopyValue(store, CFSTR("State:/Network/Global/IPv4")); if (info) { NSString* interface = [(__bridge NSDictionary*)info objectForKey:@"PrimaryInterface"]; if (interface) { primaryInterface = [[NSString stringWithString:interface] UTF8String]; } CFRelease(info); } CFRelease(store); } if (primaryInterface == NULL) { primaryInterface = "lo0"; } #endif NSString * result = [NSString stringWithCString:primaryInterface encoding:NSUTF8StringEncoding]; [[NSUserDefaults standardUserDefaults] setObject:result forKey:@"primaryInterface"]; [[NSUserDefaults standardUserDefaults] synchronize]; return result; } - (void)addPrimaryInterfaceObserver { //https://developer.apple.com/library/archive/documentation/Networking/Conceptual/SystemConfigFrameworks/SC_UnderstandSchema/SC_UnderstandSchema.html SCDynamicStoreContext context = {0, (__bridge void * _Nullable)(self), NULL, NULL, NULL}; SCDynamicStoreRef dynStore = SCDynamicStoreCreate(kCFAllocatorDefault, CFBundleGetIdentifier(CFBundleGetMainBundle()), SystemProxyChangeCallBack, &context); const CFStringRef keys[3] = {CFSTR("State:/Network/Global/IPv4")}; CFArrayRef watchedKeys = CFArrayCreate(kCFAllocatorDefault, (const void **)keys, 1, &kCFTypeArrayCallBacks); if (SCDynamicStoreSetNotificationKeys(dynStore, NULL, watchedKeys)) { CFRelease(watchedKeys); CFRunLoopSourceRef rlSrc = SCDynamicStoreCreateRunLoopSource(kCFAllocatorDefault, dynStore, 0); CFRunLoopAddSource(CFRunLoopGetCurrent(), rlSrc, kCFRunLoopDefaultMode); CFRelease(rlSrc); }else { CFRelease(watchedKeys); CFRelease(dynStore); dynStore = NULL; } } - (void)timeInterval:(NSTimeInterval)interval downloadAndUploadSpeed:(void (^)(double, double))speeds { double down = 0.0, up = 0.0; NSMutableDictionary * result = [self netStatsForInterval:interval]; NSString * primaryInterface = [[NSUserDefaults standardUserDefaults] objectForKey:@"primaryInterface"]; NSDictionary * dic = nil; if (primaryInterface) { dic = [NSDictionary dictionaryWithDictionary:result[primaryInterface]]; } if (dic) { NSNumber * deltain = dic[@"deltain"]; NSNumber * deltaout = dic[@"deltaout"]; //这里返回的是字节,我把他转成了最小单位为kb,右移十位相当于除以1024,位运算速度快 down = deltain.intValue >> 10; up = deltaout.intValue >> 10; } speeds(down, up); } - (void)dealloc { if (self.sysctlBuffer) { free(self.sysctlBuffer); } } @end ================================================ FILE: Trojan/NetworkMonitor/SpeedTools.swift ================================================ // // SpeedTools.swift // Trojan // // Created by ParadiseDuo on 2020/5/1. // Copyright © 2020 MacClient. All rights reserved. // import Foundation class SpeedTools { static let KB:Float = 1 static let MB:Float = KB*1024 static let GB:Float = MB*1024 static let TB:Float = GB*1024 static var statusBarTextAttributes : [NSAttributedString.Key : Any] { let paragraphStyle = NSMutableParagraphStyle() paragraphStyle.maximumLineHeight = 10 paragraphStyle.paragraphSpacing = -7 paragraphStyle.alignment = .right return [ NSAttributedString.Key.font : NSFont.monospacedDigitSystemFont(ofSize: 9, weight: NSFont.Weight.medium), NSAttributedString.Key.paragraphStyle: paragraphStyle ] as [NSAttributedString.Key : Any] } static func formatRateData(_ data:Float) -> String { var result:Float var unit: String if data < SpeedTools.KB { result = 0 return "0 KB/s" } else if data < SpeedTools.MB { result = data/SpeedTools.KB unit = " KB/s" return String(format: "%0.0f", result) + unit } else if data < SpeedTools.GB { result = data/SpeedTools.MB unit = " MB/s" } else if data < SpeedTools.TB { result = data/SpeedTools.GB unit = " GB/s" } else { result = 1023 unit = " GB/s" } if result < 100 { return String(format: "%0.2f", result) + unit } else if result < 999 { return String(format: "%0.1f", result) + unit } else { return String(format: "%0.0f", result) + unit } } static func speedAttributedString(up: Double, down: Double) -> NSAttributedString { return NSAttributedString(string: "\n\(SpeedTools.formatRateData(Float(up))) ↑\n\(SpeedTools.formatRateData(Float(down))) ↓", attributes: SpeedTools.statusBarTextAttributes) } } ================================================ FILE: Trojan/PAC.swift ================================================ // // PAC.swift // Trojan // // Created by ParadiseDuo on 2020/5/4. // Copyright © 2020 ParadiseDuo. All rights reserved. // import Foundation func SyncPac() { var needGenerate = false let nowSocks5Port = UserDefaults.standard.integer(forKey: USERDEFAULTS_LOCAL_SOCKS5_LISTEN_PORT) let oldSocks5Port = UserDefaults.standard.integer(forKey: USERDEFAULTS_LOCAL_SOCKS5_LISTEN_PORT_OLD) if nowSocks5Port != oldSocks5Port { needGenerate = true UserDefaults.standard.set(nowSocks5Port, forKey: USERDEFAULTS_LOCAL_SOCKS5_LISTEN_PORT_OLD) UserDefaults.standard.synchronize() } let fileMgr = FileManager.default if !fileMgr.fileExists(atPath: PACRulesDirPath) { needGenerate = true } if !fileMgr.fileExists(atPath: ACLWhiteListFilePath) && !fileMgr.fileExists(atPath: ACLBackCHNFilePath) { needGenerate = true } if needGenerate { if !GeneratePACFile() { NSLog("GeneratePACFile failed!") } } } func GeneratePACFile() -> Bool { let fileMgr = FileManager.default // Maker the dir if rulesDirPath is not exesited. if !fileMgr.fileExists(atPath: PACRulesDirPath) { try! fileMgr.createDirectory(atPath: PACRulesDirPath, withIntermediateDirectories: true, attributes: nil) } // If gfwlist.txt is not exsited, copy from bundle if !fileMgr.fileExists(atPath: GFWListFilePath) { let src = Bundle.main.path(forResource: "gfwlist", ofType: "txt") try! fileMgr.copyItem(atPath: src!, toPath: GFWListFilePath) } // If user-rule.txt is not exsited, copy from bundle if !fileMgr.fileExists(atPath: PACUserRuleFilePath) { let src = Bundle.main.path(forResource: "user-rule", ofType: "txt") try! fileMgr.copyItem(atPath: src!, toPath: PACUserRuleFilePath) } // If chn.acl is not exsited, copy from bundle if !fileMgr.fileExists(atPath: ACLWhiteListFilePath) { let src = Bundle.main.path(forResource: "chn", ofType: "acl") try! fileMgr.copyItem(atPath: src!, toPath: ACLWhiteListFilePath) } // If backchn is not exsited, copy from bundle if !fileMgr.fileExists(atPath: ACLBackCHNFilePath) { let src = Bundle.main.path(forResource: "backchn", ofType: "acl") try! fileMgr.copyItem(atPath: src!, toPath: ACLBackCHNFilePath) } // If chn.acl if !fileMgr.fileExists(atPath: ACLGFWListFilePath) { let src = Bundle.main.path(forResource: "gfwlist", ofType: "acl") try! fileMgr.copyItem(atPath: src!, toPath: ACLGFWListFilePath) } let socks5Port = UserDefaults.standard.integer(forKey: USERDEFAULTS_LOCAL_SOCKS5_LISTEN_PORT) do { let gfwlist = try String(contentsOfFile: GFWListFilePath, encoding: String.Encoding.utf8) if let data = Data(base64Encoded: gfwlist, options: .ignoreUnknownCharacters) { let str = String(data: data, encoding: String.Encoding.utf8) var lines = str!.components(separatedBy: CharacterSet.newlines) do { let userRuleStr = try String(contentsOfFile: PACUserRuleFilePath, encoding: String.Encoding.utf8) let userRuleLines = userRuleStr.components(separatedBy: CharacterSet.newlines) lines = userRuleLines + lines.filter { (line) in // 如果用户为相同的网址提供相同的规则,则忽略来自gwf的规则 var i = line.startIndex while i < line.endIndex { if line[i] == "@" || line[i] == "|" { i = line.index(after: i) continue } break } if i == line.startIndex { return !userRuleLines.contains(line) } return !userRuleLines.contains(String(line[i...])) } ACLFromUserRule(userRuleLines: userRuleLines) } catch { NSLog("Not found user-rule.txt") } // Filter empty and comment lines lines = lines.filter({ (s: String) -> Bool in if s.isEmpty { return false } let c = s[s.startIndex] if c == "!" || c == "[" { return false } return true }) do { // rule lines to json array let rulesJsonData: Data = try JSONSerialization.data(withJSONObject: lines, options: .prettyPrinted) let rulesJsonStr = String(data: rulesJsonData, encoding: String.Encoding.utf8) // Get raw pac js let jsPath = Bundle.main.url(forResource: "abp", withExtension: "js") let jsData = try? Data(contentsOf: jsPath!) var jsStr = String(data: jsData!, encoding: String.Encoding.utf8) // Replace rules placeholder in pac js jsStr = jsStr!.replacingOccurrences(of: "__RULES__" , with: rulesJsonStr!) // Replace __SOCKS5PORT__ palcholder in pac js let result = jsStr!.replacingOccurrences(of: "__SOCKS5PORT__" , with: "\(socks5Port)") // Write the pac js to file. try result.data(using: String.Encoding.utf8)? .write(to: URL(fileURLWithPath: PACFilePath), options: .atomic) return true } catch { } } } catch { NSLog("Not found gfwlist.txt") } return false } func ACLFromUserRule(userRuleLines:[String]){ do { var AutoACL = try String(contentsOfFile: ACLGFWListFilePath, encoding: String.Encoding.utf8) var WhiteACL = try String(contentsOfFile: ACLWhiteListFilePath, encoding: String.Encoding.utf8) let rule = userRuleLines.filter({ (s: String) -> Bool in if s.isEmpty { return false } let c = s[s.startIndex] if c == "!" || c == "[" { return false } return true }) rule.forEach({ (s: String) -> Void in // add the @@ to whitelist and other to GFWList if (s.hasPrefix("@@")){ let str = s.replacingOccurrences(of: "@@", with: "").components(separatedBy: ".").joined(separator:"\\.").replacingOccurrences(of: "*\\.", with: "^(.*\\.)?") if (!WhiteACL.contains(str)){ WhiteACL += (str + "$\n") } } if (s.hasPrefix("||")){ let str = s.replacingOccurrences(of: "||", with: "").components(separatedBy: ".").joined(separator:"\\.").replacingOccurrences(of: "*\\.", with: "^(.*\\.)?") if (!AutoACL.contains(str)){ AutoACL += (str + "$\n") } } }) // write file back to ACL try WhiteACL.data(using: String.Encoding.utf8)? .write(to: URL(fileURLWithPath: ACLWhiteListFilePath), options: .atomic) try AutoACL.data(using: String.Encoding.utf8)? .write(to: URL(fileURLWithPath: ACLGFWListFilePath), options: .atomic) } catch { } } ================================================ FILE: Trojan/Profile/Configuration.swift ================================================ // // Configuration.swift // Trojan // // Created by ParadiseDuo on 2020/4/2. // Copyright © 2020 Mac. All rights reserved. // import Foundation extension String { var localized: String { return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "") } } // Trojan Helper let TROJAN_START = Notification.Name("TROJAN_START") let TROJAN_STOP = Notification.Name("TROJAN_STOP") let USERDEFAULTS_TROJAN_ON = "TROJAN_ON" let USERDEFAULTS_PROFILE = "Profile" let CONFIG_PATH = NSHomeDirectory()+"/Documents/Trojan/trojan_client.json" let CONFIG_PATH_OLD = NSHomeDirectory()+"/Documents/trojan_client.json" // Version Checker Helper let _VERSION_XML_URL = "https://raw.githubusercontent.com/paradiseduo/Trojan/master/Trojan/Info.plist" let _VERSION_XML_LOCAL:String = Bundle.main.bundlePath + "/Contents/Info.plist" // Log Helper let LOG_PATH = "/usr/local/var/log/trojan" let LOG_CLEAN_FINISH = Notification.Name("LOG_CLEAN_FINISH") let ISSUES_URL = "https://github.com/paradiseduo/Trojan/issues" let RELEASE_URL = "https://github.com/paradiseduo/Trojan/releases" let PACRulesDirPath = NSHomeDirectory() + "/Documents/Trojan/" let PACUserRuleFilePath = PACRulesDirPath + "user-rule.txt" let PACFilePath = PACRulesDirPath + "gfwlist.js" let GFWListFilePath = PACRulesDirPath + "gfwlist.txt" let ACLWhiteListFilePath = PACRulesDirPath + "chn.acl" let ACLBackCHNFilePath = PACRulesDirPath + "backchn.acl" let ACLGFWListFilePath = PACRulesDirPath + "gfwlist.acl" let PRIVOXY_VERSION = "3.0.28.static" let APP_SUPPORT_DIR = "/Library/Application Support/Trojan/" let LAUNCH_AGENT_DIR = "/Library/LaunchAgents/" let LAUNCH_AGENT_CONF_PRIVOXY_NAME = "MacOS.Trojan.http.plist" let TROJAN_VERSION = "1.16.0" let LAUNCH_AGENT_CONF_TROJAN_NAME = "MacOS.Trojan.local.plist" let NOTIFY_HTTP_CONF_CHANGED = Notification.Name("NOTIFY_HTTP_CONF_CHANGED") let NOTIFY_UPDATE_RUNNING_MODE_MENU = Notification.Name("NOTIFY_UPDATE_RUNNING_MODE_MENU") let NOTIFY_SERVER_PROFILES_CHANGED = Notification.Name("NOTIFY_SERVER_PROFILES_CHANGED") let NOTIFY_SHOW_NETWORK_MONITOR = Notification.Name("NOTIFY_SHOW_NETWORK_MONITOR") let NOTIFY_REFRESH_SERVERS = Notification.Name("NOTIFY_REFRESH_SERVERS") ================================================ FILE: Trojan/Profile/DefaultsConfig.h ================================================ // // DefaultsConfig.h // Trojan // // Created by ParadiseDuo on 2020/5/4. // Copyright © 2020 ParadiseDuo. All rights reserved. // #ifndef DefaultsConfig_h #define DefaultsConfig_h static NSString * const USERDEFAULTS_GFW_LIST_URL = @"GFWListURL"; static NSString * const USERDEFAULTS_ACL_WHITE_LIST_URL = @"ACLWhiteListURL"; static NSString * const USERDEFAULTS_ACL_AUTO_LIST_URL = @"ACLAutoListURL"; static NSString * const USERDEFAULTS_ACL_PROXY_BACK_CHN_URL = @"ACLProxyBackCHNURL"; static NSString * const USERDEFAULTS_RUNNING_MODE = @"RunningMode"; static NSString * const USERDEFAULTS_ACL_FILE_NAME = @"ACLFileName"; static NSString * const USERDEFAULTS_LOCAL_SOCKS5_LISTEN_PORT = @"LocalSocks5.ListenPort"; static NSString * const USERDEFAULTS_LOCAL_SOCKS5_LISTEN_ADDRESS = @"LocalSocks5.ListenAddress"; static NSString * const USERDEFAULTS_LOCAL_HTTP_LISTEN_ADDRESS = @"LocalHTTP.ListenAddress"; static NSString * const USERDEFAULTS_LOCAL_HTTP_LISTEN_PORT = @"LocalHTTP.ListenPort"; static NSString * const USERDEFAULTS_LOCAL_SOCKS5_LISTEN_PORT_OLD = @"LocalSocks5.ListenPort.Old"; static NSString * const USERDEFAULTS_PAC_SERVER_LISTEN_ADDRESS = @"PacServer.ListenAddress"; static NSString * const USERDEFAULTS_PAC_SERVER_LISTEN_PORT = @"PacServer.ListenPort"; static NSString * const USERDEFAULTS_LOCAL_HTTP_ON = @"LocalHTTPOn"; static NSString * const USERDEFAULTS_LOCAL_HTTP_FOLLOW_GLOBAL = @"LocalHTTP.FollowGlobal"; static NSString * const USERDEFAULTS_AUTO_CONFIGURE_NETWORK_SERVICES = @"AutoConfigureNetworkServices"; static NSString * const USERDEFAULTS_PROXY4_NETWORK_SERVICES = @"Proxy4NetworkServices"; static NSString * const USERDEFAULTS_AUTO_CHECK_UPDATE = @"USERDEFAULTS_AUTO_CHECK_UPDATE"; static NSString * const USERDEFAULTS_ENABLE_SHOW_SPEED = @"USERDEFAULTS_ENABLE_SHOW_SPEED"; static NSString * const USERDEFAULTS_FIXED_NETWORK_SPEED_VIEW_WIDTH = @"USERDEFAULTS_FIXED_NETWORK_SPEED_VIEW_WIDTH"; static NSString * const USERDEFAULTS_SUBSCRIBES = @"USERDEFAULTS_SUBSCRIBES"; static NSString * const USERDEFAULTS_SPEED_TEST_AFTER_SUBSCRIPTION = @"USERDEFAULTS_SPEED_TEST_AFTER_SUBSCRIPTION"; static NSString * const USERDEFAULTS_FASTEST_NODE = @"USERDEFAULTS_FASTEST_NODE"; #endif /* DefaultsConfig_h */ ================================================ FILE: Trojan/Profile/Json.swift ================================================ // // Json.swift // TrojanMac // // Created by ParadiseDuo on 2020/4/7. // Copyright © 2020 ParadiseDuo. All rights reserved. // import Foundation struct Client: Codable { var run_type: String var local_addr: String var local_port: Int var password: [String] var remote_addr: String var remote_port: Int var log_level: Int? var ssl: SSL var tcp: TCP var uuid: String var group: String private enum CodingKeys: String, CodingKey { case run_type = "run_type" case local_addr = "local_addr" case local_port = "local_port" case remote_addr = "remote_addr" case remote_port = "remote_port" case password = "password" case log_level = "log_level" case ssl = "ssl" case tcp = "tcp" case uuid = "uuid" case group = "group" } func json() -> [String: AnyObject] { let c = self let ssl: [String: AnyObject] = ["verify": NSNumber(value: c.ssl.verify ?? true) as AnyObject, "verify_hostname": NSNumber(value: c.ssl.verify_hostname ?? true) as AnyObject, "cert": c.ssl.cert as AnyObject, "cipher": c.ssl.cipher as AnyObject, "cipher_tls13": c.ssl.cipher_tls13 as AnyObject, "sni": c.ssl.sni as AnyObject, "alpn": c.ssl.alpn as AnyObject, "reuse_session": NSNumber(value: c.ssl.reuse_session ?? true) as AnyObject, "session_ticket": NSNumber(value: c.ssl.session_ticket ?? false) as AnyObject, "curves": c.ssl.curves as AnyObject, "plain_http_response": c.ssl.plain_http_response as AnyObject, "dhparam": c.ssl.dhparam as AnyObject, "prefer_server_cipher": NSNumber(value: c.ssl.prefer_server_cipher ?? true) as AnyObject ] let tcp: [String: AnyObject] = ["no_delay": NSNumber(value: c.tcp.no_delay ?? true) as AnyObject, "keep_alive": NSNumber(value: c.tcp.keep_alive ?? true) as AnyObject, "reuse_port": NSNumber(value: c.tcp.reuse_port ?? false) as AnyObject, "fast_open": NSNumber(value: c.tcp.fast_open ?? false) as AnyObject, "fast_open_qlen": NSNumber(value: c.tcp.fast_open_qlen ?? 20) as AnyObject ] var uuid = UUID().uuidString if c.uuid.count > 0 { uuid = c.uuid } let conf: [String: AnyObject] = ["run_type": c.run_type as AnyObject, "local_addr": c.local_addr as AnyObject, "local_port": NSNumber(value: c.local_port) as AnyObject, "remote_addr": c.remote_addr as AnyObject, "remote_port": NSNumber(value: c.remote_port) as AnyObject, "password": c.password as AnyObject, "log_level": NSNumber(value: c.log_level ?? 1) as AnyObject, "ssl": ssl as AnyObject, "tcp": tcp as AnyObject, "uuid": uuid as AnyObject, "group": c.group as AnyObject ] return conf } func jsonString() -> String { do { var data: Data if #available(OSX 10.13, *) { data = try JSONSerialization.data(withJSONObject: self.json(), options: [.prettyPrinted, .sortedKeys]) } else { data = try JSONSerialization.data(withJSONObject: self.json(), options: [.prettyPrinted]) } let convertedString = String(data: data, encoding: String.Encoding.utf8) return convertedString ?? "" } catch let myJSONError { print(myJSONError) } return "" } } struct SSL: Codable { var verify: Bool? var verify_hostname: Bool? var cert: String? var cipher: String? var cipher_tls13: String? var sni: String? var alpn: [String]? var reuse_session: Bool? var session_ticket: Bool? var curves: String? var plain_http_response: String? var dhparam: String? var prefer_server_cipher: Bool? private enum CodingKeys: String, CodingKey { case verify = "verify" case verify_hostname = "verify_hostname" case cert = "cert" case cipher = "cipher" case cipher_tls13 = "cipher_tls13" case sni = "sni" case alpn = "alpn" case reuse_session = "reuse_session" case session_ticket = "session_ticket" case curves = "curves" case plain_http_response = "plain_http_response" case dhparam = "dhparam" case prefer_server_cipher = "prefer_server_cipher" } } struct TCP: Codable { var no_delay: Bool? var keep_alive: Bool? var reuse_port: Bool? var fast_open: Bool? var fast_open_qlen: Int? private enum CodingKeys: String, CodingKey { case no_delay = "no_delay" case keep_alive = "keep_alive" case reuse_port = "reuse_port" case fast_open = "fast_open" case fast_open_qlen = "fast_open_qlen" } } ================================================ FILE: Trojan/Profile/Profile.swift ================================================ // // Profile.swift // Trojan // // Created by ParadiseDuo on 2020/3/31. // Copyright © 2020 MacClient. All rights reserved. // import Foundation //当前选中的Profile class Profile { static let shared = Profile() var client: Client! var name = "Default" var latency = NSNumber(value: Double.infinity) var json: [String: AnyObject] { get { return self.client.json() } } var jsonString: String { get { return self.client.jsonString() } } func saveProfile() { UserDefaults.standard.setValue(self.client.local_addr, forKey: USERDEFAULTS_LOCAL_SOCKS5_LISTEN_ADDRESS) UserDefaults.standard.setValue(NSNumber(value: self.client.local_port), forKey: USERDEFAULTS_LOCAL_SOCKS5_LISTEN_PORT) UserDefaults.standard.synchronize() let manager = FileManager.default if manager.fileExists(atPath: CONFIG_PATH) { do { try self.jsonString.write(toFile: CONFIG_PATH, atomically: true, encoding: String.Encoding.utf8) } catch let e { print("saveProfile error", e) } } else { manager.createFile(atPath: CONFIG_PATH, contents: nil, attributes: nil) do { try self.jsonString.write(toFile: CONFIG_PATH, atomically: true, encoding: String.Encoding.utf8) } catch let e { print("saveProfile error", e) } } } func loadProfile() { let manager = FileManager.default if manager.fileExists(atPath: CONFIG_PATH) { do { if let data = manager.contents(atPath: CONFIG_PATH) { let f = try JSONDecoder().decode(Client.self, from: data) self.client = f Profiles.shared.getName(profile: self) { (n) in self.name = n } } else { self.loadDefaultProfile() } }catch let error { print("loadProfile: ", error) self.loadDefaultProfile() } } else { self.loadDefaultProfile() } self.saveProfile() } func loadDefaultProfile() { let run_type: String = "client" let local_addr: String = "127.0.0.1" let local_port: Int = 10800 let remote_addr: String = "usol97.ovod.me" let remote_port: Int = 443 let password: [String] = ["WxUUph"] let log_level: Int = 1 let verify: Bool = true let verify_hostname: Bool = true let cert: String = "" let cipher: String = "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA:DES-CBC3-SHA" let cipher_tls13: String = "TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384" let sni: String = "" let alpn: [String] = ["h2","http/1.1"] let reuse_session: Bool = true let session_ticket: Bool = false let curves: String = "" let no_delay: Bool = true let keep_alive: Bool = true let reuse_port: Bool = false let fast_open: Bool = false let fast_open_qlen: Int = 20 let dhparam: String = "" let plain_http_response: String = "" let prefer_server_cipher: Bool = true let tcp = TCP(no_delay: no_delay, keep_alive: keep_alive, reuse_port: reuse_port, fast_open: fast_open, fast_open_qlen: fast_open_qlen) let ssl = SSL(verify: verify, verify_hostname: verify_hostname, cert: cert, cipher: cipher, cipher_tls13: cipher_tls13, sni: sni, alpn: alpn, reuse_session: reuse_session, session_ticket: session_ticket, curves: curves, plain_http_response: plain_http_response, dhparam: dhparam, prefer_server_cipher: prefer_server_cipher) let c = Client(run_type: run_type, local_addr: local_addr, local_port: local_port, password: password, remote_addr: remote_addr, remote_port: remote_port, log_level: log_level, ssl: ssl, tcp: tcp, uuid: UUID().uuidString, group: "") self.client = c self.name = "Default" } func arguments() -> [String] { return ["--log", LOG_PATH, "--config", CONFIG_PATH] } func equal(profile: Profile) -> Bool { return (client.remote_addr == profile.client.remote_addr && client.remote_port == profile.client.remote_port && client.password == profile.client.password) } } class Profiles { static let shared = Profiles() private var p = [Profile]() var profiles: [Profile] { get { return self.p.sorted { (p1, p2) -> Bool in return p1.name < p2.name } } set(newValue) { self.p = newValue } } var speeds = [String: String]() func count() -> Int { return profiles.count } func getName(profile: Profile, name: (String)->()) { for item in profiles { if item.equal(profile: profile) { name(item.name) } } } func itemAtIndex(_ index: Int) -> Profile? { if index < profiles.count { return profiles[index] } return nil } func update(_ profile: Profile) { for (i, item) in profiles.enumerated() { if item.equal(profile: profile) { profiles[i] = profile break } } } @discardableResult func add(_ profile: Profile) -> Bool { if profiles.contains(where: { (p) -> Bool in return p.equal(profile: profile) }) { return false } else { profiles.append(profile) return true } } @discardableResult func remove(_ profile: Profile) -> Bool { if profiles.contains(where: { (p) -> Bool in return p.equal(profile: profile) }) { profiles.removeAll { (p) -> Bool in return p.equal(profile: profile) } return true } else { return false } } func remove(at index: Int) -> Profile { return profiles.remove(at: index) } func insert(_ newElement: Profile, at i: Int) { profiles.insert(newElement, at: i) } func save() { var dic = [String: String]() for item in profiles { dic[item.name] = item.jsonString } UserDefaults.standard.set(dic, forKey: USERDEFAULTS_PROFILE) UserDefaults.standard.synchronize() } func load() { profiles.removeAll(keepingCapacity: true) if let dic = UserDefaults.standard.object(forKey: USERDEFAULTS_PROFILE) as? [String: String], dic.keys.count > 0 { for key in dic.keys { let profileString = dic[key] do { if let d = profileString!.data(using: String.Encoding.utf8) { let f = try JSONDecoder().decode(Client.self, from: d) let p = Profile() p.client = f p.name = key profiles.append(p) } }catch let e { print("Profiles load: ", e) } } Profile.shared.loadProfile() } else { Profile.shared.loadProfile() profiles.append(Profile.shared) } } static func isDuplicatedOrExists(_ profile: Profile) -> (Bool, Bool, Int) { for (i, value) in Profiles.shared.profiles.enumerated() { if value.equal(profile: profile) { //相同节点(不需要更新配置) return (true, true, i) } else if (value.client.remote_addr == profile.client.remote_addr && value.client.remote_port == profile.client.remote_port) { //存在节点(但是更新了配置) return (true, false, i) } } return (false, false, -1) } } ================================================ FILE: Trojan/ProxyConfHelper.h ================================================ // // ProxyConfHelper.h // Trojan // // Created by ParadiseDuo on 2020/5/3. // Copyright © 2020 ParadiseDuo. All rights reserved. // #import #import #import @interface ProxyConfHelper : NSObject + (BOOL)isVersionOk; + (void)install; + (void)enablePACProxy:(NSString*) PACFilePath; + (void)enableGlobalProxy; + (void)disableProxy:(NSString*) PACFilePath; + (NSString*)startPACServer:(NSString*) PACFilePath; + (void)stopPACServer; + (void)enableWhiteListProxy; @end ================================================ FILE: Trojan/ProxyConfHelper.m ================================================ // // ProxyConfHelper.m // Trojan // // Created by ParadiseDuo on 2020/5/3. // Copyright © 2020 ParadiseDuo. All rights reserved. // #import "ProxyConfHelper.h" #import "DefaultsConfig.h" #import "../ProxyConfHelper/version.h" #define kTrojanHelper @"/Library/Application Support/Trojan/ProxyConfHelper" @implementation ProxyConfHelper GCDWebServer *webServer = nil; + (BOOL)isVersionOk { NSTask *task; task = [[NSTask alloc] init]; [task setLaunchPath:kTrojanHelper]; NSArray *args; args = [NSArray arrayWithObjects:@"-v", nil]; [task setArguments: args]; NSPipe *pipe; pipe = [NSPipe pipe]; [task setStandardOutput:pipe]; NSFileHandle *fd; fd = [pipe fileHandleForReading]; [task launch]; NSData *data; data = [fd readDataToEndOfFile]; NSString *str; str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; if (![str isEqualToString:kProxyConfHelperVersion]) { return NO; } return YES; } + (void)install { NSFileManager *fileManager = [NSFileManager defaultManager]; if (![fileManager fileExistsAtPath:kTrojanHelper] || ![self isVersionOk]) { NSString *helperPath = [NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] resourcePath], @"install_helper.sh"]; NSLog(@"run install script: %@", helperPath); NSDictionary *error; NSString *script = [NSString stringWithFormat:@"do shell script \"bash %@\" with administrator privileges", helperPath]; NSAppleScript *appleScript = [[NSAppleScript new] initWithSource:script]; if ([appleScript executeAndReturnError:&error]) { NSLog(@"installation success"); } else { NSLog(@"installation failure"); } } } + (void)callHelper:(NSArray*) arguments { NSTask *task; task = [[NSTask alloc] init]; [task setLaunchPath:kTrojanHelper]; // this log is very important NSLog(@"run Trojan helper: %@ %@", kTrojanHelper, arguments); [task setArguments:arguments]; NSPipe *stdoutpipe; stdoutpipe = [NSPipe pipe]; [task setStandardOutput:stdoutpipe]; NSPipe *stderrpipe; stderrpipe = [NSPipe pipe]; [task setStandardError:stderrpipe]; NSFileHandle *file; file = [stdoutpipe fileHandleForReading]; [task launch]; NSData *data; data = [file readDataToEndOfFile]; NSString *string; string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; if (string.length > 0) { NSLog(@"%@", string); } file = [stderrpipe fileHandleForReading]; data = [file readDataToEndOfFile]; string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; if (string.length > 0) { NSLog(@"%@", string); } } + (void)addArguments4ManualSpecifyNetworkServices:(NSMutableArray*) args { NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; if (![defaults boolForKey:USERDEFAULTS_AUTO_CONFIGURE_NETWORK_SERVICES]) { NSArray* serviceKeys = [defaults arrayForKey:USERDEFAULTS_PROXY4_NETWORK_SERVICES]; if (serviceKeys) { for (NSString* key in serviceKeys) { [args addObject:@"--network-service"]; [args addObject:key]; } } } } + (void)enablePACProxy:(NSString*) PACFilePath { //start server here and then using the string next line //next two lines can open gcdwebserver and work around pac file NSString *PACURLString = [self startPACServer: PACFilePath];//hi 可以切换成定制pac文件路径来达成使用定制文件路径 NSURL* url = [NSURL URLWithString: PACURLString]; NSMutableArray* args = [@[@"--mode", @"auto", @"--pac-url", [url absoluteString]]mutableCopy]; [self addArguments4ManualSpecifyNetworkServices:args]; [self callHelper:args]; } + (void)enableGlobalProxy { NSUInteger port = [[NSUserDefaults standardUserDefaults] integerForKey:USERDEFAULTS_LOCAL_SOCKS5_LISTEN_PORT]; NSMutableArray* args = [@[@"--mode", @"global", @"--port", [NSString stringWithFormat:@"%lu", (unsigned long)port]]mutableCopy]; if ([[NSUserDefaults standardUserDefaults] boolForKey:USERDEFAULTS_LOCAL_HTTP_ON] && [[NSUserDefaults standardUserDefaults] boolForKey:USERDEFAULTS_LOCAL_HTTP_FOLLOW_GLOBAL]) { NSUInteger privoxyPort = [[NSUserDefaults standardUserDefaults]integerForKey:USERDEFAULTS_LOCAL_HTTP_LISTEN_PORT]; [args addObject:@"--privoxy-port"]; [args addObject:[NSString stringWithFormat:@"%lu", (unsigned long)privoxyPort]]; } [self addArguments4ManualSpecifyNetworkServices:args]; [self callHelper:args]; [self stopPACServer]; } + (void)enableWhiteListProxy { // 基于全局socks5代理下使用ACL文件来进行白名单代理 不需要使用pac文件 NSUInteger port = [[NSUserDefaults standardUserDefaults]integerForKey:USERDEFAULTS_LOCAL_SOCKS5_LISTEN_PORT]; NSMutableArray* args = [@[@"--mode", @"global", @"--port", [NSString stringWithFormat:@"%lu", (unsigned long)port]]mutableCopy]; if ([[NSUserDefaults standardUserDefaults] boolForKey:USERDEFAULTS_LOCAL_HTTP_ON] && [[NSUserDefaults standardUserDefaults] boolForKey:USERDEFAULTS_LOCAL_HTTP_FOLLOW_GLOBAL]) { NSUInteger privoxyPort = [[NSUserDefaults standardUserDefaults]integerForKey:USERDEFAULTS_LOCAL_HTTP_LISTEN_PORT]; [args addObject:@"--privoxy-port"]; [args addObject:[NSString stringWithFormat:@"%lu", (unsigned long)privoxyPort]]; } [self addArguments4ManualSpecifyNetworkServices:args]; [self callHelper:args]; [self stopPACServer]; } + (void)disableProxy:(NSString*) PACFilePath { NSMutableArray* args = [@[@"--mode", @"off"]mutableCopy]; [self addArguments4ManualSpecifyNetworkServices:args]; [self callHelper:args]; [self stopPACServer]; } + (NSString*)startPACServer:(NSString*) PACFilePath { //接受参数为以后使用定制PAC文件 NSData * originalPACData; NSString * routerPath = @"/proxy.pac"; if ([PACFilePath isEqual: @"hi"]) {//用默认路径来代替 PACFilePath = [NSString stringWithFormat:@"%@/%@", NSHomeDirectory(), @"/Documents/Trojan/gfwlist.js"]; originalPACData = [NSData dataWithContentsOfFile: [NSString stringWithFormat:@"%@/%@", NSHomeDirectory(), @"/Documents/Trojan/gfwlist.js"]]; }else{//用定制路径来代替 originalPACData = [NSData dataWithContentsOfFile: [NSString stringWithFormat:@"%@/%@/%@", NSHomeDirectory(), @".Trojan", PACFilePath]]; routerPath = [NSString stringWithFormat:@"/%@",PACFilePath]; } [self stopPACServer]; webServer = [[GCDWebServer alloc] init]; [webServer addHandlerForMethod:@"GET" path: routerPath requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest *request) { return [GCDWebServerDataResponse responseWithData: originalPACData contentType:@"application/Trojan-proxy-autoconfig"]; }]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString * address = [defaults stringForKey:USERDEFAULTS_PAC_SERVER_LISTEN_ADDRESS]; int port = (short)[defaults integerForKey:USERDEFAULTS_PAC_SERVER_LISTEN_PORT]; [webServer startWithOptions:@{@"BindToLocalhost":@YES, @"Port":@(port)} error:nil]; return [NSString stringWithFormat:@"%@%@:%d%@",@"http://",address,port,routerPath]; } + (void)stopPACServer { if ([webServer isRunning]) { [webServer stop]; } } @end ================================================ FILE: Trojan/StatusMenuManager.swift ================================================ // // StatusMenuManager.swift // Trojan // // Created by ParadiseDuo on 2020/3/31. // Copyright © 2020 Mac. All rights reserved. // import Cocoa class StatusMenuManager: NSObject { let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength) var speedItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength) @IBOutlet weak var statusMenu: NSMenu! @IBOutlet weak var switchLabel: NSMenuItem! @IBOutlet weak var toggleRunning: NSMenuItem! @IBOutlet weak var copyCommandItem: NSMenuItem! @IBOutlet weak var pacItem: NSMenuItem! @IBOutlet weak var whiteListItem: NSMenuItem! @IBOutlet weak var globalItem: NSMenuItem! @IBOutlet weak var manualItem: NSMenuItem! @IBOutlet weak var aclAutoItem: NSMenuItem! @IBOutlet weak var backChinaItem: NSMenuItem! @IBOutlet weak var aclModeItem: NSMenuItem! @IBOutlet weak var speedMenu: NSMenu! @IBOutlet weak var fixedWidth: NSMenuItem! @IBOutlet weak var serversMenuItem: NSMenuItem! var settingW: SettingWindowController! var settingsW: SettingsWIndowController! var logW: LogWindowController! var toastW: ToastWindowController! var subscribePreferenceWinCtrl: SubscribePreferenceWindowController! var speedMonitor:NetSpeedMonitor? var speedTimer:Timer? let repeatTimeinterval: TimeInterval = 2.0 override func awakeFromNib() { updateApplicationConfig() NotificationCenter.default.addObserver(forName: NOTIFY_HTTP_CONF_CHANGED, object: nil, queue: OperationQueue.main) { (noti) in SyncPrivoxy { StatusMenuManager.applyConfig { (s) in self.refresh() } } } NotificationCenter.default.addObserver(forName: NOTIFY_UPDATE_RUNNING_MODE_MENU, object: nil, queue: OperationQueue.main) { (noti) in self.updateRunningModeMenu() } NotificationCenter.default.addObserver(forName: NOTIFY_SERVER_PROFILES_CHANGED, object: nil, queue: OperationQueue.main) { (noti) in if Profiles.shared.count() > 0 { if !UserDefaults.standard.bool(forKey: USERDEFAULTS_TROJAN_ON) { self.toggle { (suc) in self.refresh() } } else { SyncTrojan { (s) in self.refresh() } } } } NotificationCenter.default.addObserver(forName: NOTIFY_SHOW_NETWORK_MONITOR, object: nil, queue: OperationQueue.main) { (noti) in self.showSpeed() } NotificationCenter.default.addObserver(forName: NOTIFY_REFRESH_SERVERS, object: nil, queue: OperationQueue.main) { (noti) in self.updateServersMenu() } } private func updateApplicationConfig() { let defaults = UserDefaults.standard defaults.register(defaults: [ USERDEFAULTS_RUNNING_MODE: "auto", USERDEFAULTS_LOCAL_SOCKS5_LISTEN_ADDRESS: "127.0.0.1", USERDEFAULTS_LOCAL_SOCKS5_LISTEN_PORT: NSNumber(value: 10800 as UInt16), USERDEFAULTS_LOCAL_HTTP_LISTEN_ADDRESS: "127.0.0.1", USERDEFAULTS_LOCAL_HTTP_LISTEN_PORT: NSNumber(value: 10801 as UInt16), USERDEFAULTS_PAC_SERVER_LISTEN_ADDRESS: "127.0.0.1", USERDEFAULTS_PAC_SERVER_LISTEN_PORT:NSNumber(value: 8090 as UInt16), USERDEFAULTS_GFW_LIST_URL: "https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt", USERDEFAULTS_ACL_WHITE_LIST_URL: "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/banAD.acl", USERDEFAULTS_ACL_AUTO_LIST_URL: "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/gfwlist-banAD.acl", USERDEFAULTS_ACL_PROXY_BACK_CHN_URL:"https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/backcn-banAD.acl", USERDEFAULTS_AUTO_CONFIGURE_NETWORK_SERVICES: NSNumber(value: true as Bool), USERDEFAULTS_LOCAL_HTTP_ON: true, USERDEFAULTS_LOCAL_HTTP_FOLLOW_GLOBAL: true, USERDEFAULTS_ACL_FILE_NAME: "chn.acl", USERDEFAULTS_AUTO_CHECK_UPDATE:false, USERDEFAULTS_ENABLE_SHOW_SPEED:false, USERDEFAULTS_FIXED_NETWORK_SPEED_VIEW_WIDTH:false ]) let fileMgr = FileManager.default if fileMgr.fileExists(atPath: CONFIG_PATH_OLD) { do { try fileMgr.moveItem(atPath: CONFIG_PATH_OLD, toPath: CONFIG_PATH) } catch { } } self.showSpeed() Profiles.shared.load() InstallTrojanLocal { (s) in InstallPrivoxy { (suc) in ProxyConfHelper.install() SyncPac() StatusMenuManager.applyConfig { (s) in self.refresh() } if UserDefaults.standard.bool(forKey: USERDEFAULTS_AUTO_CHECK_UPDATE) { self.checkUpdate(showAlert: false) } } } } private func refresh() { DispatchQueue.main.async { self.updateMainMenu() self.updateRunningModeMenu() self.updateServersMenu() } } func updateMainMenu() { let defaults = UserDefaults.standard let isOn = defaults.bool(forKey: USERDEFAULTS_TROJAN_ON) if isOn { switchLabel.title = "Trojan: On".localized switchLabel.image = NSImage(named: NSImage.statusAvailableName) toggleRunning.title = "Turn Trojan Off".localized let icon = NSImage(named: "open") statusItem.button?.image = icon statusItem.menu = statusMenu if Profiles.shared.count() > 0 { copyCommandItem.isHidden = false } } else { switchLabel.title = "Trojan: Off".localized switchLabel.image = NSImage(named: NSImage.statusUnavailableName) toggleRunning.title = "Turn Trojan On".localized let icon = NSImage(named: "close") statusItem.button?.image = icon statusItem.menu = statusMenu copyCommandItem.isHidden = true } statusItem.image?.isTemplate = true } func showSpeed() { if UserDefaults.standard.bool(forKey: USERDEFAULTS_ENABLE_SHOW_SPEED) { speedItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength) speedItem.menu = speedMenu if UserDefaults.standard.bool(forKey: USERDEFAULTS_FIXED_NETWORK_SPEED_VIEW_WIDTH) { self.fixedSpeedItemWidth(true) self.fixedWidth.state = NSControl.StateValue.on } else { self.fixedSpeedItemWidth(false) self.fixedWidth.state = NSControl.StateValue.off } if let b = speedItem.button { b.attributedTitle = SpeedTools.speedAttributedString(up: 0.0, down: 0.0) } if speedMonitor == nil{ speedMonitor = NetSpeedMonitor() } if speedTimer == nil { speedTimer = Timer(timeInterval: repeatTimeinterval, repeats: true) {[weak self] (timer) in guard let w = self else {return} w.speedMonitor?.timeInterval(w.repeatTimeinterval, downloadAndUploadSpeed: { (down, up) in if let b = w.speedItem.button { b.attributedTitle = SpeedTools.speedAttributedString(up: up, down: down) } }) } RunLoop.main.add(speedTimer!, forMode: RunLoop.Mode.common) } } else { speedItem.attributedTitle = NSAttributedString(string: "") NSStatusBar.system.removeStatusItem(speedItem) speedTimer?.invalidate() speedTimer = nil speedMonitor = nil } } func updateServersMenu() { serversMenuItem.title = Profile.shared.name serversMenuItem.submenu?.removeAllItems() var i = 0 var fastTime = "" if let t = UserDefaults.standard.object(forKey: USERDEFAULTS_FASTEST_NODE) as? String { fastTime = t } for p in Profiles.shared.profiles { let item = NSMenuItem(title: p.name, action: #selector(StatusMenuManager.selectServer), keyEquivalent: "") item.tag = i item.target = self let nf = NumberFormatter.three(p.latency) if p.latency.doubleValue != Double.infinity { item.title += " - \(nf)ms" if nf == fastTime { let dic = [NSAttributedString.Key.foregroundColor : NSColor.green] let attStr = NSAttributedString(string: item.title, attributes: dic) item.attributedTitle = attStr } } else { if !nerverTestBefore { item.title += " - failed" let dic = [NSAttributedString.Key.foregroundColor : NSColor.red] let attStr = NSAttributedString(string: item.title, attributes: dic) item.attributedTitle = attStr } } if p.equal(profile: Profile.shared) { item.state = NSControl.StateValue(rawValue: 1) } serversMenuItem.submenu?.addItem(item) i += 1 } } @IBAction func powerSwitch(_ sender: NSMenuItem) { self.toggle { (s) in self.updateMainMenu() } } private func toggle(finish: @escaping(_ success: Bool)->()) { let defaults = UserDefaults.standard let isOn = defaults.bool(forKey: USERDEFAULTS_TROJAN_ON) if isOn { defaults.set(false, forKey: USERDEFAULTS_TROJAN_ON) self.makeToast("Trojan: Off".localized) } else { defaults.set(true, forKey: USERDEFAULTS_TROJAN_ON) self.makeToast("Trojan: On".localized) } defaults.synchronize() StatusMenuManager.applyConfig { (suc) in SyncTrojan { (s) in DispatchQueue.main.async { finish(true) } } } } @IBAction func quit(_ sender: NSMenuItem) { Profiles.shared.save() AppDelegate.stopTrojan { if AppDelegate.getLauncherStatus() == false { RemovePrivoxy { (s) in RemoveTrojan { (ss) in NSApplication.shared.terminate(self) } } } else { NSApplication.shared.terminate(self) } } } @IBAction func showLog(_ sender: NSMenuItem) { if self.logW != nil { self.logW.close() } let c = LogWindowController(windowNibName: "LogWindowController") self.logW = c c.showWindow(self) c.window?.center() c.window?.makeKeyAndOrderFront(self) NSApp.activate(ignoringOtherApps: true) } @IBAction func cleanLogs(_ sender: NSMenuItem) { CommandLine.async(task: Process(), command: "rm -rf \(LOG_PATH)", terminate: { (finish) in print("CleanLog finish") NotificationCenter.default.post(name: LOG_CLEAN_FINISH, object: nil) self.makeToast("Logs Cleand") }) } @IBAction func serversSetting(_ sender: NSMenuItem) { if self.settingW != nil { self.settingW.close() } let c = SettingWindowController(windowNibName: "SettingWindowController") self.settingW = c c.showWindow(self) c.window?.center() c.window?.makeKeyAndOrderFront(self) NSApp.activate(ignoringOtherApps: true) } @IBAction func testConnectionDelay(_ sender: NSMenuItem) { ConnectTestigManager.shared.start() } @IBAction func checkUpdate(_ sender: NSMenuItem) { self.checkUpdate(showAlert: true) } @IBAction func settingsTap(_ sender: NSMenuItem) { if self.settingsW != nil { self.settingsW.close() } let c = SettingsWIndowController(windowNibName: "SettingsWIndowController") self.settingsW = c c.showWindow(self) c.window?.center() c.window?.makeKeyAndOrderFront(self) NSApp.activate(ignoringOtherApps: true) } func checkUpdate(showAlert: Bool) { let versionChecker = VersionChecker() DispatchQueue.global().async { let newVersion = versionChecker.checkNewVersion() DispatchQueue.main.async { if (showAlert || newVersion["newVersion"] as! Bool){ let alertResult = versionChecker.showAlertView(Title: newVersion["Title"] as! String, SubTitle: newVersion["SubTitle"] as! String, ConfirmBtn: newVersion["ConfirmBtn"] as! String, CancelBtn: newVersion["CancelBtn"] as! String) if (newVersion["newVersion"] as! Bool && alertResult == 1000){ NSWorkspace.shared.open(URL(string: RELEASE_URL)!) } } } } } @IBAction func feedbackTap(_ sender: NSMenuItem) { NSWorkspace.shared.open(URL(string: ISSUES_URL)!) } @IBAction func aboutMe(_ sender: NSMenuItem) { NSApp.orderFrontStandardAboutPanel(sender); NSApp.activate(ignoringOtherApps: true) } @IBAction func editSubscribeFeedTao(_ sender: NSMenuItem) { if subscribePreferenceWinCtrl != nil { subscribePreferenceWinCtrl.close() } let ctrl = SubscribePreferenceWindowController(windowNibName: "SubscribePreferenceWindowController") subscribePreferenceWinCtrl = ctrl ctrl.showWindow(self) NSApp.activate(ignoringOtherApps: true) ctrl.window?.makeKeyAndOrderFront(self) } @IBAction func updateSubscribeWithProxy(_ sender: NSMenuItem) { SubscribeManager.instance.updateAllServerFromSubscribe(auto: false, useProxy: true) } @IBAction func updateSubscribeWithoutProxy(_ sender: NSMenuItem) { SubscribeManager.instance.updateAllServerFromSubscribe(auto: false, useProxy: false) } @IBAction func copySocks5CommandLineTap(_ sender: NSMenuItem) { // Get the Http proxy config. let defaults = UserDefaults.standard let address = defaults.string(forKey: USERDEFAULTS_LOCAL_SOCKS5_LISTEN_ADDRESS) let port = defaults.integer(forKey: USERDEFAULTS_LOCAL_SOCKS5_LISTEN_PORT) let httpAddress = defaults.string(forKey: USERDEFAULTS_LOCAL_HTTP_LISTEN_ADDRESS) let httpPort = defaults.integer(forKey: USERDEFAULTS_LOCAL_HTTP_LISTEN_PORT) if defaults.bool(forKey: USERDEFAULTS_LOCAL_HTTP_ON) { if let a = httpAddress { let command = "export http_proxy=http://\(a):\(httpPort);export https_proxy=http://\(a):\(httpPort);" // Copy to paste board. NSPasteboard.general.clearContents() NSPasteboard.general.setString(command, forType: NSPasteboard.PasteboardType.string) // Show a toast notification. self.makeToast("Export Command Copied.".localized) } else { self.makeToast("Export Command Copied Failed.".localized) } } else { if let a = address { let command = "export ALL_PROXY=socks5://\(a):\(port);export no_proxy=localhost;" // Copy to paste board. NSPasteboard.general.clearContents() NSPasteboard.general.setString(command, forType: NSPasteboard.PasteboardType.string) // Show a toast notification. self.makeToast("Export Command Copied.".localized) } else { self.makeToast("Export Command Copied Failed.".localized) } } } @IBAction func pacMode(_ sender: NSMenuItem) { Mode.switchTo(.PAC) } @IBAction func WhiteListMode(_ sender: NSMenuItem) { Mode.switchTo(.WHITELIST) } @IBAction func globalMode(_ sender: NSMenuItem) { Mode.switchTo(.GLOBAL) } @IBAction func manualMode(_ sender: NSMenuItem) { Mode.switchTo(.MANUAL) } @IBAction func aclAutoMode(_ sender: NSMenuItem) { Mode.switchTo(.ACLAUTO) } @IBAction func backChinaMode(_ sender: NSMenuItem) { Mode.switchTo(.CHINA) } static func applyConfig(finish: @escaping(_ success: Bool)->()) { let defaults = UserDefaults.standard let isOn = defaults.bool(forKey: USERDEFAULTS_TROJAN_ON) let mode = defaults.string(forKey: USERDEFAULTS_RUNNING_MODE) if isOn { StartTrojan { (s) in if s { StartPrivoxy { (ss) in if ss { if mode == "auto" { ProxyConfHelper.disableProxy("hi") ProxyConfHelper.enablePACProxy("hi") } else if mode == "global" { ProxyConfHelper.disableProxy("hi") ProxyConfHelper.enableGlobalProxy() } else if mode == "manual" { ProxyConfHelper.disableProxy("hi") } else if mode == "whiteList" { ProxyConfHelper.disableProxy("hi") ProxyConfHelper.enableWhiteListProxy()//新白名单基于GlobalMode } finish(true) } else { finish(false) } } } else { finish(false) } } } else { AppDelegate.stopTrojan { finish(true) } } } func updateRunningModeMenu() { let defaults = UserDefaults.standard let mode = defaults.string(forKey: USERDEFAULTS_RUNNING_MODE) pacItem.state = NSControl.StateValue(rawValue: 0) globalItem.state = NSControl.StateValue(rawValue: 0) manualItem.state = NSControl.StateValue(rawValue: 0) whiteListItem.state = NSControl.StateValue(rawValue: 0) backChinaItem.state = NSControl.StateValue(rawValue: 0) aclAutoItem.state = NSControl.StateValue(rawValue: 0) aclModeItem.state = NSControl.StateValue(rawValue: 0) if mode == "auto" { pacItem.state = NSControl.StateValue(rawValue: 1) } else if mode == "global" { globalItem.state = NSControl.StateValue(rawValue: 1) } else if mode == "manual" { manualItem.state = NSControl.StateValue(rawValue: 1) } else if mode == "whiteList" { let aclMode = defaults.string(forKey: USERDEFAULTS_ACL_FILE_NAME)! switch aclMode { case "backchn.acl": aclModeItem.state = NSControl.StateValue(rawValue: 1) backChinaItem.state = NSControl.StateValue(rawValue: 1) break case "gfwlist.acl": aclModeItem.state = NSControl.StateValue(rawValue: 1) aclAutoItem.state = NSControl.StateValue(rawValue: 1) break default: whiteListItem.state = NSControl.StateValue(rawValue: 1) } } } @objc func selectServer(_ sender: NSMenuItem) { let index = sender.tag let spMgr = Profiles.shared let newProfile = spMgr.profiles[index] if newProfile.equal(profile: Profile.shared) { return } else { Profile.shared.client = newProfile.client Profile.shared.name = newProfile.name Profile.shared.saveProfile() NotificationCenter.default.post(name: NOTIFY_SERVER_PROFILES_CHANGED, object: nil) } } func makeToast(_ message: String) { if self.toastW != nil { self.toastW.close() } let c = ToastWindowController.init(windowNibName: "ToastWindowController") self.toastW = c c.message = message c.showWindow(self) c.fadeInHud() } //------------------------------------------------------------ // MARK: Speed Item Actions @IBAction func fixedWidth(_ sender: NSMenuItem) { sender.state = (sender.state == .on ? .off:.on) let b = sender.state == .on ? true:false UserDefaults.standard.setValue(b, forKey: USERDEFAULTS_FIXED_NETWORK_SPEED_VIEW_WIDTH) UserDefaults.standard.synchronize() self.fixedSpeedItemWidth(b) } @IBAction func closeSpeedItem(_ sender: NSMenuItem) { UserDefaults.standard.setValue(false, forKey: USERDEFAULTS_ENABLE_SHOW_SPEED) UserDefaults.standard.synchronize() NotificationCenter.default.post(Notification(name: NOTIFY_SHOW_NETWORK_MONITOR)) } private func fixedSpeedItemWidth(_ fixed: Bool) { if fixed { speedItem.length = 70 } else { speedItem.length = NSStatusItem.variableLength } } } ================================================ FILE: Trojan/Subscribe/Network.swift ================================================ // // Network.swift // Trojan // // Created by ParadiseDuo on 2020/4/27. // Copyright © 2020 MacClient. All rights reserved. // import Cocoa import Alamofire class Network { private static let requestQueue = DispatchQueue(label: "Network") private static var sharedProxySession = Session(configuration: Network.getProxyConfiguration(), rootQueue: DispatchQueue.main, startRequestsImmediately: true, requestQueue: Network.requestQueue) private static let sharedSession = Session(configuration: Network.getConfiguration(), rootQueue: DispatchQueue.main, startRequestsImmediately: true, requestQueue: Network.requestQueue) static func refreshProxySession() { Network.sharedProxySession = Session(configuration: Network.getProxyConfiguration(), rootQueue: DispatchQueue.main, startRequestsImmediately: true, requestQueue: Network.requestQueue) print("&&& Network refreshProxySession &&&") } static func getProxyConfiguration() -> URLSessionConfiguration { let configuration = URLSessionConfiguration.default configuration.timeoutIntervalForRequest = 5 if let a = UserDefaults.standard.string(forKey: USERDEFAULTS_LOCAL_SOCKS5_LISTEN_ADDRESS), let p = UserDefaults.standard.value(forKey: USERDEFAULTS_LOCAL_SOCKS5_LISTEN_PORT) as? NSNumber { let proxyConfiguration: [AnyHashable : Any] = [kCFNetworkProxiesSOCKSEnable : true, kCFNetworkProxiesSOCKSProxy: a, kCFNetworkProxiesSOCKSPort: p.intValue] configuration.connectionProxyDictionary = proxyConfiguration } return configuration } static func getConfiguration() -> URLSessionConfiguration { let configuration = URLSessionConfiguration.default configuration.timeoutIntervalForRequest = 5 let proxyConfiguration: [AnyHashable : Any] = [kCFNetworkProxiesSOCKSEnable : false] configuration.connectionProxyDictionary = proxyConfiguration return configuration } static func session(useProxy: Bool) -> Session { if UserDefaults.standard.bool(forKey: USERDEFAULTS_TROJAN_ON) { if useProxy { return sharedProxySession } else { return sharedSession } } else { return sharedSession } } } ================================================ FILE: Trojan/Subscribe/Subscribe.swift ================================================ // // Subscribe.swift // Trojan // // Created by ParadiseDuo on 2020/4/27. // Copyright © 2020 MacClient. All rights reserved. // import Foundation import Alamofire @objcMembers class Subscribe: NSObject{ var subscribeFeed = "" var isActive = true var autoUpdateEnable = true var maxCount = 0 // -1 is not limited var groupName = "" var token = "" var cache = "" var filter = "" init(initUrlString:String, initGroupName: String, initToken: String, initFilter: String, initMaxCount: Int, initActive: Bool, initAutoUpdate:Bool){ super.init() subscribeFeed = initUrlString token = initToken filter = initFilter isActive = initActive autoUpdateEnable = initAutoUpdate setMaxCount(initMaxCount: initMaxCount) setGroupName(newGroupName: initGroupName) } func getFeed() -> String{ return subscribeFeed } func setFeed(newFeed: String){ subscribeFeed = newFeed } func diactivateSubscribe(){ isActive = false } func activateSubscribe(){ isActive = true } func enableAutoUpdate(){ autoUpdateEnable = true } func disableAutoUpdate(){ autoUpdateEnable = false } func getAutoUpdateEnable() -> Bool { return autoUpdateEnable } func getFilter() -> String { return filter } func setFilter(filter: String) { self.filter = filter.trimmingCharacters(in: CharacterSet.whitespaces) } func setGroupName(newGroupName: String) { if newGroupName != "" { groupName = newGroupName return } if self.cache != "" { getTrojanURLsFromRes(resString: cache) return } } func getGroupName() -> String { return groupName } func getMaxCount() -> Int { return maxCount } static func fromDictionary(_ data:[String:AnyObject]) -> Subscribe { var feed:String = "" var group:String = "" var token:String = "" var maxCount:Int = -1 var isActive:Bool = true var autoUpdateEnable:Bool = true var filter:String = "" for (key, value) in data { switch key { case "feed": feed = value as! String case "group": group = value as! String case "token": token = value as! String case "maxCount": maxCount = value as! Int case "isActive": isActive = value as! Bool case "autoUpdateEnable": autoUpdateEnable = value as! Bool case "filter": filter = value as! String default: print("") } } return Subscribe(initUrlString: feed, initGroupName: group, initToken: token, initFilter: filter, initMaxCount: maxCount,initActive: isActive,initAutoUpdate: autoUpdateEnable) } static func toDictionary(_ data: Subscribe) -> [String: AnyObject] { var ret : [String: AnyObject] = [:] ret["feed"] = data.subscribeFeed as AnyObject ret["group"] = data.groupName as AnyObject ret["token"] = data.token as AnyObject ret["maxCount"] = data.maxCount as AnyObject ret["isActive"] = data.isActive as AnyObject ret["autoUpdateEnable"] = data.autoUpdateEnable as AnyObject ret["filter"] = data.filter as AnyObject return ret } fileprivate func sendRequest(url: String, options: Any, useProxy: Bool = true, callback: @escaping (String) -> Void) { if url.isEmpty { return } let headers: HTTPHeaders = [ "Cache-control": "no-cache", "token": self.token, "User-Agent": "Trojan " + (getLocalInfo()["CFBundleShortVersionString"] as! String) + " Version " + (getLocalInfo()["CFBundleVersion"] as! String) ] Network.session(useProxy: useProxy).request(url, headers: headers).responseString{ response in do { let value = try response.result.get() callback(value) } catch { callback("") self.pushNotification(title: "请求失败", subtitle: "", info: "发送到\(url)的请求失败,请检查您的网络") } } } func setMaxCount(initMaxCount: Int) { func getMaxFromRes(resString: String) { let maxCountReg = "MAX=[0-9]+" let decodeRes = resString.base64Decoded() let range = decodeRes.range(of: maxCountReg, options: .regularExpression) if let r = range { self.maxCount = Int(decodeRes[r].replacingOccurrences(of: "MAX=", with: ""))! } else{ self.maxCount = -1 } } if initMaxCount != 0 { return self.maxCount = initMaxCount } if cache != "" { return getMaxFromRes(resString: cache) } sendRequest(url: self.subscribeFeed, options: "", callback: { resString in if resString == "" { return }// Also should hold if token is wrong feedback getMaxFromRes(resString: resString) self.cache = resString }) } func updateServerFromFeed(useProxy: Bool, handle: @escaping ()->()) { func updateServerHandler(resString: String) { let urls = self.getTrojanURLsFromRes(resString: resString) // hold if user fill a maxCount larger then server return // Should push a notification about it and correct the user filled maxCount? let maxN = (self.maxCount > urls.count) ? urls.count : (self.maxCount == -1) ? urls.count: self.maxCount // 存一下原有group中的 profile ,为了计算下列数量 let oldNodes = Profiles.shared.profiles.filter { $0.client.group == self.getGroupName()} // 原有的 group 中的 profile 全部清除 Profiles.shared.profiles = Profiles.shared.profiles.filter { $0.client.group != self.getGroupName()} //更新对应4种情况: //1.节点原来存在,更新后被删除 //2.节点原来不存在,更新后增加 //3.节点原来存在,并且更新完之后啥也不用干(本地节点信息跟服务端已经一致) //4.节点原来存在,只更新内容(本地节点与服务端信息不一致,比如密码换了) var subCount = 0 var addCount = 0 var dupCount = 0 var existCount = 0 var filterCount = 0 //这里处理后三种情况 var newNodes = [Profile]() for index in 0.. Bool in return item.equal(profile: s) }) { subCount += 1 } } //将更新后的节点加回原来的数组 for item in newNodes { Profiles.shared.add(item) } //用户添加了过滤条件的话,在这里过滤 var regex: NSRegularExpression? if self.filter.count > 0 { do { regex = try NSRegularExpression(pattern: self.filter, options:.caseInsensitive) }catch{ regex = nil } } Profiles.shared.profiles = Profiles.shared.profiles.filter { (p) -> Bool in let remark = p.client.group let result = regex?.numberOfMatches(in: remark, options: .reportCompletion, range: NSMakeRange(0, remark.count)) if let r = result, r > 0 { if remark == self.groupName { filterCount += 1 return false } } return true } Profiles.shared.save() DispatchQueue.main.async { var message = "节点总数:\(maxN)" if dupCount > 0 { message += " 无需更新:\(dupCount)" } if existCount > 0 { message += " 更新:\(existCount)" } if addCount > 0 { message += " 新增:\(addCount)" } if subCount > 0 { message += " 删除:\(subCount)" } if filterCount > 0 { message += " 过滤:\(filterCount)" } self.pushNotification(title: "成功更新订阅", subtitle: message, info: "更新来自\(self.subscribeFeed)的订阅") NotificationCenter.default.post(name: NOTIFY_SERVER_PROFILES_CHANGED, object: nil) handle() } } if !isActive { handle() return } sendRequest(url: self.subscribeFeed, options: "", useProxy: useProxy, callback: { resString in if resString == "" { handle() return } updateServerHandler(resString: resString) self.cache = resString }) } @discardableResult func getTrojanURLsFromRes(resString: String) -> [String] { let decodeRes = resString.base64Decoded() let decodeURL = decodeRes.urlDecode() let arr = decodeURL.components(separatedBy: "\n") if arr.count >= 2 { let s = arr[1].components(separatedBy: "=") if s.count == 2 { self.groupName = s[1] } } var urls = [String]() for item in arr { if item.contains("trojan://") { urls.append(item) } } return urls } func feedValidator() -> Bool{ let feedRegExp = "http[s]?://[A-Za-z0-9-_/.=?]*" return subscribeFeed.range(of:feedRegExp, options: .regularExpression) != nil } fileprivate func pushNotification(title: String, subtitle: String, info: String){ let userNote = NSUserNotification() userNote.title = title userNote.subtitle = subtitle userNote.informativeText = info userNote.soundName = NSUserNotificationDefaultSoundName NSUserNotificationCenter.default.deliver(userNote); } class func isSame(source: Subscribe, target: Subscribe) -> Bool { return source.subscribeFeed == target.subscribeFeed && source.token == target.token && source.maxCount == target.maxCount } func isExist(_ target: Subscribe) -> Bool { return self.subscribeFeed == target.subscribeFeed } } ================================================ FILE: Trojan/Subscribe/SubscribeManager.swift ================================================ // // SubscribeManager.swift // Trojan // // Created by ParadiseDuo on 2020/3/31. // Copyright © 2020 MacClient. All rights reserved. // import Foundation class SubscribeManager:NSObject{ static let instance:SubscribeManager = SubscribeManager() var subscribes:[Subscribe] var subscribesDefault : [[String: AnyObject]] let defaults = UserDefaults.standard fileprivate override init() { subscribes = [] subscribesDefault = [[:]] if let subscribesDefault = defaults.array(forKey: USERDEFAULTS_SUBSCRIBES) { for value in subscribesDefault{ subscribes.append(Subscribe.fromDictionary(value as! [String : AnyObject])) } } } func addSubscribe(oneSubscribe: Subscribe) -> Bool { for (index, value) in subscribes.enumerated() { if Subscribe.isSame(source: oneSubscribe, target: value) { return true } if value.isExist(oneSubscribe) { subscribes.replaceSubrange((index.. Subscribe { return subscribes.remove(at: atIndex) } func save() { defaults.set(subscribesToDefaults(data: subscribes), forKey: USERDEFAULTS_SUBSCRIBES) defaults.synchronize() } func reload() { subscribes.removeAll() if let subscribesDefault = defaults.array(forKey: USERDEFAULTS_SUBSCRIBES) { for value in subscribesDefault{ subscribes.append(Subscribe.fromDictionary(value as! [String : AnyObject])) } } } fileprivate func subscribesToDefaults(data: [Subscribe]) -> [[String: AnyObject]]{ var ret : [[String: AnyObject]] = [] for value in data { ret.append(Subscribe.toDictionary(value)) } return ret } fileprivate func DefaultsToSubscribes(data:[[String: AnyObject]]) -> [Subscribe] { var ret : [Subscribe] = [] for value in data{ ret.append(Subscribe.fromDictionary(value)) } return ret } func updateAllServerFromSubscribe(auto: Bool, useProxy: Bool = true) { let group = DispatchGroup() let queue = DispatchQueue.global(qos: DispatchQoS.QoSClass.userInteractive) for item in subscribes { if item.isActive { group.enter() queue.async(group: group) { if !auto { item.updateServerFromFeed(useProxy: useProxy) { group.leave() } } else { if item.getAutoUpdateEnable() { item.updateServerFromFeed(useProxy: useProxy) { group.leave() } } else { group.leave() } } } } } //每次更新订阅后自动测试延时 group.notify(queue: DispatchQueue.main) { //更新订阅后存一下组名 self.save() if UserDefaults.standard.bool(forKey: USERDEFAULTS_SPEED_TEST_AFTER_SUBSCRIPTION) { // ConnectTestigManager.shared.start() } } } } ================================================ FILE: Trojan/Subscribe/Utils.swift ================================================ // // Utils.swift // Trojan // // Created by ParadiseDuo on 2020/10/9. // Copyright © 2020 ParadiseDuo. All rights reserved. // import Foundation func getLocalInfo() -> [String: Any] { let InfoDict = Bundle.main.infoDictionary return InfoDict! } func splitor(url: String, regexp: String) -> [String] { var ret: [String] = [] var ssrUrl = url while ssrUrl.range(of:regexp, options: .regularExpression) != nil { if let range = ssrUrl.range(of:regexp, options: .regularExpression) { let result = String(ssrUrl[range]) ssrUrl.replaceSubrange(range, with: "") ret.append(result) } } return ret } func ParseAppURLSchemes(url: String) -> Profile? { if url.contains("trojan://") { return ParseTrojanURL(url: url) } return nil } // base64(urlEncode(trojan://password@domain:port?peer=name)) func ParseTrojanURL(url: String) -> Profile? { let p1 = url.components(separatedBy: "trojan://")[1] let password = p1.components(separatedBy: "@")[0] let p2 = url.components(separatedBy: "trojan://"+password+"@")[1] let domain = p2.components(separatedBy: ":")[0] let p3 = url.components(separatedBy: "trojan://"+password+"@"+domain+":")[1] let port = p3.components(separatedBy: "?")[0] var name = url.components(separatedBy: "?peer=")[1] if name.contains("#") { name = name.components(separatedBy: "#")[1] } let p = Profile() p.loadDefaultProfile() p.client.remote_addr = String(domain) p.client.remote_port = Int(port) ?? 443 p.client.password = [String(password)] p.name = String(name) return p } extension String { func base64Encoded() -> String { return data(using: .utf8)?.base64EncodedString() ?? self } func base64Decoded() -> String { guard let data = Data(base64Encoded: self) else { return self } return String(data: data, encoding: .utf8) ?? self } func urlEncode() -> String { let customAllowedSet = NSCharacterSet(charactersIn:"=\"#%/<>?@\\^`{|}&;:,.").inverted return self.addingPercentEncoding(withAllowedCharacters: customAllowedSet) ?? self } func urlDecode() -> String { return self.removingPercentEncoding ?? self } } extension NSTextField { open override func performKeyEquivalent(with event: NSEvent) -> Bool { switch event.charactersIgnoringModifiers { case "a": return NSApp.sendAction(#selector(NSText.selectAll(_:)), to: self.window?.firstResponder, from: self) case "c": return NSApp.sendAction(#selector(NSText.copy(_:)), to: self.window?.firstResponder, from: self) case "v": return NSApp.sendAction(#selector(NSText.paste(_:)), to: self.window?.firstResponder, from: self) case "x": return NSApp.sendAction(#selector(NSText.cut(_:)), to: self.window?.firstResponder, from: self) default: return super.performKeyEquivalent(with: event) } } } ================================================ FILE: Trojan/Trojan-Bridging-Header.h ================================================ // // Use this file to import your target's public headers that you would like to expose to Swift. // #import "ProxyConfHelper.h" #import "DefaultsConfig.h" #import "NetSpeedMonitor.h" #import "GCDAsyncSocket.h" ================================================ FILE: Trojan/Trojan.entitlements ================================================ ================================================ FILE: Trojan/VersionChecker.swift ================================================ // // VersionChecker.swift // Trojan // // Created by ParadiseDuo on 2020/3/31. // Copyright © 2020 Mac. All rights reserved. // import Cocoa class VersionChecker: NSObject { var haveNewVersion: Bool = false enum versionError: Error { case CanNotGetOnlineData } func showAlertView(Title: String, SubTitle: String, ConfirmBtn: String, CancelBtn: String) -> Int { let alertView = NSAlert() alertView.messageText = Title alertView.informativeText = SubTitle alertView.addButton(withTitle: ConfirmBtn) if CancelBtn != "" { alertView.addButton(withTitle: CancelBtn) } let action = alertView.runModal() return action.rawValue } func parserVersionString(strIn: String) -> Int { var strTmp = strIn if let index = strIn.range(of: "-")?.lowerBound { strTmp = String(strIn[.. [String:Any] { func getOnlineData() throws -> NSDictionary{ guard NSDictionary(contentsOf: URL(string:_VERSION_XML_URL)!) != nil else { throw versionError.CanNotGetOnlineData } return NSDictionary(contentsOf: URL(string:_VERSION_XML_URL)!)! } var localData: NSDictionary = NSDictionary() var onlineData: NSDictionary = NSDictionary() localData = NSDictionary(contentsOfFile: _VERSION_XML_LOCAL)! do{ try onlineData = getOnlineData() }catch{ return ["newVersion" : false, "error": "network error", "Title": "网络错误", "SubTitle": "由于网络错误无法检查更新", "ConfirmBtn": "确认", "CancelBtn": "" ] } let versionString:String = onlineData["CFBundleShortVersionString"] as! String let buildString:String = onlineData["CFBundleVersion"] as! String let currentVersionString:String = localData["CFBundleShortVersionString"] as! String let currentBuildString:String = localData["CFBundleVersion"] as! String var subtitle:String if (versionString == currentVersionString){ if buildString == currentBuildString { subtitle = "当前版本 " + currentVersionString + " build " + currentBuildString return ["newVersion" : false, "error": "", "Title": "已是最新版本!", "SubTitle": subtitle, "ConfirmBtn": "确认", "CancelBtn": "" ] } else { haveNewVersion = true subtitle = "新版本为 " + versionString + " build " + buildString + "\n" + "当前版本 " + currentVersionString + " build " + currentBuildString return ["newVersion" : true, "error": "", "Title": "软件有更新!", "SubTitle": subtitle, "ConfirmBtn": "前往下载", "CancelBtn": "取消" ] } } else{ // 处理如果本地版本竟然比远程还新 let version = parserVersionString(strIn: onlineData["CFBundleShortVersionString"] as! String) let currentVersion = parserVersionString(strIn: localData["CFBundleShortVersionString"] as! String) if currentVersion < version { haveNewVersion = true subtitle = "新版本为 " + versionString + " build " + buildString + "\n" + "当前版本 " + currentVersionString + " build " + currentBuildString return ["newVersion" : true, "error": "", "Title": "软件有更新!", "SubTitle": subtitle, "ConfirmBtn": "前往下载", "CancelBtn": "取消" ] } else { subtitle = "当前版本 " + currentVersionString + " build " + currentBuildString + "\n" + "远端版本 " + versionString + " build " + buildString return ["newVersion" : false, "error": "", "Title": "已是最新版本!", "SubTitle": subtitle, "ConfirmBtn": "确认", "CancelBtn": "" ] } } } } ================================================ FILE: Trojan/WIndows/Base.lproj/SettingWindowController.xib ================================================ ================================================ FILE: Trojan/WIndows/Base.lproj/SettingsWIndowController.xib ================================================ ================================================ FILE: Trojan/WIndows/Base.lproj/SubscribePreferenceWindowController.xib ================================================ ================================================ FILE: Trojan/WIndows/EditableNSTextView.swift ================================================ // // EditableNSTextView.swift // Trojan // // Created by ParadiseDuo on 2020/4/7. // Copyright © 2020 ParadiseDuo. All rights reserved. // import Cocoa class EditableNSTextView: NSTextView { private let commandKey = NSEvent.ModifierFlags.command.rawValue private let commandShiftKey = NSEvent.ModifierFlags.command.rawValue | NSEvent.ModifierFlags.shift.rawValue override func performKeyEquivalent(with event: NSEvent) -> Bool { if event.type == NSEvent.EventType.keyDown { if (event.modifierFlags.rawValue & NSEvent.ModifierFlags.deviceIndependentFlagsMask.rawValue) == commandKey { switch event.charactersIgnoringModifiers! { case "x": if NSApp.sendAction(#selector(NSText.cut(_:)), to: nil, from: self) { return true } case "c": if NSApp.sendAction(#selector(NSText.copy(_:)), to: nil, from: self) { return true } case "v": if NSApp.sendAction(#selector(NSText.paste(_:)), to: nil, from: self) { return true } case "z": if NSApp.sendAction(Selector(("undo:")), to: nil, from: self) { return true } case "a": if NSApp.sendAction(#selector(NSResponder.selectAll(_:)), to: nil, from: self) { return true } default: break } } else if (event.modifierFlags.rawValue & NSEvent.ModifierFlags.deviceIndependentFlagsMask.rawValue) == commandShiftKey { if event.charactersIgnoringModifiers == "Z" { if NSApp.sendAction(Selector(("redo:")), to: nil, from: self) { return true } } } } return super.performKeyEquivalent(with: event) } } ================================================ FILE: Trojan/WIndows/LogWindowController.swift ================================================ // // LogWindowController.swift // Trojan // // Created by ParadiseDuo on 2020/3/31. // Copyright © 2020 Mac. All rights reserved. // import Cocoa class LogWindowController: NSWindowController, NSWindowDelegate { @IBOutlet weak var scrollView: NSScrollView! @IBOutlet var textView: NSTextView! private var task: Process? override func windowDidLoad() { super.windowDidLoad() self.textView.isEditable = false self.textView.string = "Log Path: \(LOG_PATH)\n" let fileMgr = FileManager.default if fileMgr.fileExists(atPath: LOG_PATH) { self.tail() } else { NotificationCenter.default.addObserver(forName: TROJAN_START, object: nil, queue: OperationQueue.main) { (noti) in if self.task == nil { self.tail() } } } NotificationCenter.default.addObserver(forName: LOG_CLEAN_FINISH, object: nil, queue: OperationQueue.main) { (noti) in self.textView.string = "Log Path: \(LOG_PATH)\n" self.textView.scrollToEndOfDocument(nil) } } private func tail() { self.task = Process() CommandLine.async(task: self.task!, command: "tail -F -n 26 \(LOG_PATH)", output: { (line) in self.textView.string += line self.textView.scrollToEndOfDocument(nil) }) { (finish) in print("tail finish") } } func windowWillClose(_ notification: Notification) { self.task?.interrupt() self.task = nil NotificationCenter.default.removeObserver(self) } } ================================================ FILE: Trojan/WIndows/LogWindowController.xib ================================================ ================================================ FILE: Trojan/WIndows/SettingWindowController.swift ================================================ // // SettingWindowController.swift // TrojanMac // // Created by ParadiseDuo on 2020/4/7. // Copyright © 2020 ParadiseDuo. All rights reserved. // import Cocoa let tableViewDragType: String = "trojan.server.profile.data" class SettingWindowController: NSWindowController, NSWindowDelegate, NSTableViewDataSource, NSTableViewDelegate, NSTextViewDelegate, NSTextFieldDelegate { @IBOutlet weak var scroll: NSScrollView! @IBOutlet var textView: EditableNSTextView! @IBOutlet weak var profilesTableView: NSTableView! @IBOutlet weak var copyButton: NSButton! @IBOutlet weak var removeButton: NSButton! @IBOutlet weak var remoteAddress: NSTextField! @IBOutlet weak var remotePort: NSTextField! @IBOutlet weak var password: NSTextField! @IBOutlet weak var localAddress: NSTextField! @IBOutlet weak var localPort: NSTextField! private var closeFromSave = false private var selectedProfile = Profile.shared private var selectClient: Client! override func windowDidLoad() { super.windowDidLoad() self.profilesTableView.delegate = self self.profilesTableView.dataSource = self self.textView.isAutomaticQuoteSubstitutionEnabled = false self.textView.delegate = self if let p = Profiles.shared.itemAtIndex(0) { self.textView.string = p.jsonString } // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file. self.remoteAddress.delegate = self self.remotePort.delegate = self self.password.delegate = self self.localPort.delegate = self self.localAddress.delegate = self } private func updateWithClient(c: Client) { self.selectClient = c self.remoteAddress.stringValue = c.remote_addr self.remotePort.stringValue = "\(c.remote_port)" self.password.stringValue = c.password.first ?? "" self.localAddress.stringValue = c.local_addr self.localPort.stringValue = "\(c.local_port)" } private func decodeJSON(handle: (_ client: Client)->()) { do { if let d = self.textView.string.data(using: String.Encoding.utf8) { let f = try JSONDecoder().decode(Client.self, from: d) if f.local_port > 65535 || f.remote_port > 65535 || f.local_port < 1 || f.remote_port < 1 { self.shakeWindows() } else { handle(f) } } else { self.shakeWindows() } }catch let e { print("decodeJSON", e) self.shakeWindows() } } @IBAction func saveTap(_ sender: NSButton) { self.decodeJSON {[weak self] (c) in guard let w = self else {return} w.selectedProfile.client = c Profiles.shared.update(w.selectedProfile) Profiles.shared.save() w.closeFromSave = true if w.selectedProfile.equal(profile: Profile.shared) { Profile.shared.client = c Profile.shared.name = w.selectedProfile.name NotificationCenter.default.post(name: NOTIFY_SERVER_PROFILES_CHANGED, object: nil) } else { NotificationCenter.default.post(name: NOTIFY_REFRESH_SERVERS, object: nil) } } } @IBAction func cancelTap(_ sender: NSButton) { self.window?.close() } func updateProfileBoxVisible() { if Profiles.shared.count() <= 1 { removeButton.isEnabled = false }else{ removeButton.isEnabled = true } } @IBAction func addTap(_ sender: NSButton) { self.decodeJSON {[weak self] (c) in guard let w = self else {return} w.profilesTableView.beginUpdates() let p = Profile() p.name = "New Server\(Profiles.shared.count())" p.client = c p.client.remote_port = 443 p.client.remote_addr = "NewServer\(Profiles.shared.count())" p.client.password = ["NewServer\(Profiles.shared.count())"] w.selectedProfile = p if Profiles.shared.add(p) { let index = IndexSet(integer: Profiles.shared.count()-1) w.profilesTableView.insertRows(at: index, withAnimation: .effectFade) w.profilesTableView.scrollRowToVisible(Profiles.shared.count()-1) w.profilesTableView.selectRowIndexes(index, byExtendingSelection: false) w.profilesTableView.endUpdates() } else { w.shakeWindows() } } } @IBAction func copyTap(_ sender: NSButton) { } @IBAction func removeTap(_ sender: NSButton) { if Profiles.shared.count() > 1 { let index = IndexSet(integer: self.profilesTableView.selectedRow) let p = Profiles.shared.itemAtIndex(self.profilesTableView.selectedRow) if Profile.shared.equal(profile: p!) { self.shakeWindows() return } self.profilesTableView.beginUpdates() Profiles.shared.remove(self.selectedProfile) self.profilesTableView.removeRows(at: index, withAnimation: .effectFade) self.profilesTableView.selectRowIndexes(index, byExtendingSelection: false) self.profilesTableView.endUpdates() } else { self.shakeWindows() } } //-------------------------------------------------- // MARK: For NSTableViewDataSource func numberOfRows(in tableView: NSTableView) -> Int { return Profiles.shared.count() } func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? { let (title, isActive) = self.getDataAtRow(row) if tableColumn?.identifier == NSUserInterfaceItemIdentifier("main") { return title } else if tableColumn?.identifier == NSUserInterfaceItemIdentifier("status") { if isActive { return NSImage(named: NSImage.Name("NSMenuOnStateTemplate")) } else { return nil } } return "" } func tableView(_ tableView: NSTableView, setObjectValue object: Any?, for tableColumn: NSTableColumn?, row: Int) { let p = Profiles.shared.itemAtIndex(row) if p != nil { self.selectedProfile.name = object as! String self.selectedProfile.client = p!.client } } // MARK: Drag & Drop reorder rows func tableView(_ tableView: NSTableView, pasteboardWriterForRow row: Int) -> NSPasteboardWriting? { let item = NSPasteboardItem() item.setString(String(row), forType: NSPasteboard.PasteboardType(rawValue: tableViewDragType)) return item } func tableView(_ tableView: NSTableView, validateDrop info: NSDraggingInfo, proposedRow row: Int, proposedDropOperation dropOperation: NSTableView.DropOperation) -> NSDragOperation { if dropOperation == .above { return .move } return NSDragOperation() } func tableView(_ tableView: NSTableView, acceptDrop info: NSDraggingInfo, row: Int, dropOperation: NSTableView.DropOperation) -> Bool { var oldIndexes = [Int]() info.enumerateDraggingItems(options: [], for: tableView, classes: [NSPasteboardItem.self], searchOptions: [:], using: { (draggingItem: NSDraggingItem, idx: Int, stop: UnsafeMutablePointer) in if let str = (draggingItem.item as! NSPasteboardItem).string(forType: NSPasteboard.PasteboardType(rawValue: tableViewDragType)), let index = Int(str) { oldIndexes.append(index) } }) var oldIndexOffset = 0 var newIndexOffset = 0 tableView.beginUpdates() let mgr = Profiles.shared for oldIndex in oldIndexes { if oldIndex < row { let o = mgr.remove(at: oldIndex + oldIndexOffset) mgr.insert(o, at:row - 1) tableView.moveRow(at: oldIndex + oldIndexOffset, to: row - 1) oldIndexOffset -= 1 } else { let o = mgr.remove(at: oldIndex) mgr.insert(o, at:row + newIndexOffset) tableView.moveRow(at: oldIndex, to: row + newIndexOffset) newIndexOffset += 1 } } tableView.endUpdates() return true } //-------------------------------------------------- // For NSTableViewDelegate func tableView(_ tableView: NSTableView, shouldEdit tableColumn: NSTableColumn?, row: Int) -> Bool { return true } func tableView(_ tableView: NSTableView, shouldSelectRow row: Int) -> Bool { return true } func tableViewSelectionDidChange(_ notification: Notification) { if self.profilesTableView.selectedRow >= 0 { let s = Profiles.shared.itemAtIndex(self.profilesTableView.selectedRow) if s != nil { self.selectedProfile = s! self.textView.string = s!.jsonString self.decodeJSON { [weak self] (c) in guard let w = self else {return} w.updateWithClient(c: c) } } } else { let index = IndexSet(integer: Profiles.shared.count()-1) self.profilesTableView.selectRowIndexes(index, byExtendingSelection: false) } } private func getDataAtRow(_ index:Int) -> (String, Bool) { let profile = Profiles.shared.itemAtIndex(index) if profile != nil { return (profile!.name, Profile.shared.equal(profile: profile!)) } else { return ("", false) } } func shakeWindows() { let numberOfShakes:Int = 8 let durationOfShake:Float = 0.5 let vigourOfShake:Float = 0.05 let frame:CGRect = (window?.frame)! let shakeAnimation = CAKeyframeAnimation() let shakePath = CGMutablePath() shakePath.move(to: CGPoint(x:NSMinX(frame), y:NSMinY(frame))) for _ in 1...numberOfShakes{ shakePath.addLine(to: CGPoint(x: NSMinX(frame) - frame.size.width * CGFloat(vigourOfShake), y: NSMinY(frame))) shakePath.addLine(to: CGPoint(x: NSMinX(frame) + frame.size.width * CGFloat(vigourOfShake), y: NSMinY(frame))) } shakePath.closeSubpath() shakeAnimation.path = shakePath shakeAnimation.duration = CFTimeInterval(durationOfShake) window?.animations = ["frameOrigin":shakeAnimation] window?.animator().setFrameOrigin(window!.frame.origin) } func windowWillClose(_ notification: Notification) { if !self.closeFromSave { Profiles.shared.load() } } func textDidChange(_ notification: Notification) { if let _ = notification.object as? NSTextView { self.decodeJSON { [weak self] (c) in guard let w = self else {return} w.updateWithClient(c: c) } } } func controlTextDidChange(_ obj: Notification) { if let t = obj.object as? NSTextField { switch t { case self.remoteAddress: self.selectClient.remote_addr = self.remoteAddress.stringValue break case self.remotePort: if let p = Int(self.remotePort.stringValue) { self.selectClient.remote_port = p } else { self.shakeWindows() return } break case self.password: self.selectClient.password = [self.password.stringValue] break case self.localAddress: self.selectClient.local_addr = self.localAddress.stringValue break case self.localPort: if let p = Int(self.localPort.stringValue) { self.selectClient.local_port = p } else { self.shakeWindows() return } break default: break } self.textView.string = self.selectClient.jsonString() } } } ================================================ FILE: Trojan/WIndows/SettingsWIndowController.swift ================================================ // // SettingsWIndowController.swift // Trojan // // Created by ParadiseDuo on 2020/5/23. // Copyright © 2020 ParadiseDuo. All rights reserved. // import Cocoa class SettingsWIndowController: NSWindowController, NSWindowDelegate, NSTextFieldDelegate { @IBOutlet weak var toolbar: NSToolbar! @IBOutlet weak var tabView: NSTabView! @IBOutlet weak var launchAtLogin: NSButton! @IBOutlet weak var httpAddress: NSTextField! @IBOutlet weak var httpPort: NSTextField! private var httpHasChanged = false override func windowDidLoad() { super.windowDidLoad() window?.delegate = self launchAtLogin.state = AppDelegate.getLauncherStatus() ? .on:.off httpAddress.delegate = self httpPort.delegate = self } override func awakeFromNib() { super.awakeFromNib() window?.center() } func controlTextDidChange(_ obj: Notification) { if let t = obj.object as? NSTextField { switch t { case httpPort, httpAddress: httpHasChanged = true break default: break } } } @IBAction func toolbarAction(_ sender: NSToolbarItem) { tabView.selectTabViewItem(withIdentifier: sender.itemIdentifier) } @IBAction func onHTTPSaveTap(_ sender: NSButton) { if httpHasChanged { NotificationCenter.default.post(name: NOTIFY_HTTP_CONF_CHANGED, object: nil) } } @IBAction func showNetwork(_ sender: NSButton) { NotificationCenter.default.post(Notification(name: NOTIFY_SHOW_NETWORK_MONITOR)) } @IBAction func httpButtonTap(_ sender: NSButton) { httpHasChanged = true } func windowWillClose(_ notification: Notification) { AppDelegate.setLauncherStatus(open: launchAtLogin.state == .on ? true:false) } } ================================================ FILE: Trojan/WIndows/SubscribePreferenceWindowController.swift ================================================ // // SubscribePreferenceWindowController.swift // Trojan // // Created by ParadiseDuo on 2020/10/9. // Copyright © 2020 Mac. All rights reserved. // import Cocoa class SubscribePreferenceWindowController: NSWindowController, NSTableViewDataSource, NSTableViewDelegate { @IBOutlet weak var FilterTextField: NSTextField! @IBOutlet weak var OKButton: NSButton! @IBOutlet weak var ActiveButton: NSButton! @IBOutlet weak var AutoUpdateButton: NSButton! @IBOutlet weak var FeedTextField: NSTextField! @IBOutlet weak var TokenTextField: NSTextField! @IBOutlet weak var GroupTextField: NSTextField! @IBOutlet weak var MaxCountTextField: NSTextField! @IBOutlet weak var SubscribeTableView: NSTableView! @IBOutlet weak var AddSubscribeBtn: NSButton! @IBOutlet weak var DeleteSubscribeBtn: NSButton! var sbMgr: SubscribeManager! var defaults: UserDefaults! let tableViewDragType: String = "subscribe.host" var editingSubscribe: Subscribe! override func windowDidLoad() { super.windowDidLoad() sbMgr = SubscribeManager.instance defaults = UserDefaults.standard SubscribeTableView.reloadData() updateSubscribeBoxVisible() } override func awakeFromNib() { super.awakeFromNib() SubscribeTableView.registerForDraggedTypes(convertToNSPasteboardPasteboardTypeArray([tableViewDragType])) SubscribeTableView.allowsMultipleSelection = true window?.center() } @IBAction func onOk(_ sender: NSButton) { if editingSubscribe != nil { if !editingSubscribe.feedValidator() { // Done Shake window shakeWindows() return } if editingSubscribe.isActive{ editingSubscribe.updateServerFromFeed(useProxy: true) { DispatchQueue.main.async { if UserDefaults.standard.bool(forKey: USERDEFAULTS_SPEED_TEST_AFTER_SUBSCRIPTION) { // ConnectTestigManager.shared.start() } } } } } sbMgr.save() window?.performClose(self) } @IBAction func onCalcel(_ sender: NSButton) { sbMgr.reload() window?.performClose(self) } @IBAction func onActive(_ sender: NSButton){ if editingSubscribe != nil { if sender.state == .off { editingSubscribe.diactivateSubscribe() AutoUpdateButton.isEnabled = false }else{ editingSubscribe.activateSubscribe() AutoUpdateButton.isEnabled = true } } } @IBAction func onAutoUpdate(_ sender: NSButton){ if editingSubscribe != nil { if sender.state == .off { editingSubscribe.disableAutoUpdate() }else{ editingSubscribe.enableAutoUpdate() } } } @IBAction func onAdd(_ sender: NSButton) { if editingSubscribe != nil && !editingSubscribe.feedValidator(){ shakeWindows() return } SubscribeTableView.beginUpdates() let subscribe = Subscribe(initUrlString: "", initGroupName: "", initToken: "", initFilter: "", initMaxCount: -1, initActive: true,initAutoUpdate: true) sbMgr.subscribes.append(subscribe) let index = IndexSet(integer: sbMgr.subscribes.count-1) SubscribeTableView.insertRows(at: index, withAnimation: .effectFade) self.SubscribeTableView.scrollRowToVisible(self.sbMgr.subscribes.count-1) self.SubscribeTableView.selectRowIndexes(index, byExtendingSelection: false) SubscribeTableView.endUpdates() updateSubscribeBoxVisible() } @IBAction func onDelete(_ sender: NSButton) { let index = Int(SubscribeTableView.selectedRowIndexes.first!) var deleteCount = 0 var deleteGroupName = [String]() if index >= 0 { SubscribeTableView.beginUpdates() for (_, toDeleteIndex) in SubscribeTableView.selectedRowIndexes.enumerated() { let s = sbMgr.deleteSubscribe(atIndex: toDeleteIndex - deleteCount) deleteGroupName.append(s.groupName) SubscribeTableView.removeRows(at: IndexSet(integer: toDeleteIndex - deleteCount), withAnimation: .effectFade) deleteCount += 1 if sbMgr.subscribes.count == 0 { cleanField() } } SubscribeTableView.endUpdates() } self.SubscribeTableView.scrollRowToVisible(index - 1) self.SubscribeTableView.selectRowIndexes(IndexSet(integer: index - 1), byExtendingSelection: false) updateSubscribeBoxVisible() // if UserDefaults.standard.bool(forKey: USERDEFAULTS_REMOVE_NODE_AFTER_DELETE_SUBSCRIPTION) { // for g in deleteGroupName { // if g.count > 0 { // ServerProfileManager.instance.profiles = ServerProfileManager.instance.profiles.filter { $0.ssrGroup != g} // print(g, ServerProfileManager.instance.profiles.count) // } // } // ServerProfileManager.instance.save() // NotificationCenter.default.post(name: NOTIFY_UPDATE_MAINMENU, object: nil) // } } func updateSubscribeBoxVisible() { if sbMgr.subscribes.count <= 0 { DeleteSubscribeBtn.isEnabled = false FeedTextField.isEnabled = false TokenTextField.isEnabled = false GroupTextField.isEnabled = false MaxCountTextField.isEnabled = false ActiveButton.isEnabled = false AutoUpdateButton.isEnabled = false FilterTextField.isEnabled = false }else{ DeleteSubscribeBtn.isEnabled = true FeedTextField.isEnabled = true TokenTextField.isEnabled = true GroupTextField.isEnabled = true MaxCountTextField.isEnabled = true ActiveButton.isEnabled = true AutoUpdateButton.isEnabled = true FilterTextField.isEnabled = true } } func bindSubscribe(_ index:Int) { if index >= 0 && index < sbMgr.subscribes.count { editingSubscribe = sbMgr.subscribes[index] FeedTextField.bind(NSBindingName(rawValue: "value"), to: editingSubscribe!, withKeyPath: "subscribeFeed", options: convertToOptionalNSBindingOptionDictionary([convertFromNSBindingOption(NSBindingOption.continuouslyUpdatesValue): true])) TokenTextField.bind(NSBindingName(rawValue: "value"), to: editingSubscribe!, withKeyPath: "token", options: convertToOptionalNSBindingOptionDictionary([convertFromNSBindingOption(NSBindingOption.continuouslyUpdatesValue): true])) GroupTextField.bind(NSBindingName(rawValue: "value"), to: editingSubscribe!, withKeyPath: "groupName", options: convertToOptionalNSBindingOptionDictionary([convertFromNSBindingOption(NSBindingOption.continuouslyUpdatesValue): true])) MaxCountTextField.bind(NSBindingName(rawValue: "value"), to: editingSubscribe!, withKeyPath: "maxCount", options: convertToOptionalNSBindingOptionDictionary([convertFromNSBindingOption(NSBindingOption.continuouslyUpdatesValue): true])) ActiveButton.bind(NSBindingName(rawValue: "value"), to: editingSubscribe!, withKeyPath: "isActive", options: convertToOptionalNSBindingOptionDictionary([convertFromNSBindingOption(NSBindingOption.continuouslyUpdatesValue): true])) AutoUpdateButton.bind(NSBindingName(rawValue: "value"), to: editingSubscribe!, withKeyPath: "autoUpdateEnable", options: convertToOptionalNSBindingOptionDictionary([convertFromNSBindingOption(NSBindingOption.continuouslyUpdatesValue): true])) FilterTextField.bind(NSBindingName(rawValue: "value"), to: editingSubscribe!, withKeyPath: "filter", options: convertToOptionalNSBindingOptionDictionary([convertFromNSBindingOption(NSBindingOption.continuouslyUpdatesValue): true])) } else { editingSubscribe = nil FeedTextField.unbind(convertToNSBindingName("value")) TokenTextField.unbind(convertToNSBindingName("value")) GroupTextField.unbind(convertToNSBindingName("value")) MaxCountTextField.unbind(convertToNSBindingName("value")) ActiveButton.unbind(convertToNSBindingName("value")) AutoUpdateButton.unbind(convertToNSBindingName("value")) FilterTextField.unbind(convertToNSBindingName("value")) } } func getDataAtRow(_ index:Int) -> String { if index >= sbMgr.subscribes.count { return "" } if sbMgr.subscribes[index].groupName != "" { return sbMgr.subscribes[index].groupName } return sbMgr.subscribes[index].subscribeFeed } // MARK: For NSTableViewDataSource func numberOfRows(in tableView: NSTableView) -> Int { if let mgr = sbMgr { return mgr.subscribes.count } return 0 } func tableView(_ tableView: NSTableView , objectValueFor tableColumn: NSTableColumn? , row: Int) -> Any? { let title = getDataAtRow(row) if tableColumn?.identifier == NSUserInterfaceItemIdentifier("main") { if title != "" {return title} else {return "S"} } else if tableColumn?.identifier == NSUserInterfaceItemIdentifier("status") { return NSImage(named: NSImage.Name("menu_icon")) } return "" } // MARK: Drag & Drop reorder rows func tableView(_ tableView: NSTableView, pasteboardWriterForRow row: Int) -> NSPasteboardWriting? { let item = NSPasteboardItem() item.setString(String(row), forType: convertToNSPasteboardPasteboardType(tableViewDragType)) return item } func tableView(_ tableView: NSTableView, validateDrop info: NSDraggingInfo, proposedRow row: Int , proposedDropOperation dropOperation: NSTableView.DropOperation) -> NSDragOperation { if dropOperation == .above { return .move } return NSDragOperation() } func tableView(_ tableView: NSTableView, acceptDrop info: NSDraggingInfo , row: Int, dropOperation: NSTableView.DropOperation) -> Bool { if let mgr = sbMgr { var oldIndexes = [Int]() info.enumerateDraggingItems(options: [], for: tableView, classes: [NSPasteboardItem.self], searchOptions: [:], using: { (draggingItem: NSDraggingItem, idx: Int, stop: UnsafeMutablePointer) in if let str = (draggingItem.item as! NSPasteboardItem).string(forType: NSPasteboard.PasteboardType(rawValue: self.tableViewDragType)), let index = Int(str) { oldIndexes.append(index) } }) var oldIndexOffset = 0 var newIndexOffset = 0 // For simplicity, the code below uses `tableView.moveRowAtIndex` to move rows around directly. // You may want to move rows in your content array and then call `tableView.reloadData()` instead. tableView.beginUpdates() for oldIndex in oldIndexes { if oldIndex < row { let o = mgr.subscribes.remove(at: oldIndex + oldIndexOffset) mgr.subscribes.insert(o, at:row - 1) tableView.moveRow(at: oldIndex + oldIndexOffset, to: row - 1) oldIndexOffset -= 1 } else { let o = mgr.subscribes.remove(at: oldIndex) mgr.subscribes.insert(o, at:row + newIndexOffset) tableView.moveRow(at: oldIndex, to: row + newIndexOffset) newIndexOffset += 1 } } tableView.endUpdates() return true } return false } //-------------------------------------------------- // For NSTableViewDelegate func tableView(_ tableView: NSTableView , shouldEdit tableColumn: NSTableColumn?, row: Int) -> Bool { return false } func tableView(_ tableView: NSTableView, shouldSelectRow row: Int) -> Bool { if row < 0 { editingSubscribe = nil return true } return true } func tableViewSelectionDidChange(_ notification: Notification) { if SubscribeTableView.selectedRow >= 0 { bindSubscribe(SubscribeTableView.selectedRow) if !editingSubscribe.isActive{ AutoUpdateButton.isEnabled = false } } else { if !sbMgr.subscribes.isEmpty { let index = IndexSet(integer: sbMgr.subscribes.count - 1) SubscribeTableView.selectRowIndexes(index, byExtendingSelection: false) } } } func cleanField(){ FeedTextField.stringValue = "" TokenTextField.stringValue = "" GroupTextField.stringValue = "" MaxCountTextField.stringValue = "" FilterTextField.stringValue = "" } func shakeWindows(){ let numberOfShakes:Int = 8 let durationOfShake:Float = 0.5 let vigourOfShake:Float = 0.05 let frame:CGRect = (window?.frame)! let shakeAnimation = CAKeyframeAnimation() let shakePath = CGMutablePath() shakePath.move(to: CGPoint(x:NSMinX(frame), y:NSMinY(frame))) for _ in 1...numberOfShakes{ shakePath.addLine(to: CGPoint(x: NSMinX(frame) - frame.size.width * CGFloat(vigourOfShake), y: NSMinY(frame))) shakePath.addLine(to: CGPoint(x: NSMinX(frame) + frame.size.width * CGFloat(vigourOfShake), y: NSMinY(frame))) } shakePath.closeSubpath() shakeAnimation.path = shakePath shakeAnimation.duration = CFTimeInterval(durationOfShake) window?.animations = ["frameOrigin":shakeAnimation] window?.animator().setFrameOrigin(window!.frame.origin) } } // Helper function inserted by Swift 4.2 migrator. fileprivate func convertToNSPasteboardPasteboardTypeArray(_ input: [String]) -> [NSPasteboard.PasteboardType] { return input.map { key in NSPasteboard.PasteboardType(key) } } // Helper function inserted by Swift 4.2 migrator. fileprivate func convertToOptionalNSBindingOptionDictionary(_ input: [String: Any]?) -> [NSBindingOption: Any]? { guard let input = input else { return nil } return Dictionary(uniqueKeysWithValues: input.map { key, value in (NSBindingOption(rawValue: key), value)}) } // Helper function inserted by Swift 4.2 migrator. fileprivate func convertFromNSBindingOption(_ input: NSBindingOption) -> String { return input.rawValue } // Helper function inserted by Swift 4.2 migrator. fileprivate func convertToNSBindingName(_ input: String) -> NSBindingName { return NSBindingName(rawValue: input) } // Helper function inserted by Swift 4.2 migrator. fileprivate func convertFromNSUserInterfaceItemIdentifier(_ input: NSUserInterfaceItemIdentifier) -> String { return input.rawValue } // Helper function inserted by Swift 4.2 migrator. fileprivate func convertToNSPasteboardPasteboardType(_ input: String) -> NSPasteboard.PasteboardType { return NSPasteboard.PasteboardType(rawValue: input) } ================================================ FILE: Trojan/WIndows/ToastWindowController.swift ================================================ // // ToastWindowController.swift // Trojan // // Created by ParadiseDuo on 2019/11/6. // Copyright © 2020 ParadiseDuo. All rights reserved. // import Cocoa class ToastWindowController: NSWindowController { var message: String = "" @IBOutlet weak var titleTextField: NSTextField! @IBOutlet weak var panelView: NSView! let kHudFadeInDuration: Double = 0.35 let kHudFadeOutDuration: Double = 0.35 let kHudDisplayDuration: Double = 1.2 let kHudAlphaValue: CGFloat = 0.75 let kHudCornerRadius: CGFloat = 18.0 let kHudHorizontalMargin: CGFloat = 30 let kHudHeight: CGFloat = 90.0 var timerToFadeOut: Timer? = nil var fadingOut: Bool = false override func windowDidLoad() { super.windowDidLoad() self.shouldCascadeWindows = false // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file. if let win = self.window { win.isOpaque = false win.backgroundColor = .clear win.styleMask = NSWindow.StyleMask.borderless win.hidesOnDeactivate = false win.collectionBehavior = NSWindow.CollectionBehavior.canJoinAllSpaces win.level = NSWindow.Level(rawValue: Int(CGWindowLevelForKey(.floatingWindow))) win.orderFrontRegardless() } let viewLayer: CALayer = CALayer() viewLayer.backgroundColor = CGColor.init(red: 0.05, green: 0.05, blue: 0.05, alpha: kHudAlphaValue) viewLayer.cornerRadius = kHudCornerRadius panelView.wantsLayer = true panelView.layer = viewLayer panelView.layer?.opacity = 0.0 self.titleTextField.stringValue = self.message setupHud() } func setupHud() -> Void { titleTextField.sizeToFit() var labelFrame: CGRect = titleTextField.frame var hudWindowFrame: CGRect = self.window!.frame hudWindowFrame.size.width = labelFrame.size.width + kHudHorizontalMargin * 2 hudWindowFrame.size.height = kHudHeight let screenRect: NSRect = NSScreen.screens[0].visibleFrame hudWindowFrame.origin.x = (screenRect.size.width - hudWindowFrame.size.width) / 2 hudWindowFrame.origin.y = (screenRect.size.height - hudWindowFrame.size.height) / 2 self.window!.setFrame(hudWindowFrame, display: true) var viewFrame: NSRect = hudWindowFrame; viewFrame.origin.x = 0 viewFrame.origin.y = 0 panelView.frame = viewFrame labelFrame.origin.x = kHudHorizontalMargin labelFrame.origin.y = (hudWindowFrame.size.height - labelFrame.size.height) / 2 titleTextField.frame = labelFrame } func fadeInHud() -> Void { if timerToFadeOut != nil { timerToFadeOut?.invalidate() timerToFadeOut = nil } fadingOut = false CATransaction.begin() CATransaction.setAnimationDuration(kHudFadeInDuration) CATransaction.setCompletionBlock { self.didFadeIn() } panelView.layer?.opacity = 1.0 CATransaction.commit() } func didFadeIn() -> Void { timerToFadeOut = Timer.scheduledTimer( timeInterval: kHudDisplayDuration, target: self, selector: #selector(fadeOutHud), userInfo: nil, repeats: false) } @objc func fadeOutHud() -> Void { fadingOut = true CATransaction.begin() CATransaction.setAnimationDuration(kHudFadeOutDuration) CATransaction.setCompletionBlock { self.didFadeOut() } panelView.layer?.opacity = 0.0 CATransaction.commit() } func didFadeOut() -> Void { if fadingOut { self.window?.orderOut(self) } fadingOut = false } } ================================================ FILE: Trojan/WIndows/ToastWindowController.xib ================================================ ================================================ FILE: Trojan/WIndows/zh-Hans.lproj/SettingWindowController.strings ================================================ /* Class = "NSWindow"; title = "Setting"; ObjectID = "F0z-JX-Cv5"; */ "F0z-JX-Cv5.title" = "设置"; /* Class = "NSTextFieldCell"; title = "Text"; ObjectID = "GBD-1J-aUY"; */ "GBD-1J-aUY.title" = "Text"; /* Class = "NSTextFieldCell"; title = "Local Port"; ObjectID = "Gyu-fJ-ZES"; */ "Gyu-fJ-ZES.title" = "本地端口"; /* Class = "NSBox"; title = "Box"; ObjectID = "IxW-2H-8rV"; */ "IxW-2H-8rV.title" = "Box"; /* Class = "NSTextFieldCell"; title = "Local Address"; ObjectID = "Wei-TG-x93"; */ "Wei-TG-x93.title" = "本地监听地址"; /* Class = "NSTextFieldCell"; title = "Remote Port"; ObjectID = "bvj-l8-8ET"; */ "bvj-l8-8ET.title" = "服务器端口"; /* Class = "NSTextFieldCell"; title = "Remote Address"; ObjectID = "fli-dh-s7u"; */ "fli-dh-s7u.title" = "服务器地址"; /* Class = "NSTextFieldCell"; title = "Password"; ObjectID = "i0D-9V-Vbd"; */ "i0D-9V-Vbd.title" = "密码"; /* Class = "NSButtonCell"; title = "Save"; ObjectID = "xO8-VQ-N2V"; */ "xO8-VQ-N2V.title" = "保存"; /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "yh5-3a-s5u"; */ "yh5-3a-s5u.title" = "取消"; ================================================ FILE: Trojan/WIndows/zh-Hans.lproj/SettingsWIndowController.strings ================================================ /* Class = "NSButtonCell"; title = "Check Updates At Launch"; ObjectID = "2lA-Yb-g5P"; */ "2lA-Yb-g5P.title" = "打开后自动检查更新"; /* Class = "NSTextFieldCell"; title = "HTTP Proxy Listen Address:"; ObjectID = "7Gu-mk-D4u"; */ "7Gu-mk-D4u.title" = "HTTP代理监听地址:"; /* Class = "NSTabViewItem"; label = "HTTP"; ObjectID = "9eZ-LB-LAE"; */ "9eZ-LB-LAE.label" = "HTTP"; /* Class = "NSWindow"; title = "Settings"; ObjectID = "F0z-JX-Cv5"; */ "F0z-JX-Cv5.title" = "设置"; /* Class = "NSToolbarItem"; label = "General"; ObjectID = "PXB-LX-C1I"; */ "PXB-LX-C1I.label" = "常规设置"; /* Class = "NSToolbarItem"; paletteLabel = "General"; ObjectID = "PXB-LX-C1I"; */ "PXB-LX-C1I.paletteLabel" = "常规设置"; /* Class = "NSButtonCell"; title = "Save"; ObjectID = "UkP-CN-9fg"; */ "UkP-CN-9fg.title" = "保存"; /* Class = "NSTextFieldCell"; title = "HTTP Proxy Listen Port:"; ObjectID = "WJH-fF-F97"; */ "WJH-fF-F97.title" = "HTTP代理监听端口:"; /* Class = "NSButtonCell"; title = "Launch At Login"; ObjectID = "XRd-gw-sVz"; */ "XRd-gw-sVz.title" = "登录后自动启动"; /* Class = "NSButtonCell"; title = "HTTP Proxy Enable"; ObjectID = "ddc-tk-35g"; */ "ddc-tk-35g.title" = "开启HTTP代理"; /* Class = "NSButtonCell"; title = "Follow Global Mode"; ObjectID = "qsk-nQ-vvI"; */ "qsk-nQ-vvI.title" = "跟随全局模式"; /* Class = "NSTabViewItem"; label = "General"; ObjectID = "u90-Qy-cbH"; */ "u90-Qy-cbH.label" = "常规设置"; /* Class = "NSToolbarItem"; label = "HTTP"; ObjectID = "wfh-Rc-uiw"; */ "wfh-Rc-uiw.label" = "HTTP"; /* Class = "NSToolbarItem"; paletteLabel = "HTTP"; ObjectID = "wfh-Rc-uiw"; */ "wfh-Rc-uiw.paletteLabel" = "HTTP"; "v88-LG-DJP.title" = "显示网速"; ================================================ FILE: Trojan/WIndows/zh-Hans.lproj/SubscribePreferenceWindowController.strings ================================================ /* Class = "NSTextFieldCell"; placeholderString = "Optional"; ObjectID = "3kt-n3-uTF"; */ "3kt-n3-uTF.placeholderString" = "可选"; /* Class = "NSTextFieldCell"; placeholderString = "Optional"; ObjectID = "ASh-mc-Uyt"; */ "ASh-mc-Uyt.placeholderString" = "可选"; /* Class = "NSButtonCell"; title = "OK"; ObjectID = "CfK-8Y-YNP"; */ "CfK-8Y-YNP.title" = "确定"; /* Class = "NSWindow"; title = "Subscribe Preference"; ObjectID = "F0z-JX-Cv5"; */ "F0z-JX-Cv5.title" = "订阅设置"; /* Class = "NSTextFieldCell"; placeholderString = "Optional"; ObjectID = "H5J-cK-8xj"; */ "H5J-cK-8xj.placeholderString" = "可选"; /* Class = "NSTextFieldCell"; title = "Token"; ObjectID = "IrJ-D8-tlX"; */ "IrJ-D8-tlX.title" = "Token"; /* Class = "NSTextFieldCell"; title = "Filter"; ObjectID = "VWC-h6-dyf"; */ "VWC-h6-dyf.title" = "过滤"; /* Class = "NSTextFieldCell"; title = "Group"; ObjectID = "f2p-qb-uuE"; */ "f2p-qb-uuE.title" = "组名"; /* Class = "NSTextFieldCell"; title = "Text"; ObjectID = "ik7-wS-gok"; */ "ik7-wS-gok.title" = "Text"; /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "mdP-Aw-g2g"; */ "mdP-Aw-g2g.title" = "取消"; /* Class = "NSButtonCell"; title = "AutoUpdate"; ObjectID = "wAH-F1-KhY"; */ "wAH-F1-KhY.title" = "自动更新"; /* Class = "NSTextFieldCell"; title = "Count"; ObjectID = "wbG-HT-bdN"; */ "wbG-HT-bdN.title" = "最大数"; /* Class = "NSButtonCell"; title = "Active"; ObjectID = "xDA-ea-y72"; */ "xDA-ea-y72.title" = "激活"; /* Class = "NSTextFieldCell"; title = "URL"; ObjectID = "yBp-oB-gbL"; */ "yBp-oB-gbL.title" = "订阅"; ================================================ FILE: Trojan/en.lproj/Localizable.strings ================================================ /* Localizable.strings Trojan Created by Paradiseduo on 2020/6/19. Copyright © 2020 ParadiseDuo. All rights reserved. */ "Turn Trojan On" = "Turn Trojan On"; "Turn Trojan Off" = "Turn Trojan Off"; "Trojan: Off" = "Trojan: Off"; "Trojan: On" = "Trojan: On"; "Export Command Copied." = "Export Command Copied"; "Export Command Copied Failed." = "Export Command Copied Failed"; "Logs Cleand" = "Logs Cleand"; ================================================ FILE: Trojan/tcping/ConnectTestigManager.swift ================================================ // // ConnectTestigManager.swift // Trojan // // Created by YouShaoduo on 2020/10/9. // Copyright © 2020 ParadiseDuo. All rights reserved. // import Foundation var isTesting:Bool = false var nerverTestBefore = true class ConnectTestigManager { static let shared = ConnectTestigManager() private var tcping: Tcping? func start() { if !isTesting { isTesting = true self.tcping = Tcping() self.tcping!.ping { isTesting = false NotificationCenter.default.post(name: NOTIFY_REFRESH_SERVERS, object: nil) self.tcping = nil } } } } extension NumberFormatter { static func three(_ number: NSNumber) -> String { let nf = NumberFormatter() nf.numberStyle = .decimal nf.maximumFractionDigits = 3 return nf.string(from: number) ?? "failed" } } ================================================ FILE: Trojan/tcping/GCDAsyncSocket.h ================================================ // // GCDAsyncSocket.h // // This class is in the public domain. // Originally created by Robbie Hanson in Q3 2010. // Updated and maintained by Deusty LLC and the Apple development community. // // https://github.com/robbiehanson/CocoaAsyncSocket // #import #import #import #import #import #include // AF_INET, AF_INET6 @class GCDAsyncReadPacket; @class GCDAsyncWritePacket; @class GCDAsyncSocketPreBuffer; @protocol GCDAsyncSocketDelegate; NS_ASSUME_NONNULL_BEGIN extern NSString *const GCDAsyncSocketException; extern NSString *const GCDAsyncSocketErrorDomain; extern NSString *const GCDAsyncSocketQueueName; extern NSString *const GCDAsyncSocketThreadName; extern NSString *const GCDAsyncSocketManuallyEvaluateTrust; #if TARGET_OS_IPHONE extern NSString *const GCDAsyncSocketUseCFStreamForTLS; #endif #define GCDAsyncSocketSSLPeerName (NSString *)kCFStreamSSLPeerName #define GCDAsyncSocketSSLCertificates (NSString *)kCFStreamSSLCertificates #define GCDAsyncSocketSSLIsServer (NSString *)kCFStreamSSLIsServer extern NSString *const GCDAsyncSocketSSLPeerID; extern NSString *const GCDAsyncSocketSSLProtocolVersionMin; extern NSString *const GCDAsyncSocketSSLProtocolVersionMax; extern NSString *const GCDAsyncSocketSSLSessionOptionFalseStart; extern NSString *const GCDAsyncSocketSSLSessionOptionSendOneByteRecord; extern NSString *const GCDAsyncSocketSSLCipherSuites; #if !TARGET_OS_IPHONE extern NSString *const GCDAsyncSocketSSLDiffieHellmanParameters; #endif #define GCDAsyncSocketLoggingContext 65535 typedef NS_ERROR_ENUM(GCDAsyncSocketErrorDomain, GCDAsyncSocketError) { GCDAsyncSocketNoError = 0, // Never used GCDAsyncSocketBadConfigError, // Invalid configuration GCDAsyncSocketBadParamError, // Invalid parameter was passed GCDAsyncSocketConnectTimeoutError, // A connect operation timed out GCDAsyncSocketReadTimeoutError, // A read operation timed out GCDAsyncSocketWriteTimeoutError, // A write operation timed out GCDAsyncSocketReadMaxedOutError, // Reached set maxLength without completing GCDAsyncSocketClosedError, // The remote peer closed the connection GCDAsyncSocketOtherError, // Description provided in userInfo }; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #pragma mark - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @interface GCDAsyncSocket : NSObject /** * GCDAsyncSocket uses the standard delegate paradigm, * but executes all delegate callbacks on a given delegate dispatch queue. * This allows for maximum concurrency, while at the same time providing easy thread safety. * * You MUST set a delegate AND delegate dispatch queue before attempting to * use the socket, or you will get an error. * * The socket queue is optional. * If you pass NULL, GCDAsyncSocket will automatically create it's own socket queue. * If you choose to provide a socket queue, the socket queue must not be a concurrent queue. * If you choose to provide a socket queue, and the socket queue has a configured target queue, * then please see the discussion for the method markSocketQueueTargetQueue. * * The delegate queue and socket queue can optionally be the same. **/ - (instancetype)init; - (instancetype)initWithSocketQueue:(nullable dispatch_queue_t)sq; - (instancetype)initWithDelegate:(nullable id)aDelegate delegateQueue:(nullable dispatch_queue_t)dq; - (instancetype)initWithDelegate:(nullable id)aDelegate delegateQueue:(nullable dispatch_queue_t)dq socketQueue:(nullable dispatch_queue_t)sq NS_DESIGNATED_INITIALIZER; /** * Create GCDAsyncSocket from already connect BSD socket file descriptor **/ + (nullable instancetype)socketFromConnectedSocketFD:(int)socketFD socketQueue:(nullable dispatch_queue_t)sq error:(NSError**)error; + (nullable instancetype)socketFromConnectedSocketFD:(int)socketFD delegate:(nullable id)aDelegate delegateQueue:(nullable dispatch_queue_t)dq error:(NSError**)error; + (nullable instancetype)socketFromConnectedSocketFD:(int)socketFD delegate:(nullable id)aDelegate delegateQueue:(nullable dispatch_queue_t)dq socketQueue:(nullable dispatch_queue_t)sq error:(NSError **)error; #pragma mark Configuration @property (atomic, weak, readwrite, nullable) id delegate; #if OS_OBJECT_USE_OBJC @property (atomic, strong, readwrite, nullable) dispatch_queue_t delegateQueue; #else @property (atomic, assign, readwrite, nullable) dispatch_queue_t delegateQueue; #endif - (void)getDelegate:(id __nullable * __nullable)delegatePtr delegateQueue:(dispatch_queue_t __nullable * __nullable)delegateQueuePtr; - (void)setDelegate:(nullable id)delegate delegateQueue:(nullable dispatch_queue_t)delegateQueue; /** * If you are setting the delegate to nil within the delegate's dealloc method, * you may need to use the synchronous versions below. **/ - (void)synchronouslySetDelegate:(nullable id)delegate; - (void)synchronouslySetDelegateQueue:(nullable dispatch_queue_t)delegateQueue; - (void)synchronouslySetDelegate:(nullable id)delegate delegateQueue:(nullable dispatch_queue_t)delegateQueue; /** * By default, both IPv4 and IPv6 are enabled. * * For accepting incoming connections, this means GCDAsyncSocket automatically supports both protocols, * and can simulataneously accept incoming connections on either protocol. * * For outgoing connections, this means GCDAsyncSocket can connect to remote hosts running either protocol. * If a DNS lookup returns only IPv4 results, GCDAsyncSocket will automatically use IPv4. * If a DNS lookup returns only IPv6 results, GCDAsyncSocket will automatically use IPv6. * If a DNS lookup returns both IPv4 and IPv6 results, the preferred protocol will be chosen. * By default, the preferred protocol is IPv4, but may be configured as desired. **/ @property (atomic, assign, readwrite, getter=isIPv4Enabled) BOOL IPv4Enabled; @property (atomic, assign, readwrite, getter=isIPv6Enabled) BOOL IPv6Enabled; @property (atomic, assign, readwrite, getter=isIPv4PreferredOverIPv6) BOOL IPv4PreferredOverIPv6; /** * When connecting to both IPv4 and IPv6 using Happy Eyeballs (RFC 6555) https://tools.ietf.org/html/rfc6555 * this is the delay between connecting to the preferred protocol and the fallback protocol. * * Defaults to 300ms. **/ @property (atomic, assign, readwrite) NSTimeInterval alternateAddressDelay; /** * User data allows you to associate arbitrary information with the socket. * This data is not used internally by socket in any way. **/ @property (atomic, strong, readwrite, nullable) id userData; #pragma mark Accepting /** * Tells the socket to begin listening and accepting connections on the given port. * When a connection is accepted, a new instance of GCDAsyncSocket will be spawned to handle it, * and the socket:didAcceptNewSocket: delegate method will be invoked. * * The socket will listen on all available interfaces (e.g. wifi, ethernet, etc) **/ - (BOOL)acceptOnPort:(uint16_t)port error:(NSError **)errPtr; /** * This method is the same as acceptOnPort:error: with the * additional option of specifying which interface to listen on. * * For example, you could specify that the socket should only accept connections over ethernet, * and not other interfaces such as wifi. * * The interface may be specified by name (e.g. "en1" or "lo0") or by IP address (e.g. "192.168.4.34"). * You may also use the special strings "localhost" or "loopback" to specify that * the socket only accept connections from the local machine. * * You can see the list of interfaces via the command line utility "ifconfig", * or programmatically via the getifaddrs() function. * * To accept connections on any interface pass nil, or simply use the acceptOnPort:error: method. **/ - (BOOL)acceptOnInterface:(nullable NSString *)interface port:(uint16_t)port error:(NSError **)errPtr; /** * Tells the socket to begin listening and accepting connections on the unix domain at the given url. * When a connection is accepted, a new instance of GCDAsyncSocket will be spawned to handle it, * and the socket:didAcceptNewSocket: delegate method will be invoked. * * The socket will listen on all available interfaces (e.g. wifi, ethernet, etc) **/ - (BOOL)acceptOnUrl:(NSURL *)url error:(NSError **)errPtr; #pragma mark Connecting /** * Connects to the given host and port. * * This method invokes connectToHost:onPort:viaInterface:withTimeout:error: * and uses the default interface, and no timeout. **/ - (BOOL)connectToHost:(NSString *)host onPort:(uint16_t)port error:(NSError **)errPtr; /** * Connects to the given host and port with an optional timeout. * * This method invokes connectToHost:onPort:viaInterface:withTimeout:error: and uses the default interface. **/ - (BOOL)connectToHost:(NSString *)host onPort:(uint16_t)port withTimeout:(NSTimeInterval)timeout error:(NSError **)errPtr; /** * Connects to the given host & port, via the optional interface, with an optional timeout. * * The host may be a domain name (e.g. "deusty.com") or an IP address string (e.g. "192.168.0.2"). * The host may also be the special strings "localhost" or "loopback" to specify connecting * to a service on the local machine. * * The interface may be a name (e.g. "en1" or "lo0") or the corresponding IP address (e.g. "192.168.4.35"). * The interface may also be used to specify the local port (see below). * * To not time out use a negative time interval. * * This method will return NO if an error is detected, and set the error pointer (if one was given). * Possible errors would be a nil host, invalid interface, or socket is already connected. * * If no errors are detected, this method will start a background connect operation and immediately return YES. * The delegate callbacks are used to notify you when the socket connects, or if the host was unreachable. * * Since this class supports queued reads and writes, you can immediately start reading and/or writing. * All read/write operations will be queued, and upon socket connection, * the operations will be dequeued and processed in order. * * The interface may optionally contain a port number at the end of the string, separated by a colon. * This allows you to specify the local port that should be used for the outgoing connection. (read paragraph to end) * To specify both interface and local port: "en1:8082" or "192.168.4.35:2424". * To specify only local port: ":8082". * Please note this is an advanced feature, and is somewhat hidden on purpose. * You should understand that 99.999% of the time you should NOT specify the local port for an outgoing connection. * If you think you need to, there is a very good chance you have a fundamental misunderstanding somewhere. * Local ports do NOT need to match remote ports. In fact, they almost never do. * This feature is here for networking professionals using very advanced techniques. **/ - (BOOL)connectToHost:(NSString *)host onPort:(uint16_t)port viaInterface:(nullable NSString *)interface withTimeout:(NSTimeInterval)timeout error:(NSError **)errPtr; /** * Connects to the given address, specified as a sockaddr structure wrapped in a NSData object. * For example, a NSData object returned from NSNetService's addresses method. * * If you have an existing struct sockaddr you can convert it to a NSData object like so: * struct sockaddr sa -> NSData *dsa = [NSData dataWithBytes:&remoteAddr length:remoteAddr.sa_len]; * struct sockaddr *sa -> NSData *dsa = [NSData dataWithBytes:remoteAddr length:remoteAddr->sa_len]; * * This method invokes connectToAddress:remoteAddr viaInterface:nil withTimeout:-1 error:errPtr. **/ - (BOOL)connectToAddress:(NSData *)remoteAddr error:(NSError **)errPtr; /** * This method is the same as connectToAddress:error: with an additional timeout option. * To not time out use a negative time interval, or simply use the connectToAddress:error: method. **/ - (BOOL)connectToAddress:(NSData *)remoteAddr withTimeout:(NSTimeInterval)timeout error:(NSError **)errPtr; /** * Connects to the given address, using the specified interface and timeout. * * The address is specified as a sockaddr structure wrapped in a NSData object. * For example, a NSData object returned from NSNetService's addresses method. * * If you have an existing struct sockaddr you can convert it to a NSData object like so: * struct sockaddr sa -> NSData *dsa = [NSData dataWithBytes:&remoteAddr length:remoteAddr.sa_len]; * struct sockaddr *sa -> NSData *dsa = [NSData dataWithBytes:remoteAddr length:remoteAddr->sa_len]; * * The interface may be a name (e.g. "en1" or "lo0") or the corresponding IP address (e.g. "192.168.4.35"). * The interface may also be used to specify the local port (see below). * * The timeout is optional. To not time out use a negative time interval. * * This method will return NO if an error is detected, and set the error pointer (if one was given). * Possible errors would be a nil host, invalid interface, or socket is already connected. * * If no errors are detected, this method will start a background connect operation and immediately return YES. * The delegate callbacks are used to notify you when the socket connects, or if the host was unreachable. * * Since this class supports queued reads and writes, you can immediately start reading and/or writing. * All read/write operations will be queued, and upon socket connection, * the operations will be dequeued and processed in order. * * The interface may optionally contain a port number at the end of the string, separated by a colon. * This allows you to specify the local port that should be used for the outgoing connection. (read paragraph to end) * To specify both interface and local port: "en1:8082" or "192.168.4.35:2424". * To specify only local port: ":8082". * Please note this is an advanced feature, and is somewhat hidden on purpose. * You should understand that 99.999% of the time you should NOT specify the local port for an outgoing connection. * If you think you need to, there is a very good chance you have a fundamental misunderstanding somewhere. * Local ports do NOT need to match remote ports. In fact, they almost never do. * This feature is here for networking professionals using very advanced techniques. **/ - (BOOL)connectToAddress:(NSData *)remoteAddr viaInterface:(nullable NSString *)interface withTimeout:(NSTimeInterval)timeout error:(NSError **)errPtr; /** * Connects to the unix domain socket at the given url, using the specified timeout. */ - (BOOL)connectToUrl:(NSURL *)url withTimeout:(NSTimeInterval)timeout error:(NSError **)errPtr; /** * Iterates over the given NetService's addresses in order, and invokes connectToAddress:error:. Stops at the * first invocation that succeeds and returns YES; otherwise returns NO. */ - (BOOL)connectToNetService:(NSNetService *)netService error:(NSError **)errPtr; #pragma mark Disconnecting /** * Disconnects immediately (synchronously). Any pending reads or writes are dropped. * * If the socket is not already disconnected, an invocation to the socketDidDisconnect:withError: delegate method * will be queued onto the delegateQueue asynchronously (behind any previously queued delegate methods). * In other words, the disconnected delegate method will be invoked sometime shortly after this method returns. * * Please note the recommended way of releasing a GCDAsyncSocket instance (e.g. in a dealloc method) * [asyncSocket setDelegate:nil]; * [asyncSocket disconnect]; * [asyncSocket release]; * * If you plan on disconnecting the socket, and then immediately asking it to connect again, * you'll likely want to do so like this: * [asyncSocket setDelegate:nil]; * [asyncSocket disconnect]; * [asyncSocket setDelegate:self]; * [asyncSocket connect...]; **/ - (void)disconnect; /** * Disconnects after all pending reads have completed. * After calling this, the read and write methods will do nothing. * The socket will disconnect even if there are still pending writes. **/ - (void)disconnectAfterReading; /** * Disconnects after all pending writes have completed. * After calling this, the read and write methods will do nothing. * The socket will disconnect even if there are still pending reads. **/ - (void)disconnectAfterWriting; /** * Disconnects after all pending reads and writes have completed. * After calling this, the read and write methods will do nothing. **/ - (void)disconnectAfterReadingAndWriting; #pragma mark Diagnostics /** * Returns whether the socket is disconnected or connected. * * A disconnected socket may be recycled. * That is, it can be used again for connecting or listening. * * If a socket is in the process of connecting, it may be neither disconnected nor connected. **/ @property (atomic, readonly) BOOL isDisconnected; @property (atomic, readonly) BOOL isConnected; /** * Returns the local or remote host and port to which this socket is connected, or nil and 0 if not connected. * The host will be an IP address. **/ @property (atomic, readonly, nullable) NSString *connectedHost; @property (atomic, readonly) uint16_t connectedPort; @property (atomic, readonly, nullable) NSURL *connectedUrl; @property (atomic, readonly, nullable) NSString *localHost; @property (atomic, readonly) uint16_t localPort; /** * Returns the local or remote address to which this socket is connected, * specified as a sockaddr structure wrapped in a NSData object. * * @seealso connectedHost * @seealso connectedPort * @seealso localHost * @seealso localPort **/ @property (atomic, readonly, nullable) NSData *connectedAddress; @property (atomic, readonly, nullable) NSData *localAddress; /** * Returns whether the socket is IPv4 or IPv6. * An accepting socket may be both. **/ @property (atomic, readonly) BOOL isIPv4; @property (atomic, readonly) BOOL isIPv6; /** * Returns whether or not the socket has been secured via SSL/TLS. * * See also the startTLS method. **/ @property (atomic, readonly) BOOL isSecure; #pragma mark Reading // The readData and writeData methods won't block (they are asynchronous). // // When a read is complete the socket:didReadData:withTag: delegate method is dispatched on the delegateQueue. // When a write is complete the socket:didWriteDataWithTag: delegate method is dispatched on the delegateQueue. // // You may optionally set a timeout for any read/write operation. (To not timeout, use a negative time interval.) // If a read/write opertion times out, the corresponding "socket:shouldTimeout..." delegate method // is called to optionally allow you to extend the timeout. // Upon a timeout, the "socket:didDisconnectWithError:" method is called // // The tag is for your convenience. // You can use it as an array index, step number, state id, pointer, etc. /** * Reads the first available bytes that become available on the socket. * * If the timeout value is negative, the read operation will not use a timeout. **/ - (void)readDataWithTimeout:(NSTimeInterval)timeout tag:(long)tag; /** * Reads the first available bytes that become available on the socket. * The bytes will be appended to the given byte buffer starting at the given offset. * The given buffer will automatically be increased in size if needed. * * If the timeout value is negative, the read operation will not use a timeout. * If the buffer is nil, the socket will create a buffer for you. * * If the bufferOffset is greater than the length of the given buffer, * the method will do nothing, and the delegate will not be called. * * If you pass a buffer, you must not alter it in any way while the socket is using it. * After completion, the data returned in socket:didReadData:withTag: will be a subset of the given buffer. * That is, it will reference the bytes that were appended to the given buffer via * the method [NSData dataWithBytesNoCopy:length:freeWhenDone:NO]. **/ - (void)readDataWithTimeout:(NSTimeInterval)timeout buffer:(nullable NSMutableData *)buffer bufferOffset:(NSUInteger)offset tag:(long)tag; /** * Reads the first available bytes that become available on the socket. * The bytes will be appended to the given byte buffer starting at the given offset. * The given buffer will automatically be increased in size if needed. * A maximum of length bytes will be read. * * If the timeout value is negative, the read operation will not use a timeout. * If the buffer is nil, a buffer will automatically be created for you. * If maxLength is zero, no length restriction is enforced. * * If the bufferOffset is greater than the length of the given buffer, * the method will do nothing, and the delegate will not be called. * * If you pass a buffer, you must not alter it in any way while the socket is using it. * After completion, the data returned in socket:didReadData:withTag: will be a subset of the given buffer. * That is, it will reference the bytes that were appended to the given buffer via * the method [NSData dataWithBytesNoCopy:length:freeWhenDone:NO]. **/ - (void)readDataWithTimeout:(NSTimeInterval)timeout buffer:(nullable NSMutableData *)buffer bufferOffset:(NSUInteger)offset maxLength:(NSUInteger)length tag:(long)tag; /** * Reads the given number of bytes. * * If the timeout value is negative, the read operation will not use a timeout. * * If the length is 0, this method does nothing and the delegate is not called. **/ - (void)readDataToLength:(NSUInteger)length withTimeout:(NSTimeInterval)timeout tag:(long)tag; /** * Reads the given number of bytes. * The bytes will be appended to the given byte buffer starting at the given offset. * The given buffer will automatically be increased in size if needed. * * If the timeout value is negative, the read operation will not use a timeout. * If the buffer is nil, a buffer will automatically be created for you. * * If the length is 0, this method does nothing and the delegate is not called. * If the bufferOffset is greater than the length of the given buffer, * the method will do nothing, and the delegate will not be called. * * If you pass a buffer, you must not alter it in any way while AsyncSocket is using it. * After completion, the data returned in socket:didReadData:withTag: will be a subset of the given buffer. * That is, it will reference the bytes that were appended to the given buffer via * the method [NSData dataWithBytesNoCopy:length:freeWhenDone:NO]. **/ - (void)readDataToLength:(NSUInteger)length withTimeout:(NSTimeInterval)timeout buffer:(nullable NSMutableData *)buffer bufferOffset:(NSUInteger)offset tag:(long)tag; /** * Reads bytes until (and including) the passed "data" parameter, which acts as a separator. * * If the timeout value is negative, the read operation will not use a timeout. * * If you pass nil or zero-length data as the "data" parameter, * the method will do nothing (except maybe print a warning), and the delegate will not be called. * * To read a line from the socket, use the line separator (e.g. CRLF for HTTP, see below) as the "data" parameter. * If you're developing your own custom protocol, be sure your separator can not occur naturally as * part of the data between separators. * For example, imagine you want to send several small documents over a socket. * Using CRLF as a separator is likely unwise, as a CRLF could easily exist within the documents. * In this particular example, it would be better to use a protocol similar to HTTP with * a header that includes the length of the document. * Also be careful that your separator cannot occur naturally as part of the encoding for a character. * * The given data (separator) parameter should be immutable. * For performance reasons, the socket will retain it, not copy it. * So if it is immutable, don't modify it while the socket is using it. **/ - (void)readDataToData:(nullable NSData *)data withTimeout:(NSTimeInterval)timeout tag:(long)tag; /** * Reads bytes until (and including) the passed "data" parameter, which acts as a separator. * The bytes will be appended to the given byte buffer starting at the given offset. * The given buffer will automatically be increased in size if needed. * * If the timeout value is negative, the read operation will not use a timeout. * If the buffer is nil, a buffer will automatically be created for you. * * If the bufferOffset is greater than the length of the given buffer, * the method will do nothing (except maybe print a warning), and the delegate will not be called. * * If you pass a buffer, you must not alter it in any way while the socket is using it. * After completion, the data returned in socket:didReadData:withTag: will be a subset of the given buffer. * That is, it will reference the bytes that were appended to the given buffer via * the method [NSData dataWithBytesNoCopy:length:freeWhenDone:NO]. * * To read a line from the socket, use the line separator (e.g. CRLF for HTTP, see below) as the "data" parameter. * If you're developing your own custom protocol, be sure your separator can not occur naturally as * part of the data between separators. * For example, imagine you want to send several small documents over a socket. * Using CRLF as a separator is likely unwise, as a CRLF could easily exist within the documents. * In this particular example, it would be better to use a protocol similar to HTTP with * a header that includes the length of the document. * Also be careful that your separator cannot occur naturally as part of the encoding for a character. * * The given data (separator) parameter should be immutable. * For performance reasons, the socket will retain it, not copy it. * So if it is immutable, don't modify it while the socket is using it. **/ - (void)readDataToData:(NSData *)data withTimeout:(NSTimeInterval)timeout buffer:(nullable NSMutableData *)buffer bufferOffset:(NSUInteger)offset tag:(long)tag; /** * Reads bytes until (and including) the passed "data" parameter, which acts as a separator. * * If the timeout value is negative, the read operation will not use a timeout. * * If maxLength is zero, no length restriction is enforced. * Otherwise if maxLength bytes are read without completing the read, * it is treated similarly to a timeout - the socket is closed with a GCDAsyncSocketReadMaxedOutError. * The read will complete successfully if exactly maxLength bytes are read and the given data is found at the end. * * If you pass nil or zero-length data as the "data" parameter, * the method will do nothing (except maybe print a warning), and the delegate will not be called. * If you pass a maxLength parameter that is less than the length of the data parameter, * the method will do nothing (except maybe print a warning), and the delegate will not be called. * * To read a line from the socket, use the line separator (e.g. CRLF for HTTP, see below) as the "data" parameter. * If you're developing your own custom protocol, be sure your separator can not occur naturally as * part of the data between separators. * For example, imagine you want to send several small documents over a socket. * Using CRLF as a separator is likely unwise, as a CRLF could easily exist within the documents. * In this particular example, it would be better to use a protocol similar to HTTP with * a header that includes the length of the document. * Also be careful that your separator cannot occur naturally as part of the encoding for a character. * * The given data (separator) parameter should be immutable. * For performance reasons, the socket will retain it, not copy it. * So if it is immutable, don't modify it while the socket is using it. **/ - (void)readDataToData:(NSData *)data withTimeout:(NSTimeInterval)timeout maxLength:(NSUInteger)length tag:(long)tag; /** * Reads bytes until (and including) the passed "data" parameter, which acts as a separator. * The bytes will be appended to the given byte buffer starting at the given offset. * The given buffer will automatically be increased in size if needed. * * If the timeout value is negative, the read operation will not use a timeout. * If the buffer is nil, a buffer will automatically be created for you. * * If maxLength is zero, no length restriction is enforced. * Otherwise if maxLength bytes are read without completing the read, * it is treated similarly to a timeout - the socket is closed with a GCDAsyncSocketReadMaxedOutError. * The read will complete successfully if exactly maxLength bytes are read and the given data is found at the end. * * If you pass a maxLength parameter that is less than the length of the data (separator) parameter, * the method will do nothing (except maybe print a warning), and the delegate will not be called. * If the bufferOffset is greater than the length of the given buffer, * the method will do nothing (except maybe print a warning), and the delegate will not be called. * * If you pass a buffer, you must not alter it in any way while the socket is using it. * After completion, the data returned in socket:didReadData:withTag: will be a subset of the given buffer. * That is, it will reference the bytes that were appended to the given buffer via * the method [NSData dataWithBytesNoCopy:length:freeWhenDone:NO]. * * To read a line from the socket, use the line separator (e.g. CRLF for HTTP, see below) as the "data" parameter. * If you're developing your own custom protocol, be sure your separator can not occur naturally as * part of the data between separators. * For example, imagine you want to send several small documents over a socket. * Using CRLF as a separator is likely unwise, as a CRLF could easily exist within the documents. * In this particular example, it would be better to use a protocol similar to HTTP with * a header that includes the length of the document. * Also be careful that your separator cannot occur naturally as part of the encoding for a character. * * The given data (separator) parameter should be immutable. * For performance reasons, the socket will retain it, not copy it. * So if it is immutable, don't modify it while the socket is using it. **/ - (void)readDataToData:(NSData *)data withTimeout:(NSTimeInterval)timeout buffer:(nullable NSMutableData *)buffer bufferOffset:(NSUInteger)offset maxLength:(NSUInteger)length tag:(long)tag; /** * Returns progress of the current read, from 0.0 to 1.0, or NaN if no current read (use isnan() to check). * The parameters "tag", "done" and "total" will be filled in if they aren't NULL. **/ - (float)progressOfReadReturningTag:(nullable long *)tagPtr bytesDone:(nullable NSUInteger *)donePtr total:(nullable NSUInteger *)totalPtr; #pragma mark Writing /** * Writes data to the socket, and calls the delegate when finished. * * If you pass in nil or zero-length data, this method does nothing and the delegate will not be called. * If the timeout value is negative, the write operation will not use a timeout. * * Thread-Safety Note: * If the given data parameter is mutable (NSMutableData) then you MUST NOT alter the data while * the socket is writing it. In other words, it's not safe to alter the data until after the delegate method * socket:didWriteDataWithTag: is invoked signifying that this particular write operation has completed. * This is due to the fact that GCDAsyncSocket does NOT copy the data. It simply retains it. * This is for performance reasons. Often times, if NSMutableData is passed, it is because * a request/response was built up in memory. Copying this data adds an unwanted/unneeded overhead. * If you need to write data from an immutable buffer, and you need to alter the buffer before the socket * completes writing the bytes (which is NOT immediately after this method returns, but rather at a later time * when the delegate method notifies you), then you should first copy the bytes, and pass the copy to this method. **/ - (void)writeData:(nullable NSData *)data withTimeout:(NSTimeInterval)timeout tag:(long)tag; /** * Returns progress of the current write, from 0.0 to 1.0, or NaN if no current write (use isnan() to check). * The parameters "tag", "done" and "total" will be filled in if they aren't NULL. **/ - (float)progressOfWriteReturningTag:(nullable long *)tagPtr bytesDone:(nullable NSUInteger *)donePtr total:(nullable NSUInteger *)totalPtr; #pragma mark Security /** * Secures the connection using SSL/TLS. * * This method may be called at any time, and the TLS handshake will occur after all pending reads and writes * are finished. This allows one the option of sending a protocol dependent StartTLS message, and queuing * the upgrade to TLS at the same time, without having to wait for the write to finish. * Any reads or writes scheduled after this method is called will occur over the secured connection. * * ==== The available TOP-LEVEL KEYS are: * * - GCDAsyncSocketManuallyEvaluateTrust * The value must be of type NSNumber, encapsulating a BOOL value. * If you set this to YES, then the underlying SecureTransport system will not evaluate the SecTrustRef of the peer. * Instead it will pause at the moment evaulation would typically occur, * and allow us to handle the security evaluation however we see fit. * So GCDAsyncSocket will invoke the delegate method socket:shouldTrustPeer: passing the SecTrustRef. * * Note that if you set this option, then all other configuration keys are ignored. * Evaluation will be completely up to you during the socket:didReceiveTrust:completionHandler: delegate method. * * For more information on trust evaluation see: * Apple's Technical Note TN2232 - HTTPS Server Trust Evaluation * https://developer.apple.com/library/ios/technotes/tn2232/_index.html * * If unspecified, the default value is NO. * * - GCDAsyncSocketUseCFStreamForTLS (iOS only) * The value must be of type NSNumber, encapsulating a BOOL value. * By default GCDAsyncSocket will use the SecureTransport layer to perform encryption. * This gives us more control over the security protocol (many more configuration options), * plus it allows us to optimize things like sys calls and buffer allocation. * * However, if you absolutely must, you can instruct GCDAsyncSocket to use the old-fashioned encryption * technique by going through the CFStream instead. So instead of using SecureTransport, GCDAsyncSocket * will instead setup a CFRead/CFWriteStream. And then set the kCFStreamPropertySSLSettings property * (via CFReadStreamSetProperty / CFWriteStreamSetProperty) and will pass the given options to this method. * * Thus all the other keys in the given dictionary will be ignored by GCDAsyncSocket, * and will passed directly CFReadStreamSetProperty / CFWriteStreamSetProperty. * For more infomation on these keys, please see the documentation for kCFStreamPropertySSLSettings. * * If unspecified, the default value is NO. * * ==== The available CONFIGURATION KEYS are: * * - kCFStreamSSLPeerName * The value must be of type NSString. * It should match the name in the X.509 certificate given by the remote party. * See Apple's documentation for SSLSetPeerDomainName. * * - kCFStreamSSLCertificates * The value must be of type NSArray. * See Apple's documentation for SSLSetCertificate. * * - kCFStreamSSLIsServer * The value must be of type NSNumber, encapsulationg a BOOL value. * See Apple's documentation for SSLCreateContext for iOS. * This is optional for iOS. If not supplied, a NO value is the default. * This is not needed for Mac OS X, and the value is ignored. * * - GCDAsyncSocketSSLPeerID * The value must be of type NSData. * You must set this value if you want to use TLS session resumption. * See Apple's documentation for SSLSetPeerID. * * - GCDAsyncSocketSSLProtocolVersionMin * - GCDAsyncSocketSSLProtocolVersionMax * The value(s) must be of type NSNumber, encapsulting a SSLProtocol value. * See Apple's documentation for SSLSetProtocolVersionMin & SSLSetProtocolVersionMax. * See also the SSLProtocol typedef. * * - GCDAsyncSocketSSLSessionOptionFalseStart * The value must be of type NSNumber, encapsulating a BOOL value. * See Apple's documentation for kSSLSessionOptionFalseStart. * * - GCDAsyncSocketSSLSessionOptionSendOneByteRecord * The value must be of type NSNumber, encapsulating a BOOL value. * See Apple's documentation for kSSLSessionOptionSendOneByteRecord. * * - GCDAsyncSocketSSLCipherSuites * The values must be of type NSArray. * Each item within the array must be a NSNumber, encapsulating an SSLCipherSuite. * See Apple's documentation for SSLSetEnabledCiphers. * See also the SSLCipherSuite typedef. * * - GCDAsyncSocketSSLDiffieHellmanParameters (Mac OS X only) * The value must be of type NSData. * See Apple's documentation for SSLSetDiffieHellmanParams. * * ==== The following UNAVAILABLE KEYS are: (with throw an exception) * * - kCFStreamSSLAllowsAnyRoot (UNAVAILABLE) * You MUST use manual trust evaluation instead (see GCDAsyncSocketManuallyEvaluateTrust). * Corresponding deprecated method: SSLSetAllowsAnyRoot * * - kCFStreamSSLAllowsExpiredRoots (UNAVAILABLE) * You MUST use manual trust evaluation instead (see GCDAsyncSocketManuallyEvaluateTrust). * Corresponding deprecated method: SSLSetAllowsExpiredRoots * * - kCFStreamSSLAllowsExpiredCertificates (UNAVAILABLE) * You MUST use manual trust evaluation instead (see GCDAsyncSocketManuallyEvaluateTrust). * Corresponding deprecated method: SSLSetAllowsExpiredCerts * * - kCFStreamSSLValidatesCertificateChain (UNAVAILABLE) * You MUST use manual trust evaluation instead (see GCDAsyncSocketManuallyEvaluateTrust). * Corresponding deprecated method: SSLSetEnableCertVerify * * - kCFStreamSSLLevel (UNAVAILABLE) * You MUST use GCDAsyncSocketSSLProtocolVersionMin & GCDAsyncSocketSSLProtocolVersionMin instead. * Corresponding deprecated method: SSLSetProtocolVersionEnabled * * * Please refer to Apple's documentation for corresponding SSLFunctions. * * If you pass in nil or an empty dictionary, the default settings will be used. * * IMPORTANT SECURITY NOTE: * The default settings will check to make sure the remote party's certificate is signed by a * trusted 3rd party certificate agency (e.g. verisign) and that the certificate is not expired. * However it will not verify the name on the certificate unless you * give it a name to verify against via the kCFStreamSSLPeerName key. * The security implications of this are important to understand. * Imagine you are attempting to create a secure connection to MySecureServer.com, * but your socket gets directed to MaliciousServer.com because of a hacked DNS server. * If you simply use the default settings, and MaliciousServer.com has a valid certificate, * the default settings will not detect any problems since the certificate is valid. * To properly secure your connection in this particular scenario you * should set the kCFStreamSSLPeerName property to "MySecureServer.com". * * You can also perform additional validation in socketDidSecure. **/ - (void)startTLS:(nullable NSDictionary *)tlsSettings; #pragma mark Advanced /** * Traditionally sockets are not closed until the conversation is over. * However, it is technically possible for the remote enpoint to close its write stream. * Our socket would then be notified that there is no more data to be read, * but our socket would still be writeable and the remote endpoint could continue to receive our data. * * The argument for this confusing functionality stems from the idea that a client could shut down its * write stream after sending a request to the server, thus notifying the server there are to be no further requests. * In practice, however, this technique did little to help server developers. * * To make matters worse, from a TCP perspective there is no way to tell the difference from a read stream close * and a full socket close. They both result in the TCP stack receiving a FIN packet. The only way to tell * is by continuing to write to the socket. If it was only a read stream close, then writes will continue to work. * Otherwise an error will be occur shortly (when the remote end sends us a RST packet). * * In addition to the technical challenges and confusion, many high level socket/stream API's provide * no support for dealing with the problem. If the read stream is closed, the API immediately declares the * socket to be closed, and shuts down the write stream as well. In fact, this is what Apple's CFStream API does. * It might sound like poor design at first, but in fact it simplifies development. * * The vast majority of the time if the read stream is closed it's because the remote endpoint closed its socket. * Thus it actually makes sense to close the socket at this point. * And in fact this is what most networking developers want and expect to happen. * However, if you are writing a server that interacts with a plethora of clients, * you might encounter a client that uses the discouraged technique of shutting down its write stream. * If this is the case, you can set this property to NO, * and make use of the socketDidCloseReadStream delegate method. * * The default value is YES. **/ @property (atomic, assign, readwrite) BOOL autoDisconnectOnClosedReadStream; /** * GCDAsyncSocket maintains thread safety by using an internal serial dispatch_queue. * In most cases, the instance creates this queue itself. * However, to allow for maximum flexibility, the internal queue may be passed in the init method. * This allows for some advanced options such as controlling socket priority via target queues. * However, when one begins to use target queues like this, they open the door to some specific deadlock issues. * * For example, imagine there are 2 queues: * dispatch_queue_t socketQueue; * dispatch_queue_t socketTargetQueue; * * If you do this (pseudo-code): * socketQueue.targetQueue = socketTargetQueue; * * Then all socketQueue operations will actually get run on the given socketTargetQueue. * This is fine and works great in most situations. * But if you run code directly from within the socketTargetQueue that accesses the socket, * you could potentially get deadlock. Imagine the following code: * * - (BOOL)socketHasSomething * { * __block BOOL result = NO; * dispatch_block_t block = ^{ * result = [self someInternalMethodToBeRunOnlyOnSocketQueue]; * } * if (is_executing_on_queue(socketQueue)) * block(); * else * dispatch_sync(socketQueue, block); * * return result; * } * * What happens if you call this method from the socketTargetQueue? The result is deadlock. * This is because the GCD API offers no mechanism to discover a queue's targetQueue. * Thus we have no idea if our socketQueue is configured with a targetQueue. * If we had this information, we could easily avoid deadlock. * But, since these API's are missing or unfeasible, you'll have to explicitly set it. * * IF you pass a socketQueue via the init method, * AND you've configured the passed socketQueue with a targetQueue, * THEN you should pass the end queue in the target hierarchy. * * For example, consider the following queue hierarchy: * socketQueue -> ipQueue -> moduleQueue * * This example demonstrates priority shaping within some server. * All incoming client connections from the same IP address are executed on the same target queue. * And all connections for a particular module are executed on the same target queue. * Thus, the priority of all networking for the entire module can be changed on the fly. * Additionally, networking traffic from a single IP cannot monopolize the module. * * Here's how you would accomplish something like that: * - (dispatch_queue_t)newSocketQueueForConnectionFromAddress:(NSData *)address onSocket:(GCDAsyncSocket *)sock * { * dispatch_queue_t socketQueue = dispatch_queue_create("", NULL); * dispatch_queue_t ipQueue = [self ipQueueForAddress:address]; * * dispatch_set_target_queue(socketQueue, ipQueue); * dispatch_set_target_queue(iqQueue, moduleQueue); * * return socketQueue; * } * - (void)socket:(GCDAsyncSocket *)sock didAcceptNewSocket:(GCDAsyncSocket *)newSocket * { * [clientConnections addObject:newSocket]; * [newSocket markSocketQueueTargetQueue:moduleQueue]; * } * * Note: This workaround is ONLY needed if you intend to execute code directly on the ipQueue or moduleQueue. * This is often NOT the case, as such queues are used solely for execution shaping. **/ - (void)markSocketQueueTargetQueue:(dispatch_queue_t)socketQueuesPreConfiguredTargetQueue; - (void)unmarkSocketQueueTargetQueue:(dispatch_queue_t)socketQueuesPreviouslyConfiguredTargetQueue; /** * It's not thread-safe to access certain variables from outside the socket's internal queue. * * For example, the socket file descriptor. * File descriptors are simply integers which reference an index in the per-process file table. * However, when one requests a new file descriptor (by opening a file or socket), * the file descriptor returned is guaranteed to be the lowest numbered unused descriptor. * So if we're not careful, the following could be possible: * * - Thread A invokes a method which returns the socket's file descriptor. * - The socket is closed via the socket's internal queue on thread B. * - Thread C opens a file, and subsequently receives the file descriptor that was previously the socket's FD. * - Thread A is now accessing/altering the file instead of the socket. * * In addition to this, other variables are not actually objects, * and thus cannot be retained/released or even autoreleased. * An example is the sslContext, of type SSLContextRef, which is actually a malloc'd struct. * * Although there are internal variables that make it difficult to maintain thread-safety, * it is important to provide access to these variables * to ensure this class can be used in a wide array of environments. * This method helps to accomplish this by invoking the current block on the socket's internal queue. * The methods below can be invoked from within the block to access * those generally thread-unsafe internal variables in a thread-safe manner. * The given block will be invoked synchronously on the socket's internal queue. * * If you save references to any protected variables and use them outside the block, you do so at your own peril. **/ - (void)performBlock:(dispatch_block_t)block; /** * These methods are only available from within the context of a performBlock: invocation. * See the documentation for the performBlock: method above. * * Provides access to the socket's file descriptor(s). * If the socket is a server socket (is accepting incoming connections), * it might actually have multiple internal socket file descriptors - one for IPv4 and one for IPv6. **/ - (int)socketFD; - (int)socket4FD; - (int)socket6FD; #if TARGET_OS_IPHONE /** * These methods are only available from within the context of a performBlock: invocation. * See the documentation for the performBlock: method above. * * Provides access to the socket's internal CFReadStream/CFWriteStream. * * These streams are only used as workarounds for specific iOS shortcomings: * * - Apple has decided to keep the SecureTransport framework private is iOS. * This means the only supplied way to do SSL/TLS is via CFStream or some other API layered on top of it. * Thus, in order to provide SSL/TLS support on iOS we are forced to rely on CFStream, * instead of the preferred and faster and more powerful SecureTransport. * * - If a socket doesn't have backgrounding enabled, and that socket is closed while the app is backgrounded, * Apple only bothers to notify us via the CFStream API. * The faster and more powerful GCD API isn't notified properly in this case. * * See also: (BOOL)enableBackgroundingOnSocket **/ - (nullable CFReadStreamRef)readStream; - (nullable CFWriteStreamRef)writeStream; /** * This method is only available from within the context of a performBlock: invocation. * See the documentation for the performBlock: method above. * * Configures the socket to allow it to operate when the iOS application has been backgrounded. * In other words, this method creates a read & write stream, and invokes: * * CFReadStreamSetProperty(readStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP); * CFWriteStreamSetProperty(writeStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP); * * Returns YES if successful, NO otherwise. * * Note: Apple does not officially support backgrounding server sockets. * That is, if your socket is accepting incoming connections, Apple does not officially support * allowing iOS applications to accept incoming connections while an app is backgrounded. * * Example usage: * * - (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port * { * [asyncSocket performBlock:^{ * [asyncSocket enableBackgroundingOnSocket]; * }]; * } **/ - (BOOL)enableBackgroundingOnSocket; #endif /** * This method is only available from within the context of a performBlock: invocation. * See the documentation for the performBlock: method above. * * Provides access to the socket's SSLContext, if SSL/TLS has been started on the socket. **/ - (nullable SSLContextRef)sslContext; #pragma mark Utilities /** * The address lookup utility used by the class. * This method is synchronous, so it's recommended you use it on a background thread/queue. * * The special strings "localhost" and "loopback" return the loopback address for IPv4 and IPv6. * * @returns * A mutable array with all IPv4 and IPv6 addresses returned by getaddrinfo. * The addresses are specifically for TCP connections. * You can filter the addresses, if needed, using the other utility methods provided by the class. **/ + (nullable NSMutableArray *)lookupHost:(NSString *)host port:(uint16_t)port error:(NSError **)errPtr; /** * Extracting host and port information from raw address data. **/ + (nullable NSString *)hostFromAddress:(NSData *)address; + (uint16_t)portFromAddress:(NSData *)address; + (BOOL)isIPv4Address:(NSData *)address; + (BOOL)isIPv6Address:(NSData *)address; + (BOOL)getHost:( NSString * __nullable * __nullable)hostPtr port:(nullable uint16_t *)portPtr fromAddress:(NSData *)address; + (BOOL)getHost:(NSString * __nullable * __nullable)hostPtr port:(nullable uint16_t *)portPtr family:(nullable sa_family_t *)afPtr fromAddress:(NSData *)address; /** * A few common line separators, for use with the readDataToData:... methods. **/ + (NSData *)CRLFData; // 0x0D0A + (NSData *)CRData; // 0x0D + (NSData *)LFData; // 0x0A + (NSData *)ZeroData; // 0x00 @end //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #pragma mark - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @protocol GCDAsyncSocketDelegate @optional /** * This method is called immediately prior to socket:didAcceptNewSocket:. * It optionally allows a listening socket to specify the socketQueue for a new accepted socket. * If this method is not implemented, or returns NULL, the new accepted socket will create its own default queue. * * Since you cannot autorelease a dispatch_queue, * this method uses the "new" prefix in its name to specify that the returned queue has been retained. * * Thus you could do something like this in the implementation: * return dispatch_queue_create("MyQueue", NULL); * * If you are placing multiple sockets on the same queue, * then care should be taken to increment the retain count each time this method is invoked. * * For example, your implementation might look something like this: * dispatch_retain(myExistingQueue); * return myExistingQueue; **/ - (nullable dispatch_queue_t)newSocketQueueForConnectionFromAddress:(NSData *)address onSocket:(GCDAsyncSocket *)sock; /** * Called when a socket accepts a connection. * Another socket is automatically spawned to handle it. * * You must retain the newSocket if you wish to handle the connection. * Otherwise the newSocket instance will be released and the spawned connection will be closed. * * By default the new socket will have the same delegate and delegateQueue. * You may, of course, change this at any time. **/ - (void)socket:(GCDAsyncSocket *)sock didAcceptNewSocket:(GCDAsyncSocket *)newSocket; /** * Called when a socket connects and is ready for reading and writing. * The host parameter will be an IP address, not a DNS name. **/ - (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port; /** * Called when a socket connects and is ready for reading and writing. * The host parameter will be an IP address, not a DNS name. **/ - (void)socket:(GCDAsyncSocket *)sock didConnectToUrl:(NSURL *)url; /** * Called when a socket has completed reading the requested data into memory. * Not called if there is an error. **/ - (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag; /** * Called when a socket has read in data, but has not yet completed the read. * This would occur if using readToData: or readToLength: methods. * It may be used for things such as updating progress bars. **/ - (void)socket:(GCDAsyncSocket *)sock didReadPartialDataOfLength:(NSUInteger)partialLength tag:(long)tag; /** * Called when a socket has completed writing the requested data. Not called if there is an error. **/ - (void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag; /** * Called when a socket has written some data, but has not yet completed the entire write. * It may be used for things such as updating progress bars. **/ - (void)socket:(GCDAsyncSocket *)sock didWritePartialDataOfLength:(NSUInteger)partialLength tag:(long)tag; /** * Called if a read operation has reached its timeout without completing. * This method allows you to optionally extend the timeout. * If you return a positive time interval (> 0) the read's timeout will be extended by the given amount. * If you don't implement this method, or return a non-positive time interval (<= 0) the read will timeout as usual. * * The elapsed parameter is the sum of the original timeout, plus any additions previously added via this method. * The length parameter is the number of bytes that have been read so far for the read operation. * * Note that this method may be called multiple times for a single read if you return positive numbers. **/ - (NSTimeInterval)socket:(GCDAsyncSocket *)sock shouldTimeoutReadWithTag:(long)tag elapsed:(NSTimeInterval)elapsed bytesDone:(NSUInteger)length; /** * Called if a write operation has reached its timeout without completing. * This method allows you to optionally extend the timeout. * If you return a positive time interval (> 0) the write's timeout will be extended by the given amount. * If you don't implement this method, or return a non-positive time interval (<= 0) the write will timeout as usual. * * The elapsed parameter is the sum of the original timeout, plus any additions previously added via this method. * The length parameter is the number of bytes that have been written so far for the write operation. * * Note that this method may be called multiple times for a single write if you return positive numbers. **/ - (NSTimeInterval)socket:(GCDAsyncSocket *)sock shouldTimeoutWriteWithTag:(long)tag elapsed:(NSTimeInterval)elapsed bytesDone:(NSUInteger)length; /** * Conditionally called if the read stream closes, but the write stream may still be writeable. * * This delegate method is only called if autoDisconnectOnClosedReadStream has been set to NO. * See the discussion on the autoDisconnectOnClosedReadStream method for more information. **/ - (void)socketDidCloseReadStream:(GCDAsyncSocket *)sock; /** * Called when a socket disconnects with or without error. * * If you call the disconnect method, and the socket wasn't already disconnected, * then an invocation of this delegate method will be enqueued on the delegateQueue * before the disconnect method returns. * * Note: If the GCDAsyncSocket instance is deallocated while it is still connected, * and the delegate is not also deallocated, then this method will be invoked, * but the sock parameter will be nil. (It must necessarily be nil since it is no longer available.) * This is a generally rare, but is possible if one writes code like this: * * asyncSocket = nil; // I'm implicitly disconnecting the socket * * In this case it may preferrable to nil the delegate beforehand, like this: * * asyncSocket.delegate = nil; // Don't invoke my delegate method * asyncSocket = nil; // I'm implicitly disconnecting the socket * * Of course, this depends on how your state machine is configured. **/ - (void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(nullable NSError *)err; /** * Called after the socket has successfully completed SSL/TLS negotiation. * This method is not called unless you use the provided startTLS method. * * If a SSL/TLS negotiation fails (invalid certificate, etc) then the socket will immediately close, * and the socketDidDisconnect:withError: delegate method will be called with the specific SSL error code. **/ - (void)socketDidSecure:(GCDAsyncSocket *)sock; /** * Allows a socket delegate to hook into the TLS handshake and manually validate the peer it's connecting to. * * This is only called if startTLS is invoked with options that include: * - GCDAsyncSocketManuallyEvaluateTrust == YES * * Typically the delegate will use SecTrustEvaluate (and related functions) to properly validate the peer. * * Note from Apple's documentation: * Because [SecTrustEvaluate] might look on the network for certificates in the certificate chain, * [it] might block while attempting network access. You should never call it from your main thread; * call it only from within a function running on a dispatch queue or on a separate thread. * * Thus this method uses a completionHandler block rather than a normal return value. * The completionHandler block is thread-safe, and may be invoked from a background queue/thread. * It is safe to invoke the completionHandler block even if the socket has been closed. **/ - (void)socket:(GCDAsyncSocket *)sock didReceiveTrust:(SecTrustRef)trust completionHandler:(void (^)(BOOL shouldTrustPeer))completionHandler; @end NS_ASSUME_NONNULL_END ================================================ FILE: Trojan/tcping/GCDAsyncSocket.m ================================================ // // GCDAsyncSocket.m // // This class is in the public domain. // Originally created by Robbie Hanson in Q4 2010. // Updated and maintained by Deusty LLC and the Apple development community. // // https://github.com/robbiehanson/CocoaAsyncSocket // #import "GCDAsyncSocket.h" #if TARGET_OS_IPHONE #import #endif #import #import #import #import #import #import #import #import #import #import #import #import #import #import #if ! __has_feature(objc_arc) #warning This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC). // For more information see: https://github.com/robbiehanson/CocoaAsyncSocket/wiki/ARC #endif #ifndef GCDAsyncSocketLoggingEnabled #define GCDAsyncSocketLoggingEnabled 0 #endif #if GCDAsyncSocketLoggingEnabled // Logging Enabled - See log level below // Logging uses the CocoaLumberjack framework (which is also GCD based). // https://github.com/robbiehanson/CocoaLumberjack // // It allows us to do a lot of logging without significantly slowing down the code. #import "DDLog.h" #define LogAsync YES #define LogContext GCDAsyncSocketLoggingContext #define LogObjc(flg, frmt, ...) LOG_OBJC_MAYBE(LogAsync, logLevel, flg, LogContext, frmt, ##__VA_ARGS__) #define LogC(flg, frmt, ...) LOG_C_MAYBE(LogAsync, logLevel, flg, LogContext, frmt, ##__VA_ARGS__) #define LogError(frmt, ...) LogObjc(LOG_FLAG_ERROR, (@"%@: " frmt), THIS_FILE, ##__VA_ARGS__) #define LogWarn(frmt, ...) LogObjc(LOG_FLAG_WARN, (@"%@: " frmt), THIS_FILE, ##__VA_ARGS__) #define LogInfo(frmt, ...) LogObjc(LOG_FLAG_INFO, (@"%@: " frmt), THIS_FILE, ##__VA_ARGS__) #define LogVerbose(frmt, ...) LogObjc(LOG_FLAG_VERBOSE, (@"%@: " frmt), THIS_FILE, ##__VA_ARGS__) #define LogCError(frmt, ...) LogC(LOG_FLAG_ERROR, (@"%@: " frmt), THIS_FILE, ##__VA_ARGS__) #define LogCWarn(frmt, ...) LogC(LOG_FLAG_WARN, (@"%@: " frmt), THIS_FILE, ##__VA_ARGS__) #define LogCInfo(frmt, ...) LogC(LOG_FLAG_INFO, (@"%@: " frmt), THIS_FILE, ##__VA_ARGS__) #define LogCVerbose(frmt, ...) LogC(LOG_FLAG_VERBOSE, (@"%@: " frmt), THIS_FILE, ##__VA_ARGS__) #define LogTrace() LogObjc(LOG_FLAG_VERBOSE, @"%@: %@", THIS_FILE, THIS_METHOD) #define LogCTrace() LogC(LOG_FLAG_VERBOSE, @"%@: %s", THIS_FILE, __FUNCTION__) #ifndef GCDAsyncSocketLogLevel #define GCDAsyncSocketLogLevel LOG_LEVEL_VERBOSE #endif // Log levels : off, error, warn, info, verbose static const int logLevel = GCDAsyncSocketLogLevel; #else // Logging Disabled #define LogError(frmt, ...) {} #define LogWarn(frmt, ...) {} #define LogInfo(frmt, ...) {} #define LogVerbose(frmt, ...) {} #define LogCError(frmt, ...) {} #define LogCWarn(frmt, ...) {} #define LogCInfo(frmt, ...) {} #define LogCVerbose(frmt, ...) {} #define LogTrace() {} #define LogCTrace(frmt, ...) {} #endif /** * Seeing a return statements within an inner block * can sometimes be mistaken for a return point of the enclosing method. * This makes inline blocks a bit easier to read. **/ #define return_from_block return /** * A socket file descriptor is really just an integer. * It represents the index of the socket within the kernel. * This makes invalid file descriptor comparisons easier to read. **/ #define SOCKET_NULL -1 NSString *const GCDAsyncSocketException = @"GCDAsyncSocketException"; NSString *const GCDAsyncSocketErrorDomain = @"GCDAsyncSocketErrorDomain"; NSString *const GCDAsyncSocketQueueName = @"GCDAsyncSocket"; NSString *const GCDAsyncSocketThreadName = @"GCDAsyncSocket-CFStream"; NSString *const GCDAsyncSocketManuallyEvaluateTrust = @"GCDAsyncSocketManuallyEvaluateTrust"; #if TARGET_OS_IPHONE NSString *const GCDAsyncSocketUseCFStreamForTLS = @"GCDAsyncSocketUseCFStreamForTLS"; #endif NSString *const GCDAsyncSocketSSLPeerID = @"GCDAsyncSocketSSLPeerID"; NSString *const GCDAsyncSocketSSLProtocolVersionMin = @"GCDAsyncSocketSSLProtocolVersionMin"; NSString *const GCDAsyncSocketSSLProtocolVersionMax = @"GCDAsyncSocketSSLProtocolVersionMax"; NSString *const GCDAsyncSocketSSLSessionOptionFalseStart = @"GCDAsyncSocketSSLSessionOptionFalseStart"; NSString *const GCDAsyncSocketSSLSessionOptionSendOneByteRecord = @"GCDAsyncSocketSSLSessionOptionSendOneByteRecord"; NSString *const GCDAsyncSocketSSLCipherSuites = @"GCDAsyncSocketSSLCipherSuites"; #if !TARGET_OS_IPHONE NSString *const GCDAsyncSocketSSLDiffieHellmanParameters = @"GCDAsyncSocketSSLDiffieHellmanParameters"; #endif enum GCDAsyncSocketFlags { kSocketStarted = 1 << 0, // If set, socket has been started (accepting/connecting) kConnected = 1 << 1, // If set, the socket is connected kForbidReadsWrites = 1 << 2, // If set, no new reads or writes are allowed kReadsPaused = 1 << 3, // If set, reads are paused due to possible timeout kWritesPaused = 1 << 4, // If set, writes are paused due to possible timeout kDisconnectAfterReads = 1 << 5, // If set, disconnect after no more reads are queued kDisconnectAfterWrites = 1 << 6, // If set, disconnect after no more writes are queued kSocketCanAcceptBytes = 1 << 7, // If set, we know socket can accept bytes. If unset, it's unknown. kReadSourceSuspended = 1 << 8, // If set, the read source is suspended kWriteSourceSuspended = 1 << 9, // If set, the write source is suspended kQueuedTLS = 1 << 10, // If set, we've queued an upgrade to TLS kStartingReadTLS = 1 << 11, // If set, we're waiting for TLS negotiation to complete kStartingWriteTLS = 1 << 12, // If set, we're waiting for TLS negotiation to complete kSocketSecure = 1 << 13, // If set, socket is using secure communication via SSL/TLS kSocketHasReadEOF = 1 << 14, // If set, we have read EOF from socket kReadStreamClosed = 1 << 15, // If set, we've read EOF plus prebuffer has been drained kDealloc = 1 << 16, // If set, the socket is being deallocated #if TARGET_OS_IPHONE kAddedStreamsToRunLoop = 1 << 17, // If set, CFStreams have been added to listener thread kUsingCFStreamForTLS = 1 << 18, // If set, we're forced to use CFStream instead of SecureTransport kSecureSocketHasBytesAvailable = 1 << 19, // If set, CFReadStream has notified us of bytes available #endif }; enum GCDAsyncSocketConfig { kIPv4Disabled = 1 << 0, // If set, IPv4 is disabled kIPv6Disabled = 1 << 1, // If set, IPv6 is disabled kPreferIPv6 = 1 << 2, // If set, IPv6 is preferred over IPv4 kAllowHalfDuplexConnection = 1 << 3, // If set, the socket will stay open even if the read stream closes }; #if TARGET_OS_IPHONE static NSThread *cfstreamThread; // Used for CFStreams static uint64_t cfstreamThreadRetainCount; // setup & teardown static dispatch_queue_t cfstreamThreadSetupQueue; // setup & teardown #endif //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #pragma mark - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /** * A PreBuffer is used when there is more data available on the socket * than is being requested by current read request. * In this case we slurp up all data from the socket (to minimize sys calls), * and store additional yet unread data in a "prebuffer". * * The prebuffer is entirely drained before we read from the socket again. * In other words, a large chunk of data is written is written to the prebuffer. * The prebuffer is then drained via a series of one or more reads (for subsequent read request(s)). * * A ring buffer was once used for this purpose. * But a ring buffer takes up twice as much memory as needed (double the size for mirroring). * In fact, it generally takes up more than twice the needed size as everything has to be rounded up to vm_page_size. * And since the prebuffer is always completely drained after being written to, a full ring buffer isn't needed. * * The current design is very simple and straight-forward, while also keeping memory requirements lower. **/ @interface GCDAsyncSocketPreBuffer : NSObject { uint8_t *preBuffer; size_t preBufferSize; uint8_t *readPointer; uint8_t *writePointer; } - (instancetype)initWithCapacity:(size_t)numBytes NS_DESIGNATED_INITIALIZER; - (void)ensureCapacityForWrite:(size_t)numBytes; - (size_t)availableBytes; - (uint8_t *)readBuffer; - (void)getReadBuffer:(uint8_t **)bufferPtr availableBytes:(size_t *)availableBytesPtr; - (size_t)availableSpace; - (uint8_t *)writeBuffer; - (void)getWriteBuffer:(uint8_t **)bufferPtr availableSpace:(size_t *)availableSpacePtr; - (void)didRead:(size_t)bytesRead; - (void)didWrite:(size_t)bytesWritten; - (void)reset; @end @implementation GCDAsyncSocketPreBuffer // Cover the superclass' designated initializer - (instancetype)init NS_UNAVAILABLE { NSAssert(0, @"Use the designated initializer"); return nil; } - (instancetype)initWithCapacity:(size_t)numBytes { if ((self = [super init])) { preBufferSize = numBytes; preBuffer = malloc(preBufferSize); readPointer = preBuffer; writePointer = preBuffer; } return self; } - (void)dealloc { if (preBuffer) free(preBuffer); } - (void)ensureCapacityForWrite:(size_t)numBytes { size_t availableSpace = [self availableSpace]; if (numBytes > availableSpace) { size_t additionalBytes = numBytes - availableSpace; size_t newPreBufferSize = preBufferSize + additionalBytes; uint8_t *newPreBuffer = realloc(preBuffer, newPreBufferSize); size_t readPointerOffset = readPointer - preBuffer; size_t writePointerOffset = writePointer - preBuffer; preBuffer = newPreBuffer; preBufferSize = newPreBufferSize; readPointer = preBuffer + readPointerOffset; writePointer = preBuffer + writePointerOffset; } } - (size_t)availableBytes { return writePointer - readPointer; } - (uint8_t *)readBuffer { return readPointer; } - (void)getReadBuffer:(uint8_t **)bufferPtr availableBytes:(size_t *)availableBytesPtr { if (bufferPtr) *bufferPtr = readPointer; if (availableBytesPtr) *availableBytesPtr = [self availableBytes]; } - (void)didRead:(size_t)bytesRead { readPointer += bytesRead; if (readPointer == writePointer) { // The prebuffer has been drained. Reset pointers. readPointer = preBuffer; writePointer = preBuffer; } } - (size_t)availableSpace { return preBufferSize - (writePointer - preBuffer); } - (uint8_t *)writeBuffer { return writePointer; } - (void)getWriteBuffer:(uint8_t **)bufferPtr availableSpace:(size_t *)availableSpacePtr { if (bufferPtr) *bufferPtr = writePointer; if (availableSpacePtr) *availableSpacePtr = [self availableSpace]; } - (void)didWrite:(size_t)bytesWritten { writePointer += bytesWritten; } - (void)reset { readPointer = preBuffer; writePointer = preBuffer; } @end //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #pragma mark - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /** * The GCDAsyncReadPacket encompasses the instructions for any given read. * The content of a read packet allows the code to determine if we're: * - reading to a certain length * - reading to a certain separator * - or simply reading the first chunk of available data **/ @interface GCDAsyncReadPacket : NSObject { @public NSMutableData *buffer; NSUInteger startOffset; NSUInteger bytesDone; NSUInteger maxLength; NSTimeInterval timeout; NSUInteger readLength; NSData *term; BOOL bufferOwner; NSUInteger originalBufferLength; long tag; } - (instancetype)initWithData:(NSMutableData *)d startOffset:(NSUInteger)s maxLength:(NSUInteger)m timeout:(NSTimeInterval)t readLength:(NSUInteger)l terminator:(NSData *)e tag:(long)i NS_DESIGNATED_INITIALIZER; - (void)ensureCapacityForAdditionalDataOfLength:(NSUInteger)bytesToRead; - (NSUInteger)optimalReadLengthWithDefault:(NSUInteger)defaultValue shouldPreBuffer:(BOOL *)shouldPreBufferPtr; - (NSUInteger)readLengthForNonTermWithHint:(NSUInteger)bytesAvailable; - (NSUInteger)readLengthForTermWithHint:(NSUInteger)bytesAvailable shouldPreBuffer:(BOOL *)shouldPreBufferPtr; - (NSUInteger)readLengthForTermWithPreBuffer:(GCDAsyncSocketPreBuffer *)preBuffer found:(BOOL *)foundPtr; - (NSInteger)searchForTermAfterPreBuffering:(ssize_t)numBytes; @end @implementation GCDAsyncReadPacket // Cover the superclass' designated initializer - (instancetype)init NS_UNAVAILABLE { NSAssert(0, @"Use the designated initializer"); return nil; } - (instancetype)initWithData:(NSMutableData *)d startOffset:(NSUInteger)s maxLength:(NSUInteger)m timeout:(NSTimeInterval)t readLength:(NSUInteger)l terminator:(NSData *)e tag:(long)i { if((self = [super init])) { bytesDone = 0; maxLength = m; timeout = t; readLength = l; term = [e copy]; tag = i; if (d) { buffer = d; startOffset = s; bufferOwner = NO; originalBufferLength = [d length]; } else { if (readLength > 0) buffer = [[NSMutableData alloc] initWithLength:readLength]; else buffer = [[NSMutableData alloc] initWithLength:0]; startOffset = 0; bufferOwner = YES; originalBufferLength = 0; } } return self; } /** * Increases the length of the buffer (if needed) to ensure a read of the given size will fit. **/ - (void)ensureCapacityForAdditionalDataOfLength:(NSUInteger)bytesToRead { NSUInteger buffSize = [buffer length]; NSUInteger buffUsed = startOffset + bytesDone; NSUInteger buffSpace = buffSize - buffUsed; if (bytesToRead > buffSpace) { NSUInteger buffInc = bytesToRead - buffSpace; [buffer increaseLengthBy:buffInc]; } } /** * This method is used when we do NOT know how much data is available to be read from the socket. * This method returns the default value unless it exceeds the specified readLength or maxLength. * * Furthermore, the shouldPreBuffer decision is based upon the packet type, * and whether the returned value would fit in the current buffer without requiring a resize of the buffer. **/ - (NSUInteger)optimalReadLengthWithDefault:(NSUInteger)defaultValue shouldPreBuffer:(BOOL *)shouldPreBufferPtr { NSUInteger result; if (readLength > 0) { // Read a specific length of data result = readLength - bytesDone; // There is no need to prebuffer since we know exactly how much data we need to read. // Even if the buffer isn't currently big enough to fit this amount of data, // it would have to be resized eventually anyway. if (shouldPreBufferPtr) *shouldPreBufferPtr = NO; } else { // Either reading until we find a specified terminator, // or we're simply reading all available data. // // In other words, one of: // // - readDataToData packet // - readDataWithTimeout packet if (maxLength > 0) result = MIN(defaultValue, (maxLength - bytesDone)); else result = defaultValue; // Since we don't know the size of the read in advance, // the shouldPreBuffer decision is based upon whether the returned value would fit // in the current buffer without requiring a resize of the buffer. // // This is because, in all likelyhood, the amount read from the socket will be less than the default value. // Thus we should avoid over-allocating the read buffer when we can simply use the pre-buffer instead. if (shouldPreBufferPtr) { NSUInteger buffSize = [buffer length]; NSUInteger buffUsed = startOffset + bytesDone; NSUInteger buffSpace = buffSize - buffUsed; if (buffSpace >= result) *shouldPreBufferPtr = NO; else *shouldPreBufferPtr = YES; } } return result; } /** * For read packets without a set terminator, returns the amount of data * that can be read without exceeding the readLength or maxLength. * * The given parameter indicates the number of bytes estimated to be available on the socket, * which is taken into consideration during the calculation. * * The given hint MUST be greater than zero. **/ - (NSUInteger)readLengthForNonTermWithHint:(NSUInteger)bytesAvailable { NSAssert(term == nil, @"This method does not apply to term reads"); NSAssert(bytesAvailable > 0, @"Invalid parameter: bytesAvailable"); if (readLength > 0) { // Read a specific length of data return MIN(bytesAvailable, (readLength - bytesDone)); // No need to avoid resizing the buffer. // If the user provided their own buffer, // and told us to read a certain length of data that exceeds the size of the buffer, // then it is clear that our code will resize the buffer during the read operation. // // This method does not actually do any resizing. // The resizing will happen elsewhere if needed. } else { // Read all available data NSUInteger result = bytesAvailable; if (maxLength > 0) { result = MIN(result, (maxLength - bytesDone)); } // No need to avoid resizing the buffer. // If the user provided their own buffer, // and told us to read all available data without giving us a maxLength, // then it is clear that our code might resize the buffer during the read operation. // // This method does not actually do any resizing. // The resizing will happen elsewhere if needed. return result; } } /** * For read packets with a set terminator, returns the amount of data * that can be read without exceeding the maxLength. * * The given parameter indicates the number of bytes estimated to be available on the socket, * which is taken into consideration during the calculation. * * To optimize memory allocations, mem copies, and mem moves * the shouldPreBuffer boolean value will indicate if the data should be read into a prebuffer first, * or if the data can be read directly into the read packet's buffer. **/ - (NSUInteger)readLengthForTermWithHint:(NSUInteger)bytesAvailable shouldPreBuffer:(BOOL *)shouldPreBufferPtr { NSAssert(term != nil, @"This method does not apply to non-term reads"); NSAssert(bytesAvailable > 0, @"Invalid parameter: bytesAvailable"); NSUInteger result = bytesAvailable; if (maxLength > 0) { result = MIN(result, (maxLength - bytesDone)); } // Should the data be read into the read packet's buffer, or into a pre-buffer first? // // One would imagine the preferred option is the faster one. // So which one is faster? // // Reading directly into the packet's buffer requires: // 1. Possibly resizing packet buffer (malloc/realloc) // 2. Filling buffer (read) // 3. Searching for term (memcmp) // 4. Possibly copying overflow into prebuffer (malloc/realloc, memcpy) // // Reading into prebuffer first: // 1. Possibly resizing prebuffer (malloc/realloc) // 2. Filling buffer (read) // 3. Searching for term (memcmp) // 4. Copying underflow into packet buffer (malloc/realloc, memcpy) // 5. Removing underflow from prebuffer (memmove) // // Comparing the performance of the two we can see that reading // data into the prebuffer first is slower due to the extra memove. // // However: // The implementation of NSMutableData is open source via core foundation's CFMutableData. // Decreasing the length of a mutable data object doesn't cause a realloc. // In other words, the capacity of a mutable data object can grow, but doesn't shrink. // // This means the prebuffer will rarely need a realloc. // The packet buffer, on the other hand, may often need a realloc. // This is especially true if we are the buffer owner. // Furthermore, if we are constantly realloc'ing the packet buffer, // and then moving the overflow into the prebuffer, // then we're consistently over-allocating memory for each term read. // And now we get into a bit of a tradeoff between speed and memory utilization. // // The end result is that the two perform very similarly. // And we can answer the original question very simply by another means. // // If we can read all the data directly into the packet's buffer without resizing it first, // then we do so. Otherwise we use the prebuffer. if (shouldPreBufferPtr) { NSUInteger buffSize = [buffer length]; NSUInteger buffUsed = startOffset + bytesDone; if ((buffSize - buffUsed) >= result) *shouldPreBufferPtr = NO; else *shouldPreBufferPtr = YES; } return result; } /** * For read packets with a set terminator, * returns the amount of data that can be read from the given preBuffer, * without going over a terminator or the maxLength. * * It is assumed the terminator has not already been read. **/ - (NSUInteger)readLengthForTermWithPreBuffer:(GCDAsyncSocketPreBuffer *)preBuffer found:(BOOL *)foundPtr { NSAssert(term != nil, @"This method does not apply to non-term reads"); NSAssert([preBuffer availableBytes] > 0, @"Invoked with empty pre buffer!"); // We know that the terminator, as a whole, doesn't exist in our own buffer. // But it is possible that a _portion_ of it exists in our buffer. // So we're going to look for the terminator starting with a portion of our own buffer. // // Example: // // term length = 3 bytes // bytesDone = 5 bytes // preBuffer length = 5 bytes // // If we append the preBuffer to our buffer, // it would look like this: // // --------------------- // |B|B|B|B|B|P|P|P|P|P| // --------------------- // // So we start our search here: // // --------------------- // |B|B|B|B|B|P|P|P|P|P| // -------^-^-^--------- // // And move forwards... // // --------------------- // |B|B|B|B|B|P|P|P|P|P| // ---------^-^-^------- // // Until we find the terminator or reach the end. // // --------------------- // |B|B|B|B|B|P|P|P|P|P| // ---------------^-^-^- BOOL found = NO; NSUInteger termLength = [term length]; NSUInteger preBufferLength = [preBuffer availableBytes]; if ((bytesDone + preBufferLength) < termLength) { // Not enough data for a full term sequence yet return preBufferLength; } NSUInteger maxPreBufferLength; if (maxLength > 0) { maxPreBufferLength = MIN(preBufferLength, (maxLength - bytesDone)); // Note: maxLength >= termLength } else { maxPreBufferLength = preBufferLength; } uint8_t seq[termLength]; const void *termBuf = [term bytes]; NSUInteger bufLen = MIN(bytesDone, (termLength - 1)); uint8_t *buf = (uint8_t *)[buffer mutableBytes] + startOffset + bytesDone - bufLen; NSUInteger preLen = termLength - bufLen; const uint8_t *pre = [preBuffer readBuffer]; NSUInteger loopCount = bufLen + maxPreBufferLength - termLength + 1; // Plus one. See example above. NSUInteger result = maxPreBufferLength; NSUInteger i; for (i = 0; i < loopCount; i++) { if (bufLen > 0) { // Combining bytes from buffer and preBuffer memcpy(seq, buf, bufLen); memcpy(seq + bufLen, pre, preLen); if (memcmp(seq, termBuf, termLength) == 0) { result = preLen; found = YES; break; } buf++; bufLen--; preLen++; } else { // Comparing directly from preBuffer if (memcmp(pre, termBuf, termLength) == 0) { NSUInteger preOffset = pre - [preBuffer readBuffer]; // pointer arithmetic result = preOffset + termLength; found = YES; break; } pre++; } } // There is no need to avoid resizing the buffer in this particular situation. if (foundPtr) *foundPtr = found; return result; } /** * For read packets with a set terminator, scans the packet buffer for the term. * It is assumed the terminator had not been fully read prior to the new bytes. * * If the term is found, the number of excess bytes after the term are returned. * If the term is not found, this method will return -1. * * Note: A return value of zero means the term was found at the very end. * * Prerequisites: * The given number of bytes have been added to the end of our buffer. * Our bytesDone variable has NOT been changed due to the prebuffered bytes. **/ - (NSInteger)searchForTermAfterPreBuffering:(ssize_t)numBytes { NSAssert(term != nil, @"This method does not apply to non-term reads"); // The implementation of this method is very similar to the above method. // See the above method for a discussion of the algorithm used here. uint8_t *buff = [buffer mutableBytes]; NSUInteger buffLength = bytesDone + numBytes; const void *termBuff = [term bytes]; NSUInteger termLength = [term length]; // Note: We are dealing with unsigned integers, // so make sure the math doesn't go below zero. NSUInteger i = ((buffLength - numBytes) >= termLength) ? (buffLength - numBytes - termLength + 1) : 0; while (i + termLength <= buffLength) { uint8_t *subBuffer = buff + startOffset + i; if (memcmp(subBuffer, termBuff, termLength) == 0) { return buffLength - (i + termLength); } i++; } return -1; } @end //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #pragma mark - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /** * The GCDAsyncWritePacket encompasses the instructions for any given write. **/ @interface GCDAsyncWritePacket : NSObject { @public NSData *buffer; NSUInteger bytesDone; long tag; NSTimeInterval timeout; } - (instancetype)initWithData:(NSData *)d timeout:(NSTimeInterval)t tag:(long)i NS_DESIGNATED_INITIALIZER; @end @implementation GCDAsyncWritePacket // Cover the superclass' designated initializer - (instancetype)init NS_UNAVAILABLE { NSAssert(0, @"Use the designated initializer"); return nil; } - (instancetype)initWithData:(NSData *)d timeout:(NSTimeInterval)t tag:(long)i { if((self = [super init])) { buffer = d; // Retain not copy. For performance as documented in header file. bytesDone = 0; timeout = t; tag = i; } return self; } @end //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #pragma mark - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /** * The GCDAsyncSpecialPacket encompasses special instructions for interruptions in the read/write queues. * This class my be altered to support more than just TLS in the future. **/ @interface GCDAsyncSpecialPacket : NSObject { @public NSDictionary *tlsSettings; } - (instancetype)initWithTLSSettings:(NSDictionary *)settings NS_DESIGNATED_INITIALIZER; @end @implementation GCDAsyncSpecialPacket // Cover the superclass' designated initializer - (instancetype)init NS_UNAVAILABLE { NSAssert(0, @"Use the designated initializer"); return nil; } - (instancetype)initWithTLSSettings:(NSDictionary *)settings { if((self = [super init])) { tlsSettings = [settings copy]; } return self; } @end //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #pragma mark - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @implementation GCDAsyncSocket { uint32_t flags; uint16_t config; __weak id delegate; dispatch_queue_t delegateQueue; int socket4FD; int socket6FD; int socketUN; NSURL *socketUrl; int stateIndex; NSData * connectInterface4; NSData * connectInterface6; NSData * connectInterfaceUN; dispatch_queue_t socketQueue; dispatch_source_t accept4Source; dispatch_source_t accept6Source; dispatch_source_t acceptUNSource; dispatch_source_t connectTimer; dispatch_source_t readSource; dispatch_source_t writeSource; dispatch_source_t readTimer; dispatch_source_t writeTimer; NSMutableArray *readQueue; NSMutableArray *writeQueue; GCDAsyncReadPacket *currentRead; GCDAsyncWritePacket *currentWrite; unsigned long socketFDBytesAvailable; GCDAsyncSocketPreBuffer *preBuffer; #if TARGET_OS_IPHONE CFStreamClientContext streamContext; CFReadStreamRef readStream; CFWriteStreamRef writeStream; #endif SSLContextRef sslContext; GCDAsyncSocketPreBuffer *sslPreBuffer; size_t sslWriteCachedLength; OSStatus sslErrCode; OSStatus lastSSLHandshakeError; void *IsOnSocketQueueOrTargetQueueKey; id userData; NSTimeInterval alternateAddressDelay; } - (instancetype)init { return [self initWithDelegate:nil delegateQueue:NULL socketQueue:NULL]; } - (instancetype)initWithSocketQueue:(dispatch_queue_t)sq { return [self initWithDelegate:nil delegateQueue:NULL socketQueue:sq]; } - (instancetype)initWithDelegate:(id)aDelegate delegateQueue:(dispatch_queue_t)dq { return [self initWithDelegate:aDelegate delegateQueue:dq socketQueue:NULL]; } - (instancetype)initWithDelegate:(id)aDelegate delegateQueue:(dispatch_queue_t)dq socketQueue:(dispatch_queue_t)sq { if((self = [super init])) { delegate = aDelegate; delegateQueue = dq; #if !OS_OBJECT_USE_OBJC if (dq) dispatch_retain(dq); #endif socket4FD = SOCKET_NULL; socket6FD = SOCKET_NULL; socketUN = SOCKET_NULL; socketUrl = nil; stateIndex = 0; if (sq) { NSAssert(sq != dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), @"The given socketQueue parameter must not be a concurrent queue."); NSAssert(sq != dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), @"The given socketQueue parameter must not be a concurrent queue."); NSAssert(sq != dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), @"The given socketQueue parameter must not be a concurrent queue."); socketQueue = sq; #if !OS_OBJECT_USE_OBJC dispatch_retain(sq); #endif } else { socketQueue = dispatch_queue_create([GCDAsyncSocketQueueName UTF8String], NULL); } // The dispatch_queue_set_specific() and dispatch_get_specific() functions take a "void *key" parameter. // From the documentation: // // > Keys are only compared as pointers and are never dereferenced. // > Thus, you can use a pointer to a static variable for a specific subsystem or // > any other value that allows you to identify the value uniquely. // // We're just going to use the memory address of an ivar. // Specifically an ivar that is explicitly named for our purpose to make the code more readable. // // However, it feels tedious (and less readable) to include the "&" all the time: // dispatch_get_specific(&IsOnSocketQueueOrTargetQueueKey) // // So we're going to make it so it doesn't matter if we use the '&' or not, // by assigning the value of the ivar to the address of the ivar. // Thus: IsOnSocketQueueOrTargetQueueKey == &IsOnSocketQueueOrTargetQueueKey; IsOnSocketQueueOrTargetQueueKey = &IsOnSocketQueueOrTargetQueueKey; void *nonNullUnusedPointer = (__bridge void *)self; dispatch_queue_set_specific(socketQueue, IsOnSocketQueueOrTargetQueueKey, nonNullUnusedPointer, NULL); readQueue = [[NSMutableArray alloc] initWithCapacity:5]; currentRead = nil; writeQueue = [[NSMutableArray alloc] initWithCapacity:5]; currentWrite = nil; preBuffer = [[GCDAsyncSocketPreBuffer alloc] initWithCapacity:(1024 * 4)]; alternateAddressDelay = 0.3; } return self; } - (void)dealloc { LogInfo(@"%@ - %@ (start)", THIS_METHOD, self); // Set dealloc flag. // This is used by closeWithError to ensure we don't accidentally retain ourself. flags |= kDealloc; if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { [self closeWithError:nil]; } else { dispatch_sync(socketQueue, ^{ [self closeWithError:nil]; }); } delegate = nil; #if !OS_OBJECT_USE_OBJC if (delegateQueue) dispatch_release(delegateQueue); #endif delegateQueue = NULL; #if !OS_OBJECT_USE_OBJC if (socketQueue) dispatch_release(socketQueue); #endif socketQueue = NULL; LogInfo(@"%@ - %@ (finish)", THIS_METHOD, self); } #pragma mark - + (nullable instancetype)socketFromConnectedSocketFD:(int)socketFD socketQueue:(nullable dispatch_queue_t)sq error:(NSError**)error { return [self socketFromConnectedSocketFD:socketFD delegate:nil delegateQueue:NULL socketQueue:sq error:error]; } + (nullable instancetype)socketFromConnectedSocketFD:(int)socketFD delegate:(nullable id)aDelegate delegateQueue:(nullable dispatch_queue_t)dq error:(NSError**)error { return [self socketFromConnectedSocketFD:socketFD delegate:aDelegate delegateQueue:dq socketQueue:NULL error:error]; } + (nullable instancetype)socketFromConnectedSocketFD:(int)socketFD delegate:(nullable id)aDelegate delegateQueue:(nullable dispatch_queue_t)dq socketQueue:(nullable dispatch_queue_t)sq error:(NSError* __autoreleasing *)error { __block BOOL errorOccured = NO; GCDAsyncSocket *socket = [[[self class] alloc] initWithDelegate:aDelegate delegateQueue:dq socketQueue:sq]; dispatch_sync(socket->socketQueue, ^{ @autoreleasepool { struct sockaddr addr; socklen_t addr_size = sizeof(struct sockaddr); int retVal = getpeername(socketFD, (struct sockaddr *)&addr, &addr_size); if (retVal) { NSString *errMsg = NSLocalizedStringWithDefaultValue(@"GCDAsyncSocketOtherError", @"GCDAsyncSocket", [NSBundle mainBundle], @"Attempt to create socket from socket FD failed. getpeername() failed", nil); NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errMsg}; errorOccured = YES; if (error) *error = [NSError errorWithDomain:GCDAsyncSocketErrorDomain code:GCDAsyncSocketOtherError userInfo:userInfo]; return; } if (addr.sa_family == AF_INET) { socket->socket4FD = socketFD; } else if (addr.sa_family == AF_INET6) { socket->socket6FD = socketFD; } else { NSString *errMsg = NSLocalizedStringWithDefaultValue(@"GCDAsyncSocketOtherError", @"GCDAsyncSocket", [NSBundle mainBundle], @"Attempt to create socket from socket FD failed. socket FD is neither IPv4 nor IPv6", nil); NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errMsg}; errorOccured = YES; if (error) *error = [NSError errorWithDomain:GCDAsyncSocketErrorDomain code:GCDAsyncSocketOtherError userInfo:userInfo]; return; } socket->flags = kSocketStarted; [socket didConnect:socket->stateIndex]; }}); return errorOccured? nil: socket; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #pragma mark Configuration //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - (id)delegate { if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { return delegate; } else { __block id result; dispatch_sync(socketQueue, ^{ result = self->delegate; }); return result; } } - (void)setDelegate:(id)newDelegate synchronously:(BOOL)synchronously { dispatch_block_t block = ^{ self->delegate = newDelegate; }; if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { block(); } else { if (synchronously) dispatch_sync(socketQueue, block); else dispatch_async(socketQueue, block); } } - (void)setDelegate:(id)newDelegate { [self setDelegate:newDelegate synchronously:NO]; } - (void)synchronouslySetDelegate:(id)newDelegate { [self setDelegate:newDelegate synchronously:YES]; } - (dispatch_queue_t)delegateQueue { if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { return delegateQueue; } else { __block dispatch_queue_t result; dispatch_sync(socketQueue, ^{ result = self->delegateQueue; }); return result; } } - (void)setDelegateQueue:(dispatch_queue_t)newDelegateQueue synchronously:(BOOL)synchronously { dispatch_block_t block = ^{ #if !OS_OBJECT_USE_OBJC if (self->delegateQueue) dispatch_release(self->delegateQueue); if (newDelegateQueue) dispatch_retain(newDelegateQueue); #endif self->delegateQueue = newDelegateQueue; }; if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { block(); } else { if (synchronously) dispatch_sync(socketQueue, block); else dispatch_async(socketQueue, block); } } - (void)setDelegateQueue:(dispatch_queue_t)newDelegateQueue { [self setDelegateQueue:newDelegateQueue synchronously:NO]; } - (void)synchronouslySetDelegateQueue:(dispatch_queue_t)newDelegateQueue { [self setDelegateQueue:newDelegateQueue synchronously:YES]; } - (void)getDelegate:(id *)delegatePtr delegateQueue:(dispatch_queue_t *)delegateQueuePtr { if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { if (delegatePtr) *delegatePtr = delegate; if (delegateQueuePtr) *delegateQueuePtr = delegateQueue; } else { __block id dPtr = NULL; __block dispatch_queue_t dqPtr = NULL; dispatch_sync(socketQueue, ^{ dPtr = self->delegate; dqPtr = self->delegateQueue; }); if (delegatePtr) *delegatePtr = dPtr; if (delegateQueuePtr) *delegateQueuePtr = dqPtr; } } - (void)setDelegate:(id)newDelegate delegateQueue:(dispatch_queue_t)newDelegateQueue synchronously:(BOOL)synchronously { dispatch_block_t block = ^{ self->delegate = newDelegate; #if !OS_OBJECT_USE_OBJC if (self->delegateQueue) dispatch_release(self->delegateQueue); if (newDelegateQueue) dispatch_retain(newDelegateQueue); #endif self->delegateQueue = newDelegateQueue; }; if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { block(); } else { if (synchronously) dispatch_sync(socketQueue, block); else dispatch_async(socketQueue, block); } } - (void)setDelegate:(id)newDelegate delegateQueue:(dispatch_queue_t)newDelegateQueue { [self setDelegate:newDelegate delegateQueue:newDelegateQueue synchronously:NO]; } - (void)synchronouslySetDelegate:(id)newDelegate delegateQueue:(dispatch_queue_t)newDelegateQueue { [self setDelegate:newDelegate delegateQueue:newDelegateQueue synchronously:YES]; } - (BOOL)isIPv4Enabled { // Note: YES means kIPv4Disabled is OFF if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { return ((config & kIPv4Disabled) == 0); } else { __block BOOL result; dispatch_sync(socketQueue, ^{ result = ((self->config & kIPv4Disabled) == 0); }); return result; } } - (void)setIPv4Enabled:(BOOL)flag { // Note: YES means kIPv4Disabled is OFF dispatch_block_t block = ^{ if (flag) self->config &= ~kIPv4Disabled; else self->config |= kIPv4Disabled; }; if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) block(); else dispatch_async(socketQueue, block); } - (BOOL)isIPv6Enabled { // Note: YES means kIPv6Disabled is OFF if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { return ((config & kIPv6Disabled) == 0); } else { __block BOOL result; dispatch_sync(socketQueue, ^{ result = ((self->config & kIPv6Disabled) == 0); }); return result; } } - (void)setIPv6Enabled:(BOOL)flag { // Note: YES means kIPv6Disabled is OFF dispatch_block_t block = ^{ if (flag) self->config &= ~kIPv6Disabled; else self->config |= kIPv6Disabled; }; if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) block(); else dispatch_async(socketQueue, block); } - (BOOL)isIPv4PreferredOverIPv6 { // Note: YES means kPreferIPv6 is OFF if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { return ((config & kPreferIPv6) == 0); } else { __block BOOL result; dispatch_sync(socketQueue, ^{ result = ((self->config & kPreferIPv6) == 0); }); return result; } } - (void)setIPv4PreferredOverIPv6:(BOOL)flag { // Note: YES means kPreferIPv6 is OFF dispatch_block_t block = ^{ if (flag) self->config &= ~kPreferIPv6; else self->config |= kPreferIPv6; }; if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) block(); else dispatch_async(socketQueue, block); } - (NSTimeInterval) alternateAddressDelay { __block NSTimeInterval delay; dispatch_block_t block = ^{ delay = self->alternateAddressDelay; }; if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) block(); else dispatch_sync(socketQueue, block); return delay; } - (void) setAlternateAddressDelay:(NSTimeInterval)delay { dispatch_block_t block = ^{ self->alternateAddressDelay = delay; }; if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) block(); else dispatch_async(socketQueue, block); } - (id)userData { __block id result = nil; dispatch_block_t block = ^{ result = self->userData; }; if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) block(); else dispatch_sync(socketQueue, block); return result; } - (void)setUserData:(id)arbitraryUserData { dispatch_block_t block = ^{ if (self->userData != arbitraryUserData) { self->userData = arbitraryUserData; } }; if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) block(); else dispatch_async(socketQueue, block); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #pragma mark Accepting //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - (BOOL)acceptOnPort:(uint16_t)port error:(NSError **)errPtr { return [self acceptOnInterface:nil port:port error:errPtr]; } - (BOOL)acceptOnInterface:(NSString *)inInterface port:(uint16_t)port error:(NSError **)errPtr { LogTrace(); // Just in-case interface parameter is immutable. NSString *interface = [inInterface copy]; __block BOOL result = NO; __block NSError *err = nil; // CreateSocket Block // This block will be invoked within the dispatch block below. int(^createSocket)(int, NSData*) = ^int (int domain, NSData *interfaceAddr) { int socketFD = socket(domain, SOCK_STREAM, 0); if (socketFD == SOCKET_NULL) { NSString *reason = @"Error in socket() function"; err = [self errorWithErrno:errno reason:reason]; return SOCKET_NULL; } int status; // Set socket options status = fcntl(socketFD, F_SETFL, O_NONBLOCK); if (status == -1) { NSString *reason = @"Error enabling non-blocking IO on socket (fcntl)"; err = [self errorWithErrno:errno reason:reason]; LogVerbose(@"close(socketFD)"); close(socketFD); return SOCKET_NULL; } int reuseOn = 1; status = setsockopt(socketFD, SOL_SOCKET, SO_REUSEADDR, &reuseOn, sizeof(reuseOn)); if (status == -1) { NSString *reason = @"Error enabling address reuse (setsockopt)"; err = [self errorWithErrno:errno reason:reason]; LogVerbose(@"close(socketFD)"); close(socketFD); return SOCKET_NULL; } // Bind socket status = bind(socketFD, (const struct sockaddr *)[interfaceAddr bytes], (socklen_t)[interfaceAddr length]); if (status == -1) { NSString *reason = @"Error in bind() function"; err = [self errorWithErrno:errno reason:reason]; LogVerbose(@"close(socketFD)"); close(socketFD); return SOCKET_NULL; } // Listen status = listen(socketFD, 1024); if (status == -1) { NSString *reason = @"Error in listen() function"; err = [self errorWithErrno:errno reason:reason]; LogVerbose(@"close(socketFD)"); close(socketFD); return SOCKET_NULL; } return socketFD; }; // Create dispatch block and run on socketQueue dispatch_block_t block = ^{ @autoreleasepool { if (self->delegate == nil) // Must have delegate set { NSString *msg = @"Attempting to accept without a delegate. Set a delegate first."; err = [self badConfigError:msg]; return_from_block; } if (self->delegateQueue == NULL) // Must have delegate queue set { NSString *msg = @"Attempting to accept without a delegate queue. Set a delegate queue first."; err = [self badConfigError:msg]; return_from_block; } BOOL isIPv4Disabled = (self->config & kIPv4Disabled) ? YES : NO; BOOL isIPv6Disabled = (self->config & kIPv6Disabled) ? YES : NO; if (isIPv4Disabled && isIPv6Disabled) // Must have IPv4 or IPv6 enabled { NSString *msg = @"Both IPv4 and IPv6 have been disabled. Must enable at least one protocol first."; err = [self badConfigError:msg]; return_from_block; } if (![self isDisconnected]) // Must be disconnected { NSString *msg = @"Attempting to accept while connected or accepting connections. Disconnect first."; err = [self badConfigError:msg]; return_from_block; } // Clear queues (spurious read/write requests post disconnect) [self->readQueue removeAllObjects]; [self->writeQueue removeAllObjects]; // Resolve interface from description NSMutableData *interface4 = nil; NSMutableData *interface6 = nil; [self getInterfaceAddress4:&interface4 address6:&interface6 fromDescription:interface port:port]; if ((interface4 == nil) && (interface6 == nil)) { NSString *msg = @"Unknown interface. Specify valid interface by name (e.g. \"en1\") or IP address."; err = [self badParamError:msg]; return_from_block; } if (isIPv4Disabled && (interface6 == nil)) { NSString *msg = @"IPv4 has been disabled and specified interface doesn't support IPv6."; err = [self badParamError:msg]; return_from_block; } if (isIPv6Disabled && (interface4 == nil)) { NSString *msg = @"IPv6 has been disabled and specified interface doesn't support IPv4."; err = [self badParamError:msg]; return_from_block; } BOOL enableIPv4 = !isIPv4Disabled && (interface4 != nil); BOOL enableIPv6 = !isIPv6Disabled && (interface6 != nil); // Create sockets, configure, bind, and listen if (enableIPv4) { LogVerbose(@"Creating IPv4 socket"); self->socket4FD = createSocket(AF_INET, interface4); if (self->socket4FD == SOCKET_NULL) { return_from_block; } } if (enableIPv6) { LogVerbose(@"Creating IPv6 socket"); if (enableIPv4 && (port == 0)) { // No specific port was specified, so we allowed the OS to pick an available port for us. // Now we need to make sure the IPv6 socket listens on the same port as the IPv4 socket. struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)[interface6 mutableBytes]; addr6->sin6_port = htons([self localPort4]); } self->socket6FD = createSocket(AF_INET6, interface6); if (self->socket6FD == SOCKET_NULL) { if (self->socket4FD != SOCKET_NULL) { LogVerbose(@"close(socket4FD)"); close(self->socket4FD); self->socket4FD = SOCKET_NULL; } return_from_block; } } // Create accept sources if (enableIPv4) { self->accept4Source = dispatch_source_create(DISPATCH_SOURCE_TYPE_READ, self->socket4FD, 0, self->socketQueue); int socketFD = self->socket4FD; dispatch_source_t acceptSource = self->accept4Source; __weak GCDAsyncSocket *weakSelf = self; dispatch_source_set_event_handler(self->accept4Source, ^{ @autoreleasepool { #pragma clang diagnostic push #pragma clang diagnostic warning "-Wimplicit-retain-self" __strong GCDAsyncSocket *strongSelf = weakSelf; if (strongSelf == nil) return_from_block; LogVerbose(@"event4Block"); unsigned long i = 0; unsigned long numPendingConnections = dispatch_source_get_data(acceptSource); LogVerbose(@"numPendingConnections: %lu", numPendingConnections); while ([strongSelf doAccept:socketFD] && (++i < numPendingConnections)); #pragma clang diagnostic pop }}); dispatch_source_set_cancel_handler(self->accept4Source, ^{ #pragma clang diagnostic push #pragma clang diagnostic warning "-Wimplicit-retain-self" #if !OS_OBJECT_USE_OBJC LogVerbose(@"dispatch_release(accept4Source)"); dispatch_release(acceptSource); #endif LogVerbose(@"close(socket4FD)"); close(socketFD); #pragma clang diagnostic pop }); LogVerbose(@"dispatch_resume(accept4Source)"); dispatch_resume(self->accept4Source); } if (enableIPv6) { self->accept6Source = dispatch_source_create(DISPATCH_SOURCE_TYPE_READ, self->socket6FD, 0, self->socketQueue); int socketFD = self->socket6FD; dispatch_source_t acceptSource = self->accept6Source; __weak GCDAsyncSocket *weakSelf = self; dispatch_source_set_event_handler(self->accept6Source, ^{ @autoreleasepool { #pragma clang diagnostic push #pragma clang diagnostic warning "-Wimplicit-retain-self" __strong GCDAsyncSocket *strongSelf = weakSelf; if (strongSelf == nil) return_from_block; LogVerbose(@"event6Block"); unsigned long i = 0; unsigned long numPendingConnections = dispatch_source_get_data(acceptSource); LogVerbose(@"numPendingConnections: %lu", numPendingConnections); while ([strongSelf doAccept:socketFD] && (++i < numPendingConnections)); #pragma clang diagnostic pop }}); dispatch_source_set_cancel_handler(self->accept6Source, ^{ #pragma clang diagnostic push #pragma clang diagnostic warning "-Wimplicit-retain-self" #if !OS_OBJECT_USE_OBJC LogVerbose(@"dispatch_release(accept6Source)"); dispatch_release(acceptSource); #endif LogVerbose(@"close(socket6FD)"); close(socketFD); #pragma clang diagnostic pop }); LogVerbose(@"dispatch_resume(accept6Source)"); dispatch_resume(self->accept6Source); } self->flags |= kSocketStarted; result = YES; }}; if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) block(); else dispatch_sync(socketQueue, block); if (result == NO) { LogInfo(@"Error in accept: %@", err); if (errPtr) *errPtr = err; } return result; } - (BOOL)acceptOnUrl:(NSURL *)url error:(NSError **)errPtr { LogTrace(); __block BOOL result = NO; __block NSError *err = nil; // CreateSocket Block // This block will be invoked within the dispatch block below. int(^createSocket)(int, NSData*) = ^int (int domain, NSData *interfaceAddr) { int socketFD = socket(domain, SOCK_STREAM, 0); if (socketFD == SOCKET_NULL) { NSString *reason = @"Error in socket() function"; err = [self errorWithErrno:errno reason:reason]; return SOCKET_NULL; } int status; // Set socket options status = fcntl(socketFD, F_SETFL, O_NONBLOCK); if (status == -1) { NSString *reason = @"Error enabling non-blocking IO on socket (fcntl)"; err = [self errorWithErrno:errno reason:reason]; LogVerbose(@"close(socketFD)"); close(socketFD); return SOCKET_NULL; } int reuseOn = 1; status = setsockopt(socketFD, SOL_SOCKET, SO_REUSEADDR, &reuseOn, sizeof(reuseOn)); if (status == -1) { NSString *reason = @"Error enabling address reuse (setsockopt)"; err = [self errorWithErrno:errno reason:reason]; LogVerbose(@"close(socketFD)"); close(socketFD); return SOCKET_NULL; } // Bind socket status = bind(socketFD, (const struct sockaddr *)[interfaceAddr bytes], (socklen_t)[interfaceAddr length]); if (status == -1) { NSString *reason = @"Error in bind() function"; err = [self errorWithErrno:errno reason:reason]; LogVerbose(@"close(socketFD)"); close(socketFD); return SOCKET_NULL; } // Listen status = listen(socketFD, 1024); if (status == -1) { NSString *reason = @"Error in listen() function"; err = [self errorWithErrno:errno reason:reason]; LogVerbose(@"close(socketFD)"); close(socketFD); return SOCKET_NULL; } return socketFD; }; // Create dispatch block and run on socketQueue dispatch_block_t block = ^{ @autoreleasepool { if (self->delegate == nil) // Must have delegate set { NSString *msg = @"Attempting to accept without a delegate. Set a delegate first."; err = [self badConfigError:msg]; return_from_block; } if (self->delegateQueue == NULL) // Must have delegate queue set { NSString *msg = @"Attempting to accept without a delegate queue. Set a delegate queue first."; err = [self badConfigError:msg]; return_from_block; } if (![self isDisconnected]) // Must be disconnected { NSString *msg = @"Attempting to accept while connected or accepting connections. Disconnect first."; err = [self badConfigError:msg]; return_from_block; } // Clear queues (spurious read/write requests post disconnect) [self->readQueue removeAllObjects]; [self->writeQueue removeAllObjects]; // Remove a previous socket NSError *error = nil; NSFileManager *fileManager = [NSFileManager defaultManager]; NSString *urlPath = url.path; if (urlPath && [fileManager fileExistsAtPath:urlPath]) { if (![fileManager removeItemAtURL:url error:&error]) { NSString *msg = @"Could not remove previous unix domain socket at given url."; err = [self otherError:msg]; return_from_block; } } // Resolve interface from description NSData *interface = [self getInterfaceAddressFromUrl:url]; if (interface == nil) { NSString *msg = @"Invalid unix domain url. Specify a valid file url that does not exist (e.g. \"file:///tmp/socket\")"; err = [self badParamError:msg]; return_from_block; } // Create sockets, configure, bind, and listen LogVerbose(@"Creating unix domain socket"); self->socketUN = createSocket(AF_UNIX, interface); if (self->socketUN == SOCKET_NULL) { return_from_block; } self->socketUrl = url; // Create accept sources self->acceptUNSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_READ, self->socketUN, 0, self->socketQueue); int socketFD = self->socketUN; dispatch_source_t acceptSource = self->acceptUNSource; __weak GCDAsyncSocket *weakSelf = self; dispatch_source_set_event_handler(self->acceptUNSource, ^{ @autoreleasepool { __strong GCDAsyncSocket *strongSelf = weakSelf; LogVerbose(@"eventUNBlock"); unsigned long i = 0; unsigned long numPendingConnections = dispatch_source_get_data(acceptSource); LogVerbose(@"numPendingConnections: %lu", numPendingConnections); while ([strongSelf doAccept:socketFD] && (++i < numPendingConnections)); }}); dispatch_source_set_cancel_handler(self->acceptUNSource, ^{ #if !OS_OBJECT_USE_OBJC LogVerbose(@"dispatch_release(acceptUNSource)"); dispatch_release(acceptSource); #endif LogVerbose(@"close(socketUN)"); close(socketFD); }); LogVerbose(@"dispatch_resume(acceptUNSource)"); dispatch_resume(self->acceptUNSource); self->flags |= kSocketStarted; result = YES; }}; if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) block(); else dispatch_sync(socketQueue, block); if (result == NO) { LogInfo(@"Error in accept: %@", err); if (errPtr) *errPtr = err; } return result; } - (BOOL)doAccept:(int)parentSocketFD { LogTrace(); int socketType; int childSocketFD; NSData *childSocketAddress; if (parentSocketFD == socket4FD) { socketType = 0; struct sockaddr_in addr; socklen_t addrLen = sizeof(addr); childSocketFD = accept(parentSocketFD, (struct sockaddr *)&addr, &addrLen); if (childSocketFD == -1) { LogWarn(@"Accept failed with error: %@", [self errnoError]); return NO; } childSocketAddress = [NSData dataWithBytes:&addr length:addrLen]; } else if (parentSocketFD == socket6FD) { socketType = 1; struct sockaddr_in6 addr; socklen_t addrLen = sizeof(addr); childSocketFD = accept(parentSocketFD, (struct sockaddr *)&addr, &addrLen); if (childSocketFD == -1) { LogWarn(@"Accept failed with error: %@", [self errnoError]); return NO; } childSocketAddress = [NSData dataWithBytes:&addr length:addrLen]; } else // if (parentSocketFD == socketUN) { socketType = 2; struct sockaddr_un addr; socklen_t addrLen = sizeof(addr); childSocketFD = accept(parentSocketFD, (struct sockaddr *)&addr, &addrLen); if (childSocketFD == -1) { LogWarn(@"Accept failed with error: %@", [self errnoError]); return NO; } childSocketAddress = [NSData dataWithBytes:&addr length:addrLen]; } // Enable non-blocking IO on the socket int result = fcntl(childSocketFD, F_SETFL, O_NONBLOCK); if (result == -1) { LogWarn(@"Error enabling non-blocking IO on accepted socket (fcntl)"); LogVerbose(@"close(childSocketFD)"); close(childSocketFD); return NO; } // Prevent SIGPIPE signals int nosigpipe = 1; setsockopt(childSocketFD, SOL_SOCKET, SO_NOSIGPIPE, &nosigpipe, sizeof(nosigpipe)); // Notify delegate if (delegateQueue) { __strong id theDelegate = delegate; dispatch_async(delegateQueue, ^{ @autoreleasepool { // Query delegate for custom socket queue dispatch_queue_t childSocketQueue = NULL; if ([theDelegate respondsToSelector:@selector(newSocketQueueForConnectionFromAddress:onSocket:)]) { childSocketQueue = [theDelegate newSocketQueueForConnectionFromAddress:childSocketAddress onSocket:self]; } // Create GCDAsyncSocket instance for accepted socket GCDAsyncSocket *acceptedSocket = [[[self class] alloc] initWithDelegate:theDelegate delegateQueue:self->delegateQueue socketQueue:childSocketQueue]; if (socketType == 0) acceptedSocket->socket4FD = childSocketFD; else if (socketType == 1) acceptedSocket->socket6FD = childSocketFD; else acceptedSocket->socketUN = childSocketFD; acceptedSocket->flags = (kSocketStarted | kConnected); // Setup read and write sources for accepted socket dispatch_async(acceptedSocket->socketQueue, ^{ @autoreleasepool { [acceptedSocket setupReadAndWriteSourcesForNewlyConnectedSocket:childSocketFD]; }}); // Notify delegate if ([theDelegate respondsToSelector:@selector(socket:didAcceptNewSocket:)]) { [theDelegate socket:self didAcceptNewSocket:acceptedSocket]; } // Release the socket queue returned from the delegate (it was retained by acceptedSocket) #if !OS_OBJECT_USE_OBJC if (childSocketQueue) dispatch_release(childSocketQueue); #endif // The accepted socket should have been retained by the delegate. // Otherwise it gets properly released when exiting the block. }}); } return YES; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #pragma mark Connecting //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /** * This method runs through the various checks required prior to a connection attempt. * It is shared between the connectToHost and connectToAddress methods. * **/ - (BOOL)preConnectWithInterface:(NSString *)interface error:(NSError **)errPtr { NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); if (delegate == nil) // Must have delegate set { if (errPtr) { NSString *msg = @"Attempting to connect without a delegate. Set a delegate first."; *errPtr = [self badConfigError:msg]; } return NO; } if (delegateQueue == NULL) // Must have delegate queue set { if (errPtr) { NSString *msg = @"Attempting to connect without a delegate queue. Set a delegate queue first."; *errPtr = [self badConfigError:msg]; } return NO; } if (![self isDisconnected]) // Must be disconnected { if (errPtr) { NSString *msg = @"Attempting to connect while connected or accepting connections. Disconnect first."; *errPtr = [self badConfigError:msg]; } return NO; } BOOL isIPv4Disabled = (config & kIPv4Disabled) ? YES : NO; BOOL isIPv6Disabled = (config & kIPv6Disabled) ? YES : NO; if (isIPv4Disabled && isIPv6Disabled) // Must have IPv4 or IPv6 enabled { if (errPtr) { NSString *msg = @"Both IPv4 and IPv6 have been disabled. Must enable at least one protocol first."; *errPtr = [self badConfigError:msg]; } return NO; } if (interface) { NSMutableData *interface4 = nil; NSMutableData *interface6 = nil; [self getInterfaceAddress4:&interface4 address6:&interface6 fromDescription:interface port:0]; if ((interface4 == nil) && (interface6 == nil)) { if (errPtr) { NSString *msg = @"Unknown interface. Specify valid interface by name (e.g. \"en1\") or IP address."; *errPtr = [self badParamError:msg]; } return NO; } if (isIPv4Disabled && (interface6 == nil)) { if (errPtr) { NSString *msg = @"IPv4 has been disabled and specified interface doesn't support IPv6."; *errPtr = [self badParamError:msg]; } return NO; } if (isIPv6Disabled && (interface4 == nil)) { if (errPtr) { NSString *msg = @"IPv6 has been disabled and specified interface doesn't support IPv4."; *errPtr = [self badParamError:msg]; } return NO; } connectInterface4 = interface4; connectInterface6 = interface6; } // Clear queues (spurious read/write requests post disconnect) [readQueue removeAllObjects]; [writeQueue removeAllObjects]; return YES; } - (BOOL)preConnectWithUrl:(NSURL *)url error:(NSError **)errPtr { NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); if (delegate == nil) // Must have delegate set { if (errPtr) { NSString *msg = @"Attempting to connect without a delegate. Set a delegate first."; *errPtr = [self badConfigError:msg]; } return NO; } if (delegateQueue == NULL) // Must have delegate queue set { if (errPtr) { NSString *msg = @"Attempting to connect without a delegate queue. Set a delegate queue first."; *errPtr = [self badConfigError:msg]; } return NO; } if (![self isDisconnected]) // Must be disconnected { if (errPtr) { NSString *msg = @"Attempting to connect while connected or accepting connections. Disconnect first."; *errPtr = [self badConfigError:msg]; } return NO; } NSData *interface = [self getInterfaceAddressFromUrl:url]; if (interface == nil) { if (errPtr) { NSString *msg = @"Unknown interface. Specify valid interface by name (e.g. \"en1\") or IP address."; *errPtr = [self badParamError:msg]; } return NO; } connectInterfaceUN = interface; // Clear queues (spurious read/write requests post disconnect) [readQueue removeAllObjects]; [writeQueue removeAllObjects]; return YES; } - (BOOL)connectToHost:(NSString*)host onPort:(uint16_t)port error:(NSError **)errPtr { return [self connectToHost:host onPort:port withTimeout:-1 error:errPtr]; } - (BOOL)connectToHost:(NSString *)host onPort:(uint16_t)port withTimeout:(NSTimeInterval)timeout error:(NSError **)errPtr { return [self connectToHost:host onPort:port viaInterface:nil withTimeout:timeout error:errPtr]; } - (BOOL)connectToHost:(NSString *)inHost onPort:(uint16_t)port viaInterface:(NSString *)inInterface withTimeout:(NSTimeInterval)timeout error:(NSError **)errPtr { LogTrace(); // Just in case immutable objects were passed NSString *host = [inHost copy]; NSString *interface = [inInterface copy]; __block BOOL result = NO; __block NSError *preConnectErr = nil; dispatch_block_t block = ^{ @autoreleasepool { // Check for problems with host parameter if ([host length] == 0) { NSString *msg = @"Invalid host parameter (nil or \"\"). Should be a domain name or IP address string."; preConnectErr = [self badParamError:msg]; return_from_block; } // Run through standard pre-connect checks if (![self preConnectWithInterface:interface error:&preConnectErr]) { return_from_block; } // We've made it past all the checks. // It's time to start the connection process. self->flags |= kSocketStarted; LogVerbose(@"Dispatching DNS lookup..."); // It's possible that the given host parameter is actually a NSMutableString. // So we want to copy it now, within this block that will be executed synchronously. // This way the asynchronous lookup block below doesn't have to worry about it changing. NSString *hostCpy = [host copy]; int aStateIndex = self->stateIndex; __weak GCDAsyncSocket *weakSelf = self; dispatch_queue_t globalConcurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(globalConcurrentQueue, ^{ @autoreleasepool { #pragma clang diagnostic push #pragma clang diagnostic warning "-Wimplicit-retain-self" NSError *lookupErr = nil; NSMutableArray *addresses = [[self class] lookupHost:hostCpy port:port error:&lookupErr]; __strong GCDAsyncSocket *strongSelf = weakSelf; if (strongSelf == nil) return_from_block; if (lookupErr) { dispatch_async(strongSelf->socketQueue, ^{ @autoreleasepool { [strongSelf lookup:aStateIndex didFail:lookupErr]; }}); } else { NSData *address4 = nil; NSData *address6 = nil; for (NSData *address in addresses) { if (!address4 && [[self class] isIPv4Address:address]) { address4 = address; } else if (!address6 && [[self class] isIPv6Address:address]) { address6 = address; } } dispatch_async(strongSelf->socketQueue, ^{ @autoreleasepool { [strongSelf lookup:aStateIndex didSucceedWithAddress4:address4 address6:address6]; }}); } #pragma clang diagnostic pop }}); [self startConnectTimeout:timeout]; result = YES; }}; if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) block(); else dispatch_sync(socketQueue, block); if (errPtr) *errPtr = preConnectErr; return result; } - (BOOL)connectToAddress:(NSData *)remoteAddr error:(NSError **)errPtr { return [self connectToAddress:remoteAddr viaInterface:nil withTimeout:-1 error:errPtr]; } - (BOOL)connectToAddress:(NSData *)remoteAddr withTimeout:(NSTimeInterval)timeout error:(NSError **)errPtr { return [self connectToAddress:remoteAddr viaInterface:nil withTimeout:timeout error:errPtr]; } - (BOOL)connectToAddress:(NSData *)inRemoteAddr viaInterface:(NSString *)inInterface withTimeout:(NSTimeInterval)timeout error:(NSError **)errPtr { LogTrace(); // Just in case immutable objects were passed NSData *remoteAddr = [inRemoteAddr copy]; NSString *interface = [inInterface copy]; __block BOOL result = NO; __block NSError *err = nil; dispatch_block_t block = ^{ @autoreleasepool { // Check for problems with remoteAddr parameter NSData *address4 = nil; NSData *address6 = nil; if ([remoteAddr length] >= sizeof(struct sockaddr)) { const struct sockaddr *sockaddr = (const struct sockaddr *)[remoteAddr bytes]; if (sockaddr->sa_family == AF_INET) { if ([remoteAddr length] == sizeof(struct sockaddr_in)) { address4 = remoteAddr; } } else if (sockaddr->sa_family == AF_INET6) { if ([remoteAddr length] == sizeof(struct sockaddr_in6)) { address6 = remoteAddr; } } } if ((address4 == nil) && (address6 == nil)) { NSString *msg = @"A valid IPv4 or IPv6 address was not given"; err = [self badParamError:msg]; return_from_block; } BOOL isIPv4Disabled = (self->config & kIPv4Disabled) ? YES : NO; BOOL isIPv6Disabled = (self->config & kIPv6Disabled) ? YES : NO; if (isIPv4Disabled && (address4 != nil)) { NSString *msg = @"IPv4 has been disabled and an IPv4 address was passed."; err = [self badParamError:msg]; return_from_block; } if (isIPv6Disabled && (address6 != nil)) { NSString *msg = @"IPv6 has been disabled and an IPv6 address was passed."; err = [self badParamError:msg]; return_from_block; } // Run through standard pre-connect checks if (![self preConnectWithInterface:interface error:&err]) { return_from_block; } // We've made it past all the checks. // It's time to start the connection process. if (![self connectWithAddress4:address4 address6:address6 error:&err]) { return_from_block; } self->flags |= kSocketStarted; [self startConnectTimeout:timeout]; result = YES; }}; if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) block(); else dispatch_sync(socketQueue, block); if (result == NO) { if (errPtr) *errPtr = err; } return result; } - (BOOL)connectToUrl:(NSURL *)url withTimeout:(NSTimeInterval)timeout error:(NSError **)errPtr { LogTrace(); __block BOOL result = NO; __block NSError *err = nil; dispatch_block_t block = ^{ @autoreleasepool { // Check for problems with host parameter if ([url.path length] == 0) { NSString *msg = @"Invalid unix domain socket url."; err = [self badParamError:msg]; return_from_block; } // Run through standard pre-connect checks if (![self preConnectWithUrl:url error:&err]) { return_from_block; } // We've made it past all the checks. // It's time to start the connection process. self->flags |= kSocketStarted; // Start the normal connection process NSError *connectError = nil; if (![self connectWithAddressUN:self->connectInterfaceUN error:&connectError]) { [self closeWithError:connectError]; return_from_block; } [self startConnectTimeout:timeout]; result = YES; }}; if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) block(); else dispatch_sync(socketQueue, block); if (result == NO) { if (errPtr) *errPtr = err; } return result; } - (BOOL)connectToNetService:(NSNetService *)netService error:(NSError **)errPtr { NSArray* addresses = [netService addresses]; for (NSData* address in addresses) { BOOL result = [self connectToAddress:address error:errPtr]; if (result) { return YES; } } return NO; } - (void)lookup:(int)aStateIndex didSucceedWithAddress4:(NSData *)address4 address6:(NSData *)address6 { LogTrace(); NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); NSAssert(address4 || address6, @"Expected at least one valid address"); if (aStateIndex != stateIndex) { LogInfo(@"Ignoring lookupDidSucceed, already disconnected"); // The connect operation has been cancelled. // That is, socket was disconnected, or connection has already timed out. return; } // Check for problems BOOL isIPv4Disabled = (config & kIPv4Disabled) ? YES : NO; BOOL isIPv6Disabled = (config & kIPv6Disabled) ? YES : NO; if (isIPv4Disabled && (address6 == nil)) { NSString *msg = @"IPv4 has been disabled and DNS lookup found no IPv6 address."; [self closeWithError:[self otherError:msg]]; return; } if (isIPv6Disabled && (address4 == nil)) { NSString *msg = @"IPv6 has been disabled and DNS lookup found no IPv4 address."; [self closeWithError:[self otherError:msg]]; return; } // Start the normal connection process NSError *err = nil; if (![self connectWithAddress4:address4 address6:address6 error:&err]) { [self closeWithError:err]; } } /** * This method is called if the DNS lookup fails. * This method is executed on the socketQueue. * * Since the DNS lookup executed synchronously on a global concurrent queue, * the original connection request may have already been cancelled or timed-out by the time this method is invoked. * The lookupIndex tells us whether the lookup is still valid or not. **/ - (void)lookup:(int)aStateIndex didFail:(NSError *)error { LogTrace(); NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); if (aStateIndex != stateIndex) { LogInfo(@"Ignoring lookup:didFail: - already disconnected"); // The connect operation has been cancelled. // That is, socket was disconnected, or connection has already timed out. return; } [self endConnectTimeout]; [self closeWithError:error]; } - (BOOL)bindSocket:(int)socketFD toInterface:(NSData *)connectInterface error:(NSError **)errPtr { // Bind the socket to the desired interface (if needed) if (connectInterface) { LogVerbose(@"Binding socket..."); if ([[self class] portFromAddress:connectInterface] > 0) { // Since we're going to be binding to a specific port, // we should turn on reuseaddr to allow us to override sockets in time_wait. int reuseOn = 1; setsockopt(socketFD, SOL_SOCKET, SO_REUSEADDR, &reuseOn, sizeof(reuseOn)); } const struct sockaddr *interfaceAddr = (const struct sockaddr *)[connectInterface bytes]; int result = bind(socketFD, interfaceAddr, (socklen_t)[connectInterface length]); if (result != 0) { if (errPtr) *errPtr = [self errorWithErrno:errno reason:@"Error in bind() function"]; return NO; } } return YES; } - (int)createSocket:(int)family connectInterface:(NSData *)connectInterface errPtr:(NSError **)errPtr { int socketFD = socket(family, SOCK_STREAM, 0); if (socketFD == SOCKET_NULL) { if (errPtr) *errPtr = [self errorWithErrno:errno reason:@"Error in socket() function"]; return socketFD; } if (![self bindSocket:socketFD toInterface:connectInterface error:errPtr]) { [self closeSocket:socketFD]; return SOCKET_NULL; } // Prevent SIGPIPE signals int nosigpipe = 1; setsockopt(socketFD, SOL_SOCKET, SO_NOSIGPIPE, &nosigpipe, sizeof(nosigpipe)); return socketFD; } - (void)connectSocket:(int)socketFD address:(NSData *)address stateIndex:(int)aStateIndex { // If there already is a socket connected, we close socketFD and return if (self.isConnected) { [self closeSocket:socketFD]; return; } // Start the connection process in a background queue __weak GCDAsyncSocket *weakSelf = self; dispatch_queue_t globalConcurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(globalConcurrentQueue, ^{ #pragma clang diagnostic push #pragma clang diagnostic warning "-Wimplicit-retain-self" int result = connect(socketFD, (const struct sockaddr *)[address bytes], (socklen_t)[address length]); int err = errno; __strong GCDAsyncSocket *strongSelf = weakSelf; if (strongSelf == nil) return_from_block; dispatch_async(strongSelf->socketQueue, ^{ @autoreleasepool { if (strongSelf.isConnected) { [strongSelf closeSocket:socketFD]; return_from_block; } if (result == 0) { [self closeUnusedSocket:socketFD]; [strongSelf didConnect:aStateIndex]; } else { [strongSelf closeSocket:socketFD]; // If there are no more sockets trying to connect, we inform the error to the delegate if (strongSelf.socket4FD == SOCKET_NULL && strongSelf.socket6FD == SOCKET_NULL) { NSError *error = [strongSelf errorWithErrno:err reason:@"Error in connect() function"]; [strongSelf didNotConnect:aStateIndex error:error]; } } }}); #pragma clang diagnostic pop }); LogVerbose(@"Connecting..."); } - (void)closeSocket:(int)socketFD { if (socketFD != SOCKET_NULL && (socketFD == socket6FD || socketFD == socket4FD)) { close(socketFD); if (socketFD == socket4FD) { LogVerbose(@"close(socket4FD)"); socket4FD = SOCKET_NULL; } else if (socketFD == socket6FD) { LogVerbose(@"close(socket6FD)"); socket6FD = SOCKET_NULL; } } } - (void)closeUnusedSocket:(int)usedSocketFD { if (usedSocketFD != socket4FD) { [self closeSocket:socket4FD]; } else if (usedSocketFD != socket6FD) { [self closeSocket:socket6FD]; } } - (BOOL)connectWithAddress4:(NSData *)address4 address6:(NSData *)address6 error:(NSError **)errPtr { LogTrace(); NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); LogVerbose(@"IPv4: %@:%hu", [[self class] hostFromAddress:address4], [[self class] portFromAddress:address4]); LogVerbose(@"IPv6: %@:%hu", [[self class] hostFromAddress:address6], [[self class] portFromAddress:address6]); // Determine socket type BOOL preferIPv6 = (config & kPreferIPv6) ? YES : NO; // Create and bind the sockets if (address4) { LogVerbose(@"Creating IPv4 socket"); socket4FD = [self createSocket:AF_INET connectInterface:connectInterface4 errPtr:errPtr]; } if (address6) { LogVerbose(@"Creating IPv6 socket"); socket6FD = [self createSocket:AF_INET6 connectInterface:connectInterface6 errPtr:errPtr]; } if (socket4FD == SOCKET_NULL && socket6FD == SOCKET_NULL) { return NO; } int socketFD, alternateSocketFD; NSData *address, *alternateAddress; if ((preferIPv6 && socket6FD != SOCKET_NULL) || socket4FD == SOCKET_NULL) { socketFD = socket6FD; alternateSocketFD = socket4FD; address = address6; alternateAddress = address4; } else { socketFD = socket4FD; alternateSocketFD = socket6FD; address = address4; alternateAddress = address6; } int aStateIndex = stateIndex; [self connectSocket:socketFD address:address stateIndex:aStateIndex]; if (alternateAddress) { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(alternateAddressDelay * NSEC_PER_SEC)), socketQueue, ^{ [self connectSocket:alternateSocketFD address:alternateAddress stateIndex:aStateIndex]; }); } return YES; } - (BOOL)connectWithAddressUN:(NSData *)address error:(NSError **)errPtr { LogTrace(); NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); // Create the socket int socketFD; LogVerbose(@"Creating unix domain socket"); socketUN = socket(AF_UNIX, SOCK_STREAM, 0); socketFD = socketUN; if (socketFD == SOCKET_NULL) { if (errPtr) *errPtr = [self errorWithErrno:errno reason:@"Error in socket() function"]; return NO; } // Bind the socket to the desired interface (if needed) LogVerbose(@"Binding socket..."); int reuseOn = 1; setsockopt(socketFD, SOL_SOCKET, SO_REUSEADDR, &reuseOn, sizeof(reuseOn)); // const struct sockaddr *interfaceAddr = (const struct sockaddr *)[address bytes]; // // int result = bind(socketFD, interfaceAddr, (socklen_t)[address length]); // if (result != 0) // { // if (errPtr) // *errPtr = [self errnoErrorWithReason:@"Error in bind() function"]; // // return NO; // } // Prevent SIGPIPE signals int nosigpipe = 1; setsockopt(socketFD, SOL_SOCKET, SO_NOSIGPIPE, &nosigpipe, sizeof(nosigpipe)); // Start the connection process in a background queue int aStateIndex = stateIndex; dispatch_queue_t globalConcurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(globalConcurrentQueue, ^{ const struct sockaddr *addr = (const struct sockaddr *)[address bytes]; int result = connect(socketFD, addr, addr->sa_len); if (result == 0) { dispatch_async(self->socketQueue, ^{ @autoreleasepool { [self didConnect:aStateIndex]; }}); } else { // TODO: Bad file descriptor perror("connect"); NSError *error = [self errorWithErrno:errno reason:@"Error in connect() function"]; dispatch_async(self->socketQueue, ^{ @autoreleasepool { [self didNotConnect:aStateIndex error:error]; }}); } }); LogVerbose(@"Connecting..."); return YES; } - (void)didConnect:(int)aStateIndex { LogTrace(); NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); if (aStateIndex != stateIndex) { LogInfo(@"Ignoring didConnect, already disconnected"); // The connect operation has been cancelled. // That is, socket was disconnected, or connection has already timed out. return; } flags |= kConnected; [self endConnectTimeout]; #if TARGET_OS_IPHONE // The endConnectTimeout method executed above incremented the stateIndex. aStateIndex = stateIndex; #endif // Setup read/write streams (as workaround for specific shortcomings in the iOS platform) // // Note: // There may be configuration options that must be set by the delegate before opening the streams. // The primary example is the kCFStreamNetworkServiceTypeVoIP flag, which only works on an unopened stream. // // Thus we wait until after the socket:didConnectToHost:port: delegate method has completed. // This gives the delegate time to properly configure the streams if needed. dispatch_block_t SetupStreamsPart1 = ^{ #if TARGET_OS_IPHONE if (![self createReadAndWriteStream]) { [self closeWithError:[self otherError:@"Error creating CFStreams"]]; return; } if (![self registerForStreamCallbacksIncludingReadWrite:NO]) { [self closeWithError:[self otherError:@"Error in CFStreamSetClient"]]; return; } #endif }; dispatch_block_t SetupStreamsPart2 = ^{ #if TARGET_OS_IPHONE if (aStateIndex != self->stateIndex) { // The socket has been disconnected. return; } if (![self addStreamsToRunLoop]) { [self closeWithError:[self otherError:@"Error in CFStreamScheduleWithRunLoop"]]; return; } if (![self openStreams]) { [self closeWithError:[self otherError:@"Error creating CFStreams"]]; return; } #endif }; // Notify delegate NSString *host = [self connectedHost]; uint16_t port = [self connectedPort]; NSURL *url = [self connectedUrl]; __strong id theDelegate = delegate; if (delegateQueue && host != nil && [theDelegate respondsToSelector:@selector(socket:didConnectToHost:port:)]) { SetupStreamsPart1(); dispatch_async(delegateQueue, ^{ @autoreleasepool { [theDelegate socket:self didConnectToHost:host port:port]; dispatch_async(self->socketQueue, ^{ @autoreleasepool { SetupStreamsPart2(); }}); }}); } else if (delegateQueue && url != nil && [theDelegate respondsToSelector:@selector(socket:didConnectToUrl:)]) { SetupStreamsPart1(); dispatch_async(delegateQueue, ^{ @autoreleasepool { [theDelegate socket:self didConnectToUrl:url]; dispatch_async(self->socketQueue, ^{ @autoreleasepool { SetupStreamsPart2(); }}); }}); } else { SetupStreamsPart1(); SetupStreamsPart2(); } // Get the connected socket int socketFD = (socket4FD != SOCKET_NULL) ? socket4FD : (socket6FD != SOCKET_NULL) ? socket6FD : socketUN; // Enable non-blocking IO on the socket int result = fcntl(socketFD, F_SETFL, O_NONBLOCK); if (result == -1) { NSString *errMsg = @"Error enabling non-blocking IO on socket (fcntl)"; [self closeWithError:[self otherError:errMsg]]; return; } // Setup our read/write sources [self setupReadAndWriteSourcesForNewlyConnectedSocket:socketFD]; // Dequeue any pending read/write requests [self maybeDequeueRead]; [self maybeDequeueWrite]; } - (void)didNotConnect:(int)aStateIndex error:(NSError *)error { LogTrace(); NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); if (aStateIndex != stateIndex) { LogInfo(@"Ignoring didNotConnect, already disconnected"); // The connect operation has been cancelled. // That is, socket was disconnected, or connection has already timed out. return; } [self closeWithError:error]; } - (void)startConnectTimeout:(NSTimeInterval)timeout { if (timeout >= 0.0) { connectTimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, socketQueue); __weak GCDAsyncSocket *weakSelf = self; dispatch_source_set_event_handler(connectTimer, ^{ @autoreleasepool { #pragma clang diagnostic push #pragma clang diagnostic warning "-Wimplicit-retain-self" __strong GCDAsyncSocket *strongSelf = weakSelf; if (strongSelf == nil) return_from_block; [strongSelf doConnectTimeout]; #pragma clang diagnostic pop }}); #if !OS_OBJECT_USE_OBJC dispatch_source_t theConnectTimer = connectTimer; dispatch_source_set_cancel_handler(connectTimer, ^{ #pragma clang diagnostic push #pragma clang diagnostic warning "-Wimplicit-retain-self" LogVerbose(@"dispatch_release(connectTimer)"); dispatch_release(theConnectTimer); #pragma clang diagnostic pop }); #endif dispatch_time_t tt = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(timeout * NSEC_PER_SEC)); dispatch_source_set_timer(connectTimer, tt, DISPATCH_TIME_FOREVER, 0); dispatch_resume(connectTimer); } } - (void)endConnectTimeout { LogTrace(); if (connectTimer) { dispatch_source_cancel(connectTimer); connectTimer = NULL; } // Increment stateIndex. // This will prevent us from processing results from any related background asynchronous operations. // // Note: This should be called from close method even if connectTimer is NULL. // This is because one might disconnect a socket prior to a successful connection which had no timeout. stateIndex++; if (connectInterface4) { connectInterface4 = nil; } if (connectInterface6) { connectInterface6 = nil; } } - (void)doConnectTimeout { LogTrace(); [self endConnectTimeout]; [self closeWithError:[self connectTimeoutError]]; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #pragma mark Disconnecting //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - (void)closeWithError:(NSError *)error { LogTrace(); NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); [self endConnectTimeout]; if (currentRead != nil) [self endCurrentRead]; if (currentWrite != nil) [self endCurrentWrite]; [readQueue removeAllObjects]; [writeQueue removeAllObjects]; [preBuffer reset]; #if TARGET_OS_IPHONE { if (readStream || writeStream) { [self removeStreamsFromRunLoop]; if (readStream) { CFReadStreamSetClient(readStream, kCFStreamEventNone, NULL, NULL); CFReadStreamClose(readStream); CFRelease(readStream); readStream = NULL; } if (writeStream) { CFWriteStreamSetClient(writeStream, kCFStreamEventNone, NULL, NULL); CFWriteStreamClose(writeStream); CFRelease(writeStream); writeStream = NULL; } } } #endif [sslPreBuffer reset]; sslErrCode = lastSSLHandshakeError = noErr; if (sslContext) { // Getting a linker error here about the SSLx() functions? // You need to add the Security Framework to your application. SSLClose(sslContext); #if TARGET_OS_IPHONE || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 1080) CFRelease(sslContext); #else SSLDisposeContext(sslContext); #endif sslContext = NULL; } // For some crazy reason (in my opinion), cancelling a dispatch source doesn't // invoke the cancel handler if the dispatch source is paused. // So we have to unpause the source if needed. // This allows the cancel handler to be run, which in turn releases the source and closes the socket. if (!accept4Source && !accept6Source && !acceptUNSource && !readSource && !writeSource) { LogVerbose(@"manually closing close"); if (socket4FD != SOCKET_NULL) { LogVerbose(@"close(socket4FD)"); close(socket4FD); socket4FD = SOCKET_NULL; } if (socket6FD != SOCKET_NULL) { LogVerbose(@"close(socket6FD)"); close(socket6FD); socket6FD = SOCKET_NULL; } if (socketUN != SOCKET_NULL) { LogVerbose(@"close(socketUN)"); close(socketUN); socketUN = SOCKET_NULL; unlink(socketUrl.path.fileSystemRepresentation); socketUrl = nil; } } else { if (accept4Source) { LogVerbose(@"dispatch_source_cancel(accept4Source)"); dispatch_source_cancel(accept4Source); // We never suspend accept4Source accept4Source = NULL; } if (accept6Source) { LogVerbose(@"dispatch_source_cancel(accept6Source)"); dispatch_source_cancel(accept6Source); // We never suspend accept6Source accept6Source = NULL; } if (acceptUNSource) { LogVerbose(@"dispatch_source_cancel(acceptUNSource)"); dispatch_source_cancel(acceptUNSource); // We never suspend acceptUNSource acceptUNSource = NULL; } if (readSource) { LogVerbose(@"dispatch_source_cancel(readSource)"); dispatch_source_cancel(readSource); [self resumeReadSource]; readSource = NULL; } if (writeSource) { LogVerbose(@"dispatch_source_cancel(writeSource)"); dispatch_source_cancel(writeSource); [self resumeWriteSource]; writeSource = NULL; } // The sockets will be closed by the cancel handlers of the corresponding source socket4FD = SOCKET_NULL; socket6FD = SOCKET_NULL; socketUN = SOCKET_NULL; } // If the client has passed the connect/accept method, then the connection has at least begun. // Notify delegate that it is now ending. BOOL shouldCallDelegate = (flags & kSocketStarted) ? YES : NO; BOOL isDeallocating = (flags & kDealloc) ? YES : NO; // Clear stored socket info and all flags (config remains as is) socketFDBytesAvailable = 0; flags = 0; sslWriteCachedLength = 0; if (shouldCallDelegate) { __strong id theDelegate = delegate; __strong id theSelf = isDeallocating ? nil : self; if (delegateQueue && [theDelegate respondsToSelector: @selector(socketDidDisconnect:withError:)]) { dispatch_async(delegateQueue, ^{ @autoreleasepool { [theDelegate socketDidDisconnect:theSelf withError:error]; }}); } } } - (void)disconnect { dispatch_block_t block = ^{ @autoreleasepool { if (self->flags & kSocketStarted) { [self closeWithError:nil]; } }}; // Synchronous disconnection, as documented in the header file if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) block(); else dispatch_sync(socketQueue, block); } - (void)disconnectAfterReading { dispatch_async(socketQueue, ^{ @autoreleasepool { if (self->flags & kSocketStarted) { self->flags |= (kForbidReadsWrites | kDisconnectAfterReads); [self maybeClose]; } }}); } - (void)disconnectAfterWriting { dispatch_async(socketQueue, ^{ @autoreleasepool { if (self->flags & kSocketStarted) { self->flags |= (kForbidReadsWrites | kDisconnectAfterWrites); [self maybeClose]; } }}); } - (void)disconnectAfterReadingAndWriting { dispatch_async(socketQueue, ^{ @autoreleasepool { if (self->flags & kSocketStarted) { self->flags |= (kForbidReadsWrites | kDisconnectAfterReads | kDisconnectAfterWrites); [self maybeClose]; } }}); } /** * Closes the socket if possible. * That is, if all writes have completed, and we're set to disconnect after writing, * or if all reads have completed, and we're set to disconnect after reading. **/ - (void)maybeClose { NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); BOOL shouldClose = NO; if (flags & kDisconnectAfterReads) { if (([readQueue count] == 0) && (currentRead == nil)) { if (flags & kDisconnectAfterWrites) { if (([writeQueue count] == 0) && (currentWrite == nil)) { shouldClose = YES; } } else { shouldClose = YES; } } } else if (flags & kDisconnectAfterWrites) { if (([writeQueue count] == 0) && (currentWrite == nil)) { shouldClose = YES; } } if (shouldClose) { [self closeWithError:nil]; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #pragma mark Errors //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - (NSError *)badConfigError:(NSString *)errMsg { NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errMsg}; return [NSError errorWithDomain:GCDAsyncSocketErrorDomain code:GCDAsyncSocketBadConfigError userInfo:userInfo]; } - (NSError *)badParamError:(NSString *)errMsg { NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errMsg}; return [NSError errorWithDomain:GCDAsyncSocketErrorDomain code:GCDAsyncSocketBadParamError userInfo:userInfo]; } + (NSError *)gaiError:(int)gai_error { NSString *errMsg = [NSString stringWithCString:gai_strerror(gai_error) encoding:NSASCIIStringEncoding]; NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errMsg}; return [NSError errorWithDomain:@"kCFStreamErrorDomainNetDB" code:gai_error userInfo:userInfo]; } - (NSError *)errorWithErrno:(int)err reason:(NSString *)reason { NSString *errMsg = [NSString stringWithUTF8String:strerror(err)]; NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errMsg, NSLocalizedFailureReasonErrorKey : reason}; return [NSError errorWithDomain:NSPOSIXErrorDomain code:err userInfo:userInfo]; } - (NSError *)errnoError { NSString *errMsg = [NSString stringWithUTF8String:strerror(errno)]; NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errMsg}; return [NSError errorWithDomain:NSPOSIXErrorDomain code:errno userInfo:userInfo]; } - (NSError *)sslError:(OSStatus)ssl_error { NSString *msg = @"Error code definition can be found in Apple's SecureTransport.h"; NSDictionary *userInfo = @{NSLocalizedRecoverySuggestionErrorKey : msg}; return [NSError errorWithDomain:@"kCFStreamErrorDomainSSL" code:ssl_error userInfo:userInfo]; } - (NSError *)connectTimeoutError { NSString *errMsg = NSLocalizedStringWithDefaultValue(@"GCDAsyncSocketConnectTimeoutError", @"GCDAsyncSocket", [NSBundle mainBundle], @"Attempt to connect to host timed out", nil); NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errMsg}; return [NSError errorWithDomain:GCDAsyncSocketErrorDomain code:GCDAsyncSocketConnectTimeoutError userInfo:userInfo]; } /** * Returns a standard AsyncSocket maxed out error. **/ - (NSError *)readMaxedOutError { NSString *errMsg = NSLocalizedStringWithDefaultValue(@"GCDAsyncSocketReadMaxedOutError", @"GCDAsyncSocket", [NSBundle mainBundle], @"Read operation reached set maximum length", nil); NSDictionary *info = @{NSLocalizedDescriptionKey : errMsg}; return [NSError errorWithDomain:GCDAsyncSocketErrorDomain code:GCDAsyncSocketReadMaxedOutError userInfo:info]; } /** * Returns a standard AsyncSocket write timeout error. **/ - (NSError *)readTimeoutError { NSString *errMsg = NSLocalizedStringWithDefaultValue(@"GCDAsyncSocketReadTimeoutError", @"GCDAsyncSocket", [NSBundle mainBundle], @"Read operation timed out", nil); NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errMsg}; return [NSError errorWithDomain:GCDAsyncSocketErrorDomain code:GCDAsyncSocketReadTimeoutError userInfo:userInfo]; } /** * Returns a standard AsyncSocket write timeout error. **/ - (NSError *)writeTimeoutError { NSString *errMsg = NSLocalizedStringWithDefaultValue(@"GCDAsyncSocketWriteTimeoutError", @"GCDAsyncSocket", [NSBundle mainBundle], @"Write operation timed out", nil); NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errMsg}; return [NSError errorWithDomain:GCDAsyncSocketErrorDomain code:GCDAsyncSocketWriteTimeoutError userInfo:userInfo]; } - (NSError *)connectionClosedError { NSString *errMsg = NSLocalizedStringWithDefaultValue(@"GCDAsyncSocketClosedError", @"GCDAsyncSocket", [NSBundle mainBundle], @"Socket closed by remote peer", nil); NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errMsg}; return [NSError errorWithDomain:GCDAsyncSocketErrorDomain code:GCDAsyncSocketClosedError userInfo:userInfo]; } - (NSError *)otherError:(NSString *)errMsg { NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errMsg}; return [NSError errorWithDomain:GCDAsyncSocketErrorDomain code:GCDAsyncSocketOtherError userInfo:userInfo]; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #pragma mark Diagnostics //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - (BOOL)isDisconnected { __block BOOL result = NO; dispatch_block_t block = ^{ result = (self->flags & kSocketStarted) ? NO : YES; }; if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) block(); else dispatch_sync(socketQueue, block); return result; } - (BOOL)isConnected { __block BOOL result = NO; dispatch_block_t block = ^{ result = (self->flags & kConnected) ? YES : NO; }; if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) block(); else dispatch_sync(socketQueue, block); return result; } - (NSString *)connectedHost { if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { if (socket4FD != SOCKET_NULL) return [self connectedHostFromSocket4:socket4FD]; if (socket6FD != SOCKET_NULL) return [self connectedHostFromSocket6:socket6FD]; return nil; } else { __block NSString *result = nil; dispatch_sync(socketQueue, ^{ @autoreleasepool { if (self->socket4FD != SOCKET_NULL) result = [self connectedHostFromSocket4:self->socket4FD]; else if (self->socket6FD != SOCKET_NULL) result = [self connectedHostFromSocket6:self->socket6FD]; }}); return result; } } - (uint16_t)connectedPort { if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { if (socket4FD != SOCKET_NULL) return [self connectedPortFromSocket4:socket4FD]; if (socket6FD != SOCKET_NULL) return [self connectedPortFromSocket6:socket6FD]; return 0; } else { __block uint16_t result = 0; dispatch_sync(socketQueue, ^{ // No need for autorelease pool if (self->socket4FD != SOCKET_NULL) result = [self connectedPortFromSocket4:self->socket4FD]; else if (self->socket6FD != SOCKET_NULL) result = [self connectedPortFromSocket6:self->socket6FD]; }); return result; } } - (NSURL *)connectedUrl { if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { if (socketUN != SOCKET_NULL) return [self connectedUrlFromSocketUN:socketUN]; return nil; } else { __block NSURL *result = nil; dispatch_sync(socketQueue, ^{ @autoreleasepool { if (self->socketUN != SOCKET_NULL) result = [self connectedUrlFromSocketUN:self->socketUN]; }}); return result; } } - (NSString *)localHost { if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { if (socket4FD != SOCKET_NULL) return [self localHostFromSocket4:socket4FD]; if (socket6FD != SOCKET_NULL) return [self localHostFromSocket6:socket6FD]; return nil; } else { __block NSString *result = nil; dispatch_sync(socketQueue, ^{ @autoreleasepool { if (self->socket4FD != SOCKET_NULL) result = [self localHostFromSocket4:self->socket4FD]; else if (self->socket6FD != SOCKET_NULL) result = [self localHostFromSocket6:self->socket6FD]; }}); return result; } } - (uint16_t)localPort { if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { if (socket4FD != SOCKET_NULL) return [self localPortFromSocket4:socket4FD]; if (socket6FD != SOCKET_NULL) return [self localPortFromSocket6:socket6FD]; return 0; } else { __block uint16_t result = 0; dispatch_sync(socketQueue, ^{ // No need for autorelease pool if (self->socket4FD != SOCKET_NULL) result = [self localPortFromSocket4:self->socket4FD]; else if (self->socket6FD != SOCKET_NULL) result = [self localPortFromSocket6:self->socket6FD]; }); return result; } } - (NSString *)connectedHost4 { if (socket4FD != SOCKET_NULL) return [self connectedHostFromSocket4:socket4FD]; return nil; } - (NSString *)connectedHost6 { if (socket6FD != SOCKET_NULL) return [self connectedHostFromSocket6:socket6FD]; return nil; } - (uint16_t)connectedPort4 { if (socket4FD != SOCKET_NULL) return [self connectedPortFromSocket4:socket4FD]; return 0; } - (uint16_t)connectedPort6 { if (socket6FD != SOCKET_NULL) return [self connectedPortFromSocket6:socket6FD]; return 0; } - (NSString *)localHost4 { if (socket4FD != SOCKET_NULL) return [self localHostFromSocket4:socket4FD]; return nil; } - (NSString *)localHost6 { if (socket6FD != SOCKET_NULL) return [self localHostFromSocket6:socket6FD]; return nil; } - (uint16_t)localPort4 { if (socket4FD != SOCKET_NULL) return [self localPortFromSocket4:socket4FD]; return 0; } - (uint16_t)localPort6 { if (socket6FD != SOCKET_NULL) return [self localPortFromSocket6:socket6FD]; return 0; } - (NSString *)connectedHostFromSocket4:(int)socketFD { struct sockaddr_in sockaddr4; socklen_t sockaddr4len = sizeof(sockaddr4); if (getpeername(socketFD, (struct sockaddr *)&sockaddr4, &sockaddr4len) < 0) { return nil; } return [[self class] hostFromSockaddr4:&sockaddr4]; } - (NSString *)connectedHostFromSocket6:(int)socketFD { struct sockaddr_in6 sockaddr6; socklen_t sockaddr6len = sizeof(sockaddr6); if (getpeername(socketFD, (struct sockaddr *)&sockaddr6, &sockaddr6len) < 0) { return nil; } return [[self class] hostFromSockaddr6:&sockaddr6]; } - (uint16_t)connectedPortFromSocket4:(int)socketFD { struct sockaddr_in sockaddr4; socklen_t sockaddr4len = sizeof(sockaddr4); if (getpeername(socketFD, (struct sockaddr *)&sockaddr4, &sockaddr4len) < 0) { return 0; } return [[self class] portFromSockaddr4:&sockaddr4]; } - (uint16_t)connectedPortFromSocket6:(int)socketFD { struct sockaddr_in6 sockaddr6; socklen_t sockaddr6len = sizeof(sockaddr6); if (getpeername(socketFD, (struct sockaddr *)&sockaddr6, &sockaddr6len) < 0) { return 0; } return [[self class] portFromSockaddr6:&sockaddr6]; } - (NSURL *)connectedUrlFromSocketUN:(int)socketFD { struct sockaddr_un sockaddr; socklen_t sockaddrlen = sizeof(sockaddr); if (getpeername(socketFD, (struct sockaddr *)&sockaddr, &sockaddrlen) < 0) { return 0; } return [[self class] urlFromSockaddrUN:&sockaddr]; } - (NSString *)localHostFromSocket4:(int)socketFD { struct sockaddr_in sockaddr4; socklen_t sockaddr4len = sizeof(sockaddr4); if (getsockname(socketFD, (struct sockaddr *)&sockaddr4, &sockaddr4len) < 0) { return nil; } return [[self class] hostFromSockaddr4:&sockaddr4]; } - (NSString *)localHostFromSocket6:(int)socketFD { struct sockaddr_in6 sockaddr6; socklen_t sockaddr6len = sizeof(sockaddr6); if (getsockname(socketFD, (struct sockaddr *)&sockaddr6, &sockaddr6len) < 0) { return nil; } return [[self class] hostFromSockaddr6:&sockaddr6]; } - (uint16_t)localPortFromSocket4:(int)socketFD { struct sockaddr_in sockaddr4; socklen_t sockaddr4len = sizeof(sockaddr4); if (getsockname(socketFD, (struct sockaddr *)&sockaddr4, &sockaddr4len) < 0) { return 0; } return [[self class] portFromSockaddr4:&sockaddr4]; } - (uint16_t)localPortFromSocket6:(int)socketFD { struct sockaddr_in6 sockaddr6; socklen_t sockaddr6len = sizeof(sockaddr6); if (getsockname(socketFD, (struct sockaddr *)&sockaddr6, &sockaddr6len) < 0) { return 0; } return [[self class] portFromSockaddr6:&sockaddr6]; } - (NSData *)connectedAddress { __block NSData *result = nil; dispatch_block_t block = ^{ if (self->socket4FD != SOCKET_NULL) { struct sockaddr_in sockaddr4; socklen_t sockaddr4len = sizeof(sockaddr4); if (getpeername(self->socket4FD, (struct sockaddr *)&sockaddr4, &sockaddr4len) == 0) { result = [[NSData alloc] initWithBytes:&sockaddr4 length:sockaddr4len]; } } if (self->socket6FD != SOCKET_NULL) { struct sockaddr_in6 sockaddr6; socklen_t sockaddr6len = sizeof(sockaddr6); if (getpeername(self->socket6FD, (struct sockaddr *)&sockaddr6, &sockaddr6len) == 0) { result = [[NSData alloc] initWithBytes:&sockaddr6 length:sockaddr6len]; } } }; if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) block(); else dispatch_sync(socketQueue, block); return result; } - (NSData *)localAddress { __block NSData *result = nil; dispatch_block_t block = ^{ if (self->socket4FD != SOCKET_NULL) { struct sockaddr_in sockaddr4; socklen_t sockaddr4len = sizeof(sockaddr4); if (getsockname(self->socket4FD, (struct sockaddr *)&sockaddr4, &sockaddr4len) == 0) { result = [[NSData alloc] initWithBytes:&sockaddr4 length:sockaddr4len]; } } if (self->socket6FD != SOCKET_NULL) { struct sockaddr_in6 sockaddr6; socklen_t sockaddr6len = sizeof(sockaddr6); if (getsockname(self->socket6FD, (struct sockaddr *)&sockaddr6, &sockaddr6len) == 0) { result = [[NSData alloc] initWithBytes:&sockaddr6 length:sockaddr6len]; } } }; if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) block(); else dispatch_sync(socketQueue, block); return result; } - (BOOL)isIPv4 { if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { return (socket4FD != SOCKET_NULL); } else { __block BOOL result = NO; dispatch_sync(socketQueue, ^{ result = (self->socket4FD != SOCKET_NULL); }); return result; } } - (BOOL)isIPv6 { if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { return (socket6FD != SOCKET_NULL); } else { __block BOOL result = NO; dispatch_sync(socketQueue, ^{ result = (self->socket6FD != SOCKET_NULL); }); return result; } } - (BOOL)isSecure { if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { return (flags & kSocketSecure) ? YES : NO; } else { __block BOOL result; dispatch_sync(socketQueue, ^{ result = (self->flags & kSocketSecure) ? YES : NO; }); return result; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #pragma mark Utilities //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /** * Finds the address of an interface description. * An inteface description may be an interface name (en0, en1, lo0) or corresponding IP (192.168.4.34). * * The interface description may optionally contain a port number at the end, separated by a colon. * If a non-zero port parameter is provided, any port number in the interface description is ignored. * * The returned value is a 'struct sockaddr' wrapped in an NSMutableData object. **/ - (void)getInterfaceAddress4:(NSMutableData **)interfaceAddr4Ptr address6:(NSMutableData **)interfaceAddr6Ptr fromDescription:(NSString *)interfaceDescription port:(uint16_t)port { NSMutableData *addr4 = nil; NSMutableData *addr6 = nil; NSString *interface = nil; NSArray *components = [interfaceDescription componentsSeparatedByString:@":"]; if ([components count] > 0) { NSString *temp = [components objectAtIndex:0]; if ([temp length] > 0) { interface = temp; } } if ([components count] > 1 && port == 0) { NSString *temp = [components objectAtIndex:1]; long portL = strtol([temp UTF8String], NULL, 10); if (portL > 0 && portL <= UINT16_MAX) { port = (uint16_t)portL; } } if (interface == nil) { // ANY address struct sockaddr_in sockaddr4; memset(&sockaddr4, 0, sizeof(sockaddr4)); sockaddr4.sin_len = sizeof(sockaddr4); sockaddr4.sin_family = AF_INET; sockaddr4.sin_port = htons(port); sockaddr4.sin_addr.s_addr = htonl(INADDR_ANY); struct sockaddr_in6 sockaddr6; memset(&sockaddr6, 0, sizeof(sockaddr6)); sockaddr6.sin6_len = sizeof(sockaddr6); sockaddr6.sin6_family = AF_INET6; sockaddr6.sin6_port = htons(port); sockaddr6.sin6_addr = in6addr_any; addr4 = [NSMutableData dataWithBytes:&sockaddr4 length:sizeof(sockaddr4)]; addr6 = [NSMutableData dataWithBytes:&sockaddr6 length:sizeof(sockaddr6)]; } else if ([interface isEqualToString:@"localhost"] || [interface isEqualToString:@"loopback"]) { // LOOPBACK address struct sockaddr_in sockaddr4; memset(&sockaddr4, 0, sizeof(sockaddr4)); sockaddr4.sin_len = sizeof(sockaddr4); sockaddr4.sin_family = AF_INET; sockaddr4.sin_port = htons(port); sockaddr4.sin_addr.s_addr = htonl(INADDR_LOOPBACK); struct sockaddr_in6 sockaddr6; memset(&sockaddr6, 0, sizeof(sockaddr6)); sockaddr6.sin6_len = sizeof(sockaddr6); sockaddr6.sin6_family = AF_INET6; sockaddr6.sin6_port = htons(port); sockaddr6.sin6_addr = in6addr_loopback; addr4 = [NSMutableData dataWithBytes:&sockaddr4 length:sizeof(sockaddr4)]; addr6 = [NSMutableData dataWithBytes:&sockaddr6 length:sizeof(sockaddr6)]; } else { const char *iface = [interface UTF8String]; struct ifaddrs *addrs; const struct ifaddrs *cursor; if ((getifaddrs(&addrs) == 0)) { cursor = addrs; while (cursor != NULL) { if ((addr4 == nil) && (cursor->ifa_addr->sa_family == AF_INET)) { // IPv4 struct sockaddr_in nativeAddr4; memcpy(&nativeAddr4, cursor->ifa_addr, sizeof(nativeAddr4)); if (strcmp(cursor->ifa_name, iface) == 0) { // Name match nativeAddr4.sin_port = htons(port); addr4 = [NSMutableData dataWithBytes:&nativeAddr4 length:sizeof(nativeAddr4)]; } else { char ip[INET_ADDRSTRLEN]; const char *conversion = inet_ntop(AF_INET, &nativeAddr4.sin_addr, ip, sizeof(ip)); if ((conversion != NULL) && (strcmp(ip, iface) == 0)) { // IP match nativeAddr4.sin_port = htons(port); addr4 = [NSMutableData dataWithBytes:&nativeAddr4 length:sizeof(nativeAddr4)]; } } } else if ((addr6 == nil) && (cursor->ifa_addr->sa_family == AF_INET6)) { // IPv6 struct sockaddr_in6 nativeAddr6; memcpy(&nativeAddr6, cursor->ifa_addr, sizeof(nativeAddr6)); if (strcmp(cursor->ifa_name, iface) == 0) { // Name match nativeAddr6.sin6_port = htons(port); addr6 = [NSMutableData dataWithBytes:&nativeAddr6 length:sizeof(nativeAddr6)]; } else { char ip[INET6_ADDRSTRLEN]; const char *conversion = inet_ntop(AF_INET6, &nativeAddr6.sin6_addr, ip, sizeof(ip)); if ((conversion != NULL) && (strcmp(ip, iface) == 0)) { // IP match nativeAddr6.sin6_port = htons(port); addr6 = [NSMutableData dataWithBytes:&nativeAddr6 length:sizeof(nativeAddr6)]; } } } cursor = cursor->ifa_next; } freeifaddrs(addrs); } } if (interfaceAddr4Ptr) *interfaceAddr4Ptr = addr4; if (interfaceAddr6Ptr) *interfaceAddr6Ptr = addr6; } - (NSData *)getInterfaceAddressFromUrl:(NSURL *)url { NSString *path = url.path; if (path.length == 0) { return nil; } struct sockaddr_un nativeAddr; nativeAddr.sun_family = AF_UNIX; strlcpy(nativeAddr.sun_path, path.fileSystemRepresentation, sizeof(nativeAddr.sun_path)); nativeAddr.sun_len = (unsigned char)SUN_LEN(&nativeAddr); NSData *interface = [NSData dataWithBytes:&nativeAddr length:sizeof(struct sockaddr_un)]; return interface; } - (void)setupReadAndWriteSourcesForNewlyConnectedSocket:(int)socketFD { readSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_READ, socketFD, 0, socketQueue); writeSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_WRITE, socketFD, 0, socketQueue); // Setup event handlers __weak GCDAsyncSocket *weakSelf = self; dispatch_source_set_event_handler(readSource, ^{ @autoreleasepool { #pragma clang diagnostic push #pragma clang diagnostic warning "-Wimplicit-retain-self" __strong GCDAsyncSocket *strongSelf = weakSelf; if (strongSelf == nil) return_from_block; LogVerbose(@"readEventBlock"); strongSelf->socketFDBytesAvailable = dispatch_source_get_data(strongSelf->readSource); LogVerbose(@"socketFDBytesAvailable: %lu", strongSelf->socketFDBytesAvailable); if (strongSelf->socketFDBytesAvailable > 0) [strongSelf doReadData]; else [strongSelf doReadEOF]; #pragma clang diagnostic pop }}); dispatch_source_set_event_handler(writeSource, ^{ @autoreleasepool { #pragma clang diagnostic push #pragma clang diagnostic warning "-Wimplicit-retain-self" __strong GCDAsyncSocket *strongSelf = weakSelf; if (strongSelf == nil) return_from_block; LogVerbose(@"writeEventBlock"); strongSelf->flags |= kSocketCanAcceptBytes; [strongSelf doWriteData]; #pragma clang diagnostic pop }}); // Setup cancel handlers __block int socketFDRefCount = 2; #if !OS_OBJECT_USE_OBJC dispatch_source_t theReadSource = readSource; dispatch_source_t theWriteSource = writeSource; #endif dispatch_source_set_cancel_handler(readSource, ^{ #pragma clang diagnostic push #pragma clang diagnostic warning "-Wimplicit-retain-self" LogVerbose(@"readCancelBlock"); #if !OS_OBJECT_USE_OBJC LogVerbose(@"dispatch_release(readSource)"); dispatch_release(theReadSource); #endif if (--socketFDRefCount == 0) { LogVerbose(@"close(socketFD)"); close(socketFD); } #pragma clang diagnostic pop }); dispatch_source_set_cancel_handler(writeSource, ^{ #pragma clang diagnostic push #pragma clang diagnostic warning "-Wimplicit-retain-self" LogVerbose(@"writeCancelBlock"); #if !OS_OBJECT_USE_OBJC LogVerbose(@"dispatch_release(writeSource)"); dispatch_release(theWriteSource); #endif if (--socketFDRefCount == 0) { LogVerbose(@"close(socketFD)"); close(socketFD); } #pragma clang diagnostic pop }); // We will not be able to read until data arrives. // But we should be able to write immediately. socketFDBytesAvailable = 0; flags &= ~kReadSourceSuspended; LogVerbose(@"dispatch_resume(readSource)"); dispatch_resume(readSource); flags |= kSocketCanAcceptBytes; flags |= kWriteSourceSuspended; } - (BOOL)usingCFStreamForTLS { #if TARGET_OS_IPHONE if ((flags & kSocketSecure) && (flags & kUsingCFStreamForTLS)) { // The startTLS method was given the GCDAsyncSocketUseCFStreamForTLS flag. return YES; } #endif return NO; } - (BOOL)usingSecureTransportForTLS { // Invoking this method is equivalent to ![self usingCFStreamForTLS] (just more readable) #if TARGET_OS_IPHONE if ((flags & kSocketSecure) && (flags & kUsingCFStreamForTLS)) { // The startTLS method was given the GCDAsyncSocketUseCFStreamForTLS flag. return NO; } #endif return YES; } - (void)suspendReadSource { if (!(flags & kReadSourceSuspended)) { LogVerbose(@"dispatch_suspend(readSource)"); dispatch_suspend(readSource); flags |= kReadSourceSuspended; } } - (void)resumeReadSource { if (flags & kReadSourceSuspended) { LogVerbose(@"dispatch_resume(readSource)"); dispatch_resume(readSource); flags &= ~kReadSourceSuspended; } } - (void)suspendWriteSource { if (!(flags & kWriteSourceSuspended)) { LogVerbose(@"dispatch_suspend(writeSource)"); dispatch_suspend(writeSource); flags |= kWriteSourceSuspended; } } - (void)resumeWriteSource { if (flags & kWriteSourceSuspended) { LogVerbose(@"dispatch_resume(writeSource)"); dispatch_resume(writeSource); flags &= ~kWriteSourceSuspended; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #pragma mark Reading //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - (void)readDataWithTimeout:(NSTimeInterval)timeout tag:(long)tag { [self readDataWithTimeout:timeout buffer:nil bufferOffset:0 maxLength:0 tag:tag]; } - (void)readDataWithTimeout:(NSTimeInterval)timeout buffer:(NSMutableData *)buffer bufferOffset:(NSUInteger)offset tag:(long)tag { [self readDataWithTimeout:timeout buffer:buffer bufferOffset:offset maxLength:0 tag:tag]; } - (void)readDataWithTimeout:(NSTimeInterval)timeout buffer:(NSMutableData *)buffer bufferOffset:(NSUInteger)offset maxLength:(NSUInteger)length tag:(long)tag { if (offset > [buffer length]) { LogWarn(@"Cannot read: offset > [buffer length]"); return; } GCDAsyncReadPacket *packet = [[GCDAsyncReadPacket alloc] initWithData:buffer startOffset:offset maxLength:length timeout:timeout readLength:0 terminator:nil tag:tag]; dispatch_async(socketQueue, ^{ @autoreleasepool { LogTrace(); if ((self->flags & kSocketStarted) && !(self->flags & kForbidReadsWrites)) { [self->readQueue addObject:packet]; [self maybeDequeueRead]; } }}); // Do not rely on the block being run in order to release the packet, // as the queue might get released without the block completing. } - (void)readDataToLength:(NSUInteger)length withTimeout:(NSTimeInterval)timeout tag:(long)tag { [self readDataToLength:length withTimeout:timeout buffer:nil bufferOffset:0 tag:tag]; } - (void)readDataToLength:(NSUInteger)length withTimeout:(NSTimeInterval)timeout buffer:(NSMutableData *)buffer bufferOffset:(NSUInteger)offset tag:(long)tag { if (length == 0) { LogWarn(@"Cannot read: length == 0"); return; } if (offset > [buffer length]) { LogWarn(@"Cannot read: offset > [buffer length]"); return; } GCDAsyncReadPacket *packet = [[GCDAsyncReadPacket alloc] initWithData:buffer startOffset:offset maxLength:0 timeout:timeout readLength:length terminator:nil tag:tag]; dispatch_async(socketQueue, ^{ @autoreleasepool { LogTrace(); if ((self->flags & kSocketStarted) && !(self->flags & kForbidReadsWrites)) { [self->readQueue addObject:packet]; [self maybeDequeueRead]; } }}); // Do not rely on the block being run in order to release the packet, // as the queue might get released without the block completing. } - (void)readDataToData:(NSData *)data withTimeout:(NSTimeInterval)timeout tag:(long)tag { [self readDataToData:data withTimeout:timeout buffer:nil bufferOffset:0 maxLength:0 tag:tag]; } - (void)readDataToData:(NSData *)data withTimeout:(NSTimeInterval)timeout buffer:(NSMutableData *)buffer bufferOffset:(NSUInteger)offset tag:(long)tag { [self readDataToData:data withTimeout:timeout buffer:buffer bufferOffset:offset maxLength:0 tag:tag]; } - (void)readDataToData:(NSData *)data withTimeout:(NSTimeInterval)timeout maxLength:(NSUInteger)length tag:(long)tag { [self readDataToData:data withTimeout:timeout buffer:nil bufferOffset:0 maxLength:length tag:tag]; } - (void)readDataToData:(NSData *)data withTimeout:(NSTimeInterval)timeout buffer:(NSMutableData *)buffer bufferOffset:(NSUInteger)offset maxLength:(NSUInteger)maxLength tag:(long)tag { if ([data length] == 0) { LogWarn(@"Cannot read: [data length] == 0"); return; } if (offset > [buffer length]) { LogWarn(@"Cannot read: offset > [buffer length]"); return; } if (maxLength > 0 && maxLength < [data length]) { LogWarn(@"Cannot read: maxLength > 0 && maxLength < [data length]"); return; } GCDAsyncReadPacket *packet = [[GCDAsyncReadPacket alloc] initWithData:buffer startOffset:offset maxLength:maxLength timeout:timeout readLength:0 terminator:data tag:tag]; dispatch_async(socketQueue, ^{ @autoreleasepool { LogTrace(); if ((self->flags & kSocketStarted) && !(self->flags & kForbidReadsWrites)) { [self->readQueue addObject:packet]; [self maybeDequeueRead]; } }}); // Do not rely on the block being run in order to release the packet, // as the queue might get released without the block completing. } - (float)progressOfReadReturningTag:(long *)tagPtr bytesDone:(NSUInteger *)donePtr total:(NSUInteger *)totalPtr { __block float result = 0.0F; dispatch_block_t block = ^{ if (!self->currentRead || ![self->currentRead isKindOfClass:[GCDAsyncReadPacket class]]) { // We're not reading anything right now. if (tagPtr != NULL) *tagPtr = 0; if (donePtr != NULL) *donePtr = 0; if (totalPtr != NULL) *totalPtr = 0; result = NAN; } else { // It's only possible to know the progress of our read if we're reading to a certain length. // If we're reading to data, we of course have no idea when the data will arrive. // If we're reading to timeout, then we have no idea when the next chunk of data will arrive. NSUInteger done = self->currentRead->bytesDone; NSUInteger total = self->currentRead->readLength; if (tagPtr != NULL) *tagPtr = self->currentRead->tag; if (donePtr != NULL) *donePtr = done; if (totalPtr != NULL) *totalPtr = total; if (total > 0) result = (float)done / (float)total; else result = 1.0F; } }; if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) block(); else dispatch_sync(socketQueue, block); return result; } /** * This method starts a new read, if needed. * * It is called when: * - a user requests a read * - after a read request has finished (to handle the next request) * - immediately after the socket opens to handle any pending requests * * This method also handles auto-disconnect post read/write completion. **/ - (void)maybeDequeueRead { LogTrace(); NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); // If we're not currently processing a read AND we have an available read stream if ((currentRead == nil) && (flags & kConnected)) { if ([readQueue count] > 0) { // Dequeue the next object in the write queue currentRead = [readQueue objectAtIndex:0]; [readQueue removeObjectAtIndex:0]; if ([currentRead isKindOfClass:[GCDAsyncSpecialPacket class]]) { LogVerbose(@"Dequeued GCDAsyncSpecialPacket"); // Attempt to start TLS flags |= kStartingReadTLS; // This method won't do anything unless both kStartingReadTLS and kStartingWriteTLS are set [self maybeStartTLS]; } else { LogVerbose(@"Dequeued GCDAsyncReadPacket"); // Setup read timer (if needed) [self setupReadTimerWithTimeout:currentRead->timeout]; // Immediately read, if possible [self doReadData]; } } else if (flags & kDisconnectAfterReads) { if (flags & kDisconnectAfterWrites) { if (([writeQueue count] == 0) && (currentWrite == nil)) { [self closeWithError:nil]; } } else { [self closeWithError:nil]; } } else if (flags & kSocketSecure) { [self flushSSLBuffers]; // Edge case: // // We just drained all data from the ssl buffers, // and all known data from the socket (socketFDBytesAvailable). // // If we didn't get any data from this process, // then we may have reached the end of the TCP stream. // // Be sure callbacks are enabled so we're notified about a disconnection. if ([preBuffer availableBytes] == 0) { if ([self usingCFStreamForTLS]) { // Callbacks never disabled } else { [self resumeReadSource]; } } } } } - (void)flushSSLBuffers { LogTrace(); NSAssert((flags & kSocketSecure), @"Cannot flush ssl buffers on non-secure socket"); if ([preBuffer availableBytes] > 0) { // Only flush the ssl buffers if the prebuffer is empty. // This is to avoid growing the prebuffer inifinitely large. return; } #if TARGET_OS_IPHONE if ([self usingCFStreamForTLS]) { if ((flags & kSecureSocketHasBytesAvailable) && CFReadStreamHasBytesAvailable(readStream)) { LogVerbose(@"%@ - Flushing ssl buffers into prebuffer...", THIS_METHOD); CFIndex defaultBytesToRead = (1024 * 4); [preBuffer ensureCapacityForWrite:defaultBytesToRead]; uint8_t *buffer = [preBuffer writeBuffer]; CFIndex result = CFReadStreamRead(readStream, buffer, defaultBytesToRead); LogVerbose(@"%@ - CFReadStreamRead(): result = %i", THIS_METHOD, (int)result); if (result > 0) { [preBuffer didWrite:result]; } flags &= ~kSecureSocketHasBytesAvailable; } return; } #endif __block NSUInteger estimatedBytesAvailable = 0; dispatch_block_t updateEstimatedBytesAvailable = ^{ // Figure out if there is any data available to be read // // socketFDBytesAvailable <- Number of encrypted bytes we haven't read from the bsd socket // [sslPreBuffer availableBytes] <- Number of encrypted bytes we've buffered from bsd socket // sslInternalBufSize <- Number of decrypted bytes SecureTransport has buffered // // We call the variable "estimated" because we don't know how many decrypted bytes we'll get // from the encrypted bytes in the sslPreBuffer. // However, we do know this is an upper bound on the estimation. estimatedBytesAvailable = self->socketFDBytesAvailable + [self->sslPreBuffer availableBytes]; size_t sslInternalBufSize = 0; SSLGetBufferedReadSize(self->sslContext, &sslInternalBufSize); estimatedBytesAvailable += sslInternalBufSize; }; updateEstimatedBytesAvailable(); if (estimatedBytesAvailable > 0) { LogVerbose(@"%@ - Flushing ssl buffers into prebuffer...", THIS_METHOD); BOOL done = NO; do { LogVerbose(@"%@ - estimatedBytesAvailable = %lu", THIS_METHOD, (unsigned long)estimatedBytesAvailable); // Make sure there's enough room in the prebuffer [preBuffer ensureCapacityForWrite:estimatedBytesAvailable]; // Read data into prebuffer uint8_t *buffer = [preBuffer writeBuffer]; size_t bytesRead = 0; OSStatus result = SSLRead(sslContext, buffer, (size_t)estimatedBytesAvailable, &bytesRead); LogVerbose(@"%@ - read from secure socket = %u", THIS_METHOD, (unsigned)bytesRead); if (bytesRead > 0) { [preBuffer didWrite:bytesRead]; } LogVerbose(@"%@ - prebuffer.length = %zu", THIS_METHOD, [preBuffer availableBytes]); if (result != noErr) { done = YES; } else { updateEstimatedBytesAvailable(); } } while (!done && estimatedBytesAvailable > 0); } } - (void)doReadData { LogTrace(); // This method is called on the socketQueue. // It might be called directly, or via the readSource when data is available to be read. if ((currentRead == nil) || (flags & kReadsPaused)) { LogVerbose(@"No currentRead or kReadsPaused"); // Unable to read at this time if (flags & kSocketSecure) { // Here's the situation: // // We have an established secure connection. // There may not be a currentRead, but there might be encrypted data sitting around for us. // When the user does get around to issuing a read, that encrypted data will need to be decrypted. // // So why make the user wait? // We might as well get a head start on decrypting some data now. // // The other reason we do this has to do with detecting a socket disconnection. // The SSL/TLS protocol has it's own disconnection handshake. // So when a secure socket is closed, a "goodbye" packet comes across the wire. // We want to make sure we read the "goodbye" packet so we can properly detect the TCP disconnection. [self flushSSLBuffers]; } if ([self usingCFStreamForTLS]) { // CFReadStream only fires once when there is available data. // It won't fire again until we've invoked CFReadStreamRead. } else { // If the readSource is firing, we need to pause it // or else it will continue to fire over and over again. // // If the readSource is not firing, // we want it to continue monitoring the socket. if (socketFDBytesAvailable > 0) { [self suspendReadSource]; } } return; } BOOL hasBytesAvailable = NO; unsigned long estimatedBytesAvailable = 0; if ([self usingCFStreamForTLS]) { #if TARGET_OS_IPHONE // Requested CFStream, rather than SecureTransport, for TLS (via GCDAsyncSocketUseCFStreamForTLS) estimatedBytesAvailable = 0; if ((flags & kSecureSocketHasBytesAvailable) && CFReadStreamHasBytesAvailable(readStream)) hasBytesAvailable = YES; else hasBytesAvailable = NO; #endif } else { estimatedBytesAvailable = socketFDBytesAvailable; if (flags & kSocketSecure) { // There are 2 buffers to be aware of here. // // We are using SecureTransport, a TLS/SSL security layer which sits atop TCP. // We issue a read to the SecureTranport API, which in turn issues a read to our SSLReadFunction. // Our SSLReadFunction then reads from the BSD socket and returns the encrypted data to SecureTransport. // SecureTransport then decrypts the data, and finally returns the decrypted data back to us. // // The first buffer is one we create. // SecureTransport often requests small amounts of data. // This has to do with the encypted packets that are coming across the TCP stream. // But it's non-optimal to do a bunch of small reads from the BSD socket. // So our SSLReadFunction reads all available data from the socket (optimizing the sys call) // and may store excess in the sslPreBuffer. estimatedBytesAvailable += [sslPreBuffer availableBytes]; // The second buffer is within SecureTransport. // As mentioned earlier, there are encrypted packets coming across the TCP stream. // SecureTransport needs the entire packet to decrypt it. // But if the entire packet produces X bytes of decrypted data, // and we only asked SecureTransport for X/2 bytes of data, // it must store the extra X/2 bytes of decrypted data for the next read. // // The SSLGetBufferedReadSize function will tell us the size of this internal buffer. // From the documentation: // // "This function does not block or cause any low-level read operations to occur." size_t sslInternalBufSize = 0; SSLGetBufferedReadSize(sslContext, &sslInternalBufSize); estimatedBytesAvailable += sslInternalBufSize; } hasBytesAvailable = (estimatedBytesAvailable > 0); } if ((hasBytesAvailable == NO) && ([preBuffer availableBytes] == 0)) { LogVerbose(@"No data available to read..."); // No data available to read. if (![self usingCFStreamForTLS]) { // Need to wait for readSource to fire and notify us of // available data in the socket's internal read buffer. [self resumeReadSource]; } return; } if (flags & kStartingReadTLS) { LogVerbose(@"Waiting for SSL/TLS handshake to complete"); // The readQueue is waiting for SSL/TLS handshake to complete. if (flags & kStartingWriteTLS) { if ([self usingSecureTransportForTLS] && lastSSLHandshakeError == errSSLWouldBlock) { // We are in the process of a SSL Handshake. // We were waiting for incoming data which has just arrived. [self ssl_continueSSLHandshake]; } } else { // We are still waiting for the writeQueue to drain and start the SSL/TLS process. // We now know data is available to read. if (![self usingCFStreamForTLS]) { // Suspend the read source or else it will continue to fire nonstop. [self suspendReadSource]; } } return; } BOOL done = NO; // Completed read operation NSError *error = nil; // Error occurred NSUInteger totalBytesReadForCurrentRead = 0; // // STEP 1 - READ FROM PREBUFFER // if ([preBuffer availableBytes] > 0) { // There are 3 types of read packets: // // 1) Read all available data. // 2) Read a specific length of data. // 3) Read up to a particular terminator. NSUInteger bytesToCopy; if (currentRead->term != nil) { // Read type #3 - read up to a terminator bytesToCopy = [currentRead readLengthForTermWithPreBuffer:preBuffer found:&done]; } else { // Read type #1 or #2 bytesToCopy = [currentRead readLengthForNonTermWithHint:[preBuffer availableBytes]]; } // Make sure we have enough room in the buffer for our read. [currentRead ensureCapacityForAdditionalDataOfLength:bytesToCopy]; // Copy bytes from prebuffer into packet buffer uint8_t *buffer = (uint8_t *)[currentRead->buffer mutableBytes] + currentRead->startOffset + currentRead->bytesDone; memcpy(buffer, [preBuffer readBuffer], bytesToCopy); // Remove the copied bytes from the preBuffer [preBuffer didRead:bytesToCopy]; LogVerbose(@"copied(%lu) preBufferLength(%zu)", (unsigned long)bytesToCopy, [preBuffer availableBytes]); // Update totals currentRead->bytesDone += bytesToCopy; totalBytesReadForCurrentRead += bytesToCopy; // Check to see if the read operation is done if (currentRead->readLength > 0) { // Read type #2 - read a specific length of data done = (currentRead->bytesDone == currentRead->readLength); } else if (currentRead->term != nil) { // Read type #3 - read up to a terminator // Our 'done' variable was updated via the readLengthForTermWithPreBuffer:found: method if (!done && currentRead->maxLength > 0) { // We're not done and there's a set maxLength. // Have we reached that maxLength yet? if (currentRead->bytesDone >= currentRead->maxLength) { error = [self readMaxedOutError]; } } } else { // Read type #1 - read all available data // // We're done as soon as // - we've read all available data (in prebuffer and socket) // - we've read the maxLength of read packet. done = ((currentRead->maxLength > 0) && (currentRead->bytesDone == currentRead->maxLength)); } } // // STEP 2 - READ FROM SOCKET // BOOL socketEOF = (flags & kSocketHasReadEOF) ? YES : NO; // Nothing more to read via socket (end of file) BOOL waiting = !done && !error && !socketEOF && !hasBytesAvailable; // Ran out of data, waiting for more if (!done && !error && !socketEOF && hasBytesAvailable) { NSAssert(([preBuffer availableBytes] == 0), @"Invalid logic"); BOOL readIntoPreBuffer = NO; uint8_t *buffer = NULL; size_t bytesRead = 0; if (flags & kSocketSecure) { if ([self usingCFStreamForTLS]) { #if TARGET_OS_IPHONE // Using CFStream, rather than SecureTransport, for TLS NSUInteger defaultReadLength = (1024 * 32); NSUInteger bytesToRead = [currentRead optimalReadLengthWithDefault:defaultReadLength shouldPreBuffer:&readIntoPreBuffer]; // Make sure we have enough room in the buffer for our read. // // We are either reading directly into the currentRead->buffer, // or we're reading into the temporary preBuffer. if (readIntoPreBuffer) { [preBuffer ensureCapacityForWrite:bytesToRead]; buffer = [preBuffer writeBuffer]; } else { [currentRead ensureCapacityForAdditionalDataOfLength:bytesToRead]; buffer = (uint8_t *)[currentRead->buffer mutableBytes] + currentRead->startOffset + currentRead->bytesDone; } // Read data into buffer CFIndex result = CFReadStreamRead(readStream, buffer, (CFIndex)bytesToRead); LogVerbose(@"CFReadStreamRead(): result = %i", (int)result); if (result < 0) { error = (__bridge_transfer NSError *)CFReadStreamCopyError(readStream); } else if (result == 0) { socketEOF = YES; } else { waiting = YES; bytesRead = (size_t)result; } // We only know how many decrypted bytes were read. // The actual number of bytes read was likely more due to the overhead of the encryption. // So we reset our flag, and rely on the next callback to alert us of more data. flags &= ~kSecureSocketHasBytesAvailable; #endif } else { // Using SecureTransport for TLS // // We know: // - how many bytes are available on the socket // - how many encrypted bytes are sitting in the sslPreBuffer // - how many decypted bytes are sitting in the sslContext // // But we do NOT know: // - how many encypted bytes are sitting in the sslContext // // So we play the regular game of using an upper bound instead. NSUInteger defaultReadLength = (1024 * 32); if (defaultReadLength < estimatedBytesAvailable) { defaultReadLength = estimatedBytesAvailable + (1024 * 16); } NSUInteger bytesToRead = [currentRead optimalReadLengthWithDefault:defaultReadLength shouldPreBuffer:&readIntoPreBuffer]; if (bytesToRead > SIZE_MAX) { // NSUInteger may be bigger than size_t bytesToRead = SIZE_MAX; } // Make sure we have enough room in the buffer for our read. // // We are either reading directly into the currentRead->buffer, // or we're reading into the temporary preBuffer. if (readIntoPreBuffer) { [preBuffer ensureCapacityForWrite:bytesToRead]; buffer = [preBuffer writeBuffer]; } else { [currentRead ensureCapacityForAdditionalDataOfLength:bytesToRead]; buffer = (uint8_t *)[currentRead->buffer mutableBytes] + currentRead->startOffset + currentRead->bytesDone; } // The documentation from Apple states: // // "a read operation might return errSSLWouldBlock, // indicating that less data than requested was actually transferred" // // However, starting around 10.7, the function will sometimes return noErr, // even if it didn't read as much data as requested. So we need to watch out for that. OSStatus result; do { void *loop_buffer = buffer + bytesRead; size_t loop_bytesToRead = (size_t)bytesToRead - bytesRead; size_t loop_bytesRead = 0; result = SSLRead(sslContext, loop_buffer, loop_bytesToRead, &loop_bytesRead); LogVerbose(@"read from secure socket = %u", (unsigned)loop_bytesRead); bytesRead += loop_bytesRead; } while ((result == noErr) && (bytesRead < bytesToRead)); if (result != noErr) { if (result == errSSLWouldBlock) waiting = YES; else { if (result == errSSLClosedGraceful || result == errSSLClosedAbort) { // We've reached the end of the stream. // Handle this the same way we would an EOF from the socket. socketEOF = YES; sslErrCode = result; } else { error = [self sslError:result]; } } // It's possible that bytesRead > 0, even if the result was errSSLWouldBlock. // This happens when the SSLRead function is able to read some data, // but not the entire amount we requested. if (bytesRead <= 0) { bytesRead = 0; } } // Do not modify socketFDBytesAvailable. // It will be updated via the SSLReadFunction(). } } else { // Normal socket operation NSUInteger bytesToRead; // There are 3 types of read packets: // // 1) Read all available data. // 2) Read a specific length of data. // 3) Read up to a particular terminator. if (currentRead->term != nil) { // Read type #3 - read up to a terminator bytesToRead = [currentRead readLengthForTermWithHint:estimatedBytesAvailable shouldPreBuffer:&readIntoPreBuffer]; } else { // Read type #1 or #2 bytesToRead = [currentRead readLengthForNonTermWithHint:estimatedBytesAvailable]; } if (bytesToRead > SIZE_MAX) { // NSUInteger may be bigger than size_t (read param 3) bytesToRead = SIZE_MAX; } // Make sure we have enough room in the buffer for our read. // // We are either reading directly into the currentRead->buffer, // or we're reading into the temporary preBuffer. if (readIntoPreBuffer) { [preBuffer ensureCapacityForWrite:bytesToRead]; buffer = [preBuffer writeBuffer]; } else { [currentRead ensureCapacityForAdditionalDataOfLength:bytesToRead]; buffer = (uint8_t *)[currentRead->buffer mutableBytes] + currentRead->startOffset + currentRead->bytesDone; } // Read data into buffer int socketFD = (socket4FD != SOCKET_NULL) ? socket4FD : (socket6FD != SOCKET_NULL) ? socket6FD : socketUN; ssize_t result = read(socketFD, buffer, (size_t)bytesToRead); LogVerbose(@"read from socket = %i", (int)result); if (result < 0) { if (errno == EWOULDBLOCK) waiting = YES; else error = [self errorWithErrno:errno reason:@"Error in read() function"]; socketFDBytesAvailable = 0; } else if (result == 0) { socketEOF = YES; socketFDBytesAvailable = 0; } else { bytesRead = result; if (bytesRead < bytesToRead) { // The read returned less data than requested. // This means socketFDBytesAvailable was a bit off due to timing, // because we read from the socket right when the readSource event was firing. socketFDBytesAvailable = 0; } else { if (socketFDBytesAvailable <= bytesRead) socketFDBytesAvailable = 0; else socketFDBytesAvailable -= bytesRead; } if (socketFDBytesAvailable == 0) { waiting = YES; } } } if (bytesRead > 0) { // Check to see if the read operation is done if (currentRead->readLength > 0) { // Read type #2 - read a specific length of data // // Note: We should never be using a prebuffer when we're reading a specific length of data. NSAssert(readIntoPreBuffer == NO, @"Invalid logic"); currentRead->bytesDone += bytesRead; totalBytesReadForCurrentRead += bytesRead; done = (currentRead->bytesDone == currentRead->readLength); } else if (currentRead->term != nil) { // Read type #3 - read up to a terminator if (readIntoPreBuffer) { // We just read a big chunk of data into the preBuffer [preBuffer didWrite:bytesRead]; LogVerbose(@"read data into preBuffer - preBuffer.length = %zu", [preBuffer availableBytes]); // Search for the terminating sequence NSUInteger bytesToCopy = [currentRead readLengthForTermWithPreBuffer:preBuffer found:&done]; LogVerbose(@"copying %lu bytes from preBuffer", (unsigned long)bytesToCopy); // Ensure there's room on the read packet's buffer [currentRead ensureCapacityForAdditionalDataOfLength:bytesToCopy]; // Copy bytes from prebuffer into read buffer uint8_t *readBuf = (uint8_t *)[currentRead->buffer mutableBytes] + currentRead->startOffset + currentRead->bytesDone; memcpy(readBuf, [preBuffer readBuffer], bytesToCopy); // Remove the copied bytes from the prebuffer [preBuffer didRead:bytesToCopy]; LogVerbose(@"preBuffer.length = %zu", [preBuffer availableBytes]); // Update totals currentRead->bytesDone += bytesToCopy; totalBytesReadForCurrentRead += bytesToCopy; // Our 'done' variable was updated via the readLengthForTermWithPreBuffer:found: method above } else { // We just read a big chunk of data directly into the packet's buffer. // We need to move any overflow into the prebuffer. NSInteger overflow = [currentRead searchForTermAfterPreBuffering:bytesRead]; if (overflow == 0) { // Perfect match! // Every byte we read stays in the read buffer, // and the last byte we read was the last byte of the term. currentRead->bytesDone += bytesRead; totalBytesReadForCurrentRead += bytesRead; done = YES; } else if (overflow > 0) { // The term was found within the data that we read, // and there are extra bytes that extend past the end of the term. // We need to move these excess bytes out of the read packet and into the prebuffer. NSInteger underflow = bytesRead - overflow; // Copy excess data into preBuffer LogVerbose(@"copying %ld overflow bytes into preBuffer", (long)overflow); [preBuffer ensureCapacityForWrite:overflow]; uint8_t *overflowBuffer = buffer + underflow; memcpy([preBuffer writeBuffer], overflowBuffer, overflow); [preBuffer didWrite:overflow]; LogVerbose(@"preBuffer.length = %zu", [preBuffer availableBytes]); // Note: The completeCurrentRead method will trim the buffer for us. currentRead->bytesDone += underflow; totalBytesReadForCurrentRead += underflow; done = YES; } else { // The term was not found within the data that we read. currentRead->bytesDone += bytesRead; totalBytesReadForCurrentRead += bytesRead; done = NO; } } if (!done && currentRead->maxLength > 0) { // We're not done and there's a set maxLength. // Have we reached that maxLength yet? if (currentRead->bytesDone >= currentRead->maxLength) { error = [self readMaxedOutError]; } } } else { // Read type #1 - read all available data if (readIntoPreBuffer) { // We just read a chunk of data into the preBuffer [preBuffer didWrite:bytesRead]; // Now copy the data into the read packet. // // Recall that we didn't read directly into the packet's buffer to avoid // over-allocating memory since we had no clue how much data was available to be read. // // Ensure there's room on the read packet's buffer [currentRead ensureCapacityForAdditionalDataOfLength:bytesRead]; // Copy bytes from prebuffer into read buffer uint8_t *readBuf = (uint8_t *)[currentRead->buffer mutableBytes] + currentRead->startOffset + currentRead->bytesDone; memcpy(readBuf, [preBuffer readBuffer], bytesRead); // Remove the copied bytes from the prebuffer [preBuffer didRead:bytesRead]; // Update totals currentRead->bytesDone += bytesRead; totalBytesReadForCurrentRead += bytesRead; } else { currentRead->bytesDone += bytesRead; totalBytesReadForCurrentRead += bytesRead; } done = YES; } } // if (bytesRead > 0) } // if (!done && !error && !socketEOF && hasBytesAvailable) if (!done && currentRead->readLength == 0 && currentRead->term == nil) { // Read type #1 - read all available data // // We might arrive here if we read data from the prebuffer but not from the socket. done = (totalBytesReadForCurrentRead > 0); } // Check to see if we're done, or if we've made progress if (done) { [self completeCurrentRead]; if (!error && (!socketEOF || [preBuffer availableBytes] > 0)) { [self maybeDequeueRead]; } } else if (totalBytesReadForCurrentRead > 0) { // We're not done read type #2 or #3 yet, but we have read in some bytes // // We ensure that `waiting` is set in order to resume the readSource (if it is suspended). It is // possible to reach this point and `waiting` not be set, if the current read's length is // sufficiently large. In that case, we may have read to some upperbound successfully, but // that upperbound could be smaller than the desired length. waiting = YES; __strong id theDelegate = delegate; if (delegateQueue && [theDelegate respondsToSelector:@selector(socket:didReadPartialDataOfLength:tag:)]) { long theReadTag = currentRead->tag; dispatch_async(delegateQueue, ^{ @autoreleasepool { [theDelegate socket:self didReadPartialDataOfLength:totalBytesReadForCurrentRead tag:theReadTag]; }}); } } // Check for errors if (error) { [self closeWithError:error]; } else if (socketEOF) { [self doReadEOF]; } else if (waiting) { if (![self usingCFStreamForTLS]) { // Monitor the socket for readability (if we're not already doing so) [self resumeReadSource]; } } // Do not add any code here without first adding return statements in the error cases above. } - (void)doReadEOF { LogTrace(); // This method may be called more than once. // If the EOF is read while there is still data in the preBuffer, // then this method may be called continually after invocations of doReadData to see if it's time to disconnect. flags |= kSocketHasReadEOF; if (flags & kSocketSecure) { // If the SSL layer has any buffered data, flush it into the preBuffer now. [self flushSSLBuffers]; } BOOL shouldDisconnect = NO; NSError *error = nil; if ((flags & kStartingReadTLS) || (flags & kStartingWriteTLS)) { // We received an EOF during or prior to startTLS. // The SSL/TLS handshake is now impossible, so this is an unrecoverable situation. shouldDisconnect = YES; if ([self usingSecureTransportForTLS]) { error = [self sslError:errSSLClosedAbort]; } } else if (flags & kReadStreamClosed) { // The preBuffer has already been drained. // The config allows half-duplex connections. // We've previously checked the socket, and it appeared writeable. // So we marked the read stream as closed and notified the delegate. // // As per the half-duplex contract, the socket will be closed when a write fails, // or when the socket is manually closed. shouldDisconnect = NO; } else if ([preBuffer availableBytes] > 0) { LogVerbose(@"Socket reached EOF, but there is still data available in prebuffer"); // Although we won't be able to read any more data from the socket, // there is existing data that has been prebuffered that we can read. shouldDisconnect = NO; } else if (config & kAllowHalfDuplexConnection) { // We just received an EOF (end of file) from the socket's read stream. // This means the remote end of the socket (the peer we're connected to) // has explicitly stated that it will not be sending us any more data. // // Query the socket to see if it is still writeable. (Perhaps the peer will continue reading data from us) int socketFD = (socket4FD != SOCKET_NULL) ? socket4FD : (socket6FD != SOCKET_NULL) ? socket6FD : socketUN; struct pollfd pfd[1]; pfd[0].fd = socketFD; pfd[0].events = POLLOUT; pfd[0].revents = 0; poll(pfd, 1, 0); if (pfd[0].revents & POLLOUT) { // Socket appears to still be writeable shouldDisconnect = NO; flags |= kReadStreamClosed; // Notify the delegate that we're going half-duplex __strong id theDelegate = delegate; if (delegateQueue && [theDelegate respondsToSelector:@selector(socketDidCloseReadStream:)]) { dispatch_async(delegateQueue, ^{ @autoreleasepool { [theDelegate socketDidCloseReadStream:self]; }}); } } else { shouldDisconnect = YES; } } else { shouldDisconnect = YES; } if (shouldDisconnect) { if (error == nil) { if ([self usingSecureTransportForTLS]) { if (sslErrCode != noErr && sslErrCode != errSSLClosedGraceful) { error = [self sslError:sslErrCode]; } else { error = [self connectionClosedError]; } } else { error = [self connectionClosedError]; } } [self closeWithError:error]; } else { if (![self usingCFStreamForTLS]) { // Suspend the read source (if needed) [self suspendReadSource]; } } } - (void)completeCurrentRead { LogTrace(); NSAssert(currentRead, @"Trying to complete current read when there is no current read."); NSData *result = nil; if (currentRead->bufferOwner) { // We created the buffer on behalf of the user. // Trim our buffer to be the proper size. [currentRead->buffer setLength:currentRead->bytesDone]; result = currentRead->buffer; } else { // We did NOT create the buffer. // The buffer is owned by the caller. // Only trim the buffer if we had to increase its size. if ([currentRead->buffer length] > currentRead->originalBufferLength) { NSUInteger readSize = currentRead->startOffset + currentRead->bytesDone; NSUInteger origSize = currentRead->originalBufferLength; NSUInteger buffSize = MAX(readSize, origSize); [currentRead->buffer setLength:buffSize]; } uint8_t *buffer = (uint8_t *)[currentRead->buffer mutableBytes] + currentRead->startOffset; result = [NSData dataWithBytesNoCopy:buffer length:currentRead->bytesDone freeWhenDone:NO]; } __strong id theDelegate = delegate; if (delegateQueue && [theDelegate respondsToSelector:@selector(socket:didReadData:withTag:)]) { GCDAsyncReadPacket *theRead = currentRead; // Ensure currentRead retained since result may not own buffer dispatch_async(delegateQueue, ^{ @autoreleasepool { [theDelegate socket:self didReadData:result withTag:theRead->tag]; }}); } [self endCurrentRead]; } - (void)endCurrentRead { if (readTimer) { dispatch_source_cancel(readTimer); readTimer = NULL; } currentRead = nil; } - (void)setupReadTimerWithTimeout:(NSTimeInterval)timeout { if (timeout >= 0.0) { readTimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, socketQueue); __weak GCDAsyncSocket *weakSelf = self; dispatch_source_set_event_handler(readTimer, ^{ @autoreleasepool { #pragma clang diagnostic push #pragma clang diagnostic warning "-Wimplicit-retain-self" __strong GCDAsyncSocket *strongSelf = weakSelf; if (strongSelf == nil) return_from_block; [strongSelf doReadTimeout]; #pragma clang diagnostic pop }}); #if !OS_OBJECT_USE_OBJC dispatch_source_t theReadTimer = readTimer; dispatch_source_set_cancel_handler(readTimer, ^{ #pragma clang diagnostic push #pragma clang diagnostic warning "-Wimplicit-retain-self" LogVerbose(@"dispatch_release(readTimer)"); dispatch_release(theReadTimer); #pragma clang diagnostic pop }); #endif dispatch_time_t tt = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(timeout * NSEC_PER_SEC)); dispatch_source_set_timer(readTimer, tt, DISPATCH_TIME_FOREVER, 0); dispatch_resume(readTimer); } } - (void)doReadTimeout { // This is a little bit tricky. // Ideally we'd like to synchronously query the delegate about a timeout extension. // But if we do so synchronously we risk a possible deadlock. // So instead we have to do so asynchronously, and callback to ourselves from within the delegate block. flags |= kReadsPaused; __strong id theDelegate = delegate; if (delegateQueue && [theDelegate respondsToSelector:@selector(socket:shouldTimeoutReadWithTag:elapsed:bytesDone:)]) { GCDAsyncReadPacket *theRead = currentRead; dispatch_async(delegateQueue, ^{ @autoreleasepool { NSTimeInterval timeoutExtension = 0.0; timeoutExtension = [theDelegate socket:self shouldTimeoutReadWithTag:theRead->tag elapsed:theRead->timeout bytesDone:theRead->bytesDone]; dispatch_async(self->socketQueue, ^{ @autoreleasepool { [self doReadTimeoutWithExtension:timeoutExtension]; }}); }}); } else { [self doReadTimeoutWithExtension:0.0]; } } - (void)doReadTimeoutWithExtension:(NSTimeInterval)timeoutExtension { if (currentRead) { if (timeoutExtension > 0.0) { currentRead->timeout += timeoutExtension; // Reschedule the timer dispatch_time_t tt = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(timeoutExtension * NSEC_PER_SEC)); dispatch_source_set_timer(readTimer, tt, DISPATCH_TIME_FOREVER, 0); // Unpause reads, and continue flags &= ~kReadsPaused; [self doReadData]; } else { LogVerbose(@"ReadTimeout"); [self closeWithError:[self readTimeoutError]]; } } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #pragma mark Writing //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - (void)writeData:(NSData *)data withTimeout:(NSTimeInterval)timeout tag:(long)tag { if ([data length] == 0) return; GCDAsyncWritePacket *packet = [[GCDAsyncWritePacket alloc] initWithData:data timeout:timeout tag:tag]; dispatch_async(socketQueue, ^{ @autoreleasepool { LogTrace(); if ((self->flags & kSocketStarted) && !(self->flags & kForbidReadsWrites)) { [self->writeQueue addObject:packet]; [self maybeDequeueWrite]; } }}); // Do not rely on the block being run in order to release the packet, // as the queue might get released without the block completing. } - (float)progressOfWriteReturningTag:(long *)tagPtr bytesDone:(NSUInteger *)donePtr total:(NSUInteger *)totalPtr { __block float result = 0.0F; dispatch_block_t block = ^{ if (!self->currentWrite || ![self->currentWrite isKindOfClass:[GCDAsyncWritePacket class]]) { // We're not writing anything right now. if (tagPtr != NULL) *tagPtr = 0; if (donePtr != NULL) *donePtr = 0; if (totalPtr != NULL) *totalPtr = 0; result = NAN; } else { NSUInteger done = self->currentWrite->bytesDone; NSUInteger total = [self->currentWrite->buffer length]; if (tagPtr != NULL) *tagPtr = self->currentWrite->tag; if (donePtr != NULL) *donePtr = done; if (totalPtr != NULL) *totalPtr = total; result = (float)done / (float)total; } }; if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) block(); else dispatch_sync(socketQueue, block); return result; } /** * Conditionally starts a new write. * * It is called when: * - a user requests a write * - after a write request has finished (to handle the next request) * - immediately after the socket opens to handle any pending requests * * This method also handles auto-disconnect post read/write completion. **/ - (void)maybeDequeueWrite { LogTrace(); NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); // If we're not currently processing a write AND we have an available write stream if ((currentWrite == nil) && (flags & kConnected)) { if ([writeQueue count] > 0) { // Dequeue the next object in the write queue currentWrite = [writeQueue objectAtIndex:0]; [writeQueue removeObjectAtIndex:0]; if ([currentWrite isKindOfClass:[GCDAsyncSpecialPacket class]]) { LogVerbose(@"Dequeued GCDAsyncSpecialPacket"); // Attempt to start TLS flags |= kStartingWriteTLS; // This method won't do anything unless both kStartingReadTLS and kStartingWriteTLS are set [self maybeStartTLS]; } else { LogVerbose(@"Dequeued GCDAsyncWritePacket"); // Setup write timer (if needed) [self setupWriteTimerWithTimeout:currentWrite->timeout]; // Immediately write, if possible [self doWriteData]; } } else if (flags & kDisconnectAfterWrites) { if (flags & kDisconnectAfterReads) { if (([readQueue count] == 0) && (currentRead == nil)) { [self closeWithError:nil]; } } else { [self closeWithError:nil]; } } } } - (void)doWriteData { LogTrace(); // This method is called by the writeSource via the socketQueue if ((currentWrite == nil) || (flags & kWritesPaused)) { LogVerbose(@"No currentWrite or kWritesPaused"); // Unable to write at this time if ([self usingCFStreamForTLS]) { // CFWriteStream only fires once when there is available data. // It won't fire again until we've invoked CFWriteStreamWrite. } else { // If the writeSource is firing, we need to pause it // or else it will continue to fire over and over again. if (flags & kSocketCanAcceptBytes) { [self suspendWriteSource]; } } return; } if (!(flags & kSocketCanAcceptBytes)) { LogVerbose(@"No space available to write..."); // No space available to write. if (![self usingCFStreamForTLS]) { // Need to wait for writeSource to fire and notify us of // available space in the socket's internal write buffer. [self resumeWriteSource]; } return; } if (flags & kStartingWriteTLS) { LogVerbose(@"Waiting for SSL/TLS handshake to complete"); // The writeQueue is waiting for SSL/TLS handshake to complete. if (flags & kStartingReadTLS) { if ([self usingSecureTransportForTLS] && lastSSLHandshakeError == errSSLWouldBlock) { // We are in the process of a SSL Handshake. // We were waiting for available space in the socket's internal OS buffer to continue writing. [self ssl_continueSSLHandshake]; } } else { // We are still waiting for the readQueue to drain and start the SSL/TLS process. // We now know we can write to the socket. if (![self usingCFStreamForTLS]) { // Suspend the write source or else it will continue to fire nonstop. [self suspendWriteSource]; } } return; } // Note: This method is not called if currentWrite is a GCDAsyncSpecialPacket (startTLS packet) BOOL waiting = NO; NSError *error = nil; size_t bytesWritten = 0; if (flags & kSocketSecure) { if ([self usingCFStreamForTLS]) { #if TARGET_OS_IPHONE // // Writing data using CFStream (over internal TLS) // const uint8_t *buffer = (const uint8_t *)[currentWrite->buffer bytes] + currentWrite->bytesDone; NSUInteger bytesToWrite = [currentWrite->buffer length] - currentWrite->bytesDone; if (bytesToWrite > SIZE_MAX) // NSUInteger may be bigger than size_t (write param 3) { bytesToWrite = SIZE_MAX; } CFIndex result = CFWriteStreamWrite(writeStream, buffer, (CFIndex)bytesToWrite); LogVerbose(@"CFWriteStreamWrite(%lu) = %li", (unsigned long)bytesToWrite, result); if (result < 0) { error = (__bridge_transfer NSError *)CFWriteStreamCopyError(writeStream); } else { bytesWritten = (size_t)result; // We always set waiting to true in this scenario. // CFStream may have altered our underlying socket to non-blocking. // Thus if we attempt to write without a callback, we may end up blocking our queue. waiting = YES; } #endif } else { // We're going to use the SSLWrite function. // // OSStatus SSLWrite(SSLContextRef context, const void *data, size_t dataLength, size_t *processed) // // Parameters: // context - An SSL session context reference. // data - A pointer to the buffer of data to write. // dataLength - The amount, in bytes, of data to write. // processed - On return, the length, in bytes, of the data actually written. // // It sounds pretty straight-forward, // but there are a few caveats you should be aware of. // // The SSLWrite method operates in a non-obvious (and rather annoying) manner. // According to the documentation: // // Because you may configure the underlying connection to operate in a non-blocking manner, // a write operation might return errSSLWouldBlock, indicating that less data than requested // was actually transferred. In this case, you should repeat the call to SSLWrite until some // other result is returned. // // This sounds perfect, but when our SSLWriteFunction returns errSSLWouldBlock, // then the SSLWrite method returns (with the proper errSSLWouldBlock return value), // but it sets processed to dataLength !! // // In other words, if the SSLWrite function doesn't completely write all the data we tell it to, // then it doesn't tell us how many bytes were actually written. So, for example, if we tell it to // write 256 bytes then it might actually write 128 bytes, but then report 0 bytes written. // // You might be wondering: // If the SSLWrite function doesn't tell us how many bytes were written, // then how in the world are we supposed to update our parameters (buffer & bytesToWrite) // for the next time we invoke SSLWrite? // // The answer is that SSLWrite cached all the data we told it to write, // and it will push out that data next time we call SSLWrite. // If we call SSLWrite with new data, it will push out the cached data first, and then the new data. // If we call SSLWrite with empty data, then it will simply push out the cached data. // // For this purpose we're going to break large writes into a series of smaller writes. // This allows us to report progress back to the delegate. OSStatus result; BOOL hasCachedDataToWrite = (sslWriteCachedLength > 0); BOOL hasNewDataToWrite = YES; if (hasCachedDataToWrite) { size_t processed = 0; result = SSLWrite(sslContext, NULL, 0, &processed); if (result == noErr) { bytesWritten = sslWriteCachedLength; sslWriteCachedLength = 0; if ([currentWrite->buffer length] == (currentWrite->bytesDone + bytesWritten)) { // We've written all data for the current write. hasNewDataToWrite = NO; } } else { if (result == errSSLWouldBlock) { waiting = YES; } else { error = [self sslError:result]; } // Can't write any new data since we were unable to write the cached data. hasNewDataToWrite = NO; } } if (hasNewDataToWrite) { const uint8_t *buffer = (const uint8_t *)[currentWrite->buffer bytes] + currentWrite->bytesDone + bytesWritten; NSUInteger bytesToWrite = [currentWrite->buffer length] - currentWrite->bytesDone - bytesWritten; if (bytesToWrite > SIZE_MAX) // NSUInteger may be bigger than size_t (write param 3) { bytesToWrite = SIZE_MAX; } size_t bytesRemaining = bytesToWrite; BOOL keepLooping = YES; while (keepLooping) { const size_t sslMaxBytesToWrite = 32768; size_t sslBytesToWrite = MIN(bytesRemaining, sslMaxBytesToWrite); size_t sslBytesWritten = 0; result = SSLWrite(sslContext, buffer, sslBytesToWrite, &sslBytesWritten); if (result == noErr) { buffer += sslBytesWritten; bytesWritten += sslBytesWritten; bytesRemaining -= sslBytesWritten; keepLooping = (bytesRemaining > 0); } else { if (result == errSSLWouldBlock) { waiting = YES; sslWriteCachedLength = sslBytesToWrite; } else { error = [self sslError:result]; } keepLooping = NO; } } // while (keepLooping) } // if (hasNewDataToWrite) } } else { // // Writing data directly over raw socket // int socketFD = (socket4FD != SOCKET_NULL) ? socket4FD : (socket6FD != SOCKET_NULL) ? socket6FD : socketUN; const uint8_t *buffer = (const uint8_t *)[currentWrite->buffer bytes] + currentWrite->bytesDone; NSUInteger bytesToWrite = [currentWrite->buffer length] - currentWrite->bytesDone; if (bytesToWrite > SIZE_MAX) // NSUInteger may be bigger than size_t (write param 3) { bytesToWrite = SIZE_MAX; } ssize_t result = write(socketFD, buffer, (size_t)bytesToWrite); LogVerbose(@"wrote to socket = %zd", result); // Check results if (result < 0) { if (errno == EWOULDBLOCK) { waiting = YES; } else { error = [self errorWithErrno:errno reason:@"Error in write() function"]; } } else { bytesWritten = result; } } // We're done with our writing. // If we explictly ran into a situation where the socket told us there was no room in the buffer, // then we immediately resume listening for notifications. // // We must do this before we dequeue another write, // as that may in turn invoke this method again. // // Note that if CFStream is involved, it may have maliciously put our socket in blocking mode. if (waiting) { flags &= ~kSocketCanAcceptBytes; if (![self usingCFStreamForTLS]) { [self resumeWriteSource]; } } // Check our results BOOL done = NO; if (bytesWritten > 0) { // Update total amount read for the current write currentWrite->bytesDone += bytesWritten; LogVerbose(@"currentWrite->bytesDone = %lu", (unsigned long)currentWrite->bytesDone); // Is packet done? done = (currentWrite->bytesDone == [currentWrite->buffer length]); } if (done) { [self completeCurrentWrite]; if (!error) { dispatch_async(socketQueue, ^{ @autoreleasepool{ [self maybeDequeueWrite]; }}); } } else { // We were unable to finish writing the data, // so we're waiting for another callback to notify us of available space in the lower-level output buffer. if (!waiting && !error) { // This would be the case if our write was able to accept some data, but not all of it. flags &= ~kSocketCanAcceptBytes; if (![self usingCFStreamForTLS]) { [self resumeWriteSource]; } } if (bytesWritten > 0) { // We're not done with the entire write, but we have written some bytes __strong id theDelegate = delegate; if (delegateQueue && [theDelegate respondsToSelector:@selector(socket:didWritePartialDataOfLength:tag:)]) { long theWriteTag = currentWrite->tag; dispatch_async(delegateQueue, ^{ @autoreleasepool { [theDelegate socket:self didWritePartialDataOfLength:bytesWritten tag:theWriteTag]; }}); } } } // Check for errors if (error) { [self closeWithError:[self errorWithErrno:errno reason:@"Error in write() function"]]; } // Do not add any code here without first adding a return statement in the error case above. } - (void)completeCurrentWrite { LogTrace(); NSAssert(currentWrite, @"Trying to complete current write when there is no current write."); __strong id theDelegate = delegate; if (delegateQueue && [theDelegate respondsToSelector:@selector(socket:didWriteDataWithTag:)]) { long theWriteTag = currentWrite->tag; dispatch_async(delegateQueue, ^{ @autoreleasepool { [theDelegate socket:self didWriteDataWithTag:theWriteTag]; }}); } [self endCurrentWrite]; } - (void)endCurrentWrite { if (writeTimer) { dispatch_source_cancel(writeTimer); writeTimer = NULL; } currentWrite = nil; } - (void)setupWriteTimerWithTimeout:(NSTimeInterval)timeout { if (timeout >= 0.0) { writeTimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, socketQueue); __weak GCDAsyncSocket *weakSelf = self; dispatch_source_set_event_handler(writeTimer, ^{ @autoreleasepool { #pragma clang diagnostic push #pragma clang diagnostic warning "-Wimplicit-retain-self" __strong GCDAsyncSocket *strongSelf = weakSelf; if (strongSelf == nil) return_from_block; [strongSelf doWriteTimeout]; #pragma clang diagnostic pop }}); #if !OS_OBJECT_USE_OBJC dispatch_source_t theWriteTimer = writeTimer; dispatch_source_set_cancel_handler(writeTimer, ^{ #pragma clang diagnostic push #pragma clang diagnostic warning "-Wimplicit-retain-self" LogVerbose(@"dispatch_release(writeTimer)"); dispatch_release(theWriteTimer); #pragma clang diagnostic pop }); #endif dispatch_time_t tt = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(timeout * NSEC_PER_SEC)); dispatch_source_set_timer(writeTimer, tt, DISPATCH_TIME_FOREVER, 0); dispatch_resume(writeTimer); } } - (void)doWriteTimeout { // This is a little bit tricky. // Ideally we'd like to synchronously query the delegate about a timeout extension. // But if we do so synchronously we risk a possible deadlock. // So instead we have to do so asynchronously, and callback to ourselves from within the delegate block. flags |= kWritesPaused; __strong id theDelegate = delegate; if (delegateQueue && [theDelegate respondsToSelector:@selector(socket:shouldTimeoutWriteWithTag:elapsed:bytesDone:)]) { GCDAsyncWritePacket *theWrite = currentWrite; dispatch_async(delegateQueue, ^{ @autoreleasepool { NSTimeInterval timeoutExtension = 0.0; timeoutExtension = [theDelegate socket:self shouldTimeoutWriteWithTag:theWrite->tag elapsed:theWrite->timeout bytesDone:theWrite->bytesDone]; dispatch_async(self->socketQueue, ^{ @autoreleasepool { [self doWriteTimeoutWithExtension:timeoutExtension]; }}); }}); } else { [self doWriteTimeoutWithExtension:0.0]; } } - (void)doWriteTimeoutWithExtension:(NSTimeInterval)timeoutExtension { if (currentWrite) { if (timeoutExtension > 0.0) { currentWrite->timeout += timeoutExtension; // Reschedule the timer dispatch_time_t tt = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(timeoutExtension * NSEC_PER_SEC)); dispatch_source_set_timer(writeTimer, tt, DISPATCH_TIME_FOREVER, 0); // Unpause writes, and continue flags &= ~kWritesPaused; [self doWriteData]; } else { LogVerbose(@"WriteTimeout"); [self closeWithError:[self writeTimeoutError]]; } } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #pragma mark Security //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - (void)startTLS:(NSDictionary *)tlsSettings { LogTrace(); if (tlsSettings == nil) { // Passing nil/NULL to CFReadStreamSetProperty will appear to work the same as passing an empty dictionary, // but causes problems if we later try to fetch the remote host's certificate. // // To be exact, it causes the following to return NULL instead of the normal result: // CFReadStreamCopyProperty(readStream, kCFStreamPropertySSLPeerCertificates) // // So we use an empty dictionary instead, which works perfectly. tlsSettings = [NSDictionary dictionary]; } GCDAsyncSpecialPacket *packet = [[GCDAsyncSpecialPacket alloc] initWithTLSSettings:tlsSettings]; dispatch_async(socketQueue, ^{ @autoreleasepool { if ((self->flags & kSocketStarted) && !(self->flags & kQueuedTLS) && !(self->flags & kForbidReadsWrites)) { [self->readQueue addObject:packet]; [self->writeQueue addObject:packet]; self->flags |= kQueuedTLS; [self maybeDequeueRead]; [self maybeDequeueWrite]; } }}); } - (void)maybeStartTLS { // We can't start TLS until: // - All queued reads prior to the user calling startTLS are complete // - All queued writes prior to the user calling startTLS are complete // // We'll know these conditions are met when both kStartingReadTLS and kStartingWriteTLS are set if ((flags & kStartingReadTLS) && (flags & kStartingWriteTLS)) { BOOL useSecureTransport = YES; #if TARGET_OS_IPHONE { GCDAsyncSpecialPacket *tlsPacket = (GCDAsyncSpecialPacket *)currentRead; NSDictionary *tlsSettings = @{}; if (tlsPacket) { tlsSettings = tlsPacket->tlsSettings; } NSNumber *value = [tlsSettings objectForKey:GCDAsyncSocketUseCFStreamForTLS]; if (value && [value boolValue]) useSecureTransport = NO; } #endif if (useSecureTransport) { [self ssl_startTLS]; } else { #if TARGET_OS_IPHONE [self cf_startTLS]; #endif } } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #pragma mark Security via SecureTransport //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - (OSStatus)sslReadWithBuffer:(void *)buffer length:(size_t *)bufferLength { LogVerbose(@"sslReadWithBuffer:%p length:%lu", buffer, (unsigned long)*bufferLength); if ((socketFDBytesAvailable == 0) && ([sslPreBuffer availableBytes] == 0)) { LogVerbose(@"%@ - No data available to read...", THIS_METHOD); // No data available to read. // // Need to wait for readSource to fire and notify us of // available data in the socket's internal read buffer. [self resumeReadSource]; *bufferLength = 0; return errSSLWouldBlock; } size_t totalBytesRead = 0; size_t totalBytesLeftToBeRead = *bufferLength; BOOL done = NO; BOOL socketError = NO; // // STEP 1 : READ FROM SSL PRE BUFFER // size_t sslPreBufferLength = [sslPreBuffer availableBytes]; if (sslPreBufferLength > 0) { LogVerbose(@"%@: Reading from SSL pre buffer...", THIS_METHOD); size_t bytesToCopy; if (sslPreBufferLength > totalBytesLeftToBeRead) bytesToCopy = totalBytesLeftToBeRead; else bytesToCopy = sslPreBufferLength; LogVerbose(@"%@: Copying %zu bytes from sslPreBuffer", THIS_METHOD, bytesToCopy); memcpy(buffer, [sslPreBuffer readBuffer], bytesToCopy); [sslPreBuffer didRead:bytesToCopy]; LogVerbose(@"%@: sslPreBuffer.length = %zu", THIS_METHOD, [sslPreBuffer availableBytes]); totalBytesRead += bytesToCopy; totalBytesLeftToBeRead -= bytesToCopy; done = (totalBytesLeftToBeRead == 0); if (done) LogVerbose(@"%@: Complete", THIS_METHOD); } // // STEP 2 : READ FROM SOCKET // if (!done && (socketFDBytesAvailable > 0)) { LogVerbose(@"%@: Reading from socket...", THIS_METHOD); int socketFD = (socket4FD != SOCKET_NULL) ? socket4FD : (socket6FD != SOCKET_NULL) ? socket6FD : socketUN; BOOL readIntoPreBuffer; size_t bytesToRead; uint8_t *buf; if (socketFDBytesAvailable > totalBytesLeftToBeRead) { // Read all available data from socket into sslPreBuffer. // Then copy requested amount into dataBuffer. LogVerbose(@"%@: Reading into sslPreBuffer...", THIS_METHOD); [sslPreBuffer ensureCapacityForWrite:socketFDBytesAvailable]; readIntoPreBuffer = YES; bytesToRead = (size_t)socketFDBytesAvailable; buf = [sslPreBuffer writeBuffer]; } else { // Read available data from socket directly into dataBuffer. LogVerbose(@"%@: Reading directly into dataBuffer...", THIS_METHOD); readIntoPreBuffer = NO; bytesToRead = totalBytesLeftToBeRead; buf = (uint8_t *)buffer + totalBytesRead; } ssize_t result = read(socketFD, buf, bytesToRead); LogVerbose(@"%@: read from socket = %zd", THIS_METHOD, result); if (result < 0) { LogVerbose(@"%@: read errno = %i", THIS_METHOD, errno); if (errno != EWOULDBLOCK) { socketError = YES; } socketFDBytesAvailable = 0; } else if (result == 0) { LogVerbose(@"%@: read EOF", THIS_METHOD); socketError = YES; socketFDBytesAvailable = 0; } else { size_t bytesReadFromSocket = result; if (socketFDBytesAvailable > bytesReadFromSocket) socketFDBytesAvailable -= bytesReadFromSocket; else socketFDBytesAvailable = 0; if (readIntoPreBuffer) { [sslPreBuffer didWrite:bytesReadFromSocket]; size_t bytesToCopy = MIN(totalBytesLeftToBeRead, bytesReadFromSocket); LogVerbose(@"%@: Copying %zu bytes out of sslPreBuffer", THIS_METHOD, bytesToCopy); memcpy((uint8_t *)buffer + totalBytesRead, [sslPreBuffer readBuffer], bytesToCopy); [sslPreBuffer didRead:bytesToCopy]; totalBytesRead += bytesToCopy; totalBytesLeftToBeRead -= bytesToCopy; LogVerbose(@"%@: sslPreBuffer.length = %zu", THIS_METHOD, [sslPreBuffer availableBytes]); } else { totalBytesRead += bytesReadFromSocket; totalBytesLeftToBeRead -= bytesReadFromSocket; } done = (totalBytesLeftToBeRead == 0); if (done) LogVerbose(@"%@: Complete", THIS_METHOD); } } *bufferLength = totalBytesRead; if (done) return noErr; if (socketError) return errSSLClosedAbort; return errSSLWouldBlock; } - (OSStatus)sslWriteWithBuffer:(const void *)buffer length:(size_t *)bufferLength { if (!(flags & kSocketCanAcceptBytes)) { // Unable to write. // // Need to wait for writeSource to fire and notify us of // available space in the socket's internal write buffer. [self resumeWriteSource]; *bufferLength = 0; return errSSLWouldBlock; } size_t bytesToWrite = *bufferLength; size_t bytesWritten = 0; BOOL done = NO; BOOL socketError = NO; int socketFD = (socket4FD != SOCKET_NULL) ? socket4FD : (socket6FD != SOCKET_NULL) ? socket6FD : socketUN; ssize_t result = write(socketFD, buffer, bytesToWrite); if (result < 0) { if (errno != EWOULDBLOCK) { socketError = YES; } flags &= ~kSocketCanAcceptBytes; } else if (result == 0) { flags &= ~kSocketCanAcceptBytes; } else { bytesWritten = result; done = (bytesWritten == bytesToWrite); } *bufferLength = bytesWritten; if (done) return noErr; if (socketError) return errSSLClosedAbort; return errSSLWouldBlock; } static OSStatus SSLReadFunction(SSLConnectionRef connection, void *data, size_t *dataLength) { GCDAsyncSocket *asyncSocket = (__bridge GCDAsyncSocket *)connection; NSCAssert(dispatch_get_specific(asyncSocket->IsOnSocketQueueOrTargetQueueKey), @"What the deuce?"); return [asyncSocket sslReadWithBuffer:data length:dataLength]; } static OSStatus SSLWriteFunction(SSLConnectionRef connection, const void *data, size_t *dataLength) { GCDAsyncSocket *asyncSocket = (__bridge GCDAsyncSocket *)connection; NSCAssert(dispatch_get_specific(asyncSocket->IsOnSocketQueueOrTargetQueueKey), @"What the deuce?"); return [asyncSocket sslWriteWithBuffer:data length:dataLength]; } - (void)ssl_startTLS { LogTrace(); LogVerbose(@"Starting TLS (via SecureTransport)..."); OSStatus status; GCDAsyncSpecialPacket *tlsPacket = (GCDAsyncSpecialPacket *)currentRead; if (tlsPacket == nil) // Code to quiet the analyzer { NSAssert(NO, @"Logic error"); [self closeWithError:[self otherError:@"Logic error"]]; return; } NSDictionary *tlsSettings = tlsPacket->tlsSettings; // Create SSLContext, and setup IO callbacks and connection ref NSNumber *isServerNumber = [tlsSettings objectForKey:(__bridge NSString *)kCFStreamSSLIsServer]; BOOL isServer = [isServerNumber boolValue]; #if TARGET_OS_IPHONE || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 1080) { if (isServer) sslContext = SSLCreateContext(kCFAllocatorDefault, kSSLServerSide, kSSLStreamType); else sslContext = SSLCreateContext(kCFAllocatorDefault, kSSLClientSide, kSSLStreamType); if (sslContext == NULL) { [self closeWithError:[self otherError:@"Error in SSLCreateContext"]]; return; } } #else // (__MAC_OS_X_VERSION_MIN_REQUIRED < 1080) { status = SSLNewContext(isServer, &sslContext); if (status != noErr) { [self closeWithError:[self otherError:@"Error in SSLNewContext"]]; return; } } #endif status = SSLSetIOFuncs(sslContext, &SSLReadFunction, &SSLWriteFunction); if (status != noErr) { [self closeWithError:[self otherError:@"Error in SSLSetIOFuncs"]]; return; } status = SSLSetConnection(sslContext, (__bridge SSLConnectionRef)self); if (status != noErr) { [self closeWithError:[self otherError:@"Error in SSLSetConnection"]]; return; } NSNumber *shouldManuallyEvaluateTrust = [tlsSettings objectForKey:GCDAsyncSocketManuallyEvaluateTrust]; if ([shouldManuallyEvaluateTrust boolValue]) { if (isServer) { [self closeWithError:[self otherError:@"Manual trust validation is not supported for server sockets"]]; return; } status = SSLSetSessionOption(sslContext, kSSLSessionOptionBreakOnServerAuth, true); if (status != noErr) { [self closeWithError:[self otherError:@"Error in SSLSetSessionOption"]]; return; } #if !TARGET_OS_IPHONE && (__MAC_OS_X_VERSION_MIN_REQUIRED < 1080) // Note from Apple's documentation: // // It is only necessary to call SSLSetEnableCertVerify on the Mac prior to OS X 10.8. // On OS X 10.8 and later setting kSSLSessionOptionBreakOnServerAuth always disables the // built-in trust evaluation. All versions of iOS behave like OS X 10.8 and thus // SSLSetEnableCertVerify is not available on that platform at all. status = SSLSetEnableCertVerify(sslContext, NO); if (status != noErr) { [self closeWithError:[self otherError:@"Error in SSLSetEnableCertVerify"]]; return; } #endif } // Configure SSLContext from given settings // // Checklist: // 1. kCFStreamSSLPeerName // 2. kCFStreamSSLCertificates // 3. GCDAsyncSocketSSLPeerID // 4. GCDAsyncSocketSSLProtocolVersionMin // 5. GCDAsyncSocketSSLProtocolVersionMax // 6. GCDAsyncSocketSSLSessionOptionFalseStart // 7. GCDAsyncSocketSSLSessionOptionSendOneByteRecord // 8. GCDAsyncSocketSSLCipherSuites // 9. GCDAsyncSocketSSLDiffieHellmanParameters (Mac) // // Deprecated (throw error): // 10. kCFStreamSSLAllowsAnyRoot // 11. kCFStreamSSLAllowsExpiredRoots // 12. kCFStreamSSLAllowsExpiredCertificates // 13. kCFStreamSSLValidatesCertificateChain // 14. kCFStreamSSLLevel NSObject *value; // 1. kCFStreamSSLPeerName value = [tlsSettings objectForKey:(__bridge NSString *)kCFStreamSSLPeerName]; if ([value isKindOfClass:[NSString class]]) { NSString *peerName = (NSString *)value; const char *peer = [peerName UTF8String]; size_t peerLen = strlen(peer); status = SSLSetPeerDomainName(sslContext, peer, peerLen); if (status != noErr) { [self closeWithError:[self otherError:@"Error in SSLSetPeerDomainName"]]; return; } } else if (value) { NSAssert(NO, @"Invalid value for kCFStreamSSLPeerName. Value must be of type NSString."); [self closeWithError:[self otherError:@"Invalid value for kCFStreamSSLPeerName."]]; return; } // 2. kCFStreamSSLCertificates value = [tlsSettings objectForKey:(__bridge NSString *)kCFStreamSSLCertificates]; if ([value isKindOfClass:[NSArray class]]) { NSArray *certs = (NSArray *)value; status = SSLSetCertificate(sslContext, (__bridge CFArrayRef)certs); if (status != noErr) { [self closeWithError:[self otherError:@"Error in SSLSetCertificate"]]; return; } } else if (value) { NSAssert(NO, @"Invalid value for kCFStreamSSLCertificates. Value must be of type NSArray."); [self closeWithError:[self otherError:@"Invalid value for kCFStreamSSLCertificates."]]; return; } // 3. GCDAsyncSocketSSLPeerID value = [tlsSettings objectForKey:GCDAsyncSocketSSLPeerID]; if ([value isKindOfClass:[NSData class]]) { NSData *peerIdData = (NSData *)value; status = SSLSetPeerID(sslContext, [peerIdData bytes], [peerIdData length]); if (status != noErr) { [self closeWithError:[self otherError:@"Error in SSLSetPeerID"]]; return; } } else if (value) { NSAssert(NO, @"Invalid value for GCDAsyncSocketSSLPeerID. Value must be of type NSData." @" (You can convert strings to data using a method like" @" [string dataUsingEncoding:NSUTF8StringEncoding])"); [self closeWithError:[self otherError:@"Invalid value for GCDAsyncSocketSSLPeerID."]]; return; } // 4. GCDAsyncSocketSSLProtocolVersionMin value = [tlsSettings objectForKey:GCDAsyncSocketSSLProtocolVersionMin]; if ([value isKindOfClass:[NSNumber class]]) { SSLProtocol minProtocol = (SSLProtocol)[(NSNumber *)value intValue]; if (minProtocol != kSSLProtocolUnknown) { status = SSLSetProtocolVersionMin(sslContext, minProtocol); if (status != noErr) { [self closeWithError:[self otherError:@"Error in SSLSetProtocolVersionMin"]]; return; } } } else if (value) { NSAssert(NO, @"Invalid value for GCDAsyncSocketSSLProtocolVersionMin. Value must be of type NSNumber."); [self closeWithError:[self otherError:@"Invalid value for GCDAsyncSocketSSLProtocolVersionMin."]]; return; } // 5. GCDAsyncSocketSSLProtocolVersionMax value = [tlsSettings objectForKey:GCDAsyncSocketSSLProtocolVersionMax]; if ([value isKindOfClass:[NSNumber class]]) { SSLProtocol maxProtocol = (SSLProtocol)[(NSNumber *)value intValue]; if (maxProtocol != kSSLProtocolUnknown) { status = SSLSetProtocolVersionMax(sslContext, maxProtocol); if (status != noErr) { [self closeWithError:[self otherError:@"Error in SSLSetProtocolVersionMax"]]; return; } } } else if (value) { NSAssert(NO, @"Invalid value for GCDAsyncSocketSSLProtocolVersionMax. Value must be of type NSNumber."); [self closeWithError:[self otherError:@"Invalid value for GCDAsyncSocketSSLProtocolVersionMax."]]; return; } // 6. GCDAsyncSocketSSLSessionOptionFalseStart value = [tlsSettings objectForKey:GCDAsyncSocketSSLSessionOptionFalseStart]; if ([value isKindOfClass:[NSNumber class]]) { NSNumber *falseStart = (NSNumber *)value; status = SSLSetSessionOption(sslContext, kSSLSessionOptionFalseStart, [falseStart boolValue]); if (status != noErr) { [self closeWithError:[self otherError:@"Error in SSLSetSessionOption (kSSLSessionOptionFalseStart)"]]; return; } } else if (value) { NSAssert(NO, @"Invalid value for GCDAsyncSocketSSLSessionOptionFalseStart. Value must be of type NSNumber."); [self closeWithError:[self otherError:@"Invalid value for GCDAsyncSocketSSLSessionOptionFalseStart."]]; return; } // 7. GCDAsyncSocketSSLSessionOptionSendOneByteRecord value = [tlsSettings objectForKey:GCDAsyncSocketSSLSessionOptionSendOneByteRecord]; if ([value isKindOfClass:[NSNumber class]]) { NSNumber *oneByteRecord = (NSNumber *)value; status = SSLSetSessionOption(sslContext, kSSLSessionOptionSendOneByteRecord, [oneByteRecord boolValue]); if (status != noErr) { [self closeWithError: [self otherError:@"Error in SSLSetSessionOption (kSSLSessionOptionSendOneByteRecord)"]]; return; } } else if (value) { NSAssert(NO, @"Invalid value for GCDAsyncSocketSSLSessionOptionSendOneByteRecord." @" Value must be of type NSNumber."); [self closeWithError:[self otherError:@"Invalid value for GCDAsyncSocketSSLSessionOptionSendOneByteRecord."]]; return; } // 8. GCDAsyncSocketSSLCipherSuites value = [tlsSettings objectForKey:GCDAsyncSocketSSLCipherSuites]; if ([value isKindOfClass:[NSArray class]]) { NSArray *cipherSuites = (NSArray *)value; NSUInteger numberCiphers = [cipherSuites count]; SSLCipherSuite ciphers[numberCiphers]; NSUInteger cipherIndex; for (cipherIndex = 0; cipherIndex < numberCiphers; cipherIndex++) { NSNumber *cipherObject = [cipherSuites objectAtIndex:cipherIndex]; ciphers[cipherIndex] = (SSLCipherSuite)[cipherObject unsignedIntValue]; } status = SSLSetEnabledCiphers(sslContext, ciphers, numberCiphers); if (status != noErr) { [self closeWithError:[self otherError:@"Error in SSLSetEnabledCiphers"]]; return; } } else if (value) { NSAssert(NO, @"Invalid value for GCDAsyncSocketSSLCipherSuites. Value must be of type NSArray."); [self closeWithError:[self otherError:@"Invalid value for GCDAsyncSocketSSLCipherSuites."]]; return; } // 9. GCDAsyncSocketSSLDiffieHellmanParameters #if !TARGET_OS_IPHONE value = [tlsSettings objectForKey:GCDAsyncSocketSSLDiffieHellmanParameters]; if ([value isKindOfClass:[NSData class]]) { NSData *diffieHellmanData = (NSData *)value; status = SSLSetDiffieHellmanParams(sslContext, [diffieHellmanData bytes], [diffieHellmanData length]); if (status != noErr) { [self closeWithError:[self otherError:@"Error in SSLSetDiffieHellmanParams"]]; return; } } else if (value) { NSAssert(NO, @"Invalid value for GCDAsyncSocketSSLDiffieHellmanParameters. Value must be of type NSData."); [self closeWithError:[self otherError:@"Invalid value for GCDAsyncSocketSSLDiffieHellmanParameters."]]; return; } #endif // DEPRECATED checks // 10. kCFStreamSSLAllowsAnyRoot #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" value = [tlsSettings objectForKey:(__bridge NSString *)kCFStreamSSLAllowsAnyRoot]; #pragma clang diagnostic pop if (value) { NSAssert(NO, @"Security option unavailable - kCFStreamSSLAllowsAnyRoot" @" - You must use manual trust evaluation"); [self closeWithError:[self otherError:@"Security option unavailable - kCFStreamSSLAllowsAnyRoot"]]; return; } // 11. kCFStreamSSLAllowsExpiredRoots #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" value = [tlsSettings objectForKey:(__bridge NSString *)kCFStreamSSLAllowsExpiredRoots]; #pragma clang diagnostic pop if (value) { NSAssert(NO, @"Security option unavailable - kCFStreamSSLAllowsExpiredRoots" @" - You must use manual trust evaluation"); [self closeWithError:[self otherError:@"Security option unavailable - kCFStreamSSLAllowsExpiredRoots"]]; return; } // 12. kCFStreamSSLValidatesCertificateChain #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" value = [tlsSettings objectForKey:(__bridge NSString *)kCFStreamSSLValidatesCertificateChain]; #pragma clang diagnostic pop if (value) { NSAssert(NO, @"Security option unavailable - kCFStreamSSLValidatesCertificateChain" @" - You must use manual trust evaluation"); [self closeWithError:[self otherError:@"Security option unavailable - kCFStreamSSLValidatesCertificateChain"]]; return; } // 13. kCFStreamSSLAllowsExpiredCertificates #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" value = [tlsSettings objectForKey:(__bridge NSString *)kCFStreamSSLAllowsExpiredCertificates]; #pragma clang diagnostic pop if (value) { NSAssert(NO, @"Security option unavailable - kCFStreamSSLAllowsExpiredCertificates" @" - You must use manual trust evaluation"); [self closeWithError:[self otherError:@"Security option unavailable - kCFStreamSSLAllowsExpiredCertificates"]]; return; } // 14. kCFStreamSSLLevel #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" value = [tlsSettings objectForKey:(__bridge NSString *)kCFStreamSSLLevel]; #pragma clang diagnostic pop if (value) { NSAssert(NO, @"Security option unavailable - kCFStreamSSLLevel" @" - You must use GCDAsyncSocketSSLProtocolVersionMin & GCDAsyncSocketSSLProtocolVersionMax"); [self closeWithError:[self otherError:@"Security option unavailable - kCFStreamSSLLevel"]]; return; } // Setup the sslPreBuffer // // Any data in the preBuffer needs to be moved into the sslPreBuffer, // as this data is now part of the secure read stream. sslPreBuffer = [[GCDAsyncSocketPreBuffer alloc] initWithCapacity:(1024 * 4)]; size_t preBufferLength = [preBuffer availableBytes]; if (preBufferLength > 0) { [sslPreBuffer ensureCapacityForWrite:preBufferLength]; memcpy([sslPreBuffer writeBuffer], [preBuffer readBuffer], preBufferLength); [preBuffer didRead:preBufferLength]; [sslPreBuffer didWrite:preBufferLength]; } sslErrCode = lastSSLHandshakeError = noErr; // Start the SSL Handshake process [self ssl_continueSSLHandshake]; } - (void)ssl_continueSSLHandshake { LogTrace(); // If the return value is noErr, the session is ready for normal secure communication. // If the return value is errSSLWouldBlock, the SSLHandshake function must be called again. // If the return value is errSSLServerAuthCompleted, we ask delegate if we should trust the // server and then call SSLHandshake again to resume the handshake or close the connection // errSSLPeerBadCert SSL error. // Otherwise, the return value indicates an error code. OSStatus status = SSLHandshake(sslContext); lastSSLHandshakeError = status; if (status == noErr) { LogVerbose(@"SSLHandshake complete"); flags &= ~kStartingReadTLS; flags &= ~kStartingWriteTLS; flags |= kSocketSecure; __strong id theDelegate = delegate; if (delegateQueue && [theDelegate respondsToSelector:@selector(socketDidSecure:)]) { dispatch_async(delegateQueue, ^{ @autoreleasepool { [theDelegate socketDidSecure:self]; }}); } [self endCurrentRead]; [self endCurrentWrite]; [self maybeDequeueRead]; [self maybeDequeueWrite]; } else if (status == errSSLPeerAuthCompleted) { LogVerbose(@"SSLHandshake peerAuthCompleted - awaiting delegate approval"); __block SecTrustRef trust = NULL; status = SSLCopyPeerTrust(sslContext, &trust); if (status != noErr) { [self closeWithError:[self sslError:status]]; return; } int aStateIndex = stateIndex; dispatch_queue_t theSocketQueue = socketQueue; __weak GCDAsyncSocket *weakSelf = self; void (^comletionHandler)(BOOL) = ^(BOOL shouldTrust){ @autoreleasepool { #pragma clang diagnostic push #pragma clang diagnostic warning "-Wimplicit-retain-self" dispatch_async(theSocketQueue, ^{ @autoreleasepool { if (trust) { CFRelease(trust); trust = NULL; } __strong GCDAsyncSocket *strongSelf = weakSelf; if (strongSelf) { [strongSelf ssl_shouldTrustPeer:shouldTrust stateIndex:aStateIndex]; } }}); #pragma clang diagnostic pop }}; __strong id theDelegate = delegate; if (delegateQueue && [theDelegate respondsToSelector:@selector(socket:didReceiveTrust:completionHandler:)]) { dispatch_async(delegateQueue, ^{ @autoreleasepool { [theDelegate socket:self didReceiveTrust:trust completionHandler:comletionHandler]; }}); } else { if (trust) { CFRelease(trust); trust = NULL; } NSString *msg = @"GCDAsyncSocketManuallyEvaluateTrust specified in tlsSettings," @" but delegate doesn't implement socket:shouldTrustPeer:"; [self closeWithError:[self otherError:msg]]; return; } } else if (status == errSSLWouldBlock) { LogVerbose(@"SSLHandshake continues..."); // Handshake continues... // // This method will be called again from doReadData or doWriteData. } else { [self closeWithError:[self sslError:status]]; } } - (void)ssl_shouldTrustPeer:(BOOL)shouldTrust stateIndex:(int)aStateIndex { LogTrace(); if (aStateIndex != stateIndex) { LogInfo(@"Ignoring ssl_shouldTrustPeer - invalid state (maybe disconnected)"); // One of the following is true // - the socket was disconnected // - the startTLS operation timed out // - the completionHandler was already invoked once return; } // Increment stateIndex to ensure completionHandler can only be called once. stateIndex++; if (shouldTrust) { NSAssert(lastSSLHandshakeError == errSSLPeerAuthCompleted, @"ssl_shouldTrustPeer called when last error is %d and not errSSLPeerAuthCompleted", (int)lastSSLHandshakeError); [self ssl_continueSSLHandshake]; } else { [self closeWithError:[self sslError:errSSLPeerBadCert]]; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #pragma mark Security via CFStream //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #if TARGET_OS_IPHONE - (void)cf_finishSSLHandshake { LogTrace(); if ((flags & kStartingReadTLS) && (flags & kStartingWriteTLS)) { flags &= ~kStartingReadTLS; flags &= ~kStartingWriteTLS; flags |= kSocketSecure; __strong id theDelegate = delegate; if (delegateQueue && [theDelegate respondsToSelector:@selector(socketDidSecure:)]) { dispatch_async(delegateQueue, ^{ @autoreleasepool { [theDelegate socketDidSecure:self]; }}); } [self endCurrentRead]; [self endCurrentWrite]; [self maybeDequeueRead]; [self maybeDequeueWrite]; } } - (void)cf_abortSSLHandshake:(NSError *)error { LogTrace(); if ((flags & kStartingReadTLS) && (flags & kStartingWriteTLS)) { flags &= ~kStartingReadTLS; flags &= ~kStartingWriteTLS; [self closeWithError:error]; } } - (void)cf_startTLS { LogTrace(); LogVerbose(@"Starting TLS (via CFStream)..."); if ([preBuffer availableBytes] > 0) { NSString *msg = @"Invalid TLS transition. Handshake has already been read from socket."; [self closeWithError:[self otherError:msg]]; return; } [self suspendReadSource]; [self suspendWriteSource]; socketFDBytesAvailable = 0; flags &= ~kSocketCanAcceptBytes; flags &= ~kSecureSocketHasBytesAvailable; flags |= kUsingCFStreamForTLS; if (![self createReadAndWriteStream]) { [self closeWithError:[self otherError:@"Error in CFStreamCreatePairWithSocket"]]; return; } if (![self registerForStreamCallbacksIncludingReadWrite:YES]) { [self closeWithError:[self otherError:@"Error in CFStreamSetClient"]]; return; } if (![self addStreamsToRunLoop]) { [self closeWithError:[self otherError:@"Error in CFStreamScheduleWithRunLoop"]]; return; } NSAssert([currentRead isKindOfClass:[GCDAsyncSpecialPacket class]], @"Invalid read packet for startTLS"); NSAssert([currentWrite isKindOfClass:[GCDAsyncSpecialPacket class]], @"Invalid write packet for startTLS"); GCDAsyncSpecialPacket *tlsPacket = (GCDAsyncSpecialPacket *)currentRead; CFDictionaryRef tlsSettings = (__bridge CFDictionaryRef)tlsPacket->tlsSettings; // Getting an error concerning kCFStreamPropertySSLSettings ? // You need to add the CFNetwork framework to your iOS application. BOOL r1 = CFReadStreamSetProperty(readStream, kCFStreamPropertySSLSettings, tlsSettings); BOOL r2 = CFWriteStreamSetProperty(writeStream, kCFStreamPropertySSLSettings, tlsSettings); // For some reason, starting around the time of iOS 4.3, // the first call to set the kCFStreamPropertySSLSettings will return true, // but the second will return false. // // Order doesn't seem to matter. // So you could call CFReadStreamSetProperty and then CFWriteStreamSetProperty, or you could reverse the order. // Either way, the first call will return true, and the second returns false. // // Interestingly, this doesn't seem to affect anything. // Which is not altogether unusual, as the documentation seems to suggest that (for many settings) // setting it on one side of the stream automatically sets it for the other side of the stream. // // Although there isn't anything in the documentation to suggest that the second attempt would fail. // // Furthermore, this only seems to affect streams that are negotiating a security upgrade. // In other words, the socket gets connected, there is some back-and-forth communication over the unsecure // connection, and then a startTLS is issued. // So this mostly affects newer protocols (XMPP, IMAP) as opposed to older protocols (HTTPS). if (!r1 && !r2) // Yes, the && is correct - workaround for apple bug. { [self closeWithError:[self otherError:@"Error in CFStreamSetProperty"]]; return; } if (![self openStreams]) { [self closeWithError:[self otherError:@"Error in CFStreamOpen"]]; return; } LogVerbose(@"Waiting for SSL Handshake to complete..."); } #endif //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #pragma mark CFStream //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #if TARGET_OS_IPHONE + (void)ignore:(id)_ {} + (void)startCFStreamThreadIfNeeded { LogTrace(); static dispatch_once_t predicate; dispatch_once(&predicate, ^{ cfstreamThreadRetainCount = 0; cfstreamThreadSetupQueue = dispatch_queue_create("GCDAsyncSocket-CFStreamThreadSetup", DISPATCH_QUEUE_SERIAL); }); dispatch_sync(cfstreamThreadSetupQueue, ^{ @autoreleasepool { if (++cfstreamThreadRetainCount == 1) { cfstreamThread = [[NSThread alloc] initWithTarget:self selector:@selector(cfstreamThread:) object:nil]; [cfstreamThread start]; } }}); } + (void)stopCFStreamThreadIfNeeded { LogTrace(); // The creation of the cfstreamThread is relatively expensive. // So we'd like to keep it available for recycling. // However, there's a tradeoff here, because it shouldn't remain alive forever. // So what we're going to do is use a little delay before taking it down. // This way it can be reused properly in situations where multiple sockets are continually in flux. int delayInSeconds = 30; dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); dispatch_after(when, cfstreamThreadSetupQueue, ^{ @autoreleasepool { #pragma clang diagnostic push #pragma clang diagnostic warning "-Wimplicit-retain-self" if (cfstreamThreadRetainCount == 0) { LogWarn(@"Logic error concerning cfstreamThread start / stop"); return_from_block; } if (--cfstreamThreadRetainCount == 0) { [cfstreamThread cancel]; // set isCancelled flag // wake up the thread [[self class] performSelector:@selector(ignore:) onThread:cfstreamThread withObject:[NSNull null] waitUntilDone:NO]; cfstreamThread = nil; } #pragma clang diagnostic pop }}); } + (void)cfstreamThread:(id)unused { @autoreleasepool { [[NSThread currentThread] setName:GCDAsyncSocketThreadName]; LogInfo(@"CFStreamThread: Started"); // We can't run the run loop unless it has an associated input source or a timer. // So we'll just create a timer that will never fire - unless the server runs for decades. [NSTimer scheduledTimerWithTimeInterval:[[NSDate distantFuture] timeIntervalSinceNow] target:self selector:@selector(ignore:) userInfo:nil repeats:YES]; NSThread *currentThread = [NSThread currentThread]; NSRunLoop *currentRunLoop = [NSRunLoop currentRunLoop]; BOOL isCancelled = [currentThread isCancelled]; while (!isCancelled && [currentRunLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]) { isCancelled = [currentThread isCancelled]; } LogInfo(@"CFStreamThread: Stopped"); }} + (void)scheduleCFStreams:(GCDAsyncSocket *)asyncSocket { LogTrace(); NSAssert([NSThread currentThread] == cfstreamThread, @"Invoked on wrong thread"); CFRunLoopRef runLoop = CFRunLoopGetCurrent(); if (asyncSocket->readStream) CFReadStreamScheduleWithRunLoop(asyncSocket->readStream, runLoop, kCFRunLoopDefaultMode); if (asyncSocket->writeStream) CFWriteStreamScheduleWithRunLoop(asyncSocket->writeStream, runLoop, kCFRunLoopDefaultMode); } + (void)unscheduleCFStreams:(GCDAsyncSocket *)asyncSocket { LogTrace(); NSAssert([NSThread currentThread] == cfstreamThread, @"Invoked on wrong thread"); CFRunLoopRef runLoop = CFRunLoopGetCurrent(); if (asyncSocket->readStream) CFReadStreamUnscheduleFromRunLoop(asyncSocket->readStream, runLoop, kCFRunLoopDefaultMode); if (asyncSocket->writeStream) CFWriteStreamUnscheduleFromRunLoop(asyncSocket->writeStream, runLoop, kCFRunLoopDefaultMode); } static void CFReadStreamCallback (CFReadStreamRef stream, CFStreamEventType type, void *pInfo) { GCDAsyncSocket *asyncSocket = (__bridge GCDAsyncSocket *)pInfo; switch(type) { case kCFStreamEventHasBytesAvailable: { dispatch_async(asyncSocket->socketQueue, ^{ @autoreleasepool { LogCVerbose(@"CFReadStreamCallback - HasBytesAvailable"); if (asyncSocket->readStream != stream) return_from_block; if ((asyncSocket->flags & kStartingReadTLS) && (asyncSocket->flags & kStartingWriteTLS)) { // If we set kCFStreamPropertySSLSettings before we opened the streams, this might be a lie. // (A callback related to the tcp stream, but not to the SSL layer). if (CFReadStreamHasBytesAvailable(asyncSocket->readStream)) { asyncSocket->flags |= kSecureSocketHasBytesAvailable; [asyncSocket cf_finishSSLHandshake]; } } else { asyncSocket->flags |= kSecureSocketHasBytesAvailable; [asyncSocket doReadData]; } }}); break; } default: { NSError *error = (__bridge_transfer NSError *)CFReadStreamCopyError(stream); if (error == nil && type == kCFStreamEventEndEncountered) { error = [asyncSocket connectionClosedError]; } dispatch_async(asyncSocket->socketQueue, ^{ @autoreleasepool { LogCVerbose(@"CFReadStreamCallback - Other"); if (asyncSocket->readStream != stream) return_from_block; if ((asyncSocket->flags & kStartingReadTLS) && (asyncSocket->flags & kStartingWriteTLS)) { [asyncSocket cf_abortSSLHandshake:error]; } else { [asyncSocket closeWithError:error]; } }}); break; } } } static void CFWriteStreamCallback (CFWriteStreamRef stream, CFStreamEventType type, void *pInfo) { GCDAsyncSocket *asyncSocket = (__bridge GCDAsyncSocket *)pInfo; switch(type) { case kCFStreamEventCanAcceptBytes: { dispatch_async(asyncSocket->socketQueue, ^{ @autoreleasepool { LogCVerbose(@"CFWriteStreamCallback - CanAcceptBytes"); if (asyncSocket->writeStream != stream) return_from_block; if ((asyncSocket->flags & kStartingReadTLS) && (asyncSocket->flags & kStartingWriteTLS)) { // If we set kCFStreamPropertySSLSettings before we opened the streams, this might be a lie. // (A callback related to the tcp stream, but not to the SSL layer). if (CFWriteStreamCanAcceptBytes(asyncSocket->writeStream)) { asyncSocket->flags |= kSocketCanAcceptBytes; [asyncSocket cf_finishSSLHandshake]; } } else { asyncSocket->flags |= kSocketCanAcceptBytes; [asyncSocket doWriteData]; } }}); break; } default: { NSError *error = (__bridge_transfer NSError *)CFWriteStreamCopyError(stream); if (error == nil && type == kCFStreamEventEndEncountered) { error = [asyncSocket connectionClosedError]; } dispatch_async(asyncSocket->socketQueue, ^{ @autoreleasepool { LogCVerbose(@"CFWriteStreamCallback - Other"); if (asyncSocket->writeStream != stream) return_from_block; if ((asyncSocket->flags & kStartingReadTLS) && (asyncSocket->flags & kStartingWriteTLS)) { [asyncSocket cf_abortSSLHandshake:error]; } else { [asyncSocket closeWithError:error]; } }}); break; } } } - (BOOL)createReadAndWriteStream { LogTrace(); NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); if (readStream || writeStream) { // Streams already created return YES; } int socketFD = (socket4FD != SOCKET_NULL) ? socket4FD : (socket6FD != SOCKET_NULL) ? socket6FD : socketUN; if (socketFD == SOCKET_NULL) { // Cannot create streams without a file descriptor return NO; } if (![self isConnected]) { // Cannot create streams until file descriptor is connected return NO; } LogVerbose(@"Creating read and write stream..."); CFStreamCreatePairWithSocket(NULL, (CFSocketNativeHandle)socketFD, &readStream, &writeStream); // The kCFStreamPropertyShouldCloseNativeSocket property should be false by default (for our case). // But let's not take any chances. if (readStream) CFReadStreamSetProperty(readStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanFalse); if (writeStream) CFWriteStreamSetProperty(writeStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanFalse); if ((readStream == NULL) || (writeStream == NULL)) { LogWarn(@"Unable to create read and write stream..."); if (readStream) { CFReadStreamClose(readStream); CFRelease(readStream); readStream = NULL; } if (writeStream) { CFWriteStreamClose(writeStream); CFRelease(writeStream); writeStream = NULL; } return NO; } return YES; } - (BOOL)registerForStreamCallbacksIncludingReadWrite:(BOOL)includeReadWrite { LogVerbose(@"%@ %@", THIS_METHOD, (includeReadWrite ? @"YES" : @"NO")); NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); NSAssert((readStream != NULL && writeStream != NULL), @"Read/Write stream is null"); streamContext.version = 0; streamContext.info = (__bridge void *)(self); streamContext.retain = nil; streamContext.release = nil; streamContext.copyDescription = nil; CFOptionFlags readStreamEvents = kCFStreamEventErrorOccurred | kCFStreamEventEndEncountered; if (includeReadWrite) readStreamEvents |= kCFStreamEventHasBytesAvailable; if (!CFReadStreamSetClient(readStream, readStreamEvents, &CFReadStreamCallback, &streamContext)) { return NO; } CFOptionFlags writeStreamEvents = kCFStreamEventErrorOccurred | kCFStreamEventEndEncountered; if (includeReadWrite) writeStreamEvents |= kCFStreamEventCanAcceptBytes; if (!CFWriteStreamSetClient(writeStream, writeStreamEvents, &CFWriteStreamCallback, &streamContext)) { return NO; } return YES; } - (BOOL)addStreamsToRunLoop { LogTrace(); NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); NSAssert((readStream != NULL && writeStream != NULL), @"Read/Write stream is null"); if (!(flags & kAddedStreamsToRunLoop)) { LogVerbose(@"Adding streams to runloop..."); [[self class] startCFStreamThreadIfNeeded]; dispatch_sync(cfstreamThreadSetupQueue, ^{ [[self class] performSelector:@selector(scheduleCFStreams:) onThread:cfstreamThread withObject:self waitUntilDone:YES]; }); flags |= kAddedStreamsToRunLoop; } return YES; } - (void)removeStreamsFromRunLoop { LogTrace(); NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); NSAssert((readStream != NULL && writeStream != NULL), @"Read/Write stream is null"); if (flags & kAddedStreamsToRunLoop) { LogVerbose(@"Removing streams from runloop..."); dispatch_sync(cfstreamThreadSetupQueue, ^{ [[self class] performSelector:@selector(unscheduleCFStreams:) onThread:cfstreamThread withObject:self waitUntilDone:YES]; }); [[self class] stopCFStreamThreadIfNeeded]; flags &= ~kAddedStreamsToRunLoop; } } - (BOOL)openStreams { LogTrace(); NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); NSAssert((readStream != NULL && writeStream != NULL), @"Read/Write stream is null"); CFStreamStatus readStatus = CFReadStreamGetStatus(readStream); CFStreamStatus writeStatus = CFWriteStreamGetStatus(writeStream); if ((readStatus == kCFStreamStatusNotOpen) || (writeStatus == kCFStreamStatusNotOpen)) { LogVerbose(@"Opening read and write stream..."); BOOL r1 = CFReadStreamOpen(readStream); BOOL r2 = CFWriteStreamOpen(writeStream); if (!r1 || !r2) { LogError(@"Error in CFStreamOpen"); return NO; } } return YES; } #endif //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #pragma mark Advanced //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /** * See header file for big discussion of this method. **/ - (BOOL)autoDisconnectOnClosedReadStream { // Note: YES means kAllowHalfDuplexConnection is OFF if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { return ((config & kAllowHalfDuplexConnection) == 0); } else { __block BOOL result; dispatch_sync(socketQueue, ^{ result = ((self->config & kAllowHalfDuplexConnection) == 0); }); return result; } } /** * See header file for big discussion of this method. **/ - (void)setAutoDisconnectOnClosedReadStream:(BOOL)flag { // Note: YES means kAllowHalfDuplexConnection is OFF dispatch_block_t block = ^{ if (flag) self->config &= ~kAllowHalfDuplexConnection; else self->config |= kAllowHalfDuplexConnection; }; if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) block(); else dispatch_async(socketQueue, block); } /** * See header file for big discussion of this method. **/ - (void)markSocketQueueTargetQueue:(dispatch_queue_t)socketNewTargetQueue { void *nonNullUnusedPointer = (__bridge void *)self; dispatch_queue_set_specific(socketNewTargetQueue, IsOnSocketQueueOrTargetQueueKey, nonNullUnusedPointer, NULL); } /** * See header file for big discussion of this method. **/ - (void)unmarkSocketQueueTargetQueue:(dispatch_queue_t)socketOldTargetQueue { dispatch_queue_set_specific(socketOldTargetQueue, IsOnSocketQueueOrTargetQueueKey, NULL, NULL); } /** * See header file for big discussion of this method. **/ - (void)performBlock:(dispatch_block_t)block { if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) block(); else dispatch_sync(socketQueue, block); } /** * Questions? Have you read the header file? **/ - (int)socketFD { if (!dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { LogWarn(@"%@ - Method only available from within the context of a performBlock: invocation", THIS_METHOD); return SOCKET_NULL; } if (socket4FD != SOCKET_NULL) return socket4FD; else return socket6FD; } /** * Questions? Have you read the header file? **/ - (int)socket4FD { if (!dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { LogWarn(@"%@ - Method only available from within the context of a performBlock: invocation", THIS_METHOD); return SOCKET_NULL; } return socket4FD; } /** * Questions? Have you read the header file? **/ - (int)socket6FD { if (!dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { LogWarn(@"%@ - Method only available from within the context of a performBlock: invocation", THIS_METHOD); return SOCKET_NULL; } return socket6FD; } #if TARGET_OS_IPHONE /** * Questions? Have you read the header file? **/ - (CFReadStreamRef)readStream { if (!dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { LogWarn(@"%@ - Method only available from within the context of a performBlock: invocation", THIS_METHOD); return NULL; } if (readStream == NULL) [self createReadAndWriteStream]; return readStream; } /** * Questions? Have you read the header file? **/ - (CFWriteStreamRef)writeStream { if (!dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { LogWarn(@"%@ - Method only available from within the context of a performBlock: invocation", THIS_METHOD); return NULL; } if (writeStream == NULL) [self createReadAndWriteStream]; return writeStream; } - (BOOL)enableBackgroundingOnSocketWithCaveat:(BOOL)caveat { if (![self createReadAndWriteStream]) { // Error occurred creating streams (perhaps socket isn't open) return NO; } BOOL r1, r2; LogVerbose(@"Enabling backgrouding on socket"); #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" r1 = CFReadStreamSetProperty(readStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP); r2 = CFWriteStreamSetProperty(writeStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP); #pragma clang diagnostic pop if (!r1 || !r2) { return NO; } if (!caveat) { if (![self openStreams]) { return NO; } } return YES; } /** * Questions? Have you read the header file? **/ - (BOOL)enableBackgroundingOnSocket { LogTrace(); if (!dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { LogWarn(@"%@ - Method only available from within the context of a performBlock: invocation", THIS_METHOD); return NO; } return [self enableBackgroundingOnSocketWithCaveat:NO]; } - (BOOL)enableBackgroundingOnSocketWithCaveat // Deprecated in iOS 4.??? { // This method was created as a workaround for a bug in iOS. // Apple has since fixed this bug. // I'm not entirely sure which version of iOS they fixed it in... LogTrace(); if (!dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { LogWarn(@"%@ - Method only available from within the context of a performBlock: invocation", THIS_METHOD); return NO; } return [self enableBackgroundingOnSocketWithCaveat:YES]; } #endif - (SSLContextRef)sslContext { if (!dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { LogWarn(@"%@ - Method only available from within the context of a performBlock: invocation", THIS_METHOD); return NULL; } return sslContext; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #pragma mark Class Utilities //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + (NSMutableArray *)lookupHost:(NSString *)host port:(uint16_t)port error:(NSError **)errPtr { LogTrace(); NSMutableArray *addresses = nil; NSError *error = nil; if ([host isEqualToString:@"localhost"] || [host isEqualToString:@"loopback"]) { // Use LOOPBACK address struct sockaddr_in nativeAddr4; nativeAddr4.sin_len = sizeof(struct sockaddr_in); nativeAddr4.sin_family = AF_INET; nativeAddr4.sin_port = htons(port); nativeAddr4.sin_addr.s_addr = htonl(INADDR_LOOPBACK); memset(&(nativeAddr4.sin_zero), 0, sizeof(nativeAddr4.sin_zero)); struct sockaddr_in6 nativeAddr6; nativeAddr6.sin6_len = sizeof(struct sockaddr_in6); nativeAddr6.sin6_family = AF_INET6; nativeAddr6.sin6_port = htons(port); nativeAddr6.sin6_flowinfo = 0; nativeAddr6.sin6_addr = in6addr_loopback; nativeAddr6.sin6_scope_id = 0; // Wrap the native address structures NSData *address4 = [NSData dataWithBytes:&nativeAddr4 length:sizeof(nativeAddr4)]; NSData *address6 = [NSData dataWithBytes:&nativeAddr6 length:sizeof(nativeAddr6)]; addresses = [NSMutableArray arrayWithCapacity:2]; [addresses addObject:address4]; [addresses addObject:address6]; } else { NSString *portStr = [NSString stringWithFormat:@"%hu", port]; struct addrinfo hints, *res, *res0; memset(&hints, 0, sizeof(hints)); hints.ai_family = PF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; int gai_error = getaddrinfo([host UTF8String], [portStr UTF8String], &hints, &res0); if (gai_error) { error = [self gaiError:gai_error]; } else { NSUInteger capacity = 0; for (res = res0; res; res = res->ai_next) { if (res->ai_family == AF_INET || res->ai_family == AF_INET6) { capacity++; } } addresses = [NSMutableArray arrayWithCapacity:capacity]; for (res = res0; res; res = res->ai_next) { if (res->ai_family == AF_INET) { // Found IPv4 address. // Wrap the native address structure, and add to results. NSData *address4 = [NSData dataWithBytes:res->ai_addr length:res->ai_addrlen]; [addresses addObject:address4]; } else if (res->ai_family == AF_INET6) { // Fixes connection issues with IPv6 // https://github.com/robbiehanson/CocoaAsyncSocket/issues/429#issuecomment-222477158 // Found IPv6 address. // Wrap the native address structure, and add to results. struct sockaddr_in6 *sockaddr = (struct sockaddr_in6 *)(void *)res->ai_addr; in_port_t *portPtr = &sockaddr->sin6_port; if ((portPtr != NULL) && (*portPtr == 0)) { *portPtr = htons(port); } NSData *address6 = [NSData dataWithBytes:res->ai_addr length:res->ai_addrlen]; [addresses addObject:address6]; } } freeaddrinfo(res0); if ([addresses count] == 0) { error = [self gaiError:EAI_FAIL]; } } } if (errPtr) *errPtr = error; return addresses; } + (NSString *)hostFromSockaddr4:(const struct sockaddr_in *)pSockaddr4 { char addrBuf[INET_ADDRSTRLEN]; if (inet_ntop(AF_INET, &pSockaddr4->sin_addr, addrBuf, (socklen_t)sizeof(addrBuf)) == NULL) { addrBuf[0] = '\0'; } return [NSString stringWithCString:addrBuf encoding:NSASCIIStringEncoding]; } + (NSString *)hostFromSockaddr6:(const struct sockaddr_in6 *)pSockaddr6 { char addrBuf[INET6_ADDRSTRLEN]; if (inet_ntop(AF_INET6, &pSockaddr6->sin6_addr, addrBuf, (socklen_t)sizeof(addrBuf)) == NULL) { addrBuf[0] = '\0'; } return [NSString stringWithCString:addrBuf encoding:NSASCIIStringEncoding]; } + (uint16_t)portFromSockaddr4:(const struct sockaddr_in *)pSockaddr4 { return ntohs(pSockaddr4->sin_port); } + (uint16_t)portFromSockaddr6:(const struct sockaddr_in6 *)pSockaddr6 { return ntohs(pSockaddr6->sin6_port); } + (NSURL *)urlFromSockaddrUN:(const struct sockaddr_un *)pSockaddr { NSString *path = [NSString stringWithUTF8String:pSockaddr->sun_path]; return [NSURL fileURLWithPath:path]; } + (NSString *)hostFromAddress:(NSData *)address { NSString *host; if ([self getHost:&host port:NULL fromAddress:address]) return host; else return nil; } + (uint16_t)portFromAddress:(NSData *)address { uint16_t port; if ([self getHost:NULL port:&port fromAddress:address]) return port; else return 0; } + (BOOL)isIPv4Address:(NSData *)address { if ([address length] >= sizeof(struct sockaddr)) { const struct sockaddr *sockaddrX = [address bytes]; if (sockaddrX->sa_family == AF_INET) { return YES; } } return NO; } + (BOOL)isIPv6Address:(NSData *)address { if ([address length] >= sizeof(struct sockaddr)) { const struct sockaddr *sockaddrX = [address bytes]; if (sockaddrX->sa_family == AF_INET6) { return YES; } } return NO; } + (BOOL)getHost:(NSString **)hostPtr port:(uint16_t *)portPtr fromAddress:(NSData *)address { return [self getHost:hostPtr port:portPtr family:NULL fromAddress:address]; } + (BOOL)getHost:(NSString **)hostPtr port:(uint16_t *)portPtr family:(sa_family_t *)afPtr fromAddress:(NSData *)address { if ([address length] >= sizeof(struct sockaddr)) { const struct sockaddr *sockaddrX = [address bytes]; if (sockaddrX->sa_family == AF_INET) { if ([address length] >= sizeof(struct sockaddr_in)) { struct sockaddr_in sockaddr4; memcpy(&sockaddr4, sockaddrX, sizeof(sockaddr4)); if (hostPtr) *hostPtr = [self hostFromSockaddr4:&sockaddr4]; if (portPtr) *portPtr = [self portFromSockaddr4:&sockaddr4]; if (afPtr) *afPtr = AF_INET; return YES; } } else if (sockaddrX->sa_family == AF_INET6) { if ([address length] >= sizeof(struct sockaddr_in6)) { struct sockaddr_in6 sockaddr6; memcpy(&sockaddr6, sockaddrX, sizeof(sockaddr6)); if (hostPtr) *hostPtr = [self hostFromSockaddr6:&sockaddr6]; if (portPtr) *portPtr = [self portFromSockaddr6:&sockaddr6]; if (afPtr) *afPtr = AF_INET6; return YES; } } } return NO; } + (NSData *)CRLFData { return [NSData dataWithBytes:"\x0D\x0A" length:2]; } + (NSData *)CRData { return [NSData dataWithBytes:"\x0D" length:1]; } + (NSData *)LFData { return [NSData dataWithBytes:"\x0A" length:1]; } + (NSData *)ZeroData { return [NSData dataWithBytes:"" length:1]; } @end ================================================ FILE: Trojan/tcping/tcping.swift ================================================ // // tcping.swift // tcping // // Created by ParadiseDuo on 2020/3/26. // Copyright © 2020 ParadiseDuo. All rights reserved. // import Cocoa class TcpCollection { fileprivate var list = [tcping]() func append(_ newElm: tcping) { list.append(newElm) } var count: Int { get { return list.count } } var first: tcping? { get { return list.first } } subscript(index:Int) -> tcping { get { return list[index] } set(newElm) { list.insert(newElm, at: index) } } func insert(_ newElm: tcping, index: Int) { list.insert(newElm, at: index) } func averageSpeed() -> NSNumber { let successArr = list.filter { (p) -> Bool in return p.speed != TimeInterval.infinity } if successArr.count > 0 { let avge = successArr.reduce(0.0) { (result: Double, p: tcping) -> Double in return result+p.speed}/Double(successArr.count) return NSNumber(value: avge) } return NSNumber(value: Double.infinity) } } class tcping: NSObject, GCDAsyncSocketDelegate { var socket:GCDAsyncSocket? var startTime = Date() var speed = TimeInterval.infinity var domain = "" var host = "" var port:UInt16 = 80 func connectSocket(domain: String, port: UInt16) { self.domain = domain self.port = port self.socket = GCDAsyncSocket(delegate: self, delegateQueue: DispatchQueue.main) if !self.socket!.isConnected { do { startTime = Date() try self.socket?.connect(toHost: domain, onPort: port, withTimeout: Tcping.timeout) } catch let error { print(error) } } } func socket(_ sock: GCDAsyncSocket, didConnectToHost host: String, port: UInt16) { self.host = host self.speed = Date().timeIntervalSince(startTime) * 1000 sock.disconnect() } } class Tcping { static let timeout:TimeInterval = 0.9 var count = 5 var timer:Timer? var speedStringDomain = [String: TcpCollection]() var pings = [tcping]() func ping(finish: @escaping ()->()) { let SerMgr = Profiles.shared if SerMgr.profiles.count <= 0 { finish() return } nerverTestBefore = false count = 5 if let _ = self.timer { self.timer?.invalidate() self.timer = nil } self.timer = Timer(timeInterval: Tcping.timeout+0.1, repeats: true) { [weak self] (t) in guard let w = self else { finish() return } if w.count > 0 { print("Tcping Residual times \(w.count)") for item in SerMgr.profiles { let t = tcping() w.pings.append(t) t.connectSocket(domain: item.client.remote_addr, port: UInt16(item.client.remote_port)) } w.count-=1 } else { w.timer?.invalidate() w.timer = nil //对结果按照域名进行分组 for item in w.pings { var inserted = false if let ts = w.speedStringDomain[item.domain] { ts.append(item) inserted = true } if !inserted { let ts = TcpCollection() ts.append(item) w.speedStringDomain[item.domain] = ts } } let nf = NumberFormatter() nf.numberStyle = .decimal nf.maximumFractionDigits = 3 var fastID = 0 var fastSpeed = Double.infinity //存数据与找出最快节点 for i in 0.. /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; CF7283FE56C93B4CD1F4F80E /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-Trojan/Pods-Trojan-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-Trojan/Pods-Trojan-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Trojan/Pods-Trojan-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; FBF25DEDE67A777C265FCA57 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( "${PODS_PODFILE_DIR_PATH}/Podfile.lock", "${PODS_ROOT}/Manifest.lock", ); name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( "$(DERIVED_FILE_DIR)/Pods-ProxyConfHelper-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ BE4649FB243C29CE00BE8336 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( BE464A2A243C2ABC00BE8336 /* LogWindowController.swift in Sources */, BE524E0E245F00E6003F3E80 /* ProxyConfHelper.m in Sources */, BE464A2B243C2ABC00BE8336 /* SettingWindowController.swift in Sources */, BE464A13243C2A7E00BE8336 /* StatusMenuManager.swift in Sources */, BE464A1F243C2AA900BE8336 /* VersionChecker.swift in Sources */, BEA246F025303F9500F7B080 /* tcping.swift in Sources */, BE464A1D243C2AA500BE8336 /* Configuration.swift in Sources */, E8BA62B2247CEBA500557A6E /* ModeSwitcher.swift in Sources */, BE59998A247923C5002177A2 /* SettingsWIndowController.swift in Sources */, BE47162B252092A6001F8B18 /* NetSpeedMonitor.m in Sources */, BEAB09232530104700B0BD3E /* SubscribePreferenceWindowController.swift in Sources */, BE464A15243C2A8300BE8336 /* Profile.swift in Sources */, BE464A29243C2ABC00BE8336 /* ToastWindowController.swift in Sources */, BE47162F25209534001F8B18 /* SpeedTools.swift in Sources */, BE464A1B243C2AA100BE8336 /* CommandLine.swift in Sources */, BEA246EF25303F9500F7B080 /* GCDAsyncSocket.m in Sources */, BE11D0B12461232E00075E25 /* LaunchAgentHelper.swift in Sources */, BEAB091B25300F5E00B0BD3E /* SubscribeManager.swift in Sources */, BE464A03243C29CE00BE8336 /* AppDelegate.swift in Sources */, BEAB09172530006000B0BD3E /* Utils.swift in Sources */, BEAB090F252FFE8C00B0BD3E /* Subscribe.swift in Sources */, BEAB0913252FFEEA00B0BD3E /* Network.swift in Sources */, BE59998D24792E06002177A2 /* LoginServiceKit.swift in Sources */, BEA246E825303F4200F7B080 /* ConnectTestigManager.swift in Sources */, BEFBF63E243CC1D0006972DF /* EditableNSTextView.swift in Sources */, BEC48A01245FC79000891EAC /* PAC.swift in Sources */, BE464A17243C2A8900BE8336 /* Json.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; BE524E00245EFF3C003F3E80 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( BE524E07245EFF3C003F3E80 /* main.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ BE11D0A42461204300075E25 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = BE524E03245EFF3C003F3E80 /* ProxyConfHelper */; targetProxy = BE11D0A32461204300075E25 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ BE464A06243C29CE00BE8336 /* MainMenu.xib */ = { isa = PBXVariantGroup; children = ( BE464A07243C29CE00BE8336 /* Base */, E82CD55E249C736500EA38FD /* zh-Hans */, ); name = MainMenu.xib; sourceTree = ""; }; BEA246BB253031EB00F7B080 /* SubscribePreferenceWindowController.xib */ = { isa = PBXVariantGroup; children = ( BEA246BA253031EB00F7B080 /* Base */, BEA246BF253031F000F7B080 /* zh-Hans */, ); name = SubscribePreferenceWindowController.xib; sourceTree = ""; }; E82CD561249C781000EA38FD /* SettingWindowController.xib */ = { isa = PBXVariantGroup; children = ( E82CD562249C781600EA38FD /* Base */, E82CD564249C784000EA38FD /* zh-Hans */, ); name = SettingWindowController.xib; sourceTree = ""; }; E82CD567249C788400EA38FD /* SettingsWIndowController.xib */ = { isa = PBXVariantGroup; children = ( E82CD566249C788400EA38FD /* Base */, E82CD569249C788900EA38FD /* zh-Hans */, ); name = SettingsWIndowController.xib; sourceTree = ""; }; E82CD56F249C7A3E00EA38FD /* Localizable.strings */ = { isa = PBXVariantGroup; children = ( E82CD56E249C7A3E00EA38FD /* zh-Hans */, E82CD570249C7B7900EA38FD /* en */, ); name = Localizable.strings; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ BE464A0B243C29CE00BE8336 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.12; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; BE464A0C243C29CE00BE8336 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.12; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; SWIFT_OPTIMIZATION_LEVEL = "-O"; }; name = Release; }; BE464A0E243C29CE00BE8336 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 5D8AA9966E1D35373DF930DB /* Pods-Trojan.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Trojan/Trojan.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = 4J772T4V7C; ENABLE_HARDENED_RUNTIME = YES; INFOPLIST_FILE = Trojan/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", ); LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Trojan/InstallHelper", ); MACOSX_DEPLOYMENT_TARGET = 10.12; MARKETING_VERSION = 2.1; PRODUCT_BUNDLE_IDENTIFIER = MacOS.Trojan; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Trojan/Trojan-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; }; name = Debug; }; BE464A0F243C29CE00BE8336 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 1AC85AC4F6A665FFBF5E32F6 /* Pods-Trojan.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Trojan/Trojan.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = 4J772T4V7C; ENABLE_HARDENED_RUNTIME = YES; INFOPLIST_FILE = Trojan/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", ); LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Trojan/InstallHelper", ); MACOSX_DEPLOYMENT_TARGET = 10.12; MARKETING_VERSION = 2.1; OTHER_CODE_SIGN_FLAGS = "--timestamp"; PRODUCT_BUNDLE_IDENTIFIER = MacOS.Trojan; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Trojan/Trojan-Bridging-Header.h"; SWIFT_VERSION = 5.0; }; name = Release; }; BE524E08245EFF3C003F3E80 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = EC62B1D04D8D5DC345607E41 /* Pods-ProxyConfHelper.debug.xcconfig */; buildSettings = { CODE_SIGN_STYLE = Automatic; MACOSX_DEPLOYMENT_TARGET = 10.12; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; BE524E09245EFF3C003F3E80 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 67B6D44C12B2FDD442F3F62D /* Pods-ProxyConfHelper.release.xcconfig */; buildSettings = { CODE_SIGN_STYLE = Automatic; MACOSX_DEPLOYMENT_TARGET = 10.12; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ BE4649FA243C29CE00BE8336 /* Build configuration list for PBXProject "Trojan" */ = { isa = XCConfigurationList; buildConfigurations = ( BE464A0B243C29CE00BE8336 /* Debug */, BE464A0C243C29CE00BE8336 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; BE464A0D243C29CE00BE8336 /* Build configuration list for PBXNativeTarget "Trojan" */ = { isa = XCConfigurationList; buildConfigurations = ( BE464A0E243C29CE00BE8336 /* Debug */, BE464A0F243C29CE00BE8336 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; BE524E0A245EFF3C003F3E80 /* Build configuration list for PBXNativeTarget "ProxyConfHelper" */ = { isa = XCConfigurationList; buildConfigurations = ( BE524E08245EFF3C003F3E80 /* Debug */, BE524E09245EFF3C003F3E80 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = BE4649F7243C29CE00BE8336 /* Project object */; }