diff --git a/package/cnsztl/luci-app-openclash/Makefile b/package/cnsztl/luci-app-openclash/Makefile new file mode 100755 index 0000000000..73d397e91d --- /dev/null +++ b/package/cnsztl/luci-app-openclash/Makefile @@ -0,0 +1,45 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=luci-app-openclash +PKG_VERSION=0.30.0 +PKG_RELEASE:=1 +PKG_MAINTAINER:=frainzy1477&vernesong + +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) + +include $(INCLUDE_DIR)/package.mk + +define Package/$(PKG_NAME) + CATEGORY:=Utilities + SUBMENU:=Luci + TITLE:=LuCI support for clash + PKGARCH:=all + DEPENDS:=+coreutils-nohup +bash +wget +endef + +define Package/$(PKG_NAME)/description + A LuCI support for clash +endef + +define Package/$(PKG_NAME)/postinst +endef + +define Build/Prepare + $(foreach po,$(wildcard ${CURDIR}/i18n/zh-cn/*.po), \ + po2lmo $(po) $(PKG_BUILD_DIR)/$(patsubst %.po,%.lmo,$(notdir $(po)));) +endef + +define Build/Configure +endef + +define Build/Compile +endef + +define Package/$(PKG_NAME)/install + $(INSTALL_DIR) $(1)/usr/lib/lua/luci/i18n + $(INSTALL_DATA) $(PKG_BUILD_DIR)/*.*.lmo $(1)/usr/lib/lua/luci/i18n/ + $(CP) ./files/* $(1)/ + +endef + +$(eval $(call BuildPackage,$(PKG_NAME))) diff --git a/package/cnsztl/luci-app-openclash/files/etc/config/openclash b/package/cnsztl/luci-app-openclash/files/etc/config/openclash new file mode 100755 index 0000000000..50d563035a --- /dev/null +++ b/package/cnsztl/luci-app-openclash/files/etc/config/openclash @@ -0,0 +1,13 @@ + +config openclash 'config' + option proxy_port '7892' + option enable '0' + option en_mode '0' + option auto_update '0' + option auto_update_time '0' + option cn_port '9090' + option dashboard_password '123456' + option rule_source '0' + option enable_custom_dns '0' + option enable_custom_clash_rules '0' + option other_rule_auto_update '0' \ No newline at end of file diff --git a/package/cnsztl/luci-app-openclash/files/etc/config/openclash_custom_rules.list b/package/cnsztl/luci-app-openclash/files/etc/config/openclash_custom_rules.list new file mode 100755 index 0000000000..85cba584fe --- /dev/null +++ b/package/cnsztl/luci-app-openclash/files/etc/config/openclash_custom_rules.list @@ -0,0 +1,13 @@ +##- DOMAIN-SUFFIX,google.com,Proxy 匹配域名后缀(交由Proxy代理服务器组) +##- DOMAIN-KEYWORD,google,Proxy 匹配域名关键字(交由Proxy代理服务器组) +##- DOMAIN,google.com,Proxy 匹配域名(交由Proxy代理服务器组) +##- DOMAIN-SUFFIX,ad.com,REJECT 匹配域名后缀(拒绝) +##- IP-CIDR,127.0.0.0/8,DIRECT 匹配数据目标IP(直连) +##- SRC-IP-CIDR,192.168.1.201/32,DIRECT 匹配数据发起IP(直连) +##- DST-PORT,80,DIRECT 匹配数据目标端口(直连) +##- SRC-PORT,7777,DIRECT 匹配数据源端口(直连) + +##排序在上的规则优先生效,如添加(去除#号): +##- SRC-IP-CIDR,192.168.1.201/32,Rule +##- SRC-IP-CIDR,192.168.1.0/24,DIRECT +##此时IP为192.168.1.201的客户端流量走代理(策略),其余客户端不走代理 \ No newline at end of file diff --git a/package/cnsztl/luci-app-openclash/files/etc/init.d/openclash b/package/cnsztl/luci-app-openclash/files/etc/init.d/openclash new file mode 100755 index 0000000000..3a779969f9 --- /dev/null +++ b/package/cnsztl/luci-app-openclash/files/etc/init.d/openclash @@ -0,0 +1,326 @@ +#!/bin/sh /etc/rc.common +# Copyright (c) 2011-2015 OpenWrt.org + +START=99 +STOP=15 + + +CLASH="/etc/openclash/clash" +CLASH_CONFIG="/etc/openclash" +CRON_FILE="/etc/crontabs/root" +CONFIG_FILE="/etc/openclash/config.yml" +LOG_FILE="/tmp/openclash.log" +START_LOG="/tmp/openclash_start.log" +BACKPACK_FILE="/etc/openclash/config.bak" +CHANGE_FILE="/tmp/yml_change.yml" +RULE_FILE="/tmp/yml_rules.yml" +DNS_FILE="/tmp/yml_dns.yml" + + +add_cron() +{ + [ -z "`grep "openclash.log" "$CRON_FILE"`" ] && { + echo '0 0 * * 0 echo "" > /tmp/openclash.log' >> $CRON_FILE + } + [ -z "`grep "openclash.sh" "$CRON_FILE"`" ] && { + [ "$(uci get openclash.config.auto_update 2>/dev/null)" -eq 1 ] && echo "0 $(uci get openclash.config.auto_update_time 2>/dev/null) * * * /usr/share/openclash/openclash.sh" >> $CRON_FILE + } + [ -z "`grep "openclash_rule.sh" "$CRON_FILE"`" ] && { + [ "$(uci get openclash.config.other_rule_auto_update 2>/dev/null)" -eq 1 ] && echo "0 $(uci get openclash.config.other_rule_update_day_time 2>/dev/null) * * $(uci get openclash.config.other_rule_update_week_time 2>/dev/null) /usr/share/openclash/openclash_rule.sh" >> $CRON_FILE + } + crontab $CRON_FILE + nohup /usr/share/openclash/openclash_watchdog.sh & +} + +del_cron() +{ + sed -i '/openclash.sh/d' $CRON_FILE 2>/dev/null + sed -i '/openclash_rule.sh/d' $CRON_FILE 2>/dev/null + /etc/init.d/cron restart +} + +yml_check() +{ + if [ ! -f "$4" ]; then + cp "$3" "$4" + fi + + if [ "$(grep -c '^##Custom DNS##' "$CONFIG_FILE")" -gt 0 ] && [ "$2" = 0 ]; then + cp "$4" "$3" + fi + + if [ "$1" = 0 ]; then + if [ -f "$4" ]; then + [ ! -z "`grep "OpenClash-General" "$CONFIG_FILE"`" ] && { + cp "$4" "$3" + } + else + [ -z "`grep "OpenClash-General" "$CONFIG_FILE"`" ] && { + cp "$3" "$4" + } + fi + fi + sed -i '/OpenClash-General/d' "$3" 2>/dev/null + sed -i '/^Proxy:/i\#===================== OpenClash-General-Settings =====================#' "$3" 2>/dev/null +} + +yml_dns_check() +{ + if [ "$1" -eq 53 ]; then + sed -i "/^ listen:/c\ listen: 0.0.0.0:7874" "$2" + dns_port=7874 + fi + + [ -z "`grep "^dns:" $CONFIG_FILE`" ] && { + sed -i -e "/^Proxy:$/i\dns:"\ + -e "/^dns:/a\ enable: true"\ + -e "/enable: true/a\ listen: 0.0.0.0:${1}"\ + -e "/listen:/a\ enhanced-mode: redir-host"\ + -e "/enhanced-mode:/a\ nameserver:"\ + -e "/nameserver:/a\ - 114.114.114.114"\ + -e "/114.114.114.114/a\ - 119.29.29.29"\ + -e "/119.29.29.29/a\ - 223.5.5.5"\ + -e "/223.5.5.5/a\ fallback:"\ + -e "/fallback:/a\ - tls://dns.rubyfish.cn:853"\ + -e "/dns.rubyfish.cn:853/a\- tcp://1.1.1.1:53"\ + -e "/1.1.1.1:53/a\ - tcp://208.67.222.222:443"\ + -e "/208.67.222.222:443/a\ - tls://dns.google" "$2" + } + +} + +yml_cut() +{ + cp "$5" "$2" + if [ "$1" = 0 ]; then + sed -i '/^Rule:$/,$d' "$2" + sed -n '/^Rule:$/,$p' "$5" >"$3" + else + sed -i '/^Rule:$/,$d' "$2" + sed -n '/nameserver:$/,$p' "$2" >"$4" + sed -i '/nameserver:$/,$d' "$2" + sed -n '/^Rule:$/,$p' "$5" >"$3" + fi +} + +yml_dns_get() +{ + + local section="$1" + local dns_type="" + local dns_address="" + config_get "port" "$section" "port" "" + config_get "type" "$section" "type" "" + config_get "ip" "$section" "ip" "" + config_get "group" "$section" "group" "" + + + if [ -z "$ip" ]; then + return + fi + + if [ "$type" = "tcp" ]; then + dns_type="- tcp://" + elif [ "$type" = "tls" ]; then + dns_type="- tls://" + elif [ "$type" = "udp" ]; then + dns_type="- " + fi + + if [ ! -z "$port" ] && [ ! -z "$ip" ]; then + dns_address="$ip:$port" + elif [ -z "$port" ] && [ ! -z "$ip" ]; then + dns_address="$ip" + else + return + fi + + if [ ! -z "$group" ]; then + if [ "$group" = "nameserver" ]; then + echo " $dns_type$dns_address" >>/etc/openclash/config.namedns + else + grep "fallback:$" /etc/openclash/config.falldns 1>/dev/null + if [ "$?" -ne "0" ]; then + echo " fallback:" >/etc/openclash/config.falldns + fi + echo " $dns_type$dns_address" >>/etc/openclash/config.falldns + fi + else + return + fi + +} + +yml_dns_custom() +{ + [ "$1" = 1 ] && { + echo " nameserver:" >/etc/openclash/config.namedns + config_load "openclash" + config_foreach yml_dns_get "dns_servers" + sed -i '/nameserver:$/i\##Custom DNS##' "$2" 2>/dev/null + sed -i '/OpenClash-General-Settings/i\Custom DNS End' "$2" 2>/dev/null + sed -i '/nameserver:$/,/^Custom DNS End$/d' "$2" 2>/dev/null + sed -i '/^##Custom DNS##$/r/etc/openclash/config.falldns' "$2" 2>/dev/null + sed -i '/^##Custom DNS##$/r/etc/openclash/config.namedns' "$2" 2>/dev/null + rm -rf /etc/openclash/config.namedns 2>/dev/null + rm -rf /etc/openclash/config.falldns 2>/dev/null + } +} + +start() +{ +echo "OpenClash 开始启动..." >$START_LOG +enable=$(uci get openclash.config.enable 2>/dev/null) +LOGTIME=$(date "+%Y-%m-%d %H:%M:%S") +if [ ! -f $CONFIG_FILE ] && [ -f $BACKPACK_FILE ]; then + cp $BACKPACK_FILE $CONFIG_FILE +fi +if [ "$enable" -eq 1 ] && [ -f $CONFIG_FILE ]; then + echo "第一步: 获取配置中..." >$START_LOG + en_mode=$(uci get openclash.config.en_mode 2>/dev/null) + enable_custom_dns=$(uci get openclash.config.enable_custom_dns 2>/dev/null) + rule_source=$(uci get openclash.config.rule_source 2>/dev/null) + enable_custom_clash_rules=$(uci get openclash.config.enable_custom_clash_rules 2>/dev/null) + da_password=$(uci get openclash.config.dashboard_password 2>/dev/null) + cn_port=$(uci get openclash.config.cn_port 2>/dev/null) + proxy_port=$(uci get openclash.config.proxy_port 2>/dev/null) + echo "第二步: 配置文件检查..." >$START_LOG + yml_check "$en_mode" "$enable_custom_dns" "$CONFIG_FILE" "$BACKPACK_FILE" + current_mode=$(grep "enhanced-mode:" $CONFIG_FILE |awk -F ' ' '{print $2}' 2>/dev/null) + dns_port=`grep listen: $CONFIG_FILE |awk -F ':' '{print $3}' |tr -cd "[0-9]"` + yml_dns_check "$dns_port" "$CONFIG_FILE" + echo "第三步: 修改配置文件..." >$START_LOG + yml_cut "$enable_custom_dns" "$CHANGE_FILE" "$RULE_FILE" "$DNS_FILE" "$CONFIG_FILE" + yml_dns_custom "$enable_custom_dns" "$DNS_FILE" + sh /usr/share/openclash/yml_change.sh "$LOGTIME" "$en_mode" "$enable_custom_dns" "$da_password" "$cn_port" "$proxy_port" "$current_mode" "$CHANGE_FILE" & + sh /usr/share/openclash/yml_rules_change.sh "$LOGTIME" "$rule_source" "$enable_custom_clash_rules" "$RULE_FILE" & + wait + cat $CHANGE_FILE $DNS_FILE $RULE_FILE > $CONFIG_FILE 2>/dev/null + rm -rf /tmp/yml_* 2>/dev/null + echo "第四步: 配置文件完整性检查..." >$START_LOG + grep "^Proxy Group:$" $CONFIG_FILE 1>/dev/null && grep "^Rule:$" $CONFIG_FILE 1>/dev/null && grep "^- GEOIP" $CONFIG_FILE 1>/dev/null && grep "nameserver:$" $CONFIG_FILE 1>/dev/null + if [ "$?" -ne "0" ]; then + echo "错误: 配置文件完整性检查不通过,已自动还原配置文件,请对照模板格式检查修改配置文件..." >$START_LOG + cp $BACKPACK_FILE $CONFIG_FILE + echo "${LOGTIME} OpenClash Config Error,Please Check And Try Again" >>$LOG_FILE + sleep 20 + echo "" >$START_LOG + elif [ ! -z "`sed -n '/nameserver:/{n;p}' $CONFIG_FILE |grep 'fallback:'`" ]; then + echo "错误: 配置文件DNS选项下的Nameserver必须设置服务器,已自动还原配置文件,请修改好后再重新启动..." >$START_LOG + echo "${LOGTIME} Nameserver Must Be Set, Please Change Your Configrations In Config.yml" >>$LOG_FILE + cp $BACKPACK_FILE $CONFIG_FILE + sleep 20 + echo "" >$START_LOG + else + echo "第五步: 启动 Clash 主程序..." >$START_LOG + nohup $CLASH -d "$CLASH_CONFIG" > $LOG_FILE 2>&1 & + + echo "第六步: 设置 OpenClash 防火墙规则..." >$START_LOG + ln -s /usr/share/openclash/web /www/openclash 2>/dev/null + + uci set firewall.@defaults[0].flow_offloading=1 + uci commit firewall + /etc/init.d/firewall restart >/dev/null 2>&1 + lan_ip=$(uci get network.lan.ipaddr) + + iptables -t nat -N openclash + iptables -t nat -N openclash_dns + iptables -t nat -A openclash -d 0.0.0.0/8 -j RETURN + iptables -t nat -A openclash -d 10.0.0.0/8 -j RETURN + iptables -t nat -A openclash -d 127.0.0.0/8 -j RETURN + iptables -t nat -A openclash -d 169.254.0.0/16 -j RETURN + iptables -t nat -A openclash -d 172.16.0.0/12 -j RETURN + iptables -t nat -A openclash -d 192.168.0.0/16 -j RETURN + iptables -t nat -A openclash -d 224.0.0.0/4 -j RETURN + iptables -t nat -A openclash -d 240.0.0.0/4 -j RETURN + iptables -t nat -A openclash_dns -p udp -j REDIRECT --to-ports "$dns_port" + iptables -t nat -A openclash_dns -p tcp -j REDIRECT --to-ports "$dns_port" + iptables -t nat -A openclash -p tcp -j REDIRECT --to-ports "$proxy_port" + iptables -t nat -I PREROUTING 1 -p tcp --dport 53 -j openclash_dns + iptables -t nat -I PREROUTING 1 -p udp --dport 53 -j openclash_dns + iptables -t nat -A PREROUTING -p tcp -j openclash + + echo "第七步: 重启 Dnsmasq 程序..." >$START_LOG + /etc/init.d/dnsmasq restart >/dev/null 2>&1 + if pidof clash >/dev/null; then + echo "第八步: 添加 OpenClash 计划任务,启动进程守护程序..." >$START_LOG + add_cron + echo "OpenClash 启动成功,请等待服务器上线!" >$START_LOG + echo "${LOGTIME} OpenClash Start Successfully" >> $LOG_FILE + sleep 5 + echo "" >$START_LOG + else + echo "错误: OpenClash 启动失败,请到日志页面查看详细错误信息!" >$START_LOG + echo "${LOGTIME} OpenClash Can Not Start, Please Check The Error Info And Try Again" >> $LOG_FILE + sleep 20 + echo "" >$START_LOG + stop + fi + fi +else + echo "错误: OpenClash 缺少配置文件,请上传或更新配置文件!" >$START_LOG + echo "${LOGTIME} config.yml Missing Or Clash Not Enable" >> $LOG_FILE + sleep 5 + echo "" >$START_LOG +fi +} + + +stop() +{ + echo "OpenClash 开始关闭..." >$START_LOG + echo "第一步: 删除 OpenClash 防火墙规则..." >$START_LOG + iptables -t nat -F openclash >/dev/null 2>&1 + iptables -t nat -F openclash_dns >/dev/null 2>&1 + + nat_clashs=$(iptables -nvL PREROUTING -t nat | sed 1,2d | sed -n '/openclash/=' | sort -r) + for nat_clash in $nat_clashs; do + iptables -t nat -D PREROUTING "$nat_clash" >/dev/null 2>&1 + done + + iptables -t nat -X openclash >/dev/null 2>&1 + iptables -t nat -X openclash_dns >/dev/null 2>&1 + + uci set firewall.@defaults[0].flow_offloading=1 + uci commit firewall + /etc/init.d/firewall restart >/dev/null 2>&1 + + echo "第二步: 关闭 OpenClash 守护程序..." >$START_LOG + kill -9 "$(ps |grep openclash_watchdog.sh |grep -v grep |awk '{print $1}')" >/dev/null 2>&1 + + echo "第三步: 关闭 Clash 主程序..." >$START_LOG + kill -9 "$(pidof clash|sed 's/$//g')" 2>/dev/null + + echo "第四步: 删除 OpenClash 计划任务..." >$START_LOG + del_cron + + echo "第五步: 重启 Dnsmasq 程序..." >$START_LOG + /etc/init.d/dnsmasq restart >/dev/null 2>&1 + + echo "第六步: 删除 OpenClash 残留文件..." >$START_LOG + rule_source=$(uci get openclash.config.rule_source 2>/dev/null) + if [ "$rule_source" != 0 ]; then + rm -rf /tmp/clash_rule.yml >/dev/null 2>&1 + rm -rf /tmp/Proxy_Group >/dev/null 2>&1 + fi + enable=$(uci get openclash.config.enable 2>/dev/null) + if [ "$enable" -eq 0 ]; then + rm -rf $LOG_FILE + rm -rf /www/openclash 2> /dev/null + rm -rf /tmp/openclash_last_version 2> /dev/null + sed -i '/openclash.log/d' $CRON_FILE + echo "OpenClash 关闭成功!" >$START_LOG + rm -rf $START_LOG + else + echo "OpenClash 关闭成功!" >$START_LOG + fi + + echo "CLASH STOP" +} + + +restart() +{ + stop + start +} diff --git a/package/cnsztl/luci-app-openclash/files/etc/openclash/ConnersHua.yml b/package/cnsztl/luci-app-openclash/files/etc/openclash/ConnersHua.yml new file mode 100755 index 0000000000..499c3ad45c --- /dev/null +++ b/package/cnsztl/luci-app-openclash/files/etc/openclash/ConnersHua.yml @@ -0,0 +1,1056 @@ +Rule: +##source:ConnersHua +# Internet Service Provider Hijacking Protection 运营商劫持保护 +- DOMAIN-SUFFIX,17gouwuba.com,Hijacking +- DOMAIN-SUFFIX,189zj.cn,Hijacking +- DOMAIN-SUFFIX,285680.com,Hijacking +- DOMAIN-SUFFIX,3721zh.com,Hijacking +- DOMAIN-SUFFIX,4336wang.cn,Hijacking +- DOMAIN-SUFFIX,51chumoping.com,Hijacking +- DOMAIN-SUFFIX,51mld.cn,Hijacking +- DOMAIN-SUFFIX,58mingri.cn,Hijacking +- DOMAIN-SUFFIX,58mingtian.cn,Hijacking +- DOMAIN-SUFFIX,6d63d3.com,Hijacking +- DOMAIN-SUFFIX,7gg.cc,Hijacking +- DOMAIN-SUFFIX,91veg.com,Hijacking +- DOMAIN-SUFFIX,9s6q.cn,Hijacking +- DOMAIN-SUFFIX,adsame.com,Hijacking +- DOMAIN-SUFFIX,aiclk.com,Hijacking +- DOMAIN-SUFFIX,akuai.top,Hijacking +- DOMAIN-SUFFIX,atplay.cn,Hijacking +- DOMAIN-SUFFIX,baiwanchuangyi.com,Hijacking +- DOMAIN-SUFFIX,bayimob.com,Hijacking +- DOMAIN-SUFFIX,beerto.cn,Hijacking +- DOMAIN-SUFFIX,beilamusi.com,Hijacking +- DOMAIN-SUFFIX,benshiw.net,Hijacking +- DOMAIN-SUFFIX,bianxianmao.com,Hijacking +- DOMAIN-SUFFIX,bryonypie.com,Hijacking +- DOMAIN-SUFFIX,cishantao.com,Hijacking +- DOMAIN-SUFFIX,cszlks.com,Hijacking +- DOMAIN-SUFFIX,cudaojia.com,Hijacking +- DOMAIN-SUFFIX,dafapromo.com,Hijacking +- DOMAIN-SUFFIX,daitdai.com,Hijacking +- DOMAIN-SUFFIX,dsaeerf.com,Hijacking +- DOMAIN-SUFFIX,dugesheying.com,Hijacking +- DOMAIN-SUFFIX,dv8c1t.cn,Hijacking +- DOMAIN-SUFFIX,erdoscs.com,Hijacking +- DOMAIN-SUFFIX,fan-yong.com,Hijacking +- DOMAIN-SUFFIX,feih.com.cn,Hijacking +- DOMAIN-SUFFIX,fjlqqc.com,Hijacking +- DOMAIN-SUFFIX,fkku194.com,Hijacking +- DOMAIN-SUFFIX,freedrive.cn,Hijacking +- DOMAIN-SUFFIX,gclick.cn,Hijacking +- DOMAIN-SUFFIX,goufanli100.com,Hijacking +- DOMAIN-SUFFIX,gouwubang.com,Hijacking +- DOMAIN-SUFFIX,haoshengtoys.com,Hijacking +- DOMAIN-SUFFIX,ichaosheng.com,Hijacking +- DOMAIN-SUFFIX,ishop789.com,Hijacking +- DOMAIN-SUFFIX,jdkic.com,Hijacking +- DOMAIN-SUFFIX,jiubuhua.com,Hijacking +- DOMAIN-SUFFIX,jwg365.cn,Hijacking +- DOMAIN-SUFFIX,kualianyingxiao.cn,Hijacking +- DOMAIN-SUFFIX,kumihua.com,Hijacking +- DOMAIN-SUFFIX,linktech.cn,Hijacking +- DOMAIN-SUFFIX,ltheanine.cn,Hijacking +- DOMAIN-SUFFIX,maipinshangmao.com,Hijacking +- DOMAIN-SUFFIX,minisplat.cn,Hijacking +- DOMAIN-SUFFIX,mkitgfs.com,Hijacking +- DOMAIN-SUFFIX,mlnbike.com,Hijacking +- DOMAIN-SUFFIX,newapi.com,Hijacking +- DOMAIN-SUFFIX,pinzhitmall.com,Hijacking +- DOMAIN-SUFFIX,poppyta.com,Hijacking +- DOMAIN-SUFFIX,qichexin.com,Hijacking +- DOMAIN-SUFFIX,qinchugudao.com,Hijacking +- DOMAIN-SUFFIX,quanliyouxi.cn,Hijacking +- DOMAIN-SUFFIX,qutaobi.com,Hijacking +- DOMAIN-SUFFIX,ry51w.cn,Hijacking +- DOMAIN-SUFFIX,sg536.cn,Hijacking +- DOMAIN-SUFFIX,sifubo.cn,Hijacking +- DOMAIN-SUFFIX,sifuce.cn,Hijacking +- DOMAIN-SUFFIX,sifuda.cn,Hijacking +- DOMAIN-SUFFIX,sifufu.cn,Hijacking +- DOMAIN-SUFFIX,sifuge.cn,Hijacking +- DOMAIN-SUFFIX,sifugu.cn,Hijacking +- DOMAIN-SUFFIX,sifuhe.cn,Hijacking +- DOMAIN-SUFFIX,sifuhu.cn,Hijacking +- DOMAIN-SUFFIX,sifuji.cn,Hijacking +- DOMAIN-SUFFIX,sifuka.cn,Hijacking +- DOMAIN-SUFFIX,smgru.net,Hijacking +- DOMAIN-SUFFIX,taoggou.com,Hijacking +- DOMAIN-SUFFIX,tcxshop.com,Hijacking +- DOMAIN-SUFFIX,tjqonline.cn,Hijacking +- DOMAIN-SUFFIX,topitme.com,Hijacking +- DOMAIN-SUFFIX,tuia.cn,Hijacking +- DOMAIN-SUFFIX,tuipenguin.com,Hijacking +- DOMAIN-SUFFIX,tuitiger.com,Hijacking +- DOMAIN-SUFFIX,wx16999.com,Hijacking +- DOMAIN-SUFFIX,xiaohuau.xyz,Hijacking +- DOMAIN-SUFFIX,yinmong.com,Hijacking +- DOMAIN-SUFFIX,yiqifa.com,Hijacking +- DOMAIN-SUFFIX,yitaopt.com,Hijacking +- DOMAIN-SUFFIX,yjqiqi.com,Hijacking +- DOMAIN-SUFFIX,yukhj.com,Hijacking +- DOMAIN-SUFFIX,zhaozecheng.cn,Hijacking +- DOMAIN-SUFFIX,zhenxinet.com,Hijacking +- DOMAIN-SUFFIX,zunmi.cn,Hijacking +- DOMAIN-SUFFIX,zzd6.com,Hijacking +- IP-CIDR,39.107.15.115/32,Hijacking +- IP-CIDR,47.89.59.182/32,Hijacking +- IP-CIDR,103.49.209.27/32,Hijacking +- IP-CIDR,123.56.152.96/32,Hijacking +# > ChinaNet +- IP-CIDR,61.160.200.223/32,Hijacking +- IP-CIDR,61.160.200.242/32,Hijacking +- IP-CIDR,61.160.200.252/32,Hijacking +- IP-CIDR,61.174.50.214/32,Hijacking +- IP-CIDR,111.175.220.163/32,Hijacking +- IP-CIDR,111.175.220.164/32,Hijacking +- IP-CIDR,124.232.160.178/32,Hijacking +- IP-CIDR,175.6.223.15/32,Hijacking +- IP-CIDR,183.59.53.237/32,Hijacking +- IP-CIDR,218.93.127.37/32,Hijacking +- IP-CIDR,221.228.17.152/32,Hijacking +- IP-CIDR,221.231.6.79/32,Hijacking +- IP-CIDR,222.186.61.91/32,Hijacking +- IP-CIDR,222.186.61.95/32,Hijacking +- IP-CIDR,222.186.61.96/32,Hijacking +- IP-CIDR,222.186.61.97/32,Hijacking +# > ChinaUnicom +- IP-CIDR,106.75.231.48/32,Hijacking +- IP-CIDR,119.4.249.166/32,Hijacking +- IP-CIDR,220.196.52.141/32,Hijacking +- IP-CIDR,221.6.4.148/32,Hijacking +# > ChinaMobile +- IP-CIDR,114.247.28.96/32,Hijacking +- IP-CIDR,221.179.131.72/32,Hijacking +- IP-CIDR,221.179.140.145/32,Hijacking +# > Dr.Peng +- IP-CIDR,10.72.25.0/24,Hijacking +- IP-CIDR,115.182.16.79/32,Hijacking +- IP-CIDR,118.144.88.126/32,Hijacking +- IP-CIDR,118.144.88.215/32,Hijacking +- IP-CIDR,120.76.189.132/32,Hijacking +- IP-CIDR,124.14.21.147/32,Hijacking +- IP-CIDR,124.14.21.151/32,Hijacking +- IP-CIDR,180.166.52.24/32,Hijacking +- IP-CIDR,211.161.101.106/32,Hijacking +- IP-CIDR,220.115.251.25/32,Hijacking +- IP-CIDR,222.73.156.235/32,Hijacking + +# Blocklist 黑名单 +- DOMAIN-SUFFIX,kuaizip.com,Hijacking +- DOMAIN-SUFFIX,mackeeper.com,Hijacking +# > Adobe +- DOMAIN-SUFFIX,flash.cn,Hijacking +- DOMAIN,geo2.adobe.com,Hijacking +# > CJ Marketing +- DOMAIN-SUFFIX,4009997658.com,Hijacking +- DOMAIN-SUFFIX,abbyychina.com,Hijacking +- DOMAIN-SUFFIX,bartender.cc,Hijacking +- DOMAIN-SUFFIX,betterzip.net,Hijacking +- DOMAIN-SUFFIX,beyondcompare.cc,Hijacking +- DOMAIN-SUFFIX,bingdianhuanyuan.cn,Hijacking +- DOMAIN-SUFFIX,chemdraw.com.cn,Hijacking +- DOMAIN-SUFFIX,cjmakeding.com,Hijacking +- DOMAIN-SUFFIX,cjmkt.com,Hijacking +- DOMAIN-SUFFIX,codesoftchina.com,Hijacking +- DOMAIN-SUFFIX,coreldrawchina.com,Hijacking +- DOMAIN-SUFFIX,crossoverchina.com,Hijacking +- DOMAIN-SUFFIX,easyrecoverychina.com,Hijacking +- DOMAIN-SUFFIX,ediuschina.com,Hijacking +- DOMAIN-SUFFIX,flstudiochina.com,Hijacking +- DOMAIN-SUFFIX,formysql.com,Hijacking +- DOMAIN-SUFFIX,guitarpro.cc,Hijacking +- DOMAIN-SUFFIX,huishenghuiying.com.cn,Hijacking +- DOMAIN-SUFFIX,hypersnap.net,Hijacking +- DOMAIN-SUFFIX,iconworkshop.cn,Hijacking +- DOMAIN-SUFFIX,imindmap.cc,Hijacking +- DOMAIN-SUFFIX,jihehuaban.com.cn,Hijacking +- DOMAIN-SUFFIX,keyshot.cc,Hijacking +- DOMAIN-SUFFIX,kingdeecn.cn,Hijacking +- DOMAIN-SUFFIX,logoshejishi.com,Hijacking +- DOMAIN-SUFFIX,mairuan.cn,Hijacking +- DOMAIN-SUFFIX,mairuan.com,Hijacking +- DOMAIN-SUFFIX,mairuan.com.cn,Hijacking +- DOMAIN-SUFFIX,mairuan.net,Hijacking +- DOMAIN-SUFFIX,mairuanwang.com,Hijacking +- DOMAIN-SUFFIX,makeding.com,Hijacking +- DOMAIN-SUFFIX,mathtype.cn,Hijacking +- DOMAIN-SUFFIX,mindmanager.cc,Hijacking +- DOMAIN-SUFFIX,mindmapper.cc,Hijacking +- DOMAIN-SUFFIX,mycleanmymac.com,Hijacking +- DOMAIN-SUFFIX,nicelabel.cc,Hijacking +- DOMAIN-SUFFIX,ntfsformac.cc,Hijacking +- DOMAIN-SUFFIX,ntfsformac.cn,Hijacking +- DOMAIN-SUFFIX,overturechina.com,Hijacking +- DOMAIN-SUFFIX,passwordrecovery.cn,Hijacking +- DOMAIN-SUFFIX,pdfexpert.cc,Hijacking +- DOMAIN-SUFFIX,shankejingling.com,Hijacking +- DOMAIN-SUFFIX,ultraiso.net,Hijacking +- DOMAIN-SUFFIX,vegaschina.cn,Hijacking +- DOMAIN-SUFFIX,xmindchina.net,Hijacking +- DOMAIN-SUFFIX,xshellcn.com,Hijacking +- DOMAIN-SUFFIX,yihuifu.cn,Hijacking +- DOMAIN-SUFFIX,yuanchengxiezuo.com,Hijacking +- DOMAIN-SUFFIX,zbrushcn.com,Hijacking +- DOMAIN-SUFFIX,zhzzx.com,Hijacking + +# Global Area Network +# (ForeignMedia) +# (Video) +# > Youtube +# USER-AGENT,com.google.ios.youtube*,ForeignMedia +# USER-AGENT,YouTube*,ForeignMedia +# USER-AGENT,YouTubeMusic*,ForeignMedia +- DOMAIN-SUFFIX,googlevideo.com,ForeignMedia +- DOMAIN-SUFFIX,youtube.com,ForeignMedia +- DOMAIN,youtubei.googleapis.com,ForeignMedia +# > Netflix +# USER-AGENT,Argo*,ForeignMedia +- DOMAIN-SUFFIX,netflix.com,ForeignMedia +- DOMAIN-SUFFIX,netflix.net,ForeignMedia +- DOMAIN-SUFFIX,nflxext.com,ForeignMedia +- DOMAIN-SUFFIX,nflximg.com,ForeignMedia +- DOMAIN-SUFFIX,nflximg.net,ForeignMedia +- DOMAIN-SUFFIX,nflxso.net,ForeignMedia +- DOMAIN-SUFFIX,nflxvideo.net,ForeignMedia +# > Amazon Prime Video (US|JP) +# USER-AGENT,InstantVideo.US*,ForeignMedia +# USER-AGENT,Prime%20Video*,ForeignMedia +# > Fox+ (HK|TW|SG) +# USER-AGENT,FOXPlus*,ForeignMedia +- DOMAIN-SUFFIX,foxplus.com,ForeignMedia +- DOMAIN-SUFFIX,theplatform.com,ForeignMedia +- DOMAIN-SUFFIX,staticasiafox.akamaized.net,ForeignMedia +- DOMAIN-SUFFIX,dashasiafox.akamaized.net,ForeignMedia +# > (US) +# > HBO Now & HBO GO +# USER-AGENT,HBO%20NOW*,ForeignMedia +- DOMAIN-SUFFIX,hbo.com,ForeignMedia +- DOMAIN-SUFFIX,hbogo.com,ForeignMedia +- DOMAIN-SUFFIX,hboasia.com,ForeignMedia +- DOMAIN-SUFFIX,hbogo.com,ForeignMedia +- DOMAIN-SUFFIX,hbogoasia.hk,ForeignMedia +# > Hulu +- DOMAIN-SUFFIX,hulu.com,ForeignMedia +- DOMAIN-SUFFIX,huluim.com,ForeignMedia +# > PBS +# USER-AGENT,PBS*,ForeignMedia +- DOMAIN-SUFFIX,pbs.org,ForeignMedia +# > Fox Now +# USER-AGENT,FOX%20NOW*,ForeignMedia +- DOMAIN-SUFFIX,fox.com,ForeignMedia +- DOMAIN-SUFFIX,foxdcg.com,ForeignMedia +- DOMAIN-SUFFIX,uplynk.com,ForeignMedia +# > (HK) +# > myTV_SUPER +# USER-AGENT,mytv*,ForeignMedia +- DOMAIN-SUFFIX,mytvsuper.com,ForeignMedia +- DOMAIN-SUFFIX,tvb.com,ForeignMedia +# > encoreTVB +# USER-AGENT,encoreTVB*,ForeignMedia +- DOMAIN-SUFFIX,encoretvb.com,ForeignMedia +- DOMAIN,content.jwplatform.com,ForeignMedia +- DOMAIN,videos-f.jwpsrv.com,ForeignMedia +# > ViuTV +# USER-AGENT,ViuTV*,ForeignMedia +- DOMAIN-SUFFIX,viu.tv,ForeignMedia +- DOMAIN,api.viu.now.com,ForeignMedia +# > (JP) +# > Hulu(フールー) +- DOMAIN-SUFFIX,happyon.jp,ForeignMedia +- DOMAIN-SUFFIX,hulu.jp,ForeignMedia +# > AbemaTV +# USER-AGENT,AbemaTV*,ForeignMedia +- DOMAIN-SUFFIX,abema.io,ForeignMedia +- DOMAIN-SUFFIX,ameba.jp,ForeignMedia +- DOMAIN-SUFFIX,hayabusa.io,ForeignMedia +- DOMAIN,abematv.akamaized.net,ForeignMedia +- DOMAIN,ds-linear-abematv.akamaized.net,ForeignMedia +- DOMAIN,ds-vod-abematv.akamaized.net,ForeignMedia +- DOMAIN,linear-abematv.akamaized.net,ForeignMedia +# > (UK) +# > BBC iPlayer +# USER-AGENT,BBCiPlayer*,ForeignMedia +- DOMAIN-SUFFIX,bbc.co.uk,ForeignMedia +- DOMAIN-SUFFIX,bbci.co.uk,ForeignMedia +- DOMAIN-KEYWORD,bbcfmt,ForeignMedia +- DOMAIN-KEYWORD,uk-live,ForeignMedia +# > (TW) +# > Bahamut +# USER-AGENT,Anime*,ForeignMedia +- DOMAIN-SUFFIX,bahamut.com.tw,ForeignMedia +- DOMAIN-SUFFIX,gamer.com.tw,ForeignMedia +- DOMAIN,gamer-cds.cdn.hinet.net,ForeignMedia +- DOMAIN,gamer2-cds.cdn.hinet.net,ForeignMedia +# > KKTV +# USER-AGENT,KKTV*,ForeignMedia +# USER-AGENT,com.kktv.ios.kktv*,ForeignMedia +- DOMAIN-SUFFIX,kktv.com.tw,ForeignMedia +- DOMAIN-SUFFIX,kktv.me,ForeignMedia +- DOMAIN,kktv-theater.kk.stream,ForeignMedia +# > Line TV +# USER-AGENT,LINE%20TV*,ForeignMedia +- DOMAIN-SUFFIX,linetv.tw,ForeignMedia +- DOMAIN,d3c7rimkq79yfu.cloudfront.net,ForeignMedia +# > LiTV +- DOMAIN-SUFFIX,litv.tv,ForeignMedia +- DOMAIN,litvfreemobile-hichannel.cdn.hinet.net,ForeignMedia + +# (Music) +# > Spotify +# USER-AGENT,Spotify*,ForeignMedia +- DOMAIN-SUFFIX,pscdn.co,ForeignMedia +- DOMAIN-SUFFIX,scdn.co,ForeignMedia +- DOMAIN-SUFFIX,spotify.com,ForeignMedia +- DOMAIN-SUFFIX,spoti.fi,ForeignMedia +# > JOOX +# USER-AGENT,WeMusic*,ForeignMedia +# USER-AGENT,JOOX*,ForeignMedia +- DOMAIN-SUFFIX,joox.com,ForeignMedia +# > Pandora +- DOMAIN-SUFFIX,pandora.com,ForeignMedia +# > KKBOX(HK|MO|TW|JP|SG|MY) +- DOMAIN-SUFFIX,kkbox.com,ForeignMedia +- DOMAIN-SUFFIX,kkbox.com.tw,ForeignMedia +- DOMAIN-SUFFIX,kfs.io,ForeignMedia + +# (DomesticMedia) +# > 愛奇藝台灣站 +- DOMAIN-SUFFIX,iqiyi.com,DomesticMedia +- DOMAIN-SUFFIX,71.am,DomesticMedia +# > bilibili +- DOMAIN-SUFFIX,bilibili.com,DomesticMedia + +# (DNS Cache Pollution Protection) +# > Google +- DOMAIN-SUFFIX,appspot.com,PROXY +- DOMAIN-SUFFIX,blogger.com,PROXY +- DOMAIN-SUFFIX,getoutline.org,PROXY +- DOMAIN-SUFFIX,gvt0.com,PROXY +- DOMAIN-SUFFIX,gvt1.com,PROXY +- DOMAIN-SUFFIX,gvt3.com,PROXY +- DOMAIN-SUFFIX,xn--ngstr-lra8j.com,PROXY +- DOMAIN-KEYWORD,google,PROXY +- DOMAIN-KEYWORD,blogspot,PROXY +# > Facebook +- DOMAIN-SUFFIX,cdninstagram.com,PROXY +- DOMAIN-SUFFIX,fb.com,PROXY +- DOMAIN-SUFFIX,fb.me,PROXY +- DOMAIN-SUFFIX,fbaddins.com,PROXY +- DOMAIN-SUFFIX,fbcdn.net,PROXY +- DOMAIN-SUFFIX,fbsbx.com,PROXY +- DOMAIN-SUFFIX,fbworkmail.com,PROXY +- DOMAIN-SUFFIX,instagram.com,PROXY +- DOMAIN-SUFFIX,m.me,PROXY +- DOMAIN-SUFFIX,messenger.com,PROXY +- DOMAIN-SUFFIX,oculus.com,PROXY +- DOMAIN-SUFFIX,oculuscdn.com,PROXY +- DOMAIN-SUFFIX,rocksdb.org,PROXY +- DOMAIN-SUFFIX,whatsapp.com,PROXY +- DOMAIN-SUFFIX,whatsapp.net,PROXY +- DOMAIN-KEYWORD,facebook,PROXY +# > Twitter +- DOMAIN-SUFFIX,pscp.tv,PROXY +- DOMAIN-SUFFIX,periscope.tv,PROXY +- DOMAIN-SUFFIX,t.co,PROXY +- DOMAIN-SUFFIX,twimg.co,PROXY +- DOMAIN-SUFFIX,twimg.com,PROXY +- DOMAIN-SUFFIX,twitpic.com,PROXY +- DOMAIN-SUFFIX,vine.co,PROXY +- DOMAIN-KEYWORD,twitter,PROXY +# > Telegram +- DOMAIN-SUFFIX,t.me,PROXY +- DOMAIN-SUFFIX,tdesktop.com,PROXY +- DOMAIN-SUFFIX,telegra.ph,PROXY +- DOMAIN-SUFFIX,telegram.me,PROXY +- DOMAIN-SUFFIX,telegram.org,PROXY +- IP-CIDR,67.198.55.0/24,PROXY +- IP-CIDR,91.108.4.0/22,PROXY +- IP-CIDR,91.108.8.0/22,PROXY +- IP-CIDR,91.108.12.0/22,PROXY +- IP-CIDR,91.108.16.0/22,PROXY +- IP-CIDR,91.108.56.0/22,PROXY +- IP-CIDR,109.239.140.0/24,PROXY +- IP-CIDR,149.154.160.0/20,PROXY +- IP-CIDR,205.172.60.0/22,PROXY +# > Line +- DOMAIN-SUFFIX,line.me,PROXY +- DOMAIN-SUFFIX,line-apps.com,PROXY +- DOMAIN-SUFFIX,line-scdn.net,PROXY +- DOMAIN-SUFFIX,naver.jp,PROXY +# > Other +- DOMAIN-SUFFIX,4shared.com,PROXY +- DOMAIN-SUFFIX,881903.com,PROXY +- DOMAIN-SUFFIX,9cache.com,PROXY +- DOMAIN-SUFFIX,9gag.com,PROXY +- DOMAIN-SUFFIX,abc.net.au,PROXY +- DOMAIN-SUFFIX,abebooks.com,PROXY +- DOMAIN-SUFFIX,amazon.co.jp,PROXY +- DOMAIN-SUFFIX,apigee.com,PROXY +- DOMAIN-SUFFIX,apk-dl.com,PROXY +- DOMAIN-SUFFIX,apkmirror.com,PROXY +- DOMAIN-SUFFIX,apkmonk.com,PROXY +- DOMAIN-SUFFIX,apkpure.com,PROXY +- DOMAIN-SUFFIX,aptoide.com,PROXY +- DOMAIN-SUFFIX,archive.is,PROXY +- DOMAIN-SUFFIX,archive.org,PROXY +- DOMAIN-SUFFIX,arte.tv,PROXY +- DOMAIN-SUFFIX,artstation.com,PROXY +- DOMAIN-SUFFIX,ask.com,PROXY +- DOMAIN-SUFFIX,avgle.com,PROXY +- DOMAIN-SUFFIX,badoo.com,PROXY +- DOMAIN-SUFFIX,bandwagonhost.com,PROXY +- DOMAIN-SUFFIX,bbc.com,PROXY +- DOMAIN-SUFFIX,behance.net,PROXY +- DOMAIN-SUFFIX,bibox.com,PROXY +- DOMAIN-SUFFIX,biggo.com.tw,PROXY +- DOMAIN-SUFFIX,binance.com,PROXY +- DOMAIN-SUFFIX,bitcointalk.org,PROXY +- DOMAIN-SUFFIX,bitfinex.com,PROXY +- DOMAIN-SUFFIX,bitmex.com,PROXY +- DOMAIN-SUFFIX,bit-z.com,PROXY +- DOMAIN-SUFFIX,bloglovin.com,PROXY +- DOMAIN-SUFFIX,bloomberg.cn,PROXY +- DOMAIN-SUFFIX,bloomberg.com,PROXY +- DOMAIN-SUFFIX,book.com.tw,PROXY +- DOMAIN-SUFFIX,booklive.jp,PROXY +- DOMAIN-SUFFIX,books.com.tw,PROXY +- DOMAIN-SUFFIX,box.com,PROXY +- DOMAIN-SUFFIX,brookings.edu,PROXY +- DOMAIN-SUFFIX,businessinsider.com,PROXY +- DOMAIN-SUFFIX,bwh1.net,PROXY +- DOMAIN-SUFFIX,castbox.fm,PROXY +- DOMAIN-SUFFIX,cbc.ca,PROXY +- DOMAIN-SUFFIX,cdw.com,PROXY +- DOMAIN-SUFFIX,change.org,PROXY +- DOMAIN-SUFFIX,ck101.com,PROXY +- DOMAIN-SUFFIX,clarionproject.org,PROXY +- DOMAIN-SUFFIX,clyp.it,PROXY +- DOMAIN-SUFFIX,cna.com.tw,PROXY +- DOMAIN-SUFFIX,comparitech.com,PROXY +- DOMAIN-SUFFIX,conoha.jp,PROXY +- DOMAIN-SUFFIX,crucial.com,PROXY +- DOMAIN-SUFFIX,cts.com.tw,PROXY +- DOMAIN-SUFFIX,cw.com.tw,PROXY +- DOMAIN-SUFFIX,cyberctm.com,PROXY +- DOMAIN-SUFFIX,dailymotion.com,PROXY +- DOMAIN-SUFFIX,dailyview.tw,PROXY +- DOMAIN-SUFFIX,daum.net,PROXY +- DOMAIN-SUFFIX,daumcdn.net,PROXY +- DOMAIN-SUFFIX,dcard.tw,PROXY +- DOMAIN-SUFFIX,deepdiscount.com,PROXY +- DOMAIN-SUFFIX,deezer.com,PROXY +- DOMAIN-SUFFIX,depositphotos.com,PROXY +- DOMAIN-SUFFIX,deviantart.com,PROXY +- DOMAIN-SUFFIX,disconnect.me,PROXY +- DOMAIN-SUFFIX,discordapp.com,PROXY +- DOMAIN-SUFFIX,discordapp.net,PROXY +- DOMAIN-SUFFIX,disqus.com,PROXY +- DOMAIN-SUFFIX,dns2go.com,PROXY +- DOMAIN-SUFFIX,dropbox.com,PROXY +- DOMAIN-SUFFIX,dropboxusercontent.com,PROXY +- DOMAIN-SUFFIX,duckduckgo.com,PROXY +- DOMAIN-SUFFIX,dw.com,PROXY +- DOMAIN-SUFFIX,dynu.com,PROXY +- DOMAIN-SUFFIX,earthcam.com,PROXY +- DOMAIN-SUFFIX,ebookservice.tw,PROXY +- DOMAIN-SUFFIX,economist.com,PROXY +- DOMAIN-SUFFIX,edgecastcdn.net,PROXY +- DOMAIN-SUFFIX,edu,PROXY +- DOMAIN-SUFFIX,elpais.com,PROXY +- DOMAIN-SUFFIX,enanyang.my,PROXY +- DOMAIN-SUFFIX,esoir.be,PROXY +- DOMAIN-SUFFIX,euronews.com,PROXY +- DOMAIN-SUFFIX,feedly.com,PROXY +- DOMAIN-SUFFIX,files.wordpress.com,PROXY +- DOMAIN-SUFFIX,flickr.com,PROXY +- DOMAIN-SUFFIX,flitto.com,PROXY +- DOMAIN-SUFFIX,foreignpolicy.com,PROXY +- DOMAIN-SUFFIX,friday.tw,PROXY +- DOMAIN-SUFFIX,gate.io,PROXY +- DOMAIN-SUFFIX,getlantern.org,PROXY +- DOMAIN-SUFFIX,getsync.com,PROXY +- DOMAIN-SUFFIX,globalvoices.org,PROXY +- DOMAIN-SUFFIX,goo.ne.jp,PROXY +- DOMAIN-SUFFIX,goodreads.com,PROXY +- DOMAIN-SUFFIX,gov,PROXY +- DOMAIN-SUFFIX,gov.tw,PROXY +- DOMAIN-SUFFIX,gumroad.com,PROXY +- DOMAIN-SUFFIX,hbg.com,PROXY +- DOMAIN-SUFFIX,hightail.com,PROXY +- DOMAIN-SUFFIX,hk01.com,PROXY +- DOMAIN-SUFFIX,hkbf.org,PROXY +- DOMAIN-SUFFIX,hkbookcity.com,PROXY +- DOMAIN-SUFFIX,hkej.com,PROXY +- DOMAIN-SUFFIX,hket.com,PROXY +- DOMAIN-SUFFIX,hkgolden.com,PROXY +- DOMAIN-SUFFIX,hootsuite.com,PROXY +- DOMAIN-SUFFIX,hudson.org,PROXY +- DOMAIN-SUFFIX,hyread.com.tw,PROXY +- DOMAIN-SUFFIX,ibtimes.com,PROXY +- DOMAIN-SUFFIX,i-cable.com,PROXY +- DOMAIN-SUFFIX,icij.org,PROXY +- DOMAIN-SUFFIX,icoco.com,PROXY +- DOMAIN-SUFFIX,id.heroku.com,PROXY +- DOMAIN-SUFFIX,imgur.com,PROXY +- DOMAIN-SUFFIX,initiummall.com,PROXY +- DOMAIN-SUFFIX,insecam.org,PROXY +- DOMAIN-SUFFIX,ipfs.io,PROXY +- DOMAIN-SUFFIX,issuu.com,PROXY +- DOMAIN-SUFFIX,istockphoto.com,PROXY +- DOMAIN-SUFFIX,japantimes.co.jp,PROXY +- DOMAIN-SUFFIX,jiji.com,PROXY +- DOMAIN-SUFFIX,jinx.com,PROXY +- DOMAIN-SUFFIX,jkforum.net,PROXY +- DOMAIN-SUFFIX,joinmastodon.org,PROXY +- DOMAIN-SUFFIX,justpaste.it,PROXY +- DOMAIN-SUFFIX,kakao.com,PROXY +- DOMAIN-SUFFIX,kakaocorp.com,PROXY +- DOMAIN-SUFFIX,kik.com,PROXY +- DOMAIN-SUFFIX,kobo.com,PROXY +- DOMAIN-SUFFIX,kobobooks.com,PROXY +- DOMAIN-SUFFIX,kodingen.com,PROXY +- DOMAIN-SUFFIX,lemonde.fr,PROXY +- DOMAIN-SUFFIX,lepoint.fr,PROXY +- DOMAIN-SUFFIX,lihkg.com,PROXY +- DOMAIN-SUFFIX,live.com,PROXY +- DOMAIN-SUFFIX,livestream.com,PROXY +- DOMAIN-SUFFIX,logmein.com,PROXY +- DOMAIN-SUFFIX,mail.ru,PROXY +- DOMAIN-SUFFIX,mailchimp.com,PROXY +- DOMAIN-SUFFIX,marc.info,PROXY +- DOMAIN-SUFFIX,matters.news,PROXY +- DOMAIN-SUFFIX,medium.com,PROXY +- DOMAIN-SUFFIX,mega.nz,PROXY +- DOMAIN-SUFFIX,mil,PROXY +- DOMAIN-SUFFIX,mingpao.com,PROXY +- DOMAIN-SUFFIX,mobile01.com,PROXY +- DOMAIN-SUFFIX,myspace.com,PROXY +- DOMAIN-SUFFIX,myspacecdn.com,PROXY +- DOMAIN-SUFFIX,nanyang.com,PROXY +- DOMAIN-SUFFIX,naver.com,PROXY +- DOMAIN-SUFFIX,newstapa.org,PROXY +- DOMAIN-SUFFIX,nicovideo.jp,PROXY +- DOMAIN-SUFFIX,nikkei.com,PROXY +- DOMAIN-SUFFIX,nofile.io,PROXY +- DOMAIN-SUFFIX,now.com,PROXY +- DOMAIN-SUFFIX,nrk.no,PROXY +- DOMAIN-SUFFIX,nyt.com,PROXY +- DOMAIN-SUFFIX,nytchina.com,PROXY +- DOMAIN-SUFFIX,nytcn.me,PROXY +- DOMAIN-SUFFIX,nytco.com,PROXY +- DOMAIN-SUFFIX,nytimes.com,PROXY +- DOMAIN-SUFFIX,nytimg.com,PROXY +- DOMAIN-SUFFIX,nytlog.com,PROXY +- DOMAIN-SUFFIX,nytstyle.com,PROXY +- DOMAIN-SUFFIX,ok.ru,PROXY +- DOMAIN-SUFFIX,okex.com,PROXY +- DOMAIN-SUFFIX,orientaldaily.com.my,PROXY +- DOMAIN-SUFFIX,paltalk.com,PROXY +- DOMAIN-SUFFIX,pbxes.com,PROXY +- DOMAIN-SUFFIX,pcdvd.com.tw,PROXY +- DOMAIN-SUFFIX,pchome.com.tw,PROXY +- DOMAIN-SUFFIX,pcloud.com,PROXY +- DOMAIN-SUFFIX,pinimg.com,PROXY +- DOMAIN-SUFFIX,pixiv.net,PROXY +- DOMAIN-SUFFIX,player.fm,PROXY +- DOMAIN-SUFFIX,plurk.com,PROXY +- DOMAIN-SUFFIX,pornhub.com,PROXY +- DOMAIN-SUFFIX,prism-break.org,PROXY +- DOMAIN-SUFFIX,proxifier.com,PROXY +- DOMAIN-SUFFIX,pts.org.tw,PROXY +- DOMAIN-SUFFIX,pubu.com.tw,PROXY +- DOMAIN-SUFFIX,pubu.tw,PROXY +- DOMAIN-SUFFIX,pureapk.com,PROXY +- DOMAIN-SUFFIX,quora.com,PROXY +- DOMAIN-SUFFIX,quoracdn.net,PROXY +- DOMAIN-SUFFIX,rakuten.co.jp,PROXY +- DOMAIN-SUFFIX,readingtimes.com.tw,PROXY +- DOMAIN-SUFFIX,readmoo.com,PROXY +- DOMAIN-SUFFIX,reddit.com,PROXY +- DOMAIN-SUFFIX,redditmedia.com,PROXY +- DOMAIN-SUFFIX,resilio.com,PROXY +- DOMAIN-SUFFIX,reuters.com,PROXY +- DOMAIN-SUFFIX,rfi.fr,PROXY +- DOMAIN-SUFFIX,roadshow.hk,PROXY +- DOMAIN-SUFFIX,scmp.com,PROXY +- DOMAIN-SUFFIX,scribd.com,PROXY +- DOMAIN-SUFFIX,seatguru.com,PROXY +- DOMAIN-SUFFIX,shadowsocks.org,PROXY +- DOMAIN-SUFFIX,slideshare.net,PROXY +- DOMAIN-SUFFIX,softfamous.com,PROXY +- DOMAIN-SUFFIX,soundcloud.com,PROXY +- DOMAIN-SUFFIX,startpage.com,PROXY +- DOMAIN-SUFFIX,steamcommunity.com,PROXY +- DOMAIN-SUFFIX,steemit.com,PROXY +- DOMAIN-SUFFIX,t66y.com,PROXY +- DOMAIN-SUFFIX,tapatalk.com,PROXY +- DOMAIN-SUFFIX,teco-hk.org,PROXY +- DOMAIN-SUFFIX,teco-mo.org,PROXY +- DOMAIN-SUFFIX,teddysun.com,PROXY +- DOMAIN-SUFFIX,theinitium.com,PROXY +- DOMAIN-SUFFIX,tineye.com,PROXY +- DOMAIN-SUFFIX,torproject.org,PROXY +- DOMAIN-SUFFIX,tumblr.com,PROXY +- DOMAIN-SUFFIX,turbobit.net,PROXY +- DOMAIN-SUFFIX,tutanota.com,PROXY +- DOMAIN-SUFFIX,tvboxnow.com,PROXY +- DOMAIN-SUFFIX,twitch.tv,PROXY +- DOMAIN-SUFFIX,udn.com,PROXY +- DOMAIN-SUFFIX,unseen.is,PROXY +- DOMAIN-SUFFIX,upmedia.mg,PROXY +- DOMAIN-SUFFIX,uptodown.com,PROXY +- DOMAIN-SUFFIX,ustream.tv,PROXY +- DOMAIN-SUFFIX,uwants.com,PROXY +- DOMAIN-SUFFIX,v2ray.com,PROXY +- DOMAIN-SUFFIX,viber.com,PROXY +- DOMAIN-SUFFIX,videopress.com,PROXY +- DOMAIN-SUFFIX,vimeo.com,PROXY +- DOMAIN-SUFFIX,voxer.com,PROXY +- DOMAIN-SUFFIX,vzw.com,PROXY +- DOMAIN-SUFFIX,w3schools.com,PROXY +- DOMAIN-SUFFIX,wattpad.com,PROXY +- DOMAIN-SUFFIX,whoer.net,PROXY +- DOMAIN-SUFFIX,wikimapia.org,PROXY +- DOMAIN-SUFFIX,wikipedia.org,PROXY +- DOMAIN-SUFFIX,wire.com,PROXY +- DOMAIN-SUFFIX,workflow.is,PROXY +- DOMAIN-SUFFIX,worldcat.org,PROXY +- DOMAIN-SUFFIX,wsj.com,PROXY +- DOMAIN-SUFFIX,wsj.net,PROXY +- DOMAIN-SUFFIX,xboxlive.com,PROXY +- DOMAIN-SUFFIX,xvideos.com,PROXY +- DOMAIN-SUFFIX,yahoo.com,PROXY +- DOMAIN-SUFFIX,yesasia.com,PROXY +- DOMAIN-SUFFIX,yes-news.com,PROXY +- DOMAIN-SUFFIX,yomiuri.co.jp,PROXY +- DOMAIN-SUFFIX,you-get.org,PROXY +- DOMAIN-SUFFIX,zb.com,PROXY +- DOMAIN-SUFFIX,zello.com,PROXY +- DOMAIN-SUFFIX,zeronet.io,PROXY +- DOMAIN-KEYWORD,github,PROXY +- DOMAIN-KEYWORD,jav,PROXY +- DOMAIN-KEYWORD,pinterest,PROXY +- DOMAIN-KEYWORD,porn,PROXY +- DOMAIN-KEYWORD,wikileaks,PROXY + +# (Region-Restricted Access Denied) +- DOMAIN-SUFFIX,abc.com,PROXY +- DOMAIN-SUFFIX,abc.net.au,PROXY +- DOMAIN-SUFFIX,apartmentratings.com,PROXY +- DOMAIN-SUFFIX,apartments.com,PROXY +- DOMAIN-SUFFIX,bankmobilevibe.com,PROXY +- DOMAIN-SUFFIX,bing.com,PROXY +- DOMAIN-SUFFIX,booktopia.com.au,PROXY +- DOMAIN-SUFFIX,centauro.com.br,PROXY +- DOMAIN-SUFFIX,clearsurance.com,PROXY +- DOMAIN-SUFFIX,costco.com,PROXY +- DOMAIN-SUFFIX,crackle.com,PROXY +- DOMAIN-SUFFIX,depositphotos.cn,PROXY +- DOMAIN-SUFFIX,dish.com,PROXY +- DOMAIN-SUFFIX,dmm.co.jp,PROXY +- DOMAIN-SUFFIX,dmm.com,PROXY +- DOMAIN-SUFFIX,dnvod.tv,PROXY +- DOMAIN-SUFFIX,esurance.com,PROXY +- DOMAIN-SUFFIX,extmatrix.com,PROXY +- DOMAIN-SUFFIX,fastpic.ru,PROXY +- DOMAIN-SUFFIX,flipboard.com,PROXY +- DOMAIN-SUFFIX,fnac.be,PROXY +- DOMAIN-SUFFIX,fnac.com,PROXY +- DOMAIN-SUFFIX,funkyimg.com,PROXY +- DOMAIN-SUFFIX,fxnetworks.com,PROXY +- DOMAIN-SUFFIX,gettyimages.com,PROXY +- DOMAIN-SUFFIX,go.com,PROXY +- DOMAIN-SUFFIX,here.com,PROXY +- DOMAIN-SUFFIX,jcpenney.com,PROXY +- DOMAIN-SUFFIX,jiehua.tv,PROXY +- DOMAIN-SUFFIX,kknews.cc,PROXY +- DOMAIN-SUFFIX,nationwide.com,PROXY +- DOMAIN-SUFFIX,nbc.com,PROXY +- DOMAIN-SUFFIX,nexon.com,PROXY +- DOMAIN-SUFFIX,nordstrom.com,PROXY +- DOMAIN-SUFFIX,nordstromimage.com,PROXY +- DOMAIN-SUFFIX,nordstromrack.com,PROXY +- DOMAIN-SUFFIX,read01.com,PROXY +- DOMAIN-SUFFIX,superpages.com,PROXY +- DOMAIN-SUFFIX,target.com,PROXY +- DOMAIN-SUFFIX,thinkgeek.com,PROXY +- DOMAIN-SUFFIX,tracfone.com,PROXY +- DOMAIN-SUFFIX,uploader.jp,PROXY +- DOMAIN-SUFFIX,vevo.com,PROXY +- DOMAIN-SUFFIX,viu.tv,PROXY +- DOMAIN-SUFFIX,vk.com,PROXY +- DOMAIN-SUFFIX,vsco.co,PROXY +- DOMAIN-SUFFIX,xfinity.com,PROXY +- DOMAIN-SUFFIX,zattoo.com,PROXY +# USER-AGENT,Roam*,PROXY + +# (The Most Popular Sites) +# > Apple +# > Apple URL Shortener +- DOMAIN-SUFFIX,appsto.re,PROXY +# > TestFlight +- DOMAIN,beta.itunes.apple.com,PROXY +# > iBooks Store download +- DOMAIN,books.itunes.apple.com,PROXY +# > iTunes Store Moveis Trailers +- DOMAIN,hls.itunes.apple.com,PROXY +# App Store Preview +- DOMAIN,itunes.apple.com,PROXY +# > Spotlight +- DOMAIN,api-glb-sea.smoot.apple.com,PROXY +# > Dictionary +- DOMAIN,lookup-api.apple.com,PROXY +# PROCESS-NAME,LookupViewService,PROXY +# > Google +- DOMAIN-SUFFIX,abc.xyz,PROXY +- DOMAIN-SUFFIX,android.com,PROXY +- DOMAIN-SUFFIX,androidify.com,PROXY +- DOMAIN-SUFFIX,dialogflow.com,PROXY +- DOMAIN-SUFFIX,autodraw.com,PROXY +- DOMAIN-SUFFIX,capitalg.com,PROXY +- DOMAIN-SUFFIX,certificate-transparency.org,PROXY +- DOMAIN-SUFFIX,chrome.com,PROXY +- DOMAIN-SUFFIX,chromeexperiments.com,PROXY +- DOMAIN-SUFFIX,chromestatus.com,PROXY +- DOMAIN-SUFFIX,chromium.org,PROXY +- DOMAIN-SUFFIX,creativelab5.com,PROXY +- DOMAIN-SUFFIX,debug.com,PROXY +- DOMAIN-SUFFIX,deepmind.com,PROXY +- DOMAIN-SUFFIX,firebaseio.com,PROXY +- DOMAIN-SUFFIX,getmdl.io,PROXY +- DOMAIN-SUFFIX,ggpht.com,PROXY +- DOMAIN-SUFFIX,gmail.com,PROXY +- DOMAIN-SUFFIX,gmodules.com,PROXY +- DOMAIN-SUFFIX,godoc.org,PROXY +- DOMAIN-SUFFIX,golang.org,PROXY +- DOMAIN-SUFFIX,gstatic.com,PROXY +- DOMAIN-SUFFIX,gv.com,PROXY +- DOMAIN-SUFFIX,gwtproject.org,PROXY +- DOMAIN-SUFFIX,itasoftware.com,PROXY +- DOMAIN-SUFFIX,madewithcode.com,PROXY +- DOMAIN-SUFFIX,material.io,PROXY +- DOMAIN-SUFFIX,polymer-project.org,PROXY +- DOMAIN-SUFFIX,admin.recaptcha.net,PROXY +- DOMAIN-SUFFIX,recaptcha.net,PROXY +- DOMAIN-SUFFIX,shattered.io,PROXY +- DOMAIN-SUFFIX,synergyse.com,PROXY +- DOMAIN-SUFFIX,tensorflow.org,PROXY +- DOMAIN-SUFFIX,tfhub.dev,PROXY +- DOMAIN-SUFFIX,tiltbrush.com,PROXY +- DOMAIN-SUFFIX,waveprotocol.org,PROXY +- DOMAIN-SUFFIX,waymo.com,PROXY +- DOMAIN-SUFFIX,webmproject.org,PROXY +- DOMAIN-SUFFIX,webrtc.org,PROXY +- DOMAIN-SUFFIX,whatbrowser.org,PROXY +- DOMAIN-SUFFIX,widevine.com,PROXY +- DOMAIN-SUFFIX,x.company,PROXY +- DOMAIN-SUFFIX,youtu.be,PROXY +- DOMAIN-SUFFIX,yt.be,PROXY +- DOMAIN-SUFFIX,ytimg.com,PROXY +# > Other +- DOMAIN-SUFFIX,0rz.tw,PROXY +- DOMAIN-SUFFIX,4bluestones.biz,PROXY +- DOMAIN-SUFFIX,9bis.net,PROXY +- DOMAIN-SUFFIX,allconnected.co,PROXY +- DOMAIN-SUFFIX,amazonaws.com,PROXY +- DOMAIN-SUFFIX,aol.com,PROXY +- DOMAIN-SUFFIX,bcc.com.tw,PROXY +- DOMAIN-SUFFIX,bit.ly,PROXY +- DOMAIN-SUFFIX,bitshare.com,PROXY +- DOMAIN-SUFFIX,blog.jp,PROXY +- DOMAIN-SUFFIX,blogimg.jp,PROXY +- DOMAIN-SUFFIX,blogtd.org,PROXY +- DOMAIN-SUFFIX,broadcast.co.nz,PROXY +- DOMAIN-SUFFIX,camfrog.com,PROXY +- DOMAIN-SUFFIX,cfos.de,PROXY +- DOMAIN-SUFFIX,citypopulation.de,PROXY +- DOMAIN-SUFFIX,cloudfront.net,PROXY +- DOMAIN-SUFFIX,ctitv.com.tw,PROXY +- DOMAIN-SUFFIX,cuhk.edu.hk,PROXY +- DOMAIN-SUFFIX,cusu.hk,PROXY +- DOMAIN-SUFFIX,discuss.com.hk,PROXY +- DOMAIN-SUFFIX,dropboxapi.com,PROXY +- DOMAIN-SUFFIX,duolingo.cn,PROXY +- DOMAIN-SUFFIX,edditstatic.com,PROXY +- DOMAIN-SUFFIX,flickriver.com,PROXY +- DOMAIN-SUFFIX,focustaiwan.tw,PROXY +- DOMAIN-SUFFIX,free.fr,PROXY +- DOMAIN-SUFFIX,ftchinese.com,PROXY +- DOMAIN-SUFFIX,gigacircle.com,PROXY +- DOMAIN-SUFFIX,hk-pub.com,PROXY +- DOMAIN-SUFFIX,hosting.co.uk,PROXY +- DOMAIN-SUFFIX,hwcdn.net,PROXY +- DOMAIN-SUFFIX,iphone4hongkong.com,PROXY +- DOMAIN-SUFFIX,iphonetaiwan.org,PROXY +- DOMAIN-SUFFIX,iptvbin.com,PROXY +- DOMAIN-SUFFIX,jtvnw.net,PROXY +- DOMAIN-SUFFIX,linksalpha.com,PROXY +- DOMAIN-SUFFIX,manyvids.com,PROXY +- DOMAIN-SUFFIX,myactimes.com,PROXY +- DOMAIN-SUFFIX,newsblur.com,PROXY +- DOMAIN-SUFFIX,now.im,PROXY +- DOMAIN-SUFFIX,redditlist.com,PROXY +- DOMAIN-SUFFIX,signal.org,PROXY +- DOMAIN-SUFFIX,sparknotes.com,PROXY +- DOMAIN-SUFFIX,streetvoice.com,PROXY +- DOMAIN-SUFFIX,ttvnw.net,PROXY +- DOMAIN-SUFFIX,tv.com,PROXY +- DOMAIN-SUFFIX,twitchcdn.net,PROXY +- DOMAIN-SUFFIX,typepad.com,PROXY +- DOMAIN-SUFFIX,udnbkk.com,PROXY +- DOMAIN-SUFFIX,whispersystems.org,PROXY +- DOMAIN-SUFFIX,wikia.com,PROXY +- DOMAIN-SUFFIX,wn.com,PROXY +- DOMAIN-SUFFIX,wolframalpha.com,PROXY +- DOMAIN-SUFFIX,x-art.com,PROXY +- DOMAIN-SUFFIX,yimg.com,PROXY + +# China Area Network +# > App Store Download || iBooks Sample +- DOMAIN-SUFFIX,itunes.apple.com,Apple +# > Apple Music +- DOMAIN,aod.itunes.apple.com,Apple +- DOMAIN,audio.itunes.apple.com,Apple +- DOMAIN,audio-ssl.itunes.apple.com,Apple +- DOMAIN,streamingaudio.itunes.apple.com,Apple +# > Apple TV +- DOMAIN,ocvideo.apple.com,Apple +# > Apple News and Apple Map TOMTOM Version +- DOMAIN,gspe1-ssl.ls.apple.com,Apple +# PROCESS-NAME,News,Apple +# > Apple +- DOMAIN-SUFFIX,aaplimg.com,Apple +- DOMAIN-SUFFIX,apple.co,DIRECT +- DOMAIN-SUFFIX,apple.com,DIRECT +- DOMAIN-SUFFIX,appstore.com,DIRECT +- DOMAIN-SUFFIX,cdn-apple.com,Apple +- DOMAIN-SUFFIX,crashlytics.com,DIRECT +- DOMAIN-SUFFIX,icloud.com,DIRECT +- DOMAIN-SUFFIX,icloud-content.com,Apple +- DOMAIN-SUFFIX,me.com,DIRECT +- DOMAIN-SUFFIX,mzstatic.com,DIRECT +# > Microsoft +- DOMAIN-SUFFIX,microsoft.com,DIRECT +- DOMAIN-SUFFIX,msecnd.net,DIRECT +- DOMAIN-SUFFIX,msedge.net,DIRECT +- DOMAIN-SUFFIX,office.com,DIRECT +- DOMAIN-SUFFIX,outlookmobile.com,DIRECT +- DOMAIN-SUFFIX,sfx.ms,DIRECT +- DOMAIN-SUFFIX,sharepoint.com,DIRECT +- DOMAIN-SUFFIX,s-microsoft.com,DIRECT +- DOMAIN-SUFFIX,visualstudio.com,DIRECT +- DOMAIN-SUFFIX,windows.net,DIRECT +- DOMAIN-KEYWORD,officecdn,DIRECT +# > Blizzard +- DOMAIN-SUFFIX,blizzard.com,DIRECT +- DOMAIN-SUFFIX,battle.net,DIRECT +- DOMAIN,blzddist1-a.akamaihd.net,DIRECT +# > Steam +- DOMAIN-SUFFIX,steampowered.com,DIRECT +- DOMAIN-SUFFIX,steam-chat.com,DIRECT +- DOMAIN-KEYWORD,steamcdn,DIRECT +- DOMAIN-KEYWORD,steamstore,DIRECT +- DOMAIN-KEYWORD,steamuserimages,DIRECT +- DOMAIN-KEYWORD,steambroadcast,DIRECT +# > Tencent +# USER-AGENT,MicroMessenger%20Client,DIRECT +# USER-AGENT,WeChat*,DIRECT +- DOMAIN-SUFFIX,qq.com,DIRECT +- DOMAIN-SUFFIX,tencent.com,DIRECT +# > Alibaba +- DOMAIN-SUFFIX,alibaba.com,DIRECT +- DOMAIN-SUFFIX,alicdn.com,DIRECT +- DOMAIN-SUFFIX,alikunlun.com,DIRECT +- DOMAIN-SUFFIX,alipay.com,DIRECT +- DOMAIN-SUFFIX,amap.com,DIRECT +- DOMAIN-SUFFIX,dingtalk.com,DIRECT +- DOMAIN-SUFFIX,taobao.com,DIRECT +- DOMAIN-SUFFIX,tmall.com,DIRECT +- DOMAIN-SUFFIX,tmall.hk,DIRECT +- DOMAIN-SUFFIX,ykimg.com,DIRECT +- DOMAIN-SUFFIX,youku.com,DIRECT +- DOMAIN-SUFFIX,xiami.com,DIRECT +- DOMAIN-SUFFIX,xiami.net,DIRECT +# > NetEase +- DOMAIN-SUFFIX,163.com,DIRECT +- DOMAIN-SUFFIX,126.net,DIRECT +- DOMAIN-SUFFIX,127.net,DIRECT +- DOMAIN-SUFFIX,163yun.com,DIRECT +- DOMAIN-SUFFIX,lofter.com,DIRECT +# > Sohu +- DOMAIN-SUFFIX,sohu.com,DIRECT +- DOMAIN-SUFFIX,v-56.com,DIRECT +# > Sina +- DOMAIN-SUFFIX,weibo.com,DIRECT +# > JD +- DOMAIN-SUFFIX,jd.com,DIRECT +- DOMAIN-SUFFIX,jd.hk,DIRECT +- DOMAIN-SUFFIX,360buyimg.com,DIRECT +# > MI +- DOMAIN-SUFFIX,duokan.com,DIRECT +- DOMAIN-SUFFIX,mi-img.com,DIRECT +- DOMAIN-SUFFIX,miui.com,DIRECT +- DOMAIN-SUFFIX,xiaomi.com,DIRECT +# > bilibili +- DOMAIN-SUFFIX,acgvideo.com,DIRECT +- DOMAIN-SUFFIX,bilibili.com,DIRECT +- DOMAIN-SUFFIX,hdslb.com,DIRECT +# > iQiyi +- DOMAIN-SUFFIX,iqiyi.com,DIRECT +- DOMAIN-SUFFIX,iqiyipic.com,DIRECT +- DOMAIN-SUFFIX,71.am.com,DIRECT +# > HunanTV +- DOMAIN-SUFFIX,hitv.com,DIRECT +- DOMAIN-SUFFIX,mgtv.com,DIRECT +# > Meitu +- DOMAIN-SUFFIX,meitu.com,DIRECT +- DOMAIN-SUFFIX,meitudata.com,DIRECT +- DOMAIN-SUFFIX,meipai.com,DIRECT +# > YYeTs +- DOMAIN-SUFFIX,jstucdn.com,DIRECT +- DOMAIN-SUFFIX,zimuzu.io,DIRECT +- DOMAIN-SUFFIX,zimuzu.tv,DIRECT +- DOMAIN-SUFFIX,zmz2019.com,DIRECT +- DOMAIN-SUFFIX,zmzapi.com,DIRECT +- DOMAIN-SUFFIX,zmzapi.net,DIRECT +- DOMAIN-SUFFIX,zmzfile.com,DIRECT +# > 蛋蛋赞 +- DOMAIN-SUFFIX,baduziyuan.com,DIRECT +- DOMAIN-SUFFIX,com-hs-hkdy.com,DIRECT +- DOMAIN-SUFFIX,czybjz.com,DIRECT +- DOMAIN-SUFFIX,dandanzan.com,DIRECT +- DOMAIN-SUFFIX,fjhps.com,DIRECT +- DOMAIN-SUFFIX,kuyunbo.club,DIRECT +# > Baidu +- DOMAIN-SUFFIX,baidu.com,DIRECT +- DOMAIN-SUFFIX,baidubcr.com,DIRECT +- DOMAIN-SUFFIX,bdstatic.com,DIRECT +# > ChinaNet +- DOMAIN-SUFFIX,21cn.com,DIRECT +# > ByteDance +- DOMAIN-SUFFIX,pstatp.com,DIRECT +- DOMAIN-SUFFIX,snssdk.com,DIRECT +- DOMAIN-SUFFIX,toutiao.com,DIRECT +# > 360 +- DOMAIN-SUFFIX,qhres.com,DIRECT +- DOMAIN-SUFFIX,qhimg.com,DIRECT +# > Akamai +- DOMAIN-SUFFIX,akadns.net,DIRECT +# - DOMAIN-SUFFIX,akamai.net,DIRECT +# - DOMAIN-SUFFIX,akamaiedge.net,DIRECT +# - DOMAIN-SUFFIX,akamaihd.net,DIRECT +# - DOMAIN-SUFFIX,akamaistream.net,DIRECT +# - DOMAIN-SUFFIX,akamaized.net,DIRECT +# > ChinaNetCenter +- DOMAIN-SUFFIX,chinanetcenter.com,DIRECT +- DOMAIN-SUFFIX,wangsu.com,DIRECT +# > IP Query +- DOMAIN-SUFFIX,ipip.net,DIRECT +- DOMAIN-SUFFIX,ip.la,DIRECT +- DOMAIN-SUFFIX,ip-cdn.com,DIRECT +- DOMAIN-SUFFIX,ipv6-test.com,DIRECT +- DOMAIN-SUFFIX,test-ipv6.com,DIRECT +- DOMAIN-SUFFIX,whatismyip.com,DIRECT +- DOMAIN,ip.bjango.com,DIRECT +# > Speed Test +# - DOMAIN-SUFFIX,speedtest.net,DIRECT +# - DOMAIN-SUFFIX,netspeedtestmaster.com,DIRECT +- DOMAIN,speedtest.macpaw.com,DIRECT +# > Other +- DOMAIN-SUFFIX,cn,DIRECT +- DOMAIN-SUFFIX,cailianpress.com,DIRECT +- DOMAIN-SUFFIX,chushou.tv,DIRECT +- DOMAIN-SUFFIX,cloudflare.com,DIRECT +- DOMAIN-SUFFIX,cmbchina.com,DIRECT +- DOMAIN-SUFFIX,cmbimg.com,DIRECT +- DOMAIN-SUFFIX,dfcfw.com,DIRECT +- DOMAIN-SUFFIX,doubanio.com,DIRECT +- DOMAIN-SUFFIX,douyu.com,DIRECT +- DOMAIN-SUFFIX,dxycdn.com,DIRECT +- DOMAIN-SUFFIX,eastmoney.com,DIRECT +- DOMAIN-SUFFIX,futunn.com,DIRECT +- DOMAIN-SUFFIX,geilicdn.com,DIRECT +- DOMAIN-SUFFIX,hicloud.com,DIRECT +- DOMAIN-SUFFIX,infinitynewtab.com,DIRECT +- DOMAIN-SUFFIX,ithome.com,DIRECT +- DOMAIN-SUFFIX,kkmh.com,DIRECT +- DOMAIN-SUFFIX,ksosoft.com,DIRECT +- DOMAIN-SUFFIX,maoyun.tv,DIRECT +- DOMAIN-SUFFIX,meituan.net,DIRECT +- DOMAIN-SUFFIX,mobike.com,DIRECT +- DOMAIN-SUFFIX,mubu.com,DIRECT +- DOMAIN-SUFFIX,myzaker.com,DIRECT +- DOMAIN-SUFFIX,paypal.com,DIRECT +- DOMAIN-SUFFIX,paypalobjects.com,DIRECT +- DOMAIN-SUFFIX,ruguoapp.com,DIRECT +- DOMAIN-SUFFIX,smzdm.com,DIRECT +- DOMAIN-SUFFIX,snapdrop.net,DIRECT +- DOMAIN-SUFFIX,sogou.com,DIRECT +- DOMAIN-SUFFIX,teamviewer.com,DIRECT +- DOMAIN-SUFFIX,tianyancha.com,DIRECT +- DOMAIN-SUFFIX,udacity.com,DIRECT +- DOMAIN-SUFFIX,weather.com,DIRECT +- DOMAIN-SUFFIX,weidian.com,DIRECT +- DOMAIN-SUFFIX,xmcdn.com,DIRECT +- DOMAIN-SUFFIX,yangkeduo.com,DIRECT +- DOMAIN-SUFFIX,zhangzishi.cc,DIRECT +- DOMAIN-SUFFIX,zhihu.com,DIRECT +- DOMAIN-SUFFIX,zhimg.com,DIRECT +- DOMAIN-SUFFIX,zhuihd.com,DIRECT +# USER-AGENT,NeteaseMusic*,DIRECT +# USER-AGENT,%E7%BD%91%E6%98%93%E4%BA%91%E9%9F%B3%E4%B9%90*,DIRECT + +# Local Area Network +- DOMAIN-SUFFIX,local,DIRECT +- IP-CIDR,192.168.0.0/16,DIRECT +- IP-CIDR,10.0.0.0/8,DIRECT +- IP-CIDR,172.16.0.0/12,DIRECT +- IP-CIDR,127.0.0.0/8,DIRECT +- IP-CIDR,100.64.0.0/10,DIRECT + +# (Extra IP-CIRD) +# > Google +- IP-CIDR,35.190.247.0/24,PROXY +- IP-CIDR,64.233.160.0/19,PROXY +- IP-CIDR,66.102.0.0/20,PROXY +- IP-CIDR,66.249.80.0/20,PROXY +- IP-CIDR,72.14.192.0/18,PROXY +- IP-CIDR,74.125.0.0/16,PROXY +- IP-CIDR,108.177.8.0/21,PROXY +- IP-CIDR,172.217.0.0/16,PROXY +- IP-CIDR,173.194.0.0/16,PROXY +- IP-CIDR,209.85.128.0/17,PROXY +- IP-CIDR,216.58.192.0/19,PROXY +- IP-CIDR,216.239.32.0/19,PROXY +# > Facebook +- IP-CIDR,31.13.24.0/21,PROXY +- IP-CIDR,31.13.64.0/18,PROXY +- IP-CIDR,45.64.40.0/22,PROXY +- IP-CIDR,66.220.144.0/20,PROXY +- IP-CIDR,69.63.176.0/20,PROXY +- IP-CIDR,69.171.224.0/19,PROXY +- IP-CIDR,74.119.76.0/22,PROXY +- IP-CIDR,103.4.96.0/22,PROXY +- IP-CIDR,129.134.0.0/17,PROXY +- IP-CIDR,157.240.0.0/17,PROXY +- IP-CIDR,173.252.64.0/19,PROXY +- IP-CIDR,173.252.96.0/19,PROXY +- IP-CIDR,179.60.192.0/22,PROXY +- IP-CIDR,185.60.216.0/22,PROXY +- IP-CIDR,204.15.20.0/22,PROXY +# > Twitter +- IP-CIDR,69.195.160.0/19,PROXY +- IP-CIDR,104.244.42.0/21,PROXY +- IP-CIDR,192.133.76.0/22,PROXY +- IP-CIDR,199.16.156.0/22,PROXY +- IP-CIDR,199.59.148.0/22,PROXY +- IP-CIDR,199.96.56.0/21,PROXY +- IP-CIDR,202.160.128.0/22,PROXY +- IP-CIDR,209.237.192.0/19,PROXY + +# GeoIP China +- GEOIP,CN,DIRECT + +- MATCH,Final \ No newline at end of file diff --git a/package/cnsztl/luci-app-openclash/files/etc/openclash/ConnersHua_return.yml b/package/cnsztl/luci-app-openclash/files/etc/openclash/ConnersHua_return.yml new file mode 100755 index 0000000000..cd9299a22b --- /dev/null +++ b/package/cnsztl/luci-app-openclash/files/etc/openclash/ConnersHua_return.yml @@ -0,0 +1,79 @@ +Rule: +##source:ConnersHua_return +# (Video) +# AcFun +# USER-AGENT,AcFun*,PROXY +- DOMAIN-SUFFIX,acfun.cn,PROXY +- DOMAIN-SUFFIX,acfun.com,PROXY +- DOMAIN-SUFFIX,aixifan.com,PROXY +# > bilibili +# USER-AGENT,bili-universal,PROXY +# USER-AGENT,Bilibili*,PROXY +- DOMAIN-SUFFIX,acgvideo.com,PROXY +- DOMAIN-SUFFIX,bilibili.com,PROXY +- DOMAIN-SUFFIX,hdslb.com,PROXY +# > HunanTV +# USER-AGENT,MGTV*,PROXY +- DOMAIN-SUFFIX,hitv.com,PROXY +- DOMAIN-SUFFIX,hunantv.com,PROXY +- DOMAIN-SUFFIX,mgtv.com,PROXY +# > Migu +# USER-AGENT,MiguVideo*,PROXY +# USER-AGENT,%E5%92%AA%E5%92%95%E8%A7%86%E9%A2%91,PROXY +- DOMAIN-SUFFIX,cmvideo.cn,PROXY +- DOMAIN-SUFFIX,migu.cn,PROXY +- DOMAIN-SUFFIX,miguvideo.com,PROXY +# > iQiyi +# USER-AGENT,iQiYiPhoneVideo,PROXY +# USER-AGENT,PPStream,PROXY +# USER-AGENT,QIYIVideo,PROXY +# USER-AGENT,QYPlayer,PROXY +- DOMAIN-SUFFIX,iqiyi.com,PROXY +- DOMAIN-SUFFIX,iqiyipic.com,PROXY +- DOMAIN-SUFFIX,qy.net,PROXY +# > Sohu +- DOMAIN-SUFFIX,sohu.com,PROXY +- DOMAIN-SUFFIX,sohu.com.cn,PROXY +- DOMAIN-SUFFIX,itc.cn,PROXY +- DOMAIN-SUFFIX,v-56.com,PROXY +# > Tencent +# USER-AGENT,live4iphone*,PROXY +# USER-AGENT,qqlive4iphone*,PROXY +# USER-AGENT,TencentMidasConnect*,PROXY +- DOMAIN-SUFFIX,video.qq.com,PROXY +# > Youku +# USER-AGENT,Youku*,PROXY +# USER-AGENT,%E4%BC%98%E9%85%B7*,PROXY +- DOMAIN-SUFFIX,soku.com,PROXY +- DOMAIN-SUFFIX,youku.com,PROXY +- DOMAIN-SUFFIX,ykimg.com,PROXY + +# (Music) +# > Alibaba +# USER-AGENT,walkman*,PROXY +# USER-AGENT,xiami*,PROXY +- DOMAIN-SUFFIX,xiami.com,PROXY +- DOMAIN-SUFFIX,xiami.net,PROXY +# > Netease +# USER-AGENT,NeteaseMusic*,PROXY +# USER-AGENT,%E7%BD%91%E6%98%93%E4%BA%91%E9%9F%B3%E4%B9%90*,PROXY +- DOMAIN-SUFFIX,music.126.net,PROXY +- DOMAIN-SUFFIX,music.163.com,PROXY +# > Tencent +# USER-AGENT,MOO%E9%9F%B3%E4%B9%90*,PROXY +# USER-AGENT,QQ%E9%9F%B3%E4%B9%90,PROXY +- DOMAIN-SUFFIX,qqmusic.qq.com,PROXY +- DOMAIN-SUFFIX,y.qq.com,PROXY +- DOMAIN,aqqmusic.tc.qq.com,PROXY +# Kugou and Kuwo +- DOMAIN-SUFFIX,kugou.com,PROXY +# USER-AGENT,%E9%85%B7%E6%88%91%E9%9F%B3%E4%B9%90*,PROXY +- DOMAIN-SUFFIX,kuwo.cn,PROXY +- DOMAIN-SUFFIX,koowo.com,PROXY +# > Baidu +# USER-AGENT,baiduyinyue,PROXY +- DOMAIN-SUFFIX,qianqian.com,PROXY + +- GEOIP,CN,PROXY + +- MATCH,DIRECT \ No newline at end of file diff --git a/package/cnsztl/luci-app-openclash/files/etc/openclash/Country.mmdb b/package/cnsztl/luci-app-openclash/files/etc/openclash/Country.mmdb new file mode 100755 index 0000000000..c5260d74f6 Binary files /dev/null and b/package/cnsztl/luci-app-openclash/files/etc/openclash/Country.mmdb differ diff --git a/package/cnsztl/luci-app-openclash/files/etc/openclash/lhie1.yml b/package/cnsztl/luci-app-openclash/files/etc/openclash/lhie1.yml new file mode 100755 index 0000000000..e4c05f9924 --- /dev/null +++ b/package/cnsztl/luci-app-openclash/files/etc/openclash/lhie1.yml @@ -0,0 +1,1503 @@ +Rule: +##source:lhie1 +# (GlobalTV) +# > ABC +- DOMAIN-SUFFIX,edgedatg.com,GlobalTV +- DOMAIN-SUFFIX,go.com,GlobalTV + +# > AbemaTV +- DOMAIN,linear-abematv.akamaized.net,GlobalTV +- DOMAIN-SUFFIX,abema.io,GlobalTV +- DOMAIN-SUFFIX,abema.tv,GlobalTV +- DOMAIN-SUFFIX,akamaized.net,GlobalTV +- DOMAIN-SUFFIX,ameba.jp,GlobalTV +- DOMAIN-SUFFIX,hayabusa.io,GlobalTV + +# > Amazon Prime Video +- DOMAIN-SUFFIX,aiv-cdn.net,GlobalTV +- DOMAIN-SUFFIX,amazonaws.com,GlobalTV +- DOMAIN-SUFFIX,amazonvideo.com,GlobalTV +- DOMAIN-SUFFIX,llnwd.net,GlobalTV + +# > Bahamut +- DOMAIN-SUFFIX,bahamut.com.tw,GlobalTV +- DOMAIN-SUFFIX,gamer.com.tw,GlobalTV +- DOMAIN-SUFFIX,hinet.net,GlobalTV + +# > BBC +- DOMAIN-KEYWORD,bbcfmt,GlobalTV +- DOMAIN-KEYWORD,co.uk,GlobalTV +- DOMAIN-KEYWORD,uk-live,GlobalTV +- DOMAIN-SUFFIX,bbc.co,GlobalTV +- DOMAIN-SUFFIX,bbc.co.uk,GlobalTV +- DOMAIN-SUFFIX,bbc.com,GlobalTV +- DOMAIN-SUFFIX,bbci.co,GlobalTV +- DOMAIN-SUFFIX,bbci.co.uk,GlobalTV + +# > CHOCO TV +- DOMAIN-SUFFIX,chocotv.com.tw,GlobalTV + +# > Epicgames +- DOMAIN-KEYWORD,epicgames,GlobalTV +- DOMAIN-SUFFIX,helpshift.com,GlobalTV + +# > Fox+ +- DOMAIN-KEYWORD,foxplus,GlobalTV +- DOMAIN-SUFFIX,config.fox.com,GlobalTV +- DOMAIN-SUFFIX,emome.net,GlobalTV +- DOMAIN-SUFFIX,fox.com,GlobalTV +- DOMAIN-SUFFIX,foxdcg.com,GlobalTV +- DOMAIN-SUFFIX,foxnow.com,GlobalTV +- DOMAIN-SUFFIX,foxplus.com,GlobalTV +- DOMAIN-SUFFIX,foxplay.com,GlobalTV +- DOMAIN-SUFFIX,ipinfo.io,GlobalTV +- DOMAIN-SUFFIX,mstage.io,GlobalTV +- DOMAIN-SUFFIX,now.com,GlobalTV +- DOMAIN-SUFFIX,theplatform.com,GlobalTV +- DOMAIN-SUFFIX,urlload.net,GlobalTV + +# > HBO && HBO Go +- DOMAIN-SUFFIX,execute-api.ap-southeast-1.amazonaws.com,GlobalTV +- DOMAIN-SUFFIX,hbo.com,GlobalTV +- DOMAIN-SUFFIX,hboasia.com,GlobalTV +- DOMAIN-SUFFIX,hbogo.com,GlobalTV +- DOMAIN-SUFFIX,hbogoasia.hk,GlobalTV + +# > Hulu +- DOMAIN-SUFFIX,happyon.jp,GlobalTV +- DOMAIN-SUFFIX,hulu.com,GlobalTV +- DOMAIN-SUFFIX,huluim.com,GlobalTV +- DOMAIN-SUFFIX,hulustream.com,GlobalTV + +# > Imkan +- DOMAIN-SUFFIX,imkan.tv,GlobalTV + +# > JOOX +- DOMAIN-SUFFIX,joox.com,GlobalTV + +# > MytvSUPER +- DOMAIN-KEYWORD,nowtv100,GlobalTV +- DOMAIN-KEYWORD,rthklive,GlobalTV +- DOMAIN-SUFFIX,mytvsuper.com,GlobalTV +- DOMAIN-SUFFIX,tvb.com,GlobalTV + +# > Netflix +- DOMAIN-SUFFIX,netflix.com,GlobalTV +- DOMAIN-SUFFIX,netflix.net,GlobalTV +- DOMAIN-SUFFIX,nflxext.com,GlobalTV +- DOMAIN-SUFFIX,nflximg.com,GlobalTV +- DOMAIN-SUFFIX,nflximg.net,GlobalTV +- DOMAIN-SUFFIX,nflxso.net,GlobalTV +- DOMAIN-SUFFIX,nflxvideo.net,GlobalTV + +# > Pandora +- DOMAIN-SUFFIX,pandora.com,GlobalTV + +# > Sky GO +- DOMAIN-SUFFIX,sky.com,GlobalTV +- DOMAIN-SUFFIX,skygo.co.nz,GlobalTV + +# > Spotify +- DOMAIN-KEYWORD,spotify,GlobalTV +- DOMAIN-SUFFIX,scdn.co,GlobalTV +- DOMAIN-SUFFIX,spoti.fi,GlobalTV + +# > viuTV +- DOMAIN-SUFFIX,viu.tv,GlobalTV + +# > Youtube +- DOMAIN-KEYWORD,youtube,GlobalTV +- DOMAIN-SUFFIX,googlevideo.com,GlobalTV +- DOMAIN-SUFFIX,gvt2.com,GlobalTV +- DOMAIN-SUFFIX,youtu.be,GlobalTV + +# (AsianTV) +# > Bilibili +- DOMAIN-KEYWORD,bilibili,AsianTV +- DOMAIN-SUFFIX,acg.tv,AsianTV +- DOMAIN-SUFFIX,acgvideo.com,AsianTV +- DOMAIN-SUFFIX,b23.tv,AsianTV +- DOMAIN-SUFFIX,biliapi.com,AsianTV +- DOMAIN-SUFFIX,biliapi.net,AsianTV +- DOMAIN-SUFFIX,bilibili.com,AsianTV +- DOMAIN-SUFFIX,biligame.com,AsianTV +- DOMAIN-SUFFIX,biligame.net,AsianTV +- DOMAIN-SUFFIX,hdslb.com,AsianTV +- DOMAIN-SUFFIX,im9.com,AsianTV + +# > IQIYI +- DOMAIN-KEYWORD,qiyi,AsianTV +- DOMAIN-SUFFIX,qy.net,AsianTV + +# > letv +- DOMAIN-SUFFIX,api.mob.app.letv.com,AsianTV + +# > NeteaseMusic +- DOMAIN-SUFFIX,163yun.com,AsianTV +- DOMAIN-SUFFIX,music.126.net,AsianTV +- DOMAIN-SUFFIX,music.163.com,AsianTV + +# > Tencent Video +- DOMAIN-SUFFIX,vv.video.qq.com,AsianTV + +# AdBlock Block +# > Exclusions +- DOMAIN,analytics.google.com,Proxy +- DOMAIN,analyticsinsights-pa.googleapis.com,Proxy +- DOMAIN,analyticsreporting.googleapis.com,Proxy +- DOMAIN-SUFFIX,vd.l.qq.com,Domestic +# > General +- DOMAIN-KEYWORD,adservice,AdBlock +- DOMAIN-KEYWORD,analytics,AdBlock +- DOMAIN-KEYWORD,analysis,AdBlock + +- DOMAIN-SUFFIX,3lift.com,AdBlock +- DOMAIN-SUFFIX,4006825178.com,AdBlock +- DOMAIN-SUFFIX,51.la,AdBlock +- DOMAIN-SUFFIX,550tg.com,AdBlock +- DOMAIN-SUFFIX,56txs4.com,AdBlock +- DOMAIN-SUFFIX,ad373.com,AdBlock +- DOMAIN-SUFFIX,ad4screen.com,AdBlock +- DOMAIN-SUFFIX,ad-brix.com,AdBlock +- DOMAIN-SUFFIX,adcolony.com,AdBlock +- DOMAIN-SUFFIX,adform.net,AdBlock +- DOMAIN-SUFFIX,adinall.com,AdBlock +- DOMAIN-SUFFIX,adinfuse.com,AdBlock +- DOMAIN-SUFFIX,adjust.com,AdBlock +- DOMAIN-SUFFIX,adjust.io,AdBlock +- DOMAIN-SUFFIX,adkmob.com,AdBlock +- DOMAIN-SUFFIX,adlefee.com,AdBlock +- DOMAIN-SUFFIX,admantx.com,AdBlock +- DOMAIN-SUFFIX,admarketplace.net,AdBlock +- DOMAIN-SUFFIX,admarvel.com,AdBlock +- DOMAIN-SUFFIX,admaster.com.cn,AdBlock +- DOMAIN-SUFFIX,admob.com,AdBlock +- DOMAIN-SUFFIX,adnow.com,AdBlock +- DOMAIN-SUFFIX,adnxs.com,AdBlock +- DOMAIN-SUFFIX,adsafeprotected.com,AdBlock +- DOMAIN-SUFFIX,adsota.com,AdBlock +- DOMAIN-SUFFIX,ads-pixiv.net,AdBlock +- DOMAIN-SUFFIX,adsrvr.org,AdBlock +- DOMAIN-SUFFIX,ads-twitter.com,AdBlock +- DOMAIN-SUFFIX,adswizz.com,AdBlock +- DOMAIN-SUFFIX,adsymptotic.com,AdBlock +- DOMAIN-SUFFIX,adtechus.com,AdBlock +- DOMAIN-SUFFIX,adtilt.com,AdBlock +- DOMAIN-SUFFIX,adtrue.com,AdBlock +- DOMAIN-SUFFIX,AdBlock.com,AdBlock +- DOMAIN-SUFFIX,advertnative.com,AdBlock +- DOMAIN-SUFFIX,adview.cn,AdBlock +- DOMAIN-SUFFIX,adxpansion.com,AdBlock +- DOMAIN-SUFFIX,adxvip.com,AdBlock +- DOMAIN-SUFFIX,aerserv.com,AdBlock +- DOMAIN-SUFFIX,agkn.com,AdBlock +- DOMAIN-SUFFIX,alipaylog.com,AdBlock +- DOMAIN-SUFFIX,amazon-adsystem.com,AdBlock +- DOMAIN-SUFFIX,analysys.cn,AdBlock +- DOMAIN-SUFFIX,app-adforce.jp,AdBlock +- DOMAIN-SUFFIX,appads.com,AdBlock +- DOMAIN-SUFFIX,appboy.com,AdBlock +- DOMAIN-SUFFIX,appier.net,AdBlock +- DOMAIN-SUFFIX,applift.com,AdBlock +- DOMAIN-SUFFIX,applovin.com,AdBlock +- DOMAIN-SUFFIX,appnext.com,AdBlock +- DOMAIN-SUFFIX,appodealx.com,AdBlock +- DOMAIN-SUFFIX,appsee.com,AdBlock +- DOMAIN-SUFFIX,appsflyer.com,AdBlock +- DOMAIN-SUFFIX,apptentive.com,AdBlock +- DOMAIN-SUFFIX,apptornado.com,AdBlock +- DOMAIN-SUFFIX,atdmt.com,AdBlock +- DOMAIN-SUFFIX,atwola.com,AdBlock +- DOMAIN-SUFFIX,betrad.com,AdBlock +- DOMAIN-SUFFIX,bidswitch.com,AdBlock +- DOMAIN-SUFFIX,bjytgw.com,AdBlock +- DOMAIN-SUFFIX,bttrack.com,AdBlock +- DOMAIN-SUFFIX,bxmns.com,AdBlock +- DOMAIN-SUFFIX,cappumedia.com,AdBlock +- DOMAIN-SUFFIX,celtra.com,AdBlock +- DOMAIN-SUFFIX,cferw.com,AdBlock +- DOMAIN-SUFFIX,chartbeat.net,AdBlock +- DOMAIN-SUFFIX,chartboost.com,AdBlock +- DOMAIN-SUFFIX,chitika.com,AdBlock +- DOMAIN-SUFFIX,clickhubs.com,AdBlock +- DOMAIN-SUFFIX,clickintext.com,AdBlock +- DOMAIN-SUFFIX,clickintext.net,AdBlock +- DOMAIN-SUFFIX,cloudmobi.net,AdBlock +- DOMAIN-SUFFIX,cnadnet.com,AdBlock +- DOMAIN-SUFFIX,cnzz.com,AdBlock +- DOMAIN-SUFFIX,cocounion.com,AdBlock +- DOMAIN-SUFFIX,conversantmedia.com,AdBlock +- DOMAIN-SUFFIX,conviva.com,AdBlock +- DOMAIN-SUFFIX,criteo.com,AdBlock +- DOMAIN-SUFFIX,crwdcntrl.net,AdBlock +- DOMAIN-SUFFIX,ctrmi.com,AdBlock +- DOMAIN-SUFFIX,demdex.net,AdBlock +- DOMAIN-SUFFIX,dianomi.com,AdBlock +- DOMAIN-SUFFIX,digitru.st,AdBlock +- DOMAIN-SUFFIX,dtscout.com,AdBlock +- DOMAIN-SUFFIX,duapps.com,AdBlock +- DOMAIN-SUFFIX,effectivemeasure.net,AdBlock +- DOMAIN-SUFFIX,endpo.in,AdBlock +- DOMAIN-SUFFIX,eum-appdynamics.com,AdBlock +- DOMAIN-SUFFIX,exoclick.com,AdBlock +- DOMAIN-SUFFIX,exosrv.com,AdBlock +- DOMAIN-SUFFIX,exponential.com,AdBlock +- DOMAIN-SUFFIX,exposebox.com,AdBlock +- DOMAIN-SUFFIX,eyeota.net,AdBlock +- DOMAIN-SUFFIX,eyeviewads.com,AdBlock +- DOMAIN-SUFFIX,flurry.com,AdBlock +- DOMAIN-SUFFIX,fwmrm.net,AdBlock +- DOMAIN-SUFFIX,getrockerbox.com,AdBlock +- DOMAIN-SUFFIX,go2cloud.org,AdBlock +- DOMAIN-SUFFIX,go-mpulse.net,AdBlock +- DOMAIN-SUFFIX,gowadogo.com,AdBlock +- DOMAIN-SUFFIX,growingio.com,AdBlock +- DOMAIN-SUFFIX,gwallet.com,AdBlock +- DOMAIN-SUFFIX,i2000.xyz,AdBlock +- DOMAIN-SUFFIX,igexin.com,AdBlock +- DOMAIN-SUFFIX,i-mobile.co.jp,AdBlock +- DOMAIN-SUFFIX,imrworldwide.com,AdBlock +- DOMAIN-SUFFIX,indexww.com,AdBlock +- DOMAIN-SUFFIX,inmobi.cn,AdBlock +- DOMAIN-SUFFIX,inmobi.com,AdBlock +- DOMAIN-SUFFIX,instabug.com,AdBlock +- DOMAIN-SUFFIX,irs01.com,AdBlock +- DOMAIN-SUFFIX,juicyads.com,AdBlock +- DOMAIN-SUFFIX,kejet.net,AdBlock +- DOMAIN-SUFFIX,knlob.com,AdBlock +- DOMAIN-SUFFIX,kochava.com,AdBlock +- DOMAIN-SUFFIX,koolmediaoffers.com,AdBlock +- DOMAIN-SUFFIX,krxd.net,AdBlock +- DOMAIN-SUFFIX,leadzu.com,AdBlock +- DOMAIN-SUFFIX,leanplum.com,AdBlock +- DOMAIN-SUFFIX,lenzmx.com,AdBlock +- DOMAIN-SUFFIX,lifestreet.com,AdBlock +- DOMAIN-SUFFIX,lifestreetmedia.com,AdBlock +- DOMAIN-SUFFIX,ligatus.com,AdBlock +- DOMAIN-SUFFIX,lnk0.com,AdBlock +- DOMAIN-SUFFIX,luomi.com,AdBlock +- DOMAIN-SUFFIX,madserving.com,AdBlock +- DOMAIN-SUFFIX,mathtag.com,AdBlock +- DOMAIN-SUFFIX,media.net,AdBlock +- DOMAIN-SUFFIX,medialytics.com,AdBlock +- DOMAIN-SUFFIX,metalex.io,AdBlock +- DOMAIN-SUFFIX,mfadsrvr.com,AdBlock +- DOMAIN-SUFFIX,mgid.com,AdBlock +- DOMAIN-SUFFIX,miaozhen.com,AdBlock +- DOMAIN-SUFFIX,moatads.com,AdBlock +- DOMAIN-SUFFIX,mobileapptracking.com,AdBlock +- DOMAIN-SUFFIX,mobiw.com,AdBlock +- DOMAIN-SUFFIX,mojiva.com,AdBlock +- DOMAIN-SUFFIX,mopub.com,AdBlock +- DOMAIN-SUFFIX,mparticle.com,AdBlock +- DOMAIN-SUFFIX,mxpnl.com,AdBlock +- DOMAIN-SUFFIX,mybest.app,AdBlock +- DOMAIN-SUFFIX,mydas.mobi,AdBlock +- DOMAIN-SUFFIX,nexage.com,AdBlock +- DOMAIN-SUFFIX,nr-data.net,AdBlock +- DOMAIN-SUFFIX,offerstrack.net,AdBlock +- DOMAIN-SUFFIX,omtrdc.net,AdBlock +- DOMAIN-SUFFIX,outbrain.com,AdBlock +- DOMAIN-SUFFIX,parsely.com,AdBlock +- DOMAIN-SUFFIX,peak-adx.com,AdBlock +- DOMAIN-SUFFIX,personaly.click,AdBlock +- DOMAIN-SUFFIX,popads.com,AdBlock +- DOMAIN-SUFFIX,popads.net,AdBlock +- DOMAIN-SUFFIX,propellerads.com,AdBlock +- DOMAIN-SUFFIX,pubnative.net,AdBlock +- DOMAIN-SUFFIX,qchannel01.cn,AdBlock +- DOMAIN-SUFFIX,qualtrics.com,AdBlock +- DOMAIN-SUFFIX,quantserve.com,AdBlock +- DOMAIN-SUFFIX,quixdtrk.com,AdBlock +- DOMAIN-SUFFIX,rayjump.com,AdBlock +- DOMAIN-SUFFIX,rubiconproject.com,AdBlock +- DOMAIN-SUFFIX,scorecardresearch.com,AdBlock +- DOMAIN-SUFFIX,serving-sys.com,AdBlock +- DOMAIN-SUFFIX,simplepath.com,AdBlock +- DOMAIN-SUFFIX,skimresources.com,AdBlock +- DOMAIN-SUFFIX,smardroid.com,AdBlock +- DOMAIN-SUFFIX,smartadserver.com,AdBlock +- DOMAIN-SUFFIX,snnd.co,AdBlock +- DOMAIN-SUFFIX,sonobi.com,AdBlock +- DOMAIN-SUFFIX,starmobs.com,AdBlock +- DOMAIN-SUFFIX,startappexchange.com,AdBlock +- DOMAIN-SUFFIX,startappservice.com,AdBlock +- DOMAIN-SUFFIX,storygize.net,AdBlock +- DOMAIN-SUFFIX,summerhamster.com,AdBlock +- DOMAIN-SUFFIX,supersonicads.com,AdBlock +- DOMAIN-SUFFIX,taboola.com,AdBlock +- DOMAIN-SUFFIX,tagtic.cn,AdBlock +- DOMAIN-SUFFIX,talkingdata.com,AdBlock +- DOMAIN-SUFFIX,tango-deg.com,AdBlock +- DOMAIN-SUFFIX,tanv.com,AdBlock +- DOMAIN-SUFFIX,tanx.com,AdBlock +- DOMAIN-SUFFIX,tapad.com,AdBlock +- DOMAIN-SUFFIX,taplytics.com,AdBlock +- DOMAIN-SUFFIX,taptica.com,AdBlock +- DOMAIN-SUFFIX,testplus.cn,AdBlock +- DOMAIN-SUFFIX,trackclickers.com,AdBlock +- DOMAIN-SUFFIX,trafficjunky.net,AdBlock +- DOMAIN-SUFFIX,trustx.org,AdBlock +- DOMAIN-SUFFIX,tuanxue360.net,AdBlock +- DOMAIN-SUFFIX,turn.com,AdBlock +- DOMAIN-SUFFIX,uberads.com,AdBlock +- DOMAIN-SUFFIX,udrig.com,AdBlock +- DOMAIN-SUFFIX,upcpi.com,AdBlock +- DOMAIN-SUFFIX,urbanairship.com,AdBlock +- DOMAIN-SUFFIX,usebutton.com,AdBlock +- DOMAIN-SUFFIX,voiceads.cn,AdBlock +- DOMAIN-SUFFIX,vrtcal.com,AdBlock +- DOMAIN-SUFFIX,vserv.mobi,AdBlock +- DOMAIN-SUFFIX,vungle.com,AdBlock +- DOMAIN-SUFFIX,webspectator.com,AdBlock +- DOMAIN-SUFFIX,xadchina.cn,AdBlock +- DOMAIN-SUFFIX,xdrig.com,AdBlock +- DOMAIN-SUFFIX,yldbt.com,AdBlock +- DOMAIN-SUFFIX,yllix.com,AdBlock +- DOMAIN-SUFFIX,ymtracking.com,AdBlock + +- DOMAIN-SUFFIX,ad.daum.net,AdBlock +- DOMAIN-SUFFIX,track.xiachufang.com,AdBlock +- DOMAIN,log.umsns.com,AdBlock +- DOMAIN,log.snssdk.com,AdBlock +- DOMAIN,toblog.snssdk.com,AdBlock +- DOMAIN,wgo.mmstat.com,AdBlock +- DOMAIN,report.jpush.cn,AdBlock +- DOMAIN,static.jpush.cn,AdBlock +- DOMAIN,stats.jpush.cn,AdBlock +- DOMAIN,stats.umsns.com,AdBlock +- DOMAIN,s0.2mdn.net,AdBlock +- DOMAIN,appnext.hs.llnwd.net,AdBlock +- DOMAIN,appnext-a.akamaihd.net,AdBlock + +- DOMAIN,abema-adx.ameba.jp,AdBlock +- DOMAIN,ad.12306.cn,AdBlock +- DOMAIN,ad.caiyunapp.com,AdBlock +- DOMAIN,ad.huajiao.com,AdBlock +- DOMAIN,ad.hzyoka.com,AdBlock +- DOMAIN,ad.jiemian.com,AdBlock +- DOMAIN,ad.qingting.fm,AdBlock +- DOMAIN,ad-cn.jovcloud.com,AdBlock +- DOMAIN,adsapi.manhuaren.com,AdBlock +- DOMAIN,adsdk.dmzj.com,AdBlock +- DOMAIN,ads.daydaycook.com.cn,AdBlock +- DOMAIN,adui.tg.meitu.com,AdBlock +- DOMAIN,adx.hupu.com,AdBlock +- DOMAIN,adxserver.ad.cmvideo.cn,AdBlock +- DOMAIN,app-ad.variflight.com,AdBlock +- DOMAIN,applog.mobike.com,AdBlock +- DOMAIN,ggs.myzaker.com,AdBlock +- DOMAIN,ja.chushou.tv,AdBlock +- DOMAIN,log.b612kaji.com,AdBlock +- DOMAIN,log.star.ele.me,AdBlock +- DOMAIN,log.voicecloud.cn,AdBlock +- DOMAIN,log.ys7.com,AdBlock +- DOMAIN,logs.chelaile.net.cn,AdBlock +- DOMAIN,mopnativeadv.037201.com,AdBlock +- DOMAIN,nativeadv.dftoutiao.com,AdBlock +- DOMAIN,optimus-ads.amap.com,AdBlock +- DOMAIN,static.vuevideo.net,AdBlock +- DOMAIN,sugar.zhihu.com,AdBlock +- DOMAIN,track.tiara.daum.net,AdBlock +- DOMAIN,track.tiara.kakao.com,AdBlock +- DOMAIN,trackapp.guahao.cn,AdBlock +- DOMAIN,traffic.mogujie.com,AdBlock +- DOMAIN,wmlog.meituan.com,AdBlock + +# (0~9) +# > 58 +- DOMAIN,adshow.58.com,AdBlock +- DOMAIN,track.58.com,AdBlock +- DOMAIN,tracklog.58.com,AdBlock +# (A) +# > Apple +- DOMAIN-SUFFIX,iadsdk.apple.com,AdBlock +- DOMAIN-SUFFIX,ads.internal.unity3d.com,AdBlock +- DOMAIN-SUFFIX,ads.prd.ie.internal.unity3d.com,AdBlock +- DOMAIN-SUFFIX,unityads.unity3d.com,AdBlock +# > Alibaba +- DOMAIN,acs4baichuan.m.taobao.com,AdBlock +- DOMAIN,adash.m.taobao.com,AdBlock +- DOMAIN,adash.man.aliyuncs.com,AdBlock +- DOMAIN,adashbc.ut.taobao.com,AdBlock +- DOMAIN,adash-c.ut.taobao.com,AdBlock +- DOMAIN,adashxgc.ut.taobao.com,AdBlock +- DOMAIN,adashx4yt.m.taobao.com,AdBlock +- DOMAIN,amdc.m.taobao.com,AdBlock +- DOMAIN,apoll.m.taobao.com,AdBlock +- DOMAIN,nbsdk-baichuan.alicdn.com,AdBlock +- DOMAIN,tunion-api.m.taobao.com,AdBlock +# > AutoHome +- DOMAIN,adProxy.autohome.com.cn,AdBlock +- DOMAIN,rd.autohome.com.cn,AdBlock +- DOMAIN,al.autohome.com.cn,AdBlock +- DOMAIN,applogapi.autohome.com.cn,AdBlock +# (B) +# > Baidu +- DOMAIN-SUFFIX,baidustatic.com,AdBlock +- DOMAIN,afd.baidu.com,AdBlock +- DOMAIN,duclick.baidu.com,AdBlock +- DOMAIN,hm.baidu.com,AdBlock +- DOMAIN,hmma.baidu.com,AdBlock +- DOMAIN,mobads.baidu.com,AdBlock +- DOMAIN,mobads-logs.baidu.com,AdBlock +- DOMAIN,nsclick.baidu.com,AdBlock +- DOMAIN,wn.pos.baidu.com,AdBlock +# > ByteDance +- DOMAIN,applog.musical.ly,AdBlock +- DOMAIN,track.toutiao.com,AdBlock +- DOMAIN,xlog.snssdk.com,AdBlock +- DOMAIN,xlog-va.byteoversea.com,AdBlock +# > BitAuto +- DOMAIN,adx.yiche.com,AdBlock +- DOMAIN,log.ycapp.yiche.com,AdBlock +# > Baicizhan +- DOMAIN,advertise.baicizhan.org,AdBlock +- DOMAIN,advertise.baicizhan.com,AdBlock +# (C) +# > CNTV +- DOMAIN,galaxy.bjcathay.com,AdBlock +- DOMAIN,mdrecv.app.cntvwb.cn,AdBlock +- DOMAIN,sdapprecv.app.cntvwb.cn,AdBlock +- DOMAIN,vdapprecv.app.cntvwb.cn,AdBlock +# > ChinaNet +- DOMAIN,admarket.21cn.com,AdBlock +- DOMAIN,adshows.21cn.com,AdBlock +# (G) +# > Google +- DOMAIN-SUFFIX,doubleclick.net,AdBlock +- DOMAIN-SUFFIX,googleadservices.com,AdBlock +- DOMAIN-SUFFIX,googleadsserving.cn,AdBlock +- DOMAIN-SUFFIX,googlesyndication.com,AdBlock +- DOMAIN-SUFFIX,googletagmanager.com,AdBlock +- DOMAIN-SUFFIX,googletagservices.com,AdBlock +- DOMAIN-SUFFIX,google-analytics.com,AdBlock +# (H) +# > HunanTV +- DOMAIN-SUFFIX,da.mgtv.com,AdBlock +- DOMAIN-SUFFIX,da.hunantv.com,AdBlock +- DOMAIN-SUFFIX,log.hunantv.com,AdBlock +- DOMAIN,log.v2.hunantv.com,AdBlock +- DOMAIN,v2.log.hunantv.com,AdBlock +# (I) +# > iQiyi +- DOMAIN,ifacelog.iqiyi.com,AdBlock +- DOMAIN,mbdlog.iqiyi.com,AdBlock +- DOMAIN,msg.71.am,AdBlock +- DOMAIN,msg.qy.net,AdBlock +- DOMAIN,t7z.cupid.iqiyi.com,AdBlock + +# (K) +# > KuGou and Kuwo +- DOMAIN,adserviceretry.kugou.com,AdBlock +- DOMAIN,ads.service.kugou.com,AdBlock +- DOMAIN,adsfile.bssdlbig.kugou.com,AdBlock +- DOMAIN,log.stat.kugou.com,AdBlock +- DOMAIN,log.web.kugou.com,AdBlock +- DOMAIN,kgmobilestat.kugou.com,AdBlock +- DOMAIN,kgmobilestatbak.kugou.com,AdBlock +- DOMAIN,mobilelog.kugou.com,AdBlock +- DOMAIN,mobilead.kuwo.cn,AdBlock +- DOMAIN,rich.kuwo.cn,AdBlock +# > Kingsoft +- DOMAIN,ad-stat.ksosoft.com,AdBlock +- DOMAIN,img.auction-ads.wpscdn.cn,AdBlock +# (L) +# > Le +- DOMAIN-SUFFIX,webp2p.letv.com,AdBlock +- DOMAIN,ark.letv.com,AdBlock +- DOMAIN,emma-414870e223.huodonghezi.com,AdBlock +- DOMAIN,g3.letv.com,AdBlock +- DOMAIN,n.mark.letv.com,AdBlock +# (M) +# > MI +- DOMAIN-SUFFIX,ad.xiaomi.com,AdBlock +- DOMAIN-SUFFIX,admob.xiaomi.com,AdBlock +- DOMAIN-SUFFIX,ad.intl.xiaomi.com,AdBlock +- DOMAIN-SUFFIX,data.mistat.xiaomi.com,AdBlock +- DOMAIN-SUFFIX,tracking.miui.com,AdBlock +- DOMAIN,adv.sec.miui.com,AdBlock +- DOMAIN,adv.sec.intl.miui.com,AdBlock +- DOMAIN,o2o.api.xiaomi.com,AdBlock +# > Moji +- DOMAIN,ad.api.moji.com,AdBlock +- DOMAIN,adlaunch.moji.com,AdBlock +- DOMAIN,ads.mojicdn.com,AdBlock +- DOMAIN,v1.log.moji.com,AdBlock +- DOMAIN,minfo.wps.cn,AdBlock +# (N) +# > NetEase +- DOMAIN,ad.bn.netease.com,AdBlock +- DOMAIN,ad.yixin.im,AdBlock +- DOMAIN,admusicpic.music.126.net,AdBlock +- DOMAIN,iadmat.nosdn.127.net,AdBlock +- DOMAIN,iadmusicmat.music.126.net,AdBlock +- DOMAIN,iadmusicmatvideo.music.126.net,AdBlock +- DOMAIN,impservice.dictapp.youdao.com,AdBlock +- DOMAIN,impservice.youdao.com,AdBlock +- DOMAIN,log.yex.youdao.com,AdBlock +- DOMAIN,log-yex.youdao.com,AdBlock +- DOMAIN,n.3g.163.com,AdBlock +- DOMAIN,nex.163.com,AdBlock +- DOMAIN,yt-adp.nosdn.127.net,AdBlock +# (P) +# > PPTV +- DOMAIN,ads.aplus.pptv.com,AdBlock +- DOMAIN,asimgs.pplive.cn,AdBlock +- DOMAIN,de.as.pptv.com,AdBlock +# > Photoable +- DOMAIN,regist.fotoable.com,AdBlock +- DOMAIN,cdn.adapi.fotoable.com,AdBlock +# > PeanutWiFiMpass +- DOMAIN,adnew.wifi8.com,AdBlock +- DOMAIN,adfile.wifi8.com,AdBlock +# (S) +# > Sina +- DOMAIN,u1.img.mobile.sina.cn,AdBlock +- DOMAIN,sax.sina.com.cn,AdBlock +- DOMAIN,saxs.sina.com.cn,AdBlock +- DOMAIN,saxn.sina.com.cn,AdBlock +# > Sohu +- DOMAIN-SUFFIX,ads.sohu.com,AdBlock +- DOMAIN-SUFFIX,aty.sohu.com,AdBlock +- DOMAIN,imp.optaim.com,AdBlock +- DOMAIN,v2.reachmax.cn,AdBlock +- DOMAIN,track.sohu.com,AdBlock +- DOMAIN,hui.sohu.com,AdBlock +# (T) +# > Tencent +- DOMAIN-SUFFIX,e.qq.com,AdBlock +- DOMAIN-SUFFIX,gdt.qq.com,AdBlock +- DOMAIN-SUFFIX,rqd.qq.com,AdBlock +- DOMAIN,btrace.qq.com,AdBlock +- DOMAIN,mtrace.qq.com,AdBlock +- DOMAIN,oth.eve.mdt.qq.com,AdBlock +- DOMAIN,pingma.qq.com,AdBlock +- DOMAIN,pingtcss.qq.com,AdBlock +- DOMAIN,splashqqlive.gtimg.com,AdBlock +- DOMAIN,tajs.qq.com,AdBlock +# > The Paper +- DOMAIN,imgadpai.thepaper.cn,AdBlock +- DOMAIN,admonitor.thepaper.cn,AdBlock +# > Thunder +- DOMAIN,adsp.xunlei.com,AdBlock +- DOMAIN,etl.xlmc.sandai.net,AdBlock +# > Tonghuashun +- DOMAIN,adm.10jqka.com.cn,AdBlock +- DOMAIN,stat.10jqka.com.cn,AdBlock +# > Taipingyang +- DOMAIN,ad-analysis.pconline.com.cn,AdBlock +- DOMAIN,iad0ssl.pcauto.com.cn,AdBlock +- DOMAIN,iad0ssl.pconline.com.cn,AdBlock +- DOMAIN,imgad0.pcauto.com.cn,AdBlock +- DOMAIN,imgad0.pconline.com.cn,AdBlock +- DOMAIN,ivy.pchouse.com.cn,AdBlock +# (U) +# > UC +- DOMAIN,adtrack.ucweb.com,AdBlock +- DOMAIN,applogios.uc.cn,AdBlock +- DOMAIN,track.uc.cn,AdBlock +# (W) +# > WiFi Key +- DOMAIN,a.wkanx.com,AdBlock +- DOMAIN,cwx.lianwangtech.com,AdBlock +- DOMAIN,c1wx.lianwangtech.com,AdBlock +# (X) +# > Ximalaya +- DOMAIN,ad.ximalaya.com,AdBlock +- DOMAIN,adse.ximalaya.com,AdBlock +# > Xiaohongshu +- DOMAIN,t-ads.xiaohongshu.com,AdBlock +- DOMAIN,apm-track.xiaohongshu.com,AdBlock +# (Y) +# > Youku +- DOMAIN-SUFFIX,atm.youku.com,AdBlock +- DOMAIN,ad.mobile.youku.com,AdBlock +- DOMAIN,iyes.youku.com,AdBlock +# (Z) +# > ZOL +- DOMAIN,apppv.zol.com.cn,AdBlock +- DOMAIN,pvnapp.zol.com.cn,AdBlock + +# Internet Service Provider AdBlock Protection +- DOMAIN-SUFFIX,17gouwuba.com,AdBlock +- DOMAIN-SUFFIX,189zj.cn,AdBlock +- DOMAIN-SUFFIX,285680.com,AdBlock +- DOMAIN-SUFFIX,3721zh.com,AdBlock +- DOMAIN-SUFFIX,4336wang.cn,AdBlock +- DOMAIN-SUFFIX,51chumoping.com,AdBlock +- DOMAIN-SUFFIX,58mingri.cn,AdBlock +- DOMAIN-SUFFIX,58mingtian.cn,AdBlock +- DOMAIN-SUFFIX,6d63d3.com,AdBlock +- DOMAIN-SUFFIX,91veg.com,AdBlock +- DOMAIN-SUFFIX,9s6q.cn,AdBlock +- DOMAIN-SUFFIX,adsame.com,AdBlock +- DOMAIN-SUFFIX,aiclk.com,AdBlock +- DOMAIN-SUFFIX,akuai.top,AdBlock +- DOMAIN-SUFFIX,atplay.cn,AdBlock +- DOMAIN-SUFFIX,baiwanchuangyi.com,AdBlock +- DOMAIN-SUFFIX,bayimob.com,AdBlock +- DOMAIN-SUFFIX,beerto.cn,AdBlock +- DOMAIN-SUFFIX,beilamusi.com,AdBlock +- DOMAIN-SUFFIX,benshiw.net,AdBlock +- DOMAIN-SUFFIX,bianxianmao.com,AdBlock +- DOMAIN-SUFFIX,bryonypie.com,AdBlock +- DOMAIN-SUFFIX,cishantao.com,AdBlock +- DOMAIN-SUFFIX,cszlks.com,AdBlock +- DOMAIN-SUFFIX,cudaojia.com,AdBlock +- DOMAIN-SUFFIX,dafapromo.com,AdBlock +- DOMAIN-SUFFIX,daitdai.com,AdBlock +- DOMAIN-SUFFIX,dsaeerf.com,AdBlock +- DOMAIN-SUFFIX,dugesheying.com,AdBlock +- DOMAIN-SUFFIX,dv8c1t.cn,AdBlock +- DOMAIN-SUFFIX,erdoscs.com,AdBlock +- DOMAIN-SUFFIX,fan-yong.com,AdBlock +- DOMAIN-SUFFIX,feih.com.cn,AdBlock +- DOMAIN-SUFFIX,fjlqqc.com,AdBlock +- DOMAIN-SUFFIX,fkku194.com,AdBlock +- DOMAIN-SUFFIX,freedrive.cn,AdBlock +- DOMAIN-SUFFIX,gclick.cn,AdBlock +- DOMAIN-SUFFIX,goufanli100.com,AdBlock +- DOMAIN-SUFFIX,gouwubang.com,AdBlock +- DOMAIN-SUFFIX,haoshengtoys.com,AdBlock +- DOMAIN-SUFFIX,ichaosheng.com,AdBlock +- DOMAIN-SUFFIX,ishop789.com,AdBlock +- DOMAIN-SUFFIX,jdkic.com,AdBlock +- DOMAIN-SUFFIX,jiubuhua.com,AdBlock +- DOMAIN-SUFFIX,jwg365.cn,AdBlock +- DOMAIN-SUFFIX,kumihua.com,AdBlock +- DOMAIN-SUFFIX,linktech.cn,AdBlock +- DOMAIN-SUFFIX,ltheanine.cn,AdBlock +- DOMAIN-SUFFIX,maipinshangmao.com,AdBlock +- DOMAIN-SUFFIX,minisplat.cn,AdBlock +- DOMAIN-SUFFIX,mkitgfs.com,AdBlock +- DOMAIN-SUFFIX,mlnbike.com,AdBlock +- DOMAIN-SUFFIX,newapi.com,AdBlock +- DOMAIN-SUFFIX,pinzhitmall.com,AdBlock +- DOMAIN-SUFFIX,poppyta.com,AdBlock +- DOMAIN-SUFFIX,qichexin.com,AdBlock +- DOMAIN-SUFFIX,qinchugudao.com,AdBlock +- DOMAIN-SUFFIX,quanliyouxi.cn,AdBlock +- DOMAIN-SUFFIX,qutaobi.com,AdBlock +- DOMAIN-SUFFIX,ry51w.cn,AdBlock +- DOMAIN-SUFFIX,sg536.cn,AdBlock +- DOMAIN-SUFFIX,sifubo.cn,AdBlock +- DOMAIN-SUFFIX,sifuce.cn,AdBlock +- DOMAIN-SUFFIX,sifuda.cn,AdBlock +- DOMAIN-SUFFIX,sifufu.cn,AdBlock +- DOMAIN-SUFFIX,sifuge.cn,AdBlock +- DOMAIN-SUFFIX,sifugu.cn,AdBlock +- DOMAIN-SUFFIX,sifuhe.cn,AdBlock +- DOMAIN-SUFFIX,sifuhu.cn,AdBlock +- DOMAIN-SUFFIX,sifuji.cn,AdBlock +- DOMAIN-SUFFIX,sifuka.cn,AdBlock +- DOMAIN-SUFFIX,smgru.net,AdBlock +- DOMAIN-SUFFIX,taoggou.com,AdBlock +- DOMAIN-SUFFIX,tcxshop.com,AdBlock +- DOMAIN-SUFFIX,tjqonline.cn,AdBlock +- DOMAIN-SUFFIX,topitme.com,AdBlock +- DOMAIN-SUFFIX,tuia.cn,AdBlock +- DOMAIN-SUFFIX,tuipenguin.com,AdBlock +- DOMAIN-SUFFIX,tuitiger.com,AdBlock +- DOMAIN-SUFFIX,wx16999.com,AdBlock +- DOMAIN-SUFFIX,xiaohuau.xyz,AdBlock +- DOMAIN-SUFFIX,yinmong.com,AdBlock +- DOMAIN-SUFFIX,yiqifa.com,AdBlock +- DOMAIN-SUFFIX,yitaopt.com,AdBlock +- DOMAIN-SUFFIX,yukhj.com,AdBlock +- DOMAIN-SUFFIX,zhaozecheng.cn,AdBlock +- DOMAIN-SUFFIX,zhenxinet.com,AdBlock +- DOMAIN-SUFFIX,zunmi.cn,AdBlock +- DOMAIN-SUFFIX,zzd6.com,AdBlock + +# Blocklist +- DOMAIN-SUFFIX,kuaizip.com,AdBlock +- DOMAIN-SUFFIX,mackeeper.com,AdBlock +# > CJ Marketing +- DOMAIN-SUFFIX,4009997658.com,AdBlock +- DOMAIN-SUFFIX,abbyychina.com,AdBlock +- DOMAIN-SUFFIX,bartender.cc,AdBlock +- DOMAIN-SUFFIX,betterzip.net,AdBlock +- DOMAIN-SUFFIX,beyondcompare.cc,AdBlock +- DOMAIN-SUFFIX,bingdianhuanyuan.cn,AdBlock +- DOMAIN-SUFFIX,chemdraw.com.cn,AdBlock +- DOMAIN-SUFFIX,cjmakeding.com,AdBlock +- DOMAIN-SUFFIX,cjmkt.com,AdBlock +- DOMAIN-SUFFIX,codesoftchina.com,AdBlock +- DOMAIN-SUFFIX,coreldrawchina.com,AdBlock +- DOMAIN-SUFFIX,crossoverchina.com,AdBlock +- DOMAIN-SUFFIX,easyrecoverychina.com,AdBlock +- DOMAIN-SUFFIX,ediuschina.com,AdBlock +- DOMAIN-SUFFIX,flstudiochina.com,AdBlock +- DOMAIN-SUFFIX,formysql.com,AdBlock +- DOMAIN-SUFFIX,guitarpro.cc,AdBlock +- DOMAIN-SUFFIX,huishenghuiying.com.cn,AdBlock +- DOMAIN-SUFFIX,hypersnap.net,AdBlock +- DOMAIN-SUFFIX,iconworkshop.cn,AdBlock +- DOMAIN-SUFFIX,imindmap.cc,AdBlock +- DOMAIN-SUFFIX,jihehuaban.com.cn,AdBlock +- DOMAIN-SUFFIX,keyshot.cc,AdBlock +- DOMAIN-SUFFIX,kingdeecn.cn,AdBlock +- DOMAIN-SUFFIX,logoshejishi.com,AdBlock +- DOMAIN-SUFFIX,mairuan.cn,AdBlock +- DOMAIN-SUFFIX,mairuan.com,AdBlock +- DOMAIN-SUFFIX,mairuan.com.cn,AdBlock +- DOMAIN-SUFFIX,mairuan.net,AdBlock +- DOMAIN-SUFFIX,mairuanwang.com,AdBlock +- DOMAIN-SUFFIX,makeding.com,AdBlock +- DOMAIN-SUFFIX,mathtype.cn,AdBlock +- DOMAIN-SUFFIX,mindmanager.cc,AdBlock +- DOMAIN-SUFFIX,mindmapper.cc,AdBlock +- DOMAIN-SUFFIX,mycleanmymac.com,AdBlock +- DOMAIN-SUFFIX,nicelabel.cc,AdBlock +- DOMAIN-SUFFIX,ntfsformac.cc,AdBlock +- DOMAIN-SUFFIX,ntfsformac.cn,AdBlock +- DOMAIN-SUFFIX,overturechina.com,AdBlock +- DOMAIN-SUFFIX,passwordrecovery.cn,AdBlock +- DOMAIN-SUFFIX,pdfexpert.cc,AdBlock +- DOMAIN-SUFFIX,shankejingling.com,AdBlock +- DOMAIN-SUFFIX,ultraiso.net,AdBlock +- DOMAIN-SUFFIX,vegaschina.cn,AdBlock +- DOMAIN-SUFFIX,xmindchina.net,AdBlock +- DOMAIN-SUFFIX,xshellcn.com,AdBlock +- DOMAIN-SUFFIX,yihuifu.cn,AdBlock +- DOMAIN-SUFFIX,yuanchengxiezuo.com,AdBlock +- DOMAIN-SUFFIX,zbrushcn.com,AdBlock +- DOMAIN-SUFFIX,zhzzx.com,AdBlock + +# China Area Network +# > App Store Download || iBooks Sample +- DOMAIN-SUFFIX,itunes.apple.com,Apple +# > Apple Music +- DOMAIN,aod.itunes.apple.com,Apple +- DOMAIN,audio.itunes.apple.com,Apple +- DOMAIN,audio-ssl.itunes.apple.com,Apple +- DOMAIN,streamingaudio.itunes.apple.com,Apple +# > Apple TV +- DOMAIN,ocvideo.apple.com,Apple +# > Apple News and Apple Map TOMTOM Version +- DOMAIN,gspe1-ssl.ls.apple.com,Apple +#PROCESS-NAME,News,Proxy +#USER-AGENT,AppleNews*,Proxy +# > Apple +- DOMAIN-SUFFIX,aaplimg.com,Apple +- DOMAIN-SUFFIX,apple.co,Domestic +- DOMAIN-SUFFIX,apple.com,Domestic +- DOMAIN-SUFFIX,appstore.com,Domestic +- DOMAIN-SUFFIX,cdn-apple.com,Apple +- DOMAIN-SUFFIX,crashlytics.com,Domestic +- DOMAIN-SUFFIX,icloud.com,Domestic +- DOMAIN-SUFFIX,icloud-content.com,Apple +- DOMAIN-SUFFIX,me.com,Domestic +- DOMAIN-SUFFIX,mzstatic.com,Domestic +# > Microsoft +- DOMAIN-SUFFIX,microsoft.com,Domestic +- DOMAIN-SUFFIX,windows.net,Domestic +- DOMAIN-SUFFIX,sfx.ms,Domestic +- DOMAIN-SUFFIX,sharepoint.com,Domestic +- DOMAIN-KEYWORD,officecdn,Domestic +# > Blizzard +- DOMAIN-SUFFIX,blizzard.com,Domestic +- DOMAIN-SUFFIX,battle.net,Domestic +- DOMAIN,blzddist1-a.akamaihd.net,Domestic +# > Steam +- DOMAIN-SUFFIX,steampowered.com,Domestic +- DOMAIN-SUFFIX,steam-chat.com,Domestic +- DOMAIN-KEYWORD,steamcdn,Domestic +- DOMAIN-KEYWORD,steamstore,Domestic +- DOMAIN-KEYWORD,steamuserimages,Domestic +- DOMAIN-KEYWORD,steambroadcast,Domestic +# > Tencent +#USER-AGENT,MicroMessenger%20Client,Domestic +#USER-AGENT,WeChat*,Domestic +- DOMAIN-SUFFIX,qq.com,Domestic +- DOMAIN-SUFFIX,qpic.cn,Domestic +- DOMAIN-SUFFIX,tencent.com,Domestic +# > Alibaba +- DOMAIN-SUFFIX,alibaba.com,Domestic +- DOMAIN-SUFFIX,alicdn.com,Domestic +- DOMAIN-SUFFIX,amap.com,Domestic +- DOMAIN-SUFFIX,dingtalk.com,Domestic +- DOMAIN-SUFFIX,taobao.com,Domestic +- DOMAIN-SUFFIX,tmall.com,Domestic +- DOMAIN-SUFFIX,ykimg.com,Domestic +- DOMAIN-SUFFIX,youku.com,Domestic +- DOMAIN-SUFFIX,xiami.com,Domestic +- DOMAIN-SUFFIX,xiami.net,Domestic +# > NetEase +- DOMAIN-SUFFIX,163.com,Domestic +- DOMAIN-SUFFIX,126.net,Domestic +- DOMAIN-SUFFIX,163yun.com,Domestic +# > Sohu +- DOMAIN-SUFFIX,sohu.com.cn,Domestic +- DOMAIN-SUFFIX,itc.cn,Domestic +- DOMAIN-SUFFIX,sohu.com,Domestic +- DOMAIN-SUFFIX,v-56.com,Domestic +# > Sina +- DOMAIN-SUFFIX,weibo.com,Domestic +- DOMAIN-SUFFIX,weibo.cn,Domestic +# > JD +- DOMAIN-SUFFIX,jd.com,Domestic +- DOMAIN-SUFFIX,jd.hk,Domestic +- DOMAIN-SUFFIX,360buyimg.com,Domestic +# > MI +- DOMAIN-SUFFIX,duokan.com,Domestic +- DOMAIN-SUFFIX,mi-img.com,Domestic +- DOMAIN-SUFFIX,mifile.cn,Domestic +- DOMAIN-SUFFIX,xiaomi.com,Domestic +# > bilibili +- DOMAIN-SUFFIX,acgvideo.com,Domestic +- DOMAIN-SUFFIX,bilibili.com,Domestic +- DOMAIN-SUFFIX,hdslb.com,Domestic +# > iQiyi +- DOMAIN-SUFFIX,iqiyi.com,Domestic +- DOMAIN-SUFFIX,iqiyipic.com,Domestic +- DOMAIN-SUFFIX,71.am.com,Domestic +# > HunanTV +- DOMAIN-SUFFIX,hitv.com,Domestic +- DOMAIN-SUFFIX,mgtv.com,Domestic +# > Meitu +- DOMAIN-SUFFIX,meitu.com,Domestic +- DOMAIN-SUFFIX,meitudata.com,Domestic +- DOMAIN-SUFFIX,meipai.com,Domestic +# > YYeTs +- DOMAIN-SUFFIX,zmzapi.com,Domestic +- DOMAIN-SUFFIX,zimuzu.tv,Domestic +- DOMAIN-SUFFIX,zmzfile.com,Domestic +- DOMAIN-SUFFIX,zmzapi.net,Domestic +# > 蛋蛋赞 +- DOMAIN-SUFFIX,baduziyuan.com,Domestic +- DOMAIN-SUFFIX,com-hs-hkdy.com,Domestic +- DOMAIN-SUFFIX,czybjz.com,Domestic +- DOMAIN-SUFFIX,dandanzan.com,Domestic +- DOMAIN-SUFFIX,fjhps.com,Domestic +- DOMAIN-SUFFIX,kuyunbo.club,Domestic +# > Baidu +- DOMAIN-SUFFIX,baidu.com,Domestic +- DOMAIN-SUFFIX,baidubcr.com,Domestic +- DOMAIN-SUFFIX,bdstatic.com,Domestic +# > ChinaNet +- DOMAIN-SUFFIX,189.cn,Domestic +- DOMAIN-SUFFIX,21cn.com,Domestic +# > ByteDance +- DOMAIN-SUFFIX,bytecdn.cn,Domestic +- DOMAIN-SUFFIX,pstatp.com,Domestic +- DOMAIN-SUFFIX,snssdk.com,Domestic +- DOMAIN-SUFFIX,toutiao.com,Domestic +# > Content Delivery Network +# > Akamai +- DOMAIN-SUFFIX,akadns.net,Domestic +# - DOMAIN-SUFFIX,akamai.net,Domestic +# - DOMAIN-SUFFIX,akamaiedge.net,Domestic +# - DOMAIN-SUFFIX,akamaihd.net,Domestic +# - DOMAIN-SUFFIX,akamaistream.net,Domestic +# - DOMAIN-SUFFIX,akamaized.net,Domestic +# > ChinaNetCenter +- DOMAIN-SUFFIX,chinanetcenter.com,Domestic +- DOMAIN-SUFFIX,wangsu.com,Domestic +# > CloudFlare +- DOMAIN-SUFFIX,cloudflare.com,Domestic +# > IP Query +- DOMAIN-SUFFIX,ipip.net,Domestic +- DOMAIN-SUFFIX,ip.cn,Domestic +- DOMAIN-SUFFIX,ip.la,Domestic +- DOMAIN-SUFFIX,ip-cdn.com,Domestic +- DOMAIN-SUFFIX,ipv6-test.com,Domestic +- DOMAIN-SUFFIX,test-ipv6.com,Domestic +- DOMAIN-SUFFIX,whatismyip.com,Domestic +- DOMAIN,ip.bjango.com,Domestic +# > Other +- DOMAIN-SUFFIX,40017.cn,Domestic +- DOMAIN-SUFFIX,broadcasthe.net,Domestic +- DOMAIN-SUFFIX,cailianpress.com,Domestic +- DOMAIN-SUFFIX,chdbits.co,Domestic +- DOMAIN-SUFFIX,chushou.tv,Domestic +- DOMAIN-SUFFIX,cmbchina.com,Domestic +- DOMAIN-SUFFIX,cmbimg.com,Domestic +- DOMAIN-SUFFIX,cmct.tv,Domestic +- DOMAIN-SUFFIX,cmvideo.cn,Domestic +- DOMAIN-SUFFIX,cnlang.org,Domestic +- DOMAIN-SUFFIX,doubanio.com,Domestic +- DOMAIN-SUFFIX,douyu.com,Domestic +- DOMAIN-SUFFIX,douyucdn.cn,Domestic +- DOMAIN-SUFFIX,dxycdn.com,Domestic +- DOMAIN-SUFFIX,hicloud.com,Domestic +- DOMAIN-SUFFIX,hdchina.org,Domestic +- DOMAIN-SUFFIX,hdcmct.org,Domestic +- DOMAIN-SUFFIX,ithome.com,Domestic +- DOMAIN-SUFFIX,kkmh.com,Domestic +- DOMAIN-SUFFIX,ksosoft.com,Domestic +- DOMAIN-SUFFIX,maoyun.tv,Domestic +- DOMAIN-SUFFIX,meituan.net,Domestic +- DOMAIN-SUFFIX,mobike.com,Domestic +- DOMAIN-SUFFIX,mubu.com,Domestic +- DOMAIN-SUFFIX,myzaker.com,Domestic +- DOMAIN-SUFFIX,ourbits.club,Domestic +- DOMAIN-SUFFIX,passthepopcorn.me,Domestic +- DOMAIN-SUFFIX,paypal.com,Domestic +- DOMAIN-SUFFIX,paypalobjects.com,Domestic +- DOMAIN-SUFFIX,privatehd.to,Domestic +- DOMAIN-SUFFIX,redacted.ch,Domestic +- DOMAIN-SUFFIX,ruguoapp.com,Domestic +- DOMAIN-SUFFIX,smzdm.com,Domestic +- DOMAIN-SUFFIX,sogou.com,Domestic +- DOMAIN-SUFFIX,teamviewer.com,Domestic +- DOMAIN-SUFFIX,totheglory.im,Domestic +- DOMAIN-SUFFIX,tp.m-team.cc,Domestic +- DOMAIN-SUFFIX,udacity.com,Domestic +- DOMAIN-SUFFIX,xmcdn.com,Domestic +- DOMAIN-SUFFIX,yangkeduo.com,Domestic +- DOMAIN-SUFFIX,zhihu.com,Domestic +- DOMAIN-SUFFIX,zhimg.com,Domestic +#USER-AGENT,NeteaseMusic*,Domestic +#USER-AGENT,%E7%BD%91%E6%98%93%E4%BA%91%E9%9F%B3%E4%B9%90*,Domestic + +# (DNS Cache Pollution Protection) +# > Google +- DOMAIN-SUFFIX,appspot.com,Proxy +- DOMAIN-SUFFIX,blogger.com,Proxy +- DOMAIN-SUFFIX,getoutline.org,Proxy +- DOMAIN-SUFFIX,gvt0.com,Proxy +- DOMAIN-SUFFIX,gvt1.com,Proxy +- DOMAIN-SUFFIX,gvt3.com,Proxy +- DOMAIN-SUFFIX,xn--ngstr-lra8j.com,Proxy +- DOMAIN-KEYWORD,google,Proxy +- DOMAIN-KEYWORD,blogspot,Proxy +# > Facebook +- DOMAIN-SUFFIX,cdninstagram.com,Proxy +- DOMAIN-SUFFIX,fb.com,Proxy +- DOMAIN-SUFFIX,fb.me,Proxy +- DOMAIN-SUFFIX,fbaddins.com,Proxy +- DOMAIN-SUFFIX,fbcdn.net,Proxy +- DOMAIN-SUFFIX,fbsbx.com,Proxy +- DOMAIN-SUFFIX,fbworkmail.com,Proxy +- DOMAIN-SUFFIX,instagram.com,Proxy +- DOMAIN-SUFFIX,m.me,Proxy +- DOMAIN-SUFFIX,messenger.com,Proxy +- DOMAIN-SUFFIX,oculus.com,Proxy +- DOMAIN-SUFFIX,oculuscdn.com,Proxy +- DOMAIN-SUFFIX,rocksdb.org,Proxy +- DOMAIN-SUFFIX,whatsapp.com,Proxy +- DOMAIN-SUFFIX,whatsapp.net,Proxy +- DOMAIN-KEYWORD,facebook,Proxy +# > Twitter +- DOMAIN-SUFFIX,pscp.tv,Proxy +- DOMAIN-SUFFIX,periscope.tv,Proxy +- DOMAIN-SUFFIX,t.co,Proxy +- DOMAIN-SUFFIX,twimg.co,Proxy +- DOMAIN-SUFFIX,twimg.com,Proxy +- DOMAIN-SUFFIX,twitpic.com,Proxy +- DOMAIN-SUFFIX,vine.co,Proxy +- DOMAIN-KEYWORD,twitter,Proxy +# > Telegram +- DOMAIN-SUFFIX,t.me,Proxy +- DOMAIN-SUFFIX,tdesktop.com,Proxy +- DOMAIN-SUFFIX,telegra.ph,Proxy +- DOMAIN-SUFFIX,telegram.me,Proxy +- DOMAIN-SUFFIX,telegram.org,Proxy +# > Line +- DOMAIN-SUFFIX,line.me,Proxy +- DOMAIN-SUFFIX,line-apps.com,Proxy +- DOMAIN-SUFFIX,line-scdn.net,Proxy +- DOMAIN-SUFFIX,naver.jp,Proxy +# > Other +- DOMAIN-SUFFIX,4shared.com,Proxy +- DOMAIN-SUFFIX,881903.com,Proxy +- DOMAIN-SUFFIX,abc.net.au,Proxy +- DOMAIN-SUFFIX,abebooks.com,Proxy +- DOMAIN-SUFFIX,amazon.co.jp,Proxy +- DOMAIN-SUFFIX,apigee.com,Proxy +- DOMAIN-SUFFIX,apk-dl.com,Proxy +- DOMAIN-SUFFIX,apkmirror.com,Proxy +- DOMAIN-SUFFIX,apkmonk.com,Proxy +- DOMAIN-SUFFIX,apkpure.com,Proxy +- DOMAIN-SUFFIX,aptoide.com,Proxy +- DOMAIN-SUFFIX,archive.is,Proxy +- DOMAIN-SUFFIX,archive.org,Proxy +- DOMAIN-SUFFIX,arte.tv,Proxy +- DOMAIN-SUFFIX,ask.com,Proxy +- DOMAIN-SUFFIX,avgle.com,Proxy +- DOMAIN-SUFFIX,badoo.com,Proxy +- DOMAIN-SUFFIX,bandwagonhost.com,Proxy +- DOMAIN-SUFFIX,bbc.com,Proxy +- DOMAIN-SUFFIX,behance.net,Proxy +- DOMAIN-SUFFIX,bibox.com,Proxy +- DOMAIN-SUFFIX,biggo.com.tw,Proxy +- DOMAIN-SUFFIX,binance.com,Proxy +- DOMAIN-SUFFIX,bitcointalk.org,Proxy +- DOMAIN-SUFFIX,bitfinex.com,Proxy +- DOMAIN-SUFFIX,bitmex.com,Proxy +- DOMAIN-SUFFIX,bit-z.com,Proxy +- DOMAIN-SUFFIX,bloglovin.com,Proxy +- DOMAIN-SUFFIX,bloomberg.cn,Proxy +- DOMAIN-SUFFIX,bloomberg.com,Proxy +- DOMAIN-SUFFIX,book.com.tw,Proxy +- DOMAIN-SUFFIX,booklive.jp,Proxy +- DOMAIN-SUFFIX,books.com.tw,Proxy +- DOMAIN-SUFFIX,box.com,Proxy +- DOMAIN-SUFFIX,brookings.edu,Proxy +- DOMAIN-SUFFIX,businessinsider.com,Proxy +- DOMAIN-SUFFIX,bwh1.net,Proxy +- DOMAIN-SUFFIX,castbox.fm,Proxy +- DOMAIN-SUFFIX,cbc.ca,Proxy +- DOMAIN-SUFFIX,cdw.com,Proxy +- DOMAIN-SUFFIX,change.org,Proxy +- DOMAIN-SUFFIX,ck101.com,Proxy +- DOMAIN-SUFFIX,clarionproject.org,Proxy +- DOMAIN-SUFFIX,clyp.it,Proxy +- DOMAIN-SUFFIX,cna.com.tw,Proxy +- DOMAIN-SUFFIX,comparitech.com,Proxy +- DOMAIN-SUFFIX,conoha.jp,Proxy +- DOMAIN-SUFFIX,crucial.com,Proxy +- DOMAIN-SUFFIX,cts.com.tw,Proxy +- DOMAIN-SUFFIX,cw.com.tw,Proxy +- DOMAIN-SUFFIX,cyberctm.com,Proxy +- DOMAIN-SUFFIX,dailymotion.com,Proxy +- DOMAIN-SUFFIX,dailyview.tw,Proxy +- DOMAIN-SUFFIX,daum.net,Proxy +- DOMAIN-SUFFIX,daumcdn.net,Proxy +- DOMAIN-SUFFIX,dcard.tw,Proxy +- DOMAIN-SUFFIX,deepdiscount.com,Proxy +- DOMAIN-SUFFIX,deezer.com,Proxy +- DOMAIN-SUFFIX,depositphotos.com,Proxy +- DOMAIN-SUFFIX,disconnect.me,Proxy +- DOMAIN-SUFFIX,discordapp.com,Proxy +- DOMAIN-SUFFIX,discordapp.net,Proxy +- DOMAIN-SUFFIX,disqus.com,Proxy +- DOMAIN-SUFFIX,dns2go.com,Proxy +- DOMAIN-SUFFIX,dropbox.com,Proxy +- DOMAIN-SUFFIX,dropboxusercontent.com,Proxy +- DOMAIN-SUFFIX,duckduckgo.com,Proxy +- DOMAIN-SUFFIX,dw.com,Proxy +- DOMAIN-SUFFIX,dynu.com,Proxy +- DOMAIN-SUFFIX,earthcam.com,Proxy +- DOMAIN-SUFFIX,ebookservice.tw,Proxy +- DOMAIN-SUFFIX,economist.com,Proxy +- DOMAIN-SUFFIX,edgecastcdn.net,Proxy +- DOMAIN-SUFFIX,edu,Proxy +- DOMAIN-SUFFIX,elpais.com,Proxy +- DOMAIN-SUFFIX,enanyang.my,Proxy +- DOMAIN-SUFFIX,euronews.com,Proxy +- DOMAIN-SUFFIX,feedly.com,Proxy +- DOMAIN-SUFFIX,files.wordpress.com,Proxy +- DOMAIN-SUFFIX,flickr.com,Proxy +- DOMAIN-SUFFIX,flitto.com,Proxy +- DOMAIN-SUFFIX,foreignpolicy.com,Proxy +- DOMAIN-SUFFIX,friday.tw,Proxy +- DOMAIN-SUFFIX,gate.io,Proxy +- DOMAIN-SUFFIX,getlantern.org,Proxy +- DOMAIN-SUFFIX,getsync.com,Proxy +- DOMAIN-SUFFIX,globalvoices.org,Proxy +- DOMAIN-SUFFIX,goo.ne.jp,Proxy +- DOMAIN-SUFFIX,goodreads.com,Proxy +- DOMAIN-SUFFIX,gov.tw,Proxy +- DOMAIN-SUFFIX,gumroad.com,Proxy +- DOMAIN-SUFFIX,hbg.com,Proxy +- DOMAIN-SUFFIX,hightail.com,Proxy +- DOMAIN-SUFFIX,hk01.com,Proxy +- DOMAIN-SUFFIX,hkbf.org,Proxy +- DOMAIN-SUFFIX,hkbookcity.com,Proxy +- DOMAIN-SUFFIX,hkej.com,Proxy +- DOMAIN-SUFFIX,hket.com,Proxy +- DOMAIN-SUFFIX,hkgolden.com,Proxy +- DOMAIN-SUFFIX,hootsuite.com,Proxy +- DOMAIN-SUFFIX,hudson.org,Proxy +- DOMAIN-SUFFIX,huobi.pro,Proxy +- DOMAIN-SUFFIX,initiummall.com,Proxy +- DOMAIN-SUFFIX,ipfs.io,Proxy +- DOMAIN-SUFFIX,issuu.com,Proxy +- DOMAIN-SUFFIX,japantimes.co.jp,Proxy +- DOMAIN-SUFFIX,jiji.com,Proxy +- DOMAIN-SUFFIX,jinx.com,Proxy +- DOMAIN-SUFFIX,jkforum.net,Proxy +- DOMAIN-SUFFIX,joinmastodon.org,Proxy +- DOMAIN-SUFFIX,kakao.com,Proxy +- DOMAIN-SUFFIX,lihkg.com,Proxy +- DOMAIN-SUFFIX,live.com,Proxy +- DOMAIN-SUFFIX,mail.ru,Proxy +- DOMAIN-SUFFIX,matters.news,Proxy +- DOMAIN-SUFFIX,medium.com,Proxy +- DOMAIN-SUFFIX,mega.nz,Proxy +- DOMAIN-SUFFIX,mil,Proxy +- DOMAIN-SUFFIX,mobile01.com,Proxy +- DOMAIN-SUFFIX,naver.com,Proxy +- DOMAIN-SUFFIX,nikkei.com,Proxy +- DOMAIN-SUFFIX,nofile.io,Proxy +- DOMAIN-SUFFIX,now.com,Proxy +- DOMAIN-SUFFIX,nyt.com,Proxy +- DOMAIN-SUFFIX,nytchina.com,Proxy +- DOMAIN-SUFFIX,nytcn.me,Proxy +- DOMAIN-SUFFIX,nytco.com,Proxy +- DOMAIN-SUFFIX,nytimes.com,Proxy +- DOMAIN-SUFFIX,nytimg.com,Proxy +- DOMAIN-SUFFIX,nytlog.com,Proxy +- DOMAIN-SUFFIX,nytstyle.com,Proxy +- DOMAIN-SUFFIX,ok.ru,Proxy +- DOMAIN-SUFFIX,okex.com,Proxy +- DOMAIN-SUFFIX,pcloud.com,Proxy +- DOMAIN-SUFFIX,pinimg.com,Proxy +- DOMAIN-SUFFIX,pixiv.net,Proxy +- DOMAIN-SUFFIX,pornhub.com,Proxy +- DOMAIN-SUFFIX,pureapk.com,Proxy +- DOMAIN-SUFFIX,quora.com,Proxy +- DOMAIN-SUFFIX,quoracdn.net,Proxy +- DOMAIN-SUFFIX,rakuten.co.jp,Proxy +- DOMAIN-SUFFIX,reddit.com,Proxy +- DOMAIN-SUFFIX,redditmedia.com,Proxy +- DOMAIN-SUFFIX,resilio.com,Proxy +- DOMAIN-SUFFIX,reuters.com,Proxy +- DOMAIN-SUFFIX,scmp.com,Proxy +- DOMAIN-SUFFIX,scribd.com,Proxy +- DOMAIN-SUFFIX,seatguru.com,Proxy +- DOMAIN-SUFFIX,shadowsocks.org,Proxy +- DOMAIN-SUFFIX,slideshare.net,Proxy +- DOMAIN-SUFFIX,soundcloud.com,Proxy +- DOMAIN-SUFFIX,startpage.com,Proxy +- DOMAIN-SUFFIX,steamcommunity.com,Proxy +- DOMAIN-SUFFIX,steemit.com,Proxy +- DOMAIN-SUFFIX,t66y.com,Proxy +- DOMAIN-SUFFIX,teco-hk.org,Proxy +- DOMAIN-SUFFIX,teco-mo.org,Proxy +- DOMAIN-SUFFIX,teddysun.com,Proxy +- DOMAIN-SUFFIX,theinitium.com,Proxy +- DOMAIN-SUFFIX,tineye.com,Proxy +- DOMAIN-SUFFIX,torproject.org,Proxy +- DOMAIN-SUFFIX,tumblr.com,Proxy +- DOMAIN-SUFFIX,turbobit.net,Proxy +- DOMAIN-SUFFIX,twitch.tv,Proxy +- DOMAIN-SUFFIX,udn.com,Proxy +- DOMAIN-SUFFIX,unseen.is,Proxy +- DOMAIN-SUFFIX,upmedia.mg,Proxy +- DOMAIN-SUFFIX,uptodown.com,Proxy +- DOMAIN-SUFFIX,ustream.tv,Proxy +- DOMAIN-SUFFIX,uwants.com,Proxy +- DOMAIN-SUFFIX,v2ray.com,Proxy +- DOMAIN-SUFFIX,viber.com,Proxy +- DOMAIN-SUFFIX,videopress.com,Proxy +- DOMAIN-SUFFIX,vimeo.com,Proxy +- DOMAIN-SUFFIX,voxer.com,Proxy +- DOMAIN-SUFFIX,vzw.com,Proxy +- DOMAIN-SUFFIX,w3schools.com,Proxy +- DOMAIN-SUFFIX,wattpad.com,Proxy +- DOMAIN-SUFFIX,whoer.net,Proxy +- DOMAIN-SUFFIX,wikimapia.org,Proxy +- DOMAIN-SUFFIX,wikipedia.org,Proxy +- DOMAIN-SUFFIX,wire.com,Proxy +- DOMAIN-SUFFIX,worldcat.org,Proxy +- DOMAIN-SUFFIX,wsj.com,Proxy +- DOMAIN-SUFFIX,wsj.net,Proxy +- DOMAIN-SUFFIX,xboxlive.com,Proxy +- DOMAIN-SUFFIX,xvideos.com,Proxy +- DOMAIN-SUFFIX,yahoo.com,Proxy +- DOMAIN-SUFFIX,yesasia.com,Proxy +- DOMAIN-SUFFIX,yes-news.com,Proxy +- DOMAIN-SUFFIX,yomiuri.co.jp,Proxy +- DOMAIN-SUFFIX,you-get.org,Proxy +- DOMAIN-SUFFIX,zb.com,Proxy +- DOMAIN-SUFFIX,zello.com,Proxy +- DOMAIN-SUFFIX,zeronet.io,Proxy +- DOMAIN,cdn-images.mailchimp.com,Proxy +- DOMAIN,id.heroku.com,Proxy +- DOMAIN-KEYWORD,github,Proxy +- DOMAIN-KEYWORD,jav,Proxy +- DOMAIN-KEYWORD,pinterest,Proxy +- DOMAIN-KEYWORD,porn,Proxy +- DOMAIN-KEYWORD,wikileaks,Proxy + +# (Region-Restricted Access Denied) +- DOMAIN-SUFFIX,apartmentratings.com,Proxy +- DOMAIN-SUFFIX,apartments.com,Proxy +- DOMAIN-SUFFIX,bankmobilevibe.com,Proxy +- DOMAIN-SUFFIX,bing.com,Proxy +- DOMAIN-SUFFIX,booktopia.com.au,Proxy +- DOMAIN-SUFFIX,centauro.com.br,Proxy +- DOMAIN-SUFFIX,clearsurance.com,Proxy +- DOMAIN-SUFFIX,costco.com,Proxy +- DOMAIN-SUFFIX,crackle.com,Proxy +- DOMAIN-SUFFIX,depositphotos.cn,Proxy +- DOMAIN-SUFFIX,dish.com,Proxy +- DOMAIN-SUFFIX,dmm.co.jp,Proxy +- DOMAIN-SUFFIX,dmm.com,Proxy +- DOMAIN-SUFFIX,dnvod.tv,Proxy +- DOMAIN-SUFFIX,esurance.com,Proxy +- DOMAIN-SUFFIX,extmatrix.com,Proxy +- DOMAIN-SUFFIX,fastpic.ru,Proxy +- DOMAIN-SUFFIX,flipboard.com,Proxy +- DOMAIN-SUFFIX,fnac.be,Proxy +- DOMAIN-SUFFIX,fnac.com,Proxy +- DOMAIN-SUFFIX,funkyimg.com,Proxy +- DOMAIN-SUFFIX,fxnetworks.com,Proxy +- DOMAIN-SUFFIX,gettyimages.com,Proxy +- DOMAIN-SUFFIX,jcpenney.com,Proxy +- DOMAIN-SUFFIX,kknews.cc,Proxy +- DOMAIN-SUFFIX,nationwide.com,Proxy +- DOMAIN-SUFFIX,nbc.com,Proxy +- DOMAIN-SUFFIX,nordstrom.com,Proxy +- DOMAIN-SUFFIX,nordstromimage.com,Proxy +- DOMAIN-SUFFIX,nordstromrack.com,Proxy +- DOMAIN-SUFFIX,read01.com,Proxy +- DOMAIN-SUFFIX,superpages.com,Proxy +- DOMAIN-SUFFIX,target.com,Proxy +- DOMAIN-SUFFIX,thinkgeek.com,Proxy +- DOMAIN-SUFFIX,tracfone.com,Proxy +- DOMAIN-SUFFIX,uploader.jp,Proxy +- DOMAIN-SUFFIX,vevo.com,Proxy +- DOMAIN-SUFFIX,viu.tv,Proxy +- DOMAIN-SUFFIX,vk.com,Proxy +- DOMAIN-SUFFIX,vsco.co,Proxy +- DOMAIN-SUFFIX,xfinity.com,Proxy +- DOMAIN-SUFFIX,zattoo.com,Proxy +- DOMAIN,abc.com,Proxy +- DOMAIN,abc.go.com,Proxy +- DOMAIN,abc.net.au,Proxy +- DOMAIN,wego.here.com,Proxy +#USER-AGENT,Roam*,Proxy + +# (The Most Popular Sites) +# > Apple +# > Apple URL Shortener +- DOMAIN-SUFFIX,appsto.re,Proxy +# > TestFlight +- DOMAIN,beta.itunes.apple.com,Proxy +# > iBooks Store download +- DOMAIN,books.itunes.apple.com,Proxy +# > iTunes Store Moveis Trailers +- DOMAIN,hls.itunes.apple.com,Proxy +# App Store Preview +- DOMAIN,itunes.apple.com,Proxy +# > Spotlight +- DOMAIN,api-glb-sea.smoot.apple.com,Proxy +# > Dictionary +- DOMAIN,lookup-api.apple.com,Proxy +#PROCESS-NAME,LookupViewService,Proxy +# > Google +- DOMAIN-SUFFIX,abc.xyz,Proxy +- DOMAIN-SUFFIX,android.com,Proxy +- DOMAIN-SUFFIX,androidify.com,Proxy +- DOMAIN-SUFFIX,dialogflow.com,Proxy +- DOMAIN-SUFFIX,autodraw.com,Proxy +- DOMAIN-SUFFIX,capitalg.com,Proxy +- DOMAIN-SUFFIX,certificate-transparency.org,Proxy +- DOMAIN-SUFFIX,chrome.com,Proxy +- DOMAIN-SUFFIX,chromeexperiments.com,Proxy +- DOMAIN-SUFFIX,chromestatus.com,Proxy +- DOMAIN-SUFFIX,chromium.org,Proxy +- DOMAIN-SUFFIX,creativelab5.com,Proxy +- DOMAIN-SUFFIX,debug.com,Proxy +- DOMAIN-SUFFIX,deepmind.com,Proxy +- DOMAIN-SUFFIX,firebaseio.com,Proxy +- DOMAIN-SUFFIX,getmdl.io,Proxy +- DOMAIN-SUFFIX,ggpht.com,Proxy +- DOMAIN-SUFFIX,gmail.com,Proxy +- DOMAIN-SUFFIX,gmodules.com,Proxy +- DOMAIN-SUFFIX,godoc.org,Proxy +- DOMAIN-SUFFIX,golang.org,Proxy +- DOMAIN-SUFFIX,gstatic.com,Proxy +- DOMAIN-SUFFIX,gv.com,Proxy +- DOMAIN-SUFFIX,gwtproject.org,Proxy +- DOMAIN-SUFFIX,itasoftware.com,Proxy +- DOMAIN-SUFFIX,madewithcode.com,Proxy +- DOMAIN-SUFFIX,material.io,Proxy +- DOMAIN-SUFFIX,polymer-project.org,Proxy +- DOMAIN-SUFFIX,admin.recaptcha.net,Proxy +- DOMAIN-SUFFIX,recaptcha.net,Proxy +- DOMAIN-SUFFIX,shattered.io,Proxy +- DOMAIN-SUFFIX,synergyse.com,Proxy +- DOMAIN-SUFFIX,tensorflow.org,Proxy +- DOMAIN-SUFFIX,tiltbrush.com,Proxy +- DOMAIN-SUFFIX,waveprotocol.org,Proxy +- DOMAIN-SUFFIX,waymo.com,Proxy +- DOMAIN-SUFFIX,webmproject.org,Proxy +- DOMAIN-SUFFIX,webrtc.org,Proxy +- DOMAIN-SUFFIX,whatbrowser.org,Proxy +- DOMAIN-SUFFIX,widevine.com,Proxy +- DOMAIN-SUFFIX,x.company,Proxy +- DOMAIN-SUFFIX,youtu.be,Proxy +- DOMAIN-SUFFIX,yt.be,Proxy +- DOMAIN-SUFFIX,ytimg.com,Proxy +# > Steam +- DOMAIN,media.steampowered.com,Proxy +- DOMAIN,store.steampowered.com,Proxy +# > Other +- DOMAIN-SUFFIX,0rz.tw,Proxy +- DOMAIN-SUFFIX,4bluestones.biz,Proxy +- DOMAIN-SUFFIX,9bis.net,Proxy +- DOMAIN-SUFFIX,allconnected.co,Proxy +- DOMAIN-SUFFIX,amazonaws.com,Proxy +- DOMAIN-SUFFIX,aol.com,Proxy +- DOMAIN-SUFFIX,bcc.com.tw,Proxy +- DOMAIN-SUFFIX,bit.ly,Proxy +- DOMAIN-SUFFIX,bitshare.com,Proxy +- DOMAIN-SUFFIX,blog.jp,Proxy +- DOMAIN-SUFFIX,blogimg.jp,Proxy +- DOMAIN-SUFFIX,blogtd.org,Proxy +- DOMAIN-SUFFIX,broadcast.co.nz,Proxy +- DOMAIN-SUFFIX,camfrog.com,Proxy +- DOMAIN-SUFFIX,cfos.de,Proxy +- DOMAIN-SUFFIX,citypopulation.de,Proxy +- DOMAIN-SUFFIX,cloudfront.net,Proxy +- DOMAIN-SUFFIX,ctitv.com.tw,Proxy +- DOMAIN-SUFFIX,cuhk.edu.hk,Proxy +- DOMAIN-SUFFIX,cusu.hk,Proxy +- DOMAIN-SUFFIX,discuss.com.hk,Proxy +- DOMAIN-SUFFIX,dropboxapi.com,Proxy +- DOMAIN-SUFFIX,edditstatic.com,Proxy +- DOMAIN-SUFFIX,flickriver.com,Proxy +- DOMAIN-SUFFIX,focustaiwan.tw,Proxy +- DOMAIN-SUFFIX,free.fr,Proxy +- DOMAIN-SUFFIX,ftchinese.com,Proxy +- DOMAIN-SUFFIX,gigacircle.com,Proxy +- DOMAIN-SUFFIX,gov,Proxy +- DOMAIN-SUFFIX,hk-pub.com,Proxy +- DOMAIN-SUFFIX,hosting.co.uk,Proxy +- DOMAIN-SUFFIX,hwcdn.net,Proxy +- DOMAIN-SUFFIX,jtvnw.net,Proxy +- DOMAIN-SUFFIX,linksalpha.com,Proxy +- DOMAIN-SUFFIX,manyvids.com,Proxy +- DOMAIN-SUFFIX,myactimes.com,Proxy +- DOMAIN-SUFFIX,newsblur.com,Proxy +- DOMAIN-SUFFIX,now.im,Proxy +- DOMAIN-SUFFIX,redditlist.com,Proxy +- DOMAIN-SUFFIX,signal.org,Proxy +- DOMAIN-SUFFIX,sparknotes.com,Proxy +- DOMAIN-SUFFIX,streetvoice.com,Proxy +- DOMAIN-SUFFIX,ttvnw.net,Proxy +- DOMAIN-SUFFIX,tv.com,Proxy +- DOMAIN-SUFFIX,twitchcdn.net,Proxy +- DOMAIN-SUFFIX,typepad.com,Proxy +- DOMAIN-SUFFIX,udnbkk.com,Proxy +- DOMAIN-SUFFIX,whispersystems.org,Proxy +- DOMAIN-SUFFIX,wikia.com,Proxy +- DOMAIN-SUFFIX,wn.com,Proxy +- DOMAIN-SUFFIX,wolframalpha.com,Proxy +- DOMAIN-SUFFIX,x-art.com,Proxy +- DOMAIN-SUFFIX,yimg.com,Proxy + +- DOMAIN-KEYWORD,dlercloud,Proxy +- DOMAIN-SUFFIX,dler.cloud,Proxy + +# Local Area Network +- DOMAIN-KEYWORD,announce,DIRECT +- DOMAIN-KEYWORD,torrent,DIRECT +- DOMAIN-KEYWORD,tracker,DIRECT +- DOMAIN-SUFFIX,smtp,DIRECT +- DOMAIN-SUFFIX,local,DIRECT +- IP-CIDR,192.168.0.0/16,DIRECT +- IP-CIDR,10.0.0.0/8,DIRECT +- IP-CIDR,172.16.0.0/12,DIRECT +- IP-CIDR,127.0.0.0/8,DIRECT +- IP-CIDR,100.64.0.0/10,DIRECT + +# > IQIYI +- IP-CIDR,101.227.0.0/16,AsianTV +- IP-CIDR,101.224.0.0/13,AsianTV +- IP-CIDR,119.176.0.0/12,AsianTV + +# > Youku +- IP-CIDR,106.11.0.0/16,AsianTV + +# > iQiyi +- IP-CIDR,101.227.97.240/32,AdBlock +- IP-CIDR,101.227.200.11/32,AdBlock +- IP-CIDR,101.227.200.28/32,AdBlock +- IP-CIDR,124.192.153.42/32,AdBlock + +# Internet Service Provider AdBlock Protection +- IP-CIDR,39.107.15.115/32,AdBlock +- IP-CIDR,47.89.59.182/32,AdBlock +- IP-CIDR,103.49.209.27/32,AdBlock +- IP-CIDR,123.56.152.96/32,AdBlock +# > ChinaNet +- IP-CIDR,61.160.200.223/32,AdBlock +- IP-CIDR,61.160.200.242/32,AdBlock +- IP-CIDR,61.160.200.252/32,AdBlock +- IP-CIDR,61.174.50.214/32,AdBlock +- IP-CIDR,111.175.220.163/32,AdBlock +- IP-CIDR,111.175.220.164/32,AdBlock +- IP-CIDR,124.232.160.178/32,AdBlock +- IP-CIDR,175.6.223.15/32,AdBlock +- IP-CIDR,183.59.53.237/32,AdBlock +- IP-CIDR,218.93.127.37/32,AdBlock +- IP-CIDR,221.228.17.152/32,AdBlock +- IP-CIDR,221.231.6.79/32,AdBlock +- IP-CIDR,222.186.61.91/32,AdBlock +- IP-CIDR,222.186.61.95/32,AdBlock +- IP-CIDR,222.186.61.96/32,AdBlock +- IP-CIDR,222.186.61.97/32,AdBlock +# > ChinaUnicom +- IP-CIDR,106.75.231.48/32,AdBlock +- IP-CIDR,119.4.249.166/32,AdBlock +- IP-CIDR,220.196.52.141/32,AdBlock +- IP-CIDR,221.6.4.148/32,AdBlock +# > ChinaMobile +- IP-CIDR,114.247.28.96/32,AdBlock +- IP-CIDR,221.179.131.72/32,AdBlock +- IP-CIDR,221.179.140.145/32,AdBlock +# > Dr.Peng +- IP-CIDR,10.72.25.0/24,AdBlock +- IP-CIDR,115.182.16.79/32,AdBlock +- IP-CIDR,118.144.88.126/32,AdBlock +- IP-CIDR,118.144.88.215/32,AdBlock +- IP-CIDR,120.76.189.132/32,AdBlock +- IP-CIDR,124.14.21.147/32,AdBlock +- IP-CIDR,124.14.21.151/32,AdBlock +- IP-CIDR,180.166.52.24/32,AdBlock +- IP-CIDR,211.161.101.106/32,AdBlock +- IP-CIDR,220.115.251.25/32,AdBlock +- IP-CIDR,222.73.156.235/32,AdBlock + +# > Telegram +- IP-CIDR,67.198.55.0/24,Proxy +- IP-CIDR,91.108.4.0/22,Proxy +- IP-CIDR,91.108.8.0/22,Proxy +- IP-CIDR,91.108.12.0/22,Proxy +- IP-CIDR,91.108.16.0/22,Proxy +- IP-CIDR,91.108.56.0/22,Proxy +- IP-CIDR,109.239.140.0/24,Proxy +- IP-CIDR,149.154.160.0/20,Proxy +- IP-CIDR,205.172.60.0/22,Proxy + +# (Extra IP-CIRD) +# > Google +- IP-CIDR,35.190.247.0/24,Proxy +- IP-CIDR,64.233.160.0/19,Proxy +- IP-CIDR,66.102.0.0/20,Proxy +- IP-CIDR,66.249.80.0/20,Proxy +- IP-CIDR,72.14.192.0/18,Proxy +- IP-CIDR,74.125.0.0/16,Proxy +- IP-CIDR,108.177.8.0/21,Proxy +- IP-CIDR,172.217.0.0/16,Proxy +- IP-CIDR,173.194.0.0/16,Proxy +- IP-CIDR,209.85.128.0/17,Proxy +- IP-CIDR,216.58.192.0/19,Proxy +- IP-CIDR,216.239.32.0/19,Proxy +# > Facebook +- IP-CIDR,31.13.24.0/21,Proxy +- IP-CIDR,31.13.64.0/18,Proxy +- IP-CIDR,45.64.40.0/22,Proxy +- IP-CIDR,66.220.144.0/20,Proxy +- IP-CIDR,69.63.176.0/20,Proxy +- IP-CIDR,69.171.224.0/19,Proxy +- IP-CIDR,74.119.76.0/22,Proxy +- IP-CIDR,103.4.96.0/22,Proxy +- IP-CIDR,129.134.0.0/17,Proxy +- IP-CIDR,157.240.0.0/17,Proxy +- IP-CIDR,173.252.64.0/19,Proxy +- IP-CIDR,173.252.96.0/19,Proxy +- IP-CIDR,179.60.192.0/22,Proxy +- IP-CIDR,185.60.216.0/22,Proxy +- IP-CIDR,204.15.20.0/22,Proxy +# > Twitter +- IP-CIDR,69.195.160.0/19,Proxy +- IP-CIDR,104.244.42.0/21,Proxy +- IP-CIDR,192.133.76.0/22,Proxy +- IP-CIDR,199.16.156.0/22,Proxy +- IP-CIDR,199.59.148.0/22,Proxy +- IP-CIDR,199.96.56.0/21,Proxy +- IP-CIDR,202.160.128.0/22,Proxy +- IP-CIDR,209.237.192.0/19,Proxy + +# GeoIP China +- GEOIP,CN,Domestic + +- MATCH,Others \ No newline at end of file diff --git a/package/cnsztl/luci-app-openclash/files/etc/openclash/openclash_version b/package/cnsztl/luci-app-openclash/files/etc/openclash/openclash_version new file mode 100755 index 0000000000..f52ff5208c --- /dev/null +++ b/package/cnsztl/luci-app-openclash/files/etc/openclash/openclash_version @@ -0,0 +1,2 @@ +version:v0.30.0 +data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAmAAAABTCAMAAAAPxEvIAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxMjFFNEYyQzhBREMxMUU5ODgyQkM5NTY1QURBMDk4MCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxMjFFNEYyRDhBREMxMUU5ODgyQkM5NTY1QURBMDk4MCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjEyMUU0RjJBOEFEQzExRTk4ODJCQzk1NjVBREEwOTgwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjEyMUU0RjJCOEFEQzExRTk4ODJCQzk1NjVBREEwOTgwIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+H/iAugAAAKtQTFRFRkZGEIHCBlWChLXRo8je1dXVCHm6xMTEBHW2v9rqqampeHh4gYGBDH2+5ubmAXKzXpOymJiYCWGTPDw8bGxs9PT0tra2aq7VAnS0DoDAEoPELo7F0eTvCnu8R5vLKGyTBmym4O30B3e4Mnuk8Pb5G4TACXOvGnCgUlJSVVVVUVFRWFhYWVlZWlpaX19fXV1dXFxcTU1NUFBQTk5OW1tbXl5eT09P////////CHQSRAAAADl0Uk5T//////////////////////////////////////////////////////////////////////////8AOqxlQAAAEntJREFUeNrsnIly4roShhXAGGxC8AZhEhNDCGGZ4R7gTJL3f7IrdUvW4gWTkCKHctdMVWy1tfXnX7IsQz7Q+k5vW9tl7PnX1dmkOeVgEcTLq8NcA3ZeG00lYHZYR7kG7Nz20BKA2XWMLwvYzXUS9quFgNl/a7uovf76db2EkY9+WIf4svZ8tYA9TClgXh3hGrBvm+l/kH4d4HqI/Cajc8spceoAX17Bbq7TKGFN4v6vtgsbVbCba7UJqeN7cbtiBbu5qQH7CQp2c70SVgP2AxTs5oqN/FPbpe31Vw1Ybd9otYLVVitYDdh/WMHGV2zk39ouba+/asBq+07AagWr7TutHiJrqxWsBqyeg/1MwP7Udmm7bgWr43t5wGoF+/PHc6z+O7W+5XjbHxmmHjU3LyFkKWers8ty+wkKdjtqPdKAzLvNh6O+N5Nmlzm/Tx/zvF9G3SlL7I5eKhT80OzOqfdja3Q2wMJh9K6a7f0EorZ6qG1WszyO2I0Rna1UixVzZsBubk+3yVTGo/UyLnVtzdXodSdGelMmz5vH6vLSkjlNR/HRepLfx815z1jf+31x67GKyEOPHTpZNxduibOVaumlnsNeP8HXSAvH46TYczzJRG+kpbe0tO5LWbHjl0fNu3kGwLZ9nllkWVY/zbr30wDbMpXtZ92G563tdwB281m+HrtdVJ/HEg0TgFFnQYeqPJyvNLFVpoacr3nqPRp/FTDOl+WtCJg77P9MwH7DGBlm3Pr53P2nFewBsGq++tQGEOpWuYJNW88Jc04GMLLOU5mKAdX5IIHEeUbfDAMaHwcsq9cmcPDwRcCQr8gNFHP7PxEw4uaOkeDlBJtzlUpYD5wZsPGpgEGcnxvcWuWBnlAiqJePzk+POkQwu+dpjSc4KgEbWBblPh8VPAbYptxggLF2gW5e9N7bXNoAHXm4C0CrTC/QtQ05W6kA2HkbcrKCQZybEGSGxtO8VMImA0EEemuCBwI2gARfMFMoYTBdi57AlXk3K0gYqRDEyOQrCLbWjwNsFcDDiGt4sZmZFRx+NGDjT8zA5n4qShDoeWEmC86D8GYS1hXeXXbQkAbHhc+G8xRsFLzo+CzsCGAw4whplxKyX7IornfQw8Hu75lxcR2bPkTYTpibuvWGNNXplQC2ISt2YphDYY8oGTk0I2tY6f4IHVaq5XhhGWAh1M123E3lqn9NwW66OFD5i9vxzSLxUZQmxYAxeXpdxLfj8SLhDIkpGAoYzWpMs/L9xoCdKH1coAKWUO/bhY+Dc/crChbCIz7jaaVIBfTxEv6G8CkXMBGxVDod6GKboh4NVSjwWaEvguLJx1NVG7n71hbrcOkFG+PJm5ZzCFiBUc4dshOtDO30gsjZSi/RjNCxYA0GC7eUZZlhmNdC1hDp1e9tKlW9goLBtEpfMHiBoQ3EBakQXNJIs6lTc1ysYD5FKfV+hCEyVpCheOEQuChnlSnltOGLrJJyHKsA5nABW+unGWLryoA5vIst2e2hiApeu7VMWLQoOcoyb+QWArYJPLM6my3eIbz+nrZerEQcr9sO1QrYRgn5gOlrhPa2StWPKVh8237IzIXwce8hFlQ80zjHMSeoVEkWfpt5xtwfQJ3AlfEYBtdGIsoYJ4154epWPEblXMABy8t/LpXOCoCBygi1Um1XGbAw1SYJmIwKXOtiFPrpMpujRUmPdLQtBIwQcFfrCci5ZLVRkKEDVqRlxZvRi9TM7HTtLyoBzKSwv61Q9ayCZSY9MYvlo3YKpk7ACKDWmElV8pvlD3+pI+MCcvb5KSCzkTrEtz5ANM6fhYFQ+vJ41jAX1U4EbIWP+LucpOWqGmCWvIWtnG5n18JKSOSEO0KHMhSZnholXIZz3d5Qpc9xIBuHG7tiHdhmGGHQDKCRfzwcgNesHNd+V2tq1MrZrMDZdt+o724LA3hOC9GLulGnEMXK3hyvumE562AxQqQ8oMWppqHsvPuK86J5fKhS3/REz34sNambKOl+t0QM4eF1oXofX80nR5/TxP2fa0cBwwlMLwxdb7hSut323JDOjt0VqkAUiufTXV/JoidGHnyygMV6PskiBCaIhBvcBAH4eyt9DjkM4AQskw1JutKiVj0VIIfWqufQHPqac0AnbzktDOHlwZb7EGhv79+jVc8ZImPDEn+OSpJaC9arEjbOwZ/wlzCYC73Ex+wF30rOnxs+vxjmY4tY5jVrgnTmXw5zP8U5Tvh8rsTKAPsXOincbb4EWN/jcSJqt/OgrPFUtJUrIKGy2NDDuZJOBaZxx5RLHLgjbYxcwVi8JWlthspKi6W4cq0Ry8kEyVxpq8vZFq5sveo7S1mIK6l6RsGyYVng0oNkpo0rBIuYD3LdheJ9i3OhUrhum+mrcfr4l/CzoECqF4phfhYTDpj0TnBVoxSwVYlBfIJNiQcAZlxhiQMAbLgUXcyK4t2exmS/gih5gRF5BwvtGXHG8v6wJAMwwi5YBjAUhSu1Bn36CEyNCVhEVGJgYiWbEXlEZtZT8+ZlZ1oITxBq1beyemVVN+01RwL8J5zeaMF9asQpYLNM6MsBizlg3Ve2ahGrgM0ybiWATTrqqS6fGH4OMJyMlyJoALbJAKYMMySn2/fwnMcCT3ZLmn4geK/zPGSc6VyI5QQzGUgi+GooHSLxZIhjJDcXCYC/hxwGQplerXc8r57SjECpKRS8DXZrcCYSMLWFnmCW7Pd7cAJVPFp1s5tzFCxO8Mkw1Qp8gEvSvzXZmFUAbCwULGo9NRZxgYJVAEwr+BwKtlt9RcHgBmcA0P96t0O/7+GMHQRpKXtQpv5GixJP3anqxmHVjL8uEoegZytsYh+IIUuRRiAvTzYjTGtFawpaZG2VjHMUzBZV3/Caw71RperHFayNa0wP2vSn0Zay0T5VwUbdbpfvIWvG7c8DNju3gu2/pGAUMBnUTLevVrDZbBjCPlE015PgoLusI8yjnVUhYCuc6vAxEmbqVnCQDIWymF6o5MUBUzrDwsVYVxadbSG275C6LHHUrlD14woW4+ppiwvYiC9x5itYuwpgbL9EozHovstscwC7PUnB4nMo2N+vKRjRADW7HWUgxxR3JYO1fQQw/rpIcegFcrTMmgqYeiO8hekmOKcXrvJbGOEztiKgsBDnHq+6oWBxO2t8mt9uQ+IjTvHxAKOqOmPo26WW8PfdTVwcxesBsHFbyQyS83PIKQUVrKzYUsBck5/TATO6tJfRROsoYKZ3GWA4EvUVdgmRzqWAuWo+b4F6QX8Y5rUQsFxqAir7o7TqBmA5cYljfGszYge4feLJxyRUsPZpgMWzROyoYJdP+WkATPFqj08CLKcqpwPmnR2w1fcBtkIw3FRhhsG+ImDajUQffeUrCG16bgDm6gL6OcDifMWBaf6M/d3CKf4sTkXmUbsGlmUXlRSskU7uhAK1tKx4obmiitqnpk1xRvdZwPDVy/cDpju9yWe20wEjss648hQUOpMgnXVllRpWHRyFfrsKYG9nU7B2e8ZJYMIyh/2Fs/xRjM7YmxUAY9ZhWyB8KVuzjAKVadLC0LusAp4MGLxp+V7AYGqS2W/2acD2+LpI5ByJxwlc08gUUwiY2AIXenyLuEg35mD6Vf8Yc7CvANbmmyS4QNEpvkgYZEYx0LSkXcn8xruUnWZmOteFlbF8wGAmeGsCNvgCYN6xMfJEwJaZbl/CFQWALcuitMwFbBWIieMWX6Su0fmQrkRUA2ypwLi1FQmTLVxn2odVOhytejXAcJpPZ0udLqxRpAr1LJRNk53Wohpg7YaUndsBPkhUQiZOWqa64b6OzwN2WL6ry0pFgC2/omC9fGn5rILRgQ9eF/3GEXIrHg0PVq5SkvxmiBFUmC2VXGnhMDOBgHWww5kUrO3zzVl8ip/Kip/O/oXBe6SqgL3ga3Mphg+KYEFZg3wFmzWVxwM59/M/DxhuT8jrlqUbppFxvqJgK5AW52DapxVsja+Ltvu+fE3EinHgZbNZzLpIwcRyv/JaKdNCXO5XmwevyM+lYDOxmj/CKb6crhtKgjstniryNRvJh8F7eKc+MgbbaQEy8ZMpnaCcyecBW+HbtczNTfs2wnPwbkRJHZ6sYAQ3UxglbKsqmLvMr7OHL434CEkB2+KL0dxisgq23fKRFd7yqAuoCmDEvL2wRqcr2CzfOjjNv5niFD+1BDdPUFa4wfaKRiwOJ8xuZu2CbLuwox9Tfbg0lomwuut38rPia7+pM8pdMiszsiwzgh9SUJo0+ztk8WAGdPxNz4O3JQ6hS/UrodvVE2t8fdj/q54MbafAXc1yBwiZVaZDGyzgwwi5T5u3hgUyw92L+B8ImJKJ25eHe4KvR/HISf9cgVZGruwWFM0KVdetCLAZTvO7OMVPz7ZxL09XHOKw1pQO7/hKRzDSfVDzxJ2xLaSijXtSR3ric35WdPaGnxHxwxnMDSP/K4Ad8P0tValQwQu21vVkN9prHi/+je4pgC13OKRF3jr1sdPLygGzNLolSsBWH14UyubhjiylIX9ZdQsAYwXb4UocwZZbXkEJ2JIsYZOXu1b4enfPCNgCJYxP8SVhGGiBxQP8Bgp7yMwHjOI0kXIGl86ffFECXPzAVWkC5Cpl6Vkl8BnR4ws/HOHXc4VSWQGwldhGBzsEWSf2PP5uB+NBItzy1ev1xOP8iYDtRQl9m+Xi2ZBNJcA8fF9Ir3IsR6nzOt0vG6hizNdaLXZBjy9xlQDGth/2/rImw0+/9ElGwUSWNnVbu7ijdSiYPgdgM9/nL6x8XxWhBkjYe3fyMms/4E+XNBtJkYLBz5S0JlR42pPmlPMqvPFLSIYg9cRfEVBHYy2rToJkz5s0r5dJF2vWmH1Bwai+pIQZhvctqoXcdW6fDNgyt4RKgJEocwHWmecXEaK1JGc1vxQwfT99YAJG741gaLhZ5KyA4TQfpvgd7fSzUW6rkaGiowKW8e6ko3DTSBwoo7GR1Qy/eVPtueG3vwLYkn/HbXa3R3Z8eqJ2sRV65YCtcwAjOSVYboG7muWaj3omYEtB0jA46C0xvl56j4ZFgJmeFr08A9hSbFSVy/3sc6sKVdc7pRiwBSfpqWGcbgy0X2Qa+lkq0pn43Awe+w5SipJBGE1MirLq8E8hZVbPEtVPAraG1SLP0mSK7c3bCTpSOPo9bTac26VuFrAllqB8GOkthQy4pVFSifFWCrKEi2xgiDHbWx9JulxBwxKfRzXnraN+qsmqmJmDQZZbW7ktmNuyStUrKhif5j+aMkED/SQjPWW/DbAokp2kMWgp9++89US9E0WUGs8yul32gxftQgVj3/AO5A+Tsaz8LwLG5vmw8IlfXltDj+93RsDYe0PSg0+Xw3RlUiMnM+QGgVHCG151cD3HcTz3oFyWcVezXLMCly77pMhFQdWrbBS+5vULe/AVUqhUdS0bxE9AwW9Yox7uwH2TghtoWa6g/ba31RpfWvWqCja74y+o9Sh24LQ/aHWpNeFHUHx1dYNZIsdTxtCg2ZXOincHkp9GLKvW6Em7MpMVkE0zg7xa+JMXi9kXAZPhov2jLG7v1rK/zVX4I4Cti0sw0Mi4a1m+ZS+QXgoT6mBs2FpesFub9cQmE70AorZwmemZt8KWFgJWpmAY0YZ/n3uaJog/OgqCOYBpvhqvHV+kij9UmE3A7s28ks6XAWNz2aztchNhWZLIR1CzS9d5CqaTooYz425kSQoAIznncMZoWoGCLXdF7V0SLeN9kduxqmsK1imy2V3Cw2ic7/gNze7UVP2SpGGar+V1byTeF2fV4dpZlFWekXUFy3a3TFO6mOxxzBBJcC4np6Ml0IwK3I0slS9KVK9DzjmsrIYY2anZ7ko8g4Ne5DqvCkq9K1RdsdeyAHF9yliiQTEroSIxYEzujaz8Qr46OXir3knnPICx/ibZsOhwEBaEw47s0vQdPTiY+ewy1+slEDVKGXczS7yKkN1ey4xdZp4TOYhydob/vlKN9BZqiGlux6teDbBZwiwv5Z6D4/t3JnvaJTM4kw6EeXndiWTK3qwkK3GO51UBr8qA1faN9tr5tN1Ty8My3xn+FeTD/uVdN+sU5TXr1IBdPWA/39g3o7Vd1l7vasBq+07AagWrrVawGrBawX4kYG+1Xdpe7+6v12rAfgBg9zVgtdUKVgNWK9hPBCysA3x5BbteCXsg3qG2C9sVK1hnRPp1gC8O2BUr2JR81BJWK9g32d3d6IN89H/XIb64gl2p3U4pYB/DXW0XNf9qAWt9MMA+7DrGF7XXK+YLAPsYbuoo1wp29vGR8YWAffS9Osy1gp3XRtMPCRhDLKwjXSvYueyB4/Xx8X8BBgBn5X51fUcQFgAAAABJRU5ErkJggg== \ No newline at end of file diff --git a/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/controller/openclash.lua b/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/controller/openclash.lua new file mode 100755 index 0000000000..05112938ac --- /dev/null +++ b/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/controller/openclash.lua @@ -0,0 +1,128 @@ +module("luci.controller.openclash", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/openclash") then + return + end + + + entry({"admin", "services", "openclash"},alias("admin", "services", "openclash", "client"), _("OpenClash"), 50).dependent = true + entry({"admin", "services", "openclash", "client"},cbi("openclash/client"),_("Clash Global State"), 20).leaf = true + entry({"admin", "services", "openclash", "status"},call("action_status")).leaf=true + entry({"admin", "services", "openclash", "state"},call("action_state")).leaf=true + entry({"admin", "services", "openclash", "startlog"},call("action_start")).leaf=true + entry({"admin", "services", "openclash", "currentversion"},call("action_currentversion")) + entry({"admin", "services", "openclash", "lastversion"},call("action_lastversion")) + entry({"admin", "services", "openclash", "config"},cbi("openclash/config"),_("Server Config"), 30).leaf = true + entry({"admin", "services", "openclash", "settings"},cbi("openclash/settings"),_("Clash Settings"), 40).leaf = true + entry({"admin", "services", "openclash", "update"},cbi("openclash/update"),_("Update Setting"), 50).leaf = true + entry({"admin", "services", "openclash", "rule"},cbi("openclash/rule"),_("Rules Setting"), 60).leaf = true + entry({"admin", "services", "openclash", "log"},cbi("openclash/log"),_("Logs"), 70).leaf = true + + +end + + +local function is_running() + return luci.sys.call("pidof clash >/dev/null") == 0 +end + +local function is_web() + return luci.sys.call("pidof clash >/dev/null") == 0 +end + +local function is_watchdog() + return luci.sys.exec("ps |grep openclash_watchdog.sh |grep -v grep 2>/dev/null") +end + +local function config_check() + return luci.sys.call("grep '^Proxy Group:$' /etc/openclash/config.yml 1>/dev/null && grep '^Rule:$' /etc/openclash/config.yml 1>/dev/null && grep '^- GEOIP' /etc/openclash/config.yml 1>/dev/null && grep ' nameserver:$' /etc/openclash/config.yml 1>/dev/null") == 0 +end + +local function cn_port() + return luci.sys.exec("uci get openclash.config.cn_port 2>/dev/null") +end + +local function config() + return luci.sys.exec("ls -l --full-time /etc/openclash/config.bak|awk '{print $6,$7;}' 2>/dev/null") +end + +local function ipdb() + return luci.sys.exec("ls -l --full-time /etc/openclash/Country.mmdb|awk '{print $6,$7;}' 2>/dev/null") +end + +local function lhie1() + return luci.sys.exec("ls -l --full-time /etc/openclash/lhie1.yml|awk '{print $6,$7;}' 2>/dev/null") +end + +local function ConnersHua() + return luci.sys.exec("ls -l --full-time /etc/openclash/ConnersHua.yml|awk '{print $6,$7;}' 2>/dev/null") +end + +local function ConnersHua_return() + return luci.sys.exec("ls -l --full-time /etc/openclash/ConnersHua_return.yml|awk '{print $6,$7;}' 2>/dev/null") +end + +local function daip() + return luci.sys.exec("uci get network.lan.ipaddr") +end + +local function dase() + return luci.sys.exec("uci get openclash.config.dashboard_password 2>/dev/null") +end + +local function check_lastversion() + return luci.sys.exec("sh /usr/share/openclash/openclash_version.sh && sed -n '/^data:/,$p' /tmp/openclash_last_version 2>/dev/null") +end + +local function check_currentversion() + return luci.sys.exec("sed -n '/^data:/,$p' /etc/openclash/openclash_version 2>/dev/null") +end + +local function startlog() + return luci.sys.exec("sed -n '$p' /tmp/openclash_start.log 2>/dev/null") +end + +function action_status() + luci.http.prepare_content("application/json") + luci.http.write_json({ + clash = is_running(), + watchdog = is_watchdog(), + daip = daip(), + dase = dase(), + web = is_web(), + cn_port = cn_port(); + }) +end +function action_state() + luci.http.prepare_content("application/json") + luci.http.write_json({ + config_check = config_check(), + config = config(), + lhie1 = lhie1(), + ConnersHua = ConnersHua(), + ConnersHua_return = ConnersHua_return(), + ipdb = ipdb(); + }) +end + +function action_lastversion() + luci.http.prepare_content("application/json") + luci.http.write_json({ + lastversion = check_lastversion(); + }) +end + +function action_currentversion() + luci.http.prepare_content("application/json") + luci.http.write_json({ + currentversion = check_currentversion(); + }) +end + +function action_start() + luci.http.prepare_content("application/json") + luci.http.write_json({ + startlog = startlog(); + }) +end diff --git a/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/client.lua b/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/client.lua new file mode 100755 index 0000000000..f8ed6104de --- /dev/null +++ b/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/client.lua @@ -0,0 +1,46 @@ + +local NXFS = require "nixio.fs" +local SYS = require "luci.sys" +local HTTP = require "luci.http" +local DISP = require "luci.dispatcher" +local UTIL = require "luci.util" + +local t = { + {enable, disable} +} + +a = SimpleForm("apply") +a.reset = false +a.submit = false +s = a:section(Table, t) + +o = s:option(Button, "enable") +o.inputtitle = translate("Enable Clash") +o.inputstyle = "apply" +o.write = function() + os.execute("uci set openclash.config.enable=1 && uci commit openclash && /etc/init.d/openclash restart >/dev/null 2>&1 &") + HTTP.redirect(DISP.build_url("admin", "services", "openclash")) +end + +o = s:option(Button, "disable") +o.inputtitle = translate("Disable Clash") +o.inputstyle = "reset" +o.write = function() + os.execute("uci set openclash.config.enable=0 && uci commit openclash && /etc/init.d/openclash stop >/dev/null 2>&1 &") +end + +m = Map("openclash") +m.title = translate("OpenClash") +m.description = translate("A Clash Client For OpenWrt") +m.pageaction = false + +m:section(SimpleSection).template = "openclash/status" +m:section(SimpleSection).template = "openclash/state" +m:section(SimpleSection).template = "openclash/myip" + +d = Map("openclash") +d.title = translate("Technical Support") +d.pageaction = false +d:section(SimpleSection).template = "openclash/developer" + +return m, a, d diff --git a/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/config.lua b/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/config.lua new file mode 100755 index 0000000000..20fad5b89e --- /dev/null +++ b/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/config.lua @@ -0,0 +1,74 @@ + +local NXFS = require "nixio.fs" +local SYS = require "luci.sys" +local HTTP = require "luci.http" +local DISP = require "luci.dispatcher" +local UTIL = require "luci.util" + + +local http = luci.http + +ful = SimpleForm("upload", translate("Server Configuration"), nil) +ful.reset = false +ful.submit = false + +sul =ful:section(SimpleSection, "", translate("")) +o = sul:option(FileUpload, "") +o.title = translate("Upload Clash Configuration") +o.template = "openclash/clash_upload" +o.description = translate("NB: Rename your config file to config.yml before upload. file will save to /etc/openclash") +um = sul:option(DummyValue, "", nil) +um.template = "openclash/clash_dvalue" + +local dir, fd +dir = "/etc/openclash/" +http.setfilehandler( + function(meta, chunk, eof) + if not fd then + if not meta then return end + + if meta and chunk then fd = nixio.open(dir .. meta.file, "w") end + + if not fd then + um.value = translate("upload file error.") + return + end + end + if chunk and fd then + fd:write(chunk) + end + if eof and fd then + fd:close() + fd = nil + um.value = translate("File saved to") .. ' "/etc/openclash/' .. meta.file .. '"' + SYS.exec("cp /etc/openclash/config.yml /etc/openclash/config.bak") + end + end +) + +if luci.http.formvalue("upload") then + local f = luci.http.formvalue("ulfile") + if #f <= 0 then + um.value = translate("No specify upload file.") + end +end + +m = Map("openclash") +s = m:section(TypedSection, "openclash") +s.anonymous = true +s.addremove=false + + +local conf = "/etc/openclash/config.yml" +sev = s:option(TextValue, "conf") +sev.readonly=true +sev.description = translate("Changes to config file must be made from source") +sev.rows = 20 +sev.wrap = "off" +sev.cfgvalue = function(self, section) + return NXFS.readfile(conf) or "" +end +sev.write = function(self, section, value) +end + +return ful , m diff --git a/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/log.lua b/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/log.lua new file mode 100755 index 0000000000..11d09bf203 --- /dev/null +++ b/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/log.lua @@ -0,0 +1,28 @@ +-- +local NXFS = require "nixio.fs" +local SYS = require "luci.sys" +local HTTP = require "luci.http" +local DISP = require "luci.dispatcher" +local UTIL = require "luci.util" + + +m = Map("openclash", translate("Server logs")) +s = m:section(TypedSection, "openclash") +m.pageaction = false +s.anonymous = true +s.addremove=false + +local clog = "/tmp/openclash.log" +log = s:option(TextValue, "clog") +log.readonly=true +log.description = translate("") +log.rows = 29 +log.wrap = "off" +log.cfgvalue = function(self, section) + return NXFS.readfile(clog) or "" +end +log.write = function(self, section, value) + NXFS.writefile(clog, value:gsub("\r\n", "\n")) +end + +return m \ No newline at end of file diff --git a/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/rule.lua b/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/rule.lua new file mode 100755 index 0000000000..72f587d529 --- /dev/null +++ b/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/rule.lua @@ -0,0 +1,123 @@ +-- +local NXFS = require "nixio.fs" +local SYS = require "luci.sys" +local HTTP = require "luci.http" +local DISP = require "luci.dispatcher" +local UTIL = require "luci.util" + +m = Map("openclash", translate("Rules Setting")) +s = m:section(TypedSection, "openclash") +s.anonymous = true + +o = s:option(ListValue, "enable_custom_clash_rules", translate("Custom Clash Rules")) +o.description = translate("Use Custom Rules") +o:value("0", translate("Disable Custom Clash Rules")) +o:value("1", translate("Enable Custom Clash Rules")) +o.default = 0 + +o = s:option(ListValue, "rule_source", translate("Enable Other Rules")) +o.description = translate("Use Other Rules") +o:value("0", translate("Disable Other Rules")) +o:value("lhie1", translate("lhie1 Rules")) +o:value("ConnersHua", translate("ConnersHua Rules")) +o:value("ConnersHua_return", translate("ConnersHua Return Rules")) + +os.execute("awk '/Proxy Group:/,/Rule:/{print}' /etc/openclash/config.yml |grep ^- |grep name: |sed 's/,.*//' |awk -F 'name: ' '{print $2}' |sed 's/\"//g' >/tmp/Proxy_Group 2>&1") +os.execute("echo 'DIRECT' >>/tmp/Proxy_Group") +os.execute("echo 'REJECT' >>/tmp/Proxy_Group") +file = io.open("/tmp/Proxy_Group", "r"); + +o = s:option(ListValue, "GlobalTV", translate("GlobalTV")) +o:depends("rule_source", "lhie1") +o:depends("rule_source", "ConnersHua") + for l in file:lines() do + o:value(l) + end + file:seek("set") +o = s:option(ListValue, "AsianTV", translate("AsianTV")) +o:depends("rule_source", "lhie1") +o:depends("rule_source", "ConnersHua") + for l in file:lines() do + o:value(l) + end + file:seek("set") +o = s:option(ListValue, "Proxy", translate("Proxy")) +o:depends("rule_source", "lhie1") +o:depends("rule_source", "ConnersHua") +o:depends("rule_source", "ConnersHua_return") + for l in file:lines() do + o:value(l) + end + file:seek("set") +o = s:option(ListValue, "Apple", translate("Apple")) +o:depends("rule_source", "lhie1") +o:depends("rule_source", "ConnersHua") + for l in file:lines() do + o:value(l) + end + file:seek("set") +o = s:option(ListValue, "AdBlock", translate("AdBlock")) +o:depends("rule_source", "lhie1") +o:depends("rule_source", "ConnersHua") + for l in file:lines() do + o:value(l) + end + file:seek("set") +o = s:option(ListValue, "Domestic", translate("Domestic")) +o:depends("rule_source", "lhie1") +o:depends("rule_source", "ConnersHua") + for l in file:lines() do + o:value(l) + end + file:seek("set") +o = s:option(ListValue, "Others", translate("Others")) +o:depends("rule_source", "lhie1") +o:depends("rule_source", "ConnersHua") +o:depends("rule_source", "ConnersHua_return") +o.description = translate("Choose Proxy Group, Base On Your Servers Group in config.yml") + for l in file:lines() do + o:value(l) + end + file:close() + +custom_rules = s:option(Value, "custom_rules", translate("Custom Clash Rules Here"), translate("For More Go Github:https://github.com/Dreamacro/clash")) +custom_rules.template = "cbi/tvalue" +custom_rules.rows = 20 +custom_rules.wrap = "off" +custom_rules:depends("enable_custom_clash_rules", 1) + +function custom_rules.cfgvalue(self, section) + return NXFS.readfile("/etc/config/openclash_custom_rules.list") or "" +end +function custom_rules.write(self, section, value) + if value then + value = value:gsub("\r\n", "\n") + NXFS.writefile("/etc/config/openclash_custom_rules.list", value) + end +end + +local t = { + {Commit, Apply} +} + +a = SimpleForm("apply") +a.reset = false +a.submit = false +s = a:section(Table, t) + +o = s:option(Button, "Commit") +o.inputtitle = translate("Commit Configurations") +o.inputstyle = "apply" +o.write = function() + os.execute("uci commit openclash") +end + +o = s:option(Button, "Apply") +o.inputtitle = translate("Apply Configurations") +o.inputstyle = "apply" +o.write = function() + os.execute("uci commit openclash && /etc/init.d/openclash restart >/dev/null 2>&1 &") + HTTP.redirect(DISP.build_url("admin", "services", "openclash")) +end + +return m , a diff --git a/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/settings.lua b/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/settings.lua new file mode 100755 index 0000000000..65d7f3dfd0 --- /dev/null +++ b/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/settings.lua @@ -0,0 +1,107 @@ + +local NXFS = require "nixio.fs" +local SYS = require "luci.sys" +local HTTP = require "luci.http" +local DISP = require "luci.dispatcher" +local UTIL = require "luci.util" + +local t = { + {Commit, Apply} +} + +a = SimpleForm("apply") +a.reset = false +a.submit = false +s = a:section(Table, t) + +o = s:option(Button, "Commit") +o.inputtitle = translate("Commit Configurations") +o.inputstyle = "apply" +o.write = function() + os.execute("uci commit openclash") +end + +o = s:option(Button, "Apply") +o.inputtitle = translate("Apply Configurations") +o.inputstyle = "apply" +o.write = function() + os.execute("uci commit openclash && /etc/init.d/openclash restart >/dev/null 2>&1 &") + HTTP.redirect(DISP.build_url("admin", "services", "openclash")) +end + +m = Map("openclash", translate("Clash Settings")) +m.pageaction = false + +s = m:section(TypedSection, "openclash") +s.anonymous = true + +o = s:option(ListValue, "en_mode", translate("Select Mode")) +o.description = translate("Will to Take Over Your General Settings, Network Error Try Flush DNS Cache") +o:value("0", translate("Disable Mode Control")) +o:value("redir-host", translate("redir-host")) +o:value("fake-ip", translate("fake-ip")) +o.default = 0 + +o = s:option(ListValue, "enable_custom_dns", translate("Custom DNS Setting")) +o.description = translate("Set OpenClash Upstream DNS Resolve Server") +o:value("0", translate("Disable Custom DNS Setting")) +o:value("1", translate("Enable Custom DNS Setting")) +o.default = 0 + +o = s:option(Value, "proxy_port") +o.title = translate("Clash config redir-port") +o.default = 7892 +o.datatype = "port" +o.rmempty = false +o.description = translate("Clash Redir Port, Please Make Sure Ports Available") + +o = s:option(Value, "cn_port") +o.title = translate("Dashboard Port") +o.default = 9090 +o.datatype = "port" +o.rmempty = false +o.description = translate("Dashboard hostname is Your Router IP. Dashboard:192.168.1.1/openclash") + +o = s:option(Value, "dashboard_password") +o.title = translate("Dashboard Secret") +o.default = 123456 +o.rmempty = false +o.description = translate("Set Dashboard Secret") + +-- [[ Edit Server ]] -- +s = m:section(TypedSection, "dns_servers", translate("Add Custom DNS Servers")) +s.anonymous = true +s.addremove = true +s.sortable = false +s.template = "cbi/tblsection" +s.rmempty = false + +---- group +o = s:option(ListValue, "group", translate("DNS Server Group")) +o:value("nameserver", translate("Nameserver")) +o:value("fallback", translate("Fallback")) +o.default = "udp" +o.rempty = false + +---- IP address +o = s:option(Value, "ip", translate("DNS Server IP")) +o.datatype = "or(host, string)" +o.rmempty = false + +---- port +o = s:option(Value, "port", translate("DNS Server Port")) +o.placeholder = "53" +o.datatype = "port" +o.rempty = false + +---- type +o = s:option(ListValue, "type", translate("DNS Server Type")) +o:value("udp", translate("udp")) +o:value("tcp", translate("tcp")) +o:value("tls", translate("tls")) +o.default = "udp" +o.rempty = false + +return m, a + + diff --git a/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/update.lua b/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/update.lua new file mode 100755 index 0000000000..cb705276cd --- /dev/null +++ b/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/update.lua @@ -0,0 +1,97 @@ +-- +local NXFS = require "nixio.fs" +local SYS = require "luci.sys" +local HTTP = require "luci.http" +local DISP = require "luci.dispatcher" +local UTIL = require "luci.util" + +m = Map("openclash", translate("Update Setting")) +s = m:section(TypedSection, "openclash", translate("Subscription Update")) +s.anonymous = true + +o = s:option(Flag, "auto_update", translate("Auto Update")) +o.description = translate("Auto Update Server subscription") +o.default=0 +o.rmempty = false + +o = s:option(ListValue, "auto_update_time", translate("Update time (every day)")) +for t = 0,23 do +o:value(t, t..":00") +end +o.default=0 +o.rmempty = false + +o = s:option(Value, "subscribe_url") +o.title = translate("Subcription Url") +o.description = translate("Server Subscription Address") +o.rmempty = true + +o = s:option(Button,translate("Config File Update")) +o.title = translate("Update Subcription") +o.inputtitle = translate("Update Configuration") +o.inputstyle = "reload" +o.write = function() + SYS.call("uci commit openclash && sh /usr/share/openclash/openclash.sh >/dev/null 2>&1 &") + HTTP.redirect(DISP.build_url("admin", "services", "openclash")) +end + +f = m:section(TypedSection, "openclash", translate("Other Rules Update(Only in Use)")) +f.anonymous = true +o = f:option(Flag, "other_rule_auto_update", translate("Auto Update")) +o.description = translate("Auto Update Other Rules") +o.default=0 +o.rmempty = false + +o = f:option(ListValue, "other_rule_update_week_time", translate("Update Time (Every Week)")) +o:value("1", translate("Every Monday")) +o:value("2", translate("Every Tuesday")) +o:value("3", translate("Every Wednesday")) +o:value("4", translate("Every Thursday")) +o:value("5", translate("Every Friday")) +o:value("6", translate("Every Saturday")) +o:value("7", translate("Every Sunday")) +o.default=1 + +o = f:option(ListValue, "other_rule_update_day_time", translate("Update time (every day)")) +for t = 0,23 do +o:value(t, t..":00") +end +o.default=0 + +o = f:option(Button,translate("Other Rules Update")) +o.title = translate("Update Other Rules") +o.inputtitle = translate("Start Update Other Rules") +o.inputstyle = "reload" +o.write = function() + SYS.call("uci commit openclash && sh /usr/share/openclash/openclash_rule.sh >/dev/null 2>&1 &") + HTTP.redirect(DISP.build_url("admin", "services", "openclash")) +end + +u = m:section(TypedSection, "openclash", translate("GEOIP(By MaxMind) Update")) +u.anonymous = true +o = u:option(Button,translate("GEOIP Database Update")) +o.title = translate("Update GEOIP Database") +o.inputtitle = translate("Start Update GEOIP Database") +o.inputstyle = "reload" +o.write = function() + SYS.call("sh /usr/share/openclash/openclash_ipdb.sh >/dev/null 2>&1 &") + HTTP.redirect(DISP.build_url("admin", "services", "openclash")) +end + +local t = { + {Commit} +} + +a = SimpleForm("apply") +a.reset = false +a.submit = false +s = a:section(Table, t) + +o = s:option(Button, "Commit") +o.inputtitle = translate("Commit Configurations") +o.inputstyle = "apply" +o.write = function() + os.execute("uci commit openclash") +end + +return m , a diff --git a/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/clash_dvalue.htm b/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/clash_dvalue.htm new file mode 100755 index 0000000000..73a617d846 --- /dev/null +++ b/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/clash_dvalue.htm @@ -0,0 +1,8 @@ +<%+cbi/valueheader%> + +<% + local val = self:cfgvalue(section) or self.default or "" + write(pcdata(val)) +%> + +<%+cbi/valuefooter%> diff --git a/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/clash_upload.htm b/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/clash_upload.htm new file mode 100755 index 0000000000..6466ee14d6 --- /dev/null +++ b/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/clash_upload.htm @@ -0,0 +1,5 @@ +<%+cbi/valueheader%> + + + +<%+cbi/valuefooter%> diff --git a/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/developer.htm b/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/developer.htm new file mode 100755 index 0000000000..cd044db96d --- /dev/null +++ b/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/developer.htm @@ -0,0 +1,56 @@ +
+ + + + +
Clash 主程序发布: <%:Collecting data...%> OpenClash 客户端发布: <%:Collecting data...%>
Clash 主程序开发: Dreamacro <%:Collecting data...%> OpenClash 客户端开发: vernesong <%:Collecting data...%>
Clash 客户端开发: frainzy1477 <%:Collecting data...%> MyIP: SukkaW <%:Collecting data...%>
+
+ + \ No newline at end of file diff --git a/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/myip.htm b/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/myip.htm new file mode 100755 index 0000000000..6dcfc988b4 --- /dev/null +++ b/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/myip.htm @@ -0,0 +1,28 @@ + + +
+ + +
+ + +
+
+ + + + \ No newline at end of file diff --git a/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/state.htm b/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/state.htm new file mode 100755 index 0000000000..c07860eaa2 --- /dev/null +++ b/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/state.htm @@ -0,0 +1,28 @@ + +
+ + + + + +
一些必要的状态显示,运行前请确保各项目显示正常,需要更新请到更新设置页面操作
OpenClash 配置文件状态 <%:Collecting data...%> OpenClash 配置文件更新日期 <%:Collecting data...%>
GEOIP(By MaxMind) 数据库日期 <%:Collecting data...%> lhie1 规则更新日期 <%:Collecting data...%>
ConnersHua 规则更新日期 <%:Collecting data...%> ConnersHua 回国规则更新日期 <%:Collecting data...%>
+
+ + \ No newline at end of file diff --git a/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/status.htm b/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/status.htm new file mode 100755 index 0000000000..5f87774979 --- /dev/null +++ b/package/cnsztl/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/status.htm @@ -0,0 +1,95 @@ +
+ + +
+ + + + + + +
<%:Collecting data...%>
OpenClash 成功启动后请耐心等待运行,然后刷新下方网站访问检查等待连接正常后再使用
OpenClash 主程序 <%:Collecting data...%> OpenClash 守护程序 <%:Collecting data...%>
控制面板登录IP <%:Collecting data...%> 控制面板登录密码 <%:Collecting data...%>
Yacd 控制面板 <%:Collecting data...%> Dashboard 控制面板 <%:Collecting data...%>
+
+ + diff --git a/package/cnsztl/luci-app-openclash/files/usr/share/openclash/dashboard/img/33343e6117c37aaef8886179007ba6b5.png b/package/cnsztl/luci-app-openclash/files/usr/share/openclash/dashboard/img/33343e6117c37aaef8886179007ba6b5.png new file mode 100755 index 0000000000..6798639d0f Binary files /dev/null and b/package/cnsztl/luci-app-openclash/files/usr/share/openclash/dashboard/img/33343e6117c37aaef8886179007ba6b5.png differ diff --git a/package/cnsztl/luci-app-openclash/files/usr/share/openclash/dashboard/index.html b/package/cnsztl/luci-app-openclash/files/usr/share/openclash/dashboard/index.html new file mode 100755 index 0000000000..6242f19ebc --- /dev/null +++ b/package/cnsztl/luci-app-openclash/files/usr/share/openclash/dashboard/index.html @@ -0,0 +1,11 @@ + + + + + + Clash + + +
+ + diff --git a/package/cnsztl/luci-app-openclash/files/usr/share/openclash/dashboard/js/1.bundle.5b2a02b81ea75793d649.min.js b/package/cnsztl/luci-app-openclash/files/usr/share/openclash/dashboard/js/1.bundle.5b2a02b81ea75793d649.min.js new file mode 100755 index 0000000000..b8ebfead5f --- /dev/null +++ b/package/cnsztl/luci-app-openclash/files/usr/share/openclash/dashboard/js/1.bundle.5b2a02b81ea75793d649.min.js @@ -0,0 +1,93 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[1],[function(e,t,n){"use strict";e.exports=n(168)},function(e,t,n){e.exports=n(172)()},function(e,t,n){"use strict";t.__esModule=!0;var r,o=n(80),i=(r=o)&&r.__esModule?r:{default:r};t.default=i.default||function(e){for(var t=1;t=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}function s(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(s){o={error:s}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a}var l="An invariant failed, however the error is obfuscated because this is an production build.",u=[];Object.freeze(u);var c={};function f(){return++Oe.mobxGuid}function d(e){throw h(!1,e),"X"}function h(e,t){if(!e)throw new Error("[mobx] "+(t||l))}Object.freeze(c);function p(e){var t=!1;return function(){if(!t)return t=!0,e.apply(this,arguments)}}var v=function(){};function g(e){return null!==e&&"object"==typeof e}function y(e){if(null===e||"object"!=typeof e)return!1;var t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}function m(e,t,n){Object.defineProperty(e,t,{enumerable:!1,writable:!0,configurable:!0,value:n})}function b(e,t){var n="isMobX"+e;return t.prototype[n]=!0,function(e){return g(e)&&!0===e[n]}}function w(e){return Array.isArray(e)||tn(e)}function _(e){return e instanceof Map}function S(e){return e instanceof Set}function x(e){var t=new Set;for(var n in e)t.add(n);return Object.getOwnPropertySymbols(e).forEach(function(n){Object.getOwnPropertyDescriptor(e,n).enumerable&&t.add(n)}),Array.from(t)}function C(e){return e&&e.toString?e.toString():new String(e).toString()}function k(e){return null===e?null:"object"==typeof e?""+e:e}var T=Symbol("mobx administration"),O=function(){function e(e){void 0===e&&(e="Atom@"+f()),this.name=e,this.isPendingUnobservation=!1,this.isBeingObserved=!1,this.observers=new Set,this.diffValue=0,this.lastAccessedBy=0,this.lowestObserverState=ae.NOT_TRACKING}return e.prototype.onBecomeObserved=function(){this.onBecomeObservedListeners&&this.onBecomeObservedListeners.forEach(function(e){return e()})},e.prototype.onBecomeUnobserved=function(){this.onBecomeUnobservedListeners&&this.onBecomeUnobservedListeners.forEach(function(e){return e()})},e.prototype.reportObserved=function(){return je(this)},e.prototype.reportChanged=function(){Le(),function(e){if(e.lowestObserverState===ae.STALE)return;e.lowestObserverState=ae.STALE,e.observers.forEach(function(t){t.dependenciesState===ae.UP_TO_DATE&&(t.isTracing!==se.NONE&&ze(t,e),t.onBecomeStale()),t.dependenciesState=ae.STALE})}(this),Ne()},e.prototype.toString=function(){return this.name},e}(),E=b("Atom",O);function P(e,t,n){void 0===t&&(t=v),void 0===n&&(n=v);var r=new O(e);return t!==v&&rt(r,t),n!==v&&ot(r,n),r}var R={identity:function(e,t){return e===t},structural:function(e,t){return _n(e,t)},default:function(e,t){return Object.is(e,t)}},M=Symbol("mobx did run lazy initializers"),A=Symbol("mobx pending decorators"),I={},L={};function N(e){if(!0!==e[M]){var t=e[A];if(t)for(var n in m(e,M,!0),t){var r=t[n];r.propertyCreator(e,r.prop,r.descriptor,r.decoratorTarget,r.decoratorArguments)}}}function j(e,t){return function(){var n,r,o=function(r,o,a,s){if(!0===s)return t(r,o,a,r,n),null;if(!Object.prototype.hasOwnProperty.call(r,A)){var l=r[A];m(r,A,i({},l))}return r[A][o]={prop:o,propertyCreator:t,descriptor:a,decoratorTarget:r,decoratorArguments:n},function(e,t){var n=t?I:L;return n[e]||(n[e]={configurable:!0,enumerable:t,get:function(){return N(this),this[e]},set:function(t){N(this),this[e]=t}})}(o,e)};return(2===(r=arguments).length||3===r.length)&&"string"==typeof r[1]||4===r.length&&!0===r[3]?(n=u,o.apply(null,arguments)):(n=Array.prototype.slice.call(arguments),o)}}function z(e,t,n){return Ct(e)?e:Array.isArray(e)?K.array(e,{name:n}):y(e)?K.object(e,void 0,{name:n}):_(e)?K.map(e,{name:n}):S(e)?K.set(e,{name:n}):e}function D(e){return e}function U(t){h(t);var n=j(!0,function(e,n,r,o,i){var a=r?r.initializer?r.initializer.call(e):r.value:void 0;fn(e).addObservableProp(n,a,t)}),r=(void 0!==e&&e.env,n);return r.enhancer=t,r}var F={deep:!0,name:void 0,defaultDecorator:void 0,proxy:!0};function B(e){return null==e?F:"string"==typeof e?{name:e,deep:!0,proxy:!0}:e}Object.freeze(F);var W=U(z),H=U(function(e,t,n){return null==e?e:gn(e)||tn(e)||an(e)||un(e)?e:Array.isArray(e)?K.array(e,{name:n,deep:!1}):y(e)?K.object(e,void 0,{name:n,deep:!1}):_(e)?K.map(e,{name:n,deep:!1}):S(e)?K.set(e,{name:n,deep:!1}):d(!1)}),G=U(D),V=U(function(e,t,n){return _n(e,t)?t:e});function $(e){return e.defaultDecorator?e.defaultDecorator.enhancer:!1===e.deep?D:z}var Y={box:function(e,t){arguments.length>2&&q("box");var n=B(t);return new le(e,$(n),n.name,!0,n.equals)},array:function(e,t){arguments.length>2&&q("array");var n=B(t);return function(e,t,n,r){void 0===n&&(n="ObservableArray@"+f());void 0===r&&(r=!1);var o=new Jt(n,t,r);i=o.values,a=T,s=o,Object.defineProperty(i,a,{enumerable:!1,writable:!1,configurable:!0,value:s});var i,a,s;var l=new Proxy(o.values,Qt);if(o.proxy=l,e&&e.length){var u=re(!0);o.spliceWithArray(0,0,e),oe(u)}return l}(e,$(n),n.name)},map:function(e,t){arguments.length>2&&q("map");var n=B(t);return new on(e,$(n),n.name)},set:function(e,t){arguments.length>2&&q("set");var n=B(t);return new ln(e,$(n),n.name)},object:function(e,t,n){"string"==typeof arguments[1]&&q("object");var r=B(n);if(!1===r.proxy)return lt({},e,t,r);var o=ut(r),i=function(e){var t=new Proxy(e,Ht);return e[T].proxy=t,t}(lt({},void 0,void 0,r));return ct(i,e,t,o),i},ref:G,shallow:H,deep:W,struct:V},K=function(e,t,n){if("string"==typeof arguments[1])return W.apply(null,arguments);if(Ct(e))return e;var r=y(e)?K.object(e,t,n):Array.isArray(e)?K.array(e,t):_(e)?K.map(e,t):S(e)?K.set(e,t):e;if(r!==e)return r;d(!1)};function q(e){d("Expected one or two arguments to observable."+e+". Did you accidentally try to use observable."+e+" as decorator?")}Object.keys(Y).forEach(function(e){return K[e]=Y[e]});var Q=j(!1,function(e,t,n,r,o){var a=n.get,s=n.set,l=o[0]||{};fn(e).addComputedProp(e,t,i({get:a,set:s,context:e},l))}),J=Q({equals:R.structural}),X=function(e,t,n){if("string"==typeof t)return Q.apply(null,arguments);if(null!==e&&"object"==typeof e&&1===arguments.length)return Q.apply(null,arguments);var r="object"==typeof t?t:{};return r.get=e,r.set="function"==typeof t?t:r.set,r.name=r.name||e.name||"",new ce(r)};function Z(e,t,n){var r=function(){return ee(e,t,n||this,arguments)};return r.isMobxAction=!0,r}function ee(e,t,n,r){var o=function(e,t,n,r){var o=!1,i=0;var a=we();Le();var s=re(!0);return{prevDerivation:a,prevAllowStateChanges:s,notifySpy:o,startTime:i}}(),i=!0;try{var a=t.apply(n,r);return i=!1,a}finally{i?(Oe.suppressReactionErrors=i,te(o),Oe.suppressReactionErrors=!1):te(o)}}function te(e){oe(e.prevAllowStateChanges),Ne(),_e(e.prevDerivation),e.notifySpy}function ne(e,t){var n,r=re(e);try{n=t()}finally{oe(r)}return n}function re(e){var t=Oe.allowStateChanges;return Oe.allowStateChanges=e,t}function oe(e){Oe.allowStateChanges=e}function ie(e){var t,n=Oe.computationDepth;Oe.computationDepth=0;try{t=e()}finally{Oe.computationDepth=n}return t}X.struct=J;var ae,se,le=function(e){function t(t,n,r,o,i){void 0===r&&(r="ObservableValue@"+f()),void 0===o&&(o=!0),void 0===i&&(i=R.default);var a=e.call(this,r)||this;return a.enhancer=n,a.name=r,a.equals=i,a.hasUnreportedChange=!1,a.value=n(t,void 0,r),a}return function(e,t){function n(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}(t,e),t.prototype.dehanceValue=function(e){return void 0!==this.dehancer?this.dehancer(e):e},t.prototype.set=function(e){this.value;if((e=this.prepareNewValue(e))!==Oe.UNCHANGED){0,this.setNewValue(e)}},t.prototype.prepareNewValue=function(e){if(ge(this),Gt(this)){var t=$t(this,{object:this,type:"update",newValue:e});if(!t)return Oe.UNCHANGED;e=t.newValue}return e=this.enhancer(e,this.value,this.name),this.equals(this.value,e)?Oe.UNCHANGED:e},t.prototype.setNewValue=function(e){var t=this.value;this.value=e,this.reportChanged(),Yt(this)&&qt(this,{type:"update",object:this,newValue:e,oldValue:t})},t.prototype.get=function(){return this.reportObserved(),this.dehanceValue(this.value)},t.prototype.intercept=function(e){return Vt(this,e)},t.prototype.observe=function(e,t){return t&&e({object:this,type:"update",newValue:this.value,oldValue:void 0}),Kt(this,e)},t.prototype.toJSON=function(){return this.get()},t.prototype.toString=function(){return this.name+"["+this.value+"]"},t.prototype.valueOf=function(){return k(this.get())},t.prototype[Symbol.toPrimitive]=function(){return this.valueOf()},t}(O),ue=b("ObservableValue",le),ce=function(){function e(e){this.dependenciesState=ae.NOT_TRACKING,this.observing=[],this.newObserving=null,this.isBeingObserved=!1,this.isPendingUnobservation=!1,this.observers=new Set,this.diffValue=0,this.runId=0,this.lastAccessedBy=0,this.lowestObserverState=ae.UP_TO_DATE,this.unboundDepsCount=0,this.__mapid="#"+f(),this.value=new de(null),this.isComputing=!1,this.isRunningSetter=!1,this.isTracing=se.NONE,this.derivation=e.get,this.name=e.name||"ComputedValue@"+f(),e.set&&(this.setter=Z(this.name+"-setter",e.set)),this.equals=e.equals||(e.compareStructural||e.struct?R.structural:R.default),this.scope=e.context,this.requiresReaction=!!e.requiresReaction,this.keepAlive=!!e.keepAlive}return e.prototype.onBecomeStale=function(){!function(e){if(e.lowestObserverState!==ae.UP_TO_DATE)return;e.lowestObserverState=ae.POSSIBLY_STALE,e.observers.forEach(function(t){t.dependenciesState===ae.UP_TO_DATE&&(t.dependenciesState=ae.POSSIBLY_STALE,t.isTracing!==se.NONE&&ze(t,e),t.onBecomeStale())})}(this)},e.prototype.onBecomeObserved=function(){this.onBecomeObservedListeners&&this.onBecomeObservedListeners.forEach(function(e){return e()})},e.prototype.onBecomeUnobserved=function(){this.onBecomeUnobservedListeners&&this.onBecomeUnobservedListeners.forEach(function(e){return e()})},e.prototype.get=function(){this.isComputing&&d("Cycle detected in computation "+this.name+": "+this.derivation),0!==Oe.inBatch||0!==this.observers.size||this.keepAlive?(je(this),pe(this)&&this.trackAndCompute()&&function(e){if(e.lowestObserverState===ae.STALE)return;e.lowestObserverState=ae.STALE,e.observers.forEach(function(t){t.dependenciesState===ae.POSSIBLY_STALE?t.dependenciesState=ae.STALE:t.dependenciesState===ae.UP_TO_DATE&&(e.lowestObserverState=ae.UP_TO_DATE)})}(this)):pe(this)&&(this.warnAboutUntrackedRead(),Le(),this.value=this.computeValue(!1),Ne());var e=this.value;if(he(e))throw e.cause;return e},e.prototype.peek=function(){var e=this.computeValue(!1);if(he(e))throw e.cause;return e},e.prototype.set=function(e){if(this.setter){h(!this.isRunningSetter,"The setter of computed value '"+this.name+"' is trying to update itself. Did you intend to update an _observable_ value, instead of the computed property?"),this.isRunningSetter=!0;try{this.setter.call(this.scope,e)}finally{this.isRunningSetter=!1}}else h(!1,!1)},e.prototype.trackAndCompute=function(){var e=this.value,t=this.dependenciesState===ae.NOT_TRACKING,n=this.computeValue(!0),r=t||he(e)||he(n)||!this.equals(e,n);return r&&(this.value=n),r},e.prototype.computeValue=function(e){var t;if(this.isComputing=!0,Oe.computationDepth++,e)t=ye(this,this.derivation,this.scope);else if(!0===Oe.disableErrorBoundaries)t=this.derivation.call(this.scope);else try{t=this.derivation.call(this.scope)}catch(n){t=new de(n)}return Oe.computationDepth--,this.isComputing=!1,t},e.prototype.suspend=function(){this.keepAlive||(me(this),this.value=void 0)},e.prototype.observe=function(e,t){var n=this,r=!0,o=void 0;return Ze(function(){var i=n.get();if(!r||t){var a=we();e({type:"update",object:n,newValue:i,oldValue:o}),_e(a)}r=!1,o=i})},e.prototype.warnAboutUntrackedRead=function(){},e.prototype.toJSON=function(){return this.get()},e.prototype.toString=function(){return this.name+"["+this.derivation.toString()+"]"},e.prototype.valueOf=function(){return k(this.get())},e.prototype[Symbol.toPrimitive]=function(){return this.valueOf()},e}(),fe=b("ComputedValue",ce);!function(e){e[e.NOT_TRACKING=-1]="NOT_TRACKING",e[e.UP_TO_DATE=0]="UP_TO_DATE",e[e.POSSIBLY_STALE=1]="POSSIBLY_STALE",e[e.STALE=2]="STALE"}(ae||(ae={})),function(e){e[e.NONE=0]="NONE",e[e.LOG=1]="LOG",e[e.BREAK=2]="BREAK"}(se||(se={}));var de=function(){return function(e){this.cause=e}}();function he(e){return e instanceof de}function pe(e){switch(e.dependenciesState){case ae.UP_TO_DATE:return!1;case ae.NOT_TRACKING:case ae.STALE:return!0;case ae.POSSIBLY_STALE:for(var t=we(),n=e.observing,r=n.length,o=0;o0;Oe.computationDepth>0&&t&&d(!1),Oe.allowStateChanges||!t&&"strict"!==Oe.enforceActions||d(!1)}function ye(e,t,n){Se(e),e.newObserving=new Array(e.observing.length+100),e.unboundDepsCount=0,e.runId=++Oe.runId;var r,o=Oe.trackingDerivation;if(Oe.trackingDerivation=e,!0===Oe.disableErrorBoundaries)r=t.call(n);else try{r=t.call(n)}catch(i){r=new de(i)}return Oe.trackingDerivation=o,function(e){for(var t=e.observing,n=e.observing=e.newObserving,r=ae.UP_TO_DATE,o=0,i=e.unboundDepsCount,a=0;ar&&(r=s.dependenciesState)}n.length=o,e.newObserving=null,i=t.length;for(;i--;){var s=t[i];0===s.diffValue&&Ae(s,e),s.diffValue=0}for(;o--;){var s=n[o];1===s.diffValue&&(s.diffValue=0,Me(s,e))}r!==ae.UP_TO_DATE&&(e.dependenciesState=r,e.onBecomeStale())}(e),r}function me(e){var t=e.observing;e.observing=[];for(var n=t.length;n--;)Ae(t[n],e);e.dependenciesState=ae.NOT_TRACKING}function be(e){var t=we();try{return e()}finally{_e(t)}}function we(){var e=Oe.trackingDerivation;return Oe.trackingDerivation=null,e}function _e(e){Oe.trackingDerivation=e}function Se(e){if(e.dependenciesState!==ae.UP_TO_DATE){e.dependenciesState=ae.UP_TO_DATE;for(var t=e.observing,n=t.length;n--;)t[n].lowestObserverState=ae.UP_TO_DATE}}var xe=["mobxGuid","spyListeners","enforceActions","computedRequiresReaction","disableErrorBoundaries","runId","UNCHANGED"],Ce=function(){return function(){this.version=5,this.UNCHANGED={},this.trackingDerivation=null,this.computationDepth=0,this.runId=0,this.mobxGuid=0,this.inBatch=0,this.pendingUnobservations=[],this.pendingReactions=[],this.isRunningReactions=!1,this.allowStateChanges=!0,this.enforceActions=!1,this.spyListeners=[],this.globalReactionErrorHandlers=[],this.computedRequiresReaction=!1,this.disableErrorBoundaries=!1,this.suppressReactionErrors=!1}}(),ke=!0,Te=!1,Oe=function(){var e=Re();return e.__mobxInstanceCount>0&&!e.__mobxGlobals&&(ke=!1),e.__mobxGlobals&&e.__mobxGlobals.version!==(new Ce).version&&(ke=!1),ke?e.__mobxGlobals?(e.__mobxInstanceCount+=1,e.__mobxGlobals.UNCHANGED||(e.__mobxGlobals.UNCHANGED={}),e.__mobxGlobals):(e.__mobxInstanceCount=1,e.__mobxGlobals=new Ce):(setTimeout(function(){Te||d("There are multiple, different versions of MobX active. Make sure MobX is loaded only once or use `configure({ isolateGlobalState: true })`")},1),new Ce)}();function Ee(){return Oe}function Pe(){var e=new Ce;for(var t in e)-1===xe.indexOf(t)&&(Oe[t]=e[t]);Oe.allowStateChanges=!Oe.enforceActions}function Re(){return"undefined"!=typeof window?window:r}function Me(e,t){e.observers.add(t),e.lowestObserverState>t.dependenciesState&&(e.lowestObserverState=t.dependenciesState)}function Ae(e,t){e.observers.delete(t),0===e.observers.size&&Ie(e)}function Ie(e){!1===e.isPendingUnobservation&&(e.isPendingUnobservation=!0,Oe.pendingUnobservations.push(e))}function Le(){Oe.inBatch++}function Ne(){if(0==--Oe.inBatch){We();for(var e=Oe.pendingUnobservations,t=0;t0&&Ie(e),!1)}function ze(e,t){if(console.log("[mobx.trace] '"+e.name+"' is invalidated due to a change in: '"+t.name+"'"),e.isTracing===se.BREAK){var n=[];!function e(t,n,r){if(n.length>=1e3)return void n.push("(and many more)");n.push(""+new Array(r).join("\t")+t.name);t.dependencies&&t.dependencies.forEach(function(t){return e(t,n,r+1)})}(ft(e),n,1),new Function("debugger;\n/*\nTracing '"+e.name+"'\n\nYou are entering this break point because derivation '"+e.name+"' is being traced and '"+t.name+"' is now forcing it to update.\nJust follow the stacktrace you should now see in the devtools to see precisely what piece of your code is causing this update\nThe stackframe you are looking for is at least ~6-8 stack-frames up.\n\n"+(e instanceof ce?e.derivation.toString().replace(/[*]\//g,"/"):"")+"\n\nThe dependencies for this derivation are:\n\n"+n.join("\n")+"\n*/\n ")()}}var De=function(){function e(e,t,n){void 0===e&&(e="Reaction@"+f()),this.name=e,this.onInvalidate=t,this.errorHandler=n,this.observing=[],this.newObserving=[],this.dependenciesState=ae.NOT_TRACKING,this.diffValue=0,this.runId=0,this.unboundDepsCount=0,this.__mapid="#"+f(),this.isDisposed=!1,this._isScheduled=!1,this._isTrackPending=!1,this._isRunning=!1,this.isTracing=se.NONE}return e.prototype.onBecomeStale=function(){this.schedule()},e.prototype.schedule=function(){this._isScheduled||(this._isScheduled=!0,Oe.pendingReactions.push(this),We())},e.prototype.isScheduled=function(){return this._isScheduled},e.prototype.runReaction=function(){if(!this.isDisposed){if(Le(),this._isScheduled=!1,pe(this)){this._isTrackPending=!0;try{this.onInvalidate(),this._isTrackPending}catch(e){this.reportExceptionInDerivation(e)}}Ne()}},e.prototype.track=function(e){if(!this.isDisposed){Le();0,this._isRunning=!0;var t=ye(this,e,void 0);this._isRunning=!1,this._isTrackPending=!1,this.isDisposed&&me(this),he(t)&&this.reportExceptionInDerivation(t.cause),Ne()}},e.prototype.reportExceptionInDerivation=function(e){var t=this;if(this.errorHandler)this.errorHandler(e,this);else{if(Oe.disableErrorBoundaries)throw e;var n="[mobx] Encountered an uncaught exception that was thrown by a reaction or observer component, in: '"+this+"'";Oe.suppressReactionErrors?console.warn("[mobx] (error in reaction '"+this.name+"' suppressed, fix error of causing action below)"):console.error(n,e),Oe.globalReactionErrorHandlers.forEach(function(n){return n(e,t)})}},e.prototype.dispose=function(){this.isDisposed||(this.isDisposed=!0,this._isRunning||(Le(),me(this),Ne()))},e.prototype.getDisposer=function(){var e=this.dispose.bind(this);return e[T]=this,e},e.prototype.toString=function(){return"Reaction["+this.name+"]"},e.prototype.trace=function(e){void 0===e&&(e=!1),zt(this,e)},e}();function Ue(e){return Oe.globalReactionErrorHandlers.push(e),function(){var t=Oe.globalReactionErrorHandlers.indexOf(e);t>=0&&Oe.globalReactionErrorHandlers.splice(t,1)}}var Fe=100,Be=function(e){return e()};function We(){Oe.inBatch>0||Oe.isRunningReactions||Be(He)}function He(){Oe.isRunningReactions=!0;for(var e=Oe.pendingReactions,t=0;e.length>0;){++t===Fe&&(console.error("Reaction doesn't converge to a stable state after "+Fe+" iterations. Probably there is a cycle in the reactive function: "+e[0]),e.splice(0));for(var n=e.splice(0),r=0,o=n.length;r",e):2===arguments.length&&"function"==typeof t?Z(e,t):1===arguments.length&&"string"==typeof e?Ke(e):!0!==r?Ke(t).apply(null,arguments):void m(e,t,Z(e.name||t,n.value,this))};function Qe(e,t){"string"==typeof e||e.name;return ee(0,"function"==typeof e?e:t,this,void 0)}function Je(e){return"function"==typeof e&&!0===e.isMobxAction}function Xe(e,t,n){m(e,t,Z(t,n.bind(e)))}function Ze(e,t){void 0===t&&(t=c);var n,r=t&&t.name||e.name||"Autorun@"+f();if(!t.scheduler&&!t.delay)n=new De(r,function(){this.track(a)},t.onError);else{var o=tt(t),i=!1;n=new De(r,function(){i||(i=!0,o(function(){i=!1,n.isDisposed||n.track(a)}))},t.onError)}function a(){e(n)}return n.schedule(),n.getDisposer()}qe.bound=function(e,t,n,r){return!0===r?(Xe(e,t,n.value),null):n?{configurable:!0,enumerable:!1,get:function(){return Xe(this,t,n.value||n.initializer.call(this)),this[t]},set:Ye}:{enumerable:!1,configurable:!0,set:function(e){Xe(this,t,e)},get:function(){}}};var et=function(e){return e()};function tt(e){return e.scheduler?e.scheduler:e.delay?function(t){return setTimeout(t,e.delay)}:et}function nt(e,t,n){void 0===n&&(n=c);var r,o,i,a=n.name||"Reaction@"+f(),s=qe(a,n.onError?(r=n.onError,o=t,function(){try{return o.apply(this,arguments)}catch(e){r.call(this,e)}}):t),l=!n.scheduler&&!n.delay,u=tt(n),d=!0,h=!1,p=n.compareStructural?R.structural:n.equals||R.default,v=new De(a,function(){d||l?g():h||(h=!0,u(g))},n.onError);function g(){if(h=!1,!v.isDisposed){var t=!1;v.track(function(){var n=e(v);t=d||!p(i,n),i=n}),d&&n.fireImmediately&&s(i,v),d||!0!==t||s(i,v),d&&(d=!1)}}return v.schedule(),v.getDisposer()}function rt(e,t,n){return it("onBecomeObserved",e,t,n)}function ot(e,t,n){return it("onBecomeUnobserved",e,t,n)}function it(e,t,n,r){var o="string"==typeof n?yn(t,n):yn(t),i="string"==typeof n?r:n,a=e+"Listeners";return o[a]?o[a].add(i):o[a]=new Set([i]),"function"!=typeof o[e]?d(!1):function(){var e=o[a];e&&(e.delete(i),0===e.size&&delete o[a])}}function at(e){var t=e.enforceActions,n=e.computedRequiresReaction,r=e.disableErrorBoundaries,o=e.reactionScheduler;if(!0===e.isolateGlobalState&&((Oe.pendingReactions.length||Oe.inBatch||Oe.isRunningReactions)&&d("isolateGlobalState should be called before MobX is running any reactions"),Te=!0,ke&&(0==--Re().__mobxInstanceCount&&(Re().__mobxGlobals=void 0),Oe=new Ce)),void 0!==t){var i=void 0;switch(t){case!0:case"observed":i=!0;break;case!1:case"never":i=!1;break;case"strict":case"always":i="strict";break;default:d("Invalid value for 'enforceActions': '"+t+"', expected 'never', 'always' or 'observed'")}Oe.enforceActions=i,Oe.allowStateChanges=!0!==i&&"strict"!==i}void 0!==n&&(Oe.computedRequiresReaction=!!n),void 0!==r&&(!0===r&&console.warn("WARNING: Debug feature only. MobX will NOT recover from errors when `disableErrorBoundaries` is enabled."),Oe.disableErrorBoundaries=!!r),o&&Ve(o)}function st(e,t){var n="function"==typeof e?e.prototype:e,r=function(e){var r=t[e];Array.isArray(r)||(r=[r]);var o=Object.getOwnPropertyDescriptor(n,e),i=r.reduce(function(t,r){return r(n,e,t)},o);i&&Object.defineProperty(n,e,i)};for(var o in t)r(o);return e}function lt(e,t,n,r){var o=ut(r=B(r));return N(e),fn(e,r.name,o.enhancer),t&&ct(e,t,n,o),e}function ut(e){return e.defaultDecorator||(!1===e.deep?G:W)}function ct(e,t,n,r){Le();try{var o=x(t);for(var i in o){var a=o[i],s=Object.getOwnPropertyDescriptor(t,a);0;var l=(n&&a in n?n[a]:s.get?Q:r)(e,a,s,!0);l&&Object.defineProperty(e,a,l)}}finally{Ne()}}function ft(e,t){return dt(yn(e,t))}function dt(e){var t,n,r={name:e.name};return e.observing&&e.observing.length>0&&(r.dependencies=(t=e.observing,n=[],t.forEach(function(e){-1===n.indexOf(e)&&n.push(e)}),n).map(dt)),r}function ht(e,t){return pt(yn(e,t))}function pt(e){var t={name:e.name};return function(e){return e.observers&&e.observers.size>0}(e)&&(t.observers=Array.from(function(e){return e.observers}(e)).map(pt)),t}var vt=0;function gt(e){1!==arguments.length&&d("Flow expects one 1 argument and cannot be used as decorator");var t=e.name||"";return function(){var n,r=arguments,o=++vt,i=qe(t+" - runid: "+o+" - init",e).apply(this,r),a=void 0,s=new Promise(function(e,r){var s=0;function l(e){var n;a=void 0;try{n=qe(t+" - runid: "+o+" - yield "+s++,i.next).call(i,e)}catch(l){return r(l)}c(n)}function u(e){var n;a=void 0;try{n=qe(t+" - runid: "+o+" - yield "+s++,i.throw).call(i,e)}catch(l){return r(l)}c(n)}function c(t){if(!t||"function"!=typeof t.then)return t.done?e(t.value):(a=Promise.resolve(t.value)).then(l,u);t.then(c,r)}n=r,l(void 0)});return s.cancel=qe(t+" - runid: "+o+" - cancel",function(){try{a&&yt(a);var e=i.return(),t=Promise.resolve(e.value);t.then(v,v),yt(t),n(new Error("FLOW_CANCELLED"))}catch(r){n(r)}}),s}}function yt(e){"function"==typeof e.cancel&&e.cancel()}function mt(e,t,n){var r;if(an(e)||tn(e)||ue(e))r=mn(e);else{if(!gn(e))return d(!1);if("string"!=typeof t)return d(!1);r=mn(e,t)}return void 0!==r.dehancer?d(!1):(r.dehancer="function"==typeof t?t:n,function(){r.dehancer=void 0})}function bt(e,t,n){return"function"==typeof n?function(e,t,n){return mn(e,t).intercept(n)}(e,t,n):function(e,t){return mn(e).intercept(t)}(e,t)}function wt(e,t){if(null==e)return!1;if(void 0!==t){if(!1===gn(e))return!1;if(!e[T].values.has(t))return!1;var n=yn(e,t);return fe(n)}return fe(e)}function _t(e){return arguments.length>1?d(!1):wt(e)}function St(e,t){return"string"!=typeof t?d(!1):wt(e,t)}function xt(e,t){return null!=e&&(void 0!==t?!!gn(e)&&e[T].values.has(t):gn(e)||!!e[T]||E(e)||Ge(e)||fe(e))}function Ct(e){return 1!==arguments.length&&d(!1),xt(e)}function kt(e,t){return"string"!=typeof t?d(!1):xt(e,t)}function Tt(e){return gn(e)?e[T].getKeys():an(e)?Array.from(e.keys()):un(e)?Array.from(e.keys()):tn(e)?e.map(function(e,t){return t}):d(!1)}function Ot(e){return gn(e)?Tt(e).map(function(t){return e[t]}):an(e)?Tt(e).map(function(t){return e.get(t)}):un(e)?Array.from(e.values()):tn(e)?e.slice():d(!1)}function Et(e){return gn(e)?Tt(e).map(function(t){return[t,e[t]]}):an(e)?Tt(e).map(function(t){return[t,e.get(t)]}):un(e)?Array.from(e.entries()):tn(e)?e.map(function(e,t){return[t,e]}):d(!1)}function Pt(e,t,n){if(2!==arguments.length||un(e))if(gn(e)){var r=e[T];r.values.get(t)?r.write(t,n):r.addObservableProp(t,n,r.defaultEnhancer)}else if(an(e))e.set(t,n);else if(un(e))e.add(t);else{if(!tn(e))return d(!1);"number"!=typeof t&&(t=parseInt(t,10)),h(t>=0,"Not a valid index: '"+t+"'"),Le(),t>=e.length&&(e.length=t+1),e[t]=n,Ne()}else{Le();var o=t;try{for(var i in o)Pt(e,i,o[i])}finally{Ne()}}}function Rt(e,t){if(gn(e))e[T].remove(t);else if(an(e))e.delete(t);else if(un(e))e.delete(t);else{if(!tn(e))return d(!1);"number"!=typeof t&&(t=parseInt(t,10)),h(t>=0,"Not a valid index: '"+t+"'"),e.splice(t,1)}}function Mt(e,t){return gn(e)?mn(e).has(t):an(e)?e.has(t):un(e)?e.has(t):tn(e)?t>=0&&t0}function Vt(e,t){var n=e.interceptors||(e.interceptors=[]);return n.push(t),p(function(){var e=n.indexOf(t);-1!==e&&n.splice(e,1)})}function $t(e,t){var n=we();try{var r=e.interceptors;if(r)for(var o=0,i=r.length;o0}function Kt(e,t){var n=e.changeListeners||(e.changeListeners=[]);return n.push(t),p(function(){var e=n.indexOf(t);-1!==e&&n.splice(e,1)})}function qt(e,t){var n=we(),r=e.changeListeners;if(r){for(var o=0,i=(r=r.slice()).length;o0?e.map(this.dehancer):e},e.prototype.intercept=function(e){return Vt(this,e)},e.prototype.observe=function(e,t){return void 0===t&&(t=!1),t&&e({object:this.proxy,type:"splice",index:0,added:this.values.slice(),addedCount:this.values.length,removed:[],removedCount:0}),Kt(this,e)},e.prototype.getArrayLength=function(){return this.atom.reportObserved(),this.values.length},e.prototype.setArrayLength=function(e){if("number"!=typeof e||e<0)throw new Error("[mobx.array] Out of range: "+e);var t=this.values.length;if(e!==t)if(e>t){for(var n=new Array(e-t),r=0;ro?e=o:e<0&&(e=Math.max(0,o+e)),t=1===arguments.length?o-e:null==t?0:Math.max(0,Math.min(t,o-e)),void 0===n&&(n=u),Gt(this)){var i=$t(this,{object:this.proxy,type:"splice",index:e,removedCount:t,added:n});if(!i)return u;t=i.removedCount,n=i.added}n=0===n.length?n:n.map(function(e){return r.enhancer(e,void 0)});var a=this.spliceItemsIntoValues(e,t,n);return 0===t&&0===n.length||this.notifyArraySplice(e,n,a),this.dehanceValues(a)},e.prototype.spliceItemsIntoValues=function(e,t,n){var r;if(n.length<1e4)return(r=this.values).splice.apply(r,function(){for(var e=[],t=0;t-1&&(this.splice(n,1),!0)},get:function(e){var t=this[T];if(t){if(e=t.length||"\n"===t[o]?r+"\n":r}},{key:"atDocumentBoundary",value:function(e,t,n){var r=e[t];if(!r)return!0;var o=e[t-1];if(o&&"\n"!==o)return!1;if(n){if(r!==n)return!1}else if(r!==s.Char.DIRECTIVES_END&&r!==s.Char.DOCUMENT_END)return!1;var i=e[t+1],a=e[t+2];if(i!==r||a!==r)return!1;var l=e[t+3];return!l||"\n"===l||"\t"===l||" "===l}},{key:"endOfIdentifier",value:function(e,t){for(var n=e[t],r="<"===n,o=r?["\n","\t"," ",">"]:["\n","\t"," ","[","]","{","}",","];n&&-1===o.indexOf(n);)n=e[t+=1];return r&&">"===n&&(t+=1),t}},{key:"endOfIndent",value:function(e,t){for(var n=e[t];" "===n;)n=e[t+=1];return t}},{key:"endOfLine",value:function(e,t){for(var n=e[t];n&&"\n"!==n;)n=e[t+=1];return t}},{key:"endOfWhiteSpace",value:function(e,t){for(var n=e[t];"\t"===n||" "===n;)n=e[t+=1];return t}},{key:"startOfLine",value:function(e,t){var n=e[t-1];if("\n"===n)return t;for(;n&&"\n"!==n;)n=e[t-=1];return t+1}},{key:"endOfBlockIndent",value:function(t,n,r){var o=e.endOfIndent(t,r);if(o>r+n)return o;var i=e.endOfWhiteSpace(t,o),a=t[i];return a&&"\n"!==a?null:i}},{key:"atBlank",value:function(e,t,n){var r=e[t];return"\n"===r||"\t"===r||" "===r||n&&!r}},{key:"atCollectionItem",value:function(t,n){var r=t[n];return("?"===r||":"===r||"-"===r)&&e.atBlank(t,n+1,!0)}},{key:"nextNodeIsIndented",value:function(e,t,n){return!(!e||t<0)&&(t>0||n&&"-"===e)}},{key:"normalizeOffset",value:function(t,n){var r=t[n];return r?"\n"!==r&&"\n"===t[n-1]?n-1:e.endOfWhiteSpace(t,n):n}},{key:"foldNewline",value:function(t,n,r){for(var o=0,i=!1,a="",s=t[n+1];" "===s||"\t"===s||"\n"===s;){switch(s){case"\n":o=0,n+=1,a+="\n";break;case"\t":o<=r&&(i=!0),n=e.endOfWhiteSpace(t,n+2)-1;break;case" ":o+=1,n+=1}s=t[n+1]}return a||(a=" "),s&&o<=r&&(i=!0),{fold:a,offset:n,error:i}}}]),(0,a.default)(e,[{key:"getPropValue",value:function(e,t,n){if(!this.context)return null;var r=this.context.src,o=this.props[e];return o&&r[o.start]===t?r.slice(o.start+(n?1:0),o.end):null}},{key:"commentHasRequiredWhitespace",value:function(t){var n=this.context.src;if(this.header&&t===this.header.end)return!1;if(!this.valueRange)return!1;var r=this.valueRange.end;return t!==r||e.atBlank(n,r-1)}},{key:"parseComment",value:function(t){var n=this.context.src;if(n[t]===s.Char.COMMENT){var r=e.endOfLine(n,t+1),o=new u.default(t,r);return this.props.push(o),r}return t}},{key:"setOrigRanges",value:function(e,t){return this.range&&(t=this.range.setOrigRange(e,t)),this.valueRange&&this.valueRange.setOrigRange(e,t),this.props.forEach(function(n){return n.setOrigRange(e,t)}),t}},{key:"toString",value:function(){var t=this.context.src,n=this.range,r=this.value;if(null!=r)return r;var o=t.slice(n.start,n.end);return e.addStringTerminator(t,n.end,o)}},{key:"anchor",get:function(){for(var e=0;e0?e.join("\n"):null}},{key:"hasComment",get:function(){if(this.context)for(var e=this.context.src,t=0;tn);)++o;this.origStart=n+o;for(var i=o;o=r);)++o;return this.origEnd=r+o,i}}]),e}();t.default=a},function(e,t,n){"use strict";var r=n(4);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=r(n(7)),i=r(n(10)),a=r(n(12)),s=r(n(11)),l=r(n(13)),u=r(n(50)),c=function(e){function t(e){var n;return(0,o.default)(this,t),(n=(0,a.default)(this,(0,s.default)(t).call(this))).value=e,n}return(0,l.default)(t,e),(0,i.default)(t,[{key:"toJSON",value:function(e,t){return t&&t.keep?this.value:(0,u.default)(this.value,e,t)}},{key:"toString",value:function(){return String(this.value)}}]),t}(r(n(51)).default);t.default=c},function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(e,t,n){var r=n(93)("wks"),o=n(75),i=n(23).Symbol,a="function"==typeof i;(e.exports=function(e){return r[e]||(r[e]=a&&i[e]||(a?i:o)("Symbol."+e))}).store=r},function(e,t,n){"use strict";var r=n(128),o=n(220),i=Object.prototype.toString;function a(e){return"[object Array]"===i.call(e)}function s(e){return null!==e&&"object"==typeof e}function l(e){return"[object Function]"===i.call(e)}function u(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),a(e))for(var n=0,r=e.length;n1&&void 0!==arguments[1]?arguments[1]:"",n=e&&e.split("/")||[],r=t&&t.split("/")||[],a=e&&o(e),s=t&&o(t),l=a||s;if(e&&o(e)?r=n:n.length&&(r.pop(),r=r.concat(n)),!r.length)return"/";var u=void 0;if(r.length){var c=r[r.length-1];u="."===c||".."===c||""===c}else u=!1;for(var f=0,d=r.length;d>=0;d--){var h=r[d];"."===h?i(r,d):".."===h?(i(r,d),f++):f&&(i(r,d),f--)}if(!l)for(;f--;f)r.unshift("..");!l||""===r[0]||r[0]&&o(r[0])||r.unshift("");var p=r.join("/");return u&&"/"!==p.substr(-1)&&(p+="/"),p},s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};var l=function e(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every(function(t,r){return e(t,n[r])});var r=void 0===t?"undefined":s(t);if(r!==(void 0===n?"undefined":s(n)))return!1;if("object"===r){var o=t.valueOf(),i=n.valueOf();if(o!==t||i!==n)return e(o,i);var a=Object.keys(t),l=Object.keys(n);return a.length===l.length&&a.every(function(r){return e(t[r],n[r])})}return!1},u=n(28);function c(e){return"/"===e.charAt(0)?e:"/"+e}function f(e){return"/"===e.charAt(0)?e.substr(1):e}function d(e,t){return function(e,t){return new RegExp("^"+t+"(\\/|\\?|#|$)","i").test(e)}(e,t)?e.substr(t.length):e}function h(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var i=t.indexOf("?");return-1!==i&&(n=t.substr(i),t=t.substr(0,i)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}function v(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function g(e,t,n,o){var i;"string"==typeof e?(i=p(e)).state=t:(void 0===(i=Object(r.a)({},e)).pathname&&(i.pathname=""),i.search?"?"!==i.search.charAt(0)&&(i.search="?"+i.search):i.search="",i.hash?"#"!==i.hash.charAt(0)&&(i.hash="#"+i.hash):i.hash="",void 0!==t&&void 0===i.state&&(i.state=t));try{i.pathname=decodeURI(i.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+i.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(i.key=n),o?i.pathname?"/"!==i.pathname.charAt(0)&&(i.pathname=a(i.pathname,o.pathname)):i.pathname=o.pathname:i.pathname||(i.pathname="/"),i}function y(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash&&e.key===t.key&&l(e.state,t.state)}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var i="function"==typeof e?e(t,n):e;"string"==typeof i?"function"==typeof r?r(i,o):o(!0):o(!1!==i)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter(function(e){return e!==r})}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r=0?t:0)+"#"+e)}function P(e){void 0===e&&(e={}),b||Object(u.a)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),o=n.getUserConfirmation,i=void 0===o?w:o,a=n.hashType,s=void 0===a?"slash":a,l=e.basename?h(c(e.basename)):"",f=T[s],p=f.encodePath,_=f.decodePath;function S(){var e=_(O());return l&&(e=d(e,l)),g(e)}var x=m();function C(e){Object(r.a)(F,e),F.length=t.length,x.notifyListeners(F.location,F.action)}var P=!1,R=null;function M(){var e=O(),t=p(e);if(e!==t)E(t);else{var n=S(),r=F.location;if(!P&&y(r,n))return;if(R===v(n))return;R=null,function(e){if(P)P=!1,C();else{x.confirmTransitionTo(e,"POP",i,function(t){t?C({action:"POP",location:e}):function(e){var t=F.location,n=N.lastIndexOf(v(t));-1===n&&(n=0);var r=N.lastIndexOf(v(e));-1===r&&(r=0);var o=n-r;o&&(P=!0,j(o))}(e)})}}(n)}}var A=O(),I=p(A);A!==I&&E(I);var L=S(),N=[v(L)];function j(e){t.go(e)}var z=0;function D(e){1===(z+=e)&&1===e?window.addEventListener(k,M):0===z&&window.removeEventListener(k,M)}var U=!1;var F={length:t.length,action:"POP",location:L,createHref:function(e){return"#"+p(l+v(e))},push:function(e,t){var n=g(e,void 0,void 0,F.location);x.confirmTransitionTo(n,"PUSH",i,function(e){if(e){var t=v(n),r=p(l+t);if(O()!==r){R=t,function(e){window.location.hash=e}(r);var o=N.lastIndexOf(v(F.location)),i=N.slice(0,-1===o?0:o+1);i.push(t),N=i,C({action:"PUSH",location:n})}else C()}})},replace:function(e,t){var n=g(e,void 0,void 0,F.location);x.confirmTransitionTo(n,"REPLACE",i,function(e){if(e){var t=v(n),r=p(l+t);O()!==r&&(R=t,E(r));var o=N.indexOf(v(F.location));-1!==o&&(N[o]=t),C({action:"REPLACE",location:n})}})},go:j,goBack:function(){j(-1)},goForward:function(){j(1)},block:function(e){void 0===e&&(e=!1);var t=x.setPrompt(e);return U||(D(1),U=!0),function(){return U&&(U=!1,D(-1)),t()}},listen:function(e){var t=x.appendListener(e);return D(1),function(){D(-1),t()}}};return F}function R(e,t,n){return Math.min(Math.max(e,t),n)}function M(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,o=t.initialEntries,i=void 0===o?["/"]:o,a=t.initialIndex,s=void 0===a?0:a,l=t.keyLength,u=void 0===l?6:l,c=m();function f(e){Object(r.a)(w,e),w.length=w.entries.length,c.notifyListeners(w.location,w.action)}function d(){return Math.random().toString(36).substr(2,u)}var h=R(s,0,i.length-1),p=i.map(function(e){return g(e,void 0,"string"==typeof e?d():e.key||d())}),y=v;function b(e){var t=R(w.index+e,0,w.entries.length-1),r=w.entries[t];c.confirmTransitionTo(r,"POP",n,function(e){e?f({action:"POP",location:r,index:t}):f()})}var w={length:p.length,action:"POP",location:p[h],index:h,entries:p,createHref:y,push:function(e,t){var r=g(e,t,d(),w.location);c.confirmTransitionTo(r,"PUSH",n,function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,r):n.push(r),f({action:"PUSH",location:r,index:t,entries:n})}})},replace:function(e,t){var r=g(e,t,d(),w.location);c.confirmTransitionTo(r,"REPLACE",n,function(e){e&&(w.entries[w.index]=r,f({action:"REPLACE",location:r}))})},go:b,goBack:function(){b(-1)},goForward:function(){b(1)},canGo:function(e){var t=w.index+e;return t>=0&&t1&&void 0!==arguments[1]?arguments[1]:null;return(0,o.default)(this,t),(n=(0,a.default)(this,(0,s.default)(t).call(this))).key=e,n.value=r,n.type="PAIR",n}return(0,l.default)(t,e),(0,i.default)(t,[{key:"addToJSMap",value:function(e,t){var n=(0,f.default)(this.key,"",e);if(t instanceof Map){var r=(0,f.default)(this.value,n,e);t.set(n,r)}else if(t instanceof Set)t.add(n);else{var o=function(e,t,n){return null===t?"":"object"!==(0,u.default)(t)?String(t):e instanceof h.default&&n&&n.doc?e.toString({anchors:{},doc:n.doc,indent:"",inFlow:!0,inStringifyKey:!0}):JSON.stringify(t)}(this.key,n,e);t[o]=(0,f.default)(this.value,o,e)}return t}},{key:"toJSON",value:function(e,t){var n=t&&t.mapAsMap?new Map:{};return this.addToJSMap(t,n)}},{key:"toString",value:function(e,t,n){if(!e||!e.doc)return JSON.stringify(this);var r=this.key,o=this.value,i=r instanceof h.default&&r.comment,a=!r||i||r instanceof d.default,s=e,l=s.doc,f=s.indent;e=Object.assign({},e,{implicitKey:!a,indent:f+" "});var p=!1,v=l.schema.stringify(r,e,function(){return i=null},function(){return p=!0});if(v=(0,c.default)(v,e.indent,i),e.allNullValues)return this.comment?(v=(0,c.default)(v,e.indent,this.comment),t&&t()):p&&!i&&n&&n(),e.inFlow?v:"? ".concat(v);v=a?"? ".concat(v,"\n").concat(f,":"):"".concat(v,":"),this.comment&&(v=(0,c.default)(v,e.indent,this.comment),t&&t());var g="",y=null;if(o instanceof h.default){if(o.spaceBefore&&(g="\n"),o.commentBefore){var m=o.commentBefore.replace(/^/gm,"".concat(e.indent,"#"));g+="\n".concat(m)}y=o.comment}else o&&"object"===(0,u.default)(o)&&(o=l.schema.createNode(o,!0));e.implicitKey=!1,p=!1;var b=l.schema.stringify(o,e,function(){return y=null},function(){return p=!0}),w=" ";if(g||this.comment)w="".concat(g,"\n").concat(e.indent);else if(!a&&o instanceof d.default){("["===b[0]||"{"===b[0])&&!b.includes("\n")||(w="\n".concat(e.indent))}return p&&!y&&n&&n(),(0,c.default)(v+w+b,e.indent,y)}},{key:"commentBefore",get:function(){return this.key&&this.key.commentBefore},set:function(e){null==this.key&&(this.key=new p.default(null)),this.key.commentBefore=e}}]),t}(h.default);t.default=v},function(e,t,n){var r=n(23),o=n(15),i=n(56),a=n(47),s=n(46),l=function(e,t,n){var u,c,f,d=e&l.F,h=e&l.G,p=e&l.S,v=e&l.P,g=e&l.B,y=e&l.W,m=h?o:o[t]||(o[t]={}),b=m.prototype,w=h?r:p?r[t]:(r[t]||{}).prototype;for(u in h&&(n=t),n)(c=!d&&w&&void 0!==w[u])&&s(m,u)||(f=c?w[u]:n[u],m[u]=h&&"function"!=typeof w[u]?n[u]:g&&c?i(f,r):y&&w[u]==f?function(e){var t=function(t,n,r){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,r)}return e.apply(this,arguments)};return t.prototype=e.prototype,t}(f):v&&"function"==typeof f?i(Function.call,f):f,v&&((m.virtual||(m.virtual={}))[u]=f,e&l.R&&b&&!b[u]&&a(b,u,f)))};l.F=1,l.G=2,l.S=4,l.P=8,l.B=16,l.W=32,l.U=64,l.R=128,e.exports=l},function(e,t,n){var r=n(40);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},function(e,t,n){n(11);var r=n(186);function o(t,n,i){return"undefined"!=typeof Reflect&&Reflect.get?e.exports=o=Reflect.get:e.exports=o=function(e,t,n){var o=r(e,t);if(o){var i=Object.getOwnPropertyDescriptor(o,t);return i.get?i.get.call(n):i.value}},o(t,n,i||t)}e.exports=o},function(e,t,n){var r=n(32),o=n(139),i=n(96),a=Object.defineProperty;t.f=n(41)?Object.defineProperty:function(e,t,n){if(r(e),t=i(t,!0),r(n),o)try{return a(e,t,n)}catch(s){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},function(e,t,n){"use strict";n.r(t);var r=n(0),o=n.n(r),i=n(1),a=n.n(i),s=n(159),l=n.n(s),u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c=Object.prototype.hasOwnProperty;function f(e,t){return e===t?0!==e||0!==t||1/e==1/t:e!=e&&t!=t}var d=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:{};return function(n){var i,s=function(i){function a(n,r){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a);var o=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(a.__proto__||Object.getPrototypeOf(a)).call(this,n,r));o.i18n=n.i18n||t.i18n||r.i18n||m(),o.namespaces="function"==typeof e?e(n):e||r.defaultNS||o.i18n.options&&o.i18n.options.defaultNS,"string"==typeof o.namespaces&&(o.namespaces=[o.namespaces]);var i=o.i18n&&o.i18n.options&&o.i18n.options.react||{};(o.options=k({},g(),i,t),r.reportNS)&&(o.namespaces||[void 0]).forEach(r.reportNS);return o.getWrappedInstance=o.getWrappedInstance.bind(o),o}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(a,r["Component"]),T(a,[{key:"shouldComponentUpdate",value:function(e){return!this.options.usePureComponent||!function(e,t){if(f(e,t))return!0;if("object"!==(void 0===e?"undefined":u(e))||null===e||"object"!==(void 0===t?"undefined":u(t))||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(var o=0;o=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(i,["ready"]);return o.a.createElement(n,k({tReady:a},e.props,t,s))})}}]),a}();return s.WrappedComponent=n,s.contextTypes={i18n:a.a.object,defaultNS:a.a.string,reportNS:a.a.func},s.displayName="Translate("+((i=n).displayName||i.name||"Component")+")",s.namespaces=e,l()(s,n)}}O.setDefaults=v,O.setI18n=y;var E=Object.assign||function(e){for(var t=1;t-1)h=this.props.i18nKey.split(this.i18n.options.nsSeparator)[0];this.t.ns&&(d["data-i18next-options"]=JSON.stringify({ns:h}))}return i&&(d.className=i),a&&(d.style=a),o.a.createElement.apply(this,[t,d].concat(f))}}]),t}();R.propTypes={className:a.a.string},R.defaultProps={className:""},R.contextTypes={i18n:a.a.object.isRequired,t:a.a.func.isRequired};var M=R,A=n(160),I=n.n(A),L=function(){function e(e,t){for(var n=0;n"+t+""));return D(r[0])}var F=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,o.a.Component),L(t,[{key:"render",value:function(){var e=N({i18n:this.context.i18n,t:this.context.t},this.props),t=e.children,n=e.count,r=e.parent,i=e.i18nKey,a=e.tOptions,s=e.values,l=e.defaults,u=e.components,c=e.ns,f=e.i18n,d=e.t,h=function(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,["children","count","parent","i18nKey","tOptions","values","defaults","components","ns","i18n","t"]),p=d||f.t.bind(f),v=f.options&&f.options.react||{},g=void 0!==r?r:v.defaultTransParent,y=l||function e(t,n,r){return n?("[object Array]"!==Object.prototype.toString.call(n)&&(n=[n]),n.forEach(function(n,r){var i=""+r;if("string"==typeof n)t=""+t+n;else if(z(n))t=t+"<"+i+">"+e("",D(n),r+1)+"";else if(o.a.isValidElement(n))t=t+"<"+i+">";else if("object"===(void 0===n?"undefined":j(n))){var a=N({},n),s=a.format;delete a.format;var l=Object.keys(a);s&&1===l.length?t=t+"<"+i+">{{"+l[0]+", "+s+"}}":1===l.length?t=t+"<"+i+">{{"+l[0]+"}}":console&&console.warn&&console.warn("react-i18next: the passed in object contained more than one variable - the object should look like {{ value, format }} where format is optional.",n)}else console&&console.warn&&console.warn("react-i18next: the passed in value is invalid - seems you passed in a variable like {number} - please pass in variables for interpolation as full objects like {{number}}.",n)}),t):""}("",t),m=v.hashTransKey,b=i||(m?m(y):y),w=b?p(b,N({},a,s,s?{}:{interpolation:{prefix:"#$?",suffix:"?$#"}},{defaultValue:y,count:n,ns:c})):y;if(v.exposeNamespace){var _="string"==typeof p.ns?p.ns:p.ns[0];if(i&&f.options&&f.options.nsSeparator&&i.indexOf(f.options.nsSeparator)>-1)_=i.split(f.options.nsSeparator)[0];p.ns&&(h["data-i18next-options"]=JSON.stringify({ns:_}))}return g?o.a.createElement(g,h,U(u||t,w,f)):U(u||t,w,f)}}]),t}(),B=F;F.propTypes={count:a.a.number,parent:a.a.oneOfType([a.a.node,a.a.func]),i18nKey:a.a.string,i18n:a.a.object,t:a.a.func},F.contextTypes={i18n:a.a.object,t:a.a.func};var W=function(){function e(e,t){for(var n=0;n=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}},function(e,t,n){e.exports={default:n(317),__esModule:!0}},function(e,t){e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},,function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t,n){e.exports=!n(57)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},,function(e,t){function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function r(t){return"function"==typeof Symbol&&"symbol"===n(Symbol.iterator)?e.exports=r=function(e){return n(e)}:e.exports=r=function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":n(e)},r(t)}e.exports=r},function(e,t,n){"use strict";var r=n(4);Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.isEmptyPath=void 0;var o=r(n(201)),i=r(n(7)),a=r(n(10)),s=r(n(12)),l=r(n(11)),u=r(n(83)),c=r(n(13)),f=r(n(38)),d=r(n(43)),h=r(n(72)),p=r(n(51)),v=r(n(30)),g=r(n(22)),y=function(e){return null==e||"object"===(0,d.default)(e)&&e[Symbol.iterator]().next().done};t.isEmptyPath=y;var m=function(e){function t(){var e,n;(0,i.default)(this,t);for(var r=arguments.length,o=new Array(r),a=0;at.maxFlowStringSingleLineLength){g=w;var x=!0,C=!1,k=void 0;try{for(var T,O=S[Symbol.iterator]();!(x=(T=O.next()).done);x=!0){var E=T.value;g+=E?"\n ".concat(d).concat(E):"\n"}}catch(j){C=!0,k=j}finally{try{x||null==O.return||O.return()}finally{if(C)throw k}}g+="\n".concat(d).concat(_)}else g="".concat(w," ").concat(S.join(" ")," ").concat(_)}else{var P=b.map(a);g=P.shift();var R=!0,M=!1,A=void 0;try{for(var I,L=P[Symbol.iterator]();!(R=(I=L.next()).done);R=!0){var N=I.value;g+=N?"\n".concat(d).concat(N):"\n"}}catch(j){M=!0,A=j}finally{try{R||null==L.return||L.return()}finally{if(M)throw A}}}return this.comment?(g+="\n"+this.comment.replace(/^/gm,"".concat(d,"#")),r&&r()):y&&o&&o(),g}}]),t}(p.default);t.default=m,(0,f.default)(m,"maxFlowStringSingleLineLength",60)},function(e,t,n){"use strict";var r=n(4);Object.defineProperty(t,"__esModule",{value:!0}),t.findPair=h,t.default=void 0;var o=r(n(7)),i=r(n(10)),a=r(n(12)),s=r(n(11)),l=r(n(33)),u=r(n(13)),c=r(n(44)),f=r(n(30)),d=r(n(22));function h(e,t){var n=t instanceof d.default?t.value:t,r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done);r=!0){var l=a.value;if(l instanceof f.default){if(l.key===t||l.key===n)return l;if(l.key&&l.key.value===n)return l}}}catch(u){o=!0,i=u}finally{try{r||null==s.return||s.return()}finally{if(o)throw i}}}var p=function(e){function t(){return(0,o.default)(this,t),(0,a.default)(this,(0,s.default)(t).apply(this,arguments))}return(0,u.default)(t,e),(0,i.default)(t,[{key:"add",value:function(e){if(e?e instanceof f.default||(e=new f.default(e.key||e,e.value)):e=new f.default(e),h(this.items,e.key))throw new Error("Key ".concat(e.key," already set"));this.items.push(e)}},{key:"delete",value:function(e){var t=h(this.items,e);return!!t&&this.items.splice(this.items.indexOf(t),1).length>0}},{key:"get",value:function(e,t){var n=h(this.items,e),r=n&&n.value;return!t&&r instanceof d.default?r.value:r}},{key:"has",value:function(e){return!!h(this.items,e)}},{key:"set",value:function(e,t){var n=h(this.items,e);n?n.value=t:this.items.push(new f.default(e,t))}},{key:"toJSON",value:function(e,t,n){var r=n?new n:t&&t.mapAsMap?new Map:{};t&&t.onCreate&&t.onCreate(r);var o=!0,i=!1,a=void 0;try{for(var s,l=this.items[Symbol.iterator]();!(o=(s=l.next()).done);o=!0){s.value.addToJSMap(t,r)}}catch(u){i=!0,a=u}finally{try{o||null==l.return||l.return()}finally{if(i)throw a}}return r}},{key:"toString",value:function(e,n,r){if(!e)return JSON.stringify(this);var o=!0,i=!1,a=void 0;try{for(var u,c=this.items[Symbol.iterator]();!(o=(u=c.next()).done);o=!0){var d=u.value;if(!(d instanceof f.default))throw new Error("Map items must all be pairs; found ".concat(JSON.stringify(d)," instead"))}}catch(h){i=!0,a=h}finally{try{o||null==c.return||c.return()}finally{if(i)throw a}}return(0,l.default)((0,s.default)(t.prototype),"toString",this).call(this,e,{blockItem:function(e){return e.str},flowChars:{start:"{",end:"}"},isMap:!0,itemIndent:e.indent||""},n,r)}}]),t}(c.default);t.default=p},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t,n){var r=n(34),o=n(63);e.exports=n(41)?function(e,t,n){return r.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){var r=n(145),o=n(91);e.exports=function(e){return r(o(e))}},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(r){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function e(t,n,r){if(Array.isArray(t))return t.map(function(t,n){return e(t,String(n),r)});if(t&&"function"==typeof t.toJSON){var o=r&&r.anchors&&r.anchors.find(function(e){return e.node===t});o&&(r.onCreate=function(e){o.res=e,delete r.onCreate});var i=t.toJSON(n,r);return o&&r.onCreate&&r.onCreate(i),i}return t}},function(e,t,n){"use strict";var r=n(4);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=r(n(7));t.default=function e(){(0,o.default)(this,e)}},function(e,t,n){"use strict";var r=n(4);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=r(n(7)),i=r(n(10)),a=r(n(12)),s=r(n(11)),l=r(n(33)),u=r(n(13)),c=r(n(50)),f=r(n(44)),d=r(n(22));function h(e){var t=e instanceof d.default?e.value:e;return t&&"string"==typeof t&&(t=Number(t)),Number.isInteger(t)&&t>=0?t:null}var p=function(e){function t(){return(0,o.default)(this,t),(0,a.default)(this,(0,s.default)(t).apply(this,arguments))}return(0,u.default)(t,e),(0,i.default)(t,[{key:"add",value:function(e){this.items.push(e)}},{key:"delete",value:function(e){var t=h(e);return"number"==typeof t&&this.items.splice(t,1).length>0}},{key:"get",value:function(e,t){var n=h(e);if("number"==typeof n){var r=this.items[n];return!t&&r instanceof d.default?r.value:r}}},{key:"has",value:function(e){var t=h(e);return"number"==typeof t&&t0;)i+="0"}return i},t.stringifyString=function(e,t,n,r){var f=s.strOptions.defaultType,d=t.implicitKey,h=t.inFlow,p=e,v=p.type,g=p.value;"string"!=typeof g&&(g=String(g),e=Object.assign({},e,{value:g}));var y=function(f){switch(f){case i.Type.BLOCK_FOLDED:case i.Type.BLOCK_LITERAL:return c(e,t,n,r);case i.Type.QUOTE_DOUBLE:return l(g,t);case i.Type.QUOTE_SINGLE:return u(g,t);case i.Type.PLAIN:return function(e,t,n,r){var f=e.comment,d=e.type,h=e.value,p=t.actualString,v=t.implicitKey,g=t.indent,y=t.inFlow,m=t.tags;if(v&&/[\n[\]{},]/.test(h)||y&&/[[\]{},]/.test(h))return l(h,t);if(!h||/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(h))return v||y||-1===h.indexOf("\n")?-1!==h.indexOf('"')&&-1===h.indexOf("'")?u(h,t):l(h,t):c(e,t,n,r);if(!v&&!y&&d!==i.Type.PLAIN&&-1!==h.indexOf("\n"))return c(e,t,n,r);var b=h.replace(/\n+/g,"$&\n".concat(g));if(p&&/^[\w.+-]+$/.test(b)&&"string"!=typeof m.resolveScalar(b).value)return l(h,t);var w=v?b:(0,a.default)(b,g,a.FOLD_FLOW,s.strOptions.fold);if(f&&!y&&(-1!==w.indexOf("\n")||-1!==f.indexOf("\n")))return n&&n(),(0,o.addCommentBefore)(w,g,f);return w}(e,t,n,r);default:return null}};v!==i.Type.QUOTE_DOUBLE&&/[\x00-\x08\x0b-\x1f\x7f-\x9f]/.test(g)?v=i.Type.QUOTE_DOUBLE:!d&&!h||v!==i.Type.BLOCK_FOLDED&&v!==i.Type.BLOCK_LITERAL||(v=i.Type.QUOTE_DOUBLE);var m=y(v);if(null===m&&null===(m=y(f)))throw new Error("Unsupported default string type ".concat(f));return m};var o=n(72),i=n(16),a=r(n(205)),s=n(60);function l(e,t){var n=t.implicitKey,r=t.indent,o=s.strOptions.doubleQuoted,i=o.jsonEncoding,l=o.minMultiLineLength,u=JSON.stringify(e);if(i)return u;for(var c="",f=0,d=0,h=u[d];h;h=u[++d])if(" "===h&&"\\"===u[d+1]&&"n"===u[d+2]&&(c+=u.slice(f,d)+"\\ ",f=d+=1,h="\\"),"\\"===h)switch(u[d+1]){case"u":c+=u.slice(f,d);var p=u.substr(d+2,4);switch(p){case"0000":c+="\\0";break;case"0007":c+="\\a";break;case"000b":c+="\\v";break;case"001b":c+="\\e";break;case"0085":c+="\\N";break;case"00a0":c+="\\_";break;case"2028":c+="\\L";break;case"2029":c+="\\P";break;default:"00"===p.substr(0,2)?c+="\\x"+p.substr(2):c+=u.substr(d,6)}f=(d+=5)+1;break;case"n":if(n||'"'===u[d+2]||u.lengtht)return!0;if(n-(o=r+1)<=t)return!1}return!0}(c,s.strOptions.fold.lineWidth-f.length)),p=h?"|":">";if(!c)return p+"\n";var v="",g="";if(c=c.replace(/[\n\t ]*$/,function(e){var t=e.indexOf("\n");return-1===t?p+="-":c!==e&&t===e.length-1||(p+="+",r&&r()),g=e.replace(/\n$/,""),""}).replace(/^[\n ]*/,function(e){-1!==e.indexOf(" ")&&(p+=d);var t=e.match(/ +$/);return t?(v=e.slice(0,-t[0].length),t[0]):(v=e,"")}),g&&(g=g.replace(/\n+(?!\n|$)/g,"$&".concat(f))),v&&(v=v.replace(/\n+/g,"$&".concat(f))),o&&(p+=" #"+o.replace(/ ?[\r\n]+/g," "),n&&n()),!c)return"".concat(p).concat(d,"\n").concat(f).concat(g);if(h)return c=c.replace(/\n+/g,"$&".concat(f)),"".concat(p,"\n").concat(f).concat(v).concat(c).concat(g);c=c.replace(/\n+/g,"\n$&").replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,"$&".concat(f));var y=(0,a.default)("".concat(v).concat(c).concat(g),f,a.FOLD_BLOCK,s.strOptions.fold);return"".concat(p,"\n").concat(f).concat(y)}},,,function(e,t,n){var r=n(76);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}}},function(e,t){e.exports=function(e){try{return!!e()}catch(t){return!0}}},function(e,t){e.exports={}},function(e,t,n){"use strict";n.r(t);var r=n(27),o=n(14),i=n(0),a=n.n(i);if(!i.useState)throw new Error("mobx-react-lite requires React with Hooks support");if(!o.spy)throw new Error("mobx-react-lite requires mobx at least version 4 to be available");var s=!1;function l(){return s} +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */var u=function(){return(u=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0)&&!(r=i.next()).done;)a.push(r.value)}catch(s){o={error:s}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a}function f(e){return e.current?Object(o.getDependencyTree)(e.current):""}var d=[];function h(){var e=c(Object(i.useState)(0),2)[1];return Object(i.useCallback)(function(){e(function(e){return e+1})},[])}var p={};function v(e,t,n){if(void 0===t&&(t="observed"),void 0===n&&(n=p),l())return e();var r=(n.useForceUpdate||h)(),a=Object(i.useRef)(null);a.current||(a.current=new o.Reaction("observer("+t+")",function(){r()}));var s,u,c=function(){a.current&&!a.current.isDisposed&&a.current.dispose()};if(Object(i.useDebugValue)(a,f),function(e){Object(i.useEffect)(function(){return e},d)}(function(){c()}),a.current.track(function(){try{s=e()}catch(t){u=t}}),u)throw c(),u;return s}function g(e,t){if(l())return e;var n,r,o,a=u({forwardRef:!1},t),s=e.displayName||e.name,c=function(t,n){return v(function(){return e(t,n)},s)};return c.displayName=s,n=a.forwardRef?Object(i.memo)(Object(i.forwardRef)(c)):Object(i.memo)(c),r=e,o=n,Object.keys(r).forEach(function(e){r.hasOwnProperty(e)&&!y[e]&&Object.defineProperty(o,e,Object.getOwnPropertyDescriptor(r,e))}),n.displayName=s,n}var y={$$typeof:!0,render:!0,compare:!0,type:!0};function m(e){var t=e.children,n=e.render,r=t||n;return"function"!=typeof r?null:v(r)}function b(e,t,n,r,o){var i="children"===t?"render":"children",a="function"==typeof e[t],s="function"==typeof e[i];return a&&s?new Error("MobX Observer: Do not use children and render in the same time in`"+n):a||s?null:new Error("Invalid prop `"+o+"` of type `"+typeof e[t]+"` supplied to `"+n+"`, expected `function`.")}function w(e,t){if(!t||void 0!==e){var n=c(a.a.useState(function(){return Object(o.observable)(e,{},{deep:!1})}),1)[0];return Object.assign(n,e),n}}function _(e){return w(e,!1)}function S(e,t){var n=w(t,!0);return a.a.useState(function(){var t=Object(o.observable)(e(n));return function(e){if(!e||"object"!=typeof e)return!1;var t=Object.getPrototypeOf(e);return!t||t===Object.prototype}(t)&&Object.keys(t).forEach(function(e){var n,r,i=t[e];"function"==typeof i&&(t[e]=(n=i,r=t,function(){for(var e=[],t=0;t0;)l[u]=arguments[u+6];return Object(o.untracked)(function(){return i=i||"<>",s=s||r,null==n[r]?t?new Error("The "+a+" `"+s+"` is marked as required in `"+i+"`, but its value is `"+(null===n[r]?"null":"undefined")+"`."):null:e.apply(void 0,[n,r,i,a,s].concat(l))})}var n=t.bind(null,!1);return n.isRequired=t.bind(null,!0),n}function J(e){var t=typeof e;return Array.isArray(e)?"array":e instanceof RegExp?"object":function(e,t){return"symbol"===e||"Symbol"===t["@@toStringTag"]||"function"==typeof Symbol&&t instanceof Symbol}(t,e)?"symbol":t}function X(e,t){return Q(function(n,r,i,a,s){return Object(o.untracked)(function(){if(e&&J(n[r])===t.toLowerCase())return null;var a;switch(t){case"Array":a=o.isObservableArray;break;case"Object":a=o.isObservableObject;break;case"Map":a=o.isObservableMap;break;default:throw new Error("Unexpected mobxType: "+t)}var l=n[r];if(!a(l)){var u=function(e){var t=J(e);if("object"===t){if(e instanceof Date)return"date";if(e instanceof RegExp)return"regexp"}return t}(l),c=e?" or javascript `"+t.toLowerCase()+"`":"";return new Error("Invalid prop `"+s+"` of type `"+u+"` supplied to `"+i+"`, expected `mobx.Observable"+t+"`"+c+".")}return null})})}function Z(e,t){return Q(function(n,r,i,a,s){for(var l=[],u=arguments.length-5;u-- >0;)l[u]=arguments[u+5];return Object(o.untracked)(function(){if("function"!=typeof t)return new Error("Property `"+s+"` of component `"+i+"` has invalid PropType notation.");var o=X(e,"Array")(n,r,i);if(o instanceof Error)return o;for(var u=n[r],c=0;c=t.length?{value:void 0,done:!0}:(e=r(t,n),this._i+=e.length,{value:e,done:!1})})},function(e,t,n){var r=n(144),o=n(100);e.exports=Object.keys||function(e){return r(e,o)}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,n){"use strict";var r=n(319);t.__esModule=!0,t.default=function(e){if((!o&&0!==o||e)&&i.default){var t=document.createElement("div");t.style.position="absolute",t.style.top="-9999px",t.style.width="50px",t.style.height="50px",t.style.overflow="scroll",document.body.appendChild(t),o=t.offsetWidth-t.clientWidth,document.body.removeChild(t)}return o};var o,i=r(n(320));e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0;var r,o=n(140),i=(r=o)&&r.__esModule?r:{default:r};t.default=function(e,t,n){return t in e?(0,i.default)(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},function(e,t,n){var r=n(114),o=n(190),i=n(115);e.exports=function(e,t){return r(e)||o(e,t)||i()}},function(e,t,n){"use strict";var r=n(4);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=r(n(7)),i=r(n(10)),a=r(n(12)),s=r(n(11)),l=r(n(13)),u=n(16),c=r(n(20)),f=r(n(21)),d=function(e){function t(){return(0,o.default)(this,t),(0,a.default)(this,(0,s.default)(t).call(this,u.Type.BLANK_LINE))}return(0,l.default)(t,e),(0,i.default)(t,[{key:"parse",value:function(e,t){this.context=e;for(var n=e.src,r=t+1;c.default.atBlank(n,r);){var o=c.default.endOfWhiteSpace(n,r);if("\n"!==o)break;r=o+1}return this.range=new f.default(t,r),r}},{key:"includesTrailingLines",get:function(){return!0}}]),t}(c.default);t.default=d},function(e,t){e.exports=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addCommentBefore=function(e,t,n){if(!n)return e;var r=n.replace(/[\s\S]^/gm,"$&".concat(t,"#"));return"#".concat(r,"\n").concat(t).concat(e)},t.default=function(e,t,n){return n?-1===n.indexOf("\n")?"".concat(e," #").concat(n):"".concat(e,"\n")+n.replace(/^/gm,"".concat(t||"","#")):e}},function(e,t,n){"use strict";var r=n(4);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=r(n(7)),i=r(n(12)),a=r(n(11)),s=r(n(10)),l=r(n(13)),u=r(n(38)),c=n(16),f=n(19),d=r(n(50)),h=r(n(44)),p=r(n(51)),v=r(n(30)),g=function e(t,n){if(t instanceof y){var r=n.find(function(e){return e.node===t.source});return r.count*r.aliasCount}if(t instanceof h.default){var o=0,i=!0,a=!1,s=void 0;try{for(var l,u=t.items[Symbol.iterator]();!(i=(l=u.next()).done);i=!0){var c=e(l.value,n);c>o&&(o=c)}}catch(p){a=!0,s=p}finally{try{i||null==u.return||u.return()}finally{if(a)throw s}}return o}if(t instanceof v.default){var f=e(t.key,n),d=e(t.value,n);return Math.max(f,d)}return 1},y=function(e){function t(e){var n;return(0,o.default)(this,t),(n=(0,i.default)(this,(0,a.default)(t).call(this))).source=e,n.type=c.Type.ALIAS,n}return(0,l.default)(t,e),(0,s.default)(t,null,[{key:"stringify",value:function(e,t){var n=e.range,r=e.source,o=t.anchors,i=t.doc,a=t.implicitKey,s=t.inStringifyKey,l=Object.keys(o).find(function(e){return o[e]===r});if(!l&&s&&(l=i.anchors.getName(r)||i.anchors.newName()),l)return"*".concat(l).concat(a?" ":"");var u=i.anchors.getName(r)?"Alias node must be after source node":"Source node not found for alias node";throw new Error("".concat(u," [").concat(n,"]"))}}]),(0,s.default)(t,[{key:"toJSON",value:function(e,t){var n=this;if(!t)return(0,d.default)(this.source,e,t);var r=t.anchors,o=t.maxAliasCount,i=r.find(function(e){return e.node===n.source});if(!i||!i.res){var a="This should not happen: Alias anchor was not resolved?";throw this.cstNode?new f.YAMLReferenceError(this.cstNode,a):new ReferenceError(a)}if(o>=0&&(i.count+=1,0===i.aliasCount&&(i.aliasCount=g(this.source,r)),i.count*i.aliasCount>o)){var s="Excessive alias count indicates a resource exhaustion attack";throw this.cstNode?new f.YAMLReferenceError(this.cstNode,s):new ReferenceError(s)}return i.res}},{key:"toString",value:function(e){return t.stringify(this,e)}},{key:"tag",set:function(e){throw new Error("Alias nodes cannot have tags")}}]),t}(p.default);t.default=y,(0,u.default)(y,"default",!0)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.resolveString=void 0;var r=n(53),o=n(60),i=function(e,t){var n=t.strValue;return n?"string"==typeof n?n:(n.errors.forEach(function(n){n.source||(n.source=t),e.errors.push(n)}),n.str):""};t.resolveString=i;var a={identify:function(e){return"string"==typeof e},default:!0,tag:"tag:yaml.org,2002:str",resolve:i,stringify:function(e,t,n,o){return t=Object.assign({actualString:!0},t),(0,r.stringifyString)(e,t,n,o)},options:o.strOptions};t.default=a},function(e,t){var n=0,r=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+r).toString(36))}},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t,n){var r=n(34).f,o=n(46),i=n(24)("toStringTag");e.exports=function(e,t,n){e&&!o(e=n?e:e.prototype,i)&&r(e,i,{configurable:!0,value:t})}},function(e,t,n){n(295);for(var r=n(23),o=n(47),i=n(58),a=n(24)("toStringTag"),s="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),l=0;l div, .contract-trigger:before { content: " "; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; z-index: -1; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',r=e.head||e.getElementsByTagName("head")[0],o=e.createElement("style");o.id="detectElementResize",o.type="text/css",null!=t&&o.setAttribute("nonce",t),o.styleSheet?o.styleSheet.cssText=n:o.appendChild(e.createTextNode(n)),r.appendChild(o)}}(o),e.__resizeLast__={},e.__resizeListeners__=[],(e.__resizeTriggers__=o.createElement("div")).className="resize-triggers",e.__resizeTriggers__.innerHTML='
',e.appendChild(e.__resizeTriggers__),l(e),e.addEventListener("scroll",u,!0),d&&(e.__resizeTriggers__.__animationListener__=function(t){t.animationName==y&&l(e)},e.__resizeTriggers__.addEventListener(d,e.__resizeTriggers__.__animationListener__))}e.__resizeListeners__.push(r)}},removeResizeListener:function(e,t){if(i)e.detachEvent("onresize",t);else if(e.__resizeListeners__.splice(e.__resizeListeners__.indexOf(t),1),!e.__resizeListeners__.length){e.removeEventListener("scroll",u,!0),e.__resizeTriggers__.__animationListener__&&(e.__resizeTriggers__.removeEventListener(d,e.__resizeTriggers__.__animationListener__),e.__resizeTriggers__.__animationListener__=null);try{e.__resizeTriggers__=!e.removeChild(e.__resizeTriggers__)}catch(n){}}}}}n.d(t,"a",function(){return r})}).call(this,n(49))},,function(e,t){e.exports=function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}},function(e,t){function n(t,r){return e.exports=n=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},n(t,r)}e.exports=n},function(e,t,n){"use strict";var r=n(4);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=r(n(7)),i=r(n(10)),a=r(n(12)),s=r(n(11)),l=r(n(13)),u=n(16),c=r(n(20)),f=r(n(21)),d=function(e){function t(){return(0,o.default)(this,t),(0,a.default)(this,(0,s.default)(t).call(this,u.Type.COMMENT))}return(0,l.default)(t,e),(0,i.default)(t,[{key:"parse",value:function(e,t){this.context=e;var n=this.parseComment(t);return this.range=new f.default(t,n),n}}]),t}(c.default);t.default=d},function(e,t,n){"use strict";var r=n(4);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=r(n(87)),i=r(n(88)),a=r(n(74)),s=[o.default,i.default,a.default];t.default=s},function(e,t,n){"use strict";var r=n(4);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=r(n(43)),i=r(n(69)),a=r(n(45)),s=r(n(121));var l={createNode:function(e,t,n){var r=new a.default;if(t instanceof Map){var s=!0,l=!1,u=void 0;try{for(var c,f=t[Symbol.iterator]();!(s=(c=f.next()).done);s=!0){var d=(0,i.default)(c.value,2),h=d[0],p=d[1];r.items.push(e.createPair(h,p,n))}}catch(y){l=!0,u=y}finally{try{s||null==f.return||f.return()}finally{if(l)throw u}}}else if(t&&"object"===(0,o.default)(t))for(var v=0,g=Object.keys(t);v1){throw new o.YAMLSemanticError(t,"Each pair must have its own sequence indicator")}var u=l.items[0]||new a.default;l.commentBefore&&(u.commentBefore=u.commentBefore?"".concat(l.commentBefore,"\n").concat(u.commentBefore):l.commentBefore),l.comment&&(u.comment=u.comment?"".concat(l.comment,"\n").concat(u.comment):l.comment),l=u}n.items[r]=l instanceof a.default?l:new a.default(l)}}return n}function c(e,t,n){var r=new l.default;r.tag="tag:yaml.org,2002:pairs";var o=!0,i=!1,a=void 0;try{for(var s,u=t[Symbol.iterator]();!(o=(s=u.next()).done);o=!0){var c=s.value,f=void 0,d=void 0;if(Array.isArray(c)){if(2!==c.length)throw new TypeError("Expected [key, value] tuple: ".concat(c));f=c[0],d=c[1]}else if(c&&c instanceof Object){var h=Object.keys(c);if(1!==h.length)throw new TypeError("Expected { key: value } tuple: ".concat(c));d=c[f=h[0]]}else f=c;var p=e.createPair(f,d,n);r.items.push(p)}}catch(v){i=!0,a=v}finally{try{o||null==u.return||u.return()}finally{if(i)throw a}}return r}var f={default:!1,tag:"tag:yaml.org,2002:pairs",resolve:u,createNode:c};t.default=f},,function(e,t){e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},function(e,t,n){var r=n(93)("keys"),o=n(75);e.exports=function(e){return r[e]||(r[e]=o(e))}},function(e,t,n){var r=n(15),o=n(23),i=o["__core-js_shared__"]||(o["__core-js_shared__"]={});(e.exports=function(e,t){return i[e]||(i[e]=void 0!==t?t:{})})("versions",[]).push({version:r.version,mode:n(62)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},function(e,t,n){var r=n(31),o=n(15),i=n(57);e.exports=function(e,t){var n=(o.Object||{})[e]||Object[e],a={};a[e]=t(n),r(r.S+r.F*i(function(){n(1)}),"Object",a)}},function(e,t,n){var r=n(40),o=n(23).document,i=r(o)&&r(o.createElement);e.exports=function(e){return i?o.createElement(e):{}}},function(e,t,n){var r=n(40);e.exports=function(e,t){if(!r(e))return e;var n,o;if(t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;if("function"==typeof(n=e.valueOf)&&!r(o=n.call(e)))return o;if(!t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},function(e,t){var n=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:n)(e)}},function(e,t,n){var r=n(32),o=n(292),i=n(100),a=n(92)("IE_PROTO"),s=function(){},l=function(){var e,t=n(95)("iframe"),r=i.length;for(t.style.display="none",n(146).appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write(" + + + + + + + + + + diff --git a/package/cnsztl/luci-app-openclash/files/usr/share/openclash/web/proxies.462629c0ce55931a9066.css b/package/cnsztl/luci-app-openclash/files/usr/share/openclash/web/proxies.462629c0ce55931a9066.css new file mode 100755 index 0000000000..8bd1c388ac --- /dev/null +++ b/package/cnsztl/luci-app-openclash/files/usr/share/openclash/web/proxies.462629c0ce55931a9066.css @@ -0,0 +1,4 @@ +._2V-RqIAl7n{border-radius:20px;margin:10px 0;padding:3px 0;color:#eee} +.NpfXwxWAxo{position:relative;height:90px}._250hnPTi2J{position:absolute;bottom:0;left:20%;display:flex;align-items:center;justify-content:center}._28H2QsOrtc{position:absolute;top:0;left:0;width:100%;height:100%}._3kdi5nima5{width:100%;padding-right:20px;overflow:hidden;text-overflow:ellipsis;margin:10px 0;font-size:1.1em} +._3PCSxT0l14>h2{margin-top:0}._3PCSxT0l14>h2 span:nth-child(2){font-size:12px;color:#777;font-weight:400;margin:0 .3em}._1yYRIyvlRd{display:flex;flex-wrap:wrap}._1OcDlvlM5R{width:300px;padding:10px 5px;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out}._1OcDlvlM5R._3oAxPKtZFv{cursor:pointer}._1OcDlvlM5R._3oAxPKtZFv:hover{-webkit-transform:scale(1.1);transform:scale(1.1)} +._1myfcMimT9{padding:10px 40px}._1khaX45NQe{position:fixed;right:20px;bottom:20px} diff --git a/package/cnsztl/luci-app-openclash/files/usr/share/openclash/web/proxies.687ac8f8aaa8ce3509ca.js b/package/cnsztl/luci-app-openclash/files/usr/share/openclash/web/proxies.687ac8f8aaa8ce3509ca.js new file mode 100755 index 0000000000..d24a822311 --- /dev/null +++ b/package/cnsztl/luci-app-openclash/files/usr/share/openclash/web/proxies.687ac8f8aaa8ce3509ca.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{D46e:function(e,n,t){e.exports={header:"_3PCSxT0l14",list:"_1yYRIyvlRd",proxy:"_1OcDlvlM5R",proxySelectable:"_3oAxPKtZFv"}},FWZb:function(e,n,t){e.exports={proxy:"NpfXwxWAxo",iconWrapper:"_250hnPTi2J",proxyDetail:"_28H2QsOrtc",proxyName:"_3kdi5nima5"}},L5YO:function(e,n,t){e.exports={group:"_1myfcMimT9",fabgrp:"_1khaX45NQe"}},RbL9:function(e,n,t){e.exports={proxyLatency:"_2V-RqIAl7n"}},wyCT:function(e,n,t){"use strict";t.r(n);var a=t("o0o1"),r=t.n(a),c=t("HaE+"),l=t("q1tI"),o=t.n(l),s=t("u4Dv"),i=t("DKqX"),v=t("rePB"),d=t("17x9"),u=t.n(d),m=t("TSYQ"),h=t.n(m),p=t("SXSQ"),w=t("RbL9"),x=t.n(w),y={good:"#67C23A",normal:"#E6A23C",bad:"#F56C6C",na:"#909399"};function b(e){var n=e.latency,t=n.number,a=n.error,r=Object(l.useMemo)(function(){return function(e,n){return""!==n?y.na:e<200?y.good:e<400?y.normal:y.bad}(t,a)},[t,a]);return o.a.createElement("span",{className:x.a.proxyLatency,style:{color:r}},""!==a?o.a.createElement("span",null,a):o.a.createElement("span",null,t," ms"))}b.propTypes={latency:u.a.shape({number:u.a.number,error:u.a.string})};var f=t("4BeY"),g=t.n(f),k=t("IaFt"),z=t.n(k),E=new g.a({id:"globe",use:"globe-usage",viewBox:"0 0 24 24",content:''}),C=(z.a.add(E),E),O=new g.a({id:"ss",use:"ss-usage",viewBox:"0 0 326 326",content:'\n \n \n \n'}),j=(z.a.add(O),O),B=new g.a({id:"vmess",use:"vmess-usage",viewBox:"0 0 326 326",content:'\n \n \n \n \n \n \n \n \n'}),M=(z.a.add(B),B),H=new g.a({id:"auto",use:"auto-usage",viewBox:"0 0 326 326",content:'\n \n'}),N=(z.a.add(H),H),L=new g.a({id:"fallback",use:"fallback-usage",viewBox:"0 0 326 326",content:'\n \n'}),S=(z.a.add(L),L),V=new g.a({id:"direct",use:"direct-usage",viewBox:"0 0 326 326",content:'\n \n'}),D=(z.a.add(V),V),T=new g.a({id:"http",use:"http-usage",viewBox:"0 0 326 326",content:'\n \n'}),_=(z.a.add(T),T),P=new g.a({id:"group",use:"group-usage",viewBox:"0 0 326 326",content:'\n \n \n \n \n \n \n'}),R=(z.a.add(P),P),A=t("FWZb"),F=t.n(A),W=t("EQlU"),q={Direct:"#408b43",Fallback:"#3483e8",Selector:"#387cec",Vmess:"#ca3487",Shadowsocks:"#1a7dc0",Socks5:"#2a477a",URLTest:"#3483e8",Http:"#d3782d"},Q={Direct:D.id,Fallback:S.id,Selector:R.id,Shadowsocks:j.id,Socks5:C.id,Http:_.id,URLTest:N.id,Vmess:M.id},Y=function(e){return{proxies:Object(W.d)(e),delay:Object(W.c)(e)}};function I(e){var n=e.now,t=e.name,a=Object(s.c)(Y),r=a.proxies,c=a.delay[t],l=r[t],i=n?q[l.type]:"#555",v=Q[l.type];return o.a.createElement("div",{className:F.a.proxy},o.a.createElement("div",{className:F.a.iconWrapper,style:{color:i}},o.a.createElement(p.a,{id:v,width:70,height:70})),o.a.createElement("div",{className:F.a.proxyDetail},o.a.createElement("div",{className:F.a.proxyName},t),c?o.a.createElement(b,{latency:c}):null))}I.propTypes={now:u.a.bool,name:u.a.string};var X=I,J=t("D46e"),U=t.n(J),Z=function(e){return{proxies:Object(W.d)(e)}};function K(e){var n=e.name,t=Object(s.c)(Z).proxies,a=Object(s.b)({switchProxy:W.g}),r=t[n],c=r.all,i=r.now,d=Object(l.useMemo)(function(){var e=i?[i]:[];return c&&c.forEach(function(n){return n!==i&&e.push(n)}),e},[c,i]);return o.a.createElement("div",{className:U.a.group},o.a.createElement("div",{className:U.a.header},o.a.createElement("h2",null,o.a.createElement("span",null,n),o.a.createElement("span",null,r.type))),o.a.createElement("div",{className:U.a.list},d.map(function(e){var t="Selector"===r.type,c=h()(U.a.proxy,Object(v.a)({},U.a.proxySelectable,t));return o.a.createElement("div",{className:c,key:e,onClick:function(){t&&a.switchProxy(n,e)}},o.a.createElement(X,{isSelectable:t,name:e,now:e===r.now}))})))}K.propTypes={name:u.a.string};var G=t("5Wrh"),$=t("L5YO"),ee=t.n($);t.d(n,"default",function(){return ae});var ne=function(e){return{proxies:Object(W.d)(e),groupNames:Object(W.e)(e)}},te={fetchProxies:W.b,requestDelayAll:W.f};function ae(){var e=Object(s.b)(te),n=e.fetchProxies,t=e.requestDelayAll;Object(l.useEffect)(function(){Object(c.a)(r.a.mark(function e(){return r.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,n();case 2:return e.next=4,t();case 4:case"end":return e.stop()}},e)}))()},[n,t]);var a=Object(s.c)(ne).groupNames;return o.a.createElement("div",null,o.a.createElement(i.a,{title:"Proxies"}),o.a.createElement("div",null,o.a.createElement("div",{className:ee.a.fabgrp},o.a.createElement(G.a,{label:"Test Latency",onClick:t})),a.map(function(e){return o.a.createElement("div",{className:ee.a.group,key:e},o.a.createElement(K,{name:e}))})))}}}]); \ No newline at end of file diff --git a/package/cnsztl/luci-app-openclash/files/usr/share/openclash/web/react~app.2889399d0f29b961e8c2.js b/package/cnsztl/luci-app-openclash/files/usr/share/openclash/web/react~app.2889399d0f29b961e8c2.js new file mode 100755 index 0000000000..d0bd40c139 --- /dev/null +++ b/package/cnsztl/luci-app-openclash/files/usr/share/openclash/web/react~app.2889399d0f29b961e8c2.js @@ -0,0 +1,37 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{"2zs7":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.canUseDOM=void 0;var r,o=n("2rMq");var l=((r=o)&&r.__esModule?r:{default:r}).default,a=l.canUseDOM?window.HTMLElement:{};t.canUseDOM=l.canUseDOM;t.default=a},"55Ip":function(e,t,n){"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}var o=n("q1tI"),l=n.n(o),a=n("Ty5D"),i=n("LhCv");n("17x9");function u(){return(u=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}var s=n("9R94");n.d(t,"a",function(){return f}),n.d(t,"b",function(){return d});l.a.Component;var f=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o0&&0===(b-=1)&&f.show(t),n.props.shouldFocusAfterRender&&(n.props.shouldReturnFocusAfterClose?(c.returnFocus(),c.teardownScopedFocus()):c.popWithoutFocus()),n.props.onAfterClose&&n.props.onAfterClose()},n.open=function(){n.beforeOpen(),n.state.afterOpen&&n.state.beforeClose?(clearTimeout(n.closeTimer),n.setState({beforeClose:!1})):(n.props.shouldFocusAfterRender&&(c.setupScopedFocus(n.node),c.markForFocusLater()),n.setState({isOpen:!0},function(){n.setState({afterOpen:!0}),n.props.isOpen&&n.props.onAfterOpen&&n.props.onAfterOpen()}))},n.close=function(){n.props.closeTimeoutMS>0?n.closeWithTimeout():n.closeWithoutTimeout()},n.focusContent=function(){return n.content&&!n.contentHasFocus()&&n.content.focus()},n.closeWithTimeout=function(){var e=Date.now()+n.props.closeTimeoutMS;n.setState({beforeClose:!0,closesAt:e},function(){n.closeTimer=setTimeout(n.closeWithoutTimeout,n.state.closesAt-Date.now())})},n.closeWithoutTimeout=function(){n.setState({beforeClose:!1,isOpen:!1,afterOpen:!1,closesAt:null},n.afterClose)},n.handleKeyDown=function(e){e.keyCode===v&&(0,s.default)(n.content,e),n.props.shouldCloseOnEsc&&e.keyCode===g&&(e.stopPropagation(),n.requestClose(e))},n.handleOverlayOnClick=function(e){null===n.shouldClose&&(n.shouldClose=!0),n.shouldClose&&n.props.shouldCloseOnOverlayClick&&(n.ownerHandlesClose()?n.requestClose(e):n.focusContent()),n.shouldClose=null},n.handleContentOnMouseUp=function(){n.shouldClose=!1},n.handleOverlayOnMouseDown=function(e){n.props.shouldCloseOnOverlayClick||e.target!=n.overlay||e.preventDefault()},n.handleContentOnClick=function(){n.shouldClose=!1},n.handleContentOnMouseDown=function(){n.shouldClose=!1},n.requestClose=function(e){return n.ownerHandlesClose()&&n.props.onRequestClose(e)},n.ownerHandlesClose=function(){return n.props.onRequestClose},n.shouldBeClosed=function(){return!n.state.isOpen&&!n.state.beforeClose},n.contentHasFocus=function(){return document.activeElement===n.content||n.content.contains(document.activeElement)},n.buildClassName=function(e,t){var r="object"===(void 0===t?"undefined":o(t))?t:{base:y[e],afterOpen:y[e]+"--after-open",beforeClose:y[e]+"--before-close"},l=r.base;return n.state.afterOpen&&(l=l+" "+r.afterOpen),n.state.beforeClose&&(l=l+" "+r.beforeClose),"string"==typeof t&&t?l+" "+t:l},n.attributesFromObject=function(e,t){return Object.keys(t).reduce(function(n,r){return n[e+"-"+r]=t[r],n},{})},n.state={afterOpen:!1,beforeClose:!1},n.shouldClose=null,n.moveFromContentToOverlay=null,n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,a.Component),l(t,[{key:"componentDidMount",value:function(){this.props.isOpen&&this.open()}},{key:"componentDidUpdate",value:function(e,t){this.props.isOpen&&!e.isOpen?this.open():!this.props.isOpen&&e.isOpen&&this.close(),this.props.shouldFocusAfterRender&&this.state.isOpen&&!t.isOpen&&this.focusContent()}},{key:"componentWillUnmount",value:function(){this.afterClose(),clearTimeout(this.closeTimer)}},{key:"beforeOpen",value:function(){var e=this.props,t=e.appElement,n=e.ariaHideApp,r=e.htmlOpenClassName,o=e.bodyOpenClassName;o&&d.add(document.body,o),r&&d.add(document.getElementsByTagName("html")[0],r),n&&(b+=1,f.hide(t))}},{key:"render",value:function(){var e=this.props,t=e.className,n=e.overlayClassName,o=e.defaultStyles,l=t?{}:o.content,a=n?{}:o.overlay;return this.shouldBeClosed()?null:i.default.createElement("div",{ref:this.setOverlayRef,className:this.buildClassName("overlay",n),style:r({},a,this.props.style.overlay),onClick:this.handleOverlayOnClick,onMouseDown:this.handleOverlayOnMouseDown},i.default.createElement("div",r({ref:this.setContentRef,style:r({},l,this.props.style.content),className:this.buildClassName("content",t),tabIndex:"-1",onKeyDown:this.handleKeyDown,onMouseDown:this.handleContentOnMouseDown,onMouseUp:this.handleContentOnMouseUp,onClick:this.handleContentOnClick,role:this.props.role,"aria-label":this.props.contentLabel},this.attributesFromObject("aria",this.props.aria||{}),this.attributesFromObject("data",this.props.data||{}),{"data-testid":this.props.testId}),this.props.children))}}]),t}();w.defaultProps={style:{overlay:{},content:{}},defaultStyles:{}},w.propTypes={isOpen:u.default.bool.isRequired,defaultStyles:u.default.shape({content:u.default.object,overlay:u.default.object}),style:u.default.shape({content:u.default.object,overlay:u.default.object}),className:u.default.oneOfType([u.default.string,u.default.object]),overlayClassName:u.default.oneOfType([u.default.string,u.default.object]),bodyOpenClassName:u.default.string,htmlOpenClassName:u.default.string,ariaHideApp:u.default.bool,appElement:u.default.instanceOf(p.default),onAfterOpen:u.default.func,onAfterClose:u.default.func,onRequestClose:u.default.func,closeTimeoutMS:u.default.number,shouldFocusAfterRender:u.default.bool,shouldCloseOnOverlayClick:u.default.bool,shouldReturnFocusAfterClose:u.default.bool,role:u.default.string,contentLabel:u.default.string,aria:u.default.object,data:u.default.object,children:u.default.node,shouldCloseOnEsc:u.default.bool,overlayRef:u.default.func,contentRef:u.default.func,testId:u.default.string},t.default=w,e.exports=t.default},S1to:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=(0,l.default)(e);if(!n.length)return void t.preventDefault();var r,o=t.shiftKey,a=n[0],i=n[n.length-1];if(e===document.activeElement){if(!o)return;r=i}i!==document.activeElement||o||(r=a);a===document.activeElement&&o&&(r=i);if(r)return t.preventDefault(),void r.focus();var u=/(\bChrome\b|\bSafari\b)\//.exec(navigator.userAgent);if(null==u||"Chrome"==u[1]||null!=/\biPod\b|\biPad\b/g.exec(navigator.userAgent))return;var c=n.indexOf(document.activeElement);c>-1&&(c+=o?-1:1);if(void 0===n[c])return t.preventDefault(),void(r=o?i:a).focus();t.preventDefault(),n[c].focus()};var r,o=n("ZDLa"),l=(r=o)&&r.__esModule?r:{default:r};e.exports=t.default},Ty5D:function(e,t,n){"use strict";var r=n("/tz4"),o=n.n(r);function l(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}var a=n("q1tI"),i=n.n(a),u=(n("17x9"),n("LhCv")),c=n("9R94"),s=n("8tgM"),f=n.n(s);function d(){return(d=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}n("2mql");n.d(t,"a",function(){return w}),n.d(t,"b",function(){return h}),n.d(t,"c",function(){return m});var m=function(e){var t=o()();return t.Provider.displayName=e+".Provider",t.Consumer.displayName=e+".Consumer",t}("Router"),h=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen(function(e){n._isMounted?n.setState({location:e}):n._pendingLocation=e})),n}l(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){this._isMounted=!0,this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&this.unlisten()},n.render=function(){return i.a.createElement(m.Provider,{children:this.props.children||null,value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}})},t}(i.a.Component);i.a.Component;i.a.Component;var y={},v=1e4,g=0;function b(e,t){void 0===t&&(t={}),"string"==typeof t&&(t={path:t});var n=t,r=n.path,o=n.exact,l=void 0!==o&&o,a=n.strict,i=void 0!==a&&a,u=n.sensitive,c=void 0!==u&&u;return[].concat(r).reduce(function(t,n){if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=y[n]||(y[n]={});if(r[e])return r[e];var o=[],l={regexp:f()(e,o,t),keys:o};return g0&&a.pop()},t.setupScopedFocus=function(e){i=e,window.addEventListener?(window.addEventListener("blur",c,!1),document.addEventListener("focus",s,!0)):(window.attachEvent("onBlur",c),document.attachEvent("onFocus",s))},t.teardownScopedFocus=function(){i=null,window.addEventListener?(window.removeEventListener("blur",c),document.removeEventListener("focus",s)):(window.detachEvent("onBlur",c),document.detachEvent("onFocus",s))};var r,o=n("ZDLa"),l=(r=o)&&r.__esModule?r:{default:r};var a=[],i=null,u=!1;function c(){u=!0}function s(){if(u){if(u=!1,!i)return;setTimeout(function(){i.contains(document.activeElement)||((0,l.default)(i)[0]||i).focus()},0)}}},Ye7m:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.assertNodeList=u,t.setElement=function(e){var t=e;if("string"==typeof t&&a.canUseDOM){var n=document.querySelectorAll(t);u(n,t),t="length"in n?n[0]:n}return i=t||i},t.validateElement=c,t.hide=function(e){c(e)&&(e||i).setAttribute("aria-hidden","true")},t.show=function(e){c(e)&&(e||i).removeAttribute("aria-hidden")},t.documentNotReadyOrSSRTesting=function(){i=null},t.resetForTesting=function(){i=null};var r,o=n("6DQo"),l=(r=o)&&r.__esModule?r:{default:r},a=n("2zs7");var i=null;function u(e,t){if(!e||!e.length)throw new Error("react-modal: No elements were found for selector "+t+".")}function c(e){return!(!e&&!i)||((0,l.default)(!1,["react-modal: App element is not defined.","Please use `Modal.setAppElement(el)` or set `appElement={el}`.","This is needed so screen readers don't see main content","when modal is opened. It is not recommended, but you can opt-out","by setting `ariaHideApp={false}`."].join(" ")),!1)}},ZDLa:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return[].slice.call(e.querySelectorAll("*"),0).filter(a)}; +/*! + * Adapted from jQuery UI core + * + * http://jqueryui.com + * + * Copyright 2014 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/category/ui-core/ + */ +var r=/input|select|textarea|button|object/;function o(e){var t=e.offsetWidth<=0&&e.offsetHeight<=0;if(t&&!e.innerHTML)return!0;var n=window.getComputedStyle(e);return t?"visible"!==n.getPropertyValue("overflow"):"none"==n.getPropertyValue("display")}function l(e,t){var n=e.nodeName.toLowerCase();return(r.test(n)&&!e.disabled||"a"===n&&e.href||t)&&function(e){for(var t=e;t&&t!==document.body;){if(o(t))return!1;t=t.parentNode}return!0}(e)}function a(e){var t=e.getAttribute("tabindex");null===t&&(t=void 0);var n=isNaN(t);return(n||t>=0)&&l(e,!n)}e.exports=t.default},fbhf:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.dumpClassLists=function(){0};var r={},o={};t.add=function(e,t){return n=e.classList,l="html"==e.nodeName.toLowerCase()?r:o,void t.split(" ").forEach(function(e){!function(e,t){e[t]||(e[t]=0),e[t]+=1}(l,e),n.add(e)});var n,l},t.remove=function(e,t){return n=e.classList,l="html"==e.nodeName.toLowerCase()?r:o,void t.split(" ").forEach(function(e){!function(e,t){e[t]&&(e[t]-=1)}(l,e),0===l[e]&&n.remove(e)});var n,l}},i8i4:function(e,t,n){"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(e){console.error(e)}}(),e.exports=n("yl30")},mSXw:function(e,t,n){"use strict";e.exports=n("9iN/")},q1tI:function(e,t,n){"use strict";e.exports=n("viRO")},qFS3:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.bodyOpenClassName=t.portalClassName=void 0;var r=Object.assign||function(e){for(var t=1;tM.length&&M.push(e)}function U(e,t,n){return null==e?0:function e(t,n,r,o){var i=typeof t;"undefined"!==i&&"boolean"!==i||(t=null);var u=!1;if(null===t)u=!0;else switch(i){case"string":case"number":u=!0;break;case"object":switch(t.$$typeof){case l:case a:u=!0}}if(u)return r(o,t,""===n?"."+A(t,0):n),1;if(u=0,n=""===n?".":n+":",Array.isArray(t))for(var c=0;cthis.eventPool.length&&this.eventPool.push(e)}function fe(e){e.eventPool=[],e.getPooled=ce,e.release=se}o(ue.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=ae)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=ae)},persist:function(){this.isPersistent=ae},isPersistent:ie,destructor:function(){var e,t=this.constructor.Interface;for(e in t)this[e]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=null,this.isPropagationStopped=this.isDefaultPrevented=ie,this._dispatchInstances=this._dispatchListeners=null}}),ue.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null},ue.extend=function(e){function t(){}function n(){return r.apply(this,arguments)}var r=this;t.prototype=r.prototype;var l=new t;return o(l,n.prototype),n.prototype=l,n.prototype.constructor=n,n.Interface=o({},r.Interface,e),n.extend=r.extend,fe(n),n},fe(ue);var de=ue.extend({data:null}),pe=ue.extend({data:null}),me=[9,13,27,32],he=H&&"CompositionEvent"in window,ye=null;H&&"documentMode"in document&&(ye=document.documentMode);var ve=H&&"TextEvent"in window&&!ye,ge=H&&(!he||ye&&8=ye),be=String.fromCharCode(32),we={beforeInput:{phasedRegistrationNames:{bubbled:"onBeforeInput",captured:"onBeforeInputCapture"},dependencies:["compositionend","keypress","textInput","paste"]},compositionEnd:{phasedRegistrationNames:{bubbled:"onCompositionEnd",captured:"onCompositionEndCapture"},dependencies:"blur compositionend keydown keypress keyup mousedown".split(" ")},compositionStart:{phasedRegistrationNames:{bubbled:"onCompositionStart",captured:"onCompositionStartCapture"},dependencies:"blur compositionstart keydown keypress keyup mousedown".split(" ")},compositionUpdate:{phasedRegistrationNames:{bubbled:"onCompositionUpdate",captured:"onCompositionUpdateCapture"},dependencies:"blur compositionupdate keydown keypress keyup mousedown".split(" ")}},ke=!1;function xe(e,t){switch(e){case"keyup":return-1!==me.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"blur":return!0;default:return!1}}function Ce(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Te=!1;var Ee={eventTypes:we,extractEvents:function(e,t,n,r){var o=void 0,l=void 0;if(he)e:{switch(e){case"compositionstart":o=we.compositionStart;break e;case"compositionend":o=we.compositionEnd;break e;case"compositionupdate":o=we.compositionUpdate;break e}o=void 0}else Te?xe(e,n)&&(o=we.compositionEnd):"keydown"===e&&229===n.keyCode&&(o=we.compositionStart);return o?(ge&&"ko"!==n.locale&&(Te||o!==we.compositionStart?o===we.compositionEnd&&Te&&(l=le()):(re="value"in(ne=r)?ne.value:ne.textContent,Te=!0)),o=de.getPooled(o,t,n,r),l?o.data=l:null!==(l=Ce(n))&&(o.data=l),B(o),l=o):l=null,(e=ve?function(e,t){switch(e){case"compositionend":return Ce(t);case"keypress":return 32!==t.which?null:(ke=!0,be);case"textInput":return(e=t.data)===be&&ke?null:e;default:return null}}(e,n):function(e,t){if(Te)return"compositionend"===e||!he&&xe(e,t)?(e=le(),oe=re=ne=null,Te=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1