diff --git a/luci-app-openclash/Makefile b/luci-app-openclash/Makefile index b8e42e2f7..1dc7bc39b 100644 --- a/luci-app-openclash/Makefile +++ b/luci-app-openclash/Makefile @@ -1,7 +1,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-openclash -PKG_VERSION:=0.46.064 +PKG_VERSION:=0.46.075 PKG_MAINTAINER:=vernesong PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) @@ -42,8 +42,8 @@ define Package/$(PKG_NAME) SUBMENU:=3. Applications TITLE:=LuCI support for clash PKGARCH:=all - DEPENDS:=+dnsmasq-full +coreutils +coreutils-nohup +bash +curl +ca-certificates +ip-full \ - +libcap +libcap-bin +ruby +ruby-yaml +kmod-tun +unzip + DEPENDS:=+dnsmasq-full +bash +curl +ca-bundle +ip-full \ + +ruby +ruby-yaml +kmod-tun +unzip MAINTAINER:=vernesong endef @@ -122,9 +122,9 @@ endef define Package/$(PKG_NAME)/postrm #!/bin/sh - DEFAULT_DNSMASQ_CFGID="$$(uci -q show "dhcp.@dnsmasq[0]" | awk 'NR==1 {split($0, conf, /[.=]/); print conf[2]}')" + DEFAULT_DNSMASQ_CFGID="$$(uci -q show "dhcp.@dnsmasq[0]" | awk 'NR==1 {split($0, conf, /[.=]/); print conf[2]}' 2>/dev/null)" if [ -f "/tmp/etc/dnsmasq.conf.$DEFAULT_DNSMASQ_CFGID" ]; then - DNSMASQ_CONF_DIR="$$(awk -F '=' '/^conf-dir=/ {print $2}' "/tmp/etc/dnsmasq.conf.$DEFAULT_DNSMASQ_CFGID")" + DNSMASQ_CONF_DIR="$$(awk -F '=' '/^conf-dir=/ {print $2}' "/tmp/etc/dnsmasq.conf.$DEFAULT_DNSMASQ_CFGID" 2>/dev/null)" else DNSMASQ_CONF_DIR="/tmp/dnsmasq.d" fi diff --git a/luci-app-openclash/luasrc/controller/openclash.lua b/luci-app-openclash/luasrc/controller/openclash.lua index 533ce1721..09ef1b76c 100644 --- a/luci-app-openclash/luasrc/controller/openclash.lua +++ b/luci-app-openclash/luasrc/controller/openclash.lua @@ -31,6 +31,7 @@ function index() entry({"admin", "services", "openclash", "opupdate"},call("action_opupdate")) entry({"admin", "services", "openclash", "coreupdate"},call("action_coreupdate")) entry({"admin", "services", "openclash", "flush_fakeip_cache"}, call("action_flush_fakeip_cache")) + entry({"admin", "services", "openclash", "update_config"}, call("action_update_config")) entry({"admin", "services", "openclash", "download_rule"}, call("action_download_rule")) entry({"admin", "services", "openclash", "restore"}, call("action_restore_config")) entry({"admin", "services", "openclash", "backup"}, call("action_backup")) @@ -252,7 +253,7 @@ local function opcv() if fs.access("/bin/opkg") then return luci.sys.exec("rm -f /var/lock/opkg.lock && opkg status luci-app-openclash 2>/dev/null |grep 'Version' |awk -F 'Version: ' '{print \"v\"$2}'") elseif fs.access("/usr/bin/apk") then - return "v" .. luci.sys.exec("apk list luci-app-openclash 2>/dev/null |grep 'installed' | grep -oE '\\d+(\\.\\d+)*' | head -1") + return "v" .. luci.sys.exec("apk list luci-app-openclash 2>/dev/null|grep 'installed' | grep -oE '[0-9]+(\\.[0-9]+)*' | head -1") end end end @@ -347,14 +348,19 @@ function action_flush_fakeip_cache() local dase = dase() or "" local cn_port = cn_port() if not daip or not cn_port then return end - state = luci.sys.exec(string.format('curl -sL -m 3 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -XPOST http://"%s":"%s"/cache/fakeip/flush', dase, daip, cn_port)) - end - luci.http.prepare_content("application/json") + state = luci.sys.exec(string.format('curl -sL -m 3 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -XPOST http://"%s":"%s"/cache/fakeip/flush', dase, daip, cn_port)) + end + luci.http.prepare_content("application/json") luci.http.write_json({ flush_status = state; }) end +function action_update_config() + local filename = luci.http.formvalue("filename") or "config" + luci.sys.exec(string.format("/usr/share/openclash/openclash.sh '%s' >/dev/null 2>&1 &", filename)) +end + function action_restore_config() uci:set("openclash", "config", "enable", "0") uci:commit("openclash") @@ -364,6 +370,8 @@ function action_restore_config() luci.sys.call("cp /usr/share/openclash/backup/openclash_force_sniffing* /etc/openclash/custom/ >/dev/null 2>&1 &") luci.sys.call("cp /usr/share/openclash/backup/openclash_sniffing* /etc/openclash/custom/ >/dev/null 2>&1 &") luci.sys.call("cp /usr/share/openclash/backup/yml_change.sh /usr/share/openclash/yml_change.sh >/dev/null 2>&1 &") + luci.sys.call("cp /usr/share/openclash/backup/china_ip_route.ipset /etc/openclash/china_ip_route.ipset >/dev/null 2>&1 &") + luci.sys.call("cp /usr/share/openclash/backup/china_ip6_route.ipset /etc/openclash/china_ip6_route.ipset >/dev/null 2>&1 &") luci.sys.call("rm -rf /etc/openclash/history/* >/dev/null 2>&1 &") end diff --git a/luci-app-openclash/luasrc/model/cbi/openclash/client.lua b/luci-app-openclash/luasrc/model/cbi/openclash/client.lua index 76ff70a3c..a5ef8caa9 100644 --- a/luci-app-openclash/luasrc/model/cbi/openclash/client.lua +++ b/luci-app-openclash/luasrc/model/cbi/openclash/client.lua @@ -79,11 +79,11 @@ if a then btnis.template="openclash/other_button" btnis.render=function(o,t,a) if not e[t] then return false end - if IsYamlFile(e[t].name) or IsYmlFile(e[t].name) then - a.display="" - else - a.display="none" - end + if IsYamlFile(e[t].name) or IsYmlFile(e[t].name) then + a.display="" + else + a.display="none" + end o.inputstyle="apply" Button.render(o,t,a) end @@ -95,6 +95,20 @@ if a then SYS.call("/etc/init.d/openclash restart >/dev/null 2>&1 &") HTTP.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "client")) end + + up=tb:option(DummyValue, "name", translate("Update")) + up.template = "openclash/update_config" + up.render = function(o,t,a) + local display = "none" + uci:foreach("openclash", "config_subscribe", + function(s) + if s.name == fs.filename(e[t].name) then + display = "" + end + end) + o.display = display + DummyValue.render(o,t,a) + end end if not a then @@ -152,6 +166,7 @@ o.inputstyle = "reset" o.write = function() uci:set("openclash", "config", "enable", 0) uci:commit("openclash") + SYS.call("ps | grep openclash | grep -v grep | awk '{print $1}' | xargs -r kill -9 >/dev/null 2>&1") SYS.call("/etc/init.d/openclash stop >/dev/null 2>&1 &") end diff --git a/luci-app-openclash/luasrc/model/cbi/openclash/config-overwrite.lua b/luci-app-openclash/luasrc/model/cbi/openclash/config-overwrite.lua index 4bbf0a71e..956ff7e89 100644 --- a/luci-app-openclash/luasrc/model/cbi/openclash/config-overwrite.lua +++ b/luci-app-openclash/luasrc/model/cbi/openclash/config-overwrite.lua @@ -280,7 +280,7 @@ o.description = font_red..bold_on..translate("Change The Delay Calculation Metho o.default = "0" o = s:taboption("meta", ListValue, "find_process_mode", translate("Enable Process Rule")) -o.description = translate("Whether to Enable Process Rules, If You Are Not Sure, Please Choose off Which Useful in Router Environment") +o.description = translate("Whether to Enable Process Rules, Only Works on Routerself, If You Are Not Sure, Please Choose off Which Useful in Router Environment, Depend on kmod-inet-diag") o:value("0", translate("Disable")) o:value("off", translate("OFF ")) o:value("always", translate("Always ")) diff --git a/luci-app-openclash/luasrc/model/cbi/openclash/config-subscribe-edit.lua b/luci-app-openclash/luasrc/model/cbi/openclash/config-subscribe-edit.lua index 8f2488e02..449155ac9 100644 --- a/luci-app-openclash/luasrc/model/cbi/openclash/config-subscribe-edit.lua +++ b/luci-app-openclash/luasrc/model/cbi/openclash/config-subscribe-edit.lua @@ -180,7 +180,7 @@ o:depends("sub_convert", "1") ---- custom params o = s:option(DynamicList, "custom_params", translate("Custom Params")) -o.description = font_red..bold_on..translate("eg: \"rename=\\s+([2-9])[xX]@ (HIGH:$1)\"")..bold_off..font_off +o.description = font_red..bold_on..translate("eg: \"rename=match@replace\" , \"rename=\\s+([2-9])[xX]@ (HIGH:$1)\"")..bold_off..font_off o.rmempty = false o:depends("sub_convert", "1") diff --git a/luci-app-openclash/luasrc/model/cbi/openclash/config-subscribe.lua b/luci-app-openclash/luasrc/model/cbi/openclash/config-subscribe.lua index 83ec183e1..2e65794dd 100644 --- a/luci-app-openclash/luasrc/model/cbi/openclash/config-subscribe.lua +++ b/luci-app-openclash/luasrc/model/cbi/openclash/config-subscribe.lua @@ -111,6 +111,10 @@ function o.cfgvalue(...) end end +---- update +o = s:option(DummyValue, "name", translate("Update")) +o.template = "openclash/update_config" + local t = { {Commit, Apply} } diff --git a/luci-app-openclash/luasrc/model/cbi/openclash/config.lua b/luci-app-openclash/luasrc/model/cbi/openclash/config.lua index 7bd29227a..925ce9665 100644 --- a/luci-app-openclash/luasrc/model/cbi/openclash/config.lua +++ b/luci-app-openclash/luasrc/model/cbi/openclash/config.lua @@ -259,7 +259,7 @@ btnrn.template="openclash/input_rename" btnrn.rawhtml = true btnrn.render=function(c,t,a) c.value = e[t].name -Button.render(c,t,a) +DummyValue.render(c,t,a) end btndl = tb:option(Button,"download",translate("Download Config")) diff --git a/luci-app-openclash/luasrc/model/cbi/openclash/groups-config.lua b/luci-app-openclash/luasrc/model/cbi/openclash/groups-config.lua index 5c5d3073d..a44ef1b74 100644 --- a/luci-app-openclash/luasrc/model/cbi/openclash/groups-config.lua +++ b/luci-app-openclash/luasrc/model/cbi/openclash/groups-config.lua @@ -100,16 +100,6 @@ o = s:option(Value, "policy_filter", translate("Provider Filter")) o.rmempty = true o.placeholder = "bgp|sg" --- [[ interface-name ]]-- -o = s:option(Value, "interface_name", translate("interface-name")) -o.rmempty = true -o.placeholder = translate("eth0") - --- [[ routing-mark ]]-- -o = s:option(Value, "routing_mark", translate("routing-mark")) -o.rmempty = true -o.placeholder = translate("2333") - o = s:option(DynamicList, "other_group", translate("Other Group (Support Regex)")) o.description = font_red..bold_on..translate("The Added Proxy Groups Must Exist Except 'DIRECT' & 'REJECT'")..bold_off..font_off o:value("all", translate("All Groups")) diff --git a/luci-app-openclash/luasrc/model/cbi/openclash/proxy-provider-config.lua b/luci-app-openclash/luasrc/model/cbi/openclash/proxy-provider-config.lua index 502f269f1..943aef5e0 100644 --- a/luci-app-openclash/luasrc/model/cbi/openclash/proxy-provider-config.lua +++ b/luci-app-openclash/luasrc/model/cbi/openclash/proxy-provider-config.lua @@ -59,6 +59,7 @@ o.rmempty = true o.description = translate("Choose The Provider Type") o:value("http") o:value("file") +o:value("inline") o = s:option(Value, "name", translate("Provider Name")) o.rmempty = false @@ -134,7 +135,16 @@ function o.cfgvalue(self, section) "# proxy-name:\n".. "# - pattern: \"IPLC-(.*?)倍\"\n".. "# target: \"iplc x $1\"\n".. - "# exclude-type: \"ss|http\"" + "# exclude-type: \"ss|http\"\n".. + "\n".. + "# inline Example:\n".. + "# payload:\n".. + "# - name: \"ss1\"\n".. + "# type: ss\n".. + "# server: server\n".. + "# port: 443\n".. + "# cipher: chacha20-ietf-poly1305\n".. + "# password: \"password\"" else return Value.cfgvalue(self, section) end diff --git a/luci-app-openclash/luasrc/model/cbi/openclash/rule-providers-config.lua b/luci-app-openclash/luasrc/model/cbi/openclash/rule-providers-config.lua index e8ccb7026..998147fde 100644 --- a/luci-app-openclash/luasrc/model/cbi/openclash/rule-providers-config.lua +++ b/luci-app-openclash/luasrc/model/cbi/openclash/rule-providers-config.lua @@ -57,22 +57,25 @@ o.default = "Rule-provider - "..sid o = s:option(ListValue, "type", translate("Rule Providers Type")) o.rmempty = true o.description = translate("Choose The Rule Providers Type") -o:value("http", translate("http")) -o:value("file", translate("file")) +o:value("http") +o:value("file") +o:value("inline") + +o = s:option(ListValue, "format", translate("Rule Format")) +o.rmempty = true +o.description = translate("Choose The Rule File Format, For More Info:").." ".."https://wiki.metacubex.one/config/rule-providers/content/" +o:value("yaml") +o:value("text") +o:value("mrs") +o:depends("type", "file") +o:depends("type", "http") o = s:option(ListValue, "behavior", translate("Rule Behavior")) o.rmempty = true o.description = translate("Choose The Rule Behavior") o:value("domain") o:value("ipcidr") -o:value("classical") - -o = s:option(ListValue, "format", translate("Rule Format")..translate("(TUN&Meta Core)")) -o.rmempty = true -o.description = translate("Choose The Rule File Format, For More Info:").." ".."https://wiki.metacubex.one/config/rule-providers/content/" -o:value("yaml") -o:value("text") -o:value("mrs") +o:value("classical", translate("classical").." "..translate("(Not Support mrs Format)")) o = s:option(ListValue, "path", translate("Rule Providers Path")) o.description = translate("Update Your Rule Providers File From Config Luci Page") @@ -136,6 +139,36 @@ m.uci:foreach("openclash", "groups", o:value("DIRECT") o:value("REJECT") +-- [[ other-setting ]]-- +o = s:option(Value, "other_parameters", translate("Other Parameters")) +o.template = "cbi/tvalue" +o.rows = 20 +o.wrap = "off" +o.description = font_red..bold_on..translate("Edit Your Other Parameters Here")..bold_off..font_off +o.rmempty = true +function o.cfgvalue(self, section) + if self.map:get(section, "other_parameters") == nil then + return "# Example:\n".. + "# Only support YAML, four spaces need to be reserved at the beginning of each line to maintain formatting alignment\n".. + "# 示例:\n".. + "# 仅支持 YAML, 每行行首需要多保留四个空格以使脚本处理后能够与上方配置保持格式对齐\n".. + "# inline Example:\n".. + "# payload:\n".. + "# - '.blogger.com'\n".. + "# - '*.*.microsoft.com'\n".. + "# - 'books.itunes.apple.com'\n" + else + return Value.cfgvalue(self, section) + end +end +function o.validate(self, value) + if value then + value = value:gsub("\r\n?", "\n") + value = value:gsub("%c*$", "") + end + return value +end + local t = { {Commit, Back} } @@ -159,4 +192,5 @@ o.write = function() end m:append(Template("openclash/toolbar_show")) +m:append(Template("openclash/config_editor")) return m diff --git a/luci-app-openclash/luasrc/model/cbi/openclash/servers-config.lua b/luci-app-openclash/luasrc/model/cbi/openclash/servers-config.lua index 1607540ef..bdc7ab4d6 100644 --- a/luci-app-openclash/luasrc/model/cbi/openclash/servers-config.lua +++ b/luci-app-openclash/luasrc/model/cbi/openclash/servers-config.lua @@ -143,6 +143,7 @@ o:value("hysteria2", translate("Hysteria2 ")..translate("(Only Meta Core)")) o:value("wireguard", translate("WireGuard")..translate("(Only Meta Core)")) o:value("tuic", translate("Tuic")..translate("(Only Meta Core)")) o:value("snell", translate("Snell")) +o:value("mieru", translate("Mieru")) o:value("socks5", translate("Socks5")) o:value("http", translate("HTTP(S)")) @@ -182,6 +183,35 @@ o:depends("type", "ss") o:depends("type", "ssr") o:depends("type", "trojan") o:depends("type", "hysteria2") +o:depends("type", "mieru") + +-- [[ Mieru ]]-- +o = s:option(Value, "port_range", translate("Port Range")) +o.datatype = "portrange" +o.rmempty = true +o.default = "20000-40000" +o.placeholder = translate("20000-40000") +o:depends("type", "mieru") + +o = s:option(Value, "username", translate("Username")) +o.rmempty = false +o.placeholder = "user" +o:depends("type", "mieru") + +o = s:option(ListValue, "transport", translate("Transport")) +o.rmempty = false +o.default = "TCP" +o:value("TCP") +o:depends("type", "mieru") + +o = s:option(ListValue, "multiplexing", translate("Multiplexing")) +o.rmempty = false +o.default = "MULTIPLEXING_LOW" +o:value("MULTIPLEXING_OFF") +o:value("MULTIPLEXING_LOW") +o:value("MULTIPLEXING_MIDDLE") +o:value("MULTIPLEXING_HIGH") +o:depends("type", "mieru") -- [[ Tuic ]]-- o = s:option(Value, "tc_ip", translate("Server IP")) @@ -706,6 +736,7 @@ o:depends("type", "hysteria2") -- [[ recv_window_conn ]]-- o = s:option(Flag, "flag_quicparam", translate("Hysterir QUIC parameters")) o:depends("type", "hysteria") +o:depends("type", "hysteria2") o.rmempty = true o.default = "0" @@ -722,6 +753,34 @@ o.placeholder = translate("QUIC connection receive window") o.datatype = "uinteger" o:depends({type = "hysteria", flag_quicparam = true}) +-- [[ initial_stream_receive_window ]]-- +o = s:option(Value, "initial_stream_receive_window", translate("initial_stream_receive_window")) +o.rmempty = true +o.placeholder = translate("QUIC init stream receive window") +o.datatype = "uinteger" +o:depends({type = "hysteria2", flag_quicparam = true}) + +-- [[ max_stream_receive_window ]]-- +o = s:option(Value, "max_stream_receive_window", translate("max_stream_receive_window")) +o.rmempty = true +o.placeholder = translate("QUIC max stream receive window") +o.datatype = "uinteger" +o:depends({type = "hysteria2", flag_quicparam = true}) + +-- [[ initial_connection_receive_window ]]-- +o = s:option(Value, "initial_connection_receive_window", translate("initial_connection_receive_window")) +o.rmempty = true +o.placeholder = translate("QUIC init connection receive window") +o.datatype = "uinteger" +o:depends({type = "hysteria2", flag_quicparam = true}) + +-- [[ max_connection_receive_window ]]-- +o = s:option(Value, "max_connection_receive_window", translate("max_connection_receive_window")) +o.rmempty = true +o.placeholder = translate("QUIC max connection receive window") +o.datatype = "uinteger" +o:depends({type = "hysteria2", flag_quicparam = true}) + -- [[ hop_interval ]]-- o = s:option(Value, "hop_interval", translate("Hop Interval (Unit:second)")) o.rmempty = true @@ -806,6 +865,7 @@ o:depends({type = "vmess", obfs_vmess = "grpc"}) o = s:option(ListValue, "client_fingerprint", translate("Client Fingerprint")..translate("(Only Meta Core)")) o.rmempty = true o:value("none") +o:value("random") o:value("chrome") o:value("firefox") o:value("safari") @@ -836,6 +896,7 @@ o.rmempty = false o:value("true") o:value("false") o.default = "false" +o:depends({type = "ss", obfs = "none"}) o = s:option(ListValue, "multiplex_protocol", translate("Protocol")) o.rmempty = true diff --git a/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua b/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua index 52df2871a..1e03cf117 100644 --- a/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua +++ b/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua @@ -14,7 +14,7 @@ font_off = [[]] bold_on = [[]] bold_off = [[]] -local op_mode = string.sub(luci.sys.exec('uci get openclash.config.operation_mode 2>/dev/null'),0,-2) +local op_mode = uci:get("openclash", "config", "operation_mode") if not op_mode then op_mode = "redir-host" end local lan_ip = fs.lanip() m = Map("openclash", translate("Plugin Settings")) @@ -99,6 +99,10 @@ o = s:taboption("op_mode", Flag, "bypass_gateway_compatible", translate("Bypass o.description = translate("If The Network Cannot be Connected in Bypass Gateway Mode, Please Try to Enable.")..font_red..bold_on..translate("Suggestion: If The Device Does Not Have WLAN, Please Disable The Lan Interface's Bridge Option")..bold_off..font_off o.default = 0 +o = s:taboption("op_mode", Flag, "disable_quic_go_gso", translate("Disable quic-go GSO Support")) +o.description = font_red..bold_on..translate("Suggestion: If Encountering Issues With QUIC UDP on The Linux Kernel Version Above 6.6, Please Try to Enable.")..bold_off..font_off +o.default = 0 + o = s:taboption("op_mode", Flag, "small_flash_memory", translate("Small Flash Memory")) o.description = translate("Move Core And GEOIP Data File To /tmp/etc/openclash For Small Flash Memory Device") o.default = 0 @@ -120,12 +124,6 @@ o = s:taboption("dns", DummyValue, "flush_fakeip_cache", translate("Flush Fake-I o.template = "openclash/flush_fakeip_cache" end -o = s:taboption("dns", Flag, "disable_masq_cache", translate("Disable Dnsmasq's DNS Cache")) -o.description = translate("Recommended Enabled For Avoiding Some Connection Errors")..font_red..bold_on..translate("(Maybe Incompatible For Your Firmware)")..bold_off..font_off -o.default = 0 -o:depends("enable_redirect_dns", "1") -o:depends("enable_redirect_dns", "0") - o = s:taboption("dns", Flag, "enable_custom_domain_dns_server", translate("Enable Specify DNS Server")) o.default = 0 o:depends("enable_redirect_dns", "1") @@ -216,9 +214,10 @@ o.cfgvalue = function(...) end ip_ac = s2:option(Value, "src_ip", translate("Internal addresses")) -ip_ac.datatype = "ipmask" +ip_ac.datatype = "or(ipmask, string)" ip_ac.placeholder = "0.0.0.0/0" -ip_ac.rmempty = false +ip_ac.rmempty = true +ip_ac:value("localnetwork", translate("Local Network")) o = s2:option(Value, "src_port", translate("Internal ports")) o.datatype = "or(port, portrange)" @@ -240,8 +239,9 @@ o.default = "tcp" o.rmempty = false o = s2:option(ListValue, "target", translate("Target")) -o:value("return", translate("Return")) -o:value("accept", translate("Accept")) +o:value("return", translate("RETURN")) +o:value("accept", translate("ACCEPT")) +o:value("drop", translate("DROP")) o.rmempty = false luci.ip.neighbors({ family = 4 }, function(n) @@ -375,6 +375,7 @@ o = s:taboption("stream_enhance", Value, "stream_auto_select_interval", translat o.default = "30" o.datatype = "uinteger" o:depends("stream_auto_select", "1") +o.rmempty = true o = s:taboption("stream_enhance", ListValue, "stream_auto_select_logic", font_red..bold_on..translate("Auto Select Logic")..bold_off..font_off) o.default = "urltest" @@ -398,27 +399,21 @@ o.default = 0 o:depends("stream_auto_select", "1") o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_netflix", translate("Group Filter")) -o.default = "Netflix|奈飞" o.placeholder = "Netflix|奈飞" o.description = translate("It Will Be Searched According To The Regex When Auto Search Group Fails") o:depends("stream_auto_select_netflix", "1") +o.rmempty = true o = s:taboption("stream_enhance", Value, "stream_auto_select_region_key_netflix", translate("Unlock Region Filter")) -o.default = "" o.placeholder = "HK|SG|TW" o.description = translate("It Will Be Selected Region(Country Shortcode) According To The Regex") o:depends("stream_auto_select_netflix", "1") -function o.validate(self, value) - if value ~= m.uci:get("openclash", "config", "stream_auto_select_region_key_netflix") then - fs.unlink("/tmp/openclash_Netflix_region") - end - return value -end +o.rmempty = true o = s:taboption("stream_enhance", Value, "stream_auto_select_node_key_netflix", translate("Unlock Nodes Filter")) -o.default = "" o.description = translate("It Will Be Selected Nodes According To The Regex") o:depends("stream_auto_select_netflix", "1") +o.rmempty = true o = s:taboption("stream_enhance", DummyValue, "Netflix", translate("Manual Test")) o.rawhtml = true @@ -432,27 +427,21 @@ o.default = 0 o:depends("stream_auto_select", "1") o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_disney", translate("Group Filter")) -o.default = "Disney|迪士尼" o.placeholder = "Disney|迪士尼" o.description = translate("It Will Be Searched According To The Regex When Auto Search Group Fails") o:depends("stream_auto_select_disney", "1") +o.rmempty = true o = s:taboption("stream_enhance", Value, "stream_auto_select_region_key_disney", translate("Unlock Region Filter")) -o.default = "" o.placeholder = "HK|SG|TW" o.description = translate("It Will Be Selected Region(Country Shortcode) According To The Regex") o:depends("stream_auto_select_disney", "1") -function o.validate(self, value) - if value ~= m.uci:get("openclash", "config", "stream_auto_select_region_key_disney") then - fs.unlink("/tmp/openclash_Disney Plus_region") - end - return value -end +o.rmempty = true o = s:taboption("stream_enhance", Value, "stream_auto_select_node_key_disney", translate("Unlock Nodes Filter")) -o.default = "" o.description = translate("It Will Be Selected Nodes According To The Regex") o:depends("stream_auto_select_disney", "1") +o.rmempty = true o = s:taboption("stream_enhance", DummyValue, "Disney Plus", translate("Manual Test")) o.rawhtml = true @@ -466,27 +455,21 @@ o.default = 0 o:depends("stream_auto_select", "1") o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_ytb", translate("Group Filter")) -o.default = "YouTube|油管" o.placeholder = "YouTube|油管" o.description = translate("It Will Be Searched According To The Regex When Auto Search Group Fails") o:depends("stream_auto_select_ytb", "1") +o.rmempty = true o = s:taboption("stream_enhance", Value, "stream_auto_select_region_key_ytb", translate("Unlock Region Filter")) -o.default = "" o.placeholder = "HK|US" o.description = translate("It Will Be Selected Region(Country Shortcode) According To The Regex") o:depends("stream_auto_select_ytb", "1") -function o.validate(self, value) - if value ~= m.uci:get("openclash", "config", "stream_auto_select_region_key_ytb") then - fs.unlink("/tmp/openclash_YouTube Premium_region") - end - return value -end +o.rmempty = true o = s:taboption("stream_enhance", Value, "stream_auto_select_node_key_ytb", translate("Unlock Nodes Filter")) -o.default = "" o.description = translate("It Will Be Selected Nodes According To The Regex") o:depends("stream_auto_select_ytb", "1") +o.rmempty = true o = s:taboption("stream_enhance", DummyValue, "YouTube Premium", translate("Manual Test")) o.rawhtml = true @@ -500,27 +483,21 @@ o.default = 0 o:depends("stream_auto_select", "1") o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_prime_video", translate("Group Filter")) -o.default = "Amazon|Prime Video" o.placeholder = "Amazon|Prime Video" o.description = translate("It Will Be Searched According To The Regex When Auto Search Group Fails") o:depends("stream_auto_select_prime_video", "1") +o.rmempty = true o = s:taboption("stream_enhance", Value, "stream_auto_select_region_key_prime_video", translate("Unlock Region Filter")) -o.default = "" o.placeholder = "HK|US|SG" o.description = translate("It Will Be Selected Region(Country Shortcode) According To The Regex") o:depends("stream_auto_select_prime_video", "1") -function o.validate(self, value) - if value ~= m.uci:get("openclash", "config", "stream_auto_select_region_key_prime_video") then - fs.unlink("/tmp/openclash_Amazon Prime Video_region") - end - return value -end +o.rmempty = true o = s:taboption("stream_enhance", Value, "stream_auto_select_node_key_prime_video", translate("Unlock Nodes Filter")) -o.default = "" o.description = translate("It Will Be Selected Nodes According To The Regex") o:depends("stream_auto_select_prime_video", "1") +o.rmempty = true o = s:taboption("stream_enhance", DummyValue, "Amazon Prime Video", translate("Manual Test")) o.rawhtml = true @@ -534,27 +511,21 @@ o.default = 0 o:depends("stream_auto_select", "1") o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_hbo_max", translate("Group Filter")) -o.default = "HBO|HBOMax|HBO Max" o.placeholder = "HBO|HBOMax|HBO Max" o.description = translate("It Will Be Searched According To The Regex When Auto Search Group Fails") o:depends("stream_auto_select_hbo_max", "1") +o.rmempty = true o = s:taboption("stream_enhance", Value, "stream_auto_select_region_key_hbo_max", translate("Unlock Region Filter")) -o.default = "" o.placeholder = "US" o.description = translate("It Will Be Selected Region(Country Shortcode) According To The Regex") o:depends("stream_auto_select_hbo_max", "1") -function o.validate(self, value) - if value ~= m.uci:get("openclash", "config", "stream_auto_select_region_key_hbo_max") then - fs.unlink("/tmp/openclash_HBO Max_region") - end - return value -end +o.rmempty = true o = s:taboption("stream_enhance", Value, "stream_auto_select_node_key_hbo_max", translate("Unlock Nodes Filter")) -o.default = "" o.description = translate("It Will Be Selected Nodes According To The Regex") o:depends("stream_auto_select_hbo_max", "1") +o.rmempty = true o = s:taboption("stream_enhance", DummyValue, "HBO Max", translate("Manual Test")) o.rawhtml = true @@ -568,27 +539,21 @@ o.default = 0 o:depends("stream_auto_select", "1") o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_tvb_anywhere", translate("Group Filter")) -o.default = "TVB" o.placeholder = "TVB" o.description = translate("It Will Be Searched According To The Regex When Auto Search Group Fails") o:depends("stream_auto_select_tvb_anywhere", "1") +o.rmempty = true o = s:taboption("stream_enhance", Value, "stream_auto_select_region_key_tvb_anywhere", translate("Unlock Region Filter")) -o.default = "" o.placeholder = "HK|SG|TW" o.description = translate("It Will Be Selected Region(Country Shortcode) According To The Regex") o:depends("stream_auto_select_tvb_anywhere", "1") -function o.validate(self, value) - if value ~= m.uci:get("openclash", "config", "stream_auto_select_region_key_tvb_anywhere") then - fs.unlink("/tmp/openclash_TVB Anywhere+_region") - end - return value -end +o.rmempty = true o = s:taboption("stream_enhance", Value, "stream_auto_select_node_key_tvb_anywhere", translate("Unlock Nodes Filter")) -o.default = "" o.description = translate("It Will Be Selected Nodes According To The Regex") o:depends("stream_auto_select_tvb_anywhere", "1") +o.rmempty = true o = s:taboption("stream_enhance", DummyValue, "TVB Anywhere+", translate("Manual Test")) o.rawhtml = true @@ -602,27 +567,21 @@ o.default = 0 o:depends("stream_auto_select", "1") o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_dazn", translate("Group Filter")) -o.default = "DAZN" o.placeholder = "DAZN" o.description = translate("It Will Be Searched According To The Regex When Auto Search Group Fails") o:depends("stream_auto_select_dazn", "1") +o.rmempty = true o = s:taboption("stream_enhance", Value, "stream_auto_select_region_key_dazn", translate("Unlock Region Filter")) -o.default = "" o.placeholder = "DE" o.description = translate("It Will Be Selected Region(Country Shortcode) According To The Regex") o:depends("stream_auto_select_dazn", "1") -function o.validate(self, value) - if value ~= m.uci:get("openclash", "config", "stream_auto_select_region_key_dazn") then - fs.unlink("/tmp/openclash_DAZN_region") - end - return value -end +o.rmempty = true o = s:taboption("stream_enhance", Value, "stream_auto_select_node_key_dazn", translate("Unlock Nodes Filter")) -o.default = "" o.description = translate("It Will Be Selected Nodes According To The Regex") o:depends("stream_auto_select_dazn", "1") +o.rmempty = true o = s:taboption("stream_enhance", DummyValue, "DAZN", translate("Manual Test")) o.rawhtml = true @@ -636,27 +595,21 @@ o.default = 0 o:depends("stream_auto_select", "1") o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_paramount_plus", translate("Group Filter")) -o.default = "Paramount" o.placeholder = "Paramount" o.description = translate("It Will Be Searched According To The Regex When Auto Search Group Fails") o:depends("stream_auto_select_paramount_plus", "1") +o.rmempty = true o = s:taboption("stream_enhance", Value, "stream_auto_select_region_key_paramount_plus", translate("Unlock Region Filter")) -o.default = "" o.placeholder = "US" o.description = translate("It Will Be Selected Region(Country Shortcode) According To The Regex") o:depends("stream_auto_select_paramount_plus", "1") -function o.validate(self, value) - if value ~= m.uci:get("openclash", "config", "stream_auto_select_region_key_paramount_plus") then - fs.unlink("/tmp/openclash_Paramount Plus_region") - end - return value -end +o.rmempty = true o = s:taboption("stream_enhance", Value, "stream_auto_select_node_key_paramount_plus", translate("Unlock Nodes Filter")) -o.default = "" o.description = translate("It Will Be Selected Nodes According To The Regex") o:depends("stream_auto_select_paramount_plus", "1") +o.rmempty = true o = s:taboption("stream_enhance", DummyValue, "Paramount Plus", translate("Manual Test")) o.rawhtml = true @@ -670,27 +623,21 @@ o.default = 0 o:depends("stream_auto_select", "1") o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_discovery_plus", translate("Group Filter")) -o.default = "Discovery" o.placeholder = "Discovery" o.description = translate("It Will Be Searched According To The Regex When Auto Search Group Fails") o:depends("stream_auto_select_discovery_plus", "1") +o.rmempty = true o = s:taboption("stream_enhance", Value, "stream_auto_select_region_key_discovery_plus", translate("Unlock Region Filter")) -o.default = "" o.placeholder = "US" o.description = translate("It Will Be Selected Region(Country Shortcode) According To The Regex") o:depends("stream_auto_select_discovery_plus", "1") -function o.validate(self, value) - if value ~= m.uci:get("openclash", "config", "stream_auto_select_region_key_discovery_plus") then - fs.unlink("/tmp/openclash_Discovery Plus_region") - end - return value -end +o.rmempty = true o = s:taboption("stream_enhance", Value, "stream_auto_select_node_key_discovery_plus", translate("Unlock Nodes Filter")) -o.default = "" o.description = translate("It Will Be Selected Nodes According To The Regex") o:depends("stream_auto_select_discovery_plus", "1") +o.rmempty = true o = s:taboption("stream_enhance", DummyValue, "Discovery Plus", translate("Manual Test")) o.rawhtml = true @@ -704,10 +651,10 @@ o.default = 0 o:depends("stream_auto_select", "1") o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_bilibili", translate("Group Filter")) -o.default = "Bilibili" o.placeholder = "Bilibili" o.description = translate("It Will Be Searched According To The Regex When Auto Search Group Fails") o:depends("stream_auto_select_bilibili", "1") +o.rmempty = true o = s:taboption("stream_enhance", ListValue, "stream_auto_select_region_key_bilibili", translate("Unlock Region Filter")) o.default = "CN" @@ -716,17 +663,12 @@ o:value("HK/MO/TW", translate("Hongkong/Macau/Taiwan")) o:value("TW", translate("Taiwan Only")) o.description = translate("It Will Be Selected Region(Country Shortcode) According To The Regex") o:depends("stream_auto_select_bilibili", "1") -function o.validate(self, value) - if value ~= m.uci:get("openclash", "config", "stream_auto_select_region_key_bilibili") then - fs.unlink("/tmp/openclash_Bilibili_region") - end - return value -end +o.rmempty = false o = s:taboption("stream_enhance", Value, "stream_auto_select_node_key_bilibili", translate("Unlock Nodes Filter")) -o.default = "" o.description = translate("It Will Be Selected Nodes According To The Regex") o:depends("stream_auto_select_bilibili", "1") +o.rmempty = true o = s:taboption("stream_enhance", DummyValue, "Bilibili", translate("Manual Test")) o.rawhtml = true @@ -740,15 +682,15 @@ o.default = 0 o:depends("stream_auto_select", "1") o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_google_not_cn", translate("Group Filter")) -o.default = "Google" o.placeholder = "Google" o.description = translate("It Will Be Searched According To The Regex When Auto Search Group Fails") o:depends("stream_auto_select_google_not_cn", "1") +o.rmempty = true o = s:taboption("stream_enhance", Value, "stream_auto_select_node_key_google_not_cn", translate("Unlock Nodes Filter")) -o.default = "" o.description = translate("It Will Be Selected Nodes According To The Regex") o:depends("stream_auto_select_google_not_cn", "1") +o.rmempty = true o = s:taboption("stream_enhance", DummyValue, "Google", translate("Manual Test")) o.rawhtml = true @@ -762,27 +704,21 @@ o.default = 0 o:depends("stream_auto_select", "1") o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_openai", translate("Group Filter")) -o.default = "OpenAI|ChatGPT" o.placeholder = "OpenAI|ChatGPT|AI" o.description = translate("It Will Be Searched According To The Regex When Auto Search Group Fails") o:depends("stream_auto_select_openai", "1") +o.rmempty = true o = s:taboption("stream_enhance", Value, "stream_auto_select_region_key_openai", translate("Unlock Region Filter")) -o.default = "" o.placeholder = "US" o.description = translate("It Will Be Selected Region(Country Shortcode) According To The Regex") o:depends("stream_auto_select_openai", "1") -function o.validate(self, value) - if value ~= m.uci:get("openclash", "config", "stream_auto_select_region_key_openai") then - fs.unlink("/tmp/openclash_OpenAI_region") - end - return value -end +o.rmempty = true o = s:taboption("stream_enhance", Value, "stream_auto_select_node_key_openai", translate("Unlock Nodes Filter")) -o.default = "" o.description = translate("It Will Be Selected Nodes According To The Regex") o:depends("stream_auto_select_openai", "1") +o.rmempty = true o = s:taboption("stream_enhance", DummyValue, "OpenAI", translate("Manual Test")) o.rawhtml = true @@ -1068,6 +1004,10 @@ o = s:taboption("dashboard", DummyValue, "Metacubexd", translate("Update Metacub o.template="openclash/switch_dashboard" o.rawhtml = true +o = s:taboption("dashboard", DummyValue, "zashboard", translate("Update zashboard Version")) +o.template="openclash/switch_dashboard" +o.rawhtml = true + ---- ipv6 o = s:taboption("ipv6", Flag, "ipv6_enable", translate("Proxy IPv6 Traffic")) o.description = font_red..bold_on..translate("The Gateway and DNS of The Connected Device Must be The Router IP, Disable IPv6 DHCP To Avoid Abnormal Connection If You Do Not Use")..bold_off..font_off diff --git a/luci-app-openclash/luasrc/openclash.lua b/luci-app-openclash/luasrc/openclash.lua index dd8638043..27bfa0fcb 100644 --- a/luci-app-openclash/luasrc/openclash.lua +++ b/luci-app-openclash/luasrc/openclash.lua @@ -247,8 +247,11 @@ unlink = fs.unlink readlink = fs.readlink function filename(str) + if not str then + return nil + end local idx = str:match(".+()%.%w+$") - if(idx) then + if idx then return str:sub(1, idx-1) else return str diff --git a/luci-app-openclash/luasrc/view/openclash/config_editor.htm b/luci-app-openclash/luasrc/view/openclash/config_editor.htm index 89a5f0f35..da5c99714 100644 --- a/luci-app-openclash/luasrc/view/openclash/config_editor.htm +++ b/luci-app-openclash/luasrc/view/openclash/config_editor.htm @@ -28,6 +28,7 @@ + @@ -87,6 +88,33 @@ local sconf = "/etc/openclash/"..conf_name + +<% + if display == "" then +%> + +<% + end +%> +<%+cbi/valuefooter%> diff --git a/luci-app-openclash/po/zh-cn/openclash.zh-cn.po b/luci-app-openclash/po/zh-cn/openclash.zh-cn.po index 72255cc47..d84d11944 100644 --- a/luci-app-openclash/po/zh-cn/openclash.zh-cn.po +++ b/luci-app-openclash/po/zh-cn/openclash.zh-cn.po @@ -215,15 +215,6 @@ msgstr "使用 Dnsmasq 转发" msgid "Firewall Redirect" msgstr "使用防火墙转发" -msgid "Disable Dnsmasq's DNS Cache" -msgstr "禁止 Dnsmasq 缓存 DNS" - -msgid "Recommended Enabled For Avoiding Some Connection Errors" -msgstr "推荐启用,防止因缓存造成连接错误" - -msgid "(Maybe Incompatible For Your Firmware)" -msgstr "(部分固件可能不兼容)" - msgid "Custom DNS Setting" msgstr "*自定义上游 DNS 服务器" @@ -789,6 +780,18 @@ msgstr "启用传输协议设置" msgid "Hysterir QUIC parameters" msgstr "QUIC 参数" +msgid "QUIC init stream receive window" +msgstr "QUIC 初始流接收窗口大小" + +msgid "QUIC max stream receive window" +msgstr "QUIC 最大的流接收窗口大小" + +msgid "QUIC init connection receive window" +msgstr "QUIC 初始的连接接收窗口大小" + +msgid "QUIC max connection receive window" +msgstr "QUIC 最大的连接接收窗口大小" + msgid "Edit Rule Providers" msgstr "编辑规则集配置" @@ -1189,13 +1192,16 @@ msgid "Running Mode" msgstr "运行模式" msgid "Yacd Control Panel" -msgstr "Yacd 控制面板" +msgstr "Yacd 面板" msgid "Dashboard Control Panel" -msgstr "Dashboard 控制面板" +msgstr "Dashboard 面板" msgid "Metacubexd Control Panel" -msgstr "Metacubexd 控制面板" +msgstr "Metacubexd 面板" + +msgid "zashboard Control Panel" +msgstr "zashboard 面板" msgid "Control Panel Login IP" msgstr "控制面板登录 IP" @@ -1605,8 +1611,11 @@ msgstr "开始下载" msgid "Download Successful, Start Pre Update Test..." msgstr "下载成功,开始进行更新前测试..." -msgid "Pre Update Test Failed, The File is Saved in /tmp/openclash.ipk, Please Try to Update Manually!" -msgstr "更新前测试失败,文件保存在 /tmp/openclash.ipk,请尝试手动更新!" +msgid "Pre Update Test Failed, The File is Saved in /tmp/openclash.apk, Please Try to Update Manually With" +msgstr "更新前测试失败,文件保存在 /tmp/openclash.apk,请尝试以下命令手动更新" + +msgid "Pre Update Test Failed, The File is Saved in /tmp/openclash.ipk, Please Try to Update Manually With" +msgstr "更新前测试失败,文件保存在 /tmp/openclash.ipk,请尝试以下命令手动更新" msgid "Pre Update Test Passed, Ready to Update and Please Do not Refresh The Page and Other Operations..." msgstr "更新前测试通过,准备开始更新,更新过程请不要刷新页面和进行其他操作..." @@ -1620,11 +1629,11 @@ msgstr "正在安装新版本,更新过程请不要刷新页面和进行其他 msgid "OpenClash Update Successful, About To Restart!" msgstr "OpenClash 更新成功,即将进行重启!" -msgid "OpenClash Update Failed, The File is Saved in /tmp/openclash.ipk, Please Try to Update Manually!" -msgstr "OpenClash 更新失败,文件保存在 /tmp/openclash.ipk,请尝试手动更新!" +msgid "OpenClash Update Failed, The File is Saved in /tmp/openclash.ipk, Please Try to Update Manually With" +msgstr "OpenClash 更新失败,文件保存在 /tmp/openclash.ipk,请尝试以下命令手动更新" -msgid "OpenClash Update Failed, The File is Saved in /tmp/openclash.apk, Please Try to Update Manually!" -msgstr "OpenClash 更新失败,文件保存在 /tmp/openclash.apk,请尝试手动更新!" +msgid "OpenClash Update Failed, The File is Saved in /tmp/openclash.apk, Please Try to Update Manually With" +msgstr "OpenClash 更新失败,文件保存在 /tmp/openclash.apk,请尝试以下命令手动更新" msgid "Download Failed, Please Check The Network or Try Again Later!" msgstr "下载失败,请检查网络或稍后再试!" @@ -1965,12 +1974,6 @@ msgstr "提示:检测到大陆白名单列表不存在,准备开始下载... msgid "Tip: Detected that the Chnroute Cidr List Format is wrong, Ready to Reformat..." msgstr "提示:检测到大陆白名单列表格式错误,准备重新格式化..." -msgid "Error: Could Not Load The Capsh Library, Please Verify The Capsh Shell Library Work Well..." -msgstr "错误:Capsh 异常,请尝试重新安装依赖【libcap】和相应的Capsh库,终止启动..." - -msgid "Tip: You Could Download And Re-Install The libcap & libcap-bin Library From The Address Give" -msgstr "提示:你可以尝试从给出的地址中查找、下载并重新安装架构对应的 libcap 和 libcap-bin 依赖" - msgid "Error: OpenClash Can Not Start, Please Check The Error Info And Try Again!" msgstr "错误:OpenClash 启动失败,请到日志页面查看详细错误信息!" @@ -2043,18 +2046,6 @@ msgstr "重置 OpenClash 防火墙规则..." msgid "Warning: OpenClash Now Disabled, Need Start From Luci Page, Exit..." msgstr "警告:OpenClash 目前处于未启用状态,请从插件页面启动本插件,脚本退出..." -msgid "Warning: Multiple Restart Scripts Running, Exit..." -msgstr "警告:多个 OpenClash 启动脚本运行中,此脚本退出..." - -msgid "Watchdog: Multiple Clash Processes, Kill All..." -msgstr "守护程序:检测到多个 Clash 内核运行,清理中..." - -msgid "Watchdog: Clash Core Problem, Restart..." -msgstr "守护程序:检测到 Clash 内核崩溃,重启中..." - -msgid "Watchdog: Already Restart 3 Times With Clash Core Problem, Auto-Exit..." -msgstr "守护程序:已尝试自动重启三次 Clash 内核,为防止频繁重启造成严重后果,OpenClash 将停止运行..." - msgid "Watchdog: Log Size Limit, Clean Up All Log Records..." msgstr "守护程序:因日志大小限制,清理所有日志内容..." @@ -2721,8 +2712,8 @@ msgstr "未选择上传文件" msgid "Custom Params" msgstr "自定义参数" -msgid "eg: \"rename=\\s+([2-9])[xX]@ (HIGH:$1)\"" -msgstr "格式示例:\"rename=\\s+([2-9])[xX]@ (高倍率:$1)\"" +msgid "eg: \"rename=match@replace\" , \"rename=\\s+([2-9])[xX]@ (HIGH:$1)\"" +msgstr "格式示例:\"rename=match@replace\" , \"rename=\\s+([2-9])[xX]@ (高倍率:$1)\"" msgid "Use Rule Provider" msgstr "使用规则集" @@ -2958,6 +2949,9 @@ msgstr "切换(更新) Yacd 版本" msgid "Update Metacubexd Version" msgstr "更新 Metacubexd 版本" +msgid "Update zashboard Version" +msgstr "更新 zashboard 版本" + msgid "Downloading File..." msgstr "文件下载中..." @@ -3051,6 +3045,9 @@ msgstr "警告:TUN 接口启动失败,尝试重启内核..." msgid "Error: Core Start Failed, Please Check The Log Infos!" msgstr "错误:内核启动失败,请查看《内核日志》排查失败原因!" +msgid "Error: Core Status Abnormal, Please Check The Log Infos!" +msgstr "错误:内核状态异常,请查看《内核日志》排查异常原因!" + msgid "Forced Sniff Pure IP Connections" msgstr "强制探测(嗅探)所有纯 IP 的连接" @@ -3102,8 +3099,8 @@ msgstr "测速(连通性)间隔修改" msgid "Modify The URL-Test Interval In The Config" msgstr "修改配置文件中的测速(连通性)间隔" -msgid "Whether to Enable Process Rules, If You Are Not Sure, Please Choose off Which Useful in Router Environment" -msgstr "是否启用进程规则,在路由环境下保持关闭可以提升性能" +msgid "Whether to Enable Process Rules, Only Works on Routerself, If You Are Not Sure, Please Choose off Which Useful in Router Environment, Depend on kmod-inet-diag" +msgstr "是否启用进程规则,仅能匹配路由器自身进程,在路由环境下保持关闭可以提升性能,依赖 kmod-inet-diag" msgid "Enable Process Rule" msgstr "启用进程规则" @@ -3451,4 +3448,25 @@ msgid "Target" msgstr "对象" msgid "Error: Network Anomaly, Suspend Unlock Detection..." -msgstr "错误:网络异常,暂停解锁检测..." \ No newline at end of file +msgstr "错误:网络异常,暂停解锁检测..." + +msgid "(Not Support mrs Format)" +msgstr "(不支持 mrs 格式)" + +msgid "UpDate" +msgstr "更新" + +msgid "Local Network" +msgstr "内部网络地址" + +msgid "Error: LAN IP Address Get Error, Please Check The LAN Interface Setting or Choose the Correct Interface in the Setting!" +msgstr "错误:LAN IP 地址获取失败,请检查 LAN 接口设置或在插件设置中选择正确的 LAN 接口名称" + +msgid "Warning: Skiped The Custom Rule Because Group & Proxy Not Found:" +msgstr "警告:因未找到对应的策略组或代理,为避免启动失败,已跳过此条自定义规则的添加:" + +msgid "Disable quic-go GSO Support" +msgstr "禁用 quic-go GSO 支持" + +msgid "Suggestion: If Encountering Issues With QUIC UDP on The Linux Kernel Version Above 6.6, Please Try to Enable." +msgstr "建议: 如果固件 Linux 核心版本在 6.6 以上时遇到 quic-go 的 UDP 连接问题,请尝试启用。" \ No newline at end of file diff --git a/luci-app-openclash/root/etc/init.d/openclash b/luci-app-openclash/root/etc/init.d/openclash index 5fbd2f2f6..93e20858c 100644 --- a/luci-app-openclash/root/etc/init.d/openclash +++ b/luci-app-openclash/root/etc/init.d/openclash @@ -3,6 +3,7 @@ START=99 STOP=15 +USE_PROCD=1 . $IPKG_INSTROOT/usr/share/openclash/openclash_ps.sh . $IPKG_INSTROOT/usr/share/openclash/ruby.sh @@ -32,20 +33,9 @@ CACHE_PATH_OLD="/etc/openclash/.cache" CACHE_PATH="/etc/openclash/cache.db" LOG_FILE="/tmp/openclash.log" START_LOG="/tmp/openclash_start.log" -LOCK_FILE="/tmp/lock/openclash.lock" PROXY_FWMARK="0x162" PROXY_ROUTE_TABLE="0x162" -set_lock() { - exec 888>"$LOCK_FILE" 2>/dev/null - flock -x 888 2>/dev/null -} - -del_lock() { - flock -u 888 2>/dev/null - rm -rf "$LOCK_FILE" -} - add_cron() { [ "$(tail -n1 /etc/crontabs/root | wc -l)" -eq 0 ] && [ -n "$(cat /etc/crontabs/root 2>/dev/null)" ] && echo >> /etc/crontabs/root @@ -71,7 +61,7 @@ add_cron() [ "$(uci -q get openclash.config.auto_restart)" -eq 1 ] && echo "0 $(uci -q get openclash.config.auto_restart_day_time) * * $(uci -q get openclash.config.auto_restart_week_time) /etc/init.d/openclash restart 2>/dev/null" >> $CRON_FILE } crontab $CRON_FILE - nohup /usr/share/openclash/openclash_watchdog.sh & + start_watchdog } del_cron() @@ -173,7 +163,7 @@ change_dns() { if [ "$1" -eq 1 ]; then uci -q del openclash.config.dnsmasq_server config_load "dhcp" - config_list_foreach "$(uci show dhcp.@dnsmasq[0].server |awk -F '.' '{print $2}')" "server" save_dnsmasq_server + config_list_foreach "$(uci -q show dhcp.@dnsmasq[0].server |awk -F '.' '{print $2}')" "server" save_dnsmasq_server uci -q del dhcp.@dnsmasq[-1].server uci -q add_list dhcp.@dnsmasq[0].server=127.0.0.1#"$dns_port" uci -q set openclash.config.dnsmasq_noresolv="$(uci -q get dhcp.@dnsmasq[0].noresolv)" @@ -182,15 +172,11 @@ change_dns() { uci -q set dhcp.@dnsmasq[0].noresolv=1 uci -q set dhcp.@dnsmasq[0].localuse=1 uci -q set openclash.config.redirect_dns=1 - else - uci -q set openclash.config.redirect_dns=0 - fi - - if [ "$1" -eq 1 ] && [ "$2" -eq 1 ]; then uci -q set openclash.config.dnsmasq_cachesize="$(uci -q get dhcp.@dnsmasq[0].cachesize)" uci -q set dhcp.@dnsmasq[0].cachesize=0 uci -q set openclash.config.cachesize_dns=1 else + uci -q set openclash.config.redirect_dns=0 uci -q set openclash.config.cachesize_dns=0 fi @@ -296,7 +282,6 @@ start_fail() { kill_clash stop - del_lock exit 0 } @@ -341,8 +326,7 @@ if [ ! -f "$RAW_CONFIG_FILE" ]; then config_foreach sub_info_get "config_subscribe" "$RAW_CONFIG_FILE" if [ "$subscribe_enable" = "1" ]; then LOG_OUT "【$RAW_CONFIG_FILE】Config File Does Not Exist, You Have Set Subscription Information, Ready To Download..." - nohup /usr/share/openclash/openclash.sh "$RAW_CONFIG_FILE" & - del_lock + /usr/share/openclash/openclash.sh "$RAW_CONFIG_FILE" & exit 0 fi fi @@ -365,7 +349,6 @@ fi 2>/dev/null if [ ! -f "$RAW_CONFIG_FILE" ]; then LOG_OUT "Error: Config Not Found" - del_lock exit 0 fi @@ -641,16 +624,6 @@ do_run_file() ln -s "$HISTORY_PATH" "$CACHE_PATH" 2>/dev/null fi - if ! capsh --is-uid=0 >/dev/null || ! capsh --has-ambient >/dev/null; then - LOG_OUT "Error: Could Not Load The Capsh Library, Please Verify The Capsh Shell Library Work Well..." - LOG_OUT "Tip: You Could Download And Re-Install The libcap & libcap-bin Library From The Address Give" - echo "" >> $LOG_FILE - echo "---------- https://mirrors.cloud.tencent.com/lede/snapshots/packages/ ----------" >> $LOG_FILE - echo "" >> $LOG_FILE - start_fail - fi - - #创建原始备份 if [ ! -f "$2" ]; then cp "$1" "$2" @@ -664,7 +637,7 @@ do_run_file() start_run_core() { - ulimit -SHn 65535 2>/dev/null + ulimit -SHn 1000000 2>/dev/null ulimit -v unlimited 2>/dev/null ulimit -u unlimited 2>/dev/null modprobe tun >/dev/null 2>&1 @@ -674,9 +647,16 @@ start_run_core() fi chown root:root /etc/openclash/core/* 2>/dev/null kill_clash - #使用nobody启动内核方便代理路由自身流量 - capabilties="cap_sys_resource,cap_dac_override,cap_net_raw,cap_net_bind_service,cap_net_admin,cap_sys_ptrace,cap_sys_admin" - capsh --caps="${capabilties}+eip" -- -c "capsh --user=nobody --addamb='${capabilties}' -- -c 'nohup $CLASH -d $CLASH_CONFIG -f \"$CONFIG_FILE\" >> $LOG_FILE 2>&1 &'" >> $LOG_FILE 2>&1 + procd_open_instance "openclash" + procd_set_param command /bin/sh -c "$CLASH -d $CLASH_CONFIG -f \"$CONFIG_FILE\" >> $LOG_FILE 2>&1" + procd_set_param user "root" + procd_set_param group "nogroup" + procd_set_param limits nproc="unlimited" as="unlimited" memlock="unlimited" nofile="1000000 1000000" + procd_set_param respawn 3600 3 10 + procd_set_param capabilities "/etc/capabilities/openclash.json" + procd_set_param stderr 1 + procd_set_param no_new_privs 1 + procd_close_instance } #防火墙设置部分 @@ -756,6 +736,11 @@ check_core_status() TUN_WAIT=0 TUN_RESTART=1 CORE_HTTP_CODE=0 + + if [ -z "$(pidof clash)" ]; then + sleep 5 + fi + if [ -n "$en_mode_tun" ] || [ "$ipv6_mode" -eq 2 ] || [ "$ipv6_mode" -eq 3 ]; then if [ -n "$en_mode_tun" ]; then ip_="ip" @@ -786,40 +771,47 @@ check_core_status() fi fi - if [ "$ipv6_mode" -eq 2 ] || [ "$ipv6_mode" -eq 3 ]; then - ip -6 rule del oif utun table 2022 >/dev/null 2>&1 - ip -6 route del default dev utun table 2022 >/dev/null 2>&1 - ip -6 route add default dev utun table "$PROXY_ROUTE_TABLE" - ip -6 rule add fwmark "$PROXY_FWMARK" ipproto icmp table main pref 8000 - ip -6 rule add fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" pref 8001 - fi + if [ -n "$(pidof clash)" ]; then + if [ "$ipv6_mode" -eq 2 ] || [ "$ipv6_mode" -eq 3 ]; then + ip -6 rule del oif utun table 2022 >/dev/null 2>&1 + ip -6 route del default dev utun table 2022 >/dev/null 2>&1 + ip -6 route add default dev utun table "$PROXY_ROUTE_TABLE" + ip -6 rule add fwmark "$PROXY_FWMARK" ipproto icmp table main pref 1888 + ip -6 rule add fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" pref 1889 + fi - ip route add default dev utun table "$PROXY_ROUTE_TABLE" - ip rule add fwmark "$PROXY_FWMARK" ipproto icmp table main pref 8000 - ip rule add fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" pref 8001 + ip route add default dev utun table "$PROXY_ROUTE_TABLE" + ip rule add fwmark "$PROXY_FWMARK" ipproto icmp table main pref 1888 + ip rule add fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" pref 1889 + fi else reg4='^((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$' - while ( [ -n "$(pidof clash)" ] && [ "$CORE_HTTP_CODE" != "200" ] && [ "$TUN_RESTART" -le 120 ] && [[ "$lan_ip" =~ $reg4 ]] ) + while ( [ -n "$(pidof clash)" ] && [ "$CORE_HTTP_CODE" != "200" ] && [ "$TUN_WAIT" -le 120 ] && [[ "$lan_ip" =~ $reg4 ]] ) do CORE_HTTP_CODE=$(curl -m 5 -o /dev/null -s -w '%{http_code}' -H 'Content-Type: application/json' -H "Authorization: Bearer ${da_password}" -XGET http://${lan_ip}:${cn_port}/group) let TUN_WAIT++ sleep 1 done >/dev/null 2>&1 if ! [[ "$lan_ip" =~ $reg4 ]]; then + LOG_OUT "Error: LAN IP Address Get Error, Please Check The LAN Interface Setting or Choose the Correct Interface in the Setting!" sleep 10 fi - if [ -z "$(pidof clash)" ]; then - LOG_OUT "Error: Core Start Failed, Please Check The Log Infos!" + if [ "$CORE_HTTP_CODE" != "200" ]; then + LOG_OUT "Error: Core Status Abnormal, Please Check The Log Infos!" start_fail fi fi + if [ -z "$(pidof clash)" ]; then + LOG_OUT "Error: Core Start Failed, Please Check The Log Infos!" + start_fail + fi } firewall_lan_ac_traffic() { local src_port src_ip proto target enabled family comment config_get "src_port" "$section" "src_port" "" - config_get "src_ip" "$section" "src_ip" "" + config_get "src_ip" "$section" "src_ip" "localnetwork" config_get "proto" "$section" "proto" "both" config_get "target" "$section" "target" "return" config_get "enabled" "$section" "enabled" "0" @@ -837,80 +829,112 @@ firewall_lan_ac_traffic() if [ $proto == "both" ]; then e_tcp=true; e_udp=true; fi if [ -n "$FW4" ]; then + if [ "$src_ip" == "localnetwork" ]; then + src_ip="@localnetwork" + src_ip_v6="@localnetwork6" + else + src_ip="{ $src_ip }" + src_ip_v6="{ $src_ip }" + fi + if [ "$family" == "both" ] || [ "$family" == "ipv4" ]; then if [ -z "$en_mode_tun" ] || [ "$en_mode_tun" -eq 2 ]; then if $e_tcp ; then - nft insert rule inet fw4 openclash_output position 0 meta nfproto {ipv4} ip daddr != { "$fakeip_range" } ip saddr { "$src_ip" } tcp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 - nft insert rule inet fw4 openclash position 0 ip daddr != { "$fakeip_range" } ip saddr { "$src_ip" } tcp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 + nft insert rule inet fw4 openclash_output position 0 meta nfproto {ipv4} ip daddr != { "$fakeip_range" } ip saddr "$src_ip" tcp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 + nft insert rule inet fw4 openclash position 0 ip daddr != { "$fakeip_range" } ip saddr "$src_ip" tcp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 fi if $e_udp ; then - nft insert rule inet fw4 openclash_mangle_output position 0 meta nfproto {ipv4} ip daddr != { "$fakeip_range" } ip saddr { "$src_ip" } udp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 - nft insert rule inet fw4 openclash_mangle position 0 ip daddr != { "$fakeip_range" } ip saddr { "$src_ip" } udp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 + nft insert rule inet fw4 openclash_mangle_output position 0 meta nfproto {ipv4} ip daddr != { "$fakeip_range" } ip saddr "$src_ip" udp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 + nft insert rule inet fw4 openclash_mangle position 0 ip daddr != { "$fakeip_range" } ip saddr "$src_ip" udp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 fi elif [ "$en_mode_tun" -eq 1 ]; then if $e_tcp ; then - nft insert rule inet fw4 openclash_mangle_output position 0 meta nfproto {ipv4} ip daddr != { "$fakeip_range" } ip saddr { "$src_ip" } tcp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 - nft insert rule inet fw4 openclash_mangle position 0 ip daddr != { "$fakeip_range" } ip saddr { "$src_ip" } tcp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 + nft insert rule inet fw4 openclash_mangle_output position 0 meta nfproto {ipv4} ip daddr != { "$fakeip_range" } ip saddr "$src_ip" tcp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 + nft insert rule inet fw4 openclash_mangle position 0 ip daddr != { "$fakeip_range" } ip saddr "$src_ip" tcp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 fi if $e_udp ; then - nft insert rule inet fw4 openclash_mangle_output position 0 meta nfproto {ipv4} ip daddr != { "$fakeip_range" } ip saddr { "$src_ip" } udp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 - nft insert rule inet fw4 openclash_mangle position 0 ip daddr != { "$fakeip_range" } ip saddr { "$src_ip" } udp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 + nft insert rule inet fw4 openclash_mangle_output position 0 meta nfproto {ipv4} ip daddr != { "$fakeip_range" } ip saddr "$src_ip" udp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 + nft insert rule inet fw4 openclash_mangle position 0 ip daddr != { "$fakeip_range" } ip saddr "$src_ip" udp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 fi fi + if $e_tcp ; then + nft insert rule inet fw4 openclash_post position 0 ip daddr != { "$fakeip_range" } ip saddr "$src_ip" tcp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 + fi + if $e_udp ; then + nft insert rule inet fw4 openclash_post position 0 ip daddr != { "$fakeip_range" } ip saddr "$src_ip" udp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 + fi fi if [ "$ipv6_enable" -eq 1 ]; then if [ "$family" == "both" ] || [ "$family" == "ipv6" ]; then if $e_tcp ; then - nft insert rule inet fw4 openclash_v6 position 0 ip6 saddr { "$src_ip" } tcp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 - nft insert rule inet fw4 openclash_output_v6 position 0 ip6 saddr { "$src_ip" } tcp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 - nft insert rule inet fw4 openclash_mangle_v6 position 0 ip6 saddr { "$src_ip" } tcp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 - nft insert rule inet fw4 openclash_mangle_output_v6 position 0 meta nfproto {ipv6} ip6 saddr { "$src_ip" } tcp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 + nft insert rule inet fw4 openclash_v6 position 0 ip6 saddr "$src_ip_v6" tcp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 + nft insert rule inet fw4 openclash_output_v6 position 0 ip6 saddr "$src_ip_v6" tcp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 + nft insert rule inet fw4 openclash_mangle_v6 position 0 ip6 saddr "$src_ip_v6" tcp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 + nft insert rule inet fw4 openclash_mangle_output_v6 position 0 meta nfproto {ipv6} ip6 saddr "$src_ip_v6" tcp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 + nft insert rule inet fw4 openclash_post_v6 position 0 ip6 saddr "$src_ip_v6" tcp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 fi if $e_udp ; then - nft insert rule inet fw4 openclash_mangle_v6 position 0 ip6 saddr { "$src_ip" } udp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 - nft insert rule inet fw4 openclash_mangle_output_v6 position 0 meta nfproto {ipv6} ip6 saddr { "$src_ip" } udp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 + nft insert rule inet fw4 openclash_mangle_v6 position 0 ip6 saddr "$src_ip_v6" udp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 + nft insert rule inet fw4 openclash_mangle_output_v6 position 0 meta nfproto {ipv6} ip6 saddr "$src_ip_v6" udp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 + nft insert rule inet fw4 openclash_post_v6 position 0 ip6 saddr "$src_ip_v6" udp sport "$src_port" counter $target comment "\"$comment\"" >/dev/null 2>&1 fi fi fi else + if [ "$src_ip" == "localnetwork" ]; then + src_ip="-m set --match-set localnetwork src" + src_ip_v6="-m set --match-set localnetwork6 src" + else + src_ip="-s ${src_ip}" + src_ip_v6="-s ${src_ip}" + fi src_port=$(echo $src_port |sed "s/-/:/g" 2>/dev/null) if [ $target == "accept" ]; then target="ACCEPT"; fi if [ $target == "return" ]; then target="RETURN"; fi + if [ $target == "drop" ]; then target="DROP"; fi if [ "$family" == "both" ] || [ "$family" == "ipv4" ]; then if [ -z "$en_mode_tun" ] || [ "$en_mode_tun" -eq 2 ]; then if $e_tcp ; then - iptables -t nat -I openclash_output -p tcp ! -d "$fakeip_range" -s "$src_ip" --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 - iptables -t nat -I openclash -p tcp ! -d "$fakeip_range" -s "$src_ip" --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 + iptables -t nat -I openclash_output -p tcp ! -d "$fakeip_range" "$src_ip" --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 + iptables -t nat -I openclash -p tcp ! -d "$fakeip_range" "$src_ip" --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 fi if $e_udp ; then - iptables -t mangle -I openclash_output -p udp ! -d "$fakeip_range" -s "$src_ip" --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 - iptables -t mangle -I openclash -p udp ! -d "$fakeip_range" -s "$src_ip" --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 + iptables -t mangle -I openclash_output -p udp ! -d "$fakeip_range" "$src_ip" --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 + iptables -t mangle -I openclash -p udp ! -d "$fakeip_range" "$src_ip" --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 fi elif [ "$en_mode_tun" -eq 1 ]; then if $e_tcp ; then - iptables -t mangle -I openclash_output -p tcp ! -d "$fakeip_range" -s "$src_ip" --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 - iptables -t mangle -I openclash -p tcp ! -d "$fakeip_range" -s "$src_ip" --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 + iptables -t mangle -I openclash_output -p tcp ! -d "$fakeip_range" "$src_ip" --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 + iptables -t mangle -I openclash -p tcp ! -d "$fakeip_range" "$src_ip" --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 fi if $e_udp ; then - iptables -t mangle -I openclash_output -p udp ! -d "$fakeip_range" -s "$src_ip" --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 - iptables -t mangle -I openclash -p udp ! -d "$fakeip_range" -s "$src_ip" --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 + iptables -t mangle -I openclash_output -p udp ! -d "$fakeip_range" "$src_ip" --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 + iptables -t mangle -I openclash -p udp ! -d "$fakeip_range" "$src_ip" --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 fi fi + if $e_tcp ; then + iptables -t nat -I openclash_post -p tcp ! -d "$fakeip_range" "$src_ip" --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 + fi + if $e_udp ; then + iptables -t nat -I openclash_post -p udp ! -d "$fakeip_range" "$src_ip" --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 + fi fi if [ "$ipv6_enable" -eq 1 ]; then if [ "$family" == "both" ] || [ "$family" == "ipv6" ]; then if $e_tcp ; then - ip6tables -t nat -I openclash -s "$src_ip" -p tcp --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 - ip6tables -t nat -A openclash_output -s "$src_ip" -p tcp --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 - ip6tables -t mangle -I openclash -s "$src_ip" -p tcp --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 - ip6tables -t mangle -I openclash_output -p tcp -s "$src_ip" --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 + ip6tables -t nat -I openclash "$src_ip_v6" -p tcp --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 + ip6tables -t nat -A openclash_output "$src_ip_v6" -p tcp --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 + ip6tables -t mangle -I openclash "$src_ip_v6" -p tcp --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 + ip6tables -t mangle -I openclash_output -p tcp "$src_ip_v6" --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 + ip6tables -t nat -I openclash_post -p tcp "$src_ip_v6" --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 fi if $e_udp ; then - ip6tables -t mangle -I openclash -p udp -s "$src_ip" --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 - ip6tables -t mangle -I openclash_output -p udp -s "$src_ip" --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 + ip6tables -t mangle -I openclash -p udp "$src_ip_v6" --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 + ip6tables -t mangle -I openclash_output -p udp "$src_ip_v6" --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 + ip6tables -t nat -I openclash_post -p udp "$src_ip_v6" --sport "$src_port" -j $target -m comment --comment "$comment" >/dev/null 2>&1 fi fi fi @@ -1405,9 +1429,11 @@ if [ -n "$FW4" ]; then #nft 'delete chain inet fw4 openclash_post' nft 'add chain inet fw4 openclash_post' nft 'flush chain inet fw4 openclash_post' - nft add rule inet fw4 openclash_post meta mark "$PROXY_FWMARK" counter accept + nft 'add rule inet fw4 openclash_post skgid == 65534 counter return' + nft add rule inet fw4 openclash_post mark "$PROXY_FWMARK" counter accept nft 'add rule inet fw4 openclash_post ip daddr @localnetwork counter return' - nft 'add rule inet fw4 openclash_post meta nfproto {ipv4} fib saddr type != { local } meta skuid != 65534 counter masquerade' + nft 'add rule inet fw4 openclash_post ct direction reply counter return' + nft 'add rule inet fw4 openclash_post fib saddr type != { local } counter masquerade' nft add rule inet fw4 srcnat meta nfproto {ipv4} counter jump openclash_post comment \"OpenClash Bypass Gateway Compatible\" fi @@ -1426,8 +1452,7 @@ if [ -n "$FW4" ]; then #nft delete rule inet fw4 input $(nft -a list chain inet fw4 input |grep "@localnetwork" |awk -F '# ' '{print$2}') nft insert rule inet fw4 input position 0 iifname "$wan_int" ip saddr != @localnetwork counter jump openclash_wan_input done - nft add rule inet fw4 openclash_wan_input udp dport {$proxy_port,$tproxy_port,$cn_port,$http_port,$socks_port,$mixed_port,$dns_port} counter reject - nft add rule inet fw4 openclash_wan_input tcp dport {$proxy_port,$tproxy_port,$cn_port,$http_port,$socks_port,$mixed_port,$dns_port} counter reject + nft add rule inet fw4 openclash_wan_input th dport {$proxy_port,$tproxy_port,$cn_port,$http_port,$socks_port,$mixed_port,$dns_port} counter reject else LOG_OUT "Warning: Can't Settting Only Intranet Allowed Function, Get IPv4 WAN Interfaces error, Please Verify The Firewall's WAN Zone Name is wan, Ignore This IF The Device Does not Have a WAN Interfaces..." fi @@ -1450,27 +1475,15 @@ if [ -n "$FW4" ]; then ACBLACKDNSFILTER="$ACBLACKDNSFILTER ether saddr != @lan_ac_black_macs" fi fi - if [ -z "$en_mode_tun" ]; then - nft insert rule inet fw4 dstnat position 0 tcp dport 53 ${ACBLACKDNSFILTER} counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" - else - nft insert rule inet fw4 dstnat position 0 tcp dport 53 ${ACBLACKDNSFILTER} counter accept comment \"OpenClash DNS Hijack\" - fi - nft insert rule inet fw4 dstnat position 0 udp dport 53 ${ACBLACKDNSFILTER} counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" + nft insert rule inet fw4 dstnat position 0 meta l4proto {tcp,udp} th dport 53 ${ACBLACKDNSFILTER} counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" else - nft insert rule inet fw4 dstnat position 0 tcp dport 53 ip saddr @lan_ac_white_ips counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" - nft insert rule inet fw4 dstnat position 0 udp dport 53 ip saddr @lan_ac_white_ips counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" - nft insert rule inet fw4 dstnat position 0 tcp dport 53 ether saddr @lan_ac_white_macs counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" - nft insert rule inet fw4 dstnat position 0 udp dport 53 ether saddr @lan_ac_white_macs counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" + nft insert rule inet fw4 dstnat position 0 meta l4proto {tcp,udp} th dport 53 ip saddr @lan_ac_white_ips counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" + nft insert rule inet fw4 dstnat position 0 meta l4proto {tcp,udp} th dport 53 ether saddr @lan_ac_white_macs counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" fi fi if [ "$router_self_proxy" = 1 ]; then nft 'add chain inet fw4 nat_output { type nat hook output priority -1; }' - if [ -n "$en_mode_tun" ]; then - nft insert rule inet fw4 nat_output position 0 skuid != 65534 meta nfproto {ipv4} tcp dport 53 ip daddr {127.0.0.1} counter accept comment \"OpenClash DNS Hijack\" - else - nft insert rule inet fw4 nat_output position 0 skuid != 65534 meta nfproto {ipv4} tcp dport 53 ip daddr {127.0.0.1} counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" - fi - nft insert rule inet fw4 nat_output position 0 skuid != 65534 meta nfproto {ipv4} udp dport 53 ip daddr {127.0.0.1} counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" + nft insert rule inet fw4 nat_output position 0 skgid != 65534 meta l4proto {tcp,udp} th dport 53 ip daddr {127.0.0.1} counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" fi elif [ "$enable_redirect_dns" -eq 2 ]; then nft 'add chain inet fw4 openclash_dns_redirect' @@ -1484,28 +1497,15 @@ if [ -n "$FW4" ]; then ACBLACKDNSFILTER="$ACBLACKDNSFILTER ether saddr != @lan_ac_black_macs" fi fi - if [ -z "$en_mode_tun" ]; then - nft add rule inet fw4 openclash_dns_redirect tcp dport 53 ${ACBLACKDNSFILTER} counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" - else - nft add rule inet fw4 openclash_dns_redirect tcp dport 53 ${ACBLACKDNSFILTER} counter accept comment \"OpenClash DNS Hijack\" - fi - nft add rule inet fw4 openclash_dns_redirect udp dport 53 ${ACBLACKDNSFILTER} counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" + nft add rule inet fw4 openclash_dns_redirect meta l4proto {tcp,udp} th dport 53 ${ACBLACKDNSFILTER} counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" else - nft add rule inet fw4 openclash_dns_redirect tcp dport 53 ip saddr @lan_ac_white_ips counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" - nft add rule inet fw4 openclash_dns_redirect udp dport 53 ip saddr @lan_ac_white_ips counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" - nft add rule inet fw4 openclash_dns_redirect tcp dport 53 ether saddr @lan_ac_white_macs counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" - nft add rule inet fw4 openclash_dns_redirect udp dport 53 ether saddr @lan_ac_white_macs counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" + nft add rule inet fw4 openclash_dns_redirect meta l4proto {tcp,udp} th dport 53 ip saddr @lan_ac_white_ips counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" + nft add rule inet fw4 openclash_dns_redirect meta l4proto {tcp,udp} th dport 53 ether saddr @lan_ac_white_macs counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" fi - nft 'insert rule inet fw4 dstnat position 0 tcp dport 53 counter jump openclash_dns_redirect' - nft 'insert rule inet fw4 dstnat position 0 udp dport 53 counter jump openclash_dns_redirect' + nft 'insert rule inet fw4 dstnat position 0 meta l4proto {tcp,udp} th dport 53 counter jump openclash_dns_redirect' if [ "$router_self_proxy" = 1 ]; then nft 'add chain inet fw4 nat_output { type nat hook output priority -1; }' - if [ -n "$en_mode_tun" ]; then - nft insert rule inet fw4 nat_output position 0 skuid != 65534 meta nfproto {ipv4} tcp dport 53 ip daddr {127.0.0.1} counter accept comment \"OpenClash DNS Hijack\" - else - nft insert rule inet fw4 nat_output position 0 tcp dport 53 ip daddr {127.0.0.1} meta skuid != 65534 counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" - fi - nft insert rule inet fw4 nat_output position 0 udp dport 53 ip daddr {127.0.0.1} meta skuid != 65534 counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" + nft insert rule inet fw4 nat_output position 0 meta l4proto {tcp,udp} th dport 53 ip daddr {127.0.0.1} meta skgid != 65534 counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" fi fi @@ -1513,7 +1513,8 @@ if [ -n "$FW4" ]; then #tcp nft 'add chain inet fw4 openclash' nft 'flush chain inet fw4 openclash' - nft add rule inet fw4 openclash ip daddr @localnetwork counter return + nft 'add rule inet fw4 openclash ip daddr @localnetwork counter return' + nft 'add rule inet fw4 openclash ct direction reply counter return' if [ -z "$en_mode_tun" ] && [ "$en_mode" = "fake-ip" ]; then nft add rule inet fw4 openclash ip protocol tcp ip daddr { "$fakeip_range" } counter redirect to "$proxy_port" fi @@ -1528,7 +1529,7 @@ if [ -n "$FW4" ]; then fi if [ "$en_mode" = "redir-host" ]; then - nft 'add rule inet fw4 openclash tcp dport != @common_ports counter return' + nft 'add rule inet fw4 openclash th dport != @common_ports counter return' fi if [ "$china_ip_route" != "0" ]; then if [ "$china_ip_route" = "1" ]; then @@ -1553,9 +1554,8 @@ if [ -n "$FW4" ]; then nft 'add chain inet fw4 openclash_upnp' nft 'flush chain inet fw4 openclash_upnp' upnp_exclude - nft 'add rule inet fw4 openclash_mangle meta l4proto { udp } iifname lo counter return' - nft add rule inet fw4 openclash_mangle ip daddr @localnetwork counter return - nft 'add rule inet fw4 openclash_mangle udp dport 53 counter return' + nft 'add rule inet fw4 openclash_mangle ip daddr @localnetwork counter return' + nft 'add rule inet fw4 openclash_mangle ct direction reply counter return' if [ "$en_mode" = "fake-ip" ]; then nft add rule inet fw4 openclash_mangle meta l4proto { udp } ip daddr { "$fakeip_range" } mark set "$PROXY_FWMARK" tproxy ip to 127.0.0.1:"$tproxy_port" counter accept fi @@ -1570,7 +1570,7 @@ if [ -n "$FW4" ]; then fi if [ "$en_mode" = "redir-host" ]; then - nft 'add rule inet fw4 openclash_mangle udp dport != @common_ports counter return' + nft 'add rule inet fw4 openclash_mangle th dport != @common_ports counter return' fi if [ "$china_ip_route" != "0" ]; then if [ "$china_ip_route" = "1" ]; then @@ -1583,26 +1583,46 @@ if [ -n "$FW4" ]; then fi nft 'add rule inet fw4 openclash_mangle ip protocol udp counter jump openclash_upnp' - nft add rule inet fw4 openclash_mangle meta l4proto { udp } mark set "$PROXY_FWMARK" tproxy ip to 127.0.0.1:"$tproxy_port" counter accept nft 'add rule inet fw4 mangle_prerouting meta nfproto {ipv4} ip protocol udp counter jump openclash_mangle' - - elif [ "$en_mode" = "fake-ip" ]; then + fi + if [ "$enable_udp_proxy" -ne 1 ] && [ "$en_mode" = "fake-ip" ]; then modprobe nft_tproxy >/dev/null 2>&1 ip rule add fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" ip route add local 0.0.0.0/0 dev lo table "$PROXY_ROUTE_TABLE" nft 'add chain inet fw4 openclash_mangle' nft 'flush chain inet fw4 openclash_mangle' - nft 'add rule inet fw4 openclash_mangle meta l4proto { udp } iifname lo counter return' nft add rule inet fw4 openclash_mangle meta l4proto { udp } ip daddr { "$fakeip_range" } mark set "$PROXY_FWMARK" tproxy ip to 127.0.0.1:"$tproxy_port" counter accept 2>/dev/null nft 'add rule inet fw4 mangle_prerouting meta nfproto {ipv4} ip protocol udp counter jump openclash_mangle' + fi - if [ "$router_self_proxy" = "1" ] || ([ "$enable_redirect_dns" != "2" ] && [ "$en_mode" = "fake-ip" ]); then - nft 'add chain inet fw4 openclash_mangle_output' - nft 'flush chain inet fw4 openclash_mangle_output' - nft add rule inet fw4 openclash_mangle_output meta l4proto { udp } ip daddr { "$fakeip_range" } mark set "$PROXY_FWMARK" counter - nft 'add rule inet fw4 mangle_output meta nfproto {ipv4} ip protocol udp counter jump openclash_mangle_output' + #router self proxy udp + if ([ "$router_self_proxy" = "1" ] && [ "$enable_udp_proxy" -eq 1 ]) || ([ "$enable_redirect_dns" != "2" ] && [ "$en_mode" = "fake-ip" ]); then + nft 'add chain inet fw4 openclash_mangle_output' + nft 'flush chain inet fw4 openclash_mangle_output' + nft 'add rule inet fw4 openclash_mangle_output skgid == 65534 counter return' + nft 'add rule inet fw4 openclash_mangle_output ip daddr @localnetwork counter return' + nft 'add rule inet fw4 openclash_mangle_output ct direction reply counter return' + nft 'add rule inet fw4 openclash_mangle_output ip daddr @wan_ac_black_ips counter return' + if [ "$en_mode" = "redir-host" ]; then + nft add rule inet fw4 openclash_mangle_output th dport != @common_ports counter return fi + if [ "$en_mode" = "fake-ip" ]; then + nft add rule inet fw4 openclash_mangle_output meta l4proto { udp } ip daddr { "$fakeip_range" } mark set "$PROXY_FWMARK" counter accept + fi + if [ "$china_ip_route" != "0" ]; then + if [ "$china_ip_route" = "1" ]; then + rule="ip daddr @china_ip_route" + elif [ "$china_ip_route" = "2" ]; then + rule="ip daddr != @china_ip_route" + fi + [ "$enable_redirect_dns" != "2" ] && rule="$rule ip daddr != @china_ip_route_pass" + nft "add rule inet fw4 openclash_mangle_output $rule counter return" + fi + if [ "$router_self_proxy" = "1" ] && [ "$enable_udp_proxy" -eq 1 ]; then + nft add rule inet fw4 openclash_mangle_output mark set "$PROXY_FWMARK" counter accept + fi + nft 'add rule inet fw4 mangle_output meta nfproto {ipv4} ip protocol udp counter jump openclash_mangle_output' fi #quic @@ -1615,18 +1635,20 @@ if [ -n "$FW4" ]; then fi fi + #router self proxy tcp if [ "$router_self_proxy" = "1" ] || ([ "$enable_redirect_dns" != "2" ] && [ "$en_mode" = "fake-ip" ]); then nft 'add chain inet fw4 openclash_output' nft 'flush chain inet fw4 openclash_output' + nft 'add rule inet fw4 openclash_output skgid == 65534 counter return' nft 'add rule inet fw4 openclash_output ip daddr @localnetwork counter return' - + nft 'add rule inet fw4 openclash_output ct direction reply counter return' if [ "$en_mode" = "fake-ip" ] && [ "$en_mode_tun" != "1" ]; then - nft add rule inet fw4 openclash_output ip protocol tcp ip daddr { "$fakeip_range" } skuid != 65534 counter redirect to "$proxy_port" + nft add rule inet fw4 openclash_output ip protocol tcp ip daddr { "$fakeip_range" } counter redirect to "$proxy_port" fi if [ "$router_self_proxy" = "1" ]; then - nft 'add rule inet fw4 openclash_output skuid != 65534 ip daddr @wan_ac_black_ips counter return' + nft 'add rule inet fw4 openclash_output ip daddr @wan_ac_black_ips counter return' if [ "$en_mode" = "redir-host" ]; then - nft add rule inet fw4 openclash_output tcp dport != @common_ports skuid != 65534 counter return + nft add rule inet fw4 openclash_output th dport != @common_ports counter return fi if [ "$china_ip_route" != "0" ]; then if [ "$china_ip_route" = "1" ]; then @@ -1635,9 +1657,9 @@ if [ -n "$FW4" ]; then rule="ip daddr != @china_ip_route" fi [ "$enable_redirect_dns" != "2" ] && rule="$rule ip daddr != @china_ip_route_pass" - nft "add rule inet fw4 openclash_output skuid != 65534 $rule counter return" + nft "add rule inet fw4 openclash_output $rule counter return" fi - nft add rule inet fw4 openclash_output ip protocol tcp skuid != 65534 counter redirect to "$proxy_port" + nft add rule inet fw4 openclash_output ip protocol tcp counter redirect to "$proxy_port" fi nft 'add chain inet fw4 nat_output { type nat hook output priority -1; }' nft 'add rule inet fw4 nat_output meta nfproto {ipv4} ip protocol tcp counter jump openclash_output' @@ -1647,35 +1669,19 @@ if [ -n "$FW4" ]; then if [ -n "$en_mode_tun" ]; then #TUN模式 #设置防火墙 + #router self proxy if [ "$router_self_proxy" = "1" ] || ([ "$enable_redirect_dns" != "2" ] && [ "$en_mode" = "fake-ip" ]); then nft 'add chain inet fw4 openclash_mangle_output' nft 'flush chain inet fw4 openclash_mangle_output' - if [ "$enable_redirect_dns" != "0" ]; then - nft add rule inet fw4 openclash_mangle_output tcp dport 53 skuid != 65534 meta mark set "$PROXY_FWMARK" counter - fi + nft 'add rule inet fw4 openclash_mangle_output skgid == 65534 counter return' nft 'add rule inet fw4 openclash_mangle_output ip daddr @localnetwork counter return' - if [ "$en_mode" = "fake-ip" ]; then - if [ "$en_mode_tun" -eq 1 ]; then - nft add rule inet fw4 openclash_mangle_output meta l4proto {tcp,udp} th dport { 0-65535 } ip daddr { "$fakeip_range" } mark set "$PROXY_FWMARK" counter - if [ "$router_self_proxy" = "1" ]; then - nft 'add rule inet fw4 openclash_mangle_output skuid != 65534 ip daddr @wan_ac_black_ips counter return' - if [ "$china_ip_route" != "0" ]; then - if [ "$china_ip_route" = "1" ]; then - rule="ip daddr @china_ip_route" - elif [ "$china_ip_route" = "2" ]; then - rule="ip daddr != @china_ip_route" - fi - [ "$enable_redirect_dns" != "2" ] && rule="$rule ip daddr != @china_ip_route_pass" - nft "add rule inet fw4 openclash_mangle_output skuid != 65534 $rule counter return" - fi - nft add rule inet fw4 openclash_mangle_output tcp dport { 0-65535 } skuid != 65534 meta mark set "$PROXY_FWMARK" counter - fi - else - nft add rule inet fw4 openclash_mangle_output skuid != 65534 udp dport { 0-65535 } ip daddr { "$fakeip_range" } meta mark set "$PROXY_FWMARK" counter - fi - elif [ "$en_mode" = "redir-host" ] && [ "$en_mode_tun" -eq 1 ]; then - nft 'add rule inet fw4 openclash_mangle_output skuid != 65534 ip daddr @wan_ac_black_ips counter return' - nft 'add rule inet fw4 openclash_mangle_output meta l4proto {tcp,udp} th dport != @common_ports skuid != 65534 counter return' + nft 'add rule inet fw4 openclash_mangle_output ct direction reply counter return' + nft add rule inet fw4 openclash_mangle_output meta l4proto {tcp,udp} ip daddr { "$fakeip_range" } mark set "$PROXY_FWMARK" counter + if [ "$en_mode" = "redir-host" ]; then + nft 'add rule inet fw4 openclash_mangle_output th dport != @common_ports counter return' + fi + if [ "$router_self_proxy" = "1" ]; then + nft 'add rule inet fw4 openclash_mangle_output ip daddr @wan_ac_black_ips counter return' if [ "$china_ip_route" != "0" ]; then if [ "$china_ip_route" = "1" ]; then rule="ip daddr @china_ip_route" @@ -1683,24 +1689,27 @@ if [ -n "$FW4" ]; then rule="ip daddr != @china_ip_route" fi [ "$enable_redirect_dns" != "2" ] && rule="$rule ip daddr != @china_ip_route_pass" - nft "add rule inet fw4 openclash_mangle_output skuid != 65534 $rule counter return" + nft "add rule inet fw4 openclash_mangle_output $rule counter return" + fi + if [ "$en_mode_tun" -eq 1 ]; then + nft add rule inet fw4 openclash_mangle_output meta l4proto {tcp,udp} meta mark set "$PROXY_FWMARK" counter + else + nft add rule inet fw4 openclash_mangle_output meta l4proto { udp } meta mark set "$PROXY_FWMARK" counter fi - nft add rule inet fw4 openclash_mangle_output tcp dport { 0-65535 } skuid != 65534 meta mark set "$PROXY_FWMARK" counter fi nft 'add rule inet fw4 mangle_output meta nfproto {ipv4} meta l4proto {tcp,udp} counter jump openclash_mangle_output' fi nft 'add chain inet fw4 openclash_mangle' nft 'flush chain inet fw4 openclash_mangle' - nft 'add chain inet fw4 openclash_dns_hijack' - nft 'flush chain inet fw4 openclash_dns_hijack' nft 'add chain inet fw4 openclash_upnp' nft 'flush chain inet fw4 openclash_upnp' upnp_exclude #其他流量 nft 'add rule inet fw4 openclash_mangle meta l4proto {tcp,udp} iifname utun counter return' - nft add rule inet fw4 openclash_mangle ip daddr @localnetwork counter return + nft 'add rule inet fw4 openclash_mangle ip daddr @localnetwork counter return' + nft 'add rule inet fw4 openclash_mangle ct direction reply counter return' nft 'add rule inet fw4 openclash_mangle ip daddr @wan_ac_black_ips counter return' nft 'add rule inet fw4 openclash_mangle ip saddr @lan_ac_black_ips counter return' nft 'add rule inet fw4 openclash_mangle ether saddr @lan_ac_black_macs counter return' @@ -1712,7 +1721,7 @@ if [ -n "$FW4" ]; then fi if [ "$en_mode" = "redir-host" ]; then - nft 'add rule inet fw4 openclash_mangle meta l4proto {tcp,udp} th dport != @common_ports counter return' + nft 'add rule inet fw4 openclash_mangle th dport != @common_ports counter return' fi if [ "$china_ip_route" != "0" ]; then if [ "$china_ip_route" = "1" ]; then @@ -1724,23 +1733,11 @@ if [ -n "$FW4" ]; then nft "add rule inet fw4 openclash_mangle $rule counter return" fi nft 'add rule inet fw4 openclash_mangle ip protocol udp counter jump openclash_upnp' - nft add rule inet fw4 openclash_mangle meta l4proto {tcp,udp} th dport { 0-65535 } mark set "$PROXY_FWMARK" counter + nft add rule inet fw4 openclash_mangle mark set "$PROXY_FWMARK" counter if [ "$en_mode_tun" -eq 1 ]; then nft 'add rule inet fw4 mangle_prerouting meta nfproto {ipv4} meta l4proto {tcp,udp} counter jump openclash_mangle' else - if [ "$enable_redirect_dns" -eq 1 ]; then - nft 'add rule inet fw4 mangle_prerouting meta nfproto {ipv4} tcp dport 53 counter jump openclash_dns_hijack' - nft 'add rule inet fw4 openclash_dns_hijack ip saddr @lan_ac_black_ips counter return' - nft 'add rule inet fw4 openclash_dns_hijack ether saddr @lan_ac_black_macs counter return' - if [ "$lan_ac_mode" = "1" ] && [ -n "$(uci -q get openclash.config.lan_ac_white_ips)" ] && [ -n "$(uci -q get openclash.config.lan_ac_white_macs)" ]; then - nft 'add rule inet fw4 openclash_dns_hijack ether saddr != @lan_ac_white_macs ip saddr != @lan_ac_white_ips counter return' - else - nft 'add rule inet fw4 openclash_dns_hijack ether saddr != @lan_ac_white_macs counter return' - nft 'add rule inet fw4 openclash_dns_hijack ip saddr != @lan_ac_white_ips counter return' - fi - nft add rule inet fw4 openclash_dns_hijack meta nfproto {ipv4} tcp dport 53 mark set "$PROXY_FWMARK" comment \"OpenClash TCP DNS Hijack\" counter - fi nft 'add rule inet fw4 mangle_prerouting meta nfproto {ipv4} ip protocol udp counter jump openclash_mangle' fi @@ -1799,26 +1796,14 @@ if [ -n "$FW4" ]; then ACBLACKDNSFILTER="$ACBLACKDNSFILTER ether saddr != @lan_ac_black_macs" fi fi - if [ "$ipv6_mode" -eq 2 ] || [ "$ipv6_mode" -eq 3 ]; then - nft insert rule inet fw4 dstnat position 0 meta nfproto {ipv6} tcp dport 53 ${ACBLACKDNSFILTER} counter accept comment \"OpenClash DNS Hijack\" - else - nft insert rule inet fw4 dstnat position 0 meta nfproto {ipv6} tcp dport 53 ${ACBLACKDNSFILTER} counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" - fi - nft insert rule inet fw4 dstnat position 0 meta nfproto {ipv6} udp dport 53 ${ACBLACKDNSFILTER} counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" + nft insert rule inet fw4 dstnat position 0 meta nfproto {ipv6} ip6 nexthdr {tcp,udp} th dport 53 ${ACBLACKDNSFILTER} counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" else - nft insert rule inet fw4 dstnat position 0 meta nfproto {ipv6} tcp dport 53 ip6 saddr @lan_ac_white_ipv6s counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" - nft insert rule inet fw4 dstnat position 0 meta nfproto {ipv6} udp dport 53 ip6 saddr @lan_ac_white_ipv6s counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" - nft insert rule inet fw4 dstnat position 0 meta nfproto {ipv6} tcp dport 53 ether saddr @lan_ac_white_macs counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" - nft insert rule inet fw4 dstnat position 0 meta nfproto {ipv6} udp dport 53 ether saddr @lan_ac_white_macs counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" + nft insert rule inet fw4 dstnat position 0 meta nfproto {ipv6} ip6 nexthdr {tcp,udp} th dport 53 ip6 saddr @lan_ac_white_ipv6s counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" + nft insert rule inet fw4 dstnat position 0 meta nfproto {ipv6} ip6 nexthdr {tcp,udp} th dport 53 ether saddr @lan_ac_white_macs counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" fi if [ "$router_self_proxy" = 1 ]; then nft 'add chain inet fw4 nat_output { type nat hook output priority -1; }' - if [ "$ipv6_mode" -eq 2 ] || [ "$ipv6_mode" -eq 3 ]; then - nft insert rule inet fw4 nat_output position 0 skuid != 65534 meta nfproto {ipv6} tcp dport 53 ip6 daddr {::/0} counter accept comment \"OpenClash DNS Hijack\" - else - nft insert rule inet fw4 nat_output position 0 skuid != 65534 meta nfproto {ipv6} tcp dport 53 ip6 daddr {::/0} counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" - fi - nft insert rule inet fw4 nat_output position 0 skuid != 65534 meta nfproto {ipv6} udp dport 53 ip6 daddr {::/0} counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" + nft insert rule inet fw4 nat_output position 0 skgid != 65534 meta nfproto {ipv6} ip6 nexthdr {tcp,udp} th dport 53 ip6 daddr {::/0} counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" fi elif [ "$enable_redirect_dns" -eq 2 ]; then if [ "$lan_ac_mode" != "1" ]; then @@ -1831,28 +1816,15 @@ if [ -n "$FW4" ]; then ACBLACKDNSFILTER="$ACBLACKDNSFILTER ether saddr != @lan_ac_black_macs" fi fi - if [ "$ipv6_mode" -eq 2 ] || [ "$ipv6_mode" -eq 3 ]; then - nft add rule inet fw4 openclash_dns_redirect meta nfproto {ipv6} tcp dport 53 ${ACBLACKDNSFILTER} counter accept comment \"OpenClash DNS Hijack\" - else - nft add rule inet fw4 openclash_dns_redirect meta nfproto {ipv6} tcp dport 53 ${ACBLACKDNSFILTER} counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" - fi - nft add rule inet fw4 openclash_dns_redirect meta nfproto {ipv6} udp dport 53 ${ACBLACKDNSFILTER} counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" + nft add rule inet fw4 openclash_dns_redirect meta nfproto {ipv6} ip6 nexthdr {tcp,udp} th dport 53 ${ACBLACKDNSFILTER} counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" else - nft add rule inet fw4 openclash_dns_redirect meta nfproto {ipv6} tcp dport 53 ip6 saddr @lan_ac_white_ipv6s counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" - nft add rule inet fw4 openclash_dns_redirect meta nfproto {ipv6} udp dport 53 ip6 saddr @lan_ac_white_ipv6s counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" - nft add rule inet fw4 openclash_dns_redirect meta nfproto {ipv6} tcp dport 53 ether saddr @lan_ac_white_macs counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" - nft add rule inet fw4 openclash_dns_redirect meta nfproto {ipv6} udp dport 53 ether saddr @lan_ac_white_macs counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" + nft add rule inet fw4 openclash_dns_redirect meta nfproto {ipv6} ip6 nexthdr {tcp,udp} th dport 53 ip6 saddr @lan_ac_white_ipv6s counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" + nft add rule inet fw4 openclash_dns_redirect meta nfproto {ipv6} ip6 nexthdr {tcp,udp} th dport 53 ether saddr @lan_ac_white_macs counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" fi - nft 'insert rule inet fw4 dstnat position 0 meta nfproto {ipv6} tcp dport 53 counter jump openclash_dns_redirect' - nft 'insert rule inet fw4 dstnat position 0 meta nfproto {ipv6} udp dport 53 counter jump openclash_dns_redirect' + nft 'insert rule inet fw4 dstnat position 0 meta nfproto {ipv6} ip6 nexthdr {tcp,udp} th dport 53 counter jump openclash_dns_redirect' if [ "$router_self_proxy" = 1 ]; then nft 'add chain inet fw4 nat_output { type nat hook output priority -1; }' - if [ "$ipv6_mode" -eq 2 ] || [ "$ipv6_mode" -eq 3 ]; then - nft insert rule inet fw4 nat_output position 0 skuid != 65534 meta nfproto {ipv6} tcp dport 53 ip6 daddr {::/0} counter accept comment \"OpenClash DNS Hijack\" - else - nft insert rule inet fw4 nat_output position 0 meta nfproto {ipv6} tcp dport 53 ip6 daddr {::/0} meta skuid != 65534 counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" - fi - nft insert rule inet fw4 nat_output position 0 meta nfproto {ipv6} udp dport 53 ip6 daddr {::/0} meta skuid != 65534 counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" + nft insert rule inet fw4 nat_output position 0 meta nfproto {ipv6} ip6 nexthdr {tcp,udp} th dport 53 ip6 daddr {::/0} meta skgid != 65534 counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" fi fi fi @@ -1879,7 +1851,8 @@ if [ -n "$FW4" ]; then #tcp nft 'add chain inet fw4 openclash_v6' nft 'flush chain inet fw4 openclash_v6' - nft add rule inet fw4 openclash_v6 ip6 daddr @localnetwork6 counter return + nft 'add rule inet fw4 openclash_v6 ip6 daddr @localnetwork6 counter return' + nft 'add rule inet fw4 openclash_v6 ct direction reply counter return' nft 'add rule inet fw4 openclash_v6 ip6 daddr @wan_ac_black_ipv6s counter return' nft 'add rule inet fw4 openclash_v6 ip6 saddr @lan_ac_black_ipv6s counter return' nft 'add rule inet fw4 openclash_v6 ether saddr @lan_ac_black_macs counter return' @@ -1891,7 +1864,7 @@ if [ -n "$FW4" ]; then fi if [ "$en_mode" = "redir-host" ]; then - nft 'add rule inet fw4 openclash_v6 meta nfproto {ipv6} th dport != @common_ports counter return' + nft 'add rule inet fw4 openclash_v6 th dport != @common_ports counter return' fi if [ "$china_ip6_route" != "0" ]; then @@ -1903,48 +1876,20 @@ if [ -n "$FW4" ]; then [ "$enable_redirect_dns" != "2" ] && rule="$rule ip6 daddr != @china_ip6_route_pass" nft "add rule inet fw4 openclash_v6 $rule counter return" fi - nft add rule inet fw4 openclash_v6 meta nfproto {ipv6} tcp dport { 0-65535 } counter redirect to "$proxy_port" - nft 'add rule inet fw4 dstnat meta nfproto {ipv6} tcp dport { 0-65535 } counter jump openclash_v6' - fi - - #tproxy not support output chain - if [ "$ipv6_mode" -ne 2 ]; then - if [ "$router_self_proxy" = "1" ]; then - nft 'add chain inet fw4 openclash_output_v6' - nft 'flush chain inet fw4 openclash_output_v6' - nft 'add rule inet fw4 openclash_output_v6 ip6 daddr @localnetwork6 counter return' - nft 'add rule inet fw4 openclash_output_v6 skuid != 65534 ip6 daddr @wan_ac_black_ipv6s counter return' - if [ "$en_mode" = "redir-host" ]; then - nft 'add rule inet fw4 openclash_output_v6 meta nfproto {ipv6} th dport != @common_ports skuid != 65534 counter return' - fi - - if [ "$china_ip6_route" != "0" ]; then - if [ "$china_ip6_route" = "1" ]; then - rule="ip6 daddr @china_ip6_route" - elif [ "$china_ip6_route" = "2" ]; then - rule="ip6 daddr != @china_ip6_route" - fi - [ "$enable_redirect_dns" != "2" ] && rule="$rule ip6 daddr != @china_ip6_route_pass" - nft "add rule inet fw4 openclash_output_v6 skuid != 65534 $rule counter return" - fi - - nft add rule inet fw4 openclash_output_v6 meta nfproto {ipv6} skuid != 65534 tcp dport { 0-65535 } counter redirect to "$proxy_port" - nft 'add chain inet fw4 nat_output { type nat hook output priority -1; }' - nft 'add rule inet fw4 nat_output meta nfproto {ipv6} counter jump openclash_output_v6' - fi + nft add rule inet fw4 openclash_v6 ip6 nexthdr {tcp} counter redirect to "$proxy_port" + nft 'add rule inet fw4 dstnat ip6 nexthdr {tcp} counter jump openclash_v6' fi #TProxy & TUN & Redirect udp if [ "$enable_v6_udp_proxy" -eq 1 ] || [ "$ipv6_mode" -ne 1 ]; then nft 'add chain inet fw4 openclash_mangle_v6' nft 'flush chain inet fw4 openclash_mangle_v6' - nft 'add rule inet fw4 openclash_mangle_v6 meta nfproto {ipv6} udp iifname lo counter return' - nft add rule inet fw4 openclash_mangle_v6 ip6 daddr @localnetwork6 counter return - nft 'add rule inet fw4 openclash_mangle_v6 meta nfproto {ipv6} udp dport 53 counter return' + nft 'add rule inet fw4 openclash_mangle_v6 ip6 daddr @localnetwork6 counter return' + nft 'add rule inet fw4 openclash_mangle_v6 ct direction reply counter return' nft 'add rule inet fw4 openclash_mangle_v6 ip6 daddr @wan_ac_black_ipv6s counter return' if [ "$en_mode" == "redir-host" ]; then - nft 'add rule inet fw4 openclash_mangle_v6 meta nfproto {ipv6} th dport != @common_ports counter return' + nft 'add rule inet fw4 openclash_mangle_v6 th dport != @common_ports counter return' fi nft 'add rule inet fw4 openclash_mangle_v6 ip6 saddr @lan_ac_black_ipv6s counter return' @@ -1970,48 +1915,85 @@ if [ -n "$FW4" ]; then #tcp Tproxy && TUN if [ "$ipv6_mode" -ne 1 ] && [ "$ipv6_mode" -ne 3 ]; then if [ "$ipv6_mode" -eq 0 ]; then - nft add rule inet fw4 openclash_mangle_v6 meta nfproto {ipv6} tcp dport { 0-65535 } mark set "$PROXY_FWMARK" tproxy ip6 to :"$tproxy_port" counter accept comment \"OpenClash TCP Tproxy\" + nft add rule inet fw4 openclash_mangle_v6 ip6 nexthdr {tcp} mark set "$PROXY_FWMARK" tproxy ip6 to :"$tproxy_port" counter accept comment \"OpenClash TCP Tproxy\" else - nft add rule inet fw4 openclash_mangle_v6 meta nfproto {ipv6} tcp dport { 0-65535 } mark set "$PROXY_FWMARK" counter - fi - - if [ "$router_self_proxy" = "1" ]; then - if [ "$ipv6_mode" -eq 2 ]; then - nft 'add chain inet fw4 openclash_mangle_output_v6' - nft 'flush chain inet fw4 openclash_mangle_output_v6' - nft add rule inet fw4 openclash_mangle_output_v6 meta nfproto {ipv6} skuid != 65534 tcp dport 53 mark set "$PROXY_FWMARK" counter - nft 'add rule inet fw4 openclash_mangle_output_v6 ip6 daddr @localnetwork6 counter return' - nft 'add rule inet fw4 openclash_mangle_output_v6 skuid != 65534 ip6 daddr @wan_ac_black_ipv6s counter return' - if [ "$en_mode" = "redir-host" ]; then - nft 'add rule inet fw4 openclash_mangle_output_v6 meta nfproto {ipv6} th dport != @common_ports skuid != 65534 counter return' - fi - - if [ "$china_ip6_route" != "0" ]; then - if [ "$china_ip6_route" = "1" ]; then - rule="ip6 daddr @china_ip6_route" - elif [ "$china_ip6_route" = "2" ]; then - rule="ip6 daddr != @china_ip6_route" - fi - [ "$enable_redirect_dns" != "2" ] && rule="$rule ip6 daddr != @china_ip6_route_pass" - nft 'add rule inet fw4 openclash_mangle_output_v6 skuid != 65534 $rule counter return' - fi - nft add rule inet fw4 openclash_mangle_output_v6 meta nfproto {ipv6} skuid != 65534 tcp dport { 0-65535 } mark set "$PROXY_FWMARK" counter - nft 'add rule inet fw4 mangle_output meta nfproto {ipv6} counter jump openclash_mangle_output_v6' - fi + nft add rule inet fw4 openclash_mangle_v6 ip6 nexthdr {tcp} mark set "$PROXY_FWMARK" counter fi fi #udp if [ "$ipv6_mode" -eq 2 ] || [ "$ipv6_mode" -eq 3 ]; then - nft add rule inet fw4 openclash_mangle_v6 meta nfproto {ipv6} udp dport { 0-65535 } mark set "$PROXY_FWMARK" counter + nft add rule inet fw4 openclash_mangle_v6 ip6 nexthdr {udp} mark set "$PROXY_FWMARK" counter else if [ "$enable_v6_udp_proxy" -eq 1 ]; then - nft add rule inet fw4 openclash_mangle_v6 meta nfproto {ipv6} udp dport { 0-65535 } mark set "$PROXY_FWMARK" tproxy ip6 to :"$tproxy_port" counter accept comment \"OpenClash UDP Tproxy\" + nft add rule inet fw4 openclash_mangle_v6 ip6 nexthdr {udp} mark set "$PROXY_FWMARK" tproxy ip6 to :"$tproxy_port" counter accept comment \"OpenClash UDP Tproxy\" fi fi nft 'add rule inet fw4 mangle_prerouting meta nfproto {ipv6} counter jump openclash_mangle_v6' + #router self proxy + if [ "$router_self_proxy" = "1" ]; then + if [ "$ipv6_mode" -eq 1 ] || [ "$ipv6_mode" -eq 3 ]; then + #tcp Redirect Mode + nft 'add chain inet fw4 openclash_output_v6' + nft 'flush chain inet fw4 openclash_output_v6' + nft 'add rule inet fw4 openclash_output_v6 skgid == 65534 counter return' + nft 'add rule inet fw4 openclash_output_v6 ip6 daddr @localnetwork6 counter return' + nft 'add rule inet fw4 openclash_output_v6 ct direction reply counter return' + nft 'add rule inet fw4 openclash_output_v6 ip6 daddr @wan_ac_black_ipv6s counter return' + if [ "$en_mode" = "redir-host" ]; then + nft 'add rule inet fw4 openclash_output_v6 th dport != @common_ports counter return' + fi + + if [ "$china_ip6_route" != "0" ]; then + if [ "$china_ip6_route" = "1" ]; then + rule="ip6 daddr @china_ip6_route" + elif [ "$china_ip6_route" = "2" ]; then + rule="ip6 daddr != @china_ip6_route" + fi + [ "$enable_redirect_dns" != "2" ] && rule="$rule ip6 daddr != @china_ip6_route_pass" + nft "add rule inet fw4 openclash_output_v6 $rule counter return" + fi + + nft add rule inet fw4 openclash_output_v6 ip6 nexthdr {tcp} counter redirect to "$proxy_port" + nft 'add chain inet fw4 nat_output { type nat hook output priority -1; }' + nft 'add rule inet fw4 nat_output meta nfproto {ipv6} counter jump openclash_output_v6' + fi + + #other mode and Redirect Mode udp + nft 'add chain inet fw4 openclash_mangle_output_v6' + nft 'flush chain inet fw4 openclash_mangle_output_v6' + nft 'add rule inet fw4 openclash_mangle_output_v6 skgid == 65534 counter return' + nft 'add rule inet fw4 openclash_mangle_output_v6 ip6 daddr @localnetwork6 counter return' + nft 'add rule inet fw4 openclash_mangle_output_v6 ct direction reply counter return' + nft 'add rule inet fw4 openclash_mangle_output_v6 ip6 daddr @wan_ac_black_ipv6s counter return' + if [ "$en_mode" = "redir-host" ]; then + nft 'add rule inet fw4 openclash_mangle_output_v6 th dport != @common_ports counter return' + fi + + if [ "$china_ip6_route" != "0" ]; then + if [ "$china_ip6_route" = "1" ]; then + rule="ip6 daddr @china_ip6_route" + elif [ "$china_ip6_route" = "2" ]; then + rule="ip6 daddr != @china_ip6_route" + fi + [ "$enable_redirect_dns" != "2" ] && rule="$rule ip6 daddr != @china_ip6_route_pass" + nft 'add rule inet fw4 openclash_mangle_output_v6 $rule counter return' + fi + + if ([ "$ipv6_mode" -eq 1 ] && [ "$enable_v6_udp_proxy" -eq 1 ]) || [ "$ipv6_mode" -eq 3 ]; then + nft add rule inet fw4 openclash_mangle_output_v6 ip6 nexthdr {udp} mark set "$PROXY_FWMARK" counter + fi + if ([ "$ipv6_mode" -eq 0 ] && [ "$enable_v6_udp_proxy" -eq 1 ]) || [ "$ipv6_mode" -eq 2 ]; then + nft add rule inet fw4 openclash_mangle_output_v6 ip6 nexthdr {tcp,udp} mark set "$PROXY_FWMARK" counter + fi + if [ "$ipv6_mode" -eq 0 ] && [ "$enable_v6_udp_proxy" -ne 1 ]; then + nft add rule inet fw4 openclash_mangle_output_v6 ip6 nexthdr {tcp} mark set "$PROXY_FWMARK" counter + fi + nft 'add rule inet fw4 mangle_output meta nfproto {ipv6} counter jump openclash_mangle_output_v6' + fi + #route if [ "$ipv6_mode" -ne 2 ] && [ "$ipv6_mode" -ne 3 ]; then if [ "$enable_v6_udp_proxy" -eq 1 ] || [ "$ipv6_mode" -eq 0 ]; then @@ -2049,9 +2031,11 @@ if [ -n "$FW4" ]; then #nft 'delete chain inet fw4 openclash_post_v6' nft 'add chain inet fw4 openclash_post_v6' nft 'flush chain inet fw4 openclash_post_v6' - nft add rule inet fw4 openclash_post_v6 meta nfproto {ipv6} meta mark "$PROXY_FWMARK" counter accept + nft 'add rule inet fw4 openclash_post_v6 skgid == 65534 counter return' + nft add rule inet fw4 openclash_post_v6 mark "$PROXY_FWMARK" counter accept nft 'add rule inet fw4 openclash_post_v6 ip6 daddr @localnetwork6 counter return' - nft 'add rule inet fw4 openclash_post_v6 meta nfproto {ipv6} fib saddr type != { local } meta skuid != 65534 counter masquerade' + nft 'add rule inet fw4 openclash_post_v6 ct direction reply counter return' + nft 'add rule inet fw4 openclash_post_v6 fib saddr type != { local } counter masquerade' nft add rule inet fw4 srcnat meta nfproto {ipv6} counter jump openclash_post_v6 comment \"OpenClash Bypass Gateway Compatible\" fi @@ -2070,8 +2054,7 @@ if [ -n "$FW4" ]; then #nft delete rule inet fw4 input $(nft -a list chain inet fw4 input |grep "@localnetwork6" |awk -F '# ' '{print$2}') nft insert rule inet fw4 input position 0 iifname "$wan6_int" ip6 saddr != @localnetwork6 counter jump openclash_wan6_input done - nft add rule inet fw4 openclash_wan6_input udp dport {$proxy_port,$tproxy_port,$cn_port,$http_port,$socks_port,$mixed_port,$dns_port} counter reject - nft add rule inet fw4 openclash_wan6_input tcp dport {$proxy_port,$tproxy_port,$cn_port,$http_port,$socks_port,$mixed_port,$dns_port} counter reject + nft add rule inet fw4 openclash_wan6_input ip6 nexthdr {tcp,udp} th dport {$proxy_port,$tproxy_port,$cn_port,$http_port,$socks_port,$mixed_port,$dns_port} counter reject else LOG_OUT "Warning: Can't Settting Only Intranet Allowed Function, Get IPv6 WAN Interfaces error, Please Verify The Firewall's WAN Zone Name is wan, Ignore This IF The Device Does not Have a WAN Interfaces..." fi @@ -2083,10 +2066,12 @@ fi 2>/dev/null if [ -z "$FW4" ]; then #iptables owner module if [ "$iptables_compat" -eq 0 ]; then - owner="-m mark ! --mark 0x1a0a" + owner="-m mark --mark 0x1a0a" + noowner="-m mark ! --mark 0x1a0a" addr_local="! -i lo" else - owner="-m owner ! --uid-owner 65534" + owner="-m owner --gid-owner 65534" + noowner="-m owner ! --gid-owner 65534" addr_local="-m addrtype ! --src-type LOCAL" fi @@ -2176,9 +2161,11 @@ if [ -z "$FW4" ]; then if [ "$bypass_gateway_compatible" -eq 1 ]; then iptables -t nat -N openclash_post iptables -t nat -F openclash_post + iptables -t nat -A openclash_post $owner -j RETURN iptables -t nat -A openclash_post -m mark --mark "$PROXY_FWMARK" -j ACCEPT iptables -t nat -A openclash_post -m set --match-set localnetwork dst -j RETURN - iptables -t nat -A openclash_post $addr_local $owner -j MASQUERADE + iptables -t nat -A openclash_post -m conntrack --ctdir REPLY -j RETURN + iptables -t nat -A openclash_post $addr_local -j MASQUERADE iptables -t nat -A POSTROUTING -m comment --comment "OpenClash Bypass Gateway Compatible" -j openclash_post fi @@ -2221,11 +2208,7 @@ if [ -z "$FW4" ]; then fi fi iptables -t nat -I PREROUTING -p udp --dport 53 ${ACBLACKDNSFILTER} -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" - if [ -z "$en_mode_tun" ]; then - iptables -t nat -I PREROUTING -p tcp --dport 53 ${ACBLACKDNSFILTER} -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" - else - iptables -t nat -I PREROUTING -p tcp --dport 53 ${ACBLACKDNSFILTER} -j ACCEPT -m comment --comment "OpenClash DNS Hijack" - fi + iptables -t nat -I PREROUTING -p tcp --dport 53 ${ACBLACKDNSFILTER} -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" else iptables -t nat -I PREROUTING -p udp --dport 53 -m set --match-set lan_ac_white_ips src -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" iptables -t nat -I PREROUTING -p tcp --dport 53 -m set --match-set lan_ac_white_ips src -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" @@ -2234,12 +2217,8 @@ if [ -z "$FW4" ]; then fi fi if [ "$router_self_proxy" = 1 ]; then - if [ -n "$en_mode_tun" ]; then - iptables -t nat -I OUTPUT $owner -m comment --comment "OpenClash DNS Hijack" -p tcp --dport 53 -d 127.0.0.1 -j ACCEPT - else - iptables -t nat -I OUTPUT $owner -m comment --comment "OpenClash DNS Hijack" -p tcp --dport 53 -d 127.0.0.1 -j REDIRECT --to-ports "$DNSPORT" - fi - iptables -t nat -I OUTPUT $owner -m comment --comment "OpenClash DNS Hijack" -p udp --dport 53 -d 127.0.0.1 -j REDIRECT --to-ports "$DNSPORT" + iptables -t nat -I OUTPUT $noowner -m comment --comment "OpenClash DNS Hijack" -p tcp --dport 53 -d 127.0.0.1 -j REDIRECT --to-ports "$DNSPORT" + iptables -t nat -I OUTPUT $noowner -m comment --comment "OpenClash DNS Hijack" -p udp --dport 53 -d 127.0.0.1 -j REDIRECT --to-ports "$DNSPORT" fi elif [ "$enable_redirect_dns" -eq 2 ]; then iptables -t nat -N openclash_dns_redirect @@ -2255,11 +2234,7 @@ if [ -z "$FW4" ]; then fi fi iptables -t nat -A openclash_dns_redirect -p udp --dport 53 ${ACBLACKDNSFILTER} -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" - if [ -z "$en_mode_tun" ]; then - iptables -t nat -A openclash_dns_redirect -p tcp --dport 53 ${ACBLACKDNSFILTER} -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" - else - iptables -t nat -A openclash_dns_redirect -p tcp --dport 53 ${ACBLACKDNSFILTER} -j ACCEPT -m comment --comment "OpenClash DNS Hijack" - fi + iptables -t nat -A openclash_dns_redirect -p tcp --dport 53 ${ACBLACKDNSFILTER} -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" else iptables -t nat -A openclash_dns_redirect -p udp --dport 53 -m set --match-set lan_ac_white_ips src -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" iptables -t nat -A openclash_dns_redirect -p tcp --dport 53 -m set --match-set lan_ac_white_ips src -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" @@ -2269,12 +2244,8 @@ if [ -z "$FW4" ]; then iptables -t nat -I PREROUTING -p udp --dport 53 -j openclash_dns_redirect iptables -t nat -I PREROUTING -p tcp --dport 53 -j openclash_dns_redirect if [ "$router_self_proxy" = 1 ]; then - iptables -t nat -I OUTPUT -p udp --dport 53 -d 127.0.0.1 $owner -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" - if [ -n "$en_mode_tun" ]; then - iptables -t nat -I OUTPUT $owner -m comment --comment "OpenClash DNS Hijack" -p tcp --dport 53 -d 127.0.0.1 -j ACCEPT - else - iptables -t nat -I OUTPUT -p tcp --dport 53 -d 127.0.0.1 $owner -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" - fi + iptables -t nat -I OUTPUT -p udp --dport 53 -d 127.0.0.1 $noowner -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" + iptables -t nat -I OUTPUT -p tcp --dport 53 -d 127.0.0.1 $noowner -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" fi fi @@ -2283,6 +2254,7 @@ if [ -z "$FW4" ]; then iptables -t nat -N openclash iptables -t nat -F openclash iptables -t nat -A openclash -m set --match-set localnetwork dst -j RETURN + iptables -t nat -A openclash -m conntrack --ctdir REPLY -j RETURN if [ -z "$en_mode_tun" ] && [ "$en_mode" = "fake-ip" ]; then iptables -t nat -A openclash -p tcp -d "$fakeip_range" -j REDIRECT --to-ports "$proxy_port" fi @@ -2321,10 +2293,8 @@ if [ -z "$FW4" ]; then iptables -t mangle -N openclash_upnp iptables -t mangle -F openclash_upnp upnp_exclude - #prevent tproxy loop - iptables -t mangle -A openclash -i lo -j RETURN iptables -t mangle -A openclash -m set --match-set localnetwork dst -j RETURN - iptables -t mangle -A openclash -p udp --dport 53 -j RETURN >/dev/null 2>&1 + iptables -t mangle -A openclash -m conntrack --ctdir REPLY -j RETURN if [ "$en_mode" = "fake-ip" ]; then iptables -t mangle -A openclash -p udp -d "$fakeip_range" -j TPROXY --on-port "$tproxy_port" --tproxy-mark "$PROXY_FWMARK" fi @@ -2352,23 +2322,44 @@ if [ -z "$FW4" ]; then iptables -t mangle -A openclash -p udp -j openclash_upnp >/dev/null 2>&1 iptables -t mangle -A openclash -p udp -j TPROXY --on-port "$tproxy_port" --tproxy-mark "$PROXY_FWMARK" iptables -t mangle -A PREROUTING -p udp -j openclash + fi - elif [ "$en_mode" = "fake-ip" ]; then + if [ "$enable_udp_proxy" -ne 1 ] && [ "$en_mode" = "fake-ip" ]; then modprobe xt_TPROXY >/dev/null 2>&1 ip rule add fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" ip route add local 0.0.0.0/0 dev lo table "$PROXY_ROUTE_TABLE" iptables -t mangle -N openclash iptables -t mangle -F openclash - #prevent tproxy loop - iptables -t mangle -A openclash -i lo -j RETURN iptables -t mangle -A openclash -p udp -d "$fakeip_range" -j TPROXY --on-port "$tproxy_port" --tproxy-mark "$PROXY_FWMARK" iptables -t mangle -A PREROUTING -p udp -j openclash fi - if [ "$router_self_proxy" = "1" ] || ([ "$enable_redirect_dns" != "2" ] && [ "$en_mode" = "fake-ip" ]); then + #router self proxy udp + if ([ "$router_self_proxy" = "1" ] && [ "$enable_udp_proxy" -eq 1 ]) || ([ "$enable_redirect_dns" != "2" ] && [ "$en_mode" = "fake-ip" ]); then iptables -t mangle -N openclash_output iptables -t mangle -F openclash_output - iptables -t mangle -A openclash_output $owner -p udp -d "$fakeip_range" -j MARK --set-mark "$PROXY_FWMARK" + iptables -t mangle -A openclash_output $owner -j RETURN + iptables -t mangle -A openclash_output -m set --match-set localnetwork dst -j RETURN + iptables -t mangle -A openclash_output -m conntrack --ctdir REPLY -j RETURN + iptables -t mangle -A openclash_output -m set --match-set wan_ac_black_ips dst -j RETURN >/dev/null 2>&1 + if [ "$en_mode" = "fake-ip" ]; then + iptables -t mangle -A openclash_output -p udp -d "$fakeip_range" -j MARK --set-mark "$PROXY_FWMARK" + fi + if [ "$en_mode" = "redir-host" ]; then + iptables -t mangle -A openclash_output -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 + fi + if [ "$china_ip_route" != "0" ]; then + if [ "$china_ip_route" = "1" ]; then + rule="-m set --match-set china_ip_route dst" + elif [ "$china_ip_route" = "2" ]; then + rule="-m set ! --match-set china_ip_route dst" + fi + [ "$enable_redirect_dns" != "2" ] && rule="$rule -m set ! --match-set china_ip_route_pass dst" + iptables -t mangle -A openclash_output $rule -j RETURN >/dev/null 2>&1 + fi + if [ "$router_self_proxy" = "1" ] && [ "$enable_udp_proxy" -eq 1 ]; then + iptables -t mangle -A openclash_output -p udp -j MARK --set-mark "$PROXY_FWMARK" + fi iptables -t mangle -A OUTPUT -p udp -j openclash_output fi @@ -2382,17 +2373,20 @@ if [ -z "$FW4" ]; then fi fi + #router self proxy tcp if [ "$router_self_proxy" = "1" ] || ([ "$enable_redirect_dns" != "2" ] && [ "$en_mode" = "fake-ip" ]); then iptables -t nat -N openclash_output iptables -t nat -F openclash_output + iptables -t nat -A openclash_output $owner -j RETURN if [ "$en_mode" = "fake-ip" ] && [ "$en_mode_tun" != "1" ]; then - iptables -t nat -A openclash_output $owner -p tcp -d "$fakeip_range" -j REDIRECT --to-ports "$proxy_port" + iptables -t nat -A openclash_output -p tcp -d "$fakeip_range" -j REDIRECT --to-ports "$proxy_port" fi if [ "$router_self_proxy" = "1" ]; then iptables -t nat -A openclash_output -m set --match-set localnetwork dst -j RETURN - iptables -t nat -A openclash_output $owner -m set --match-set wan_ac_black_ips dst -j RETURN >/dev/null 2>&1 + iptables -t nat -A openclash_output -m conntrack --ctdir REPLY -j RETURN + iptables -t nat -A openclash_output -m set --match-set wan_ac_black_ips dst -j RETURN >/dev/null 2>&1 if [ "$en_mode" = "redir-host" ]; then - iptables -t nat -A openclash_output $owner -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 + iptables -t nat -A openclash_output -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 fi if [ "$china_ip_route" != "0" ]; then if [ "$china_ip_route" = "1" ]; then @@ -2401,9 +2395,9 @@ if [ -z "$FW4" ]; then rule="-m set ! --match-set china_ip_route dst" fi [ "$enable_redirect_dns" != "2" ] && rule="$rule -m set ! --match-set china_ip_route_pass dst" - iptables -t nat -A openclash_output $owner $rule -j RETURN >/dev/null 2>&1 + iptables -t nat -A openclash_output $rule -j RETURN >/dev/null 2>&1 fi - iptables -t nat -A openclash_output $owner -p tcp -j REDIRECT --to-ports "$proxy_port" + iptables -t nat -A openclash_output -p tcp -j REDIRECT --to-ports "$proxy_port" fi iptables -t nat -A OUTPUT -j openclash_output >/dev/null 2>&1 fi @@ -2412,39 +2406,19 @@ if [ -z "$FW4" ]; then if [ -n "$en_mode_tun" ]; then #TUN模式 #设置防火墙 + #router self proxy if [ "$router_self_proxy" = "1" ] || ([ "$enable_redirect_dns" != "2" ] && [ "$en_mode" = "fake-ip" ]); then - if [ "$en_mode" = "fake-ip" ]; then - iptables -t mangle -N openclash_output - iptables -t mangle -F openclash_output - if [ "$enable_redirect_dns" != "0" ]; then - iptables -t mangle -I openclash_output $owner -p tcp --dport 53 -j MARK --set-mark "$PROXY_FWMARK" - fi - iptables -t mangle -A openclash_output -m set --match-set localnetwork dst -j RETURN - if [ "$en_mode_tun" -eq 1 ]; then - iptables -t mangle -A openclash_output $owner -d "$fakeip_range" -j MARK --set-mark "$PROXY_FWMARK" - if [ "$router_self_proxy" = "1" ]; then - iptables -t mangle -A openclash_output $owner -m set --match-set wan_ac_black_ips dst -j RETURN >/dev/null 2>&1 - if [ "$china_ip_route" != "0" ]; then - if [ "$china_ip_route" = "1" ]; then - rule="-m set --match-set china_ip_route dst" - elif [ "$china_ip_route" = "2" ]; then - rule="-m set ! --match-set china_ip_route dst" - fi - [ "$enable_redirect_dns" != "2" ] && rule="$rule -m set ! --match-set china_ip_route_pass dst" - iptables -t mangle -A openclash_output $owner $rule -j RETURN >/dev/null 2>&1 - fi - iptables -t mangle -A openclash_output $owner -p tcp -j MARK --set-mark "$PROXY_FWMARK" - fi - else - iptables -t mangle -A openclash_output $owner -p udp -d "$fakeip_range" -j MARK --set-mark "$PROXY_FWMARK" - fi - iptables -t mangle -A OUTPUT -j openclash_output - elif [ "$en_mode" = "redir-host" ] && [ "$en_mode_tun" -eq 1 ]; then - iptables -t mangle -N openclash_output - iptables -t mangle -F openclash_output - iptables -t mangle -A openclash_output -m set --match-set localnetwork dst -j RETURN - iptables -t mangle -A openclash_output $owner -m set --match-set wan_ac_black_ips dst -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash_output $owner -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 + iptables -t mangle -N openclash_output + iptables -t mangle -F openclash_output + iptables -t mangle -A openclash_output $owner -j RETURN + iptables -t mangle -A openclash_output -m set --match-set localnetwork dst -j RETURN + iptables -t mangle -A openclash_output -m conntrack --ctdir REPLY -j RETURN + iptables -t mangle -A openclash_output -d "$fakeip_range" -j MARK --set-mark "$PROXY_FWMARK" + if [ "$en_mode" = "redir-host" ]; then + iptables -t mangle -A openclash_output -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 + fi + if [ "$router_self_proxy" = "1" ]; then + iptables -t mangle -A openclash_output -m set --match-set wan_ac_black_ips dst -j RETURN >/dev/null 2>&1 if [ "$china_ip_route" != "0" ]; then if [ "$china_ip_route" = "1" ]; then rule="-m set --match-set china_ip_route dst" @@ -2452,23 +2426,26 @@ if [ -z "$FW4" ]; then rule="-m set ! --match-set china_ip_route dst" fi [ "$enable_redirect_dns" != "2" ] && rule="$rule -m set ! --match-set china_ip_route_pass dst" - iptables -t mangle -A openclash_output $owner $rule -j RETURN >/dev/null 2>&1 + iptables -t mangle -A openclash_output $rule -j RETURN >/dev/null 2>&1 + fi + if [ "$en_mode_tun" -eq 1 ]; then + iptables -t mangle -A openclash_output -j MARK --set-mark "$PROXY_FWMARK" + else + iptables -t mangle -A openclash_output -p udp -j MARK --set-mark "$PROXY_FWMARK" fi - iptables -t mangle -A openclash_output $owner -p tcp -j MARK --set-mark "$PROXY_FWMARK" - iptables -t mangle -A OUTPUT -j openclash_output fi + iptables -t mangle -A OUTPUT -j openclash_output fi iptables -t mangle -N openclash iptables -t mangle -F openclash - iptables -t mangle -N openclash_dns_hijack - iptables -t mangle -F openclash_dns_hijack iptables -t mangle -N openclash_upnp iptables -t mangle -F openclash_upnp upnp_exclude #其他流量 iptables -t mangle -A openclash -i utun -j RETURN iptables -t mangle -A openclash -m set --match-set localnetwork dst -j RETURN + iptables -t mangle -A openclash -m conntrack --ctdir REPLY -j RETURN iptables -t mangle -A openclash -m set --match-set wan_ac_black_ips dst -j RETURN >/dev/null 2>&1 iptables -t mangle -A openclash -m set --match-set lan_ac_black_ips src -j RETURN >/dev/null 2>&1 iptables -t mangle -A openclash -m set --match-set lan_ac_black_macs src -j RETURN >/dev/null 2>&1 @@ -2499,18 +2476,6 @@ if [ -z "$FW4" ]; then if [ "$en_mode_tun" -eq 1 ]; then iptables -t mangle -A PREROUTING -j openclash else - if [ "$enable_redirect_dns" -eq 1 ]; then - iptables -t mangle -A PREROUTING -p tcp --dport 53 -j openclash_dns_hijack - iptables -t mangle -A openclash_dns_hijack -m set --match-set lan_ac_black_ips src -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash_dns_hijack -m set --match-set lan_ac_black_macs src -j RETURN >/dev/null 2>&1 - if [ "$lan_ac_mode" = "1" ] && [ -n "$(uci -q get openclash.config.lan_ac_white_ips)" ] && [ -n "$(uci -q get openclash.config.lan_ac_white_macs)" ]; then - iptables -t mangle -A openclash_dns_hijack -m set ! --match-set lan_ac_white_ips src -m set ! --match-set lan_ac_white_macs src -j RETURN >/dev/null 2>&1 - else - iptables -t mangle -A openclash_dns_hijack -m set ! --match-set lan_ac_white_ips src -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash_dns_hijack -m set ! --match-set lan_ac_white_macs src -j RETURN >/dev/null 2>&1 - fi - iptables -t mangle -A openclash_dns_hijack -m comment --comment "OpenClash TCP DNS Hijack" -p tcp --dport 53 -j MARK --set-mark "$PROXY_FWMARK" - fi iptables -t mangle -A PREROUTING -p udp -j openclash fi @@ -2558,11 +2523,7 @@ if [ -z "$FW4" ]; then fi fi ip6tables -t nat -I PREROUTING -p udp --dport 53 ${ACBLACKDNSFILTER} -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" - if [ "$ipv6_mode" -eq 2 ] || [ "$ipv6_mode" -eq 3 ]; then - ip6tables -t nat -I PREROUTING -p tcp --dport 53 ${ACBLACKDNSFILTER} -j ACCEPT -m comment --comment "OpenClash DNS Hijack" - else - ip6tables -t nat -I PREROUTING -p tcp --dport 53 ${ACBLACKDNSFILTER} -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" - fi + ip6tables -t nat -I PREROUTING -p tcp --dport 53 ${ACBLACKDNSFILTER} -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" else ip6tables -t nat -I PREROUTING -p udp --dport 53 -m set --match-set lan_ac_white_ipv6s src -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" ip6tables -t nat -I PREROUTING -p tcp --dport 53 -m set --match-set lan_ac_white_ipv6s src -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" @@ -2570,12 +2531,8 @@ if [ -z "$FW4" ]; then ip6tables -t nat -I PREROUTING -p tcp --dport 53 -m set --match-set lan_ac_white_macs src -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" fi if [ "$router_self_proxy" = 1 ]; then - if [ "$ipv6_mode" -eq 2 ] || [ "$ipv6_mode" -eq 3 ]; then - ip6tables -t nat -I OUTPUT -p tcp --dport 53 -d ::/0 $owner -j ACCEPT -m comment --comment "OpenClash DNS Hijack" - else - ip6tables -t nat -I OUTPUT -p tcp --dport 53 -d ::/0 $owner -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" - fi - ip6tables -t nat -I OUTPUT -p udp --dport 53 -d ::/0 $owner -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" + ip6tables -t nat -I OUTPUT -p tcp --dport 53 -d ::/0 $noowner -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" + ip6tables -t nat -I OUTPUT -p udp --dport 53 -d ::/0 $noowner -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" fi elif [ "$enable_redirect_dns" -eq 2 ]; then ip6tables -t nat -N openclash_dns_redirect @@ -2591,11 +2548,7 @@ if [ -z "$FW4" ]; then fi fi ip6tables -t nat -A openclash_dns_redirect -p udp --dport 53 ${ACBLACKDNSFILTER} -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" - if [ "$ipv6_mode" -eq 2 ] || [ "$ipv6_mode" -eq 3 ]; then - ip6tables -t nat -A openclash_dns_redirect -p tcp --dport 53 ${ACBLACKDNSFILTER} -j ACCEPT -m comment --comment "OpenClash DNS Hijack" - else - ip6tables -t nat -A openclash_dns_redirect -p tcp --dport 53 ${ACBLACKDNSFILTER} -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" - fi + ip6tables -t nat -A openclash_dns_redirect -p tcp --dport 53 ${ACBLACKDNSFILTER} -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" else ip6tables -t nat -A openclash_dns_redirect -p udp --dport 53 -m set --match-set lan_ac_white_ipv6s src -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" ip6tables -t nat -A openclash_dns_redirect -p tcp --dport 53 -m set --match-set lan_ac_white_ipv6s src -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" @@ -2605,12 +2558,8 @@ if [ -z "$FW4" ]; then ip6tables -t nat -I PREROUTING -p udp --dport 53 -j openclash_dns_redirect ip6tables -t nat -I PREROUTING -p tcp --dport 53 -j openclash_dns_redirect if [ "$router_self_proxy" = 1 ]; then - ip6tables -t nat -I OUTPUT -p udp --dport 53 -d ::/0 $owner -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" - if [ "$ipv6_mode" -eq 2 ] || [ "$ipv6_mode" -eq 3 ]; then - ip6tables -t nat -I OUTPUT -p tcp --dport 53 -d ::/0 $owner -j ACCEPT -m comment --comment "OpenClash DNS Hijack" - else - ip6tables -t nat -I OUTPUT -p tcp --dport 53 -d ::/0 $owner -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" - fi + ip6tables -t nat -I OUTPUT -p udp --dport 53 -d ::/0 $noowner -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" + ip6tables -t nat -I OUTPUT -p tcp --dport 53 -d ::/0 $noowner -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" fi fi fi @@ -2649,6 +2598,7 @@ if [ -z "$FW4" ]; then ip6tables -t nat -N openclash ip6tables -t nat -F openclash ip6tables -t nat -A openclash -m set --match-set localnetwork6 dst -j RETURN + ip6tables -t nat -A openclash -m conntrack --ctdir REPLY -j RETURN ip6tables -t nat -A openclash -m set --match-set wan_ac_black_ipv6s dst -j RETURN >/dev/null 2>&1 ip6tables -t nat -A openclash -m set --match-set lan_ac_black_ipv6s src -j RETURN >/dev/null 2>&1 ip6tables -t nat -A openclash -m set --match-set lan_ac_black_macs src -j RETURN >/dev/null 2>&1 @@ -2674,38 +2624,12 @@ if [ -z "$FW4" ]; then ip6tables -t nat -A PREROUTING -p tcp -j openclash fi - #tproxy not support output chain - if [ "$ipv6_mode" -ne 2 ]; then - if [ "$router_self_proxy" = "1" ]; then - ip6tables -t nat -N openclash_output - ip6tables -t nat -F openclash_output - ip6tables -t nat -A openclash_output -m set --match-set localnetwork6 dst -j RETURN - ip6tables -t nat -A openclash_output $owner -m set --match-set wan_ac_black_ipv6s dst -j RETURN >/dev/null 2>&1 - if [ "$en_mode" = "redir-host" ]; then - ip6tables -t nat -A openclash_output $owner -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 - fi - if [ "$china_ip6_route" != "0" ]; then - if [ "$china_ip6_route" = "1" ]; then - rule="-m set --match-set china_ip6_route dst" - elif [ "$china_ip6_route" = "2" ]; then - rule="-m set ! --match-set china_ip6_route dst" - fi - [ "$enable_redirect_dns" != "2" ] && rule="$rule -m set ! --match-set china_ip6_route_pass dst" - ip6tables -t nat -A openclash_output $owner $rule -j RETURN >/dev/null 2>&1 - fi - ip6tables -t nat -A openclash_output $owner -p tcp -j REDIRECT --to-ports "$proxy_port" - ip6tables -t nat -A OUTPUT -j openclash_output >/dev/null 2>&1 - fi - fi - - #TProxy & TUN + #TProxy & TUN & Redirect udp if [ "$enable_v6_udp_proxy" -eq 1 ] || [ "$ipv6_mode" -ne 1 ]; then ip6tables -t mangle -N openclash ip6tables -t mangle -F openclash - #prevent tproxy loop - ip6tables -t mangle -A openclash -i lo -j RETURN ip6tables -t mangle -A openclash -m set --match-set localnetwork6 dst -j RETURN - ip6tables -t mangle -A openclash -p udp --dport 53 -j RETURN + ip6tables -t mangle -A openclash -m conntrack --ctdir REPLY -j RETURN ip6tables -t mangle -A openclash -m set --match-set wan_ac_black_ipv6s dst -j RETURN >/dev/null 2>&1 ip6tables -t mangle -A openclash -m set --match-set lan_ac_black_macs src -j RETURN >/dev/null 2>&1 ip6tables -t mangle -A openclash -m set --match-set lan_ac_black_ipv6s src -j RETURN >/dev/null 2>&1 @@ -2731,39 +2655,13 @@ if [ -z "$FW4" ]; then fi fi - #TProxy & TUN + #tcp Tproxy && TUN if [ "$ipv6_mode" -ne 1 ] && [ "$ipv6_mode" -ne 3 ]; then if [ "$ipv6_mode" -eq 0 ]; then ip6tables -t mangle -A openclash -p tcp -m comment --comment "OpenClash TCP Tproxy" -j TPROXY --on-port "$tproxy_port" --tproxy-mark "$PROXY_FWMARK" else ip6tables -t mangle -A openclash -p tcp -j MARK --set-mark "$PROXY_FWMARK" fi - - if [ "$router_self_proxy" = "1" ]; then - if [ "$ipv6_mode" -eq 2 ]; then - ip6tables -t mangle -N openclash_output - ip6tables -t mangle -F openclash_output - if [ "$enable_redirect_dns" != "0" ]; then - ip6tables -t mangle -A openclash_output $owner -p tcp --dport 53 -j MARK --set-mark "$PROXY_FWMARK" - fi - ip6tables -t mangle -A openclash_output -m set --match-set localnetwork6 dst -j RETURN - ip6tables -t mangle -A openclash_output $owner -m set --match-set wan_ac_black_ipv6s dst -j RETURN >/dev/null 2>&1 - if [ "$en_mode" = "redir-host" ]; then - ip6tables -t mangle -A openclash_output $owner -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 - fi - if [ "$china_ip6_route" != "0" ]; then - if [ "$china_ip6_route" = "1" ]; then - rule="-m set --match-set china_ip6_route dst" - elif [ "$china_ip6_route" = "2" ]; then - rule="-m set ! --match-set china_ip6_route dst" - fi - [ "$enable_redirect_dns" != "2" ] && rule="$rule -m set ! --match-set china_ip6_route_pass dst" - ip6tables -t mangle -A openclash_output $owner $rule -j RETURN >/dev/null 2>&1 - fi - ip6tables -t mangle -A openclash_output -p tcp $owner -j MARK --set-xmark "$PROXY_FWMARK" - ip6tables -t mangle -A OUTPUT -j openclash_output - fi - fi fi #udp @@ -2777,6 +2675,64 @@ if [ -z "$FW4" ]; then ip6tables -t mangle -A PREROUTING -j openclash + #router self proxy + if [ "$router_self_proxy" = "1" ]; then + if [ "$ipv6_mode" -eq 1 ] || [ "$ipv6_mode" -eq 3 ]; then + #tcp Redirect Mode + ip6tables -t nat -N openclash_output + ip6tables -t nat -F openclash_output + ip6tables -t nat -A openclash_output $owner -j RETURN + ip6tables -t nat -A openclash_output -m set --match-set localnetwork6 dst -j RETURN + ip6tables -t nat -A openclash_output -m conntrack --ctdir REPLY -j RETURN + ip6tables -t nat -A openclash_output -m set --match-set wan_ac_black_ipv6s dst -j RETURN >/dev/null 2>&1 + if [ "$en_mode" = "redir-host" ]; then + ip6tables -t nat -A openclash_output -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 + fi + if [ "$china_ip6_route" != "0" ]; then + if [ "$china_ip6_route" = "1" ]; then + rule="-m set --match-set china_ip6_route dst" + elif [ "$china_ip6_route" = "2" ]; then + rule="-m set ! --match-set china_ip6_route dst" + fi + [ "$enable_redirect_dns" != "2" ] && rule="$rule -m set ! --match-set china_ip6_route_pass dst" + ip6tables -t nat -A openclash_output $rule -j RETURN >/dev/null 2>&1 + fi + ip6tables -t nat -A openclash_output -p tcp -j REDIRECT --to-ports "$proxy_port" + ip6tables -t nat -A OUTPUT -j openclash_output >/dev/null 2>&1 + fi + + #other mode and Redirect Mode udp + ip6tables -t mangle -N openclash_output + ip6tables -t mangle -F openclash_output + ip6tables -t mangle -A openclash_output $owner -j RETURN + ip6tables -t mangle -A openclash_output -m set --match-set localnetwork6 dst -j RETURN + ip6tables -t mangle -A openclash_output -m conntrack --ctdir REPLY -j RETURN + ip6tables -t mangle -A openclash_output -m set --match-set wan_ac_black_ipv6s dst -j RETURN >/dev/null 2>&1 + if [ "$en_mode" = "redir-host" ]; then + ip6tables -t mangle -A openclash_output -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 + fi + if [ "$china_ip6_route" != "0" ]; then + if [ "$china_ip6_route" = "1" ]; then + rule="-m set --match-set china_ip6_route dst" + elif [ "$china_ip6_route" = "2" ]; then + rule="-m set ! --match-set china_ip6_route dst" + fi + [ "$enable_redirect_dns" != "2" ] && rule="$rule -m set ! --match-set china_ip6_route_pass dst" + ip6tables -t mangle -A openclash_output $rule -j RETURN >/dev/null 2>&1 + fi + + if ([ "$ipv6_mode" -eq 1 ] && [ "$enable_v6_udp_proxy" -eq 1 ]) || [ "$ipv6_mode" -eq 3 ]; then + ip6tables -t mangle -A openclash_output -p udp -j MARK --set-xmark "$PROXY_FWMARK" + fi + if ([ "$ipv6_mode" -eq 0 ] && [ "$enable_v6_udp_proxy" -eq 1 ]) || [ "$ipv6_mode" -eq 2 ]; then + ip6tables -t mangle -A openclash_output -j MARK --set-xmark "$PROXY_FWMARK" + fi + if [ "$ipv6_mode" -eq 0 ] && [ "$enable_v6_udp_proxy" -ne 1 ]; then + ip6tables -t mangle -A openclash_output -p tcp -j MARK --set-xmark "$PROXY_FWMARK" + fi + ip6tables -t mangle -A OUTPUT -j openclash_output + fi + #route if [ "$ipv6_mode" -ne 2 ] && [ "$ipv6_mode" -ne 3 ]; then if [ "$enable_v6_udp_proxy" -eq 1 ] || [ "$ipv6_mode" -eq 0 ]; then @@ -2813,9 +2769,11 @@ if [ -z "$FW4" ]; then if [ "$bypass_gateway_compatible" -eq 1 ]; then ip6tables -t nat -N openclash_post ip6tables -t nat -F openclash_post + ip6tables -t nat -A openclash_post $owner -j RETURN ip6tables -t nat -A openclash_post -m mark --mark "$PROXY_FWMARK" -j ACCEPT ip6tables -t nat -A openclash_post -m set --match-set localnetwork6 dst -j RETURN - ip6tables -t nat -A openclash_post $addr_local $owner -j MASQUERADE + ip6tables -t nat -A openclash_post -m conntrack --ctdir REPLY -j RETURN + ip6tables -t nat -A openclash_post $addr_local -j MASQUERADE ip6tables -t nat -A POSTROUTING -m comment --comment "OpenClash Bypass Gateway Compatible" -j openclash_post fi @@ -2904,7 +2862,7 @@ revert_firewall() done done >/dev/null 2>&1 - for chain in "openclash" "openclash_output" "openclash_post" "openclash_dns_hijack" "openclash_wan_input" "openclash_dns_redirect" "openclash_upnp"; do + for chain in "openclash" "openclash_output" "openclash_post" "openclash_wan_input" "openclash_dns_redirect" "openclash_upnp"; do iptables -t nat -F $chain iptables -t nat -X $chain iptables -t mangle -F $chain @@ -2925,7 +2883,6 @@ revert_firewall() ipset destroy lan_ac_white_ipv6s >/dev/null 2>&1 ipset destroy lan_ac_black_ipv6s >/dev/null 2>&1 ipset destroy wan_ac_black_ipv6s >/dev/null 2>&1 - ipset destroy localnetwork >/dev/null 2>&1 ipset destroy china_ip_route >/dev/null 2>&1 ipset destroy china_ip_route_pass >/dev/null 2>&1 @@ -2935,7 +2892,6 @@ revert_firewall() ipset destroy lan_ac_black_macs >/dev/null 2>&1 ipset destroy wan_ac_black_ips >/dev/null 2>&1 ipset destroy common_ports >/dev/null 2>&1 - ipset destroy openclash_google_dns_ips >/dev/null 2>&1 fi } @@ -2972,7 +2928,6 @@ get_config() wan_ip4s=$(/usr/share/openclash/openclash_get_network.lua "wanip" 2>/dev/null) wan_ip6s=$(ifconfig | grep 'inet6 addr' | awk '{print $3}' 2>/dev/null) - disable_masq_cache=$(uci -q get openclash.config.disable_masq_cache) log_level=$(uci -q get openclash.config.log_level) intranet_allowed=$(uci -q get openclash.config.intranet_allowed) enable_udp_proxy=$(uci -q get openclash.config.enable_udp_proxy || echo 1) @@ -3007,17 +2962,18 @@ get_config() enable_respect_rules=$(uci -q get openclash.config.enable_respect_rules || echo 0) intranet_allowed_wan_name=$(uci -q get openclash.config.intranet_allowed_wan_name || echo 0) custom_fakeip_filter_mode=$(uci -q get openclash.config.custom_fakeip_filter_mode || echo "blacklist") - iptables_compat=$(iptables -m owner -h 2>/dev/null | grep "owner match options" || echo 0) + iptables_compat=$(iptables -m owner -h 2>/dev/null | grep "owner match options" || command -v fw4 || echo 0) + disable_quic_go_gso=$(uci -q get openclash.config.disable_quic_go_gso || echo 0) [ -z "$dns_port" ] && dns_port=7874 && uci -q set openclash.config.dns_port=7874 uci -q commit openclash } -start() +start_service() { enable=$(uci -q get openclash.config.enable) - [ "$enable" != "1" ] && LOG_OUT "Warning: OpenClash Now Disabled, Need Start From Luci Page, Exit..." && SLOG_CLEAN && del_lock && exit 0 - service openclash enable + [ "$enable" != "1" ] && LOG_OUT "Warning: OpenClash Now Disabled, Need Start From Luci Page, Exit..." && SLOG_CLEAN && exit 0 + LOG_OUT "OpenClash Start Running..." config_choose @@ -3033,7 +2989,7 @@ start() if ! $quick_start; then LOG_OUT "Step 3: Modify The Config File..." config_check - /usr/share/openclash/yml_change.sh 2>/dev/null "$en_mode" "$da_password" "$cn_port" "$proxy_port" "$TMP_CONFIG_FILE" "$ipv6_enable" "$http_port" "$socks_port" "$log_level" "$proxy_mode" "$en_mode_tun" "$stack_type" "$dns_port" "$mixed_port" "$tproxy_port" "$ipv6_dns" "$store_fakeip" "$enable_meta_sniffer" "$enable_geoip_dat" "$geodata_loader" "$enable_meta_sniffer_custom" "$interface_name" "$enable_tcp_concurrent" "$core_type" "$append_default_dns" "$enable_meta_sniffer_pure_ip" "$find_process_mode" "$fakeip_range" "$global_client_fingerprint" "$ipv6_mode" "$stack_type_v6" "$enable_unified_delay" "$enable_respect_rules" "$custom_fakeip_filter_mode" "$iptables_compat" + /usr/share/openclash/yml_change.sh 2>/dev/null "$en_mode" "$da_password" "$cn_port" "$proxy_port" "$TMP_CONFIG_FILE" "$ipv6_enable" "$http_port" "$socks_port" "$log_level" "$proxy_mode" "$en_mode_tun" "$stack_type" "$dns_port" "$mixed_port" "$tproxy_port" "$ipv6_dns" "$store_fakeip" "$enable_meta_sniffer" "$enable_geoip_dat" "$geodata_loader" "$enable_meta_sniffer_custom" "$interface_name" "$enable_tcp_concurrent" "$core_type" "$append_default_dns" "$enable_meta_sniffer_pure_ip" "$find_process_mode" "$fakeip_range" "$global_client_fingerprint" "$ipv6_mode" "$stack_type_v6" "$enable_unified_delay" "$enable_respect_rules" "$custom_fakeip_filter_mode" "$iptables_compat" "$disable_quic_go_gso" /usr/share/openclash/yml_rules_change.sh 2>/dev/null "$rule_source" "$enable_custom_clash_rules" "$TMP_CONFIG_FILE" "$enable_rule_proxy" "$CONFIG_NAME" "$router_self_proxy" "$lan_ip" "$enable_redirect_dns" "$en_mode" #Custom overwrite if [ -f "/etc/openclash/custom/openclash_custom_overwrite.sh" ]; then @@ -3048,7 +3004,7 @@ start() start_run_core LOG_OUT "Step 5: Set Dnsmasq..." - change_dns "$enable_redirect_dns" "$disable_masq_cache" + change_dns "$enable_redirect_dns" LOG_OUT "Step 6: Set Firewall Rules..." set_firewall @@ -3069,7 +3025,7 @@ start() rm -rf /tmp/yaml_* } -stop() +stop_service() { enable=$(uci -q get openclash.config.enable) @@ -3092,16 +3048,6 @@ stop() kill -9 "$streaming_unlock_pid" >/dev/null 2>&1 done >/dev/null 2>&1 - openclash_stop_pids=$(unify_ps_pids "/etc/init.d/openclash stop") - openclash_pids=$(unify_ps_pids "/etc/init.d/openclash") - if [ -n "$openclash_stop_pids" ]; then - for openclash_pid in $openclash_pids; do - if [ "$openclash_pid" != "$$" ] && ! "$start_fail_pid"; then - kill -9 "$openclash_pid" >/dev/null 2>&1 - fi - done >/dev/null 2>&1 - fi - LOG_OUT "Step 4: Close The Clash Core Process..." if [ "$enable" != "1" ]; then kill_clash @@ -3112,7 +3058,7 @@ stop() LOG_OUT "Step 6: Delete OpenClash Residue File..." if [ "$enable" != "1" ]; then - service openclash disable + rm -rf /tmp/clash_last_version >/dev/null 2>&1 rm -rf /tmp/Proxy_Group >/dev/null 2>&1 rm -rf /tmp/rules_name >/dev/null 2>&1 @@ -3125,7 +3071,6 @@ stop() rm -rf ${DNSMASQ_CONF_DIR}/dnsmasq_openclash_chnroute_pass.conf >/dev/null 2>&1 rm -rf ${DNSMASQ_CONF_DIR}/dnsmasq_openclash_chnroute6_pass.conf >/dev/null 2>&1 rm -rf ${DNSMASQ_CONF_DIR}/dnsmasq_openclash_custom_domain.conf >/dev/null 2>&1 - del_lock LOG_OUT "OpenClash Already Stop!" else LOG_OUT "OpenClash Already Stop!" @@ -3155,25 +3100,25 @@ revert_dnsmasq() restart() { - [ -f "$LOCK_FILE" ] && LOG_OUT "Warning: Multiple Restart Scripts Running, Exit..." && SLOG_CLEAN && exit 0 - mkdir -p /tmp/lock - touch $LOCK_FILE - set_lock echo "OpenClash Restart..." LOG_OUT "OpenClash Restart..." #快速启动判断 check_run_quick stop start - del_lock } -reload() +start_watchdog() +{ + procd_open_instance "openclash-watchdog" + procd_set_param command "/usr/share/openclash/openclash_watchdog.sh" + procd_close_instance +} + +reload_service() { - [ -f "$LOCK_FILE" ] && exit 0 enable=$(uci -q get openclash.config.enable) if pidof clash >/dev/null && [ "$enable" == "1" ] && [ "$1" == "firewall" ]; then - set_lock LOG_OUT "Reload OpenClash Firewall Rules..." revert_firewall 2>/dev/null do_run_mode 2>/dev/null @@ -3181,27 +3126,21 @@ reload() set_firewall 2>/dev/null check_core_status & 2>/dev/null SLOG_CLEAN - del_lock fi if pidof clash >/dev/null && [ "$enable" == "1" ] && [ "$1" == "revert" ]; then - set_lock revert_firewall 2>/dev/null revert_dnsmasq 2>/dev/null SLOG_CLEAN - del_lock fi if pidof clash >/dev/null && [ "$enable" == "1" ] && [ "$1" == "restore" ]; then - set_lock do_run_mode 2>/dev/null get_config 2>/dev/null - change_dns "$enable_redirect_dns" "$disable_masq_cache" + change_dns "$enable_redirect_dns" set_firewall 2>/dev/null check_core_status & 2>/dev/null SLOG_CLEAN - del_lock fi if [ "$enable" == "1" ] && [ "$1" == "core" ]; then - set_lock check_run_quick 2>/dev/null do_run_mode 2>/dev/null get_config 2>/dev/null @@ -3209,7 +3148,6 @@ reload() check_core_status 2>/dev/null write_run_quick 2>/dev/null SLOG_CLEAN - del_lock fi } @@ -3223,3 +3161,4 @@ boot() fi restart } + diff --git a/luci-app-openclash/root/etc/openclash/china_ip6_route.ipset b/luci-app-openclash/root/etc/openclash/china_ip6_route.ipset index faf94fd10..936f8a9dd 100644 --- a/luci-app-openclash/root/etc/openclash/china_ip6_route.ipset +++ b/luci-app-openclash/root/etc/openclash/china_ip6_route.ipset @@ -1,1943 +1,2029 @@ -create china_ip6_route hash:net family inet6 hashsize 1024 maxelem 1000000 -add china_ip6_route 2001:250::/35 -add china_ip6_route 2001:250:2000::/35 -add china_ip6_route 2001:250:4000::/34 -add china_ip6_route 2001:250:8000::/33 -add china_ip6_route 2001:251::/32 -add china_ip6_route 2001:252::/32 -add china_ip6_route 2001:253::/32 -add china_ip6_route 2001:254::/32 -add china_ip6_route 2001:255::/32 -add china_ip6_route 2001:256::/32 -add china_ip6_route 2001:7fa:5::/48 -add china_ip6_route 2001:7fa:10::/48 -add china_ip6_route 2001:c68::/32 -add china_ip6_route 2001:cc0::/32 -add china_ip6_route 2001:da8::/32 -add china_ip6_route 2001:da9::/32 -add china_ip6_route 2001:daa::/32 -add china_ip6_route 2001:dc7::/32 -add china_ip6_route 2001:dd8:1::/48 -add china_ip6_route 2001:dd8:5::/48 -add china_ip6_route 2001:dd8:1a::/48 -add china_ip6_route 2001:dd9::/48 -add china_ip6_route 2001:df0:27e::/48 -add china_ip6_route 2001:df0:423::/48 -add china_ip6_route 2001:df0:9c0::/48 -add china_ip6_route 2001:df0:1bc0::/48 -add china_ip6_route 2001:df0:2180::/48 -add china_ip6_route 2001:df0:25c0::/48 -add china_ip6_route 2001:df0:26c0::/48 -add china_ip6_route 2001:df0:2d80::/48 -add china_ip6_route 2001:df0:2e00::/48 -add china_ip6_route 2001:df0:2e80::/48 -add china_ip6_route 2001:df0:4500::/48 -add china_ip6_route 2001:df0:59c0::/48 -add china_ip6_route 2001:df0:85c0::/48 -add china_ip6_route 2001:df0:8d40::/48 -add china_ip6_route 2001:df0:b180::/48 -add china_ip6_route 2001:df0:bf80::/48 -add china_ip6_route 2001:df0:d880::/48 -add china_ip6_route 2001:df1:c80::/48 -add china_ip6_route 2001:df1:4580::/48 -add china_ip6_route 2001:df1:5280::/48 -add china_ip6_route 2001:df1:5b80::/48 -add china_ip6_route 2001:df1:6180::/48 -add china_ip6_route 2001:df1:6b80::/48 -add china_ip6_route 2001:df1:8b00::/48 -add china_ip6_route 2001:df1:a100::/48 -add china_ip6_route 2001:df1:bd80::/48 -add china_ip6_route 2001:df1:c900::/48 -add china_ip6_route 2001:df1:d100::/48 -add china_ip6_route 2001:df1:d180::/48 -add china_ip6_route 2001:df1:da00::/48 -add china_ip6_route 2001:df1:f480::/48 -add china_ip6_route 2001:df1:f580::/48 -add china_ip6_route 2001:df1:fd80::/48 -add china_ip6_route 2001:df2:80::/48 -add china_ip6_route 2001:df2:180::/48 -add china_ip6_route 2001:df2:5780::/48 -add china_ip6_route 2001:df2:5a80::/48 -add china_ip6_route 2001:df2:a580::/48 -add china_ip6_route 2001:df3:1480::/48 -add china_ip6_route 2001:df3:2a80::/48 -add china_ip6_route 2001:df3:3a80::/48 -add china_ip6_route 2001:df3:a680::/48 -add china_ip6_route 2001:df3:b100::/48 -add china_ip6_route 2001:df3:b380::/48 -add china_ip6_route 2001:df3:c380::/48 -add china_ip6_route 2001:df3:c680::/48 -add china_ip6_route 2001:df3:d880::/48 -add china_ip6_route 2001:df3:ed80::/48 -add china_ip6_route 2001:df3:ef80::/48 -add china_ip6_route 2001:df4:880::/48 -add china_ip6_route 2001:df4:d80::/48 -add china_ip6_route 2001:df4:1280::/48 -add china_ip6_route 2001:df4:1500::/48 -add china_ip6_route 2001:df4:1880::/48 -add china_ip6_route 2001:df4:2780::/48 -add china_ip6_route 2001:df4:2e80::/48 -add china_ip6_route 2001:df4:2f00::/48 -add china_ip6_route 2001:df4:3c80::/48 -add china_ip6_route 2001:df4:3d80::/48 -add china_ip6_route 2001:df4:4b80::/48 -add china_ip6_route 2001:df4:4d80::/48 -add china_ip6_route 2001:df4:a680::/48 -add china_ip6_route 2001:df4:a980::/48 -add china_ip6_route 2001:df4:c180::/48 -add china_ip6_route 2001:df4:c580::/48 -add china_ip6_route 2001:df4:c780::/48 -add china_ip6_route 2001:df4:cf00::/48 -add china_ip6_route 2001:df4:de80::/48 -add china_ip6_route 2001:df5:2080::/48 -add china_ip6_route 2001:df5:5f80::/48 -add china_ip6_route 2001:df5:7800::/48 -add china_ip6_route 2001:df6:100::/48 -add china_ip6_route 2001:df6:3d00::/48 -add china_ip6_route 2001:df6:5d00::/48 -add china_ip6_route 2001:df6:6800::/48 -add china_ip6_route 2001:df6:9e80::/48 -add china_ip6_route 2001:df6:9f80::/48 -add china_ip6_route 2001:df6:df00::/48 -add china_ip6_route 2001:df6:f400::/48 -add china_ip6_route 2001:df7:1480::/48 -add china_ip6_route 2001:df7:2b80::/48 -add china_ip6_route 2001:df7:6600::/48 -add china_ip6_route 2001:df7:ab00::/48 -add china_ip6_route 2001:df7:e580::/48 -add china_ip6_route 2001:df7:f080::/48 -add china_ip6_route 2001:e08::/32 -add china_ip6_route 2001:e18::/32 -add china_ip6_route 2001:e80::/32 -add china_ip6_route 2001:e88::/32 -add china_ip6_route 2001:f38::/32 -add china_ip6_route 2001:f88::/32 -add china_ip6_route 2001:4438::/32 -add china_ip6_route 2001:4510::/29 -add china_ip6_route 2400:1040::/32 -add china_ip6_route 2400:1160::/32 -add china_ip6_route 2400:12c0::/32 -add china_ip6_route 2400:1340::/32 -add china_ip6_route 2400:1380::/32 -add china_ip6_route 2400:15c0::/32 -add china_ip6_route 2400:1640::/32 -add china_ip6_route 2400:16c0::/32 -add china_ip6_route 2400:1740::/32 -add china_ip6_route 2400:17c0::/32 -add china_ip6_route 2400:1840::/32 -add china_ip6_route 2400:18c0::/32 -add china_ip6_route 2400:1940::/32 -add china_ip6_route 2400:19a0::/32 -add china_ip6_route 2400:19c0::/32 -add china_ip6_route 2400:1a40::/32 -add china_ip6_route 2400:1ac0::/32 -add china_ip6_route 2400:1b40::/32 -add china_ip6_route 2400:1cc0::/32 -add china_ip6_route 2400:1d40::/32 -add china_ip6_route 2400:1dc0::/32 -add china_ip6_route 2400:1e40::/32 -add china_ip6_route 2400:1ec0::/32 -add china_ip6_route 2400:1f40::/32 -add china_ip6_route 2400:1fc0::/32 -add china_ip6_route 2400:3040::/32 -add china_ip6_route 2400:3140::/32 -add china_ip6_route 2400:3160::/32 -add china_ip6_route 2400:31c0::/32 -add china_ip6_route 2400:3200::/32 -add china_ip6_route 2400:3280::/32 -add china_ip6_route 2400:32c0::/32 -add china_ip6_route 2400:3340::/32 -add china_ip6_route 2400:33c0::/32 -add china_ip6_route 2400:3440::/32 -add china_ip6_route 2400:34c0::/32 -add china_ip6_route 2400:3540::/32 -add china_ip6_route 2400:35c0::/32 -add china_ip6_route 2400:3600::/32 -add china_ip6_route 2400:3640::/32 -add china_ip6_route 2400:3660::/32 -add china_ip6_route 2400:36c0::/32 -add china_ip6_route 2400:38c0::/32 -add china_ip6_route 2400:39c0::/32 -add china_ip6_route 2400:3a00::/32 -add china_ip6_route 2400:3a40::/32 -add china_ip6_route 2400:3b40::/32 -add china_ip6_route 2400:3bc0::/32 -add china_ip6_route 2400:3c40::/32 -add china_ip6_route 2400:3cc0::/32 -add china_ip6_route 2400:3e00::/32 -add china_ip6_route 2400:3f40::/32 -add china_ip6_route 2400:3f60::/32 -add china_ip6_route 2400:3fc0::/32 -add china_ip6_route 2400:4440::/32 -add china_ip6_route 2400:44c0::/32 -add china_ip6_route 2400:44e0::/32 -add china_ip6_route 2400:4540::/32 -add china_ip6_route 2400:4600::/32 -add china_ip6_route 2400:4640::/32 -add china_ip6_route 2400:46c0::/32 -add china_ip6_route 2400:4740::/32 -add china_ip6_route 2400:4920::/32 -add china_ip6_route 2400:4bc0::/32 -add china_ip6_route 2400:4e00::/32 -add china_ip6_route 2400:4e40::/32 -add china_ip6_route 2400:5080::/32 -add china_ip6_route 2400:5280::/32 -add china_ip6_route 2400:5400::/32 -add china_ip6_route 2400:5580::/32 -add china_ip6_route 2400:55c0::/32 -add china_ip6_route 2400:55e0::/32 -add china_ip6_route 2400:5600::/32 -add china_ip6_route 2400:5640::/32 -add china_ip6_route 2400:56c0::/32 -add china_ip6_route 2400:57c0::/32 -add china_ip6_route 2400:5840::/32 -add china_ip6_route 2400:5a00::/32 -add china_ip6_route 2400:5a40::/32 -add china_ip6_route 2400:5a60::/32 -add china_ip6_route 2400:5ac0::/32 -add china_ip6_route 2400:5b40::/32 -add china_ip6_route 2400:5bc0::/32 -add china_ip6_route 2400:5c40::/32 -add china_ip6_route 2400:5c80::/32 -add china_ip6_route 2400:5cc0::/32 -add china_ip6_route 2400:5e20::/32 -add china_ip6_route 2400:5e80::/32 -add china_ip6_route 2400:5ee0::/32 -add china_ip6_route 2400:5f60::/32 -add china_ip6_route 2400:5fc0::/32 -add china_ip6_route 2400:6000::/32 -add china_ip6_route 2400:6040::/32 -add china_ip6_route 2400:60c0::/32 -add china_ip6_route 2400:61c0::/32 -add china_ip6_route 2400:6200::/32 -add china_ip6_route 2400:6600::/32 -add china_ip6_route 2400:6640::/32 -add china_ip6_route 2400:66a0::/32 -add china_ip6_route 2400:66c0::/32 -add china_ip6_route 2400:66e0::/32 -add china_ip6_route 2400:6740::/32 -add china_ip6_route 2400:67c0::/32 -add china_ip6_route 2400:6840::/32 -add china_ip6_route 2400:68c0::/32 -add china_ip6_route 2400:6940::/32 -add china_ip6_route 2400:69c0::/32 -add china_ip6_route 2400:6a00::/32 -add china_ip6_route 2400:6a40::/32 -add china_ip6_route 2400:6ac0::/32 -add china_ip6_route 2400:6b40::/32 -add china_ip6_route 2400:6bc0::/32 -add china_ip6_route 2400:6c40::/32 -add china_ip6_route 2400:6cc0::/32 -add china_ip6_route 2400:6d40::/32 -add china_ip6_route 2400:6dc0::/32 -add china_ip6_route 2400:6e00::/32 -add china_ip6_route 2400:6e40::/32 -add china_ip6_route 2400:6ec0::/32 -add china_ip6_route 2400:6f40::/32 -add china_ip6_route 2400:6f80::/32 -add china_ip6_route 2400:6fc0::/32 -add china_ip6_route 2400:7040::/32 -add china_ip6_route 2400:7100::/32 -add china_ip6_route 2400:7140::/32 -add china_ip6_route 2400:71c0::/32 -add china_ip6_route 2400:7200::/32 -add china_ip6_route 2400:7240::/32 -add china_ip6_route 2400:72c0::/32 -add china_ip6_route 2400:7340::/32 -add china_ip6_route 2400:73c0::/32 -add china_ip6_route 2400:7440::/32 -add china_ip6_route 2400:74c0::/32 -add china_ip6_route 2400:7540::/32 -add china_ip6_route 2400:75c0::/32 -add china_ip6_route 2400:7640::/32 -add china_ip6_route 2400:7680::/32 -add china_ip6_route 2400:76c0::/32 -add china_ip6_route 2400:7740::/32 -add china_ip6_route 2400:77c0::/32 -add china_ip6_route 2400:79c0::/32 -add china_ip6_route 2400:7ac0::/32 -add china_ip6_route 2400:7bc0::/32 -add china_ip6_route 2400:7f80::/32 -add china_ip6_route 2400:7fc0::/32 -add china_ip6_route 2400:8080::/32 -add china_ip6_route 2400:8200::/32 -add china_ip6_route 2400:82c0::/32 -add china_ip6_route 2400:8580::/32 -add china_ip6_route 2400:8600::/32 -add china_ip6_route 2400:8780::/32 -add china_ip6_route 2400:87c0::/32 -add china_ip6_route 2400:8840::/32 -add china_ip6_route 2400:8980::/32 -add china_ip6_route 2400:89c0::/32 -add china_ip6_route 2400:8e00::/32 -add china_ip6_route 2400:8f00::/32 -add china_ip6_route 2400:8fc0::/32 -add china_ip6_route 2400:9040::/32 -add china_ip6_route 2400:9340::/32 -add china_ip6_route 2400:9580::/32 -add china_ip6_route 2400:95c0::/32 -add china_ip6_route 2400:9600::/32 -add china_ip6_route 2400:98c0::/32 -add china_ip6_route 2400:9a00::/32 -add china_ip6_route 2400:9e00::/32 -add china_ip6_route 2400:a040::/32 -add china_ip6_route 2400:a380::/32 -add china_ip6_route 2400:a480::/32 -add china_ip6_route 2400:a780::/32 -add china_ip6_route 2400:a8c0::/32 -add china_ip6_route 2400:a900::/32 -add china_ip6_route 2400:a980::/32 -add china_ip6_route 2400:a981::/32 -add china_ip6_route 2400:a982::/31 -add china_ip6_route 2400:a984::/30 -add china_ip6_route 2400:abc0::/32 -add china_ip6_route 2400:ae00::/32 -add china_ip6_route 2400:b200::/32 -add china_ip6_route 2400:b2c0::/32 -add china_ip6_route 2400:b500::/32 -add china_ip6_route 2400:b600::/32 -add china_ip6_route 2400:b6c0::/32 -add china_ip6_route 2400:b700::/32 -add china_ip6_route 2400:b8c0::/32 -add china_ip6_route 2400:b9c0::/32 -add china_ip6_route 2400:ba00::/32 -add china_ip6_route 2400:ba40::/32 -add china_ip6_route 2400:ba41::/32 -add china_ip6_route 2400:bac0::/32 -add china_ip6_route 2400:be00::/32 -add china_ip6_route 2400:bf00::/32 -add china_ip6_route 2400:c200::/32 -add china_ip6_route 2400:c380::/32 -add china_ip6_route 2400:c840::/32 -add china_ip6_route 2400:c8c0::/32 -add china_ip6_route 2400:c940::/32 -add china_ip6_route 2400:c9c0::/32 -add china_ip6_route 2400:ca40::/32 -add china_ip6_route 2400:cac0::/32 -add china_ip6_route 2400:cb40::/32 -add china_ip6_route 2400:cb80::/32 -add china_ip6_route 2400:cbc0::/32 -add china_ip6_route 2400:cc40::/32 -add china_ip6_route 2400:cc80::/32 -add china_ip6_route 2400:ccc0::/32 -add china_ip6_route 2400:cd40::/32 -add china_ip6_route 2400:cdc0::/32 -add china_ip6_route 2400:ce00::/32 -add china_ip6_route 2400:ce40::/32 -add china_ip6_route 2400:cf40::/32 -add china_ip6_route 2400:cf80::/32 -add china_ip6_route 2400:cfc0::/32 -add china_ip6_route 2400:d0c0::/32 -add china_ip6_route 2400:d100::/32 -add china_ip6_route 2400:d1c0::/32 -add china_ip6_route 2400:d200::/32 -add china_ip6_route 2400:d300::/32 -add china_ip6_route 2400:d440::/32 -add china_ip6_route 2400:d600::/32 -add china_ip6_route 2400:d6c0::/32 -add china_ip6_route 2400:d780::/32 -add china_ip6_route 2400:da00::/32 -add china_ip6_route 2400:dd00::/28 -add china_ip6_route 2400:dd40::/32 -add china_ip6_route 2400:de00::/32 -add china_ip6_route 2400:de80::/32 -add china_ip6_route 2400:e0c0::/32 -add china_ip6_route 2400:e5c0::/32 -add china_ip6_route 2400:e680::/32 -add china_ip6_route 2400:e880::/32 -add china_ip6_route 2400:ebc0::/32 -add china_ip6_route 2400:edc0::/32 -add china_ip6_route 2400:ee00::/32 -add china_ip6_route 2400:eec0::/32 -add china_ip6_route 2400:ef40::/32 -add china_ip6_route 2400:f480::/32 -add china_ip6_route 2400:f5c0::/32 -add china_ip6_route 2400:f7c0::/32 -add china_ip6_route 2400:f840::/32 -add china_ip6_route 2400:f980::/32 -add china_ip6_route 2400:fac0::/32 -add china_ip6_route 2400:fb40::/32 -add china_ip6_route 2400:fbc0::/32 -add china_ip6_route 2400:fc40::/32 -add china_ip6_route 2400:fcc0::/32 -add china_ip6_route 2400:fe00::/32 -add china_ip6_route 2401:80::/32 -add china_ip6_route 2401:140::/32 -add china_ip6_route 2401:1c0::/32 -add china_ip6_route 2401:540::/32 -add china_ip6_route 2401:7c0::/32 -add china_ip6_route 2401:800::/32 -add china_ip6_route 2401:9c0::/32 -add china_ip6_route 2401:a00::/32 -add china_ip6_route 2401:a40::/32 -add china_ip6_route 2401:ac0::/32 -add china_ip6_route 2401:b40::/32 -add china_ip6_route 2401:bc0::/32 -add china_ip6_route 2401:c40::/32 -add china_ip6_route 2401:cc0::/32 -add china_ip6_route 2401:d40::/32 -add china_ip6_route 2401:e00::/32 -add china_ip6_route 2401:1000::/32 -add china_ip6_route 2401:11c0::/32 -add china_ip6_route 2401:1200::/32 -add china_ip6_route 2401:12c0::/32 -add china_ip6_route 2401:15c0::/32 -add china_ip6_route 2401:1740::/32 -add china_ip6_route 2401:18c0::/32 -add china_ip6_route 2401:1940::/32 -add china_ip6_route 2401:19c0::/32 -add china_ip6_route 2401:1a40::/32 -add china_ip6_route 2401:1ac0::/32 -add china_ip6_route 2401:1d40::/32 -add china_ip6_route 2401:1dc0::/32 -add china_ip6_route 2401:1e00::/32 -add china_ip6_route 2401:1ec0::/32 -add china_ip6_route 2401:1f40::/32 -add china_ip6_route 2401:2040::/32 -add china_ip6_route 2401:2080::/32 -add china_ip6_route 2401:23c0::/32 -add china_ip6_route 2401:2600::/32 -add china_ip6_route 2401:2780::/32 -add china_ip6_route 2401:2980::/32 -add china_ip6_route 2401:2a00::/32 -add china_ip6_route 2401:2b40::/32 -add china_ip6_route 2401:2e00::/32 -add china_ip6_route 2401:3100::/32 -add china_ip6_route 2401:3380::/32 -add china_ip6_route 2401:33c0::/32 -add china_ip6_route 2401:3440::/32 -add china_ip6_route 2401:3480::/32 -add china_ip6_route 2401:34c0::/32 -add china_ip6_route 2401:3640::/32 -add china_ip6_route 2401:3780::/32 -add china_ip6_route 2401:3800::/32 -add china_ip6_route 2401:3880::/32 -add china_ip6_route 2401:3980::/32 -add china_ip6_route 2401:3a00::/32 -add china_ip6_route 2401:3a80::/32 -add china_ip6_route 2401:3b80::/32 -add china_ip6_route 2401:3c80::/32 -add china_ip6_route 2401:3d80::/32 -add china_ip6_route 2401:3e80::/32 -add china_ip6_route 2401:3f80::/32 -add china_ip6_route 2401:4080::/32 -add china_ip6_route 2401:4180::/32 -add china_ip6_route 2401:4280::/32 -add china_ip6_route 2401:4380::/32 -add china_ip6_route 2401:4480::/32 -add china_ip6_route 2401:4580::/32 -add china_ip6_route 2401:4680::/32 -add china_ip6_route 2401:4780::/32 -add china_ip6_route 2401:4880::/32 -add china_ip6_route 2401:4a80::/32 -add china_ip6_route 2401:4b00::/32 -add china_ip6_route 2401:4f80::/32 -add china_ip6_route 2401:5180::/32 -add china_ip6_route 2401:5680::/32 -add china_ip6_route 2401:56c0::/32 -add china_ip6_route 2401:59c0::/32 -add china_ip6_route 2401:5b40::/32 -add china_ip6_route 2401:5c80::/32 -add china_ip6_route 2401:7180::/32 -add china_ip6_route 2401:71c0::/32 -add china_ip6_route 2401:7240::/32 -add china_ip6_route 2401:7340::/32 -add china_ip6_route 2401:7580::/32 -add china_ip6_route 2401:7680::/32 -add china_ip6_route 2401:7700::/32 -add china_ip6_route 2401:7780::/32 -add china_ip6_route 2401:7880::/32 -add china_ip6_route 2401:7980::/32 -add china_ip6_route 2401:7a00::/32 -add china_ip6_route 2401:7a80::/32 -add china_ip6_route 2401:7b80::/32 -add china_ip6_route 2401:7bc0::/32 -add china_ip6_route 2401:7c80::/32 -add china_ip6_route 2401:7cc0::/32 -add china_ip6_route 2401:7d40::/32 -add china_ip6_route 2401:7d80::/32 -add china_ip6_route 2401:7e00::/32 -add china_ip6_route 2401:7f80::/32 -add china_ip6_route 2401:8200::/32 -add china_ip6_route 2401:82c0::/32 -add china_ip6_route 2401:8380::/32 -add china_ip6_route 2401:8540::/32 -add china_ip6_route 2401:8600::/32 -add china_ip6_route 2401:8680::/32 -add china_ip6_route 2401:8840::/32 -add china_ip6_route 2401:8d00::/32 -add china_ip6_route 2401:8f40::/32 -add china_ip6_route 2401:8fc0::/32 -add china_ip6_route 2401:9340::/32 -add china_ip6_route 2401:9600::/32 -add china_ip6_route 2401:96c0::/32 -add china_ip6_route 2401:9740::/32 -add china_ip6_route 2401:98c0::/32 -add china_ip6_route 2401:9a00::/32 -add china_ip6_route 2401:9ac0::/32 -add china_ip6_route 2401:9b40::/32 -add china_ip6_route 2401:9bc0::/32 -add china_ip6_route 2401:9dc0::/32 -add china_ip6_route 2401:9e40::/32 -add china_ip6_route 2401:9f80::/32 -add china_ip6_route 2401:a140::/32 -add china_ip6_route 2401:a180::/32 -add china_ip6_route 2401:a340::/32 -add china_ip6_route 2401:a3c0::/32 -add china_ip6_route 2401:a4c0::/32 -add china_ip6_route 2401:a540::/32 -add china_ip6_route 2401:a5c0::/32 -add china_ip6_route 2401:a640::/32 -add china_ip6_route 2401:a940::/32 -add china_ip6_route 2401:a980::/32 -add china_ip6_route 2401:aa00::/32 -add china_ip6_route 2401:aa40::/32 -add china_ip6_route 2401:acc0::/32 -add china_ip6_route 2401:ad40::/32 -add china_ip6_route 2401:adc0::/32 -add china_ip6_route 2401:b040::/32 -add china_ip6_route 2401:b180::/32 -add china_ip6_route 2401:b340::/32 -add china_ip6_route 2401:b400::/32 -add china_ip6_route 2401:b480::/32 -add china_ip6_route 2401:b4c0::/32 -add china_ip6_route 2401:b540::/32 -add china_ip6_route 2401:b580::/32 -add china_ip6_route 2401:b600::/32 -add china_ip6_route 2401:b680::/32 -add china_ip6_route 2401:b6c0::/32 -add china_ip6_route 2401:b7c0::/32 -add china_ip6_route 2401:b940::/32 -add china_ip6_route 2401:ba00::/32 -add china_ip6_route 2401:ba40::/32 -add china_ip6_route 2401:bb80::/32 -add china_ip6_route 2401:be00::/32 -add china_ip6_route 2401:c200::/32 -add china_ip6_route 2401:c540::/32 -add china_ip6_route 2401:c600::/32 -add china_ip6_route 2401:c640::/32 -add china_ip6_route 2401:c6c0::/32 -add china_ip6_route 2401:c840::/32 -add china_ip6_route 2401:c8c0::/32 -add china_ip6_route 2401:ca00::/32 -add china_ip6_route 2401:cb80::/32 -add china_ip6_route 2401:cc00::/32 -add china_ip6_route 2401:ce00::/32 -add china_ip6_route 2401:cf40::/32 -add china_ip6_route 2401:cfc0::/32 -add china_ip6_route 2401:d0c0::/32 -add china_ip6_route 2401:d140::/32 -add china_ip6_route 2401:d180::/32 -add china_ip6_route 2401:d2c0::/32 -add china_ip6_route 2401:d340::/32 -add china_ip6_route 2401:d780::/32 -add china_ip6_route 2401:da00::/32 -add china_ip6_route 2401:de00::/32 -add china_ip6_route 2401:e080::/32 -add china_ip6_route 2401:e0c0::/32 -add china_ip6_route 2401:e140::/32 -add china_ip6_route 2401:e240::/32 -add china_ip6_route 2401:e2c0::/32 -add china_ip6_route 2401:e340::/32 -add china_ip6_route 2401:e6c0::/32 -add china_ip6_route 2401:e840::/32 -add china_ip6_route 2401:e8c0::/32 -add china_ip6_route 2401:e940::/32 -add china_ip6_route 2401:e9c0::/32 -add china_ip6_route 2401:ec00::/32 -add china_ip6_route 2401:ec40::/32 -add china_ip6_route 2401:f300::/32 -add china_ip6_route 2401:f7c0::/32 -add china_ip6_route 2401:fa80::/32 -add china_ip6_route 2401:fb80::/32 -add china_ip6_route 2401:fc80::/32 -add china_ip6_route 2401:fe80::/32 -add china_ip6_route 2401:ffc0::/32 -add china_ip6_route 2402:440::/32 -add china_ip6_route 2402:5c0::/32 -add china_ip6_route 2402:840::/32 -add china_ip6_route 2402:ac0::/32 -add china_ip6_route 2402:e00::/32 -add china_ip6_route 2402:fc0::/32 -add china_ip6_route 2402:1000::/32 -add china_ip6_route 2402:1440::/32 -add china_ip6_route 2402:14c0::/32 -add china_ip6_route 2402:1540::/32 -add china_ip6_route 2402:1600::/32 -add china_ip6_route 2402:1740::/32 -add china_ip6_route 2402:19c0::/32 -add china_ip6_route 2402:1ec0::/32 -add china_ip6_route 2402:1f40::/32 -add china_ip6_route 2402:1f80::/32 -add china_ip6_route 2402:2000::/32 -add china_ip6_route 2402:2280::/32 -add china_ip6_route 2402:22c0::/32 -add china_ip6_route 2402:2440::/32 -add china_ip6_route 2402:24c0::/32 -add china_ip6_route 2402:2540::/32 -add china_ip6_route 2402:2640::/32 -add china_ip6_route 2402:27c0::/32 -add china_ip6_route 2402:2a00::/32 -add china_ip6_route 2402:2b80::/32 -add china_ip6_route 2402:2bc0::/32 -add china_ip6_route 2402:2d00::/32 -add china_ip6_route 2402:2d80::/32 -add china_ip6_route 2402:2e80::/32 -add china_ip6_route 2402:2f40::/32 -add china_ip6_route 2402:3040::/32 -add china_ip6_route 2402:3080::/32 -add china_ip6_route 2402:3140::/32 -add china_ip6_route 2402:3180::/32 -add china_ip6_route 2402:31c0::/32 -add china_ip6_route 2402:3240::/32 -add china_ip6_route 2402:33c0::/32 -add china_ip6_route 2402:39c0::/32 -add china_ip6_route 2402:3a40::/32 -add china_ip6_route 2402:3ac0::/32 -add china_ip6_route 2402:3c00::/32 -add china_ip6_route 2402:3e00::/32 -add china_ip6_route 2402:3ec0::/32 -add china_ip6_route 2402:3f80::/32 -add china_ip6_route 2402:4140::/32 -add china_ip6_route 2402:42c0::/32 -add china_ip6_route 2402:4340::/32 -add china_ip6_route 2402:43c0::/32 -add china_ip6_route 2402:4440::/32 -add china_ip6_route 2402:4500::/32 -add china_ip6_route 2402:4540::/32 -add china_ip6_route 2402:4a00::/32 -add china_ip6_route 2402:4a40::/32 -add china_ip6_route 2402:4a80::/32 -add china_ip6_route 2402:4ac0::/32 -add china_ip6_route 2402:4b80::/32 -add china_ip6_route 2402:4bc0::/32 -add china_ip6_route 2402:4c40::/32 -add china_ip6_route 2402:4d80::/32 -add china_ip6_route 2402:4e00::/32 -add china_ip6_route 2402:4ec0::/32 -add china_ip6_route 2402:4f80::/32 -add china_ip6_route 2402:50c0::/32 -add china_ip6_route 2402:5140::/32 -add china_ip6_route 2402:5180::/32 -add china_ip6_route 2402:51c0::/32 -add china_ip6_route 2402:5240::/32 -add china_ip6_route 2402:52c0::/32 -add china_ip6_route 2402:5340::/32 -add china_ip6_route 2402:5880::/32 -add china_ip6_route 2402:5940::/32 -add china_ip6_route 2402:59c0::/32 -add china_ip6_route 2402:5a40::/32 -add china_ip6_route 2402:5b40::/32 -add china_ip6_route 2402:5bc0::/32 -add china_ip6_route 2402:5d00::/32 -add china_ip6_route 2402:5e00::/32 -add china_ip6_route 2402:5e40::/32 -add china_ip6_route 2402:5ec0::/32 -add china_ip6_route 2402:5f40::/32 -add china_ip6_route 2402:6280::/32 -add china_ip6_route 2402:62c0::/32 -add china_ip6_route 2402:64c0::/32 -add china_ip6_route 2402:66c0::/32 -add china_ip6_route 2402:6740::/32 -add china_ip6_route 2402:67c0::/32 -add china_ip6_route 2402:6a00::/32 -add china_ip6_route 2402:6b40::/32 -add china_ip6_route 2402:6bc0::/32 -add china_ip6_route 2402:6e00::/32 -add china_ip6_route 2402:6e80::/32 -add china_ip6_route 2402:6ec0::/32 -add china_ip6_route 2402:6f40::/32 -add china_ip6_route 2402:6fc0::/32 -add china_ip6_route 2402:7040::/32 -add china_ip6_route 2402:7080::/32 -add china_ip6_route 2402:70c0::/32 -add china_ip6_route 2402:7140::/32 -add china_ip6_route 2402:71c0::/32 -add china_ip6_route 2402:7240::/32 -add china_ip6_route 2402:72c0::/32 -add china_ip6_route 2402:7540::/32 -add china_ip6_route 2402:75c0::/32 -add china_ip6_route 2402:7740::/32 -add china_ip6_route 2402:7d00::/32 -add china_ip6_route 2402:7d80::/32 -add china_ip6_route 2402:8180::/32 -add china_ip6_route 2402:8300::/32 -add china_ip6_route 2402:8380::/32 -add china_ip6_route 2402:85c0::/32 -add china_ip6_route 2402:8800::/32 -add china_ip6_route 2402:8840::/32 -add china_ip6_route 2402:8900::/32 -add china_ip6_route 2402:8940::/32 -add china_ip6_route 2402:89c0::/32 -add china_ip6_route 2402:8b40::/32 -add china_ip6_route 2402:8bc0::/32 -add china_ip6_route 2402:8cc0::/32 -add china_ip6_route 2402:8d40::/32 -add china_ip6_route 2402:8f40::/32 -add china_ip6_route 2402:8f80::/32 -add china_ip6_route 2402:9240::/32 -add china_ip6_route 2402:92c0::/32 -add china_ip6_route 2402:93c0::/32 -add china_ip6_route 2402:9440::/32 -add china_ip6_route 2402:9480::/32 -add china_ip6_route 2402:94c0::/32 -add china_ip6_route 2402:9580::/32 -add china_ip6_route 2402:95c0::/32 -add china_ip6_route 2402:9680::/32 -add china_ip6_route 2402:96c0::/32 -add china_ip6_route 2402:9840::/32 -add china_ip6_route 2402:98c0::/32 -add china_ip6_route 2402:9940::/32 -add china_ip6_route 2402:9a80::/32 -add china_ip6_route 2402:9b80::/32 -add china_ip6_route 2402:9f80::/32 -add china_ip6_route 2402:9fc0::/32 -add china_ip6_route 2402:a080::/32 -add china_ip6_route 2402:a180::/32 -add china_ip6_route 2402:a200::/32 -add china_ip6_route 2402:a240::/32 -add china_ip6_route 2402:a280::/32 -add china_ip6_route 2402:a380::/32 -add china_ip6_route 2402:a3c0::/32 -add china_ip6_route 2402:a640::/32 -add china_ip6_route 2402:a680::/32 -add china_ip6_route 2402:a6c0::/32 -add china_ip6_route 2402:a840::/32 -add china_ip6_route 2402:a880::/32 -add china_ip6_route 2402:a9c0::/32 -add china_ip6_route 2402:aa80::/32 -add china_ip6_route 2402:ab80::/32 -add china_ip6_route 2402:ae00::/32 -add china_ip6_route 2402:ae40::/32 -add china_ip6_route 2402:aec0::/32 -add china_ip6_route 2402:af80::/32 -add china_ip6_route 2402:afc0::/32 -add china_ip6_route 2402:b080::/32 -add china_ip6_route 2402:b200::/32 -add china_ip6_route 2402:b380::/32 -add china_ip6_route 2402:b3c0::/32 -add china_ip6_route 2402:b440::/32 -add china_ip6_route 2402:b6c0::/32 -add china_ip6_route 2402:b880::/32 -add china_ip6_route 2402:b8c0::/32 -add china_ip6_route 2402:b940::/32 -add china_ip6_route 2402:b980::/32 -add china_ip6_route 2402:ba80::/32 -add china_ip6_route 2402:bac0::/32 -add china_ip6_route 2402:bbc0::/32 -add china_ip6_route 2402:bf80::/32 -add china_ip6_route 2402:c280::/32 -add china_ip6_route 2402:c3c0::/32 -add china_ip6_route 2402:c5c0::/32 -add china_ip6_route 2402:c9c0::/32 -add china_ip6_route 2402:cbc0::/32 -add china_ip6_route 2402:cc40::/32 -add china_ip6_route 2402:cc80::/32 -add china_ip6_route 2402:cf00::/32 -add china_ip6_route 2402:cf40::/32 -add china_ip6_route 2402:d040::/32 -add china_ip6_route 2402:d140::/32 -add china_ip6_route 2402:d2c0::/32 -add china_ip6_route 2402:d300::/32 -add china_ip6_route 2402:d340::/32 -add china_ip6_route 2402:d380::/32 -add china_ip6_route 2402:d5c0::/32 -add china_ip6_route 2402:d6c0::/32 -add china_ip6_route 2402:d740::/32 -add china_ip6_route 2402:d780::/32 -add china_ip6_route 2402:d880::/32 -add china_ip6_route 2402:d980::/32 -add china_ip6_route 2402:da40::/32 -add china_ip6_route 2402:db40::/32 -add china_ip6_route 2402:dcc0::/32 -add china_ip6_route 2402:de40::/32 -add china_ip6_route 2402:dec0::/32 -add china_ip6_route 2402:df40::/32 -add china_ip6_route 2402:dfc0::/32 -add china_ip6_route 2402:e040::/32 -add china_ip6_route 2402:e0c0::/32 -add china_ip6_route 2402:e140::/32 -add china_ip6_route 2402:e2c0::/32 -add china_ip6_route 2402:e3c0::/32 -add china_ip6_route 2402:e480::/32 -add china_ip6_route 2402:e540::/32 -add china_ip6_route 2402:e680::/32 -add china_ip6_route 2402:e740::/32 -add china_ip6_route 2402:e780::/32 -add china_ip6_route 2402:e7c0::/32 -add china_ip6_route 2402:e880::/32 -add china_ip6_route 2402:e980::/32 -add china_ip6_route 2402:eb80::/32 -add china_ip6_route 2402:ec80::/32 -add china_ip6_route 2402:ed80::/32 -add china_ip6_route 2402:ef40::/32 -add china_ip6_route 2402:ef80::/32 -add china_ip6_route 2402:f000::/32 -add china_ip6_route 2402:f140::/32 -add china_ip6_route 2402:f340::/32 -add china_ip6_route 2402:f3c0::/32 -add china_ip6_route 2402:f480::/32 -add china_ip6_route 2402:f540::/32 -add china_ip6_route 2402:f580::/32 -add china_ip6_route 2402:f740::/32 -add china_ip6_route 2402:f780::/32 -add china_ip6_route 2402:f8c0::/32 -add china_ip6_route 2402:f980::/32 -add china_ip6_route 2402:f9c0::/32 -add china_ip6_route 2402:fac0::/32 -add china_ip6_route 2402:fcc0::/32 -add china_ip6_route 2402:ff40::/32 -add china_ip6_route 2402:ffc0::/32 -add china_ip6_route 2403:600::/32 -add china_ip6_route 2403:700::/32 -add china_ip6_route 2403:7c0::/32 -add china_ip6_route 2403:800::/31 -add china_ip6_route 2403:980::/32 -add china_ip6_route 2403:a80::/32 -add china_ip6_route 2403:b80::/32 -add china_ip6_route 2403:c80::/32 -add china_ip6_route 2403:d40::/32 -add china_ip6_route 2403:d80::/32 -add china_ip6_route 2403:e80::/32 -add china_ip6_route 2403:f00::/32 -add china_ip6_route 2403:f40::/32 -add china_ip6_route 2403:f80::/32 -add china_ip6_route 2403:fc0::/32 -add china_ip6_route 2403:1180::/32 -add china_ip6_route 2403:1340::/32 -add china_ip6_route 2403:1440::/32 -add china_ip6_route 2403:1580::/32 -add china_ip6_route 2403:16c0::/32 -add china_ip6_route 2403:17c0::/32 -add china_ip6_route 2403:1980::/32 -add china_ip6_route 2403:1a40::/32 -add china_ip6_route 2403:1b80::/32 -add china_ip6_route 2403:1c80::/32 -add china_ip6_route 2403:1d80::/32 -add china_ip6_route 2403:1dc0::/32 -add china_ip6_route 2403:1e80::/32 -add china_ip6_route 2403:1ec0::/32 -add china_ip6_route 2403:1f80::/32 -add china_ip6_route 2403:2040::/32 -add china_ip6_route 2403:2080::/32 -add china_ip6_route 2403:2180::/32 -add china_ip6_route 2403:2240::/32 -add china_ip6_route 2403:2280::/32 -add china_ip6_route 2403:2380::/32 -add china_ip6_route 2403:2440::/32 -add china_ip6_route 2403:24c0::/32 -add china_ip6_route 2403:2580::/32 -add china_ip6_route 2403:25c0::/32 -add china_ip6_route 2403:2680::/32 -add china_ip6_route 2403:26c0::/32 -add china_ip6_route 2403:2740::/32 -add china_ip6_route 2403:2780::/32 -add china_ip6_route 2403:28c0::/32 -add china_ip6_route 2403:2940::/32 -add china_ip6_route 2403:2a00::/32 -add china_ip6_route 2403:2a40::/32 -add china_ip6_route 2403:2ac0::/32 -add china_ip6_route 2403:2b40::/32 -add china_ip6_route 2403:2bc0::/32 -add china_ip6_route 2403:2cc0::/32 -add china_ip6_route 2403:2f40::/32 -add china_ip6_route 2403:2fc0::/32 -add china_ip6_route 2403:3040::/32 -add china_ip6_route 2403:30c0::/32 -add china_ip6_route 2403:3140::/32 -add china_ip6_route 2403:3280::/32 -add china_ip6_route 2403:32c0::/32 -add china_ip6_route 2403:3380::/32 -add china_ip6_route 2403:3480::/32 -add china_ip6_route 2403:3580::/32 -add china_ip6_route 2403:3640::/32 -add china_ip6_route 2403:3680::/32 -add china_ip6_route 2403:36c0::/32 -add china_ip6_route 2403:3740::/32 -add china_ip6_route 2403:3780::/32 -add china_ip6_route 2403:37c0::/32 -add china_ip6_route 2403:3840::/32 -add china_ip6_route 2403:3880::/32 -add china_ip6_route 2403:38c0::/32 -add china_ip6_route 2403:3940::/32 -add china_ip6_route 2403:3980::/32 -add china_ip6_route 2403:39c0::/32 -add china_ip6_route 2403:3a40::/32 -add china_ip6_route 2403:3b40::/32 -add china_ip6_route 2403:3b80::/32 -add china_ip6_route 2403:3bc0::/32 -add china_ip6_route 2403:3c40::/32 -add china_ip6_route 2403:3c80::/32 -add china_ip6_route 2403:3cc0::/32 -add china_ip6_route 2403:3d40::/32 -add china_ip6_route 2403:3d80::/32 -add china_ip6_route 2403:3dc0::/32 -add china_ip6_route 2403:3e80::/32 -add china_ip6_route 2403:3ec0::/32 -add china_ip6_route 2403:3f40::/32 -add china_ip6_route 2403:3f80::/32 -add china_ip6_route 2403:4080::/32 -add china_ip6_route 2403:4180::/32 -add china_ip6_route 2403:4240::/32 -add china_ip6_route 2403:4280::/32 -add china_ip6_route 2403:4300::/32 -add china_ip6_route 2403:4380::/32 -add china_ip6_route 2403:4580::/32 -add china_ip6_route 2403:4680::/32 -add china_ip6_route 2403:4780::/32 -add china_ip6_route 2403:4840::/32 -add china_ip6_route 2403:4880::/32 -add china_ip6_route 2403:4980::/32 -add china_ip6_route 2403:4a40::/32 -add china_ip6_route 2403:4a80::/32 -add china_ip6_route 2403:4b40::/32 -add china_ip6_route 2403:4b80::/32 -add china_ip6_route 2403:4c80::/32 -add china_ip6_route 2403:4cc0::/32 -add china_ip6_route 2403:4d40::/32 -add china_ip6_route 2403:4d80::/32 -add china_ip6_route 2403:4ec0::/32 -add china_ip6_route 2403:5040::/32 -add china_ip6_route 2403:5080::/32 -add china_ip6_route 2403:50c0::/32 -add china_ip6_route 2403:5280::/32 -add china_ip6_route 2403:5380::/32 -add china_ip6_route 2403:54c0::/32 -add china_ip6_route 2403:5540::/32 -add china_ip6_route 2403:5580::/32 -add china_ip6_route 2403:5640::/32 -add china_ip6_route 2403:5780::/32 -add china_ip6_route 2403:58c0::/32 -add china_ip6_route 2403:5980::/32 -add china_ip6_route 2403:5a80::/32 -add china_ip6_route 2403:5b40::/32 -add china_ip6_route 2403:5b80::/32 -add china_ip6_route 2403:5c80::/32 -add china_ip6_route 2403:5d80::/32 -add china_ip6_route 2403:5e40::/32 -add china_ip6_route 2403:5e80::/32 -add china_ip6_route 2403:5ec0::/32 -add china_ip6_route 2403:5f80::/32 -add china_ip6_route 2403:5fc0::/32 -add china_ip6_route 2403:6080::/32 -add china_ip6_route 2403:6180::/32 -add china_ip6_route 2403:6280::/32 -add china_ip6_route 2403:62c0::/32 -add china_ip6_route 2403:6380::/32 -add china_ip6_route 2403:6580::/32 -add china_ip6_route 2403:6680::/32 -add china_ip6_route 2403:6740::/32 -add china_ip6_route 2403:6780::/32 -add china_ip6_route 2403:6880::/32 -add china_ip6_route 2403:6980::/32 -add china_ip6_route 2403:6a00::/32 -add china_ip6_route 2403:6c80::/32 -add china_ip6_route 2403:6d40::/32 -add china_ip6_route 2403:6d80::/32 -add china_ip6_route 2403:6e80::/32 -add china_ip6_route 2403:6f40::/32 -add china_ip6_route 2403:6fc0::/32 -add china_ip6_route 2403:7040::/32 -add china_ip6_route 2403:7080::/32 -add china_ip6_route 2403:7180::/32 -add china_ip6_route 2403:7280::/32 -add china_ip6_route 2403:7380::/32 -add china_ip6_route 2403:7480::/32 -add china_ip6_route 2403:7540::/32 -add china_ip6_route 2403:7580::/32 -add china_ip6_route 2403:76c0::/32 -add china_ip6_route 2403:7700::/32 -add china_ip6_route 2403:7840::/32 -add china_ip6_route 2403:78c0::/32 -add china_ip6_route 2403:7a80::/32 -add china_ip6_route 2403:7b00::/32 -add china_ip6_route 2403:7d80::/32 -add china_ip6_route 2403:7e80::/32 -add china_ip6_route 2403:7f80::/32 -add china_ip6_route 2403:8080::/32 -add china_ip6_route 2403:8180::/32 -add china_ip6_route 2403:8280::/32 -add china_ip6_route 2403:8380::/32 -add china_ip6_route 2403:83c0::/32 -add china_ip6_route 2403:8480::/32 -add china_ip6_route 2403:8580::/32 -add china_ip6_route 2403:8880::/32 -add china_ip6_route 2403:8900::/32 -add china_ip6_route 2403:8980::/32 -add china_ip6_route 2403:8a40::/32 -add china_ip6_route 2403:8a80::/32 -add china_ip6_route 2403:8b00::/32 -add china_ip6_route 2403:8b80::/32 -add china_ip6_route 2403:8c00::/32 -add china_ip6_route 2403:8c80::/32 -add china_ip6_route 2403:8d00::/32 -add china_ip6_route 2403:8d80::/32 -add china_ip6_route 2403:9080::/32 -add china_ip6_route 2403:9180::/32 -add china_ip6_route 2403:9280::/32 -add china_ip6_route 2403:9380::/32 -add china_ip6_route 2403:9480::/32 -add china_ip6_route 2403:9580::/32 -add china_ip6_route 2403:9680::/32 -add china_ip6_route 2403:9780::/32 -add china_ip6_route 2403:9880::/32 -add china_ip6_route 2403:9a80::/32 -add china_ip6_route 2403:9ac0::/32 -add china_ip6_route 2403:9b00::/32 -add china_ip6_route 2403:9b40::/32 -add china_ip6_route 2403:9b80::/32 -add china_ip6_route 2403:9c80::/32 -add china_ip6_route 2403:9d00::/32 -add china_ip6_route 2403:9d80::/32 -add china_ip6_route 2403:9e40::/32 -add china_ip6_route 2403:9e80::/32 -add china_ip6_route 2403:9ec0::/32 -add china_ip6_route 2403:9f80::/32 -add china_ip6_route 2403:a100::/32 -add china_ip6_route 2403:a140::/32 -add china_ip6_route 2403:a200::/32 -add china_ip6_route 2403:a300::/32 -add china_ip6_route 2403:a480::/32 -add china_ip6_route 2403:a580::/32 -add china_ip6_route 2403:a680::/32 -add china_ip6_route 2403:a6c0::/32 -add china_ip6_route 2403:a780::/32 -add china_ip6_route 2403:a880::/32 -add china_ip6_route 2403:a940::/32 -add china_ip6_route 2403:a980::/32 -add china_ip6_route 2403:a9c0::/32 -add china_ip6_route 2403:aa40::/32 -add china_ip6_route 2403:aa80::/32 -add china_ip6_route 2403:ab80::/32 -add china_ip6_route 2403:ac00::/32 -add china_ip6_route 2403:af80::/32 -add china_ip6_route 2403:b080::/32 -add china_ip6_route 2403:b180::/32 -add china_ip6_route 2403:b280::/32 -add china_ip6_route 2403:b380::/32 -add china_ip6_route 2403:b400::/32 -add china_ip6_route 2403:b480::/32 -add china_ip6_route 2403:b580::/32 -add china_ip6_route 2403:b680::/32 -add china_ip6_route 2403:b780::/32 -add china_ip6_route 2403:b880::/32 -add china_ip6_route 2403:b980::/32 -add china_ip6_route 2403:ba40::/32 -add china_ip6_route 2403:c040::/32 -add china_ip6_route 2403:c080::/32 -add china_ip6_route 2403:c100::/32 -add china_ip6_route 2403:c140::/32 -add china_ip6_route 2403:c180::/32 -add china_ip6_route 2403:c3c0::/32 -add china_ip6_route 2403:c440::/32 -add china_ip6_route 2403:c480::/32 -add china_ip6_route 2403:c4c0::/32 -add china_ip6_route 2403:c980::/32 -add china_ip6_route 2403:cdc0::/32 -add china_ip6_route 2403:cec0::/32 -add china_ip6_route 2403:cf80::/32 -add china_ip6_route 2403:d080::/32 -add china_ip6_route 2403:d180::/32 -add china_ip6_route 2403:d280::/32 -add china_ip6_route 2403:d2c0::/32 -add china_ip6_route 2403:d380::/32 -add china_ip6_route 2403:d400::/32 -add china_ip6_route 2403:d440::/32 -add china_ip6_route 2403:d480::/32 -add china_ip6_route 2403:d580::/32 -add china_ip6_route 2403:d680::/32 -add china_ip6_route 2403:d780::/32 -add china_ip6_route 2403:d7c0::/32 -add china_ip6_route 2403:d880::/32 -add china_ip6_route 2403:d980::/32 -add china_ip6_route 2403:d9c0::/32 -add china_ip6_route 2403:da80::/32 -add china_ip6_route 2403:dac0::/32 -add china_ip6_route 2403:db00::/32 -add china_ip6_route 2403:db80::/32 -add china_ip6_route 2403:dc80::/32 -add china_ip6_route 2403:dd80::/32 -add china_ip6_route 2403:de80::/32 -add china_ip6_route 2403:df80::/32 -add china_ip6_route 2403:e080::/32 -add china_ip6_route 2403:e180::/32 -add china_ip6_route 2403:e280::/32 -add china_ip6_route 2403:e300::/32 -add china_ip6_route 2403:e480::/32 -add china_ip6_route 2403:e500::/32 -add china_ip6_route 2403:e580::/32 -add china_ip6_route 2403:e640::/32 -add china_ip6_route 2403:e680::/32 -add china_ip6_route 2403:e700::/32 -add china_ip6_route 2403:e780::/32 -add china_ip6_route 2403:e7c0::/32 -add china_ip6_route 2403:e880::/32 -add china_ip6_route 2403:e980::/32 -add china_ip6_route 2403:ea80::/32 -add china_ip6_route 2403:eac0::/32 -add china_ip6_route 2403:eb80::/32 -add china_ip6_route 2403:ec80::/32 -add china_ip6_route 2403:ed00::/32 -add china_ip6_route 2403:ed40::/32 -add china_ip6_route 2403:ed80::/32 -add china_ip6_route 2403:ee80::/32 -add china_ip6_route 2403:ef80::/32 -add china_ip6_route 2403:f080::/32 -add china_ip6_route 2403:f100::/32 -add china_ip6_route 2403:f180::/32 -add china_ip6_route 2403:f240::/32 -add china_ip6_route 2403:f280::/32 -add china_ip6_route 2403:f300::/32 -add china_ip6_route 2403:f380::/32 -add china_ip6_route 2403:f4c0::/32 -add china_ip6_route 2403:f580::/32 -add china_ip6_route 2403:f740::/32 -add china_ip6_route 2403:f8c0::/32 -add china_ip6_route 2403:f980::/32 -add china_ip6_route 2403:fb00::/32 -add china_ip6_route 2403:fb80::/32 -add china_ip6_route 2403:fc40::/32 -add china_ip6_route 2403:fe40::/32 -add china_ip6_route 2403:fe80::/32 -add china_ip6_route 2403:fec0::/32 -add china_ip6_route 2403:ff80::/32 -add china_ip6_route 2403:ffc0::/32 -add china_ip6_route 2404:100::/32 -add china_ip6_route 2404:158::/32 -add china_ip6_route 2404:240::/32 -add china_ip6_route 2404:280::/32 -add china_ip6_route 2404:440::/32 -add china_ip6_route 2404:480::/32 -add china_ip6_route 2404:680::/32 -add china_ip6_route 2404:a80::/32 -add china_ip6_route 2404:b80::/32 -add china_ip6_route 2404:bc0::/32 -add china_ip6_route 2404:c40::/32 -add china_ip6_route 2404:d80::/32 -add china_ip6_route 2404:f00::/32 -add china_ip6_route 2404:f80::/32 -add china_ip6_route 2404:1080::/32 -add china_ip6_route 2404:10c0::/32 -add china_ip6_route 2404:1180::/32 -add china_ip6_route 2404:14c0::/32 -add china_ip6_route 2404:1880::/32 -add china_ip6_route 2404:1c80::/32 -add china_ip6_route 2404:1cc0::/32 -add china_ip6_route 2404:1d80::/32 -add china_ip6_route 2404:1e80::/32 -add china_ip6_route 2404:1f40::/32 -add china_ip6_route 2404:21c0::/32 -add china_ip6_route 2404:30c0::/32 -add china_ip6_route 2404:3140::/32 -add china_ip6_route 2404:31c0::/32 -add china_ip6_route 2404:3240::/32 -add china_ip6_route 2404:32c0::/32 -add china_ip6_route 2404:3300::/32 -add china_ip6_route 2404:3340::/32 -add china_ip6_route 2404:3480::/32 -add china_ip6_route 2404:35c0::/32 -add china_ip6_route 2404:3640::/32 -add china_ip6_route 2404:36c0::/32 -add china_ip6_route 2404:3700::/32 -add china_ip6_route 2404:3740::/32 -add china_ip6_route 2404:37c0::/32 -add china_ip6_route 2404:3840::/32 -add china_ip6_route 2404:3940::/32 -add china_ip6_route 2404:3b00::/32 -add china_ip6_route 2404:3bc0::/32 -add china_ip6_route 2404:3c40::/32 -add china_ip6_route 2404:3f40::/32 -add china_ip6_route 2404:4080::/32 -add china_ip6_route 2404:41c0::/32 -add china_ip6_route 2404:4540::/32 -add china_ip6_route 2404:4740::/32 -add china_ip6_route 2404:4bc0::/32 -add china_ip6_route 2404:4d00::/32 -add china_ip6_route 2404:4dc0::/32 -add china_ip6_route 2404:51c0::/32 -add china_ip6_route 2404:5640::/32 -add china_ip6_route 2404:5a80::/32 -add china_ip6_route 2404:5b00::/32 -add china_ip6_route 2404:5d00::/32 -add china_ip6_route 2404:5e80::/32 -add china_ip6_route 2404:6000::/32 -add china_ip6_route 2404:6100::/32 -add china_ip6_route 2404:6380::/32 -add china_ip6_route 2404:6500::/32 -add china_ip6_route 2404:65c0::/32 -add china_ip6_route 2404:6a40::/32 -add china_ip6_route 2404:6f80::/32 -add china_ip6_route 2404:7100::/32 -add china_ip6_route 2404:7180::/32 -add china_ip6_route 2404:71c0::/32 -add china_ip6_route 2404:7240::/32 -add china_ip6_route 2404:74c0::/32 -add china_ip6_route 2404:7600::/32 -add china_ip6_route 2404:7740::/32 -add china_ip6_route 2404:7940::/32 -add china_ip6_route 2404:7d00::/32 -add china_ip6_route 2404:8040::/32 -add china_ip6_route 2404:80c0::/32 -add china_ip6_route 2404:8140::/32 -add china_ip6_route 2404:81c0::/32 -add china_ip6_route 2404:8480::/32 -add china_ip6_route 2404:8580::/32 -add china_ip6_route 2404:8700::/32 -add china_ip6_route 2404:8880::/32 -add china_ip6_route 2404:8a80::/32 -add china_ip6_route 2404:8b00::/32 -add china_ip6_route 2404:8dc0::/32 -add china_ip6_route 2404:9340::/32 -add china_ip6_route 2404:9b80::/32 -add china_ip6_route 2404:9c80::/32 -add china_ip6_route 2404:a000::/32 -add china_ip6_route 2404:a080::/32 -add china_ip6_route 2404:a0c0::/32 -add china_ip6_route 2404:a180::/32 -add china_ip6_route 2404:a240::/32 -add china_ip6_route 2404:a740::/32 -add china_ip6_route 2404:b100::/32 -add china_ip6_route 2404:b340::/32 -add china_ip6_route 2404:b3c0::/32 -add china_ip6_route 2404:b440::/32 -add china_ip6_route 2404:b4c0::/32 -add china_ip6_route 2404:b900::/32 -add china_ip6_route 2404:bbc0::/32 -add china_ip6_route 2404:bc40::/32 -add china_ip6_route 2404:c1c0::/32 -add china_ip6_route 2404:c240::/32 -add china_ip6_route 2404:c2c0::/32 -add china_ip6_route 2404:c300::/32 -add china_ip6_route 2404:c3c0::/32 -add china_ip6_route 2404:c440::/32 -add china_ip6_route 2404:c4c0::/32 -add china_ip6_route 2404:c540::/32 -add china_ip6_route 2404:c5c0::/32 -add china_ip6_route 2404:c640::/32 -add china_ip6_route 2404:c940::/32 -add china_ip6_route 2404:c9c0::/32 -add china_ip6_route 2404:cd00::/32 -add china_ip6_route 2404:d040::/32 -add china_ip6_route 2404:d080::/32 -add china_ip6_route 2404:d140::/32 -add china_ip6_route 2404:d280::/32 -add china_ip6_route 2404:d3c0::/32 -add china_ip6_route 2404:d480::/32 -add china_ip6_route 2404:d640::/32 -add china_ip6_route 2404:d6c0::/32 -add china_ip6_route 2404:d7c0::/32 -add china_ip6_route 2404:d840::/32 -add china_ip6_route 2404:dd80::/32 -add china_ip6_route 2404:df00::/32 -add china_ip6_route 2404:e280::/32 -add china_ip6_route 2404:e540::/32 -add china_ip6_route 2404:e5c0::/32 -add china_ip6_route 2404:e780::/32 -add china_ip6_route 2404:e880::/32 -add china_ip6_route 2404:e8c0::/32 -add china_ip6_route 2404:eb80::/32 -add china_ip6_route 2404:ec40::/32 -add china_ip6_route 2404:ecc0::/32 -add china_ip6_route 2404:edc0::/32 -add china_ip6_route 2404:f040::/32 -add china_ip6_route 2404:f4c0::/32 -add china_ip6_route 2404:f7c0::/32 -add china_ip6_route 2405:80::/32 -add china_ip6_route 2405:480::/32 -add china_ip6_route 2405:580::/32 -add china_ip6_route 2405:680::/32 -add china_ip6_route 2405:6c0::/32 -add china_ip6_route 2405:780::/32 -add china_ip6_route 2405:880::/32 -add china_ip6_route 2405:940::/32 -add china_ip6_route 2405:980::/32 -add china_ip6_route 2405:9c0::/32 -add china_ip6_route 2405:a80::/32 -add china_ip6_route 2405:b80::/32 -add china_ip6_route 2405:c80::/32 -add china_ip6_route 2405:d80::/32 -add china_ip6_route 2405:e80::/32 -add china_ip6_route 2405:f80::/32 -add china_ip6_route 2405:1080::/32 -add china_ip6_route 2405:1180::/32 -add china_ip6_route 2405:1280::/32 -add china_ip6_route 2405:1380::/32 -add china_ip6_route 2405:1480::/32 -add china_ip6_route 2405:1580::/32 -add china_ip6_route 2405:1680::/32 -add china_ip6_route 2405:18c0::/32 -add china_ip6_route 2405:1c80::/32 -add china_ip6_route 2405:1d80::/32 -add china_ip6_route 2405:1e80::/32 -add china_ip6_route 2405:1f80::/32 -add china_ip6_route 2405:1fc0::/32 -add china_ip6_route 2405:2080::/32 -add china_ip6_route 2405:2180::/32 -add china_ip6_route 2405:2280::/32 -add china_ip6_route 2405:2340::/32 -add china_ip6_route 2405:2380::/32 -add china_ip6_route 2405:2480::/32 -add china_ip6_route 2405:24c0::/32 -add china_ip6_route 2405:2580::/32 -add china_ip6_route 2405:2680::/32 -add china_ip6_route 2405:2780::/32 -add china_ip6_route 2405:2880::/32 -add china_ip6_route 2405:2980::/32 -add china_ip6_route 2405:2a80::/32 -add china_ip6_route 2405:2b80::/32 -add china_ip6_route 2405:2bc0::/32 -add china_ip6_route 2405:2c80::/32 -add china_ip6_route 2405:2d80::/32 -add china_ip6_route 2405:2e80::/32 -add china_ip6_route 2405:2ec0::/32 -add china_ip6_route 2405:2f40::/32 -add china_ip6_route 2405:2f80::/32 -add china_ip6_route 2405:3140::/32 -add china_ip6_route 2405:31c0::/32 -add china_ip6_route 2405:37c0::/32 -add china_ip6_route 2405:3880::/32 -add china_ip6_route 2405:3980::/32 -add china_ip6_route 2405:39c0::/32 -add china_ip6_route 2405:3a80::/32 -add china_ip6_route 2405:3ac0::/32 -add china_ip6_route 2405:3b00::/32 -add china_ip6_route 2405:3b80::/32 -add china_ip6_route 2405:3bc0::/32 -add china_ip6_route 2405:3c40::/32 -add china_ip6_route 2405:3c80::/32 -add china_ip6_route 2405:3d80::/32 -add china_ip6_route 2405:3e80::/32 -add china_ip6_route 2405:3f40::/32 -add china_ip6_route 2405:3f80::/32 -add china_ip6_route 2405:4080::/32 -add china_ip6_route 2405:4140::/32 -add china_ip6_route 2405:4180::/32 -add china_ip6_route 2405:41c0::/32 -add china_ip6_route 2405:4280::/32 -add china_ip6_route 2405:4380::/32 -add china_ip6_route 2405:4480::/32 -add china_ip6_route 2405:44c0::/32 -add china_ip6_route 2405:4540::/32 -add china_ip6_route 2405:4580::/32 -add china_ip6_route 2405:4680::/32 -add china_ip6_route 2405:4780::/32 -add china_ip6_route 2405:4880::/32 -add china_ip6_route 2405:4980::/32 -add china_ip6_route 2405:4a80::/32 -add china_ip6_route 2405:4b80::/32 -add china_ip6_route 2405:4d40::/32 -add china_ip6_route 2405:4e80::/32 -add china_ip6_route 2405:4f80::/32 -add china_ip6_route 2405:5080::/32 -add china_ip6_route 2405:5180::/32 -add china_ip6_route 2405:5240::/32 -add china_ip6_route 2405:5280::/32 -add china_ip6_route 2405:52c0::/32 -add china_ip6_route 2405:5380::/32 -add china_ip6_route 2405:5480::/32 -add china_ip6_route 2405:5580::/32 -add china_ip6_route 2405:5680::/32 -add china_ip6_route 2405:5780::/32 -add china_ip6_route 2405:57c0::/32 -add china_ip6_route 2405:5880::/32 -add china_ip6_route 2405:5980::/32 -add china_ip6_route 2405:5a80::/32 -add china_ip6_route 2405:5b80::/32 -add china_ip6_route 2405:5c80::/32 -add china_ip6_route 2405:5cc0::/32 -add china_ip6_route 2405:5d40::/32 -add china_ip6_route 2405:5d80::/32 -add china_ip6_route 2405:5dc0::/32 -add china_ip6_route 2405:5e80::/32 -add china_ip6_route 2405:5f80::/32 -add china_ip6_route 2405:6080::/32 -add china_ip6_route 2405:6180::/32 -add china_ip6_route 2405:6200::/32 -add china_ip6_route 2405:66c0::/32 -add china_ip6_route 2405:6880::/32 -add china_ip6_route 2405:68c0::/32 -add china_ip6_route 2405:6940::/32 -add china_ip6_route 2405:69c0::/32 -add china_ip6_route 2405:6a80::/32 -add china_ip6_route 2405:6b80::/32 -add china_ip6_route 2405:6c80::/32 -add china_ip6_route 2405:6d80::/32 -add china_ip6_route 2405:6e80::/32 -add china_ip6_route 2405:6f00::/32 -add china_ip6_route 2405:6f80::/32 -add china_ip6_route 2405:7040::/32 -add china_ip6_route 2405:7080::/32 -add china_ip6_route 2405:7180::/32 -add china_ip6_route 2405:7240::/32 -add china_ip6_route 2405:7280::/32 -add china_ip6_route 2405:7380::/32 -add china_ip6_route 2405:7480::/32 -add china_ip6_route 2405:7580::/32 -add china_ip6_route 2405:7680::/32 -add china_ip6_route 2405:7780::/32 -add china_ip6_route 2405:7880::/32 -add china_ip6_route 2405:78c0::/32 -add china_ip6_route 2405:7980::/32 -add china_ip6_route 2405:79c0::/32 -add china_ip6_route 2405:7a80::/32 -add china_ip6_route 2405:7b80::/32 -add china_ip6_route 2405:7c80::/32 -add china_ip6_route 2405:7d40::/32 -add china_ip6_route 2405:7f40::/32 -add china_ip6_route 2405:7fc0::/32 -add china_ip6_route 2405:8280::/32 -add china_ip6_route 2405:8480::/32 -add china_ip6_route 2405:84c0::/32 -add china_ip6_route 2405:8580::/32 -add china_ip6_route 2405:8680::/32 -add china_ip6_route 2405:8780::/32 -add china_ip6_route 2405:8880::/32 -add china_ip6_route 2405:8980::/32 -add china_ip6_route 2405:8a40::/32 -add china_ip6_route 2405:8a80::/32 -add china_ip6_route 2405:8ac0::/32 -add china_ip6_route 2405:8b80::/32 -add china_ip6_route 2405:8c80::/32 -add china_ip6_route 2405:8d80::/32 -add china_ip6_route 2405:8e80::/32 -add china_ip6_route 2405:8f40::/32 -add china_ip6_route 2405:8f80::/32 -add china_ip6_route 2405:9080::/32 -add china_ip6_route 2405:9180::/32 -add china_ip6_route 2405:9280::/32 -add china_ip6_route 2405:9300::/32 -add china_ip6_route 2405:9340::/32 -add china_ip6_route 2405:9380::/32 -add china_ip6_route 2405:93c0::/32 -add china_ip6_route 2405:9480::/32 -add china_ip6_route 2405:94c0::/32 -add china_ip6_route 2405:9580::/32 -add china_ip6_route 2405:9680::/32 -add china_ip6_route 2405:9700::/32 -add china_ip6_route 2405:9780::/32 -add china_ip6_route 2405:97c0::/32 -add china_ip6_route 2405:9880::/32 -add china_ip6_route 2405:9900::/32 -add china_ip6_route 2405:9980::/32 -add china_ip6_route 2405:99c0::/32 -add china_ip6_route 2405:9a80::/32 -add china_ip6_route 2405:9b00::/32 -add china_ip6_route 2405:9b80::/32 -add china_ip6_route 2405:9bc0::/32 -add china_ip6_route 2405:9e00::/32 -add china_ip6_route 2405:a240::/32 -add china_ip6_route 2405:a3c0::/32 -add china_ip6_route 2405:a500::/32 -add china_ip6_route 2405:a680::/32 -add china_ip6_route 2405:a900::/32 -add china_ip6_route 2405:a980::/32 -add china_ip6_route 2405:aa80::/32 -add china_ip6_route 2405:ab00::/32 -add china_ip6_route 2405:ad00::/32 -add china_ip6_route 2405:af00::/32 -add china_ip6_route 2405:b100::/32 -add china_ip6_route 2405:b300::/32 -add china_ip6_route 2405:b7c0::/32 -add china_ip6_route 2405:b880::/32 -add china_ip6_route 2405:b980::/32 -add china_ip6_route 2405:bb00::/32 -add china_ip6_route 2405:bd00::/32 -add china_ip6_route 2405:bd80::/32 -add china_ip6_route 2405:bdc0::/32 -add china_ip6_route 2405:be80::/32 -add china_ip6_route 2405:bf00::/32 -add china_ip6_route 2405:c040::/32 -add china_ip6_route 2405:c280::/32 -add china_ip6_route 2405:c380::/32 -add china_ip6_route 2405:c480::/32 -add china_ip6_route 2405:c500::/32 -add china_ip6_route 2405:c580::/32 -add china_ip6_route 2405:c680::/32 -add china_ip6_route 2405:c780::/32 -add china_ip6_route 2405:c880::/32 -add china_ip6_route 2405:c980::/32 -add china_ip6_route 2405:ca80::/32 -add china_ip6_route 2405:cb80::/32 -add china_ip6_route 2405:cc80::/32 -add china_ip6_route 2405:cd80::/32 -add china_ip6_route 2405:ce80::/32 -add china_ip6_route 2405:d280::/32 -add china_ip6_route 2405:d4c0::/32 -add china_ip6_route 2405:d700::/32 -add china_ip6_route 2405:d740::/32 -add china_ip6_route 2405:d900::/32 -add china_ip6_route 2405:df40::/32 -add china_ip6_route 2405:e000::/32 -add china_ip6_route 2405:e040::/32 -add china_ip6_route 2405:e1c0::/32 -add china_ip6_route 2405:e600::/32 -add china_ip6_route 2405:ed40::/32 -add china_ip6_route 2405:ee80::/32 -add china_ip6_route 2405:ef40::/30 -add china_ip6_route 2405:f340::/32 -add china_ip6_route 2405:f380::/32 -add china_ip6_route 2405:f3c0::/32 -add china_ip6_route 2405:f580::/32 -add china_ip6_route 2405:f6c0::/32 -add china_ip6_route 2405:f940::/32 -add china_ip6_route 2405:fdc0::/32 -add china_ip6_route 2405:fe80::/32 -add china_ip6_route 2405:fec0::/32 -add china_ip6_route 2405:ff80::/32 -add china_ip6_route 2406:40::/32 -add china_ip6_route 2406:80::/32 -add china_ip6_route 2406:c0::/32 -add china_ip6_route 2406:140::/32 -add china_ip6_route 2406:280::/32 -add china_ip6_route 2406:440::/32 -add china_ip6_route 2406:4c0::/32 -add china_ip6_route 2406:7c0::/32 -add china_ip6_route 2406:840::/32 -add china_ip6_route 2406:880::/32 -add china_ip6_route 2406:8c0::/32 -add china_ip6_route 2406:9c0::/32 -add china_ip6_route 2406:d80::/32 -add china_ip6_route 2406:e80::/32 -add china_ip6_route 2406:f80::/32 -add china_ip6_route 2406:1080::/32 -add china_ip6_route 2406:1100::/32 -add china_ip6_route 2406:1180::/32 -add china_ip6_route 2406:1280::/32 -add china_ip6_route 2406:1380::/32 -add china_ip6_route 2406:1480::/32 -add china_ip6_route 2406:1580::/32 -add china_ip6_route 2406:15c0::/32 -add china_ip6_route 2406:1680::/32 -add china_ip6_route 2406:1780::/32 -add china_ip6_route 2406:1880::/32 -add china_ip6_route 2406:1980::/32 -add china_ip6_route 2406:1a80::/32 -add china_ip6_route 2406:1b80::/32 -add china_ip6_route 2406:1c80::/32 -add china_ip6_route 2406:1d80::/32 -add china_ip6_route 2406:1e40::/32 -add china_ip6_route 2406:1e80::/32 -add china_ip6_route 2406:1f80::/32 -add china_ip6_route 2406:2080::/32 -add china_ip6_route 2406:2640::/32 -add china_ip6_route 2406:2700::/32 -add china_ip6_route 2406:2780::/32 -add china_ip6_route 2406:2880::/32 -add china_ip6_route 2406:2980::/32 -add china_ip6_route 2406:2a80::/32 -add china_ip6_route 2406:2b80::/32 -add china_ip6_route 2406:2c40::/32 -add china_ip6_route 2406:2c80::/32 -add china_ip6_route 2406:2d80::/32 -add china_ip6_route 2406:2e80::/32 -add china_ip6_route 2406:2f80::/32 -add china_ip6_route 2406:3080::/32 -add china_ip6_route 2406:3180::/32 -add china_ip6_route 2406:31c0::/32 -add china_ip6_route 2406:3280::/32 -add china_ip6_route 2406:3300::/32 -add china_ip6_route 2406:3340::/32 -add china_ip6_route 2406:3380::/32 -add china_ip6_route 2406:3440::/32 -add china_ip6_route 2406:3480::/32 -add china_ip6_route 2406:34c0::/32 -add china_ip6_route 2406:3580::/32 -add china_ip6_route 2406:3640::/32 -add china_ip6_route 2406:3680::/32 -add china_ip6_route 2406:3700::/32 -add china_ip6_route 2406:3780::/32 -add china_ip6_route 2406:3880::/32 -add china_ip6_route 2406:3980::/32 -add china_ip6_route 2406:39c0::/32 -add china_ip6_route 2406:3ac0::/32 -add china_ip6_route 2406:3d80::/32 -add china_ip6_route 2406:3e80::/32 -add china_ip6_route 2406:3f80::/32 -add china_ip6_route 2406:4080::/32 -add china_ip6_route 2406:40c0::/32 -add china_ip6_route 2406:4180::/32 -add china_ip6_route 2406:4280::/32 -add china_ip6_route 2406:42c0::/32 -add china_ip6_route 2406:4340::/32 -add china_ip6_route 2406:4380::/32 -add china_ip6_route 2406:43c0::/32 -add china_ip6_route 2406:4480::/32 -add china_ip6_route 2406:4500::/32 -add china_ip6_route 2406:4680::/32 -add china_ip6_route 2406:4b80::/32 -add china_ip6_route 2406:4c80::/32 -add china_ip6_route 2406:4d00::/32 -add china_ip6_route 2406:4d80::/32 -add china_ip6_route 2406:4e80::/32 -add china_ip6_route 2406:4f00::/32 -add china_ip6_route 2406:4f80::/32 -add china_ip6_route 2406:5080::/32 -add china_ip6_route 2406:50c0::/32 -add china_ip6_route 2406:5180::/32 -add china_ip6_route 2406:5280::/32 -add china_ip6_route 2406:52c0::/32 -add china_ip6_route 2406:5340::/32 -add china_ip6_route 2406:5380::/32 -add china_ip6_route 2406:5480::/32 -add china_ip6_route 2406:5580::/32 -add china_ip6_route 2406:5680::/32 -add china_ip6_route 2406:5780::/32 -add china_ip6_route 2406:5840::/32 -add china_ip6_route 2406:5880::/32 -add china_ip6_route 2406:5940::/32 -add china_ip6_route 2406:5980::/32 -add china_ip6_route 2406:5a40::/32 -add china_ip6_route 2406:5ac0::/32 -add china_ip6_route 2406:5b40::/32 -add china_ip6_route 2406:5d80::/32 -add china_ip6_route 2406:5e80::/32 -add china_ip6_route 2406:5f80::/32 -add china_ip6_route 2406:6080::/32 -add china_ip6_route 2406:6100::/32 -add china_ip6_route 2406:6180::/32 -add china_ip6_route 2406:61c0::/30 -add china_ip6_route 2406:61c4::/30 -add china_ip6_route 2406:6280::/32 -add china_ip6_route 2406:6300::/32 -add china_ip6_route 2406:6340::/32 -add china_ip6_route 2406:6380::/32 -add china_ip6_route 2406:6480::/32 -add china_ip6_route 2406:6500::/32 -add china_ip6_route 2406:6580::/32 -add china_ip6_route 2406:65c0::/32 -add china_ip6_route 2406:6640::/32 -add china_ip6_route 2406:6680::/32 -add china_ip6_route 2406:6780::/32 -add china_ip6_route 2406:6880::/32 -add china_ip6_route 2406:6980::/32 -add china_ip6_route 2406:6a80::/32 -add china_ip6_route 2406:6b80::/32 -add china_ip6_route 2406:6bc0::/32 -add china_ip6_route 2406:6c80::/32 -add china_ip6_route 2406:6d80::/32 -add china_ip6_route 2406:6e80::/32 -add china_ip6_route 2406:6f80::/32 -add china_ip6_route 2406:7080::/32 -add china_ip6_route 2406:7280::/32 -add china_ip6_route 2406:7380::/32 -add china_ip6_route 2406:7480::/32 -add china_ip6_route 2406:7580::/32 -add china_ip6_route 2406:7680::/32 -add china_ip6_route 2406:7780::/32 -add china_ip6_route 2406:7880::/32 -add china_ip6_route 2406:7980::/32 -add china_ip6_route 2406:7a80::/32 -add china_ip6_route 2406:7b80::/32 -add china_ip6_route 2406:7c80::/32 -add china_ip6_route 2406:7cc0::/32 -add china_ip6_route 2406:7d00::/32 -add china_ip6_route 2406:7d80::/32 -add china_ip6_route 2406:7e80::/32 -add china_ip6_route 2406:7f80::/32 -add china_ip6_route 2406:7fc0::/32 -add china_ip6_route 2406:8080::/32 -add china_ip6_route 2406:8180::/32 -add china_ip6_route 2406:8280::/32 -add china_ip6_route 2406:8380::/32 -add china_ip6_route 2406:8480::/32 -add china_ip6_route 2406:8500::/32 -add china_ip6_route 2406:8580::/32 -add china_ip6_route 2406:8780::/32 -add china_ip6_route 2406:8880::/32 -add china_ip6_route 2406:8980::/32 -add china_ip6_route 2406:8a80::/32 -add china_ip6_route 2406:8b80::/32 -add china_ip6_route 2406:8c80::/32 -add china_ip6_route 2406:8d80::/32 -add china_ip6_route 2406:8e80::/32 -add china_ip6_route 2406:8f40::/32 -add china_ip6_route 2406:8f80::/32 -add china_ip6_route 2406:9180::/32 -add china_ip6_route 2406:9200::/32 -add china_ip6_route 2406:9280::/32 -add china_ip6_route 2406:9380::/32 -add china_ip6_route 2406:9480::/32 -add china_ip6_route 2406:94c0::/32 -add china_ip6_route 2406:9780::/32 -add china_ip6_route 2406:9d80::/32 -add china_ip6_route 2406:9e40::/32 -add china_ip6_route 2406:9e80::/32 -add china_ip6_route 2406:9f80::/32 -add china_ip6_route 2406:a080::/32 -add china_ip6_route 2406:a180::/32 -add china_ip6_route 2406:a280::/32 -add china_ip6_route 2406:a380::/32 -add china_ip6_route 2406:a480::/32 -add china_ip6_route 2406:a580::/32 -add china_ip6_route 2406:a680::/32 -add china_ip6_route 2406:a780::/32 -add china_ip6_route 2406:a7c0::/32 -add china_ip6_route 2406:a880::/32 -add china_ip6_route 2406:a8c0::/32 -add china_ip6_route 2406:a980::/32 -add china_ip6_route 2406:aa80::/32 -add china_ip6_route 2406:aac0::/32 -add china_ip6_route 2406:ab80::/32 -add china_ip6_route 2406:ac80::/32 -add china_ip6_route 2406:acc0::/32 -add china_ip6_route 2406:ad40::/32 -add china_ip6_route 2406:ad80::/32 -add china_ip6_route 2406:ae80::/32 -add china_ip6_route 2406:af80::/32 -add china_ip6_route 2406:b080::/32 -add china_ip6_route 2406:b640::/32 -add china_ip6_route 2406:b880::/32 -add china_ip6_route 2406:b980::/32 -add china_ip6_route 2406:ba80::/32 -add china_ip6_route 2406:bb80::/32 -add china_ip6_route 2406:bc80::/32 -add china_ip6_route 2406:bd40::/32 -add china_ip6_route 2406:bd80::/32 -add china_ip6_route 2406:bdc0::/32 -add china_ip6_route 2406:be80::/32 -add china_ip6_route 2406:bf80::/32 -add china_ip6_route 2406:c080::/32 -add china_ip6_route 2406:c180::/32 -add china_ip6_route 2406:c280::/32 -add china_ip6_route 2406:c340::/32 -add china_ip6_route 2406:c480::/32 -add china_ip6_route 2406:c580::/32 -add china_ip6_route 2406:c680::/32 -add china_ip6_route 2406:c780::/32 -add china_ip6_route 2406:c880::/32 -add china_ip6_route 2406:c900::/32 -add china_ip6_route 2406:c980::/32 -add china_ip6_route 2406:ca80::/32 -add china_ip6_route 2406:cac0::/32 -add china_ip6_route 2406:cb80::/32 -add china_ip6_route 2406:cc80::/32 -add china_ip6_route 2406:cd80::/32 -add china_ip6_route 2406:ce80::/32 -add china_ip6_route 2406:cf00::/32 -add china_ip6_route 2406:cf01::/32 -add china_ip6_route 2406:cf02::/31 -add china_ip6_route 2406:cf80::/32 -add china_ip6_route 2406:d080::/32 -add china_ip6_route 2406:d140::/32 -add china_ip6_route 2406:d180::/32 -add china_ip6_route 2406:d280::/32 -add china_ip6_route 2406:d2c0::/32 -add china_ip6_route 2406:d380::/32 -add china_ip6_route 2406:d440::/32 -add china_ip6_route 2406:d480::/32 -add china_ip6_route 2406:d580::/32 -add china_ip6_route 2406:d680::/32 -add china_ip6_route 2406:d780::/32 -add china_ip6_route 2406:d880::/32 -add china_ip6_route 2406:d980::/32 -add china_ip6_route 2406:db80::/32 -add china_ip6_route 2406:dc80::/32 -add china_ip6_route 2406:dd00::/32 -add china_ip6_route 2406:dd80::/32 -add china_ip6_route 2406:de80::/32 -add china_ip6_route 2406:df80::/32 -add china_ip6_route 2406:e080::/32 -add china_ip6_route 2406:e180::/32 -add china_ip6_route 2406:e2c0::/32 -add china_ip6_route 2406:e380::/32 -add china_ip6_route 2406:e3c0::/32 -add china_ip6_route 2406:e500::/32 -add china_ip6_route 2406:e580::/32 -add china_ip6_route 2406:e680::/32 -add china_ip6_route 2406:e780::/32 -add china_ip6_route 2406:e8c0::/32 -add china_ip6_route 2406:ea40::/28 -add china_ip6_route 2406:f280::/32 -add china_ip6_route 2406:f300::/32 -add china_ip6_route 2406:f4c0::/32 -add china_ip6_route 2406:f7c0::/32 -add china_ip6_route 2406:f980::/32 -add china_ip6_route 2406:fc80::/32 -add china_ip6_route 2406:fd80::/32 -add china_ip6_route 2406:fe80::/32 -add china_ip6_route 2406:ff00::/32 -add china_ip6_route 2407:480::/32 -add china_ip6_route 2407:580::/32 -add china_ip6_route 2407:cc0::/32 -add china_ip6_route 2407:f40::/32 -add china_ip6_route 2407:1180::/32 -add china_ip6_route 2407:17c0::/32 -add china_ip6_route 2407:1900::/32 -add china_ip6_route 2407:1d00::/32 -add china_ip6_route 2407:1e80::/32 -add china_ip6_route 2407:2280::/32 -add china_ip6_route 2407:2380::/32 -add china_ip6_route 2407:23c0::/32 -add china_ip6_route 2407:2440::/32 -add china_ip6_route 2407:2780::/32 -add china_ip6_route 2407:2840::/32 -add china_ip6_route 2407:2ac0::/32 -add china_ip6_route 2407:31c0::/32 -add china_ip6_route 2407:3340::/32 -add china_ip6_route 2407:3540::/32 -add china_ip6_route 2407:3700::/32 -add china_ip6_route 2407:3740::/32 -add china_ip6_route 2407:37c0::/32 -add china_ip6_route 2407:3900::/32 -add china_ip6_route 2407:3f40::/32 -add china_ip6_route 2407:43c0::/32 -add china_ip6_route 2407:4440::/32 -add china_ip6_route 2407:4580::/32 -add china_ip6_route 2407:4680::/32 -add china_ip6_route 2407:4740::/32 -add china_ip6_route 2407:4880::/32 -add china_ip6_route 2407:4980::/32 -add china_ip6_route 2407:4a80::/32 -add china_ip6_route 2407:4c80::/32 -add china_ip6_route 2407:4d80::/32 -add china_ip6_route 2407:4e80::/32 -add china_ip6_route 2407:4f00::/32 -add china_ip6_route 2407:5380::/32 -add china_ip6_route 2407:53c0::/32 -add china_ip6_route 2407:5500::/32 -add china_ip6_route 2407:5780::/32 -add china_ip6_route 2407:5840::/32 -add china_ip6_route 2407:6040::/32 -add china_ip6_route 2407:6580::/32 -add china_ip6_route 2407:6c40::/32 -add china_ip6_route 2407:7680::/32 -add china_ip6_route 2407:7780::/32 -add china_ip6_route 2407:7880::/32 -add china_ip6_route 2407:7980::/32 -add china_ip6_route 2407:7c80::/32 -add china_ip6_route 2407:7d00::/32 -add china_ip6_route 2407:7d80::/32 -add china_ip6_route 2407:7e80::/32 -add china_ip6_route 2407:8880::/32 -add china_ip6_route 2407:8b80::/32 -add china_ip6_route 2407:8f40::/32 -add china_ip6_route 2407:9080::/32 -add china_ip6_route 2407:9180::/32 -add china_ip6_route 2407:94c0::/32 -add china_ip6_route 2407:9680::/32 -add china_ip6_route 2407:9980::/32 -add china_ip6_route 2407:9b40::/32 -add china_ip6_route 2407:9bc0::/32 -add china_ip6_route 2407:9f00::/32 -add china_ip6_route 2407:9f80::/32 -add china_ip6_route 2407:a040::/32 -add china_ip6_route 2407:a640::/32 -add china_ip6_route 2407:a7c0::/32 -add china_ip6_route 2407:a880::/32 -add china_ip6_route 2407:a940::/32 -add china_ip6_route 2407:ad80::/32 -add china_ip6_route 2407:ae80::/32 -add china_ip6_route 2407:af80::/32 -add china_ip6_route 2407:b080::/32 -add china_ip6_route 2407:b180::/32 -add china_ip6_route 2407:b280::/32 -add china_ip6_route 2407:b380::/32 -add china_ip6_route 2407:b580::/32 -add china_ip6_route 2407:b680::/32 -add china_ip6_route 2407:b780::/32 -add china_ip6_route 2407:b880::/32 -add china_ip6_route 2407:b980::/32 -add china_ip6_route 2407:ba00::/32 -add china_ip6_route 2407:ba80::/32 -add china_ip6_route 2407:bb80::/32 -add china_ip6_route 2407:bc00::/32 -add china_ip6_route 2407:bc80::/32 -add china_ip6_route 2407:bd80::/32 -add china_ip6_route 2407:bdc0::/32 -add china_ip6_route 2407:be80::/32 -add china_ip6_route 2407:bf80::/32 -add china_ip6_route 2407:c080::/32 -add china_ip6_route 2407:c380::/32 -add china_ip6_route 2407:c400::/32 -add china_ip6_route 2407:c480::/32 -add china_ip6_route 2407:c580::/32 -add china_ip6_route 2407:c680::/32 -add china_ip6_route 2407:c780::/32 -add china_ip6_route 2407:c880::/32 -add china_ip6_route 2407:c900::/32 -add china_ip6_route 2407:c980::/32 -add china_ip6_route 2407:cb80::/32 -add china_ip6_route 2407:cc80::/32 -add china_ip6_route 2407:cd80::/32 -add china_ip6_route 2407:ce80::/32 -add china_ip6_route 2407:cf00::/32 -add china_ip6_route 2407:cf80::/32 -add china_ip6_route 2407:d480::/32 -add china_ip6_route 2407:d580::/32 -add china_ip6_route 2407:d680::/32 -add china_ip6_route 2407:d780::/32 -add china_ip6_route 2407:d7c0::/32 -add china_ip6_route 2407:d880::/32 -add china_ip6_route 2407:d8c0::/32 -add china_ip6_route 2407:d980::/32 -add china_ip6_route 2407:d9c0::/32 -add china_ip6_route 2407:da80::/32 -add china_ip6_route 2407:db80::/32 -add china_ip6_route 2407:dc80::/32 -add china_ip6_route 2407:dd80::/32 -add china_ip6_route 2407:de80::/32 -add china_ip6_route 2407:df80::/32 -add china_ip6_route 2407:dfc0::/32 -add china_ip6_route 2407:e080::/32 -add china_ip6_route 2407:e180::/32 -add china_ip6_route 2407:e280::/32 -add china_ip6_route 2407:e380::/32 -add china_ip6_route 2407:e480::/32 -add china_ip6_route 2407:e580::/32 -add china_ip6_route 2407:e680::/32 -add china_ip6_route 2407:e780::/32 -add china_ip6_route 2407:e800::/32 -add china_ip6_route 2407:ea80::/32 -add china_ip6_route 2407:eb80::/32 -add china_ip6_route 2407:ec40::/32 -add china_ip6_route 2407:ec80::/32 -add china_ip6_route 2407:ecc0::/32 -add china_ip6_route 2407:ed80::/32 -add china_ip6_route 2407:ee80::/32 -add china_ip6_route 2407:ef80::/32 -add china_ip6_route 2407:f080::/32 -add china_ip6_route 2407:f180::/32 -add china_ip6_route 2407:f280::/32 -add china_ip6_route 2407:f380::/32 -add china_ip6_route 2407:f480::/32 -add china_ip6_route 2407:f580::/32 -add china_ip6_route 2407:f680::/32 -add china_ip6_route 2407:f780::/32 -add china_ip6_route 2407:f880::/32 -add china_ip6_route 2407:f980::/32 -add china_ip6_route 2407:fa80::/32 -add china_ip6_route 2407:fb80::/32 -add china_ip6_route 2407:fc80::/32 -add china_ip6_route 2407:fd80::/32 -add china_ip6_route 2408:4000::/22 -add china_ip6_route 2408:6000::/24 -add china_ip6_route 2408:8000::/22 -add china_ip6_route 2408:8400::/22 -add china_ip6_route 2408:8800::/21 -add china_ip6_route 2409:2000::/21 -add china_ip6_route 2409:6000::/20 -add china_ip6_route 2409:8000::/20 -add china_ip6_route 240a:2000::/24 -add china_ip6_route 240a:4000::/21 -add china_ip6_route 240a:6000::/24 -add china_ip6_route 240a:8000::/21 -add china_ip6_route 240a:a000::/20 -add china_ip6_route 240a:c000::/20 -add china_ip6_route 240b:2000::/22 -add china_ip6_route 240b:8000::/21 -add china_ip6_route 240c::/28 -add china_ip6_route 240c:4000::/22 -add china_ip6_route 240c:8000::/21 -add china_ip6_route 240c:c000::/20 -add china_ip6_route 240d:4000::/21 -add china_ip6_route 240d:8000::/24 -add china_ip6_route 240e::/24 -add china_ip6_route 240e:100::/24 -add china_ip6_route 240e:200::/23 -add china_ip6_route 240e:400::/22 -add china_ip6_route 240e:800::/21 -add china_ip6_route 240e:1000::/20 -add china_ip6_route 240e:2000::/19 -add china_ip6_route 240f:4000::/24 -add china_ip6_route 240f:8000::/24 -add china_ip6_route 240f:c000::/24 +2001:250::/35 +2001:250:2000::/35 +2001:250:4000::/34 +2001:250:8000::/33 +2001:251::/32 +2001:252::/32 +2001:253::/32 +2001:254::/32 +2001:255::/32 +2001:256::/32 +2001:7fa:5::/48 +2001:7fa:10::/48 +2001:c68::/32 +2001:cc0::/32 +2001:da8::/32 +2001:da9::/32 +2001:daa::/32 +2001:dc7::/32 +2001:dd8:1::/48 +2001:dd8:5::/48 +2001:dd8:1a::/48 +2001:dd9::/48 +2001:df0:423::/48 +2001:df0:9c0::/48 +2001:df0:1bc0::/48 +2001:df0:25c0::/48 +2001:df0:26c0::/48 +2001:df0:2e00::/48 +2001:df0:2e80::/48 +2001:df0:59c0::/48 +2001:df0:85c0::/48 +2001:df0:9d40::/48 +2001:df0:ac40::/48 +2001:df0:bf80::/48 +2001:df0:d880::/48 +2001:df0:f8c0::/48 +2001:df1:c80::/48 +2001:df1:2b40::/48 +2001:df1:4580::/48 +2001:df1:5280::/48 +2001:df1:5b80::/48 +2001:df1:5fc0::/48 +2001:df1:6180::/48 +2001:df1:61c0::/48 +2001:df1:a100::/48 +2001:df1:c900::/48 +2001:df1:d180::/48 +2001:df1:da00::/48 +2001:df1:f480::/48 +2001:df1:fd80::/48 +2001:df2:80::/48 +2001:df2:5780::/48 +2001:df2:8bc0::/48 +2001:df2:a580::/48 +2001:df2:c240::/48 +2001:df2:d4c0::/48 +2001:df3:1480::/48 +2001:df3:15c0::/48 +2001:df3:2a80::/48 +2001:df3:3a80::/48 +2001:df3:7440::/48 +2001:df3:77c0::/48 +2001:df3:9a40::/48 +2001:df3:a680::/48 +2001:df3:b380::/48 +2001:df3:c380::/48 +2001:df3:c680::/48 +2001:df3:d0c0::/48 +2001:df3:d880::/48 +2001:df3:ed80::/48 +2001:df3:ef80::/48 +2001:df4:880::/48 +2001:df4:d80::/48 +2001:df4:1880::/48 +2001:df4:2780::/48 +2001:df4:2e80::/48 +2001:df4:3d80::/48 +2001:df4:4b80::/48 +2001:df4:4d80::/48 +2001:df4:a1c0::/48 +2001:df4:a680::/48 +2001:df4:a980::/48 +2001:df4:c180::/48 +2001:df4:c580::/48 +2001:df4:c780::/48 +2001:df4:e140::/48 +2001:df5:2080::/48 +2001:df5:5f80::/48 +2001:df5:7800::/48 +2001:df6:100::/48 +2001:df6:3d00::/48 +2001:df6:5d00::/48 +2001:df6:6800::/48 +2001:df6:f400::/48 +2001:df7:1480::/48 +2001:df7:2b80::/48 +2001:df7:6600::/48 +2001:df7:e580::/48 +2001:e08::/32 +2001:e18::/32 +2001:e80::/32 +2001:e88::/32 +2001:f38::/32 +2001:f88::/32 +2001:4438::/32 +2001:4510::/29 +2400:1040::/32 +2400:1160::/32 +2400:12c0::/32 +2400:1340::/32 +2400:1380::/32 +2400:15c0::/32 +2400:1640::/32 +2400:16c0::/32 +2400:1740::/32 +2400:17c0::/32 +2400:1840::/32 +2400:18c0::/32 +2400:1940::/32 +2400:19a0::/32 +2400:19c0::/32 +2400:1a40::/32 +2400:1ac0::/32 +2400:1b40::/32 +2400:1cc0::/32 +2400:1d40::/32 +2400:1dc0::/32 +2400:1e40::/32 +2400:1ec0::/32 +2400:1f40::/32 +2400:1fc0::/32 +2400:3040::/32 +2400:3140::/32 +2400:3160::/32 +2400:31c0::/32 +2400:3200::/32 +2400:3280::/32 +2400:32c0::/32 +2400:3340::/32 +2400:33c0::/32 +2400:3440::/32 +2400:34c0::/32 +2400:3540::/32 +2400:35c0::/32 +2400:3600::/32 +2400:3640::/32 +2400:3660::/32 +2400:36c0::/32 +2400:38c0::/32 +2400:39c0::/32 +2400:3a00::/32 +2400:3a40::/32 +2400:3b40::/32 +2400:3c40::/32 +2400:3cc0::/32 +2400:3e00::/32 +2400:3f40::/32 +2400:3f60::/32 +2400:3fc0::/32 +2400:4440::/32 +2400:44c0::/32 +2400:4540::/32 +2400:4600::/32 +2400:4640::/32 +2400:46c0::/32 +2400:4920::/32 +2400:4bc0::/32 +2400:4e00::/32 +2400:4e40::/32 +2400:5080::/32 +2400:5280::/32 +2400:5400::/32 +2400:5580::/32 +2400:55c0::/32 +2400:55e0::/32 +2400:5600::/32 +2400:5640::/32 +2400:56c0::/32 +2400:57c0::/32 +2400:5840::/32 +2400:5a00::/32 +2400:5a40::/32 +2400:5a60::/32 +2400:5ac0::/32 +2400:5b40::/32 +2400:5bc0::/32 +2400:5c40::/32 +2400:5c80::/32 +2400:5cc0::/32 +2400:5e20::/32 +2400:5e80::/32 +2400:5ee0::/32 +2400:5f60::/32 +2400:5fc0::/32 +2400:6000::/32 +2400:6040::/32 +2400:60c0::/32 +2400:61c0::/32 +2400:6200::/32 +2400:6600::/32 +2400:6640::/32 +2400:66a0::/32 +2400:66c0::/32 +2400:66e0::/32 +2400:6740::/32 +2400:67a0::/32 +2400:67c0::/32 +2400:6840::/32 +2400:68c0::/32 +2400:6940::/32 +2400:69c0::/32 +2400:6a00::/32 +2400:6a40::/32 +2400:6ac0::/32 +2400:6b40::/32 +2400:6bc0::/32 +2400:6c40::/32 +2400:6cc0::/32 +2400:6d40::/32 +2400:6da0::/32 +2400:6dc0::/32 +2400:6e00::/32 +2400:6e40::/32 +2400:6e60::/32 +2400:6ec0::/32 +2400:6f40::/32 +2400:6f80::/32 +2400:6fc0::/32 +2400:7040::/32 +2400:70a0::/32 +2400:7100::/32 +2400:7140::/32 +2400:71c0::/32 +2400:7200::/32 +2400:7240::/32 +2400:72c0::/32 +2400:72e0::/32 +2400:7340::/32 +2400:73c0::/32 +2400:73e0::/32 +2400:7440::/32 +2400:74c0::/32 +2400:7540::/32 +2400:75a0::/28 +2400:75c0::/32 +2400:7640::/32 +2400:7680::/32 +2400:76c0::/32 +2400:7740::/32 +2400:77c0::/32 +2400:79c0::/32 +2400:7ac0::/32 +2400:7ae0::/32 +2400:7bc0::/32 +2400:7f80::/32 +2400:7fc0::/32 +2400:8080::/32 +2400:8200::/32 +2400:82c0::/32 +2400:8580::/32 +2400:8600::/32 +2400:86a0::/32 +2400:86e0::/32 +2400:8780::/32 +2400:87c0::/32 +2400:8840::/32 +2400:8920::/32 +2400:8980::/32 +2400:89c0::/32 +2400:8be0::/32 +2400:8ce0::/32 +2400:8e00::/32 +2400:8e60::/32 +2400:8f00::/32 +2400:8f60::/32 +2400:8fc0::/32 +2400:9020::/32 +2400:9040::/32 +2400:9340::/32 +2400:93e0::/32 +2400:9520::/32 +2400:9580::/32 +2400:95c0::/32 +2400:95e0::/32 +2400:9600::/32 +2400:9620::/32 +2400:98c0::/32 +2400:9960::/32 +2400:99e0::/32 +2400:9a00::/32 +2400:9ca0::/32 +2400:9e00::/32 +2400:a040::/32 +2400:a320::/32 +2400:a380::/32 +2400:a420::/32 +2400:a480::/32 +2400:a5a0::/32 +2400:a6a0::/32 +2400:a780::/32 +2400:a860::/32 +2400:a8a0::/32 +2400:a8c0::/32 +2400:a900::/32 +2400:a980::/32 +2400:a981::/32 +2400:a982::/31 +2400:a984::/30 +2400:a9a0::/32 +2400:abc0::/32 +2400:ae00::/32 +2400:b200::/32 +2400:b2c0::/32 +2400:b500::/32 +2400:b600::/32 +2400:b620::/32 +2400:b6c0::/32 +2400:b700::/32 +2400:b9a0::/32 +2400:b9c0::/32 +2400:ba00::/32 +2400:ba40::/32 +2400:ba41::/32 +2400:bac0::/32 +2400:be00::/32 +2400:bf00::/32 +2400:c200::/32 +2400:c380::/32 +2400:c840::/32 +2400:c8c0::/32 +2400:c940::/32 +2400:c9c0::/32 +2400:ca40::/32 +2400:cac0::/32 +2400:cb40::/32 +2400:cb80::/32 +2400:cbc0::/32 +2400:cc40::/32 +2400:cc80::/32 +2400:ccc0::/32 +2400:cd40::/32 +2400:cda0::/32 +2400:cdc0::/32 +2400:ce00::/32 +2400:ce40::/32 +2400:cf40::/32 +2400:cfc0::/32 +2400:d0a0::/32 +2400:d0c0::/32 +2400:d100::/32 +2400:d160::/32 +2400:d1c0::/32 +2400:d200::/32 +2400:d300::/32 +2400:d440::/32 +2400:d600::/32 +2400:d6a0::/32 +2400:d6c0::/32 +2400:d720::/32 +2400:d780::/32 +2400:d7a0::/32 +2400:da00::/32 +2400:da60::/32 +2400:dd00::/28 +2400:dd40::/32 +2400:dda0::/32 +2400:de00::/32 +2400:de80::/32 +2400:dee0::/32 +2400:e0c0::/32 +2400:e680::/32 +2400:e7e0::/32 +2400:e880::/32 +2400:ebc0::/32 +2400:ed60::/32 +2400:eda0::/32 +2400:edc0::/32 +2400:ee00::/32 +2400:eec0::/32 +2400:ef40::/32 +2400:f480::/32 +2400:f5c0::/32 +2400:f6e0::/32 +2400:f720::/32 +2400:f7c0::/32 +2400:f840::/32 +2400:f860::/32 +2400:f980::/32 +2400:fac0::/32 +2400:fb40::/32 +2400:fb60::/32 +2400:fbc0::/32 +2400:fc40::/32 +2400:fcc0::/32 +2400:fe00::/32 +2401:20::/32 +2401:60::/32 +2401:80::/32 +2401:140::/32 +2401:1c0::/32 +2401:540::/32 +2401:620::/32 +2401:7c0::/32 +2401:800::/32 +2401:9c0::/32 +2401:a00::/32 +2401:a40::/32 +2401:ac0::/32 +2401:b40::/32 +2401:ba0::/32 +2401:bc0::/32 +2401:c40::/32 +2401:cc0::/32 +2401:d40::/32 +2401:e00::/32 +2401:1000::/32 +2401:1160::/32 +2401:11a0::/32 +2401:11c0::/32 +2401:1200::/32 +2401:12c0::/32 +2401:1320::/32 +2401:15c0::/32 +2401:18c0::/32 +2401:18e0::/28 +2401:1940::/32 +2401:19c0::/32 +2401:1a40::/32 +2401:1ac0::/32 +2401:1c60::/32 +2401:1ce0::/32 +2401:1d40::/32 +2401:1da0::/32 +2401:1dc0::/32 +2401:1de0::/32 +2401:1e00::/32 +2401:1ec0::/32 +2401:1f40::/32 +2401:2040::/32 +2401:2080::/32 +2401:23c0::/32 +2401:2600::/32 +2401:2780::/32 +2401:2980::/32 +2401:2a00::/32 +2401:2b40::/32 +2401:2e00::/32 +2401:2e20::/32 +2401:3100::/32 +2401:3380::/32 +2401:33c0::/32 +2401:3440::/32 +2401:3480::/32 +2401:34a0::/32 +2401:34a1::/32 +2401:34c0::/32 +2401:3640::/32 +2401:3780::/32 +2401:3800::/32 +2401:3880::/32 +2401:3980::/32 +2401:3a00::/32 +2401:3a80::/32 +2401:3b80::/32 +2401:3c20::/32 +2401:3c80::/32 +2401:3d80::/32 +2401:3e80::/32 +2401:3f80::/32 +2401:4080::/32 +2401:4180::/32 +2401:4280::/32 +2401:4380::/32 +2401:4480::/32 +2401:4580::/32 +2401:4680::/32 +2401:4780::/32 +2401:4880::/32 +2401:4a80::/32 +2401:4b00::/32 +2401:4f80::/32 +2401:5180::/32 +2401:5680::/32 +2401:58a0::/32 +2401:5960::/32 +2401:59c0::/32 +2401:5b40::/32 +2401:5c20::/32 +2401:5c60::/32 +2401:5c80::/32 +2401:5fa0::/32 +2401:70e0::/32 +2401:7180::/32 +2401:71c0::/32 +2401:7240::/32 +2401:7320::/32 +2401:7340::/32 +2401:7360::/32 +2401:73a0::/32 +2401:7580::/32 +2401:7660::/32 +2401:7680::/32 +2401:7700::/32 +2401:7780::/32 +2401:77e0::/32 +2401:7820::/32 +2401:7880::/32 +2401:78e0::/32 +2401:7980::/32 +2401:7a00::/32 +2401:7a80::/32 +2401:7b80::/32 +2401:7bc0::/32 +2401:7c80::/32 +2401:7cc0::/32 +2401:7ce0::/32 +2401:7d40::/32 +2401:7d80::/32 +2401:7e00::/32 +2401:7f80::/32 +2401:8200::/32 +2401:82c0::/32 +2401:8380::/32 +2401:8540::/32 +2401:8600::/32 +2401:8680::/32 +2401:8720::/32 +2401:87e0::/32 +2401:8820::/31 +2401:8840::/32 +2401:8be0::/32 +2401:8d00::/32 +2401:8da0::/32 +2401:8f40::/32 +2401:8fc0::/32 +2401:90a0::/32 +2401:9260::/32 +2401:92a0::/32 +2401:92e0::/32 +2401:9340::/32 +2401:95e0::/32 +2401:9600::/32 +2401:96c0::/32 +2401:96e0::/32 +2401:9720::/32 +2401:9740::/32 +2401:97a0::/32 +2401:98c0::/32 +2401:9a00::/32 +2401:9ac0::/32 +2401:9b20::/31 +2401:9b40::/32 +2401:9b60::/32 +2401:9bc0::/32 +2401:9ca0::/32 +2401:9d20::/32 +2401:9dc0::/32 +2401:9e20::/32 +2401:9e40::/32 +2401:9f80::/32 +2401:9fa0::/32 +2401:a140::/32 +2401:a180::/32 +2401:a2e0::/32 +2401:a340::/32 +2401:a3a0::/32 +2401:a3c0::/32 +2401:a4c0::/32 +2401:a4e0::/32 +2401:a540::/32 +2401:a5c0::/32 +2401:a620::/32 +2401:a640::/32 +2401:a6e0::/32 +2401:a720::/32 +2401:a940::/32 +2401:a980::/32 +2401:a9a0::/32 +2401:aa00::/32 +2401:aa20::/32 +2401:aa40::/32 +2401:ab60::/32 +2401:aba0::/32 +2401:acc0::/32 +2401:ad40::/32 +2401:adc0::/32 +2401:afa0::/32 +2401:b040::/32 +2401:b180::/32 +2401:b220::/32 +2401:b340::/32 +2401:b360::/32 +2401:b400::/32 +2401:b480::/32 +2401:b4c0::/32 +2401:b4e0::/32 +2401:b540::/32 +2401:b580::/32 +2401:b5a0::/32 +2401:b600::/32 +2401:b680::/32 +2401:b6c0::/32 +2401:b6e0::/32 +2401:b7c0::/32 +2401:b940::/32 +2401:ba00::/32 +2401:ba40::/32 +2401:bb20::/32 +2401:bb80::/32 +2401:bc60::/31 +2401:bd60::/32 +2401:bda0::/32 +2401:be00::/32 +2401:bf20::/32 +2401:c020::/32 +2401:c200::/32 +2401:c540::/32 +2401:c600::/32 +2401:c640::/32 +2401:c6c0::/32 +2401:c840::/32 +2401:c8c0::/32 +2401:ca00::/32 +2401:ca20::/32 +2401:cb80::/32 +2401:cbe0::/32 +2401:cc00::/32 +2401:cc60::/32 +2401:ce00::/32 +2401:cf40::/32 +2401:cfc0::/32 +2401:cfe0::/32 +2401:d060::/32 +2401:d0c0::/32 +2401:d0e0::/32 +2401:d140::/32 +2401:d180::/32 +2401:d2c0::/32 +2401:d340::/32 +2401:d420::/32 +2401:d780::/32 +2401:d7e0::/32 +2401:d8e0::/32 +2401:d920::/28 +2401:da00::/32 +2401:dbe0::/32 +2401:dd20::/32 +2401:dd60::/32 +2401:dde0::/32 +2401:de00::/32 +2401:dfe0::/32 +2401:e020::/32 +2401:e080::/32 +2401:e0c0::/32 +2401:e140::/32 +2401:e240::/32 +2401:e2c0::/32 +2401:e340::/32 +2401:e360::/32 +2401:e620::/32 +2401:e840::/32 +2401:e8c0::/32 +2401:e940::/32 +2401:e9c0::/32 +2401:ec00::/32 +2401:ec40::/32 +2401:f300::/32 +2401:f7c0::/32 +2401:fa80::/32 +2401:fb80::/32 +2401:fc80::/32 +2401:ffc0::/32 +2402:440::/32 +2402:5c0::/32 +2402:840::/32 +2402:e00::/32 +2402:fc0::/32 +2402:1000::/32 +2402:1440::/32 +2402:14c0::/32 +2402:1600::/32 +2402:1740::/32 +2402:19c0::/32 +2402:1ec0::/32 +2402:1f80::/32 +2402:2000::/32 +2402:2280::/32 +2402:2440::/32 +2402:24c0::/32 +2402:2540::/32 +2402:2640::/32 +2402:2a00::/32 +2402:2b80::/32 +2402:2bc0::/32 +2402:2d00::/32 +2402:2d80::/32 +2402:2e80::/32 +2402:2f40::/32 +2402:3040::/32 +2402:3140::/32 +2402:3180::/32 +2402:31c0::/32 +2402:3240::/32 +2402:33c0::/32 +2402:39c0::/32 +2402:3a40::/32 +2402:3ac0::/32 +2402:3c00::/32 +2402:3e00::/32 +2402:3ec0::/32 +2402:3f80::/32 +2402:4140::/32 +2402:42c0::/32 +2402:4340::/32 +2402:43c0::/32 +2402:4440::/32 +2402:4500::/32 +2402:4540::/32 +2402:4a00::/32 +2402:4a40::/32 +2402:4a80::/32 +2402:4ac0::/32 +2402:4b80::/32 +2402:4bc0::/32 +2402:4c40::/32 +2402:4d80::/32 +2402:4e00::/32 +2402:4ec0::/32 +2402:4f80::/32 +2402:5180::/32 +2402:52c0::/32 +2402:5340::/32 +2402:5880::/32 +2402:5940::/32 +2402:59c0::/32 +2402:5a40::/32 +2402:5b40::/32 +2402:5bc0::/32 +2402:5d00::/32 +2402:5e00::/32 +2402:5e40::/32 +2402:5ec0::/32 +2402:5f40::/32 +2402:6280::/32 +2402:62c0::/32 +2402:64c0::/32 +2402:66c0::/32 +2402:6740::/32 +2402:67c0::/32 +2402:6a00::/32 +2402:6b40::/32 +2402:6bc0::/32 +2402:6e00::/32 +2402:6e80::/32 +2402:6f40::/32 +2402:6fc0::/32 +2402:7040::/32 +2402:7080::/32 +2402:70c0::/32 +2402:7140::/32 +2402:71c0::/32 +2402:7240::/32 +2402:72c0::/32 +2402:7540::/32 +2402:75c0::/32 +2402:7740::/32 +2402:7d00::/32 +2402:7d80::/32 +2402:8180::/32 +2402:8300::/32 +2402:8380::/32 +2402:85c0::/32 +2402:8800::/32 +2402:8840::/32 +2402:8900::/32 +2402:8940::/32 +2402:89c0::/32 +2402:8b40::/32 +2402:8bc0::/32 +2402:8cc0::/32 +2402:8d40::/32 +2402:8f40::/32 +2402:8f80::/32 +2402:9240::/32 +2402:92c0::/32 +2402:93c0::/32 +2402:9440::/32 +2402:9480::/32 +2402:94c0::/32 +2402:9580::/32 +2402:95c0::/32 +2402:9680::/32 +2402:96c0::/32 +2402:9840::/32 +2402:98c0::/32 +2402:9940::/32 +2402:9a80::/32 +2402:9b80::/32 +2402:9f80::/32 +2402:9fc0::/32 +2402:a080::/32 +2402:a180::/32 +2402:a200::/32 +2402:a240::/32 +2402:a280::/32 +2402:a380::/32 +2402:a3c0::/32 +2402:a640::/32 +2402:a680::/32 +2402:a6c0::/32 +2402:a840::/32 +2402:a880::/32 +2402:aa80::/32 +2402:ab80::/32 +2402:ae00::/32 +2402:ae40::/32 +2402:aec0::/32 +2402:af80::/32 +2402:afc0::/32 +2402:b080::/32 +2402:b200::/32 +2402:b440::/32 +2402:b6c0::/32 +2402:b880::/32 +2402:b8c0::/32 +2402:b940::/32 +2402:b980::/32 +2402:ba80::/32 +2402:bac0::/32 +2402:bbc0::/32 +2402:bf80::/32 +2402:c280::/32 +2402:c3c0::/32 +2402:c5c0::/32 +2402:c9c0::/32 +2402:cc40::/32 +2402:cf00::/32 +2402:cf40::/32 +2402:d040::/32 +2402:d140::/32 +2402:d2c0::/32 +2402:d300::/32 +2402:d340::/32 +2402:d380::/32 +2402:d5c0::/32 +2402:d6c0::/32 +2402:d740::/32 +2402:d780::/32 +2402:d880::/32 +2402:d980::/32 +2402:da40::/32 +2402:db40::/32 +2402:dcc0::/32 +2402:de40::/32 +2402:dec0::/32 +2402:df40::/32 +2402:dfc0::/32 +2402:e040::/32 +2402:e0c0::/32 +2402:e140::/32 +2402:e2c0::/32 +2402:e3c0::/32 +2402:e480::/32 +2402:e540::/32 +2402:e680::/32 +2402:e740::/32 +2402:e780::/32 +2402:e7c0::/32 +2402:e880::/32 +2402:e980::/32 +2402:eb80::/32 +2402:ec80::/32 +2402:ed80::/32 +2402:ef40::/32 +2402:ef80::/32 +2402:f000::/32 +2402:f140::/32 +2402:f480::/32 +2402:f540::/32 +2402:f580::/32 +2402:f740::/32 +2402:f780::/32 +2402:f8c0::/32 +2402:f980::/32 +2402:f9c0::/32 +2402:fac0::/32 +2402:fcc0::/32 +2402:ff40::/32 +2402:ffc0::/32 +2403:600::/32 +2403:700::/32 +2403:7c0::/32 +2403:800::/31 +2403:980::/32 +2403:a80::/32 +2403:b80::/32 +2403:c80::/32 +2403:d40::/32 +2403:d80::/32 +2403:e80::/32 +2403:f00::/32 +2403:f40::/32 +2403:f80::/32 +2403:fc0::/32 +2403:1180::/32 +2403:1340::/32 +2403:1440::/32 +2403:1580::/32 +2403:16c0::/32 +2403:17c0::/32 +2403:1980::/32 +2403:1a40::/32 +2403:1b80::/32 +2403:1c80::/32 +2403:1d80::/32 +2403:1dc0::/32 +2403:1e80::/32 +2403:1ec0::/32 +2403:1f80::/32 +2403:2040::/32 +2403:2080::/32 +2403:2180::/32 +2403:2240::/32 +2403:2280::/32 +2403:2380::/32 +2403:2440::/32 +2403:24c0::/32 +2403:2580::/32 +2403:25c0::/32 +2403:2680::/32 +2403:2740::/32 +2403:2780::/32 +2403:28c0::/32 +2403:2940::/32 +2403:2a00::/32 +2403:2a40::/32 +2403:2ac0::/32 +2403:2b40::/32 +2403:2bc0::/32 +2403:2cc0::/32 +2403:2f40::/32 +2403:2fc0::/32 +2403:3040::/32 +2403:30c0::/32 +2403:3140::/32 +2403:3280::/32 +2403:32c0::/32 +2403:3380::/32 +2403:3480::/32 +2403:3580::/32 +2403:3640::/32 +2403:3680::/32 +2403:36c0::/32 +2403:3740::/32 +2403:3780::/32 +2403:37c0::/32 +2403:3840::/32 +2403:3880::/32 +2403:38c0::/32 +2403:3940::/32 +2403:3980::/32 +2403:39c0::/32 +2403:3a40::/32 +2403:3b40::/32 +2403:3b80::/32 +2403:3bc0::/32 +2403:3c40::/32 +2403:3c80::/32 +2403:3cc0::/32 +2403:3d40::/32 +2403:3d80::/32 +2403:3dc0::/32 +2403:3e80::/32 +2403:3ec0::/32 +2403:3f80::/32 +2403:4080::/32 +2403:4180::/32 +2403:4240::/32 +2403:4280::/32 +2403:4300::/32 +2403:4380::/32 +2403:4580::/32 +2403:4680::/32 +2403:4780::/32 +2403:4840::/32 +2403:4880::/32 +2403:4980::/32 +2403:4a40::/32 +2403:4a80::/32 +2403:4b40::/32 +2403:4b80::/32 +2403:4c80::/32 +2403:4cc0::/32 +2403:4d80::/32 +2403:4ec0::/32 +2403:5040::/32 +2403:5080::/32 +2403:5280::/32 +2403:5380::/32 +2403:54c0::/32 +2403:5540::/32 +2403:5580::/32 +2403:5640::/32 +2403:5780::/32 +2403:58c0::/32 +2403:5980::/32 +2403:5a80::/32 +2403:5b40::/32 +2403:5b80::/32 +2403:5c80::/32 +2403:5d80::/32 +2403:5e40::/32 +2403:5e80::/32 +2403:5ec0::/32 +2403:5f80::/32 +2403:5fc0::/32 +2403:6080::/32 +2403:6180::/32 +2403:6280::/32 +2403:62c0::/32 +2403:6380::/32 +2403:6580::/32 +2403:6680::/32 +2403:6740::/32 +2403:6780::/32 +2403:6880::/32 +2403:6980::/32 +2403:6a00::/32 +2403:6c80::/32 +2403:6d40::/32 +2403:6d80::/32 +2403:6e80::/32 +2403:6f40::/32 +2403:6fc0::/32 +2403:7040::/32 +2403:7080::/32 +2403:7180::/32 +2403:7280::/32 +2403:7380::/32 +2403:7480::/32 +2403:7540::/32 +2403:7580::/32 +2403:76c0::/32 +2403:7700::/32 +2403:7840::/32 +2403:78c0::/32 +2403:7a80::/32 +2403:7b00::/32 +2403:7d80::/32 +2403:7e80::/32 +2403:7f80::/32 +2403:8080::/32 +2403:8180::/32 +2403:8280::/32 +2403:8380::/32 +2403:83c0::/32 +2403:8480::/32 +2403:8580::/32 +2403:8880::/32 +2403:8900::/32 +2403:8980::/32 +2403:8a40::/32 +2403:8a80::/32 +2403:8b00::/32 +2403:8b80::/32 +2403:8c00::/32 +2403:8c80::/32 +2403:8d00::/32 +2403:8d80::/32 +2403:9080::/32 +2403:9180::/32 +2403:9280::/32 +2403:9380::/32 +2403:9480::/32 +2403:9580::/32 +2403:9680::/32 +2403:9780::/32 +2403:9880::/32 +2403:9a80::/32 +2403:9ac0::/32 +2403:9b00::/32 +2403:9b40::/32 +2403:9b80::/32 +2403:9c80::/32 +2403:9d00::/32 +2403:9d80::/32 +2403:9e40::/32 +2403:9e80::/32 +2403:9ec0::/32 +2403:9f80::/32 +2403:a100::/32 +2403:a140::/32 +2403:a200::/32 +2403:a300::/32 +2403:a480::/32 +2403:a580::/32 +2403:a680::/32 +2403:a6c0::/32 +2403:a780::/32 +2403:a880::/32 +2403:a940::/32 +2403:a980::/32 +2403:a9c0::/32 +2403:aa40::/32 +2403:aa80::/32 +2403:ab80::/32 +2403:ac00::/32 +2403:af80::/32 +2403:b080::/32 +2403:b180::/32 +2403:b280::/32 +2403:b380::/32 +2403:b400::/32 +2403:b480::/32 +2403:b580::/32 +2403:b680::/32 +2403:b780::/32 +2403:b880::/32 +2403:b980::/32 +2403:ba40::/32 +2403:c040::/32 +2403:c080::/32 +2403:c100::/32 +2403:c140::/32 +2403:c180::/32 +2403:c3c0::/32 +2403:c440::/32 +2403:c480::/32 +2403:c4c0::/32 +2403:c980::/32 +2403:cdc0::/32 +2403:cec0::/32 +2403:cf80::/32 +2403:d080::/32 +2403:d180::/32 +2403:d280::/32 +2403:d2c0::/32 +2403:d380::/32 +2403:d400::/32 +2403:d440::/32 +2403:d480::/32 +2403:d580::/32 +2403:d680::/32 +2403:d780::/32 +2403:d7c0::/32 +2403:d880::/32 +2403:d980::/32 +2403:d9c0::/32 +2403:da80::/32 +2403:dac0::/32 +2403:db00::/32 +2403:db80::/32 +2403:dc80::/32 +2403:dd80::/32 +2403:de80::/32 +2403:df80::/32 +2403:e080::/32 +2403:e180::/32 +2403:e280::/32 +2403:e300::/32 +2403:e480::/32 +2403:e500::/32 +2403:e580::/32 +2403:e640::/32 +2403:e680::/32 +2403:e700::/32 +2403:e780::/32 +2403:e7c0::/32 +2403:e880::/32 +2403:e980::/32 +2403:ea80::/32 +2403:eac0::/32 +2403:eb80::/32 +2403:ec80::/32 +2403:ed00::/32 +2403:ed40::/32 +2403:ed80::/32 +2403:ee80::/32 +2403:ef80::/32 +2403:f080::/32 +2403:f100::/32 +2403:f180::/32 +2403:f240::/32 +2403:f280::/32 +2403:f300::/32 +2403:f380::/32 +2403:f4c0::/32 +2403:f580::/32 +2403:f740::/32 +2403:f8c0::/32 +2403:f980::/32 +2403:fb00::/32 +2403:fb80::/32 +2403:fc40::/32 +2403:fe40::/32 +2403:fe80::/32 +2403:fec0::/32 +2403:ff80::/32 +2403:ffc0::/32 +2403:ffc1::/32 +2404:100::/32 +2404:158::/32 +2404:240::/32 +2404:280::/32 +2404:440::/32 +2404:480::/32 +2404:680::/32 +2404:a80::/32 +2404:b80::/32 +2404:bc0::/32 +2404:c40::/32 +2404:d80::/32 +2404:f00::/32 +2404:f80::/32 +2404:1080::/32 +2404:10c0::/32 +2404:1180::/32 +2404:14c0::/32 +2404:1880::/32 +2404:1c80::/32 +2404:1cc0::/32 +2404:1d80::/32 +2404:1e80::/32 +2404:1f40::/32 +2404:21c0::/32 +2404:30c0::/32 +2404:3140::/32 +2404:31c0::/32 +2404:3240::/32 +2404:32c0::/32 +2404:3300::/32 +2404:3340::/32 +2404:3480::/32 +2404:35c0::/32 +2404:3640::/32 +2404:36c0::/32 +2404:3700::/32 +2404:3740::/32 +2404:37c0::/32 +2404:3840::/32 +2404:3940::/32 +2404:3bc0::/32 +2404:3c40::/32 +2404:3f40::/32 +2404:4080::/32 +2404:41c0::/32 +2404:4540::/32 +2404:4740::/32 +2404:4bc0::/32 +2404:4d00::/32 +2404:4dc0::/32 +2404:51c0::/32 +2404:5640::/32 +2404:5a80::/32 +2404:5b00::/32 +2404:5d00::/32 +2404:6000::/32 +2404:6100::/32 +2404:6380::/32 +2404:6500::/32 +2404:65c0::/32 +2404:6a40::/32 +2404:6f80::/32 +2404:7100::/32 +2404:7180::/32 +2404:71c0::/32 +2404:7240::/32 +2404:74c0::/32 +2404:7600::/32 +2404:7740::/32 +2404:7940::/32 +2404:7d00::/32 +2404:8040::/32 +2404:80c0::/32 +2404:8140::/32 +2404:81c0::/32 +2404:8480::/32 +2404:8580::/32 +2404:8700::/32 +2404:8880::/32 +2404:8a80::/32 +2404:8b00::/32 +2404:8dc0::/32 +2404:9340::/32 +2404:9b80::/32 +2404:9c80::/32 +2404:a000::/32 +2404:a080::/32 +2404:a0c0::/32 +2404:a180::/32 +2404:a240::/32 +2404:a740::/32 +2404:b100::/32 +2404:b340::/32 +2404:b3c0::/32 +2404:b440::/32 +2404:b4c0::/32 +2404:b900::/32 +2404:bbc0::/32 +2404:bc40::/32 +2404:c1c0::/32 +2404:c240::/32 +2404:c2c0::/32 +2404:c300::/32 +2404:c3c0::/32 +2404:c440::/32 +2404:c4c0::/32 +2404:c540::/32 +2404:c5c0::/32 +2404:c640::/32 +2404:c940::/32 +2404:c9c0::/32 +2404:cd00::/32 +2404:d040::/32 +2404:d080::/32 +2404:d140::/32 +2404:d280::/32 +2404:d3c0::/32 +2404:d640::/32 +2404:d6c0::/32 +2404:d7c0::/32 +2404:d840::/32 +2404:dd80::/32 +2404:df00::/32 +2404:e280::/32 +2404:e540::/32 +2404:e5c0::/32 +2404:e780::/32 +2404:e880::/32 +2404:e8c0::/32 +2404:eb80::/32 +2404:ec40::/32 +2404:ecc0::/32 +2404:edc0::/32 +2404:f040::/32 +2404:f4c0::/32 +2404:f7c0::/32 +2405:80::/32 +2405:480::/32 +2405:580::/32 +2405:680::/32 +2405:6c0::/32 +2405:780::/32 +2405:880::/32 +2405:940::/32 +2405:980::/32 +2405:9c0::/32 +2405:a80::/32 +2405:b80::/32 +2405:c80::/32 +2405:d80::/32 +2405:e80::/32 +2405:f80::/32 +2405:1080::/32 +2405:1180::/32 +2405:1280::/32 +2405:1380::/32 +2405:1480::/32 +2405:1580::/32 +2405:1680::/32 +2405:18c0::/32 +2405:1c80::/32 +2405:1d80::/32 +2405:1e80::/32 +2405:1f80::/32 +2405:1fc0::/32 +2405:2080::/32 +2405:2180::/32 +2405:2280::/32 +2405:2340::/32 +2405:2380::/32 +2405:2480::/32 +2405:24c0::/32 +2405:2580::/32 +2405:2680::/32 +2405:2780::/32 +2405:2880::/32 +2405:2980::/32 +2405:2a80::/32 +2405:2b80::/32 +2405:2bc0::/32 +2405:2c80::/32 +2405:2d80::/32 +2405:2e80::/32 +2405:2ec0::/32 +2405:2f40::/32 +2405:2f80::/32 +2405:3140::/32 +2405:31c0::/32 +2405:37c0::/32 +2405:3880::/32 +2405:3980::/32 +2405:39c0::/32 +2405:3a80::/32 +2405:3ac0::/32 +2405:3b00::/32 +2405:3b80::/32 +2405:3bc0::/32 +2405:3c40::/32 +2405:3c80::/32 +2405:3d80::/32 +2405:3e80::/32 +2405:3f40::/32 +2405:3f80::/32 +2405:4080::/32 +2405:4140::/32 +2405:4180::/32 +2405:41c0::/32 +2405:4280::/32 +2405:4380::/32 +2405:4480::/32 +2405:44c0::/32 +2405:4540::/32 +2405:4580::/32 +2405:4680::/32 +2405:4780::/32 +2405:4880::/32 +2405:4980::/32 +2405:4a80::/32 +2405:4b80::/32 +2405:4d40::/32 +2405:4e80::/32 +2405:4f80::/32 +2405:5080::/32 +2405:5180::/32 +2405:5240::/32 +2405:5280::/32 +2405:52c0::/32 +2405:5380::/32 +2405:5480::/32 +2405:5580::/32 +2405:5680::/32 +2405:5780::/32 +2405:57c0::/32 +2405:5880::/32 +2405:5980::/32 +2405:5a80::/32 +2405:5b80::/32 +2405:5c80::/32 +2405:5cc0::/32 +2405:5d40::/32 +2405:5d80::/32 +2405:5dc0::/32 +2405:5e80::/32 +2405:5f80::/32 +2405:6080::/32 +2405:6180::/32 +2405:6200::/32 +2405:66c0::/32 +2405:6880::/32 +2405:68c0::/32 +2405:6940::/32 +2405:69c0::/32 +2405:6a80::/32 +2405:6b80::/32 +2405:6c80::/32 +2405:6d80::/32 +2405:6e80::/32 +2405:6f00::/32 +2405:6f80::/32 +2405:7040::/32 +2405:7080::/32 +2405:7180::/32 +2405:7240::/32 +2405:7280::/32 +2405:7380::/32 +2405:7480::/32 +2405:7580::/32 +2405:7680::/32 +2405:7780::/32 +2405:7880::/32 +2405:78c0::/32 +2405:7980::/32 +2405:79c0::/32 +2405:7a80::/32 +2405:7b80::/32 +2405:7c80::/32 +2405:7d40::/32 +2405:7f40::/32 +2405:7fc0::/32 +2405:8280::/32 +2405:8480::/32 +2405:84c0::/32 +2405:8580::/32 +2405:8680::/32 +2405:8780::/32 +2405:8880::/32 +2405:8980::/32 +2405:8a40::/32 +2405:8a80::/32 +2405:8ac0::/32 +2405:8b80::/32 +2405:8c80::/32 +2405:8d80::/32 +2405:8e80::/32 +2405:8f80::/32 +2405:9080::/32 +2405:9180::/32 +2405:9280::/32 +2405:9300::/32 +2405:9340::/32 +2405:9380::/32 +2405:93c0::/32 +2405:9480::/32 +2405:94c0::/32 +2405:9580::/32 +2405:9680::/32 +2405:9700::/32 +2405:9780::/32 +2405:97c0::/32 +2405:9880::/32 +2405:9900::/32 +2405:9980::/32 +2405:99c0::/32 +2405:9a80::/32 +2405:9b00::/32 +2405:9b80::/32 +2405:9bc0::/32 +2405:9e00::/32 +2405:a240::/32 +2405:a3c0::/32 +2405:a500::/32 +2405:a680::/32 +2405:a900::/32 +2405:a980::/32 +2405:aa80::/32 +2405:ab00::/32 +2405:ad00::/32 +2405:af00::/32 +2405:b100::/32 +2405:b300::/32 +2405:b7c0::/32 +2405:b880::/32 +2405:b980::/32 +2405:bb00::/32 +2405:bd00::/32 +2405:bd80::/32 +2405:bdc0::/32 +2405:be80::/32 +2405:bf00::/32 +2405:c040::/32 +2405:c280::/32 +2405:c380::/32 +2405:c480::/32 +2405:c500::/32 +2405:c580::/32 +2405:c680::/32 +2405:c780::/32 +2405:c880::/32 +2405:c980::/32 +2405:ca80::/32 +2405:cb80::/32 +2405:cc80::/32 +2405:cd80::/32 +2405:ce80::/32 +2405:d280::/32 +2405:d4c0::/32 +2405:d700::/32 +2405:d740::/32 +2405:d900::/32 +2405:df40::/32 +2405:e000::/32 +2405:e040::/32 +2405:e1c0::/32 +2405:e600::/32 +2405:ed40::/32 +2405:ef40::/30 +2405:f340::/32 +2405:f3c0::/32 +2405:f580::/32 +2405:f6c0::/32 +2405:f940::/32 +2405:fdc0::/32 +2405:fe80::/32 +2405:ff80::/32 +2406:40::/32 +2406:80::/32 +2406:c0::/32 +2406:140::/32 +2406:280::/32 +2406:440::/32 +2406:4c0::/32 +2406:7c0::/32 +2406:840::/32 +2406:880::/32 +2406:8c0::/32 +2406:d80::/32 +2406:e80::/32 +2406:f80::/32 +2406:1080::/32 +2406:1100::/32 +2406:1180::/32 +2406:1280::/32 +2406:1380::/32 +2406:1480::/32 +2406:1580::/32 +2406:15c0::/32 +2406:1680::/32 +2406:1780::/32 +2406:1880::/32 +2406:1980::/32 +2406:1a80::/32 +2406:1b80::/32 +2406:1c80::/32 +2406:1d80::/32 +2406:1e40::/32 +2406:1e80::/32 +2406:1f80::/32 +2406:2080::/32 +2406:2640::/32 +2406:2700::/32 +2406:2780::/32 +2406:2880::/32 +2406:2980::/32 +2406:2a80::/32 +2406:2b80::/32 +2406:2c40::/32 +2406:2c80::/32 +2406:2d80::/32 +2406:2e80::/32 +2406:2f80::/32 +2406:3080::/32 +2406:3180::/32 +2406:31c0::/32 +2406:3280::/32 +2406:3300::/32 +2406:3340::/32 +2406:3380::/32 +2406:3440::/32 +2406:3480::/32 +2406:34c0::/32 +2406:3580::/32 +2406:3640::/32 +2406:3680::/32 +2406:3700::/32 +2406:3780::/32 +2406:3880::/32 +2406:3980::/32 +2406:39c0::/32 +2406:3ac0::/32 +2406:3d80::/32 +2406:3e80::/32 +2406:3f80::/32 +2406:4080::/32 +2406:40c0::/32 +2406:4180::/32 +2406:4280::/32 +2406:42c0::/32 +2406:4340::/32 +2406:4380::/32 +2406:43c0::/32 +2406:4480::/32 +2406:4500::/32 +2406:4680::/32 +2406:4b80::/32 +2406:4c80::/32 +2406:4d00::/32 +2406:4d80::/32 +2406:4e80::/32 +2406:4f00::/32 +2406:4f80::/32 +2406:5080::/32 +2406:50c0::/32 +2406:5180::/32 +2406:5280::/32 +2406:52c0::/32 +2406:5340::/32 +2406:5380::/32 +2406:5480::/32 +2406:5580::/32 +2406:5680::/32 +2406:5780::/32 +2406:5840::/32 +2406:5880::/32 +2406:5940::/32 +2406:5980::/32 +2406:5a40::/32 +2406:5ac0::/32 +2406:5b40::/32 +2406:5d80::/32 +2406:5e80::/32 +2406:5f80::/32 +2406:6080::/32 +2406:6100::/32 +2406:6180::/32 +2406:61c0::/30 +2406:61c4::/30 +2406:6280::/32 +2406:6300::/32 +2406:6340::/32 +2406:6380::/32 +2406:6480::/32 +2406:6500::/32 +2406:6580::/32 +2406:65c0::/32 +2406:6640::/32 +2406:6680::/32 +2406:6780::/32 +2406:6880::/32 +2406:6980::/32 +2406:6a80::/32 +2406:6b80::/32 +2406:6bc0::/32 +2406:6c80::/32 +2406:6d80::/32 +2406:6e80::/32 +2406:6f80::/32 +2406:7080::/32 +2406:7280::/32 +2406:7380::/32 +2406:7480::/32 +2406:7580::/32 +2406:7680::/32 +2406:7780::/32 +2406:7880::/32 +2406:7980::/32 +2406:7a80::/32 +2406:7b80::/32 +2406:7c80::/32 +2406:7d00::/32 +2406:7d80::/32 +2406:7e80::/32 +2406:7f80::/32 +2406:7fc0::/32 +2406:8080::/32 +2406:8180::/32 +2406:8280::/32 +2406:8380::/32 +2406:8480::/32 +2406:8500::/32 +2406:8580::/32 +2406:8780::/32 +2406:8880::/32 +2406:8980::/32 +2406:8a80::/32 +2406:8b80::/32 +2406:8c80::/32 +2406:8d80::/32 +2406:8e80::/32 +2406:8f40::/32 +2406:8f80::/32 +2406:9180::/32 +2406:9200::/32 +2406:9380::/32 +2406:9480::/32 +2406:94c0::/32 +2406:9780::/32 +2406:9d80::/32 +2406:9e40::/32 +2406:9e80::/32 +2406:9f80::/32 +2406:a080::/32 +2406:a180::/32 +2406:a280::/32 +2406:a380::/32 +2406:a480::/32 +2406:a580::/32 +2406:a680::/32 +2406:a780::/32 +2406:a7c0::/32 +2406:a880::/32 +2406:a8c0::/32 +2406:a980::/32 +2406:aa80::/32 +2406:aac0::/32 +2406:ab80::/32 +2406:ac80::/32 +2406:acc0::/32 +2406:ad40::/32 +2406:ad80::/32 +2406:ae80::/32 +2406:af80::/32 +2406:b080::/32 +2406:b640::/32 +2406:b880::/32 +2406:b980::/32 +2406:ba80::/32 +2406:bb80::/32 +2406:bc80::/32 +2406:bd40::/32 +2406:bd80::/32 +2406:bdc0::/32 +2406:be80::/32 +2406:bf80::/32 +2406:c080::/32 +2406:c180::/32 +2406:c280::/32 +2406:c340::/32 +2406:c480::/32 +2406:c580::/32 +2406:c680::/32 +2406:c780::/32 +2406:c880::/32 +2406:c900::/32 +2406:c980::/32 +2406:ca80::/32 +2406:cac0::/32 +2406:cb80::/32 +2406:cc80::/32 +2406:cd80::/32 +2406:ce80::/32 +2406:cf00::/32 +2406:cf01::/32 +2406:cf02::/31 +2406:cf80::/32 +2406:d080::/32 +2406:d140::/32 +2406:d180::/32 +2406:d280::/32 +2406:d2c0::/32 +2406:d380::/32 +2406:d440::/32 +2406:d480::/32 +2406:d580::/32 +2406:d680::/32 +2406:d780::/32 +2406:d880::/32 +2406:d980::/32 +2406:db80::/32 +2406:dc80::/32 +2406:dd00::/32 +2406:dd80::/32 +2406:de80::/32 +2406:df80::/32 +2406:e080::/32 +2406:e180::/32 +2406:e2c0::/32 +2406:e380::/32 +2406:e3c0::/32 +2406:e500::/32 +2406:e580::/32 +2406:e680::/32 +2406:e780::/32 +2406:e8c0::/32 +2406:ea40::/28 +2406:f280::/32 +2406:f300::/32 +2406:f4c0::/32 +2406:f7c0::/32 +2406:f980::/32 +2406:fc80::/32 +2406:fd80::/32 +2406:fe80::/32 +2406:ff00::/32 +2407:480::/32 +2407:580::/32 +2407:cc0::/32 +2407:f40::/32 +2407:17c0::/32 +2407:1900::/32 +2407:1d00::/32 +2407:2280::/32 +2407:2380::/32 +2407:23c0::/32 +2407:2780::/32 +2407:2840::/32 +2407:2ac0::/32 +2407:31c0::/32 +2407:3340::/32 +2407:3540::/32 +2407:3700::/32 +2407:3740::/32 +2407:37c0::/32 +2407:3900::/32 +2407:3f40::/32 +2407:43c0::/32 +2407:4440::/32 +2407:4580::/32 +2407:4680::/32 +2407:4740::/32 +2407:4880::/32 +2407:4980::/32 +2407:4a80::/32 +2407:4c80::/32 +2407:4d80::/32 +2407:4e80::/32 +2407:4f00::/32 +2407:5380::/32 +2407:53c0::/32 +2407:5500::/32 +2407:5780::/32 +2407:5840::/32 +2407:6040::/32 +2407:6580::/32 +2407:6c40::/32 +2407:7680::/32 +2407:7780::/32 +2407:7880::/32 +2407:7980::/32 +2407:7c80::/32 +2407:7d00::/32 +2407:7d80::/32 +2407:7e80::/32 +2407:8880::/32 +2407:8b80::/32 +2407:8f40::/32 +2407:9080::/32 +2407:9180::/32 +2407:94c0::/32 +2407:9680::/32 +2407:9980::/32 +2407:9b40::/32 +2407:9bc0::/32 +2407:9f00::/32 +2407:9f80::/32 +2407:a040::/32 +2407:a640::/32 +2407:a7c0::/32 +2407:a880::/32 +2407:a940::/32 +2407:ad80::/32 +2407:ae80::/32 +2407:af80::/32 +2407:b080::/32 +2407:b180::/32 +2407:b280::/32 +2407:b380::/32 +2407:b580::/32 +2407:b680::/32 +2407:b780::/32 +2407:b880::/32 +2407:b980::/32 +2407:ba00::/32 +2407:ba80::/32 +2407:bb80::/32 +2407:bc00::/32 +2407:bc80::/32 +2407:bd80::/32 +2407:bdc0::/32 +2407:be80::/32 +2407:bf80::/32 +2407:c080::/32 +2407:c380::/32 +2407:c400::/32 +2407:c480::/32 +2407:c580::/32 +2407:c680::/32 +2407:c780::/32 +2407:c880::/32 +2407:c900::/32 +2407:c980::/32 +2407:cb80::/32 +2407:cc80::/32 +2407:cd80::/32 +2407:ce80::/32 +2407:cf00::/32 +2407:cf80::/32 +2407:d480::/32 +2407:d580::/32 +2407:d680::/32 +2407:d780::/32 +2407:d7c0::/32 +2407:d880::/32 +2407:d8c0::/32 +2407:d980::/32 +2407:d9c0::/32 +2407:da80::/32 +2407:db80::/32 +2407:dc80::/32 +2407:dd80::/32 +2407:de80::/32 +2407:df80::/32 +2407:dfc0::/32 +2407:e080::/32 +2407:e180::/32 +2407:e280::/32 +2407:e380::/32 +2407:e480::/32 +2407:e580::/32 +2407:e680::/32 +2407:e780::/32 +2407:e800::/32 +2407:ea80::/32 +2407:eb80::/32 +2407:ec40::/32 +2407:ec80::/32 +2407:ecc0::/32 +2407:ed80::/32 +2407:ee80::/32 +2407:ef80::/32 +2407:f080::/32 +2407:f180::/32 +2407:f280::/32 +2407:f380::/32 +2407:f480::/32 +2407:f580::/32 +2407:f680::/32 +2407:f780::/32 +2407:f880::/32 +2407:f980::/32 +2407:fa80::/32 +2407:fb80::/32 +2407:fc80::/32 +2407:fd80::/32 +2408:4000::/22 +2408:6000::/24 +2408:8000::/22 +2408:8400::/22 +2408:8800::/21 +2409:2000::/21 +2409:6000::/20 +2409:8000::/20 +240a:2000::/24 +240a:4000::/21 +240a:6000::/24 +240a:8000::/21 +240a:a000::/20 +240a:c000::/20 +240b:2000::/22 +240b:6000::/20 +240b:8000::/21 +240b:a000::/25 +240b:e000::/26 +240c::/28 +240c:4000::/22 +240c:8000::/21 +240c:c000::/20 +240d:4000::/21 +240d:8000::/24 +240e::/24 +240e:100::/24 +240e:200::/23 +240e:400::/22 +240e:800::/21 +240e:1000::/20 +240e:2000::/19 +240f:4000::/24 +240f:8000::/24 +240f:c000::/24 \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/china_ip_route.ipset b/luci-app-openclash/root/etc/openclash/china_ip_route.ipset index 03a44202d..a1b135d11 100644 --- a/luci-app-openclash/root/etc/openclash/china_ip_route.ipset +++ b/luci-app-openclash/root/etc/openclash/china_ip_route.ipset @@ -1,8617 +1,8668 @@ -create china_ip_route hash:net family inet hashsize 1024 maxelem 1000000 -add china_ip_route 1.0.1.0/24 -add china_ip_route 1.0.2.0/23 -add china_ip_route 1.0.8.0/21 -add china_ip_route 1.0.32.0/19 -add china_ip_route 1.1.0.0/24 -add china_ip_route 1.1.2.0/23 -add china_ip_route 1.1.4.0/22 -add china_ip_route 1.1.8.0/24 -add china_ip_route 1.1.9.0/24 -add china_ip_route 1.1.10.0/23 -add china_ip_route 1.1.12.0/22 -add china_ip_route 1.1.16.0/20 -add china_ip_route 1.1.32.0/19 -add china_ip_route 1.2.0.0/23 -add china_ip_route 1.2.2.0/24 -add china_ip_route 1.2.4.0/24 -add china_ip_route 1.2.5.0/24 -add china_ip_route 1.2.6.0/23 -add china_ip_route 1.2.8.0/24 -add china_ip_route 1.2.9.0/24 -add china_ip_route 1.2.10.0/23 -add china_ip_route 1.2.12.0/22 -add china_ip_route 1.2.16.0/20 -add china_ip_route 1.2.32.0/19 -add china_ip_route 1.2.64.0/18 -add china_ip_route 1.3.0.0/16 -add china_ip_route 1.4.1.0/24 -add china_ip_route 1.4.2.0/23 -add china_ip_route 1.4.4.0/24 -add china_ip_route 1.4.5.0/24 -add china_ip_route 1.4.6.0/23 -add china_ip_route 1.4.8.0/21 -add china_ip_route 1.4.16.0/20 -add china_ip_route 1.4.32.0/19 -add china_ip_route 1.4.64.0/18 -add china_ip_route 1.8.0.0/16 -add china_ip_route 1.10.0.0/21 -add china_ip_route 1.10.8.0/23 -add china_ip_route 1.10.11.0/24 -add china_ip_route 1.10.12.0/22 -add china_ip_route 1.10.16.0/20 -add china_ip_route 1.10.32.0/19 -add china_ip_route 1.10.64.0/18 -add china_ip_route 1.12.0.0/14 -add china_ip_route 1.24.0.0/13 -add china_ip_route 1.45.0.0/16 -add china_ip_route 1.48.0.0/15 -add china_ip_route 1.50.0.0/16 -add china_ip_route 1.51.0.0/16 -add china_ip_route 1.56.0.0/13 -add china_ip_route 1.68.0.0/14 -add china_ip_route 1.80.0.0/13 -add china_ip_route 1.88.0.0/14 -add china_ip_route 1.92.0.0/15 -add china_ip_route 1.94.0.0/15 -add china_ip_route 1.116.0.0/15 -add china_ip_route 1.118.0.0/16 -add china_ip_route 1.119.0.0/17 -add china_ip_route 1.119.128.0/17 -add china_ip_route 1.180.0.0/14 -add china_ip_route 1.184.0.0/15 -add china_ip_route 1.188.0.0/14 -add china_ip_route 1.192.0.0/13 -add china_ip_route 1.202.0.0/15 -add china_ip_route 1.204.0.0/14 -add china_ip_route 14.0.0.0/21 -add china_ip_route 14.0.12.0/22 -add china_ip_route 14.1.0.0/22 -add china_ip_route 14.1.24.0/22 -add china_ip_route 14.1.96.0/22 -add china_ip_route 14.1.108.0/22 -add china_ip_route 14.16.0.0/12 -add china_ip_route 14.102.128.0/22 -add china_ip_route 14.102.156.0/22 -add china_ip_route 14.102.180.0/22 -add china_ip_route 14.103.0.0/16 -add china_ip_route 14.104.0.0/13 -add china_ip_route 14.112.0.0/12 -add china_ip_route 14.130.0.0/15 -add china_ip_route 14.134.0.0/15 -add china_ip_route 14.144.0.0/12 -add china_ip_route 14.192.60.0/22 -add china_ip_route 14.192.76.0/22 -add china_ip_route 14.196.0.0/15 -add china_ip_route 14.204.0.0/15 -add china_ip_route 14.208.0.0/12 -add china_ip_route 27.0.128.0/22 -add china_ip_route 27.0.132.0/22 -add china_ip_route 27.0.160.0/22 -add china_ip_route 27.0.164.0/22 -add china_ip_route 27.0.188.0/22 -add china_ip_route 27.0.204.0/22 -add china_ip_route 27.0.208.0/22 -add china_ip_route 27.0.212.0/22 -add china_ip_route 27.8.0.0/13 -add china_ip_route 27.16.0.0/12 -add china_ip_route 27.34.232.0/21 -add china_ip_route 27.36.0.0/14 -add china_ip_route 27.40.0.0/13 -add china_ip_route 27.50.40.0/21 -add china_ip_route 27.50.128.0/17 -add china_ip_route 27.54.72.0/21 -add china_ip_route 27.54.152.0/21 -add china_ip_route 27.54.192.0/18 -add china_ip_route 27.98.208.0/20 -add china_ip_route 27.98.224.0/19 -add china_ip_route 27.99.128.0/17 -add china_ip_route 27.103.0.0/16 -add china_ip_route 27.106.128.0/18 -add china_ip_route 27.106.204.0/22 -add china_ip_route 27.109.32.0/19 -add china_ip_route 27.109.124.0/22 -add china_ip_route 27.112.0.0/18 -add china_ip_route 27.112.80.0/20 -add china_ip_route 27.112.112.0/22 -add china_ip_route 27.112.116.0/22 -add china_ip_route 27.113.128.0/18 -add china_ip_route 27.115.0.0/17 -add china_ip_route 27.116.44.0/22 -add china_ip_route 27.121.72.0/21 -add china_ip_route 27.121.120.0/21 -add china_ip_route 27.128.0.0/15 -add china_ip_route 27.131.220.0/22 -add china_ip_route 27.144.0.0/16 -add china_ip_route 27.148.0.0/14 -add china_ip_route 27.152.0.0/13 -add china_ip_route 27.184.0.0/13 -add china_ip_route 27.192.0.0/11 -add china_ip_route 27.224.0.0/14 -add china_ip_route 36.0.0.0/22 -add china_ip_route 36.0.8.0/21 -add china_ip_route 36.0.16.0/20 -add china_ip_route 36.0.32.0/19 -add china_ip_route 36.0.64.0/18 -add china_ip_route 36.0.128.0/17 -add china_ip_route 36.1.0.0/16 -add china_ip_route 36.4.0.0/14 -add china_ip_route 36.16.0.0/12 -add china_ip_route 36.32.0.0/14 -add china_ip_route 36.36.0.0/16 -add china_ip_route 36.37.0.0/19 -add china_ip_route 36.37.36.0/23 -add china_ip_route 36.37.39.0/24 -add china_ip_route 36.37.40.0/21 -add china_ip_route 36.37.48.0/20 -add china_ip_route 36.40.0.0/13 -add china_ip_route 36.48.0.0/15 -add china_ip_route 36.51.0.0/16 -add china_ip_route 36.56.0.0/13 -add china_ip_route 36.96.0.0/11 -add china_ip_route 36.128.0.0/10 -add china_ip_route 36.192.0.0/11 -add china_ip_route 36.248.0.0/14 -add china_ip_route 36.254.0.0/16 -add china_ip_route 36.255.116.0/22 -add china_ip_route 36.255.128.0/22 -add china_ip_route 36.255.164.0/22 -add china_ip_route 36.255.172.0/22 -add china_ip_route 36.255.176.0/22 -add china_ip_route 39.0.0.0/24 -add china_ip_route 39.0.2.0/23 -add china_ip_route 39.0.4.0/22 -add china_ip_route 39.0.8.0/21 -add china_ip_route 39.0.16.0/20 -add china_ip_route 39.0.32.0/19 -add china_ip_route 39.0.64.0/18 -add china_ip_route 39.0.128.0/17 -add china_ip_route 39.64.0.0/11 -add china_ip_route 39.96.0.0/13 -add china_ip_route 39.104.0.0/14 -add china_ip_route 39.108.0.0/16 -add china_ip_route 39.128.0.0/10 -add china_ip_route 40.72.0.0/15 -add china_ip_route 40.125.128.0/17 -add china_ip_route 40.126.64.0/18 -add china_ip_route 42.0.0.0/22 -add china_ip_route 42.0.8.0/21 -add china_ip_route 42.0.16.0/21 -add china_ip_route 42.0.24.0/22 -add china_ip_route 42.0.32.0/19 -add china_ip_route 42.0.128.0/17 -add china_ip_route 42.1.0.0/19 -add china_ip_route 42.1.32.0/20 -add china_ip_route 42.1.48.0/21 -add china_ip_route 42.1.56.0/22 -add china_ip_route 42.1.128.0/17 -add china_ip_route 42.4.0.0/14 -add china_ip_route 42.48.0.0/15 -add china_ip_route 42.50.0.0/16 -add china_ip_route 42.51.0.0/16 -add china_ip_route 42.52.0.0/14 -add china_ip_route 42.56.0.0/14 -add china_ip_route 42.62.0.0/17 -add china_ip_route 42.62.128.0/19 -add china_ip_route 42.62.160.0/20 -add china_ip_route 42.62.180.0/22 -add china_ip_route 42.62.184.0/21 -add china_ip_route 42.63.0.0/16 -add china_ip_route 42.80.0.0/15 -add china_ip_route 42.83.64.0/20 -add china_ip_route 42.83.80.0/22 -add china_ip_route 42.83.88.0/21 -add china_ip_route 42.83.96.0/19 -add china_ip_route 42.83.128.0/17 -add china_ip_route 42.84.0.0/14 -add china_ip_route 42.88.0.0/13 -add china_ip_route 42.96.64.0/19 -add china_ip_route 42.96.96.0/21 -add china_ip_route 42.96.108.0/22 -add china_ip_route 42.96.112.0/20 -add china_ip_route 42.96.128.0/17 -add china_ip_route 42.97.0.0/16 -add china_ip_route 42.99.0.0/18 -add china_ip_route 42.99.64.0/19 -add china_ip_route 42.99.96.0/20 -add china_ip_route 42.99.112.0/22 -add china_ip_route 42.99.120.0/21 -add china_ip_route 42.100.0.0/14 -add china_ip_route 42.120.0.0/15 -add china_ip_route 42.122.0.0/16 -add china_ip_route 42.123.0.0/19 -add china_ip_route 42.123.36.0/22 -add china_ip_route 42.123.40.0/21 -add china_ip_route 42.123.48.0/20 -add china_ip_route 42.123.64.0/18 -add china_ip_route 42.123.128.0/17 -add china_ip_route 42.128.0.0/12 -add china_ip_route 42.156.0.0/19 -add china_ip_route 42.156.36.0/22 -add china_ip_route 42.156.40.0/21 -add china_ip_route 42.156.48.0/20 -add china_ip_route 42.156.64.0/18 -add china_ip_route 42.156.128.0/17 -add china_ip_route 42.157.0.0/16 -add china_ip_route 42.158.0.0/16 -add china_ip_route 42.159.0.0/16 -add china_ip_route 42.160.0.0/12 -add china_ip_route 42.176.0.0/13 -add china_ip_route 42.184.0.0/15 -add china_ip_route 42.186.0.0/16 -add china_ip_route 42.187.0.0/18 -add china_ip_route 42.187.64.0/19 -add china_ip_route 42.187.96.0/20 -add china_ip_route 42.187.112.0/21 -add china_ip_route 42.187.120.0/22 -add china_ip_route 42.187.128.0/17 -add china_ip_route 42.192.0.0/15 -add china_ip_route 42.194.0.0/21 -add china_ip_route 42.194.8.0/22 -add china_ip_route 42.194.12.0/22 -add china_ip_route 42.194.16.0/20 -add china_ip_route 42.194.32.0/19 -add china_ip_route 42.194.64.0/18 -add china_ip_route 42.194.128.0/17 -add china_ip_route 42.195.0.0/16 -add china_ip_route 42.196.0.0/14 -add china_ip_route 42.201.0.0/17 -add china_ip_route 42.202.0.0/15 -add china_ip_route 42.204.0.0/14 -add china_ip_route 42.208.0.0/12 -add china_ip_route 42.224.0.0/12 -add china_ip_route 42.240.0.0/17 -add china_ip_route 42.240.128.0/17 -add china_ip_route 42.242.0.0/15 -add china_ip_route 42.244.0.0/14 -add china_ip_route 42.248.0.0/13 -add china_ip_route 43.136.0.0/13 -add china_ip_route 43.144.0.0/13 -add china_ip_route 43.160.0.0/11 -add china_ip_route 43.224.12.0/22 -add china_ip_route 43.224.24.0/22 -add china_ip_route 43.224.44.0/22 -add china_ip_route 43.224.52.0/22 -add china_ip_route 43.224.56.0/22 -add china_ip_route 43.224.64.0/22 -add china_ip_route 43.224.68.0/22 -add china_ip_route 43.224.72.0/22 -add china_ip_route 43.224.80.0/22 -add china_ip_route 43.224.100.0/22 -add china_ip_route 43.224.144.0/22 -add china_ip_route 43.224.160.0/22 -add china_ip_route 43.224.176.0/22 -add china_ip_route 43.224.184.0/22 -add china_ip_route 43.224.200.0/22 -add china_ip_route 43.224.204.0/22 -add china_ip_route 43.224.208.0/22 -add china_ip_route 43.224.212.0/22 -add china_ip_route 43.224.216.0/22 -add china_ip_route 43.224.240.0/22 -add china_ip_route 43.225.76.0/22 -add china_ip_route 43.225.84.0/22 -add china_ip_route 43.225.120.0/22 -add china_ip_route 43.225.124.0/22 -add china_ip_route 43.225.172.0/22 -add china_ip_route 43.225.180.0/22 -add china_ip_route 43.225.208.0/22 -add china_ip_route 43.225.216.0/22 -add china_ip_route 43.225.220.0/22 -add china_ip_route 43.225.224.0/22 -add china_ip_route 43.225.228.0/22 -add china_ip_route 43.225.232.0/22 -add china_ip_route 43.225.236.0/22 -add china_ip_route 43.225.240.0/22 -add china_ip_route 43.225.244.0/22 -add china_ip_route 43.225.252.0/22 -add china_ip_route 43.226.32.0/22 -add china_ip_route 43.226.36.0/22 -add china_ip_route 43.226.40.0/22 -add china_ip_route 43.226.44.0/22 -add china_ip_route 43.226.48.0/22 -add china_ip_route 43.226.52.0/22 -add china_ip_route 43.226.56.0/22 -add china_ip_route 43.226.60.0/22 -add china_ip_route 43.226.64.0/22 -add china_ip_route 43.226.68.0/22 -add china_ip_route 43.226.72.0/22 -add china_ip_route 43.226.76.0/22 -add china_ip_route 43.226.80.0/22 -add china_ip_route 43.226.84.0/22 -add china_ip_route 43.226.88.0/22 -add china_ip_route 43.226.92.0/22 -add china_ip_route 43.226.96.0/22 -add china_ip_route 43.226.100.0/22 -add china_ip_route 43.226.104.0/22 -add china_ip_route 43.226.108.0/22 -add china_ip_route 43.226.112.0/22 -add china_ip_route 43.226.116.0/22 -add china_ip_route 43.226.120.0/22 -add china_ip_route 43.226.128.0/22 -add china_ip_route 43.226.132.0/22 -add china_ip_route 43.226.136.0/22 -add china_ip_route 43.226.140.0/22 -add china_ip_route 43.226.144.0/22 -add china_ip_route 43.226.148.0/22 -add china_ip_route 43.226.152.0/22 -add china_ip_route 43.226.156.0/22 -add china_ip_route 43.226.160.0/22 -add china_ip_route 43.226.164.0/22 -add china_ip_route 43.226.168.0/22 -add china_ip_route 43.226.172.0/22 -add china_ip_route 43.226.176.0/22 -add china_ip_route 43.226.180.0/22 -add china_ip_route 43.226.184.0/22 -add china_ip_route 43.226.188.0/22 -add china_ip_route 43.226.192.0/22 -add china_ip_route 43.226.196.0/22 -add china_ip_route 43.226.200.0/22 -add china_ip_route 43.226.204.0/22 -add china_ip_route 43.226.208.0/22 -add china_ip_route 43.226.212.0/22 -add china_ip_route 43.226.236.0/22 -add china_ip_route 43.226.240.0/22 -add china_ip_route 43.226.244.0/22 -add china_ip_route 43.226.248.0/22 -add china_ip_route 43.226.252.0/22 -add china_ip_route 43.227.0.0/22 -add china_ip_route 43.227.4.0/22 -add china_ip_route 43.227.8.0/22 -add china_ip_route 43.227.32.0/22 -add china_ip_route 43.227.36.0/22 -add china_ip_route 43.227.40.0/22 -add china_ip_route 43.227.44.0/22 -add china_ip_route 43.227.48.0/22 -add china_ip_route 43.227.52.0/22 -add china_ip_route 43.227.56.0/22 -add china_ip_route 43.227.60.0/22 -add china_ip_route 43.227.64.0/22 -add china_ip_route 43.227.68.0/22 -add china_ip_route 43.227.72.0/22 -add china_ip_route 43.227.76.0/22 -add china_ip_route 43.227.80.0/22 -add china_ip_route 43.227.84.0/22 -add china_ip_route 43.227.88.0/22 -add china_ip_route 43.227.92.0/22 -add china_ip_route 43.227.96.0/22 -add china_ip_route 43.227.100.0/22 -add china_ip_route 43.227.104.0/22 -add china_ip_route 43.227.136.0/22 -add china_ip_route 43.227.140.0/22 -add china_ip_route 43.227.144.0/22 -add china_ip_route 43.227.152.0/22 -add china_ip_route 43.227.156.0/22 -add china_ip_route 43.227.160.0/22 -add china_ip_route 43.227.164.0/22 -add china_ip_route 43.227.168.0/22 -add china_ip_route 43.227.172.0/22 -add china_ip_route 43.227.176.0/22 -add china_ip_route 43.227.180.0/22 -add china_ip_route 43.227.188.0/22 -add china_ip_route 43.227.192.0/22 -add china_ip_route 43.227.196.0/22 -add china_ip_route 43.227.200.0/22 -add china_ip_route 43.227.204.0/22 -add china_ip_route 43.227.208.0/22 -add china_ip_route 43.227.212.0/22 -add china_ip_route 43.227.216.0/22 -add china_ip_route 43.227.220.0/22 -add china_ip_route 43.227.232.0/22 -add china_ip_route 43.227.248.0/22 -add china_ip_route 43.227.252.0/22 -add china_ip_route 43.228.0.0/22 -add china_ip_route 43.228.4.0/22 -add china_ip_route 43.228.8.0/22 -add china_ip_route 43.228.12.0/22 -add china_ip_route 43.228.16.0/22 -add china_ip_route 43.228.20.0/22 -add china_ip_route 43.228.24.0/22 -add china_ip_route 43.228.28.0/22 -add china_ip_route 43.228.32.0/22 -add china_ip_route 43.228.36.0/22 -add china_ip_route 43.228.40.0/22 -add china_ip_route 43.228.44.0/22 -add china_ip_route 43.228.48.0/22 -add china_ip_route 43.228.52.0/22 -add china_ip_route 43.228.56.0/22 -add china_ip_route 43.228.60.0/22 -add china_ip_route 43.228.64.0/22 -add china_ip_route 43.228.68.0/22 -add china_ip_route 43.228.76.0/22 -add china_ip_route 43.228.100.0/22 -add china_ip_route 43.228.116.0/22 -add china_ip_route 43.228.120.0/22 -add china_ip_route 43.228.132.0/22 -add china_ip_route 43.228.136.0/22 -add china_ip_route 43.228.148.0/22 -add china_ip_route 43.228.152.0/22 -add china_ip_route 43.228.188.0/22 -add china_ip_route 43.228.204.0/22 -add china_ip_route 43.228.240.0/22 -add china_ip_route 43.229.40.0/22 -add china_ip_route 43.229.48.0/22 -add china_ip_route 43.229.56.0/22 -add china_ip_route 43.229.96.0/22 -add china_ip_route 43.229.120.0/22 -add china_ip_route 43.229.136.0/22 -add china_ip_route 43.229.140.0/22 -add china_ip_route 43.229.144.0/22 -add china_ip_route 43.229.168.0/22 -add china_ip_route 43.229.172.0/22 -add china_ip_route 43.229.176.0/22 -add china_ip_route 43.229.180.0/22 -add china_ip_route 43.229.184.0/22 -add china_ip_route 43.229.188.0/22 -add china_ip_route 43.229.192.0/22 -add china_ip_route 43.229.196.0/22 -add china_ip_route 43.229.216.0/22 -add china_ip_route 43.229.220.0/22 -add china_ip_route 43.229.232.0/22 -add china_ip_route 43.229.236.0/22 -add china_ip_route 43.230.20.0/22 -add china_ip_route 43.230.32.0/22 -add china_ip_route 43.230.68.0/22 -add china_ip_route 43.230.72.0/22 -add china_ip_route 43.230.84.0/22 -add china_ip_route 43.230.124.0/22 -add china_ip_route 43.230.136.0/22 -add china_ip_route 43.230.220.0/22 -add china_ip_route 43.230.224.0/22 -add china_ip_route 43.230.228.0/22 -add china_ip_route 43.230.232.0/22 -add china_ip_route 43.230.236.0/22 -add china_ip_route 43.230.240.0/22 -add china_ip_route 43.230.244.0/22 -add china_ip_route 43.230.248.0/22 -add china_ip_route 43.230.252.0/22 -add china_ip_route 43.231.32.0/22 -add china_ip_route 43.231.36.0/22 -add china_ip_route 43.231.40.0/22 -add china_ip_route 43.231.44.0/22 -add china_ip_route 43.231.80.0/22 -add china_ip_route 43.231.84.0/22 -add china_ip_route 43.231.88.0/22 -add china_ip_route 43.231.92.0/22 -add china_ip_route 43.231.96.0/22 -add china_ip_route 43.231.100.0/22 -add china_ip_route 43.231.104.0/22 -add china_ip_route 43.231.108.0/22 -add china_ip_route 43.231.136.0/22 -add china_ip_route 43.231.140.0/22 -add china_ip_route 43.231.144.0/22 -add china_ip_route 43.231.148.0/22 -add china_ip_route 43.231.152.0/22 -add china_ip_route 43.231.156.0/22 -add china_ip_route 43.231.160.0/22 -add china_ip_route 43.231.164.0/22 -add china_ip_route 43.231.168.0/22 -add china_ip_route 43.231.172.0/22 -add china_ip_route 43.231.176.0/22 -add china_ip_route 43.231.180.0/22 -add china_ip_route 43.236.0.0/22 -add china_ip_route 43.236.4.0/22 -add china_ip_route 43.236.8.0/22 -add china_ip_route 43.236.12.0/22 -add china_ip_route 43.236.16.0/22 -add china_ip_route 43.236.20.0/22 -add china_ip_route 43.236.24.0/22 -add china_ip_route 43.236.28.0/22 -add china_ip_route 43.236.32.0/22 -add china_ip_route 43.236.36.0/22 -add china_ip_route 43.236.40.0/22 -add china_ip_route 43.236.44.0/22 -add china_ip_route 43.236.48.0/22 -add china_ip_route 43.236.52.0/22 -add china_ip_route 43.236.56.0/22 -add china_ip_route 43.236.60.0/22 -add china_ip_route 43.236.64.0/22 -add china_ip_route 43.236.68.0/22 -add china_ip_route 43.236.72.0/22 -add china_ip_route 43.236.76.0/22 -add china_ip_route 43.236.80.0/22 -add china_ip_route 43.236.84.0/22 -add china_ip_route 43.236.88.0/22 -add china_ip_route 43.236.92.0/22 -add china_ip_route 43.236.96.0/22 -add china_ip_route 43.236.100.0/22 -add china_ip_route 43.236.104.0/22 -add china_ip_route 43.236.108.0/22 -add china_ip_route 43.236.112.0/22 -add china_ip_route 43.236.116.0/22 -add china_ip_route 43.236.120.0/22 -add china_ip_route 43.236.124.0/22 -add china_ip_route 43.236.128.0/22 -add china_ip_route 43.236.132.0/22 -add china_ip_route 43.236.136.0/22 -add china_ip_route 43.236.140.0/22 -add china_ip_route 43.236.144.0/22 -add china_ip_route 43.236.148.0/22 -add china_ip_route 43.236.152.0/22 -add china_ip_route 43.236.156.0/22 -add china_ip_route 43.236.160.0/22 -add china_ip_route 43.236.164.0/22 -add china_ip_route 43.236.168.0/22 -add china_ip_route 43.236.172.0/22 -add china_ip_route 43.236.176.0/22 -add china_ip_route 43.236.180.0/22 -add china_ip_route 43.236.184.0/22 -add china_ip_route 43.236.188.0/22 -add china_ip_route 43.236.192.0/22 -add china_ip_route 43.236.196.0/22 -add china_ip_route 43.236.200.0/22 -add china_ip_route 43.236.204.0/22 -add china_ip_route 43.236.208.0/22 -add china_ip_route 43.236.212.0/22 -add china_ip_route 43.236.216.0/22 -add china_ip_route 43.236.220.0/22 -add china_ip_route 43.236.224.0/22 -add china_ip_route 43.236.228.0/22 -add china_ip_route 43.236.232.0/22 -add china_ip_route 43.236.236.0/22 -add china_ip_route 43.236.240.0/22 -add china_ip_route 43.236.244.0/22 -add china_ip_route 43.236.248.0/22 -add china_ip_route 43.236.252.0/22 -add china_ip_route 43.237.0.0/22 -add china_ip_route 43.237.4.0/22 -add china_ip_route 43.237.8.0/22 -add china_ip_route 43.237.12.0/22 -add china_ip_route 43.237.16.0/22 -add china_ip_route 43.237.20.0/22 -add china_ip_route 43.237.24.0/22 -add china_ip_route 43.237.28.0/22 -add china_ip_route 43.237.32.0/22 -add china_ip_route 43.237.36.0/22 -add china_ip_route 43.237.40.0/22 -add china_ip_route 43.237.44.0/22 -add china_ip_route 43.237.48.0/22 -add china_ip_route 43.237.52.0/22 -add china_ip_route 43.237.56.0/22 -add china_ip_route 43.237.60.0/22 -add china_ip_route 43.237.64.0/22 -add china_ip_route 43.237.68.0/22 -add china_ip_route 43.237.72.0/22 -add china_ip_route 43.237.76.0/22 -add china_ip_route 43.237.80.0/22 -add china_ip_route 43.237.84.0/22 -add china_ip_route 43.237.88.0/22 -add china_ip_route 43.237.92.0/22 -add china_ip_route 43.237.96.0/22 -add china_ip_route 43.237.100.0/22 -add china_ip_route 43.237.104.0/22 -add china_ip_route 43.237.108.0/22 -add china_ip_route 43.237.112.0/22 -add china_ip_route 43.237.116.0/22 -add china_ip_route 43.237.120.0/22 -add china_ip_route 43.237.124.0/22 -add china_ip_route 43.237.128.0/22 -add china_ip_route 43.237.132.0/22 -add china_ip_route 43.237.136.0/22 -add china_ip_route 43.237.140.0/22 -add china_ip_route 43.237.144.0/22 -add china_ip_route 43.237.148.0/22 -add china_ip_route 43.237.152.0/22 -add china_ip_route 43.237.156.0/22 -add china_ip_route 43.237.160.0/22 -add china_ip_route 43.237.164.0/22 -add china_ip_route 43.237.168.0/22 -add china_ip_route 43.237.172.0/22 -add china_ip_route 43.237.176.0/22 -add china_ip_route 43.237.180.0/22 -add china_ip_route 43.237.184.0/22 -add china_ip_route 43.237.188.0/22 -add china_ip_route 43.237.192.0/22 -add china_ip_route 43.237.200.0/22 -add china_ip_route 43.237.204.0/22 -add china_ip_route 43.237.208.0/22 -add china_ip_route 43.237.212.0/22 -add china_ip_route 43.237.216.0/22 -add china_ip_route 43.237.220.0/22 -add china_ip_route 43.237.224.0/22 -add china_ip_route 43.237.228.0/22 -add china_ip_route 43.237.232.0/22 -add china_ip_route 43.237.236.0/22 -add china_ip_route 43.237.240.0/22 -add china_ip_route 43.237.244.0/22 -add china_ip_route 43.237.248.0/22 -add china_ip_route 43.237.252.0/22 -add china_ip_route 43.238.0.0/22 -add china_ip_route 43.238.4.0/22 -add china_ip_route 43.238.8.0/22 -add china_ip_route 43.238.12.0/22 -add china_ip_route 43.238.16.0/22 -add china_ip_route 43.238.20.0/22 -add china_ip_route 43.238.24.0/22 -add china_ip_route 43.238.28.0/22 -add china_ip_route 43.238.32.0/22 -add china_ip_route 43.238.36.0/22 -add china_ip_route 43.238.40.0/22 -add china_ip_route 43.238.44.0/22 -add china_ip_route 43.238.48.0/22 -add china_ip_route 43.238.52.0/22 -add china_ip_route 43.238.56.0/22 -add china_ip_route 43.238.60.0/22 -add china_ip_route 43.238.64.0/22 -add china_ip_route 43.238.68.0/22 -add china_ip_route 43.238.72.0/22 -add china_ip_route 43.238.76.0/22 -add china_ip_route 43.238.80.0/22 -add china_ip_route 43.238.84.0/22 -add china_ip_route 43.238.88.0/22 -add china_ip_route 43.238.92.0/22 -add china_ip_route 43.238.96.0/22 -add china_ip_route 43.238.100.0/22 -add china_ip_route 43.238.104.0/22 -add china_ip_route 43.238.108.0/22 -add china_ip_route 43.238.112.0/22 -add china_ip_route 43.238.116.0/22 -add china_ip_route 43.238.120.0/22 -add china_ip_route 43.238.124.0/22 -add china_ip_route 43.238.128.0/22 -add china_ip_route 43.238.132.0/22 -add china_ip_route 43.238.136.0/22 -add china_ip_route 43.238.140.0/22 -add china_ip_route 43.238.144.0/22 -add china_ip_route 43.238.148.0/22 -add china_ip_route 43.238.152.0/22 -add china_ip_route 43.238.156.0/22 -add china_ip_route 43.238.160.0/22 -add china_ip_route 43.238.164.0/22 -add china_ip_route 43.238.168.0/22 -add china_ip_route 43.238.172.0/22 -add china_ip_route 43.238.176.0/22 -add china_ip_route 43.238.180.0/22 -add china_ip_route 43.238.184.0/22 -add china_ip_route 43.238.188.0/22 -add china_ip_route 43.238.192.0/22 -add china_ip_route 43.238.196.0/22 -add china_ip_route 43.238.200.0/22 -add china_ip_route 43.238.204.0/22 -add china_ip_route 43.238.208.0/22 -add china_ip_route 43.238.212.0/22 -add china_ip_route 43.238.216.0/22 -add china_ip_route 43.238.220.0/22 -add china_ip_route 43.238.224.0/22 -add china_ip_route 43.238.228.0/22 -add china_ip_route 43.238.232.0/22 -add china_ip_route 43.238.236.0/22 -add china_ip_route 43.238.240.0/22 -add china_ip_route 43.238.244.0/22 -add china_ip_route 43.238.248.0/22 -add china_ip_route 43.238.252.0/22 -add china_ip_route 43.239.0.0/22 -add china_ip_route 43.239.4.0/22 -add china_ip_route 43.239.8.0/21 -add china_ip_route 43.239.16.0/22 -add china_ip_route 43.239.20.0/22 -add china_ip_route 43.239.24.0/22 -add china_ip_route 43.239.28.0/22 -add china_ip_route 43.239.32.0/22 -add china_ip_route 43.239.36.0/22 -add china_ip_route 43.239.40.0/22 -add china_ip_route 43.239.44.0/22 -add china_ip_route 43.239.48.0/22 -add china_ip_route 43.239.116.0/22 -add china_ip_route 43.239.120.0/22 -add china_ip_route 43.239.172.0/22 -add china_ip_route 43.239.176.0/22 -add china_ip_route 43.240.0.0/22 -add china_ip_route 43.240.56.0/22 -add china_ip_route 43.240.60.0/22 -add china_ip_route 43.240.68.0/22 -add china_ip_route 43.240.72.0/22 -add china_ip_route 43.240.76.0/22 -add china_ip_route 43.240.84.0/22 -add china_ip_route 43.240.124.0/22 -add china_ip_route 43.240.128.0/22 -add china_ip_route 43.240.132.0/22 -add china_ip_route 43.240.136.0/22 -add china_ip_route 43.240.144.0/22 -add china_ip_route 43.240.156.0/22 -add china_ip_route 43.240.160.0/22 -add china_ip_route 43.240.164.0/22 -add china_ip_route 43.240.168.0/22 -add china_ip_route 43.240.172.0/22 -add china_ip_route 43.240.176.0/22 -add china_ip_route 43.240.180.0/22 -add china_ip_route 43.240.184.0/22 -add china_ip_route 43.240.188.0/22 -add china_ip_route 43.240.192.0/22 -add china_ip_route 43.240.196.0/22 -add china_ip_route 43.240.200.0/22 -add china_ip_route 43.240.204.0/22 -add china_ip_route 43.240.208.0/22 -add china_ip_route 43.240.212.0/22 -add china_ip_route 43.240.216.0/22 -add china_ip_route 43.240.220.0/22 -add china_ip_route 43.240.240.0/22 -add china_ip_route 43.240.244.0/22 -add china_ip_route 43.240.248.0/22 -add china_ip_route 43.240.252.0/22 -add china_ip_route 43.241.0.0/22 -add china_ip_route 43.241.4.0/22 -add china_ip_route 43.241.8.0/22 -add china_ip_route 43.241.12.0/22 -add china_ip_route 43.241.16.0/22 -add china_ip_route 43.241.20.0/22 -add china_ip_route 43.241.48.0/22 -add china_ip_route 43.241.76.0/22 -add china_ip_route 43.241.80.0/22 -add china_ip_route 43.241.84.0/22 -add china_ip_route 43.241.88.0/22 -add china_ip_route 43.241.92.0/22 -add china_ip_route 43.241.112.0/22 -add china_ip_route 43.241.168.0/22 -add china_ip_route 43.241.172.0/22 -add china_ip_route 43.241.176.0/22 -add china_ip_route 43.241.180.0/22 -add china_ip_route 43.241.184.0/22 -add china_ip_route 43.241.208.0/22 -add china_ip_route 43.241.212.0/22 -add china_ip_route 43.241.216.0/22 -add china_ip_route 43.241.220.0/22 -add china_ip_route 43.241.224.0/22 -add china_ip_route 43.241.228.0/22 -add china_ip_route 43.241.232.0/22 -add china_ip_route 43.241.236.0/22 -add china_ip_route 43.241.240.0/22 -add china_ip_route 43.241.248.0/22 -add china_ip_route 43.241.252.0/22 -add china_ip_route 43.242.8.0/22 -add china_ip_route 43.242.12.0/22 -add china_ip_route 43.242.16.0/22 -add china_ip_route 43.242.20.0/22 -add china_ip_route 43.242.24.0/22 -add china_ip_route 43.242.28.0/22 -add china_ip_route 43.242.44.0/22 -add china_ip_route 43.242.48.0/22 -add china_ip_route 43.242.52.0/22 -add china_ip_route 43.242.56.0/22 -add china_ip_route 43.242.60.0/22 -add china_ip_route 43.242.64.0/22 -add china_ip_route 43.242.72.0/22 -add china_ip_route 43.242.76.0/22 -add china_ip_route 43.242.80.0/22 -add china_ip_route 43.242.84.0/22 -add china_ip_route 43.242.88.0/22 -add china_ip_route 43.242.92.0/22 -add china_ip_route 43.242.96.0/22 -add china_ip_route 43.242.144.0/22 -add china_ip_route 43.242.148.0/22 -add china_ip_route 43.242.152.0/22 -add china_ip_route 43.242.156.0/22 -add china_ip_route 43.242.160.0/22 -add china_ip_route 43.242.164.0/22 -add china_ip_route 43.242.168.0/22 -add china_ip_route 43.242.180.0/22 -add china_ip_route 43.242.188.0/22 -add china_ip_route 43.242.192.0/22 -add china_ip_route 43.242.196.0/22 -add china_ip_route 43.242.204.0/22 -add china_ip_route 43.242.216.0/22 -add china_ip_route 43.242.220.0/22 -add china_ip_route 43.242.252.0/22 -add china_ip_route 43.243.4.0/22 -add china_ip_route 43.243.8.0/22 -add china_ip_route 43.243.12.0/22 -add china_ip_route 43.243.16.0/22 -add china_ip_route 43.243.24.0/22 -add china_ip_route 43.243.88.0/22 -add china_ip_route 43.243.128.0/22 -add china_ip_route 43.243.136.0/22 -add china_ip_route 43.243.144.0/22 -add china_ip_route 43.243.148.0/22 -add china_ip_route 43.243.156.0/22 -add china_ip_route 43.243.180.0/22 -add china_ip_route 43.243.228.0/22 -add china_ip_route 43.243.232.0/22 -add china_ip_route 43.243.244.0/22 -add china_ip_route 43.246.0.0/22 -add china_ip_route 43.246.4.0/22 -add china_ip_route 43.246.8.0/22 -add china_ip_route 43.246.12.0/22 -add china_ip_route 43.246.16.0/22 -add china_ip_route 43.246.20.0/22 -add china_ip_route 43.246.24.0/22 -add china_ip_route 43.246.28.0/22 -add china_ip_route 43.246.32.0/22 -add china_ip_route 43.246.36.0/22 -add china_ip_route 43.246.40.0/22 -add china_ip_route 43.246.44.0/22 -add china_ip_route 43.246.48.0/22 -add china_ip_route 43.246.52.0/22 -add china_ip_route 43.246.56.0/22 -add china_ip_route 43.246.60.0/22 -add china_ip_route 43.246.64.0/22 -add china_ip_route 43.246.68.0/22 -add china_ip_route 43.246.72.0/22 -add china_ip_route 43.246.76.0/22 -add china_ip_route 43.246.80.0/22 -add china_ip_route 43.246.84.0/22 -add china_ip_route 43.246.88.0/22 -add china_ip_route 43.246.92.0/22 -add china_ip_route 43.246.96.0/22 -add china_ip_route 43.246.112.0/22 -add china_ip_route 43.246.212.0/22 -add china_ip_route 43.246.228.0/22 -add china_ip_route 43.247.4.0/22 -add china_ip_route 43.247.8.0/22 -add china_ip_route 43.247.44.0/22 -add china_ip_route 43.247.48.0/22 -add china_ip_route 43.247.68.0/22 -add china_ip_route 43.247.76.0/22 -add china_ip_route 43.247.84.0/22 -add china_ip_route 43.247.88.0/22 -add china_ip_route 43.247.92.0/22 -add china_ip_route 43.247.96.0/22 -add china_ip_route 43.247.100.0/22 -add china_ip_route 43.247.108.0/22 -add china_ip_route 43.247.112.0/22 -add china_ip_route 43.247.148.0/22 -add china_ip_route 43.247.152.0/22 -add china_ip_route 43.247.176.0/22 -add china_ip_route 43.247.180.0/22 -add china_ip_route 43.247.184.0/22 -add china_ip_route 43.247.188.0/22 -add china_ip_route 43.247.196.0/22 -add china_ip_route 43.247.200.0/22 -add china_ip_route 43.247.204.0/22 -add china_ip_route 43.247.208.0/22 -add china_ip_route 43.247.212.0/22 -add china_ip_route 43.247.216.0/22 -add china_ip_route 43.247.220.0/22 -add china_ip_route 43.247.224.0/22 -add china_ip_route 43.247.228.0/22 -add china_ip_route 43.247.232.0/22 -add china_ip_route 43.247.236.0/22 -add china_ip_route 43.247.240.0/22 -add china_ip_route 43.247.244.0/22 -add china_ip_route 43.247.248.0/22 -add china_ip_route 43.247.252.0/22 -add china_ip_route 43.248.0.0/22 -add china_ip_route 43.248.4.0/22 -add china_ip_route 43.248.20.0/22 -add china_ip_route 43.248.28.0/22 -add china_ip_route 43.248.48.0/22 -add china_ip_route 43.248.76.0/22 -add china_ip_route 43.248.80.0/22 -add china_ip_route 43.248.84.0/22 -add china_ip_route 43.248.88.0/22 -add china_ip_route 43.248.92.0/22 -add china_ip_route 43.248.96.0/22 -add china_ip_route 43.248.100.0/22 -add china_ip_route 43.248.104.0/22 -add china_ip_route 43.248.108.0/22 -add china_ip_route 43.248.112.0/22 -add china_ip_route 43.248.116.0/22 -add china_ip_route 43.248.120.0/22 -add china_ip_route 43.248.124.0/22 -add china_ip_route 43.248.128.0/22 -add china_ip_route 43.248.132.0/22 -add china_ip_route 43.248.136.0/22 -add china_ip_route 43.248.140.0/22 -add china_ip_route 43.248.144.0/22 -add china_ip_route 43.248.148.0/22 -add china_ip_route 43.248.176.0/22 -add china_ip_route 43.248.180.0/22 -add china_ip_route 43.248.184.0/22 -add china_ip_route 43.248.188.0/22 -add china_ip_route 43.248.192.0/22 -add china_ip_route 43.248.196.0/22 -add china_ip_route 43.248.200.0/22 -add china_ip_route 43.248.204.0/22 -add china_ip_route 43.248.208.0/22 -add china_ip_route 43.248.228.0/22 -add china_ip_route 43.248.232.0/22 -add china_ip_route 43.248.244.0/22 -add china_ip_route 43.249.4.0/22 -add china_ip_route 43.249.8.0/22 -add china_ip_route 43.249.120.0/22 -add china_ip_route 43.249.132.0/22 -add china_ip_route 43.249.136.0/22 -add china_ip_route 43.249.144.0/22 -add china_ip_route 43.249.148.0/22 -add china_ip_route 43.249.152.0/22 -add china_ip_route 43.249.156.0/22 -add china_ip_route 43.249.160.0/22 -add china_ip_route 43.249.164.0/22 -add china_ip_route 43.249.168.0/22 -add china_ip_route 43.249.192.0/22 -add china_ip_route 43.249.236.0/22 -add china_ip_route 43.250.4.0/22 -add china_ip_route 43.250.12.0/22 -add china_ip_route 43.250.16.0/22 -add china_ip_route 43.250.20.0/22 -add china_ip_route 43.250.28.0/22 -add china_ip_route 43.250.32.0/22 -add china_ip_route 43.250.36.0/22 -add china_ip_route 43.250.72.0/22 -add china_ip_route 43.250.96.0/22 -add china_ip_route 43.250.100.0/22 -add china_ip_route 43.250.104.0/22 -add china_ip_route 43.250.108.0/22 -add china_ip_route 43.250.112.0/22 -add china_ip_route 43.250.116.0/22 -add china_ip_route 43.250.128.0/22 -add china_ip_route 43.250.144.0/22 -add china_ip_route 43.250.148.0/22 -add china_ip_route 43.250.160.0/22 -add china_ip_route 43.250.168.0/22 -add china_ip_route 43.250.172.0/22 -add china_ip_route 43.250.176.0/22 -add china_ip_route 43.250.200.0/22 -add china_ip_route 43.250.212.0/22 -add china_ip_route 43.250.216.0/22 -add china_ip_route 43.250.220.0/22 -add china_ip_route 43.250.236.0/22 -add china_ip_route 43.250.244.0/22 -add china_ip_route 43.251.4.0/22 -add china_ip_route 43.251.8.0/22 -add china_ip_route 43.251.36.0/22 -add china_ip_route 43.251.100.0/22 -add china_ip_route 43.251.116.0/22 -add china_ip_route 43.251.192.0/22 -add china_ip_route 43.251.232.0/22 -add china_ip_route 43.251.236.0/22 -add china_ip_route 43.251.244.0/22 -add china_ip_route 43.252.48.0/22 -add china_ip_route 43.252.56.0/22 -add china_ip_route 43.252.224.0/22 -add china_ip_route 43.254.0.0/22 -add china_ip_route 43.254.4.0/22 -add china_ip_route 43.254.8.0/22 -add china_ip_route 43.254.24.0/22 -add china_ip_route 43.254.36.0/22 -add china_ip_route 43.254.44.0/22 -add china_ip_route 43.254.52.0/22 -add china_ip_route 43.254.64.0/22 -add china_ip_route 43.254.72.0/22 -add china_ip_route 43.254.84.0/22 -add china_ip_route 43.254.88.0/22 -add china_ip_route 43.254.92.0/22 -add china_ip_route 43.254.100.0/22 -add china_ip_route 43.254.104.0/22 -add china_ip_route 43.254.112.0/22 -add china_ip_route 43.254.116.0/22 -add china_ip_route 43.254.128.0/22 -add china_ip_route 43.254.136.0/22 -add china_ip_route 43.254.140.0/22 -add china_ip_route 43.254.144.0/22 -add china_ip_route 43.254.148.0/22 -add china_ip_route 43.254.152.0/22 -add china_ip_route 43.254.156.0/22 -add china_ip_route 43.254.168.0/22 -add china_ip_route 43.254.172.0/22 -add china_ip_route 43.254.180.0/22 -add china_ip_route 43.254.184.0/22 -add china_ip_route 43.254.188.0/22 -add china_ip_route 43.254.192.0/22 -add china_ip_route 43.254.196.0/22 -add china_ip_route 43.254.200.0/22 -add china_ip_route 43.254.208.0/22 -add china_ip_route 43.254.220.0/22 -add china_ip_route 43.254.224.0/22 -add china_ip_route 43.254.228.0/22 -add china_ip_route 43.254.232.0/22 -add china_ip_route 43.254.236.0/22 -add china_ip_route 43.254.240.0/22 -add china_ip_route 43.254.248.0/22 -add china_ip_route 43.254.252.0/22 -add china_ip_route 43.255.0.0/22 -add china_ip_route 43.255.4.0/22 -add china_ip_route 43.255.8.0/22 -add china_ip_route 43.255.16.0/22 -add china_ip_route 43.255.48.0/22 -add china_ip_route 43.255.64.0/22 -add china_ip_route 43.255.68.0/22 -add china_ip_route 43.255.72.0/22 -add china_ip_route 43.255.76.0/22 -add china_ip_route 43.255.84.0/22 -add china_ip_route 43.255.96.0/22 -add china_ip_route 43.255.108.0/22 -add china_ip_route 43.255.144.0/22 -add china_ip_route 43.255.168.0/22 -add china_ip_route 43.255.176.0/22 -add china_ip_route 43.255.184.0/22 -add china_ip_route 43.255.192.0/22 -add china_ip_route 43.255.200.0/22 -add china_ip_route 43.255.204.0/22 -add china_ip_route 43.255.208.0/22 -add china_ip_route 43.255.212.0/22 -add china_ip_route 43.255.224.0/22 -add china_ip_route 43.255.228.0/22 -add china_ip_route 43.255.232.0/22 -add china_ip_route 43.255.244.0/22 -add china_ip_route 45.40.192.0/18 -add china_ip_route 45.65.16.0/22 -add china_ip_route 45.65.20.0/22 -add china_ip_route 45.65.24.0/22 -add china_ip_route 45.65.28.0/22 -add china_ip_route 45.112.132.0/22 -add china_ip_route 45.112.188.0/22 -add china_ip_route 45.112.208.0/22 -add china_ip_route 45.112.212.0/22 -add china_ip_route 45.112.216.0/22 -add china_ip_route 45.112.220.0/22 -add china_ip_route 45.112.228.0/22 -add china_ip_route 45.112.232.0/22 -add china_ip_route 45.112.236.0/22 -add china_ip_route 45.113.12.0/22 -add china_ip_route 45.113.16.0/22 -add china_ip_route 45.113.20.0/22 -add china_ip_route 45.113.24.0/22 -add china_ip_route 45.113.28.0/22 -add china_ip_route 45.113.40.0/22 -add china_ip_route 45.113.52.0/22 -add china_ip_route 45.113.56.0/22 -add china_ip_route 45.113.72.0/22 -add china_ip_route 45.113.144.0/22 -add china_ip_route 45.113.148.0/22 -add china_ip_route 45.113.168.0/22 -add china_ip_route 45.113.176.0/22 -add china_ip_route 45.113.184.0/22 -add china_ip_route 45.113.200.0/22 -add china_ip_route 45.113.204.0/22 -add china_ip_route 45.113.208.0/22 -add china_ip_route 45.113.212.0/22 -add china_ip_route 45.113.216.0/22 -add china_ip_route 45.113.220.0/22 -add china_ip_route 45.113.240.0/22 -add china_ip_route 45.113.252.0/22 -add china_ip_route 45.114.0.0/22 -add china_ip_route 45.114.12.0/22 -add china_ip_route 45.114.32.0/22 -add china_ip_route 45.114.40.0/22 -add china_ip_route 45.114.52.0/22 -add china_ip_route 45.114.96.0/22 -add china_ip_route 45.114.124.0/22 -add china_ip_route 45.114.136.0/22 -add china_ip_route 45.114.196.0/22 -add china_ip_route 45.114.200.0/22 -add china_ip_route 45.114.228.0/22 -add china_ip_route 45.114.252.0/22 -add china_ip_route 45.115.44.0/22 -add china_ip_route 45.115.100.0/22 -add china_ip_route 45.115.120.0/22 -add china_ip_route 45.115.132.0/22 -add china_ip_route 45.115.144.0/22 -add china_ip_route 45.115.156.0/22 -add china_ip_route 45.115.164.0/22 -add china_ip_route 45.115.200.0/22 -add china_ip_route 45.115.212.0/22 -add china_ip_route 45.115.228.0/22 -add china_ip_route 45.115.236.0/22 -add china_ip_route 45.115.244.0/22 -add china_ip_route 45.115.248.0/22 -add china_ip_route 45.116.16.0/22 -add china_ip_route 45.116.24.0/22 -add china_ip_route 45.116.32.0/22 -add china_ip_route 45.116.36.0/22 -add china_ip_route 45.116.52.0/22 -add china_ip_route 45.116.96.0/22 -add china_ip_route 45.116.100.0/22 -add china_ip_route 45.116.140.0/22 -add china_ip_route 45.116.152.0/22 -add china_ip_route 45.116.208.0/22 -add china_ip_route 45.117.8.0/22 -add china_ip_route 45.117.20.0/22 -add china_ip_route 45.117.68.0/22 -add china_ip_route 45.117.124.0/22 -add china_ip_route 45.117.252.0/22 -add china_ip_route 45.119.52.0/22 -add china_ip_route 45.119.60.0/22 -add china_ip_route 45.119.64.0/22 -add china_ip_route 45.119.68.0/22 -add china_ip_route 45.119.72.0/22 -add china_ip_route 45.119.104.0/22 -add china_ip_route 45.119.116.0/22 -add china_ip_route 45.119.232.0/22 -add china_ip_route 45.120.100.0/22 -add china_ip_route 45.120.140.0/22 -add china_ip_route 45.120.164.0/22 -add china_ip_route 45.120.240.0/22 -add china_ip_route 45.121.52.0/22 -add china_ip_route 45.121.64.0/22 -add china_ip_route 45.121.68.0/22 -add china_ip_route 45.121.72.0/22 -add china_ip_route 45.121.92.0/22 -add china_ip_route 45.121.96.0/22 -add china_ip_route 45.121.172.0/22 -add china_ip_route 45.121.176.0/22 -add china_ip_route 45.121.212.0/22 -add china_ip_route 45.121.240.0/22 -add china_ip_route 45.121.244.0/22 -add china_ip_route 45.121.248.0/22 -add china_ip_route 45.121.252.0/22 -add china_ip_route 45.122.0.0/22 -add china_ip_route 45.122.4.0/22 -add china_ip_route 45.122.8.0/22 -add china_ip_route 45.122.12.0/22 -add china_ip_route 45.122.16.0/22 -add china_ip_route 45.122.20.0/22 -add china_ip_route 45.122.24.0/22 -add china_ip_route 45.122.28.0/22 -add china_ip_route 45.122.32.0/22 -add china_ip_route 45.122.36.0/22 -add china_ip_route 45.122.40.0/22 -add china_ip_route 45.122.60.0/22 -add china_ip_route 45.122.64.0/22 -add china_ip_route 45.122.68.0/22 -add china_ip_route 45.122.72.0/22 -add china_ip_route 45.122.76.0/22 -add china_ip_route 45.122.80.0/22 -add china_ip_route 45.122.84.0/22 -add china_ip_route 45.122.88.0/22 -add china_ip_route 45.122.92.0/22 -add china_ip_route 45.122.96.0/21 -add china_ip_route 45.122.104.0/22 -add china_ip_route 45.122.108.0/22 -add china_ip_route 45.122.112.0/22 -add china_ip_route 45.122.116.0/22 -add china_ip_route 45.122.160.0/22 -add china_ip_route 45.122.164.0/22 -add china_ip_route 45.122.168.0/22 -add china_ip_route 45.122.172.0/22 -add china_ip_route 45.122.176.0/22 -add china_ip_route 45.122.180.0/22 -add china_ip_route 45.122.184.0/22 -add china_ip_route 45.122.188.0/22 -add china_ip_route 45.122.192.0/22 -add china_ip_route 45.122.196.0/22 -add china_ip_route 45.122.200.0/22 -add china_ip_route 45.122.204.0/22 -add china_ip_route 45.122.208.0/22 -add china_ip_route 45.122.212.0/22 -add china_ip_route 45.122.216.0/22 -add china_ip_route 45.123.28.0/22 -add china_ip_route 45.123.32.0/22 -add china_ip_route 45.123.36.0/22 -add china_ip_route 45.123.44.0/22 -add china_ip_route 45.123.48.0/22 -add china_ip_route 45.123.52.0/22 -add china_ip_route 45.123.56.0/22 -add china_ip_route 45.123.60.0/22 -add china_ip_route 45.123.64.0/22 -add china_ip_route 45.123.68.0/22 -add china_ip_route 45.123.72.0/22 -add china_ip_route 45.123.76.0/22 -add china_ip_route 45.123.80.0/22 -add china_ip_route 45.123.84.0/22 -add china_ip_route 45.123.88.0/22 -add china_ip_route 45.123.120.0/22 -add china_ip_route 45.123.128.0/22 -add china_ip_route 45.123.132.0/22 -add china_ip_route 45.123.136.0/22 -add china_ip_route 45.123.148.0/22 -add china_ip_route 45.123.152.0/22 -add china_ip_route 45.123.156.0/22 -add china_ip_route 45.123.164.0/22 -add china_ip_route 45.123.168.0/22 -add china_ip_route 45.123.172.0/22 -add china_ip_route 45.123.176.0/22 -add china_ip_route 45.123.180.0/22 -add china_ip_route 45.123.184.0/22 -add china_ip_route 45.123.204.0/22 -add china_ip_route 45.123.212.0/22 -add china_ip_route 45.123.224.0/22 -add china_ip_route 45.123.228.0/22 -add china_ip_route 45.123.232.0/22 -add china_ip_route 45.123.236.0/22 -add china_ip_route 45.123.240.0/22 -add china_ip_route 45.123.244.0/22 -add china_ip_route 45.123.248.0/22 -add china_ip_route 45.123.252.0/22 -add china_ip_route 45.124.0.0/22 -add china_ip_route 45.124.20.0/22 -add china_ip_route 45.124.28.0/22 -add china_ip_route 45.124.32.0/22 -add china_ip_route 45.124.36.0/22 -add china_ip_route 45.124.44.0/22 -add china_ip_route 45.124.68.0/22 -add china_ip_route 45.124.76.0/22 -add china_ip_route 45.124.80.0/22 -add china_ip_route 45.124.100.0/22 -add china_ip_route 45.124.124.0/22 -add china_ip_route 45.124.172.0/22 -add china_ip_route 45.124.176.0/22 -add china_ip_route 45.124.208.0/22 -add china_ip_route 45.124.248.0/22 -add china_ip_route 45.125.12.0/22 -add china_ip_route 45.125.16.0/22 -add china_ip_route 45.125.24.0/22 -add china_ip_route 45.125.44.0/22 -add china_ip_route 45.125.52.0/22 -add china_ip_route 45.125.56.0/22 -add china_ip_route 45.125.76.0/22 -add china_ip_route 45.125.80.0/22 -add china_ip_route 45.125.84.0/22 -add china_ip_route 45.125.88.0/22 -add china_ip_route 45.125.92.0/22 -add china_ip_route 45.125.96.0/22 -add china_ip_route 45.125.100.0/22 -add china_ip_route 45.125.104.0/22 -add china_ip_route 45.125.136.0/22 -add china_ip_route 45.126.48.0/22 -add china_ip_route 45.126.52.0/22 -add china_ip_route 45.126.100.0/22 -add china_ip_route 45.126.108.0/22 -add china_ip_route 45.126.112.0/22 -add china_ip_route 45.126.116.0/22 -add china_ip_route 45.126.120.0/22 -add china_ip_route 45.126.212.0/22 -add china_ip_route 45.126.220.0/22 -add china_ip_route 45.127.8.0/22 -add china_ip_route 45.127.12.0/22 -add china_ip_route 45.127.96.0/22 -add china_ip_route 45.127.128.0/22 -add china_ip_route 45.127.144.0/22 -add china_ip_route 45.127.148.0/22 -add china_ip_route 45.127.156.0/22 -add china_ip_route 45.127.216.0/22 -add china_ip_route 45.248.8.0/22 -add china_ip_route 45.248.80.0/22 -add china_ip_route 45.248.84.0/22 -add china_ip_route 45.248.88.0/22 -add china_ip_route 45.248.96.0/22 -add china_ip_route 45.248.100.0/22 -add china_ip_route 45.248.104.0/22 -add china_ip_route 45.248.108.0/22 -add china_ip_route 45.248.128.0/22 -add china_ip_route 45.248.132.0/22 -add china_ip_route 45.248.204.0/22 -add china_ip_route 45.248.208.0/22 -add china_ip_route 45.248.212.0/22 -add china_ip_route 45.248.216.0/22 -add china_ip_route 45.248.220.0/22 -add china_ip_route 45.248.224.0/22 -add china_ip_route 45.248.228.0/22 -add china_ip_route 45.248.232.0/22 -add china_ip_route 45.248.236.0/22 -add china_ip_route 45.248.240.0/22 -add china_ip_route 45.248.244.0/22 -add china_ip_route 45.248.248.0/22 -add china_ip_route 45.248.252.0/22 -add china_ip_route 45.249.0.0/22 -add china_ip_route 45.249.4.0/22 -add china_ip_route 45.249.12.0/22 -add china_ip_route 45.249.16.0/22 -add china_ip_route 45.249.20.0/22 -add china_ip_route 45.249.24.0/22 -add china_ip_route 45.249.28.0/22 -add china_ip_route 45.249.32.0/22 -add china_ip_route 45.249.36.0/22 -add china_ip_route 45.249.112.0/22 -add china_ip_route 45.249.188.0/22 -add china_ip_route 45.249.192.0/22 -add china_ip_route 45.249.196.0/22 -add china_ip_route 45.249.200.0/22 -add china_ip_route 45.249.204.0/22 -add china_ip_route 45.249.208.0/22 -add china_ip_route 45.249.212.0/22 -add china_ip_route 45.250.12.0/22 -add china_ip_route 45.250.16.0/22 -add china_ip_route 45.250.28.0/22 -add china_ip_route 45.250.32.0/22 -add china_ip_route 45.250.36.0/22 -add china_ip_route 45.250.40.0/22 -add china_ip_route 45.250.76.0/22 -add china_ip_route 45.250.80.0/22 -add china_ip_route 45.250.84.0/22 -add china_ip_route 45.250.88.0/22 -add china_ip_route 45.250.92.0/22 -add china_ip_route 45.250.96.0/22 -add china_ip_route 45.250.104.0/22 -add china_ip_route 45.250.108.0/22 -add china_ip_route 45.250.112.0/22 -add china_ip_route 45.250.116.0/22 -add china_ip_route 45.250.120.0/22 -add china_ip_route 45.250.124.0/22 -add china_ip_route 45.250.128.0/22 -add china_ip_route 45.250.132.0/22 -add china_ip_route 45.250.136.0/22 -add china_ip_route 45.250.140.0/22 -add china_ip_route 45.250.144.0/22 -add china_ip_route 45.250.148.0/22 -add china_ip_route 45.250.152.0/22 -add china_ip_route 45.250.164.0/22 -add china_ip_route 45.250.180.0/22 -add china_ip_route 45.250.184.0/22 -add china_ip_route 45.250.188.0/22 -add china_ip_route 45.250.192.0/22 -add china_ip_route 45.251.0.0/22 -add china_ip_route 45.251.8.0/22 -add china_ip_route 45.251.16.0/22 -add china_ip_route 45.251.20.0/22 -add china_ip_route 45.251.52.0/22 -add china_ip_route 45.251.84.0/22 -add china_ip_route 45.251.88.0/22 -add china_ip_route 45.251.92.0/22 -add china_ip_route 45.251.96.0/22 -add china_ip_route 45.251.100.0/22 -add china_ip_route 45.251.120.0/22 -add china_ip_route 45.251.124.0/22 -add china_ip_route 45.251.136.0/22 -add china_ip_route 45.251.140.0/22 -add china_ip_route 45.251.144.0/22 -add china_ip_route 45.251.148.0/22 -add china_ip_route 45.251.152.0/22 -add china_ip_route 45.251.156.0/22 -add china_ip_route 45.251.160.0/22 -add china_ip_route 45.251.164.0/22 -add china_ip_route 45.251.168.0/22 -add china_ip_route 45.251.172.0/22 -add china_ip_route 45.251.176.0/22 -add china_ip_route 45.251.180.0/22 -add china_ip_route 45.251.184.0/22 -add china_ip_route 45.251.188.0/22 -add china_ip_route 45.251.192.0/22 -add china_ip_route 45.251.196.0/22 -add china_ip_route 45.251.200.0/22 -add china_ip_route 45.251.204.0/22 -add china_ip_route 45.251.208.0/22 -add china_ip_route 45.251.212.0/22 -add china_ip_route 45.251.216.0/22 -add china_ip_route 45.251.220.0/22 -add china_ip_route 45.251.224.0/22 -add china_ip_route 45.251.240.0/22 -add china_ip_route 45.252.0.0/22 -add china_ip_route 45.252.4.0/22 -add china_ip_route 45.252.8.0/22 -add china_ip_route 45.252.12.0/22 -add china_ip_route 45.252.16.0/22 -add china_ip_route 45.252.20.0/22 -add china_ip_route 45.252.24.0/22 -add china_ip_route 45.252.28.0/22 -add china_ip_route 45.252.32.0/22 -add china_ip_route 45.252.36.0/22 -add china_ip_route 45.252.40.0/22 -add china_ip_route 45.252.44.0/22 -add china_ip_route 45.252.48.0/22 -add china_ip_route 45.252.60.0/22 -add china_ip_route 45.252.84.0/22 -add china_ip_route 45.252.88.0/22 -add china_ip_route 45.252.92.0/22 -add china_ip_route 45.252.96.0/22 -add china_ip_route 45.252.100.0/22 -add china_ip_route 45.252.104.0/22 -add china_ip_route 45.252.108.0/22 -add china_ip_route 45.252.112.0/22 -add china_ip_route 45.252.116.0/22 -add china_ip_route 45.252.120.0/22 -add china_ip_route 45.252.124.0/22 -add china_ip_route 45.252.128.0/22 -add china_ip_route 45.252.132.0/22 -add china_ip_route 45.252.136.0/22 -add china_ip_route 45.252.140.0/22 -add china_ip_route 45.252.144.0/22 -add china_ip_route 45.252.148.0/22 -add china_ip_route 45.252.152.0/22 -add china_ip_route 45.252.156.0/22 -add china_ip_route 45.252.160.0/22 -add china_ip_route 45.252.164.0/22 -add china_ip_route 45.252.168.0/22 -add china_ip_route 45.252.172.0/22 -add china_ip_route 45.252.176.0/22 -add china_ip_route 45.252.192.0/22 -add china_ip_route 45.252.196.0/22 -add china_ip_route 45.252.200.0/22 -add china_ip_route 45.252.204.0/22 -add china_ip_route 45.252.208.0/22 -add china_ip_route 45.252.212.0/22 -add china_ip_route 45.252.216.0/22 -add china_ip_route 45.252.220.0/22 -add china_ip_route 45.252.224.0/22 -add china_ip_route 45.252.228.0/22 -add china_ip_route 45.252.232.0/22 -add china_ip_route 45.253.0.0/22 -add china_ip_route 45.253.4.0/22 -add china_ip_route 45.253.8.0/22 -add china_ip_route 45.253.12.0/22 -add china_ip_route 45.253.16.0/22 -add china_ip_route 45.253.20.0/22 -add china_ip_route 45.253.24.0/22 -add china_ip_route 45.253.28.0/22 -add china_ip_route 45.253.32.0/22 -add china_ip_route 45.253.36.0/22 -add china_ip_route 45.253.40.0/22 -add china_ip_route 45.253.44.0/22 -add china_ip_route 45.253.48.0/22 -add china_ip_route 45.253.52.0/22 -add china_ip_route 45.253.56.0/22 -add china_ip_route 45.253.60.0/22 -add china_ip_route 45.253.64.0/22 -add china_ip_route 45.253.68.0/22 -add china_ip_route 45.253.72.0/22 -add china_ip_route 45.253.76.0/22 -add china_ip_route 45.253.80.0/22 -add china_ip_route 45.253.84.0/22 -add china_ip_route 45.253.92.0/22 -add china_ip_route 45.253.96.0/22 -add china_ip_route 45.253.100.0/22 -add china_ip_route 45.253.104.0/22 -add china_ip_route 45.253.108.0/22 -add china_ip_route 45.253.112.0/22 -add china_ip_route 45.253.116.0/22 -add china_ip_route 45.253.120.0/22 -add china_ip_route 45.253.132.0/22 -add china_ip_route 45.253.136.0/22 -add china_ip_route 45.253.140.0/22 -add china_ip_route 45.253.144.0/22 -add china_ip_route 45.253.148.0/22 -add china_ip_route 45.253.152.0/22 -add china_ip_route 45.253.156.0/22 -add china_ip_route 45.253.160.0/22 -add china_ip_route 45.253.164.0/22 -add china_ip_route 45.253.168.0/22 -add china_ip_route 45.253.172.0/22 -add china_ip_route 45.253.176.0/22 -add china_ip_route 45.253.180.0/22 -add china_ip_route 45.253.184.0/22 -add china_ip_route 45.253.188.0/22 -add china_ip_route 45.253.192.0/22 -add china_ip_route 45.253.196.0/22 -add china_ip_route 45.253.200.0/22 -add china_ip_route 45.253.204.0/22 -add china_ip_route 45.253.208.0/22 -add china_ip_route 45.253.212.0/22 -add china_ip_route 45.253.216.0/22 -add china_ip_route 45.253.220.0/22 -add china_ip_route 45.253.224.0/22 -add china_ip_route 45.253.228.0/22 -add china_ip_route 45.253.232.0/22 -add china_ip_route 45.253.236.0/22 -add china_ip_route 45.253.240.0/22 -add china_ip_route 45.253.244.0/22 -add china_ip_route 45.254.0.0/22 -add china_ip_route 45.254.4.0/22 -add china_ip_route 45.254.8.0/22 -add china_ip_route 45.254.12.0/22 -add china_ip_route 45.254.16.0/22 -add china_ip_route 45.254.20.0/22 -add china_ip_route 45.254.24.0/22 -add china_ip_route 45.254.28.0/22 -add china_ip_route 45.254.40.0/22 -add china_ip_route 45.254.48.0/22 -add china_ip_route 45.254.52.0/22 -add china_ip_route 45.254.56.0/22 -add china_ip_route 45.254.60.0/22 -add china_ip_route 45.254.64.0/22 -add china_ip_route 45.254.68.0/22 -add china_ip_route 45.254.72.0/22 -add china_ip_route 45.254.76.0/22 -add china_ip_route 45.254.80.0/22 -add china_ip_route 45.254.84.0/22 -add china_ip_route 45.254.88.0/22 -add china_ip_route 45.254.92.0/22 -add china_ip_route 45.254.96.0/22 -add china_ip_route 45.254.100.0/22 -add china_ip_route 45.254.104.0/22 -add china_ip_route 45.254.108.0/22 -add china_ip_route 45.254.112.0/22 -add china_ip_route 45.254.116.0/22 -add china_ip_route 45.254.120.0/22 -add china_ip_route 45.254.124.0/22 -add china_ip_route 45.254.128.0/22 -add china_ip_route 45.254.132.0/22 -add china_ip_route 45.254.136.0/22 -add china_ip_route 45.254.140.0/22 -add china_ip_route 45.254.144.0/22 -add china_ip_route 45.254.148.0/22 -add china_ip_route 45.254.152.0/22 -add china_ip_route 45.254.156.0/22 -add china_ip_route 45.254.160.0/22 -add china_ip_route 45.254.164.0/22 -add china_ip_route 45.254.168.0/22 -add china_ip_route 45.254.172.0/22 -add china_ip_route 45.254.176.0/22 -add china_ip_route 45.254.180.0/22 -add china_ip_route 45.254.184.0/22 -add china_ip_route 45.254.188.0/22 -add china_ip_route 45.254.192.0/22 -add china_ip_route 45.254.196.0/22 -add china_ip_route 45.254.200.0/22 -add china_ip_route 45.254.204.0/22 -add china_ip_route 45.254.208.0/22 -add china_ip_route 45.254.212.0/22 -add china_ip_route 45.254.216.0/22 -add china_ip_route 45.254.220.0/22 -add china_ip_route 45.254.224.0/22 -add china_ip_route 45.254.228.0/22 -add china_ip_route 45.254.236.0/22 -add china_ip_route 45.254.240.0/22 -add china_ip_route 45.254.248.0/22 -add china_ip_route 45.255.0.0/22 -add china_ip_route 45.255.4.0/22 -add china_ip_route 45.255.8.0/22 -add china_ip_route 45.255.12.0/22 -add china_ip_route 45.255.16.0/22 -add china_ip_route 45.255.20.0/22 -add china_ip_route 45.255.24.0/22 -add china_ip_route 45.255.28.0/22 -add china_ip_route 45.255.32.0/22 -add china_ip_route 45.255.36.0/22 -add china_ip_route 45.255.40.0/22 -add china_ip_route 45.255.44.0/22 -add china_ip_route 45.255.48.0/22 -add china_ip_route 45.255.52.0/22 -add china_ip_route 45.255.56.0/22 -add china_ip_route 45.255.60.0/22 -add china_ip_route 45.255.64.0/22 -add china_ip_route 45.255.68.0/22 -add china_ip_route 45.255.72.0/22 -add china_ip_route 45.255.76.0/22 -add china_ip_route 45.255.80.0/22 -add china_ip_route 45.255.84.0/22 -add china_ip_route 45.255.88.0/22 -add china_ip_route 45.255.92.0/22 -add china_ip_route 45.255.96.0/22 -add china_ip_route 45.255.100.0/22 -add china_ip_route 45.255.104.0/22 -add china_ip_route 45.255.108.0/22 -add china_ip_route 45.255.112.0/22 -add china_ip_route 45.255.116.0/22 -add china_ip_route 45.255.120.0/22 -add china_ip_route 45.255.124.0/22 -add china_ip_route 45.255.132.0/22 -add china_ip_route 45.255.136.0/22 -add china_ip_route 45.255.140.0/22 -add china_ip_route 45.255.144.0/22 -add china_ip_route 45.255.148.0/22 -add china_ip_route 45.255.152.0/22 -add china_ip_route 45.255.156.0/22 -add china_ip_route 45.255.160.0/22 -add china_ip_route 45.255.164.0/22 -add china_ip_route 45.255.168.0/22 -add china_ip_route 45.255.172.0/22 -add china_ip_route 45.255.176.0/22 -add china_ip_route 45.255.180.0/22 -add china_ip_route 45.255.184.0/22 -add china_ip_route 45.255.188.0/22 -add china_ip_route 45.255.192.0/22 -add china_ip_route 45.255.196.0/22 -add china_ip_route 45.255.200.0/22 -add china_ip_route 45.255.204.0/22 -add china_ip_route 45.255.208.0/22 -add china_ip_route 45.255.212.0/22 -add china_ip_route 45.255.216.0/22 -add china_ip_route 45.255.220.0/22 -add china_ip_route 45.255.224.0/22 -add china_ip_route 45.255.228.0/22 -add china_ip_route 45.255.232.0/22 -add china_ip_route 45.255.236.0/22 -add china_ip_route 45.255.240.0/22 -add china_ip_route 45.255.244.0/22 -add china_ip_route 45.255.248.0/22 -add china_ip_route 47.92.0.0/14 -add china_ip_route 47.96.0.0/11 -add china_ip_route 49.4.0.0/14 -add china_ip_route 49.51.0.0/16 -add china_ip_route 49.52.0.0/14 -add china_ip_route 49.64.0.0/11 -add china_ip_route 49.112.0.0/13 -add china_ip_route 49.120.0.0/14 -add china_ip_route 49.128.0.0/24 -add china_ip_route 49.128.2.0/23 -add china_ip_route 49.128.4.0/22 -add china_ip_route 49.140.0.0/15 -add china_ip_route 49.152.0.0/14 -add china_ip_route 49.208.0.0/15 -add china_ip_route 49.210.0.0/15 -add china_ip_route 49.220.0.0/14 -add china_ip_route 49.232.0.0/14 -add china_ip_route 49.239.0.0/18 -add china_ip_route 49.239.192.0/18 -add china_ip_route 49.246.224.0/19 -add china_ip_route 52.80.0.0/15 -add china_ip_route 52.82.0.0/15 -add china_ip_route 52.130.0.0/15 -add china_ip_route 54.222.0.0/15 -add china_ip_route 58.14.0.0/15 -add china_ip_route 58.16.0.0/16 -add china_ip_route 58.17.0.0/17 -add china_ip_route 58.17.128.0/17 -add china_ip_route 58.18.0.0/16 -add china_ip_route 58.19.0.0/16 -add china_ip_route 58.20.0.0/16 -add china_ip_route 58.21.0.0/16 -add china_ip_route 58.22.0.0/15 -add china_ip_route 58.24.0.0/15 -add china_ip_route 58.30.0.0/15 -add china_ip_route 58.32.0.0/13 -add china_ip_route 58.40.0.0/15 -add china_ip_route 58.42.0.0/16 -add china_ip_route 58.43.0.0/16 -add china_ip_route 58.44.0.0/14 -add china_ip_route 58.48.0.0/13 -add china_ip_route 58.56.0.0/15 -add china_ip_route 58.58.0.0/16 -add china_ip_route 58.59.0.0/17 -add china_ip_route 58.59.128.0/17 -add china_ip_route 58.60.0.0/14 -add china_ip_route 58.65.232.0/21 -add china_ip_route 58.66.0.0/15 -add china_ip_route 58.68.128.0/17 -add china_ip_route 58.82.0.0/17 -add china_ip_route 58.83.0.0/17 -add china_ip_route 58.83.128.0/17 -add china_ip_route 58.87.64.0/18 -add china_ip_route 58.99.128.0/17 -add china_ip_route 58.100.0.0/15 -add china_ip_route 58.116.0.0/14 -add china_ip_route 58.128.0.0/13 -add china_ip_route 58.144.0.0/16 -add china_ip_route 58.154.0.0/15 -add china_ip_route 58.192.0.0/15 -add china_ip_route 58.194.0.0/15 -add china_ip_route 58.196.0.0/15 -add china_ip_route 58.198.0.0/15 -add china_ip_route 58.200.0.0/13 -add china_ip_route 58.208.0.0/12 -add china_ip_route 58.240.0.0/15 -add china_ip_route 58.242.0.0/15 -add china_ip_route 58.244.0.0/15 -add china_ip_route 58.246.0.0/15 -add china_ip_route 58.248.0.0/13 -add china_ip_route 59.32.0.0/13 -add china_ip_route 59.40.0.0/15 -add china_ip_route 59.42.0.0/16 -add china_ip_route 59.43.0.0/16 -add china_ip_route 59.44.0.0/14 -add china_ip_route 59.48.0.0/16 -add china_ip_route 59.49.0.0/17 -add china_ip_route 59.49.128.0/17 -add china_ip_route 59.50.0.0/16 -add china_ip_route 59.51.0.0/17 -add china_ip_route 59.51.128.0/17 -add china_ip_route 59.52.0.0/14 -add china_ip_route 59.56.0.0/14 -add china_ip_route 59.60.0.0/15 -add china_ip_route 59.62.0.0/15 -add china_ip_route 59.64.0.0/14 -add china_ip_route 59.68.0.0/14 -add china_ip_route 59.72.0.0/15 -add china_ip_route 59.74.0.0/15 -add china_ip_route 59.76.0.0/16 -add china_ip_route 59.77.0.0/16 -add china_ip_route 59.78.0.0/15 -add china_ip_route 59.80.0.0/15 -add china_ip_route 59.82.0.0/15 -add china_ip_route 59.107.0.0/17 -add china_ip_route 59.107.128.0/17 -add china_ip_route 59.108.0.0/15 -add china_ip_route 59.110.0.0/15 -add china_ip_route 59.151.0.0/17 -add china_ip_route 59.152.16.0/22 -add china_ip_route 59.152.20.0/22 -add china_ip_route 59.152.24.0/22 -add china_ip_route 59.152.28.0/22 -add china_ip_route 59.152.32.0/22 -add china_ip_route 59.152.36.0/22 -add china_ip_route 59.152.64.0/22 -add china_ip_route 59.152.68.0/22 -add china_ip_route 59.152.72.0/22 -add china_ip_route 59.152.76.0/22 -add china_ip_route 59.152.112.0/22 -add china_ip_route 59.152.116.0/22 -add china_ip_route 59.153.4.0/22 -add china_ip_route 59.153.32.0/22 -add china_ip_route 59.153.60.0/22 -add china_ip_route 59.153.64.0/22 -add china_ip_route 59.153.68.0/22 -add china_ip_route 59.153.72.0/22 -add china_ip_route 59.153.92.0/22 -add china_ip_route 59.153.116.0/22 -add china_ip_route 59.153.136.0/22 -add china_ip_route 59.153.152.0/22 -add china_ip_route 59.153.164.0/22 -add china_ip_route 59.153.168.0/22 -add china_ip_route 59.153.172.0/22 -add china_ip_route 59.153.176.0/22 -add china_ip_route 59.153.180.0/22 -add china_ip_route 59.153.184.0/22 -add china_ip_route 59.153.188.0/22 -add china_ip_route 59.153.192.0/22 -add china_ip_route 59.155.0.0/16 -add china_ip_route 59.172.0.0/15 -add china_ip_route 59.174.0.0/15 -add china_ip_route 59.191.0.0/17 -add china_ip_route 59.192.0.0/10 -add china_ip_route 60.0.0.0/13 -add china_ip_route 60.8.0.0/15 -add china_ip_route 60.10.0.0/16 -add china_ip_route 60.11.0.0/16 -add china_ip_route 60.12.0.0/16 -add china_ip_route 60.13.0.0/18 -add china_ip_route 60.13.64.0/18 -add china_ip_route 60.13.128.0/17 -add china_ip_route 60.14.0.0/15 -add china_ip_route 60.16.0.0/13 -add china_ip_route 60.24.0.0/14 -add china_ip_route 60.28.0.0/15 -add china_ip_route 60.30.0.0/16 -add china_ip_route 60.31.0.0/16 -add china_ip_route 60.55.0.0/16 -add china_ip_route 60.63.0.0/16 -add china_ip_route 60.160.0.0/15 -add china_ip_route 60.162.0.0/15 -add china_ip_route 60.164.0.0/15 -add china_ip_route 60.166.0.0/15 -add china_ip_route 60.168.0.0/13 -add china_ip_route 60.176.0.0/12 -add china_ip_route 60.194.0.0/15 -add china_ip_route 60.200.0.0/14 -add china_ip_route 60.204.0.0/16 -add china_ip_route 60.205.0.0/16 -add china_ip_route 60.206.0.0/15 -add china_ip_route 60.208.0.0/13 -add china_ip_route 60.216.0.0/15 -add china_ip_route 60.218.0.0/15 -add china_ip_route 60.220.0.0/14 -add china_ip_route 60.232.0.0/15 -add china_ip_route 60.235.0.0/16 -add china_ip_route 60.245.128.0/17 -add china_ip_route 60.247.0.0/16 -add china_ip_route 60.252.0.0/16 -add china_ip_route 60.253.128.0/17 -add china_ip_route 60.255.0.0/16 -add china_ip_route 61.4.80.0/22 -add china_ip_route 61.4.84.0/22 -add china_ip_route 61.4.88.0/21 -add china_ip_route 61.4.176.0/20 -add china_ip_route 61.8.160.0/20 -add china_ip_route 61.14.212.0/22 -add china_ip_route 61.14.216.0/22 -add china_ip_route 61.14.220.0/22 -add china_ip_route 61.14.240.0/22 -add china_ip_route 61.14.244.0/22 -add china_ip_route 61.28.0.0/20 -add china_ip_route 61.28.16.0/20 -add china_ip_route 61.28.32.0/19 -add china_ip_route 61.28.64.0/18 -add china_ip_route 61.29.128.0/18 -add china_ip_route 61.29.192.0/19 -add china_ip_route 61.29.224.0/20 -add china_ip_route 61.29.240.0/21 -add china_ip_route 61.29.248.0/22 -add china_ip_route 61.29.254.0/23 -add china_ip_route 61.45.128.0/18 -add china_ip_route 61.45.224.0/20 -add china_ip_route 61.47.128.0/18 -add china_ip_route 61.48.0.0/14 -add china_ip_route 61.52.0.0/15 -add china_ip_route 61.54.0.0/16 -add china_ip_route 61.55.0.0/16 -add china_ip_route 61.87.192.0/18 -add china_ip_route 61.128.0.0/15 -add china_ip_route 61.130.0.0/15 -add china_ip_route 61.132.0.0/16 -add china_ip_route 61.133.0.0/17 -add china_ip_route 61.133.128.0/17 -add china_ip_route 61.134.0.0/18 -add china_ip_route 61.134.64.0/19 -add china_ip_route 61.134.96.0/19 -add china_ip_route 61.134.128.0/18 -add china_ip_route 61.134.192.0/18 -add china_ip_route 61.135.0.0/16 -add china_ip_route 61.136.0.0/18 -add china_ip_route 61.136.64.0/18 -add china_ip_route 61.136.128.0/17 -add china_ip_route 61.137.0.0/17 -add china_ip_route 61.137.128.0/17 -add china_ip_route 61.138.0.0/18 -add china_ip_route 61.138.64.0/18 -add china_ip_route 61.138.128.0/18 -add china_ip_route 61.138.192.0/18 -add china_ip_route 61.139.0.0/17 -add china_ip_route 61.139.128.0/18 -add china_ip_route 61.139.192.0/18 -add china_ip_route 61.140.0.0/14 -add china_ip_route 61.144.0.0/14 -add china_ip_route 61.148.0.0/15 -add china_ip_route 61.150.0.0/15 -add china_ip_route 61.152.0.0/16 -add china_ip_route 61.153.0.0/16 -add china_ip_route 61.154.0.0/15 -add china_ip_route 61.156.0.0/16 -add china_ip_route 61.157.0.0/16 -add china_ip_route 61.158.0.0/17 -add china_ip_route 61.158.128.0/17 -add china_ip_route 61.159.0.0/18 -add china_ip_route 61.159.64.0/18 -add china_ip_route 61.159.128.0/17 -add china_ip_route 61.160.0.0/16 -add china_ip_route 61.161.0.0/18 -add china_ip_route 61.161.64.0/18 -add china_ip_route 61.161.128.0/17 -add china_ip_route 61.162.0.0/16 -add china_ip_route 61.163.0.0/16 -add china_ip_route 61.164.0.0/16 -add china_ip_route 61.165.0.0/16 -add china_ip_route 61.166.0.0/16 -add china_ip_route 61.167.0.0/16 -add china_ip_route 61.168.0.0/16 -add china_ip_route 61.169.0.0/16 -add china_ip_route 61.170.0.0/15 -add china_ip_route 61.172.0.0/14 -add china_ip_route 61.176.0.0/16 -add china_ip_route 61.177.0.0/16 -add china_ip_route 61.178.0.0/16 -add china_ip_route 61.179.0.0/16 -add china_ip_route 61.180.0.0/17 -add china_ip_route 61.180.128.0/17 -add china_ip_route 61.181.0.0/16 -add china_ip_route 61.182.0.0/16 -add china_ip_route 61.183.0.0/16 -add china_ip_route 61.184.0.0/14 -add china_ip_route 61.188.0.0/16 -add china_ip_route 61.189.0.0/17 -add china_ip_route 61.189.128.0/17 -add china_ip_route 61.190.0.0/15 -add china_ip_route 61.232.0.0/14 -add china_ip_route 61.236.0.0/15 -add china_ip_route 61.240.0.0/14 -add china_ip_route 62.234.0.0/16 -add china_ip_route 68.79.0.0/18 -add china_ip_route 69.230.192.0/18 -add china_ip_route 69.231.128.0/18 -add china_ip_route 69.234.192.0/18 -add china_ip_route 69.235.128.0/18 -add china_ip_route 71.131.192.0/18 -add china_ip_route 71.132.0.0/18 -add china_ip_route 71.136.64.0/18 -add china_ip_route 71.137.0.0/18 -add china_ip_route 81.68.0.0/14 -add china_ip_route 82.156.0.0/15 -add china_ip_route 94.191.0.0/17 -add china_ip_route 101.0.0.0/22 -add china_ip_route 101.1.0.0/22 -add china_ip_route 101.2.172.0/22 -add china_ip_route 101.4.0.0/14 -add china_ip_route 101.16.0.0/12 -add china_ip_route 101.33.128.0/17 -add china_ip_route 101.34.0.0/15 -add china_ip_route 101.36.0.0/18 -add china_ip_route 101.36.64.0/19 -add china_ip_route 101.36.128.0/17 -add china_ip_route 101.37.0.0/16 -add china_ip_route 101.38.0.0/15 -add china_ip_route 101.40.0.0/15 -add china_ip_route 101.42.0.0/15 -add china_ip_route 101.45.0.0/16 -add china_ip_route 101.46.0.0/15 -add china_ip_route 101.48.0.0/15 -add china_ip_route 101.50.8.0/22 -add china_ip_route 101.50.12.0/22 -add china_ip_route 101.50.56.0/22 -add china_ip_route 101.52.0.0/16 -add china_ip_route 101.53.100.0/22 -add china_ip_route 101.54.0.0/16 -add china_ip_route 101.55.224.0/21 -add china_ip_route 101.64.0.0/13 -add china_ip_route 101.72.0.0/14 -add china_ip_route 101.76.0.0/15 -add china_ip_route 101.78.0.0/22 -add china_ip_route 101.78.32.0/19 -add china_ip_route 101.80.0.0/12 -add china_ip_route 101.96.0.0/21 -add china_ip_route 101.96.8.0/22 -add china_ip_route 101.96.16.0/20 -add china_ip_route 101.96.128.0/17 -add china_ip_route 101.99.96.0/19 -add china_ip_route 101.101.64.0/19 -add china_ip_route 101.101.100.0/24 -add china_ip_route 101.101.102.0/23 -add china_ip_route 101.101.104.0/21 -add china_ip_route 101.101.112.0/20 -add china_ip_route 101.102.64.0/19 -add china_ip_route 101.102.100.0/23 -add china_ip_route 101.102.102.0/24 -add china_ip_route 101.102.104.0/21 -add china_ip_route 101.102.112.0/20 -add china_ip_route 101.104.0.0/14 -add china_ip_route 101.110.64.0/19 -add china_ip_route 101.110.96.0/20 -add china_ip_route 101.110.116.0/22 -add china_ip_route 101.110.120.0/21 -add china_ip_route 101.120.0.0/14 -add china_ip_route 101.124.0.0/15 -add china_ip_route 101.126.0.0/16 -add china_ip_route 101.128.0.0/22 -add china_ip_route 101.128.8.0/21 -add china_ip_route 101.128.16.0/20 -add china_ip_route 101.128.32.0/19 -add china_ip_route 101.129.0.0/16 -add china_ip_route 101.130.0.0/15 -add china_ip_route 101.132.0.0/14 -add china_ip_route 101.144.0.0/12 -add china_ip_route 101.192.0.0/14 -add china_ip_route 101.196.0.0/16 -add china_ip_route 101.197.0.0/16 -add china_ip_route 101.198.0.0/15 -add china_ip_route 101.200.0.0/15 -add china_ip_route 101.203.128.0/19 -add china_ip_route 101.203.160.0/21 -add china_ip_route 101.203.172.0/22 -add china_ip_route 101.203.176.0/20 -add china_ip_route 101.204.0.0/14 -add china_ip_route 101.224.0.0/13 -add china_ip_route 101.232.0.0/15 -add china_ip_route 101.234.64.0/21 -add china_ip_route 101.234.76.0/22 -add china_ip_route 101.234.80.0/20 -add china_ip_route 101.234.96.0/19 -add china_ip_route 101.236.0.0/14 -add china_ip_route 101.240.0.0/14 -add china_ip_route 101.244.0.0/16 -add china_ip_route 101.245.0.0/16 -add china_ip_route 101.246.0.0/15 -add china_ip_route 101.248.0.0/15 -add china_ip_route 101.251.0.0/22 -add china_ip_route 101.251.8.0/21 -add china_ip_route 101.251.16.0/20 -add china_ip_route 101.251.32.0/19 -add china_ip_route 101.251.64.0/18 -add china_ip_route 101.251.128.0/17 -add china_ip_route 101.252.0.0/15 -add china_ip_route 101.254.0.0/16 -add china_ip_route 103.1.8.0/22 -add china_ip_route 103.1.20.0/22 -add china_ip_route 103.1.24.0/22 -add china_ip_route 103.1.72.0/22 -add china_ip_route 103.1.88.0/22 -add china_ip_route 103.1.168.0/22 -add china_ip_route 103.2.108.0/22 -add china_ip_route 103.2.156.0/22 -add china_ip_route 103.2.164.0/22 -add china_ip_route 103.2.200.0/22 -add china_ip_route 103.2.204.0/22 -add china_ip_route 103.2.208.0/22 -add china_ip_route 103.2.212.0/22 -add china_ip_route 103.3.84.0/22 -add china_ip_route 103.3.88.0/22 -add china_ip_route 103.3.92.0/22 -add china_ip_route 103.3.96.0/22 -add china_ip_route 103.3.100.0/22 -add china_ip_route 103.3.104.0/22 -add china_ip_route 103.3.108.0/22 -add china_ip_route 103.3.112.0/22 -add china_ip_route 103.3.116.0/22 -add china_ip_route 103.3.120.0/22 -add china_ip_route 103.3.124.0/22 -add china_ip_route 103.3.128.0/22 -add china_ip_route 103.3.132.0/22 -add china_ip_route 103.3.136.0/22 -add china_ip_route 103.3.140.0/22 -add china_ip_route 103.3.148.0/22 -add china_ip_route 103.3.152.0/22 -add china_ip_route 103.3.156.0/22 -add china_ip_route 103.4.56.0/22 -add china_ip_route 103.4.168.0/22 -add china_ip_route 103.4.184.0/22 -add china_ip_route 103.4.224.0/22 -add china_ip_route 103.5.36.0/22 -add china_ip_route 103.5.52.0/22 -add china_ip_route 103.5.56.0/22 -add china_ip_route 103.5.152.0/22 -add china_ip_route 103.5.168.0/22 -add china_ip_route 103.5.192.0/22 -add china_ip_route 103.5.252.0/22 -add china_ip_route 103.6.76.0/22 -add china_ip_route 103.6.108.0/22 -add china_ip_route 103.6.220.0/22 -add china_ip_route 103.6.228.0/22 -add china_ip_route 103.7.28.0/22 -add china_ip_route 103.7.140.0/22 -add china_ip_route 103.7.212.0/22 -add china_ip_route 103.7.216.0/22 -add china_ip_route 103.7.220.0/22 -add china_ip_route 103.8.0.0/22 -add china_ip_route 103.8.4.0/22 -add china_ip_route 103.8.8.0/22 -add china_ip_route 103.8.32.0/22 -add china_ip_route 103.8.52.0/22 -add china_ip_route 103.8.68.0/22 -add china_ip_route 103.8.108.0/22 -add china_ip_route 103.8.156.0/22 -add china_ip_route 103.8.200.0/22 -add china_ip_route 103.8.204.0/22 -add china_ip_route 103.8.220.0/22 -add china_ip_route 103.9.8.0/22 -add china_ip_route 103.9.24.0/22 -add china_ip_route 103.9.108.0/22 -add china_ip_route 103.9.152.0/22 -add china_ip_route 103.9.192.0/22 -add china_ip_route 103.9.248.0/22 -add china_ip_route 103.9.252.0/22 -add china_ip_route 103.10.0.0/22 -add china_ip_route 103.10.16.0/22 -add china_ip_route 103.10.84.0/22 -add china_ip_route 103.10.140.0/22 -add china_ip_route 103.11.16.0/22 -add china_ip_route 103.11.168.0/22 -add china_ip_route 103.11.180.0/22 -add china_ip_route 103.12.32.0/22 -add china_ip_route 103.12.68.0/22 -add china_ip_route 103.12.92.0/22 -add china_ip_route 103.12.136.0/22 -add china_ip_route 103.12.184.0/22 -add china_ip_route 103.12.232.0/22 -add china_ip_route 103.13.12.0/22 -add china_ip_route 103.13.124.0/22 -add china_ip_route 103.13.144.0/22 -add china_ip_route 103.13.196.0/22 -add china_ip_route 103.13.220.0/22 -add china_ip_route 103.13.244.0/22 -add china_ip_route 103.14.84.0/22 -add china_ip_route 103.14.100.0/22 -add china_ip_route 103.14.132.0/22 -add china_ip_route 103.14.136.0/22 -add china_ip_route 103.14.156.0/22 -add china_ip_route 103.14.240.0/22 -add china_ip_route 103.15.4.0/22 -add china_ip_route 103.15.8.0/22 -add china_ip_route 103.15.16.0/22 -add china_ip_route 103.15.96.0/22 -add china_ip_route 103.15.200.0/22 -add china_ip_route 103.16.52.0/22 -add china_ip_route 103.16.80.0/22 -add china_ip_route 103.16.84.0/22 -add china_ip_route 103.16.88.0/22 -add china_ip_route 103.16.108.0/22 -add china_ip_route 103.16.124.0/22 -add china_ip_route 103.17.40.0/22 -add china_ip_route 103.17.64.0/22 -add china_ip_route 103.17.120.0/22 -add china_ip_route 103.17.136.0/22 -add china_ip_route 103.17.160.0/22 -add china_ip_route 103.17.204.0/22 -add china_ip_route 103.17.228.0/22 -add china_ip_route 103.18.192.0/22 -add china_ip_route 103.18.208.0/22 -add china_ip_route 103.18.212.0/22 -add china_ip_route 103.18.224.0/22 -add china_ip_route 103.19.12.0/22 -add china_ip_route 103.19.40.0/22 -add china_ip_route 103.19.44.0/22 -add china_ip_route 103.19.64.0/22 -add china_ip_route 103.19.68.0/22 -add china_ip_route 103.19.72.0/22 -add china_ip_route 103.19.232.0/22 -add china_ip_route 103.20.12.0/22 -add china_ip_route 103.20.32.0/22 -add china_ip_route 103.20.44.0/22 -add china_ip_route 103.20.68.0/22 -add china_ip_route 103.20.112.0/22 -add china_ip_route 103.20.128.0/22 -add china_ip_route 103.20.160.0/22 -add china_ip_route 103.20.248.0/22 -add china_ip_route 103.21.112.0/22 -add china_ip_route 103.21.116.0/22 -add china_ip_route 103.21.136.0/22 -add china_ip_route 103.21.140.0/22 -add china_ip_route 103.21.176.0/22 -add china_ip_route 103.21.208.0/22 -add china_ip_route 103.21.240.0/22 -add china_ip_route 103.22.0.0/22 -add china_ip_route 103.22.4.0/22 -add china_ip_route 103.22.8.0/22 -add china_ip_route 103.22.12.0/22 -add china_ip_route 103.22.16.0/22 -add china_ip_route 103.22.20.0/22 -add china_ip_route 103.22.24.0/22 -add china_ip_route 103.22.28.0/22 -add china_ip_route 103.22.32.0/22 -add china_ip_route 103.22.36.0/22 -add china_ip_route 103.22.40.0/22 -add china_ip_route 103.22.44.0/22 -add china_ip_route 103.22.48.0/22 -add china_ip_route 103.22.52.0/22 -add china_ip_route 103.22.56.0/22 -add china_ip_route 103.22.60.0/22 -add china_ip_route 103.22.64.0/22 -add china_ip_route 103.22.68.0/22 -add china_ip_route 103.22.72.0/22 -add china_ip_route 103.22.76.0/22 -add china_ip_route 103.22.80.0/22 -add china_ip_route 103.22.84.0/22 -add china_ip_route 103.22.88.0/22 -add china_ip_route 103.22.92.0/22 -add china_ip_route 103.22.100.0/22 -add china_ip_route 103.22.104.0/22 -add china_ip_route 103.22.108.0/22 -add china_ip_route 103.22.112.0/22 -add china_ip_route 103.22.116.0/22 -add china_ip_route 103.22.120.0/22 -add china_ip_route 103.22.124.0/22 -add china_ip_route 103.22.188.0/22 -add china_ip_route 103.22.228.0/22 -add china_ip_route 103.22.252.0/22 -add china_ip_route 103.23.8.0/22 -add china_ip_route 103.23.56.0/22 -add china_ip_route 103.23.160.0/22 -add china_ip_route 103.23.164.0/22 -add china_ip_route 103.23.176.0/22 -add china_ip_route 103.23.228.0/22 -add china_ip_route 103.24.24.0/22 -add china_ip_route 103.24.116.0/22 -add china_ip_route 103.24.128.0/22 -add china_ip_route 103.24.144.0/22 -add china_ip_route 103.24.176.0/22 -add china_ip_route 103.24.184.0/22 -add china_ip_route 103.24.220.0/22 -add china_ip_route 103.24.228.0/22 -add china_ip_route 103.24.248.0/22 -add china_ip_route 103.24.252.0/22 -add china_ip_route 103.25.8.0/23 -add china_ip_route 103.25.20.0/22 -add china_ip_route 103.25.24.0/22 -add china_ip_route 103.25.28.0/22 -add china_ip_route 103.25.32.0/22 -add china_ip_route 103.25.36.0/22 -add china_ip_route 103.25.40.0/22 -add china_ip_route 103.25.48.0/22 -add china_ip_route 103.25.64.0/22 -add china_ip_route 103.25.68.0/22 -add china_ip_route 103.25.148.0/22 -add china_ip_route 103.25.156.0/22 -add china_ip_route 103.25.216.0/22 -add china_ip_route 103.26.0.0/22 -add china_ip_route 103.26.64.0/22 -add china_ip_route 103.26.76.0/22 -add china_ip_route 103.26.132.0/22 -add china_ip_route 103.26.156.0/22 -add china_ip_route 103.26.160.0/22 -add china_ip_route 103.26.228.0/22 -add china_ip_route 103.26.240.0/22 -add china_ip_route 103.27.4.0/22 -add china_ip_route 103.27.12.0/22 -add china_ip_route 103.27.24.0/22 -add china_ip_route 103.27.56.0/22 -add china_ip_route 103.27.96.0/22 -add china_ip_route 103.27.184.0/22 -add china_ip_route 103.27.208.0/22 -add china_ip_route 103.27.212.0/22 -add china_ip_route 103.27.240.0/22 -add china_ip_route 103.28.4.0/22 -add china_ip_route 103.28.8.0/22 -add china_ip_route 103.28.184.0/22 -add china_ip_route 103.28.204.0/22 -add china_ip_route 103.28.212.0/22 -add china_ip_route 103.29.16.0/22 -add china_ip_route 103.29.128.0/22 -add china_ip_route 103.29.132.0/22 -add china_ip_route 103.29.136.0/22 -add china_ip_route 103.30.20.0/22 -add china_ip_route 103.30.96.0/22 -add china_ip_route 103.30.148.0/22 -add china_ip_route 103.30.200.0/22 -add china_ip_route 103.30.228.0/22 -add china_ip_route 103.30.236.0/22 -add china_ip_route 103.31.0.0/22 -add china_ip_route 103.31.48.0/22 -add china_ip_route 103.31.52.0/22 -add china_ip_route 103.31.56.0/22 -add china_ip_route 103.31.60.0/22 -add china_ip_route 103.31.64.0/22 -add china_ip_route 103.31.68.0/22 -add china_ip_route 103.31.148.0/22 -add china_ip_route 103.31.160.0/22 -add china_ip_route 103.31.168.0/22 -add china_ip_route 103.31.200.0/22 -add china_ip_route 103.31.236.0/22 -add china_ip_route 103.32.0.0/22 -add china_ip_route 103.32.4.0/22 -add china_ip_route 103.32.8.0/22 -add china_ip_route 103.32.12.0/22 -add china_ip_route 103.32.16.0/22 -add china_ip_route 103.32.20.0/22 -add china_ip_route 103.32.24.0/22 -add china_ip_route 103.32.28.0/22 -add china_ip_route 103.32.32.0/22 -add china_ip_route 103.32.36.0/22 -add china_ip_route 103.32.40.0/22 -add china_ip_route 103.32.44.0/22 -add china_ip_route 103.32.48.0/22 -add china_ip_route 103.32.52.0/22 -add china_ip_route 103.32.56.0/22 -add china_ip_route 103.32.60.0/22 -add china_ip_route 103.32.64.0/22 -add china_ip_route 103.32.68.0/22 -add china_ip_route 103.32.72.0/22 -add china_ip_route 103.32.76.0/22 -add china_ip_route 103.32.80.0/22 -add china_ip_route 103.32.84.0/22 -add china_ip_route 103.32.88.0/22 -add china_ip_route 103.32.92.0/22 -add china_ip_route 103.32.96.0/22 -add china_ip_route 103.32.100.0/22 -add china_ip_route 103.32.104.0/22 -add china_ip_route 103.32.108.0/22 -add china_ip_route 103.32.112.0/22 -add china_ip_route 103.32.116.0/22 -add china_ip_route 103.32.120.0/22 -add china_ip_route 103.32.124.0/22 -add china_ip_route 103.32.128.0/22 -add china_ip_route 103.32.132.0/22 -add china_ip_route 103.32.136.0/22 -add china_ip_route 103.32.140.0/22 -add china_ip_route 103.32.144.0/22 -add china_ip_route 103.32.148.0/22 -add china_ip_route 103.32.152.0/22 -add china_ip_route 103.32.156.0/22 -add china_ip_route 103.32.160.0/22 -add china_ip_route 103.32.164.0/22 -add china_ip_route 103.32.168.0/22 -add china_ip_route 103.32.172.0/22 -add china_ip_route 103.32.176.0/22 -add china_ip_route 103.32.180.0/22 -add china_ip_route 103.32.184.0/22 -add china_ip_route 103.32.188.0/22 -add china_ip_route 103.32.192.0/22 -add china_ip_route 103.32.196.0/22 -add china_ip_route 103.32.200.0/22 -add china_ip_route 103.32.204.0/22 -add china_ip_route 103.32.208.0/22 -add china_ip_route 103.32.212.0/22 -add china_ip_route 103.32.216.0/22 -add china_ip_route 103.32.220.0/22 -add china_ip_route 103.32.224.0/22 -add china_ip_route 103.32.228.0/22 -add china_ip_route 103.32.232.0/22 -add china_ip_route 103.32.236.0/22 -add china_ip_route 103.32.240.0/22 -add china_ip_route 103.32.244.0/22 -add china_ip_route 103.32.248.0/22 -add china_ip_route 103.32.252.0/22 -add china_ip_route 103.33.0.0/22 -add china_ip_route 103.33.4.0/22 -add china_ip_route 103.33.8.0/22 -add china_ip_route 103.33.12.0/22 -add china_ip_route 103.33.16.0/22 -add china_ip_route 103.33.20.0/22 -add china_ip_route 103.33.24.0/22 -add china_ip_route 103.33.28.0/22 -add china_ip_route 103.33.32.0/22 -add china_ip_route 103.33.36.0/22 -add china_ip_route 103.33.40.0/22 -add china_ip_route 103.33.44.0/22 -add china_ip_route 103.33.48.0/22 -add china_ip_route 103.33.52.0/22 -add china_ip_route 103.33.56.0/22 -add china_ip_route 103.33.60.0/22 -add china_ip_route 103.33.64.0/22 -add china_ip_route 103.33.68.0/22 -add china_ip_route 103.33.72.0/22 -add china_ip_route 103.33.76.0/22 -add china_ip_route 103.33.80.0/22 -add china_ip_route 103.33.84.0/22 -add china_ip_route 103.33.88.0/22 -add china_ip_route 103.33.92.0/22 -add china_ip_route 103.33.96.0/22 -add china_ip_route 103.33.100.0/22 -add china_ip_route 103.33.104.0/22 -add china_ip_route 103.33.108.0/22 -add china_ip_route 103.33.112.0/22 -add china_ip_route 103.33.116.0/22 -add china_ip_route 103.33.120.0/22 -add china_ip_route 103.33.124.0/22 -add china_ip_route 103.33.128.0/22 -add china_ip_route 103.33.132.0/22 -add china_ip_route 103.33.136.0/22 -add china_ip_route 103.33.140.0/22 -add china_ip_route 103.33.144.0/22 -add china_ip_route 103.33.148.0/22 -add china_ip_route 103.33.152.0/22 -add china_ip_route 103.33.156.0/22 -add china_ip_route 103.33.160.0/22 -add china_ip_route 103.33.164.0/22 -add china_ip_route 103.33.168.0/22 -add china_ip_route 103.33.172.0/22 -add china_ip_route 103.33.176.0/22 -add china_ip_route 103.33.180.0/22 -add china_ip_route 103.33.184.0/22 -add china_ip_route 103.33.188.0/22 -add china_ip_route 103.33.192.0/22 -add china_ip_route 103.33.196.0/22 -add china_ip_route 103.33.200.0/22 -add china_ip_route 103.33.204.0/22 -add china_ip_route 103.33.208.0/22 -add china_ip_route 103.33.212.0/22 -add china_ip_route 103.33.216.0/22 -add china_ip_route 103.33.220.0/22 -add china_ip_route 103.33.224.0/22 -add china_ip_route 103.33.228.0/22 -add china_ip_route 103.33.232.0/22 -add china_ip_route 103.33.236.0/22 -add china_ip_route 103.33.240.0/22 -add china_ip_route 103.33.244.0/22 -add china_ip_route 103.33.248.0/22 -add china_ip_route 103.33.252.0/22 -add china_ip_route 103.34.0.0/22 -add china_ip_route 103.34.4.0/22 -add china_ip_route 103.34.8.0/22 -add china_ip_route 103.34.12.0/22 -add china_ip_route 103.34.16.0/22 -add china_ip_route 103.34.20.0/22 -add china_ip_route 103.34.24.0/22 -add china_ip_route 103.34.28.0/22 -add china_ip_route 103.34.32.0/22 -add china_ip_route 103.34.36.0/22 -add china_ip_route 103.34.40.0/22 -add china_ip_route 103.34.44.0/22 -add china_ip_route 103.34.48.0/22 -add china_ip_route 103.34.52.0/22 -add china_ip_route 103.34.56.0/22 -add china_ip_route 103.34.60.0/22 -add china_ip_route 103.34.64.0/22 -add china_ip_route 103.34.68.0/22 -add china_ip_route 103.34.72.0/22 -add china_ip_route 103.34.76.0/22 -add china_ip_route 103.34.80.0/22 -add china_ip_route 103.34.84.0/22 -add china_ip_route 103.34.88.0/22 -add china_ip_route 103.34.92.0/22 -add china_ip_route 103.34.96.0/22 -add china_ip_route 103.34.100.0/22 -add china_ip_route 103.34.104.0/22 -add china_ip_route 103.34.108.0/22 -add china_ip_route 103.34.112.0/22 -add china_ip_route 103.34.116.0/22 -add china_ip_route 103.34.120.0/22 -add china_ip_route 103.34.124.0/22 -add china_ip_route 103.34.128.0/22 -add china_ip_route 103.34.132.0/22 -add china_ip_route 103.34.136.0/22 -add china_ip_route 103.34.140.0/22 -add china_ip_route 103.34.144.0/22 -add china_ip_route 103.34.148.0/22 -add china_ip_route 103.34.152.0/22 -add china_ip_route 103.34.156.0/22 -add china_ip_route 103.34.160.0/22 -add china_ip_route 103.34.164.0/22 -add china_ip_route 103.34.168.0/22 -add china_ip_route 103.34.172.0/22 -add china_ip_route 103.34.176.0/22 -add china_ip_route 103.34.180.0/22 -add china_ip_route 103.34.184.0/22 -add china_ip_route 103.34.188.0/22 -add china_ip_route 103.34.192.0/22 -add china_ip_route 103.34.196.0/22 -add china_ip_route 103.34.200.0/22 -add china_ip_route 103.34.204.0/22 -add china_ip_route 103.34.208.0/22 -add china_ip_route 103.34.212.0/22 -add china_ip_route 103.34.216.0/22 -add china_ip_route 103.34.220.0/22 -add china_ip_route 103.34.224.0/22 -add china_ip_route 103.34.228.0/22 -add china_ip_route 103.34.232.0/22 -add china_ip_route 103.34.236.0/22 -add china_ip_route 103.34.240.0/22 -add china_ip_route 103.34.244.0/22 -add china_ip_route 103.34.248.0/22 -add china_ip_route 103.34.252.0/22 -add china_ip_route 103.35.0.0/22 -add china_ip_route 103.35.4.0/22 -add china_ip_route 103.35.8.0/22 -add china_ip_route 103.35.12.0/22 -add china_ip_route 103.35.16.0/22 -add china_ip_route 103.35.20.0/22 -add china_ip_route 103.35.24.0/22 -add china_ip_route 103.35.28.0/22 -add china_ip_route 103.35.32.0/22 -add china_ip_route 103.35.36.0/22 -add china_ip_route 103.35.40.0/22 -add china_ip_route 103.35.44.0/22 -add china_ip_route 103.35.48.0/22 -add china_ip_route 103.35.104.0/22 -add china_ip_route 103.35.116.0/22 -add china_ip_route 103.35.180.0/22 -add china_ip_route 103.35.200.0/22 -add china_ip_route 103.35.220.0/22 -add china_ip_route 103.36.28.0/22 -add china_ip_route 103.36.36.0/22 -add china_ip_route 103.36.56.0/22 -add china_ip_route 103.36.60.0/22 -add china_ip_route 103.36.64.0/22 -add china_ip_route 103.36.72.0/22 -add china_ip_route 103.36.96.0/22 -add china_ip_route 103.36.132.0/22 -add china_ip_route 103.36.136.0/22 -add china_ip_route 103.36.160.0/22 -add china_ip_route 103.36.164.0/22 -add china_ip_route 103.36.168.0/22 -add china_ip_route 103.36.172.0/22 -add china_ip_route 103.36.176.0/22 -add china_ip_route 103.36.180.0/22 -add china_ip_route 103.36.184.0/22 -add china_ip_route 103.36.188.0/22 -add china_ip_route 103.36.192.0/22 -add china_ip_route 103.36.196.0/22 -add china_ip_route 103.36.200.0/22 -add china_ip_route 103.36.204.0/22 -add china_ip_route 103.36.208.0/22 -add china_ip_route 103.36.212.0/22 -add china_ip_route 103.36.216.0/22 -add china_ip_route 103.36.220.0/22 -add china_ip_route 103.36.224.0/22 -add china_ip_route 103.36.228.0/22 -add china_ip_route 103.36.232.0/22 -add china_ip_route 103.36.236.0/22 -add china_ip_route 103.36.240.0/22 -add china_ip_route 103.36.244.0/22 -add china_ip_route 103.37.12.0/22 -add china_ip_route 103.37.16.0/22 -add china_ip_route 103.37.24.0/22 -add china_ip_route 103.37.44.0/22 -add china_ip_route 103.37.52.0/22 -add china_ip_route 103.37.56.0/22 -add china_ip_route 103.37.72.0/22 -add china_ip_route 103.37.100.0/22 -add china_ip_route 103.37.104.0/22 -add china_ip_route 103.37.136.0/22 -add china_ip_route 103.37.140.0/22 -add china_ip_route 103.37.144.0/22 -add china_ip_route 103.37.148.0/22 -add china_ip_route 103.37.152.0/22 -add china_ip_route 103.37.156.0/22 -add china_ip_route 103.37.160.0/22 -add china_ip_route 103.37.164.0/22 -add china_ip_route 103.37.172.0/22 -add china_ip_route 103.37.176.0/22 -add china_ip_route 103.37.188.0/22 -add china_ip_route 103.37.208.0/22 -add china_ip_route 103.37.212.0/22 -add china_ip_route 103.37.216.0/22 -add china_ip_route 103.37.220.0/22 -add china_ip_route 103.37.248.0/22 -add china_ip_route 103.37.252.0/22 -add china_ip_route 103.38.0.0/22 -add china_ip_route 103.38.32.0/22 -add china_ip_route 103.38.40.0/22 -add china_ip_route 103.38.44.0/22 -add china_ip_route 103.38.56.0/22 -add china_ip_route 103.38.76.0/22 -add china_ip_route 103.38.84.0/22 -add china_ip_route 103.38.92.0/22 -add china_ip_route 103.38.96.0/22 -add china_ip_route 103.38.116.0/22 -add china_ip_route 103.38.132.0/22 -add china_ip_route 103.38.140.0/22 -add china_ip_route 103.38.224.0/22 -add china_ip_route 103.38.228.0/22 -add china_ip_route 103.38.232.0/22 -add china_ip_route 103.39.64.0/22 -add china_ip_route 103.39.88.0/22 -add china_ip_route 103.39.100.0/22 -add china_ip_route 103.39.104.0/22 -add china_ip_route 103.39.108.0/22 -add china_ip_route 103.39.160.0/22 -add china_ip_route 103.39.164.0/22 -add china_ip_route 103.39.168.0/22 -add china_ip_route 103.39.172.0/22 -add china_ip_route 103.39.176.0/22 -add china_ip_route 103.39.180.0/22 -add china_ip_route 103.39.184.0/22 -add china_ip_route 103.39.188.0/22 -add china_ip_route 103.39.200.0/22 -add china_ip_route 103.39.204.0/22 -add china_ip_route 103.39.208.0/22 -add china_ip_route 103.39.212.0/22 -add china_ip_route 103.39.216.0/22 -add china_ip_route 103.39.220.0/22 -add china_ip_route 103.39.224.0/22 -add china_ip_route 103.39.228.0/22 -add china_ip_route 103.39.232.0/22 -add china_ip_route 103.40.12.0/22 -add china_ip_route 103.40.16.0/22 -add china_ip_route 103.40.20.0/22 -add china_ip_route 103.40.24.0/22 -add china_ip_route 103.40.28.0/22 -add china_ip_route 103.40.32.0/22 -add china_ip_route 103.40.36.0/22 -add china_ip_route 103.40.40.0/22 -add china_ip_route 103.40.44.0/22 -add china_ip_route 103.40.88.0/22 -add china_ip_route 103.40.100.0/22 -add china_ip_route 103.40.192.0/22 -add china_ip_route 103.40.212.0/22 -add china_ip_route 103.40.220.0/22 -add china_ip_route 103.40.228.0/22 -add china_ip_route 103.40.232.0/22 -add china_ip_route 103.40.236.0/22 -add china_ip_route 103.40.240.0/22 -add china_ip_route 103.40.244.0/22 -add china_ip_route 103.40.248.0/22 -add china_ip_route 103.40.252.0/22 -add china_ip_route 103.41.0.0/22 -add china_ip_route 103.41.16.0/22 -add china_ip_route 103.41.52.0/22 -add china_ip_route 103.41.116.0/22 -add china_ip_route 103.41.140.0/22 -add china_ip_route 103.41.148.0/22 -add china_ip_route 103.41.152.0/22 -add china_ip_route 103.41.160.0/22 -add china_ip_route 103.41.164.0/22 -add china_ip_route 103.41.220.0/22 -add china_ip_route 103.41.224.0/22 -add china_ip_route 103.41.228.0/22 -add china_ip_route 103.41.232.0/22 -add china_ip_route 103.42.8.0/22 -add china_ip_route 103.42.24.0/22 -add china_ip_route 103.42.28.0/22 -add china_ip_route 103.42.32.0/22 -add china_ip_route 103.42.64.0/22 -add china_ip_route 103.42.68.0/22 -add china_ip_route 103.42.76.0/22 -add china_ip_route 103.42.104.0/22 -add china_ip_route 103.42.180.0/22 -add china_ip_route 103.42.232.0/22 -add china_ip_route 103.43.16.0/22 -add china_ip_route 103.43.84.0/22 -add china_ip_route 103.43.96.0/22 -add china_ip_route 103.43.100.0/22 -add china_ip_route 103.43.104.0/22 -add china_ip_route 103.43.124.0/22 -add china_ip_route 103.43.184.0/22 -add china_ip_route 103.43.192.0/22 -add china_ip_route 103.43.196.0/22 -add china_ip_route 103.43.208.0/22 -add china_ip_route 103.43.220.0/22 -add china_ip_route 103.43.224.0/22 -add china_ip_route 103.43.240.0/22 -add china_ip_route 103.44.56.0/22 -add china_ip_route 103.44.80.0/22 -add china_ip_route 103.44.88.0/22 -add china_ip_route 103.44.120.0/22 -add china_ip_route 103.44.124.0/22 -add china_ip_route 103.44.132.0/22 -add china_ip_route 103.44.144.0/22 -add china_ip_route 103.44.168.0/22 -add china_ip_route 103.44.176.0/22 -add china_ip_route 103.44.180.0/22 -add china_ip_route 103.44.184.0/22 -add china_ip_route 103.44.188.0/22 -add china_ip_route 103.44.192.0/22 -add china_ip_route 103.44.196.0/22 -add china_ip_route 103.44.200.0/22 -add china_ip_route 103.44.204.0/22 -add china_ip_route 103.44.224.0/22 -add china_ip_route 103.44.236.0/22 -add china_ip_route 103.44.240.0/22 -add china_ip_route 103.44.244.0/22 -add china_ip_route 103.44.248.0/22 -add china_ip_route 103.44.252.0/22 -add china_ip_route 103.45.0.0/22 -add china_ip_route 103.45.4.0/22 -add china_ip_route 103.45.8.0/22 -add china_ip_route 103.45.12.0/22 -add china_ip_route 103.45.16.0/22 -add china_ip_route 103.45.20.0/22 -add china_ip_route 103.45.24.0/22 -add china_ip_route 103.45.28.0/22 -add china_ip_route 103.45.32.0/22 -add china_ip_route 103.45.36.0/22 -add china_ip_route 103.45.40.0/22 -add china_ip_route 103.45.44.0/22 -add china_ip_route 103.45.48.0/22 -add china_ip_route 103.45.52.0/22 -add china_ip_route 103.45.56.0/22 -add china_ip_route 103.45.60.0/22 -add china_ip_route 103.45.72.0/22 -add china_ip_route 103.45.76.0/22 -add china_ip_route 103.45.80.0/22 -add china_ip_route 103.45.84.0/22 -add china_ip_route 103.45.88.0/22 -add china_ip_route 103.45.92.0/22 -add china_ip_route 103.45.96.0/22 -add china_ip_route 103.45.100.0/22 -add china_ip_route 103.45.104.0/22 -add china_ip_route 103.45.108.0/22 -add china_ip_route 103.45.112.0/22 -add china_ip_route 103.45.116.0/22 -add china_ip_route 103.45.120.0/22 -add china_ip_route 103.45.124.0/22 -add china_ip_route 103.45.128.0/22 -add china_ip_route 103.45.132.0/22 -add china_ip_route 103.45.136.0/22 -add china_ip_route 103.45.140.0/22 -add china_ip_route 103.45.144.0/22 -add china_ip_route 103.45.148.0/22 -add china_ip_route 103.45.152.0/22 -add china_ip_route 103.45.156.0/22 -add china_ip_route 103.45.160.0/22 -add china_ip_route 103.45.164.0/22 -add china_ip_route 103.45.168.0/22 -add china_ip_route 103.45.172.0/22 -add china_ip_route 103.45.176.0/22 -add china_ip_route 103.45.180.0/22 -add china_ip_route 103.45.184.0/22 -add china_ip_route 103.45.188.0/22 -add china_ip_route 103.45.192.0/22 -add china_ip_route 103.45.196.0/22 -add china_ip_route 103.45.200.0/22 -add china_ip_route 103.45.204.0/22 -add china_ip_route 103.45.208.0/22 -add china_ip_route 103.45.212.0/22 -add china_ip_route 103.45.216.0/22 -add china_ip_route 103.45.220.0/22 -add china_ip_route 103.45.224.0/22 -add china_ip_route 103.45.248.0/22 -add china_ip_route 103.46.0.0/22 -add china_ip_route 103.46.12.0/22 -add china_ip_route 103.46.16.0/22 -add china_ip_route 103.46.20.0/22 -add china_ip_route 103.46.24.0/22 -add china_ip_route 103.46.28.0/22 -add china_ip_route 103.46.32.0/22 -add china_ip_route 103.46.36.0/22 -add china_ip_route 103.46.40.0/22 -add china_ip_route 103.46.44.0/22 -add china_ip_route 103.46.48.0/22 -add china_ip_route 103.46.52.0/22 -add china_ip_route 103.46.56.0/22 -add china_ip_route 103.46.60.0/22 -add china_ip_route 103.46.64.0/22 -add china_ip_route 103.46.68.0/22 -add china_ip_route 103.46.72.0/22 -add china_ip_route 103.46.76.0/22 -add china_ip_route 103.46.80.0/22 -add china_ip_route 103.46.84.0/22 -add china_ip_route 103.46.88.0/22 -add china_ip_route 103.46.92.0/22 -add china_ip_route 103.46.96.0/22 -add china_ip_route 103.46.100.0/22 -add china_ip_route 103.46.104.0/22 -add china_ip_route 103.46.108.0/22 -add china_ip_route 103.46.112.0/22 -add china_ip_route 103.46.116.0/22 -add china_ip_route 103.46.120.0/22 -add china_ip_route 103.46.124.0/22 -add china_ip_route 103.46.128.0/22 -add china_ip_route 103.46.132.0/22 -add china_ip_route 103.46.136.0/22 -add china_ip_route 103.46.152.0/22 -add china_ip_route 103.46.156.0/22 -add china_ip_route 103.46.160.0/22 -add china_ip_route 103.46.164.0/22 -add china_ip_route 103.46.168.0/22 -add china_ip_route 103.46.172.0/22 -add china_ip_route 103.46.176.0/22 -add china_ip_route 103.46.180.0/22 -add china_ip_route 103.46.244.0/22 -add china_ip_route 103.46.248.0/22 -add china_ip_route 103.47.4.0/22 -add china_ip_route 103.47.20.0/22 -add china_ip_route 103.47.36.0/22 -add china_ip_route 103.47.40.0/22 -add china_ip_route 103.47.48.0/22 -add china_ip_route 103.47.80.0/22 -add china_ip_route 103.47.96.0/22 -add china_ip_route 103.47.108.0/22 -add china_ip_route 103.47.116.0/22 -add china_ip_route 103.47.120.0/22 -add china_ip_route 103.47.136.0/22 -add china_ip_route 103.47.140.0/22 -add china_ip_route 103.47.212.0/22 -add china_ip_route 103.48.52.0/22 -add china_ip_route 103.48.92.0/22 -add china_ip_route 103.48.144.0/22 -add china_ip_route 103.48.148.0/22 -add china_ip_route 103.48.152.0/22 -add china_ip_route 103.48.156.0/22 -add china_ip_route 103.48.202.0/23 -add china_ip_route 103.48.216.0/22 -add china_ip_route 103.48.220.0/22 -add china_ip_route 103.48.224.0/22 -add china_ip_route 103.48.228.0/22 -add china_ip_route 103.48.232.0/22 -add china_ip_route 103.48.236.0/22 -add china_ip_route 103.48.240.0/22 -add china_ip_route 103.48.244.0/22 -add china_ip_route 103.49.12.0/22 -add china_ip_route 103.49.20.0/22 -add china_ip_route 103.49.72.0/22 -add china_ip_route 103.49.76.0/22 -add china_ip_route 103.49.92.0/22 -add china_ip_route 103.49.96.0/22 -add china_ip_route 103.49.108.0/22 -add china_ip_route 103.49.128.0/22 -add china_ip_route 103.49.176.0/22 -add china_ip_route 103.49.180.0/22 -add china_ip_route 103.49.196.0/22 -add china_ip_route 103.50.36.0/22 -add china_ip_route 103.50.44.0/22 -add china_ip_route 103.50.48.0/22 -add china_ip_route 103.50.52.0/22 -add china_ip_route 103.50.56.0/22 -add china_ip_route 103.50.60.0/22 -add china_ip_route 103.50.64.0/22 -add china_ip_route 103.50.68.0/22 -add china_ip_route 103.50.72.0/22 -add china_ip_route 103.50.108.0/22 -add china_ip_route 103.50.112.0/22 -add china_ip_route 103.50.116.0/22 -add china_ip_route 103.50.120.0/22 -add china_ip_route 103.50.124.0/22 -add china_ip_route 103.50.132.0/22 -add china_ip_route 103.50.136.0/22 -add china_ip_route 103.50.140.0/22 -add china_ip_route 103.50.172.0/22 -add china_ip_route 103.50.176.0/22 -add china_ip_route 103.50.180.0/22 -add china_ip_route 103.50.184.0/22 -add china_ip_route 103.50.188.0/22 -add china_ip_route 103.50.192.0/22 -add china_ip_route 103.50.196.0/22 -add china_ip_route 103.50.200.0/22 -add china_ip_route 103.50.220.0/22 -add china_ip_route 103.50.224.0/22 -add china_ip_route 103.50.228.0/22 -add china_ip_route 103.50.232.0/22 -add china_ip_route 103.50.236.0/22 -add china_ip_route 103.50.240.0/22 -add china_ip_route 103.50.244.0/22 -add china_ip_route 103.50.248.0/22 -add china_ip_route 103.52.40.0/22 -add china_ip_route 103.52.72.0/22 -add china_ip_route 103.52.76.0/22 -add china_ip_route 103.52.80.0/22 -add china_ip_route 103.52.84.0/22 -add china_ip_route 103.52.96.0/22 -add china_ip_route 103.52.100.0/22 -add china_ip_route 103.52.104.0/22 -add china_ip_route 103.52.160.0/22 -add china_ip_route 103.52.164.0/22 -add china_ip_route 103.52.172.0/22 -add china_ip_route 103.52.176.0/22 -add china_ip_route 103.52.184.0/22 -add china_ip_route 103.52.196.0/22 -add china_ip_route 103.53.64.0/22 -add china_ip_route 103.53.68.0/22 -add china_ip_route 103.53.92.0/22 -add china_ip_route 103.53.100.0/22 -add china_ip_route 103.53.124.0/22 -add china_ip_route 103.53.128.0/22 -add china_ip_route 103.53.132.0/22 -add china_ip_route 103.53.136.0/22 -add china_ip_route 103.53.140.0/22 -add china_ip_route 103.53.144.0/22 -add china_ip_route 103.53.180.0/22 -add china_ip_route 103.53.204.0/22 -add china_ip_route 103.53.208.0/22 -add china_ip_route 103.53.212.0/22 -add china_ip_route 103.53.216.0/22 -add china_ip_route 103.53.236.0/22 -add china_ip_route 103.53.248.0/22 -add china_ip_route 103.54.8.0/22 -add china_ip_route 103.54.48.0/22 -add china_ip_route 103.54.160.0/22 -add china_ip_route 103.54.164.0/22 -add china_ip_route 103.54.212.0/22 -add china_ip_route 103.54.240.0/22 -add china_ip_route 103.55.24.0/22 -add china_ip_route 103.55.80.0/22 -add china_ip_route 103.55.120.0/22 -add china_ip_route 103.55.152.0/22 -add china_ip_route 103.55.172.0/22 -add china_ip_route 103.55.204.0/22 -add china_ip_route 103.55.208.0/22 -add china_ip_route 103.55.228.0/22 -add china_ip_route 103.55.236.0/22 -add china_ip_route 103.56.8.0/22 -add china_ip_route 103.56.16.0/22 -add china_ip_route 103.56.20.0/22 -add china_ip_route 103.56.32.0/22 -add china_ip_route 103.56.56.0/22 -add china_ip_route 103.56.60.0/22 -add china_ip_route 103.56.72.0/22 -add china_ip_route 103.56.76.0/22 -add china_ip_route 103.56.100.0/22 -add china_ip_route 103.56.104.0/22 -add china_ip_route 103.56.140.0/22 -add china_ip_route 103.56.152.0/22 -add china_ip_route 103.56.184.0/22 -add china_ip_route 103.56.200.0/22 -add china_ip_route 103.57.12.0/22 -add china_ip_route 103.57.52.0/22 -add china_ip_route 103.57.56.0/22 -add china_ip_route 103.57.76.0/22 -add china_ip_route 103.57.136.0/22 -add china_ip_route 103.57.196.0/22 -add china_ip_route 103.58.24.0/22 -add china_ip_route 103.59.76.0/22 -add china_ip_route 103.59.100.0/22 -add china_ip_route 103.59.112.0/22 -add china_ip_route 103.59.116.0/22 -add china_ip_route 103.59.120.0/22 -add china_ip_route 103.59.124.0/22 -add china_ip_route 103.59.128.0/22 -add china_ip_route 103.59.148.0/22 -add china_ip_route 103.59.164.0/22 -add china_ip_route 103.60.32.0/22 -add china_ip_route 103.60.44.0/22 -add china_ip_route 103.60.164.0/22 -add china_ip_route 103.60.228.0/22 -add china_ip_route 103.60.236.0/22 -add china_ip_route 103.61.60.0/22 -add china_ip_route 103.61.104.0/22 -add china_ip_route 103.61.140.0/22 -add china_ip_route 103.61.152.0/22 -add china_ip_route 103.61.156.0/22 -add china_ip_route 103.61.160.0/22 -add china_ip_route 103.61.172.0/22 -add china_ip_route 103.61.176.0/22 -add china_ip_route 103.61.188.0/22 -add china_ip_route 103.62.24.0/22 -add china_ip_route 103.62.52.0/22 -add china_ip_route 103.62.72.0/22 -add china_ip_route 103.62.76.0/22 -add china_ip_route 103.62.80.0/22 -add china_ip_route 103.62.84.0/22 -add china_ip_route 103.62.88.0/22 -add china_ip_route 103.62.96.0/22 -add china_ip_route 103.62.100.0/22 -add china_ip_route 103.62.104.0/22 -add china_ip_route 103.62.108.0/22 -add china_ip_route 103.62.112.0/22 -add china_ip_route 103.62.116.0/22 -add china_ip_route 103.62.120.0/22 -add china_ip_route 103.62.124.0/22 -add china_ip_route 103.62.128.0/22 -add china_ip_route 103.62.132.0/22 -add china_ip_route 103.62.156.0/22 -add china_ip_route 103.62.160.0/22 -add china_ip_route 103.62.164.0/22 -add china_ip_route 103.62.168.0/22 -add china_ip_route 103.62.172.0/22 -add china_ip_route 103.62.176.0/22 -add china_ip_route 103.62.180.0/22 -add china_ip_route 103.62.184.0/22 -add china_ip_route 103.62.188.0/22 -add china_ip_route 103.62.192.0/22 -add china_ip_route 103.62.204.0/22 -add china_ip_route 103.62.208.0/22 -add china_ip_route 103.62.212.0/22 -add china_ip_route 103.62.216.0/22 -add china_ip_route 103.62.220.0/22 -add china_ip_route 103.62.224.0/22 -add china_ip_route 103.63.32.0/22 -add china_ip_route 103.63.36.0/22 -add china_ip_route 103.63.40.0/22 -add china_ip_route 103.63.44.0/22 -add china_ip_route 103.63.48.0/22 -add china_ip_route 103.63.52.0/22 -add china_ip_route 103.63.56.0/22 -add china_ip_route 103.63.60.0/22 -add china_ip_route 103.63.64.0/22 -add china_ip_route 103.63.68.0/22 -add china_ip_route 103.63.72.0/22 -add china_ip_route 103.63.76.0/22 -add china_ip_route 103.63.80.0/22 -add china_ip_route 103.63.84.0/22 -add china_ip_route 103.63.88.0/22 -add china_ip_route 103.63.140.0/22 -add china_ip_route 103.63.144.0/22 -add china_ip_route 103.63.152.0/22 -add china_ip_route 103.63.160.0/22 -add china_ip_route 103.63.164.0/22 -add china_ip_route 103.63.168.0/22 -add china_ip_route 103.63.172.0/22 -add china_ip_route 103.63.176.0/22 -add china_ip_route 103.63.180.0/22 -add china_ip_route 103.63.184.0/22 -add china_ip_route 103.63.192.0/22 -add china_ip_route 103.63.196.0/22 -add china_ip_route 103.63.200.0/22 -add china_ip_route 103.63.204.0/22 -add china_ip_route 103.63.208.0/22 -add china_ip_route 103.63.240.0/22 -add china_ip_route 103.63.244.0/22 -add china_ip_route 103.63.248.0/22 -add china_ip_route 103.63.252.0/22 -add china_ip_route 103.64.0.0/22 -add china_ip_route 103.64.4.0/22 -add china_ip_route 103.64.24.0/22 -add china_ip_route 103.64.28.0/22 -add china_ip_route 103.64.32.0/22 -add china_ip_route 103.64.36.0/22 -add china_ip_route 103.64.40.0/22 -add china_ip_route 103.64.44.0/22 -add china_ip_route 103.64.48.0/22 -add china_ip_route 103.64.52.0/22 -add china_ip_route 103.64.56.0/22 -add china_ip_route 103.64.60.0/22 -add china_ip_route 103.64.64.0/22 -add china_ip_route 103.64.68.0/22 -add china_ip_route 103.64.72.0/22 -add china_ip_route 103.64.76.0/22 -add china_ip_route 103.64.80.0/22 -add china_ip_route 103.64.84.0/22 -add china_ip_route 103.64.88.0/22 -add china_ip_route 103.64.92.0/22 -add china_ip_route 103.64.96.0/22 -add china_ip_route 103.64.100.0/22 -add china_ip_route 103.64.104.0/22 -add china_ip_route 103.64.108.0/22 -add china_ip_route 103.64.112.0/22 -add china_ip_route 103.64.116.0/22 -add china_ip_route 103.64.120.0/22 -add china_ip_route 103.64.124.0/22 -add china_ip_route 103.64.140.0/22 -add china_ip_route 103.64.144.0/22 -add china_ip_route 103.64.152.0/22 -add china_ip_route 103.64.156.0/22 -add china_ip_route 103.64.160.0/22 -add china_ip_route 103.64.164.0/22 -add china_ip_route 103.64.168.0/22 -add china_ip_route 103.64.172.0/22 -add china_ip_route 103.64.176.0/22 -add china_ip_route 103.64.180.0/22 -add china_ip_route 103.64.184.0/22 -add china_ip_route 103.64.188.0/22 -add china_ip_route 103.64.192.0/22 -add china_ip_route 103.64.196.0/22 -add china_ip_route 103.64.200.0/22 -add china_ip_route 103.64.204.0/22 -add china_ip_route 103.64.208.0/22 -add china_ip_route 103.64.212.0/22 -add china_ip_route 103.64.216.0/22 -add china_ip_route 103.64.220.0/22 -add china_ip_route 103.64.224.0/22 -add china_ip_route 103.64.228.0/22 -add china_ip_route 103.64.232.0/22 -add china_ip_route 103.64.236.0/22 -add china_ip_route 103.64.240.0/22 -add china_ip_route 103.64.244.0/22 -add china_ip_route 103.64.248.0/22 -add china_ip_route 103.64.252.0/22 -add china_ip_route 103.65.0.0/22 -add china_ip_route 103.65.4.0/22 -add china_ip_route 103.65.8.0/22 -add china_ip_route 103.65.12.0/22 -add china_ip_route 103.65.16.0/22 -add china_ip_route 103.65.36.0/22 -add china_ip_route 103.65.40.0/22 -add china_ip_route 103.65.48.0/22 -add china_ip_route 103.65.52.0/22 -add china_ip_route 103.65.56.0/22 -add china_ip_route 103.65.60.0/22 -add china_ip_route 103.65.64.0/22 -add china_ip_route 103.65.68.0/22 -add china_ip_route 103.65.72.0/22 -add china_ip_route 103.65.76.0/22 -add china_ip_route 103.65.80.0/22 -add china_ip_route 103.65.84.0/22 -add china_ip_route 103.65.88.0/22 -add china_ip_route 103.65.92.0/22 -add china_ip_route 103.65.100.0/22 -add china_ip_route 103.65.104.0/22 -add china_ip_route 103.65.108.0/22 -add china_ip_route 103.65.112.0/22 -add china_ip_route 103.65.144.0/22 -add china_ip_route 103.65.148.0/22 -add china_ip_route 103.65.152.0/22 -add china_ip_route 103.65.156.0/22 -add china_ip_route 103.65.160.0/22 -add china_ip_route 103.65.164.0/22 -add china_ip_route 103.65.168.0/22 -add china_ip_route 103.65.172.0/22 -add china_ip_route 103.66.32.0/22 -add china_ip_route 103.66.40.0/22 -add china_ip_route 103.66.92.0/22 -add china_ip_route 103.66.108.0/22 -add china_ip_route 103.66.200.0/22 -add china_ip_route 103.66.216.0/22 -add china_ip_route 103.66.240.0/22 -add china_ip_route 103.66.244.0/22 -add china_ip_route 103.66.248.0/22 -add china_ip_route 103.66.252.0/22 -add china_ip_route 103.67.0.0/22 -add china_ip_route 103.67.4.0/22 -add china_ip_route 103.67.8.0/22 -add china_ip_route 103.67.100.0/22 -add china_ip_route 103.67.104.0/22 -add china_ip_route 103.67.108.0/22 -add china_ip_route 103.67.112.0/22 -add china_ip_route 103.67.116.0/22 -add china_ip_route 103.67.120.0/22 -add china_ip_route 103.67.124.0/22 -add china_ip_route 103.67.128.0/22 -add china_ip_route 103.67.132.0/22 -add china_ip_route 103.67.136.0/22 -add china_ip_route 103.67.140.0/22 -add china_ip_route 103.67.144.0/22 -add china_ip_route 103.67.148.0/22 -add china_ip_route 103.67.172.0/22 -add china_ip_route 103.67.192.0/22 -add china_ip_route 103.67.212.0/22 -add china_ip_route 103.67.252.0/22 -add china_ip_route 103.68.64.0/22 -add china_ip_route 103.68.88.0/22 -add china_ip_route 103.68.100.0/22 -add china_ip_route 103.68.128.0/22 -add china_ip_route 103.68.192.0/22 -add china_ip_route 103.69.16.0/22 -add china_ip_route 103.69.116.0/22 -add china_ip_route 103.69.132.0/22 -add china_ip_route 103.69.152.0/22 -add china_ip_route 103.70.8.0/22 -add china_ip_route 103.70.148.0/22 -add china_ip_route 103.70.220.0/22 -add china_ip_route 103.70.224.0/22 -add china_ip_route 103.70.236.0/22 -add china_ip_route 103.70.252.0/22 -add china_ip_route 103.71.0.0/22 -add china_ip_route 103.71.32.0/22 -add china_ip_route 103.71.48.0/22 -add china_ip_route 103.71.68.0/22 -add china_ip_route 103.71.72.0/22 -add china_ip_route 103.71.80.0/22 -add china_ip_route 103.71.84.0/22 -add china_ip_route 103.71.88.0/22 -add china_ip_route 103.71.120.0/22 -add china_ip_route 103.71.124.0/22 -add china_ip_route 103.71.128.0/22 -add china_ip_route 103.71.144.0/22 -add china_ip_route 103.71.196.0/22 -add china_ip_route 103.71.200.0/22 -add china_ip_route 103.71.232.0/22 -add china_ip_route 103.72.12.0/22 -add china_ip_route 103.72.16.0/22 -add china_ip_route 103.72.20.0/22 -add china_ip_route 103.72.24.0/22 -add china_ip_route 103.72.28.0/22 -add china_ip_route 103.72.32.0/22 -add china_ip_route 103.72.36.0/22 -add china_ip_route 103.72.40.0/22 -add china_ip_route 103.72.44.0/22 -add china_ip_route 103.72.48.0/22 -add china_ip_route 103.72.52.0/22 -add china_ip_route 103.72.112.0/22 -add china_ip_route 103.72.116.0/22 -add china_ip_route 103.72.120.0/22 -add china_ip_route 103.72.124.0/22 -add china_ip_route 103.72.128.0/22 -add china_ip_route 103.72.132.0/22 -add china_ip_route 103.72.148.0/22 -add china_ip_route 103.72.172.0/22 -add china_ip_route 103.72.180.0/22 -add china_ip_route 103.72.224.0/22 -add china_ip_route 103.72.228.0/22 -add china_ip_route 103.72.232.0/22 -add china_ip_route 103.72.236.0/22 -add china_ip_route 103.72.240.0/22 -add china_ip_route 103.72.244.0/22 -add china_ip_route 103.72.248.0/22 -add china_ip_route 103.72.252.0/22 -add china_ip_route 103.73.0.0/22 -add china_ip_route 103.73.4.0/22 -add china_ip_route 103.73.8.0/22 -add china_ip_route 103.73.12.0/22 -add china_ip_route 103.73.16.0/22 -add china_ip_route 103.73.20.0/22 -add china_ip_route 103.73.24.0/22 -add china_ip_route 103.73.28.0/22 -add china_ip_route 103.73.48.0/22 -add china_ip_route 103.73.96.0/22 -add china_ip_route 103.73.116.0/22 -add china_ip_route 103.73.120.0/22 -add china_ip_route 103.73.128.0/22 -add china_ip_route 103.73.132.0/22 -add china_ip_route 103.73.136.0/22 -add china_ip_route 103.73.140.0/22 -add china_ip_route 103.73.144.0/22 -add china_ip_route 103.73.168.0/22 -add china_ip_route 103.73.176.0/22 -add china_ip_route 103.73.204.0/22 -add china_ip_route 103.73.208.0/22 -add china_ip_route 103.73.240.0/22 -add china_ip_route 103.73.244.0/22 -add china_ip_route 103.73.248.0/22 -add china_ip_route 103.74.24.0/22 -add china_ip_route 103.74.28.0/22 -add china_ip_route 103.74.32.0/22 -add china_ip_route 103.74.36.0/22 -add china_ip_route 103.74.40.0/22 -add china_ip_route 103.74.44.0/22 -add china_ip_route 103.74.48.0/22 -add china_ip_route 103.74.56.0/22 -add china_ip_route 103.74.60.0/22 -add china_ip_route 103.74.80.0/22 -add china_ip_route 103.74.124.0/22 -add china_ip_route 103.74.148.0/22 -add china_ip_route 103.74.152.0/22 -add china_ip_route 103.74.156.0/22 -add china_ip_route 103.74.204.0/22 -add china_ip_route 103.74.232.0/22 -add china_ip_route 103.75.16.0/22 -add china_ip_route 103.75.88.0/22 -add china_ip_route 103.75.92.0/22 -add china_ip_route 103.75.104.0/22 -add china_ip_route 103.75.108.0/22 -add china_ip_route 103.75.112.0/22 -add china_ip_route 103.75.120.0/22 -add china_ip_route 103.75.128.0/22 -add china_ip_route 103.75.144.0/22 -add china_ip_route 103.75.152.0/22 -add china_ip_route 103.75.236.0/24 -add china_ip_route 103.76.60.0/22 -add china_ip_route 103.76.64.0/22 -add china_ip_route 103.76.68.0/22 -add china_ip_route 103.76.72.0/22 -add china_ip_route 103.76.84.0/22 -add china_ip_route 103.76.92.0/22 -add china_ip_route 103.76.216.0/22 -add china_ip_route 103.76.220.0/22 -add china_ip_route 103.76.224.0/22 -add china_ip_route 103.77.28.0/22 -add china_ip_route 103.77.52.0/22 -add china_ip_route 103.77.56.0/22 -add china_ip_route 103.77.72.0/22 -add china_ip_route 103.77.88.0/22 -add china_ip_route 103.77.92.0/22 -add china_ip_route 103.77.132.0/22 -add china_ip_route 103.77.148.0/22 -add china_ip_route 103.77.220.0/22 -add china_ip_route 103.78.56.0/22 -add china_ip_route 103.78.60.0/22 -add china_ip_route 103.78.64.0/22 -add china_ip_route 103.78.68.0/22 -add china_ip_route 103.78.124.0/22 -add china_ip_route 103.78.172.0/22 -add china_ip_route 103.78.176.0/22 -add china_ip_route 103.78.196.0/22 -add china_ip_route 103.78.228.0/22 -add china_ip_route 103.79.24.0/22 -add china_ip_route 103.79.28.0/22 -add china_ip_route 103.79.36.0/22 -add china_ip_route 103.79.40.0/22 -add china_ip_route 103.79.44.0/22 -add china_ip_route 103.79.52.0/22 -add china_ip_route 103.79.56.0/22 -add china_ip_route 103.79.60.0/22 -add china_ip_route 103.79.64.0/22 -add china_ip_route 103.79.68.0/22 -add china_ip_route 103.79.80.0/22 -add china_ip_route 103.79.84.0/22 -add china_ip_route 103.79.120.0/22 -add china_ip_route 103.79.136.0/22 -add china_ip_route 103.79.188.0/22 -add china_ip_route 103.79.192.0/22 -add china_ip_route 103.79.196.0/22 -add china_ip_route 103.79.200.0/22 -add china_ip_route 103.79.204.0/22 -add china_ip_route 103.79.208.0/22 -add china_ip_route 103.79.212.0/22 -add china_ip_route 103.79.240.0/22 -add china_ip_route 103.80.24.0/22 -add china_ip_route 103.80.28.0/22 -add china_ip_route 103.80.44.0/22 -add china_ip_route 103.80.72.0/22 -add china_ip_route 103.80.176.0/22 -add china_ip_route 103.80.180.0/22 -add china_ip_route 103.80.184.0/22 -add china_ip_route 103.80.192.0/22 -add china_ip_route 103.80.200.0/22 -add china_ip_route 103.80.232.0/22 -add china_ip_route 103.81.4.0/22 -add china_ip_route 103.81.8.0/22 -add china_ip_route 103.81.16.0/22 -add china_ip_route 103.81.20.0/22 -add china_ip_route 103.81.44.0/22 -add china_ip_route 103.81.48.0/22 -add china_ip_route 103.81.96.0/22 -add china_ip_route 103.81.120.0/22 -add china_ip_route 103.81.148.0/22 -add china_ip_route 103.81.164.0/22 -add china_ip_route 103.81.168.0/22 -add china_ip_route 103.81.183.0/24 -add china_ip_route 103.81.184.0/22 -add china_ip_route 103.81.200.0/22 -add china_ip_route 103.81.232.0/22 -add china_ip_route 103.82.52.0/22 -add china_ip_route 103.82.60.0/22 -add china_ip_route 103.82.68.0/22 -add china_ip_route 103.82.84.0/22 -add china_ip_route 103.82.104.0/22 -add china_ip_route 103.82.224.0/22 -add china_ip_route 103.82.236.0/22 -add china_ip_route 103.83.44.0/22 -add china_ip_route 103.83.52.0/22 -add china_ip_route 103.83.60.0/22 -add china_ip_route 103.83.64.0/22 -add china_ip_route 103.83.72.0/22 -add china_ip_route 103.83.112.0/22 -add china_ip_route 103.83.120.0/22 -add china_ip_route 103.83.180.0/22 -add china_ip_route 103.84.0.0/22 -add china_ip_route 103.84.12.0/22 -add china_ip_route 103.84.16.0/22 -add china_ip_route 103.84.20.0/22 -add china_ip_route 103.84.24.0/22 -add china_ip_route 103.84.28.0/22 -add china_ip_route 103.84.48.0/22 -add china_ip_route 103.84.64.0/22 -add china_ip_route 103.84.72.0/22 -add china_ip_route 103.84.92.0/22 -add china_ip_route 103.84.108.0/22 -add china_ip_route 103.84.136.0/22 -add china_ip_route 103.85.20.0/22 -add china_ip_route 103.85.24.0/22 -add china_ip_route 103.85.44.0/22 -add china_ip_route 103.85.48.0/22 -add china_ip_route 103.85.84.0/22 -add china_ip_route 103.85.136.0/22 -add china_ip_route 103.85.144.0/22 -add china_ip_route 103.85.164.0/22 -add china_ip_route 103.85.168.0/22 -add china_ip_route 103.85.172.0/22 -add china_ip_route 103.85.176.0/22 -add china_ip_route 103.85.224.0/22 -add china_ip_route 103.86.28.0/22 -add china_ip_route 103.86.32.0/22 -add china_ip_route 103.86.44.0/22 -add china_ip_route 103.86.60.0/22 -add china_ip_route 103.86.80.0/22 -add china_ip_route 103.86.84.0/22 -add china_ip_route 103.86.204.0/22 -add china_ip_route 103.86.208.0/22 -add china_ip_route 103.86.212.0/22 -add china_ip_route 103.86.216.0/22 -add china_ip_route 103.86.220.0/22 -add china_ip_route 103.86.224.0/22 -add china_ip_route 103.86.228.0/22 -add china_ip_route 103.86.232.0/22 -add china_ip_route 103.86.236.0/22 -add china_ip_route 103.86.240.0/22 -add china_ip_route 103.86.244.0/22 -add china_ip_route 103.86.248.0/22 -add china_ip_route 103.86.252.0/22 -add china_ip_route 103.87.0.0/22 -add china_ip_route 103.87.4.0/22 -add china_ip_route 103.87.20.0/22 -add china_ip_route 103.87.32.0/22 -add china_ip_route 103.87.72.0/22 -add china_ip_route 103.87.96.0/22 -add china_ip_route 103.87.132.0/22 -add china_ip_route 103.87.180.0/22 -add china_ip_route 103.87.224.0/22 -add china_ip_route 103.88.4.0/22 -add china_ip_route 103.88.8.0/22 -add china_ip_route 103.88.12.0/22 -add china_ip_route 103.88.16.0/22 -add china_ip_route 103.88.20.0/22 -add china_ip_route 103.88.32.0/22 -add china_ip_route 103.88.36.0/22 -add china_ip_route 103.88.60.0/22 -add china_ip_route 103.88.64.0/22 -add china_ip_route 103.88.72.0/22 -add china_ip_route 103.88.96.0/22 -add china_ip_route 103.88.164.0/22 -add china_ip_route 103.88.176.0/22 -add china_ip_route 103.88.184.0/22 -add china_ip_route 103.88.188.0/22 -add china_ip_route 103.88.212.0/22 -add china_ip_route 103.89.28.0/22 -add china_ip_route 103.89.96.0/22 -add china_ip_route 103.89.100.0/22 -add china_ip_route 103.89.104.0/22 -add china_ip_route 103.89.108.0/22 -add china_ip_route 103.89.112.0/22 -add china_ip_route 103.89.116.0/22 -add china_ip_route 103.89.148.0/22 -add china_ip_route 103.89.172.0/22 -add china_ip_route 103.89.184.0/22 -add china_ip_route 103.89.188.0/22 -add china_ip_route 103.89.192.0/22 -add china_ip_route 103.89.196.0/22 -add china_ip_route 103.89.200.0/22 -add china_ip_route 103.89.204.0/22 -add china_ip_route 103.89.208.0/22 -add china_ip_route 103.89.212.0/22 -add china_ip_route 103.89.216.0/22 -add china_ip_route 103.89.220.0/22 -add china_ip_route 103.89.224.0/22 -add china_ip_route 103.89.228.0/22 -add china_ip_route 103.90.52.0/22 -add china_ip_route 103.90.92.0/22 -add china_ip_route 103.90.100.0/22 -add china_ip_route 103.90.104.0/22 -add china_ip_route 103.90.108.0/22 -add china_ip_route 103.90.112.0/22 -add china_ip_route 103.90.116.0/22 -add china_ip_route 103.90.120.0/22 -add china_ip_route 103.90.124.0/22 -add china_ip_route 103.90.128.0/22 -add china_ip_route 103.90.132.0/22 -add china_ip_route 103.90.152.0/22 -add china_ip_route 103.90.168.0/22 -add china_ip_route 103.90.173.0/24 -add china_ip_route 103.90.176.0/22 -add china_ip_route 103.90.188.0/22 -add china_ip_route 103.90.192.0/22 -add china_ip_route 103.91.36.0/22 -add china_ip_route 103.91.40.0/22 -add china_ip_route 103.91.108.0/22 -add china_ip_route 103.91.152.0/22 -add china_ip_route 103.91.176.0/22 -add china_ip_route 103.91.200.0/22 -add china_ip_route 103.91.208.0/22 -add china_ip_route 103.91.212.0/22 -add china_ip_route 103.91.219.0/24 -add china_ip_route 103.91.236.0/22 -add china_ip_route 103.91.252.0/22 -add china_ip_route 103.92.0.0/22 -add china_ip_route 103.92.4.0/22 -add china_ip_route 103.92.8.0/22 -add china_ip_route 103.92.12.0/22 -add china_ip_route 103.92.48.0/22 -add china_ip_route 103.92.52.0/22 -add china_ip_route 103.92.56.0/22 -add china_ip_route 103.92.60.0/22 -add china_ip_route 103.92.64.0/22 -add china_ip_route 103.92.68.0/22 -add china_ip_route 103.92.72.0/22 -add china_ip_route 103.92.76.0/22 -add china_ip_route 103.92.80.0/22 -add china_ip_route 103.92.86.0/24 -add china_ip_route 103.92.88.0/22 -add china_ip_route 103.92.108.0/22 -add china_ip_route 103.92.124.0/22 -add china_ip_route 103.92.128.0/24 -add china_ip_route 103.92.132.0/22 -add china_ip_route 103.92.156.0/22 -add china_ip_route 103.92.164.0/22 -add china_ip_route 103.92.168.0/22 -add china_ip_route 103.92.172.0/22 -add china_ip_route 103.92.176.0/22 -add china_ip_route 103.92.180.0/22 -add china_ip_route 103.92.184.0/22 -add china_ip_route 103.92.188.0/22 -add china_ip_route 103.92.192.0/22 -add china_ip_route 103.92.236.0/22 -add china_ip_route 103.92.240.0/22 -add china_ip_route 103.92.244.0/22 -add china_ip_route 103.92.248.0/22 -add china_ip_route 103.92.252.0/22 -add china_ip_route 103.93.0.0/22 -add china_ip_route 103.93.4.0/22 -add china_ip_route 103.93.28.0/22 -add china_ip_route 103.93.76.0/22 -add china_ip_route 103.93.84.0/22 -add china_ip_route 103.93.152.0/22 -add china_ip_route 103.93.180.0/22 -add china_ip_route 103.93.204.0/22 -add china_ip_route 103.94.12.0/22 -add china_ip_route 103.94.20.0/22 -add china_ip_route 103.94.28.0/22 -add china_ip_route 103.94.32.0/22 -add china_ip_route 103.94.36.0/22 -add china_ip_route 103.94.40.0/22 -add china_ip_route 103.94.44.0/22 -add china_ip_route 103.94.72.0/22 -add china_ip_route 103.94.88.0/22 -add china_ip_route 103.94.116.0/22 -add china_ip_route 103.94.160.0/22 -add china_ip_route 103.94.180.0/22 -add china_ip_route 103.94.200.0/22 -add china_ip_route 103.95.28.0/22 -add china_ip_route 103.95.52.0/22 -add china_ip_route 103.95.64.0/22 -add china_ip_route 103.95.68.0/22 -add china_ip_route 103.95.88.0/22 -add china_ip_route 103.95.92.0/22 -add china_ip_route 103.95.116.0/22 -add china_ip_route 103.95.128.0/22 -add china_ip_route 103.95.136.0/22 -add china_ip_route 103.95.140.0/22 -add china_ip_route 103.95.144.0/22 -add china_ip_route 103.95.152.0/22 -add china_ip_route 103.95.207.0/24 -add china_ip_route 103.95.216.0/22 -add china_ip_route 103.95.220.0/22 -add china_ip_route 103.95.224.0/22 -add china_ip_route 103.95.236.0/22 -add china_ip_route 103.95.240.0/22 -add china_ip_route 103.95.244.0/22 -add china_ip_route 103.95.248.0/22 -add china_ip_route 103.95.252.0/22 -add china_ip_route 103.96.0.0/22 -add china_ip_route 103.96.8.0/22 -add china_ip_route 103.96.80.0/22 -add china_ip_route 103.96.124.0/22 -add china_ip_route 103.96.136.0/22 -add china_ip_route 103.96.140.0/24 -add china_ip_route 103.96.148.0/22 -add china_ip_route 103.96.152.0/22 -add china_ip_route 103.96.156.0/22 -add china_ip_route 103.96.160.0/22 -add china_ip_route 103.96.164.0/22 -add china_ip_route 103.96.168.0/22 -add china_ip_route 103.96.172.0/22 -add china_ip_route 103.96.176.0/22 -add china_ip_route 103.96.180.0/22 -add china_ip_route 103.96.184.0/22 -add china_ip_route 103.96.188.0/22 -add china_ip_route 103.96.192.0/22 -add china_ip_route 103.96.196.0/22 -add china_ip_route 103.96.200.0/22 -add china_ip_route 103.96.204.0/22 -add china_ip_route 103.96.208.0/22 -add china_ip_route 103.96.212.0/22 -add china_ip_route 103.96.216.0/22 -add china_ip_route 103.97.8.0/22 -add china_ip_route 103.97.12.0/22 -add china_ip_route 103.97.16.0/22 -add china_ip_route 103.97.20.0/22 -add china_ip_route 103.97.24.0/22 -add china_ip_route 103.97.28.0/22 -add china_ip_route 103.97.32.0/22 -add china_ip_route 103.97.36.0/22 -add china_ip_route 103.97.40.0/22 -add china_ip_route 103.97.56.0/22 -add china_ip_route 103.97.60.0/22 -add china_ip_route 103.97.64.0/22 -add china_ip_route 103.97.68.0/22 -add china_ip_route 103.97.72.0/22 -add china_ip_route 103.97.80.0/22 -add china_ip_route 103.97.112.0/22 -add china_ip_route 103.97.116.0/22 -add china_ip_route 103.97.128.0/22 -add china_ip_route 103.97.144.0/22 -add china_ip_route 103.97.148.0/22 -add china_ip_route 103.97.188.0/22 -add china_ip_route 103.97.192.0/22 -add china_ip_route 103.97.228.0/23 -add china_ip_route 103.98.28.0/23 -add china_ip_route 103.98.40.0/22 -add china_ip_route 103.98.44.0/22 -add china_ip_route 103.98.48.0/22 -add china_ip_route 103.98.56.0/22 -add china_ip_route 103.98.80.0/22 -add china_ip_route 103.98.88.0/22 -add china_ip_route 103.98.92.0/22 -add china_ip_route 103.98.96.0/22 -add china_ip_route 103.98.100.0/22 -add china_ip_route 103.98.124.0/22 -add china_ip_route 103.98.136.0/22 -add china_ip_route 103.98.140.0/22 -add china_ip_route 103.98.144.0/22 -add china_ip_route 103.98.164.0/22 -add china_ip_route 103.98.168.0/22 -add china_ip_route 103.98.180.0/22 -add china_ip_route 103.98.196.0/22 -add china_ip_route 103.98.216.0/22 -add china_ip_route 103.98.220.0/22 -add china_ip_route 103.98.224.0/22 -add china_ip_route 103.98.228.0/22 -add china_ip_route 103.98.232.0/22 -add china_ip_route 103.98.240.0/22 -add china_ip_route 103.98.244.0/22 -add china_ip_route 103.98.248.0/22 -add china_ip_route 103.98.252.0/22 -add china_ip_route 103.99.40.0/23 -add china_ip_route 103.99.52.0/22 -add china_ip_route 103.99.56.0/22 -add china_ip_route 103.99.60.0/22 -add china_ip_route 103.99.76.0/22 -add china_ip_route 103.99.104.0/22 -add china_ip_route 103.99.116.0/22 -add china_ip_route 103.99.120.0/22 -add china_ip_route 103.99.152.0/22 -add china_ip_route 103.99.220.0/22 -add china_ip_route 103.99.232.0/22 -add china_ip_route 103.99.236.0/22 -add china_ip_route 103.100.0.0/22 -add china_ip_route 103.100.32.0/22 -add china_ip_route 103.100.40.0/22 -add china_ip_route 103.100.48.0/22 -add china_ip_route 103.100.52.0/22 -add china_ip_route 103.100.56.0/22 -add china_ip_route 103.100.60.0/22 -add china_ip_route 103.100.64.0/22 -add china_ip_route 103.100.68.0/22 -add china_ip_route 103.100.88.0/22 -add china_ip_route 103.100.116.0/22 -add china_ip_route 103.100.140.0/22 -add china_ip_route 103.100.144.0/22 -add china_ip_route 103.100.236.0/22 -add china_ip_route 103.100.240.0/22 -add china_ip_route 103.100.248.0/22 -add china_ip_route 103.100.252.0/22 -add china_ip_route 103.101.4.0/22 -add china_ip_route 103.101.8.0/22 -add china_ip_route 103.101.12.0/22 -add china_ip_route 103.101.28.0/22 -add china_ip_route 103.101.60.0/22 -add china_ip_route 103.101.120.0/22 -add china_ip_route 103.101.124.0/22 -add china_ip_route 103.101.144.0/22 -add china_ip_route 103.101.148.0/22 -add china_ip_route 103.101.153.0/24 -add china_ip_route 103.101.180.0/22 -add china_ip_route 103.101.184.0/22 -add china_ip_route 103.102.76.0/22 -add china_ip_route 103.102.80.0/22 -add china_ip_route 103.102.168.0/22 -add china_ip_route 103.102.172.0/22 -add china_ip_route 103.102.180.0/22 -add china_ip_route 103.102.184.0/22 -add china_ip_route 103.102.188.0/22 -add china_ip_route 103.102.192.0/22 -add china_ip_route 103.102.196.0/22 -add china_ip_route 103.102.200.0/22 -add china_ip_route 103.102.208.0/22 -add china_ip_route 103.102.212.0/22 -add china_ip_route 103.103.12.0/22 -add china_ip_route 103.103.16.0/22 -add china_ip_route 103.103.36.0/22 -add china_ip_route 103.103.68.0/22 -add china_ip_route 103.103.72.0/22 -add china_ip_route 103.103.176.0/22 -add china_ip_route 103.103.188.0/22 -add china_ip_route 103.103.200.0/22 -add china_ip_route 103.103.204.0/22 -add china_ip_route 103.103.220.0/22 -add china_ip_route 103.103.224.0/22 -add china_ip_route 103.103.228.0/22 -add china_ip_route 103.103.232.0/22 -add china_ip_route 103.103.248.0/22 -add china_ip_route 103.103.252.0/22 -add china_ip_route 103.104.0.0/22 -add china_ip_route 103.104.4.0/22 -add china_ip_route 103.104.36.0/22 -add china_ip_route 103.104.40.0/22 -add china_ip_route 103.104.64.0/22 -add china_ip_route 103.104.104.0/22 -add china_ip_route 103.104.152.0/22 -add china_ip_route 103.104.168.0/22 -add china_ip_route 103.104.172.0/22 -add china_ip_route 103.104.188.0/22 -add china_ip_route 103.104.198.0/23 -add china_ip_route 103.104.252.0/22 -add china_ip_route 103.105.0.0/22 -add china_ip_route 103.105.4.0/22 -add china_ip_route 103.105.12.0/22 -add china_ip_route 103.105.16.0/22 -add china_ip_route 103.105.23.0/24 -add china_ip_route 103.105.60.0/22 -add china_ip_route 103.105.116.0/22 -add china_ip_route 103.105.132.0/22 -add china_ip_route 103.105.180.0/22 -add china_ip_route 103.105.184.0/22 -add china_ip_route 103.105.200.0/22 -add china_ip_route 103.105.204.0/22 -add china_ip_route 103.105.220.0/22 -add china_ip_route 103.106.36.0/22 -add china_ip_route 103.106.40.0/22 -add china_ip_route 103.106.44.0/22 -add china_ip_route 103.106.60.0/22 -add china_ip_route 103.106.68.0/22 -add china_ip_route 103.106.96.0/22 -add china_ip_route 103.106.120.0/22 -add china_ip_route 103.106.128.0/22 -add china_ip_route 103.106.132.0/22 -add china_ip_route 103.106.160.0/22 -add china_ip_route 103.106.188.0/22 -add china_ip_route 103.106.196.0/22 -add china_ip_route 103.106.202.0/23 -add china_ip_route 103.106.212.0/22 -add china_ip_route 103.106.244.0/22 -add china_ip_route 103.106.252.0/22 -add china_ip_route 103.107.0.0/22 -add china_ip_route 103.107.8.0/24 -add china_ip_route 103.107.28.0/22 -add china_ip_route 103.107.32.0/22 -add china_ip_route 103.107.44.0/22 -add china_ip_route 103.107.72.0/22 -add china_ip_route 103.107.108.0/22 -add china_ip_route 103.107.164.0/22 -add china_ip_route 103.107.168.0/22 -add china_ip_route 103.107.188.0/22 -add china_ip_route 103.107.192.0/22 -add china_ip_route 103.107.208.0/22 -add china_ip_route 103.107.212.0/22 -add china_ip_route 103.107.216.0/22 -add china_ip_route 103.107.220.0/22 -add china_ip_route 103.108.52.0/22 -add china_ip_route 103.108.160.0/22 -add china_ip_route 103.108.164.0/22 -add china_ip_route 103.108.184.0/23 -add china_ip_route 103.108.188.0/23 -add china_ip_route 103.108.192.0/22 -add china_ip_route 103.108.196.0/22 -add china_ip_route 103.108.208.0/22 -add china_ip_route 103.108.212.0/22 -add china_ip_route 103.108.224.0/22 -add china_ip_route 103.108.244.0/22 -add china_ip_route 103.108.251.0/24 -add china_ip_route 103.109.20.0/22 -add china_ip_route 103.109.48.0/22 -add china_ip_route 103.109.88.0/22 -add china_ip_route 103.109.106.0/23 -add china_ip_route 103.109.248.0/22 -add china_ip_route 103.110.80.0/23 -add china_ip_route 103.110.92.0/22 -add china_ip_route 103.110.116.0/22 -add china_ip_route 103.110.127.0/24 -add china_ip_route 103.110.128.0/23 -add china_ip_route 103.110.132.0/22 -add china_ip_route 103.110.136.0/22 -add china_ip_route 103.110.152.0/22 -add china_ip_route 103.110.156.0/22 -add china_ip_route 103.110.188.0/22 -add china_ip_route 103.110.204.0/22 -add china_ip_route 103.111.64.0/22 -add china_ip_route 103.111.172.0/22 -add china_ip_route 103.111.252.0/22 -add china_ip_route 103.112.28.0/22 -add china_ip_route 103.112.68.0/22 -add china_ip_route 103.112.72.0/22 -add china_ip_route 103.112.88.0/22 -add china_ip_route 103.112.92.0/22 -add china_ip_route 103.112.96.0/22 -add china_ip_route 103.112.108.0/22 -add china_ip_route 103.112.112.0/22 -add china_ip_route 103.112.116.0/22 -add china_ip_route 103.112.140.0/22 -add china_ip_route 103.112.172.0/22 -add china_ip_route 103.112.184.0/22 -add china_ip_route 103.112.208.0/22 -add china_ip_route 103.113.4.0/22 -add china_ip_route 103.113.92.0/22 -add china_ip_route 103.113.144.0/22 -add china_ip_route 103.113.220.0/22 -add china_ip_route 103.113.232.0/22 -add china_ip_route 103.113.236.0/22 -add china_ip_route 103.114.4.0/22 -add china_ip_route 103.114.28.0/22 -add china_ip_route 103.114.68.0/22 -add china_ip_route 103.114.72.0/22 -add china_ip_route 103.114.100.0/22 -add china_ip_route 103.114.132.0/22 -add china_ip_route 103.114.148.0/22 -add china_ip_route 103.114.156.0/22 -add china_ip_route 103.114.176.0/22 -add china_ip_route 103.114.212.0/22 -add china_ip_route 103.114.236.0/22 -add china_ip_route 103.114.240.0/22 -add china_ip_route 103.115.16.0/22 -add china_ip_route 103.115.40.0/22 -add china_ip_route 103.115.44.0/22 -add china_ip_route 103.115.48.0/22 -add china_ip_route 103.115.52.0/22 -add china_ip_route 103.115.56.0/22 -add china_ip_route 103.115.60.0/22 -add china_ip_route 103.115.64.0/22 -add china_ip_route 103.115.68.0/22 -add china_ip_route 103.115.92.0/22 -add china_ip_route 103.115.120.0/22 -add china_ip_route 103.115.148.0/22 -add china_ip_route 103.115.204.0/23 -add china_ip_route 103.115.248.0/22 -add china_ip_route 103.116.20.0/22 -add china_ip_route 103.116.40.0/22 -add china_ip_route 103.116.64.0/22 -add china_ip_route 103.116.72.0/22 -add china_ip_route 103.116.76.0/22 -add china_ip_route 103.116.92.0/22 -add china_ip_route 103.116.120.0/22 -add china_ip_route 103.116.128.0/22 -add china_ip_route 103.116.132.0/23 -add china_ip_route 103.116.148.0/22 -add china_ip_route 103.116.184.0/22 -add china_ip_route 103.116.206.0/23 -add china_ip_route 103.116.220.0/22 -add china_ip_route 103.116.224.0/22 -add china_ip_route 103.116.228.0/22 -add china_ip_route 103.117.16.0/22 -add china_ip_route 103.117.72.0/22 -add china_ip_route 103.117.88.0/22 -add china_ip_route 103.117.132.0/22 -add china_ip_route 103.117.136.0/22 -add china_ip_route 103.117.188.0/22 -add china_ip_route 103.117.220.0/22 -add china_ip_route 103.118.36.0/22 -add china_ip_route 103.118.52.0/22 -add china_ip_route 103.118.56.0/22 -add china_ip_route 103.118.60.0/22 -add china_ip_route 103.118.64.0/22 -add china_ip_route 103.118.68.0/22 -add china_ip_route 103.118.72.0/22 -add china_ip_route 103.118.88.0/22 -add china_ip_route 103.118.173.0/24 -add china_ip_route 103.118.192.0/22 -add china_ip_route 103.118.196.0/22 -add china_ip_route 103.118.200.0/22 -add china_ip_route 103.118.204.0/22 -add china_ip_route 103.118.208.0/22 -add china_ip_route 103.118.212.0/22 -add china_ip_route 103.118.216.0/22 -add china_ip_route 103.118.220.0/22 -add china_ip_route 103.118.240.0/22 -add china_ip_route 103.118.244.0/22 -add china_ip_route 103.118.248.0/22 -add china_ip_route 103.118.252.0/22 -add china_ip_route 103.119.0.0/22 -add china_ip_route 103.119.12.0/22 -add china_ip_route 103.119.16.0/22 -add china_ip_route 103.119.28.0/22 -add china_ip_route 103.119.44.0/22 -add china_ip_route 103.119.104.0/22 -add china_ip_route 103.119.115.0/24 -add china_ip_route 103.119.156.0/22 -add china_ip_route 103.119.180.0/22 -add china_ip_route 103.119.200.0/22 -add china_ip_route 103.119.224.0/22 -add china_ip_route 103.120.52.0/22 -add china_ip_route 103.120.72.0/22 -add china_ip_route 103.120.88.0/22 -add china_ip_route 103.120.96.0/22 -add china_ip_route 103.120.100.0/22 -add china_ip_route 103.120.140.0/22 -add china_ip_route 103.120.196.0/22 -add china_ip_route 103.120.224.0/22 -add china_ip_route 103.121.52.0/22 -add china_ip_route 103.121.92.0/22 -add china_ip_route 103.121.160.0/22 -add china_ip_route 103.121.164.0/22 -add china_ip_route 103.121.250.0/24 -add china_ip_route 103.121.252.0/22 -add china_ip_route 103.122.48.0/22 -add china_ip_route 103.122.176.0/22 -add china_ip_route 103.122.192.0/22 -add china_ip_route 103.122.240.0/22 -add china_ip_route 103.123.4.0/22 -add china_ip_route 103.123.56.0/22 -add china_ip_route 103.123.88.0/22 -add china_ip_route 103.123.92.0/22 -add china_ip_route 103.123.116.0/22 -add china_ip_route 103.123.160.0/22 -add china_ip_route 103.123.176.0/22 -add china_ip_route 103.123.200.0/22 -add china_ip_route 103.123.204.0/22 -add china_ip_route 103.123.208.0/22 -add china_ip_route 103.123.212.0/22 -add china_ip_route 103.124.24.0/22 -add china_ip_route 103.124.48.0/22 -add china_ip_route 103.124.64.0/22 -add china_ip_route 103.124.212.0/22 -add china_ip_route 103.124.216.0/22 -add china_ip_route 103.125.20.0/22 -add china_ip_route 103.125.44.0/22 -add china_ip_route 103.125.132.0/22 -add china_ip_route 103.125.164.0/22 -add china_ip_route 103.125.196.0/22 -add china_ip_route 103.125.236.0/22 -add china_ip_route 103.125.248.0/22 -add china_ip_route 103.126.0.0/22 -add china_ip_route 103.126.16.0/22 -add china_ip_route 103.126.44.0/22 -add china_ip_route 103.126.100.0/22 -add china_ip_route 103.126.124.0/22 -add china_ip_route 103.126.128.0/22 -add china_ip_route 103.126.132.0/22 -add china_ip_route 103.126.208.0/22 -add china_ip_route 103.129.52.0/22 -add china_ip_route 103.130.132.0/22 -add china_ip_route 103.130.152.0/24 -add china_ip_route 103.130.160.0/22 -add china_ip_route 103.130.228.0/22 -add china_ip_route 103.131.20.0/22 -add china_ip_route 103.131.36.0/22 -add china_ip_route 103.131.152.0/22 -add china_ip_route 103.131.168.0/22 -add china_ip_route 103.131.176.0/22 -add china_ip_route 103.131.224.0/22 -add china_ip_route 103.131.228.0/22 -add china_ip_route 103.131.240.0/22 -add china_ip_route 103.132.60.0/22 -add china_ip_route 103.132.64.0/22 -add china_ip_route 103.132.68.0/22 -add china_ip_route 103.132.72.0/22 -add china_ip_route 103.132.76.0/22 -add china_ip_route 103.132.80.0/22 -add china_ip_route 103.132.104.0/22 -add china_ip_route 103.132.108.0/22 -add china_ip_route 103.132.112.0/22 -add china_ip_route 103.132.116.0/22 -add china_ip_route 103.132.120.0/22 -add china_ip_route 103.132.160.0/22 -add china_ip_route 103.132.164.0/22 -add china_ip_route 103.132.188.0/22 -add china_ip_route 103.132.208.0/22 -add china_ip_route 103.132.212.0/22 -add china_ip_route 103.132.234.0/23 -add china_ip_route 103.133.12.0/22 -add china_ip_route 103.133.40.0/22 -add china_ip_route 103.133.128.0/22 -add china_ip_route 103.133.136.0/22 -add china_ip_route 103.133.176.0/22 -add china_ip_route 103.133.232.0/22 -add china_ip_route 103.134.12.0/24 -add china_ip_route 103.134.196.0/22 -add china_ip_route 103.135.80.0/22 -add china_ip_route 103.135.124.0/22 -add china_ip_route 103.135.148.0/22 -add china_ip_route 103.135.156.0/22 -add china_ip_route 103.135.160.0/22 -add china_ip_route 103.135.164.0/22 -add china_ip_route 103.135.176.0/22 -add china_ip_route 103.135.184.0/22 -add china_ip_route 103.135.192.0/22 -add china_ip_route 103.135.196.0/22 -add china_ip_route 103.135.236.0/22 -add china_ip_route 103.136.128.0/22 -add china_ip_route 103.136.232.0/22 -add china_ip_route 103.137.58.0/23 -add china_ip_route 103.137.60.0/24 -add china_ip_route 103.137.76.0/22 -add china_ip_route 103.137.136.0/23 -add china_ip_route 103.137.149.0/24 -add china_ip_route 103.137.180.0/22 -add china_ip_route 103.137.236.0/22 -add china_ip_route 103.138.2.0/23 -add china_ip_route 103.138.12.0/23 -add china_ip_route 103.138.80.0/22 -add china_ip_route 103.138.134.0/23 -add china_ip_route 103.138.156.0/23 -add china_ip_route 103.138.208.0/23 -add china_ip_route 103.138.220.0/23 -add china_ip_route 103.138.246.0/23 -add china_ip_route 103.138.248.0/23 -add china_ip_route 103.139.0.0/23 -add china_ip_route 103.139.2.0/23 -add china_ip_route 103.139.22.0/23 -add china_ip_route 103.139.113.0/24 -add china_ip_route 103.139.134.0/23 -add china_ip_route 103.139.136.0/23 -add china_ip_route 103.139.172.0/23 -add china_ip_route 103.139.204.0/23 -add china_ip_route 103.139.212.0/23 -add china_ip_route 103.140.8.0/23 -add china_ip_route 103.140.14.0/23 -add china_ip_route 103.140.70.0/23 -add china_ip_route 103.140.126.0/23 -add china_ip_route 103.140.140.0/23 -add china_ip_route 103.140.144.0/23 -add china_ip_route 103.140.152.0/23 -add china_ip_route 103.140.192.0/23 -add china_ip_route 103.140.228.0/23 -add china_ip_route 103.141.10.0/23 -add china_ip_route 103.141.58.0/23 -add china_ip_route 103.141.128.0/23 -add china_ip_route 103.141.186.0/23 -add china_ip_route 103.141.242.0/23 -add china_ip_route 103.142.28.0/23 -add china_ip_route 103.142.58.0/23 -add china_ip_route 103.142.82.0/23 -add china_ip_route 103.142.96.0/23 -add china_ip_route 103.142.102.0/23 -add china_ip_route 103.142.122.0/23 -add china_ip_route 103.142.128.0/23 -add china_ip_route 103.142.140.0/23 -add china_ip_route 103.142.154.0/23 -add china_ip_route 103.142.156.0/23 -add china_ip_route 103.142.172.0/23 -add china_ip_route 103.142.180.0/23 -add china_ip_route 103.142.186.0/23 -add china_ip_route 103.142.190.0/23 -add china_ip_route 103.142.220.0/23 -add china_ip_route 103.142.230.0/24 -add china_ip_route 103.142.234.0/23 -add china_ip_route 103.142.238.0/23 -add china_ip_route 103.142.248.0/23 -add china_ip_route 103.143.16.0/23 -add china_ip_route 103.143.18.0/23 -add china_ip_route 103.143.31.0/24 -add china_ip_route 103.143.74.0/23 -add china_ip_route 103.143.120.0/23 -add china_ip_route 103.143.124.0/23 -add china_ip_route 103.143.132.0/23 -add china_ip_route 103.143.134.0/23 -add china_ip_route 103.143.174.0/23 -add china_ip_route 103.143.228.0/23 -add china_ip_route 103.144.40.0/23 -add china_ip_route 103.144.52.0/23 -add china_ip_route 103.144.66.0/23 -add china_ip_route 103.144.70.0/23 -add china_ip_route 103.144.72.0/23 -add china_ip_route 103.144.108.0/23 -add china_ip_route 103.144.136.0/23 -add china_ip_route 103.144.148.0/23 -add china_ip_route 103.144.158.0/23 -add china_ip_route 103.144.240.0/23 -add china_ip_route 103.145.38.0/23 -add china_ip_route 103.145.40.0/23 -add china_ip_route 103.145.42.0/23 -add china_ip_route 103.145.60.0/23 -add china_ip_route 103.145.72.0/23 -add china_ip_route 103.145.80.0/23 -add china_ip_route 103.145.86.0/23 -add china_ip_route 103.145.92.0/23 -add china_ip_route 103.145.94.0/23 -add china_ip_route 103.145.98.0/23 -add china_ip_route 103.145.106.0/23 -add china_ip_route 103.145.122.0/23 -add china_ip_route 103.145.188.0/23 -add china_ip_route 103.145.190.0/23 -add china_ip_route 103.146.6.0/23 -add china_ip_route 103.146.72.0/23 -add china_ip_route 103.146.88.0/23 -add china_ip_route 103.146.90.0/23 -add china_ip_route 103.146.124.0/23 -add china_ip_route 103.146.126.0/23 -add china_ip_route 103.146.138.0/23 -add china_ip_route 103.146.230.0/23 -add china_ip_route 103.146.236.0/23 -add china_ip_route 103.146.252.0/23 -add china_ip_route 103.147.12.0/23 -add china_ip_route 103.147.124.0/23 -add china_ip_route 103.147.198.0/23 -add china_ip_route 103.147.206.0/23 -add china_ip_route 103.148.174.0/23 -add china_ip_route 103.149.6.0/23 -add china_ip_route 103.149.17.0/24 -add china_ip_route 103.149.44.0/23 -add china_ip_route 103.149.110.0/23 -add china_ip_route 103.149.132.0/23 -add china_ip_route 103.149.144.0/23 -add china_ip_route 103.149.156.0/23 -add china_ip_route 103.149.181.0/24 -add china_ip_route 103.149.210.0/23 -add china_ip_route 103.149.214.0/23 -add china_ip_route 103.149.220.0/23 -add china_ip_route 103.149.242.0/23 -add china_ip_route 103.149.244.0/23 -add china_ip_route 103.149.246.0/23 -add china_ip_route 103.149.248.0/23 -add china_ip_route 103.150.24.0/23 -add china_ip_route 103.150.66.0/23 -add china_ip_route 103.150.72.0/23 -add china_ip_route 103.150.122.0/23 -add china_ip_route 103.150.126.0/23 -add china_ip_route 103.150.128.0/23 -add china_ip_route 103.150.130.0/23 -add china_ip_route 103.150.146.0/23 -add china_ip_route 103.150.164.0/23 -add china_ip_route 103.150.172.0/23 -add china_ip_route 103.150.180.0/23 -add china_ip_route 103.150.200.0/23 -add china_ip_route 103.150.210.0/23 -add china_ip_route 103.150.214.0/23 -add china_ip_route 103.150.216.0/23 -add china_ip_route 103.150.244.0/23 -add china_ip_route 103.151.4.0/23 -add china_ip_route 103.151.44.0/23 -add china_ip_route 103.151.138.0/23 -add china_ip_route 103.151.142.0/23 -add china_ip_route 103.151.148.0/23 -add china_ip_route 103.151.150.0/23 -add china_ip_route 103.151.158.0/23 -add china_ip_route 103.151.178.0/23 -add china_ip_route 103.151.206.0/23 -add china_ip_route 103.151.216.0/23 -add china_ip_route 103.151.228.0/23 -add china_ip_route 103.152.14.0/23 -add china_ip_route 103.152.24.0/23 -add china_ip_route 103.152.28.0/23 -add china_ip_route 103.152.30.0/23 -add china_ip_route 103.152.56.0/23 -add china_ip_route 103.152.76.0/23 -add china_ip_route 103.152.98.0/23 -add china_ip_route 103.152.112.0/23 -add china_ip_route 103.152.120.0/23 -add china_ip_route 103.152.122.0/23 -add china_ip_route 103.152.132.0/23 -add china_ip_route 103.152.152.0/23 -add china_ip_route 103.152.168.0/23 -add china_ip_route 103.152.170.0/23 -add china_ip_route 103.152.186.0/23 -add china_ip_route 103.152.190.0/23 -add china_ip_route 103.152.192.0/23 -add china_ip_route 103.152.200.0/23 -add china_ip_route 103.152.208.0/23 -add china_ip_route 103.152.224.0/23 -add china_ip_route 103.152.226.0/23 -add china_ip_route 103.152.246.0/23 -add china_ip_route 103.152.250.0/23 -add china_ip_route 103.153.4.0/23 -add china_ip_route 103.153.36.0/23 -add china_ip_route 103.153.98.0/23 -add china_ip_route 103.153.100.0/23 -add china_ip_route 103.153.114.0/23 -add china_ip_route 103.153.122.0/23 -add china_ip_route 103.153.128.0/23 -add china_ip_route 103.153.132.0/23 -add china_ip_route 103.153.138.0/23 -add china_ip_route 103.153.146.0/23 -add china_ip_route 103.153.160.0/23 -add china_ip_route 103.154.18.0/23 -add china_ip_route 103.154.30.0/23 -add china_ip_route 103.154.32.0/23 -add china_ip_route 103.154.40.0/23 -add china_ip_route 103.154.66.0/23 -add china_ip_route 103.154.162.0/23 -add china_ip_route 103.154.164.0/23 -add china_ip_route 103.154.168.0/23 -add china_ip_route 103.154.242.0/23 -add china_ip_route 103.155.14.0/23 -add china_ip_route 103.155.16.0/23 -add china_ip_route 103.155.34.0/23 -add china_ip_route 103.155.48.0/23 -add china_ip_route 103.155.76.0/23 -add china_ip_route 103.155.100.0/23 -add china_ip_route 103.155.110.0/23 -add china_ip_route 103.155.120.0/23 -add china_ip_route 103.155.214.0/23 -add china_ip_route 103.155.248.0/23 -add china_ip_route 103.156.24.0/23 -add china_ip_route 103.156.28.0/23 -add china_ip_route 103.156.68.0/23 -add china_ip_route 103.156.78.0/23 -add china_ip_route 103.156.104.0/23 -add china_ip_route 103.156.158.0/23 -add china_ip_route 103.156.174.0/23 -add china_ip_route 103.156.186.0/23 -add china_ip_route 103.156.228.0/23 -add china_ip_route 103.157.30.0/23 -add china_ip_route 103.157.138.0/23 -add china_ip_route 103.157.174.0/23 -add china_ip_route 103.157.212.0/23 -add china_ip_route 103.157.234.0/23 -add china_ip_route 103.157.254.0/23 -add china_ip_route 103.158.0.0/23 -add china_ip_route 103.158.8.0/23 -add china_ip_route 103.158.13.0/24 -add china_ip_route 103.158.16.0/23 -add china_ip_route 103.158.190.0/23 -add china_ip_route 103.158.200.0/23 -add china_ip_route 103.158.224.0/23 -add china_ip_route 103.159.80.0/23 -add china_ip_route 103.159.122.0/23 -add china_ip_route 103.159.124.0/23 -add china_ip_route 103.159.134.0/23 -add china_ip_route 103.159.142.0/23 -add china_ip_route 103.160.32.0/23 -add china_ip_route 103.160.34.0/23 -add china_ip_route 103.160.112.0/23 -add china_ip_route 103.160.114.0/23 -add china_ip_route 103.160.244.0/23 -add china_ip_route 103.160.254.0/23 -add china_ip_route 103.161.14.0/23 -add china_ip_route 103.161.102.0/23 -add china_ip_route 103.161.138.0/23 -add china_ip_route 103.161.208.0/23 -add china_ip_route 103.161.220.0/23 -add china_ip_route 103.161.254.0/23 -add china_ip_route 103.162.10.0/23 -add china_ip_route 103.162.32.0/23 -add china_ip_route 103.162.38.0/23 -add china_ip_route 103.162.116.0/23 -add china_ip_route 103.163.28.0/23 -add china_ip_route 103.163.32.0/23 -add china_ip_route 103.163.46.0/23 -add china_ip_route 103.163.74.0/23 -add china_ip_route 103.163.180.0/23 -add china_ip_route 103.164.4.0/23 -add china_ip_route 103.164.32.0/23 -add china_ip_route 103.164.40.0/23 -add china_ip_route 103.164.42.0/23 -add china_ip_route 103.164.64.0/23 -add china_ip_route 103.164.76.0/23 -add china_ip_route 103.164.178.0/23 -add china_ip_route 103.164.226.0/23 -add china_ip_route 103.165.44.0/23 -add china_ip_route 103.165.52.0/23 -add china_ip_route 103.165.82.0/23 -add china_ip_route 103.165.110.0/23 -add china_ip_route 103.166.20.0/23 -add china_ip_route 103.166.50.0/23 -add china_ip_route 103.166.52.0/23 -add china_ip_route 103.166.54.0/23 -add china_ip_route 103.166.84.0/23 -add china_ip_route 103.166.138.0/23 -add china_ip_route 103.166.242.0/23 -add china_ip_route 103.166.246.0/23 -add china_ip_route 103.167.0.0/23 -add china_ip_route 103.167.36.0/23 -add china_ip_route 103.168.98.0/23 -add china_ip_route 103.168.170.0/23 -add china_ip_route 103.169.50.0/23 -add china_ip_route 103.169.62.0/23 -add china_ip_route 103.169.108.0/23 -add china_ip_route 103.169.162.0/23 -add china_ip_route 103.169.202.0/23 -add china_ip_route 103.169.216.0/23 -add china_ip_route 103.170.4.0/23 -add china_ip_route 103.170.72.0/23 -add china_ip_route 103.170.134.0/23 -add china_ip_route 103.170.210.0/23 -add china_ip_route 103.170.212.0/23 -add china_ip_route 103.171.32.0/23 -add china_ip_route 103.171.166.0/23 -add china_ip_route 103.171.214.0/23 -add china_ip_route 103.172.32.0/23 -add china_ip_route 103.172.160.0/23 -add china_ip_route 103.172.191.0/24 -add china_ip_route 103.173.102.0/23 -add china_ip_route 103.173.182.0/23 -add china_ip_route 103.173.184.0/23 -add china_ip_route 103.174.94.0/23 -add china_ip_route 103.175.14.0/23 -add china_ip_route 103.175.98.0/23 -add china_ip_route 103.175.114.0/23 -add china_ip_route 103.175.118.0/23 -add china_ip_route 103.176.52.0/23 -add china_ip_route 103.176.222.0/23 -add china_ip_route 103.176.244.0/23 -add china_ip_route 103.177.28.0/23 -add china_ip_route 103.177.44.0/23 -add china_ip_route 103.177.70.0/23 -add china_ip_route 103.177.136.0/23 -add china_ip_route 103.177.162.0/23 -add china_ip_route 103.178.56.0/23 -add china_ip_route 103.192.0.0/22 -add china_ip_route 103.192.4.0/22 -add china_ip_route 103.192.8.0/22 -add china_ip_route 103.192.12.0/22 -add china_ip_route 103.192.16.0/22 -add china_ip_route 103.192.20.0/22 -add china_ip_route 103.192.24.0/22 -add china_ip_route 103.192.28.0/22 -add china_ip_route 103.192.48.0/22 -add china_ip_route 103.192.52.0/22 -add china_ip_route 103.192.56.0/22 -add china_ip_route 103.192.84.0/22 -add china_ip_route 103.192.88.0/22 -add china_ip_route 103.192.92.0/22 -add china_ip_route 103.192.96.0/22 -add china_ip_route 103.192.100.0/22 -add china_ip_route 103.192.104.0/22 -add china_ip_route 103.192.108.0/22 -add china_ip_route 103.192.112.0/22 -add china_ip_route 103.192.128.0/22 -add china_ip_route 103.192.132.0/22 -add china_ip_route 103.192.136.0/22 -add china_ip_route 103.192.140.0/22 -add china_ip_route 103.192.144.0/22 -add china_ip_route 103.192.164.0/22 -add china_ip_route 103.192.188.0/22 -add china_ip_route 103.192.208.0/22 -add china_ip_route 103.192.212.0/22 -add china_ip_route 103.192.216.0/22 -add china_ip_route 103.192.252.0/22 -add china_ip_route 103.193.40.0/22 -add china_ip_route 103.193.44.0/22 -add china_ip_route 103.193.120.0/22 -add china_ip_route 103.193.140.0/22 -add china_ip_route 103.193.160.0/22 -add china_ip_route 103.193.188.0/22 -add china_ip_route 103.193.192.0/22 -add china_ip_route 103.193.212.0/22 -add china_ip_route 103.193.216.0/22 -add china_ip_route 103.193.220.0/22 -add china_ip_route 103.193.224.0/22 -add china_ip_route 103.193.228.0/22 -add china_ip_route 103.193.232.0/22 -add china_ip_route 103.193.236.0/22 -add china_ip_route 103.193.240.0/22 -add china_ip_route 103.194.16.0/22 -add china_ip_route 103.195.104.0/22 -add china_ip_route 103.195.112.0/22 -add china_ip_route 103.195.148.0/22 -add china_ip_route 103.195.152.0/22 -add china_ip_route 103.195.160.0/22 -add china_ip_route 103.196.64.0/22 -add china_ip_route 103.196.72.0/22 -add china_ip_route 103.196.88.0/22 -add china_ip_route 103.196.92.0/22 -add china_ip_route 103.196.96.0/22 -add china_ip_route 103.196.168.0/22 -add china_ip_route 103.196.204.0/22 -add china_ip_route 103.197.180.0/22 -add china_ip_route 103.197.228.0/22 -add china_ip_route 103.198.20.0/22 -add china_ip_route 103.198.60.0/22 -add china_ip_route 103.198.64.0/22 -add china_ip_route 103.198.72.0/22 -add china_ip_route 103.198.124.0/22 -add china_ip_route 103.198.156.0/22 -add china_ip_route 103.198.180.0/22 -add china_ip_route 103.198.196.0/22 -add china_ip_route 103.198.216.0/22 -add china_ip_route 103.198.220.0/22 -add china_ip_route 103.198.224.0/22 -add china_ip_route 103.198.228.0/22 -add china_ip_route 103.198.232.0/22 -add china_ip_route 103.198.236.0/22 -add china_ip_route 103.198.240.0/22 -add china_ip_route 103.198.244.0/22 -add china_ip_route 103.199.164.0/22 -add china_ip_route 103.199.196.0/22 -add china_ip_route 103.199.228.0/22 -add china_ip_route 103.199.248.0/22 -add china_ip_route 103.199.252.0/22 -add china_ip_route 103.200.28.0/22 -add china_ip_route 103.200.52.0/22 -add china_ip_route 103.200.64.0/22 -add china_ip_route 103.200.68.0/22 -add china_ip_route 103.200.136.0/22 -add china_ip_route 103.200.140.0/22 -add china_ip_route 103.200.144.0/22 -add china_ip_route 103.200.148.0/22 -add china_ip_route 103.200.152.0/22 -add china_ip_route 103.200.156.0/22 -add china_ip_route 103.200.160.0/22 -add china_ip_route 103.200.164.0/22 -add china_ip_route 103.200.168.0/22 -add china_ip_route 103.200.172.0/22 -add china_ip_route 103.200.176.0/22 -add china_ip_route 103.200.180.0/22 -add china_ip_route 103.200.184.0/22 -add china_ip_route 103.200.188.0/22 -add china_ip_route 103.200.192.0/22 -add china_ip_route 103.200.220.0/22 -add china_ip_route 103.200.224.0/22 -add china_ip_route 103.200.228.0/22 -add china_ip_route 103.200.232.0/22 -add china_ip_route 103.200.236.0/22 -add china_ip_route 103.200.240.0/22 -add china_ip_route 103.200.244.0/22 -add china_ip_route 103.200.248.0/22 -add china_ip_route 103.200.252.0/22 -add china_ip_route 103.201.0.0/22 -add china_ip_route 103.201.4.0/22 -add china_ip_route 103.201.8.0/22 -add china_ip_route 103.201.12.0/22 -add china_ip_route 103.201.16.0/22 -add china_ip_route 103.201.20.0/22 -add china_ip_route 103.201.28.0/22 -add china_ip_route 103.201.32.0/22 -add china_ip_route 103.201.36.0/22 -add china_ip_route 103.201.40.0/22 -add china_ip_route 103.201.44.0/22 -add china_ip_route 103.201.48.0/22 -add china_ip_route 103.201.52.0/22 -add china_ip_route 103.201.56.0/22 -add china_ip_route 103.201.60.0/22 -add china_ip_route 103.201.64.0/22 -add china_ip_route 103.201.76.0/22 -add china_ip_route 103.201.80.0/22 -add china_ip_route 103.201.84.0/22 -add china_ip_route 103.201.88.0/22 -add china_ip_route 103.201.92.0/22 -add china_ip_route 103.201.96.0/22 -add china_ip_route 103.201.100.0/22 -add china_ip_route 103.201.104.0/22 -add china_ip_route 103.201.108.0/22 -add china_ip_route 103.201.112.0/22 -add china_ip_route 103.201.116.0/22 -add china_ip_route 103.201.120.0/22 -add china_ip_route 103.201.152.0/22 -add china_ip_route 103.201.156.0/22 -add china_ip_route 103.201.160.0/22 -add china_ip_route 103.201.164.0/22 -add china_ip_route 103.201.168.0/22 -add china_ip_route 103.201.172.0/22 -add china_ip_route 103.201.176.0/22 -add china_ip_route 103.201.180.0/22 -add china_ip_route 103.201.184.0/22 -add china_ip_route 103.201.188.0/22 -add china_ip_route 103.201.192.0/22 -add china_ip_route 103.201.196.0/22 -add china_ip_route 103.201.200.0/22 -add china_ip_route 103.201.204.0/22 -add china_ip_route 103.201.208.0/22 -add china_ip_route 103.201.212.0/22 -add china_ip_route 103.201.216.0/22 -add china_ip_route 103.201.220.0/22 -add china_ip_route 103.201.224.0/22 -add china_ip_route 103.201.228.0/22 -add china_ip_route 103.201.232.0/22 -add china_ip_route 103.201.236.0/22 -add china_ip_route 103.201.240.0/22 -add china_ip_route 103.201.244.0/22 -add china_ip_route 103.201.248.0/22 -add china_ip_route 103.201.252.0/22 -add china_ip_route 103.202.0.0/22 -add china_ip_route 103.202.4.0/22 -add china_ip_route 103.202.8.0/22 -add china_ip_route 103.202.12.0/22 -add china_ip_route 103.202.16.0/22 -add china_ip_route 103.202.20.0/22 -add china_ip_route 103.202.24.0/22 -add china_ip_route 103.202.28.0/22 -add china_ip_route 103.202.32.0/22 -add china_ip_route 103.202.36.0/22 -add china_ip_route 103.202.40.0/22 -add china_ip_route 103.202.44.0/22 -add china_ip_route 103.202.56.0/22 -add china_ip_route 103.202.60.0/22 -add china_ip_route 103.202.64.0/22 -add china_ip_route 103.202.68.0/22 -add china_ip_route 103.202.72.0/22 -add china_ip_route 103.202.76.0/22 -add china_ip_route 103.202.80.0/22 -add china_ip_route 103.202.84.0/22 -add china_ip_route 103.202.88.0/22 -add china_ip_route 103.202.92.0/22 -add china_ip_route 103.202.96.0/22 -add china_ip_route 103.202.100.0/22 -add china_ip_route 103.202.104.0/22 -add china_ip_route 103.202.108.0/22 -add china_ip_route 103.202.112.0/22 -add china_ip_route 103.202.116.0/22 -add china_ip_route 103.202.120.0/22 -add china_ip_route 103.202.124.0/22 -add china_ip_route 103.202.128.0/22 -add china_ip_route 103.202.132.0/22 -add china_ip_route 103.202.136.0/22 -add china_ip_route 103.202.140.0/22 -add china_ip_route 103.202.144.0/22 -add china_ip_route 103.202.152.0/22 -add china_ip_route 103.202.156.0/22 -add china_ip_route 103.202.160.0/22 -add china_ip_route 103.202.164.0/22 -add china_ip_route 103.202.168.0/22 -add china_ip_route 103.202.172.0/22 -add china_ip_route 103.202.176.0/22 -add china_ip_route 103.202.180.0/22 -add china_ip_route 103.202.184.0/22 -add china_ip_route 103.202.188.0/22 -add china_ip_route 103.202.192.0/22 -add china_ip_route 103.202.196.0/22 -add china_ip_route 103.202.200.0/21 -add china_ip_route 103.202.212.0/22 -add china_ip_route 103.202.228.0/22 -add china_ip_route 103.202.236.0/22 -add china_ip_route 103.202.240.0/22 -add china_ip_route 103.202.244.0/22 -add china_ip_route 103.202.248.0/22 -add china_ip_route 103.202.252.0/22 -add china_ip_route 103.203.0.0/22 -add china_ip_route 103.203.4.0/22 -add china_ip_route 103.203.8.0/22 -add china_ip_route 103.203.12.0/22 -add china_ip_route 103.203.16.0/22 -add china_ip_route 103.203.20.0/22 -add china_ip_route 103.203.24.0/22 -add china_ip_route 103.203.28.0/22 -add china_ip_route 103.203.32.0/22 -add china_ip_route 103.203.56.0/22 -add china_ip_route 103.203.96.0/22 -add china_ip_route 103.203.100.0/22 -add china_ip_route 103.203.104.0/22 -add china_ip_route 103.203.108.0/22 -add china_ip_route 103.203.112.0/22 -add china_ip_route 103.203.116.0/22 -add china_ip_route 103.203.120.0/22 -add china_ip_route 103.203.124.0/22 -add china_ip_route 103.203.128.0/22 -add china_ip_route 103.203.140.0/22 -add china_ip_route 103.203.164.0/22 -add china_ip_route 103.203.168.0/22 -add china_ip_route 103.203.192.0/22 -add china_ip_route 103.203.200.0/22 -add china_ip_route 103.203.212.0/22 -add china_ip_route 103.203.216.0/22 -add china_ip_route 103.204.24.0/22 -add china_ip_route 103.204.72.0/22 -add china_ip_route 103.204.88.0/22 -add china_ip_route 103.204.112.0/22 -add china_ip_route 103.204.136.0/22 -add china_ip_route 103.204.140.0/22 -add china_ip_route 103.204.144.0/22 -add china_ip_route 103.204.148.0/22 -add china_ip_route 103.204.152.0/22 -add china_ip_route 103.204.196.0/22 -add china_ip_route 103.204.232.0/22 -add china_ip_route 103.204.236.0/22 -add china_ip_route 103.205.4.0/22 -add china_ip_route 103.205.8.0/22 -add china_ip_route 103.205.40.0/22 -add china_ip_route 103.205.44.0/22 -add china_ip_route 103.205.52.0/22 -add china_ip_route 103.205.108.0/22 -add china_ip_route 103.205.116.0/22 -add china_ip_route 103.205.120.0/22 -add china_ip_route 103.205.136.0/22 -add china_ip_route 103.205.162.0/24 -add china_ip_route 103.205.188.0/22 -add china_ip_route 103.205.192.0/22 -add china_ip_route 103.205.196.0/22 -add china_ip_route 103.205.200.0/22 -add china_ip_route 103.205.236.0/22 -add china_ip_route 103.205.248.0/22 -add china_ip_route 103.205.252.0/22 -add china_ip_route 103.206.0.0/22 -add china_ip_route 103.206.44.0/22 -add china_ip_route 103.206.148.0/22 -add china_ip_route 103.207.48.0/22 -add china_ip_route 103.207.104.0/22 -add china_ip_route 103.207.164.0/22 -add china_ip_route 103.207.184.0/22 -add china_ip_route 103.207.188.0/22 -add china_ip_route 103.207.192.0/22 -add china_ip_route 103.207.196.0/22 -add china_ip_route 103.207.200.0/22 -add china_ip_route 103.207.204.0/22 -add china_ip_route 103.207.208.0/22 -add china_ip_route 103.207.212.0/22 -add china_ip_route 103.207.220.0/22 -add china_ip_route 103.207.228.0/22 -add china_ip_route 103.207.232.0/22 -add china_ip_route 103.208.12.0/22 -add china_ip_route 103.208.16.0/22 -add china_ip_route 103.208.28.0/22 -add china_ip_route 103.208.40.0/22 -add china_ip_route 103.208.44.0/22 -add china_ip_route 103.208.48.0/22 -add china_ip_route 103.209.112.0/22 -add china_ip_route 103.209.136.0/22 -add china_ip_route 103.209.200.0/22 -add china_ip_route 103.209.208.0/22 -add china_ip_route 103.209.216.0/22 -add china_ip_route 103.210.0.0/22 -add china_ip_route 103.210.96.0/22 -add china_ip_route 103.210.156.0/22 -add china_ip_route 103.210.160.0/22 -add china_ip_route 103.210.164.0/22 -add china_ip_route 103.210.168.0/22 -add china_ip_route 103.210.172.0/22 -add china_ip_route 103.210.176.0/22 -add china_ip_route 103.210.180.0/22 -add china_ip_route 103.210.184.0/22 -add china_ip_route 103.210.188.0/22 -add china_ip_route 103.210.216.0/22 -add china_ip_route 103.211.44.0/22 -add china_ip_route 103.211.96.0/22 -add china_ip_route 103.211.100.0/22 -add china_ip_route 103.211.156.0/22 -add china_ip_route 103.211.164.0/22 -add china_ip_route 103.211.192.0/22 -add china_ip_route 103.211.220.0/22 -add china_ip_route 103.211.224.0/22 -add china_ip_route 103.211.248.0/22 -add china_ip_route 103.212.0.0/22 -add china_ip_route 103.212.4.0/22 -add china_ip_route 103.212.8.0/22 -add china_ip_route 103.212.12.0/22 -add china_ip_route 103.212.32.0/22 -add china_ip_route 103.212.44.0/22 -add china_ip_route 103.212.48.0/22 -add china_ip_route 103.212.84.0/22 -add china_ip_route 103.212.100.0/22 -add china_ip_route 103.212.104.0/22 -add china_ip_route 103.212.108.0/22 -add china_ip_route 103.212.148.0/22 -add china_ip_route 103.212.164.0/22 -add china_ip_route 103.212.196.0/22 -add china_ip_route 103.212.200.0/22 -add china_ip_route 103.212.228.0/22 -add china_ip_route 103.212.252.0/22 -add china_ip_route 103.213.40.0/22 -add china_ip_route 103.213.44.0/22 -add china_ip_route 103.213.48.0/22 -add china_ip_route 103.213.52.0/22 -add china_ip_route 103.213.56.0/22 -add china_ip_route 103.213.60.0/22 -add china_ip_route 103.213.64.0/22 -add china_ip_route 103.213.68.0/22 -add china_ip_route 103.213.72.0/22 -add china_ip_route 103.213.76.0/22 -add china_ip_route 103.213.80.0/22 -add china_ip_route 103.213.84.0/22 -add china_ip_route 103.213.88.0/22 -add china_ip_route 103.213.92.0/22 -add china_ip_route 103.213.96.0/22 -add china_ip_route 103.213.132.0/22 -add china_ip_route 103.213.136.0/22 -add china_ip_route 103.213.140.0/22 -add china_ip_route 103.213.144.0/22 -add china_ip_route 103.213.148.0/22 -add china_ip_route 103.213.152.0/22 -add china_ip_route 103.213.156.0/22 -add china_ip_route 103.213.160.0/22 -add china_ip_route 103.213.164.0/22 -add china_ip_route 103.213.168.0/22 -add china_ip_route 103.213.172.0/22 -add china_ip_route 103.213.176.0/22 -add china_ip_route 103.213.180.0/22 -add china_ip_route 103.213.184.0/22 -add china_ip_route 103.213.188.0/22 -add china_ip_route 103.213.248.0/22 -add china_ip_route 103.214.48.0/22 -add china_ip_route 103.214.84.0/22 -add china_ip_route 103.214.168.0/22 -add china_ip_route 103.214.212.0/22 -add china_ip_route 103.214.240.0/22 -add china_ip_route 103.214.244.0/22 -add china_ip_route 103.215.28.0/22 -add china_ip_route 103.215.32.0/22 -add china_ip_route 103.215.36.0/22 -add china_ip_route 103.215.44.0/22 -add china_ip_route 103.215.48.0/22 -add china_ip_route 103.215.100.0/22 -add china_ip_route 103.215.104.0/22 -add china_ip_route 103.215.108.0/22 -add china_ip_route 103.215.116.0/22 -add china_ip_route 103.215.120.0/22 -add china_ip_route 103.215.140.0/22 -add china_ip_route 103.216.4.0/22 -add china_ip_route 103.216.8.0/22 -add china_ip_route 103.216.12.0/22 -add china_ip_route 103.216.16.0/22 -add china_ip_route 103.216.20.0/22 -add china_ip_route 103.216.24.0/22 -add china_ip_route 103.216.28.0/22 -add china_ip_route 103.216.32.0/22 -add china_ip_route 103.216.36.0/22 -add china_ip_route 103.216.40.0/22 -add china_ip_route 103.216.44.0/22 -add china_ip_route 103.216.64.0/22 -add china_ip_route 103.216.108.0/22 -add china_ip_route 103.216.136.0/22 -add china_ip_route 103.216.152.0/22 -add china_ip_route 103.216.224.0/22 -add china_ip_route 103.216.228.0/22 -add china_ip_route 103.216.240.0/22 -add china_ip_route 103.216.244.0/22 -add china_ip_route 103.216.248.0/22 -add china_ip_route 103.216.252.0/22 -add china_ip_route 103.217.0.0/22 -add china_ip_route 103.217.4.0/22 -add china_ip_route 103.217.8.0/22 -add china_ip_route 103.217.12.0/22 -add china_ip_route 103.217.16.0/22 -add china_ip_route 103.217.20.0/22 -add china_ip_route 103.217.24.0/22 -add china_ip_route 103.217.28.0/22 -add china_ip_route 103.217.32.0/22 -add china_ip_route 103.217.36.0/22 -add china_ip_route 103.217.40.0/22 -add china_ip_route 103.217.44.0/22 -add china_ip_route 103.217.48.0/22 -add china_ip_route 103.217.52.0/22 -add china_ip_route 103.217.56.0/22 -add china_ip_route 103.217.60.0/22 -add china_ip_route 103.217.168.0/22 -add china_ip_route 103.217.180.0/22 -add china_ip_route 103.217.184.0/22 -add china_ip_route 103.217.188.0/22 -add china_ip_route 103.217.192.0/22 -add china_ip_route 103.217.196.0/22 -add china_ip_route 103.217.200.0/22 -add china_ip_route 103.217.204.0/22 -add china_ip_route 103.218.8.0/22 -add china_ip_route 103.218.12.0/22 -add china_ip_route 103.218.16.0/22 -add china_ip_route 103.218.20.0/22 -add china_ip_route 103.218.28.0/22 -add china_ip_route 103.218.32.0/22 -add china_ip_route 103.218.36.0/22 -add china_ip_route 103.218.40.0/22 -add china_ip_route 103.218.44.0/22 -add china_ip_route 103.218.48.0/22 -add china_ip_route 103.218.52.0/22 -add china_ip_route 103.218.56.0/22 -add china_ip_route 103.218.60.0/22 -add china_ip_route 103.218.64.0/22 -add china_ip_route 103.218.68.0/22 -add china_ip_route 103.218.72.0/22 -add china_ip_route 103.218.76.0/22 -add china_ip_route 103.218.80.0/22 -add china_ip_route 103.218.84.0/22 -add china_ip_route 103.218.88.0/22 -add china_ip_route 103.218.92.0/22 -add china_ip_route 103.218.192.0/22 -add china_ip_route 103.218.196.0/22 -add china_ip_route 103.218.200.0/22 -add china_ip_route 103.218.204.0/22 -add china_ip_route 103.218.208.0/22 -add china_ip_route 103.218.212.0/22 -add china_ip_route 103.218.216.0/22 -add china_ip_route 103.219.24.0/22 -add china_ip_route 103.219.28.0/22 -add china_ip_route 103.219.32.0/22 -add china_ip_route 103.219.36.0/22 -add china_ip_route 103.219.64.0/22 -add china_ip_route 103.219.84.0/22 -add china_ip_route 103.219.88.0/22 -add china_ip_route 103.219.92.0/22 -add china_ip_route 103.219.96.0/22 -add china_ip_route 103.219.100.0/22 -add china_ip_route 103.219.176.0/22 -add china_ip_route 103.219.184.0/22 -add china_ip_route 103.220.48.0/22 -add china_ip_route 103.220.52.0/22 -add china_ip_route 103.220.56.0/22 -add china_ip_route 103.220.60.0/22 -add china_ip_route 103.220.64.0/22 -add china_ip_route 103.220.92.0/22 -add china_ip_route 103.220.96.0/22 -add china_ip_route 103.220.100.0/22 -add china_ip_route 103.220.104.0/22 -add china_ip_route 103.220.108.0/22 -add china_ip_route 103.220.116.0/22 -add china_ip_route 103.220.120.0/22 -add china_ip_route 103.220.124.0/22 -add china_ip_route 103.220.128.0/22 -add china_ip_route 103.220.132.0/22 -add china_ip_route 103.220.136.0/22 -add china_ip_route 103.220.140.0/22 -add china_ip_route 103.220.144.0/22 -add china_ip_route 103.220.148.0/22 -add china_ip_route 103.220.152.0/22 -add china_ip_route 103.220.160.0/22 -add china_ip_route 103.220.164.0/22 -add china_ip_route 103.220.168.0/22 -add china_ip_route 103.220.172.0/22 -add china_ip_route 103.220.176.0/22 -add china_ip_route 103.220.180.0/22 -add china_ip_route 103.220.184.0/22 -add china_ip_route 103.220.188.0/22 -add china_ip_route 103.220.192.0/22 -add china_ip_route 103.220.196.0/22 -add china_ip_route 103.220.200.0/22 -add china_ip_route 103.220.240.0/22 -add china_ip_route 103.220.244.0/22 -add china_ip_route 103.220.248.0/22 -add china_ip_route 103.220.252.0/22 -add china_ip_route 103.221.0.0/22 -add china_ip_route 103.221.4.0/22 -add china_ip_route 103.221.8.0/22 -add china_ip_route 103.221.12.0/22 -add china_ip_route 103.221.16.0/22 -add china_ip_route 103.221.20.0/22 -add china_ip_route 103.221.24.0/22 -add china_ip_route 103.221.28.0/22 -add china_ip_route 103.221.32.0/22 -add china_ip_route 103.221.36.0/22 -add china_ip_route 103.221.40.0/22 -add china_ip_route 103.221.44.0/22 -add china_ip_route 103.221.48.0/22 -add china_ip_route 103.221.88.0/22 -add china_ip_route 103.221.92.0/22 -add china_ip_route 103.221.96.0/22 -add china_ip_route 103.221.100.0/22 -add china_ip_route 103.221.104.0/22 -add china_ip_route 103.221.108.0/22 -add china_ip_route 103.221.112.0/22 -add china_ip_route 103.221.116.0/22 -add china_ip_route 103.221.120.0/22 -add china_ip_route 103.221.124.0/22 -add china_ip_route 103.221.128.0/22 -add china_ip_route 103.221.132.0/22 -add china_ip_route 103.221.136.0/22 -add china_ip_route 103.221.140.0/22 -add china_ip_route 103.221.144.0/22 -add china_ip_route 103.221.148.0/22 -add china_ip_route 103.221.152.0/22 -add china_ip_route 103.221.156.0/22 -add china_ip_route 103.221.160.0/22 -add china_ip_route 103.221.164.0/22 -add china_ip_route 103.221.168.0/22 -add china_ip_route 103.221.172.0/22 -add china_ip_route 103.221.176.0/22 -add china_ip_route 103.221.180.0/22 -add china_ip_route 103.221.184.0/22 -add china_ip_route 103.221.188.0/22 -add china_ip_route 103.221.192.0/22 -add china_ip_route 103.221.196.0/22 -add china_ip_route 103.221.200.0/22 -add china_ip_route 103.221.204.0/22 -add china_ip_route 103.222.0.0/22 -add china_ip_route 103.222.4.0/22 -add china_ip_route 103.222.8.0/22 -add china_ip_route 103.222.12.0/22 -add china_ip_route 103.222.16.0/22 -add china_ip_route 103.222.24.0/22 -add china_ip_route 103.222.28.0/22 -add china_ip_route 103.222.32.0/22 -add china_ip_route 103.222.36.0/22 -add china_ip_route 103.222.40.0/22 -add china_ip_route 103.222.44.0/22 -add china_ip_route 103.222.48.0/22 -add china_ip_route 103.222.52.0/22 -add china_ip_route 103.222.56.0/22 -add china_ip_route 103.222.60.0/22 -add china_ip_route 103.222.64.0/22 -add china_ip_route 103.222.68.0/22 -add china_ip_route 103.222.72.0/22 -add china_ip_route 103.222.76.0/22 -add china_ip_route 103.222.80.0/22 -add china_ip_route 103.222.84.0/22 -add china_ip_route 103.222.88.0/22 -add china_ip_route 103.222.92.0/22 -add china_ip_route 103.222.96.0/22 -add china_ip_route 103.222.100.0/22 -add china_ip_route 103.222.104.0/22 -add china_ip_route 103.222.108.0/22 -add china_ip_route 103.222.112.0/22 -add china_ip_route 103.222.116.0/22 -add china_ip_route 103.222.120.0/22 -add china_ip_route 103.222.124.0/22 -add china_ip_route 103.222.128.0/22 -add china_ip_route 103.222.132.0/22 -add china_ip_route 103.222.136.0/22 -add china_ip_route 103.222.140.0/22 -add china_ip_route 103.222.144.0/22 -add china_ip_route 103.222.148.0/22 -add china_ip_route 103.222.152.0/22 -add china_ip_route 103.222.156.0/22 -add china_ip_route 103.222.160.0/22 -add china_ip_route 103.222.164.0/22 -add china_ip_route 103.222.168.0/22 -add china_ip_route 103.222.172.0/22 -add china_ip_route 103.222.176.0/22 -add china_ip_route 103.222.180.0/22 -add china_ip_route 103.222.184.0/22 -add china_ip_route 103.222.188.0/22 -add china_ip_route 103.222.192.0/22 -add china_ip_route 103.222.196.0/22 -add china_ip_route 103.222.200.0/22 -add china_ip_route 103.222.204.0/22 -add china_ip_route 103.222.208.0/22 -add china_ip_route 103.222.212.0/22 -add china_ip_route 103.222.216.0/22 -add china_ip_route 103.222.220.0/22 -add china_ip_route 103.222.224.0/22 -add china_ip_route 103.222.228.0/22 -add china_ip_route 103.222.232.0/22 -add china_ip_route 103.222.240.0/22 -add china_ip_route 103.222.244.0/22 -add china_ip_route 103.223.16.0/22 -add china_ip_route 103.223.20.0/22 -add china_ip_route 103.223.24.0/22 -add china_ip_route 103.223.28.0/22 -add china_ip_route 103.223.32.0/22 -add china_ip_route 103.223.36.0/22 -add china_ip_route 103.223.40.0/22 -add china_ip_route 103.223.44.0/22 -add china_ip_route 103.223.48.0/22 -add china_ip_route 103.223.52.0/22 -add china_ip_route 103.223.56.0/22 -add china_ip_route 103.223.60.0/22 -add china_ip_route 103.223.64.0/22 -add china_ip_route 103.223.68.0/22 -add china_ip_route 103.223.72.0/22 -add china_ip_route 103.223.76.0/22 -add china_ip_route 103.223.80.0/22 -add china_ip_route 103.223.84.0/22 -add china_ip_route 103.223.88.0/22 -add china_ip_route 103.223.92.0/22 -add china_ip_route 103.223.96.0/22 -add china_ip_route 103.223.100.0/22 -add china_ip_route 103.223.104.0/22 -add china_ip_route 103.223.108.0/22 -add china_ip_route 103.223.112.0/22 -add china_ip_route 103.223.116.0/22 -add china_ip_route 103.223.120.0/22 -add china_ip_route 103.223.124.0/22 -add china_ip_route 103.223.128.0/22 -add china_ip_route 103.223.132.0/22 -add china_ip_route 103.223.140.0/22 -add china_ip_route 103.223.144.0/22 -add china_ip_route 103.223.148.0/22 -add china_ip_route 103.223.152.0/22 -add china_ip_route 103.223.156.0/22 -add china_ip_route 103.223.160.0/22 -add china_ip_route 103.223.164.0/22 -add china_ip_route 103.223.168.0/22 -add china_ip_route 103.223.172.0/22 -add china_ip_route 103.223.176.0/22 -add china_ip_route 103.223.180.0/22 -add china_ip_route 103.223.188.0/22 -add china_ip_route 103.223.192.0/22 -add china_ip_route 103.223.196.0/22 -add china_ip_route 103.223.200.0/22 -add china_ip_route 103.223.204.0/22 -add china_ip_route 103.223.208.0/22 -add china_ip_route 103.223.212.0/22 -add china_ip_route 103.223.216.0/22 -add china_ip_route 103.223.220.0/22 -add china_ip_route 103.223.224.0/22 -add china_ip_route 103.223.228.0/22 -add china_ip_route 103.223.232.0/22 -add china_ip_route 103.223.236.0/22 -add china_ip_route 103.223.240.0/22 -add china_ip_route 103.223.244.0/22 -add china_ip_route 103.223.248.0/22 -add china_ip_route 103.223.252.0/22 -add china_ip_route 103.224.0.0/22 -add china_ip_route 103.224.40.0/22 -add china_ip_route 103.224.44.0/22 -add china_ip_route 103.224.60.0/22 -add china_ip_route 103.224.80.0/22 -add china_ip_route 103.224.220.0/22 -add china_ip_route 103.224.224.0/22 -add china_ip_route 103.224.228.0/22 -add china_ip_route 103.224.232.0/22 -add china_ip_route 103.225.84.0/22 -add china_ip_route 103.226.16.0/22 -add china_ip_route 103.226.40.0/22 -add china_ip_route 103.226.56.0/22 -add china_ip_route 103.226.60.0/22 -add china_ip_route 103.226.80.0/22 -add china_ip_route 103.226.132.0/22 -add china_ip_route 103.226.156.0/22 -add china_ip_route 103.226.180.0/22 -add china_ip_route 103.226.196.0/22 -add china_ip_route 103.227.48.0/22 -add china_ip_route 103.227.72.0/22 -add china_ip_route 103.227.76.0/22 -add china_ip_route 103.227.80.0/22 -add china_ip_route 103.227.100.0/22 -add china_ip_route 103.227.120.0/22 -add china_ip_route 103.227.132.0/22 -add china_ip_route 103.227.136.0/22 -add china_ip_route 103.227.196.0/22 -add china_ip_route 103.227.204.0/22 -add china_ip_route 103.227.212.0/22 -add china_ip_route 103.227.228.0/22 -add china_ip_route 103.228.12.0/22 -add china_ip_route 103.228.88.0/22 -add china_ip_route 103.228.136.0/22 -add china_ip_route 103.228.160.0/22 -add china_ip_route 103.228.176.0/22 -add china_ip_route 103.228.204.0/22 -add china_ip_route 103.228.208.0/22 -add china_ip_route 103.228.228.0/22 -add china_ip_route 103.228.232.0/22 -add china_ip_route 103.229.20.0/22 -add china_ip_route 103.229.60.0/22 -add china_ip_route 103.229.136.0/22 -add china_ip_route 103.229.148.0/22 -add china_ip_route 103.229.172.0/22 -add china_ip_route 103.229.212.0/22 -add china_ip_route 103.229.216.0/22 -add china_ip_route 103.229.220.0/22 -add china_ip_route 103.229.228.0/22 -add china_ip_route 103.229.236.0/22 -add china_ip_route 103.229.240.0/22 -add china_ip_route 103.230.0.0/22 -add china_ip_route 103.230.28.0/22 -add china_ip_route 103.230.44.0/22 -add china_ip_route 103.230.96.0/22 -add china_ip_route 103.230.196.0/22 -add china_ip_route 103.230.200.0/22 -add china_ip_route 103.230.204.0/22 -add china_ip_route 103.230.212.0/22 -add china_ip_route 103.230.236.0/22 -add china_ip_route 103.231.16.0/22 -add china_ip_route 103.231.20.0/22 -add china_ip_route 103.231.64.0/22 -add china_ip_route 103.231.68.0/22 -add china_ip_route 103.231.180.0/22 -add china_ip_route 103.231.184.0/22 -add china_ip_route 103.231.244.0/22 -add china_ip_route 103.232.4.0/22 -add china_ip_route 103.232.144.0/22 -add china_ip_route 103.232.188.0/22 -add china_ip_route 103.232.212.0/22 -add china_ip_route 103.233.4.0/22 -add china_ip_route 103.233.44.0/22 -add china_ip_route 103.233.52.0/22 -add china_ip_route 103.233.104.0/22 -add china_ip_route 103.233.128.0/22 -add china_ip_route 103.233.136.0/22 -add china_ip_route 103.233.228.0/22 -add china_ip_route 103.234.0.0/22 -add china_ip_route 103.234.20.0/22 -add china_ip_route 103.234.56.0/22 -add china_ip_route 103.234.128.0/22 -add china_ip_route 103.234.172.0/22 -add china_ip_route 103.234.180.0/22 -add china_ip_route 103.234.244.0/22 -add china_ip_route 103.235.16.0/22 -add china_ip_route 103.235.48.0/22 -add china_ip_route 103.235.56.0/22 -add china_ip_route 103.235.60.0/22 -add china_ip_route 103.235.80.0/22 -add china_ip_route 103.235.84.0/22 -add china_ip_route 103.235.128.0/22 -add china_ip_route 103.235.132.0/22 -add china_ip_route 103.235.136.0/22 -add china_ip_route 103.235.140.0/22 -add china_ip_route 103.235.144.0/22 -add china_ip_route 103.235.148.0/22 -add china_ip_route 103.235.184.0/22 -add china_ip_route 103.235.192.0/22 -add china_ip_route 103.235.200.0/22 -add china_ip_route 103.235.220.0/22 -add china_ip_route 103.235.224.0/22 -add china_ip_route 103.235.228.0/22 -add china_ip_route 103.235.232.0/22 -add china_ip_route 103.235.236.0/22 -add china_ip_route 103.235.240.0/22 -add china_ip_route 103.235.244.0/22 -add china_ip_route 103.235.248.0/22 -add china_ip_route 103.235.252.0/22 -add china_ip_route 103.236.0.0/22 -add china_ip_route 103.236.4.0/22 -add china_ip_route 103.236.8.0/22 -add china_ip_route 103.236.12.0/22 -add china_ip_route 103.236.16.0/22 -add china_ip_route 103.236.20.0/22 -add china_ip_route 103.236.24.0/22 -add china_ip_route 103.236.28.0/22 -add china_ip_route 103.236.32.0/22 -add china_ip_route 103.236.36.0/22 -add china_ip_route 103.236.40.0/22 -add china_ip_route 103.236.44.0/22 -add china_ip_route 103.236.48.0/22 -add china_ip_route 103.236.52.0/22 -add china_ip_route 103.236.56.0/22 -add china_ip_route 103.236.60.0/22 -add china_ip_route 103.236.64.0/22 -add china_ip_route 103.236.68.0/22 -add china_ip_route 103.236.72.0/22 -add china_ip_route 103.236.76.0/22 -add china_ip_route 103.236.80.0/22 -add china_ip_route 103.236.84.0/22 -add china_ip_route 103.236.88.0/22 -add china_ip_route 103.236.92.0/22 -add china_ip_route 103.236.96.0/22 -add china_ip_route 103.236.120.0/22 -add china_ip_route 103.236.184.0/22 -add china_ip_route 103.236.220.0/22 -add china_ip_route 103.236.232.0/22 -add china_ip_route 103.236.240.0/22 -add china_ip_route 103.236.244.0/22 -add china_ip_route 103.236.248.0/22 -add china_ip_route 103.236.252.0/22 -add china_ip_route 103.237.0.0/22 -add china_ip_route 103.237.4.0/22 -add china_ip_route 103.237.8.0/22 -add china_ip_route 103.237.12.0/22 -add china_ip_route 103.237.24.0/22 -add china_ip_route 103.237.28.0/22 -add china_ip_route 103.237.68.0/22 -add china_ip_route 103.237.88.0/22 -add china_ip_route 103.237.152.0/22 -add china_ip_route 103.237.176.0/22 -add china_ip_route 103.237.180.0/22 -add china_ip_route 103.237.184.0/22 -add china_ip_route 103.237.188.0/22 -add china_ip_route 103.237.192.0/22 -add china_ip_route 103.237.196.0/22 -add china_ip_route 103.237.200.0/22 -add china_ip_route 103.237.204.0/22 -add china_ip_route 103.237.208.0/22 -add china_ip_route 103.237.212.0/22 -add china_ip_route 103.237.216.0/22 -add china_ip_route 103.237.220.0/22 -add china_ip_route 103.237.224.0/22 -add china_ip_route 103.237.228.0/22 -add china_ip_route 103.237.232.0/22 -add china_ip_route 103.237.236.0/22 -add china_ip_route 103.237.240.0/22 -add china_ip_route 103.237.244.0/22 -add china_ip_route 103.237.248.0/22 -add china_ip_route 103.237.252.0/22 -add china_ip_route 103.238.0.0/22 -add china_ip_route 103.238.4.0/22 -add china_ip_route 103.238.16.0/22 -add china_ip_route 103.238.20.0/22 -add china_ip_route 103.238.24.0/22 -add china_ip_route 103.238.28.0/22 -add china_ip_route 103.238.32.0/22 -add china_ip_route 103.238.36.0/22 -add china_ip_route 103.238.40.0/22 -add china_ip_route 103.238.44.0/22 -add china_ip_route 103.238.48.0/22 -add china_ip_route 103.238.52.0/22 -add china_ip_route 103.238.56.0/22 -add china_ip_route 103.238.88.0/22 -add china_ip_route 103.238.92.0/22 -add china_ip_route 103.238.96.0/22 -add china_ip_route 103.238.132.0/22 -add china_ip_route 103.238.140.0/22 -add china_ip_route 103.238.144.0/22 -add china_ip_route 103.238.160.0/22 -add china_ip_route 103.238.164.0/22 -add china_ip_route 103.238.168.0/22 -add china_ip_route 103.238.172.0/22 -add china_ip_route 103.238.176.0/22 -add china_ip_route 103.238.180.0/22 -add china_ip_route 103.238.184.0/22 -add china_ip_route 103.238.188.0/22 -add china_ip_route 103.238.196.0/22 -add china_ip_route 103.238.204.0/22 -add china_ip_route 103.238.252.0/22 -add china_ip_route 103.239.0.0/22 -add china_ip_route 103.239.44.0/22 -add china_ip_route 103.239.68.0/22 -add china_ip_route 103.239.96.0/22 -add china_ip_route 103.239.152.0/22 -add china_ip_route 103.239.156.0/22 -add china_ip_route 103.239.176.0/22 -add china_ip_route 103.239.180.0/22 -add china_ip_route 103.239.184.0/22 -add china_ip_route 103.239.192.0/22 -add china_ip_route 103.239.196.0/22 -add china_ip_route 103.239.204.0/22 -add china_ip_route 103.239.208.0/22 -add china_ip_route 103.239.224.0/22 -add china_ip_route 103.239.244.0/22 -add china_ip_route 103.240.16.0/22 -add china_ip_route 103.240.36.0/22 -add china_ip_route 103.240.72.0/22 -add china_ip_route 103.240.84.0/22 -add china_ip_route 103.240.124.0/22 -add china_ip_route 103.240.172.0/22 -add china_ip_route 103.240.188.0/22 -add china_ip_route 103.240.244.0/22 -add china_ip_route 103.241.12.0/22 -add china_ip_route 103.241.72.0/22 -add china_ip_route 103.241.92.0/22 -add china_ip_route 103.241.96.0/22 -add china_ip_route 103.241.160.0/22 -add china_ip_route 103.241.184.0/22 -add china_ip_route 103.241.188.0/22 -add china_ip_route 103.241.220.0/22 -add china_ip_route 103.242.64.0/22 -add china_ip_route 103.242.128.0/22 -add china_ip_route 103.242.132.0/22 -add china_ip_route 103.242.160.0/22 -add china_ip_route 103.242.168.0/22 -add china_ip_route 103.242.172.0/22 -add china_ip_route 103.242.176.0/22 -add china_ip_route 103.242.200.0/22 -add china_ip_route 103.242.212.0/22 -add china_ip_route 103.242.220.0/22 -add china_ip_route 103.242.240.0/22 -add china_ip_route 103.243.136.0/22 -add china_ip_route 103.243.252.0/22 -add china_ip_route 103.244.16.0/22 -add china_ip_route 103.244.58.0/23 -add china_ip_route 103.244.60.0/22 -add china_ip_route 103.244.64.0/22 -add china_ip_route 103.244.68.0/22 -add china_ip_route 103.244.72.0/22 -add china_ip_route 103.244.76.0/22 -add china_ip_route 103.244.80.0/22 -add china_ip_route 103.244.84.0/22 -add china_ip_route 103.244.116.0/22 -add china_ip_route 103.244.164.0/22 -add china_ip_route 103.244.232.0/22 -add china_ip_route 103.244.252.0/22 -add china_ip_route 103.245.23.0/24 -add china_ip_route 103.245.52.0/22 -add china_ip_route 103.245.60.0/22 -add china_ip_route 103.245.80.0/22 -add china_ip_route 103.245.124.0/22 -add china_ip_route 103.245.128.0/22 -add china_ip_route 103.246.8.0/22 -add china_ip_route 103.246.12.0/22 -add china_ip_route 103.246.120.0/22 -add china_ip_route 103.246.124.0/22 -add china_ip_route 103.246.132.0/22 -add china_ip_route 103.246.152.0/22 -add china_ip_route 103.246.156.0/22 -add china_ip_route 103.247.168.0/22 -add china_ip_route 103.247.172.0/22 -add china_ip_route 103.247.176.0/22 -add china_ip_route 103.247.200.0/22 -add china_ip_route 103.247.212.0/22 -add china_ip_route 103.248.0.0/23 -add china_ip_route 103.248.64.0/22 -add china_ip_route 103.248.100.0/22 -add china_ip_route 103.248.124.0/22 -add china_ip_route 103.248.152.0/22 -add china_ip_route 103.248.168.0/22 -add china_ip_route 103.248.192.0/22 -add china_ip_route 103.248.212.0/22 -add china_ip_route 103.248.224.0/22 -add china_ip_route 103.249.8.0/22 -add china_ip_route 103.249.12.0/22 -add china_ip_route 103.249.52.0/22 -add china_ip_route 103.249.104.0/22 -add china_ip_route 103.249.128.0/22 -add china_ip_route 103.249.136.0/22 -add china_ip_route 103.249.144.0/22 -add china_ip_route 103.249.164.0/22 -add china_ip_route 103.249.168.0/22 -add china_ip_route 103.249.172.0/22 -add china_ip_route 103.249.176.0/22 -add china_ip_route 103.249.188.0/22 -add china_ip_route 103.249.192.0/22 -add china_ip_route 103.249.244.0/22 -add china_ip_route 103.249.252.0/22 -add china_ip_route 103.250.32.0/22 -add china_ip_route 103.250.104.0/22 -add china_ip_route 103.250.124.0/22 -add china_ip_route 103.250.180.0/22 -add china_ip_route 103.250.192.0/22 -add china_ip_route 103.250.216.0/22 -add china_ip_route 103.250.224.0/22 -add china_ip_route 103.250.236.0/22 -add china_ip_route 103.250.248.0/22 -add china_ip_route 103.250.252.0/22 -add china_ip_route 103.251.32.0/22 -add china_ip_route 103.251.84.0/22 -add china_ip_route 103.251.96.0/22 -add china_ip_route 103.251.124.0/22 -add china_ip_route 103.251.128.0/22 -add china_ip_route 103.251.160.0/22 -add china_ip_route 103.251.192.0/22 -add china_ip_route 103.251.204.0/22 -add china_ip_route 103.251.240.0/22 -add china_ip_route 103.252.28.0/22 -add china_ip_route 103.252.36.0/22 -add china_ip_route 103.252.64.0/22 -add china_ip_route 103.252.96.0/22 -add china_ip_route 103.252.104.0/22 -add china_ip_route 103.252.172.0/22 -add china_ip_route 103.252.204.0/22 -add china_ip_route 103.252.208.0/22 -add china_ip_route 103.252.232.0/22 -add china_ip_route 103.252.248.0/22 -add china_ip_route 103.253.4.0/22 -add china_ip_route 103.253.60.0/22 -add china_ip_route 103.253.204.0/22 -add china_ip_route 103.253.220.0/22 -add china_ip_route 103.253.224.0/22 -add china_ip_route 103.253.232.0/22 -add china_ip_route 103.254.8.0/22 -add china_ip_route 103.254.20.0/22 -add china_ip_route 103.254.64.0/22 -add china_ip_route 103.254.68.0/22 -add china_ip_route 103.254.72.0/22 -add china_ip_route 103.254.76.0/22 -add china_ip_route 103.254.112.0/22 -add china_ip_route 103.254.176.0/22 -add china_ip_route 103.254.188.0/22 -add china_ip_route 103.254.196.0/24 -add china_ip_route 103.254.220.0/22 -add china_ip_route 103.255.56.0/22 -add china_ip_route 103.255.68.0/22 -add china_ip_route 103.255.88.0/22 -add china_ip_route 103.255.92.0/22 -add china_ip_route 103.255.136.0/22 -add china_ip_route 103.255.140.0/22 -add china_ip_route 103.255.184.0/22 -add china_ip_route 103.255.200.0/22 -add china_ip_route 103.255.212.0/22 -add china_ip_route 103.255.228.0/22 -add china_ip_route 106.0.0.0/24 -add china_ip_route 106.0.2.0/23 -add china_ip_route 106.0.4.0/22 -add china_ip_route 106.0.8.0/21 -add china_ip_route 106.0.16.0/20 -add china_ip_route 106.0.44.0/22 -add china_ip_route 106.0.64.0/18 -add china_ip_route 106.2.0.0/15 -add china_ip_route 106.4.0.0/14 -add china_ip_route 106.8.0.0/15 -add china_ip_route 106.11.0.0/16 -add china_ip_route 106.12.0.0/14 -add china_ip_route 106.16.0.0/12 -add china_ip_route 106.32.0.0/12 -add china_ip_route 106.48.0.0/15 -add china_ip_route 106.50.0.0/16 -add china_ip_route 106.52.0.0/14 -add china_ip_route 106.56.0.0/13 -add china_ip_route 106.74.0.0/16 -add china_ip_route 106.75.0.0/16 -add china_ip_route 106.80.0.0/12 -add china_ip_route 106.108.0.0/14 -add china_ip_route 106.112.0.0/13 -add china_ip_route 106.120.0.0/13 -add china_ip_route 106.224.0.0/12 -add china_ip_route 109.244.0.0/16 -add china_ip_route 110.6.0.0/15 -add china_ip_route 110.16.0.0/14 -add china_ip_route 110.34.40.0/22 -add china_ip_route 110.34.44.0/22 -add china_ip_route 110.40.0.0/14 -add china_ip_route 110.44.12.0/22 -add china_ip_route 110.44.144.0/20 -add china_ip_route 110.48.0.0/16 -add china_ip_route 110.51.0.0/16 -add china_ip_route 110.52.0.0/15 -add china_ip_route 110.56.0.0/13 -add china_ip_route 110.64.0.0/15 -add china_ip_route 110.72.0.0/15 -add china_ip_route 110.75.0.0/17 -add china_ip_route 110.75.128.0/19 -add china_ip_route 110.75.160.0/19 -add china_ip_route 110.75.192.0/18 -add china_ip_route 110.76.0.0/19 -add china_ip_route 110.76.32.0/19 -add china_ip_route 110.76.132.0/22 -add china_ip_route 110.76.156.0/22 -add china_ip_route 110.76.184.0/22 -add china_ip_route 110.76.192.0/18 -add china_ip_route 110.77.0.0/17 -add china_ip_route 110.80.0.0/13 -add china_ip_route 110.88.0.0/14 -add china_ip_route 110.92.68.0/22 -add china_ip_route 110.93.32.0/19 -add china_ip_route 110.94.0.0/15 -add china_ip_route 110.96.0.0/11 -add china_ip_route 110.152.0.0/14 -add china_ip_route 110.156.0.0/15 -add china_ip_route 110.165.32.0/19 -add china_ip_route 110.166.0.0/15 -add china_ip_route 110.172.192.0/18 -add china_ip_route 110.173.0.0/19 -add china_ip_route 110.173.32.0/20 -add china_ip_route 110.173.64.0/19 -add china_ip_route 110.173.96.0/19 -add china_ip_route 110.173.192.0/19 -add china_ip_route 110.176.0.0/13 -add china_ip_route 110.184.0.0/13 -add china_ip_route 110.192.0.0/11 -add china_ip_route 110.228.0.0/14 -add china_ip_route 110.232.32.0/19 -add china_ip_route 110.236.0.0/15 -add china_ip_route 110.240.0.0/12 -add china_ip_route 111.0.0.0/10 -add china_ip_route 111.66.0.0/16 -add china_ip_route 111.67.192.0/20 -add china_ip_route 111.68.64.0/19 -add china_ip_route 111.72.0.0/13 -add china_ip_route 111.85.0.0/16 -add china_ip_route 111.91.192.0/19 -add china_ip_route 111.92.248.0/22 -add china_ip_route 111.92.252.0/22 -add china_ip_route 111.112.0.0/15 -add china_ip_route 111.114.0.0/15 -add china_ip_route 111.116.0.0/15 -add china_ip_route 111.118.200.0/21 -add china_ip_route 111.119.64.0/18 -add china_ip_route 111.119.128.0/19 -add china_ip_route 111.120.0.0/14 -add china_ip_route 111.124.0.0/16 -add china_ip_route 111.126.0.0/15 -add china_ip_route 111.128.0.0/11 -add china_ip_route 111.160.0.0/13 -add china_ip_route 111.170.0.0/16 -add china_ip_route 111.172.0.0/14 -add china_ip_route 111.176.0.0/13 -add china_ip_route 111.186.0.0/15 -add china_ip_route 111.192.0.0/12 -add china_ip_route 111.208.0.0/14 -add china_ip_route 111.212.0.0/14 -add china_ip_route 111.221.28.0/24 -add china_ip_route 111.221.128.0/17 -add china_ip_route 111.222.0.0/16 -add china_ip_route 111.223.4.0/22 -add china_ip_route 111.223.8.0/22 -add china_ip_route 111.223.12.0/22 -add china_ip_route 111.223.16.0/22 -add china_ip_route 111.223.240.0/22 -add china_ip_route 111.223.248.0/22 -add china_ip_route 111.224.0.0/14 -add china_ip_route 111.228.0.0/14 -add china_ip_route 111.235.96.0/19 -add china_ip_route 111.235.156.0/22 -add china_ip_route 111.235.160.0/19 -add china_ip_route 112.0.0.0/10 -add china_ip_route 112.64.0.0/15 -add china_ip_route 112.66.0.0/15 -add china_ip_route 112.73.0.0/16 -add china_ip_route 112.74.0.0/15 -add china_ip_route 112.80.0.0/13 -add china_ip_route 112.88.0.0/13 -add china_ip_route 112.96.0.0/15 -add china_ip_route 112.98.0.0/15 -add china_ip_route 112.100.0.0/14 -add china_ip_route 112.109.128.0/17 -add china_ip_route 112.111.0.0/16 -add china_ip_route 112.112.0.0/14 -add china_ip_route 112.116.0.0/15 -add china_ip_route 112.122.0.0/15 -add china_ip_route 112.124.0.0/14 -add china_ip_route 112.128.0.0/14 -add china_ip_route 112.132.0.0/16 -add china_ip_route 112.137.48.0/21 -add china_ip_route 112.192.0.0/14 -add china_ip_route 112.224.0.0/11 -add china_ip_route 113.0.0.0/13 -add china_ip_route 113.8.0.0/15 -add china_ip_route 113.11.192.0/19 -add china_ip_route 113.12.0.0/14 -add china_ip_route 113.16.0.0/15 -add china_ip_route 113.18.0.0/16 -add china_ip_route 113.21.232.0/22 -add china_ip_route 113.21.236.0/22 -add china_ip_route 113.24.0.0/14 -add china_ip_route 113.31.0.0/16 -add china_ip_route 113.44.0.0/14 -add china_ip_route 113.48.0.0/14 -add china_ip_route 113.52.160.0/19 -add china_ip_route 113.52.228.0/22 -add china_ip_route 113.54.0.0/15 -add china_ip_route 113.56.0.0/15 -add china_ip_route 113.58.0.0/16 -add china_ip_route 113.59.0.0/17 -add china_ip_route 113.59.224.0/22 -add china_ip_route 113.62.0.0/15 -add china_ip_route 113.64.0.0/11 -add china_ip_route 113.96.0.0/12 -add china_ip_route 113.112.0.0/13 -add china_ip_route 113.120.0.0/13 -add china_ip_route 113.128.0.0/15 -add china_ip_route 113.130.96.0/20 -add china_ip_route 113.130.112.0/21 -add china_ip_route 113.132.0.0/14 -add china_ip_route 113.136.0.0/13 -add china_ip_route 113.194.0.0/15 -add china_ip_route 113.197.100.0/22 -add china_ip_route 113.200.0.0/15 -add china_ip_route 113.202.0.0/16 -add china_ip_route 113.204.0.0/14 -add china_ip_route 113.208.96.0/19 -add china_ip_route 113.208.128.0/17 -add china_ip_route 113.209.0.0/16 -add china_ip_route 113.212.0.0/18 -add china_ip_route 113.212.88.0/22 -add china_ip_route 113.212.100.0/22 -add china_ip_route 113.212.184.0/21 -add china_ip_route 113.213.0.0/17 -add china_ip_route 113.214.0.0/15 -add china_ip_route 113.218.0.0/15 -add china_ip_route 113.220.0.0/14 -add china_ip_route 113.224.0.0/12 -add china_ip_route 113.240.0.0/13 -add china_ip_route 113.248.0.0/14 -add china_ip_route 114.28.0.0/16 -add china_ip_route 114.31.64.0/22 -add china_ip_route 114.31.68.0/22 -add china_ip_route 114.54.0.0/15 -add china_ip_route 114.60.0.0/14 -add china_ip_route 114.64.0.0/14 -add china_ip_route 114.68.0.0/16 -add china_ip_route 114.79.64.0/18 -add china_ip_route 114.80.0.0/12 -add china_ip_route 114.96.0.0/13 -add china_ip_route 114.104.0.0/14 -add china_ip_route 114.110.0.0/20 -add china_ip_route 114.110.64.0/18 -add china_ip_route 114.111.0.0/19 -add china_ip_route 114.111.160.0/19 -add china_ip_route 114.112.0.0/14 -add china_ip_route 114.116.0.0/16 -add china_ip_route 114.117.0.0/17 -add china_ip_route 114.117.128.0/17 -add china_ip_route 114.118.0.0/16 -add china_ip_route 114.119.0.0/17 -add china_ip_route 114.119.192.0/21 -add china_ip_route 114.119.200.0/22 -add china_ip_route 114.119.204.0/22 -add china_ip_route 114.119.208.0/20 -add china_ip_route 114.119.224.0/19 -add china_ip_route 114.132.0.0/16 -add china_ip_route 114.135.0.0/16 -add china_ip_route 114.138.0.0/15 -add china_ip_route 114.141.64.0/21 -add china_ip_route 114.141.80.0/22 -add china_ip_route 114.141.84.0/22 -add china_ip_route 114.141.128.0/18 -add china_ip_route 114.196.0.0/15 -add china_ip_route 114.198.248.0/21 -add china_ip_route 114.208.0.0/14 -add china_ip_route 114.212.0.0/15 -add china_ip_route 114.214.0.0/16 -add china_ip_route 114.215.0.0/16 -add china_ip_route 114.216.0.0/13 -add china_ip_route 114.224.0.0/12 -add china_ip_route 114.240.0.0/12 -add china_ip_route 115.24.0.0/14 -add china_ip_route 115.28.0.0/15 -add china_ip_route 115.31.64.0/22 -add china_ip_route 115.31.68.0/22 -add china_ip_route 115.31.72.0/22 -add china_ip_route 115.31.76.0/22 -add china_ip_route 115.32.0.0/14 -add china_ip_route 115.42.56.0/22 -add china_ip_route 115.44.0.0/15 -add china_ip_route 115.46.0.0/16 -add china_ip_route 115.47.0.0/16 -add china_ip_route 115.48.0.0/12 -add china_ip_route 115.69.64.0/20 -add china_ip_route 115.84.0.0/18 -add china_ip_route 115.84.192.0/19 -add china_ip_route 115.85.192.0/18 -add china_ip_route 115.100.0.0/14 -add china_ip_route 115.104.0.0/14 -add china_ip_route 115.120.0.0/14 -add china_ip_route 115.124.16.0/20 -add china_ip_route 115.148.0.0/14 -add china_ip_route 115.152.0.0/15 -add china_ip_route 115.154.0.0/15 -add china_ip_route 115.156.0.0/15 -add china_ip_route 115.158.0.0/16 -add china_ip_route 115.159.0.0/16 -add china_ip_route 115.166.64.0/19 -add china_ip_route 115.168.0.0/14 -add china_ip_route 115.172.0.0/14 -add china_ip_route 115.180.0.0/15 -add china_ip_route 115.182.0.0/16 -add china_ip_route 115.183.0.0/16 -add china_ip_route 115.187.0.0/22 -add china_ip_route 115.187.4.0/22 -add china_ip_route 115.187.8.0/22 -add china_ip_route 115.187.12.0/22 -add china_ip_route 115.190.0.0/15 -add china_ip_route 115.192.0.0/11 -add china_ip_route 115.224.0.0/12 -add china_ip_route 116.0.8.0/21 -add china_ip_route 116.0.24.0/21 -add china_ip_route 116.1.0.0/16 -add china_ip_route 116.2.0.0/15 -add china_ip_route 116.4.0.0/14 -add china_ip_route 116.8.0.0/14 -add china_ip_route 116.13.0.0/16 -add china_ip_route 116.16.0.0/12 -add china_ip_route 116.50.0.0/20 -add china_ip_route 116.52.0.0/14 -add china_ip_route 116.56.0.0/15 -add china_ip_route 116.58.128.0/20 -add china_ip_route 116.58.208.0/20 -add china_ip_route 116.60.0.0/14 -add china_ip_route 116.66.0.0/17 -add china_ip_route 116.66.176.0/22 -add china_ip_route 116.68.136.0/22 -add china_ip_route 116.68.140.0/22 -add china_ip_route 116.68.176.0/22 -add china_ip_route 116.68.180.0/22 -add china_ip_route 116.69.0.0/16 -add china_ip_route 116.70.0.0/17 -add china_ip_route 116.76.0.0/15 -add china_ip_route 116.78.0.0/15 -add china_ip_route 116.85.0.0/16 -add china_ip_route 116.89.144.0/20 -add china_ip_route 116.89.240.0/22 -add china_ip_route 116.90.80.0/20 -add china_ip_route 116.90.184.0/21 -add china_ip_route 116.95.0.0/16 -add china_ip_route 116.112.0.0/14 -add china_ip_route 116.116.0.0/15 -add china_ip_route 116.128.0.0/10 -add china_ip_route 116.192.0.0/16 -add china_ip_route 116.193.16.0/20 -add china_ip_route 116.193.32.0/19 -add china_ip_route 116.193.152.0/22 -add china_ip_route 116.193.164.0/22 -add china_ip_route 116.193.176.0/21 -add china_ip_route 116.194.0.0/15 -add china_ip_route 116.196.0.0/17 -add china_ip_route 116.196.128.0/18 -add china_ip_route 116.196.192.0/18 -add china_ip_route 116.197.160.0/22 -add china_ip_route 116.197.164.0/22 -add china_ip_route 116.198.0.0/16 -add china_ip_route 116.199.0.0/17 -add china_ip_route 116.199.128.0/19 -add china_ip_route 116.204.0.0/17 -add china_ip_route 116.204.132.0/22 -add china_ip_route 116.204.168.0/22 -add china_ip_route 116.204.216.0/22 -add china_ip_route 116.204.232.0/22 -add china_ip_route 116.205.0.0/16 -add china_ip_route 116.206.92.0/22 -add china_ip_route 116.206.176.0/22 -add china_ip_route 116.207.0.0/16 -add china_ip_route 116.208.0.0/14 -add china_ip_route 116.212.160.0/20 -add china_ip_route 116.213.44.0/22 -add china_ip_route 116.213.64.0/18 -add china_ip_route 116.213.128.0/17 -add china_ip_route 116.214.32.0/19 -add china_ip_route 116.214.64.0/20 -add china_ip_route 116.214.128.0/17 -add china_ip_route 116.215.0.0/16 -add china_ip_route 116.216.0.0/14 -add china_ip_route 116.224.0.0/12 -add china_ip_route 116.242.0.0/15 -add china_ip_route 116.244.0.0/15 -add china_ip_route 116.246.0.0/15 -add china_ip_route 116.248.0.0/15 -add china_ip_route 116.251.64.0/18 -add china_ip_route 116.252.0.0/15 -add china_ip_route 116.254.104.0/22 -add china_ip_route 116.254.108.0/22 -add china_ip_route 116.254.128.0/17 -add china_ip_route 116.255.128.0/17 -add china_ip_route 117.8.0.0/13 -add china_ip_route 117.21.0.0/16 -add china_ip_route 117.22.0.0/15 -add china_ip_route 117.24.0.0/13 -add china_ip_route 117.32.0.0/13 -add china_ip_route 117.40.0.0/14 -add china_ip_route 117.44.0.0/15 -add china_ip_route 117.48.0.0/14 -add china_ip_route 117.53.48.0/20 -add china_ip_route 117.53.176.0/20 -add china_ip_route 117.57.0.0/16 -add china_ip_route 117.58.0.0/17 -add china_ip_route 117.59.0.0/16 -add china_ip_route 117.60.0.0/14 -add china_ip_route 117.64.0.0/13 -add china_ip_route 117.72.0.0/15 -add china_ip_route 117.74.64.0/20 -add china_ip_route 117.74.80.0/20 -add china_ip_route 117.74.128.0/17 -add china_ip_route 117.75.0.0/16 -add china_ip_route 117.76.0.0/14 -add china_ip_route 117.80.0.0/12 -add china_ip_route 117.100.0.0/15 -add china_ip_route 117.103.16.0/20 -add china_ip_route 117.103.40.0/21 -add china_ip_route 117.103.72.0/21 -add china_ip_route 117.103.128.0/20 -add china_ip_route 117.104.168.0/21 -add china_ip_route 117.106.0.0/15 -add china_ip_route 117.112.0.0/13 -add china_ip_route 117.120.64.0/18 -add china_ip_route 117.120.128.0/17 -add china_ip_route 117.121.0.0/17 -add china_ip_route 117.121.128.0/18 -add china_ip_route 117.121.192.0/21 -add china_ip_route 117.122.128.0/17 -add china_ip_route 117.124.0.0/14 -add china_ip_route 117.128.0.0/10 -add china_ip_route 118.24.0.0/15 -add china_ip_route 118.26.0.0/19 -add china_ip_route 118.26.32.0/22 -add china_ip_route 118.26.40.0/21 -add china_ip_route 118.26.48.0/21 -add china_ip_route 118.26.56.0/21 -add china_ip_route 118.26.64.0/19 -add china_ip_route 118.26.96.0/21 -add china_ip_route 118.26.112.0/21 -add china_ip_route 118.26.120.0/21 -add china_ip_route 118.26.128.0/20 -add china_ip_route 118.26.160.0/20 -add china_ip_route 118.26.188.0/22 -add china_ip_route 118.26.192.0/18 -add china_ip_route 118.28.0.0/15 -add china_ip_route 118.30.0.0/16 -add china_ip_route 118.31.0.0/16 -add china_ip_route 118.64.0.0/15 -add china_ip_route 118.66.0.0/16 -add china_ip_route 118.67.112.0/20 -add china_ip_route 118.72.0.0/13 -add china_ip_route 118.80.0.0/15 -add china_ip_route 118.84.0.0/15 -add china_ip_route 118.88.32.0/19 -add china_ip_route 118.88.64.0/18 -add china_ip_route 118.88.128.0/17 -add china_ip_route 118.89.0.0/16 -add china_ip_route 118.91.240.0/20 -add china_ip_route 118.102.16.0/20 -add china_ip_route 118.102.32.0/21 -add china_ip_route 118.103.164.0/22 -add china_ip_route 118.103.168.0/22 -add china_ip_route 118.103.172.0/22 -add china_ip_route 118.103.176.0/22 -add china_ip_route 118.107.180.0/22 -add china_ip_route 118.112.0.0/13 -add china_ip_route 118.120.0.0/14 -add china_ip_route 118.124.0.0/15 -add china_ip_route 118.126.0.0/16 -add china_ip_route 118.127.128.0/19 -add china_ip_route 118.132.0.0/14 -add china_ip_route 118.144.0.0/14 -add china_ip_route 118.178.0.0/16 -add china_ip_route 118.180.0.0/14 -add china_ip_route 118.184.0.0/17 -add china_ip_route 118.184.128.0/17 -add china_ip_route 118.186.0.0/15 -add china_ip_route 118.188.0.0/16 -add china_ip_route 118.190.0.0/16 -add china_ip_route 118.191.0.0/21 -add china_ip_route 118.191.8.0/22 -add china_ip_route 118.191.12.0/24 -add china_ip_route 118.191.16.0/21 -add china_ip_route 118.191.64.0/20 -add china_ip_route 118.191.80.0/22 -add china_ip_route 118.191.128.0/19 -add china_ip_route 118.191.176.0/20 -add china_ip_route 118.191.192.0/20 -add china_ip_route 118.191.208.0/24 -add china_ip_route 118.191.216.0/22 -add china_ip_route 118.191.223.0/24 -add china_ip_route 118.191.224.0/24 -add china_ip_route 118.191.240.0/20 -add china_ip_route 118.192.0.0/16 -add china_ip_route 118.193.0.0/21 -add china_ip_route 118.193.8.0/21 -add china_ip_route 118.193.48.0/21 -add china_ip_route 118.193.96.0/19 -add china_ip_route 118.193.128.0/17 -add china_ip_route 118.194.0.0/17 -add china_ip_route 118.194.128.0/18 -add china_ip_route 118.194.192.0/19 -add china_ip_route 118.194.224.0/22 -add china_ip_route 118.194.240.0/21 -add china_ip_route 118.195.0.0/17 -add china_ip_route 118.195.128.0/17 -add china_ip_route 118.196.0.0/14 -add china_ip_route 118.202.0.0/15 -add china_ip_route 118.204.0.0/14 -add china_ip_route 118.212.0.0/16 -add china_ip_route 118.213.0.0/16 -add china_ip_route 118.215.192.0/18 -add china_ip_route 118.224.0.0/14 -add china_ip_route 118.228.0.0/15 -add china_ip_route 118.230.0.0/16 -add china_ip_route 118.239.0.0/16 -add china_ip_route 118.242.0.0/16 -add china_ip_route 118.244.0.0/14 -add china_ip_route 118.248.0.0/13 -add china_ip_route 119.0.0.0/15 -add china_ip_route 119.2.0.0/19 -add china_ip_route 119.2.128.0/17 -add china_ip_route 119.3.0.0/16 -add china_ip_route 119.4.0.0/14 -add china_ip_route 119.10.0.0/17 -add china_ip_route 119.15.136.0/21 -add china_ip_route 119.16.0.0/16 -add china_ip_route 119.18.192.0/20 -add china_ip_route 119.18.208.0/21 -add china_ip_route 119.18.224.0/20 -add china_ip_route 119.18.240.0/20 -add china_ip_route 119.19.0.0/16 -add china_ip_route 119.20.0.0/14 -add china_ip_route 119.27.64.0/18 -add china_ip_route 119.27.128.0/19 -add china_ip_route 119.27.160.0/19 -add china_ip_route 119.27.192.0/18 -add china_ip_route 119.28.0.0/15 -add china_ip_route 119.30.48.0/20 -add china_ip_route 119.31.192.0/19 -add china_ip_route 119.32.0.0/14 -add china_ip_route 119.36.0.0/16 -add china_ip_route 119.37.0.0/17 -add china_ip_route 119.37.128.0/18 -add china_ip_route 119.37.192.0/18 -add china_ip_route 119.38.0.0/17 -add china_ip_route 119.38.128.0/18 -add china_ip_route 119.38.192.0/20 -add china_ip_route 119.38.208.0/20 -add china_ip_route 119.38.224.0/19 -add china_ip_route 119.39.0.0/16 -add china_ip_route 119.40.0.0/18 -add china_ip_route 119.40.64.0/20 -add china_ip_route 119.40.128.0/17 -add china_ip_route 119.41.0.0/16 -add china_ip_route 119.42.0.0/19 -add china_ip_route 119.42.128.0/21 -add china_ip_route 119.42.136.0/21 -add china_ip_route 119.42.224.0/19 -add china_ip_route 119.44.0.0/15 -add china_ip_route 119.48.0.0/13 -add china_ip_route 119.57.0.0/16 -add china_ip_route 119.58.0.0/16 -add china_ip_route 119.59.128.0/17 -add china_ip_route 119.60.0.0/16 -add china_ip_route 119.61.0.0/16 -add china_ip_route 119.62.0.0/16 -add china_ip_route 119.63.32.0/19 -add china_ip_route 119.75.208.0/20 -add china_ip_route 119.78.0.0/15 -add china_ip_route 119.80.0.0/16 -add china_ip_route 119.82.208.0/20 -add china_ip_route 119.84.0.0/14 -add china_ip_route 119.88.0.0/14 -add china_ip_route 119.96.0.0/13 -add china_ip_route 119.108.0.0/15 -add china_ip_route 119.112.0.0/13 -add china_ip_route 119.120.0.0/13 -add china_ip_route 119.128.0.0/12 -add china_ip_route 119.144.0.0/14 -add china_ip_route 119.148.160.0/20 -add china_ip_route 119.148.176.0/20 -add china_ip_route 119.151.192.0/18 -add china_ip_route 119.160.200.0/21 -add china_ip_route 119.161.120.0/22 -add china_ip_route 119.161.124.0/22 -add china_ip_route 119.161.128.0/17 -add china_ip_route 119.162.0.0/15 -add china_ip_route 119.164.0.0/14 -add china_ip_route 119.176.0.0/12 -add china_ip_route 119.232.0.0/15 -add china_ip_route 119.235.128.0/18 -add china_ip_route 119.248.0.0/14 -add china_ip_route 119.252.96.0/21 -add china_ip_route 119.252.240.0/20 -add china_ip_route 119.253.0.0/16 -add china_ip_route 119.254.0.0/15 -add china_ip_route 120.0.0.0/12 -add china_ip_route 120.24.0.0/14 -add china_ip_route 120.30.0.0/16 -add china_ip_route 120.31.0.0/16 -add china_ip_route 120.32.0.0/13 -add china_ip_route 120.40.0.0/14 -add china_ip_route 120.44.0.0/15 -add china_ip_route 120.46.0.0/16 -add china_ip_route 120.47.0.0/16 -add china_ip_route 120.48.0.0/15 -add china_ip_route 120.52.0.0/16 -add china_ip_route 120.53.0.0/16 -add china_ip_route 120.54.0.0/15 -add china_ip_route 120.64.0.0/14 -add china_ip_route 120.68.0.0/14 -add china_ip_route 120.72.32.0/19 -add china_ip_route 120.72.128.0/17 -add china_ip_route 120.76.0.0/14 -add china_ip_route 120.80.0.0/13 -add china_ip_route 120.88.8.0/21 -add china_ip_route 120.90.0.0/15 -add china_ip_route 120.92.0.0/16 -add china_ip_route 120.94.0.0/16 -add china_ip_route 120.95.0.0/16 -add china_ip_route 120.128.0.0/14 -add china_ip_route 120.132.0.0/17 -add china_ip_route 120.132.128.0/17 -add china_ip_route 120.133.0.0/16 -add china_ip_route 120.134.0.0/15 -add china_ip_route 120.136.16.0/22 -add china_ip_route 120.136.20.0/22 -add china_ip_route 120.136.128.0/18 -add china_ip_route 120.137.0.0/17 -add china_ip_route 120.143.128.0/19 -add china_ip_route 120.192.0.0/10 -add china_ip_route 121.0.8.0/21 -add china_ip_route 121.0.16.0/20 -add china_ip_route 121.4.0.0/15 -add china_ip_route 121.8.0.0/13 -add china_ip_route 121.16.0.0/13 -add china_ip_route 121.24.0.0/14 -add china_ip_route 121.28.0.0/15 -add china_ip_route 121.30.0.0/16 -add china_ip_route 121.31.0.0/16 -add china_ip_route 121.32.0.0/14 -add china_ip_route 121.36.0.0/16 -add china_ip_route 121.37.0.0/16 -add china_ip_route 121.38.0.0/15 -add china_ip_route 121.40.0.0/14 -add china_ip_route 121.46.0.0/18 -add china_ip_route 121.46.76.0/22 -add china_ip_route 121.46.128.0/17 -add china_ip_route 121.47.0.0/16 -add china_ip_route 121.48.0.0/15 -add china_ip_route 121.50.8.0/21 -add china_ip_route 121.51.0.0/16 -add china_ip_route 121.52.160.0/19 -add china_ip_route 121.52.208.0/20 -add china_ip_route 121.52.224.0/19 -add china_ip_route 121.54.176.0/21 -add china_ip_route 121.54.188.0/22 -add china_ip_route 121.55.0.0/18 -add china_ip_route 121.56.0.0/15 -add china_ip_route 121.58.0.0/17 -add china_ip_route 121.58.136.0/21 -add china_ip_route 121.58.144.0/20 -add china_ip_route 121.58.160.0/21 -add china_ip_route 121.59.0.0/16 -add china_ip_route 121.60.0.0/14 -add china_ip_route 121.68.0.0/14 -add china_ip_route 121.76.0.0/15 -add china_ip_route 121.79.128.0/18 -add china_ip_route 121.89.0.0/16 -add china_ip_route 121.91.104.0/21 -add china_ip_route 121.100.128.0/17 -add china_ip_route 121.101.0.0/18 -add china_ip_route 121.101.208.0/20 -add china_ip_route 121.192.0.0/16 -add china_ip_route 121.193.0.0/16 -add china_ip_route 121.194.0.0/15 -add china_ip_route 121.196.0.0/14 -add china_ip_route 121.200.192.0/21 -add china_ip_route 121.201.0.0/16 -add china_ip_route 121.204.0.0/14 -add china_ip_route 121.224.0.0/12 -add china_ip_route 121.248.0.0/14 -add china_ip_route 121.255.0.0/16 -add china_ip_route 122.0.64.0/18 -add china_ip_route 122.0.128.0/17 -add china_ip_route 122.4.0.0/14 -add china_ip_route 122.8.0.0/17 -add china_ip_route 122.8.192.0/18 -add china_ip_route 122.9.0.0/16 -add china_ip_route 122.10.128.0/22 -add china_ip_route 122.10.132.0/23 -add china_ip_route 122.10.136.0/23 -add china_ip_route 122.10.164.0/22 -add china_ip_route 122.10.168.0/21 -add china_ip_route 122.10.176.0/20 -add china_ip_route 122.10.192.0/22 -add china_ip_route 122.10.200.0/21 -add china_ip_route 122.10.208.0/21 -add china_ip_route 122.10.216.0/22 -add china_ip_route 122.10.228.0/22 -add china_ip_route 122.10.232.0/21 -add china_ip_route 122.10.240.0/22 -add china_ip_route 122.11.0.0/17 -add china_ip_route 122.12.0.0/16 -add china_ip_route 122.13.0.0/16 -add china_ip_route 122.14.0.0/17 -add china_ip_route 122.14.128.0/18 -add china_ip_route 122.14.192.0/18 -add china_ip_route 122.48.0.0/16 -add china_ip_route 122.49.0.0/18 -add china_ip_route 122.51.0.0/16 -add china_ip_route 122.64.0.0/11 -add china_ip_route 122.96.0.0/15 -add china_ip_route 122.102.0.0/20 -add china_ip_route 122.102.64.0/20 -add china_ip_route 122.102.80.0/20 -add china_ip_route 122.112.0.0/18 -add china_ip_route 122.112.64.0/18 -add china_ip_route 122.112.128.0/17 -add china_ip_route 122.113.0.0/16 -add china_ip_route 122.114.0.0/16 -add china_ip_route 122.115.0.0/17 -add china_ip_route 122.115.128.0/19 -add china_ip_route 122.115.160.0/19 -add china_ip_route 122.115.192.0/19 -add china_ip_route 122.115.224.0/19 -add china_ip_route 122.119.0.0/16 -add china_ip_route 122.128.100.0/22 -add china_ip_route 122.128.120.0/21 -add china_ip_route 122.136.0.0/13 -add china_ip_route 122.144.128.0/17 -add china_ip_route 122.152.192.0/18 -add china_ip_route 122.156.0.0/14 -add china_ip_route 122.188.0.0/14 -add china_ip_route 122.192.0.0/14 -add china_ip_route 122.198.0.0/16 -add china_ip_route 122.200.40.0/22 -add china_ip_route 122.200.44.0/22 -add china_ip_route 122.200.64.0/18 -add china_ip_route 122.201.48.0/20 -add china_ip_route 122.204.0.0/14 -add china_ip_route 122.224.0.0/12 -add china_ip_route 122.240.0.0/13 -add china_ip_route 122.248.24.0/21 -add china_ip_route 122.248.48.0/20 -add china_ip_route 122.255.64.0/21 -add china_ip_route 123.0.128.0/18 -add china_ip_route 123.4.0.0/14 -add china_ip_route 123.8.0.0/13 -add china_ip_route 123.49.128.0/17 -add china_ip_route 123.50.160.0/19 -add china_ip_route 123.52.0.0/14 -add china_ip_route 123.56.0.0/15 -add china_ip_route 123.58.0.0/20 -add china_ip_route 123.58.16.0/20 -add china_ip_route 123.58.32.0/19 -add china_ip_route 123.58.64.0/19 -add china_ip_route 123.58.96.0/19 -add china_ip_route 123.58.128.0/18 -add china_ip_route 123.58.224.0/20 -add china_ip_route 123.58.240.0/20 -add china_ip_route 123.59.0.0/16 -add china_ip_route 123.60.0.0/16 -add china_ip_route 123.61.0.0/16 -add china_ip_route 123.62.0.0/16 -add china_ip_route 123.64.0.0/11 -add china_ip_route 123.96.0.0/15 -add china_ip_route 123.98.0.0/17 -add china_ip_route 123.99.128.0/17 -add china_ip_route 123.100.0.0/19 -add china_ip_route 123.101.0.0/16 -add china_ip_route 123.103.0.0/17 -add china_ip_route 123.108.128.0/20 -add china_ip_route 123.108.208.0/20 -add china_ip_route 123.112.0.0/12 -add china_ip_route 123.128.0.0/13 -add china_ip_route 123.136.80.0/20 -add china_ip_route 123.137.0.0/16 -add china_ip_route 123.138.0.0/15 -add china_ip_route 123.144.0.0/14 -add china_ip_route 123.148.0.0/16 -add china_ip_route 123.149.0.0/16 -add china_ip_route 123.150.0.0/15 -add china_ip_route 123.152.0.0/13 -add china_ip_route 123.160.0.0/14 -add china_ip_route 123.164.0.0/14 -add china_ip_route 123.168.0.0/14 -add china_ip_route 123.172.0.0/15 -add china_ip_route 123.174.0.0/15 -add china_ip_route 123.176.60.0/22 -add china_ip_route 123.176.80.0/20 -add china_ip_route 123.177.0.0/16 -add china_ip_route 123.178.0.0/15 -add china_ip_route 123.180.0.0/14 -add china_ip_route 123.184.0.0/14 -add china_ip_route 123.188.0.0/14 -add china_ip_route 123.196.0.0/15 -add china_ip_route 123.199.128.0/17 -add china_ip_route 123.206.0.0/15 -add china_ip_route 123.232.0.0/14 -add china_ip_route 123.242.0.0/17 -add china_ip_route 123.242.192.0/22 -add china_ip_route 123.242.196.0/22 -add china_ip_route 123.244.0.0/14 -add china_ip_route 123.249.0.0/16 -add china_ip_route 123.253.108.0/22 -add china_ip_route 123.253.240.0/22 -add china_ip_route 123.254.96.0/22 -add china_ip_route 123.254.100.0/22 -add china_ip_route 124.6.64.0/18 -add china_ip_route 124.14.0.0/15 -add china_ip_route 124.16.0.0/15 -add china_ip_route 124.20.0.0/16 -add china_ip_route 124.21.0.0/20 -add china_ip_route 124.21.16.0/20 -add china_ip_route 124.21.32.0/19 -add china_ip_route 124.21.64.0/18 -add china_ip_route 124.21.128.0/17 -add china_ip_route 124.22.0.0/15 -add china_ip_route 124.28.192.0/18 -add china_ip_route 124.29.0.0/17 -add china_ip_route 124.31.0.0/16 -add china_ip_route 124.40.112.0/20 -add china_ip_route 124.40.128.0/18 -add china_ip_route 124.40.192.0/19 -add china_ip_route 124.40.240.0/22 -add china_ip_route 124.42.0.0/17 -add china_ip_route 124.42.128.0/17 -add china_ip_route 124.47.0.0/18 -add china_ip_route 124.64.0.0/15 -add china_ip_route 124.66.0.0/17 -add china_ip_route 124.67.0.0/16 -add china_ip_route 124.68.0.0/15 -add china_ip_route 124.70.0.0/15 -add china_ip_route 124.72.0.0/16 -add china_ip_route 124.73.0.0/16 -add china_ip_route 124.74.0.0/15 -add china_ip_route 124.76.0.0/14 -add china_ip_route 124.88.0.0/16 -add china_ip_route 124.89.0.0/17 -add china_ip_route 124.89.128.0/17 -add china_ip_route 124.90.0.0/15 -add china_ip_route 124.92.0.0/14 -add china_ip_route 124.108.8.0/21 -add china_ip_route 124.108.40.0/21 -add china_ip_route 124.109.96.0/21 -add china_ip_route 124.112.0.0/15 -add china_ip_route 124.114.0.0/15 -add china_ip_route 124.116.0.0/16 -add china_ip_route 124.117.0.0/16 -add china_ip_route 124.118.0.0/15 -add china_ip_route 124.126.0.0/15 -add china_ip_route 124.128.0.0/13 -add china_ip_route 124.147.128.0/17 -add china_ip_route 124.150.137.0/24 -add china_ip_route 124.151.0.0/16 -add china_ip_route 124.152.0.0/16 -add china_ip_route 124.160.0.0/16 -add china_ip_route 124.161.0.0/16 -add china_ip_route 124.162.0.0/16 -add china_ip_route 124.163.0.0/16 -add china_ip_route 124.164.0.0/14 -add china_ip_route 124.172.0.0/15 -add china_ip_route 124.174.0.0/15 -add china_ip_route 124.192.0.0/15 -add china_ip_route 124.196.0.0/16 -add china_ip_route 124.200.0.0/13 -add china_ip_route 124.220.0.0/14 -add china_ip_route 124.224.0.0/16 -add china_ip_route 124.225.0.0/16 -add china_ip_route 124.226.0.0/15 -add china_ip_route 124.228.0.0/14 -add china_ip_route 124.232.0.0/15 -add china_ip_route 124.234.0.0/15 -add china_ip_route 124.236.0.0/14 -add china_ip_route 124.240.0.0/17 -add china_ip_route 124.240.128.0/18 -add china_ip_route 124.242.0.0/16 -add china_ip_route 124.243.192.0/18 -add china_ip_route 124.248.0.0/17 -add china_ip_route 124.249.0.0/16 -add china_ip_route 124.250.0.0/15 -add china_ip_route 124.254.0.0/18 -add china_ip_route 125.31.192.0/18 -add china_ip_route 125.32.0.0/16 -add china_ip_route 125.33.0.0/16 -add china_ip_route 125.34.0.0/16 -add china_ip_route 125.35.0.0/17 -add china_ip_route 125.35.128.0/17 -add china_ip_route 125.36.0.0/14 -add china_ip_route 125.40.0.0/13 -add china_ip_route 125.58.128.0/17 -add china_ip_route 125.61.128.0/17 -add china_ip_route 125.62.0.0/18 -add china_ip_route 125.64.0.0/13 -add china_ip_route 125.72.0.0/16 -add china_ip_route 125.73.0.0/16 -add china_ip_route 125.74.0.0/15 -add china_ip_route 125.76.0.0/17 -add china_ip_route 125.76.128.0/17 -add china_ip_route 125.77.0.0/16 -add china_ip_route 125.78.0.0/15 -add china_ip_route 125.80.0.0/13 -add china_ip_route 125.88.0.0/13 -add china_ip_route 125.96.0.0/15 -add china_ip_route 125.98.0.0/16 -add china_ip_route 125.104.0.0/13 -add china_ip_route 125.112.0.0/12 -add china_ip_route 125.169.0.0/16 -add china_ip_route 125.171.0.0/16 -add china_ip_route 125.208.0.0/18 -add china_ip_route 125.210.0.0/16 -add china_ip_route 125.211.0.0/16 -add china_ip_route 125.213.0.0/17 -add china_ip_route 125.214.96.0/19 -add china_ip_route 125.215.0.0/18 -add china_ip_route 125.216.0.0/15 -add china_ip_route 125.218.0.0/16 -add china_ip_route 125.219.0.0/16 -add china_ip_route 125.220.0.0/15 -add china_ip_route 125.222.0.0/15 -add china_ip_route 125.254.128.0/18 -add china_ip_route 125.254.192.0/18 -add china_ip_route 128.108.0.0/16 -add china_ip_route 129.28.0.0/16 -add china_ip_route 129.204.0.0/16 -add china_ip_route 129.211.0.0/16 -add china_ip_route 132.232.0.0/16 -add china_ip_route 134.175.0.0/16 -add china_ip_route 137.59.59.0/24 -add china_ip_route 137.59.88.0/22 -add china_ip_route 139.5.56.0/22 -add china_ip_route 139.5.60.0/22 -add china_ip_route 139.5.80.0/22 -add china_ip_route 139.5.92.0/22 -add china_ip_route 139.5.108.0/22 -add china_ip_route 139.5.128.0/22 -add china_ip_route 139.5.160.0/22 -add china_ip_route 139.5.192.0/22 -add china_ip_route 139.5.204.0/22 -add china_ip_route 139.5.208.0/22 -add china_ip_route 139.5.212.0/22 -add china_ip_route 139.5.244.0/22 -add china_ip_route 139.9.0.0/16 -add china_ip_route 139.129.0.0/16 -add china_ip_route 139.148.0.0/16 -add china_ip_route 139.155.0.0/16 -add china_ip_route 139.159.0.0/16 -add china_ip_route 139.170.0.0/16 -add china_ip_route 139.176.0.0/16 -add china_ip_route 139.183.0.0/16 -add china_ip_route 139.186.0.0/16 -add china_ip_route 139.189.0.0/16 -add china_ip_route 139.196.0.0/14 -add china_ip_route 139.200.0.0/13 -add china_ip_route 139.208.0.0/13 -add china_ip_route 139.217.0.0/16 -add china_ip_route 139.219.0.0/16 -add china_ip_route 139.220.0.0/15 -add china_ip_route 139.224.0.0/16 -add china_ip_route 139.226.0.0/15 -add china_ip_route 140.75.0.0/16 -add china_ip_route 140.143.0.0/16 -add china_ip_route 140.179.0.0/16 -add china_ip_route 140.205.0.0/16 -add china_ip_route 140.206.0.0/15 -add china_ip_route 140.210.0.0/17 -add china_ip_route 140.210.128.0/17 -add china_ip_route 140.224.0.0/16 -add china_ip_route 140.237.0.0/16 -add china_ip_route 140.240.0.0/16 -add china_ip_route 140.243.0.0/16 -add china_ip_route 140.246.0.0/16 -add china_ip_route 140.249.0.0/16 -add china_ip_route 140.250.0.0/16 -add china_ip_route 140.255.0.0/16 -add china_ip_route 142.70.0.0/16 -add china_ip_route 142.86.0.0/16 -add china_ip_route 144.0.0.0/16 -add china_ip_route 144.7.0.0/16 -add china_ip_route 144.12.0.0/16 -add china_ip_route 144.48.8.0/22 -add china_ip_route 144.48.64.0/22 -add china_ip_route 144.48.88.0/22 -add china_ip_route 144.48.156.0/22 -add china_ip_route 144.48.180.0/22 -add china_ip_route 144.48.184.0/22 -add china_ip_route 144.48.204.0/22 -add china_ip_route 144.48.208.0/22 -add china_ip_route 144.48.212.0/22 -add china_ip_route 144.48.220.0/22 -add china_ip_route 144.48.252.0/22 -add china_ip_route 144.52.0.0/16 -add china_ip_route 144.123.0.0/16 -add china_ip_route 144.255.0.0/16 -add china_ip_route 146.56.192.0/18 -add china_ip_route 146.196.56.0/22 -add china_ip_route 146.196.68.0/22 -add china_ip_route 146.196.72.0/22 -add china_ip_route 146.196.92.0/22 -add china_ip_route 146.196.112.0/22 -add china_ip_route 146.196.116.0/22 -add china_ip_route 146.196.124.0/22 -add china_ip_route 148.70.0.0/16 -add china_ip_route 149.41.0.0/16 -add china_ip_route 150.0.0.0/16 -add china_ip_route 150.115.0.0/16 -add china_ip_route 150.121.0.0/16 -add china_ip_route 150.122.0.0/16 -add china_ip_route 150.129.136.0/22 -add china_ip_route 150.129.192.0/22 -add china_ip_route 150.129.216.0/22 -add china_ip_route 150.129.252.0/22 -add china_ip_route 150.138.0.0/15 -add china_ip_route 150.158.0.0/16 -add china_ip_route 150.223.0.0/16 -add china_ip_route 150.242.0.0/22 -add china_ip_route 150.242.4.0/22 -add china_ip_route 150.242.8.0/22 -add china_ip_route 150.242.28.0/22 -add china_ip_route 150.242.44.0/22 -add china_ip_route 150.242.48.0/22 -add china_ip_route 150.242.52.0/22 -add china_ip_route 150.242.56.0/22 -add china_ip_route 150.242.76.0/22 -add china_ip_route 150.242.80.0/22 -add china_ip_route 150.242.92.0/22 -add china_ip_route 150.242.96.0/22 -add china_ip_route 150.242.112.0/22 -add china_ip_route 150.242.116.0/22 -add china_ip_route 150.242.120.0/22 -add china_ip_route 150.242.152.0/22 -add china_ip_route 150.242.156.0/22 -add china_ip_route 150.242.160.0/22 -add china_ip_route 150.242.164.0/22 -add china_ip_route 150.242.168.0/22 -add china_ip_route 150.242.184.0/22 -add china_ip_route 150.242.188.0/22 -add china_ip_route 150.242.192.0/22 -add china_ip_route 150.242.212.0/22 -add china_ip_route 150.242.224.0/22 -add china_ip_route 150.242.232.0/22 -add china_ip_route 150.242.236.0/22 -add china_ip_route 150.242.240.0/22 -add china_ip_route 150.242.244.0/22 -add china_ip_route 150.242.248.0/22 -add china_ip_route 150.248.0.0/16 -add china_ip_route 150.255.0.0/16 -add china_ip_route 152.104.128.0/17 -add china_ip_route 152.136.0.0/16 -add china_ip_route 153.0.0.0/16 -add china_ip_route 153.3.0.0/16 -add china_ip_route 153.34.0.0/15 -add china_ip_route 153.36.0.0/15 -add china_ip_route 153.99.0.0/16 -add china_ip_route 153.101.0.0/16 -add china_ip_route 153.118.0.0/15 -add china_ip_route 154.8.128.0/17 -add china_ip_route 157.0.0.0/16 -add china_ip_route 157.18.0.0/16 -add china_ip_route 157.61.0.0/16 -add china_ip_route 157.119.0.0/22 -add china_ip_route 157.119.8.0/22 -add china_ip_route 157.119.12.0/22 -add china_ip_route 157.119.16.0/22 -add china_ip_route 157.119.28.0/22 -add china_ip_route 157.119.132.0/22 -add china_ip_route 157.119.136.0/22 -add china_ip_route 157.119.140.0/22 -add china_ip_route 157.119.144.0/22 -add china_ip_route 157.119.148.0/22 -add china_ip_route 157.119.152.0/22 -add china_ip_route 157.119.156.0/22 -add china_ip_route 157.119.160.0/22 -add china_ip_route 157.119.164.0/22 -add china_ip_route 157.119.172.0/22 -add china_ip_route 157.119.192.0/22 -add china_ip_route 157.119.196.0/22 -add china_ip_route 157.119.240.0/22 -add china_ip_route 157.119.252.0/22 -add china_ip_route 157.122.0.0/16 -add china_ip_route 157.148.0.0/16 -add china_ip_route 157.156.0.0/16 -add china_ip_route 157.255.0.0/16 -add china_ip_route 158.60.0.0/16 -add china_ip_route 158.79.0.0/16 -add china_ip_route 159.27.0.0/16 -add china_ip_route 159.75.0.0/16 -add china_ip_route 159.226.0.0/16 -add china_ip_route 160.19.208.0/22 -add china_ip_route 160.19.212.0/22 -add china_ip_route 160.19.216.0/22 -add china_ip_route 160.20.48.0/22 -add china_ip_route 160.202.60.0/22 -add china_ip_route 160.202.148.0/22 -add china_ip_route 160.202.152.0/22 -add china_ip_route 160.202.168.0/22 -add china_ip_route 160.202.212.0/22 -add china_ip_route 160.202.216.0/22 -add china_ip_route 160.202.220.0/22 -add china_ip_route 160.202.224.0/22 -add china_ip_route 160.202.228.0/22 -add china_ip_route 160.202.232.0/22 -add china_ip_route 160.202.236.0/22 -add china_ip_route 160.202.240.0/22 -add china_ip_route 160.202.244.0/22 -add china_ip_route 160.202.248.0/22 -add china_ip_route 160.202.252.0/22 -add china_ip_route 160.238.64.0/22 -add china_ip_route 161.120.0.0/16 -add china_ip_route 161.189.0.0/16 -add china_ip_route 161.207.0.0/16 -add china_ip_route 162.14.0.0/16 -add china_ip_route 162.105.0.0/16 -add china_ip_route 163.0.0.0/16 -add china_ip_route 163.47.4.0/22 -add china_ip_route 163.53.0.0/22 -add china_ip_route 163.53.4.0/22 -add china_ip_route 163.53.8.0/22 -add china_ip_route 163.53.12.0/22 -add china_ip_route 163.53.36.0/22 -add china_ip_route 163.53.40.0/22 -add china_ip_route 163.53.44.0/22 -add china_ip_route 163.53.48.0/22 -add china_ip_route 163.53.52.0/22 -add china_ip_route 163.53.56.0/22 -add china_ip_route 163.53.60.0/22 -add china_ip_route 163.53.64.0/22 -add china_ip_route 163.53.88.0/22 -add china_ip_route 163.53.92.0/22 -add china_ip_route 163.53.96.0/22 -add china_ip_route 163.53.100.0/22 -add china_ip_route 163.53.104.0/22 -add china_ip_route 163.53.108.0/22 -add china_ip_route 163.53.112.0/22 -add china_ip_route 163.53.116.0/22 -add china_ip_route 163.53.120.0/22 -add china_ip_route 163.53.124.0/22 -add china_ip_route 163.53.128.0/22 -add china_ip_route 163.53.132.0/22 -add china_ip_route 163.53.136.0/22 -add china_ip_route 163.53.160.0/22 -add china_ip_route 163.53.164.0/22 -add china_ip_route 163.53.168.0/22 -add china_ip_route 163.53.172.0/22 -add china_ip_route 163.53.188.0/22 -add china_ip_route 163.53.220.0/22 -add china_ip_route 163.53.240.0/22 -add china_ip_route 163.125.0.0/16 -add china_ip_route 163.142.0.0/16 -add china_ip_route 163.177.0.0/16 -add china_ip_route 163.179.0.0/16 -add china_ip_route 163.204.0.0/16 -add china_ip_route 163.228.0.0/16 -add china_ip_route 164.52.0.0/17 -add china_ip_route 166.111.0.0/16 -add china_ip_route 167.139.0.0/16 -add china_ip_route 167.189.0.0/16 -add china_ip_route 167.220.244.0/22 -add china_ip_route 168.160.0.0/16 -add china_ip_route 170.179.0.0/16 -add china_ip_route 171.8.0.0/13 -add china_ip_route 171.34.0.0/15 -add china_ip_route 171.36.0.0/14 -add china_ip_route 171.40.0.0/13 -add china_ip_route 171.80.0.0/14 -add china_ip_route 171.84.0.0/14 -add china_ip_route 171.88.0.0/13 -add china_ip_route 171.104.0.0/13 -add china_ip_route 171.112.0.0/14 -add china_ip_route 171.116.0.0/14 -add china_ip_route 171.120.0.0/13 -add china_ip_route 171.208.0.0/12 -add china_ip_route 172.81.192.0/18 -add china_ip_route 175.0.0.0/12 -add china_ip_route 175.16.0.0/13 -add china_ip_route 175.24.0.0/16 -add china_ip_route 175.25.0.0/16 -add china_ip_route 175.26.0.0/16 -add china_ip_route 175.27.0.0/16 -add china_ip_route 175.30.0.0/15 -add china_ip_route 175.42.0.0/15 -add china_ip_route 175.44.0.0/16 -add china_ip_route 175.46.0.0/15 -add china_ip_route 175.48.0.0/12 -add china_ip_route 175.64.0.0/11 -add china_ip_route 175.102.0.0/16 -add china_ip_route 175.106.128.0/17 -add china_ip_route 175.111.144.0/22 -add china_ip_route 175.111.148.0/22 -add china_ip_route 175.111.152.0/22 -add china_ip_route 175.111.156.0/22 -add china_ip_route 175.111.160.0/22 -add china_ip_route 175.111.164.0/22 -add china_ip_route 175.111.168.0/22 -add china_ip_route 175.111.172.0/22 -add china_ip_route 175.111.184.0/22 -add china_ip_route 175.146.0.0/15 -add china_ip_route 175.148.0.0/14 -add china_ip_route 175.152.0.0/14 -add china_ip_route 175.158.96.0/22 -add china_ip_route 175.160.0.0/12 -add china_ip_route 175.176.156.0/22 -add china_ip_route 175.176.176.0/22 -add china_ip_route 175.176.188.0/22 -add china_ip_route 175.176.192.0/22 -add china_ip_route 175.178.0.0/16 -add china_ip_route 175.184.128.0/18 -add china_ip_route 175.185.0.0/16 -add china_ip_route 175.186.0.0/15 -add china_ip_route 175.188.0.0/14 -add china_ip_route 180.76.0.0/16 -add china_ip_route 180.77.0.0/16 -add china_ip_route 180.78.0.0/15 -add china_ip_route 180.84.0.0/15 -add china_ip_route 180.86.0.0/16 -add china_ip_route 180.88.0.0/14 -add china_ip_route 180.94.56.0/21 -add china_ip_route 180.94.96.0/20 -add china_ip_route 180.94.120.0/22 -add china_ip_route 180.94.124.0/22 -add china_ip_route 180.95.128.0/17 -add china_ip_route 180.96.0.0/11 -add china_ip_route 180.129.128.0/17 -add china_ip_route 180.130.0.0/16 -add china_ip_route 180.136.0.0/13 -add china_ip_route 180.148.16.0/21 -add china_ip_route 180.148.152.0/21 -add china_ip_route 180.148.216.0/21 -add china_ip_route 180.148.224.0/19 -add china_ip_route 180.149.128.0/19 -add china_ip_route 180.149.236.0/22 -add china_ip_route 180.150.160.0/19 -add china_ip_route 180.152.0.0/13 -add china_ip_route 180.160.0.0/12 -add china_ip_route 180.178.112.0/22 -add china_ip_route 180.178.116.0/22 -add china_ip_route 180.178.192.0/18 -add china_ip_route 180.184.0.0/15 -add china_ip_route 180.186.0.0/16 -add china_ip_route 180.187.0.0/16 -add china_ip_route 180.188.0.0/17 -add china_ip_route 180.189.148.0/22 -add china_ip_route 180.200.252.0/22 -add china_ip_route 180.201.0.0/16 -add china_ip_route 180.202.0.0/15 -add china_ip_route 180.208.0.0/15 -add china_ip_route 180.210.212.0/22 -add china_ip_route 180.210.224.0/19 -add china_ip_route 180.212.0.0/15 -add china_ip_route 180.222.224.0/19 -add china_ip_route 180.223.0.0/16 -add china_ip_route 180.233.0.0/18 -add china_ip_route 180.233.64.0/19 -add china_ip_route 180.233.144.0/22 -add china_ip_route 180.235.64.0/19 -add china_ip_route 180.235.112.0/22 -add china_ip_route 182.16.144.0/22 -add china_ip_route 182.16.148.0/22 -add china_ip_route 182.16.192.0/19 -add china_ip_route 182.18.0.0/17 -add china_ip_route 182.23.184.0/21 -add china_ip_route 182.23.200.0/21 -add china_ip_route 182.32.0.0/12 -add china_ip_route 182.48.96.0/19 -add china_ip_route 182.49.0.0/16 -add china_ip_route 182.50.0.0/20 -add china_ip_route 182.50.112.0/20 -add china_ip_route 182.51.0.0/16 -add china_ip_route 182.54.0.0/17 -add china_ip_route 182.54.244.0/22 -add china_ip_route 182.61.0.0/16 -add china_ip_route 182.80.0.0/14 -add china_ip_route 182.84.0.0/14 -add china_ip_route 182.88.0.0/14 -add china_ip_route 182.92.0.0/16 -add china_ip_route 182.96.0.0/12 -add china_ip_route 182.112.0.0/12 -add china_ip_route 182.128.0.0/12 -add china_ip_route 182.144.0.0/13 -add china_ip_route 182.157.0.0/16 -add china_ip_route 182.160.64.0/19 -add china_ip_route 182.174.0.0/15 -add china_ip_route 182.200.0.0/13 -add china_ip_route 182.236.128.0/17 -add china_ip_route 182.237.24.0/22 -add china_ip_route 182.237.28.0/22 -add china_ip_route 182.238.0.0/16 -add china_ip_route 182.239.0.0/19 -add china_ip_route 182.240.0.0/13 -add china_ip_route 182.254.0.0/16 -add china_ip_route 182.255.32.0/22 -add china_ip_route 182.255.60.0/22 -add china_ip_route 183.0.0.0/10 -add china_ip_route 183.64.0.0/13 -add china_ip_route 183.78.160.0/22 -add china_ip_route 183.78.164.0/22 -add china_ip_route 183.78.180.0/22 -add china_ip_route 183.81.172.0/22 -add china_ip_route 183.81.180.0/22 -add china_ip_route 183.84.0.0/15 -add china_ip_route 183.91.128.0/22 -add china_ip_route 183.91.136.0/21 -add china_ip_route 183.91.144.0/20 -add china_ip_route 183.92.0.0/14 -add china_ip_route 183.128.0.0/11 -add china_ip_route 183.160.0.0/13 -add china_ip_route 183.168.0.0/15 -add china_ip_route 183.170.0.0/16 -add china_ip_route 183.172.0.0/14 -add china_ip_route 183.182.0.0/19 -add china_ip_route 183.184.0.0/13 -add china_ip_route 183.192.0.0/10 -add china_ip_route 185.203.36.0/22 -add china_ip_route 188.131.128.0/17 -add china_ip_route 192.51.188.0/24 -add china_ip_route 192.55.46.0/24 -add china_ip_route 192.55.68.0/22 -add china_ip_route 192.102.204.0/23 -add china_ip_route 192.124.154.0/24 -add china_ip_route 192.140.128.0/22 -add china_ip_route 192.140.132.0/22 -add china_ip_route 192.140.136.0/22 -add china_ip_route 192.140.156.0/22 -add china_ip_route 192.140.160.0/22 -add china_ip_route 192.140.164.0/22 -add china_ip_route 192.140.168.0/22 -add china_ip_route 192.140.172.0/22 -add china_ip_route 192.140.176.0/22 -add china_ip_route 192.140.180.0/22 -add china_ip_route 192.140.184.0/22 -add china_ip_route 192.140.188.0/22 -add china_ip_route 192.140.192.0/22 -add china_ip_route 192.140.196.0/22 -add china_ip_route 192.140.200.0/22 -add china_ip_route 192.140.204.0/22 -add china_ip_route 192.140.208.0/22 -add china_ip_route 192.140.212.0/22 -add china_ip_route 192.144.128.0/17 -add china_ip_route 192.197.113.0/24 -add china_ip_route 193.112.0.0/16 -add china_ip_route 198.175.100.0/22 -add china_ip_route 199.212.57.0/24 -add china_ip_route 202.0.100.0/23 -add china_ip_route 202.0.122.0/23 -add china_ip_route 202.0.176.0/22 -add china_ip_route 202.3.128.0/23 -add china_ip_route 202.3.134.0/24 -add china_ip_route 202.4.128.0/19 -add china_ip_route 202.4.252.0/22 -add china_ip_route 202.5.208.0/22 -add china_ip_route 202.5.212.0/22 -add china_ip_route 202.5.216.0/22 -add china_ip_route 202.6.6.0/23 -add china_ip_route 202.6.66.0/23 -add china_ip_route 202.6.72.0/23 -add china_ip_route 202.6.87.0/24 -add china_ip_route 202.6.88.0/23 -add china_ip_route 202.6.92.0/23 -add china_ip_route 202.6.103.0/24 -add china_ip_route 202.6.108.0/24 -add china_ip_route 202.6.110.0/23 -add china_ip_route 202.6.114.0/24 -add china_ip_route 202.6.176.0/20 -add china_ip_route 202.8.0.0/24 -add china_ip_route 202.8.2.0/23 -add china_ip_route 202.8.4.0/23 -add china_ip_route 202.8.12.0/24 -add china_ip_route 202.8.24.0/24 -add china_ip_route 202.8.77.0/24 -add china_ip_route 202.8.120.0/22 -add china_ip_route 202.8.128.0/19 -add china_ip_route 202.8.192.0/20 -add china_ip_route 202.9.32.0/24 -add china_ip_route 202.9.34.0/23 -add china_ip_route 202.9.48.0/23 -add china_ip_route 202.9.51.0/24 -add china_ip_route 202.9.52.0/23 -add china_ip_route 202.9.54.0/24 -add china_ip_route 202.9.57.0/24 -add china_ip_route 202.9.58.0/23 -add china_ip_route 202.10.64.0/20 -add china_ip_route 202.10.112.0/22 -add china_ip_route 202.10.116.0/22 -add china_ip_route 202.10.120.0/22 -add china_ip_route 202.10.124.0/22 -add china_ip_route 202.12.1.0/24 -add china_ip_route 202.12.2.0/24 -add china_ip_route 202.12.17.0/24 -add china_ip_route 202.12.18.0/24 -add china_ip_route 202.12.19.0/24 -add china_ip_route 202.12.72.0/24 -add china_ip_route 202.12.84.0/23 -add china_ip_route 202.12.96.0/24 -add china_ip_route 202.12.98.0/23 -add china_ip_route 202.12.106.0/24 -add china_ip_route 202.12.111.0/24 -add china_ip_route 202.12.116.0/24 -add china_ip_route 202.14.64.0/23 -add china_ip_route 202.14.69.0/24 -add china_ip_route 202.14.73.0/24 -add china_ip_route 202.14.74.0/23 -add china_ip_route 202.14.76.0/24 -add china_ip_route 202.14.78.0/23 -add china_ip_route 202.14.88.0/24 -add china_ip_route 202.14.97.0/24 -add china_ip_route 202.14.104.0/23 -add china_ip_route 202.14.108.0/23 -add china_ip_route 202.14.111.0/24 -add china_ip_route 202.14.114.0/23 -add china_ip_route 202.14.118.0/23 -add china_ip_route 202.14.124.0/23 -add china_ip_route 202.14.127.0/24 -add china_ip_route 202.14.129.0/24 -add china_ip_route 202.14.135.0/24 -add china_ip_route 202.14.136.0/24 -add china_ip_route 202.14.149.0/24 -add china_ip_route 202.14.151.0/24 -add china_ip_route 202.14.157.0/24 -add china_ip_route 202.14.158.0/23 -add china_ip_route 202.14.169.0/24 -add china_ip_route 202.14.170.0/23 -add china_ip_route 202.14.172.0/22 -add china_ip_route 202.14.176.0/24 -add china_ip_route 202.14.184.0/23 -add china_ip_route 202.14.208.0/23 -add china_ip_route 202.14.213.0/24 -add china_ip_route 202.14.219.0/24 -add china_ip_route 202.14.220.0/24 -add china_ip_route 202.14.222.0/23 -add china_ip_route 202.14.225.0/24 -add china_ip_route 202.14.226.0/23 -add china_ip_route 202.14.231.0/24 -add china_ip_route 202.14.235.0/24 -add china_ip_route 202.14.236.0/23 -add china_ip_route 202.14.238.0/24 -add china_ip_route 202.14.239.0/24 -add china_ip_route 202.14.246.0/24 -add china_ip_route 202.14.251.0/24 -add china_ip_route 202.20.66.0/24 -add china_ip_route 202.20.79.0/24 -add china_ip_route 202.20.87.0/24 -add china_ip_route 202.20.88.0/23 -add china_ip_route 202.20.90.0/24 -add china_ip_route 202.20.94.0/23 -add china_ip_route 202.20.114.0/24 -add china_ip_route 202.20.117.0/24 -add china_ip_route 202.20.120.0/24 -add china_ip_route 202.20.125.0/24 -add china_ip_route 202.20.126.0/24 -add china_ip_route 202.20.127.0/24 -add china_ip_route 202.21.48.0/22 -add china_ip_route 202.21.52.0/22 -add china_ip_route 202.21.56.0/22 -add china_ip_route 202.21.60.0/22 -add china_ip_route 202.21.131.0/24 -add china_ip_route 202.21.132.0/24 -add china_ip_route 202.21.141.0/24 -add china_ip_route 202.21.142.0/24 -add china_ip_route 202.21.147.0/24 -add china_ip_route 202.21.148.0/24 -add china_ip_route 202.21.150.0/23 -add china_ip_route 202.21.152.0/23 -add china_ip_route 202.21.154.0/24 -add china_ip_route 202.21.156.0/24 -add china_ip_route 202.22.248.0/22 -add china_ip_route 202.22.252.0/22 -add china_ip_route 202.27.12.0/24 -add china_ip_route 202.27.14.0/24 -add china_ip_route 202.27.136.0/23 -add china_ip_route 202.36.226.0/24 -add china_ip_route 202.38.0.0/23 -add china_ip_route 202.38.2.0/23 -add china_ip_route 202.38.8.0/21 -add china_ip_route 202.38.48.0/20 -add china_ip_route 202.38.64.0/19 -add china_ip_route 202.38.96.0/19 -add china_ip_route 202.38.128.0/23 -add china_ip_route 202.38.130.0/23 -add china_ip_route 202.38.132.0/23 -add china_ip_route 202.38.134.0/24 -add china_ip_route 202.38.135.0/24 -add china_ip_route 202.38.136.0/23 -add china_ip_route 202.38.138.0/24 -add china_ip_route 202.38.140.0/23 -add china_ip_route 202.38.142.0/23 -add china_ip_route 202.38.146.0/23 -add china_ip_route 202.38.149.0/24 -add china_ip_route 202.38.150.0/23 -add china_ip_route 202.38.152.0/23 -add china_ip_route 202.38.154.0/23 -add china_ip_route 202.38.156.0/24 -add china_ip_route 202.38.158.0/23 -add china_ip_route 202.38.160.0/23 -add china_ip_route 202.38.164.0/22 -add china_ip_route 202.38.168.0/23 -add china_ip_route 202.38.170.0/24 -add china_ip_route 202.38.171.0/24 -add china_ip_route 202.38.176.0/23 -add china_ip_route 202.38.184.0/21 -add china_ip_route 202.38.192.0/18 -add china_ip_route 202.40.4.0/23 -add china_ip_route 202.40.7.0/24 -add china_ip_route 202.40.15.0/24 -add china_ip_route 202.40.135.0/24 -add china_ip_route 202.40.136.0/24 -add china_ip_route 202.40.140.0/24 -add china_ip_route 202.40.143.0/24 -add china_ip_route 202.40.144.0/23 -add china_ip_route 202.40.150.0/24 -add china_ip_route 202.40.155.0/24 -add china_ip_route 202.40.156.0/24 -add china_ip_route 202.40.158.0/23 -add china_ip_route 202.40.162.0/24 -add china_ip_route 202.41.8.0/23 -add china_ip_route 202.41.11.0/24 -add china_ip_route 202.41.12.0/23 -add china_ip_route 202.41.128.0/24 -add china_ip_route 202.41.130.0/23 -add china_ip_route 202.41.152.0/21 -add china_ip_route 202.41.192.0/24 -add china_ip_route 202.41.196.0/22 -add china_ip_route 202.41.200.0/22 -add china_ip_route 202.41.240.0/20 -add china_ip_route 202.43.76.0/22 -add china_ip_route 202.43.144.0/20 -add china_ip_route 202.44.16.0/20 -add china_ip_route 202.44.48.0/22 -add china_ip_route 202.44.67.0/24 -add china_ip_route 202.44.74.0/24 -add china_ip_route 202.44.97.0/24 -add china_ip_route 202.44.129.0/24 -add china_ip_route 202.44.132.0/23 -add china_ip_route 202.44.146.0/23 -add china_ip_route 202.45.0.0/23 -add china_ip_route 202.45.2.0/24 -add china_ip_route 202.45.15.0/24 -add china_ip_route 202.45.16.0/20 -add china_ip_route 202.46.16.0/23 -add china_ip_route 202.46.18.0/24 -add china_ip_route 202.46.20.0/23 -add china_ip_route 202.46.32.0/19 -add china_ip_route 202.46.128.0/24 -add china_ip_route 202.46.224.0/20 -add china_ip_route 202.47.82.0/23 -add china_ip_route 202.47.96.0/22 -add china_ip_route 202.47.100.0/22 -add china_ip_route 202.47.104.0/22 -add china_ip_route 202.47.108.0/22 -add china_ip_route 202.47.126.0/24 -add china_ip_route 202.47.128.0/24 -add china_ip_route 202.47.130.0/23 -add china_ip_route 202.52.33.0/24 -add china_ip_route 202.52.34.0/24 -add china_ip_route 202.52.47.0/24 -add china_ip_route 202.52.143.0/24 -add china_ip_route 202.52.144.0/24 -add china_ip_route 202.53.140.0/24 -add china_ip_route 202.53.143.0/24 -add china_ip_route 202.57.192.0/22 -add china_ip_route 202.57.196.0/22 -add china_ip_route 202.57.200.0/22 -add china_ip_route 202.57.204.0/22 -add china_ip_route 202.57.212.0/22 -add china_ip_route 202.57.216.0/22 -add china_ip_route 202.57.240.0/20 -add china_ip_route 202.58.0.0/24 -add china_ip_route 202.58.101.0/24 -add china_ip_route 202.58.104.0/22 -add china_ip_route 202.58.112.0/22 -add china_ip_route 202.59.0.0/24 -add china_ip_route 202.59.1.0/24 -add china_ip_route 202.59.212.0/22 -add china_ip_route 202.59.236.0/24 -add china_ip_route 202.59.240.0/24 -add china_ip_route 202.60.48.0/21 -add china_ip_route 202.60.96.0/21 -add china_ip_route 202.60.112.0/20 -add china_ip_route 202.60.132.0/22 -add china_ip_route 202.60.136.0/21 -add china_ip_route 202.60.144.0/20 -add china_ip_route 202.61.68.0/22 -add china_ip_route 202.61.76.0/22 -add china_ip_route 202.61.88.0/22 -add china_ip_route 202.61.123.0/24 -add china_ip_route 202.61.127.0/24 -add china_ip_route 202.62.112.0/22 -add china_ip_route 202.62.248.0/22 -add china_ip_route 202.62.252.0/24 -add china_ip_route 202.62.255.0/24 -add china_ip_route 202.63.80.0/24 -add china_ip_route 202.63.81.0/24 -add china_ip_route 202.63.82.0/23 -add china_ip_route 202.63.84.0/22 -add china_ip_route 202.63.88.0/21 -add china_ip_route 202.63.160.0/19 -add china_ip_route 202.63.248.0/22 -add china_ip_route 202.63.253.0/24 -add china_ip_route 202.65.0.0/21 -add china_ip_route 202.65.8.0/23 -add china_ip_route 202.65.96.0/22 -add china_ip_route 202.65.100.0/22 -add china_ip_route 202.65.104.0/22 -add china_ip_route 202.65.108.0/22 -add china_ip_route 202.66.168.0/22 -add china_ip_route 202.67.0.0/22 -add china_ip_route 202.69.4.0/22 -add china_ip_route 202.69.16.0/20 -add china_ip_route 202.70.0.0/19 -add china_ip_route 202.70.96.0/20 -add china_ip_route 202.70.192.0/20 -add china_ip_route 202.71.32.0/22 -add china_ip_route 202.71.36.0/22 -add china_ip_route 202.71.40.0/22 -add china_ip_route 202.71.44.0/22 -add china_ip_route 202.72.40.0/21 -add china_ip_route 202.72.80.0/20 -add china_ip_route 202.72.112.0/22 -add china_ip_route 202.72.116.0/22 -add china_ip_route 202.72.120.0/22 -add china_ip_route 202.72.124.0/22 -add china_ip_route 202.73.128.0/22 -add china_ip_route 202.73.240.0/22 -add china_ip_route 202.73.244.0/22 -add china_ip_route 202.73.248.0/22 -add china_ip_route 202.73.252.0/22 -add china_ip_route 202.74.8.0/21 -add china_ip_route 202.74.36.0/24 -add china_ip_route 202.74.42.0/24 -add china_ip_route 202.74.52.0/24 -add china_ip_route 202.74.80.0/20 -add china_ip_route 202.74.254.0/23 -add china_ip_route 202.75.208.0/20 -add china_ip_route 202.75.252.0/22 -add china_ip_route 202.76.252.0/22 -add china_ip_route 202.77.80.0/21 -add china_ip_route 202.77.92.0/22 -add china_ip_route 202.78.8.0/21 -add china_ip_route 202.79.224.0/21 -add china_ip_route 202.79.248.0/22 -add china_ip_route 202.80.192.0/21 -add china_ip_route 202.80.200.0/21 -add china_ip_route 202.81.0.0/22 -add china_ip_route 202.81.176.0/22 -add china_ip_route 202.81.180.0/22 -add china_ip_route 202.81.184.0/22 -add china_ip_route 202.81.188.0/22 -add china_ip_route 202.83.252.0/22 -add china_ip_route 202.84.0.0/22 -add china_ip_route 202.84.4.0/22 -add china_ip_route 202.84.8.0/21 -add china_ip_route 202.84.16.0/23 -add china_ip_route 202.84.22.0/24 -add china_ip_route 202.84.24.0/21 -add china_ip_route 202.85.208.0/20 -add china_ip_route 202.86.249.0/24 -add china_ip_route 202.86.252.0/22 -add china_ip_route 202.87.80.0/20 -add china_ip_route 202.88.32.0/22 -add china_ip_route 202.89.8.0/21 -add china_ip_route 202.89.96.0/22 -add china_ip_route 202.89.108.0/22 -add china_ip_route 202.89.119.0/24 -add china_ip_route 202.89.232.0/21 -add china_ip_route 202.90.0.0/22 -add china_ip_route 202.90.16.0/22 -add china_ip_route 202.90.20.0/22 -add china_ip_route 202.90.24.0/22 -add china_ip_route 202.90.28.0/22 -add china_ip_route 202.90.37.0/24 -add china_ip_route 202.90.96.0/22 -add china_ip_route 202.90.100.0/22 -add china_ip_route 202.90.104.0/22 -add china_ip_route 202.90.108.0/22 -add china_ip_route 202.90.112.0/20 -add china_ip_route 202.90.193.0/24 -add china_ip_route 202.90.196.0/24 -add china_ip_route 202.90.205.0/24 -add china_ip_route 202.90.224.0/20 -add china_ip_route 202.91.0.0/22 -add china_ip_route 202.91.36.0/22 -add china_ip_route 202.91.96.0/20 -add china_ip_route 202.91.128.0/22 -add china_ip_route 202.91.176.0/20 -add china_ip_route 202.91.224.0/19 -add china_ip_route 202.92.0.0/22 -add china_ip_route 202.92.8.0/21 -add china_ip_route 202.92.48.0/20 -add china_ip_route 202.92.252.0/22 -add china_ip_route 202.93.0.0/22 -add china_ip_route 202.93.252.0/22 -add china_ip_route 202.94.68.0/24 -add china_ip_route 202.94.74.0/24 -add china_ip_route 202.94.81.0/24 -add china_ip_route 202.94.92.0/22 -add china_ip_route 202.95.240.0/21 -add china_ip_route 202.95.252.0/22 -add china_ip_route 202.96.0.0/18 -add china_ip_route 202.96.64.0/21 -add china_ip_route 202.96.72.0/21 -add china_ip_route 202.96.80.0/20 -add china_ip_route 202.96.96.0/21 -add china_ip_route 202.96.104.0/21 -add china_ip_route 202.96.112.0/20 -add china_ip_route 202.96.128.0/21 -add china_ip_route 202.96.136.0/21 -add china_ip_route 202.96.144.0/20 -add china_ip_route 202.96.160.0/21 -add china_ip_route 202.96.168.0/21 -add china_ip_route 202.96.176.0/20 -add china_ip_route 202.96.192.0/21 -add china_ip_route 202.96.200.0/21 -add china_ip_route 202.96.208.0/20 -add china_ip_route 202.96.224.0/21 -add china_ip_route 202.96.232.0/21 -add china_ip_route 202.96.240.0/20 -add china_ip_route 202.97.0.0/21 -add china_ip_route 202.97.8.0/21 -add china_ip_route 202.97.16.0/20 -add china_ip_route 202.97.32.0/19 -add china_ip_route 202.97.64.0/19 -add china_ip_route 202.97.96.0/20 -add china_ip_route 202.97.112.0/20 -add china_ip_route 202.97.128.0/18 -add china_ip_route 202.97.192.0/19 -add china_ip_route 202.97.224.0/21 -add china_ip_route 202.97.232.0/21 -add china_ip_route 202.97.240.0/20 -add china_ip_route 202.98.0.0/21 -add china_ip_route 202.98.8.0/21 -add china_ip_route 202.98.16.0/20 -add china_ip_route 202.98.32.0/21 -add china_ip_route 202.98.40.0/21 -add china_ip_route 202.98.48.0/20 -add china_ip_route 202.98.64.0/19 -add china_ip_route 202.98.96.0/21 -add china_ip_route 202.98.104.0/21 -add china_ip_route 202.98.112.0/20 -add china_ip_route 202.98.128.0/19 -add china_ip_route 202.98.160.0/21 -add china_ip_route 202.98.168.0/21 -add china_ip_route 202.98.176.0/20 -add china_ip_route 202.98.192.0/21 -add china_ip_route 202.98.200.0/21 -add china_ip_route 202.98.208.0/20 -add china_ip_route 202.98.224.0/21 -add china_ip_route 202.98.232.0/21 -add china_ip_route 202.98.240.0/20 -add china_ip_route 202.99.0.0/18 -add china_ip_route 202.99.64.0/19 -add china_ip_route 202.99.96.0/21 -add china_ip_route 202.99.104.0/21 -add china_ip_route 202.99.112.0/20 -add china_ip_route 202.99.128.0/19 -add china_ip_route 202.99.160.0/21 -add china_ip_route 202.99.168.0/21 -add china_ip_route 202.99.176.0/20 -add china_ip_route 202.99.192.0/21 -add china_ip_route 202.99.200.0/21 -add china_ip_route 202.99.208.0/20 -add china_ip_route 202.99.224.0/21 -add china_ip_route 202.99.232.0/21 -add china_ip_route 202.99.240.0/20 -add china_ip_route 202.100.0.0/21 -add china_ip_route 202.100.8.0/21 -add china_ip_route 202.100.16.0/20 -add china_ip_route 202.100.32.0/19 -add china_ip_route 202.100.64.0/21 -add china_ip_route 202.100.72.0/21 -add china_ip_route 202.100.80.0/20 -add china_ip_route 202.100.96.0/21 -add china_ip_route 202.100.104.0/21 -add china_ip_route 202.100.112.0/20 -add china_ip_route 202.100.128.0/21 -add china_ip_route 202.100.136.0/21 -add china_ip_route 202.100.144.0/20 -add china_ip_route 202.100.160.0/21 -add china_ip_route 202.100.168.0/21 -add china_ip_route 202.100.176.0/20 -add china_ip_route 202.100.192.0/21 -add china_ip_route 202.100.200.0/21 -add china_ip_route 202.100.208.0/20 -add china_ip_route 202.100.224.0/19 -add china_ip_route 202.101.0.0/18 -add china_ip_route 202.101.64.0/19 -add china_ip_route 202.101.96.0/19 -add china_ip_route 202.101.128.0/18 -add china_ip_route 202.101.192.0/19 -add china_ip_route 202.101.224.0/21 -add china_ip_route 202.101.232.0/21 -add china_ip_route 202.101.240.0/20 -add china_ip_route 202.102.0.0/19 -add china_ip_route 202.102.32.0/19 -add china_ip_route 202.102.64.0/18 -add china_ip_route 202.102.128.0/21 -add china_ip_route 202.102.136.0/21 -add china_ip_route 202.102.144.0/20 -add china_ip_route 202.102.160.0/19 -add china_ip_route 202.102.192.0/21 -add china_ip_route 202.102.200.0/21 -add china_ip_route 202.102.208.0/20 -add china_ip_route 202.102.224.0/21 -add china_ip_route 202.102.232.0/21 -add china_ip_route 202.102.240.0/20 -add china_ip_route 202.103.0.0/21 -add china_ip_route 202.103.8.0/21 -add china_ip_route 202.103.16.0/20 -add china_ip_route 202.103.32.0/19 -add china_ip_route 202.103.64.0/19 -add china_ip_route 202.103.96.0/21 -add china_ip_route 202.103.104.0/21 -add china_ip_route 202.103.112.0/20 -add china_ip_route 202.103.128.0/18 -add china_ip_route 202.103.192.0/19 -add china_ip_route 202.103.224.0/21 -add china_ip_route 202.103.232.0/21 -add china_ip_route 202.103.240.0/20 -add china_ip_route 202.104.0.0/15 -add china_ip_route 202.106.0.0/16 -add china_ip_route 202.107.0.0/17 -add china_ip_route 202.107.128.0/17 -add china_ip_route 202.108.0.0/16 -add china_ip_route 202.109.0.0/16 -add china_ip_route 202.110.0.0/18 -add china_ip_route 202.110.64.0/18 -add china_ip_route 202.110.128.0/18 -add china_ip_route 202.110.192.0/18 -add china_ip_route 202.111.0.0/17 -add china_ip_route 202.111.128.0/19 -add china_ip_route 202.111.160.0/19 -add china_ip_route 202.111.192.0/18 -add china_ip_route 202.112.0.0/16 -add china_ip_route 202.113.0.0/20 -add china_ip_route 202.113.16.0/20 -add china_ip_route 202.113.32.0/19 -add china_ip_route 202.113.64.0/18 -add china_ip_route 202.113.128.0/18 -add china_ip_route 202.113.192.0/19 -add china_ip_route 202.113.224.0/20 -add china_ip_route 202.113.240.0/20 -add china_ip_route 202.114.0.0/19 -add china_ip_route 202.114.32.0/19 -add china_ip_route 202.114.64.0/18 -add china_ip_route 202.114.128.0/17 -add china_ip_route 202.115.0.0/19 -add china_ip_route 202.115.32.0/19 -add china_ip_route 202.115.64.0/18 -add china_ip_route 202.115.128.0/17 -add china_ip_route 202.116.0.0/19 -add china_ip_route 202.116.32.0/20 -add china_ip_route 202.116.48.0/20 -add china_ip_route 202.116.64.0/19 -add china_ip_route 202.116.96.0/19 -add china_ip_route 202.116.128.0/17 -add china_ip_route 202.117.0.0/18 -add china_ip_route 202.117.64.0/18 -add china_ip_route 202.117.128.0/17 -add china_ip_route 202.118.0.0/19 -add china_ip_route 202.118.32.0/19 -add china_ip_route 202.118.64.0/18 -add china_ip_route 202.118.128.0/17 -add china_ip_route 202.119.0.0/19 -add china_ip_route 202.119.32.0/19 -add china_ip_route 202.119.64.0/20 -add china_ip_route 202.119.80.0/20 -add china_ip_route 202.119.96.0/19 -add china_ip_route 202.119.128.0/17 -add china_ip_route 202.120.0.0/18 -add china_ip_route 202.120.64.0/18 -add china_ip_route 202.120.128.0/17 -add china_ip_route 202.121.0.0/16 -add china_ip_route 202.122.0.0/21 -add china_ip_route 202.122.32.0/21 -add china_ip_route 202.122.64.0/19 -add china_ip_route 202.122.112.0/21 -add china_ip_route 202.122.120.0/21 -add china_ip_route 202.122.128.0/24 -add china_ip_route 202.122.132.0/24 -add china_ip_route 202.123.96.0/20 -add china_ip_route 202.123.116.0/22 -add china_ip_route 202.123.120.0/22 -add china_ip_route 202.124.16.0/21 -add china_ip_route 202.124.24.0/22 -add china_ip_route 202.125.107.0/24 -add china_ip_route 202.125.109.0/24 -add china_ip_route 202.125.112.0/20 -add china_ip_route 202.125.176.0/20 -add china_ip_route 202.127.0.0/23 -add china_ip_route 202.127.2.0/24 -add china_ip_route 202.127.3.0/24 -add china_ip_route 202.127.4.0/24 -add china_ip_route 202.127.5.0/24 -add china_ip_route 202.127.6.0/23 -add china_ip_route 202.127.12.0/22 -add china_ip_route 202.127.16.0/20 -add china_ip_route 202.127.40.0/21 -add china_ip_route 202.127.48.0/20 -add china_ip_route 202.127.112.0/20 -add china_ip_route 202.127.128.0/20 -add china_ip_route 202.127.144.0/20 -add china_ip_route 202.127.160.0/21 -add china_ip_route 202.127.192.0/23 -add china_ip_route 202.127.194.0/23 -add china_ip_route 202.127.196.0/22 -add china_ip_route 202.127.200.0/21 -add china_ip_route 202.127.208.0/24 -add china_ip_route 202.127.209.0/24 -add china_ip_route 202.127.212.0/22 -add china_ip_route 202.127.216.0/21 -add china_ip_route 202.127.224.0/19 -add china_ip_route 202.129.208.0/24 -add china_ip_route 202.130.0.0/19 -add china_ip_route 202.130.39.0/24 -add china_ip_route 202.130.224.0/19 -add china_ip_route 202.131.16.0/21 -add china_ip_route 202.131.48.0/20 -add china_ip_route 202.131.208.0/20 -add china_ip_route 202.133.32.0/20 -add china_ip_route 202.134.58.0/24 -add china_ip_route 202.134.128.0/20 -add china_ip_route 202.134.208.0/22 -add china_ip_route 202.134.212.0/22 -add china_ip_route 202.134.216.0/22 -add china_ip_route 202.134.220.0/22 -add china_ip_route 202.136.48.0/20 -add china_ip_route 202.136.208.0/20 -add china_ip_route 202.136.224.0/20 -add china_ip_route 202.136.248.0/22 -add china_ip_route 202.137.231.0/24 -add china_ip_route 202.140.140.0/22 -add china_ip_route 202.140.144.0/22 -add china_ip_route 202.140.148.0/22 -add china_ip_route 202.140.152.0/22 -add china_ip_route 202.140.156.0/22 -add china_ip_route 202.141.160.0/19 -add china_ip_route 202.142.16.0/20 -add china_ip_route 202.143.4.0/22 -add china_ip_route 202.143.16.0/20 -add china_ip_route 202.143.32.0/20 -add china_ip_route 202.143.56.0/21 -add china_ip_route 202.143.100.0/22 -add china_ip_route 202.143.104.0/22 -add china_ip_route 202.144.196.0/22 -add china_ip_route 202.146.160.0/20 -add china_ip_route 202.146.186.0/24 -add china_ip_route 202.146.188.0/22 -add china_ip_route 202.146.196.0/22 -add china_ip_route 202.146.200.0/21 -add china_ip_route 202.147.144.0/20 -add china_ip_route 202.148.32.0/20 -add china_ip_route 202.148.64.0/19 -add china_ip_route 202.148.96.0/19 -add china_ip_route 202.149.32.0/19 -add china_ip_route 202.149.160.0/19 -add china_ip_route 202.149.224.0/19 -add china_ip_route 202.150.16.0/20 -add china_ip_route 202.150.32.0/20 -add china_ip_route 202.150.56.0/22 -add china_ip_route 202.150.192.0/20 -add china_ip_route 202.150.224.0/19 -add china_ip_route 202.151.0.0/22 -add china_ip_route 202.151.33.0/24 -add china_ip_route 202.151.128.0/19 -add china_ip_route 202.152.176.0/20 -add china_ip_route 202.153.0.0/22 -add china_ip_route 202.153.7.0/24 -add china_ip_route 202.153.48.0/20 -add china_ip_route 202.157.192.0/19 -add china_ip_route 202.158.160.0/19 -add china_ip_route 202.158.242.0/24 -add china_ip_route 202.160.140.0/22 -add china_ip_route 202.160.156.0/22 -add china_ip_route 202.160.176.0/20 -add china_ip_route 202.162.67.0/24 -add china_ip_route 202.162.75.0/24 -add china_ip_route 202.164.0.0/20 -add china_ip_route 202.164.96.0/19 -add china_ip_route 202.165.176.0/20 -add china_ip_route 202.165.208.0/20 -add china_ip_route 202.165.239.0/24 -add china_ip_route 202.165.240.0/23 -add china_ip_route 202.165.243.0/24 -add china_ip_route 202.165.245.0/24 -add china_ip_route 202.165.251.0/24 -add china_ip_route 202.165.252.0/22 -add china_ip_route 202.166.224.0/19 -add china_ip_route 202.168.80.0/22 -add china_ip_route 202.168.128.0/22 -add china_ip_route 202.168.132.0/22 -add china_ip_route 202.168.136.0/22 -add china_ip_route 202.168.140.0/22 -add china_ip_route 202.168.160.0/20 -add china_ip_route 202.168.176.0/20 -add china_ip_route 202.170.128.0/19 -add china_ip_route 202.170.216.0/21 -add china_ip_route 202.170.224.0/19 -add china_ip_route 202.171.216.0/21 -add china_ip_route 202.171.232.0/24 -add china_ip_route 202.171.235.0/24 -add china_ip_route 202.172.0.0/22 -add china_ip_route 202.172.7.0/24 -add china_ip_route 202.173.0.0/22 -add china_ip_route 202.173.6.0/24 -add china_ip_route 202.173.8.0/21 -add china_ip_route 202.173.112.0/22 -add china_ip_route 202.173.224.0/19 -add china_ip_route 202.174.64.0/20 -add china_ip_route 202.174.124.0/22 -add china_ip_route 202.176.224.0/19 -add china_ip_route 202.179.160.0/22 -add china_ip_route 202.179.164.0/22 -add china_ip_route 202.179.168.0/22 -add china_ip_route 202.179.172.0/22 -add china_ip_route 202.179.240.0/20 -add china_ip_route 202.180.128.0/19 -add china_ip_route 202.180.208.0/21 -add china_ip_route 202.181.8.0/22 -add china_ip_route 202.181.28.0/22 -add china_ip_route 202.181.112.0/20 -add china_ip_route 202.182.32.0/20 -add china_ip_route 202.182.192.0/19 -add china_ip_route 202.189.0.0/18 -add china_ip_route 202.189.80.0/20 -add china_ip_route 202.189.184.0/21 -add china_ip_route 202.191.0.0/24 -add china_ip_route 202.191.68.0/22 -add china_ip_route 202.191.72.0/21 -add china_ip_route 202.191.80.0/20 -add china_ip_route 202.192.0.0/13 -add china_ip_route 202.200.0.0/14 -add china_ip_route 202.204.0.0/14 -add china_ip_route 203.0.4.0/22 -add china_ip_route 203.0.10.0/23 -add china_ip_route 203.0.18.0/24 -add china_ip_route 203.0.24.0/24 -add china_ip_route 203.0.42.0/23 -add china_ip_route 203.0.45.0/24 -add china_ip_route 203.0.46.0/23 -add china_ip_route 203.0.81.0/24 -add china_ip_route 203.0.82.0/23 -add china_ip_route 203.0.90.0/23 -add china_ip_route 203.0.96.0/23 -add china_ip_route 203.0.104.0/21 -add china_ip_route 203.0.114.0/23 -add china_ip_route 203.0.122.0/24 -add china_ip_route 203.0.128.0/24 -add china_ip_route 203.0.130.0/23 -add china_ip_route 203.0.132.0/22 -add china_ip_route 203.0.137.0/24 -add china_ip_route 203.0.142.0/24 -add china_ip_route 203.0.144.0/24 -add china_ip_route 203.0.146.0/24 -add china_ip_route 203.0.148.0/24 -add china_ip_route 203.0.150.0/23 -add china_ip_route 203.0.152.0/24 -add china_ip_route 203.0.177.0/24 -add china_ip_route 203.0.224.0/24 -add china_ip_route 203.1.4.0/22 -add china_ip_route 203.1.18.0/24 -add china_ip_route 203.1.26.0/23 -add china_ip_route 203.1.65.0/24 -add china_ip_route 203.1.66.0/23 -add china_ip_route 203.1.70.0/23 -add china_ip_route 203.1.76.0/23 -add china_ip_route 203.1.90.0/24 -add china_ip_route 203.1.97.0/24 -add china_ip_route 203.1.98.0/23 -add china_ip_route 203.1.100.0/22 -add china_ip_route 203.1.108.0/24 -add china_ip_route 203.1.253.0/24 -add china_ip_route 203.1.254.0/24 -add china_ip_route 203.2.64.0/21 -add china_ip_route 203.2.73.0/24 -add china_ip_route 203.2.112.0/21 -add china_ip_route 203.2.126.0/23 -add china_ip_route 203.2.140.0/24 -add china_ip_route 203.2.150.0/24 -add china_ip_route 203.2.152.0/22 -add china_ip_route 203.2.156.0/23 -add china_ip_route 203.2.160.0/21 -add china_ip_route 203.2.180.0/23 -add china_ip_route 203.2.196.0/23 -add china_ip_route 203.2.209.0/24 -add china_ip_route 203.2.214.0/23 -add china_ip_route 203.2.226.0/23 -add china_ip_route 203.2.229.0/24 -add china_ip_route 203.2.236.0/23 -add china_ip_route 203.3.68.0/24 -add china_ip_route 203.3.72.0/23 -add china_ip_route 203.3.75.0/24 -add china_ip_route 203.3.80.0/21 -add china_ip_route 203.3.96.0/22 -add china_ip_route 203.3.105.0/24 -add china_ip_route 203.3.112.0/21 -add china_ip_route 203.3.120.0/24 -add china_ip_route 203.3.123.0/24 -add china_ip_route 203.3.135.0/24 -add china_ip_route 203.3.139.0/24 -add china_ip_route 203.3.143.0/24 -add china_ip_route 203.4.132.0/23 -add china_ip_route 203.4.134.0/24 -add china_ip_route 203.4.151.0/24 -add china_ip_route 203.4.152.0/22 -add china_ip_route 203.4.174.0/23 -add china_ip_route 203.4.180.0/24 -add china_ip_route 203.4.186.0/24 -add china_ip_route 203.4.205.0/24 -add china_ip_route 203.4.208.0/22 -add china_ip_route 203.4.227.0/24 -add china_ip_route 203.4.230.0/23 -add china_ip_route 203.5.4.0/23 -add china_ip_route 203.5.7.0/24 -add china_ip_route 203.5.8.0/23 -add china_ip_route 203.5.11.0/24 -add china_ip_route 203.5.21.0/24 -add china_ip_route 203.5.22.0/24 -add china_ip_route 203.5.44.0/24 -add china_ip_route 203.5.46.0/23 -add china_ip_route 203.5.52.0/22 -add china_ip_route 203.5.56.0/23 -add china_ip_route 203.5.60.0/23 -add china_ip_route 203.5.114.0/23 -add china_ip_route 203.5.118.0/24 -add china_ip_route 203.5.120.0/24 -add china_ip_route 203.5.172.0/24 -add china_ip_route 203.5.180.0/23 -add china_ip_route 203.5.182.0/24 -add china_ip_route 203.5.185.0/24 -add china_ip_route 203.5.186.0/24 -add china_ip_route 203.5.188.0/23 -add china_ip_route 203.5.190.0/24 -add china_ip_route 203.5.195.0/24 -add china_ip_route 203.5.214.0/23 -add china_ip_route 203.5.218.0/23 -add china_ip_route 203.6.131.0/24 -add china_ip_route 203.6.136.0/24 -add china_ip_route 203.6.138.0/23 -add china_ip_route 203.6.142.0/24 -add china_ip_route 203.6.150.0/23 -add china_ip_route 203.6.157.0/24 -add china_ip_route 203.6.159.0/24 -add china_ip_route 203.6.224.0/20 -add china_ip_route 203.6.248.0/23 -add china_ip_route 203.7.129.0/24 -add china_ip_route 203.7.138.0/23 -add china_ip_route 203.7.147.0/24 -add china_ip_route 203.7.150.0/23 -add china_ip_route 203.7.158.0/24 -add china_ip_route 203.7.192.0/23 -add china_ip_route 203.7.200.0/24 -add china_ip_route 203.8.0.0/24 -add china_ip_route 203.8.8.0/24 -add china_ip_route 203.8.23.0/24 -add china_ip_route 203.8.70.0/24 -add china_ip_route 203.8.82.0/24 -add china_ip_route 203.8.86.0/23 -add china_ip_route 203.8.91.0/24 -add china_ip_route 203.8.110.0/23 -add china_ip_route 203.8.115.0/24 -add china_ip_route 203.8.166.0/23 -add china_ip_route 203.8.169.0/24 -add china_ip_route 203.8.173.0/24 -add china_ip_route 203.8.184.0/24 -add china_ip_route 203.8.186.0/23 -add china_ip_route 203.8.190.0/23 -add china_ip_route 203.8.192.0/24 -add china_ip_route 203.8.197.0/24 -add china_ip_route 203.8.198.0/23 -add china_ip_route 203.8.203.0/24 -add china_ip_route 203.8.209.0/24 -add china_ip_route 203.8.210.0/23 -add china_ip_route 203.8.212.0/22 -add china_ip_route 203.8.217.0/24 -add china_ip_route 203.8.220.0/24 -add china_ip_route 203.9.32.0/24 -add china_ip_route 203.9.36.0/23 -add china_ip_route 203.9.57.0/24 -add china_ip_route 203.9.63.0/24 -add china_ip_route 203.9.65.0/24 -add china_ip_route 203.9.70.0/23 -add china_ip_route 203.9.72.0/24 -add china_ip_route 203.9.75.0/24 -add china_ip_route 203.9.76.0/23 -add china_ip_route 203.9.96.0/22 -add china_ip_route 203.9.100.0/23 -add china_ip_route 203.9.108.0/24 -add china_ip_route 203.9.158.0/24 -add china_ip_route 203.10.34.0/24 -add china_ip_route 203.10.56.0/24 -add china_ip_route 203.10.74.0/23 -add china_ip_route 203.10.84.0/22 -add china_ip_route 203.10.88.0/24 -add china_ip_route 203.10.95.0/24 -add china_ip_route 203.10.125.0/24 -add china_ip_route 203.11.70.0/24 -add china_ip_route 203.11.76.0/22 -add china_ip_route 203.11.82.0/24 -add china_ip_route 203.11.84.0/22 -add china_ip_route 203.11.100.0/22 -add china_ip_route 203.11.109.0/24 -add china_ip_route 203.11.117.0/24 -add china_ip_route 203.11.122.0/24 -add china_ip_route 203.11.126.0/24 -add china_ip_route 203.11.136.0/22 -add china_ip_route 203.11.141.0/24 -add china_ip_route 203.11.142.0/23 -add china_ip_route 203.11.180.0/22 -add china_ip_route 203.11.208.0/22 -add china_ip_route 203.12.16.0/24 -add china_ip_route 203.12.19.0/24 -add china_ip_route 203.12.24.0/24 -add china_ip_route 203.12.57.0/24 -add china_ip_route 203.12.65.0/24 -add china_ip_route 203.12.66.0/24 -add china_ip_route 203.12.70.0/23 -add china_ip_route 203.12.87.0/24 -add china_ip_route 203.12.100.0/23 -add china_ip_route 203.12.103.0/24 -add china_ip_route 203.12.114.0/24 -add china_ip_route 203.12.118.0/24 -add china_ip_route 203.12.130.0/24 -add china_ip_route 203.12.137.0/24 -add china_ip_route 203.12.196.0/22 -add china_ip_route 203.12.211.0/24 -add china_ip_route 203.12.219.0/24 -add china_ip_route 203.12.226.0/24 -add china_ip_route 203.12.240.0/22 -add china_ip_route 203.13.18.0/24 -add china_ip_route 203.13.24.0/24 -add china_ip_route 203.13.44.0/23 -add china_ip_route 203.13.88.0/23 -add china_ip_route 203.13.92.0/22 -add china_ip_route 203.13.173.0/24 -add china_ip_route 203.13.224.0/23 -add china_ip_route 203.13.227.0/24 -add china_ip_route 203.13.233.0/24 -add china_ip_route 203.14.24.0/22 -add china_ip_route 203.14.33.0/24 -add china_ip_route 203.14.56.0/24 -add china_ip_route 203.14.61.0/24 -add china_ip_route 203.14.62.0/24 -add china_ip_route 203.14.104.0/24 -add china_ip_route 203.14.114.0/23 -add china_ip_route 203.14.118.0/24 -add china_ip_route 203.14.162.0/24 -add china_ip_route 203.14.192.0/24 -add china_ip_route 203.14.194.0/23 -add china_ip_route 203.14.214.0/24 -add china_ip_route 203.14.231.0/24 -add china_ip_route 203.14.246.0/24 -add china_ip_route 203.15.0.0/20 -add china_ip_route 203.15.20.0/23 -add china_ip_route 203.15.22.0/24 -add china_ip_route 203.15.87.0/24 -add china_ip_route 203.15.88.0/23 -add china_ip_route 203.15.105.0/24 -add china_ip_route 203.15.112.0/21 -add china_ip_route 203.15.130.0/23 -add china_ip_route 203.15.149.0/24 -add china_ip_route 203.15.151.0/24 -add china_ip_route 203.15.156.0/22 -add china_ip_route 203.15.174.0/24 -add china_ip_route 203.15.227.0/24 -add china_ip_route 203.15.232.0/21 -add china_ip_route 203.15.240.0/23 -add china_ip_route 203.15.246.0/24 -add china_ip_route 203.16.10.0/24 -add china_ip_route 203.16.12.0/23 -add china_ip_route 203.16.16.0/21 -add china_ip_route 203.16.27.0/24 -add china_ip_route 203.16.38.0/24 -add china_ip_route 203.16.49.0/24 -add china_ip_route 203.16.50.0/23 -add china_ip_route 203.16.58.0/24 -add china_ip_route 203.16.63.0/24 -add china_ip_route 203.16.133.0/24 -add china_ip_route 203.16.161.0/24 -add china_ip_route 203.16.162.0/24 -add china_ip_route 203.16.186.0/23 -add china_ip_route 203.16.228.0/24 -add china_ip_route 203.16.238.0/24 -add china_ip_route 203.16.240.0/24 -add china_ip_route 203.16.245.0/24 -add china_ip_route 203.17.2.0/24 -add china_ip_route 203.17.18.0/24 -add china_ip_route 203.17.28.0/24 -add china_ip_route 203.17.39.0/24 -add china_ip_route 203.17.56.0/24 -add china_ip_route 203.17.74.0/23 -add china_ip_route 203.17.88.0/23 -add china_ip_route 203.17.136.0/24 -add china_ip_route 203.17.164.0/24 -add china_ip_route 203.17.187.0/24 -add china_ip_route 203.17.190.0/23 -add china_ip_route 203.17.231.0/24 -add china_ip_route 203.17.233.0/24 -add china_ip_route 203.17.248.0/24 -add china_ip_route 203.17.249.0/24 -add china_ip_route 203.17.255.0/24 -add china_ip_route 203.18.2.0/23 -add china_ip_route 203.18.4.0/24 -add china_ip_route 203.18.7.0/24 -add china_ip_route 203.18.31.0/24 -add china_ip_route 203.18.37.0/24 -add china_ip_route 203.18.48.0/23 -add china_ip_route 203.18.52.0/24 -add china_ip_route 203.18.72.0/22 -add china_ip_route 203.18.80.0/23 -add china_ip_route 203.18.87.0/24 -add china_ip_route 203.18.100.0/23 -add china_ip_route 203.18.105.0/24 -add china_ip_route 203.18.107.0/24 -add china_ip_route 203.18.110.0/24 -add china_ip_route 203.18.129.0/24 -add china_ip_route 203.18.131.0/24 -add china_ip_route 203.18.132.0/23 -add china_ip_route 203.18.144.0/24 -add china_ip_route 203.18.153.0/24 -add china_ip_route 203.18.199.0/24 -add china_ip_route 203.18.208.0/24 -add china_ip_route 203.18.211.0/24 -add china_ip_route 203.18.215.0/24 -add china_ip_route 203.19.1.0/24 -add china_ip_route 203.19.18.0/24 -add china_ip_route 203.19.24.0/24 -add china_ip_route 203.19.30.0/24 -add china_ip_route 203.19.32.0/21 -add china_ip_route 203.19.41.0/24 -add china_ip_route 203.19.44.0/23 -add china_ip_route 203.19.46.0/24 -add china_ip_route 203.19.58.0/24 -add china_ip_route 203.19.60.0/23 -add china_ip_route 203.19.64.0/24 -add china_ip_route 203.19.68.0/24 -add china_ip_route 203.19.72.0/24 -add china_ip_route 203.19.101.0/24 -add china_ip_route 203.19.111.0/24 -add china_ip_route 203.19.131.0/24 -add china_ip_route 203.19.133.0/24 -add china_ip_route 203.19.144.0/24 -add china_ip_route 203.19.147.0/24 -add china_ip_route 203.19.149.0/24 -add china_ip_route 203.19.156.0/24 -add china_ip_route 203.19.176.0/24 -add china_ip_route 203.19.178.0/23 -add china_ip_route 203.19.208.0/24 -add china_ip_route 203.19.228.0/22 -add china_ip_route 203.19.233.0/24 -add china_ip_route 203.19.242.0/24 -add china_ip_route 203.19.248.0/23 -add china_ip_route 203.19.255.0/24 -add china_ip_route 203.20.17.0/24 -add china_ip_route 203.20.40.0/23 -add china_ip_route 203.20.44.0/24 -add china_ip_route 203.20.48.0/24 -add china_ip_route 203.20.61.0/24 -add china_ip_route 203.20.65.0/24 -add china_ip_route 203.20.84.0/23 -add china_ip_route 203.20.89.0/24 -add china_ip_route 203.20.106.0/23 -add china_ip_route 203.20.115.0/24 -add china_ip_route 203.20.117.0/24 -add china_ip_route 203.20.118.0/23 -add china_ip_route 203.20.122.0/24 -add china_ip_route 203.20.126.0/23 -add china_ip_route 203.20.135.0/24 -add china_ip_route 203.20.136.0/21 -add china_ip_route 203.20.150.0/24 -add china_ip_route 203.20.230.0/24 -add china_ip_route 203.20.232.0/24 -add china_ip_route 203.20.236.0/24 -add china_ip_route 203.21.0.0/23 -add china_ip_route 203.21.2.0/24 -add china_ip_route 203.21.8.0/24 -add china_ip_route 203.21.10.0/24 -add china_ip_route 203.21.18.0/24 -add china_ip_route 203.21.33.0/24 -add china_ip_route 203.21.34.0/24 -add china_ip_route 203.21.41.0/24 -add china_ip_route 203.21.44.0/24 -add china_ip_route 203.21.68.0/24 -add china_ip_route 203.21.82.0/24 -add china_ip_route 203.21.96.0/22 -add china_ip_route 203.21.124.0/24 -add china_ip_route 203.21.136.0/23 -add china_ip_route 203.21.145.0/24 -add china_ip_route 203.21.206.0/24 -add china_ip_route 203.22.24.0/24 -add china_ip_route 203.22.28.0/23 -add china_ip_route 203.22.31.0/24 -add china_ip_route 203.22.68.0/24 -add china_ip_route 203.22.76.0/24 -add china_ip_route 203.22.78.0/24 -add china_ip_route 203.22.84.0/24 -add china_ip_route 203.22.87.0/24 -add china_ip_route 203.22.92.0/22 -add china_ip_route 203.22.99.0/24 -add china_ip_route 203.22.106.0/24 -add china_ip_route 203.22.122.0/23 -add china_ip_route 203.22.131.0/24 -add china_ip_route 203.22.163.0/24 -add china_ip_route 203.22.166.0/24 -add china_ip_route 203.22.170.0/24 -add china_ip_route 203.22.176.0/21 -add china_ip_route 203.22.194.0/24 -add china_ip_route 203.22.242.0/23 -add china_ip_route 203.22.245.0/24 -add china_ip_route 203.22.246.0/24 -add china_ip_route 203.22.252.0/23 -add china_ip_route 203.23.0.0/24 -add china_ip_route 203.23.47.0/24 -add china_ip_route 203.23.61.0/24 -add china_ip_route 203.23.62.0/23 -add china_ip_route 203.23.73.0/24 -add china_ip_route 203.23.85.0/24 -add china_ip_route 203.23.92.0/22 -add china_ip_route 203.23.98.0/24 -add china_ip_route 203.23.107.0/24 -add china_ip_route 203.23.112.0/24 -add china_ip_route 203.23.130.0/24 -add china_ip_route 203.23.140.0/23 -add china_ip_route 203.23.172.0/24 -add china_ip_route 203.23.182.0/24 -add china_ip_route 203.23.186.0/23 -add china_ip_route 203.23.192.0/24 -add china_ip_route 203.23.197.0/24 -add china_ip_route 203.23.198.0/24 -add china_ip_route 203.23.204.0/22 -add china_ip_route 203.23.224.0/24 -add china_ip_route 203.23.226.0/23 -add china_ip_route 203.23.228.0/22 -add china_ip_route 203.23.249.0/24 -add china_ip_route 203.23.251.0/24 -add china_ip_route 203.24.13.0/24 -add china_ip_route 203.24.18.0/24 -add china_ip_route 203.24.27.0/24 -add china_ip_route 203.24.43.0/24 -add china_ip_route 203.24.56.0/24 -add china_ip_route 203.24.58.0/24 -add china_ip_route 203.24.67.0/24 -add china_ip_route 203.24.74.0/24 -add china_ip_route 203.24.79.0/24 -add china_ip_route 203.24.80.0/23 -add china_ip_route 203.24.84.0/23 -add china_ip_route 203.24.86.0/24 -add china_ip_route 203.24.90.0/24 -add china_ip_route 203.24.111.0/24 -add china_ip_route 203.24.112.0/24 -add china_ip_route 203.24.116.0/24 -add china_ip_route 203.24.122.0/23 -add china_ip_route 203.24.145.0/24 -add china_ip_route 203.24.152.0/23 -add china_ip_route 203.24.157.0/24 -add china_ip_route 203.24.161.0/24 -add china_ip_route 203.24.167.0/24 -add china_ip_route 203.24.186.0/23 -add china_ip_route 203.24.199.0/24 -add china_ip_route 203.24.202.0/24 -add china_ip_route 203.24.212.0/23 -add china_ip_route 203.24.217.0/24 -add china_ip_route 203.24.219.0/24 -add china_ip_route 203.24.244.0/24 -add china_ip_route 203.25.19.0/24 -add china_ip_route 203.25.20.0/23 -add china_ip_route 203.25.46.0/24 -add china_ip_route 203.25.48.0/21 -add china_ip_route 203.25.64.0/23 -add china_ip_route 203.25.91.0/24 -add china_ip_route 203.25.99.0/24 -add china_ip_route 203.25.100.0/24 -add china_ip_route 203.25.106.0/24 -add china_ip_route 203.25.131.0/24 -add china_ip_route 203.25.135.0/24 -add china_ip_route 203.25.138.0/24 -add china_ip_route 203.25.147.0/24 -add china_ip_route 203.25.153.0/24 -add china_ip_route 203.25.154.0/23 -add china_ip_route 203.25.164.0/24 -add china_ip_route 203.25.166.0/24 -add china_ip_route 203.25.174.0/23 -add china_ip_route 203.25.180.0/24 -add china_ip_route 203.25.182.0/24 -add china_ip_route 203.25.191.0/24 -add china_ip_route 203.25.199.0/24 -add china_ip_route 203.25.200.0/24 -add china_ip_route 203.25.202.0/23 -add china_ip_route 203.25.208.0/20 -add china_ip_route 203.25.229.0/24 -add china_ip_route 203.25.235.0/24 -add china_ip_route 203.25.236.0/24 -add china_ip_route 203.25.242.0/24 -add china_ip_route 203.26.12.0/24 -add china_ip_route 203.26.34.0/24 -add china_ip_route 203.26.49.0/24 -add china_ip_route 203.26.50.0/24 -add china_ip_route 203.26.55.0/24 -add china_ip_route 203.26.56.0/23 -add china_ip_route 203.26.60.0/24 -add china_ip_route 203.26.65.0/24 -add china_ip_route 203.26.68.0/24 -add china_ip_route 203.26.76.0/24 -add china_ip_route 203.26.80.0/24 -add china_ip_route 203.26.84.0/24 -add china_ip_route 203.26.97.0/24 -add china_ip_route 203.26.102.0/23 -add china_ip_route 203.26.115.0/24 -add china_ip_route 203.26.116.0/24 -add china_ip_route 203.26.129.0/24 -add china_ip_route 203.26.143.0/24 -add china_ip_route 203.26.144.0/24 -add china_ip_route 203.26.148.0/23 -add china_ip_route 203.26.154.0/24 -add china_ip_route 203.26.158.0/23 -add china_ip_route 203.26.170.0/24 -add china_ip_route 203.26.173.0/24 -add china_ip_route 203.26.176.0/24 -add china_ip_route 203.26.185.0/24 -add china_ip_route 203.26.202.0/23 -add china_ip_route 203.26.210.0/24 -add china_ip_route 203.26.214.0/24 -add china_ip_route 203.26.222.0/24 -add china_ip_route 203.26.224.0/24 -add china_ip_route 203.26.228.0/24 -add china_ip_route 203.26.232.0/24 -add china_ip_route 203.27.0.0/24 -add china_ip_route 203.27.10.0/24 -add china_ip_route 203.27.15.0/24 -add china_ip_route 203.27.16.0/24 -add china_ip_route 203.27.20.0/24 -add china_ip_route 203.27.22.0/23 -add china_ip_route 203.27.40.0/24 -add china_ip_route 203.27.45.0/24 -add china_ip_route 203.27.53.0/24 -add china_ip_route 203.27.65.0/24 -add china_ip_route 203.27.66.0/24 -add china_ip_route 203.27.81.0/24 -add china_ip_route 203.27.88.0/24 -add china_ip_route 203.27.102.0/24 -add china_ip_route 203.27.109.0/24 -add china_ip_route 203.27.117.0/24 -add china_ip_route 203.27.121.0/24 -add china_ip_route 203.27.122.0/23 -add china_ip_route 203.27.125.0/24 -add china_ip_route 203.27.200.0/24 -add china_ip_route 203.27.202.0/24 -add china_ip_route 203.27.233.0/24 -add china_ip_route 203.27.241.0/24 -add china_ip_route 203.27.250.0/24 -add china_ip_route 203.28.10.0/24 -add china_ip_route 203.28.12.0/24 -add china_ip_route 203.28.33.0/24 -add china_ip_route 203.28.34.0/23 -add china_ip_route 203.28.43.0/24 -add china_ip_route 203.28.44.0/24 -add china_ip_route 203.28.54.0/24 -add china_ip_route 203.28.56.0/24 -add china_ip_route 203.28.73.0/24 -add china_ip_route 203.28.74.0/24 -add china_ip_route 203.28.76.0/24 -add china_ip_route 203.28.86.0/24 -add china_ip_route 203.28.88.0/24 -add china_ip_route 203.28.112.0/24 -add china_ip_route 203.28.131.0/24 -add china_ip_route 203.28.136.0/24 -add china_ip_route 203.28.140.0/24 -add china_ip_route 203.28.145.0/24 -add china_ip_route 203.28.165.0/24 -add china_ip_route 203.28.169.0/24 -add china_ip_route 203.28.170.0/24 -add china_ip_route 203.28.178.0/23 -add china_ip_route 203.28.185.0/24 -add china_ip_route 203.28.187.0/24 -add china_ip_route 203.28.196.0/24 -add china_ip_route 203.28.226.0/23 -add china_ip_route 203.28.239.0/24 -add china_ip_route 203.29.2.0/24 -add china_ip_route 203.29.8.0/23 -add china_ip_route 203.29.13.0/24 -add china_ip_route 203.29.14.0/24 -add china_ip_route 203.29.28.0/24 -add china_ip_route 203.29.46.0/24 -add china_ip_route 203.29.57.0/24 -add china_ip_route 203.29.61.0/24 -add china_ip_route 203.29.63.0/24 -add china_ip_route 203.29.69.0/24 -add china_ip_route 203.29.73.0/24 -add china_ip_route 203.29.81.0/24 -add china_ip_route 203.29.90.0/24 -add china_ip_route 203.29.95.0/24 -add china_ip_route 203.29.100.0/24 -add china_ip_route 203.29.103.0/24 -add china_ip_route 203.29.112.0/24 -add china_ip_route 203.29.120.0/22 -add china_ip_route 203.29.182.0/23 -add china_ip_route 203.29.187.0/24 -add china_ip_route 203.29.189.0/24 -add china_ip_route 203.29.190.0/24 -add china_ip_route 203.29.205.0/24 -add china_ip_route 203.29.210.0/24 -add china_ip_route 203.29.217.0/24 -add china_ip_route 203.29.227.0/24 -add china_ip_route 203.29.231.0/24 -add china_ip_route 203.29.233.0/24 -add china_ip_route 203.29.234.0/24 -add china_ip_route 203.29.248.0/24 -add china_ip_route 203.29.254.0/23 -add china_ip_route 203.30.16.0/23 -add china_ip_route 203.30.25.0/24 -add china_ip_route 203.30.27.0/24 -add china_ip_route 203.30.29.0/24 -add china_ip_route 203.30.66.0/24 -add china_ip_route 203.30.81.0/24 -add china_ip_route 203.30.87.0/24 -add china_ip_route 203.30.111.0/24 -add china_ip_route 203.30.121.0/24 -add china_ip_route 203.30.123.0/24 -add china_ip_route 203.30.152.0/24 -add china_ip_route 203.30.156.0/24 -add china_ip_route 203.30.162.0/24 -add china_ip_route 203.30.173.0/24 -add china_ip_route 203.30.175.0/24 -add china_ip_route 203.30.187.0/24 -add china_ip_route 203.30.194.0/24 -add china_ip_route 203.30.217.0/24 -add china_ip_route 203.30.220.0/24 -add china_ip_route 203.30.222.0/24 -add china_ip_route 203.30.232.0/23 -add china_ip_route 203.30.235.0/24 -add china_ip_route 203.30.240.0/23 -add china_ip_route 203.30.246.0/24 -add china_ip_route 203.30.250.0/23 -add china_ip_route 203.31.45.0/24 -add china_ip_route 203.31.46.0/24 -add china_ip_route 203.31.49.0/24 -add china_ip_route 203.31.51.0/24 -add china_ip_route 203.31.54.0/23 -add china_ip_route 203.31.69.0/24 -add china_ip_route 203.31.72.0/24 -add china_ip_route 203.31.80.0/24 -add china_ip_route 203.31.85.0/24 -add china_ip_route 203.31.97.0/24 -add china_ip_route 203.31.105.0/24 -add china_ip_route 203.31.106.0/24 -add china_ip_route 203.31.108.0/23 -add china_ip_route 203.31.124.0/24 -add china_ip_route 203.31.162.0/24 -add china_ip_route 203.31.174.0/24 -add china_ip_route 203.31.177.0/24 -add china_ip_route 203.31.181.0/24 -add china_ip_route 203.31.187.0/24 -add china_ip_route 203.31.189.0/24 -add china_ip_route 203.31.204.0/24 -add china_ip_route 203.31.220.0/24 -add china_ip_route 203.31.222.0/23 -add china_ip_route 203.31.225.0/24 -add china_ip_route 203.31.229.0/24 -add china_ip_route 203.31.248.0/23 -add china_ip_route 203.31.253.0/24 -add china_ip_route 203.32.20.0/24 -add china_ip_route 203.32.48.0/23 -add china_ip_route 203.32.56.0/24 -add china_ip_route 203.32.60.0/24 -add china_ip_route 203.32.62.0/24 -add china_ip_route 203.32.68.0/23 -add china_ip_route 203.32.76.0/24 -add china_ip_route 203.32.81.0/24 -add china_ip_route 203.32.84.0/23 -add china_ip_route 203.32.95.0/24 -add china_ip_route 203.32.102.0/24 -add china_ip_route 203.32.105.0/24 -add china_ip_route 203.32.130.0/24 -add china_ip_route 203.32.133.0/24 -add china_ip_route 203.32.140.0/24 -add china_ip_route 203.32.152.0/24 -add china_ip_route 203.32.186.0/23 -add china_ip_route 203.32.192.0/24 -add china_ip_route 203.32.196.0/24 -add china_ip_route 203.32.203.0/24 -add china_ip_route 203.32.204.0/23 -add china_ip_route 203.32.212.0/24 -add china_ip_route 203.33.4.0/24 -add china_ip_route 203.33.7.0/24 -add china_ip_route 203.33.8.0/21 -add china_ip_route 203.33.21.0/24 -add china_ip_route 203.33.26.0/24 -add china_ip_route 203.33.32.0/24 -add china_ip_route 203.33.63.0/24 -add china_ip_route 203.33.64.0/24 -add china_ip_route 203.33.67.0/24 -add china_ip_route 203.33.68.0/24 -add china_ip_route 203.33.73.0/24 -add china_ip_route 203.33.79.0/24 -add china_ip_route 203.33.100.0/24 -add china_ip_route 203.33.122.0/24 -add china_ip_route 203.33.129.0/24 -add china_ip_route 203.33.131.0/24 -add china_ip_route 203.33.145.0/24 -add china_ip_route 203.33.156.0/24 -add china_ip_route 203.33.158.0/23 -add china_ip_route 203.33.174.0/24 -add china_ip_route 203.33.185.0/24 -add china_ip_route 203.33.200.0/24 -add china_ip_route 203.33.202.0/23 -add china_ip_route 203.33.204.0/24 -add china_ip_route 203.33.206.0/23 -add china_ip_route 203.33.214.0/23 -add china_ip_route 203.33.224.0/23 -add china_ip_route 203.33.226.0/24 -add china_ip_route 203.33.233.0/24 -add china_ip_route 203.33.243.0/24 -add china_ip_route 203.33.250.0/24 -add china_ip_route 203.34.4.0/24 -add china_ip_route 203.34.21.0/24 -add china_ip_route 203.34.27.0/24 -add china_ip_route 203.34.39.0/24 -add china_ip_route 203.34.48.0/23 -add china_ip_route 203.34.54.0/24 -add china_ip_route 203.34.56.0/23 -add china_ip_route 203.34.67.0/24 -add china_ip_route 203.34.69.0/24 -add china_ip_route 203.34.76.0/24 -add china_ip_route 203.34.92.0/24 -add china_ip_route 203.34.106.0/24 -add china_ip_route 203.34.113.0/24 -add china_ip_route 203.34.147.0/24 -add china_ip_route 203.34.150.0/24 -add china_ip_route 203.34.152.0/23 -add china_ip_route 203.34.161.0/24 -add china_ip_route 203.34.162.0/24 -add china_ip_route 203.34.187.0/24 -add china_ip_route 203.34.192.0/21 -add china_ip_route 203.34.204.0/22 -add china_ip_route 203.34.232.0/24 -add china_ip_route 203.34.240.0/24 -add china_ip_route 203.34.242.0/24 -add china_ip_route 203.34.245.0/24 -add china_ip_route 203.34.251.0/24 -add china_ip_route 203.55.2.0/23 -add china_ip_route 203.55.4.0/24 -add china_ip_route 203.55.10.0/24 -add china_ip_route 203.55.13.0/24 -add china_ip_route 203.55.22.0/24 -add china_ip_route 203.55.30.0/24 -add china_ip_route 203.55.93.0/24 -add china_ip_route 203.55.101.0/24 -add china_ip_route 203.55.109.0/24 -add china_ip_route 203.55.110.0/24 -add china_ip_route 203.55.116.0/23 -add china_ip_route 203.55.119.0/24 -add china_ip_route 203.55.128.0/23 -add china_ip_route 203.55.146.0/23 -add china_ip_route 203.55.192.0/24 -add china_ip_route 203.55.196.0/24 -add china_ip_route 203.55.218.0/23 -add china_ip_route 203.55.221.0/24 -add china_ip_route 203.55.224.0/24 -add china_ip_route 203.56.1.0/24 -add china_ip_route 203.56.4.0/24 -add china_ip_route 203.56.12.0/24 -add china_ip_route 203.56.24.0/24 -add china_ip_route 203.56.38.0/24 -add china_ip_route 203.56.40.0/24 -add china_ip_route 203.56.46.0/24 -add china_ip_route 203.56.48.0/21 -add china_ip_route 203.56.68.0/23 -add china_ip_route 203.56.82.0/23 -add china_ip_route 203.56.84.0/23 -add china_ip_route 203.56.95.0/24 -add china_ip_route 203.56.110.0/24 -add china_ip_route 203.56.121.0/24 -add china_ip_route 203.56.161.0/24 -add china_ip_route 203.56.169.0/24 -add china_ip_route 203.56.172.0/23 -add china_ip_route 203.56.175.0/24 -add china_ip_route 203.56.183.0/24 -add china_ip_route 203.56.185.0/24 -add china_ip_route 203.56.187.0/24 -add china_ip_route 203.56.192.0/24 -add china_ip_route 203.56.198.0/24 -add china_ip_route 203.56.201.0/24 -add china_ip_route 203.56.208.0/23 -add china_ip_route 203.56.210.0/24 -add china_ip_route 203.56.214.0/24 -add china_ip_route 203.56.216.0/24 -add china_ip_route 203.56.227.0/24 -add china_ip_route 203.56.228.0/24 -add china_ip_route 203.56.231.0/24 -add china_ip_route 203.56.232.0/24 -add china_ip_route 203.56.240.0/24 -add china_ip_route 203.56.252.0/24 -add china_ip_route 203.56.254.0/24 -add china_ip_route 203.57.5.0/24 -add china_ip_route 203.57.6.0/24 -add china_ip_route 203.57.12.0/23 -add china_ip_route 203.57.28.0/24 -add china_ip_route 203.57.39.0/24 -add china_ip_route 203.57.46.0/24 -add china_ip_route 203.57.58.0/24 -add china_ip_route 203.57.61.0/24 -add china_ip_route 203.57.66.0/24 -add china_ip_route 203.57.69.0/24 -add china_ip_route 203.57.70.0/23 -add china_ip_route 203.57.73.0/24 -add china_ip_route 203.57.90.0/24 -add china_ip_route 203.57.101.0/24 -add china_ip_route 203.57.109.0/24 -add china_ip_route 203.57.123.0/24 -add china_ip_route 203.57.157.0/24 -add china_ip_route 203.57.200.0/24 -add china_ip_route 203.57.202.0/24 -add china_ip_route 203.57.206.0/24 -add china_ip_route 203.57.222.0/24 -add china_ip_route 203.57.224.0/20 -add china_ip_route 203.57.246.0/23 -add china_ip_route 203.57.249.0/24 -add china_ip_route 203.57.253.0/24 -add china_ip_route 203.57.254.0/23 -add china_ip_route 203.62.2.0/24 -add china_ip_route 203.62.131.0/24 -add china_ip_route 203.62.139.0/24 -add china_ip_route 203.62.161.0/24 -add china_ip_route 203.62.197.0/24 -add china_ip_route 203.62.228.0/22 -add china_ip_route 203.62.234.0/24 -add china_ip_route 203.62.246.0/24 -add china_ip_route 203.76.160.0/22 -add china_ip_route 203.76.168.0/22 -add china_ip_route 203.76.208.0/22 -add china_ip_route 203.76.212.0/22 -add china_ip_route 203.76.216.0/22 -add china_ip_route 203.76.240.0/22 -add china_ip_route 203.76.244.0/22 -add china_ip_route 203.77.180.0/22 -add china_ip_route 203.78.48.0/20 -add china_ip_route 203.78.156.0/22 -add china_ip_route 203.79.0.0/20 -add china_ip_route 203.79.32.0/20 -add china_ip_route 203.80.4.0/23 -add china_ip_route 203.80.32.0/20 -add china_ip_route 203.80.57.0/24 -add china_ip_route 203.80.129.0/24 -add china_ip_route 203.80.132.0/22 -add china_ip_route 203.80.136.0/21 -add china_ip_route 203.80.144.0/20 -add china_ip_route 203.81.0.0/21 -add china_ip_route 203.81.16.0/20 -add china_ip_route 203.81.244.0/22 -add china_ip_route 203.82.0.0/23 -add china_ip_route 203.82.16.0/21 -add china_ip_route 203.82.112.0/22 -add china_ip_route 203.82.116.0/22 -add china_ip_route 203.82.120.0/22 -add china_ip_route 203.82.124.0/22 -add china_ip_route 203.82.224.0/22 -add china_ip_route 203.82.228.0/22 -add china_ip_route 203.82.232.0/22 -add china_ip_route 203.82.236.0/22 -add china_ip_route 203.83.0.0/22 -add china_ip_route 203.83.8.0/22 -add china_ip_route 203.83.12.0/22 -add china_ip_route 203.83.56.0/21 -add china_ip_route 203.83.224.0/20 -add china_ip_route 203.86.0.0/19 -add china_ip_route 203.86.32.0/19 -add china_ip_route 203.86.64.0/20 -add china_ip_route 203.86.80.0/20 -add china_ip_route 203.86.96.0/19 -add china_ip_route 203.86.250.0/24 -add china_ip_route 203.86.254.0/23 -add china_ip_route 203.88.32.0/19 -add china_ip_route 203.88.192.0/19 -add china_ip_route 203.89.0.0/22 -add china_ip_route 203.89.8.0/21 -add china_ip_route 203.89.100.0/22 -add china_ip_route 203.89.133.0/24 -add china_ip_route 203.89.136.0/22 -add china_ip_route 203.89.144.0/24 -add china_ip_route 203.90.0.0/22 -add china_ip_route 203.90.8.0/22 -add china_ip_route 203.90.12.0/22 -add china_ip_route 203.90.128.0/19 -add china_ip_route 203.90.160.0/19 -add china_ip_route 203.90.192.0/19 -add china_ip_route 203.91.32.0/19 -add china_ip_route 203.91.96.0/20 -add china_ip_route 203.91.120.0/21 -add china_ip_route 203.92.0.0/22 -add china_ip_route 203.92.6.0/24 -add china_ip_route 203.92.160.0/19 -add china_ip_route 203.93.0.0/22 -add china_ip_route 203.93.4.0/22 -add china_ip_route 203.93.8.0/24 -add china_ip_route 203.93.9.0/24 -add china_ip_route 203.93.10.0/23 -add china_ip_route 203.93.12.0/22 -add china_ip_route 203.93.16.0/20 -add china_ip_route 203.93.32.0/19 -add china_ip_route 203.93.64.0/18 -add china_ip_route 203.93.128.0/21 -add china_ip_route 203.93.136.0/22 -add china_ip_route 203.93.140.0/24 -add china_ip_route 203.93.141.0/24 -add china_ip_route 203.93.142.0/23 -add china_ip_route 203.93.144.0/20 -add china_ip_route 203.93.160.0/19 -add china_ip_route 203.93.192.0/18 -add china_ip_route 203.94.0.0/22 -add china_ip_route 203.94.4.0/22 -add china_ip_route 203.94.8.0/21 -add china_ip_route 203.94.16.0/20 -add china_ip_route 203.95.0.0/21 -add china_ip_route 203.95.96.0/20 -add china_ip_route 203.95.112.0/20 -add china_ip_route 203.95.128.0/18 -add china_ip_route 203.95.200.0/22 -add china_ip_route 203.95.204.0/22 -add china_ip_route 203.95.208.0/22 -add china_ip_route 203.95.224.0/19 -add china_ip_route 203.99.8.0/21 -add china_ip_route 203.99.16.0/20 -add china_ip_route 203.99.80.0/20 -add china_ip_route 203.100.32.0/20 -add china_ip_route 203.100.48.0/21 -add china_ip_route 203.100.58.0/24 -add china_ip_route 203.100.60.0/24 -add china_ip_route 203.100.63.0/24 -add china_ip_route 203.100.80.0/20 -add china_ip_route 203.100.96.0/19 -add china_ip_route 203.100.192.0/20 -add china_ip_route 203.104.32.0/20 -add china_ip_route 203.105.96.0/19 -add china_ip_route 203.105.128.0/19 -add china_ip_route 203.107.0.0/17 -add china_ip_route 203.110.160.0/19 -add china_ip_route 203.110.208.0/20 -add china_ip_route 203.110.232.0/23 -add china_ip_route 203.110.234.0/24 -add china_ip_route 203.114.80.0/22 -add china_ip_route 203.114.84.0/22 -add china_ip_route 203.114.88.0/22 -add china_ip_route 203.114.92.0/22 -add china_ip_route 203.114.244.0/22 -add china_ip_route 203.118.192.0/19 -add china_ip_route 203.118.241.0/24 -add china_ip_route 203.118.248.0/22 -add china_ip_route 203.119.24.0/21 -add china_ip_route 203.119.32.0/22 -add china_ip_route 203.119.80.0/22 -add china_ip_route 203.119.85.0/24 -add china_ip_route 203.119.113.0/24 -add china_ip_route 203.119.114.0/23 -add china_ip_route 203.119.116.0/22 -add china_ip_route 203.119.120.0/21 -add china_ip_route 203.119.128.0/17 -add china_ip_route 203.123.58.0/24 -add china_ip_route 203.128.32.0/19 -add china_ip_route 203.128.96.0/19 -add china_ip_route 203.128.224.0/21 -add china_ip_route 203.129.8.0/21 -add china_ip_route 203.130.32.0/19 -add china_ip_route 203.132.32.0/19 -add china_ip_route 203.134.240.0/21 -add china_ip_route 203.135.96.0/20 -add china_ip_route 203.135.112.0/20 -add china_ip_route 203.135.160.0/20 -add china_ip_route 203.142.219.0/24 -add china_ip_route 203.142.224.0/19 -add china_ip_route 203.144.96.0/19 -add china_ip_route 203.145.0.0/19 -add china_ip_route 203.148.0.0/18 -add china_ip_route 203.148.64.0/20 -add china_ip_route 203.148.80.0/22 -add china_ip_route 203.148.86.0/23 -add china_ip_route 203.149.92.0/22 -add china_ip_route 203.152.64.0/19 -add china_ip_route 203.152.128.0/19 -add china_ip_route 203.153.0.0/22 -add china_ip_route 203.156.192.0/18 -add china_ip_route 203.158.16.0/21 -add china_ip_route 203.160.52.0/22 -add china_ip_route 203.160.104.0/21 -add china_ip_route 203.160.129.0/24 -add china_ip_route 203.160.192.0/19 -add china_ip_route 203.161.0.0/22 -add china_ip_route 203.161.180.0/24 -add china_ip_route 203.161.183.0/24 -add china_ip_route 203.161.192.0/19 -add china_ip_route 203.166.160.0/19 -add china_ip_route 203.167.28.0/22 -add china_ip_route 203.168.0.0/19 -add china_ip_route 203.170.58.0/23 -add china_ip_route 203.171.0.0/22 -add china_ip_route 203.171.208.0/24 -add china_ip_route 203.171.224.0/20 -add china_ip_route 203.174.4.0/24 -add china_ip_route 203.174.6.0/24 -add china_ip_route 203.174.7.0/24 -add china_ip_route 203.174.96.0/19 -add china_ip_route 203.175.128.0/19 -add china_ip_route 203.175.192.0/18 -add china_ip_route 203.176.0.0/18 -add china_ip_route 203.176.64.0/19 -add china_ip_route 203.176.168.0/21 -add china_ip_route 203.184.80.0/20 -add china_ip_route 203.185.189.0/24 -add china_ip_route 203.187.160.0/19 -add china_ip_route 203.189.0.0/23 -add china_ip_route 203.189.6.0/23 -add china_ip_route 203.189.112.0/22 -add china_ip_route 203.189.192.0/19 -add china_ip_route 203.189.232.0/22 -add china_ip_route 203.189.240.0/22 -add china_ip_route 203.190.96.0/20 -add china_ip_route 203.190.249.0/24 -add china_ip_route 203.191.0.0/23 -add china_ip_route 203.191.2.0/24 -add china_ip_route 203.191.5.0/24 -add china_ip_route 203.191.7.0/24 -add china_ip_route 203.191.16.0/20 -add china_ip_route 203.191.64.0/18 -add china_ip_route 203.191.133.0/24 -add china_ip_route 203.191.144.0/21 -add china_ip_route 203.191.152.0/21 -add china_ip_route 203.192.0.0/19 -add china_ip_route 203.193.224.0/19 -add china_ip_route 203.194.120.0/21 -add china_ip_route 203.195.64.0/19 -add china_ip_route 203.195.112.0/21 -add china_ip_route 203.195.128.0/17 -add china_ip_route 203.196.0.0/21 -add china_ip_route 203.196.8.0/21 -add china_ip_route 203.196.28.0/22 -add china_ip_route 203.201.181.0/24 -add china_ip_route 203.201.182.0/24 -add china_ip_route 203.202.236.0/22 -add china_ip_route 203.205.64.0/19 -add china_ip_route 203.205.128.0/17 -add china_ip_route 203.207.64.0/20 -add china_ip_route 203.207.80.0/21 -add china_ip_route 203.207.88.0/22 -add china_ip_route 203.207.92.0/22 -add china_ip_route 203.207.96.0/20 -add china_ip_route 203.207.112.0/20 -add china_ip_route 203.207.128.0/18 -add china_ip_route 203.207.192.0/21 -add china_ip_route 203.207.200.0/21 -add china_ip_route 203.207.208.0/20 -add china_ip_route 203.207.224.0/19 -add china_ip_route 203.208.0.0/20 -add china_ip_route 203.208.16.0/22 -add china_ip_route 203.208.32.0/19 -add china_ip_route 203.209.224.0/19 -add china_ip_route 203.212.0.0/20 -add china_ip_route 203.212.80.0/20 -add china_ip_route 203.215.232.0/21 -add china_ip_route 203.217.164.0/22 -add china_ip_route 203.223.0.0/20 -add china_ip_route 203.223.16.0/21 -add china_ip_route 204.52.191.0/24 -add china_ip_route 210.2.0.0/20 -add china_ip_route 210.2.16.0/20 -add china_ip_route 210.5.0.0/19 -add china_ip_route 210.5.56.0/21 -add china_ip_route 210.5.128.0/20 -add china_ip_route 210.5.144.0/20 -add china_ip_route 210.7.56.0/22 -add china_ip_route 210.7.60.0/22 -add china_ip_route 210.12.0.0/18 -add china_ip_route 210.12.64.0/18 -add china_ip_route 210.12.128.0/18 -add china_ip_route 210.12.192.0/18 -add china_ip_route 210.13.0.0/18 -add china_ip_route 210.13.64.0/18 -add china_ip_route 210.13.128.0/17 -add china_ip_route 210.14.64.0/19 -add china_ip_route 210.14.112.0/20 -add china_ip_route 210.14.128.0/19 -add china_ip_route 210.14.160.0/19 -add china_ip_route 210.14.192.0/19 -add china_ip_route 210.14.224.0/19 -add china_ip_route 210.15.0.0/19 -add china_ip_route 210.15.32.0/19 -add china_ip_route 210.15.64.0/19 -add china_ip_route 210.15.96.0/19 -add china_ip_route 210.15.128.0/18 -add china_ip_route 210.16.104.0/22 -add china_ip_route 210.16.128.0/18 -add china_ip_route 210.21.0.0/17 -add china_ip_route 210.21.128.0/17 -add china_ip_route 210.22.0.0/16 -add china_ip_route 210.23.32.0/19 -add china_ip_route 210.25.0.0/16 -add china_ip_route 210.26.0.0/15 -add china_ip_route 210.28.0.0/14 -add china_ip_route 210.32.0.0/14 -add china_ip_route 210.36.0.0/14 -add china_ip_route 210.40.0.0/13 -add china_ip_route 210.51.0.0/16 -add china_ip_route 210.52.0.0/18 -add china_ip_route 210.52.64.0/18 -add china_ip_route 210.52.128.0/17 -add china_ip_route 210.53.0.0/17 -add china_ip_route 210.53.128.0/17 -add china_ip_route 210.56.192.0/19 -add china_ip_route 210.72.0.0/17 -add china_ip_route 210.72.128.0/19 -add china_ip_route 210.72.160.0/19 -add china_ip_route 210.72.192.0/18 -add china_ip_route 210.73.0.0/19 -add china_ip_route 210.73.32.0/19 -add china_ip_route 210.73.64.0/18 -add china_ip_route 210.73.128.0/17 -add china_ip_route 210.74.0.0/19 -add china_ip_route 210.74.32.0/19 -add china_ip_route 210.74.64.0/19 -add china_ip_route 210.74.96.0/19 -add china_ip_route 210.74.128.0/19 -add china_ip_route 210.74.160.0/19 -add china_ip_route 210.74.192.0/18 -add china_ip_route 210.75.0.0/16 -add china_ip_route 210.76.0.0/19 -add china_ip_route 210.76.32.0/19 -add china_ip_route 210.76.64.0/18 -add china_ip_route 210.76.128.0/17 -add china_ip_route 210.77.0.0/16 -add china_ip_route 210.78.0.0/19 -add china_ip_route 210.78.32.0/19 -add china_ip_route 210.78.64.0/18 -add china_ip_route 210.78.128.0/19 -add china_ip_route 210.78.160.0/19 -add china_ip_route 210.78.192.0/18 -add china_ip_route 210.79.64.0/18 -add china_ip_route 210.79.224.0/19 -add china_ip_route 210.82.0.0/15 -add china_ip_route 210.87.128.0/20 -add china_ip_route 210.87.144.0/20 -add china_ip_route 210.87.160.0/19 -add china_ip_route 210.185.192.0/18 -add china_ip_route 210.192.96.0/19 -add china_ip_route 211.64.0.0/14 -add china_ip_route 211.68.0.0/15 -add china_ip_route 211.70.0.0/15 -add china_ip_route 211.80.0.0/16 -add china_ip_route 211.81.0.0/16 -add china_ip_route 211.82.0.0/16 -add china_ip_route 211.83.0.0/16 -add china_ip_route 211.84.0.0/15 -add china_ip_route 211.86.0.0/15 -add china_ip_route 211.88.0.0/16 -add china_ip_route 211.89.0.0/16 -add china_ip_route 211.90.0.0/15 -add china_ip_route 211.92.0.0/15 -add china_ip_route 211.94.0.0/15 -add china_ip_route 211.96.0.0/15 -add china_ip_route 211.98.0.0/16 -add china_ip_route 211.99.0.0/18 -add china_ip_route 211.99.64.0/19 -add china_ip_route 211.99.96.0/19 -add china_ip_route 211.99.128.0/17 -add china_ip_route 211.100.0.0/16 -add china_ip_route 211.101.0.0/18 -add china_ip_route 211.101.64.0/18 -add china_ip_route 211.101.128.0/17 -add china_ip_route 211.102.0.0/16 -add china_ip_route 211.103.0.0/17 -add china_ip_route 211.103.128.0/17 -add china_ip_route 211.136.0.0/14 -add china_ip_route 211.140.0.0/15 -add china_ip_route 211.142.0.0/17 -add china_ip_route 211.142.128.0/17 -add china_ip_route 211.143.0.0/16 -add china_ip_route 211.144.0.0/15 -add china_ip_route 211.146.0.0/16 -add china_ip_route 211.147.0.0/16 -add china_ip_route 211.148.0.0/14 -add china_ip_route 211.152.0.0/15 -add china_ip_route 211.154.0.0/16 -add china_ip_route 211.155.0.0/18 -add china_ip_route 211.155.64.0/19 -add china_ip_route 211.155.96.0/19 -add china_ip_route 211.155.128.0/17 -add china_ip_route 211.156.0.0/14 -add china_ip_route 211.160.0.0/14 -add china_ip_route 211.164.0.0/14 -add china_ip_route 212.64.0.0/17 -add china_ip_route 212.129.128.0/17 -add china_ip_route 218.0.0.0/16 -add china_ip_route 218.1.0.0/16 -add china_ip_route 218.2.0.0/15 -add china_ip_route 218.4.0.0/15 -add china_ip_route 218.6.0.0/16 -add china_ip_route 218.7.0.0/16 -add china_ip_route 218.8.0.0/15 -add china_ip_route 218.10.0.0/16 -add china_ip_route 218.11.0.0/16 -add china_ip_route 218.12.0.0/16 -add china_ip_route 218.13.0.0/16 -add china_ip_route 218.14.0.0/15 -add china_ip_route 218.16.0.0/14 -add china_ip_route 218.20.0.0/16 -add china_ip_route 218.21.0.0/17 -add china_ip_route 218.21.128.0/17 -add china_ip_route 218.22.0.0/15 -add china_ip_route 218.24.0.0/15 -add china_ip_route 218.26.0.0/16 -add china_ip_route 218.27.0.0/16 -add china_ip_route 218.28.0.0/15 -add china_ip_route 218.30.0.0/15 -add china_ip_route 218.56.0.0/14 -add china_ip_route 218.60.0.0/15 -add china_ip_route 218.62.0.0/17 -add china_ip_route 218.62.128.0/17 -add china_ip_route 218.63.0.0/16 -add china_ip_route 218.64.0.0/15 -add china_ip_route 218.66.0.0/16 -add china_ip_route 218.67.0.0/17 -add china_ip_route 218.67.128.0/17 -add china_ip_route 218.68.0.0/15 -add china_ip_route 218.70.0.0/15 -add china_ip_route 218.72.0.0/14 -add china_ip_route 218.76.0.0/15 -add china_ip_route 218.78.0.0/15 -add china_ip_route 218.80.0.0/14 -add china_ip_route 218.84.0.0/14 -add china_ip_route 218.88.0.0/13 -add china_ip_route 218.96.0.0/15 -add china_ip_route 218.98.0.0/17 -add china_ip_route 218.98.128.0/18 -add china_ip_route 218.98.192.0/19 -add china_ip_route 218.98.224.0/19 -add china_ip_route 218.99.0.0/16 -add china_ip_route 218.100.88.0/21 -add china_ip_route 218.100.96.0/19 -add china_ip_route 218.100.128.0/17 -add china_ip_route 218.104.0.0/17 -add china_ip_route 218.104.128.0/19 -add china_ip_route 218.104.160.0/19 -add china_ip_route 218.104.192.0/21 -add china_ip_route 218.104.200.0/21 -add china_ip_route 218.104.208.0/20 -add china_ip_route 218.104.224.0/19 -add china_ip_route 218.105.0.0/16 -add china_ip_route 218.106.0.0/15 -add china_ip_route 218.108.0.0/16 -add china_ip_route 218.109.0.0/16 -add china_ip_route 218.185.192.0/19 -add china_ip_route 218.185.240.0/21 -add china_ip_route 218.192.0.0/16 -add china_ip_route 218.193.0.0/16 -add china_ip_route 218.194.0.0/16 -add china_ip_route 218.195.0.0/16 -add china_ip_route 218.196.0.0/14 -add china_ip_route 218.200.0.0/14 -add china_ip_route 218.204.0.0/15 -add china_ip_route 218.206.0.0/15 -add china_ip_route 218.240.0.0/14 -add china_ip_route 218.244.0.0/15 -add china_ip_route 218.246.0.0/15 -add china_ip_route 218.249.0.0/16 -add china_ip_route 219.72.0.0/16 -add china_ip_route 219.82.0.0/16 -add china_ip_route 219.83.128.0/17 -add china_ip_route 219.90.68.0/22 -add china_ip_route 219.90.72.0/22 -add china_ip_route 219.90.76.0/22 -add china_ip_route 219.128.0.0/12 -add china_ip_route 219.144.0.0/14 -add china_ip_route 219.148.0.0/16 -add china_ip_route 219.149.0.0/17 -add china_ip_route 219.149.128.0/18 -add china_ip_route 219.149.192.0/18 -add china_ip_route 219.150.0.0/19 -add china_ip_route 219.150.32.0/19 -add china_ip_route 219.150.64.0/19 -add china_ip_route 219.150.96.0/20 -add china_ip_route 219.150.112.0/20 -add china_ip_route 219.150.128.0/17 -add china_ip_route 219.151.0.0/19 -add china_ip_route 219.151.32.0/19 -add china_ip_route 219.151.64.0/18 -add china_ip_route 219.151.128.0/17 -add china_ip_route 219.152.0.0/15 -add china_ip_route 219.154.0.0/15 -add china_ip_route 219.156.0.0/15 -add china_ip_route 219.158.0.0/17 -add china_ip_route 219.158.128.0/17 -add china_ip_route 219.159.0.0/18 -add china_ip_route 219.159.64.0/18 -add china_ip_route 219.159.128.0/17 -add china_ip_route 219.216.0.0/15 -add china_ip_route 219.218.0.0/15 -add china_ip_route 219.220.0.0/16 -add china_ip_route 219.221.0.0/16 -add china_ip_route 219.222.0.0/15 -add china_ip_route 219.224.0.0/15 -add china_ip_route 219.226.0.0/16 -add china_ip_route 219.227.0.0/16 -add china_ip_route 219.228.0.0/15 -add china_ip_route 219.230.0.0/15 -add china_ip_route 219.232.0.0/14 -add china_ip_route 219.236.0.0/15 -add china_ip_route 219.238.0.0/15 -add china_ip_route 219.242.0.0/15 -add china_ip_route 219.244.0.0/14 -add china_ip_route 220.101.192.0/18 -add china_ip_route 220.112.0.0/14 -add china_ip_route 220.152.128.0/17 -add china_ip_route 220.154.0.0/15 -add china_ip_route 220.158.240.0/22 -add china_ip_route 220.160.0.0/11 -add china_ip_route 220.192.0.0/15 -add china_ip_route 220.194.0.0/15 -add china_ip_route 220.196.0.0/14 -add china_ip_route 220.200.0.0/13 -add china_ip_route 220.231.0.0/18 -add china_ip_route 220.231.128.0/17 -add china_ip_route 220.232.64.0/18 -add china_ip_route 220.234.0.0/16 -add china_ip_route 220.242.0.0/15 -add china_ip_route 220.247.136.0/21 -add china_ip_route 220.248.0.0/14 -add china_ip_route 220.252.0.0/16 -add china_ip_route 221.0.0.0/15 -add china_ip_route 221.2.0.0/16 -add china_ip_route 221.3.0.0/17 -add china_ip_route 221.3.128.0/17 -add china_ip_route 221.4.0.0/16 -add china_ip_route 221.5.0.0/17 -add china_ip_route 221.5.128.0/17 -add china_ip_route 221.6.0.0/16 -add china_ip_route 221.7.0.0/19 -add china_ip_route 221.7.32.0/19 -add china_ip_route 221.7.64.0/19 -add china_ip_route 221.7.96.0/19 -add china_ip_route 221.7.128.0/17 -add china_ip_route 221.8.0.0/15 -add china_ip_route 221.10.0.0/16 -add china_ip_route 221.11.0.0/17 -add china_ip_route 221.11.128.0/18 -add china_ip_route 221.11.192.0/19 -add china_ip_route 221.11.224.0/19 -add china_ip_route 221.12.0.0/17 -add china_ip_route 221.12.128.0/18 -add china_ip_route 221.13.0.0/18 -add china_ip_route 221.13.64.0/19 -add china_ip_route 221.13.96.0/19 -add china_ip_route 221.13.128.0/17 -add china_ip_route 221.14.0.0/15 -add china_ip_route 221.122.0.0/15 -add china_ip_route 221.128.128.0/17 -add china_ip_route 221.129.0.0/16 -add china_ip_route 221.130.0.0/15 -add china_ip_route 221.133.224.0/19 -add china_ip_route 221.136.0.0/16 -add china_ip_route 221.137.0.0/16 -add china_ip_route 221.172.0.0/14 -add china_ip_route 221.176.0.0/13 -add china_ip_route 221.192.0.0/15 -add china_ip_route 221.194.0.0/16 -add china_ip_route 221.195.0.0/16 -add china_ip_route 221.196.0.0/15 -add china_ip_route 221.198.0.0/16 -add china_ip_route 221.199.0.0/19 -add china_ip_route 221.199.32.0/20 -add china_ip_route 221.199.48.0/20 -add china_ip_route 221.199.64.0/18 -add china_ip_route 221.199.128.0/18 -add china_ip_route 221.199.192.0/20 -add china_ip_route 221.199.224.0/19 -add china_ip_route 221.200.0.0/14 -add china_ip_route 221.204.0.0/15 -add china_ip_route 221.206.0.0/16 -add china_ip_route 221.207.0.0/18 -add china_ip_route 221.207.64.0/18 -add china_ip_route 221.207.128.0/17 -add china_ip_route 221.208.0.0/14 -add china_ip_route 221.212.0.0/16 -add china_ip_route 221.213.0.0/16 -add china_ip_route 221.214.0.0/15 -add china_ip_route 221.216.0.0/13 -add china_ip_route 221.224.0.0/13 -add china_ip_route 221.232.0.0/14 -add china_ip_route 221.236.0.0/15 -add china_ip_route 221.238.0.0/16 -add china_ip_route 221.239.0.0/17 -add china_ip_route 221.239.128.0/17 -add china_ip_route 222.16.0.0/15 -add china_ip_route 222.18.0.0/15 -add china_ip_route 222.20.0.0/15 -add china_ip_route 222.22.0.0/16 -add china_ip_route 222.23.0.0/16 -add china_ip_route 222.24.0.0/15 -add china_ip_route 222.26.0.0/15 -add china_ip_route 222.28.0.0/14 -add china_ip_route 222.32.0.0/11 -add china_ip_route 222.64.0.0/13 -add china_ip_route 222.72.0.0/15 -add china_ip_route 222.74.0.0/16 -add china_ip_route 222.75.0.0/16 -add china_ip_route 222.76.0.0/14 -add china_ip_route 222.80.0.0/15 -add china_ip_route 222.82.0.0/16 -add china_ip_route 222.83.0.0/17 -add china_ip_route 222.83.128.0/17 -add china_ip_route 222.84.0.0/16 -add china_ip_route 222.85.0.0/17 -add china_ip_route 222.85.128.0/17 -add china_ip_route 222.86.0.0/15 -add china_ip_route 222.88.0.0/15 -add china_ip_route 222.90.0.0/15 -add china_ip_route 222.92.0.0/14 -add china_ip_route 222.125.0.0/16 -add china_ip_route 222.126.128.0/17 -add china_ip_route 222.128.0.0/14 -add china_ip_route 222.132.0.0/14 -add china_ip_route 222.136.0.0/13 -add china_ip_route 222.160.0.0/15 -add china_ip_route 222.162.0.0/16 -add china_ip_route 222.163.0.0/19 -add china_ip_route 222.163.32.0/19 -add china_ip_route 222.163.64.0/18 -add china_ip_route 222.163.128.0/17 -add china_ip_route 222.168.0.0/15 -add china_ip_route 222.170.0.0/15 -add china_ip_route 222.172.0.0/17 -add china_ip_route 222.172.128.0/17 -add china_ip_route 222.173.0.0/16 -add china_ip_route 222.174.0.0/15 -add china_ip_route 222.176.0.0/13 -add china_ip_route 222.184.0.0/13 -add china_ip_route 222.192.0.0/14 -add china_ip_route 222.196.0.0/15 -add china_ip_route 222.198.0.0/16 -add china_ip_route 222.199.0.0/16 -add china_ip_route 222.200.0.0/14 -add china_ip_route 222.204.0.0/15 -add china_ip_route 222.206.0.0/15 -add china_ip_route 222.208.0.0/13 -add china_ip_route 222.216.0.0/15 -add china_ip_route 222.218.0.0/16 -add china_ip_route 222.219.0.0/16 -add china_ip_route 222.220.0.0/15 -add china_ip_route 222.222.0.0/15 -add china_ip_route 222.240.0.0/13 -add china_ip_route 222.248.0.0/16 -add china_ip_route 222.249.0.0/17 -add china_ip_route 222.249.128.0/19 -add china_ip_route 222.249.160.0/20 -add china_ip_route 222.249.176.0/20 -add china_ip_route 222.249.192.0/18 -add china_ip_route 223.0.0.0/15 -add china_ip_route 223.2.0.0/15 -add china_ip_route 223.4.0.0/14 -add china_ip_route 223.8.0.0/13 -add china_ip_route 223.20.0.0/15 -add china_ip_route 223.27.184.0/22 -add china_ip_route 223.29.208.0/22 -add china_ip_route 223.29.252.0/22 -add china_ip_route 223.64.0.0/11 -add china_ip_route 223.96.0.0/12 -add china_ip_route 223.112.0.0/14 -add china_ip_route 223.116.0.0/15 -add china_ip_route 223.120.128.0/17 -add china_ip_route 223.121.128.0/17 -add china_ip_route 223.122.0.0/15 -add china_ip_route 223.124.0.0/14 -add china_ip_route 223.128.0.0/15 -add china_ip_route 223.144.0.0/12 -add china_ip_route 223.160.0.0/14 -add china_ip_route 223.166.0.0/15 -add china_ip_route 223.192.0.0/15 -add china_ip_route 223.198.0.0/15 -add china_ip_route 223.201.0.0/16 -add china_ip_route 223.202.0.0/15 -add china_ip_route 223.208.0.0/14 -add china_ip_route 223.212.0.0/15 -add china_ip_route 223.214.0.0/15 -add china_ip_route 223.220.0.0/15 -add china_ip_route 223.223.176.0/20 -add china_ip_route 223.223.192.0/20 -add china_ip_route 223.240.0.0/13 -add china_ip_route 223.248.0.0/14 -add china_ip_route 223.252.128.0/17 -add china_ip_route 223.254.0.0/16 -add china_ip_route 223.255.0.0/17 -add china_ip_route 223.255.236.0/22 -add china_ip_route 223.255.252.0/23 +1.0.1.0/24 +1.0.2.0/23 +1.0.8.0/21 +1.0.32.0/19 +1.1.0.0/24 +1.1.2.0/23 +1.1.4.0/22 +1.1.8.0/24 +1.1.9.0/24 +1.1.10.0/23 +1.1.12.0/22 +1.1.16.0/20 +1.1.32.0/19 +1.2.0.0/23 +1.2.2.0/24 +1.2.4.0/24 +1.2.5.0/24 +1.2.6.0/23 +1.2.8.0/24 +1.2.9.0/24 +1.2.10.0/23 +1.2.12.0/22 +1.2.16.0/20 +1.2.32.0/19 +1.2.64.0/18 +1.3.0.0/16 +1.4.1.0/24 +1.4.2.0/23 +1.4.4.0/24 +1.4.5.0/24 +1.4.6.0/23 +1.4.8.0/21 +1.4.16.0/20 +1.4.32.0/19 +1.4.64.0/18 +1.8.0.0/16 +1.10.0.0/21 +1.10.8.0/23 +1.10.11.0/24 +1.10.12.0/22 +1.10.16.0/20 +1.10.32.0/19 +1.10.64.0/18 +1.12.0.0/14 +1.24.0.0/13 +1.45.0.0/16 +1.48.0.0/15 +1.50.0.0/16 +1.51.0.0/16 +1.56.0.0/13 +1.68.0.0/14 +1.80.0.0/13 +1.88.0.0/14 +1.92.0.0/15 +1.94.0.0/15 +1.116.0.0/15 +1.118.0.0/16 +1.119.0.0/17 +1.119.128.0/17 +1.180.0.0/14 +1.184.0.0/15 +1.188.0.0/14 +1.192.0.0/13 +1.202.0.0/15 +1.204.0.0/14 +14.0.0.0/21 +14.0.12.0/22 +14.1.0.0/22 +14.1.24.0/22 +14.1.96.0/22 +14.1.108.0/22 +14.16.0.0/12 +14.102.128.0/22 +14.102.156.0/22 +14.102.180.0/22 +14.103.0.0/16 +14.104.0.0/13 +14.112.0.0/12 +14.130.0.0/15 +14.134.0.0/15 +14.144.0.0/12 +14.192.60.0/22 +14.192.76.0/22 +14.196.0.0/15 +14.204.0.0/15 +14.208.0.0/12 +27.0.128.0/22 +27.0.132.0/22 +27.0.160.0/22 +27.0.164.0/22 +27.0.188.0/22 +27.0.204.0/22 +27.0.208.0/22 +27.0.212.0/22 +27.8.0.0/13 +27.16.0.0/12 +27.34.232.0/21 +27.36.0.0/14 +27.40.0.0/13 +27.50.40.0/21 +27.50.128.0/17 +27.54.72.0/21 +27.54.152.0/21 +27.54.192.0/18 +27.98.208.0/20 +27.98.224.0/19 +27.99.128.0/17 +27.103.0.0/16 +27.106.128.0/18 +27.106.204.0/22 +27.109.32.0/19 +27.109.124.0/22 +27.112.0.0/18 +27.112.80.0/20 +27.112.112.0/22 +27.112.116.0/22 +27.113.128.0/18 +27.115.0.0/17 +27.116.44.0/22 +27.121.72.0/21 +27.121.120.0/21 +27.128.0.0/15 +27.131.220.0/22 +27.144.0.0/16 +27.148.0.0/14 +27.152.0.0/13 +27.184.0.0/13 +27.192.0.0/11 +27.224.0.0/14 +36.0.0.0/22 +36.0.8.0/21 +36.0.16.0/20 +36.0.32.0/19 +36.0.64.0/18 +36.0.128.0/17 +36.1.0.0/16 +36.4.0.0/14 +36.16.0.0/12 +36.32.0.0/14 +36.36.0.0/16 +36.37.0.0/19 +36.37.36.0/23 +36.37.39.0/24 +36.37.40.0/21 +36.37.48.0/20 +36.40.0.0/13 +36.48.0.0/15 +36.50.226.0/23 +36.50.254.0/23 +36.51.0.0/16 +36.56.0.0/13 +36.96.0.0/11 +36.128.0.0/10 +36.192.0.0/11 +36.248.0.0/14 +36.254.0.0/16 +36.255.116.0/22 +36.255.128.0/22 +36.255.164.0/22 +36.255.172.0/22 +36.255.176.0/22 +39.0.0.0/24 +39.0.2.0/23 +39.0.4.0/22 +39.0.8.0/21 +39.0.16.0/20 +39.0.32.0/19 +39.0.64.0/18 +39.0.128.0/17 +39.64.0.0/11 +39.96.0.0/13 +39.104.0.0/14 +39.108.0.0/16 +39.128.0.0/10 +40.72.0.0/15 +40.125.128.0/17 +40.126.64.0/18 +40.162.0.0/16 +42.0.0.0/22 +42.0.8.0/21 +42.0.16.0/21 +42.0.24.0/22 +42.0.32.0/19 +42.0.128.0/17 +42.1.0.0/19 +42.1.32.0/20 +42.1.48.0/21 +42.1.56.0/22 +42.1.128.0/17 +42.4.0.0/14 +42.48.0.0/15 +42.50.0.0/16 +42.51.0.0/16 +42.52.0.0/14 +42.56.0.0/14 +42.62.0.0/17 +42.62.128.0/19 +42.62.160.0/20 +42.62.180.0/22 +42.62.184.0/21 +42.63.0.0/16 +42.80.0.0/15 +42.83.64.0/20 +42.83.80.0/22 +42.83.88.0/21 +42.83.96.0/19 +42.83.128.0/17 +42.84.0.0/14 +42.88.0.0/13 +42.96.64.0/19 +42.96.96.0/21 +42.96.108.0/22 +42.96.112.0/20 +42.96.128.0/17 +42.97.0.0/16 +42.99.0.0/18 +42.99.64.0/19 +42.99.96.0/20 +42.99.112.0/22 +42.99.120.0/21 +42.100.0.0/14 +42.120.0.0/15 +42.122.0.0/16 +42.123.0.0/19 +42.123.36.0/22 +42.123.40.0/21 +42.123.48.0/20 +42.123.64.0/18 +42.123.128.0/17 +42.128.0.0/12 +42.156.0.0/19 +42.156.36.0/22 +42.156.40.0/21 +42.156.48.0/20 +42.156.64.0/18 +42.156.128.0/17 +42.157.0.0/16 +42.158.0.0/16 +42.159.0.0/16 +42.160.0.0/12 +42.176.0.0/13 +42.184.0.0/15 +42.186.0.0/16 +42.187.0.0/18 +42.187.64.0/19 +42.187.96.0/20 +42.187.112.0/21 +42.187.120.0/22 +42.187.128.0/17 +42.192.0.0/15 +42.194.0.0/21 +42.194.8.0/22 +42.194.12.0/22 +42.194.16.0/20 +42.194.32.0/19 +42.194.64.0/18 +42.194.128.0/17 +42.195.0.0/16 +42.196.0.0/14 +42.201.0.0/17 +42.202.0.0/15 +42.204.0.0/14 +42.208.0.0/12 +42.224.0.0/12 +42.240.0.0/17 +42.240.128.0/17 +42.242.0.0/15 +42.244.0.0/14 +42.248.0.0/13 +43.136.0.0/13 +43.144.0.0/13 +43.176.0.0/12 +43.192.0.0/15 +43.194.0.0/16 +43.195.0.0/16 +43.196.0.0/15 +43.224.12.0/22 +43.224.24.0/22 +43.224.44.0/22 +43.224.52.0/22 +43.224.56.0/22 +43.224.64.0/22 +43.224.68.0/22 +43.224.72.0/22 +43.224.80.0/22 +43.224.100.0/22 +43.224.144.0/22 +43.224.160.0/22 +43.224.176.0/22 +43.224.184.0/22 +43.224.200.0/22 +43.224.204.0/22 +43.224.208.0/22 +43.224.212.0/22 +43.224.216.0/22 +43.224.240.0/22 +43.225.76.0/22 +43.225.84.0/22 +43.225.120.0/22 +43.225.172.0/22 +43.225.180.0/22 +43.225.208.0/22 +43.225.216.0/22 +43.225.220.0/22 +43.225.224.0/22 +43.225.228.0/22 +43.225.232.0/22 +43.225.236.0/22 +43.225.240.0/22 +43.225.244.0/22 +43.225.252.0/22 +43.226.32.0/22 +43.226.36.0/22 +43.226.40.0/22 +43.226.44.0/22 +43.226.48.0/22 +43.226.52.0/22 +43.226.56.0/22 +43.226.60.0/22 +43.226.64.0/22 +43.226.68.0/22 +43.226.72.0/22 +43.226.76.0/22 +43.226.80.0/22 +43.226.84.0/22 +43.226.88.0/22 +43.226.92.0/22 +43.226.96.0/22 +43.226.100.0/22 +43.226.104.0/22 +43.226.108.0/22 +43.226.112.0/22 +43.226.116.0/22 +43.226.120.0/22 +43.226.128.0/22 +43.226.132.0/22 +43.226.136.0/22 +43.226.140.0/22 +43.226.144.0/22 +43.226.148.0/22 +43.226.152.0/22 +43.226.156.0/22 +43.226.160.0/22 +43.226.164.0/22 +43.226.168.0/22 +43.226.172.0/22 +43.226.176.0/22 +43.226.180.0/22 +43.226.184.0/22 +43.226.188.0/22 +43.226.192.0/22 +43.226.196.0/22 +43.226.200.0/22 +43.226.204.0/22 +43.226.208.0/22 +43.226.212.0/22 +43.226.236.0/22 +43.226.240.0/22 +43.226.244.0/22 +43.226.248.0/22 +43.226.252.0/22 +43.227.0.0/22 +43.227.4.0/22 +43.227.8.0/22 +43.227.32.0/22 +43.227.36.0/22 +43.227.40.0/22 +43.227.44.0/22 +43.227.48.0/22 +43.227.52.0/22 +43.227.56.0/22 +43.227.60.0/22 +43.227.64.0/22 +43.227.68.0/22 +43.227.72.0/22 +43.227.76.0/22 +43.227.80.0/22 +43.227.84.0/22 +43.227.88.0/22 +43.227.92.0/22 +43.227.96.0/22 +43.227.100.0/22 +43.227.104.0/22 +43.227.136.0/22 +43.227.140.0/22 +43.227.144.0/22 +43.227.152.0/22 +43.227.156.0/22 +43.227.160.0/22 +43.227.164.0/22 +43.227.168.0/22 +43.227.172.0/22 +43.227.176.0/22 +43.227.180.0/22 +43.227.188.0/22 +43.227.192.0/22 +43.227.196.0/22 +43.227.200.0/22 +43.227.204.0/22 +43.227.208.0/22 +43.227.212.0/22 +43.227.216.0/22 +43.227.220.0/22 +43.227.232.0/22 +43.227.248.0/22 +43.227.252.0/22 +43.228.0.0/22 +43.228.4.0/22 +43.228.8.0/22 +43.228.12.0/22 +43.228.16.0/22 +43.228.20.0/22 +43.228.24.0/22 +43.228.28.0/22 +43.228.32.0/22 +43.228.36.0/22 +43.228.40.0/22 +43.228.44.0/22 +43.228.48.0/22 +43.228.52.0/22 +43.228.56.0/22 +43.228.60.0/22 +43.228.64.0/22 +43.228.68.0/22 +43.228.76.0/22 +43.228.100.0/22 +43.228.116.0/22 +43.228.120.0/22 +43.228.132.0/22 +43.228.136.0/22 +43.228.148.0/22 +43.228.152.0/22 +43.228.188.0/22 +43.228.204.0/22 +43.228.240.0/22 +43.229.40.0/22 +43.229.48.0/22 +43.229.56.0/22 +43.229.96.0/22 +43.229.136.0/22 +43.229.140.0/22 +43.229.144.0/22 +43.229.168.0/22 +43.229.172.0/22 +43.229.176.0/22 +43.229.180.0/22 +43.229.184.0/22 +43.229.188.0/22 +43.229.192.0/22 +43.229.196.0/22 +43.229.216.0/22 +43.229.220.0/22 +43.229.232.0/22 +43.229.236.0/22 +43.230.20.0/22 +43.230.32.0/22 +43.230.68.0/22 +43.230.72.0/22 +43.230.124.0/22 +43.230.136.0/22 +43.230.220.0/22 +43.230.224.0/22 +43.230.228.0/22 +43.230.232.0/22 +43.230.236.0/22 +43.230.240.0/22 +43.230.244.0/22 +43.230.248.0/22 +43.230.252.0/22 +43.231.32.0/22 +43.231.36.0/22 +43.231.40.0/22 +43.231.44.0/22 +43.231.80.0/22 +43.231.84.0/22 +43.231.88.0/22 +43.231.92.0/22 +43.231.96.0/22 +43.231.100.0/22 +43.231.104.0/22 +43.231.108.0/22 +43.231.136.0/22 +43.231.140.0/22 +43.231.144.0/22 +43.231.148.0/22 +43.231.152.0/22 +43.231.156.0/22 +43.231.160.0/22 +43.231.164.0/22 +43.231.168.0/22 +43.231.172.0/22 +43.231.176.0/22 +43.231.180.0/22 +43.236.0.0/22 +43.236.4.0/22 +43.236.8.0/22 +43.236.12.0/22 +43.236.16.0/22 +43.236.20.0/22 +43.236.24.0/22 +43.236.28.0/22 +43.236.32.0/22 +43.236.36.0/22 +43.236.40.0/22 +43.236.44.0/22 +43.236.48.0/22 +43.236.52.0/22 +43.236.56.0/22 +43.236.60.0/22 +43.236.64.0/22 +43.236.68.0/22 +43.236.72.0/22 +43.236.76.0/22 +43.236.80.0/22 +43.236.84.0/22 +43.236.88.0/22 +43.236.92.0/22 +43.236.96.0/22 +43.236.100.0/22 +43.236.104.0/22 +43.236.108.0/22 +43.236.112.0/22 +43.236.116.0/22 +43.236.120.0/22 +43.236.124.0/22 +43.236.128.0/22 +43.236.132.0/22 +43.236.136.0/22 +43.236.140.0/22 +43.236.144.0/22 +43.236.148.0/22 +43.236.152.0/22 +43.236.156.0/22 +43.236.160.0/22 +43.236.164.0/22 +43.236.168.0/22 +43.236.172.0/22 +43.236.176.0/22 +43.236.180.0/22 +43.236.184.0/22 +43.236.188.0/22 +43.236.192.0/22 +43.236.196.0/22 +43.236.200.0/22 +43.236.204.0/22 +43.236.208.0/22 +43.236.212.0/22 +43.236.216.0/22 +43.236.220.0/22 +43.236.224.0/22 +43.236.228.0/22 +43.236.232.0/22 +43.236.236.0/22 +43.236.240.0/22 +43.236.244.0/22 +43.236.248.0/22 +43.236.252.0/22 +43.237.0.0/22 +43.237.4.0/22 +43.237.8.0/22 +43.237.12.0/22 +43.237.16.0/22 +43.237.20.0/22 +43.237.24.0/22 +43.237.28.0/22 +43.237.32.0/22 +43.237.36.0/22 +43.237.40.0/22 +43.237.44.0/22 +43.237.48.0/22 +43.237.52.0/22 +43.237.56.0/22 +43.237.60.0/22 +43.237.64.0/22 +43.237.68.0/22 +43.237.72.0/22 +43.237.76.0/22 +43.237.80.0/22 +43.237.84.0/22 +43.237.88.0/22 +43.237.92.0/22 +43.237.96.0/22 +43.237.100.0/22 +43.237.104.0/22 +43.237.108.0/22 +43.237.112.0/22 +43.237.116.0/22 +43.237.120.0/22 +43.237.124.0/22 +43.237.128.0/22 +43.237.132.0/22 +43.237.136.0/22 +43.237.140.0/22 +43.237.144.0/22 +43.237.148.0/22 +43.237.152.0/22 +43.237.156.0/22 +43.237.160.0/22 +43.237.164.0/22 +43.237.168.0/22 +43.237.172.0/22 +43.237.176.0/22 +43.237.180.0/22 +43.237.184.0/22 +43.237.188.0/22 +43.237.192.0/22 +43.237.200.0/22 +43.237.204.0/22 +43.237.208.0/22 +43.237.212.0/22 +43.237.216.0/22 +43.237.220.0/22 +43.237.224.0/22 +43.237.228.0/22 +43.237.232.0/22 +43.237.236.0/22 +43.237.240.0/22 +43.237.244.0/22 +43.237.248.0/22 +43.237.252.0/22 +43.238.0.0/22 +43.238.4.0/22 +43.238.8.0/22 +43.238.12.0/22 +43.238.16.0/22 +43.238.20.0/22 +43.238.24.0/22 +43.238.28.0/22 +43.238.32.0/22 +43.238.36.0/22 +43.238.40.0/22 +43.238.44.0/22 +43.238.48.0/22 +43.238.52.0/22 +43.238.56.0/22 +43.238.60.0/22 +43.238.64.0/22 +43.238.68.0/22 +43.238.72.0/22 +43.238.76.0/22 +43.238.80.0/22 +43.238.84.0/22 +43.238.88.0/22 +43.238.92.0/22 +43.238.96.0/22 +43.238.100.0/22 +43.238.104.0/22 +43.238.108.0/22 +43.238.112.0/22 +43.238.116.0/22 +43.238.120.0/22 +43.238.124.0/22 +43.238.128.0/22 +43.238.132.0/22 +43.238.136.0/22 +43.238.140.0/22 +43.238.144.0/22 +43.238.148.0/22 +43.238.152.0/22 +43.238.156.0/22 +43.238.160.0/22 +43.238.164.0/22 +43.238.168.0/22 +43.238.172.0/22 +43.238.176.0/22 +43.238.180.0/22 +43.238.184.0/22 +43.238.188.0/22 +43.238.192.0/22 +43.238.196.0/22 +43.238.200.0/22 +43.238.204.0/22 +43.238.208.0/22 +43.238.212.0/22 +43.238.216.0/22 +43.238.220.0/22 +43.238.224.0/22 +43.238.228.0/22 +43.238.232.0/22 +43.238.236.0/22 +43.238.240.0/22 +43.238.244.0/22 +43.238.248.0/22 +43.238.252.0/22 +43.239.0.0/22 +43.239.4.0/22 +43.239.8.0/21 +43.239.16.0/22 +43.239.20.0/22 +43.239.24.0/22 +43.239.28.0/22 +43.239.32.0/22 +43.239.36.0/22 +43.239.40.0/22 +43.239.44.0/22 +43.239.48.0/22 +43.239.116.0/22 +43.239.120.0/22 +43.239.172.0/22 +43.239.176.0/22 +43.240.0.0/22 +43.240.56.0/22 +43.240.60.0/22 +43.240.68.0/22 +43.240.72.0/22 +43.240.76.0/22 +43.240.84.0/22 +43.240.124.0/22 +43.240.128.0/22 +43.240.132.0/22 +43.240.136.0/22 +43.240.144.0/22 +43.240.156.0/22 +43.240.160.0/22 +43.240.164.0/22 +43.240.168.0/22 +43.240.172.0/22 +43.240.176.0/22 +43.240.180.0/22 +43.240.184.0/22 +43.240.188.0/22 +43.240.192.0/22 +43.240.196.0/22 +43.240.200.0/22 +43.240.204.0/22 +43.240.208.0/22 +43.240.212.0/22 +43.240.216.0/22 +43.240.220.0/22 +43.240.240.0/22 +43.240.244.0/22 +43.240.248.0/22 +43.240.252.0/22 +43.241.0.0/22 +43.241.4.0/22 +43.241.8.0/22 +43.241.12.0/22 +43.241.16.0/22 +43.241.20.0/22 +43.241.48.0/22 +43.241.76.0/22 +43.241.80.0/22 +43.241.84.0/22 +43.241.88.0/22 +43.241.92.0/22 +43.241.112.0/22 +43.241.168.0/22 +43.241.172.0/22 +43.241.176.0/22 +43.241.180.0/22 +43.241.184.0/22 +43.241.208.0/22 +43.241.212.0/22 +43.241.216.0/22 +43.241.220.0/22 +43.241.224.0/22 +43.241.228.0/22 +43.241.232.0/22 +43.241.236.0/22 +43.241.240.0/22 +43.241.248.0/22 +43.241.252.0/22 +43.242.8.0/22 +43.242.12.0/22 +43.242.16.0/21 +43.242.24.0/22 +43.242.28.0/22 +43.242.48.0/22 +43.242.52.0/22 +43.242.56.0/22 +43.242.60.0/22 +43.242.64.0/22 +43.242.72.0/22 +43.242.76.0/22 +43.242.80.0/22 +43.242.84.0/22 +43.242.88.0/22 +43.242.92.0/22 +43.242.96.0/22 +43.242.144.0/22 +43.242.148.0/22 +43.242.152.0/22 +43.242.156.0/22 +43.242.160.0/22 +43.242.164.0/22 +43.242.168.0/22 +43.242.180.0/22 +43.242.188.0/22 +43.242.192.0/22 +43.242.196.0/22 +43.242.204.0/22 +43.242.216.0/22 +43.242.220.0/22 +43.242.252.0/22 +43.243.4.0/22 +43.243.8.0/22 +43.243.12.0/22 +43.243.16.0/22 +43.243.88.0/22 +43.243.128.0/22 +43.243.136.0/22 +43.243.144.0/22 +43.243.148.0/22 +43.243.156.0/22 +43.243.180.0/22 +43.243.228.0/22 +43.243.232.0/22 +43.243.244.0/22 +43.246.0.0/22 +43.246.4.0/22 +43.246.8.0/22 +43.246.12.0/22 +43.246.16.0/22 +43.246.20.0/22 +43.246.24.0/22 +43.246.28.0/22 +43.246.32.0/22 +43.246.36.0/22 +43.246.40.0/22 +43.246.44.0/22 +43.246.48.0/22 +43.246.52.0/22 +43.246.56.0/22 +43.246.60.0/22 +43.246.64.0/22 +43.246.68.0/22 +43.246.72.0/22 +43.246.76.0/22 +43.246.80.0/22 +43.246.84.0/22 +43.246.88.0/22 +43.246.92.0/22 +43.246.96.0/22 +43.246.112.0/22 +43.246.228.0/22 +43.247.4.0/22 +43.247.8.0/22 +43.247.44.0/22 +43.247.48.0/22 +43.247.68.0/22 +43.247.76.0/22 +43.247.84.0/22 +43.247.88.0/22 +43.247.92.0/22 +43.247.96.0/22 +43.247.100.0/22 +43.247.108.0/22 +43.247.112.0/22 +43.247.148.0/22 +43.247.152.0/22 +43.247.176.0/22 +43.247.180.0/22 +43.247.184.0/22 +43.247.188.0/22 +43.247.196.0/22 +43.247.200.0/22 +43.247.204.0/22 +43.247.208.0/22 +43.247.212.0/22 +43.247.216.0/22 +43.247.220.0/22 +43.247.224.0/22 +43.247.228.0/22 +43.247.232.0/22 +43.247.236.0/22 +43.247.240.0/22 +43.247.244.0/22 +43.247.248.0/22 +43.247.252.0/22 +43.248.0.0/22 +43.248.4.0/22 +43.248.20.0/22 +43.248.28.0/22 +43.248.48.0/22 +43.248.76.0/22 +43.248.80.0/22 +43.248.84.0/22 +43.248.88.0/22 +43.248.92.0/22 +43.248.96.0/22 +43.248.100.0/22 +43.248.104.0/22 +43.248.108.0/22 +43.248.112.0/22 +43.248.116.0/22 +43.248.120.0/22 +43.248.124.0/22 +43.248.128.0/22 +43.248.132.0/22 +43.248.136.0/22 +43.248.140.0/22 +43.248.144.0/22 +43.248.148.0/22 +43.248.176.0/22 +43.248.180.0/22 +43.248.184.0/22 +43.248.188.0/22 +43.248.192.0/22 +43.248.196.0/22 +43.248.200.0/22 +43.248.204.0/22 +43.248.208.0/22 +43.248.228.0/22 +43.248.232.0/22 +43.248.244.0/22 +43.249.4.0/22 +43.249.120.0/22 +43.249.132.0/22 +43.249.136.0/22 +43.249.144.0/22 +43.249.148.0/22 +43.249.152.0/22 +43.249.156.0/22 +43.249.160.0/22 +43.249.164.0/22 +43.249.168.0/22 +43.249.192.0/22 +43.249.236.0/22 +43.250.4.0/22 +43.250.12.0/22 +43.250.16.0/22 +43.250.20.0/22 +43.250.28.0/22 +43.250.32.0/22 +43.250.36.0/22 +43.250.72.0/22 +43.250.96.0/22 +43.250.100.0/22 +43.250.104.0/22 +43.250.108.0/22 +43.250.112.0/22 +43.250.116.0/22 +43.250.128.0/22 +43.250.144.0/22 +43.250.148.0/22 +43.250.160.0/22 +43.250.168.0/22 +43.250.172.0/22 +43.250.176.0/22 +43.250.180.0/23 +43.250.200.0/22 +43.250.212.0/22 +43.250.216.0/22 +43.250.220.0/22 +43.250.236.0/22 +43.250.244.0/22 +43.251.4.0/22 +43.251.8.0/22 +43.251.36.0/22 +43.251.100.0/22 +43.251.116.0/22 +43.251.192.0/22 +43.251.232.0/22 +43.251.236.0/22 +43.251.244.0/22 +43.252.48.0/22 +43.252.56.0/22 +43.254.0.0/22 +43.254.4.0/22 +43.254.8.0/22 +43.254.24.0/22 +43.254.36.0/22 +43.254.44.0/22 +43.254.52.0/22 +43.254.64.0/22 +43.254.72.0/22 +43.254.84.0/22 +43.254.88.0/22 +43.254.92.0/22 +43.254.100.0/22 +43.254.104.0/22 +43.254.112.0/22 +43.254.116.0/22 +43.254.128.0/22 +43.254.136.0/22 +43.254.140.0/22 +43.254.144.0/22 +43.254.148.0/22 +43.254.152.0/22 +43.254.156.0/22 +43.254.168.0/22 +43.254.172.0/22 +43.254.180.0/22 +43.254.184.0/22 +43.254.188.0/22 +43.254.192.0/22 +43.254.196.0/22 +43.254.200.0/22 +43.254.208.0/22 +43.254.220.0/22 +43.254.224.0/22 +43.254.228.0/22 +43.254.232.0/22 +43.254.236.0/22 +43.254.240.0/22 +43.254.248.0/22 +43.254.252.0/22 +43.255.0.0/22 +43.255.4.0/22 +43.255.8.0/22 +43.255.16.0/22 +43.255.48.0/22 +43.255.64.0/22 +43.255.68.0/22 +43.255.72.0/22 +43.255.76.0/22 +43.255.84.0/22 +43.255.96.0/22 +43.255.144.0/22 +43.255.176.0/22 +43.255.184.0/22 +43.255.192.0/22 +43.255.200.0/22 +43.255.204.0/22 +43.255.208.0/22 +43.255.212.0/22 +43.255.224.0/22 +43.255.228.0/22 +43.255.232.0/22 +43.255.244.0/22 +45.40.192.0/18 +45.65.16.0/22 +45.65.20.0/22 +45.65.24.0/22 +45.65.28.0/22 +45.112.132.0/22 +45.112.188.0/22 +45.112.208.0/22 +45.112.212.0/22 +45.112.216.0/22 +45.112.220.0/22 +45.112.228.0/22 +45.112.232.0/22 +45.112.236.0/22 +45.113.12.0/22 +45.113.16.0/22 +45.113.20.0/22 +45.113.24.0/22 +45.113.28.0/22 +45.113.40.0/22 +45.113.52.0/22 +45.113.56.0/22 +45.113.72.0/22 +45.113.144.0/22 +45.113.148.0/22 +45.113.168.0/22 +45.113.176.0/22 +45.113.184.0/22 +45.113.200.0/22 +45.113.204.0/22 +45.113.208.0/22 +45.113.212.0/22 +45.113.216.0/22 +45.113.220.0/22 +45.113.240.0/22 +45.113.252.0/22 +45.114.0.0/22 +45.114.32.0/22 +45.114.40.0/22 +45.114.52.0/22 +45.114.96.0/22 +45.114.124.0/22 +45.114.136.0/22 +45.114.196.0/22 +45.114.200.0/22 +45.114.228.0/22 +45.114.252.0/22 +45.115.44.0/22 +45.115.100.0/22 +45.115.120.0/22 +45.115.132.0/22 +45.115.144.0/22 +45.115.156.0/22 +45.115.164.0/22 +45.115.200.0/22 +45.115.212.0/22 +45.115.228.0/22 +45.115.236.0/22 +45.115.244.0/22 +45.115.248.0/22 +45.116.16.0/22 +45.116.24.0/22 +45.116.32.0/22 +45.116.36.0/22 +45.116.52.0/22 +45.116.96.0/22 +45.116.100.0/22 +45.116.140.0/22 +45.116.152.0/22 +45.116.208.0/22 +45.117.8.0/22 +45.117.20.0/22 +45.117.68.0/22 +45.117.124.0/22 +45.117.252.0/22 +45.119.52.0/22 +45.119.60.0/22 +45.119.64.0/22 +45.119.68.0/22 +45.119.72.0/22 +45.119.104.0/22 +45.119.116.0/22 +45.119.232.0/22 +45.120.100.0/22 +45.120.140.0/22 +45.120.164.0/22 +45.120.240.0/22 +45.121.52.0/22 +45.121.64.0/22 +45.121.68.0/22 +45.121.72.0/22 +45.121.92.0/22 +45.121.96.0/22 +45.121.172.0/22 +45.121.176.0/22 +45.121.212.0/22 +45.121.240.0/22 +45.121.244.0/22 +45.121.248.0/22 +45.121.252.0/22 +45.122.0.0/22 +45.122.4.0/22 +45.122.8.0/22 +45.122.12.0/22 +45.122.16.0/22 +45.122.20.0/22 +45.122.24.0/22 +45.122.28.0/22 +45.122.32.0/22 +45.122.36.0/22 +45.122.40.0/22 +45.122.60.0/22 +45.122.64.0/22 +45.122.68.0/22 +45.122.72.0/22 +45.122.76.0/22 +45.122.80.0/22 +45.122.84.0/22 +45.122.88.0/22 +45.122.92.0/22 +45.122.96.0/21 +45.122.104.0/22 +45.122.108.0/22 +45.122.112.0/22 +45.122.116.0/22 +45.122.160.0/22 +45.122.164.0/22 +45.122.168.0/22 +45.122.172.0/22 +45.122.176.0/22 +45.122.180.0/22 +45.122.184.0/22 +45.122.188.0/22 +45.122.192.0/22 +45.122.196.0/22 +45.122.200.0/22 +45.122.204.0/22 +45.122.208.0/22 +45.122.212.0/22 +45.122.216.0/22 +45.123.28.0/22 +45.123.32.0/22 +45.123.36.0/22 +45.123.44.0/22 +45.123.48.0/22 +45.123.52.0/22 +45.123.56.0/22 +45.123.60.0/22 +45.123.64.0/22 +45.123.68.0/22 +45.123.72.0/22 +45.123.76.0/22 +45.123.80.0/22 +45.123.84.0/22 +45.123.88.0/22 +45.123.120.0/22 +45.123.128.0/22 +45.123.132.0/22 +45.123.136.0/22 +45.123.148.0/22 +45.123.152.0/22 +45.123.156.0/22 +45.123.164.0/22 +45.123.168.0/22 +45.123.172.0/22 +45.123.176.0/22 +45.123.180.0/22 +45.123.184.0/22 +45.123.204.0/22 +45.123.212.0/22 +45.123.224.0/22 +45.123.228.0/22 +45.123.232.0/22 +45.123.236.0/22 +45.123.240.0/22 +45.123.244.0/22 +45.123.248.0/22 +45.123.252.0/22 +45.124.0.0/22 +45.124.20.0/22 +45.124.28.0/22 +45.124.32.0/22 +45.124.36.0/22 +45.124.44.0/22 +45.124.68.0/22 +45.124.76.0/22 +45.124.80.0/22 +45.124.100.0/22 +45.124.124.0/22 +45.124.172.0/22 +45.124.176.0/22 +45.124.208.0/22 +45.124.248.0/22 +45.125.16.0/22 +45.125.24.0/22 +45.125.44.0/22 +45.125.52.0/22 +45.125.56.0/22 +45.125.76.0/22 +45.125.80.0/22 +45.125.84.0/22 +45.125.88.0/22 +45.125.92.0/22 +45.125.96.0/22 +45.125.100.0/22 +45.125.136.0/22 +45.126.48.0/22 +45.126.52.0/22 +45.126.100.0/22 +45.126.108.0/22 +45.126.112.0/22 +45.126.116.0/22 +45.126.120.0/22 +45.126.212.0/22 +45.126.220.0/22 +45.127.8.0/22 +45.127.12.0/22 +45.127.128.0/22 +45.127.144.0/22 +45.127.148.0/22 +45.127.156.0/22 +45.127.216.0/22 +45.248.8.0/22 +45.248.80.0/22 +45.248.84.0/22 +45.248.88.0/22 +45.248.96.0/22 +45.248.100.0/22 +45.248.104.0/22 +45.248.108.0/22 +45.248.128.0/22 +45.248.132.0/22 +45.248.204.0/22 +45.248.208.0/22 +45.248.212.0/22 +45.248.216.0/22 +45.248.220.0/22 +45.248.224.0/22 +45.248.228.0/22 +45.248.232.0/22 +45.248.236.0/22 +45.248.240.0/22 +45.248.244.0/22 +45.248.248.0/22 +45.248.252.0/22 +45.249.0.0/22 +45.249.4.0/22 +45.249.12.0/22 +45.249.16.0/22 +45.249.20.0/22 +45.249.24.0/22 +45.249.28.0/22 +45.249.32.0/22 +45.249.36.0/22 +45.249.112.0/22 +45.249.188.0/22 +45.249.192.0/22 +45.249.196.0/22 +45.249.200.0/22 +45.249.204.0/22 +45.249.208.0/22 +45.249.212.0/22 +45.250.12.0/22 +45.250.16.0/22 +45.250.28.0/22 +45.250.32.0/22 +45.250.36.0/22 +45.250.40.0/22 +45.250.76.0/22 +45.250.80.0/22 +45.250.84.0/22 +45.250.88.0/22 +45.250.92.0/22 +45.250.96.0/22 +45.250.104.0/22 +45.250.108.0/22 +45.250.112.0/22 +45.250.116.0/22 +45.250.120.0/22 +45.250.124.0/22 +45.250.128.0/22 +45.250.132.0/22 +45.250.136.0/22 +45.250.140.0/22 +45.250.144.0/22 +45.250.148.0/22 +45.250.152.0/22 +45.250.164.0/22 +45.250.180.0/22 +45.250.184.0/22 +45.250.188.0/22 +45.250.192.0/22 +45.251.0.0/22 +45.251.8.0/22 +45.251.16.0/22 +45.251.20.0/22 +45.251.52.0/22 +45.251.84.0/22 +45.251.88.0/22 +45.251.92.0/22 +45.251.96.0/22 +45.251.100.0/22 +45.251.120.0/22 +45.251.124.0/22 +45.251.136.0/22 +45.251.140.0/22 +45.251.144.0/22 +45.251.148.0/22 +45.251.152.0/22 +45.251.156.0/22 +45.251.160.0/22 +45.251.164.0/22 +45.251.168.0/22 +45.251.172.0/22 +45.251.176.0/22 +45.251.180.0/22 +45.251.184.0/22 +45.251.188.0/22 +45.251.192.0/22 +45.251.196.0/22 +45.251.200.0/22 +45.251.204.0/22 +45.251.208.0/22 +45.251.212.0/22 +45.251.216.0/22 +45.251.220.0/22 +45.251.224.0/22 +45.251.240.0/22 +45.252.0.0/22 +45.252.4.0/22 +45.252.8.0/22 +45.252.12.0/22 +45.252.16.0/22 +45.252.20.0/22 +45.252.24.0/22 +45.252.28.0/22 +45.252.32.0/22 +45.252.36.0/22 +45.252.40.0/22 +45.252.44.0/22 +45.252.48.0/22 +45.252.84.0/22 +45.252.88.0/22 +45.252.92.0/22 +45.252.96.0/22 +45.252.100.0/22 +45.252.104.0/22 +45.252.108.0/22 +45.252.112.0/22 +45.252.116.0/22 +45.252.120.0/22 +45.252.124.0/22 +45.252.128.0/22 +45.252.132.0/22 +45.252.136.0/22 +45.252.140.0/22 +45.252.144.0/22 +45.252.148.0/22 +45.252.152.0/22 +45.252.156.0/22 +45.252.160.0/22 +45.252.164.0/22 +45.252.168.0/22 +45.252.172.0/22 +45.252.176.0/22 +45.252.192.0/22 +45.252.196.0/22 +45.252.200.0/22 +45.252.204.0/22 +45.252.208.0/22 +45.252.212.0/22 +45.252.216.0/22 +45.252.220.0/22 +45.252.224.0/22 +45.252.228.0/22 +45.252.232.0/22 +45.253.0.0/22 +45.253.4.0/22 +45.253.8.0/22 +45.253.12.0/22 +45.253.16.0/22 +45.253.20.0/22 +45.253.24.0/22 +45.253.28.0/22 +45.253.32.0/22 +45.253.36.0/22 +45.253.40.0/22 +45.253.44.0/22 +45.253.48.0/22 +45.253.52.0/22 +45.253.56.0/22 +45.253.60.0/22 +45.253.64.0/22 +45.253.68.0/22 +45.253.72.0/22 +45.253.76.0/22 +45.253.80.0/22 +45.253.84.0/22 +45.253.92.0/22 +45.253.96.0/22 +45.253.100.0/22 +45.253.104.0/22 +45.253.108.0/22 +45.253.112.0/22 +45.253.116.0/22 +45.253.120.0/22 +45.253.132.0/22 +45.253.136.0/22 +45.253.140.0/22 +45.253.144.0/22 +45.253.148.0/22 +45.253.152.0/22 +45.253.156.0/22 +45.253.160.0/22 +45.253.164.0/22 +45.253.168.0/22 +45.253.172.0/22 +45.253.176.0/22 +45.253.180.0/22 +45.253.184.0/22 +45.253.188.0/22 +45.253.192.0/22 +45.253.196.0/22 +45.253.200.0/22 +45.253.204.0/22 +45.253.208.0/22 +45.253.212.0/22 +45.253.216.0/22 +45.253.220.0/22 +45.253.224.0/22 +45.253.228.0/22 +45.253.232.0/22 +45.253.236.0/22 +45.253.240.0/22 +45.253.244.0/22 +45.254.0.0/22 +45.254.4.0/22 +45.254.8.0/22 +45.254.12.0/22 +45.254.16.0/22 +45.254.20.0/22 +45.254.24.0/22 +45.254.28.0/22 +45.254.40.0/22 +45.254.48.0/22 +45.254.52.0/22 +45.254.56.0/22 +45.254.60.0/22 +45.254.64.0/22 +45.254.68.0/22 +45.254.72.0/22 +45.254.76.0/22 +45.254.80.0/22 +45.254.84.0/22 +45.254.88.0/22 +45.254.92.0/22 +45.254.96.0/22 +45.254.100.0/22 +45.254.104.0/22 +45.254.108.0/22 +45.254.112.0/22 +45.254.116.0/22 +45.254.120.0/22 +45.254.124.0/22 +45.254.128.0/22 +45.254.132.0/22 +45.254.136.0/22 +45.254.140.0/22 +45.254.144.0/22 +45.254.148.0/22 +45.254.152.0/22 +45.254.156.0/22 +45.254.160.0/22 +45.254.164.0/22 +45.254.168.0/22 +45.254.172.0/22 +45.254.176.0/22 +45.254.180.0/22 +45.254.184.0/22 +45.254.188.0/22 +45.254.192.0/22 +45.254.196.0/22 +45.254.200.0/22 +45.254.204.0/22 +45.254.208.0/22 +45.254.212.0/22 +45.254.216.0/22 +45.254.220.0/22 +45.254.224.0/22 +45.254.228.0/22 +45.254.236.0/22 +45.254.240.0/22 +45.254.248.0/22 +45.255.0.0/22 +45.255.4.0/22 +45.255.8.0/22 +45.255.12.0/22 +45.255.16.0/22 +45.255.20.0/22 +45.255.24.0/22 +45.255.28.0/22 +45.255.32.0/22 +45.255.36.0/22 +45.255.40.0/22 +45.255.44.0/22 +45.255.48.0/22 +45.255.52.0/22 +45.255.56.0/22 +45.255.60.0/22 +45.255.64.0/22 +45.255.68.0/22 +45.255.72.0/22 +45.255.76.0/22 +45.255.80.0/22 +45.255.84.0/22 +45.255.88.0/22 +45.255.92.0/22 +45.255.96.0/22 +45.255.100.0/22 +45.255.104.0/22 +45.255.108.0/22 +45.255.112.0/22 +45.255.116.0/22 +45.255.120.0/22 +45.255.124.0/22 +45.255.132.0/22 +45.255.136.0/22 +45.255.140.0/22 +45.255.144.0/22 +45.255.148.0/22 +45.255.152.0/22 +45.255.156.0/22 +45.255.160.0/22 +45.255.164.0/22 +45.255.168.0/22 +45.255.172.0/22 +45.255.176.0/22 +45.255.180.0/22 +45.255.184.0/22 +45.255.188.0/22 +45.255.192.0/22 +45.255.196.0/22 +45.255.200.0/22 +45.255.204.0/22 +45.255.208.0/22 +45.255.212.0/22 +45.255.216.0/22 +45.255.220.0/22 +45.255.224.0/22 +45.255.228.0/22 +45.255.232.0/22 +45.255.236.0/22 +45.255.240.0/22 +45.255.244.0/22 +45.255.248.0/22 +47.92.0.0/14 +47.96.0.0/11 +49.4.0.0/14 +49.51.0.0/16 +49.52.0.0/14 +49.64.0.0/11 +49.112.0.0/13 +49.120.0.0/14 +49.128.0.0/24 +49.128.2.0/23 +49.128.4.0/22 +49.140.0.0/15 +49.152.0.0/14 +49.208.0.0/15 +49.210.0.0/15 +49.220.0.0/14 +49.232.0.0/14 +49.239.0.0/18 +49.239.192.0/18 +49.246.224.0/19 +52.80.0.0/15 +52.82.0.0/15 +52.130.0.0/15 +54.222.0.0/15 +57.176.0.0/15 +58.14.0.0/15 +58.16.0.0/16 +58.17.0.0/17 +58.17.128.0/17 +58.18.0.0/16 +58.19.0.0/16 +58.20.0.0/16 +58.21.0.0/16 +58.22.0.0/15 +58.24.0.0/15 +58.30.0.0/15 +58.32.0.0/13 +58.40.0.0/15 +58.42.0.0/16 +58.43.0.0/16 +58.44.0.0/14 +58.48.0.0/13 +58.56.0.0/15 +58.58.0.0/16 +58.59.0.0/17 +58.59.128.0/17 +58.60.0.0/14 +58.65.232.0/21 +58.66.0.0/15 +58.68.128.0/17 +58.82.0.0/17 +58.83.0.0/17 +58.83.128.0/17 +58.87.64.0/18 +58.99.128.0/17 +58.100.0.0/15 +58.116.0.0/14 +58.128.0.0/13 +58.144.0.0/16 +58.154.0.0/15 +58.192.0.0/15 +58.194.0.0/15 +58.196.0.0/15 +58.198.0.0/15 +58.200.0.0/13 +58.208.0.0/12 +58.240.0.0/15 +58.242.0.0/15 +58.244.0.0/15 +58.246.0.0/15 +58.248.0.0/13 +59.32.0.0/13 +59.40.0.0/15 +59.42.0.0/16 +59.43.0.0/16 +59.44.0.0/14 +59.48.0.0/16 +59.49.0.0/17 +59.49.128.0/17 +59.50.0.0/16 +59.51.0.0/17 +59.51.128.0/17 +59.52.0.0/14 +59.56.0.0/14 +59.60.0.0/15 +59.62.0.0/15 +59.64.0.0/14 +59.68.0.0/14 +59.72.0.0/15 +59.74.0.0/15 +59.76.0.0/16 +59.77.0.0/16 +59.78.0.0/15 +59.80.0.0/15 +59.82.0.0/15 +59.107.0.0/17 +59.107.128.0/17 +59.108.0.0/15 +59.110.0.0/15 +59.151.0.0/17 +59.152.16.0/22 +59.152.20.0/22 +59.152.24.0/22 +59.152.28.0/22 +59.152.32.0/22 +59.152.36.0/22 +59.152.64.0/22 +59.152.68.0/22 +59.152.72.0/22 +59.152.76.0/22 +59.152.112.0/22 +59.152.116.0/22 +59.153.4.0/22 +59.153.32.0/22 +59.153.60.0/22 +59.153.64.0/22 +59.153.68.0/22 +59.153.72.0/22 +59.153.92.0/22 +59.153.116.0/22 +59.153.136.0/22 +59.153.152.0/22 +59.153.164.0/22 +59.153.168.0/22 +59.153.172.0/22 +59.153.176.0/22 +59.153.180.0/22 +59.153.184.0/22 +59.153.188.0/22 +59.153.192.0/22 +59.155.0.0/16 +59.172.0.0/15 +59.174.0.0/15 +59.191.0.0/17 +59.192.0.0/10 +60.0.0.0/13 +60.8.0.0/15 +60.10.0.0/16 +60.11.0.0/16 +60.12.0.0/16 +60.13.0.0/18 +60.13.64.0/18 +60.13.128.0/17 +60.14.0.0/15 +60.16.0.0/13 +60.24.0.0/14 +60.28.0.0/15 +60.30.0.0/16 +60.31.0.0/16 +60.55.0.0/16 +60.63.0.0/16 +60.160.0.0/15 +60.162.0.0/15 +60.164.0.0/15 +60.166.0.0/15 +60.168.0.0/13 +60.176.0.0/12 +60.194.0.0/15 +60.200.0.0/14 +60.204.0.0/16 +60.205.0.0/16 +60.206.0.0/15 +60.208.0.0/13 +60.216.0.0/15 +60.218.0.0/15 +60.220.0.0/14 +60.232.0.0/15 +60.235.0.0/16 +60.245.128.0/17 +60.247.0.0/16 +60.252.0.0/16 +60.253.128.0/17 +60.255.0.0/16 +61.4.80.0/22 +61.4.84.0/22 +61.4.88.0/21 +61.4.176.0/20 +61.8.160.0/20 +61.14.212.0/22 +61.14.216.0/22 +61.14.220.0/22 +61.14.240.0/22 +61.14.244.0/22 +61.28.0.0/20 +61.28.16.0/20 +61.28.32.0/19 +61.28.64.0/18 +61.29.128.0/18 +61.29.192.0/19 +61.29.224.0/20 +61.29.240.0/22 +61.29.248.0/22 +61.45.128.0/18 +61.45.224.0/20 +61.47.128.0/18 +61.48.0.0/14 +61.52.0.0/15 +61.54.0.0/16 +61.55.0.0/16 +61.87.192.0/18 +61.128.0.0/15 +61.130.0.0/15 +61.132.0.0/16 +61.133.0.0/17 +61.133.128.0/17 +61.134.0.0/18 +61.134.64.0/19 +61.134.96.0/19 +61.134.128.0/18 +61.134.192.0/18 +61.135.0.0/16 +61.136.0.0/18 +61.136.64.0/18 +61.136.128.0/17 +61.137.0.0/17 +61.137.128.0/17 +61.138.0.0/18 +61.138.64.0/18 +61.138.128.0/18 +61.138.192.0/18 +61.139.0.0/17 +61.139.128.0/18 +61.139.192.0/18 +61.140.0.0/14 +61.144.0.0/14 +61.148.0.0/15 +61.150.0.0/15 +61.152.0.0/16 +61.153.0.0/16 +61.154.0.0/15 +61.156.0.0/16 +61.157.0.0/16 +61.158.0.0/17 +61.158.128.0/17 +61.159.0.0/18 +61.159.64.0/18 +61.159.128.0/17 +61.160.0.0/16 +61.161.0.0/18 +61.161.64.0/18 +61.161.128.0/17 +61.162.0.0/16 +61.163.0.0/16 +61.164.0.0/16 +61.165.0.0/16 +61.166.0.0/16 +61.167.0.0/16 +61.168.0.0/16 +61.169.0.0/16 +61.170.0.0/15 +61.172.0.0/14 +61.176.0.0/16 +61.177.0.0/16 +61.178.0.0/16 +61.179.0.0/16 +61.180.0.0/17 +61.180.128.0/17 +61.181.0.0/16 +61.182.0.0/16 +61.183.0.0/16 +61.184.0.0/14 +61.188.0.0/16 +61.189.0.0/17 +61.189.128.0/17 +61.190.0.0/15 +61.232.0.0/14 +61.236.0.0/15 +61.240.0.0/14 +62.234.0.0/16 +68.79.0.0/18 +69.230.192.0/18 +69.231.128.0/18 +69.234.192.0/18 +69.235.128.0/18 +71.131.192.0/18 +71.132.0.0/18 +71.136.64.0/18 +71.137.0.0/18 +81.68.0.0/14 +82.156.0.0/15 +94.191.0.0/17 +101.0.0.0/22 +101.1.0.0/22 +101.2.172.0/22 +101.4.0.0/14 +101.16.0.0/12 +101.33.128.0/17 +101.34.0.0/15 +101.36.0.0/18 +101.36.64.0/19 +101.36.128.0/17 +101.37.0.0/16 +101.38.0.0/15 +101.40.0.0/15 +101.42.0.0/15 +101.48.0.0/15 +101.50.8.0/22 +101.50.12.0/22 +101.50.56.0/22 +101.52.0.0/16 +101.53.100.0/22 +101.54.0.0/16 +101.55.224.0/21 +101.64.0.0/13 +101.72.0.0/14 +101.76.0.0/15 +101.78.0.0/22 +101.78.32.0/19 +101.80.0.0/12 +101.96.0.0/21 +101.96.8.0/22 +101.96.16.0/20 +101.96.128.0/17 +101.99.96.0/19 +101.101.64.0/19 +101.101.100.0/24 +101.101.102.0/23 +101.101.104.0/21 +101.101.112.0/20 +101.102.64.0/19 +101.102.100.0/23 +101.102.102.0/24 +101.102.104.0/21 +101.102.112.0/20 +101.104.0.0/14 +101.110.64.0/19 +101.110.96.0/20 +101.110.116.0/22 +101.110.120.0/21 +101.120.0.0/14 +101.124.0.0/15 +101.126.0.0/16 +101.128.0.0/22 +101.128.8.0/21 +101.128.16.0/20 +101.128.32.0/19 +101.129.0.0/16 +101.130.0.0/15 +101.132.0.0/14 +101.144.0.0/12 +101.192.0.0/14 +101.196.0.0/16 +101.197.0.0/16 +101.198.0.0/15 +101.200.0.0/15 +101.203.128.0/19 +101.203.160.0/21 +101.203.172.0/22 +101.203.176.0/20 +101.204.0.0/14 +101.224.0.0/13 +101.232.0.0/15 +101.234.64.0/21 +101.234.76.0/22 +101.234.80.0/20 +101.234.96.0/19 +101.236.0.0/14 +101.240.0.0/14 +101.244.0.0/16 +101.245.0.0/16 +101.246.0.0/15 +101.248.0.0/15 +101.251.0.0/22 +101.251.8.0/21 +101.251.16.0/20 +101.251.32.0/19 +101.251.64.0/18 +101.251.128.0/17 +101.252.0.0/15 +101.254.0.0/16 +103.1.8.0/22 +103.1.20.0/22 +103.1.24.0/22 +103.1.72.0/22 +103.1.88.0/22 +103.1.168.0/22 +103.2.108.0/22 +103.2.156.0/22 +103.2.164.0/22 +103.2.188.0/23 +103.2.200.0/22 +103.2.204.0/22 +103.2.208.0/22 +103.2.212.0/22 +103.3.84.0/22 +103.3.88.0/22 +103.3.92.0/22 +103.3.96.0/22 +103.3.100.0/22 +103.3.104.0/22 +103.3.108.0/22 +103.3.112.0/22 +103.3.116.0/22 +103.3.120.0/22 +103.3.124.0/22 +103.3.128.0/22 +103.3.132.0/22 +103.3.136.0/22 +103.3.140.0/22 +103.3.148.0/22 +103.3.152.0/22 +103.3.156.0/22 +103.4.56.0/22 +103.4.168.0/22 +103.4.184.0/22 +103.4.224.0/22 +103.5.36.0/22 +103.5.52.0/22 +103.5.56.0/22 +103.5.152.0/22 +103.5.168.0/22 +103.5.192.0/22 +103.5.252.0/22 +103.6.76.0/22 +103.6.108.0/22 +103.6.220.0/22 +103.6.228.0/22 +103.7.28.0/22 +103.7.140.0/22 +103.7.212.0/22 +103.7.216.0/22 +103.7.220.0/22 +103.8.0.0/22 +103.8.4.0/22 +103.8.8.0/22 +103.8.32.0/22 +103.8.52.0/22 +103.8.68.0/22 +103.8.108.0/22 +103.8.156.0/22 +103.8.200.0/22 +103.8.204.0/22 +103.8.220.0/22 +103.9.8.0/22 +103.9.24.0/22 +103.9.108.0/22 +103.9.152.0/22 +103.9.248.0/22 +103.9.252.0/22 +103.10.0.0/22 +103.10.16.0/22 +103.10.84.0/22 +103.10.140.0/22 +103.11.16.0/22 +103.11.168.0/22 +103.11.180.0/22 +103.12.32.0/22 +103.12.92.0/22 +103.12.98.0/23 +103.12.136.0/22 +103.12.184.0/22 +103.12.232.0/22 +103.13.12.0/22 +103.13.124.0/22 +103.13.144.0/22 +103.13.196.0/22 +103.13.244.0/22 +103.14.84.0/22 +103.14.100.0/22 +103.14.132.0/22 +103.14.136.0/22 +103.14.156.0/22 +103.14.240.0/22 +103.15.4.0/22 +103.15.8.0/22 +103.15.16.0/22 +103.15.96.0/22 +103.15.200.0/22 +103.16.52.0/22 +103.16.80.0/22 +103.16.84.0/22 +103.16.88.0/22 +103.16.108.0/22 +103.16.124.0/22 +103.17.40.0/22 +103.17.64.0/22 +103.17.120.0/22 +103.17.136.0/22 +103.17.160.0/22 +103.17.204.0/22 +103.17.228.0/22 +103.18.186.0/23 +103.18.192.0/22 +103.18.206.0/23 +103.18.208.0/22 +103.18.212.0/22 +103.18.224.0/22 +103.19.12.0/22 +103.19.40.0/22 +103.19.44.0/22 +103.19.50.0/23 +103.19.64.0/22 +103.19.68.0/22 +103.19.72.0/22 +103.19.232.0/22 +103.20.12.0/22 +103.20.32.0/22 +103.20.44.0/22 +103.20.68.0/22 +103.20.112.0/22 +103.20.128.0/22 +103.20.160.0/22 +103.20.248.0/22 +103.21.98.0/23 +103.21.102.0/23 +103.21.112.0/22 +103.21.116.0/22 +103.21.136.0/22 +103.21.140.0/22 +103.21.176.0/22 +103.21.208.0/22 +103.21.240.0/22 +103.22.0.0/22 +103.22.4.0/22 +103.22.8.0/22 +103.22.12.0/22 +103.22.16.0/22 +103.22.20.0/22 +103.22.24.0/22 +103.22.28.0/22 +103.22.32.0/22 +103.22.36.0/22 +103.22.40.0/22 +103.22.44.0/22 +103.22.48.0/22 +103.22.52.0/22 +103.22.56.0/22 +103.22.60.0/22 +103.22.64.0/22 +103.22.68.0/22 +103.22.72.0/22 +103.22.76.0/22 +103.22.80.0/22 +103.22.84.0/22 +103.22.88.0/22 +103.22.92.0/22 +103.22.100.0/22 +103.22.104.0/22 +103.22.108.0/22 +103.22.112.0/22 +103.22.116.0/22 +103.22.120.0/22 +103.22.124.0/22 +103.22.188.0/22 +103.22.228.0/22 +103.22.252.0/22 +103.23.8.0/22 +103.23.56.0/22 +103.23.160.0/22 +103.23.164.0/22 +103.23.176.0/22 +103.23.228.0/22 +103.24.24.0/22 +103.24.116.0/22 +103.24.128.0/22 +103.24.144.0/22 +103.24.176.0/22 +103.24.184.0/22 +103.24.220.0/22 +103.24.228.0/22 +103.24.252.0/22 +103.25.8.0/23 +103.25.20.0/22 +103.25.24.0/22 +103.25.28.0/22 +103.25.32.0/22 +103.25.36.0/22 +103.25.40.0/22 +103.25.48.0/22 +103.25.64.0/22 +103.25.68.0/22 +103.25.148.0/22 +103.25.156.0/22 +103.25.216.0/22 +103.26.0.0/22 +103.26.64.0/22 +103.26.76.0/22 +103.26.132.0/22 +103.26.156.0/22 +103.26.160.0/22 +103.26.228.0/22 +103.26.240.0/22 +103.27.4.0/22 +103.27.12.0/22 +103.27.24.0/22 +103.27.56.0/22 +103.27.96.0/22 +103.27.184.0/22 +103.27.212.0/22 +103.27.240.0/22 +103.28.4.0/22 +103.28.8.0/22 +103.28.184.0/22 +103.28.204.0/22 +103.28.212.0/22 +103.29.16.0/22 +103.29.24.0/23 +103.29.29.0/24 +103.29.128.0/22 +103.29.132.0/22 +103.29.136.0/22 +103.29.236.0/23 +103.30.20.0/22 +103.30.96.0/22 +103.30.104.0/23 +103.30.106.0/23 +103.30.148.0/22 +103.30.200.0/22 +103.30.228.0/22 +103.30.236.0/22 +103.31.0.0/22 +103.31.48.0/22 +103.31.52.0/22 +103.31.56.0/22 +103.31.60.0/22 +103.31.64.0/22 +103.31.68.0/22 +103.31.148.0/22 +103.31.160.0/22 +103.31.168.0/22 +103.31.200.0/22 +103.31.236.0/22 +103.31.242.0/23 +103.32.0.0/22 +103.32.4.0/22 +103.32.8.0/22 +103.32.12.0/22 +103.32.16.0/22 +103.32.20.0/22 +103.32.24.0/22 +103.32.28.0/22 +103.32.32.0/22 +103.32.36.0/22 +103.32.40.0/22 +103.32.44.0/22 +103.32.48.0/22 +103.32.52.0/22 +103.32.56.0/22 +103.32.60.0/22 +103.32.64.0/22 +103.32.68.0/22 +103.32.72.0/22 +103.32.76.0/22 +103.32.80.0/22 +103.32.84.0/22 +103.32.88.0/22 +103.32.92.0/22 +103.32.96.0/22 +103.32.100.0/22 +103.32.104.0/22 +103.32.108.0/22 +103.32.112.0/22 +103.32.116.0/22 +103.32.120.0/22 +103.32.124.0/22 +103.32.128.0/22 +103.32.132.0/22 +103.32.136.0/22 +103.32.140.0/22 +103.32.144.0/22 +103.32.148.0/22 +103.32.152.0/22 +103.32.156.0/22 +103.32.160.0/22 +103.32.164.0/22 +103.32.168.0/22 +103.32.172.0/22 +103.32.176.0/22 +103.32.180.0/22 +103.32.184.0/22 +103.32.188.0/22 +103.32.192.0/22 +103.32.196.0/22 +103.32.200.0/22 +103.32.204.0/22 +103.32.208.0/22 +103.32.212.0/22 +103.32.216.0/22 +103.32.220.0/22 +103.32.224.0/22 +103.32.228.0/22 +103.32.232.0/22 +103.32.236.0/22 +103.32.240.0/22 +103.32.244.0/22 +103.32.248.0/22 +103.32.252.0/22 +103.33.0.0/22 +103.33.4.0/22 +103.33.8.0/22 +103.33.12.0/22 +103.33.16.0/22 +103.33.20.0/22 +103.33.24.0/22 +103.33.28.0/22 +103.33.32.0/22 +103.33.36.0/22 +103.33.40.0/22 +103.33.44.0/22 +103.33.48.0/22 +103.33.52.0/22 +103.33.56.0/22 +103.33.60.0/22 +103.33.64.0/22 +103.33.68.0/22 +103.33.72.0/22 +103.33.76.0/22 +103.33.80.0/22 +103.33.84.0/22 +103.33.88.0/22 +103.33.92.0/22 +103.33.96.0/22 +103.33.100.0/22 +103.33.104.0/22 +103.33.108.0/22 +103.33.112.0/22 +103.33.116.0/22 +103.33.120.0/22 +103.33.124.0/22 +103.33.128.0/22 +103.33.132.0/22 +103.33.136.0/22 +103.33.140.0/22 +103.33.144.0/22 +103.33.148.0/22 +103.33.152.0/22 +103.33.156.0/22 +103.33.160.0/22 +103.33.164.0/22 +103.33.168.0/22 +103.33.172.0/22 +103.33.176.0/22 +103.33.180.0/22 +103.33.184.0/22 +103.33.188.0/22 +103.33.192.0/22 +103.33.196.0/22 +103.33.200.0/22 +103.33.204.0/22 +103.33.208.0/22 +103.33.212.0/22 +103.33.216.0/22 +103.33.220.0/22 +103.33.224.0/22 +103.33.228.0/22 +103.33.232.0/22 +103.33.236.0/22 +103.33.240.0/22 +103.33.244.0/22 +103.33.248.0/22 +103.33.252.0/22 +103.34.0.0/22 +103.34.4.0/22 +103.34.8.0/22 +103.34.12.0/22 +103.34.16.0/22 +103.34.20.0/22 +103.34.24.0/22 +103.34.28.0/22 +103.34.32.0/22 +103.34.36.0/22 +103.34.40.0/22 +103.34.44.0/22 +103.34.48.0/22 +103.34.52.0/22 +103.34.56.0/22 +103.34.60.0/22 +103.34.64.0/22 +103.34.68.0/22 +103.34.72.0/22 +103.34.76.0/22 +103.34.80.0/22 +103.34.84.0/22 +103.34.88.0/22 +103.34.92.0/22 +103.34.96.0/22 +103.34.100.0/22 +103.34.104.0/22 +103.34.108.0/22 +103.34.112.0/22 +103.34.116.0/22 +103.34.120.0/22 +103.34.124.0/22 +103.34.128.0/22 +103.34.132.0/22 +103.34.136.0/22 +103.34.140.0/22 +103.34.144.0/22 +103.34.148.0/22 +103.34.152.0/22 +103.34.156.0/22 +103.34.160.0/22 +103.34.164.0/22 +103.34.168.0/22 +103.34.172.0/22 +103.34.176.0/22 +103.34.180.0/22 +103.34.184.0/22 +103.34.188.0/22 +103.34.192.0/22 +103.34.196.0/22 +103.34.200.0/22 +103.34.204.0/22 +103.34.208.0/22 +103.34.212.0/22 +103.34.216.0/22 +103.34.220.0/22 +103.34.224.0/22 +103.34.228.0/22 +103.34.232.0/22 +103.34.236.0/22 +103.34.240.0/22 +103.34.244.0/22 +103.34.248.0/22 +103.34.252.0/22 +103.35.0.0/22 +103.35.4.0/22 +103.35.8.0/22 +103.35.12.0/22 +103.35.16.0/22 +103.35.20.0/22 +103.35.24.0/22 +103.35.28.0/22 +103.35.32.0/22 +103.35.36.0/22 +103.35.40.0/22 +103.35.44.0/22 +103.35.48.0/22 +103.35.104.0/22 +103.35.116.0/22 +103.35.180.0/22 +103.35.220.0/22 +103.36.28.0/22 +103.36.36.0/22 +103.36.56.0/22 +103.36.60.0/22 +103.36.64.0/22 +103.36.72.0/22 +103.36.96.0/22 +103.36.132.0/22 +103.36.136.0/22 +103.36.160.0/22 +103.36.164.0/22 +103.36.168.0/22 +103.36.172.0/22 +103.36.176.0/22 +103.36.180.0/22 +103.36.184.0/22 +103.36.188.0/22 +103.36.192.0/22 +103.36.196.0/22 +103.36.200.0/22 +103.36.204.0/22 +103.36.208.0/22 +103.36.212.0/22 +103.36.216.0/22 +103.36.220.0/22 +103.36.224.0/22 +103.36.228.0/22 +103.36.232.0/22 +103.36.236.0/22 +103.36.240.0/22 +103.36.244.0/22 +103.37.12.0/22 +103.37.16.0/22 +103.37.24.0/22 +103.37.44.0/22 +103.37.52.0/22 +103.37.56.0/22 +103.37.72.0/22 +103.37.100.0/22 +103.37.104.0/22 +103.37.136.0/22 +103.37.140.0/22 +103.37.144.0/22 +103.37.148.0/22 +103.37.152.0/22 +103.37.156.0/22 +103.37.160.0/22 +103.37.164.0/22 +103.37.172.0/22 +103.37.176.0/22 +103.37.188.0/22 +103.37.208.0/22 +103.37.212.0/22 +103.37.216.0/21 +103.37.252.0/22 +103.38.0.0/22 +103.38.32.0/22 +103.38.40.0/22 +103.38.44.0/22 +103.38.56.0/22 +103.38.76.0/22 +103.38.84.0/22 +103.38.92.0/22 +103.38.96.0/22 +103.38.116.0/22 +103.38.132.0/22 +103.38.140.0/22 +103.38.224.0/22 +103.38.228.0/22 +103.38.232.0/22 +103.39.64.0/22 +103.39.88.0/22 +103.39.100.0/22 +103.39.104.0/22 +103.39.160.0/22 +103.39.164.0/22 +103.39.168.0/22 +103.39.172.0/22 +103.39.176.0/22 +103.39.180.0/22 +103.39.184.0/22 +103.39.188.0/22 +103.39.200.0/22 +103.39.204.0/22 +103.39.208.0/22 +103.39.212.0/22 +103.39.216.0/22 +103.39.220.0/22 +103.39.224.0/22 +103.39.228.0/22 +103.39.232.0/22 +103.40.12.0/22 +103.40.16.0/22 +103.40.20.0/22 +103.40.24.0/22 +103.40.28.0/22 +103.40.32.0/22 +103.40.36.0/22 +103.40.40.0/22 +103.40.44.0/22 +103.40.88.0/22 +103.40.158.0/23 +103.40.174.0/23 +103.40.192.0/22 +103.40.212.0/22 +103.40.220.0/22 +103.40.228.0/22 +103.40.232.0/22 +103.40.236.0/22 +103.40.240.0/22 +103.40.244.0/22 +103.40.248.0/22 +103.40.252.0/22 +103.41.0.0/22 +103.41.16.0/22 +103.41.52.0/22 +103.41.116.0/22 +103.41.140.0/22 +103.41.148.0/22 +103.41.152.0/22 +103.41.160.0/22 +103.41.164.0/22 +103.41.220.0/22 +103.41.224.0/22 +103.41.228.0/22 +103.41.232.0/22 +103.42.8.0/22 +103.42.24.0/22 +103.42.28.0/22 +103.42.32.0/22 +103.42.64.0/22 +103.42.68.0/22 +103.42.76.0/22 +103.42.104.0/22 +103.42.180.0/22 +103.42.232.0/22 +103.43.16.0/22 +103.43.84.0/22 +103.43.96.0/22 +103.43.100.0/22 +103.43.104.0/22 +103.43.124.0/22 +103.43.132.0/22 +103.43.184.0/22 +103.43.192.0/22 +103.43.196.0/22 +103.43.208.0/22 +103.43.220.0/22 +103.43.224.0/22 +103.43.240.0/22 +103.44.56.0/22 +103.44.80.0/22 +103.44.120.0/22 +103.44.124.0/22 +103.44.132.0/22 +103.44.144.0/22 +103.44.168.0/22 +103.44.176.0/22 +103.44.180.0/22 +103.44.184.0/22 +103.44.188.0/22 +103.44.192.0/22 +103.44.196.0/22 +103.44.200.0/22 +103.44.204.0/22 +103.44.224.0/22 +103.44.236.0/22 +103.44.240.0/22 +103.44.244.0/22 +103.44.248.0/22 +103.44.252.0/22 +103.45.0.0/22 +103.45.4.0/22 +103.45.8.0/22 +103.45.12.0/22 +103.45.16.0/22 +103.45.20.0/22 +103.45.24.0/22 +103.45.28.0/22 +103.45.32.0/22 +103.45.36.0/22 +103.45.40.0/22 +103.45.44.0/22 +103.45.48.0/22 +103.45.52.0/22 +103.45.56.0/22 +103.45.60.0/22 +103.45.72.0/22 +103.45.76.0/22 +103.45.80.0/22 +103.45.84.0/22 +103.45.88.0/22 +103.45.92.0/22 +103.45.96.0/22 +103.45.100.0/22 +103.45.104.0/22 +103.45.108.0/22 +103.45.112.0/22 +103.45.116.0/22 +103.45.120.0/22 +103.45.124.0/22 +103.45.128.0/22 +103.45.132.0/22 +103.45.136.0/22 +103.45.140.0/22 +103.45.144.0/22 +103.45.148.0/22 +103.45.152.0/22 +103.45.156.0/22 +103.45.160.0/22 +103.45.164.0/22 +103.45.168.0/22 +103.45.172.0/22 +103.45.176.0/22 +103.45.180.0/22 +103.45.184.0/22 +103.45.188.0/22 +103.45.192.0/22 +103.45.196.0/22 +103.45.200.0/22 +103.45.204.0/22 +103.45.208.0/22 +103.45.212.0/22 +103.45.216.0/22 +103.45.220.0/22 +103.45.224.0/22 +103.45.248.0/22 +103.46.0.0/22 +103.46.12.0/22 +103.46.16.0/22 +103.46.20.0/22 +103.46.24.0/22 +103.46.28.0/22 +103.46.32.0/22 +103.46.36.0/22 +103.46.40.0/22 +103.46.44.0/22 +103.46.48.0/22 +103.46.52.0/22 +103.46.56.0/22 +103.46.60.0/22 +103.46.64.0/22 +103.46.68.0/22 +103.46.72.0/22 +103.46.76.0/22 +103.46.80.0/22 +103.46.84.0/22 +103.46.88.0/22 +103.46.92.0/22 +103.46.96.0/22 +103.46.100.0/22 +103.46.104.0/22 +103.46.108.0/22 +103.46.112.0/22 +103.46.116.0/22 +103.46.120.0/22 +103.46.124.0/22 +103.46.128.0/22 +103.46.132.0/22 +103.46.136.0/22 +103.46.152.0/22 +103.46.156.0/22 +103.46.160.0/22 +103.46.164.0/22 +103.46.168.0/22 +103.46.172.0/22 +103.46.176.0/22 +103.46.180.0/22 +103.46.244.0/22 +103.46.248.0/22 +103.47.4.0/22 +103.47.20.0/22 +103.47.36.0/22 +103.47.40.0/22 +103.47.48.0/22 +103.47.80.0/22 +103.47.96.0/22 +103.47.108.0/22 +103.47.116.0/22 +103.47.120.0/22 +103.47.136.0/22 +103.47.140.0/22 +103.47.212.0/22 +103.48.52.0/22 +103.48.92.0/22 +103.48.148.0/22 +103.48.152.0/22 +103.48.156.0/22 +103.48.202.0/23 +103.48.216.0/22 +103.48.220.0/22 +103.48.224.0/22 +103.48.228.0/22 +103.48.232.0/22 +103.48.236.0/22 +103.48.240.0/22 +103.48.244.0/22 +103.49.12.0/22 +103.49.20.0/22 +103.49.72.0/22 +103.49.76.0/22 +103.49.96.0/22 +103.49.108.0/22 +103.49.176.0/22 +103.49.180.0/22 +103.49.196.0/22 +103.50.36.0/22 +103.50.44.0/22 +103.50.48.0/22 +103.50.52.0/22 +103.50.56.0/22 +103.50.60.0/22 +103.50.64.0/22 +103.50.68.0/22 +103.50.72.0/22 +103.50.108.0/22 +103.50.112.0/22 +103.50.116.0/22 +103.50.120.0/22 +103.50.124.0/22 +103.50.132.0/22 +103.50.136.0/22 +103.50.140.0/22 +103.50.172.0/22 +103.50.176.0/22 +103.50.180.0/22 +103.50.184.0/22 +103.50.188.0/22 +103.50.192.0/22 +103.50.196.0/22 +103.50.200.0/22 +103.50.220.0/22 +103.50.224.0/22 +103.50.228.0/22 +103.50.232.0/22 +103.50.236.0/22 +103.50.240.0/22 +103.50.244.0/22 +103.50.248.0/22 +103.51.62.0/23 +103.52.40.0/22 +103.52.72.0/22 +103.52.76.0/22 +103.52.80.0/22 +103.52.84.0/22 +103.52.96.0/22 +103.52.100.0/22 +103.52.104.0/22 +103.52.160.0/22 +103.52.164.0/22 +103.52.172.0/22 +103.52.176.0/22 +103.52.184.0/22 +103.52.196.0/22 +103.53.64.0/22 +103.53.68.0/22 +103.53.92.0/22 +103.53.100.0/22 +103.53.124.0/22 +103.53.128.0/22 +103.53.132.0/22 +103.53.136.0/22 +103.53.140.0/22 +103.53.144.0/22 +103.53.180.0/22 +103.53.204.0/22 +103.53.208.0/22 +103.53.212.0/22 +103.53.236.0/22 +103.53.248.0/22 +103.54.8.0/22 +103.54.48.0/22 +103.54.160.0/22 +103.54.164.0/22 +103.54.212.0/22 +103.54.240.0/22 +103.55.80.0/22 +103.55.120.0/22 +103.55.152.0/22 +103.55.172.0/22 +103.55.204.0/22 +103.55.208.0/22 +103.55.228.0/22 +103.55.236.0/22 +103.56.8.0/22 +103.56.16.0/22 +103.56.20.0/22 +103.56.32.0/22 +103.56.56.0/22 +103.56.60.0/22 +103.56.72.0/22 +103.56.76.0/22 +103.56.94.0/23 +103.56.100.0/22 +103.56.104.0/22 +103.56.140.0/22 +103.56.152.0/22 +103.56.184.0/22 +103.56.200.0/22 +103.57.12.0/22 +103.57.52.0/22 +103.57.56.0/22 +103.57.76.0/22 +103.57.136.0/22 +103.57.196.0/22 +103.58.24.0/22 +103.59.76.0/22 +103.59.100.0/22 +103.59.112.0/22 +103.59.116.0/22 +103.59.120.0/22 +103.59.124.0/22 +103.59.128.0/22 +103.59.148.0/22 +103.59.164.0/22 +103.59.168.0/23 +103.60.32.0/22 +103.60.44.0/22 +103.60.164.0/22 +103.60.228.0/22 +103.60.236.0/22 +103.61.60.0/22 +103.61.104.0/22 +103.61.140.0/22 +103.61.152.0/22 +103.61.156.0/22 +103.61.160.0/22 +103.61.172.0/22 +103.61.176.0/22 +103.61.188.0/22 +103.62.24.0/22 +103.62.52.0/22 +103.62.72.0/22 +103.62.76.0/22 +103.62.80.0/22 +103.62.84.0/22 +103.62.88.0/22 +103.62.96.0/22 +103.62.100.0/22 +103.62.104.0/22 +103.62.108.0/22 +103.62.112.0/22 +103.62.116.0/22 +103.62.120.0/22 +103.62.124.0/22 +103.62.128.0/22 +103.62.132.0/22 +103.62.156.0/22 +103.62.160.0/22 +103.62.164.0/22 +103.62.168.0/22 +103.62.172.0/22 +103.62.176.0/22 +103.62.180.0/22 +103.62.184.0/22 +103.62.188.0/22 +103.62.192.0/22 +103.62.204.0/22 +103.62.208.0/22 +103.62.212.0/22 +103.62.216.0/22 +103.62.220.0/22 +103.62.224.0/22 +103.63.32.0/22 +103.63.36.0/22 +103.63.40.0/22 +103.63.44.0/22 +103.63.48.0/22 +103.63.52.0/22 +103.63.56.0/22 +103.63.60.0/22 +103.63.64.0/22 +103.63.68.0/22 +103.63.72.0/22 +103.63.76.0/22 +103.63.80.0/22 +103.63.84.0/22 +103.63.88.0/22 +103.63.140.0/22 +103.63.144.0/22 +103.63.152.0/22 +103.63.160.0/22 +103.63.164.0/22 +103.63.168.0/22 +103.63.172.0/22 +103.63.176.0/22 +103.63.180.0/22 +103.63.184.0/22 +103.63.192.0/22 +103.63.196.0/22 +103.63.200.0/22 +103.63.204.0/22 +103.63.208.0/22 +103.63.240.0/22 +103.63.244.0/22 +103.63.248.0/22 +103.63.252.0/22 +103.64.0.0/22 +103.64.4.0/22 +103.64.24.0/22 +103.64.28.0/22 +103.64.32.0/22 +103.64.36.0/22 +103.64.40.0/22 +103.64.44.0/22 +103.64.48.0/22 +103.64.52.0/22 +103.64.56.0/22 +103.64.60.0/22 +103.64.64.0/22 +103.64.68.0/22 +103.64.72.0/22 +103.64.76.0/22 +103.64.80.0/22 +103.64.84.0/22 +103.64.88.0/22 +103.64.92.0/22 +103.64.96.0/22 +103.64.100.0/22 +103.64.104.0/22 +103.64.108.0/22 +103.64.112.0/22 +103.64.116.0/22 +103.64.120.0/22 +103.64.124.0/22 +103.64.140.0/22 +103.64.144.0/22 +103.64.152.0/22 +103.64.156.0/22 +103.64.160.0/22 +103.64.164.0/22 +103.64.168.0/22 +103.64.172.0/22 +103.64.176.0/22 +103.64.180.0/22 +103.64.184.0/22 +103.64.188.0/22 +103.64.192.0/22 +103.64.196.0/22 +103.64.200.0/22 +103.64.204.0/22 +103.64.208.0/22 +103.64.212.0/22 +103.64.216.0/22 +103.64.220.0/22 +103.64.224.0/22 +103.64.228.0/22 +103.64.232.0/22 +103.64.236.0/22 +103.64.240.0/22 +103.64.244.0/22 +103.64.248.0/22 +103.64.252.0/22 +103.65.0.0/22 +103.65.4.0/22 +103.65.8.0/22 +103.65.12.0/22 +103.65.16.0/22 +103.65.36.0/22 +103.65.40.0/22 +103.65.48.0/22 +103.65.52.0/22 +103.65.56.0/22 +103.65.60.0/22 +103.65.64.0/22 +103.65.68.0/22 +103.65.72.0/22 +103.65.76.0/22 +103.65.80.0/22 +103.65.84.0/22 +103.65.88.0/22 +103.65.92.0/22 +103.65.100.0/22 +103.65.104.0/22 +103.65.108.0/22 +103.65.112.0/22 +103.65.144.0/22 +103.65.148.0/22 +103.65.152.0/22 +103.65.156.0/22 +103.65.160.0/22 +103.65.164.0/22 +103.65.168.0/22 +103.65.172.0/22 +103.65.204.0/23 +103.65.206.0/23 +103.65.224.0/23 +103.66.32.0/22 +103.66.40.0/22 +103.66.92.0/22 +103.66.108.0/22 +103.66.200.0/22 +103.66.216.0/22 +103.66.240.0/22 +103.66.244.0/22 +103.66.248.0/22 +103.66.252.0/22 +103.67.0.0/22 +103.67.4.0/22 +103.67.8.0/22 +103.67.52.0/23 +103.67.100.0/22 +103.67.104.0/22 +103.67.108.0/22 +103.67.112.0/22 +103.67.116.0/22 +103.67.120.0/22 +103.67.124.0/22 +103.67.128.0/22 +103.67.132.0/22 +103.67.136.0/22 +103.67.140.0/22 +103.67.144.0/22 +103.67.148.0/22 +103.67.172.0/22 +103.67.192.0/22 +103.67.212.0/22 +103.67.252.0/22 +103.68.64.0/22 +103.68.88.0/22 +103.68.100.0/22 +103.68.128.0/22 +103.68.192.0/22 +103.69.16.0/22 +103.69.62.0/23 +103.69.116.0/22 +103.70.8.0/22 +103.70.14.0/23 +103.70.148.0/22 +103.70.220.0/22 +103.70.224.0/22 +103.70.236.0/22 +103.70.252.0/22 +103.71.0.0/22 +103.71.48.0/22 +103.71.68.0/22 +103.71.72.0/22 +103.71.80.0/22 +103.71.84.0/22 +103.71.88.0/22 +103.71.120.0/22 +103.71.124.0/22 +103.71.128.0/22 +103.71.144.0/22 +103.71.196.0/22 +103.71.200.0/22 +103.71.232.0/22 +103.72.12.0/22 +103.72.16.0/22 +103.72.20.0/22 +103.72.24.0/22 +103.72.28.0/22 +103.72.32.0/22 +103.72.36.0/22 +103.72.40.0/22 +103.72.44.0/22 +103.72.48.0/22 +103.72.52.0/22 +103.72.112.0/22 +103.72.116.0/22 +103.72.120.0/22 +103.72.124.0/22 +103.72.128.0/22 +103.72.132.0/22 +103.72.148.0/22 +103.72.172.0/22 +103.72.180.0/22 +103.72.224.0/22 +103.72.228.0/22 +103.72.232.0/22 +103.72.236.0/22 +103.72.240.0/22 +103.72.244.0/22 +103.72.248.0/22 +103.72.252.0/22 +103.73.0.0/22 +103.73.4.0/22 +103.73.8.0/22 +103.73.12.0/22 +103.73.16.0/22 +103.73.20.0/22 +103.73.24.0/22 +103.73.28.0/22 +103.73.48.0/22 +103.73.116.0/22 +103.73.120.0/22 +103.73.128.0/22 +103.73.132.0/22 +103.73.136.0/22 +103.73.140.0/22 +103.73.144.0/22 +103.73.168.0/22 +103.73.176.0/22 +103.73.204.0/22 +103.73.208.0/22 +103.73.240.0/22 +103.73.244.0/22 +103.73.248.0/22 +103.74.24.0/22 +103.74.28.0/22 +103.74.32.0/22 +103.74.36.0/22 +103.74.40.0/22 +103.74.44.0/22 +103.74.48.0/22 +103.74.56.0/22 +103.74.60.0/22 +103.74.80.0/22 +103.74.124.0/22 +103.74.148.0/22 +103.74.152.0/22 +103.74.156.0/22 +103.74.204.0/22 +103.74.232.0/22 +103.75.82.0/23 +103.75.88.0/22 +103.75.92.0/22 +103.75.104.0/22 +103.75.108.0/22 +103.75.112.0/22 +103.75.120.0/22 +103.75.128.0/22 +103.75.144.0/22 +103.75.152.0/22 +103.75.236.0/24 +103.76.60.0/22 +103.76.64.0/22 +103.76.68.0/22 +103.76.72.0/22 +103.76.92.0/22 +103.76.216.0/22 +103.76.220.0/22 +103.76.224.0/22 +103.77.28.0/22 +103.77.52.0/22 +103.77.56.0/22 +103.77.72.0/22 +103.77.88.0/22 +103.77.92.0/22 +103.77.132.0/22 +103.77.148.0/22 +103.77.220.0/22 +103.78.56.0/22 +103.78.60.0/22 +103.78.64.0/22 +103.78.68.0/22 +103.78.124.0/22 +103.78.172.0/22 +103.78.176.0/22 +103.78.196.0/22 +103.78.228.0/22 +103.79.24.0/22 +103.79.28.0/22 +103.79.36.0/22 +103.79.40.0/22 +103.79.44.0/22 +103.79.56.0/22 +103.79.60.0/22 +103.79.64.0/22 +103.79.68.0/22 +103.79.80.0/22 +103.79.84.0/22 +103.79.136.0/22 +103.79.188.0/22 +103.79.192.0/22 +103.79.196.0/22 +103.79.200.0/22 +103.79.204.0/22 +103.79.208.0/22 +103.79.212.0/22 +103.79.228.0/23 +103.80.28.0/22 +103.80.44.0/22 +103.80.72.0/22 +103.80.176.0/22 +103.80.180.0/22 +103.80.184.0/22 +103.80.192.0/22 +103.80.200.0/22 +103.80.232.0/22 +103.81.4.0/22 +103.81.8.0/22 +103.81.16.0/22 +103.81.20.0/22 +103.81.44.0/22 +103.81.48.0/22 +103.81.96.0/22 +103.81.120.0/22 +103.81.148.0/22 +103.81.164.0/22 +103.81.168.0/22 +103.81.183.0/24 +103.81.184.0/22 +103.81.200.0/22 +103.81.232.0/22 +103.82.52.0/22 +103.82.60.0/22 +103.82.68.0/22 +103.82.84.0/22 +103.82.104.0/22 +103.82.224.0/22 +103.82.236.0/22 +103.83.44.0/22 +103.83.52.0/22 +103.83.60.0/22 +103.83.64.0/22 +103.83.72.0/22 +103.83.112.0/22 +103.83.120.0/22 +103.83.180.0/22 +103.84.0.0/22 +103.84.12.0/22 +103.84.16.0/22 +103.84.20.0/22 +103.84.24.0/22 +103.84.28.0/22 +103.84.48.0/22 +103.84.64.0/22 +103.84.72.0/22 +103.84.136.0/22 +103.84.170.0/23 +103.85.20.0/22 +103.85.24.0/22 +103.85.44.0/22 +103.85.48.0/22 +103.85.84.0/22 +103.85.136.0/22 +103.85.144.0/22 +103.85.164.0/22 +103.85.168.0/22 +103.85.172.0/22 +103.85.176.0/22 +103.85.186.0/23 +103.85.224.0/22 +103.86.28.0/22 +103.86.32.0/22 +103.86.60.0/22 +103.86.80.0/22 +103.86.84.0/22 +103.86.204.0/22 +103.86.208.0/22 +103.86.212.0/22 +103.86.216.0/22 +103.86.220.0/22 +103.86.224.0/22 +103.86.228.0/22 +103.86.232.0/22 +103.86.236.0/22 +103.86.240.0/22 +103.86.244.0/22 +103.86.248.0/22 +103.86.252.0/22 +103.87.0.0/22 +103.87.4.0/22 +103.87.20.0/22 +103.87.32.0/22 +103.87.96.0/22 +103.87.132.0/22 +103.87.180.0/22 +103.87.224.0/22 +103.88.4.0/22 +103.88.8.0/22 +103.88.12.0/22 +103.88.16.0/22 +103.88.20.0/22 +103.88.32.0/22 +103.88.36.0/22 +103.88.60.0/22 +103.88.64.0/22 +103.88.72.0/22 +103.88.96.0/22 +103.88.164.0/22 +103.88.212.0/22 +103.89.28.0/22 +103.89.96.0/22 +103.89.100.0/22 +103.89.104.0/22 +103.89.108.0/22 +103.89.112.0/22 +103.89.116.0/22 +103.89.148.0/22 +103.89.172.0/22 +103.89.184.0/22 +103.89.188.0/22 +103.89.192.0/22 +103.89.196.0/22 +103.89.200.0/22 +103.89.204.0/22 +103.89.208.0/22 +103.89.212.0/22 +103.89.216.0/22 +103.89.220.0/22 +103.89.224.0/22 +103.89.228.0/22 +103.90.51.0/24 +103.90.52.0/22 +103.90.56.0/23 +103.90.92.0/22 +103.90.100.0/22 +103.90.104.0/22 +103.90.108.0/22 +103.90.112.0/22 +103.90.116.0/22 +103.90.120.0/22 +103.90.124.0/22 +103.90.128.0/22 +103.90.132.0/22 +103.90.152.0/22 +103.90.168.0/22 +103.90.173.0/24 +103.90.176.0/22 +103.90.188.0/22 +103.90.192.0/22 +103.91.36.0/22 +103.91.40.0/22 +103.91.108.0/22 +103.91.112.0/23 +103.91.138.0/23 +103.91.152.0/22 +103.91.176.0/22 +103.91.200.0/22 +103.91.208.0/22 +103.91.212.0/22 +103.91.236.0/22 +103.91.252.0/22 +103.92.0.0/22 +103.92.4.0/22 +103.92.8.0/22 +103.92.12.0/22 +103.92.48.0/22 +103.92.52.0/22 +103.92.56.0/22 +103.92.60.0/22 +103.92.64.0/22 +103.92.68.0/22 +103.92.72.0/22 +103.92.76.0/22 +103.92.80.0/22 +103.92.86.0/24 +103.92.88.0/22 +103.92.108.0/22 +103.92.124.0/22 +103.92.132.0/22 +103.92.156.0/22 +103.92.164.0/22 +103.92.168.0/22 +103.92.172.0/22 +103.92.176.0/22 +103.92.180.0/22 +103.92.184.0/22 +103.92.188.0/22 +103.92.192.0/22 +103.92.236.0/22 +103.92.240.0/22 +103.92.244.0/22 +103.92.248.0/22 +103.92.252.0/22 +103.93.0.0/22 +103.93.4.0/22 +103.93.28.0/22 +103.93.84.0/22 +103.93.142.0/23 +103.93.152.0/22 +103.93.180.0/22 +103.93.204.0/22 +103.94.12.0/22 +103.94.20.0/22 +103.94.28.0/22 +103.94.32.0/22 +103.94.36.0/22 +103.94.40.0/22 +103.94.44.0/22 +103.94.72.0/22 +103.94.88.0/22 +103.94.116.0/22 +103.94.160.0/22 +103.94.200.0/22 +103.95.52.0/22 +103.95.68.0/22 +103.95.88.0/22 +103.95.92.0/22 +103.95.128.0/22 +103.95.136.0/22 +103.95.140.0/22 +103.95.144.0/22 +103.95.152.0/22 +103.95.216.0/22 +103.95.220.0/22 +103.95.224.0/22 +103.95.236.0/22 +103.95.240.0/22 +103.95.244.0/22 +103.95.248.0/22 +103.95.252.0/22 +103.96.0.0/22 +103.96.8.0/22 +103.96.124.0/22 +103.96.136.0/22 +103.96.140.0/24 +103.96.152.0/22 +103.96.156.0/22 +103.96.160.0/22 +103.96.164.0/22 +103.96.168.0/22 +103.96.172.0/22 +103.96.176.0/22 +103.96.180.0/22 +103.96.184.0/22 +103.96.188.0/22 +103.96.192.0/22 +103.96.196.0/22 +103.96.200.0/22 +103.96.204.0/22 +103.96.208.0/22 +103.96.212.0/22 +103.96.216.0/22 +103.96.224.0/23 +103.97.8.0/22 +103.97.12.0/22 +103.97.16.0/20 +103.97.32.0/22 +103.97.36.0/22 +103.97.40.0/22 +103.97.56.0/22 +103.97.60.0/22 +103.97.64.0/22 +103.97.68.0/22 +103.97.72.0/22 +103.97.80.0/22 +103.97.112.0/22 +103.97.116.0/22 +103.97.128.0/22 +103.97.144.0/22 +103.97.148.0/22 +103.97.188.0/22 +103.97.192.0/22 +103.97.228.0/23 +103.98.0.0/23 +103.98.28.0/23 +103.98.40.0/22 +103.98.44.0/22 +103.98.48.0/22 +103.98.56.0/22 +103.98.80.0/22 +103.98.88.0/22 +103.98.92.0/22 +103.98.96.0/22 +103.98.100.0/22 +103.98.124.0/22 +103.98.136.0/22 +103.98.140.0/22 +103.98.144.0/22 +103.98.164.0/22 +103.98.168.0/22 +103.98.180.0/22 +103.98.196.0/22 +103.98.216.0/22 +103.98.220.0/22 +103.98.224.0/22 +103.98.228.0/22 +103.98.232.0/22 +103.98.240.0/22 +103.98.244.0/22 +103.98.248.0/22 +103.98.252.0/22 +103.99.40.0/23 +103.99.52.0/22 +103.99.56.0/22 +103.99.60.0/22 +103.99.76.0/22 +103.99.104.0/22 +103.99.116.0/22 +103.99.120.0/22 +103.99.152.0/22 +103.99.220.0/22 +103.99.232.0/22 +103.99.236.0/22 +103.100.0.0/22 +103.100.32.0/22 +103.100.40.0/22 +103.100.48.0/22 +103.100.52.0/22 +103.100.56.0/22 +103.100.60.0/22 +103.100.64.0/22 +103.100.68.0/22 +103.100.88.0/22 +103.100.116.0/22 +103.100.144.0/22 +103.100.236.0/22 +103.100.240.0/22 +103.100.248.0/22 +103.100.252.0/22 +103.101.8.0/22 +103.101.12.0/22 +103.101.60.0/22 +103.101.120.0/22 +103.101.124.0/22 +103.101.144.0/22 +103.101.148.0/22 +103.101.180.0/22 +103.101.184.0/22 +103.102.76.0/22 +103.102.80.0/22 +103.102.168.0/22 +103.102.172.0/22 +103.102.180.0/22 +103.102.184.0/22 +103.102.188.0/22 +103.102.192.0/22 +103.102.196.0/22 +103.102.200.0/22 +103.102.208.0/22 +103.102.212.0/22 +103.103.12.0/22 +103.103.16.0/22 +103.103.36.0/22 +103.103.72.0/22 +103.103.188.0/22 +103.103.200.0/22 +103.103.204.0/22 +103.103.220.0/22 +103.103.224.0/21 +103.103.232.0/22 +103.103.248.0/21 +103.104.0.0/21 +103.104.36.0/22 +103.104.40.0/22 +103.104.64.0/22 +103.104.104.0/22 +103.104.152.0/22 +103.104.188.0/22 +103.104.198.0/23 +103.104.252.0/22 +103.105.0.0/22 +103.105.4.0/22 +103.105.12.0/22 +103.105.16.0/22 +103.105.23.0/24 +103.105.60.0/22 +103.105.116.0/22 +103.105.132.0/22 +103.105.180.0/22 +103.105.184.0/22 +103.105.200.0/22 +103.105.204.0/22 +103.105.220.0/22 +103.106.36.0/22 +103.106.40.0/22 +103.106.44.0/22 +103.106.60.0/22 +103.106.68.0/22 +103.106.96.0/22 +103.106.120.0/22 +103.106.128.0/22 +103.106.132.0/22 +103.106.160.0/22 +103.106.196.0/22 +103.106.202.0/23 +103.106.212.0/22 +103.106.252.0/22 +103.107.0.0/22 +103.107.28.0/22 +103.107.32.0/22 +103.107.44.0/22 +103.107.72.0/22 +103.107.108.0/22 +103.107.164.0/22 +103.107.168.0/22 +103.107.188.0/22 +103.107.192.0/22 +103.107.208.0/22 +103.107.212.0/22 +103.107.216.0/22 +103.107.220.0/22 +103.108.52.0/22 +103.108.160.0/22 +103.108.164.0/22 +103.108.192.0/22 +103.108.196.0/22 +103.108.208.0/22 +103.108.212.0/22 +103.108.224.0/22 +103.108.244.0/22 +103.109.20.0/22 +103.109.48.0/22 +103.109.88.0/22 +103.109.106.0/23 +103.109.248.0/22 +103.110.92.0/22 +103.110.116.0/22 +103.110.132.0/22 +103.110.136.0/22 +103.110.152.0/22 +103.110.156.0/22 +103.110.188.0/22 +103.110.204.0/22 +103.111.64.0/22 +103.111.172.0/22 +103.111.252.0/22 +103.112.28.0/22 +103.112.68.0/22 +103.112.72.0/22 +103.112.88.0/22 +103.112.92.0/22 +103.112.108.0/22 +103.112.112.0/22 +103.112.116.0/22 +103.112.140.0/22 +103.112.172.0/22 +103.112.184.0/22 +103.113.4.0/22 +103.113.92.0/22 +103.113.144.0/22 +103.113.220.0/22 +103.113.232.0/22 +103.113.236.0/22 +103.114.4.0/22 +103.114.28.0/22 +103.114.68.0/22 +103.114.72.0/22 +103.114.100.0/22 +103.114.132.0/22 +103.114.148.0/22 +103.114.156.0/22 +103.114.176.0/22 +103.114.212.0/22 +103.114.236.0/22 +103.114.240.0/22 +103.115.16.0/22 +103.115.40.0/22 +103.115.44.0/22 +103.115.48.0/22 +103.115.52.0/22 +103.115.56.0/22 +103.115.60.0/22 +103.115.64.0/22 +103.115.68.0/22 +103.115.92.0/22 +103.115.120.0/22 +103.115.148.0/22 +103.115.248.0/22 +103.116.40.0/22 +103.116.64.0/22 +103.116.72.0/22 +103.116.76.0/22 +103.116.92.0/22 +103.116.120.0/22 +103.116.128.0/22 +103.116.138.0/23 +103.116.148.0/22 +103.116.184.0/22 +103.116.206.0/23 +103.116.220.0/22 +103.116.224.0/22 +103.116.228.0/22 +103.117.16.0/22 +103.117.72.0/22 +103.117.88.0/22 +103.117.136.0/22 +103.117.188.0/22 +103.117.220.0/22 +103.118.52.0/22 +103.118.56.0/22 +103.118.60.0/22 +103.118.64.0/22 +103.118.68.0/22 +103.118.72.0/22 +103.118.88.0/22 +103.118.173.0/24 +103.118.192.0/22 +103.118.196.0/22 +103.118.200.0/22 +103.118.204.0/22 +103.118.208.0/22 +103.118.212.0/22 +103.118.216.0/22 +103.118.220.0/22 +103.118.240.0/22 +103.118.244.0/22 +103.118.248.0/22 +103.118.252.0/22 +103.119.0.0/22 +103.119.12.0/22 +103.119.16.0/22 +103.119.28.0/22 +103.119.104.0/22 +103.119.115.0/24 +103.119.156.0/22 +103.119.180.0/22 +103.119.200.0/22 +103.119.224.0/22 +103.120.52.0/22 +103.120.72.0/22 +103.120.88.0/22 +103.120.96.0/22 +103.120.100.0/22 +103.120.140.0/22 +103.120.196.0/22 +103.120.224.0/22 +103.121.52.0/22 +103.121.92.0/22 +103.121.160.0/22 +103.121.164.0/22 +103.121.250.0/24 +103.121.252.0/22 +103.122.48.0/22 +103.122.176.0/22 +103.122.192.0/22 +103.122.240.0/22 +103.123.4.0/22 +103.123.56.0/22 +103.123.88.0/22 +103.123.92.0/22 +103.123.116.0/22 +103.123.176.0/22 +103.123.200.0/22 +103.123.204.0/22 +103.123.208.0/22 +103.123.212.0/22 +103.124.24.0/22 +103.124.48.0/22 +103.124.64.0/22 +103.124.212.0/22 +103.124.216.0/22 +103.125.20.0/22 +103.125.44.0/22 +103.125.132.0/22 +103.125.164.0/22 +103.125.196.0/22 +103.125.236.0/22 +103.125.248.0/22 +103.126.0.0/22 +103.126.16.0/22 +103.126.44.0/22 +103.126.100.0/22 +103.126.124.0/22 +103.126.128.0/22 +103.126.132.0/22 +103.126.208.0/22 +103.130.132.0/22 +103.130.160.0/22 +103.130.228.0/22 +103.131.20.0/22 +103.131.36.0/22 +103.131.138.0/23 +103.131.152.0/22 +103.131.168.0/22 +103.131.176.0/22 +103.131.224.0/22 +103.131.228.0/22 +103.131.240.0/22 +103.132.22.0/23 +103.132.60.0/22 +103.132.64.0/20 +103.132.80.0/22 +103.132.104.0/21 +103.132.112.0/21 +103.132.120.0/22 +103.132.160.0/22 +103.132.164.0/22 +103.132.188.0/22 +103.132.208.0/22 +103.132.212.0/22 +103.132.234.0/23 +103.133.12.0/22 +103.133.40.0/22 +103.133.128.0/22 +103.133.136.0/22 +103.133.176.0/22 +103.133.232.0/22 +103.134.196.0/22 +103.134.232.0/23 +103.135.80.0/22 +103.135.124.0/22 +103.135.148.0/22 +103.135.156.0/22 +103.135.160.0/22 +103.135.164.0/22 +103.135.176.0/22 +103.135.184.0/22 +103.135.192.0/22 +103.135.196.0/22 +103.135.236.0/22 +103.136.128.0/22 +103.136.232.0/22 +103.137.58.0/23 +103.137.60.0/24 +103.137.76.0/22 +103.137.136.0/23 +103.137.180.0/22 +103.137.236.0/22 +103.138.2.0/23 +103.138.12.0/23 +103.138.80.0/22 +103.138.134.0/23 +103.138.156.0/23 +103.138.208.0/23 +103.138.220.0/23 +103.138.248.0/23 +103.139.0.0/23 +103.139.2.0/23 +103.139.22.0/23 +103.139.92.0/23 +103.139.113.0/24 +103.139.134.0/23 +103.139.136.0/23 +103.139.172.0/23 +103.139.204.0/23 +103.139.212.0/23 +103.140.8.0/23 +103.140.14.0/23 +103.140.126.0/23 +103.140.140.0/23 +103.140.144.0/23 +103.140.152.0/23 +103.140.192.0/23 +103.140.228.0/23 +103.141.10.0/23 +103.141.58.0/23 +103.141.128.0/23 +103.141.186.0/23 +103.141.242.0/23 +103.142.28.0/23 +103.142.58.0/23 +103.142.82.0/23 +103.142.96.0/23 +103.142.102.0/23 +103.142.122.0/23 +103.142.128.0/23 +103.142.140.0/23 +103.142.154.0/23 +103.142.156.0/23 +103.142.172.0/23 +103.142.180.0/23 +103.142.186.0/23 +103.142.190.0/23 +103.142.220.0/23 +103.142.230.0/24 +103.142.234.0/23 +103.142.238.0/23 +103.142.248.0/23 +103.143.16.0/23 +103.143.18.0/23 +103.143.74.0/23 +103.143.120.0/23 +103.143.124.0/23 +103.143.132.0/23 +103.143.134.0/23 +103.143.174.0/23 +103.143.228.0/23 +103.144.40.0/23 +103.144.52.0/23 +103.144.66.0/23 +103.144.70.0/23 +103.144.72.0/23 +103.144.136.0/23 +103.144.148.0/23 +103.144.158.0/23 +103.144.240.0/23 +103.145.38.0/23 +103.145.42.0/23 +103.145.60.0/23 +103.145.72.0/23 +103.145.86.0/23 +103.145.92.0/23 +103.145.94.0/23 +103.145.98.0/23 +103.145.106.0/23 +103.145.188.0/23 +103.145.190.0/23 +103.146.72.0/23 +103.146.90.0/23 +103.146.124.0/23 +103.146.126.0/23 +103.146.138.0/23 +103.146.230.0/23 +103.146.236.0/23 +103.146.252.0/23 +103.147.12.0/23 +103.147.124.0/23 +103.147.198.0/23 +103.147.206.0/23 +103.148.174.0/23 +103.149.6.0/23 +103.149.17.0/24 +103.149.44.0/23 +103.149.110.0/23 +103.149.132.0/23 +103.149.144.0/23 +103.149.156.0/23 +103.149.181.0/24 +103.149.210.0/23 +103.149.214.0/23 +103.149.220.0/23 +103.149.242.0/23 +103.149.244.0/23 +103.149.246.0/23 +103.149.248.0/23 +103.150.10.0/23 +103.150.24.0/23 +103.150.66.0/23 +103.150.72.0/23 +103.150.122.0/23 +103.150.126.0/23 +103.150.128.0/23 +103.150.130.0/23 +103.150.146.0/23 +103.150.164.0/23 +103.150.172.0/23 +103.150.180.0/23 +103.150.200.0/23 +103.150.210.0/23 +103.150.214.0/23 +103.150.216.0/23 +103.150.244.0/23 +103.151.4.0/23 +103.151.44.0/23 +103.151.138.0/23 +103.151.142.0/23 +103.151.148.0/23 +103.151.150.0/23 +103.151.158.0/23 +103.151.206.0/23 +103.151.216.0/23 +103.151.228.0/23 +103.152.14.0/23 +103.152.24.0/23 +103.152.28.0/23 +103.152.30.0/23 +103.152.56.0/23 +103.152.76.0/23 +103.152.98.0/23 +103.152.112.0/23 +103.152.120.0/23 +103.152.122.0/23 +103.152.152.0/23 +103.152.168.0/23 +103.152.170.0/23 +103.152.186.0/23 +103.152.190.0/23 +103.152.192.0/23 +103.152.200.0/23 +103.152.208.0/23 +103.152.224.0/23 +103.152.226.0/23 +103.152.246.0/23 +103.152.250.0/23 +103.153.4.0/23 +103.153.36.0/23 +103.153.100.0/23 +103.153.114.0/23 +103.153.122.0/23 +103.153.128.0/23 +103.153.132.0/23 +103.153.138.0/23 +103.153.146.0/23 +103.153.160.0/23 +103.154.18.0/23 +103.154.30.0/23 +103.154.32.0/23 +103.154.40.0/23 +103.154.66.0/23 +103.154.162.0/23 +103.154.164.0/23 +103.154.168.0/23 +103.154.242.0/23 +103.155.14.0/23 +103.155.16.0/23 +103.155.34.0/23 +103.155.48.0/23 +103.155.76.0/23 +103.155.100.0/23 +103.155.110.0/23 +103.155.120.0/23 +103.155.214.0/23 +103.155.248.0/23 +103.156.28.0/23 +103.156.68.0/23 +103.156.78.0/23 +103.156.104.0/23 +103.156.158.0/23 +103.156.174.0/23 +103.156.186.0/23 +103.156.228.0/23 +103.157.30.0/23 +103.157.138.0/23 +103.157.174.0/23 +103.157.212.0/23 +103.157.234.0/23 +103.157.254.0/23 +103.158.0.0/23 +103.158.8.0/23 +103.158.16.0/23 +103.158.74.0/23 +103.158.190.0/23 +103.158.200.0/23 +103.158.224.0/23 +103.159.80.0/23 +103.159.122.0/23 +103.159.124.0/23 +103.159.134.0/23 +103.159.142.0/23 +103.160.32.0/23 +103.160.34.0/23 +103.160.112.0/23 +103.160.114.0/23 +103.160.244.0/23 +103.160.254.0/23 +103.161.14.0/23 +103.161.102.0/23 +103.161.138.0/23 +103.161.208.0/23 +103.161.220.0/23 +103.161.254.0/23 +103.162.10.0/23 +103.162.32.0/23 +103.162.116.0/23 +103.163.28.0/23 +103.163.32.0/23 +103.163.46.0/23 +103.163.74.0/23 +103.163.180.0/23 +103.164.4.0/23 +103.164.32.0/23 +103.164.40.0/23 +103.164.42.0/23 +103.164.64.0/23 +103.164.76.0/23 +103.164.178.0/23 +103.165.44.0/23 +103.165.52.0/23 +103.165.82.0/23 +103.165.110.0/23 +103.166.20.0/23 +103.166.50.0/23 +103.166.52.0/23 +103.166.54.0/23 +103.166.84.0/23 +103.166.138.0/23 +103.167.0.0/23 +103.167.36.0/23 +103.167.100.0/23 +103.168.98.0/23 +103.168.170.0/23 +103.169.50.0/23 +103.169.62.0/23 +103.169.108.0/23 +103.169.162.0/23 +103.169.202.0/23 +103.169.216.0/23 +103.170.4.0/23 +103.170.72.0/23 +103.170.134.0/23 +103.170.210.0/23 +103.170.212.0/23 +103.171.32.0/23 +103.171.166.0/23 +103.171.214.0/23 +103.172.32.0/23 +103.172.160.0/23 +103.172.191.0/24 +103.173.102.0/23 +103.173.182.0/23 +103.173.184.0/23 +103.174.94.0/23 +103.175.14.0/23 +103.175.98.0/23 +103.175.114.0/23 +103.175.118.0/23 +103.176.52.0/23 +103.176.222.0/23 +103.176.244.0/23 +103.177.28.0/23 +103.177.44.0/23 +103.177.70.0/23 +103.177.136.0/23 +103.177.162.0/23 +103.178.56.0/23 +103.178.240.0/23 +103.179.76.0/23 +103.179.78.0/23 +103.180.108.0/23 +103.180.226.0/23 +103.181.164.0/23 +103.181.234.0/23 +103.183.26.0/23 +103.183.66.0/23 +103.183.122.0/23 +103.183.124.0/23 +103.184.46.0/23 +103.184.60.0/23 +103.185.78.0/23 +103.185.80.0/23 +103.185.228.0/23 +103.186.4.0/23 +103.186.108.0/23 +103.186.112.0/23 +103.186.136.0/23 +103.186.158.0/23 +103.186.162.0/23 +103.186.228.0/23 +103.189.92.0/23 +103.189.140.0/23 +103.189.152.0/23 +103.189.154.0/23 +103.190.20.0/23 +103.190.71.0/24 +103.190.104.0/23 +103.190.116.0/23 +103.190.118.0/23 +103.190.122.0/23 +103.191.102.0/23 +103.191.242.0/23 +103.192.0.0/22 +103.192.4.0/22 +103.192.8.0/22 +103.192.12.0/22 +103.192.16.0/22 +103.192.20.0/22 +103.192.24.0/22 +103.192.28.0/22 +103.192.48.0/22 +103.192.52.0/22 +103.192.56.0/22 +103.192.84.0/22 +103.192.88.0/22 +103.192.92.0/22 +103.192.96.0/22 +103.192.100.0/22 +103.192.104.0/22 +103.192.108.0/22 +103.192.112.0/22 +103.192.128.0/22 +103.192.132.0/22 +103.192.136.0/22 +103.192.140.0/22 +103.192.144.0/22 +103.192.164.0/22 +103.192.188.0/22 +103.192.208.0/22 +103.192.212.0/22 +103.192.216.0/22 +103.192.252.0/22 +103.193.40.0/22 +103.193.44.0/22 +103.193.120.0/22 +103.193.140.0/22 +103.193.160.0/22 +103.193.188.0/22 +103.193.192.0/22 +103.193.212.0/22 +103.193.216.0/22 +103.193.220.0/22 +103.193.224.0/22 +103.193.228.0/22 +103.193.232.0/22 +103.193.236.0/22 +103.194.16.0/22 +103.195.104.0/22 +103.195.112.0/22 +103.195.148.0/22 +103.195.152.0/22 +103.195.160.0/22 +103.196.64.0/22 +103.196.72.0/22 +103.196.88.0/22 +103.196.92.0/22 +103.196.96.0/22 +103.196.168.0/22 +103.196.204.0/22 +103.197.0.0/22 +103.197.180.0/22 +103.197.228.0/22 +103.198.20.0/22 +103.198.60.0/22 +103.198.64.0/22 +103.198.72.0/22 +103.198.124.0/22 +103.198.156.0/22 +103.198.180.0/22 +103.198.196.0/22 +103.198.216.0/22 +103.198.220.0/22 +103.198.224.0/22 +103.198.228.0/22 +103.198.232.0/22 +103.198.236.0/22 +103.198.240.0/22 +103.198.244.0/22 +103.199.164.0/22 +103.199.196.0/22 +103.199.228.0/22 +103.199.248.0/22 +103.199.252.0/22 +103.200.52.0/22 +103.200.64.0/22 +103.200.68.0/22 +103.200.136.0/22 +103.200.140.0/22 +103.200.144.0/22 +103.200.148.0/22 +103.200.152.0/22 +103.200.156.0/22 +103.200.160.0/22 +103.200.164.0/22 +103.200.168.0/22 +103.200.172.0/22 +103.200.176.0/22 +103.200.180.0/22 +103.200.184.0/22 +103.200.188.0/22 +103.200.192.0/22 +103.200.220.0/22 +103.200.224.0/22 +103.200.228.0/22 +103.200.232.0/22 +103.200.236.0/22 +103.200.240.0/22 +103.200.244.0/22 +103.200.248.0/22 +103.200.252.0/22 +103.201.0.0/22 +103.201.4.0/22 +103.201.8.0/22 +103.201.12.0/22 +103.201.16.0/22 +103.201.20.0/22 +103.201.28.0/22 +103.201.32.0/22 +103.201.36.0/22 +103.201.40.0/22 +103.201.44.0/22 +103.201.48.0/22 +103.201.52.0/22 +103.201.56.0/22 +103.201.60.0/22 +103.201.64.0/22 +103.201.76.0/22 +103.201.80.0/22 +103.201.84.0/22 +103.201.88.0/22 +103.201.92.0/22 +103.201.96.0/22 +103.201.100.0/22 +103.201.104.0/22 +103.201.108.0/22 +103.201.112.0/22 +103.201.116.0/22 +103.201.120.0/22 +103.201.152.0/22 +103.201.156.0/22 +103.201.160.0/22 +103.201.164.0/22 +103.201.168.0/22 +103.201.172.0/22 +103.201.176.0/22 +103.201.180.0/22 +103.201.184.0/22 +103.201.188.0/22 +103.201.192.0/22 +103.201.196.0/22 +103.201.200.0/22 +103.201.204.0/22 +103.201.208.0/22 +103.201.212.0/22 +103.201.216.0/22 +103.201.220.0/22 +103.201.224.0/22 +103.201.228.0/22 +103.201.232.0/22 +103.201.236.0/22 +103.201.240.0/22 +103.201.244.0/22 +103.201.248.0/22 +103.201.252.0/22 +103.202.0.0/22 +103.202.4.0/22 +103.202.8.0/22 +103.202.12.0/22 +103.202.16.0/22 +103.202.20.0/22 +103.202.24.0/22 +103.202.28.0/22 +103.202.32.0/22 +103.202.36.0/22 +103.202.40.0/22 +103.202.44.0/22 +103.202.56.0/22 +103.202.60.0/22 +103.202.64.0/22 +103.202.68.0/22 +103.202.72.0/22 +103.202.76.0/22 +103.202.80.0/22 +103.202.84.0/22 +103.202.88.0/22 +103.202.92.0/22 +103.202.96.0/22 +103.202.100.0/22 +103.202.104.0/22 +103.202.108.0/22 +103.202.112.0/22 +103.202.116.0/22 +103.202.120.0/22 +103.202.124.0/22 +103.202.128.0/22 +103.202.132.0/22 +103.202.136.0/22 +103.202.140.0/22 +103.202.144.0/22 +103.202.152.0/22 +103.202.156.0/22 +103.202.160.0/22 +103.202.164.0/22 +103.202.168.0/22 +103.202.172.0/22 +103.202.176.0/22 +103.202.180.0/22 +103.202.184.0/22 +103.202.188.0/22 +103.202.192.0/22 +103.202.196.0/22 +103.202.200.0/21 +103.202.212.0/22 +103.202.228.0/22 +103.202.236.0/22 +103.202.240.0/22 +103.202.244.0/22 +103.202.248.0/22 +103.202.252.0/22 +103.203.0.0/22 +103.203.4.0/22 +103.203.8.0/22 +103.203.12.0/22 +103.203.16.0/22 +103.203.20.0/22 +103.203.24.0/22 +103.203.28.0/22 +103.203.32.0/22 +103.203.56.0/22 +103.203.96.0/22 +103.203.100.0/22 +103.203.104.0/22 +103.203.108.0/22 +103.203.112.0/22 +103.203.116.0/22 +103.203.120.0/22 +103.203.124.0/22 +103.203.128.0/22 +103.203.140.0/22 +103.203.164.0/22 +103.203.168.0/22 +103.203.192.0/22 +103.203.200.0/22 +103.203.212.0/22 +103.203.216.0/22 +103.204.24.0/22 +103.204.72.0/22 +103.204.88.0/22 +103.204.112.0/22 +103.204.136.0/22 +103.204.140.0/22 +103.204.144.0/22 +103.204.148.0/22 +103.204.152.0/22 +103.204.196.0/22 +103.204.216.0/23 +103.204.232.0/22 +103.204.236.0/22 +103.205.4.0/22 +103.205.8.0/22 +103.205.40.0/22 +103.205.44.0/22 +103.205.52.0/22 +103.205.108.0/22 +103.205.116.0/22 +103.205.120.0/22 +103.205.136.0/22 +103.205.162.0/24 +103.205.188.0/22 +103.205.192.0/22 +103.205.196.0/22 +103.205.200.0/22 +103.205.236.0/22 +103.205.248.0/22 +103.205.252.0/22 +103.206.0.0/22 +103.206.44.0/22 +103.206.148.0/22 +103.207.48.0/22 +103.207.104.0/22 +103.207.184.0/22 +103.207.188.0/22 +103.207.192.0/22 +103.207.196.0/22 +103.207.200.0/22 +103.207.204.0/22 +103.207.208.0/22 +103.207.212.0/22 +103.207.220.0/22 +103.207.228.0/22 +103.207.232.0/22 +103.208.12.0/22 +103.208.16.0/22 +103.208.28.0/22 +103.208.40.0/22 +103.208.44.0/22 +103.208.48.0/22 +103.209.112.0/22 +103.209.136.0/22 +103.209.200.0/22 +103.209.208.0/22 +103.209.216.0/22 +103.210.96.0/22 +103.210.156.0/22 +103.210.160.0/22 +103.210.164.0/22 +103.210.168.0/22 +103.210.172.0/22 +103.210.176.0/22 +103.210.180.0/22 +103.210.184.0/22 +103.210.188.0/22 +103.210.216.0/22 +103.211.44.0/22 +103.211.96.0/22 +103.211.156.0/22 +103.211.164.0/22 +103.211.194.0/23 +103.211.220.0/22 +103.211.224.0/22 +103.211.248.0/22 +103.212.0.0/22 +103.212.4.0/22 +103.212.8.0/22 +103.212.12.0/22 +103.212.44.0/22 +103.212.48.0/22 +103.212.84.0/22 +103.212.100.0/22 +103.212.108.0/22 +103.212.148.0/22 +103.212.164.0/22 +103.212.196.0/22 +103.212.200.0/22 +103.212.228.0/22 +103.212.252.0/22 +103.213.40.0/22 +103.213.44.0/22 +103.213.48.0/22 +103.213.52.0/22 +103.213.56.0/22 +103.213.60.0/22 +103.213.64.0/19 +103.213.96.0/22 +103.213.132.0/22 +103.213.136.0/22 +103.213.140.0/22 +103.213.144.0/22 +103.213.148.0/22 +103.213.152.0/22 +103.213.156.0/22 +103.213.160.0/19 +103.213.196.0/23 +103.213.198.0/23 +103.213.226.0/23 +103.213.232.0/23 +103.214.48.0/22 +103.214.84.0/22 +103.214.212.0/22 +103.214.240.0/22 +103.214.244.0/22 +103.215.28.0/22 +103.215.32.0/22 +103.215.36.0/22 +103.215.44.0/22 +103.215.48.0/22 +103.215.100.0/22 +103.215.108.0/22 +103.215.116.0/22 +103.215.120.0/22 +103.215.140.0/22 +103.216.4.0/22 +103.216.8.0/22 +103.216.12.0/22 +103.216.16.0/22 +103.216.20.0/22 +103.216.24.0/22 +103.216.28.0/22 +103.216.32.0/22 +103.216.36.0/22 +103.216.40.0/22 +103.216.44.0/22 +103.216.64.0/22 +103.216.108.0/22 +103.216.136.0/22 +103.216.152.0/22 +103.216.156.0/23 +103.216.224.0/22 +103.216.228.0/22 +103.216.240.0/22 +103.216.244.0/22 +103.216.248.0/22 +103.216.252.0/22 +103.217.0.0/22 +103.217.4.0/22 +103.217.8.0/22 +103.217.12.0/22 +103.217.16.0/22 +103.217.20.0/22 +103.217.24.0/22 +103.217.28.0/22 +103.217.32.0/22 +103.217.36.0/22 +103.217.40.0/22 +103.217.44.0/22 +103.217.48.0/22 +103.217.52.0/22 +103.217.56.0/22 +103.217.60.0/22 +103.217.168.0/22 +103.217.180.0/22 +103.217.184.0/22 +103.217.188.0/22 +103.217.192.0/22 +103.217.196.0/22 +103.217.200.0/22 +103.217.204.0/22 +103.218.8.0/22 +103.218.12.0/22 +103.218.16.0/22 +103.218.20.0/22 +103.218.28.0/22 +103.218.32.0/22 +103.218.36.0/22 +103.218.40.0/22 +103.218.44.0/22 +103.218.48.0/22 +103.218.52.0/22 +103.218.56.0/22 +103.218.60.0/22 +103.218.64.0/22 +103.218.68.0/22 +103.218.72.0/22 +103.218.76.0/22 +103.218.80.0/22 +103.218.84.0/22 +103.218.88.0/22 +103.218.92.0/22 +103.218.178.0/23 +103.218.192.0/22 +103.218.196.0/22 +103.218.200.0/22 +103.218.204.0/22 +103.218.208.0/22 +103.218.212.0/22 +103.218.216.0/22 +103.219.24.0/22 +103.219.28.0/22 +103.219.32.0/22 +103.219.36.0/22 +103.219.64.0/22 +103.219.84.0/22 +103.219.88.0/22 +103.219.92.0/22 +103.219.96.0/22 +103.219.100.0/22 +103.219.176.0/22 +103.219.184.0/22 +103.220.48.0/22 +103.220.52.0/22 +103.220.56.0/22 +103.220.60.0/22 +103.220.64.0/22 +103.220.92.0/22 +103.220.96.0/22 +103.220.100.0/22 +103.220.104.0/22 +103.220.108.0/22 +103.220.116.0/22 +103.220.120.0/22 +103.220.124.0/22 +103.220.128.0/22 +103.220.132.0/22 +103.220.136.0/22 +103.220.140.0/22 +103.220.144.0/22 +103.220.148.0/22 +103.220.152.0/22 +103.220.160.0/22 +103.220.164.0/22 +103.220.168.0/22 +103.220.172.0/22 +103.220.176.0/22 +103.220.180.0/22 +103.220.184.0/22 +103.220.188.0/22 +103.220.192.0/22 +103.220.196.0/22 +103.220.200.0/22 +103.220.240.0/22 +103.220.244.0/22 +103.220.248.0/22 +103.220.252.0/22 +103.221.0.0/22 +103.221.4.0/22 +103.221.8.0/22 +103.221.12.0/22 +103.221.16.0/22 +103.221.20.0/22 +103.221.24.0/22 +103.221.28.0/22 +103.221.32.0/22 +103.221.36.0/22 +103.221.40.0/22 +103.221.44.0/22 +103.221.48.0/22 +103.221.88.0/22 +103.221.92.0/22 +103.221.96.0/22 +103.221.100.0/22 +103.221.104.0/22 +103.221.108.0/22 +103.221.112.0/22 +103.221.116.0/22 +103.221.120.0/22 +103.221.124.0/22 +103.221.128.0/22 +103.221.132.0/22 +103.221.136.0/22 +103.221.140.0/22 +103.221.144.0/22 +103.221.148.0/22 +103.221.152.0/22 +103.221.156.0/22 +103.221.160.0/22 +103.221.164.0/22 +103.221.168.0/22 +103.221.172.0/22 +103.221.176.0/22 +103.221.180.0/22 +103.221.184.0/22 +103.221.188.0/22 +103.221.192.0/22 +103.221.196.0/22 +103.221.200.0/22 +103.221.204.0/22 +103.222.0.0/22 +103.222.4.0/22 +103.222.8.0/22 +103.222.12.0/22 +103.222.16.0/22 +103.222.24.0/22 +103.222.28.0/22 +103.222.32.0/22 +103.222.36.0/22 +103.222.40.0/22 +103.222.44.0/22 +103.222.48.0/22 +103.222.52.0/22 +103.222.56.0/22 +103.222.60.0/22 +103.222.64.0/22 +103.222.68.0/22 +103.222.72.0/22 +103.222.76.0/22 +103.222.80.0/22 +103.222.84.0/22 +103.222.88.0/22 +103.222.92.0/22 +103.222.96.0/22 +103.222.100.0/22 +103.222.104.0/22 +103.222.108.0/22 +103.222.112.0/22 +103.222.116.0/22 +103.222.120.0/22 +103.222.124.0/22 +103.222.128.0/22 +103.222.132.0/22 +103.222.136.0/22 +103.222.140.0/22 +103.222.144.0/22 +103.222.148.0/22 +103.222.152.0/22 +103.222.156.0/22 +103.222.160.0/22 +103.222.164.0/22 +103.222.168.0/22 +103.222.172.0/22 +103.222.176.0/22 +103.222.180.0/22 +103.222.184.0/22 +103.222.188.0/22 +103.222.192.0/22 +103.222.196.0/22 +103.222.200.0/22 +103.222.204.0/22 +103.222.208.0/22 +103.222.212.0/22 +103.222.216.0/22 +103.222.220.0/22 +103.222.224.0/22 +103.222.228.0/22 +103.222.232.0/22 +103.222.240.0/22 +103.222.244.0/22 +103.223.16.0/22 +103.223.20.0/22 +103.223.24.0/22 +103.223.28.0/22 +103.223.32.0/22 +103.223.36.0/22 +103.223.40.0/22 +103.223.44.0/22 +103.223.48.0/22 +103.223.52.0/22 +103.223.56.0/22 +103.223.60.0/22 +103.223.64.0/22 +103.223.68.0/22 +103.223.72.0/22 +103.223.76.0/22 +103.223.80.0/22 +103.223.84.0/22 +103.223.88.0/22 +103.223.92.0/22 +103.223.96.0/22 +103.223.100.0/22 +103.223.104.0/22 +103.223.108.0/22 +103.223.112.0/22 +103.223.116.0/22 +103.223.120.0/22 +103.223.124.0/22 +103.223.128.0/22 +103.223.132.0/22 +103.223.140.0/22 +103.223.144.0/22 +103.223.148.0/22 +103.223.152.0/22 +103.223.156.0/22 +103.223.160.0/22 +103.223.164.0/22 +103.223.168.0/22 +103.223.172.0/22 +103.223.176.0/22 +103.223.180.0/22 +103.223.188.0/22 +103.223.192.0/22 +103.223.196.0/22 +103.223.200.0/22 +103.223.204.0/22 +103.223.208.0/22 +103.223.212.0/22 +103.223.216.0/22 +103.223.220.0/22 +103.223.224.0/22 +103.223.228.0/22 +103.223.232.0/22 +103.223.236.0/22 +103.223.240.0/22 +103.223.244.0/22 +103.223.248.0/22 +103.223.252.0/22 +103.224.0.0/22 +103.224.40.0/22 +103.224.44.0/22 +103.224.60.0/22 +103.224.80.0/22 +103.224.220.0/22 +103.224.224.0/22 +103.224.228.0/22 +103.224.232.0/22 +103.225.18.0/24 +103.225.84.0/22 +103.226.16.0/22 +103.226.40.0/22 +103.226.56.0/22 +103.226.60.0/22 +103.226.80.0/22 +103.226.116.0/23 +103.226.132.0/22 +103.226.156.0/22 +103.226.180.0/22 +103.226.196.0/22 +103.227.48.0/22 +103.227.72.0/22 +103.227.76.0/22 +103.227.80.0/22 +103.227.100.0/22 +103.227.120.0/22 +103.227.132.0/22 +103.227.136.0/22 +103.227.196.0/22 +103.227.204.0/22 +103.227.212.0/22 +103.227.228.0/22 +103.228.12.0/22 +103.228.88.0/22 +103.228.136.0/22 +103.228.160.0/22 +103.228.176.0/22 +103.228.204.0/22 +103.228.208.0/22 +103.228.228.0/22 +103.228.232.0/22 +103.229.20.0/22 +103.229.60.0/22 +103.229.136.0/22 +103.229.148.0/22 +103.229.172.0/22 +103.229.212.0/22 +103.229.216.0/22 +103.229.220.0/22 +103.229.228.0/22 +103.229.236.0/22 +103.229.240.0/22 +103.230.0.0/22 +103.230.28.0/22 +103.230.44.0/22 +103.230.96.0/22 +103.230.110.0/23 +103.230.128.0/23 +103.230.196.0/22 +103.230.200.0/22 +103.230.204.0/22 +103.230.212.0/22 +103.230.236.0/22 +103.231.16.0/22 +103.231.20.0/22 +103.231.64.0/22 +103.231.68.0/22 +103.231.180.0/22 +103.231.184.0/22 +103.231.244.0/22 +103.232.4.0/22 +103.232.144.0/22 +103.232.166.0/23 +103.232.188.0/22 +103.232.212.0/22 +103.233.4.0/22 +103.233.44.0/22 +103.233.52.0/22 +103.233.104.0/22 +103.233.128.0/22 +103.233.136.0/22 +103.233.162.0/23 +103.233.178.0/23 +103.233.228.0/22 +103.234.0.0/22 +103.234.20.0/22 +103.234.56.0/22 +103.234.128.0/22 +103.234.172.0/22 +103.234.180.0/22 +103.234.244.0/22 +103.235.48.0/22 +103.235.56.0/22 +103.235.60.0/22 +103.235.80.0/22 +103.235.84.0/22 +103.235.100.0/22 +103.235.128.0/22 +103.235.132.0/22 +103.235.136.0/22 +103.235.140.0/22 +103.235.144.0/22 +103.235.148.0/22 +103.235.184.0/22 +103.235.192.0/22 +103.235.200.0/22 +103.235.220.0/22 +103.235.224.0/22 +103.235.228.0/22 +103.235.232.0/22 +103.235.236.0/22 +103.235.240.0/22 +103.235.244.0/22 +103.235.248.0/22 +103.235.252.0/22 +103.236.0.0/22 +103.236.4.0/22 +103.236.8.0/22 +103.236.12.0/22 +103.236.16.0/22 +103.236.20.0/22 +103.236.24.0/22 +103.236.28.0/22 +103.236.32.0/22 +103.236.36.0/22 +103.236.40.0/22 +103.236.44.0/22 +103.236.48.0/22 +103.236.52.0/22 +103.236.56.0/22 +103.236.60.0/22 +103.236.64.0/22 +103.236.68.0/22 +103.236.72.0/22 +103.236.76.0/22 +103.236.80.0/22 +103.236.84.0/22 +103.236.88.0/22 +103.236.92.0/22 +103.236.96.0/22 +103.236.116.0/23 +103.236.120.0/22 +103.236.184.0/22 +103.236.220.0/22 +103.236.232.0/22 +103.236.240.0/22 +103.236.244.0/22 +103.236.248.0/22 +103.236.252.0/22 +103.237.0.0/22 +103.237.4.0/22 +103.237.8.0/22 +103.237.12.0/22 +103.237.24.0/22 +103.237.28.0/22 +103.237.68.0/22 +103.237.88.0/22 +103.237.92.0/23 +103.237.152.0/22 +103.237.176.0/22 +103.237.180.0/22 +103.237.184.0/22 +103.237.188.0/22 +103.237.192.0/22 +103.237.196.0/22 +103.237.200.0/22 +103.237.204.0/22 +103.237.208.0/22 +103.237.212.0/22 +103.237.216.0/22 +103.237.220.0/22 +103.237.224.0/22 +103.237.228.0/22 +103.237.232.0/22 +103.237.236.0/22 +103.237.240.0/22 +103.237.244.0/22 +103.237.248.0/22 +103.237.252.0/22 +103.238.0.0/22 +103.238.4.0/22 +103.238.16.0/22 +103.238.20.0/22 +103.238.24.0/22 +103.238.28.0/22 +103.238.32.0/22 +103.238.36.0/22 +103.238.40.0/22 +103.238.44.0/22 +103.238.48.0/22 +103.238.52.0/22 +103.238.56.0/22 +103.238.88.0/22 +103.238.92.0/22 +103.238.96.0/22 +103.238.132.0/22 +103.238.140.0/22 +103.238.144.0/22 +103.238.152.0/23 +103.238.160.0/22 +103.238.164.0/22 +103.238.168.0/22 +103.238.172.0/22 +103.238.176.0/22 +103.238.180.0/22 +103.238.184.0/22 +103.238.188.0/22 +103.238.196.0/22 +103.238.204.0/22 +103.238.252.0/22 +103.239.0.0/22 +103.239.44.0/22 +103.239.68.0/22 +103.239.152.0/22 +103.239.156.0/22 +103.239.180.0/22 +103.239.184.0/22 +103.239.192.0/22 +103.239.196.0/22 +103.239.204.0/22 +103.239.208.0/22 +103.239.224.0/22 +103.239.244.0/22 +103.240.16.0/22 +103.240.36.0/22 +103.240.42.0/23 +103.240.72.0/22 +103.240.84.0/22 +103.240.124.0/22 +103.240.172.0/22 +103.240.188.0/22 +103.240.200.0/23 +103.240.202.0/23 +103.240.244.0/22 +103.241.12.0/22 +103.241.72.0/22 +103.241.92.0/22 +103.241.96.0/22 +103.241.160.0/22 +103.241.172.0/23 +103.241.184.0/22 +103.241.188.0/22 +103.241.220.0/22 +103.242.64.0/22 +103.242.128.0/22 +103.242.132.0/22 +103.242.160.0/22 +103.242.168.0/22 +103.242.172.0/22 +103.242.176.0/22 +103.242.200.0/22 +103.242.212.0/22 +103.242.220.0/22 +103.242.240.0/22 +103.243.136.0/22 +103.243.252.0/22 +103.244.16.0/22 +103.244.26.0/23 +103.244.58.0/23 +103.244.60.0/22 +103.244.64.0/22 +103.244.68.0/22 +103.244.72.0/22 +103.244.76.0/22 +103.244.80.0/22 +103.244.84.0/22 +103.244.116.0/22 +103.244.164.0/22 +103.244.232.0/22 +103.244.252.0/22 +103.245.23.0/24 +103.245.24.0/23 +103.245.52.0/22 +103.245.60.0/22 +103.245.80.0/22 +103.245.124.0/22 +103.245.128.0/22 +103.246.8.0/22 +103.246.12.0/22 +103.246.120.0/22 +103.246.124.0/22 +103.246.132.0/22 +103.246.152.0/22 +103.246.156.0/22 +103.247.168.0/22 +103.247.172.0/22 +103.247.176.0/22 +103.247.191.0/24 +103.247.200.0/22 +103.247.212.0/22 +103.248.0.0/23 +103.248.64.0/22 +103.248.100.0/22 +103.248.124.0/22 +103.248.152.0/22 +103.248.168.0/22 +103.248.192.0/22 +103.248.212.0/22 +103.248.224.0/22 +103.249.8.0/22 +103.249.12.0/22 +103.249.52.0/22 +103.249.104.0/22 +103.249.128.0/22 +103.249.136.0/22 +103.249.144.0/22 +103.249.164.0/22 +103.249.168.0/22 +103.249.172.0/22 +103.249.176.0/22 +103.249.188.0/22 +103.249.192.0/22 +103.249.244.0/22 +103.249.252.0/22 +103.250.32.0/22 +103.250.104.0/22 +103.250.124.0/22 +103.250.180.0/22 +103.250.192.0/22 +103.250.216.0/22 +103.250.224.0/22 +103.250.236.0/22 +103.250.248.0/22 +103.250.252.0/22 +103.251.32.0/22 +103.251.84.0/22 +103.251.96.0/22 +103.251.124.0/22 +103.251.128.0/22 +103.251.160.0/22 +103.251.192.0/22 +103.251.204.0/22 +103.251.240.0/22 +103.252.28.0/22 +103.252.36.0/22 +103.252.64.0/22 +103.252.96.0/22 +103.252.104.0/22 +103.252.172.0/22 +103.252.204.0/22 +103.252.208.0/22 +103.252.232.0/22 +103.252.248.0/22 +103.253.4.0/22 +103.253.60.0/22 +103.253.204.0/22 +103.253.220.0/22 +103.253.224.0/22 +103.253.232.0/22 +103.254.8.0/22 +103.254.20.0/22 +103.254.64.0/22 +103.254.68.0/22 +103.254.72.0/22 +103.254.76.0/22 +103.254.112.0/22 +103.254.176.0/22 +103.254.188.0/22 +103.254.196.0/24 +103.254.220.0/22 +103.255.56.0/22 +103.255.68.0/22 +103.255.88.0/22 +103.255.92.0/22 +103.255.136.0/22 +103.255.140.0/22 +103.255.184.0/22 +103.255.200.0/22 +103.255.208.0/23 +103.255.212.0/22 +103.255.228.0/22 +106.0.0.0/24 +106.0.2.0/23 +106.0.4.0/22 +106.0.8.0/21 +106.0.16.0/20 +106.0.44.0/22 +106.0.64.0/18 +106.2.0.0/15 +106.4.0.0/14 +106.8.0.0/15 +106.11.0.0/16 +106.12.0.0/14 +106.16.0.0/12 +106.32.0.0/12 +106.48.0.0/15 +106.50.0.0/16 +106.52.0.0/14 +106.56.0.0/13 +106.74.0.0/16 +106.75.0.0/16 +106.80.0.0/12 +106.108.0.0/14 +106.112.0.0/13 +106.120.0.0/13 +106.224.0.0/12 +109.244.0.0/16 +110.6.0.0/15 +110.16.0.0/14 +110.34.40.0/22 +110.34.44.0/22 +110.40.0.0/14 +110.44.12.0/22 +110.44.144.0/20 +110.48.0.0/16 +110.51.0.0/16 +110.52.0.0/15 +110.56.0.0/13 +110.64.0.0/15 +110.72.0.0/15 +110.75.0.0/17 +110.75.128.0/19 +110.75.160.0/19 +110.75.192.0/18 +110.76.0.0/19 +110.76.32.0/19 +110.76.132.0/22 +110.76.156.0/22 +110.76.184.0/22 +110.76.192.0/18 +110.77.0.0/17 +110.80.0.0/13 +110.88.0.0/14 +110.92.68.0/22 +110.93.32.0/19 +110.94.0.0/15 +110.96.0.0/11 +110.152.0.0/14 +110.156.0.0/15 +110.165.32.0/19 +110.166.0.0/15 +110.172.192.0/18 +110.173.0.0/19 +110.173.32.0/20 +110.173.64.0/19 +110.173.96.0/19 +110.173.192.0/19 +110.176.0.0/13 +110.184.0.0/13 +110.192.0.0/11 +110.228.0.0/14 +110.232.32.0/19 +110.236.0.0/15 +110.240.0.0/12 +111.0.0.0/10 +111.66.0.0/16 +111.67.192.0/20 +111.68.64.0/19 +111.72.0.0/13 +111.85.0.0/16 +111.92.248.0/22 +111.92.252.0/22 +111.112.0.0/15 +111.114.0.0/15 +111.116.0.0/15 +111.118.200.0/21 +111.119.64.0/18 +111.119.128.0/19 +111.120.0.0/14 +111.124.0.0/16 +111.126.0.0/15 +111.128.0.0/11 +111.160.0.0/13 +111.170.0.0/16 +111.172.0.0/14 +111.176.0.0/13 +111.186.0.0/15 +111.192.0.0/12 +111.208.0.0/14 +111.212.0.0/14 +111.221.28.0/24 +111.221.128.0/17 +111.222.0.0/16 +111.223.4.0/22 +111.223.8.0/22 +111.223.12.0/22 +111.223.16.0/22 +111.223.240.0/22 +111.223.248.0/22 +111.224.0.0/14 +111.228.0.0/14 +111.235.96.0/19 +111.235.156.0/22 +111.235.160.0/19 +112.0.0.0/10 +112.64.0.0/15 +112.66.0.0/15 +112.73.0.0/16 +112.74.0.0/15 +112.80.0.0/13 +112.88.0.0/13 +112.96.0.0/15 +112.98.0.0/15 +112.100.0.0/14 +112.109.128.0/17 +112.111.0.0/16 +112.112.0.0/14 +112.116.0.0/15 +112.122.0.0/15 +112.124.0.0/14 +112.128.0.0/14 +112.132.0.0/16 +112.137.48.0/21 +112.192.0.0/14 +112.224.0.0/11 +113.0.0.0/13 +113.8.0.0/15 +113.11.192.0/19 +113.12.0.0/14 +113.16.0.0/15 +113.18.0.0/16 +113.21.232.0/22 +113.21.236.0/22 +113.24.0.0/14 +113.31.0.0/16 +113.44.0.0/14 +113.48.0.0/14 +113.52.160.0/19 +113.52.228.0/22 +113.54.0.0/15 +113.56.0.0/15 +113.58.0.0/16 +113.59.0.0/17 +113.59.224.0/22 +113.62.0.0/15 +113.64.0.0/11 +113.96.0.0/12 +113.112.0.0/13 +113.120.0.0/13 +113.128.0.0/15 +113.130.96.0/20 +113.130.112.0/21 +113.132.0.0/14 +113.136.0.0/13 +113.192.40.0/23 +113.192.56.0/23 +113.194.0.0/15 +113.197.100.0/22 +113.200.0.0/15 +113.202.0.0/16 +113.204.0.0/14 +113.208.96.0/19 +113.208.128.0/17 +113.209.0.0/16 +113.212.0.0/18 +113.212.88.0/22 +113.212.100.0/22 +113.212.184.0/21 +113.213.0.0/17 +113.214.0.0/15 +113.218.0.0/15 +113.220.0.0/14 +113.224.0.0/12 +113.240.0.0/13 +113.248.0.0/14 +114.28.0.0/16 +114.31.64.0/22 +114.31.68.0/22 +114.54.0.0/15 +114.60.0.0/14 +114.64.0.0/14 +114.68.0.0/16 +114.79.64.0/18 +114.80.0.0/12 +114.96.0.0/13 +114.104.0.0/14 +114.110.0.0/20 +114.110.64.0/18 +114.111.0.0/19 +114.111.160.0/19 +114.112.0.0/14 +114.116.0.0/16 +114.117.0.0/17 +114.117.128.0/17 +114.118.0.0/16 +114.119.0.0/17 +114.119.192.0/21 +114.119.200.0/22 +114.119.204.0/22 +114.119.208.0/20 +114.119.224.0/19 +114.132.0.0/16 +114.134.184.0/22 +114.134.188.0/23 +114.135.0.0/16 +114.138.0.0/15 +114.141.64.0/21 +114.141.80.0/22 +114.141.84.0/22 +114.141.128.0/18 +114.142.136.0/21 +114.196.0.0/15 +114.198.248.0/21 +114.208.0.0/14 +114.212.0.0/15 +114.214.0.0/16 +114.215.0.0/16 +114.216.0.0/13 +114.224.0.0/12 +114.240.0.0/12 +115.24.0.0/14 +115.28.0.0/15 +115.31.64.0/22 +115.31.68.0/22 +115.31.72.0/22 +115.31.76.0/22 +115.32.0.0/14 +115.42.56.0/22 +115.44.0.0/15 +115.46.0.0/16 +115.47.0.0/16 +115.48.0.0/12 +115.69.64.0/20 +115.84.0.0/18 +115.85.192.0/18 +115.100.0.0/14 +115.104.0.0/14 +115.120.0.0/14 +115.124.16.0/20 +115.148.0.0/14 +115.152.0.0/15 +115.154.0.0/15 +115.156.0.0/15 +115.158.0.0/16 +115.159.0.0/16 +115.166.64.0/19 +115.168.0.0/14 +115.172.0.0/14 +115.180.0.0/15 +115.182.0.0/16 +115.183.0.0/16 +115.187.0.0/22 +115.187.4.0/22 +115.187.8.0/22 +115.187.12.0/22 +115.190.0.0/15 +115.192.0.0/11 +115.224.0.0/12 +116.0.8.0/21 +116.0.24.0/21 +116.1.0.0/16 +116.2.0.0/15 +116.4.0.0/14 +116.8.0.0/14 +116.13.0.0/16 +116.16.0.0/12 +116.50.0.0/20 +116.52.0.0/14 +116.56.0.0/15 +116.58.128.0/20 +116.58.208.0/20 +116.60.0.0/14 +116.66.0.0/17 +116.68.136.0/22 +116.68.140.0/22 +116.68.176.0/22 +116.68.180.0/22 +116.69.0.0/16 +116.70.0.0/17 +116.76.0.0/15 +116.78.0.0/15 +116.85.0.0/16 +116.89.144.0/20 +116.89.240.0/22 +116.90.80.0/20 +116.90.184.0/21 +116.95.0.0/16 +116.112.0.0/14 +116.116.0.0/15 +116.128.0.0/10 +116.192.0.0/16 +116.193.16.0/20 +116.193.32.0/19 +116.193.164.0/22 +116.193.176.0/21 +116.194.0.0/15 +116.196.0.0/17 +116.196.128.0/18 +116.196.192.0/18 +116.197.160.0/22 +116.197.164.0/22 +116.198.0.0/16 +116.199.0.0/17 +116.199.128.0/19 +116.204.0.0/17 +116.204.132.0/22 +116.205.0.0/16 +116.207.0.0/16 +116.208.0.0/14 +116.212.160.0/20 +116.213.44.0/22 +116.213.64.0/18 +116.213.128.0/17 +116.214.32.0/19 +116.214.64.0/20 +116.214.128.0/17 +116.215.0.0/16 +116.216.0.0/14 +116.224.0.0/12 +116.242.0.0/15 +116.244.0.0/15 +116.246.0.0/15 +116.248.0.0/15 +116.251.64.0/18 +116.252.0.0/15 +116.254.104.0/22 +116.254.108.0/22 +116.254.128.0/17 +116.255.128.0/17 +117.8.0.0/13 +117.21.0.0/16 +117.22.0.0/15 +117.24.0.0/13 +117.32.0.0/13 +117.40.0.0/14 +117.44.0.0/15 +117.48.0.0/14 +117.53.48.0/20 +117.53.176.0/20 +117.57.0.0/16 +117.58.0.0/17 +117.59.0.0/16 +117.60.0.0/14 +117.64.0.0/13 +117.72.0.0/15 +117.74.64.0/20 +117.74.80.0/20 +117.74.128.0/17 +117.75.0.0/16 +117.76.0.0/14 +117.80.0.0/12 +117.100.0.0/15 +117.103.16.0/20 +117.103.40.0/21 +117.103.72.0/21 +117.103.128.0/20 +117.104.168.0/21 +117.106.0.0/15 +117.112.0.0/13 +117.120.64.0/18 +117.120.128.0/17 +117.121.0.0/17 +117.121.128.0/18 +117.121.192.0/21 +117.122.128.0/17 +117.124.0.0/14 +117.128.0.0/10 +118.24.0.0/15 +118.26.0.0/19 +118.26.32.0/22 +118.26.40.0/21 +118.26.48.0/21 +118.26.56.0/21 +118.26.64.0/19 +118.26.96.0/21 +118.26.112.0/21 +118.26.120.0/21 +118.26.128.0/22 +118.26.133.0/24 +118.26.134.0/23 +118.26.136.0/21 +118.26.160.0/20 +118.26.188.0/22 +118.26.192.0/18 +118.28.0.0/15 +118.30.0.0/16 +118.31.0.0/16 +118.64.0.0/15 +118.66.0.0/16 +118.67.112.0/20 +118.72.0.0/13 +118.80.0.0/15 +118.84.0.0/15 +118.88.32.0/19 +118.88.64.0/18 +118.88.128.0/17 +118.89.0.0/16 +118.91.240.0/20 +118.102.16.0/20 +118.102.32.0/21 +118.103.164.0/22 +118.103.168.0/22 +118.103.172.0/22 +118.103.176.0/22 +118.112.0.0/13 +118.120.0.0/14 +118.124.0.0/15 +118.126.0.0/16 +118.127.128.0/19 +118.132.0.0/14 +118.144.0.0/14 +118.178.0.0/16 +118.180.0.0/14 +118.184.0.0/17 +118.184.128.0/17 +118.186.0.0/15 +118.188.0.0/16 +118.190.0.0/16 +118.191.0.0/21 +118.191.8.0/22 +118.191.12.0/24 +118.191.16.0/21 +118.191.64.0/20 +118.191.80.0/22 +118.191.128.0/19 +118.191.176.0/20 +118.191.192.0/20 +118.191.208.0/24 +118.191.216.0/22 +118.191.223.0/24 +118.191.224.0/24 +118.191.240.0/20 +118.192.0.0/16 +118.193.0.0/21 +118.193.8.0/21 +118.193.48.0/21 +118.193.96.0/19 +118.193.128.0/17 +118.194.0.0/17 +118.194.128.0/18 +118.194.192.0/19 +118.194.224.0/22 +118.194.240.0/21 +118.195.0.0/17 +118.195.128.0/17 +118.196.0.0/14 +118.202.0.0/15 +118.204.0.0/14 +118.212.0.0/16 +118.213.0.0/16 +118.215.192.0/18 +118.224.0.0/14 +118.228.0.0/15 +118.230.0.0/16 +118.239.0.0/16 +118.242.0.0/16 +118.244.0.0/14 +118.248.0.0/13 +119.0.0.0/15 +119.2.0.0/19 +119.2.128.0/17 +119.3.0.0/16 +119.4.0.0/14 +119.10.0.0/17 +119.15.136.0/21 +119.16.0.0/16 +119.18.192.0/20 +119.18.208.0/21 +119.18.224.0/20 +119.18.240.0/20 +119.19.0.0/16 +119.20.0.0/14 +119.27.64.0/18 +119.27.128.0/19 +119.27.160.0/19 +119.27.192.0/18 +119.28.0.0/15 +119.30.48.0/20 +119.31.192.0/19 +119.32.0.0/14 +119.36.0.0/16 +119.37.0.0/17 +119.37.128.0/18 +119.37.192.0/18 +119.38.0.0/17 +119.38.128.0/18 +119.38.192.0/20 +119.38.208.0/20 +119.38.224.0/19 +119.39.0.0/16 +119.40.0.0/18 +119.40.64.0/20 +119.40.128.0/17 +119.41.0.0/16 +119.42.0.0/19 +119.42.128.0/21 +119.42.136.0/21 +119.42.224.0/19 +119.44.0.0/15 +119.48.0.0/13 +119.57.0.0/16 +119.58.0.0/16 +119.59.128.0/17 +119.60.0.0/16 +119.61.0.0/16 +119.62.0.0/16 +119.63.32.0/19 +119.75.208.0/20 +119.78.0.0/15 +119.80.0.0/16 +119.82.208.0/20 +119.84.0.0/14 +119.88.0.0/14 +119.96.0.0/13 +119.108.0.0/15 +119.112.0.0/13 +119.120.0.0/13 +119.128.0.0/12 +119.144.0.0/14 +119.148.160.0/20 +119.148.176.0/20 +119.151.192.0/18 +119.160.200.0/21 +119.161.120.0/22 +119.161.124.0/22 +119.161.128.0/17 +119.162.0.0/15 +119.164.0.0/14 +119.176.0.0/12 +119.232.0.0/16 +119.233.0.0/17 +119.233.128.0/17 +119.235.128.0/18 +119.248.0.0/14 +119.252.96.0/21 +119.252.240.0/20 +119.253.0.0/16 +119.254.0.0/15 +120.0.0.0/12 +120.24.0.0/14 +120.30.0.0/16 +120.31.0.0/16 +120.32.0.0/13 +120.40.0.0/14 +120.44.0.0/15 +120.46.0.0/16 +120.47.0.0/16 +120.48.0.0/15 +120.52.0.0/16 +120.53.0.0/16 +120.54.0.0/15 +120.64.0.0/14 +120.68.0.0/14 +120.72.32.0/19 +120.72.128.0/17 +120.76.0.0/14 +120.80.0.0/13 +120.88.8.0/21 +120.90.0.0/15 +120.92.0.0/16 +120.94.0.0/16 +120.95.0.0/16 +120.128.0.0/14 +120.132.0.0/17 +120.132.128.0/17 +120.133.0.0/16 +120.134.0.0/15 +120.136.16.0/22 +120.136.20.0/22 +120.136.128.0/18 +120.137.0.0/17 +120.143.128.0/19 +120.192.0.0/10 +121.0.8.0/21 +121.0.16.0/20 +121.4.0.0/15 +121.8.0.0/13 +121.16.0.0/13 +121.24.0.0/14 +121.28.0.0/15 +121.30.0.0/16 +121.31.0.0/16 +121.32.0.0/14 +121.36.0.0/16 +121.37.0.0/16 +121.38.0.0/15 +121.40.0.0/14 +121.46.0.0/18 +121.46.76.0/22 +121.46.128.0/17 +121.47.0.0/16 +121.48.0.0/15 +121.50.8.0/21 +121.51.0.0/16 +121.52.160.0/19 +121.52.208.0/20 +121.52.224.0/19 +121.54.176.0/21 +121.54.188.0/22 +121.55.0.0/18 +121.56.0.0/15 +121.58.0.0/17 +121.58.136.0/21 +121.58.144.0/20 +121.58.160.0/21 +121.59.0.0/16 +121.60.0.0/14 +121.68.0.0/14 +121.76.0.0/15 +121.79.128.0/18 +121.89.0.0/16 +121.91.104.0/21 +121.100.128.0/17 +121.101.0.0/18 +121.101.208.0/20 +121.192.0.0/16 +121.193.0.0/16 +121.194.0.0/15 +121.196.0.0/14 +121.200.192.0/21 +121.201.0.0/16 +121.204.0.0/14 +121.224.0.0/12 +121.248.0.0/14 +121.255.0.0/16 +122.0.64.0/18 +122.0.128.0/17 +122.4.0.0/14 +122.8.0.0/17 +122.8.192.0/18 +122.9.0.0/16 +122.10.128.0/22 +122.10.132.0/23 +122.10.136.0/23 +122.10.164.0/22 +122.10.168.0/21 +122.10.176.0/20 +122.10.192.0/22 +122.10.200.0/21 +122.10.208.0/21 +122.10.216.0/22 +122.10.228.0/22 +122.10.232.0/21 +122.10.240.0/22 +122.11.0.0/17 +122.12.0.0/16 +122.13.0.0/16 +122.14.0.0/17 +122.14.128.0/18 +122.14.192.0/18 +122.48.0.0/16 +122.49.0.0/18 +122.51.0.0/16 +122.64.0.0/11 +122.96.0.0/15 +122.102.0.0/20 +122.102.64.0/20 +122.102.80.0/20 +122.112.0.0/18 +122.112.64.0/18 +122.112.128.0/17 +122.113.0.0/16 +122.114.0.0/16 +122.115.0.0/17 +122.115.128.0/19 +122.115.160.0/19 +122.115.192.0/19 +122.115.224.0/19 +122.119.0.0/16 +122.128.100.0/22 +122.128.120.0/21 +122.136.0.0/13 +122.144.128.0/17 +122.152.192.0/18 +122.156.0.0/14 +122.188.0.0/14 +122.192.0.0/14 +122.198.0.0/16 +122.200.40.0/22 +122.200.44.0/22 +122.200.64.0/18 +122.201.48.0/20 +122.204.0.0/14 +122.224.0.0/12 +122.240.0.0/13 +122.248.24.0/21 +122.248.48.0/20 +122.255.64.0/21 +123.0.128.0/18 +123.4.0.0/14 +123.8.0.0/13 +123.49.128.0/17 +123.50.160.0/19 +123.52.0.0/14 +123.56.0.0/15 +123.58.0.0/20 +123.58.16.0/20 +123.58.32.0/19 +123.58.64.0/19 +123.58.96.0/19 +123.58.128.0/18 +123.58.224.0/20 +123.58.240.0/20 +123.59.0.0/16 +123.60.0.0/16 +123.61.0.0/16 +123.62.0.0/16 +123.64.0.0/11 +123.96.0.0/15 +123.98.0.0/17 +123.99.128.0/17 +123.100.0.0/19 +123.101.0.0/16 +123.103.0.0/17 +123.108.88.0/23 +123.108.128.0/20 +123.108.208.0/20 +123.112.0.0/12 +123.128.0.0/13 +123.136.80.0/20 +123.137.0.0/16 +123.138.0.0/15 +123.144.0.0/14 +123.148.0.0/16 +123.149.0.0/16 +123.150.0.0/15 +123.152.0.0/13 +123.160.0.0/14 +123.164.0.0/14 +123.168.0.0/14 +123.172.0.0/15 +123.174.0.0/15 +123.176.60.0/22 +123.176.80.0/20 +123.177.0.0/16 +123.178.0.0/15 +123.180.0.0/14 +123.184.0.0/14 +123.188.0.0/14 +123.196.0.0/15 +123.199.128.0/17 +123.206.0.0/15 +123.232.0.0/14 +123.242.0.0/17 +123.242.192.0/22 +123.242.196.0/22 +123.244.0.0/14 +123.249.0.0/16 +123.253.240.0/22 +123.254.96.0/22 +123.254.100.0/22 +124.6.64.0/18 +124.14.0.0/15 +124.16.0.0/15 +124.20.0.0/16 +124.21.0.0/20 +124.21.16.0/20 +124.21.32.0/19 +124.21.64.0/18 +124.21.128.0/17 +124.22.0.0/15 +124.28.192.0/18 +124.29.0.0/17 +124.31.0.0/16 +124.40.112.0/20 +124.40.128.0/18 +124.40.192.0/19 +124.40.240.0/22 +124.42.0.0/17 +124.42.128.0/17 +124.47.0.0/18 +124.64.0.0/15 +124.66.0.0/17 +124.67.0.0/16 +124.68.0.0/15 +124.70.0.0/15 +124.72.0.0/16 +124.73.0.0/16 +124.74.0.0/15 +124.76.0.0/14 +124.88.0.0/16 +124.89.0.0/17 +124.89.128.0/17 +124.90.0.0/15 +124.92.0.0/14 +124.108.8.0/21 +124.108.40.0/21 +124.109.96.0/21 +124.112.0.0/15 +124.114.0.0/15 +124.116.0.0/16 +124.117.0.0/16 +124.118.0.0/15 +124.126.0.0/15 +124.128.0.0/13 +124.147.128.0/17 +124.150.137.0/24 +124.151.0.0/16 +124.152.0.0/16 +124.160.0.0/16 +124.161.0.0/16 +124.162.0.0/16 +124.163.0.0/16 +124.164.0.0/14 +124.172.0.0/15 +124.174.0.0/15 +124.192.0.0/15 +124.196.0.0/16 +124.200.0.0/13 +124.220.0.0/14 +124.224.0.0/16 +124.225.0.0/16 +124.226.0.0/15 +124.228.0.0/14 +124.232.0.0/15 +124.234.0.0/15 +124.236.0.0/14 +124.240.0.0/17 +124.240.128.0/18 +124.242.0.0/16 +124.243.192.0/18 +124.248.0.0/17 +124.249.0.0/16 +124.250.0.0/15 +124.254.0.0/18 +125.31.192.0/18 +125.32.0.0/16 +125.33.0.0/16 +125.34.0.0/16 +125.35.0.0/17 +125.35.128.0/17 +125.36.0.0/14 +125.40.0.0/13 +125.58.128.0/17 +125.61.128.0/17 +125.62.0.0/18 +125.64.0.0/13 +125.72.0.0/16 +125.73.0.0/16 +125.74.0.0/15 +125.76.0.0/17 +125.76.128.0/17 +125.77.0.0/16 +125.78.0.0/15 +125.80.0.0/13 +125.88.0.0/13 +125.96.0.0/15 +125.98.0.0/16 +125.104.0.0/13 +125.112.0.0/12 +125.169.0.0/16 +125.171.0.0/16 +125.208.0.0/18 +125.210.0.0/16 +125.211.0.0/16 +125.213.0.0/17 +125.214.96.0/19 +125.215.0.0/18 +125.216.0.0/15 +125.218.0.0/16 +125.219.0.0/16 +125.220.0.0/15 +125.222.0.0/15 +125.254.128.0/18 +125.254.192.0/18 +128.108.0.0/16 +129.28.0.0/16 +129.204.0.0/16 +129.211.0.0/16 +132.232.0.0/16 +134.175.0.0/16 +137.59.59.0/24 +137.59.88.0/22 +139.5.56.0/22 +139.5.60.0/22 +139.5.80.0/22 +139.5.92.0/22 +139.5.108.0/22 +139.5.128.0/22 +139.5.160.0/22 +139.5.192.0/22 +139.5.204.0/22 +139.5.212.0/22 +139.5.244.0/22 +139.9.0.0/16 +139.129.0.0/16 +139.148.0.0/16 +139.155.0.0/16 +139.159.0.0/16 +139.170.0.0/16 +139.176.0.0/16 +139.183.0.0/16 +139.186.0.0/16 +139.189.0.0/16 +139.196.0.0/14 +139.200.0.0/13 +139.208.0.0/13 +139.217.0.0/16 +139.219.0.0/16 +139.220.0.0/15 +139.224.0.0/16 +139.226.0.0/15 +140.75.0.0/16 +140.143.0.0/16 +140.179.0.0/16 +140.205.0.0/16 +140.206.0.0/15 +140.210.0.0/17 +140.210.128.0/17 +140.224.0.0/16 +140.237.0.0/16 +140.240.0.0/16 +140.243.0.0/16 +140.246.0.0/16 +140.249.0.0/16 +140.250.0.0/16 +140.255.0.0/16 +142.70.0.0/16 +142.86.0.0/16 +143.64.0.0/16 +144.0.0.0/16 +144.7.0.0/16 +144.12.0.0/16 +144.48.64.0/22 +144.48.88.0/22 +144.48.156.0/22 +144.48.180.0/22 +144.48.184.0/22 +144.48.204.0/22 +144.48.208.0/22 +144.48.212.0/22 +144.48.220.0/22 +144.48.252.0/22 +144.52.0.0/16 +144.123.0.0/16 +144.255.0.0/16 +146.56.192.0/18 +146.196.56.0/22 +146.196.68.0/22 +146.196.72.0/22 +146.196.92.0/22 +146.196.112.0/22 +146.196.116.0/22 +146.196.124.0/22 +148.70.0.0/16 +149.41.0.0/16 +150.0.0.0/16 +150.115.0.0/16 +150.121.0.0/16 +150.122.0.0/16 +150.129.136.0/22 +150.129.192.0/22 +150.129.252.0/22 +150.138.0.0/15 +150.158.0.0/16 +150.223.0.0/16 +150.242.0.0/22 +150.242.4.0/22 +150.242.8.0/22 +150.242.28.0/22 +150.242.44.0/22 +150.242.48.0/22 +150.242.52.0/22 +150.242.56.0/22 +150.242.76.0/22 +150.242.80.0/22 +150.242.92.0/22 +150.242.96.0/22 +150.242.112.0/22 +150.242.116.0/22 +150.242.120.0/22 +150.242.152.0/22 +150.242.156.0/22 +150.242.160.0/22 +150.242.164.0/22 +150.242.168.0/22 +150.242.184.0/22 +150.242.188.0/22 +150.242.192.0/22 +150.242.212.0/22 +150.242.224.0/22 +150.242.232.0/22 +150.242.236.0/22 +150.242.240.0/22 +150.242.244.0/22 +150.242.248.0/22 +150.248.0.0/16 +150.255.0.0/16 +152.104.128.0/17 +152.136.0.0/16 +153.0.0.0/16 +153.3.0.0/16 +153.34.0.0/15 +153.36.0.0/15 +153.99.0.0/16 +153.101.0.0/16 +153.118.0.0/15 +154.8.128.0/17 +157.0.0.0/16 +157.10.34.0/23 +157.10.36.0/23 +157.10.112.0/23 +157.10.118.0/23 +157.10.130.0/23 +157.10.218.0/23 +157.10.220.0/23 +157.10.246.0/23 +157.15.74.0/23 +157.15.94.0/23 +157.15.100.0/23 +157.15.102.0/23 +157.15.104.0/23 +157.15.200.0/23 +157.18.0.0/16 +157.20.33.0/24 +157.20.136.0/23 +157.20.194.0/23 +157.20.246.0/23 +157.61.0.0/16 +157.66.42.0/23 +157.66.70.0/23 +157.66.88.0/23 +157.66.90.0/23 +157.66.92.0/23 +157.66.94.0/23 +157.66.164.0/23 +157.66.244.0/23 +157.119.8.0/22 +157.119.12.0/22 +157.119.16.0/22 +157.119.28.0/22 +157.119.132.0/22 +157.119.136.0/22 +157.119.140.0/22 +157.119.144.0/22 +157.119.148.0/22 +157.119.152.0/22 +157.119.156.0/22 +157.119.160.0/22 +157.119.164.0/22 +157.119.172.0/22 +157.119.192.0/22 +157.119.196.0/22 +157.119.240.0/22 +157.119.252.0/22 +157.122.0.0/16 +157.148.0.0/16 +157.156.0.0/16 +157.255.0.0/16 +158.60.0.0/16 +158.79.0.0/16 +158.140.252.0/22 +159.27.0.0/16 +159.75.0.0/16 +159.226.0.0/16 +160.19.76.0/23 +160.19.82.0/23 +160.19.208.0/22 +160.19.212.0/22 +160.19.216.0/22 +160.20.16.0/23 +160.20.18.0/23 +160.20.48.0/22 +160.20.130.0/23 +160.22.58.0/23 +160.22.82.0/23 +160.22.148.0/23 +160.22.188.0/23 +160.22.224.0/23 +160.22.230.0/23 +160.22.244.0/23 +160.22.246.0/23 +160.25.10.0/23 +160.25.12.0/23 +160.25.20.0/23 +160.25.194.0/23 +160.30.40.0/23 +160.30.148.0/23 +160.30.150.0/23 +160.30.194.0/23 +160.30.196.0/23 +160.30.198.0/23 +160.30.230.0/23 +160.187.223.0/24 +160.187.252.0/23 +160.187.254.0/23 +160.191.0.0/23 +160.191.104.0/23 +160.191.110.0/23 +160.202.60.0/22 +160.202.148.0/22 +160.202.152.0/22 +160.202.168.0/22 +160.202.212.0/22 +160.202.216.0/22 +160.202.220.0/22 +160.202.224.0/22 +160.202.228.0/22 +160.202.232.0/22 +160.202.236.0/22 +160.202.240.0/22 +160.202.244.0/22 +160.202.248.0/22 +160.202.252.0/22 +160.250.14.0/23 +160.250.16.0/23 +160.250.18.0/23 +160.250.24.0/23 +160.250.84.0/23 +160.250.90.0/23 +160.250.102.0/23 +160.250.104.0/23 +160.250.140.0/24 +160.250.160.0/23 +160.250.170.0/23 +160.250.214.0/23 +160.250.252.0/23 +161.120.0.0/16 +161.189.0.0/16 +161.207.0.0/16 +161.248.20.0/23 +161.248.42.0/23 +161.248.84.0/23 +161.248.92.0/23 +161.248.108.0/23 +161.248.110.0/23 +161.248.112.0/23 +161.248.136.0/23 +162.14.0.0/16 +162.105.0.0/16 +163.0.0.0/16 +163.47.4.0/22 +163.53.0.0/22 +163.53.4.0/22 +163.53.8.0/22 +163.53.12.0/22 +163.53.36.0/22 +163.53.40.0/22 +163.53.44.0/22 +163.53.48.0/22 +163.53.52.0/22 +163.53.56.0/22 +163.53.60.0/22 +163.53.64.0/22 +163.53.88.0/22 +163.53.92.0/22 +163.53.96.0/22 +163.53.100.0/22 +163.53.104.0/22 +163.53.108.0/22 +163.53.112.0/22 +163.53.116.0/22 +163.53.120.0/22 +163.53.124.0/22 +163.53.128.0/22 +163.53.132.0/22 +163.53.136.0/22 +163.53.160.0/22 +163.53.164.0/22 +163.53.168.0/22 +163.53.172.0/22 +163.53.188.0/22 +163.53.240.0/22 +163.125.0.0/16 +163.142.0.0/16 +163.177.0.0/16 +163.179.0.0/16 +163.204.0.0/16 +163.228.0.0/16 +164.52.0.0/17 +166.111.0.0/16 +167.139.0.0/16 +167.189.0.0/16 +167.220.244.0/22 +168.160.0.0/16 +170.179.0.0/16 +171.8.0.0/13 +171.34.0.0/15 +171.36.0.0/14 +171.40.0.0/13 +171.80.0.0/14 +171.84.0.0/14 +171.88.0.0/13 +171.104.0.0/13 +171.112.0.0/14 +171.116.0.0/14 +171.120.0.0/13 +171.208.0.0/12 +172.81.192.0/18 +175.0.0.0/12 +175.16.0.0/13 +175.24.0.0/16 +175.25.0.0/16 +175.26.0.0/16 +175.27.0.0/16 +175.30.0.0/15 +175.42.0.0/15 +175.44.0.0/16 +175.46.0.0/15 +175.48.0.0/12 +175.64.0.0/11 +175.102.0.0/16 +175.106.128.0/17 +175.111.144.0/22 +175.111.148.0/22 +175.111.152.0/22 +175.111.156.0/22 +175.111.160.0/22 +175.111.164.0/22 +175.111.168.0/22 +175.111.172.0/22 +175.111.184.0/22 +175.146.0.0/15 +175.148.0.0/14 +175.152.0.0/14 +175.158.96.0/22 +175.160.0.0/12 +175.176.156.0/22 +175.176.176.0/22 +175.176.188.0/22 +175.178.0.0/16 +175.184.128.0/18 +175.185.0.0/16 +175.186.0.0/15 +175.188.0.0/14 +180.76.0.0/16 +180.77.0.0/16 +180.78.0.0/15 +180.84.0.0/15 +180.86.0.0/16 +180.88.0.0/14 +180.94.56.0/21 +180.94.96.0/20 +180.94.120.0/22 +180.94.124.0/22 +180.95.128.0/17 +180.96.0.0/11 +180.129.128.0/17 +180.130.0.0/16 +180.136.0.0/13 +180.148.16.0/21 +180.148.152.0/21 +180.148.216.0/21 +180.148.224.0/19 +180.149.128.0/19 +180.150.160.0/19 +180.152.0.0/13 +180.160.0.0/12 +180.178.112.0/22 +180.178.116.0/22 +180.178.192.0/18 +180.184.0.0/15 +180.186.0.0/16 +180.187.0.0/16 +180.188.0.0/17 +180.189.148.0/22 +180.200.252.0/22 +180.201.0.0/16 +180.202.0.0/15 +180.208.0.0/15 +180.210.212.0/22 +180.210.224.0/19 +180.212.0.0/15 +180.222.224.0/19 +180.223.0.0/16 +180.233.0.0/18 +180.233.64.0/19 +180.233.144.0/22 +180.235.64.0/19 +180.235.112.0/22 +182.16.144.0/22 +182.16.148.0/22 +182.16.192.0/19 +182.18.0.0/17 +182.23.184.0/21 +182.23.200.0/21 +182.32.0.0/12 +182.48.96.0/19 +182.49.0.0/16 +182.50.0.0/20 +182.50.112.0/20 +182.51.0.0/16 +182.54.0.0/17 +182.54.244.0/22 +182.61.0.0/16 +182.80.0.0/14 +182.84.0.0/14 +182.88.0.0/14 +182.92.0.0/16 +182.96.0.0/12 +182.112.0.0/12 +182.128.0.0/12 +182.144.0.0/13 +182.157.0.0/16 +182.160.64.0/19 +182.174.0.0/15 +182.200.0.0/13 +182.236.128.0/17 +182.237.24.0/22 +182.237.28.0/22 +182.238.0.0/16 +182.239.0.0/19 +182.240.0.0/13 +182.254.0.0/16 +182.255.60.0/22 +183.0.0.0/10 +183.64.0.0/13 +183.78.160.0/22 +183.78.164.0/22 +183.78.180.0/22 +183.81.172.0/22 +183.81.180.0/22 +183.84.0.0/15 +183.91.128.0/22 +183.91.136.0/21 +183.91.144.0/20 +183.92.0.0/14 +183.128.0.0/11 +183.160.0.0/13 +183.168.0.0/15 +183.170.0.0/16 +183.172.0.0/14 +183.182.0.0/19 +183.184.0.0/13 +183.192.0.0/10 +188.131.128.0/17 +192.51.188.0/24 +192.55.46.0/23 +192.55.68.0/22 +192.102.204.0/22 +192.124.154.0/24 +192.140.128.0/22 +192.140.132.0/22 +192.140.136.0/22 +192.140.156.0/22 +192.140.160.0/22 +192.140.164.0/22 +192.140.168.0/22 +192.140.172.0/22 +192.140.176.0/22 +192.140.180.0/22 +192.140.184.0/22 +192.140.188.0/22 +192.140.192.0/22 +192.140.196.0/22 +192.140.200.0/22 +192.140.204.0/22 +192.140.208.0/22 +192.140.212.0/22 +192.144.128.0/17 +192.197.113.0/24 +193.112.0.0/16 +193.119.0.0/19 +198.175.100.0/22 +199.212.57.0/24 +202.0.100.0/23 +202.0.122.0/23 +202.0.176.0/22 +202.3.128.0/23 +202.4.128.0/19 +202.4.252.0/22 +202.5.208.0/22 +202.5.212.0/22 +202.5.216.0/22 +202.6.6.0/23 +202.6.66.0/23 +202.6.72.0/23 +202.6.87.0/24 +202.6.88.0/23 +202.6.92.0/23 +202.6.103.0/24 +202.6.108.0/24 +202.6.110.0/23 +202.6.114.0/24 +202.6.176.0/20 +202.8.0.0/24 +202.8.2.0/23 +202.8.4.0/23 +202.8.12.0/24 +202.8.24.0/24 +202.8.77.0/24 +202.8.120.0/22 +202.8.128.0/19 +202.8.192.0/20 +202.9.32.0/24 +202.9.34.0/23 +202.9.48.0/23 +202.9.51.0/24 +202.9.52.0/23 +202.9.54.0/24 +202.9.57.0/24 +202.9.58.0/23 +202.10.64.0/20 +202.10.112.0/22 +202.10.116.0/22 +202.10.120.0/22 +202.10.124.0/22 +202.12.1.0/24 +202.12.2.0/24 +202.12.17.0/24 +202.12.18.0/24 +202.12.72.0/24 +202.12.84.0/23 +202.12.96.0/24 +202.12.98.0/23 +202.12.106.0/24 +202.12.111.0/24 +202.12.116.0/24 +202.14.64.0/23 +202.14.69.0/24 +202.14.73.0/24 +202.14.74.0/23 +202.14.76.0/24 +202.14.78.0/23 +202.14.88.0/24 +202.14.97.0/24 +202.14.104.0/23 +202.14.108.0/23 +202.14.111.0/24 +202.14.114.0/23 +202.14.118.0/23 +202.14.124.0/23 +202.14.127.0/24 +202.14.129.0/24 +202.14.135.0/24 +202.14.136.0/24 +202.14.149.0/24 +202.14.151.0/24 +202.14.157.0/24 +202.14.158.0/23 +202.14.169.0/24 +202.14.170.0/23 +202.14.172.0/22 +202.14.176.0/24 +202.14.184.0/23 +202.14.208.0/23 +202.14.213.0/24 +202.14.219.0/24 +202.14.220.0/24 +202.14.222.0/23 +202.14.225.0/24 +202.14.226.0/23 +202.14.231.0/24 +202.14.235.0/24 +202.14.236.0/23 +202.14.238.0/24 +202.14.239.0/24 +202.14.246.0/24 +202.14.251.0/24 +202.20.66.0/24 +202.20.79.0/24 +202.20.87.0/24 +202.20.88.0/23 +202.20.90.0/24 +202.20.94.0/23 +202.20.114.0/24 +202.20.117.0/24 +202.20.120.0/24 +202.20.125.0/24 +202.20.126.0/24 +202.20.127.0/24 +202.21.48.0/22 +202.21.52.0/22 +202.21.56.0/22 +202.21.60.0/22 +202.21.131.0/24 +202.21.132.0/24 +202.21.141.0/24 +202.21.142.0/24 +202.21.147.0/24 +202.21.148.0/24 +202.21.150.0/23 +202.21.152.0/23 +202.21.154.0/24 +202.21.156.0/24 +202.22.248.0/22 +202.22.252.0/22 +202.27.12.0/24 +202.27.14.0/24 +202.27.136.0/23 +202.36.226.0/24 +202.38.0.0/23 +202.38.2.0/23 +202.38.8.0/21 +202.38.48.0/20 +202.38.64.0/19 +202.38.96.0/19 +202.38.128.0/23 +202.38.130.0/23 +202.38.132.0/23 +202.38.134.0/24 +202.38.135.0/24 +202.38.136.0/23 +202.38.140.0/23 +202.38.142.0/23 +202.38.146.0/23 +202.38.149.0/24 +202.38.150.0/23 +202.38.152.0/23 +202.38.154.0/23 +202.38.156.0/24 +202.38.158.0/23 +202.38.164.0/22 +202.38.168.0/23 +202.38.170.0/24 +202.38.176.0/23 +202.38.184.0/21 +202.38.192.0/18 +202.40.4.0/23 +202.40.7.0/24 +202.40.15.0/24 +202.40.135.0/24 +202.40.136.0/24 +202.40.140.0/24 +202.40.143.0/24 +202.40.144.0/23 +202.40.150.0/24 +202.40.155.0/24 +202.40.156.0/24 +202.40.158.0/23 +202.40.162.0/24 +202.41.8.0/23 +202.41.11.0/24 +202.41.12.0/23 +202.41.128.0/24 +202.41.130.0/23 +202.41.152.0/21 +202.41.192.0/24 +202.41.196.0/22 +202.41.200.0/22 +202.41.240.0/20 +202.43.76.0/22 +202.43.144.0/20 +202.44.16.0/20 +202.44.48.0/22 +202.44.67.0/24 +202.44.74.0/24 +202.44.97.0/24 +202.44.129.0/24 +202.44.132.0/23 +202.44.146.0/23 +202.45.0.0/23 +202.45.2.0/24 +202.45.15.0/24 +202.45.16.0/20 +202.46.16.0/23 +202.46.18.0/24 +202.46.20.0/23 +202.46.32.0/19 +202.46.128.0/24 +202.46.224.0/20 +202.47.82.0/23 +202.47.96.0/22 +202.47.100.0/22 +202.47.104.0/22 +202.47.108.0/22 +202.47.126.0/24 +202.47.128.0/24 +202.47.130.0/23 +202.52.33.0/24 +202.52.34.0/24 +202.52.47.0/24 +202.52.143.0/24 +202.53.140.0/24 +202.53.143.0/24 +202.57.192.0/22 +202.57.196.0/22 +202.57.200.0/22 +202.57.204.0/22 +202.57.212.0/22 +202.57.216.0/22 +202.57.240.0/20 +202.58.0.0/24 +202.58.104.0/22 +202.58.112.0/22 +202.59.0.0/24 +202.59.1.0/24 +202.59.212.0/22 +202.59.236.0/24 +202.59.240.0/24 +202.60.48.0/21 +202.60.96.0/21 +202.60.112.0/20 +202.60.132.0/22 +202.60.136.0/21 +202.60.144.0/20 +202.61.68.0/22 +202.61.76.0/22 +202.61.88.0/22 +202.61.123.0/24 +202.61.127.0/24 +202.62.112.0/22 +202.62.248.0/22 +202.62.252.0/24 +202.62.255.0/24 +202.63.80.0/24 +202.63.81.0/24 +202.63.82.0/23 +202.63.84.0/22 +202.63.88.0/21 +202.63.160.0/19 +202.63.248.0/22 +202.63.253.0/24 +202.65.0.0/21 +202.65.8.0/23 +202.65.96.0/22 +202.65.100.0/22 +202.65.104.0/22 +202.65.108.0/22 +202.66.168.0/22 +202.67.0.0/22 +202.69.4.0/22 +202.69.16.0/20 +202.70.0.0/19 +202.70.96.0/20 +202.70.192.0/20 +202.71.32.0/22 +202.71.36.0/22 +202.71.40.0/22 +202.71.44.0/22 +202.72.40.0/21 +202.72.80.0/20 +202.72.112.0/22 +202.72.116.0/22 +202.72.120.0/22 +202.72.124.0/22 +202.73.128.0/22 +202.73.240.0/22 +202.73.244.0/22 +202.73.248.0/22 +202.73.252.0/22 +202.74.8.0/21 +202.74.36.0/24 +202.74.42.0/24 +202.74.52.0/24 +202.74.80.0/20 +202.74.254.0/23 +202.75.208.0/20 +202.75.252.0/22 +202.76.252.0/22 +202.77.80.0/21 +202.77.92.0/22 +202.78.8.0/21 +202.79.224.0/21 +202.79.248.0/22 +202.80.192.0/21 +202.80.200.0/21 +202.81.0.0/22 +202.81.176.0/22 +202.81.180.0/22 +202.81.184.0/22 +202.81.188.0/22 +202.83.252.0/22 +202.84.0.0/22 +202.84.4.0/22 +202.84.8.0/21 +202.84.16.0/23 +202.84.22.0/24 +202.84.24.0/21 +202.85.208.0/20 +202.86.249.0/24 +202.86.252.0/22 +202.87.80.0/20 +202.88.32.0/22 +202.89.8.0/21 +202.89.96.0/22 +202.89.108.0/22 +202.89.119.0/24 +202.89.232.0/21 +202.90.16.0/22 +202.90.20.0/22 +202.90.24.0/22 +202.90.28.0/22 +202.90.37.0/24 +202.90.96.0/22 +202.90.100.0/22 +202.90.104.0/22 +202.90.108.0/22 +202.90.112.0/20 +202.90.193.0/24 +202.90.196.0/24 +202.90.205.0/24 +202.90.224.0/21 +202.90.232.0/21 +202.91.0.0/22 +202.91.96.0/20 +202.91.176.0/20 +202.91.224.0/19 +202.92.8.0/21 +202.92.48.0/20 +202.92.252.0/22 +202.93.252.0/22 +202.94.74.0/24 +202.94.81.0/24 +202.94.92.0/22 +202.95.240.0/21 +202.96.0.0/18 +202.96.64.0/21 +202.96.72.0/21 +202.96.80.0/20 +202.96.96.0/21 +202.96.104.0/21 +202.96.112.0/20 +202.96.128.0/21 +202.96.136.0/21 +202.96.144.0/20 +202.96.160.0/21 +202.96.168.0/21 +202.96.176.0/20 +202.96.192.0/21 +202.96.200.0/21 +202.96.208.0/20 +202.96.224.0/21 +202.96.232.0/21 +202.96.240.0/20 +202.97.0.0/21 +202.97.8.0/21 +202.97.16.0/20 +202.97.32.0/19 +202.97.64.0/19 +202.97.96.0/20 +202.97.112.0/20 +202.97.128.0/18 +202.97.192.0/19 +202.97.224.0/21 +202.97.232.0/21 +202.97.240.0/20 +202.98.0.0/21 +202.98.8.0/21 +202.98.16.0/20 +202.98.32.0/21 +202.98.40.0/21 +202.98.48.0/20 +202.98.64.0/19 +202.98.96.0/21 +202.98.104.0/21 +202.98.112.0/20 +202.98.128.0/19 +202.98.160.0/21 +202.98.168.0/21 +202.98.176.0/20 +202.98.192.0/21 +202.98.200.0/21 +202.98.208.0/20 +202.98.224.0/21 +202.98.232.0/21 +202.98.240.0/20 +202.99.0.0/18 +202.99.64.0/19 +202.99.96.0/21 +202.99.104.0/21 +202.99.112.0/20 +202.99.128.0/19 +202.99.160.0/21 +202.99.168.0/21 +202.99.176.0/20 +202.99.192.0/21 +202.99.200.0/21 +202.99.208.0/20 +202.99.224.0/21 +202.99.232.0/21 +202.99.240.0/20 +202.100.0.0/21 +202.100.8.0/21 +202.100.16.0/20 +202.100.32.0/19 +202.100.64.0/21 +202.100.72.0/21 +202.100.80.0/20 +202.100.96.0/21 +202.100.104.0/21 +202.100.112.0/20 +202.100.128.0/21 +202.100.136.0/21 +202.100.144.0/20 +202.100.160.0/21 +202.100.168.0/21 +202.100.176.0/20 +202.100.192.0/21 +202.100.200.0/21 +202.100.208.0/20 +202.100.224.0/19 +202.101.0.0/18 +202.101.64.0/19 +202.101.96.0/19 +202.101.128.0/18 +202.101.192.0/19 +202.101.224.0/21 +202.101.232.0/21 +202.101.240.0/20 +202.102.0.0/19 +202.102.32.0/19 +202.102.64.0/18 +202.102.128.0/21 +202.102.136.0/21 +202.102.144.0/20 +202.102.160.0/19 +202.102.192.0/21 +202.102.200.0/21 +202.102.208.0/20 +202.102.224.0/21 +202.102.232.0/21 +202.102.240.0/20 +202.103.0.0/21 +202.103.8.0/21 +202.103.16.0/20 +202.103.32.0/19 +202.103.64.0/19 +202.103.96.0/21 +202.103.104.0/21 +202.103.112.0/20 +202.103.128.0/18 +202.103.192.0/19 +202.103.224.0/21 +202.103.232.0/21 +202.103.240.0/20 +202.104.0.0/15 +202.106.0.0/16 +202.107.0.0/17 +202.107.128.0/17 +202.108.0.0/16 +202.109.0.0/16 +202.110.0.0/18 +202.110.64.0/18 +202.110.128.0/18 +202.110.192.0/18 +202.111.0.0/17 +202.111.128.0/19 +202.111.160.0/19 +202.111.192.0/18 +202.112.0.0/16 +202.113.0.0/20 +202.113.16.0/20 +202.113.32.0/19 +202.113.64.0/18 +202.113.128.0/18 +202.113.192.0/19 +202.113.224.0/20 +202.113.240.0/20 +202.114.0.0/19 +202.114.32.0/19 +202.114.64.0/18 +202.114.128.0/17 +202.115.0.0/19 +202.115.32.0/19 +202.115.64.0/18 +202.115.128.0/17 +202.116.0.0/19 +202.116.32.0/20 +202.116.48.0/20 +202.116.64.0/19 +202.116.96.0/19 +202.116.128.0/17 +202.117.0.0/18 +202.117.64.0/18 +202.117.128.0/17 +202.118.0.0/19 +202.118.32.0/19 +202.118.64.0/18 +202.118.128.0/17 +202.119.0.0/19 +202.119.32.0/19 +202.119.64.0/20 +202.119.80.0/20 +202.119.96.0/19 +202.119.128.0/17 +202.120.0.0/18 +202.120.64.0/18 +202.120.128.0/17 +202.121.0.0/16 +202.122.0.0/21 +202.122.32.0/21 +202.122.64.0/19 +202.122.112.0/21 +202.122.120.0/21 +202.122.132.0/24 +202.123.96.0/20 +202.123.116.0/22 +202.123.120.0/22 +202.124.16.0/21 +202.124.24.0/22 +202.125.107.0/24 +202.125.109.0/24 +202.125.112.0/20 +202.125.176.0/20 +202.127.0.0/23 +202.127.2.0/24 +202.127.3.0/24 +202.127.4.0/24 +202.127.5.0/24 +202.127.6.0/23 +202.127.12.0/22 +202.127.16.0/20 +202.127.40.0/21 +202.127.48.0/20 +202.127.112.0/20 +202.127.128.0/20 +202.127.144.0/20 +202.127.192.0/23 +202.127.194.0/23 +202.127.196.0/22 +202.127.200.0/21 +202.127.212.0/22 +202.127.216.0/21 +202.127.224.0/19 +202.129.208.0/24 +202.130.0.0/19 +202.130.39.0/24 +202.130.224.0/19 +202.131.16.0/21 +202.131.48.0/20 +202.131.208.0/20 +202.133.32.0/20 +202.134.58.0/24 +202.134.128.0/20 +202.134.208.0/22 +202.134.212.0/22 +202.134.216.0/22 +202.134.220.0/22 +202.136.48.0/20 +202.136.208.0/20 +202.136.224.0/20 +202.136.248.0/22 +202.137.231.0/24 +202.140.140.0/22 +202.140.144.0/22 +202.140.148.0/22 +202.140.152.0/22 +202.140.156.0/22 +202.141.160.0/19 +202.142.16.0/20 +202.143.4.0/22 +202.143.16.0/20 +202.143.32.0/20 +202.143.56.0/21 +202.143.100.0/22 +202.143.104.0/22 +202.144.196.0/22 +202.146.160.0/20 +202.146.184.0/23 +202.146.186.0/24 +202.146.188.0/22 +202.146.196.0/22 +202.146.200.0/21 +202.147.144.0/20 +202.148.32.0/20 +202.148.64.0/19 +202.148.96.0/19 +202.149.32.0/19 +202.149.160.0/19 +202.149.224.0/19 +202.150.16.0/20 +202.150.32.0/20 +202.150.56.0/22 +202.150.192.0/20 +202.150.224.0/19 +202.151.0.0/22 +202.151.33.0/24 +202.151.128.0/19 +202.152.176.0/20 +202.153.0.0/22 +202.153.7.0/24 +202.153.48.0/20 +202.157.192.0/19 +202.158.160.0/19 +202.158.242.0/24 +202.160.140.0/22 +202.160.156.0/22 +202.160.176.0/20 +202.162.67.0/24 +202.162.75.0/24 +202.164.0.0/20 +202.164.96.0/19 +202.165.176.0/20 +202.165.208.0/20 +202.165.239.0/24 +202.165.240.0/23 +202.165.243.0/24 +202.165.245.0/24 +202.165.251.0/24 +202.165.252.0/22 +202.166.224.0/19 +202.168.80.0/22 +202.168.128.0/22 +202.168.132.0/22 +202.168.136.0/22 +202.168.140.0/22 +202.168.160.0/20 +202.168.176.0/20 +202.170.128.0/19 +202.170.216.0/21 +202.170.224.0/19 +202.171.216.0/21 +202.171.232.0/24 +202.171.235.0/24 +202.172.0.0/22 +202.172.7.0/24 +202.173.0.0/22 +202.173.6.0/24 +202.173.8.0/21 +202.173.112.0/22 +202.173.224.0/19 +202.174.64.0/20 +202.174.124.0/22 +202.176.224.0/19 +202.179.160.0/22 +202.179.164.0/22 +202.179.168.0/22 +202.179.172.0/22 +202.179.240.0/20 +202.180.128.0/19 +202.180.208.0/21 +202.181.8.0/22 +202.181.28.0/22 +202.181.112.0/20 +202.182.32.0/20 +202.182.192.0/19 +202.189.0.0/18 +202.189.80.0/20 +202.189.184.0/21 +202.191.0.0/24 +202.191.68.0/22 +202.191.72.0/21 +202.191.80.0/20 +202.192.0.0/13 +202.200.0.0/14 +202.204.0.0/14 +203.0.4.0/22 +203.0.10.0/23 +203.0.18.0/24 +203.0.24.0/24 +203.0.42.0/23 +203.0.45.0/24 +203.0.46.0/23 +203.0.81.0/24 +203.0.82.0/23 +203.0.90.0/23 +203.0.96.0/23 +203.0.104.0/21 +203.0.114.0/23 +203.0.122.0/24 +203.0.128.0/24 +203.0.130.0/23 +203.0.132.0/22 +203.0.137.0/24 +203.0.142.0/24 +203.0.144.0/24 +203.0.146.0/24 +203.0.148.0/24 +203.0.150.0/23 +203.0.152.0/24 +203.0.177.0/24 +203.0.224.0/24 +203.1.4.0/22 +203.1.18.0/24 +203.1.26.0/23 +203.1.65.0/24 +203.1.66.0/23 +203.1.70.0/23 +203.1.76.0/23 +203.1.90.0/24 +203.1.97.0/24 +203.1.98.0/23 +203.1.100.0/22 +203.1.108.0/24 +203.1.253.0/24 +203.1.254.0/24 +203.2.64.0/21 +203.2.73.0/24 +203.2.112.0/21 +203.2.126.0/23 +203.2.140.0/24 +203.2.150.0/24 +203.2.152.0/22 +203.2.156.0/23 +203.2.160.0/21 +203.2.180.0/23 +203.2.196.0/23 +203.2.209.0/24 +203.2.214.0/23 +203.2.226.0/23 +203.2.229.0/24 +203.2.236.0/23 +203.3.68.0/24 +203.3.72.0/23 +203.3.75.0/24 +203.3.80.0/21 +203.3.96.0/22 +203.3.105.0/24 +203.3.112.0/21 +203.3.120.0/24 +203.3.123.0/24 +203.3.135.0/24 +203.3.139.0/24 +203.3.143.0/24 +203.4.132.0/23 +203.4.134.0/24 +203.4.151.0/24 +203.4.152.0/22 +203.4.174.0/23 +203.4.180.0/24 +203.4.186.0/24 +203.4.205.0/24 +203.4.208.0/22 +203.4.227.0/24 +203.4.230.0/23 +203.5.4.0/23 +203.5.7.0/24 +203.5.8.0/23 +203.5.11.0/24 +203.5.21.0/24 +203.5.22.0/24 +203.5.44.0/24 +203.5.46.0/23 +203.5.52.0/22 +203.5.56.0/23 +203.5.60.0/23 +203.5.114.0/23 +203.5.118.0/24 +203.5.120.0/24 +203.5.172.0/24 +203.5.180.0/23 +203.5.182.0/24 +203.5.185.0/24 +203.5.186.0/24 +203.5.188.0/23 +203.5.190.0/24 +203.5.195.0/24 +203.5.214.0/23 +203.5.218.0/23 +203.6.131.0/24 +203.6.136.0/24 +203.6.138.0/23 +203.6.142.0/24 +203.6.150.0/23 +203.6.157.0/24 +203.6.159.0/24 +203.6.224.0/20 +203.6.248.0/23 +203.7.129.0/24 +203.7.138.0/23 +203.7.147.0/24 +203.7.150.0/23 +203.7.158.0/24 +203.7.192.0/23 +203.7.200.0/24 +203.8.0.0/24 +203.8.8.0/24 +203.8.23.0/24 +203.8.70.0/24 +203.8.82.0/24 +203.8.86.0/23 +203.8.91.0/24 +203.8.110.0/23 +203.8.115.0/24 +203.8.166.0/23 +203.8.169.0/24 +203.8.173.0/24 +203.8.184.0/24 +203.8.186.0/23 +203.8.190.0/23 +203.8.192.0/24 +203.8.197.0/24 +203.8.198.0/23 +203.8.203.0/24 +203.8.209.0/24 +203.8.210.0/23 +203.8.212.0/22 +203.8.217.0/24 +203.8.220.0/24 +203.9.32.0/24 +203.9.36.0/23 +203.9.57.0/24 +203.9.63.0/24 +203.9.65.0/24 +203.9.70.0/23 +203.9.72.0/24 +203.9.75.0/24 +203.9.76.0/23 +203.9.96.0/22 +203.9.100.0/23 +203.9.108.0/24 +203.9.158.0/24 +203.10.34.0/24 +203.10.56.0/24 +203.10.74.0/23 +203.10.84.0/22 +203.10.88.0/24 +203.10.95.0/24 +203.10.125.0/24 +203.11.70.0/24 +203.11.76.0/22 +203.11.82.0/24 +203.11.84.0/22 +203.11.100.0/22 +203.11.109.0/24 +203.11.117.0/24 +203.11.122.0/24 +203.11.126.0/24 +203.11.136.0/22 +203.11.141.0/24 +203.11.142.0/23 +203.11.180.0/22 +203.11.208.0/22 +203.12.16.0/24 +203.12.19.0/24 +203.12.24.0/24 +203.12.57.0/24 +203.12.65.0/24 +203.12.66.0/24 +203.12.70.0/23 +203.12.87.0/24 +203.12.100.0/23 +203.12.103.0/24 +203.12.114.0/24 +203.12.118.0/24 +203.12.130.0/24 +203.12.137.0/24 +203.12.196.0/22 +203.12.211.0/24 +203.12.219.0/24 +203.12.226.0/24 +203.12.240.0/22 +203.13.18.0/24 +203.13.24.0/24 +203.13.44.0/23 +203.13.88.0/23 +203.13.92.0/22 +203.13.173.0/24 +203.13.224.0/23 +203.13.227.0/24 +203.13.233.0/24 +203.14.24.0/22 +203.14.33.0/24 +203.14.56.0/24 +203.14.61.0/24 +203.14.62.0/24 +203.14.104.0/24 +203.14.114.0/23 +203.14.118.0/24 +203.14.162.0/24 +203.14.192.0/24 +203.14.194.0/23 +203.14.214.0/24 +203.14.231.0/24 +203.14.246.0/24 +203.15.0.0/20 +203.15.20.0/23 +203.15.22.0/24 +203.15.87.0/24 +203.15.88.0/23 +203.15.105.0/24 +203.15.112.0/21 +203.15.130.0/23 +203.15.149.0/24 +203.15.151.0/24 +203.15.156.0/22 +203.15.174.0/24 +203.15.227.0/24 +203.15.232.0/21 +203.15.240.0/23 +203.15.246.0/24 +203.16.10.0/24 +203.16.12.0/23 +203.16.16.0/21 +203.16.27.0/24 +203.16.38.0/24 +203.16.49.0/24 +203.16.50.0/23 +203.16.58.0/24 +203.16.63.0/24 +203.16.133.0/24 +203.16.161.0/24 +203.16.162.0/24 +203.16.186.0/23 +203.16.228.0/24 +203.16.238.0/24 +203.16.240.0/24 +203.16.245.0/24 +203.17.2.0/24 +203.17.18.0/24 +203.17.28.0/24 +203.17.39.0/24 +203.17.56.0/24 +203.17.74.0/23 +203.17.88.0/23 +203.17.136.0/24 +203.17.164.0/24 +203.17.187.0/24 +203.17.190.0/23 +203.17.231.0/24 +203.17.233.0/24 +203.17.248.0/24 +203.17.249.0/24 +203.17.255.0/24 +203.18.2.0/23 +203.18.4.0/24 +203.18.7.0/24 +203.18.31.0/24 +203.18.37.0/24 +203.18.48.0/23 +203.18.52.0/24 +203.18.72.0/22 +203.18.80.0/23 +203.18.87.0/24 +203.18.100.0/23 +203.18.105.0/24 +203.18.107.0/24 +203.18.110.0/24 +203.18.129.0/24 +203.18.131.0/24 +203.18.132.0/23 +203.18.144.0/24 +203.18.153.0/24 +203.18.199.0/24 +203.18.208.0/24 +203.18.211.0/24 +203.18.215.0/24 +203.19.1.0/24 +203.19.18.0/24 +203.19.24.0/24 +203.19.30.0/24 +203.19.32.0/21 +203.19.41.0/24 +203.19.44.0/23 +203.19.46.0/24 +203.19.58.0/24 +203.19.60.0/23 +203.19.64.0/24 +203.19.68.0/24 +203.19.72.0/24 +203.19.101.0/24 +203.19.111.0/24 +203.19.131.0/24 +203.19.133.0/24 +203.19.144.0/24 +203.19.147.0/24 +203.19.149.0/24 +203.19.156.0/24 +203.19.176.0/24 +203.19.178.0/23 +203.19.208.0/24 +203.19.228.0/22 +203.19.233.0/24 +203.19.242.0/24 +203.19.248.0/23 +203.19.255.0/24 +203.20.17.0/24 +203.20.40.0/23 +203.20.44.0/24 +203.20.48.0/24 +203.20.61.0/24 +203.20.65.0/24 +203.20.84.0/23 +203.20.89.0/24 +203.20.106.0/23 +203.20.115.0/24 +203.20.117.0/24 +203.20.118.0/23 +203.20.122.0/24 +203.20.126.0/23 +203.20.135.0/24 +203.20.136.0/21 +203.20.150.0/24 +203.20.230.0/24 +203.20.232.0/24 +203.20.236.0/24 +203.21.0.0/23 +203.21.2.0/24 +203.21.8.0/24 +203.21.10.0/24 +203.21.18.0/24 +203.21.33.0/24 +203.21.34.0/24 +203.21.41.0/24 +203.21.44.0/24 +203.21.68.0/24 +203.21.82.0/24 +203.21.96.0/22 +203.21.124.0/24 +203.21.136.0/23 +203.21.145.0/24 +203.21.206.0/24 +203.22.24.0/24 +203.22.28.0/23 +203.22.31.0/24 +203.22.68.0/24 +203.22.76.0/24 +203.22.78.0/24 +203.22.84.0/24 +203.22.87.0/24 +203.22.92.0/22 +203.22.99.0/24 +203.22.106.0/24 +203.22.122.0/23 +203.22.131.0/24 +203.22.163.0/24 +203.22.166.0/24 +203.22.170.0/24 +203.22.176.0/21 +203.22.194.0/24 +203.22.242.0/23 +203.22.245.0/24 +203.22.246.0/24 +203.22.252.0/23 +203.23.0.0/24 +203.23.47.0/24 +203.23.61.0/24 +203.23.62.0/23 +203.23.73.0/24 +203.23.85.0/24 +203.23.92.0/22 +203.23.98.0/24 +203.23.107.0/24 +203.23.112.0/24 +203.23.130.0/24 +203.23.140.0/23 +203.23.172.0/24 +203.23.182.0/24 +203.23.186.0/23 +203.23.192.0/24 +203.23.197.0/24 +203.23.198.0/24 +203.23.204.0/22 +203.23.224.0/24 +203.23.226.0/23 +203.23.228.0/22 +203.23.249.0/24 +203.23.251.0/24 +203.24.13.0/24 +203.24.18.0/24 +203.24.27.0/24 +203.24.43.0/24 +203.24.56.0/24 +203.24.58.0/24 +203.24.67.0/24 +203.24.74.0/24 +203.24.79.0/24 +203.24.80.0/23 +203.24.84.0/23 +203.24.86.0/24 +203.24.90.0/24 +203.24.111.0/24 +203.24.112.0/24 +203.24.116.0/24 +203.24.122.0/23 +203.24.145.0/24 +203.24.152.0/23 +203.24.157.0/24 +203.24.161.0/24 +203.24.167.0/24 +203.24.186.0/23 +203.24.199.0/24 +203.24.202.0/24 +203.24.212.0/23 +203.24.217.0/24 +203.24.219.0/24 +203.24.244.0/24 +203.25.19.0/24 +203.25.20.0/23 +203.25.46.0/24 +203.25.48.0/21 +203.25.64.0/23 +203.25.91.0/24 +203.25.99.0/24 +203.25.100.0/24 +203.25.106.0/24 +203.25.131.0/24 +203.25.135.0/24 +203.25.138.0/24 +203.25.147.0/24 +203.25.153.0/24 +203.25.154.0/23 +203.25.164.0/24 +203.25.166.0/24 +203.25.174.0/23 +203.25.180.0/24 +203.25.182.0/24 +203.25.191.0/24 +203.25.199.0/24 +203.25.200.0/24 +203.25.202.0/23 +203.25.208.0/20 +203.25.229.0/24 +203.25.235.0/24 +203.25.236.0/24 +203.25.242.0/24 +203.26.12.0/24 +203.26.34.0/24 +203.26.49.0/24 +203.26.50.0/24 +203.26.55.0/24 +203.26.56.0/23 +203.26.60.0/24 +203.26.65.0/24 +203.26.68.0/24 +203.26.76.0/24 +203.26.80.0/24 +203.26.84.0/24 +203.26.97.0/24 +203.26.102.0/23 +203.26.115.0/24 +203.26.116.0/24 +203.26.129.0/24 +203.26.143.0/24 +203.26.144.0/24 +203.26.148.0/23 +203.26.154.0/24 +203.26.158.0/23 +203.26.170.0/24 +203.26.173.0/24 +203.26.176.0/24 +203.26.185.0/24 +203.26.202.0/23 +203.26.210.0/24 +203.26.214.0/24 +203.26.222.0/24 +203.26.224.0/24 +203.26.228.0/24 +203.26.232.0/24 +203.27.0.0/24 +203.27.10.0/24 +203.27.15.0/24 +203.27.16.0/24 +203.27.20.0/24 +203.27.22.0/23 +203.27.40.0/24 +203.27.45.0/24 +203.27.53.0/24 +203.27.65.0/24 +203.27.66.0/24 +203.27.81.0/24 +203.27.88.0/24 +203.27.102.0/24 +203.27.109.0/24 +203.27.117.0/24 +203.27.121.0/24 +203.27.122.0/23 +203.27.125.0/24 +203.27.200.0/24 +203.27.202.0/24 +203.27.233.0/24 +203.27.241.0/24 +203.27.250.0/24 +203.28.10.0/24 +203.28.12.0/24 +203.28.33.0/24 +203.28.34.0/23 +203.28.43.0/24 +203.28.44.0/24 +203.28.54.0/24 +203.28.56.0/24 +203.28.73.0/24 +203.28.74.0/24 +203.28.76.0/24 +203.28.86.0/24 +203.28.88.0/24 +203.28.112.0/24 +203.28.131.0/24 +203.28.136.0/24 +203.28.140.0/24 +203.28.145.0/24 +203.28.165.0/24 +203.28.169.0/24 +203.28.170.0/24 +203.28.178.0/23 +203.28.185.0/24 +203.28.187.0/24 +203.28.196.0/24 +203.28.226.0/23 +203.28.239.0/24 +203.29.2.0/24 +203.29.8.0/23 +203.29.13.0/24 +203.29.14.0/24 +203.29.28.0/24 +203.29.46.0/24 +203.29.57.0/24 +203.29.61.0/24 +203.29.63.0/24 +203.29.69.0/24 +203.29.73.0/24 +203.29.81.0/24 +203.29.90.0/24 +203.29.95.0/24 +203.29.100.0/24 +203.29.103.0/24 +203.29.112.0/24 +203.29.120.0/22 +203.29.182.0/23 +203.29.187.0/24 +203.29.189.0/24 +203.29.190.0/24 +203.29.205.0/24 +203.29.210.0/24 +203.29.217.0/24 +203.29.227.0/24 +203.29.231.0/24 +203.29.233.0/24 +203.29.234.0/24 +203.29.248.0/24 +203.29.254.0/23 +203.30.16.0/23 +203.30.25.0/24 +203.30.27.0/24 +203.30.29.0/24 +203.30.66.0/24 +203.30.81.0/24 +203.30.87.0/24 +203.30.111.0/24 +203.30.121.0/24 +203.30.123.0/24 +203.30.152.0/24 +203.30.156.0/24 +203.30.162.0/24 +203.30.173.0/24 +203.30.175.0/24 +203.30.187.0/24 +203.30.194.0/24 +203.30.217.0/24 +203.30.220.0/24 +203.30.222.0/24 +203.30.232.0/23 +203.30.235.0/24 +203.30.240.0/23 +203.30.246.0/24 +203.30.250.0/23 +203.31.45.0/24 +203.31.46.0/24 +203.31.49.0/24 +203.31.51.0/24 +203.31.54.0/23 +203.31.69.0/24 +203.31.72.0/24 +203.31.80.0/24 +203.31.85.0/24 +203.31.97.0/24 +203.31.105.0/24 +203.31.106.0/24 +203.31.108.0/23 +203.31.124.0/24 +203.31.162.0/24 +203.31.174.0/24 +203.31.177.0/24 +203.31.181.0/24 +203.31.187.0/24 +203.31.189.0/24 +203.31.204.0/24 +203.31.220.0/24 +203.31.222.0/23 +203.31.225.0/24 +203.31.229.0/24 +203.31.248.0/23 +203.31.253.0/24 +203.32.20.0/24 +203.32.48.0/23 +203.32.56.0/24 +203.32.60.0/24 +203.32.62.0/24 +203.32.68.0/23 +203.32.76.0/24 +203.32.81.0/24 +203.32.84.0/23 +203.32.95.0/24 +203.32.102.0/24 +203.32.105.0/24 +203.32.130.0/24 +203.32.133.0/24 +203.32.140.0/24 +203.32.152.0/24 +203.32.186.0/23 +203.32.192.0/24 +203.32.196.0/24 +203.32.203.0/24 +203.32.204.0/23 +203.32.212.0/24 +203.33.4.0/24 +203.33.7.0/24 +203.33.8.0/21 +203.33.21.0/24 +203.33.26.0/24 +203.33.32.0/24 +203.33.63.0/24 +203.33.64.0/24 +203.33.67.0/24 +203.33.68.0/24 +203.33.73.0/24 +203.33.79.0/24 +203.33.100.0/24 +203.33.122.0/24 +203.33.129.0/24 +203.33.131.0/24 +203.33.145.0/24 +203.33.156.0/24 +203.33.158.0/23 +203.33.174.0/24 +203.33.185.0/24 +203.33.200.0/24 +203.33.202.0/23 +203.33.204.0/24 +203.33.206.0/23 +203.33.214.0/23 +203.33.224.0/23 +203.33.226.0/24 +203.33.233.0/24 +203.33.243.0/24 +203.33.250.0/24 +203.34.4.0/24 +203.34.21.0/24 +203.34.27.0/24 +203.34.39.0/24 +203.34.48.0/23 +203.34.54.0/24 +203.34.56.0/23 +203.34.67.0/24 +203.34.69.0/24 +203.34.76.0/24 +203.34.92.0/24 +203.34.106.0/24 +203.34.113.0/24 +203.34.147.0/24 +203.34.150.0/24 +203.34.152.0/23 +203.34.161.0/24 +203.34.162.0/24 +203.34.187.0/24 +203.34.192.0/21 +203.34.204.0/22 +203.34.232.0/24 +203.34.240.0/24 +203.34.242.0/24 +203.34.245.0/24 +203.34.251.0/24 +203.55.2.0/23 +203.55.4.0/24 +203.55.10.0/24 +203.55.13.0/24 +203.55.22.0/24 +203.55.30.0/24 +203.55.93.0/24 +203.55.101.0/24 +203.55.109.0/24 +203.55.110.0/24 +203.55.116.0/23 +203.55.119.0/24 +203.55.128.0/23 +203.55.146.0/23 +203.55.192.0/24 +203.55.196.0/24 +203.55.218.0/23 +203.55.221.0/24 +203.55.224.0/24 +203.56.1.0/24 +203.56.4.0/24 +203.56.12.0/24 +203.56.24.0/24 +203.56.38.0/24 +203.56.40.0/24 +203.56.46.0/24 +203.56.48.0/21 +203.56.68.0/23 +203.56.82.0/23 +203.56.84.0/23 +203.56.95.0/24 +203.56.110.0/24 +203.56.121.0/24 +203.56.161.0/24 +203.56.169.0/24 +203.56.172.0/23 +203.56.175.0/24 +203.56.183.0/24 +203.56.185.0/24 +203.56.187.0/24 +203.56.192.0/24 +203.56.198.0/24 +203.56.201.0/24 +203.56.208.0/23 +203.56.210.0/24 +203.56.214.0/24 +203.56.216.0/24 +203.56.227.0/24 +203.56.228.0/24 +203.56.231.0/24 +203.56.232.0/24 +203.56.240.0/24 +203.56.252.0/24 +203.56.254.0/24 +203.57.5.0/24 +203.57.6.0/24 +203.57.12.0/23 +203.57.28.0/24 +203.57.39.0/24 +203.57.46.0/24 +203.57.58.0/24 +203.57.61.0/24 +203.57.66.0/24 +203.57.69.0/24 +203.57.70.0/23 +203.57.73.0/24 +203.57.90.0/24 +203.57.101.0/24 +203.57.109.0/24 +203.57.123.0/24 +203.57.157.0/24 +203.57.200.0/24 +203.57.202.0/24 +203.57.206.0/24 +203.57.222.0/24 +203.57.224.0/20 +203.57.246.0/23 +203.57.249.0/24 +203.57.253.0/24 +203.57.254.0/23 +203.62.2.0/24 +203.62.131.0/24 +203.62.139.0/24 +203.62.161.0/24 +203.62.197.0/24 +203.62.228.0/22 +203.62.234.0/24 +203.62.246.0/24 +203.76.160.0/22 +203.76.168.0/22 +203.76.208.0/22 +203.76.212.0/22 +203.76.216.0/22 +203.76.240.0/22 +203.76.244.0/22 +203.77.180.0/22 +203.78.48.0/20 +203.78.156.0/22 +203.79.0.0/20 +203.79.32.0/20 +203.80.4.0/23 +203.80.32.0/20 +203.80.57.0/24 +203.80.129.0/24 +203.80.132.0/22 +203.80.136.0/21 +203.80.144.0/20 +203.81.0.0/21 +203.81.16.0/20 +203.81.244.0/22 +203.82.0.0/23 +203.82.16.0/21 +203.82.112.0/22 +203.82.116.0/22 +203.82.120.0/22 +203.82.124.0/22 +203.82.224.0/22 +203.82.228.0/22 +203.82.232.0/22 +203.82.236.0/22 +203.83.0.0/22 +203.83.8.0/22 +203.83.12.0/22 +203.83.56.0/21 +203.83.224.0/20 +203.86.0.0/19 +203.86.32.0/19 +203.86.64.0/20 +203.86.80.0/20 +203.86.96.0/19 +203.86.250.0/24 +203.86.254.0/23 +203.88.32.0/19 +203.88.192.0/19 +203.89.8.0/21 +203.89.100.0/22 +203.89.133.0/24 +203.89.136.0/22 +203.89.144.0/24 +203.90.8.0/22 +203.90.12.0/22 +203.90.128.0/19 +203.90.160.0/19 +203.90.192.0/19 +203.91.32.0/19 +203.91.96.0/20 +203.91.120.0/21 +203.92.0.0/22 +203.92.6.0/24 +203.92.160.0/19 +203.93.0.0/22 +203.93.4.0/22 +203.93.8.0/24 +203.93.9.0/24 +203.93.10.0/23 +203.93.12.0/22 +203.93.16.0/20 +203.93.32.0/19 +203.93.64.0/18 +203.93.128.0/21 +203.93.136.0/22 +203.93.140.0/24 +203.93.141.0/24 +203.93.142.0/23 +203.93.144.0/20 +203.93.160.0/19 +203.93.192.0/18 +203.94.0.0/22 +203.94.4.0/22 +203.94.8.0/21 +203.94.16.0/20 +203.95.0.0/21 +203.95.96.0/20 +203.95.112.0/20 +203.95.128.0/18 +203.95.200.0/22 +203.95.204.0/22 +203.95.208.0/22 +203.95.224.0/19 +203.99.8.0/21 +203.99.16.0/20 +203.99.80.0/20 +203.100.32.0/20 +203.100.48.0/21 +203.100.58.0/24 +203.100.60.0/24 +203.100.63.0/24 +203.100.80.0/20 +203.100.96.0/19 +203.100.192.0/20 +203.104.32.0/20 +203.105.96.0/19 +203.105.128.0/19 +203.107.0.0/17 +203.110.160.0/19 +203.110.208.0/20 +203.110.232.0/23 +203.110.234.0/24 +203.114.80.0/22 +203.114.84.0/22 +203.114.88.0/22 +203.114.92.0/22 +203.114.244.0/22 +203.118.192.0/19 +203.118.241.0/24 +203.118.248.0/22 +203.119.24.0/21 +203.119.32.0/22 +203.119.80.0/22 +203.119.85.0/24 +203.119.113.0/24 +203.119.114.0/23 +203.119.116.0/22 +203.119.120.0/21 +203.119.128.0/17 +203.123.58.0/24 +203.128.32.0/19 +203.128.96.0/19 +203.128.224.0/21 +203.129.8.0/21 +203.130.32.0/19 +203.132.32.0/19 +203.134.240.0/21 +203.135.96.0/20 +203.135.112.0/20 +203.135.160.0/20 +203.142.219.0/24 +203.142.224.0/19 +203.144.96.0/19 +203.145.0.0/19 +203.148.0.0/18 +203.148.64.0/20 +203.148.80.0/22 +203.148.86.0/23 +203.149.92.0/22 +203.152.64.0/19 +203.152.128.0/19 +203.153.0.0/22 +203.156.192.0/18 +203.158.16.0/21 +203.160.52.0/22 +203.160.104.0/21 +203.160.129.0/24 +203.160.192.0/19 +203.161.0.0/22 +203.161.180.0/24 +203.161.183.0/24 +203.161.192.0/19 +203.166.160.0/19 +203.167.28.0/22 +203.168.0.0/19 +203.170.58.0/23 +203.171.0.0/22 +203.171.208.0/24 +203.171.224.0/20 +203.174.4.0/24 +203.174.6.0/24 +203.174.7.0/24 +203.174.96.0/19 +203.175.128.0/19 +203.175.192.0/18 +203.176.0.0/18 +203.176.64.0/19 +203.176.168.0/21 +203.184.80.0/20 +203.185.189.0/24 +203.187.160.0/19 +203.189.0.0/23 +203.189.6.0/23 +203.189.112.0/22 +203.189.192.0/19 +203.189.240.0/22 +203.190.96.0/20 +203.190.249.0/24 +203.191.0.0/23 +203.191.2.0/24 +203.191.5.0/24 +203.191.7.0/24 +203.191.16.0/20 +203.191.64.0/18 +203.191.133.0/24 +203.191.144.0/21 +203.191.152.0/21 +203.192.0.0/19 +203.193.224.0/19 +203.194.120.0/21 +203.195.64.0/19 +203.195.112.0/21 +203.195.128.0/17 +203.196.0.0/21 +203.196.8.0/21 +203.196.28.0/22 +203.201.181.0/24 +203.201.182.0/24 +203.202.236.0/22 +203.205.64.0/19 +203.205.128.0/17 +203.207.64.0/20 +203.207.80.0/21 +203.207.88.0/22 +203.207.92.0/22 +203.207.96.0/20 +203.207.112.0/20 +203.207.128.0/18 +203.207.192.0/21 +203.207.200.0/21 +203.207.208.0/20 +203.207.224.0/19 +203.208.32.0/19 +203.209.224.0/19 +203.212.0.0/20 +203.212.80.0/20 +203.215.232.0/21 +203.217.164.0/22 +203.223.16.0/21 +204.52.191.0/24 +210.2.0.0/20 +210.2.16.0/20 +210.5.0.0/19 +210.5.56.0/21 +210.5.128.0/20 +210.5.144.0/20 +210.7.56.0/22 +210.7.60.0/22 +210.12.0.0/18 +210.12.64.0/18 +210.12.128.0/18 +210.12.192.0/18 +210.13.0.0/18 +210.13.64.0/18 +210.13.128.0/17 +210.14.64.0/19 +210.14.112.0/20 +210.14.128.0/19 +210.14.160.0/19 +210.14.192.0/19 +210.14.224.0/19 +210.15.0.0/19 +210.15.32.0/19 +210.15.64.0/19 +210.15.96.0/19 +210.15.128.0/18 +210.16.104.0/22 +210.16.128.0/18 +210.21.0.0/17 +210.21.128.0/17 +210.22.0.0/16 +210.23.32.0/19 +210.25.0.0/16 +210.26.0.0/15 +210.28.0.0/14 +210.32.0.0/14 +210.36.0.0/14 +210.40.0.0/13 +210.51.0.0/16 +210.52.0.0/18 +210.52.64.0/18 +210.52.128.0/17 +210.53.0.0/17 +210.53.128.0/17 +210.56.192.0/19 +210.72.0.0/17 +210.72.128.0/19 +210.72.160.0/19 +210.72.192.0/18 +210.73.0.0/19 +210.73.32.0/19 +210.73.64.0/18 +210.73.128.0/17 +210.74.0.0/19 +210.74.32.0/19 +210.74.64.0/19 +210.74.96.0/19 +210.74.128.0/19 +210.74.160.0/19 +210.74.192.0/18 +210.75.0.0/17 +210.75.128.0/19 +210.75.160.0/19 +210.75.192.0/19 +210.75.224.0/19 +210.76.0.0/19 +210.76.32.0/19 +210.76.64.0/18 +210.76.128.0/18 +210.76.192.0/19 +210.76.224.0/19 +210.77.0.0/19 +210.77.32.0/19 +210.77.64.0/19 +210.77.96.0/19 +210.77.128.0/17 +210.78.0.0/19 +210.78.32.0/19 +210.78.64.0/18 +210.78.128.0/19 +210.78.160.0/19 +210.78.192.0/18 +210.79.64.0/18 +210.79.224.0/19 +210.82.0.0/15 +210.87.72.0/23 +210.87.114.0/23 +210.87.128.0/20 +210.87.144.0/20 +210.87.160.0/19 +210.185.192.0/18 +210.192.96.0/19 +211.64.0.0/14 +211.68.0.0/15 +211.70.0.0/15 +211.80.0.0/16 +211.81.0.0/16 +211.82.0.0/16 +211.83.0.0/16 +211.84.0.0/15 +211.86.0.0/15 +211.88.0.0/16 +211.89.0.0/16 +211.90.0.0/15 +211.92.0.0/15 +211.94.0.0/15 +211.96.0.0/15 +211.98.0.0/16 +211.99.0.0/18 +211.99.64.0/19 +211.99.96.0/19 +211.99.128.0/17 +211.100.0.0/16 +211.101.0.0/18 +211.101.64.0/18 +211.101.128.0/17 +211.102.0.0/16 +211.103.0.0/17 +211.103.128.0/17 +211.136.0.0/14 +211.140.0.0/15 +211.142.0.0/17 +211.142.128.0/17 +211.143.0.0/16 +211.144.0.0/15 +211.146.0.0/16 +211.147.0.0/17 +211.147.128.0/18 +211.147.192.0/20 +211.147.208.0/20 +211.147.224.0/19 +211.148.0.0/14 +211.152.0.0/15 +211.154.0.0/16 +211.155.0.0/18 +211.155.64.0/19 +211.155.96.0/19 +211.155.128.0/17 +211.156.0.0/18 +211.156.64.0/20 +211.156.80.0/20 +211.156.96.0/19 +211.156.128.0/19 +211.156.160.0/20 +211.156.176.0/20 +211.156.192.0/18 +211.157.0.0/16 +211.158.0.0/15 +211.160.0.0/14 +211.164.0.0/15 +211.166.0.0/16 +211.167.0.0/17 +211.167.128.0/19 +211.167.160.0/20 +211.167.176.0/20 +211.167.192.0/18 +212.64.0.0/17 +212.129.128.0/17 +218.0.0.0/16 +218.1.0.0/16 +218.2.0.0/15 +218.4.0.0/15 +218.6.0.0/16 +218.7.0.0/16 +218.8.0.0/15 +218.10.0.0/16 +218.11.0.0/16 +218.12.0.0/16 +218.13.0.0/16 +218.14.0.0/15 +218.16.0.0/14 +218.20.0.0/16 +218.21.0.0/17 +218.21.128.0/17 +218.22.0.0/15 +218.24.0.0/15 +218.26.0.0/16 +218.27.0.0/16 +218.28.0.0/15 +218.30.0.0/15 +218.56.0.0/14 +218.60.0.0/15 +218.62.0.0/17 +218.62.128.0/17 +218.63.0.0/16 +218.64.0.0/15 +218.66.0.0/16 +218.67.0.0/17 +218.67.128.0/17 +218.68.0.0/15 +218.70.0.0/15 +218.72.0.0/14 +218.76.0.0/15 +218.78.0.0/15 +218.80.0.0/14 +218.84.0.0/14 +218.88.0.0/13 +218.96.0.0/15 +218.98.0.0/17 +218.98.128.0/18 +218.98.192.0/19 +218.98.224.0/19 +218.99.0.0/16 +218.100.88.0/21 +218.100.96.0/19 +218.100.128.0/17 +218.104.0.0/17 +218.104.128.0/19 +218.104.160.0/19 +218.104.192.0/21 +218.104.200.0/21 +218.104.208.0/20 +218.104.224.0/19 +218.105.0.0/16 +218.106.0.0/15 +218.108.0.0/16 +218.109.0.0/16 +218.185.192.0/19 +218.185.240.0/21 +218.192.0.0/16 +218.193.0.0/16 +218.194.0.0/16 +218.195.0.0/16 +218.196.0.0/14 +218.200.0.0/14 +218.204.0.0/15 +218.206.0.0/15 +218.240.0.0/14 +218.244.0.0/18 +218.244.64.0/19 +218.244.96.0/19 +218.244.128.0/17 +218.245.0.0/16 +218.246.0.0/15 +218.249.0.0/16 +219.72.0.0/16 +219.82.0.0/16 +219.83.128.0/17 +219.90.68.0/22 +219.90.72.0/22 +219.90.76.0/22 +219.128.0.0/12 +219.144.0.0/14 +219.148.0.0/16 +219.149.0.0/17 +219.149.128.0/18 +219.149.192.0/18 +219.150.0.0/19 +219.150.32.0/19 +219.150.64.0/19 +219.150.96.0/20 +219.150.112.0/20 +219.150.128.0/17 +219.151.0.0/19 +219.151.32.0/19 +219.151.64.0/18 +219.151.128.0/17 +219.152.0.0/15 +219.154.0.0/15 +219.156.0.0/15 +219.158.0.0/17 +219.158.128.0/17 +219.159.0.0/18 +219.159.64.0/18 +219.159.128.0/17 +219.216.0.0/15 +219.218.0.0/15 +219.220.0.0/16 +219.221.0.0/16 +219.222.0.0/15 +219.224.0.0/15 +219.226.0.0/16 +219.227.0.0/16 +219.228.0.0/15 +219.230.0.0/15 +219.232.0.0/14 +219.236.0.0/15 +219.238.0.0/15 +219.242.0.0/15 +219.244.0.0/14 +220.101.192.0/18 +220.112.0.0/14 +220.152.128.0/17 +220.154.0.0/16 +220.155.0.0/16 +220.158.240.0/22 +220.160.0.0/11 +220.192.0.0/15 +220.194.0.0/15 +220.196.0.0/14 +220.200.0.0/13 +220.231.0.0/18 +220.231.128.0/17 +220.232.64.0/18 +220.234.0.0/16 +220.242.0.0/15 +220.247.136.0/21 +220.248.0.0/14 +220.252.0.0/16 +221.0.0.0/15 +221.2.0.0/16 +221.3.0.0/17 +221.3.128.0/17 +221.4.0.0/16 +221.5.0.0/17 +221.5.128.0/17 +221.6.0.0/16 +221.7.0.0/19 +221.7.32.0/19 +221.7.64.0/19 +221.7.96.0/19 +221.7.128.0/17 +221.8.0.0/15 +221.10.0.0/16 +221.11.0.0/17 +221.11.128.0/18 +221.11.192.0/19 +221.11.224.0/19 +221.12.0.0/17 +221.12.128.0/18 +221.13.0.0/18 +221.13.64.0/19 +221.13.96.0/19 +221.13.128.0/17 +221.14.0.0/15 +221.122.0.0/15 +221.128.128.0/17 +221.129.0.0/16 +221.130.0.0/15 +221.133.224.0/19 +221.136.0.0/16 +221.137.0.0/16 +221.172.0.0/14 +221.176.0.0/13 +221.192.0.0/15 +221.194.0.0/16 +221.195.0.0/16 +221.196.0.0/15 +221.198.0.0/16 +221.199.0.0/19 +221.199.32.0/20 +221.199.48.0/20 +221.199.64.0/18 +221.199.128.0/18 +221.199.192.0/20 +221.199.224.0/19 +221.200.0.0/14 +221.204.0.0/15 +221.206.0.0/16 +221.207.0.0/18 +221.207.64.0/18 +221.207.128.0/17 +221.208.0.0/14 +221.212.0.0/16 +221.213.0.0/16 +221.214.0.0/15 +221.216.0.0/13 +221.224.0.0/13 +221.232.0.0/14 +221.236.0.0/15 +221.238.0.0/16 +221.239.0.0/17 +221.239.128.0/17 +222.16.0.0/15 +222.18.0.0/15 +222.20.0.0/15 +222.22.0.0/16 +222.23.0.0/16 +222.24.0.0/15 +222.26.0.0/15 +222.28.0.0/14 +222.32.0.0/11 +222.64.0.0/13 +222.72.0.0/15 +222.74.0.0/16 +222.75.0.0/16 +222.76.0.0/14 +222.80.0.0/15 +222.82.0.0/16 +222.83.0.0/17 +222.83.128.0/17 +222.84.0.0/16 +222.85.0.0/17 +222.85.128.0/17 +222.86.0.0/15 +222.88.0.0/15 +222.90.0.0/15 +222.92.0.0/14 +222.125.0.0/16 +222.126.128.0/17 +222.128.0.0/14 +222.132.0.0/14 +222.136.0.0/13 +222.160.0.0/15 +222.162.0.0/16 +222.163.0.0/19 +222.163.32.0/19 +222.163.64.0/18 +222.163.128.0/17 +222.168.0.0/15 +222.170.0.0/15 +222.172.0.0/17 +222.172.128.0/17 +222.173.0.0/16 +222.174.0.0/15 +222.176.0.0/13 +222.184.0.0/13 +222.192.0.0/14 +222.196.0.0/15 +222.198.0.0/16 +222.199.0.0/16 +222.200.0.0/14 +222.204.0.0/15 +222.206.0.0/15 +222.208.0.0/13 +222.216.0.0/15 +222.218.0.0/16 +222.219.0.0/16 +222.220.0.0/15 +222.222.0.0/15 +222.240.0.0/13 +222.248.0.0/16 +222.249.0.0/17 +222.249.128.0/19 +222.249.160.0/20 +222.249.176.0/20 +222.249.192.0/18 +223.0.0.0/15 +223.2.0.0/15 +223.4.0.0/14 +223.8.0.0/13 +223.20.0.0/15 +223.27.184.0/22 +223.29.208.0/22 +223.29.252.0/22 +223.64.0.0/11 +223.96.0.0/12 +223.112.0.0/14 +223.116.0.0/15 +223.120.128.0/17 +223.121.128.0/17 +223.123.128.0/17 +223.124.0.0/14 +223.128.0.0/15 +223.144.0.0/12 +223.160.0.0/14 +223.166.0.0/15 +223.192.0.0/15 +223.198.0.0/15 +223.201.0.0/16 +223.202.0.0/15 +223.208.0.0/14 +223.212.0.0/15 +223.214.0.0/15 +223.220.0.0/15 +223.223.176.0/21 +223.223.184.0/21 +223.223.192.0/20 +223.240.0.0/13 +223.248.0.0/14 +223.252.128.0/17 +223.254.0.0/16 +223.255.0.0/17 +223.255.236.0/22 +223.255.252.0/23 \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/custom/openclash_custom_domain_dns_policy.list b/luci-app-openclash/root/etc/openclash/custom/openclash_custom_domain_dns_policy.list index 7f4c4e31b..0b01d7aef 100644 --- a/luci-app-openclash/root/etc/openclash/custom/openclash_custom_domain_dns_policy.list +++ b/luci-app-openclash/root/etc/openclash/custom/openclash_custom_domain_dns_policy.list @@ -1,5 +1,6 @@ #'www.baidu.com': '114.114.114.114' #'+.internal.crop.com': '10.0.0.1' +#"_vlmcs._tcp.lan": '127.0.0.1:53' #"geosite:category-games@cn": [https://doh.pub/dns-query, 114.114.114.114, 223.5.5.5] #"geosite:google": [tls://8.8.4.4, https://1.0.0.1/dns-query] #"geosite:cn": [https://doh.pub/dns-query, 114.114.114.114, 223.5.5.5] \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/custom/openclash_custom_sniffer.yaml b/luci-app-openclash/root/etc/openclash/custom/openclash_custom_sniffer.yaml index 480eb275e..75005f69f 100644 --- a/luci-app-openclash/root/etc/openclash/custom/openclash_custom_sniffer.yaml +++ b/luci-app-openclash/root/etc/openclash/custom/openclash_custom_sniffer.yaml @@ -7,7 +7,7 @@ sniffer: parse-pure-ip: true # 是否使用嗅探结果作为实际访问,默认 true # 全局配置,优先级低于 sniffer.sniff 实际配置 - override-destination: false + override-destination: true sniff: # TLS 和 QUIC 默认如果不配置 ports 默认嗅探 443 QUIC: ports: [ 443 ] diff --git a/luci-app-openclash/root/etc/uci-defaults/luci-openclash b/luci-app-openclash/root/etc/uci-defaults/luci-openclash index c7605649f..32775e645 100644 --- a/luci-app-openclash/root/etc/uci-defaults/luci-openclash +++ b/luci-app-openclash/root/etc/uci-defaults/luci-openclash @@ -21,28 +21,45 @@ mkdir -p /etc/openclash/core mkdir -p /etc/openclash/history mkdir -p /usr/share/openclash/backup -#Backup -cp -f "/etc/config/openclash" "/usr/share/openclash/backup/openclash" >/dev/null 2>&1 -cp -f "/etc/openclash/custom/openclash_custom_rules.list" "/usr/share/openclash/backup/openclash_custom_rules.list" >/dev/null 2>&1 -cp -f "/etc/openclash/custom/openclash_custom_rules_2.list" "/usr/share/openclash/backup/openclash_custom_rules_2.list" >/dev/null 2>&1 -cp -f "/etc/openclash/custom/openclash_custom_hosts.list" "/usr/share/openclash/backup/openclash_custom_hosts.list" >/dev/null 2>&1 -cp -f "/etc/openclash/custom/openclash_custom_fake_filter.list" "/usr/share/openclash/backup/openclash_custom_fake_filter.list" >/dev/null 2>&1 -cp -f "/etc/openclash/custom/openclash_custom_domain_dns.list" "/usr/share/openclash/backup/openclash_custom_domain_dns.list" >/dev/null 2>&1 -cp -f "/etc/openclash/custom/openclash_custom_domain_dns_policy.list" "/usr/share/openclash/backup/openclash_custom_domain_dns_policy.list" >/dev/null 2>&1 -cp -f "/etc/openclash/custom/openclash_custom_fallback_filter.yaml" "/usr/share/openclash/backup/openclash_custom_fallback_filter.yaml" >/dev/null 2>&1 -cp -f "/etc/openclash/custom/openclash_custom_sniffer.yaml" "/usr/share/openclash/backup/openclash_custom_sniffer.yaml" >/dev/null 2>&1 -cp -f "/etc/openclash/custom/openclash_custom_localnetwork_ipv4.list" "/usr/share/openclash/backup/openclash_custom_localnetwork_ipv4.list" >/dev/null 2>&1 -cp -f "/etc/openclash/custom/openclash_custom_localnetwork_ipv6.list" "/usr/share/openclash/backup/openclash_custom_localnetwork_ipv6.list" >/dev/null 2>&1 -cp -f "/etc/openclash/custom/openclash_custom_chnroute_pass.list" "/usr/share/openclash/backup/openclash_custom_chnroute_pass.list" >/dev/null 2>&1 -cp -f "/etc/openclash/custom/openclash_custom_chnroute6_pass.list" "/usr/share/openclash/backup/openclash_custom_chnroute6_pass.list" >/dev/null 2>&1 -cp -f "/etc/openclash/custom/openclash_custom_firewall_rules.sh" "/usr/share/openclash/backup/openclash_custom_firewall_rules.sh" >/dev/null 2>&1 -cp -f "/etc/openclash/custom/openclash_custom_overwrite.sh" "/usr/share/openclash/backup/openclash_custom_overwrite.sh" >/dev/null 2>&1 - mkdir -p /lib/upgrade/keep.d cat > "/lib/upgrade/keep.d/luci-app-openclash" <<-EOF /etc/openclash/ EOF +#Set Chnroute Format +FW4=$(command -v fw4) +if [ -n "$FW4" ]; then + #v4 + if [ -z "$(cat "/etc/openclash/china_ip_route.ipset" |grep "define china_ip_route")" ]; then + echo "define china_ip_route = {" >/tmp/china_ip_route.list + awk '!/^$/&&!/^#/{printf(" %s,'" "'\n",$0)}' /etc/openclash/china_ip_route.ipset >>/tmp/china_ip_route.list + echo "}" >>/tmp/china_ip_route.list + echo "add set inet fw4 china_ip_route { type ipv4_addr; flags interval; auto-merge; }" >>/tmp/china_ip_route.list + echo 'add element inet fw4 china_ip_route $china_ip_route' >>/tmp/china_ip_route.list + fi + #v6 + if [ -z "$(cat "/etc/openclash/china_ip6_route.ipset" |grep "define china_ip6_route")" ]; then + echo "define china_ip6_route = {" >/tmp/china_ip6_route.list + awk '!/^$/&&!/^#/{printf(" %s,'" "'\n",$0)}' /etc/openclash/china_ip6_route.ipset >>/tmp/china_ip6_route.list + echo "}" >>/tmp/china_ip6_route.list + echo "add set inet fw4 china_ip6_route { type ipv6_addr; flags interval; auto-merge; }" >>/tmp/china_ip6_route.list + echo 'add element inet fw4 china_ip6_route $china_ip6_route' >>/tmp/china_ip6_route.list + fi +else + #v4 + if [ -z "$(cat "/etc/openclash/china_ip_route.ipset" |grep "create china_ip_route")" ]; then + echo "create china_ip_route hash:net family inet hashsize 1024 maxelem 1000000" >/tmp/china_ip_route.list + awk '!/^$/&&!/^#/{printf("add china_ip_route %s'" "'\n",$0)}' /etc/openclash/china_ip_route.ipset >>/tmp/china_ip_route.list + fi + #v6 + if [ -z "$(cat "/etc/openclash/china_ip6_route.ipset" |grep "create china_ip6_route")" ]; then + echo "create china_ip6_route hash:net family inet6 hashsize 1024 maxelem 1000000" >/tmp/china_ip6_route.list + awk '!/^$/&&!/^#/{printf("add china_ip6_route %s'" "'\n",$0)}' /etc/openclash/china_ip6_route.ipset >>/tmp/china_ip6_route.list + fi +fi +mv -f /tmp/china_ip_route.list /etc/openclash/china_ip_route.ipset >/dev/null 2>&1 +mv -f /tmp/china_ip6_route.list /etc/openclash/china_ip6_route.ipset >/dev/null 2>&1 + #Set Dashboard Secret if [ -z "$(uci -q get openclash.config.dashboard_password)" ]; then uci -q set openclash.config.dashboard_password="$(tr -cd 'a-zA-Z0-9' /dev/null| head -c8 || date +%N| md5sum |head -c8)" @@ -100,12 +117,44 @@ fi uci -q commit openclash +#Backup +cp -f "/etc/config/openclash" "/usr/share/openclash/backup/openclash" >/dev/null 2>&1 +cp -f "/etc/openclash/custom/openclash_custom_rules.list" "/usr/share/openclash/backup/openclash_custom_rules.list" >/dev/null 2>&1 +cp -f "/etc/openclash/custom/openclash_custom_rules_2.list" "/usr/share/openclash/backup/openclash_custom_rules_2.list" >/dev/null 2>&1 +cp -f "/etc/openclash/custom/openclash_custom_hosts.list" "/usr/share/openclash/backup/openclash_custom_hosts.list" >/dev/null 2>&1 +cp -f "/etc/openclash/custom/openclash_custom_fake_filter.list" "/usr/share/openclash/backup/openclash_custom_fake_filter.list" >/dev/null 2>&1 +cp -f "/etc/openclash/custom/openclash_custom_domain_dns.list" "/usr/share/openclash/backup/openclash_custom_domain_dns.list" >/dev/null 2>&1 +cp -f "/etc/openclash/custom/openclash_custom_domain_dns_policy.list" "/usr/share/openclash/backup/openclash_custom_domain_dns_policy.list" >/dev/null 2>&1 +cp -f "/etc/openclash/custom/openclash_custom_fallback_filter.yaml" "/usr/share/openclash/backup/openclash_custom_fallback_filter.yaml" >/dev/null 2>&1 +cp -f "/etc/openclash/custom/openclash_custom_sniffer.yaml" "/usr/share/openclash/backup/openclash_custom_sniffer.yaml" >/dev/null 2>&1 +cp -f "/etc/openclash/custom/openclash_custom_localnetwork_ipv4.list" "/usr/share/openclash/backup/openclash_custom_localnetwork_ipv4.list" >/dev/null 2>&1 +cp -f "/etc/openclash/custom/openclash_custom_localnetwork_ipv6.list" "/usr/share/openclash/backup/openclash_custom_localnetwork_ipv6.list" >/dev/null 2>&1 +cp -f "/etc/openclash/custom/openclash_custom_chnroute_pass.list" "/usr/share/openclash/backup/openclash_custom_chnroute_pass.list" >/dev/null 2>&1 +cp -f "/etc/openclash/custom/openclash_custom_chnroute6_pass.list" "/usr/share/openclash/backup/openclash_custom_chnroute6_pass.list" >/dev/null 2>&1 +cp -f "/etc/openclash/custom/openclash_custom_firewall_rules.sh" "/usr/share/openclash/backup/openclash_custom_firewall_rules.sh" >/dev/null 2>&1 +cp -f "/etc/openclash/custom/openclash_custom_overwrite.sh" "/usr/share/openclash/backup/openclash_custom_overwrite.sh" >/dev/null 2>&1 +cp -f "/etc/openclash/custom/openclash_custom_overwrite.sh" "/usr/share/openclash/backup/openclash_custom_overwrite.sh" >/dev/null 2>&1 +cp -f "/etc/openclash/china_ip_route.ipset" "/usr/share/openclash/backup/china_ip_route.ipset" >/dev/null 2>&1 +cp -f "/etc/openclash/china_ip6_route.ipset" "/usr/share/openclash/backup/china_ip6_route.ipset" >/dev/null 2>&1 + #Restore if [ -f "/tmp/openclash.bak" ]; then #delete old geosite database first if [ "/etc/openclash/GeoSite.dat" -nt "/tmp/openclash/GeoSite.dat" ]; then rm -rf "/tmp/openclash/GeoSite.dat" >/dev/null 2>&1 fi + #delete error china_ip_route first + if [ -n "$FW4" ]; then + if [ -z "$(cat "/tmp/openclash/china_ip_route.ipset" |grep "define china_ip_route")" ]; then + rm -f "/tmp/openclash/china_ip_route.ipset" >/dev/null 2>&1 + rm -f "/tmp/openclash/china_ip6_route.ipset" >/dev/null 2>&1 + fi + else + if [ -z "$(cat "/tmp/openclash/china_ip_route.ipset" |grep "create china_ip_route")" ]; then + rm -f "/tmp/openclash/china_ip_route.ipset" >/dev/null 2>&1 + rm -f "/tmp/openclash/china_ip6_route.ipset" >/dev/null 2>&1 + fi + fi mv -f "/tmp/openclash.bak" "/etc/config/openclash" >/dev/null 2>&1 cp -rf "/tmp/openclash/." "/etc/openclash/" >/dev/null 2>&1 if [ -d "/tmp/openclash_dashboard/" ]; then diff --git a/luci-app-openclash/root/usr/share/openclash/clash_version.sh b/luci-app-openclash/root/usr/share/openclash/clash_version.sh index 17bba88d4..f2719ee3f 100644 --- a/luci-app-openclash/root/usr/share/openclash/clash_version.sh +++ b/luci-app-openclash/root/usr/share/openclash/clash_version.sh @@ -7,9 +7,11 @@ set_lock() { del_lock() { flock -u 884 2>/dev/null - rm -rf "/tmp/lock/openclash_clash_version.lock" + rm -rf "/tmp/lock/openclash_clash_version.lock" 2>/dev/null } +set_lock + TIME=$(date "+%Y-%m-%d-%H") CHTIME=$(date "+%Y-%m-%d-%H" -r "/tmp/clash_last_version" 2>/dev/null) LAST_OPVER="/tmp/clash_last_version" @@ -19,7 +21,6 @@ if [ -n "$1" ]; then github_address_mod="$1" fi LOG_FILE="/tmp/openclash.log" -set_lock if [ "$TIME" != "$CHTIME" ]; then if [ "$github_address_mod" != "0" ]; then diff --git a/luci-app-openclash/root/usr/share/openclash/openclash.sh b/luci-app-openclash/root/usr/share/openclash/openclash.sh index e933e2bf9..dc002db55 100644 --- a/luci-app-openclash/root/usr/share/openclash/openclash.sh +++ b/luci-app-openclash/root/usr/share/openclash/openclash.sh @@ -3,6 +3,7 @@ . /usr/share/openclash/ruby.sh . /usr/share/openclash/openclash_ps.sh . /usr/share/openclash/log.sh +. /lib/functions/procd.sh set_lock() { exec 889>"/tmp/lock/openclash_subs.lock" 2>/dev/null @@ -11,9 +12,11 @@ set_lock() { del_lock() { flock -u 889 2>/dev/null - rm -rf "/tmp/lock/openclash_subs.lock" + rm -rf "/tmp/lock/openclash_subs.lock" 2>/dev/null } +set_lock + LOGTIME=$(echo $(date "+%Y-%m-%d %H:%M:%S")) LOG_FILE="/tmp/openclash.log" CFG_FILE="/tmp/yaml_sub_tmp_config.yaml" @@ -26,7 +29,6 @@ CLASH="/etc/openclash/clash" CLASH_CONFIG="/etc/openclash" restart=0 only_download=0 -set_lock urlencode() { if [ "$#" -eq 1 ]; then @@ -34,12 +36,7 @@ urlencode() { fi } -kill_watchdog() { - watchdog_pids=$(unify_ps_pids "openclash_watchdog.sh") - for watchdog_pid in $watchdog_pids; do - kill -9 "$watchdog_pid" >/dev/null 2>&1 - done - +kill_streaming_unlock() { streaming_unlock_pids=$(unify_ps_pids "openclash_streaming_unlock.lua") for streaming_unlock_pid in $streaming_unlock_pids; do kill -9 "$streaming_unlock_pid" >/dev/null 2>&1 @@ -50,7 +47,7 @@ config_test() { if [ -f "$CLASH" ]; then LOG_OUT "Config File Download Successful, Test If There is Any Errors..." - test_info=$(nohup $CLASH -t -d $CLASH_CONFIG -f "$CFG_FILE") + test_info=$($CLASH -t -d $CLASH_CONFIG -f "$CFG_FILE") local IFS=$'\n' for i in $test_info; do if [ -n "$(echo "$i" |grep "configuration file")" ]; then @@ -254,14 +251,15 @@ change_dns() { if pidof clash >/dev/null; then /etc/init.d/openclash reload "restore" >/dev/null 2>&1 - [ "$(unify_ps_status "openclash_watchdog.sh")" -eq 0 ] && [ "$(unify_ps_prevent)" -eq 0 ] && nohup /usr/share/openclash/openclash_watchdog.sh & + procd_send_signal "openclash" "openclash-watchdog" CONT fi } config_download_direct() { if pidof clash >/dev/null && [ "$router_self_proxy" = 1 ]; then - kill_watchdog + kill_streaming_unlock + procd_send_signal "openclash" "openclash-watchdog" STOP /etc/init.d/openclash reload "revert" >/dev/null 2>&1 sleep 3 @@ -358,7 +356,11 @@ convert_custom_param() return fi local p_name="${1%%=*}" p_value="${1#*=}" - append_custom_params="${append_custom_params}&${p_name}=$(urlencode "$p_value")" + if [ -z "$append_custom_params" ]; then + append_custom_params="&${p_name}=$(urlencode "$p_value")" + else + append_custom_params="${append_custom_params}\`$(urlencode "$p_value")" + fi } sub_info_get() @@ -383,7 +385,13 @@ sub_info_get() config_get "sub_ua" "$section" "sub_ua" "Clash" if [ "$enabled" -eq 0 ]; then - return + if [ -n "$2" ]; then + if [ "$2" != "$CONFIG_FILE" ] && [ "$2" != "$name" ]; then + return + fi + else + return + fi fi if [ -z "$address" ]; then @@ -415,7 +423,7 @@ sub_info_get() BACKPACK_FILE="/etc/openclash/backup/$name.yaml" fi - if [ -n "$2" ] && [ "$2" != "$CONFIG_FILE" ]; then + if [ -n "$2" ] && [ "$2" != "$CONFIG_FILE" ] && [ "$2" != "$name" ]; then return fi @@ -508,13 +516,13 @@ config_foreach sub_info_get "config_subscribe" "$1" uci -q delete openclash.config.config_update_path uci commit openclash -if [ "$restart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ] && [ "$(find /tmp/lock/ |grep -v "openclash.lock" |grep -c "openclash")" -le 1 ]; then +if [ "$restart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ]; then /etc/init.d/openclash restart >/dev/null 2>&1 & -elif [ "$restart" -eq 0 ] && [ "$(unify_ps_prevent)" -eq 0 ] && [ "$(find /tmp/lock/ |grep -v "openclash.lock" |grep -c "openclash")" -le 1 ] && [ "$(uci -q get openclash.config.restart)" -eq 1 ]; then +elif [ "$restart" -eq 0 ] && [ "$(unify_ps_prevent)" -eq 0 ] && [ "$(uci -q get openclash.config.restart)" -eq 1 ]; then /etc/init.d/openclash restart >/dev/null 2>&1 & uci -q set openclash.config.restart=0 uci -q commit openclash -elif [ "$restart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ] && [ "$(find /tmp/lock/ |grep -v "openclash.lock" |grep -c "openclash")" -gt 1 ]; then +elif [ "$restart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ]; then uci -q set openclash.config.restart=1 uci -q commit openclash else diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_chnroute.sh b/luci-app-openclash/root/usr/share/openclash/openclash_chnroute.sh index 9a884b26c..691bfb73a 100644 --- a/luci-app-openclash/root/usr/share/openclash/openclash_chnroute.sh +++ b/luci-app-openclash/root/usr/share/openclash/openclash_chnroute.sh @@ -2,7 +2,6 @@ . /usr/share/openclash/openclash_ps.sh . /usr/share/openclash/log.sh - FW4=$(command -v fw4) set_lock() { exec 879>"/tmp/lock/openclash_chn.lock" 2>/dev/null @@ -11,9 +10,12 @@ del_lock() { flock -u 879 2>/dev/null - rm -rf "/tmp/lock/openclash_chn.lock" + rm -rf "/tmp/lock/openclash_chn.lock" 2>/dev/null } + set_lock + + FW4=$(command -v fw4) china_ip_route=$(uci -q get openclash.config.china_ip_route) china_ip6_route=$(uci -q get openclash.config.china_ip6_route) CHNR_CUSTOM_URL=$(uci -q get openclash.config.chnr_custom_url) @@ -24,7 +26,7 @@ en_mode=$(uci -q get openclash.config.en_mode) LOG_FILE="/tmp/openclash.log" restart=0 - set_lock + if [ "$small_flash_memory" != "1" ]; then chnr_path="/etc/openclash/china_ip_route.ipset" @@ -111,9 +113,9 @@ LOG_OUT "Chnroute6 Cidr List Update Error, Please Try Again Later..." fi - if [ "$restart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ] && [ "$(find /tmp/lock/ |grep -v "openclash.lock" |grep -c "openclash")" -le 1 ]; then + if [ "$restart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ]; then /etc/init.d/openclash restart >/dev/null 2>&1 & - elif [ "$restart" -eq 0 ] && [ "$(unify_ps_prevent)" -eq 0 ] && [ "$(find /tmp/lock/ |grep -v "openclash.lock" |grep -c "openclash")" -le 1 ] && [ "$(uci -q get openclash.config.restart)" -eq 1 ]; then + elif [ "$restart" -eq 0 ] && [ "$(unify_ps_prevent)" -eq 0 ] && [ "$(uci -q get openclash.config.restart)" -eq 1 ]; then /etc/init.d/openclash restart >/dev/null 2>&1 & uci -q set openclash.config.restart=0 uci -q commit openclash diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_core.sh b/luci-app-openclash/root/usr/share/openclash/openclash_core.sh index f96eb5b90..6d16e329a 100644 --- a/luci-app-openclash/root/usr/share/openclash/openclash_core.sh +++ b/luci-app-openclash/root/usr/share/openclash/openclash_core.sh @@ -3,6 +3,18 @@ . /usr/share/openclash/openclash_ps.sh . /usr/share/openclash/log.sh +set_lock() { + exec 872>"/tmp/lock/openclash_core.lock" 2>/dev/null + flock -x 872 2>/dev/null +} + +del_lock() { + flock -u 872 2>/dev/null + rm -rf "/tmp/lock/openclash_core.lock" 2>/dev/null +} + +set_lock + github_address_mod=$(uci -q get openclash.config.github_address_mod || echo 0) if [ "$github_address_mod" = "0" ] && [ -z "$(echo $2 2>/dev/null |grep -E 'http|one_key_update')" ] && [ -z "$(echo $3 2>/dev/null |grep 'http')" ]; then LOG_OUT "Tip: If the download fails, try setting the CDN in Overwrite Settings - General Settings - Github Address Modify Options" @@ -29,6 +41,7 @@ fi if [ ! -f "/tmp/clash_last_version" ]; then LOG_OUT "Error: 【"$CORE_TYPE"】Core Version Check Error, Please Try Again Later..." SLOG_CLEAN + del_lock exit 0 fi @@ -77,6 +90,7 @@ if [ "$CORE_CV" != "$CORE_LV" ] || [ -z "$CORE_CV" ]; then LOG_OUT "【"$CORE_TYPE"】Core Update Failed. Please Make Sure Enough Flash Memory Space or Selected Correct Core Platform And Try Again!" rm -rf /tmp/clash_meta >/dev/null 2>&1 SLOG_CLEAN + del_lock exit 0 fi @@ -85,10 +99,10 @@ if [ "$CORE_CV" != "$CORE_LV" ] || [ -z "$CORE_CV" ]; then if [ "$?" == "0" ]; then LOG_OUT "【"$CORE_TYPE"】Core Update Successful!" if [ "$if_restart" -eq 1 ]; then - uci -q set openclash.config.config_reload=1 + uci -q set openclash.config.restart=1 uci -q commit openclash - if ([ -z "$2" ] || ([ -n "$2" ] && [ "$2" != "one_key_update" ])) && [ "$(find /tmp/lock/ |grep -v "openclash.lock" |grep -c "openclash")" -le 1 ] && [ "$(unify_ps_prevent)" -eq 0 ]; then - uci -q set openclash.config.config_reload=0 + if ([ -z "$2" ] || ([ -n "$2" ] && [ "$2" != "one_key_update" ])) && [ "$(unify_ps_prevent)" -eq 0 ]; then + uci -q set openclash.config.restart=0 uci -q commit openclash /etc/init.d/openclash restart >/dev/null 2>&1 & fi @@ -113,4 +127,4 @@ else fi rm -rf /tmp/clash_meta >/dev/null 2>&1 - +del_lock diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_debug.sh b/luci-app-openclash/root/usr/share/openclash/openclash_debug.sh index 22c83fc6e..d188aa648 100644 --- a/luci-app-openclash/root/usr/share/openclash/openclash_debug.sh +++ b/luci-app-openclash/root/usr/share/openclash/openclash_debug.sh @@ -9,7 +9,7 @@ set_lock() { del_lock() { flock -u 885 2>/dev/null - rm -rf "/tmp/lock/openclash_debug.lock" + rm -rf "/tmp/lock/openclash_debug.lock" 2>/dev/null } ipk_v() @@ -21,10 +21,10 @@ ipk_v() fi } -DEBUG_LOG="/tmp/openclash_debug.log" -LOGTIME=$(echo $(date "+%Y-%m-%d %H:%M:%S")) set_lock +DEBUG_LOG="/tmp/openclash_debug.log" +LOGTIME=$(echo $(date "+%Y-%m-%d %H:%M:%S")) enable_custom_dns=$(uci -q get openclash.config.enable_custom_dns) rule_source=$(uci -q get openclash.config.rule_source) enable_custom_clash_rules=$(uci -q get openclash.config.enable_custom_clash_rules) @@ -139,15 +139,11 @@ cat >> "$DEBUG_LOG" <<-EOF dnsmasq-full: $(ts_re "$(ipk_v "dnsmasq-full")") dnsmasq-full(ipset): $(ts_re "$(dnsmasq --version |grep -v no-ipset |grep ipset)") dnsmasq-full(nftset): $(ts_re "$(dnsmasq --version |grep nftset)") -coreutils: $(ts_re "$(ipk_v "coreutils")") -coreutils-nohup: $(ts_re "$(ipk_v "coreutils-nohup")") bash: $(ts_re "$(ipk_v "bash")") curl: $(ts_re "$(ipk_v "curl")") -ca-certificates: $(ts_re "$(ipk_v "ca-certificates")") +ca-bundle: $(ts_re "$(ipk_v "ca-bundle")") ipset: $(ts_re "$(ipk_v "ipset")") ip-full: $(ts_re "$(ipk_v "ip-full")") -libcap: $(ts_re "$(ipk_v "libcap")") -libcap-bin: $(ts_re "$(ipk_v "libcap-bin")") ruby: $(ts_re "$(ipk_v "ruby")") ruby-yaml: $(ts_re "$(ipk_v "ruby-yaml")") ruby-psych: $(ts_re "$(ipk_v "ruby-psych")") @@ -182,7 +178,6 @@ cat >> "$DEBUG_LOG" <<-EOF 运行状态: 运行中 运行内核:$core_type 进程pid: $(pidof clash) -运行权限: `getpcaps $(pidof clash)` 运行用户: $(ps |grep "/etc/openclash/clash" |grep -v grep |awk '{print $2}' 2>/dev/null) EOF else diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_download_dashboard.sh b/luci-app-openclash/root/usr/share/openclash/openclash_download_dashboard.sh index d1f31b8b4..81484ca2e 100644 --- a/luci-app-openclash/root/usr/share/openclash/openclash_download_dashboard.sh +++ b/luci-app-openclash/root/usr/share/openclash/openclash_download_dashboard.sh @@ -2,6 +2,18 @@ . /usr/share/openclash/log.sh . /lib/functions.sh + set_lock() { + exec 871>"/tmp/lock/openclash_dashboard.lock" 2>/dev/null + flock -x 871 2>/dev/null + } + + del_lock() { + flock -u 871 2>/dev/null + rm -rf "/tmp/lock/openclash_dashboard.lock" 2>/dev/null + } + + set_lock + DASH_NAME="$1" DASH_TYPE="$2" DASH_FILE_DIR="/tmp/dash.zip" @@ -28,6 +40,11 @@ DOWNLOAD_PATH="https://codeload.github.com/MetaCubeX/Yacd-meta/zip/refs/heads/gh-pages" FILE_PATH_INCLUDE="Yacd-meta-gh-pages" fi + elif [ "$DASH_NAME" == "zashboard" ]; then + UNPACK_FILE_DIR="/usr/share/openclash/ui/zashboard/" + BACKUP_FILE_DIR="/usr/share/openclash/ui/zashboard_backup/" + DOWNLOAD_PATH="https://codeload.github.com/Zephyruso/zashboard/zip/refs/heads/gh-pages" + FILE_PATH_INCLUDE="zashboard-gh-pages" else UNPACK_FILE_DIR="/usr/share/openclash/ui/metacubexd/" BACKUP_FILE_DIR="/usr/share/openclash/ui/metacubexd_backup/" @@ -49,6 +66,7 @@ rm -rf "$BACKUP_FILE_DIR" >/dev/null 2>&1 rm -rf "$DASH_FILE_TMP" >/dev/null 2>&1 LOG_OUT "Control Panel【$DASH_NAME - $DASH_TYPE】Download Successful!" && SLOG_CLEAN + del_lock exit 1 else LOG_OUT "Control Panel【$DASH_NAME - $DASH_TYPE】Unzip Error!" && SLOG_CLEAN @@ -56,6 +74,7 @@ rm -rf "$DASH_FILE_DIR" >/dev/null 2>&1 rm -rf "$BACKUP_FILE_DIR" >/dev/null 2>&1 rm -rf "$DASH_FILE_TMP" >/dev/null 2>&1 + del_lock exit 2 fi else @@ -64,6 +83,7 @@ rm -rf "$DASH_FILE_DIR" >/dev/null 2>&1 rm -rf "$BACKUP_FILE_DIR" >/dev/null 2>&1 rm -rf "$DASH_FILE_TMP" >/dev/null 2>&1 + del_lock exit 2 fi else @@ -72,5 +92,8 @@ rm -rf "$DASH_FILE_DIR" >/dev/null 2>&1 rm -rf "$DASH_FILE_TMP" >/dev/null 2>&1 LOG_OUT "Control Panel【$DASH_NAME - $DASH_TYPE】Download Error!" && SLOG_CLEAN + del_lock exit 0 fi + + del_lock diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_download_rule_list.sh b/luci-app-openclash/root/usr/share/openclash/openclash_download_rule_list.sh index 11d4a9b68..9ff636c40 100644 --- a/luci-app-openclash/root/usr/share/openclash/openclash_download_rule_list.sh +++ b/luci-app-openclash/root/usr/share/openclash/openclash_download_rule_list.sh @@ -2,11 +2,23 @@ . /usr/share/openclash/log.sh . /lib/functions.sh -urlencode() { - if [ "$#" -eq 1 ]; then - echo "$(/usr/share/openclash/openclash_urlencode.lua "$1")" - fi -} + urlencode() { + if [ "$#" -eq 1 ]; then + echo "$(/usr/share/openclash/openclash_urlencode.lua "$1")" + fi + } + + set_lock() { + exec 870>"/tmp/lock/openclash_rulelist.lock" 2>/dev/null + flock -x 870 2>/dev/null + } + + del_lock() { + flock -u 870 2>/dev/null + rm -rf "/tmp/lock/openclash_rulelist.lock" 2>/dev/null + } + + set_lock RULE_FILE_NAME="$1" LOG_FILE="/tmp/openclash.log" @@ -25,6 +37,7 @@ urlencode() { if [ -z "$DOWNLOAD_PATH" ]; then LOG_OUT "Rule File【$RULE_FILE_NAME】Download Error!" && SLOG_CLEAN + del_lock exit 0 fi @@ -70,15 +83,20 @@ urlencode() { fi rm -rf "$TMP_RULE_DIR" >/dev/null 2>&1 LOG_OUT "Rule File【$RULE_FILE_NAME】Download Successful!" && SLOG_CLEAN + del_lock exit 1 else LOG_OUT "Rule File【$RULE_FILE_NAME】No Change, Do Nothing!" && SLOG_CLEAN rm -rf "$TMP_RULE_DIR" >/dev/null 2>&1 rm -rf "$TMP_RULE_DIR_TMP" >/dev/null 2>&1 + del_lock exit 2 fi else rm -rf "$TMP_RULE_DIR" >/dev/null 2>&1 LOG_OUT "Rule File【$RULE_FILE_NAME】Download Error!" && SLOG_CLEAN + del_lock exit 0 fi + + del_lock diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_geoip.sh b/luci-app-openclash/root/usr/share/openclash/openclash_geoip.sh index 0140e0ff0..5b9e9f5cd 100644 --- a/luci-app-openclash/root/usr/share/openclash/openclash_geoip.sh +++ b/luci-app-openclash/root/usr/share/openclash/openclash_geoip.sh @@ -9,16 +9,17 @@ del_lock() { flock -u 873 2>/dev/null - rm -rf "/tmp/lock/openclash_geoip.lock" + rm -rf "/tmp/lock/openclash_geoip.lock" 2>/dev/null } + set_lock + small_flash_memory=$(uci get openclash.config.small_flash_memory 2>/dev/null) GEOIP_CUSTOM_URL=$(uci get openclash.config.geoip_custom_url 2>/dev/null) github_address_mod=$(uci -q get openclash.config.github_address_mod || echo 0) LOG_FILE="/tmp/openclash.log" restart=0 - set_lock - + if [ "$small_flash_memory" != "1" ]; then geoip_path="/etc/openclash/GeoIP.dat" mkdir -p /etc/openclash @@ -56,9 +57,9 @@ LOG_OUT "GeoIP Dat Update Error, Please Try Again Later..." fi - if [ "$restart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ] && [ "$(find /tmp/lock/ |grep -v "openclash.lock" |grep -c "openclash")" -le 1 ]; then + if [ "$restart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ]; then /etc/init.d/openclash restart >/dev/null 2>&1 & - elif [ "$restart" -eq 0 ] && [ "$(unify_ps_prevent)" -eq 0 ] && [ "$(find /tmp/lock/ |grep -v "openclash.lock" |grep -c "openclash")" -le 1 ] && [ "$(uci -q get openclash.config.restart)" -eq 1 ]; then + elif [ "$restart" -eq 0 ] && [ "$(unify_ps_prevent)" -eq 0 ] && [ "$(uci -q get openclash.config.restart)" -eq 1 ]; then /etc/init.d/openclash restart >/dev/null 2>&1 & uci -q set openclash.config.restart=0 uci -q commit openclash diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_geosite.sh b/luci-app-openclash/root/usr/share/openclash/openclash_geosite.sh index 64a20cfba..820a61bff 100644 --- a/luci-app-openclash/root/usr/share/openclash/openclash_geosite.sh +++ b/luci-app-openclash/root/usr/share/openclash/openclash_geosite.sh @@ -9,15 +9,16 @@ del_lock() { flock -u 874 2>/dev/null - rm -rf "/tmp/lock/openclash_geosite.lock" + rm -rf "/tmp/lock/openclash_geosite.lock" 2>/dev/null } + + set_lock small_flash_memory=$(uci get openclash.config.small_flash_memory 2>/dev/null) GEOSITE_CUSTOM_URL=$(uci get openclash.config.geosite_custom_url 2>/dev/null) github_address_mod=$(uci -q get openclash.config.github_address_mod || echo 0) LOG_FILE="/tmp/openclash.log" restart=0 - set_lock if [ "$small_flash_memory" != "1" ]; then geosite_path="/etc/openclash/GeoSite.dat" @@ -56,9 +57,9 @@ LOG_OUT "GeoSite Database Update Error, Please Try Again Later..." fi - if [ "$restart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ] && [ "$(find /tmp/lock/ |grep -v "openclash.lock" |grep -c "openclash")" -le 1 ]; then + if [ "$restart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ]; then /etc/init.d/openclash restart >/dev/null 2>&1 & - elif [ "$restart" -eq 0 ] && [ "$(unify_ps_prevent)" -eq 0 ] && [ "$(find /tmp/lock/ |grep -v "openclash.lock" |grep -c "openclash")" -le 1 ] && [ "$(uci -q get openclash.config.restart)" -eq 1 ]; then + elif [ "$restart" -eq 0 ] && [ "$(unify_ps_prevent)" -eq 0 ] && [ "$(uci -q get openclash.config.restart)" -eq 1 ]; then /etc/init.d/openclash restart >/dev/null 2>&1 & uci -q set openclash.config.restart=0 uci -q commit openclash diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_get_network.lua b/luci-app-openclash/root/usr/share/openclash/openclash_get_network.lua index 52fe50622..13e282b6a 100644 --- a/luci-app-openclash/root/usr/share/openclash/openclash_get_network.lua +++ b/luci-app-openclash/root/usr/share/openclash/openclash_get_network.lua @@ -4,6 +4,8 @@ require "nixio" require "luci.util" require "luci.sys" local ntm = require "luci.model.network".init() +local cidr = require "luci.ip" +local fs = require "luci.openclash" local type = arg[1] local rv = {} local wan, wan6 @@ -30,6 +32,7 @@ if wan then for i = 1, #wan do rv.wan[i] = { ipaddr = wan[i]:ipaddr(), + ip6addr = wan[i]:ip6addr(), gwaddr = wan[i]:gwaddr(), netmask = wan[i]:netmask(), dns = wan[i]:dnsaddrs(), @@ -150,4 +153,33 @@ if type == "wanip6" then end end +if type == "lan_cidr" then + if wan then + for o = 1, #(rv.wan) do + if rv.wan[o].proto ~= "pppoe" then + if rv.wan[o].ipaddr and rv.wan[o].netmask then + local network = cidr.IPv4(rv.wan[o].ipaddr, rv.wan[o].netmask):network():string() + local prefix = cidr.IPv4(rv.wan[o].ipaddr, rv.wan[o].netmask):prefix() + print(network.."/"..prefix) + end + end + end + end +end + +if type == "lan_cidr6" then + if wan then + for o = 1, #(rv.wan) do + if rv.wan[o].proto ~= "pppoe" then + if rv.wan[o].ip6addr then + local ip6, prefix = rv.wan[o].ip6addr:match("([^/]+)/(%d+)") + local network = cidr.IPv6(ip6, tonumber(prefix)):network():string() + local prefix = cidr.IPv6(ip6, tonumber(prefix)):prefix() + print(network.."/"..prefix) + end + end + end + end +end + os.exit(0) \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_history_get.sh b/luci-app-openclash/root/usr/share/openclash/openclash_history_get.sh index a7f4bfd91..ae2af7427 100644 --- a/luci-app-openclash/root/usr/share/openclash/openclash_history_get.sh +++ b/luci-app-openclash/root/usr/share/openclash/openclash_history_get.sh @@ -9,7 +9,7 @@ set_lock() { del_lock() { flock -u 881 2>/dev/null - rm -rf "/tmp/lock/openclash_history_get.lock" + rm -rf "/tmp/lock/openclash_history_get.lock" 2>/dev/null } close_all_conection() { @@ -24,8 +24,11 @@ close_all_conection() { curl -m 2 -H "Authorization: Bearer ${SECRET}" -H "Content-Type:application/json" -X DELETE http://"$LAN_IP":"$PORT"/connections >/dev/null 2>&1 } +set_lock + if [ "$1" = "close_all_conection" ]; then close_all_conection + del_lock exit 0 fi @@ -38,8 +41,6 @@ core_version=$(uci -q get openclash.config.core_version || echo 0) CACHE_PATH_OLD="/etc/openclash/.cache" source "/etc/openwrt_release" -set_lock - if [ -z "$CONFIG_FILE" ] || [ ! -f "$CONFIG_FILE" ]; then CONFIG_FILE=$(uci get openclash.config.config_path 2>/dev/null) CONFIG_NAME=$(echo "$CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null) diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_ipdb.sh b/luci-app-openclash/root/usr/share/openclash/openclash_ipdb.sh index aa74324a4..bc0f01b04 100644 --- a/luci-app-openclash/root/usr/share/openclash/openclash_ipdb.sh +++ b/luci-app-openclash/root/usr/share/openclash/openclash_ipdb.sh @@ -9,15 +9,16 @@ del_lock() { flock -u 880 2>/dev/null - rm -rf "/tmp/lock/openclash_ipdb.lock" + rm -rf "/tmp/lock/openclash_ipdb.lock" 2>/dev/null } + + set_lock small_flash_memory=$(uci get openclash.config.small_flash_memory 2>/dev/null) GEOIP_CUSTOM_URL=$(uci get openclash.config.geo_custom_url 2>/dev/null) github_address_mod=$(uci -q get openclash.config.github_address_mod || echo 0) LOG_FILE="/tmp/openclash.log" restart=0 - set_lock if [ "$small_flash_memory" != "1" ]; then geoip_path="/etc/openclash/Country.mmdb" @@ -55,9 +56,9 @@ LOG_OUT "Geoip Database Update Error, Please Try Again Later..." fi - if [ "$restart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ] && [ "$(find /tmp/lock/ |grep -v "openclash.lock" |grep -c "openclash")" -le 1 ]; then + if [ "$restart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ]; then /etc/init.d/openclash restart >/dev/null 2>&1 & - elif [ "$restart" -eq 0 ] && [ "$(unify_ps_prevent)" -eq 0 ] && [ "$(find /tmp/lock/ |grep -v "openclash.lock" |grep -c "openclash")" -le 1 ] && [ "$(uci -q get openclash.config.restart)" -eq 1 ]; then + elif [ "$restart" -eq 0 ] && [ "$(unify_ps_prevent)" -eq 0 ] && [ "$(uci -q get openclash.config.restart)" -eq 1 ]; then /etc/init.d/openclash restart >/dev/null 2>&1 & uci -q set openclash.config.restart=0 uci -q commit openclash diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_rule.sh b/luci-app-openclash/root/usr/share/openclash/openclash_rule.sh index a494563c5..4b9b27dc7 100644 --- a/luci-app-openclash/root/usr/share/openclash/openclash_rule.sh +++ b/luci-app-openclash/root/usr/share/openclash/openclash_rule.sh @@ -11,116 +11,117 @@ del_lock() { flock -u 877 2>/dev/null - rm -rf "/tmp/lock/openclash_rule.lock" + rm -rf "/tmp/lock/openclash_rule.lock" 2>/dev/null } yml_other_rules_dl() { - local section="$1" - local enabled config - config_get_bool "enabled" "$section" "enabled" "1" - config_get "config" "$section" "config" "" - - if [ "$enabled" = "0" ] || [ "$config" != "$2" ]; then - return - fi - - if [ -n "$rule_name" ]; then - LOG_OUT "Warrning: Multiple Other-Rules-Configurations Enabled, Ignore..." - return - fi - - config_get "rule_name" "$section" "rule_name" "" - - LOG_OUT "Start Downloading Third Party Rules in Use..." - if [ "$rule_name" = "lhie1" ]; then - if [ "$github_address_mod" != "0" ]; then - if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then - curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 "$github_address_mod"gh/dler-io/Rules@master/Clash/Rule.yaml -o /tmp/rules.yaml 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE" - else - curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/dler-io/Rules/master/Clash/Rule.yaml -o /tmp/rules.yaml 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE" - fi - else - curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/dler-io/Rules/master/Clash/Rule.yaml -o /tmp/rules.yaml 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE" + local section="$1" + local enabled config + config_get_bool "enabled" "$section" "enabled" "1" + config_get "config" "$section" "config" "" + + if [ "$enabled" = "0" ] || [ "$config" != "$2" ]; then + return fi - sed -i '1i rules:' /tmp/rules.yaml - fi - if [ -s "/tmp/rules.yaml" ]; then - LOG_OUT "Download Successful, Start Preprocessing Rule File..." - ruby -ryaml -rYAML -I "/usr/share/openclash" -E UTF-8 -e " - begin - YAML.load_file('/tmp/rules.yaml'); - rescue Exception => e - YAML.LOG('Error: Unable To Parse Updated Rules File,【${rule_name}:' + e.message + '】'); - system 'rm -rf /tmp/rules.yaml 2>/dev/null'; - end - " 2>/dev/null >> $LOG_FILE - if [ $? -ne 0 ]; then - LOG_OUT "Error: Ruby Works Abnormally, Please Check The Ruby Library Depends!" - rm -rf /tmp/rules.yaml >/dev/null 2>&1 - SLOG_CLEAN - del_lock - exit 0 - elif [ ! -f "/tmp/rules.yaml" ]; then - LOG_OUT "Error:【$rule_name】Rule File Format Validation Failed, Please Try Again Later..." - rm -rf /tmp/rules.yaml >/dev/null 2>&1 - SLOG_CLEAN - del_lock - exit 0 - elif ! "$(ruby_read "/tmp/rules.yaml" ".key?('rules')")" ; then - LOG_OUT "Error: Updated Others Rules【$rule_name】Has No Rules Field, Update Exit..." - rm -rf /tmp/rules.yaml >/dev/null 2>&1 - SLOG_CLEAN - del_lock - exit 0 - #校验是否含有新策略组 - elif ! "$(ruby -ryaml -rYAML -I "/usr/share/openclash" -E UTF-8 -e " - Value = YAML.load_file('/usr/share/openclash/res/${rule_name}.yaml'); - Value_1 = YAML.load_file('/tmp/rules.yaml'); - OLD_GROUP = Value['rules'].collect{|x| x.split(',')[2] or x.split(',')[1]}.uniq.map(&:strip); - NEW_GROUP = Value_1['rules'].collect{|x| x.split(',')[2] or x.split(',')[1]}.uniq.map(&:strip); - if (OLD_GROUP | NEW_GROUP).eql?(OLD_GROUP) then - if (OLD_GROUP | NEW_GROUP).eql?(NEW_GROUP) then - puts true + + if [ -n "$rule_name" ]; then + LOG_OUT "Warrning: Multiple Other-Rules-Configurations Enabled, Ignore..." + return + fi + + config_get "rule_name" "$section" "rule_name" "" + + LOG_OUT "Start Downloading Third Party Rules in Use..." + if [ "$rule_name" = "lhie1" ]; then + if [ "$github_address_mod" != "0" ]; then + if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then + curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 "$github_address_mod"gh/dler-io/Rules@master/Clash/Rule.yaml -o /tmp/rules.yaml 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE" + else + curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/dler-io/Rules/master/Clash/Rule.yaml -o /tmp/rules.yaml 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE" + fi + else + curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/dler-io/Rules/master/Clash/Rule.yaml -o /tmp/rules.yaml 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE" + fi + sed -i '1i rules:' /tmp/rules.yaml + fi + if [ -s "/tmp/rules.yaml" ]; then + LOG_OUT "Download Successful, Start Preprocessing Rule File..." + ruby -ryaml -rYAML -I "/usr/share/openclash" -E UTF-8 -e " + begin + YAML.load_file('/tmp/rules.yaml'); + rescue Exception => e + YAML.LOG('Error: Unable To Parse Updated Rules File,【${rule_name}:' + e.message + '】'); + system 'rm -rf /tmp/rules.yaml 2>/dev/null'; + end + " 2>/dev/null >> $LOG_FILE + if [ $? -ne 0 ]; then + LOG_OUT "Error: Ruby Works Abnormally, Please Check The Ruby Library Depends!" + rm -rf /tmp/rules.yaml >/dev/null 2>&1 + SLOG_CLEAN + del_lock + exit 0 + elif [ ! -f "/tmp/rules.yaml" ]; then + LOG_OUT "Error:【$rule_name】Rule File Format Validation Failed, Please Try Again Later..." + rm -rf /tmp/rules.yaml >/dev/null 2>&1 + SLOG_CLEAN + del_lock + exit 0 + elif ! "$(ruby_read "/tmp/rules.yaml" ".key?('rules')")" ; then + LOG_OUT "Error: Updated Others Rules【$rule_name】Has No Rules Field, Update Exit..." + rm -rf /tmp/rules.yaml >/dev/null 2>&1 + SLOG_CLEAN + del_lock + exit 0 + #校验是否含有新策略组 + elif ! "$(ruby -ryaml -rYAML -I "/usr/share/openclash" -E UTF-8 -e " + Value = YAML.load_file('/usr/share/openclash/res/${rule_name}.yaml'); + Value_1 = YAML.load_file('/tmp/rules.yaml'); + OLD_GROUP = Value['rules'].collect{|x| x.split(',')[2] or x.split(',')[1]}.uniq.map(&:strip); + NEW_GROUP = Value_1['rules'].collect{|x| x.split(',')[2] or x.split(',')[1]}.uniq.map(&:strip); + if (OLD_GROUP | NEW_GROUP).eql?(OLD_GROUP) then + if (OLD_GROUP | NEW_GROUP).eql?(NEW_GROUP) then + puts true + else + puts false + end else puts false end + ")" && [ -f "/usr/share/openclash/res/${rule_name}.yaml" ]; then + LOG_OUT "Error: Updated Others Rules【$rule_name】Has Incompatible Proxy-Group, Update Exit, Please Wait For OpenClash Update To Adapt..." + rm -rf /tmp/rules.yaml >/dev/null 2>&1 + SLOG_CLEAN + del_lock + exit 0 + fi + + #取出规则部分 + ruby_read "/tmp/rules.yaml" ".select {|x| 'rule-providers' == x or 'rules' == x }.to_yaml" > "$OTHER_RULE_FILE" + #合并 + cat "$OTHER_RULE_FILE" > "/tmp/rules.yaml" 2>/dev/null + rm -rf /tmp/other_rule* 2>/dev/null + + LOG_OUT "Check The Downloaded Rule File For Updates..." + cmp -s /usr/share/openclash/res/"$rule_name".yaml /tmp/rules.yaml + if [ "$?" -ne "0" ]; then + LOG_OUT "Detected that The Downloaded Rule File Has Been Updated, Starting To Replace..." + mv /tmp/rules.yaml /usr/share/openclash/res/"$rule_name".yaml >/dev/null 2>&1 + LOG_OUT "Other Rules【$rule_name】Update Successful!" + restart=1 else - puts false - end - ")" && [ -f "/usr/share/openclash/res/${rule_name}.yaml" ]; then - LOG_OUT "Error: Updated Others Rules【$rule_name】Has Incompatible Proxy-Group, Update Exit, Please Wait For OpenClash Update To Adapt..." - rm -rf /tmp/rules.yaml >/dev/null 2>&1 - SLOG_CLEAN - del_lock - exit 0 - fi - - #取出规则部分 - ruby_read "/tmp/rules.yaml" ".select {|x| 'rule-providers' == x or 'rules' == x }.to_yaml" > "$OTHER_RULE_FILE" - #合并 - cat "$OTHER_RULE_FILE" > "/tmp/rules.yaml" 2>/dev/null - rm -rf /tmp/other_rule* 2>/dev/null - - LOG_OUT "Check The Downloaded Rule File For Updates..." - cmp -s /usr/share/openclash/res/"$rule_name".yaml /tmp/rules.yaml - if [ "$?" -ne "0" ]; then - LOG_OUT "Detected that The Downloaded Rule File Has Been Updated, Starting To Replace..." - mv /tmp/rules.yaml /usr/share/openclash/res/"$rule_name".yaml >/dev/null 2>&1 - LOG_OUT "Other Rules【$rule_name】Update Successful!" - restart=1 + LOG_OUT "Updated Other Rules【$rule_name】No Change, Do Nothing!" + fi else - LOG_OUT "Updated Other Rules【$rule_name】No Change, Do Nothing!" + LOG_OUT "Other Rules【$rule_name】Update Error, Please Try Again Later..." fi - else - LOG_OUT "Other Rules【$rule_name】Update Error, Please Try Again Later..." - fi } + + set_lock LOG_FILE="/tmp/openclash.log" RUlE_SOURCE=$(uci get openclash.config.rule_source 2>/dev/null) github_address_mod=$(uci -q get openclash.config.github_address_mod || echo 0) - set_lock if [ "$RUlE_SOURCE" = "0" ]; then LOG_OUT "Other Rules Not Enable, Update Stop!" @@ -151,9 +152,9 @@ if [ -z "$rule_name" ]; then LOG_OUT "Get Other Rules Settings Faild, Update Stop!" fi - if [ "$restart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ] && [ "$(find /tmp/lock/ |grep -v "openclash.lock" |grep -c "openclash")" -le 1 ]; then + if [ "$restart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ]; then /etc/init.d/openclash restart >/dev/null 2>&1 & - elif [ "$restart" -eq 0 ] && [ "$(unify_ps_prevent)" -eq 0 ] && [ "$(find /tmp/lock/ |grep -v "openclash.lock" |grep -c "openclash")" -le 1 ] && [ "$(uci -q get openclash.config.restart)" -eq 1 ]; then + elif [ "$restart" -eq 0 ] && [ "$(unify_ps_prevent)" -eq 0 ] && [ "$(uci -q get openclash.config.restart)" -eq 1 ]; then /etc/init.d/openclash restart >/dev/null 2>&1 & uci -q set openclash.config.restart=0 uci -q commit openclash diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_streaming_unlock.lua b/luci-app-openclash/root/usr/share/openclash/openclash_streaming_unlock.lua index 27d1ee1a2..d734d6156 100644 --- a/luci-app-openclash/root/usr/share/openclash/openclash_streaming_unlock.lua +++ b/luci-app-openclash/root/usr/share/openclash/openclash_streaming_unlock.lua @@ -1111,7 +1111,7 @@ function netflix_unlock_test() local filmId = 70143836 local url = "https://www.netflix.com/title/"..filmId local headers = "User-Agent: "..UA - local info = SYS.exec(string.format('curl -sLI --connect-timeout 5 -m 5 --speed-time 5 --speed-limit 1 --retry 2 -o /dev/null -w %%{json} -H "Content-Type: application/json" -H "%s" -XGET %s', headers, url)) + local info = SYS.exec(string.format('curl -sLI --connect-timeout 5 -m 5 --speed-time 5 --speed-limit 1 --retry 2 -o /dev/null -w %%{json} -H "Content-Type: application/json" -H "host: www.netflix.com" -H "accept-language: en-US,en;q=0.9" -H "sec-ch-ua: Google Chrome;v=125, Chromium;v=125, Not.A/Brand;v=24" -H "sec-ch-ua-mobile: ?0" -H "sec-ch-ua-platform: Windows" -H "sec-fetch-site: none" -H "sec-fetch-mode: navigate" -H "sec-fetch-user: ?1" -H "sec-fetch-dest: document" -H "%s" -XGET %s', headers, url)) local result = {} local region local old_region = get_old_region() diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_update.sh b/luci-app-openclash/root/usr/share/openclash/openclash_update.sh index ceb330809..057ff5c1d 100644 --- a/luci-app-openclash/root/usr/share/openclash/openclash_update.sh +++ b/luci-app-openclash/root/usr/share/openclash/openclash_update.sh @@ -8,9 +8,11 @@ set_lock() { del_lock() { flock -u 878 2>/dev/null - rm -rf "/tmp/lock/openclash_update.lock" + rm -rf "/tmp/lock/openclash_update.lock" 2>/dev/null } +set_lock + if [ -n "$1" ] && [ "$1" != "one_key_update" ]; then [ ! -f "/tmp/openclash_last_version" ] && /usr/share/openclash/openclash_version.sh "$1" 2>/dev/null elif [ -n "$2" ]; then @@ -22,6 +24,7 @@ fi if [ ! -f "/tmp/openclash_last_version" ]; then LOG_OUT "Error: Failed to Get Version Information, Please Try Again Later..." SLOG_CLEAN + del_lock exit 0 fi @@ -30,7 +33,7 @@ LAST_VER=$(sed -n 1p "$LAST_OPVER" 2>/dev/null |sed "s/^v//g" |tr -d "\n") if [ -x "/bin/opkg" ]; then OP_CV=$(rm -f /var/lock/opkg.lock && opkg status luci-app-openclash 2>/dev/null |grep 'Version' |awk -F 'Version: ' '{print $2}' |awk -F '.' '{print $2$3}' 2>/dev/null) elif [ -x "/usr/bin/apk" ]; then - OP_CV=$(apk list luci-app-openclash 2>/dev/null |grep 'installed' | grep -oE '\d+(\.\d+)*' | head -1 |awk -F '.' '{print $2$3}' 2>/dev/null) + OP_CV=$(apk list luci-app-openclash 2>/dev/null|grep 'installed' | grep -oE '[0-9]+(\.[0-9]+)*' | head -1 |awk -F '.' '{print $2$3}' 2>/dev/null) fi OP_LV=$(sed -n 1p "$LAST_OPVER" 2>/dev/null |awk -F 'v' '{print $2}' |awk -F '.' '{print $2$3}' 2>/dev/null) RELEASE_BRANCH=$(uci -q get openclash.config.release_branch || echo "master") @@ -58,8 +61,6 @@ else fi fi -set_lock - if [ -n "$OP_CV" ] && [ -n "$OP_LV" ] && [ "$(expr "$OP_LV" \> "$OP_CV")" -eq 1 ] && [ -f "$LAST_OPVER" ]; then LOG_OUT "Start Downloading【OpenClash - v$LAST_VER】..." if [ "$github_address_mod" != "0" ]; then @@ -89,9 +90,9 @@ if [ -n "$OP_CV" ] && [ -n "$OP_LV" ] && [ "$(expr "$OP_LV" \> "$OP_CV")" -eq 1 if [ -x "/bin/opkg" ]; then if [ -s "/tmp/openclash.ipk" ]; then if [ -z "$(opkg install /tmp/openclash.ipk --noaction 2>/dev/null |grep 'Upgrading luci-app-openclash on root' 2>/dev/null)" ]; then - LOG_OUT "【OpenClash - v$LAST_VER】Pre Update Test Failed, The File is Saved in /tmp/openclash.ipk, Please Try to Update Manually!" - if [ "$(uci -q get openclash.config.config_reload)" -eq 1 ]; then - uci -q set openclash.config.config_reload=0 + LOG_OUT "【OpenClash - v$LAST_VER】Pre Update Test Failed, The File is Saved in /tmp/openclash.ipk, Please Try to Update Manually With【opkg install /tmp/openclash.ipk】" + if [ "$(uci -q get openclash.config.restart)" -eq 1 ]; then + uci -q set openclash.config.restart=0 uci -q commit openclash /etc/init.d/openclash restart >/dev/null 2>&1 & else @@ -103,11 +104,12 @@ if [ -n "$OP_CV" ] && [ -n "$OP_LV" ] && [ "$(expr "$OP_LV" \> "$OP_CV")" -eq 1 fi elif [ -x "/usr/bin/apk" ]; then if [ -s "/tmp/openclash.apk" ]; then - apk add -s -q --clean-protected --allow-untrusted /tmp/openclash.apk >/dev/null 2>&1 + apk update >/dev/null 2>&1 + apk add -s -q --force-overwrite --clean-protected --allow-untrusted /tmp/openclash.apk >/dev/null 2>&1 if [ "$?" != "0" ]; then - LOG_OUT "【OpenClash - v$LAST_VER】Pre Update Test Failed, The File is Saved in /tmp/openclash.apk, Please Try to Update Manually!" - if [ "$(uci -q get openclash.config.config_reload)" -eq 1 ]; then - uci -q set openclash.config.config_reload=0 + LOG_OUT "【OpenClash - v$LAST_VER】Pre Update Test Failed, The File is Saved in /tmp/openclash.apk, Please Try to Update Manually With【apk add -q --force-overwrite --clean-protected --allow-untrusted /tmp/openclash.apk】" + if [ "$(uci -q get openclash.config.restart)" -eq 1 ]; then + uci -q set openclash.config.restart=0 uci -q commit openclash /etc/init.d/openclash restart >/dev/null 2>&1 & else @@ -148,7 +150,7 @@ LOG_OUT "Installing The New Version, Please Do Not Refresh The Page or Do Other if [ -x "/bin/opkg" ]; then opkg install /tmp/openclash.ipk elif [ -x "/usr/bin/apk" ]; then - apk add -q --clean-protected --allow-untrusted /tmp/openclash.apk + apk add -q --force-overwrite --clean-protected --allow-untrusted /tmp/openclash.apk fi if [ -x "/bin/opkg" ]; then if [ "$?" != "0" ] || [ -z "$(opkg info *openclash |grep Installed-Time)" ]; then @@ -161,35 +163,35 @@ if [ -x "/bin/opkg" ]; then uci -q commit openclash /etc/init.d/openclash restart 2>/dev/null else - LOG_OUT "OpenClash Update Failed, The File is Saved in /tmp/openclash.ipk, Please Try to Update Manually!" + LOG_OUT "OpenClash Update Failed, The File is Saved in /tmp/openclash.ipk, Please Try to Update Manually With【opkg install /tmp/openclash.ipk】" SLOG_CLEAN fi elif [ -x "/usr/bin/apk" ]; then if [ "$?" != "0" ] || [ -z "$(apk list luci-app-openclash 2>/dev/null |grep 'installed')" ]; then - apk add -q --clean-protected --allow-untrusted /tmp/openclash.apk + apk add -q --force-overwrite --clean-protected --allow-untrusted /tmp/openclash.apk fi - if [ "$?" != "0" ] || [ -z "$(apk list luci-app-openclash 2>/dev/null |grep 'installed')" ]; then + if [ "$?" == "0" ] || [ -n "$(apk list luci-app-openclash 2>/dev/null |grep 'installed')" ]; then rm -rf /tmp/openclash.apk >/dev/null 2>&1 LOG_OUT "OpenClash Update Successful, About To Restart!" uci -q set openclash.config.enable=1 uci -q commit openclash /etc/init.d/openclash restart 2>/dev/null else - LOG_OUT "OpenClash Update Failed, The File is Saved in /tmp/openclash.apk, Please Try to Update Manually!" + LOG_OUT "OpenClash Update Failed, The File is Saved in /tmp/openclash.apk, Please Try to Update Manually With【apk add -q --force-overwrite --clean-protected --allow-untrusted /tmp/openclash.apk】" SLOG_CLEAN fi fi EOF chmod 4755 /tmp/openclash_update.sh - nohup /tmp/openclash_update.sh & + /tmp/openclash_update.sh & wait rm -rf /tmp/openclash_update.sh else LOG_OUT "【OpenClash - v$LAST_VER】Download Failed, Please Check The Network or Try Again Later!" rm -rf /tmp/openclash.ipk >/dev/null 2>&1 rm -rf /tmp/openclash.apk >/dev/null 2>&1 - if [ "$(uci -q get openclash.config.config_reload)" -eq 1 ]; then - uci -q set openclash.config.config_reload=0 + if [ "$(uci -q get openclash.config.restart)" -eq 1 ]; then + uci -q set openclash.config.restart=0 uci -q commit openclash /etc/init.d/openclash restart >/dev/null 2>&1 & else @@ -202,8 +204,8 @@ else else LOG_OUT "OpenClash Has not Been Updated, Stop Continuing!" fi - if [ "$(uci -q get openclash.config.config_reload)" -eq 1 ]; then - uci -q set openclash.config.config_reload=0 + if [ "$(uci -q get openclash.config.restart)" -eq 1 ]; then + uci -q set openclash.config.restart=0 uci -q commit openclash /etc/init.d/openclash restart >/dev/null 2>&1 & else diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_version.sh b/luci-app-openclash/root/usr/share/openclash/openclash_version.sh index 37258303d..e94404cbc 100644 --- a/luci-app-openclash/root/usr/share/openclash/openclash_version.sh +++ b/luci-app-openclash/root/usr/share/openclash/openclash_version.sh @@ -1,4 +1,15 @@ #!/bin/bash +set_lock() { + exec 869>"/tmp/lock/openclash_version.lock" 2>/dev/null + flock -x 869 2>/dev/null +} + +del_lock() { + flock -u 869 2>/dev/null + rm -rf "/tmp/lock/openclash_version.lock" 2>/dev/null +} + +set_lock TIME=$(date "+%Y-%m-%d-%H") CHTIME=$(date "+%Y-%m-%d-%H" -r "/tmp/openclash_last_version" 2>/dev/null) @@ -7,7 +18,7 @@ RELEASE_BRANCH=$(uci -q get openclash.config.release_branch || echo "master") if [ -x "/bin/opkg" ]; then OP_CV=$(rm -f /var/lock/opkg.lock && opkg status luci-app-openclash 2>/dev/null |grep 'Version' |awk -F 'Version: ' '{print $2}' |awk -F '.' '{print $2$3}' 2>/dev/null) elif [ -x "/usr/bin/apk" ]; then - OP_CV=$(apk list luci-app-openclash 2>/dev/null|grep 'installed' | grep -oE '\d+(\.\d+)*' | head -1 |awk -F '.' '{print $2$3}' 2>/dev/null) + OP_CV=$(apk list luci-app-openclash 2>/dev/null|grep 'installed' | grep -oE '[0-9]+(\.[0-9]+)*' | head -1 |awk -F '.' '{print $2$3}' 2>/dev/null) fi OP_LV=$(sed -n 1p $LAST_OPVER 2>/dev/null |awk -F 'v' '{print $2}' |awk -F '.' '{print $2$3}' 2>/dev/null) github_address_mod=$(uci -q get openclash.config.github_address_mod || echo 0) @@ -32,15 +43,20 @@ if [ "$TIME" != "$CHTIME" ]; then if [ "$(expr "$OP_CV" \>= "$OP_LV")" = "1" ]; then sed -i '/^https:/,$d' $LAST_OPVER elif [ "$(expr "$OP_LV" \> "$OP_CV")" = "1" ] && [ -n "$OP_LV" ]; then + del_lock exit 2 else + del_lock exit 0 fi else rm -rf "$LAST_OPVER" fi elif [ "$(expr "$OP_LV" \> "$OP_CV")" = "1" ] && [ -n "$OP_LV" ]; then + del_lock exit 2 else + del_lock exit 0 fi 2>/dev/null +del_lock \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_watchdog.sh b/luci-app-openclash/root/usr/share/openclash/openclash_watchdog.sh index 065b789b6..af82a7ff7 100644 --- a/luci-app-openclash/root/usr/share/openclash/openclash_watchdog.sh +++ b/luci-app-openclash/root/usr/share/openclash/openclash_watchdog.sh @@ -16,7 +16,6 @@ log_size=$(uci -q get openclash.config.log_size || echo 1024) router_self_proxy=$(uci -q get openclash.config.router_self_proxy || echo 1) stream_auto_select_interval=$(uci -q get openclash.config.stream_auto_select_interval || echo 30) skip_proxy_address=$(uci -q get openclash.config.skip_proxy_address || echo 0) -CRASH_NUM=0 CFG_UPDATE_INT=1 SKIP_PROXY_ADDRESS=1 SKIP_PROXY_ADDRESS_INTERVAL=30 @@ -56,7 +55,7 @@ begin if servers.include?(i['server']) then next; end; - if i['server'] =~ reg and not servers.include?(i['server']) then + if i['server'] =~ reg then servers = servers.push(i['server']).uniq syscall = '/usr/share/openclash/openclash_debug_dns.lua 2>/dev/null \"' + i['server'] + '\" \"true\"' result = IO.popen(syscall).read.split(/\n+/) @@ -93,7 +92,7 @@ begin if servers.include?(j['server']) then next; end; - if j['server'] =~ reg and not servers.include?(j['server']) then + if j['server'] =~ reg then servers = servers.push(j['server']).uniq syscall = '/usr/share/openclash/openclash_debug_dns.lua 2>/dev/null \"' + j['server'] + '\" \"true\"' result = IO.popen(syscall).read.split(/\n+/) @@ -109,6 +108,28 @@ begin end; end; end; + if not i['path'] and i['type'] == 'inline' and i['payload'] and not i['payload'].empty? then + Value['payload'].each do + |k| + threadsp << Thread.new { + if k['server'] then + if servers.include?(k['server']) then + next; + end; + if k['server'] =~ reg then + servers = servers.push(k['server']).uniq + syscall = '/usr/share/openclash/openclash_debug_dns.lua 2>/dev/null \"' + k['server'] + '\" \"true\"' + result = IO.popen(syscall).read.split(/\n+/) + if result then + ips = ips | result + end; + else + ips = ips.push(k['server']).uniq + end; + end; + }; + end; + end; threadsp.each(&:join); }; end; @@ -144,12 +165,6 @@ rescue Exception => e end" 2>/dev/null >> $LOG_FILE } -#wait for core start complete -while ( [ -n "$(unify_ps_pids "/etc/init.d/openclash")" ] ) -do - sleep 1 -done >/dev/null 2>&1 - while :; do cfg_update=$(uci -q get openclash.config.auto_update) @@ -170,34 +185,12 @@ do stream_auto_select_google_not_cn=$(uci -q get openclash.config.stream_auto_select_google_not_cn || echo 0) stream_auto_select_openai=$(uci -q get openclash.config.stream_auto_select_openai || echo 0) upnp_lease_file=$(uci -q get upnpd.config.upnp_lease_file) - enable=$(uci -q get openclash.config.enable) -if [ "$enable" -eq 1 ]; then - clash_pids=$(pidof clash |sed 's/$//g' |wc -l) - if [ "$clash_pids" -gt 1 ]; then - LOG_OUT "Watchdog: Multiple Clash Processes, Kill All..." - clash_pids=$(pidof clash |sed 's/$//g') - for clash_pid in $clash_pids; do - kill -9 "$clash_pid" 2>/dev/null - done >/dev/null 2>&1 - sleep 1 - fi 2>/dev/null - if ! pidof clash >/dev/null; then - CRASH_NUM=$(expr "$CRASH_NUM" + 1) - if [ "$CRASH_NUM" -le 3 ]; then - LOG_OUT "Watchdog: Clash Core Problem, Restart..." - /etc/init.d/openclash reload "core" - sleep 10 - continue - else - LOG_OUT "Watchdog: Already Restart 3 Times With Clash Core Problem, Auto-Exit..." - /etc/init.d/openclash stop - exit 0 - fi - else - CRASH_NUM=0 - fi -fi +#wait for core start complete +while ( [ -n "$(unify_ps_pids "/etc/init.d/openclash")" ] ) +do + sleep 1 +done >/dev/null 2>&1 ## Porxy history /usr/share/openclash/openclash_history_get.sh @@ -234,12 +227,19 @@ fi ## Localnetwork 刷新 wan_ip4s=$(/usr/share/openclash/openclash_get_network.lua "wanip" 2>/dev/null) wan_ip6s=$(ifconfig | grep 'inet6 addr' | awk '{print $3}' 2>/dev/null) + lan_ip4s=$(/usr/share/openclash/openclash_get_network.lua "lan_cidr" 2>/dev/null) + lan_ip6s=$(/usr/share/openclash/openclash_get_network.lua "lan_cidr6" 2>/dev/null) if [ -n "$FW4" ]; then if [ -n "$wan_ip4s" ]; then for wan_ip4 in $wan_ip4s; do nft add element inet fw4 localnetwork { "$wan_ip4" } 2>/dev/null done fi + if [ -n "$lan_ip4s" ]; then + for lan_ip4 in $lan_ip4s; do + nft add element inet fw4 localnetwork { "$lan_ip4" } 2>/dev/null + done + fi if [ "$ipv6_enable" -eq 1 ]; then if [ -n "$wan_ip6s" ]; then @@ -247,6 +247,11 @@ fi nft add element inet fw4 localnetwork6 { "$wan_ip6" } 2>/dev/null done fi + if [ -n "$lan_ip6s" ]; then + for lan_ip6 in $lan_ip6s; do + nft add element inet fw4 localnetwork6 { "$lan_ip6" } 2>/dev/null + done + fi fi else if [ -n "$wan_ip4s" ]; then @@ -254,12 +259,22 @@ fi ipset add localnetwork "$wan_ip4" 2>/dev/null done fi + if [ -n "$lan_ip4s" ]; then + for lan_ip4 in $lan_ip4s; do + ipset add localnetwork "$lan_ip4" 2>/dev/null + done + fi if [ "$ipv6_enable" -eq 1 ]; then if [ -n "$wan_ip6s" ]; then for wan_ip6 in $wan_ip6s; do ipset add localnetwork6 "$wan_ip6" 2>/dev/null done fi + if [ -n "$lan_ip6s" ]; then + for lan_ip6 in $lan_ip6s; do + ipset add localnetwork6 "$lan_ip6" 2>/dev/null + done + fi fi fi diff --git a/luci-app-openclash/root/usr/share/openclash/ui/zashboard/CNAME b/luci-app-openclash/root/usr/share/openclash/ui/zashboard/CNAME new file mode 100644 index 000000000..d1eb3c393 --- /dev/null +++ b/luci-app-openclash/root/usr/share/openclash/ui/zashboard/CNAME @@ -0,0 +1 @@ +board.zash.run.place \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/ui/zashboard/apple-touch-icon.png b/luci-app-openclash/root/usr/share/openclash/ui/zashboard/apple-touch-icon.png new file mode 100644 index 000000000..3c01d30a4 Binary files /dev/null and b/luci-app-openclash/root/usr/share/openclash/ui/zashboard/apple-touch-icon.png differ diff --git a/luci-app-openclash/root/usr/share/openclash/ui/zashboard/assets/NotoColorEmoji-flagsonly-CWWDk9km.ttf b/luci-app-openclash/root/usr/share/openclash/ui/zashboard/assets/NotoColorEmoji-flagsonly-CWWDk9km.ttf new file mode 100644 index 000000000..6e1642ecc Binary files /dev/null and b/luci-app-openclash/root/usr/share/openclash/ui/zashboard/assets/NotoColorEmoji-flagsonly-CWWDk9km.ttf differ diff --git a/luci-app-openclash/root/usr/share/openclash/ui/zashboard/assets/index-DnsHUhFc.js b/luci-app-openclash/root/usr/share/openclash/ui/zashboard/assets/index-DnsHUhFc.js new file mode 100644 index 000000000..5b5a2a845 --- /dev/null +++ b/luci-app-openclash/root/usr/share/openclash/ui/zashboard/assets/index-DnsHUhFc.js @@ -0,0 +1,177 @@ +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))r(i);new MutationObserver(i=>{for(const o of i)if(o.type==="childList")for(const a of o.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&r(a)}).observe(document,{childList:!0,subtree:!0});function n(i){const o={};return i.integrity&&(o.integrity=i.integrity),i.referrerPolicy&&(o.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?o.credentials="include":i.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(i){if(i.ep)return;i.ep=!0;const o=n(i);fetch(i.href,o)}})();var hy=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Vg(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function sb(e){if(e.__esModule)return e;var t=e.default;if(typeof t=="function"){var n=function r(){return this instanceof r?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};n.prototype=t.prototype}else n={};return Object.defineProperty(n,"__esModule",{value:!0}),Object.keys(e).forEach(function(r){var i=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(n,r,i.get?i:{enumerable:!0,get:function(){return e[r]}})}),n}var $0={exports:{}},cK=$0.exports,SD;function KA(){return SD||(SD=1,function(e,t){(function(n,r){e.exports=r()})(cK,function(){var n=1e3,r=6e4,i=36e5,o="millisecond",a="second",s="minute",l="hour",u="day",c="week",f="month",d="quarter",h="year",v="date",m="Invalid Date",y=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,_=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,b={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(F){var z=["th","st","nd","rd"],B=F%100;return"["+F+(z[(B-20)%10]||z[B]||z[0])+"]"}},w=function(F,z,B){var Y=String(F);return!Y||Y.length>=z?F:""+Array(z+1-Y.length).join(B)+F},S={s:w,z:function(F){var z=-F.utcOffset(),B=Math.abs(z),Y=Math.floor(B/60),j=B%60;return(z<=0?"+":"-")+w(Y,2,"0")+":"+w(j,2,"0")},m:function F(z,B){if(z.date()1)return F(ge[0])}else{var ve=z.name;T[ve]=z,j=ve}return!Y&&j&&(C=j),j||!Y&&C},R=function(F,z){if(P(F))return F.clone();var B=typeof z=="object"?z:{};return B.date=F,B.args=arguments,new M(B)},O=S;O.l=I,O.i=P,O.w=function(F,z){return R(F,{locale:z.$L,utc:z.$u,x:z.$x,$offset:z.$offset})};var M=function(){function F(B){this.$L=I(B.locale,null,!0),this.parse(B),this.$x=this.$x||B.x||{},this[A]=!0}var z=F.prototype;return z.parse=function(B){this.$d=function(Y){var j=Y.date,se=Y.utc;if(j===null)return new Date(NaN);if(O.u(j))return new Date;if(j instanceof Date)return new Date(j);if(typeof j=="string"&&!/Z$/i.test(j)){var ge=j.match(y);if(ge){var ve=ge[2]-1||0,De=(ge[7]||"0").substring(0,3);return se?new Date(Date.UTC(ge[1],ve,ge[3]||1,ge[4]||0,ge[5]||0,ge[6]||0,De)):new Date(ge[1],ve,ge[3]||1,ge[4]||0,ge[5]||0,ge[6]||0,De)}}return new Date(j)}(B),this.init()},z.init=function(){var B=this.$d;this.$y=B.getFullYear(),this.$M=B.getMonth(),this.$D=B.getDate(),this.$W=B.getDay(),this.$H=B.getHours(),this.$m=B.getMinutes(),this.$s=B.getSeconds(),this.$ms=B.getMilliseconds()},z.$utils=function(){return O},z.isValid=function(){return this.$d.toString()!==m},z.isSame=function(B,Y){var j=R(B);return this.startOf(Y)<=j&&j<=this.endOf(Y)},z.isAfter=function(B,Y){return R(B)=2&&_%10<=4&&(_%100<10||_%100>=20)?b[1]:b[2])}var f=function(v,m){return u.test(m)?o[v.month()]:a[v.month()]};f.s=a,f.f=o;var d=function(v,m){return u.test(m)?s[v.month()]:l[v.month()]};d.s=l,d.f=s;var h={name:"ru",weekdays:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),weekdaysShort:"вск_пнд_втр_срд_чтв_птн_сбт".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),months:f,monthsShort:d,weekStart:1,yearStart:4,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., H:mm",LLLL:"dddd, D MMMM YYYY г., H:mm"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",m:c,mm:c,h:"час",hh:c,d:"день",dd:c,M:"месяц",MM:c,y:"год",yy:c},ordinal:function(v){return v},meridiem:function(v){return v<4?"ночи":v<12?"утра":v<17?"дня":"вечера"}};return i.default.locale(h,null,!0),h})}(B0)),B0.exports}hK();var V0={exports:{}},pK=V0.exports,xD;function vK(){return xD||(xD=1,function(e,t){(function(n,r){e.exports=r(KA())})(pK,function(n){function r(a){return a&&typeof a=="object"&&"default"in a?a:{default:a}}var i=r(n),o={name:"zh-cn",weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),ordinal:function(a,s){return s==="W"?a+"周":a+"日"},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},relativeTime:{future:"%s内",past:"%s前",s:"几秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},meridiem:function(a,s){var l=100*a+s;return l<600?"凌晨":l<900?"早上":l<1100?"上午":l<1300?"中午":l<1800?"下午":"晚上"}};return i.default.locale(o,null,!0),o})}(V0)),V0.exports}vK();var U0={exports:{}},gK=U0.exports,TD;function mK(){return TD||(TD=1,function(e,t){(function(n,r){e.exports=r()})(gK,function(){return function(n,r,i){n=n||{};var o=r.prototype,a={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function s(u,c,f,d){return o.fromToBase(u,c,f,d)}i.en.relativeTime=a,o.fromToBase=function(u,c,f,d,h){for(var v,m,y,_=f.$locale().relativeTime||a,b=n.thresholds||[{l:"s",r:44,d:"second"},{l:"m",r:89},{l:"mm",r:44,d:"minute"},{l:"h",r:89},{l:"hh",r:21,d:"hour"},{l:"d",r:35},{l:"dd",r:25,d:"day"},{l:"M",r:45},{l:"MM",r:10,d:"month"},{l:"y",r:17},{l:"yy",d:"year"}],w=b.length,S=0;S0,T<=C.r||!C.r){T<=1&&S>0&&(C=b[S-1]);var A=_[C.l];h&&(T=h(""+T)),m=typeof A=="string"?A.replace("%d",T):A(T,c,C.l,y);break}}if(c)return m;var P=y?_.future:_.past;return typeof P=="function"?P(m):P.replace("%s",m)},o.to=function(u,c){return s(u,c,this,!0)},o.from=function(u,c){return s(u,c,this)};var l=function(u){return u.$u?i.utc():i()};o.toNow=function(u){return this.to(l(this),u)},o.fromNow=function(u){return this.from(l(this),u)}}})}(U0)),U0.exports}var yK=mK();const _K=Vg(yK);/** +* @vue/shared v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function Nr(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const Jt={},Gc=[],Lr=()=>{},xd=()=>!1,Mu=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),lb=e=>e.startsWith("onUpdate:"),Qt=Object.assign,ub=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},bK=Object.prototype.hasOwnProperty,cn=(e,t)=>bK.call(e,t),Je=Array.isArray,zc=e=>Cf(e)==="[object Map]",Lu=e=>Cf(e)==="[object Set]",OC=e=>Cf(e)==="[object Date]",M5=e=>Cf(e)==="[object RegExp]",bt=e=>typeof e=="function",At=e=>typeof e=="string",Pi=e=>typeof e=="symbol",vn=e=>e!==null&&typeof e=="object",cb=e=>(vn(e)||bt(e))&&bt(e.then)&&bt(e.catch),ZA=Object.prototype.toString,Cf=e=>ZA.call(e),L5=e=>Cf(e).slice(8,-1),Ug=e=>Cf(e)==="[object Object]",fb=e=>At(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,el=Nr(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),N5=Nr("bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"),db=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},SK=/-(\w)/g,Bn=db(e=>e.replace(SK,(t,n)=>n?n.toUpperCase():"")),wK=/\B([A-Z])/g,ai=db(e=>e.replace(wK,"-$1").toLowerCase()),Nu=db(e=>e.charAt(0).toUpperCase()+e.slice(1)),Wc=db(e=>e?`on${Nu(e)}`:""),ri=(e,t)=>!Object.is(e,t),jc=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},jv=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Yv=e=>{const t=At(e)?Number(e):NaN;return isNaN(t)?e:t};let CD;const Hg=()=>CD||(CD=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}),xK=/^[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*$/;function TK(e){return xK.test(e)?`__props.${e}`:`__props[${JSON.stringify(e)}]`}function CK(e,t){return e+JSON.stringify(t,(n,r)=>typeof r=="function"?r.toString():r)}const EK={TEXT:1,1:"TEXT",CLASS:2,2:"CLASS",STYLE:4,4:"STYLE",PROPS:8,8:"PROPS",FULL_PROPS:16,16:"FULL_PROPS",NEED_HYDRATION:32,32:"NEED_HYDRATION",STABLE_FRAGMENT:64,64:"STABLE_FRAGMENT",KEYED_FRAGMENT:128,128:"KEYED_FRAGMENT",UNKEYED_FRAGMENT:256,256:"UNKEYED_FRAGMENT",NEED_PATCH:512,512:"NEED_PATCH",DYNAMIC_SLOTS:1024,1024:"DYNAMIC_SLOTS",DEV_ROOT_FRAGMENT:2048,2048:"DEV_ROOT_FRAGMENT",CACHED:-1,"-1":"CACHED",BAIL:-2,"-2":"BAIL"},AK={1:"TEXT",2:"CLASS",4:"STYLE",8:"PROPS",16:"FULL_PROPS",32:"NEED_HYDRATION",64:"STABLE_FRAGMENT",128:"KEYED_FRAGMENT",256:"UNKEYED_FRAGMENT",512:"NEED_PATCH",1024:"DYNAMIC_SLOTS",2048:"DEV_ROOT_FRAGMENT",[-1]:"HOISTED",[-2]:"BAIL"},IK={ELEMENT:1,1:"ELEMENT",FUNCTIONAL_COMPONENT:2,2:"FUNCTIONAL_COMPONENT",STATEFUL_COMPONENT:4,4:"STATEFUL_COMPONENT",TEXT_CHILDREN:8,8:"TEXT_CHILDREN",ARRAY_CHILDREN:16,16:"ARRAY_CHILDREN",SLOTS_CHILDREN:32,32:"SLOTS_CHILDREN",TELEPORT:64,64:"TELEPORT",SUSPENSE:128,128:"SUSPENSE",COMPONENT_SHOULD_KEEP_ALIVE:256,256:"COMPONENT_SHOULD_KEEP_ALIVE",COMPONENT_KEPT_ALIVE:512,512:"COMPONENT_KEPT_ALIVE",COMPONENT:6,6:"COMPONENT"},RK={STABLE:1,1:"STABLE",DYNAMIC:2,2:"DYNAMIC",FORWARDED:3,3:"FORWARDED"},PK={1:"STABLE",2:"DYNAMIC",3:"FORWARDED"},OK="Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol",JA=Nr(OK),DK=JA,ED=2;function k5(e,t=0,n=e.length){if(t=Math.max(0,Math.min(t,e.length)),n=Math.max(0,Math.min(n,e.length)),t>n)return"";let r=e.split(/(\r?\n)/);const i=r.filter((s,l)=>l%2===1);r=r.filter((s,l)=>l%2===0);let o=0;const a=[];for(let s=0;s=t){for(let l=s-ED;l<=s+ED||n>o;l++){if(l<0||l>=r.length)continue;const u=l+1;a.push(`${u}${" ".repeat(Math.max(3-String(u).length,0))}| ${r[l]}`);const c=r[l].length,f=i[l]&&i[l].length||0;if(l===s){const d=t-(o-(c+f)),h=Math.max(1,n>o?c-d:n-t);a.push(" | "+" ".repeat(d)+"^".repeat(h))}else if(l>s){if(n>o){const d=Math.max(Math.min(n-o,c),1);a.push(" | "+"^".repeat(d))}o+=c+f}}break}return a.join(` +`)}function Gr(e){if(Je(e)){const t={};for(let n=0;n{if(n){const r=n.split(LK);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function kK(e){if(!e)return"";if(At(e))return e;let t="";for(const n in e){const r=e[n];if(At(r)||typeof r=="number"){const i=n.startsWith("--")?n:ai(n);t+=`${i}:${r};`}}return t}function rt(e){let t="";if(At(e))t=e;else if(Je(e))for(let n=0;n/="'\u0009\u000a\u000c\u0020]/,ix={};function GK(e){if(ix.hasOwnProperty(e))return ix[e];const t=HK.test(e);return t&&console.error(`unsafe attribute name: ${e}`),ix[e]=!t}const zK={acceptCharset:"accept-charset",className:"class",htmlFor:"for",httpEquiv:"http-equiv"},WK=Nr("accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap"),jK=Nr("xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xmlns:xlink,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan"),YK=Nr("accent,accentunder,actiontype,align,alignmentscope,altimg,altimg-height,altimg-valign,altimg-width,alttext,bevelled,close,columnsalign,columnlines,columnspan,denomalign,depth,dir,display,displaystyle,encoding,equalcolumns,equalrows,fence,fontstyle,fontweight,form,frame,framespacing,groupalign,height,href,id,indentalign,indentalignfirst,indentalignlast,indentshift,indentshiftfirst,indentshiftlast,indextype,justify,largetop,largeop,lquote,lspace,mathbackground,mathcolor,mathsize,mathvariant,maxsize,minlabelspacing,mode,other,overflow,position,rowalign,rowlines,rowspan,rquote,rspace,scriptlevel,scriptminsize,scriptsizemultiplier,selection,separator,separators,shift,side,src,stackalign,stretchy,subscriptshift,superscriptshift,symmetric,voffset,width,widths,xlink:href,xlink:show,xlink:type,xmlns");function XK(e){if(e==null)return!1;const t=typeof e;return t==="string"||t==="number"||t==="boolean"}const KK=/["'&<>]/;function ZK(e){const t=""+e,n=KK.exec(t);if(!n)return t;let r="",i,o,a=0;for(o=n.index;o||--!>|?@[\\\]^`{|}~]/g;function QK(e,t){return e.replace(z5,n=>t?n==='"'?'\\\\\\"':`\\\\${n}`:`\\${n}`)}function eZ(e,t){if(e.length!==t.length)return!1;let n=!0;for(let r=0;n&&rsl(n,t))}const W5=e=>!!(e&&e.__v_isRef===!0),re=e=>At(e)?e:e==null?"":Je(e)||vn(e)&&(e.toString===ZA||!bt(e.toString))?W5(e)?re(e.value):JSON.stringify(e,j5,2):String(e),j5=(e,t)=>W5(t)?j5(e,t.value):zc(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,i],o)=>(n[ox(r,o)+" =>"]=i,n),{})}:Lu(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>ox(n))}:Pi(t)?ox(t):vn(t)&&!Je(t)&&!Ug(t)?String(t):t,ox=(e,t="")=>{var n;return Pi(e)?`Symbol(${(n=e.description)!=null?n:t})`:e},tZ=Object.freeze(Object.defineProperty({__proto__:null,EMPTY_ARR:Gc,EMPTY_OBJ:Jt,NO:xd,NOOP:Lr,PatchFlagNames:AK,PatchFlags:EK,ShapeFlags:IK,SlotFlags:RK,camelize:Bn,capitalize:Nu,cssVarNameEscapeSymbolsRE:z5,def:qA,escapeHtml:ZK,escapeHtmlComment:JK,extend:Qt,genCacheKey:CK,genPropsAccessExp:TK,generateCodeFrame:k5,getEscapedCssVarName:QK,getGlobalThis:Hg,hasChanged:ri,hasOwn:cn,hyphenate:ai,includeBooleanAttr:eI,invokeArrayFns:jc,isArray:Je,isBooleanAttr:UK,isBuiltInDirective:N5,isDate:OC,isFunction:bt,isGloballyAllowed:JA,isGloballyWhitelisted:DK,isHTMLTag:$5,isIntegerKey:fb,isKnownHtmlAttr:WK,isKnownMathMLAttr:YK,isKnownSvgAttr:jK,isMap:zc,isMathMLTag:V5,isModelListener:lb,isObject:vn,isOn:Mu,isPlainObject:Ug,isPromise:cb,isRegExp:M5,isRenderableAttrValue:XK,isReservedProp:el,isSSRSafeAttrName:GK,isSVGTag:B5,isSet:Lu,isSpecialBooleanAttr:G5,isString:At,isSymbol:Pi,isVoidTag:U5,looseEqual:sl,looseIndexOf:Gg,looseToNumber:jv,makeMap:Nr,normalizeClass:rt,normalizeProps:F5,normalizeStyle:Gr,objectToString:ZA,parseStringStyle:QA,propsToAttrMap:zK,remove:ub,slotFlagsText:PK,stringifyStyle:kK,toDisplayString:re,toHandlerKey:Wc,toNumber:Yv,toRawType:L5,toTypeString:Cf},Symbol.toStringTag,{value:"Module"}));/** +* @vue/reactivity v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let wi;class tI{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=wi,!t&&wi&&(this.index=(wi.scopes||(wi.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0)return;if(rv){let t=rv;for(rv=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;nv;){let t=nv;for(nv=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(r){e||(e=r)}t=n}}if(e)throw e}function Z5(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function q5(e){let t,n=e.depsTail,r=n;for(;r;){const i=r.prevDep;r.version===-1?(r===n&&(n=i),aI(r),nZ(r)):t=r,r.dep.activeLink=r.prevActiveLink,r.prevActiveLink=void 0,r=i}e.deps=t,e.depsTail=n}function DC(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(J5(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function J5(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Kv))return;e.globalVersion=Kv;const t=e.dep;if(e.flags|=2,t.version>0&&!e.isSSR&&e.deps&&!DC(e)){e.flags&=-3;return}const n=$n,r=Da;$n=e,Da=!0;try{Z5(e);const i=e.fn(e._value);(t.version===0||ri(i,e._value))&&(e._value=i,t.version++)}catch(i){throw t.version++,i}finally{$n=n,Da=r,q5(e),e.flags&=-3}}function aI(e,t=!1){const{dep:n,prevSub:r,nextSub:i}=e;if(r&&(r.nextSub=i,e.prevSub=void 0),i&&(i.prevSub=r,e.nextSub=void 0),n.subs===e&&(n.subs=r,!r&&n.computed)){n.computed.flags&=-5;for(let o=n.computed.deps;o;o=o.nextDep)aI(o,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function nZ(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}function rZ(e,t){e.effect instanceof Xv&&(e=e.effect.fn);const n=new Xv(e);t&&Qt(n,t);try{n.run()}catch(i){throw n.stop(),i}const r=n.run.bind(n);return r.effect=n,r}function iZ(e){e.effect.stop()}let Da=!0;const Q5=[];function ku(){Q5.push(Da),Da=!1}function Fu(){const e=Q5.pop();Da=e===void 0?!0:e}function AD(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=$n;$n=void 0;try{t()}finally{$n=n}}}let Kv=0;class oZ{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class hb{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0}track(t){if(!$n||!Da||$n===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==$n)n=this.activeLink=new oZ($n,this),$n.deps?(n.prevDep=$n.depsTail,$n.depsTail.nextDep=n,$n.depsTail=n):$n.deps=$n.depsTail=n,e$(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const r=n.nextDep;r.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=r),n.prevDep=$n.depsTail,n.nextDep=void 0,$n.depsTail.nextDep=n,$n.depsTail=n,$n.deps===n&&($n.deps=r)}return n}trigger(t){this.version++,Kv++,this.notify(t)}notify(t){iI();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{oI()}}}function e$(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let r=t.deps;r;r=r.nextDep)e$(r)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Y_=new WeakMap,Yc=Symbol(""),MC=Symbol(""),Zv=Symbol("");function ii(e,t,n){if(Da&&$n){let r=Y_.get(e);r||Y_.set(e,r=new Map);let i=r.get(n);i||(r.set(n,i=new hb),i.map=r,i.key=n),i.track()}}function Ws(e,t,n,r,i,o){const a=Y_.get(e);if(!a){Kv++;return}const s=l=>{l&&l.trigger()};if(iI(),t==="clear")a.forEach(s);else{const l=Je(e),u=l&&fb(n);if(l&&n==="length"){const c=Number(r);a.forEach((f,d)=>{(d==="length"||d===Zv||!Pi(d)&&d>=c)&&s(f)})}else switch((n!==void 0||a.has(void 0))&&s(a.get(n)),u&&s(a.get(Zv)),t){case"add":l?u&&s(a.get("length")):(s(a.get(Yc)),zc(e)&&s(a.get(MC)));break;case"delete":l||(s(a.get(Yc)),zc(e)&&s(a.get(MC)));break;case"set":zc(e)&&s(a.get(Yc));break}}oI()}function aZ(e,t){const n=Y_.get(e);return n&&n.get(t)}function jf(e){const t=sn(e);return t===e?t:(ii(t,"iterate",Zv),Co(e)?t:t.map(oi))}function pb(e){return ii(e=sn(e),"iterate",Zv),e}const sZ={__proto__:null,[Symbol.iterator](){return sx(this,Symbol.iterator,oi)},concat(...e){return jf(this).concat(...e.map(t=>Je(t)?jf(t):t))},entries(){return sx(this,"entries",e=>(e[1]=oi(e[1]),e))},every(e,t){return Ps(this,"every",e,t,void 0,arguments)},filter(e,t){return Ps(this,"filter",e,t,n=>n.map(oi),arguments)},find(e,t){return Ps(this,"find",e,t,oi,arguments)},findIndex(e,t){return Ps(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Ps(this,"findLast",e,t,oi,arguments)},findLastIndex(e,t){return Ps(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Ps(this,"forEach",e,t,void 0,arguments)},includes(...e){return lx(this,"includes",e)},indexOf(...e){return lx(this,"indexOf",e)},join(e){return jf(this).join(e)},lastIndexOf(...e){return lx(this,"lastIndexOf",e)},map(e,t){return Ps(this,"map",e,t,void 0,arguments)},pop(){return Qh(this,"pop")},push(...e){return Qh(this,"push",e)},reduce(e,...t){return ID(this,"reduce",e,t)},reduceRight(e,...t){return ID(this,"reduceRight",e,t)},shift(){return Qh(this,"shift")},some(e,t){return Ps(this,"some",e,t,void 0,arguments)},splice(...e){return Qh(this,"splice",e)},toReversed(){return jf(this).toReversed()},toSorted(e){return jf(this).toSorted(e)},toSpliced(...e){return jf(this).toSpliced(...e)},unshift(...e){return Qh(this,"unshift",e)},values(){return sx(this,"values",oi)}};function sx(e,t,n){const r=pb(e),i=r[t]();return r!==e&&!Co(e)&&(i._next=i.next,i.next=()=>{const o=i._next();return o.value&&(o.value=n(o.value)),o}),i}const lZ=Array.prototype;function Ps(e,t,n,r,i,o){const a=pb(e),s=a!==e&&!Co(e),l=a[t];if(l!==lZ[t]){const f=l.apply(e,o);return s?oi(f):f}let u=n;a!==e&&(s?u=function(f,d){return n.call(this,oi(f),d,e)}:n.length>2&&(u=function(f,d){return n.call(this,f,d,e)}));const c=l.call(a,u,r);return s&&i?i(c):c}function ID(e,t,n,r){const i=pb(e);let o=n;return i!==e&&(Co(e)?n.length>3&&(o=function(a,s,l){return n.call(this,a,s,l,e)}):o=function(a,s,l){return n.call(this,a,oi(s),l,e)}),i[t](o,...r)}function lx(e,t,n){const r=sn(e);ii(r,"iterate",Zv);const i=r[t](...n);return(i===-1||i===!1)&&mb(n[0])?(n[0]=sn(n[0]),r[t](...n)):i}function Qh(e,t,n=[]){ku(),iI();const r=sn(e)[t].apply(e,n);return oI(),Fu(),r}const uZ=Nr("__proto__,__v_isRef,__isVue"),t$=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Pi));function cZ(e){Pi(e)||(e=String(e));const t=sn(this);return ii(t,"has",e),t.hasOwnProperty(e)}class n${constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,r){if(n==="__v_skip")return t.__v_skip;const i=this._isReadonly,o=this._isShallow;if(n==="__v_isReactive")return!i;if(n==="__v_isReadonly")return i;if(n==="__v_isShallow")return o;if(n==="__v_raw")return r===(i?o?l$:s$:o?a$:o$).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const a=Je(t);if(!i){let l;if(a&&(l=sZ[n]))return l;if(n==="hasOwnProperty")return cZ}const s=Reflect.get(t,n,st(t)?t:r);return(Pi(n)?t$.has(n):uZ(n))||(i||ii(t,"get",n),o)?s:st(s)?a&&fb(n)?s:s.value:vn(s)?i?zg(s):Na(s):s}}class r$ extends n${constructor(t=!1){super(!1,t)}set(t,n,r,i){let o=t[n];if(!this._isShallow){const l=xu(o);if(!Co(r)&&!xu(r)&&(o=sn(o),r=sn(r)),!Je(t)&&st(o)&&!st(r))return l?!1:(o.value=r,!0)}const a=Je(t)&&fb(n)?Number(n)e,py=e=>Reflect.getPrototypeOf(e);function vZ(e,t,n){return function(...r){const i=this.__v_raw,o=sn(i),a=zc(o),s=e==="entries"||e===Symbol.iterator&&a,l=e==="keys"&&a,u=i[e](...r),c=n?LC:t?NC:oi;return!t&&ii(o,"iterate",l?MC:Yc),{next(){const{value:f,done:d}=u.next();return d?{value:f,done:d}:{value:s?[c(f[0]),c(f[1])]:c(f),done:d}},[Symbol.iterator](){return this}}}}function vy(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function gZ(e,t){const n={get(i){const o=this.__v_raw,a=sn(o),s=sn(i);e||(ri(i,s)&&ii(a,"get",i),ii(a,"get",s));const{has:l}=py(a),u=t?LC:e?NC:oi;if(l.call(a,i))return u(o.get(i));if(l.call(a,s))return u(o.get(s));o!==a&&o.get(i)},get size(){const i=this.__v_raw;return!e&&ii(sn(i),"iterate",Yc),Reflect.get(i,"size",i)},has(i){const o=this.__v_raw,a=sn(o),s=sn(i);return e||(ri(i,s)&&ii(a,"has",i),ii(a,"has",s)),i===s?o.has(i):o.has(i)||o.has(s)},forEach(i,o){const a=this,s=a.__v_raw,l=sn(s),u=t?LC:e?NC:oi;return!e&&ii(l,"iterate",Yc),s.forEach((c,f)=>i.call(o,u(c),u(f),a))}};return Qt(n,e?{add:vy("add"),set:vy("set"),delete:vy("delete"),clear:vy("clear")}:{add(i){!t&&!Co(i)&&!xu(i)&&(i=sn(i));const o=sn(this);return py(o).has.call(o,i)||(o.add(i),Ws(o,"add",i,i)),this},set(i,o){!t&&!Co(o)&&!xu(o)&&(o=sn(o));const a=sn(this),{has:s,get:l}=py(a);let u=s.call(a,i);u||(i=sn(i),u=s.call(a,i));const c=l.call(a,i);return a.set(i,o),u?ri(o,c)&&Ws(a,"set",i,o):Ws(a,"add",i,o),this},delete(i){const o=sn(this),{has:a,get:s}=py(o);let l=a.call(o,i);l||(i=sn(i),l=a.call(o,i)),s&&s.call(o,i);const u=o.delete(i);return l&&Ws(o,"delete",i,void 0),u},clear(){const i=sn(this),o=i.size!==0,a=i.clear();return o&&Ws(i,"clear",void 0,void 0),a}}),["keys","values","entries",Symbol.iterator].forEach(i=>{n[i]=vZ(i,e,t)}),n}function vb(e,t){const n=gZ(e,t);return(r,i,o)=>i==="__v_isReactive"?!e:i==="__v_isReadonly"?e:i==="__v_raw"?r:Reflect.get(cn(n,i)&&i in r?n:r,i,o)}const mZ={get:vb(!1,!1)},yZ={get:vb(!1,!0)},_Z={get:vb(!0,!1)},bZ={get:vb(!0,!0)},o$=new WeakMap,a$=new WeakMap,s$=new WeakMap,l$=new WeakMap;function SZ(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function wZ(e){return e.__v_skip||!Object.isExtensible(e)?0:SZ(L5(e))}function Na(e){return xu(e)?e:gb(e,!1,fZ,mZ,o$)}function sI(e){return gb(e,!1,hZ,yZ,a$)}function zg(e){return gb(e,!0,dZ,_Z,s$)}function xZ(e){return gb(e,!0,pZ,bZ,l$)}function gb(e,t,n,r,i){if(!vn(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=i.get(e);if(o)return o;const a=wZ(e);if(a===0)return e;const s=new Proxy(e,a===2?r:n);return i.set(e,s),s}function pu(e){return xu(e)?pu(e.__v_raw):!!(e&&e.__v_isReactive)}function xu(e){return!!(e&&e.__v_isReadonly)}function Co(e){return!!(e&&e.__v_isShallow)}function mb(e){return e?!!e.__v_raw:!1}function sn(e){const t=e&&e.__v_raw;return t?sn(t):e}function u$(e){return!cn(e,"__v_skip")&&Object.isExtensible(e)&&qA(e,"__v_skip",!0),e}const oi=e=>vn(e)?Na(e):e,NC=e=>vn(e)?zg(e):e;function st(e){return e?e.__v_isRef===!0:!1}function Fe(e){return c$(e,!1)}function Ef(e){return c$(e,!0)}function c$(e,t){return st(e)?e:new TZ(e,t)}class TZ{constructor(t,n){this.dep=new hb,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:sn(t),this._value=n?t:oi(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,r=this.__v_isShallow||Co(t)||xu(t);t=r?t:sn(t),ri(t,n)&&(this._rawValue=t,this._value=r?t:oi(t),this.dep.trigger())}}function kC(e){e.dep&&e.dep.trigger()}function N(e){return st(e)?e.value:e}function CZ(e){return bt(e)?e():N(e)}const EZ={get:(e,t,n)=>t==="__v_raw"?e:N(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const i=e[t];return st(i)&&!st(n)?(i.value=n,!0):Reflect.set(e,t,n,r)}};function lI(e){return pu(e)?e:new Proxy(e,EZ)}class AZ{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new hb,{get:r,set:i}=t(n.track.bind(n),n.trigger.bind(n));this._get=r,this._set=i}get value(){return this._value=this._get()}set value(t){this._set(t)}}function uI(e){return new AZ(e)}function IZ(e){const t=Je(e)?new Array(e.length):{};for(const n in e)t[n]=d$(e,n);return t}class RZ{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return aZ(sn(this._object),this._key)}}class PZ{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function f$(e,t,n){return st(e)?e:bt(e)?new PZ(e):vn(e)&&arguments.length>1?d$(e,t,n):Fe(e)}function d$(e,t,n){const r=e[t];return st(r)?r:new RZ(e,t,n)}class OZ{constructor(t,n,r){this.fn=t,this.setter=n,this._value=void 0,this.dep=new hb(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Kv-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=r}notify(){if(this.flags|=16,!(this.flags&8)&&$n!==this)return K5(this,!0),!0}get value(){const t=this.dep.track();return J5(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function DZ(e,t,n=!1){let r,i;return bt(e)?r=e:(r=e.get,i=e.set),new OZ(r,i,n)}const MZ={GET:"get",HAS:"has",ITERATE:"iterate"},LZ={SET:"set",ADD:"add",DELETE:"delete",CLEAR:"clear"},gy={},X_=new WeakMap;let Kl;function NZ(){return Kl}function h$(e,t=!1,n=Kl){if(n){let r=X_.get(n);r||X_.set(n,r=[]),r.push(e)}}function kZ(e,t,n=Jt){const{immediate:r,deep:i,once:o,scheduler:a,augmentJob:s,call:l}=n,u=S=>i?S:Co(S)||i===!1||i===0?js(S,1):js(S);let c,f,d,h,v=!1,m=!1;if(st(e)?(f=()=>e.value,v=Co(e)):pu(e)?(f=()=>u(e),v=!0):Je(e)?(m=!0,v=e.some(S=>pu(S)||Co(S)),f=()=>e.map(S=>{if(st(S))return S.value;if(pu(S))return u(S);if(bt(S))return l?l(S,2):S()})):bt(e)?t?f=l?()=>l(e,2):e:f=()=>{if(d){ku();try{d()}finally{Fu()}}const S=Kl;Kl=c;try{return l?l(e,3,[h]):e(h)}finally{Kl=S}}:f=Lr,t&&i){const S=f,C=i===!0?1/0:i;f=()=>js(S(),C)}const y=nI(),_=()=>{c.stop(),y&&y.active&&ub(y.effects,c)};if(o&&t){const S=t;t=(...C)=>{S(...C),_()}}let b=m?new Array(e.length).fill(gy):gy;const w=S=>{if(!(!(c.flags&1)||!c.dirty&&!S))if(t){const C=c.run();if(i||v||(m?C.some((T,A)=>ri(T,b[A])):ri(C,b))){d&&d();const T=Kl;Kl=c;try{const A=[C,b===gy?void 0:m&&b[0]===gy?[]:b,h];l?l(t,3,A):t(...A),b=C}finally{Kl=T}}}else c.run()};return s&&s(w),c=new Xv(f),c.scheduler=a?()=>a(w,!1):w,h=S=>h$(S,!1,c),d=c.onStop=()=>{const S=X_.get(c);if(S){if(l)l(S,4);else for(const C of S)C();X_.delete(c)}},t?r?w(!0):b=c.run():a?a(w.bind(null,!0),!0):c.run(),_.pause=c.pause.bind(c),_.resume=c.resume.bind(c),_.stop=_,_}function js(e,t=1/0,n){if(t<=0||!vn(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,st(e))js(e.value,t,n);else if(Je(e))for(let r=0;r{js(r,t,n)});else if(Ug(e)){for(const r in e)js(e[r],t,n);for(const r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&js(e[r],t,n)}return e}/** +* @vue/runtime-core v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/const p$=[];function FZ(e){p$.push(e)}function $Z(){p$.pop()}function BZ(e,t){}const VZ={SETUP_FUNCTION:0,0:"SETUP_FUNCTION",RENDER_FUNCTION:1,1:"RENDER_FUNCTION",NATIVE_EVENT_HANDLER:5,5:"NATIVE_EVENT_HANDLER",COMPONENT_EVENT_HANDLER:6,6:"COMPONENT_EVENT_HANDLER",VNODE_HOOK:7,7:"VNODE_HOOK",DIRECTIVE_HOOK:8,8:"DIRECTIVE_HOOK",TRANSITION_HOOK:9,9:"TRANSITION_HOOK",APP_ERROR_HANDLER:10,10:"APP_ERROR_HANDLER",APP_WARN_HANDLER:11,11:"APP_WARN_HANDLER",FUNCTION_REF:12,12:"FUNCTION_REF",ASYNC_COMPONENT_LOADER:13,13:"ASYNC_COMPONENT_LOADER",SCHEDULER:14,14:"SCHEDULER",COMPONENT_UPDATE:15,15:"COMPONENT_UPDATE",APP_UNMOUNT_CLEANUP:16,16:"APP_UNMOUNT_CLEANUP"},UZ={sp:"serverPrefetch hook",bc:"beforeCreate hook",c:"created hook",bm:"beforeMount hook",m:"mounted hook",bu:"beforeUpdate hook",u:"updated",bum:"beforeUnmount hook",um:"unmounted hook",a:"activated hook",da:"deactivated hook",ec:"errorCaptured hook",rtc:"renderTracked hook",rtg:"renderTriggered hook",0:"setup function",1:"render function",2:"watcher getter",3:"watcher callback",4:"watcher cleanup function",5:"native event handler",6:"component event handler",7:"vnode hook",8:"directive hook",9:"transition hook",10:"app errorHandler",11:"app warnHandler",12:"ref function",13:"async component loader",14:"scheduler flush",15:"component update",16:"app unmount cleanup function"};function bh(e,t,n,r){try{return r?e(...r):e()}catch(i){Af(i,t,n)}}function oa(e,t,n,r){if(bt(e)){const i=bh(e,t,n,r);return i&&cb(i)&&i.catch(o=>{Af(o,t,n)}),i}if(Je(e)){const i=[];for(let o=0;o>>1,i=Ti[r],o=Jv(i);o=Jv(n)?Ti.push(e):Ti.splice(GZ(t),0,e),e.flags|=1,g$()}}function g$(){K_||(K_=v$.then(m$))}function qv(e){Je(e)?Dd.push(...e):Zl&&e.id===-1?Zl.splice(pd+1,0,e):e.flags&1||(Dd.push(e),e.flags|=1),g$()}function RD(e,t,n=qa+1){for(;nJv(n)-Jv(r));if(Dd.length=0,Zl){Zl.push(...t);return}for(Zl=t,pd=0;pde.id==null?e.flags&2?-1:1/0:e.id;function m$(e){try{for(qa=0;qavd.emit(i,...o)),my=[]):typeof window<"u"&&window.HTMLElement&&!((r=(n=window.navigator)==null?void 0:n.userAgent)!=null&&r.includes("jsdom"))?((t.__VUE_DEVTOOLS_HOOK_REPLAY__=t.__VUE_DEVTOOLS_HOOK_REPLAY__||[]).push(o=>{y$(o,t)}),setTimeout(()=>{vd||(t.__VUE_DEVTOOLS_HOOK_REPLAY__=null,my=[])},3e3)):my=[]}let Cr=null,yb=null;function Qv(e){const t=Cr;return Cr=e,yb=e&&e.type.__scopeId||null,t}function zZ(e){yb=e}function WZ(){yb=null}const jZ=e=>Mr;function Mr(e,t=Cr,n){if(!t||e._n)return e;const r=(...i)=>{r._d&&zC(-1);const o=Qv(t);let a;try{a=e(...i)}finally{Qv(o),r._d&&zC(1)}return a};return r._n=!0,r._c=!0,r._d=!0,r}function _t(e,t){if(Cr===null)return e;const n=Xg(Cr),r=e.dirs||(e.dirs=[]);for(let i=0;ie.__isTeleport,iv=e=>e&&(e.disabled||e.disabled===""),PD=e=>e&&(e.defer||e.defer===""),OD=e=>typeof SVGElement<"u"&&e instanceof SVGElement,DD=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,FC=(e,t)=>{const n=e&&e.to;return At(n)?t?t(n):null:n},S$={name:"Teleport",__isTeleport:!0,process(e,t,n,r,i,o,a,s,l,u){const{mc:c,pc:f,pbc:d,o:{insert:h,querySelector:v,createText:m,createComment:y}}=u,_=iv(t.props);let{shapeFlag:b,children:w,dynamicChildren:S}=t;if(e==null){const C=t.el=m(""),T=t.anchor=m("");h(C,n,r),h(T,n,r);const A=(I,R)=>{b&16&&(i&&i.isCE&&(i.ce._teleportTarget=I),c(w,I,R,i,o,a,s,l))},P=()=>{const I=t.target=FC(t.props,v),R=w$(I,t,m,h);I&&(a!=="svg"&&OD(I)?a="svg":a!=="mathml"&&DD(I)&&(a="mathml"),_||(A(I,R),H0(t,!1)))};_&&(A(n,T),H0(t,!0)),PD(t.props)?xr(()=>{P(),t.el.__isMounted=!0},o):P()}else{if(PD(t.props)&&!e.el.__isMounted){xr(()=>{S$.process(e,t,n,r,i,o,a,s,l,u),delete e.el.__isMounted},o);return}t.el=e.el,t.targetStart=e.targetStart;const C=t.anchor=e.anchor,T=t.target=e.target,A=t.targetAnchor=e.targetAnchor,P=iv(e.props),I=P?n:T,R=P?C:A;if(a==="svg"||OD(T)?a="svg":(a==="mathml"||DD(T))&&(a="mathml"),S?(d(e.dynamicChildren,S,I,i,o,a,s),SI(e,t,!0)):l||f(e,t,I,R,i,o,a,s,!1),_)P?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):yy(t,n,C,u,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const O=t.target=FC(t.props,v);O&&yy(t,O,null,u,0)}else P&&yy(t,T,A,u,1);H0(t,_)}},remove(e,t,n,{um:r,o:{remove:i}},o){const{shapeFlag:a,children:s,anchor:l,targetStart:u,targetAnchor:c,target:f,props:d}=e;if(f&&(i(u),i(c)),o&&i(l),a&16){const h=o||!iv(d);for(let v=0;v{e.isMounted=!0}),jg(()=>{e.isUnmounting=!0}),e}const Vo=[Function,Array],dI={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Vo,onEnter:Vo,onAfterEnter:Vo,onEnterCancelled:Vo,onBeforeLeave:Vo,onLeave:Vo,onAfterLeave:Vo,onLeaveCancelled:Vo,onBeforeAppear:Vo,onAppear:Vo,onAfterAppear:Vo,onAppearCancelled:Vo},x$=e=>{const t=e.subTree;return t.component?x$(t.component):t},KZ={name:"BaseTransition",props:dI,setup(e,{slots:t}){const n=br(),r=fI();return()=>{const i=t.default&&_b(t.default(),!0);if(!i||!i.length)return;const o=T$(i),a=sn(e),{mode:s}=a;if(r.isLeaving)return ux(o);const l=MD(o);if(!l)return ux(o);let u=Xd(l,a,r,n,f=>u=f);l.type!==yr&&ll(l,u);let c=n.subTree&&MD(n.subTree);if(c&&c.type!==yr&&!Ia(l,c)&&x$(n).type!==yr){let f=Xd(c,a,r,n);if(ll(c,f),s==="out-in"&&l.type!==yr)return r.isLeaving=!0,f.afterLeave=()=>{r.isLeaving=!1,n.job.flags&8||n.update(),delete f.afterLeave,c=void 0},ux(o);s==="in-out"&&l.type!==yr?f.delayLeave=(d,h,v)=>{const m=E$(r,c);m[String(c.key)]=c,d[ql]=()=>{h(),d[ql]=void 0,delete u.delayedLeave,c=void 0},u.delayedLeave=()=>{v(),delete u.delayedLeave,c=void 0}}:c=void 0}else c&&(c=void 0);return o}}};function T$(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==yr){t=n;break}}return t}const C$=KZ;function E$(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function Xd(e,t,n,r,i){const{appear:o,mode:a,persisted:s=!1,onBeforeEnter:l,onEnter:u,onAfterEnter:c,onEnterCancelled:f,onBeforeLeave:d,onLeave:h,onAfterLeave:v,onLeaveCancelled:m,onBeforeAppear:y,onAppear:_,onAfterAppear:b,onAppearCancelled:w}=t,S=String(e.key),C=E$(n,e),T=(I,R)=>{I&&oa(I,r,9,R)},A=(I,R)=>{const O=R[1];T(I,R),Je(I)?I.every(M=>M.length<=1)&&O():I.length<=1&&O()},P={mode:a,persisted:s,beforeEnter(I){let R=l;if(!n.isMounted)if(o)R=y||l;else return;I[ql]&&I[ql](!0);const O=C[S];O&&Ia(e,O)&&O.el[ql]&&O.el[ql](),T(R,[I])},enter(I){let R=u,O=c,M=f;if(!n.isMounted)if(o)R=_||u,O=b||c,M=w||f;else return;let $=!1;const F=I[_y]=z=>{$||($=!0,z?T(M,[I]):T(O,[I]),P.delayedLeave&&P.delayedLeave(),I[_y]=void 0)};R?A(R,[I,F]):F()},leave(I,R){const O=String(e.key);if(I[_y]&&I[_y](!0),n.isUnmounting)return R();T(d,[I]);let M=!1;const $=I[ql]=F=>{M||(M=!0,R(),F?T(m,[I]):T(v,[I]),I[ql]=void 0,C[O]===e&&delete C[O])};C[O]=e,h?A(h,[I,$]):$()},clone(I){const R=Xd(I,t,n,r,i);return i&&i(R),R}};return P}function ux(e){if(Wg(e))return e=us(e),e.children=null,e}function MD(e){if(!Wg(e))return b$(e.type)&&e.children?T$(e.children):e;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&bt(n.default))return n.default()}}function ll(e,t){e.shapeFlag&6&&e.component?(e.transition=t,ll(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function _b(e,t=!1,n){let r=[],i=0;for(let o=0;o1)for(let o=0;on.value,set:o=>n.value=o})}return n}function eg(e,t,n,r,i=!1){if(Je(e)){e.forEach((v,m)=>eg(v,t&&(Je(t)?t[m]:t),n,r,i));return}if(vu(r)&&!i){r.shapeFlag&512&&r.type.__asyncResolved&&r.component.subTree.component&&eg(e,t,n,r.component.subTree);return}const o=r.shapeFlag&4?Xg(r.component):r.el,a=i?null:o,{i:s,r:l}=e,u=t&&t.r,c=s.refs===Jt?s.refs={}:s.refs,f=s.setupState,d=sn(f),h=f===Jt?()=>!1:v=>cn(d,v);if(u!=null&&u!==l&&(At(u)?(c[u]=null,h(u)&&(f[u]=null)):st(u)&&(u.value=null)),bt(l))bh(l,s,12,[a,c]);else{const v=At(l),m=st(l);if(v||m){const y=()=>{if(e.f){const _=v?h(l)?f[l]:c[l]:l.value;i?Je(_)&&ub(_,o):Je(_)?_.includes(o)||_.push(o):v?(c[l]=[o],h(l)&&(f[l]=c[l])):(l.value=[o],e.k&&(c[e.k]=l.value))}else v?(c[l]=a,h(l)&&(f[l]=a)):m&&(l.value=a,e.k&&(c[e.k]=a))};a?(y.id=-1,xr(y,n)):y()}}}let LD=!1;const Yf=()=>{LD||(console.error("Hydration completed but contains mismatches."),LD=!0)},JZ=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",QZ=e=>e.namespaceURI.includes("MathML"),by=e=>{if(e.nodeType===1){if(JZ(e))return"svg";if(QZ(e))return"mathml"}},Td=e=>e.nodeType===8;function eq(e){const{mt:t,p:n,o:{patchProp:r,createText:i,nextSibling:o,parentNode:a,remove:s,insert:l,createComment:u}}=e,c=(w,S)=>{if(!S.hasChildNodes()){n(null,w,S),Z_(),S._vnode=w;return}f(S.firstChild,w,null,null,null),Z_(),S._vnode=w},f=(w,S,C,T,A,P=!1)=>{P=P||!!S.dynamicChildren;const I=Td(w)&&w.data==="[",R=()=>m(w,S,C,T,A,I),{type:O,ref:M,shapeFlag:$,patchFlag:F}=S;let z=w.nodeType;S.el=w,F===-2&&(P=!1,S.dynamicChildren=null);let B=null;switch(O){case tl:z!==3?S.children===""?(l(S.el=i(""),a(w),w),B=w):B=R():(w.data!==S.children&&(Yf(),w.data=S.children),B=o(w));break;case yr:b(w)?(B=o(w),_(S.el=w.content.firstChild,w,C)):z!==8||I?B=R():B=o(w);break;case Kc:if(I&&(w=o(w),z=w.nodeType),z===1||z===3){B=w;const Y=!S.children.length;for(let j=0;j{P=P||!!S.dynamicChildren;const{type:I,props:R,patchFlag:O,shapeFlag:M,dirs:$,transition:F}=S,z=I==="input"||I==="option";if(z||O!==-1){$&&Ja(S,null,C,"created");let B=!1;if(b(w)){B=q$(null,F)&&C&&C.vnode.props&&C.vnode.props.appear;const j=w.content.firstChild;B&&F.beforeEnter(j),_(j,w,C),S.el=w=j}if(M&16&&!(R&&(R.innerHTML||R.textContent))){let j=h(w.firstChild,S,w,C,T,A,P);for(;j;){Sy(w,1)||Yf();const se=j;j=j.nextSibling,s(se)}}else if(M&8){let j=S.children;j[0]===` +`&&(w.tagName==="PRE"||w.tagName==="TEXTAREA")&&(j=j.slice(1)),w.textContent!==j&&(Sy(w,0)||Yf(),w.textContent=S.children)}if(R){if(z||!P||O&48){const j=w.tagName.includes("-");for(const se in R)(z&&(se.endsWith("value")||se==="indeterminate")||Mu(se)&&!el(se)||se[0]==="."||j)&&r(w,se,null,R[se],void 0,C)}else if(R.onClick)r(w,"onClick",null,R.onClick,void 0,C);else if(O&4&&pu(R.style))for(const j in R.style)R.style[j]}let Y;(Y=R&&R.onVnodeBeforeMount)&&Gi(Y,C,S),$&&Ja(S,null,C,"beforeMount"),((Y=R&&R.onVnodeMounted)||$||B)&&a4(()=>{Y&&Gi(Y,C,S),B&&F.enter(w),$&&Ja(S,null,C,"mounted")},T)}return w.nextSibling},h=(w,S,C,T,A,P,I)=>{I=I||!!S.dynamicChildren;const R=S.children,O=R.length;for(let M=0;M{const{slotScopeIds:I}=S;I&&(A=A?A.concat(I):I);const R=a(w),O=h(o(w),S,R,C,T,A,P);return O&&Td(O)&&O.data==="]"?o(S.anchor=O):(Yf(),l(S.anchor=u("]"),R,O),O)},m=(w,S,C,T,A,P)=>{if(Sy(w.parentElement,1)||Yf(),S.el=null,P){const O=y(w);for(;;){const M=o(w);if(M&&M!==O)s(M);else break}}const I=o(w),R=a(w);return s(w),n(null,S,R,I,C,T,by(R),A),C&&(C.vnode.el=S.el,Tb(C,S.el)),I},y=(w,S="[",C="]")=>{let T=0;for(;w;)if(w=o(w),w&&Td(w)&&(w.data===S&&T++,w.data===C)){if(T===0)return o(w);T--}return w},_=(w,S,C)=>{const T=S.parentNode;T&&T.replaceChild(w,S);let A=C;for(;A;)A.vnode.el===S&&(A.vnode.el=A.subTree.el=w),A=A.parent},b=w=>w.nodeType===1&&w.tagName==="TEMPLATE";return[c,f]}const ND="data-allow-mismatch",tq={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function Sy(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(ND);)e=e.parentElement;const n=e&&e.getAttribute(ND);if(n==null)return!1;if(n==="")return!0;{const r=n.split(",");return t===0&&r.includes("children")?!0:n.split(",").includes(tq[t])}}const nq=Hg().requestIdleCallback||(e=>setTimeout(e,1)),rq=Hg().cancelIdleCallback||(e=>clearTimeout(e)),iq=(e=1e4)=>t=>{const n=nq(t,{timeout:e});return()=>rq(n)};function oq(e){const{top:t,left:n,bottom:r,right:i}=e.getBoundingClientRect(),{innerHeight:o,innerWidth:a}=window;return(t>0&&t0&&r0&&n0&&i(t,n)=>{const r=new IntersectionObserver(i=>{for(const o of i)if(o.isIntersecting){r.disconnect(),t();break}},e);return n(i=>{if(i instanceof Element){if(oq(i))return t(),r.disconnect(),!1;r.observe(i)}}),()=>r.disconnect()},sq=e=>t=>{if(e){const n=matchMedia(e);if(n.matches)t();else return n.addEventListener("change",t,{once:!0}),()=>n.removeEventListener("change",t)}},lq=(e=[])=>(t,n)=>{At(e)&&(e=[e]);let r=!1;const i=a=>{r||(r=!0,o(),t(),a.target.dispatchEvent(new a.constructor(a.type,a)))},o=()=>{n(a=>{for(const s of e)a.removeEventListener(s,i)})};return n(a=>{for(const s of e)a.addEventListener(s,i,{once:!0})}),o};function uq(e,t){if(Td(e)&&e.data==="["){let n=1,r=e.nextSibling;for(;r;){if(r.nodeType===1){if(t(r)===!1)break}else if(Td(r))if(r.data==="]"){if(--n===0)break}else r.data==="["&&n++;r=r.nextSibling}}else t(e)}const vu=e=>!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function cq(e){bt(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:i=200,hydrate:o,timeout:a,suspensible:s=!0,onError:l}=e;let u=null,c,f=0;const d=()=>(f++,u=null,h()),h=()=>{let v;return u||(v=u=t().catch(m=>{if(m=m instanceof Error?m:new Error(String(m)),l)return new Promise((y,_)=>{l(m,()=>y(d()),()=>_(m),f+1)});throw m}).then(m=>v!==u&&u?u:(m&&(m.__esModule||m[Symbol.toStringTag]==="Module")&&(m=m.default),c=m,m)))};return it({name:"AsyncComponentWrapper",__asyncLoader:h,__asyncHydrate(v,m,y){const _=o?()=>{const b=o(y,w=>uq(v,w));b&&(m.bum||(m.bum=[])).push(b)}:y;c?_():h().then(()=>!m.isUnmounted&&_())},get __asyncResolved(){return c},setup(){const v=Tr;if(hI(v),c)return()=>cx(c,v);const m=w=>{u=null,Af(w,v,13,!r)};if(s&&v.suspense||Kd)return h().then(w=>()=>cx(w,v)).catch(w=>(m(w),()=>r?ye(r,{error:w}):null));const y=Fe(!1),_=Fe(),b=Fe(!!i);return i&&setTimeout(()=>{b.value=!1},i),a!=null&&setTimeout(()=>{if(!y.value&&!_.value){const w=new Error(`Async component timed out after ${a}ms.`);m(w),_.value=w}},a),h().then(()=>{y.value=!0,v.parent&&Wg(v.parent.vnode)&&v.parent.update()}).catch(w=>{m(w),_.value=w}),()=>{if(y.value&&c)return cx(c,v);if(_.value&&r)return ye(r,{error:_.value});if(n&&!b.value)return ye(n)}}})}function cx(e,t){const{ref:n,props:r,children:i,ce:o}=t.vnode,a=ye(e,r,i);return a.ref=n,a.ce=o,delete t.vnode.ce,a}const Wg=e=>e.type.__isKeepAlive,fq={name:"KeepAlive",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){const n=br(),r=n.ctx;if(!r.renderer)return()=>{const b=t.default&&t.default();return b&&b.length===1?b[0]:b};const i=new Map,o=new Set;let a=null;const s=n.suspense,{renderer:{p:l,m:u,um:c,o:{createElement:f}}}=r,d=f("div");r.activate=(b,w,S,C,T)=>{const A=b.component;u(b,w,S,0,s),l(A.vnode,b,w,S,A,s,C,b.slotScopeIds,T),xr(()=>{A.isDeactivated=!1,A.a&&jc(A.a);const P=b.props&&b.props.onVnodeMounted;P&&Gi(P,A.parent,b)},s)},r.deactivate=b=>{const w=b.component;J_(w.m),J_(w.a),u(b,d,null,1,s),xr(()=>{w.da&&jc(w.da);const S=b.props&&b.props.onVnodeUnmounted;S&&Gi(S,w.parent,b),w.isDeactivated=!0},s)};function h(b){fx(b),c(b,n,s,!0)}function v(b){i.forEach((w,S)=>{const C=KC(w.type);C&&!b(C)&&m(S)})}function m(b){const w=i.get(b);w&&(!a||!Ia(w,a))?h(w):a&&fx(a),i.delete(b),o.delete(b)}Yt(()=>[e.include,e.exclude],([b,w])=>{b&&v(S=>$p(b,S)),w&&v(S=>!$p(w,S))},{flush:"post",deep:!0});let y=null;const _=()=>{y!=null&&(Q_(n.subTree.type)?xr(()=>{i.set(y,wy(n.subTree))},n.subTree.suspense):i.set(y,wy(n.subTree)))};return lo(_),Sb(_),jg(()=>{i.forEach(b=>{const{subTree:w,suspense:S}=n,C=wy(w);if(b.type===C.type&&b.key===C.key){fx(C);const T=C.component.da;T&&xr(T,S);return}h(b)})}),()=>{if(y=null,!t.default)return a=null;const b=t.default(),w=b[0];if(b.length>1)return a=null,b;if(!ul(w)||!(w.shapeFlag&4)&&!(w.shapeFlag&128))return a=null,w;let S=wy(w);if(S.type===yr)return a=null,S;const C=S.type,T=KC(vu(S)?S.type.__asyncResolved||{}:C),{include:A,exclude:P,max:I}=e;if(A&&(!T||!$p(A,T))||P&&T&&$p(P,T))return S.shapeFlag&=-257,a=S,w;const R=S.key==null?C:S.key,O=i.get(R);return S.el&&(S=us(S),w.shapeFlag&128&&(w.ssContent=S)),y=R,O?(S.el=O.el,S.component=O.component,S.transition&&ll(S,S.transition),S.shapeFlag|=512,o.delete(R),o.add(R)):(o.add(R),I&&o.size>parseInt(I,10)&&m(o.values().next().value)),S.shapeFlag|=256,a=S,Q_(w.type)?w:S}}},dq=fq;function $p(e,t){return Je(e)?e.some(n=>$p(n,t)):At(e)?e.split(",").includes(t):M5(e)?(e.lastIndex=0,e.test(t)):!1}function A$(e,t){R$(e,"a",t)}function I$(e,t){R$(e,"da",t)}function R$(e,t,n=Tr){const r=e.__wdc||(e.__wdc=()=>{let i=n;for(;i;){if(i.isDeactivated)return;i=i.parent}return e()});if(bb(t,r,n),n){let i=n.parent;for(;i&&i.parent;)Wg(i.parent.vnode)&&hq(r,t,n,i),i=i.parent}}function hq(e,t,n,r){const i=bb(t,e,r,!0);Sh(()=>{ub(r[t],i)},n)}function fx(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function wy(e){return e.shapeFlag&128?e.ssContent:e}function bb(e,t,n=Tr,r=!1){if(n){const i=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...a)=>{ku();const s=cf(n),l=oa(t,n,e,a);return s(),Fu(),l});return r?i.unshift(o):i.push(o),o}}const ml=e=>(t,n=Tr)=>{(!Kd||e==="sp")&&bb(e,(...r)=>t(...r),n)},P$=ml("bm"),lo=ml("m"),pI=ml("bu"),Sb=ml("u"),jg=ml("bum"),Sh=ml("um"),O$=ml("sp"),D$=ml("rtg"),M$=ml("rtc");function L$(e,t=Tr){bb("ec",e,t)}const vI="components",pq="directives";function vq(e,t){return gI(vI,e,!0,t)||e}const N$=Symbol.for("v-ndc");function ls(e){return At(e)?gI(vI,e,!1)||e:e||N$}function gq(e){return gI(pq,e)}function gI(e,t,n=!0,r=!1){const i=Cr||Tr;if(i){const o=i.type;if(e===vI){const s=KC(o,!1);if(s&&(s===t||s===Bn(t)||s===Nu(Bn(t))))return o}const a=kD(i[e]||o[e],t)||kD(i.appContext[e],t);return!a&&r?o:a}}function kD(e,t){return e&&(e[t]||e[Bn(t)]||e[Nu(Bn(t))])}function on(e,t,n,r){let i;const o=n&&n[r],a=Je(e);if(a||At(e)){const s=a&&pu(e);let l=!1;s&&(l=!Co(e),e=pb(e)),i=new Array(e.length);for(let u=0,c=e.length;ut(s,l,void 0,o&&o[l]));else{const s=Object.keys(e);i=new Array(s.length);for(let l=0,u=s.length;l{const o=r.fn(...i);return o&&(o.key=r.key),o}:r.fn)}return e}function Md(e,t,n={},r,i){if(Cr.ce||Cr.parent&&vu(Cr.parent)&&Cr.parent.ce)return t!=="default"&&(n.name=t),K(),Ot(Ze,null,[ye("slot",n,r&&r())],64);let o=e[t];o&&o._c&&(o._d=!1),K();const a=o&&mI(o(n)),s=n.key||a&&a.key,l=Ot(Ze,{key:(s&&!Pi(s)?s:`_${t}`)+(!a&&r?"_fb":"")},a||(r?r():[]),a&&e._===1?64:-2);return!i&&l.scopeId&&(l.slotScopeIds=[l.scopeId+"-s"]),o&&o._c&&(o._d=!0),l}function mI(e){return e.some(t=>ul(t)?!(t.type===yr||t.type===Ze&&!mI(t.children)):!0)?e:null}function yq(e,t){const n={};for(const r in e)n[t&&/[A-Z]/.test(r)?`on:${r}`:Wc(r)]=e[r];return n}const $C=e=>e?h4(e)?Xg(e):$C(e.parent):null,ov=Qt(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>$C(e.parent),$root:e=>$C(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>yI(e),$forceUpdate:e=>e.f||(e.f=()=>{cI(e.update)}),$nextTick:e=>e.n||(e.n=gs.bind(e.proxy)),$watch:e=>Xq.bind(e)}),dx=(e,t)=>e!==Jt&&!e.__isScriptSetup&&cn(e,t),BC={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:r,data:i,props:o,accessCache:a,type:s,appContext:l}=e;let u;if(t[0]!=="$"){const h=a[t];if(h!==void 0)switch(h){case 1:return r[t];case 2:return i[t];case 4:return n[t];case 3:return o[t]}else{if(dx(r,t))return a[t]=1,r[t];if(i!==Jt&&cn(i,t))return a[t]=2,i[t];if((u=e.propsOptions[0])&&cn(u,t))return a[t]=3,o[t];if(n!==Jt&&cn(n,t))return a[t]=4,n[t];VC&&(a[t]=0)}}const c=ov[t];let f,d;if(c)return t==="$attrs"&&ii(e.attrs,"get",""),c(e);if((f=s.__cssModules)&&(f=f[t]))return f;if(n!==Jt&&cn(n,t))return a[t]=4,n[t];if(d=l.config.globalProperties,cn(d,t))return d[t]},set({_:e},t,n){const{data:r,setupState:i,ctx:o}=e;return dx(i,t)?(i[t]=n,!0):r!==Jt&&cn(r,t)?(r[t]=n,!0):cn(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:i,propsOptions:o}},a){let s;return!!n[a]||e!==Jt&&cn(e,a)||dx(t,a)||(s=o[0])&&cn(s,a)||cn(r,a)||cn(ov,a)||cn(i.config.globalProperties,a)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:cn(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}},_q=Qt({},BC,{get(e,t){if(t!==Symbol.unscopables)return BC.get(e,t,e)},has(e,t){return t[0]!=="_"&&!JA(t)}});function bq(){return null}function Sq(){return null}function wq(e){}function xq(e){}function Tq(){return null}function Cq(){}function Eq(e,t){return null}function Aq(){return k$().slots}function Iq(){return k$().attrs}function k$(){const e=br();return e.setupContext||(e.setupContext=g4(e))}function tg(e){return Je(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}function Rq(e,t){const n=tg(e);for(const r in t){if(r.startsWith("__skip"))continue;let i=n[r];i?Je(i)||bt(i)?i=n[r]={type:i,default:t[r]}:i.default=t[r]:i===null&&(i=n[r]={default:t[r]}),i&&t[`__skip_${r}`]&&(i.skipFactory=!0)}return n}function Pq(e,t){return!e||!t?e||t:Je(e)&&Je(t)?e.concat(t):Qt({},tg(e),tg(t))}function Oq(e,t){const n={};for(const r in e)t.includes(r)||Object.defineProperty(n,r,{enumerable:!0,get:()=>e[r]});return n}function Dq(e){const t=br();let n=e();return jC(),cb(n)&&(n=n.catch(r=>{throw cf(t),r})),[n,()=>cf(t)]}let VC=!0;function Mq(e){const t=yI(e),n=e.proxy,r=e.ctx;VC=!1,t.beforeCreate&&FD(t.beforeCreate,e,"bc");const{data:i,computed:o,methods:a,watch:s,provide:l,inject:u,created:c,beforeMount:f,mounted:d,beforeUpdate:h,updated:v,activated:m,deactivated:y,beforeDestroy:_,beforeUnmount:b,destroyed:w,unmounted:S,render:C,renderTracked:T,renderTriggered:A,errorCaptured:P,serverPrefetch:I,expose:R,inheritAttrs:O,components:M,directives:$,filters:F}=t;if(u&&Lq(u,r,null),a)for(const Y in a){const j=a[Y];bt(j)&&(r[Y]=j.bind(n))}if(i){const Y=i.call(n,n);vn(Y)&&(e.data=Na(Y))}if(VC=!0,o)for(const Y in o){const j=o[Y],se=bt(j)?j.bind(n,n):bt(j.get)?j.get.bind(n,n):Lr,ge=!bt(j)&&bt(j.set)?j.set.bind(n):Lr,ve=Ve({get:se,set:ge});Object.defineProperty(r,Y,{enumerable:!0,configurable:!0,get:()=>ve.value,set:De=>ve.value=De})}if(s)for(const Y in s)F$(s[Y],r,n,Y);if(l){const Y=bt(l)?l.call(n):l;Reflect.ownKeys(Y).forEach(j=>{av(j,Y[j])})}c&&FD(c,e,"c");function B(Y,j){Je(j)?j.forEach(se=>Y(se.bind(n))):j&&Y(j.bind(n))}if(B(P$,f),B(lo,d),B(pI,h),B(Sb,v),B(A$,m),B(I$,y),B(L$,P),B(M$,T),B(D$,A),B(jg,b),B(Sh,S),B(O$,I),Je(R))if(R.length){const Y=e.exposed||(e.exposed={});R.forEach(j=>{Object.defineProperty(Y,j,{get:()=>n[j],set:se=>n[j]=se})})}else e.exposed||(e.exposed={});C&&e.render===Lr&&(e.render=C),O!=null&&(e.inheritAttrs=O),M&&(e.components=M),$&&(e.directives=$),I&&hI(e)}function Lq(e,t,n=Lr){Je(e)&&(e=UC(e));for(const r in e){const i=e[r];let o;vn(i)?"default"in i?o=Ji(i.from||r,i.default,!0):o=Ji(i.from||r):o=Ji(i),st(o)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>o.value,set:a=>o.value=a}):t[r]=o}}function FD(e,t,n){oa(Je(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function F$(e,t,n,r){let i=r.includes(".")?n4(n,r):()=>n[r];if(At(e)){const o=t[e];bt(o)&&Yt(i,o)}else if(bt(e))Yt(i,e.bind(n));else if(vn(e))if(Je(e))e.forEach(o=>F$(o,t,n,r));else{const o=bt(e.handler)?e.handler.bind(n):t[e.handler];bt(o)&&Yt(i,o,e)}}function yI(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:i,optionsCache:o,config:{optionMergeStrategies:a}}=e.appContext,s=o.get(t);let l;return s?l=s:!i.length&&!n&&!r?l=t:(l={},i.length&&i.forEach(u=>q_(l,u,a,!0)),q_(l,t,a)),vn(t)&&o.set(t,l),l}function q_(e,t,n,r=!1){const{mixins:i,extends:o}=t;o&&q_(e,o,n,!0),i&&i.forEach(a=>q_(e,a,n,!0));for(const a in t)if(!(r&&a==="expose")){const s=Nq[a]||n&&n[a];e[a]=s?s(e[a],t[a]):t[a]}return e}const Nq={data:$D,props:BD,emits:BD,methods:Bp,computed:Bp,beforeCreate:_i,created:_i,beforeMount:_i,mounted:_i,beforeUpdate:_i,updated:_i,beforeDestroy:_i,beforeUnmount:_i,destroyed:_i,unmounted:_i,activated:_i,deactivated:_i,errorCaptured:_i,serverPrefetch:_i,components:Bp,directives:Bp,watch:Fq,provide:$D,inject:kq};function $D(e,t){return t?e?function(){return Qt(bt(e)?e.call(this,this):e,bt(t)?t.call(this,this):t)}:t:e}function kq(e,t){return Bp(UC(e),UC(t))}function UC(e){if(Je(e)){const t={};for(let n=0;n1)return n&&bt(t)?t.call(r&&r.proxy):t}}function _I(){return!!(Tr||Cr||Xc)}const B$={},V$=()=>Object.create(B$),U$=e=>Object.getPrototypeOf(e)===B$;function Vq(e,t,n,r=!1){const i={},o=V$();e.propsDefaults=Object.create(null),H$(e,t,i,o);for(const a in e.propsOptions[0])a in i||(i[a]=void 0);n?e.props=r?i:sI(i):e.type.props?e.props=i:e.props=o,e.attrs=o}function Uq(e,t,n,r){const{props:i,attrs:o,vnode:{patchFlag:a}}=e,s=sn(i),[l]=e.propsOptions;let u=!1;if((r||a>0)&&!(a&16)){if(a&8){const c=e.vnode.dynamicProps;for(let f=0;f{l=!0;const[d,h]=G$(f,t,!0);Qt(a,d),h&&s.push(...h)};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}if(!o&&!l)return vn(e)&&r.set(e,Gc),Gc;if(Je(o))for(let c=0;ce[0]==="_"||e==="$stable",bI=e=>Je(e)?e.map(ji):[ji(e)],Gq=(e,t,n)=>{if(t._n)return t;const r=Mr((...i)=>bI(t(...i)),n);return r._c=!1,r},W$=(e,t,n)=>{const r=e._ctx;for(const i in e){if(z$(i))continue;const o=e[i];if(bt(o))t[i]=Gq(i,o,r);else if(o!=null){const a=bI(o);t[i]=()=>a}}},j$=(e,t)=>{const n=bI(t);e.slots.default=()=>n},Y$=(e,t,n)=>{for(const r in t)(n||r!=="_")&&(e[r]=t[r])},zq=(e,t,n)=>{const r=e.slots=V$();if(e.vnode.shapeFlag&32){const i=t._;i?(Y$(r,t,n),n&&qA(r,"_",i,!0)):W$(t,r)}else t&&j$(e,t)},Wq=(e,t,n)=>{const{vnode:r,slots:i}=e;let o=!0,a=Jt;if(r.shapeFlag&32){const s=t._;s?n&&s===1?o=!1:Y$(i,t,n):(o=!t.$stable,W$(t,i)),a=t}else t&&(j$(e,t),a={default:1});if(o)for(const s in i)!z$(s)&&a[s]==null&&delete i[s]},xr=a4;function X$(e){return Z$(e)}function K$(e){return Z$(e,eq)}function Z$(e,t){const n=Hg();n.__VUE__=!0;const{insert:r,remove:i,patchProp:o,createElement:a,createText:s,createComment:l,setText:u,setElementText:c,parentNode:f,nextSibling:d,setScopeId:h=Lr,insertStaticContent:v}=e,m=(H,G,le,we=null,pe=null,U=null,W=void 0,q=null,fe=!!G.dynamicChildren)=>{if(H===G)return;H&&!Ia(H,G)&&(we=ce(H),De(H,pe,U,!0),H=null),G.patchFlag===-2&&(fe=!1,G.dynamicChildren=null);const{type:_e,ref:Pe,shapeFlag:Z}=G;switch(_e){case tl:y(H,G,le,we);break;case yr:_(H,G,le,we);break;case Kc:H==null&&b(G,le,we,W);break;case Ze:M(H,G,le,we,pe,U,W,q,fe);break;default:Z&1?C(H,G,le,we,pe,U,W,q,fe):Z&6?$(H,G,le,we,pe,U,W,q,fe):(Z&64||Z&128)&&_e.process(H,G,le,we,pe,U,W,q,fe,Te)}Pe!=null&&pe&&eg(Pe,H&&H.ref,U,G||H,!G)},y=(H,G,le,we)=>{if(H==null)r(G.el=s(G.children),le,we);else{const pe=G.el=H.el;G.children!==H.children&&u(pe,G.children)}},_=(H,G,le,we)=>{H==null?r(G.el=l(G.children||""),le,we):G.el=H.el},b=(H,G,le,we)=>{[H.el,H.anchor]=v(H.children,G,le,we,H.el,H.anchor)},w=({el:H,anchor:G},le,we)=>{let pe;for(;H&&H!==G;)pe=d(H),r(H,le,we),H=pe;r(G,le,we)},S=({el:H,anchor:G})=>{let le;for(;H&&H!==G;)le=d(H),i(H),H=le;i(G)},C=(H,G,le,we,pe,U,W,q,fe)=>{G.type==="svg"?W="svg":G.type==="math"&&(W="mathml"),H==null?T(G,le,we,pe,U,W,q,fe):I(H,G,pe,U,W,q,fe)},T=(H,G,le,we,pe,U,W,q)=>{let fe,_e;const{props:Pe,shapeFlag:Z,transition:de,dirs:Be}=H;if(fe=H.el=a(H.type,U,Pe&&Pe.is,Pe),Z&8?c(fe,H.children):Z&16&&P(H.children,fe,null,we,pe,hx(H,U),W,q),Be&&Ja(H,null,we,"created"),A(fe,H,H.scopeId,W,we),Pe){for(const ht in Pe)ht!=="value"&&!el(ht)&&o(fe,ht,null,Pe[ht],U,we);"value"in Pe&&o(fe,"value",null,Pe.value,U),(_e=Pe.onVnodeBeforeMount)&&Gi(_e,we,H)}Be&&Ja(H,null,we,"beforeMount");const Xe=q$(pe,de);Xe&&de.beforeEnter(fe),r(fe,G,le),((_e=Pe&&Pe.onVnodeMounted)||Xe||Be)&&xr(()=>{_e&&Gi(_e,we,H),Xe&&de.enter(fe),Be&&Ja(H,null,we,"mounted")},pe)},A=(H,G,le,we,pe)=>{if(le&&h(H,le),we)for(let U=0;U{for(let _e=fe;_e{const q=G.el=H.el;let{patchFlag:fe,dynamicChildren:_e,dirs:Pe}=G;fe|=H.patchFlag&16;const Z=H.props||Jt,de=G.props||Jt;let Be;if(le&&Qu(le,!1),(Be=de.onVnodeBeforeUpdate)&&Gi(Be,le,G,H),Pe&&Ja(G,H,le,"beforeUpdate"),le&&Qu(le,!0),(Z.innerHTML&&de.innerHTML==null||Z.textContent&&de.textContent==null)&&c(q,""),_e?R(H.dynamicChildren,_e,q,le,we,hx(G,pe),U):W||j(H,G,q,null,le,we,hx(G,pe),U,!1),fe>0){if(fe&16)O(q,Z,de,le,pe);else if(fe&2&&Z.class!==de.class&&o(q,"class",null,de.class,pe),fe&4&&o(q,"style",Z.style,de.style,pe),fe&8){const Xe=G.dynamicProps;for(let ht=0;ht{Be&&Gi(Be,le,G,H),Pe&&Ja(G,H,le,"updated")},we)},R=(H,G,le,we,pe,U,W)=>{for(let q=0;q{if(G!==le){if(G!==Jt)for(const U in G)!el(U)&&!(U in le)&&o(H,U,G[U],null,pe,we);for(const U in le){if(el(U))continue;const W=le[U],q=G[U];W!==q&&U!=="value"&&o(H,U,q,W,pe,we)}"value"in le&&o(H,"value",G.value,le.value,pe)}},M=(H,G,le,we,pe,U,W,q,fe)=>{const _e=G.el=H?H.el:s(""),Pe=G.anchor=H?H.anchor:s("");let{patchFlag:Z,dynamicChildren:de,slotScopeIds:Be}=G;Be&&(q=q?q.concat(Be):Be),H==null?(r(_e,le,we),r(Pe,le,we),P(G.children||[],le,Pe,pe,U,W,q,fe)):Z>0&&Z&64&&de&&H.dynamicChildren?(R(H.dynamicChildren,de,le,pe,U,W,q),(G.key!=null||pe&&G===pe.subTree)&&SI(H,G,!0)):j(H,G,le,Pe,pe,U,W,q,fe)},$=(H,G,le,we,pe,U,W,q,fe)=>{G.slotScopeIds=q,H==null?G.shapeFlag&512?pe.ctx.activate(G,le,we,W,fe):F(G,le,we,pe,U,W,fe):z(H,G,fe)},F=(H,G,le,we,pe,U,W)=>{const q=H.component=d4(H,we,pe);if(Wg(H)&&(q.ctx.renderer=Te),p4(q,!1,W),q.asyncDep){if(pe&&pe.registerDep(q,B,W),!H.el){const fe=q.subTree=ye(yr);_(null,fe,G,le)}}else B(q,H,G,le,pe,U,W)},z=(H,G,le)=>{const we=G.component=H.component;if(eJ(H,G,le))if(we.asyncDep&&!we.asyncResolved){Y(we,G,le);return}else we.next=G,we.update();else G.el=H.el,we.vnode=G},B=(H,G,le,we,pe,U,W)=>{const q=()=>{if(H.isMounted){let{next:Z,bu:de,u:Be,parent:Xe,vnode:ht}=H;{const He=J$(H);if(He){Z&&(Z.el=ht.el,Y(H,Z,W)),He.asyncDep.then(()=>{H.isUnmounted||q()});return}}let ee=Z,ie;Qu(H,!1),Z?(Z.el=ht.el,Y(H,Z,W)):Z=ht,de&&jc(de),(ie=Z.props&&Z.props.onVnodeBeforeUpdate)&&Gi(ie,Xe,Z,ht),Qu(H,!0);const he=G0(H),Ce=H.subTree;H.subTree=he,m(Ce,he,f(Ce.el),ce(Ce),H,pe,U),Z.el=he.el,ee===null&&Tb(H,he.el),Be&&xr(Be,pe),(ie=Z.props&&Z.props.onVnodeUpdated)&&xr(()=>Gi(ie,Xe,Z,ht),pe)}else{let Z;const{el:de,props:Be}=G,{bm:Xe,m:ht,parent:ee,root:ie,type:he}=H,Ce=vu(G);if(Qu(H,!1),Xe&&jc(Xe),!Ce&&(Z=Be&&Be.onVnodeBeforeMount)&&Gi(Z,ee,G),Qu(H,!0),de&&$e){const He=()=>{H.subTree=G0(H),$e(de,H.subTree,H,pe,null)};Ce&&he.__asyncHydrate?he.__asyncHydrate(de,H,He):He()}else{ie.ce&&ie.ce._injectChildStyle(he);const He=H.subTree=G0(H);m(null,He,le,we,H,pe,U),G.el=He.el}if(ht&&xr(ht,pe),!Ce&&(Z=Be&&Be.onVnodeMounted)){const He=G;xr(()=>Gi(Z,ee,He),pe)}(G.shapeFlag&256||ee&&vu(ee.vnode)&&ee.vnode.shapeFlag&256)&&H.a&&xr(H.a,pe),H.isMounted=!0,G=le=we=null}};H.scope.on();const fe=H.effect=new Xv(q);H.scope.off();const _e=H.update=fe.run.bind(fe),Pe=H.job=fe.runIfDirty.bind(fe);Pe.i=H,Pe.id=H.uid,fe.scheduler=()=>cI(Pe),Qu(H,!0),_e()},Y=(H,G,le)=>{G.component=H;const we=H.vnode.props;H.vnode=G,H.next=null,Uq(H,G.props,we,le),Wq(H,G.children,le),ku(),RD(H),Fu()},j=(H,G,le,we,pe,U,W,q,fe=!1)=>{const _e=H&&H.children,Pe=H?H.shapeFlag:0,Z=G.children,{patchFlag:de,shapeFlag:Be}=G;if(de>0){if(de&128){ge(_e,Z,le,we,pe,U,W,q,fe);return}else if(de&256){se(_e,Z,le,we,pe,U,W,q,fe);return}}Be&8?(Pe&16&&je(_e,pe,U),Z!==_e&&c(le,Z)):Pe&16?Be&16?ge(_e,Z,le,we,pe,U,W,q,fe):je(_e,pe,U,!0):(Pe&8&&c(le,""),Be&16&&P(Z,le,we,pe,U,W,q,fe))},se=(H,G,le,we,pe,U,W,q,fe)=>{H=H||Gc,G=G||Gc;const _e=H.length,Pe=G.length,Z=Math.min(_e,Pe);let de;for(de=0;dePe?je(H,pe,U,!0,!1,Z):P(G,le,we,pe,U,W,q,fe,Z)},ge=(H,G,le,we,pe,U,W,q,fe)=>{let _e=0;const Pe=G.length;let Z=H.length-1,de=Pe-1;for(;_e<=Z&&_e<=de;){const Be=H[_e],Xe=G[_e]=fe?Jl(G[_e]):ji(G[_e]);if(Ia(Be,Xe))m(Be,Xe,le,null,pe,U,W,q,fe);else break;_e++}for(;_e<=Z&&_e<=de;){const Be=H[Z],Xe=G[de]=fe?Jl(G[de]):ji(G[de]);if(Ia(Be,Xe))m(Be,Xe,le,null,pe,U,W,q,fe);else break;Z--,de--}if(_e>Z){if(_e<=de){const Be=de+1,Xe=Bede)for(;_e<=Z;)De(H[_e],pe,U,!0),_e++;else{const Be=_e,Xe=_e,ht=new Map;for(_e=Xe;_e<=de;_e++){const ke=G[_e]=fe?Jl(G[_e]):ji(G[_e]);ke.key!=null&&ht.set(ke.key,_e)}let ee,ie=0;const he=de-Xe+1;let Ce=!1,He=0;const ne=new Array(he);for(_e=0;_e=he){De(ke,pe,U,!0);continue}let Qe;if(ke.key!=null)Qe=ht.get(ke.key);else for(ee=Xe;ee<=de;ee++)if(ne[ee-Xe]===0&&Ia(ke,G[ee])){Qe=ee;break}Qe===void 0?De(ke,pe,U,!0):(ne[Qe-Xe]=_e+1,Qe>=He?He=Qe:Ce=!0,m(ke,G[Qe],le,null,pe,U,W,q,fe),ie++)}const Ae=Ce?jq(ne):Gc;for(ee=Ae.length-1,_e=he-1;_e>=0;_e--){const ke=Xe+_e,Qe=G[ke],Ge=ke+1{const{el:U,type:W,transition:q,children:fe,shapeFlag:_e}=H;if(_e&6){ve(H.component.subTree,G,le,we);return}if(_e&128){H.suspense.move(G,le,we);return}if(_e&64){W.move(H,G,le,Te);return}if(W===Ze){r(U,G,le);for(let Z=0;Zq.enter(U),pe);else{const{leave:Z,delayLeave:de,afterLeave:Be}=q,Xe=()=>r(U,G,le),ht=()=>{Z(U,()=>{Xe(),Be&&Be()})};de?de(U,Xe,ht):ht()}else r(U,G,le)},De=(H,G,le,we=!1,pe=!1)=>{const{type:U,props:W,ref:q,children:fe,dynamicChildren:_e,shapeFlag:Pe,patchFlag:Z,dirs:de,cacheIndex:Be}=H;if(Z===-2&&(pe=!1),q!=null&&eg(q,null,le,H,!0),Be!=null&&(G.renderCache[Be]=void 0),Pe&256){G.ctx.deactivate(H);return}const Xe=Pe&1&&de,ht=!vu(H);let ee;if(ht&&(ee=W&&W.onVnodeBeforeUnmount)&&Gi(ee,G,H),Pe&6)Me(H.component,le,we);else{if(Pe&128){H.suspense.unmount(le,we);return}Xe&&Ja(H,null,G,"beforeUnmount"),Pe&64?H.type.remove(H,G,le,Te,we):_e&&!_e.hasOnce&&(U!==Ze||Z>0&&Z&64)?je(_e,G,le,!1,!0):(U===Ze&&Z&384||!pe&&Pe&16)&&je(fe,G,le),we&&Ne(H)}(ht&&(ee=W&&W.onVnodeUnmounted)||Xe)&&xr(()=>{ee&&Gi(ee,G,H),Xe&&Ja(H,null,G,"unmounted")},le)},Ne=H=>{const{type:G,el:le,anchor:we,transition:pe}=H;if(G===Ze){ze(le,we);return}if(G===Kc){S(H);return}const U=()=>{i(le),pe&&!pe.persisted&&pe.afterLeave&&pe.afterLeave()};if(H.shapeFlag&1&&pe&&!pe.persisted){const{leave:W,delayLeave:q}=pe,fe=()=>W(le,U);q?q(H.el,U,fe):fe()}else U()},ze=(H,G)=>{let le;for(;H!==G;)le=d(H),i(H),H=le;i(G)},Me=(H,G,le)=>{const{bum:we,scope:pe,job:U,subTree:W,um:q,m:fe,a:_e}=H;J_(fe),J_(_e),we&&jc(we),pe.stop(),U&&(U.flags|=8,De(W,H,G,le)),q&&xr(q,G),xr(()=>{H.isUnmounted=!0},G),G&&G.pendingBranch&&!G.isUnmounted&&H.asyncDep&&!H.asyncResolved&&H.suspenseId===G.pendingId&&(G.deps--,G.deps===0&&G.resolve())},je=(H,G,le,we=!1,pe=!1,U=0)=>{for(let W=U;W{if(H.shapeFlag&6)return ce(H.component.subTree);if(H.shapeFlag&128)return H.suspense.next();const G=d(H.anchor||H.el),le=G&&G[_$];return le?d(le):G};let Ee=!1;const Se=(H,G,le)=>{H==null?G._vnode&&De(G._vnode,null,null,!0):m(G._vnode||null,H,G,null,null,null,le),G._vnode=H,Ee||(Ee=!0,RD(),Z_(),Ee=!1)},Te={p:m,um:De,m:ve,r:Ne,mt:F,mc:P,pc:j,pbc:R,n:ce,o:e};let Oe,$e;return t&&([Oe,$e]=t(Te)),{render:Se,hydrate:Oe,createApp:Bq(Se,Oe)}}function hx({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Qu({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function q$(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function SI(e,t,n=!1){const r=e.children,i=t.children;if(Je(r)&&Je(i))for(let o=0;o>1,e[n[s]]0&&(t[r]=n[o-1]),n[o]=r)}}for(o=n.length,a=n[o-1];o-- >0;)n[o]=a,a=t[a];return n}function J$(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:J$(t)}function J_(e){if(e)for(let t=0;tJi(Q$);function wb(e,t){return Yg(e,null,t)}function Yq(e,t){return Yg(e,null,{flush:"post"})}function t4(e,t){return Yg(e,null,{flush:"sync"})}function Yt(e,t,n){return Yg(e,t,n)}function Yg(e,t,n=Jt){const{immediate:r,deep:i,flush:o,once:a}=n,s=Qt({},n),l=t&&r||!t&&o!=="post";let u;if(Kd){if(o==="sync"){const h=e4();u=h.__watcherHandles||(h.__watcherHandles=[])}else if(!l){const h=()=>{};return h.stop=Lr,h.resume=Lr,h.pause=Lr,h}}const c=Tr;s.call=(h,v,m)=>oa(h,c,v,m);let f=!1;o==="post"?s.scheduler=h=>{xr(h,c&&c.suspense)}:o!=="sync"&&(f=!0,s.scheduler=(h,v)=>{v?h():cI(h)}),s.augmentJob=h=>{t&&(h.flags|=4),f&&(h.flags|=2,c&&(h.id=c.uid,h.i=c))};const d=kZ(e,t,s);return Kd&&(u?u.push(d):l&&d()),d}function Xq(e,t,n){const r=this.proxy,i=At(e)?e.includes(".")?n4(r,e):()=>r[e]:e.bind(r,r);let o;bt(t)?o=t:(o=t.handler,n=t);const a=cf(this),s=Yg(i,o.bind(r),n);return a(),s}function n4(e,t){const n=t.split(".");return()=>{let r=e;for(let i=0;i{let c,f=Jt,d;return t4(()=>{const h=e[i];ri(c,h)&&(c=h,u())}),{get(){return l(),n.get?n.get(c):c},set(h){const v=n.set?n.set(h):h;if(!ri(v,c)&&!(f!==Jt&&ri(h,f)))return;const m=r.vnode.props;m&&(t in m||i in m||o in m)&&(`onUpdate:${t}`in m||`onUpdate:${i}`in m||`onUpdate:${o}`in m)||(c=h,u()),r.emit(`update:${t}`,v),ri(h,v)&&ri(h,f)&&!ri(v,d)&&u(),f=h,d=v}}});return s[Symbol.iterator]=()=>{let l=0;return{next(){return l<2?{value:l++?a||Jt:s,done:!1}:{done:!0}}}},s}const r4=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Bn(t)}Modifiers`]||e[`${ai(t)}Modifiers`];function Zq(e,t,...n){if(e.isUnmounted)return;const r=e.vnode.props||Jt;let i=n;const o=t.startsWith("update:"),a=o&&r4(r,t.slice(7));a&&(a.trim&&(i=n.map(c=>At(c)?c.trim():c)),a.number&&(i=n.map(jv)));let s,l=r[s=Wc(t)]||r[s=Wc(Bn(t))];!l&&o&&(l=r[s=Wc(ai(t))]),l&&oa(l,e,6,i);const u=r[s+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[s])return;e.emitted[s]=!0,oa(u,e,6,i)}}function i4(e,t,n=!1){const r=t.emitsCache,i=r.get(e);if(i!==void 0)return i;const o=e.emits;let a={},s=!1;if(!bt(e)){const l=u=>{const c=i4(u,t,!0);c&&(s=!0,Qt(a,c))};!n&&t.mixins.length&&t.mixins.forEach(l),e.extends&&l(e.extends),e.mixins&&e.mixins.forEach(l)}return!o&&!s?(vn(e)&&r.set(e,null),null):(Je(o)?o.forEach(l=>a[l]=null):Qt(a,o),vn(e)&&r.set(e,a),a)}function xb(e,t){return!e||!Mu(t)?!1:(t=t.slice(2).replace(/Once$/,""),cn(e,t[0].toLowerCase()+t.slice(1))||cn(e,ai(t))||cn(e,t))}function G0(e){const{type:t,vnode:n,proxy:r,withProxy:i,propsOptions:[o],slots:a,attrs:s,emit:l,render:u,renderCache:c,props:f,data:d,setupState:h,ctx:v,inheritAttrs:m}=e,y=Qv(e);let _,b;try{if(n.shapeFlag&4){const S=i||r,C=S;_=ji(u.call(C,S,c,f,h,d,v)),b=s}else{const S=t;_=ji(S.length>1?S(f,{attrs:s,slots:a,emit:l}):S(f,null)),b=t.props?s:Jq(s)}}catch(S){sv.length=0,Af(S,e,1),_=ye(yr)}let w=_;if(b&&m!==!1){const S=Object.keys(b),{shapeFlag:C}=w;S.length&&C&7&&(o&&S.some(lb)&&(b=Qq(b,o)),w=us(w,b,!1,!0))}return n.dirs&&(w=us(w,null,!1,!0),w.dirs=w.dirs?w.dirs.concat(n.dirs):n.dirs),n.transition&&ll(w,n.transition),_=w,Qv(y),_}function qq(e,t=!0){let n;for(let r=0;r{let t;for(const n in e)(n==="class"||n==="style"||Mu(n))&&((t||(t={}))[n]=e[n]);return t},Qq=(e,t)=>{const n={};for(const r in e)(!lb(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function eJ(e,t,n){const{props:r,children:i,component:o}=e,{props:a,children:s,patchFlag:l}=t,u=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&l>=0){if(l&1024)return!0;if(l&16)return r?UD(r,a,u):!!a;if(l&8){const c=t.dynamicProps;for(let f=0;fe.__isSuspense;let GC=0;const tJ={name:"Suspense",__isSuspense:!0,process(e,t,n,r,i,o,a,s,l,u){if(e==null)rJ(t,n,r,i,o,a,s,l,u);else{if(o&&o.deps>0&&!e.suspense.isInFallback){t.suspense=e.suspense,t.suspense.vnode=t,t.el=e.el;return}iJ(e,t,n,r,i,a,s,l,u)}},hydrate:oJ,normalize:aJ},nJ=tJ;function ng(e,t){const n=e.props&&e.props[t];bt(n)&&n()}function rJ(e,t,n,r,i,o,a,s,l){const{p:u,o:{createElement:c}}=l,f=c("div"),d=e.suspense=o4(e,i,r,t,f,n,o,a,s,l);u(null,d.pendingBranch=e.ssContent,f,null,r,d,o,a),d.deps>0?(ng(e,"onPending"),ng(e,"onFallback"),u(null,e.ssFallback,t,n,r,null,o,a),Ld(d,e.ssFallback)):d.resolve(!1,!0)}function iJ(e,t,n,r,i,o,a,s,{p:l,um:u,o:{createElement:c}}){const f=t.suspense=e.suspense;f.vnode=t,t.el=e.el;const d=t.ssContent,h=t.ssFallback,{activeBranch:v,pendingBranch:m,isInFallback:y,isHydrating:_}=f;if(m)f.pendingBranch=d,Ia(d,m)?(l(m,d,f.hiddenContainer,null,i,f,o,a,s),f.deps<=0?f.resolve():y&&(_||(l(v,h,n,r,i,null,o,a,s),Ld(f,h)))):(f.pendingId=GC++,_?(f.isHydrating=!1,f.activeBranch=m):u(m,i,f),f.deps=0,f.effects.length=0,f.hiddenContainer=c("div"),y?(l(null,d,f.hiddenContainer,null,i,f,o,a,s),f.deps<=0?f.resolve():(l(v,h,n,r,i,null,o,a,s),Ld(f,h))):v&&Ia(d,v)?(l(v,d,n,r,i,f,o,a,s),f.resolve(!0)):(l(null,d,f.hiddenContainer,null,i,f,o,a,s),f.deps<=0&&f.resolve()));else if(v&&Ia(d,v))l(v,d,n,r,i,f,o,a,s),Ld(f,d);else if(ng(t,"onPending"),f.pendingBranch=d,d.shapeFlag&512?f.pendingId=d.component.suspenseId:f.pendingId=GC++,l(null,d,f.hiddenContainer,null,i,f,o,a,s),f.deps<=0)f.resolve();else{const{timeout:b,pendingId:w}=f;b>0?setTimeout(()=>{f.pendingId===w&&f.fallback(h)},b):b===0&&f.fallback(h)}}function o4(e,t,n,r,i,o,a,s,l,u,c=!1){const{p:f,m:d,um:h,n:v,o:{parentNode:m,remove:y}}=u;let _;const b=sJ(e);b&&t&&t.pendingBranch&&(_=t.pendingId,t.deps++);const w=e.props?Yv(e.props.timeout):void 0,S=o,C={vnode:e,parent:t,parentComponent:n,namespace:a,container:r,hiddenContainer:i,deps:0,pendingId:GC++,timeout:typeof w=="number"?w:-1,activeBranch:null,pendingBranch:null,isInFallback:!c,isHydrating:c,isUnmounted:!1,effects:[],resolve(T=!1,A=!1){const{vnode:P,activeBranch:I,pendingBranch:R,pendingId:O,effects:M,parentComponent:$,container:F}=C;let z=!1;C.isHydrating?C.isHydrating=!1:T||(z=I&&R.transition&&R.transition.mode==="out-in",z&&(I.transition.afterLeave=()=>{O===C.pendingId&&(d(R,F,o===S?v(I):o,0),qv(M))}),I&&(m(I.el)===F&&(o=v(I)),h(I,$,C,!0)),z||d(R,F,o,0)),Ld(C,R),C.pendingBranch=null,C.isInFallback=!1;let B=C.parent,Y=!1;for(;B;){if(B.pendingBranch){B.effects.push(...M),Y=!0;break}B=B.parent}!Y&&!z&&qv(M),C.effects=[],b&&t&&t.pendingBranch&&_===t.pendingId&&(t.deps--,t.deps===0&&!A&&t.resolve()),ng(P,"onResolve")},fallback(T){if(!C.pendingBranch)return;const{vnode:A,activeBranch:P,parentComponent:I,container:R,namespace:O}=C;ng(A,"onFallback");const M=v(P),$=()=>{C.isInFallback&&(f(null,T,R,M,I,null,O,s,l),Ld(C,T))},F=T.transition&&T.transition.mode==="out-in";F&&(P.transition.afterLeave=$),C.isInFallback=!0,h(P,I,null,!0),F||$()},move(T,A,P){C.activeBranch&&d(C.activeBranch,T,A,P),C.container=T},next(){return C.activeBranch&&v(C.activeBranch)},registerDep(T,A,P){const I=!!C.pendingBranch;I&&C.deps++;const R=T.vnode.el;T.asyncDep.catch(O=>{Af(O,T,0)}).then(O=>{if(T.isUnmounted||C.isUnmounted||C.pendingId!==T.suspenseId)return;T.asyncResolved=!0;const{vnode:M}=T;YC(T,O,!1),R&&(M.el=R);const $=!R&&T.subTree.el;A(T,M,m(R||T.subTree.el),R?null:v(T.subTree),C,a,P),$&&y($),Tb(T,M.el),I&&--C.deps===0&&C.resolve()})},unmount(T,A){C.isUnmounted=!0,C.activeBranch&&h(C.activeBranch,n,T,A),C.pendingBranch&&h(C.pendingBranch,n,T,A)}};return C}function oJ(e,t,n,r,i,o,a,s,l){const u=t.suspense=o4(t,r,n,e.parentNode,document.createElement("div"),null,i,o,a,s,!0),c=l(e,u.pendingBranch=t.ssContent,n,u,o,a);return u.deps===0&&u.resolve(!1,!0),c}function aJ(e){const{shapeFlag:t,children:n}=e,r=t&32;e.ssContent=HD(r?n.default:n),e.ssFallback=r?HD(n.fallback):ye(yr)}function HD(e){let t;if(bt(e)){const n=uf&&e._c;n&&(e._d=!1,K()),e=e(),n&&(e._d=!0,t=ui,s4())}return Je(e)&&(e=qq(e)),e=ji(e),t&&!e.dynamicChildren&&(e.dynamicChildren=t.filter(n=>n!==e)),e}function a4(e,t){t&&t.pendingBranch?Je(e)?t.effects.push(...e):t.effects.push(e):qv(e)}function Ld(e,t){e.activeBranch=t;const{vnode:n,parentComponent:r}=e;let i=t.el;for(;!i&&t.component;)t=t.component.subTree,i=t.el;n.el=i,r&&r.subTree===n&&(r.vnode.el=i,Tb(r,i))}function sJ(e){const t=e.props&&e.props.suspensible;return t!=null&&t!==!1}const Ze=Symbol.for("v-fgt"),tl=Symbol.for("v-txt"),yr=Symbol.for("v-cmt"),Kc=Symbol.for("v-stc"),sv=[];let ui=null;function K(e=!1){sv.push(ui=e?null:[])}function s4(){sv.pop(),ui=sv[sv.length-1]||null}let uf=1;function zC(e,t=!1){uf+=e,e<0&&ui&&t&&(ui.hasOnce=!0)}function l4(e){return e.dynamicChildren=uf>0?ui||Gc:null,s4(),uf>0&&ui&&ui.push(e),e}function ae(e,t,n,r,i,o){return l4(L(e,t,n,r,i,o,!0))}function Ot(e,t,n,r,i){return l4(ye(e,t,n,r,i,!0))}function ul(e){return e?e.__v_isVNode===!0:!1}function Ia(e,t){return e.type===t.type&&e.key===t.key}function lJ(e){}const u4=({key:e})=>e??null,z0=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?At(e)||st(e)||bt(e)?{i:Cr,r:e,k:t,f:!!n}:e:null);function L(e,t=null,n=null,r=0,i=null,o=e===Ze?0:1,a=!1,s=!1){const l={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&u4(t),ref:t&&z0(t),scopeId:yb,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:r,dynamicProps:i,dynamicChildren:null,appContext:null,ctx:Cr};return s?(wI(l,n),o&128&&e.normalize(l)):n&&(l.shapeFlag|=At(n)?8:16),uf>0&&!a&&ui&&(l.patchFlag>0||o&6)&&l.patchFlag!==32&&ui.push(l),l}const ye=uJ;function uJ(e,t=null,n=null,r=0,i=null,o=!1){if((!e||e===N$)&&(e=yr),ul(e)){const s=us(e,t,!0);return n&&wI(s,n),uf>0&&!o&&ui&&(s.shapeFlag&6?ui[ui.indexOf(e)]=s:ui.push(s)),s.patchFlag=-2,s}if(mJ(e)&&(e=e.__vccOpts),t){t=c4(t);let{class:s,style:l}=t;s&&!At(s)&&(t.class=rt(s)),vn(l)&&(mb(l)&&!Je(l)&&(l=Qt({},l)),t.style=Gr(l))}const a=At(e)?1:Q_(e)?128:b$(e)?64:vn(e)?4:bt(e)?2:0;return L(e,t,n,r,i,a,o,!0)}function c4(e){return e?mb(e)||U$(e)?Qt({},e):e:null}function us(e,t,n=!1,r=!1){const{props:i,ref:o,patchFlag:a,children:s,transition:l}=e,u=t?f4(i||{},t):i,c={__v_isVNode:!0,__v_skip:!0,type:e.type,props:u,key:u&&u4(u),ref:t&&t.ref?n&&o?Je(o)?o.concat(z0(t)):[o,z0(t)]:z0(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:s,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ze?a===-1?16:a|16:a,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:l,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&us(e.ssContent),ssFallback:e.ssFallback&&us(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return l&&r&&ll(c,l.clone(c)),c}function ft(e=" ",t=0){return ye(tl,null,e,t)}function cJ(e,t){const n=ye(Kc,null,e);return n.staticCount=t,n}function mt(e="",t=!1){return t?(K(),Ot(yr,null,e)):ye(yr,null,e)}function ji(e){return e==null||typeof e=="boolean"?ye(yr):Je(e)?ye(Ze,null,e.slice()):ul(e)?Jl(e):ye(tl,null,String(e))}function Jl(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:us(e)}function wI(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(Je(t))n=16;else if(typeof t=="object")if(r&65){const i=t.default;i&&(i._c&&(i._d=!1),wI(e,i()),i._c&&(i._d=!0));return}else{n=32;const i=t._;!i&&!U$(t)?t._ctx=Cr:i===3&&Cr&&(Cr.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else bt(t)?(t={default:t,_ctx:Cr},n=32):(t=String(t),r&64?(n=16,t=[ft(t)]):n=8);e.children=t,e.shapeFlag|=n}function f4(...e){const t={};for(let n=0;nTr||Cr;let e1,WC;{const e=Hg(),t=(n,r)=>{let i;return(i=e[n])||(i=e[n]=[]),i.push(r),o=>{i.length>1?i.forEach(a=>a(o)):i[0](o)}};e1=t("__VUE_INSTANCE_SETTERS__",n=>Tr=n),WC=t("__VUE_SSR_SETTERS__",n=>Kd=n)}const cf=e=>{const t=Tr;return e1(e),e.scope.on(),()=>{e.scope.off(),e1(t)}},jC=()=>{Tr&&Tr.scope.off(),e1(null)};function h4(e){return e.vnode.shapeFlag&4}let Kd=!1;function p4(e,t=!1,n=!1){t&&WC(t);const{props:r,children:i}=e.vnode,o=h4(e);Vq(e,r,o,t),zq(e,i,n);const a=o?hJ(e,t):void 0;return t&&WC(!1),a}function hJ(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,BC);const{setup:r}=n;if(r){ku();const i=e.setupContext=r.length>1?g4(e):null,o=cf(e),a=bh(r,e,0,[e.props,i]),s=cb(a);if(Fu(),o(),(s||e.sp)&&!vu(e)&&hI(e),s){if(a.then(jC,jC),t)return a.then(l=>{YC(e,l,t)}).catch(l=>{Af(l,e,0)});e.asyncDep=a}else YC(e,a,t)}else v4(e,t)}function YC(e,t,n){bt(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:vn(t)&&(e.setupState=lI(t)),v4(e,n)}let t1,XC;function pJ(e){t1=e,XC=t=>{t.render._rc&&(t.withProxy=new Proxy(t.ctx,_q))}}const vJ=()=>!t1;function v4(e,t,n){const r=e.type;if(!e.render){if(!t&&t1&&!r.render){const i=r.template||yI(e).template;if(i){const{isCustomElement:o,compilerOptions:a}=e.appContext.config,{delimiters:s,compilerOptions:l}=r,u=Qt(Qt({isCustomElement:o,delimiters:s},a),l);r.render=t1(i,u)}}e.render=r.render||Lr,XC&&XC(e)}{const i=cf(e);ku();try{Mq(e)}finally{Fu(),i()}}}const gJ={get(e,t){return ii(e,"get",""),e[t]}};function g4(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,gJ),slots:e.slots,emit:e.emit,expose:t}}function Xg(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(lI(u$(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in ov)return ov[n](e)},has(t,n){return n in t||n in ov}})):e.proxy}function KC(e,t=!0){return bt(e)?e.displayName||e.name:e.name||t&&e.__name}function mJ(e){return bt(e)&&"__vccOpts"in e}const Ve=(e,t)=>DZ(e,t,Kd);function Wi(e,t,n){const r=arguments.length;return r===2?vn(t)&&!Je(t)?ul(t)?ye(e,null,[t]):ye(e,t):ye(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&ul(n)&&(n=[n]),ye(e,t,n))}function yJ(){}function _J(e,t,n,r){const i=n[r];if(i&&m4(i,e))return i;const o=t();return o.memo=e.slice(),o.cacheIndex=r,n[r]=o}function m4(e,t){const n=e.memo;if(n.length!=t.length)return!1;for(let r=0;r0&&ui&&ui.push(e),!0}const y4="3.5.13",bJ=Lr,SJ=UZ,wJ=vd,xJ=y$,TJ={createComponentInstance:d4,setupComponent:p4,renderComponentRoot:G0,setCurrentRenderingInstance:Qv,isVNode:ul,normalizeVNode:ji,getComponentPublicInstance:Xg,ensureValidVNode:mI,pushWarningContext:FZ,popWarningContext:$Z},CJ=TJ,EJ=null,AJ=null,IJ=null;/** +* @vue/runtime-dom v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let ZC;const GD=typeof window<"u"&&window.trustedTypes;if(GD)try{ZC=GD.createPolicy("vue",{createHTML:e=>e})}catch{}const _4=ZC?e=>ZC.createHTML(e):e=>e,RJ="http://www.w3.org/2000/svg",PJ="http://www.w3.org/1998/Math/MathML",Vs=typeof document<"u"?document:null,zD=Vs&&Vs.createElement("template"),OJ={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const i=t==="svg"?Vs.createElementNS(RJ,e):t==="mathml"?Vs.createElementNS(PJ,e):n?Vs.createElement(e,{is:n}):Vs.createElement(e);return e==="select"&&r&&r.multiple!=null&&i.setAttribute("multiple",r.multiple),i},createText:e=>Vs.createTextNode(e),createComment:e=>Vs.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Vs.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,i,o){const a=n?n.previousSibling:t.lastChild;if(i&&(i===o||i.nextSibling))for(;t.insertBefore(i.cloneNode(!0),n),!(i===o||!(i=i.nextSibling)););else{zD.innerHTML=_4(r==="svg"?`${e}`:r==="mathml"?`${e}`:e);const s=zD.content;if(r==="svg"||r==="mathml"){const l=s.firstChild;for(;l.firstChild;)s.appendChild(l.firstChild);s.removeChild(l)}t.insertBefore(s,n)}return[a?a.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Ol="transition",ep="animation",Zd=Symbol("_vtc"),b4={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},S4=Qt({},dI,b4),DJ=e=>(e.displayName="Transition",e.props=S4,e),MJ=DJ((e,{slots:t})=>Wi(C$,w4(e),t)),ec=(e,t=[])=>{Je(e)?e.forEach(n=>n(...t)):e&&e(...t)},WD=e=>e?Je(e)?e.some(t=>t.length>1):e.length>1:!1;function w4(e){const t={};for(const M in e)M in b4||(t[M]=e[M]);if(e.css===!1)return t;const{name:n="v",type:r,duration:i,enterFromClass:o=`${n}-enter-from`,enterActiveClass:a=`${n}-enter-active`,enterToClass:s=`${n}-enter-to`,appearFromClass:l=o,appearActiveClass:u=a,appearToClass:c=s,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:d=`${n}-leave-active`,leaveToClass:h=`${n}-leave-to`}=e,v=LJ(i),m=v&&v[0],y=v&&v[1],{onBeforeEnter:_,onEnter:b,onEnterCancelled:w,onLeave:S,onLeaveCancelled:C,onBeforeAppear:T=_,onAppear:A=b,onAppearCancelled:P=w}=t,I=(M,$,F,z)=>{M._enterCancelled=z,jl(M,$?c:s),jl(M,$?u:a),F&&F()},R=(M,$)=>{M._isLeaving=!1,jl(M,f),jl(M,h),jl(M,d),$&&$()},O=M=>($,F)=>{const z=M?A:b,B=()=>I($,M,F);ec(z,[$,B]),jD(()=>{jl($,M?l:o),Za($,M?c:s),WD(z)||YD($,r,m,B)})};return Qt(t,{onBeforeEnter(M){ec(_,[M]),Za(M,o),Za(M,a)},onBeforeAppear(M){ec(T,[M]),Za(M,l),Za(M,u)},onEnter:O(!1),onAppear:O(!0),onLeave(M,$){M._isLeaving=!0;const F=()=>R(M,$);Za(M,f),M._enterCancelled?(Za(M,d),qC()):(qC(),Za(M,d)),jD(()=>{M._isLeaving&&(jl(M,f),Za(M,h),WD(S)||YD(M,r,y,F))}),ec(S,[M,F])},onEnterCancelled(M){I(M,!1,void 0,!0),ec(w,[M])},onAppearCancelled(M){I(M,!0,void 0,!0),ec(P,[M])},onLeaveCancelled(M){R(M),ec(C,[M])}})}function LJ(e){if(e==null)return null;if(vn(e))return[px(e.enter),px(e.leave)];{const t=px(e);return[t,t]}}function px(e){return Yv(e)}function Za(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Zd]||(e[Zd]=new Set)).add(t)}function jl(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[Zd];n&&(n.delete(t),n.size||(e[Zd]=void 0))}function jD(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let NJ=0;function YD(e,t,n,r){const i=e._endId=++NJ,o=()=>{i===e._endId&&r()};if(n!=null)return setTimeout(o,n);const{type:a,timeout:s,propCount:l}=x4(e,t);if(!a)return r();const u=a+"end";let c=0;const f=()=>{e.removeEventListener(u,d),o()},d=h=>{h.target===e&&++c>=l&&f()};setTimeout(()=>{c(n[v]||"").split(", "),i=r(`${Ol}Delay`),o=r(`${Ol}Duration`),a=XD(i,o),s=r(`${ep}Delay`),l=r(`${ep}Duration`),u=XD(s,l);let c=null,f=0,d=0;t===Ol?a>0&&(c=Ol,f=a,d=o.length):t===ep?u>0&&(c=ep,f=u,d=l.length):(f=Math.max(a,u),c=f>0?a>u?Ol:ep:null,d=c?c===Ol?o.length:l.length:0);const h=c===Ol&&/\b(transform|all)(,|$)/.test(r(`${Ol}Property`).toString());return{type:c,timeout:f,propCount:d,hasTransform:h}}function XD(e,t){for(;e.lengthKD(n)+KD(e[r])))}function KD(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function qC(){return document.body.offsetHeight}function kJ(e,t,n){const r=e[Zd];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const n1=Symbol("_vod"),T4=Symbol("_vsh"),xI={beforeMount(e,{value:t},{transition:n}){e[n1]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):tp(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnter(e),tp(e,!0),r.enter(e)):r.leave(e,()=>{tp(e,!1)}):tp(e,t))},beforeUnmount(e,{value:t}){tp(e,t)}};function tp(e,t){e.style.display=t?e[n1]:"none",e[T4]=!t}function FJ(){xI.getSSRProps=({value:e})=>{if(!e)return{style:{display:"none"}}}}const C4=Symbol("");function $J(e){const t=br();if(!t)return;const n=t.ut=(i=e(t.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${t.uid}"]`)).forEach(o=>r1(o,i))},r=()=>{const i=e(t.proxy);t.ce?r1(t.ce,i):JC(t.subTree,i),n(i)};pI(()=>{qv(r)}),lo(()=>{Yt(r,Lr,{flush:"post"});const i=new MutationObserver(r);i.observe(t.subTree.el.parentNode,{childList:!0}),Sh(()=>i.disconnect())})}function JC(e,t){if(e.shapeFlag&128){const n=e.suspense;e=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push(()=>{JC(n.activeBranch,t)})}for(;e.component;)e=e.component.subTree;if(e.shapeFlag&1&&e.el)r1(e.el,t);else if(e.type===Ze)e.children.forEach(n=>JC(n,t));else if(e.type===Kc){let{el:n,anchor:r}=e;for(;n&&(r1(n,t),n!==r);)n=n.nextSibling}}function r1(e,t){if(e.nodeType===1){const n=e.style;let r="";for(const i in t)n.setProperty(`--${i}`,t[i]),r+=`--${i}: ${t[i]};`;n[C4]=r}}const BJ=/(^|;)\s*display\s*:/;function VJ(e,t,n){const r=e.style,i=At(n);let o=!1;if(n&&!i){if(t)if(At(t))for(const a of t.split(";")){const s=a.slice(0,a.indexOf(":")).trim();n[s]==null&&W0(r,s,"")}else for(const a in t)n[a]==null&&W0(r,a,"");for(const a in n)a==="display"&&(o=!0),W0(r,a,n[a])}else if(i){if(t!==n){const a=r[C4];a&&(n+=";"+a),r.cssText=n,o=BJ.test(n)}}else t&&e.removeAttribute("style");n1 in e&&(e[n1]=o?r.display:"",e[T4]&&(r.display="none"))}const ZD=/\s*!important$/;function W0(e,t,n){if(Je(n))n.forEach(r=>W0(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=UJ(e,t);ZD.test(n)?e.setProperty(ai(r),n.replace(ZD,""),"important"):e[r]=n}}const qD=["Webkit","Moz","ms"],vx={};function UJ(e,t){const n=vx[t];if(n)return n;let r=Bn(t);if(r!=="filter"&&r in e)return vx[t]=r;r=Nu(r);for(let i=0;igx||(WJ.then(()=>gx=0),gx=Date.now());function YJ(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;oa(XJ(r,n.value),t,5,[r])};return n.value=e,n.attached=jJ(),n}function XJ(e,t){if(Je(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>i=>!i._stopped&&r&&r(i))}else return t}const rM=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,KJ=(e,t,n,r,i,o)=>{const a=i==="svg";t==="class"?kJ(e,r,a):t==="style"?VJ(e,n,r):Mu(t)?lb(t)||GJ(e,t,n,r,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):ZJ(e,t,r,a))?(eM(e,t,r),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&QD(e,t,r,a,o,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!At(r))?eM(e,Bn(t),r,o,t):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),QD(e,t,r,a))};function ZJ(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&rM(t)&&bt(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const i=e.tagName;if(i==="IMG"||i==="VIDEO"||i==="CANVAS"||i==="SOURCE")return!1}return rM(t)&&At(n)?!1:t in e}const iM={};/*! #__NO_SIDE_EFFECTS__ */function E4(e,t,n){const r=it(e,t);Ug(r)&&Qt(r,t);class i extends Cb{constructor(a){super(r,a,n)}}return i.def=r,i}/*! #__NO_SIDE_EFFECTS__ */const qJ=(e,t)=>E4(e,t,$4),JJ=typeof HTMLElement<"u"?HTMLElement:class{};class Cb extends JJ{constructor(t,n={},r=o1){super(),this._def=t,this._props=n,this._createApp=r,this._isVueCE=!0,this._instance=null,this._app=null,this._nonce=this._def.nonce,this._connected=!1,this._resolved=!1,this._numberProps=null,this._styleChildren=new WeakSet,this._ob=null,this.shadowRoot&&r!==o1?this._root=this.shadowRoot:t.shadowRoot!==!1?(this.attachShadow({mode:"open"}),this._root=this.shadowRoot):this._root=this,this._def.__asyncLoader||this._resolveProps(this._def)}connectedCallback(){if(!this.isConnected)return;this.shadowRoot||this._parseSlots(),this._connected=!0;let t=this;for(;t=t&&(t.parentNode||t.host);)if(t instanceof Cb){this._parent=t;break}this._instance||(this._resolved?(this._setParent(),this._update()):t&&t._pendingResolve?this._pendingResolve=t._pendingResolve.then(()=>{this._pendingResolve=void 0,this._resolveDef()}):this._resolveDef())}_setParent(t=this._parent){t&&(this._instance.parent=t._instance,this._instance.provides=t._instance.provides)}disconnectedCallback(){this._connected=!1,gs(()=>{this._connected||(this._ob&&(this._ob.disconnect(),this._ob=null),this._app&&this._app.unmount(),this._instance&&(this._instance.ce=void 0),this._app=this._instance=null)})}_resolveDef(){if(this._pendingResolve)return;for(let r=0;r{for(const i of r)this._setAttr(i.attributeName)}),this._ob.observe(this,{attributes:!0});const t=(r,i=!1)=>{this._resolved=!0,this._pendingResolve=void 0;const{props:o,styles:a}=r;let s;if(o&&!Je(o))for(const l in o){const u=o[l];(u===Number||u&&u.type===Number)&&(l in this._props&&(this._props[l]=Yv(this._props[l])),(s||(s=Object.create(null)))[Bn(l)]=!0)}this._numberProps=s,i&&this._resolveProps(r),this.shadowRoot&&this._applyStyles(a),this._mount(r)},n=this._def.__asyncLoader;n?this._pendingResolve=n().then(r=>t(this._def=r,!0)):t(this._def)}_mount(t){this._app=this._createApp(t),t.configureApp&&t.configureApp(this._app),this._app._ceVNode=this._createVNode(),this._app.mount(this._root);const n=this._instance&&this._instance.exposed;if(n)for(const r in n)cn(this,r)||Object.defineProperty(this,r,{get:()=>N(n[r])})}_resolveProps(t){const{props:n}=t,r=Je(n)?n:Object.keys(n||{});for(const i of Object.keys(this))i[0]!=="_"&&r.includes(i)&&this._setProp(i,this[i]);for(const i of r.map(Bn))Object.defineProperty(this,i,{get(){return this._getProp(i)},set(o){this._setProp(i,o,!0,!0)}})}_setAttr(t){if(t.startsWith("data-v-"))return;const n=this.hasAttribute(t);let r=n?this.getAttribute(t):iM;const i=Bn(t);n&&this._numberProps&&this._numberProps[i]&&(r=Yv(r)),this._setProp(i,r,!1,!0)}_getProp(t){return this._props[t]}_setProp(t,n,r=!0,i=!1){if(n!==this._props[t]&&(n===iM?delete this._props[t]:(this._props[t]=n,t==="key"&&this._app&&(this._app._ceVNode.key=n)),i&&this._instance&&this._update(),r)){const o=this._ob;o&&o.disconnect(),n===!0?this.setAttribute(ai(t),""):typeof n=="string"||typeof n=="number"?this.setAttribute(ai(t),n+""):n||this.removeAttribute(ai(t)),o&&o.observe(this,{attributes:!0})}}_update(){F4(this._createVNode(),this._root)}_createVNode(){const t={};this.shadowRoot||(t.onVnodeMounted=t.onVnodeUpdated=this._renderSlots.bind(this));const n=ye(this._def,Qt(t,this._props));return this._instance||(n.ce=r=>{this._instance=r,r.ce=this,r.isCE=!0;const i=(o,a)=>{this.dispatchEvent(new CustomEvent(o,Ug(a[0])?Qt({detail:a},a[0]):{detail:a}))};r.emit=(o,...a)=>{i(o,a),ai(o)!==o&&i(ai(o),a)},this._setParent()}),n}_applyStyles(t,n){if(!t)return;if(n){if(n===this._def||this._styleChildren.has(n))return;this._styleChildren.add(n)}const r=this._nonce;for(let i=t.length-1;i>=0;i--){const o=document.createElement("style");r&&o.setAttribute("nonce",r),o.textContent=t[i],this.shadowRoot.prepend(o)}}_parseSlots(){const t=this._slots={};let n;for(;n=this.firstChild;){const r=n.nodeType===1&&n.getAttribute("slot")||"default";(t[r]||(t[r]=[])).push(n),this.removeChild(n)}}_renderSlots(){const t=(this._teleportTarget||this).querySelectorAll("slot"),n=this._instance.type.__scopeId;for(let r=0;r(delete e.props.mode,e),nQ=tQ({name:"TransitionGroup",props:Qt({},S4,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=br(),r=fI();let i,o;return Sb(()=>{if(!i.length)return;const a=e.moveClass||`${e.name||"v"}-move`;if(!sQ(i[0].el,n.vnode.el,a))return;i.forEach(iQ),i.forEach(oQ);const s=i.filter(aQ);qC(),s.forEach(l=>{const u=l.el,c=u.style;Za(u,a),c.transform=c.webkitTransform=c.transitionDuration="";const f=u[i1]=d=>{d&&d.target!==u||(!d||/transform$/.test(d.propertyName))&&(u.removeEventListener("transitionend",f),u[i1]=null,jl(u,a))};u.addEventListener("transitionend",f)})}),()=>{const a=sn(e),s=w4(a);let l=a.tag||Ze;if(i=[],o)for(let u=0;u{s.split(/\s+/).forEach(l=>l&&r.classList.remove(l))}),n.split(/\s+/).forEach(s=>s&&r.classList.add(s)),r.style.display="none";const o=t.nodeType===1?t:t.parentNode;o.appendChild(r);const{hasTransform:a}=x4(r);return o.removeChild(r),a}const Tu=e=>{const t=e.props["onUpdate:modelValue"]||!1;return Je(t)?n=>jc(t,n):t};function lQ(e){e.target.composing=!0}function aM(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const ta=Symbol("_assign"),ir={created(e,{modifiers:{lazy:t,trim:n,number:r}},i){e[ta]=Tu(i);const o=r||i.props&&i.props.type==="number";Ys(e,t?"change":"input",a=>{if(a.target.composing)return;let s=e.value;n&&(s=s.trim()),o&&(s=jv(s)),e[ta](s)}),n&&Ys(e,"change",()=>{e.value=e.value.trim()}),t||(Ys(e,"compositionstart",lQ),Ys(e,"compositionend",aM),Ys(e,"change",aM))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:r,trim:i,number:o}},a){if(e[ta]=Tu(a),e.composing)return;const s=(o||e.type==="number")&&!/^0\d/.test(e.value)?jv(e.value):e.value,l=t??"";s!==l&&(document.activeElement===e&&e.type!=="range"&&(r&&t===n||i&&e.value.trim()===l)||(e.value=l))}},gr={deep:!0,created(e,t,n){e[ta]=Tu(n),Ys(e,"change",()=>{const r=e._modelValue,i=qd(e),o=e.checked,a=e[ta];if(Je(r)){const s=Gg(r,i),l=s!==-1;if(o&&!l)a(r.concat(i));else if(!o&&l){const u=[...r];u.splice(s,1),a(u)}}else if(Lu(r)){const s=new Set(r);o?s.add(i):s.delete(i),a(s)}else a(P4(e,o))})},mounted:sM,beforeUpdate(e,t,n){e[ta]=Tu(n),sM(e,t,n)}};function sM(e,{value:t,oldValue:n},r){e._modelValue=t;let i;if(Je(t))i=Gg(t,r.props.value)>-1;else if(Lu(t))i=t.has(r.props.value);else{if(t===n)return;i=sl(t,P4(e,!0))}e.checked!==i&&(e.checked=i)}const TI={created(e,{value:t},n){e.checked=sl(t,n.props.value),e[ta]=Tu(n),Ys(e,"change",()=>{e[ta](qd(e))})},beforeUpdate(e,{value:t,oldValue:n},r){e[ta]=Tu(r),t!==n&&(e.checked=sl(t,r.props.value))}},hi={deep:!0,created(e,{value:t,modifiers:{number:n}},r){const i=Lu(t);Ys(e,"change",()=>{const o=Array.prototype.filter.call(e.options,a=>a.selected).map(a=>n?jv(qd(a)):qd(a));e[ta](e.multiple?i?new Set(o):o:o[0]),e._assigning=!0,gs(()=>{e._assigning=!1})}),e[ta]=Tu(r)},mounted(e,{value:t}){lM(e,t)},beforeUpdate(e,t,n){e[ta]=Tu(n)},updated(e,{value:t}){e._assigning||lM(e,t)}};function lM(e,t){const n=e.multiple,r=Je(t);if(!(n&&!r&&!Lu(t))){for(let i=0,o=e.options.length;iString(u)===String(s)):a.selected=Gg(t,s)>-1}else a.selected=t.has(s);else if(sl(qd(a),t)){e.selectedIndex!==i&&(e.selectedIndex=i);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function qd(e){return"_value"in e?e._value:e.value}function P4(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const O4={created(e,t,n){xy(e,t,n,null,"created")},mounted(e,t,n){xy(e,t,n,null,"mounted")},beforeUpdate(e,t,n,r){xy(e,t,n,r,"beforeUpdate")},updated(e,t,n,r){xy(e,t,n,r,"updated")}};function D4(e,t){switch(e){case"SELECT":return hi;case"TEXTAREA":return ir;default:switch(t){case"checkbox":return gr;case"radio":return TI;default:return ir}}}function xy(e,t,n,r,i){const a=D4(e.tagName,n.props&&n.props.type)[i];a&&a(e,t,n,r)}function uQ(){ir.getSSRProps=({value:e})=>({value:e}),TI.getSSRProps=({value:e},t)=>{if(t.props&&sl(t.props.value,e))return{checked:!0}},gr.getSSRProps=({value:e},t)=>{if(Je(e)){if(t.props&&Gg(e,t.props.value)>-1)return{checked:!0}}else if(Lu(e)){if(t.props&&e.has(t.props.value))return{checked:!0}}else if(e)return{checked:!0}},O4.getSSRProps=(e,t)=>{if(typeof t.type!="string")return;const n=D4(t.type.toUpperCase(),t.props&&t.props.type);if(n.getSSRProps)return n.getSSRProps(e,t)}}const cQ=["ctrl","shift","alt","meta"],fQ={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>cQ.some(n=>e[`${n}Key`]&&!t.includes(n))},xo=(e,t)=>{const n=e._withMods||(e._withMods={}),r=t.join(".");return n[r]||(n[r]=(i,...o)=>{for(let a=0;a{const n=e._withKeys||(e._withKeys={}),r=t.join(".");return n[r]||(n[r]=i=>{if(!("key"in i))return;const o=ai(i.key);if(t.some(a=>a===o||dQ[a]===o))return e(i)})},L4=Qt({patchProp:KJ},OJ);let lv,uM=!1;function N4(){return lv||(lv=X$(L4))}function k4(){return lv=uM?lv:K$(L4),uM=!0,lv}const F4=(...e)=>{N4().render(...e)},hQ=(...e)=>{k4().hydrate(...e)},o1=(...e)=>{const t=N4().createApp(...e),{mount:n}=t;return t.mount=r=>{const i=V4(r);if(!i)return;const o=t._component;!bt(o)&&!o.render&&!o.template&&(o.template=i.innerHTML),i.nodeType===1&&(i.textContent="");const a=n(i,!1,B4(i));return i instanceof Element&&(i.removeAttribute("v-cloak"),i.setAttribute("data-v-app","")),a},t},$4=(...e)=>{const t=k4().createApp(...e),{mount:n}=t;return t.mount=r=>{const i=V4(r);if(i)return n(i,!0,B4(i))},t};function B4(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function V4(e){return At(e)?document.querySelector(e):e}let cM=!1;const pQ=()=>{cM||(cM=!0,uQ(),FJ())},vQ=Object.freeze(Object.defineProperty({__proto__:null,BaseTransition:C$,BaseTransitionPropsValidators:dI,Comment:yr,DeprecationTypes:IJ,EffectScope:tI,ErrorCodes:VZ,ErrorTypeStrings:SJ,Fragment:Ze,KeepAlive:dq,ReactiveEffect:Xv,Static:Kc,Suspense:nJ,Teleport:XZ,Text:tl,TrackOpTypes:MZ,Transition:MJ,TransitionGroup:rQ,TriggerOpTypes:LZ,VueElement:Cb,assertNumber:BZ,callWithAsyncErrorHandling:oa,callWithErrorHandling:bh,camelize:Bn,capitalize:Nu,cloneVNode:us,compatUtils:AJ,computed:Ve,createApp:o1,createBlock:Ot,createCommentVNode:mt,createElementBlock:ae,createElementVNode:L,createHydrationRenderer:K$,createPropsRestProxy:Oq,createRenderer:X$,createSSRApp:$4,createSlots:mq,createStaticVNode:cJ,createTextVNode:ft,createVNode:ye,customRef:uI,defineAsyncComponent:cq,defineComponent:it,defineCustomElement:E4,defineEmits:Sq,defineExpose:wq,defineModel:Cq,defineOptions:xq,defineProps:bq,defineSSRCustomElement:qJ,defineSlots:Tq,devtools:wJ,effect:rZ,effectScope:Y5,getCurrentInstance:br,getCurrentScope:nI,getCurrentWatcher:NZ,getTransitionRawChildren:_b,guardReactiveProps:c4,h:Wi,handleError:Af,hasInjectionContext:_I,hydrate:hQ,hydrateOnIdle:iq,hydrateOnInteraction:lq,hydrateOnMediaQuery:sq,hydrateOnVisible:aq,initCustomFormatter:yJ,initDirectivesForSSR:pQ,inject:Ji,isMemoSame:m4,isProxy:mb,isReactive:pu,isReadonly:xu,isRef:st,isRuntimeOnly:vJ,isShallow:Co,isVNode:ul,markRaw:u$,mergeDefaults:Rq,mergeModels:Pq,mergeProps:f4,nextTick:gs,normalizeClass:rt,normalizeProps:F5,normalizeStyle:Gr,onActivated:A$,onBeforeMount:P$,onBeforeUnmount:jg,onBeforeUpdate:pI,onDeactivated:I$,onErrorCaptured:L$,onMounted:lo,onRenderTracked:M$,onRenderTriggered:D$,onScopeDispose:rI,onServerPrefetch:O$,onUnmounted:Sh,onUpdated:Sb,onWatcherCleanup:h$,openBlock:K,popScopeId:WZ,provide:av,proxyRefs:lI,pushScopeId:zZ,queuePostFlushCb:qv,reactive:Na,readonly:zg,ref:Fe,registerRuntimeCompiler:pJ,render:F4,renderList:on,renderSlot:Md,resolveComponent:vq,resolveDirective:gq,resolveDynamicComponent:ls,resolveFilter:EJ,resolveTransitionHooks:Xd,setBlockTracking:zC,setDevtoolsHook:xJ,setTransitionHooks:ll,shallowReactive:sI,shallowReadonly:xZ,shallowRef:Ef,ssrContextKey:Q$,ssrUtils:CJ,stop:iZ,toDisplayString:re,toHandlerKey:Wc,toHandlers:yq,toRaw:sn,toRef:f$,toRefs:IZ,toValue:CZ,transformVNodeArgs:lJ,triggerRef:kC,unref:N,useAttrs:Iq,useCssModule:eQ,useCssVars:$J,useHost:A4,useId:ZZ,useModel:Kq,useSSRContext:e4,useShadowRoot:QJ,useSlots:Aq,useTemplateRef:qZ,useTransitionState:fI,vModelCheckbox:gr,vModelDynamic:O4,vModelRadio:TI,vModelSelect:hi,vModelText:ir,vShow:xI,version:y4,warn:bJ,watch:Yt,watchEffect:wb,watchPostEffect:Yq,watchSyncEffect:t4,withAsyncContext:Dq,withCtx:Mr,withDefaults:Eq,withDirectives:_t,withKeys:M4,withMemo:_J,withModifiers:xo,withScopeId:jZ},Symbol.toStringTag,{value:"Module"}));function Eb(e,t){return K(),ae("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon"},[L("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"m9 12.75 3 3m0 0 3-3m-3 3v-7.5M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"})])}function gQ(e,t){return K(),ae("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon"},[L("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M19.5 13.5 12 21m0 0-7.5-7.5M12 21V3"})])}function mQ(e,t){return K(),ae("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon"},[L("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"m11.25 9-3 3m0 0 3 3m-3-3h7.5M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"})])}function U4(e,t){return K(),ae("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon"},[L("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0 3.181 3.183a8.25 8.25 0 0 0 13.803-3.7M4.031 9.865a8.25 8.25 0 0 1 13.803-3.7l3.181 3.182m0-4.991v4.99"})])}function ff(e,t){return K(),ae("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon"},[L("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"m12.75 15 3-3m0 0-3-3m3 3h-7.5M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"})])}function Kg(e,t){return K(),ae("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon"},[L("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"m15 11.25-3-3m0 0-3 3m3-3v7.5M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"})])}function yQ(e,t){return K(),ae("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon"},[L("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M4.5 10.5 12 3m0 0 7.5 7.5M12 3v18"})])}function H4(e,t){return K(),ae("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon"},[L("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M7.5 21 3 16.5m0 0L7.5 12M3 16.5h13.5m0-13.5L21 7.5m0 0L16.5 12M21 7.5H7.5"})])}function Ab(e,t){return K(),ae("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon"},[L("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"m3.75 13.5 10.5-11.25L12 10.5h8.25L9.75 21.75 12 13.5H3.75Z"})])}function _Q(e,t){return K(),ae("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon"},[L("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.325.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.431l-1.003.827c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.955.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.431l1.004-.827c.292-.24.437-.613.43-.991a6.932 6.932 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"}),L("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"})])}function bQ(e,t){return K(),ae("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon"},[L("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M8.25 3v1.5M4.5 8.25H3m18 0h-1.5M4.5 12H3m18 0h-1.5m-15 3.75H3m18 0h-1.5M8.25 19.5V21M12 3v1.5m0 15V21m3.75-18v1.5m0 15V21m-9-1.5h10.5a2.25 2.25 0 0 0 2.25-2.25V6.75a2.25 2.25 0 0 0-2.25-2.25H6.75A2.25 2.25 0 0 0 4.5 6.75v10.5a2.25 2.25 0 0 0 2.25 2.25Zm.75-12h9v9h-9v-9Z"})])}function fM(e,t){return K(),ae("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon"},[L("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"m21 7.5-2.25-1.313M21 7.5v2.25m0-2.25-2.25 1.313M3 7.5l2.25-1.313M3 7.5l2.25 1.313M3 7.5v2.25m9 3 2.25-1.313M12 12.75l-2.25-1.313M12 12.75V15m0 6.75 2.25-1.313M12 21.75V19.5m0 2.25-2.25-1.313m0-16.875L12 2.25l2.25 1.313M21 14.25v2.25l-2.25 1.313m-13.5 0L3 16.5v-2.25"})])}function SQ(e,t){return K(),ae("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon"},[L("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m0 12.75h7.5m-7.5 3H12M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z"})])}function wQ(e,t){return K(),ae("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon"},[L("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 21a9.004 9.004 0 0 0 8.716-6.747M12 21a9.004 9.004 0 0 1-8.716-6.747M12 21c2.485 0 4.5-4.03 4.5-9S14.485 3 12 3m0 18c-2.485 0-4.5-4.03-4.5-9S9.515 3 12 3m0 0a8.997 8.997 0 0 1 7.843 4.582M12 3a8.997 8.997 0 0 0-7.843 4.582m15.686 0A11.953 11.953 0 0 1 12 10.5c-2.998 0-5.74-1.1-7.843-2.918m15.686 0A8.959 8.959 0 0 1 21 12c0 .778-.099 1.533-.284 2.253m0 0A17.919 17.919 0 0 1 12 16.5c-3.162 0-6.133-.815-8.716-2.247m0 0A9.015 9.015 0 0 1 3 12c0-1.605.42-3.113 1.157-4.418"})])}function G4(e,t){return K(),ae("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon"},[L("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"m11.25 11.25.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9-3.75h.008v.008H12V8.25Z"})])}function dM(e,t){return K(),ae("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon"},[L("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607ZM13.5 10.5h-6"})])}function hM(e,t){return K(),ae("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon"},[L("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607ZM10.5 7.5v6m3-3h-6"})])}function CI(e,t){return K(),ae("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon"},[L("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M15 12H9m12 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"})])}function xQ(e,t){return K(),ae("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon"},[L("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M14.25 9v6m-4.5 0V9M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"})])}function z4(e,t){return K(),ae("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon"},[L("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M15.75 5.25v13.5m-7.5-13.5v13.5"})])}function TQ(e,t){return K(),ae("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon"},[L("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"}),L("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M15.91 11.672a.375.375 0 0 1 0 .656l-5.603 3.113a.375.375 0 0 1-.557-.328V8.887c0-.286.307-.466.557-.327l5.603 3.112Z"})])}function W4(e,t){return K(),ae("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon"},[L("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M5.25 5.653c0-.856.917-1.398 1.667-.986l11.54 6.347a1.125 1.125 0 0 1 0 1.972l-11.54 6.347a1.125 1.125 0 0 1-1.667-.986V5.653Z"})])}function CQ(e,t){return K(),ae("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon"},[L("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 9v6m3-3H9m12 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"})])}function j4(e,t){return K(),ae("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon"},[L("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 4.5v15m7.5-7.5h-15"})])}function Y4(e,t){return K(),ae("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon"},[L("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M9.879 7.519c1.171-1.025 3.071-1.025 4.242 0 1.172 1.025 1.172 2.687 0 3.712-.203.179-.43.326-.67.442-.745.361-1.45.999-1.45 1.827v.75M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9 5.25h.008v.008H12v-.008Z"})])}function EQ(e,t){return K(),ae("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon"},[L("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M4.098 19.902a3.75 3.75 0 0 0 5.304 0l6.401-6.402M6.75 21A3.75 3.75 0 0 1 3 17.25V4.125C3 3.504 3.504 3 4.125 3h5.25c.621 0 1.125.504 1.125 1.125v4.072M6.75 21a3.75 3.75 0 0 0 3.75-3.75V8.197M6.75 21h13.125c.621 0 1.125-.504 1.125-1.125v-5.25c0-.621-.504-1.125-1.125-1.125h-4.072M10.5 8.197l2.88-2.88c.438-.439 1.15-.439 1.59 0l3.712 3.713c.44.44.44 1.152 0 1.59l-2.879 2.88M6.75 17.25h.008v.008H6.75v-.008Z"})])}function AQ(e,t){return K(),ae("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon"},[L("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"m9.75 9.75 4.5 4.5m0-4.5-4.5 4.5M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"})])}function Ib(e,t){return K(),ae("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon"},[L("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M6 18 18 6M6 6l12 12"})])}/*! + * vue-router v4.5.0 + * (c) 2024 Eduardo San Martin Morote + * @license MIT + */const gd=typeof document<"u";function X4(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function IQ(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&X4(e.default)}const yn=Object.assign;function mx(e,t){const n={};for(const r in t){const i=t[r];n[r]=ka(i)?i.map(e):e(i)}return n}const uv=()=>{},ka=Array.isArray,K4=/#/g,RQ=/&/g,PQ=/\//g,OQ=/=/g,DQ=/\?/g,Z4=/\+/g,MQ=/%5B/g,LQ=/%5D/g,q4=/%5E/g,NQ=/%60/g,J4=/%7B/g,kQ=/%7C/g,Q4=/%7D/g,FQ=/%20/g;function EI(e){return encodeURI(""+e).replace(kQ,"|").replace(MQ,"[").replace(LQ,"]")}function $Q(e){return EI(e).replace(J4,"{").replace(Q4,"}").replace(q4,"^")}function QC(e){return EI(e).replace(Z4,"%2B").replace(FQ,"+").replace(K4,"%23").replace(RQ,"%26").replace(NQ,"`").replace(J4,"{").replace(Q4,"}").replace(q4,"^")}function BQ(e){return QC(e).replace(OQ,"%3D")}function VQ(e){return EI(e).replace(K4,"%23").replace(DQ,"%3F")}function UQ(e){return e==null?"":VQ(e).replace(PQ,"%2F")}function rg(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const HQ=/\/$/,GQ=e=>e.replace(HQ,"");function yx(e,t,n="/"){let r,i={},o="",a="";const s=t.indexOf("#");let l=t.indexOf("?");return s=0&&(l=-1),l>-1&&(r=t.slice(0,l),o=t.slice(l+1,s>-1?s:t.length),i=e(o)),s>-1&&(r=r||t.slice(0,s),a=t.slice(s,t.length)),r=YQ(r??t,n),{fullPath:r+(o&&"?")+o+a,path:r,query:i,hash:rg(a)}}function zQ(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function pM(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function WQ(e,t,n){const r=t.matched.length-1,i=n.matched.length-1;return r>-1&&r===i&&Jd(t.matched[r],n.matched[i])&&eB(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Jd(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function eB(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!jQ(e[n],t[n]))return!1;return!0}function jQ(e,t){return ka(e)?vM(e,t):ka(t)?vM(t,e):e===t}function vM(e,t){return ka(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function YQ(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),r=e.split("/"),i=r[r.length-1];(i===".."||i===".")&&r.push("");let o=n.length-1,a,s;for(a=0;a1&&o--;else break;return n.slice(0,o).join("/")+"/"+r.slice(a).join("/")}const Dl={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};var ig;(function(e){e.pop="pop",e.push="push"})(ig||(ig={}));var cv;(function(e){e.back="back",e.forward="forward",e.unknown=""})(cv||(cv={}));function XQ(e){if(!e)if(gd){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),GQ(e)}const KQ=/^[^#]+#/;function ZQ(e,t){return e.replace(KQ,"#")+t}function qQ(e,t){const n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}const Rb=()=>({left:window.scrollX,top:window.scrollY});function JQ(e){let t;if("el"in e){const n=e.el,r=typeof n=="string"&&n.startsWith("#"),i=typeof n=="string"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!i)return;t=qQ(i,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function gM(e,t){return(history.state?history.state.position-t:-1)+e}const eE=new Map;function QQ(e,t){eE.set(e,t)}function eee(e){const t=eE.get(e);return eE.delete(e),t}let tee=()=>location.protocol+"//"+location.host;function tB(e,t){const{pathname:n,search:r,hash:i}=t,o=e.indexOf("#");if(o>-1){let s=i.includes(e.slice(o))?e.slice(o).length:1,l=i.slice(s);return l[0]!=="/"&&(l="/"+l),pM(l,"")}return pM(n,e)+r+i}function nee(e,t,n,r){let i=[],o=[],a=null;const s=({state:d})=>{const h=tB(e,location),v=n.value,m=t.value;let y=0;if(d){if(n.value=h,t.value=d,a&&a===v){a=null;return}y=m?d.position-m.position:0}else r(h);i.forEach(_=>{_(n.value,v,{delta:y,type:ig.pop,direction:y?y>0?cv.forward:cv.back:cv.unknown})})};function l(){a=n.value}function u(d){i.push(d);const h=()=>{const v=i.indexOf(d);v>-1&&i.splice(v,1)};return o.push(h),h}function c(){const{history:d}=window;d.state&&d.replaceState(yn({},d.state,{scroll:Rb()}),"")}function f(){for(const d of o)d();o=[],window.removeEventListener("popstate",s),window.removeEventListener("beforeunload",c)}return window.addEventListener("popstate",s),window.addEventListener("beforeunload",c,{passive:!0}),{pauseListeners:l,listen:u,destroy:f}}function mM(e,t,n,r=!1,i=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:i?Rb():null}}function ree(e){const{history:t,location:n}=window,r={value:tB(e,n)},i={value:t.state};i.value||o(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function o(l,u,c){const f=e.indexOf("#"),d=f>-1?(n.host&&document.querySelector("base")?e:e.slice(f))+l:tee()+e+l;try{t[c?"replaceState":"pushState"](u,"",d),i.value=u}catch(h){console.error(h),n[c?"replace":"assign"](d)}}function a(l,u){const c=yn({},t.state,mM(i.value.back,l,i.value.forward,!0),u,{position:i.value.position});o(l,c,!0),r.value=l}function s(l,u){const c=yn({},i.value,t.state,{forward:l,scroll:Rb()});o(c.current,c,!0);const f=yn({},mM(r.value,l,null),{position:c.position+1},u);o(l,f,!1),r.value=l}return{location:r,state:i,push:s,replace:a}}function iee(e){e=XQ(e);const t=ree(e),n=nee(e,t.state,t.location,t.replace);function r(o,a=!0){a||n.pauseListeners(),history.go(o)}const i=yn({location:"",base:e,go:r,createHref:ZQ.bind(null,e)},t,n);return Object.defineProperty(i,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(i,"state",{enumerable:!0,get:()=>t.state.value}),i}function oee(e){return e=location.host?e||location.pathname+location.search:"",e.includes("#")||(e+="#"),iee(e)}function aee(e){return typeof e=="string"||e&&typeof e=="object"}function nB(e){return typeof e=="string"||typeof e=="symbol"}const rB=Symbol("");var yM;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(yM||(yM={}));function Qd(e,t){return yn(new Error,{type:e,[rB]:!0},t)}function Os(e,t){return e instanceof Error&&rB in e&&(t==null||!!(e.type&t))}const _M="[^/]+?",see={sensitive:!1,strict:!1,start:!0,end:!0},lee=/[.+*?^${}()[\]/\\]/g;function uee(e,t){const n=yn({},see,t),r=[];let i=n.start?"^":"";const o=[];for(const u of e){const c=u.length?[]:[90];n.strict&&!u.length&&(i+="/");for(let f=0;ft.length?t.length===1&&t[0]===80?1:-1:0}function iB(e,t){let n=0;const r=e.score,i=t.score;for(;n0&&t[t.length-1]<0}const fee={type:0,value:""},dee=/[a-zA-Z0-9_]/;function hee(e){if(!e)return[[]];if(e==="/")return[[fee]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(h){throw new Error(`ERR (${n})/"${u}": ${h}`)}let n=0,r=n;const i=[];let o;function a(){o&&i.push(o),o=[]}let s=0,l,u="",c="";function f(){u&&(n===0?o.push({type:0,value:u}):n===1||n===2||n===3?(o.length>1&&(l==="*"||l==="+")&&t(`A repeatable param (${u}) must be alone in its segment. eg: '/:ids+.`),o.push({type:1,value:u,regexp:c,repeatable:l==="*"||l==="+",optional:l==="*"||l==="?"})):t("Invalid state to consume buffer"),u="")}function d(){u+=l}for(;s{a(w)}:uv}function a(f){if(nB(f)){const d=r.get(f);d&&(r.delete(f),n.splice(n.indexOf(d),1),d.children.forEach(a),d.alias.forEach(a))}else{const d=n.indexOf(f);d>-1&&(n.splice(d,1),f.record.name&&r.delete(f.record.name),f.children.forEach(a),f.alias.forEach(a))}}function s(){return n}function l(f){const d=yee(f,n);n.splice(d,0,f),f.record.name&&!xM(f)&&r.set(f.record.name,f)}function u(f,d){let h,v={},m,y;if("name"in f&&f.name){if(h=r.get(f.name),!h)throw Qd(1,{location:f});y=h.record.name,v=yn(SM(d.params,h.keys.filter(w=>!w.optional).concat(h.parent?h.parent.keys.filter(w=>w.optional):[]).map(w=>w.name)),f.params&&SM(f.params,h.keys.map(w=>w.name))),m=h.stringify(v)}else if(f.path!=null)m=f.path,h=n.find(w=>w.re.test(m)),h&&(v=h.parse(m),y=h.record.name);else{if(h=d.name?r.get(d.name):n.find(w=>w.re.test(d.path)),!h)throw Qd(1,{location:f,currentLocation:d});y=h.record.name,v=yn({},d.params,f.params),m=h.stringify(v)}const _=[];let b=h;for(;b;)_.unshift(b.record),b=b.parent;return{name:y,path:m,params:v,matched:_,meta:mee(_)}}e.forEach(f=>o(f));function c(){n.length=0,r.clear()}return{addRoute:o,resolve:u,removeRoute:a,clearRoutes:c,getRoutes:s,getRecordMatcher:i}}function SM(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function wM(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:gee(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function gee(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const r in e.components)t[r]=typeof n=="object"?n[r]:n;return t}function xM(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function mee(e){return e.reduce((t,n)=>yn(t,n.meta),{})}function TM(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}function yee(e,t){let n=0,r=t.length;for(;n!==r;){const o=n+r>>1;iB(e,t[o])<0?r=o:n=o+1}const i=_ee(e);return i&&(r=t.lastIndexOf(i,r-1)),r}function _ee(e){let t=e;for(;t=t.parent;)if(oB(t)&&iB(e,t)===0)return t}function oB({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function bee(e){const t={};if(e===""||e==="?")return t;const r=(e[0]==="?"?e.slice(1):e).split("&");for(let i=0;io&&QC(o)):[r&&QC(r)]).forEach(o=>{o!==void 0&&(t+=(t.length?"&":"")+n,o!=null&&(t+="="+o))})}return t}function See(e){const t={};for(const n in e){const r=e[n];r!==void 0&&(t[n]=ka(r)?r.map(i=>i==null?null:""+i):r==null?r:""+r)}return t}const wee=Symbol(""),EM=Symbol(""),Pb=Symbol(""),AI=Symbol(""),tE=Symbol("");function np(){let e=[];function t(r){return e.push(r),()=>{const i=e.indexOf(r);i>-1&&e.splice(i,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Ql(e,t,n,r,i,o=a=>a()){const a=r&&(r.enterCallbacks[i]=r.enterCallbacks[i]||[]);return()=>new Promise((s,l)=>{const u=d=>{d===!1?l(Qd(4,{from:n,to:t})):d instanceof Error?l(d):aee(d)?l(Qd(2,{from:t,to:d})):(a&&r.enterCallbacks[i]===a&&typeof d=="function"&&a.push(d),s())},c=o(()=>e.call(r&&r.instances[i],t,n,u));let f=Promise.resolve(c);e.length<3&&(f=f.then(u)),f.catch(d=>l(d))})}function _x(e,t,n,r,i=o=>o()){const o=[];for(const a of e)for(const s in a.components){let l=a.components[s];if(!(t!=="beforeRouteEnter"&&!a.instances[s]))if(X4(l)){const c=(l.__vccOpts||l)[t];c&&o.push(Ql(c,n,r,a,s,i))}else{let u=l();o.push(()=>u.then(c=>{if(!c)throw new Error(`Couldn't resolve component "${s}" at "${a.path}"`);const f=IQ(c)?c.default:c;a.mods[s]=c,a.components[s]=f;const h=(f.__vccOpts||f)[t];return h&&Ql(h,n,r,a,s,i)()}))}}return o}function AM(e){const t=Ji(Pb),n=Ji(AI),r=Ve(()=>{const l=N(e.to);return t.resolve(l)}),i=Ve(()=>{const{matched:l}=r.value,{length:u}=l,c=l[u-1],f=n.matched;if(!c||!f.length)return-1;const d=f.findIndex(Jd.bind(null,c));if(d>-1)return d;const h=IM(l[u-2]);return u>1&&IM(c)===h&&f[f.length-1].path!==h?f.findIndex(Jd.bind(null,l[u-2])):d}),o=Ve(()=>i.value>-1&&Aee(n.params,r.value.params)),a=Ve(()=>i.value>-1&&i.value===n.matched.length-1&&eB(n.params,r.value.params));function s(l={}){if(Eee(l)){const u=t[N(e.replace)?"replace":"push"](N(e.to)).catch(uv);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>u),u}return Promise.resolve()}return{route:r,href:Ve(()=>r.value.href),isActive:o,isExactActive:a,navigate:s}}function xee(e){return e.length===1?e[0]:e}const Tee=it({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:AM,setup(e,{slots:t}){const n=Na(AM(e)),{options:r}=Ji(Pb),i=Ve(()=>({[RM(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[RM(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const o=t.default&&xee(t.default(n));return e.custom?o:Wi("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:i.value},o)}}}),Cee=Tee;function Eee(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Aee(e,t){for(const n in t){const r=t[n],i=e[n];if(typeof r=="string"){if(r!==i)return!1}else if(!ka(i)||i.length!==r.length||r.some((o,a)=>o!==i[a]))return!1}return!0}function IM(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const RM=(e,t,n)=>e??t??n,Iee=it({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const r=Ji(tE),i=Ve(()=>e.route||r.value),o=Ji(EM,0),a=Ve(()=>{let u=N(o);const{matched:c}=i.value;let f;for(;(f=c[u])&&!f.components;)u++;return u}),s=Ve(()=>i.value.matched[a.value]);av(EM,Ve(()=>a.value+1)),av(wee,s),av(tE,i);const l=Fe();return Yt(()=>[l.value,s.value,e.name],([u,c,f],[d,h,v])=>{c&&(c.instances[f]=u,h&&h!==c&&u&&u===d&&(c.leaveGuards.size||(c.leaveGuards=h.leaveGuards),c.updateGuards.size||(c.updateGuards=h.updateGuards))),u&&c&&(!h||!Jd(c,h)||!d)&&(c.enterCallbacks[f]||[]).forEach(m=>m(u))},{flush:"post"}),()=>{const u=i.value,c=e.name,f=s.value,d=f&&f.components[c];if(!d)return PM(n.default,{Component:d,route:u});const h=f.props[c],v=h?h===!0?u.params:typeof h=="function"?h(u):h:null,y=Wi(d,yn({},v,t,{onVnodeUnmounted:_=>{_.component.isUnmounted&&(f.instances[c]=null)},ref:l}));return PM(n.default,{Component:y,route:u})||y}}});function PM(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const II=Iee;function Ree(e){const t=vee(e.routes,e),n=e.parseQuery||bee,r=e.stringifyQuery||CM,i=e.history,o=np(),a=np(),s=np(),l=Ef(Dl);let u=Dl;gd&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const c=mx.bind(null,ce=>""+ce),f=mx.bind(null,UQ),d=mx.bind(null,rg);function h(ce,Ee){let Se,Te;return nB(ce)?(Se=t.getRecordMatcher(ce),Te=Ee):Te=ce,t.addRoute(Te,Se)}function v(ce){const Ee=t.getRecordMatcher(ce);Ee&&t.removeRoute(Ee)}function m(){return t.getRoutes().map(ce=>ce.record)}function y(ce){return!!t.getRecordMatcher(ce)}function _(ce,Ee){if(Ee=yn({},Ee||l.value),typeof ce=="string"){const G=yx(n,ce,Ee.path),le=t.resolve({path:G.path},Ee),we=i.createHref(G.fullPath);return yn(G,le,{params:d(le.params),hash:rg(G.hash),redirectedFrom:void 0,href:we})}let Se;if(ce.path!=null)Se=yn({},ce,{path:yx(n,ce.path,Ee.path).path});else{const G=yn({},ce.params);for(const le in G)G[le]==null&&delete G[le];Se=yn({},ce,{params:f(G)}),Ee.params=f(Ee.params)}const Te=t.resolve(Se,Ee),Oe=ce.hash||"";Te.params=c(d(Te.params));const $e=zQ(r,yn({},ce,{hash:$Q(Oe),path:Te.path})),H=i.createHref($e);return yn({fullPath:$e,hash:Oe,query:r===CM?See(ce.query):ce.query||{}},Te,{redirectedFrom:void 0,href:H})}function b(ce){return typeof ce=="string"?yx(n,ce,l.value.path):yn({},ce)}function w(ce,Ee){if(u!==ce)return Qd(8,{from:Ee,to:ce})}function S(ce){return A(ce)}function C(ce){return S(yn(b(ce),{replace:!0}))}function T(ce){const Ee=ce.matched[ce.matched.length-1];if(Ee&&Ee.redirect){const{redirect:Se}=Ee;let Te=typeof Se=="function"?Se(ce):Se;return typeof Te=="string"&&(Te=Te.includes("?")||Te.includes("#")?Te=b(Te):{path:Te},Te.params={}),yn({query:ce.query,hash:ce.hash,params:Te.path!=null?{}:ce.params},Te)}}function A(ce,Ee){const Se=u=_(ce),Te=l.value,Oe=ce.state,$e=ce.force,H=ce.replace===!0,G=T(Se);if(G)return A(yn(b(G),{state:typeof G=="object"?yn({},Oe,G.state):Oe,force:$e,replace:H}),Ee||Se);const le=Se;le.redirectedFrom=Ee;let we;return!$e&&WQ(r,Te,Se)&&(we=Qd(16,{to:le,from:Te}),ve(Te,Te,!0,!1)),(we?Promise.resolve(we):R(le,Te)).catch(pe=>Os(pe)?Os(pe,2)?pe:ge(pe):j(pe,le,Te)).then(pe=>{if(pe){if(Os(pe,2))return A(yn({replace:H},b(pe.to),{state:typeof pe.to=="object"?yn({},Oe,pe.to.state):Oe,force:$e}),Ee||le)}else pe=M(le,Te,!0,H,Oe);return O(le,Te,pe),pe})}function P(ce,Ee){const Se=w(ce,Ee);return Se?Promise.reject(Se):Promise.resolve()}function I(ce){const Ee=ze.values().next().value;return Ee&&typeof Ee.runWithContext=="function"?Ee.runWithContext(ce):ce()}function R(ce,Ee){let Se;const[Te,Oe,$e]=Pee(ce,Ee);Se=_x(Te.reverse(),"beforeRouteLeave",ce,Ee);for(const G of Te)G.leaveGuards.forEach(le=>{Se.push(Ql(le,ce,Ee))});const H=P.bind(null,ce,Ee);return Se.push(H),je(Se).then(()=>{Se=[];for(const G of o.list())Se.push(Ql(G,ce,Ee));return Se.push(H),je(Se)}).then(()=>{Se=_x(Oe,"beforeRouteUpdate",ce,Ee);for(const G of Oe)G.updateGuards.forEach(le=>{Se.push(Ql(le,ce,Ee))});return Se.push(H),je(Se)}).then(()=>{Se=[];for(const G of $e)if(G.beforeEnter)if(ka(G.beforeEnter))for(const le of G.beforeEnter)Se.push(Ql(le,ce,Ee));else Se.push(Ql(G.beforeEnter,ce,Ee));return Se.push(H),je(Se)}).then(()=>(ce.matched.forEach(G=>G.enterCallbacks={}),Se=_x($e,"beforeRouteEnter",ce,Ee,I),Se.push(H),je(Se))).then(()=>{Se=[];for(const G of a.list())Se.push(Ql(G,ce,Ee));return Se.push(H),je(Se)}).catch(G=>Os(G,8)?G:Promise.reject(G))}function O(ce,Ee,Se){s.list().forEach(Te=>I(()=>Te(ce,Ee,Se)))}function M(ce,Ee,Se,Te,Oe){const $e=w(ce,Ee);if($e)return $e;const H=Ee===Dl,G=gd?history.state:{};Se&&(Te||H?i.replace(ce.fullPath,yn({scroll:H&&G&&G.scroll},Oe)):i.push(ce.fullPath,Oe)),l.value=ce,ve(ce,Ee,Se,H),ge()}let $;function F(){$||($=i.listen((ce,Ee,Se)=>{if(!Me.listening)return;const Te=_(ce),Oe=T(Te);if(Oe){A(yn(Oe,{replace:!0,force:!0}),Te).catch(uv);return}u=Te;const $e=l.value;gd&&QQ(gM($e.fullPath,Se.delta),Rb()),R(Te,$e).catch(H=>Os(H,12)?H:Os(H,2)?(A(yn(b(H.to),{force:!0}),Te).then(G=>{Os(G,20)&&!Se.delta&&Se.type===ig.pop&&i.go(-1,!1)}).catch(uv),Promise.reject()):(Se.delta&&i.go(-Se.delta,!1),j(H,Te,$e))).then(H=>{H=H||M(Te,$e,!1),H&&(Se.delta&&!Os(H,8)?i.go(-Se.delta,!1):Se.type===ig.pop&&Os(H,20)&&i.go(-1,!1)),O(Te,$e,H)}).catch(uv)}))}let z=np(),B=np(),Y;function j(ce,Ee,Se){ge(ce);const Te=B.list();return Te.length?Te.forEach(Oe=>Oe(ce,Ee,Se)):console.error(ce),Promise.reject(ce)}function se(){return Y&&l.value!==Dl?Promise.resolve():new Promise((ce,Ee)=>{z.add([ce,Ee])})}function ge(ce){return Y||(Y=!ce,F(),z.list().forEach(([Ee,Se])=>ce?Se(ce):Ee()),z.reset()),ce}function ve(ce,Ee,Se,Te){const{scrollBehavior:Oe}=e;if(!gd||!Oe)return Promise.resolve();const $e=!Se&&eee(gM(ce.fullPath,0))||(Te||!Se)&&history.state&&history.state.scroll||null;return gs().then(()=>Oe(ce,Ee,$e)).then(H=>H&&JQ(H)).catch(H=>j(H,ce,Ee))}const De=ce=>i.go(ce);let Ne;const ze=new Set,Me={currentRoute:l,listening:!0,addRoute:h,removeRoute:v,clearRoutes:t.clearRoutes,hasRoute:y,getRoutes:m,resolve:_,options:e,push:S,replace:C,go:De,back:()=>De(-1),forward:()=>De(1),beforeEach:o.add,beforeResolve:a.add,afterEach:s.add,onError:B.add,isReady:se,install(ce){const Ee=this;ce.component("RouterLink",Cee),ce.component("RouterView",II),ce.config.globalProperties.$router=Ee,Object.defineProperty(ce.config.globalProperties,"$route",{enumerable:!0,get:()=>N(l)}),gd&&!Ne&&l.value===Dl&&(Ne=!0,S(i.location).catch(Oe=>{}));const Se={};for(const Oe in Dl)Object.defineProperty(Se,Oe,{get:()=>l.value[Oe],enumerable:!0});ce.provide(Pb,Ee),ce.provide(AI,sI(Se)),ce.provide(tE,l);const Te=ce.unmount;ze.add(ce),ce.unmount=function(){ze.delete(ce),ze.size<1&&(u=Dl,$&&$(),$=null,l.value=Dl,Ne=!1,Y=!1),Te()}}};function je(ce){return ce.reduce((Ee,Se)=>Ee.then(()=>I(Se)),Promise.resolve())}return Me}function Pee(e,t){const n=[],r=[],i=[],o=Math.max(t.matched.length,e.matched.length);for(let a=0;aJd(u,s))?r.push(s):n.push(s));const l=e.matched[a];l&&(t.matched.find(u=>Jd(u,l))||i.push(l))}return[n,r,i]}function Oee(){return Ji(Pb)}function aB(e){return Ji(AI)}/*! + * shared v10.0.5 + * (c) 2024 kazuya kawaguchi + * Released under the MIT License. + */const a1=typeof window<"u",$u=(e,t=!1)=>t?Symbol.for(e):Symbol(e),Dee=(e,t,n)=>Mee({l:e,k:t,s:n}),Mee=e=>JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029").replace(/\u0027/g,"\\u0027"),hr=e=>typeof e=="number"&&isFinite(e),Lee=e=>RI(e)==="[object Date]",eh=e=>RI(e)==="[object RegExp]",Ob=e=>jt(e)&&Object.keys(e).length===0,Er=Object.assign,Nee=Object.create,Rn=(e=null)=>Nee(e);let OM;const Mc=()=>OM||(OM=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:Rn());function DM(e){return e.replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}const kee=Object.prototype.hasOwnProperty;function Ra(e,t){return kee.call(e,t)}const ar=Array.isArray,Hn=e=>typeof e=="function",tt=e=>typeof e=="string",fn=e=>typeof e=="boolean",pn=e=>e!==null&&typeof e=="object",Fee=e=>pn(e)&&Hn(e.then)&&Hn(e.catch),sB=Object.prototype.toString,RI=e=>sB.call(e),jt=e=>RI(e)==="[object Object]",$ee=e=>e==null?"":ar(e)||jt(e)&&e.toString===sB?JSON.stringify(e,null,2):String(e);function PI(e,t=""){return e.reduce((n,r,i)=>i===0?n+r:n+t+r,"")}function Bee(e,t){typeof console<"u"&&(console.warn("[intlify] "+e),t&&console.warn(t.stack))}const Ty=e=>!pn(e)||ar(e);function j0(e,t){if(Ty(e)||Ty(t))throw new Error("Invalid value");const n=[{src:e,des:t}];for(;n.length;){const{src:r,des:i}=n.pop();Object.keys(r).forEach(o=>{o!=="__proto__"&&(pn(r[o])&&!pn(i[o])&&(i[o]=Array.isArray(r[o])?[]:Rn()),Ty(i[o])||Ty(r[o])?i[o]=r[o]:n.push({src:r[o],des:i[o]}))})}}/*! + * message-compiler v10.0.5 + * (c) 2024 kazuya kawaguchi + * Released under the MIT License. + */function Vee(e,t,n){return{line:e,column:t,offset:n}}function nE(e,t,n){return{start:e,end:t}}const xn={EXPECTED_TOKEN:1,INVALID_TOKEN_IN_PLACEHOLDER:2,UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER:3,UNKNOWN_ESCAPE_SEQUENCE:4,INVALID_UNICODE_ESCAPE_SEQUENCE:5,UNBALANCED_CLOSING_BRACE:6,UNTERMINATED_CLOSING_BRACE:7,EMPTY_PLACEHOLDER:8,NOT_ALLOW_NEST_PLACEHOLDER:9,INVALID_LINKED_FORMAT:10,MUST_HAVE_MESSAGES_IN_PLURAL:11,UNEXPECTED_EMPTY_LINKED_MODIFIER:12,UNEXPECTED_EMPTY_LINKED_KEY:13,UNEXPECTED_LEXICAL_ANALYSIS:14,UNHANDLED_CODEGEN_NODE_TYPE:15,UNHANDLED_MINIFIER_NODE_TYPE:16},Uee=17;function Db(e,t,n={}){const{domain:r,messages:i,args:o}=n,a=e,s=new SyntaxError(String(a));return s.code=e,t&&(s.location=t),s.domain=r,s}function Hee(e){throw e}const Ds=" ",Gee="\r",Si=` +`,zee="\u2028",Wee="\u2029";function jee(e){const t=e;let n=0,r=1,i=1,o=0;const a=A=>t[A]===Gee&&t[A+1]===Si,s=A=>t[A]===Si,l=A=>t[A]===Wee,u=A=>t[A]===zee,c=A=>a(A)||s(A)||l(A)||u(A),f=()=>n,d=()=>r,h=()=>i,v=()=>o,m=A=>a(A)||l(A)||u(A)?Si:t[A],y=()=>m(n),_=()=>m(n+o);function b(){return o=0,c(n)&&(r++,i=0),a(n)&&n++,n++,i++,t[n]}function w(){return a(n+o)&&o++,o++,t[n+o]}function S(){n=0,r=1,i=1,o=0}function C(A=0){o=A}function T(){const A=n+o;for(;A!==n;)b();o=0}return{index:f,line:d,column:h,peekOffset:v,charAt:m,currentChar:y,currentPeek:_,next:b,peek:w,reset:S,resetPeek:C,skipToPeek:T}}const Ml=void 0,Yee=".",MM="'",Xee="tokenizer";function Kee(e,t={}){const n=t.location!==!1,r=jee(e),i=()=>r.index(),o=()=>Vee(r.line(),r.column(),r.index()),a=o(),s=i(),l={currentType:13,offset:s,startLoc:a,endLoc:a,lastType:13,lastOffset:s,lastStartLoc:a,lastEndLoc:a,braceNest:0,inLinked:!1,text:""},u=()=>l,{onError:c}=t;function f(U,W,q,...fe){const _e=u();if(W.column+=q,W.offset+=q,c){const Pe=n?nE(_e.startLoc,W):null,Z=Db(U,Pe,{domain:Xee,args:fe});c(Z)}}function d(U,W,q){U.endLoc=o(),U.currentType=W;const fe={type:W};return n&&(fe.loc=nE(U.startLoc,U.endLoc)),q!=null&&(fe.value=q),fe}const h=U=>d(U,13);function v(U,W){return U.currentChar()===W?(U.next(),W):(f(xn.EXPECTED_TOKEN,o(),0,W),"")}function m(U){let W="";for(;U.currentPeek()===Ds||U.currentPeek()===Si;)W+=U.currentPeek(),U.peek();return W}function y(U){const W=m(U);return U.skipToPeek(),W}function _(U){if(U===Ml)return!1;const W=U.charCodeAt(0);return W>=97&&W<=122||W>=65&&W<=90||W===95}function b(U){if(U===Ml)return!1;const W=U.charCodeAt(0);return W>=48&&W<=57}function w(U,W){const{currentType:q}=W;if(q!==2)return!1;m(U);const fe=_(U.currentPeek());return U.resetPeek(),fe}function S(U,W){const{currentType:q}=W;if(q!==2)return!1;m(U);const fe=U.currentPeek()==="-"?U.peek():U.currentPeek(),_e=b(fe);return U.resetPeek(),_e}function C(U,W){const{currentType:q}=W;if(q!==2)return!1;m(U);const fe=U.currentPeek()===MM;return U.resetPeek(),fe}function T(U,W){const{currentType:q}=W;if(q!==7)return!1;m(U);const fe=U.currentPeek()===".";return U.resetPeek(),fe}function A(U,W){const{currentType:q}=W;if(q!==8)return!1;m(U);const fe=_(U.currentPeek());return U.resetPeek(),fe}function P(U,W){const{currentType:q}=W;if(!(q===7||q===11))return!1;m(U);const fe=U.currentPeek()===":";return U.resetPeek(),fe}function I(U,W){const{currentType:q}=W;if(q!==9)return!1;const fe=()=>{const Pe=U.currentPeek();return Pe==="{"?_(U.peek()):Pe==="@"||Pe==="|"||Pe===":"||Pe==="."||Pe===Ds||!Pe?!1:Pe===Si?(U.peek(),fe()):O(U,!1)},_e=fe();return U.resetPeek(),_e}function R(U){m(U);const W=U.currentPeek()==="|";return U.resetPeek(),W}function O(U,W=!0){const q=(_e=!1,Pe="")=>{const Z=U.currentPeek();return Z==="{"||Z==="@"||!Z?_e:Z==="|"?!(Pe===Ds||Pe===Si):Z===Ds?(U.peek(),q(!0,Ds)):Z===Si?(U.peek(),q(!0,Si)):!0},fe=q();return W&&U.resetPeek(),fe}function M(U,W){const q=U.currentChar();return q===Ml?Ml:W(q)?(U.next(),q):null}function $(U){const W=U.charCodeAt(0);return W>=97&&W<=122||W>=65&&W<=90||W>=48&&W<=57||W===95||W===36}function F(U){return M(U,$)}function z(U){const W=U.charCodeAt(0);return W>=97&&W<=122||W>=65&&W<=90||W>=48&&W<=57||W===95||W===36||W===45}function B(U){return M(U,z)}function Y(U){const W=U.charCodeAt(0);return W>=48&&W<=57}function j(U){return M(U,Y)}function se(U){const W=U.charCodeAt(0);return W>=48&&W<=57||W>=65&&W<=70||W>=97&&W<=102}function ge(U){return M(U,se)}function ve(U){let W="",q="";for(;W=j(U);)q+=W;return q}function De(U){let W="";for(;;){const q=U.currentChar();if(q==="{"||q==="}"||q==="@"||q==="|"||!q)break;if(q===Ds||q===Si)if(O(U))W+=q,U.next();else{if(R(U))break;W+=q,U.next()}else W+=q,U.next()}return W}function Ne(U){y(U);let W="",q="";for(;W=B(U);)q+=W;return U.currentChar()===Ml&&f(xn.UNTERMINATED_CLOSING_BRACE,o(),0),q}function ze(U){y(U);let W="";return U.currentChar()==="-"?(U.next(),W+=`-${ve(U)}`):W+=ve(U),U.currentChar()===Ml&&f(xn.UNTERMINATED_CLOSING_BRACE,o(),0),W}function Me(U){return U!==MM&&U!==Si}function je(U){y(U),v(U,"'");let W="",q="";for(;W=M(U,Me);)W==="\\"?q+=ce(U):q+=W;const fe=U.currentChar();return fe===Si||fe===Ml?(f(xn.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER,o(),0),fe===Si&&(U.next(),v(U,"'")),q):(v(U,"'"),q)}function ce(U){const W=U.currentChar();switch(W){case"\\":case"'":return U.next(),`\\${W}`;case"u":return Ee(U,W,4);case"U":return Ee(U,W,6);default:return f(xn.UNKNOWN_ESCAPE_SEQUENCE,o(),0,W),""}}function Ee(U,W,q){v(U,W);let fe="";for(let _e=0;_e{const fe=U.currentChar();return fe==="{"||fe==="@"||fe==="|"||fe==="("||fe===")"||!fe||fe===Ds?q:(q+=fe,U.next(),W(q))};return W("")}function H(U){y(U);const W=v(U,"|");return y(U),W}function G(U,W){let q=null;switch(U.currentChar()){case"{":return W.braceNest>=1&&f(xn.NOT_ALLOW_NEST_PLACEHOLDER,o(),0),U.next(),q=d(W,2,"{"),y(U),W.braceNest++,q;case"}":return W.braceNest>0&&W.currentType===2&&f(xn.EMPTY_PLACEHOLDER,o(),0),U.next(),q=d(W,3,"}"),W.braceNest--,W.braceNest>0&&y(U),W.inLinked&&W.braceNest===0&&(W.inLinked=!1),q;case"@":return W.braceNest>0&&f(xn.UNTERMINATED_CLOSING_BRACE,o(),0),q=le(U,W)||h(W),W.braceNest=0,q;default:{let _e=!0,Pe=!0,Z=!0;if(R(U))return W.braceNest>0&&f(xn.UNTERMINATED_CLOSING_BRACE,o(),0),q=d(W,1,H(U)),W.braceNest=0,W.inLinked=!1,q;if(W.braceNest>0&&(W.currentType===4||W.currentType===5||W.currentType===6))return f(xn.UNTERMINATED_CLOSING_BRACE,o(),0),W.braceNest=0,we(U,W);if(_e=w(U,W))return q=d(W,4,Ne(U)),y(U),q;if(Pe=S(U,W))return q=d(W,5,ze(U)),y(U),q;if(Z=C(U,W))return q=d(W,6,je(U)),y(U),q;if(!_e&&!Pe&&!Z)return q=d(W,12,Te(U)),f(xn.INVALID_TOKEN_IN_PLACEHOLDER,o(),0,q.value),y(U),q;break}}return q}function le(U,W){const{currentType:q}=W;let fe=null;const _e=U.currentChar();switch((q===7||q===8||q===11||q===9)&&(_e===Si||_e===Ds)&&f(xn.INVALID_LINKED_FORMAT,o(),0),_e){case"@":return U.next(),fe=d(W,7,"@"),W.inLinked=!0,fe;case".":return y(U),U.next(),d(W,8,".");case":":return y(U),U.next(),d(W,9,":");default:return R(U)?(fe=d(W,1,H(U)),W.braceNest=0,W.inLinked=!1,fe):T(U,W)||P(U,W)?(y(U),le(U,W)):A(U,W)?(y(U),d(W,11,Oe(U))):I(U,W)?(y(U),_e==="{"?G(U,W)||fe:d(W,10,$e(U))):(q===7&&f(xn.INVALID_LINKED_FORMAT,o(),0),W.braceNest=0,W.inLinked=!1,we(U,W))}}function we(U,W){let q={type:13};if(W.braceNest>0)return G(U,W)||h(W);if(W.inLinked)return le(U,W)||h(W);switch(U.currentChar()){case"{":return G(U,W)||h(W);case"}":return f(xn.UNBALANCED_CLOSING_BRACE,o(),0),U.next(),d(W,3,"}");case"@":return le(U,W)||h(W);default:{if(R(U))return q=d(W,1,H(U)),W.braceNest=0,W.inLinked=!1,q;if(O(U))return d(W,0,De(U));break}}return q}function pe(){const{currentType:U,offset:W,startLoc:q,endLoc:fe}=l;return l.lastType=U,l.lastOffset=W,l.lastStartLoc=q,l.lastEndLoc=fe,l.offset=i(),l.startLoc=o(),r.currentChar()===Ml?d(l,13):we(r,l)}return{nextToken:pe,currentOffset:i,currentPosition:o,context:u}}const Zee="parser",qee=/(?:\\\\|\\'|\\u([0-9a-fA-F]{4})|\\U([0-9a-fA-F]{6}))/g;function Jee(e,t,n){switch(e){case"\\\\":return"\\";case"\\'":return"'";default:{const r=parseInt(t||n,16);return r<=55295||r>=57344?String.fromCodePoint(r):"�"}}}function Qee(e={}){const t=e.location!==!1,{onError:n}=e;function r(_,b,w,S,...C){const T=_.currentPosition();if(T.offset+=S,T.column+=S,n){const A=t?nE(w,T):null,P=Db(b,A,{domain:Zee,args:C});n(P)}}function i(_,b,w){const S={type:_};return t&&(S.start=b,S.end=b,S.loc={start:w,end:w}),S}function o(_,b,w,S){t&&(_.end=b,_.loc&&(_.loc.end=w))}function a(_,b){const w=_.context(),S=i(3,w.offset,w.startLoc);return S.value=b,o(S,_.currentOffset(),_.currentPosition()),S}function s(_,b){const w=_.context(),{lastOffset:S,lastStartLoc:C}=w,T=i(5,S,C);return T.index=parseInt(b,10),_.nextToken(),o(T,_.currentOffset(),_.currentPosition()),T}function l(_,b){const w=_.context(),{lastOffset:S,lastStartLoc:C}=w,T=i(4,S,C);return T.key=b,_.nextToken(),o(T,_.currentOffset(),_.currentPosition()),T}function u(_,b){const w=_.context(),{lastOffset:S,lastStartLoc:C}=w,T=i(9,S,C);return T.value=b.replace(qee,Jee),_.nextToken(),o(T,_.currentOffset(),_.currentPosition()),T}function c(_){const b=_.nextToken(),w=_.context(),{lastOffset:S,lastStartLoc:C}=w,T=i(8,S,C);return b.type!==11?(r(_,xn.UNEXPECTED_EMPTY_LINKED_MODIFIER,w.lastStartLoc,0),T.value="",o(T,S,C),{nextConsumeToken:b,node:T}):(b.value==null&&r(_,xn.UNEXPECTED_LEXICAL_ANALYSIS,w.lastStartLoc,0,za(b)),T.value=b.value||"",o(T,_.currentOffset(),_.currentPosition()),{node:T})}function f(_,b){const w=_.context(),S=i(7,w.offset,w.startLoc);return S.value=b,o(S,_.currentOffset(),_.currentPosition()),S}function d(_){const b=_.context(),w=i(6,b.offset,b.startLoc);let S=_.nextToken();if(S.type===8){const C=c(_);w.modifier=C.node,S=C.nextConsumeToken||_.nextToken()}switch(S.type!==9&&r(_,xn.UNEXPECTED_LEXICAL_ANALYSIS,b.lastStartLoc,0,za(S)),S=_.nextToken(),S.type===2&&(S=_.nextToken()),S.type){case 10:S.value==null&&r(_,xn.UNEXPECTED_LEXICAL_ANALYSIS,b.lastStartLoc,0,za(S)),w.key=f(_,S.value||"");break;case 4:S.value==null&&r(_,xn.UNEXPECTED_LEXICAL_ANALYSIS,b.lastStartLoc,0,za(S)),w.key=l(_,S.value||"");break;case 5:S.value==null&&r(_,xn.UNEXPECTED_LEXICAL_ANALYSIS,b.lastStartLoc,0,za(S)),w.key=s(_,S.value||"");break;case 6:S.value==null&&r(_,xn.UNEXPECTED_LEXICAL_ANALYSIS,b.lastStartLoc,0,za(S)),w.key=u(_,S.value||"");break;default:{r(_,xn.UNEXPECTED_EMPTY_LINKED_KEY,b.lastStartLoc,0);const C=_.context(),T=i(7,C.offset,C.startLoc);return T.value="",o(T,C.offset,C.startLoc),w.key=T,o(w,C.offset,C.startLoc),{nextConsumeToken:S,node:w}}}return o(w,_.currentOffset(),_.currentPosition()),{node:w}}function h(_){const b=_.context(),w=b.currentType===1?_.currentOffset():b.offset,S=b.currentType===1?b.endLoc:b.startLoc,C=i(2,w,S);C.items=[];let T=null;do{const I=T||_.nextToken();switch(T=null,I.type){case 0:I.value==null&&r(_,xn.UNEXPECTED_LEXICAL_ANALYSIS,b.lastStartLoc,0,za(I)),C.items.push(a(_,I.value||""));break;case 5:I.value==null&&r(_,xn.UNEXPECTED_LEXICAL_ANALYSIS,b.lastStartLoc,0,za(I)),C.items.push(s(_,I.value||""));break;case 4:I.value==null&&r(_,xn.UNEXPECTED_LEXICAL_ANALYSIS,b.lastStartLoc,0,za(I)),C.items.push(l(_,I.value||""));break;case 6:I.value==null&&r(_,xn.UNEXPECTED_LEXICAL_ANALYSIS,b.lastStartLoc,0,za(I)),C.items.push(u(_,I.value||""));break;case 7:{const R=d(_);C.items.push(R.node),T=R.nextConsumeToken||null;break}}}while(b.currentType!==13&&b.currentType!==1);const A=b.currentType===1?b.lastOffset:_.currentOffset(),P=b.currentType===1?b.lastEndLoc:_.currentPosition();return o(C,A,P),C}function v(_,b,w,S){const C=_.context();let T=S.items.length===0;const A=i(1,b,w);A.cases=[],A.cases.push(S);do{const P=h(_);T||(T=P.items.length===0),A.cases.push(P)}while(C.currentType!==13);return T&&r(_,xn.MUST_HAVE_MESSAGES_IN_PLURAL,w,0),o(A,_.currentOffset(),_.currentPosition()),A}function m(_){const b=_.context(),{offset:w,startLoc:S}=b,C=h(_);return b.currentType===13?C:v(_,w,S,C)}function y(_){const b=Kee(_,Er({},e)),w=b.context(),S=i(0,w.offset,w.startLoc);return t&&S.loc&&(S.loc.source=_),S.body=m(b),e.onCacheKey&&(S.cacheKey=e.onCacheKey(_)),w.currentType!==13&&r(b,xn.UNEXPECTED_LEXICAL_ANALYSIS,w.lastStartLoc,0,_[w.offset]||""),o(S,b.currentOffset(),b.currentPosition()),S}return{parse:y}}function za(e){if(e.type===13)return"EOF";const t=(e.value||"").replace(/\r?\n/gu,"\\n");return t.length>10?t.slice(0,9)+"…":t}function ete(e,t={}){const n={ast:e,helpers:new Set};return{context:()=>n,helper:o=>(n.helpers.add(o),o)}}function LM(e,t){for(let n=0;nNM(n)),e}function NM(e){if(e.items.length===1){const t=e.items[0];(t.type===3||t.type===9)&&(e.static=t.value,delete t.value)}else{const t=[];for(let n=0;ns;function u(y,_){s.code+=y}function c(y,_=!0){const b=_?i:"";u(o?b+" ".repeat(y):b)}function f(y=!0){const _=++s.indentLevel;y&&c(_)}function d(y=!0){const _=--s.indentLevel;y&&c(_)}function h(){c(s.indentLevel)}return{context:l,push:u,indent:f,deindent:d,newline:h,helper:y=>`_${y}`,needIndent:()=>s.needIndent}}function ite(e,t){const{helper:n}=e;e.push(`${n("linked")}(`),th(e,t.key),t.modifier?(e.push(", "),th(e,t.modifier),e.push(", _type")):e.push(", undefined, _type"),e.push(")")}function ote(e,t){const{helper:n,needIndent:r}=e;e.push(`${n("normalize")}([`),e.indent(r());const i=t.items.length;for(let o=0;o1){e.push(`${n("plural")}([`),e.indent(r());const i=t.cases.length;for(let o=0;o{const n=tt(t.mode)?t.mode:"normal",r=tt(t.filename)?t.filename:"message.intl",i=!!t.sourceMap,o=t.breakLineCode!=null?t.breakLineCode:n==="arrow"?";":` +`,a=t.needIndent?t.needIndent:n!=="arrow",s=e.helpers||[],l=rte(e,{mode:n,filename:r,sourceMap:i,breakLineCode:o,needIndent:a});l.push(n==="normal"?"function __msg__ (ctx) {":"(ctx) => {"),l.indent(a),s.length>0&&(l.push(`const { ${PI(s.map(f=>`${f}: _${f}`),", ")} } = ctx`),l.newline()),l.push("return "),th(l,e),l.deindent(a),l.push("}"),delete e.helpers;const{code:u,map:c}=l.context();return{ast:e,code:u,map:c?c.toJSON():void 0}};function ute(e,t={}){const n=Er({},t),r=!!n.jit,i=!!n.minify,o=n.optimize==null?!0:n.optimize,s=Qee(n).parse(e);return r?(o&&nte(s),i&&md(s),{ast:s,code:""}):(tte(s,n),lte(s,n))}/*! + * core-base v10.0.5 + * (c) 2024 kazuya kawaguchi + * Released under the MIT License. + */function cte(){typeof __INTLIFY_PROD_DEVTOOLS__!="boolean"&&(Mc().__INTLIFY_PROD_DEVTOOLS__=!1),typeof __INTLIFY_DROP_MESSAGE_COMPILER__!="boolean"&&(Mc().__INTLIFY_DROP_MESSAGE_COMPILER__=!1)}function bx(e){return n=>fte(n,e)}function fte(e,t){const n=hte(t);if(n==null)throw og(0);if(DI(n)===1){const o=vte(n);return e.plural(o.reduce((a,s)=>[...a,kM(e,s)],[]))}else return kM(e,n)}const dte=["b","body"];function hte(e){return Bu(e,dte)}const pte=["c","cases"];function vte(e){return Bu(e,pte,[])}function kM(e,t){const n=mte(t);if(n!=null)return e.type==="text"?n:e.normalize([n]);{const r=_te(t).reduce((i,o)=>[...i,rE(e,o)],[]);return e.normalize(r)}}const gte=["s","static"];function mte(e){return Bu(e,gte)}const yte=["i","items"];function _te(e){return Bu(e,yte,[])}function rE(e,t){const n=DI(t);switch(n){case 3:return Cy(t,n);case 9:return Cy(t,n);case 4:{const r=t;if(Ra(r,"k")&&r.k)return e.interpolate(e.named(r.k));if(Ra(r,"key")&&r.key)return e.interpolate(e.named(r.key));throw og(n)}case 5:{const r=t;if(Ra(r,"i")&&hr(r.i))return e.interpolate(e.list(r.i));if(Ra(r,"index")&&hr(r.index))return e.interpolate(e.list(r.index));throw og(n)}case 6:{const r=t,i=xte(r),o=Cte(r);return e.linked(rE(e,o),i?rE(e,i):void 0,e.type)}case 7:return Cy(t,n);case 8:return Cy(t,n);default:throw new Error(`unhandled node on format message part: ${n}`)}}const bte=["t","type"];function DI(e){return Bu(e,bte)}const Ste=["v","value"];function Cy(e,t){const n=Bu(e,Ste);if(n)return n;throw og(t)}const wte=["m","modifier"];function xte(e){return Bu(e,wte)}const Tte=["k","key"];function Cte(e){const t=Bu(e,Tte);if(t)return t;throw og(6)}function Bu(e,t,n){for(let r=0;re;let Ey=Rn();function nh(e){return pn(e)&&DI(e)===0&&(Ra(e,"b")||Ra(e,"body"))}function Ate(e,t={}){let n=!1;const r=t.onError||Hee;return t.onError=i=>{n=!0,r(i)},{...ute(e,t),detectError:n}}function Ite(e,t){if(!__INTLIFY_DROP_MESSAGE_COMPILER__&&tt(e)){fn(t.warnHtmlMessage)&&t.warnHtmlMessage;const r=(t.onCacheKey||Ete)(e),i=Ey[r];if(i)return i;const{ast:o,detectError:a}=Ate(e,{...t,location:!1,jit:!0}),s=bx(o);return a?s:Ey[r]=s}else{const n=e.cacheKey;if(n){const r=Ey[n];return r||(Ey[n]=bx(e))}else return bx(e)}}let ag=null;function Rte(e){ag=e}function Pte(e,t,n){ag&&ag.emit("i18n:init",{timestamp:Date.now(),i18n:e,version:t,meta:n})}const Ote=Dte("function:translate");function Dte(e){return t=>ag&&ag.emit(e,t)}const Zs={INVALID_ARGUMENT:Uee,INVALID_DATE_ARGUMENT:18,INVALID_ISO_DATE_ARGUMENT:19,NOT_SUPPORT_NON_STRING_MESSAGE:20,NOT_SUPPORT_LOCALE_PROMISE_VALUE:21,NOT_SUPPORT_LOCALE_ASYNC_FUNCTION:22,NOT_SUPPORT_LOCALE_TYPE:23},Mte=24;function qs(e){return Db(e,null,void 0)}function MI(e,t){return t.locale!=null?FM(t.locale):FM(e.locale)}let Sx;function FM(e){if(tt(e))return e;if(Hn(e)){if(e.resolvedOnce&&Sx!=null)return Sx;if(e.constructor.name==="Function"){const t=e();if(Fee(t))throw qs(Zs.NOT_SUPPORT_LOCALE_PROMISE_VALUE);return Sx=t}else throw qs(Zs.NOT_SUPPORT_LOCALE_ASYNC_FUNCTION)}else throw qs(Zs.NOT_SUPPORT_LOCALE_TYPE)}function Lte(e,t,n){return[...new Set([n,...ar(t)?t:pn(t)?Object.keys(t):tt(t)?[t]:[n]])]}function lB(e,t,n){const r=tt(n)?n:sg,i=e;i.__localeChainCache||(i.__localeChainCache=new Map);let o=i.__localeChainCache.get(r);if(!o){o=[];let a=[n];for(;ar(a);)a=$M(o,a,t);const s=ar(t)||!jt(t)?t:t.default?t.default:null;a=tt(s)?[s]:s,ar(a)&&$M(o,a,!1),i.__localeChainCache.set(r,o)}return o}function $M(e,t,n){let r=!0;for(let i=0;i{a===void 0?a=s:a+=s},d[1]=()=>{a!==void 0&&(t.push(a),a=void 0)},d[2]=()=>{d[0](),i++},d[3]=()=>{if(i>0)i--,r=4,d[0]();else{if(i=0,a===void 0||(a=Ute(a),a===!1))return!1;d[1]()}};function h(){const v=e[n+1];if(r===5&&v==="'"||r===6&&v==='"')return n++,s="\\"+v,d[0](),!0}for(;r!==null;)if(n++,o=e[n],!(o==="\\"&&h())){if(l=Vte(o),f=Vu[r],u=f[l]||f.l||8,u===8||(r=u[0],u[1]!==void 0&&(c=d[u[1]],c&&(s=o,c()===!1))))return;if(r===7)return t}}const BM=new Map;function Gte(e,t){return pn(e)?e[t]:null}function zte(e,t){if(!pn(e))return null;let n=BM.get(t);if(n||(n=Hte(t),n&&BM.set(t,n)),!n)return null;const r=n.length;let i=e,o=0;for(;o`${e.charAt(0).toLocaleUpperCase()}${e.substr(1)}`;function jte(){return{upper:(e,t)=>t==="text"&&tt(e)?e.toUpperCase():t==="vnode"&&pn(e)&&"__v_isVNode"in e?e.children.toUpperCase():e,lower:(e,t)=>t==="text"&&tt(e)?e.toLowerCase():t==="vnode"&&pn(e)&&"__v_isVNode"in e?e.children.toLowerCase():e,capitalize:(e,t)=>t==="text"&&tt(e)?UM(e):t==="vnode"&&pn(e)&&"__v_isVNode"in e?UM(e.children):e}}let uB;function Yte(e){uB=e}let cB;function Xte(e){cB=e}let fB;function Kte(e){fB=e}let dB=null;const Zte=e=>{dB=e},qte=()=>dB;let hB=null;const HM=e=>{hB=e},Jte=()=>hB;let GM=0;function Qte(e={}){const t=Hn(e.onWarn)?e.onWarn:Bee,n=tt(e.version)?e.version:Wte,r=tt(e.locale)||Hn(e.locale)?e.locale:sg,i=Hn(r)?sg:r,o=ar(e.fallbackLocale)||jt(e.fallbackLocale)||tt(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:i,a=jt(e.messages)?e.messages:xx(i),s=jt(e.datetimeFormats)?e.datetimeFormats:xx(i),l=jt(e.numberFormats)?e.numberFormats:xx(i),u=Er(Rn(),e.modifiers,jte()),c=e.pluralRules||Rn(),f=Hn(e.missing)?e.missing:null,d=fn(e.missingWarn)||eh(e.missingWarn)?e.missingWarn:!0,h=fn(e.fallbackWarn)||eh(e.fallbackWarn)?e.fallbackWarn:!0,v=!!e.fallbackFormat,m=!!e.unresolving,y=Hn(e.postTranslation)?e.postTranslation:null,_=jt(e.processor)?e.processor:null,b=fn(e.warnHtmlMessage)?e.warnHtmlMessage:!0,w=!!e.escapeParameter,S=Hn(e.messageCompiler)?e.messageCompiler:uB,C=Hn(e.messageResolver)?e.messageResolver:cB||Gte,T=Hn(e.localeFallbacker)?e.localeFallbacker:fB||Lte,A=pn(e.fallbackContext)?e.fallbackContext:void 0,P=e,I=pn(P.__datetimeFormatters)?P.__datetimeFormatters:new Map,R=pn(P.__numberFormatters)?P.__numberFormatters:new Map,O=pn(P.__meta)?P.__meta:{};GM++;const M={version:n,cid:GM,locale:r,fallbackLocale:o,messages:a,modifiers:u,pluralRules:c,missing:f,missingWarn:d,fallbackWarn:h,fallbackFormat:v,unresolving:m,postTranslation:y,processor:_,warnHtmlMessage:b,escapeParameter:w,messageCompiler:S,messageResolver:C,localeFallbacker:T,fallbackContext:A,onWarn:t,__meta:O};return M.datetimeFormats=s,M.numberFormats=l,M.__datetimeFormatters=I,M.__numberFormatters=R,__INTLIFY_PROD_DEVTOOLS__&&Pte(M,n,O),M}const xx=e=>({[e]:Rn()});function LI(e,t,n,r,i){const{missing:o,onWarn:a}=e;if(o!==null){const s=o(e,n,t,i);return tt(s)?s:t}else return t}function rp(e,t,n){const r=e;r.__localeChainCache=new Map,e.localeFallbacker(e,n,t)}function ene(e,t){return e===t?!1:e.split("-")[0]===t.split("-")[0]}function tne(e,t){const n=t.indexOf(e);if(n===-1)return!1;for(let r=n+1;r{pB.includes(l)?a[l]=n[l]:o[l]=n[l]}),tt(r)?o.locale=r:jt(r)&&(a=r),jt(i)&&(a=i),[o.key||"",s,o,a]}function WM(e,t,n){const r=e;for(const i in n){const o=`${t}__${i}`;r.__datetimeFormatters.has(o)&&r.__datetimeFormatters.delete(o)}}function jM(e,...t){const{numberFormats:n,unresolving:r,fallbackLocale:i,onWarn:o,localeFallbacker:a}=e,{__numberFormatters:s}=e,[l,u,c,f]=oE(...t),d=fn(c.missingWarn)?c.missingWarn:e.missingWarn;fn(c.fallbackWarn)?c.fallbackWarn:e.fallbackWarn;const h=!!c.part,v=MI(e,c),m=a(e,i,v);if(!tt(l)||l==="")return new Intl.NumberFormat(v,f).format(u);let y={},_,b=null;const w="number format";for(let T=0;T{vB.includes(l)?a[l]=n[l]:o[l]=n[l]}),tt(r)?o.locale=r:jt(r)&&(a=r),jt(i)&&(a=i),[o.key||"",s,o,a]}function YM(e,t,n){const r=e;for(const i in n){const o=`${t}__${i}`;r.__numberFormatters.has(o)&&r.__numberFormatters.delete(o)}}const nne=e=>e,rne=e=>"",ine="text",one=e=>e.length===0?"":PI(e),ane=$ee;function XM(e,t){return e=Math.abs(e),t===2?e?e>1?1:0:1:e?Math.min(e,2):0}function sne(e){const t=hr(e.pluralIndex)?e.pluralIndex:-1;return e.named&&(hr(e.named.count)||hr(e.named.n))?hr(e.named.count)?e.named.count:hr(e.named.n)?e.named.n:t:t}function lne(e,t){t.count||(t.count=e),t.n||(t.n=e)}function une(e={}){const t=e.locale,n=sne(e),r=pn(e.pluralRules)&&tt(t)&&Hn(e.pluralRules[t])?e.pluralRules[t]:XM,i=pn(e.pluralRules)&&tt(t)&&Hn(e.pluralRules[t])?XM:void 0,o=_=>_[r(n,_.length,i)],a=e.list||[],s=_=>a[_],l=e.named||Rn();hr(e.pluralIndex)&&lne(n,l);const u=_=>l[_];function c(_,b){const w=Hn(e.messages)?e.messages(_,!!b):pn(e.messages)?e.messages[_]:!1;return w||(e.parent?e.parent.message(_):rne)}const f=_=>e.modifiers?e.modifiers[_]:nne,d=jt(e.processor)&&Hn(e.processor.normalize)?e.processor.normalize:one,h=jt(e.processor)&&Hn(e.processor.interpolate)?e.processor.interpolate:ane,v=jt(e.processor)&&tt(e.processor.type)?e.processor.type:ine,y={list:s,named:u,plural:o,linked:(_,...b)=>{const[w,S]=b;let C="text",T="";b.length===1?pn(w)?(T=w.modifier||T,C=w.type||C):tt(w)&&(T=w||T):b.length===2&&(tt(w)&&(T=w||T),tt(S)&&(C=S||C));const A=c(_,!0)(y),P=C==="vnode"&&ar(A)&&T?A[0]:A;return T?f(T)(P,C):P},message:c,type:v,interpolate:h,normalize:d,values:Er(Rn(),a,l)};return y}const KM=()=>"",Xo=e=>Hn(e);function ZM(e,...t){const{fallbackFormat:n,postTranslation:r,unresolving:i,messageCompiler:o,fallbackLocale:a,messages:s}=e,[l,u]=aE(...t),c=fn(u.missingWarn)?u.missingWarn:e.missingWarn,f=fn(u.fallbackWarn)?u.fallbackWarn:e.fallbackWarn,d=fn(u.escapeParameter)?u.escapeParameter:e.escapeParameter,h=!!u.resolvedMessage,v=tt(u.default)||fn(u.default)?fn(u.default)?o?l:()=>l:u.default:n?o?l:()=>l:null,m=n||v!=null&&(tt(v)||Hn(v)),y=MI(e,u);d&&cne(u);let[_,b,w]=h?[l,y,s[y]||Rn()]:gB(e,l,y,a,f,c),S=_,C=l;if(!h&&!(tt(S)||nh(S)||Xo(S))&&m&&(S=v,C=S),!h&&(!(tt(S)||nh(S)||Xo(S))||!tt(b)))return i?Mb:l;let T=!1;const A=()=>{T=!0},P=Xo(S)?S:mB(e,l,b,S,C,A);if(T)return S;const I=hne(e,b,w,u),R=une(I),O=fne(e,P,R),M=r?r(O,l):O;if(__INTLIFY_PROD_DEVTOOLS__){const $={timestamp:Date.now(),key:tt(l)?l:Xo(S)?S.key:"",locale:b||(Xo(S)?S.locale:""),format:tt(S)?S:Xo(S)?S.source:"",message:M};$.meta=Er({},e.__meta,qte()||{}),Ote($)}return M}function cne(e){ar(e.list)?e.list=e.list.map(t=>tt(t)?DM(t):t):pn(e.named)&&Object.keys(e.named).forEach(t=>{tt(e.named[t])&&(e.named[t]=DM(e.named[t]))})}function gB(e,t,n,r,i,o){const{messages:a,onWarn:s,messageResolver:l,localeFallbacker:u}=e,c=u(e,r,n);let f=Rn(),d,h=null;const v="translate";for(let m=0;mr;return u.locale=n,u.key=t,u}const l=a(r,dne(e,n,i,r,s,o));return l.locale=n,l.key=t,l.source=r,l}function fne(e,t,n){return t(n)}function aE(...e){const[t,n,r]=e,i=Rn();if(!tt(t)&&!hr(t)&&!Xo(t)&&!nh(t))throw qs(Zs.INVALID_ARGUMENT);const o=hr(t)?String(t):(Xo(t),t);return hr(n)?i.plural=n:tt(n)?i.default=n:jt(n)&&!Ob(n)?i.named=n:ar(n)&&(i.list=n),hr(r)?i.plural=r:tt(r)?i.default=r:jt(r)&&Er(i,r),[o,i]}function dne(e,t,n,r,i,o){return{locale:t,key:n,warnHtmlMessage:i,onError:a=>{throw o&&o(a),a},onCacheKey:a=>Dee(t,n,a)}}function hne(e,t,n,r){const{modifiers:i,pluralRules:o,messageResolver:a,fallbackLocale:s,fallbackWarn:l,missingWarn:u,fallbackContext:c}=e,d={locale:t,modifiers:i,pluralRules:o,messages:(h,v)=>{let m=a(n,h);if(m==null&&(c||v)){const[,,y]=gB(c||e,h,t,s,l,u);m=a(y,h)}if(tt(m)||nh(m)){let y=!1;const b=mB(e,h,t,m,h,()=>{y=!0});return y?KM:b}else return Xo(m)?m:KM}};return e.processor&&(d.processor=e.processor),r.list&&(d.list=r.list),r.named&&(d.named=r.named),hr(r.plural)&&(d.pluralIndex=r.plural),d}cte();/*! + * vue-i18n v10.0.5 + * (c) 2024 kazuya kawaguchi + * Released under the MIT License. + */const pne="10.0.5";function vne(){typeof __VUE_I18N_FULL_INSTALL__!="boolean"&&(Mc().__VUE_I18N_FULL_INSTALL__=!0),typeof __VUE_I18N_LEGACY_API__!="boolean"&&(Mc().__VUE_I18N_LEGACY_API__=!0),typeof __INTLIFY_DROP_MESSAGE_COMPILER__!="boolean"&&(Mc().__INTLIFY_DROP_MESSAGE_COMPILER__=!1),typeof __INTLIFY_PROD_DEVTOOLS__!="boolean"&&(Mc().__INTLIFY_PROD_DEVTOOLS__=!1)}const Oi={UNEXPECTED_RETURN_TYPE:Mte,INVALID_ARGUMENT:25,MUST_BE_CALL_SETUP_TOP:26,NOT_INSTALLED:27,REQUIRED_VALUE:28,INVALID_VALUE:29,CANNOT_SETUP_VUE_DEVTOOLS_PLUGIN:30,NOT_INSTALLED_WITH_PROVIDE:31,UNEXPECTED_ERROR:32,NOT_COMPATIBLE_LEGACY_VUE_I18N:33,NOT_AVAILABLE_COMPOSITION_IN_LEGACY:34};function ro(e,...t){return Db(e,null,void 0)}const sE=$u("__translateVNode"),lE=$u("__datetimeParts"),uE=$u("__numberParts"),yB=$u("__setPluralRules"),_B=$u("__injectWithOption"),cE=$u("__dispose");function lg(e){if(!pn(e))return e;for(const t in e)if(Ra(e,t))if(!t.includes("."))pn(e[t])&&lg(e[t]);else{const n=t.split("."),r=n.length-1;let i=e,o=!1;for(let a=0;a{if("locale"in s&&"resource"in s){const{locale:l,resource:u}=s;l?(a[l]=a[l]||Rn(),j0(u,a[l])):j0(u,a)}else tt(s)&&j0(JSON.parse(s),a)}),i==null&&o)for(const s in a)Ra(a,s)&&lg(a[s]);return a}function bB(e){return e.type}function SB(e,t,n){let r=pn(t.messages)?t.messages:Rn();"__i18nGlobal"in n&&(r=NI(e.locale.value,{messages:r,__i18n:n.__i18nGlobal}));const i=Object.keys(r);i.length&&i.forEach(o=>{e.mergeLocaleMessage(o,r[o])});{if(pn(t.datetimeFormats)){const o=Object.keys(t.datetimeFormats);o.length&&o.forEach(a=>{e.mergeDateTimeFormat(a,t.datetimeFormats[a])})}if(pn(t.numberFormats)){const o=Object.keys(t.numberFormats);o.length&&o.forEach(a=>{e.mergeNumberFormat(a,t.numberFormats[a])})}}}function qM(e){return ye(tl,null,e,0)}const JM="__INTLIFY_META__",QM=()=>[],gne=()=>!1;let eL=0;function tL(e){return(t,n,r,i)=>e(n,r,br()||void 0,i)}const mne=()=>{const e=br();let t=null;return e&&(t=bB(e)[JM])?{[JM]:t}:null};function kI(e={}){const{__root:t,__injectWithOption:n}=e,r=t===void 0,i=e.flatJson,o=a1?Fe:Ef;let a=fn(e.inheritLocale)?e.inheritLocale:!0;const s=o(t&&a?t.locale.value:tt(e.locale)?e.locale:sg),l=o(t&&a?t.fallbackLocale.value:tt(e.fallbackLocale)||ar(e.fallbackLocale)||jt(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:s.value),u=o(NI(s.value,e)),c=o(jt(e.datetimeFormats)?e.datetimeFormats:{[s.value]:{}}),f=o(jt(e.numberFormats)?e.numberFormats:{[s.value]:{}});let d=t?t.missingWarn:fn(e.missingWarn)||eh(e.missingWarn)?e.missingWarn:!0,h=t?t.fallbackWarn:fn(e.fallbackWarn)||eh(e.fallbackWarn)?e.fallbackWarn:!0,v=t?t.fallbackRoot:fn(e.fallbackRoot)?e.fallbackRoot:!0,m=!!e.fallbackFormat,y=Hn(e.missing)?e.missing:null,_=Hn(e.missing)?tL(e.missing):null,b=Hn(e.postTranslation)?e.postTranslation:null,w=t?t.warnHtmlMessage:fn(e.warnHtmlMessage)?e.warnHtmlMessage:!0,S=!!e.escapeParameter;const C=t?t.modifiers:jt(e.modifiers)?e.modifiers:{};let T=e.pluralRules||t&&t.pluralRules,A;A=(()=>{r&&HM(null);const Z={version:pne,locale:s.value,fallbackLocale:l.value,messages:u.value,modifiers:C,pluralRules:T,missing:_===null?void 0:_,missingWarn:d,fallbackWarn:h,fallbackFormat:m,unresolving:!0,postTranslation:b===null?void 0:b,warnHtmlMessage:w,escapeParameter:S,messageResolver:e.messageResolver,messageCompiler:e.messageCompiler,__meta:{framework:"vue"}};Z.datetimeFormats=c.value,Z.numberFormats=f.value,Z.__datetimeFormatters=jt(A)?A.__datetimeFormatters:void 0,Z.__numberFormatters=jt(A)?A.__numberFormatters:void 0;const de=Qte(Z);return r&&HM(de),de})(),rp(A,s.value,l.value);function I(){return[s.value,l.value,u.value,c.value,f.value]}const R=Ve({get:()=>s.value,set:Z=>{s.value=Z,A.locale=s.value}}),O=Ve({get:()=>l.value,set:Z=>{l.value=Z,A.fallbackLocale=l.value,rp(A,s.value,Z)}}),M=Ve(()=>u.value),$=Ve(()=>c.value),F=Ve(()=>f.value);function z(){return Hn(b)?b:null}function B(Z){b=Z,A.postTranslation=Z}function Y(){return y}function j(Z){Z!==null&&(_=tL(Z)),y=Z,A.missing=_}const se=(Z,de,Be,Xe,ht,ee)=>{I();let ie;try{__INTLIFY_PROD_DEVTOOLS__,r||(A.fallbackContext=t?Jte():void 0),ie=Z(A)}finally{__INTLIFY_PROD_DEVTOOLS__,r||(A.fallbackContext=void 0)}if(Be!=="translate exists"&&hr(ie)&&ie===Mb||Be==="translate exists"&&!ie){const[he,Ce]=de();return t&&v?Xe(t):ht(he)}else{if(ee(ie))return ie;throw ro(Oi.UNEXPECTED_RETURN_TYPE)}};function ge(...Z){return se(de=>Reflect.apply(ZM,null,[de,...Z]),()=>aE(...Z),"translate",de=>Reflect.apply(de.t,de,[...Z]),de=>de,de=>tt(de))}function ve(...Z){const[de,Be,Xe]=Z;if(Xe&&!pn(Xe))throw ro(Oi.INVALID_ARGUMENT);return ge(de,Be,Er({resolvedMessage:!0},Xe||{}))}function De(...Z){return se(de=>Reflect.apply(zM,null,[de,...Z]),()=>iE(...Z),"datetime format",de=>Reflect.apply(de.d,de,[...Z]),()=>VM,de=>tt(de))}function Ne(...Z){return se(de=>Reflect.apply(jM,null,[de,...Z]),()=>oE(...Z),"number format",de=>Reflect.apply(de.n,de,[...Z]),()=>VM,de=>tt(de))}function ze(Z){return Z.map(de=>tt(de)||hr(de)||fn(de)?qM(String(de)):de)}const je={normalize:ze,interpolate:Z=>Z,type:"vnode"};function ce(...Z){return se(de=>{let Be;const Xe=de;try{Xe.processor=je,Be=Reflect.apply(ZM,null,[Xe,...Z])}finally{Xe.processor=null}return Be},()=>aE(...Z),"translate",de=>de[sE](...Z),de=>[qM(de)],de=>ar(de))}function Ee(...Z){return se(de=>Reflect.apply(jM,null,[de,...Z]),()=>oE(...Z),"number format",de=>de[uE](...Z),QM,de=>tt(de)||ar(de))}function Se(...Z){return se(de=>Reflect.apply(zM,null,[de,...Z]),()=>iE(...Z),"datetime format",de=>de[lE](...Z),QM,de=>tt(de)||ar(de))}function Te(Z){T=Z,A.pluralRules=T}function Oe(Z,de){return se(()=>{if(!Z)return!1;const Be=tt(de)?de:s.value,Xe=G(Be),ht=A.messageResolver(Xe,Z);return nh(ht)||Xo(ht)||tt(ht)},()=>[Z],"translate exists",Be=>Reflect.apply(Be.te,Be,[Z,de]),gne,Be=>fn(Be))}function $e(Z){let de=null;const Be=lB(A,l.value,s.value);for(let Xe=0;Xe{a&&(s.value=Z,A.locale=Z,rp(A,s.value,l.value))}),Yt(t.fallbackLocale,Z=>{a&&(l.value=Z,A.fallbackLocale=Z,rp(A,s.value,l.value))}));const Pe={id:eL,locale:R,fallbackLocale:O,get inheritLocale(){return a},set inheritLocale(Z){a=Z,Z&&t&&(s.value=t.locale.value,l.value=t.fallbackLocale.value,rp(A,s.value,l.value))},get availableLocales(){return Object.keys(u.value).sort()},messages:M,get modifiers(){return C},get pluralRules(){return T||{}},get isGlobal(){return r},get missingWarn(){return d},set missingWarn(Z){d=Z,A.missingWarn=d},get fallbackWarn(){return h},set fallbackWarn(Z){h=Z,A.fallbackWarn=h},get fallbackRoot(){return v},set fallbackRoot(Z){v=Z},get fallbackFormat(){return m},set fallbackFormat(Z){m=Z,A.fallbackFormat=m},get warnHtmlMessage(){return w},set warnHtmlMessage(Z){w=Z,A.warnHtmlMessage=Z},get escapeParameter(){return S},set escapeParameter(Z){S=Z,A.escapeParameter=Z},t:ge,getLocaleMessage:G,setLocaleMessage:le,mergeLocaleMessage:we,getPostTranslationHandler:z,setPostTranslationHandler:B,getMissingHandler:Y,setMissingHandler:j,[yB]:Te};return Pe.datetimeFormats=$,Pe.numberFormats=F,Pe.rt=ve,Pe.te=Oe,Pe.tm=H,Pe.d=De,Pe.n=Ne,Pe.getDateTimeFormat=pe,Pe.setDateTimeFormat=U,Pe.mergeDateTimeFormat=W,Pe.getNumberFormat=q,Pe.setNumberFormat=fe,Pe.mergeNumberFormat=_e,Pe[_B]=n,Pe[sE]=ce,Pe[lE]=Se,Pe[uE]=Ee,Pe}function yne(e){const t=tt(e.locale)?e.locale:sg,n=tt(e.fallbackLocale)||ar(e.fallbackLocale)||jt(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:t,r=Hn(e.missing)?e.missing:void 0,i=fn(e.silentTranslationWarn)||eh(e.silentTranslationWarn)?!e.silentTranslationWarn:!0,o=fn(e.silentFallbackWarn)||eh(e.silentFallbackWarn)?!e.silentFallbackWarn:!0,a=fn(e.fallbackRoot)?e.fallbackRoot:!0,s=!!e.formatFallbackMessages,l=jt(e.modifiers)?e.modifiers:{},u=e.pluralizationRules,c=Hn(e.postTranslation)?e.postTranslation:void 0,f=tt(e.warnHtmlInMessage)?e.warnHtmlInMessage!=="off":!0,d=!!e.escapeParameterHtml,h=fn(e.sync)?e.sync:!0;let v=e.messages;if(jt(e.sharedMessages)){const C=e.sharedMessages;v=Object.keys(C).reduce((A,P)=>{const I=A[P]||(A[P]={});return Er(I,C[P]),A},v||{})}const{__i18n:m,__root:y,__injectWithOption:_}=e,b=e.datetimeFormats,w=e.numberFormats,S=e.flatJson;return{locale:t,fallbackLocale:n,messages:v,flatJson:S,datetimeFormats:b,numberFormats:w,missing:r,missingWarn:i,fallbackWarn:o,fallbackRoot:a,fallbackFormat:s,modifiers:l,pluralRules:u,postTranslation:c,warnHtmlMessage:f,escapeParameter:d,messageResolver:e.messageResolver,inheritLocale:h,__i18n:m,__root:y,__injectWithOption:_}}function fE(e={}){const t=kI(yne(e)),{__extender:n}=e,r={id:t.id,get locale(){return t.locale.value},set locale(i){t.locale.value=i},get fallbackLocale(){return t.fallbackLocale.value},set fallbackLocale(i){t.fallbackLocale.value=i},get messages(){return t.messages.value},get datetimeFormats(){return t.datetimeFormats.value},get numberFormats(){return t.numberFormats.value},get availableLocales(){return t.availableLocales},get missing(){return t.getMissingHandler()},set missing(i){t.setMissingHandler(i)},get silentTranslationWarn(){return fn(t.missingWarn)?!t.missingWarn:t.missingWarn},set silentTranslationWarn(i){t.missingWarn=fn(i)?!i:i},get silentFallbackWarn(){return fn(t.fallbackWarn)?!t.fallbackWarn:t.fallbackWarn},set silentFallbackWarn(i){t.fallbackWarn=fn(i)?!i:i},get modifiers(){return t.modifiers},get formatFallbackMessages(){return t.fallbackFormat},set formatFallbackMessages(i){t.fallbackFormat=i},get postTranslation(){return t.getPostTranslationHandler()},set postTranslation(i){t.setPostTranslationHandler(i)},get sync(){return t.inheritLocale},set sync(i){t.inheritLocale=i},get warnHtmlInMessage(){return t.warnHtmlMessage?"warn":"off"},set warnHtmlInMessage(i){t.warnHtmlMessage=i!=="off"},get escapeParameterHtml(){return t.escapeParameter},set escapeParameterHtml(i){t.escapeParameter=i},get pluralizationRules(){return t.pluralRules||{}},__composer:t,t(...i){return Reflect.apply(t.t,t,[...i])},rt(...i){return Reflect.apply(t.rt,t,[...i])},tc(...i){const[o,a,s]=i,l={plural:1};let u=null,c=null;if(!tt(o))throw ro(Oi.INVALID_ARGUMENT);const f=o;return tt(a)?l.locale=a:hr(a)?l.plural=a:ar(a)?u=a:jt(a)&&(c=a),tt(s)?l.locale=s:ar(s)?u=s:jt(s)&&(c=s),Reflect.apply(t.t,t,[f,u||c||{},l])},te(i,o){return t.te(i,o)},tm(i){return t.tm(i)},getLocaleMessage(i){return t.getLocaleMessage(i)},setLocaleMessage(i,o){t.setLocaleMessage(i,o)},mergeLocaleMessage(i,o){t.mergeLocaleMessage(i,o)},d(...i){return Reflect.apply(t.d,t,[...i])},getDateTimeFormat(i){return t.getDateTimeFormat(i)},setDateTimeFormat(i,o){t.setDateTimeFormat(i,o)},mergeDateTimeFormat(i,o){t.mergeDateTimeFormat(i,o)},n(...i){return Reflect.apply(t.n,t,[...i])},getNumberFormat(i){return t.getNumberFormat(i)},setNumberFormat(i,o){t.setNumberFormat(i,o)},mergeNumberFormat(i,o){t.mergeNumberFormat(i,o)}};return r.__extender=n,r}function _ne(e,t,n){return{beforeCreate(){const r=br();if(!r)throw ro(Oi.UNEXPECTED_ERROR);const i=this.$options;if(i.i18n){const o=i.i18n;if(i.__i18n&&(o.__i18n=i.__i18n),o.__root=t,this===this.$root)this.$i18n=nL(e,o);else{o.__injectWithOption=!0,o.__extender=n.__vueI18nExtend,this.$i18n=fE(o);const a=this.$i18n;a.__extender&&(a.__disposer=a.__extender(this.$i18n))}}else if(i.__i18n)if(this===this.$root)this.$i18n=nL(e,i);else{this.$i18n=fE({__i18n:i.__i18n,__injectWithOption:!0,__extender:n.__vueI18nExtend,__root:t});const o=this.$i18n;o.__extender&&(o.__disposer=o.__extender(this.$i18n))}else this.$i18n=e;i.__i18nGlobal&&SB(t,i,i),this.$t=(...o)=>this.$i18n.t(...o),this.$rt=(...o)=>this.$i18n.rt(...o),this.$tc=(...o)=>this.$i18n.tc(...o),this.$te=(o,a)=>this.$i18n.te(o,a),this.$d=(...o)=>this.$i18n.d(...o),this.$n=(...o)=>this.$i18n.n(...o),this.$tm=o=>this.$i18n.tm(o),n.__setInstance(r,this.$i18n)},mounted(){},unmounted(){const r=br();if(!r)throw ro(Oi.UNEXPECTED_ERROR);const i=this.$i18n;delete this.$t,delete this.$rt,delete this.$tc,delete this.$te,delete this.$d,delete this.$n,delete this.$tm,i.__disposer&&(i.__disposer(),delete i.__disposer,delete i.__extender),n.__deleteInstance(r),delete this.$i18n}}}function nL(e,t){e.locale=t.locale||e.locale,e.fallbackLocale=t.fallbackLocale||e.fallbackLocale,e.missing=t.missing||e.missing,e.silentTranslationWarn=t.silentTranslationWarn||e.silentFallbackWarn,e.silentFallbackWarn=t.silentFallbackWarn||e.silentFallbackWarn,e.formatFallbackMessages=t.formatFallbackMessages||e.formatFallbackMessages,e.postTranslation=t.postTranslation||e.postTranslation,e.warnHtmlInMessage=t.warnHtmlInMessage||e.warnHtmlInMessage,e.escapeParameterHtml=t.escapeParameterHtml||e.escapeParameterHtml,e.sync=t.sync||e.sync,e.__composer[yB](t.pluralizationRules||e.pluralizationRules);const n=NI(e.locale,{messages:t.messages,__i18n:t.__i18n});return Object.keys(n).forEach(r=>e.mergeLocaleMessage(r,n[r])),t.datetimeFormats&&Object.keys(t.datetimeFormats).forEach(r=>e.mergeDateTimeFormat(r,t.datetimeFormats[r])),t.numberFormats&&Object.keys(t.numberFormats).forEach(r=>e.mergeNumberFormat(r,t.numberFormats[r])),e}const FI={tag:{type:[String,Object]},locale:{type:String},scope:{type:String,validator:e=>e==="parent"||e==="global",default:"parent"},i18n:{type:Object}};function bne({slots:e},t){return t.length===1&&t[0]==="default"?(e.default?e.default():[]).reduce((r,i)=>[...r,...i.type===Ze?i.children:[i]],[]):t.reduce((n,r)=>{const i=e[r];return i&&(n[r]=i()),n},Rn())}function wB(){return Ze}const Sne=it({name:"i18n-t",props:Er({keypath:{type:String,required:!0},plural:{type:[Number,String],validator:e=>hr(e)||!isNaN(e)}},FI),setup(e,t){const{slots:n,attrs:r}=t,i=e.i18n||cs({useScope:e.scope,__useComponent:!0});return()=>{const o=Object.keys(n).filter(f=>f!=="_"),a=Rn();e.locale&&(a.locale=e.locale),e.plural!==void 0&&(a.plural=tt(e.plural)?+e.plural:e.plural);const s=bne(t,o),l=i[sE](e.keypath,s,a),u=Er(Rn(),r),c=tt(e.tag)||pn(e.tag)?e.tag:wB();return Wi(c,u,l)}}}),rL=Sne;function wne(e){return ar(e)&&!tt(e[0])}function xB(e,t,n,r){const{slots:i,attrs:o}=t;return()=>{const a={part:!0};let s=Rn();e.locale&&(a.locale=e.locale),tt(e.format)?a.key=e.format:pn(e.format)&&(tt(e.format.key)&&(a.key=e.format.key),s=Object.keys(e.format).reduce((d,h)=>n.includes(h)?Er(Rn(),d,{[h]:e.format[h]}):d,Rn()));const l=r(e.value,a,s);let u=[a.key];ar(l)?u=l.map((d,h)=>{const v=i[d.type],m=v?v({[d.type]:d.value,index:h,parts:l}):[d.value];return wne(m)&&(m[0].key=`${d.type}-${h}`),m}):tt(l)&&(u=[l]);const c=Er(Rn(),o),f=tt(e.tag)||pn(e.tag)?e.tag:wB();return Wi(f,c,u)}}const xne=it({name:"i18n-n",props:Er({value:{type:Number,required:!0},format:{type:[String,Object]}},FI),setup(e,t){const n=e.i18n||cs({useScope:e.scope,__useComponent:!0});return xB(e,t,vB,(...r)=>n[uE](...r))}}),iL=xne,Tne=it({name:"i18n-d",props:Er({value:{type:[Number,Date],required:!0},format:{type:[String,Object]}},FI),setup(e,t){const n=e.i18n||cs({useScope:e.scope,__useComponent:!0});return xB(e,t,pB,(...r)=>n[lE](...r))}}),oL=Tne;function Cne(e,t){const n=e;if(e.mode==="composition")return n.__getInstance(t)||e.global;{const r=n.__getInstance(t);return r!=null?r.__composer:e.global.__composer}}function Ene(e){const t=a=>{const{instance:s,value:l}=a;if(!s||!s.$)throw ro(Oi.UNEXPECTED_ERROR);const u=Cne(e,s.$),c=aL(l);return[Reflect.apply(u.t,u,[...sL(c)]),u]};return{created:(a,s)=>{const[l,u]=t(s);a1&&e.global===u&&(a.__i18nWatcher=Yt(u.locale,()=>{s.instance&&s.instance.$forceUpdate()})),a.__composer=u,a.textContent=l},unmounted:a=>{a1&&a.__i18nWatcher&&(a.__i18nWatcher(),a.__i18nWatcher=void 0,delete a.__i18nWatcher),a.__composer&&(a.__composer=void 0,delete a.__composer)},beforeUpdate:(a,{value:s})=>{if(a.__composer){const l=a.__composer,u=aL(s);a.textContent=Reflect.apply(l.t,l,[...sL(u)])}},getSSRProps:a=>{const[s]=t(a);return{textContent:s}}}}function aL(e){if(tt(e))return{path:e};if(jt(e)){if(!("path"in e))throw ro(Oi.REQUIRED_VALUE,"path");return e}else throw ro(Oi.INVALID_VALUE)}function sL(e){const{path:t,locale:n,args:r,choice:i,plural:o}=e,a={},s=r||{};return tt(n)&&(a.locale=n),hr(i)&&(a.plural=i),hr(o)&&(a.plural=o),[t,s,a]}function Ane(e,t,...n){const r=jt(n[0])?n[0]:{};(fn(r.globalInstall)?r.globalInstall:!0)&&([rL.name,"I18nT"].forEach(o=>e.component(o,rL)),[iL.name,"I18nN"].forEach(o=>e.component(o,iL)),[oL.name,"I18nD"].forEach(o=>e.component(o,oL))),e.directive("t",Ene(t))}const Ine=$u("global-vue-i18n");function Rne(e={},t){const n=__VUE_I18N_LEGACY_API__&&fn(e.legacy)?e.legacy:__VUE_I18N_LEGACY_API__,r=fn(e.globalInjection)?e.globalInjection:!0,i=new Map,[o,a]=Pne(e,n),s=$u("");function l(d){return i.get(d)||null}function u(d,h){i.set(d,h)}function c(d){i.delete(d)}const f={get mode(){return __VUE_I18N_LEGACY_API__&&n?"legacy":"composition"},async install(d,...h){if(d.__VUE_I18N_SYMBOL__=s,d.provide(d.__VUE_I18N_SYMBOL__,f),jt(h[0])){const y=h[0];f.__composerExtend=y.__composerExtend,f.__vueI18nExtend=y.__vueI18nExtend}let v=null;!n&&r&&(v=$ne(d,f.global)),__VUE_I18N_FULL_INSTALL__&&Ane(d,f,...h),__VUE_I18N_LEGACY_API__&&n&&d.mixin(_ne(a,a.__composer,f));const m=d.unmount;d.unmount=()=>{v&&v(),f.dispose(),m()}},get global(){return a},dispose(){o.stop()},__instances:i,__getInstance:l,__setInstance:u,__deleteInstance:c};return f}function cs(e={}){const t=br();if(t==null)throw ro(Oi.MUST_BE_CALL_SETUP_TOP);if(!t.isCE&&t.appContext.app!=null&&!t.appContext.app.__VUE_I18N_SYMBOL__)throw ro(Oi.NOT_INSTALLED);const n=One(t),r=Mne(n),i=bB(t),o=Dne(e,i);if(o==="global")return SB(r,e,i),r;if(o==="parent"){let l=Lne(n,t,e.__useComponent);return l==null&&(l=r),l}const a=n;let s=a.__getInstance(t);if(s==null){const l=Er({},e);"__i18n"in i&&(l.__i18n=i.__i18n),r&&(l.__root=r),s=kI(l),a.__composerExtend&&(s[cE]=a.__composerExtend(s)),kne(a,t,s),a.__setInstance(t,s)}return s}function Pne(e,t,n){const r=Y5(),i=__VUE_I18N_LEGACY_API__&&t?r.run(()=>fE(e)):r.run(()=>kI(e));if(i==null)throw ro(Oi.UNEXPECTED_ERROR);return[r,i]}function One(e){const t=Ji(e.isCE?Ine:e.appContext.app.__VUE_I18N_SYMBOL__);if(!t)throw ro(e.isCE?Oi.NOT_INSTALLED_WITH_PROVIDE:Oi.UNEXPECTED_ERROR);return t}function Dne(e,t){return Ob(e)?"__i18n"in t?"local":"global":e.useScope?e.useScope:"local"}function Mne(e){return e.mode==="composition"?e.global:e.global.__composer}function Lne(e,t,n=!1){let r=null;const i=t.root;let o=Nne(t,n);for(;o!=null;){const a=e;if(e.mode==="composition")r=a.__getInstance(o);else if(__VUE_I18N_LEGACY_API__){const s=a.__getInstance(o);s!=null&&(r=s.__composer,n&&r&&!r[_B]&&(r=null))}if(r!=null||i===o)break;o=o.parent}return r}function Nne(e,t=!1){return e==null?null:t&&e.vnode.ctx||e.parent}function kne(e,t,n){lo(()=>{},t),Sh(()=>{const r=n;e.__deleteInstance(t);const i=r[cE];i&&(i(),delete r[cE])},t)}const Fne=["locale","fallbackLocale","availableLocales"],lL=["t","rt","d","n","tm","te"];function $ne(e,t){const n=Object.create(null);return Fne.forEach(i=>{const o=Object.getOwnPropertyDescriptor(t,i);if(!o)throw ro(Oi.UNEXPECTED_ERROR);const a=st(o.value)?{get(){return o.value.value},set(s){o.value.value=s}}:{get(){return o.get&&o.get()}};Object.defineProperty(n,i,a)}),e.config.globalProperties.$i18n=n,lL.forEach(i=>{const o=Object.getOwnPropertyDescriptor(t,i);if(!o||!o.value)throw ro(Oi.UNEXPECTED_ERROR);Object.defineProperty(e.config.globalProperties,`$${i}`,o)}),()=>{delete e.config.globalProperties.$i18n,lL.forEach(i=>{delete e.config.globalProperties[`$${i}`]})}}vne();Yte(Ite);Xte(zte);Kte(lB);if(__INTLIFY_PROD_DEVTOOLS__){const e=Mc();e.__INTLIFY__=!0,Rte(e.__INTLIFY_DEVTOOLS_GLOBAL_HOOK__)}const Tx=Fe(!1),uL=Fe(),Lb=()=>{const{t:e}=cs();return{showTip:(n,r={})=>{Tx.value=!0,uL.value=e(n,r),setTimeout(()=>{Tx.value=!1},1e4)},tipShowModel:Tx,tipContent:uL}},$I="https://ipv6.google.com/generate_204",Jo=0;var ts=(e=>(e.EN_US="en-US",e.ZH_CN="zh-CN",e.RU_RU="ru-RU",e))(ts||{}),nu=(e=>(e.MI_SANS="MiSans",e.SARASA_UI="SarasaUi",e.PING_FANG="PingFang",e.FIRA_SANS="FiraSans",e.SYSTEM_UI="SystemUI",e))(nu||{}),vt=(e=>(e.Details="details",e.Close="close",e.Type="type",e.Process="process",e.Host="host",e.Rule="rule",e.Chains="chains",e.DlSpeed="dlSpeed",e.UlSpeed="ulSpeed",e.Download="dl",e.Upload="ul",e.ConnectTime="connectTime",e.SourceIP="sourceIP",e.SourcePort="sourcePort",e.Destination="destination",e))(vt||{}),ru=(e=>(e.DEFAULT="defaultsort",e.NAME_ASC="nameasc",e.NAME_DESC="namedesc",e.LATENCY_ASC="latencyasc",e.LATENCY_DESC="latencydesc",e))(ru||{}),ug=(e=>(e.AUTO="auto",e.DOTS="dots",e.BAR="bar",e))(ug||{}),rh=(e=>(e.RULES="rules",e.PROVIDER="ruleProvider",e))(rh||{}),df=(e=>(e.PROXIES="proxies",e.PROVIDER="proxyProvider",e))(df||{}),zi=(e=>(e.HOST="host",e.CHAINS="chains",e.RULE="rule",e.TYPE="type",e.CONNECT_TIME="connectTime",e.DOWNLOAD="download",e.DOWNLOAD_SPEED="downloadSpeed",e.UPLOAD="upload",e.UPLOAD_SPEED="uploadSpeed",e.SOURCE_IP="sourceIP",e))(zi||{}),Lc=(e=>(e.ASC="asc",e.DESC="desc",e))(Lc||{}),zs=(e=>(e.ACTIVE="active",e.CLOSED="closed",e))(zs||{}),Nc=(e=>(e.Info="info",e.Error="error",e.Warning="warning",e.Debug="debug",e.Silent="silent",e))(Nc||{}),un=(e=>(e.overview="overview",e.proxies="proxies",e.connections="connections",e.logs="logs",e.rules="rules",e.settings="settings",e.setup="setup",e))(un||{});const TB={overview:fM,proxies:wQ,connections:H4,rules:EQ,logs:SQ,settings:_Q,setup:fM};var cg=(e=>(e.SMALL="small",e.LARGE="large",e))(cg||{}),Zg=(e=>(e.SMALL="small",e.LARGE="large",e))(Zg||{}),qg=(e=>(e.NORMAL="normal",e.REVERSE="reverse",e))(qg||{});function Nb(e){return nI()?(rI(e),!0):!1}const Cx=new WeakMap,Bne=(...e)=>{var t;const n=e[0],r=(t=br())==null?void 0:t.proxy;if(r==null&&!_I())throw new Error("injectLocal must be called in setup");return r&&Cx.has(r)&&n in Cx.get(r)?Cx.get(r)[n]:Ji(...e)};function Cu(e){return typeof e=="function"?e():N(e)}const CB=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Vne=e=>e!=null,Une=Object.prototype.toString,Hne=e=>Une.call(e)==="[object Object]",s1=()=>{};function Gne(e,t){function n(...r){return new Promise((i,o)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(i).catch(o)})}return n}const EB=e=>e();function zne(e=EB){const t=Fe(!0);function n(){t.value=!1}function r(){t.value=!0}const i=(...o)=>{t.value&&e(...o)};return{isActive:zg(t),pause:n,resume:r,eventFilter:i}}function cL(e){return e.endsWith("rem")?Number.parseFloat(e)*16:Number.parseFloat(e)}function AB(e){return br()}function Wne(...e){if(e.length!==1)return f$(...e);const t=e[0];return typeof t=="function"?zg(uI(()=>({get:t,set:s1}))):Fe(t)}function jne(e,t,n={}){const{eventFilter:r=EB,...i}=n;return Yt(e,Gne(r,t),i)}function Yne(e,t,n={}){const{eventFilter:r,...i}=n,{eventFilter:o,pause:a,resume:s,isActive:l}=zne(r);return{stop:jne(e,t,{...i,eventFilter:o}),pause:a,resume:s,isActive:l}}function Xne(e,t){AB()&&jg(e,t)}function BI(e,t=!0,n){AB()?lo(e,n):t?e():gs(e)}const cl=CB?window:void 0,IB=CB?window.document:void 0;function au(e){var t;const n=Cu(e);return(t=n==null?void 0:n.$el)!=null?t:n}function gu(...e){let t,n,r,i;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,r,i]=e,t=cl):[t,n,r,i]=e,!t)return s1;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);const o=[],a=()=>{o.forEach(c=>c()),o.length=0},s=(c,f,d,h)=>(c.addEventListener(f,d,h),()=>c.removeEventListener(f,d,h)),l=Yt(()=>[au(t),Cu(i)],([c,f])=>{if(a(),!c)return;const d=Hne(f)?{...f}:f;o.push(...n.flatMap(h=>r.map(v=>s(c,h,v,d))))},{immediate:!0,flush:"post"}),u=()=>{l(),a()};return Nb(u),u}function Kne(){const e=Fe(!1),t=br();return t&&lo(()=>{e.value=!0},t),e}function VI(e){const t=Kne();return Ve(()=>(t.value,!!e()))}function Zne(e,t,n={}){const{window:r=cl,...i}=n;let o;const a=VI(()=>r&&"MutationObserver"in r),s=()=>{o&&(o.disconnect(),o=void 0)},l=Ve(()=>{const d=Cu(e),h=(Array.isArray(d)?d:[d]).map(au).filter(Vne);return new Set(h)}),u=Yt(()=>l.value,d=>{s(),a.value&&d.size&&(o=new MutationObserver(t),d.forEach(h=>o.observe(h,i)))},{immediate:!0,flush:"post"}),c=()=>o==null?void 0:o.takeRecords(),f=()=>{u(),s()};return Nb(f),{isSupported:a,stop:f,takeRecords:c}}const qne=Symbol("vueuse-ssr-width");function Jne(){const e=_I()?Bne(qne,null):null;return typeof e=="number"?e:void 0}function Qne(e,t={}){const{window:n=cl,ssrWidth:r=Jne()}=t,i=VI(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function"),o=Fe(typeof r=="number");let a;const s=Fe(!1),l=f=>{s.value=f.matches},u=()=>{a&&("removeEventListener"in a?a.removeEventListener("change",l):a.removeListener(l))},c=wb(()=>{if(o.value){o.value=!i.value;const f=Cu(e).split(",");s.value=f.some(d=>{const h=d.includes("not all"),v=d.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/),m=d.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/);let y=!!(v||m);return v&&y&&(y=r>=cL(v[1])),m&&y&&(y=r<=cL(m[1])),h?!y:y});return}i.value&&(u(),a=n.matchMedia(Cu(e)),"addEventListener"in a?a.addEventListener("change",l):a.addListener(l),s.value=a.matches)});return Nb(()=>{c(),u(),a=void 0}),Ve(()=>s.value)}const Ay=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},Iy="__vueuse_ssr_handlers__",ere=tre();function tre(){return Iy in Ay||(Ay[Iy]=Ay[Iy]||{}),Ay[Iy]}function nre(e,t){return ere[e]||t}function rre(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const ire={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},fL="vueuse-storage";function Mt(e,t,n,r={}){var i;const{flush:o="pre",deep:a=!0,listenToStorageChanges:s=!0,writeDefaults:l=!0,mergeDefaults:u=!1,shallow:c,window:f=cl,eventFilter:d,onError:h=R=>{console.error(R)},initOnMounted:v}=r,m=(c?Ef:Fe)(typeof t=="function"?t():t);if(!n)try{n=nre("getDefaultStorage",()=>{var R;return(R=cl)==null?void 0:R.localStorage})()}catch(R){h(R)}if(!n)return m;const y=Cu(t),_=rre(y),b=(i=r.serializer)!=null?i:ire[_],{pause:w,resume:S}=Yne(m,()=>T(m.value),{flush:o,deep:a,eventFilter:d});f&&s&&BI(()=>{n instanceof Storage?gu(f,"storage",P):gu(f,fL,I),v&&P()}),v||P();function C(R,O){if(f){const M={key:e,oldValue:R,newValue:O,storageArea:n};f.dispatchEvent(n instanceof Storage?new StorageEvent("storage",M):new CustomEvent(fL,{detail:M}))}}function T(R){try{const O=n.getItem(e);if(R==null)C(O,null),n.removeItem(e);else{const M=b.write(R);O!==M&&(n.setItem(e,M),C(O,M))}}catch(O){h(O)}}function A(R){const O=R?R.newValue:n.getItem(e);if(O==null)return l&&y!=null&&n.setItem(e,b.write(y)),y;if(!R&&u){const M=b.read(O);return typeof u=="function"?u(M,y):_==="object"&&!Array.isArray(M)?{...y,...M}:M}else return typeof O!="string"?O:b.read(O)}function P(R){if(!(R&&R.storageArea!==n)){if(R&&R.key==null){m.value=y;return}if(!(R&&R.key!==e)){w();try{(R==null?void 0:R.newValue)!==b.write(m.value)&&(m.value=A(R))}catch(O){h(O)}finally{R?gs(S):S()}}}}function I(R){P(R.detail)}return m}function ore(e={}){const{document:t=IB}=e;if(!t)return Fe("visible");const n=Fe(t.visibilityState);return gu(t,"visibilitychange",()=>{n.value=t.visibilityState}),n}function are(e,t,n={}){const{window:r=cl,...i}=n;let o;const a=VI(()=>r&&"ResizeObserver"in r),s=()=>{o&&(o.disconnect(),o=void 0)},l=Ve(()=>{const f=Cu(e);return Array.isArray(f)?f.map(d=>au(d)):[au(f)]}),u=Yt(l,f=>{if(s(),a.value&&r){o=new ResizeObserver(t);for(const d of f)d&&o.observe(d,i)}},{immediate:!0,flush:"post"}),c=()=>{s(),u()};return Nb(c),{isSupported:a,stop:c}}function sre(e,t={width:0,height:0},n={}){const{window:r=cl,box:i="content-box"}=n,o=Ve(()=>{var f,d;return(d=(f=au(e))==null?void 0:f.namespaceURI)==null?void 0:d.includes("svg")}),a=Fe(t.width),s=Fe(t.height),{stop:l}=are(e,([f])=>{const d=i==="border-box"?f.borderBoxSize:i==="content-box"?f.contentBoxSize:f.devicePixelContentBoxSize;if(r&&o.value){const h=au(e);if(h){const v=h.getBoundingClientRect();a.value=v.width,s.value=v.height}}else if(d){const h=Array.isArray(d)?d:[d];a.value=h.reduce((v,{inlineSize:m})=>v+m,0),s.value=h.reduce((v,{blockSize:m})=>v+m,0)}else a.value=f.contentRect.width,s.value=f.contentRect.height},n);BI(()=>{const f=au(e);f&&(a.value="offsetWidth"in f?f.offsetWidth:t.width,s.value="offsetHeight"in f?f.offsetHeight:t.height)});const u=Yt(()=>au(e),f=>{a.value=f?t.width:0,s.value=f?t.height:0});function c(){l(),u()}return{width:a,height:s,stop:c}}function lre(e,t={}){const{threshold:n=50,onSwipe:r,onSwipeEnd:i,onSwipeStart:o,passive:a=!0,window:s=cl}=t,l=Na({x:0,y:0}),u=Na({x:0,y:0}),c=Ve(()=>l.x-u.x),f=Ve(()=>l.y-u.y),{max:d,abs:h}=Math,v=Ve(()=>d(h(c.value),h(f.value))>=n),m=Fe(!1),y=Ve(()=>v.value?h(c.value)>h(f.value)?c.value>0?"left":"right":f.value>0?"up":"down":"none"),_=I=>[I.touches[0].clientX,I.touches[0].clientY],b=(I,R)=>{l.x=I,l.y=R},w=(I,R)=>{u.x=I,u.y=R};let S;const C=ure(s==null?void 0:s.document);a?S=C?{passive:!0}:{capture:!1}:S=C?{passive:!1,capture:!0}:{capture:!0};const T=I=>{m.value&&(i==null||i(I,y.value)),m.value=!1},A=[gu(e,"touchstart",I=>{if(I.touches.length!==1)return;const[R,O]=_(I);b(R,O),w(R,O),o==null||o(I)},S),gu(e,"touchmove",I=>{if(I.touches.length!==1)return;const[R,O]=_(I);w(R,O),S.capture&&!S.passive&&Math.abs(c.value)>Math.abs(f.value)&&I.preventDefault(),!m.value&&v.value&&(m.value=!0),m.value&&(r==null||r(I))},S),gu(e,["touchend","touchcancel"],T,S)];return{isPassiveEventSupported:C,isSwiping:m,direction:y,coordsStart:l,coordsEnd:u,lengthX:c,lengthY:f,stop:()=>A.forEach(I=>I())}}function ure(e){if(!e)return!1;let t=!1;const n={get passive(){return t=!0,!1}};return e.addEventListener("x",s1,n),e.removeEventListener("x",s1),t}function cre(e=null,t={}){var n,r,i;const{document:o=IB,restoreOnUnmount:a=f=>f}=t,s=(n=o==null?void 0:o.title)!=null?n:"",l=Wne((r=e??(o==null?void 0:o.title))!=null?r:null),u=e&&typeof e=="function";function c(f){if(!("titleTemplate"in t))return f;const d=t.titleTemplate||"%s";return typeof d=="function"?d(f):Cu(d).replace(/%s/g,f)}return Yt(l,(f,d)=>{f!==d&&o&&(o.title=c(typeof f=="string"?f:""))},{immediate:!0}),t.observe&&!t.titleTemplate&&o&&!u&&Zne((i=o.head)==null?void 0:i.querySelector("title"),()=>{o&&o.title!==l.value&&(l.value=c(o.title))},{childList:!0}),Xne(()=>{if(a){const f=a(s,l.value||"");f!=null&&o&&(o.title=f)}}),l}function fre(e={}){const{window:t=cl,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:r=Number.POSITIVE_INFINITY,listenOrientation:i=!0,includeScrollbar:o=!0,type:a="inner"}=e,s=Fe(n),l=Fe(r),u=()=>{if(t)if(a==="outer")s.value=t.outerWidth,l.value=t.outerHeight;else if(a==="visual"&&t.visualViewport){const{width:c,height:f,scale:d}=t.visualViewport;s.value=Math.round(c*d),l.value=Math.round(f*d)}else o?(s.value=t.innerWidth,l.value=t.innerHeight):(s.value=t.document.documentElement.clientWidth,l.value=t.document.documentElement.clientHeight)};if(u(),BI(u),gu("resize",u,{passive:!0}),t&&a==="visual"&&t.visualViewport&&gu(t.visualViewport,"resize",u,{passive:!0}),i){const c=Qne("(orientation: portrait)");Yt(c,()=>u())}return{width:s,height:l}}const RB=fre(),dre=Ve(()=>RB.width.value>1280),hre=Ve(()=>RB.width.value<768),PB="background-image",l1="local-image",OB=e=>{const t=new Map,r=new Promise((f,d)=>{const h=indexedDB.open(e,1);h.onupgradeneeded=()=>{const v=h.result;v.objectStoreNames.contains(e)||v.createObjectStore(e,{keyPath:"key"})},h.onsuccess=()=>{const y=h.result.transaction(e,"readonly").objectStore(e).openCursor();y.onsuccess=_=>{const b=_.target.result;b?(t.set(b.key,b.value.value),b.continue()):f(h.result)},y.onerror=()=>d(y.error)},h.onerror=()=>d(h.error)}),i=async(f,d)=>{const h=await r;return new Promise((v,m)=>{const _=h.transaction(e,f).objectStore(e),b=d(_);b.onsuccess=()=>v(b.result),b.onerror=()=>m(b.error)})};return{put:async(f,d)=>(t.set(f,d),i("readwrite",h=>h.put({key:f,value:d}))),get:async f=>(await r,t.get(f)),del:async f=>(t.delete(f),i("readwrite",d=>d.delete(f))),getAllKeys:async()=>(await r,Array.from(t.keys())),isExists:async f=>(await r,t.has(f)),clear:async()=>(t.clear(),i("readwrite",f=>f.clear()))}},UI=OB("base64"),pre=e=>UI.put(PB,e),vre=()=>UI.get(PB),gre=()=>UI.clear(),Jg=OB("iconCache"),mre=Jg.put,yre=e=>Jg.get(e),_re=()=>Jg.clear(),bre=()=>Jg.getAllKeys(),Sre=e=>Jg.del(e),Nd=Mt("config/theme","default"),su=Mt("config/language",Object.values(ts).includes(navigator.language)?navigator.language:ts.EN_US),dL=Mt("config/is-sidebar-collapsed",!0),mu=Ve({get:()=>hre.value?!0:dL.value,set:e=>{dL.value=e}}),fv=Mt("config/font",nu.MI_SANS),Aa=Mt("config/custom-background-image",""),Y0=Mt("config/dashboard-transparent",90),X0=Mt("config/auto-upgrade",!1),K0=Mt("config/auto-upgrade-core",!1),yd=Mt("config/split-overview-page",!1),ip=Mt("config/show-ip-and-connection-info",!0),Z0=Mt("config/auto-ip-check",!0),q0=Mt("config/auto-connection-check",!0),J0=Mt("config/show-global-proxy",!0),Ex=Mt("config/collapse-group-map",{}),dv=Mt("config/two-columns",!0),hv=Mt("config/speedtest-url","http://www.gstatic.com/generate_204"),pv=Mt("config/speedtest-timeout",5e3),Q0=Mt("config/proxy-sort-type",ru.DEFAULT),e_=Mt("config/automatic-disconnection",!0),vv=Mt("config/truncate-proxy-name",!0),gv=Mt("config/proxy-preview-type",ug.AUTO),t_=Mt("config/hide-unavailable-proxies",!1),lu=Mt("config/low-latency",400),Xs=Mt("config/medium-latency",800),Zc=Mt("config/ipv6-test",!1),mv=Mt("config/proxy-card-size",Zg.LARGE),n_=Mt("config/show-hidden-group",!1),yv=Mt("config/icon-size",16),r_=Mt("config/icon-margin-right",4),kc=Mt("config/use-connecticon-card",window.innerWidth<640),_v=Mt("config/proxy-chain-direction",qg.NORMAL),i_=Mt("config/connecticon-table-size",cg.SMALL),Cd=Mt("config/connection-table-columns",[vt.Close,vt.Host,vt.Type,vt.Rule,vt.Chains,vt.DlSpeed,vt.UlSpeed,vt.Download,vt.Upload,vt.ConnectTime]),Fs=Mt("config/connection-card-lines",[[vt.Host,vt.DlSpeed],[vt.Chains,vt.ConnectTime,vt.Details,vt.Close]]),So=Mt("config/source-ip-label-map",{}),o_=Mt("config/log-retention-limit",1e3),wre={key:0,class:"toast-sm toast toast-start toast-top z-50 max-w-64 whitespace-normal text-sm"},xre={class:"breaks-all alert alert-warning flex w-72 whitespace-normal p-2"},Tre={href:"https://github.com/Zephyruso/zashboard/blob/main/README.md",target:"_blank",class:"flex-1"},Cre=it({__name:"App",setup(e){const t=Fe(),{tipContent:n,tipShowModel:r}=Lb(),i={[nu.MI_SANS]:"font-MiSans",[nu.SARASA_UI]:"font-SarasaUI",[nu.PING_FANG]:"font-PingFang",[nu.FIRA_SANS]:"font-FiraSans",[nu.SYSTEM_UI]:"font-SystemUI"},o=Ve(()=>i[fv.value]),a=La().format("YYYY-MM-DD"),s=Fe(""),l=async()=>{s.value=await vre()||""};Yt(()=>Aa.value,()=>{Aa.value.includes(l1)&&l()},{immediate:!0});const u=Ve(()=>Aa.value.includes(l1)?s.value:Aa.value+`?v=${a}`),c=()=>{const f=getComputedStyle(t.value).getPropertyValue("background-color").trim(),d=document.querySelector('meta[name="theme-color"]');d&&d.setAttribute("content",f)};return lo(()=>{Yt(Nd,()=>{document.body.setAttribute("data-theme",Nd.value),c()},{immediate:!0})}),(f,d)=>(K(),ae("div",{ref_key:"app",ref:t,class:rt(`flex h-dvh w-screen overflow-x-hidden bg-base-100 ${o.value} custom-background-${N(Y0)} ${N(Aa)&&"custom-background bg-cover"}`),style:Gr(`background-image: url('${u.value}');`)},[ye(N(II)),N(r)?(K(),ae("div",wre,[L("div",xre,[L("a",Tre,re(f.$t(N(n))),1),L("button",{class:"btn btn-circle btn-ghost btn-sm",onClick:d[0]||(d[0]=h=>r.value=!1)},[ye(N(AQ),{class:"w-4 cursor-pointer"})])])])):mt("",!0)],6))}}),Ere={setup:"Setup",overview:"Overview",proxies:"Proxies",rules:"Rules",connections:"Connections",logs:"Logs",protocol:"Protocol",host:"Host",port:"Port",password:"Password",submit:"Submit",cancel:"Cancel",download:"Download",upload:"Upload",downloadSpeed:"Download Speed",uploadSpeed:"Upload Speed",memoryUsage:"Memory",version:"Version",quickFilter:"Quick Filter",noContent:"No Content",flushFakeIP:"Flush Fake IP",chains:"Chains",sortBy:"Sort By",rule:"Rule",sourceIP:"Source IP",activeConnections:"Active Conns",closedConnections:"Closed Conns",logLevel:"Log Level",twoColumnProxyGroup:"Two Column Proxy Group",type:"Type",process:"Process",connectTime:"Time",sourcePort:"Source Port",destination:"Destination",inboundUser:"Inbound User",dl:"DL",ul:"UL",dlSpeed:"DL Speed",ulSpeed:"UL Speed",settings:"Settings",speedtestUrl:"Speedtest URL",speedtestTimeout:"Speedtest Timeout",connectionStyle:"Connection Style",card:"Card",table:"Table",customTableColumns:"Custom Table Columns",customCardLines:"Custom Card Lines",close:"Close",details:"Details",showGlobalProxy:"Show Global Proxy Node",theme:"Theme",proxyProvider:"Proxy Provider",ruleProvider:"Rule Provider",expire:"Expire",noExpire:"Null",updated:"Updated",upgradeUI:"Upgrade Dashboard",updateAllProviders:"Upgrade All Providers",reloadConfigs:"Reload Configs",mode:"Mode",proxySortType:"Proxy Sort Type",defaultsort:"By Configs",nameasc:"Name Asc",namedesc:"Name Desc",latencydesc:"Latency Desc",latencyasc:"Latency Asc",language:"Language",automaticDisconnection:"Automatic Disconnection",backend:"Backend",tunMode:"Tun Mode",upgradeCore:"Upgrade Core",truncateProxyName:"Truncate Proxy Name",sourceIPLabels:"Source IP Labels",proxyPreviewType:"Proxy Preview Type",auto:"Auto",dots:"Dots",bar:"Bar",exportSettings:"Export Settings",importSettings:"Import Settings",clearIconCache:"Clear Icon Cache",hideUnavailable:"Hide Unavail",protocolTips:"You are trying to connect a http backend but the zashboard is served by https. This may cause connection error. Please allow the insecure content in your browser settings. The settings is on the left of the browser address bar.",global:"Global",direct:"Direct",quickFilterTip:"Quick filtering allows one-click exclusion of connections matching proxy chains, host, or destination IPs using regular expressions.",lowLatencyDesc:"Yellow threshold",mediumLatencyDesc:"Red threshold",fonts:"Fonts",unauthorizedTip:"Unauthorized, please login again.",restartCore:"Restart Core",autoUpgrade:"Auto Upgrade",secondaryPath:"Secondary Path",secondaryPathTip:'If present, start with a "/", otherwise leave it empty.',logRetentionLimit:"Log Retention Limit",DNSQuery:"DNS Query",currentBackendUnavailable:"Current backend is unavailable. Try to switch to another backend?",confirm:"Confirm",backendSwitchTo:"Automatic Switch to {backend}",ipv6Test:"IPv6 Test",socksPort:"Socks Port",httpPort:"HTTP Port",mixedPort:"Mixed Port",redirPort:"Redir Port",tproxyPort:"TProxy Port",tableSize:"Table Size",proxyCardSize:"Proxy Card Size",small:"Small",normal:"Normal",large:"Large",autoIPCheckWhenStart:"Auto Check IP When Start",autoConnectionCheckWhenStart:"Auto Check Connection When Start",chinaIP:"China IP",globalIP:"Global IP",networkInfo:"Network Info",autoSwitch:"Auto Switch",customBackgroundURL:"Custom Background URL",splitOverviewPage:"Split Overview Page",showHiddenGroup:"Show Hidden Group",showIPAndConnectionInfo:"Show IP and Connection Info",transparent:"Transparent",iconSize:"Icon Size",iconMarginRight:"Icon Margin Right",allowLan:"Allow Lan",proxyChainDirection:"Proxy Chain Direction",reverse:"Reverse"},Are={setup:"Настройка",overview:"Обзор",proxies:"Прокси",rules:"Правила",connections:"Подключения",logs:"Журнал",protocol:"Протокол",host:"Хост",port:"Порт",password:"Пароль",submit:"Отправить",cancel:"Отмена",download:"Загружено",upload:"Отправлено",downloadSpeed:"Скорость загрузки",uploadSpeed:"Скорость отдачи",memoryUsage:"Память",version:"Версия",quickFilter:"Быстрый фильтр",noContent:"Нет содержимого",flushFakeIP:"Очистить Fake IP",chains:"Цепочки",sortBy:"Сортировать по",rule:"Правило",sourceIP:"Исходный IP",activeConnections:"Активные",closedConnections:"Закрытые",logLevel:"Уровень журнала",twoColumnProxyGroup:"Группа прокси в два столбца",type:"Тип",process:"Процесс",connectTime:"Время",sourcePort:"Исходный порт",destination:"Назначение",inboundUser:"Входящий пользователь",dl:"Загр",ul:"Отдч",dlSpeed:"Загрузка",ulSpeed:"Отдача",settings:"Настройки",speedtestUrl:"URL теста скорости",speedtestTimeout:"Таймаут теста скорости",connectionStyle:"Стиль подключения",card:"Карточка",table:"Таблица",customTableColumns:"Пользовательские столбцы таблицы",customCardLines:"Пользовательские строчки карточки",close:"Закрыть",details:"Детали",showGlobalProxy:"Показать глобальный прокси-узел",theme:"Тема",proxyProvider:"Провайдер прокси",ruleProvider:"Провайдер правил",expire:"Истекает",noExpire:"Нет",updated:"Обновлено",upgradeUI:"Обновить панель",updateAllProviders:"Обновить все провайдеры",reloadConfigs:"Перезагрузить конфигурации",mode:"Режим",proxySortType:"Тип сортировки прокси",defaultsort:"По конфигурациям",nameasc:"Имя по возрастанию",namedesc:"Имя по убыванию",latencydesc:"Задержка по убыванию",latencyasc:"Задержка по возрастанию",language:"Язык",automaticDisconnection:"Автоматическое отключение",backend:"Бэкенд",tunMode:"Режим Tun",upgradeCore:"Обновить ядро",truncateProxyName:"Усечение имени прокси",sourceIPLabels:"Метки исходного IP",proxyPreviewType:"Тип предварительного просмотра прокси",auto:"Авто",dots:"Точки",bar:"Полоса",exportSettings:"Экспорт настроек",importSettings:"Импорт настроек",clearIconCache:"Очистить кэш иконок",hideUnavailable:"Скрыть недоступные",protocolTips:"Вы пытаетесь подключиться к http-бэкенду, но панель управления обслуживается через https. Это может вызвать ошибку подключения. Пожалуйста, разрешите небезопасный контент в настройках браузера. Настройки находятся слева от адресной строки.",global:"Глобальный",direct:"Прямой",quickFilterTip:"Быстрая фильтрация позволяет одним щелчком исключать подключения, соответствующие цепочкам прокси, хосту или IP-адресам назначения с использованием регулярных выражений.",lowLatencyDesc:"Желтый порог",mediumLatencyDesc:"Красный порог",fonts:"Шрифты",unauthorizedTip:"Не авторизован, пожалуйста, войдите снова.",restartCore:"Перезапустить ядро",autoUpgrade:"Автоматическое обновление",secondaryPath:"Дополнительный путь",secondaryPathTip:'Если присутствует, начните с "/", в противном случае оставьте пустым.',logRetentionLimit:"Лимит хранения журнала",DNSQuery:"DNS-запрос",currentBackendUnavailable:"Текущий бэкенд недоступен. Попробуйте переключиться на другой бэкенд?",confirm:"Подтвердить",backendSwitchTo:"Автоматическое переключение на {backend}",ipv6Test:"IPv6-тест",socksPort:"Порт Socks",httpPort:"Порт HTTP",mixedPort:"Порт Mixed",redirPort:"Порт Redir",tproxyPort:"Порт TProxy",tableSize:"Размер таблицы",proxyCardSize:"Размер карточки прокси",small:"Маленький",normal:"Нормальный",large:"Большой",autoIPCheckWhenStart:"Автоматическая проверка IP при запуске",autoConnectionCheckWhenStart:"Автоматическая проверка соединений при запуске",chinaIP:"IP для Китая",globalIP:"Мировой IP",networkInfo:"Информация о сети",autoSwitch:"Автоматическое",customBackgroundURL:"Пользовательский URL фона",splitOverviewPage:"Разделить страницу с обзором",showHiddenGroup:"Показать скрытые группы",showIPAndConnectionInfo:"Показать IP и информацию о соединениях",transparent:"Прозрачность",iconSize:"Размер иконки",iconMarginRight:"Отступ правой иконки",allowLan:"Разрешить локальную сеть",proxyChainDirection:"Направление цепочки прокси",reverse:"Обратное"},Ire={setup:"配置",overview:"概览",proxies:"代理",rules:"规则",connections:"连接",logs:"日志",protocol:"协议",host:"主机",port:"端口",password:"密码",submit:"提交",cancel:"取消",download:"下载",upload:"上传",downloadSpeed:"下载速度",uploadSpeed:"上传速度",memoryUsage:"内存使用",version:"版本",quickFilter:"快速过滤",noContent:"无内容",flushFakeIP:"清空Fake IP",chains:"代理链",sortBy:"排序方式",rule:"规则",sourceIP:"源IP",activeConnections:"活跃连接",closedConnections:"已关闭连接",logLevel:"日志等级",twoColumnProxyGroup:"双列显示代理组",type:"类型",process:"进程",connectTime:"连接时间",sourcePort:"源端口",destination:"目标",inboundUser:"入站用户",dl:"下载",ul:"上传",dlSpeed:"下载速度",ulSpeed:"上传速度",settings:"设置",speedtestUrl:"测速地址",speedtestTimeout:"测速超时",connectionStyle:"连接样式",card:"卡片",table:"表格",customTableColumns:"自定义表格列",customCardLines:"自定义卡片行",close:"关闭",details:"详情",showGlobalProxy:"显示全局代理节点",theme:"主题",proxyProvider:"代理提供商",ruleProvider:"规则提供商",expire:"到期时间",noExpire:"不限时",updated:"更新于",upgradeUI:"更新面板",updateAllProviders:"更新所有提供商",reloadConfigs:"重载配置",mode:"模式",proxySortType:"代理排序方式",defaultsort:"按配置排序",nameasc:"按名称升序",namedesc:"按名称降序",latencydesc:"按延迟降序",latencyasc:"按延迟升序",language:"语言",automaticDisconnection:"自动断开连接",backend:"后端",upgradeCore:"更新核心",tunMode:"Tun 模式",truncateProxyName:"截断代理名称",sourceIPLabels:"源IP标签",proxyPreviewType:"代理预览类型",auto:"自动",dots:"点",bar:"条",exportSettings:"导出设置",importSettings:"导入设置",clearIconCache:"清空图标缓存",hideUnavailable:"隐藏不可用",protocolTips:"您正在尝试连接一个http后端但zashboard是通过https提供的,这可能会导致连接错误,请在浏览器设置中允许不安全的内容,设置在浏览器地址栏左侧。",global:"全局",direct:"直连",quickFilterTip:"快速过滤使用正则表达式进行匹配,支持一键排除符合代理链、主机或目标 IP 的连接。",lowLatencyDesc:"黄色的阈值",mediumLatencyDesc:"红色的阈值",fonts:"字体",unauthorizedTip:"未授权,请重新登录",restartCore:"重启核心",autoUpgrade:"自动更新",secondaryPath:"二级路径",secondaryPathTip:"如果有的话以/开头,没有则留空不填",logRetentionLimit:"日志保留条数",DNSQuery:"DNS 查询",currentBackendUnavailable:"当前后端不可用,尝试切换到其他后端?",confirm:"确定",backendSwitchTo:"自动切换到{backend}",ipv6Test:"IPv6 测试",socksPort:"Socks 端口",httpPort:"HTTP 端口",mixedPort:"Mixed 端口",redirPort:"Redir 端口",tproxyPort:"TProxy 端口",tableSize:"表格尺寸",proxyCardSize:"节点卡片尺寸",small:"小",normal:"正常",large:"大",autoIPCheckWhenStart:"自动检查 IP",autoConnectionCheckWhenStart:"自动检查连接",chinaIP:"中国大陆 IP",globalIP:"全球 IP",networkInfo:"网络信息",autoSwitch:"自动切换",customBackgroundURL:"自定义背景 URL",splitOverviewPage:"分离概览页",showHiddenGroup:"显示隐藏分组",showIPAndConnectionInfo:"显示 IP 和连接信息",transparent:"透明度",iconSize:"图标尺寸",iconMarginRight:"图标间距",allowLan:"允许局域网",proxyChainDirection:"代理链方向",reverse:"反向"},HI=Rne({locale:su.value,messages:{[ts.EN_US]:Ere,[ts.ZH_CN]:Ire,[ts.RU_RU]:Are}});var Vp={exports:{}};/** + * @license + * Lodash + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */var Rre=Vp.exports,hL;function Pre(){return hL||(hL=1,function(e,t){(function(){var n,r="4.17.21",i=200,o="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",a="Expected a function",s="Invalid `variable` option passed into `_.template`",l="__lodash_hash_undefined__",u=500,c="__lodash_placeholder__",f=1,d=2,h=4,v=1,m=2,y=1,_=2,b=4,w=8,S=16,C=32,T=64,A=128,P=256,I=512,R=30,O="...",M=800,$=16,F=1,z=2,B=3,Y=1/0,j=9007199254740991,se=17976931348623157e292,ge=NaN,ve=4294967295,De=ve-1,Ne=ve>>>1,ze=[["ary",A],["bind",y],["bindKey",_],["curry",w],["curryRight",S],["flip",I],["partial",C],["partialRight",T],["rearg",P]],Me="[object Arguments]",je="[object Array]",ce="[object AsyncFunction]",Ee="[object Boolean]",Se="[object Date]",Te="[object DOMException]",Oe="[object Error]",$e="[object Function]",H="[object GeneratorFunction]",G="[object Map]",le="[object Number]",we="[object Null]",pe="[object Object]",U="[object Promise]",W="[object Proxy]",q="[object RegExp]",fe="[object Set]",_e="[object String]",Pe="[object Symbol]",Z="[object Undefined]",de="[object WeakMap]",Be="[object WeakSet]",Xe="[object ArrayBuffer]",ht="[object DataView]",ee="[object Float32Array]",ie="[object Float64Array]",he="[object Int8Array]",Ce="[object Int16Array]",He="[object Int32Array]",ne="[object Uint8Array]",Ae="[object Uint8ClampedArray]",ke="[object Uint16Array]",Qe="[object Uint32Array]",Ge=/\b__p \+= '';/g,We=/\b(__p \+=) '' \+/g,et=/(__e\(.*?\)|\b__t\)) \+\n'';/g,It=/&(?:amp|lt|gt|quot|#39);/g,Pt=/[&<>"']/g,Nn=RegExp(It.source),fa=RegExp(Pt.source),Pn=/<%-([\s\S]+?)%>/g,pr=/<%([\s\S]+?)%>/g,Rf=/<%=([\s\S]+?)%>/g,Sl=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Va=/^\w*$/,bm=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Pf=/[\\^$.*+?()[\]{}|]/g,jS=RegExp(Pf.source),Mi=/^\s+/,Of=/\s/,Sm=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,wm=/\{\n\/\* \[wrapped with (.+)\] \*/,Lh=/,? & /,xm=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,da=/[()=,{}\[\]\/\s]/,Tm=/\\(\\)?/g,Cm=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Nh=/\w*$/,Em=/^[-+]0x[0-9a-f]+$/i,YS=/^0b[01]+$/i,pt=/^\[object .+?Constructor\]$/,te=/^0o[0-7]+$/i,Ue=/^(?:0|[1-9]\d*)$/,at=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Sn=/($^)/,Rr=/['\n\r\u2028\u2029\\]/g,Qn="\\ud800-\\udfff",Wr="\\u0300-\\u036f",Oo="\\ufe20-\\ufe2f",Gu="\\u20d0-\\u20ff",Pr=Wr+Oo+Gu,kh="\\u2700-\\u27bf",Fh="a-z\\xdf-\\xf6\\xf8-\\xff",az="\\xac\\xb1\\xd7\\xf7",sz="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",lz="\\u2000-\\u206f",uz=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",QP="A-Z\\xc0-\\xd6\\xd8-\\xde",eO="\\ufe0e\\ufe0f",tO=az+sz+lz+uz,XS="['’]",cz="["+Qn+"]",nO="["+tO+"]",Am="["+Pr+"]",rO="\\d+",fz="["+kh+"]",iO="["+Fh+"]",oO="[^"+Qn+tO+rO+kh+Fh+QP+"]",KS="\\ud83c[\\udffb-\\udfff]",dz="(?:"+Am+"|"+KS+")",aO="[^"+Qn+"]",ZS="(?:\\ud83c[\\udde6-\\uddff]){2}",qS="[\\ud800-\\udbff][\\udc00-\\udfff]",Df="["+QP+"]",sO="\\u200d",lO="(?:"+iO+"|"+oO+")",hz="(?:"+Df+"|"+oO+")",uO="(?:"+XS+"(?:d|ll|m|re|s|t|ve))?",cO="(?:"+XS+"(?:D|LL|M|RE|S|T|VE))?",fO=dz+"?",dO="["+eO+"]?",pz="(?:"+sO+"(?:"+[aO,ZS,qS].join("|")+")"+dO+fO+")*",vz="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",gz="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",hO=dO+fO+pz,mz="(?:"+[fz,ZS,qS].join("|")+")"+hO,yz="(?:"+[aO+Am+"?",Am,ZS,qS,cz].join("|")+")",_z=RegExp(XS,"g"),bz=RegExp(Am,"g"),JS=RegExp(KS+"(?="+KS+")|"+yz+hO,"g"),Sz=RegExp([Df+"?"+iO+"+"+uO+"(?="+[nO,Df,"$"].join("|")+")",hz+"+"+cO+"(?="+[nO,Df+lO,"$"].join("|")+")",Df+"?"+lO+"+"+uO,Df+"+"+cO,gz,vz,rO,mz].join("|"),"g"),wz=RegExp("["+sO+Qn+Pr+eO+"]"),xz=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Tz=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Cz=-1,Vn={};Vn[ee]=Vn[ie]=Vn[he]=Vn[Ce]=Vn[He]=Vn[ne]=Vn[Ae]=Vn[ke]=Vn[Qe]=!0,Vn[Me]=Vn[je]=Vn[Xe]=Vn[Ee]=Vn[ht]=Vn[Se]=Vn[Oe]=Vn[$e]=Vn[G]=Vn[le]=Vn[pe]=Vn[q]=Vn[fe]=Vn[_e]=Vn[de]=!1;var kn={};kn[Me]=kn[je]=kn[Xe]=kn[ht]=kn[Ee]=kn[Se]=kn[ee]=kn[ie]=kn[he]=kn[Ce]=kn[He]=kn[G]=kn[le]=kn[pe]=kn[q]=kn[fe]=kn[_e]=kn[Pe]=kn[ne]=kn[Ae]=kn[ke]=kn[Qe]=!0,kn[Oe]=kn[$e]=kn[de]=!1;var Ez={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"},Az={"&":"&","<":"<",">":">",'"':""","'":"'"},Iz={"&":"&","<":"<",">":">",""":'"',"'":"'"},Rz={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Pz=parseFloat,Oz=parseInt,pO=typeof hy=="object"&&hy&&hy.Object===Object&&hy,Dz=typeof self=="object"&&self&&self.Object===Object&&self,kr=pO||Dz||Function("return this")(),QS=t&&!t.nodeType&&t,zu=QS&&!0&&e&&!e.nodeType&&e,vO=zu&&zu.exports===QS,ew=vO&&pO.process,Do=function(){try{var oe=zu&&zu.require&&zu.require("util").types;return oe||ew&&ew.binding&&ew.binding("util")}catch{}}(),gO=Do&&Do.isArrayBuffer,mO=Do&&Do.isDate,yO=Do&&Do.isMap,_O=Do&&Do.isRegExp,bO=Do&&Do.isSet,SO=Do&&Do.isTypedArray;function uo(oe,xe,me){switch(me.length){case 0:return oe.call(xe);case 1:return oe.call(xe,me[0]);case 2:return oe.call(xe,me[0],me[1]);case 3:return oe.call(xe,me[0],me[1],me[2])}return oe.apply(xe,me)}function Mz(oe,xe,me,nt){for(var Lt=-1,dn=oe==null?0:oe.length;++Lt-1}function tw(oe,xe,me){for(var nt=-1,Lt=oe==null?0:oe.length;++nt-1;);return me}function RO(oe,xe){for(var me=oe.length;me--&&Mf(xe,oe[me],0)>-1;);return me}function Hz(oe,xe){for(var me=oe.length,nt=0;me--;)oe[me]===xe&&++nt;return nt}var Gz=ow(Ez),zz=ow(Az);function Wz(oe){return"\\"+Rz[oe]}function jz(oe,xe){return oe==null?n:oe[xe]}function Lf(oe){return wz.test(oe)}function Yz(oe){return xz.test(oe)}function Xz(oe){for(var xe,me=[];!(xe=oe.next()).done;)me.push(xe.value);return me}function uw(oe){var xe=-1,me=Array(oe.size);return oe.forEach(function(nt,Lt){me[++xe]=[Lt,nt]}),me}function PO(oe,xe){return function(me){return oe(xe(me))}}function Tl(oe,xe){for(var me=-1,nt=oe.length,Lt=0,dn=[];++me-1}function NW(p,g){var x=this.__data__,E=Wm(x,p);return E<0?(++this.size,x.push([p,g])):x[E][1]=g,this}Ss.prototype.clear=OW,Ss.prototype.delete=DW,Ss.prototype.get=MW,Ss.prototype.has=LW,Ss.prototype.set=NW;function ws(p){var g=-1,x=p==null?0:p.length;for(this.clear();++g=g?p:g)),p}function ko(p,g,x,E,D,V){var X,J=g&f,ue=g&d,Ie=g&h;if(x&&(X=D?x(p,E,D,V):x(p)),X!==n)return X;if(!qn(p))return p;var Re=Ft(p);if(Re){if(X=B9(p),!J)return Li(p,X)}else{var Le=Yr(p),qe=Le==$e||Le==H;if(Pl(p))return d2(p,J);if(Le==pe||Le==Me||qe&&!D){if(X=ue||qe?{}:O2(p),!J)return ue?I9(p,qW(X,p)):A9(p,HO(X,p))}else{if(!kn[Le])return D?p:{};X=V9(p,Le,J)}}V||(V=new pa);var ct=V.get(p);if(ct)return ct;V.set(p,X),aD(p)?p.forEach(function(wt){X.add(ko(wt,g,x,wt,p,V))}):iD(p)&&p.forEach(function(wt,Zt){X.set(Zt,ko(wt,g,x,Zt,p,V))});var St=Ie?ue?Nw:Lw:ue?ki:Or,zt=Re?n:St(p);return Mo(zt||p,function(wt,Zt){zt&&(Zt=wt,wt=p[Zt]),zh(X,Zt,ko(wt,g,x,Zt,p,V))}),X}function JW(p){var g=Or(p);return function(x){return GO(x,p,g)}}function GO(p,g,x){var E=x.length;if(p==null)return!E;for(p=On(p);E--;){var D=x[E],V=g[D],X=p[D];if(X===n&&!(D in p)||!V(X))return!1}return!0}function zO(p,g,x){if(typeof p!="function")throw new Lo(a);return qh(function(){p.apply(n,x)},g)}function Wh(p,g,x,E){var D=-1,V=Im,X=!0,J=p.length,ue=[],Ie=g.length;if(!J)return ue;x&&(g=zn(g,co(x))),E?(V=tw,X=!1):g.length>=i&&(V=$h,X=!1,g=new Yu(g));e:for(;++DD?0:D+x),E=E===n||E>D?D:Ut(E),E<0&&(E+=D),E=x>E?0:lD(E);x0&&x(J)?g>1?Fr(J,g-1,x,E,D):xl(D,J):E||(D[D.length]=J)}return D}var gw=y2(),YO=y2(!0);function Ua(p,g){return p&&gw(p,g,Or)}function mw(p,g){return p&&YO(p,g,Or)}function Ym(p,g){return wl(g,function(x){return As(p[x])})}function Ku(p,g){g=Il(g,p);for(var x=0,E=g.length;p!=null&&xg}function t9(p,g){return p!=null&&wn.call(p,g)}function n9(p,g){return p!=null&&g in On(p)}function r9(p,g,x){return p>=jr(g,x)&&p=120&&Re.length>=120)?new Yu(X&&Re):n}Re=p[0];var Le=-1,qe=J[0];e:for(;++Le-1;)J!==p&&$m.call(J,ue,1),$m.call(p,ue,1);return p}function i2(p,g){for(var x=p?g.length:0,E=x-1;x--;){var D=g[x];if(x==E||D!==V){var V=D;Es(D)?$m.call(p,D,1):Aw(p,D)}}return p}function Tw(p,g){return p+Um($O()*(g-p+1))}function g9(p,g,x,E){for(var D=-1,V=wr(Vm((g-p)/(x||1)),0),X=me(V);V--;)X[E?V:++D]=p,p+=x;return X}function Cw(p,g){var x="";if(!p||g<1||g>j)return x;do g%2&&(x+=p),g=Um(g/2),g&&(p+=p);while(g);return x}function Wt(p,g){return Hw(L2(p,g,Fi),p+"")}function m9(p){return UO(Wf(p))}function y9(p,g){var x=Wf(p);return iy(x,Xu(g,0,x.length))}function Xh(p,g,x,E){if(!qn(p))return p;g=Il(g,p);for(var D=-1,V=g.length,X=V-1,J=p;J!=null&&++DD?0:D+g),x=x>D?D:x,x<0&&(x+=D),D=g>x?0:x-g>>>0,g>>>=0;for(var V=me(D);++E>>1,X=p[V];X!==null&&!ho(X)&&(x?X<=g:X=i){var Ie=g?null:D9(p);if(Ie)return Pm(Ie);X=!1,D=$h,ue=new Yu}else ue=g?[]:J;e:for(;++E=E?p:Fo(p,g,x)}var f2=uW||function(p){return kr.clearTimeout(p)};function d2(p,g){if(g)return p.slice();var x=p.length,E=MO?MO(x):new p.constructor(x);return p.copy(E),E}function Ow(p){var g=new p.constructor(p.byteLength);return new km(g).set(new km(p)),g}function x9(p,g){var x=g?Ow(p.buffer):p.buffer;return new p.constructor(x,p.byteOffset,p.byteLength)}function T9(p){var g=new p.constructor(p.source,Nh.exec(p));return g.lastIndex=p.lastIndex,g}function C9(p){return Gh?On(Gh.call(p)):{}}function h2(p,g){var x=g?Ow(p.buffer):p.buffer;return new p.constructor(x,p.byteOffset,p.length)}function p2(p,g){if(p!==g){var x=p!==n,E=p===null,D=p===p,V=ho(p),X=g!==n,J=g===null,ue=g===g,Ie=ho(g);if(!J&&!Ie&&!V&&p>g||V&&X&&ue&&!J&&!Ie||E&&X&&ue||!x&&ue||!D)return 1;if(!E&&!V&&!Ie&&p=J)return ue;var Ie=x[E];return ue*(Ie=="desc"?-1:1)}}return p.index-g.index}function v2(p,g,x,E){for(var D=-1,V=p.length,X=x.length,J=-1,ue=g.length,Ie=wr(V-X,0),Re=me(ue+Ie),Le=!E;++J1?x[D-1]:n,X=D>2?x[2]:n;for(V=p.length>3&&typeof V=="function"?(D--,V):n,X&&gi(x[0],x[1],X)&&(V=D<3?n:V,D=1),g=On(g);++E-1?D[V?g[X]:X]:n}}function S2(p){return Cs(function(g){var x=g.length,E=x,D=No.prototype.thru;for(p&&g.reverse();E--;){var V=g[E];if(typeof V!="function")throw new Lo(a);if(D&&!X&&ny(V)=="wrapper")var X=new No([],!0)}for(E=X?E:x;++E1&&rn.reverse(),Re&&ueJ))return!1;var Ie=V.get(p),Re=V.get(g);if(Ie&&Re)return Ie==g&&Re==p;var Le=-1,qe=!0,ct=x&m?new Yu:n;for(V.set(p,g),V.set(g,p);++Le1?"& ":"")+g[E],g=g.join(x>2?", ":" "),p.replace(Sm,`{ +/* [wrapped with `+g+`] */ +`)}function H9(p){return Ft(p)||Ju(p)||!!(kO&&p&&p[kO])}function Es(p,g){var x=typeof p;return g=g??j,!!g&&(x=="number"||x!="symbol"&&Ue.test(p))&&p>-1&&p%1==0&&p0){if(++g>=M)return arguments[0]}else g=0;return p.apply(n,arguments)}}function iy(p,g){var x=-1,E=p.length,D=E-1;for(g=g===n?E:g;++x1?p[g-1]:n;return x=typeof x=="function"?(p.pop(),x):n,j2(p,x)});function Y2(p){var g=k(p);return g.__chain__=!0,g}function Q7(p,g){return g(p),p}function oy(p,g){return g(p)}var ej=Cs(function(p){var g=p.length,x=g?p[0]:0,E=this.__wrapped__,D=function(V){return vw(V,p)};return g>1||this.__actions__.length||!(E instanceof en)||!Es(x)?this.thru(D):(E=E.slice(x,+x+(g?1:0)),E.__actions__.push({func:oy,args:[D],thisArg:n}),new No(E,this.__chain__).thru(function(V){return g&&!V.length&&V.push(n),V}))});function tj(){return Y2(this)}function nj(){return new No(this.value(),this.__chain__)}function rj(){this.__values__===n&&(this.__values__=sD(this.value()));var p=this.__index__>=this.__values__.length,g=p?n:this.__values__[this.__index__++];return{done:p,value:g}}function ij(){return this}function oj(p){for(var g,x=this;x instanceof zm;){var E=V2(x);E.__index__=0,E.__values__=n,g?D.__wrapped__=E:g=E;var D=E;x=x.__wrapped__}return D.__wrapped__=p,g}function aj(){var p=this.__wrapped__;if(p instanceof en){var g=p;return this.__actions__.length&&(g=new en(this)),g=g.reverse(),g.__actions__.push({func:oy,args:[Gw],thisArg:n}),new No(g,this.__chain__)}return this.thru(Gw)}function sj(){return u2(this.__wrapped__,this.__actions__)}var lj=qm(function(p,g,x){wn.call(p,x)?++p[x]:xs(p,x,1)});function uj(p,g,x){var E=Ft(p)?wO:QW;return x&&gi(p,g,x)&&(g=n),E(p,yt(g,3))}function cj(p,g){var x=Ft(p)?wl:jO;return x(p,yt(g,3))}var fj=b2(U2),dj=b2(H2);function hj(p,g){return Fr(ay(p,g),1)}function pj(p,g){return Fr(ay(p,g),Y)}function vj(p,g,x){return x=x===n?1:Ut(x),Fr(ay(p,g),x)}function X2(p,g){var x=Ft(p)?Mo:El;return x(p,yt(g,3))}function K2(p,g){var x=Ft(p)?Lz:WO;return x(p,yt(g,3))}var gj=qm(function(p,g,x){wn.call(p,x)?p[x].push(g):xs(p,x,[g])});function mj(p,g,x,E){p=Ni(p)?p:Wf(p),x=x&&!E?Ut(x):0;var D=p.length;return x<0&&(x=wr(D+x,0)),fy(p)?x<=D&&p.indexOf(g,x)>-1:!!D&&Mf(p,g,x)>-1}var yj=Wt(function(p,g,x){var E=-1,D=typeof g=="function",V=Ni(p)?me(p.length):[];return El(p,function(X){V[++E]=D?uo(g,X,x):jh(X,g,x)}),V}),_j=qm(function(p,g,x){xs(p,x,g)});function ay(p,g){var x=Ft(p)?zn:JO;return x(p,yt(g,3))}function bj(p,g,x,E){return p==null?[]:(Ft(g)||(g=g==null?[]:[g]),x=E?n:x,Ft(x)||(x=x==null?[]:[x]),n2(p,g,x))}var Sj=qm(function(p,g,x){p[x?0:1].push(g)},function(){return[[],[]]});function wj(p,g,x){var E=Ft(p)?nw:EO,D=arguments.length<3;return E(p,yt(g,4),x,D,El)}function xj(p,g,x){var E=Ft(p)?Nz:EO,D=arguments.length<3;return E(p,yt(g,4),x,D,WO)}function Tj(p,g){var x=Ft(p)?wl:jO;return x(p,uy(yt(g,3)))}function Cj(p){var g=Ft(p)?UO:m9;return g(p)}function Ej(p,g,x){(x?gi(p,g,x):g===n)?g=1:g=Ut(g);var E=Ft(p)?XW:y9;return E(p,g)}function Aj(p){var g=Ft(p)?KW:b9;return g(p)}function Ij(p){if(p==null)return 0;if(Ni(p))return fy(p)?Nf(p):p.length;var g=Yr(p);return g==G||g==fe?p.size:Sw(p).length}function Rj(p,g,x){var E=Ft(p)?rw:S9;return x&&gi(p,g,x)&&(g=n),E(p,yt(g,3))}var Pj=Wt(function(p,g){if(p==null)return[];var x=g.length;return x>1&&gi(p,g[0],g[1])?g=[]:x>2&&gi(g[0],g[1],g[2])&&(g=[g[0]]),n2(p,Fr(g,1),[])}),sy=cW||function(){return kr.Date.now()};function Oj(p,g){if(typeof g!="function")throw new Lo(a);return p=Ut(p),function(){if(--p<1)return g.apply(this,arguments)}}function Z2(p,g,x){return g=x?n:g,g=p&&g==null?p.length:g,Ts(p,A,n,n,n,n,g)}function q2(p,g){var x;if(typeof g!="function")throw new Lo(a);return p=Ut(p),function(){return--p>0&&(x=g.apply(this,arguments)),p<=1&&(g=n),x}}var Ww=Wt(function(p,g,x){var E=y;if(x.length){var D=Tl(x,Gf(Ww));E|=C}return Ts(p,E,g,x,D)}),J2=Wt(function(p,g,x){var E=y|_;if(x.length){var D=Tl(x,Gf(J2));E|=C}return Ts(g,E,p,x,D)});function Q2(p,g,x){g=x?n:g;var E=Ts(p,w,n,n,n,n,n,g);return E.placeholder=Q2.placeholder,E}function eD(p,g,x){g=x?n:g;var E=Ts(p,S,n,n,n,n,n,g);return E.placeholder=eD.placeholder,E}function tD(p,g,x){var E,D,V,X,J,ue,Ie=0,Re=!1,Le=!1,qe=!0;if(typeof p!="function")throw new Lo(a);g=Bo(g)||0,qn(x)&&(Re=!!x.leading,Le="maxWait"in x,V=Le?wr(Bo(x.maxWait)||0,g):V,qe="trailing"in x?!!x.trailing:qe);function ct(cr){var ga=E,Rs=D;return E=D=n,Ie=cr,X=p.apply(Rs,ga),X}function St(cr){return Ie=cr,J=qh(Zt,g),Re?ct(cr):X}function zt(cr){var ga=cr-ue,Rs=cr-Ie,bD=g-ga;return Le?jr(bD,V-Rs):bD}function wt(cr){var ga=cr-ue,Rs=cr-Ie;return ue===n||ga>=g||ga<0||Le&&Rs>=V}function Zt(){var cr=sy();if(wt(cr))return rn(cr);J=qh(Zt,zt(cr))}function rn(cr){return J=n,qe&&E?ct(cr):(E=D=n,X)}function po(){J!==n&&f2(J),Ie=0,E=ue=D=J=n}function mi(){return J===n?X:rn(sy())}function vo(){var cr=sy(),ga=wt(cr);if(E=arguments,D=this,ue=cr,ga){if(J===n)return St(ue);if(Le)return f2(J),J=qh(Zt,g),ct(ue)}return J===n&&(J=qh(Zt,g)),X}return vo.cancel=po,vo.flush=mi,vo}var Dj=Wt(function(p,g){return zO(p,1,g)}),Mj=Wt(function(p,g,x){return zO(p,Bo(g)||0,x)});function Lj(p){return Ts(p,I)}function ly(p,g){if(typeof p!="function"||g!=null&&typeof g!="function")throw new Lo(a);var x=function(){var E=arguments,D=g?g.apply(this,E):E[0],V=x.cache;if(V.has(D))return V.get(D);var X=p.apply(this,E);return x.cache=V.set(D,X)||V,X};return x.cache=new(ly.Cache||ws),x}ly.Cache=ws;function uy(p){if(typeof p!="function")throw new Lo(a);return function(){var g=arguments;switch(g.length){case 0:return!p.call(this);case 1:return!p.call(this,g[0]);case 2:return!p.call(this,g[0],g[1]);case 3:return!p.call(this,g[0],g[1],g[2])}return!p.apply(this,g)}}function Nj(p){return q2(2,p)}var kj=w9(function(p,g){g=g.length==1&&Ft(g[0])?zn(g[0],co(yt())):zn(Fr(g,1),co(yt()));var x=g.length;return Wt(function(E){for(var D=-1,V=jr(E.length,x);++D=g}),Ju=KO(function(){return arguments}())?KO:function(p){return er(p)&&wn.call(p,"callee")&&!NO.call(p,"callee")},Ft=me.isArray,qj=gO?co(gO):o9;function Ni(p){return p!=null&&cy(p.length)&&!As(p)}function ur(p){return er(p)&&Ni(p)}function Jj(p){return p===!0||p===!1||er(p)&&vi(p)==Ee}var Pl=dW||rx,Qj=mO?co(mO):a9;function eY(p){return er(p)&&p.nodeType===1&&!Jh(p)}function tY(p){if(p==null)return!0;if(Ni(p)&&(Ft(p)||typeof p=="string"||typeof p.splice=="function"||Pl(p)||zf(p)||Ju(p)))return!p.length;var g=Yr(p);if(g==G||g==fe)return!p.size;if(Zh(p))return!Sw(p).length;for(var x in p)if(wn.call(p,x))return!1;return!0}function nY(p,g){return Yh(p,g)}function rY(p,g,x){x=typeof x=="function"?x:n;var E=x?x(p,g):n;return E===n?Yh(p,g,n,x):!!E}function Yw(p){if(!er(p))return!1;var g=vi(p);return g==Oe||g==Te||typeof p.message=="string"&&typeof p.name=="string"&&!Jh(p)}function iY(p){return typeof p=="number"&&FO(p)}function As(p){if(!qn(p))return!1;var g=vi(p);return g==$e||g==H||g==ce||g==W}function rD(p){return typeof p=="number"&&p==Ut(p)}function cy(p){return typeof p=="number"&&p>-1&&p%1==0&&p<=j}function qn(p){var g=typeof p;return p!=null&&(g=="object"||g=="function")}function er(p){return p!=null&&typeof p=="object"}var iD=yO?co(yO):l9;function oY(p,g){return p===g||bw(p,g,Fw(g))}function aY(p,g,x){return x=typeof x=="function"?x:n,bw(p,g,Fw(g),x)}function sY(p){return oD(p)&&p!=+p}function lY(p){if(W9(p))throw new Lt(o);return ZO(p)}function uY(p){return p===null}function cY(p){return p==null}function oD(p){return typeof p=="number"||er(p)&&vi(p)==le}function Jh(p){if(!er(p)||vi(p)!=pe)return!1;var g=Fm(p);if(g===null)return!0;var x=wn.call(g,"constructor")&&g.constructor;return typeof x=="function"&&x instanceof x&&Mm.call(x)==aW}var Xw=_O?co(_O):u9;function fY(p){return rD(p)&&p>=-j&&p<=j}var aD=bO?co(bO):c9;function fy(p){return typeof p=="string"||!Ft(p)&&er(p)&&vi(p)==_e}function ho(p){return typeof p=="symbol"||er(p)&&vi(p)==Pe}var zf=SO?co(SO):f9;function dY(p){return p===n}function hY(p){return er(p)&&Yr(p)==de}function pY(p){return er(p)&&vi(p)==Be}var vY=ty(ww),gY=ty(function(p,g){return p<=g});function sD(p){if(!p)return[];if(Ni(p))return fy(p)?ha(p):Li(p);if(Bh&&p[Bh])return Xz(p[Bh]());var g=Yr(p),x=g==G?uw:g==fe?Pm:Wf;return x(p)}function Is(p){if(!p)return p===0?p:0;if(p=Bo(p),p===Y||p===-Y){var g=p<0?-1:1;return g*se}return p===p?p:0}function Ut(p){var g=Is(p),x=g%1;return g===g?x?g-x:g:0}function lD(p){return p?Xu(Ut(p),0,ve):0}function Bo(p){if(typeof p=="number")return p;if(ho(p))return ge;if(qn(p)){var g=typeof p.valueOf=="function"?p.valueOf():p;p=qn(g)?g+"":g}if(typeof p!="string")return p===0?p:+p;p=AO(p);var x=YS.test(p);return x||te.test(p)?Oz(p.slice(2),x?2:8):Em.test(p)?ge:+p}function uD(p){return Ha(p,ki(p))}function mY(p){return p?Xu(Ut(p),-j,j):p===0?p:0}function gn(p){return p==null?"":fo(p)}var yY=Uf(function(p,g){if(Zh(g)||Ni(g)){Ha(g,Or(g),p);return}for(var x in g)wn.call(g,x)&&zh(p,x,g[x])}),cD=Uf(function(p,g){Ha(g,ki(g),p)}),dy=Uf(function(p,g,x,E){Ha(g,ki(g),p,E)}),_Y=Uf(function(p,g,x,E){Ha(g,Or(g),p,E)}),bY=Cs(vw);function SY(p,g){var x=Vf(p);return g==null?x:HO(x,g)}var wY=Wt(function(p,g){p=On(p);var x=-1,E=g.length,D=E>2?g[2]:n;for(D&&gi(g[0],g[1],D)&&(E=1);++x1),V}),Ha(p,Nw(p),x),E&&(x=ko(x,f|d|h,M9));for(var D=g.length;D--;)Aw(x,g[D]);return x});function VY(p,g){return dD(p,uy(yt(g)))}var UY=Cs(function(p,g){return p==null?{}:p9(p,g)});function dD(p,g){if(p==null)return{};var x=zn(Nw(p),function(E){return[E]});return g=yt(g),r2(p,x,function(E,D){return g(E,D[0])})}function HY(p,g,x){g=Il(g,p);var E=-1,D=g.length;for(D||(D=1,p=n);++Eg){var E=p;p=g,g=E}if(x||p%1||g%1){var D=$O();return jr(p+D*(g-p+Pz("1e-"+((D+"").length-1))),g)}return Tw(p,g)}var QY=Hf(function(p,g,x){return g=g.toLowerCase(),p+(x?vD(g):g)});function vD(p){return qw(gn(p).toLowerCase())}function gD(p){return p=gn(p),p&&p.replace(at,Gz).replace(bz,"")}function eX(p,g,x){p=gn(p),g=fo(g);var E=p.length;x=x===n?E:Xu(Ut(x),0,E);var D=x;return x-=g.length,x>=0&&p.slice(x,D)==g}function tX(p){return p=gn(p),p&&fa.test(p)?p.replace(Pt,zz):p}function nX(p){return p=gn(p),p&&jS.test(p)?p.replace(Pf,"\\$&"):p}var rX=Hf(function(p,g,x){return p+(x?"-":"")+g.toLowerCase()}),iX=Hf(function(p,g,x){return p+(x?" ":"")+g.toLowerCase()}),oX=_2("toLowerCase");function aX(p,g,x){p=gn(p),g=Ut(g);var E=g?Nf(p):0;if(!g||E>=g)return p;var D=(g-E)/2;return ey(Um(D),x)+p+ey(Vm(D),x)}function sX(p,g,x){p=gn(p),g=Ut(g);var E=g?Nf(p):0;return g&&E>>0,x?(p=gn(p),p&&(typeof g=="string"||g!=null&&!Xw(g))&&(g=fo(g),!g&&Lf(p))?Rl(ha(p),0,x):p.split(g,x)):[]}var pX=Hf(function(p,g,x){return p+(x?" ":"")+qw(g)});function vX(p,g,x){return p=gn(p),x=x==null?0:Xu(Ut(x),0,p.length),g=fo(g),p.slice(x,x+g.length)==g}function gX(p,g,x){var E=k.templateSettings;x&&gi(p,g,x)&&(g=n),p=gn(p),g=dy({},g,E,E2);var D=dy({},g.imports,E.imports,E2),V=Or(D),X=lw(D,V),J,ue,Ie=0,Re=g.interpolate||Sn,Le="__p += '",qe=cw((g.escape||Sn).source+"|"+Re.source+"|"+(Re===Rf?Cm:Sn).source+"|"+(g.evaluate||Sn).source+"|$","g"),ct="//# sourceURL="+(wn.call(g,"sourceURL")?(g.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++Cz+"]")+` +`;p.replace(qe,function(wt,Zt,rn,po,mi,vo){return rn||(rn=po),Le+=p.slice(Ie,vo).replace(Rr,Wz),Zt&&(J=!0,Le+=`' + +__e(`+Zt+`) + +'`),mi&&(ue=!0,Le+=`'; +`+mi+`; +__p += '`),rn&&(Le+=`' + +((__t = (`+rn+`)) == null ? '' : __t) + +'`),Ie=vo+wt.length,wt}),Le+=`'; +`;var St=wn.call(g,"variable")&&g.variable;if(!St)Le=`with (obj) { +`+Le+` +} +`;else if(da.test(St))throw new Lt(s);Le=(ue?Le.replace(Ge,""):Le).replace(We,"$1").replace(et,"$1;"),Le="function("+(St||"obj")+`) { +`+(St?"":`obj || (obj = {}); +`)+"var __t, __p = ''"+(J?", __e = _.escape":"")+(ue?`, __j = Array.prototype.join; +function print() { __p += __j.call(arguments, '') } +`:`; +`)+Le+`return __p +}`;var zt=yD(function(){return dn(V,ct+"return "+Le).apply(n,X)});if(zt.source=Le,Yw(zt))throw zt;return zt}function mX(p){return gn(p).toLowerCase()}function yX(p){return gn(p).toUpperCase()}function _X(p,g,x){if(p=gn(p),p&&(x||g===n))return AO(p);if(!p||!(g=fo(g)))return p;var E=ha(p),D=ha(g),V=IO(E,D),X=RO(E,D)+1;return Rl(E,V,X).join("")}function bX(p,g,x){if(p=gn(p),p&&(x||g===n))return p.slice(0,OO(p)+1);if(!p||!(g=fo(g)))return p;var E=ha(p),D=RO(E,ha(g))+1;return Rl(E,0,D).join("")}function SX(p,g,x){if(p=gn(p),p&&(x||g===n))return p.replace(Mi,"");if(!p||!(g=fo(g)))return p;var E=ha(p),D=IO(E,ha(g));return Rl(E,D).join("")}function wX(p,g){var x=R,E=O;if(qn(g)){var D="separator"in g?g.separator:D;x="length"in g?Ut(g.length):x,E="omission"in g?fo(g.omission):E}p=gn(p);var V=p.length;if(Lf(p)){var X=ha(p);V=X.length}if(x>=V)return p;var J=x-Nf(E);if(J<1)return E;var ue=X?Rl(X,0,J).join(""):p.slice(0,J);if(D===n)return ue+E;if(X&&(J+=ue.length-J),Xw(D)){if(p.slice(J).search(D)){var Ie,Re=ue;for(D.global||(D=cw(D.source,gn(Nh.exec(D))+"g")),D.lastIndex=0;Ie=D.exec(Re);)var Le=Ie.index;ue=ue.slice(0,Le===n?J:Le)}}else if(p.indexOf(fo(D),J)!=J){var qe=ue.lastIndexOf(D);qe>-1&&(ue=ue.slice(0,qe))}return ue+E}function xX(p){return p=gn(p),p&&Nn.test(p)?p.replace(It,Jz):p}var TX=Hf(function(p,g,x){return p+(x?" ":"")+g.toUpperCase()}),qw=_2("toUpperCase");function mD(p,g,x){return p=gn(p),g=x?n:g,g===n?Yz(p)?tW(p):$z(p):p.match(g)||[]}var yD=Wt(function(p,g){try{return uo(p,n,g)}catch(x){return Yw(x)?x:new Lt(x)}}),CX=Cs(function(p,g){return Mo(g,function(x){x=Ga(x),xs(p,x,Ww(p[x],p))}),p});function EX(p){var g=p==null?0:p.length,x=yt();return p=g?zn(p,function(E){if(typeof E[1]!="function")throw new Lo(a);return[x(E[0]),E[1]]}):[],Wt(function(E){for(var D=-1;++Dj)return[];var x=ve,E=jr(p,ve);g=yt(g),p-=ve;for(var D=sw(E,g);++x0||g<0)?new en(x):(p<0?x=x.takeRight(-p):p&&(x=x.drop(p)),g!==n&&(g=Ut(g),x=g<0?x.dropRight(-g):x.take(g-p)),x)},en.prototype.takeRightWhile=function(p){return this.reverse().takeWhile(p).reverse()},en.prototype.toArray=function(){return this.take(ve)},Ua(en.prototype,function(p,g){var x=/^(?:filter|find|map|reject)|While$/.test(g),E=/^(?:head|last)$/.test(g),D=k[E?"take"+(g=="last"?"Right":""):g],V=E||/^find/.test(g);D&&(k.prototype[g]=function(){var X=this.__wrapped__,J=E?[1]:arguments,ue=X instanceof en,Ie=J[0],Re=ue||Ft(X),Le=function(Zt){var rn=D.apply(k,xl([Zt],J));return E&&qe?rn[0]:rn};Re&&x&&typeof Ie=="function"&&Ie.length!=1&&(ue=Re=!1);var qe=this.__chain__,ct=!!this.__actions__.length,St=V&&!qe,zt=ue&&!ct;if(!V&&Re){X=zt?X:new en(this);var wt=p.apply(X,J);return wt.__actions__.push({func:oy,args:[Le],thisArg:n}),new No(wt,qe)}return St&&zt?p.apply(this,J):(wt=this.thru(Le),St?E?wt.value()[0]:wt.value():wt)})}),Mo(["pop","push","shift","sort","splice","unshift"],function(p){var g=Om[p],x=/^(?:push|sort|unshift)$/.test(p)?"tap":"thru",E=/^(?:pop|shift)$/.test(p);k.prototype[p]=function(){var D=arguments;if(E&&!this.__chain__){var V=this.value();return g.apply(Ft(V)?V:[],D)}return this[x](function(X){return g.apply(Ft(X)?X:[],D)})}}),Ua(en.prototype,function(p,g){var x=k[g];if(x){var E=x.name+"";wn.call(Bf,E)||(Bf[E]=[]),Bf[E].push({name:g,func:x})}}),Bf[Jm(n,_).name]=[{name:"wrapper",func:n}],en.prototype.clone=xW,en.prototype.reverse=TW,en.prototype.value=CW,k.prototype.at=ej,k.prototype.chain=tj,k.prototype.commit=nj,k.prototype.next=rj,k.prototype.plant=oj,k.prototype.reverse=aj,k.prototype.toJSON=k.prototype.valueOf=k.prototype.value=sj,k.prototype.first=k.prototype.head,Bh&&(k.prototype[Bh]=ij),k},kf=nW();zu?((zu.exports=kf)._=kf,QS._=kf):kr._=kf}).call(Rre)}(Vp,Vp.exports)),Vp.exports}var Ai=Pre();const Ore=Vg(Ai),$r=[];for(let e=0;e<256;++e)$r.push((e+256).toString(16).slice(1));function Dre(e,t=0){return($r[e[t+0]]+$r[e[t+1]]+$r[e[t+2]]+$r[e[t+3]]+"-"+$r[e[t+4]]+$r[e[t+5]]+"-"+$r[e[t+6]]+$r[e[t+7]]+"-"+$r[e[t+8]]+$r[e[t+9]]+"-"+$r[e[t+10]]+$r[e[t+11]]+$r[e[t+12]]+$r[e[t+13]]+$r[e[t+14]]+$r[e[t+15]]).toLowerCase()}let Ax;const Mre=new Uint8Array(16);function Lre(){if(!Ax){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");Ax=crypto.getRandomValues.bind(crypto)}return Ax(Mre)}const Nre=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),pL={randomUUID:Nre};function kre(e,t,n){if(pL.randomUUID&&!t&&!e)return pL.randomUUID();e=e||{};const r=e.random||(e.rng||Lre)();return r[6]=r[6]&15|64,r[8]=r[8]&63|128,Dre(r)}const fs=Mt("setup/api-list",[]),ci=Mt("setup/active-uuid",""),fl=Ve(()=>fs.value.find(e=>e.uuid===ci.value)),Fre=e=>{const t=fs.value.find(r=>Ai.isEqual(Ai.omit(r,"uuid"),e));if(t){ci.value=t.uuid;return}const n=kre();fs.value.push({...e,uuid:n}),ci.value=n},DB=e=>{fs.value=fs.value.filter(t=>t.uuid!==e)},Fc=60,qc=new Array(Fc).fill(0).map((e,t)=>({name:t,value:e})),kb=Fe(0),Up=Fe([...qc]),a_=Fe([...qc]),Fb=Fe(0),$b=Fe(0),Hp=Fe([...qc]),Gp=Fe([...qc]);let Ry;const $re=()=>{Ry==null||Ry(),Hp.value=[...qc],Gp.value=[...qc],Up.value=[...qc];const{data:e,close:t}=Goe(),n=Yt(()=>e.value,a=>{if(!a)return;const s=Date.now().valueOf();kb.value=a.inuse,Up.value.push({value:a.inuse,name:s}),a_.value.push({value:ea.value.length,name:s}),Up.value=Up.value.slice(-1*Fc),a_.value=a_.value.slice(-1*Fc)}),{data:r,close:i}=zoe(),o=Yt(()=>r.value,a=>{if(!a)return;const s=Date.now().valueOf();Fb.value=a.down,$b.value=a.up,Hp.value.push({value:a.down,name:s}),Gp.value.push({value:a.up,name:s}),Hp.value=Hp.value.slice(-1*Fc),Gp.value=Gp.value.slice(-1*Fc)});Ry=()=>{t(),i(),n(),o()}},Oc="GLOBAL",dE=Fe([]),fi=Fe({}),GI=Fe({}),ih=Mt("config/ipv6-map",{}),kd=Fe([]),Qg=e=>GI.value[Jc(e)],Bre=e=>ih.value[Jc(e)],dl=async()=>{const{data:e}=await Poe(),{data:t}=await Doe(),n=e.proxies[Oc].all??[];fi.value=e.proxies,dE.value=Object.values(e.proxies).filter(r=>{var i;return((i=r.all)==null?void 0:i.length)&&r.name!==Oc}).sort((r,i)=>n.indexOf(r.name)-n.indexOf(i.name)).map(r=>r.name),GI.value=Object.fromEntries(Object.entries(e.proxies).map(([r,i])=>(Zc.value&&Gre(i)&&(ih.value[r]=!0),[r,Hre(i)]))),kd.value=Object.values(t.providers).filter(r=>r.name!=="default"&&r.vehicleType!=="Compatible")},vL=async(e,t)=>{await Ooe(e,t),fi.value[e].now=t,e_.value&&ea.value.filter(n=>n.chains.includes(e)).forEach(n=>jb(n.id)),dl()},Vre=async e=>{if(Zc.value)try{const{data:n}=await ML(e,$I,4e3);ih.value[Jc(e)]=n.delay>Jo}catch{ih.value[Jc(e)]=!1}const{data:t}=await ML(e,hv.value,pv.value);GI.value[Jc(e)]=t.delay},Ure=async e=>{var t,n;if(Zc.value)try{const{data:r}=await LL(e,$I,4e3);(t=fi.value[e].all)==null||t.forEach(i=>{ih.value[Jc(i)]=r[i]>Jo})}catch{(n=fi.value[e].all)==null||n.forEach(r=>{ih.value[Jc(r)]=!1})}await LL(e,hv.value,pv.value),await dl()},Hre=e=>{var t;return((t=Ai.last(e.history))==null?void 0:t.delay)??0},Gre=e=>{var n,r,i;const t=(r=(n=e.extra)==null?void 0:n[$I])==null?void 0:r.history;return(((i=Ai.last(t))==null?void 0:i.delay)??0)>Jo},Jc=e=>{let t=fi.value[e];if(!e||!t)return e;for(;t.now&&t.now!==t.name;){const n=fi.value[t.now];if(!n)return t.name;t=n}return t.name},zre=Ve(()=>Ai.compact(Object.values(fi.value).map(e=>e.icon)));Yt(zre,async e=>{const t=await bre();Ai.difference(t,e).forEach(n=>{Sre(n)})});const Wre=["B","kB","MB","GB","TB","PB","EB","ZB","YB"],jre=["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"],Yre=["b","kbit","Mbit","Gbit","Tbit","Pbit","Ebit","Zbit","Ybit"],Xre=["b","kibit","Mibit","Gibit","Tibit","Pibit","Eibit","Zibit","Yibit"],gL=(e,t,n)=>{let r=e;return typeof t=="string"||Array.isArray(t)?r=e.toLocaleString(t,n):(t===!0||n!==void 0)&&(r=e.toLocaleString(void 0,n)),r};function Kre(e,t){if(!Number.isFinite(e))throw new TypeError(`Expected a finite number, got ${typeof e}: ${e}`);t={bits:!1,binary:!1,space:!0,...t};const n=t.bits?t.binary?Xre:Yre:t.binary?jre:Wre,r=t.space?" ":"";if(t.signed&&e===0)return` 0${r}${n[0]}`;const i=e<0,o=i?"-":t.signed?"+":"";i&&(e=-e);let a;if(t.minimumFractionDigits!==void 0&&(a={minimumFractionDigits:t.minimumFractionDigits}),t.maximumFractionDigits!==void 0&&(a={maximumFractionDigits:t.maximumFractionDigits,...a}),e<1){const c=gL(e,t.locale,a);return o+c+r+n[0]}const s=Math.min(Math.floor(t.binary?Math.log(e)/Math.log(1024):Math.log10(e)/3),n.length-1);e/=(t.binary?1024:1e3)**s,a||(e=e.toPrecision(3));const l=gL(Number(e),t.locale,a),u=n[s];return o+l+r+u}const Tn=(e,t)=>Kre(e,{binary:!1,...t}),Bb=e=>La(e).locale(su.value).fromNow(),MB=e=>{const t=fi.value[e];return t?["direct","reject","reject-drop","pass"].includes(t.type.toLowerCase())||!!t.all:!1},Py=e=>{if(MB(e))return-1;const t=Qg(e);return t===0?1/0:t},LB=e=>{switch(e=[...e],t_.value&&(e=e.filter(t=>MB(t)||Qg(t)>0)),Q0.value){case ru.DEFAULT:return e;case ru.NAME_ASC:return e.sort((t,n)=>t.localeCompare(n));case ru.NAME_DESC:return e.sort((t,n)=>n.localeCompare(t));case ru.LATENCY_ASC:return e.sort((t,n)=>Py(t)-Py(n));case ru.LATENCY_DESC:return e.sort((t,n)=>Py(n)-Py(t))}},u1=e=>{if(e===null)return"";if(e==="")return"Inner";const t=e.includes(":");for(const n in So.value)if(n.startsWith("/")){if(new RegExp(n,"i").test(e))return So.value[n]}else if(e===n||t&&e.endsWith(n))return So.value[n];return e},NB=e=>e.metadata.process||e.metadata.processPath.replace(/^.*[/\\](.*)$/,"$1")||"-",kB=e=>e.metadata.remoteDestination||e.metadata.destinationIP||e.metadata.host,FB=e=>`${e.metadata.type} | ${e.metadata.network}`,$B=(e,t)=>{const{suffix:n="",binary:r=!1}=t;return e.data.name +
+ ${e.seriesName} + (${La(e.data.name).format("HH:mm:ss")}): ${Tn(e.data.value,{binary:r})}${n} + `},mL=()=>{const e={};for(const i in localStorage)(i.startsWith("config/")||i.startsWith("setup/"))&&(e[i]=localStorage.getItem(i));const t=new Blob([JSON.stringify(e,null,2)],{type:"application/json"}),n=URL.createObjectURL(t),r=document.createElement("a");r.href=n,r.download="zashboard-settings",r.click(),URL.revokeObjectURL(n)},c1=()=>{const e=document.createElement("input");e.type="file",e.accept=".json",e.onchange=async()=>{var r;const t=(r=e.files)==null?void 0:r[0];if(!t)return;const n=new FileReader;n.onload=async()=>{const i=JSON.parse(n.result);for(const o in i)localStorage.setItem(o,i[o]);location.reload()},n.readAsText(t)},e.click()},Eu=e=>`${e.protocol}://${e.host}:${e.port}${e.secondaryPath||""}`,iu=e=>e===Jo?"":eObject.values(un).filter(e=>![un.setup,!yd.value&&un.overview].includes(e)));function BB(e,t){return function(){return e.apply(t,arguments)}}const{toString:Zre}=Object.prototype,{getPrototypeOf:zI}=Object,Vb=(e=>t=>{const n=Zre.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),$a=e=>(e=e.toLowerCase(),t=>Vb(t)===e),Ub=e=>t=>typeof t===e,{isArray:wh}=Array,fg=Ub("undefined");function qre(e){return e!==null&&!fg(e)&&e.constructor!==null&&!fg(e.constructor)&&Eo(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const VB=$a("ArrayBuffer");function Jre(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&VB(e.buffer),t}const Qre=Ub("string"),Eo=Ub("function"),UB=Ub("number"),Hb=e=>e!==null&&typeof e=="object",eie=e=>e===!0||e===!1,s_=e=>{if(Vb(e)!=="object")return!1;const t=zI(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},tie=$a("Date"),nie=$a("File"),rie=$a("Blob"),iie=$a("FileList"),oie=e=>Hb(e)&&Eo(e.pipe),aie=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||Eo(e.append)&&((t=Vb(e))==="formdata"||t==="object"&&Eo(e.toString)&&e.toString()==="[object FormData]"))},sie=$a("URLSearchParams"),[lie,uie,cie,fie]=["ReadableStream","Request","Response","Headers"].map($a),die=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function em(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let r,i;if(typeof e!="object"&&(e=[e]),wh(e))for(r=0,i=e.length;r0;)if(i=n[r],t===i.toLowerCase())return i;return null}const $c=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,GB=e=>!fg(e)&&e!==$c;function hE(){const{caseless:e}=GB(this)&&this||{},t={},n=(r,i)=>{const o=e&&HB(t,i)||i;s_(t[o])&&s_(r)?t[o]=hE(t[o],r):s_(r)?t[o]=hE({},r):wh(r)?t[o]=r.slice():t[o]=r};for(let r=0,i=arguments.length;r(em(t,(i,o)=>{n&&Eo(i)?e[o]=BB(i,n):e[o]=i},{allOwnKeys:r}),e),pie=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),vie=(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},gie=(e,t,n,r)=>{let i,o,a;const s={};if(t=t||{},e==null)return t;do{for(i=Object.getOwnPropertyNames(e),o=i.length;o-- >0;)a=i[o],(!r||r(a,e,t))&&!s[a]&&(t[a]=e[a],s[a]=!0);e=n!==!1&&zI(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},mie=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return r!==-1&&r===n},yie=e=>{if(!e)return null;if(wh(e))return e;let t=e.length;if(!UB(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},_ie=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&zI(Uint8Array)),bie=(e,t)=>{const r=(e&&e[Symbol.iterator]).call(e);let i;for(;(i=r.next())&&!i.done;){const o=i.value;t.call(e,o[0],o[1])}},Sie=(e,t)=>{let n;const r=[];for(;(n=e.exec(t))!==null;)r.push(n);return r},wie=$a("HTMLFormElement"),xie=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,r,i){return r.toUpperCase()+i}),yL=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),Tie=$a("RegExp"),zB=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};em(n,(i,o)=>{let a;(a=t(i,o,e))!==!1&&(r[o]=a||i)}),Object.defineProperties(e,r)},Cie=e=>{zB(e,(t,n)=>{if(Eo(e)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;const r=e[n];if(Eo(r)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},Eie=(e,t)=>{const n={},r=i=>{i.forEach(o=>{n[o]=!0})};return wh(e)?r(e):r(String(e).split(t)),n},Aie=()=>{},Iie=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t,Ix="abcdefghijklmnopqrstuvwxyz",_L="0123456789",WB={DIGIT:_L,ALPHA:Ix,ALPHA_DIGIT:Ix+Ix.toUpperCase()+_L},Rie=(e=16,t=WB.ALPHA_DIGIT)=>{let n="";const{length:r}=t;for(;e--;)n+=t[Math.random()*r|0];return n};function Pie(e){return!!(e&&Eo(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])}const Oie=e=>{const t=new Array(10),n=(r,i)=>{if(Hb(r)){if(t.indexOf(r)>=0)return;if(!("toJSON"in r)){t[i]=r;const o=wh(r)?[]:{};return em(r,(a,s)=>{const l=n(a,i+1);!fg(l)&&(o[s]=l)}),t[i]=void 0,o}}return r};return n(e,0)},Die=$a("AsyncFunction"),Mie=e=>e&&(Hb(e)||Eo(e))&&Eo(e.then)&&Eo(e.catch),jB=((e,t)=>e?setImmediate:t?((n,r)=>($c.addEventListener("message",({source:i,data:o})=>{i===$c&&o===n&&r.length&&r.shift()()},!1),i=>{r.push(i),$c.postMessage(n,"*")}))(`axios@${Math.random()}`,[]):n=>setTimeout(n))(typeof setImmediate=="function",Eo($c.postMessage)),Lie=typeof queueMicrotask<"u"?queueMicrotask.bind($c):typeof process<"u"&&process.nextTick||jB,be={isArray:wh,isArrayBuffer:VB,isBuffer:qre,isFormData:aie,isArrayBufferView:Jre,isString:Qre,isNumber:UB,isBoolean:eie,isObject:Hb,isPlainObject:s_,isReadableStream:lie,isRequest:uie,isResponse:cie,isHeaders:fie,isUndefined:fg,isDate:tie,isFile:nie,isBlob:rie,isRegExp:Tie,isFunction:Eo,isStream:oie,isURLSearchParams:sie,isTypedArray:_ie,isFileList:iie,forEach:em,merge:hE,extend:hie,trim:die,stripBOM:pie,inherits:vie,toFlatObject:gie,kindOf:Vb,kindOfTest:$a,endsWith:mie,toArray:yie,forEachEntry:bie,matchAll:Sie,isHTMLForm:wie,hasOwnProperty:yL,hasOwnProp:yL,reduceDescriptors:zB,freezeMethods:Cie,toObjectSet:Eie,toCamelCase:xie,noop:Aie,toFiniteNumber:Iie,findKey:HB,global:$c,isContextDefined:GB,ALPHABET:WB,generateString:Rie,isSpecCompliantForm:Pie,toJSONObject:Oie,isAsyncFn:Die,isThenable:Mie,setImmediate:jB,asap:Lie};function Bt(e,t,n,r,i){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),i&&(this.response=i,this.status=i.status?i.status:null)}be.inherits(Bt,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:be.toJSONObject(this.config),code:this.code,status:this.status}}});const YB=Bt.prototype,XB={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{XB[e]={value:e}});Object.defineProperties(Bt,XB);Object.defineProperty(YB,"isAxiosError",{value:!0});Bt.from=(e,t,n,r,i,o)=>{const a=Object.create(YB);return be.toFlatObject(e,a,function(l){return l!==Error.prototype},s=>s!=="isAxiosError"),Bt.call(a,e.message,t,n,r,i),a.cause=e,a.name=e.name,o&&Object.assign(a,o),a};const Nie=null;function pE(e){return be.isPlainObject(e)||be.isArray(e)}function KB(e){return be.endsWith(e,"[]")?e.slice(0,-2):e}function bL(e,t,n){return e?e.concat(t).map(function(i,o){return i=KB(i),!n&&o?"["+i+"]":i}).join(n?".":""):t}function kie(e){return be.isArray(e)&&!e.some(pE)}const Fie=be.toFlatObject(be,{},null,function(t){return/^is[A-Z]/.test(t)});function Gb(e,t,n){if(!be.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,n=be.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(m,y){return!be.isUndefined(y[m])});const r=n.metaTokens,i=n.visitor||c,o=n.dots,a=n.indexes,l=(n.Blob||typeof Blob<"u"&&Blob)&&be.isSpecCompliantForm(t);if(!be.isFunction(i))throw new TypeError("visitor must be a function");function u(v){if(v===null)return"";if(be.isDate(v))return v.toISOString();if(!l&&be.isBlob(v))throw new Bt("Blob is not supported. Use a Buffer instead.");return be.isArrayBuffer(v)||be.isTypedArray(v)?l&&typeof Blob=="function"?new Blob([v]):Buffer.from(v):v}function c(v,m,y){let _=v;if(v&&!y&&typeof v=="object"){if(be.endsWith(m,"{}"))m=r?m:m.slice(0,-2),v=JSON.stringify(v);else if(be.isArray(v)&&kie(v)||(be.isFileList(v)||be.endsWith(m,"[]"))&&(_=be.toArray(v)))return m=KB(m),_.forEach(function(w,S){!(be.isUndefined(w)||w===null)&&t.append(a===!0?bL([m],S,o):a===null?m:m+"[]",u(w))}),!1}return pE(v)?!0:(t.append(bL(y,m,o),u(v)),!1)}const f=[],d=Object.assign(Fie,{defaultVisitor:c,convertValue:u,isVisitable:pE});function h(v,m){if(!be.isUndefined(v)){if(f.indexOf(v)!==-1)throw Error("Circular reference detected in "+m.join("."));f.push(v),be.forEach(v,function(_,b){(!(be.isUndefined(_)||_===null)&&i.call(t,_,be.isString(b)?b.trim():b,m,d))===!0&&h(_,m?m.concat(b):[b])}),f.pop()}}if(!be.isObject(e))throw new TypeError("data must be an object");return h(e),t}function SL(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(r){return t[r]})}function WI(e,t){this._pairs=[],e&&Gb(e,this,t)}const ZB=WI.prototype;ZB.append=function(t,n){this._pairs.push([t,n])};ZB.toString=function(t){const n=t?function(r){return t.call(this,r,SL)}:SL;return this._pairs.map(function(i){return n(i[0])+"="+n(i[1])},"").join("&")};function $ie(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function qB(e,t,n){if(!t)return e;const r=n&&n.encode||$ie;be.isFunction(n)&&(n={serialize:n});const i=n&&n.serialize;let o;if(i?o=i(t,n):o=be.isURLSearchParams(t)?t.toString():new WI(t,n).toString(r),o){const a=e.indexOf("#");a!==-1&&(e=e.slice(0,a)),e+=(e.indexOf("?")===-1?"?":"&")+o}return e}class wL{constructor(){this.handlers=[]}use(t,n,r){return this.handlers.push({fulfilled:t,rejected:n,synchronous:r?r.synchronous:!1,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){be.forEach(this.handlers,function(r){r!==null&&t(r)})}}const JB={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},Bie=typeof URLSearchParams<"u"?URLSearchParams:WI,Vie=typeof FormData<"u"?FormData:null,Uie=typeof Blob<"u"?Blob:null,Hie={isBrowser:!0,classes:{URLSearchParams:Bie,FormData:Vie,Blob:Uie},protocols:["http","https","file","blob","url","data"]},jI=typeof window<"u"&&typeof document<"u",vE=typeof navigator=="object"&&navigator||void 0,Gie=jI&&(!vE||["ReactNative","NativeScript","NS"].indexOf(vE.product)<0),zie=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",Wie=jI&&window.location.href||"http://localhost",jie=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:jI,hasStandardBrowserEnv:Gie,hasStandardBrowserWebWorkerEnv:zie,navigator:vE,origin:Wie},Symbol.toStringTag,{value:"Module"})),si={...jie,...Hie};function Yie(e,t){return Gb(e,new si.classes.URLSearchParams,Object.assign({visitor:function(n,r,i,o){return si.isNode&&be.isBuffer(n)?(this.append(r,n.toString("base64")),!1):o.defaultVisitor.apply(this,arguments)}},t))}function Xie(e){return be.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function Kie(e){const t={},n=Object.keys(e);let r;const i=n.length;let o;for(r=0;r=n.length;return a=!a&&be.isArray(i)?i.length:a,l?(be.hasOwnProp(i,a)?i[a]=[i[a],r]:i[a]=r,!s):((!i[a]||!be.isObject(i[a]))&&(i[a]=[]),t(n,r,i[a],o)&&be.isArray(i[a])&&(i[a]=Kie(i[a])),!s)}if(be.isFormData(e)&&be.isFunction(e.entries)){const n={};return be.forEachEntry(e,(r,i)=>{t(Xie(r),i,n,0)}),n}return null}function Zie(e,t,n){if(be.isString(e))try{return(t||JSON.parse)(e),be.trim(e)}catch(r){if(r.name!=="SyntaxError")throw r}return(0,JSON.stringify)(e)}const tm={transitional:JB,adapter:["xhr","http","fetch"],transformRequest:[function(t,n){const r=n.getContentType()||"",i=r.indexOf("application/json")>-1,o=be.isObject(t);if(o&&be.isHTMLForm(t)&&(t=new FormData(t)),be.isFormData(t))return i?JSON.stringify(QB(t)):t;if(be.isArrayBuffer(t)||be.isBuffer(t)||be.isStream(t)||be.isFile(t)||be.isBlob(t)||be.isReadableStream(t))return t;if(be.isArrayBufferView(t))return t.buffer;if(be.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let s;if(o){if(r.indexOf("application/x-www-form-urlencoded")>-1)return Yie(t,this.formSerializer).toString();if((s=be.isFileList(t))||r.indexOf("multipart/form-data")>-1){const l=this.env&&this.env.FormData;return Gb(s?{"files[]":t}:t,l&&new l,this.formSerializer)}}return o||i?(n.setContentType("application/json",!1),Zie(t)):t}],transformResponse:[function(t){const n=this.transitional||tm.transitional,r=n&&n.forcedJSONParsing,i=this.responseType==="json";if(be.isResponse(t)||be.isReadableStream(t))return t;if(t&&be.isString(t)&&(r&&!this.responseType||i)){const a=!(n&&n.silentJSONParsing)&&i;try{return JSON.parse(t)}catch(s){if(a)throw s.name==="SyntaxError"?Bt.from(s,Bt.ERR_BAD_RESPONSE,this,null,this.response):s}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:si.classes.FormData,Blob:si.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};be.forEach(["delete","get","head","post","put","patch"],e=>{tm.headers[e]={}});const qie=be.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Jie=e=>{const t={};let n,r,i;return e&&e.split(` +`).forEach(function(a){i=a.indexOf(":"),n=a.substring(0,i).trim().toLowerCase(),r=a.substring(i+1).trim(),!(!n||t[n]&&qie[n])&&(n==="set-cookie"?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)}),t},xL=Symbol("internals");function op(e){return e&&String(e).trim().toLowerCase()}function l_(e){return e===!1||e==null?e:be.isArray(e)?e.map(l_):String(e)}function Qie(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}const eoe=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function Rx(e,t,n,r,i){if(be.isFunction(r))return r.call(this,t,n);if(i&&(t=n),!!be.isString(t)){if(be.isString(r))return t.indexOf(r)!==-1;if(be.isRegExp(r))return r.test(t)}}function toe(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,r)=>n.toUpperCase()+r)}function noe(e,t){const n=be.toCamelCase(" "+t);["get","set","has"].forEach(r=>{Object.defineProperty(e,r+n,{value:function(i,o,a){return this[r].call(this,t,i,o,a)},configurable:!0})})}class Qi{constructor(t){t&&this.set(t)}set(t,n,r){const i=this;function o(s,l,u){const c=op(l);if(!c)throw new Error("header name must be a non-empty string");const f=be.findKey(i,c);(!f||i[f]===void 0||u===!0||u===void 0&&i[f]!==!1)&&(i[f||l]=l_(s))}const a=(s,l)=>be.forEach(s,(u,c)=>o(u,c,l));if(be.isPlainObject(t)||t instanceof this.constructor)a(t,n);else if(be.isString(t)&&(t=t.trim())&&!eoe(t))a(Jie(t),n);else if(be.isHeaders(t))for(const[s,l]of t.entries())o(l,s,r);else t!=null&&o(n,t,r);return this}get(t,n){if(t=op(t),t){const r=be.findKey(this,t);if(r){const i=this[r];if(!n)return i;if(n===!0)return Qie(i);if(be.isFunction(n))return n.call(this,i,r);if(be.isRegExp(n))return n.exec(i);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=op(t),t){const r=be.findKey(this,t);return!!(r&&this[r]!==void 0&&(!n||Rx(this,this[r],r,n)))}return!1}delete(t,n){const r=this;let i=!1;function o(a){if(a=op(a),a){const s=be.findKey(r,a);s&&(!n||Rx(r,r[s],s,n))&&(delete r[s],i=!0)}}return be.isArray(t)?t.forEach(o):o(t),i}clear(t){const n=Object.keys(this);let r=n.length,i=!1;for(;r--;){const o=n[r];(!t||Rx(this,this[o],o,t,!0))&&(delete this[o],i=!0)}return i}normalize(t){const n=this,r={};return be.forEach(this,(i,o)=>{const a=be.findKey(r,o);if(a){n[a]=l_(i),delete n[o];return}const s=t?toe(o):String(o).trim();s!==o&&delete n[o],n[s]=l_(i),r[s]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return be.forEach(this,(r,i)=>{r!=null&&r!==!1&&(n[i]=t&&be.isArray(r)?r.join(", "):r)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` +`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const r=new this(t);return n.forEach(i=>r.set(i)),r}static accessor(t){const r=(this[xL]=this[xL]={accessors:{}}).accessors,i=this.prototype;function o(a){const s=op(a);r[s]||(noe(i,a),r[s]=!0)}return be.isArray(t)?t.forEach(o):o(t),this}}Qi.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);be.reduceDescriptors(Qi.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(r){this[n]=r}}});be.freezeMethods(Qi);function Px(e,t){const n=this||tm,r=t||n,i=Qi.from(r.headers);let o=r.data;return be.forEach(e,function(s){o=s.call(n,o,i.normalize(),t?t.status:void 0)}),i.normalize(),o}function eV(e){return!!(e&&e.__CANCEL__)}function xh(e,t,n){Bt.call(this,e??"canceled",Bt.ERR_CANCELED,t,n),this.name="CanceledError"}be.inherits(xh,Bt,{__CANCEL__:!0});function tV(e,t,n){const r=n.config.validateStatus;!n.status||!r||r(n.status)?e(n):t(new Bt("Request failed with status code "+n.status,[Bt.ERR_BAD_REQUEST,Bt.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function roe(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function ioe(e,t){e=e||10;const n=new Array(e),r=new Array(e);let i=0,o=0,a;return t=t!==void 0?t:1e3,function(l){const u=Date.now(),c=r[o];a||(a=u),n[i]=l,r[i]=u;let f=o,d=0;for(;f!==i;)d+=n[f++],f=f%e;if(i=(i+1)%e,i===o&&(o=(o+1)%e),u-a{n=c,i=null,o&&(clearTimeout(o),o=null),e.apply(null,u)};return[(...u)=>{const c=Date.now(),f=c-n;f>=r?a(u,c):(i=u,o||(o=setTimeout(()=>{o=null,a(i)},r-f)))},()=>i&&a(i)]}const f1=(e,t,n=3)=>{let r=0;const i=ioe(50,250);return ooe(o=>{const a=o.loaded,s=o.lengthComputable?o.total:void 0,l=a-r,u=i(l),c=a<=s;r=a;const f={loaded:a,total:s,progress:s?a/s:void 0,bytes:l,rate:u||void 0,estimated:u&&s&&c?(s-a)/u:void 0,event:o,lengthComputable:s!=null,[t?"download":"upload"]:!0};e(f)},n)},TL=(e,t)=>{const n=e!=null;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},CL=e=>(...t)=>be.asap(()=>e(...t)),aoe=si.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,si.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(si.origin),si.navigator&&/(msie|trident)/i.test(si.navigator.userAgent)):()=>!0,soe=si.hasStandardBrowserEnv?{write(e,t,n,r,i,o){const a=[e+"="+encodeURIComponent(t)];be.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),be.isString(r)&&a.push("path="+r),be.isString(i)&&a.push("domain="+i),o===!0&&a.push("secure"),document.cookie=a.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function loe(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function uoe(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function nV(e,t){return e&&!loe(t)?uoe(e,t):t}const EL=e=>e instanceof Qi?{...e}:e;function hf(e,t){t=t||{};const n={};function r(u,c,f,d){return be.isPlainObject(u)&&be.isPlainObject(c)?be.merge.call({caseless:d},u,c):be.isPlainObject(c)?be.merge({},c):be.isArray(c)?c.slice():c}function i(u,c,f,d){if(be.isUndefined(c)){if(!be.isUndefined(u))return r(void 0,u,f,d)}else return r(u,c,f,d)}function o(u,c){if(!be.isUndefined(c))return r(void 0,c)}function a(u,c){if(be.isUndefined(c)){if(!be.isUndefined(u))return r(void 0,u)}else return r(void 0,c)}function s(u,c,f){if(f in t)return r(u,c);if(f in e)return r(void 0,u)}const l={url:o,method:o,data:o,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,withXSRFToken:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,beforeRedirect:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:s,headers:(u,c,f)=>i(EL(u),EL(c),f,!0)};return be.forEach(Object.keys(Object.assign({},e,t)),function(c){const f=l[c]||i,d=f(e[c],t[c],c);be.isUndefined(d)&&f!==s||(n[c]=d)}),n}const rV=e=>{const t=hf({},e);let{data:n,withXSRFToken:r,xsrfHeaderName:i,xsrfCookieName:o,headers:a,auth:s}=t;t.headers=a=Qi.from(a),t.url=qB(nV(t.baseURL,t.url),e.params,e.paramsSerializer),s&&a.set("Authorization","Basic "+btoa((s.username||"")+":"+(s.password?unescape(encodeURIComponent(s.password)):"")));let l;if(be.isFormData(n)){if(si.hasStandardBrowserEnv||si.hasStandardBrowserWebWorkerEnv)a.setContentType(void 0);else if((l=a.getContentType())!==!1){const[u,...c]=l?l.split(";").map(f=>f.trim()).filter(Boolean):[];a.setContentType([u||"multipart/form-data",...c].join("; "))}}if(si.hasStandardBrowserEnv&&(r&&be.isFunction(r)&&(r=r(t)),r||r!==!1&&aoe(t.url))){const u=i&&o&&soe.read(o);u&&a.set(i,u)}return t},coe=typeof XMLHttpRequest<"u",foe=coe&&function(e){return new Promise(function(n,r){const i=rV(e);let o=i.data;const a=Qi.from(i.headers).normalize();let{responseType:s,onUploadProgress:l,onDownloadProgress:u}=i,c,f,d,h,v;function m(){h&&h(),v&&v(),i.cancelToken&&i.cancelToken.unsubscribe(c),i.signal&&i.signal.removeEventListener("abort",c)}let y=new XMLHttpRequest;y.open(i.method.toUpperCase(),i.url,!0),y.timeout=i.timeout;function _(){if(!y)return;const w=Qi.from("getAllResponseHeaders"in y&&y.getAllResponseHeaders()),C={data:!s||s==="text"||s==="json"?y.responseText:y.response,status:y.status,statusText:y.statusText,headers:w,config:e,request:y};tV(function(A){n(A),m()},function(A){r(A),m()},C),y=null}"onloadend"in y?y.onloadend=_:y.onreadystatechange=function(){!y||y.readyState!==4||y.status===0&&!(y.responseURL&&y.responseURL.indexOf("file:")===0)||setTimeout(_)},y.onabort=function(){y&&(r(new Bt("Request aborted",Bt.ECONNABORTED,e,y)),y=null)},y.onerror=function(){r(new Bt("Network Error",Bt.ERR_NETWORK,e,y)),y=null},y.ontimeout=function(){let S=i.timeout?"timeout of "+i.timeout+"ms exceeded":"timeout exceeded";const C=i.transitional||JB;i.timeoutErrorMessage&&(S=i.timeoutErrorMessage),r(new Bt(S,C.clarifyTimeoutError?Bt.ETIMEDOUT:Bt.ECONNABORTED,e,y)),y=null},o===void 0&&a.setContentType(null),"setRequestHeader"in y&&be.forEach(a.toJSON(),function(S,C){y.setRequestHeader(C,S)}),be.isUndefined(i.withCredentials)||(y.withCredentials=!!i.withCredentials),s&&s!=="json"&&(y.responseType=i.responseType),u&&([d,v]=f1(u,!0),y.addEventListener("progress",d)),l&&y.upload&&([f,h]=f1(l),y.upload.addEventListener("progress",f),y.upload.addEventListener("loadend",h)),(i.cancelToken||i.signal)&&(c=w=>{y&&(r(!w||w.type?new xh(null,e,y):w),y.abort(),y=null)},i.cancelToken&&i.cancelToken.subscribe(c),i.signal&&(i.signal.aborted?c():i.signal.addEventListener("abort",c)));const b=roe(i.url);if(b&&si.protocols.indexOf(b)===-1){r(new Bt("Unsupported protocol "+b+":",Bt.ERR_BAD_REQUEST,e));return}y.send(o||null)})},doe=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let r=new AbortController,i;const o=function(u){if(!i){i=!0,s();const c=u instanceof Error?u:this.reason;r.abort(c instanceof Bt?c:new xh(c instanceof Error?c.message:c))}};let a=t&&setTimeout(()=>{a=null,o(new Bt(`timeout ${t} of ms exceeded`,Bt.ETIMEDOUT))},t);const s=()=>{e&&(a&&clearTimeout(a),a=null,e.forEach(u=>{u.unsubscribe?u.unsubscribe(o):u.removeEventListener("abort",o)}),e=null)};e.forEach(u=>u.addEventListener("abort",o));const{signal:l}=r;return l.unsubscribe=()=>be.asap(s),l}},hoe=function*(e,t){let n=e.byteLength;if(n{const i=poe(e,t);let o=0,a,s=l=>{a||(a=!0,r&&r(l))};return new ReadableStream({async pull(l){try{const{done:u,value:c}=await i.next();if(u){s(),l.close();return}let f=c.byteLength;if(n){let d=o+=f;n(d)}l.enqueue(new Uint8Array(c))}catch(u){throw s(u),u}},cancel(l){return s(l),i.return()}},{highWaterMark:2})},zb=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",iV=zb&&typeof ReadableStream=="function",goe=zb&&(typeof TextEncoder=="function"?(e=>t=>e.encode(t))(new TextEncoder):async e=>new Uint8Array(await new Response(e).arrayBuffer())),oV=(e,...t)=>{try{return!!e(...t)}catch{return!1}},moe=iV&&oV(()=>{let e=!1;const t=new Request(si.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t}),IL=64*1024,gE=iV&&oV(()=>be.isReadableStream(new Response("").body)),d1={stream:gE&&(e=>e.body)};zb&&(e=>{["text","arrayBuffer","blob","formData","stream"].forEach(t=>{!d1[t]&&(d1[t]=be.isFunction(e[t])?n=>n[t]():(n,r)=>{throw new Bt(`Response type '${t}' is not supported`,Bt.ERR_NOT_SUPPORT,r)})})})(new Response);const yoe=async e=>{if(e==null)return 0;if(be.isBlob(e))return e.size;if(be.isSpecCompliantForm(e))return(await new Request(si.origin,{method:"POST",body:e}).arrayBuffer()).byteLength;if(be.isArrayBufferView(e)||be.isArrayBuffer(e))return e.byteLength;if(be.isURLSearchParams(e)&&(e=e+""),be.isString(e))return(await goe(e)).byteLength},_oe=async(e,t)=>{const n=be.toFiniteNumber(e.getContentLength());return n??yoe(t)},boe=zb&&(async e=>{let{url:t,method:n,data:r,signal:i,cancelToken:o,timeout:a,onDownloadProgress:s,onUploadProgress:l,responseType:u,headers:c,withCredentials:f="same-origin",fetchOptions:d}=rV(e);u=u?(u+"").toLowerCase():"text";let h=doe([i,o&&o.toAbortSignal()],a),v;const m=h&&h.unsubscribe&&(()=>{h.unsubscribe()});let y;try{if(l&&moe&&n!=="get"&&n!=="head"&&(y=await _oe(c,r))!==0){let C=new Request(t,{method:"POST",body:r,duplex:"half"}),T;if(be.isFormData(r)&&(T=C.headers.get("content-type"))&&c.setContentType(T),C.body){const[A,P]=TL(y,f1(CL(l)));r=AL(C.body,IL,A,P)}}be.isString(f)||(f=f?"include":"omit");const _="credentials"in Request.prototype;v=new Request(t,{...d,signal:h,method:n.toUpperCase(),headers:c.normalize().toJSON(),body:r,duplex:"half",credentials:_?f:void 0});let b=await fetch(v);const w=gE&&(u==="stream"||u==="response");if(gE&&(s||w&&m)){const C={};["status","statusText","headers"].forEach(I=>{C[I]=b[I]});const T=be.toFiniteNumber(b.headers.get("content-length")),[A,P]=s&&TL(T,f1(CL(s),!0))||[];b=new Response(AL(b.body,IL,A,()=>{P&&P(),m&&m()}),C)}u=u||"text";let S=await d1[be.findKey(d1,u)||"text"](b,e);return!w&&m&&m(),await new Promise((C,T)=>{tV(C,T,{data:S,headers:Qi.from(b.headers),status:b.status,statusText:b.statusText,config:e,request:v})})}catch(_){throw m&&m(),_&&_.name==="TypeError"&&/fetch/i.test(_.message)?Object.assign(new Bt("Network Error",Bt.ERR_NETWORK,e,v),{cause:_.cause||_}):Bt.from(_,_&&_.code,e,v)}}),mE={http:Nie,xhr:foe,fetch:boe};be.forEach(mE,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const RL=e=>`- ${e}`,Soe=e=>be.isFunction(e)||e===null||e===!1,aV={getAdapter:e=>{e=be.isArray(e)?e:[e];const{length:t}=e;let n,r;const i={};for(let o=0;o`adapter ${s} `+(l===!1?"is not supported by the environment":"is not available in the build"));let a=t?o.length>1?`since : +`+o.map(RL).join(` +`):" "+RL(o[0]):"as no adapter specified";throw new Bt("There is no suitable adapter to dispatch the request "+a,"ERR_NOT_SUPPORT")}return r},adapters:mE};function Ox(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new xh(null,e)}function PL(e){return Ox(e),e.headers=Qi.from(e.headers),e.data=Px.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),aV.getAdapter(e.adapter||tm.adapter)(e).then(function(r){return Ox(e),r.data=Px.call(e,e.transformResponse,r),r.headers=Qi.from(r.headers),r},function(r){return eV(r)||(Ox(e),r&&r.response&&(r.response.data=Px.call(e,e.transformResponse,r.response),r.response.headers=Qi.from(r.response.headers))),Promise.reject(r)})}const sV="1.7.9",Wb={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Wb[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}});const OL={};Wb.transitional=function(t,n,r){function i(o,a){return"[Axios v"+sV+"] Transitional option '"+o+"'"+a+(r?". "+r:"")}return(o,a,s)=>{if(t===!1)throw new Bt(i(a," has been removed"+(n?" in "+n:"")),Bt.ERR_DEPRECATED);return n&&!OL[a]&&(OL[a]=!0,console.warn(i(a," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(o,a,s):!0}};Wb.spelling=function(t){return(n,r)=>(console.warn(`${r} is likely a misspelling of ${t}`),!0)};function woe(e,t,n){if(typeof e!="object")throw new Bt("options must be an object",Bt.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let i=r.length;for(;i-- >0;){const o=r[i],a=t[o];if(a){const s=e[o],l=s===void 0||a(s,o,e);if(l!==!0)throw new Bt("option "+o+" must be "+l,Bt.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new Bt("Unknown option "+o,Bt.ERR_BAD_OPTION)}}const u_={assertOptions:woe,validators:Wb},Wa=u_.validators;class Qc{constructor(t){this.defaults=t,this.interceptors={request:new wL,response:new wL}}async request(t,n){try{return await this._request(t,n)}catch(r){if(r instanceof Error){let i={};Error.captureStackTrace?Error.captureStackTrace(i):i=new Error;const o=i.stack?i.stack.replace(/^.+\n/,""):"";try{r.stack?o&&!String(r.stack).endsWith(o.replace(/^.+\n.+\n/,""))&&(r.stack+=` +`+o):r.stack=o}catch{}}throw r}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=hf(this.defaults,n);const{transitional:r,paramsSerializer:i,headers:o}=n;r!==void 0&&u_.assertOptions(r,{silentJSONParsing:Wa.transitional(Wa.boolean),forcedJSONParsing:Wa.transitional(Wa.boolean),clarifyTimeoutError:Wa.transitional(Wa.boolean)},!1),i!=null&&(be.isFunction(i)?n.paramsSerializer={serialize:i}:u_.assertOptions(i,{encode:Wa.function,serialize:Wa.function},!0)),u_.assertOptions(n,{baseUrl:Wa.spelling("baseURL"),withXsrfToken:Wa.spelling("withXSRFToken")},!0),n.method=(n.method||this.defaults.method||"get").toLowerCase();let a=o&&be.merge(o.common,o[n.method]);o&&be.forEach(["delete","get","head","post","put","patch","common"],v=>{delete o[v]}),n.headers=Qi.concat(a,o);const s=[];let l=!0;this.interceptors.request.forEach(function(m){typeof m.runWhen=="function"&&m.runWhen(n)===!1||(l=l&&m.synchronous,s.unshift(m.fulfilled,m.rejected))});const u=[];this.interceptors.response.forEach(function(m){u.push(m.fulfilled,m.rejected)});let c,f=0,d;if(!l){const v=[PL.bind(this),void 0];for(v.unshift.apply(v,s),v.push.apply(v,u),d=v.length,c=Promise.resolve(n);f{if(!r._listeners)return;let o=r._listeners.length;for(;o-- >0;)r._listeners[o](i);r._listeners=null}),this.promise.then=i=>{let o;const a=new Promise(s=>{r.subscribe(s),o=s}).then(i);return a.cancel=function(){r.unsubscribe(o)},a},t(function(o,a,s){r.reason||(r.reason=new xh(o,a,s),n(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=r=>{t.abort(r)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new YI(function(i){t=i}),cancel:t}}}function xoe(e){return function(n){return e.apply(null,n)}}function Toe(e){return be.isObject(e)&&e.isAxiosError===!0}const yE={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(yE).forEach(([e,t])=>{yE[t]=e});function lV(e){const t=new Qc(e),n=BB(Qc.prototype.request,t);return be.extend(n,Qc.prototype,t,{allOwnKeys:!0}),be.extend(n,t,null,{allOwnKeys:!0}),n.create=function(i){return lV(hf(e,i))},n}const Gt=lV(tm);Gt.Axios=Qc;Gt.CanceledError=xh;Gt.CancelToken=YI;Gt.isCancel=eV;Gt.VERSION=sV;Gt.toFormData=Gb;Gt.AxiosError=Bt;Gt.Cancel=Gt.CanceledError;Gt.all=function(t){return Promise.all(t)};Gt.spread=xoe;Gt.isAxiosError=Toe;Gt.mergeConfig=hf;Gt.AxiosHeaders=Qi;Gt.formToJSON=e=>QB(be.isHTMLForm(e)?new FormData(e):e);Gt.getAdapter=aV.getAdapter;Gt.HttpStatusCode=yE;Gt.default=Gt;var c_={exports:{}},Coe=c_.exports,DL;function Eoe(){return DL||(DL=1,function(e){(function(t,n){e.exports?e.exports=n():t.ReconnectingWebSocket=n()})(Coe,function(){if(!("WebSocket"in window))return;function t(n,r,i){var o={debug:!1,automaticOpen:!0,reconnectInterval:1e3,maxReconnectInterval:3e4,reconnectDecay:1.5,timeoutInterval:2e3,maxReconnectAttempts:null};i||(i={});for(var a in o)typeof i[a]<"u"?this[a]=i[a]:this[a]=o[a];this.url=n,this.reconnectAttempts=0,this.readyState=WebSocket.CONNECTING,this.protocol=null;var s=this,l,u=!1,c=!1,f=document.createElement("div");f.addEventListener("open",function(h){s.onopen(h)}),f.addEventListener("close",function(h){s.onclose(h)}),f.addEventListener("connecting",function(h){s.onconnecting(h)}),f.addEventListener("message",function(h){s.onmessage(h)}),f.addEventListener("error",function(h){s.onerror(h)}),this.addEventListener=f.addEventListener.bind(f),this.removeEventListener=f.removeEventListener.bind(f),this.dispatchEvent=f.dispatchEvent.bind(f);function d(h,v){var m=document.createEvent("CustomEvent");return m.initCustomEvent(h,!1,!1,v),m}this.open=function(h){if(l=new WebSocket(s.url,r||[]),h){if(this.maxReconnectAttempts&&this.reconnectAttempts>this.maxReconnectAttempts)return}else f.dispatchEvent(d("connecting")),this.reconnectAttempts=0;(s.debug||t.debugAll)&&console.debug("ReconnectingWebSocket","attempt-connect",s.url);var v=l,m=setTimeout(function(){(s.debug||t.debugAll)&&console.debug("ReconnectingWebSocket","connection-timeout",s.url),c=!0,v.close(),c=!1},s.timeoutInterval);l.onopen=function(y){clearTimeout(m),(s.debug||t.debugAll)&&console.debug("ReconnectingWebSocket","onopen",s.url),s.protocol=l.protocol,s.readyState=WebSocket.OPEN,s.reconnectAttempts=0;var _=d("open");_.isReconnect=h,h=!1,f.dispatchEvent(_)},l.onclose=function(y){if(clearTimeout(b),l=null,u)s.readyState=WebSocket.CLOSED,f.dispatchEvent(d("close"));else{s.readyState=WebSocket.CONNECTING;var _=d("connecting");_.code=y.code,_.reason=y.reason,_.wasClean=y.wasClean,f.dispatchEvent(_),!h&&!c&&((s.debug||t.debugAll)&&console.debug("ReconnectingWebSocket","onclose",s.url),f.dispatchEvent(d("close")));var b=s.reconnectInterval*Math.pow(s.reconnectDecay,s.reconnectAttempts);setTimeout(function(){s.reconnectAttempts++,s.open(!0)},b>s.maxReconnectInterval?s.maxReconnectInterval:b)}},l.onmessage=function(y){(s.debug||t.debugAll)&&console.debug("ReconnectingWebSocket","onmessage",s.url,y.data);var _=d("message");_.data=y.data,f.dispatchEvent(_)},l.onerror=function(y){(s.debug||t.debugAll)&&console.debug("ReconnectingWebSocket","onerror",s.url,y),f.dispatchEvent(d("error"))}},this.automaticOpen==!0&&this.open(!1),this.send=function(h){if(l)return(s.debug||t.debugAll)&&console.debug("ReconnectingWebSocket","send",s.url,h),l.send(h);throw"INVALID_STATE_ERR : Pausing to reconnect websocket"},this.close=function(h,v){typeof h>"u"&&(h=1e3),u=!0,l&&l.close(h,v)},this.refresh=function(){l&&l.close()}}return t.prototype.onopen=function(n){},t.prototype.onclose=function(n){},t.prototype.onconnecting=function(n){},t.prototype.onmessage=function(n){},t.prototype.onerror=function(n){},t.debugAll=!1,t.CONNECTING=WebSocket.CONNECTING,t.OPEN=WebSocket.OPEN,t.CLOSING=WebSocket.CLOSING,t.CLOSED=WebSocket.CLOSED,t})}(c_)),c_.exports}var Aoe=Eoe();const Ioe=Vg(Aoe);Gt.interceptors.request.use(e=>{var t;return e.baseURL=Eu(fl.value),e.headers.Authorization="Bearer "+((t=fl.value)==null?void 0:t.password),e});Gt.interceptors.response.use(null,e=>(e.status===401&&ci.value?(DB(ci.value),ci.value=null,Fa.push({name:un.setup}),gs(()=>{const{showTip:t}=Lb();t("unauthorizedTip")})):e.status===404&&(ci.value=null,Fa.push({name:un.setup})),e));const dg=Fe(),_E=Fe(!1),Roe=()=>Gt.get("/version"),hl=Ve(()=>{var e;return(e=dg.value)==null?void 0:e.includes("sing-box")}),uV=Fe("1.48.0");Yt(fl,async e=>{if(e){const{data:t}=await Roe();if(dg.value=t.version,hl.value)return;_E.value=await joe(),_E.value&&K0.value&&hV()}},{immediate:!0});const Poe=()=>Gt.get("/proxies"),Ooe=(e,t)=>Gt.put(`/proxies/${encodeURIComponent(e)}`,{name:t}),ML=(e,t,n)=>Gt.get(`/proxies/${encodeURIComponent(e)}/delay`,{params:{url:t,timeout:n}}),LL=(e,t,n)=>Gt.get(`/group/${encodeURIComponent(e)}/delay`,{params:{url:t,timeout:n}}),Doe=()=>Gt.get("/providers/proxies"),cV=e=>Gt.put(`/providers/proxies/${encodeURIComponent(e)}`),Moe=e=>Gt.get(`/providers/proxies/${encodeURIComponent(e)}/healthcheck`,{timeout:15e3}),Loe=()=>Gt.get("/rules"),Noe=()=>Gt.get("/providers/rules"),fV=e=>Gt.put(`/providers/rules/${encodeURIComponent(e)}`),jb=e=>Gt.delete(`/connections/${e}`),koe=()=>Gt.get("/configs"),Foe=e=>Gt.patch("/configs",e),NL=()=>Gt.post("/cache/fakeip/flush"),$oe=()=>Gt.put("/configs?reload=true",{path:"",payload:""}),dV=()=>Gt.post("/upgrade/ui"),hV=()=>Gt.post("/upgrade"),Boe=()=>Gt.post("/restart"),Voe=e=>Gt.get("/dns/query",{params:e}),Yb=(e,t)=>{const n=fl.value,r=new URL(`${Eu(n).replace("http","ws")}/${e}`);r.searchParams.append("token",(n==null?void 0:n.password)||""),t&&Object.entries(t).forEach(([s,l])=>{r.searchParams.append(s,l)});const i=Fe(),o=new Ioe(r.toString()),a=()=>{o.close()};return o.onmessage=({data:s})=>{i.value=JSON.parse(s)},{data:i,close:a}},Uoe=()=>Yb("connections"),Hoe=(e={})=>Yb("logs",e),Goe=()=>Yb("memory"),zoe=()=>Yb("traffic"),kL=async(e,t=1e4)=>{const n=new AbortController,r=setTimeout(()=>n.abort(),t);try{return(await fetch(`${Eu(e)}/version`,{method:"GET",headers:{Authorization:`Bearer ${e.password}`},signal:n.signal})).ok}catch{return!1}finally{clearTimeout(r)}},Woe=async()=>{const e=await fetch("https://api.github.com/repos/Zephyruso/zashboard/releases/latest"),{tag_name:t}=await e.json();return t&&t!==`v${uV.value}`},FL=async(e,t)=>{const n=await fetch(`https://api.github.com/repos/MetaCubeX/mihomo${e}`),{assets:r}=await n.json();return!r.some(({name:o})=>o.includes(t))},joe=async()=>{const e=/(alpha|beta|meta)-?(\w+)/.exec(dg.value);if(!e){const r=await fetch("https://api.github.com/repos/MetaCubeX/mihomo/releases/latest"),{tag_name:i}=await r.json();return i&&!i.endsWith(dg.value)}const t=e[1],n=e[2];return t==="meta"?await FL("/releases/latest",n):t==="alpha"?await FL("/releases/tags/Prerelease-Alpha",n):!1},Yoe=()=>fetch("https://api-v3.speedtest.cn/ip"),pV=async(e="")=>await(await fetch("https://api.ip.sb/geoip"+(e?`/${e}`:""))).json(),nm=e=>new Promise(t=>{const n=performance.now(),r=document.createElement("img");r.src=e+"?_="+new Date().getTime(),r.style.display="none",r.onload=()=>{const i=performance.now();r.remove(),t(i-n)},r.onerror=()=>{r.remove(),t(0)},document.body.appendChild(r)}),Xoe=()=>nm("https://www.cloudflare.com/favicon.ico"),Koe=()=>nm("https://yt3.ggpht.com/favicon.ico"),Zoe=()=>nm("https://github.githubassets.com/favicon.ico"),qoe=()=>nm("https://openai.com/favicon.ico"),Joe=()=>nm("https://apps.bdimg.com/favicon.ico"),ea=Fe([]),f_=Fe([]),hg=Fe(0),pg=Fe(0);let Oy;const Qoe=()=>{Oy==null||Oy(),ea.value=[],f_.value=[],hg.value=0,pg.value=0;const e=Uoe(),t=Yt(e.data,n=>{var r;n&&(hg.value=n.downloadTotal,pg.value=n.uploadTotal,!v_.value&&(f_.value=[...f_.value,...Ai.differenceWith(ea.value,n.connections,(i,o)=>i.id===o.id)].slice(-500),ea.value=((r=n.connections)==null?void 0:r.map(i=>{const o=ea.value.find(a=>a.id===i.id);return(i.metadata.destinationPort==="443"||i.metadata.sniffHost)&&i.metadata.network==="udp"&&(i.metadata.network="quic"),o?{...i,downloadSpeed:i.download-o.download,uploadSpeed:i.upload-o.upload}:{...i,downloadSpeed:0,uploadSpeed:0}}))??[]))});Oy=()=>{t(),e.close()}},bv=Mt("config/quick-filter-regex","direct|dns-out"),d_=Mt("config/quick-filter-enabled",!1),Cc=Fe(zs.ACTIVE),eae=Ve(()=>p_.value===Lc.DESC),$L={[zi.HOST]:(e,t)=>(e.metadata.host||e.metadata.destinationIP).localeCompare(t.metadata.host||t.metadata.destinationIP),[zi.RULE]:(e,t)=>e.rule.localeCompare(t.rule),[zi.CHAINS]:(e,t)=>e.chains.join("").localeCompare(t.chains.join("")),[zi.DOWNLOAD]:(e,t)=>e.download-t.download,[zi.DOWNLOAD_SPEED]:(e,t)=>e.downloadSpeed-t.downloadSpeed,[zi.UPLOAD]:(e,t)=>e.upload-t.upload,[zi.UPLOAD_SPEED]:(e,t)=>e.uploadSpeed-t.uploadSpeed,[zi.SOURCE_IP]:(e,t)=>e.metadata.sourceIP.localeCompare(t.metadata.sourceIP),[zi.TYPE]:(e,t)=>(e.metadata.type+e.metadata.network).localeCompare(t.metadata.type+t.metadata.network),[zi.CONNECT_TIME]:(e,t)=>La(e.start).valueOf()-La(t.start).valueOf()},h_=Mt("config/connection-sort-type",zi.HOST),p_=Mt("config/connection-sort-direction",Lc.ASC),Sv=Fe(""),v_=Fe(!1),Fd=Ve(()=>{let e=null;return d_.value&&bv.value&&(e=new RegExp(bv.value,"i")),(Cc.value===zs.ACTIVE?ea.value:f_.value).filter(t=>e&&(e.test(t.chains.join(""))||e.test(t.metadata.host)||e.test(t.metadata.destinationIP))||Us.value!==null&&t.metadata.sourceIP!==Us.value?!1:Sv.value?[t.metadata.host,t.metadata.destinationIP,t.metadata.destinationPort,t.metadata.sourceIP,t.metadata.sourcePort,t.metadata.processPath,t.metadata.type,t.metadata.network,t.chains.join(""),t.rule,t.rulePayload].some(n=>n==null?void 0:n.includes(Sv.value)):!0).sort((t,n)=>{eae.value&&([t,n]=[n,t]);const r=kc.value?$L[h_.value](t,n):$L[zi.HOST](t,n);return r===0?t.id.localeCompare(n.id):r})}),Us=Fe(null),tae=Ve(()=>Ore.uniq(ea.value.map(e=>e.metadata.sourceIP)).sort());function Xf(e,t,n){let r=n.initialDeps??[],i;return()=>{var o,a,s,l;let u;n.key&&((o=n.debug)!=null&&o.call(n))&&(u=Date.now());const c=e();if(!(c.length!==r.length||c.some((h,v)=>r[v]!==h)))return i;r=c;let d;if(n.key&&((a=n.debug)!=null&&a.call(n))&&(d=Date.now()),i=t(...c),n.key&&((s=n.debug)!=null&&s.call(n))){const h=Math.round((Date.now()-u)*100)/100,v=Math.round((Date.now()-d)*100)/100,m=v/16,y=(_,b)=>{for(_=String(_);_.lengthMath.abs(e-t)<1,rae=(e,t,n)=>{let r;return function(...i){e.clearTimeout(r),r=e.setTimeout(()=>t.apply(this,i),n)}},iae=e=>e,oae=e=>{const t=Math.max(e.startIndex-e.overscan,0),n=Math.min(e.endIndex+e.overscan,e.count-1),r=[];for(let i=t;i<=n;i++)r.push(i);return r},aae=(e,t)=>{const n=e.scrollElement;if(!n)return;const r=e.targetWindow;if(!r)return;const i=a=>{const{width:s,height:l}=a;t({width:Math.round(s),height:Math.round(l)})};if(i(n.getBoundingClientRect()),!r.ResizeObserver)return()=>{};const o=new r.ResizeObserver(a=>{const s=a[0];if(s!=null&&s.borderBoxSize){const l=s.borderBoxSize[0];if(l){i({width:l.inlineSize,height:l.blockSize});return}}i(n.getBoundingClientRect())});return o.observe(n,{box:"border-box"}),()=>{o.unobserve(n)}},BL={passive:!0},sae=typeof window>"u"?!0:"onscrollend"in window,lae=(e,t)=>{const n=e.scrollElement;if(!n)return;const r=e.targetWindow;if(!r)return;let i=0;const o=e.options.useScrollendEvent&&sae?()=>{}:rae(r,()=>{t(i,!1)},e.options.isScrollingResetDelay),a=u=>()=>{const{horizontal:c,isRtl:f}=e.options;i=c?n.scrollLeft*(f&&-1||1):n.scrollTop,o(),t(i,u)},s=a(!0),l=a(!1);return l(),n.addEventListener("scroll",s,BL),n.addEventListener("scrollend",l,BL),()=>{n.removeEventListener("scroll",s),n.removeEventListener("scrollend",l)}},uae=(e,t,n)=>{if(t!=null&&t.borderBoxSize){const r=t.borderBoxSize[0];if(r)return Math.round(r[n.options.horizontal?"inlineSize":"blockSize"])}return Math.round(e.getBoundingClientRect()[n.options.horizontal?"width":"height"])},cae=(e,{adjustments:t=0,behavior:n},r)=>{var i,o;const a=e+t;(o=(i=r.scrollElement)==null?void 0:i.scrollTo)==null||o.call(i,{[r.options.horizontal?"left":"top"]:a,behavior:n})};class fae{constructor(t){this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.isScrolling=!1,this.scrollToIndexTimeoutId=null,this.measurementsCache=[],this.itemSizeCache=new Map,this.pendingMeasuredCacheIndexes=[],this.scrollRect=null,this.scrollOffset=null,this.scrollDirection=null,this.scrollAdjustments=0,this.elementsCache=new Map,this.observer=(()=>{let n=null;const r=()=>n||(!this.targetWindow||!this.targetWindow.ResizeObserver?null:n=new this.targetWindow.ResizeObserver(i=>{i.forEach(o=>{this._measureElement(o.target,o)})}));return{disconnect:()=>{var i;(i=r())==null||i.disconnect(),n=null},observe:i=>{var o;return(o=r())==null?void 0:o.observe(i,{box:"border-box"})},unobserve:i=>{var o;return(o=r())==null?void 0:o.unobserve(i)}}})(),this.range=null,this.setOptions=n=>{Object.entries(n).forEach(([r,i])=>{typeof i>"u"&&delete n[r]}),this.options={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:iae,rangeExtractor:oae,onChange:()=>{},measureElement:uae,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:"data-index",initialMeasurementsCache:[],lanes:1,isScrollingResetDelay:150,enabled:!0,isRtl:!1,useScrollendEvent:!0,...n}},this.notify=n=>{var r,i;(i=(r=this.options).onChange)==null||i.call(r,this,n)},this.maybeNotify=Xf(()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]),n=>{this.notify(n)},{key:!1,debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach(n=>n()),this.unsubs=[],this.observer.disconnect(),this.scrollElement=null,this.targetWindow=null},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{var n;const r=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==r){if(this.cleanup(),!r){this.maybeNotify();return}this.scrollElement=r,this.scrollElement&&"ownerDocument"in this.scrollElement?this.targetWindow=this.scrollElement.ownerDocument.defaultView:this.targetWindow=((n=this.scrollElement)==null?void 0:n.window)??null,this.elementsCache.forEach(i=>{this.observer.observe(i)}),this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0}),this.unsubs.push(this.options.observeElementRect(this,i=>{this.scrollRect=i,this.maybeNotify()})),this.unsubs.push(this.options.observeElementOffset(this,(i,o)=>{this.scrollAdjustments=0,this.scrollDirection=o?this.getScrollOffset()this.options.enabled?(this.scrollRect=this.scrollRect??this.options.initialRect,this.scrollRect[this.options.horizontal?"width":"height"]):(this.scrollRect=null,0),this.getScrollOffset=()=>this.options.enabled?(this.scrollOffset=this.scrollOffset??(typeof this.options.initialOffset=="function"?this.options.initialOffset():this.options.initialOffset),this.scrollOffset):(this.scrollOffset=null,0),this.getFurthestMeasurement=(n,r)=>{const i=new Map,o=new Map;for(let a=r-1;a>=0;a--){const s=n[a];if(i.has(s.lane))continue;const l=o.get(s.lane);if(l==null||s.end>l.end?o.set(s.lane,s):s.enda.end===s.end?a.index-s.index:a.end-s.end)[0]:void 0},this.getMeasurementOptions=Xf(()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled],(n,r,i,o,a)=>(this.pendingMeasuredCacheIndexes=[],{count:n,paddingStart:r,scrollMargin:i,getItemKey:o,enabled:a}),{key:!1}),this.getMeasurements=Xf(()=>[this.getMeasurementOptions(),this.itemSizeCache],({count:n,paddingStart:r,scrollMargin:i,getItemKey:o,enabled:a},s)=>{if(!a)return this.measurementsCache=[],this.itemSizeCache.clear(),[];this.measurementsCache.length===0&&(this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach(c=>{this.itemSizeCache.set(c.key,c.size)}));const l=this.pendingMeasuredCacheIndexes.length>0?Math.min(...this.pendingMeasuredCacheIndexes):0;this.pendingMeasuredCacheIndexes=[];const u=this.measurementsCache.slice(0,l);for(let c=l;cthis.options.debug}),this.calculateRange=Xf(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset()],(n,r,i)=>this.range=n.length>0&&r>0?dae({measurements:n,outerSize:r,scrollOffset:i}):null,{key:!1,debug:()=>this.options.debug}),this.getIndexes=Xf(()=>[this.options.rangeExtractor,this.calculateRange(),this.options.overscan,this.options.count],(n,r,i,o)=>r===null?[]:n({startIndex:r.startIndex,endIndex:r.endIndex,overscan:i,count:o}),{key:!1,debug:()=>this.options.debug}),this.indexFromElement=n=>{const r=this.options.indexAttribute,i=n.getAttribute(r);return i?parseInt(i,10):(console.warn(`Missing attribute name '${r}={index}' on measured element.`),-1)},this._measureElement=(n,r)=>{const i=this.indexFromElement(n),o=this.measurementsCache[i];if(!o)return;const a=o.key,s=this.elementsCache.get(a);s!==n&&(s&&this.observer.unobserve(s),this.observer.observe(n),this.elementsCache.set(a,n)),n.isConnected&&this.resizeItem(i,this.options.measureElement(n,r,this))},this.resizeItem=(n,r)=>{const i=this.measurementsCache[n];if(!i)return;const o=this.itemSizeCache.get(i.key)??i.size,a=r-o;a!==0&&((this.shouldAdjustScrollPositionOnItemSizeChange!==void 0?this.shouldAdjustScrollPositionOnItemSizeChange(i,a,this):i.start{if(!n){this.elementsCache.forEach((r,i)=>{r.isConnected||(this.observer.unobserve(r),this.elementsCache.delete(i))});return}this._measureElement(n,void 0)},this.getVirtualItems=Xf(()=>[this.getIndexes(),this.getMeasurements()],(n,r)=>{const i=[];for(let o=0,a=n.length;othis.options.debug}),this.getVirtualItemForOffset=n=>{const r=this.getMeasurements();if(r.length!==0)return Dx(r[vV(0,r.length-1,i=>Dx(r[i]).start,n)])},this.getOffsetForAlignment=(n,r)=>{const i=this.getSize(),o=this.getScrollOffset();r==="auto"&&n>=o+i&&(r="end"),r==="end"&&(n-=i);const a=this.options.horizontal?"scrollWidth":"scrollHeight",l=(this.scrollElement?"document"in this.scrollElement?this.scrollElement.document.documentElement[a]:this.scrollElement[a]:0)-i;return Math.max(Math.min(l,n),0)},this.getOffsetForIndex=(n,r="auto")=>{n=Math.max(0,Math.min(n,this.options.count-1));const i=this.measurementsCache[n];if(!i)return;const o=this.getSize(),a=this.getScrollOffset();if(r==="auto")if(i.end>=a+o-this.options.scrollPaddingEnd)r="end";else if(i.start<=a+this.options.scrollPaddingStart)r="start";else return[a,r];const s=i.start-this.options.scrollPaddingStart+(i.size-o)/2;switch(r){case"center":return[this.getOffsetForAlignment(s,r),r];case"end":return[this.getOffsetForAlignment(i.end+this.options.scrollPaddingEnd,r),r];default:return[this.getOffsetForAlignment(i.start-this.options.scrollPaddingStart,r),r]}},this.isDynamicMode=()=>this.elementsCache.size>0,this.cancelScrollToIndex=()=>{this.scrollToIndexTimeoutId!==null&&this.targetWindow&&(this.targetWindow.clearTimeout(this.scrollToIndexTimeoutId),this.scrollToIndexTimeoutId=null)},this.scrollToOffset=(n,{align:r="start",behavior:i}={})=>{this.cancelScrollToIndex(),i==="smooth"&&this.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),this._scrollToOffset(this.getOffsetForAlignment(n,r),{adjustments:void 0,behavior:i})},this.scrollToIndex=(n,{align:r="auto",behavior:i}={})=>{n=Math.max(0,Math.min(n,this.options.count-1)),this.cancelScrollToIndex(),i==="smooth"&&this.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size.");const o=this.getOffsetForIndex(n,r);if(!o)return;const[a,s]=o;this._scrollToOffset(a,{adjustments:void 0,behavior:i}),i!=="smooth"&&this.isDynamicMode()&&this.targetWindow&&(this.scrollToIndexTimeoutId=this.targetWindow.setTimeout(()=>{if(this.scrollToIndexTimeoutId=null,this.elementsCache.has(this.options.getItemKey(n))){const[u]=Dx(this.getOffsetForIndex(n,s));nae(u,this.getScrollOffset())||this.scrollToIndex(n,{align:s,behavior:i})}else this.scrollToIndex(n,{align:s,behavior:i})}))},this.scrollBy=(n,{behavior:r}={})=>{this.cancelScrollToIndex(),r==="smooth"&&this.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),this._scrollToOffset(this.getScrollOffset()+n,{adjustments:void 0,behavior:r})},this.getTotalSize=()=>{var n;const r=this.getMeasurements();let i;return r.length===0?i=this.options.paddingStart:i=this.options.lanes===1?((n=r[r.length-1])==null?void 0:n.end)??0:Math.max(...r.slice(-this.options.lanes).map(o=>o.end)),Math.max(i-this.options.scrollMargin+this.options.paddingEnd,0)},this._scrollToOffset=(n,{adjustments:r,behavior:i})=>{this.options.scrollToFn(n,{behavior:i,adjustments:r},this)},this.measure=()=>{this.itemSizeCache=new Map,this.notify(!1)},this.setOptions(t)}}const vV=(e,t,n,r)=>{for(;e<=t;){const i=(e+t)/2|0,o=n(i);if(or)t=i-1;else return i}return e>0?e-1:0};function dae({measurements:e,outerSize:t,scrollOffset:n}){const r=e.length-1,o=vV(0,r,s=>e[s].start,n);let a=o;for(;aN(e).getScrollElement(),i=>{i&&t._willUpdate()},{immediate:!0}),Yt(()=>N(e),i=>{t.setOptions({...i,onChange:(o,a)=>{var s;kC(n),(s=i.onChange)==null||s.call(i,o,a)}}),t._willUpdate(),kC(n)},{immediate:!0}),rI(r),n}function gV(e){return hae(Ve(()=>({observeElementRect:aae,observeElementOffset:lae,scrollToFn:cae,...N(e)})))}const pae=["data-index"],XI=it({__name:"VirtualScroller",props:{data:{}},setup(e){const t=Fe(null),n=e,r=Ve(()=>({count:n.data.length,getScrollElement:()=>t.value,estimateSize:()=>55,overscan:24})),i=gV(r),o=Ve(()=>i.value.getVirtualItems()),a=Ve(()=>i.value.getTotalSize()),s=l=>{l&&i.value.measureElement(l)};return(l,u)=>{var c;return K(),ae("div",{ref_key:"parentRef",ref:t,class:"flex h-full w-full overflow-y-auto p-2"},[L("div",{style:Gr({height:`${a.value}px`}),class:"relative w-full max-sm:min-h-[calc(100%+1px)]"},[L("div",{class:"absolute left-0 top-0 w-full",style:Gr({transform:`translateY(${((c=o.value[0])==null?void 0:c.start)??0}px)`})},[(K(!0),ae(Ze,null,on(o.value,f=>(K(),ae("div",{key:f.key.toString(),"data-index":f.index,ref_for:!0,ref:s},[Md(l.$slots,"default",{item:l.data[f.index],index:f.index})],8,pae))),128))],4)],4)],512)}}}),VL=Fe(),UL=Fe(),KI=()=>({infoConn:VL,modalRef:UL,handlerInfo:t=>{var n;VL.value=t,(n=UL.value)==null||n.showModal()}}),vae=it({props:{conn:Object},name:"ConnectionCard",setup(e){const{handlerInfo:t}=KI();return()=>{const n={[vt.Host]:ye("span",{class:"w-80 grow break-all text-primary/80"},[e.conn.metadata.host||e.conn.metadata.destinationIP]),[vt.Destination]:ye("span",{class:"w-80 grow break-all"},[kB(e.conn)]),[vt.SourceIP]:ye("span",{class:"w-80 grow break-all"},[u1(e.conn.metadata.sourceIP)]),[vt.SourcePort]:ye("span",{class:"w-80 grow break-all"},[e.conn.metadata.sourcePort]),[vt.Type]:ye("span",{class:"w-80 grow break-all"},[FB(e.conn)]),[vt.Rule]:ye("span",{class:"w-80 grow break-all"},[e.conn.rule,e.conn.rulePayload&&ye(Ze,null,[ft(": "),e.conn.rulePayload])]),[vt.Process]:ye("span",{class:"w-80 grow break-all"},[NB(e.conn)]),[vt.Chains]:ye("span",{class:["flex w-80 grow items-center gap-1 break-all",_v.value===qg.REVERSE&&"flex-row-reverse justify-end"]},[Ai.last(e.conn.chains),Ai.last(e.conn.chains)!==Ai.first(e.conn.chains)&&ye(Ze,null,[ye(ff,{class:"h-4 w-4"},null),Ai.first(e.conn.chains)])]),[vt.Download]:ye("div",{class:"flex items-center gap-1 whitespace-nowrap"},[Tn(e.conn.download),ye(gQ,{class:"h-4 w-4"},null)]),[vt.Upload]:ye("div",{class:"flex items-center gap-1 whitespace-nowrap"},[Tn(e.conn.upload),ye(yQ,{class:"h-4 w-4"},null)]),[vt.DlSpeed]:ye("div",{class:"flex items-center gap-1 whitespace-nowrap"},[Tn(e.conn.downloadSpeed),ft("/s"),ye(Eb,{class:"h-4 w-4"},null)]),[vt.UlSpeed]:ye("div",{class:"flex items-center gap-1 whitespace-nowrap"},[Tn(e.conn.uploadSpeed),ft("/s"),ye(Kg,{class:"h-4 w-4"},null)]),[vt.ConnectTime]:ye("div",{class:"gap-1 whitespace-nowrap"},[Bb(e.conn.start)]),[vt.Details]:ye("button",{class:"btn btn-circle btn-xs",onClick:()=>t(e.conn)},[ye(G4,{class:"h-4 w-4"},null)]),[vt.Close]:ye("button",{class:"btn btn-circle btn-xs",onClick:()=>jb(e.conn.id)},[ye(Ib,{class:"h-4 w-4"},null)])};return ye("div",{class:"card gap-1 p-1"},[Fs.value.map(r=>ye("div",{class:"flex items-center gap-1 text-sm"},[r.map(i=>n[i])]))])}}}),gae={key:0,class:"card m-2 flex-row p-2 text-sm"},mae=it({__name:"ConnectionCardList",setup(e){return(t,n)=>N(Fd).length?(K(),Ot(XI,{key:1,data:N(Fd)},{default:Mr(({item:r})=>[ye(N(vae),{class:"mb-1",conn:r},null,8,["conn"])]),_:1},8,["data"])):(K(),ae("div",gae,re(t.$t("noContent")),1))}});/** + * table-core + * + * Copyright (c) TanStack + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function uu(e,t){return typeof e=="function"?e(t):e}function Io(e,t){return n=>{t.setState(r=>({...r,[e]:uu(n,r[e])}))}}function ef(e){return e instanceof Function}function yae(e){return Array.isArray(e)&&e.every(t=>typeof t=="number")}function mV(e,t){const n=[],r=i=>{i.forEach(o=>{n.push(o);const a=t(o);a!=null&&a.length&&r(a)})};return r(e),n}function xt(e,t,n){let r=[],i;return o=>{let a;n.key&&n.debug&&(a=Date.now());const s=e(o);if(!(s.length!==r.length||s.some((c,f)=>r[f]!==c)))return i;r=s;let u;if(n.key&&n.debug&&(u=Date.now()),i=t(...s),n==null||n.onChange==null||n.onChange(i),n.key&&n.debug&&n!=null&&n.debug()){const c=Math.round((Date.now()-a)*100)/100,f=Math.round((Date.now()-u)*100)/100,d=f/16,h=(v,m)=>{for(v=String(v);v.length{var i;return(i=e==null?void 0:e.debugAll)!=null?i:e[t]},key:!1,onChange:r}}function _ae(e,t,n,r){const i=()=>{var a;return(a=o.getValue())!=null?a:e.options.renderFallbackValue},o={id:`${t.id}_${n.id}`,row:t,column:n,getValue:()=>t.getValue(r),renderValue:i,getContext:xt(()=>[e,n,t,o],(a,s,l,u)=>({table:a,column:s,row:l,cell:u,getValue:u.getValue,renderValue:u.renderValue}),Tt(e.options,"debugCells"))};return e._features.forEach(a=>{a.createCell==null||a.createCell(o,n,t,e)},{}),o}function bae(e,t,n,r){var i,o;const s={...e._getDefaultColumnDef(),...t},l=s.accessorKey;let u=(i=(o=s.id)!=null?o:l?typeof String.prototype.replaceAll=="function"?l.replaceAll(".","_"):l.replace(/\./g,"_"):void 0)!=null?i:typeof s.header=="string"?s.header:void 0,c;if(s.accessorFn?c=s.accessorFn:l&&(l.includes(".")?c=d=>{let h=d;for(const m of l.split(".")){var v;h=(v=h)==null?void 0:v[m]}return h}:c=d=>d[s.accessorKey]),!u)throw new Error;let f={id:`${String(u)}`,accessorFn:c,parent:r,depth:n,columnDef:s,columns:[],getFlatColumns:xt(()=>[!0],()=>{var d;return[f,...(d=f.columns)==null?void 0:d.flatMap(h=>h.getFlatColumns())]},Tt(e.options,"debugColumns")),getLeafColumns:xt(()=>[e._getOrderColumnsFn()],d=>{var h;if((h=f.columns)!=null&&h.length){let v=f.columns.flatMap(m=>m.getLeafColumns());return d(v)}return[f]},Tt(e.options,"debugColumns"))};for(const d of e._features)d.createColumn==null||d.createColumn(f,e);return f}const Xr="debugHeaders";function HL(e,t,n){var r;let o={id:(r=n.id)!=null?r:t.id,column:t,index:n.index,isPlaceholder:!!n.isPlaceholder,placeholderId:n.placeholderId,depth:n.depth,subHeaders:[],colSpan:0,rowSpan:0,headerGroup:null,getLeafHeaders:()=>{const a=[],s=l=>{l.subHeaders&&l.subHeaders.length&&l.subHeaders.map(s),a.push(l)};return s(o),a},getContext:()=>({table:e,header:o,column:t})};return e._features.forEach(a=>{a.createHeader==null||a.createHeader(o,e)}),o}const Sae={createTable:e=>{e.getHeaderGroups=xt(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,r,i)=>{var o,a;const s=(o=r==null?void 0:r.map(f=>n.find(d=>d.id===f)).filter(Boolean))!=null?o:[],l=(a=i==null?void 0:i.map(f=>n.find(d=>d.id===f)).filter(Boolean))!=null?a:[],u=n.filter(f=>!(r!=null&&r.includes(f.id))&&!(i!=null&&i.includes(f.id)));return Dy(t,[...s,...u,...l],e)},Tt(e.options,Xr)),e.getCenterHeaderGroups=xt(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,r,i)=>(n=n.filter(o=>!(r!=null&&r.includes(o.id))&&!(i!=null&&i.includes(o.id))),Dy(t,n,e,"center")),Tt(e.options,Xr)),e.getLeftHeaderGroups=xt(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left],(t,n,r)=>{var i;const o=(i=r==null?void 0:r.map(a=>n.find(s=>s.id===a)).filter(Boolean))!=null?i:[];return Dy(t,o,e,"left")},Tt(e.options,Xr)),e.getRightHeaderGroups=xt(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.right],(t,n,r)=>{var i;const o=(i=r==null?void 0:r.map(a=>n.find(s=>s.id===a)).filter(Boolean))!=null?i:[];return Dy(t,o,e,"right")},Tt(e.options,Xr)),e.getFooterGroups=xt(()=>[e.getHeaderGroups()],t=>[...t].reverse(),Tt(e.options,Xr)),e.getLeftFooterGroups=xt(()=>[e.getLeftHeaderGroups()],t=>[...t].reverse(),Tt(e.options,Xr)),e.getCenterFooterGroups=xt(()=>[e.getCenterHeaderGroups()],t=>[...t].reverse(),Tt(e.options,Xr)),e.getRightFooterGroups=xt(()=>[e.getRightHeaderGroups()],t=>[...t].reverse(),Tt(e.options,Xr)),e.getFlatHeaders=xt(()=>[e.getHeaderGroups()],t=>t.map(n=>n.headers).flat(),Tt(e.options,Xr)),e.getLeftFlatHeaders=xt(()=>[e.getLeftHeaderGroups()],t=>t.map(n=>n.headers).flat(),Tt(e.options,Xr)),e.getCenterFlatHeaders=xt(()=>[e.getCenterHeaderGroups()],t=>t.map(n=>n.headers).flat(),Tt(e.options,Xr)),e.getRightFlatHeaders=xt(()=>[e.getRightHeaderGroups()],t=>t.map(n=>n.headers).flat(),Tt(e.options,Xr)),e.getCenterLeafHeaders=xt(()=>[e.getCenterFlatHeaders()],t=>t.filter(n=>{var r;return!((r=n.subHeaders)!=null&&r.length)}),Tt(e.options,Xr)),e.getLeftLeafHeaders=xt(()=>[e.getLeftFlatHeaders()],t=>t.filter(n=>{var r;return!((r=n.subHeaders)!=null&&r.length)}),Tt(e.options,Xr)),e.getRightLeafHeaders=xt(()=>[e.getRightFlatHeaders()],t=>t.filter(n=>{var r;return!((r=n.subHeaders)!=null&&r.length)}),Tt(e.options,Xr)),e.getLeafHeaders=xt(()=>[e.getLeftHeaderGroups(),e.getCenterHeaderGroups(),e.getRightHeaderGroups()],(t,n,r)=>{var i,o,a,s,l,u;return[...(i=(o=t[0])==null?void 0:o.headers)!=null?i:[],...(a=(s=n[0])==null?void 0:s.headers)!=null?a:[],...(l=(u=r[0])==null?void 0:u.headers)!=null?l:[]].map(c=>c.getLeafHeaders()).flat()},Tt(e.options,Xr))}};function Dy(e,t,n,r){var i,o;let a=0;const s=function(d,h){h===void 0&&(h=1),a=Math.max(a,h),d.filter(v=>v.getIsVisible()).forEach(v=>{var m;(m=v.columns)!=null&&m.length&&s(v.columns,h+1)},0)};s(e);let l=[];const u=(d,h)=>{const v={depth:h,id:[r,`${h}`].filter(Boolean).join("_"),headers:[]},m=[];d.forEach(y=>{const _=[...m].reverse()[0],b=y.column.depth===v.depth;let w,S=!1;if(b&&y.column.parent?w=y.column.parent:(w=y.column,S=!0),_&&(_==null?void 0:_.column)===w)_.subHeaders.push(y);else{const C=HL(n,w,{id:[r,h,w.id,y==null?void 0:y.id].filter(Boolean).join("_"),isPlaceholder:S,placeholderId:S?`${m.filter(T=>T.column===w).length}`:void 0,depth:h,index:m.length});C.subHeaders.push(y),m.push(C)}v.headers.push(y),y.headerGroup=v}),l.push(v),h>0&&u(m,h-1)},c=t.map((d,h)=>HL(n,d,{depth:a,index:h}));u(c,a-1),l.reverse();const f=d=>d.filter(v=>v.column.getIsVisible()).map(v=>{let m=0,y=0,_=[0];v.subHeaders&&v.subHeaders.length?(_=[],f(v.subHeaders).forEach(w=>{let{colSpan:S,rowSpan:C}=w;m+=S,_.push(C)})):m=1;const b=Math.min(..._);return y=y+b,v.colSpan=m,v.rowSpan=y,{colSpan:m,rowSpan:y}});return f((i=(o=l[0])==null?void 0:o.headers)!=null?i:[]),l}const yV=(e,t,n,r,i,o,a)=>{let s={id:t,index:r,original:n,depth:i,parentId:a,_valuesCache:{},_uniqueValuesCache:{},getValue:l=>{if(s._valuesCache.hasOwnProperty(l))return s._valuesCache[l];const u=e.getColumn(l);if(u!=null&&u.accessorFn)return s._valuesCache[l]=u.accessorFn(s.original,r),s._valuesCache[l]},getUniqueValues:l=>{if(s._uniqueValuesCache.hasOwnProperty(l))return s._uniqueValuesCache[l];const u=e.getColumn(l);if(u!=null&&u.accessorFn)return u.columnDef.getUniqueValues?(s._uniqueValuesCache[l]=u.columnDef.getUniqueValues(s.original,r),s._uniqueValuesCache[l]):(s._uniqueValuesCache[l]=[s.getValue(l)],s._uniqueValuesCache[l])},renderValue:l=>{var u;return(u=s.getValue(l))!=null?u:e.options.renderFallbackValue},subRows:[],getLeafRows:()=>mV(s.subRows,l=>l.subRows),getParentRow:()=>s.parentId?e.getRow(s.parentId,!0):void 0,getParentRows:()=>{let l=[],u=s;for(;;){const c=u.getParentRow();if(!c)break;l.push(c),u=c}return l.reverse()},getAllCells:xt(()=>[e.getAllLeafColumns()],l=>l.map(u=>_ae(e,s,u,u.id)),Tt(e.options,"debugRows")),_getAllCellsByColumnId:xt(()=>[s.getAllCells()],l=>l.reduce((u,c)=>(u[c.column.id]=c,u),{}),Tt(e.options,"debugRows"))};for(let l=0;l{e._getFacetedRowModel=t.options.getFacetedRowModel&&t.options.getFacetedRowModel(t,e.id),e.getFacetedRowModel=()=>e._getFacetedRowModel?e._getFacetedRowModel():t.getPreFilteredRowModel(),e._getFacetedUniqueValues=t.options.getFacetedUniqueValues&&t.options.getFacetedUniqueValues(t,e.id),e.getFacetedUniqueValues=()=>e._getFacetedUniqueValues?e._getFacetedUniqueValues():new Map,e._getFacetedMinMaxValues=t.options.getFacetedMinMaxValues&&t.options.getFacetedMinMaxValues(t,e.id),e.getFacetedMinMaxValues=()=>{if(e._getFacetedMinMaxValues)return e._getFacetedMinMaxValues()}}},_V=(e,t,n)=>{var r,i;const o=n==null||(r=n.toString())==null?void 0:r.toLowerCase();return!!(!((i=e.getValue(t))==null||(i=i.toString())==null||(i=i.toLowerCase())==null)&&i.includes(o))};_V.autoRemove=e=>Ma(e);const bV=(e,t,n)=>{var r;return!!(!((r=e.getValue(t))==null||(r=r.toString())==null)&&r.includes(n))};bV.autoRemove=e=>Ma(e);const SV=(e,t,n)=>{var r;return((r=e.getValue(t))==null||(r=r.toString())==null?void 0:r.toLowerCase())===(n==null?void 0:n.toLowerCase())};SV.autoRemove=e=>Ma(e);const wV=(e,t,n)=>{var r;return(r=e.getValue(t))==null?void 0:r.includes(n)};wV.autoRemove=e=>Ma(e)||!(e!=null&&e.length);const xV=(e,t,n)=>!n.some(r=>{var i;return!((i=e.getValue(t))!=null&&i.includes(r))});xV.autoRemove=e=>Ma(e)||!(e!=null&&e.length);const TV=(e,t,n)=>n.some(r=>{var i;return(i=e.getValue(t))==null?void 0:i.includes(r)});TV.autoRemove=e=>Ma(e)||!(e!=null&&e.length);const CV=(e,t,n)=>e.getValue(t)===n;CV.autoRemove=e=>Ma(e);const EV=(e,t,n)=>e.getValue(t)==n;EV.autoRemove=e=>Ma(e);const ZI=(e,t,n)=>{let[r,i]=n;const o=e.getValue(t);return o>=r&&o<=i};ZI.resolveFilterValue=e=>{let[t,n]=e,r=typeof t!="number"?parseFloat(t):t,i=typeof n!="number"?parseFloat(n):n,o=t===null||Number.isNaN(r)?-1/0:r,a=n===null||Number.isNaN(i)?1/0:i;if(o>a){const s=o;o=a,a=s}return[o,a]};ZI.autoRemove=e=>Ma(e)||Ma(e[0])&&Ma(e[1]);const Hs={includesString:_V,includesStringSensitive:bV,equalsString:SV,arrIncludes:wV,arrIncludesAll:xV,arrIncludesSome:TV,equals:CV,weakEquals:EV,inNumberRange:ZI};function Ma(e){return e==null||e===""}const xae={getDefaultColumnDef:()=>({filterFn:"auto"}),getInitialState:e=>({columnFilters:[],...e}),getDefaultOptions:e=>({onColumnFiltersChange:Io("columnFilters",e),filterFromLeafRows:!1,maxLeafRowFilterDepth:100}),createColumn:(e,t)=>{e.getAutoFilterFn=()=>{const n=t.getCoreRowModel().flatRows[0],r=n==null?void 0:n.getValue(e.id);return typeof r=="string"?Hs.includesString:typeof r=="number"?Hs.inNumberRange:typeof r=="boolean"||r!==null&&typeof r=="object"?Hs.equals:Array.isArray(r)?Hs.arrIncludes:Hs.weakEquals},e.getFilterFn=()=>{var n,r;return ef(e.columnDef.filterFn)?e.columnDef.filterFn:e.columnDef.filterFn==="auto"?e.getAutoFilterFn():(n=(r=t.options.filterFns)==null?void 0:r[e.columnDef.filterFn])!=null?n:Hs[e.columnDef.filterFn]},e.getCanFilter=()=>{var n,r,i;return((n=e.columnDef.enableColumnFilter)!=null?n:!0)&&((r=t.options.enableColumnFilters)!=null?r:!0)&&((i=t.options.enableFilters)!=null?i:!0)&&!!e.accessorFn},e.getIsFiltered=()=>e.getFilterIndex()>-1,e.getFilterValue=()=>{var n;return(n=t.getState().columnFilters)==null||(n=n.find(r=>r.id===e.id))==null?void 0:n.value},e.getFilterIndex=()=>{var n,r;return(n=(r=t.getState().columnFilters)==null?void 0:r.findIndex(i=>i.id===e.id))!=null?n:-1},e.setFilterValue=n=>{t.setColumnFilters(r=>{const i=e.getFilterFn(),o=r==null?void 0:r.find(c=>c.id===e.id),a=uu(n,o?o.value:void 0);if(GL(i,a,e)){var s;return(s=r==null?void 0:r.filter(c=>c.id!==e.id))!=null?s:[]}const l={id:e.id,value:a};if(o){var u;return(u=r==null?void 0:r.map(c=>c.id===e.id?l:c))!=null?u:[]}return r!=null&&r.length?[...r,l]:[l]})}},createRow:(e,t)=>{e.columnFilters={},e.columnFiltersMeta={}},createTable:e=>{e.setColumnFilters=t=>{const n=e.getAllLeafColumns(),r=i=>{var o;return(o=uu(t,i))==null?void 0:o.filter(a=>{const s=n.find(l=>l.id===a.id);if(s){const l=s.getFilterFn();if(GL(l,a.value,s))return!1}return!0})};e.options.onColumnFiltersChange==null||e.options.onColumnFiltersChange(r)},e.resetColumnFilters=t=>{var n,r;e.setColumnFilters(t?[]:(n=(r=e.initialState)==null?void 0:r.columnFilters)!=null?n:[])},e.getPreFilteredRowModel=()=>e.getCoreRowModel(),e.getFilteredRowModel=()=>(!e._getFilteredRowModel&&e.options.getFilteredRowModel&&(e._getFilteredRowModel=e.options.getFilteredRowModel(e)),e.options.manualFiltering||!e._getFilteredRowModel?e.getPreFilteredRowModel():e._getFilteredRowModel())}};function GL(e,t,n){return(e&&e.autoRemove?e.autoRemove(t,n):!1)||typeof t>"u"||typeof t=="string"&&!t}const Tae=(e,t,n)=>n.reduce((r,i)=>{const o=i.getValue(e);return r+(typeof o=="number"?o:0)},0),Cae=(e,t,n)=>{let r;return n.forEach(i=>{const o=i.getValue(e);o!=null&&(r>o||r===void 0&&o>=o)&&(r=o)}),r},Eae=(e,t,n)=>{let r;return n.forEach(i=>{const o=i.getValue(e);o!=null&&(r=o)&&(r=o)}),r},Aae=(e,t,n)=>{let r,i;return n.forEach(o=>{const a=o.getValue(e);a!=null&&(r===void 0?a>=a&&(r=i=a):(r>a&&(r=a),i{let n=0,r=0;if(t.forEach(i=>{let o=i.getValue(e);o!=null&&(o=+o)>=o&&(++n,r+=o)}),n)return r/n},Rae=(e,t)=>{if(!t.length)return;const n=t.map(o=>o.getValue(e));if(!yae(n))return;if(n.length===1)return n[0];const r=Math.floor(n.length/2),i=n.sort((o,a)=>o-a);return n.length%2!==0?i[r]:(i[r-1]+i[r])/2},Pae=(e,t)=>Array.from(new Set(t.map(n=>n.getValue(e))).values()),Oae=(e,t)=>new Set(t.map(n=>n.getValue(e))).size,Dae=(e,t)=>t.length,Mx={sum:Tae,min:Cae,max:Eae,extent:Aae,mean:Iae,median:Rae,unique:Pae,uniqueCount:Oae,count:Dae},Mae={getDefaultColumnDef:()=>({aggregatedCell:e=>{var t,n;return(t=(n=e.getValue())==null||n.toString==null?void 0:n.toString())!=null?t:null},aggregationFn:"auto"}),getInitialState:e=>({grouping:[],...e}),getDefaultOptions:e=>({onGroupingChange:Io("grouping",e),groupedColumnMode:"reorder"}),createColumn:(e,t)=>{e.toggleGrouping=()=>{t.setGrouping(n=>n!=null&&n.includes(e.id)?n.filter(r=>r!==e.id):[...n??[],e.id])},e.getCanGroup=()=>{var n,r;return((n=e.columnDef.enableGrouping)!=null?n:!0)&&((r=t.options.enableGrouping)!=null?r:!0)&&(!!e.accessorFn||!!e.columnDef.getGroupingValue)},e.getIsGrouped=()=>{var n;return(n=t.getState().grouping)==null?void 0:n.includes(e.id)},e.getGroupedIndex=()=>{var n;return(n=t.getState().grouping)==null?void 0:n.indexOf(e.id)},e.getToggleGroupingHandler=()=>{const n=e.getCanGroup();return()=>{n&&e.toggleGrouping()}},e.getAutoAggregationFn=()=>{const n=t.getCoreRowModel().flatRows[0],r=n==null?void 0:n.getValue(e.id);if(typeof r=="number")return Mx.sum;if(Object.prototype.toString.call(r)==="[object Date]")return Mx.extent},e.getAggregationFn=()=>{var n,r;if(!e)throw new Error;return ef(e.columnDef.aggregationFn)?e.columnDef.aggregationFn:e.columnDef.aggregationFn==="auto"?e.getAutoAggregationFn():(n=(r=t.options.aggregationFns)==null?void 0:r[e.columnDef.aggregationFn])!=null?n:Mx[e.columnDef.aggregationFn]}},createTable:e=>{e.setGrouping=t=>e.options.onGroupingChange==null?void 0:e.options.onGroupingChange(t),e.resetGrouping=t=>{var n,r;e.setGrouping(t?[]:(n=(r=e.initialState)==null?void 0:r.grouping)!=null?n:[])},e.getPreGroupedRowModel=()=>e.getFilteredRowModel(),e.getGroupedRowModel=()=>(!e._getGroupedRowModel&&e.options.getGroupedRowModel&&(e._getGroupedRowModel=e.options.getGroupedRowModel(e)),e.options.manualGrouping||!e._getGroupedRowModel?e.getPreGroupedRowModel():e._getGroupedRowModel())},createRow:(e,t)=>{e.getIsGrouped=()=>!!e.groupingColumnId,e.getGroupingValue=n=>{if(e._groupingValuesCache.hasOwnProperty(n))return e._groupingValuesCache[n];const r=t.getColumn(n);return r!=null&&r.columnDef.getGroupingValue?(e._groupingValuesCache[n]=r.columnDef.getGroupingValue(e.original),e._groupingValuesCache[n]):e.getValue(n)},e._groupingValuesCache={}},createCell:(e,t,n,r)=>{e.getIsGrouped=()=>t.getIsGrouped()&&t.id===n.groupingColumnId,e.getIsPlaceholder=()=>!e.getIsGrouped()&&t.getIsGrouped(),e.getIsAggregated=()=>{var i;return!e.getIsGrouped()&&!e.getIsPlaceholder()&&!!((i=n.subRows)!=null&&i.length)}}};function Lae(e,t,n){if(!(t!=null&&t.length)||!n)return e;const r=e.filter(o=>!t.includes(o.id));return n==="remove"?r:[...t.map(o=>e.find(a=>a.id===o)).filter(Boolean),...r]}const Nae={getInitialState:e=>({columnOrder:[],...e}),getDefaultOptions:e=>({onColumnOrderChange:Io("columnOrder",e)}),createColumn:(e,t)=>{e.getIndex=xt(n=>[wv(t,n)],n=>n.findIndex(r=>r.id===e.id),Tt(t.options,"debugColumns")),e.getIsFirstColumn=n=>{var r;return((r=wv(t,n)[0])==null?void 0:r.id)===e.id},e.getIsLastColumn=n=>{var r;const i=wv(t,n);return((r=i[i.length-1])==null?void 0:r.id)===e.id}},createTable:e=>{e.setColumnOrder=t=>e.options.onColumnOrderChange==null?void 0:e.options.onColumnOrderChange(t),e.resetColumnOrder=t=>{var n;e.setColumnOrder(t?[]:(n=e.initialState.columnOrder)!=null?n:[])},e._getOrderColumnsFn=xt(()=>[e.getState().columnOrder,e.getState().grouping,e.options.groupedColumnMode],(t,n,r)=>i=>{let o=[];if(!(t!=null&&t.length))o=i;else{const a=[...t],s=[...i];for(;s.length&&a.length;){const l=a.shift(),u=s.findIndex(c=>c.id===l);u>-1&&o.push(s.splice(u,1)[0])}o=[...o,...s]}return Lae(o,n,r)},Tt(e.options,"debugTable"))}},Lx=()=>({left:[],right:[]}),kae={getInitialState:e=>({columnPinning:Lx(),...e}),getDefaultOptions:e=>({onColumnPinningChange:Io("columnPinning",e)}),createColumn:(e,t)=>{e.pin=n=>{const r=e.getLeafColumns().map(i=>i.id).filter(Boolean);t.setColumnPinning(i=>{var o,a;if(n==="right"){var s,l;return{left:((s=i==null?void 0:i.left)!=null?s:[]).filter(f=>!(r!=null&&r.includes(f))),right:[...((l=i==null?void 0:i.right)!=null?l:[]).filter(f=>!(r!=null&&r.includes(f))),...r]}}if(n==="left"){var u,c;return{left:[...((u=i==null?void 0:i.left)!=null?u:[]).filter(f=>!(r!=null&&r.includes(f))),...r],right:((c=i==null?void 0:i.right)!=null?c:[]).filter(f=>!(r!=null&&r.includes(f)))}}return{left:((o=i==null?void 0:i.left)!=null?o:[]).filter(f=>!(r!=null&&r.includes(f))),right:((a=i==null?void 0:i.right)!=null?a:[]).filter(f=>!(r!=null&&r.includes(f)))}})},e.getCanPin=()=>e.getLeafColumns().some(r=>{var i,o,a;return((i=r.columnDef.enablePinning)!=null?i:!0)&&((o=(a=t.options.enableColumnPinning)!=null?a:t.options.enablePinning)!=null?o:!0)}),e.getIsPinned=()=>{const n=e.getLeafColumns().map(s=>s.id),{left:r,right:i}=t.getState().columnPinning,o=n.some(s=>r==null?void 0:r.includes(s)),a=n.some(s=>i==null?void 0:i.includes(s));return o?"left":a?"right":!1},e.getPinnedIndex=()=>{var n,r;const i=e.getIsPinned();return i?(n=(r=t.getState().columnPinning)==null||(r=r[i])==null?void 0:r.indexOf(e.id))!=null?n:-1:0}},createRow:(e,t)=>{e.getCenterVisibleCells=xt(()=>[e._getAllVisibleCells(),t.getState().columnPinning.left,t.getState().columnPinning.right],(n,r,i)=>{const o=[...r??[],...i??[]];return n.filter(a=>!o.includes(a.column.id))},Tt(t.options,"debugRows")),e.getLeftVisibleCells=xt(()=>[e._getAllVisibleCells(),t.getState().columnPinning.left],(n,r)=>(r??[]).map(o=>n.find(a=>a.column.id===o)).filter(Boolean).map(o=>({...o,position:"left"})),Tt(t.options,"debugRows")),e.getRightVisibleCells=xt(()=>[e._getAllVisibleCells(),t.getState().columnPinning.right],(n,r)=>(r??[]).map(o=>n.find(a=>a.column.id===o)).filter(Boolean).map(o=>({...o,position:"right"})),Tt(t.options,"debugRows"))},createTable:e=>{e.setColumnPinning=t=>e.options.onColumnPinningChange==null?void 0:e.options.onColumnPinningChange(t),e.resetColumnPinning=t=>{var n,r;return e.setColumnPinning(t?Lx():(n=(r=e.initialState)==null?void 0:r.columnPinning)!=null?n:Lx())},e.getIsSomeColumnsPinned=t=>{var n;const r=e.getState().columnPinning;if(!t){var i,o;return!!((i=r.left)!=null&&i.length||(o=r.right)!=null&&o.length)}return!!((n=r[t])!=null&&n.length)},e.getLeftLeafColumns=xt(()=>[e.getAllLeafColumns(),e.getState().columnPinning.left],(t,n)=>(n??[]).map(r=>t.find(i=>i.id===r)).filter(Boolean),Tt(e.options,"debugColumns")),e.getRightLeafColumns=xt(()=>[e.getAllLeafColumns(),e.getState().columnPinning.right],(t,n)=>(n??[]).map(r=>t.find(i=>i.id===r)).filter(Boolean),Tt(e.options,"debugColumns")),e.getCenterLeafColumns=xt(()=>[e.getAllLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,r)=>{const i=[...n??[],...r??[]];return t.filter(o=>!i.includes(o.id))},Tt(e.options,"debugColumns"))}},My={size:150,minSize:20,maxSize:Number.MAX_SAFE_INTEGER},Nx=()=>({startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,isResizingColumn:!1,columnSizingStart:[]}),Fae={getDefaultColumnDef:()=>My,getInitialState:e=>({columnSizing:{},columnSizingInfo:Nx(),...e}),getDefaultOptions:e=>({columnResizeMode:"onEnd",columnResizeDirection:"ltr",onColumnSizingChange:Io("columnSizing",e),onColumnSizingInfoChange:Io("columnSizingInfo",e)}),createColumn:(e,t)=>{e.getSize=()=>{var n,r,i;const o=t.getState().columnSizing[e.id];return Math.min(Math.max((n=e.columnDef.minSize)!=null?n:My.minSize,(r=o??e.columnDef.size)!=null?r:My.size),(i=e.columnDef.maxSize)!=null?i:My.maxSize)},e.getStart=xt(n=>[n,wv(t,n),t.getState().columnSizing],(n,r)=>r.slice(0,e.getIndex(n)).reduce((i,o)=>i+o.getSize(),0),Tt(t.options,"debugColumns")),e.getAfter=xt(n=>[n,wv(t,n),t.getState().columnSizing],(n,r)=>r.slice(e.getIndex(n)+1).reduce((i,o)=>i+o.getSize(),0),Tt(t.options,"debugColumns")),e.resetSize=()=>{t.setColumnSizing(n=>{let{[e.id]:r,...i}=n;return i})},e.getCanResize=()=>{var n,r;return((n=e.columnDef.enableResizing)!=null?n:!0)&&((r=t.options.enableColumnResizing)!=null?r:!0)},e.getIsResizing=()=>t.getState().columnSizingInfo.isResizingColumn===e.id},createHeader:(e,t)=>{e.getSize=()=>{let n=0;const r=i=>{if(i.subHeaders.length)i.subHeaders.forEach(r);else{var o;n+=(o=i.column.getSize())!=null?o:0}};return r(e),n},e.getStart=()=>{if(e.index>0){const n=e.headerGroup.headers[e.index-1];return n.getStart()+n.getSize()}return 0},e.getResizeHandler=n=>{const r=t.getColumn(e.column.id),i=r==null?void 0:r.getCanResize();return o=>{if(!r||!i||(o.persist==null||o.persist(),kx(o)&&o.touches&&o.touches.length>1))return;const a=e.getSize(),s=e?e.getLeafHeaders().map(_=>[_.column.id,_.column.getSize()]):[[r.id,r.getSize()]],l=kx(o)?Math.round(o.touches[0].clientX):o.clientX,u={},c=(_,b)=>{typeof b=="number"&&(t.setColumnSizingInfo(w=>{var S,C;const T=t.options.columnResizeDirection==="rtl"?-1:1,A=(b-((S=w==null?void 0:w.startOffset)!=null?S:0))*T,P=Math.max(A/((C=w==null?void 0:w.startSize)!=null?C:0),-.999999);return w.columnSizingStart.forEach(I=>{let[R,O]=I;u[R]=Math.round(Math.max(O+O*P,0)*100)/100}),{...w,deltaOffset:A,deltaPercentage:P}}),(t.options.columnResizeMode==="onChange"||_==="end")&&t.setColumnSizing(w=>({...w,...u})))},f=_=>c("move",_),d=_=>{c("end",_),t.setColumnSizingInfo(b=>({...b,isResizingColumn:!1,startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,columnSizingStart:[]}))},h=n||typeof document<"u"?document:null,v={moveHandler:_=>f(_.clientX),upHandler:_=>{h==null||h.removeEventListener("mousemove",v.moveHandler),h==null||h.removeEventListener("mouseup",v.upHandler),d(_.clientX)}},m={moveHandler:_=>(_.cancelable&&(_.preventDefault(),_.stopPropagation()),f(_.touches[0].clientX),!1),upHandler:_=>{var b;h==null||h.removeEventListener("touchmove",m.moveHandler),h==null||h.removeEventListener("touchend",m.upHandler),_.cancelable&&(_.preventDefault(),_.stopPropagation()),d((b=_.touches[0])==null?void 0:b.clientX)}},y=$ae()?{passive:!1}:!1;kx(o)?(h==null||h.addEventListener("touchmove",m.moveHandler,y),h==null||h.addEventListener("touchend",m.upHandler,y)):(h==null||h.addEventListener("mousemove",v.moveHandler,y),h==null||h.addEventListener("mouseup",v.upHandler,y)),t.setColumnSizingInfo(_=>({..._,startOffset:l,startSize:a,deltaOffset:0,deltaPercentage:0,columnSizingStart:s,isResizingColumn:r.id}))}}},createTable:e=>{e.setColumnSizing=t=>e.options.onColumnSizingChange==null?void 0:e.options.onColumnSizingChange(t),e.setColumnSizingInfo=t=>e.options.onColumnSizingInfoChange==null?void 0:e.options.onColumnSizingInfoChange(t),e.resetColumnSizing=t=>{var n;e.setColumnSizing(t?{}:(n=e.initialState.columnSizing)!=null?n:{})},e.resetHeaderSizeInfo=t=>{var n;e.setColumnSizingInfo(t?Nx():(n=e.initialState.columnSizingInfo)!=null?n:Nx())},e.getTotalSize=()=>{var t,n;return(t=(n=e.getHeaderGroups()[0])==null?void 0:n.headers.reduce((r,i)=>r+i.getSize(),0))!=null?t:0},e.getLeftTotalSize=()=>{var t,n;return(t=(n=e.getLeftHeaderGroups()[0])==null?void 0:n.headers.reduce((r,i)=>r+i.getSize(),0))!=null?t:0},e.getCenterTotalSize=()=>{var t,n;return(t=(n=e.getCenterHeaderGroups()[0])==null?void 0:n.headers.reduce((r,i)=>r+i.getSize(),0))!=null?t:0},e.getRightTotalSize=()=>{var t,n;return(t=(n=e.getRightHeaderGroups()[0])==null?void 0:n.headers.reduce((r,i)=>r+i.getSize(),0))!=null?t:0}}};let Ly=null;function $ae(){if(typeof Ly=="boolean")return Ly;let e=!1;try{const t={get passive(){return e=!0,!1}},n=()=>{};window.addEventListener("test",n,t),window.removeEventListener("test",n)}catch{e=!1}return Ly=e,Ly}function kx(e){return e.type==="touchstart"}const Bae={getInitialState:e=>({columnVisibility:{},...e}),getDefaultOptions:e=>({onColumnVisibilityChange:Io("columnVisibility",e)}),createColumn:(e,t)=>{e.toggleVisibility=n=>{e.getCanHide()&&t.setColumnVisibility(r=>({...r,[e.id]:n??!e.getIsVisible()}))},e.getIsVisible=()=>{var n,r;const i=e.columns;return(n=i.length?i.some(o=>o.getIsVisible()):(r=t.getState().columnVisibility)==null?void 0:r[e.id])!=null?n:!0},e.getCanHide=()=>{var n,r;return((n=e.columnDef.enableHiding)!=null?n:!0)&&((r=t.options.enableHiding)!=null?r:!0)},e.getToggleVisibilityHandler=()=>n=>{e.toggleVisibility==null||e.toggleVisibility(n.target.checked)}},createRow:(e,t)=>{e._getAllVisibleCells=xt(()=>[e.getAllCells(),t.getState().columnVisibility],n=>n.filter(r=>r.column.getIsVisible()),Tt(t.options,"debugRows")),e.getVisibleCells=xt(()=>[e.getLeftVisibleCells(),e.getCenterVisibleCells(),e.getRightVisibleCells()],(n,r,i)=>[...n,...r,...i],Tt(t.options,"debugRows"))},createTable:e=>{const t=(n,r)=>xt(()=>[r(),r().filter(i=>i.getIsVisible()).map(i=>i.id).join("_")],i=>i.filter(o=>o.getIsVisible==null?void 0:o.getIsVisible()),Tt(e.options,"debugColumns"));e.getVisibleFlatColumns=t("getVisibleFlatColumns",()=>e.getAllFlatColumns()),e.getVisibleLeafColumns=t("getVisibleLeafColumns",()=>e.getAllLeafColumns()),e.getLeftVisibleLeafColumns=t("getLeftVisibleLeafColumns",()=>e.getLeftLeafColumns()),e.getRightVisibleLeafColumns=t("getRightVisibleLeafColumns",()=>e.getRightLeafColumns()),e.getCenterVisibleLeafColumns=t("getCenterVisibleLeafColumns",()=>e.getCenterLeafColumns()),e.setColumnVisibility=n=>e.options.onColumnVisibilityChange==null?void 0:e.options.onColumnVisibilityChange(n),e.resetColumnVisibility=n=>{var r;e.setColumnVisibility(n?{}:(r=e.initialState.columnVisibility)!=null?r:{})},e.toggleAllColumnsVisible=n=>{var r;n=(r=n)!=null?r:!e.getIsAllColumnsVisible(),e.setColumnVisibility(e.getAllLeafColumns().reduce((i,o)=>({...i,[o.id]:n||!(o.getCanHide!=null&&o.getCanHide())}),{}))},e.getIsAllColumnsVisible=()=>!e.getAllLeafColumns().some(n=>!(n.getIsVisible!=null&&n.getIsVisible())),e.getIsSomeColumnsVisible=()=>e.getAllLeafColumns().some(n=>n.getIsVisible==null?void 0:n.getIsVisible()),e.getToggleAllColumnsVisibilityHandler=()=>n=>{var r;e.toggleAllColumnsVisible((r=n.target)==null?void 0:r.checked)}}};function wv(e,t){return t?t==="center"?e.getCenterVisibleLeafColumns():t==="left"?e.getLeftVisibleLeafColumns():e.getRightVisibleLeafColumns():e.getVisibleLeafColumns()}const Vae={createTable:e=>{e._getGlobalFacetedRowModel=e.options.getFacetedRowModel&&e.options.getFacetedRowModel(e,"__global__"),e.getGlobalFacetedRowModel=()=>e.options.manualFiltering||!e._getGlobalFacetedRowModel?e.getPreFilteredRowModel():e._getGlobalFacetedRowModel(),e._getGlobalFacetedUniqueValues=e.options.getFacetedUniqueValues&&e.options.getFacetedUniqueValues(e,"__global__"),e.getGlobalFacetedUniqueValues=()=>e._getGlobalFacetedUniqueValues?e._getGlobalFacetedUniqueValues():new Map,e._getGlobalFacetedMinMaxValues=e.options.getFacetedMinMaxValues&&e.options.getFacetedMinMaxValues(e,"__global__"),e.getGlobalFacetedMinMaxValues=()=>{if(e._getGlobalFacetedMinMaxValues)return e._getGlobalFacetedMinMaxValues()}}},Uae={getInitialState:e=>({globalFilter:void 0,...e}),getDefaultOptions:e=>({onGlobalFilterChange:Io("globalFilter",e),globalFilterFn:"auto",getColumnCanGlobalFilter:t=>{var n;const r=(n=e.getCoreRowModel().flatRows[0])==null||(n=n._getAllCellsByColumnId()[t.id])==null?void 0:n.getValue();return typeof r=="string"||typeof r=="number"}}),createColumn:(e,t)=>{e.getCanGlobalFilter=()=>{var n,r,i,o;return((n=e.columnDef.enableGlobalFilter)!=null?n:!0)&&((r=t.options.enableGlobalFilter)!=null?r:!0)&&((i=t.options.enableFilters)!=null?i:!0)&&((o=t.options.getColumnCanGlobalFilter==null?void 0:t.options.getColumnCanGlobalFilter(e))!=null?o:!0)&&!!e.accessorFn}},createTable:e=>{e.getGlobalAutoFilterFn=()=>Hs.includesString,e.getGlobalFilterFn=()=>{var t,n;const{globalFilterFn:r}=e.options;return ef(r)?r:r==="auto"?e.getGlobalAutoFilterFn():(t=(n=e.options.filterFns)==null?void 0:n[r])!=null?t:Hs[r]},e.setGlobalFilter=t=>{e.options.onGlobalFilterChange==null||e.options.onGlobalFilterChange(t)},e.resetGlobalFilter=t=>{e.setGlobalFilter(t?void 0:e.initialState.globalFilter)}}},Hae={getInitialState:e=>({expanded:{},...e}),getDefaultOptions:e=>({onExpandedChange:Io("expanded",e),paginateExpandedRows:!0}),createTable:e=>{let t=!1,n=!1;e._autoResetExpanded=()=>{var r,i;if(!t){e._queue(()=>{t=!0});return}if((r=(i=e.options.autoResetAll)!=null?i:e.options.autoResetExpanded)!=null?r:!e.options.manualExpanding){if(n)return;n=!0,e._queue(()=>{e.resetExpanded(),n=!1})}},e.setExpanded=r=>e.options.onExpandedChange==null?void 0:e.options.onExpandedChange(r),e.toggleAllRowsExpanded=r=>{r??!e.getIsAllRowsExpanded()?e.setExpanded(!0):e.setExpanded({})},e.resetExpanded=r=>{var i,o;e.setExpanded(r?{}:(i=(o=e.initialState)==null?void 0:o.expanded)!=null?i:{})},e.getCanSomeRowsExpand=()=>e.getPrePaginationRowModel().flatRows.some(r=>r.getCanExpand()),e.getToggleAllRowsExpandedHandler=()=>r=>{r.persist==null||r.persist(),e.toggleAllRowsExpanded()},e.getIsSomeRowsExpanded=()=>{const r=e.getState().expanded;return r===!0||Object.values(r).some(Boolean)},e.getIsAllRowsExpanded=()=>{const r=e.getState().expanded;return typeof r=="boolean"?r===!0:!(!Object.keys(r).length||e.getRowModel().flatRows.some(i=>!i.getIsExpanded()))},e.getExpandedDepth=()=>{let r=0;return(e.getState().expanded===!0?Object.keys(e.getRowModel().rowsById):Object.keys(e.getState().expanded)).forEach(o=>{const a=o.split(".");r=Math.max(r,a.length)}),r},e.getPreExpandedRowModel=()=>e.getSortedRowModel(),e.getExpandedRowModel=()=>(!e._getExpandedRowModel&&e.options.getExpandedRowModel&&(e._getExpandedRowModel=e.options.getExpandedRowModel(e)),e.options.manualExpanding||!e._getExpandedRowModel?e.getPreExpandedRowModel():e._getExpandedRowModel())},createRow:(e,t)=>{e.toggleExpanded=n=>{t.setExpanded(r=>{var i;const o=r===!0?!0:!!(r!=null&&r[e.id]);let a={};if(r===!0?Object.keys(t.getRowModel().rowsById).forEach(s=>{a[s]=!0}):a=r,n=(i=n)!=null?i:!o,!o&&n)return{...a,[e.id]:!0};if(o&&!n){const{[e.id]:s,...l}=a;return l}return r})},e.getIsExpanded=()=>{var n;const r=t.getState().expanded;return!!((n=t.options.getIsRowExpanded==null?void 0:t.options.getIsRowExpanded(e))!=null?n:r===!0||r!=null&&r[e.id])},e.getCanExpand=()=>{var n,r,i;return(n=t.options.getRowCanExpand==null?void 0:t.options.getRowCanExpand(e))!=null?n:((r=t.options.enableExpanding)!=null?r:!0)&&!!((i=e.subRows)!=null&&i.length)},e.getIsAllParentsExpanded=()=>{let n=!0,r=e;for(;n&&r.parentId;)r=t.getRow(r.parentId,!0),n=r.getIsExpanded();return n},e.getToggleExpandedHandler=()=>{const n=e.getCanExpand();return()=>{n&&e.toggleExpanded()}}}},bE=0,SE=10,Fx=()=>({pageIndex:bE,pageSize:SE}),Gae={getInitialState:e=>({...e,pagination:{...Fx(),...e==null?void 0:e.pagination}}),getDefaultOptions:e=>({onPaginationChange:Io("pagination",e)}),createTable:e=>{let t=!1,n=!1;e._autoResetPageIndex=()=>{var r,i;if(!t){e._queue(()=>{t=!0});return}if((r=(i=e.options.autoResetAll)!=null?i:e.options.autoResetPageIndex)!=null?r:!e.options.manualPagination){if(n)return;n=!0,e._queue(()=>{e.resetPageIndex(),n=!1})}},e.setPagination=r=>{const i=o=>uu(r,o);return e.options.onPaginationChange==null?void 0:e.options.onPaginationChange(i)},e.resetPagination=r=>{var i;e.setPagination(r?Fx():(i=e.initialState.pagination)!=null?i:Fx())},e.setPageIndex=r=>{e.setPagination(i=>{let o=uu(r,i.pageIndex);const a=typeof e.options.pageCount>"u"||e.options.pageCount===-1?Number.MAX_SAFE_INTEGER:e.options.pageCount-1;return o=Math.max(0,Math.min(o,a)),{...i,pageIndex:o}})},e.resetPageIndex=r=>{var i,o;e.setPageIndex(r?bE:(i=(o=e.initialState)==null||(o=o.pagination)==null?void 0:o.pageIndex)!=null?i:bE)},e.resetPageSize=r=>{var i,o;e.setPageSize(r?SE:(i=(o=e.initialState)==null||(o=o.pagination)==null?void 0:o.pageSize)!=null?i:SE)},e.setPageSize=r=>{e.setPagination(i=>{const o=Math.max(1,uu(r,i.pageSize)),a=i.pageSize*i.pageIndex,s=Math.floor(a/o);return{...i,pageIndex:s,pageSize:o}})},e.setPageCount=r=>e.setPagination(i=>{var o;let a=uu(r,(o=e.options.pageCount)!=null?o:-1);return typeof a=="number"&&(a=Math.max(-1,a)),{...i,pageCount:a}}),e.getPageOptions=xt(()=>[e.getPageCount()],r=>{let i=[];return r&&r>0&&(i=[...new Array(r)].fill(null).map((o,a)=>a)),i},Tt(e.options,"debugTable")),e.getCanPreviousPage=()=>e.getState().pagination.pageIndex>0,e.getCanNextPage=()=>{const{pageIndex:r}=e.getState().pagination,i=e.getPageCount();return i===-1?!0:i===0?!1:re.setPageIndex(r=>r-1),e.nextPage=()=>e.setPageIndex(r=>r+1),e.firstPage=()=>e.setPageIndex(0),e.lastPage=()=>e.setPageIndex(e.getPageCount()-1),e.getPrePaginationRowModel=()=>e.getExpandedRowModel(),e.getPaginationRowModel=()=>(!e._getPaginationRowModel&&e.options.getPaginationRowModel&&(e._getPaginationRowModel=e.options.getPaginationRowModel(e)),e.options.manualPagination||!e._getPaginationRowModel?e.getPrePaginationRowModel():e._getPaginationRowModel()),e.getPageCount=()=>{var r;return(r=e.options.pageCount)!=null?r:Math.ceil(e.getRowCount()/e.getState().pagination.pageSize)},e.getRowCount=()=>{var r;return(r=e.options.rowCount)!=null?r:e.getPrePaginationRowModel().rows.length}}},$x=()=>({top:[],bottom:[]}),zae={getInitialState:e=>({rowPinning:$x(),...e}),getDefaultOptions:e=>({onRowPinningChange:Io("rowPinning",e)}),createRow:(e,t)=>{e.pin=(n,r,i)=>{const o=r?e.getLeafRows().map(l=>{let{id:u}=l;return u}):[],a=i?e.getParentRows().map(l=>{let{id:u}=l;return u}):[],s=new Set([...a,e.id,...o]);t.setRowPinning(l=>{var u,c;if(n==="bottom"){var f,d;return{top:((f=l==null?void 0:l.top)!=null?f:[]).filter(m=>!(s!=null&&s.has(m))),bottom:[...((d=l==null?void 0:l.bottom)!=null?d:[]).filter(m=>!(s!=null&&s.has(m))),...Array.from(s)]}}if(n==="top"){var h,v;return{top:[...((h=l==null?void 0:l.top)!=null?h:[]).filter(m=>!(s!=null&&s.has(m))),...Array.from(s)],bottom:((v=l==null?void 0:l.bottom)!=null?v:[]).filter(m=>!(s!=null&&s.has(m)))}}return{top:((u=l==null?void 0:l.top)!=null?u:[]).filter(m=>!(s!=null&&s.has(m))),bottom:((c=l==null?void 0:l.bottom)!=null?c:[]).filter(m=>!(s!=null&&s.has(m)))}})},e.getCanPin=()=>{var n;const{enableRowPinning:r,enablePinning:i}=t.options;return typeof r=="function"?r(e):(n=r??i)!=null?n:!0},e.getIsPinned=()=>{const n=[e.id],{top:r,bottom:i}=t.getState().rowPinning,o=n.some(s=>r==null?void 0:r.includes(s)),a=n.some(s=>i==null?void 0:i.includes(s));return o?"top":a?"bottom":!1},e.getPinnedIndex=()=>{var n,r;const i=e.getIsPinned();if(!i)return-1;const o=(n=i==="top"?t.getTopRows():t.getBottomRows())==null?void 0:n.map(a=>{let{id:s}=a;return s});return(r=o==null?void 0:o.indexOf(e.id))!=null?r:-1}},createTable:e=>{e.setRowPinning=t=>e.options.onRowPinningChange==null?void 0:e.options.onRowPinningChange(t),e.resetRowPinning=t=>{var n,r;return e.setRowPinning(t?$x():(n=(r=e.initialState)==null?void 0:r.rowPinning)!=null?n:$x())},e.getIsSomeRowsPinned=t=>{var n;const r=e.getState().rowPinning;if(!t){var i,o;return!!((i=r.top)!=null&&i.length||(o=r.bottom)!=null&&o.length)}return!!((n=r[t])!=null&&n.length)},e._getPinnedRows=(t,n,r)=>{var i;return((i=e.options.keepPinnedRows)==null||i?(n??[]).map(a=>{const s=e.getRow(a,!0);return s.getIsAllParentsExpanded()?s:null}):(n??[]).map(a=>t.find(s=>s.id===a))).filter(Boolean).map(a=>({...a,position:r}))},e.getTopRows=xt(()=>[e.getRowModel().rows,e.getState().rowPinning.top],(t,n)=>e._getPinnedRows(t,n,"top"),Tt(e.options,"debugRows")),e.getBottomRows=xt(()=>[e.getRowModel().rows,e.getState().rowPinning.bottom],(t,n)=>e._getPinnedRows(t,n,"bottom"),Tt(e.options,"debugRows")),e.getCenterRows=xt(()=>[e.getRowModel().rows,e.getState().rowPinning.top,e.getState().rowPinning.bottom],(t,n,r)=>{const i=new Set([...n??[],...r??[]]);return t.filter(o=>!i.has(o.id))},Tt(e.options,"debugRows"))}},Wae={getInitialState:e=>({rowSelection:{},...e}),getDefaultOptions:e=>({onRowSelectionChange:Io("rowSelection",e),enableRowSelection:!0,enableMultiRowSelection:!0,enableSubRowSelection:!0}),createTable:e=>{e.setRowSelection=t=>e.options.onRowSelectionChange==null?void 0:e.options.onRowSelectionChange(t),e.resetRowSelection=t=>{var n;return e.setRowSelection(t?{}:(n=e.initialState.rowSelection)!=null?n:{})},e.toggleAllRowsSelected=t=>{e.setRowSelection(n=>{t=typeof t<"u"?t:!e.getIsAllRowsSelected();const r={...n},i=e.getPreGroupedRowModel().flatRows;return t?i.forEach(o=>{o.getCanSelect()&&(r[o.id]=!0)}):i.forEach(o=>{delete r[o.id]}),r})},e.toggleAllPageRowsSelected=t=>e.setRowSelection(n=>{const r=typeof t<"u"?t:!e.getIsAllPageRowsSelected(),i={...n};return e.getRowModel().rows.forEach(o=>{wE(i,o.id,r,!0,e)}),i}),e.getPreSelectedRowModel=()=>e.getCoreRowModel(),e.getSelectedRowModel=xt(()=>[e.getState().rowSelection,e.getCoreRowModel()],(t,n)=>Object.keys(t).length?Bx(e,n):{rows:[],flatRows:[],rowsById:{}},Tt(e.options,"debugTable")),e.getFilteredSelectedRowModel=xt(()=>[e.getState().rowSelection,e.getFilteredRowModel()],(t,n)=>Object.keys(t).length?Bx(e,n):{rows:[],flatRows:[],rowsById:{}},Tt(e.options,"debugTable")),e.getGroupedSelectedRowModel=xt(()=>[e.getState().rowSelection,e.getSortedRowModel()],(t,n)=>Object.keys(t).length?Bx(e,n):{rows:[],flatRows:[],rowsById:{}},Tt(e.options,"debugTable")),e.getIsAllRowsSelected=()=>{const t=e.getFilteredRowModel().flatRows,{rowSelection:n}=e.getState();let r=!!(t.length&&Object.keys(n).length);return r&&t.some(i=>i.getCanSelect()&&!n[i.id])&&(r=!1),r},e.getIsAllPageRowsSelected=()=>{const t=e.getPaginationRowModel().flatRows.filter(i=>i.getCanSelect()),{rowSelection:n}=e.getState();let r=!!t.length;return r&&t.some(i=>!n[i.id])&&(r=!1),r},e.getIsSomeRowsSelected=()=>{var t;const n=Object.keys((t=e.getState().rowSelection)!=null?t:{}).length;return n>0&&n{const t=e.getPaginationRowModel().flatRows;return e.getIsAllPageRowsSelected()?!1:t.filter(n=>n.getCanSelect()).some(n=>n.getIsSelected()||n.getIsSomeSelected())},e.getToggleAllRowsSelectedHandler=()=>t=>{e.toggleAllRowsSelected(t.target.checked)},e.getToggleAllPageRowsSelectedHandler=()=>t=>{e.toggleAllPageRowsSelected(t.target.checked)}},createRow:(e,t)=>{e.toggleSelected=(n,r)=>{const i=e.getIsSelected();t.setRowSelection(o=>{var a;if(n=typeof n<"u"?n:!i,e.getCanSelect()&&i===n)return o;const s={...o};return wE(s,e.id,n,(a=r==null?void 0:r.selectChildren)!=null?a:!0,t),s})},e.getIsSelected=()=>{const{rowSelection:n}=t.getState();return qI(e,n)},e.getIsSomeSelected=()=>{const{rowSelection:n}=t.getState();return xE(e,n)==="some"},e.getIsAllSubRowsSelected=()=>{const{rowSelection:n}=t.getState();return xE(e,n)==="all"},e.getCanSelect=()=>{var n;return typeof t.options.enableRowSelection=="function"?t.options.enableRowSelection(e):(n=t.options.enableRowSelection)!=null?n:!0},e.getCanSelectSubRows=()=>{var n;return typeof t.options.enableSubRowSelection=="function"?t.options.enableSubRowSelection(e):(n=t.options.enableSubRowSelection)!=null?n:!0},e.getCanMultiSelect=()=>{var n;return typeof t.options.enableMultiRowSelection=="function"?t.options.enableMultiRowSelection(e):(n=t.options.enableMultiRowSelection)!=null?n:!0},e.getToggleSelectedHandler=()=>{const n=e.getCanSelect();return r=>{var i;n&&e.toggleSelected((i=r.target)==null?void 0:i.checked)}}}},wE=(e,t,n,r,i)=>{var o;const a=i.getRow(t,!0);n?(a.getCanMultiSelect()||Object.keys(e).forEach(s=>delete e[s]),a.getCanSelect()&&(e[t]=!0)):delete e[t],r&&(o=a.subRows)!=null&&o.length&&a.getCanSelectSubRows()&&a.subRows.forEach(s=>wE(e,s.id,n,r,i))};function Bx(e,t){const n=e.getState().rowSelection,r=[],i={},o=function(a,s){return a.map(l=>{var u;const c=qI(l,n);if(c&&(r.push(l),i[l.id]=l),(u=l.subRows)!=null&&u.length&&(l={...l,subRows:o(l.subRows)}),c)return l}).filter(Boolean)};return{rows:o(t.rows),flatRows:r,rowsById:i}}function qI(e,t){var n;return(n=t[e.id])!=null?n:!1}function xE(e,t,n){var r;if(!((r=e.subRows)!=null&&r.length))return!1;let i=!0,o=!1;return e.subRows.forEach(a=>{if(!(o&&!i)&&(a.getCanSelect()&&(qI(a,t)?o=!0:i=!1),a.subRows&&a.subRows.length)){const s=xE(a,t);s==="all"?o=!0:(s==="some"&&(o=!0),i=!1)}}),i?"all":o?"some":!1}const TE=/([0-9]+)/gm,jae=(e,t,n)=>AV(Au(e.getValue(n)).toLowerCase(),Au(t.getValue(n)).toLowerCase()),Yae=(e,t,n)=>AV(Au(e.getValue(n)),Au(t.getValue(n))),Xae=(e,t,n)=>JI(Au(e.getValue(n)).toLowerCase(),Au(t.getValue(n)).toLowerCase()),Kae=(e,t,n)=>JI(Au(e.getValue(n)),Au(t.getValue(n))),Zae=(e,t,n)=>{const r=e.getValue(n),i=t.getValue(n);return r>i?1:rJI(e.getValue(n),t.getValue(n));function JI(e,t){return e===t?0:e>t?1:-1}function Au(e){return typeof e=="number"?isNaN(e)||e===1/0||e===-1/0?"":String(e):typeof e=="string"?e:""}function AV(e,t){const n=e.split(TE).filter(Boolean),r=t.split(TE).filter(Boolean);for(;n.length&&r.length;){const i=n.shift(),o=r.shift(),a=parseInt(i,10),s=parseInt(o,10),l=[a,s].sort();if(isNaN(l[0])){if(i>o)return 1;if(o>i)return-1;continue}if(isNaN(l[1]))return isNaN(a)?-1:1;if(a>s)return 1;if(s>a)return-1}return n.length-r.length}const ap={alphanumeric:jae,alphanumericCaseSensitive:Yae,text:Xae,textCaseSensitive:Kae,datetime:Zae,basic:qae},Jae={getInitialState:e=>({sorting:[],...e}),getDefaultColumnDef:()=>({sortingFn:"auto",sortUndefined:1}),getDefaultOptions:e=>({onSortingChange:Io("sorting",e),isMultiSortEvent:t=>t.shiftKey}),createColumn:(e,t)=>{e.getAutoSortingFn=()=>{const n=t.getFilteredRowModel().flatRows.slice(10);let r=!1;for(const i of n){const o=i==null?void 0:i.getValue(e.id);if(Object.prototype.toString.call(o)==="[object Date]")return ap.datetime;if(typeof o=="string"&&(r=!0,o.split(TE).length>1))return ap.alphanumeric}return r?ap.text:ap.basic},e.getAutoSortDir=()=>{const n=t.getFilteredRowModel().flatRows[0];return typeof(n==null?void 0:n.getValue(e.id))=="string"?"asc":"desc"},e.getSortingFn=()=>{var n,r;if(!e)throw new Error;return ef(e.columnDef.sortingFn)?e.columnDef.sortingFn:e.columnDef.sortingFn==="auto"?e.getAutoSortingFn():(n=(r=t.options.sortingFns)==null?void 0:r[e.columnDef.sortingFn])!=null?n:ap[e.columnDef.sortingFn]},e.toggleSorting=(n,r)=>{const i=e.getNextSortingOrder(),o=typeof n<"u"&&n!==null;t.setSorting(a=>{const s=a==null?void 0:a.find(h=>h.id===e.id),l=a==null?void 0:a.findIndex(h=>h.id===e.id);let u=[],c,f=o?n:i==="desc";if(a!=null&&a.length&&e.getCanMultiSort()&&r?s?c="toggle":c="add":a!=null&&a.length&&l!==a.length-1?c="replace":s?c="toggle":c="replace",c==="toggle"&&(o||i||(c="remove")),c==="add"){var d;u=[...a,{id:e.id,desc:f}],u.splice(0,u.length-((d=t.options.maxMultiSortColCount)!=null?d:Number.MAX_SAFE_INTEGER))}else c==="toggle"?u=a.map(h=>h.id===e.id?{...h,desc:f}:h):c==="remove"?u=a.filter(h=>h.id!==e.id):u=[{id:e.id,desc:f}];return u})},e.getFirstSortDir=()=>{var n,r;return((n=(r=e.columnDef.sortDescFirst)!=null?r:t.options.sortDescFirst)!=null?n:e.getAutoSortDir()==="desc")?"desc":"asc"},e.getNextSortingOrder=n=>{var r,i;const o=e.getFirstSortDir(),a=e.getIsSorted();return a?a!==o&&((r=t.options.enableSortingRemoval)==null||r)&&(!(n&&(i=t.options.enableMultiRemove)!=null)||i)?!1:a==="desc"?"asc":"desc":o},e.getCanSort=()=>{var n,r;return((n=e.columnDef.enableSorting)!=null?n:!0)&&((r=t.options.enableSorting)!=null?r:!0)&&!!e.accessorFn},e.getCanMultiSort=()=>{var n,r;return(n=(r=e.columnDef.enableMultiSort)!=null?r:t.options.enableMultiSort)!=null?n:!!e.accessorFn},e.getIsSorted=()=>{var n;const r=(n=t.getState().sorting)==null?void 0:n.find(i=>i.id===e.id);return r?r.desc?"desc":"asc":!1},e.getSortIndex=()=>{var n,r;return(n=(r=t.getState().sorting)==null?void 0:r.findIndex(i=>i.id===e.id))!=null?n:-1},e.clearSorting=()=>{t.setSorting(n=>n!=null&&n.length?n.filter(r=>r.id!==e.id):[])},e.getToggleSortingHandler=()=>{const n=e.getCanSort();return r=>{n&&(r.persist==null||r.persist(),e.toggleSorting==null||e.toggleSorting(void 0,e.getCanMultiSort()?t.options.isMultiSortEvent==null?void 0:t.options.isMultiSortEvent(r):!1))}}},createTable:e=>{e.setSorting=t=>e.options.onSortingChange==null?void 0:e.options.onSortingChange(t),e.resetSorting=t=>{var n,r;e.setSorting(t?[]:(n=(r=e.initialState)==null?void 0:r.sorting)!=null?n:[])},e.getPreSortedRowModel=()=>e.getGroupedRowModel(),e.getSortedRowModel=()=>(!e._getSortedRowModel&&e.options.getSortedRowModel&&(e._getSortedRowModel=e.options.getSortedRowModel(e)),e.options.manualSorting||!e._getSortedRowModel?e.getPreSortedRowModel():e._getSortedRowModel())}},Qae=[Sae,Bae,Nae,kae,wae,xae,Vae,Uae,Jae,Mae,Hae,Gae,zae,Wae,Fae];function ese(e){var t,n;const r=[...Qae,...(t=e._features)!=null?t:[]];let i={_features:r};const o=i._features.reduce((d,h)=>Object.assign(d,h.getDefaultOptions==null?void 0:h.getDefaultOptions(i)),{}),a=d=>i.options.mergeOptions?i.options.mergeOptions(o,d):{...o,...d};let l={...{},...(n=e.initialState)!=null?n:{}};i._features.forEach(d=>{var h;l=(h=d.getInitialState==null?void 0:d.getInitialState(l))!=null?h:l});const u=[];let c=!1;const f={_features:r,options:{...o,...e},initialState:l,_queue:d=>{u.push(d),c||(c=!0,Promise.resolve().then(()=>{for(;u.length;)u.shift()();c=!1}).catch(h=>setTimeout(()=>{throw h})))},reset:()=>{i.setState(i.initialState)},setOptions:d=>{const h=uu(d,i.options);i.options=a(h)},getState:()=>i.options.state,setState:d=>{i.options.onStateChange==null||i.options.onStateChange(d)},_getRowId:(d,h,v)=>{var m;return(m=i.options.getRowId==null?void 0:i.options.getRowId(d,h,v))!=null?m:`${v?[v.id,h].join("."):h}`},getCoreRowModel:()=>(i._getCoreRowModel||(i._getCoreRowModel=i.options.getCoreRowModel(i)),i._getCoreRowModel()),getRowModel:()=>i.getPaginationRowModel(),getRow:(d,h)=>{let v=(h?i.getPrePaginationRowModel():i.getRowModel()).rowsById[d];if(!v&&(v=i.getCoreRowModel().rowsById[d],!v))throw new Error;return v},_getDefaultColumnDef:xt(()=>[i.options.defaultColumn],d=>{var h;return d=(h=d)!=null?h:{},{header:v=>{const m=v.header.column.columnDef;return m.accessorKey?m.accessorKey:m.accessorFn?m.id:null},cell:v=>{var m,y;return(m=(y=v.renderValue())==null||y.toString==null?void 0:y.toString())!=null?m:null},...i._features.reduce((v,m)=>Object.assign(v,m.getDefaultColumnDef==null?void 0:m.getDefaultColumnDef()),{}),...d}},Tt(e,"debugColumns")),_getColumnDefs:()=>i.options.columns,getAllColumns:xt(()=>[i._getColumnDefs()],d=>{const h=function(v,m,y){return y===void 0&&(y=0),v.map(_=>{const b=bae(i,_,y,m),w=_;return b.columns=w.columns?h(w.columns,b,y+1):[],b})};return h(d)},Tt(e,"debugColumns")),getAllFlatColumns:xt(()=>[i.getAllColumns()],d=>d.flatMap(h=>h.getFlatColumns()),Tt(e,"debugColumns")),_getAllFlatColumnsById:xt(()=>[i.getAllFlatColumns()],d=>d.reduce((h,v)=>(h[v.id]=v,h),{}),Tt(e,"debugColumns")),getAllLeafColumns:xt(()=>[i.getAllColumns(),i._getOrderColumnsFn()],(d,h)=>{let v=d.flatMap(m=>m.getLeafColumns());return h(v)},Tt(e,"debugColumns")),getColumn:d=>i._getAllFlatColumnsById()[d]};Object.assign(i,f);for(let d=0;dxt(()=>[e.options.data],t=>{const n={rows:[],flatRows:[],rowsById:{}},r=function(i,o,a){o===void 0&&(o=0);const s=[];for(let u=0;ue._autoResetPageIndex()))}function nse(){return e=>xt(()=>[e.getState().expanded,e.getPreExpandedRowModel(),e.options.paginateExpandedRows],(t,n,r)=>!n.rows.length||t!==!0&&!Object.keys(t??{}).length||!r?n:rse(n),Tt(e.options,"debugTable"))}function rse(e){const t=[],n=r=>{var i;t.push(r),(i=r.subRows)!=null&&i.length&&r.getIsExpanded()&&r.subRows.forEach(n)};return e.rows.forEach(n),{rows:t,flatRows:e.flatRows,rowsById:e.rowsById}}function ise(){return e=>xt(()=>[e.getState().grouping,e.getPreGroupedRowModel()],(t,n)=>{if(!n.rows.length||!t.length)return n.rows.forEach(l=>{l.depth=0,l.parentId=void 0}),n;const r=t.filter(l=>e.getColumn(l)),i=[],o={},a=function(l,u,c){if(u===void 0&&(u=0),u>=r.length)return l.map(v=>(v.depth=u,i.push(v),o[v.id]=v,v.subRows&&(v.subRows=a(v.subRows,u+1,v.id)),v));const f=r[u],d=ose(l,f);return Array.from(d.entries()).map((v,m)=>{let[y,_]=v,b=`${f}:${y}`;b=c?`${c}>${b}`:b;const w=a(_,u+1,b);w.forEach(T=>{T.parentId=b});const S=u?mV(_,T=>T.subRows):_,C=yV(e,b,S[0].original,m,u,void 0,c);return Object.assign(C,{groupingColumnId:f,groupingValue:y,subRows:w,leafRows:S,getValue:T=>{if(r.includes(T)){if(C._valuesCache.hasOwnProperty(T))return C._valuesCache[T];if(_[0]){var A;C._valuesCache[T]=(A=_[0].getValue(T))!=null?A:void 0}return C._valuesCache[T]}if(C._groupingValuesCache.hasOwnProperty(T))return C._groupingValuesCache[T];const P=e.getColumn(T),I=P==null?void 0:P.getAggregationFn();if(I)return C._groupingValuesCache[T]=I(T,S,_),C._groupingValuesCache[T]}}),w.forEach(T=>{i.push(T),o[T.id]=T}),C})},s=a(n.rows,0);return s.forEach(l=>{i.push(l),o[l.id]=l}),{rows:s,flatRows:i,rowsById:o}},Tt(e.options,"debugTable","getGroupedRowModel",()=>{e._queue(()=>{e._autoResetExpanded(),e._autoResetPageIndex()})}))}function ose(e,t){const n=new Map;return e.reduce((r,i)=>{const o=`${i.getGroupingValue(t)}`,a=r.get(o);return a?a.push(i):r.set(o,[i]),r},n)}function ase(){return e=>xt(()=>[e.getState().sorting,e.getPreSortedRowModel()],(t,n)=>{if(!n.rows.length||!(t!=null&&t.length))return n;const r=e.getState().sorting,i=[],o=r.filter(l=>{var u;return(u=e.getColumn(l.id))==null?void 0:u.getCanSort()}),a={};o.forEach(l=>{const u=e.getColumn(l.id);u&&(a[l.id]={sortUndefined:u.columnDef.sortUndefined,invertSorting:u.columnDef.invertSorting,sortingFn:u.getSortingFn()})});const s=l=>{const u=l.map(c=>({...c}));return u.sort((c,f)=>{for(let h=0;h{var f;i.push(c),(f=c.subRows)!=null&&f.length&&(c.subRows=s(c.subRows))}),u};return{rows:s(n.rows),flatRows:i,rowsById:n.rowsById}},Tt(e.options,"debugTable","getSortedRowModel",()=>e._autoResetPageIndex()))}/** + * vue-table + * + * Copyright (c) TanStack + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function Ny(){return!0}const sse=Symbol("merge-proxy"),lse={get(e,t,n){return t===sse?n:e.get(t)},has(e,t){return e.has(t)},set:Ny,deleteProperty:Ny,getOwnPropertyDescriptor(e,t){return{configurable:!0,enumerable:!0,get(){return e.get(t)},set:Ny,deleteProperty:Ny}},ownKeys(e){return e.keys()}};function Vx(e){return"value"in e?e.value:e}function zp(){for(var e=arguments.length,t=new Array(e),n=0;n=0;i--){const o=Vx(t[i])[r];if(o!==void 0)return o}},has(r){for(let i=t.length-1;i>=0;i--)if(r in Vx(t[i]))return!0;return!1},keys(){const r=[];for(let i=0;i()=>typeof e.render=="function"||typeof e.render=="object"?Wi(e.render,e.props):e.render});function zL(e){return zp(e,{data:N(e.data)})}function use(e){const t=st(e.data),n=zp({state:{},onStateChange:()=>{},renderFallbackValue:null,mergeOptions(o,a){return t?{...o,...a}:zp(o,a)}},t?zL(e):e),r=ese(n);if(t){const o=Ef(e.data);Yt(o,()=>{r.setState(a=>({...a,data:o.value}))},{immediate:!0})}const i=Fe(r.initialState);return wb(()=>{r.setOptions(o=>{var a;const s=new Proxy({},{get:(l,u)=>i.value[u]});return zp(o,t?zL(e):e,{state:zp(s,(a=e.state)!=null?a:{}),onStateChange:l=>{l instanceof Function?i.value=l(i.value):i.value=l,e.onStateChange==null||e.onStateChange(l)}})})}),r}const QI="-",cse=e=>{const t=dse(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:a=>{const s=a.split(QI);return s[0]===""&&s.length!==1&&s.shift(),IV(s,t)||fse(a)},getConflictingClassGroupIds:(a,s)=>{const l=n[a]||[];return s&&r[a]?[...l,...r[a]]:l}}},IV=(e,t)=>{var a;if(e.length===0)return t.classGroupId;const n=e[0],r=t.nextPart.get(n),i=r?IV(e.slice(1),r):void 0;if(i)return i;if(t.validators.length===0)return;const o=e.join(QI);return(a=t.validators.find(({validator:s})=>s(o)))==null?void 0:a.classGroupId},WL=/^\[(.+)\]$/,fse=e=>{if(WL.test(e)){const t=WL.exec(e)[1],n=t==null?void 0:t.substring(0,t.indexOf(":"));if(n)return"arbitrary.."+n}},dse=e=>{const{theme:t,prefix:n}=e,r={nextPart:new Map,validators:[]};return pse(Object.entries(e.classGroups),n).forEach(([o,a])=>{CE(a,r,o,t)}),r},CE=(e,t,n,r)=>{e.forEach(i=>{if(typeof i=="string"){const o=i===""?t:jL(t,i);o.classGroupId=n;return}if(typeof i=="function"){if(hse(i)){CE(i(r),t,n,r);return}t.validators.push({validator:i,classGroupId:n});return}Object.entries(i).forEach(([o,a])=>{CE(a,jL(t,o),n,r)})})},jL=(e,t)=>{let n=e;return t.split(QI).forEach(r=>{n.nextPart.has(r)||n.nextPart.set(r,{nextPart:new Map,validators:[]}),n=n.nextPart.get(r)}),n},hse=e=>e.isThemeGetter,pse=(e,t)=>t?e.map(([n,r])=>{const i=r.map(o=>typeof o=="string"?t+o:typeof o=="object"?Object.fromEntries(Object.entries(o).map(([a,s])=>[t+a,s])):o);return[n,i]}):e,vse=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,n=new Map,r=new Map;const i=(o,a)=>{n.set(o,a),t++,t>e&&(t=0,r=n,n=new Map)};return{get(o){let a=n.get(o);if(a!==void 0)return a;if((a=r.get(o))!==void 0)return i(o,a),a},set(o,a){n.has(o)?n.set(o,a):i(o,a)}}},RV="!",gse=e=>{const{separator:t,experimentalParseClassName:n}=e,r=t.length===1,i=t[0],o=t.length,a=s=>{const l=[];let u=0,c=0,f;for(let y=0;yc?f-c:void 0;return{modifiers:l,hasImportantModifier:h,baseClassName:v,maybePostfixModifierPosition:m}};return n?s=>n({className:s,parseClassName:a}):a},mse=e=>{if(e.length<=1)return e;const t=[];let n=[];return e.forEach(r=>{r[0]==="["?(t.push(...n.sort(),r),n=[]):n.push(r)}),t.push(...n.sort()),t},yse=e=>({cache:vse(e.cacheSize),parseClassName:gse(e),...cse(e)}),_se=/\s+/,bse=(e,t)=>{const{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:i}=t,o=[],a=e.trim().split(_se);let s="";for(let l=a.length-1;l>=0;l-=1){const u=a[l],{modifiers:c,hasImportantModifier:f,baseClassName:d,maybePostfixModifierPosition:h}=n(u);let v=!!h,m=r(v?d.substring(0,h):d);if(!m){if(!v){s=u+(s.length>0?" "+s:s);continue}if(m=r(d),!m){s=u+(s.length>0?" "+s:s);continue}v=!1}const y=mse(c).join(":"),_=f?y+RV:y,b=_+m;if(o.includes(b))continue;o.push(b);const w=i(m,v);for(let S=0;S0?" "+s:s)}return s};function Sse(){let e=0,t,n,r="";for(;e{if(typeof e=="string")return e;let t,n="";for(let r=0;rf(c),e());return n=yse(u),r=n.cache.get,i=n.cache.set,o=s,s(l)}function s(l){const u=r(l);if(u)return u;const c=bse(l,n);return i(l,c),c}return function(){return o(Sse.apply(null,arguments))}}const Un=e=>{const t=n=>n[e]||[];return t.isThemeGetter=!0,t},OV=/^\[(?:([a-z-]+):)?(.+)\]$/i,xse=/^\d+\/\d+$/,Tse=new Set(["px","full","screen"]),Cse=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,Ese=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,Ase=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,Ise=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,Rse=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,Ms=e=>$d(e)||Tse.has(e)||xse.test(e),Ll=e=>Th(e,"length",Fse),$d=e=>!!e&&!Number.isNaN(Number(e)),Hx=e=>Th(e,"number",$d),sp=e=>!!e&&Number.isInteger(Number(e)),Pse=e=>e.endsWith("%")&&$d(e.slice(0,-1)),Ht=e=>OV.test(e),Nl=e=>Cse.test(e),Ose=new Set(["length","size","percentage"]),Dse=e=>Th(e,Ose,DV),Mse=e=>Th(e,"position",DV),Lse=new Set(["image","url"]),Nse=e=>Th(e,Lse,Bse),kse=e=>Th(e,"",$se),lp=()=>!0,Th=(e,t,n)=>{const r=OV.exec(e);return r?r[1]?typeof t=="string"?r[1]===t:t.has(r[1]):n(r[2]):!1},Fse=e=>Ese.test(e)&&!Ase.test(e),DV=()=>!1,$se=e=>Ise.test(e),Bse=e=>Rse.test(e),Vse=()=>{const e=Un("colors"),t=Un("spacing"),n=Un("blur"),r=Un("brightness"),i=Un("borderColor"),o=Un("borderRadius"),a=Un("borderSpacing"),s=Un("borderWidth"),l=Un("contrast"),u=Un("grayscale"),c=Un("hueRotate"),f=Un("invert"),d=Un("gap"),h=Un("gradientColorStops"),v=Un("gradientColorStopPositions"),m=Un("inset"),y=Un("margin"),_=Un("opacity"),b=Un("padding"),w=Un("saturate"),S=Un("scale"),C=Un("sepia"),T=Un("skew"),A=Un("space"),P=Un("translate"),I=()=>["auto","contain","none"],R=()=>["auto","hidden","clip","visible","scroll"],O=()=>["auto",Ht,t],M=()=>[Ht,t],$=()=>["",Ms,Ll],F=()=>["auto",$d,Ht],z=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],B=()=>["solid","dashed","dotted","double","none"],Y=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],j=()=>["start","end","center","between","around","evenly","stretch"],se=()=>["","0",Ht],ge=()=>["auto","avoid","all","avoid-page","page","left","right","column"],ve=()=>[$d,Ht];return{cacheSize:500,separator:":",theme:{colors:[lp],spacing:[Ms,Ll],blur:["none","",Nl,Ht],brightness:ve(),borderColor:[e],borderRadius:["none","","full",Nl,Ht],borderSpacing:M(),borderWidth:$(),contrast:ve(),grayscale:se(),hueRotate:ve(),invert:se(),gap:M(),gradientColorStops:[e],gradientColorStopPositions:[Pse,Ll],inset:O(),margin:O(),opacity:ve(),padding:M(),saturate:ve(),scale:ve(),sepia:se(),skew:ve(),space:M(),translate:M()},classGroups:{aspect:[{aspect:["auto","square","video",Ht]}],container:["container"],columns:[{columns:[Nl]}],"break-after":[{"break-after":ge()}],"break-before":[{"break-before":ge()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...z(),Ht]}],overflow:[{overflow:R()}],"overflow-x":[{"overflow-x":R()}],"overflow-y":[{"overflow-y":R()}],overscroll:[{overscroll:I()}],"overscroll-x":[{"overscroll-x":I()}],"overscroll-y":[{"overscroll-y":I()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[m]}],"inset-x":[{"inset-x":[m]}],"inset-y":[{"inset-y":[m]}],start:[{start:[m]}],end:[{end:[m]}],top:[{top:[m]}],right:[{right:[m]}],bottom:[{bottom:[m]}],left:[{left:[m]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",sp,Ht]}],basis:[{basis:O()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",Ht]}],grow:[{grow:se()}],shrink:[{shrink:se()}],order:[{order:["first","last","none",sp,Ht]}],"grid-cols":[{"grid-cols":[lp]}],"col-start-end":[{col:["auto",{span:["full",sp,Ht]},Ht]}],"col-start":[{"col-start":F()}],"col-end":[{"col-end":F()}],"grid-rows":[{"grid-rows":[lp]}],"row-start-end":[{row:["auto",{span:[sp,Ht]},Ht]}],"row-start":[{"row-start":F()}],"row-end":[{"row-end":F()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",Ht]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",Ht]}],gap:[{gap:[d]}],"gap-x":[{"gap-x":[d]}],"gap-y":[{"gap-y":[d]}],"justify-content":[{justify:["normal",...j()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...j(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...j(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[b]}],px:[{px:[b]}],py:[{py:[b]}],ps:[{ps:[b]}],pe:[{pe:[b]}],pt:[{pt:[b]}],pr:[{pr:[b]}],pb:[{pb:[b]}],pl:[{pl:[b]}],m:[{m:[y]}],mx:[{mx:[y]}],my:[{my:[y]}],ms:[{ms:[y]}],me:[{me:[y]}],mt:[{mt:[y]}],mr:[{mr:[y]}],mb:[{mb:[y]}],ml:[{ml:[y]}],"space-x":[{"space-x":[A]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[A]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",Ht,t]}],"min-w":[{"min-w":[Ht,t,"min","max","fit"]}],"max-w":[{"max-w":[Ht,t,"none","full","min","max","fit","prose",{screen:[Nl]},Nl]}],h:[{h:[Ht,t,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[Ht,t,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[Ht,t,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[Ht,t,"auto","min","max","fit"]}],"font-size":[{text:["base",Nl,Ll]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",Hx]}],"font-family":[{font:[lp]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",Ht]}],"line-clamp":[{"line-clamp":["none",$d,Hx]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",Ms,Ht]}],"list-image":[{"list-image":["none",Ht]}],"list-style-type":[{list:["none","disc","decimal",Ht]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[e]}],"placeholder-opacity":[{"placeholder-opacity":[_]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[e]}],"text-opacity":[{"text-opacity":[_]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...B(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",Ms,Ll]}],"underline-offset":[{"underline-offset":["auto",Ms,Ht]}],"text-decoration-color":[{decoration:[e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:M()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",Ht]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",Ht]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[_]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...z(),Mse]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",Dse]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},Nse]}],"bg-color":[{bg:[e]}],"gradient-from-pos":[{from:[v]}],"gradient-via-pos":[{via:[v]}],"gradient-to-pos":[{to:[v]}],"gradient-from":[{from:[h]}],"gradient-via":[{via:[h]}],"gradient-to":[{to:[h]}],rounded:[{rounded:[o]}],"rounded-s":[{"rounded-s":[o]}],"rounded-e":[{"rounded-e":[o]}],"rounded-t":[{"rounded-t":[o]}],"rounded-r":[{"rounded-r":[o]}],"rounded-b":[{"rounded-b":[o]}],"rounded-l":[{"rounded-l":[o]}],"rounded-ss":[{"rounded-ss":[o]}],"rounded-se":[{"rounded-se":[o]}],"rounded-ee":[{"rounded-ee":[o]}],"rounded-es":[{"rounded-es":[o]}],"rounded-tl":[{"rounded-tl":[o]}],"rounded-tr":[{"rounded-tr":[o]}],"rounded-br":[{"rounded-br":[o]}],"rounded-bl":[{"rounded-bl":[o]}],"border-w":[{border:[s]}],"border-w-x":[{"border-x":[s]}],"border-w-y":[{"border-y":[s]}],"border-w-s":[{"border-s":[s]}],"border-w-e":[{"border-e":[s]}],"border-w-t":[{"border-t":[s]}],"border-w-r":[{"border-r":[s]}],"border-w-b":[{"border-b":[s]}],"border-w-l":[{"border-l":[s]}],"border-opacity":[{"border-opacity":[_]}],"border-style":[{border:[...B(),"hidden"]}],"divide-x":[{"divide-x":[s]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[s]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[_]}],"divide-style":[{divide:B()}],"border-color":[{border:[i]}],"border-color-x":[{"border-x":[i]}],"border-color-y":[{"border-y":[i]}],"border-color-s":[{"border-s":[i]}],"border-color-e":[{"border-e":[i]}],"border-color-t":[{"border-t":[i]}],"border-color-r":[{"border-r":[i]}],"border-color-b":[{"border-b":[i]}],"border-color-l":[{"border-l":[i]}],"divide-color":[{divide:[i]}],"outline-style":[{outline:["",...B()]}],"outline-offset":[{"outline-offset":[Ms,Ht]}],"outline-w":[{outline:[Ms,Ll]}],"outline-color":[{outline:[e]}],"ring-w":[{ring:$()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[e]}],"ring-opacity":[{"ring-opacity":[_]}],"ring-offset-w":[{"ring-offset":[Ms,Ll]}],"ring-offset-color":[{"ring-offset":[e]}],shadow:[{shadow:["","inner","none",Nl,kse]}],"shadow-color":[{shadow:[lp]}],opacity:[{opacity:[_]}],"mix-blend":[{"mix-blend":[...Y(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":Y()}],filter:[{filter:["","none"]}],blur:[{blur:[n]}],brightness:[{brightness:[r]}],contrast:[{contrast:[l]}],"drop-shadow":[{"drop-shadow":["","none",Nl,Ht]}],grayscale:[{grayscale:[u]}],"hue-rotate":[{"hue-rotate":[c]}],invert:[{invert:[f]}],saturate:[{saturate:[w]}],sepia:[{sepia:[C]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[n]}],"backdrop-brightness":[{"backdrop-brightness":[r]}],"backdrop-contrast":[{"backdrop-contrast":[l]}],"backdrop-grayscale":[{"backdrop-grayscale":[u]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[c]}],"backdrop-invert":[{"backdrop-invert":[f]}],"backdrop-opacity":[{"backdrop-opacity":[_]}],"backdrop-saturate":[{"backdrop-saturate":[w]}],"backdrop-sepia":[{"backdrop-sepia":[C]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[a]}],"border-spacing-x":[{"border-spacing-x":[a]}],"border-spacing-y":[{"border-spacing-y":[a]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",Ht]}],duration:[{duration:ve()}],ease:[{ease:["linear","in","out","in-out",Ht]}],delay:[{delay:ve()}],animate:[{animate:["none","spin","ping","pulse","bounce",Ht]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[S]}],"scale-x":[{"scale-x":[S]}],"scale-y":[{"scale-y":[S]}],rotate:[{rotate:[sp,Ht]}],"translate-x":[{"translate-x":[P]}],"translate-y":[{"translate-y":[P]}],"skew-x":[{"skew-x":[T]}],"skew-y":[{"skew-y":[T]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",Ht]}],accent:[{accent:["auto",e]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",Ht]}],"caret-color":[{caret:[e]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":M()}],"scroll-mx":[{"scroll-mx":M()}],"scroll-my":[{"scroll-my":M()}],"scroll-ms":[{"scroll-ms":M()}],"scroll-me":[{"scroll-me":M()}],"scroll-mt":[{"scroll-mt":M()}],"scroll-mr":[{"scroll-mr":M()}],"scroll-mb":[{"scroll-mb":M()}],"scroll-ml":[{"scroll-ml":M()}],"scroll-p":[{"scroll-p":M()}],"scroll-px":[{"scroll-px":M()}],"scroll-py":[{"scroll-py":M()}],"scroll-ps":[{"scroll-ps":M()}],"scroll-pe":[{"scroll-pe":M()}],"scroll-pt":[{"scroll-pt":M()}],"scroll-pr":[{"scroll-pr":M()}],"scroll-pb":[{"scroll-pb":M()}],"scroll-pl":[{"scroll-pl":M()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",Ht]}],fill:[{fill:[e,"none"]}],"stroke-w":[{stroke:[Ms,Ll,Hx]}],stroke:[{stroke:[e,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},Cn=wse(Vse),Use={class:"sticky -top-2 z-10 bg-base-100"},Hse=["colSpan","onClick"],Gse={class:"flex items-center gap-1"},zse=["onClick"],Wse=["onClick"],jse=it({__name:"ConnectionTable",setup(e){const{handlerInfo:t}=KI(),{t:n}=cs(),r=[{header:()=>n("details"),enableSorting:!1,id:vt.Details,cell:({row:y})=>Wi("button",{class:"btn btn-xs btn-circle",onClick:()=>{const _=y.original;t(_)}},[Wi(G4,{class:"h-4 w-4"})])},{header:()=>n("close"),enableSorting:!1,id:vt.Close,cell:({row:y})=>Wi("button",{class:"btn btn-xs btn-circle",onClick:()=>{const _=y.original;jb(_.id)}},[Wi(Ib,{class:"h-4 w-4"})])},{header:()=>n("type"),id:vt.Type,accessorFn:y=>FB(y)},{header:()=>n("process"),id:vt.Process,accessorFn:y=>NB(y)},{header:()=>n("host"),id:vt.Host,accessorFn:y=>`${y.metadata.host?y.metadata.host:y.metadata.destinationIP}:${y.metadata.destinationPort}`},{header:()=>n("rule"),id:vt.Rule,accessorFn:y=>y.rulePayload?`${y.rule}: ${y.rulePayload}`:y.rule},{header:()=>n("chains"),id:vt.Chains,accessorFn:y=>y.chains.join(","),cell:({row:y})=>{const _=[];return y.original.chains.forEach((b,w)=>{_.unshift(Wi("span",b)),wn("connectTime"),enableGrouping:!1,id:vt.ConnectTime,accessorFn:y=>Bb(y.start),sortingFn:(y,_)=>La(_.original.start).valueOf()-La(y.original.start).valueOf()},{header:()=>n("dlSpeed"),enableGrouping:!1,enableSorting:!0,id:vt.DlSpeed,accessorFn:y=>`${Tn(y.downloadSpeed)}/s`,sortingFn:(y,_)=>y.original.downloadSpeed-_.original.downloadSpeed},{header:()=>n("ulSpeed"),enableGrouping:!1,id:vt.UlSpeed,accessorFn:y=>`${Tn(y.uploadSpeed)}/s`,sortingFn:(y,_)=>y.original.uploadSpeed-_.original.uploadSpeed},{header:()=>n("dl"),enableGrouping:!1,id:vt.Download,accessorFn:y=>Tn(y.download),sortingFn:(y,_)=>y.original.download-_.original.download},{header:()=>n("ul"),enableGrouping:!1,id:vt.Upload,accessorFn:y=>Tn(y.upload),sortingFn:(y,_)=>y.original.upload-_.original.upload},{header:()=>n("sourceIP"),id:vt.SourceIP,accessorFn:y=>u1(y.metadata.sourceIP)},{header:()=>n("sourcePort"),id:vt.SourcePort,accessorFn:y=>y.metadata.sourcePort},{header:()=>n("destination"),id:vt.Destination,accessorFn:kB}],i=Fe([]),o=Fe({}),a=Mt("config/table-sorting",[]),s=use({get data(){return Fd.value},columns:r,state:{get columnOrder(){return Cd.value},get columnVisibility(){return{...Object.fromEntries(Object.values(vt).map(y=>[y,!1])),...Object.fromEntries(Cd.value.map(y=>[y,!0]))}},get grouping(){return i.value},get expanded(){return o.value},get sorting(){return a.value}},onGroupingChange:y=>{ef(y)?i.value=y(i.value):i.value=y},onExpandedChange:y=>{ef(y)&&(o.value=y(o.value))},onSortingChange:y=>{ef(y)?a.value=y(a.value):a.value=y},getSortedRowModel:ase(),getGroupedRowModel:ise(),getExpandedRowModel:nse(),getCoreRowModel:tse()}),l=Ve(()=>s.getRowModel().rows),u=Fe(null),c=Ve(()=>({count:l.value.length,getScrollElement:()=>u.value,estimateSize:()=>36,overscan:48})),f=gV(c),d=Ve(()=>f.value.getVirtualItems()),h=Ve(()=>f.value.getTotalSize()+24),v={[cg.SMALL]:"table-xs",[cg.LARGE]:"table-sm"},m=Ve(()=>v[i_.value]);return(y,_)=>(K(),ae("div",{ref_key:"parentRef",ref:u,class:"h-full overflow-y-auto p-2",onTouchstart:_[0]||(_[0]=xo(()=>{},["stop"])),onTouchmove:_[1]||(_[1]=xo(()=>{},["stop"])),onTouchend:_[2]||(_[2]=xo(()=>{},["stop"]))},[L("div",{style:Gr({height:`${h.value}px`})},[L("table",{class:rt(`table table-zebra ${m.value} rounded-none shadow-md`)},[L("thead",Use,[(K(!0),ae(Ze,null,on(N(s).getHeaderGroups(),b=>(K(),ae("tr",{key:b.id},[(K(!0),ae(Ze,null,on(b.headers,w=>(K(),ae("th",{key:w.id,colSpan:w.colSpan,class:rt(w.column.getCanSort()?"cursor-pointer select-none":""),onClick:S=>{var C;return(C=w.column.getToggleSortingHandler())==null?void 0:C(S)}},[L("div",Gse,[w.column.getCanGroup()?(K(),ae("button",{key:0,class:"cursor-pointer",onClick:xo(()=>w.column.getToggleGroupingHandler()(),["stop"])},[w.column.getIsGrouped()?(K(),Ot(N(dM),{key:0,class:"h-4 w-4"})):(K(),Ot(N(hM),{key:1,class:"h-4 w-4"}))],8,zse)):mt("",!0),w.isPlaceholder?mt("",!0):(K(),Ot(N(Ux),{key:1,render:w.column.columnDef.header,props:w.getContext()},null,8,["render","props"])),w.column.getIsSorted()==="asc"?(K(),Ot(N(Kg),{key:2,class:"h-4 w-4"})):mt("",!0),w.column.getIsSorted()==="desc"?(K(),Ot(N(Eb),{key:3,class:"h-4 w-4"})):mt("",!0)])],10,Hse))),128))]))),128))]),L("tbody",null,[(K(!0),ae(Ze,null,on(d.value,(b,w)=>(K(),ae("tr",{key:b.key.toString(),style:Gr({height:`${b.size}px`,transform:`translateY(${b.start-w*b.size}px)`}),class:"bg-base-100 hover:!bg-primary hover:text-primary-content"},[(K(!0),ae(Ze,null,on(l.value[b.index].getVisibleCells(),S=>(K(),ae("td",{key:S.id,class:rt(N(Cn)("whitespace-nowrap text-sm",[N(vt).Download,N(vt).DlSpeed,N(vt).Upload,N(vt).UlSpeed].includes(S.column.id)&&"min-w-20",[N(vt).Host].includes(S.column.id)&&"max-w-[32rem] truncate"))},[S.column.getIsGrouped()?(K(),ae(Ze,{key:0},[l.value[b.index].getCanExpand()?(K(),ae(Ze,{key:0},[L("button",{onClick:()=>l.value[b.index].getToggleExpandedHandler()(),class:"relative top-1 cursor-pointer"},[l.value[b.index].getIsExpanded()?(K(),Ot(N(dM),{key:0,class:"h-4 w-4"})):(K(),Ot(N(hM),{key:1,class:"h-4 w-4"}))],8,Wse),ye(N(Ux),{render:S.column.columnDef.cell,props:S.getContext()},null,8,["render","props"]),L("span",null," ("+re(l.value[b.index].subRows.length)+") ",1)],64)):mt("",!0)],64)):(K(),Ot(N(Ux),{key:1,render:S.getIsAggregated()?S.column.columnDef.aggregatedCell:S.column.columnDef.cell,props:S.getContext()},null,8,["render","props"]))],2))),128))],4))),128))])],2)],4)],544))}});var h1={d:(e,t)=>{for(var n in t)h1.o(t,n)&&!h1.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},MV={};function EE(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);nqse});const gt=(YL={computed:()=>Ve,createTextVNode:()=>ft,createVNode:()=>ye,defineComponent:()=>it,reactive:()=>Na,ref:()=>Fe,watch:()=>Yt,watchEffect:()=>wb},Gx={},h1.d(Gx,YL),Gx),Yse=(0,gt.defineComponent)({props:{data:{required:!0,type:String},onClick:Function},render:function(){var e=this.data,t=this.onClick;return(0,gt.createVNode)("span",{class:"vjs-tree-brackets",onClick:t},[e])}}),Xse=(0,gt.defineComponent)({emits:["change","update:modelValue"],props:{checked:{type:Boolean,default:!1},isMultiple:Boolean,onChange:Function},setup:function(e,t){var n=t.emit;return{uiType:(0,gt.computed)(function(){return e.isMultiple?"checkbox":"radio"}),model:(0,gt.computed)({get:function(){return e.checked},set:function(r){return n("update:modelValue",r)}})}},render:function(){var e=this.uiType,t=this.model,n=this.$emit;return(0,gt.createVNode)("label",{class:["vjs-check-controller",t?"is-checked":""],onClick:function(r){return r.stopPropagation()}},[(0,gt.createVNode)("span",{class:"vjs-check-controller-inner is-".concat(e)},null),(0,gt.createVNode)("input",{checked:t,class:"vjs-check-controller-original is-".concat(e),type:e,onChange:function(){return n("change",t)}},null)])}}),Kse=(0,gt.defineComponent)({props:{nodeType:{required:!0,type:String},onClick:Function},render:function(){var e=this.nodeType,t=this.onClick,n=e==="objectStart"||e==="arrayStart";return n||e==="objectCollapsed"||e==="arrayCollapsed"?(0,gt.createVNode)("span",{class:"vjs-carets vjs-carets-".concat(n?"open":"close"),onClick:t},[(0,gt.createVNode)("svg",{viewBox:"0 0 1024 1024",focusable:"false","data-icon":"caret-down",width:"1em",height:"1em",fill:"currentColor","aria-hidden":"true"},[(0,gt.createVNode)("path",{d:"M840.4 300H183.6c-19.7 0-30.7 20.8-18.5 35l328.4 380.8c9.4 10.9 27.5 10.9 37 0L858.9 335c12.2-14.2 1.2-35-18.5-35z"},null)])]):null}});var YL,Gx;function AE(e){return AE=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},AE(e)}function NV(e){return Object.prototype.toString.call(e).slice(8,-1).toLowerCase()}function Ec(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"root",n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,r=arguments.length>3?arguments[3]:void 0,i=r||{},o=i.key,a=i.index,s=i.type,l=s===void 0?"content":s,u=i.showComma,c=u!==void 0&&u,f=i.length,d=f===void 0?1:f,h=NV(e);if(h==="array"){var v=XL(e.map(function(_,b,w){return Ec(_,"".concat(t,"[").concat(b,"]"),n+1,{index:b,showComma:b!==w.length-1,length:d,type:l})}));return[Ec("[",t,n,{showComma:!1,key:o,length:e.length,type:"arrayStart"})[0]].concat(v,Ec("]",t,n,{showComma:c,length:e.length,type:"arrayEnd"})[0])}if(h==="object"){var m=Object.keys(e),y=XL(m.map(function(_,b,w){return Ec(e[_],/^[a-zA-Z_]\w*$/.test(_)?"".concat(t,".").concat(_):"".concat(t,'["').concat(_,'"]'),n+1,{key:_,showComma:b!==w.length-1,length:d,type:l})}));return[Ec("{",t,n,{showComma:!1,key:o,index:a,length:m.length,type:"objectStart"})[0]].concat(y,Ec("}",t,n,{showComma:c,length:m.length,type:"objectEnd"})[0])}return[{content:e,level:n,key:o,index:a,path:t,showComma:c,length:d,type:l}]}function XL(e){if(typeof Array.prototype.flat=="function")return e.flat();for(var t=p1(e),n=[];t.length;){var r=t.shift();Array.isArray(r)?t.unshift.apply(t,p1(r)):n.push(r)}return n}function IE(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:new WeakMap;if(e==null)return e;if(e instanceof Date)return new Date(e);if(e instanceof RegExp)return new RegExp(e);if(AE(e)!=="object")return e;if(t.get(e))return t.get(e);if(Array.isArray(e)){var n=e.map(function(o){return IE(o,t)});return t.set(e,n),n}var r={};for(var i in e)r[i]=IE(e[i],t);return t.set(e,r),r}function KL(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),n.push.apply(n,r)}return n}function ZL(e){for(var t=1;t=w||T.length>=S,I=(A=e.pathCollapsible)===null||A===void 0?void 0:A.call(e,T);return T.type!=="objectStart"&&T.type!=="arrayStart"||!P&&!I?C:go(go({},C),{},v1({},T.path,1))},{})},s=(0,gt.reactive)({translateY:0,visibleData:null,hiddenPaths:a(e.deep,e.collapsedNodeLength)}),l=(0,gt.computed)(function(){for(var w=null,S=[],C=o.value.length,T=0;Tw.length?w.length-C:A;P<0&&(P=0);var I=P+C;s.translateY=P*e.itemHeight,s.visibleData=w.filter(function(R,O){return O>=P&&O(K(),ae(Ze,null,[N(kc)?(K(),Ot(mae,{key:0})):(K(),Ot(jse,{key:1})),L("dialog",{ref_key:"modalRef",ref:n,class:"modal"},[L("div",Qse,[ye(N(Jse),{data:N(t)},null,8,["data"])]),i[0]||(i[0]=L("form",{method:"dialog",class:"modal-backdrop"},[L("button",null,"close")],-1))],512)],64))}}),tle={class:"relative w-full flex-1"},rm=it({__name:"TextInput",props:{label:{type:String,required:!1},modelValue:{type:String,required:!0}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,r=t,i=Ve({get:()=>n.modelValue,set:a=>r("update:modelValue",a)}),o=()=>{i.value=""};return(a,s)=>(K(),ae("div",tle,[_t(L("input",{"onUpdate:modelValue":s[0]||(s[0]=l=>i.value=l),type:"text",class:"input input-sm join-item input-bordered w-full"},null,512),[[ir,i.value]]),ye(N(Ib),{class:"absolute right-2 top-1/2 h-3 w-3 -translate-y-1/2 cursor-pointer",onClick:o})]))}}),nle=["value"],rle=["value"],JL=it({__name:"SourceIPFilter",props:{horizontal:{type:Boolean}},setup(e){const t=Ve(()=>tae.value.map(n=>({label:u1(n),value:n})));return(n,r)=>n.horizontal?mt("",!0):_t((K(),ae("select",{key:0,class:"join-item select select-bordered select-sm","onUpdate:modelValue":r[0]||(r[0]=i=>st(Us)?Us.value=i:null)},[r[1]||(r[1]=L("option",{value:null},"all",-1)),t.value.every(i=>i.value!==N(Us))&&N(Us)!==null?(K(),ae("option",{key:0,value:N(Us)},re(N(u1)(N(Us))),9,nle)):mt("",!0),(K(!0),ae(Ze,null,on(t.value,i=>(K(),ae("option",{key:i.value,value:i.value},re(i.label),9,rle))),128))],512)),[[hi,N(Us)]])}}),ile={class:"tabs-boxed tabs tabs-sm"},ole={class:"shrink-0"},ale={class:"join flex-1"},sle=["value"],lle={class:"shrink-0"},ule=["data-tip"],cle={class:"flex flex-1 items-center gap-2"},fle={class:"join flex-1"},dle=it({__name:"ConnectionCtrl",props:{horizontal:{type:Boolean}},setup(e){const t=()=>{Fd.value.forEach(n=>{jb(n.id)})};return(n,r)=>(K(),ae("div",{class:rt(N(Cn)("flex flex-col gap-2 p-2 text-sm",n.horizontal&&"flex-row flex-wrap"))},[L("div",ile,[L("a",{role:"tab",class:rt(N(Cn)("tab",N(Cc)===N(zs).ACTIVE&&"tab-active")),onClick:r[0]||(r[0]=()=>Cc.value=N(zs).ACTIVE)},[ft(re(n.$t("activeConnections"))+" ",1),N(Cc)===N(zs).ACTIVE?(K(),ae(Ze,{key:0},[ft(" ("+re(N(Fd).length)+") ",1)],64)):mt("",!0)],2),L("a",{role:"tab",class:rt(N(Cn)("tab",N(Cc)===N(zs).CLOSED&&"tab-active")),onClick:r[1]||(r[1]=()=>Cc.value=N(zs).CLOSED)},[ft(re(n.$t("closedConnections"))+" ",1),N(Cc)===N(zs).CLOSED?(K(),ae(Ze,{key:0},[ft(" ("+re(N(Fd).length)+") ",1)],64)):mt("",!0)],2)]),N(kc)?(K(),ae("div",{key:0,class:rt(N(Cn)("flex w-full items-center gap-2",n.horizontal&&"md:w-auto"))},[L("span",ole,re(n.$t("sortBy"))+":",1),L("div",ale,[_t(L("select",{class:"join-item select select-bordered select-sm block flex-1","onUpdate:modelValue":r[2]||(r[2]=i=>st(h_)?h_.value=i:null)},[(K(!0),ae(Ze,null,on(Object.values(N(zi)),i=>(K(),ae("option",{key:i,value:i},re(n.$t(i)||i),9,sle))),128))],512),[[hi,N(h_)]]),L("button",{class:"btn join-item btn-sm w-12",onClick:r[3]||(r[3]=i=>p_.value=N(p_)===N(Lc).ASC?N(Lc).DESC:N(Lc).ASC)},[N(p_)===N(Lc).ASC?(K(),Ot(N(Kg),{key:0,class:"h-4 w-4"})):(K(),Ot(N(Eb),{key:1,class:"h-4 w-4"}))])])],2)):mt("",!0),L("div",{class:rt(N(Cn)("flex w-full items-center gap-2",n.horizontal&&"md:w-auto"))},[L("span",lle,re(n.$t("quickFilter"))+": ",1),_t(L("input",{type:"text",class:rt(["input input-sm join-item input-bordered w-0 flex-1",n.horizontal&&"md:w-48"]),"onUpdate:modelValue":r[4]||(r[4]=i=>st(bv)?bv.value=i:null)},null,2),[[ir,N(bv)]]),_t(L("input",{type:"checkbox",class:"toggle","onUpdate:modelValue":r[5]||(r[5]=i=>st(d_)?d_.value=i:null)},null,512),[[gr,N(d_)]]),L("div",{class:rt(`tooltip ${n.horizontal?"tooltip-left md:tooltip-bottom":"tooltip-left"}`),"data-tip":n.$t("quickFilterTip")},[ye(N(Y4),{class:"h-4 w-4"})],10,ule)],2),n.horizontal?mt("",!0):(K(),Ot(JL,{key:1})),L("div",cle,[L("div",fle,[n.horizontal?(K(),Ot(JL,{key:0,class:"w-40"})):mt("",!0),ye(rm,{modelValue:N(Sv),"onUpdate:modelValue":r[6]||(r[6]=i=>st(Sv)?Sv.value=i:null),class:"join-item min-w-32"},null,8,["modelValue"]),L("button",{class:"btn join-item btn-sm",onClick:r[7]||(r[7]=i=>v_.value=!N(v_))},[(K(),Ot(ls(N(v_)?N(W4):N(z4)),{class:"h-4 w-4"}))])]),L("button",{class:"btn btn-circle btn-sm",onClick:t},[ye(N(Ib),{class:"h-4 w-4"})])])],2))}}),Xb=(e,t)=>{const n=e.__vccOpts||e;for(const[r,i]of t)n[r]=i;return n},FV=Xb(dle,[["__scopeId","data-v-2a3f5508"]]),g1=Fe([]),Bd=Fe(""),g_=Fe(!1),m_=Mt("config/log-level",Nc.Info);let ky,m1=[];const hle=Ai.throttle(()=>{g1.value=m1.concat(g1.value).slice(0,o_.value),m1=[]},500),RE=[],ple=()=>{RE.length=0;for(const e in So.value){if(e.startsWith("/"))continue;const t=new RegExp(e+":","ig");RE.push([t,`${e} (${So.value[e]}) :`])}};Yt(So,()=>{ple()},{immediate:!0});const PE=()=>{ky==null||ky(),g1.value=[],m1=[];let e=1;const t=Hoe({level:m_.value}),n=Yt(t.data,r=>{if(r){if(g_.value){e++;return}for(const[i,o]of RE)r.payload=r.payload.replace(i,o);m1.unshift({...r,time:new Date().valueOf(),seq:e++}),hle()}});ky=()=>{n(),t.close()}},vle=["value"],$V=it({__name:"LogsCtrl",props:{horizontal:{type:Boolean}},setup(e){return(t,n)=>(K(),ae("div",null,[L("div",{class:rt(N(Cn)("join w-full p-2",t.horizontal&&"max-w-96"))},[_t(L("select",{class:"join-item select select-bordered select-sm","onUpdate:modelValue":n[0]||(n[0]=r=>st(m_)?m_.value=r:null),onChange:n[1]||(n[1]=(...r)=>N(PE)&&N(PE)(...r))},[(K(!0),ae(Ze,null,on(Object.values(N(Nc)),r=>(K(),ae("option",{key:r,value:r},re(r),9,vle))),128))],544),[[hi,N(m_)]]),ye(rm,{type:"text",modelValue:N(Bd),"onUpdate:modelValue":n[2]||(n[2]=r=>st(Bd)?Bd.value=r:null)},null,8,["modelValue"]),L("button",{class:"btn-bordered btn join-item btn-sm",onClick:n[3]||(n[3]=r=>g_.value=!N(g_))},[(K(),Ot(ls(N(g_)?N(W4):N(z4)),{class:"h-4 w-4"}))])],2)]))}}),ei=Fe({port:0,"socks-port":0,"redir-port":0,"tproxy-port":0,"mixed-port":0,"allow-lan":!1,"bind-address":"",mode:"","mode-list":[],modes:[],"log-level":"",ipv6:!1,tun:{enable:!1}}),eR=async()=>{ei.value=(await koe()).data},y_=async e=>{await Foe(e),eR()},BV=Fe(df.PROXIES),VV=Ve(()=>{var t;if(BV.value===df.PROVIDER)return kd.value.map(n=>n.name);const e=n_.value?dE.value:dE.value.filter(n=>{var r;return((r=fi.value[n])==null?void 0:r.hidden)!==!0});return hl.value&&J0.value&&fi.value[Oc]?[...e,Oc]:!hl.value&&((t=ei.value)==null?void 0:t.mode.toLocaleUpperCase())===Oc&&fi.value[Oc]?[Oc]:e}),gle=Ve(()=>dv.value&&VV.value.length>1),Kb=()=>({proxiesTabShow:BV,renderGroups:VV,hasTwoColumns:gle}),mle={key:0,role:"tablist",class:"tabs-boxed tabs tabs-sm"},yle=["onClick"],_le={key:1,class:"flex flex-col gap-2"},ble=["value"],Sle=["value"],wle=["value"],xle={class:"shrink-0"},UV=it({__name:"ProxiesCtrl",props:{horizontal:{type:Boolean}},setup(e){const{proxiesTabShow:t}=Kb(),n=Fe(!1),r=async()=>{if(!n.value){n.value=!0;try{await Promise.all(kd.value.map(a=>cV(a.name))),await dl(),n.value=!1}catch{await dl(),n.value=!1}}},i=Ve(()=>{var a,s;return((a=ei.value)==null?void 0:a["mode-list"])||((s=ei.value)==null?void 0:s.modes)||["direct","rule","global"]}),o=a=>{const s=a.target.value;y_({mode:s})};return(a,s)=>N(ei)?(K(),ae("div",{key:0,class:rt(N(Cn)("flex flex-col gap-1 p-2 text-sm sm:gap-2",a.horizontal&&"flex-row flex-wrap"))},[N(kd).length?(K(),ae("div",{key:0,class:rt(N(Cn)("flex flex-col-reverse gap-2",a.horizontal&&"flex-row"))},[N(kd).length?(K(),ae("div",mle,[(K(!0),ae(Ze,null,on(N(df),l=>(K(),ae("a",{role:"tab",class:rt(["tab",{"tab-active":N(t)===l}]),key:l,onClick:u=>t.value=l},re(a.$t(l)),11,yle))),128))])):mt("",!0),N(t)===N(df).PROVIDER?(K(),ae("div",_le,[L("button",{class:rt(N(Cn)("btn btn-sm",n.value?"animate-pulse":"")),onClick:r},re(a.$t("updateAllProviders")),3)])):mt("",!0)],2)):mt("",!0),s[2]||(s[2]=L("div",{class:"w-full sm:hidden"},null,-1)),L("div",{class:rt(N(Cn)("flex w-full items-center gap-2",a.horizontal&&"w-24"))},[L("select",{class:"select select-bordered select-sm w-1/2 flex-1",value:N(ei).mode,onChange:o},[(K(!0),ae(Ze,null,on(i.value,l=>(K(),ae("option",{key:l,value:l},re(a.$t(l.toLowerCase())||l),9,Sle))),128))],40,ble)],2),L("div",{class:rt(N(Cn)("flex w-full items-center gap-2",a.horizontal&&"w-72 max-sm:flex-1"))},[_t(L("select",{class:"select select-bordered select-sm w-1/2 flex-1","onUpdate:modelValue":s[0]||(s[0]=l=>st(Q0)?Q0.value=l:null)},[(K(!0),ae(Ze,null,on(Object.values(N(ru)),l=>(K(),ae("option",{key:l,value:l},re(a.$t(l)),9,wle))),128))],512),[[hi,N(Q0)]]),L("span",xle,re(a.$t("hideUnavailable"))+": ",1),_t(L("input",{class:"toggle",type:"checkbox","onUpdate:modelValue":s[1]||(s[1]=l=>st(t_)?t_.value=l:null)},null,512),[[gr,N(t_)]])],2)],2)):mt("",!0)}}),xv=Fe(rh.RULES),y1=Fe([]),vg=Fe([]),tf=Fe(""),Tle=Ve(()=>tf.value===""?y1.value:y1.value.filter(e=>[e.type.toLowerCase(),e.payload.toLowerCase(),e.proxy.toLowerCase()].some(t=>t.includes(tf.value.toLowerCase())))),Cle=Ve(()=>tf.value===""?vg.value:vg.value.filter(e=>[e.name.toLowerCase(),e.behavior.toLowerCase(),e.vehicleType.toLowerCase()].some(t=>t.includes(tf.value.toLowerCase())))),gg=async()=>{const{data:e}=await Loe(),{data:t}=await Noe();y1.value=e.rules,vg.value=Object.values(t.providers)},Ele={role:"tablist",class:"tabs-boxed tabs tabs-sm"},Ale=["onClick"],Ile={key:0,class:"flex flex-col gap-2"},HV=it({__name:"RulesCtrl",props:{horizontal:{type:Boolean}},setup(e){const t=Fe(!1),n=async()=>{if(!t.value){t.value=!0;try{await Promise.all(vg.value.map(r=>fV(r.name))),await gg(),t.value=!1}catch{await gg(),t.value=!1}}};return(r,i)=>(K(),ae("div",{class:rt(N(Cn)("flex flex-col gap-2 p-2",`${r.horizontal&&"flex-row"}`))},[N(vg).length?(K(),ae("div",{key:0,class:rt(N(Cn)("flex flex-col-reverse gap-2",r.horizontal&&"flex-row"))},[L("div",Ele,[(K(!0),ae(Ze,null,on(N(rh),o=>(K(),ae("a",{role:"tab",class:rt(["tab",{"tab-active":N(xv)===o}]),key:o,onClick:a=>xv.value=o},re(r.$t(o)),11,Ale))),128))]),N(xv)===N(rh).PROVIDER?(K(),ae("div",Ile,[L("button",{class:rt(N(Cn)("btn btn-sm",t.value?"animate-pulse":"")),onClick:n},re(r.$t("updateAllProviders")),3)])):mt("",!0)],2)):mt("",!0),ye(rm,{class:"w-full max-w-96",modelValue:N(tf),"onUpdate:modelValue":i[0]||(i[0]=o=>st(tf)?tf.value=o:null)},null,8,["modelValue"])],2))}}),Rle=""+new URL("metacubex-BlQkOUXT.jpg",import.meta.url).href,Ple="data:image/svg+xml,%3csvg%20width='1027'%20height='1109'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20xml:space='preserve'%20overflow='hidden'%3e%3cdefs%3e%3cfilter%20id='fx0'%20x='-10%25'%20y='-10%25'%20width='120%25'%20height='120%25'%20filterUnits='userSpaceOnUse'%20primitiveUnits='userSpaceOnUse'%3e%3cfeComponentTransfer%20color-interpolation-filters='sRGB'%3e%3cfeFuncR%20type='discrete'%20tableValues='0%200'%20/%3e%3cfeFuncG%20type='discrete'%20tableValues='0%200'%20/%3e%3cfeFuncB%20type='discrete'%20tableValues='0%200'%20/%3e%3cfeFuncA%20type='linear'%20slope='0.4'%20intercept='0'%20/%3e%3c/feComponentTransfer%3e%3cfeGaussianBlur%20stdDeviation='4.58333%204.58333'%20/%3e%3c/filter%3e%3cclipPath%20id='clip1'%3e%3crect%20x='692'%20y='855'%20width='1027'%20height='1109'%20/%3e%3c/clipPath%3e%3cclipPath%20id='clip2'%3e%3crect%20x='-2'%20y='-2'%20width='541'%20height='786'%20/%3e%3c/clipPath%3e%3cclipPath%20id='clip3'%3e%3crect%20x='0'%20y='0'%20width='535'%20height='782'%20/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23clip1)'%20transform='translate(-692%20-855)'%3e%3cpath%20d='M692%201191%20692%201575.69C692%201640.41%20731.499%201651.19%20731.499%201651.19L1148.03%201931.62C1212.66%201974.77%201194.71%201881.29%201194.71%201881.29L1194.71%201528.96%20692%201191Z'%20fill='%2337474F'%20fill-rule='evenodd'%20/%3e%3cg%20clip-path='url(%23clip2)'%20filter='url(%23fx0)'%20transform='translate(1184%201182)'%3e%3cg%20clip-path='url(%23clip3)'%3e%3cpath%20d='M520.482%2015.4819%20520.482%20400.176C520.482%20464.89%20480.983%20475.676%20480.983%20475.676%20480.983%20475.676%20129.086%20712.963%2064.4523%20756.106-0.181814%20799.25%2017.7721%20705.773%2017.7721%20705.773L17.7721%20353.437%20520.482%2015.4819Z'%20fill='%23455A64'%20fill-rule='evenodd'%20/%3e%3c/g%3e%3c/g%3e%3cpath%20d='M1698%201191%201698%201575.69C1698%201640.41%201658.5%201651.19%201658.5%201651.19%201658.5%201651.19%201306.6%201888.48%201241.97%201931.62%201177.34%201974.77%201195.29%201881.29%201195.29%201881.29L1195.29%201528.96%201698%201191Z'%20fill='%23455A64'%20fill-rule='evenodd'%20/%3e%3cpath%20d='M1241.71%20868.473C1212.96%20850.509%201169.85%20850.509%201144.7%20868.473L713.557%201163.07C684.814%201181.04%20684.814%201213.37%20713.557%201231.33L1144.7%201529.53C1173.44%201547.49%201216.56%201547.49%201241.71%201529.53L1676.44%201227.74C1705.19%201209.78%201705.19%201177.44%201676.44%201159.48L1241.71%20868.473Z'%20fill='%23546E7A'%20fill-rule='evenodd'%20/%3e%3cpath%20d='M1195%201949C1173.4%201949%201159%201935.19%201159%201917.92L1159%201531.08C1159%201513.82%201173.4%201500%201195%201500%201216.6%201500%201231%201513.82%201231%201531.08L1231%201914.46C1231%201935.19%201216.6%201949%201195%201949Z'%20fill='%23546E7A'%20fill-rule='evenodd'%20/%3e%3cpath%20d='M1553.92%201435.92C1553.92%201471.89%201557.5%201486.27%201518.03%201511.45L1428.32%201568.99C1388.85%201594.17%201374.5%201572.59%201374.5%201540.22L1374.5%201446.71C1374.5%201439.52%201374.5%201435.92%201363.73%201428.73%201270.43%201363.99%20911.591%201115.84%20847%201069.09L1012.07%20954C1058.72%20982.772%201399.61%201209.35%201539.56%201306.45%201546.74%201310.05%201550.33%201317.24%201550.33%201320.84L1550.33%201435.92Z'%20fill='%2399AAB5'%20fill-rule='evenodd'%20/%3e%3cpath%20d='M1543.41%201310.21C1399.82%201213.17%201058.79%20986.752%201015.72%20958L951.103%20997.534%20847%201069.41C911.615%201116.14%201270.59%201360.53%201363.92%201425.22%201371.1%201428.81%201371.1%201432.41%201371.1%201436L1547%201313.8C1547%201313.8%201547%201310.21%201543.41%201310.21Z'%20fill='%23CCD6DD'%20fill-rule='evenodd'%20/%3e%3cpath%20d='M1554.9%201435.48%201554.9%201324.19C1554.9%201317.01%201551.3%201313.42%201544.11%201309.83%201400.28%201212.89%201058.67%20986.721%201015.51%20958L940%201008.26C1062.26%201090.83%201389.49%201306.24%201475.79%201367.27%201486.58%201374.45%201486.58%201381.63%201486.58%201385.22L1486.58%201536%201522.54%201510.87C1558.5%201485.74%201554.9%201467.79%201554.9%201435.48Z'%20fill='%23CCD6DD'%20fill-rule='evenodd'%20/%3e%3cpath%20d='M1543.23%201309.95C1399.6%201212.98%201058.49%20986.731%201015.4%20958L940%201008.28C1062.08%201090.88%201388.83%201306.36%201475.01%201367.41%201475.01%201367.41%201478.6%201371%201478.6%201371L1554%201317.13C1546.82%201313.54%201546.82%201309.95%201543.23%201309.95Z'%20fill='%23E1E8ED'%20fill-rule='evenodd'%20/%3e%3c/g%3e%3c/svg%3e",Ole={class:"flex items-center gap-1"},Dle=["src"],tR=it({__name:"BackendVersion",setup(e){return(t,n)=>(K(),ae("div",Ole,[ft(re(t.$t("version"))+": ",1),L("img",{src:N(hl)?N(Ple):N(Rle),class:"h-4 w-4 rounded-sm"},null,8,Dle),ft(" "+re(N(dg)),1)]))}}),Mle={class:"join flex"},Lle=["value"],GV=it({__name:"BackendSwitch",setup(e){const t=Ve(()=>fs.value.map(r=>({label:Eu(r),value:r.uuid}))),n=()=>{ci.value=null,Fa.push({name:un.setup})};return(r,i)=>(K(),ae("div",Mle,[_t(L("select",{class:"join-item select select-bordered select-sm w-56","onUpdate:modelValue":i[0]||(i[0]=o=>st(ci)?ci.value=o:null)},[(K(!0),ae(Ze,null,on(t.value,o=>(K(),ae("option",{key:o.value,value:o.value},re(o.label),9,Lle))),128))],512),[[hi,N(ci)]]),L("button",{class:"btn join-item btn-sm",onClick:n},[ye(N(j4),{class:"h-4 w-4"})])]))}}),Nle={class:"grid w-full grid-cols-2 gap-1 rounded-lg"},zV=it({__name:"StatisticsInfo",setup(e){return(t,n)=>(K(),ae("div",Nle,[L("div",null,re(t.$t("connections"))+": "+re(N(ea).length),1),L("div",null,re(t.$t("memoryUsage"))+": "+re(N(Tn)(N(kb),{binary:!0})),1),L("div",null,re(t.$t("download"))+": "+re(N(Tn)(N(hg))),1),L("div",null,re(t.$t("dlSpeed"))+": "+re(N(Tn)(N(Fb)))+"/s",1),L("div",null,re(t.$t("upload"))+": "+re(N(Tn)(N(pg))),1),L("div",null,re(t.$t("ulSpeed"))+": "+re(N(Tn)(N($b)))+"/s",1)]))}}),kle={class:"flex flex-col gap-2 p-2 text-sm"},Fle={class:"flex"},$le=it({__name:"CommonCtrl",setup(e){return(t,n)=>(K(),ae("div",kle,[ye(zV),ye(tR),L("div",Fle,[L("button",{class:"btn btn-circle btn-sm",onClick:n[0]||(n[0]=r=>mu.value=!0)},[ye(N(mQ),{class:"h-5 w-5"})]),n[1]||(n[1]=L("div",{class:"flex-1"},null,-1)),ye(GV)])]))}});/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */var OE=function(e,t){return OE=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,r){n.__proto__=r}||function(n,r){for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(n[i]=r[i])},OE(e,t)};function ot(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");OE(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}var nR=12,Ble="sans-serif",pf=nR+"px "+Ble,Vle=20,Ule=100,Hle="007LLmW'55;N0500LLLLLLLLLL00NNNLzWW\\\\WQb\\0FWLg\\bWb\\WQ\\WrWWQ000CL5LLFLL0LL**F*gLLLL5F0LF\\FFF5.5N";function Gle(e){var t={};if(typeof JSON>"u")return t;for(var n=0;n=0)s=a*n.length;else for(var l=0;l"u"&&typeof self<"u"?Dt.worker=!0:!Dt.hasGlobalWindow||"Deno"in window?(Dt.node=!0,Dt.svgSupported=!0):oue(navigator.userAgent,Dt);function oue(e,t){var n=t.browser,r=e.match(/Firefox\/([\d.]+)/),i=e.match(/MSIE\s([\d.]+)/)||e.match(/Trident\/.+?rv:(([\d.]+))/),o=e.match(/Edge?\/([\d.]+)/),a=/micromessenger/i.test(e);r&&(n.firefox=!0,n.version=r[1]),i&&(n.ie=!0,n.version=i[1]),o&&(n.edge=!0,n.version=o[1],n.newEdge=+o[1].split(".")[0]>18),a&&(n.weChat=!0),t.svgSupported=typeof SVGRect<"u",t.touchEventsSupported="ontouchstart"in window&&!n.ie&&!n.edge,t.pointerEventsSupported="onpointerdown"in window&&(n.edge||n.ie&&+n.version>=11),t.domSupported=typeof document<"u";var s=document.documentElement.style;t.transform3dSupported=(n.ie&&"transition"in s||n.edge||"WebKitCSSMatrix"in window&&"m11"in new WebKitCSSMatrix||"MozPerspective"in s)&&!("OTransition"in s),t.transformSupported=t.transform3dSupported||n.ie&&+n.version>=9}var aue=".",tc="___EC__COMPONENT__CONTAINER___",JV="___EC__EXTENDED_CLASS___";function rs(e){var t={main:"",sub:""};if(e){var n=e.split(aue);t.main=n[0]||"",t.sub=n[1]||""}return t}function sue(e){pl(/^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(e),'componentType "'+e+'" illegal')}function lue(e){return!!(e&&e[JV])}function sR(e,t){e.$constructor=e,e.extend=function(n){var r=this,i;return uue(r)?i=function(o){ot(a,o);function a(){return o.apply(this,arguments)||this}return a}(r):(i=function(){(n.$constructor||r).apply(this,arguments)},Kle(i,this)),Ke(i.prototype,n),i[JV]=!0,i.extend=this.extend,i.superCall=due,i.superApply=hue,i.superClass=r,i}}function uue(e){return Vt(e)&&/^class\s/.test(Function.prototype.toString.call(e))}function QV(e,t){e.extend=t.extend}var cue=Math.round(Math.random()*10);function fue(e){var t=["__\0is_clz",cue++].join("_");e.prototype[t]=!0,e.isInstance=function(n){return!!(n&&n[t])}}function due(e,t){for(var n=[],r=2;r=0||o&&In(o,l)<0)){var u=r.getShallow(l,t);u!=null&&(a[e[s][0]]=u)}}return a}}var pue=[["fill","color"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["opacity"],["shadowColor"]],vue=_g(pue),gue=function(){function e(){}return e.prototype.getAreaStyle=function(t,n){return vue(this,t,n)},e}(),eU=function(){function e(t){this.value=t}return e}(),mue=function(){function e(){this._len=0}return e.prototype.insert=function(t){var n=new eU(t);return this.insertEntry(n),n},e.prototype.insertEntry=function(t){this.head?(this.tail.next=t,t.prev=this.tail,t.next=null,this.tail=t):this.head=this.tail=t,this._len++},e.prototype.remove=function(t){var n=t.prev,r=t.next;n?n.next=r:this.head=r,r?r.prev=n:this.tail=n,t.next=t.prev=null,this._len--},e.prototype.len=function(){return this._len},e.prototype.clear=function(){this.head=this.tail=null,this._len=0},e}(),om=function(){function e(t){this._list=new mue,this._maxSize=10,this._map={},this._maxSize=t}return e.prototype.put=function(t,n){var r=this._list,i=this._map,o=null;if(i[t]==null){var a=r.len(),s=this._lastRemovedEntry;if(a>=this._maxSize&&a>0){var l=r.head;r.remove(l),delete i[l.key],o=l.value,this._lastRemovedEntry=l}s?s.value=n:s=new eU(n),s.key=t,r.insertEntry(s),i[t]=s}return o},e.prototype.get=function(t){var n=this._map[t],r=this._list;if(n!=null)return n!==r.tail&&(r.remove(n),r.insertEntry(n)),n.value},e.prototype.clear=function(){this._list.clear(),this._map={}},e.prototype.len=function(){return this._list.len()},e}(),LE=new om(50);function yue(e){if(typeof e=="string"){var t=LE.get(e);return t&&t.image}else return e}function tU(e,t,n,r,i){if(e)if(typeof e=="string"){if(t&&t.__zrImageSrc===e||!n)return t;var o=LE.get(e),a={hostEl:n,cb:r,cbPayload:i};return o?(t=o.image,!eS(t)&&o.pending.push(a)):(t=Ch.loadImage(e,tN,tN),t.__zrImageSrc=e,LE.put(e,t.__cachedImgObj={image:t,pending:[a]})),t}else return e;else return t}function tN(){var e=this.__cachedImgObj;this.onload=this.onerror=this.__cachedImgObj=null;for(var t=0;tv&&(v=w,mv&&(v=S,_=r.x&&t<=r.x+r.width&&n>=r.y&&n<=r.y+r.height},e.prototype.clone=function(){return new e(this.x,this.y,this.width,this.height)},e.prototype.copy=function(t){e.copy(this,t)},e.prototype.plain=function(){return{x:this.x,y:this.y,width:this.width,height:this.height}},e.prototype.isFinite=function(){return isFinite(this.x)&&isFinite(this.y)&&isFinite(this.width)&&isFinite(this.height)},e.prototype.isZero=function(){return this.width===0||this.height===0},e.create=function(t){return new e(t.x,t.y,t.width,t.height)},e.copy=function(t,n){t.x=n.x,t.y=n.y,t.width=n.width,t.height=n.height},e.applyTransform=function(t,n,r){if(!r){t!==n&&e.copy(t,n);return}if(r[1]<1e-5&&r[1]>-1e-5&&r[2]<1e-5&&r[2]>-1e-5){var i=r[0],o=r[3],a=r[4],s=r[5];t.x=n.x*i+a,t.y=n.y*o+s,t.width=n.width*i,t.height=n.height*o,t.width<0&&(t.x+=t.width,t.width=-t.width),t.height<0&&(t.y+=t.height,t.height=-t.height);return}nc.x=ic.x=n.x,nc.y=oc.y=n.y,rc.x=oc.x=n.x+n.width,rc.y=ic.y=n.y+n.height,nc.transform(r),oc.transform(r),rc.transform(r),ic.transform(r),t.x=$y(nc.x,rc.x,ic.x,oc.x),t.y=$y(nc.y,rc.y,ic.y,oc.y);var l=By(nc.x,rc.x,ic.x,oc.x),u=By(nc.y,rc.y,ic.y,oc.y);t.width=l-t.x,t.height=u-t.y},e}(),nN={};function Ao(e,t){t=t||pf;var n=nN[t];n||(n=nN[t]=new om(500));var r=n.get(e);return r==null&&(r=Ch.measureText(e,t).width,n.put(e,r)),r}function rN(e,t,n,r){var i=Ao(e,t),o=dR(t),a=Wp(0,i,n),s=_d(0,o,r),l=new bn(a,s,i,o);return l}function fR(e,t,n,r){var i=((e||"")+"").split(` +`),o=i.length;if(o===1)return rN(i[0],t,n,r);for(var a=new bn(0,0,0,0),s=0;s=0?parseFloat(e)/100*t:parseFloat(e):e}function nU(e,t,n){var r=t.position||"inside",i=t.distance!=null?t.distance:5,o=n.height,a=n.width,s=o/2,l=n.x,u=n.y,c="left",f="top";if(r instanceof Array)l+=gf(r[0],n.width),u+=gf(r[1],n.height),c=null,f=null;else switch(r){case"left":l-=i,u+=s,c="right",f="middle";break;case"right":l+=i+a,u+=s,f="middle";break;case"top":l+=a/2,u-=i,c="center",f="bottom";break;case"bottom":l+=a/2,u+=o+i,c="center";break;case"inside":l+=a/2,u+=s,c="center",f="middle";break;case"insideLeft":l+=i,u+=s,f="middle";break;case"insideRight":l+=a-i,u+=s,c="right",f="middle";break;case"insideTop":l+=a/2,u+=i,c="center";break;case"insideBottom":l+=a/2,u+=o-i,c="center",f="bottom";break;case"insideTopLeft":l+=i,u+=i;break;case"insideTopRight":l+=a-i,u+=i,c="right";break;case"insideBottomLeft":l+=i,u+=o-i,f="bottom";break;case"insideBottomRight":l+=a-i,u+=o-i,c="right",f="bottom";break}return e=e||{},e.x=l,e.y=u,e.align=c,e.verticalAlign=f,e}var zx=/\{([a-zA-Z0-9_]+)\|([^}]*)\}/g;function Sue(e,t,n,r,i,o){if(!n){e.text="",e.isTruncated=!1;return}var a=(t+"").split(` +`);o=rU(n,r,i,o);for(var s=!1,l={},u=0,c=a.length;u=a;l++)s-=a;var u=Ao(n,t);return u>s&&(n="",u=0),s=e-u,i.ellipsis=n,i.ellipsisWidth=u,i.contentWidth=s,i.containerWidth=e,i}function iU(e,t,n){var r=n.containerWidth,i=n.font,o=n.contentWidth;if(!r){e.textLine="",e.isTruncated=!1;return}var a=Ao(t,i);if(a<=r){e.textLine=t,e.isTruncated=!1;return}for(var s=0;;s++){if(a<=o||s>=n.maxIterations){t+=n.ellipsis;break}var l=s===0?wue(t,o,n.ascCharWidth,n.cnCharWidth):a>0?Math.floor(t.length*o/a):0;t=t.substr(0,l),a=Ao(t,i)}t===""&&(t=n.placeholder),e.textLine=t,e.isTruncated=!0}function wue(e,t,n,r){for(var i=0,o=0,a=e.length;ov&&u){var m=Math.floor(v/s);c=c||d.length>m,d=d.slice(0,m)}if(e&&o&&f!=null)for(var y=rU(f,i,t.ellipsis,{minChar:t.truncateMinChar,placeholder:t.placeholder}),_={},b=0;bs&&Wx(n,e.substring(s,u),t,a),Wx(n,l[2],t,a,l[1]),s=zx.lastIndex}si){var $=n.lines.length;T>0?(w.tokens=w.tokens.slice(0,T),_(w,C,S),n.lines=n.lines.slice(0,b+1)):n.lines=n.lines.slice(0,b),n.isTruncated=n.isTruncated||n.lines.length<$;break e}var F=P.width,z=F==null||F==="auto";if(typeof F=="string"&&F.charAt(F.length-1)==="%")A.percentWidth=F,c.push(A),A.contentWidth=Ao(A.text,O);else{if(z){var B=P.backgroundColor,Y=B&&B.image;Y&&(Y=yue(Y),eS(Y)&&(A.width=Math.max(A.width,Y.width*M/Y.height)))}var j=v&&r!=null?r-C:null;j!=null&&j0&&v+r.accumWidth>r.width&&(c=t.split(` +`),u=!0),r.accumWidth=v}else{var m=oU(t,l,r.width,r.breakAll,r.accumWidth);r.accumWidth=m.accumWidth+h,f=m.linesWidths,c=m.lines}}else c=t.split(` +`);for(var y=0;y=32&&t<=591||t>=880&&t<=4351||t>=4608&&t<=5119||t>=7680&&t<=8303}var Iue=Eh(",&?/;] ".split(""),function(e,t){return e[t]=!0,e},{});function Rue(e){return Aue(e)?!!Iue[e]:!0}function oU(e,t,n,r,i){for(var o=[],a=[],s="",l="",u=0,c=0,f=0;fn:i+c+h>n){c?(s||l)&&(v?(s||(s=l,l="",u=0,c=u),o.push(s),a.push(c-u),l+=d,u+=h,s="",c=u):(l&&(s+=l,l="",u=0),o.push(s),a.push(c),s=d,c=h)):v?(o.push(l),a.push(u),l=d,u=h):(o.push(d),a.push(h));continue}c+=h,v?(l+=d,u+=h):(l&&(s+=l,l="",u=0),s+=d)}return!o.length&&!s&&(s=e,l="",u=0),l&&(s+=l),s&&(o.push(s),a.push(c)),o.length===1&&(c+=i),{accumWidth:c,lines:o,linesWidths:a}}function Ah(e,t){return e==null&&(e=0),t==null&&(t=0),[e,t]}function Pue(e){return[e[0],e[1]]}function oN(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e}function Oue(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e}function Due(e){return Math.sqrt(Mue(e))}function Mue(e){return e[0]*e[0]+e[1]*e[1]}function jx(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e}function Lue(e,t){var n=Due(t);return n===0?(e[0]=0,e[1]=0):(e[0]=t[0]/n,e[1]=t[1]/n),e}function kE(e,t){return Math.sqrt((e[0]-t[0])*(e[0]-t[0])+(e[1]-t[1])*(e[1]-t[1]))}var Nue=kE;function kue(e,t){return(e[0]-t[0])*(e[0]-t[0])+(e[1]-t[1])*(e[1]-t[1])}var Hd=kue;function na(e,t,n){var r=t[0],i=t[1];return e[0]=n[0]*r+n[2]*i+n[4],e[1]=n[1]*r+n[3]*i+n[5],e}function Ed(e,t,n){return e[0]=Math.min(t[0],n[0]),e[1]=Math.min(t[1],n[1]),e}function Ad(e,t,n){return e[0]=Math.max(t[0],n[0]),e[1]=Math.max(t[1],n[1]),e}var aN=lR,sN=5e-5;function ac(e){return e>sN||e<-sN}var sc=[],Kf=[],Yx=Vd(),Xx=Math.abs,hR=function(){function e(){}return e.prototype.getLocalTransform=function(t){return e.getLocalTransform(this,t)},e.prototype.setPosition=function(t){this.x=t[0],this.y=t[1]},e.prototype.setScale=function(t){this.scaleX=t[0],this.scaleY=t[1]},e.prototype.setSkew=function(t){this.skewX=t[0],this.skewY=t[1]},e.prototype.setOrigin=function(t){this.originX=t[0],this.originY=t[1]},e.prototype.needLocalTransform=function(){return ac(this.rotation)||ac(this.x)||ac(this.y)||ac(this.scaleX-1)||ac(this.scaleY-1)||ac(this.skewX)||ac(this.skewY)},e.prototype.updateTransform=function(){var t=this.parent&&this.parent.transform,n=this.needLocalTransform(),r=this.transform;if(!(n||t)){r&&(aN(r),this.invTransform=null);return}r=r||Vd(),n?this.getLocalTransform(r):aN(r),t&&(n?Ud(r,t,r):_ue(r,t)),this.transform=r,this._resolveGlobalScaleRatio(r)},e.prototype._resolveGlobalScaleRatio=function(t){var n=this.globalScaleRatio;if(n!=null&&n!==1){this.getGlobalScale(sc);var r=sc[0]<0?-1:1,i=sc[1]<0?-1:1,o=((sc[0]-r)*n+r)/sc[0]||0,a=((sc[1]-i)*n+i)/sc[1]||0;t[0]*=o,t[1]*=o,t[2]*=a,t[3]*=a}this.invTransform=this.invTransform||Vd(),cR(this.invTransform,t)},e.prototype.getComputedTransform=function(){for(var t=this,n=[];t;)n.push(t),t=t.parent;for(;t=n.pop();)t.updateTransform();return this.transform},e.prototype.setLocalTransform=function(t){if(t){var n=t[0]*t[0]+t[1]*t[1],r=t[2]*t[2]+t[3]*t[3],i=Math.atan2(t[1],t[0]),o=Math.PI/2+i-Math.atan2(t[3],t[2]);r=Math.sqrt(r)*Math.cos(o),n=Math.sqrt(n),this.skewX=o,this.skewY=0,this.rotation=-i,this.x=+t[4],this.y=+t[5],this.scaleX=n,this.scaleY=r,this.originX=0,this.originY=0}},e.prototype.decomposeTransform=function(){if(this.transform){var t=this.parent,n=this.transform;t&&t.transform&&(t.invTransform=t.invTransform||Vd(),Ud(Kf,t.invTransform,n),n=Kf);var r=this.originX,i=this.originY;(r||i)&&(Yx[4]=r,Yx[5]=i,Ud(Kf,n,Yx),Kf[4]-=r,Kf[5]-=i,n=Kf),this.setLocalTransform(n)}},e.prototype.getGlobalScale=function(t){var n=this.transform;return t=t||[],n?(t[0]=Math.sqrt(n[0]*n[0]+n[1]*n[1]),t[1]=Math.sqrt(n[2]*n[2]+n[3]*n[3]),n[0]<0&&(t[0]=-t[0]),n[3]<0&&(t[1]=-t[1]),t):(t[0]=1,t[1]=1,t)},e.prototype.transformCoordToLocal=function(t,n){var r=[t,n],i=this.invTransform;return i&&na(r,r,i),r},e.prototype.transformCoordToGlobal=function(t,n){var r=[t,n],i=this.transform;return i&&na(r,r,i),r},e.prototype.getLineScale=function(){var t=this.transform;return t&&Xx(t[0]-1)>1e-10&&Xx(t[3]-1)>1e-10?Math.sqrt(Xx(t[0]*t[3]-t[2]*t[1])):1},e.prototype.copyTransform=function(t){Fue(this,t)},e.getLocalTransform=function(t,n){n=n||[];var r=t.originX||0,i=t.originY||0,o=t.scaleX,a=t.scaleY,s=t.anchorX,l=t.anchorY,u=t.rotation||0,c=t.x,f=t.y,d=t.skewX?Math.tan(t.skewX):0,h=t.skewY?Math.tan(-t.skewY):0;if(r||i||s||l){var v=r+s,m=i+l;n[4]=-v*o-d*m*a,n[5]=-m*a-h*v*o}else n[4]=n[5]=0;return n[0]=o,n[3]=a,n[1]=h*o,n[2]=d*a,u&&uR(n,n,u),n[4]+=r+c,n[5]+=i+f,n},e.initDefaultProps=function(){var t=e.prototype;t.scaleX=t.scaleY=t.globalScaleRatio=1,t.x=t.y=t.originX=t.originY=t.skewX=t.skewY=t.rotation=t.anchorX=t.anchorY=0}(),e}(),bg=["x","y","originX","originY","anchorX","anchorY","rotation","scaleX","scaleY","skewX","skewY"];function Fue(e,t){for(var n=0;n-b1&&eb1||e<-b1}function Hr(e,t,n,r,i){var o=1-i;return o*o*(o*e+3*i*t)+i*i*(i*r+3*o*n)}function uN(e,t,n,r,i){var o=1-i;return 3*(((t-e)*o+2*(n-t)*i)*o+(r-n)*i*i)}function S1(e,t,n,r,i,o){var a=r+3*(t-n)-e,s=3*(n-t*2+e),l=3*(t-e),u=e-i,c=s*s-3*a*l,f=s*l-9*a*u,d=l*l-3*s*u,h=0;if(cu(c)&&cu(f))if(cu(s))o[0]=0;else{var v=-l/s;v>=0&&v<=1&&(o[h++]=v)}else{var m=f*f-4*c*d;if(cu(m)){var y=f/c,v=-s/a+y,_=-y/2;v>=0&&v<=1&&(o[h++]=v),_>=0&&_<=1&&(o[h++]=_)}else if(m>0){var b=yu(m),w=c*s+1.5*a*(-f+b),S=c*s+1.5*a*(-f-b);w<0?w=-Vy(-w,Uy):w=Vy(w,Uy),S<0?S=-Vy(-S,Uy):S=Vy(S,Uy);var v=(-s-(w+S))/(3*a);v>=0&&v<=1&&(o[h++]=v)}else{var C=(2*c*s-3*a*f)/(2*yu(c*c*c)),T=Math.acos(C)/3,A=yu(c),P=Math.cos(T),v=(-s-2*A*P)/(3*a),_=(-s+A*(P+lN*Math.sin(T)))/(3*a),I=(-s+A*(P-lN*Math.sin(T)))/(3*a);v>=0&&v<=1&&(o[h++]=v),_>=0&&_<=1&&(o[h++]=_),I>=0&&I<=1&&(o[h++]=I)}}return h}function lU(e,t,n,r,i){var o=6*n-12*t+6*e,a=9*t+3*r-3*e-9*n,s=3*t-3*e,l=0;if(cu(a)){if(sU(o)){var u=-s/o;u>=0&&u<=1&&(i[l++]=u)}}else{var c=o*o-4*a*s;if(cu(c))i[0]=-o/(2*a);else if(c>0){var f=yu(c),u=(-o+f)/(2*a),d=(-o-f)/(2*a);u>=0&&u<=1&&(i[l++]=u),d>=0&&d<=1&&(i[l++]=d)}}return l}function w1(e,t,n,r,i,o){var a=(t-e)*i+e,s=(n-t)*i+t,l=(r-n)*i+n,u=(s-a)*i+a,c=(l-s)*i+s,f=(c-u)*i+u;o[0]=e,o[1]=a,o[2]=u,o[3]=f,o[4]=f,o[5]=c,o[6]=l,o[7]=r}function $ue(e,t,n,r,i,o,a,s,l,u,c){var f,d=.005,h=1/0,v,m,y,_;es[0]=l,es[1]=u;for(var b=0;b<1;b+=.05)Ko[0]=Hr(e,n,i,a,b),Ko[1]=Hr(t,r,o,s,b),y=Hd(es,Ko),y=0&&y=0&&u<=1&&(i[l++]=u)}}else{var c=a*a-4*o*s;if(cu(c)){var u=-a/(2*o);u>=0&&u<=1&&(i[l++]=u)}else if(c>0){var f=yu(c),u=(-a+f)/(2*o),d=(-a-f)/(2*o);u>=0&&u<=1&&(i[l++]=u),d>=0&&d<=1&&(i[l++]=d)}}return l}function uU(e,t,n){var r=e+n-2*t;return r===0?.5:(e-t)/r}function x1(e,t,n,r,i){var o=(t-e)*r+e,a=(n-t)*r+t,s=(a-o)*r+o;i[0]=e,i[1]=o,i[2]=s,i[3]=s,i[4]=a,i[5]=n}function Uue(e,t,n,r,i,o,a,s,l){var u,c=.005,f=1/0;es[0]=a,es[1]=s;for(var d=0;d<1;d+=.05){Ko[0]=Yi(e,n,i,d),Ko[1]=Yi(t,r,o,d);var h=Hd(es,Ko);h=0&&h=1?1:S1(0,r,o,1,l,s)&&Hr(0,i,a,1,s[0])}}}var zue=function(){function e(t){this._inited=!1,this._startTime=0,this._pausedTime=0,this._paused=!1,this._life=t.life||1e3,this._delay=t.delay||0,this.loop=t.loop||!1,this.onframe=t.onframe||eo,this.ondestroy=t.ondestroy||eo,this.onrestart=t.onrestart||eo,t.easing&&this.setEasing(t.easing)}return e.prototype.step=function(t,n){if(this._inited||(this._startTime=t+this._delay,this._inited=!0),this._paused){this._pausedTime+=n;return}var r=this._life,i=t-this._startTime-this._pausedTime,o=i/r;o<0&&(o=0),o=Math.min(o,1);var a=this.easingFunc,s=a?a(o):o;if(this.onframe(s),o===1)if(this.loop){var l=i%r;this._startTime=t-l,this._pausedTime=0,this.onrestart()}else return!0;return!1},e.prototype.pause=function(){this._paused=!0},e.prototype.resume=function(){this._paused=!1},e.prototype.setEasing=function(t){this.easing=t,this.easingFunc=Vt(t)?t:Cv[t]||cU(t)},e}(),fN={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function _u(e){return e=Math.round(e),e<0?0:e>255?255:e}function FE(e){return e<0?0:e>1?1:e}function Kx(e){var t=e;return t.length&&t.charAt(t.length-1)==="%"?_u(parseFloat(t)/100*255):_u(parseInt(t,10))}function Ev(e){var t=e;return t.length&&t.charAt(t.length-1)==="%"?FE(parseFloat(t)/100):FE(parseFloat(t))}function Zx(e,t,n){return n<0?n+=1:n>1&&(n-=1),n*6<1?e+(t-e)*n*6:n*2<1?t:n*3<2?e+(t-e)*(2/3-n)*6:e}function Hy(e,t,n){return e+(t-e)*n}function zo(e,t,n,r,i){return e[0]=t,e[1]=n,e[2]=r,e[3]=i,e}function $E(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}var fU=new om(20),Gy=null;function Zf(e,t){Gy&&$E(Gy,t),Gy=fU.put(e,Gy||t.slice())}function nl(e,t){if(e){t=t||[];var n=fU.get(e);if(n)return $E(t,n);e=e+"";var r=e.replace(/ /g,"").toLowerCase();if(r in fN)return $E(t,fN[r]),Zf(e,t),t;var i=r.length;if(r.charAt(0)==="#"){if(i===4||i===5){var o=parseInt(r.slice(1,4),16);if(!(o>=0&&o<=4095)){zo(t,0,0,0,1);return}return zo(t,(o&3840)>>4|(o&3840)>>8,o&240|(o&240)>>4,o&15|(o&15)<<4,i===5?parseInt(r.slice(4),16)/15:1),Zf(e,t),t}else if(i===7||i===9){var o=parseInt(r.slice(1,7),16);if(!(o>=0&&o<=16777215)){zo(t,0,0,0,1);return}return zo(t,(o&16711680)>>16,(o&65280)>>8,o&255,i===9?parseInt(r.slice(7),16)/255:1),Zf(e,t),t}return}var a=r.indexOf("("),s=r.indexOf(")");if(a!==-1&&s+1===i){var l=r.substr(0,a),u=r.substr(a+1,s-(a+1)).split(","),c=1;switch(l){case"rgba":if(u.length!==4)return u.length===3?zo(t,+u[0],+u[1],+u[2],1):zo(t,0,0,0,1);c=Ev(u.pop());case"rgb":if(u.length>=3)return zo(t,Kx(u[0]),Kx(u[1]),Kx(u[2]),u.length===3?c:Ev(u[3])),Zf(e,t),t;zo(t,0,0,0,1);return;case"hsla":if(u.length!==4){zo(t,0,0,0,1);return}return u[3]=Ev(u[3]),dN(u,t),Zf(e,t),t;case"hsl":if(u.length!==3){zo(t,0,0,0,1);return}return dN(u,t),Zf(e,t),t;default:return}}zo(t,0,0,0,1)}}function dN(e,t){var n=(parseFloat(e[0])%360+360)%360/360,r=Ev(e[1]),i=Ev(e[2]),o=i<=.5?i*(r+1):i+r-i*r,a=i*2-o;return t=t||[],zo(t,_u(Zx(a,o,n+1/3)*255),_u(Zx(a,o,n)*255),_u(Zx(a,o,n-1/3)*255),1),e.length===4&&(t[3]=e[3]),t}function hN(e,t){var n=nl(e);if(n){for(var r=0;r<3;r++)n[r]=n[r]*(1-t)|0,n[r]>255?n[r]=255:n[r]<0&&(n[r]=0);return tS(n,n.length===4?"rgba":"rgb")}}function Wue(e,t,n){if(!(!(t&&t.length)||!(e>=0&&e<=1))){var r=e*(t.length-1),i=Math.floor(r),o=Math.ceil(r),a=nl(t[i]),s=nl(t[o]),l=r-i,u=tS([_u(Hy(a[0],s[0],l)),_u(Hy(a[1],s[1],l)),_u(Hy(a[2],s[2],l)),FE(Hy(a[3],s[3],l))],"rgba");return n?{color:u,leftIndex:i,rightIndex:o,value:r}:u}}function tS(e,t){if(!(!e||!e.length)){var n=e[0]+","+e[1]+","+e[2];return(t==="rgba"||t==="hsva"||t==="hsla")&&(n+=","+e[3]),t+"("+n+")"}}function T1(e,t){var n=nl(e);return n?(.299*n[0]+.587*n[1]+.114*n[2])*n[3]/255+(1-n[3])*t:0}var pN=new om(100);function vN(e){if(dt(e)){var t=pN.get(e);return t||(t=hN(e,-.1),pN.put(e,t)),t}else if(qb(e)){var n=Ke({},e);return n.colorStops=Rt(e.colorStops,function(r){return{offset:r.offset,color:hN(r.color,-.1)}}),n}return e}function jue(e){return e.type==="linear"}function Yue(e){return e.type==="radial"}(function(){return Dt.hasGlobalWindow&&Vt(window.btoa)?function(e){return window.btoa(unescape(encodeURIComponent(e)))}:typeof Buffer<"u"?function(e){return Buffer.from(e).toString("base64")}:function(e){return null}})();var BE=Array.prototype.slice;function Gs(e,t,n){return(t-e)*n+e}function qx(e,t,n,r){for(var i=t.length,o=0;or?t:e,o=Math.min(n,r),a=i[o-1]||{color:[0,0,0,0],offset:0},s=o;sa;if(s)r.length=a;else for(var l=o;l=1},e.prototype.getAdditiveTrack=function(){return this._additiveTrack},e.prototype.addKeyframe=function(t,n,r){this._needsSort=!0;var i=this.keyframes,o=i.length,a=!1,s=mN,l=n;if(io(n)){var u=que(n);s=u,(u===1&&!Zn(n[0])||u===2&&!Zn(n[0][0]))&&(a=!0)}else if(Zn(n)&&!_1(n))s=Wy;else if(dt(n))if(!isNaN(+n))s=Wy;else{var c=nl(n);c&&(l=c,s=jp)}else if(qb(n)){var f=Ke({},l);f.colorStops=Rt(n.colorStops,function(h){return{offset:h.offset,color:nl(h.color)}}),jue(n)?s=VE:Yue(n)&&(s=UE),l=f}o===0?this.valType=s:(s!==this.valType||s===mN)&&(a=!0),this.discrete=this.discrete||a;var d={time:t,value:l,rawValue:n,percent:0};return r&&(d.easing=r,d.easingFunc=Vt(r)?r:Cv[r]||cU(r)),i.push(d),d},e.prototype.prepare=function(t,n){var r=this.keyframes;this._needsSort&&r.sort(function(m,y){return m.time-y.time});for(var i=this.valType,o=r.length,a=r[o-1],s=this.discrete,l=jy(i),u=yN(i),c=0;c=0&&!(a[c].percent<=n);c--);c=d(c,s-2)}else{for(c=f;cn);c++);c=d(c-1,s-2)}v=a[c+1],h=a[c]}if(h&&v){this._lastFr=c,this._lastFrP=n;var y=v.percent-h.percent,_=y===0?1:d((n-h.percent)/y,1);v.easingFunc&&(_=v.easingFunc(_));var b=r?this._additiveValue:u?fp:t[l];if((jy(o)||u)&&!b&&(b=this._additiveValue=[]),this.discrete)t[l]=_<1?h.rawValue:v.rawValue;else if(jy(o))o===w_?qx(b,h[i],v[i],_):Xue(b,h[i],v[i],_);else if(yN(o)){var w=h[i],S=v[i],C=o===VE;t[l]={type:C?"linear":"radial",x:Gs(w.x,S.x,_),y:Gs(w.y,S.y,_),colorStops:Rt(w.colorStops,function(A,P){var I=S.colorStops[P];return{offset:Gs(A.offset,I.offset,_),color:S_(qx([],A.color,I.color,_))}}),global:S.global},C?(t[l].x2=Gs(w.x2,S.x2,_),t[l].y2=Gs(w.y2,S.y2,_)):t[l].r=Gs(w.r,S.r,_)}else if(u)qx(b,h[i],v[i],_),r||(t[l]=S_(b));else{var T=Gs(h[i],v[i],_);r?this._additiveValue=T:t[l]=T}r&&this._addToTarget(t)}}},e.prototype._addToTarget=function(t){var n=this.valType,r=this.propName,i=this._additiveValue;n===Wy?t[r]=t[r]+i:n===jp?(nl(t[r],fp),zy(fp,fp,i,1),t[r]=S_(fp)):n===w_?zy(t[r],t[r],i,1):n===dU&&gN(t[r],t[r],i,1)},e}(),pR=function(){function e(t,n,r,i){if(this._tracks={},this._trackKeys=[],this._maxTime=0,this._started=0,this._clip=null,this._target=t,this._loop=n,n&&i){oR("Can' use additive animation on looped animation.");return}this._additiveAnimators=i,this._allowDiscrete=r}return e.prototype.getMaxTime=function(){return this._maxTime},e.prototype.getDelay=function(){return this._delay},e.prototype.getLoop=function(){return this._loop},e.prototype.getTarget=function(){return this._target},e.prototype.changeTarget=function(t){this._target=t},e.prototype.when=function(t,n,r){return this.whenWithKeys(t,n,Kn(n),r)},e.prototype.whenWithKeys=function(t,n,r,i){for(var o=this._tracks,a=0;a0&&l.addKeyframe(0,b_(u),i),this._trackKeys.push(s)}l.addKeyframe(t,b_(n[s]),i)}return this._maxTime=Math.max(this._maxTime,t),this},e.prototype.pause=function(){this._clip.pause(),this._paused=!0},e.prototype.resume=function(){this._clip.resume(),this._paused=!1},e.prototype.isPaused=function(){return!!this._paused},e.prototype.duration=function(t){return this._maxTime=t,this._force=!0,this},e.prototype._doneCallback=function(){this._setTracksFinished(),this._clip=null;var t=this._doneCbs;if(t)for(var n=t.length,r=0;r0)){this._started=1;for(var n=this,r=[],i=this._maxTime||0,o=0;o1){var s=a.pop();o.addKeyframe(s.time,t[i]),o.prepare(this._maxTime,o.getAdditiveTrack())}}}},e}(),ys=function(){function e(t){t&&(this._$eventProcessor=t)}return e.prototype.on=function(t,n,r,i){this._$handlers||(this._$handlers={});var o=this._$handlers;if(typeof n=="function"&&(i=r,r=n,n=null),!r||!t)return this;var a=this._$eventProcessor;n!=null&&a&&a.normalizeQuery&&(n=a.normalizeQuery(n)),o[t]||(o[t]=[]);for(var s=0;s=0:r.inside,y=this._innerTextDefaultStyle||(this._innerTextDefaultStyle={}),_=void 0,b=void 0,w=void 0;m&&this.canBeInsideText()?(_=r.insideFill,b=r.insideStroke,(_==null||_==="auto")&&(_=this.getInsideTextFill()),(b==null||b==="auto")&&(b=this.getInsideTextStroke(_),w=!0)):(_=r.outsideFill,b=r.outsideStroke,(_==null||_==="auto")&&(_=this.getOutsideFill()),(b==null||b==="auto")&&(b=this.getOutsideStroke(_),w=!0)),_=_||"#000",(_!==y.fill||b!==y.stroke||w!==y.autoStroke||a!==y.align||s!==y.verticalAlign)&&(l=!0,y.fill=_,y.stroke=b,y.autoStroke=w,y.align=a,y.verticalAlign=s,n.setDefaultTextStyle(y)),n.__dirty|=wo,l&&n.dirtyStyle(!0)}},e.prototype.canBeInsideText=function(){return!0},e.prototype.getInsideTextFill=function(){return"#fff"},e.prototype.getInsideTextStroke=function(t){return"#000"},e.prototype.getOutsideFill=function(){return this.__zr&&this.__zr.isDarkMode()?zE:GE},e.prototype.getOutsideStroke=function(t){var n=this.__zr&&this.__zr.getBackgroundColor(),r=typeof n=="string"&&nl(n);r||(r=[255,255,255,1]);for(var i=r[3],o=this.__zr.isDarkMode(),a=0;a<3;a++)r[a]=r[a]*i+(o?0:255)*(1-i);return r[3]=1,tS(r,"rgba")},e.prototype.traverse=function(t,n){},e.prototype.attrKV=function(t,n){t==="textConfig"?this.setTextConfig(n):t==="textContent"?this.setTextContent(n):t==="clipPath"?this.setClipPath(n):t==="extra"?(this.extra=this.extra||{},Ke(this.extra,n)):this[t]=n},e.prototype.hide=function(){this.ignore=!0,this.markRedraw()},e.prototype.show=function(){this.ignore=!1,this.markRedraw()},e.prototype.attr=function(t,n){if(typeof t=="string")this.attrKV(t,n);else if(Ct(t))for(var r=t,i=Kn(r),o=0;o0},e.prototype.getState=function(t){return this.states[t]},e.prototype.ensureState=function(t){var n=this.states;return n[t]||(n[t]={}),n[t]},e.prototype.clearStates=function(t){this.useState(Jx,!1,t)},e.prototype.useState=function(t,n,r,i){var o=t===Jx,a=this.hasState();if(!(!a&&o)){var s=this.currentStates,l=this.stateTransition;if(!(In(s,t)>=0&&(n||s.length===1))){var u;if(this.stateProxy&&!o&&(u=this.stateProxy(t)),u||(u=this.states&&this.states[t]),!u&&!o){oR("State "+t+" not exists.");return}o||this.saveCurrentToNormalState(u);var c=!!(u&&u.hoverLayer||i);c&&this._toggleHoverLayerFlag(!0),this._applyStateObj(t,u,this._normalState,n,!r&&!this.__inHover&&l&&l.duration>0,l);var f=this._textContent,d=this._textGuide;return f&&f.useState(t,n,r,c),d&&d.useState(t,n,r,c),o?(this.currentStates=[],this._normalState={}):n?this.currentStates.push(t):this.currentStates=[t],this._updateAnimationTargets(),this.markRedraw(),!c&&this.__inHover&&(this._toggleHoverLayerFlag(!1),this.__dirty&=~wo),u}}},e.prototype.useStates=function(t,n,r){if(!t.length)this.clearStates();else{var i=[],o=this.currentStates,a=t.length,s=a===o.length;if(s){for(var l=0;l0,v);var m=this._textContent,y=this._textGuide;m&&m.useStates(t,n,d),y&&y.useStates(t,n,d),this._updateAnimationTargets(),this.currentStates=t.slice(),this.markRedraw(),!d&&this.__inHover&&(this._toggleHoverLayerFlag(!1),this.__dirty&=~wo)}},e.prototype.isSilent=function(){for(var t=this.silent,n=this.parent;!t&&n;){if(n.silent){t=!0;break}n=n.parent}return t},e.prototype._updateAnimationTargets=function(){for(var t=0;t=0){var r=this.currentStates.slice();r.splice(n,1),this.useStates(r)}},e.prototype.replaceState=function(t,n,r){var i=this.currentStates.slice(),o=In(i,t),a=In(i,n)>=0;o>=0?a?i.splice(o,1):i[o]=n:r&&!a&&i.push(n),this.useStates(i)},e.prototype.toggleState=function(t,n){n?this.useState(t,!0):this.removeState(t)},e.prototype._mergeStates=function(t){for(var n={},r,i=0;i=0&&o.splice(a,1)}),this.animators.push(t),r&&r.animation.addAnimator(t),r&&r.wakeUp()},e.prototype.updateDuringAnimation=function(t){this.markRedraw()},e.prototype.stopAnimation=function(t,n){for(var r=this.animators,i=r.length,o=[],a=0;a0&&n.during&&o[0].during(function(v,m){n.during(m)});for(var d=0;d0||i.force&&!a.length){var P=void 0,I=void 0,R=void 0;if(s){I={},d&&(P={});for(var S=0;S1e-4){s[0]=e-n,s[1]=t-r,l[0]=e+n,l[1]=t+r;return}if(Yy[0]=oT(i)*n+e,Yy[1]=iT(i)*r+t,Xy[0]=oT(o)*n+e,Xy[1]=iT(o)*r+t,u(s,Yy,Xy),c(l,Yy,Xy),i=i%lc,i<0&&(i=i+lc),o=o%lc,o<0&&(o=o+lc),i>o&&!a?o+=lc:ii&&(Ky[0]=oT(h)*n+e,Ky[1]=iT(h)*r+t,u(s,Ky,s),c(l,Ky,l))}var mn={M:1,L:2,C:3,Q:4,A:5,Z:6,R:7},uc=[],cc=[],ja=[],kl=[],Ya=[],Xa=[],aT=Math.min,sT=Math.max,fc=Math.cos,dc=Math.sin,Ls=Math.abs,jE=Math.PI,Yl=jE*2,lT=typeof Float32Array<"u",dp=[];function uT(e){var t=Math.round(e/jE*1e8)/1e8;return t%2*jE}function fce(e,t){var n=uT(e[0]);n<0&&(n+=Yl);var r=n-e[0],i=e[1];i+=r,!t&&i-n>=Yl?i=n+Yl:t&&n-i>=Yl?i=n-Yl:!t&&n>i?i=n+(Yl-uT(n-i)):t&&n0&&(this._ux=Ls(r/C1/t)||0,this._uy=Ls(r/C1/n)||0)},e.prototype.setDPR=function(t){this.dpr=t},e.prototype.setContext=function(t){this._ctx=t},e.prototype.getContext=function(){return this._ctx},e.prototype.beginPath=function(){return this._ctx&&this._ctx.beginPath(),this.reset(),this},e.prototype.reset=function(){this._saveData&&(this._len=0),this._pathSegLen&&(this._pathSegLen=null,this._pathLen=0),this._version++},e.prototype.moveTo=function(t,n){return this._drawPendingPt(),this.addData(mn.M,t,n),this._ctx&&this._ctx.moveTo(t,n),this._x0=t,this._y0=n,this._xi=t,this._yi=n,this},e.prototype.lineTo=function(t,n){var r=Ls(t-this._xi),i=Ls(n-this._yi),o=r>this._ux||i>this._uy;if(this.addData(mn.L,t,n),this._ctx&&o&&this._ctx.lineTo(t,n),o)this._xi=t,this._yi=n,this._pendingPtDist=0;else{var a=r*r+i*i;a>this._pendingPtDist&&(this._pendingPtX=t,this._pendingPtY=n,this._pendingPtDist=a)}return this},e.prototype.bezierCurveTo=function(t,n,r,i,o,a){return this._drawPendingPt(),this.addData(mn.C,t,n,r,i,o,a),this._ctx&&this._ctx.bezierCurveTo(t,n,r,i,o,a),this._xi=o,this._yi=a,this},e.prototype.quadraticCurveTo=function(t,n,r,i){return this._drawPendingPt(),this.addData(mn.Q,t,n,r,i),this._ctx&&this._ctx.quadraticCurveTo(t,n,r,i),this._xi=r,this._yi=i,this},e.prototype.arc=function(t,n,r,i,o,a){this._drawPendingPt(),dp[0]=i,dp[1]=o,fce(dp,a),i=dp[0],o=dp[1];var s=o-i;return this.addData(mn.A,t,n,r,r,i,s,0,a?0:1),this._ctx&&this._ctx.arc(t,n,r,i,o,a),this._xi=fc(o)*r+t,this._yi=dc(o)*r+n,this},e.prototype.arcTo=function(t,n,r,i,o){return this._drawPendingPt(),this._ctx&&this._ctx.arcTo(t,n,r,i,o),this},e.prototype.rect=function(t,n,r,i){return this._drawPendingPt(),this._ctx&&this._ctx.rect(t,n,r,i),this.addData(mn.R,t,n,r,i),this},e.prototype.closePath=function(){this._drawPendingPt(),this.addData(mn.Z);var t=this._ctx,n=this._x0,r=this._y0;return t&&t.closePath(),this._xi=n,this._yi=r,this},e.prototype.fill=function(t){t&&t.fill(),this.toStatic()},e.prototype.stroke=function(t){t&&t.stroke(),this.toStatic()},e.prototype.len=function(){return this._len},e.prototype.setData=function(t){var n=t.length;!(this.data&&this.data.length===n)&&lT&&(this.data=new Float32Array(n));for(var r=0;rc.length&&(this._expandData(),c=this.data);for(var f=0;f0&&(this._ctx&&this._ctx.lineTo(this._pendingPtX,this._pendingPtY),this._pendingPtDist=0)},e.prototype._expandData=function(){if(!(this.data instanceof Array)){for(var t=[],n=0;n11&&(this.data=new Float32Array(t)))}},e.prototype.getBoundingRect=function(){ja[0]=ja[1]=Ya[0]=Ya[1]=Number.MAX_VALUE,kl[0]=kl[1]=Xa[0]=Xa[1]=-Number.MAX_VALUE;var t=this.data,n=0,r=0,i=0,o=0,a;for(a=0;ar||Ls(w)>i||d===n-1)&&(m=Math.sqrt(b*b+w*w),o=y,a=_);break}case mn.C:{var S=t[d++],C=t[d++],y=t[d++],_=t[d++],T=t[d++],A=t[d++];m=Bue(o,a,S,C,y,_,T,A,10),o=T,a=A;break}case mn.Q:{var S=t[d++],C=t[d++],y=t[d++],_=t[d++];m=Hue(o,a,S,C,y,_,10),o=y,a=_;break}case mn.A:var P=t[d++],I=t[d++],R=t[d++],O=t[d++],M=t[d++],$=t[d++],F=$+M;d+=1,v&&(s=fc(M)*R+P,l=dc(M)*O+I),m=sT(R,O)*aT(Yl,Math.abs($)),o=fc(F)*R+P,a=dc(F)*O+I;break;case mn.R:{s=o=t[d++],l=a=t[d++];var z=t[d++],B=t[d++];m=z*2+B*2;break}case mn.Z:{var b=s-o,w=l-a;m=Math.sqrt(b*b+w*w),o=s,a=l;break}}m>=0&&(u[f++]=m,c+=m)}return this._pathLen=c,c},e.prototype.rebuildPath=function(t,n){var r=this.data,i=this._ux,o=this._uy,a=this._len,s,l,u,c,f,d,h=n<1,v,m,y=0,_=0,b,w=0,S,C;if(!(h&&(this._pathSegLen||this._calculateLength(),v=this._pathSegLen,m=this._pathLen,b=n*m,!b)))e:for(var T=0;T0&&(t.lineTo(S,C),w=0),A){case mn.M:s=u=r[T++],l=c=r[T++],t.moveTo(u,c);break;case mn.L:{f=r[T++],d=r[T++];var I=Ls(f-u),R=Ls(d-c);if(I>i||R>o){if(h){var O=v[_++];if(y+O>b){var M=(b-y)/O;t.lineTo(u*(1-M)+f*M,c*(1-M)+d*M);break e}y+=O}t.lineTo(f,d),u=f,c=d,w=0}else{var $=I*I+R*R;$>w&&(S=f,C=d,w=$)}break}case mn.C:{var F=r[T++],z=r[T++],B=r[T++],Y=r[T++],j=r[T++],se=r[T++];if(h){var O=v[_++];if(y+O>b){var M=(b-y)/O;w1(u,F,B,j,M,uc),w1(c,z,Y,se,M,cc),t.bezierCurveTo(uc[1],cc[1],uc[2],cc[2],uc[3],cc[3]);break e}y+=O}t.bezierCurveTo(F,z,B,Y,j,se),u=j,c=se;break}case mn.Q:{var F=r[T++],z=r[T++],B=r[T++],Y=r[T++];if(h){var O=v[_++];if(y+O>b){var M=(b-y)/O;x1(u,F,B,M,uc),x1(c,z,Y,M,cc),t.quadraticCurveTo(uc[1],cc[1],uc[2],cc[2]);break e}y+=O}t.quadraticCurveTo(F,z,B,Y),u=B,c=Y;break}case mn.A:var ge=r[T++],ve=r[T++],De=r[T++],Ne=r[T++],ze=r[T++],Me=r[T++],je=r[T++],ce=!r[T++],Ee=De>Ne?De:Ne,Se=Ls(De-Ne)>.001,Te=ze+Me,Oe=!1;if(h){var O=v[_++];y+O>b&&(Te=ze+Me*(b-y)/O,Oe=!0),y+=O}if(Se&&t.ellipse?t.ellipse(ge,ve,De,Ne,je,ze,Te,ce):t.arc(ge,ve,Ee,ze,Te,ce),Oe)break e;P&&(s=fc(ze)*De+ge,l=dc(ze)*Ne+ve),u=fc(Te)*De+ge,c=dc(Te)*Ne+ve;break;case mn.R:s=u=r[T],l=c=r[T+1],f=r[T++],d=r[T++];var $e=r[T++],H=r[T++];if(h){var O=v[_++];if(y+O>b){var G=b-y;t.moveTo(f,d),t.lineTo(f+aT(G,$e),d),G-=$e,G>0&&t.lineTo(f+$e,d+aT(G,H)),G-=H,G>0&&t.lineTo(f+sT($e-G,0),d+H),G-=$e,G>0&&t.lineTo(f,d+sT(H-G,0));break e}y+=O}t.rect(f,d,$e,H);break;case mn.Z:if(h){var O=v[_++];if(y+O>b){var M=(b-y)/O;t.lineTo(u*(1-M)+s*M,c*(1-M)+l*M);break e}y+=O}t.closePath(),u=s,c=l}}},e.prototype.clone=function(){var t=new e,n=this.data;return t.data=n.slice?n.slice():Array.prototype.slice.call(n),t._len=this._len,t},e.CMD=mn,e.initDefaultProps=function(){var t=e.prototype;t._saveData=!0,t._ux=0,t._uy=0,t._pendingPtDist=0,t._version=0}(),e}();function Jf(e,t,n,r,i,o,a){if(i===0)return!1;var s=i,l=0,u=e;if(a>t+s&&a>r+s||ae+s&&o>n+s||ot+f&&c>r+f&&c>o+f&&c>s+f||ce+f&&u>n+f&&u>i+f&&u>a+f||ut+u&&l>r+u&&l>o+u||le+u&&s>n+u&&s>i+u||sn||c+ui&&(i+=hp);var d=Math.atan2(l,s);return d<0&&(d+=hp),d>=r&&d<=i||d+hp>=r&&d+hp<=i}function hc(e,t,n,r,i,o){if(o>t&&o>r||oi?s:0}var Fl=mf.CMD,pc=Math.PI*2,vce=1e-4;function gce(e,t){return Math.abs(e-t)t&&u>r&&u>o&&u>s||u1&&mce(),h=Hr(t,r,o,s,Yo[0]),d>1&&(v=Hr(t,r,o,s,Yo[1]))),d===2?yt&&s>r&&s>o||s=0&&u<=1){for(var c=0,f=Yi(t,r,o,u),d=0;dn||s<-n)return 0;var l=Math.sqrt(n*n-s*s);xi[0]=-l,xi[1]=l;var u=Math.abs(r-i);if(u<1e-4)return 0;if(u>=pc-1e-4){r=0,i=pc;var c=o?1:-1;return a>=xi[0]+e&&a<=xi[1]+e?c:0}if(r>i){var f=r;r=i,i=f}r<0&&(r+=pc,i+=pc);for(var d=0,h=0;h<2;h++){var v=xi[h];if(v+e>a){var m=Math.atan2(s,v),c=o?1:-1;m<0&&(m=pc+m),(m>=r&&m<=i||m+pc>=r&&m+pc<=i)&&(m>Math.PI/2&&m1&&(n||(s+=hc(l,u,c,f,r,i))),y&&(l=o[v],u=o[v+1],c=l,f=u),m){case Fl.M:c=o[v++],f=o[v++],l=c,u=f;break;case Fl.L:if(n){if(Jf(l,u,o[v],o[v+1],t,r,i))return!0}else s+=hc(l,u,o[v],o[v+1],r,i)||0;l=o[v++],u=o[v++];break;case Fl.C:if(n){if(dce(l,u,o[v++],o[v++],o[v++],o[v++],o[v],o[v+1],t,r,i))return!0}else s+=yce(l,u,o[v++],o[v++],o[v++],o[v++],o[v],o[v+1],r,i)||0;l=o[v++],u=o[v++];break;case Fl.Q:if(n){if(hce(l,u,o[v++],o[v++],o[v],o[v+1],t,r,i))return!0}else s+=_ce(l,u,o[v++],o[v++],o[v],o[v+1],r,i)||0;l=o[v++],u=o[v++];break;case Fl.A:var _=o[v++],b=o[v++],w=o[v++],S=o[v++],C=o[v++],T=o[v++];v+=1;var A=!!(1-o[v++]);d=Math.cos(C)*w+_,h=Math.sin(C)*S+b,y?(c=d,f=h):s+=hc(l,u,d,h,r,i);var P=(r-_)*S/w+_;if(n){if(pce(_,b,S,C,C+T,A,t,P,i))return!0}else s+=bce(_,b,S,C,C+T,A,P,i);l=Math.cos(C+T)*w+_,u=Math.sin(C+T)*S+b;break;case Fl.R:c=l=o[v++],f=u=o[v++];var I=o[v++],R=o[v++];if(d=c+I,h=f+R,n){if(Jf(c,f,d,f,t,r,i)||Jf(d,f,d,h,t,r,i)||Jf(d,h,c,h,t,r,i)||Jf(c,h,c,f,t,r,i))return!0}else s+=hc(d,f,d,h,r,i),s+=hc(c,h,c,f,r,i);break;case Fl.Z:if(n){if(Jf(l,u,c,f,t,r,i))return!0}else s+=hc(l,u,c,f,r,i);l=c,u=f;break}}return!n&&!gce(u,f)&&(s+=hc(l,u,c,f,r,i)||0),s!==0}function Sce(e,t,n){return vU(e,0,!1,t,n)}function wce(e,t,n,r){return vU(e,t,!0,n,r)}var gU=En({fill:"#000",stroke:null,strokePercent:1,fillOpacity:1,strokeOpacity:1,lineDashOffset:0,lineWidth:1,lineCap:"butt",miterLimit:10,strokeNoScale:!1,strokeFirst:!1},nf),xce={style:En({fill:!0,stroke:!0,strokePercent:!0,fillOpacity:!0,strokeOpacity:!0,lineDashOffset:!0,lineWidth:!0,miterLimit:!0},rS.style)},cT=bg.concat(["invisible","culling","z","z2","zlevel","parent"]),Ln=function(e){ot(t,e);function t(n){return e.call(this,n)||this}return t.prototype.update=function(){var n=this;e.prototype.update.call(this);var r=this.style;if(r.decal){var i=this._decalEl=this._decalEl||new t;i.buildPath===t.prototype.buildPath&&(i.buildPath=function(l){n.buildPath(l,n.shape)}),i.silent=!0;var o=i.style;for(var a in r)o[a]!==r[a]&&(o[a]=r[a]);o.fill=r.fill?r.decal:null,o.decal=null,o.shadowColor=null,r.strokeFirst&&(o.stroke=null);for(var s=0;s.5?GE:r>.2?Que:zE}else if(n)return zE}return GE},t.prototype.getInsideTextStroke=function(n){var r=this.style.fill;if(dt(r)){var i=this.__zr,o=!!(i&&i.isDarkMode()),a=T1(n,0)0))},t.prototype.hasFill=function(){var n=this.style,r=n.fill;return r!=null&&r!=="none"},t.prototype.getBoundingRect=function(){var n=this._rect,r=this.style,i=!n;if(i){var o=!1;this.path||(o=!0,this.createPathProxy());var a=this.path;(o||this.__dirty&bd)&&(a.beginPath(),this.buildPath(a,this.shape,!1),this.pathUpdated()),n=a.getBoundingRect()}if(this._rect=n,this.hasStroke()&&this.path&&this.path.len()>0){var s=this._rectStroke||(this._rectStroke=n.clone());if(this.__dirty||i){s.copy(n);var l=r.strokeNoScale?this.getLineScale():1,u=r.lineWidth;if(!this.hasFill()){var c=this.strokeContainThreshold;u=Math.max(u,c??4)}l>1e-10&&(s.width+=u/l,s.height+=u/l,s.x-=u/l/2,s.y-=u/l/2)}return s}return n},t.prototype.contain=function(n,r){var i=this.transformCoordToLocal(n,r),o=this.getBoundingRect(),a=this.style;if(n=i[0],r=i[1],o.contain(n,r)){var s=this.path;if(this.hasStroke()){var l=a.lineWidth,u=a.strokeNoScale?this.getLineScale():1;if(u>1e-10&&(this.hasFill()||(l=Math.max(l,this.strokeContainThreshold)),wce(s,l/u,n,r)))return!0}if(this.hasFill())return Sce(s,n,r)}return!1},t.prototype.dirtyShape=function(){this.__dirty|=bd,this._rect&&(this._rect=null),this._decalEl&&this._decalEl.dirtyShape(),this.markRedraw()},t.prototype.dirty=function(){this.dirtyStyle(),this.dirtyShape()},t.prototype.animateShape=function(n){return this.animate("shape",n)},t.prototype.updateDuringAnimation=function(n){n==="style"?this.dirtyStyle():n==="shape"?this.dirtyShape():this.markRedraw()},t.prototype.attrKV=function(n,r){n==="shape"?this.setShape(r):e.prototype.attrKV.call(this,n,r)},t.prototype.setShape=function(n,r){var i=this.shape;return i||(i=this.shape={}),typeof n=="string"?i[n]=r:Ke(i,n),this.dirtyShape(),this},t.prototype.shapeChanged=function(){return!!(this.__dirty&bd)},t.prototype.createStyle=function(n){return Jb(gU,n)},t.prototype._innerSaveToNormal=function(n){e.prototype._innerSaveToNormal.call(this,n);var r=this._normalState;n.shape&&!r.shape&&(r.shape=Ke({},this.shape))},t.prototype._applyStateObj=function(n,r,i,o,a,s){e.prototype._applyStateObj.call(this,n,r,i,o,a,s);var l=!(r&&o),u;if(r&&r.shape?a?o?u=r.shape:(u=Ke({},i.shape),Ke(u,r.shape)):(u=Ke({},o?this.shape:i.shape),Ke(u,r.shape)):l&&(u=i.shape),u)if(a){this.shape=Ke({},this.shape);for(var c={},f=Kn(u),d=0;d0},t.prototype.hasFill=function(){var n=this.style,r=n.fill;return r!=null&&r!=="none"},t.prototype.createStyle=function(n){return Jb(Tce,n)},t.prototype.setBoundingRect=function(n){this._rect=n},t.prototype.getBoundingRect=function(){var n=this.style;if(!this._rect){var r=n.text;r!=null?r+="":r="";var i=fR(r,n.font,n.textAlign,n.textBaseline);if(i.x+=n.x||0,i.y+=n.y||0,this.hasStroke()){var o=n.lineWidth;i.x-=o/2,i.y-=o/2,i.width+=o,i.height+=o}this._rect=i}return this._rect},t.initDefaultProps=function(){var n=t.prototype;n.dirtyRectTolerance=10}(),t}(am);E1.prototype.type="tspan";var Cce=En({x:0,y:0},nf),Ece={style:En({x:!0,y:!0,width:!0,height:!0,sx:!0,sy:!0,sWidth:!0,sHeight:!0},rS.style)};function Ace(e){return!!(e&&typeof e!="string"&&e.width&&e.height)}var Uu=function(e){ot(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.createStyle=function(n){return Jb(Cce,n)},t.prototype._getSize=function(n){var r=this.style,i=r[n];if(i!=null)return i;var o=Ace(r.image)?r.image:this.__image;if(!o)return 0;var a=n==="width"?"height":"width",s=r[a];return s==null?o[n]:o[n]/o[a]*s},t.prototype.getWidth=function(){return this._getSize("width")},t.prototype.getHeight=function(){return this._getSize("height")},t.prototype.getAnimationStyleProps=function(){return Ece},t.prototype.getBoundingRect=function(){var n=this.style;return this._rect||(this._rect=new bn(n.x||0,n.y||0,this.getWidth(),this.getHeight())),this._rect},t}(am);Uu.prototype.type="image";function Ice(e,t){var n=t.x,r=t.y,i=t.width,o=t.height,a=t.r,s,l,u,c;i<0&&(n=n+i,i=-i),o<0&&(r=r+o,o=-o),typeof a=="number"?s=l=u=c=a:a instanceof Array?a.length===1?s=l=u=c=a[0]:a.length===2?(s=u=a[0],l=c=a[1]):a.length===3?(s=a[0],l=c=a[1],u=a[2]):(s=a[0],l=a[1],u=a[2],c=a[3]):s=l=u=c=0;var f;s+l>i&&(f=s+l,s*=i/f,l*=i/f),u+c>i&&(f=u+c,u*=i/f,c*=i/f),l+u>o&&(f=l+u,l*=o/f,u*=o/f),s+c>o&&(f=s+c,s*=o/f,c*=o/f),e.moveTo(n+s,r),e.lineTo(n+i-l,r),l!==0&&e.arc(n+i-l,r+l,l,-Math.PI/2,0),e.lineTo(n+i,r+o-u),u!==0&&e.arc(n+i-u,r+o-u,u,0,Math.PI/2),e.lineTo(n+c,r+o),c!==0&&e.arc(n+c,r+o-c,c,Math.PI/2,Math.PI),e.lineTo(n,r+s),s!==0&&e.arc(n+s,r+s,s,Math.PI,Math.PI*1.5)}var Id=Math.round;function mU(e,t,n){if(t){var r=t.x1,i=t.x2,o=t.y1,a=t.y2;e.x1=r,e.x2=i,e.y1=o,e.y2=a;var s=n&&n.lineWidth;return s&&(Id(r*2)===Id(i*2)&&(e.x1=e.x2=Bc(r,s,!0)),Id(o*2)===Id(a*2)&&(e.y1=e.y2=Bc(o,s,!0))),e}}function yU(e,t,n){if(t){var r=t.x,i=t.y,o=t.width,a=t.height;e.x=r,e.y=i,e.width=o,e.height=a;var s=n&&n.lineWidth;return s&&(e.x=Bc(r,s,!0),e.y=Bc(i,s,!0),e.width=Math.max(Bc(r+o,s,!1)-e.x,o===0?0:1),e.height=Math.max(Bc(i+a,s,!1)-e.y,a===0?0:1)),e}}function Bc(e,t,n){if(!t)return e;var r=Id(e*2);return(r+Id(t))%2===0?r/2:(r+(n?1:-1))/2}var Rce=function(){function e(){this.x=0,this.y=0,this.width=0,this.height=0}return e}(),Pce={},zr=function(e){ot(t,e);function t(n){return e.call(this,n)||this}return t.prototype.getDefaultShape=function(){return new Rce},t.prototype.buildPath=function(n,r){var i,o,a,s;if(this.subPixelOptimize){var l=yU(Pce,r,this.style);i=l.x,o=l.y,a=l.width,s=l.height,l.r=r.r,r=l}else i=r.x,o=r.y,a=r.width,s=r.height;r.r?Ice(n,r):n.rect(i,o,a,s)},t.prototype.isZeroArea=function(){return!this.shape.width||!this.shape.height},t}(Ln);zr.prototype.type="rect";var TN={fill:"#000"},CN=2,Oce={style:En({fill:!0,stroke:!0,fillOpacity:!0,strokeOpacity:!0,lineWidth:!0,fontSize:!0,lineHeight:!0,width:!0,height:!0,textShadowColor:!0,textShadowBlur:!0,textShadowOffsetX:!0,textShadowOffsetY:!0,backgroundColor:!0,padding:!0,borderColor:!0,borderWidth:!0,borderRadius:!0},rS.style)},ao=function(e){ot(t,e);function t(n){var r=e.call(this)||this;return r.type="text",r._children=[],r._defaultStyle=TN,r.attr(n),r}return t.prototype.childrenRef=function(){return this._children},t.prototype.update=function(){e.prototype.update.call(this),this.styleChanged()&&this._updateSubTexts();for(var n=0;n0,M=n.width!=null&&(n.overflow==="truncate"||n.overflow==="break"||n.overflow==="breakAll"),$=a.calculatedLineHeight,F=0;F=0&&(F=T[$],F.align==="right");)this._placeToken(F,n,P,_,M,"right",w),I-=F.width,M-=F.width,$--;for(O+=(o-(O-y)-(b-M)-I)/2;R<=$;)F=T[R],this._placeToken(F,n,P,_,O+F.width/2,"center",w),O+=F.width,R++;_+=P}},t.prototype._placeToken=function(n,r,i,o,a,s,l){var u=r.rich[n.styleName]||{};u.text=n.text;var c=n.verticalAlign,f=o+i/2;c==="top"?f=o+n.height/2:c==="bottom"&&(f=o+i-n.height/2);var d=!n.isLineHolder&&fT(u);d&&this._renderBackground(u,r,s==="right"?a-n.width:s==="center"?a-n.width/2:a,f-n.height/2,n.width,n.height);var h=!!u.backgroundColor,v=n.textPadding;v&&(a=ON(a,s,v),f-=n.height/2-v[0]-n.innerHeight/2);var m=this._getOrCreateChild(E1),y=m.createStyle();m.useStyle(y);var _=this._defaultStyle,b=!1,w=0,S=PN("fill"in u?u.fill:"fill"in r?r.fill:(b=!0,_.fill)),C=RN("stroke"in u?u.stroke:"stroke"in r?r.stroke:!h&&!l&&(!_.autoStroke||b)?(w=CN,_.stroke):null),T=u.textShadowBlur>0||r.textShadowBlur>0;y.text=n.text,y.x=a,y.y=f,T&&(y.shadowBlur=u.textShadowBlur||r.textShadowBlur||0,y.shadowColor=u.textShadowColor||r.textShadowColor||"transparent",y.shadowOffsetX=u.textShadowOffsetX||r.textShadowOffsetX||0,y.shadowOffsetY=u.textShadowOffsetY||r.textShadowOffsetY||0),y.textAlign=s,y.textBaseline="middle",y.font=n.font||pf,y.opacity=__(u.opacity,r.opacity,1),AN(y,u),C&&(y.lineWidth=__(u.lineWidth,r.lineWidth,w),y.lineDash=nn(u.lineDash,r.lineDash),y.lineDashOffset=r.lineDashOffset||0,y.stroke=C),S&&(y.fill=S);var A=n.contentWidth,P=n.contentHeight;m.setBoundingRect(new bn(Wp(y.x,A,y.textAlign),_d(y.y,P,y.textBaseline),A,P))},t.prototype._renderBackground=function(n,r,i,o,a,s){var l=n.backgroundColor,u=n.borderWidth,c=n.borderColor,f=l&&l.image,d=l&&!f,h=n.borderRadius,v=this,m,y;if(d||n.lineHeight||u&&c){m=this._getOrCreateChild(zr),m.useStyle(m.createStyle()),m.style.fill=null;var _=m.shape;_.x=i,_.y=o,_.width=a,_.height=s,_.r=h,m.dirtyShape()}if(d){var b=m.style;b.fill=l||null,b.fillOpacity=nn(n.fillOpacity,1)}else if(f){y=this._getOrCreateChild(Uu),y.onload=function(){v.dirtyStyle()};var w=y.style;w.image=l.image,w.x=i,w.y=o,w.width=a,w.height=s}if(u&&c){var b=m.style;b.lineWidth=u,b.stroke=c,b.strokeOpacity=nn(n.strokeOpacity,1),b.lineDash=n.borderDash,b.lineDashOffset=n.borderDashOffset||0,m.strokeContainThreshold=0,m.hasFill()&&m.hasStroke()&&(b.strokeFirst=!0,b.lineWidth*=2)}var S=(m||y).style;S.shadowBlur=n.shadowBlur||0,S.shadowColor=n.shadowColor||"transparent",S.shadowOffsetX=n.shadowOffsetX||0,S.shadowOffsetY=n.shadowOffsetY||0,S.opacity=__(n.opacity,r.opacity,1)},t.makeFont=function(n){var r="";return Nce(n)&&(r=[n.fontStyle,n.fontWeight,Lce(n.fontSize),n.fontFamily||"sans-serif"].join(" ")),r&&ns(r)||n.textFont||n.font},t}(am),Dce={left:!0,right:1,center:1},Mce={top:1,bottom:1,middle:1},EN=["fontStyle","fontWeight","fontSize","fontFamily"];function Lce(e){return typeof e=="string"&&(e.indexOf("px")!==-1||e.indexOf("rem")!==-1||e.indexOf("em")!==-1)?e:isNaN(+e)?nR+"px":e+"px"}function AN(e,t){for(var n=0;n0){if(e<=i)return a;if(e>=o)return s}else{if(e>=i)return a;if(e<=o)return s}else{if(e===i)return a;if(e===o)return s}return(e-i)/l*u+a}function Ci(e,t){switch(e){case"center":case"middle":e="50%";break;case"left":case"top":e="0%";break;case"right":case"bottom":e="100%";break}return dt(e)?Fce(e).match(/%$/)?parseFloat(e)/100*t:parseFloat(e):e==null?NaN:+e}function _r(e,t,n){return t==null&&(t=10),t=Math.min(Math.max(0,t),_U),e=(+e).toFixed(t),n?e:+e}function Js(e){if(e=+e,isNaN(e))return 0;if(e>1e-14){for(var t=1,n=0;n<15;n++,t*=10)if(Math.round(e*t)/t===e)return n}return $ce(e)}function $ce(e){var t=e.toString().toLowerCase(),n=t.indexOf("e"),r=n>0?+t.slice(n+1):0,i=n>0?n:t.length,o=t.indexOf("."),a=o<0?0:i-1-o;return Math.max(0,a-r)}function Bce(e,t){var n=Math.log,r=Math.LN10,i=Math.floor(n(e[1]-e[0])/r),o=Math.round(n(Math.abs(t[1]-t[0]))/r),a=Math.min(Math.max(-i+o,0),20);return isFinite(a)?a:20}function Vce(e,t){var n=Math.max(Js(e),Js(t)),r=e+t;return n>_U?r:_r(r,n)}function bU(e){var t=Math.PI*2;return(e%t+t)%t}function A1(e){return e>-MN&&e=10&&t++,t}function SU(e,t){var n=vR(e),r=Math.pow(10,n),i=e/r,o;return i<1.5?o=1:i<2.5?o=2:i<4?o=3:i<7?o=5:o=10,e=o*r,n>=-20?+e.toFixed(n<0?-n:0):e}function I1(e){var t=parseFloat(e);return t==e&&(t!==0||!dt(e)||e.indexOf("x")<=0)?t:NaN}function Gce(e){return!isNaN(I1(e))}function wU(){return Math.round(Math.random()*9)}function xU(e,t){return t===0?e:xU(t,e%t)}function NN(e,t){return e==null?t:t==null?e:e*t/xU(e,t)}function Xi(e){throw new Error(e)}function kN(e,t,n){return(t-e)*n+e}var TU="series\0",zce="\0_ec_\0";function Ri(e){return e instanceof Array?e:e==null?[]:[e]}function FN(e,t,n){if(e){e[t]=e[t]||{},e.emphasis=e.emphasis||{},e.emphasis[t]=e.emphasis[t]||{};for(var r=0,i=n.length;r=0,o=!1;if(e instanceof Ln){var a=AU(e),s=i&&a.selectFill||a.normalFill,l=i&&a.selectStroke||a.normalStroke;if(Qf(s)||Qf(l)){r=r||{};var u=r.style||{};u.fill==="inherit"?(o=!0,r=Ke({},r),u=Ke({},u),u.fill=s):!Qf(u.fill)&&Qf(s)?(o=!0,r=Ke({},r),u=Ke({},u),u.fill=vN(s)):!Qf(u.stroke)&&Qf(l)&&(o||(r=Ke({},r),u=Ke({},u)),u.stroke=vN(l)),r.style=u}}if(r&&r.z2==null){o||(r=Ke({},r));var c=e.z2EmphasisLift;r.z2=e.z2+(c??afe)}return r}function dfe(e,t,n){if(n&&n.z2==null){n=Ke({},n);var r=e.z2SelectLift;n.z2=e.z2+(r??sfe)}return n}function hfe(e,t,n){var r=In(e.currentStates,t)>=0,i=e.style.opacity,o=r?null:cfe(e,["opacity"],t,{opacity:1});n=n||{};var a=n.style||{};return a.opacity==null&&(n=Ke({},n),a=Ke({opacity:r?i:o.opacity*.1},a),n.style=a),n}function hT(e,t){var n=this.states[e];if(this.style){if(e==="emphasis")return ffe(this,e,t,n);if(e==="blur")return hfe(this,e,n);if(e==="select")return dfe(this,e,n)}return n}function pfe(e){e.stateProxy=hT;var t=e.getTextContent(),n=e.getTextGuideLine();t&&(t.stateProxy=hT),n&&(n.stateProxy=hT)}function zN(e,t){!LU(e,t)&&!e.__highByOuter&&yl(e,IU)}function WN(e,t){!LU(e,t)&&!e.__highByOuter&&yl(e,RU)}function R1(e,t){e.__highByOuter|=1<<(t||0),yl(e,IU)}function P1(e,t){!(e.__highByOuter&=~(1<<(t||0)))&&yl(e,RU)}function vfe(e){yl(e,bR)}function OU(e){yl(e,PU)}function DU(e){yl(e,lfe)}function MU(e){yl(e,ufe)}function LU(e,t){return e.__highDownSilentOnTouch&&t.zrByTouch}function NU(e){var t=e.getModel(),n=[],r=[];t.eachComponent(function(i,o){var a=yR(o),s=i==="series",l=s?e.getViewOfSeriesModel(o):e.getViewOfComponentModel(o);!s&&r.push(l),a.isBlured&&(l.group.traverse(function(u){PU(u)}),s&&n.push(o)),a.isBlured=!1}),Q(r,function(i){i&&i.toggleBlurSeries&&i.toggleBlurSeries(n,!1,t)})}function YE(e,t,n,r){var i=r.getModel();n=n||"coordinateSystem";function o(u,c){for(var f=0;f0){var s={dataIndex:a,seriesIndex:n.seriesIndex};o!=null&&(s.dataType=o),t.push(s)}})}),t}function KE(e,t,n){kU(e,!0),yl(e,pfe),wfe(e,t,n)}function Sfe(e){kU(e,!1)}function ZE(e,t,n,r){r?Sfe(e):KE(e,t,n)}function wfe(e,t,n){var r=Mn(e);t!=null?(r.focus=t,r.blurScope=n):r.focus&&(r.focus=null)}var YN=["emphasis","blur","select"],xfe={itemStyle:"getItemStyle",lineStyle:"getLineStyle",areaStyle:"getAreaStyle"};function XN(e,t,n,r){n=n||"itemStyle";for(var i=0;i1&&(a*=pT(v),s*=pT(v));var m=(i===o?-1:1)*pT((a*a*(s*s)-a*a*(h*h)-s*s*(d*d))/(a*a*(h*h)+s*s*(d*d)))||0,y=m*a*h/s,_=m*-s*d/a,b=(e+n)/2+Jy(f)*y-qy(f)*_,w=(t+r)/2+qy(f)*y+Jy(f)*_,S=JN([1,0],[(d-y)/a,(h-_)/s]),C=[(d-y)/a,(h-_)/s],T=[(-1*d-y)/a,(-1*h-_)/s],A=JN(C,T);if(QE(C,T)<=-1&&(A=pp),QE(C,T)>=1&&(A=0),A<0){var P=Math.round(A/pp*1e6)/1e6;A=pp*2+P%2*pp}c.addData(u,b,w,a,s,S,A,f,o)}var Rfe=/([mlvhzcqtsa])([^mlvhzcqtsa]*)/ig,Pfe=/-?([0-9]*\.)?[0-9]+([eE]-?[0-9]+)?/g;function Ofe(e){var t=new mf;if(!e)return t;var n=0,r=0,i=n,o=r,a,s=mf.CMD,l=e.match(Rfe);if(!l)return t;for(var u=0;u=0&&(i.splice(o,0,n),this._doAdd(n))}return this},t.prototype.replace=function(n,r){var i=In(this._children,n);return i>=0&&this.replaceAt(r,i),this},t.prototype.replaceAt=function(n,r){var i=this._children,o=i[r];if(n&&n!==this&&n.parent!==this&&n!==o){i[r]=n,o.parent=null;var a=this.__zr;a&&o.removeSelfFromZr(a),this._doAdd(n)}return this},t.prototype._doAdd=function(n){n.parent&&n.parent.remove(n),n.parent=this;var r=this.__zr;r&&r!==n.__zr&&n.addSelfToZr(r),r&&r.refresh()},t.prototype.remove=function(n){var r=this.__zr,i=this._children,o=In(i,n);return o<0?this:(i.splice(o,1),n.parent=null,r&&n.removeSelfFromZr(r),r&&r.refresh(),this)},t.prototype.removeAll=function(){for(var n=this._children,r=this.__zr,i=0;iF*F+z*z&&(P=R,I=O),{cx:P,cy:I,x0:-c,y0:-f,x1:P*(i/C-1),y1:I*(i/C-1)}}function Bfe(e){var t;if(lt(e)){var n=e.length;if(!n)return e;n===1?t=[e[0],e[0],0,0]:n===2?t=[e[0],e[0],e[1],e[1]]:n===3?t=e.concat(e[2]):t=e}else t=[e,e,e,e];return t}function Vfe(e,t){var n,r=Xp(t.r,0),i=Xp(t.r0||0,0),o=r>0,a=i>0;if(!(!o&&!a)){if(o||(r=i,i=0),i>r){var s=r;r=i,i=s}var l=t.startAngle,u=t.endAngle;if(!(isNaN(l)||isNaN(u))){var c=t.cx,f=t.cy,d=!!t.clockwise,h=ek(u-l),v=h>vT&&h%vT;if(v>Sa&&(h=v),!(r>Sa))e.moveTo(c,f);else if(h>vT-Sa)e.moveTo(c+r*td(l),f+r*vc(l)),e.arc(c,f,r,l,u,!d),i>Sa&&(e.moveTo(c+i*td(u),f+i*vc(u)),e.arc(c,f,i,u,l,d));else{var m=void 0,y=void 0,_=void 0,b=void 0,w=void 0,S=void 0,C=void 0,T=void 0,A=void 0,P=void 0,I=void 0,R=void 0,O=void 0,M=void 0,$=void 0,F=void 0,z=r*td(l),B=r*vc(l),Y=i*td(u),j=i*vc(u),se=h>Sa;if(se){var ge=t.cornerRadius;ge&&(n=Bfe(ge),m=n[0],y=n[1],_=n[2],b=n[3]);var ve=ek(r-i)/2;if(w=Ka(ve,_),S=Ka(ve,b),C=Ka(ve,m),T=Ka(ve,y),I=A=Xp(w,S),R=P=Xp(C,T),(A>Sa||P>Sa)&&(O=r*td(u),M=r*vc(u),$=i*td(l),F=i*vc(l),hSa){var Se=Ka(_,I),Te=Ka(b,I),Oe=Qy($,F,z,B,r,Se,d),$e=Qy(O,M,Y,j,r,Te,d);e.moveTo(c+Oe.cx+Oe.x0,f+Oe.cy+Oe.y0),I0&&e.arc(c+Oe.cx,f+Oe.cy,Se,Kr(Oe.y0,Oe.x0),Kr(Oe.y1,Oe.x1),!d),e.arc(c,f,r,Kr(Oe.cy+Oe.y1,Oe.cx+Oe.x1),Kr($e.cy+$e.y1,$e.cx+$e.x1),!d),Te>0&&e.arc(c+$e.cx,f+$e.cy,Te,Kr($e.y1,$e.x1),Kr($e.y0,$e.x0),!d))}else e.moveTo(c+z,f+B),e.arc(c,f,r,l,u,!d);if(!(i>Sa)||!se)e.lineTo(c+Y,f+j);else if(R>Sa){var Se=Ka(m,R),Te=Ka(y,R),Oe=Qy(Y,j,O,M,i,-Te,d),$e=Qy(z,B,$,F,i,-Se,d);e.lineTo(c+Oe.cx+Oe.x0,f+Oe.cy+Oe.y0),R0&&e.arc(c+Oe.cx,f+Oe.cy,Te,Kr(Oe.y0,Oe.x0),Kr(Oe.y1,Oe.x1),!d),e.arc(c,f,i,Kr(Oe.cy+Oe.y1,Oe.cx+Oe.x1),Kr($e.cy+$e.y1,$e.cx+$e.x1),d),Se>0&&e.arc(c+$e.cx,f+$e.cy,Se,Kr($e.y1,$e.x1),Kr($e.y0,$e.x0),!d))}else e.lineTo(c+Y,f+j),e.arc(c,f,i,u,l,d)}e.closePath()}}}var Ufe=function(){function e(){this.cx=0,this.cy=0,this.r0=0,this.r=0,this.startAngle=0,this.endAngle=Math.PI*2,this.clockwise=!0,this.cornerRadius=0}return e}(),lS=function(e){ot(t,e);function t(n){return e.call(this,n)||this}return t.prototype.getDefaultShape=function(){return new Ufe},t.prototype.buildPath=function(n,r){Vfe(n,r)},t.prototype.isZeroArea=function(){return this.shape.startAngle===this.shape.endAngle||this.shape.r===this.shape.r0},t}(Ln);lS.prototype.type="sector";var Hfe=function(){function e(){this.cx=0,this.cy=0,this.r=0,this.r0=0}return e}(),xR=function(e){ot(t,e);function t(n){return e.call(this,n)||this}return t.prototype.getDefaultShape=function(){return new Hfe},t.prototype.buildPath=function(n,r){var i=r.cx,o=r.cy,a=Math.PI*2;n.moveTo(i+r.r,o),n.arc(i,o,r.r,0,a,!1),n.moveTo(i+r.r0,o),n.arc(i,o,r.r0,0,a,!0)},t}(Ln);xR.prototype.type="ring";function Gfe(e,t,n,r){var i=[],o=[],a=[],s=[],l,u,c,f;if(r){c=[1/0,1/0],f=[-1/0,-1/0];for(var d=0,h=e.length;d=2){if(r){var o=Gfe(i,r,n,t.smoothConstraint);e.moveTo(i[0][0],i[0][1]);for(var a=i.length,s=0;s<(n?a:a-1);s++){var l=o[s*2],u=o[s*2+1],c=i[(s+1)%a];e.bezierCurveTo(l[0],l[1],u[0],u[1],c[0],c[1])}}else{e.moveTo(i[0][0],i[0][1]);for(var s=1,f=i.length;smc[1]){if(s=!1,o)return s;var c=Math.abs(mc[0]-gc[1]),f=Math.abs(gc[0]-mc[1]);Math.min(c,f)>i.len()&&(c0){var f=c.duration,d=c.delay,h=c.easing,v={duration:f,delay:d||0,easing:h,done:o,force:!!o||!!a,setToFinal:!u,scope:e,during:a};s?t.animateFrom(n,v):t.animateTo(n,v)}else t.stopAnimation(),!s&&t.attr(n),a&&a(1),o&&o()}function Ru(e,t,n,r,i,o){IR("update",e,t,n,r,i,o)}function um(e,t,n,r,i,o){IR("enter",e,t,n,r,i,o)}function Ov(e){if(!e.__zr)return!0;for(var t=0;tMath.abs(o[1])?o[0]>0?"right":"left":o[1]>0?"bottom":"top"}function rk(e){return!e.isGroup}function hde(e){return e.shape!=null}function jU(e,t,n){if(!e||!t)return;function r(a){var s={};return a.traverse(function(l){rk(l)&&l.anid&&(s[l.anid]=l)}),s}function i(a){var s={x:a.x,y:a.y,rotation:a.rotation};return hde(a)&&(s.shape=Ke({},a.shape)),s}var o=r(e);t.traverse(function(a){if(rk(a)&&a.anid){var s=o[a.anid];if(s){var l=i(a);a.attr(i(s)),Ru(a,l,n,Mn(a).dataIndex)}}})}function pde(e,t){return Rt(e,function(n){var r=n[0];r=M1(r,t.x),r=L1(r,t.x+t.width);var i=n[1];return i=M1(i,t.y),i=L1(i,t.y+t.height),[r,i]})}function vde(e,t){var n=M1(e.x,t.x),r=L1(e.x+e.width,t.x+t.width),i=M1(e.y,t.y),o=L1(e.y+e.height,t.y+t.height);if(r>=n&&o>=i)return{x:n,y:i,width:r-n,height:o-i}}function OR(e,t,n){var r=Ke({rectHover:!0},t),i=r.style={strokeNoScale:!0};if(n=n||{x:-1,y:-1,width:2,height:2},e)return e.indexOf("image://")===0?(i.image=e.slice(8),En(i,n),new Uu(r)):RR(e.replace("path://",""),r,n,"center")}function gde(e,t,n,r,i){for(var o=0,a=i[i.length-1];o1)return!1;var y=gT(h,v,c,f)/d;return!(y<0||y>1)}function gT(e,t,n,r){return e*r-n*t}function mde(e){return e<=1e-6&&e>=-1e-6}function cS(e){var t=e.itemTooltipOption,n=e.componentModel,r=e.itemName,i=dt(t)?{formatter:t}:t,o=n.mainType,a=n.componentIndex,s={componentType:o,name:r,$vars:["name"]};s[o+"Index"]=a;var l=e.formatterParamsExtra;l&&Q(Kn(l),function(c){vf(s,c)||(s[c]=l[c],s.$vars.push(c))});var u=Mn(e.el);u.componentMainType=o,u.componentIndex=a,u.tooltipConfig={name:r,option:En({content:r,encodeHTMLContent:!0,formatterParams:s},i)}}function ik(e,t){var n;e.isGroup&&(n=t(e)),n||e.traverse(t)}function DR(e,t){if(e)if(lt(e))for(var n=0;n1){var c=l.shift();l.length===1&&(r[s]=l[0]),this._update&&this._update(c,a)}else u===1?(r[s]=null,this._update&&this._update(l,a)):this._remove&&this._remove(a)}this._performRestAdd(o,r)},e.prototype._executeMultiple=function(){var t=this._old,n=this._new,r={},i={},o=[],a=[];this._initIndexMap(t,r,o,"_oldKeyGetter"),this._initIndexMap(n,i,a,"_newKeyGetter");for(var s=0;s1&&d===1)this._updateManyToOne&&this._updateManyToOne(c,u),i[l]=null;else if(f===1&&d>1)this._updateOneToMany&&this._updateOneToMany(c,u),i[l]=null;else if(f===1&&d===1)this._update&&this._update(c,u),i[l]=null;else if(f>1&&d>1)this._updateManyToMany&&this._updateManyToMany(c,u),i[l]=null;else if(f>1)for(var h=0;h1)for(var s=0;sm&&(m=w)}h[0]=v,h[1]=m}},i=function(){return this._data?this._data.length/this._dimSize:0};pk=(t={},t[so+"_"+rl]={pure:!0,appendData:o},t[so+"_"+Ih]={pure:!0,appendData:function(){throw new Error('Do not support appendData when set seriesLayoutBy: "row".')}},t[_s]={pure:!0,appendData:o},t[_l]={pure:!0,appendData:function(a){var s=this._data;Q(a,function(l,u){for(var c=s[u]||(s[u]=[]),f=0;f<(l||[]).length;f++)c.push(l[f])})}},t[ca]={appendData:o},t[bu]={persistent:!1,pure:!0,appendData:function(a){this._data=a},clean:function(){this._offset+=this.count(),this._data=null}},t);function o(a){for(var s=0;si?-this._resultLT:0},e}(),hS="undefined",Wde=typeof Uint32Array===hS?Array:Uint32Array,jde=typeof Uint16Array===hS?Array:Uint16Array,uH=typeof Int32Array===hS?Array:Int32Array,yk=typeof Float64Array===hS?Array:Float64Array,cH={float:yk,int:uH,ordinal:Array,number:Array,time:yk},ST;function nd(e){return e>65535?Wde:jde}function rd(){return[1/0,-1/0]}function Yde(e){var t=e.constructor;return t===Array?e.slice():new t(e)}function _k(e,t,n,r,i){var o=cH[n||"float"];if(i){var a=e[t],s=a&&a.length;if(s!==r){for(var l=new o(r),u=0;uy[1]&&(y[1]=m)}return this._rawCount=this._count=l,{start:s,end:l}},e.prototype._initDataFromProvider=function(t,n,r){for(var i=this._provider,o=this._chunks,a=this._dimensions,s=a.length,l=this._rawExtent,u=Rt(a,function(b){return b.property}),c=0;c_[1]&&(_[1]=y)}}!i.persistent&&i.clean&&i.clean(),this._rawCount=this._count=n,this._extent=[]},e.prototype.count=function(){return this._count},e.prototype.get=function(t,n){if(!(n>=0&&n=0&&n=this._rawCount||t<0)return-1;if(!this._indices)return t;var n=this._indices,r=n[t];if(r!=null&&rt)o=a-1;else return a}return-1},e.prototype.indicesOfNearest=function(t,n,r){var i=this._chunks,o=i[t],a=[];if(!o)return a;r==null&&(r=1/0);for(var s=1/0,l=-1,u=0,c=0,f=this.count();c=0&&l<0)&&(s=v,l=h,u=0),h===l&&(a[u++]=c))}return a.length=u,a},e.prototype.getIndices=function(){var t,n=this._indices;if(n){var r=n.constructor,i=this._count;if(r===Array){t=new r(i);for(var o=0;o=f&&b<=d||isNaN(b))&&(l[u++]=m),m++}v=!0}else if(o===2){for(var y=h[i[0]],w=h[i[1]],S=t[i[1]][0],C=t[i[1]][1],_=0;_=f&&b<=d||isNaN(b))&&(T>=S&&T<=C||isNaN(T))&&(l[u++]=m),m++}v=!0}}if(!v)if(o===1)for(var _=0;_=f&&b<=d||isNaN(b))&&(l[u++]=A)}else for(var _=0;_t[R][1])&&(P=!1)}P&&(l[u++]=n.getRawIndex(_))}return u_[1]&&(_[1]=y)}}}},e.prototype.lttbDownSample=function(t,n){var r=this.clone([t],!0),i=r._chunks,o=i[t],a=this.count(),s=0,l=Math.floor(1/n),u=this.getRawIndex(0),c,f,d,h=new(nd(this._rawCount))(Math.min((Math.ceil(a/l)+2)*2,a));h[s++]=u;for(var v=1;vc&&(c=f,d=S)}O>0&&Os&&(m=s-c);for(var y=0;yv&&(v=b,h=c+y)}var w=this.getRawIndex(f),S=this.getRawIndex(h);fc-v&&(l=c-v,s.length=l);for(var m=0;mf[1]&&(f[1]=_),d[h++]=b}return o._count=h,o._indices=d,o._updateGetRawIdx(),o},e.prototype.each=function(t,n){if(this._count)for(var r=t.length,i=this._chunks,o=0,a=this.count();ol&&(l=f)}return a=[s,l],this._extent[t]=a,a},e.prototype.getRawDataItem=function(t){var n=this.getRawIndex(t);if(this._provider.persistent)return this._provider.getItem(n);for(var r=[],i=this._chunks,o=0;o=0?this._indices[t]:-1},e.prototype._updateGetRawIdx=function(){this.getRawIndex=this._indices?this._getRawIdx:this._getRawIdxIdentity},e.internalField=function(){function t(n,r,i,o){return E_(n[o],this._dimensions[o])}ST={arrayRows:t,objectRows:function(n,r,i,o){return E_(n[r],this._dimensions[o])},keyedColumns:t,original:function(n,r,i,o){var a=n&&(n.value==null?n:n.value);return E_(a instanceof Array?a[o]:a,this._dimensions[o])},typedArray:function(n,r,i,o){return n[o]}}}(),e}(),Xde=Ar(),Kde={float:"f",int:"i",ordinal:"o",number:"n",time:"t"},fH=function(){function e(t){this.dimensions=t.dimensions,this._dimOmitted=t.dimensionOmitted,this.source=t.source,this._fullDimCount=t.fullDimensionCount,this._updateDimOmitted(t.dimensionOmitted)}return e.prototype.isDimensionOmitted=function(){return this._dimOmitted},e.prototype._updateDimOmitted=function(t){this._dimOmitted=t,t&&(this._dimNameMap||(this._dimNameMap=pH(this.source)))},e.prototype.getSourceDimensionIndex=function(t){return nn(this._dimNameMap.get(t),-1)},e.prototype.getSourceDimension=function(t){var n=this.source.dimensionsDefine;if(n)return n[t]},e.prototype.makeStoreSchema=function(){for(var t=this._fullDimCount,n=iH(this.source),r=!vH(t),i="",o=[],a=0,s=0;a30}var gp=Ct,$l=Rt,Zde=typeof Int32Array>"u"?Array:Int32Array,qde="e\0\0",bk=-1,Jde=["hasItemOption","_nameList","_idList","_invertedIndicesMap","_dimSummary","userOutput","_rawData","_dimValueGetter","_nameDimIdx","_idDimIdx","_nameRepeatCount"],Qde=["_approximateExtent"],Sk,n0,mp,yp,wT,_p,xT,ehe=function(){function e(t,n){this.type="list",this._dimOmitted=!1,this._nameList=[],this._idList=[],this._visual={},this._layout={},this._itemVisuals=[],this._itemLayouts=[],this._graphicEls=[],this._approximateExtent={},this._calculationInfo={},this.hasItemOption=!1,this.TRANSFERABLE_METHODS=["cloneShallow","downSample","minmaxDownSample","lttbDownSample","map"],this.CHANGABLE_METHODS=["filterSelf","selectRange"],this.DOWNSAMPLE_METHODS=["downSample","minmaxDownSample","lttbDownSample"];var r,i=!1;dH(t)?(r=t.dimensions,this._dimOmitted=t.isDimensionOmitted(),this._schema=t):(i=!0,r=t),r=r||["x","y"];for(var o={},a=[],s={},l=!1,u={},c=0;c=n)){var r=this._store,i=r.getProvider();this._updateOrdinalMeta();var o=this._nameList,a=this._idList,s=i.getSource().sourceFormat,l=s===ca;if(l&&!i.pure)for(var u=[],c=t;c0},e.prototype.ensureUniqueItemVisual=function(t,n){var r=this._itemVisuals,i=r[t];i||(i=r[t]={});var o=i[n];return o==null&&(o=this.getVisual(n),lt(o)?o=o.slice():gp(o)&&(o=Ke({},o)),i[n]=o),o},e.prototype.setItemVisual=function(t,n,r){var i=this._itemVisuals[t]||{};this._itemVisuals[t]=i,gp(n)?Ke(i,n):i[n]=r},e.prototype.clearAllVisual=function(){this._visual={},this._itemVisuals=[]},e.prototype.setLayout=function(t,n){gp(t)?Ke(this._layout,t):this._layout[t]=n},e.prototype.getLayout=function(t){return this._layout[t]},e.prototype.getItemLayout=function(t){return this._itemLayouts[t]},e.prototype.setItemLayout=function(t,n,r){this._itemLayouts[t]=r?Ke(this._itemLayouts[t]||{},n):n},e.prototype.clearItemLayouts=function(){this._itemLayouts.length=0},e.prototype.setItemGraphicEl=function(t,n){var r=this.hostModel&&this.hostModel.seriesIndex;ofe(r,this.dataType,t,n),this._graphicEls[t]=n},e.prototype.getItemGraphicEl=function(t){return this._graphicEls[t]},e.prototype.eachItemGraphicEl=function(t,n){Q(this._graphicEls,function(r,i){r&&t&&t.call(n,r,i)})},e.prototype.cloneShallow=function(t){return t||(t=new e(this._schema?this._schema:$l(this.dimensions,this._getDimInfo,this),this.hostModel)),wT(t,this),t._store=this._store,t},e.prototype.wrapMethod=function(t,n){var r=this[t];Vt(r)&&(this.__wrappedMethods=this.__wrappedMethods||[],this.__wrappedMethods.push(t),this[t]=function(){var i=r.apply(this,arguments);return n.apply(this,[i].concat(aR(arguments)))})},e.internalField=function(){Sk=function(t){var n=t._invertedIndicesMap;Q(n,function(r,i){var o=t._dimInfos[i],a=o.ordinalMeta,s=t._store;if(a){r=n[i]=new Zde(a.categories.length);for(var l=0;l1&&(l+="__ec__"+c),i[n]=l}}}(),e}();function the(e,t){NR(e)||(e=nH(e)),t=t||{};var n=t.coordDimensions||[],r=t.dimensionsDefine||e.dimensionsDefine||[],i=Kt(),o=[],a=rhe(e,n,r,t.dimensionsCount),s=t.canOmitUnusedDimensions&&vH(a),l=r===e.dimensionsDefine,u=l?pH(e):hH(r),c=t.encodeDefine;!c&&t.encodeDefaulter&&(c=t.encodeDefaulter(e,a));for(var f=Kt(c),d=new uH(a),h=0;h0&&(r.name=i+(o-1)),o++,t.set(i,o)}}function rhe(e,t,n,r){var i=Math.max(e.dimensionsDetectedCount||1,t.length,n.length,r||0);return Q(t,function(o){var a;Ct(o)&&(a=o.dimsDef)&&(i=Math.max(i,a.length))}),i}function ihe(e,t,n){if(n||t.hasKey(e)){for(var r=0;t.hasKey(e+r);)r++;e+=r}return t.set(e,!0),e}var TT={},FR=function(){function e(){this._coordinateSystems=[]}return e.prototype.create=function(t,n){var r=[];Q(TT,function(i,o){var a=i.create(t,n);r=r.concat(a||[])}),this._coordinateSystems=r},e.prototype.update=function(t,n){Q(this._coordinateSystems,function(r){r.update&&r.update(t,n)})},e.prototype.getCoordinateSystems=function(){return this._coordinateSystems.slice()},e.register=function(t,n){TT[t]=n},e.get=function(t){return TT[t]},e}(),ohe=function(){function e(t){this.coordSysDims=[],this.axisMap=Kt(),this.categoryAxisMap=Kt(),this.coordSysName=t}return e}();function ahe(e){var t=e.get("coordinateSystem"),n=new ohe(t),r=she[t];if(r)return r(e,n,n.axisMap,n.categoryAxisMap),n}var she={cartesian2d:function(e,t,n,r){var i=e.getReferringComponents("xAxis",Pa).models[0],o=e.getReferringComponents("yAxis",Pa).models[0];t.coordSysDims=["x","y"],n.set("x",i),n.set("y",o),id(i)&&(r.set("x",i),t.firstCategoryDimIndex=0),id(o)&&(r.set("y",o),t.firstCategoryDimIndex==null&&(t.firstCategoryDimIndex=1))},singleAxis:function(e,t,n,r){var i=e.getReferringComponents("singleAxis",Pa).models[0];t.coordSysDims=["single"],n.set("single",i),id(i)&&(r.set("single",i),t.firstCategoryDimIndex=0)},polar:function(e,t,n,r){var i=e.getReferringComponents("polar",Pa).models[0],o=i.findAxisModel("radiusAxis"),a=i.findAxisModel("angleAxis");t.coordSysDims=["radius","angle"],n.set("radius",o),n.set("angle",a),id(o)&&(r.set("radius",o),t.firstCategoryDimIndex=0),id(a)&&(r.set("angle",a),t.firstCategoryDimIndex==null&&(t.firstCategoryDimIndex=1))},geo:function(e,t,n,r){t.coordSysDims=["lng","lat"]},parallel:function(e,t,n,r){var i=e.ecModel,o=i.getComponent("parallel",e.get("parallelIndex")),a=t.coordSysDims=o.dimensions.slice();Q(o.parallelAxisIndex,function(s,l){var u=i.getComponent("parallelAxis",s),c=a[l];n.set(c,u),id(u)&&(r.set(c,u),t.firstCategoryDimIndex==null&&(t.firstCategoryDimIndex=l))})}};function id(e){return e.get("type")==="category"}function lhe(e,t,n){n=n||{};var r=n.byIndex,i=n.stackedCoordDimension,o,a,s;uhe(t)?o=t:(a=t.schema,o=a.dimensions,s=t.store);var l=!!(e&&e.get("stack")),u,c,f,d;if(Q(o,function(b,w){dt(b)&&(o[w]=b={name:b}),l&&!b.isExtraCoord&&(!r&&!u&&b.ordinalMeta&&(u=b),!c&&b.type!=="ordinal"&&b.type!=="time"&&(!i||i===b.coordDim)&&(c=b))}),c&&!r&&!u&&(r=!0),c){f="__\0ecstackresult_"+e.id,d="__\0ecstackedover_"+e.id,u&&(u.createInvertedIndices=!0);var h=c.coordDim,v=c.type,m=0;Q(o,function(b){b.coordDim===h&&m++});var y={name:f,coordDim:h,coordDimIndex:m,type:v,isExtraCoord:!0,isCalculationCoord:!0,storeDimIndex:o.length},_={name:d,coordDim:d,coordDimIndex:m+1,type:v,isExtraCoord:!0,isCalculationCoord:!0,storeDimIndex:o.length+1};a?(s&&(y.storeDimIndex=s.ensureCalculationDimension(d,v),_.storeDimIndex=s.ensureCalculationDimension(f,v)),a.appendCalculationDimension(y),a.appendCalculationDimension(_)):(o.push(y),o.push(_))}return{stackedDimension:c&&c.name,stackedByDimension:u&&u.name,isStackedByIndex:r,stackedOverDimension:d,stackResultDimension:f}}function uhe(e){return!dH(e.schema)}function xg(e,t){return!!t&&t===e.getCalculationInfo("stackedDimension")}function che(e,t){return xg(e,t)?e.getCalculationInfo("stackResultDimension"):t}function fhe(e,t){var n=e.get("coordinateSystem"),r=FR.get(n),i;return t&&t.coordSysDims&&(i=Rt(t.coordSysDims,function(o){var a={name:o},s=t.axisMap.get(o);if(s){var l=s.get("type");a.type=Hde(l)}return a})),i||(i=r&&(r.getDimensionsInfo?r.getDimensionsInfo():r.dimensions.slice())||["x","y"]),i}function dhe(e,t,n){var r,i;return n&&Q(e,function(o,a){var s=o.coordDim,l=n.categoryAxisMap.get(s);l&&(r==null&&(r=a),o.ordinalMeta=l.getOrdinalMeta(),t&&(o.createInvertedIndices=!0)),o.otherDims.itemName!=null&&(i=!0)}),!i&&r!=null&&(e[r].otherDims.itemName=0),r}function hhe(e,t,n){n=n||{};var r=t.getSourceManager(),i,o=!1;i=r.getSource(),o=i.sourceFormat===ca;var a=ahe(t),s=fhe(t,a),l=n.useEncodeDefaulter,u=Vt(l)?l:l?Dr(Ode,s,t):null,c={coordDimensions:s,generateCoord:n.generateCoord,encodeDefine:t.getEncode(),encodeDefaulter:u,canOmitUnusedDimensions:!o},f=the(i,c),d=dhe(f.dimensions,n.createInvertedIndices,a),h=o?null:r.getSharedDataStore(f),v=lhe(t,{schema:f,store:h}),m=new ehe(f,t);m.setCalculationInfo(v);var y=d!=null&&phe(i)?function(_,b,w,S){return S===d?w:this.defaultDimValueGetter(_,b,w,S)}:null;return m.hasItemOption=!1,m.initData(o?i:h,null,y),m}function phe(e){if(e.sourceFormat===ca){var t=vhe(e.data||[]);return!lt(sm(t))}}function vhe(e){for(var t=0;t=0&&s.push(l)}),s}}function _he(e,t){return _n(_n({},e,!0),t,!0)}var bhe=Math.log(2);function rA(e,t,n,r,i,o){var a=r+"-"+i,s=e.length;if(o.hasOwnProperty(a))return o[a];if(t===1){var l=Math.round(Math.log((1<>1)%2;s.cssText=["position: absolute","visibility: hidden","padding: 0","margin: 0","border-width: 0","user-select: none","width:0","height:0",r[l]+":0",i[u]+":0",r[1-l]+":auto",i[1-u]+":auto",""].join("!important;"),e.appendChild(a),n.push(a)}return n}function xhe(e,t,n){for(var r=n?"invTrans":"trans",i=t[r],o=t.srcCoords,a=[],s=[],l=!0,u=0;u<4;u++){var c=e[u].getBoundingClientRect(),f=2*u,d=c.left,h=c.top;a.push(d,h),l=l&&o&&d===o[f]&&h===o[f+1],s.push(e[u].offsetLeft,e[u].offsetTop)}return l&&i?i:(t.srcCoords=a,t[r]=n?wk(s,a):wk(a,s))}function gH(e){return e.nodeName.toUpperCase()==="CANVAS"}var The=/([&<>"'])/g,Che={"&":"&","<":"<",">":">",'"':""","'":"'"};function Ki(e){return e==null?"":(e+"").replace(The,function(t,n){return Che[n]})}const Ehe={time:{month:["January","February","March","April","May","June","July","August","September","October","November","December"],monthAbbr:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayOfWeek:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayOfWeekAbbr:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},legend:{selector:{all:"All",inverse:"Inv"}},toolbox:{brush:{title:{rect:"Box Select",polygon:"Lasso Select",lineX:"Horizontally Select",lineY:"Vertically Select",keep:"Keep Selections",clear:"Clear Selections"}},dataView:{title:"Data View",lang:["Data View","Close","Refresh"]},dataZoom:{title:{zoom:"Zoom",back:"Zoom Reset"}},magicType:{title:{line:"Switch to Line Chart",bar:"Switch to Bar Chart",stack:"Stack",tiled:"Tile"}},restore:{title:"Restore"},saveAsImage:{title:"Save as Image",lang:["Right Click to Save Image"]}},series:{typeNames:{pie:"Pie chart",bar:"Bar chart",line:"Line chart",scatter:"Scatter plot",effectScatter:"Ripple scatter plot",radar:"Radar chart",tree:"Tree",treemap:"Treemap",boxplot:"Boxplot",candlestick:"Candlestick",k:"K line chart",heatmap:"Heat map",map:"Map",parallel:"Parallel coordinate map",lines:"Line graph",graph:"Relationship graph",sankey:"Sankey diagram",funnel:"Funnel chart",gauge:"Gauge",pictorialBar:"Pictorial bar",themeRiver:"Theme River Map",sunburst:"Sunburst",custom:"Custom chart",chart:"Chart"}},aria:{general:{withTitle:'This is a chart about "{title}"',withoutTitle:"This is a chart"},series:{single:{prefix:"",withName:" with type {seriesType} named {seriesName}.",withoutName:" with type {seriesType}."},multiple:{prefix:". It consists of {seriesCount} series count.",withName:" The {seriesId} series is a {seriesType} representing {seriesName}.",withoutName:" The {seriesId} series is a {seriesType}.",separator:{middle:"",end:""}}},data:{allData:"The data is as follows: ",partialData:"The first {displayCnt} items are: ",withName:"the data for {name} is {value}",withoutName:"{value}",separator:{middle:", ",end:". "}}}},Ahe={time:{month:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthAbbr:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayOfWeek:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayOfWeekAbbr:["日","一","二","三","四","五","六"]},legend:{selector:{all:"全选",inverse:"反选"}},toolbox:{brush:{title:{rect:"矩形选择",polygon:"圈选",lineX:"横向选择",lineY:"纵向选择",keep:"保持选择",clear:"清除选择"}},dataView:{title:"数据视图",lang:["数据视图","关闭","刷新"]},dataZoom:{title:{zoom:"区域缩放",back:"区域缩放还原"}},magicType:{title:{line:"切换为折线图",bar:"切换为柱状图",stack:"切换为堆叠",tiled:"切换为平铺"}},restore:{title:"还原"},saveAsImage:{title:"保存为图片",lang:["右键另存为图片"]}},series:{typeNames:{pie:"饼图",bar:"柱状图",line:"折线图",scatter:"散点图",effectScatter:"涟漪散点图",radar:"雷达图",tree:"树图",treemap:"矩形树图",boxplot:"箱型图",candlestick:"K线图",k:"K线图",heatmap:"热力图",map:"地图",parallel:"平行坐标图",lines:"线图",graph:"关系图",sankey:"桑基图",funnel:"漏斗图",gauge:"仪表盘图",pictorialBar:"象形柱图",themeRiver:"主题河流图",sunburst:"旭日图",custom:"自定义图表",chart:"图表"}},aria:{general:{withTitle:"这是一个关于“{title}”的图表。",withoutTitle:"这是一个图表,"},series:{single:{prefix:"",withName:"图表类型是{seriesType},表示{seriesName}。",withoutName:"图表类型是{seriesType}。"},multiple:{prefix:"它由{seriesCount}个图表系列组成。",withName:"第{seriesId}个系列是一个表示{seriesName}的{seriesType},",withoutName:"第{seriesId}个系列是一个{seriesType},",separator:{middle:";",end:"。"}}},data:{allData:"其数据是——",partialData:"其中,前{displayCnt}项是——",withName:"{name}的数据是{value}",withoutName:"{value}",separator:{middle:",",end:""}}}};var N1="ZH",$R="EN",zd=$R,A_={},BR={},mH=Dt.domSupported?function(){var e=(document.documentElement.lang||navigator.language||navigator.browserLanguage||zd).toUpperCase();return e.indexOf(N1)>-1?N1:zd}():zd;function yH(e,t){e=e.toUpperCase(),BR[e]=new sr(t),A_[e]=t}function Ihe(e){if(dt(e)){var t=A_[e.toUpperCase()]||{};return e===N1||e===$R?ln(t):_n(ln(t),ln(A_[zd]),!1)}else return _n(ln(e),ln(A_[zd]),!1)}function Rhe(e){return BR[e]}function Phe(){return BR[zd]}yH($R,Ehe);yH(N1,Ahe);var VR=1e3,UR=VR*60,Dv=UR*60,Qo=Dv*24,Tk=Qo*365,Kp={year:"{yyyy}",month:"{MMM}",day:"{d}",hour:"{HH}:{mm}",minute:"{HH}:{mm}",second:"{HH}:{mm}:{ss}",millisecond:"{HH}:{mm}:{ss} {SSS}",none:"{yyyy}-{MM}-{dd} {HH}:{mm}:{ss} {SSS}"},r0="{yyyy}-{MM}-{dd}",Ck={year:"{yyyy}",month:"{yyyy}-{MM}",day:r0,hour:r0+" "+Kp.hour,minute:r0+" "+Kp.minute,second:r0+" "+Kp.second,millisecond:Kp.none},ET=["year","month","day","hour","minute","second","millisecond"],_H=["year","half-year","quarter","month","week","half-week","day","half-day","quarter-day","hour","minute","second","millisecond"];function Bl(e,t){return e+="","0000".substr(0,t-e.length)+e}function Wd(e){switch(e){case"half-year":case"quarter":return"month";case"week":case"half-week":return"day";case"half-day":case"quarter-day":return"hour";default:return e}}function Ohe(e){return e===Wd(e)}function Dhe(e){switch(e){case"year":case"month":return"day";case"millisecond":return"millisecond";default:return"second"}}function vS(e,t,n,r){var i=vl(e),o=i[HR(n)](),a=i[jd(n)]()+1,s=Math.floor((a-1)/3)+1,l=i[gS(n)](),u=i["get"+(n?"UTC":"")+"Day"](),c=i[Tg(n)](),f=(c-1)%12+1,d=i[mS(n)](),h=i[yS(n)](),v=i[_S(n)](),m=c>=12?"pm":"am",y=m.toUpperCase(),_=r instanceof sr?r:Rhe(r||mH)||Phe(),b=_.getModel("time"),w=b.get("month"),S=b.get("monthAbbr"),C=b.get("dayOfWeek"),T=b.get("dayOfWeekAbbr");return(t||"").replace(/{a}/g,m+"").replace(/{A}/g,y+"").replace(/{yyyy}/g,o+"").replace(/{yy}/g,Bl(o%100+"",2)).replace(/{Q}/g,s+"").replace(/{MMMM}/g,w[a-1]).replace(/{MMM}/g,S[a-1]).replace(/{MM}/g,Bl(a,2)).replace(/{M}/g,a+"").replace(/{dd}/g,Bl(l,2)).replace(/{d}/g,l+"").replace(/{eeee}/g,C[u]).replace(/{ee}/g,T[u]).replace(/{e}/g,u+"").replace(/{HH}/g,Bl(c,2)).replace(/{H}/g,c+"").replace(/{hh}/g,Bl(f+"",2)).replace(/{h}/g,f+"").replace(/{mm}/g,Bl(d,2)).replace(/{m}/g,d+"").replace(/{ss}/g,Bl(h,2)).replace(/{s}/g,h+"").replace(/{SSS}/g,Bl(v,3)).replace(/{S}/g,v+"")}function Mhe(e,t,n,r,i){var o=null;if(dt(n))o=n;else if(Vt(n))o=n(e.value,t,{level:e.level});else{var a=Ke({},Kp);if(e.level>0)for(var s=0;s=0;--s)if(l[u]){o=l[u];break}o=o||a.none}if(lt(o)){var f=e.level==null?0:e.level>=0?e.level:o.length+e.level;f=Math.min(f,o.length-1),o=o[f]}}return vS(new Date(e.value),o,i,r)}function bH(e,t){var n=vl(e),r=n[jd(t)]()+1,i=n[gS(t)](),o=n[Tg(t)](),a=n[mS(t)](),s=n[yS(t)](),l=n[_S(t)](),u=l===0,c=u&&s===0,f=c&&a===0,d=f&&o===0,h=d&&i===1,v=h&&r===1;return v?"year":h?"month":d?"day":f?"hour":c?"minute":u?"second":"millisecond"}function Ek(e,t,n){var r=Zn(e)?vl(e):e;switch(t=t||bH(e,n),t){case"year":return r[HR(n)]();case"half-year":return r[jd(n)]()>=6?1:0;case"quarter":return Math.floor((r[jd(n)]()+1)/4);case"month":return r[jd(n)]();case"day":return r[gS(n)]();case"half-day":return r[Tg(n)]()/24;case"hour":return r[Tg(n)]();case"minute":return r[mS(n)]();case"second":return r[yS(n)]();case"millisecond":return r[_S(n)]()}}function HR(e){return e?"getUTCFullYear":"getFullYear"}function jd(e){return e?"getUTCMonth":"getMonth"}function gS(e){return e?"getUTCDate":"getDate"}function Tg(e){return e?"getUTCHours":"getHours"}function mS(e){return e?"getUTCMinutes":"getMinutes"}function yS(e){return e?"getUTCSeconds":"getSeconds"}function _S(e){return e?"getUTCMilliseconds":"getMilliseconds"}function Lhe(e){return e?"setUTCFullYear":"setFullYear"}function SH(e){return e?"setUTCMonth":"setMonth"}function wH(e){return e?"setUTCDate":"setDate"}function xH(e){return e?"setUTCHours":"setHours"}function TH(e){return e?"setUTCMinutes":"setMinutes"}function CH(e){return e?"setUTCSeconds":"setSeconds"}function EH(e){return e?"setUTCMilliseconds":"setMilliseconds"}function AH(e){if(!Gce(e))return dt(e)?e:"-";var t=(e+"").split(".");return t[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,"$1,")+(t.length>1?"."+t[1]:"")}function IH(e,t){return e=(e||"").toLowerCase().replace(/-(.)/g,function(n,r){return r.toUpperCase()}),t&&e&&(e=e.charAt(0).toUpperCase()+e.slice(1)),e}var bS=XV;function oA(e,t,n){var r="{yyyy}-{MM}-{dd} {HH}:{mm}:{ss}";function i(c){return c&&ns(c)?c:"-"}function o(c){return!!(c!=null&&!isNaN(c)&&isFinite(c))}var a=t==="time",s=e instanceof Date;if(a||s){var l=a?vl(e):e;if(isNaN(+l)){if(s)return"-"}else return vS(l,r,n)}if(t==="ordinal")return DE(e)?i(e):Zn(e)&&o(e)?e+"":"-";var u=I1(e);return o(u)?AH(u):DE(e)?i(e):typeof e=="boolean"?e+"":"-"}var Ak=["a","b","c","d","e","f","g"],AT=function(e,t){return"{"+e+(t??"")+"}"};function RH(e,t,n){lt(t)||(t=[t]);var r=t.length;if(!r)return"";for(var i=t[0].$vars||[],o=0;o':'';var a=n.markerId||"markerX";return{renderMode:o,content:"{"+a+"|} ",style:i==="subItem"?{width:4,height:4,borderRadius:2,backgroundColor:r}:{width:10,height:10,borderRadius:5,backgroundColor:r}}}function _f(e,t){return t=t||"transparent",dt(e)?e:Ct(e)&&e.colorStops&&(e.colorStops[0]||{}).color||t}var I_=Q,khe=["left","right","top","bottom","width","height"],i0=[["width","left","right"],["height","top","bottom"]];function GR(e,t,n,r,i){var o=0,a=0;r==null&&(r=1/0),i==null&&(i=1/0);var s=0;t.eachChild(function(l,u){var c=l.getBoundingRect(),f=t.childAt(u+1),d=f&&f.getBoundingRect(),h,v;if(e==="horizontal"){var m=c.width+(d?-d.x+c.x:0);h=o+m,h>r||l.newline?(o=0,h=m,a+=s+n,s=c.height):s=Math.max(s,c.height)}else{var y=c.height+(d?-d.y+c.y:0);v=a+y,v>i||l.newline?(o+=s+n,a=0,v=y,s=c.width):s=Math.max(s,c.width)}l.newline||(l.x=o,l.y=a,l.markRedraw(),e==="horizontal"?o=h+n:a=v+n)})}var Mv=GR;Dr(GR,"vertical");Dr(GR,"horizontal");function k1(e,t,n){n=bS(n||0);var r=t.width,i=t.height,o=Ci(e.left,r),a=Ci(e.top,i),s=Ci(e.right,r),l=Ci(e.bottom,i),u=Ci(e.width,r),c=Ci(e.height,i),f=n[2]+n[0],d=n[1]+n[3],h=e.aspect;switch(isNaN(u)&&(u=r-s-d-o),isNaN(c)&&(c=i-l-f-a),h!=null&&(isNaN(u)&&isNaN(c)&&(h>r/i?u=r*.8:c=i*.8),isNaN(u)&&(u=h*c),isNaN(c)&&(c=u/h)),isNaN(o)&&(o=r-s-u-d),isNaN(a)&&(a=i-l-c-f),e.left||e.right){case"center":o=r/2-u/2-n[3];break;case"right":o=r-u-d;break}switch(e.top||e.bottom){case"middle":case"center":a=i/2-c/2-n[0];break;case"bottom":a=i-c-f;break}o=o||0,a=a||0,isNaN(u)&&(u=r-d-o-(s||0)),isNaN(c)&&(c=i-f-a-(l||0));var v=new bn(o+n[3],a+n[0],u,c);return v.margin=n,v}function Cg(e){var t=e.layoutMode||e.constructor.layoutMode;return Ct(t)?t:t?{type:t}:null}function sh(e,t,n){var r=n&&n.ignoreSize;!lt(r)&&(r=[r,r]);var i=a(i0[0],0),o=a(i0[1],1);u(i0[0],e,i),u(i0[1],e,o);function a(c,f){var d={},h=0,v={},m=0,y=2;if(I_(c,function(w){v[w]=e[w]}),I_(c,function(w){s(t,w)&&(d[w]=v[w]=t[w]),l(d,w)&&h++,l(v,w)&&m++}),r[f])return l(t,c[1])?v[c[2]]=null:l(t,c[2])&&(v[c[1]]=null),v;if(m===y||!h)return v;if(h>=y)return d;for(var _=0;_=0;l--)s=_n(s,i[l],!0);r.defaultOption=s}return r.defaultOption},t.prototype.getReferringComponents=function(n,r){var i=n+"Index",o=n+"Id";return lm(this.ecModel,n,{index:this.get(i,!0),id:this.get(o,!0)},r)},t.prototype.getBoxLayoutParams=function(){var n=this;return{left:n.get("left"),top:n.get("top"),right:n.get("right"),bottom:n.get("bottom"),width:n.get("width"),height:n.get("height")}},t.prototype.getZLevelKey=function(){return""},t.prototype.setZLevel=function(n){this.option.zlevel=n},t.protoInitialize=function(){var n=t.prototype;n.type="component",n.id="",n.name="",n.mainType="",n.subType="",n.componentIndex=0}(),t}(sr);QV(An,sr);Qb(An);mhe(An);yhe(An,Bhe);function Bhe(e){var t=[];return Q(An.getClassesByMainType(e),function(n){t=t.concat(n.dependencies||n.prototype.dependencies||[])}),t=Rt(t,function(n){return rs(n).main}),e!=="dataset"&&In(t,"dataset")<=0&&t.unshift("dataset"),t}var Ik=Ar();Ar();var zR=function(){function e(){}return e.prototype.getColorFromPalette=function(t,n,r){var i=Ri(this.get("color",!0)),o=this.get("colorLayer",!0);return Uhe(this,Ik,i,o,t,n,r)},e.prototype.clearColorPalette=function(){Hhe(this,Ik)},e}();function Vhe(e,t){for(var n=e.length,r=0;rt)return e[r];return e[n-1]}function Uhe(e,t,n,r,i,o,a){o=o||e;var s=t(o),l=s.paletteIdx||0,u=s.paletteNameMap=s.paletteNameMap||{};if(u.hasOwnProperty(i))return u[i];var c=a==null||!r?n:Vhe(r,a);if(c=c||n,!(!c||!c.length)){var f=c[l];return i&&(u[i]=f),s.paletteIdx=(l+1)%c.length,f}}function Hhe(e,t){t(e).paletteIdx=0,t(e).paletteNameMap={}}var Ghe=/\{@(.+?)\}/g,zhe=function(){function e(){}return e.prototype.getDataParams=function(t,n){var r=this.getData(n),i=this.getRawValue(t,n),o=r.getRawIndex(t),a=r.getName(t),s=r.getRawDataItem(t),l=r.getItemVisual(t,"style"),u=l&&l[r.getItemVisual(t,"drawType")||"fill"],c=l&&l.stroke,f=this.mainType,d=f==="series",h=r.userOutput&&r.userOutput.get();return{componentType:f,componentSubType:this.subType,componentIndex:this.componentIndex,seriesType:d?this.subType:null,seriesIndex:this.seriesIndex,seriesId:d?this.id:null,seriesName:d?this.name:null,name:a,dataIndex:o,data:s,dataType:n,value:i,color:u,borderColor:c,dimensionNames:h?h.fullDimensions:null,encode:h?h.encode:null,$vars:["seriesName","name","value"]}},e.prototype.getFormattedLabel=function(t,n,r,i,o,a){n=n||"normal";var s=this.getData(r),l=this.getDataParams(t,r);if(a&&(l.value=a.interpolatedValue),i!=null&<(l.value)&&(l.value=l.value[i]),!o){var u=s.getItemModel(t);o=u.get(n==="normal"?["label","formatter"]:[n,"label","formatter"])}if(Vt(o))return l.status=n,l.dimensionIndex=i,o(l);if(dt(o)){var c=RH(o,l);return c.replace(Ghe,function(f,d){var h=d.length,v=d;v.charAt(0)==="["&&v.charAt(h-1)==="]"&&(v=+v.slice(1,h-1));var m=ah(s,t,v);if(a&<(a.interpolatedValue)){var y=s.getDimensionIndex(v);y>=0&&(m=a.interpolatedValue[y])}return m!=null?m+"":""})}},e.prototype.getRawValue=function(t,n){return ah(this.getData(n),t)},e.prototype.formatTooltip=function(t,n,r){},e}();function Rk(e){var t,n;return Ct(e)?e.type&&(n=e):t=e,{text:t,frag:n}}function Lv(e){return new Whe(e)}var Whe=function(){function e(t){t=t||{},this._reset=t.reset,this._plan=t.plan,this._count=t.count,this._onDirty=t.onDirty,this._dirty=!0}return e.prototype.perform=function(t){var n=this._upstream,r=t&&t.skip;if(this._dirty&&n){var i=this.context;i.data=i.outputData=n.context.outputData}this.__pipeline&&(this.__pipeline.currentTask=this);var o;this._plan&&!r&&(o=this._plan(this.context));var a=c(this._modBy),s=this._modDataCount||0,l=c(t&&t.modBy),u=t&&t.modDataCount||0;(a!==l||s!==u)&&(o="reset");function c(b){return!(b>=1)&&(b=1),b}var f;(this._dirty||o==="reset")&&(this._dirty=!1,f=this._doReset(r)),this._modBy=l,this._modDataCount=u;var d=t&&t.step;if(n?this._dueEnd=n._outputDueEnd:this._dueEnd=this._count?this._count(this.context):1/0,this._progress){var h=this._dueIndex,v=Math.min(d!=null?this._dueIndex+d:1/0,this._dueEnd);if(!r&&(f||h1&&r>0?s:a}};return o;function a(){return t=e?null:l9e10&&(this._versionSignBase=0)},e.prototype._getVersionSign=function(){return this._sourceHost.uid+"_"+this._versionSignBase},e.prototype.prepareSource=function(){this._isDirty()&&(this._createSource(),this._dirty=!1)},e.prototype._createSource=function(){this._setLocalSource([],[]);var t=this._sourceHost,n=this._getUpstreamSourceManagers(),r=!!n.length,i,o;if(o0(t)){var a=t,s=void 0,l=void 0,u=void 0;if(r){var c=n[0];c.prepareSource(),u=c.getSource(),s=u.data,l=u.sourceFormat,o=[c._getVersionSign()]}else s=a.get("data",!0),l=oo(s)?bu:ca,o=[];var f=this._getSourceMetaRawOption()||{},d=u&&u.metaRawOption||{},h=nn(f.seriesLayoutBy,d.seriesLayoutBy)||null,v=nn(f.sourceHeader,d.sourceHeader),m=nn(f.dimensions,d.dimensions),y=h!==d.seriesLayoutBy||!!v!=!!d.sourceHeader||m;i=y?[tA(s,{seriesLayoutBy:h,sourceHeader:v,dimensions:m},l)]:[]}else{var _=t;if(r){var b=this._applyTransform(n);i=b.sourceList,o=b.upstreamSignList}else{var w=_.get("source",!0);i=[tA(w,this._getSourceMetaRawOption(),null)],o=[]}}this._setLocalSource(i,o)},e.prototype._applyTransform=function(t){var n=this._sourceHost,r=n.get("transform",!0),i=n.get("fromTransformResult",!0);if(i!=null){var o="";t.length!==1&&Ok(o)}var a,s=[],l=[];return Q(t,function(u){u.prepareSource();var c=u.getSource(i||0),f="";i!=null&&!c&&Ok(f),s.push(c),l.push(u._getVersionSign())}),r?a=Qhe(r,s,{datasetIndex:n.componentIndex}):i!=null&&(a=[Lde(s[0])]),{sourceList:a,upstreamSignList:l}},e.prototype._isDirty=function(){if(this._dirty)return!0;for(var t=this._getUpstreamSourceManagers(),n=0;n1||n>0&&!e.noHeader;return Q(e.blocks,function(i){var o=LH(i);o>=t&&(t=o+ +(r&&(!o||aA(i)&&!i.noHeader)))}),t}return 0}function ope(e,t,n,r){var i=t.noHeader,o=spe(LH(t)),a=[],s=t.blocks||[];pl(!s||lt(s)),s=s||[];var l=e.orderMode;if(t.sortBlocks&&l){s=s.slice();var u={valueAsc:"asc",valueDesc:"desc"};if(vf(u,l)){var c=new zde(u[l],null);s.sort(function(m,y){return c.evaluate(m.sortParam,y.sortParam)})}else l==="seriesDesc"&&s.reverse()}Q(s,function(m,y){var _=t.valueFormatter,b=MH(m)(_?Ke(Ke({},e),{valueFormatter:_}):e,m,y>0?o.html:0,r);b!=null&&a.push(b)});var f=e.renderMode==="richText"?a.join(o.richText):sA(r,a.join(""),i?n:o.html);if(i)return f;var d=oA(t.header,"ordinal",e.useUTC),h=DH(r,e.renderMode).nameStyle,v=OH(r);return e.renderMode==="richText"?NH(e,d,h)+o.richText+f:sA(r,'
'+Ki(d)+"
"+f,n)}function ape(e,t,n,r){var i=e.renderMode,o=t.noName,a=t.noValue,s=!t.markerType,l=t.name,u=e.useUTC,c=t.valueFormatter||e.valueFormatter||function(S){return S=lt(S)?S:[S],Rt(S,function(C,T){return oA(C,lt(h)?h[T]:h,u)})};if(!(o&&a)){var f=s?"":e.markupStyleCreator.makeTooltipMarker(t.markerType,t.markerColor||"#333",i),d=o?"":oA(l,"ordinal",u),h=t.valueType,v=a?[]:c(t.value,t.dataIndex),m=!s||!o,y=!s&&o,_=DH(r,i),b=_.nameStyle,w=_.valueStyle;return i==="richText"?(s?"":f)+(o?"":NH(e,d,b))+(a?"":cpe(e,v,m,y,w)):sA(r,(s?"":f)+(o?"":lpe(d,!s,b))+(a?"":upe(v,m,y,w)),n)}}function Dk(e,t,n,r,i,o){if(e){var a=MH(e),s={useUTC:i,renderMode:n,orderMode:r,markupStyleCreator:t,valueFormatter:e.valueFormatter};return a(s,e,0,o)}}function spe(e){return{html:rpe[e],richText:ipe[e]}}function sA(e,t,n){var r='
',i="margin: "+n+"px 0 0",o=OH(e);return'
'+t+r+"
"}function lpe(e,t,n){var r=t?"margin-left:2px":"";return''+Ki(e)+""}function upe(e,t,n,r){var i=n?"10px":"20px",o=t?"float:right;margin-left:"+i:"";return e=lt(e)?e:[e],''+Rt(e,function(a){return Ki(a)}).join("  ")+""}function NH(e,t,n){return e.markupStyleCreator.wrapRichTextStyle(t,n)}function cpe(e,t,n,r,i){var o=[i],a=r?10:20;return n&&o.push({padding:[0,0,0,a],align:"right"}),e.markupStyleCreator.wrapRichTextStyle(lt(t)?t.join(" "):t,o)}function fpe(e,t){var n=e.getData().getItemVisual(t,"style"),r=n[e.visualDrawType];return _f(r)}function kH(e,t){var n=e.get("padding");return n??(t==="richText"?[8,10]:10)}var IT=function(){function e(){this.richTextStyles={},this._nextStyleNameId=wU()}return e.prototype._generateStyleName=function(){return"__EC_aUTo_"+this._nextStyleNameId++},e.prototype.makeTooltipMarker=function(t,n,r){var i=r==="richText"?this._generateStyleName():null,o=Nhe({color:n,type:t,renderMode:r,markerId:i});return dt(o)?o:(this.richTextStyles[i]=o.style,o.content)},e.prototype.wrapRichTextStyle=function(t,n){var r={};lt(n)?Q(n,function(o){return Ke(r,o)}):Ke(r,n);var i=this._generateStyleName();return this.richTextStyles[i]=r,"{"+i+"|"+t+"}"},e}();function dpe(e){var t=e.series,n=e.dataIndex,r=e.multipleSeries,i=t.getData(),o=i.mapDimensionsAll("defaultedTooltip"),a=o.length,s=t.getRawValue(n),l=lt(s),u=fpe(t,n),c,f,d,h;if(a>1||l&&!a){var v=hpe(s,t,n,o,u);c=v.inlineValues,f=v.inlineValueTypes,d=v.blocks,h=v.inlineValues[0]}else if(a){var m=i.getDimensionInfo(o[0]);h=c=ah(i,n,o[0]),f=m.type}else h=c=l?s[0]:s;var y=gR(t),_=y&&t.name||"",b=i.getName(n),w=r?_:b;return Eg("section",{header:_,noHeader:r||!y,sortParam:h,blocks:[Eg("nameValue",{markerType:"item",markerColor:u,name:w,noName:!ns(w),value:c,valueType:f,dataIndex:n})].concat(d||[])})}function hpe(e,t,n,r,i){var o=t.getData(),a=Eh(e,function(f,d,h){var v=o.getDimensionInfo(h);return f=f||v&&v.tooltip!==!1&&v.displayName!=null},!1),s=[],l=[],u=[];r.length?Q(r,function(f){c(ah(o,n,f),f)}):Q(e,c);function c(f,d){var h=o.getDimensionInfo(d);!h||h.otherDims.tooltip===!1||(a?u.push(Eg("nameValue",{markerType:"subItem",markerColor:i,name:h.displayName,value:f,valueType:h.type})):(s.push(f),l.push(h.type)))}return{inlineValues:s,inlineValueTypes:l,blocks:u}}var Vl=Ar();function a0(e,t){return e.getName(t)||e.getId(t)}var ppe="__universalTransitionEnabled",Pu=function(e){ot(t,e);function t(){var n=e!==null&&e.apply(this,arguments)||this;return n._selectedDataIndicesMap={},n}return t.prototype.init=function(n,r,i){this.seriesIndex=this.componentIndex,this.dataTask=Lv({count:gpe,reset:mpe}),this.dataTask.context={model:this},this.mergeDefaultAndTheme(n,i);var o=Vl(this).sourceManager=new tpe(this);o.prepareSource();var a=this.getInitialData(n,i);Lk(a,this),this.dataTask.context.data=a,Vl(this).dataBeforeProcessed=a,Mk(this),this._initSelectedMapFromData(a)},t.prototype.mergeDefaultAndTheme=function(n,r){var i=Cg(this),o=i?SS(n):{},a=this.subType;An.hasClass(a)&&(a+="Series"),_n(n,r.getTheme().get(this.subType)),_n(n,this.getDefaultOption()),FN(n,"label",["show"]),this.fillDataTextStyle(n.data),i&&sh(n,o,i)},t.prototype.mergeOption=function(n,r){n=_n(this.option,n,!0),this.fillDataTextStyle(n.data);var i=Cg(this);i&&sh(this.option,n,i);var o=Vl(this).sourceManager;o.dirty(),o.prepareSource();var a=this.getInitialData(n,r);Lk(a,this),this.dataTask.dirty(),this.dataTask.context.data=a,Vl(this).dataBeforeProcessed=a,Mk(this),this._initSelectedMapFromData(a)},t.prototype.fillDataTextStyle=function(n){if(n&&!oo(n))for(var r=["show"],i=0;ithis.getShallow("animationThreshold")&&(r=!1),!!r},t.prototype.restoreData=function(){this.dataTask.dirty()},t.prototype.getColorFromPalette=function(n,r,i){var o=this.ecModel,a=zR.prototype.getColorFromPalette.call(this,n,r,i);return a||(a=o.getColorFromPalette(n,r,i)),a},t.prototype.coordDimToDataDim=function(n){return this.getRawData().mapDimensionsAll(n)},t.prototype.getProgressive=function(){return this.get("progressive")},t.prototype.getProgressiveThreshold=function(){return this.get("progressiveThreshold")},t.prototype.select=function(n,r){this._innerSelect(this.getData(r),n)},t.prototype.unselect=function(n,r){var i=this.option.selectedMap;if(i){var o=this.option.selectedMode,a=this.getData(r);if(o==="series"||i==="all"){this.option.selectedMap={},this._selectedDataIndicesMap={};return}for(var s=0;s=0&&i.push(a)}return i},t.prototype.isSelected=function(n,r){var i=this.option.selectedMap;if(!i)return!1;var o=this.getData(r);return(i==="all"||i[a0(o,n)])&&!o.getItemModel(n).get(["select","disabled"])},t.prototype.isUniversalTransitionEnabled=function(){if(this[ppe])return!0;var n=this.option.universalTransition;return n?n===!0?!0:n&&n.enabled:!1},t.prototype._innerSelect=function(n,r){var i,o,a=this.option,s=a.selectedMode,l=r.length;if(!(!s||!l)){if(s==="series")a.selectedMap="all";else if(s==="multiple"){Ct(a.selectedMap)||(a.selectedMap={});for(var u=a.selectedMap,c=0;c0&&this._innerSelect(n,r)}},t.registerClass=function(n){return An.registerClass(n)},t.protoInitialize=function(){var n=t.prototype;n.type="series.__base__",n.seriesIndex=0,n.ignoreStyleOnData=!1,n.hasSymbolVisual=!1,n.defaultSymbol="circle",n.visualStyleAccessPath="itemStyle",n.visualDrawType="fill"}(),t}(An);ms(Pu,zhe);ms(Pu,zR);QV(Pu,An);function Mk(e){var t=e.name;gR(e)||(e.name=vpe(e)||t)}function vpe(e){var t=e.getRawData(),n=t.mapDimensionsAll("seriesName"),r=[];return Q(n,function(i){var o=t.getDimensionInfo(i);o.displayName&&r.push(o.displayName)}),r.join(" ")}function gpe(e){return e.model.getRawData().count()}function mpe(e){var t=e.model;return t.setData(t.getRawData().cloneShallow()),ype}function ype(e,t){t.outputData&&e.end>t.outputData.count()&&t.model.getRawData().cloneShallow(t.outputData)}function Lk(e,t){Q(tue(e.CHANGABLE_METHODS,e.DOWNSAMPLE_METHODS),function(n){e.wrapMethod(n,Dr(_pe,t))})}function _pe(e,t){var n=lA(e);return n&&n.setOutputEnd((t||this).count()),t}function lA(e){var t=(e.ecModel||{}).scheduler,n=t&&t.getPipeline(e.uid);if(n){var r=n.currentTask;if(r){var i=r.agentStubMap;i&&(r=i.get(e.uid))}return r}}var bpe=Ln.extend({type:"triangle",shape:{cx:0,cy:0,width:0,height:0},buildPath:function(e,t){var n=t.cx,r=t.cy,i=t.width/2,o=t.height/2;e.moveTo(n,r-o),e.lineTo(n+i,r+o),e.lineTo(n-i,r+o),e.closePath()}}),Spe=Ln.extend({type:"diamond",shape:{cx:0,cy:0,width:0,height:0},buildPath:function(e,t){var n=t.cx,r=t.cy,i=t.width/2,o=t.height/2;e.moveTo(n,r-o),e.lineTo(n+i,r),e.lineTo(n,r+o),e.lineTo(n-i,r),e.closePath()}}),wpe=Ln.extend({type:"pin",shape:{x:0,y:0,width:0,height:0},buildPath:function(e,t){var n=t.x,r=t.y,i=t.width/5*3,o=Math.max(i,t.height),a=i/2,s=a*a/(o-a),l=r-o+a+s,u=Math.asin(s/a),c=Math.cos(u)*a,f=Math.sin(u),d=Math.cos(u),h=a*.6,v=a*.7;e.moveTo(n-c,l+s),e.arc(n,l,a,Math.PI-u,Math.PI*2+u),e.bezierCurveTo(n+c-f*h,l+s+d*h,n,r-v,n,r),e.bezierCurveTo(n,r-v,n-c+f*h,l+s+d*h,n-c,l+s),e.closePath()}}),xpe=Ln.extend({type:"arrow",shape:{x:0,y:0,width:0,height:0},buildPath:function(e,t){var n=t.height,r=t.width,i=t.x,o=t.y,a=r/3*2;e.moveTo(i,o),e.lineTo(i+a,o+n),e.lineTo(i,o+n/4*3),e.lineTo(i-a,o+n),e.lineTo(i,o),e.closePath()}}),Tpe={line:Iu,rect:zr,roundRect:zr,square:zr,circle:sS,diamond:Spe,pin:wpe,arrow:xpe,triangle:bpe},Cpe={line:function(e,t,n,r,i){i.x1=e,i.y1=t+r/2,i.x2=e+n,i.y2=t+r/2},rect:function(e,t,n,r,i){i.x=e,i.y=t,i.width=n,i.height=r},roundRect:function(e,t,n,r,i){i.x=e,i.y=t,i.width=n,i.height=r,i.r=Math.min(n,r)/4},square:function(e,t,n,r,i){var o=Math.min(n,r);i.x=e,i.y=t,i.width=o,i.height=o},circle:function(e,t,n,r,i){i.cx=e+n/2,i.cy=t+r/2,i.r=Math.min(n,r)/2},diamond:function(e,t,n,r,i){i.cx=e+n/2,i.cy=t+r/2,i.width=n,i.height=r},pin:function(e,t,n,r,i){i.x=e+n/2,i.y=t+r/2,i.width=n,i.height=r},arrow:function(e,t,n,r,i){i.x=e+n/2,i.y=t+r/2,i.width=n,i.height=r},triangle:function(e,t,n,r,i){i.cx=e+n/2,i.cy=t+r/2,i.width=n,i.height=r}},uA={};Q(Tpe,function(e,t){uA[t]=new e});var Epe=Ln.extend({type:"symbol",shape:{symbolType:"",x:0,y:0,width:0,height:0},calculateTextPosition:function(e,t,n){var r=nU(e,t,n),i=this.shape;return i&&i.symbolType==="pin"&&t.position==="inside"&&(r.y=n.y+n.height*.4),r},buildPath:function(e,t,n){var r=t.symbolType;if(r!=="none"){var i=uA[r];i||(r="rect",i=uA[r]),Cpe[r](t.x,t.y,t.width,t.height,i.shape),i.buildPath(e,i.shape,n)}}});function Ape(e,t){if(this.type!=="image"){var n=this.style;this.__isEmptyBrush?(n.stroke=e,n.fill=t||"#fff",n.lineWidth=2):this.shape.symbolType==="line"?n.stroke=e:n.fill=e,this.markRedraw()}}function lh(e,t,n,r,i,o,a){var s=e.indexOf("empty")===0;s&&(e=e.substr(5,1).toLowerCase()+e.substr(6));var l;return e.indexOf("image://")===0?l=GU(e.slice(8),new bn(t,n,r,i),a?"center":"cover"):e.indexOf("path://")===0?l=RR(e.slice(7),{},new bn(t,n,r,i),a?"center":"cover"):l=new Epe({shape:{symbolType:e,x:t,y:n,width:r,height:i}}),l.__isEmptyBrush=s,l.setColor=Ape,o&&l.setColor(o),l}function Ipe(e){return lt(e)||(e=[+e,+e]),[e[0]||0,e[1]||0]}function FH(e,t){if(e!=null)return lt(e)||(e=[e,e]),[Ci(e[0],t[0])||0,Ci(nn(e[1],e[0]),t[1])||0]}var Rpe=function(e){ot(t,e);function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.type=t.type,n.hasSymbolVisual=!0,n}return t.prototype.getInitialData=function(n){return hhe(null,this,{useEncodeDefaulter:!0})},t.prototype.getLegendIcon=function(n){var r=new pi,i=lh("line",0,n.itemHeight/2,n.itemWidth,0,n.lineStyle.stroke,!1);r.add(i),i.setStyle(n.lineStyle);var o=this.getData().getVisual("symbol"),a=this.getData().getVisual("symbolRotate"),s=o==="none"?"circle":o,l=n.itemHeight*.8,u=lh(s,(n.itemWidth-l)/2,(n.itemHeight-l)/2,l,l,n.itemStyle.fill);r.add(u),u.setStyle(n.itemStyle);var c=n.iconRotate==="inherit"?a:n.iconRotate||0;return u.rotation=c*Math.PI/180,u.setOrigin([n.itemWidth/2,n.itemHeight/2]),s.indexOf("empty")>-1&&(u.style.stroke=u.style.fill,u.style.fill="#fff",u.style.lineWidth=2),r},t.type="series.line",t.dependencies=["grid","polar"],t.defaultOption={z:3,coordinateSystem:"cartesian2d",legendHoverLink:!0,clip:!0,label:{position:"top"},endLabel:{show:!1,valueAnimation:!0,distance:8},lineStyle:{width:2,type:"solid"},emphasis:{scale:!0},step:!1,smooth:!1,smoothMonotone:null,symbol:"emptyCircle",symbolSize:4,symbolRotate:null,showSymbol:!0,showAllSymbol:"auto",connectNulls:!1,sampling:"none",animationEasing:"linear",progressive:0,hoverLayerThreshold:1/0,universalTransition:{divideShape:"clone"},triggerLineEvent:!1},t}(Pu);function $H(e,t){var n=e.mapDimensionsAll("defaultedLabel"),r=n.length;if(r===1){var i=ah(e,t,n[0]);return i!=null?i+"":null}else if(r){for(var o=[],a=0;a=0&&r.push(t[o])}return r.join(" ")}var jR=function(e){ot(t,e);function t(n,r,i,o){var a=e.call(this)||this;return a.updateData(n,r,i,o),a}return t.prototype._createSymbol=function(n,r,i,o,a){this.removeAll();var s=lh(n,-1,-1,2,2,null,a);s.attr({z2:100,culling:!0,scaleX:o[0]/2,scaleY:o[1]/2}),s.drift=Ope,this._symbolType=n,this.add(s)},t.prototype.stopSymbolAnimation=function(n){this.childAt(0).stopAnimation(null,n)},t.prototype.getSymbolType=function(){return this._symbolType},t.prototype.getSymbolPath=function(){return this.childAt(0)},t.prototype.highlight=function(){R1(this.childAt(0))},t.prototype.downplay=function(){P1(this.childAt(0))},t.prototype.setZ=function(n,r){var i=this.childAt(0);i.zlevel=n,i.z=r},t.prototype.setDraggable=function(n,r){var i=this.childAt(0);i.draggable=n,i.cursor=!r&&n?"move":i.cursor},t.prototype.updateData=function(n,r,i,o){this.silent=!1;var a=n.getItemVisual(r,"symbol")||"circle",s=n.hostModel,l=t.getSymbolSize(n,r),u=a!==this._symbolType,c=o&&o.disableAnimation;if(u){var f=n.getItemVisual(r,"symbolKeepAspect");this._createSymbol(a,n,r,l,f)}else{var d=this.childAt(0);d.silent=!1;var h={scaleX:l[0]/2,scaleY:l[1]/2};c?d.attr(h):Ru(d,h,s,r),rde(d)}if(this._updateCommon(n,r,l,i,o),u){var d=this.childAt(0);if(!c){var h={scaleX:this._sizeX,scaleY:this._sizeY,style:{opacity:d.style.opacity}};d.scaleX=d.scaleY=0,d.style.opacity=0,um(d,h,s,r)}}c&&this.childAt(0).stopAnimation("leave")},t.prototype._updateCommon=function(n,r,i,o,a){var s=this.childAt(0),l=n.hostModel,u,c,f,d,h,v,m,y,_;if(o&&(u=o.emphasisItemStyle,c=o.blurItemStyle,f=o.selectItemStyle,d=o.focus,h=o.blurScope,m=o.labelStatesModels,y=o.hoverScale,_=o.cursorStyle,v=o.emphasisDisabled),!o||n.hasItemOption){var b=o&&o.itemModel?o.itemModel:n.getItemModel(r),w=b.getModel("emphasis");u=w.getModel("itemStyle").getItemStyle(),f=b.getModel(["select","itemStyle"]).getItemStyle(),c=b.getModel(["blur","itemStyle"]).getItemStyle(),d=w.get("focus"),h=w.get("blurScope"),v=w.get("disabled"),m=LR(b),y=w.getShallow("scale"),_=b.getShallow("cursor")}var S=n.getItemVisual(r,"symbolRotate");s.attr("rotation",(S||0)*Math.PI/180||0);var C=FH(n.getItemVisual(r,"symbolOffset"),i);C&&(s.x=C[0],s.y=C[1]),_&&s.attr("cursor",_);var T=n.getItemVisual(r,"style"),A=T.fill;if(s instanceof Uu){var P=s.style;s.useStyle(Ke({image:P.image,x:P.x,y:P.y,width:P.width,height:P.height},T))}else s.__isEmptyBrush?s.useStyle(Ke({},T)):s.useStyle(T),s.style.decal=null,s.setColor(A,a&&a.symbolInnerColor),s.style.strokeNoScale=!0;var I=n.getItemVisual(r,"liftZ"),R=this._z2;I!=null?R==null&&(this._z2=s.z2,s.z2+=I):R!=null&&(s.z2=R,this._z2=null);var O=a&&a.useNameLabel;MR(s,m,{labelFetcher:l,labelDataIndex:r,defaultText:M,inheritColor:A,defaultOpacity:T.opacity});function M(z){return O?n.getName(z):$H(n,z)}this._sizeX=i[0]/2,this._sizeY=i[1]/2;var $=s.ensureState("emphasis");$.style=u,s.ensureState("select").style=f,s.ensureState("blur").style=c;var F=y==null||y===!0?Math.max(1.1,3/this._sizeY):isFinite(y)&&y>0?+y:1;$.scaleX=this._sizeX*F,$.scaleY=this._sizeY*F,this.setSymbolScale(1),ZE(this,d,h,v)},t.prototype.setSymbolScale=function(n){this.scaleX=this.scaleY=n},t.prototype.fadeOut=function(n,r,i){var o=this.childAt(0),a=Mn(this).dataIndex,s=i&&i.animation;if(this.silent=o.silent=!0,i&&i.fadeLabel){var l=o.getTextContent();l&&D1(l,{style:{opacity:0}},r,{dataIndex:a,removeOpt:s,cb:function(){o.removeTextContent()}})}else o.removeTextContent();D1(o,{style:{opacity:0},scaleX:0,scaleY:0},r,{dataIndex:a,cb:n,removeOpt:s})},t.getSymbolSize=function(n,r){return Ipe(n.getItemVisual(r,"symbolSize"))},t}(pi);function Ope(e,t){this.parent.drift(e,t)}function RT(e,t,n,r){return t&&!isNaN(t[0])&&!isNaN(t[1])&&!(r.isIgnore&&r.isIgnore(n))&&!(r.clipShape&&!r.clipShape.contain(t[0],t[1]))&&e.getItemVisual(n,"symbol")!=="none"}function Nk(e){return e!=null&&!Ct(e)&&(e={isIgnore:e}),e||{}}function kk(e){var t=e.hostModel,n=t.getModel("emphasis");return{emphasisItemStyle:n.getModel("itemStyle").getItemStyle(),blurItemStyle:t.getModel(["blur","itemStyle"]).getItemStyle(),selectItemStyle:t.getModel(["select","itemStyle"]).getItemStyle(),focus:n.get("focus"),blurScope:n.get("blurScope"),emphasisDisabled:n.get("disabled"),hoverScale:n.get("scale"),labelStatesModels:LR(t),cursorStyle:t.get("cursor")}}var Dpe=function(){function e(t){this.group=new pi,this._SymbolCtor=t||jR}return e.prototype.updateData=function(t,n){this._progressiveEls=null,n=Nk(n);var r=this.group,i=t.hostModel,o=this._data,a=this._SymbolCtor,s=n.disableAnimation,l=kk(t),u={disableAnimation:s},c=n.getSymbolPoint||function(f){return t.getItemLayout(f)};o||r.removeAll(),t.diff(o).add(function(f){var d=c(f);if(RT(t,d,f,n)){var h=new a(t,f,l,u);h.setPosition(d),t.setItemGraphicEl(f,h),r.add(h)}}).update(function(f,d){var h=o.getItemGraphicEl(d),v=c(f);if(!RT(t,v,f,n)){r.remove(h);return}var m=t.getItemVisual(f,"symbol")||"circle",y=h&&h.getSymbolType&&h.getSymbolType();if(!h||y&&y!==m)r.remove(h),h=new a(t,f,l,u),h.setPosition(v);else{h.updateData(t,f,l,u);var _={x:v[0],y:v[1]};s?h.attr(_):Ru(h,_,i)}r.add(h),t.setItemGraphicEl(f,h)}).remove(function(f){var d=o.getItemGraphicEl(f);d&&d.fadeOut(function(){r.remove(d)},i)}).execute(),this._getSymbolPoint=c,this._data=t},e.prototype.updateLayout=function(){var t=this,n=this._data;n&&n.eachItemGraphicEl(function(r,i){var o=t._getSymbolPoint(i);r.setPosition(o),r.markRedraw()})},e.prototype.incrementalPrepareUpdate=function(t){this._seriesScope=kk(t),this._data=null,this.group.removeAll()},e.prototype.incrementalUpdate=function(t,n,r){this._progressiveEls=[],r=Nk(r);function i(l){l.isGroup||(l.incremental=!0,l.ensureState("emphasis").hoverLayer=!0)}for(var o=t.start;o0?n=r[0]:r[1]<0&&(n=r[1]),n}function VH(e,t,n,r){var i=NaN;e.stacked&&(i=n.get(n.getCalculationInfo("stackedOverDimension"),r)),isNaN(i)&&(i=e.valueStart);var o=e.baseDataOffset,a=[];return a[o]=n.get(e.baseDim,r),a[1-o]=i,t.dataToPoint(a)}var UH=typeof Float32Array<"u",Lpe=UH?Float32Array:Array;function Rd(e){return lt(e)?UH?new Float32Array(e):e:new Lpe(e)}function Npe(e,t){var n=[];return t.diff(e).add(function(r){n.push({cmd:"+",idx:r})}).update(function(r,i){n.push({cmd:"=",idx:i,idx1:r})}).remove(function(r){n.push({cmd:"-",idx:r})}).execute(),n}function kpe(e,t,n,r,i,o,a,s){for(var l=Npe(e,t),u=[],c=[],f=[],d=[],h=[],v=[],m=[],y=BH(i,t,a),_=e.getLayout("points")||[],b=t.getLayout("points")||[],w=0;w=i||m<0)break;if(of(_,b)){if(l){m+=o;continue}break}if(m===n)e[o>0?"moveTo":"lineTo"](_,b),f=_,d=b;else{var w=_-u,S=b-c;if(w*w+S*S<.5){m+=o;continue}if(a>0){for(var C=m+o,T=t[C*2],A=t[C*2+1];T===_&&A===b&&y=r||of(T,A))h=_,v=b;else{R=T-u,O=A-c;var F=_-u,z=T-_,B=b-c,Y=A-b,j=void 0,se=void 0;if(s==="x"){j=Math.abs(F),se=Math.abs(z);var ge=R>0?1:-1;h=_-ge*j*a,v=b,M=_+ge*se*a,$=b}else if(s==="y"){j=Math.abs(B),se=Math.abs(Y);var ve=O>0?1:-1;h=_,v=b-ve*j*a,M=_,$=b+ve*se*a}else j=Math.sqrt(F*F+B*B),se=Math.sqrt(z*z+Y*Y),I=se/(se+j),h=_-R*a*(1-I),v=b-O*a*(1-I),M=_+R*a*I,$=b+O*a*I,M=Ul(M,Hl(T,_)),$=Ul($,Hl(A,b)),M=Hl(M,Ul(T,_)),$=Hl($,Ul(A,b)),R=M-_,O=$-b,h=_-R*j/se,v=b-O*j/se,h=Ul(h,Hl(u,_)),v=Ul(v,Hl(c,b)),h=Hl(h,Ul(u,_)),v=Hl(v,Ul(c,b)),R=_-h,O=b-v,M=_+R*se/j,$=b+O*se/j}e.bezierCurveTo(f,d,h,v,_,b),f=M,d=$}else e.lineTo(_,b)}u=_,c=b,m+=o}return y}var HH=function(){function e(){this.smooth=0,this.smoothConstraint=!0}return e}(),Fpe=function(e){ot(t,e);function t(n){var r=e.call(this,n)||this;return r.type="ec-polyline",r}return t.prototype.getDefaultStyle=function(){return{stroke:"#000",fill:null}},t.prototype.getDefaultShape=function(){return new HH},t.prototype.buildPath=function(n,r){var i=r.points,o=0,a=i.length/2;if(r.connectNulls){for(;a>0&&of(i[a*2-2],i[a*2-1]);a--);for(;o=0){var S=u?(v-l)*w+l:(h-s)*w+s;return u?[n,S]:[S,n]}s=h,l=v;break;case a.C:h=o[f++],v=o[f++],m=o[f++],y=o[f++],_=o[f++],b=o[f++];var C=u?S1(s,h,m,_,n,c):S1(l,v,y,b,n,c);if(C>0)for(var T=0;T=0){var S=u?Hr(l,v,y,b,A):Hr(s,h,m,_,A);return u?[n,S]:[S,n]}}s=_,l=b;break}}},t}(Ln),$pe=function(e){ot(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t}(HH),Bpe=function(e){ot(t,e);function t(n){var r=e.call(this,n)||this;return r.type="ec-polygon",r}return t.prototype.getDefaultShape=function(){return new $pe},t.prototype.buildPath=function(n,r){var i=r.points,o=r.stackedOnPoints,a=0,s=i.length/2,l=r.smoothMonotone;if(r.connectNulls){for(;s>0&&of(i[s*2-2],i[s*2-1]);s--);for(;at){o?n.push(a(o,l,t)):i&&n.push(a(i,l,0),a(i,l,t));break}else i&&(n.push(a(i,l,0)),i=null),n.push(l),o=l}return n}function Kpe(e,t,n){var r=e.getVisual("visualMeta");if(!(!r||!r.length||!e.count())&&t.type==="cartesian2d"){for(var i,o,a=r.length-1;a>=0;a--){var s=e.getDimensionInfo(r[a].dimension);if(i=s&&s.coordDim,i==="x"||i==="y"){o=r[a];break}}if(o){var l=t.getAxis(i),u=Rt(o.stops,function(w){return{coord:l.toGlobalCoord(l.dataToCoord(w.value)),color:w.color}}),c=u.length,f=o.outerColors.slice();c&&u[0].coord>u[c-1].coord&&(u.reverse(),f.reverse());var d=Xpe(u,i==="x"?n.getWidth():n.getHeight()),h=d.length;if(!h&&c)return u[0].coord<0?f[1]?f[1]:u[c-1].color:f[0]?f[0]:u[0].color;var v=10,m=d[0].coord-v,y=d[h-1].coord+v,_=y-m;if(_<.001)return"transparent";Q(d,function(w){w.offset=(w.coord-m)/_}),d.push({offset:h?d[h-1].offset:.5,color:f[1]||"transparent"}),d.unshift({offset:h?d[0].offset:.5,color:f[0]||"transparent"});var b=new AR(0,0,0,0,d,!0);return b[i]=m,b[i+"2"]=y,b}}}function Zpe(e,t,n){var r=e.get("showAllSymbol"),i=r==="auto";if(!(r&&!i)){var o=n.getAxesByScale("ordinal")[0];if(o&&!(i&&qpe(o,t))){var a=t.mapDimension(o.dim),s={};return Q(o.getViewLabels(),function(l){var u=o.scale.getRawOrdinalNumber(l.tickValue);s[u]=1}),function(l){return!s.hasOwnProperty(t.get(a,l))}}}}function qpe(e,t){var n=e.getExtent(),r=Math.abs(n[1]-n[0])/e.scale.count();isNaN(r)&&(r=0);for(var i=t.count(),o=Math.max(1,Math.round(i/5)),a=0;ar)return!1;return!0}function Jpe(e,t){return isNaN(e)||isNaN(t)}function Qpe(e){for(var t=e.length/2;t>0&&Jpe(e[t*2-2],e[t*2-1]);t--);return t-1}function Gk(e,t){return[e[t*2],e[t*2+1]]}function eve(e,t,n){for(var r=e.length/2,i=n==="x"?0:1,o,a,s=0,l=-1,u=0;u=t||o>=t&&a<=t){l=u;break}s=u,o=a}return{range:[s,l],t:(t-o)/(a-o)}}function WH(e){if(e.get(["endLabel","show"]))return!0;for(var t=0;t0&&n.get(["emphasis","lineStyle","width"])==="bolder"){var se=v.getState("emphasis").style;se.lineWidth=+v.style.lineWidth+1}Mn(v).seriesIndex=n.seriesIndex,ZE(v,B,Y,j);var ge=Hk(n.get("smooth")),ve=n.get("smoothMonotone");if(v.setShape({smooth:ge,smoothMonotone:ve,connectNulls:A}),m){var De=s.getCalculationInfo("stackedOnSeries"),Ne=0;m.useStyle(En(u.getAreaStyle(),{fill:M,opacity:.7,lineJoin:"bevel",decal:s.getVisual("style").decal})),De&&(Ne=Hk(De.get("smooth"))),m.setShape({smooth:ge,stackedOnSmooth:Ne,smoothMonotone:ve,connectNulls:A}),XN(m,n,"areaStyle"),Mn(m).seriesIndex=n.seriesIndex,ZE(m,B,Y,j)}var ze=this._changePolyState;s.eachItemGraphicEl(function(Me){Me&&(Me.onHoverStateChange=ze)}),this._polyline.onHoverStateChange=ze,this._data=s,this._coordSys=o,this._stackedOnPoints=C,this._points=c,this._step=R,this._valueOrigin=w,n.get("triggerLineEvent")&&(this.packEventData(n,v),m&&this.packEventData(n,m))},t.prototype.packEventData=function(n,r){Mn(r).eventData={componentType:"series",componentSubType:"line",componentIndex:n.componentIndex,seriesIndex:n.seriesIndex,seriesName:n.name,seriesType:"line"}},t.prototype.highlight=function(n,r,i,o){var a=n.getData(),s=yf(a,o);if(this._changePolyState("emphasis"),!(s instanceof Array)&&s!=null&&s>=0){var l=a.getLayout("points"),u=a.getItemGraphicEl(s);if(!u){var c=l[s*2],f=l[s*2+1];if(isNaN(c)||isNaN(f)||this._clipShapeForSymbol&&!this._clipShapeForSymbol.contain(c,f))return;var d=n.get("zlevel")||0,h=n.get("z")||0;u=new jR(a,s),u.x=c,u.y=f,u.setZ(d,h);var v=u.getSymbolPath().getTextContent();v&&(v.zlevel=d,v.z=h,v.z2=this._polyline.z2+1),u.__temp=!0,a.setItemGraphicEl(s,u),u.stopSymbolAnimation(!0),this.group.add(u)}u.highlight()}else os.prototype.highlight.call(this,n,r,i,o)},t.prototype.downplay=function(n,r,i,o){var a=n.getData(),s=yf(a,o);if(this._changePolyState("normal"),s!=null&&s>=0){var l=a.getItemGraphicEl(s);l&&(l.__temp?(a.setItemGraphicEl(s,null),this.group.remove(l)):l.downplay())}else os.prototype.downplay.call(this,n,r,i,o)},t.prototype._changePolyState=function(n){var r=this._polygon;GN(this._polyline,n),r&&GN(r,n)},t.prototype._newPolyline=function(n){var r=this._polyline;return r&&this._lineGroup.remove(r),r=new Fpe({shape:{points:n},segmentIgnoreThreshold:2,z2:10}),this._lineGroup.add(r),this._polyline=r,r},t.prototype._newPolygon=function(n,r){var i=this._polygon;return i&&this._lineGroup.remove(i),i=new Bpe({shape:{points:n,stackedOnPoints:r},segmentIgnoreThreshold:2}),this._lineGroup.add(i),this._polygon=i,i},t.prototype._initSymbolLabelAnimation=function(n,r,i){var o,a,s=r.getBaseAxis(),l=s.inverse;r.type==="cartesian2d"?(o=s.isHorizontal(),a=!1):r.type==="polar"&&(o=s.dim==="angle",a=!0);var u=n.hostModel,c=u.get("animationDuration");Vt(c)&&(c=c(null));var f=u.get("animationDelay")||0,d=Vt(f)?f(null):f;n.eachItemGraphicEl(function(h,v){var m=h;if(m){var y=[h.x,h.y],_=void 0,b=void 0,w=void 0;if(i)if(a){var S=i,C=r.pointToCoord(y);o?(_=S.startAngle,b=S.endAngle,w=-C[1]/180*Math.PI):(_=S.r0,b=S.r,w=C[0])}else{var T=i;o?(_=T.x,b=T.x+T.width,w=h.x):(_=T.y+T.height,b=T.y,w=h.y)}var A=b===_?0:(w-_)/(b-_);l&&(A=1-A);var P=Vt(f)?f(v):c*A+d,I=m.getSymbolPath(),R=I.getTextContent();m.attr({scaleX:0,scaleY:0}),m.animateTo({scaleX:1,scaleY:1},{duration:200,setToFinal:!0,delay:P}),R&&R.animateFrom({style:{opacity:0}},{duration:300,delay:P}),I.disableLabelAnimation=!0}})},t.prototype._initOrUpdateEndLabel=function(n,r,i){var o=n.getModel("endLabel");if(WH(n)){var a=n.getData(),s=this._polyline,l=a.getLayout("points");if(!l){s.removeTextContent(),this._endLabel=null;return}var u=this._endLabel;u||(u=this._endLabel=new ao({z2:200}),u.ignoreClip=!0,s.setTextContent(this._endLabel),s.disableLabelAnimation=!0);var c=Qpe(l);c>=0&&(MR(s,LR(n,"endLabel"),{inheritColor:i,labelFetcher:n,labelDataIndex:c,defaultText:function(f,d,h){return h!=null?Ppe(a,h):$H(a,f)},enableTextSetter:!0},tve(o,r)),s.textConfig.position=null)}else this._endLabel&&(this._polyline.removeTextContent(),this._endLabel=null)},t.prototype._endLabelOnDuring=function(n,r,i,o,a,s,l){var u=this._endLabel,c=this._polyline;if(u){n<1&&o.originalX==null&&(o.originalX=u.x,o.originalY=u.y);var f=i.getLayout("points"),d=i.hostModel,h=d.get("connectNulls"),v=s.get("precision"),m=s.get("distance")||0,y=l.getBaseAxis(),_=y.isHorizontal(),b=y.inverse,w=r.shape,S=b?_?w.x:w.y+w.height:_?w.x+w.width:w.y,C=(_?m:0)*(b?-1:1),T=(_?0:-m)*(b?-1:1),A=_?"x":"y",P=eve(f,S,A),I=P.range,R=I[1]-I[0],O=void 0;if(R>=1){if(R>1&&!h){var M=Gk(f,I[0]);u.attr({x:M[0]+C,y:M[1]+T}),a&&(O=d.getRawValue(I[0]))}else{var M=c.getPointOn(S,A);M&&u.attr({x:M[0]+C,y:M[1]+T});var $=d.getRawValue(I[0]),F=d.getRawValue(I[1]);a&&(O=ife(i,v,$,F,P.t))}o.lastFrameIndex=I[0]}else{var z=n===1||o.lastFrameIndex>0?I[0]:0,M=Gk(f,z);a&&(O=d.getRawValue(z)),u.attr({x:M[0]+C,y:M[1]+T})}if(a){var B=XU(u);typeof B.setLabelText=="function"&&B.setLabelText(O)}}},t.prototype._doUpdateAnimation=function(n,r,i,o,a,s,l){var u=this._polyline,c=this._polygon,f=n.hostModel,d=kpe(this._data,n,this._stackedOnPoints,r,this._coordSys,i,this._valueOrigin),h=d.current,v=d.stackedOnCurrent,m=d.next,y=d.stackedOnNext;if(a&&(v=Gl(d.stackedOnCurrent,d.current,i,a,l),h=Gl(d.current,null,i,a,l),y=Gl(d.stackedOnNext,d.next,i,a,l),m=Gl(d.next,null,i,a,l)),Uk(h,m)>3e3||c&&Uk(v,y)>3e3){u.stopAnimation(),u.setShape({points:m}),c&&(c.stopAnimation(),c.setShape({points:m,stackedOnPoints:y}));return}u.shape.__points=d.current,u.shape.points=h;var _={shape:{points:m}};d.current!==h&&(_.shape.__points=d.next),u.stopAnimation(),Ru(u,_,f),c&&(c.setShape({points:h,stackedOnPoints:v}),c.stopAnimation(),Ru(c,{shape:{stackedOnPoints:y}},f),u.shape.points!==c.shape.points&&(c.shape.points=u.shape.points));for(var b=[],w=d.status,S=0;St&&(t=e[n]);return isFinite(t)?t:NaN},min:function(e){for(var t=1/0,n=0;n10&&a.type==="cartesian2d"&&o){var l=a.getBaseAxis(),u=a.getOtherAxis(l),c=l.getExtent(),f=r.getDevicePixelRatio(),d=Math.abs(c[1]-c[0])*(f||1),h=Math.round(s/d);if(isFinite(h)&&h>1){o==="lttb"?t.setData(i.lttbDownSample(i.mapDimension(u.dim),1/h)):o==="minmax"&&t.setData(i.minmaxDownSample(i.mapDimension(u.dim),1/h));var v=void 0;dt(o)?v=ive[o]:Vt(o)&&(v=o),v&&t.setData(i.downSample(i.mapDimension(u.dim),1/h,v,ove))}}}}}function sve(e){e.registerChartView(nve),e.registerSeriesModel(Rpe),e.registerLayout(rve("line")),e.registerVisual({seriesType:"line",reset:function(t){var n=t.getData(),r=t.getModel("lineStyle").getLineStyle();r&&!r.stroke&&(r.stroke=n.getVisual("style").fill),n.setVisual("legendLineStyle",r)}}),e.registerProcessor(e.PRIORITY.PROCESSOR.STATISTIC,ave("line"))}var lve="__ec_stack_";function uve(e){return e.get("stack")||lve+e.seriesIndex}function jH(e){return e.dim+e.index}function cve(e,t){var n=[];return t.eachSeriesByType(e,function(r){vve(r)&&n.push(r)}),n}function fve(e){var t={};Q(e,function(l){var u=l.coordinateSystem,c=u.getBaseAxis();if(!(c.type!=="time"&&c.type!=="value"))for(var f=l.getData(),d=c.dim+"_"+c.index,h=f.getDimensionIndex(f.mapDimension(c.dim)),v=f.getStore(),m=0,y=v.count();m0&&(o=o===null?s:Math.min(o,s))}n[r]=o}}return n}function dve(e){var t=fve(e),n=[];return Q(e,function(r){var i=r.coordinateSystem,o=i.getBaseAxis(),a=o.getExtent(),s;if(o.type==="category")s=o.getBandWidth();else if(o.type==="value"||o.type==="time"){var l=o.dim+"_"+o.index,u=t[l],c=Math.abs(a[1]-a[0]),f=o.scale.getExtent(),d=Math.abs(f[1]-f[0]);s=u?c/d*u:c}else{var h=r.getData();s=Math.abs(a[1]-a[0])/h.count()}var v=Ci(r.get("barWidth"),s),m=Ci(r.get("barMaxWidth"),s),y=Ci(r.get("barMinWidth")||(gve(r)?.5:1),s),_=r.get("barGap"),b=r.get("barCategoryGap");n.push({bandWidth:s,barWidth:v,barMaxWidth:m,barMinWidth:y,barGap:_,barCategoryGap:b,axisKey:jH(o),stackId:uve(r)})}),hve(n)}function hve(e){var t={};Q(e,function(r,i){var o=r.axisKey,a=r.bandWidth,s=t[o]||{bandWidth:a,remainedWidth:a,autoWidthCount:0,categoryGap:null,gap:"20%",stacks:{}},l=s.stacks;t[o]=s;var u=r.stackId;l[u]||s.autoWidthCount++,l[u]=l[u]||{width:0,maxWidth:0};var c=r.barWidth;c&&!l[u].width&&(l[u].width=c,c=Math.min(s.remainedWidth,c),s.remainedWidth-=c);var f=r.barMaxWidth;f&&(l[u].maxWidth=f);var d=r.barMinWidth;d&&(l[u].minWidth=d);var h=r.barGap;h!=null&&(s.gap=h);var v=r.barCategoryGap;v!=null&&(s.categoryGap=v)});var n={};return Q(t,function(r,i){n[i]={};var o=r.stacks,a=r.bandWidth,s=r.categoryGap;if(s==null){var l=Kn(o).length;s=Math.max(35-l*4,15)+"%"}var u=Ci(s,a),c=Ci(r.gap,1),f=r.remainedWidth,d=r.autoWidthCount,h=(f-u)/(d+(d-1)*c);h=Math.max(h,0),Q(o,function(_){var b=_.maxWidth,w=_.minWidth;if(_.width){var S=_.width;b&&(S=Math.min(S,b)),w&&(S=Math.max(S,w)),_.width=S,f-=S+c*S,d--}else{var S=h;b&&bS&&(S=w),S!==h&&(_.width=S,f-=S+c*S,d--)}}),h=(f-u)/(d+(d-1)*c),h=Math.max(h,0);var v=0,m;Q(o,function(_,b){_.width||(_.width=h),m=_,v+=_.width*(1+c)}),m&&(v-=m.width*c);var y=-v/2;Q(o,function(_,b){n[i][b]=n[i][b]||{bandWidth:a,offset:y,width:_.width},y+=_.width*(1+c)})}),n}function pve(e,t,n){if(e&&t){var r=e[jH(t)];return r}}function vve(e){return e.coordinateSystem&&e.coordinateSystem.type==="cartesian2d"}function gve(e){return e.pipelineContext&&e.pipelineContext.large}var F1="\0__throttleOriginMethod",zk="\0__throttleRate",Wk="\0__throttleType";function YH(e,t,n){var r,i=0,o=0,a=null,s,l,u,c;t=t||0;function f(){o=new Date().getTime(),a=null,e.apply(l,u||[])}var d=function(){for(var h=[],v=0;v=0?f():a=setTimeout(f,-s),i=r};return d.clear=function(){a&&(clearTimeout(a),a=null)},d.debounceNextCall=function(h){c=h},d}function XH(e,t,n,r){var i=e[t];if(i){var o=i[F1]||i,a=i[Wk],s=i[zk];if(s!==n||a!==r){if(n==null||!r)return e[t]=o;i=e[t]=YH(o,n,r==="debounce"),i[F1]=o,i[Wk]=r,i[zk]=n}return i}}function fA(e,t){var n=e[t];n&&n[F1]&&(n.clear&&n.clear(),e[t]=n[F1])}function od(e,t,n,r,i){var o=e+t;n.isSilent(o)||r.eachComponent({mainType:"series",subType:"pie"},function(a){for(var s=a.seriesIndex,l=a.option.selectedMap,u=i.selected,c=0;c=0;if(i){var a=r!=="touchend"?t.targetTouches[0]:t.changedTouches[0];a&&dA(e,a,t,n)}else{dA(e,t,t,n);var o=xve(t);t.zrDelta=o?o/120:-(t.detail||0)/3}var s=t.button;return t.which==null&&s!==void 0&&Sve.test(t.type)&&(t.which=s&1?1:s&2?3:s&4?2:0),t}function xve(e){var t=e.wheelDelta;if(t)return t;var n=e.deltaX,r=e.deltaY;if(n==null||r==null)return t;var i=Math.abs(r!==0?r:n),o=r>0?-1:r<0?1:n>0?-1:1;return 3*i*o}function Tve(e,t,n,r){e.addEventListener(t,n,r)}function Cve(e,t,n,r){e.removeEventListener(t,n,r)}var KH=function(e){e.preventDefault(),e.stopPropagation(),e.cancelBubble=!0},Eve=function(){function e(){this._track=[]}return e.prototype.recognize=function(t,n,r){return this._doTrack(t,n,r),this._recognize(t)},e.prototype.clear=function(){return this._track.length=0,this},e.prototype._doTrack=function(t,n,r){var i=t.touches;if(i){for(var o={points:[],touches:[],target:n,event:t},a=0,s=i.length;a1&&r&&r.length>1){var o=Yk(r)/Yk(i);!isFinite(o)&&(o=1),t.pinchScale=o;var a=Ave(r);return t.pinchX=a[0],t.pinchY=a[1],{type:"pinch",target:e[0].target,event:t}}}}},ZH="silent";function Ive(e,t,n){return{type:e,event:n,target:t.target,topTarget:t.topTarget,cancelBubble:!1,offsetX:n.zrX,offsetY:n.zrY,gestureEvent:n.gestureEvent,pinchX:n.pinchX,pinchY:n.pinchY,pinchScale:n.pinchScale,wheelDelta:n.zrDelta,zrByTouch:n.zrByTouch,which:n.which,stop:Rve}}function Rve(){KH(this.event)}var Pve=function(e){ot(t,e);function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.handler=null,n}return t.prototype.dispose=function(){},t.prototype.setCursor=function(){},t}(ys),bp=function(){function e(t,n){this.x=t,this.y=n}return e}(),Ove=["click","dblclick","mousewheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],MT=new bn(0,0,0,0),qH=function(e){ot(t,e);function t(n,r,i,o,a){var s=e.call(this)||this;return s._hovered=new bp(0,0),s.storage=n,s.painter=r,s.painterRoot=o,s._pointerSize=a,i=i||new Pve,s.proxy=null,s.setHandlerProxy(i),s._draggingMgr=new bve(s),s}return t.prototype.setHandlerProxy=function(n){this.proxy&&this.proxy.dispose(),n&&(Q(Ove,function(r){n.on&&n.on(r,this[r],this)},this),n.handler=this),this.proxy=n},t.prototype.mousemove=function(n){var r=n.zrX,i=n.zrY,o=JH(this,r,i),a=this._hovered,s=a.target;s&&!s.__zr&&(a=this.findHover(a.x,a.y),s=a.target);var l=this._hovered=o?new bp(r,i):this.findHover(r,i),u=l.target,c=this.proxy;c.setCursor&&c.setCursor(u?u.cursor:"default"),s&&u!==s&&this.dispatchToElement(a,"mouseout",n),this.dispatchToElement(l,"mousemove",n),u&&u!==s&&this.dispatchToElement(l,"mouseover",n)},t.prototype.mouseout=function(n){var r=n.zrEventControl;r!=="only_globalout"&&this.dispatchToElement(this._hovered,"mouseout",n),r!=="no_globalout"&&this.trigger("globalout",{type:"globalout",event:n})},t.prototype.resize=function(){this._hovered=new bp(0,0)},t.prototype.dispatch=function(n,r){var i=this[n];i&&i.call(this,r)},t.prototype.dispose=function(){this.proxy.dispose(),this.storage=null,this.proxy=null,this.painter=null},t.prototype.setCursorStyle=function(n){var r=this.proxy;r.setCursor&&r.setCursor(n)},t.prototype.dispatchToElement=function(n,r,i){n=n||{};var o=n.target;if(!(o&&o.silent)){for(var a="on"+r,s=Ive(r,n,i);o&&(o[a]&&(s.cancelBubble=!!o[a].call(o,s)),o.trigger(r,s),o=o.__hostTarget?o.__hostTarget:o.parent,!s.cancelBubble););s.cancelBubble||(this.trigger(r,s),this.painter&&this.painter.eachOtherLayer&&this.painter.eachOtherLayer(function(l){typeof l[a]=="function"&&l[a].call(l,s),l.trigger&&l.trigger(r,s)}))}},t.prototype.findHover=function(n,r,i){var o=this.storage.getDisplayList(),a=new bp(n,r);if(Xk(o,a,n,r,i),this._pointerSize&&!a.target){for(var s=[],l=this._pointerSize,u=l/2,c=new bn(n-u,r-u,l,l),f=o.length-1;f>=0;f--){var d=o[f];d!==i&&!d.ignore&&!d.ignoreCoarsePointer&&(!d.parent||!d.parent.ignoreCoarsePointer)&&(MT.copy(d.getBoundingRect()),d.transform&&MT.applyTransform(d.transform),MT.intersect(c)&&s.push(d))}if(s.length)for(var h=4,v=Math.PI/12,m=Math.PI*2,y=0;y4)return;this._downPoint=null}this.dispatchToElement(o,e,t)}});function Dve(e,t,n){if(e[e.rectHover?"rectContain":"contain"](t,n)){for(var r=e,i=void 0,o=!1;r;){if(r.ignoreClip&&(o=!0),!o){var a=r.getClipPath();if(a&&!a.contain(t,n))return!1}r.silent&&(i=!0);var s=r.__hostTarget;r=s||r.parent}return i?ZH:!0}return!1}function Xk(e,t,n,r,i){for(var o=e.length-1;o>=0;o--){var a=e[o],s=void 0;if(a!==i&&!a.ignore&&(s=Dve(a,n,r))&&(!t.topTarget&&(t.topTarget=a),s!==ZH)){t.target=a;break}}}function JH(e,t,n){var r=e.painter;return t<0||t>r.getWidth()||n<0||n>r.getHeight()}var QH=32,Sp=7;function Mve(e){for(var t=0;e>=QH;)t|=e&1,e>>=1;return e+t}function Kk(e,t,n,r){var i=t+1;if(i===n)return 1;if(r(e[i++],e[t])<0){for(;i=0;)i++;return i-t}function Lve(e,t,n){for(n--;t>>1,i(o,e[l])<0?s=l:a=l+1;var u=r-a;switch(u){case 3:e[a+3]=e[a+2];case 2:e[a+2]=e[a+1];case 1:e[a+1]=e[a];break;default:for(;u>0;)e[a+u]=e[a+u-1],u--}e[a]=o}}function LT(e,t,n,r,i,o){var a=0,s=0,l=1;if(o(e,t[n+i])>0){for(s=r-i;l0;)a=l,l=(l<<1)+1,l<=0&&(l=s);l>s&&(l=s),a+=i,l+=i}else{for(s=i+1;ls&&(l=s);var u=a;a=i-l,l=i-u}for(a++;a>>1);o(e,t[n+c])>0?a=c+1:l=c}return l}function NT(e,t,n,r,i,o){var a=0,s=0,l=1;if(o(e,t[n+i])<0){for(s=i+1;ls&&(l=s);var u=a;a=i-l,l=i-u}else{for(s=r-i;l=0;)a=l,l=(l<<1)+1,l<=0&&(l=s);l>s&&(l=s),a+=i,l+=i}for(a++;a>>1);o(e,t[n+c])<0?l=c:a=c+1}return l}function Nve(e,t){var n=Sp,r,i,o=0,a=[];r=[],i=[];function s(h,v){r[o]=h,i[o]=v,o+=1}function l(){for(;o>1;){var h=o-2;if(h>=1&&i[h-1]<=i[h]+i[h+1]||h>=2&&i[h-2]<=i[h]+i[h-1])i[h-1]i[h+1])break;c(h)}}function u(){for(;o>1;){var h=o-2;h>0&&i[h-1]=Sp||A>=Sp);if(P)break;C<0&&(C=0),C+=2}if(n=C,n<1&&(n=1),v===1){for(_=0;_=0;_--)e[T+_]=e[C+_];e[S]=a[w];return}for(var A=n;;){var P=0,I=0,R=!1;do if(t(a[w],e[b])<0){if(e[S--]=e[b--],P++,I=0,--v===0){R=!0;break}}else if(e[S--]=a[w--],I++,P=0,--y===1){R=!0;break}while((P|I)=0;_--)e[T+_]=e[C+_];if(v===0){R=!0;break}}if(e[S--]=a[w--],--y===1){R=!0;break}if(I=y-LT(e[b],a,0,y,y-1,t),I!==0){for(S-=I,w-=I,y-=I,T=S+1,C=w+1,_=0;_=Sp||I>=Sp);if(R)break;A<0&&(A=0),A+=2}if(n=A,n<1&&(n=1),y===1){for(S-=v,b-=v,T=S+1,C=b+1,_=v-1;_>=0;_--)e[T+_]=e[C+_];e[S]=a[w]}else{if(y===0)throw new Error;for(C=S-(y-1),_=0;_s&&(l=s),Zk(e,n,n+l,n+o,t),o=l}a.pushRun(n,o),a.mergeRuns(),i-=o,n+=o}while(i!==0);a.forceMergeRuns()}}var qk=!1;function kT(){qk||(qk=!0,console.warn("z / z2 / zlevel of displayable is invalid, which may cause unexpected errors"))}function Jk(e,t){return e.zlevel===t.zlevel?e.z===t.z?e.z2-t.z2:e.z-t.z:e.zlevel-t.zlevel}var kve=function(){function e(){this._roots=[],this._displayList=[],this._displayListLen=0,this.displayableSortFunc=Jk}return e.prototype.traverse=function(t,n){for(var r=0;r0&&(c.__clipPaths=[]),isNaN(c.z)&&(kT(),c.z=0),isNaN(c.z2)&&(kT(),c.z2=0),isNaN(c.zlevel)&&(kT(),c.zlevel=0),this._displayList[this._displayListLen++]=c}var f=t.getDecalElement&&t.getDecalElement();f&&this._updateAndAddDisplayable(f,n,r);var d=t.getTextGuideLine();d&&this._updateAndAddDisplayable(d,n,r);var h=t.getTextContent();h&&this._updateAndAddDisplayable(h,n,r)}},e.prototype.addRoot=function(t){t.__zr&&t.__zr.storage===this||this._roots.push(t)},e.prototype.delRoot=function(t){if(t instanceof Array){for(var n=0,r=t.length;n=0&&this._roots.splice(i,1)},e.prototype.delAllRoots=function(){this._roots=[],this._displayList=[],this._displayListLen=0},e.prototype.getRoots=function(){return this._roots},e.prototype.dispose=function(){this._displayList=null,this._roots=null},e}(),$1;$1=Dt.hasGlobalWindow&&(window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.msRequestAnimationFrame&&window.msRequestAnimationFrame.bind(window)||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame)||function(e){return setTimeout(e,16)};function Pd(){return new Date().getTime()}var Fve=function(e){ot(t,e);function t(n){var r=e.call(this)||this;return r._running=!1,r._time=0,r._pausedTime=0,r._pauseStart=0,r._paused=!1,n=n||{},r.stage=n.stage||{},r}return t.prototype.addClip=function(n){n.animation&&this.removeClip(n),this._head?(this._tail.next=n,n.prev=this._tail,n.next=null,this._tail=n):this._head=this._tail=n,n.animation=this},t.prototype.addAnimator=function(n){n.animation=this;var r=n.getClip();r&&this.addClip(r)},t.prototype.removeClip=function(n){if(n.animation){var r=n.prev,i=n.next;r?r.next=i:this._head=i,i?i.prev=r:this._tail=r,n.next=n.prev=n.animation=null}},t.prototype.removeAnimator=function(n){var r=n.getClip();r&&this.removeClip(r),n.animation=null},t.prototype.update=function(n){for(var r=Pd()-this._pausedTime,i=r-this._time,o=this._head;o;){var a=o.next,s=o.step(r,i);s&&(o.ondestroy(),this.removeClip(o)),o=a}this._time=r,n||(this.trigger("frame",i),this.stage.update&&this.stage.update())},t.prototype._startLoop=function(){var n=this;this._running=!0;function r(){n._running&&($1(r),!n._paused&&n.update())}$1(r)},t.prototype.start=function(){this._running||(this._time=Pd(),this._pausedTime=0,this._startLoop())},t.prototype.stop=function(){this._running=!1},t.prototype.pause=function(){this._paused||(this._pauseStart=Pd(),this._paused=!0)},t.prototype.resume=function(){this._paused&&(this._pausedTime+=Pd()-this._pauseStart,this._paused=!1)},t.prototype.clear=function(){for(var n=this._head;n;){var r=n.next;n.prev=n.next=n.animation=null,n=r}this._head=this._tail=null},t.prototype.isFinished=function(){return this._head==null},t.prototype.animate=function(n,r){r=r||{},this.start();var i=new pR(n,r.loop);return this.addAnimator(i),i},t}(ys),$ve=300,FT=Dt.domSupported,$T=function(){var e=["click","dblclick","mousewheel","wheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],t=["touchstart","touchend","touchmove"],n={pointerdown:1,pointerup:1,pointermove:1,pointerout:1},r=Rt(e,function(i){var o=i.replace("mouse","pointer");return n.hasOwnProperty(o)?o:i});return{mouse:e,touch:t,pointer:r}}(),Qk={mouse:["mousemove","mouseup"],pointer:["pointermove","pointerup"]},eF=!1;function hA(e){var t=e.pointerType;return t==="pen"||t==="touch"}function Bve(e){e.touching=!0,e.touchTimer!=null&&(clearTimeout(e.touchTimer),e.touchTimer=null),e.touchTimer=setTimeout(function(){e.touching=!1,e.touchTimer=null},700)}function BT(e){e&&(e.zrByTouch=!0)}function Vve(e,t){return Wo(e.dom,new Uve(e,t),!0)}function e6(e,t){for(var n=t,r=!1;n&&n.nodeType!==9&&!(r=n.domBelongToZr||n!==t&&n===e.painterRoot);)n=n.parentNode;return r}var Uve=function(){function e(t,n){this.stopPropagation=eo,this.stopImmediatePropagation=eo,this.preventDefault=eo,this.type=n.type,this.target=this.currentTarget=t.dom,this.pointerType=n.pointerType,this.clientX=n.clientX,this.clientY=n.clientY}return e}(),xa={mousedown:function(e){e=Wo(this.dom,e),this.__mayPointerCapture=[e.zrX,e.zrY],this.trigger("mousedown",e)},mousemove:function(e){e=Wo(this.dom,e);var t=this.__mayPointerCapture;t&&(e.zrX!==t[0]||e.zrY!==t[1])&&this.__togglePointerCapture(!0),this.trigger("mousemove",e)},mouseup:function(e){e=Wo(this.dom,e),this.__togglePointerCapture(!1),this.trigger("mouseup",e)},mouseout:function(e){e=Wo(this.dom,e);var t=e.toElement||e.relatedTarget;e6(this,t)||(this.__pointerCapturing&&(e.zrEventControl="no_globalout"),this.trigger("mouseout",e))},wheel:function(e){eF=!0,e=Wo(this.dom,e),this.trigger("mousewheel",e)},mousewheel:function(e){eF||(e=Wo(this.dom,e),this.trigger("mousewheel",e))},touchstart:function(e){e=Wo(this.dom,e),BT(e),this.__lastTouchMoment=new Date,this.handler.processGesture(e,"start"),xa.mousemove.call(this,e),xa.mousedown.call(this,e)},touchmove:function(e){e=Wo(this.dom,e),BT(e),this.handler.processGesture(e,"change"),xa.mousemove.call(this,e)},touchend:function(e){e=Wo(this.dom,e),BT(e),this.handler.processGesture(e,"end"),xa.mouseup.call(this,e),+new Date-+this.__lastTouchMoment<$ve&&xa.click.call(this,e)},pointerdown:function(e){xa.mousedown.call(this,e)},pointermove:function(e){hA(e)||xa.mousemove.call(this,e)},pointerup:function(e){xa.mouseup.call(this,e)},pointerout:function(e){hA(e)||xa.mouseout.call(this,e)}};Q(["click","dblclick","contextmenu"],function(e){xa[e]=function(t){t=Wo(this.dom,t),this.trigger(e,t)}});var pA={pointermove:function(e){hA(e)||pA.mousemove.call(this,e)},pointerup:function(e){pA.mouseup.call(this,e)},mousemove:function(e){this.trigger("mousemove",e)},mouseup:function(e){var t=this.__pointerCapturing;this.__togglePointerCapture(!1),this.trigger("mouseup",e),t&&(e.zrEventControl="only_globalout",this.trigger("mouseout",e))}};function Hve(e,t){var n=t.domHandlers;Dt.pointerEventsSupported?Q($T.pointer,function(r){P_(t,r,function(i){n[r].call(e,i)})}):(Dt.touchEventsSupported&&Q($T.touch,function(r){P_(t,r,function(i){n[r].call(e,i),Bve(t)})}),Q($T.mouse,function(r){P_(t,r,function(i){i=YR(i),t.touching||n[r].call(e,i)})}))}function Gve(e,t){Dt.pointerEventsSupported?Q(Qk.pointer,n):Dt.touchEventsSupported||Q(Qk.mouse,n);function n(r){function i(o){o=YR(o),e6(e,o.target)||(o=Vve(e,o),t.domHandlers[r].call(e,o))}P_(t,r,i,{capture:!0})}}function P_(e,t,n,r){e.mounted[t]=n,e.listenerOpts[t]=r,Tve(e.domTarget,t,n,r)}function VT(e){var t=e.mounted;for(var n in t)t.hasOwnProperty(n)&&Cve(e.domTarget,n,t[n],e.listenerOpts[n]);e.mounted={}}var tF=function(){function e(t,n){this.mounted={},this.listenerOpts={},this.touching=!1,this.domTarget=t,this.domHandlers=n}return e}(),zve=function(e){ot(t,e);function t(n,r){var i=e.call(this)||this;return i.__pointerCapturing=!1,i.dom=n,i.painterRoot=r,i._localHandlerScope=new tF(n,xa),FT&&(i._globalHandlerScope=new tF(document,pA)),Hve(i,i._localHandlerScope),i}return t.prototype.dispose=function(){VT(this._localHandlerScope),FT&&VT(this._globalHandlerScope)},t.prototype.setCursor=function(n){this.dom.style&&(this.dom.style.cursor=n||"default")},t.prototype.__togglePointerCapture=function(n){if(this.__mayPointerCapture=null,FT&&+this.__pointerCapturing^+n){this.__pointerCapturing=n;var r=this._globalHandlerScope;n?Gve(this,r):VT(r)}},t}(ys);/*! +* ZRender, a high performance 2d drawing library. +* +* Copyright (c) 2013, Baidu Inc. +* All rights reserved. +* +* LICENSE +* https://github.com/ecomfe/zrender/blob/master/LICENSE.txt +*/var O_={},t6={};function Wve(e){delete t6[e]}function jve(e){if(!e)return!1;if(typeof e=="string")return T1(e,1)0&&(this._stillFrameAccum++,this._stillFrameAccum>this._sleepAfterStill&&this.animation.stop())},e.prototype.setSleepAfterStill=function(t){this._sleepAfterStill=t},e.prototype.wakeUp=function(){this._disposed||(this.animation.start(),this._stillFrameAccum=0)},e.prototype.refreshHover=function(){this._needsRefreshHover=!0},e.prototype.refreshHoverImmediately=function(){this._disposed||(this._needsRefreshHover=!1,this.painter.refreshHover&&this.painter.getType()==="canvas"&&this.painter.refreshHover())},e.prototype.resize=function(t){this._disposed||(t=t||{},this.painter.resize(t.width,t.height),this.handler.resize())},e.prototype.clearAnimation=function(){this._disposed||this.animation.clear()},e.prototype.getWidth=function(){if(!this._disposed)return this.painter.getWidth()},e.prototype.getHeight=function(){if(!this._disposed)return this.painter.getHeight()},e.prototype.setCursorStyle=function(t){this._disposed||this.handler.setCursorStyle(t)},e.prototype.findHover=function(t,n){if(!this._disposed)return this.handler.findHover(t,n)},e.prototype.on=function(t,n,r){return this._disposed||this.handler.on(t,n,r),this},e.prototype.off=function(t,n){this._disposed||this.handler.off(t,n)},e.prototype.trigger=function(t,n){this._disposed||this.handler.trigger(t,n)},e.prototype.clear=function(){if(!this._disposed){for(var t=this.storage.getRoots(),n=0;n=0;l--)o[l]&&!Sg(o[l])?s=!0:(o[l]=null,!s&&a--);o.length=a,n[i]=o}}),delete n[iF],n},t.prototype.getTheme=function(){return this._theme},t.prototype.getLocaleModel=function(){return this._locale},t.prototype.setUpdatePayload=function(n){this._payload=n},t.prototype.getUpdatePayload=function(){return this._payload},t.prototype.getComponent=function(n,r){var i=this._componentsMap.get(n);if(i){var o=i[r||0];if(o)return o;if(r==null){for(var a=0;a=t:n==="max"?e<=t:e===t}function sge(e,t){return e.join(",")===t.join(",")}var ma=Q,Ag=Ct,lF=["areaStyle","lineStyle","nodeStyle","linkStyle","chordStyle","label","labelLine"];function UT(e){var t=e&&e.itemStyle;if(t)for(var n=0,r=lF.length;n=0;y--){var _=e[y];if(s||(v=_.data.rawIndexOf(_.stackedByDimension,h)),v>=0){var b=_.data.getByRawIndex(_.stackResultDimension,v);if(l==="all"||l==="positive"&&b>0||l==="negative"&&b<0||l==="samesign"&&d>=0&&b>0||l==="samesign"&&d<=0&&b<0){d=Vce(d,b),m=b;break}}}return r[0]=d,r[1]=m,r})})}var hs=function(){function e(){this.group=new pi,this.uid=pS("viewComponent")}return e.prototype.init=function(t,n){},e.prototype.render=function(t,n,r,i){},e.prototype.dispose=function(t,n){},e.prototype.updateView=function(t,n,r,i){},e.prototype.updateLayout=function(t,n,r,i){},e.prototype.updateVisual=function(t,n,r,i){},e.prototype.toggleBlurSeries=function(t,n,r){},e.prototype.eachRendered=function(t){var n=this.group;n&&n.traverse(t)},e}();sR(hs);Qb(hs);var hF=Ar(),pF={itemStyle:_g(ZU,!0),lineStyle:_g(KU,!0)},mge={lineStyle:"stroke",itemStyle:"fill"};function a6(e,t){var n=e.visualStyleMapper||pF[t];return n||(console.warn("Unknown style type '"+t+"'."),pF.itemStyle)}function s6(e,t){var n=e.visualDrawType||mge[t];return n||(console.warn("Unknown style type '"+t+"'."),"fill")}var yge={createOnAllSeries:!0,performRawSeries:!0,reset:function(e,t){var n=e.getData(),r=e.visualStyleAccessPath||"itemStyle",i=e.getModel(r),o=a6(e,r),a=o(i),s=i.getShallow("decal");s&&(n.setVisual("decal",s),s.dirty=!0);var l=s6(e,r),u=a[l],c=Vt(u)?u:null,f=a.fill==="auto"||a.stroke==="auto";if(!a[l]||c||f){var d=e.getColorFromPalette(e.name,null,t.getSeriesCount());a[l]||(a[l]=d,n.setVisual("colorFromPalette",!0)),a.fill=a.fill==="auto"||Vt(a.fill)?d:a.fill,a.stroke=a.stroke==="auto"||Vt(a.stroke)?d:a.stroke}if(n.setVisual("style",a),n.setVisual("drawType",l),!t.isSeriesFiltered(e)&&c)return n.setVisual("colorFromPalette",!1),{dataEach:function(h,v){var m=e.getDataParams(v),y=Ke({},a);y[l]=c(m),h.setItemVisual(v,"style",y)}}}},Tp=new sr,_ge={createOnAllSeries:!0,performRawSeries:!0,reset:function(e,t){if(!(e.ignoreStyleOnData||t.isSeriesFiltered(e))){var n=e.getData(),r=e.visualStyleAccessPath||"itemStyle",i=a6(e,r),o=n.getVisual("drawType");return{dataEach:n.hasItemOption?function(a,s){var l=a.getRawDataItem(s);if(l&&l[r]){Tp.option=l[r];var u=i(Tp),c=a.ensureUniqueItemVisual(s,"style");Ke(c,u),Tp.option.decal&&(a.setItemVisual(s,"decal",Tp.option.decal),Tp.option.decal.dirty=!0),o in u&&a.setItemVisual(s,"colorFromPalette",!1)}}:null}}}},bge={performRawSeries:!0,overallReset:function(e){var t=Kt();e.eachSeries(function(n){var r=n.getColorBy();if(!n.isColorBySeries()){var i=n.type+"-"+r,o=t.get(i);o||(o={},t.set(i,o)),hF(n).scope=o}}),e.eachSeries(function(n){if(!(n.isColorBySeries()||e.isSeriesFiltered(n))){var r=n.getRawData(),i={},o=n.getData(),a=hF(n).scope,s=n.visualStyleAccessPath||"itemStyle",l=s6(n,s);o.each(function(u){var c=o.getRawIndex(u);i[c]=u}),r.each(function(u){var c=i[u],f=o.getItemVisual(c,"colorFromPalette");if(f){var d=o.ensureUniqueItemVisual(c,"style"),h=r.getName(u)||u+"",v=r.count();d[l]=n.getColorFromPalette(h,a,v)}})}})}},l0=Math.PI;function Sge(e,t){t=t||{},En(t,{text:"loading",textColor:"#000",fontSize:12,fontWeight:"normal",fontStyle:"normal",fontFamily:"sans-serif",maskColor:"rgba(255, 255, 255, 0.8)",showSpinner:!0,color:"#5470c6",spinnerRadius:10,lineWidth:5,zlevel:0});var n=new pi,r=new zr({style:{fill:t.maskColor},zlevel:t.zlevel,z:1e4});n.add(r);var i=new ao({style:{text:t.text,fill:t.textColor,fontSize:t.fontSize,fontWeight:t.fontWeight,fontStyle:t.fontStyle,fontFamily:t.fontFamily},zlevel:t.zlevel,z:10001}),o=new zr({style:{fill:"none"},textContent:i,textConfig:{position:"right",distance:10},zlevel:t.zlevel,z:10001});n.add(o);var a;return t.showSpinner&&(a=new uS({shape:{startAngle:-l0/2,endAngle:-l0/2+.1,r:t.spinnerRadius},style:{stroke:t.color,lineCap:"round",lineWidth:t.lineWidth},zlevel:t.zlevel,z:10001}),a.animateShape(!0).when(1e3,{endAngle:l0*3/2}).start("circularInOut"),a.animateShape(!0).when(1e3,{startAngle:l0*3/2}).delay(300).start("circularInOut"),n.add(a)),n.resize=function(){var s=i.getBoundingRect().width,l=t.showSpinner?t.spinnerRadius:0,u=(e.getWidth()-l*2-(t.showSpinner&&s?10:0)-s)/2-(t.showSpinner&&s?0:5+s/2)+(t.showSpinner?0:s/2)+(s?0:l),c=e.getHeight()/2;t.showSpinner&&a.setShape({cx:u,cy:c}),o.setShape({x:u-l,y:c-l,width:l*2,height:l*2}),r.setShape({x:0,y:0,width:e.getWidth(),height:e.getHeight()})},n.resize(),n}var l6=function(){function e(t,n,r,i){this._stageTaskMap=Kt(),this.ecInstance=t,this.api=n,r=this._dataProcessorHandlers=r.slice(),i=this._visualHandlers=i.slice(),this._allHandlers=r.concat(i)}return e.prototype.restoreData=function(t,n){t.restoreData(n),this._stageTaskMap.each(function(r){var i=r.overallTask;i&&i.dirty()})},e.prototype.getPerformArgs=function(t,n){if(t.__pipeline){var r=this._pipelineMap.get(t.__pipeline.id),i=r.context,o=!n&&r.progressiveEnabled&&(!i||i.progressiveRender)&&t.__idxInPipeline>r.blockIndex,a=o?r.step:null,s=i&&i.modDataCount,l=s!=null?Math.ceil(s/a):null;return{step:a,modBy:l,modDataCount:s}}},e.prototype.getPipeline=function(t){return this._pipelineMap.get(t)},e.prototype.updateStreamModes=function(t,n){var r=this._pipelineMap.get(t.uid),i=t.getData(),o=i.count(),a=r.progressiveEnabled&&n.incrementalPrepareRender&&o>=r.threshold,s=t.get("large")&&o>=t.get("largeThreshold"),l=t.get("progressiveChunkMode")==="mod"?o:null;t.pipelineContext=r.context={progressiveRender:a,modDataCount:l,large:s}},e.prototype.restorePipelines=function(t){var n=this,r=n._pipelineMap=Kt();t.eachSeries(function(i){var o=i.getProgressive(),a=i.uid;r.set(a,{id:a,head:null,tail:null,threshold:i.getProgressiveThreshold(),progressiveEnabled:o&&!(i.preventIncremental&&i.preventIncremental()),blockIndex:-1,step:Math.round(o||700),count:0}),n._pipe(i,i.dataTask)})},e.prototype.prepareStageTasks=function(){var t=this._stageTaskMap,n=this.api.getModel(),r=this.api;Q(this._allHandlers,function(i){var o=t.get(i.uid)||t.set(i.uid,{}),a="";pl(!(i.reset&&i.overallReset),a),i.reset&&this._createSeriesStageTask(i,o,n,r),i.overallReset&&this._createOverallStageTask(i,o,n,r)},this)},e.prototype.prepareView=function(t,n,r,i){var o=t.renderTask,a=o.context;a.model=n,a.ecModel=r,a.api=i,o.__block=!t.incrementalPrepareRender,this._pipe(n,o)},e.prototype.performDataProcessorTasks=function(t,n){this._performStageTasks(this._dataProcessorHandlers,t,n,{block:!0})},e.prototype.performVisualTasks=function(t,n,r){this._performStageTasks(this._visualHandlers,t,n,r)},e.prototype._performStageTasks=function(t,n,r,i){i=i||{};var o=!1,a=this;Q(t,function(l,u){if(!(i.visualType&&i.visualType!==l.visualType)){var c=a._stageTaskMap.get(l.uid),f=c.seriesTaskMap,d=c.overallTask;if(d){var h,v=d.agentStubMap;v.each(function(y){s(i,y)&&(y.dirty(),h=!0)}),h&&d.dirty(),a.updatePayload(d,r);var m=a.getPerformArgs(d,i.block);v.each(function(y){y.perform(m)}),d.perform(m)&&(o=!0)}else f&&f.each(function(y,_){s(i,y)&&y.dirty();var b=a.getPerformArgs(y,i.block);b.skip=!l.performRawSeries&&n.isSeriesFiltered(y.context.model),a.updatePayload(y,r),y.perform(b)&&(o=!0)})}});function s(l,u){return l.setDirty&&(!l.dirtyMap||l.dirtyMap.get(u.__pipeline.id))}this.unfinished=o||this.unfinished},e.prototype.performSeriesTasks=function(t){var n;t.eachSeries(function(r){n=r.dataTask.perform()||n}),this.unfinished=n||this.unfinished},e.prototype.plan=function(){this._pipelineMap.each(function(t){var n=t.tail;do{if(n.__block){t.blockIndex=n.__idxInPipeline;break}n=n.getUpstream()}while(n)})},e.prototype.updatePayload=function(t,n){n!=="remain"&&(t.context.payload=n)},e.prototype._createSeriesStageTask=function(t,n,r,i){var o=this,a=n.seriesTaskMap,s=n.seriesTaskMap=Kt(),l=t.seriesType,u=t.getTargetSeries;t.createOnAllSeries?r.eachRawSeries(c):l?r.eachRawSeriesByType(l,c):u&&u(r,i).each(c);function c(f){var d=f.uid,h=s.set(d,a&&a.get(d)||Lv({plan:Ege,reset:Age,count:Rge}));h.context={model:f,ecModel:r,api:i,useClearVisual:t.isVisual&&!t.isLayout,plan:t.plan,reset:t.reset,scheduler:o},o._pipe(f,h)}},e.prototype._createOverallStageTask=function(t,n,r,i){var o=this,a=n.overallTask=n.overallTask||Lv({reset:wge});a.context={ecModel:r,api:i,overallReset:t.overallReset,scheduler:o};var s=a.agentStubMap,l=a.agentStubMap=Kt(),u=t.seriesType,c=t.getTargetSeries,f=!0,d=!1,h="";pl(!t.createOnAllSeries,h),u?r.eachRawSeriesByType(u,v):c?c(r,i).each(v):(f=!1,Q(r.getSeries(),v));function v(m){var y=m.uid,_=l.set(y,s&&s.get(y)||(d=!0,Lv({reset:xge,onDirty:Cge})));_.context={model:m,overallProgress:f},_.agent=a,_.__block=f,o._pipe(m,_)}d&&a.dirty()},e.prototype._pipe=function(t,n){var r=t.uid,i=this._pipelineMap.get(r);!i.head&&(i.head=n),i.tail&&i.tail.pipe(n),i.tail=n,n.__idxInPipeline=i.count++,n.__pipeline=i},e.wrapStageHandler=function(t,n){return Vt(t)&&(t={overallReset:t,seriesType:Pge(t)}),t.uid=pS("stageHandler"),n&&(t.visualType=n),t},e}();function wge(e){e.overallReset(e.ecModel,e.api,e.payload)}function xge(e){return e.overallProgress&&Tge}function Tge(){this.agent.dirty(),this.getDownstream().dirty()}function Cge(){this.agent&&this.agent.dirty()}function Ege(e){return e.plan?e.plan(e.model,e.ecModel,e.api,e.payload):null}function Age(e){e.useClearVisual&&e.data.clearAllVisual();var t=e.resetDefines=Ri(e.reset(e.model,e.ecModel,e.api,e.payload));return t.length>1?Rt(t,function(n,r){return u6(r)}):Ige}var Ige=u6(0);function u6(e){return function(t,n){var r=n.data,i=n.resetDefines[e];if(i&&i.dataEach)for(var o=t.start;o0&&h===u.length-d.length){var v=u.slice(0,h);v!=="data"&&(n.mainType=v,n[d.toLowerCase()]=l,c=!0)}}s.hasOwnProperty(u)&&(r[u]=l,c=!0),c||(i[u]=l)})}return{cptQuery:n,dataQuery:r,otherQuery:i}},e.prototype.filter=function(t,n){var r=this.eventInfo;if(!r)return!0;var i=r.targetEl,o=r.packedEvent,a=r.model,s=r.view;if(!a||!s)return!0;var l=n.cptQuery,u=n.dataQuery;return c(l,a,"mainType")&&c(l,a,"subType")&&c(l,a,"index","componentIndex")&&c(l,a,"name")&&c(l,a,"id")&&c(u,o,"name")&&c(u,o,"dataIndex")&&c(u,o,"dataType")&&(!s.filterForExposedEvent||s.filterForExposedEvent(t,n.otherQuery,i,o));function c(f,d,h,v){return f[h]==null||d[v||h]===f[h]}},e.prototype.afterTrigger=function(){this.eventInfo=null},e}(),vA=["symbol","symbolSize","symbolRotate","symbolOffset"],yF=vA.concat(["symbolKeepAspect"]),Mge={createOnAllSeries:!0,performRawSeries:!0,reset:function(e,t){var n=e.getData();if(e.legendIcon&&n.setVisual("legendIcon",e.legendIcon),!e.hasSymbolVisual)return;for(var r={},i={},o=!1,a=0;a=0&&Vc(l)?l:.5;var u=e.createRadialGradient(a,s,0,a,s,l);return u}function gA(e,t,n){for(var r=t.type==="radial"?Uge(e,t,n):Vge(e,t,n),i=t.colorStops,o=0;o0)?null:e==="dashed"?[4*t,2*t]:e==="dotted"?[t]:Zn(e)?[e]:lt(e)?e:null}function h6(e){var t=e.style,n=t.lineDash&&t.lineWidth>0&&Gge(t.lineDash,t.lineWidth),r=t.lineDashOffset;if(n){var i=t.strokeNoScale&&e.getLineScale?e.getLineScale():1;i&&i!==1&&(n=Rt(n,function(o){return o/i}),r/=i)}return[n,r]}var zge=new mf(!0);function V1(e){var t=e.stroke;return!(t==null||t==="none"||!(e.lineWidth>0))}function _F(e){return typeof e=="string"&&e!=="none"}function U1(e){var t=e.fill;return t!=null&&t!=="none"}function bF(e,t){if(t.fillOpacity!=null&&t.fillOpacity!==1){var n=e.globalAlpha;e.globalAlpha=t.fillOpacity*t.opacity,e.fill(),e.globalAlpha=n}else e.fill()}function SF(e,t){if(t.strokeOpacity!=null&&t.strokeOpacity!==1){var n=e.globalAlpha;e.globalAlpha=t.strokeOpacity*t.opacity,e.stroke(),e.globalAlpha=n}else e.stroke()}function mA(e,t,n){var r=tU(t.image,t.__image,n);if(eS(r)){var i=e.createPattern(r,t.repeat||"repeat");if(typeof DOMMatrix=="function"&&i&&i.setTransform){var o=new DOMMatrix;o.translateSelf(t.x||0,t.y||0),o.rotateSelf(0,0,(t.rotation||0)*nue),o.scaleSelf(t.scaleX||1,t.scaleY||1),i.setTransform(o)}return i}}function Wge(e,t,n,r){var i,o=V1(n),a=U1(n),s=n.strokePercent,l=s<1,u=!t.path;(!t.silent||l)&&u&&t.createPathProxy();var c=t.path||zge,f=t.__dirty;if(!r){var d=n.fill,h=n.stroke,v=a&&!!d.colorStops,m=o&&!!h.colorStops,y=a&&!!d.image,_=o&&!!h.image,b=void 0,w=void 0,S=void 0,C=void 0,T=void 0;(v||m)&&(T=t.getBoundingRect()),v&&(b=f?gA(e,d,T):t.__canvasFillGradient,t.__canvasFillGradient=b),m&&(w=f?gA(e,h,T):t.__canvasStrokeGradient,t.__canvasStrokeGradient=w),y&&(S=f||!t.__canvasFillPattern?mA(e,d,t):t.__canvasFillPattern,t.__canvasFillPattern=S),_&&(C=f||!t.__canvasStrokePattern?mA(e,h,t):t.__canvasStrokePattern,t.__canvasStrokePattern=S),v?e.fillStyle=b:y&&(S?e.fillStyle=S:a=!1),m?e.strokeStyle=w:_&&(C?e.strokeStyle=C:o=!1)}var A=t.getGlobalScale();c.setScale(A[0],A[1],t.segmentIgnoreThreshold);var P,I;e.setLineDash&&n.lineDash&&(i=h6(t),P=i[0],I=i[1]);var R=!0;(u||f&bd)&&(c.setDPR(e.dpr),l?c.setContext(null):(c.setContext(e),R=!1),c.reset(),t.buildPath(c,t.shape,r),c.toStatic(),t.pathUpdated()),R&&c.rebuildPath(e,l?s:1),P&&(e.setLineDash(P),e.lineDashOffset=I),r||(n.strokeFirst?(o&&SF(e,n),a&&bF(e,n)):(a&&bF(e,n),o&&SF(e,n))),P&&e.setLineDash([])}function jge(e,t,n){var r=t.__image=tU(n.image,t.__image,t,t.onload);if(!(!r||!eS(r))){var i=n.x||0,o=n.y||0,a=t.getWidth(),s=t.getHeight(),l=r.width/r.height;if(a==null&&s!=null?a=s*l:s==null&&a!=null?s=a/l:a==null&&s==null&&(a=r.width,s=r.height),n.sWidth&&n.sHeight){var u=n.sx||0,c=n.sy||0;e.drawImage(r,u,c,n.sWidth,n.sHeight,i,o,a,s)}else if(n.sx&&n.sy){var u=n.sx,c=n.sy,f=a-u,d=s-c;e.drawImage(r,u,c,f,d,i,o,a,s)}else e.drawImage(r,i,o,a,s)}}function Yge(e,t,n){var r,i=n.text;if(i!=null&&(i+=""),i){e.font=n.font||pf,e.textAlign=n.textAlign,e.textBaseline=n.textBaseline;var o=void 0,a=void 0;e.setLineDash&&n.lineDash&&(r=h6(t),o=r[0],a=r[1]),o&&(e.setLineDash(o),e.lineDashOffset=a),n.strokeFirst?(V1(n)&&e.strokeText(i,n.x,n.y),U1(n)&&e.fillText(i,n.x,n.y)):(U1(n)&&e.fillText(i,n.x,n.y),V1(n)&&e.strokeText(i,n.x,n.y)),o&&e.setLineDash([])}}var wF=["shadowBlur","shadowOffsetX","shadowOffsetY"],xF=[["lineCap","butt"],["lineJoin","miter"],["miterLimit",10]];function p6(e,t,n,r,i){var o=!1;if(!r&&(n=n||{},t===n))return!1;if(r||t.opacity!==n.opacity){Zi(e,i),o=!0;var a=Math.max(Math.min(t.opacity,1),0);e.globalAlpha=isNaN(a)?nf.opacity:a}(r||t.blend!==n.blend)&&(o||(Zi(e,i),o=!0),e.globalCompositeOperation=t.blend||nf.blend);for(var s=0;s0&&n.unfinished);n.unfinished||this._zr.flush()}}},t.prototype.getDom=function(){return this._dom},t.prototype.getId=function(){return this.id},t.prototype.getZr=function(){return this._zr},t.prototype.isSSR=function(){return this._ssr},t.prototype.setOption=function(n,r,i){if(!this[Zr]){if(this._disposed){this.id;return}var o,a,s;if(Ct(r)&&(i=r.lazyUpdate,o=r.silent,a=r.replaceMerge,s=r.transition,r=r.notMerge),this[Zr]=!0,!this._model||r){var l=new rge(this._api),u=this._theme,c=this._model=new XR;c.scheduler=this._scheduler,c.ssr=this._ssr,c.init(null,null,null,u,this._locale,l)}this._model.setOption(n,{replaceMerge:a},bA);var f={seriesTransition:s,optionChanged:!0};if(i)this[Bi]={silent:o,updateParams:f},this[Zr]=!1,this.getZr().wakeUp();else{try{ld(this),zl.update.call(this,null,f)}catch(d){throw this[Bi]=null,this[Zr]=!1,d}this._ssr||this._zr.flush(),this[Bi]=null,this[Zr]=!1,Cp.call(this,o),Ep.call(this,o)}}},t.prototype.setTheme=function(){},t.prototype.getModel=function(){return this._model},t.prototype.getOption=function(){return this._model&&this._model.getOption()},t.prototype.getWidth=function(){return this._zr.getWidth()},t.prototype.getHeight=function(){return this._zr.getHeight()},t.prototype.getDevicePixelRatio=function(){return this._zr.painter.dpr||Dt.hasGlobalWindow&&window.devicePixelRatio||1},t.prototype.getRenderedCanvas=function(n){return this.renderToCanvas(n)},t.prototype.renderToCanvas=function(n){n=n||{};var r=this._zr.painter;return r.getRenderedCanvas({backgroundColor:n.backgroundColor||this._model.get("backgroundColor"),pixelRatio:n.pixelRatio||this.getDevicePixelRatio()})},t.prototype.renderToSVGString=function(n){n=n||{};var r=this._zr.painter;return r.renderToString({useViewBox:n.useViewBox})},t.prototype.getSvgDataURL=function(){if(Dt.svgSupported){var n=this._zr,r=n.storage.getDisplayList();return Q(r,function(i){i.stopAnimation(null,!0)}),n.painter.toDataURL()}},t.prototype.getDataURL=function(n){if(this._disposed){this.id;return}n=n||{};var r=n.excludeComponents,i=this._model,o=[],a=this;Q(r,function(l){i.eachComponent({mainType:l},function(u){var c=a._componentsMap[u.__viewId];c.group.ignore||(o.push(c),c.group.ignore=!0)})});var s=this._zr.painter.getType()==="svg"?this.getSvgDataURL():this.renderToCanvas(n).toDataURL("image/"+(n&&n.type||"png"));return Q(o,function(l){l.group.ignore=!1}),s},t.prototype.getConnectedDataURL=function(n){if(this._disposed){this.id;return}var r=n.type==="svg",i=this.group,o=Math.min,a=Math.max,s=1/0;if($F[i]){var l=s,u=s,c=-s,f=-s,d=[],h=n&&n.pixelRatio||this.getDevicePixelRatio();Q(kv,function(w,S){if(w.group===i){var C=r?w.getZr().painter.getSvgDom().innerHTML:w.renderToCanvas(ln(n)),T=w.getDom().getBoundingClientRect();l=o(T.left,l),u=o(T.top,u),c=a(T.right,c),f=a(T.bottom,f),d.push({dom:C,left:T.left,top:T.top})}}),l*=h,u*=h,c*=h,f*=h;var v=c-l,m=f-u,y=Ch.createCanvas(),_=nF(y,{renderer:r?"svg":"canvas"});if(_.resize({width:v,height:m}),r){var b="";return Q(d,function(w){var S=w.left-l,C=w.top-u;b+=''+w.dom+""}),_.painter.getSvgRoot().innerHTML=b,n.connectedBackgroundColor&&_.painter.setBackgroundColor(n.connectedBackgroundColor),_.refreshImmediately(),_.painter.toDataURL()}else return n.connectedBackgroundColor&&_.add(new zr({shape:{x:0,y:0,width:v,height:m},style:{fill:n.connectedBackgroundColor}})),Q(d,function(w){var S=new Uu({style:{x:w.left*h-l,y:w.top*h-u,image:w.dom}});_.add(S)}),_.refreshImmediately(),y.toDataURL("image/"+(n&&n.type||"png"))}else return this.getDataURL(n)},t.prototype.convertToPixel=function(n,r){return YT(this,"convertToPixel",n,r)},t.prototype.convertFromPixel=function(n,r){return YT(this,"convertFromPixel",n,r)},t.prototype.containPixel=function(n,r){if(this._disposed){this.id;return}var i=this._model,o,a=dT(i,n);return Q(a,function(s,l){l.indexOf("Models")>=0&&Q(s,function(u){var c=u.coordinateSystem;if(c&&c.containPoint)o=o||!!c.containPoint(r);else if(l==="seriesModels"){var f=this._chartsMap[u.__viewId];f&&f.containPoint&&(o=o||f.containPoint(r,u))}},this)},this),!!o},t.prototype.getVisual=function(n,r){var i=this._model,o=dT(i,n,{defaultMainType:"series"}),a=o.seriesModel,s=a.getData(),l=o.hasOwnProperty("dataIndexInside")?o.dataIndexInside:o.hasOwnProperty("dataIndex")?s.indexOfRawIndex(o.dataIndex):null;return l!=null?Nge(s,l,r):kge(s,r)},t.prototype.getViewOfComponentModel=function(n){return this._componentsMap[n.__viewId]},t.prototype.getViewOfSeriesModel=function(n){return this._chartsMap[n.__viewId]},t.prototype._initEvents=function(){var n=this;Q(yme,function(r){var i=function(o){var a=n.getModel(),s=o.target,l,u=r==="globalout";if(u?l={}:s&&qp(s,function(v){var m=Mn(v);if(m&&m.dataIndex!=null){var y=m.dataModel||a.getSeriesByIndex(m.seriesIndex);return l=y&&y.getDataParams(m.dataIndex,m.dataType,s)||{},!0}else if(m.eventData)return l=Ke({},m.eventData),!0},!0),l){var c=l.componentType,f=l.componentIndex;(c==="markLine"||c==="markPoint"||c==="markArea")&&(c="series",f=l.seriesIndex);var d=c&&f!=null&&a.getComponent(c,f),h=d&&n[d.mainType==="series"?"_chartsMap":"_componentsMap"][d.__viewId];l.event=o,l.type=r,n._$eventProcessor.eventInfo={targetEl:s,packedEvent:l,model:d,view:h},n.trigger(r,l)}};i.zrEventfulCallAtLast=!0,n._zr.on(r,i,n)}),Q(Nv,function(r,i){n._messageCenter.on(i,function(o){this.trigger(i,o)},n)}),Q(["selectchanged"],function(r){n._messageCenter.on(r,function(i){this.trigger(r,i)},n)}),mve(this._messageCenter,this,this._api)},t.prototype.isDisposed=function(){return this._disposed},t.prototype.clear=function(){if(this._disposed){this.id;return}this.setOption({series:[]},!0)},t.prototype.dispose=function(){if(this._disposed){this.id;return}this._disposed=!0;var n=this.getDom();n&&EU(this.getDom(),qR,"");var r=this,i=r._api,o=r._model;Q(r._componentsViews,function(a){a.dispose(o,i)}),Q(r._chartsViews,function(a){a.dispose(o,i)}),r._zr.dispose(),r._dom=r._model=r._chartsMap=r._componentsMap=r._chartsViews=r._componentsViews=r._scheduler=r._api=r._zr=r._throttledZrFlush=r._theme=r._coordSysMgr=r._messageCenter=null,delete kv[r.id]},t.prototype.resize=function(n){if(!this[Zr]){if(this._disposed){this.id;return}this._zr.resize(n);var r=this._model;if(this._loadingFX&&this._loadingFX.resize(),!!r){var i=r.resetOption("media"),o=n&&n.silent;this[Bi]&&(o==null&&(o=this[Bi].silent),i=!0,this[Bi]=null),this[Zr]=!0;try{i&&ld(this),zl.update.call(this,{type:"resize",animation:Ke({duration:0},n&&n.animation)})}catch(a){throw this[Zr]=!1,a}this[Zr]=!1,Cp.call(this,o),Ep.call(this,o)}}},t.prototype.showLoading=function(n,r){if(this._disposed){this.id;return}if(Ct(n)&&(r=n,n=""),n=n||"default",this.hideLoading(),!!SA[n]){var i=SA[n](this._api,r),o=this._zr;this._loadingFX=i,o.add(i)}},t.prototype.hideLoading=function(){if(this._disposed){this.id;return}this._loadingFX&&this._zr.remove(this._loadingFX),this._loadingFX=null},t.prototype.makeActionFromEvent=function(n){var r=Ke({},n);return r.type=Nv[n.type],r},t.prototype.dispatchAction=function(n,r){if(this._disposed){this.id;return}if(Ct(r)||(r={silent:!!r}),!!H1[n.type]&&this._model){if(this[Zr]){this._pendingActions.push(n);return}var i=r.silent;KT.call(this,n,i);var o=r.flush;o?this._zr.flush():o!==!1&&Dt.browser.weChat&&this._throttledZrFlush(),Cp.call(this,i),Ep.call(this,i)}},t.prototype.updateLabelLayout=function(){Ta.trigger("series:layoutlabels",this._model,this._api,{updatedSeries:[]})},t.prototype.appendData=function(n){if(this._disposed){this.id;return}var r=n.seriesIndex,i=this.getModel(),o=i.getSeriesByIndex(r);o.appendData(n),this._scheduler.unfinished=!0,this.getZr().wakeUp()},t.internalField=function(){ld=function(f){var d=f._scheduler;d.restorePipelines(f._model),d.prepareStageTasks(),jT(f,!0),jT(f,!1),d.plan()},jT=function(f,d){for(var h=f._model,v=f._scheduler,m=d?f._componentsViews:f._chartsViews,y=d?f._componentsMap:f._chartsMap,_=f._zr,b=f._api,w=0;wd.get("hoverLayerThreshold")&&!Dt.node&&!Dt.worker&&d.eachSeries(function(y){if(!y.preventUsingHoverLayer){var _=f._chartsMap[y.__viewId];_.__alive&&_.eachRendered(function(b){b.states.emphasis&&(b.states.emphasis.hoverLayer=!0)})}})}function a(f,d){var h=f.get("blendMode")||null;d.eachRendered(function(v){v.isGroup||(v.style.blend=h)})}function s(f,d){if(!f.preventAutoZ){var h=f.get("z")||0,v=f.get("zlevel")||0;d.eachRendered(function(m){return l(m,h,v,-1/0),!0})}}function l(f,d,h,v){var m=f.getTextContent(),y=f.getTextGuideLine(),_=f.isGroup;if(_)for(var b=f.childrenRef(),w=0;w0?{duration:m,delay:h.get("delay"),easing:h.get("easing")}:null;d.eachRendered(function(_){if(_.states&&_.states.emphasis){if(Ov(_))return;if(_ instanceof Ln&&Cfe(_),_.__dirty){var b=_.prevStates;b&&_.useStates(b)}if(v){_.stateTransition=y;var w=_.getTextContent(),S=_.getTextGuideLine();w&&(w.stateTransition=y),S&&(S.stateTransition=y)}_.__dirty&&i(_)}})}kF=function(f){return new(function(d){ot(h,d);function h(){return d!==null&&d.apply(this,arguments)||this}return h.prototype.getCoordinateSystems=function(){return f._coordSysMgr.getCoordinateSystems()},h.prototype.getComponentByElement=function(v){for(;v;){var m=v.__ecComponentInfo;if(m!=null)return f._model.getComponent(m.mainType,m.index);v=v.parent}},h.prototype.enterEmphasis=function(v,m){R1(v,m),Uo(f)},h.prototype.leaveEmphasis=function(v,m){P1(v,m),Uo(f)},h.prototype.enterBlur=function(v){vfe(v),Uo(f)},h.prototype.leaveBlur=function(v){OU(v),Uo(f)},h.prototype.enterSelect=function(v){DU(v),Uo(f)},h.prototype.leaveSelect=function(v){MU(v),Uo(f)},h.prototype.getModel=function(){return f.getModel()},h.prototype.getViewOfComponentModel=function(v){return f.getViewOfComponentModel(v)},h.prototype.getViewOfSeriesModel=function(v){return f.getViewOfSeriesModel(v)},h}(r6))(f)},R6=function(f){function d(h,v){for(var m=0;m=0)){BF.push(n);var o=l6.wrapStageHandler(n,i);o.__prio=t,o.__raw=n,e.push(o)}}function N6(e,t){SA[e]=t}function Eme(e,t,n){var r=rme("registerMap");r&&r(e,t,n)}var Ame=Jhe;If(KR,yge);If(wS,_ge);If(wS,bge);If(KR,Mge);If(wS,Lge);If(x6,tme);M6(o6);L6(ame,vge);N6("default",Sge);Rh({type:rf,event:rf,update:rf},eo);Rh({type:x_,event:x_,update:x_},eo);Rh({type:Iv,event:Iv,update:Iv},eo);Rh({type:T_,event:T_,update:T_},eo);Rh({type:Rv,event:Rv,update:Rv},eo);D6("light",Oge);D6("dark",d6);var VF=[],Ime={registerPreprocessor:M6,registerProcessor:L6,registerPostInit:wme,registerPostUpdate:xme,registerUpdateLifecycle:JR,registerAction:Rh,registerCoordinateSystem:Tme,registerLayout:Cme,registerVisual:If,registerTransform:Ame,registerLoading:N6,registerMap:Eme,registerImpl:nme,PRIORITY:vme,ComponentModel:An,ComponentView:hs,SeriesModel:Pu,ChartView:os,registerComponentModel:function(e){An.registerClass(e)},registerComponentView:function(e){hs.registerClass(e)},registerSeriesModel:function(e){Pu.registerClass(e)},registerChartView:function(e){os.registerClass(e)},registerSubTypeDefaulter:function(e,t){An.registerSubTypeDefaulter(e,t)},registerPainter:function(e,t){Xve(e,t)}};function Ou(e){if(lt(e)){Q(e,function(t){Ou(t)});return}In(VF,e)>=0||(VF.push(e),Vt(e)&&(e={install:e}),e.install(Ime))}var Rme=function(e){ot(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.type="grid",t.dependencies=["xAxis","yAxis"],t.layoutMode="box",t.defaultOption={show:!1,z:0,left:"10%",top:60,right:"10%",bottom:70,containLabel:!1,backgroundColor:"rgba(0,0,0,0)",borderWidth:1,borderColor:"#ccc"},t}(An),Pme=function(){function e(){}return e.prototype.getNeedCrossZero=function(){var t=this.option;return!t.scale},e.prototype.getCoordSysModel=function(){},e}(),wA=function(e){ot(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.getCoordSysModel=function(){return this.getReferringComponents("grid",Pa).models[0]},t.type="cartesian2dAxis",t}(An);ms(wA,Pme);var k6={show:!0,z:0,inverse:!1,name:"",nameLocation:"end",nameRotate:null,nameTruncate:{maxWidth:null,ellipsis:"...",placeholder:"."},nameTextStyle:{},nameGap:15,silent:!1,triggerEvent:!1,tooltip:{show:!1},axisPointer:{},axisLine:{show:!0,onZero:!0,onZeroAxisIndex:null,lineStyle:{color:"#6E7079",width:1,type:"solid"},symbol:["none","none"],symbolSize:[10,15]},axisTick:{show:!0,inside:!1,length:5,lineStyle:{width:1}},axisLabel:{show:!0,inside:!1,rotate:0,showMinLabel:null,showMaxLabel:null,margin:8,fontSize:12},splitLine:{show:!0,showMinLine:!0,showMaxLine:!0,lineStyle:{color:["#E0E6F1"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.2)","rgba(210,219,238,0.2)"]}}},Ome=_n({boundaryGap:!0,deduplication:null,splitLine:{show:!1},axisTick:{alignWithLabel:!1,interval:"auto"},axisLabel:{interval:"auto"}},k6),eP=_n({boundaryGap:[0,0],axisLine:{show:"auto"},axisTick:{show:"auto"},splitNumber:5,minorTick:{show:!1,splitNumber:5,length:3,lineStyle:{}},minorSplitLine:{show:!1,lineStyle:{color:"#F4F7FD",width:1}}},k6),Dme=_n({splitNumber:6,axisLabel:{showMinLabel:!1,showMaxLabel:!1,rich:{primary:{fontWeight:"bold"}}},splitLine:{show:!1}},eP),Mme=En({logBase:10},eP);const Lme={category:Ome,value:eP,time:Dme,log:Mme};var Nme=0,xA=function(){function e(t){this.categories=t.categories||[],this._needCollect=t.needCollect,this._deduplication=t.deduplication,this.uid=++Nme}return e.createByAxisModel=function(t){var n=t.option,r=n.data,i=r&&Rt(r,kme);return new e({categories:i,needCollect:!i,deduplication:n.dedplication!==!1})},e.prototype.getOrdinal=function(t){return this._getOrCreateMap().get(t)},e.prototype.parseAndCollect=function(t){var n,r=this._needCollect;if(!dt(t)&&!r)return t;if(r&&!this._deduplication)return n=this.categories.length,this.categories[n]=t,n;var i=this._getOrCreateMap();return n=i.get(t),n==null&&(r?(n=this.categories.length,this.categories[n]=t,i.set(t,n)):n=NaN),n},e.prototype._getOrCreateMap=function(){return this._map||(this._map=Kt(this.categories))},e}();function kme(e){return Ct(e)&&e.value!=null?e.value:e+""}var Fme={value:1,category:1,time:1,log:1};function UF(e,t,n,r){Q(Fme,function(i,o){var a=_n(_n({},Lme[o],!0),r,!0),s=function(l){ot(u,l);function u(){var c=l!==null&&l.apply(this,arguments)||this;return c.type=t+"Axis."+o,c}return u.prototype.mergeDefaultAndTheme=function(c,f){var d=Cg(this),h=d?SS(c):{},v=f.getTheme();_n(c,v.get(o+"Axis")),_n(c,this.getDefaultOption()),c.type=HF(c),d&&sh(c,h,d)},u.prototype.optionUpdated=function(){var c=this.option;c.type==="category"&&(this.__ordinalMeta=xA.createByAxisModel(this))},u.prototype.getCategories=function(c){var f=this.option;if(f.type==="category")return c?f.data:this.__ordinalMeta.categories},u.prototype.getOrdinalMeta=function(){return this.__ordinalMeta},u.type=t+"Axis."+o,u.defaultOption=a,u}(n);e.registerComponentModel(s)}),e.registerSubTypeDefaulter(t+"Axis",HF)}function HF(e){return e.type||(e.data?"category":"value")}var bs=function(){function e(t){this._setting=t||{},this._extent=[1/0,-1/0]}return e.prototype.getSetting=function(t){return this._setting[t]},e.prototype.unionExtent=function(t){var n=this._extent;t[0]n[1]&&(n[1]=t[1])},e.prototype.unionExtentFromData=function(t,n){this.unionExtent(t.getApproximateExtent(n))},e.prototype.getExtent=function(){return this._extent.slice()},e.prototype.setExtent=function(t,n){var r=this._extent;isNaN(t)||(r[0]=t),isNaN(n)||(r[1]=n)},e.prototype.isInExtentRange=function(t){return this._extent[0]<=t&&this._extent[1]>=t},e.prototype.isBlank=function(){return this._isBlank},e.prototype.setBlank=function(t){this._isBlank=t},e}();Qb(bs);function TA(e){return e.type==="interval"||e.type==="log"}function $me(e,t,n,r){var i={},o=e[1]-e[0],a=i.interval=SU(o/t);n!=null&&ar&&(a=i.interval=r);var s=i.intervalPrecision=F6(a),l=i.niceTickExtent=[_r(Math.ceil(e[0]/a)*a,s),_r(Math.floor(e[1]/a)*a,s)];return Bme(l,e),i}function qT(e){var t=Math.pow(10,vR(e)),n=e/t;return n?n===2?n=3:n===3?n=5:n*=2:n=1,_r(n*t)}function F6(e){return Js(e)+2}function GF(e,t,n){e[t]=Math.max(Math.min(e[t],n[1]),n[0])}function Bme(e,t){!isFinite(e[0])&&(e[0]=t[0]),!isFinite(e[1])&&(e[1]=t[1]),GF(e,0,t),GF(e,1,t),e[0]>e[1]&&(e[0]=e[1])}function xS(e,t){return e>=t[0]&&e<=t[1]}function TS(e,t){return t[1]===t[0]?.5:(e-t[0])/(t[1]-t[0])}function CS(e,t){return e*(t[1]-t[0])+t[0]}var tP=function(e){ot(t,e);function t(n){var r=e.call(this,n)||this;r.type="ordinal";var i=r.getSetting("ordinalMeta");return i||(i=new xA({})),lt(i)&&(i=new xA({categories:Rt(i,function(o){return Ct(o)?o.value:o})})),r._ordinalMeta=i,r._extent=r.getSetting("extent")||[0,i.categories.length-1],r}return t.prototype.parse=function(n){return n==null?NaN:dt(n)?this._ordinalMeta.getOrdinal(n):Math.round(n)},t.prototype.contain=function(n){return n=this.parse(n),xS(n,this._extent)&&this._ordinalMeta.categories[n]!=null},t.prototype.normalize=function(n){return n=this._getTickNumber(this.parse(n)),TS(n,this._extent)},t.prototype.scale=function(n){return n=Math.round(CS(n,this._extent)),this.getRawOrdinalNumber(n)},t.prototype.getTicks=function(){for(var n=[],r=this._extent,i=r[0];i<=r[1];)n.push({value:i}),i++;return n},t.prototype.getMinorTicks=function(n){},t.prototype.setSortInfo=function(n){if(n==null){this._ordinalNumbersByTick=this._ticksByOrdinalNumber=null;return}for(var r=n.ordinalNumbers,i=this._ordinalNumbersByTick=[],o=this._ticksByOrdinalNumber=[],a=0,s=this._ordinalMeta.categories.length,l=Math.min(s,r.length);a=0&&n=0&&n=n},t.prototype.getOrdinalMeta=function(){return this._ordinalMeta},t.prototype.calcNiceTicks=function(){},t.prototype.calcNiceExtent=function(){},t.type="ordinal",t}(bs);bs.registerClass(tP);var Sc=_r,Ph=function(e){ot(t,e);function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.type="interval",n._interval=0,n._intervalPrecision=2,n}return t.prototype.parse=function(n){return n},t.prototype.contain=function(n){return xS(n,this._extent)},t.prototype.normalize=function(n){return TS(n,this._extent)},t.prototype.scale=function(n){return CS(n,this._extent)},t.prototype.setExtent=function(n,r){var i=this._extent;isNaN(n)||(i[0]=parseFloat(n)),isNaN(r)||(i[1]=parseFloat(r))},t.prototype.unionExtent=function(n){var r=this._extent;n[0]r[1]&&(r[1]=n[1]),this.setExtent(r[0],r[1])},t.prototype.getInterval=function(){return this._interval},t.prototype.setInterval=function(n){this._interval=n,this._niceExtent=this._extent.slice(),this._intervalPrecision=F6(n)},t.prototype.getTicks=function(n){var r=this._interval,i=this._extent,o=this._niceExtent,a=this._intervalPrecision,s=[];if(!r)return s;var l=1e4;i[0]l)return[];var c=s.length?s[s.length-1].value:o[1];return i[1]>c&&(n?s.push({value:Sc(c+r,a)}):s.push({value:i[1]})),s},t.prototype.getMinorTicks=function(n){for(var r=this.getTicks(!0),i=[],o=this.getExtent(),a=1;ao[0]&&h>>1;e[i][1]i&&(this._approxInterval=i);var s=p0.length,l=Math.min(Vme(p0,this._approxInterval,0,s),s-1);this._interval=p0[l][1],this._minLevelUnit=p0[Math.max(l-1,0)][0]},t.prototype.parse=function(n){return Zn(n)?n:+vl(n)},t.prototype.contain=function(n){return xS(this.parse(n),this._extent)},t.prototype.normalize=function(n){return TS(this.parse(n),this._extent)},t.prototype.scale=function(n){return CS(n,this._extent)},t.type="time",t}(Ph),p0=[["second",VR],["minute",UR],["hour",Dv],["quarter-day",Dv*6],["half-day",Dv*12],["day",Qo*1.2],["half-week",Qo*3.5],["week",Qo*7],["month",Qo*31],["quarter",Qo*95],["half-year",Tk/2],["year",Tk]];function Ume(e,t,n,r){var i=vl(t),o=vl(n),a=function(v){return Ek(i,v,r)===Ek(o,v,r)},s=function(){return a("year")},l=function(){return s()&&a("month")},u=function(){return l()&&a("day")},c=function(){return u()&&a("hour")},f=function(){return c()&&a("minute")},d=function(){return f()&&a("second")},h=function(){return d()&&a("millisecond")};switch(e){case"year":return s();case"month":return l();case"day":return u();case"hour":return c();case"minute":return f();case"second":return d();case"millisecond":return h()}}function Hme(e,t){return e/=Qo,e>16?16:e>7.5?7:e>3.5?4:e>1.5?2:1}function Gme(e){var t=30*Qo;return e/=t,e>6?6:e>3?3:e>2?2:1}function zme(e){return e/=Dv,e>12?12:e>6?6:e>3.5?4:e>2?2:1}function zF(e,t){return e/=t?UR:VR,e>30?30:e>20?20:e>15?15:e>10?10:e>5?5:e>2?2:1}function Wme(e){return SU(e)}function jme(e,t,n){var r=new Date(e);switch(Wd(t)){case"year":case"month":r[SH(n)](0);case"day":r[wH(n)](1);case"hour":r[xH(n)](0);case"minute":r[TH(n)](0);case"second":r[CH(n)](0),r[EH(n)](0)}return r.getTime()}function Yme(e,t,n,r){var i=1e4,o=_H,a=0;function s(R,O,M,$,F,z,B){for(var Y=new Date(O),j=O,se=Y[$]();j1&&z===0&&M.unshift({value:M[0].value-j})}}for(var z=0;z<$.length;z++)M.push($[z]);return $}}for(var u=[],c=[],f=0,d=0,h=0;h=r[0]&&b<=r[1]&&f++)}var w=(r[1]-r[0])/t;if(f>w*1.5&&d>w/1.5||(u.push(y),f>w||e===o[h]))break}c=[]}}}for(var S=Ur(Rt(u,function(R){return Ur(R,function(O){return O.value>=r[0]&&O.value<=r[1]&&!O.notAdd})}),function(R){return R.length>0}),C=[],T=S.length-1,h=0;h0;)o*=10;var s=[_r(Zme(r[0]/o)*o),_r(Kme(r[1]/o)*o)];this._interval=o,this._niceExtent=s}},t.prototype.calcNiceExtent=function(n){Fv.calcNiceExtent.call(this,n),this._fixMin=n.fixMin,this._fixMax=n.fixMax},t.prototype.parse=function(n){return n},t.prototype.contain=function(n){return n=ya(n)/ya(this.base),xS(n,this._extent)},t.prototype.normalize=function(n){return n=ya(n)/ya(this.base),TS(n,this._extent)},t.prototype.scale=function(n){return n=CS(n,this._extent),v0(this.base,n)},t.type="log",t}(bs),B6=nP.prototype;B6.getMinorTicks=Fv.getMinorTicks;B6.getLabel=Fv.getLabel;function g0(e,t){return Xme(e,Js(t))}bs.registerClass(nP);var qme=function(){function e(t,n,r){this._prepareParams(t,n,r)}return e.prototype._prepareParams=function(t,n,r){r[1]0&&l>0&&!u&&(s=0),s<0&&l<0&&!c&&(l=0));var d=this._determinedMin,h=this._determinedMax;return d!=null&&(s=d,u=!0),h!=null&&(l=h,c=!0),{min:s,max:l,minFixed:u,maxFixed:c,isBlank:f}},e.prototype.modifyDataMinMax=function(t,n){this[Qme[t]]=n},e.prototype.setDeterminedMinMax=function(t,n){var r=Jme[t];this[r]=n},e.prototype.freeze=function(){this.frozen=!0},e}(),Jme={min:"_determinedMin",max:"_determinedMax"},Qme={min:"_dataMin",max:"_dataMax"};function eye(e,t,n){var r=e.rawExtentInfo;return r||(r=new qme(e,t,n),e.rawExtentInfo=r,r)}function m0(e,t){return t==null?null:_1(t)?NaN:e.parse(t)}function V6(e,t){var n=e.type,r=eye(e,t,e.getExtent()).calculate();e.setBlank(r.isBlank);var i=r.min,o=r.max,a=t.ecModel;if(a&&n==="time"){var s=cve("bar",a),l=!1;if(Q(s,function(f){l=l||f.getBaseAxis()===t.axis}),l){var u=dve(s),c=tye(i,o,t,u);i=c.min,o=c.max}}return{extent:[i,o],fixMin:r.minFixed,fixMax:r.maxFixed}}function tye(e,t,n,r){var i=n.axis.getExtent(),o=Math.abs(i[1]-i[0]),a=pve(r,n.axis);if(a===void 0)return{min:e,max:t};var s=1/0;Q(a,function(h){s=Math.min(h.offset,s)});var l=-1/0;Q(a,function(h){l=Math.max(h.offset+h.width,l)}),s=Math.abs(s),l=Math.abs(l);var u=s+l,c=t-e,f=1-(s+l)/o,d=c/f-c;return t+=d*(l/u),e-=d*(s/u),{min:e,max:t}}function jF(e,t){var n=t,r=V6(e,n),i=r.extent,o=n.get("splitNumber");e instanceof nP&&(e.base=n.get("logBase"));var a=e.type,s=n.get("interval"),l=a==="interval"||a==="time";e.setExtent(i[0],i[1]),e.calcNiceExtent({splitNumber:o,fixMin:r.fixMin,fixMax:r.fixMax,minInterval:l?n.get("minInterval"):null,maxInterval:l?n.get("maxInterval"):null}),s!=null&&e.setInterval&&e.setInterval(s)}function nye(e,t){if(t=t||e.get("type"),t)switch(t){case"category":return new tP({ordinalMeta:e.getOrdinalMeta?e.getOrdinalMeta():e.getCategories(),extent:[1/0,-1/0]});case"time":return new $6({locale:e.ecModel.getLocaleModel(),useUTC:e.ecModel.get("useUTC")});default:return new(bs.getClass(t)||Ph)}}function rye(e){var t=e.scale.getExtent(),n=t[0],r=t[1];return!(n>0&&r>0||n<0&&r<0)}function Oh(e){var t=e.getLabelModel().get("formatter"),n=e.type==="category"?e.scale.getExtent()[0]:null;return e.scale.type==="time"?function(r){return function(i,o){return e.scale.getFormattedLabel(i,o,r)}}(t):dt(t)?function(r){return function(i){var o=e.scale.getLabel(i),a=r.replace("{value}",o??"");return a}}(t):Vt(t)?function(r){return function(i,o){return n!=null&&(o=i.value-n),r(rP(e,i),o,i.level!=null?{level:i.level}:null)}}(t):function(r){return e.scale.getLabel(r)}}function rP(e,t){return e.type==="category"?e.scale.getLabel(t):t.value}function iye(e){var t=e.model,n=e.scale;if(!(!t.get(["axisLabel","show"])||n.isBlank())){var r,i,o=n.getExtent();n instanceof tP?i=n.count():(r=n.getTicks(),i=r.length);var a=e.getLabelModel(),s=Oh(e),l,u=1;i>40&&(u=Math.ceil(i/40));for(var c=0;c0&&(n.sort(),n.unshift(n[0]),n.push(n[n.length-1])),n}function uye(e){var t=e.getLabelModel().get("customValues");if(t){var n=Oh(e),r=e.scale.getExtent(),i=H6(e,t),o=Ur(i,function(a){return a>=r[0]&&a<=r[1]});return{labels:Rt(o,function(a){var s={value:a};return{formattedLabel:n(s),rawLabel:e.scale.getLabel(s),tickValue:a}})}}return e.type==="category"?fye(e):hye(e)}function cye(e,t){var n=e.getTickModel().get("customValues");if(n){var r=e.scale.getExtent(),i=H6(e,n);return{ticks:Ur(i,function(o){return o>=r[0]&&o<=r[1]})}}return e.type==="category"?dye(e,t):{ticks:Rt(e.scale.getTicks(),function(o){return o.value})}}function fye(e){var t=e.getLabelModel(),n=G6(e,t);return!t.get("show")||e.scale.isBlank()?{labels:[],labelCategoryInterval:n.labelCategoryInterval}:n}function G6(e,t){var n=z6(e,"labels"),r=iP(t),i=W6(n,r);if(i)return i;var o,a;return Vt(r)?o=X6(e,r):(a=r==="auto"?pye(e):r,o=Y6(e,a)),j6(n,r,{labels:o,labelCategoryInterval:a})}function dye(e,t){var n=z6(e,"ticks"),r=iP(t),i=W6(n,r);if(i)return i;var o,a;if((!t.get("show")||e.scale.isBlank())&&(o=[]),Vt(r))o=X6(e,r,!0);else if(r==="auto"){var s=G6(e,e.getLabelModel());a=s.labelCategoryInterval,o=Rt(s.labels,function(l){return l.tickValue})}else a=r,o=Y6(e,a,!0);return j6(n,r,{ticks:o,tickCategoryInterval:a})}function hye(e){var t=e.scale.getTicks(),n=Oh(e);return{labels:Rt(t,function(r,i){return{level:r.level,formattedLabel:n(r,i),rawLabel:e.scale.getLabel(r),tickValue:r.value}})}}function z6(e,t){return Pg(e)[t]||(Pg(e)[t]=[])}function W6(e,t){for(var n=0;n40&&(s=Math.max(1,Math.floor(a/40)));for(var l=o[0],u=e.dataToCoord(l+1)-e.dataToCoord(l),c=Math.abs(u*Math.cos(r)),f=Math.abs(u*Math.sin(r)),d=0,h=0;l<=o[1];l+=s){var v=0,m=0,y=fR(n({value:l}),t.font,"center","top");v=y.width*1.3,m=y.height*1.3,d=Math.max(d,v,7),h=Math.max(h,m,7)}var _=d/c,b=h/f;isNaN(_)&&(_=1/0),isNaN(b)&&(b=1/0);var w=Math.max(0,Math.floor(Math.min(_,b))),S=Pg(e.model),C=e.getExtent(),T=S.lastAutoInterval,A=S.lastTickCount;return T!=null&&A!=null&&Math.abs(T-w)<=1&&Math.abs(A-a)<=1&&T>w&&S.axisExtent0===C[0]&&S.axisExtent1===C[1]?w=T:(S.lastTickCount=a,S.lastAutoInterval=w,S.axisExtent0=C[0],S.axisExtent1=C[1]),w}function gye(e){var t=e.getLabelModel();return{axisRotate:e.getRotate?e.getRotate():e.isHorizontal&&!e.isHorizontal()?90:0,labelRotate:t.get("rotate")||0,font:t.getFont()}}function Y6(e,t,n){var r=Oh(e),i=e.scale,o=i.getExtent(),a=e.getLabelModel(),s=[],l=Math.max((t||0)+1,1),u=o[0],c=i.count();u!==0&&l>1&&c/l>2&&(u=Math.round(Math.ceil(u/l)*l));var f=U6(e),d=a.get("showMinLabel")||f,h=a.get("showMaxLabel")||f;d&&u!==o[0]&&m(o[0]);for(var v=u;v<=o[1];v+=l)m(v);h&&v-l!==o[1]&&m(o[1]);function m(y){var _={value:y};s.push(n?y:{formattedLabel:r(_),rawLabel:i.getLabel(_),tickValue:y})}return s}function X6(e,t,n){var r=e.scale,i=Oh(e),o=[];return Q(r.getTicks(),function(a){var s=r.getLabel(a),l=a.value;t(a.value,s)&&o.push(n?l:{formattedLabel:i(a),rawLabel:s,tickValue:l})}),o}var XF=[0,1],mye=function(){function e(t,n,r){this.onBand=!1,this.inverse=!1,this.dim=t,this.scale=n,this._extent=r||[0,0]}return e.prototype.contain=function(t){var n=this._extent,r=Math.min(n[0],n[1]),i=Math.max(n[0],n[1]);return t>=r&&t<=i},e.prototype.containData=function(t){return this.scale.contain(t)},e.prototype.getExtent=function(){return this._extent.slice()},e.prototype.getPixelPrecision=function(t){return Bce(t||this.scale.getExtent(),this._extent)},e.prototype.setExtent=function(t,n){var r=this._extent;r[0]=t,r[1]=n},e.prototype.dataToCoord=function(t,n){var r=this._extent,i=this.scale;return t=i.normalize(t),this.onBand&&i.type==="ordinal"&&(r=r.slice(),KF(r,i.count())),LN(t,XF,r,n)},e.prototype.coordToData=function(t,n){var r=this._extent,i=this.scale;this.onBand&&i.type==="ordinal"&&(r=r.slice(),KF(r,i.count()));var o=LN(t,r,XF,n);return this.scale.scale(o)},e.prototype.pointToData=function(t,n){},e.prototype.getTicksCoords=function(t){t=t||{};var n=t.tickModel||this.getTickModel(),r=cye(this,n),i=r.ticks,o=Rt(i,function(s){return{coord:this.dataToCoord(this.scale.type==="ordinal"?this.scale.getRawOrdinalNumber(s):s),tickValue:s}},this),a=n.get("alignWithLabel");return yye(this,o,a,t.clamp),o},e.prototype.getMinorTicksCoords=function(){if(this.scale.type==="ordinal")return[];var t=this.model.getModel("minorTick"),n=t.get("splitNumber");n>0&&n<100||(n=5);var r=this.scale.getMinorTicks(n),i=Rt(r,function(o){return Rt(o,function(a){return{coord:this.dataToCoord(a),tickValue:a}},this)},this);return i},e.prototype.getViewLabels=function(){return uye(this).labels},e.prototype.getLabelModel=function(){return this.model.getModel("axisLabel")},e.prototype.getTickModel=function(){return this.model.getModel("axisTick")},e.prototype.getBandWidth=function(){var t=this._extent,n=this.scale.getExtent(),r=n[1]-n[0]+(this.onBand?1:0);r===0&&(r=1);var i=Math.abs(t[1]-t[0]);return Math.abs(i)/r},e.prototype.calculateCategoryInterval=function(){return vye(this)},e}();function KF(e,t){var n=e[1]-e[0],r=t,i=n/r/2;e[0]+=i,e[1]-=i}function yye(e,t,n,r){var i=t.length;if(!e.onBand||n||!i)return;var o=e.getExtent(),a,s;if(i===1)t[0].coord=o[0],a=t[1]={coord:o[1],tickValue:t[0].tickValue};else{var l=t[i-1].tickValue-t[0].tickValue,u=(t[i-1].coord-t[0].coord)/l;Q(t,function(h){h.coord-=u/2});var c=e.scale.getExtent();s=1+c[1]-t[i-1].tickValue,a={coord:t[i-1].coord+u*s,tickValue:c[1]+1},t.push(a)}var f=o[0]>o[1];d(t[0].coord,o[0])&&(r?t[0].coord=o[0]:t.shift()),r&&d(o[0],t[0].coord)&&t.unshift({coord:o[0]}),d(o[1],a.coord)&&(r?a.coord=o[1]:t.pop()),r&&d(a.coord,o[1])&&t.push({coord:o[1]});function d(h,v){return h=_r(h),v=_r(v),f?h>v:hr[1]&&r.reverse(),r},t.prototype.pointToData=function(n,r){return this.coordToData(this.toLocalCoord(n[this.dim==="x"?0:1]),r)},t.prototype.setCategorySortInfo=function(n){if(this.type!=="category")return!1;this.model.option.categorySortInfo=n,this.scale.setSortInfo(n)},t}(mye);function EA(e,t,n){n=n||{};var r=e.coordinateSystem,i=t.axis,o={},a=i.getAxesOnZeroOf()[0],s=i.position,l=a?"onZero":s,u=i.dim,c=r.getRect(),f=[c.x,c.x+c.width,c.y,c.y+c.height],d={left:0,right:1,top:0,bottom:1,onZero:2},h=t.get("offset")||0,v=u==="x"?[f[2]-h,f[3]+h]:[f[0]-h,f[1]+h];if(a){var m=a.toGlobalCoord(a.dataToCoord(0));v[d.onZero]=Math.max(Math.min(m,v[1]),v[0])}o.position=[u==="y"?v[d[l]]:f[0],u==="x"?v[d[l]]:f[3]],o.rotation=Math.PI/2*(u==="x"?0:1);var y={top:-1,bottom:1,left:-1,right:1};o.labelDirection=o.tickDirection=o.nameDirection=y[s],o.labelOffset=a?v[d[s]]-v[d.onZero]:0,t.get(["axisTick","inside"])&&(o.tickDirection=-o.tickDirection),yg(n.labelInside,t.get(["axisLabel","inside"]))&&(o.labelDirection=-o.labelDirection);var _=t.get(["axisLabel","rotate"]);return o.labelRotate=l==="top"?-_:_,o.z2=1,o}function ZF(e){return e.get("coordinateSystem")==="cartesian2d"}function qF(e){var t={xAxisModel:null,yAxisModel:null};return Q(t,function(n,r){var i=r.replace(/Model$/,""),o=e.getReferringComponents(i,Pa).models[0];t[r]=o}),t}var JT=Math.log;function bye(e,t,n){var r=Ph.prototype,i=r.getTicks.call(n),o=r.getTicks.call(n,!0),a=i.length-1,s=r.getInterval.call(n),l=V6(e,t),u=l.extent,c=l.fixMin,f=l.fixMax;if(e.type==="log"){var d=JT(e.base);u=[JT(u[0])/d,JT(u[1])/d]}e.setExtent(u[0],u[1]),e.calcNiceExtent({splitNumber:a,fixMin:c,fixMax:f});var h=r.getExtent.call(e);c&&(u[0]=h[0]),f&&(u[1]=h[1]);var v=r.getInterval.call(e),m=u[0],y=u[1];if(c&&f)v=(y-m)/a;else if(c)for(y=u[0]+v*a;yu[0]&&isFinite(m)&&isFinite(u[0]);)v=qT(v),m=u[1]-v*a;else{var _=e.getTicks().length-1;_>a&&(v=qT(v));var b=v*a;y=Math.ceil(u[1]/v)*v,m=_r(y-b),m<0&&u[0]>=0?(m=0,y=_r(b)):y>0&&u[1]<=0&&(y=0,m=-_r(b))}var w=(i[0].value-o[0].value)/s,S=(i[a].value-o[a].value)/s;r.setExtent.call(e,m+v*w,y+v*S),r.setInterval.call(e,v),(w||S)&&r.setNiceExtent.call(e,m+v,y-v)}var Sye=function(){function e(t,n,r){this.type="grid",this._coordsMap={},this._coordsList=[],this._axesMap={},this._axesList=[],this.axisPointerEnabled=!0,this.dimensions=CA,this._initCartesian(t,n,r),this.model=t}return e.prototype.getRect=function(){return this._rect},e.prototype.update=function(t,n){var r=this._axesMap;this._updateScale(t,this.model);function i(a){var s,l=Kn(a),u=l.length;if(u){for(var c=[],f=u-1;f>=0;f--){var d=+l[f],h=a[d],v=h.model,m=h.scale;TA(m)&&v.get("alignTicks")&&v.get("interval")==null?c.push(h):(jF(m,v),TA(m)&&(s=h))}c.length&&(s||(s=c.pop(),jF(s.scale,s.model)),Q(c,function(y){bye(y.scale,y.model,s.scale)}))}}i(r.x),i(r.y);var o={};Q(r.x,function(a){JF(r,"y",a,o)}),Q(r.y,function(a){JF(r,"x",a,o)}),this.resize(this.model,n)},e.prototype.resize=function(t,n,r){var i=t.getBoxLayoutParams(),o=!r&&t.get("containLabel"),a=k1(i,{width:n.getWidth(),height:n.getHeight()});this._rect=a;var s=this._axesList;l(),o&&(Q(s,function(u){if(!u.model.get(["axisLabel","inside"])){var c=iye(u);if(c){var f=u.isHorizontal()?"height":"width",d=u.model.get(["axisLabel","margin"]);a[f]-=c[f]+d,u.position==="top"?a.y+=c.height+d:u.position==="left"&&(a.x+=c.width+d)}}}),l()),Q(this._coordsList,function(u){u.calcAffineTransform()});function l(){Q(s,function(u){var c=u.isHorizontal(),f=c?[0,a.width]:[0,a.height],d=u.inverse?1:0;u.setExtent(f[d],f[1-d]),wye(u,c?a.x:a.y)})}},e.prototype.getAxis=function(t,n){var r=this._axesMap[t];if(r!=null)return r[n||0]},e.prototype.getAxes=function(){return this._axesList.slice()},e.prototype.getCartesian=function(t,n){if(t!=null&&n!=null){var r="x"+t+"y"+n;return this._coordsMap[r]}Ct(t)&&(n=t.yAxisIndex,t=t.xAxisIndex);for(var i=0,o=this._coordsList;i0?"top":"bottom",o="center"):A1(i-fu)?(a=r>0?"bottom":"top",o="center"):(a="middle",i>0&&i0?"right":"left":o=r>0?"left":"right"),{rotation:i,textAlign:o,textVerticalAlign:a}},e.makeAxisEventDataBase=function(t){var n={componentType:t.mainType,componentIndex:t.componentIndex};return n[t.mainType+"Index"]=t.componentIndex,n},e.isLabelSilent=function(t){var n=t.get("tooltip");return t.get("silent")||!(t.get("triggerEvent")||n&&n.show)},e}(),e3={axisLine:function(e,t,n,r){var i=t.get(["axisLine","show"]);if(i==="auto"&&e.handleAutoShown&&(i=e.handleAutoShown("axisLine")),!!i){var o=t.axis.getExtent(),a=r.transform,s=[o[0],0],l=[o[1],0],u=s[0]>l[0];a&&(na(s,s,a),na(l,l,a));var c=Ke({lineCap:"round"},t.getModel(["axisLine","lineStyle"]).getLineStyle()),f=new Iu({shape:{x1:s[0],y1:s[1],x2:l[0],y2:l[1]},style:c,strokeContainThreshold:e.strokeContainThreshold||5,silent:!0,z2:1});wg(f.shape,f.style.lineWidth),f.anid="line",n.add(f);var d=t.get(["axisLine","symbol"]);if(d!=null){var h=t.get(["axisLine","symbolSize"]);dt(d)&&(d=[d,d]),(dt(h)||Zn(h))&&(h=[h,h]);var v=FH(t.get(["axisLine","symbolOffset"])||0,h),m=h[0],y=h[1];Q([{rotate:e.rotation+Math.PI/2,offset:v[0],r:0},{rotate:e.rotation-Math.PI/2,offset:v[1],r:Math.sqrt((s[0]-l[0])*(s[0]-l[0])+(s[1]-l[1])*(s[1]-l[1]))}],function(_,b){if(d[b]!=="none"&&d[b]!=null){var w=lh(d[b],-m/2,-y/2,m,y,c.stroke,!0),S=_.r+_.offset,C=u?l:s;w.attr({rotation:_.rotate,x:C[0]+S*Math.cos(e.rotation),y:C[1]-S*Math.sin(e.rotation),silent:!0,z2:11}),n.add(w)}})}}},axisTickLabel:function(e,t,n,r){var i=Cye(n,r,t,e),o=Aye(n,r,t,e);if(Tye(t,o,i),Eye(n,r,t,e.tickDirection),t.get(["axisLabel","hideOverlap"])){var a=yve(Rt(o,function(s){return{label:s,priority:s.z2,defaultAttr:{ignore:s.ignore}}}));_ve(a)}},axisName:function(e,t,n,r){var i=yg(e.axisName,t.get("name"));if(i){var o=t.get("nameLocation"),a=e.nameDirection,s=t.getModel("nameTextStyle"),l=t.get("nameGap")||0,u=t.axis.getExtent(),c=u[0]>u[1]?-1:1,f=[o==="start"?u[0]-c*l:o==="end"?u[1]+c*l:(u[0]+u[1])/2,n3(o)?e.labelOffset+a*l:0],d,h=t.get("nameRotate");h!=null&&(h=h*fu/180);var v;n3(o)?d=Su.innerTextLayout(e.rotation,h??e.rotation,a):(d=xye(e.rotation,o,h||0,u),v=e.axisNameAvailableWidth,v!=null&&(v=Math.abs(v/Math.sin(d.rotation)),!isFinite(v)&&(v=null)));var m=s.getFont(),y=t.get("nameTruncate",!0)||{},_=y.ellipsis,b=yg(e.nameTruncateMaxWidth,y.maxWidth,v),w=new ao({x:f[0],y:f[1],rotation:d.rotation,silent:Su.isLabelSilent(t),style:oh(s,{text:i,font:m,overflow:"truncate",width:b,ellipsis:_,fill:s.getTextColor()||t.get(["axisLine","lineStyle","color"]),align:s.get("align")||d.textAlign,verticalAlign:s.get("verticalAlign")||d.textVerticalAlign}),z2:1});if(cS({el:w,componentModel:t,itemName:i}),w.__fullText=i,w.anid="name",t.get("triggerEvent")){var S=Su.makeAxisEventDataBase(t);S.targetType="axisName",S.name=i,Mn(w).eventData=S}r.add(w),w.updateTransform(),n.add(w),w.decomposeTransform()}}};function xye(e,t,n,r){var i=bU(n-e),o,a,s=r[0]>r[1],l=t==="start"&&!s||t!=="start"&&s;return A1(i-fu/2)?(a=l?"bottom":"top",o="center"):A1(i-fu*1.5)?(a=l?"top":"bottom",o="center"):(a="middle",ifu/2?o=l?"left":"right":o=l?"right":"left"),{rotation:i,textAlign:o,textVerticalAlign:a}}function Tye(e,t,n){if(!U6(e.axis)){var r=e.get(["axisLabel","showMinLabel"]),i=e.get(["axisLabel","showMaxLabel"]);t=t||[],n=n||[];var o=t[0],a=t[1],s=t[t.length-1],l=t[t.length-2],u=n[0],c=n[1],f=n[n.length-1],d=n[n.length-2];r===!1?(Ho(o),Ho(u)):t3(o,a)&&(r?(Ho(a),Ho(c)):(Ho(o),Ho(u))),i===!1?(Ho(s),Ho(f)):t3(l,s)&&(i?(Ho(l),Ho(d)):(Ho(s),Ho(f)))}}function Ho(e){e&&(e.ignore=!0)}function t3(e,t){var n=e&&e.getBoundingRect().clone(),r=t&&t.getBoundingRect().clone();if(!(!n||!r)){var i=lR([]);return uR(i,i,-e.rotation),n.applyTransform(Ud([],i,e.getLocalTransform())),r.applyTransform(Ud([],i,t.getLocalTransform())),n.intersect(r)}}function n3(e){return e==="middle"||e==="center"}function K6(e,t,n,r,i){for(var o=[],a=[],s=[],l=0;l=0||e===t}function Mye(e){var t=oP(e);if(t){var n=t.axisPointerModel,r=t.axis.scale,i=n.option,o=n.get("status"),a=n.get("value");a!=null&&(a=r.parse(a));var s=AA(n);o==null&&(i.status=s?"show":"hide");var l=r.getExtent().slice();l[0]>l[1]&&l.reverse(),(a==null||a>l[1])&&(a=l[1]),as)return!0;if(a){var l=oP(t).seriesDataCount,u=i.getExtent();return Math.abs(u[0]-u[1])/l>s}return!1}return r===!0},e.prototype.makeElOption=function(t,n,r,i,o){},e.prototype.createPointerEl=function(t,n,r,i){var o=n.pointer;if(o){var a=Dc(t).pointerEl=new yde[o.type](o3(n.pointer));t.add(a)}},e.prototype.createLabelEl=function(t,n,r,i){if(n.label){var o=Dc(t).labelEl=new ao(o3(n.label));t.add(o),s3(o,i)}},e.prototype.updatePointerEl=function(t,n,r){var i=Dc(t).pointerEl;i&&n.pointer&&(i.setStyle(n.pointer.style),r(i,{shape:n.pointer.shape}))},e.prototype.updateLabelEl=function(t,n,r,i){var o=Dc(t).labelEl;o&&(o.setStyle(n.label.style),r(o,{x:n.label.x,y:n.label.y}),s3(o,i))},e.prototype._renderHandle=function(t){if(!(this._dragging||!this.updateHandleTransform)){var n=this._axisPointerModel,r=this._api.getZr(),i=this._handle,o=n.getModel("handle"),a=n.get("status");if(!o.get("show")||!a||a==="hide"){i&&r.remove(i),this._handle=null;return}var s;this._handle||(s=!0,i=this._handle=OR(o.get("icon"),{cursor:"move",draggable:!0,onmousemove:function(u){KH(u.event)},onmousedown:tC(this._onHandleDragMove,this,0,0),drift:tC(this._onHandleDragMove,this),ondragend:tC(this._onHandleDragEnd,this)}),r.add(i)),l3(i,n,!1),i.setStyle(o.getItemStyle(null,["color","borderColor","borderWidth","opacity","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY"]));var l=o.get("size");lt(l)||(l=[l,l]),i.scaleX=l[0]/2,i.scaleY=l[1]/2,XH(this,"_doDispatchAxisPointer",o.get("throttle")||0,"fixRate"),this._moveHandleToValue(t,s)}},e.prototype._moveHandleToValue=function(t,n){a3(this._axisPointerModel,!n&&this._moveAnimation,this._handle,nC(this.getHandleTransform(t,this._axisModel,this._axisPointerModel)))},e.prototype._onHandleDragMove=function(t,n){var r=this._handle;if(r){this._dragging=!0;var i=this.updateHandleTransform(nC(r),[t,n],this._axisModel,this._axisPointerModel);this._payloadInfo=i,r.stopAnimation(),r.attr(nC(i)),Dc(r).lastProp=null,this._doDispatchAxisPointer()}},e.prototype._doDispatchAxisPointer=function(){var t=this._handle;if(t){var n=this._payloadInfo,r=this._axisModel;this._api.dispatchAction({type:"updateAxisPointer",x:n.cursorPoint[0],y:n.cursorPoint[1],tooltipOption:n.tooltipOption,axesInfo:[{axisDim:r.axis.dim,axisIndex:r.componentIndex}]})}},e.prototype._onHandleDragEnd=function(){this._dragging=!1;var t=this._handle;if(t){var n=this._axisPointerModel.get("value");this._moveHandleToValue(n),this._api.dispatchAction({type:"hideTip"})}},e.prototype.clear=function(t){this._lastValue=null,this._lastStatus=null;var n=t.getZr(),r=this._group,i=this._handle;n&&r&&(this._lastGraphicKey=null,r&&n.remove(r),i&&n.remove(i),this._group=null,this._handle=null,this._payloadInfo=null),fA(this,"_doDispatchAxisPointer")},e.prototype.doClear=function(){},e.prototype.buildLabel=function(t,n,r){return r=r||0,{x:t[r],y:t[1-r],width:n[r],height:n[1-r]}},e}();function a3(e,t,n,r){Q6(Dc(n).lastProp,r)||(Dc(n).lastProp=r,t?Ru(n,r,e):(n.stopAnimation(),n.attr(r)))}function Q6(e,t){if(Ct(e)&&Ct(t)){var n=!0;return Q(t,function(r,i){n=n&&Q6(e[i],r)}),!!n}else return e===t}function s3(e,t){e[t.get(["label","show"])?"show":"hide"]()}function nC(e){return{x:e.x||0,y:e.y||0,rotation:e.rotation||0}}function l3(e,t,n){var r=t.get("z"),i=t.get("zlevel");e&&e.traverse(function(o){o.type!=="group"&&(r!=null&&(o.z=r),i!=null&&(o.zlevel=i),o.silent=n)})}function zye(e){var t=e.get("type"),n=e.getModel(t+"Style"),r;return t==="line"?(r=n.getLineStyle(),r.fill=null):t==="shadow"&&(r=n.getAreaStyle(),r.stroke=null),r}function Wye(e,t,n,r,i){var o=n.get("value"),a=e8(o,t.axis,t.ecModel,n.get("seriesDataIndices"),{precision:n.get(["label","precision"]),formatter:n.get(["label","formatter"])}),s=n.getModel("label"),l=bS(s.get("padding")||0),u=s.getFont(),c=fR(a,u),f=i.position,d=c.width+l[1]+l[3],h=c.height+l[0]+l[2],v=i.align;v==="right"&&(f[0]-=d),v==="center"&&(f[0]-=d/2);var m=i.verticalAlign;m==="bottom"&&(f[1]-=h),m==="middle"&&(f[1]-=h/2),jye(f,d,h,r);var y=s.get("backgroundColor");(!y||y==="auto")&&(y=t.get(["axisLine","lineStyle","color"])),e.label={x:f[0],y:f[1],style:oh(s,{text:a,font:u,fill:s.getTextColor(),padding:l,backgroundColor:y}),z2:10}}function jye(e,t,n,r){var i=r.getWidth(),o=r.getHeight();e[0]=Math.min(e[0]+t,i)-t,e[1]=Math.min(e[1]+n,o)-n,e[0]=Math.max(e[0],0),e[1]=Math.max(e[1],0)}function e8(e,t,n,r,i){e=t.scale.parse(e);var o=t.scale.getLabel({value:e},{precision:i.precision}),a=i.formatter;if(a){var s={value:rP(t,{value:e}),axisDimension:t.dim,axisIndex:t.index,seriesData:[]};Q(r,function(l){var u=n.getSeriesByIndex(l.seriesIndex),c=l.dataIndexInside,f=u&&u.getDataParams(c);f&&s.seriesData.push(f)}),dt(a)?o=a.replace("{value}",o):Vt(a)&&(o=a(s))}return o}function t8(e,t,n){var r=Vd();return uR(r,r,n.rotation),NE(r,r,n.position),PR([e.dataToCoord(t),(n.labelOffset||0)+(n.labelDirection||1)*(n.labelMargin||0)],r)}function Yye(e,t,n,r,i,o){var a=Su.innerTextLayout(n.rotation,0,n.labelDirection);n.labelMargin=i.get(["label","margin"]),Wye(t,r,i,o,{position:t8(r.axis,e,n),align:a.textAlign,verticalAlign:a.textVerticalAlign})}function Xye(e,t,n){return n=n||0,{x1:e[n],y1:e[1-n],x2:t[n],y2:t[1-n]}}function Kye(e,t,n){return n=n||0,{x:e[n],y:e[1-n],width:t[n],height:t[1-n]}}var Zye=function(e){ot(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.makeElOption=function(n,r,i,o,a){var s=i.axis,l=s.grid,u=o.get("type"),c=u3(l,s).getOtherAxis(s).getGlobalExtent(),f=s.toGlobalCoord(s.dataToCoord(r,!0));if(u&&u!=="none"){var d=zye(o),h=qye[u](s,f,c);h.style=d,n.graphicKey=h.type,n.pointer=h}var v=EA(l.model,i);Yye(r,n,v,i,o,a)},t.prototype.getHandleTransform=function(n,r,i){var o=EA(r.axis.grid.model,r,{labelInside:!1});o.labelMargin=i.get(["handle","margin"]);var a=t8(r.axis,n,o);return{x:a[0],y:a[1],rotation:o.rotation+(o.labelDirection<0?Math.PI:0)}},t.prototype.updateHandleTransform=function(n,r,i,o){var a=i.axis,s=a.grid,l=a.getGlobalExtent(!0),u=u3(s,a).getOtherAxis(a).getGlobalExtent(),c=a.dim==="x"?0:1,f=[n.x,n.y];f[c]+=r[c],f[c]=Math.min(l[1],f[c]),f[c]=Math.max(l[0],f[c]);var d=(u[1]+u[0])/2,h=[d,d];h[c]=f[c];var v=[{verticalAlign:"middle"},{align:"center"}];return{x:f[0],y:f[1],rotation:n.rotation,cursorPoint:h,tooltipOption:v[c]}},t}(Gye);function u3(e,t){var n={};return n[t.dim+"AxisIndex"]=t.index,e.getCartesian(n)}var qye={line:function(e,t,n){var r=Xye([t,n[0]],[t,n[1]],c3(e));return{type:"Line",subPixelOptimize:!0,shape:r}},shadow:function(e,t,n){var r=Math.max(1,e.getBandWidth()),i=n[1]-n[0];return{type:"Rect",shape:Kye([t-r/2,n[0]],[r,i],c3(e))}}};function c3(e){return e.dim==="x"?0:1}var Jye=function(e){ot(t,e);function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.type=t.type,n}return t.type="axisPointer",t.defaultOption={show:"auto",z:50,type:"line",snap:!1,triggerTooltip:!0,triggerEmphasis:!0,value:null,status:null,link:[],animation:null,animationDurationUpdate:200,lineStyle:{color:"#B9BEC9",width:1,type:"dashed"},shadowStyle:{color:"rgba(210,219,238,0.2)"},label:{show:!0,formatter:null,precision:"auto",margin:3,color:"#fff",padding:[5,7,5,7],backgroundColor:"auto",borderColor:null,borderWidth:0,borderRadius:3},handle:{show:!1,icon:"M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z",size:45,margin:50,color:"#333",shadowBlur:3,shadowColor:"#aaa",shadowOffsetX:0,shadowOffsetY:2,throttle:40}},t}(An),Qs=Ar(),Qye=Q;function n8(e,t,n){if(!Dt.node){var r=t.getZr();Qs(r).records||(Qs(r).records={}),e0e(r,t);var i=Qs(r).records[e]||(Qs(r).records[e]={});i.handler=n}}function e0e(e,t){if(Qs(e).initialized)return;Qs(e).initialized=!0,n("click",Dr(f3,"click")),n("mousemove",Dr(f3,"mousemove")),n("globalout",n0e);function n(r,i){e.on(r,function(o){var a=r0e(t);Qye(Qs(e).records,function(s){s&&i(s,o,a.dispatchAction)}),t0e(a.pendings,t)})}}function t0e(e,t){var n=e.showTip.length,r=e.hideTip.length,i;n?i=e.showTip[n-1]:r&&(i=e.hideTip[r-1]),i&&(i.dispatchAction=null,t.dispatchAction(i))}function n0e(e,t,n){e.handler("leave",null,n)}function f3(e,t,n,r){t.handler(e,n,r)}function r0e(e){var t={showTip:[],hideTip:[]},n=function(r){var i=t[r.type];i?i.push(r):(r.dispatchAction=n,e.dispatchAction(r))};return{dispatchAction:n,pendings:t}}function RA(e,t){if(!Dt.node){var n=t.getZr(),r=(Qs(n).records||{})[e];r&&(Qs(n).records[e]=null)}}var i0e=function(e){ot(t,e);function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.type=t.type,n}return t.prototype.render=function(n,r,i){var o=r.getComponent("tooltip"),a=n.get("triggerOn")||o&&o.get("triggerOn")||"mousemove|click";n8("axisPointer",i,function(s,l,u){a!=="none"&&(s==="leave"||a.indexOf(s)>=0)&&u({type:"updateAxisPointer",currTrigger:s,x:l&&l.offsetX,y:l&&l.offsetY})})},t.prototype.remove=function(n,r){RA("axisPointer",r)},t.prototype.dispose=function(n,r){RA("axisPointer",r)},t.type="axisPointer",t}(hs);function r8(e,t){var n=[],r=e.seriesIndex,i;if(r==null||!(i=t.getSeriesByIndex(r)))return{point:[]};var o=i.getData(),a=yf(o,e);if(a==null||a<0||lt(a))return{point:[]};var s=o.getItemGraphicEl(a),l=i.coordinateSystem;if(i.getTooltipPosition)n=i.getTooltipPosition(a)||[];else if(l&&l.dataToPoint)if(e.isStacked){var u=l.getBaseAxis(),c=l.getOtherAxis(u),f=c.dim,d=u.dim,h=f==="x"||f==="radius"?1:0,v=o.mapDimension(d),m=[];m[h]=o.get(v,a),m[1-h]=o.get(o.getCalculationInfo("stackResultDimension"),a),n=l.dataToPoint(m)||[]}else n=l.dataToPoint(o.getValues(Rt(l.dimensions,function(_){return o.mapDimension(_)}),a))||[];else if(s){var y=s.getBoundingRect().clone();y.applyTransform(s.transform),n=[y.x+y.width/2,y.y+y.height/2]}return{point:n,el:s}}var d3=Ar();function o0e(e,t,n){var r=e.currTrigger,i=[e.x,e.y],o=e,a=e.dispatchAction||Xn(n.dispatchAction,n),s=t.getComponent("axisPointer").coordSysAxesInfo;if(s){D_(i)&&(i=r8({seriesIndex:o.seriesIndex,dataIndex:o.dataIndex},t).point);var l=D_(i),u=o.axesInfo,c=s.axesInfo,f=r==="leave"||D_(i),d={},h={},v={list:[],map:{}},m={showPointer:Dr(s0e,h),showTooltip:Dr(l0e,v)};Q(s.coordSysMap,function(_,b){var w=l||_.containPoint(i);Q(s.coordSysAxesInfo[b],function(S,C){var T=S.axis,A=d0e(u,S);if(!f&&w&&(!u||A)){var P=A&&A.value;P==null&&!l&&(P=T.pointToData(i)),P!=null&&h3(S,P,m,!1,d)}})});var y={};return Q(c,function(_,b){var w=_.linkGroup;w&&!h[b]&&Q(w.axesInfo,function(S,C){var T=h[C];if(S!==_&&T){var A=T.value;w.mapper&&(A=_.axis.scale.parse(w.mapper(A,p3(S),p3(_)))),y[_.key]=A}})}),Q(y,function(_,b){h3(c[b],_,m,!0,d)}),u0e(h,c,d),c0e(v,i,e,a),f0e(c,a,n),d}}function h3(e,t,n,r,i){var o=e.axis;if(!(o.scale.isBlank()||!o.containData(t))){if(!e.involveSeries){n.showPointer(e,t);return}var a=a0e(t,e),s=a.payloadBatch,l=a.snapToValue;s[0]&&i.seriesIndex==null&&Ke(i,s[0]),!r&&e.snap&&o.containData(l)&&l!=null&&(t=l),n.showPointer(e,t,s),n.showTooltip(e,a,l)}}function a0e(e,t){var n=t.axis,r=n.dim,i=e,o=[],a=Number.MAX_VALUE,s=-1;return Q(t.seriesModels,function(l,u){var c=l.getData().mapDimensionsAll(r),f,d;if(l.getAxisTooltipData){var h=l.getAxisTooltipData(c,e,n);d=h.dataIndices,f=h.nestestValue}else{if(d=l.getData().indicesOfNearest(c[0],e,n.type==="category"?.5:null),!d.length)return;f=l.getData().get(c[0],d[0])}if(!(f==null||!isFinite(f))){var v=e-f,m=Math.abs(v);m<=a&&((m=0&&s<0)&&(a=m,s=v,i=f,o.length=0),Q(d,function(y){o.push({seriesIndex:l.seriesIndex,dataIndexInside:y,dataIndex:l.getData().getRawIndex(y)})}))}}),{payloadBatch:o,snapToValue:i}}function s0e(e,t,n,r){e[t.key]={value:n,payloadBatch:r}}function l0e(e,t,n,r){var i=n.payloadBatch,o=t.axis,a=o.model,s=t.axisPointerModel;if(!(!t.triggerTooltip||!i.length)){var l=t.coordSys.model,u=Og(l),c=e.map[u];c||(c=e.map[u]={coordSysId:l.id,coordSysIndex:l.componentIndex,coordSysType:l.type,coordSysMainType:l.mainType,dataByAxis:[]},e.list.push(c)),c.dataByAxis.push({axisDim:o.dim,axisIndex:a.componentIndex,axisType:a.type,axisId:a.id,value:r,valueLabelOpt:{precision:s.get(["label","precision"]),formatter:s.get(["label","formatter"])},seriesDataIndices:i.slice()})}}function u0e(e,t,n){var r=n.axesInfo=[];Q(t,function(i,o){var a=i.axisPointerModel.option,s=e[o];s?(!i.useHandle&&(a.status="show"),a.value=s.value,a.seriesDataIndices=(s.payloadBatch||[]).slice()):!i.useHandle&&(a.status="hide"),a.status==="show"&&r.push({axisDim:i.axis.dim,axisIndex:i.axis.model.componentIndex,value:a.value})})}function c0e(e,t,n,r){if(D_(t)||!e.list.length){r({type:"hideTip"});return}var i=((e.list[0].dataByAxis[0]||{}).seriesDataIndices||[])[0]||{};r({type:"showTip",escapeConnect:!0,x:t[0],y:t[1],tooltipOption:n.tooltipOption,position:n.position,dataIndexInside:i.dataIndexInside,dataIndex:i.dataIndex,seriesIndex:i.seriesIndex,dataByCoordSys:e.list})}function f0e(e,t,n){var r=n.getZr(),i="axisPointerLastHighlights",o=d3(r)[i]||{},a=d3(r)[i]={};Q(e,function(u,c){var f=u.axisPointerModel.option;f.status==="show"&&u.triggerEmphasis&&Q(f.seriesDataIndices,function(d){var h=d.seriesIndex+" | "+d.dataIndex;a[h]=d})});var s=[],l=[];Q(o,function(u,c){!a[c]&&l.push(u)}),Q(a,function(u,c){!o[c]&&s.push(u)}),l.length&&n.dispatchAction({type:"downplay",escapeConnect:!0,notBlur:!0,batch:l}),s.length&&n.dispatchAction({type:"highlight",escapeConnect:!0,notBlur:!0,batch:s})}function d0e(e,t){for(var n=0;n<(e||[]).length;n++){var r=e[n];if(t.axis.dim===r.axisDim&&t.axis.model.componentIndex===r.axisIndex)return r}}function p3(e){var t=e.axis.model,n={},r=n.axisDim=e.axis.dim;return n.axisIndex=n[r+"AxisIndex"]=t.componentIndex,n.axisName=n[r+"AxisName"]=t.name,n.axisId=n[r+"AxisId"]=t.id,n}function D_(e){return!e||e[0]==null||isNaN(e[0])||e[1]==null||isNaN(e[1])}function i8(e){Z6.registerAxisPointerClass("CartesianAxisPointer",Zye),e.registerComponentModel(Jye),e.registerComponentView(i0e),e.registerPreprocessor(function(t){if(t){(!t.axisPointer||t.axisPointer.length===0)&&(t.axisPointer={});var n=t.axisPointer.link;n&&!lt(n)&&(t.axisPointer.link=[n])}}),e.registerProcessor(e.PRIORITY.PROCESSOR.STATISTIC,function(t,n){t.getComponent("axisPointer").coordSysAxesInfo=Iye(t,n)}),e.registerAction({type:"updateAxisPointer",event:"updateAxisPointer",update:":updateAxisPointer"},o0e)}function h0e(e){Ou(Hye),Ou(i8)}function p0e(e,t){var n=bS(t.get("padding")),r=t.getItemStyle(["color","opacity"]);return r.fill=t.get("backgroundColor"),e=new zr({shape:{x:e.x-n[3],y:e.y-n[0],width:e.width+n[1]+n[3],height:e.height+n[0]+n[2],r:t.get("borderRadius")},style:r,silent:!0,z2:-1}),e}var v0e=function(e){ot(t,e);function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.type=t.type,n}return t.type="tooltip",t.dependencies=["axisPointer"],t.defaultOption={z:60,show:!0,showContent:!0,trigger:"item",triggerOn:"mousemove|click",alwaysShowContent:!1,displayMode:"single",renderMode:"auto",confine:null,showDelay:0,hideDelay:100,transitionDuration:.4,enterable:!1,backgroundColor:"#fff",shadowBlur:10,shadowColor:"rgba(0, 0, 0, .2)",shadowOffsetX:1,shadowOffsetY:2,borderRadius:4,borderWidth:1,padding:null,extraCssText:"",axisPointer:{type:"line",axis:"auto",animation:"auto",animationDurationUpdate:200,animationEasingUpdate:"exponentialOut",crossStyle:{color:"#999",width:1,type:"dashed",textStyle:{}}},textStyle:{color:"#666",fontSize:14}},t}(An);function o8(e){var t=e.get("confine");return t!=null?!!t:e.get("renderMode")==="richText"}function a8(e){if(Dt.domSupported){for(var t=document.documentElement.style,n=0,r=e.length;n-1?(s+="top:50%",l+="translateY(-50%) rotate("+(u=o==="left"?-225:-45)+"deg)"):(s+="left:50%",l+="translateX(-50%) rotate("+(u=o==="top"?225:45)+"deg)");var c=u*Math.PI/180,f=a+i,d=f*Math.abs(Math.cos(c))+f*Math.abs(Math.sin(c)),h=Math.round(((d-Math.SQRT2*i)/2+Math.SQRT2*i-(d-f)/2)*100)/100;s+=";"+o+":-"+h+"px";var v=t+" solid "+i+"px;",m=["position:absolute;width:"+a+"px;height:"+a+"px;z-index:-1;",s+";"+l+";","border-bottom:"+v,"border-right:"+v,"background-color:"+r+";"];return'
'}function w0e(e,t){var n="cubic-bezier(0.23,1,0.32,1)",r=" "+e/2+"s "+n,i="opacity"+r+",visibility"+r;return t||(r=" "+e+"s "+n,i+=Dt.transformSupported?","+aP+r:",left"+r+",top"+r),y0e+":"+i}function v3(e,t,n){var r=e.toFixed(0)+"px",i=t.toFixed(0)+"px";if(!Dt.transformSupported)return n?"top:"+i+";left:"+r+";":[["top",i],["left",r]];var o=Dt.transform3dSupported,a="translate"+(o?"3d":"")+"("+r+","+i+(o?",0":"")+")";return n?"top:0;left:0;"+aP+":"+a+";":[["top",0],["left",0],[s8,a]]}function x0e(e){var t=[],n=e.get("fontSize"),r=e.getTextColor();r&&t.push("color:"+r),t.push("font:"+e.getFont());var i=nn(e.get("lineHeight"),Math.round(n*3/2));n&&t.push("line-height:"+i+"px");var o=e.get("textShadowColor"),a=e.get("textShadowBlur")||0,s=e.get("textShadowOffsetX")||0,l=e.get("textShadowOffsetY")||0;return o&&a&&t.push("text-shadow:"+s+"px "+l+"px "+a+"px "+o),Q(["decoration","align"],function(u){var c=e.get(u);c&&t.push("text-"+u+":"+c)}),t.join(";")}function T0e(e,t,n){var r=[],i=e.get("transitionDuration"),o=e.get("backgroundColor"),a=e.get("shadowBlur"),s=e.get("shadowColor"),l=e.get("shadowOffsetX"),u=e.get("shadowOffsetY"),c=e.getModel("textStyle"),f=kH(e,"html"),d=l+"px "+u+"px "+a+"px "+s;return r.push("box-shadow:"+d),t&&i&&r.push(w0e(i,n)),o&&r.push("background-color:"+o),Q(["width","color","radius"],function(h){var v="border-"+h,m=IH(v),y=e.get(m);y!=null&&r.push(v+":"+y+(h==="color"?"":"px"))}),r.push(x0e(c)),f!=null&&r.push("padding:"+bS(f).join("px ")+"px"),r.join(";")+";"}function g3(e,t,n,r,i){var o=t&&t.painter;if(n){var a=o&&o.getViewportRoot();a&&She(e,a,n,r,i)}else{e[0]=r,e[1]=i;var s=o&&o.getViewportRootOffset();s&&(e[0]+=s.offsetLeft,e[1]+=s.offsetTop)}e[2]=e[0]/t.getWidth(),e[3]=e[1]/t.getHeight()}var C0e=function(){function e(t,n){if(this._show=!1,this._styleCoord=[0,0,0,0],this._enterable=!0,this._alwaysShowContent=!1,this._firstShow=!0,this._longHide=!0,Dt.wxa)return null;var r=document.createElement("div");r.domBelongToZr=!0,this.el=r;var i=this._zr=t.getZr(),o=n.appendTo,a=o&&(dt(o)?document.querySelector(o):mg(o)?o:Vt(o)&&o(t.getDom()));g3(this._styleCoord,i,a,t.getWidth()/2,t.getHeight()/2),(a||t.getDom()).appendChild(r),this._api=t,this._container=a;var s=this;r.onmouseenter=function(){s._enterable&&(clearTimeout(s._hideTimeout),s._show=!0),s._inContent=!0},r.onmousemove=function(l){if(l=l||window.event,!s._enterable){var u=i.handler,c=i.painter.getViewportRoot();Wo(c,l,!0),u.dispatch("mousemove",l)}},r.onmouseleave=function(){s._inContent=!1,s._enterable&&s._show&&s.hideLater(s._hideDelay)}}return e.prototype.update=function(t){if(!this._container){var n=this._api.getDom(),r=m0e(n,"position"),i=n.style;i.position!=="absolute"&&r!=="absolute"&&(i.position="relative")}var o=t.get("alwaysShowContent");o&&this._moveIfResized(),this._alwaysShowContent=o,this.el.className=t.get("className")||""},e.prototype.show=function(t,n){clearTimeout(this._hideTimeout),clearTimeout(this._longHideTimeout);var r=this.el,i=r.style,o=this._styleCoord;r.innerHTML?i.cssText=_0e+T0e(t,!this._firstShow,this._longHide)+v3(o[0],o[1],!0)+("border-color:"+_f(n)+";")+(t.get("extraCssText")||"")+(";pointer-events:"+(this._enterable?"auto":"none")):i.display="none",this._show=!0,this._firstShow=!1,this._longHide=!1},e.prototype.setContent=function(t,n,r,i,o){var a=this.el;if(t==null){a.innerHTML="";return}var s="";if(dt(o)&&r.get("trigger")==="item"&&!o8(r)&&(s=S0e(r,i,o)),dt(t))a.innerHTML=t+s;else if(t){a.innerHTML="",lt(t)||(t=[t]);for(var l=0;l=0?this._tryShow(o,a):i==="leave"&&this._hide(a))},this))},t.prototype._keepShow=function(){var n=this._tooltipModel,r=this._ecModel,i=this._api,o=n.get("triggerOn");if(this._lastX!=null&&this._lastY!=null&&o!=="none"&&o!=="click"){var a=this;clearTimeout(this._refreshUpdateTimeout),this._refreshUpdateTimeout=setTimeout(function(){!i.isDisposed()&&a.manuallyShowTip(n,r,i,{x:a._lastX,y:a._lastY,dataByCoordSys:a._lastDataByCoordSys})})}},t.prototype.manuallyShowTip=function(n,r,i,o){if(!(o.from===this.uid||Dt.node||!i.getDom())){var a=_3(o,i);this._ticket="";var s=o.dataByCoordSys,l=D0e(o,r,i);if(l){var u=l.el.getBoundingRect().clone();u.applyTransform(l.el.transform),this._tryShow({offsetX:u.x+u.width/2,offsetY:u.y+u.height/2,target:l.el,position:o.position,positionDefault:"bottom"},a)}else if(o.tooltip&&o.x!=null&&o.y!=null){var c=A0e;c.x=o.x,c.y=o.y,c.update(),Mn(c).tooltipConfig={name:null,option:o.tooltip},this._tryShow({offsetX:o.x,offsetY:o.y,target:c},a)}else if(s)this._tryShow({offsetX:o.x,offsetY:o.y,position:o.position,dataByCoordSys:s,tooltipOption:o.tooltipOption},a);else if(o.seriesIndex!=null){if(this._manuallyAxisShowTip(n,r,i,o))return;var f=r8(o,r),d=f.point[0],h=f.point[1];d!=null&&h!=null&&this._tryShow({offsetX:d,offsetY:h,target:f.el,position:o.position,positionDefault:"bottom"},a)}else o.x!=null&&o.y!=null&&(i.dispatchAction({type:"updateAxisPointer",x:o.x,y:o.y}),this._tryShow({offsetX:o.x,offsetY:o.y,position:o.position,target:i.getZr().findHover(o.x,o.y).target},a))}},t.prototype.manuallyHideTip=function(n,r,i,o){var a=this._tooltipContent;this._tooltipModel&&a.hideLater(this._tooltipModel.get("hideDelay")),this._lastX=this._lastY=this._lastDataByCoordSys=null,o.from!==this.uid&&this._hide(_3(o,i))},t.prototype._manuallyAxisShowTip=function(n,r,i,o){var a=o.seriesIndex,s=o.dataIndex,l=r.getComponent("axisPointer").coordSysAxesInfo;if(!(a==null||s==null||l==null)){var u=r.getSeriesByIndex(a);if(u){var c=u.getData(),f=Ap([c.getItemModel(s),u,(u.coordinateSystem||{}).model],this._tooltipModel);if(f.get("trigger")==="axis")return i.dispatchAction({type:"updateAxisPointer",seriesIndex:a,dataIndex:s,position:o.position}),!0}}},t.prototype._tryShow=function(n,r){var i=n.target,o=this._tooltipModel;if(o){this._lastX=n.offsetX,this._lastY=n.offsetY;var a=n.dataByCoordSys;if(a&&a.length)this._showAxisTooltip(a,n);else if(i){var s=Mn(i);if(s.ssrType==="legend")return;this._lastDataByCoordSys=null;var l,u;qp(i,function(c){if(Mn(c).dataIndex!=null)return l=c,!0;if(Mn(c).tooltipConfig!=null)return u=c,!0},!0),l?this._showSeriesItemTooltip(n,l,r):u?this._showComponentItemTooltip(n,u,r):this._hide(r)}else this._lastDataByCoordSys=null,this._hide(r)}},t.prototype._showOrMove=function(n,r){var i=n.get("showDelay");r=Xn(r,this),clearTimeout(this._showTimout),i>0?this._showTimout=setTimeout(r,i):r()},t.prototype._showAxisTooltip=function(n,r){var i=this._ecModel,o=this._tooltipModel,a=[r.offsetX,r.offsetY],s=Ap([r.tooltipOption],o),l=this._renderMode,u=[],c=Eg("section",{blocks:[],noHeader:!0}),f=[],d=new IT;Q(n,function(b){Q(b.dataByAxis,function(w){var S=i.getComponent(w.axisDim+"Axis",w.axisIndex),C=w.value;if(!(!S||C==null)){var T=e8(C,S.axis,i,w.seriesDataIndices,w.valueLabelOpt),A=Eg("section",{header:T,noHeader:!ns(T),sortBlocks:!0,blocks:[]});c.blocks.push(A),Q(w.seriesDataIndices,function(P){var I=i.getSeriesByIndex(P.seriesIndex),R=P.dataIndexInside,O=I.getDataParams(R);if(!(O.dataIndex<0)){O.axisDim=w.axisDim,O.axisIndex=w.axisIndex,O.axisType=w.axisType,O.axisId=w.axisId,O.axisValue=rP(S.axis,{value:C}),O.axisValueLabel=T,O.marker=d.makeTooltipMarker("item",_f(O.color),l);var M=Rk(I.formatTooltip(R,!0,null)),$=M.frag;if($){var F=Ap([I],o).get("valueFormatter");A.blocks.push(F?Ke({valueFormatter:F},$):$)}M.text&&f.push(M.text),u.push(O)}})}})}),c.blocks.reverse(),f.reverse();var h=r.position,v=s.get("order"),m=Dk(c,d,l,v,i.get("useUTC"),s.get("textStyle"));m&&f.unshift(m);var y=l==="richText"?` + +`:"
",_=f.join(y);this._showOrMove(s,function(){this._updateContentNotChangedOnAxis(n,u)?this._updatePosition(s,h,a[0],a[1],this._tooltipContent,u):this._showTooltipContent(s,_,u,Math.random()+"",a[0],a[1],h,null,d)})},t.prototype._showSeriesItemTooltip=function(n,r,i){var o=this._ecModel,a=Mn(r),s=a.seriesIndex,l=o.getSeriesByIndex(s),u=a.dataModel||l,c=a.dataIndex,f=a.dataType,d=u.getData(f),h=this._renderMode,v=n.positionDefault,m=Ap([d.getItemModel(c),u,l&&(l.coordinateSystem||{}).model],this._tooltipModel,v?{position:v}:null),y=m.get("trigger");if(!(y!=null&&y!=="item")){var _=u.getDataParams(c,f),b=new IT;_.marker=b.makeTooltipMarker("item",_f(_.color),h);var w=Rk(u.formatTooltip(c,!1,f)),S=m.get("order"),C=m.get("valueFormatter"),T=w.frag,A=T?Dk(C?Ke({valueFormatter:C},T):T,b,h,S,o.get("useUTC"),m.get("textStyle")):w.text,P="item_"+u.name+"_"+c;this._showOrMove(m,function(){this._showTooltipContent(m,A,_,P,n.offsetX,n.offsetY,n.position,n.target,b)}),i({type:"showTip",dataIndexInside:c,dataIndex:d.getRawIndex(c),seriesIndex:s,from:this.uid})}},t.prototype._showComponentItemTooltip=function(n,r,i){var o=this._renderMode==="html",a=Mn(r),s=a.tooltipConfig,l=s.option||{},u=l.encodeHTMLContent;if(dt(l)){var c=l;l={content:c,formatter:c},u=!0}u&&o&&l.content&&(l=ln(l),l.content=Ki(l.content));var f=[l],d=this._ecModel.getComponent(a.componentMainType,a.componentIndex);d&&f.push(d),f.push({formatter:l.content});var h=n.positionDefault,v=Ap(f,this._tooltipModel,h?{position:h}:null),m=v.get("content"),y=Math.random()+"",_=new IT;this._showOrMove(v,function(){var b=ln(v.get("formatterParams")||{});this._showTooltipContent(v,m,b,y,n.offsetX,n.offsetY,n.position,r,_)}),i({type:"showTip",from:this.uid})},t.prototype._showTooltipContent=function(n,r,i,o,a,s,l,u,c){if(this._ticket="",!(!n.get("showContent")||!n.get("show"))){var f=this._tooltipContent;f.setEnterable(n.get("enterable"));var d=n.get("formatter");l=l||n.get("position");var h=r,v=this._getNearestPoint([a,s],i,n.get("trigger"),n.get("borderColor")),m=v.color;if(d)if(dt(d)){var y=n.ecModel.get("useUTC"),_=lt(i)?i[0]:i,b=_&&_.axisType&&_.axisType.indexOf("time")>=0;h=d,b&&(h=vS(_.axisValue,h,y)),h=RH(h,i,!0)}else if(Vt(d)){var w=Xn(function(S,C){S===this._ticket&&(f.setContent(C,c,n,m,l),this._updatePosition(n,l,a,s,f,i,u))},this);this._ticket=o,h=d(i,o,w)}else h=d;f.setContent(h,c,n,m,l),f.show(n,m),this._updatePosition(n,l,a,s,f,i,u)}},t.prototype._getNearestPoint=function(n,r,i,o){if(i==="axis"||lt(r))return{color:o||(this._renderMode==="html"?"#fff":"none")};if(!lt(r))return{color:o||r.color||r.borderColor}},t.prototype._updatePosition=function(n,r,i,o,a,s,l){var u=this._api.getWidth(),c=this._api.getHeight();r=r||n.get("position");var f=a.getSize(),d=n.get("align"),h=n.get("verticalAlign"),v=l&&l.getBoundingRect().clone();if(l&&v.applyTransform(l.transform),Vt(r)&&(r=r([i,o],s,a.el,v,{viewSize:[u,c],contentSize:f.slice()})),lt(r))i=Ci(r[0],u),o=Ci(r[1],c);else if(Ct(r)){var m=r;m.width=f[0],m.height=f[1];var y=k1(m,{width:u,height:c});i=y.x,o=y.y,d=null,h=null}else if(dt(r)&&l){var _=O0e(r,v,f,n.get("borderWidth"));i=_[0],o=_[1]}else{var _=R0e(i,o,a,u,c,d?null:20,h?null:20);i=_[0],o=_[1]}if(d&&(i-=b3(d)?f[0]/2:d==="right"?f[0]:0),h&&(o-=b3(h)?f[1]/2:h==="bottom"?f[1]:0),o8(n)){var _=P0e(i,o,a,u,c);i=_[0],o=_[1]}a.moveTo(i,o)},t.prototype._updateContentNotChangedOnAxis=function(n,r){var i=this._lastDataByCoordSys,o=this._cbParamsList,a=!!i&&i.length===n.length;return a&&Q(i,function(s,l){var u=s.dataByAxis||[],c=n[l]||{},f=c.dataByAxis||[];a=a&&u.length===f.length,a&&Q(u,function(d,h){var v=f[h]||{},m=d.seriesDataIndices||[],y=v.seriesDataIndices||[];a=a&&d.value===v.value&&d.axisType===v.axisType&&d.axisId===v.axisId&&m.length===y.length,a&&Q(m,function(_,b){var w=y[b];a=a&&_.seriesIndex===w.seriesIndex&&_.dataIndex===w.dataIndex}),o&&Q(d.seriesDataIndices,function(_){var b=_.seriesIndex,w=r[b],S=o[b];w&&S&&S.data!==w.data&&(a=!1)})})}),this._lastDataByCoordSys=n,this._cbParamsList=r,!!a},t.prototype._hide=function(n){this._lastDataByCoordSys=null,n({type:"hideTip",from:this.uid})},t.prototype.dispose=function(n,r){Dt.node||!r.getDom()||(fA(this,"_updatePosition"),this._tooltipContent.dispose(),RA("itemTooltip",r))},t.type="tooltip",t}(hs);function Ap(e,t,n){var r=t.ecModel,i;n?(i=new sr(n,r,r),i=new sr(t.option,i,r)):i=t;for(var o=e.length-1;o>=0;o--){var a=e[o];a&&(a instanceof sr&&(a=a.get("tooltip",!0)),dt(a)&&(a={formatter:a}),a&&(i=new sr(a,i,r)))}return i}function _3(e,t){return e.dispatchAction||Xn(t.dispatchAction,t)}function R0e(e,t,n,r,i,o,a){var s=n.getSize(),l=s[0],u=s[1];return o!=null&&(e+l+o+2>r?e-=l+o:e+=o),a!=null&&(t+u+a>i?t-=u+a:t+=a),[e,t]}function P0e(e,t,n,r,i){var o=n.getSize(),a=o[0],s=o[1];return e=Math.min(e+a,r)-a,t=Math.min(t+s,i)-s,e=Math.max(e,0),t=Math.max(t,0),[e,t]}function O0e(e,t,n,r){var i=n[0],o=n[1],a=Math.ceil(Math.SQRT2*r)+8,s=0,l=0,u=t.width,c=t.height;switch(e){case"inside":s=t.x+u/2-i/2,l=t.y+c/2-o/2;break;case"top":s=t.x+u/2-i/2,l=t.y-o-a;break;case"bottom":s=t.x+u/2-i/2,l=t.y+c+a;break;case"left":s=t.x-i-a,l=t.y+c/2-o/2;break;case"right":s=t.x+u+a,l=t.y+c/2-o/2}return[s,l]}function b3(e){return e==="center"||e==="middle"}function D0e(e,t,n){var r=mR(e).queryOptionMap,i=r.keys()[0];if(!(!i||i==="series")){var o=lm(t,i,r.get(i),{useDefault:!1,enableAll:!1,enableNone:!1}),a=o.models[0];if(a){var s=n.getViewOfComponentModel(a),l;if(s.group.traverse(function(u){var c=Mn(u).tooltipConfig;if(c&&c.name===e.name)return l=u,!0}),l)return{componentMainType:i,componentIndex:a.componentIndex,el:l}}}}function M0e(e){Ou(i8),e.registerComponentModel(v0e),e.registerComponentView(I0e),e.registerAction({type:"showTip",event:"showTip",update:"tooltip:manuallyShowTip"},eo),e.registerAction({type:"hideTip",event:"hideTip",update:"tooltip:manuallyHideTip"},eo)}var L0e=function(e,t){if(t==="all")return{type:"all",title:e.getLocaleModel().get(["legend","selector","all"])};if(t==="inverse")return{type:"inverse",title:e.getLocaleModel().get(["legend","selector","inverse"])}},PA=function(e){ot(t,e);function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.type=t.type,n.layoutMode={type:"box",ignoreSize:!0},n}return t.prototype.init=function(n,r,i){this.mergeDefaultAndTheme(n,i),n.selected=n.selected||{},this._updateSelector(n)},t.prototype.mergeOption=function(n,r){e.prototype.mergeOption.call(this,n,r),this._updateSelector(n)},t.prototype._updateSelector=function(n){var r=n.selector,i=this.ecModel;r===!0&&(r=n.selector=["all","inverse"]),lt(r)&&Q(r,function(o,a){dt(o)&&(o={type:o}),r[a]=_n(o,L0e(i,o.type))})},t.prototype.optionUpdated=function(){this._updateData(this.ecModel);var n=this._data;if(n[0]&&this.get("selectedMode")==="single"){for(var r=!1,i=0;i=0},t.prototype.getOrient=function(){return this.get("orient")==="vertical"?{index:1,name:"vertical"}:{index:0,name:"horizontal"}},t.type="legend.plain",t.dependencies=["series"],t.defaultOption={z:4,show:!0,orient:"horizontal",left:"center",top:0,align:"auto",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderRadius:0,borderWidth:0,padding:5,itemGap:10,itemWidth:25,itemHeight:14,symbolRotate:"inherit",symbolKeepAspect:!0,inactiveColor:"#ccc",inactiveBorderColor:"#ccc",inactiveBorderWidth:"auto",itemStyle:{color:"inherit",opacity:"inherit",borderColor:"inherit",borderWidth:"auto",borderCap:"inherit",borderJoin:"inherit",borderDashOffset:"inherit",borderMiterLimit:"inherit"},lineStyle:{width:"auto",color:"inherit",inactiveColor:"#ccc",inactiveWidth:2,opacity:"inherit",type:"inherit",cap:"inherit",join:"inherit",dashOffset:"inherit",miterLimit:"inherit"},textStyle:{color:"#333"},selectedMode:!0,selector:!1,selectorLabel:{show:!0,borderRadius:10,padding:[3,5,3,5],fontSize:12,fontFamily:"sans-serif",color:"#666",borderWidth:1,borderColor:"#666"},emphasis:{selectorLabel:{show:!0,color:"#eee",backgroundColor:"#666"}},selectorPosition:"auto",selectorItemGap:7,selectorButtonGap:10,tooltip:{show:!1}},t}(An),ud=Dr,OA=Q,y0=pi,u8=function(e){ot(t,e);function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.type=t.type,n.newlineDisabled=!1,n}return t.prototype.init=function(){this.group.add(this._contentGroup=new y0),this.group.add(this._selectorGroup=new y0),this._isFirstRender=!0},t.prototype.getContentGroup=function(){return this._contentGroup},t.prototype.getSelectorGroup=function(){return this._selectorGroup},t.prototype.render=function(n,r,i){var o=this._isFirstRender;if(this._isFirstRender=!1,this.resetInner(),!!n.get("show",!0)){var a=n.get("align"),s=n.get("orient");(!a||a==="auto")&&(a=n.get("left")==="right"&&s==="vertical"?"right":"left");var l=n.get("selector",!0),u=n.get("selectorPosition",!0);l&&(!u||u==="auto")&&(u=s==="horizontal"?"end":"start"),this.renderInner(a,n,r,i,l,s,u);var c=n.getBoxLayoutParams(),f={width:i.getWidth(),height:i.getHeight()},d=n.get("padding"),h=k1(c,f,d),v=this.layoutInner(n,a,h,o,l,u),m=k1(En({width:v.width,height:v.height},c),f,d);this.group.x=m.x-v.x,this.group.y=m.y-v.y,this.group.markRedraw(),this.group.add(this._backgroundEl=p0e(v,n))}},t.prototype.resetInner=function(){this.getContentGroup().removeAll(),this._backgroundEl&&this.group.remove(this._backgroundEl),this.getSelectorGroup().removeAll()},t.prototype.renderInner=function(n,r,i,o,a,s,l){var u=this.getContentGroup(),c=Kt(),f=r.get("selectedMode"),d=[];i.eachRawSeries(function(h){!h.get("legendHoverLink")&&d.push(h.id)}),OA(r.getData(),function(h,v){var m=h.get("name");if(!this.newlineDisabled&&(m===""||m===` +`)){var y=new y0;y.newline=!0,u.add(y);return}var _=i.getSeriesByName(m)[0];if(!c.get(m))if(_){var b=_.getData(),w=b.getVisual("legendLineStyle")||{},S=b.getVisual("legendIcon"),C=b.getVisual("style"),T=this._createItem(_,m,v,h,r,n,w,C,S,f,o);T.on("click",ud(S3,m,null,o,d)).on("mouseover",ud(DA,_.name,null,o,d)).on("mouseout",ud(MA,_.name,null,o,d)),i.ssr&&T.eachChild(function(A){var P=Mn(A);P.seriesIndex=_.seriesIndex,P.dataIndex=v,P.ssrType="legend"}),c.set(m,!0)}else i.eachRawSeries(function(A){if(!c.get(m)&&A.legendVisualProvider){var P=A.legendVisualProvider;if(!P.containName(m))return;var I=P.indexOfName(m),R=P.getItemVisual(I,"style"),O=P.getItemVisual(I,"legendIcon"),M=nl(R.fill);M&&M[3]===0&&(M[3]=.2,R=Ke(Ke({},R),{fill:tS(M,"rgba")}));var $=this._createItem(A,m,v,h,r,n,{},R,O,f,o);$.on("click",ud(S3,null,m,o,d)).on("mouseover",ud(DA,null,m,o,d)).on("mouseout",ud(MA,null,m,o,d)),i.ssr&&$.eachChild(function(F){var z=Mn(F);z.seriesIndex=A.seriesIndex,z.dataIndex=v,z.ssrType="legend"}),c.set(m,!0)}},this)},this),a&&this._createSelector(a,r,o,s,l)},t.prototype._createSelector=function(n,r,i,o,a){var s=this.getSelectorGroup();OA(n,function(u){var c=u.type,f=new ao({style:{x:0,y:0,align:"center",verticalAlign:"middle"},onclick:function(){i.dispatchAction({type:c==="all"?"legendAllSelect":"legendInverseSelect",legendId:r.id})}});s.add(f);var d=r.getModel("selectorLabel"),h=r.getModel(["emphasis","selectorLabel"]);MR(f,{normal:d,emphasis:h},{defaultText:u.title}),KE(f)})},t.prototype._createItem=function(n,r,i,o,a,s,l,u,c,f,d){var h=n.visualDrawType,v=a.get("itemWidth"),m=a.get("itemHeight"),y=a.isSelected(r),_=o.get("symbolRotate"),b=o.get("symbolKeepAspect"),w=o.get("icon");c=w||c||"roundRect";var S=N0e(c,o,l,u,h,y,d),C=new y0,T=o.getModel("textStyle");if(Vt(n.getLegendIcon)&&(!w||w==="inherit"))C.add(n.getLegendIcon({itemWidth:v,itemHeight:m,icon:c,iconRotate:_,itemStyle:S.itemStyle,lineStyle:S.lineStyle,symbolKeepAspect:b}));else{var A=w==="inherit"&&n.getData().getVisual("symbol")?_==="inherit"?n.getData().getVisual("symbolRotate"):_:0;C.add(k0e({itemWidth:v,itemHeight:m,icon:c,iconRotate:A,itemStyle:S.itemStyle,lineStyle:S.lineStyle,symbolKeepAspect:b}))}var P=s==="left"?v+5:-5,I=s,R=a.get("formatter"),O=r;dt(R)&&R?O=R.replace("{name}",r??""):Vt(R)&&(O=R(r));var M=y?T.getTextColor():o.get("inactiveColor");C.add(new ao({style:oh(T,{text:O,x:P,y:m/2,fill:M,align:I,verticalAlign:"middle"},{inheritColor:M})}));var $=new zr({shape:C.getBoundingRect(),style:{fill:"transparent"}}),F=o.getModel("tooltip");return F.get("show")&&cS({el:$,componentModel:a,itemName:r,itemTooltipOption:F.option}),C.add($),C.eachChild(function(z){z.silent=!0}),$.silent=!f,this.getContentGroup().add(C),KE(C),C.__legendDataIndex=i,C},t.prototype.layoutInner=function(n,r,i,o,a,s){var l=this.getContentGroup(),u=this.getSelectorGroup();Mv(n.get("orient"),l,n.get("itemGap"),i.width,i.height);var c=l.getBoundingRect(),f=[-c.x,-c.y];if(u.markRedraw(),l.markRedraw(),a){Mv("horizontal",u,n.get("selectorItemGap",!0));var d=u.getBoundingRect(),h=[-d.x,-d.y],v=n.get("selectorButtonGap",!0),m=n.getOrient().index,y=m===0?"width":"height",_=m===0?"height":"width",b=m===0?"y":"x";s==="end"?h[m]+=c[y]+v:f[m]+=d[y]+v,h[1-m]+=c[_]/2-d[_]/2,u.x=h[0],u.y=h[1],l.x=f[0],l.y=f[1];var w={x:0,y:0};return w[y]=c[y]+v+d[y],w[_]=Math.max(c[_],d[_]),w[b]=Math.min(0,d[b]+h[1-m]),w}else return l.x=f[0],l.y=f[1],this.group.getBoundingRect()},t.prototype.remove=function(){this.getContentGroup().removeAll(),this._isFirstRender=!0},t.type="legend.plain",t}(hs);function N0e(e,t,n,r,i,o,a){function s(y,_){y.lineWidth==="auto"&&(y.lineWidth=_.lineWidth>0?2:0),OA(y,function(b,w){y[w]==="inherit"&&(y[w]=_[w])})}var l=t.getModel("itemStyle"),u=l.getItemStyle(),c=e.lastIndexOf("empty",0)===0?"fill":"stroke",f=l.getShallow("decal");u.decal=!f||f==="inherit"?r.decal:yA(f,a),u.fill==="inherit"&&(u.fill=r[i]),u.stroke==="inherit"&&(u.stroke=r[c]),u.opacity==="inherit"&&(u.opacity=(i==="fill"?r:n).opacity),s(u,r);var d=t.getModel("lineStyle"),h=d.getLineStyle();if(s(h,n),u.fill==="auto"&&(u.fill=r.fill),u.stroke==="auto"&&(u.stroke=r.fill),h.stroke==="auto"&&(h.stroke=r.fill),!o){var v=t.get("inactiveBorderWidth"),m=u[c];u.lineWidth=v==="auto"?r.lineWidth>0&&m?2:0:u.lineWidth,u.fill=t.get("inactiveColor"),u.stroke=t.get("inactiveBorderColor"),h.stroke=d.get("inactiveColor"),h.lineWidth=d.get("inactiveWidth")}return{itemStyle:u,lineStyle:h}}function k0e(e){var t=e.icon||"roundRect",n=lh(t,0,0,e.itemWidth,e.itemHeight,e.itemStyle.fill,e.symbolKeepAspect);return n.setStyle(e.itemStyle),n.rotation=(e.iconRotate||0)*Math.PI/180,n.setOrigin([e.itemWidth/2,e.itemHeight/2]),t.indexOf("empty")>-1&&(n.style.stroke=n.style.fill,n.style.fill="#fff",n.style.lineWidth=2),n}function S3(e,t,n,r){MA(e,t,n,r),n.dispatchAction({type:"legendToggleSelect",name:e??t}),DA(e,t,n,r)}function c8(e){for(var t=e.getZr().storage.getDisplayList(),n,r=0,i=t.length;ri[a],y=[-h.x,-h.y];r||(y[o]=c[u]);var _=[0,0],b=[-v.x,-v.y],w=nn(n.get("pageButtonGap",!0),n.get("itemGap",!0));if(m){var S=n.get("pageButtonPosition",!0);S==="end"?b[o]+=i[a]-v[a]:_[o]+=v[a]+w}b[1-o]+=h[s]/2-v[s]/2,c.setPosition(y),f.setPosition(_),d.setPosition(b);var C={x:0,y:0};if(C[a]=m?i[a]:h[a],C[s]=Math.max(h[s],v[s]),C[l]=Math.min(0,v[l]+b[1-o]),f.__rectSize=i[a],m){var T={x:0,y:0};T[a]=Math.max(i[a]-v[a]-w,0),T[s]=C[s],f.setClipPath(new zr({shape:T})),f.__rectSize=T[a]}else d.eachChild(function(P){P.attr({invisible:!0,silent:!0})});var A=this._getPageInfo(n);return A.pageIndex!=null&&Ru(c,{x:A.contentPosition[0],y:A.contentPosition[1]},m?n:null),this._updatePageInfoView(n,A),C},t.prototype._pageGo=function(n,r,i){var o=this._getPageInfo(r)[n];o!=null&&i.dispatchAction({type:"legendScroll",scrollDataIndex:o,legendId:r.id})},t.prototype._updatePageInfoView=function(n,r){var i=this._controllerGroup;Q(["pagePrev","pageNext"],function(c){var f=c+"DataIndex",d=r[f]!=null,h=i.childOfName(c);h&&(h.setStyle("fill",d?n.get("pageIconColor",!0):n.get("pageIconInactiveColor",!0)),h.cursor=d?"pointer":"default")});var o=i.childOfName("pageText"),a=n.get("pageFormatter"),s=r.pageIndex,l=s!=null?s+1:0,u=r.pageCount;o&&a&&o.setStyle("text",dt(a)?a.replace("{current}",l==null?"":l+"").replace("{total}",u==null?"":u+""):a({current:l,total:u}))},t.prototype._getPageInfo=function(n){var r=n.get("scrollDataIndex",!0),i=this.getContentGroup(),o=this._containerGroup.__rectSize,a=n.getOrient().index,s=rC[a],l=iC[a],u=this._findTargetItemIndex(r),c=i.children(),f=c[u],d=c.length,h=d?1:0,v={contentPosition:[i.x,i.y],pageCount:h,pageIndex:h-1,pagePrevDataIndex:null,pageNextDataIndex:null};if(!f)return v;var m=S(f);v.contentPosition[a]=-m.s;for(var y=u+1,_=m,b=m,w=null;y<=d;++y)w=S(c[y]),(!w&&b.e>_.s+o||w&&!C(w,_.s))&&(b.i>_.i?_=b:_=w,_&&(v.pageNextDataIndex==null&&(v.pageNextDataIndex=_.i),++v.pageCount)),b=w;for(var y=u-1,_=m,b=m,w=null;y>=-1;--y)w=S(c[y]),(!w||!C(b,w.s))&&_.i=A&&T.s<=A+o}},t.prototype._findTargetItemIndex=function(n){if(!this._showController)return 0;var r,i=this.getContentGroup(),o;return i.eachChild(function(a,s){var l=a.__legendDataIndex;o==null&&l!=null&&(o=s),l===n&&(r=s)}),r??o},t.type="legend.scroll",t}(u8);function U0e(e){e.registerAction("legendScroll","legendscroll",function(t,n){var r=t.scrollDataIndex;r!=null&&n.eachComponent({mainType:"legend",subType:"scroll",query:t},function(i){i.setScrollDataIndex(r)})})}function H0e(e){Ou(f8),e.registerComponentModel(B0e),e.registerComponentView(V0e),U0e(e)}function G0e(e){Ou(f8),Ou(H0e)}function C3(e,t,n){var r=Ch.createCanvas(),i=t.getWidth(),o=t.getHeight(),a=r.style;return a&&(a.position="absolute",a.left="0",a.top="0",a.width=i+"px",a.height=o+"px",r.setAttribute("data-zr-dom-id",e)),r.width=i*n,r.height=o*n,r}var oC=function(e){ot(t,e);function t(n,r,i){var o=e.call(this)||this;o.motionBlur=!1,o.lastFrameAlpha=.7,o.dpr=1,o.virtual=!1,o.config={},o.incremental=!1,o.zlevel=0,o.maxRepaintRectCount=5,o.__dirty=!0,o.__firstTimePaint=!0,o.__used=!1,o.__drawIndex=0,o.__startIndex=0,o.__endIndex=0,o.__prevStartIndex=null,o.__prevEndIndex=null;var a;i=i||C1,typeof n=="string"?a=C3(n,r,i):Ct(n)&&(a=n,n=a.id),o.id=n,o.dom=a;var s=a.style;return s&&(qV(a),a.onselectstart=function(){return!1},s.padding="0",s.margin="0",s.borderWidth="0"),o.painter=r,o.dpr=i,o}return t.prototype.getElementCount=function(){return this.__endIndex-this.__startIndex},t.prototype.afterBrush=function(){this.__prevStartIndex=this.__startIndex,this.__prevEndIndex=this.__endIndex},t.prototype.initContext=function(){this.ctx=this.dom.getContext("2d"),this.ctx.dpr=this.dpr},t.prototype.setUnpainted=function(){this.__firstTimePaint=!0},t.prototype.createBackBuffer=function(){var n=this.dpr;this.domBack=C3("back-"+this.id,this.painter,n),this.ctxBack=this.domBack.getContext("2d"),n!==1&&this.ctxBack.scale(n,n)},t.prototype.createRepaintRects=function(n,r,i,o){if(this.__firstTimePaint)return this.__firstTimePaint=!1,null;var a=[],s=this.maxRepaintRectCount,l=!1,u=new bn(0,0,0,0);function c(b){if(!(!b.isFinite()||b.isZero()))if(a.length===0){var w=new bn(0,0,0,0);w.copy(b),a.push(w)}else{for(var S=!1,C=1/0,T=0,A=0;A=s)}}for(var f=this.__startIndex;f15)break}}F.prevElClipPaths&&_.restore()};if(b)if(b.length===0)P=y.__endIndex;else for(var R=h.dpr,O=0;O0&&t>i[0]){for(l=0;lt);l++);s=r[i[l]]}if(i.splice(l+1,0,t),r[t]=n,!n.virtual)if(s){var u=s.dom;u.nextSibling?a.insertBefore(n.dom,u.nextSibling):a.appendChild(n.dom)}else a.firstChild?a.insertBefore(n.dom,a.firstChild):a.appendChild(n.dom);n.painter||(n.painter=this)}},e.prototype.eachLayer=function(t,n){for(var r=this._zlevelList,i=0;i0?_0:0),this._needsManuallyCompositing),c.__builtin__||oR("ZLevel "+u+" has been used by unkown layer "+c.id),c!==o&&(c.__used=!0,c.__startIndex!==l&&(c.__dirty=!0),c.__startIndex=l,c.incremental?c.__drawIndex=-1:c.__drawIndex=l,n(l),o=c),i.__dirty&wo&&!i.__inHover&&(c.__dirty=!0,c.incremental&&c.__drawIndex<0&&(c.__drawIndex=l))}n(l),this.eachBuiltinLayer(function(f,d){!f.__used&&f.getElementCount()>0&&(f.__dirty=!0,f.__startIndex=f.__endIndex=f.__drawIndex=0),f.__dirty&&f.__drawIndex<0&&(f.__drawIndex=f.__startIndex)})},e.prototype.clear=function(){return this.eachBuiltinLayer(this._clearLayer),this},e.prototype._clearLayer=function(t){t.clear()},e.prototype.setBackgroundColor=function(t){this._backgroundColor=t,Q(this._layers,function(n){n.setUnpainted()})},e.prototype.configLayer=function(t,n){if(n){var r=this._layerConfig;r[t]?_n(r[t],n,!0):r[t]=n;for(var i=0;i{const a=getComputedStyle(n.value),s=getComputedStyle(r.value);let l=a.color,u=a.backgroundColor,c=a.borderColor,f=a.fontFamily,d=s.color,h=s.backgroundColor,v=s.borderBottomColor,m=s.borderTopColor;Yt(()=>Nd.value,()=>{const S=getComputedStyle(n.value),C=getComputedStyle(r.value);l=S.color,u=S.backgroundColor,c=S.borderColor,d=C.color,h=C.backgroundColor,v=C.borderBottomColor,m=C.borderTopColor}),Yt(()=>fv.value,()=>{f=getComputedStyle(n.value).fontFamily});const y=Ve(()=>({legend:{bottom:0,data:t.data.map(S=>S.name),textStyle:{color:l,fontFamily:f}},grid:{left:60,top:15,right:10,bottom:25},tooltip:{show:!0,trigger:"axis",backgroundColor:u,borderColor:u,confine:!0,padding:[0,5],textStyle:{color:l,fontFamily:f},formatter:t.toolTipFormatter},xAxis:{type:"category",axisLine:{show:!1},axisLabel:{show:!1},splitLine:{show:!1},axisTick:{show:!1}},yAxis:{type:"value",splitNumber:4,max:S=>Math.max(S.max,t.min),axisLine:{show:!1},splitLine:{show:!0,lineStyle:{type:"dashed",color:c}},axisLabel:{align:"left",padding:[0,0,0,-45],formatter:t.labelFormatter,color:l,fontFamily:f}},series:t.data.map((S,C)=>{const T=C===t.data.length-1?d:h,A=C===t.data.length-1?v:m;return{name:S.name,symbol:"none",emphasis:{disabled:!0},lineStyle:{width:1},data:S.data,areaStyle:{color:new AR(0,0,0,1,[{offset:0,color:T},{offset:1,color:A}])},type:"line",color:T,smooth:!0}})})),_=bme(o.value);_.setOption(y.value),Yt(y,()=>{i.value||_==null||_.setOption(y.value)});const{width:b}=sre(o),w=Ai.debounce(()=>{_.resize()},100);Yt(()=>b.value,()=>{w()})}),(a,s)=>(K(),ae("div",K0e,[L("div",{ref_key:"chart",ref:o,class:"h-full w-full"},null,512),L("span",{class:"hidden border-base-content/10 bg-base-100/70 text-base-content",ref_key:"baseColorRef",ref:n},null,512),L("span",{class:"hidden border-b-primary/30 border-t-info/30 bg-info/60 text-primary/60",ref_key:"themeColorRef",ref:r},null,512),L("button",{class:"btn btn-ghost btn-xs absolute bottom-0 right-1",onClick:s[0]||(s[0]=l=>i.value=!i.value)},[(K(),Ot(ls(i.value?N(TQ):N(xQ)),{class:"h-4 w-4"}))])]))}}),lP=it({__name:"ConnectionsCharts",setup(e){const{t}=cs(),n=Ve(()=>[{name:t("connections"),data:a_.value}]),r=o=>` ${o}`,i=o=>o.map(a=>{if(!(a.data.name +
+ ${a.seriesName} + (${La(a.data.name).format("HH:mm:ss")}): ${a.data.value} + `}).join(` +`);return(o,a)=>(K(),Ot(sP,{data:n.value,"label-formatter":r,"tool-tip-formatter":i,min:100},null,8,["data"]))}}),uP=it({__name:"MemoryCharts",setup(e){const{t}=cs(),n=Ve(()=>[{name:t("memoryUsage"),data:Up.value}]),r=o=>`${Tn(o,{maximumFractionDigits:1,binary:!0})}`,i=o=>$B(o[0],{binary:!0,suffix:""});return(o,a)=>(K(),Ot(sP,{data:n.value,"label-formatter":r,"tool-tip-formatter":i,min:100*1024*1024},null,8,["data"]))}}),cP=it({__name:"SpeedCharts",setup(e){const t=Fe(),{t:n}=cs(),r=Ve(()=>[{name:n("ulSpeed"),data:Gp.value},{name:n("dlSpeed"),data:Hp.value}]),i=a=>`${Tn(a,{maximumFractionDigits:1,binary:!1})}/s`,o=a=>a.map(s=>$B(s,{binary:!1,suffix:"/s"})).join("");return(a,s)=>(K(),Ot(sP,{ref_key:"chartRef",ref:t,data:r.value,"label-formatter":i,"tool-tip-formatter":o,min:60*1e3},null,8,["data"]))}}),Z0e={class:"card carousel carousel-vertical h-28 shrink-0 overflow-x-hidden text-sm hover:scrollbar-thin"},q0e=it({__name:"OverviewCarousel",setup(e){return(t,n)=>(K(),ae("div",Z0e,[ye(cP,{class:"carousel-item box-border"}),ye(uP,{class:"carousel-item box-border"}),ye(lP,{class:"carousel-item box-border"})]))}}),J0e={class:"card mx-1 flex flex-col gap-4 py-2 text-xs"},Q0e={class:"flex flex-col items-center justify-center"},e_e={class:"flex flex-col items-center justify-center"},t_e={class:"flex flex-col items-center justify-center"},n_e={class:"flex flex-col items-center justify-center"},r_e={class:"flex flex-col items-center justify-center"},i_e=it({__name:"VerticalInfos",setup(e){return(t,n)=>(K(),ae("div",J0e,[L("div",Q0e,[ye(N(H4),{class:"h-4 w-4"}),ft(" "+re(N(ea).length),1)]),L("div",e_e,[ye(N(Eb),{class:"h-4 w-4"}),ft(" "+re(N(Tn)(N(hg)))+" ",1),L("span",null,re(N(Tn)(N(Fb)))+"/s ",1)]),L("div",t_e,[ye(N(Kg),{class:"h-4 w-4"}),ft(" "+re(N(Tn)(N(pg)))+" ",1),L("span",null,re(N(Tn)(N($b)))+"/s ",1)]),L("div",n_e,[ye(N(bQ),{class:"h-4 w-4"}),ft(" "+re(N(Tn)(N(kb),{binary:!0})),1)]),L("div",r_e,[L("button",{class:"btn btn-circle btn-sm",onClick:n[0]||(n[0]=r=>mu.value=!1)},[ye(N(ff),{class:"h-5 w-5"})])])]))}}),o_e={class:"drawer-side z-30 bg-base-200 max-md:hidden"},a_e={class:"menu flex-1"},s_e=["onClick"],l_e={class:"card"},u_e=it({__name:"SideBar",setup(e){const t={[un.connections]:FV,[un.logs]:$V,[un.proxies]:UV,[un.rules]:HV},n=Ve(()=>r.name?t[r.name]:null),r=aB();return(i,o)=>(K(),ae("div",o_e,[o[0]||(o[0]=L("label",{for:"sidebar","aria-label":"close sidebar",class:"drawer-overlay"},null,-1)),L("div",{class:rt(N(Cn)("scrollbar-hidden flex h-full flex-col gap-2 overflow-x-hidden p-2 text-base-content !transition-all duration-500",N(mu)?"w-18 px-0":"w-[21rem]"))},[L("ul",a_e,[(K(!0),ae(Ze,null,on(N($s),a=>(K(),ae("li",{key:a},[L("a",{class:rt(a===N(r).name?"active":"inactive"),onClick:()=>N(Fa).push({name:a})},[(K(),Ot(ls(N(TB)[a]),{class:"h-5 w-5"})),N(mu)?mt("",!0):(K(),ae(Ze,{key:0},[ft(re(i.$t(a)),1)],64))],10,s_e)]))),128))]),N(mu)?(K(),Ot(i_e,{key:0})):(K(),ae(Ze,{key:1},[N(r).name!==N(un).overview?(K(),Ot(q0e,{key:0})):mt("",!0),L("div",l_e,[n.value?(K(),Ot(ls(n.value),{key:0})):mt("",!0),ye($le)])],64))],2)]))}}),aC=Fe(!1),d8=()=>({isUIUpdateAvailable:aC,checkUIUpdate:async()=>{aC.value=await Woe(),aC.value&&X0.value&&dV()}}),c_e={class:"w-128 drawer md:drawer-open"},f_e={class:"drawer-content fixed bottom-0 flex h-full w-full flex-col overflow-hidden bg-base-200/40 md:relative md:w-auto"},d_e={class:"relative h-0 flex-1"},h_e={class:"absolute flex h-full w-full flex-col overflow-y-auto"},p_e=["onClick"],v_e={class:"text-xs"},g_e={class:"modal-box"},m_e={class:"text-lg font-bold"},y_e={class:"flex justify-end gap-2"},__e=it({__name:"HomePage",setup(e){const t=Fe(null),n=window.matchMedia("(display-mode: standalone)").matches||navigator.standalone,r={[un.connections]:FV,[un.logs]:$V,[un.proxies]:UV,[un.rules]:HV},i=Oee(),o=aB(),a=Ve(()=>r[o.name]),s=Fe(),{direction:l}=lre(s,{threshold:15}),u=()=>{const _=o.name;return _===un.setup?un.proxies:$s.value[($s.value.indexOf(_)+1)%$s.value.length]},c=()=>{const _=o.name;return _===un.setup?un.proxies:$s.value[($s.value.indexOf(_)-1+$s.value.length)%$s.value.length]};Yt(l,()=>{l.value==="right"?i.push({name:c()}):l.value==="left"&&i.push({name:u()})});const{proxiesTabShow:f}=Kb(),{checkUIUpdate:d}=d8();Yt(ci,()=>{ci.value&&(xv.value=rh.RULES,f.value=df.PROXIES,eR(),dl(),gg(),Qoe(),PE(),$re(),d())},{immediate:!0});const h=()=>{var _;(_=t.value)==null||_.close()},{showTip:v}=Lb(),m=async()=>{const _=fs.value.filter(w=>w.uuid!==ci.value);h();const b=(await Promise.all(_.map(async w=>await kL(w)?w:null))).filter(w=>w!==null);b.length>0&&(ci.value=b[0].uuid,v("backendSwitchTo",{backend:Eu(b[0])}))},y=ore();return Yt(y,async()=>{var _,b;if(!(!fl.value||fs.value.length===0||y.value!=="visible"))try{await kL(fl.value)||(_=t.value)==null||_.showModal()}catch{(b=t.value)==null||b.showModal()}},{immediate:!0}),(_,b)=>(K(),ae("div",c_e,[b[0]||(b[0]=L("input",{id:"sidebar",type:"checkbox",class:"drawer-toggle"},null,-1)),ye(u_e),L("div",f_e,[a.value&&N(mu)?(K(),Ot(ls(a.value),{key:0,class:"w-full bg-base-100",horizontal:!0})):mt("",!0),L("div",d_e,[L("div",h_e,[ye(N(II)),L("div",{class:rt(["shrink-0 md:hidden",N(n)?"max-md:h-[5.5rem]":"max-md:h-14"])},null,2)])]),L("div",{class:rt(`btm-nav glass z-30 bg-none md:hidden ${N(n)?"h-[5.5rem] pb-8":"h-14"}`),ref_key:"swiperRef",ref:s},[(K(!0),ae(Ze,null,on(N($s),w=>(K(),ae("button",{key:w,onClick:S=>N(i).push({name:w}),class:rt(w===N(o).name?"active bg-inherit":"")},[(K(),Ot(ls(N(TB)[w]),{class:"h-5 w-5"})),L("span",v_e,re(_.$t(w)),1)],10,p_e))),128))],2)]),L("dialog",{id:"autoSwitchBackend",ref_key:"modalRef",ref:t,class:"modal"},[L("div",g_e,[L("h3",m_e,re(_.$t("currentBackendUnavailable")),1),L("div",y_e,[L("button",{class:"btn btn-sm",onClick:h},re(_.$t("cancel")),1),L("button",{class:"btn btn-primary btn-sm",onClick:m},re(_.$t("confirm")),1)])])],512)]))}}),b_e={key:0,class:"card m-2 flex-row p-2 text-sm"},S_e={class:"card mb-1 block p-2 text-sm"},w_e={class:"mx-2 text-primary"},x_e={class:"ml-2"},T_e=it({__name:"LogsPage",setup(e){const t={[Nc.Error]:"text-error",[Nc.Warning]:"text-warning",[Nc.Info]:"text-info",[Nc.Debug]:"text-accent"},n=Ve(()=>g1.value.filter(r=>Bd.value?r.payload.includes(Bd.value)||r.type.includes(Bd.value):!0));return(r,i)=>(K(),ae(Ze,null,[n.value.length?mt("",!0):(K(),ae("div",b_e,re(r.$t("noContent")),1)),ye(XI,{data:n.value},{default:Mr(({item:o})=>[L("div",S_e,[L("span",null,re(o.seq),1),L("span",w_e,re(N(La)(o.time).locale(N(su)).format("HH:mm:ss")),1),L("span",{class:rt(t[o.type])},re(o.type),3),L("span",x_e,re(o.payload),1)])]),_:1},8,["data"])],64))}}),C_e={class:"grid grid-cols-2 gap-2 rounded-lg bg-base-200/40 py-2 lg:grid-cols-6"},E_e={class:"flex h-14 flex-col items-center justify-center gap-2 md:h-24"},A_e={class:"text-sm font-bold md:text-lg"},I_e={class:"text-base md:text-xl"},R_e={class:"flex h-14 flex-col items-center justify-center gap-2 md:h-24"},P_e={class:"text-sm font-bold md:text-lg"},O_e={class:"text-base md:text-xl"},D_e={class:"flex h-14 flex-col items-center justify-center gap-2 md:h-24"},M_e={class:"text-sm font-bold md:text-lg"},L_e={class:"text-base md:text-xl"},N_e={class:"flex h-14 flex-col items-center justify-center gap-2 md:h-24"},k_e={class:"text-sm font-bold md:text-lg"},F_e={class:"text-base md:text-xl"},$_e={class:"flex h-14 flex-col items-center justify-center gap-2 md:h-24"},B_e={class:"text-sm font-bold md:text-lg"},V_e={class:"text-base md:text-xl"},U_e={class:"flex h-14 flex-col items-center justify-center gap-2 md:h-24"},H_e={class:"text-sm font-bold md:text-lg"},G_e={class:"text-base md:text-xl"},z_e=it({__name:"StatisticsStats",setup(e){return(t,n)=>(K(),ae("div",C_e,[L("div",E_e,[L("div",A_e,re(t.$t("connections")),1),L("div",I_e,re(N(ea).length),1)]),L("div",R_e,[L("div",P_e,re(t.$t("memoryUsage")),1),L("div",O_e,re(N(Tn)(N(kb),{binary:!0})),1)]),L("div",D_e,[L("div",M_e,re(t.$t("download")),1),L("div",L_e,re(N(Tn)(N(hg))),1)]),L("div",N_e,[L("div",k_e,re(t.$t("dlSpeed")),1),L("div",F_e,re(N(Tn)(N(Fb)))+"/s",1)]),L("div",$_e,[L("div",B_e,re(t.$t("upload")),1),L("div",V_e,re(N(Tn)(N(pg))),1)]),L("div",U_e,[L("div",H_e,re(t.$t("ulSpeed")),1),L("div",G_e,re(N(Tn)(N($b)))+"/s",1)])]))}}),W_e={class:"card card-compact w-full"},j_e={class:"card-title px-4 pt-4"},Y_e={class:"card-body gap-4"},X_e={class:"grid grid-cols-1 gap-2 xl:grid-cols-3"},K_e=it({__name:"ChartsCard",setup(e){return(t,n)=>(K(),ae("div",W_e,[L("div",j_e,re(t.$t("overview")),1),L("div",Y_e,[ye(z_e),L("div",X_e,[ye(cP,{class:"xl:h-64"}),ye(uP,{class:"xl:h-64"}),ye(lP,{class:"xl:h-64"})])])]))}}),sC=Fe(""),lC=Fe(""),b0=Fe(""),S0=Fe(""),w0=Fe(""),x0=Fe(""),T0=Fe(""),Z_e={class:"relative h-28 rounded-lg bg-base-200/40 p-2 text-sm"},q_e={class:"flex flex-col"},h8=it({__name:"ConnectionStatus",setup(e){const t=async()=>{Joe().then(n=>{b0.value=n.toFixed(0)}),Xoe().then(n=>{T0.value=n.toFixed(0)}),qoe().then(n=>{S0.value=n.toFixed(0)}),Zoe().then(n=>{w0.value=n.toFixed(0)}),Koe().then(n=>{x0.value=n.toFixed(0)})};return lo(()=>{q0.value&&[b0,T0,S0,w0,x0].some(n=>n.value==="")&&t()}),(n,r)=>(K(),ae("div",Z_e,[L("div",q_e,[L("div",null,[r[0]||(r[0]=L("span",{class:"inline-block w-28"},"Baidu ",-1)),r[1]||(r[1]=ft(" : ")),L("span",{class:rt(N(iu)(Number(N(b0))))},re(N(b0))+"ms ",3)]),L("div",null,[r[2]||(r[2]=L("span",{class:"inline-block w-28"},"Cloudflare ",-1)),r[3]||(r[3]=ft(" : ")),L("span",{class:rt(N(iu)(Number(N(T0))))},re(N(T0))+"ms ",3)]),L("div",null,[r[4]||(r[4]=L("span",{class:"inline-block w-28"},"OpenAI CDN",-1)),r[5]||(r[5]=ft(" : ")),L("span",{class:rt(N(iu)(Number(N(S0))))},re(N(S0))+"ms ",3)]),L("div",null,[r[6]||(r[6]=L("span",{class:"inline-block w-28"},"Github ",-1)),r[7]||(r[7]=ft(" : ")),L("span",{class:rt(N(iu)(Number(N(w0))))},re(N(w0))+"ms ",3)]),L("div",null,[r[8]||(r[8]=L("span",{class:"inline-block w-28"},"YouTube ",-1)),r[9]||(r[9]=ft(" : ")),L("span",{class:rt(N(iu)(Number(N(x0))))},re(N(x0))+"ms ",3)])]),L("button",{class:"btn btn-circle btn-sm absolute bottom-2 right-2",onClick:t},[ye(N(Ab),{class:"h-4 w-4"})])]))}}),J_e={class:"relative flex h-28 flex-col gap-1 rounded-lg bg-base-200/40 p-2"},Q_e={class:"tooltip tooltip-bottom inline-block w-24 text-left","data-tip":"api-v3.speedtest.cn"},e1e={class:"tooltip tooltip-bottom inline-block w-24 text-left","data-tip":"api.ip.sb"},p8=it({__name:"IPCheck",setup(e){const t=()=>{Yoe().then(n=>n.json()).then(n=>{sC.value=`${n.data.operator} (${n.data.country}) ${n.data.ip}`}),pV().then(n=>{lC.value=`${n.asn_organization} (${n.country}) ${n.ip}`})};return lo(()=>{Z0.value&&[sC,lC].some(n=>n.value==="")&&t()}),(n,r)=>(K(),ae("div",J_e,[L("div",null,[L("span",Q_e,re(n.$t("chinaIP")),1),ft(" : "+re(N(sC)),1)]),L("div",null,[L("span",e1e,re(n.$t("globalIP")),1),ft(" : "+re(N(lC)),1)]),L("button",{class:"btn btn-circle btn-sm absolute bottom-2 right-2",onClick:t},[ye(N(Ab),{class:"h-4 w-4"})])]))}}),t1e={class:"card card-compact w-full"},n1e={class:"card-title px-4 pt-4"},r1e={class:"card-body gap-4"},i1e={class:"grid grid-cols-1 gap-2 lg:grid-cols-2"},o1e=it({__name:"NetworkCard",setup(e){return(t,n)=>(K(),ae("div",t1e,[L("div",n1e,re(t.$t("networkInfo")),1),L("div",r1e,[L("div",i1e,[ye(p8),ye(h8)])])]))}}),a1e={class:"flex flex-col gap-2 p-2"},s1e={class:"card items-center justify-center gap-2 p-2 sm:flex-row"},l1e=it({__name:"OverviewPage",setup(e){return(t,n)=>(K(),ae("div",a1e,[ye(K_e),ye(o1e),n[0]||(n[0]=L("div",{class:"flex-1"},null,-1)),L("div",s1e,[ft(re(N(Eu)(N(fl)))+" ",1),ye(tR)])]))}}),v8=it({__name:"CollapseCard",props:{name:{}},setup(e){const t=e,n=Ve({get(){return Ex.value[t.name]},set(s){s?(i.value=!1,r.value=!0,gs(()=>{Ex.value[t.name]=!0})):Ex.value[t.name]=!1}}),r=Fe(n.value),i=Fe(!n.value),o=()=>{n.value||setTimeout(()=>{i.value=!n.value},50)},a=()=>{n.value||(r.value=!1)};return(s,l)=>(K(),ae("div",{class:rt(`collapse collapse-arrow ${n.value?"collapse-open":"collapse-close"}`)},[L("div",{class:"collapse-title cursor-pointer select-none pr-4",onClick:l[0]||(l[0]=u=>n.value=!n.value)},[Md(s.$slots,"title"),i.value?Md(s.$slots,"preview",{key:0}):mt("",!0)]),L("div",{class:"collapse-content flex flex-col gap-2 max-sm:px-2",onTransitionstart:o,onTransitionend:a},[r.value?Md(s.$slots,"content",{key:0}):mt("",!0)],32)],2))}});var z1=function(){return z1=Object.assign||function(e){for(var t,n=1,r=arguments.length;ni.endVal;i.frameVal=s?i.endVal:i.frameVal,i.frameVal=Number(i.frameVal.toFixed(i.options.decimalPlaces)),i.printValue(i.frameVal),a1?i.options.decimal+f[1]:"",i.options.useGrouping){u="";for(var d=3,h=0,v=0,m=s.length;vwindow.scrollY&&t.paused?(t.paused=!1,setTimeout(function(){return t.start()},t.options.scrollSpyDelay),t.options.scrollSpyOnce&&(t.once=!0)):(window.scrollY>o||i>n)&&!t.paused&&t.reset()}},e.prototype.determineDirectionAndSmartEasing=function(){var t=this.finalEndVal?this.finalEndVal:this.endVal;this.countDown=this.startVal>t;var n=t-this.startVal;if(Math.abs(n)>this.options.smartEasingThreshold&&this.options.useEasing){this.finalEndVal=t;var r=this.countDown?1:-1;this.endVal=t+r*this.options.smartEasingAmount,this.duration=this.duration/2}else this.endVal=t,this.finalEndVal=null;this.finalEndVal!==null?this.useEasing=!1:this.useEasing=this.options.useEasing},e.prototype.start=function(t){this.error||(this.options.onStartCallback&&this.options.onStartCallback(),t&&(this.options.onCompleteCallback=t),this.duration>0?(this.determineDirectionAndSmartEasing(),this.paused=!1,this.rAF=requestAnimationFrame(this.count)):this.printValue(this.endVal))},e.prototype.pauseResume=function(){this.paused?(this.startTime=null,this.duration=this.remaining,this.startVal=this.frameVal,this.determineDirectionAndSmartEasing(),this.rAF=requestAnimationFrame(this.count)):cancelAnimationFrame(this.rAF),this.paused=!this.paused},e.prototype.reset=function(){cancelAnimationFrame(this.rAF),this.paused=!0,this.resetDuration(),this.startVal=this.validateValue(this.options.startVal),this.frameVal=this.startVal,this.printValue(this.startVal)},e.prototype.update=function(t){cancelAnimationFrame(this.rAF),this.startTime=null,this.endVal=this.validateValue(t),this.endVal!==this.frameVal&&(this.startVal=this.frameVal,this.finalEndVal==null&&this.resetDuration(),this.finalEndVal=null,this.determineDirectionAndSmartEasing(),this.rAF=requestAnimationFrame(this.count))},e.prototype.printValue=function(t){var n;if(this.el){var r=this.formattingFn(t);!((n=this.options.plugin)===null||n===void 0)&&n.render?this.options.plugin.render(this.el,r):this.el.tagName==="INPUT"?this.el.value=r:this.el.tagName==="text"||this.el.tagName==="tspan"?this.el.textContent=r:this.el.innerHTML=r}},e.prototype.ensureNumber=function(t){return typeof t=="number"&&!isNaN(t)},e.prototype.validateValue=function(t){var n=Number(t);return this.ensureNumber(n)?n:(this.error="[CountUp] invalid start or end value: ".concat(t),null)},e.prototype.resetDuration=function(){this.startTime=null,this.duration=1e3*Number(this.options.duration),this.remaining=this.duration},e}();const g8=it({__name:"LatencyTag",props:{name:{}},setup(e){const t=e,n=Fe(),r=Ve(()=>Qg(t.name??""));let i=null;lo(()=>{Yt(r,(a,s)=>{i?i==null||i.update(a):gs(()=>{i=new u1e(n.value,r.value,{duration:1,separator:"",enableScrollSpy:!1,startVal:s}),i==null||i.update(a)})})}),Sh(()=>{i=null});const o=Ve(()=>iu(r.value));return(a,s)=>(K(),ae("div",{class:rt(N(Cn)("flex h-5 w-10 items-center justify-center rounded-xl bg-base-100 text-xs hover:bg-base-200",o.value))},[r.value===N(Jo)||!r.value?(K(),Ot(N(Ab),{key:0,class:"h-3 w-3 text-base-content"})):mt("",!0),_t(L("div",{ref_key:"latencyRef",ref:n},re(r.value),513),[[xI,r.value!==N(Jo)]])],2))}});/*! @license DOMPurify 3.2.3 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.3/LICENSE */const{entries:m8,setPrototypeOf:A3,isFrozen:c1e,getPrototypeOf:f1e,getOwnPropertyDescriptor:d1e}=Object;let{freeze:Di,seal:aa,create:y8}=Object,{apply:LA,construct:NA}=typeof Reflect<"u"&&Reflect;Di||(Di=function(t){return t});aa||(aa=function(t){return t});LA||(LA=function(t,n,r){return t.apply(n,r)});NA||(NA=function(t,n){return new t(...n)});const C0=Ro(Array.prototype.forEach),I3=Ro(Array.prototype.pop),Rp=Ro(Array.prototype.push),M_=Ro(String.prototype.toLowerCase),uC=Ro(String.prototype.toString),R3=Ro(String.prototype.match),Pp=Ro(String.prototype.replace),h1e=Ro(String.prototype.indexOf),p1e=Ro(String.prototype.trim),Ca=Ro(Object.prototype.hasOwnProperty),yi=Ro(RegExp.prototype.test),Op=v1e(TypeError);function Ro(e){return function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),i=1;i2&&arguments[2]!==void 0?arguments[2]:M_;A3&&A3(e,null);let r=t.length;for(;r--;){let i=t[r];if(typeof i=="string"){const o=n(i);o!==i&&(c1e(t)||(t[r]=o),i=o)}e[i]=!0}return e}function g1e(e){for(let t=0;t/gm),S1e=aa(/\$\{[\w\W]*}/gm),w1e=aa(/^data-[\-\w.\u00B7-\uFFFF]+$/),x1e=aa(/^aria-[\-\w]+$/),_8=aa(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),T1e=aa(/^(?:\w+script|data):/i),C1e=aa(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),b8=aa(/^html$/i),E1e=aa(/^[a-z][.\w]*(-[.\w]+)+$/i);var L3=Object.freeze({__proto__:null,ARIA_ATTR:x1e,ATTR_WHITESPACE:C1e,CUSTOM_ELEMENT:E1e,DATA_ATTR:w1e,DOCTYPE_NAME:b8,ERB_EXPR:b1e,IS_ALLOWED_URI:_8,IS_SCRIPT_OR_DATA:T1e,MUSTACHE_EXPR:_1e,TMPLIT_EXPR:S1e});const Mp={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},A1e=function(){return typeof window>"u"?null:window},I1e=function(t,n){if(typeof t!="object"||typeof t.createPolicy!="function")return null;let r=null;const i="data-tt-policy-suffix";n&&n.hasAttribute(i)&&(r=n.getAttribute(i));const o="dompurify"+(r?"#"+r:"");try{return t.createPolicy(o,{createHTML(a){return a},createScriptURL(a){return a}})}catch{return console.warn("TrustedTypes policy "+o+" could not be created."),null}},N3=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function S8(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:A1e();const t=pt=>S8(pt);if(t.version="3.2.3",t.removed=[],!e||!e.document||e.document.nodeType!==Mp.document)return t.isSupported=!1,t;let{document:n}=e;const r=n,i=r.currentScript,{DocumentFragment:o,HTMLTemplateElement:a,Node:s,Element:l,NodeFilter:u,NamedNodeMap:c=e.NamedNodeMap||e.MozNamedAttrMap,HTMLFormElement:f,DOMParser:d,trustedTypes:h}=e,v=l.prototype,m=Dp(v,"cloneNode"),y=Dp(v,"remove"),_=Dp(v,"nextSibling"),b=Dp(v,"childNodes"),w=Dp(v,"parentNode");if(typeof a=="function"){const pt=n.createElement("template");pt.content&&pt.content.ownerDocument&&(n=pt.content.ownerDocument)}let S,C="";const{implementation:T,createNodeIterator:A,createDocumentFragment:P,getElementsByTagName:I}=n,{importNode:R}=r;let O=N3();t.isSupported=typeof m8=="function"&&typeof w=="function"&&T&&T.createHTMLDocument!==void 0;const{MUSTACHE_EXPR:M,ERB_EXPR:$,TMPLIT_EXPR:F,DATA_ATTR:z,ARIA_ATTR:B,IS_SCRIPT_OR_DATA:Y,ATTR_WHITESPACE:j,CUSTOM_ELEMENT:se}=L3;let{IS_ALLOWED_URI:ge}=L3,ve=null;const De=qt({},[...P3,...cC,...fC,...dC,...O3]);let Ne=null;const ze=qt({},[...D3,...hC,...M3,...E0]);let Me=Object.seal(y8(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),je=null,ce=null,Ee=!0,Se=!0,Te=!1,Oe=!0,$e=!1,H=!0,G=!1,le=!1,we=!1,pe=!1,U=!1,W=!1,q=!0,fe=!1;const _e="user-content-";let Pe=!0,Z=!1,de={},Be=null;const Xe=qt({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let ht=null;const ee=qt({},["audio","video","img","source","image","track"]);let ie=null;const he=qt({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Ce="http://www.w3.org/1998/Math/MathML",He="http://www.w3.org/2000/svg",ne="http://www.w3.org/1999/xhtml";let Ae=ne,ke=!1,Qe=null;const Ge=qt({},[Ce,He,ne],uC);let We=qt({},["mi","mo","mn","ms","mtext"]),et=qt({},["annotation-xml"]);const It=qt({},["title","style","font","a","script"]);let Pt=null;const Nn=["application/xhtml+xml","text/html"],fa="text/html";let Pn=null,pr=null;const Rf=n.createElement("form"),Sl=function(te){return te instanceof RegExp||te instanceof Function},Va=function(){let te=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(pr&&pr===te)){if((!te||typeof te!="object")&&(te={}),te=Ac(te),Pt=Nn.indexOf(te.PARSER_MEDIA_TYPE)===-1?fa:te.PARSER_MEDIA_TYPE,Pn=Pt==="application/xhtml+xml"?uC:M_,ve=Ca(te,"ALLOWED_TAGS")?qt({},te.ALLOWED_TAGS,Pn):De,Ne=Ca(te,"ALLOWED_ATTR")?qt({},te.ALLOWED_ATTR,Pn):ze,Qe=Ca(te,"ALLOWED_NAMESPACES")?qt({},te.ALLOWED_NAMESPACES,uC):Ge,ie=Ca(te,"ADD_URI_SAFE_ATTR")?qt(Ac(he),te.ADD_URI_SAFE_ATTR,Pn):he,ht=Ca(te,"ADD_DATA_URI_TAGS")?qt(Ac(ee),te.ADD_DATA_URI_TAGS,Pn):ee,Be=Ca(te,"FORBID_CONTENTS")?qt({},te.FORBID_CONTENTS,Pn):Xe,je=Ca(te,"FORBID_TAGS")?qt({},te.FORBID_TAGS,Pn):{},ce=Ca(te,"FORBID_ATTR")?qt({},te.FORBID_ATTR,Pn):{},de=Ca(te,"USE_PROFILES")?te.USE_PROFILES:!1,Ee=te.ALLOW_ARIA_ATTR!==!1,Se=te.ALLOW_DATA_ATTR!==!1,Te=te.ALLOW_UNKNOWN_PROTOCOLS||!1,Oe=te.ALLOW_SELF_CLOSE_IN_ATTR!==!1,$e=te.SAFE_FOR_TEMPLATES||!1,H=te.SAFE_FOR_XML!==!1,G=te.WHOLE_DOCUMENT||!1,pe=te.RETURN_DOM||!1,U=te.RETURN_DOM_FRAGMENT||!1,W=te.RETURN_TRUSTED_TYPE||!1,we=te.FORCE_BODY||!1,q=te.SANITIZE_DOM!==!1,fe=te.SANITIZE_NAMED_PROPS||!1,Pe=te.KEEP_CONTENT!==!1,Z=te.IN_PLACE||!1,ge=te.ALLOWED_URI_REGEXP||_8,Ae=te.NAMESPACE||ne,We=te.MATHML_TEXT_INTEGRATION_POINTS||We,et=te.HTML_INTEGRATION_POINTS||et,Me=te.CUSTOM_ELEMENT_HANDLING||{},te.CUSTOM_ELEMENT_HANDLING&&Sl(te.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(Me.tagNameCheck=te.CUSTOM_ELEMENT_HANDLING.tagNameCheck),te.CUSTOM_ELEMENT_HANDLING&&Sl(te.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(Me.attributeNameCheck=te.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),te.CUSTOM_ELEMENT_HANDLING&&typeof te.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(Me.allowCustomizedBuiltInElements=te.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),$e&&(Se=!1),U&&(pe=!0),de&&(ve=qt({},O3),Ne=[],de.html===!0&&(qt(ve,P3),qt(Ne,D3)),de.svg===!0&&(qt(ve,cC),qt(Ne,hC),qt(Ne,E0)),de.svgFilters===!0&&(qt(ve,fC),qt(Ne,hC),qt(Ne,E0)),de.mathMl===!0&&(qt(ve,dC),qt(Ne,M3),qt(Ne,E0))),te.ADD_TAGS&&(ve===De&&(ve=Ac(ve)),qt(ve,te.ADD_TAGS,Pn)),te.ADD_ATTR&&(Ne===ze&&(Ne=Ac(Ne)),qt(Ne,te.ADD_ATTR,Pn)),te.ADD_URI_SAFE_ATTR&&qt(ie,te.ADD_URI_SAFE_ATTR,Pn),te.FORBID_CONTENTS&&(Be===Xe&&(Be=Ac(Be)),qt(Be,te.FORBID_CONTENTS,Pn)),Pe&&(ve["#text"]=!0),G&&qt(ve,["html","head","body"]),ve.table&&(qt(ve,["tbody"]),delete je.tbody),te.TRUSTED_TYPES_POLICY){if(typeof te.TRUSTED_TYPES_POLICY.createHTML!="function")throw Op('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof te.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Op('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');S=te.TRUSTED_TYPES_POLICY,C=S.createHTML("")}else S===void 0&&(S=I1e(h,i)),S!==null&&typeof C=="string"&&(C=S.createHTML(""));Di&&Di(te),pr=te}},bm=qt({},[...cC,...fC,...m1e]),Pf=qt({},[...dC,...y1e]),jS=function(te){let Ue=w(te);(!Ue||!Ue.tagName)&&(Ue={namespaceURI:Ae,tagName:"template"});const at=M_(te.tagName),Sn=M_(Ue.tagName);return Qe[te.namespaceURI]?te.namespaceURI===He?Ue.namespaceURI===ne?at==="svg":Ue.namespaceURI===Ce?at==="svg"&&(Sn==="annotation-xml"||We[Sn]):!!bm[at]:te.namespaceURI===Ce?Ue.namespaceURI===ne?at==="math":Ue.namespaceURI===He?at==="math"&&et[Sn]:!!Pf[at]:te.namespaceURI===ne?Ue.namespaceURI===He&&!et[Sn]||Ue.namespaceURI===Ce&&!We[Sn]?!1:!Pf[at]&&(It[at]||!bm[at]):!!(Pt==="application/xhtml+xml"&&Qe[te.namespaceURI]):!1},Mi=function(te){Rp(t.removed,{element:te});try{w(te).removeChild(te)}catch{y(te)}},Of=function(te,Ue){try{Rp(t.removed,{attribute:Ue.getAttributeNode(te),from:Ue})}catch{Rp(t.removed,{attribute:null,from:Ue})}if(Ue.removeAttribute(te),te==="is")if(pe||U)try{Mi(Ue)}catch{}else try{Ue.setAttribute(te,"")}catch{}},Sm=function(te){let Ue=null,at=null;if(we)te=""+te;else{const Qn=R3(te,/^[\r\n\t ]+/);at=Qn&&Qn[0]}Pt==="application/xhtml+xml"&&Ae===ne&&(te=''+te+"");const Sn=S?S.createHTML(te):te;if(Ae===ne)try{Ue=new d().parseFromString(Sn,Pt)}catch{}if(!Ue||!Ue.documentElement){Ue=T.createDocument(Ae,"template",null);try{Ue.documentElement.innerHTML=ke?C:Sn}catch{}}const Rr=Ue.body||Ue.documentElement;return te&&at&&Rr.insertBefore(n.createTextNode(at),Rr.childNodes[0]||null),Ae===ne?I.call(Ue,G?"html":"body")[0]:G?Ue.documentElement:Rr},wm=function(te){return A.call(te.ownerDocument||te,te,u.SHOW_ELEMENT|u.SHOW_COMMENT|u.SHOW_TEXT|u.SHOW_PROCESSING_INSTRUCTION|u.SHOW_CDATA_SECTION,null)},Lh=function(te){return te instanceof f&&(typeof te.nodeName!="string"||typeof te.textContent!="string"||typeof te.removeChild!="function"||!(te.attributes instanceof c)||typeof te.removeAttribute!="function"||typeof te.setAttribute!="function"||typeof te.namespaceURI!="string"||typeof te.insertBefore!="function"||typeof te.hasChildNodes!="function")},xm=function(te){return typeof s=="function"&&te instanceof s};function da(pt,te,Ue){C0(pt,at=>{at.call(t,te,Ue,pr)})}const Tm=function(te){let Ue=null;if(da(O.beforeSanitizeElements,te,null),Lh(te))return Mi(te),!0;const at=Pn(te.nodeName);if(da(O.uponSanitizeElement,te,{tagName:at,allowedTags:ve}),te.hasChildNodes()&&!xm(te.firstElementChild)&&yi(/<[/\w]/g,te.innerHTML)&&yi(/<[/\w]/g,te.textContent)||te.nodeType===Mp.progressingInstruction||H&&te.nodeType===Mp.comment&&yi(/<[/\w]/g,te.data))return Mi(te),!0;if(!ve[at]||je[at]){if(!je[at]&&Nh(at)&&(Me.tagNameCheck instanceof RegExp&&yi(Me.tagNameCheck,at)||Me.tagNameCheck instanceof Function&&Me.tagNameCheck(at)))return!1;if(Pe&&!Be[at]){const Sn=w(te)||te.parentNode,Rr=b(te)||te.childNodes;if(Rr&&Sn){const Qn=Rr.length;for(let Wr=Qn-1;Wr>=0;--Wr){const Oo=m(Rr[Wr],!0);Oo.__removalCount=(te.__removalCount||0)+1,Sn.insertBefore(Oo,_(te))}}}return Mi(te),!0}return te instanceof l&&!jS(te)||(at==="noscript"||at==="noembed"||at==="noframes")&&yi(/<\/no(script|embed|frames)/i,te.innerHTML)?(Mi(te),!0):($e&&te.nodeType===Mp.text&&(Ue=te.textContent,C0([M,$,F],Sn=>{Ue=Pp(Ue,Sn," ")}),te.textContent!==Ue&&(Rp(t.removed,{element:te.cloneNode()}),te.textContent=Ue)),da(O.afterSanitizeElements,te,null),!1)},Cm=function(te,Ue,at){if(q&&(Ue==="id"||Ue==="name")&&(at in n||at in Rf))return!1;if(!(Se&&!ce[Ue]&&yi(z,Ue))){if(!(Ee&&yi(B,Ue))){if(!Ne[Ue]||ce[Ue]){if(!(Nh(te)&&(Me.tagNameCheck instanceof RegExp&&yi(Me.tagNameCheck,te)||Me.tagNameCheck instanceof Function&&Me.tagNameCheck(te))&&(Me.attributeNameCheck instanceof RegExp&&yi(Me.attributeNameCheck,Ue)||Me.attributeNameCheck instanceof Function&&Me.attributeNameCheck(Ue))||Ue==="is"&&Me.allowCustomizedBuiltInElements&&(Me.tagNameCheck instanceof RegExp&&yi(Me.tagNameCheck,at)||Me.tagNameCheck instanceof Function&&Me.tagNameCheck(at))))return!1}else if(!ie[Ue]){if(!yi(ge,Pp(at,j,""))){if(!((Ue==="src"||Ue==="xlink:href"||Ue==="href")&&te!=="script"&&h1e(at,"data:")===0&&ht[te])){if(!(Te&&!yi(Y,Pp(at,j,"")))){if(at)return!1}}}}}}return!0},Nh=function(te){return te!=="annotation-xml"&&R3(te,se)},Em=function(te){da(O.beforeSanitizeAttributes,te,null);const{attributes:Ue}=te;if(!Ue||Lh(te))return;const at={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Ne,forceKeepAttr:void 0};let Sn=Ue.length;for(;Sn--;){const Rr=Ue[Sn],{name:Qn,namespaceURI:Wr,value:Oo}=Rr,Gu=Pn(Qn);let Pr=Qn==="value"?Oo:p1e(Oo);if(at.attrName=Gu,at.attrValue=Pr,at.keepAttr=!0,at.forceKeepAttr=void 0,da(O.uponSanitizeAttribute,te,at),Pr=at.attrValue,fe&&(Gu==="id"||Gu==="name")&&(Of(Qn,te),Pr=_e+Pr),H&&yi(/((--!?|])>)|<\/(style|title)/i,Pr)){Of(Qn,te);continue}if(at.forceKeepAttr||(Of(Qn,te),!at.keepAttr))continue;if(!Oe&&yi(/\/>/i,Pr)){Of(Qn,te);continue}$e&&C0([M,$,F],Fh=>{Pr=Pp(Pr,Fh," ")});const kh=Pn(te.nodeName);if(Cm(kh,Gu,Pr)){if(S&&typeof h=="object"&&typeof h.getAttributeType=="function"&&!Wr)switch(h.getAttributeType(kh,Gu)){case"TrustedHTML":{Pr=S.createHTML(Pr);break}case"TrustedScriptURL":{Pr=S.createScriptURL(Pr);break}}try{Wr?te.setAttributeNS(Wr,Qn,Pr):te.setAttribute(Qn,Pr),Lh(te)?Mi(te):I3(t.removed)}catch{}}}da(O.afterSanitizeAttributes,te,null)},YS=function pt(te){let Ue=null;const at=wm(te);for(da(O.beforeSanitizeShadowDOM,te,null);Ue=at.nextNode();)da(O.uponSanitizeShadowNode,Ue,null),Tm(Ue),Em(Ue),Ue.content instanceof o&&pt(Ue.content);da(O.afterSanitizeShadowDOM,te,null)};return t.sanitize=function(pt){let te=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},Ue=null,at=null,Sn=null,Rr=null;if(ke=!pt,ke&&(pt=""),typeof pt!="string"&&!xm(pt))if(typeof pt.toString=="function"){if(pt=pt.toString(),typeof pt!="string")throw Op("dirty is not a string, aborting")}else throw Op("toString is not a function");if(!t.isSupported)return pt;if(le||Va(te),t.removed=[],typeof pt=="string"&&(Z=!1),Z){if(pt.nodeName){const Oo=Pn(pt.nodeName);if(!ve[Oo]||je[Oo])throw Op("root node is forbidden and cannot be sanitized in-place")}}else if(pt instanceof s)Ue=Sm(""),at=Ue.ownerDocument.importNode(pt,!0),at.nodeType===Mp.element&&at.nodeName==="BODY"||at.nodeName==="HTML"?Ue=at:Ue.appendChild(at);else{if(!pe&&!$e&&!G&&pt.indexOf("<")===-1)return S&&W?S.createHTML(pt):pt;if(Ue=Sm(pt),!Ue)return pe?null:W?C:""}Ue&&we&&Mi(Ue.firstChild);const Qn=wm(Z?pt:Ue);for(;Sn=Qn.nextNode();)Tm(Sn),Em(Sn),Sn.content instanceof o&&YS(Sn.content);if(Z)return pt;if(pe){if(U)for(Rr=P.call(Ue.ownerDocument);Ue.firstChild;)Rr.appendChild(Ue.firstChild);else Rr=Ue;return(Ne.shadowroot||Ne.shadowrootmode)&&(Rr=R.call(r,Rr,!0)),Rr}let Wr=G?Ue.outerHTML:Ue.innerHTML;return G&&ve["!doctype"]&&Ue.ownerDocument&&Ue.ownerDocument.doctype&&Ue.ownerDocument.doctype.name&&yi(b8,Ue.ownerDocument.doctype.name)&&(Wr=" +`+Wr),$e&&C0([M,$,F],Oo=>{Wr=Pp(Wr,Oo," ")}),S&&W?S.createHTML(Wr):Wr},t.setConfig=function(){let pt=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Va(pt),le=!0},t.clearConfig=function(){pr=null,le=!1},t.isValidAttribute=function(pt,te,Ue){pr||Va({});const at=Pn(pt),Sn=Pn(te);return Cm(at,Sn,Ue)},t.addHook=function(pt,te){typeof te=="function"&&Rp(O[pt],te)},t.removeHook=function(pt){return I3(O[pt])},t.removeHooks=function(pt){O[pt]=[]},t.removeAllHooks=function(){O=N3()},t}var R1e=S8();const P1e=["innerHTML"],O1e=["src"],k3="data:image/svg+xml,",w8=it({__name:"ProxyIcon",props:{icon:{},fill:{},size:{}},setup(e){const t=e,n=Ve(()=>({width:(t.size==="small"?yv.value:yv.value+4)+"px",marginRight:r_.value-4+"px"})),r=Ve(()=>t.icon.startsWith(k3)),i=Ve(()=>{if(r.value)return R1e.sanitize(t.icon.replace(k3,""))}),o=Fe(""),a=async(l,u)=>{const f=await(await fetch(u)).blob(),d=new FileReader;d.onload=async()=>{const h=d.result;await mre(l,h),o.value=h},d.readAsDataURL(f)},s=async()=>{const l=t.icon;try{const u=await yre(l);u?o.value=u:await a(l,l)}catch(u){console.error("Fallback to original icon:",u),o.value=t.icon}};return lo(()=>{r.value?o.value=t.icon:s()}),(l,u)=>r.value?(K(),ae("div",{key:0,class:rt(["inline-block",l.fill||"fill-primary"]),style:Gr(n.value),innerHTML:i.value},null,14,P1e)):(K(),ae("img",{key:1,style:Gr(n.value),src:o.value},null,12,O1e))}}),D1e={class:"flex items-center gap-1"},W1=it({__name:"ProxyName",props:{name:{},size:{}},setup(e){const t=e,n=Ve(()=>{var r;return(r=fi.value[t.name])==null?void 0:r.icon});return(r,i)=>(K(),ae("div",D1e,[n.value?(K(),Ot(w8,{key:0,icon:n.value,size:r.size==="large"?"large":"small"},null,8,["icon","size"])):mt("",!0),L("span",{class:rt(r.size==="large"?"text-lg font-medium":"text-sm")},re(r.name),3)]))}});var to="top",sa="bottom",la="right",no="left",fP="auto",cm=[to,sa,la,no],uh="start",Dg="end",M1e="clippingParents",x8="viewport",Lp="popper",L1e="reference",F3=cm.reduce(function(e,t){return e.concat([t+"-"+uh,t+"-"+Dg])},[]),T8=[].concat(cm,[fP]).reduce(function(e,t){return e.concat([t,t+"-"+uh,t+"-"+Dg])},[]),N1e="beforeRead",k1e="read",F1e="afterRead",$1e="beforeMain",B1e="main",V1e="afterMain",U1e="beforeWrite",H1e="write",G1e="afterWrite",z1e=[N1e,k1e,F1e,$1e,B1e,V1e,U1e,H1e,G1e];function ps(e){return e?(e.nodeName||"").toLowerCase():null}function Po(e){if(e==null)return window;if(e.toString()!=="[object Window]"){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function bf(e){var t=Po(e).Element;return e instanceof t||e instanceof Element}function ra(e){var t=Po(e).HTMLElement;return e instanceof t||e instanceof HTMLElement}function dP(e){if(typeof ShadowRoot>"u")return!1;var t=Po(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot}function W1e(e){var t=e.state;Object.keys(t.elements).forEach(function(n){var r=t.styles[n]||{},i=t.attributes[n]||{},o=t.elements[n];!ra(o)||!ps(o)||(Object.assign(o.style,r),Object.keys(i).forEach(function(a){var s=i[a];s===!1?o.removeAttribute(a):o.setAttribute(a,s===!0?"":s)}))})}function j1e(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach(function(r){var i=t.elements[r],o=t.attributes[r]||{},a=Object.keys(t.styles.hasOwnProperty(r)?t.styles[r]:n[r]),s=a.reduce(function(l,u){return l[u]="",l},{});!ra(i)||!ps(i)||(Object.assign(i.style,s),Object.keys(o).forEach(function(l){i.removeAttribute(l)}))})}}const C8={name:"applyStyles",enabled:!0,phase:"write",fn:W1e,effect:j1e,requires:["computeStyles"]};function as(e){return e.split("-")[0]}var af=Math.max,j1=Math.min,ch=Math.round;function kA(){var e=navigator.userAgentData;return e!=null&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(t){return t.brand+"/"+t.version}).join(" "):navigator.userAgent}function E8(){return!/^((?!chrome|android).)*safari/i.test(kA())}function fh(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var r=e.getBoundingClientRect(),i=1,o=1;t&&ra(e)&&(i=e.offsetWidth>0&&ch(r.width)/e.offsetWidth||1,o=e.offsetHeight>0&&ch(r.height)/e.offsetHeight||1);var a=bf(e)?Po(e):window,s=a.visualViewport,l=!E8()&&n,u=(r.left+(l&&s?s.offsetLeft:0))/i,c=(r.top+(l&&s?s.offsetTop:0))/o,f=r.width/i,d=r.height/o;return{width:f,height:d,top:c,right:u+f,bottom:c+d,left:u,x:u,y:c}}function hP(e){var t=fh(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function A8(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&dP(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function gl(e){return Po(e).getComputedStyle(e)}function Y1e(e){return["table","td","th"].indexOf(ps(e))>=0}function Hu(e){return((bf(e)?e.ownerDocument:e.document)||window.document).documentElement}function ES(e){return ps(e)==="html"?e:e.assignedSlot||e.parentNode||(dP(e)?e.host:null)||Hu(e)}function $3(e){return!ra(e)||gl(e).position==="fixed"?null:e.offsetParent}function X1e(e){var t=/firefox/i.test(kA()),n=/Trident/i.test(kA());if(n&&ra(e)){var r=gl(e);if(r.position==="fixed")return null}var i=ES(e);for(dP(i)&&(i=i.host);ra(i)&&["html","body"].indexOf(ps(i))<0;){var o=gl(i);if(o.transform!=="none"||o.perspective!=="none"||o.contain==="paint"||["transform","perspective"].indexOf(o.willChange)!==-1||t&&o.willChange==="filter"||t&&o.filter&&o.filter!=="none")return i;i=i.parentNode}return null}function fm(e){for(var t=Po(e),n=$3(e);n&&Y1e(n)&&gl(n).position==="static";)n=$3(n);return n&&(ps(n)==="html"||ps(n)==="body"&&gl(n).position==="static")?t:n||X1e(e)||t}function pP(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function $v(e,t,n){return af(e,j1(t,n))}function K1e(e,t,n){var r=$v(e,t,n);return r>n?n:r}function I8(){return{top:0,right:0,bottom:0,left:0}}function R8(e){return Object.assign({},I8(),e)}function P8(e,t){return t.reduce(function(n,r){return n[r]=e,n},{})}var Z1e=function(t,n){return t=typeof t=="function"?t(Object.assign({},n.rects,{placement:n.placement})):t,R8(typeof t!="number"?t:P8(t,cm))};function q1e(e){var t,n=e.state,r=e.name,i=e.options,o=n.elements.arrow,a=n.modifiersData.popperOffsets,s=as(n.placement),l=pP(s),u=[no,la].indexOf(s)>=0,c=u?"height":"width";if(!(!o||!a)){var f=Z1e(i.padding,n),d=hP(o),h=l==="y"?to:no,v=l==="y"?sa:la,m=n.rects.reference[c]+n.rects.reference[l]-a[l]-n.rects.popper[c],y=a[l]-n.rects.reference[l],_=fm(o),b=_?l==="y"?_.clientHeight||0:_.clientWidth||0:0,w=m/2-y/2,S=f[h],C=b-d[c]-f[v],T=b/2-d[c]/2+w,A=$v(S,T,C),P=l;n.modifiersData[r]=(t={},t[P]=A,t.centerOffset=A-T,t)}}function J1e(e){var t=e.state,n=e.options,r=n.element,i=r===void 0?"[data-popper-arrow]":r;i!=null&&(typeof i=="string"&&(i=t.elements.popper.querySelector(i),!i)||A8(t.elements.popper,i)&&(t.elements.arrow=i))}const Q1e={name:"arrow",enabled:!0,phase:"main",fn:q1e,effect:J1e,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function dh(e){return e.split("-")[1]}var ebe={top:"auto",right:"auto",bottom:"auto",left:"auto"};function tbe(e,t){var n=e.x,r=e.y,i=t.devicePixelRatio||1;return{x:ch(n*i)/i||0,y:ch(r*i)/i||0}}function B3(e){var t,n=e.popper,r=e.popperRect,i=e.placement,o=e.variation,a=e.offsets,s=e.position,l=e.gpuAcceleration,u=e.adaptive,c=e.roundOffsets,f=e.isFixed,d=a.x,h=d===void 0?0:d,v=a.y,m=v===void 0?0:v,y=typeof c=="function"?c({x:h,y:m}):{x:h,y:m};h=y.x,m=y.y;var _=a.hasOwnProperty("x"),b=a.hasOwnProperty("y"),w=no,S=to,C=window;if(u){var T=fm(n),A="clientHeight",P="clientWidth";if(T===Po(n)&&(T=Hu(n),gl(T).position!=="static"&&s==="absolute"&&(A="scrollHeight",P="scrollWidth")),T=T,i===to||(i===no||i===la)&&o===Dg){S=sa;var I=f&&T===C&&C.visualViewport?C.visualViewport.height:T[A];m-=I-r.height,m*=l?1:-1}if(i===no||(i===to||i===sa)&&o===Dg){w=la;var R=f&&T===C&&C.visualViewport?C.visualViewport.width:T[P];h-=R-r.width,h*=l?1:-1}}var O=Object.assign({position:s},u&&ebe),M=c===!0?tbe({x:h,y:m},Po(n)):{x:h,y:m};if(h=M.x,m=M.y,l){var $;return Object.assign({},O,($={},$[S]=b?"0":"",$[w]=_?"0":"",$.transform=(C.devicePixelRatio||1)<=1?"translate("+h+"px, "+m+"px)":"translate3d("+h+"px, "+m+"px, 0)",$))}return Object.assign({},O,(t={},t[S]=b?m+"px":"",t[w]=_?h+"px":"",t.transform="",t))}function nbe(e){var t=e.state,n=e.options,r=n.gpuAcceleration,i=r===void 0?!0:r,o=n.adaptive,a=o===void 0?!0:o,s=n.roundOffsets,l=s===void 0?!0:s,u={placement:as(t.placement),variation:dh(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:i,isFixed:t.options.strategy==="fixed"};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,B3(Object.assign({},u,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:a,roundOffsets:l})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,B3(Object.assign({},u,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})}const rbe={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:nbe,data:{}};var A0={passive:!0};function ibe(e){var t=e.state,n=e.instance,r=e.options,i=r.scroll,o=i===void 0?!0:i,a=r.resize,s=a===void 0?!0:a,l=Po(t.elements.popper),u=[].concat(t.scrollParents.reference,t.scrollParents.popper);return o&&u.forEach(function(c){c.addEventListener("scroll",n.update,A0)}),s&&l.addEventListener("resize",n.update,A0),function(){o&&u.forEach(function(c){c.removeEventListener("scroll",n.update,A0)}),s&&l.removeEventListener("resize",n.update,A0)}}const obe={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:ibe,data:{}};var abe={left:"right",right:"left",bottom:"top",top:"bottom"};function L_(e){return e.replace(/left|right|bottom|top/g,function(t){return abe[t]})}var sbe={start:"end",end:"start"};function V3(e){return e.replace(/start|end/g,function(t){return sbe[t]})}function vP(e){var t=Po(e),n=t.pageXOffset,r=t.pageYOffset;return{scrollLeft:n,scrollTop:r}}function gP(e){return fh(Hu(e)).left+vP(e).scrollLeft}function lbe(e,t){var n=Po(e),r=Hu(e),i=n.visualViewport,o=r.clientWidth,a=r.clientHeight,s=0,l=0;if(i){o=i.width,a=i.height;var u=E8();(u||!u&&t==="fixed")&&(s=i.offsetLeft,l=i.offsetTop)}return{width:o,height:a,x:s+gP(e),y:l}}function ube(e){var t,n=Hu(e),r=vP(e),i=(t=e.ownerDocument)==null?void 0:t.body,o=af(n.scrollWidth,n.clientWidth,i?i.scrollWidth:0,i?i.clientWidth:0),a=af(n.scrollHeight,n.clientHeight,i?i.scrollHeight:0,i?i.clientHeight:0),s=-r.scrollLeft+gP(e),l=-r.scrollTop;return gl(i||n).direction==="rtl"&&(s+=af(n.clientWidth,i?i.clientWidth:0)-o),{width:o,height:a,x:s,y:l}}function mP(e){var t=gl(e),n=t.overflow,r=t.overflowX,i=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+i+r)}function O8(e){return["html","body","#document"].indexOf(ps(e))>=0?e.ownerDocument.body:ra(e)&&mP(e)?e:O8(ES(e))}function Bv(e,t){var n;t===void 0&&(t=[]);var r=O8(e),i=r===((n=e.ownerDocument)==null?void 0:n.body),o=Po(r),a=i?[o].concat(o.visualViewport||[],mP(r)?r:[]):r,s=t.concat(a);return i?s:s.concat(Bv(ES(a)))}function FA(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function cbe(e,t){var n=fh(e,!1,t==="fixed");return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}function U3(e,t,n){return t===x8?FA(lbe(e,n)):bf(t)?cbe(t,n):FA(ube(Hu(e)))}function fbe(e){var t=Bv(ES(e)),n=["absolute","fixed"].indexOf(gl(e).position)>=0,r=n&&ra(e)?fm(e):e;return bf(r)?t.filter(function(i){return bf(i)&&A8(i,r)&&ps(i)!=="body"}):[]}function dbe(e,t,n,r){var i=t==="clippingParents"?fbe(e):[].concat(t),o=[].concat(i,[n]),a=o[0],s=o.reduce(function(l,u){var c=U3(e,u,r);return l.top=af(c.top,l.top),l.right=j1(c.right,l.right),l.bottom=j1(c.bottom,l.bottom),l.left=af(c.left,l.left),l},U3(e,a,r));return s.width=s.right-s.left,s.height=s.bottom-s.top,s.x=s.left,s.y=s.top,s}function D8(e){var t=e.reference,n=e.element,r=e.placement,i=r?as(r):null,o=r?dh(r):null,a=t.x+t.width/2-n.width/2,s=t.y+t.height/2-n.height/2,l;switch(i){case to:l={x:a,y:t.y-n.height};break;case sa:l={x:a,y:t.y+t.height};break;case la:l={x:t.x+t.width,y:s};break;case no:l={x:t.x-n.width,y:s};break;default:l={x:t.x,y:t.y}}var u=i?pP(i):null;if(u!=null){var c=u==="y"?"height":"width";switch(o){case uh:l[u]=l[u]-(t[c]/2-n[c]/2);break;case Dg:l[u]=l[u]+(t[c]/2-n[c]/2);break}}return l}function Mg(e,t){t===void 0&&(t={});var n=t,r=n.placement,i=r===void 0?e.placement:r,o=n.strategy,a=o===void 0?e.strategy:o,s=n.boundary,l=s===void 0?M1e:s,u=n.rootBoundary,c=u===void 0?x8:u,f=n.elementContext,d=f===void 0?Lp:f,h=n.altBoundary,v=h===void 0?!1:h,m=n.padding,y=m===void 0?0:m,_=R8(typeof y!="number"?y:P8(y,cm)),b=d===Lp?L1e:Lp,w=e.rects.popper,S=e.elements[v?b:d],C=dbe(bf(S)?S:S.contextElement||Hu(e.elements.popper),l,c,a),T=fh(e.elements.reference),A=D8({reference:T,element:w,strategy:"absolute",placement:i}),P=FA(Object.assign({},w,A)),I=d===Lp?P:T,R={top:C.top-I.top+_.top,bottom:I.bottom-C.bottom+_.bottom,left:C.left-I.left+_.left,right:I.right-C.right+_.right},O=e.modifiersData.offset;if(d===Lp&&O){var M=O[i];Object.keys(R).forEach(function($){var F=[la,sa].indexOf($)>=0?1:-1,z=[to,sa].indexOf($)>=0?"y":"x";R[$]+=M[z]*F})}return R}function hbe(e,t){t===void 0&&(t={});var n=t,r=n.placement,i=n.boundary,o=n.rootBoundary,a=n.padding,s=n.flipVariations,l=n.allowedAutoPlacements,u=l===void 0?T8:l,c=dh(r),f=c?s?F3:F3.filter(function(v){return dh(v)===c}):cm,d=f.filter(function(v){return u.indexOf(v)>=0});d.length===0&&(d=f);var h=d.reduce(function(v,m){return v[m]=Mg(e,{placement:m,boundary:i,rootBoundary:o,padding:a})[as(m)],v},{});return Object.keys(h).sort(function(v,m){return h[v]-h[m]})}function pbe(e){if(as(e)===fP)return[];var t=L_(e);return[V3(e),t,V3(t)]}function vbe(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var i=n.mainAxis,o=i===void 0?!0:i,a=n.altAxis,s=a===void 0?!0:a,l=n.fallbackPlacements,u=n.padding,c=n.boundary,f=n.rootBoundary,d=n.altBoundary,h=n.flipVariations,v=h===void 0?!0:h,m=n.allowedAutoPlacements,y=t.options.placement,_=as(y),b=_===y,w=l||(b||!v?[L_(y)]:pbe(y)),S=[y].concat(w).reduce(function(ze,Me){return ze.concat(as(Me)===fP?hbe(t,{placement:Me,boundary:c,rootBoundary:f,padding:u,flipVariations:v,allowedAutoPlacements:m}):Me)},[]),C=t.rects.reference,T=t.rects.popper,A=new Map,P=!0,I=S[0],R=0;R=0,z=F?"width":"height",B=Mg(t,{placement:O,boundary:c,rootBoundary:f,altBoundary:d,padding:u}),Y=F?$?la:no:$?sa:to;C[z]>T[z]&&(Y=L_(Y));var j=L_(Y),se=[];if(o&&se.push(B[M]<=0),s&&se.push(B[Y]<=0,B[j]<=0),se.every(function(ze){return ze})){I=O,P=!1;break}A.set(O,se)}if(P)for(var ge=v?3:1,ve=function(Me){var je=S.find(function(ce){var Ee=A.get(ce);if(Ee)return Ee.slice(0,Me).every(function(Se){return Se})});if(je)return I=je,"break"},De=ge;De>0;De--){var Ne=ve(De);if(Ne==="break")break}t.placement!==I&&(t.modifiersData[r]._skip=!0,t.placement=I,t.reset=!0)}}const gbe={name:"flip",enabled:!0,phase:"main",fn:vbe,requiresIfExists:["offset"],data:{_skip:!1}};function H3(e,t,n){return n===void 0&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function G3(e){return[to,la,sa,no].some(function(t){return e[t]>=0})}function mbe(e){var t=e.state,n=e.name,r=t.rects.reference,i=t.rects.popper,o=t.modifiersData.preventOverflow,a=Mg(t,{elementContext:"reference"}),s=Mg(t,{altBoundary:!0}),l=H3(a,r),u=H3(s,i,o),c=G3(l),f=G3(u);t.modifiersData[n]={referenceClippingOffsets:l,popperEscapeOffsets:u,isReferenceHidden:c,hasPopperEscaped:f},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":c,"data-popper-escaped":f})}const ybe={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:mbe};function _be(e,t,n){var r=as(e),i=[no,to].indexOf(r)>=0?-1:1,o=typeof n=="function"?n(Object.assign({},t,{placement:e})):n,a=o[0],s=o[1];return a=a||0,s=(s||0)*i,[no,la].indexOf(r)>=0?{x:s,y:a}:{x:a,y:s}}function bbe(e){var t=e.state,n=e.options,r=e.name,i=n.offset,o=i===void 0?[0,0]:i,a=T8.reduce(function(c,f){return c[f]=_be(f,t.rects,o),c},{}),s=a[t.placement],l=s.x,u=s.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=l,t.modifiersData.popperOffsets.y+=u),t.modifiersData[r]=a}const Sbe={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:bbe};function wbe(e){var t=e.state,n=e.name;t.modifiersData[n]=D8({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})}const xbe={name:"popperOffsets",enabled:!0,phase:"read",fn:wbe,data:{}};function Tbe(e){return e==="x"?"y":"x"}function Cbe(e){var t=e.state,n=e.options,r=e.name,i=n.mainAxis,o=i===void 0?!0:i,a=n.altAxis,s=a===void 0?!1:a,l=n.boundary,u=n.rootBoundary,c=n.altBoundary,f=n.padding,d=n.tether,h=d===void 0?!0:d,v=n.tetherOffset,m=v===void 0?0:v,y=Mg(t,{boundary:l,rootBoundary:u,padding:f,altBoundary:c}),_=as(t.placement),b=dh(t.placement),w=!b,S=pP(_),C=Tbe(S),T=t.modifiersData.popperOffsets,A=t.rects.reference,P=t.rects.popper,I=typeof m=="function"?m(Object.assign({},t.rects,{placement:t.placement})):m,R=typeof I=="number"?{mainAxis:I,altAxis:I}:Object.assign({mainAxis:0,altAxis:0},I),O=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,M={x:0,y:0};if(T){if(o){var $,F=S==="y"?to:no,z=S==="y"?sa:la,B=S==="y"?"height":"width",Y=T[S],j=Y+y[F],se=Y-y[z],ge=h?-P[B]/2:0,ve=b===uh?A[B]:P[B],De=b===uh?-P[B]:-A[B],Ne=t.elements.arrow,ze=h&&Ne?hP(Ne):{width:0,height:0},Me=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:I8(),je=Me[F],ce=Me[z],Ee=$v(0,A[B],ze[B]),Se=w?A[B]/2-ge-Ee-je-R.mainAxis:ve-Ee-je-R.mainAxis,Te=w?-A[B]/2+ge+Ee+ce+R.mainAxis:De+Ee+ce+R.mainAxis,Oe=t.elements.arrow&&fm(t.elements.arrow),$e=Oe?S==="y"?Oe.clientTop||0:Oe.clientLeft||0:0,H=($=O==null?void 0:O[S])!=null?$:0,G=Y+Se-H-$e,le=Y+Te-H,we=$v(h?j1(j,G):j,Y,h?af(se,le):se);T[S]=we,M[S]=we-Y}if(s){var pe,U=S==="x"?to:no,W=S==="x"?sa:la,q=T[C],fe=C==="y"?"height":"width",_e=q+y[U],Pe=q-y[W],Z=[to,no].indexOf(_)!==-1,de=(pe=O==null?void 0:O[C])!=null?pe:0,Be=Z?_e:q-A[fe]-P[fe]-de+R.altAxis,Xe=Z?q+A[fe]+P[fe]-de-R.altAxis:Pe,ht=h&&Z?K1e(Be,q,Xe):$v(h?Be:_e,q,h?Xe:Pe);T[C]=ht,M[C]=ht-q}t.modifiersData[r]=M}}const Ebe={name:"preventOverflow",enabled:!0,phase:"main",fn:Cbe,requiresIfExists:["offset"]};function Abe(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}function Ibe(e){return e===Po(e)||!ra(e)?vP(e):Abe(e)}function Rbe(e){var t=e.getBoundingClientRect(),n=ch(t.width)/e.offsetWidth||1,r=ch(t.height)/e.offsetHeight||1;return n!==1||r!==1}function Pbe(e,t,n){n===void 0&&(n=!1);var r=ra(t),i=ra(t)&&Rbe(t),o=Hu(t),a=fh(e,i,n),s={scrollLeft:0,scrollTop:0},l={x:0,y:0};return(r||!r&&!n)&&((ps(t)!=="body"||mP(o))&&(s=Ibe(t)),ra(t)?(l=fh(t,!0),l.x+=t.clientLeft,l.y+=t.clientTop):o&&(l.x=gP(o))),{x:a.left+s.scrollLeft-l.x,y:a.top+s.scrollTop-l.y,width:a.width,height:a.height}}function Obe(e){var t=new Map,n=new Set,r=[];e.forEach(function(o){t.set(o.name,o)});function i(o){n.add(o.name);var a=[].concat(o.requires||[],o.requiresIfExists||[]);a.forEach(function(s){if(!n.has(s)){var l=t.get(s);l&&i(l)}}),r.push(o)}return e.forEach(function(o){n.has(o.name)||i(o)}),r}function Dbe(e){var t=Obe(e);return z1e.reduce(function(n,r){return n.concat(t.filter(function(i){return i.phase===r}))},[])}function Mbe(e){var t;return function(){return t||(t=new Promise(function(n){Promise.resolve().then(function(){t=void 0,n(e())})})),t}}function Lbe(e){var t=e.reduce(function(n,r){var i=n[r.name];return n[r.name]=i?Object.assign({},i,r,{options:Object.assign({},i.options,r.options),data:Object.assign({},i.data,r.data)}):r,n},{});return Object.keys(t).map(function(n){return t[n]})}var z3={placement:"bottom",modifiers:[],strategy:"absolute"};function W3(){for(var e=arguments.length,t=new Array(e),n=0;n-1}function F8(e,t){return typeof e=="function"?e.apply(void 0,t):e}function j3(e,t){if(t===0)return e;var n;return function(r){clearTimeout(n),n=setTimeout(function(){e(r)},t)}}function Vbe(e){return e.split(/\s+/).filter(Boolean)}function Sd(e){return[].concat(e)}function Y3(e,t){e.indexOf(t)===-1&&e.push(t)}function Ube(e){return e.filter(function(t,n){return e.indexOf(t)===n})}function Hbe(e){return e.split("-")[0]}function Y1(e){return[].slice.call(e)}function X3(e){return Object.keys(e).reduce(function(t,n){return e[n]!==void 0&&(t[n]=e[n]),t},{})}function Vv(){return document.createElement("div")}function AS(e){return["Element","Fragment"].some(function(t){return yP(e,t)})}function Gbe(e){return yP(e,"NodeList")}function zbe(e){return yP(e,"MouseEvent")}function Wbe(e){return!!(e&&e._tippy&&e._tippy.reference===e)}function jbe(e){return AS(e)?[e]:Gbe(e)?Y1(e):Array.isArray(e)?e:Y1(document.querySelectorAll(e))}function vC(e,t){e.forEach(function(n){n&&(n.style.transitionDuration=t+"ms")})}function K3(e,t){e.forEach(function(n){n&&n.setAttribute("data-state",t)})}function Ybe(e){var t,n=Sd(e),r=n[0];return r!=null&&(t=r.ownerDocument)!=null&&t.body?r.ownerDocument:document}function Xbe(e,t){var n=t.clientX,r=t.clientY;return e.every(function(i){var o=i.popperRect,a=i.popperState,s=i.props,l=s.interactiveBorder,u=Hbe(a.placement),c=a.modifiersData.offset;if(!c)return!0;var f=u==="bottom"?c.top.y:0,d=u==="top"?c.bottom.y:0,h=u==="right"?c.left.x:0,v=u==="left"?c.right.x:0,m=o.top-r+f>l,y=r-o.bottom-d>l,_=o.left-n+h>l,b=n-o.right-v>l;return m||y||_||b})}function gC(e,t,n){var r=t+"EventListener";["transitionend","webkitTransitionEnd"].forEach(function(i){e[r](i,n)})}function Z3(e,t){for(var n=t;n;){var r;if(e.contains(n))return!0;n=n.getRootNode==null||(r=n.getRootNode())==null?void 0:r.host}return!1}var Qa={isTouch:!1},q3=0;function Kbe(){Qa.isTouch||(Qa.isTouch=!0,window.performance&&document.addEventListener("mousemove",$8))}function $8(){var e=performance.now();e-q3<20&&(Qa.isTouch=!1,document.removeEventListener("mousemove",$8)),q3=e}function Zbe(){var e=document.activeElement;if(Wbe(e)){var t=e._tippy;e.blur&&!t.state.isVisible&&e.blur()}}function qbe(){document.addEventListener("touchstart",Kbe,Ic),window.addEventListener("blur",Zbe)}var Jbe=typeof window<"u"&&typeof document<"u",Qbe=Jbe?!!window.msCrypto:!1,eSe={animateFill:!1,followCursor:!1,inlinePositioning:!1,sticky:!1},tSe={allowHTML:!1,animation:"fade",arrow:!0,content:"",inertia:!1,maxWidth:350,role:"tooltip",theme:"",zIndex:9999},Oa=Object.assign({appendTo:k8,aria:{content:"auto",expanded:"auto"},delay:0,duration:[300,250],getReferenceClientRect:null,hideOnClick:!0,ignoreAttributes:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,moveTransition:"",offset:[0,10],onAfterUpdate:function(){},onBeforeUpdate:function(){},onCreate:function(){},onDestroy:function(){},onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},onTrigger:function(){},onUntrigger:function(){},onClickOutside:function(){},placement:"top",plugins:[],popperOptions:{},render:null,showOnCreate:!1,touch:!0,trigger:"mouseenter focus",triggerTarget:null},eSe,tSe),nSe=Object.keys(Oa),rSe=function(t){var n=Object.keys(t);n.forEach(function(r){Oa[r]=t[r]})};function B8(e){var t=e.plugins||[],n=t.reduce(function(r,i){var o=i.name,a=i.defaultValue;if(o){var s;r[o]=e[o]!==void 0?e[o]:(s=Oa[o])!=null?s:a}return r},{});return Object.assign({},e,n)}function iSe(e,t){var n=t?Object.keys(B8(Object.assign({},Oa,{plugins:t}))):nSe,r=n.reduce(function(i,o){var a=(e.getAttribute("data-tippy-"+o)||"").trim();if(!a)return i;if(o==="content")i[o]=a;else try{i[o]=JSON.parse(a)}catch{i[o]=a}return i},{});return r}function J3(e,t){var n=Object.assign({},t,{content:F8(t.content,[e])},t.ignoreAttributes?{}:iSe(e,t.plugins));return n.aria=Object.assign({},Oa.aria,n.aria),n.aria={expanded:n.aria.expanded==="auto"?t.interactive:n.aria.expanded,content:n.aria.content==="auto"?t.interactive?null:"describedby":n.aria.content},n}var oSe=function(){return"innerHTML"};function $A(e,t){e[oSe()]=t}function Q3(e){var t=Vv();return e===!0?t.className=L8:(t.className=N8,AS(e)?t.appendChild(e):$A(t,e)),t}function e5(e,t){AS(t.content)?($A(e,""),e.appendChild(t.content)):typeof t.content!="function"&&(t.allowHTML?$A(e,t.content):e.textContent=t.content)}function BA(e){var t=e.firstElementChild,n=Y1(t.children);return{box:t,content:n.find(function(r){return r.classList.contains(M8)}),arrow:n.find(function(r){return r.classList.contains(L8)||r.classList.contains(N8)}),backdrop:n.find(function(r){return r.classList.contains(Bbe)})}}function V8(e){var t=Vv(),n=Vv();n.className=$be,n.setAttribute("data-state","hidden"),n.setAttribute("tabindex","-1");var r=Vv();r.className=M8,r.setAttribute("data-state","hidden"),e5(r,e.props),t.appendChild(n),n.appendChild(r),i(e.props,e.props);function i(o,a){var s=BA(t),l=s.box,u=s.content,c=s.arrow;a.theme?l.setAttribute("data-theme",a.theme):l.removeAttribute("data-theme"),typeof a.animation=="string"?l.setAttribute("data-animation",a.animation):l.removeAttribute("data-animation"),a.inertia?l.setAttribute("data-inertia",""):l.removeAttribute("data-inertia"),l.style.maxWidth=typeof a.maxWidth=="number"?a.maxWidth+"px":a.maxWidth,a.role?l.setAttribute("role",a.role):l.removeAttribute("role"),(o.content!==a.content||o.allowHTML!==a.allowHTML)&&e5(u,e.props),a.arrow?c?o.arrow!==a.arrow&&(l.removeChild(c),l.appendChild(Q3(a.arrow))):l.appendChild(Q3(a.arrow)):c&&l.removeChild(c)}return{popper:t,onUpdate:i}}V8.$$tippy=!0;var aSe=1,I0=[],mC=[];function sSe(e,t){var n=J3(e,Object.assign({},Oa,B8(X3(t)))),r,i,o,a=!1,s=!1,l=!1,u=!1,c,f,d,h=[],v=j3(G,n.interactiveDebounce),m,y=aSe++,_=null,b=Ube(n.plugins),w={isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},S={id:y,reference:e,popper:Vv(),popperInstance:_,props:n,state:w,plugins:b,clearDelayTimeouts:Be,setProps:Xe,setContent:ht,show:ee,hide:ie,hideWithInteractivity:he,enable:Z,disable:de,unmount:Ce,destroy:He};if(!n.render)return S;var C=n.render(S),T=C.popper,A=C.onUpdate;T.setAttribute("data-tippy-root",""),T.id="tippy-"+S.id,S.popper=T,e._tippy=S,T._tippy=S;var P=b.map(function(ne){return ne.fn(S)}),I=e.hasAttribute("aria-expanded");return Oe(),ge(),Y(),j("onCreate",[S]),n.showOnCreate&&_e(),T.addEventListener("mouseenter",function(){S.props.interactive&&S.state.isVisible&&S.clearDelayTimeouts()}),T.addEventListener("mouseleave",function(){S.props.interactive&&S.props.trigger.indexOf("mouseenter")>=0&&F().addEventListener("mousemove",v)}),S;function R(){var ne=S.props.touch;return Array.isArray(ne)?ne:[ne,0]}function O(){return R()[0]==="hold"}function M(){var ne;return!!((ne=S.props.render)!=null&&ne.$$tippy)}function $(){return m||e}function F(){var ne=$().parentNode;return ne?Ybe(ne):document}function z(){return BA(T)}function B(ne){return S.state.isMounted&&!S.state.isVisible||Qa.isTouch||c&&c.type==="focus"?0:pC(S.props.delay,ne?0:1,Oa.delay)}function Y(ne){ne===void 0&&(ne=!1),T.style.pointerEvents=S.props.interactive&&!ne?"":"none",T.style.zIndex=""+S.props.zIndex}function j(ne,Ae,ke){if(ke===void 0&&(ke=!0),P.forEach(function(Ge){Ge[ne]&&Ge[ne].apply(Ge,Ae)}),ke){var Qe;(Qe=S.props)[ne].apply(Qe,Ae)}}function se(){var ne=S.props.aria;if(ne.content){var Ae="aria-"+ne.content,ke=T.id,Qe=Sd(S.props.triggerTarget||e);Qe.forEach(function(Ge){var We=Ge.getAttribute(Ae);if(S.state.isVisible)Ge.setAttribute(Ae,We?We+" "+ke:ke);else{var et=We&&We.replace(ke,"").trim();et?Ge.setAttribute(Ae,et):Ge.removeAttribute(Ae)}})}}function ge(){if(!(I||!S.props.aria.expanded)){var ne=Sd(S.props.triggerTarget||e);ne.forEach(function(Ae){S.props.interactive?Ae.setAttribute("aria-expanded",S.state.isVisible&&Ae===$()?"true":"false"):Ae.removeAttribute("aria-expanded")})}}function ve(){F().removeEventListener("mousemove",v),I0=I0.filter(function(ne){return ne!==v})}function De(ne){if(!(Qa.isTouch&&(l||ne.type==="mousedown"))){var Ae=ne.composedPath&&ne.composedPath()[0]||ne.target;if(!(S.props.interactive&&Z3(T,Ae))){if(Sd(S.props.triggerTarget||e).some(function(ke){return Z3(ke,Ae)})){if(Qa.isTouch||S.state.isVisible&&S.props.trigger.indexOf("click")>=0)return}else j("onClickOutside",[S,ne]);S.props.hideOnClick===!0&&(S.clearDelayTimeouts(),S.hide(),s=!0,setTimeout(function(){s=!1}),S.state.isMounted||je())}}}function Ne(){l=!0}function ze(){l=!1}function Me(){var ne=F();ne.addEventListener("mousedown",De,!0),ne.addEventListener("touchend",De,Ic),ne.addEventListener("touchstart",ze,Ic),ne.addEventListener("touchmove",Ne,Ic)}function je(){var ne=F();ne.removeEventListener("mousedown",De,!0),ne.removeEventListener("touchend",De,Ic),ne.removeEventListener("touchstart",ze,Ic),ne.removeEventListener("touchmove",Ne,Ic)}function ce(ne,Ae){Se(ne,function(){!S.state.isVisible&&T.parentNode&&T.parentNode.contains(T)&&Ae()})}function Ee(ne,Ae){Se(ne,Ae)}function Se(ne,Ae){var ke=z().box;function Qe(Ge){Ge.target===ke&&(gC(ke,"remove",Qe),Ae())}if(ne===0)return Ae();gC(ke,"remove",f),gC(ke,"add",Qe),f=Qe}function Te(ne,Ae,ke){ke===void 0&&(ke=!1);var Qe=Sd(S.props.triggerTarget||e);Qe.forEach(function(Ge){Ge.addEventListener(ne,Ae,ke),h.push({node:Ge,eventType:ne,handler:Ae,options:ke})})}function Oe(){O()&&(Te("touchstart",H,{passive:!0}),Te("touchend",le,{passive:!0})),Vbe(S.props.trigger).forEach(function(ne){if(ne!=="manual")switch(Te(ne,H),ne){case"mouseenter":Te("mouseleave",le);break;case"focus":Te(Qbe?"focusout":"blur",we);break;case"focusin":Te("focusout",we);break}})}function $e(){h.forEach(function(ne){var Ae=ne.node,ke=ne.eventType,Qe=ne.handler,Ge=ne.options;Ae.removeEventListener(ke,Qe,Ge)}),h=[]}function H(ne){var Ae,ke=!1;if(!(!S.state.isEnabled||pe(ne)||s)){var Qe=((Ae=c)==null?void 0:Ae.type)==="focus";c=ne,m=ne.currentTarget,ge(),!S.state.isVisible&&zbe(ne)&&I0.forEach(function(Ge){return Ge(ne)}),ne.type==="click"&&(S.props.trigger.indexOf("mouseenter")<0||a)&&S.props.hideOnClick!==!1&&S.state.isVisible?ke=!0:_e(ne),ne.type==="click"&&(a=!ke),ke&&!Qe&&Pe(ne)}}function G(ne){var Ae=ne.target,ke=$().contains(Ae)||T.contains(Ae);if(!(ne.type==="mousemove"&&ke)){var Qe=fe().concat(T).map(function(Ge){var We,et=Ge._tippy,It=(We=et.popperInstance)==null?void 0:We.state;return It?{popperRect:Ge.getBoundingClientRect(),popperState:It,props:n}:null}).filter(Boolean);Xbe(Qe,ne)&&(ve(),Pe(ne))}}function le(ne){var Ae=pe(ne)||S.props.trigger.indexOf("click")>=0&&a;if(!Ae){if(S.props.interactive){S.hideWithInteractivity(ne);return}Pe(ne)}}function we(ne){S.props.trigger.indexOf("focusin")<0&&ne.target!==$()||S.props.interactive&&ne.relatedTarget&&T.contains(ne.relatedTarget)||Pe(ne)}function pe(ne){return Qa.isTouch?O()!==ne.type.indexOf("touch")>=0:!1}function U(){W();var ne=S.props,Ae=ne.popperOptions,ke=ne.placement,Qe=ne.offset,Ge=ne.getReferenceClientRect,We=ne.moveTransition,et=M()?BA(T).arrow:null,It=Ge?{getBoundingClientRect:Ge,contextElement:Ge.contextElement||$()}:e,Pt={name:"$$tippy",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:function(Pn){var pr=Pn.state;if(M()){var Rf=z(),Sl=Rf.box;["placement","reference-hidden","escaped"].forEach(function(Va){Va==="placement"?Sl.setAttribute("data-placement",pr.placement):pr.attributes.popper["data-popper-"+Va]?Sl.setAttribute("data-"+Va,""):Sl.removeAttribute("data-"+Va)}),pr.attributes.popper={}}}},Nn=[{name:"offset",options:{offset:Qe}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5}},{name:"computeStyles",options:{adaptive:!We}},Pt];M()&&et&&Nn.push({name:"arrow",options:{element:et,padding:3}}),Nn.push.apply(Nn,(Ae==null?void 0:Ae.modifiers)||[]),S.popperInstance=Fbe(It,T,Object.assign({},Ae,{placement:ke,onFirstUpdate:d,modifiers:Nn}))}function W(){S.popperInstance&&(S.popperInstance.destroy(),S.popperInstance=null)}function q(){var ne=S.props.appendTo,Ae,ke=$();S.props.interactive&&ne===k8||ne==="parent"?Ae=ke.parentNode:Ae=F8(ne,[ke]),Ae.contains(T)||Ae.appendChild(T),S.state.isMounted=!0,U()}function fe(){return Y1(T.querySelectorAll("[data-tippy-root]"))}function _e(ne){S.clearDelayTimeouts(),ne&&j("onTrigger",[S,ne]),Me();var Ae=B(!0),ke=R(),Qe=ke[0],Ge=ke[1];Qa.isTouch&&Qe==="hold"&&Ge&&(Ae=Ge),Ae?r=setTimeout(function(){S.show()},Ae):S.show()}function Pe(ne){if(S.clearDelayTimeouts(),j("onUntrigger",[S,ne]),!S.state.isVisible){je();return}if(!(S.props.trigger.indexOf("mouseenter")>=0&&S.props.trigger.indexOf("click")>=0&&["mouseleave","mousemove"].indexOf(ne.type)>=0&&a)){var Ae=B(!1);Ae?i=setTimeout(function(){S.state.isVisible&&S.hide()},Ae):o=requestAnimationFrame(function(){S.hide()})}}function Z(){S.state.isEnabled=!0}function de(){S.hide(),S.state.isEnabled=!1}function Be(){clearTimeout(r),clearTimeout(i),cancelAnimationFrame(o)}function Xe(ne){if(!S.state.isDestroyed){j("onBeforeUpdate",[S,ne]),$e();var Ae=S.props,ke=J3(e,Object.assign({},Ae,X3(ne),{ignoreAttributes:!0}));S.props=ke,Oe(),Ae.interactiveDebounce!==ke.interactiveDebounce&&(ve(),v=j3(G,ke.interactiveDebounce)),Ae.triggerTarget&&!ke.triggerTarget?Sd(Ae.triggerTarget).forEach(function(Qe){Qe.removeAttribute("aria-expanded")}):ke.triggerTarget&&e.removeAttribute("aria-expanded"),ge(),Y(),A&&A(Ae,ke),S.popperInstance&&(U(),fe().forEach(function(Qe){requestAnimationFrame(Qe._tippy.popperInstance.forceUpdate)})),j("onAfterUpdate",[S,ne])}}function ht(ne){S.setProps({content:ne})}function ee(){var ne=S.state.isVisible,Ae=S.state.isDestroyed,ke=!S.state.isEnabled,Qe=Qa.isTouch&&!S.props.touch,Ge=pC(S.props.duration,0,Oa.duration);if(!(ne||Ae||ke||Qe)&&!$().hasAttribute("disabled")&&(j("onShow",[S],!1),S.props.onShow(S)!==!1)){if(S.state.isVisible=!0,M()&&(T.style.visibility="visible"),Y(),Me(),S.state.isMounted||(T.style.transition="none"),M()){var We=z(),et=We.box,It=We.content;vC([et,It],0)}d=function(){var Nn;if(!(!S.state.isVisible||u)){if(u=!0,T.offsetHeight,T.style.transition=S.props.moveTransition,M()&&S.props.animation){var fa=z(),Pn=fa.box,pr=fa.content;vC([Pn,pr],Ge),K3([Pn,pr],"visible")}se(),ge(),Y3(mC,S),(Nn=S.popperInstance)==null||Nn.forceUpdate(),j("onMount",[S]),S.props.animation&&M()&&Ee(Ge,function(){S.state.isShown=!0,j("onShown",[S])})}},q()}}function ie(){var ne=!S.state.isVisible,Ae=S.state.isDestroyed,ke=!S.state.isEnabled,Qe=pC(S.props.duration,1,Oa.duration);if(!(ne||Ae||ke)&&(j("onHide",[S],!1),S.props.onHide(S)!==!1)){if(S.state.isVisible=!1,S.state.isShown=!1,u=!1,a=!1,M()&&(T.style.visibility="hidden"),ve(),je(),Y(!0),M()){var Ge=z(),We=Ge.box,et=Ge.content;S.props.animation&&(vC([We,et],Qe),K3([We,et],"hidden"))}se(),ge(),S.props.animation?M()&&ce(Qe,S.unmount):S.unmount()}}function he(ne){F().addEventListener("mousemove",v),Y3(I0,v),v(ne)}function Ce(){S.state.isVisible&&S.hide(),S.state.isMounted&&(W(),fe().forEach(function(ne){ne._tippy.unmount()}),T.parentNode&&T.parentNode.removeChild(T),mC=mC.filter(function(ne){return ne!==S}),S.state.isMounted=!1,j("onHidden",[S]))}function He(){S.state.isDestroyed||(S.clearDelayTimeouts(),S.unmount(),$e(),delete e._tippy,S.state.isDestroyed=!0,j("onDestroy",[S]))}}function dm(e,t){t===void 0&&(t={});var n=Oa.plugins.concat(t.plugins||[]);qbe();var r=Object.assign({},t,{plugins:n}),i=jbe(e),o=i.reduce(function(a,s){var l=s&&sSe(s,r);return l&&a.push(l),a},[]);return AS(e)?o[0]:o}dm.defaultProps=Oa;dm.setDefaultProps=rSe;dm.currentInput=Qa;Object.assign({},C8,{effect:function(t){var n=t.state,r={popper:{position:n.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};Object.assign(n.elements.popper.style,r.popper),n.styles=r,n.elements.arrow&&Object.assign(n.elements.arrow.style,r.arrow)}});dm.setDefaultProps({render:V8});const U8=()=>{let e=null;return{showTip:(n,r)=>{e==null||e.destroy(),e=dm(n.target,{content:r,placement:"top",animation:"scale",appendTo:document.body,allowHTML:!0,onHidden:()=>{e==null||e.destroy(),e=null}}),e.show()}}},lSe={class:"flex w-full flex-1 items-center gap-1"},uSe={class:"flex h-4 w-full items-center justify-between"},cSe=it({__name:"ProxyNodeCard",props:{name:{},active:{type:Boolean}},setup(e){const t=e,{showTip:n}=U8(),r=c=>{const f=c.target,{scrollWidth:d,clientWidth:h}=f;d>h&&n(c,f.innerText)},i=Ve(()=>fi.value[t.name]),o=Fe(!1),a=c=>(c=c.toLowerCase(),c=c.replace("shadowsocks","ss"),c=c.replace("hysteria","hy"),c=c.replace("wireguard","wg"),c),s=Ve(()=>mv.value===Zg.SMALL),l=Ve(()=>{const c=a(i.value.type),f=Zc.value&&Bre(i.value.name)?"IPv6":"",d=i.value.xudp?"xudp":i.value.udp?"udp":"";return[c,d,f].filter(Boolean).join(s.value?"/":" / ")}),u=async()=>{if(!o.value){o.value=!0;try{await Vre(t.name),o.value=!1}catch{o.value=!1}}};return(c,f)=>(K(),ae("div",{ref:"cardRef",class:rt(N(Cn)("flex cursor-pointer flex-col items-start gap-[2px] rounded-md bg-base-200",c.active?"bg-primary text-primary-content":"sm:hover:bg-base-300",s.value?"p-1":"p-2"))},[L("div",lSe,[i.value.icon?(K(),Ot(w8,{key:0,class:"shrink-0",size:"small",icon:i.value.icon,fill:c.active?"fill-primary-content":"fill-base-content"},null,8,["icon","fill"])):mt("",!0),L("span",{class:rt(N(Cn)("text-sm",N(vv)&&"truncate")),onMouseenter:r},re(i.value.name),35)]),L("div",uSe,[L("span",{class:rt(`whitespace-nowrap text-xs tracking-tight ${c.active?"text-primary-content":"text-slate-500"}`)},re(l.value),3),ye(g8,{class:rt([o.value?"animate-pulse cursor-wait":"",s.value&&"!h-4 !w-8"]),name:i.value.name,onClick:xo(u,["stop"])},null,8,["class","name"])])],2))}}),H8=Xb(cSe,[["__scopeId","data-v-c4818018"]]),fSe=it({__name:"ProxyNodeGrid",setup(e){const{hasTwoColumns:t}=Kb();return(n,r)=>(K(),ae("div",{class:rt(N(Cn)("grid grid-cols-2 gap-2 overflow-y-auto overflow-x-hidden",N(vv)&&"max-h-96",N(mv)===N(Zg).LARGE?N(mu)?N(t)?"sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-3 2xl:grid-cols-4 3xl:grid-cols-5":"sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 2xl:grid-cols-8 3xl:grid-cols-10":N(t)?"sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-2 2xl:grid-cols-3 3xl:grid-cols-4":"sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-6 3xl:grid-cols-8":N(mu)?N(t)?"sm:grid-cols-4 md:grid-cols-5 lg:grid-cols-6 xl:grid-cols-4 2xl:grid-cols-5 3xl:grid-cols-6":"sm:grid-cols-4 md:grid-cols-5 lg:grid-cols-6 xl:grid-cols-8 2xl:grid-cols-10 3xl:grid-cols-12":N(t)?"sm:grid-cols-3 lg:grid-cols-4 xl:grid-cols-3 2xl:grid-cols-4 3xl:grid-cols-5":"sm:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 2xl:grid-cols-8 3xl:grid-cols-10"))},[Md(n.$slots,"default",{},void 0,!0)],2))}}),G8=Xb(fSe,[["__scopeId","data-v-07ba44e0"]]),dSe={key:0,class:"flex flex-wrap gap-1 pt-2"},hSe=["onMouseenter","onClick"],pSe={key:0,class:"h-2 w-2 rounded-full bg-white"},vSe={key:1,class:"flex items-center gap-2 py-2"},gSe={class:"flex flex-1 items-center justify-center overflow-hidden rounded-2xl [&>*]:h-2"},mSe=it({__name:"ProxyPreview",props:{nodes:{},now:{}},setup(e){const t=e,{showTip:n}=U8(),r=(f,d)=>{const h=document.createElement("div"),v=document.createElement("div");if(v.textContent=d.name,h.append(v),d.latency!==Jo){const m=document.createElement("div");m.textContent=`${d.latency}ms`,m.classList.add(iu(d.latency)),h.append(m)}h.classList.add("flex","items-center","gap-2"),n(f,h)},i=Ve(()=>gv.value===ug.DOTS||gv.value===ug.AUTO&&t.nodes.length<20),o=Ve(()=>t.nodes.map(f=>({latency:Qg(f),name:f}))),a=f=>f===Jo?"bg-gray-500":fo.value.filter(f=>f.latencyJo).length),l=Ve(()=>o.value.filter(f=>f.latency>=lu.value&&f.latencyo.value.filter(f=>f.latency>=Xs.value).length),c=Ve(()=>o.value.filter(f=>f.latency===Jo).length);return(f,d)=>i.value?(K(),ae("div",dSe,[(K(!0),ae(Ze,null,on(o.value,h=>(K(),ae("div",{key:h.name,class:rt(["flex h-4 w-4 items-center justify-center rounded-full transition hover:scale-110",a(h.latency)]),ref_for:!0,ref:"dotsRef",onMouseenter:v=>r(v,h),onClick:xo(v=>f.$emit("nodeclick",h.name),["stop"])},[f.now===h.name?(K(),ae("div",pSe)):mt("",!0)],42,hSe))),128))])):(K(),ae("div",vSe,[L("div",gSe,[L("div",{class:rt(a(N(lu)-1)),style:Gr({width:`${s.value*100/f.nodes.length}%`})},null,6),L("div",{class:rt(a(N(Xs)-1)),style:Gr({width:`${l.value*100/f.nodes.length}%`})},null,6),L("div",{class:rt(a(N(Xs)+1)),style:Gr({width:`${u.value*100/f.nodes.length}%`})},null,6),L("div",{class:rt(a(N(Jo))),style:Gr({width:`${c.value*100/f.nodes.length}%`})},null,6)])]))}}),z8=Xb(mSe,[["__scopeId","data-v-7ca56d01"]]),ySe={class:"flex items-center gap-2 pr-5"},_Se={class:"flex flex-1 items-center gap-1"},bSe={class:"flex-1 text-xs text-slate-400"},SSe={class:"mt-[2px] flex items-center gap-2"},wSe={class:"flex flex-1 items-center gap-1"},xSe={class:"shrink-0 text-xs text-slate-500"},TSe=it({__name:"ProxyGroup",props:{name:{}},setup(e){const t=e,n=Ve(()=>fi.value[t.name]),r=Ve(()=>LB(n.value.all??[])),i=Fe(!1),o=async()=>{if(!i.value){i.value=!0;try{await Ure(t.name),i.value=!1}catch{i.value=!1}}},a=Ve(()=>ea.value.filter(l=>l.chains.includes(t.name)).reduce((l,u)=>l+u.downloadSpeed,0));return(s,l)=>(K(),Ot(v8,{name:n.value.name},{title:Mr(()=>{var u;return[L("div",ySe,[L("div",_Se,[ye(W1,{name:n.value.name,size:"large"},null,8,["name"]),L("span",bSe,": "+re(n.value.type)+" ("+re((u=n.value.all)==null?void 0:u.length)+")",1)]),ye(g8,{class:rt(N(Cn)("z-10 bg-base-200/40 hover:shadow",i.value?"animate-pulse cursor-wait bg-base-300":"")),name:n.value.now,onClick:xo(o,["stop"])},null,8,["class","name"])]),L("div",SSe,[L("div",wSe,[n.value.now?(K(),ae(Ze,{key:0},[ye(N(ff),{class:"h-4 w-4"}),ye(W1,{class:"text-slate-500",name:n.value.now},null,8,["name"])],64)):mt("",!0)]),L("div",xSe,re(N(Tn)(a.value))+"/s",1)])]}),preview:Mr(()=>[ye(z8,{nodes:r.value,now:n.value.now,groupName:n.value.name,onNodeclick:l[0]||(l[0]=u=>N(vL)(n.value.name,u))},null,8,["nodes","now","groupName"])]),content:Mr(()=>[ye(G8,null,{default:Mr(()=>[(K(!0),ae(Ze,null,on(r.value,u=>(K(),Ot(H8,{key:u,name:u,active:u===n.value.now,onClick:c=>N(vL)(n.value.name,u)},null,8,["name","active","onClick"]))),128))]),_:1})]),_:1},8,["name"]))}}),CSe={class:"flex items-center gap-2"},ESe={class:"text-lg font-medium sm:text-xl"},ASe={class:"text-sm"},ISe={class:"flex gap-2"},RSe=["value"],PSe={class:"flex flex-col sm:flex-row sm:gap-4"},OSe={class:"text-sm text-slate-500"},DSe={class:"text-sm text-slate-500"},MSe={class:"text-sm text-slate-500"},LSe=it({__name:"ProxyProvider",props:{name:{}},setup(e){const t=e,n=c=>{const{Download:f=0,Upload:d=0,Total:h=0,Expire:v=0}=c;if(f===0&&d===0&&h===0&&v===0)return null;const m=Tn(h,{binary:!0}),y=Tn(f+d,{binary:!0}),_=Ai.toFinite(((f+d)/h*100).toFixed(2));return{total:m,used:y,percentage:_,expirePrefix:()=>{const{t:S}=cs();return S("expire")},expireStr:()=>{const{t:S}=cs();return v===0?S("noExpire"):La(v*1e3).format("YYYY-MM-DD")}}},r=Ve(()=>kd.value.find(c=>c.name===t.name)),i=Ve(()=>LB(r.value.proxies.map(c=>c.name))),o=Ve(()=>r.value.subscriptionInfo?n(r.value.subscriptionInfo):null),a=Fe(!1),s=Fe(!1),l=async()=>{if(!s.value){s.value=!0;try{await Moe(t.name),await dl(),s.value=!1}catch{s.value=!1}}},u=async()=>{if(!a.value){a.value=!0;try{await cV(t.name),await dl(),a.value=!1}catch{a.value=!1}}};return(c,f)=>(K(),Ot(v8,{name:r.value.name},{title:Mr(()=>[L("div",CSe,[L("div",ESe,[ft(re(r.value.name)+" ",1),L("span",ASe," ("+re(r.value.proxies.length)+") ",1)]),f[0]||(f[0]=L("div",{class:"flex-1"},null,-1)),L("div",ISe,[L("button",{class:rt(N(Cn)("btn btn-circle btn-sm z-30",s.value?"animate-pulse":"")),onClick:xo(l,["stop"])},[ye(N(Ab),{class:"h-4 w-4"})],2),L("button",{class:rt(N(Cn)("btn btn-circle btn-sm z-30",a.value?"animate-spin":"")),onClick:xo(u,["stop"])},[ye(N(U4),{class:"h-4 w-4"})],2)])]),o.value?(K(),ae("progress",{key:0,class:"progress",value:o.value.percentage,max:"100"},null,8,RSe)):mt("",!0),L("div",PSe,[o.value?(K(),ae(Ze,{key:0},[L("div",OSe,re(o.value.used)+" / "+re(o.value.total)+" ( "+re(o.value.percentage)+"% ) ",1),L("div",DSe,re(o.value.expirePrefix())+": "+re(o.value.expireStr()),1)],64)):mt("",!0),L("div",MSe,re(c.$t("updated"))+" "+re(N(Bb)(r.value.updatedAt)),1)])]),preview:Mr(()=>[ye(z8,{nodes:i.value},null,8,["nodes"])]),content:Mr(()=>[ye(G8,null,{default:Mr(()=>[(K(!0),ae(Ze,null,on(i.value,d=>(K(),Ot(H8,{key:d,name:d},null,8,["name"]))),128))]),_:1})]),_:1},8,["name"]))}}),NSe={class:"p-2"},kSe={key:0,class:"grid grid-cols-2 gap-1"},FSe={key:1,class:"grid grid-cols-1 gap-1"},$Se=it({__name:"ProxiesPage",setup(e){const{proxiesTabShow:t,renderGroups:n}=Kb(),r=Ve(()=>t.value===df.PROVIDER?LSe:TSe),i=(o,a)=>o.filter((s,l)=>l%2===a);return dl(),(o,a)=>(K(),ae("div",NSe,[N(dre)&&N(dv)&&N(n).length>1?(K(),ae("div",kSe,[(K(),ae(Ze,null,on([0,1],s=>L("div",{key:s,class:"flex flex-1 flex-col gap-1"},[(K(!0),ae(Ze,null,on(i(N(n),s),l=>(K(),Ot(ls(r.value),{key:l,name:l},null,8,["name"]))),128))])),64))])):(K(),ae("div",FSe,[(K(!0),ae(Ze,null,on(N(n),s=>(K(),Ot(ls(r.value),{key:s,name:s},null,8,["name"]))),128))]))]))}}),BSe={class:"mr-2 inline-block min-w-4 text-center"},VSe={class:"mr-2 text-slate-500"},USe={key:0,class:"mr-2 text-primary"},HSe={key:1,class:"badge badge-sm bg-base-200"},GSe={class:"flex items-center gap-1"},zSe=it({__name:"RuleCard",props:{rule:{},index:{}},setup(e){const t=e,n=Ve(()=>fi.value[t.rule.proxy]),r=Ve(()=>Qg(t.rule.proxy)),i=Ve(()=>iu(Number(r.value)));return(o,a)=>{var s;return K(),ae("div",{class:rt(N(Cn)("card mb-1 gap-1 p-2 text-sm",!o.rule.payload&&"gap-0"))},[L("div",null,[L("span",BSe,re(o.index)+".",1),L("span",VSe,re(o.rule.type)+":",1),o.rule.payload?(K(),ae("span",USe,re(o.rule.payload),1)):mt("",!0),typeof o.rule.size=="number"&&o.rule.size!==-1?(K(),ae("span",HSe,re(o.rule.size),1)):mt("",!0)]),L("div",GSe,[ye(W1,{name:o.rule.proxy},null,8,["name"]),(s=n.value)!=null&&s.now?(K(),ae(Ze,{key:0},[ye(N(ff),{class:"h-4 w-4"}),ye(W1,{name:n.value.now},null,8,["name"])],64)):mt("",!0),r.value!==N(Jo)?(K(),ae("span",{key:1,class:rt([i.value,"ml-1"])},re(r.value)+"ms",3)):mt("",!0)])],2)}}}),WSe={class:"card w-full flex-row items-center gap-2 p-1 px-2 text-sm"},jSe={class:"flex flex-1 flex-col sm:flex-row"},YSe={class:"flex flex-1 items-center gap-2"},XSe={class:"badge badge-sm bg-base-200"},KSe={class:"flex gap-3 text-slate-500"},ZSe=it({__name:"RuleProvider",props:{ruleProvider:{},index:{}},setup(e){const t=Fe(!1),n=e,r=async()=>{t.value||(t.value=!0,await fV(n.ruleProvider.name),gg(),t.value=!1)};return(i,o)=>(K(),ae("div",WSe,[L("div",jSe,[L("div",YSe,[L("span",null,re(i.index)+".",1),L("span",null,re(i.ruleProvider.name),1),L("span",XSe,re(i.ruleProvider.ruleCount),1)]),L("div",KSe,[L("span",null,re(i.ruleProvider.behavior),1),L("span",null,re(i.ruleProvider.vehicleType),1),L("span",null,re(i.$t("updated"))+" "+re(N(Bb)(i.ruleProvider.updatedAt)),1)])]),L("button",{class:rt(N(Cn)("btn btn-circle btn-sm",t.value?"animate-spin":"")),onClick:r},[ye(N(U4),{class:"h-4 w-4"})],2)]))}}),qSe={key:0,class:"flex flex-col gap-1 overflow-x-hidden p-2"},JSe=it({__name:"RulesPage",setup(e){return(t,n)=>N(xv)===N(rh).PROVIDER?(K(),ae("div",qSe,[(K(!0),ae(Ze,null,on(N(Cle),(r,i)=>(K(),Ot(ZSe,{key:r.name,ruleProvider:r,index:i+1},null,8,["ruleProvider","index"]))),128))])):(K(),Ot(XI,{key:1,data:N(Tle)},{default:Mr(({item:r})=>[(K(),Ot(zSe,{key:r.payload,rule:r,index:N(y1).indexOf(r)+1},null,8,["rule","index"]))]),_:1},8,["data"]))}}),QSe={class:"join w-96 max-sm:w-full"},ewe={class:"flex max-h-96 flex-col gap-1 overflow-y-auto"},twe={key:0,class:"flex gap-1"},nwe=it({__name:"DnsQuery",setup(e){const t=Na({name:"www.google.com",type:"A"}),n=Fe(null),r=Fe([]),i=async()=>{var a;const{data:o}=await Voe(t);r.value=o.Answer,(a=r.value)!=null&&a.length?n.value=await pV(r.value[0].data):n.value=null};return(o,a)=>{var s,l,u,c;return K(),ae(Ze,null,[L("div",QSe,[ye(rm,{modelValue:t.name,"onUpdate:modelValue":a[0]||(a[0]=f=>t.name=f),type:"text",name:"name",placeholder:"Domain Name"},null,8,["modelValue"]),_t(L("select",{"onUpdate:modelValue":a[1]||(a[1]=f=>t.type=f),class:"join-item select select-bordered select-sm"},a[2]||(a[2]=[L("option",{value:"A"},"A",-1),L("option",{value:"AAAA"},"AAAA",-1),L("option",{value:"MX"},"MX",-1)]),512),[[hi,t.type]]),L("button",{class:"btn join-item btn-sm",onClick:i},re(o.$t("DNSQuery")),1)]),L("div",ewe,[(K(!0),ae(Ze,null,on(r.value,f=>(K(),ae("div",{class:"flex gap-1",key:f.data},[L("div",null,re(f.name),1),a[3]||(a[3]=ft(" : ")),L("div",null,re(f.data),1)]))),128))]),n.value?(K(),ae("div",twe,re((s=n.value)==null?void 0:s.ip)+": AS"+re((l=n.value)==null?void 0:l.asn)+" "+re((u=n.value)==null?void 0:u.asn_organization)+" "+re((c=n.value)==null?void 0:c.country),1)):mt("",!0)],64)}}}),rwe={class:"card card-compact"},iwe={class:"card-title px-4 pt-4"},owe={class:"card-body gap-4"},awe={class:"grid max-w-screen-md grid-cols-2 gap-2 lg:grid-cols-3"},swe={class:"shrink-0"},lwe=["onUpdate:modelValue","onChange"],uwe={class:"grid max-w-screen-md grid-cols-2 gap-2 lg:grid-cols-3"},cwe={key:0,class:"flex items-center gap-2"},fwe={class:"flex items-center gap-2"},dwe={class:"flex items-center gap-2"},hwe={class:"grid max-w-screen-md grid-cols-2 gap-2 sm:grid-cols-4"},pwe={class:"indicator w-full"},vwe={key:0,class:"indicator-item flex"},gwe=it({__name:"BackendSettings",setup(e){const t=[{label:"mixedPort",key:"mixed-port"},{label:"httpPort",key:"port"},{label:"socksPort",key:"socks-port"},{label:"redirPort",key:"redir-port"},{label:"tproxyPort",key:"tproxy-port"}],n=()=>{eR(),gg(),dl()},r=Fe(!1),i=async()=>{if(!r.value){r.value=!0;try{await Boe(),setTimeout(()=>{n()},500),r.value=!1}catch{r.value=!1}}},o=Fe(!1),a=async()=>{if(!o.value){o.value=!0;try{await hV(),n(),o.value=!1}catch{o.value=!1}}},s=Fe(!1),l=async()=>{if(!s.value){s.value=!0;try{await $oe(),n(),s.value=!1}catch{s.value=!1}}},u=async()=>{var f;await y_({tun:{enable:(f=ei.value)==null?void 0:f.tun.enable}})},c=async()=>{var f;await y_({"allow-lan":(f=ei.value)==null?void 0:f["allow-lan"]})};return(f,d)=>{var h;return K(),ae("div",rwe,[L("div",iwe,re(f.$t("backend")),1),L("div",owe,[ye(GV),ye(tR),N(hl)?mt("",!0):(K(),ae(Ze,{key:0},[d[4]||(d[4]=L("div",{class:"divider"},null,-1)),L("div",awe,[(K(),ae(Ze,null,on(t,v=>L("div",{class:"flex items-center gap-2",key:v.key},[L("span",swe,re(f.$t(v.label))+": ",1),_t(L("input",{class:"input input-sm input-bordered w-20",type:"number","onUpdate:modelValue":m=>N(ei)[v.key]=m,onChange:m=>N(y_)({[v.key]:Number(N(ei)[v.key])})},null,40,lwe),[[ir,N(ei)[v.key]]])])),64))]),L("div",uwe,[(h=N(ei))!=null&&h.tun?(K(),ae("div",cwe,[ft(re(f.$t("tunMode"))+": ",1),_t(L("input",{class:"toggle",type:"checkbox","onUpdate:modelValue":d[0]||(d[0]=v=>N(ei).tun.enable=v),onChange:u},null,544),[[gr,N(ei).tun.enable]])])):mt("",!0),L("div",fwe,[ft(re(f.$t("allowLan"))+": ",1),_t(L("input",{class:"toggle",type:"checkbox","onUpdate:modelValue":d[1]||(d[1]=v=>N(ei)["allow-lan"]=v),onChange:c},null,544),[[gr,N(ei)["allow-lan"]]])]),L("div",dwe,[ft(re(f.$t("autoUpgrade"))+": ",1),_t(L("input",{class:"toggle",type:"checkbox","onUpdate:modelValue":d[2]||(d[2]=v=>st(K0)?K0.value=v:null)},null,512),[[gr,N(K0)]])])])],64)),L("div",hwe,[N(hl)?mt("",!0):(K(),ae(Ze,{key:0},[L("div",pwe,[N(_E)?(K(),ae("span",vwe,d[5]||(d[5]=[L("span",{class:"badge badge-xs absolute animate-ping bg-secondary"},null,-1),L("span",{class:"badge badge-xs bg-secondary"},null,-1)]))):mt("",!0),L("button",{class:rt(N(Cn)("btn btn-primary btn-sm flex-1",o.value?"animate-pulse":"")),onClick:a},re(f.$t("upgradeCore")),3)]),L("button",{class:rt(N(Cn)("btn btn-sm",r.value?"animate-pulse":"")),onClick:i},re(f.$t("restartCore")),3),L("button",{class:rt(N(Cn)("btn btn-sm",s.value?"animate-pulse":"")),onClick:l},re(f.$t("reloadConfigs")),3)],64)),L("button",{class:"btn btn-sm",onClick:d[3]||(d[3]=(...v)=>N(NL)&&N(NL)(...v))},re(f.$t("flushFakeIP")),1)]),d[6]||(d[6]=L("div",{class:"divider"},null,-1)),ye(nwe)])])}}});var N_={exports:{}},yC={exports:{}},_C={};/** +* @vue/compiler-core v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/const hh=Symbol(""),Yd=Symbol(""),IS=Symbol(""),Lg=Symbol(""),_P=Symbol(""),Du=Symbol(""),bP=Symbol(""),SP=Symbol(""),RS=Symbol(""),PS=Symbol(""),Dh=Symbol(""),OS=Symbol(""),wP=Symbol(""),DS=Symbol(""),MS=Symbol(""),LS=Symbol(""),NS=Symbol(""),kS=Symbol(""),FS=Symbol(""),xP=Symbol(""),TP=Symbol(""),hm=Symbol(""),Ng=Symbol(""),$S=Symbol(""),BS=Symbol(""),ph=Symbol(""),Mh=Symbol(""),VS=Symbol(""),X1=Symbol(""),W8=Symbol(""),K1=Symbol(""),kg=Symbol(""),j8=Symbol(""),Y8=Symbol(""),US=Symbol(""),X8=Symbol(""),K8=Symbol(""),HS=Symbol(""),CP=Symbol(""),Sf={[hh]:"Fragment",[Yd]:"Teleport",[IS]:"Suspense",[Lg]:"KeepAlive",[_P]:"BaseTransition",[Du]:"openBlock",[bP]:"createBlock",[SP]:"createElementBlock",[RS]:"createVNode",[PS]:"createElementVNode",[Dh]:"createCommentVNode",[OS]:"createTextVNode",[wP]:"createStaticVNode",[DS]:"resolveComponent",[MS]:"resolveDynamicComponent",[LS]:"resolveDirective",[NS]:"resolveFilter",[kS]:"withDirectives",[FS]:"renderList",[xP]:"renderSlot",[TP]:"createSlots",[hm]:"toDisplayString",[Ng]:"mergeProps",[$S]:"normalizeClass",[BS]:"normalizeStyle",[ph]:"normalizeProps",[Mh]:"guardReactiveProps",[VS]:"toHandlers",[X1]:"camelize",[W8]:"capitalize",[K1]:"toHandlerKey",[kg]:"setBlockTracking",[j8]:"pushScopeId",[Y8]:"popScopeId",[US]:"withCtx",[X8]:"unref",[K8]:"isRef",[HS]:"withMemo",[CP]:"isMemoSame"};function Z8(e){Object.getOwnPropertySymbols(e).forEach(t=>{Sf[t]=e[t]})}const mwe={HTML:0,0:"HTML",SVG:1,1:"SVG",MATH_ML:2,2:"MATH_ML"},ywe={ROOT:0,0:"ROOT",ELEMENT:1,1:"ELEMENT",TEXT:2,2:"TEXT",COMMENT:3,3:"COMMENT",SIMPLE_EXPRESSION:4,4:"SIMPLE_EXPRESSION",INTERPOLATION:5,5:"INTERPOLATION",ATTRIBUTE:6,6:"ATTRIBUTE",DIRECTIVE:7,7:"DIRECTIVE",COMPOUND_EXPRESSION:8,8:"COMPOUND_EXPRESSION",IF:9,9:"IF",IF_BRANCH:10,10:"IF_BRANCH",FOR:11,11:"FOR",TEXT_CALL:12,12:"TEXT_CALL",VNODE_CALL:13,13:"VNODE_CALL",JS_CALL_EXPRESSION:14,14:"JS_CALL_EXPRESSION",JS_OBJECT_EXPRESSION:15,15:"JS_OBJECT_EXPRESSION",JS_PROPERTY:16,16:"JS_PROPERTY",JS_ARRAY_EXPRESSION:17,17:"JS_ARRAY_EXPRESSION",JS_FUNCTION_EXPRESSION:18,18:"JS_FUNCTION_EXPRESSION",JS_CONDITIONAL_EXPRESSION:19,19:"JS_CONDITIONAL_EXPRESSION",JS_CACHE_EXPRESSION:20,20:"JS_CACHE_EXPRESSION",JS_BLOCK_STATEMENT:21,21:"JS_BLOCK_STATEMENT",JS_TEMPLATE_LITERAL:22,22:"JS_TEMPLATE_LITERAL",JS_IF_STATEMENT:23,23:"JS_IF_STATEMENT",JS_ASSIGNMENT_EXPRESSION:24,24:"JS_ASSIGNMENT_EXPRESSION",JS_SEQUENCE_EXPRESSION:25,25:"JS_SEQUENCE_EXPRESSION",JS_RETURN_STATEMENT:26,26:"JS_RETURN_STATEMENT"},_we={ELEMENT:0,0:"ELEMENT",COMPONENT:1,1:"COMPONENT",SLOT:2,2:"SLOT",TEMPLATE:3,3:"TEMPLATE"},bwe={NOT_CONSTANT:0,0:"NOT_CONSTANT",CAN_SKIP_PATCH:1,1:"CAN_SKIP_PATCH",CAN_CACHE:2,2:"CAN_CACHE",CAN_STRINGIFY:3,3:"CAN_STRINGIFY"},Ir={start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0},source:""};function q8(e,t=""){return{type:0,source:t,children:e,helpers:new Set,components:[],directives:[],hoists:[],imports:[],cached:[],temps:0,codegenNode:void 0,loc:Ir}}function vh(e,t,n,r,i,o,a,s=!1,l=!1,u=!1,c=Ir){return e&&(s?(e.helper(Du),e.helper(Tf(e.inSSR,u))):e.helper(xf(e.inSSR,u)),a&&e.helper(kS)),{type:13,tag:t,props:n,children:r,patchFlag:i,dynamicProps:o,directives:a,isBlock:s,disableTracking:l,isComponent:u,loc:c}}function wu(e,t=Ir){return{type:17,loc:t,elements:e}}function To(e,t=Ir){return{type:15,loc:t,properties:e}}function lr(e,t){return{type:16,loc:Ir,key:At(e)?kt(e,!0):e,value:t}}function kt(e,t=!1,n=Ir,r=0){return{type:4,loc:n,content:e,isStatic:t,constType:t?3:r}}function Swe(e,t){return{type:5,loc:t,content:At(e)?kt(e,!1,t):e}}function ia(e,t=Ir){return{type:8,loc:t,children:e}}function mr(e,t=[],n=Ir){return{type:14,loc:n,callee:e,arguments:t}}function wf(e,t=void 0,n=!1,r=!1,i=Ir){return{type:18,params:e,returns:t,newline:n,isSlot:r,loc:i}}function Z1(e,t,n,r=!0){return{type:19,test:e,consequent:t,alternate:n,newline:r,loc:Ir}}function J8(e,t,n=!1,r=!1){return{type:20,index:e,value:t,needPauseTracking:n,inVOnce:r,needArraySpread:!1,loc:Ir}}function Q8(e){return{type:21,body:e,loc:Ir}}function wwe(e){return{type:22,elements:e,loc:Ir}}function xwe(e,t,n){return{type:23,test:e,consequent:t,alternate:n,loc:Ir}}function Twe(e,t){return{type:24,left:e,right:t,loc:Ir}}function Cwe(e){return{type:25,expressions:e,loc:Ir}}function Ewe(e){return{type:26,returns:e,loc:Ir}}function xf(e,t){return e||t?RS:PS}function Tf(e,t){return e||t?bP:SP}function GS(e,{helper:t,removeHelper:n,inSSR:r}){e.isBlock||(e.isBlock=!0,n(xf(r,e.isComponent)),t(Du),t(Tf(r,e.isComponent)))}const t5=new Uint8Array([123,123]),n5=new Uint8Array([125,125]);function r5(e){return e>=97&&e<=122||e>=65&&e<=90}function bo(e){return e===32||e===10||e===9||e===12||e===13}function Wl(e){return e===47||e===62||bo(e)}function q1(e){const t=new Uint8Array(e.length);for(let n=0;n=0;i--){const o=this.newlines[i];if(t>o){n=i+2,r=t-o;break}}return{column:r,line:n,offset:t}}peek(){return this.buffer.charCodeAt(this.index+1)}stateText(t){t===60?(this.index>this.sectionStart&&this.cbs.ontext(this.sectionStart,this.index),this.state=5,this.sectionStart=this.index):!this.inVPre&&t===this.delimiterOpen[0]&&(this.state=2,this.delimiterIndex=0,this.stateInterpolationOpen(t))}stateInterpolationOpen(t){if(t===this.delimiterOpen[this.delimiterIndex])if(this.delimiterIndex===this.delimiterOpen.length-1){const n=this.index+1-this.delimiterOpen.length;n>this.sectionStart&&this.cbs.ontext(this.sectionStart,n),this.state=3,this.sectionStart=n}else this.delimiterIndex++;else this.inRCDATA?(this.state=32,this.stateInRCDATA(t)):(this.state=1,this.stateText(t))}stateInterpolation(t){t===this.delimiterClose[0]&&(this.state=4,this.delimiterIndex=0,this.stateInterpolationClose(t))}stateInterpolationClose(t){t===this.delimiterClose[this.delimiterIndex]?this.delimiterIndex===this.delimiterClose.length-1?(this.cbs.oninterpolation(this.sectionStart,this.index+1),this.inRCDATA?this.state=32:this.state=1,this.sectionStart=this.index+1):this.delimiterIndex++:(this.state=3,this.stateInterpolation(t))}stateSpecialStartSequence(t){const n=this.sequenceIndex===this.currentSequence.length;if(!(n?Wl(t):(t|32)===this.currentSequence[this.sequenceIndex]))this.inRCDATA=!1;else if(!n){this.sequenceIndex++;return}this.sequenceIndex=0,this.state=6,this.stateInTagName(t)}stateInRCDATA(t){if(this.sequenceIndex===this.currentSequence.length){if(t===62||bo(t)){const n=this.index-this.currentSequence.length;if(this.sectionStart=t||(this.state===28?this.currentSequence===qr.CdataEnd?this.cbs.oncdata(this.sectionStart,t):this.cbs.oncomment(this.sectionStart,t):this.state===6||this.state===11||this.state===18||this.state===17||this.state===12||this.state===13||this.state===14||this.state===15||this.state===16||this.state===20||this.state===19||this.state===21||this.state===9||this.cbs.ontext(this.sectionStart,t))}emitCodePoint(t,n){}}const Iwe={COMPILER_IS_ON_ELEMENT:"COMPILER_IS_ON_ELEMENT",COMPILER_V_BIND_SYNC:"COMPILER_V_BIND_SYNC",COMPILER_V_BIND_OBJECT_ORDER:"COMPILER_V_BIND_OBJECT_ORDER",COMPILER_V_ON_NATIVE:"COMPILER_V_ON_NATIVE",COMPILER_V_IF_V_FOR_PRECEDENCE:"COMPILER_V_IF_V_FOR_PRECEDENCE",COMPILER_NATIVE_TEMPLATE:"COMPILER_NATIVE_TEMPLATE",COMPILER_INLINE_TEMPLATE:"COMPILER_INLINE_TEMPLATE",COMPILER_FILTERS:"COMPILER_FILTERS"},Rwe={COMPILER_IS_ON_ELEMENT:{message:'Platform-native elements with "is" prop will no longer be treated as components in Vue 3 unless the "is" value is explicitly prefixed with "vue:".',link:"https://v3-migration.vuejs.org/breaking-changes/custom-elements-interop.html"},COMPILER_V_BIND_SYNC:{message:e=>`.sync modifier for v-bind has been removed. Use v-model with argument instead. \`v-bind:${e}.sync\` should be changed to \`v-model:${e}\`.`,link:"https://v3-migration.vuejs.org/breaking-changes/v-model.html"},COMPILER_V_BIND_OBJECT_ORDER:{message:'v-bind="obj" usage is now order sensitive and behaves like JavaScript object spread: it will now overwrite an existing non-mergeable attribute that appears before v-bind in the case of conflict. To retain 2.x behavior, move v-bind to make it the first attribute. You can also suppress this warning if the usage is intended.',link:"https://v3-migration.vuejs.org/breaking-changes/v-bind.html"},COMPILER_V_ON_NATIVE:{message:".native modifier for v-on has been removed as is no longer necessary.",link:"https://v3-migration.vuejs.org/breaking-changes/v-on-native-modifier-removed.html"},COMPILER_V_IF_V_FOR_PRECEDENCE:{message:"v-if / v-for precedence when used on the same element has changed in Vue 3: v-if now takes higher precedence and will no longer have access to v-for scope variables. It is best to avoid the ambiguity with