diff --git a/.gitignore b/.gitignore index 5894c99b9..0289a0bdf 100644 --- a/.gitignore +++ b/.gitignore @@ -41,6 +41,11 @@ frontend/src/xpack backend/xpack backend/router/entry_xpack.go backend/server/init_xpack.go +plugins/openresty/waf/db +plugins/openresty/waf/data +plugins/openresty/waf/sites +plugins/openresty/waf/conf/websites.json + .history/ dist/ diff --git a/plugins/openresty/waf/conf/global.json b/plugins/openresty/waf/conf/global.json new file mode 100644 index 000000000..54d372f8b --- /dev/null +++ b/plugins/openresty/waf/conf/global.json @@ -0,0 +1,160 @@ +{ + "waf": "on", + "mode": "protection", + "secret": "qwer1234", + "redis": { + "state": "off", + "host": "127.0.0.1", + "port": 6379, + "password": "Calong@2015", + "ssl": false, + "poolSize": 10 + }, + "ipWhite": { + "state": "on" + }, + "ipBlack": { + "state": "on", + "code": 403, + "action": "deny", + "type": "ipBlack", + "res": "ip" + }, + "urlWhite": { + "state": "on" + }, + "urlBlack": { + "type": "urlBlack", + "state": "on", + "code": 403, + "action": "deny" + }, + "uaWhite": { + "state": "off" + }, + "uaBlack": { + "type": "uaBlack", + "state": "on", + "code": 403, + "action": "deny" + }, + "notFoundCount": { + "state": "on", + "type": "notFoundCount", + "threshold": 10, + "duration": 60, + "action": "deny", + "ipBlock": "on", + "ipBlockTime": 600 + }, + "methodWhite": { + "type": "methodWhite", + "state": "on", + "code": 444, + "action": "deny" + }, + "bot": { + "state": "on", + "type": "bot", + "uri": "/1pwaf/bot/trap", + "action": "REDIRECT_JS", + "ipBlock": "on", + "ipBlockTime": 600 + }, + "geoRestrict": { + "state": "on", + "rules": [], + "action": "deny" + }, + "defaultIpBlack": { + "state": "on", + "type": "defaultIpBlack", + "code": 444, + "action": "deny" + }, + "xss": { + "state": "on", + "type": "xss", + "code": 444, + "action": "deny" + }, + "sql": { + "state": "on", + "type": "sql", + "code": 444, + "action": "deny" + }, + "cc": { + "state": "on", + "type": "cc", + "rule": "cc", + "tokenTimeOut": 1800, + "threshold": 100, + "duration": 60, + "action": "deny", + "ipBlock": "on", + "ipBlockTime": 600 + }, + "ccurl": { + "state": "on", + "type": "urlcc", + "rule": "urlcc", + "action": "deny", + "ipBlock": "on", + "ipBlockTime": 600 + }, + "attackCount": { + "state": "on", + "type": "attackCount", + "threshold": 20, + "duration": 60, + "action": "deny", + "ipBlock": "on", + "ipBlockTime": 600 + }, + "fileExtCheck": { + "state": "on", + "action": "deny", + "code": 403, + "type": "fileExtCheck", + "extList": [ + "php", + "jsp", + "asp", + "exe", + "sh" + ] + }, + "cookie": { + "type": "cookie", + "state": "on", + "code": 403, + "action": "deny", + "ipBlock": "on", + "ipBlockTime": 600 + }, + "header": { + "state": "on", + "type": "header", + "code": 403, + "action": "deny", + "ipBlock": "on", + "ipBlockTime": 600 + }, + "defaultUaBlack": { + "type": "defaultUaBlack", + "state": "on", + "code": 403, + "ipBlock": "on", + "ipBlockTime": 600, + "action": "deny" + }, + "args": { + "type": "args", + "state": "on", + "code": 403, + "action": "deny", + "ipBlock": "on", + "ipBlockTime": 600 + } +} diff --git a/plugins/openresty/waf/conf/waf.conf b/plugins/openresty/waf/conf/waf.conf new file mode 100644 index 000000000..db4086a81 --- /dev/null +++ b/plugins/openresty/waf/conf/waf.conf @@ -0,0 +1,11 @@ +lua_shared_dict dict_locks 100k; +lua_shared_dict dict_req_count 10m; +lua_shared_dict waf 30m; +lua_shared_dict waf_black_ip 10m; +lua_shared_dict waf_limit 10m; +lua_shared_dict waf_accesstoken 10m; + +lua_package_path "/usr/local/openresty/1pwaf/?.lua;/usr/local/openresty/1pwaf/lib/?.lua;;"; +init_by_lua_file /usr/local/openresty/1pwaf/init.lua; +access_by_lua_file /usr/local/openresty/1pwaf/waf.lua; +log_by_lua_file /usr/local/openresty/1pwaf/log_and_traffic.lua; \ No newline at end of file diff --git a/plugins/openresty/waf/config.lua b/plugins/openresty/waf/config.lua new file mode 100644 index 000000000..268405fb4 --- /dev/null +++ b/plugins/openresty/waf/config.lua @@ -0,0 +1,155 @@ +local file_utils = require "file" +local lfs = require "lfs" +local cjson = require "cjson" + +local read_rule = file_utils.read_rule +local read_file2string = file_utils.read_file2string +local read_file2table = file_utils.read_file2table +local list_dir = lfs.dir +local attributes = lfs.attributes +local match_str = string.match + +local waf_dir = "/usr/local/openresty/1pwaf/" +local config_dir = waf_dir .. 'conf/' +local global_rule_dir = waf_dir .. 'rules/' +local site_dir = waf_dir .. 'sites/' + +local _M = {} +local config = {} + +local function init_sites_config() + local site_config = {} + local site_rules = {} + for entry in list_dir(site_dir) do + if entry ~= "." and entry ~= ".." then + local site_path = site_dir .. entry .. "/" + if attributes(site_path, "mode") == "directory" then + local site_key = entry + for s_entry in list_dir(site_path) do + local s_entry_path = site_path .. s_entry + if attributes(s_entry_path, "mode") == "file" and s_entry == "config.json" then + local s_config = read_file2table(s_entry_path) + site_config[site_key] = s_config + end + if attributes(s_entry_path, "mode") == "directory" and s_entry == "rules" then + local s_rules = {} + local rule_dir = s_entry_path .. "/" + for r_file in list_dir(rule_dir) do + if r_file ~= "." and r_file ~= ".." then + local rule_path = rule_dir .. r_file + local rule_type = match_str(r_file, "(.-)%.json$") + if attributes(rule_path, "mode") == "file" then + local s_rule = nil + if rule_type == "methodWhite" then + s_rule = read_rule(rule_dir, rule_type, true) + else + s_rule = read_rule(rule_dir, rule_type) + end + s_rules[rule_type] = s_rule + end + end + end + site_rules[site_key] = s_rules + end + end + end + end + end + ngx.log(ngx.NOTICE, "Load config" .. cjson.encode(site_config)) + config.site_config = site_config + ngx.log(ngx.NOTICE, "Load rules" .. cjson.encode(site_rules)) + config.site_rules = site_rules +end + +local function ini_waf_info() + local waf_info = read_file2table(waf_dir .. 'waf.json') + if waf_info then + ngx.log(ngx.NOTICE, "Load " .. waf_info.name .. " Version:" .. waf_info.version) + end +end + +local function init_global_config() + local global_config = read_file2table(config_dir .. 'global.json') + config.global_config = global_config + config.isProtectionMode = global_config["mode"] == "protection" and true or false + + local rules = {} + rules.uaBlack = read_rule(global_rule_dir, "uaBlack") + rules.uaWhite = read_rule(global_rule_dir, "uaWhite") + rules.urlBlack = read_rule(global_rule_dir, "urlBlack") + rules.urlWhite = read_rule(global_rule_dir, "urlWhite") + rules.ipBlack = read_rule(global_rule_dir, "ipBlack") + rules.ipWhite = read_rule(global_rule_dir, "ipWhite") + rules.args = read_rule(global_rule_dir, "args") + rules.cookie = read_rule(global_rule_dir, "cookie") + rules.defaultUaBlack = read_rule(global_rule_dir, "defaultUaBlack") + rules.header = read_rule(global_rule_dir, "header") + + config.global_rules = rules + + local html_res = {} + local htmDir = waf_dir .. "html/" + html_res.slide = read_file2string(htmDir .. "slide.html") + html_res.slide_js = read_file2string(htmDir .. "slide.js") + html_res.five_second = read_file2string(htmDir .. "5s.html") + html_res.five_second_js = read_file2string(htmDir .. "5s.js") + html_res.redirect = read_file2string(htmDir .. "redirect.html") + html_res.ip = read_file2string(htmDir .. "ip.html") + + config.html_res = html_res + + _M.waf_dir = waf_dir + _M.config_dir = config_dir +end + +function _M.load_config_file() + ini_waf_info() + init_global_config() + init_sites_config() +end + +function _M.get_site_config(website_key) + return config.site_config[website_key] +end + +function _M.get_site_rules(website_key) + return config.site_rules[website_key] +end + +function _M.get_global_config(name) + return config.global_config[name] +end + +function _M.get_global_rules(name) + return config.global_rules[name] +end + +function _M.is_global_state_on(name) + return config.global_config[name]["state"] == "on" and true or false +end + +function _M.is_site_state_on(name) + return config.site_config[name]["state"] == "on" and true or false +end + +function _M.get_redis_config() + return config.global_config["redis"] +end + +function _M.get_html_res(name) + return config.html_res[name] +end + +function _M.is_waf_on() + return config.global_config["waf"] == "on" and true or false +end + +function _M.is_redis_on() + return config.global_config["redis"] == "on" and true or false +end + +function _M.get_secret() + return config.global_config["secret"] +end + +return _M \ No newline at end of file diff --git a/plugins/openresty/waf/db.lua b/plugins/openresty/waf/db.lua new file mode 100644 index 000000000..4a9f92b41 --- /dev/null +++ b/plugins/openresty/waf/db.lua @@ -0,0 +1,89 @@ +local config = require "config" + +local open_file = io.open +local exec = os.execute +local pcall = pcall + +local _M = {} + +local function init_dir(path) + local file = open_file(path, "rb") + if not file then + exec("mkdir -p " .. path) + end +end + +local function check_table(table_name) + if wafdb == nil then + return false + end + local stmt = wafdb:prepare("SELECT COUNT(*) FROM sqlite_master where type='table' and name=?") + local rows = 0 + if stmt ~= nil then + stmt:bind_values(table_name) + stmt:step() + rows = stmt:get_uvalues() + stmt:finalize() + end + return rows > 0 +end + +function _M.init_db() + local ok, sqlite3 = pcall(function() + return require "lsqlite3" + end) + if not ok then + return false + end + if wafdb then + return false + end + local path = config.waf_dir .. "db/" + init_dir(path) + local db_path = path .. "1pwaf.db" + if wafdb == nil or not wafdb:isopen() then + wafdb = sqlite3.open(db_path) + if wafdb == nil then + return false + end + wafdb:exec([[PRAGMA journal_mode = wal]]) + wafdb:exec([[PRAGMA synchronous = 0]]) + wafdb:exec([[PRAGMA page_size = 8192]]) + wafdb:exec([[PRAGMA journal_size_limit = 2147483648]]) + end + local status = {} + if not check_table("attack_log") then + status = wafdb:exec([[ + CREATE TABLE attack_log ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + ip TEXT, + ip_city TEXT, + ip_country TEXT, + ip_subdivisions TEXT, + ip_continent TEXT, + ip_longitude TEXT, + ip_latitude TEXT, + time INTEGER, + localtime TEXT, + server_name TEXT, + website_key TEXT, + host TEXT, + method TEXT, + uri TEXT, + user_agent TEXT, + rule TEXT, + nginx_log TEXT, + blocking_time INTEGER, + action TEXT, + msg TEXT, + params TEXT, + is_block INTEGER + )]]) + + ngx.log(ngx.ERR, "init db status" .. status) + end + + ngx.log(ngx.ERR, "init db success") +end + +return _M \ No newline at end of file diff --git a/plugins/openresty/waf/html/5s.html b/plugins/openresty/waf/html/5s.html new file mode 100644 index 000000000..245ad7708 --- /dev/null +++ b/plugins/openresty/waf/html/5s.html @@ -0,0 +1,21 @@ + + + +5s + + + +
+
正在验证...
+
验证成功
+
+
+ + + diff --git a/plugins/openresty/waf/html/5s.js b/plugins/openresty/waf/html/5s.js new file mode 100644 index 000000000..7be80bc94 --- /dev/null +++ b/plugins/openresty/waf/html/5s.js @@ -0,0 +1,24 @@ +window.onload = function () { + setTimeout(function () { + showSuccess(); + verifySucc(); + }, 5000); + + function showSuccess() { + document.getElementById("loadingText").style.display = "none"; + document.getElementById("loadingSuccess").style.display = "block"; + document.querySelector(".loadingSpinner").style.display = "none"; + } + + function verifySucc() { + let xhr = new XMLHttpRequest(); + xhr.onreadystatechange = function () { + if (xhr.readyState === 4 && xhr.status === 200) { + window.location.reload(); + } + }; + const requestUrl = "%s-%s-%s"; + xhr.open("GET", requestUrl, true); + xhr.send(); + } +} \ No newline at end of file diff --git a/plugins/openresty/waf/html/ip.html b/plugins/openresty/waf/html/ip.html new file mode 100644 index 000000000..95b3c4f02 --- /dev/null +++ b/plugins/openresty/waf/html/ip.html @@ -0,0 +1,29 @@ + + + + 访问被拒绝 + + + +
+
无法访问
+
+

很抱歉,您的 IP 已被禁止访问

+
    +
  1. 如被误封,请联系网站管理员解封
  2. +
+
+ +
+ + diff --git a/plugins/openresty/waf/html/redirect.html b/plugins/openresty/waf/html/redirect.html new file mode 100644 index 000000000..64c776b47 --- /dev/null +++ b/plugins/openresty/waf/html/redirect.html @@ -0,0 +1,24 @@ + + + + 网站防火墙 + + + +
+
网站防火墙
+
+

您的请求不合法,已被拒绝

+
+ +
+ + diff --git a/plugins/openresty/waf/html/slide.html b/plugins/openresty/waf/html/slide.html new file mode 100644 index 000000000..2b62dfbad --- /dev/null +++ b/plugins/openresty/waf/html/slide.html @@ -0,0 +1,26 @@ + + + +滑动认证 + + + +
+
+
+
+
+
+
+ + + diff --git a/plugins/openresty/waf/html/slide.js b/plugins/openresty/waf/html/slide.js new file mode 100644 index 000000000..d5df91929 --- /dev/null +++ b/plugins/openresty/waf/html/slide.js @@ -0,0 +1 @@ +window.onload=function(){(function(){const dragContainer=document.getElementById("dragContainer");const dragBg=document.getElementById("dragBg");const dragText=document.getElementById("dragText");const dragHandler=document.getElementById("dragHandler");const maxHandleOffset=dragContainer.clientWidth-dragHandler.clientWidth;let isVertifySucc=false;initDrag();function initDrag(){dragText.textContent="拖动滑块验证";dragHandler.addEventListener("mousedown",onDragStart);dragHandler.addEventListener("touchstart",onDragStart)}function onDragStart(a){a.preventDefault();if(a.type==="mousedown"||(a.type==="touchstart"&&a.touches.length===1)){document.addEventListener("mousemove",onDragMove);document.addEventListener("touchmove",onDragMove);document.addEventListener("mouseup",onDragEnd);document.addEventListener("touchend",onDragEnd)}}function onDragMove(a){let clientX;if(a.type==="mousemove"){clientX=a.clientX}else if(a.type==="touchmove"&&a.touches.length===1){clientX=a.touches[0].clientX}let containerOffsetX=clientX-dragContainer.getBoundingClientRect().left;let left=containerOffsetX-dragHandler.clientWidth/2;if(left<0){left=0}else if(left>maxHandleOffset){left=maxHandleOffset}dragHandler.style.left=left+"px";dragBg.style.width=dragHandler.style.left}function onDragEnd(){document.removeEventListener("mousemove",onDragMove);document.removeEventListener("touchmove",onDragMove);document.removeEventListener("mouseup",onDragEnd);document.removeEventListener("touchend",onDragEnd);if(!isVertifySucc){let left=dragHandler.offsetLeft;if(left>=maxHandleOffset){verifySucc()}else{dragHandler.style.left="0px";dragBg.style.width="0px"}}}function verifySucc(){isVertifySucc=true;dragText.textContent="验证通过";dragText.style.color="white";dragHandler.setAttribute("class","dragHandlerOkBg");dragHandler.removeEventListener("mousedown",onDragStart);dragHandler.removeEventListener("touchstart",onDragStart);let xhr=new XMLHttpRequest();xhr.onreadystatechange=function(){if(xhr.readyState===4&&xhr.status===200){window.location.reload()}};const requestUrl="%s-%s-%s";xhr.open("GET",requestUrl,true);xhr.send()}})()}; \ No newline at end of file diff --git a/plugins/openresty/waf/init.lua b/plugins/openresty/waf/init.lua new file mode 100644 index 000000000..fdac637a3 --- /dev/null +++ b/plugins/openresty/waf/init.lua @@ -0,0 +1,9 @@ +local db = require "db" +local config = require "config" + +config.load_config_file() + +db.init_db() + + + diff --git a/plugins/openresty/waf/lib/action.lua b/plugins/openresty/waf/lib/action.lua new file mode 100644 index 000000000..79ec5a326 --- /dev/null +++ b/plugins/openresty/waf/lib/action.lua @@ -0,0 +1,184 @@ +local config = require "config" +local redis_util = require "redis_util" +local format_str = string.format + +local _M = {} + +local function deny(status_code, res) + ngx.status = status_code + if res then + ngx.header.content_type = "text/html; charset=UTF-8" + ngx.say(config.get_html_res(res)) + end + ngx.exit(ngx.status) +end + +local function redirect(status_code) + ngx.header.content_type = "text/html; charset=UTF-8" + ngx.say(config.get_html_res("redirect")) + ngx.status = status_code + ngx.exit(ngx.status) +end + +local function slide() + ngx.header.content_type = "text/html; charset=UTF-8" + ngx.header.Cache_Control = "no-cache" + ngx.status = 200 + ngx.say(format_str(config.get_html_res("slide"), ngx.md5(ngx.ctx.ip))) + ngx.exit(ngx.status) +end + +local function five_second() + ngx.header.content_type = "text/html; charset=UTF-8" + ngx.header.Cache_Control = "no-cache" + ngx.status = 200 + ngx.say(format_str(config.get_html_res("five_second"), ngx.md5(ngx.ctx.ip))) + ngx.exit(ngx.status) +end + +function _M.block_ip(ip, rule) + local ok, err = nil, nil + local msg = "拉黑IP : " .. ip .. "国家 " .. ngx.ctx.geoip.country["zh"] + if rule then + msg = msg .. " 规则 " .. rule.type + end + + ngx.log(ngx.ERR, msg) + + if config.redis_on then + local red, err1 = redis_util.get_conn() + if not red then + return nil, err1 + end + local key = "black_ip:" .. ip + + local exists = red:exists(key) + if exists == 0 then + ok, err = red:set(key, 1) + if ok then + ngx.ctx.ipBlocked = true + else + ngx.log(ngx.ERR, "failed to set redis key " .. key, err) + end + end + + if rule.ipBlockTime > 0 then + ok, err = red:expire(key, rule.ipBlockTime) + if not ok then + ngx.log(ngx.ERR, "failed to expire redis key " .. key, err) + end + end + + redis_util.close_conn(red) + else + local wafBlackIp = ngx.shared.waf_black_ip + local exists = wafBlackIp:get(ip) + if not exists then + ok, err = wafBlackIp:set(ip, 1, rule.ipBlockTime) + if ok then + ngx.ctx.ipBlocked = true + else + ngx.log(ngx.ERR, "failed to set key " .. ip, err) + end + elseif rule.ipBlockTime > 0 then + ok, err = wafBlackIp:expire(ip, rule.ipBlockTime) + if ok then + ngx.ctx.ipBlocked = true + else + ngx.log(ngx.ERR, "failed to expire key " .. ip, err) + end + end + end + + return ok +end + +local function attack_count(config_type) + if config_type == "ipBlack" then + return + end + if config.is_global_state_on("attackCount") then + local ip = ngx.ctx.ip + local attack_config = config.get_global_config("attackCount") + local key = ip + + if config.is_redis_on() then + key = "cc_attack_count:" .. key + local count, _ = redis_util.incr(key, attack_config.duration) + if not count then + redis_util.set(key, 1, attack_config.duration) + elseif count >= attack_config.threshold then + _M.block_ip(ip, attack_config) + return + end + else + key = ip .. "attack" + local limit = ngx.shared.waf_limit + local count, _ = limit:incr(key, 1, 0, attack_config.duration) + + if not count then + limit:set(key, 1, attack_config.duration) + elseif count >= attack_config.threshold then + _M.block_ip(ip, attack_config) + return + end + end + end +end + +function _M.exec_action(rule_config, match_rule, data) + local action = rule_config.action + + if match_rule then + rule_config.rule = match_rule.rule + else + rule_config.rule = "默认" + end + + ngx.ctx.rule_table = rule_config + ngx.ctx.action = action + ngx.ctx.hitData = data + ngx.ctx.isAttack = true + + if rule_config.ipBlock and rule_config.ipBlock == 'on' then + _M.block_ip(ngx.ctx.ip, rule_config) + end + + if rule_config.type == nil then + rule_config.type = "默认" + end + + attack_count(rule_config.type) + + local msg = "访问 IP " .. ngx.ctx.ip .. " 访问 URL" .. ngx.var.uri .. " 触发动作 " .. action .. "User-Agent" .. ngx.ctx.ua .. " 规则类型 " .. rule_config.type .. " 规则 " .. rule_config.rule + if ngx.ctx.country then + msg = "国家" .. ngx.ctx.country["zh"] + end + if ngx.ctx.city then + msg = "省份" .. ngx.ctx.city["zh"] + end + + ngx.log(ngx.ERR, msg) + if action == "allow" then + return + + elseif action == "deny" then + if rule_config.code and rule_config.code ~= 444 then + deny(rule_config.code, rule_config.res) + else + deny(444) + end + + elseif action == "slide" then + slide() + + elseif action == "fives" then + five_second() + + else + redirect(444) + end + +end + +return _M diff --git a/plugins/openresty/waf/lib/cc.lua b/plugins/openresty/waf/lib/cc.lua new file mode 100644 index 000000000..e36ecd175 --- /dev/null +++ b/plugins/openresty/waf/lib/cc.lua @@ -0,0 +1,67 @@ +local config = require "config" +local redis_util = require "redis_util" +local utils = require "utils" + +local _M = {} + +function _M.set_access_token(k, v) + local secret = config.get_secret() + local key = ngx.md5(ngx.ctx.ip .. ngx.var.server_name .. ngx.ctx.website_key + .. ngx.ctx.ua .. ngx.ctx.today .. secret) + local value = ngx.md5(ngx.time() .. ngx.ctx.ip) + --TODO check value + if key ~= k then + ngx.exit(444) + end + ngx.log(ngx.ERR, "set cc key: ", key) + if config.redis_on then + --local prefix = "ac_token:" + --redis_util.set(prefix .. accesstoken, accesstoken, timeout) + else + local limit = ngx.shared.waf_accesstoken + limit:set(key, value, 7200) + end + + local cookie_expire = ngx.cookie_time(ngx.time() + 86400) + ngx.header['Set-Cookie'] = { key .. '=' .. value .. '; path=/; Expires=' .. cookie_expire } + ngx.exit(200) +end + +function _M.check_access_token() + local secret = config.get_secret() + local key = ngx.md5(ngx.ctx.ip .. ngx.var.server_name .. ngx.ctx.website_key + .. ngx.ctx.ua .. ngx.ctx.today .. secret) + if not ngx.var.http_cookie then + return false + end + local cookies = utils.get_cookie_list(ngx.var.http_cookie) + if not cookies then + return false + end + if not cookies[key] then + return false + end + local accesstoken = cookies[key] + local value = nil + + if config.redis_on then + local prefix = "ac_token:" + value = redis_util.get(prefix .. key) + if value and value == accesstoken then + return true + end + else + local limit = ngx.shared.waf_accesstoken + value = limit:get(key) + end + if value and value == accesstoken then + return true + end + return false +end + +function _M.clear_access_token() + ngx.header['Set-Cookie'] = { 'a_token=; path=/; Expires=Thu, 01-Jan-1970 00:00:00 GMT' } +end + +return _M diff --git a/plugins/openresty/waf/lib/file.lua b/plugins/openresty/waf/lib/file.lua new file mode 100644 index 000000000..b402c1795 --- /dev/null +++ b/plugins/openresty/waf/lib/file.lua @@ -0,0 +1,93 @@ +local cjson = require "cjson" +local pairs = pairs +local insert_table = table.insert +local lower_str = string.lower +local open_file = io.open +local decode = cjson.decode + +local _M = {} + +function _M.read_rule(file_path, file_name, read_all) + local file, err = open_file(file_path .. file_name .. ".json", "r") + if not file then + ngx.log(ngx.ERR, "Failed to open file ", err) + return + end + + local rules_table = {} + local other_table = {} + local text = file:read('*a') + + file:close() + + if #text > 0 then + local result = decode(text) + + if result then + for key, value in pairs(result) do + if key == "rules" then + for _, r in pairs(value) do + if read_all then + r.hits = 0 + r.totalHits = 0 + insert_table(rules_table, r) + else + if lower_str(r.state) == 'on' then + r.hits = 0 + r.totalHits = 0 + insert_table(rules_table, r) + end + end + end + else + other_table[key] = value + end + end + end + end + + return rules_table, other_table +end + +function _M.read_file2table(file_path) + local file = open_file(file_path, 'r') + if file == nil then + return nil + end + str = file:read("*a") + file:close() + return decode(str) +end + +function _M.read_file2string(file_path, binary) + if not file_path then + ngx.log(ngx.ERR, "No file found ", file_path) + return + end + + local mode = "r" + if binary == true then + mode = "rb" + end + + local file, err = open_file(file_path, mode) + if not file then + ngx.log(ngx.ERR, "Failed to open file ", err) + return + end + + local content = "" + repeat + local chunk = file:read(8192) -- 读取 8KB 的块 + if chunk then + content = content .. chunk + else + break + end + until not chunk + + file:close() + return content +end + +return _M \ No newline at end of file diff --git a/plugins/openresty/waf/lib/geoip.lua b/plugins/openresty/waf/lib/geoip.lua new file mode 100644 index 000000000..6f2edeb79 --- /dev/null +++ b/plugins/openresty/waf/lib/geoip.lua @@ -0,0 +1,51 @@ +local geo = require "resty.maxminddb" + +local pcall = pcall + +local _M = {} +local geo_ip_file = "/usr/local/openresty/1pwaf/data/GeoIP.mmdb" +local black_ip_file = "/usr/local/openresty/1pwaf/data/BlackIP.mmdb" + +function _M.init() + if not geo.initted() then + geo.init({ + geo_ip = geo_ip_file, + black_ip = black_ip_file + }) + end +end + +function _M.is_default_black_ip(ip) + local pass, res, err = pcall(geo.lookup, "black_ip", ip) + if not pass then + ngx.log(ngx.ERR, 'failed to lookup black ip,reason:', err) + elseif res and res['isBlack'] then + return true + end + return false +end + +function _M.lookup(ip) + local geo_res = { + iso = "", + country = "", + city = "", + longitude = 0, + latitude = 0, + province = "" + } + local pass, res, err = pcall(geo.lookup, "geo_ip", ip) + if not pass then + ngx.log(ngx.ERR, 'failed to lookup by ip,reason:', err) + elseif res and res['iso'] then + geo_res.iso = res['iso'] + geo_res.country = res['country'] + geo_res.province = res['province'] + geo_res.longitude = res['longitude'] + geo_res.latitude = res['latitude'] + return geo_res + end + return geo_res +end + +return _M diff --git a/plugins/openresty/waf/lib/lib.lua b/plugins/openresty/waf/lib/lib.lua new file mode 100644 index 000000000..47e106877 --- /dev/null +++ b/plugins/openresty/waf/lib/lib.lua @@ -0,0 +1,622 @@ +local redis_util = require "redis_util" +local action = require "action" +local cc = require "cc" +local fileUtils = require "file" +local ck = require "resty.cookie" +local geo = require "geoip" +local libinjection = require "resty.libinjection" +local config = require "config" +local cjson = require "cjson" +local utils = require "utils" + +local pairs = pairs +local ipairs = ipairs +local tostring = tostring +local type = type +local next = next +local tonumber = tonumber +local concat_table = table.concat +local ngx_re_find = ngx.re.find +local decode = cjson.decode +local ngx_re_gmatch = ngx.re.gmatch +local ngx_re_match = ngx.re.match + +local exec_action = action.exec_action + +local _M = {} + +local function is_global_state_on(name) + return config.is_global_state_on(name) +end + +local function is_site_state_on(name) + local site_config = config.get_site_config(ngx.ctx.website_key) + if site_config ~= nil then + return site_config[name]["state"] == "on" and true or false + end + return true +end + +local function is_state_on(name) + return is_site_state_on(name) and is_global_state_on(name) +end + +local function get_site_config(name) + local site_config = config.get_site_config(ngx.ctx.website_key) + if site_config ~= nil then + return site_config[name] + end + return config.get_global_config(name) +end + +local function get_site_rule(name) + local site_rules = config.get_site_rules(ngx.ctx.website_key) + if site_rules ~= nil then + return site_rules[name] + end + return config.get_global_rules(name) +end + +local function get_global_rules(name) + return config.get_global_rules(name) +end + +local function get_global_config(name) + return config.get_global_config(name) +end + +local function is_rule_state_on(rule_table) + return rule_table["state"] == "on" and true or false +end + +local function matches(input, regex, ctx, nth) + if not nth then + nth = 0 + end + return ngx_re_find(input, regex, "isjo", ctx, nth) +end + +local function match_rule(rule_table, str) + if str == nil or next(rule_table) == nil then + return false + end + for _, t in ipairs(rule_table) do + if matches(str, t.rule) then + return true, t + end + end + + return false +end + +local function match_ip(ip_rule, ip, ipn) + if ip_rule == nil or ip == nil then + return false + end + if is_rule_state_on(ip_rule) == false then + return false + end + local ip_rule_type = ip_rule.type + if utils.is_ipv6(ip) and ip_rule_type == "ipv6" then + if ip == ip_rule.ipv6 then + return true + end + return false + end + + if ip_rule.type == "ipv4" then + if ipn == tonumber(ip_rule.ipv4) then + return true + end + elseif ip_rule.type == "ipArr" then + local ipArr = ip_rule.ipArr + if utils.is_ip_in_array(ipn, ipArr.start, ipArr["end"]) then + return true + end + elseif ip_rule.type == "ipGroup" then + --TODO 匹配 IP 组 + end + + return false +end + +local function xss_and_sql_check(body) + if body then + if is_global_state_on("xss") or is_global_state_on("sql") then + for k, v in pairs(body) do + if type(v) == 'string' then + if is_site_state_on("xss") then + local is_xss, fingerprint = libinjection.xss(tostring(v)) + local xss_config = get_site_config("xss") + if is_xss then + exec_action(xss_config, { rule = tostring(k) .. '=' .. tostring(v) }) + return + end + end + if is_site_state_on("sql") then + local is_sqli, fingerprint = libinjection.sqli(tostring(v)) + local sql_config = get_site_config("sql") + if is_sqli then + exec_action(sql_config, { rule = tostring(k) .. '=' .. tostring(v) }) + return + end + end + end + end + end + + end +end + +local function get_request_body() + ngx.req.read_body() + local body_data = ngx.req.get_body_data() + if not body_data then + local body_file = ngx.req.get_body_file() + if body_file then + body_data = fileUtils.read_file2string(body_file, true) + end + end + return body_data +end + +function _M.is_white_ip() + if is_global_state_on("ipWhite") then + local ip = ngx.ctx.ip + if ip == "unknown" then + return false + end + if ip == "127.0.0.1" then + return true + end + local ipn = utils.ipv4_to_int(ip) + local ip_rules = get_global_rules("ipWhite") + for _, ip_rule in pairs(ip_rules) do + if match_ip(ip_rule, ip, ipn) then + return true + end + end + end + return false +end + +function _M.allow_location_check() + if is_state_on("geoRestrict") then + local geo_ip = ngx.ctx.geoip + if geo_ip and geo_ip.iso and geo_ip.iso ~= "" then + local iso = geo_ip.iso + local geo_config = get_site_config("geoRestrict") + local exist = false + for _, rule in ipairs(geo_config.rules) do + if iso == rule then + exist = true + break + + end + end + local default_geo_config = { + action = "deny", + code = 444, + type = "geoRestrict", + state = "on", + rule = iso + } + if exist then + if geo_config.action == "allow" then + return true + end + if geo_config.action == "deny" then + exec_action(default_geo_config, default_geo_config) + return false + end + else + if geo_config.action == "allow" then + exec_action(default_geo_config, default_geo_config) + return false + end + end + end + end +end + +function _M.default_ip_black() + if is_state_on("defaultIpBlack") then + if geo.is_default_black_ip(ngx.ctx.ip) then + exec_action(get_site_config("defaultIpBlack"), { rule = ngx.ctx.ip }) + end + end +end + +function _M.black_ip() + if is_global_state_on("ipBlack") then + local ip = ngx.ctx.ip + if ip == "unknown" then + return false + end + local exists = nil + + if config.is_redis_on() then + exists = redis_util.get("black_ip:" .. ip) + else + exists = ngx.shared.waf_black_ip:get(ip) + end + + if not exists then + local ip_black_list = get_global_rules("ipBlack") + local ipn = utils.ipv4_to_int(ip) + for _, ip_rule in pairs(ip_black_list) do + if match_ip(ip_rule, ip, ipn) then + exists = true + break + end + end + end + + if exists then + exec_action(get_global_config("ipBlack")) + end + + return exists + end + + return false +end + +function _M.method_check() + local method = ngx.req.get_method() + local method_white_list = get_site_rule("methodWhite") + for _, method_rule in ipairs(method_white_list) do + if method_rule.rule == method and method_rule.state == 'off' then + local method_config = get_global_config("methodWhite") + exec_action(method_config, method_rule) + return false + end + end + return true +end + +function _M.bot_check() + if is_state_on("bot") then + local ruri = ngx.var.request_uri + local uri = ngx.var.uri + local bot_rule = get_site_config("bot") + if uri == bot_rule.uri or ruri == bot_rule.uri then + exec_action(bot_rule) + end + end +end + +function _M.black_ua() + if is_global_state_on("uaBlack") then + if type(ngx.ctx.ua) ~= 'string' then + ngx.exit(200) + end + local m, mr = match_rule(get_global_rules("uaBlack"), ngx.ctx.ua) + if m then + exec_action(get_global_config("uaBlack"), mr) + end + end +end + +function _M.default_ua_black() + if is_state_on("defaultUaBlack") then + if type(ngx.ctx.ua) ~= 'string' then + ngx.exit(200) + end + local m, mr = match_rule(get_global_rules('defaultUaBlack'), ngx.ctx.ua) + if m then + exec_action(get_global_config('defaultUaBlack'), mr) + end + end +end + +function _M.is_white_ua() + if is_global_state_on("uaWhite") then + local ua = utils.get_header("user-agent") + if not ua then + return false + end + if type(ua) ~= 'string' then + ngx.exit(200) + end + for _, wa in ipairs(get_global_rules("uaWhite")) do + if ngx.ctx.ua == wa then + return true + end + end + end + return false +end + +function _M.cc() + if is_state_on("cc") then + if cc.check_access_token() then + return + end + local ip = ngx.ctx.ip + local cc_config = get_site_config("cc") + local key = ip + + if config.is_redis_on() then + key = "cc_req_count:" .. key + local count, _ = redis_util.incr(key, cc_config.duration) + if not count then + redis_util.set(key, 1, cc_config.duration) + elseif count > cc_config.threshold then + exec_action(cc_config, { rule = cc_config.rule }) + return + end + else + local limit = ngx.shared.waf_limit + local count, _ = limit:incr(key, 1, 0, cc_config.duration) + if not count then + limit:set(key, 1, cc_config.duration) + elseif count > cc_config.threshold then + exec_action(cc_config, { rule = cc_config.rule }) + return + end + end + end +end + +function _M.cc_url() + if is_state_on("ccurl") then + local ip = ngx.ctx.ip + local key = ip + local urlcc_rules = get_site_rule("ccurl") + local urlcc_config = get_site_config("ccurl") + local uri = ngx.var.uri + + ngx.log(ngx.ERR, "ccrules is" .. cjson.encode(urlcc_rules)) + + local m, mr = match_rule(urlcc_rules, uri) + if not m or not mr then + return + end + key = uri .. key + if config.is_redis_on() then + key = "url_cc_req_count:" .. key + local count, _ = redis_util.incr(key, mr.duration) + if not count then + redis_util.set(key, 1, mr.duration) + elseif count > mr.threshold then + exec_action(urlcc_config, { rule = mr.rule }) + return + end + else + local limit = ngx.shared.waf_limit + local count, _ = limit:incr(key, 1, 0, mr.duration) + if not count then + limit:set(key, 1, urlcc_config.duration) + elseif count > mr.threshold then + exec_action(urlcc_config, { rule = mr.rule }) + return + end + end + end +end + +function _M.is_white_url() + if is_global_state_on("urlWhite") then + local url = ngx.var.uri + if url == nil or url == " " then + return false + end + local m, _ = match_rule(get_global_rules("urlWhite"), url) + if m then + return true + end + return false + end + + return false +end + +function _M.black_url() + if is_global_state_on("urlBlack") then + local url = ngx.var.uri + if url == nil or url == "" then + return false + end + local m, mr = match_rule(get_global_rules("urlBlack"), url) + if m then + exec_action(get_global_config("urlBlack"), mr) + return + end + end +end + +function _M.args_check() + if is_state_on("args") then + local args = ngx.req.get_uri_args() + if args then + local args_list = get_global_rules("args") + for _, val in pairs(args) do + local val_arr = val + if type(val) == "table" then + val_arr = concat_table(val, ", ") + end + if val_arr and type(val_arr) ~= "boolean" and val_arr ~= "" then + local m, mr = match_rule(args_list, utils.unescape_uri(val_arr)) + if m then + exec_action(get_global_config("args"), mr) + return + end + end + end + xss_and_sql_check(args) + end + end +end + +function _M.cookie_check() + local cookie = ngx.var.http_cookie + if cookie and is_state_on("cookie") then + local cookieList = get_site_rule('cookie') + local m, mr = match_rule(cookieList, cookie) + if m then + local rule_config = get_global_config('cookie') + exec_action(rule_config, mr) + return true + end + end + return false +end + +function _M.header_check() + if is_state_on("header") then + local headers_rule = get_site_rule("header") + local headers_config = get_site_config("header") + local referer = ngx.var.http_referer + if referer and referer ~= "" then + local m = match_rule(headers_rule, referer) + if m then + exec_action(headers_config) + end + end + local headers = utils.get_headers() + if headers then + for k, v in pairs(headers) do + local m1, mr1 = match_rule(headers_rule, k) + if m1 then + exec_action(headers_config, mr1) + end + local m2, mr2 = match_rule(headers_rule, v) + if m2 then + exec_action(headers_config, mr2) + end + end + end + end +end + +function _M.post_check() + local content_type = ngx.ctx.content_type + local content_length = ngx.ctx.content_length + + if ngx.ctx.method == "GET" or not content_type or type(content_type) ~= 'string' then + return + end + + if content_length == nil or content_length == 0 then + return + end + + if ngx_re_find(content_type, '^application/json', "ijo") then + local data = get_request_body() + if data then + xss_and_sql_check(decode(data)) + end + end + + if is_site_state_on('fileExtCheck') and ngx_re_find(content_type, [[multipart]], 'ijo') then + if not ngx_re_match(content_type, '^multipart/form-data; boundary=') then + return + end + local boundary_value = ngx_re_match(content_type, '^multipart/form-data; boundary=(.+)') + if boundary_value == nil then + return + end + local data = get_request_body() + if data == nil then + return + end + local iterator = ngx_re_gmatch(data, [[Content-Disposition.+filename=.+]], 'ijo') + if not iterator then + return + end + + local rule = get_site_config("fileExtCheck") + while true do + local m = iterator() + if m then + local match = ngx_re_match(m[0], 'Content-Disposition: form-data; (.+)filename="(.+)\\.(.*)"', 'ijo') + if match then + local extension = match[3] + for _, ext in ipairs(rule.extList) do + if extension == ext then + exec_action(rule) + end + end + end + else + break + end + end + end + +end + +function _M.acl() + local rules = get_site_rule("acl") + for _, rule in pairs(rules) do + if rule.state == nil or rule.state == "off" then + goto continue + end + local conditions = rule.conditions + local match = true + for _, condition in pairs(conditions) do + local field = condition.field + local field_name = condition.name + local pattern = condition.pattern + local match_value = '' + if field == 'URL' then + match_value = ngx.var.request_uri + + elseif field == 'Cookie' then + if field_name ~= nil and field_name ~= '' then + local cookies, _ = ck:new() + if not cookies then + match = false + break + else + match_value, _ = cookies:get(field_name) + end + else + match_value = ngx.var.http_cookie + end + + elseif field == 'Header' then + local headers = ngx.req.get_headers() + if headers then + if field_name ~= nil and field_name ~= '' then + match_value = headers[field_name] + else + match_value = concat_table(headers, '') + end + else + match = false + break + end + + elseif field == 'Referer' then + match_value = ngx.var.http_referer + + elseif field == 'User-Agent' then + match_value = ngx.var.http_user_agent + + elseif field == 'IP' then + match_value = ngx.ctx.ip + end + + if pattern == '' then + if match_value ~= nil and match_value ~= '' then + match = false + break + end + else + if not matches(match_value, pattern) then + match = false + break + end + end + end + if match then + rule.type = "acl" + exec_action(rule) + end + :: continue :: + end +end + +return _M diff --git a/plugins/openresty/waf/lib/logger.lua b/plugins/openresty/waf/lib/logger.lua new file mode 100644 index 000000000..c79f05448 --- /dev/null +++ b/plugins/openresty/waf/lib/logger.lua @@ -0,0 +1,148 @@ +local type = type +local concat_table = table.concat +local new_table = table.new +local tostring = tostring +local setmetatable = setmetatable +local open_file = io.open +local ngx_timer_at = ngx.timer.at + +local _M = {} + +local mt = { __index = _M } + +function _M:new(log_path, host, rolling) + local t = { + flush_limit = 4096, -- 4kb + flush_timeout = 1, + + buffered_size = 0, + buffer_index = 0, + buffer_data = new_table(20000, 0), + + log_path = log_path, + prefix = log_path .. host .. '_', + rolling = rolling or false, + host = host, + timer = nil } + + setmetatable(t, mt) + return t +end + +local function needFlush(self) + if self.buffered_size > 0 then + return true + end + + return false +end + +local function flush_lock(self) + local dic_lock = ngx.shared.dict_locks + local locked = dic_lock:get(self.host) + if not locked then + local succ, err = dic_lock:set(self.host, true) + if not succ then + ngx.log(ngx.ERR, "failed to lock logfile " .. self.host .. ": ", err) + end + return succ + end + return false +end + +local function flush_unlock(self) + local dic_lock = ngx.shared.dict_locks + local success, err = dic_lock:set(self.host, false) + if not success then + ngx.log(ngx.ERR, "failed to unlock logfile " .. self.host .. ": ", err) + end + return success +end + +local function write_file(self, value) + local file_name = '' + if self.rolling then + file_name = self.prefix .. ngx.today() .. ".log" + else + file_name = self.log_path + end + + local file = open_file(file_name, "a+") + + if file == nil or value == nil then + return + end + + file:write(value) + file:flush() + file:close() + + return +end + +local function flushBuffer(self) + if not needFlush(self) then + return true + end + + if not flush_lock(self) then + return true + end + + local buffer = concat_table(self.buffer_data, "", 1, self.buffer_index) + write_file(self, buffer) + + self.buffered_size = 0 + self.buffer_index = 0 + self.buffer_data = new_table(20000, 0) + + flush_unlock(self) +end + +local function flushPeriod(premature, self) + flushBuffer(self) + self.timer = false +end + +local function writeBuffer(self, msg, msg_len) + self.buffer_index = self.buffer_index + 1 + + self.buffer_data[self.buffer_index] = msg + + self.buffered_size = self.buffered_size + msg_len + + return self.buffered_size +end + +local function startTimer(self) + if not self.timer then + local ok, err = ngx_timer_at(self.flush_timeout, flushPeriod, self) + if not ok then + ngx.log(ngx.ERR, "failed to create the timer: ", err) + return + end + if ok then + self.timer = true + end + end + return self.timer +end + +function _M:log(msg) + if type(msg) ~= "string" then + msg = tostring(msg) + end + + local msg_len = #msg + local len = msg_len + self.buffered_size + + if len < self.flush_limit then + writeBuffer(self, msg, msg_len) + startTimer(self) + elseif len >= self.flush_limit then + writeBuffer(self, msg, msg_len) + flushBuffer(self) + end +end + +return _M \ No newline at end of file diff --git a/plugins/openresty/waf/lib/logger_factory.lua b/plugins/openresty/waf/lib/logger_factory.lua new file mode 100644 index 000000000..506bb08e8 --- /dev/null +++ b/plugins/openresty/waf/lib/logger_factory.lua @@ -0,0 +1,16 @@ +local logger = require "logger" + +local loggers = {} + +local _M = {} + +function _M.get_logger(log_path, host, rolling) + local host_logger = loggers[host] + if not host_logger then + host_logger = logger:new(log_path, host, rolling) + loggers[host] = host_logger + end + return host_logger +end + +return _M \ No newline at end of file diff --git a/plugins/openresty/waf/lib/redis_util.lua b/plugins/openresty/waf/lib/redis_util.lua new file mode 100644 index 000000000..e260e7422 --- /dev/null +++ b/plugins/openresty/waf/lib/redis_util.lua @@ -0,0 +1,131 @@ +local redis = require "resty.redis" +local config = require "config" + +local _M = {} + +local connect_timeout, send_timeout, read_timeout = 1000, 1000, 1000 + +function _M.get_conn() + local red, err1 = redis:new() + if not red then + ngx.log(ngx.ERR, "failed to new redis:", err1) + return nil, err1 + end + + local redis_config = config.get_redis_config() + + red:set_timeouts(connect_timeout, send_timeout, read_timeout) + + local ok, err = red:connect(redis_config.host, redis_config.port, { ssl = redis_config.ssl, pool_size = redis_config.poolSize }) + + if not ok then + ngx.log(ngx.ERR, "failed to connect: ", err .. "\n") + return nil, err + end + + if redis_config.password ~= nil and #redis_config.password ~= 0 then + local times = 0 + times, err = red:get_reused_times() + + if times == 0 then + local res, err2 = red:auth(redis_config.password) + if not res then + ngx.log(ngx.ERR, "failed to authenticate: ", err2) + return nil, err2 + end + end + end + + return red, err +end + +function _M.close_conn(red) + local ok, err = red:set_keepalive(10000, 100) + if not ok then + ngx.log(ngx.ERR, "failed to set keepalive: ", err) + end + + return ok, err +end + +function _M.set(key, value, expire_time) + local red, _ = _M.get_conn() + local ok, err = nil, nil + if red then + ok, err = red:set(key, value) + if not ok then + ngx.log(ngx.ERR, "failed to set key: " .. key .. " ", err) + elseif expire_time and expire_time > 0 then + red:expire(key, expire_time) + end + + _M.close_conn(red) + end + + return ok, err +end + +function _M.bath_set(keyTable, value, keyPrefix) + local red, _ = _M.get_conn() + local results, err = nil, nil + if red then + red:init_pipeline() + + if keyPrefix then + for _, ip in ipairs(keyTable) do + red:set(keyPrefix .. ip, value) + end + else + for _, ip in ipairs(keyTable) do + red:set(ip, value) + end + end + + results, err = red:commit_pipeline() + if not results then + ngx.log(ngx.ERR, "failed to set keys: ", err) + end + + _M.close_conn(red) + end + + return results, err +end + +function _M.get(key) + local red, err = _M.get_conn() + local value = nil + if red then + value, err = red:get(key) + if not value then + ngx.log(ngx.ERR, "failed to get key: " .. key, err) + return value, err + end + if value == ngx.null then + value = nil + end + + _M.close_conn(red) + end + + return value, err +end + +function _M.incr(key, expire_time) + local red, err = _M.get_conn() + local res = nil + if red then + res, err = red:incr(key) + if not res then + ngx.log(ngx.ERR, "failed to incr key: " .. key, err) + elseif res == 1 and expire_time and expire_time > 0 then + red:expire(key, expire_time) + end + + _M.close_conn(red) + end + + return res, err +end + +return _M diff --git a/plugins/openresty/waf/lib/resty/cookie.lua b/plugins/openresty/waf/lib/resty/cookie.lua new file mode 100644 index 000000000..f4c81ab0f --- /dev/null +++ b/plugins/openresty/waf/lib/resty/cookie.lua @@ -0,0 +1,213 @@ +-- Copyright (C) 2013-2016 Jiale Zhi (calio), CloudFlare Inc. +-- See RFC6265 http://tools.ietf.org/search/rfc6265 +-- require "luacov" + +local type = type +local byte = string.byte +local sub = string.sub +local format = string.format +local log = ngx.log +local ERR = ngx.ERR +local WARN = ngx.WARN +local ngx_header = ngx.header + +local EQUAL = byte("=") +local SEMICOLON = byte(";") +local SPACE = byte(" ") +local HTAB = byte("\t") + +-- table.new(narr, nrec) +local ok, new_tab = pcall(require, "table.new") +if not ok then + new_tab = function () return {} end +end + +local ok, clear_tab = pcall(require, "table.clear") +if not ok then + clear_tab = function(tab) for k, _ in pairs(tab) do tab[k] = nil end end +end + +local _M = new_tab(0, 2) + +_M._VERSION = '0.01' + + +local function get_cookie_table(text_cookie) + if type(text_cookie) ~= "string" then + log(ERR, format("expect text_cookie to be \"string\" but found %s", + type(text_cookie))) + return {} + end + + local EXPECT_KEY = 1 + local EXPECT_VALUE = 2 + local EXPECT_SP = 3 + + local n = 0 + local len = #text_cookie + + for i=1, len do + if byte(text_cookie, i) == SEMICOLON then + n = n + 1 + end + end + + local cookie_table = new_tab(0, n + 1) + + local state = EXPECT_SP + local i = 1 + local j = 1 + local key, value + + while j <= len do + if state == EXPECT_KEY then + if byte(text_cookie, j) == EQUAL then + key = sub(text_cookie, i, j - 1) + state = EXPECT_VALUE + i = j + 1 + end + elseif state == EXPECT_VALUE then + if byte(text_cookie, j) == SEMICOLON + or byte(text_cookie, j) == SPACE + or byte(text_cookie, j) == HTAB + then + value = sub(text_cookie, i, j - 1) + cookie_table[key] = value + + key, value = nil, nil + state = EXPECT_SP + i = j + 1 + end + elseif state == EXPECT_SP then + if byte(text_cookie, j) ~= SPACE + and byte(text_cookie, j) ~= HTAB + then + state = EXPECT_KEY + i = j + j = j - 1 + end + end + j = j + 1 + end + + if key ~= nil and value == nil then + cookie_table[key] = sub(text_cookie, i) + end + + return cookie_table +end + +function _M.new(self) + local _cookie = ngx.var.http_cookie + --if not _cookie then + --return nil, "no cookie found in current request" + --end + return setmetatable({ _cookie = _cookie, set_cookie_table = new_tab(4, 0) }, + { __index = self }) +end + +function _M.get(self, key) + if not self._cookie then + return nil, "no cookie found in the current request" + end + if self.cookie_table == nil then + self.cookie_table = get_cookie_table(self._cookie) + end + + return self.cookie_table[key] +end + +function _M.get_all(self) + if not self._cookie then + return nil, "no cookie found in the current request" + end + + if self.cookie_table == nil then + self.cookie_table = get_cookie_table(self._cookie) + end + + return self.cookie_table +end + +function _M.get_cookie_size(self) + if not self._cookie then + return 0 + end + + return string.len(self._cookie) +end + +local function bake(cookie) + if not cookie.key or not cookie.value then + return nil, 'missing cookie field "key" or "value"' + end + + if cookie["max-age"] then + cookie.max_age = cookie["max-age"] + end + + if (cookie.samesite) then + local samesite = cookie.samesite + + -- if we don't have a valid-looking attribute, ignore the attribute + if (samesite ~= "Strict" and samesite ~= "Lax" and samesite ~= "None") then + log(WARN, "SameSite value must be 'Strict', 'Lax' or 'None'") + cookie.samesite = nil + end + end + + local str = cookie.key .. "=" .. cookie.value + .. (cookie.expires and "; Expires=" .. cookie.expires or "") + .. (cookie.max_age and "; Max-Age=" .. cookie.max_age or "") + .. (cookie.domain and "; Domain=" .. cookie.domain or "") + .. (cookie.path and "; Path=" .. cookie.path or "") + .. (cookie.secure and "; Secure" or "") + .. (cookie.httponly and "; HttpOnly" or "") + .. (cookie.samesite and "; SameSite=" .. cookie.samesite or "") + .. (cookie.extension and "; " .. cookie.extension or "") + return str +end + +function _M.set(self, cookie) + local cookie_str, err = bake(cookie) + if not cookie_str then + return nil, err + end + + local set_cookie = ngx_header['Set-Cookie'] + local set_cookie_type = type(set_cookie) + local t = self.set_cookie_table + clear_tab(t) + + if set_cookie_type == "string" then + -- only one cookie has been setted + if set_cookie ~= cookie_str then + t[1] = set_cookie + t[2] = cookie_str + ngx_header['Set-Cookie'] = t + end + elseif set_cookie_type == "table" then + -- more than one cookies has been setted + local size = #set_cookie + + -- we can not set cookie like ngx.header['Set-Cookie'][3] = val + -- so create a new table, copy all the values, and then set it back + for i=1, size do + t[i] = ngx_header['Set-Cookie'][i] + if t[i] == cookie_str then + -- new cookie is duplicated + return true + end + end + t[size + 1] = cookie_str + ngx_header['Set-Cookie'] = t + else + -- no cookie has been setted + ngx_header['Set-Cookie'] = cookie_str + end + return true +end + +_M.get_cookie_string = bake + +return _M diff --git a/plugins/openresty/waf/lib/resty/libinjection.lua b/plugins/openresty/waf/lib/resty/libinjection.lua new file mode 100644 index 000000000..587604ae3 --- /dev/null +++ b/plugins/openresty/waf/lib/resty/libinjection.lua @@ -0,0 +1,326 @@ +local _M = {} + +local bit = require "bit" +local ffi = require "ffi" + +local ffi_new = ffi.new +local ffi_string = ffi.string + +-- enum sqli_flags +local FLAG_NONE = 0 +local FLAG_QUOTE_NONE = 1 +local FLAG_QUOTE_SINGLE = 2 +local FLAG_QUOTE_DOUBLE = 4 +local FLAG_SQL_ANSI = 8 +local FLAG_SQL_MYSQL = 16 + +-- enum lookup_type +local LOOKUP_FINGERPRINT = 4 + +-- enum html5_flags +local DATA_STATE = 0 +local VALUE_NO_QUOTE = 1 +local VALUE_SINGLE_QUOTE = 2 +local VALUE_DOUBLE_QUOTE = 3 +local VALUE_BACK_QUOTE = 4 + +-- cached ORs +local QUOTE_NONE_SQL_ANSI = bit.bor(FLAG_QUOTE_NONE, FLAG_SQL_ANSI) +local QUOTE_NONE_SQL_MYSQL = bit.bor(FLAG_QUOTE_NONE, FLAG_SQL_MYSQL) +local QUOTE_SINGLE_SQL_ANSI = bit.bor(FLAG_QUOTE_SINGLE, FLAG_SQL_ANSI) +local QUOTE_SINGLE_SQL_MYSQL = bit.bor(FLAG_QUOTE_SINGLE, FLAG_SQL_MYSQL) +local QUOTE_DOUBLE_SQL_MYSQL = bit.bor(FLAG_QUOTE_DOUBLE, FLAG_SQL_MYSQL) + +-- libibjection.so +ffi.cdef [[ +const char* libinjection_sqli_fingerprint(struct libinjection_sqli_state* sql_state, int flags); + +struct libinjection_sqli_token { + char type; + char str_open; + char str_close; + size_t pos; + size_t len; + int count; + char val[32]; +}; + +typedef char (*ptr_lookup_fn)(struct libinjection_sqli_state*, int lookuptype, const char* word, size_t len); + +struct libinjection_sqli_state { + const char *s; + size_t slen; + ptr_lookup_fn lookup; + void* userdata; + int flags; + size_t pos; + struct libinjection_sqli_token tokenvec[8]; + struct libinjection_sqli_token *current; + char fingerprint[8]; + int reason; + int stats_comment_ddw; + int stats_comment_ddx; + int stats_comment_c; + int stats_comment_hash; + int stats_folds; + int stats_tokens; +}; + +void libinjection_sqli_init(struct libinjection_sqli_state * sf, const char *s, size_t len, int flags); +int libinjection_is_sqli(struct libinjection_sqli_state* sql_state); + +int libinjection_sqli(const char* s, size_t slen, char fingerprint[]); + +int libinjection_is_xss(const char* s, size_t len, int flags); +int libinjection_xss(const char* s, size_t slen); +]] + +_M.version = "0.1.1" + +local state_type = ffi.typeof("struct libinjection_sqli_state[1]") +local lib, loaded + +-- "borrowed" from CF aho-corasick lib +local function _loadlib() + if (not loaded) then + local path, so_path + local libname = "libinjection.so" + + for k, v in string.gmatch(package.cpath, "[^;]+") do + so_path = string.match(k, "(.*/)") + if so_path then + -- "so_path" could be nil. e.g, the dir path component is "." + so_path = so_path .. libname + + -- Don't get me wrong, the only way to know if a file exist is + -- trying to open it. + local f = io.open(so_path) + if f ~= nil then + io.close(f) + path = so_path + break + end + end + end + + path = "/usr/local/openresty/1pwaf/data/libinjection.so" + + lib = ffi.load(path) + + if (lib) then + loaded = true + return true + else + return false + end + else + return true + end +end + +-- this function is not publicly exposed so we need to emulate it here. not great but not a measurable perf hit +local function _reparse_as_mysql(sqli_state) + return sqli_state[0].stats_comment_ddx ~= 0 or sqli_state[0].stats_comment_hash ~= 0 +end + +--[[ +Secondary API: detects SQLi in a string, given a context. Given a string, returns a list of + +* boolean indicating a match +* SQLi fingerprint +--]] +local function _sqli_contextwrapper(string, char, flag1, flag2) + if (char and not string.find(string, char, 1, true)) then + return false, nil + end + + if (not loaded) then + if (not _loadlib()) then + return false, nil + end + end + + local issqli, lookup, sqli_state + + -- allocate a new libinjection_sqli_state struct + sqli_state = ffi_new(state_type) + + -- init the state + lib.libinjection_sqli_init( + sqli_state, + string, + #string, + FLAG_NONE + ) + + -- initial fingerprint + lib.libinjection_sqli_fingerprint( + sqli_state, + flag1 + ) + + -- lookup + lookup = sqli_state[0].lookup( + sqli_state, + LOOKUP_FINGERPRINT, + sqli_state[0].fingerprint, + #ffi.string(sqli_state[0].fingerprint) + ) + + -- match? great, we're done + if (lookup > 0) then + return true, ffi_string(sqli_state[0].fingerprint) + end + + -- no? reparse, fingerprint and lookup again + if (flag2 and _reparse_as_mysql(sqli_state)) then + lib.libinjection_sqli_fingerprint( + sqli_state, + flag2 + ) + + lookup = sqli_state[0].lookup( + sqli_state, + LOOKUP_FINGERPRINT, + sqli_state[0].fingerprint, + #ffi.string(sqli_state[0].fingerprint) + ) + + if (lookup > 0) then + return true, ffi_string(sqli_state[0].fingerprint) + end + end + + return false, nil +end + +--[[ +Wrapper for second-level API with no char context +--]] +function _M.sqli_noquote(string) + return _sqli_contextwrapper( + string, + nil, + QUOTE_NONE_SQL_ANSI, + QUOTE_NONE_SQL_MYSQL + ) +end + +--[[ +Wrapper for second-level API with CHAR_SINGLE context +--]] +function _M.sqli_singlequote(string) + return _sqli_contextwrapper( + string, + "'", + QUOTE_SINGLE_SQL_ANSI, + QUOTE_SINGLE_SQL_MYSQL + ) +end + +--[[ +Wrapper for second-level API with CHAR_DOUBLE context +--]] +function _M.sqli_doublequote(string) + return _sqli_contextwrapper( + string, + '"', + QUOTE_DOUBLE_SQL_MYSQL + ) +end + +--[[ +Simple API. Given a string, returns a list of + +* boolean indicating a match +* SQLi fingerprint +--]] +function _M.sqli(string) + if (not loaded) then + if (not _loadlib()) then + return false, nil + end + end + + local fingerprint = ffi_new("char [8]") + + return lib.libinjection_sqli(string, #string, fingerprint) == 1, ffi_string(fingerprint) +end + +--[[ +Secondary API: detects XSS in a string, given a context. Given a string, returns a boolean denoting if XSS was detected +--]] +local function _xss_contextwrapper(string, flag) + if (not loaded) then + if (not _loadlib()) then + return false + end + end + + return lib.libinjection_is_xss(string, #string, flag) == 1 +end + +--[[ +Wrapper for second-level API with DATA_STATE flag +--]] +function _M.xss_data_state(string) + return _xss_contextwrapper( + string, + DATA_STATE + ) +end + +--[[ +Wrapper for second-level API with VALUE_NO_QUOTE flag +--]] +function _M.xss_noquote(string) + return _xss_contextwrapper( + string, + VALUE_NO_QUOTE + ) +end + +--[[ +Wrapper for second-level API with VALUE_SINGLE_QUOTE flag +--]] +function _M.xss_singlequote(string) + return _xss_contextwrapper( + string, + VALUE_SINGLE_QUOTE + ) +end + +--[[ +Wrapper for second-level API with VALUE_DOUBLE_QUOTE flag +--]] +function _M.xss_doublequote(string) + return _xss_contextwrapper( + string, + VALUE_DOUBLE_QUOTE + ) +end + +--[[ +Wrapper for second-level API with VALUE_BACK_QUOTE flag +--]] +function _M.xss_backquote(string) + return _xss_contextwrapper( + string, + VALUE_BACK_QUOTE + ) +end + +--[[ +ALPHA version of XSS detector. Given a string, returns a boolean denoting if XSS was detected +--]] +function _M.xss(string) + if (not loaded) then + if (not _loadlib()) then + return false + end + end + + return lib.libinjection_xss(string, #string) == 1 +end + +return _M \ No newline at end of file diff --git a/plugins/openresty/waf/lib/resty/maxminddb.lua b/plugins/openresty/waf/lib/resty/maxminddb.lua new file mode 100644 index 000000000..ddf82032f --- /dev/null +++ b/plugins/openresty/waf/lib/resty/maxminddb.lua @@ -0,0 +1,372 @@ +--[[ + Copyright 2017-now anjia (anjia0532@gmail.com) + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +]] + +-- copy from https://github.com/lilien1010/lua-resty-maxminddb/blob/f96633e2428f8f7bcc1e2a7a28b747b33233a8db/resty/maxminddb.lua#L5-L12 + +local ffi = require('ffi') +local ffi_new = ffi.new +local ffi_str = ffi.string +local ffi_cast = ffi.cast +local ffi_gc = ffi.gc +local C = ffi.C + +local _M = {} +local _D = {} + +_M._VERSION = '1.3.3' +local mt = { __index = _M } + +-- copy from https://github.com/lilien1010/lua-resty-maxminddb/blob/f96633e2428f8f7bcc1e2a7a28b747b33233a8db/resty/maxminddb.lua#L36-L126 +ffi.cdef [[ + +typedef long int ssize_t; + +typedef unsigned int mmdb_uint128_t __attribute__ ((__mode__(TI))); + +typedef struct MMDB_entry_s { + struct MMDB_s *mmdb; + uint32_t offset; +} MMDB_entry_s; + +typedef struct MMDB_lookup_result_s { + bool found_entry; + MMDB_entry_s entry; + uint16_t netmask; +} MMDB_lookup_result_s; + +typedef struct MMDB_entry_data_s { + bool has_data; + union { + uint32_t pointer; + const char *utf8_string; + double double_value; + const uint8_t *bytes; + uint16_t uint16; + uint32_t uint32; + int32_t int32; + uint64_t uint64; + mmdb_uint128_t uint128; + bool boolean; + float float_value; + }; + + uint32_t offset; + uint32_t offset_to_next; + uint32_t data_size; + uint32_t type; +} MMDB_entry_data_s; + +typedef struct MMDB_entry_data_list_s { + MMDB_entry_data_s entry_data; + struct MMDB_entry_data_list_s *next; +} MMDB_entry_data_list_s; + +typedef struct MMDB_description_s { + const char *language; + const char *description; +} MMDB_description_s; + +typedef struct MMDB_metadata_s { + uint32_t node_count; + uint16_t record_size; + uint16_t ip_version; + const char *database_type; + struct { + size_t count; + const char **names; + } languages; + uint16_t binary_format_major_version; + uint16_t binary_format_minor_version; + uint64_t build_epoch; + struct { + size_t count; + MMDB_description_s **descriptions; + } description; +} MMDB_metadata_s; + +typedef struct MMDB_ipv4_start_node_s { + uint16_t netmask; + uint32_t node_value; +} MMDB_ipv4_start_node_s; + +typedef struct MMDB_s { + uint32_t flags; + const char *filename; + ssize_t file_size; + const uint8_t *file_content; + const uint8_t *data_section; + uint32_t data_section_size; + const uint8_t *metadata_section; + uint32_t metadata_section_size; + uint16_t full_record_byte_size; + uint16_t depth; + MMDB_ipv4_start_node_s ipv4_start_node; + MMDB_metadata_s metadata; +} MMDB_s; + +typedef char * pchar; + +MMDB_lookup_result_s MMDB_lookup_string(MMDB_s *const mmdb, const char *const ipstr, int *const gai_error,int *const mmdb_error); +int MMDB_open(const char *const filename, uint32_t flags, MMDB_s *const mmdb); +int MMDB_aget_value(MMDB_entry_s *const start, MMDB_entry_data_s *const entry_data, const char *const *const path); +char *MMDB_strerror(int error_code); + +int MMDB_get_entry_data_list(MMDB_entry_s *start, MMDB_entry_data_list_s **const entry_data_list); +void MMDB_free_entry_data_list(MMDB_entry_data_list_s *const entry_data_list); +void MMDB_close(MMDB_s *const mmdb); +const char *gai_strerror(int errcode); +]] + +-- error codes +-- https://github.com/maxmind/libmaxminddb/blob/master/include/maxminddb.h#L66 +local MMDB_SUCCESS = 0 +local MMDB_FILE_OPEN_ERROR = 1 +local MMDB_CORRUPT_SEARCH_TREE_ERROR = 2 +local MMDB_INVALID_METADATA_ERROR = 3 +local MMDB_IO_ERROR = 4 +local MMDB_OUT_OF_MEMORY_ERROR = 5 +local MMDB_UNKNOWN_DATABASE_FORMAT_ERROR = 6 +local MMDB_INVALID_DATA_ERROR = 7 +local MMDB_INVALID_LOOKUP_PATH_ERROR = 8 +local MMDB_LOOKUP_PATH_DOES_NOT_MATCH_DATA_ERROR = 9 +local MMDB_INVALID_NODE_NUMBER_ERROR = 10 +local MMDB_IPV6_LOOKUP_IN_IPV4_DATABASE_ERROR = 11 + +-- data type +-- https://github.com/maxmind/libmaxminddb/blob/master/include/maxminddb.h#L40 +local MMDB_DATA_TYPE_EXTENDED = 0 +local MMDB_DATA_TYPE_POINTER = 1 +local MMDB_DATA_TYPE_UTF8_STRING = 2 +local MMDB_DATA_TYPE_DOUBLE = 3 +local MMDB_DATA_TYPE_BYTES = 4 +local MMDB_DATA_TYPE_UINT16 = 5 +local MMDB_DATA_TYPE_UINT32 = 6 +local MMDB_DATA_TYPE_MAP = 7 +local MMDB_DATA_TYPE_INT32 = 8 +local MMDB_DATA_TYPE_UINT64 = 9 +local MMDB_DATA_TYPE_UINT128 = 10 +local MMDB_DATA_TYPE_ARRAY = 11 +local MMDB_DATA_TYPE_CONTAINER = 12 +local MMDB_DATA_TYPE_END_MARKER = 13 +local MMDB_DATA_TYPE_BOOLEAN = 14 +local MMDB_DATA_TYPE_FLOAT = 15 + +-- copy from https://github.com/lilien1010/lua-resty-maxminddb/blob/f96633e2428f8f7bcc1e2a7a28b747b33233a8db/resty/maxminddb.lua#L136-L138 + +local initted = false + +local function mmdb_strerror(profile, rc) + return ffi_str(_D[profile].maxm.MMDB_strerror(rc)) +end + +local function gai_strerror(rc) + return ffi_str(C.gai_strerror(rc)) +end + +function _M.init(profiles) + for profile, location in pairs(profiles) do + _D[profile] = {} + _D[profile].maxm = ffi.load('/usr/local/openresty/1pwaf/data/libmaxminddb.so') + _D[profile].mmdb = ffi_new('MMDB_s') + local maxmind_ready = _D[profile].maxm.MMDB_open(location, 0, _D[profile].mmdb) + if maxmind_ready ~= MMDB_SUCCESS then + return nil, mmdb_strerror(profile, maxmind_ready) + end + ffi_gc(_D[profile].mmdb, _D[profile].maxm.MMDB_close) + end + + --if not initted then + -- local maxmind_ready = maxm.MMDB_open(dbfile, 0, mmdb) + -- + -- if maxmind_ready ~= MMDB_SUCCESS then + -- return nil, mmdb_strerror(maxmind_ready) + -- end + -- + -- + -- + -- ffi_gc(mmdb, maxm.MMDB_close) + --end + initted = true + return initted +end + +function _M.initted() + return initted +end + +-- https://github.com/maxmind/libmaxminddb/blob/master/src/maxminddb.c#L1938 +-- LOCAL MMDB_entry_data_list_s *dump_entry_data_list( FILE *stream, MMDB_entry_data_list_s *entry_data_list, int indent, int *status) +local function _dump_entry_data_list(entry_data_list, status) + + if not entry_data_list then + return nil, MMDB_INVALID_DATA_ERROR + end + + local entry_data_item = entry_data_list[0].entry_data + local data_type = entry_data_item.type + local data_size = entry_data_item.data_size + local result + + if data_type == MMDB_DATA_TYPE_MAP then + result = {} + + local size = entry_data_item.data_size + + entry_data_list = entry_data_list[0].next + + while (size > 0 and entry_data_list) + do + entry_data_item = entry_data_list[0].entry_data + data_type = entry_data_item.type + data_size = entry_data_item.data_size + + if MMDB_DATA_TYPE_UTF8_STRING ~= data_type then + return nil, MMDB_INVALID_DATA_ERROR + end + + local key = ffi_str(entry_data_item.utf8_string, data_size) + + if not key then + return nil, MMDB_OUT_OF_MEMORY_ERROR + end + + local val + entry_data_list = entry_data_list[0].next + entry_data_list, status, val = _dump_entry_data_list(entry_data_list) + + if status ~= MMDB_SUCCESS then + return nil, status + end + + result[key] = val + + size = size - 1 + end + + + elseif entry_data_list[0].entry_data.type == MMDB_DATA_TYPE_ARRAY then + local size = entry_data_list[0].entry_data.data_size + result = {} + + entry_data_list = entry_data_list[0].next + + local i = 1 + while (i <= size and entry_data_list) + do + local val + entry_data_list, status, val = _dump_entry_data_list(entry_data_list) + + if status ~= MMDB_SUCCESS then + return nil, nil, val + end + + result[i] = val + i = i + 1 + end + + + else + entry_data_item = entry_data_list[0].entry_data + data_type = entry_data_item.type + data_size = entry_data_item.data_size + + local val + -- string type "key":"val" + -- other type "key":val + -- default other type + if data_type == MMDB_DATA_TYPE_UTF8_STRING then + val = ffi_str(entry_data_item.utf8_string, data_size) + if not val then + status = MMDB_OUT_OF_MEMORY_ERROR + return nil, status + end + elseif data_type == MMDB_DATA_TYPE_BYTES then + val = ffi_str(ffi_cast('char * ', entry_data_item.bytes), data_size) + if not val then + status = MMDB_OUT_OF_MEMORY_ERROR + return nil, status + end + elseif data_type == MMDB_DATA_TYPE_DOUBLE then + val = entry_data_item.double_value + elseif data_type == MMDB_DATA_TYPE_FLOAT then + val = entry_data_item.float_value + elseif data_type == MMDB_DATA_TYPE_UINT16 then + val = entry_data_item.uint16 + elseif data_type == MMDB_DATA_TYPE_UINT32 then + val = entry_data_item.uint32 + elseif data_type == MMDB_DATA_TYPE_BOOLEAN then + val = entry_data_item.boolean + elseif data_type == MMDB_DATA_TYPE_UINT64 then + val = entry_data_item.uint64 + elseif data_type == MMDB_DATA_TYPE_INT32 then + val = entry_data_item.int32 + else + return nil, MMDB_INVALID_DATA_ERROR + end + + result = val + entry_data_list = entry_data_list[0].next + end + + status = MMDB_SUCCESS + return entry_data_list, status, result +end + +function _M.lookup(profile, ip) + + if not initted then + return nil, "not initialized" + end + + -- copy from https://github.com/lilien1010/lua-resty-maxminddb/blob/f96633e2428f8f7bcc1e2a7a28b747b33233a8db/resty/maxminddb.lua#L159-L176 + local gai_error = ffi_new('int[1]') + local mmdb_error = ffi_new('int[1]') + + local result = _D[profile].maxm.MMDB_lookup_string(_D[profile].mmdb, ip, gai_error, mmdb_error) + + if mmdb_error[0] ~= MMDB_SUCCESS then + return nil, 'lookup failed: ' .. mmdb_strerror(profile, mmdb_error[0]) + end + + if gai_error[0] ~= MMDB_SUCCESS then + return nil, 'lookup failed: ' .. gai_strerror(gai_error[0]) + end + + if true ~= result.found_entry then + return nil, 'not found' + end + + local entry_data_list = ffi_cast('MMDB_entry_data_list_s **const', ffi_new("MMDB_entry_data_list_s")) + + local status = _D[profile].maxm.MMDB_get_entry_data_list(result.entry, entry_data_list) + + if status ~= MMDB_SUCCESS then + return nil, 'get entry data failed: ' .. mmdb_strerror(profile, status) + end + + local head = entry_data_list[0] -- Save so this can be passed to free fn. + local _, status, result = _dump_entry_data_list(entry_data_list) + _D[profile].maxm.MMDB_free_entry_data_list(head) + + if status ~= MMDB_SUCCESS then + return nil, 'dump entry data failed: ' .. mmdb_strerror(profile, status) + end + + return result +end + +-- copy from https://github.com/lilien1010/lua-resty-maxminddb/blob/master/resty/maxminddb.lua#L208 +-- https://www.maxmind.com/en/geoip2-databases you should download the mmdb file from maxmind + +return _M; diff --git a/plugins/openresty/waf/lib/stringutf8.lua b/plugins/openresty/waf/lib/stringutf8.lua new file mode 100644 index 000000000..921757392 --- /dev/null +++ b/plugins/openresty/waf/lib/stringutf8.lua @@ -0,0 +1,149 @@ +local error = error +local str_len = string.len +local new_table = table.new +local concat_table = table.concat +local insert_table = table.insert +local byte_str = string.byte +local sub_str = string.sub +local type = type +local abs = math.abs +local match_str = string.match +local ngx_re_gsub = ngx.re.gsub + +local _M = {} + +local INDEX_OUT_OF_RANGE = "String index out of range: " +local NOT_NUMBER = "number expected, got " +local NOT_STRING = "string expected, got " +local NOT_STRING_NIL = "string expected, got nil" + +function _M.to_char_array(str) + local array + if str then + local length = str_len(str) + array = new_table(length, 0) + + local byteLength = 1 + local i, j = 1, 1 + while i <= length do + local firstByte = byte_str(str, i) + if firstByte >= 0 and firstByte < 128 then + byteLength = 1 + + elseif firstByte > 191 and firstByte < 224 then + byteLength = 2 + + elseif firstByte > 223 and firstByte < 240 then + byteLength = 3 + + elseif firstByte > 239 and firstByte < 248 then + byteLength = 4 + end + + j = i + byteLength + local char = sub_str(str, i, j - 1) + i = j + insert_table(array, char) + end + end + + return array +end + +function _M.sub(str, i, j) + local str_sub + if str then + if i == nil then + i = 1 + end + + if type(i) ~= "number" then + error(NOT_NUMBER .. type(i)) + end + + if i < 1 then + error(INDEX_OUT_OF_RANGE .. i) + end + + if j then + if type(j) ~= "number" then + error(NOT_NUMBER .. type(j)) + end + end + + local array = _M.to_char_array(str) + if array then + local length = #array + local subLen = length - i + if subLen < 0 then + error(INDEX_OUT_OF_RANGE .. subLen) + end + + if not j then + str_sub = concat_table(array, "", i) + else + if abs(j) > length then + error(INDEX_OUT_OF_RANGE .. j) + end + if j < 0 then + j = length + j + 1 + end + str_sub = concat_table(array, "", i, j) + end + end + end + + return str_sub +end + +function _M.trim(str) + if str then + str = ngx_re_gsub(str, "^\\s*|\\s*$", "", "jo") + end + + return str +end + +function _M.len(str) + local str_length = 0 + if str then + if type(str) ~= "string" then + error(NOT_STRING .. type(str)) + end + + local length = str_len(str) + + local i = 1 + while i <= length do + local firstByte = byte_str(str, i) + if firstByte >= 0 and firstByte < 128 then + i = i + 1 + + elseif firstByte > 191 and firstByte < 224 then + i = i + 2 + + elseif firstByte > 223 and firstByte < 240 then + i = i + 3 + + elseif firstByte > 239 and firstByte < 248 then + i = i + 4 + end + + str_length = str_length + 1 + end + else + error(NOT_STRING_NIL) + end + + return str_length +end + +function _M.default_if_blank(str, default_str) + if str == nil or match_str(str, "^%s*$") then + return default_str + end + + return str +end + +return _M diff --git a/plugins/openresty/waf/lib/utils.lua b/plugins/openresty/waf/lib/utils.lua new file mode 100644 index 000000000..a0b9e9153 --- /dev/null +++ b/plugins/openresty/waf/lib/utils.lua @@ -0,0 +1,123 @@ +local sub_str = string.sub +local pairs = pairs +local insert_table = table.insert +local tonumber = tonumber +local ipairs = ipairs +local type = type +local find_str = string.find + +local _M = {} + +function _M.split(input_string, delimiter) + local result = {} + for part in input_string:gmatch("([^" .. delimiter .. "]+)") do + insert_table(result, part) + end + return result +end + +function _M.get_cookie_list(cookie_str) + local cookies = {} + for cookie in cookie_str:gmatch("([^;]+)") do + local key, value = cookie:match("^%s*([^=]+)=(.*)$") + if key and value then + cookies[key] = value + end + end + return cookies +end + +function _M.unescape_uri(str) + local newStr = str + for t = 1, 2 do + local temp = ngx.unescape_uri(newStr) + if not temp then + break + end + newStr = temp + end + return newStr +end + +function _M.get_expire_time() + local localtime = ngx.localtime() + local hour = sub_str(localtime, 12, 13) + local expire_time = (24 - tonumber(hour)) * 3600 + return expire_time +end + +function _M.get_date_hour() + local localtime = ngx.localtime() + local hour = sub_str(localtime, 1, 13) + return hour +end + +function _M.getHours() + local hours = {} + local today = ngx.today() + local hour = nil + for i = 0, 23 do + if i < 10 then + hour = today .. ' 0' .. i + else + hour = today .. ' ' .. i + end + hours[i + 1] = hour + end + + return hours +end + +function _M.ipv4_to_int(ip) + local ipInt = 0 + for i, octet in ipairs({ ip:match("(%d+)%.(%d+)%.(%d+)%.(%d+)") }) do + ipInt = ipInt + tonumber(octet) * 256 ^ (4 - i) + end + return ipInt +end + +function _M.is_ipv6(ip) + if find_str(ip, ':') then + return true + end + return false +end + +function _M.is_ip_in_array(ip, ipStart, ipEnd) + if ip >= ipStart and ip <= ipEnd then + return true + end + return false +end + +function _M.get_real_ip() + local var = ngx.var + local ips = { + var.http_x_forwarded_for, + var.http_proxy_client_ip, + var.http_wl_proxy_client_ip, + var.http_http_client_ip, + var.http_http_x_forwarded_for, + var.remote_addr + } + + for _, ip in pairs(ips) do + if ip and ip ~= "" then + if type(ip) == "table" then + ip = ip[1] + end + return ip + end + end + + return "unknown" +end + +function _M.get_header(headerKey) + return ngx.req.get_headers(20000)[headerKey] +end + +function _M.get_headers() + return ngx.req.get_headers(20000) +end +return _M diff --git a/plugins/openresty/waf/log_and_traffic.lua b/plugins/openresty/waf/log_and_traffic.lua new file mode 100644 index 000000000..65ef33d52 --- /dev/null +++ b/plugins/openresty/waf/log_and_traffic.lua @@ -0,0 +1,232 @@ +local utils = require "utils" +local stringutf8 = require "stringutf8" +local logger_factory = require "logger_factory" +local db = require "db" +local config = require "config" +local redis_util = require "redis_util" +local action = require "action" + +local upper_str = string.upper +local concat_table = table.concat +local tonumber = tonumber +local get_expire_time = utils.get_expire_time +local get_date_hour = utils.get_date_hour +local get_today = ngx.today + +local ATTACK_PREFIX = "attack_" +local ATTACK_TYPE_PREFIX = "attack_type_" + +local function writeAttackLog() + local rule_table = ngx.ctx.rule_table + local data = ngx.ctx.hitData + local action = ngx.ctx.action + local rule = rule_table.rule + + local rule_type = rule_table.type + if not rule_type then + rule_type = "default" + end + + local realIp = ngx.ctx.ip + + local geoip = ngx.ctx.geoip + local country = geoip.country["zh"] or "" + local province = geoip.province["zh"] or "" + local city = "" + local longitude = geoip.longitude + local latitude = geoip.latitude + + local method = ngx.req.get_method() + local uri = ngx.var.request_uri + local ua = ngx.ctx.ua + local host = ngx.var.server_name + local protocol = ngx.var.server_protocol + local attackTime = ngx.localtime() + + local website_key = ngx.ctx.website_key + + local address = country .. province .. city + address = stringutf8.default_if_blank(address, '-') + ua = stringutf8.default_if_blank(ua, '-') + data = stringutf8.default_if_blank(data, '-') + + local log_path = "/www/sites/" .. website_key .. "/attack.log" + local logStr = concat_table({ rule_type, realIp, address, "[" .. attackTime .. "]", '"' .. method, host, uri, protocol .. '"', data, '"' .. ua .. '"', '"' .. rule .. '"', action }, ' ') + local host_logger = logger_factory.get_logger(log_path, host, true) + host_logger:log(logStr .. '\n') + + db.init_db() + if wafdb == nil then + return false + end + + local isBlock = 0 + local blocking_time = 0 + if ngx.ctx.ipBlocked then + isBlock = 1 + blocking_time = tonumber(rule_table.ipBlockTime) + end + + local insertQuery = [[ + INSERT INTO attack_log ( + ip, ip_city, ip_country, ip_subdivisions, ip_continent, + ip_longitude, ip_latitude, time, localtime, server_name, + website_key, host, method, uri, user_agent, rule, + nginx_log, blocking_time, action, msg, params, is_block + ) VALUES ( + :realIp, :city, :country, :subdivisions, :continent, + :longitude, :latitude, :time, :localtime, :host, + :website_key, :host, :method, :uri, :ua, :rule_type, + :logStr, :blocking_time, :action, :msg, :params, :is_block + ) + ]] + + local stmt = wafdb:prepare(insertQuery) + + stmt:bind_names { + realIp = realIp, + city = city, + country = country, + subdivisions = "", + continent = "", + longitude = longitude, + latitude = latitude, + time = os.time(), + localtime = os.date("%Y-%m-%d %H:%M:%S", os.time()), + host = host, + website_key = website_key, + method = method, + uri = uri, + ua = ua, + rule_type = rule_type, + logStr = logStr, + blocking_time = blocking_time or 0, + action = action, + msg = "msg", + params = "Params", + is_block = isBlock + } + + local code = stmt:step() + stmt:finalize() + + if code ~= 101 then + local errorMsg = wafdb:errmsg() + if errorMsg then + ngx.log(ngx.ERR, "insert attack_log error", errorMsg) + end + end + +end + +local function writeIPBlockLog() + local rule_table = ngx.ctx.rule_table + local ip = ngx.ctx.ip + local website_key = ngx.ctx.website_key + local log_path = "/www/sites/" .. website_key .. "/attack.log" + local host_logger = logger_factory.get_logger(log_path .. "ipBlock.log", 'ipBlock', false) + + host_logger:log(concat_table({ ngx.localtime(), ip, rule_table.type, rule_table.ipBlockTime .. 's' }, ' ') .. "\n") + + --todo 永久拉黑IP + --if rule_table.ipBlockTimeout == 0 then + -- local ipBlackLogger = logger_factory.get_logger(rulePath .. "ipBlackList", 'ipBlack', false) + -- ipBlackLogger:log(ip .. "\n") + --end +end + +-- 按小时统计当天请求流量,存入缓存,key格式:2023-05-05 09 +local function countRequestTraffic() + local hour = get_date_hour() + local dict = ngx.shared.dict_req_count + local expire_time = get_expire_time() + local count, err = dict:incr(hour, 1, 0, expire_time) + if not count then + dict:set(hour, 1, expire_time) + ngx.log(ngx.ERR, "failed to count traffic ", err) + end +end + +--[[ + 按小时统计当天攻击请求流量,存入缓存,key格式:attack_2023-05-05 09 + 按天统计当天所有攻击类型流量,存入缓存,key格式:attack_type_2023-05-05_ARGS +]] +local function countAttackRequestTraffic() + local rule_table = ngx.ctx.rule_table + local rule_type = "" + if rule_table.rule_type then + rule_type = upper_str(rule_table.rule_type) + end + if rule_table.type then + rule_type = upper_str(rule_table.type) + end + local dict = ngx.shared.dict_req_count + local count, err = nil, nil + local expire_time = get_expire_time() + + if rule_type ~= 'WHITEIP' then + local hour = get_date_hour() + local key = ATTACK_PREFIX .. hour + count, err = dict:incr(key, 1, 0, expire_time) + if not count then + dict:set(key, 1, expire_time) + ngx.log(ngx.ERR, "failed to count attack traffic ", err) + end + end + + local today = get_today() .. '_' + local type_key = ATTACK_TYPE_PREFIX .. today .. rule_type + count, err = dict:incr(type_key, 1, 0, expire_time) + + if not count and err == "not found" then + dict:set(type_key, 1, expire_time) + ngx.log(ngx.ERR, "failed to count attack traffic ", err) + end +end + +local function count_not_found() + if ngx.status ~= 404 then + return + end + if config.is_global_state_on("notFoundCount") then + local ip = ngx.ctx.ip + local not_found_config = config.get_global_config("notFoundCount") + local key = ip + + if config.is_redis_on() then + key = "cc_attack_count:" .. key + local count, _ = redis_util.incr(key, not_found_config.duration) + if not count then + redis_util.set(key, 1, not_found_config.duration) + elseif count >= not_found_config.threshold then + action.block_ip(ip, not_found_config) + return + end + else + key = ip .. "not_found" + local limit = ngx.shared.waf_limit + local count, _ = limit:incr(key, 1, 0, not_found_config.duration) + if not count then + limit:set(key, 1, not_found_config.duration) + elseif count >= not_found_config.threshold then + action.block_ip(ip, not_found_config) + return + end + end + end +end + +if config.is_waf_on() then + count_not_found() + countRequestTraffic() + local isAttack = ngx.ctx.isAttack + + if isAttack then + writeAttackLog() + countAttackRequestTraffic() + end + + -- if ngx.ctx.ipBlocked then + -- writeIPBlockLog() + -- end +end diff --git a/plugins/openresty/waf/rules/acl.json b/plugins/openresty/waf/rules/acl.json new file mode 100644 index 000000000..93a40514b --- /dev/null +++ b/plugins/openresty/waf/rules/acl.json @@ -0,0 +1,23 @@ +{ + "rules": [ + { + "state": "on", + "rule": "no Cookie", + "name": "拦截不带Cookie的请求", + "conditions": [ + { + "field": "URL", + "pattern": "/test/\\d+\\.html" + }, + { + "field": "Cookie", + "pattern": "" + } + ], + "action": "deny", + "autoIpBlock": "off", + "ipBlockTimeout": 60, + "description": "拦截不带Cookie的请求" + } + ] +} \ No newline at end of file diff --git a/plugins/openresty/waf/rules/args.json b/plugins/openresty/waf/rules/args.json new file mode 100644 index 000000000..484515da2 --- /dev/null +++ b/plugins/openresty/waf/rules/args.json @@ -0,0 +1,88 @@ +{ + "rules": [ + { + "state": "on", + "rule": "select.+(from|limit)" + }, + { + "state": "on", + "rule": "(?:(union(.*?)select))" + }, + { + "state": "on", + "rule": "having|rongjitest" + }, + { + "state": "on", + "rule": "sleep\\((\\s*)(\\d*)(\\s*)\\)" + }, + { + "state": "on", + "rule": "benchmark\\((.*)\\,(.*)\\)" + }, + { + "state": "on", + "rule": "(?:from\\W+information_schema\\W)" + }, + { + "state": "on", + "rule": "(?:(?:current_)user|database|schema|connection_id)\\s*\\(" + }, + { + "state": "on", + "rule": "(?:etc\\/\\W*passwd)" + }, + { + "state": "on", + "rule": "into(\\s+)+(?:dump|out)file\\s*" + }, + { + "state": "on", + "rule": "group\\s+by.+\\(" + }, + { + "state": "on", + "rule": "xwork.MethodAccessor" + }, + { + "state": "on", + "rule": "(?:define|eval|file_get_contents|include|require|require_once|shell_exec|phpinfo|system|passthru|preg_\\w+|execute|echo|print|print_r|var_dump|(fp)open|alert|showmodaldialog)\\(" + }, + { + "state": "on", + "rule": "xwork\\.MethodAccessor" + }, + { + "state": "on", + "rule": "(gopher|doc|php|glob|file|phar|zlib|ftp|ldap|dict|ogg|data)\\:\\/" + }, + { + "state": "on", + "rule": "java\\.lang" + }, + { + "state": "on", + "rule": "\\$_(GET|post|cookie|files|session|env|phplib|GLOBALS|SERVER)\\[" + }, + { + "state": "on", + "rule": "\\<(iframe|script|body|img|layer|div|meta|style|base|object|input)" + }, + { + "state": "on", + "rule": "(onmouseover|onerror|onload)\\=" + }, + { + "state": "on", + "rule": "/shell?cd+/tmp;\\s*rm+-rf\\+\\*;\\s*wget" + }, + { + "state": "on", + "rule": "/systembc/password.php" + }, + { + "state":"on", + "rule":"(Acunetix-Aspect|Acunetix-Aspect-Password|Acunetix-Aspect-Queries|X-WIPP|X-RequestManager-Memo|X-Request-Memo|X-Scan-Memo)" + } + ] +} \ No newline at end of file diff --git a/plugins/openresty/waf/rules/ccurl.json b/plugins/openresty/waf/rules/ccurl.json new file mode 100644 index 000000000..544b7b4dd --- /dev/null +++ b/plugins/openresty/waf/rules/ccurl.json @@ -0,0 +1,3 @@ +{ + +} \ No newline at end of file diff --git a/plugins/openresty/waf/rules/cookie.json b/plugins/openresty/waf/rules/cookie.json new file mode 100644 index 000000000..98323476e --- /dev/null +++ b/plugins/openresty/waf/rules/cookie.json @@ -0,0 +1,88 @@ +{ + "rules": [ + { + "state": "on", + "rule": "\\.\\./" + }, + { + "state": "on", + "rule": "\\:\\$" + }, + { + "state": "on", + "rule": "\\$\\{" + }, + { + "state": "on", + "rule": "select.+(from|limit)" + }, + { + "state": "on", + "rule": "(?:(union(.*?)select))" + }, + { + "state": "on", + "rule": "having|rongjitest" + }, + { + "state": "on", + "rule": "sleep\\((\\s*)(\\d*)(\\s*)\\)" + }, + { + "state": "on", + "rule": "benchmark\\((.*)\\,(.*)\\)" + }, + { + "state": "on", + "rule": "base64_decode\\(" + }, + { + "state": "on", + "rule": "(?:from\\W+information_schema\\W)" + }, + { + "state": "on", + "rule": "(?:(?:current_)user|database|schema|connection_id)\\s*\\(" + }, + { + "state": "on", + "rule": "(?:etc\\/\\W*passwd)" + }, + { + "state": "on", + "rule": "into(\\s+)+(?:dump|out)file\\s*" + }, + { + "state": "on", + "rule": "group\\s+by.+\\(" + }, + { + "state": "on", + "rule": "xwork.MethodAccessor" + }, + { + "state": "on", + "rule": "(?:define|eval|file_get_contents|include|require|require_once|shell_exec|phpinfo|system|passthru|preg_\\w+|execute|echo|print|print_r|var_dump|(fp)open|alert|showmodaldialog)\\(" + }, + { + "state": "on", + "rule": "xwork\\.MethodAccessor" + }, + { + "state": "on", + "rule": "(gopher|doc|php|glob|file|phar|zlib|ftp|ldap|dict|ogg|data)\\:\\/" + }, + { + "state": "on", + "rule": "java\\.lang" + }, + { + "state": "on", + "rule": "\\$_(GET|post|cookie|files|session|env|phplib|GLOBALS|SERVER)\\[" + }, + { + "state":"on", + "rule":"(CustomCookie|acunetixCookie)" + } + ] +} \ No newline at end of file diff --git a/plugins/openresty/waf/rules/defaultUaBlack.json b/plugins/openresty/waf/rules/defaultUaBlack.json new file mode 100644 index 000000000..5932b3725 --- /dev/null +++ b/plugins/openresty/waf/rules/defaultUaBlack.json @@ -0,0 +1,16 @@ +{ + "nextId": 3, + "rules": [ + { + "id": 1, + "state": "on", + "type": "defaultUABlack", + "action": "deny", + "rule": "HTTrack|Apache-HttpClient|harvest|audit|dirbuster|pangolin|nmap|sqln|hydra|Parser|libwww|BBBike|sqlmap|w3af|owasp|Nikto|fimap|havij|zmeu|BabyKrokodil|netsparker|httperf| SF/", + "ipBlock": "on", + "ipBlockTimeout": 600, + "code": 403, + "description": "一些不友好ua" + } + ] +} \ No newline at end of file diff --git a/plugins/openresty/waf/rules/header.json b/plugins/openresty/waf/rules/header.json new file mode 100644 index 000000000..58bc639d4 --- /dev/null +++ b/plugins/openresty/waf/rules/header.json @@ -0,0 +1,7 @@ +{ + "rules":[ + {"state":"on","rule":"/TomcatBypass/Command/Base64"}, + {"state":"on","rule":"j\\S*ndi\\S*:\\S*(?:dap|dns)\\S+"}, + {"state":"on","rule":"(/acunetix-wvs-test-for-some-inexistent-file|netsparker|acunetix_wvs_security_test|AppScan|XSS@HERE)"} + ] +} \ No newline at end of file diff --git a/plugins/openresty/waf/rules/ipBlack.json b/plugins/openresty/waf/rules/ipBlack.json new file mode 100644 index 000000000..bd0c7228e --- /dev/null +++ b/plugins/openresty/waf/rules/ipBlack.json @@ -0,0 +1,10 @@ +{ + "rules": [ + { + "name": "拦截IP", + "state": "on", + "type": "ipv4", + "ipv4": "123" + } + ] +} \ No newline at end of file diff --git a/plugins/openresty/waf/rules/ipBlackList b/plugins/openresty/waf/rules/ipBlackList new file mode 100644 index 000000000..a9efb5db1 --- /dev/null +++ b/plugins/openresty/waf/rules/ipBlackList @@ -0,0 +1,10000 @@ +1.11.62.185 +1.116.157.153 +1.117.199.237 +1.117.229.208 +1.14.68.155 +1.15.154.181 +1.15.94.16 +1.169.208.128 +1.173.116.74 +1.173.195.114 +1.179.202.86 +1.20.253.226 +1.203.115.79 +1.213.251.50 +1.215.116.254 +1.215.233.74 +1.219.223.120 +1.22.126.92 +1.22.129.50 +1.22.130.86 +1.22.228.147 +1.22.54.70 +1.222.42.150 +1.223.107.138 +1.226.194.70 +1.233.206.27 +1.234.2.45 +1.234.47.239 +1.234.80.51 +1.24.38.202 +1.245.61.144 +1.246.222.94 +1.254.228.72 +1.28.193.174 +1.28.86.66 +1.30.20.110 +1.34.105.239 +1.34.105.8 +1.34.17.141 +1.34.230.122 +1.34.58.224 +1.34.69.11 +1.34.70.148 +1.36.71.153 +1.54.190.115 +1.56.207.92 +1.58.216.36 +1.70.124.45 +1.70.126.34 +1.70.13.86 +1.70.143.236 +1.70.8.212 +1.70.8.233 +1.70.84.132 +1.70.9.98 +1.71.253.133 +1.82.135.154 +1.82.194.17 +1.9.78.242 +100.38.226.74 +101.128.68.195 +101.13.0.13 +101.13.0.210 +101.13.0.228 +101.13.0.246 +101.13.0.81 +101.13.0.88 +101.176.27.159 +101.178.223.39 +101.200.166.251 +101.206.243.239 +101.207.6.21 +101.230.116.194 +101.231.146.36 +101.255.73.74 +101.32.11.149 +101.32.31.213 +101.32.74.175 +101.33.123.220 +101.33.80.197 +101.34.35.141 +101.36.104.224 +101.36.107.47 +101.36.108.106 +101.36.118.6 +101.36.97.131 +101.37.150.247 +101.42.138.160 +101.42.226.80 +101.42.25.236 +101.42.253.85 +101.42.33.235 +101.43.110.129 +101.43.155.190 +101.43.82.213 +101.50.2.233 +101.50.87.246 +101.58.98.180 +101.66.144.202 +101.75.56.14 +101.89.219.59 +101.98.52.66 +101.99.33.97 +102.128.193.2 +102.128.78.42 +102.129.153.232 +102.129.153.241 +102.129.37.140 +102.165.48.84 +102.165.96.5 +102.182.226.28 +102.217.123.243 +102.218.10.141 +102.219.86.14 +102.220.16.21 +102.220.22.34 +102.220.23.51 +102.220.23.83 +102.222.160.111 +102.23.122.231 +102.36.230.165 +102.50.251.51 +102.90.34.90 +103.10.20.136 +103.101.225.67 +103.102.152.11 +103.104.29.43 +103.106.104.9 +103.106.154.15 +103.107.97.160 +103.108.146.96 +103.11.81.132 +103.110.13.27 +103.115.130.5 +103.116.52.145 +103.116.52.251 +103.116.52.254 +103.116.52.255 +103.116.52.89 +103.116.53.106 +103.116.53.121 +103.116.53.170 +103.117.103.13 +103.117.180.72 +103.117.213.164 +103.118.168.67 +103.12.162.93 +103.12.199.14 +103.120.178.54 +103.121.19.171 +103.121.90.183 +103.123.239.41 +103.127.36.123 +103.129.212.246 +103.13.206.121 +103.130.214.232 +103.130.215.45 +103.130.218.156 +103.130.218.189 +103.133.108.61 +103.133.111.214 +103.133.20.61 +103.135.208.210 +103.135.35.58 +103.135.88.206 +103.137.89.38 +103.138.173.5 +103.14.26.208 +103.143.171.228 +103.143.239.211 +103.143.72.105 +103.144.243.112 +103.144.247.252 +103.144.87.192 +103.144.87.84 +103.145.179.54 +103.145.50.168 +103.146.140.66 +103.146.176.238 +103.146.202.151 +103.146.21.5 +103.147.162.114 +103.147.242.68 +103.147.62.157 +103.149.26.51 +103.149.26.89 +103.149.27.51 +103.149.28.105 +103.149.28.238 +103.150.117.41 +103.153.92.75 +103.154.94.27 +103.155.105.254 +103.156.86.18 +103.156.93.143 +103.157.104.233 +103.157.114.74 +103.157.115.26 +103.157.126.122 +103.157.26.11 +103.157.26.145 +103.158.139.227 +103.159.206.94 +103.16.136.149 +103.160.236.91 +103.160.3.10 +103.160.5.233 +103.161.254.150 +103.162.20.168 +103.162.29.14 +103.162.68.23 +103.163.139.202 +103.163.215.12 +103.164.221.210 +103.164.98.138 +103.165.130.154 +103.167.134.71 +103.167.35.109 +103.168.56.208 +103.169.214.101 +103.171.91.192 +103.172.94.224 +103.173.78.11 +103.175.206.43 +103.176.151.88 +103.176.79.0 +103.176.79.163 +103.176.96.66 +103.176.96.68 +103.176.96.75 +103.176.97.6 +103.178.228.17 +103.178.228.27 +103.178.228.28 +103.178.228.31 +103.178.228.34 +103.178.228.35 +103.178.228.40 +103.178.229.173 +103.178.229.175 +103.178.229.198 +103.178.229.216 +103.178.229.217 +103.178.236.17 +103.179.242.51 +103.179.242.89 +103.179.56.169 +103.179.57.150 +103.180.120.170 +103.181.142.170 +103.181.156.23 +103.183.74.227 +103.183.75.49 +103.185.243.3 +103.186.100.104 +103.187.110.186 +103.187.147.100 +103.187.147.35 +103.187.190.40 +103.187.191.147 +103.187.191.157 +103.187.191.161 +103.187.191.162 +103.187.191.165 +103.187.191.166 +103.187.191.167 +103.187.191.176 +103.187.191.177 +103.187.191.185 +103.187.191.194 +103.187.191.204 +103.187.191.209 +103.187.191.216 +103.187.191.223 +103.187.191.226 +103.187.191.229 +103.187.191.235 +103.187.191.238 +103.187.191.241 +103.187.191.253 +103.187.198.34 +103.187.9.9 +103.189.234.25 +103.189.235.178 +103.191.15.239 +103.191.178.123 +103.191.92.4 +103.192.213.124 +103.194.243.183 +103.195.236.140 +103.195.237.103 +103.199.210.150 +103.2.233.237 +103.20.191.36 +103.20.34.160 +103.200.20.70 +103.200.22.70 +103.203.224.181 +103.203.57.13 +103.203.57.15 +103.203.57.16 +103.203.57.2 +103.203.57.22 +103.203.57.23 +103.203.57.28 +103.203.57.4 +103.203.57.6 +103.203.58.0 +103.203.58.1 +103.203.58.2 +103.203.59.12 +103.203.59.14 +103.203.59.2 +103.203.59.4 +103.203.59.6 +103.203.59.8 +103.204.200.75 +103.205.112.25 +103.206.131.33 +103.207.36.13 +103.209.101.142 +103.21.77.110 +103.211.217.103 +103.213.116.60 +103.214.20.54 +103.215.80.141 +103.216.220.22 +103.216.223.204 +103.217.78.2 +103.218.243.130 +103.221.252.46 +103.224.119.102 +103.224.201.63 +103.224.243.143 +103.224.36.226 +103.226.138.171 +103.227.130.46 +103.230.154.34 +103.231.46.66 +103.232.245.27 +103.233.94.20 +103.234.209.66 +103.235.199.37 +103.237.144.204 +103.237.145.121 +103.237.145.23 +103.237.146.15 +103.238.71.108 +103.239.38.122 +103.242.0.159 +103.242.199.99 +103.248.120.6 +103.248.60.70 +103.250.10.88 +103.250.11.146 +103.250.11.181 +103.250.11.82 +103.250.159.26 +103.253.146.6 +103.253.147.160 +103.253.175.10 +103.254.71.45 +103.26.136.173 +103.26.87.29 +103.27.203.40 +103.28.205.219 +103.28.52.210 +103.29.3.6 +103.30.43.137 +103.35.72.217 +103.36.192.42 +103.37.125.10 +103.37.83.26 +103.38.4.238 +103.39.133.250 +103.39.8.108 +103.4.64.124 +103.45.234.22 +103.46.240.85 +103.47.57.205 +103.48.116.56 +103.48.193.146 +103.48.193.51 +103.53.169.102 +103.54.57.185 +103.54.93.58 +103.55.75.8 +103.56.61.130 +103.56.61.132 +103.56.61.139 +103.56.61.144 +103.63.111.14 +103.66.48.67 +103.66.50.94 +103.67.162.252 +103.67.165.114 +103.68.52.210 +103.7.40.39 +103.70.142.229 +103.72.147.115 +103.72.6.149 +103.74.105.158 +103.74.72.221 +103.75.148.11 +103.75.198.171 +103.75.199.180 +103.75.199.40 +103.78.143.130 +103.78.88.51 +103.82.145.161 +103.82.21.117 +103.82.241.69 +103.82.93.127 +103.82.93.6 +103.83.149.97 +103.83.81.183 +103.83.81.212 +103.83.81.247 +103.84.165.22 +103.84.236.242 +103.85.23.10 +103.86.146.140 +103.86.181.235 +103.87.102.235 +103.87.236.90 +103.89.14.88 +103.9.159.153 +103.9.36.159 +103.9.36.169 +103.90.177.102 +103.90.227.194 +103.91.136.18 +103.91.44.214 +103.92.37.130 +103.92.39.219 +103.92.47.112 +103.93.201.206 +103.94.108.86 +103.96.129.191 +103.96.151.129 +103.96.151.81 +103.97.178.122 +103.97.247.139 +103.98.176.2 +103.98.214.139 +103.99.10.254 +103.99.36.22 +104.128.228.242 +104.131.12.184 +104.131.13.185 +104.131.16.70 +104.131.164.24 +104.131.164.49 +104.131.178.116 +104.131.181.99 +104.131.190.193 +104.131.2.168 +104.131.3.1 +104.131.33.117 +104.131.40.97 +104.152.52.100 +104.152.52.202 +104.152.52.239 +104.152.59.65 +104.156.155.18 +104.156.155.20 +104.156.155.21 +104.156.155.23 +104.156.155.24 +104.156.155.25 +104.156.155.32 +104.156.155.36 +104.156.155.4 +104.158.110.144 +104.162.221.123 +104.168.14.104 +104.168.24.228 +104.168.64.249 +104.168.68.198 +104.168.96.7 +104.174.13.215 +104.178.73.49 +104.189.84.73 +104.194.11.171 +104.199.31.214 +104.199.35.3 +104.199.76.31 +104.200.151.16 +104.211.211.183 +104.211.77.31 +104.223.153.7 +104.236.111.25 +104.236.118.222 +104.236.128.10 +104.236.128.14 +104.236.182.223 +104.236.228.230 +104.236.237.117 +104.236.246.102 +104.236.7.248 +104.236.78.19 +104.237.240.112 +104.237.252.98 +104.238.83.196 +104.248.1.96 +104.248.10.177 +104.248.129.104 +104.248.131.9 +104.248.134.240 +104.248.138.141 +104.248.141.212 +104.248.146.84 +104.248.158.162 +104.248.159.2 +104.248.169.72 +104.248.18.94 +104.248.232.207 +104.248.241.28 +104.248.242.125 +104.248.248.145 +104.248.25.42 +104.248.251.47 +104.248.253.245 +104.248.29.97 +104.248.31.56 +104.248.34.182 +104.248.36.223 +104.248.92.191 +104.255.74.221 +104.33.199.93 +104.35.232.88 +104.45.17.110 +104.6.69.88 +105.174.38.254 +105.242.133.7 +105.28.108.165 +106.1.152.91 +106.10.122.53 +106.104.113.145 +106.104.126.227 +106.104.194.15 +106.111.38.199 +106.111.48.145 +106.116.169.71 +106.12.174.50 +106.13.106.2 +106.13.12.151 +106.13.87.43 +106.146.233.215 +106.15.44.72 +106.158.230.44 +106.201.230.253 +106.201.233.139 +106.201.236.236 +106.225.142.244 +106.225.193.35 +106.246.224.154 +106.255.249.194 +106.51.158.195 +106.51.3.214 +106.51.81.190 +106.54.184.26 +106.57.170.120 +106.73.74.0 +106.75.128.152 +106.75.136.216 +106.75.146.15 +106.75.148.71 +106.75.152.212 +106.75.156.223 +106.75.164.118 +106.75.164.148 +106.75.165.198 +106.75.182.206 +106.75.186.146 +106.75.41.146 +106.8.46.228 +106.91.215.100 +107.11.131.39 +107.128.177.61 +107.136.201.49 +107.150.104.174 +107.151.203.70 +107.155.48.224 +107.155.55.166 +107.170.192.15 +107.170.197.164 +107.170.20.63 +107.170.224.7 +107.170.225.6 +107.170.226.13 +107.170.226.25 +107.170.227.33 +107.170.228.15 +107.170.228.21 +107.170.229.11 +107.170.229.8 +107.170.231.15 +107.170.232.10 +107.170.233.14 +107.170.233.17 +107.170.234.10 +107.170.234.9 +107.170.235.12 +107.170.237.12 +107.170.238.11 +107.170.238.18 +107.170.238.27 +107.170.240.14 +107.170.240.15 +107.170.240.20 +107.170.240.25 +107.170.241.32 +107.170.241.33 +107.170.241.9 +107.170.242.13 +107.170.244.12 +107.170.244.8 +107.170.245.19 +107.170.245.9 +107.170.246.19 +107.170.247.11 +107.170.247.13 +107.170.247.5 +107.170.248.13 +107.170.248.16 +107.170.248.18 +107.170.249.12 +107.170.249.14 +107.170.249.17 +107.170.249.19 +107.170.249.24 +107.170.250.13 +107.170.250.24 +107.170.250.4 +107.170.250.8 +107.170.251.18 +107.170.251.22 +107.170.251.5 +107.170.252.8 +107.170.253.18 +107.170.253.22 +107.170.253.7 +107.170.254.16 +107.170.254.20 +107.170.255.16 +107.170.255.9 +107.170.39.69 +107.170.76.103 +107.172.140.147 +107.172.60.88 +107.172.63.31 +107.173.144.254 +107.173.157.241 +107.173.159.131 +107.173.165.18 +107.173.209.238 +107.174.11.69 +107.174.69.127 +107.175.127.57 +107.175.28.118 +107.175.44.163 +107.182.128.210 +107.182.16.2 +107.182.17.12 +107.182.20.3 +107.189.1.127 +107.189.14.134 +107.189.29.149 +107.189.3.216 +107.189.31.225 +107.189.31.70 +107.189.7.170 +107.189.8.106 +107.195.63.217 +107.5.40.213 +108.143.153.30 +108.160.199.151 +108.167.178.116 +108.189.246.204 +108.247.245.19 +108.252.209.104 +108.58.113.114 +108.7.206.106 +108.77.84.132 +108.87.157.123 +109.116.128.140 +109.122.221.224 +109.126.34.84 +109.132.246.238 +109.136.193.224 +109.166.171.93 +109.168.144.16 +109.173.113.117 +109.174.10.11 +109.194.108.68 +109.195.194.123 +109.195.69.156 +109.198.110.170 +109.205.213.10 +109.205.213.14 +109.205.213.18 +109.205.213.39 +109.205.213.4 +109.205.213.41 +109.205.213.5 +109.205.213.50 +109.205.213.8 +109.206.243.200 +109.207.200.42 +109.207.200.43 +109.224.33.245 +109.236.45.245 +109.237.96.50 +109.237.97.180 +109.237.98.134 +109.237.98.152 +109.237.98.157 +109.237.98.185 +109.237.98.226 +109.237.98.235 +109.248.6.78 +109.70.100.80 +109.87.185.154 +109.92.246.62 +109.98.208.42 +110.11.234.8 +110.136.216.227 +110.141.246.205 +110.164.149.230 +110.177.146.42 +110.178.36.79 +110.178.79.83 +110.180.145.241 +110.180.150.152 +110.180.152.205 +110.180.154.62 +110.180.161.61 +110.180.177.215 +110.181.118.122 +110.181.235.30 +110.182.126.249 +110.182.127.173 +110.182.15.234 +110.182.172.181 +110.182.236.29 +110.182.237.63 +110.182.239.127 +110.182.239.235 +110.182.250.143 +110.182.76.207 +110.183.16.40 +110.183.24.88 +110.183.49.160 +110.183.52.186 +110.183.53.3 +110.183.56.112 +110.183.58.125 +110.183.59.20 +110.189.153.136 +110.227.203.10 +110.227.251.79 +110.227.252.108 +110.227.254.14 +110.235.1.22 +110.235.243.121 +110.239.67.35 +110.248.92.88 +110.249.225.81 +110.25.99.24 +110.25.99.29 +110.25.99.92 +110.255.36.44 +110.35.173.2 +110.39.16.174 +110.39.51.118 +110.45.146.223 +110.45.147.98 +110.47.68.226 +110.49.142.111 +110.49.17.92 +110.49.17.93 +110.49.17.95 +110.78.211.84 +111.10.250.232 +111.121.218.101 +111.160.208.34 +111.161.124.84 +111.161.125.133 +111.161.65.143 +111.161.65.145 +111.161.65.146 +111.184.88.119 +111.2.71.183 +111.21.161.162 +111.220.36.50 +111.23.117.219 +111.235.252.166 +111.242.58.44 +111.252.139.172 +111.26.206.113 +111.33.43.86 +111.42.133.43 +111.50.82.29 +111.53.57.77 +111.53.66.90 +111.53.87.28 +111.56.185.82 +111.59.143.122 +111.61.166.54 +111.61.211.214 +111.61.212.166 +111.61.213.251 +111.61.90.125 +111.61.93.195 +111.63.22.72 +111.63.31.23 +111.63.40.221 +111.70.13.157 +111.70.13.24 +111.70.17.151 +111.70.18.246 +111.70.18.247 +111.70.18.248 +111.70.19.162 +111.70.19.2 +111.70.19.5 +111.70.20.43 +111.70.20.52 +111.70.28.126 +111.70.28.147 +111.70.28.148 +111.70.3.184 +111.70.36.127 +111.70.36.242 +111.70.37.121 +111.70.4.189 +111.74.8.14 +111.74.8.177 +111.75.223.17 +111.90.150.171 +111.90.150.28 +111.93.165.35 +111.93.227.210 +111.95.141.34 +112.102.48.9 +112.103.232.201 +112.111.0.245 +112.120.80.218 +112.121.189.108 +112.132.162.90 +112.133.221.5 +112.133.225.72 +112.133.238.235 +112.146.164.85 +112.146.205.124 +112.146.247.55 +112.146.37.154 +112.15.117.200 +112.157.108.141 +112.157.216.32 +112.158.45.230 +112.160.22.201 +112.160.255.234 +112.161.214.48 +112.161.23.195 +112.164.236.13 +112.165.36.129 +112.165.49.140 +112.166.10.205 +112.166.156.125 +112.167.160.115 +112.167.181.39 +112.168.126.45 +112.168.27.14 +112.170.0.12 +112.170.200.119 +112.170.99.123 +112.171.218.39 +112.172.191.54 +112.172.23.164 +112.173.125.118 +112.173.174.97 +112.173.74.224 +112.184.73.51 +112.185.10.38 +112.185.210.208 +112.186.10.254 +112.186.248.104 +112.186.86.93 +112.187.12.214 +112.187.236.253 +112.192.19.177 +112.196.223.233 +112.196.223.252 +112.196.43.138 +112.196.62.36 +112.196.9.83 +112.196.9.84 +112.213.120.23 +112.213.120.81 +112.216.108.62 +112.216.255.215 +112.216.96.154 +112.217.207.26 +112.220.111.68 +112.220.235.237 +112.221.85.251 +112.227.97.96 +112.229.192.217 +112.236.138.13 +112.241.192.34 +112.248.61.48 +112.248.91.162 +112.249.81.47 +112.250.202.54 +112.254.186.129 +112.28.209.66 +112.28.209.67 +112.28.35.90 +112.29.109.164 +112.31.56.247 +112.44.194.190 +112.44.197.40 +112.5.116.151 +112.5.178.33 +112.5.3.230 +112.51.249.235 +112.6.191.197 +112.6.212.233 +112.65.255.66 +112.78.134.11 +112.78.177.178 +112.98.70.5 +113.107.244.103 +113.125.140.19 +113.131.245.30 +113.140.8.194 +113.140.95.250 +113.141.67.184 +113.160.180.46 +113.160.226.178 +113.161.204.12 +113.161.55.188 +113.161.72.135 +113.161.74.57 +113.176.3.114 +113.192.108.90 +113.193.254.206 +113.194.140.185 +113.195.160.60 +113.203.237.139 +113.204.50.98 +113.221.25.169 +113.221.77.206 +113.228.251.122 +113.231.195.120 +113.236.135.204 +113.237.0.186 +113.239.199.60 +113.24.133.93 +113.24.155.72 +113.24.191.93 +113.249.91.151 +113.25.128.225 +113.25.220.0 +113.25.250.81 +113.252.14.157 +113.26.226.232 +113.26.237.174 +113.26.56.129 +113.31.162.174 +113.61.181.243 +113.61.242.221 +113.62.160.110 +113.70.145.219 +113.71.133.17 +113.87.80.214 +113.92.222.212 +114.100.173.209 +114.104.158.172 +114.108.203.204 +114.108.26.81 +114.129.98.159 +114.132.198.25 +114.132.216.237 +114.132.234.174 +114.132.47.71 +114.143.238.98 +114.199.146.159 +114.199.195.26 +114.199.228.43 +114.199.241.157 +114.204.218.154 +114.205.54.184 +114.207.113.200 +114.216.6.4 +114.218.54.110 +114.220.151.213 +114.221.222.138 +114.226.169.45 +114.226.238.146 +114.227.51.153 +114.227.55.90 +114.228.185.8 +114.230.13.217 +114.230.186.48 +114.230.69.118 +114.230.89.166 +114.233.167.133 +114.233.80.192 +114.237.7.151 +114.238.119.82 +114.238.55.201 +114.239.102.76 +114.239.103.104 +114.239.233.194 +114.239.245.216 +114.242.150.194 +114.242.150.195 +114.242.150.196 +114.242.150.197 +114.242.38.20 +114.27.80.145 +114.32.125.106 +114.32.23.237 +114.32.82.187 +114.33.12.94 +114.33.128.209 +114.33.148.196 +114.33.157.94 +114.33.163.26 +114.33.164.167 +114.33.249.200 +114.33.56.143 +114.33.80.198 +114.33.85.125 +114.34.166.161 +114.34.17.153 +114.34.209.65 +114.34.222.138 +114.35.0.225 +114.35.13.193 +114.35.150.12 +114.35.158.87 +114.35.174.221 +114.35.197.119 +114.35.197.238 +114.35.210.173 +114.35.253.17 +114.35.31.135 +114.35.35.235 +114.35.49.33 +114.35.53.123 +114.35.62.55 +114.35.74.153 +114.35.88.121 +114.4.110.242 +114.4.245.170 +114.44.130.176 +114.55.170.111 +114.7.149.178 +114.79.146.173 +114.95.170.105 +115.10.81.183 +115.117.116.238 +115.138.134.198 +115.144.5.228 +115.153.15.129 +115.156.98.113 +115.156.98.116 +115.156.98.117 +115.156.98.128 +115.21.212.7 +115.22.73.170 +115.221.87.15 +115.23.217.138 +115.231.197.46 +115.231.254.38 +115.236.24.10 +115.238.49.206 +115.239.233.166 +115.239.248.206 +115.241.167.73 +115.244.210.210 +115.244.249.214 +115.247.213.54 +115.247.46.122 +115.30.10.190 +115.50.44.172 +115.63.129.52 +115.66.226.203 +115.71.239.208 +115.75.142.7 +115.84.229.172 +115.85.53.93 +115.95.180.244 +115.95.229.59 +115.96.121.2 +115.96.134.127 +115.96.148.62 +116.109.45.9 +116.11.221.87 +116.110.78.195 +116.113.124.98 +116.113.248.242 +116.114.97.134 +116.118.50.209 +116.120.156.45 +116.132.3.182 +116.15.151.187 +116.169.117.6 +116.181.18.35 +116.193.135.66 +116.193.159.2 +116.199.110.30 +116.204.182.156 +116.224.91.211 +116.228.84.22 +116.235.87.163 +116.236.187.3 +116.247.112.133 +116.248.182.243 +116.3.136.45 +116.48.138.9 +116.48.142.227 +116.52.144.170 +116.6.56.66 +116.62.155.4 +116.63.155.156 +116.72.190.199 +116.73.52.160 +116.80.50.243 +116.86.105.45 +116.88.225.30 +116.9.120.88 +116.95.38.26 +116.97.183.226 +116.97.240.172 +116.97.240.36 +116.98.169.66 +116.98.175.31 +117.1.28.27 +117.1.29.203 +117.102.26.6 +117.131.215.118 +117.131.215.49 +117.139.244.182 +117.143.25.64 +117.156.196.23 +117.157.119.70 +117.157.87.15 +117.159.86.55 +117.160.239.182 +117.160.3.132 +117.161.75.117 +117.177.215.47 +117.198.97.239 +117.2.49.125 +117.20.204.72 +117.202.18.2 +117.210.147.136 +117.211.11.158 +117.213.147.127 +117.215.151.179 +117.216.210.111 +117.216.211.19 +117.220.10.3 +117.220.27.35 +117.221.201.222 +117.226.60.151 +117.239.103.109 +117.239.28.210 +117.240.54.235 +117.247.233.68 +117.247.73.31 +117.251.85.118 +117.4.136.219 +117.4.137.135 +117.4.139.243 +117.4.152.81 +117.50.160.88 +117.50.183.132 +117.54.148.142 +117.55.182.6 +117.57.64.232 +117.6.86.134 +117.62.218.192 +117.62.22.161 +117.62.8.14 +117.63.198.8 +117.63.20.46 +117.63.210.191 +117.63.211.101 +117.63.36.65 +117.63.55.43 +117.63.74.117 +117.66.241.77 +117.69.255.239 +117.7.231.248 +117.80.245.50 +117.80.96.172 +117.82.93.252 +117.83.69.230 +117.89.244.123 +117.95.228.222 +117.95.231.44 +118.10.120.118 +118.101.192.62 +118.122.251.12 +118.123.105.85 +118.123.105.86 +118.123.105.90 +118.140.205.198 +118.151.209.21 +118.16.60.111 +118.163.113.53 +118.163.195.248 +118.167.183.33 +118.169.156.135 +118.171.210.80 +118.171.240.143 +118.173.74.95 +118.189.243.164 +118.189.243.241 +118.189.8.99 +118.193.35.209 +118.193.44.153 +118.193.56.141 +118.193.57.165 +118.193.59.232 +118.193.59.38 +118.194.247.29 +118.194.250.122 +118.194.251.128 +118.200.42.154 +118.208.127.239 +118.219.110.245 +118.236.242.118 +118.250.176.178 +118.26.110.160 +118.27.35.131 +118.32.203.33 +118.34.117.189 +118.34.14.126 +118.34.209.108 +118.35.35.232 +118.37.84.210 +118.38.54.250 +118.39.187.179 +118.40.248.20 +118.41.20.49 +118.41.204.68 +118.41.204.91 +118.41.52.140 +118.42.124.208 +118.42.160.129 +118.42.22.88 +118.42.220.94 +118.43.95.157 +118.45.176.58 +118.45.205.44 +118.45.65.233 +118.46.126.131 +118.46.216.122 +118.46.28.173 +118.46.33.15 +118.47.181.231 +118.69.34.30 +118.69.55.101 +118.69.69.120 +118.70.127.105 +118.70.170.120 +118.70.180.188 +118.70.48.219 +118.70.49.114 +118.70.74.172 +118.91.62.21 +118.97.119.130 +118.97.212.14 +119.1.126.174 +119.114.59.100 +119.117.171.183 +119.147.212.2 +119.152.254.13 +119.159.226.40 +119.161.96.181 +119.161.97.218 +119.167.219.132 +119.167.99.194 +119.178.245.201 +119.179.222.182 +119.18.194.254 +119.181.149.119 +119.188.125.179 +119.193.179.58 +119.193.23.180 +119.193.4.247 +119.198.69.88 +119.199.165.150 +119.201.86.171 +119.202.128.28 +119.202.159.77 +119.202.218.154 +119.202.218.53 +119.202.30.133 +119.203.155.61 +119.203.36.32 +119.204.201.15 +119.23.105.36 +119.235.19.66 +119.24.76.5 +119.28.107.44 +119.28.115.223 +119.28.118.4 +119.28.2.174 +119.28.233.240 +119.28.27.80 +119.28.89.201 +119.29.132.223 +119.29.80.42 +119.4.250.94 +119.40.92.158 +119.5.157.124 +119.57.138.237 +119.62.212.184 +119.65.149.106 +119.66.109.149 +119.7.135.20 +119.73.179.114 +119.76.177.114 +119.77.134.56 +119.82.135.226 +119.91.207.158 +119.93.85.153 +119.96.101.211 +119.96.175.9 +12.172.110.78 +12.191.116.182 +12.215.177.146 +12.238.55.163 +12.251.130.22 +120.132.122.54 +120.147.35.210 +120.210.206.149 +120.210.206.169 +120.211.101.246 +120.211.110.161 +120.211.137.176 +120.211.138.2 +120.211.178.97 +120.220.54.143 +120.236.216.146 +120.236.219.71 +120.237.165.4 +120.237.206.76 +120.238.110.67 +120.238.71.252 +120.253.186.82 +120.253.197.112 +120.32.50.50 +120.43.48.157 +120.46.215.94 +120.48.37.213 +120.48.64.201 +120.48.86.186 +120.71.146.167 +120.78.193.162 +120.79.225.204 +120.85.114.109 +120.85.98.101 +120.86.141.251 +121.101.246.203 +121.106.136.76 +121.125.112.70 +121.127.234.162 +121.127.234.184 +121.129.92.195 +121.129.93.181 +121.130.91.54 +121.131.175.118 +121.132.6.35 +121.133.255.251 +121.136.12.153 +121.137.145.48 +121.137.197.69 +121.137.24.166 +121.139.37.63 +121.142.127.21 +121.142.153.17 +121.142.252.80 +121.142.87.218 +121.146.142.226 +121.146.235.82 +121.147.53.50 +121.149.140.6 +121.149.186.220 +121.149.93.24 +121.150.149.190 +121.150.202.109 +121.150.4.110 +121.153.203.84 +121.153.245.38 +121.155.127.136 +121.155.162.36 +121.156.141.67 +121.157.62.245 +121.161.122.176 +121.162.101.72 +121.162.82.59 +121.164.64.3 +121.164.82.245 +121.164.82.32 +121.165.204.217 +121.165.242.205 +121.165.8.90 +121.166.2.253 +121.167.200.55 +121.168.3.88 +121.169.147.59 +121.172.188.59 +121.173.251.86 +121.175.167.235 +121.175.233.84 +121.175.246.201 +121.176.250.155 +121.177.70.228 +121.178.157.207 +121.178.188.29 +121.178.188.30 +121.178.213.140 +121.178.235.89 +121.178.43.169 +121.181.100.112 +121.181.192.222 +121.184.87.70 +121.185.200.210 +121.186.76.219 +121.188.160.55 +121.189.128.233 +121.189.145.250 +121.189.166.195 +121.189.85.27 +121.190.114.78 +121.190.137.170 +121.190.22.245 +121.190.54.53 +121.190.68.26 +121.191.199.38 +121.199.12.213 +121.2.72.105 +121.202.199.25 +121.224.241.8 +121.224.52.227 +121.226.138.134 +121.226.143.57 +121.226.212.38 +121.226.251.253 +121.227.156.53 +121.227.71.195 +121.227.88.117 +121.231.107.220 +121.231.116.229 +121.231.183.214 +121.231.201.200 +121.231.246.226 +121.231.84.233 +121.233.180.26 +121.233.204.234 +121.233.251.59 +121.234.159.3 +121.234.228.56 +121.236.130.177 +121.236.149.76 +121.236.224.27 +121.236.87.22 +121.239.167.84 +121.239.76.183 +121.241.227.91 +121.25.66.18 +121.36.241.28 +121.40.128.8 +121.45.48.131 +121.46.20.126 +121.5.163.177 +122.0.26.154 +122.116.109.168 +122.116.169.138 +122.116.193.77 +122.116.196.77 +122.116.208.158 +122.116.213.162 +122.116.251.189 +122.116.32.110 +122.116.48.127 +122.116.66.36 +122.116.68.173 +122.116.68.71 +122.116.75.210 +122.117.118.184 +122.117.146.72 +122.117.198.84 +122.117.205.222 +122.117.5.35 +122.117.71.158 +122.136.195.124 +122.146.196.217 +122.15.177.20 +122.156.247.54 +122.160.10.177 +122.160.119.125 +122.160.14.38 +122.160.157.213 +122.160.157.27 +122.160.221.208 +122.160.25.225 +122.160.34.184 +122.160.50.155 +122.160.68.117 +122.160.71.155 +122.160.76.249 +122.160.95.45 +122.161.17.236 +122.165.132.5 +122.165.171.52 +122.165.176.213 +122.165.204.97 +122.165.215.149 +122.165.218.176 +122.165.220.183 +122.165.240.250 +122.165.62.224 +122.166.101.55 +122.166.124.116 +122.166.156.246 +122.166.187.47 +122.166.249.202 +122.166.251.98 +122.166.254.180 +122.166.52.87 +122.169.101.94 +122.169.105.168 +122.169.111.253 +122.169.117.169 +122.169.119.32 +122.170.5.69 +122.175.198.91 +122.175.3.200 +122.176.103.105 +122.176.65.218 +122.176.79.197 +122.179.159.82 +122.180.85.138 +122.184.65.226 +122.187.224.234 +122.187.225.62 +122.187.225.64 +122.187.226.14 +122.187.227.139 +122.187.227.198 +122.187.228.229 +122.187.228.251 +122.187.229.200 +122.187.230.106 +122.187.230.13 +122.187.230.221 +122.187.230.222 +122.187.230.4 +122.187.230.50 +122.187.230.57 +122.187.234.29 +122.187.235.150 +122.189.112.135 +122.189.254.229 +122.194.11.73 +122.202.41.54 +122.211.138.37 +122.224.15.166 +122.224.90.238 +122.225.55.98 +122.227.52.58 +122.228.136.174 +122.3.192.83 +122.3.201.232 +122.3.253.233 +122.37.252.74 +122.42.147.119 +122.96.31.135 +123.0.26.234 +123.110.12.185 +123.110.176.112 +123.125.174.6 +123.129.175.139 +123.132.232.198 +123.139.116.184 +123.14.112.171 +123.150.192.42 +123.156.226.101 +123.162.169.227 +123.172.80.89 +123.172.81.158 +123.173.109.197 +123.173.52.77 +123.175.113.197 +123.175.64.135 +123.175.88.49 +123.176.38.66 +123.19.17.94 +123.193.145.198 +123.193.214.66 +123.194.60.238 +123.195.33.169 +123.199.17.108 +123.20.143.124 +123.20.22.107 +123.205.171.159 +123.205.58.116 +123.206.7.211 +123.209.211.148 +123.213.121.107 +123.23.91.209 +123.231.237.130 +123.234.131.51 +123.234.135.167 +123.240.157.176 +123.241.189.48 +123.241.93.58 +123.245.64.2 +123.30.149.60 +123.30.149.76 +123.30.187.208 +123.30.98.134 +123.31.29.192 +123.58.207.109 +123.58.216.78 +124.106.227.70 +124.108.19.238 +124.115.221.58 +124.120.129.129 +124.123.76.210 +124.128.223.82 +124.13.250.24 +124.132.142.158 +124.152.1.172 +124.152.57.24 +124.153.165.218 +124.156.2.182 +124.156.208.56 +124.158.10.139 +124.158.12.83 +124.158.147.21 +124.160.90.29 +124.163.209.12 +124.167.20.113 +124.167.227.86 +124.176.247.227 +124.187.103.196 +124.187.97.164 +124.19.77.204 +124.199.53.247 +124.205.216.123 +124.219.166.164 +124.220.169.112 +124.221.238.100 +124.221.85.216 +124.222.10.213 +124.222.27.193 +124.223.107.190 +124.223.220.197 +124.223.98.121 +124.234.180.43 +124.234.182.222 +124.234.184.87 +124.234.239.121 +124.234.245.161 +124.234.246.28 +124.234.247.143 +124.234.247.182 +124.234.254.131 +124.235.248.168 +124.239.181.121 +124.246.93.14 +124.39.132.136 +124.43.136.72 +124.48.227.150 +124.52.118.185 +124.59.224.103 +124.77.14.119 +124.77.159.120 +124.89.86.201 +124.89.86.207 +124.89.86.221 +124.89.86.222 +124.89.86.228 +124.95.132.151 +124.95.156.130 +125.124.137.174 +125.128.148.243 +125.129.85.164 +125.130.242.52 +125.131.142.234 +125.132.190.251 +125.132.28.195 +125.132.41.164 +125.133.112.215 +125.133.54.207 +125.134.168.105 +125.135.52.173 +125.137.1.176 +125.137.114.164 +125.137.117.198 +125.137.39.68 +125.137.64.51 +125.138.16.126 +125.139.170.6 +125.139.34.112 +125.139.60.143 +125.139.69.98 +125.140.156.108 +125.140.181.221 +125.140.246.14 +125.141.120.204 +125.141.139.29 +125.142.142.94 +125.142.239.217 +125.143.83.213 +125.163.160.229 +125.168.122.39 +125.177.207.163 +125.204.18.49 +125.21.59.218 +125.211.197.239 +125.212.231.175 +125.212.243.139 +125.212.251.45 +125.22.75.156 +125.227.199.193 +125.227.34.51 +125.227.53.5 +125.228.11.122 +125.228.160.243 +125.228.169.49 +125.228.195.106 +125.228.69.69 +125.228.79.245 +125.228.83.91 +125.228.88.140 +125.228.91.239 +125.228.99.183 +125.229.101.241 +125.229.146.44 +125.229.221.214 +125.229.235.88 +125.229.58.54 +125.229.72.221 +125.229.80.42 +125.230.91.121 +125.26.179.111 +125.27.157.248 +125.31.46.42 +125.35.109.214 +125.44.193.179 +125.63.110.201 +125.63.121.47 +125.67.61.202 +125.72.150.250 +125.74.112.69 +125.74.196.138 +125.74.239.20 +125.80.210.245 +125.99.173.162 +126.113.24.98 +126.59.144.183 +128.1.248.27 +128.1.248.28 +128.1.248.29 +128.1.248.30 +128.1.248.36 +128.1.248.38 +128.1.248.42 +128.1.248.44 +128.1.34.58 +128.1.79.176 +128.1.91.90 +128.1.91.93 +128.116.134.9 +128.116.154.34 +128.116.175.36 +128.116.233.216 +128.14.128.178 +128.14.128.180 +128.14.128.181 +128.14.128.182 +128.14.133.50 +128.14.133.58 +128.14.137.179 +128.14.137.181 +128.14.141.36 +128.14.141.37 +128.14.141.38 +128.14.141.42 +128.14.141.43 +128.14.141.44 +128.14.141.46 +128.14.152.42 +128.14.152.43 +128.14.152.44 +128.14.152.45 +128.14.152.46 +128.14.209.162 +128.14.209.163 +128.14.209.164 +128.14.209.165 +128.14.209.166 +128.14.209.46 +128.14.226.202 +128.199.1.140 +128.199.102.17 +128.199.107.58 +128.199.115.248 +128.199.120.146 +128.199.129.68 +128.199.133.168 +128.199.135.133 +128.199.137.41 +128.199.138.145 +128.199.141.158 +128.199.141.33 +128.199.145.119 +128.199.146.211 +128.199.148.70 +128.199.150.10 +128.199.16.167 +128.199.16.6 +128.199.162.2 +128.199.164.217 +128.199.167.161 +128.199.168.119 +128.199.177.90 +128.199.179.36 +128.199.18.115 +128.199.185.21 +128.199.186.230 +128.199.187.183 +128.199.19.74 +128.199.20.210 +128.199.20.55 +128.199.211.78 +128.199.234.147 +128.199.24.88 +128.199.250.104 +128.199.45.37 +128.199.5.4 +128.199.52.45 +128.199.55.244 +128.199.58.12 +128.199.64.100 +128.199.66.208 +128.199.68.197 +128.199.68.220 +128.199.68.96 +128.199.69.218 +128.199.70.65 +128.199.73.168 +128.199.74.173 +128.199.76.231 +128.199.77.96 +128.199.80.214 +128.199.82.240 +128.199.84.187 +128.199.87.28 +128.199.97.155 +128.199.99.204 +128.53.182.101 +129.126.119.71 +129.126.119.97 +129.126.196.84 +129.126.210.32 +129.146.145.69 +129.146.250.238 +129.146.42.247 +129.146.79.190 +129.150.48.50 +129.153.83.50 +129.158.52.102 +129.205.124.253 +129.205.208.20 +129.213.100.212 +129.213.50.80 +129.226.158.246 +129.226.189.223 +129.226.198.6 +129.226.198.99 +129.226.199.229 +129.226.200.186 +129.226.200.7 +129.226.205.162 +129.226.205.241 +129.226.207.190 +129.226.207.26 +129.226.209.222 +129.226.210.126 +129.226.210.215 +129.226.213.186 +129.226.214.49 +129.226.214.79 +129.226.215.132 +129.226.220.113 +129.226.220.24 +129.226.220.64 +129.226.221.96 +129.226.222.206 +129.226.93.57 +13.214.25.25 +13.237.174.67 +13.66.131.233 +13.67.221.136 +13.71.46.226 +13.74.46.65 +13.76.162.49 +13.77.72.11 +13.82.51.214 +13.84.151.189 +13.90.16.70 +13.90.19.78 +130.162.136.157 +130.162.42.103 +130.185.96.109 +130.185.96.125 +130.185.97.236 +130.193.42.43 +130.25.115.49 +130.61.177.134 +131.100.167.3 +131.150.195.178 +131.221.200.32 +131.239.47.34 +132.148.165.220 +132.148.76.25 +132.148.77.160 +132.148.78.109 +132.226.159.108 +132.248.14.22 +132.248.65.8 +134.122.121.162 +134.122.16.156 +134.122.17.178 +134.122.19.182 +134.122.20.244 +134.122.38.191 +134.122.56.34 +134.122.57.194 +134.122.63.199 +134.122.74.80 +134.122.78.64 +134.122.80.104 +134.122.84.235 +134.122.86.44 +134.122.92.44 +134.17.16.40 +134.17.16.43 +134.17.17.32 +134.17.89.159 +134.17.89.182 +134.17.94.149 +134.17.94.221 +134.17.94.229 +134.175.182.3 +134.19.179.163 +134.209.103.181 +134.209.104.221 +134.209.109.149 +134.209.127.189 +134.209.149.246 +134.209.150.48 +134.209.154.107 +134.209.169.212 +134.209.176.120 +134.209.178.186 +134.209.179.100 +134.209.187.199 +134.209.188.180 +134.209.19.82 +134.209.190.88 +134.209.200.13 +134.209.200.139 +134.209.203.216 +134.209.211.170 +134.209.227.212 +134.209.244.230 +134.209.64.248 +134.209.68.67 +134.209.79.45 +134.209.94.207 +134.209.95.44 +134.65.249.218 +135.125.200.19 +135.125.233.142 +135.125.236.160 +135.125.68.41 +135.148.149.8 +135.181.84.76 +136.185.11.243 +136.185.18.169 +136.185.7.175 +136.228.161.66 +136.232.73.38 +136.49.106.190 +137.116.148.206 +137.184.0.243 +137.184.104.77 +137.184.107.221 +137.184.111.153 +137.184.112.37 +137.184.131.84 +137.184.134.10 +137.184.140.67 +137.184.145.62 +137.184.148.244 +137.184.16.186 +137.184.164.41 +137.184.168.203 +137.184.176.157 +137.184.183.139 +137.184.184.139 +137.184.198.239 +137.184.2.1 +137.184.201.12 +137.184.216.0 +137.184.217.189 +137.184.225.34 +137.184.228.164 +137.184.35.122 +137.184.37.111 +137.184.5.137 +137.184.50.151 +137.184.50.19 +137.184.55.79 +137.184.58.247 +137.184.60.92 +137.184.69.85 +137.184.72.248 +137.184.73.29 +137.184.78.25 +137.184.89.20 +137.184.96.200 +137.63.149.10 +138.124.184.161 +138.19.61.138 +138.197.102.26 +138.197.11.95 +138.197.160.74 +138.197.169.184 +138.197.176.228 +138.197.176.8 +138.197.177.187 +138.197.180.143 +138.197.185.227 +138.197.200.105 +138.197.223.80 +138.197.66.68 +138.197.96.33 +138.197.97.211 +138.199.19.145 +138.199.19.168 +138.2.62.21 +138.204.27.227 +138.36.228.142 +138.68.102.83 +138.68.103.135 +138.68.143.68 +138.68.145.202 +138.68.178.64 +138.68.19.201 +138.68.208.14 +138.68.208.18 +138.68.226.151 +138.68.230.183 +138.68.240.114 +138.68.244.245 +138.68.255.140 +138.68.27.174 +138.68.55.110 +138.68.58.138 +138.68.8.161 +138.68.82.72 +138.68.87.146 +138.68.9.83 +138.68.9.99 +138.68.99.110 +138.75.250.93 +138.91.3.70 +138.97.96.41 +139.144.239.185 +139.144.239.72 +139.144.239.74 +139.144.239.98 +139.162.121.251 +139.162.190.203 +139.162.67.239 +139.198.0.216 +139.210.5.170 +139.215.195.61 +139.218.96.100 +139.227.102.167 +139.255.248.34 +139.255.50.90 +139.255.54.195 +139.255.90.245 +139.28.218.34 +139.59.1.180 +139.59.102.10 +139.59.108.114 +139.59.109.98 +139.59.113.110 +139.59.118.164 +139.59.121.198 +139.59.126.129 +139.59.127.178 +139.59.127.73 +139.59.129.247 +139.59.144.10 +139.59.16.136 +139.59.16.54 +139.59.167.54 +139.59.176.155 +139.59.18.161 +139.59.186.183 +139.59.187.229 +139.59.188.13 +139.59.189.130 +139.59.190.107 +139.59.213.27 +139.59.215.94 +139.59.22.79 +139.59.224.111 +139.59.224.196 +139.59.231.120 +139.59.231.14 +139.59.232.228 +139.59.235.215 +139.59.235.51 +139.59.248.243 +139.59.25.164 +139.59.250.246 +139.59.251.146 +139.59.255.59 +139.59.27.154 +139.59.31.218 +139.59.33.81 +139.59.36.71 +139.59.37.52 +139.59.46.114 +139.59.68.239 +139.59.7.115 +139.59.78.95 +139.59.9.105 +139.59.90.37 +139.59.90.97 +139.59.92.30 +139.99.101.36 +139.99.118.168 +139.99.251.166 +139.99.8.106 +14.0.200.84 +14.111.242.101 +14.116.220.100 +14.120.224.177 +14.139.230.182 +14.143.43.162 +14.161.10.88 +14.161.12.119 +14.161.27.163 +14.161.50.120 +14.172.23.219 +14.177.232.0 +14.177.239.168 +14.177.75.6 +14.18.154.85 +14.184.116.119 +14.186.54.37 +14.225.19.18 +14.225.192.13 +14.225.253.189 +14.225.253.194 +14.225.254.5 +14.240.56.51 +14.241.237.39 +14.246.55.191 +14.252.246.102 +14.29.130.70 +14.29.221.7 +14.29.242.79 +14.32.0.74 +14.34.228.69 +14.36.126.45 +14.36.53.72 +14.39.169.205 +14.39.195.67 +14.39.245.212 +14.39.52.41 +14.39.65.29 +14.40.102.43 +14.40.126.13 +14.43.128.6 +14.43.186.78 +14.43.231.49 +14.43.253.118 +14.44.1.76 +14.45.158.2 +14.45.242.241 +14.46.153.132 +14.47.185.237 +14.53.134.163 +14.53.9.208 +14.54.103.88 +14.54.116.93 +14.55.231.38 +14.56.196.175 +14.56.254.167 +14.63.160.204 +14.63.203.207 +14.97.150.34 +14.97.238.50 +14.97.52.85 +14.98.182.162 +14.99.254.18 +14.99.4.82 +140.128.136.238 +140.206.156.54 +140.207.232.13 +140.238.122.212 +140.238.177.83 +140.249.194.11 +140.75.165.78 +140.86.12.31 +140.99.157.162 +140.99.198.26 +140.99.234.34 +140.99.32.87 +141.148.135.200 +141.148.84.47 +141.237.83.241 +141.255.162.218 +141.94.106.15 +141.94.17.140 +141.94.175.140 +141.94.26.83 +141.94.68.95 +141.94.87.67 +141.95.160.154 +141.95.192.30 +141.98.10.132 +141.98.10.159 +141.98.10.172 +141.98.101.133 +141.98.102.227 +141.98.11.13 +141.98.11.150 +141.98.11.155 +141.98.11.57 +141.98.11.93 +141.98.168.26 +141.98.6.12 +141.98.6.125 +141.98.6.145 +141.98.6.168 +141.98.6.222 +141.98.6.226 +142.0.111.117 +142.44.210.28 +142.44.215.54 +142.44.247.73 +142.93.113.139 +142.93.115.32 +142.93.127.92 +142.93.143.112 +142.93.163.183 +142.93.171.91 +142.93.178.56 +142.93.187.197 +142.93.194.20 +142.93.196.106 +142.93.197.56 +142.93.201.51 +142.93.203.156 +142.93.210.193 +142.93.211.223 +142.93.213.92 +142.93.217.174 +142.93.217.52 +142.93.220.110 +142.93.233.136 +142.93.241.93 +142.93.242.247 +142.93.242.98 +142.93.245.58 +142.93.31.18 +142.93.46.251 +142.93.58.158 +142.93.8.99 +143.0.165.51 +143.110.148.92 +143.110.159.86 +143.110.160.116 +143.110.176.216 +143.110.177.26 +143.110.179.172 +143.110.190.26 +143.110.220.40 +143.110.227.81 +143.110.230.201 +143.110.241.56 +143.110.248.85 +143.110.248.86 +143.198.117.165 +143.198.126.248 +143.198.133.36 +143.198.136.87 +143.198.145.17 +143.198.146.239 +143.198.146.93 +143.198.154.97 +143.198.169.154 +143.198.180.32 +143.198.190.238 +143.198.194.242 +143.198.198.214 +143.198.20.165 +143.198.200.155 +143.198.204.75 +143.198.215.9 +143.198.216.20 +143.198.222.239 +143.198.224.52 +143.198.234.238 +143.198.236.244 +143.198.4.69 +143.198.54.68 +143.198.77.231 +143.198.92.3 +143.208.14.64 +143.244.144.227 +143.244.161.152 +143.244.162.174 +143.244.172.59 +143.244.182.205 +143.244.190.237 +143.244.190.90 +143.255.119.57 +143.255.141.251 +143.42.1.185 +143.42.1.53 +143.42.1.71 +143.42.185.25 +143.42.205.14 +143.42.50.164 +143.55.94.40 +143.92.42.13 +143.92.42.73 +143.92.63.173 +144.126.143.61 +144.126.145.102 +144.126.192.113 +144.126.194.33 +144.126.204.43 +144.126.210.1 +144.126.211.209 +144.126.217.16 +144.126.219.147 +144.126.226.49 +144.126.236.214 +144.217.13.134 +144.217.243.126 +144.217.46.142 +144.217.87.192 +144.22.236.165 +144.24.155.212 +144.34.212.207 +144.34.212.238 +144.48.250.154 +144.64.135.153 +144.76.225.51 +144.91.105.148 +145.239.200.23 +145.239.83.204 +146.0.77.154 +146.148.44.185 +146.185.137.240 +146.185.156.181 +146.19.169.228 +146.19.173.202 +146.19.57.54 +146.190.121.89 +146.190.152.5 +146.190.166.168 +146.190.217.229 +146.190.227.169 +146.190.38.28 +146.190.52.81 +146.190.53.202 +146.190.65.27 +146.190.78.234 +146.190.88.232 +146.190.96.229 +146.4.92.212 +146.56.45.40 +146.59.127.25 +146.59.154.66 +146.59.228.111 +146.59.233.75 +146.59.250.225 +146.59.83.19 +146.70.115.219 +146.70.61.139 +146.70.94.3 +146.88.240.4 +146.88.241.101 +147.139.139.64 +147.139.188.173 +147.139.188.206 +147.139.35.222 +147.158.246.85 +147.182.148.218 +147.182.150.164 +147.182.154.58 +147.182.171.152 +147.182.172.17 +147.182.175.172 +147.182.179.97 +147.182.181.38 +147.182.211.205 +147.182.218.64 +147.182.218.87 +147.182.224.240 +147.182.225.23 +147.182.228.241 +147.182.228.52 +147.182.233.99 +147.182.237.31 +147.182.244.32 +147.182.245.3 +147.182.250.171 +147.182.253.165 +147.235.55.10 +147.78.103.144 +147.78.103.149 +147.78.103.152 +147.78.103.158 +147.78.103.211 +147.78.103.218 +147.78.103.228 +147.78.103.248 +147.78.103.42 +147.78.241.153 +147.78.47.223 +147.78.47.250 +148.102.49.125 +148.113.133.177 +148.243.170.66 +148.59.244.86 +148.63.215.173 +148.67.181.58 +148.71.154.69 +148.71.35.230 +148.72.209.121 +148.72.247.54 +148.72.40.90 +149.102.156.131 +149.127.191.150 +149.127.197.244 +149.129.129.119 +149.129.172.3 +149.129.182.55 +149.129.233.28 +149.129.50.37 +149.18.24.89 +149.3.36.174 +149.56.200.166 +149.56.240.162 +149.56.26.205 +149.56.74.90 +149.75.146.119 +15.204.174.165 +15.204.205.101 +15.204.207.12 +15.204.209.89 +15.204.224.16 +15.204.224.18 +15.204.229.123 +15.235.203.87 +15.235.33.21 +150.109.112.19 +150.109.148.216 +150.109.172.228 +150.109.205.234 +150.109.5.46 +150.109.7.69 +150.117.32.233 +150.136.32.211 +150.136.62.179 +150.158.148.47 +150.158.168.182 +150.158.20.185 +150.158.43.91 +150.165.77.215 +150.185.10.122 +150.185.10.125 +150.230.235.117 +150.230.85.224 +150.95.183.194 +151.1.187.247 +151.106.113.60 +151.115.79.208 +151.204.149.152 +151.235.22.159 +151.45.28.200 +151.50.72.152 +151.55.70.46 +151.80.148.159 +151.80.149.86 +151.80.60.5 +151.80.91.214 +151.80.91.219 +151.80.91.222 +152.0.152.66 +152.136.123.36 +152.200.181.42 +152.228.145.16 +152.228.174.113 +152.32.128.99 +152.32.131.195 +152.32.133.183 +152.32.141.206 +152.32.143.46 +152.32.144.21 +152.32.144.44 +152.32.147.115 +152.32.148.19 +152.32.149.14 +152.32.149.235 +152.32.150.96 +152.32.151.19 +152.32.151.71 +152.32.154.144 +152.32.157.204 +152.32.164.23 +152.32.167.43 +152.32.168.68 +152.32.170.110 +152.32.171.15 +152.32.172.153 +152.32.174.92 +152.32.186.106 +152.32.187.191 +152.32.187.221 +152.32.189.117 +152.32.190.176 +152.32.200.113 +152.32.200.79 +152.32.205.124 +152.32.210.168 +152.32.213.224 +152.32.215.5 +152.32.225.245 +152.32.226.125 +152.32.226.59 +152.32.228.20 +152.32.233.110 +152.32.234.183 +152.32.234.253 +152.32.234.44 +152.32.236.73 +152.32.245.144 +152.32.245.214 +152.32.245.239 +152.32.66.37 +152.89.160.131 +152.89.196.144 +152.89.196.55 +152.89.196.77 +152.89.198.103 +152.89.66.50 +153.122.156.208 +153.125.69.143 +153.134.75.13 +153.139.223.138 +153.184.166.95 +153.222.137.198 +153.92.16.50 +154.120.243.194 +154.126.186.53 +154.127.163.140 +154.16.49.96 +154.197.30.221 +154.198.193.132 +154.204.30.117 +154.208.10.71 +154.208.10.88 +154.209.125.70 +154.209.4.95 +154.211.14.105 +154.212.148.237 +154.221.16.10 +154.221.17.142 +154.221.29.64 +154.222.234.48 +154.222.239.35 +154.26.131.6 +154.27.27.79 +154.68.18.82 +154.68.232.20 +154.72.194.207 +154.81.221.173 +154.89.5.81 +154.91.84.31 +156.0.130.229 +156.232.12.137 +156.232.12.138 +156.232.12.140 +156.232.12.149 +156.236.70.126 +156.236.75.44 +156.251.172.207 +156.54.11.139 +156.67.208.155 +156.67.214.223 +156.67.216.15 +156.67.221.169 +156.96.114.70 +157.119.79.154 +157.130.207.26 +157.230.1.224 +157.230.106.152 +157.230.115.244 +157.230.115.35 +157.230.115.4 +157.230.118.233 +157.230.125.144 +157.230.128.210 +157.230.139.117 +157.230.17.29 +157.230.178.127 +157.230.179.100 +157.230.185.9 +157.230.191.245 +157.230.22.170 +157.230.221.51 +157.230.223.5 +157.230.23.46 +157.230.241.10 +157.230.241.39 +157.230.254.228 +157.230.41.62 +157.230.42.195 +157.230.45.177 +157.230.52.208 +157.230.55.156 +157.230.6.213 +157.230.6.216 +157.230.86.37 +157.230.9.57 +157.230.91.199 +157.230.91.241 +157.230.92.254 +157.230.94.211 +157.245.100.250 +157.245.102.206 +157.245.109.198 +157.245.109.35 +157.245.12.36 +157.245.137.143 +157.245.137.18 +157.245.147.26 +157.245.149.39 +157.245.156.72 +157.245.157.93 +157.245.176.143 +157.245.203.107 +157.245.204.50 +157.245.206.155 +157.245.216.197 +157.245.252.34 +157.245.40.222 +157.245.44.120 +157.245.49.201 +157.245.67.37 +157.245.69.46 +157.245.81.154 +157.245.88.17 +157.245.88.255 +157.245.91.136 +157.255.153.183 +157.7.112.89 +157.7.193.240 +157.7.202.86 +157.7.212.139 +157.7.67.198 +158.101.165.108 +158.101.23.56 +158.160.103.24 +158.160.105.64 +158.160.105.75 +158.160.17.133 +158.160.22.219 +158.160.38.134 +158.160.42.227 +158.160.49.21 +158.160.59.87 +158.160.6.234 +158.255.7.133 +158.69.111.17 +158.69.80.165 +158.69.92.169 +159.138.116.7 +159.192.124.122 +159.192.124.143 +159.192.143.249 +159.203.102.122 +159.203.105.128 +159.203.11.247 +159.203.112.250 +159.203.117.103 +159.203.128.174 +159.203.129.103 +159.203.130.78 +159.203.136.174 +159.203.165.156 +159.203.17.66 +159.203.170.197 +159.203.174.212 +159.203.179.44 +159.203.181.214 +159.203.182.218 +159.203.183.127 +159.203.186.114 +159.203.189.203 +159.203.192.19 +159.203.240.10 +159.203.240.14 +159.203.44.105 +159.203.71.159 +159.203.81.114 +159.203.83.104 +159.203.84.97 +159.223.101.183 +159.223.102.145 +159.223.120.180 +159.223.129.59 +159.223.135.216 +159.223.136.180 +159.223.154.6 +159.223.167.92 +159.223.18.214 +159.223.186.239 +159.223.187.62 +159.223.193.18 +159.223.208.228 +159.223.21.148 +159.223.32.202 +159.223.45.100 +159.223.45.3 +159.223.5.229 +159.223.50.39 +159.223.57.252 +159.223.59.81 +159.223.60.192 +159.223.61.55 +159.223.67.245 +159.223.69.158 +159.223.77.249 +159.223.79.49 +159.223.83.179 +159.65.1.41 +159.65.11.5 +159.65.111.248 +159.65.12.30 +159.65.123.176 +159.65.124.66 +159.65.127.239 +159.65.127.62 +159.65.129.227 +159.65.133.176 +159.65.143.78 +159.65.145.76 +159.65.150.108 +159.65.150.139 +159.65.150.25 +159.65.151.241 +159.65.154.92 +159.65.155.154 +159.65.180.151 +159.65.183.47 +159.65.201.11 +159.65.205.178 +159.65.205.249 +159.65.218.99 +159.65.220.18 +159.65.223.90 +159.65.231.164 +159.65.235.114 +159.65.240.232 +159.65.249.79 +159.65.31.38 +159.65.34.202 +159.65.41.104 +159.65.43.192 +159.65.6.45 +159.65.64.70 +159.65.64.76 +159.65.65.75 +159.65.84.193 +159.89.101.18 +159.89.104.182 +159.89.106.28 +159.89.107.61 +159.89.150.60 +159.89.152.26 +159.89.163.158 +159.89.173.162 +159.89.174.44 +159.89.19.227 +159.89.196.121 +159.89.199.244 +159.89.206.0 +159.89.230.196 +159.89.232.114 +159.89.236.160 +159.89.236.71 +159.89.34.114 +159.89.47.106 +159.89.82.71 +159.89.86.224 +159.89.89.195 +159.89.92.122 +159.89.95.98 +160.120.247.113 +160.153.252.142 +160.154.43.146 +160.155.226.10 +160.251.19.168 +161.0.153.88 +161.10.247.113 +161.132.183.24 +161.35.0.70 +161.35.108.241 +161.35.114.17 +161.35.119.216 +161.35.125.167 +161.35.142.86 +161.35.157.58 +161.35.177.39 +161.35.194.172 +161.35.199.80 +161.35.208.99 +161.35.217.94 +161.35.230.183 +161.35.232.64 +161.35.233.14 +161.35.236.46 +161.35.237.121 +161.35.238.241 +161.35.33.197 +161.35.50.200 +161.35.50.23 +161.35.52.207 +161.35.54.242 +161.35.58.225 +161.35.59.177 +161.35.79.199 +161.35.84.191 +161.35.85.183 +161.35.90.77 +161.82.233.179 +161.82.233.183 +161.97.118.183 +161.97.174.22 +162.158.165.89 +162.186.17.150 +162.19.170.45 +162.19.25.174 +162.19.27.180 +162.191.163.228 +162.191.60.221 +162.193.182.101 +162.206.179.74 +162.209.190.50 +162.214.102.121 +162.216.149.102 +162.216.149.107 +162.216.149.11 +162.216.149.120 +162.216.149.125 +162.216.149.129 +162.216.149.148 +162.216.149.159 +162.216.149.160 +162.216.149.172 +162.216.149.173 +162.216.149.178 +162.216.149.180 +162.216.149.181 +162.216.149.183 +162.216.149.184 +162.216.149.191 +162.216.149.193 +162.216.149.204 +162.216.149.205 +162.216.149.210 +162.216.149.23 +162.216.149.235 +162.216.149.240 +162.216.149.243 +162.216.149.26 +162.216.149.40 +162.216.149.44 +162.216.149.48 +162.216.149.54 +162.216.149.57 +162.216.149.61 +162.216.149.66 +162.216.149.68 +162.216.149.75 +162.216.149.81 +162.216.149.84 +162.216.149.92 +162.216.149.93 +162.216.149.94 +162.216.149.99 +162.216.150.107 +162.216.150.118 +162.216.150.12 +162.216.150.120 +162.216.150.122 +162.216.150.123 +162.216.150.13 +162.216.150.134 +162.216.150.135 +162.216.150.140 +162.216.150.153 +162.216.150.16 +162.216.150.17 +162.216.150.173 +162.216.150.176 +162.216.150.197 +162.216.150.199 +162.216.150.201 +162.216.150.202 +162.216.150.206 +162.216.150.208 +162.216.150.215 +162.216.150.22 +162.216.150.226 +162.216.150.231 +162.216.150.232 +162.216.150.235 +162.216.150.239 +162.216.150.31 +162.216.150.34 +162.216.150.36 +162.216.150.4 +162.216.150.40 +162.216.150.45 +162.216.150.57 +162.216.150.59 +162.216.150.63 +162.216.150.64 +162.216.150.65 +162.216.150.70 +162.216.150.74 +162.216.150.81 +162.216.150.87 +162.216.150.88 +162.216.150.89 +162.216.150.99 +162.216.18.113 +162.221.192.27 +162.221.192.28 +162.221.192.29 +162.221.192.30 +162.240.211.231 +162.240.214.96 +162.240.222.16 +162.240.234.162 +162.240.52.12 +162.241.114.75 +162.241.121.50 +162.241.124.124 +162.241.70.98 +162.241.87.18 +162.243.128.11 +162.243.128.13 +162.243.128.19 +162.243.128.9 +162.243.129.13 +162.243.129.9 +162.243.130.14 +162.243.130.18 +162.243.130.19 +162.243.132.15 +162.243.133.12 +162.243.133.15 +162.243.133.19 +162.243.134.14 +162.243.134.15 +162.243.134.9 +162.243.135.17 +162.243.135.9 +162.243.136.16 +162.243.136.58 +162.243.136.8 +162.243.138.15 +162.243.138.9 +162.243.139.18 +162.243.140.16 +162.243.140.41 +162.243.141.11 +162.243.141.23 +162.243.141.24 +162.243.142.13 +162.243.142.15 +162.243.142.17 +162.243.142.6 +162.243.143.22 +162.243.143.23 +162.243.143.25 +162.243.143.6 +162.243.144.12 +162.243.144.8 +162.243.144.9 +162.243.145.12 +162.243.147.14 +162.243.147.16 +162.243.147.24 +162.243.148.14 +162.243.149.10 +162.243.149.4 +162.243.151.11 +162.243.237.90 +162.243.34.111 +162.243.48.133 +162.243.61.162 +162.244.78.27 +162.246.16.194 +162.43.107.4 +162.43.9.220 +162.55.1.117 +162.62.191.220 +162.62.191.231 +162.62.33.200 +163.123.141.203 +163.123.142.162 +163.123.142.245 +163.123.143.10 +163.139.169.79 +163.172.147.100 +163.172.154.32 +163.172.165.188 +163.47.36.34 +163.53.206.236 +164.132.12.24 +164.132.93.123 +164.152.194.140 +164.152.245.19 +164.152.32.142 +164.177.0.65 +164.177.31.66 +164.46.33.159 +164.52.0.91 +164.68.99.177 +164.77.117.10 +164.90.139.238 +164.90.160.21 +164.90.163.215 +164.90.172.83 +164.90.175.196 +164.90.178.195 +164.90.189.102 +164.90.191.216 +164.90.202.89 +164.90.210.8 +164.90.217.23 +164.90.229.79 +164.92.112.145 +164.92.113.182 +164.92.118.96 +164.92.141.17 +164.92.142.67 +164.92.157.100 +164.92.159.65 +164.92.167.231 +164.92.170.149 +164.92.177.69 +164.92.182.146 +164.92.192.247 +164.92.230.26 +164.92.235.79 +164.92.236.11 +164.92.243.245 +164.92.83.204 +164.92.91.240 +165.140.237.56 +165.154.10.165 +165.154.110.17 +165.154.119.11 +165.154.119.15 +165.154.119.220 +165.154.119.253 +165.154.119.27 +165.154.119.37 +165.154.119.50 +165.154.128.218 +165.154.134.177 +165.154.134.205 +165.154.225.154 +165.154.232.105 +165.154.232.170 +165.154.242.236 +165.154.247.162 +165.154.253.219 +165.154.253.81 +165.154.36.182 +165.154.36.4 +165.154.58.244 +165.22.1.73 +165.22.101.51 +165.22.102.124 +165.22.102.161 +165.22.103.229 +165.22.103.89 +165.22.107.2 +165.22.113.4 +165.22.116.159 +165.22.17.106 +165.22.177.33 +165.22.181.245 +165.22.184.99 +165.22.186.140 +165.22.20.10 +165.22.21.48 +165.22.214.191 +165.22.217.96 +165.22.223.41 +165.22.230.39 +165.22.234.248 +165.22.235.122 +165.22.240.159 +165.22.242.64 +165.22.243.83 +165.22.248.122 +165.22.254.151 +165.22.26.150 +165.22.29.187 +165.22.3.99 +165.22.50.209 +165.22.51.113 +165.22.53.34 +165.22.62.203 +165.227.103.128 +165.227.109.79 +165.227.110.95 +165.227.118.71 +165.227.119.21 +165.227.142.62 +165.227.143.37 +165.227.153.96 +165.227.166.220 +165.227.166.247 +165.227.182.136 +165.227.194.176 +165.227.195.136 +165.227.196.229 +165.227.197.169 +165.227.2.221 +165.227.2.252 +165.227.61.200 +165.227.68.95 +165.227.71.223 +165.227.84.172 +165.227.86.144 +165.227.87.78 +165.227.89.189 +165.227.95.251 +165.232.121.37 +165.232.122.160 +165.232.136.138 +165.232.145.240 +165.232.160.106 +165.232.164.156 +165.232.170.200 +165.232.172.205 +165.232.176.115 +165.232.178.81 +165.232.184.142 +165.232.184.186 +165.232.190.137 +165.232.46.192 +165.232.70.143 +165.232.75.169 +165.232.76.182 +165.232.78.65 +165.246.38.77 +166.161.37.203 +166.166.67.204 +166.252.137.73 +167.114.129.82 +167.114.38.196 +167.114.46.129 +167.172.129.208 +167.172.142.20 +167.172.150.24 +167.172.190.215 +167.172.194.232 +167.172.24.162 +167.172.246.83 +167.172.48.211 +167.172.54.39 +167.172.56.36 +167.172.58.10 +167.172.69.16 +167.172.72.46 +167.172.74.254 +167.172.76.163 +167.172.85.160 +167.172.89.248 +167.172.90.89 +167.172.93.11 +167.172.98.89 +167.71.102.95 +167.71.117.214 +167.71.137.212 +167.71.151.22 +167.71.159.65 +167.71.16.200 +167.71.192.132 +167.71.196.217 +167.71.196.228 +167.71.202.1 +167.71.202.121 +167.71.217.128 +167.71.223.237 +167.71.234.134 +167.71.236.26 +167.71.238.89 +167.71.243.218 +167.71.33.249 +167.71.43.190 +167.71.44.183 +167.71.49.42 +167.71.54.162 +167.71.54.30 +167.71.54.51 +167.71.56.110 +167.71.70.212 +167.71.74.3 +167.71.78.209 +167.71.98.46 +167.71.99.157 +167.86.120.138 +167.99.112.43 +167.99.123.23 +167.99.126.215 +167.99.141.170 +167.99.152.131 +167.99.161.142 +167.99.171.68 +167.99.173.171 +167.99.187.199 +167.99.195.15 +167.99.195.75 +167.99.202.127 +167.99.208.65 +167.99.209.184 +167.99.234.112 +167.99.236.219 +167.99.236.74 +167.99.239.101 +167.99.243.12 +167.99.247.86 +167.99.39.221 +167.99.5.226 +167.99.71.79 +167.99.78.124 +167.99.84.28 +167.99.87.226 +168.121.27.66 +168.121.27.67 +168.126.203.176 +168.138.211.255 +168.138.222.91 +168.138.7.117 +168.167.72.187 +168.167.72.215 +168.167.72.228 +168.181.186.7 +168.196.105.78 +168.197.49.181 +168.205.133.39 +168.227.225.161 +168.227.49.206 +168.228.220.253 +168.232.12.115 +168.232.14.138 +168.232.14.86 +168.253.210.19 +168.80.174.2 +169.197.113.178 +169.197.113.225 +170.106.114.160 +170.106.115.15 +170.106.115.151 +170.106.115.231 +170.106.115.253 +170.106.115.39 +170.106.115.55 +170.106.136.103 +170.106.141.250 +170.106.173.40 +170.106.174.246 +170.106.176.49 +170.106.83.144 +170.155.150.152 +170.187.163.114 +170.187.163.133 +170.187.165.134 +170.187.165.139 +170.187.165.218 +170.187.165.219 +170.187.165.242 +170.210.208.108 +170.210.44.162 +170.210.45.123 +170.210.46.4 +170.210.52.126 +170.238.162.191 +170.238.27.252 +170.239.215.4 +170.239.85.94 +170.245.200.122 +170.245.34.61 +170.253.42.163 +170.64.138.151 +170.64.140.141 +170.64.166.254 +170.64.166.60 +170.64.166.87 +170.64.174.96 +170.64.178.78 +170.64.178.90 +170.83.173.29 +171.100.221.54 +171.101.216.53 +171.103.243.157 +171.105.28.14 +171.15.130.40 +171.15.131.182 +171.212.102.36 +171.215.207.38 +171.22.30.173 +171.221.255.5 +171.228.33.181 +171.232.55.68 +171.244.202.21 +171.244.28.26 +171.244.40.247 +171.244.60.172 +171.248.190.134 +171.25.193.78 +171.25.229.166 +171.67.70.229 +171.67.70.233 +172.104.137.47 +172.104.166.147 +172.104.210.105 +172.104.238.162 +172.104.242.173 +172.104.48.51 +172.104.65.226 +172.105.10.25 +172.105.217.71 +172.105.34.155 +172.105.89.161 +172.107.195.95 +172.116.186.174 +172.174.217.248 +172.174.232.145 +172.174.235.103 +172.176.244.157 +172.177.27.12 +172.245.110.158 +172.245.110.208 +172.245.139.108 +172.245.154.246 +172.245.156.24 +172.245.168.229 +172.245.17.150 +172.245.210.242 +172.245.34.156 +172.247.104.122 +172.71.169.33 +172.90.21.238 +172.96.194.24 +172.97.74.186 +172.98.89.176 +173.160.23.137 +173.161.156.201 +173.162.197.177 +173.179.208.115 +173.198.208.111 +173.23.53.88 +173.247.244.7 +173.255.223.179 +173.26.144.235 +173.31.213.218 +173.33.150.96 +173.52.235.114 +173.77.179.66 +173.82.227.7 +174.105.35.117 +174.108.139.206 +174.114.85.23 +174.138.21.174 +174.138.24.127 +174.138.29.148 +174.138.29.2 +174.138.30.73 +174.138.31.37 +174.138.48.135 +174.138.5.151 +174.138.54.13 +174.138.72.191 +174.138.79.199 +174.45.121.23 +174.52.85.31 +174.61.169.51 +174.96.50.187 +175.100.107.238 +175.100.120.111 +175.100.24.139 +175.100.66.41 +175.101.241.38 +175.107.13.72 +175.107.13.79 +175.11.52.94 +175.119.79.57 +175.126.123.171 +175.126.146.152 +175.126.232.120 +175.127.172.125 +175.134.135.29 +175.140.140.194 +175.142.126.41 +175.143.127.125 +175.146.233.14 +175.149.76.52 +175.150.127.114 +175.156.122.164 +175.164.188.40 +175.170.149.29 +175.175.52.235 +175.178.237.54 +175.178.62.19 +175.178.9.209 +175.183.13.68 +175.183.16.223 +175.194.108.201 +175.194.117.53 +175.194.219.239 +175.195.114.196 +175.196.231.248 +175.196.245.105 +175.197.109.68 +175.197.233.197 +175.197.51.29 +175.197.71.181 +175.199.230.8 +175.201.140.213 +175.202.120.38 +175.203.52.99 +175.203.66.34 +175.205.161.213 +175.205.9.60 +175.206.107.100 +175.206.113.93 +175.206.238.63 +175.206.57.127 +175.207.109.193 +175.207.13.86 +175.208.161.242 +175.208.234.194 +175.209.250.242 +175.210.66.91 +175.210.74.153 +175.211.139.213 +175.211.72.236 +175.212.238.103 +175.212.64.133 +175.212.81.131 +175.213.109.144 +175.214.151.9 +175.214.173.20 +175.214.194.49 +175.215.39.48 +175.27.210.74 +175.30.112.236 +175.30.71.18 +175.30.75.55 +175.38.85.181 +175.41.178.177 +175.9.165.132 +175.97.174.175 +176.10.207.140 +176.101.121.148 +176.111.173.193 +176.111.173.27 +176.111.173.47 +176.111.174.105 +176.111.174.109 +176.111.174.110 +176.111.174.112 +176.111.174.243 +176.111.174.80 +176.111.174.81 +176.111.174.82 +176.111.174.84 +176.111.174.85 +176.111.174.86 +176.111.174.87 +176.111.174.88 +176.111.174.89 +176.111.174.91 +176.111.174.95 +176.111.174.97 +176.111.174.98 +176.113.115.104 +176.113.115.113 +176.113.115.52 +176.115.100.24 +176.117.39.44 +176.118.165.22 +176.122.164.148 +176.133.191.176 +176.195.60.248 +176.213.141.182 +176.214.78.72 +176.215.191.208 +176.31.246.128 +176.35.68.136 +176.41.224.80 +176.53.182.207 +176.53.200.54 +176.62.189.81 +176.67.116.58 +176.96.138.216 +176.96.186.130 +176.97.210.100 +176.97.210.115 +176.97.210.236 +176.97.210.30 +176.97.210.59 +177.1.214.207 +177.104.2.64 +177.107.44.217 +177.12.2.75 +177.124.75.82 +177.125.239.199 +177.127.78.177 +177.136.157.154 +177.136.194.109 +177.136.201.53 +177.136.5.138 +177.174.116.133 +177.174.117.165 +177.185.139.43 +177.200.1.53 +177.200.95.210 +177.203.153.25 +177.21.208.13 +177.220.131.211 +177.220.148.122 +177.221.206.226 +177.229.134.50 +177.230.242.116 +177.238.101.73 +177.238.102.35 +177.249.170.10 +177.27.220.138 +177.32.212.68 +177.32.224.251 +177.36.248.38 +177.39.131.52 +177.43.233.9 +177.52.250.141 +177.54.150.21 +177.55.100.134 +177.62.110.235 +177.67.238.6 +177.70.163.201 +177.73.110.38 +177.85.84.3 +177.87.144.26 +177.91.80.178 +177.92.101.22 +177.92.48.109 +177.97.48.116 +178.124.222.119 +178.128.108.25 +178.128.113.191 +178.128.117.5 +178.128.125.217 +178.128.149.187 +178.128.152.119 +178.128.165.94 +178.128.187.183 +178.128.21.211 +178.128.214.68 +178.128.221.205 +178.128.224.63 +178.128.226.2 +178.128.34.59 +178.128.47.46 +178.128.5.231 +178.128.50.71 +178.128.55.198 +178.128.62.69 +178.128.64.160 +178.128.66.109 +178.128.91.222 +178.128.91.243 +178.128.93.190 +178.128.93.234 +178.128.95.168 +178.128.97.141 +178.128.98.121 +178.140.225.181 +178.141.190.140 +178.154.192.75 +178.154.209.177 +178.158.238.40 +178.159.49.228 +178.16.121.254 +178.161.200.138 +178.162.204.238 +178.170.221.13 +178.173.142.70 +178.175.160.118 +178.175.174.86 +178.176.45.252 +178.209.88.122 +178.212.49.134 +178.217.173.54 +178.217.174.237 +178.218.144.99 +178.219.116.156 +178.219.118.209 +178.219.119.32 +178.219.120.89 +178.219.126.5 +178.22.168.220 +178.22.254.214 +178.239.161.173 +178.242.86.197 +178.249.213.218 +178.251.140.3 +178.252.151.220 +178.253.109.120 +178.27.64.44 +178.32.43.185 +178.47.41.254 +178.54.13.19 +178.62.119.233 +178.62.122.135 +178.62.127.39 +178.62.14.68 +178.62.2.24 +178.62.216.118 +178.62.22.30 +178.62.224.73 +178.62.232.63 +178.62.237.10 +178.62.237.183 +178.62.24.222 +178.62.242.205 +178.62.27.165 +178.62.3.125 +178.62.50.191 +178.62.69.141 +178.62.74.141 +178.62.78.139 +178.62.8.163 +178.62.81.147 +178.62.97.236 +178.72.101.234 +178.72.83.72 +178.89.28.245 +179.127.252.234 +179.178.53.165 +179.181.223.58 +179.184.123.77 +179.189.198.128 +179.247.129.163 +179.27.60.34 +179.32.215.181 +179.32.26.211 +179.32.44.155 +179.33.186.151 +179.34.71.91 +179.40.112.6 +179.41.2.183 +179.43.122.214 +179.43.127.230 +179.43.139.82 +179.43.152.50 +179.43.163.111 +179.43.163.132 +179.43.177.243 +179.48.124.242 +179.48.190.215 +179.50.90.210 +179.52.231.166 +179.52.232.233 +179.61.245.13 +179.99.212.180 +18.130.255.176 +18.133.231.102 +18.211.190.157 +180.101.88.220 +180.101.88.225 +180.101.88.229 +180.101.88.231 +180.101.88.239 +180.101.88.242 +180.101.88.247 +180.101.88.251 +180.101.88.252 +180.103.57.34 +180.107.58.60 +180.108.10.36 +180.111.30.202 +180.111.30.37 +180.115.161.125 +180.115.85.179 +180.115.85.55 +180.116.119.177 +180.116.121.255 +180.116.155.85 +180.116.160.87 +180.116.189.101 +180.116.242.215 +180.117.194.141 +180.117.194.198 +180.117.247.76 +180.117.58.73 +180.118.240.207 +180.119.250.180 +180.149.185.250 +180.166.117.254 +180.168.95.234 +180.169.25.114 +180.176.208.15 +180.177.49.104 +180.179.227.180 +180.180.123.207 +180.183.249.151 +180.211.137.9 +180.214.239.113 +180.218.109.136 +180.218.161.99 +180.218.164.152 +180.232.139.194 +180.243.166.247 +180.69.254.177 +180.69.96.56 +180.71.47.198 +180.76.154.190 +180.76.208.113 +180.76.231.168 +180.83.255.119 +180.92.100.160 +180.97.82.230 +181.105.229.218 +181.114.109.54 +181.115.145.34 +181.115.207.244 +181.118.206.245 +181.120.188.20 +181.129.174.61 +181.13.218.29 +181.130.194.165 +181.143.195.18 +181.171.38.85 +181.188.195.18 +181.188.26.59 +181.191.131.8 +181.204.186.170 +181.209.100.141 +181.211.253.158 +181.214.99.205 +181.214.99.210 +181.215.78.86 +181.225.43.218 +181.225.43.226 +181.31.135.145 +181.48.60.50 +181.49.176.37 +181.63.245.127 +181.67.138.42 +181.78.3.13 +181.79.9.65 +181.94.230.182 +182.112.29.53 +182.116.176.11 +182.116.91.189 +182.117.10.117 +182.118.143.125 +182.126.167.248 +182.126.81.151 +182.127.152.6 +182.131.30.53 +182.134.239.97 +182.135.63.175 +182.16.179.214 +182.16.184.147 +182.16.245.79 +182.16.245.85 +182.16.249.18 +182.160.27.208 +182.161.149.6 +182.176.104.99 +182.18.131.62 +182.18.138.74 +182.180.102.4 +182.208.98.210 +182.211.245.169 +182.214.122.203 +182.224.49.52 +182.225.134.13 +182.229.10.141 +182.23.111.74 +182.23.56.142 +182.247.32.131 +182.253.117.100 +182.253.156.184 +182.253.33.194 +182.253.45.90 +182.31.62.100 +182.40.33.0 +182.42.49.140 +182.43.244.194 +182.43.254.122 +182.57.16.58 +182.59.139.27 +182.68.245.91 +182.69.119.226 +182.70.116.222 +182.70.116.97 +182.70.121.34 +182.70.125.62 +182.70.240.130 +182.70.241.35 +182.70.250.212 +182.70.250.246 +182.70.252.174 +182.73.123.118 +182.75.65.22 +182.76.134.58 +182.77.48.228 +182.77.57.16 +182.77.62.48 +182.78.142.4 +182.79.68.42 +182.86.188.7 +183.100.43.156 +183.100.98.18 +183.103.220.196 +183.103.65.181 +183.104.122.173 +183.106.218.235 +183.107.151.167 +183.107.47.119 +183.108.133.29 +183.108.211.209 +183.109.213.146 +183.109.240.16 +183.109.43.171 +183.129.254.66 +183.136.225.10 +183.136.225.32 +183.136.225.42 +183.136.225.43 +183.136.225.44 +183.136.225.46 +183.136.225.5 +183.136.225.9 +183.146.30.163 +183.16.226.94 +183.161.35.38 +183.162.230.118 +183.178.48.146 +183.180.128.204 +183.188.202.35 +183.194.44.18 +183.2.233.30 +183.230.145.46 +183.230.160.154 +183.230.197.49 +183.230.230.215 +183.230.248.187 +183.233.85.194 +183.234.79.53 +183.237.164.204 +183.237.164.206 +183.240.157.2 +183.246.177.93 +183.253.125.205 +183.44.209.117 +183.56.236.152 +183.6.99.197 +183.63.196.58 +183.63.215.244 +183.66.252.182 +183.67.39.70 +183.81.32.198 +183.83.51.220 +183.87.12.39 +183.87.55.220 +183.88.225.66 +183.91.186.93 +183.97.198.88 +183.98.107.63 +183.99.182.87 +183.99.53.180 +183.99.53.240 +183.99.76.78 +184.105.139.103 +184.105.139.106 +184.105.139.111 +184.105.139.112 +184.105.139.115 +184.105.139.118 +184.105.139.119 +184.105.139.120 +184.105.139.69 +184.105.139.74 +184.105.139.77 +184.105.139.80 +184.105.139.82 +184.105.139.86 +184.105.139.88 +184.105.139.92 +184.105.139.93 +184.105.139.94 +184.105.139.95 +184.105.139.98 +184.105.139.99 +184.105.247.199 +184.105.247.203 +184.105.247.210 +184.105.247.214 +184.105.247.222 +184.105.247.224 +184.105.247.234 +184.105.247.235 +184.105.247.243 +184.105.247.247 +184.105.247.252 +184.105.247.254 +184.153.54.212 +184.168.121.135 +184.168.123.187 +184.168.125.40 +184.168.21.249 +184.168.99.50 +184.170.172.12 +184.170.208.116 +184.174.34.95 +184.174.36.225 +184.18.211.199 +184.58.23.65 +184.75.221.35 +184.75.25.226 +184.82.129.171 +184.94.215.49 +185.100.87.136 +185.104.184.43 +185.106.94.8 +185.11.61.199 +185.110.191.161 +185.114.244.122 +185.118.51.135 +185.119.196.235 +185.122.201.229 +185.122.204.50 +185.122.204.55 +185.122.204.71 +185.126.200.111 +185.126.200.156 +185.126.200.54 +185.126.34.211 +185.126.80.227 +185.127.227.131 +185.129.93.97 +185.13.224.87 +185.133.225.62 +185.141.110.139 +185.142.236.34 +185.142.236.35 +185.142.236.36 +185.142.236.38 +185.142.239.16 +185.147.65.50 +185.151.32.7 +185.154.111.90 +185.155.17.245 +185.155.19.207 +185.156.174.115 +185.156.174.27 +185.156.175.171 +185.156.175.43 +185.156.73.154 +185.156.73.57 +185.156.73.91 +185.161.248.220 +185.161.248.221 +185.161.248.222 +185.161.248.223 +185.161.248.83 +185.161.248.96 +185.162.147.177 +185.164.72.28 +185.165.190.17 +185.165.190.34 +185.166.162.236 +185.167.96.138 +185.167.96.146 +185.167.96.150 +185.167.97.229 +185.167.97.244 +185.169.183.39 +185.171.24.22 +185.173.129.228 +185.18.212.110 +185.180.143.101 +185.180.143.102 +185.180.143.105 +185.180.143.107 +185.180.143.109 +185.180.143.12 +185.180.143.141 +185.180.143.143 +185.180.143.152 +185.180.143.154 +185.180.143.16 +185.180.143.161 +185.180.143.164 +185.180.143.165 +185.180.143.166 +185.180.143.167 +185.180.143.168 +185.180.143.173 +185.180.143.175 +185.180.143.176 +185.180.143.179 +185.180.143.20 +185.180.143.21 +185.180.143.22 +185.180.143.24 +185.180.143.25 +185.180.143.27 +185.180.143.28 +185.180.143.30 +185.180.143.32 +185.180.143.33 +185.180.143.37 +185.180.143.39 +185.180.143.43 +185.180.143.45 +185.180.143.46 +185.180.143.47 +185.180.143.6 +185.180.143.73 +185.180.143.74 +185.180.143.77 +185.180.143.80 +185.180.143.81 +185.180.143.83 +185.180.143.84 +185.180.143.85 +185.180.143.86 +185.180.143.87 +185.180.143.91 +185.180.143.93 +185.180.143.96 +185.180.143.98 +185.181.102.18 +185.181.61.23 +185.183.243.174 +185.189.112.27 +185.189.114.119 +185.189.123.73 +185.191.171.10 +185.191.171.11 +185.191.171.13 +185.191.171.15 +185.191.171.16 +185.191.171.17 +185.191.171.19 +185.191.171.20 +185.191.171.22 +185.191.171.23 +185.191.171.25 +185.191.171.26 +185.191.171.33 +185.191.171.35 +185.191.171.36 +185.191.171.38 +185.191.171.39 +185.191.171.4 +185.191.171.41 +185.191.171.8 +185.196.220.81 +185.199.222.155 +185.200.217.5 +185.200.240.65 +185.202.236.219 +185.203.89.24 +185.206.225.51 +185.206.225.59 +185.207.214.96 +185.208.164.126 +185.211.4.233 +185.213.195.233 +185.213.195.72 +185.216.116.113 +185.216.117.132 +185.216.119.91 +185.216.128.220 +185.216.140.132 +185.217.1.246 +185.217.241.82 +185.218.6.75 +185.220.101.152 +185.220.101.159 +185.220.101.20 +185.220.102.248 +185.220.103.113 +185.221.216.133 +185.221.239.104 +185.221.239.105 +185.221.239.113 +185.221.239.114 +185.221.239.121 +185.222.95.178 +185.224.128.114 +185.224.128.121 +185.224.128.17 +185.224.128.213 +185.224.128.224 +185.224.128.23 +185.224.128.25 +185.224.128.29 +185.224.128.32 +185.225.74.179 +185.225.74.23 +185.225.74.245 +185.225.74.55 +185.226.116.16 +185.227.152.189 +185.227.153.141 +185.231.112.3 +185.231.182.222 +185.231.205.186 +185.232.36.17 +185.233.119.142 +185.233.19.112 +185.233.19.15 +185.233.19.47 +185.233.19.68 +185.233.19.75 +185.233.19.9 +185.233.19.92 +185.233.19.94 +185.233.36.187 +185.236.228.22 +185.237.9.52 +185.238.199.145 +185.239.146.183 +185.239.208.50 +185.243.242.35 +185.245.86.226 +185.246.130.20 +185.246.189.77 +185.246.209.146 +185.246.220.20 +185.252.179.100 +185.252.179.104 +185.252.179.55 +185.252.179.97 +185.252.179.98 +185.252.215.136 +185.254.197.15 +185.254.37.15 +185.254.37.16 +185.254.37.46 +185.254.37.95 +185.254.96.47 +185.255.90.86 +185.29.121.8 +185.36.81.180 +185.36.81.95 +185.38.176.121 +185.5.157.165 +185.50.51.6 +185.51.37.116 +185.54.178.117 +185.55.40.153 +185.56.80.40 +185.57.165.130 +185.59.74.158 +185.6.10.231 +185.6.26.3 +185.6.91.21 +185.60.136.41 +185.68.146.244 +185.69.153.79 +185.69.155.107 +185.7.33.160 +185.70.95.8 +185.73.124.105 +185.74.221.195 +185.74.4.17 +185.74.4.189 +185.74.5.184 +185.74.5.186 +185.77.217.48 +185.77.96.124 +185.77.96.202 +185.81.68.102 +185.81.68.110 +185.85.163.242 +185.88.154.160 +185.9.19.107 +185.94.111.1 +185.94.189.182 +185.94.29.54 +185.97.119.59 +186.10.125.209 +186.103.146.180 +186.103.164.244 +186.115.97.152 +186.121.203.115 +186.125.27.81 +186.13.36.134 +186.13.96.188 +186.138.177.22 +186.177.156.112 +186.179.100.0 +186.179.100.104 +186.179.100.229 +186.179.243.12 +186.192.182.113 +186.200.158.42 +186.200.96.186 +186.206.45.187 +186.209.62.107 +186.216.22.1 +186.233.119.191 +186.233.204.10 +186.233.210.86 +186.235.184.214 +186.235.193.14 +186.235.70.43 +186.235.70.47 +186.239.155.106 +186.24.47.34 +186.248.136.218 +186.250.47.238 +186.28.200.73 +186.29.79.105 +186.3.31.213 +186.31.24.154 +186.31.95.163 +186.38.26.5 +186.39.127.184 +186.4.222.45 +186.6.211.105 +186.67.248.5 +186.67.248.8 +186.67.77.26 +186.84.172.5 +186.91.2.216 +186.96.145.241 +186.96.211.154 +186.97.166.147 +187.102.27.253 +187.103.67.186 +187.110.208.56 +187.111.28.131 +187.12.69.186 +187.122.200.128 +187.141.135.180 +187.149.33.183 +187.157.23.247 +187.162.154.104 +187.162.32.32 +187.170.197.34 +187.170.76.6 +187.18.156.57 +187.187.227.3 +187.189.51.121 +187.19.100.17 +187.190.10.69 +187.190.217.15 +187.190.252.165 +187.190.40.99 +187.217.135.66 +187.218.23.85 +187.220.25.158 +187.228.115.208 +187.235.188.63 +187.251.123.99 +187.251.242.240 +187.32.70.120 +187.33.53.204 +187.34.150.96 +187.37.19.155 +187.44.214.58 +187.50.165.110 +187.50.178.142 +187.50.67.114 +187.50.97.18 +187.51.208.158 +187.53.232.74 +187.57.133.84 +187.57.156.129 +187.62.86.66 +187.72.8.35 +187.75.249.10 +187.84.112.136 +187.86.135.246 +187.9.20.246 +187.93.205.26 +187.93.241.2 +187.95.146.42 +188.121.103.130 +188.121.106.22 +188.121.110.147 +188.121.119.205 +188.121.98.147 +188.126.83.80 +188.13.65.157 +188.132.197.205 +188.132.197.251 +188.150.225.241 +188.154.22.87 +188.16.168.147 +188.164.174.94 +188.165.58.60 +188.166.102.160 +188.166.12.16 +188.166.14.99 +188.166.146.208 +188.166.156.145 +188.166.180.17 +188.166.189.0 +188.166.19.128 +188.166.211.7 +188.166.217.179 +188.166.219.112 +188.166.221.245 +188.166.225.235 +188.166.225.37 +188.166.228.226 +188.166.232.219 +188.166.240.30 +188.166.246.167 +188.166.247.73 +188.166.247.82 +188.166.251.87 +188.166.35.229 +188.166.41.217 +188.166.58.179 +188.166.88.202 +188.166.97.136 +188.171.35.7 +188.173.136.132 +188.19.14.154 +188.190.158.192 +188.217.170.136 +188.22.214.15 +188.226.128.250 +188.226.136.16 +188.235.255.111 +188.242.104.19 +188.250.172.49 +188.254.0.160 +188.254.99.78 +188.80.228.9 +189.1.87.249 +189.101.167.185 +189.108.147.210 +189.109.37.54 +189.110.117.200 +189.112.196.1 +189.122.233.177 +189.127.173.52 +189.141.68.25 +189.158.107.1 +189.163.200.86 +189.175.134.181 +189.176.68.60 +189.178.44.241 +189.18.172.102 +189.186.240.165 +189.189.228.192 +189.195.123.18 +189.195.123.54 +189.195.223.98 +189.196.23.10 +189.20.181.138 +189.205.228.236 +189.210.119.4 +189.210.146.164 +189.216.168.153 +189.219.32.88 +189.219.65.30 +189.254.255.3 +189.34.115.225 +189.45.141.138 +189.45.78.175 +189.5.156.9 +189.50.111.146 +189.56.185.23 +189.56.217.183 +189.6.45.130 +189.7.129.60 +189.70.175.93 +189.8.68.56 +189.80.86.126 +189.81.204.243 +189.90.181.225 +190.0.246.7 +190.0.61.30 +190.101.196.7 +190.103.202.12 +190.104.146.23 +190.104.25.221 +190.107.177.235 +190.109.216.101 +190.109.228.128 +190.112.198.112 +190.113.232.231 +190.114.254.105 +190.123.34.126 +190.123.90.180 +190.128.169.130 +190.128.230.98 +190.137.37.54 +190.14.158.76 +190.140.53.119 +190.144.139.235 +190.144.141.210 +190.145.12.233 +190.145.172.114 +190.145.25.163 +190.147.33.242 +190.147.78.87 +190.15.207.142 +190.152.220.235 +190.156.231.245 +190.181.15.3 +190.181.25.210 +190.181.27.5 +190.181.27.8 +190.19.166.7 +190.190.244.166 +190.193.63.203 +190.195.91.253 +190.2.212.253 +190.202.95.114 +190.210.182.179 +190.211.252.91 +190.221.46.77 +190.221.60.242 +190.242.104.110 +190.254.77.44 +190.52.39.248 +190.60.110.240 +190.83.70.201 +190.85.15.251 +190.85.244.125 +190.90.132.204 +190.96.127.50 +190.99.153.77 +190.99.159.6 +191.100.249.243 +191.101.18.42 +191.101.229.143 +191.101.232.123 +191.101.235.92 +191.102.120.13 +191.103.121.105 +191.17.54.182 +191.176.2.211 +191.180.100.5 +191.193.45.158 +191.217.33.153 +191.220.0.213 +191.233.25.20 +191.242.105.131 +191.242.105.133 +191.243.56.178 +191.248.76.6 +191.249.118.107 +191.252.5.128 +191.36.151.8 +191.36.152.101 +191.36.156.73 +191.37.220.34 +191.89.49.10 +191.9.118.69 +191.96.57.205 +191.97.109.249 +191.97.4.238 +191.98.191.69 +192.142.231.143 +192.145.126.115 +192.145.127.42 +192.154.253.44 +192.155.89.96 +192.155.90.220 +192.162.69.61 +192.166.39.234 +192.169.176.22 +192.210.161.195 +192.210.187.72 +192.210.206.253 +192.210.226.176 +192.210.226.247 +192.227.143.184 +192.227.156.98 +192.227.174.167 +192.227.194.176 +192.241.129.182 +192.241.141.221 +192.241.157.126 +192.241.192.21 +192.241.193.21 +192.241.194.54 +192.241.195.48 +192.241.195.51 +192.241.196.49 +192.241.196.59 +192.241.197.6 +192.241.199.18 +192.241.199.30 +192.241.200.30 +192.241.200.48 +192.241.201.21 +192.241.201.43 +192.241.202.29 +192.241.203.18 +192.241.203.5 +192.241.206.10 +192.241.206.11 +192.241.207.100 +192.241.207.124 +192.241.208.5 +192.241.209.118 +192.241.209.135 +192.241.209.153 +192.241.210.21 +192.241.210.224 +192.241.210.25 +192.241.210.26 +192.241.210.7 +192.241.211.53 +192.241.212.169 +192.241.212.244 +192.241.212.26 +192.241.212.60 +192.241.212.99 +192.241.213.65 +192.241.213.67 +192.241.213.75 +192.241.213.77 +192.241.215.14 +192.241.216.19 +192.241.216.8 +192.241.217.22 +192.241.217.7 +192.241.218.28 +192.241.218.41 +192.241.219.17 +192.241.219.19 +192.241.220.21 +192.241.220.25 +192.241.220.50 +192.241.221.12 +192.241.223.11 +192.241.223.12 +192.241.223.25 +192.241.223.27 +192.241.223.29 +192.241.224.18 +192.241.225.16 +192.241.225.38 +192.241.225.41 +192.241.226.22 +192.241.226.31 +192.241.227.24 +192.241.227.25 +192.241.227.26 +192.241.227.9 +192.241.231.17 +192.241.231.28 +192.241.232.12 +192.241.232.9 +192.241.233.11 +192.241.233.7 +192.241.235.13 +192.241.236.28 +192.241.236.35 +192.241.236.50 +192.241.236.66 +192.241.237.15 +192.241.237.24 +192.241.238.29 +192.3.105.50 +192.3.116.181 +192.3.128.128 +192.3.153.103 +192.3.229.209 +192.3.231.211 +192.3.254.159 +192.3.255.145 +192.3.44.180 +192.3.53.185 +192.46.218.40 +192.63.105.127 +192.64.113.88 +192.64.117.65 +192.99.19.65 +193.105.134.95 +193.105.6.24 +193.111.248.77 +193.114.128.198 +193.118.53.194 +193.118.53.195 +193.118.53.198 +193.118.55.162 +193.118.55.163 +193.118.55.165 +193.118.55.170 +193.118.55.171 +193.118.55.174 +193.123.104.194 +193.134.100.231 +193.141.60.199 +193.142.146.214 +193.142.147.53 +193.142.147.57 +193.149.129.217 +193.151.128.151 +193.151.138.192 +193.151.142.143 +193.151.144.214 +193.151.145.215 +193.158.129.108 +193.158.129.110 +193.163.125.10 +193.163.125.100 +193.163.125.101 +193.163.125.102 +193.163.125.103 +193.163.125.104 +193.163.125.105 +193.163.125.107 +193.163.125.11 +193.163.125.110 +193.163.125.111 +193.163.125.113 +193.163.125.115 +193.163.125.116 +193.163.125.12 +193.163.125.122 +193.163.125.124 +193.163.125.125 +193.163.125.127 +193.163.125.128 +193.163.125.129 +193.163.125.13 +193.163.125.131 +193.163.125.133 +193.163.125.134 +193.163.125.135 +193.163.125.137 +193.163.125.139 +193.163.125.14 +193.163.125.143 +193.163.125.144 +193.163.125.145 +193.163.125.146 +193.163.125.147 +193.163.125.148 +193.163.125.149 +193.163.125.15 +193.163.125.150 +193.163.125.151 +193.163.125.152 +193.163.125.153 +193.163.125.154 +193.163.125.155 +193.163.125.156 +193.163.125.157 +193.163.125.158 +193.163.125.159 +193.163.125.16 +193.163.125.160 +193.163.125.161 +193.163.125.162 +193.163.125.163 +193.163.125.164 +193.163.125.165 +193.163.125.166 +193.163.125.167 +193.163.125.168 +193.163.125.169 +193.163.125.17 +193.163.125.170 +193.163.125.171 +193.163.125.172 +193.163.125.173 +193.163.125.174 +193.163.125.175 +193.163.125.176 +193.163.125.177 +193.163.125.178 +193.163.125.179 +193.163.125.18 +193.163.125.180 +193.163.125.181 +193.163.125.188 +193.163.125.189 +193.163.125.19 +193.163.125.192 +193.163.125.199 +193.163.125.2 +193.163.125.20 +193.163.125.201 +193.163.125.202 +193.163.125.207 +193.163.125.21 +193.163.125.22 +193.163.125.23 +193.163.125.24 +193.163.125.240 +193.163.125.25 +193.163.125.26 +193.163.125.27 +193.163.125.28 +193.163.125.29 +193.163.125.3 +193.163.125.30 +193.163.125.31 +193.163.125.32 +193.163.125.33 +193.163.125.34 +193.163.125.35 +193.163.125.36 +193.163.125.37 +193.163.125.39 +193.163.125.4 +193.163.125.44 +193.163.125.46 +193.163.125.47 +193.163.125.48 +193.163.125.5 +193.163.125.50 +193.163.125.51 +193.163.125.52 +193.163.125.53 +193.163.125.55 +193.163.125.56 +193.163.125.57 +193.163.125.58 +193.163.125.59 +193.163.125.6 +193.163.125.60 +193.163.125.61 +193.163.125.62 +193.163.125.63 +193.163.125.64 +193.163.125.65 +193.163.125.67 +193.163.125.68 +193.163.125.69 +193.163.125.7 +193.163.125.71 +193.163.125.73 +193.163.125.74 +193.163.125.75 +193.163.125.76 +193.163.125.78 +193.163.125.79 +193.163.125.8 +193.163.125.82 +193.163.125.83 +193.163.125.84 +193.163.125.86 +193.163.125.87 +193.163.125.88 +193.163.125.9 +193.163.125.94 +193.163.125.95 +193.163.125.97 +193.163.125.98 +193.163.125.99 +193.164.133.65 +193.179.28.34 +193.187.116.156 +193.189.100.130 +193.191.169.101 +193.194.92.244 +193.201.9.180 +193.231.11.11 +193.233.21.79 +193.234.118.51 +193.254.3.18 +193.29.13.22 +193.3.53.10 +193.3.53.11 +193.3.53.3 +193.3.53.4 +193.3.53.5 +193.3.53.6 +193.3.53.7 +193.3.53.8 +193.3.53.9 +193.32.126.228 +193.32.162.188 +193.35.18.107 +193.35.18.226 +193.35.18.35 +193.35.18.60 +193.35.18.61 +193.35.18.62 +193.35.18.92 +193.36.84.187 +193.36.85.72 +193.37.254.35 +193.42.32.170 +193.42.32.172 +193.42.32.173 +193.42.32.175 +193.42.32.97 +193.56.29.107 +193.56.29.142 +193.56.29.161 +193.56.29.186 +193.56.29.192 +193.56.29.196 +193.57.40.49 +193.59.47.77 +193.70.0.122 +193.70.1.27 +193.70.3.31 +193.70.84.184 +193.70.84.66 +193.70.85.249 +193.70.88.163 +193.8.210.223 +193.93.77.107 +194.110.203.131 +194.110.203.222 +194.113.236.202 +194.113.236.217 +194.116.191.74 +194.116.216.93 +194.132.232.36 +194.146.26.192 +194.146.50.54 +194.15.113.22 +194.150.69.207 +194.163.142.86 +194.163.162.92 +194.165.137.35 +194.165.16.10 +194.165.16.11 +194.165.16.37 +194.165.16.72 +194.165.16.76 +194.165.16.78 +194.169.175.26 +194.169.175.92 +194.186.187.54 +194.187.251.155 +194.204.194.11 +194.209.191.243 +194.219.141.100 +194.26.135.235 +194.26.135.45 +194.26.135.78 +194.26.29.152 +194.26.29.195 +194.26.29.37 +194.26.29.86 +194.31.109.194 +194.31.109.99 +194.34.232.229 +194.38.21.214 +194.5.188.45 +194.50.111.143 +194.55.224.194 +194.55.224.248 +194.55.224.31 +194.55.224.40 +194.55.224.58 +194.55.4.113 +194.59.170.7 +194.61.28.229 +194.61.52.90 +194.65.144.243 +194.67.67.140 +194.87.151.106 +194.87.151.116 +194.87.151.14 +194.87.151.141 +194.87.151.143 +194.87.151.243 +194.87.151.56 +194.87.151.73 +194.87.200.210 +194.88.152.40 +195.133.156.187 +195.140.146.69 +195.144.21.56 +195.154.119.124 +195.158.16.60 +195.181.38.126 +195.19.105.167 +195.19.96.49 +195.19.97.157 +195.191.82.212 +195.20.194.233 +195.206.105.227 +195.211.210.229 +195.226.194.142 +195.226.194.242 +195.230.103.242 +195.230.103.243 +195.230.103.244 +195.230.103.246 +195.230.103.247 +195.230.103.248 +195.230.103.249 +195.230.103.250 +195.239.91.210 +195.239.97.254 +195.24.129.234 +195.24.67.106 +195.3.147.52 +195.3.147.77 +195.43.6.229 +195.58.6.45 +195.68.154.202 +195.69.187.24 +195.70.93.131 +195.87.80.171 +195.9.32.22 +195.96.138.89 +196.188.104.221 +196.188.139.61 +196.188.77.118 +196.188.77.145 +196.189.118.69 +196.189.124.195 +196.189.187.106 +196.189.200.45 +196.189.38.197 +196.189.44.24 +196.191.101.216 +196.191.142.132 +196.191.96.145 +196.191.96.91 +196.202.220.96 +196.203.207.165 +196.203.231.220 +196.216.73.90 +196.218.238.188 +196.219.69.56 +196.223.153.253 +196.245.9.18 +196.28.248.220 +196.49.0.60 +196.6.103.2 +197.156.97.198 +197.199.224.52 +197.211.115.66 +197.221.248.249 +197.231.202.215 +197.243.14.52 +197.248.10.220 +197.248.2.229 +197.248.59.228 +197.249.4.79 +197.255.222.34 +197.255.225.96 +197.26.19.193 +197.4.107.135 +197.44.181.62 +197.5.145.121 +197.5.145.59 +197.5.145.68 +197.5.145.77 +197.5.145.93 +197.51.160.42 +198.12.114.231 +198.12.121.207 +198.12.121.69 +198.12.229.101 +198.12.253.60 +198.12.85.154 +198.12.85.199 +198.12.88.138 +198.134.104.126 +198.144.159.126 +198.144.177.130 +198.16.63.192 +198.199.100.61 +198.199.100.69 +198.199.101.225 +198.199.102.86 +198.199.103.111 +198.199.103.199 +198.199.104.156 +198.199.106.198 +198.199.106.214 +198.199.106.235 +198.199.107.114 +198.199.107.79 +198.199.108.144 +198.199.108.85 +198.199.109.203 +198.199.109.204 +198.199.109.99 +198.199.111.117 +198.199.111.154 +198.199.114.125 +198.199.114.189 +198.199.114.218 +198.199.114.5 +198.199.116.154 +198.199.116.27 +198.199.116.78 +198.199.117.128 +198.199.117.136 +198.199.117.169 +198.199.119.25 +198.199.119.35 +198.199.119.58 +198.199.119.63 +198.199.76.233 +198.199.92.121 +198.199.93.22 +198.199.93.43 +198.199.93.44 +198.199.93.88 +198.199.94.65 +198.199.95.33 +198.199.97.100 +198.199.97.19 +198.199.97.219 +198.199.97.240 +198.199.97.61 +198.20.101.106 +198.20.101.86 +198.20.101.98 +198.203.28.43 +198.211.121.90 +198.23.148.137 +198.23.149.3 +198.23.159.174 +198.23.165.102 +198.23.200.244 +198.235.24.10 +198.235.24.100 +198.235.24.101 +198.235.24.102 +198.235.24.103 +198.235.24.104 +198.235.24.105 +198.235.24.106 +198.235.24.107 +198.235.24.108 +198.235.24.109 +198.235.24.11 +198.235.24.110 +198.235.24.111 +198.235.24.112 +198.235.24.113 +198.235.24.114 +198.235.24.115 +198.235.24.116 +198.235.24.117 +198.235.24.118 +198.235.24.119 +198.235.24.12 +198.235.24.120 +198.235.24.121 +198.235.24.122 +198.235.24.123 +198.235.24.124 +198.235.24.125 +198.235.24.126 +198.235.24.127 +198.235.24.128 +198.235.24.129 +198.235.24.13 +198.235.24.130 +198.235.24.131 +198.235.24.132 +198.235.24.133 +198.235.24.134 +198.235.24.136 +198.235.24.137 +198.235.24.139 +198.235.24.14 +198.235.24.140 +198.235.24.141 +198.235.24.142 +198.235.24.143 +198.235.24.144 +198.235.24.145 +198.235.24.146 +198.235.24.147 +198.235.24.148 +198.235.24.149 +198.235.24.15 +198.235.24.151 +198.235.24.152 +198.235.24.153 +198.235.24.154 +198.235.24.155 +198.235.24.156 +198.235.24.158 +198.235.24.16 +198.235.24.161 +198.235.24.162 +198.235.24.163 +198.235.24.164 +198.235.24.165 +198.235.24.166 +198.235.24.167 +198.235.24.168 +198.235.24.169 +198.235.24.170 +198.235.24.171 +198.235.24.174 +198.235.24.175 +198.235.24.176 +198.235.24.177 +198.235.24.178 +198.235.24.18 +198.235.24.180 +198.235.24.181 +198.235.24.182 +198.235.24.183 +198.235.24.184 +198.235.24.185 +198.235.24.186 +198.235.24.19 +198.235.24.192 +198.235.24.193 +198.235.24.194 +198.235.24.195 +198.235.24.196 +198.235.24.197 +198.235.24.198 +198.235.24.199 +198.235.24.2 +198.235.24.20 +198.235.24.200 +198.235.24.201 +198.235.24.202 +198.235.24.203 +198.235.24.204 +198.235.24.205 +198.235.24.206 +198.235.24.207 +198.235.24.208 +198.235.24.209 +198.235.24.211 +198.235.24.212 +198.235.24.213 +198.235.24.214 +198.235.24.215 +198.235.24.216 +198.235.24.217 +198.235.24.218 +198.235.24.219 +198.235.24.22 +198.235.24.220 +198.235.24.221 +198.235.24.222 +198.235.24.223 +198.235.24.224 +198.235.24.225 +198.235.24.226 +198.235.24.227 +198.235.24.228 +198.235.24.229 +198.235.24.23 +198.235.24.230 +198.235.24.231 +198.235.24.232 +198.235.24.233 +198.235.24.234 +198.235.24.235 +198.235.24.236 +198.235.24.237 +198.235.24.238 +198.235.24.239 +198.235.24.24 +198.235.24.240 +198.235.24.241 +198.235.24.242 +198.235.24.243 +198.235.24.244 +198.235.24.245 +198.235.24.246 +198.235.24.247 +198.235.24.248 +198.235.24.249 +198.235.24.25 +198.235.24.251 +198.235.24.252 +198.235.24.253 +198.235.24.254 +198.235.24.255 +198.235.24.26 +198.235.24.27 +198.235.24.28 +198.235.24.29 +198.235.24.3 +198.235.24.30 +198.235.24.31 +198.235.24.33 +198.235.24.34 +198.235.24.35 +198.235.24.36 +198.235.24.37 +198.235.24.38 +198.235.24.39 +198.235.24.40 +198.235.24.41 +198.235.24.42 +198.235.24.43 +198.235.24.44 +198.235.24.45 +198.235.24.46 +198.235.24.47 +198.235.24.48 +198.235.24.49 +198.235.24.5 +198.235.24.50 +198.235.24.51 +198.235.24.52 +198.235.24.53 +198.235.24.54 +198.235.24.55 +198.235.24.56 +198.235.24.57 +198.235.24.58 +198.235.24.59 +198.235.24.6 +198.235.24.60 +198.235.24.64 +198.235.24.65 +198.235.24.66 +198.235.24.67 +198.235.24.68 +198.235.24.69 +198.235.24.70 +198.235.24.71 +198.235.24.72 +198.235.24.73 +198.235.24.74 +198.235.24.75 +198.235.24.76 +198.235.24.77 +198.235.24.78 +198.235.24.79 +198.235.24.8 +198.235.24.80 +198.235.24.81 +198.235.24.82 +198.235.24.83 +198.235.24.84 +198.235.24.85 +198.235.24.86 +198.235.24.87 +198.235.24.88 +198.235.24.89 +198.235.24.9 +198.235.24.90 +198.235.24.91 +198.235.24.92 +198.235.24.93 +198.235.24.94 +198.235.24.95 +198.235.24.96 +198.235.24.97 +198.235.24.98 +198.235.24.99 +198.244.167.101 +198.244.189.233 +198.27.67.44 +198.44.184.43 +198.46.166.155 +198.46.190.52 +198.50.173.145 +198.58.109.131 +198.71.52.97 +198.72.182.203 +198.98.55.202 +198.98.57.127 +198.98.61.77 +198.98.62.201 +199.115.228.186 +199.188.108.39 +199.19.226.30 +199.195.248.153 +199.195.248.188 +199.195.248.96 +199.244.49.231 +199.249.230.42 +199.48.164.241 +199.59.90.4 +199.77.205.178 +199.85.209.56 +2.111.111.28 +2.135.237.26 +2.135.51.230 +2.181.1.185 +2.228.25.92 +2.229.36.210 +2.37.223.58 +2.38.111.107 +2.39.134.254 +2.42.197.250 +2.55.101.148 +2.55.105.236 +2.55.115.136 +2.55.91.74 +2.56.58.69 +2.57.122.220 +2.57.219.2 +2.59.181.107 +2.59.182.54 +2.81.177.182 +2.82.153.197 +2.82.169.136 +2.83.61.37 +20.101.101.40 +20.101.62.76 +20.106.206.86 +20.107.70.85 +20.114.203.66 +20.117.220.202 +20.119.249.229 +20.123.111.79 +20.126.126.43 +20.141.64.165 +20.169.156.191 +20.170.11.140 +20.170.8.171 +20.187.92.255 +20.189.122.249 +20.191.185.166 +20.193.148.6 +20.193.148.7 +20.193.246.165 +20.194.105.28 +20.194.60.135 +20.196.7.248 +20.197.3.65 +20.198.123.108 +20.203.77.141 +20.204.165.90 +20.204.23.121 +20.205.42.154 +20.205.9.176 +20.210.113.154 +20.219.149.128 +20.219.188.145 +20.223.126.184 +20.225.126.147 +20.228.182.192 +20.235.12.113 +20.235.121.96 +20.241.228.180 +20.25.38.254 +20.254.140.101 +20.40.81.0 +20.49.2.187 +20.49.48.81 +20.62.172.235 +20.97.164.253 +200.0.212.212 +200.10.100.197 +200.105.183.118 +200.105.202.226 +200.108.143.6 +200.114.65.143 +200.117.214.166 +200.118.57.215 +200.122.249.203 +200.125.14.122 +200.129.139.116 +200.137.6.18 +200.149.225.86 +200.16.132.42 +200.17.132.8 +200.2.170.187 +200.216.184.34 +200.216.212.130 +200.217.195.214 +200.217.69.30 +200.217.73.138 +200.222.71.218 +200.222.91.66 +200.223.174.226 +200.223.192.150 +200.24.214.122 +200.31.1.49 +200.35.146.116 +200.40.135.93 +200.42.176.235 +200.43.89.215 +200.44.190.194 +200.45.182.24 +200.53.19.209 +200.53.28.211 +200.60.14.72 +200.60.6.206 +200.70.56.204 +200.71.187.92 +200.73.137.6 +200.85.58.110 +200.89.174.178 +200.9.220.11 +200.90.8.90 +200.94.86.84 +201.10.169.46 +201.103.144.165 +201.103.41.117 +201.111.4.141 +201.119.106.174 +201.121.226.89 +201.124.129.234 +201.131.212.19 +201.138.130.57 +201.138.142.100 +201.138.32.31 +201.14.236.165 +201.149.49.146 +201.149.55.226 +201.156.86.215 +201.163.162.179 +201.17.131.43 +201.184.50.251 +201.186.40.250 +201.202.13.108 +201.217.5.167 +201.234.106.216 +201.236.101.194 +201.236.186.32 +201.249.189.189 +201.28.187.217 +201.30.119.3 +201.48.76.244 +201.50.125.71 +201.62.65.6 +201.73.144.67 +201.76.115.102 +201.79.59.185 +201.79.92.113 +201.86.114.103 +201.86.119.117 +202.102.233.21 +202.107.225.207 +202.111.2.218 +202.12.5.189 +202.125.94.212 +202.125.94.71 +202.140.45.138 +202.148.14.206 +202.150.153.76 +202.155.204.26 +202.158.139.123 +202.158.139.57 +202.158.77.42 +202.163.121.60 +202.164.140.65 +202.165.17.42 +202.165.17.60 +202.165.24.30 +202.165.24.70 +202.166.162.90 +202.166.220.168 +202.169.53.11 +202.170.60.201 +202.175.76.242 +202.176.131.190 +202.29.13.52 +202.29.229.129 +202.29.229.132 +202.29.233.166 +202.39.78.217 +202.47.118.117 +202.51.74.123 +202.53.175.36 +202.53.68.55 +202.53.90.187 +202.53.94.150 +202.53.94.195 +202.55.166.154 +202.61.136.178 +202.72.193.34 +202.74.243.26 +202.79.168.133 +202.82.148.197 +202.83.16.8 +202.83.43.89 +202.90.198.2 +202.90.198.45 +202.95.12.107 +202.95.12.125 +202.95.12.15 +202.97.181.78 +203.100.68.6 +203.113.167.3 +203.114.102.173 +203.114.71.36 +203.135.20.36 +203.135.57.171 +203.145.165.54 +203.152.198.24 +203.156.126.113 +203.159.154.150 +203.160.179.237 +203.167.14.90 +203.170.129.197 +203.172.124.86 +203.172.56.202 +203.172.76.4 +203.176.137.180 +203.177.91.202 +203.186.102.230 +203.190.55.197 +203.192.228.49 +203.198.148.220 +203.199.243.13 +203.205.34.193 +203.205.37.224 +203.205.37.233 +203.210.232.1 +203.228.126.242 +203.228.78.100 +203.229.155.61 +203.229.182.59 +203.243.35.200 +203.243.43.88 +203.243.54.141 +203.251.92.99 +203.252.10.3 +203.51.38.164 +203.56.198.68 +203.59.73.76 +203.64.101.227 +203.80.23.197 +203.81.66.110 +203.99.178.63 +204.101.161.19 +204.13.46.4 +204.48.16.149 +204.48.24.27 +205.185.114.148 +205.185.115.222 +205.185.119.154 +205.185.123.242 +205.185.125.146 +205.185.126.149 +205.210.31.10 +205.210.31.100 +205.210.31.101 +205.210.31.102 +205.210.31.103 +205.210.31.104 +205.210.31.105 +205.210.31.106 +205.210.31.107 +205.210.31.108 +205.210.31.109 +205.210.31.11 +205.210.31.110 +205.210.31.111 +205.210.31.12 +205.210.31.128 +205.210.31.129 +205.210.31.13 +205.210.31.131 +205.210.31.132 +205.210.31.133 +205.210.31.134 +205.210.31.136 +205.210.31.137 +205.210.31.138 +205.210.31.139 +205.210.31.14 +205.210.31.140 +205.210.31.141 +205.210.31.142 +205.210.31.143 +205.210.31.144 +205.210.31.145 +205.210.31.146 +205.210.31.147 +205.210.31.148 +205.210.31.149 +205.210.31.150 +205.210.31.151 +205.210.31.152 +205.210.31.153 +205.210.31.154 +205.210.31.155 +205.210.31.156 +205.210.31.158 +205.210.31.159 +205.210.31.16 +205.210.31.161 +205.210.31.162 +205.210.31.163 +205.210.31.164 +205.210.31.165 +205.210.31.166 +205.210.31.167 +205.210.31.168 +205.210.31.169 +205.210.31.17 +205.210.31.170 +205.210.31.171 +205.210.31.172 +205.210.31.173 +205.210.31.174 +205.210.31.175 +205.210.31.176 +205.210.31.177 +205.210.31.178 +205.210.31.18 +205.210.31.180 +205.210.31.181 +205.210.31.183 +205.210.31.184 +205.210.31.185 +205.210.31.186 +205.210.31.19 +205.210.31.192 +205.210.31.193 +205.210.31.194 +205.210.31.195 +205.210.31.196 +205.210.31.197 +205.210.31.198 +205.210.31.199 +205.210.31.2 +205.210.31.20 +205.210.31.200 +205.210.31.201 +205.210.31.202 +205.210.31.203 +205.210.31.204 +205.210.31.205 +205.210.31.206 +205.210.31.207 +205.210.31.208 +205.210.31.209 +205.210.31.210 +205.210.31.211 +205.210.31.212 +205.210.31.213 +205.210.31.214 +205.210.31.215 +205.210.31.216 +205.210.31.217 +205.210.31.218 +205.210.31.219 +205.210.31.22 +205.210.31.220 +205.210.31.221 +205.210.31.222 +205.210.31.223 +205.210.31.224 +205.210.31.225 +205.210.31.226 +205.210.31.227 +205.210.31.228 +205.210.31.229 +205.210.31.23 +205.210.31.230 +205.210.31.231 +205.210.31.232 +205.210.31.233 +205.210.31.234 +205.210.31.235 +205.210.31.236 +205.210.31.237 +205.210.31.238 +205.210.31.239 +205.210.31.24 +205.210.31.240 +205.210.31.241 +205.210.31.242 +205.210.31.243 +205.210.31.244 +205.210.31.245 +205.210.31.246 +205.210.31.248 +205.210.31.249 +205.210.31.250 +205.210.31.251 +205.210.31.252 +205.210.31.253 +205.210.31.254 +205.210.31.255 +205.210.31.26 +205.210.31.27 +205.210.31.28 +205.210.31.29 +205.210.31.3 +205.210.31.31 +205.210.31.32 +205.210.31.33 +205.210.31.34 +205.210.31.35 +205.210.31.36 +205.210.31.37 +205.210.31.38 +205.210.31.39 +205.210.31.40 +205.210.31.41 +205.210.31.42 +205.210.31.43 +205.210.31.44 +205.210.31.45 +205.210.31.46 +205.210.31.47 +205.210.31.48 +205.210.31.49 +205.210.31.5 +205.210.31.50 +205.210.31.51 +205.210.31.52 +205.210.31.53 +205.210.31.54 +205.210.31.55 +205.210.31.56 +205.210.31.57 +205.210.31.58 +205.210.31.59 +205.210.31.6 +205.210.31.60 +205.210.31.64 +205.210.31.65 +205.210.31.66 +205.210.31.67 +205.210.31.68 +205.210.31.69 +205.210.31.70 +205.210.31.71 +205.210.31.72 +205.210.31.73 +205.210.31.74 +205.210.31.75 +205.210.31.76 +205.210.31.77 +205.210.31.78 +205.210.31.79 +205.210.31.8 +205.210.31.80 +205.210.31.81 +205.210.31.82 +205.210.31.83 +205.210.31.84 +205.210.31.85 +205.210.31.86 +205.210.31.87 +205.210.31.88 +205.210.31.89 +205.210.31.9 +205.210.31.90 +205.210.31.91 +205.210.31.92 +205.210.31.93 +205.210.31.94 +205.210.31.95 +205.210.31.96 +205.210.31.97 +205.210.31.98 +205.210.31.99 +205.214.74.6 +205.236.155.137 +206.189.110.246 +206.189.114.103 +206.189.120.50 +206.189.130.158 +206.189.130.185 +206.189.130.255 +206.189.131.219 +206.189.137.162 +206.189.151.151 +206.189.19.65 +206.189.213.126 +206.189.237.229 +206.189.238.210 +206.189.31.90 +206.189.34.66 +206.189.37.172 +206.189.38.110 +206.189.42.174 +206.189.45.122 +206.189.49.176 +206.189.57.162 +206.189.57.56 +206.189.63.115 +206.189.65.29 +206.189.75.25 +206.189.80.198 +206.189.84.155 +206.189.86.228 +206.189.88.242 +206.217.131.233 +206.217.143.171 +206.251.211.203 +206.81.19.180 +206.81.25.18 +206.81.27.79 +207.154.194.126 +207.154.196.132 +207.154.208.68 +207.154.212.67 +207.154.215.181 +207.154.220.120 +207.154.226.163 +207.154.230.215 +207.154.232.181 +207.154.241.112 +207.154.245.181 +207.154.251.172 +207.229.164.18 +207.229.167.36 +207.237.216.175 +207.244.228.133 +207.249.123.177 +207.249.123.183 +207.249.96.147 +207.249.96.168 +207.249.96.38 +207.249.96.42 +207.254.246.191 +207.46.140.16 +207.90.244.2 +207.90.244.3 +207.90.244.4 +207.90.244.5 +207.90.244.6 +208.100.26.244 +208.104.246.150 +208.105.196.214 +208.109.13.144 +208.109.33.212 +208.109.34.70 +208.109.61.155 +208.67.104.235 +208.72.65.181 +208.97.181.102 +208.99.251.25 +209.126.2.205 +209.127.54.10 +209.141.37.166 +209.141.45.235 +209.141.46.14 +209.141.46.19 +209.141.49.96 +209.141.51.12 +209.141.51.76 +209.141.60.201 +209.141.61.36 +209.145.63.7 +209.150.150.26 +209.159.213.193 +209.164.247.229 +209.203.48.58 +209.249.44.82 +209.38.252.186 +209.87.149.13 +209.95.124.173 +209.97.133.7 +209.97.147.143 +209.97.149.37 +209.97.161.31 +209.97.163.142 +209.97.164.116 +209.97.183.120 +210.105.99.34 +210.106.108.250 +210.114.1.46 +210.121.109.12 +210.14.6.60 +210.146.173.28 +210.16.185.3 +210.176.41.225 +210.176.61.252 +210.183.177.210 +210.183.96.48 +210.186.166.139 +210.187.216.90 +210.19.254.6 +210.195.158.247 +210.206.120.249 +210.211.116.80 +210.22.132.154 +210.22.75.94 +210.245.111.235 +210.245.111.33 +210.245.26.43 +210.245.33.11 +210.3.200.114 +210.4.98.162 +210.56.26.106 +210.57.12.102 +210.64.73.142 +210.65.138.196 +210.68.200.79 +210.90.113.32 +210.91.254.26 +210.91.73.167 +210.95.97.86 +210.97.30.200 +210.99.110.117 +211.103.46.74 +211.104.134.100 +211.104.5.169 +211.105.186.192 +211.106.218.57 +211.106.61.246 +211.109.181.11 +211.110.1.12 +211.110.1.37 +211.110.139.198 +211.112.187.197 +211.114.142.156 +211.161.90.99 +211.185.129.203 +211.194.115.190 +211.194.83.173 +211.195.100.243 +211.196.120.196 +211.198.128.204 +211.198.231.160 +211.199.108.56 +211.199.96.67 +211.208.147.176 +211.21.113.128 +211.210.152.106 +211.210.35.146 +211.218.17.5 +211.219.111.67 +211.219.6.5 +211.220.190.19 +211.220.47.138 +211.221.138.162 +211.221.70.11 +211.221.85.144 +211.221.91.202 +211.222.108.240 +211.222.219.29 +211.222.241.183 +211.223.126.167 +211.223.130.25 +211.224.162.184 +211.224.63.169 +211.225.159.186 +211.225.81.12 +211.225.87.159 +211.226.226.223 +211.227.102.57 +211.227.163.40 +211.227.89.204 +211.227.97.39 +211.228.164.252 +211.229.101.27 +211.23.95.152 +211.230.31.143 +211.240.29.61 +211.246.182.240 +211.248.12.99 +211.248.124.211 +211.248.168.249 +211.248.2.102 +211.25.119.142 +211.250.74.124 +211.252.204.42 +211.252.84.224 +211.253.10.96 +211.253.133.50 +211.253.170.241 +211.253.27.169 +211.253.37.225 +211.253.9.49 +211.37.174.62 +211.38.245.16 +211.38.255.249 +211.43.15.80 +211.46.217.253 +211.51.110.71 +211.55.110.104 +211.57.20.18 +211.72.100.135 +211.72.198.143 +211.75.183.12 +211.75.19.210 +211.75.215.176 +212.109.207.62 +212.12.31.189 +212.122.92.125 +212.129.63.165 +212.192.240.68 +212.193.30.63 +212.199.223.105 +212.224.93.202 +212.226.91.3 +212.227.6.132 +212.233.113.86 +212.237.106.146 +212.33.243.22 +212.33.245.236 +212.33.250.241 +212.50.255.183 +212.62.96.197 +212.71.249.10 +212.83.144.11 +212.83.146.166 +212.83.157.255 +212.83.8.75 +212.83.8.79 +212.95.50.77 +213.102.67.228 +213.108.200.11 +213.108.4.88 +213.110.25.5 +213.112.251.50 +213.136.85.206 +213.141.143.70 +213.148.174.46 +213.152.161.118 +213.152.161.138 +213.152.161.149 +213.152.161.15 +213.152.161.165 +213.152.161.30 +213.152.161.5 +213.152.162.154 +213.152.162.94 +213.152.162.99 +213.152.187.195 +213.152.187.200 +213.152.187.235 +213.155.211.211 +213.155.225.165 +213.166.81.248 +213.177.214.112 +213.190.4.134 +213.194.140.33 +213.215.140.6 +213.221.32.242 +213.226.123.61 +213.230.124.230 +213.230.64.246 +213.230.65.53 +213.246.240.84 +213.32.16.42 +213.32.255.94 +213.32.82.91 +213.55.96.14 +213.59.164.235 +213.60.255.181 +213.74.115.162 +213.74.173.71 +216.10.245.180 +216.127.187.77 +216.20.128.186 +216.218.206.100 +216.218.206.102 +216.218.206.105 +216.218.206.120 +216.218.206.121 +216.218.206.124 +216.218.206.125 +216.218.206.66 +216.218.206.73 +216.218.206.77 +216.218.206.82 +216.218.206.86 +216.218.206.89 +216.218.206.92 +216.218.206.93 +216.218.206.96 +216.218.206.97 +216.232.132.5 +216.240.40.57 +216.245.77.37 +216.250.247.157 +216.252.161.32 +216.83.42.237 +217.10.40.45 +217.107.124.58 +217.11.189.230 +217.115.58.242 +217.12.86.246 +217.128.206.117 +217.133.27.74 +217.133.34.149 +217.133.56.150 +217.147.173.229 +217.151.98.163 +217.160.51.110 +217.165.114.35 +217.165.133.17 +217.182.16.12 +217.182.253.127 +217.182.75.250 +217.19.154.220 +217.195.197.37 +217.196.24.182 +217.219.116.116 +217.219.223.36 +217.219.61.14 +217.219.61.27 +217.237.112.159 +217.29.116.186 +217.29.116.187 +217.29.49.103 +217.59.246.27 +217.66.25.10 +217.73.110.9 +217.76.49.212 +217.76.51.160 +217.76.62.0 +217.77.48.229 +218.103.123.96 +218.104.237.213 +218.13.49.72 +218.146.117.222 +218.147.131.59 +218.148.197.203 +218.149.255.15 +218.149.97.96 +218.150.246.42 +218.150.6.100 +218.151.74.192 +218.154.184.236 +218.154.31.185 +218.157.249.130 +218.161.14.158 +218.161.22.17 +218.161.27.10 +218.161.74.199 +218.161.86.236 +218.161.90.126 +218.185.241.184 +218.201.148.26 +218.201.148.42 +218.21.73.71 +218.211.171.143 +218.22.52.196 +218.238.144.57 +218.249.168.10 +218.25.233.22 +218.255.131.218 +218.255.179.162 +218.255.245.10 +218.26.205.154 +218.28.225.36 +218.29.163.2 +218.29.61.124 +218.39.194.10 +218.57.210.66 +218.59.200.40 +218.60.104.1 +218.60.95.59 +218.63.104.75 +218.64.124.21 +218.64.57.12 +218.65.37.216 +218.77.67.196 +218.78.75.180 +218.89.52.104 +218.91.109.91 +218.91.12.127 +218.91.15.19 +218.92.0.107 +218.92.0.108 +218.92.0.112 +218.92.0.113 +218.92.0.118 +218.92.0.15 +218.92.0.17 +218.92.0.20 +218.92.0.21 +218.92.0.22 +218.92.0.24 +218.92.0.25 +218.92.0.26 +218.92.0.27 +218.92.0.28 +218.92.0.29 +218.92.0.30 +218.92.0.31 +218.92.0.33 +218.92.0.34 +218.92.0.35 +218.92.0.37 +218.92.0.40 +218.92.0.43 +218.92.0.45 +218.92.0.46 +218.92.0.47 +218.92.0.51 +218.92.0.52 +218.92.0.53 +218.92.0.55 +218.92.0.56 +218.92.0.59 +218.92.0.62 +218.92.0.95 +218.92.0.96 +218.92.0.98 +218.92.0.99 +218.92.230.86 +218.93.165.167 +218.93.190.91 +218.94.53.250 +219.127.11.94 +219.128.15.190 +219.128.9.126 +219.129.97.146 +219.138.158.26 +219.139.148.107 +219.139.75.193 +219.147.194.122 +219.148.171.178 +219.149.192.70 +219.151.237.248 +219.151.237.253 +219.240.110.224 +219.249.140.30 +219.252.26.188 +219.254.130.174 +219.255.127.181 +219.78.72.195 +219.85.53.188 +219.85.59.166 +220.117.232.74 +220.118.147.50 +220.118.147.55 +220.120.192.85 +220.120.78.20 +220.122.202.232 +220.124.208.203 +220.124.89.47 +220.125.240.69 +220.125.26.138 +220.126.208.30 +220.126.8.143 +220.128.228.235 +220.130.222.105 +220.132.141.109 +220.132.148.220 +220.132.163.58 +220.132.164.121 +220.132.168.189 +220.132.240.37 +220.132.69.196 +220.132.98.85 +220.133.19.172 +220.133.194.28 +220.133.230.183 +220.133.249.85 +220.133.251.58 +220.133.58.63 +220.133.6.130 +220.133.62.88 +220.133.83.143 +220.133.95.68 +220.134.165.98 +220.134.188.181 +220.134.197.205 +220.134.50.45 +220.134.55.62 +220.134.6.146 +220.134.62.165 +220.134.63.101 +220.134.64.85 +220.135.105.82 +220.135.126.89 +220.135.13.93 +220.135.142.40 +220.135.177.191 +220.135.228.102 +220.135.244.126 +220.135.254.103 +220.135.26.2 +220.135.61.173 +220.166.88.18 +220.169.54.18 +220.173.55.139 +220.177.254.171 +220.178.120.74 +220.179.138.14 +220.179.69.99 +220.180.107.235 +220.180.166.214 +220.180.171.157 +220.180.37.203 +220.202.55.106 +220.205.122.147 +220.225.126.55 +220.228.152.176 +220.246.33.144 +220.246.66.209 +220.247.10.215 +220.247.223.56 +220.247.247.150 +220.249.16.114 +220.250.41.11 +220.255.30.104 +220.71.94.93 +220.72.97.172 +220.74.78.244 +220.76.104.72 +220.76.132.137 +220.76.90.28 +220.77.208.144 +220.77.4.105 +220.77.47.127 +220.78.2.130 +220.78.79.212 +220.80.101.244 +220.80.14.246 +220.80.143.84 +220.80.200.97 +220.80.215.226 +220.80.223.144 +220.83.207.100 +220.84.89.245 +220.85.134.188 +220.86.118.225 +220.88.1.208 +220.89.108.55 +220.89.239.5 +220.93.77.192 +220.95.31.27 +221.118.24.119 +221.118.82.181 +221.120.201.99 +221.120.38.213 +221.121.150.129 +221.122.67.75 +221.133.12.6 +221.133.26.232 +221.140.2.233 +221.145.209.23 +221.145.250.221 +221.147.232.194 +221.148.192.216 +221.15.199.35 +221.15.236.124 +221.150.59.204 +221.151.120.235 +221.153.10.93 +221.155.143.109 +221.156.126.1 +221.157.75.252 +221.159.206.62 +221.160.125.68 +221.161.74.36 +221.162.238.34 +221.163.114.252 +221.164.208.79 +221.165.124.230 +221.167.104.115 +221.178.176.85 +221.181.174.201 +221.187.82.239 +221.193.248.166 +221.195.109.174 +221.195.208.21 +221.195.80.203 +221.2.153.49 +221.204.171.236 +221.213.63.210 +221.214.181.197 +221.214.60.106 +221.225.103.130 +221.225.135.159 +221.229.31.69 +221.231.111.186 +221.235.139.121 +221.238.141.18 +221.8.33.125 +222.101.206.211 +222.102.183.234 +222.103.134.60 +222.103.186.167 +222.103.20.77 +222.104.124.107 +222.104.202.16 +222.105.170.207 +222.107.156.227 +222.107.176.163 +222.108.12.43 +222.108.136.14 +222.108.64.95 +222.110.128.164 +222.111.81.173 +222.112.217.59 +222.112.233.147 +222.113.134.71 +222.116.247.252 +222.117.118.200 +222.117.92.66 +222.120.129.188 +222.120.176.4 +222.121.250.116 +222.124.214.10 +222.138.176.193 +222.161.242.146 +222.165.138.144 +222.165.151.114 +222.165.186.50 +222.168.30.19 +222.170.53.82 +222.173.216.246 +222.179.39.200 +222.184.86.186 +222.185.1.112 +222.185.103.179 +222.185.103.223 +222.185.167.14 +222.186.13.133 +222.186.21.35 +222.188.106.38 +222.188.185.206 +222.188.192.190 +222.188.201.10 +222.188.255.22 +222.189.115.109 +222.212.94.49 +222.218.17.199 +222.218.17.20 +222.221.80.8 +222.222.111.49 +222.222.21.184 +222.237.78.200 +222.239.231.61 +222.241.49.92 +222.243.211.188 +222.246.125.78 +222.246.42.218 +222.252.21.30 +222.253.43.62 +222.71.174.180 +222.71.214.2 +222.74.217.106 +222.75.12.66 +222.75.12.78 +222.75.225.206 +222.88.205.48 +222.93.28.217 +222.93.94.181 +222.98.224.114 +222.99.194.210 +222.99.27.132 +223.10.1.216 +223.10.123.168 +223.10.18.16 +223.10.30.132 +223.10.67.194 +223.113.91.98 +223.12.158.253 +223.13.28.156 +223.13.30.39 +223.13.61.252 +223.13.73.64 +223.134.4.129 +223.14.78.228 +223.149.20.70 +223.15.52.144 +223.15.52.173 +223.15.52.74 +223.167.75.122 +223.17.0.181 +223.171.91.139 +223.171.91.160 +223.181.129.195 +223.19.203.165 +223.197.125.110 +223.197.162.15 +223.197.162.18 +223.197.172.72 +223.197.199.52 +223.197.202.7 +223.197.215.193 +223.197.223.102 +223.197.223.237 +223.22.233.92 +223.22.243.22 +223.241.100.90 +223.243.101.149 +223.244.253.16 +223.25.66.160 +223.71.26.166 +223.73.207.7 +223.8.0.212 +223.8.0.75 +223.8.197.72 +223.8.200.55 +223.8.211.89 +223.8.214.235 +223.8.235.118 +223.8.46.32 +223.82.203.42 +223.9.122.26 +223.9.122.87 +223.9.126.212 +223.9.127.187 +223.9.47.168 +223.94.129.72 +23.105.194.93 +23.105.201.41 +23.105.218.220 +23.105.222.234 +23.116.82.170 +23.123.122.169 +23.129.64.214 +23.129.64.216 +23.129.64.220 +23.129.64.228 +23.129.64.229 +23.137.250.7 +23.140.99.149 +23.140.99.153 +23.146.240.83 +23.22.35.162 +23.224.152.42 +23.224.186.179 +23.224.186.185 +23.224.186.187 +23.224.186.206 +23.224.186.207 +23.224.186.216 +23.224.186.222 +23.224.186.223 +23.224.186.23 +23.224.186.36 +23.224.186.37 +23.224.186.4 +23.224.186.46 +23.224.186.67 +23.224.186.69 +23.224.186.7 +23.224.186.73 +23.224.186.75 +23.224.189.26 +23.224.189.28 +23.224.189.31 +23.224.189.35 +23.224.189.49 +23.224.197.134 +23.224.33.173 +23.224.33.41 +23.224.98.194 +23.225.163.199 +23.225.163.203 +23.225.163.205 +23.225.163.214 +23.225.163.215 +23.225.163.217 +23.225.163.219 +23.225.180.180 +23.225.180.206 +23.225.77.221 +23.226.128.22 +23.241.32.194 +23.243.240.107 +23.244.78.182 +23.248.175.138 +23.248.184.241 +23.251.102.74 +23.251.102.75 +23.251.102.76 +23.30.195.98 +23.90.160.140 +23.90.160.146 +23.90.160.147 +23.90.160.148 +23.94.0.113 +23.94.122.136 +23.94.181.24 +23.94.194.177 +23.94.218.57 +23.94.61.49 +23.94.62.185 +23.95.113.24 +23.95.166.48 +23.95.170.226 +23.95.20.253 +23.95.4.194 +23.95.41.40 +23.95.44.105 +23.97.195.150 +23.97.205.210 +24.103.95.58 +24.109.128.254 +24.111.249.3 +24.118.41.187 +24.120.108.5 +24.123.10.93 +24.127.158.28 +24.140.121.21 +24.143.127.229 +24.152.14.150 +24.168.98.246 +24.172.123.68 +24.199.108.105 +24.199.116.85 +24.199.118.157 +24.199.120.7 +24.199.86.99 +24.199.94.27 +24.205.219.58 +24.207.174.170 +24.209.184.145 +24.21.198.5 +24.227.103.175 +24.233.243.241 +24.242.115.95 +24.247.68.114 +24.254.79.163 +24.30.115.21 +24.31.19.16 +24.59.43.41 +24.88.242.6 +24.9.140.212 +2607:ff10:c8:594::4 +2607:ff10:c8:594::5 +2607:ff10:c8:594::7 +2607:ff10:c8:594::8 +2607:ff10:c8:594::9 +2607:ff10:c8:594::a +2607:ff10:c8:594::c +2607:ff10:c8:594::d +2607:ff10:c8:594::e +27.100.163.219 +27.105.182.58 +27.111.74.44 +27.112.79.223 +27.118.22.221 +27.123.254.213 +27.124.12.23 +27.124.32.142 +27.124.32.143 +27.124.32.157 +27.124.32.158 +27.124.32.163 +27.124.32.166 +27.124.32.183 +27.124.32.185 +27.124.32.186 +27.124.32.190 +27.124.5.118 +27.124.5.119 +27.124.5.120 +27.124.5.15 +27.124.5.21 +27.124.5.3 +27.128.163.249 +27.128.194.139 +27.130.113.98 +27.131.36.170 +27.147.145.186 +27.150.173.9 +27.156.185.152 +27.157.193.205 +27.185.41.202 +27.188.65.103 +27.188.67.235 +27.192.254.117 +27.197.212.97 +27.220.48.159 +27.222.53.237 +27.254.149.199 +27.254.159.123 +27.254.207.181 +27.254.235.1 +27.254.235.12 +27.254.235.13 +27.254.235.2 +27.254.253.213 +27.254.41.5 +27.254.47.59 +27.35.18.225 +27.35.2.52 +27.35.34.124 +27.45.118.216 +27.5.120.176 +27.50.54.64 +27.71.224.116 +27.71.235.82 +27.71.238.208 +27.72.102.114 +27.72.116.110 +27.72.155.100 +27.72.155.116 +27.72.28.167 +27.72.46.112 +27.72.46.90 +27.72.47.190 +27.72.87.36 +27.74.90.243 +27.98.249.9 +2a10:cc45:100::30c0:a37c:7eb0:c8a9 +2a10:cc45:100::b048:c10c:f2f9:d3ef +3.0.14.27 +3.111.62.38 +3.127.93.80 +31.0.137.82 +31.13.239.4 +31.133.205.10 +31.134.120.154 +31.134.62.5 +31.156.239.225 +31.163.183.77 +31.165.193.87 +31.167.151.230 +31.179.234.178 +31.184.198.71 +31.184.240.91 +31.186.48.216 +31.187.75.235 +31.192.111.224 +31.210.211.114 +31.210.39.123 +31.214.243.150 +31.220.1.83 +31.220.59.91 +31.41.244.111 +31.41.244.125 +31.42.173.30 +31.48.122.145 +31.7.70.251 +31.7.70.253 +31.7.75.118 +32.212.128.24 +34.100.144.72 +34.100.161.188 +34.100.189.218 +34.100.200.229 +34.100.239.202 +34.100.241.106 +34.101.132.175 +34.101.245.3 +34.105.247.11 +34.124.148.234 +34.125.22.185 +34.126.71.110 +34.126.78.62 +34.128.76.85 +34.132.47.136 +34.133.176.225 +34.133.86.38 +34.136.12.75 +34.140.248.32 +34.140.65.171 +34.142.197.251 +34.142.220.84 +34.142.82.98 +34.143.146.116 +34.159.227.146 +34.170.143.93 +34.175.118.185 +34.28.218.26 +34.64.101.62 +34.64.192.120 +34.64.201.2 +34.64.215.4 +34.64.239.126 +34.64.96.127 +34.65.234.0 +34.67.61.18 +34.69.182.55 +34.71.85.187 +34.75.65.218 +34.76.158.233 +34.79.162.186 +34.80.149.187 +34.80.213.3 +34.81.50.162 +34.82.167.19 +34.85.163.94 +34.87.110.103 +34.87.234.40 +34.89.123.20 +34.91.0.68 +34.92.176.182 +34.93.152.113 +34.93.165.178 +34.93.204.90 +34.93.41.247 +35.140.131.156 +35.178.201.171 +35.186.145.141 +35.188.219.29 +35.194.181.153 +35.194.233.240 +35.196.25.123 +35.196.37.143 +35.196.46.44 +35.198.227.178 +35.199.95.142 +35.201.137.149 +35.202.200.207 +35.203.210.10 +35.203.210.100 +35.203.210.120 +35.203.210.123 +35.203.210.133 +35.203.210.135 +35.203.210.145 +35.203.210.156 +35.203.210.16 +35.203.210.162 +35.203.210.164 +35.203.210.165 +35.203.210.166 +35.203.210.167 +35.203.210.171 +35.203.210.175 +35.203.210.179 +35.203.210.184 +35.203.210.185 +35.203.210.19 +35.203.210.190 +35.203.210.195 +35.203.210.204 +35.203.210.215 +35.203.210.22 +35.203.210.229 +35.203.210.230 +35.203.210.232 +35.203.210.234 +35.203.210.236 +35.203.210.240 +35.203.210.247 +35.203.210.248 +35.203.210.251 +35.203.210.33 +35.203.210.35 +35.203.210.39 +35.203.210.42 +35.203.210.43 +35.203.210.44 +35.203.210.47 +35.203.210.55 +35.203.210.6 +35.203.210.64 +35.203.210.65 +35.203.210.7 +35.203.210.78 +35.203.210.81 +35.203.210.91 +35.203.210.96 +35.203.210.97 +35.203.211.108 +35.203.211.112 +35.203.211.114 +35.203.211.118 +35.203.211.120 +35.203.211.130 +35.203.211.137 +35.203.211.141 +35.203.211.152 +35.203.211.154 +35.203.211.170 +35.203.211.176 +35.203.211.178 +35.203.211.18 +35.203.211.181 +35.203.211.189 +35.203.211.203 +35.203.211.21 +35.203.211.217 +35.203.211.222 +35.203.211.224 +35.203.211.228 +35.203.211.236 +35.203.211.30 +35.203.211.32 +35.203.211.38 +35.203.211.39 +35.203.211.4 +35.203.211.43 +35.203.211.54 +35.203.211.55 +35.203.211.66 +35.203.211.7 +35.203.211.72 +35.203.211.77 +35.203.211.78 +35.203.211.88 +35.203.211.99 +35.207.209.4 +35.209.153.107 +35.210.95.93 +35.213.170.208 +35.216.190.48 +35.216.225.215 +35.216.237.60 +35.219.62.194 +35.219.66.183 +35.220.172.244 +35.222.117.243 +35.223.246.35 +35.224.2.98 +35.225.199.197 +35.225.22.57 +35.226.196.179 +35.226.64.200 +35.227.22.144 +35.229.206.177 +35.233.62.116 +35.240.132.23 +35.240.204.250 +35.240.237.113 +35.242.254.186 +35.244.10.86 +35.244.25.124 +35.245.196.202 +35.247.184.181 +35.86.183.248 +36.103.240.241 +36.103.241.107 +36.105.172.98 +36.108.173.101 +36.108.188.106 +36.110.228.254 +36.137.75.228 +36.139.87.191 +36.140.58.65 +36.154.231.90 +36.156.145.28 +36.158.124.42 +36.224.130.105 +36.224.145.73 +36.225.143.251 +36.229.161.105 +36.230.119.209 +36.239.175.94 +36.26.58.34 +36.26.70.203 +36.26.74.146 +36.32.24.153 +36.33.1.186 +36.33.240.167 +36.33.240.171 +36.35.151.150 +36.35.24.92 +36.48.29.10 +36.48.30.25 +36.55.136.21 +36.66.16.233 +36.66.212.226 +36.66.41.76 +36.73.132.100 +36.80.225.16 +36.85.108.54 +36.91.166.34 +36.91.178.178 +36.92.107.106 +36.92.165.163 +36.92.36.146 +36.93.108.107 +36.94.81.243 +36.94.90.98 +36.95.2.93 +36.95.219.202 +36.95.62.183 +36.96.40.194 +36.97.144.36 +36.99.246.242 +37.101.187.64 +37.103.91.160 +37.112.191.12 +37.114.47.108 +37.120.132.83 +37.120.148.78 +37.139.15.214 +37.139.4.138 +37.152.180.209 +37.152.187.164 +37.152.191.57 +37.159.240.182 +37.17.180.98 +37.187.45.135 +37.187.74.90 +37.187.78.11 +37.187.88.37 +37.193.112.180 +37.194.206.12 +37.204.183.68 +37.216.201.49 +37.221.92.205 +37.228.129.100 +37.228.129.26 +37.25.36.50 +37.252.66.56 +37.28.178.196 +37.32.21.111 +37.32.27.168 +37.32.30.157 +37.34.228.29 +37.44.244.73 +37.49.38.186 +37.53.82.111 +37.77.167.64 +38.10.246.40 +38.126.213.150 +38.132.109.112 +38.132.109.119 +38.21.60.242 +38.242.135.212 +38.50.60.15 +38.53.131.121 +38.7.222.160 +38.7.31.74 +38.9.163.57 +38.99.81.158 +39.100.73.242 +39.101.185.186 +39.105.77.214 +39.106.1.169 +39.108.166.28 +39.109.127.125 +39.109.85.40 +39.117.148.101 +39.126.196.122 +39.126.46.144 +39.126.46.183 +39.126.46.89 +39.129.35.96 +39.129.54.66 +39.130.181.254 +39.164.106.80 +39.170.5.210 +39.174.196.203 +39.33.131.34 +39.45.232.37 +39.74.4.163 +39.77.7.174 +39.83.135.95 +39.91.166.193 +39.91.166.21 +39.98.40.237 +39.98.70.164 +4.17.226.132 +4.194.59.40 +4.224.22.134 +4.228.213.1 +4.229.227.188 +40.112.186.222 +40.113.115.253 +40.113.120.26 +40.115.18.231 +40.118.30.26 +40.118.46.159 +40.124.73.236 +40.68.89.187 +40.76.197.234 +40.76.205.168 +40.77.111.208 +41.138.161.10 +41.138.161.23 +41.138.85.165 +41.162.56.37 +41.169.26.227 +41.175.18.170 +41.175.5.110 +41.185.26.240 +41.190.158.22 +41.190.51.10 +41.191.116.18 +41.205.93.2 +41.207.248.204 +41.214.134.201 +41.214.20.60 +41.215.130.247 +41.215.151.42 +41.216.177.212 +41.220.235.128 +41.221.201.77 +41.223.230.82 +41.223.6.198 +41.223.6.200 +41.223.99.89 +41.231.106.9 +41.231.3.210 +41.41.97.145 +41.63.182.43 +41.63.9.36 +41.65.239.235 +41.72.219.102 +41.73.252.229 +41.74.112.230 +41.77.11.130 +41.79.190.243 +41.82.208.182 +41.93.31.73 +42.117.228.16 +42.117.230.15 +42.118.122.196 +42.119.111.155 +42.144.88.192 +42.190.103.132 +42.190.98.111 +42.192.123.62 +42.192.92.229 +42.194.133.5 +42.200.149.223 +42.200.155.72 +42.200.159.37 +42.200.203.63 +42.200.75.233 +42.235.47.99 +42.238.235.103 +42.240.129.110 +42.240.129.230 +42.240.129.249 +42.240.129.40 +42.240.129.66 +42.240.129.69 +42.240.129.8 +42.240.129.88 +42.240.129.9 +42.240.133.52 +42.243.156.225 +42.53.149.83 +42.53.89.153 +42.55.17.123 +42.83.147.54 +42.85.128.113 +42.96.45.52 +42.96.46.204 +42.98.124.172 +43.128.108.240 +43.128.229.157 +43.128.232.139 +43.128.233.21 +43.128.96.6 +43.129.158.215 +43.129.201.229 +43.129.216.151 +43.129.253.251 +43.129.33.99 +43.129.35.207 +43.129.36.145 +43.129.39.176 +43.129.40.155 +43.130.10.173 +43.130.11.228 +43.130.148.100 +43.130.198.204 +43.130.56.249 +43.130.57.239 +43.131.23.30 +43.131.244.10 +43.131.244.252 +43.131.244.81 +43.131.245.109 +43.131.246.101 +43.131.248.141 +43.131.25.199 +43.131.251.167 +43.131.251.22 +43.131.253.42 +43.131.253.76 +43.131.254.249 +43.131.27.151 +43.131.27.221 +43.131.30.179 +43.131.35.111 +43.131.36.15 +43.131.39.140 +43.131.39.5 +43.131.41.190 +43.131.41.86 +43.131.43.27 +43.131.47.144 +43.131.52.47 +43.131.57.46 +43.131.59.246 +43.131.66.209 +43.131.68.225 +43.131.91.178 +43.131.94.145 +43.133.102.2 +43.133.112.167 +43.133.229.111 +43.133.56.252 +43.133.61.178 +43.133.68.229 +43.133.68.6 +43.134.162.181 +43.134.170.128 +43.134.171.145 +43.134.171.46 +43.134.172.119 +43.134.173.244 +43.134.174.180 +43.134.174.239 +43.134.174.244 +43.134.178.72 +43.134.178.78 +43.134.181.138 +43.134.181.149 +43.134.185.127 +43.134.186.121 +43.134.186.17 +43.134.186.44 +43.134.188.132 +43.134.189.173 +43.134.189.26 +43.134.191.100 +43.134.197.109 +43.134.202.163 +43.134.225.97 +43.134.226.192 +43.134.226.88 +43.134.227.248 +43.134.231.13 +43.134.235.22 +43.134.237.227 +43.134.237.29 +43.134.239.49 +43.134.31.32 +43.134.53.53 +43.134.71.115 +43.134.72.206 +43.134.72.95 +43.134.85.190 +43.134.94.34 +43.135.145.254 +43.135.145.8 +43.135.150.172 +43.135.153.223 +43.135.161.111 +43.135.163.185 +43.135.163.214 +43.135.169.51 +43.135.172.115 +43.135.172.127 +43.135.172.249 +43.135.181.188 +43.135.48.212 +43.136.236.39 +43.136.77.89 +43.138.132.54 +43.138.231.226 +43.138.30.190 +43.138.60.169 +43.139.155.203 +43.139.34.148 +43.142.10.11 +43.142.105.8 +43.142.106.146 +43.142.23.15 +43.142.251.58 +43.142.40.254 +43.142.76.35 +43.143.112.64 +43.143.130.216 +43.143.138.171 +43.143.166.92 +43.143.209.144 +43.143.236.104 +43.143.47.12 +43.143.67.17 +43.153.100.253 +43.153.102.104 +43.153.103.80 +43.153.104.18 +43.153.107.61 +43.153.11.147 +43.153.110.228 +43.153.111.122 +43.153.112.182 +43.153.113.212 +43.153.116.175 +43.153.117.9 +43.153.12.171 +43.153.123.72 +43.153.124.128 +43.153.124.150 +43.153.124.99 +43.153.13.30 +43.153.14.105 +43.153.15.134 +43.153.16.8 +43.153.168.139 +43.153.175.158 +43.153.178.30 +43.153.184.188 +43.153.186.220 +43.153.189.214 +43.153.192.102 +43.153.193.131 +43.153.193.173 +43.153.193.40 +43.153.194.186 +43.153.194.204 +43.153.194.238 +43.153.195.224 +43.153.195.51 +43.153.2.188 +43.153.20.25 +43.153.203.163 +43.153.203.201 +43.153.203.223 +43.153.207.222 +43.153.207.24 +43.153.208.27 +43.153.208.96 +43.153.21.103 +43.153.21.104 +43.153.21.51 +43.153.210.18 +43.153.211.187 +43.153.211.231 +43.153.219.28 +43.153.219.74 +43.153.222.91 +43.153.223.232 +43.153.223.76 +43.153.225.154 +43.153.225.213 +43.153.226.194 +43.153.226.222 +43.153.227.42 +43.153.228.16 +43.153.229.39 +43.153.25.166 +43.153.38.187 +43.153.39.12 +43.153.44.198 +43.153.45.84 +43.153.57.123 +43.153.58.120 +43.153.59.10 +43.153.6.105 +43.153.60.222 +43.153.62.118 +43.153.63.216 +43.153.64.46 +43.153.65.192 +43.153.66.25 +43.153.67.198 +43.153.67.248 +43.153.68.27 +43.153.70.16 +43.153.72.103 +43.153.75.223 +43.153.76.170 +43.153.76.36 +43.153.77.199 +43.153.78.101 +43.153.80.14 +43.153.81.150 +43.153.85.127 +43.153.85.152 +43.153.86.185 +43.153.86.202 +43.153.88.11 +43.153.88.134 +43.153.88.71 +43.153.94.136 +43.153.95.205 +43.153.95.48 +43.153.96.46 +43.153.98.229 +43.153.99.59 +43.153.99.73 +43.154.0.241 +43.154.102.160 +43.154.105.103 +43.154.106.161 +43.154.106.189 +43.154.108.106 +43.154.111.236 +43.154.112.233 +43.154.115.238 +43.154.116.34 +43.154.122.248 +43.154.125.225 +43.154.126.65 +43.154.128.184 +43.154.129.174 +43.154.141.230 +43.154.143.144 +43.154.145.12 +43.154.145.254 +43.154.147.96 +43.154.150.131 +43.154.151.222 +43.154.151.93 +43.154.154.86 +43.154.155.223 +43.154.156.138 +43.154.159.239 +43.154.161.169 +43.154.162.100 +43.154.168.144 +43.154.170.190 +43.154.172.51 +43.154.175.130 +43.154.177.228 +43.154.18.201 +43.154.183.15 +43.154.184.101 +43.154.184.208 +43.154.185.151 +43.154.189.205 +43.154.195.135 +43.154.198.244 +43.154.2.17 +43.154.201.95 +43.154.203.106 +43.154.204.119 +43.154.207.124 +43.154.212.113 +43.154.216.165 +43.154.22.178 +43.154.232.132 +43.154.234.215 +43.154.235.67 +43.154.235.92 +43.154.25.104 +43.154.29.163 +43.154.48.221 +43.154.51.175 +43.154.54.104 +43.154.60.127 +43.154.66.147 +43.154.69.176 +43.154.79.12 +43.154.80.232 +43.154.87.44 +43.154.88.204 +43.154.89.184 +43.154.9.162 +43.154.90.94 +43.154.91.113 +43.154.92.38 +43.154.95.120 +43.154.96.206 +43.154.97.145 +43.155.105.15 +43.155.107.205 +43.155.112.3 +43.155.129.233 +43.155.130.86 +43.155.133.193 +43.155.137.113 +43.155.137.143 +43.155.141.71 +43.155.145.208 +43.155.145.232 +43.155.152.150 +43.155.152.19 +43.155.155.92 +43.155.156.197 +43.155.157.138 +43.155.159.250 +43.155.162.157 +43.155.162.170 +43.155.164.66 +43.155.166.27 +43.155.166.93 +43.155.168.169 +43.155.168.85 +43.155.171.9 +43.155.174.134 +43.155.174.191 +43.155.176.14 +43.155.177.183 +43.155.179.158 +43.155.180.148 +43.155.180.15 +43.155.183.169 +43.155.184.226 +43.155.186.187 +43.155.61.169 +43.155.62.202 +43.155.78.81 +43.155.86.100 +43.155.95.31 +43.156.0.252 +43.156.1.155 +43.156.100.237 +43.156.102.98 +43.156.106.143 +43.156.106.15 +43.156.106.29 +43.156.109.253 +43.156.110.38 +43.156.113.121 +43.156.114.12 +43.156.114.14 +43.156.115.222 +43.156.116.107 +43.156.122.147 +43.156.122.230 +43.156.122.96 +43.156.124.108 +43.156.124.83 +43.156.125.206 +43.156.125.211 +43.156.130.213 +43.156.131.197 +43.156.131.226 +43.156.133.239 +43.156.133.30 +43.156.137.147 +43.156.146.134 +43.156.17.227 +43.156.17.56 +43.156.18.253 +43.156.18.47 +43.156.205.162 +43.156.224.228 +43.156.225.149 +43.156.225.179 +43.156.225.5 +43.156.227.185 +43.156.228.30 +43.156.231.205 +43.156.231.49 +43.156.232.12 +43.156.236.67 +43.156.237.143 +43.156.237.162 +43.156.237.95 +43.156.238.161 +43.156.238.240 +43.156.239.139 +43.156.239.182 +43.156.239.2 +43.156.239.202 +43.156.239.39 +43.156.240.13 +43.156.240.176 +43.156.240.197 +43.156.240.201 +43.156.240.213 +43.156.240.234 +43.156.240.75 +43.156.241.176 +43.156.241.191 +43.156.241.229 +43.156.243.235 +43.156.245.189 +43.156.245.68 +43.156.27.142 +43.156.27.200 +43.156.27.23 +43.156.28.79 +43.156.29.177 +43.156.3.27 +43.156.30.27 +43.156.31.54 +43.156.32.117 +43.156.33.129 +43.156.33.44 +43.156.34.205 +43.156.34.30 +43.156.35.198 +43.156.38.13 +43.156.39.228 +43.156.39.31 +43.156.4.217 +43.156.42.52 +43.156.43.236 +43.156.43.56 +43.156.46.121 +43.156.47.154 +43.156.47.53 +43.156.48.166 +43.156.49.103 +43.156.49.122 +43.156.49.75 +43.156.52.207 +43.156.52.48 +43.156.56.193 +43.156.58.112 +43.156.6.43 +43.156.60.74 +43.156.62.13 +43.156.64.154 +43.156.65.116 +43.156.65.25 +43.156.66.5 +43.156.67.135 +43.156.67.238 +43.156.68.233 +43.156.68.36 +43.156.69.195 +43.156.69.230 +43.156.7.196 +43.156.7.9 +43.156.70.63 +43.156.71.53 +43.156.73.60 +43.156.75.227 +43.156.76.89 +43.156.77.105 +43.156.77.93 +43.156.78.220 +43.156.78.78 +43.156.79.21 +43.156.8.127 +43.156.8.244 +43.156.8.64 +43.156.83.142 +43.156.83.79 +43.156.84.114 +43.156.90.20 +43.156.93.19 +43.156.94.27 +43.156.95.49 +43.156.98.81 +43.156.98.88 +43.156.99.115 +43.157.10.218 +43.157.20.143 +43.157.26.193 +43.157.32.103 +43.157.43.240 +43.157.5.232 +43.157.50.168 +43.157.54.73 +43.157.62.27 +43.157.65.152 +43.157.8.248 +43.158.208.161 +43.158.217.137 +43.159.146.5 +43.159.192.236 +43.159.194.228 +43.159.196.133 +43.159.198.109 +43.159.199.126 +43.159.200.220 +43.159.200.61 +43.159.201.123 +43.159.32.241 +43.159.33.153 +43.159.33.188 +43.159.34.32 +43.159.37.251 +43.159.39.88 +43.159.40.252 +43.159.40.48 +43.159.44.127 +43.159.44.143 +43.159.44.201 +43.159.46.253 +43.159.49.103 +43.159.49.17 +43.159.49.49 +43.159.51.114 +43.159.52.31 +43.159.54.79 +43.159.56.183 +43.159.59.118 +43.159.59.128 +43.159.59.251 +43.159.59.97 +43.159.62.162 +43.159.63.148 +43.159.63.50 +43.163.197.146 +43.163.215.217 +43.163.219.166 +43.163.228.20 +43.163.243.89 +43.224.183.199 +43.225.157.56 +43.225.195.9 +43.225.53.39 +43.225.68.155 +43.228.131.114 +43.230.199.130 +43.231.234.154 +43.240.65.77 +43.241.57.179 +43.242.101.19 +43.246.208.12 +43.249.35.70 +43.252.61.98 +43.254.59.210 +44.201.102.109 +45.10.154.57 +45.112.139.101 +45.114.51.101 +45.116.76.106 +45.119.132.191 +45.119.212.147 +45.119.212.196 +45.119.5.214 +45.119.81.249 +45.119.82.52 +45.119.9.158 +45.12.147.2 +45.12.253.157 +45.12.253.170 +45.12.253.5 +45.12.253.8 +45.12.54.77 +45.120.115.150 +45.120.227.110 +45.126.124.113 +45.126.126.142 +45.128.232.101 +45.128.232.121 +45.128.232.145 +45.128.232.53 +45.128.232.62 +45.13.227.38 +45.130.104.187 +45.134.144.119 +45.134.144.212 +45.134.144.6 +45.134.168.33 +45.135.232.17 +45.136.239.42 +45.137.192.64 +45.138.16.168 +45.138.74.226 +45.140.143.104 +45.140.188.15 +45.141.151.243 +45.142.107.167 +45.142.122.97 +45.143.200.50 +45.145.7.149 +45.145.7.29 +45.147.250.208 +45.147.250.222 +45.147.250.233 +45.148.10.241 +45.148.120.113 +45.148.122.180 +45.149.76.106 +45.15.161.253 +45.150.65.149 +45.150.67.183 +45.151.167.10 +45.151.167.12 +45.153.230.148 +45.154.12.171 +45.154.2.129 +45.154.3.131 +45.155.204.67 +45.155.76.198 +45.155.91.51 +45.155.91.59 +45.155.91.63 +45.156.128.12 +45.156.128.17 +45.156.128.22 +45.156.128.25 +45.156.128.27 +45.156.129.17 +45.156.129.2 +45.156.129.24 +45.156.129.36 +45.156.129.7 +45.157.128.242 +45.157.190.112 +45.159.249.4 +45.159.250.227 +45.159.50.249 +45.161.176.1 +45.162.183.160 +45.162.216.76 +45.162.37.90 +45.164.39.253 +45.166.93.90 +45.167.104.200 +45.167.163.202 +45.167.182.219 +45.168.176.36 +45.172.225.40 +45.175.18.29 +45.179.149.42 +45.180.150.174 +45.182.47.155 +45.183.192.14 +45.183.193.1 +45.183.224.74 +45.183.62.10 +45.184.70.151 +45.186.123.234 +45.188.238.53 +45.189.220.0 +45.189.223.88 +45.190.46.53 +45.201.189.240 +45.221.8.205 +45.222.128.225 +45.225.195.250 +45.227.253.110 +45.227.254.48 +45.227.254.8 +45.228.137.198 +45.228.137.210 +45.229.153.149 +45.229.52.200 +45.229.52.201 +45.229.52.204 +45.230.167.36 +45.230.47.141 +45.230.84.33 +45.232.244.118 +45.235.34.112 +45.237.45.144 +45.238.252.129 +45.240.88.36 +45.249.245.88 +45.27.94.6 +45.33.46.249 +45.33.52.197 +45.33.78.70 +45.33.80.243 +45.33.83.115 +45.33.84.124 +45.33.87.154 +45.33.94.76 +45.33.95.64 +45.42.160.76 +45.43.33.210 +45.43.62.46 +45.5.10.100 +45.5.159.36 +45.55.0.13 +45.55.0.5 +45.55.0.6 +45.55.0.8 +45.55.49.150 +45.55.58.174 +45.55.63.118 +45.55.64.140 +45.55.65.92 +45.56.111.60 +45.61.161.39 +45.61.185.123 +45.61.188.109 +45.61.49.164 +45.64.185.187 +45.64.248.63 +45.66.131.190 +45.66.230.191 +45.66.230.230 +45.66.230.85 +45.67.138.67 +45.67.231.119 +45.7.109.26 +45.7.119.3 +45.71.58.137 +45.72.230.131 +45.79.110.218 +45.79.132.41 +45.79.149.111 +45.79.153.51 +45.79.177.245 +45.79.181.251 +45.79.191.178 +45.79.227.90 +45.79.67.140 +45.8.145.120 +45.80.64.230 +45.80.71.78 +45.81.243.102 +45.82.136.224 +45.83.118.202 +45.83.29.82 +45.83.64.109 +45.83.64.125 +45.83.64.135 +45.83.65.119 +45.83.65.247 +45.83.65.32 +45.83.66.246 +45.83.66.73 +45.83.67.245 +45.88.66.38 +45.88.67.128 +45.88.67.192 +45.89.246.214 +45.9.74.90 +45.91.171.169 +45.92.158.84 +45.93.201.51 +45.95.147.200 +45.95.147.210 +45.95.147.212 +45.95.147.218 +45.95.147.219 +45.95.147.220 +45.95.147.221 +45.95.169.240 +46.101.121.35 +46.101.127.204 +46.101.128.217 +46.101.149.125 +46.101.166.10 +46.101.171.235 +46.101.174.27 +46.101.190.66 +46.101.193.54 +46.101.215.187 +46.101.226.23 +46.101.229.124 +46.101.23.51 +46.101.29.76 +46.101.48.9 +46.101.49.103 +46.101.62.196 +46.101.73.109 +46.101.73.15 +46.101.80.224 +46.101.82.89 +46.101.95.23 +46.105.132.32 +46.105.132.33 +46.105.132.35 +46.105.29.159 +46.105.63.87 +46.105.97.186 +46.107.214.210 +46.114.88.227 +46.114.88.80 +46.139.127.178 +46.147.193.234 +46.148.140.125 +46.148.40.107 +46.148.40.114 +46.148.40.125 +46.148.40.13 +46.148.40.135 +46.148.40.136 +46.148.40.141 +46.148.40.143 +46.148.40.146 +46.148.40.147 +46.148.40.148 +46.148.40.149 +46.148.40.150 +46.148.40.151 +46.148.40.153 +46.148.40.156 +46.148.40.157 +46.148.40.158 +46.148.40.159 +46.148.40.161 +46.148.40.162 +46.148.40.163 +46.148.40.164 +46.148.40.170 +46.148.40.171 +46.148.40.172 +46.148.40.173 +46.148.40.174 +46.148.40.175 +46.148.40.183 +46.148.40.185 +46.148.40.189 +46.148.40.190 +46.148.40.191 +46.148.40.192 +46.148.40.195 +46.148.40.196 +46.148.40.197 +46.148.40.198 +46.148.40.199 +46.148.40.36 +46.148.40.37 +46.148.40.49 +46.148.40.5 +46.148.40.58 +46.148.40.77 +46.148.40.94 +46.149.182.124 +46.161.14.84 +46.161.27.184 +46.161.54.57 +46.162.106.153 +46.163.161.240 +46.166.171.188 +46.174.191.28 +46.174.191.29 +46.245.64.3 +46.245.76.37 +46.245.77.186 +46.245.80.56 +46.249.124.234 +46.3.197.6 +46.3.197.7 +46.3.223.131 +46.32.163.197 +46.32.172.88 +46.32.72.76 +46.32.78.73 +47.100.101.182 +47.104.184.67 +47.106.190.227 +47.108.206.57 +47.12.136.248 +47.147.62.205 +47.160.200.19 +47.176.38.253 +47.180.13.51 +47.188.49.142 +47.206.124.11 +47.212.215.8 +47.236.17.115 +47.236.19.114 +47.236.19.130 +47.236.21.146 +47.236.22.174 +47.236.23.167 +47.236.23.226 +47.236.24.102 +47.236.24.9 +47.236.25.213 +47.236.26.154 +47.236.26.196 +47.236.27.215 +47.236.29.8 +47.240.90.48 +47.242.119.178 +47.242.173.58 +47.242.202.229 +47.242.255.46 +47.245.105.166 +47.245.115.144 +47.245.25.131 +47.245.97.128 +47.245.99.208 +47.250.37.238 +47.250.38.240 +47.250.41.141 +47.250.45.206 +47.250.53.177 +47.252.46.15 +47.252.6.66 +47.253.50.56 +47.253.80.19 +47.254.201.78 +47.254.247.81 +47.34.19.157 +47.41.121.88 +47.6.47.59 +47.74.65.194 +47.74.96.31 +47.87.131.126 +47.87.139.249 +47.87.152.135 +47.87.191.157 +47.88.31.213 +47.90.134.66 +47.91.40.29 +47.93.139.85 +47.97.35.62 +49.0.129.27 +49.0.129.3 +49.0.71.48 +49.12.219.140 +49.128.62.82 +49.143.32.6 +49.156.46.90 +49.158.122.12 +49.158.200.46 +49.163.9.237 +49.169.63.208 +49.205.218.100 +49.206.119.234 +49.207.180.112 +49.207.63.163 +49.213.157.73 +49.213.171.38 +49.213.176.155 +49.213.251.49 +49.231.192.36 +49.231.66.250 +49.232.146.11 +49.232.167.204 +49.234.20.185 +49.234.21.97 +49.235.123.8 +49.235.66.248 +49.236.203.203 +49.245.28.91 +49.245.40.212 +49.245.76.177 +49.245.9.2 +49.247.198.162 +49.247.24.207 +49.247.36.29 +49.249.242.218 +49.249.83.115 +49.36.43.143 +49.51.183.1 +49.51.231.104 +49.51.24.192 +49.51.242.95 +49.51.243.206 +49.51.26.204 +49.64.149.102 +49.64.22.45 +49.64.250.26 +49.64.4.171 +49.70.124.231 +49.70.127.0 +49.70.39.153 +49.70.89.179 +49.71.116.115 +49.72.186.155 +49.72.59.26 +49.73.157.52 +49.73.184.7 +49.75.105.82 +49.84.128.158 +49.84.155.107 +49.85.199.64 +49.85.206.137 +49.85.207.113 +49.85.211.15 +49.85.212.182 +49.85.250.142 +49.86.1.105 +49.86.105.67 +49.86.107.165 +49.86.107.178 +49.86.107.48 +49.86.130.73 +49.86.19.83 +49.86.216.164 +49.86.33.152 +49.86.34.117 +49.86.36.105 +49.86.60.72 +49.86.73.174 +49.87.121.123 +49.87.80.55 +49.88.42.137 +49.88.89.105 +49.89.110.145 +49.89.118.65 +49.89.137.251 +49.89.139.195 +49.89.165.180 +49.89.173.253 +49.89.184.70 +49.89.190.137 +49.89.196.166 +49.89.200.208 +49.89.209.60 +49.89.235.152 +49.89.243.237 +49.89.250.183 +49.89.82.63 +5.10.250.122 +5.10.250.241 +5.11.150.207 +5.11.150.22 +5.112.0.58 +5.135.141.188 +5.135.82.170 +5.140.165.224 +5.141.87.113 +5.159.109.80 +5.159.54.197 +5.160.136.182 +5.161.118.239 +5.172.95.134 +5.181.86.17 +5.182.224.24 +5.188.62.174 +5.188.62.26 +5.189.129.40 +5.189.181.176 +5.189.244.34 +5.196.244.80 +5.196.27.116 +5.196.78.68 +5.200.46.40 +5.200.58.187 +5.200.70.148 +5.202.185.114 +5.248.109.229 +5.25.116.245 +5.252.118.204 +5.255.109.14 +5.255.110.148 +5.255.112.201 +5.27.232.65 +5.32.22.218 +5.34.176.27 +5.34.182.146 +5.39.220.40 +5.39.220.78 +5.39.23.15 +5.39.61.89 +5.39.61.91 +5.42.199.51 +5.51.84.107 +5.53.124.121 +5.54.34.176 +5.57.206.98 +5.75.197.131 +5.8.10.202 +5.8.194.238 +5.9.59.22 +5.96.212.44 +50.116.2.74 +50.116.59.19 +50.193.164.197 +50.194.214.214 +50.199.211.98 +50.210.123.187 +50.210.90.227 +50.213.110.149 +50.214.135.53 +50.217.175.10 +50.223.176.171 +50.223.37.170 +50.223.38.94 +50.225.176.238 +50.227.179.195 +50.238.10.68 +50.238.47.10 +50.239.51.146 +50.241.219.97 +50.29.254.211 +50.31.21.6 +50.5.1.46 +50.73.254.237 +51.104.22.5 +51.11.242.85 +51.15.11.81 +51.15.11.91 +51.15.140.163 +51.15.34.47 +51.15.52.121 +51.15.70.79 +51.15.73.248 +51.158.105.208 +51.158.28.15 +51.158.78.176 +51.159.156.120 +51.159.164.227 +51.159.64.66 +51.159.88.9 +51.161.11.85 +51.178.137.178 +51.178.146.199 +51.178.25.97 +51.178.30.100 +51.178.81.115 +51.195.235.82 +51.195.47.176 +51.210.13.76 +51.210.254.243 +51.222.12.238 +51.222.13.180 +51.222.137.64 +51.222.158.239 +51.222.205.175 +51.222.253.10 +51.222.253.12 +51.222.253.13 +51.222.253.14 +51.222.253.16 +51.222.253.19 +51.222.253.20 +51.222.253.4 +51.222.253.5 +51.222.253.6 +51.222.253.7 +51.222.253.8 +51.222.253.9 +51.222.8.179 +51.250.73.235 +51.250.92.44 +51.250.95.103 +51.254.229.161 +51.255.142.197 +51.255.55.136 +51.38.112.61 +51.38.12.12 +51.38.12.13 +51.38.12.15 +51.38.154.50 +51.38.191.182 +51.38.231.180 +51.38.34.130 +51.38.44.81 +51.38.48.10 +51.38.52.128 +51.68.136.72 +51.68.199.149 +51.68.202.107 +51.68.226.87 +51.68.90.2 +51.7.93.216 +51.75.133.162 +51.75.133.93 +51.75.163.203 +51.75.170.22 +51.75.194.10 +51.75.202.133 +51.75.203.231 +51.75.74.166 +51.77.194.67 +51.77.195.59 +51.77.245.172 +51.77.245.237 +51.77.43.103 +51.77.58.143 +51.79.146.182 +51.79.146.239 +51.79.65.236 +51.81.153.111 +51.81.153.166 +51.81.153.197 +51.81.153.224 +51.81.153.50 +51.81.33.45 +51.81.81.103 +51.81.83.124 +51.81.84.229 +51.83.27.205 +51.83.45.110 +51.83.71.70 +51.83.99.204 +51.89.164.89 +51.89.206.53 +51.89.39.49 +51.89.7.156 +51.91.14.6 +51.91.141.137 +51.91.151.44 +51.91.157.160 +51.91.249.189 +51.91.78.31 +52.131.82.100 +52.140.17.41 +52.140.61.101 +52.166.186.23 +52.171.230.44 +52.172.168.56 +52.172.30.44 +52.174.144.106 +52.176.51.76 +52.178.155.67 +52.183.128.237 +52.185.227.219 +52.187.9.8 +52.191.168.27 +52.23.233.236 +52.56.143.158 +52.56.171.187 +52.73.169.169 +54.179.251.151 +54.183.195.159 +54.207.78.52 +54.36.101.131 +54.37.121.239 +54.37.131.197 +54.37.138.167 +54.37.19.249 +54.37.196.181 +54.37.203.143 +54.37.204.179 +54.37.228.73 +54.37.72.28 +54.38.55.211 +54.39.99.68 +54.91.131.37 +57.128.169.78 +57.128.41.42 +57.134.18.140 +58.11.55.149 +58.120.16.153 +58.124.200.57 +58.137.208.238 +58.144.251.16 +58.144.251.22 +58.147.182.47 +58.18.81.242 +58.185.131.94 +58.187.180.225 +58.19.213.60 +58.208.108.112 +58.208.188.150 +58.208.200.97 +58.208.208.2 +58.208.49.136 +58.208.49.55 +58.208.54.95 +58.208.84.245 +58.209.109.215 +58.209.146.121 +58.209.196.96 +58.209.205.224 +58.209.21.31 +58.210.102.102 +58.210.45.170 +58.211.23.183 +58.214.108.177 +58.214.6.114 +58.214.8.10 +58.216.180.210 +58.216.56.40 +58.222.106.106 +58.222.7.166 +58.224.19.9 +58.224.242.54 +58.234.64.114 +58.242.104.15 +58.242.86.203 +58.243.104.86 +58.243.151.145 +58.246.138.2 +58.250.36.51 +58.255.217.30 +58.27.95.2 +58.30.229.110 +58.32.242.194 +58.33.109.90 +58.33.168.74 +58.33.8.20 +58.34.176.82 +58.42.185.125 +58.47.63.220 +58.48.37.58 +58.49.112.2 +58.51.141.34 +58.56.200.182 +58.56.207.10 +58.58.168.62 +58.58.250.18 +58.58.70.234 +58.58.83.122 +58.59.16.246 +58.65.211.232 +58.70.25.59 +58.72.165.10 +58.76.180.20 +58.77.13.25 +58.79.145.72 +58.90.119.79 +58.97.197.59 +59.0.241.169 +59.0.39.79 +59.1.178.195 +59.1.186.48 +59.1.226.250 +59.103.236.31 +59.103.236.74 +59.103.236.85 +59.11.128.18 +59.11.138.65 +59.11.76.201 +59.11.76.203 +59.110.162.89 +59.110.221.149 +59.12.195.242 +59.12.57.235 +59.120.118.135 +59.124.166.80 +59.124.225.177 +59.125.131.46 +59.125.213.161 +59.126.116.186 +59.126.120.220 +59.126.130.53 +59.126.132.171 +59.126.156.208 +59.126.158.209 +59.126.159.253 +59.126.162.209 +59.126.193.94 +59.126.208.143 +59.126.211.116 +59.126.221.230 +59.126.224.30 +59.126.49.192 +59.126.55.81 +59.127.10.191 +59.127.119.33 +59.127.120.23 +59.127.126.168 +59.127.134.145 +59.127.14.28 +59.127.169.40 +59.127.184.166 +59.127.205.38 +59.127.21.73 +59.127.22.14 +59.127.24.124 +59.127.41.8 +59.127.56.161 +59.127.57.123 +59.127.72.244 +59.127.74.230 +59.127.94.207 +59.13.166.87 +59.14.41.42 +59.144.164.10 +59.144.165.161 +59.144.166.143 +59.144.167.169 +59.145.138.131 +59.148.170.250 +59.148.20.65 +59.152.60.147 +59.17.192.243 +59.177.104.230 +59.177.180.85 +59.180.160.216 +59.187.202.230 +59.19.144.238 +59.19.54.199 +59.2.125.119 +59.2.2.79 +59.2.248.84 +59.2.33.99 +59.2.52.122 +59.2.88.45 +59.22.42.41 +59.23.199.98 +59.23.20.149 +59.25.71.236 +59.26.120.163 +59.26.163.58 +59.26.216.102 +59.27.247.38 +59.29.145.37 +59.3.76.218 +59.30.12.254 +59.31.43.118 +59.33.80.201 +59.36.166.141 +59.39.183.34 +59.4.194.202 +59.4.234.131 +59.4.55.93 +59.47.112.161 +59.48.42.4 +59.49.131.51 +59.49.43.217 +59.49.77.211 +59.5.9.161 +59.51.71.68 +59.94.33.62 +59.94.37.145 +60.108.212.174 +60.117.166.88 +60.13.195.22 +60.14.55.132 +60.16.8.2 +60.165.226.142 +60.167.19.30 +60.171.220.86 +60.173.245.179 +60.175.41.10 +60.190.219.126 +60.191.125.35 +60.191.58.202 +60.196.69.234 +60.214.127.246 +60.217.75.69 +60.220.185.149 +60.220.185.22 +60.221.238.187 +60.222.230.70 +60.223.233.250 +60.223.252.57 +60.243.24.110 +60.244.226.39 +60.247.60.68 +60.248.236.223 +60.248.4.53 +60.248.89.69 +60.255.181.170 +60.255.181.197 +60.28.24.244 +60.29.100.218 +60.30.98.194 +60.31.249.131 +60.43.35.39 +60.51.26.105 +60.9.238.33 +61.1.189.226 +61.111.11.240 +61.111.131.76 +61.111.6.246 +61.130.110.54 +61.130.54.42 +61.132.103.126 +61.133.254.162 +61.135.126.42 +61.147.15.65 +61.147.15.67 +61.147.209.31 +61.147.254.211 +61.149.47.18 +61.149.84.26 +61.153.32.34 +61.153.6.114 +61.154.122.122 +61.156.14.73 +61.159.93.133 +61.164.202.218 +61.167.35.130 +61.170.192.110 +61.171.89.48 +61.174.32.82 +61.177.123.59 +61.177.173.45 +61.178.65.2 +61.178.84.137 +61.180.34.120 +61.180.77.124 +61.183.43.155 +61.184.119.61 +61.184.160.34 +61.185.137.26 +61.185.50.166 +61.19.228.102 +61.19.247.160 +61.2.224.84 +61.2.241.214 +61.2.243.254 +61.206.119.108 +61.216.106.87 +61.216.131.31 +61.219.18.151 +61.219.88.69 +61.220.216.219 +61.221.35.29 +61.222.211.114 +61.224.126.16 +61.231.14.41 +61.238.103.181 +61.240.138.34 +61.240.138.52 +61.246.34.173 +61.34.201.215 +61.39.117.33 +61.39.157.140 +61.42.20.175 +61.53.107.39 +61.56.172.170 +61.59.4.18 +61.62.220.31 +61.65.105.121 +61.72.55.130 +61.73.95.192 +61.74.255.62 +61.75.107.16 +61.75.76.30 +61.76.107.44 +61.76.169.138 +61.76.40.95 +61.77.20.245 +61.78.124.158 +61.79.48.10 +61.80.237.204 +61.80.82.159 +61.81.151.64 +61.81.158.200 +61.81.83.63 +61.81.88.105 +61.82.245.60 +61.83.148.111 +61.84.106.83 +61.84.11.124 +61.85.199.241 +62.102.148.152 +62.102.148.154 +62.102.148.162 +62.102.148.164 +62.105.137.113 +62.12.114.235 +62.12.115.22 +62.12.115.242 +62.122.204.247 +62.162.51.58 +62.183.82.70 +62.20.249.236 +62.204.41.80 +62.210.111.16 +62.210.144.176 +62.210.245.181 +62.233.50.217 +62.233.50.249 +62.28.222.221 +62.74.208.58 +62.77.140.118 +62.84.116.195 +62.89.18.12 +62.99.90.19 +63.141.236.162 +63.217.87.99 +63.250.59.8 +63.252.132.12 +63.41.9.206 +63.41.9.207 +63.41.9.210 +63.45.208.250 +63.47.111.1 +63.65.79.134 +64.111.48.2 +64.112.73.22 +64.112.75.42 +64.119.29.152 +64.119.29.156 +64.120.121.215 +64.135.113.136 +64.185.8.245 +64.223.131.135 +64.225.100.35 +64.225.102.223 +64.225.22.135 +64.225.22.216 +64.225.25.59 +64.225.54.150 +64.225.70.42 +64.225.79.193 +64.226.100.28 +64.226.105.84 +64.226.111.31 +64.226.118.9 +64.226.76.4 +64.226.79.71 +64.226.81.69 +64.226.84.20 +64.226.87.205 +64.226.91.17 +64.226.91.41 +64.227.105.4 +64.227.122.198 +64.227.126.12 +64.227.126.250 +64.227.126.83 +64.227.129.137 +64.227.133.42 +64.227.142.1 +64.227.142.101 +64.227.152.23 +64.227.172.167 +64.227.177.54 +64.227.178.234 +64.227.178.98 +64.227.180.226 +64.227.182.117 +64.227.185.119 +64.227.185.138 +64.227.185.201 +64.227.186.131 +64.227.188.166 +64.227.190.115 +64.227.190.23 +64.227.28.246 +64.227.31.127 +64.227.68.118 +64.227.97.195 +64.227.99.233 +64.42.179.43 +64.62.197.100 +64.62.197.101 +64.62.197.105 +64.62.197.108 +64.62.197.110 +64.62.197.111 +64.62.197.114 +64.62.197.116 +64.62.197.118 +64.62.197.119 +64.62.197.121 +64.62.197.123 +64.62.197.124 +64.62.197.125 +64.62.197.126 +64.62.197.127 +64.62.197.129 +64.62.197.131 +64.62.197.134 +64.62.197.136 +64.62.197.14 +64.62.197.140 +64.62.197.153 +64.62.197.155 +64.62.197.161 +64.62.197.166 +64.62.197.170 +64.62.197.171 +64.62.197.175 +64.62.197.179 +64.62.197.18 +64.62.197.180 +64.62.197.182 +64.62.197.184 +64.62.197.19 +64.62.197.190 +64.62.197.192 +64.62.197.199 +64.62.197.2 +64.62.197.202 +64.62.197.204 +64.62.197.205 +64.62.197.209 +64.62.197.210 +64.62.197.212 +64.62.197.216 +64.62.197.22 +64.62.197.231 +64.62.197.239 +64.62.197.26 +64.62.197.27 +64.62.197.28 +64.62.197.30 +64.62.197.32 +64.62.197.33 +64.62.197.38 +64.62.197.41 +64.62.197.45 +64.62.197.47 +64.62.197.49 +64.62.197.5 +64.62.197.51 +64.62.197.58 +64.62.197.60 +64.62.197.63 +64.62.197.65 +64.62.197.68 +64.62.197.69 +64.62.197.70 +64.62.197.71 +64.62.197.73 +64.62.197.75 +64.62.197.8 +64.62.197.97 +64.88.187.91 +65.154.226.168 +65.181.73.155 +65.190.102.226 +65.20.135.187 +65.20.153.188 +65.20.162.105 +65.254.92.240 +65.36.104.84 +65.49.196.227 +65.49.20.100 +65.49.20.101 +65.49.20.104 +65.49.20.105 +65.49.20.106 +65.49.20.107 +65.49.20.108 +65.49.20.109 +65.49.20.110 +65.49.20.115 +65.49.20.116 +65.49.20.117 +65.49.20.118 +65.49.20.120 +65.49.20.124 +65.49.20.66 +65.49.20.67 +65.49.20.68 +65.49.20.69 +65.49.20.71 +65.49.20.72 +65.49.20.73 +65.49.20.74 +65.49.20.75 +65.49.20.76 +65.49.20.77 +65.49.20.78 +65.49.20.79 +65.49.20.80 +65.49.20.81 +65.49.20.82 +65.49.20.83 +65.49.20.85 +65.49.20.86 +65.49.20.88 +65.49.20.89 +65.49.20.90 +65.49.20.92 +65.49.20.93 +65.49.20.95 +65.49.20.98 +65.49.20.99 +65.52.9.242 +65.60.27.251 +65.73.231.122 +65.74.88.35 +66.108.146.160 +66.112.213.197 +66.112.221.64 +66.115.142.176 +66.128.116.26 +66.150.66.212 +66.170.214.142 +66.175.213.4 +66.177.30.53 +66.190.155.9 +66.240.192.138 +66.240.205.34 +66.240.213.71 +66.240.236.109 +66.240.236.119 +66.25.247.72 +66.27.169.186 +66.45.132.78 +66.70.208.241 +66.76.123.15 +66.76.221.49 +67.150.4.161 +67.170.66.15 +67.184.208.171 +67.205.177.222 +67.205.187.133 +67.205.187.255 +67.205.190.191 +67.207.85.118 +67.222.147.67 +67.231.229.142 +67.238.203.91 +67.247.114.115 +67.247.116.18 +67.58.223.254 +68.111.93.31 +68.114.48.249 +68.168.132.152 +68.178.161.31 +68.178.163.67 +68.183.105.14 +68.183.132.72 +68.183.143.1 +68.183.156.109 +68.183.177.69 +68.183.212.10 +68.183.221.62 +68.183.228.192 +68.183.232.27 +68.183.24.108 +68.183.46.135 +68.183.5.40 +68.183.56.198 +68.183.64.144 +68.183.85.50 +68.183.86.247 +68.183.87.50 +68.183.88.165 +68.183.88.186 +68.183.92.87 +68.183.93.52 +68.183.95.193 +68.183.96.33 +68.185.223.63 +68.188.98.239 +68.193.28.185 +68.235.62.219 +68.32.168.231 +68.44.85.64 +68.49.145.19 +68.49.233.165 +68.55.20.130 +68.6.126.154 +68.74.131.125 +68.82.141.145 +69.112.204.55 +69.12.4.38 +69.127.23.120 +69.14.124.215 +69.142.242.189 +69.164.214.243 +69.167.12.30 +69.202.133.67 +69.216.19.140 +69.246.186.17 +69.247.235.241 +69.49.235.162 +69.49.245.229 +69.50.128.171 +69.63.74.122 +69.70.182.178 +69.75.133.122 +69.92.191.19 +70.115.50.120 +70.122.134.191 +70.122.55.76 +70.169.84.74 +70.181.124.215 +70.181.157.100 +70.191.130.82 +70.234.210.74 +70.234.246.106 +70.255.103.76 +70.88.3.29 +71.10.118.1 +71.14.170.170 +71.163.52.89 +71.198.103.37 +71.200.97.148 +71.246.211.21 +71.6.135.131 +71.6.146.186 +71.6.147.254 +71.6.158.166 +71.6.165.200 +71.6.199.23 +71.6.231.8 +71.6.231.80 +71.6.231.83 +71.6.231.86 +71.6.231.87 +71.6.232.20 +71.6.232.22 +71.6.232.23 +71.6.232.24 +71.6.232.25 +71.6.232.26 +71.6.232.27 +71.6.232.28 +71.67.66.225 +71.79.25.100 +71.86.89.235 +71.90.30.53 +72.12.74.241 +72.129.231.118 +72.132.129.231 +72.132.89.90 +72.135.123.125 +72.138.167.50 +72.142.188.43 +72.167.124.187 +72.167.51.34 +72.176.181.35 +72.177.235.155 +72.183.28.26 +72.191.145.80 +72.24.90.135 +72.240.125.133 +72.241.81.99 +72.249.226.244 +72.250.247.35 +72.42.78.228 +72.69.93.12 +73.0.6.24 +73.112.30.5 +73.121.112.239 +73.126.226.41 +73.130.208.189 +73.135.178.34 +73.145.184.160 +73.16.145.209 +73.18.38.38 +73.196.4.195 +73.21.66.78 +73.210.127.161 +73.22.241.43 +73.232.143.31 +73.239.147.152 +73.243.16.62 +73.32.3.198 +73.35.101.206 +73.50.155.68 +73.53.24.25 +73.7.216.77 +73.71.11.104 +73.9.27.26 +74.101.20.62 +74.128.153.121 +74.141.82.94 +74.201.28.5 +74.201.30.143 +74.208.168.188 +74.234.184.146 +74.235.201.205 +74.235.82.122 +74.255.67.50 +74.50.74.234 +74.59.176.20 +74.64.58.42 +74.67.217.77 +74.73.25.246 +74.80.40.80 +74.82.47.11 +74.82.47.12 +74.82.47.13 +74.82.47.14 +74.82.47.17 +74.82.47.21 +74.82.47.28 +74.82.47.31 +74.82.47.36 +74.82.47.37 +74.82.47.40 +74.82.47.44 +74.82.47.45 +74.82.47.47 +74.82.47.48 +74.82.47.49 +74.82.47.5 +74.82.47.55 +74.82.47.8 +74.84.150.2 +74.84.150.62 +74.93.12.74 +74.94.234.151 +75.103.66.27 +75.111.126.28 +75.119.139.203 +75.127.3.245 +75.138.121.16 +75.149.214.93 +75.166.50.146 +75.178.132.132 +75.66.109.151 +75.80.10.175 +75.86.148.172 +75.87.9.229 +76.10.128.88 +76.104.130.42 +76.110.9.18 +76.14.78.133 +76.147.92.197 +76.168.101.172 +76.169.72.211 +76.20.227.12 +76.210.43.1 +76.248.78.228 +76.27.61.16 +77.102.237.113 +77.105.181.210 +77.120.163.173 +77.122.252.53 +77.125.1.250 +77.129.60.116 +77.158.71.118 +77.170.59.124 +77.190.15.61 +77.21.0.58 +77.222.191.187 +77.224.92.128 +77.237.73.73 +77.243.181.54 +77.243.182.131 +77.37.168.42 +77.37.248.144 +77.40.0.17 +77.40.220.2 +77.48.1.134 +77.52.12.151 +77.53.106.24 +77.68.52.248 +77.73.133.3 +77.74.78.44 +77.82.90.234 +77.83.36.43 +77.85.216.134 +77.91.68.129 +77.91.68.60 +77.91.75.11 +77.91.84.45 +77.94.113.222 +78.108.177.50 +78.108.177.52 +78.121.139.63 +78.128.113.102 +78.128.113.250 +78.128.113.78 +78.141.63.18 +78.142.18.220 +78.153.130.155 +78.157.38.66 +78.157.42.59 +78.186.133.164 +78.186.143.48 +78.188.58.201 +78.188.90.156 +78.195.6.108 +78.196.138.44 +78.25.105.127 +78.30.28.126 +78.32.126.206 +78.36.40.38 +78.46.17.42 +78.47.10.207 +78.58.49.11 +78.84.155.250 +78.85.213.47 +78.89.152.10 +78.89.152.189 +78.89.152.190 +78.89.153.49 +78.96.86.176 +79.10.156.154 +79.106.12.211 +79.106.73.114 +79.110.62.245 +79.124.49.78 +79.124.56.102 +79.124.56.190 +79.124.58.158 +79.124.59.130 +79.124.60.202 +79.124.62.130 +79.124.62.62 +79.124.62.78 +79.124.62.82 +79.124.62.86 +79.124.8.3 +79.129.29.237 +79.129.85.43 +79.137.141.164 +79.137.196.4 +79.137.205.225 +79.137.206.100 +79.137.34.148 +79.153.35.69 +79.175.160.120 +79.177.237.12 +79.188.137.250 +79.20.133.12 +79.30.40.128 +79.37.229.46 +79.52.253.30 +79.54.46.243 +79.56.236.216 +79.59.251.230 +79.6.130.251 +79.9.140.145 +79.9.37.49 +8.129.118.129 +8.135.48.81 +8.208.94.190 +8.209.216.177 +8.210.161.5 +8.210.35.35 +8.210.67.251 +8.212.128.101 +8.213.129.130 +8.213.17.210 +8.213.17.63 +8.213.18.207 +8.213.19.224 +8.213.19.235 +8.213.193.237 +8.213.194.210 +8.213.196.195 +8.213.196.201 +8.213.197.220 +8.213.20.127 +8.213.20.248 +8.213.21.28 +8.213.21.86 +8.213.22.219 +8.213.26.35 +8.213.27.181 +8.213.27.233 +8.213.27.47 +8.218.193.85 +8.219.100.242 +8.219.108.182 +8.219.137.112 +8.219.161.137 +8.219.164.201 +8.219.166.145 +8.219.175.111 +8.219.180.124 +8.219.183.140 +8.219.198.1 +8.219.199.104 +8.219.199.122 +8.219.201.138 +8.219.209.112 +8.219.209.218 +8.219.211.151 +8.219.231.58 +8.219.235.45 +8.219.238.163 +8.219.241.105 +8.219.243.203 +8.219.248.192 +8.219.250.100 +8.219.250.11 +8.219.252.205 +8.219.255.247 +8.219.40.72 +8.219.48.246 +8.219.70.237 +8.219.76.192 +8.222.129.101 +8.222.129.219 +8.222.130.232 +8.222.138.4 +8.222.139.60 +8.222.153.122 +8.222.157.82 +8.222.162.72 +8.222.166.28 +8.222.168.157 +8.222.168.16 +8.222.173.87 +8.222.177.226 +8.222.190.119 +8.222.200.208 +8.222.204.75 +8.222.205.118 +8.222.209.206 +8.222.211.110 +8.222.216.254 +8.222.218.39 +8.222.220.107 +8.222.224.48 +8.222.225.42 +8.222.227.202 +8.222.228.119 +8.222.230.151 +8.222.230.242 +8.222.231.12 +8.222.244.108 +8.222.247.127 +8.222.247.46 +8.222.248.201 +8.222.248.47 +8.222.249.210 +8.222.250.117 +8.222.251.6 +8.222.254.198 +8.222.255.233 +8.26.182.100 +80.106.197.221 +80.107.50.128 +80.117.240.240 +80.120.241.118 +80.122.5.206 +80.131.84.100 +80.209.140.213 +80.210.17.225 +80.227.107.250 +80.229.18.62 +80.249.113.225 +80.251.216.10 +80.51.158.122 +80.53.153.185 +80.55.147.125 +80.66.76.51 +80.66.77.235 +80.66.83.110 +80.68.7.179 +80.68.7.50 +80.72.24.105 +80.72.24.28 +80.76.51.210 +80.81.154.250 +80.82.70.228 +80.82.77.139 +80.82.77.33 +80.87.33.100 +80.91.167.80 +80.92.205.73 +80.94.92.241 +80.94.95.18 +80.94.95.203 +80.94.95.205 +80.94.95.240 +80.94.95.242 +80.94.95.249 +81.0.218.249 +81.0.246.17 +81.0.57.187 +81.10.12.82 +81.12.39.110 +81.138.80.166 +81.140.31.213 +81.16.9.232 +81.161.229.135 +81.17.30.221 +81.17.60.153 +81.18.39.54 +81.192.43.166 +81.192.46.45 +81.192.46.48 +81.197.59.214 +81.200.212.13 +81.203.238.20 +81.211.117.182 +81.215.211.76 +81.22.233.170 +81.28.6.62 +81.29.214.123 +81.30.162.18 +81.68.141.174 +81.68.166.244 +81.68.216.48 +81.69.34.211 +81.70.146.68 +81.70.203.89 +81.82.103.78 +81.88.53.6 +81.89.110.244 +82.102.189.43 +82.102.27.171 +82.111.224.128 +82.115.16.151 +82.115.19.57 +82.115.78.21 +82.138.28.34 +82.149.104.214 +82.149.125.220 +82.154.230.131 +82.156.164.168 +82.157.140.184 +82.157.143.209 +82.157.173.128 +82.157.248.247 +82.157.62.140 +82.165.120.190 +82.165.207.44 +82.180.155.46 +82.194.19.180 +82.194.94.58 +82.199.96.194 +82.202.170.49 +82.32.157.177 +82.51.79.22 +82.55.108.231 +82.62.110.252 +82.64.11.95 +82.64.9.81 +82.65.197.203 +82.65.43.136 +82.66.100.193 +82.66.118.168 +82.66.3.241 +82.66.39.159 +82.66.59.170 +83.108.10.135 +83.114.76.247 +83.139.6.141 +83.143.245.51 +83.143.246.30 +83.150.215.90 +83.217.11.1 +83.228.105.85 +83.229.75.105 +83.239.97.132 +83.241.219.45 +83.243.191.11 +83.244.14.97 +83.8.239.199 +84.108.40.27 +84.138.149.199 +84.201.158.231 +84.201.158.237 +84.201.179.102 +84.205.178.135 +84.227.209.232 +84.228.226.13 +84.241.9.194 +84.242.124.74 +84.252.140.133 +84.253.57.206 +84.255.173.151 +84.42.21.138 +84.43.254.214 +84.46.250.130 +84.53.198.69 +84.53.228.192 +84.54.50.196 +84.54.50.197 +84.54.50.199 +84.54.50.200 +84.54.50.201 +84.54.50.72 +84.78.93.70 +84.94.120.125 +85.105.203.44 +85.114.119.22 +85.130.177.229 +85.15.190.226 +85.152.30.138 +85.159.164.28 +85.168.41.94 +85.172.11.236 +85.175.59.38 +85.18.236.229 +85.185.201.10 +85.187.68.20 +85.192.133.13 +85.192.41.225 +85.192.63.134 +85.204.82.127 +85.208.136.203 +85.208.22.197 +85.21.212.120 +85.215.108.46 +85.217.144.14 +85.217.144.145 +85.217.144.35 +85.233.142.6 +85.234.137.154 +85.234.37.158 +85.237.57.253 +85.31.45.197 +85.43.157.106 +85.54.48.97 +85.95.117.176 +85.99.245.238 +86.111.246.187 +86.122.27.213 +86.127.255.249 +86.155.144.173 +86.161.169.159 +86.163.232.28 +86.57.43.195 +86.77.51.230 +87.103.172.81 +87.106.198.168 +87.107.69.6 +87.120.9.80 +87.121.221.41 +87.121.221.49 +87.121.221.52 +87.138.66.173 +87.14.136.67 +87.148.176.201 +87.15.96.3 +87.157.110.68 +87.197.131.169 +87.219.167.20 +87.219.167.80 +87.229.211.28 +87.236.176.108 +87.236.176.11 +87.236.176.114 +87.236.176.130 +87.236.176.139 +87.236.176.140 +87.236.176.147 +87.236.176.148 +87.236.176.154 +87.236.176.197 +87.236.176.22 +87.236.176.234 +87.236.176.29 +87.236.176.4 +87.236.176.45 +87.236.176.52 +87.236.176.61 +87.236.176.78 +87.236.176.9 +87.236.176.97 +87.245.17.229 +87.246.7.229 +87.246.7.230 +87.247.187.111 +87.247.244.225 +87.248.226.146 +87.251.236.115 +87.255.193.50 +87.27.100.38 +87.3.195.200 +87.57.159.163 +87.59.25.90 +87.68.167.112 +87.8.34.56 +87.9.134.31 +87.98.133.252 +87.98.145.247 +87.98.184.223 +87.98.209.3 +88.129.208.43 +88.135.68.72 +88.142.46.185 +88.149.251.60 +88.204.221.66 +88.214.25.16 +88.214.26.53 +88.247.228.149 +88.250.118.219 +88.28.223.232 +88.35.116.77 +88.59.246.115 +88.7.56.36 +88.80.31.115 +88.87.89.202 +88.88.123.168 +89.109.36.61 +89.111.132.80 +89.116.179.137 +89.116.230.170 +89.116.230.31 +89.117.89.212 +89.117.89.242 +89.121.228.38 +89.123.219.19 +89.14.80.200 +89.151.182.109 +89.154.49.136 +89.160.14.195 +89.163.144.122 +89.179.126.155 +89.187.162.185 +89.187.163.196 +89.187.163.206 +89.189.188.33 +89.189.190.76 +89.19.105.134 +89.190.203.54 +89.201.167.100 +89.208.104.119 +89.208.104.97 +89.208.93.103 +89.215.210.114 +89.218.185.66 +89.218.80.57 +89.22.184.225 +89.22.185.202 +89.228.192.51 +89.236.112.100 +89.236.239.25 +89.238.150.43 +89.248.163.141 +89.248.163.16 +89.248.163.162 +89.248.163.189 +89.248.163.19 +89.248.163.200 +89.248.163.204 +89.248.163.219 +89.248.163.33 +89.248.163.34 +89.248.163.59 +89.248.163.64 +89.248.165.100 +89.248.165.104 +89.248.165.109 +89.248.165.118 +89.248.165.132 +89.248.165.134 +89.248.165.14 +89.248.165.154 +89.248.165.193 +89.248.165.194 +89.248.165.214 +89.248.165.242 +89.248.165.253 +89.248.165.45 +89.248.165.51 +89.248.165.59 +89.248.165.85 +89.248.167.131 +89.248.168.42 +89.248.171.179 +89.248.172.16 +89.250.148.154 +89.252.141.18 +89.31.14.169 +89.36.20.218 +89.41.67.84 +89.44.137.55 +89.46.186.102 +89.46.219.239 +89.46.223.140 +89.57.34.80 +89.97.218.142 +90.102.83.18 +90.104.203.240 +90.142.46.200 +90.151.171.106 +90.151.171.108 +90.161.217.228 +90.161.45.201 +90.168.201.25 +90.77.251.249 +91.1.246.215 +91.106.78.2 +91.107.189.185 +91.107.253.34 +91.116.40.78 +91.121.171.183 +91.121.232.246 +91.130.49.7 +91.134.248.192 +91.134.248.253 +91.144.129.30 +91.144.143.87 +91.144.20.198 +91.182.182.109 +91.185.40.251 +91.185.84.43 +91.191.209.198 +91.193.129.151 +91.193.43.11 +91.195.62.2 +91.202.27.93 +91.203.11.202 +91.204.154.197 +91.205.128.170 +91.206.27.26 +91.207.175.154 +91.210.107.28 +91.213.50.9 +91.213.99.15 +91.215.78.240 +91.218.114.197 +91.223.169.83 +91.223.169.88 +91.224.92.22 +91.225.163.114 +91.226.165.10 +91.236.168.249 +91.239.97.29 +91.240.112.237 +91.240.118.221 +91.240.118.224 +91.240.118.75 +91.240.118.77 +91.244.113.188 +91.244.45.123 +91.66.4.163 +91.67.193.38 +91.73.194.178 +91.74.98.114 +91.75.96.70 +91.93.63.187 +91.98.29.102 +92.100.159.115 +92.118.39.108 +92.118.39.109 +92.118.39.35 +92.119.231.13 +92.15.182.166 +92.19.225.242 +92.204.135.185 +92.204.139.118 +92.204.139.216 +92.204.174.142 +92.204.184.3 +92.205.160.111 +92.205.165.95 +92.205.18.100 +92.205.19.152 +92.205.24.196 +92.205.40.41 +92.206.96.77 +92.222.10.177 +92.222.108.86 +92.222.172.26 +92.222.50.21 +92.241.106.38 +92.241.82.242 +92.255.165.123 +92.255.199.164 +92.48.77.192 +92.50.179.236 +92.50.249.166 +92.60.40.252 +92.81.17.200 +92.81.222.217 +93.108.242.140 +93.114.185.76 +93.120.240.202 +93.146.134.127 +93.148.161.112 +93.174.164.44 +93.174.95.106 +93.179.113.144 +93.179.198.59 +93.183.131.53 +93.185.73.178 +93.187.181.212 +93.188.164.15 +93.188.167.39 +93.189.11.246 +93.190.106.139 +93.207.103.144 +93.240.46.99 +93.240.81.193 +93.33.198.173 +93.40.3.204 +93.51.114.43 +93.51.73.137 +93.84.109.253 +93.87.21.62 +93.90.41.12 +94.102.49.190 +94.102.49.193 +94.102.50.103 +94.102.61.2 +94.102.61.20 +94.102.61.21 +94.102.61.22 +94.102.61.23 +94.102.61.24 +94.102.61.25 +94.102.61.26 +94.102.61.27 +94.102.61.28 +94.102.61.29 +94.102.61.3 +94.102.61.30 +94.102.61.31 +94.102.61.32 +94.102.61.33 +94.102.61.34 +94.102.61.35 +94.102.61.36 +94.102.61.37 +94.102.61.38 +94.102.61.39 +94.102.61.4 +94.102.61.40 +94.102.61.41 +94.102.61.42 +94.102.61.43 +94.102.61.44 +94.102.61.45 +94.102.61.46 +94.102.61.47 +94.102.61.48 +94.102.61.49 +94.102.61.5 +94.102.61.53 +94.102.61.54 +94.102.61.6 +94.127.212.160 +94.131.101.130 +94.131.109.164 +94.131.115.72 +94.131.115.87 +94.131.115.88 +94.131.118.50 +94.131.9.24 +94.132.233.83 +94.153.212.68 +94.156.11.81 +94.156.5.206 +94.177.97.198 +94.179.133.22 +94.180.247.20 +94.183.47.205 +94.200.61.42 +94.200.80.230 +94.201.105.194 +94.206.199.172 +94.229.79.10 +94.23.162.147 +94.23.165.51 +94.23.251.90 +94.254.0.234 +94.28.246.202 +94.61.217.252 +94.70.166.88 +94.76.228.60 +95.0.15.234 +95.0.32.15 +95.106.175.74 +95.111.237.5 +95.129.58.148 +95.130.175.56 +95.142.90.214 +95.143.190.69 +95.143.218.236 +95.156.96.46 +95.164.10.55 +95.164.11.187 +95.164.86.71 +95.165.24.123 +95.167.46.30 +95.180.102.119 +95.181.43.122 +95.182.121.232 +95.182.121.53 +95.214.26.15 +95.214.27.136 +95.214.27.139 +95.214.27.248 +95.214.27.42 +95.214.27.53 +95.214.52.142 +95.214.53.134 +95.214.55.85 +95.217.214.125 +95.226.250.126 +95.232.138.184 +95.237.50.250 +95.243.13.88 +95.255.112.2 +95.255.47.183 +95.38.15.2 +95.42.185.92 +95.71.126.225 +95.71.71.227 +95.81.82.12 +95.81.94.43 +95.84.184.71 +95.84.66.169 +95.85.124.33 +95.85.125.107 +95.9.32.147 +95.9.93.130 +95.9.93.202 +95.90.12.128 +96.1.64.194 +96.62.164.82 +96.64.67.41 +96.78.175.39 +96.78.175.42 +96.85.104.2 +96.85.110.193 +96.88.140.153 +96.91.198.250 +96.93.196.89 +97.105.69.132 +97.107.133.213 +97.107.141.150 +97.64.22.63 +97.68.57.241 +97.74.82.234 +97.74.83.185 +97.74.86.12 +97.74.91.90 +97.74.93.236 +97.74.93.57 +97.89.112.49 +97.96.238.12 +98.109.124.160 +98.110.23.77 +98.142.133.9 +98.142.141.184 +98.144.130.168 +98.155.238.70 +98.159.100.116 +98.194.228.88 +98.196.19.166 +98.199.225.149 +98.207.97.53 +98.220.218.194 +98.235.132.232 +98.30.124.194 +98.40.101.10 +98.49.151.220 +98.97.178.117 +99.121.217.125 +99.165.10.221 +99.249.29.5 +99.254.193.144 +99.35.132.67 +99.49.100.219 diff --git a/plugins/openresty/waf/rules/ipWhite.json b/plugins/openresty/waf/rules/ipWhite.json new file mode 100644 index 000000000..fa061a724 --- /dev/null +++ b/plugins/openresty/waf/rules/ipWhite.json @@ -0,0 +1,9 @@ +{ + "rules": [ + { + "state": "on", + "type": "ipv4", + "ipv4": "123" + } + ] +} \ No newline at end of file diff --git a/plugins/openresty/waf/rules/methodWhite.json b/plugins/openresty/waf/rules/methodWhite.json new file mode 100644 index 000000000..0c979b7c6 --- /dev/null +++ b/plugins/openresty/waf/rules/methodWhite.json @@ -0,0 +1,88 @@ +{ + "rules": [ + { + "state": "on", + "rule": "GET" + }, + { + "state": "on", + "rule": "POST" + }, + { + "state": "on", + "rule": "PUT" + }, + { + "state": "on", + "rule": "DELETE" + }, + { + "state": "on", + "rule": "PATCH" + }, + { + "state": "on", + "rule": "HEAD" + }, + { + "state": "on", + "rule": "OPTIONS" + }, + { + "state": "on", + "rule": "TRACE" + }, + { + "state": "on", + "rule": "CONNECT" + }, + { + "state": "on", + "rule": "PROPFIND" + }, + { + "state": "on", + "rule": "PROPPATCH" + }, + { + "state": "on", + "rule": "MKCOL" + }, + { + "state": "on", + "rule": "COPY" + }, + { + "state": "on", + "rule": "MOVE" + }, + { + "state": "on", + "rule": "LOCK" + }, + { + "state": "on", + "rule": "UNLOCK" + }, + { + "state": "on", + "rule": "LINK" + }, + { + "state": "on", + "rule": "UNLINK" + }, + { + "state": "on", + "rule": "WRAPPED" + }, + { + "state": "on", + "rule": "PROPFIND" + }, + { + "state": "on", + "rule": "SRARCH" + } + ] +} diff --git a/plugins/openresty/waf/rules/post.json b/plugins/openresty/waf/rules/post.json new file mode 100644 index 000000000..d15363f12 --- /dev/null +++ b/plugins/openresty/waf/rules/post.json @@ -0,0 +1,23 @@ +{ + "rules":[ + {"state":"on","action":"deny","rule":"select.+(from|limit)"}, + {"state":"on","action":"deny","rule":"(?:(union(.*?)select))"}, + {"state":"on","action":"deny","rule":"having|rongjitest"}, + {"state":"on","action":"deny","rule":"sleep\\((\\s*)(\\d*)(\\s*)\\)"}, + {"state":"on","action":"deny","rule":"benchmark\\((.*)\\,(.*)\\)"}, + {"state":"on","action":"deny","rule":"base64_decode\\("}, + {"state":"on","action":"deny","rule":"(?:from\\W+information_schema\\W)"}, + {"state":"on","action":"deny","rule":"(?:(?:current_)user|database|schema|connection_id)\\s*\\("}, + {"state":"on","action":"deny","rule":"(?:etc\\/\\W*passwd)"}, + {"state":"on","action":"deny","rule":"into(\\s+)+(?:dump|out)file\\s*"}, + {"state":"on","action":"deny","rule":"group\\s+by.+\\("}, + {"state":"on","action":"deny","rule":"xwork.MethodAccessor"}, + {"state":"on","action":"deny","rule":"(?:define|eval|file_get_contents|include|require|require_once|shell_exec|phpinfo|system|passthru|preg_\\w+|execute|echo|print|print_r|var_dump|(fp)open|alert|showmodaldialog)\\("}, + {"state":"on","action":"deny","rule":"xwork\\.MethodAccessor"}, + {"state":"on","action":"deny","rule":"(gopher|doc|php|glob|file|phar|zlib|ftp|ldap|dict|ogg|data)\\:\\/"}, + {"state":"on","action":"deny","rule":"java\\.lang"}, + {"state":"on","action":"deny","rule":"\\$_(GET|post|cookie|files|session|env|phplib|GLOBALS|SERVER)\\["}, + {"state":"on","action":"deny","rule":"\\<(iframe|script|body|img|layer|div|meta|style|base|object|input)"}, + {"state":"on","action":"deny","rule":"(onmouseover|onerror|onload)\\="} + ] +} \ No newline at end of file diff --git a/plugins/openresty/waf/rules/uaBlack.json b/plugins/openresty/waf/rules/uaBlack.json new file mode 100644 index 000000000..10fe2dcf0 --- /dev/null +++ b/plugins/openresty/waf/rules/uaBlack.json @@ -0,0 +1,5 @@ +{ + "rules": [ + + ] +} \ No newline at end of file diff --git a/plugins/openresty/waf/rules/uaWhite.json b/plugins/openresty/waf/rules/uaWhite.json new file mode 100644 index 000000000..00a7fe7c0 --- /dev/null +++ b/plugins/openresty/waf/rules/uaWhite.json @@ -0,0 +1,8 @@ +{ + "rules": [ + { + "state": "on", + "rule": "PostmanRuntime/7.36.1" + } + ] +} diff --git a/plugins/openresty/waf/rules/urlBlack.json b/plugins/openresty/waf/rules/urlBlack.json new file mode 100644 index 000000000..1f61a279b --- /dev/null +++ b/plugins/openresty/waf/rules/urlBlack.json @@ -0,0 +1,44 @@ +{ + "rules": [ + { + "state": "on", + "rule": "\\.(svn|htaccess|bash_history)" + }, + { + "state": "on", + "rule": "\\.(bak|inc|old|mdb|sql|backup|java|class)$" + }, + { + "state": "on", + "rule": "(vhost|bbs|host|wwwroot|www|site|root|hytop|flashfxp).*\\.rar" + }, + { + "state": "on", + "rule": "(phpmyadmin|jmx-console|jmxinvokerservlet)" + }, + { + "state": "on", + "rule": "(?:phpMyAdmin2|phpMyAdmin|phpmyadmin|dbadmin|pma|myadmin|admin|mysql)/scripts/setup%.php" + }, + { + "state": "on", + "rule": "java\\.lang" + }, + { + "state": "on", + "rule": "/(attachments|upimg|images|css|uploadfiles|html|uploads|templets|static|template|data|inc|forumdata|upload|includes|cache|avatar)/(\\\\w+).(php|jsp)" + }, + { + "state": "on", + "rule": "wp-includes/wlwmanifest.xml" + }, + { + "state": "on", + "rule": "die(@md5(HelloThinkCMF))" + }, + { + "state": "on", + "rule": "/boaform/admin/formLogin" + } + ] +} \ No newline at end of file diff --git a/plugins/openresty/waf/rules/urlWhite.json b/plugins/openresty/waf/rules/urlWhite.json new file mode 100644 index 000000000..2b881d47d --- /dev/null +++ b/plugins/openresty/waf/rules/urlWhite.json @@ -0,0 +1,14 @@ +{ + "rules": [ + { + "state": "on", + "action": "allow", + "rule": "/console/posts/editor" + }, + { + "state": "on", + "action": "allow", + "rule": "/apis/api.console.halo.run/v1alpha1/posts" + } + ] +} \ No newline at end of file diff --git a/plugins/openresty/waf/test.lua b/plugins/openresty/waf/test.lua new file mode 100644 index 000000000..3318b9b17 --- /dev/null +++ b/plugins/openresty/waf/test.lua @@ -0,0 +1,33 @@ +function ip_to_int(ip) + local ip_int = 0 + for i, octet in ipairs({ ip:match("(%d+)%.(%d+)%.(%d+)%.(%d+)") }) do + ip_int = ip_int + tonumber(octet) * 256 ^ (4 - i) + end + return ip_int +end + +------ 示例 +local ip_address = "222.249.139.98" +local ip_number = ip_to_int(ip_address) +print(ip_number) + +--local geoip = require "lib.resty.maxminddb" +--local cjson = require("cjson") +-- +--geoip.init("/Users/wangzhengkun/Downloads/blackIP.mmdb") +-- +--local geo = geoip.lookup("165.154.132.251") +-- +--print(cjson.encode(geo)) + +--local fileUtils = require "lib.file" +--local read_file2string = fileUtils.read_file2string +-- +--local slideHtml = read_file2string("./html/" .. "slide.html") +-- +--print(string.format(slideHtml, "1", "2")) + + +--local today = os.date("%Y-%m-%d") +--print(today) + diff --git a/plugins/openresty/waf/waf.json b/plugins/openresty/waf/waf.json new file mode 100644 index 000000000..ab7668f0c --- /dev/null +++ b/plugins/openresty/waf/waf.json @@ -0,0 +1,4 @@ +{ + "name": "1Panel WAF", + "version": "1.0.0" +} \ No newline at end of file diff --git a/plugins/openresty/waf/waf.lua b/plugins/openresty/waf/waf.lua new file mode 100644 index 000000000..6cc86e500 --- /dev/null +++ b/plugins/openresty/waf/waf.lua @@ -0,0 +1,163 @@ +local geoip = require "geoip" +local lib = require "lib" +local fileUtils = require "file" +local config = require "config" +local cc = require "cc" +local utils = require "utils" +local cjson = require "cjson" + +local ipairs = ipairs +local sub_str = string.sub +local find_str = string.find +local split_str = utils.split +local encode = cjson.encode +local read_file2table = fileUtils.read_file2table +local tonumber = tonumber +local date = os.date +local format_str = string.format + +local function get_website_key() + local s_name = ngx.var.server_name + local website_key = ngx.shared.waf:get(s_name) + if website_key then + return website_key + end + local websites = read_file2table(config.config_dir .. '/websites.json') + if not websites then + return s_name + end + for _, v in ipairs(websites) + do + for _, domain in ipairs(v['domains']) + do + if s_name == domain then + ngx.shared.waf:set(s_name, v['key'], 3600) + return v['key'] + end + end + end + if s_name == '_' then + s_name = "UNKNOWN" + end + return s_name +end + +local function init() + local ip = utils.get_real_ip() + ngx.ctx.ip = ip + local ua = utils.get_header("user-agent") + if not ua then + ua = "" + end + ngx.ctx.ua = ua + geoip.init() + + ngx.ctx.geoip = geoip.lookup(ip) + + local msg = "访问 IP " .. ip + if ngx.ctx.geoip.country then + msg = msg .. " 国家 " .. cjson.encode(ngx.ctx.geoip.country) + end + if ngx.ctx.geoip.province then + msg = msg .. " 省份 " .. cjson.encode(ngx.ctx.geoip.province) + end + ngx.log(ngx.ERR, msg) + + ngx.ctx.website_key = get_website_key() + ngx.ctx.method = ngx.req.get_method() + ngx.ctx.content_type = utils.get_header("content-type") + if ngx.ctx.content_type then + ngx.ctx.content_length = tonumber(utils.get_header("content-length")) + end + ngx.ctx.today = date("%Y-%m-%d") +end + +local function return_js(js_type) + ngx.header.content_type = "text/html;charset=utf8" + ngx.header.Cache_Control = "no-cache" + local host = ngx.var.scheme .. "://" .. ngx.var.host + local set_access_url = host .. "/set_access_token" + local secret = config.get_secret() + local key = ngx.md5(ngx.ctx.ip .. ngx.var.server_name .. ngx.ctx.website_key + .. ngx.ctx.ua .. ngx.ctx.today .. secret) + local value = ngx.md5(ngx.time() .. ngx.ctx.ip) + local js = config.get_html_res(js_type) + ngx.say(format_str(js, set_access_url, key, value)) + ngx.status = 200 + ngx.exit(200) +end + +local function return_json(data) + ngx.header.content_type = "application/json;" + ngx.header.Cache_Control = "no-cache" + ngx.status = 200 + ngx.say(data) + ngx.exit(200) +end + +local function waf_api() + local uri = ngx.var.uri + local prefix = sub_str(uri, 1, 15) + if find_str(prefix, "/set_access_token") then + local kvs = split_str(uri, "-") + if kvs[2] and kvs[3] then + cc.set_access_token(kvs[2], kvs[3]) + else + ngx.exit(444) + end + end + if uri == "/slide_check_" .. ngx.md5(ngx.ctx.ip) .. ".js" then + return_js("slide_js") + end + + if uri == "/5s_check_" .. ngx.md5(ngx.ctx.ip) .. ".js" then + return_js("five_second_js") + end + + if ngx.var.remote_addr ~= '127.0.0.1' then + return false + end + if uri == '/reload_waf_config' then + config.load_config_file() + ngx.exit(200) + end + if uri == '/get_black_ip' then + --TODO 从 redis 获取黑名单 + local data = ngx.shared.waf_black_ip:get_keys(0) + return_json(encode(data)) + end +end + +if config.is_waf_on() then + init() + waf_api() + + if lib.is_white_ip() then + return true + end + lib.default_ip_black() + lib.black_ip() + + if lib.is_white_ua() then + return true + end + lib.default_ua_black() + lib.black_ua() + + lib.cc_url() + if lib.is_white_url() then + return true + end + lib.black_url() + + lib.allow_location_check() + lib.acl() + lib.bot_check() + lib.method_check() + lib.cc() + lib.args_check() + lib.cookie_check() + lib.post_check() + lib.header_check() + +end \ No newline at end of file