{
30 | "name": "warp-001",
31 | "type": "wireguard",
32 | "server": "162.159.192.1",
33 | "port": 2408,
34 | "ip": "172.16.0.2",
35 | "ipv6": "",
36 | "private-key": "",
37 | "public-key": "bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=",
38 | "pre-shared-key": "",
39 | "reserved": "",
40 | "udp": true,
41 | "mtu": 1280
42 | }
43 |
44 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 | 注意:有线宽带或光纤、无线 WiFi 没有公网 IPv6 地址的,无法跑出 IPv6 的 [result.csv](https://github.com/MiSaturo/CFWarp-Windows) 文件,不管您从网上哪里弄来 `reult.csv` 文件(包括这个代码库),没有 IPv6 的地址,是使用不了的,除非套一层 IPv6 的代理。本代码中的 IPv6 UDP 延迟测试,是基于 Cloudflare WARP 提供的 IPv6 地址测试出来的。
60 |
61 | 支持其他服务商提供的 WireGuard 配置文件,由于没有大量、不同服务商提供的 WireGuard 配置文件作为数据测试,不保证所有WireGuard 配置文件都能转为`nekoray://` 或 `sn://` 链接使用,建议自己测试。目前我只知道,需要如图中 `PrivateKey`、`Address `、`PublicKey`、`Endpoint` 这四个参数值,就能转换/生成 `nekoray://` 或 `sn://` 的分享链接。
62 |
63 |
64 |
65 |
66 |
67 |
68 | ### 三、使用到的工具:
69 |
70 | - NekoBox Windows版:https://github.com/MatsuriDayo/nekoray/releases
71 | - NekoBox Android版:https://github.com/MatsuriDayo/NekoBoxForAndroid
--------------------------------------------------------------------------------
/2.批量构建nekoray节点(txt文件).py:
--------------------------------------------------------------------------------
1 | import base64
2 | import os
3 | import sys
4 |
5 |
6 | # 检查文件是否存在或大小为0,即文件无效
7 | def check_file_exist_or_zero_size(file):
8 | if not os.path.exists(file) or os.stat(file).st_size == 0:
9 | sys.exit()
10 |
11 |
12 | # 读取优选ip的ip.txt文件
13 | def read_ip_endpoints(txt_file):
14 | endpoints = []
15 | with open(file=txt_file, mode='r', encoding='utf-8') as rf:
16 | for item in rf.readlines():
17 | if item.strip() != "":
18 | endpoints.append(item.strip())
19 | return endpoints
20 |
21 |
22 | # 读取wg-config.conf配置文件的信息
23 | def read_wireguard_key_parameters(conf_file):
24 | with open(file=conf_file, mode='r', encoding='utf-8') as f:
25 | wireguard_param = dict()
26 | for line in f:
27 | if line:
28 | if line.startswith("PrivateKey"):
29 | wireguard_param["PrivateKey"] = line.strip().replace(' ', '').replace("PrivateKey=", '')
30 | if line.startswith("PublicKey"):
31 | wireguard_param["PublicKey"] = line.strip().replace(' ', '').replace("PublicKey=", '')
32 | if line.startswith("Address"):
33 | wireguard_param["Address"] = line.strip().replace(' ', '').replace("Address=", '').split(',')
34 | if line.startswith("MTU"):
35 | wireguard_param["MTU"] = line.strip().replace(' ', '').replace("MTU=", '')
36 | return wireguard_param
37 |
38 |
39 | # 将从配置文件中读取到信息,写入到指定的JSON字符串中
40 | def update_base_info(conf_file, MTU=None):
41 | param = read_wireguard_key_parameters(conf_file)
42 | peer_public_key = param["PublicKey"].strip()
43 | private_key = param["PrivateKey"].strip()
44 | Address = param.get("Address")
45 | # if条件针对wireguard配置中,Address行的值有多个值或一个值的情况
46 | if len(Address) > 1: # 多个值(一般是IPv4 CIDR 和 IPv6 CIDR)
47 | local_address = r"[\n" + ','.join([r' \"{ip}\"'.format(ip=item) for item in Address]) + r"\n ]"
48 | else: # 只有一个值
49 | local_address = r'\"{ip}\"'.format(ip=Address[0])
50 | MTU = param.get('MTU', 1408) if MTU is None else MTU
51 | nekoray_str_json = '{"_v":0,"addr":"127.0.0.1","cmd":[""],"core":"internal","cs":"{\\n \\"interface_name\\": ' \
52 | '\\"WARP\\",\\n \\"local_address\\": #local_address,\\n' \
53 | ' \\"mtu\\": #MUT值,\\n \\"peer_public_key\\": \\"#peer_public_key\\",\\n \\"private_key\\":' \
54 | ' \\"#private_key\\",\\n \\"server\\": \\"IP地址\\",\\n \\"server_port\\": 端口,\\n ' \
55 | '\\"system_interface\\": false,\\n \\"tag\\": \\"proxy\\",\\n \\"type\\": \\"wireguard' \
56 | '\\"\\n}","mapping_port":0,"name":"别名","port":1080,"socks_port":0}'
57 | update_key = nekoray_str_json.replace('#peer_public_key', peer_public_key).replace('#private_key', private_key)
58 | update_address = update_key.replace('#local_address', local_address).replace('#MUT值', str(MTU))
59 | return update_address
60 |
61 |
62 | if __name__ == '__main__':
63 | """判断文件是否存在或文件的大小为0"""
64 | files = ["配置文件/wg-config.conf", "ip.txt"]
65 | for file in files:
66 | check_file_exist_or_zero_size(file) # 检查文件是否存在
67 | """MTU值的修改"""
68 | print("是否修改MTU值?输入内容为空时,就默认为配置文件的值,配置文件中没有MTU值,就使用1408;")
69 | while True:
70 | input_mtu = input("这里输入MTU值,取值范围为1280~1500:")
71 | if (input_mtu.isdigit() and 1280 <= int(input_mtu) <= 1500) or input_mtu.strip() == '':
72 | break
73 | input_country = input('添加节点名称或别名的前缀吗?(比如,CN):').strip()
74 | country = f'{input_country.strip()}_' if input_country != '' else ''
75 | base_str = None
76 | if input_mtu.isdigit():
77 | base_str = update_base_info(files[0], MTU=input_mtu) # 调用函数
78 | else:
79 | base_str = update_base_info(files[0]) # 调用函数
80 | endpoints = read_ip_endpoints(txt_file=files[1])
81 | output_file = 'output-node.txt' # nekoray节点保存到这里
82 | f = open(output_file, mode='w', encoding='utf-8')
83 | for endpoint in endpoints:
84 | ip = endpoint.rsplit(':', 1)[0]
85 | ip = ip[1:-1] if ip.startswith('[') and ip.endswith(']') else ip # 针对IPv6地址,写入JSON的server中要去掉中括号
86 | port = endpoint.rsplit(':', 1)[1]
87 | remarks = f"{ip}:{port}" if ip.count(":") == 0 else f"[{ip}]:{port}" # 节点的别名、节点的名称(不重要,ipv6的加上中括号)
88 | node = base_str.replace('别名', f'{country}{remarks}').replace('IP地址', ip).replace('端口', port)
89 | encoded = base64.b64encode(node.encode('utf-8'), altchars=b'-_')
90 | encoded_str = str(encoded, encoding='utf-8')
91 | transport_protocol = "nekoray://custom#" # 在base64编码好的字符串前缀添加这个前缀(NekoBox软件专用的前缀)
92 | nekoray_node = transport_protocol + encoded_str
93 | f.write(f"{nekoray_node}\n")
94 | f.flush()
95 | print(f"已经将节点写入{output_file}文件中!\n")
96 | f.close()
97 | os.system("pause")
98 |
--------------------------------------------------------------------------------
/3.批量构建nekoray节点(csv文件).py:
--------------------------------------------------------------------------------
1 | import base64
2 | import os
3 | import sys
4 |
5 |
6 | # 检查文件是否存在或大小为0,即文件无效
7 | def check_file_exist_or_zero_size(file):
8 | if not os.path.exists(file) or os.stat(file).st_size == 0:
9 | sys.exit()
10 |
11 |
12 | # 读取优选ip的result.csv文件
13 | def read_ip_endpoints(csv_file):
14 | endpoints = []
15 | with open(file=csv_file, mode='r', encoding='utf-8') as rf:
16 | next(rf)
17 | for line in rf:
18 | delay = line.strip().split(',')[-1].replace(' ', '').replace('ms', '')
19 | if int(delay) < 500:
20 | endpoint = line.strip().split(',')[0]
21 | endpoints.append(endpoint)
22 | return endpoints
23 |
24 |
25 | # 读取wg-config.conf配置文件的信息
26 | def read_wireguard_key_parameters(conf_file):
27 | with open(file=conf_file, mode='r', encoding='utf-8') as f:
28 | wireguard_param = dict()
29 | for line in f:
30 | if line:
31 | if line.startswith("PrivateKey"):
32 | wireguard_param["PrivateKey"] = line.strip().replace(' ', '').replace("PrivateKey=", '')
33 | if line.startswith("PublicKey"):
34 | wireguard_param["PublicKey"] = line.strip().replace(' ', '').replace("PublicKey=", '')
35 | if line.startswith("Address"):
36 | wireguard_param["Address"] = line.strip().replace(' ', '').replace("Address=", '').split(',')
37 | if line.startswith("MTU"):
38 | wireguard_param["MTU"] = line.strip().replace(' ', '').replace("MTU=", '')
39 | return wireguard_param
40 |
41 |
42 | # 将从配置文件中读取到信息,写入到指定的JSON字符串中
43 | def update_base_info(conf_file, MTU=None):
44 | param = read_wireguard_key_parameters(conf_file)
45 | peer_public_key = param["PublicKey"].strip()
46 | private_key = param["PrivateKey"].strip()
47 | Address = param.get("Address")
48 | # if条件针对wireguard配置中,Address行的值有多个值或一个值的情况
49 | if len(Address) > 1: # 多个值(一般是IPv4 CIDR 和 IPv6 CIDR)
50 | local_address = r"[\n" + ','.join([r' \"{ip}\"'.format(ip=item) for item in Address]) + r"\n ]"
51 | else: # 只有一个值
52 | local_address = r'\"{ip}\"'.format(ip=Address[0])
53 | MTU = param.get('MTU', 1408) if MTU is None else MTU
54 | nekoray_str_json = '{"_v":0,"addr":"127.0.0.1","cmd":[""],"core":"internal","cs":"{\\n \\"interface_name\\": ' \
55 | '\\"WARP\\",\\n \\"local_address\\": #local_address,\\n' \
56 | ' \\"mtu\\": #MUT值,\\n \\"peer_public_key\\": \\"#peer_public_key\\",\\n \\"private_key\\":' \
57 | ' \\"#private_key\\",\\n \\"server\\": \\"IP地址\\",\\n \\"server_port\\": 端口,\\n ' \
58 | '\\"system_interface\\": false,\\n \\"tag\\": \\"proxy\\",\\n \\"type\\": \\"wireguard' \
59 | '\\"\\n}","mapping_port":0,"name":"别名","port":1080,"socks_port":0}'
60 | update_key = nekoray_str_json.replace('#peer_public_key', peer_public_key).replace('#private_key', private_key)
61 | update_address = update_key.replace('#local_address', local_address).replace('#MUT值', str(MTU))
62 | return update_address
63 |
64 |
65 | if __name__ == '__main__':
66 | """判断文件是否存在或文件的大小为0"""
67 | files = ["配置文件/wg-config.conf", "result.csv"]
68 | for file in files:
69 | check_file_exist_or_zero_size(file) # 检查文件是否存在
70 | """MTU值的修改"""
71 | print("是否修改MTU值?输入内容为空时,就默认为配置文件的值,配置文件中没有MTU值,就使用1408;")
72 | while True:
73 | input_mtu = input("这里输入MTU值,取值范围为1280~1500:")
74 | if (input_mtu.isdigit() and 1280 <= int(input_mtu) <= 1500) or input_mtu.strip() == '':
75 | break
76 | input_country = input('添加节点名称或别名的前缀吗?(比如,CN):').strip()
77 | country = f'{input_country.strip()}_' if input_country != '' else ''
78 | base_str = None
79 | if input_mtu.isdigit():
80 | base_str = update_base_info(conf_file=files[0], MTU=input_mtu) # 调用函数
81 | else:
82 | base_str = update_base_info(conf_file=files[0]) # 调用函数
83 | endpoints = read_ip_endpoints(csv_file=files[1])
84 | output_file = 'output-node.txt' # nekoray节点保存到这里
85 | f = open(output_file, mode='w', encoding='utf-8')
86 | for endpoint in endpoints:
87 | ip = endpoint.rsplit(':', 1)[0]
88 | ip = ip[1:-1] if ip.startswith('[') and ip.endswith(']') else ip # 针对IPv6地址,写入JSON的server中要去掉中括号
89 | port = endpoint.rsplit(':', 1)[1]
90 | remarks = f"{ip}:{port}" if ip.count(":") == 0 else f"[{ip}]:{port}" # 节点的别名、节点的名称(不重要,ipv6的加上中括号)
91 | node = base_str.replace('别名', f'{country}{remarks}').replace('IP地址', ip).replace('端口', port)
92 | encoded = base64.b64encode(node.encode('utf-8'), altchars=b'-_')
93 | encoded_str = str(encoded, encoding='utf-8')
94 | transport_protocol = "nekoray://custom#" # 在base64编码好的字符串前缀添加这个前缀(NekoBox软件专用的前缀)
95 | nekoray_node = transport_protocol + encoded_str
96 | f.write(f"{nekoray_node}\n")
97 | f.flush()
98 | print(f"已经将节点写入{output_file}文件中!\n")
99 | f.close()
100 | os.system("pause")
101 |
--------------------------------------------------------------------------------
/ip.txt:
--------------------------------------------------------------------------------
1 | 162.159.192.107:878
2 | 162.159.195.74:968
3 | 162.159.195.27:2371
4 | 162.159.195.242:2371
5 | 162.159.192.254:878
6 | 162.159.192.150:7281
7 | 162.159.192.238:878
8 | 162.159.195.248:968
9 | 162.159.192.220:878
10 | 162.159.192.125:878
11 | 162.159.195.58:968
12 | 162.159.192.149:7281
13 | 162.159.192.77:878
14 | 162.159.192.58:7281
15 | 162.159.195.241:2371
16 | 162.159.192.150:878
17 | 162.159.195.50:968
18 | 162.159.192.149:878
19 | 162.159.192.221:878
20 | 162.159.195.68:2371
21 | 162.159.195.26:2371
22 | 162.159.192.34:7281
23 | 162.159.192.198:7281
24 | 162.159.192.238:7281
25 | 162.159.192.65:7281
26 | 162.159.195.54:968
27 | 162.159.195.44:968
28 | 162.159.192.199:878
29 | 162.159.195.83:2371
30 | 162.159.192.53:878
31 | 162.159.192.239:7281
32 | 162.159.192.135:878
33 | 162.159.195.35:2371
34 | 162.159.192.138:878
35 | 162.159.192.53:7281
36 | 162.159.192.62:878
37 | 162.159.195.245:2371
38 | 162.159.195.59:968
39 | 162.159.192.88:7281
40 | 162.159.192.136:7281
41 | 162.159.195.222:878
42 | 162.159.192.62:7281
43 | 162.159.195.89:2371
44 | 162.159.195.49:968
45 | 162.159.195.94:2371
46 | 162.159.192.88:878
47 | 162.159.195.39:2371
48 | 162.159.195.43:968
49 | 162.159.192.236:878
50 | 162.159.192.136:878
51 | 162.159.192.157:7281
52 | 162.159.192.83:878
53 | 162.159.195.72:2371
54 | 162.159.192.250:7281
55 | 162.159.195.239:2371
56 | 162.159.195.227:968
57 | 162.159.192.215:878
58 | 162.159.195.50:2371
59 | 162.159.192.84:878
60 | 162.159.192.25:7281
61 | 162.159.195.58:2371
62 | 162.159.192.38:7281
63 | 162.159.195.220:878
64 | 162.159.195.34:968
65 | 162.159.192.58:878
66 | 162.159.195.31:2371
67 | 162.159.195.31:968
68 | 162.159.192.248:878
69 | 162.159.192.210:7281
70 | 162.159.195.242:968
71 | 162.159.192.151:7281
72 | 162.159.192.147:7281
73 | 162.159.195.30:2371
74 | 162.159.192.254:7281
75 | 162.159.192.221:7281
76 | 162.159.192.189:878
77 | 162.159.192.189:7281
78 | 162.159.195.77:968
79 | 162.159.192.30:7281
80 | 162.159.195.27:968
81 | 162.159.192.125:7281
82 | 162.159.192.215:7281
83 | 162.159.192.122:7281
84 | 162.159.195.44:2371
85 | 162.159.192.190:7281
86 | 162.159.195.5:968
87 | 162.159.195.49:2371
88 | 162.159.192.141:878
89 | 162.159.192.165:878
90 | 162.159.195.52:2371
91 | 162.159.192.116:7281
92 | 162.159.195.48:968
93 | 162.159.192.193:7281
94 | 162.159.195.229:2371
95 | 162.159.195.227:2371
96 | 162.159.195.235:2371
97 | 162.159.192.168:7281
98 | 162.159.192.234:7281
99 | 162.159.195.65:2371
100 | 162.159.195.226:2371
101 | 162.159.192.199:7281
102 | 162.159.192.79:7281
103 | 162.159.195.245:968
104 | 162.159.195.51:968
105 | 162.159.192.165:7281
106 | 162.159.192.116:878
107 | 162.159.192.196:7281
108 | 162.159.192.225:7281
109 | 162.159.192.85:878
110 | 162.159.195.53:2371
111 | 162.159.195.51:2371
112 | 162.159.192.65:878
113 | 162.159.192.117:7281
114 | 162.159.195.226:968
115 | 162.159.195.239:968
116 | 162.159.195.42:968
117 | 162.159.195.228:968
118 | 162.159.195.229:968
119 | 162.159.192.225:878
120 | 162.159.192.85:7281
121 | 162.159.195.28:2371
122 | 162.159.195.48:2371
123 | 162.159.192.196:878
124 | 162.159.192.50:878
125 | 162.159.195.228:2371
126 | 162.159.192.138:7281
127 | 162.159.192.50:7281
128 | 162.159.195.39:968
129 | 162.159.192.185:878
130 | 162.159.195.90:2371
131 | 162.159.192.192:878
132 | 162.159.195.43:2371
133 | 162.159.195.185:878
134 | 162.159.192.239:878
135 | 162.159.192.252:7281
136 | 162.159.195.246:2371
137 | 162.159.192.142:7281
138 | 162.159.192.135:7281
139 | 162.159.192.251:7281
140 | 162.159.192.222:7281
141 | 162.159.192.84:7281
142 | 162.159.195.88:2371
143 | 162.159.195.222:7281
144 | 162.159.192.83:7281
145 | 162.159.195.241:968
146 | 162.159.192.38:878
147 | 162.159.192.195:7281
148 | 162.159.192.236:7281
149 | 162.159.192.40:878
150 | 162.159.192.203:7281
151 | 162.159.192.129:878
152 | 162.159.192.148:7281
153 | 162.159.195.0:7281
154 | 162.159.192.248:7281
155 | 162.159.192.129:7281
156 | 162.159.195.246:968
157 | 162.159.192.151:878
158 | 162.159.192.123:7281
159 | 162.159.195.101:7281
160 | 162.159.192.25:878
161 | 162.159.195.17:878
162 | 162.159.192.252:878
163 | 162.159.192.154:7281
164 | 162.159.192.55:878
165 | 162.159.192.250:878
166 | 162.159.192.157:878
167 | 162.159.192.226:7281
168 | 162.159.192.203:878
169 | 162.159.192.210:878
170 | 162.159.192.61:7281
171 | 162.159.192.158:7281
172 | 162.159.192.154:878
173 | 162.159.192.168:878
174 | 162.159.192.253:7281
175 | 162.159.192.86:878
176 | 162.159.192.40:7281
177 | 162.159.192.195:878
178 | 162.159.192.226:878
179 | 162.159.192.206:7281
180 | 162.159.192.206:878
181 | 162.159.192.141:7281
182 | 162.159.192.231:7281
183 | 162.159.192.30:878
184 | 162.159.192.134:7281
185 | 162.159.192.61:878
186 | 162.159.192.108:7281
187 | 162.159.192.160:7281
188 | 162.159.192.234:878
189 | 162.159.192.123:878
190 | 162.159.192.148:878
191 | 162.159.192.86:7281
192 | 162.159.192.158:878
193 | 162.159.195.5:2371
194 | 162.159.192.107:7281
195 | 162.159.195.248:2371
196 | 162.159.192.78:878
197 | 162.159.192.108:878
198 | 162.159.192.134:878
199 |
--------------------------------------------------------------------------------
/1.生成单个nekoray节点.py:
--------------------------------------------------------------------------------
1 | import pyperclip # 将指定的运行结果自动复制到剪切板
2 | import base64
3 | import os
4 | import sys
5 | import re
6 |
7 |
8 | # 检查文件是否存在或大小为0,即文件无效
9 | def check_file_exist_or_zero_size(file):
10 | if not os.path.exists(file) or os.stat(file).st_size == 0:
11 | sys.exit()
12 |
13 |
14 | # 读取配置文件的信息
15 | def read_wireguard_key_parameters(conf_file):
16 | with open(file=conf_file, mode='r', encoding='utf-8') as f:
17 | wireguard_param = dict()
18 | for line in f:
19 | if line:
20 | if line.startswith("PrivateKey"):
21 | wireguard_param["PrivateKey"] = line.strip().replace(' ', '').replace("PrivateKey=", '')
22 | if line.startswith("PublicKey"):
23 | wireguard_param["PublicKey"] = line.strip().replace(' ', '').replace("PublicKey=", '')
24 | if line.startswith("Address"):
25 | wireguard_param["Address"] = line.strip().replace(' ', '').replace("Address=", '').split(',')
26 | if line.startswith("MTU"):
27 | wireguard_param["MTU"] = line.strip().replace(' ', '').replace("MTU=", '')
28 | return wireguard_param
29 |
30 |
31 | # 将从配置文件中读取到信息,写入到指定的JSON字符串中
32 | def update_base_info(conf_file, MTU=None):
33 | param = read_wireguard_key_parameters(conf_file)
34 | peer_public_key = param["PublicKey"].strip()
35 | private_key = param["PrivateKey"].strip()
36 | Address = param.get("Address")
37 | # if条件针对wireguard配置中,Address行的值有多个值或一个值的情况
38 | if len(Address) > 1: # 多个值(一般是IPv4 CIDR 和 IPv6 CIDR)
39 | local_address = r"[\n" + ','.join([r' \"{ip}\"'.format(ip=item) for item in Address]) + r"\n ]"
40 | else: # 只有一个值
41 | local_address = r'\"{ip}\"'.format(ip=Address[0])
42 | MTU = param.get('MTU', 1408) if MTU is None else MTU
43 | nekoray_str_json = '{"_v":0,"addr":"127.0.0.1","cmd":[""],"core":"internal","cs":"{\\n \\"interface_name\\": ' \
44 | '\\"WARP\\",\\n \\"local_address\\": #local_address,\\n' \
45 | ' \\"mtu\\": #MUT值,\\n \\"peer_public_key\\": \\"#peer_public_key\\",\\n \\"private_key\\":' \
46 | ' \\"#private_key\\",\\n \\"server\\": \\"IP地址\\",\\n \\"server_port\\": 端口,\\n ' \
47 | '\\"system_interface\\": false,\\n \\"tag\\": \\"proxy\\",\\n \\"type\\": \\"wireguard' \
48 | '\\"\\n}","mapping_port":0,"name":"别名","port":1080,"socks_port":0}'
49 | update_key = nekoray_str_json.replace('#peer_public_key', peer_public_key).replace('#private_key', private_key)
50 | update_address = update_key.replace('#local_address', local_address).replace('#MUT值', str(MTU))
51 | return update_address
52 |
53 |
54 | # 判断是否为IP地址(IPv4或IPv6)
55 | def is_ip_address(ip_addr):
56 | """ 匹配 IPv4 和 IPv6 地址 """
57 | ipv4_pattern = r'^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$'
58 | ipv6_pattern = r'^(?:(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|(?:[0-9a-fA-F]{1,4}:){1,7}:|(?:[0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|(?:[0-9a-fA-F]{1,4}:){1,5}(?::[0-9a-fA-F]{1,4}){1,2}|(?:[0-9a-fA-F]{1,4}:){1,4}(?::[0-9a-fA-F]{1,4}){1,3}|(?:[0-9a-fA-F]{1,4}:){1,3}(?::[0-9a-fA-F]{1,4}){1,4}|(?:[0-9a-fA-F]{1,4}:){1,2}(?::[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:(?:(?::[0-9a-fA-F]{1,4}){1,6})|:(?:(?::[0-9a-fA-F]{1,4}){1,7}|:))$'
59 | try:
60 | addr = ip_addr.rsplit(":", 1)[0]
61 | ip = addr[1:-1] if addr.startswith('[') and addr.endswith(']') else addr
62 | port = ip_addr.rsplit(':', 1)[1] if ip_addr.count(":") == 1 or (
63 | ip_addr.count(":") > 3 and "]:" in ip_addr) else None
64 | if re.match(ipv4_pattern, ip) and (port.isdigit() and int(port) >= 80):
65 | ipv4 = re.match(ipv4_pattern, ip).group(0)
66 | return True
67 | elif re.match(ipv6_pattern, ip) and (port.isdigit() and int(port) >= 80):
68 | ipv6 = re.match(ipv6_pattern, ip).group(0)
69 | return True
70 | except Exception as e:
71 | pass
72 |
73 |
74 | if __name__ == '__main__':
75 | """判断文件是否存在或文件的大小为0"""
76 | file = "配置文件/wg-config.conf"
77 | check_file_exist_or_zero_size(file) # 检查文件是否存在
78 | """MTU值的修改"""
79 | print("是否修改MTU值?输入内容为空时,就默认为配置文件的值,配置文件中没有MTU值,就使用1408;")
80 | while True:
81 | input_mtu = input("这里输入MTU值,取值范围为1280~1500:")
82 | if (input_mtu.isdigit() and 1280 <= int(input_mtu) <= 1500) or input_mtu.strip() == '':
83 | break
84 | base_str = None
85 | if input_mtu.isdigit():
86 | base_str = update_base_info(file, MTU=input_mtu) # 调用函数
87 | else:
88 | base_str = update_base_info(file) # 调用函数
89 | print()
90 | while True:
91 | while True:
92 | input_endpoint = input("输入优选IP(格式:162.159.192.10:891),输入q、quit、exit退出程序:").strip()
93 | state = is_ip_address(input_endpoint)
94 | if state:
95 | break
96 | if input_endpoint.lower() in ["q", "quit", "exit"]:
97 | sys.exit()
98 | addr = input_endpoint.rsplit(":", 1)[0]
99 | ip = addr[1:-1] if addr.startswith('[') and addr.endswith(']') else addr # 去掉IPv6的中括号
100 | port = input_endpoint.rsplit(':', 1)[1]
101 | input_country = input('添加节点名称或别名的前缀吗?(比如,CN):')
102 | country = f'{input_country.strip()}_' if input_country != '' else '' # 是否添加前缀,通常使用国家或地区的的2个字母
103 | remarks = f"{ip}:{port}" if ip.count(":") == 0 else f"[{ip}]:{port}" # 节点的别名、节点的名称(不重要)
104 | node = base_str.replace('别名', f'{country}{remarks}').replace('IP地址', ip).replace('端口', port)
105 | encoded = base64.b64encode(node.encode('utf-8'), altchars=b'-_')
106 | encoded_str = str(encoded, encoding='utf-8')
107 | transport_protocol = "nekoray://custom#" # 在base64编码好的字符串的前面添加这个前缀(NekoBox软件专用的前缀)
108 | nekoray_node = transport_protocol + encoded_str
109 | pyperclip.copy(nekoray_node)
110 | print(f"{'-' * 52}NekoRAY节点如下:{'-' * 52}\n{nekoray_node}\n{'-' * 120}")
111 | print("节点已经复制到剪切板,可以黏贴到其它地方!")
112 | print(f"{'-' * 120}")
113 |
--------------------------------------------------------------------------------
/5.[Android]批量构建sn的wireguard节点(txt文件).py:
--------------------------------------------------------------------------------
1 | from dataclasses import field, dataclass
2 | import base64
3 | import zlib
4 | import os
5 | import sys
6 |
7 |
8 | # 检查文件是否存在或大小为0,即文件无效
9 | def check_file_exist_or_zero_size(file):
10 | if not os.path.exists(file) or os.stat(file).st_size == 0:
11 | sys.exit()
12 |
13 |
14 | # 读取优选ip的ip.txt文件
15 | def read_ip_endpoints(txt_file):
16 | endpoints = []
17 | with open(file=txt_file, mode='r', encoding='utf-8') as rf:
18 | for item in rf.readlines():
19 | if item.strip() != "":
20 | endpoints.append(item.strip())
21 | return endpoints
22 |
23 |
24 | # 读取wg-config.conf配置文件的信息
25 | def read_wireguard_key_parameters(conf_file):
26 | with open(file=conf_file, mode='r', encoding='utf-8') as f:
27 | wireguard_param = dict()
28 | for line in f:
29 | if line:
30 | if line.startswith("PrivateKey"):
31 | wireguard_param["PrivateKey"] = line.strip().replace(' ', '').replace("PrivateKey=", '')
32 | if line.startswith("PublicKey"):
33 | wireguard_param["PublicKey"] = line.strip().replace(' ', '').replace("PublicKey=", '')
34 | if line.startswith("Address"):
35 | wireguard_param["Address"] = line.strip().replace(' ', '').replace("Address=", '').split(',')
36 | if line.startswith("MTU"):
37 | wireguard_param["MTU"] = line.strip().replace(' ', '').replace("MTU=", '')
38 | if line.startswith("Reserved"):
39 | wireguard_param["Reserved"] = line.strip().replace(' ', '').replace("Reserved=", '')
40 | return wireguard_param
41 |
42 |
43 | def encode_sn_str(s: str) -> bytes:
44 | if not s:
45 | return b'\x81'
46 | if len(s) == 1:
47 | return b'\x82' + s.encode()
48 | ret = s.encode()
49 | ret = ret[:-1] + (ret[-1] | 0x80).to_bytes(1, 'little')
50 | return ret
51 |
52 |
53 | def p32(n: int):
54 | return n.to_bytes(4, 'little')
55 |
56 |
57 | def p8(n: int):
58 | return n.to_bytes(1, 'little')
59 |
60 |
61 | @dataclass(init=True, repr=True)
62 | class SnBase:
63 | def serialize(self) -> bytes:
64 | ret = b''
65 | for _, v in self.__dict__.items():
66 | ret += self.obj_serialize(v)
67 | return ret
68 |
69 | @classmethod
70 | def obj_serialize(cls, obj) -> bytes:
71 | ret = b''
72 | match type(obj):
73 | case __builtins__.str:
74 | ret += encode_sn_str(obj)
75 | case __builtins__.bool:
76 | ret += p8(int(obj))
77 | case __builtins__.int:
78 | ret += p32(obj)
79 | case _:
80 | if isinstance(obj, SnBase):
81 | ret += obj.serialize()
82 | return ret
83 |
84 |
85 | @dataclass(init=True, repr=True)
86 | class SnServer(SnBase):
87 | server_address: str = '162.159.192.10'
88 | server_port: int = 2408
89 |
90 |
91 | @dataclass(init=True, repr=True)
92 | class WireguardSerialize(SnBase):
93 | version: int = 2
94 | server: SnServer = field(default_factory=SnServer)
95 | localAddress: str = "172.16.0.2/32"
96 | privateKey: str = ''
97 | peerPublicKey: str = 'bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo='
98 | peerPreSharedKey: str = ''
99 | mtu: int = 1420
100 | reserved: str = ""
101 |
102 | def serialize(self) -> bytes:
103 | ret = b''
104 | ret += self.obj_serialize(self.version)
105 | ret += self.obj_serialize(self.server)
106 | ret += self.obj_serialize(self.localAddress)
107 | ret += self.obj_serialize(self.privateKey)
108 | ret += self.obj_serialize(self.peerPublicKey)
109 | ret += self.obj_serialize(self.peerPreSharedKey)
110 | ret += self.obj_serialize(self.mtu)
111 | ret += self.obj_serialize(self.reserved)
112 | return ret
113 |
114 |
115 | @dataclass(init=True, repr=True)
116 | class SnMeta(SnBase):
117 | extraVersion: int = 2
118 | name: str = ''
119 | customOutboundJson: str = ''
120 | customConfigJson: str = ''
121 |
122 |
123 | @dataclass(init=True, repr=True)
124 | class Wireguard(SnBase):
125 | WireguardSerialize: WireguardSerialize = field(default_factory=WireguardSerialize)
126 | sn_meta: SnMeta = field(default_factory=SnMeta)
127 |
128 | def __str__(self) -> str:
129 | # print(self.serialize())
130 | return f'sn://wg?{base64.urlsafe_b64encode(zlib.compress(self.serialize())).decode()}'
131 |
132 |
133 | if __name__ == '__main__':
134 | """ 读取外部文件的数据 """
135 | files = ["配置文件/wg-config.conf", "ip.txt"]
136 | for file in files:
137 | check_file_exist_or_zero_size(file) # 检查文件是否存在
138 | param = read_wireguard_key_parameters(files[0])
139 | private_key = param.get("PrivateKey")
140 | private_key = private_key if private_key else "+HfkMSyh7obEkX4J8Qa7Xk77CLVn45AW4CdBbnFNaGc=" # 找不到就使用这个私钥
141 | public_key = param.get("PublicKey")
142 | public_key = public_key if public_key else "bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=" # 找不到就使用这个公钥
143 | Reserved = param.get("Reserved")
144 | Reserved = Reserved if Reserved else "" # 找不到,就用空字符代替
145 | mtu = param.get("MTU")
146 | mtu = int(mtu) if mtu else 1280 # 找不到,就使用1280代替
147 | Address = param.get("Address")
148 | if Address is None or Address == "":
149 | local_address = "172.16.0.2/32"
150 | else:
151 | local_address = ",".join(Address) if isinstance(Address, list) else "172.16.0.2/32"
152 |
153 | """ 构建'sn://sg?'的链接 """
154 | results = []
155 | endpoints = read_ip_endpoints(files[1])
156 | for ip_with_port in endpoints:
157 | try:
158 | ip = ip_with_port.rsplit(":", 1)[0].strip("[").strip("]")
159 | port = ip_with_port.rsplit(":", 1)[1]
160 | serialize_obj = WireguardSerialize(server=SnServer(ip, int(port)),
161 | localAddress=local_address,
162 | privateKey=private_key,
163 | peerPublicKey=public_key,
164 | mtu=int(mtu), reserved=Reserved)
165 | # 配置名称,不能取中文名称,也不能取一些特殊字符,具体支持哪些字符,自己测试
166 | config_name = f"warp-{ip_with_port}"
167 | sn_wireguard = Wireguard(WireguardSerialize=serialize_obj, sn_meta=SnMeta(name=config_name))
168 | results.append(str(sn_wireguard))
169 | print(sn_wireguard)
170 | except Exception as e:
171 | pass
172 |
173 | """ 将结果写入文件中 """
174 | if len(results) > 0:
175 | output_file = 'output-node.txt'
176 | f = open(output_file, mode='w', encoding='utf-8')
177 | f.writelines("\n".join(results))
178 | f.close()
179 | print(f"已经将节点写入{output_file}文件中!\n")
180 | os.system("pause")
181 |
--------------------------------------------------------------------------------
/6.[Android]批量构建sn的wireguard节点(csv文件).py:
--------------------------------------------------------------------------------
1 | from dataclasses import field, dataclass
2 | import base64
3 | import zlib
4 | import os
5 | import sys
6 |
7 |
8 | # 检查文件是否存在或大小为0,即文件无效
9 | def check_file_exist_or_zero_size(file):
10 | if not os.path.exists(file) or os.stat(file).st_size == 0:
11 | sys.exit()
12 |
13 |
14 | # 读取优选ip的result.csv文件
15 | def read_ip_endpoints(csv_file):
16 | endpoints = []
17 | with open(file=csv_file, mode='r', encoding='utf-8') as rf:
18 | next(rf)
19 | for line in rf:
20 | delay = line.strip().split(',')[-1].replace(' ', '').replace('ms', '')
21 | if int(delay) < 500:
22 | endpoint = line.strip().split(',')[0]
23 | endpoints.append(endpoint)
24 | return endpoints
25 |
26 |
27 | # 读取wg-config.conf配置文件的信息
28 | def read_wireguard_key_parameters(conf_file):
29 | with open(file=conf_file, mode='r', encoding='utf-8') as f:
30 | wireguard_param = dict()
31 | for line in f:
32 | if line:
33 | if line.startswith("PrivateKey"):
34 | wireguard_param["PrivateKey"] = line.strip().replace(' ', '').replace("PrivateKey=", '')
35 | if line.startswith("PublicKey"):
36 | wireguard_param["PublicKey"] = line.strip().replace(' ', '').replace("PublicKey=", '')
37 | if line.startswith("Address"):
38 | wireguard_param["Address"] = line.strip().replace(' ', '').replace("Address=", '').split(',')
39 | if line.startswith("MTU"):
40 | wireguard_param["MTU"] = line.strip().replace(' ', '').replace("MTU=", '')
41 | if line.startswith("Reserved"):
42 | wireguard_param["Reserved"] = line.strip().replace(' ', '').replace("Reserved=", '')
43 | return wireguard_param
44 |
45 |
46 | def encode_sn_str(s: str) -> bytes:
47 | if not s:
48 | return b'\x81'
49 | if len(s) == 1:
50 | return b'\x82' + s.encode()
51 | ret = s.encode()
52 | ret = ret[:-1] + (ret[-1] | 0x80).to_bytes(1, 'little')
53 | return ret
54 |
55 |
56 | def p32(n: int):
57 | return n.to_bytes(4, 'little')
58 |
59 |
60 | def p8(n: int):
61 | return n.to_bytes(1, 'little')
62 |
63 |
64 | @dataclass(init=True, repr=True)
65 | class SnBase:
66 | def serialize(self) -> bytes:
67 | ret = b''
68 | for _, v in self.__dict__.items():
69 | ret += self.obj_serialize(v)
70 | return ret
71 |
72 | @classmethod
73 | def obj_serialize(cls, obj) -> bytes:
74 | ret = b''
75 | match type(obj):
76 | case __builtins__.str:
77 | ret += encode_sn_str(obj)
78 | case __builtins__.bool:
79 | ret += p8(int(obj))
80 | case __builtins__.int:
81 | ret += p32(obj)
82 | case _:
83 | if isinstance(obj, SnBase):
84 | ret += obj.serialize()
85 | return ret
86 |
87 |
88 | @dataclass(init=True, repr=True)
89 | class SnServer(SnBase):
90 | server_address: str = '162.159.192.10'
91 | server_port: int = 2408
92 |
93 |
94 | @dataclass(init=True, repr=True)
95 | class WireguardSerialize(SnBase):
96 | version: int = 2
97 | server: SnServer = field(default_factory=SnServer)
98 | localAddress: str = "172.16.0.2/32"
99 | privateKey: str = ''
100 | peerPublicKey: str = 'bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo='
101 | peerPreSharedKey: str = ''
102 | mtu: int = 1420
103 | reserved: str = ""
104 |
105 | def serialize(self) -> bytes:
106 | ret = b''
107 | ret += self.obj_serialize(self.version)
108 | ret += self.obj_serialize(self.server)
109 | ret += self.obj_serialize(self.localAddress)
110 | ret += self.obj_serialize(self.privateKey)
111 | ret += self.obj_serialize(self.peerPublicKey)
112 | ret += self.obj_serialize(self.peerPreSharedKey)
113 | ret += self.obj_serialize(self.mtu)
114 | ret += self.obj_serialize(self.reserved)
115 | return ret
116 |
117 |
118 | @dataclass(init=True, repr=True)
119 | class SnMeta(SnBase):
120 | extraVersion: int = 2
121 | name: str = ''
122 | customOutboundJson: str = ''
123 | customConfigJson: str = ''
124 |
125 |
126 | @dataclass(init=True, repr=True)
127 | class Wireguard(SnBase):
128 | WireguardSerialize: WireguardSerialize = field(default_factory=WireguardSerialize)
129 | sn_meta: SnMeta = field(default_factory=SnMeta)
130 |
131 | def __str__(self) -> str:
132 | # print(self.serialize())
133 | return f'sn://wg?{base64.urlsafe_b64encode(zlib.compress(self.serialize())).decode()}'
134 |
135 |
136 | if __name__ == '__main__':
137 | """ 读取外部文件的数据 """
138 | files = ["配置文件/wg-config.conf", "result.csv"]
139 | for file in files:
140 | check_file_exist_or_zero_size(file) # 检查文件是否存在
141 | param = read_wireguard_key_parameters(files[0])
142 | private_key = param.get("PrivateKey")
143 | private_key = private_key if private_key else "+HfkMSyh7obEkX4J8Qa7Xk77CLVn45AW4CdBbnFNaGc=" # 找不到就使用这个私钥
144 | public_key = param.get("PublicKey")
145 | public_key = public_key if public_key else "bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=" # 找不到就使用这个公钥
146 | Reserved = param.get("Reserved")
147 | Reserved = Reserved if Reserved else "" # 找不到,就用空字符代替
148 | mtu = param.get("MTU")
149 | mtu = int(mtu) if mtu else 1280 # 找不到,就使用1280代替
150 | Address = param.get("Address")
151 | if Address is None or Address == "":
152 | local_address = "172.16.0.2/32"
153 | else:
154 | local_address = ",".join(Address) if isinstance(Address, list) else "172.16.0.2/32"
155 |
156 | """ 构建'sn://sg?'的链接 """
157 | results = []
158 | endpoints = read_ip_endpoints(files[1])
159 | for ip_with_port in endpoints:
160 | try:
161 | ip = ip_with_port.rsplit(":", 1)[0].strip("[").strip("]")
162 | port = ip_with_port.rsplit(":", 1)[1]
163 | serialize_obj = WireguardSerialize(server=SnServer(ip, int(port)),
164 | localAddress=local_address,
165 | privateKey=private_key,
166 | peerPublicKey=public_key,
167 | mtu=int(mtu), reserved=Reserved)
168 | # 配置名称,不能取中文名称,也不能取一些特殊字符,具体支持哪些字符,自己测试
169 | config_name = f"warp-{ip_with_port}"
170 | sn_wireguard = Wireguard(WireguardSerialize=serialize_obj, sn_meta=SnMeta(name=config_name))
171 | results.append(str(sn_wireguard))
172 | print(sn_wireguard)
173 | except Exception as e:
174 | pass
175 |
176 | """ 将结果写入文件中 """
177 | if len(results) > 0:
178 | output_file = 'output-node.txt'
179 | f = open(output_file, mode='w', encoding='utf-8')
180 | f.writelines("\n".join(results))
181 | f.close()
182 | print(f"已经将节点写入{output_file}文件中!\n")
183 | os.system("pause")
184 |
--------------------------------------------------------------------------------
/result.csv:
--------------------------------------------------------------------------------
1 | IP:PORT, LOSS, DELAY
2 | 188.114.98.38:2506,0.00%,202 ms
3 | 188.114.99.62:894,0.00%,203 ms
4 | 188.114.96.32:894,0.00%,203 ms
5 | 188.114.98.243:894,0.00%,203 ms
6 | 188.114.96.225:894,0.00%,207 ms
7 | 188.114.96.131:894,0.00%,210 ms
8 | 188.114.97.170:2506,0.00%,210 ms
9 | 188.114.98.14:894,0.00%,211 ms
10 | 188.114.97.235:894,0.00%,212 ms
11 | 188.114.96.57:894,0.00%,215 ms
12 | 188.114.96.66:2506,0.00%,215 ms
13 | 188.114.98.131:2506,0.00%,215 ms
14 | 188.114.99.86:894,0.00%,217 ms
15 | 188.114.98.243:2506,0.00%,218 ms
16 | 188.114.98.238:894,0.00%,221 ms
17 | 188.114.96.173:894,0.00%,222 ms
18 | 188.114.96.206:2506,0.00%,223 ms
19 | 188.114.98.152:2506,0.00%,224 ms
20 | 188.114.97.234:894,0.00%,224 ms
21 | 188.114.96.101:2506,0.00%,224 ms
22 | 188.114.97.145:2506,0.00%,224 ms
23 | 188.114.97.61:2506,0.00%,224 ms
24 | 188.114.97.100:2506,0.00%,225 ms
25 | 188.114.98.49:894,0.00%,225 ms
26 | 188.114.99.210:2506,0.00%,225 ms
27 | 188.114.99.149:2506,0.00%,225 ms
28 | 188.114.96.224:894,0.00%,225 ms
29 | 188.114.97.61:894,0.00%,225 ms
30 | 188.114.99.216:2506,0.00%,226 ms
31 | 188.114.97.72:2506,0.00%,227 ms
32 | 188.114.96.10:894,0.00%,227 ms
33 | 188.114.96.104:894,0.00%,227 ms
34 | 188.114.97.145:894,0.00%,228 ms
35 | 188.114.96.57:2506,0.00%,228 ms
36 | 188.114.96.104:2506,0.00%,229 ms
37 | 188.114.99.32:894,0.00%,229 ms
38 | 188.114.96.77:894,0.00%,230 ms
39 | 188.114.98.30:894,0.00%,230 ms
40 | 188.114.99.90:894,0.00%,230 ms
41 | 188.114.98.14:2506,0.00%,231 ms
42 | 188.114.96.136:894,0.00%,231 ms
43 | 188.114.98.239:894,0.00%,231 ms
44 | 188.114.97.24:894,0.00%,231 ms
45 | 188.114.98.210:2506,0.00%,231 ms
46 | 188.114.99.210:894,0.00%,231 ms
47 | 188.114.97.31:2506,0.00%,231 ms
48 | 188.114.99.214:2506,0.00%,231 ms
49 | 188.114.98.90:2506,0.00%,231 ms
50 | 188.114.96.206:894,0.00%,232 ms
51 | 188.114.99.214:894,0.00%,232 ms
52 | 188.114.97.25:894,0.00%,233 ms
53 | 188.114.96.136:2506,0.00%,233 ms
54 | 188.114.98.254:894,0.00%,233 ms
55 | 188.114.97.29:2506,0.00%,234 ms
56 | 188.114.99.83:894,0.00%,234 ms
57 | 188.114.97.141:894,0.00%,234 ms
58 | 188.114.98.131:894,0.00%,234 ms
59 | 188.114.99.241:2506,0.00%,234 ms
60 | 188.114.98.166:2506,0.00%,235 ms
61 | 188.114.97.111:894,0.00%,235 ms
62 | 188.114.96.132:2506,0.00%,235 ms
63 | 188.114.97.144:2506,0.00%,235 ms
64 | 188.114.97.64:2506,0.00%,236 ms
65 | 188.114.96.141:2506,0.00%,236 ms
66 | 188.114.98.30:2506,0.00%,236 ms
67 | 188.114.98.51:894,0.00%,236 ms
68 | 188.114.98.166:894,0.00%,237 ms
69 | 188.114.99.241:894,0.00%,237 ms
70 | 188.114.96.210:2506,0.00%,237 ms
71 | 188.114.96.186:894,0.00%,237 ms
72 | 188.114.98.162:2506,0.00%,237 ms
73 | 188.114.97.188:2506,0.00%,238 ms
74 | 188.114.96.35:2506,0.00%,238 ms
75 | 188.114.96.172:894,0.00%,238 ms
76 | 188.114.96.32:2506,0.00%,238 ms
77 | 188.114.99.32:2506,0.00%,239 ms
78 | 188.114.98.146:2506,0.00%,240 ms
79 | 188.114.99.86:2506,0.00%,240 ms
80 | 188.114.98.210:894,0.00%,242 ms
81 | 188.114.99.87:894,0.00%,242 ms
82 | 188.114.99.10:894,0.00%,242 ms
83 | 188.114.97.64:894,0.00%,243 ms
84 | 188.114.96.183:894,0.00%,243 ms
85 | 188.114.96.131:2506,0.00%,243 ms
86 | 188.114.98.152:894,0.00%,243 ms
87 | 188.114.96.10:2506,0.00%,243 ms
88 | 188.114.99.83:2506,0.00%,243 ms
89 | 188.114.96.83:2506,0.00%,243 ms
90 | 188.114.96.76:2506,0.00%,244 ms
91 | 188.114.96.192:2506,0.00%,244 ms
92 | 188.114.99.50:894,0.00%,244 ms
93 | 188.114.98.238:2506,0.00%,244 ms
94 | 188.114.97.188:894,0.00%,244 ms
95 | 188.114.99.50:2506,0.00%,244 ms
96 | 188.114.99.169:894,0.00%,245 ms
97 | 188.114.97.203:2506,0.00%,245 ms
98 | 188.114.99.15:894,0.00%,245 ms
99 | 188.114.96.101:894,0.00%,245 ms
100 | 188.114.99.81:2506,0.00%,245 ms
101 | 188.114.97.69:2506,0.00%,245 ms
102 | 188.114.98.190:894,0.00%,245 ms
103 | 188.114.97.144:894,0.00%,246 ms
104 | 188.114.96.224:2506,0.00%,246 ms
105 | 188.114.97.236:2506,0.00%,246 ms
106 | 188.114.96.144:894,0.00%,246 ms
107 | 188.114.98.3:894,0.00%,246 ms
108 | 188.114.97.29:894,0.00%,247 ms
109 | 188.114.99.174:2506,0.00%,247 ms
110 | 188.114.99.90:2506,0.00%,247 ms
111 | 188.114.97.59:894,0.00%,248 ms
112 | 188.114.99.10:2506,0.00%,248 ms
113 | 188.114.97.244:894,0.00%,248 ms
114 | 188.114.98.6:894,0.00%,248 ms
115 | 188.114.98.235:894,0.00%,248 ms
116 | 188.114.98.204:894,0.00%,248 ms
117 | 188.114.97.203:894,0.00%,249 ms
118 | 188.114.98.185:2506,0.00%,249 ms
119 | 188.114.97.8:2506,0.00%,249 ms
120 | 188.114.98.90:894,0.00%,250 ms
121 | 188.114.98.190:2506,0.00%,250 ms
122 | 188.114.99.16:894,0.00%,250 ms
123 | 188.114.99.134:2506,0.00%,250 ms
124 | 188.114.96.141:894,0.00%,250 ms
125 | 188.114.98.235:2506,0.00%,250 ms
126 | 188.114.96.40:2506,0.00%,251 ms
127 | 188.114.99.134:894,0.00%,251 ms
128 | 188.114.96.172:2506,0.00%,252 ms
129 | 188.114.99.18:894,0.00%,252 ms
130 | 188.114.96.0:2506,0.00%,254 ms
131 | 188.114.96.0:894,0.00%,255 ms
132 | 188.114.97.111:2506,0.00%,255 ms
133 | 188.114.99.174:894,0.00%,256 ms
134 | 188.114.97.236:894,0.00%,259 ms
135 | 188.114.99.149:894,10.00%,288 ms
136 | 188.114.99.139:894,10.00%,288 ms
137 | 188.114.96.210:894,10.00%,289 ms
138 | 188.114.99.46:894,10.00%,291 ms
139 | 188.114.99.216:894,10.00%,291 ms
140 | 188.114.96.66:894,10.00%,295 ms
141 | 188.114.98.38:894,10.00%,295 ms
142 | 188.114.99.62:2506,10.00%,297 ms
143 | 188.114.97.24:2506,10.00%,297 ms
144 | 188.114.97.31:894,10.00%,297 ms
145 | 188.114.96.186:2506,10.00%,299 ms
146 | 188.114.99.139:2506,10.00%,301 ms
147 | 188.114.99.60:894,10.00%,302 ms
148 | 188.114.99.15:2506,10.00%,307 ms
149 | 188.114.97.100:894,10.00%,307 ms
150 | 188.114.98.49:2506,10.00%,307 ms
151 | 188.114.98.234:2506,10.00%,308 ms
152 | 188.114.98.185:894,10.00%,308 ms
153 | 188.114.96.183:2506,10.00%,308 ms
154 | 188.114.98.146:894,10.00%,309 ms
155 | 188.114.96.77:2506,10.00%,310 ms
156 | 188.114.97.235:2506,10.00%,311 ms
157 | 188.114.99.182:894,10.00%,311 ms
158 | 188.114.98.239:2506,10.00%,312 ms
159 | 188.114.98.204:2506,10.00%,312 ms
160 | 188.114.99.58:2506,10.00%,313 ms
161 | 188.114.98.177:894,10.00%,313 ms
162 | 188.114.99.16:2506,10.00%,314 ms
163 | 188.114.99.182:2506,10.00%,315 ms
164 | 188.114.98.234:894,10.00%,316 ms
165 | 188.114.98.175:2506,10.00%,317 ms
166 | 188.114.98.3:2506,10.00%,317 ms
167 | 188.114.97.8:894,10.00%,317 ms
168 | 188.114.98.162:894,10.00%,317 ms
169 | 188.114.99.46:2506,10.00%,318 ms
170 | 188.114.99.169:2506,10.00%,318 ms
171 | 188.114.99.58:894,10.00%,319 ms
172 | 188.114.98.51:2506,10.00%,319 ms
173 | 188.114.98.6:2506,10.00%,319 ms
174 | 188.114.97.10:894,10.00%,320 ms
175 | 188.114.97.244:2506,10.00%,320 ms
176 | 188.114.96.192:894,10.00%,320 ms
177 | 188.114.96.35:894,10.00%,322 ms
178 | 188.114.99.81:894,10.00%,322 ms
179 | 188.114.97.69:894,10.00%,326 ms
180 | 188.114.97.10:2506,10.00%,328 ms
181 | 188.114.97.59:2506,10.00%,329 ms
182 | 188.114.99.18:2506,10.00%,331 ms
183 | 188.114.96.225:2506,20.00%,370 ms
184 | 188.114.96.132:894,20.00%,372 ms
185 | 188.114.96.173:2506,20.00%,375 ms
186 | 188.114.97.72:894,20.00%,382 ms
187 | 188.114.96.76:894,20.00%,383 ms
188 | 188.114.96.40:894,20.00%,383 ms
189 | 188.114.97.141:2506,20.00%,384 ms
190 | 188.114.97.234:2506,20.00%,386 ms
191 | 188.114.97.170:894,20.00%,386 ms
192 | 188.114.96.83:894,20.00%,390 ms
193 | 188.114.98.177:2506,20.00%,391 ms
194 | 188.114.98.175:894,20.00%,393 ms
195 | 188.114.98.254:2506,20.00%,399 ms
196 | 188.114.99.87:2506,20.00%,403 ms
197 | 188.114.99.60:2506,30.00%,456 ms
198 | 188.114.98.144:2506,30.00%,461 ms
199 | 188.114.97.25:2506,30.00%,463 ms
200 | 188.114.96.144:2506,30.00%,467 ms
201 | 188.114.98.144:894,30.00%,473 ms
202 |
--------------------------------------------------------------------------------
/7.转换为clash配置文件(txt文件).py:
--------------------------------------------------------------------------------
1 | from collections import OrderedDict
2 | import base64
3 | import json
4 | import os
5 | import sys
6 | import re
7 |
8 |
9 | # 检查文件是否存在或大小为0,即文件无效
10 | def check_file_exist_or_zero_size(file):
11 | if not os.path.exists(file) or os.stat(file).st_size == 0:
12 | sys.exit()
13 |
14 |
15 | # 读取wg-config.conf配置文件的信息
16 | def read_wireguard_key_parameters(conf_file):
17 | with open(file=conf_file, mode='r', encoding='utf-8') as f:
18 | wireguard_param = dict()
19 | for line in f:
20 | if line:
21 | if line.startswith("PrivateKey"):
22 | wireguard_param["PrivateKey"] = line.strip().replace(' ', '').replace("PrivateKey=", '')
23 | if line.startswith("PublicKey"):
24 | wireguard_param["PublicKey"] = line.strip().replace(' ', '').replace("PublicKey=", '')
25 | if line.startswith("Address"):
26 | wireguard_param["Address"] = line.strip().replace(' ', '').replace("Address=", '').split(',')
27 | if line.startswith("MTU"):
28 | wireguard_param["MTU"] = line.strip().replace(' ', '').replace("MTU=", '')
29 | if line.startswith("Reserved"):
30 | wireguard_param["Reserved"] = line.strip().replace(' ', '').replace("Reserved=", '')
31 | return wireguard_param
32 |
33 |
34 | # 读取优选ip的ip.txt文件
35 | def read_ip_endpoints(txt_file):
36 | endpoints = []
37 | with open(file=txt_file, mode='r', encoding='utf-8') as rf:
38 | for item in rf.readlines():
39 | if item.strip() != "":
40 | endpoints.append(item.strip())
41 | return endpoints
42 |
43 |
44 | # 使用正则表达检查IP的版本(IPv4、IPv6)
45 | def ip_version(ip):
46 | ipv4_pattern = re.compile(r'^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$')
47 | ipv6_pattern = re.compile(r'^(?:(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|(?:[0-9a-fA-F]{1,4}:){1,7}:|(?:[0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|(?:[0-9a-fA-F]{1,4}:){1,5}(?::[0-9a-fA-F]{1,4}){1,2}|(?:[0-9a-fA-F]{1,4}:){1,4}(?::[0-9a-fA-F]{1,4}){1,3}|(?:[0-9a-fA-F]{1,4}:){1,3}(?::[0-9a-fA-F]{1,4}){1,4}|(?:[0-9a-fA-F]{1,4}:){1,2}(?::[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:(?:(?::[0-9a-fA-F]{1,4}){1,6})|:(?:(?::[0-9a-fA-F]{1,4}){1,7}|:))$')
48 | if ipv4_pattern.match(ip):
49 | return "IPv4"
50 | elif ipv6_pattern.match(ip):
51 | return "IPv6"
52 | else:
53 | return "Invalid"
54 |
55 |
56 | if __name__ == '__main__':
57 | """ 读取外部文件的数据 """
58 | files = ["配置文件/wg-config.conf", "ip.txt"]
59 | # 检查文件是否存在
60 | for file in files:
61 | check_file_exist_or_zero_size(file)
62 | param = read_wireguard_key_parameters(files[0])
63 | """ 处理参数,准备给wireguard节点对应的clash配置使用 """
64 | # 获取 private-key 的值
65 | private_key = param.get("PrivateKey")
66 | private_key = private_key if private_key else "+HfkMSyh7obEkX4J8Qa7Xk77CLVn45AW4CdBbnFNaGc=" # 找不到就使用这个私钥
67 | # 获取 public-key 的值
68 | public_key = param.get("PublicKey")
69 | public_key = public_key if public_key else "bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=" # 找不到就使用这个公钥
70 | # 获取 reserved 的值,貌似不支持4个字符的reserved值
71 | """
72 | Reserved = param.get("Reserved")
73 | reserved = ""
74 | if Reserved.startswith('[') and Reserved.endswith(']') and "," in Reserved:
75 | reserved = [int(number) for number in Reserved.strip('[').strip(']').split(',')]
76 | """
77 | # 获取 mtu 的值
78 | mtu = param.get("MTU")
79 | mtu = int(mtu) if mtu else 1280 # 找不到,就使用1280代替
80 | # 获取clash中wireguard配置中,需要的 ipv6、ip -> ipv4
81 | ipv4_str: str = ""
82 | ipv6_str: str = ""
83 | Address = param.get("Address")
84 | if Address is None or Address == "":
85 | ipv4_str = "172.16.0.2"
86 | if isinstance(Address, list):
87 | ipv4_addr = Address[0].split("/")[0]
88 | ipv4_str = ipv4_addr if ip_version(ipv4_addr) == "IPv4" else "172.16.0.2" # 确保数据是ipv4的地址,否则使用172.16.0.2
89 | ipv6_addr = Address[1].split("/")[0]
90 | ipv6_str = ipv6_addr if ip_version(ipv6_addr) == "IPv6" else "" # 确保数据是ipv6的地址,否则为空
91 |
92 | """ 读取ip.txt的数据 """
93 | endpoints: list[str] = read_ip_endpoints(files[1])
94 |
95 | # 待插入clash中的wireguard配置模板
96 | wireguard_str: str = """{"name":"warp-001","type":"wireguard","server":"162.159.192.1","port":2408,"ip":"172.16.0.2","ipv6":"","private-key":"","public-key":"bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=","pre-shared-key":"","reserved":"","udp":true,"mtu":1280}"""
97 | wireguard_dict: dict = json.loads(wireguard_str)
98 | wireguard_nodes: list = []
99 | wireguard_names: list = []
100 | # 使用OrderedDict对endpoints进行去重,并保持顺序,防止生成相同的节点
101 | deduplicated_list = OrderedDict.fromkeys(endpoints)
102 | # 只处理前面300个,防止上千、上万的数据写入一个clash配置文件中,clash能处理?不会导致软件崩溃?
103 | data_list = list(deduplicated_list)[:300]
104 | for i, ip_with_port in enumerate(data_list):
105 | [server, port] = ip_with_port.rsplit(":", 1)
106 | index = str(i + 1).zfill(len(str(len(deduplicated_list))))
107 | proxy_name: str = f"warp{index}-{str(server).strip('[').strip(']')}"
108 | # 将数据写入wireguard_dict中
109 | wireguard_dict["name"] = proxy_name
110 | wireguard_dict["server"] = str(server).strip("[").strip("]") # 去掉ipv6的中括号
111 | wireguard_dict["port"] = int(port)
112 | wireguard_dict["ip"] = ipv4_str
113 | wireguard_dict["ipv6"] = ipv6_str
114 | wireguard_dict["private-key"] = private_key
115 | wireguard_dict["public-key"] = public_key
116 | # 添加reserved值,不管是数组类型的还是字符串类型的reserved值,会出现无法联网/网络慢
117 | # wireguard_dict["reserved"] = reserved
118 | wireguard_dict["mtu"] = int(mtu)
119 | # 将字典转换为 JSON 字符串(把字典中的True -> true)
120 | wireguard_json_str: str = json.dumps(wireguard_dict)
121 |
122 | # node_prefix: str = " - "
123 | node_prefix: str = base64.b64decode("ICAtIA==").decode("utf-8")
124 | wireguard_nodes.append(f"{node_prefix}{wireguard_json_str}")
125 |
126 | # proxy_name_prefix = " - "
127 | proxy_name_prefix: str = base64.b64decode("ICAgICAgLSA=").decode("utf-8")
128 | wireguard_names.append(f"{proxy_name_prefix}{proxy_name}")
129 | output_file = "output-clash.yaml"
130 | # 替换clash配置模板中指定的字符串
131 | with open('配置文件/clash.yaml', mode='r', encoding='utf-8') as rf, open(output_file, 'w', encoding='utf-8') as wf:
132 | clash = rf.read()
133 |
134 | # 普通的写法
135 | # replace_proxy_node = " - {name: 127.0.0.1:1080, server: 127.0.0.1, port: 1080, type: ss, cipher: aes-128-gcm, password: abc123456}"
136 | # replace_proxy_name = " - 127.0.0.1:1080"
137 |
138 | # base64的写法:使用其它工具,将字符串进行base64编码,然后解码使用,防止误删字符,同时进行数据保密,没有base64解码就不知道这个数据代表什么
139 | replace_proxy_node = base64.b64decode("ICAtIHtuYW1lOiAxMjcuMC4wLjE6MTA4MCwgc2VydmVyOiAxMjcuMC4wLjEsIHBvcnQ6IDEwODAsIHR5cGU6IHNzLCBjaXBoZXI6IGFlcy0xMjgtZ2NtLCBwYXNzd29yZDogYWJjMTIzNDU2fQ==").decode("utf-8")
140 | replace_proxy_name = base64.b64decode("ICAgICAgLSAxMjcuMC4wLjE6MTA4MA==").decode("utf-8")
141 |
142 | clash_result = clash.replace(replace_proxy_node, "\n".join(wireguard_nodes)).replace(replace_proxy_name, "\n".join(wireguard_names))
143 | print(clash_result)
144 | wf.write(clash_result)
145 | os.system("pause")
--------------------------------------------------------------------------------
/8.转换为clash配置文件(csv文件).py:
--------------------------------------------------------------------------------
1 | import json
2 | import os
3 | import sys
4 | import re
5 | import base64
6 | from collections import OrderedDict
7 |
8 |
9 | # 检查文件是否存在或大小为0,即文件无效
10 | def check_file_exist_or_zero_size(file):
11 | if not os.path.exists(file) or os.stat(file).st_size == 0:
12 | sys.exit()
13 |
14 |
15 | # 读取wg-config.conf配置文件的信息
16 | def read_wireguard_key_parameters(conf_file):
17 | with open(file=conf_file, mode='r', encoding='utf-8') as f:
18 | wireguard_param = dict()
19 | for line in f:
20 | if line:
21 | if line.startswith("PrivateKey"):
22 | wireguard_param["PrivateKey"] = line.strip().replace(' ', '').replace("PrivateKey=", '')
23 | if line.startswith("PublicKey"):
24 | wireguard_param["PublicKey"] = line.strip().replace(' ', '').replace("PublicKey=", '')
25 | if line.startswith("Address"):
26 | wireguard_param["Address"] = line.strip().replace(' ', '').replace("Address=", '').split(',')
27 | if line.startswith("MTU"):
28 | wireguard_param["MTU"] = line.strip().replace(' ', '').replace("MTU=", '')
29 | if line.startswith("Reserved"):
30 | wireguard_param["Reserved"] = line.strip().replace(' ', '').replace("Reserved=", '')
31 | return wireguard_param
32 |
33 |
34 | # 读取优选ip的result.csv文件
35 | def read_ip_endpoints(csv_file):
36 | endpoints = []
37 | with open(file=csv_file, mode='r', encoding='utf-8') as rf:
38 | next(rf)
39 | for line in rf:
40 | delay = line.strip().split(',')[-1].replace(' ', '').replace('ms', '')
41 | if int(delay) < 500:
42 | endpoint = line.strip().split(',')[0]
43 | endpoints.append(endpoint)
44 | return endpoints
45 |
46 |
47 | # 使用正则表达检查IP的版本(IPv4、IPv6)
48 | def ip_version(ip):
49 | ipv4_pattern = re.compile(r'^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$')
50 | ipv6_pattern = re.compile(r'^(?:(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|(?:[0-9a-fA-F]{1,4}:){1,7}:|(?:[0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|(?:[0-9a-fA-F]{1,4}:){1,5}(?::[0-9a-fA-F]{1,4}){1,2}|(?:[0-9a-fA-F]{1,4}:){1,4}(?::[0-9a-fA-F]{1,4}){1,3}|(?:[0-9a-fA-F]{1,4}:){1,3}(?::[0-9a-fA-F]{1,4}){1,4}|(?:[0-9a-fA-F]{1,4}:){1,2}(?::[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:(?:(?::[0-9a-fA-F]{1,4}){1,6})|:(?:(?::[0-9a-fA-F]{1,4}){1,7}|:))$')
51 | if ipv4_pattern.match(ip):
52 | return "IPv4"
53 | elif ipv6_pattern.match(ip):
54 | return "IPv6"
55 | else:
56 | return "Invalid"
57 |
58 |
59 | if __name__ == '__main__':
60 | """ 读取外部文件的数据 """
61 | files = ["配置文件/wg-config.conf", "result.csv"]
62 | # 检查文件是否存在
63 | for file in files:
64 | check_file_exist_or_zero_size(file)
65 | param = read_wireguard_key_parameters(files[0])
66 | """ 处理参数,准备给wireguard节点对应的clash配置使用 """
67 | # 获取 private-key 的值
68 | private_key = param.get("PrivateKey")
69 | private_key = private_key if private_key else "+HfkMSyh7obEkX4J8Qa7Xk77CLVn45AW4CdBbnFNaGc=" # 找不到就使用这个私钥
70 | # 获取 public-key 的值
71 | public_key = param.get("PublicKey")
72 | public_key = public_key if public_key else "bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=" # 找不到就使用这个公钥
73 | # 获取 reserved 的值,貌似不支持4个字符的reserved值
74 | """
75 | Reserved = param.get("Reserved")
76 | reserved = ""
77 | if Reserved.startswith('[') and Reserved.endswith(']') and "," in Reserved:
78 | reserved = [int(number) for number in Reserved.strip('[').strip(']').split(',')]
79 | """
80 | # 获取 mtu 的值
81 | mtu = param.get("MTU")
82 | mtu = int(mtu) if mtu else 1280 # 找不到,就使用1280代替
83 | # 获取clash中wireguard配置中,需要的 ipv6、ip -> ipv4
84 | ipv4_str: str = ""
85 | ipv6_str: str = ""
86 | Address = param.get("Address")
87 | if Address is None or Address == "":
88 | ipv4_str = "172.16.0.2"
89 | if isinstance(Address, list):
90 | ipv4_addr = Address[0].split("/")[0]
91 | ipv4_str = ipv4_addr if ip_version(ipv4_addr) == "IPv4" else "172.16.0.2" # 确保数据是ipv4的地址,否则使用172.16.0.2
92 | ipv6_addr = Address[1].split("/")[0]
93 | ipv6_str = ipv6_addr if ip_version(ipv6_addr) == "IPv6" else "" # 确保数据是ipv6的地址,否则为空
94 |
95 | """ 读取result.csv的数据 """
96 | endpoints: list[str] = read_ip_endpoints(files[1])
97 |
98 | # 待插入clash中的wireguard配置模板
99 | wireguard_str: str = """{"name":"warp-001","type":"wireguard","server":"162.159.192.1","port":2408,"ip":"172.16.0.2","ipv6":"","private-key":"","public-key":"bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=","pre-shared-key":"","reserved":"","udp":true,"mtu":1280}"""
100 | wireguard_dict: dict = json.loads(wireguard_str)
101 | wireguard_nodes: list = []
102 | wireguard_names: list = []
103 | # 使用OrderedDict对endpoints进行去重,并保持顺序,防止生成相同的节点
104 | deduplicated_list = OrderedDict.fromkeys(endpoints)
105 | # 只处理前面300个,防止上千、上万的数据写入一个clash配置文件中,clash能处理?不会导致软件崩溃?
106 | data_list = list(deduplicated_list)[:300]
107 | for i, ip_with_port in enumerate(data_list):
108 | [server, port] = ip_with_port.rsplit(":", 1)
109 | index = str(i + 1).zfill(len(str(len(deduplicated_list))))
110 | proxy_name: str = f"warp{index}-{str(server).strip('[').strip(']')}"
111 | # 将数据写入wireguard_dict中
112 | wireguard_dict["name"] = proxy_name
113 | wireguard_dict["server"] = str(server).strip("[").strip("]") # 去掉ipv6的中括号
114 | wireguard_dict["port"] = int(port)
115 | wireguard_dict["ip"] = ipv4_str
116 | wireguard_dict["ipv6"] = ipv6_str
117 | wireguard_dict["private-key"] = private_key
118 | wireguard_dict["public-key"] = public_key
119 | # 添加reserved值,不管是数组类型的还是字符串类型的reserved值,会出现无法联网/网络慢
120 | # wireguard_dict["reserved"] = reserved
121 | wireguard_dict["mtu"] = int(mtu)
122 | # 将字典转换为 JSON 字符串(把字典中的True -> true)
123 | wireguard_json_str: str = json.dumps(wireguard_dict)
124 |
125 | # node_prefix: str = " - "
126 | node_prefix: str = base64.b64decode("ICAtIA==").decode("utf-8")
127 | wireguard_nodes.append(f"{node_prefix}{wireguard_json_str}")
128 |
129 | # proxy_name_prefix = " - "
130 | proxy_name_prefix: str = base64.b64decode("ICAgICAgLSA=").decode("utf-8")
131 | wireguard_names.append(f"{proxy_name_prefix}{proxy_name}")
132 | output_file = "output-clash.yaml"
133 | # 替换clash配置模板中指定的字符串
134 | with open('配置文件/clash.yaml', mode='r', encoding='utf-8') as rf, open(output_file, 'w', encoding='utf-8') as wf:
135 | clash = rf.read()
136 |
137 | # 普通的写法
138 | # replace_proxy_node = " - {name: 127.0.0.1:1080, server: 127.0.0.1, port: 1080, type: ss, cipher: aes-128-gcm, password: abc123456}"
139 | # replace_proxy_name = " - 127.0.0.1:1080"
140 |
141 | # base64的写法:使用其它工具,将字符串进行base64编码,然后解码使用,防止误删字符,同时进行数据保密,没有base64解码就不知道这个数据代表什么
142 | replace_proxy_node = base64.b64decode("ICAtIHtuYW1lOiAxMjcuMC4wLjE6MTA4MCwgc2VydmVyOiAxMjcuMC4wLjEsIHBvcnQ6IDEwODAsIHR5cGU6IHNzLCBjaXBoZXI6IGFlcy0xMjgtZ2NtLCBwYXNzd29yZDogYWJjMTIzNDU2fQ==").decode("utf-8")
143 | replace_proxy_name = base64.b64decode("ICAgICAgLSAxMjcuMC4wLjE6MTA4MA==").decode("utf-8")
144 |
145 | clash_result = clash.replace(replace_proxy_node, "\n".join(wireguard_nodes)).replace(replace_proxy_name, "\n".join(wireguard_names))
146 | print(clash_result)
147 | wf.write(clash_result)
148 | os.system("pause")
--------------------------------------------------------------------------------
/4.[Android]生成单个sn的wireguard节点.py:
--------------------------------------------------------------------------------
1 | from dataclasses import field, dataclass
2 | import pyperclip # 将指定的运行结果自动复制到剪切板
3 | import base64
4 | import sys
5 | import zlib
6 | import re
7 |
8 |
9 | # 读取wg-config.conf配置文件的信息
10 | def read_wireguard_key_parameters(conf_file):
11 | with open(file=conf_file, mode='r', encoding='utf-8') as f:
12 | wireguard_param = dict()
13 | for line in f:
14 | if line:
15 | if line.startswith("PrivateKey"):
16 | wireguard_param["PrivateKey"] = line.strip().replace(' ', '').replace("PrivateKey=", '')
17 | if line.startswith("PublicKey"):
18 | wireguard_param["PublicKey"] = line.strip().replace(' ', '').replace("PublicKey=", '')
19 | if line.startswith("Address"):
20 | wireguard_param["Address"] = line.strip().replace(' ', '').replace("Address=", '').split(',')
21 | if line.startswith("MTU"):
22 | wireguard_param["MTU"] = line.strip().replace(' ', '').replace("MTU=", '')
23 | if line.startswith("Reserved"):
24 | wireguard_param["Reserved"] = line.strip().replace(' ', '').replace("Reserved=", '')
25 | return wireguard_param
26 |
27 |
28 | # 判断是否为IP地址(IPv4或IPv6)
29 | def is_ip_address(ip_addr):
30 | """ 匹配 IPv4 和 IPv6 地址 """
31 | ipv4_pattern = r'^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$'
32 | ipv6_pattern = r'^(?:(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|(?:[0-9a-fA-F]{1,4}:){1,7}:|(?:[0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|(?:[0-9a-fA-F]{1,4}:){1,5}(?::[0-9a-fA-F]{1,4}){1,2}|(?:[0-9a-fA-F]{1,4}:){1,4}(?::[0-9a-fA-F]{1,4}){1,3}|(?:[0-9a-fA-F]{1,4}:){1,3}(?::[0-9a-fA-F]{1,4}){1,4}|(?:[0-9a-fA-F]{1,4}:){1,2}(?::[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:(?:(?::[0-9a-fA-F]{1,4}){1,6})|:(?:(?::[0-9a-fA-F]{1,4}){1,7}|:))$'
33 | try:
34 | addr = ip_addr.rsplit(":", 1)[0]
35 | ip = addr[1:-1] if addr.startswith('[') and addr.endswith(']') else addr
36 | port = ip_addr.rsplit(':', 1)[1] if ip_addr.count(":") == 1 or (
37 | ip_addr.count(":") > 3 and "]:" in ip_addr) else None
38 | if re.match(ipv4_pattern, ip) and (port.isdigit() and int(port) >= 80):
39 | ipv4 = re.match(ipv4_pattern, ip).group(0)
40 | return True
41 | elif re.match(ipv6_pattern, ip) and (port.isdigit() and int(port) >= 80):
42 | ipv6 = re.match(ipv6_pattern, ip).group(0)
43 | return True
44 | except Exception as e:
45 | pass
46 |
47 |
48 | def encode_sn_str(s: str) -> bytes:
49 | if not s:
50 | return b'\x81'
51 | if len(s) == 1:
52 | return b'\x82' + s.encode()
53 | ret = s.encode()
54 | ret = ret[:-1] + (ret[-1] | 0x80).to_bytes(1, 'little')
55 | return ret
56 |
57 |
58 | def p32(n: int):
59 | return n.to_bytes(4, 'little')
60 |
61 |
62 | def p8(n: int):
63 | return n.to_bytes(1, 'little')
64 |
65 |
66 | @dataclass(init=True, repr=True)
67 | class SnBase:
68 | def serialize(self) -> bytes:
69 | ret = b''
70 | for _, v in self.__dict__.items():
71 | ret += self.obj_serialize(v)
72 | return ret
73 |
74 | @classmethod
75 | def obj_serialize(cls, obj) -> bytes:
76 | ret = b''
77 | match type(obj):
78 | case __builtins__.str:
79 | ret += encode_sn_str(obj)
80 | case __builtins__.bool:
81 | ret += p8(int(obj))
82 | case __builtins__.int:
83 | ret += p32(obj)
84 | case _:
85 | if isinstance(obj, SnBase):
86 | ret += obj.serialize()
87 | return ret
88 |
89 |
90 | @dataclass(init=True, repr=True)
91 | class SnServer(SnBase):
92 | server_address: str = '162.159.192.10'
93 | server_port: int = 2408
94 |
95 |
96 | @dataclass(init=True, repr=True)
97 | class WireguardSerialize(SnBase):
98 | version: int = 2
99 | server: SnServer = field(default_factory=SnServer)
100 | localAddress: str = "172.16.0.2/32"
101 | privateKey: str = ''
102 | peerPublicKey: str = 'bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo='
103 | peerPreSharedKey: str = ''
104 | mtu: int = 1420
105 | reserved: str = ""
106 |
107 | def serialize(self) -> bytes:
108 | ret = b''
109 | ret += self.obj_serialize(self.version)
110 | ret += self.obj_serialize(self.server)
111 | ret += self.obj_serialize(self.localAddress)
112 | ret += self.obj_serialize(self.privateKey)
113 | ret += self.obj_serialize(self.peerPublicKey)
114 | ret += self.obj_serialize(self.peerPreSharedKey)
115 | ret += self.obj_serialize(self.mtu)
116 | ret += self.obj_serialize(self.reserved)
117 | return ret
118 |
119 |
120 | @dataclass(init=True, repr=True)
121 | class SnMeta(SnBase):
122 | extraVersion: int = 2
123 | name: str = ''
124 | customOutboundJson: str = ''
125 | customConfigJson: str = ''
126 |
127 |
128 | @dataclass(init=True, repr=True)
129 | class Wireguard(SnBase):
130 | WireguardSerialize: WireguardSerialize = field(default_factory=WireguardSerialize)
131 | sn_meta: SnMeta = field(default_factory=SnMeta)
132 |
133 | def __str__(self) -> str:
134 | # print(self.serialize())
135 | return f'sn://wg?{base64.urlsafe_b64encode(zlib.compress(self.serialize())).decode()}'
136 |
137 |
138 | if __name__ == '__main__':
139 | param = read_wireguard_key_parameters("配置文件/wg-config.conf")
140 | private_key = param.get("PrivateKey")
141 | private_key = private_key if private_key else "+HfkMSyh7obEkX4J8Qa7Xk77CLVn45AW4CdBbnFNaGc=" # 找不到就使用这个私钥
142 | public_key = param.get("PublicKey")
143 | public_key = public_key if public_key else "bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=" # 找不到就使用这个公钥
144 | Reserved = param.get("Reserved")
145 | Reserved = Reserved if Reserved else "" # 找不到,就用空字符代替
146 | mtu = param.get("MTU")
147 | mtu = int(mtu) if mtu else 1280 # 找不到,就使用1280代替
148 | Address = param.get("Address")
149 | if Address is None or Address == "":
150 | local_address = "172.16.0.2/32"
151 | else:
152 | local_address = ",".join(Address) if isinstance(Address, list) else "172.16.0.2/32"
153 | while True:
154 | while True:
155 | input_endpoint = input("输入优选IP(格式:162.159.192.10:891),输入q、quit、exit退出程序:").strip()
156 | state = is_ip_address(input_endpoint)
157 | if state:
158 | break
159 | if input_endpoint.lower() in ["q", "quit", "exit"]:
160 | sys.exit()
161 | addr = input_endpoint.rsplit(":", 1)[0]
162 | ip = addr[1:-1] if addr.startswith('[') and addr.endswith(']') else addr # 去掉IPv6的中括号
163 | port = input_endpoint.rsplit(':', 1)[1]
164 | serialize_obj = WireguardSerialize(server=SnServer(ip, int(port)),
165 | localAddress=local_address,
166 | privateKey=private_key,
167 | peerPublicKey=public_key,
168 | mtu=int(mtu), reserved=Reserved)
169 | config_name = f"warp-{input_endpoint}"
170 | sn_link = Wireguard(WireguardSerialize=serialize_obj, sn_meta=SnMeta(name=config_name))
171 | pyperclip.copy(str(sn_link))
172 | print(f"{'-' * 35} Android 版 NekoBox,WireGuard 的分享SN Link如下: {'-' * 35}\n{sn_link}\n{'-' * 120}")
173 | print("节点已经复制到剪切板,可以黏贴到其它地方!")
174 | print(f"{'-' * 120}")
175 |
--------------------------------------------------------------------------------
/result_IPv6.csv:
--------------------------------------------------------------------------------
1 | IP:PORT, LOSS, DELAY
2 | [2606:4700:d0::0d83:30d3:dc8c:4573]:2371,0.00%,268 ms
3 | [2606:4700:d0::04f9:a0e1:421e:0a70]:2371,0.00%,271 ms
4 | [2606:4700:d0::0d83:30d3:dc8c:4573]:955,0.00%,272 ms
5 | [2606:4700:d0::4a8a:24d8:5153:73a2]:955,0.00%,272 ms
6 | [2606:4700:d1::32a3:9849:119c:e290]:955,0.00%,272 ms
7 | [2606:4700:d0::4fa3:ba5d:b717:4fef]:2371,0.00%,272 ms
8 | [2606:4700:d1::39ae:dcc7:1205:ac8e]:2371,0.00%,273 ms
9 | [2606:4700:d1::46c8:95a1:5f27:0e95]:955,0.00%,275 ms
10 | [2606:4700:d1::ac65:4f6a:7397:d3c3]:2371,0.00%,275 ms
11 | [2606:4700:d0::605b:4d9d:6d37:4caf]:955,0.00%,275 ms
12 | [2606:4700:d1::541b:b532:a425:5931]:2371,0.00%,275 ms
13 | [2606:4700:d1::930d:c8a6:a6c8:a370]:2371,0.00%,276 ms
14 | [2606:4700:d1::c0ce:7cc3:a504:b341]:955,0.00%,276 ms
15 | [2606:4700:d1::930d:c8a6:a6c8:a370]:955,0.00%,276 ms
16 | [2606:4700:d0::b623:7585:a94c:0d6e]:2371,0.00%,276 ms
17 | [2606:4700:d0::ded5:1458:ba59:363a]:955,0.00%,277 ms
18 | [2606:4700:d1::ec15:16fb:c57c:0e2e]:955,0.00%,278 ms
19 | [2606:4700:d0::e966:27aa:241f:58de]:955,0.00%,278 ms
20 | [2606:4700:d1::edfb:c89c:3c5d:ca18]:955,0.00%,279 ms
21 | [2606:4700:d1::0f1c:8d05:a27f:c434]:955,0.00%,279 ms
22 | [2606:4700:d1::7c20:707c:19b5:a52c]:2371,0.00%,280 ms
23 | [2606:4700:d0::41dd:30fe:0ce8:c4e0]:2371,10.00%,343 ms
24 | [2606:4700:d0::3437:4ec0:1795:d2cf]:2371,10.00%,344 ms
25 | [2606:4700:d1::c462:61de:e343:171f]:955,10.00%,344 ms
26 | [2606:4700:d0::53f4:623f:1029:9d75]:2371,10.00%,344 ms
27 | [2606:4700:d0::04f9:a0e1:421e:0a70]:955,10.00%,344 ms
28 | [2606:4700:d0::4a8a:24d8:5153:73a2]:2371,10.00%,344 ms
29 | [2606:4700:d1::6914:6f75:da76:316c]:955,10.00%,344 ms
30 | [2606:4700:d0::4d7b:a970:a98a:07ad]:955,10.00%,344 ms
31 | [2606:4700:d0::3bef:a208:bd27:caba]:955,10.00%,344 ms
32 | [2606:4700:d1::fb14:b403:083b:b899]:955,10.00%,344 ms
33 | [2606:4700:d0::3437:4ec0:1795:d2cf]:955,10.00%,344 ms
34 | [2606:4700:d1::0294:57c0:a677:fd04]:2371,10.00%,345 ms
35 | [2606:4700:d0::8ec2:f99c:8725:3a44]:2371,10.00%,345 ms
36 | [2606:4700:d0::605b:4d9d:6d37:4caf]:2371,10.00%,345 ms
37 | [2606:4700:d0::770b:b596:0f99:4042]:2371,10.00%,345 ms
38 | [2606:4700:d1::a359:05b3:e338:97f4]:955,10.00%,345 ms
39 | [2606:4700:d0::86c9:4f75:ba94:e15e]:2371,10.00%,345 ms
40 | [2606:4700:d0::3176:77b3:4555:63f5]:955,10.00%,345 ms
41 | [2606:4700:d1::5a1e:e5c4:2a04:5991]:955,10.00%,346 ms
42 | [2606:4700:d0::a681:8997:07b9:fa3b]:2371,10.00%,346 ms
43 | [2606:4700:d1::942d:984a:6a8c:97ab]:955,10.00%,346 ms
44 | [2606:4700:d1::97a8:a151:9c08:9a97]:2371,10.00%,346 ms
45 | [2606:4700:d0::4fa3:ba5d:b717:4fef]:955,10.00%,346 ms
46 | [2606:4700:d1::433b:9282:193f:1bcb]:2371,10.00%,347 ms
47 | [2606:4700:d1::433b:9282:193f:1bcb]:955,10.00%,347 ms
48 | [2606:4700:d0::ae88:ef6f:3a18:a144]:2371,10.00%,347 ms
49 | [2606:4700:d0::53f4:623f:1029:9d75]:955,10.00%,347 ms
50 | [2606:4700:d1::46c8:95a1:5f27:0e95]:2371,10.00%,348 ms
51 | [2606:4700:d0::9fd3:3c43:177f:71f0]:955,10.00%,348 ms
52 | [2606:4700:d1::c6a6:cf22:c176:1ee8]:2371,10.00%,348 ms
53 | [2606:4700:d0::bbdf:4763:18ba:8c5a]:955,10.00%,348 ms
54 | [2606:4700:d0::69b5:96e8:8324:0367]:955,10.00%,348 ms
55 | [2606:4700:d0::64b4:3732:fc40:13b5]:955,10.00%,348 ms
56 | [2606:4700:d0::ac5a:0359:41f3:d01f]:955,10.00%,348 ms
57 | [2606:4700:d1::f1b7:62f6:9cf4:cdd6]:955,10.00%,348 ms
58 | [2606:4700:d0::d2b8:47b3:b3ce:2ce9]:2371,10.00%,349 ms
59 | [2606:4700:d1::7f29:375b:ff6a:5ab6]:2371,10.00%,349 ms
60 | [2606:4700:d1::7f29:375b:ff6a:5ab6]:955,10.00%,349 ms
61 | [2606:4700:d0::6d55:9f99:2a97:783c]:955,10.00%,349 ms
62 | [2606:4700:d1::b77d:fd56:b2b7:c235]:2371,10.00%,349 ms
63 | [2606:4700:d0::ac88:ec0b:eb7e:7fa3]:2371,10.00%,349 ms
64 | [2606:4700:d1::201e:7b58:035b:85e5]:955,10.00%,349 ms
65 | [2606:4700:d1::d7af:6e07:9ff7:5f54]:2371,10.00%,350 ms
66 | [2606:4700:d0::652d:a702:91cf:ae74]:2371,10.00%,350 ms
67 | [2606:4700:d0::e2e4:f50b:24a3:992c]:955,10.00%,350 ms
68 | [2606:4700:d1::fba6:7896:d27d:c900]:955,10.00%,350 ms
69 | [2606:4700:d0::e086:b1e0:de2f:cbcd]:2371,10.00%,350 ms
70 | [2606:4700:d0::e086:b1e0:de2f:cbcd]:955,10.00%,350 ms
71 | [2606:4700:d1::7b6d:035b:b70d:d564]:955,10.00%,350 ms
72 | [2606:4700:d1::942d:984a:6a8c:97ab]:2371,10.00%,350 ms
73 | [2606:4700:d1::10e4:fc97:88f3:b506]:955,10.00%,352 ms
74 | [2606:4700:d0::df83:24ed:a620:6b65]:2371,10.00%,352 ms
75 | [2606:4700:d0::ded5:1458:ba59:363a]:2371,10.00%,352 ms
76 | [2606:4700:d1::2567:8805:c13f:1b04]:2371,10.00%,352 ms
77 | [2606:4700:d0::d626:1a42:49b0:fcd0]:2371,10.00%,352 ms
78 | [2606:4700:d1::fba6:7896:d27d:c900]:2371,10.00%,353 ms
79 | [2606:4700:d1::0126:33f2:338c:650a]:955,10.00%,353 ms
80 | [2606:4700:d1::7b6d:035b:b70d:d564]:2371,10.00%,353 ms
81 | [2606:4700:d0::e2a9:76f2:0676:49a9]:955,10.00%,354 ms
82 | [2606:4700:d0::3176:77b3:4555:63f5]:2371,20.00%,414 ms
83 | [2606:4700:d1::6b27:e69b:7f3e:6611]:2371,20.00%,414 ms
84 | [2606:4700:d0::c454:380d:7de1:6a8f]:955,20.00%,414 ms
85 | [2606:4700:d0::368e:c448:e60e:5dca]:955,20.00%,414 ms
86 | [2606:4700:d0::0065:765f:ec36:6eab]:2371,20.00%,415 ms
87 | [2606:4700:d1::7e3c:97cb:6eb5:9599]:2371,20.00%,415 ms
88 | [2606:4700:d1::9593:19a8:1b84:8448]:2371,20.00%,415 ms
89 | [2606:4700:d0::a681:8997:07b9:fa3b]:955,20.00%,415 ms
90 | [2606:4700:d1::172e:26bb:2a43:2f74]:2371,20.00%,415 ms
91 | [2606:4700:d1::49c3:c8ed:c5b6:1f74]:2371,20.00%,416 ms
92 | [2606:4700:d1::201e:7b58:035b:85e5]:2371,20.00%,416 ms
93 | [2606:4700:d1::c4d0:fca0:150b:4e3a]:2371,20.00%,417 ms
94 | [2606:4700:d0::b851:6cf4:51f0:1396]:2371,20.00%,417 ms
95 | [2606:4700:d1::9ad6:0e4f:ab11:97c2]:955,20.00%,417 ms
96 | [2606:4700:d1::32be:0cb6:1c71:f601]:2371,20.00%,417 ms
97 | [2606:4700:d0::bbdf:4763:18ba:8c5a]:2371,20.00%,418 ms
98 | [2606:4700:d1::4119:7b33:a226:ee93]:2371,20.00%,418 ms
99 | [2606:4700:d1::9593:19a8:1b84:8448]:955,20.00%,419 ms
100 | [2606:4700:d0::30cc:e345:6b10:0404]:2371,20.00%,419 ms
101 | [2606:4700:d1::b77d:fd56:b2b7:c235]:955,20.00%,419 ms
102 | [2606:4700:d0::368e:c448:e60e:5dca]:2371,20.00%,419 ms
103 | [2606:4700:d0::8ec2:f99c:8725:3a44]:955,20.00%,419 ms
104 | [2606:4700:d1::97a8:a151:9c08:9a97]:955,20.00%,420 ms
105 | [2606:4700:d0::4fb4:f8f4:9c95:dc33]:955,20.00%,420 ms
106 | [2606:4700:d0::5340:2d9b:322d:e2f1]:955,20.00%,420 ms
107 | [2606:4700:d1::4251:324e:b60e:2fb9]:2371,20.00%,420 ms
108 | [2606:4700:d1::32a3:9849:119c:e290]:2371,20.00%,420 ms
109 | [2606:4700:d1::5a1e:e5c4:2a04:5991]:2371,20.00%,420 ms
110 | [2606:4700:d0::b288:dbd8:569a:8f8e]:955,20.00%,420 ms
111 | [2606:4700:d1::32be:0cb6:1c71:f601]:955,20.00%,420 ms
112 | [2606:4700:d0::9fd3:3c43:177f:71f0]:2371,20.00%,421 ms
113 | [2606:4700:d1::49c3:c8ed:c5b6:1f74]:955,20.00%,421 ms
114 | [2606:4700:d1::b2e6:7879:11a1:97e5]:955,20.00%,421 ms
115 | [2606:4700:d1::541b:b532:a425:5931]:955,20.00%,421 ms
116 | [2606:4700:d1::10e4:fc97:88f3:b506]:2371,20.00%,421 ms
117 | [2606:4700:d0::e5e6:a429:2a43:076e]:2371,20.00%,422 ms
118 | [2606:4700:d1::5b61:5f49:cc5f:f860]:955,20.00%,422 ms
119 | [2606:4700:d1::c4d0:fca0:150b:4e3a]:955,20.00%,422 ms
120 | [2606:4700:d1::e8f7:4d5f:c740:70ab]:955,20.00%,422 ms
121 | [2606:4700:d1::6914:6f75:da76:316c]:2371,20.00%,423 ms
122 | [2606:4700:d0::c454:380d:7de1:6a8f]:2371,20.00%,423 ms
123 | [2606:4700:d0::69d5:16bd:6fb0:7a97]:955,20.00%,423 ms
124 | [2606:4700:d1::c462:61de:e343:171f]:2371,20.00%,423 ms
125 | [2606:4700:d1::7397:f0d7:63d0:a18d]:955,20.00%,423 ms
126 | [2606:4700:d1::eb75:89ad:5622:576a]:2371,20.00%,423 ms
127 | [2606:4700:d1::0c0a:a455:da6c:b9ee]:955,20.00%,423 ms
128 | [2606:4700:d0::e5e6:a429:2a43:076e]:955,20.00%,423 ms
129 | [2606:4700:d0::69b5:96e8:8324:0367]:2371,20.00%,423 ms
130 | [2606:4700:d1::edfb:c89c:3c5d:ca18]:2371,20.00%,423 ms
131 | [2606:4700:d1::30b1:bd9e:0a98:bf83]:955,20.00%,424 ms
132 | [2606:4700:d0::d2b8:47b3:b3ce:2ce9]:955,20.00%,424 ms
133 | [2606:4700:d0::df83:24ed:a620:6b65]:955,20.00%,424 ms
134 | [2606:4700:d0::ecea:21b9:fe0b:838d]:955,20.00%,424 ms
135 | [2606:4700:d1::7397:f0d7:63d0:a18d]:2371,20.00%,424 ms
136 | [2606:4700:d0::d626:1a42:49b0:fcd0]:955,20.00%,424 ms
137 | [2606:4700:d0::cadf:5182:4e41:c647]:955,20.00%,425 ms
138 | [2606:4700:d1::eb75:89ad:5622:576a]:955,20.00%,427 ms
139 | [2606:4700:d1::67af:5f1d:f9d8:6b12]:2371,30.00%,487 ms
140 | [2606:4700:d1::c6a6:cf22:c176:1ee8]:955,30.00%,488 ms
141 | [2606:4700:d0::b288:dbd8:569a:8f8e]:2371,30.00%,488 ms
142 | [2606:4700:d1::30b1:bd9e:0a98:bf83]:2371,30.00%,488 ms
143 | [2606:4700:d0::3bef:a208:bd27:caba]:2371,30.00%,488 ms
144 | [2606:4700:d0::30cc:e345:6b10:0404]:955,30.00%,488 ms
145 | [2606:4700:d0::6d55:9f99:2a97:783c]:2371,30.00%,489 ms
146 | [2606:4700:d1::0126:33f2:338c:650a]:2371,30.00%,489 ms
147 | [2606:4700:d0::ecea:21b9:fe0b:838d]:2371,30.00%,489 ms
148 | [2606:4700:d1::0294:57c0:a677:fd04]:955,30.00%,489 ms
149 | [2606:4700:d1::402d:d9f8:c75e:a0c0]:2371,30.00%,489 ms
150 | [2606:4700:d1::7e3c:97cb:6eb5:9599]:955,30.00%,489 ms
151 | [2606:4700:d1::402d:d9f8:c75e:a0c0]:955,30.00%,489 ms
152 | [2606:4700:d1::67af:5f1d:f9d8:6b12]:955,30.00%,490 ms
153 | [2606:4700:d1::39ae:dcc7:1205:ac8e]:955,30.00%,490 ms
154 | [2606:4700:d0::b623:7585:a94c:0d6e]:955,30.00%,491 ms
155 | [2606:4700:d0::ac5a:0359:41f3:d01f]:2371,30.00%,491 ms
156 | [2606:4700:d0::41dd:30fe:0ce8:c4e0]:955,30.00%,491 ms
157 | [2606:4700:d1::c0ce:7cc3:a504:b341]:2371,30.00%,491 ms
158 | [2606:4700:d0::86c9:4f75:ba94:e15e]:955,30.00%,492 ms
159 | [2606:4700:d0::94a3:97b0:0590:5942]:955,30.00%,492 ms
160 | [2606:4700:d1::4251:324e:b60e:2fb9]:955,30.00%,492 ms
161 | [2606:4700:d0::b851:6cf4:51f0:1396]:955,30.00%,492 ms
162 | [2606:4700:d0::e966:27aa:241f:58de]:2371,30.00%,492 ms
163 | [2606:4700:d0::64b4:3732:fc40:13b5]:2371,30.00%,492 ms
164 | [2606:4700:d1::7c20:707c:19b5:a52c]:955,30.00%,492 ms
165 | [2606:4700:d0::5340:2d9b:322d:e2f1]:2371,30.00%,492 ms
166 | [2606:4700:d1::a359:05b3:e338:97f4]:2371,30.00%,493 ms
167 | [2606:4700:d1::ac65:4f6a:7397:d3c3]:955,30.00%,493 ms
168 | [2606:4700:d0::ae88:ef6f:3a18:a144]:955,30.00%,494 ms
169 | [2606:4700:d0::da97:d74f:8f20:6789]:955,30.00%,495 ms
170 | [2606:4700:d1::e8f7:4d5f:c740:70ab]:2371,30.00%,495 ms
171 | [2606:4700:d1::2041:1ca1:cca2:ecc0]:955,30.00%,495 ms
172 | [2606:4700:d0::d1ca:1426:2402:907f]:955,30.00%,495 ms
173 | [2606:4700:d0::e2a9:76f2:0676:49a9]:2371,30.00%,495 ms
174 | [2606:4700:d1::31c9:7d79:1baa:0cfd]:2371,30.00%,496 ms
175 | [2606:4700:d1::0f1c:8d05:a27f:c434]:2371,30.00%,496 ms
176 | [2606:4700:d1::31c9:7d79:1baa:0cfd]:955,30.00%,497 ms
177 | [2606:4700:d0::e2e4:f50b:24a3:992c]:2371,30.00%,497 ms
178 | [2606:4700:d0::da97:d74f:8f20:6789]:2371,30.00%,497 ms
179 | [2606:4700:d0::69d5:16bd:6fb0:7a97]:2371,30.00%,497 ms
180 | [2606:4700:d0::94a3:97b0:0590:5942]:2371,40.00%,559 ms
181 | [2606:4700:d0::0065:765f:ec36:6eab]:955,40.00%,560 ms
182 | [2606:4700:d1::fb14:b403:083b:b899]:2371,40.00%,561 ms
183 | [2606:4700:d1::2567:8805:c13f:1b04]:955,40.00%,562 ms
184 | [2606:4700:d1::2041:1ca1:cca2:ecc0]:2371,40.00%,563 ms
185 | [2606:4700:d0::652d:a702:91cf:ae74]:955,40.00%,564 ms
186 | [2606:4700:d1::9ad6:0e4f:ab11:97c2]:2371,40.00%,565 ms
187 | [2606:4700:d0::770b:b596:0f99:4042]:955,40.00%,566 ms
188 | [2606:4700:d1::5b61:5f49:cc5f:f860]:2371,40.00%,566 ms
189 | [2606:4700:d1::f1b7:62f6:9cf4:cdd6]:2371,40.00%,566 ms
190 | [2606:4700:d0::ac88:ec0b:eb7e:7fa3]:955,40.00%,567 ms
191 | [2606:4700:d0::d1ca:1426:2402:907f]:2371,40.00%,567 ms
192 | [2606:4700:d1::172e:26bb:2a43:2f74]:955,40.00%,568 ms
193 | [2606:4700:d1::4119:7b33:a226:ee93]:955,40.00%,568 ms
194 | [2606:4700:d0::cadf:5182:4e41:c647]:2371,50.00%,633 ms
195 | [2606:4700:d0::4fb4:f8f4:9c95:dc33]:2371,50.00%,637 ms
196 | [2606:4700:d1::d7af:6e07:9ff7:5f54]:955,50.00%,639 ms
197 | [2606:4700:d1::0c0a:a455:da6c:b9ee]:2371,50.00%,641 ms
198 | [2606:4700:d1::b2e6:7879:11a1:97e5]:2371,50.00%,642 ms
199 | [2606:4700:d1::6b27:e69b:7f3e:6611]:955,50.00%,642 ms
200 | [2606:4700:d1::ec15:16fb:c57c:0e2e]:2371,50.00%,643 ms
201 | [2606:4700:d0::4d7b:a970:a98a:07ad]:2371,60.00%,707 ms
202 |
--------------------------------------------------------------------------------
/output-node.txt:
--------------------------------------------------------------------------------
1 | sn://wg?eJxNzjkOgkAUANCJiYVnUYf_P8PMMJ2gBCVuMaKWAnGLRuMSl45LGRsv4I3spLR91SsxxlBrjii4q7n9-lQKUMRRcuBk2VQjCdIIBWAQwWglMyMyOzWCCk9dSI1MMrCQXo3opPzokTTj3WIzWvqeaGCn13ZmXjfdhrOY-kN1OrbXm4l4J7tp368GGNxa3cDN7uuIQsfC0fj8CKFzifcOrug6WCzv-3fOyoydvea3VGyv8-Oh_l_Whhx45vkPmPc3mA==
2 | sn://wg?eJxNzrsOgjAUANAG49eopfdaWtpNUIISXzGijFLiKxqNj_gYTPgl4-Dih7nJ6HqmYxFCwHUpAKdKUfF8lAqQSEFQRtGuYxUFE5pLxjQA064UmeZZ3WiOhRvFjBZpxmzAdyM6Sj-6p814O1-PFr7HG9DptZ3E65pNmMTYH8rjob1aT_gn3U77fiWA4NrqBiq7rSIMHRtG49M9ZJ1zvHNgiZfBfHHbfXJSJuTkNb9Wsb3MDvvafxm1q155_gMl_Tca
3 | sn://wg?eJxNzrsOgjAUANBG49eopfdSWugmIEGJojGijAIBNRqNj_gYTPgl4-Dih7nJ6HqmUyOEgGlSAE4tQfXno16BRAqCMoqaji0UTCguGVMATJlSZIpneqo4Vp5aLFUiyZgG-O4ER-kE98SNtvl6Ujg270B_2DNie5Bu_DjCcCyPh95qPeOfZDsPnaYH3rU78KzstgrQNzSYTE93n_XP0c6AJV5GeXHbfUrSIORku99atb0sDvv2fxmVab3K8gchXzcO
4 | sn://wg?eJxVzrsOgjAUANBG49eopfdS2tJNQIISXzGijAIRNRqNj_gYTPgmHVz8MDdZXc90KoQQUIoCcGorivz5qJYikYKgjKJhYgMFE5pLxjQA00qKTPPMTDXH0lObpVokGTMA363wKN3wnnjRdrEe567DW9Dtd6zY6aWbII5wMJLHQ2e1nvJPsp0N3LoP_rXd8-3stgoxsAwYT073gHXP0c6CJV6Gi_y2-xSkRsjJ8b6VsnuZH_bNv7Oplf0qih-BoDd6
5 | sn://wg?eJxVzjkOgkAUANAJxtOow_zvMAPTCUpY4hYjSikQUKPRuMSlMOFOmth4MDtpbV_1NEIImCYF4NQSFPH1qFUikYKgjKLexiYKJhSXjCkApkwpMsWzdqo4Vp5aLFUiyZgO-O6ER-mE96QbbfP1pHBs3oFg4Bux3U83XhzhcCyPB3-1nvFPsp0PnYYL7rXXd63stgrRM3SYTE93jwXnaGfAEi-jvLjtPiWpE3Kyu1-t6l4Wh33r72wo03qW5Q-ACDd2
6 | sn://wg?eJxVzrsOgjAUANBG49eopfdSWugmIEGJojGijAIBNRqNj_gYTPgkEwcXP8xNVtcznRohBEyTAnBqCQr681GvRCIFQRlFTccWCiYUl4wpAKZMKTLFMz1VHCtPLZYqkWRMA3x3gqN0gnviRtt8PSkcm3egP-wZsT1IN34cYTiWx0NvtZ7xT7Kdh07TA-_aHXhWdlsF6BsaTKanu8_652hnwBIvo7y47T4laRByst1vrepeFod9--8MyrReZfkDfP43bg==
7 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNGVsbGC3gjO2ltX_VKjDG0LI4ouK04qsenUogijpIDJ6NBNZIgtVAAGhG0pWSiRdKItaDCYxtiLaMEDKRXMzgqN7hHrTBdbscr1xFN7PY75tzpxTt_HtJgpI6HzmY7Fe8onQ3cqofetd3z7OS2Ccg3DRxPTncfuucwM3FNl-FydcveOSszdnJa31LRvSwO-_rfGTSZ8MzzH_JEN_A=
8 | sn://wg?eJxNzrkOgkAUQNEJxq9Rh3nPYQamY5GgxC1ElFIgbtFoXOJSmPBPFDZ8mJ2UVjc51dUIIWCaFIBTq075btQgkYKgjKLexTYKJhSXjCkApkwpcsXzbqY41p5ZLFMizZkO-LHDi3TDV-rFh9UuWrsOt2Ew6huJM8z2QRLjeCov5_52N-dVeliM3ZYP_qM39K38uQ0xMHSIZtdXwAa3-GjABu-T1fp5rArSJOTqeF-tvr0vz6fO_zJXplUWxQ8i6TcS
9 | sn://wg?eJxVzrsOgjAUANBG49eopfdSWugmIEGJojGijAIBNRqNj_gYTPgnTVz8MDdZXc90aoQQME0KwKklKeqvR70SiRQEZRQ1HVsomFBcMqYAmDKlyBTP9FRxrDy1WKpEkjEN8N0JjtIJ7okbbfP1pHBs3oH-sGfE9iDd-HGE4VgeD73VesY_yXYeOk0PvGt34FnZbRWgb2gwmZ7uPuufo50BS7yM8uK2-5SkQcjJdr-1qntZHPbtv7OhTOtZlj-Bljd6
10 | sn://wg?eJxNzjkOgkAUANAJxtOow_zvMAPTCUpY4hYjSikQUKPRuMSlMOFOJtp4MDspbV_1NEIImCYF4NQS1Hg9ahVIpCAoo6i3sYmCCcUlYwqAKVOKTPGsnSqOlacWS5VIMqYDvjvhUTrhPelG23w9KRybdyAY-EZs99ONF0c4HMvjwV-tZ_yTbOdDp-GCe-31XSu7rUL0DB0m09PdY8E52hmwxMsoL267T0nqhJzs7lertpfFYd_6L0tlWs-y_AEmqjcc
11 | sn://wg?eJxNzjkOgkAUANAJiYVnUYf_v8MMTCcoQYmiMaKUAnGLRuMSl45LGRsv4I3spLR91TMYY2jbHFFwR3L5_FRLUMRRcuBkNqlOEqQWCkAjgraVzLXIm5kWVHrmQKZlmoOJ9GqFJ-WFj7Qd7xab8dJzRQt7g66VuP1sGyQxRSN1OnbXm6l4p7tZ5NV89G-dvu_k93VIgWXieHJ-BNC7xHsLV3QdLpb3_btgFcbObvtrlNvr_Hho_JelJgueRfEDmC43lg==
12 | sn://wg?eJxVzjkOgkAUgOGJiYVnUYf3HsMMTCcoQYlbjKilQNyi0bjEpeNINsaGC3gjO2mt_uSr_hJjDG2bIwruFDGfn0ohijhKDpwMk2okQWqhADQiaFvJVIvUTLSgwhMHEi3jFAykdyM8KS98xM1ot9iMlp4rGtjpta2Z2022wSyi_lCdju31ZiLyeDfte1Uf_Vur6zvpfR1SYBk4Gp8fAXQu0d7CFV0Hi-V9n2eszNjZbX5Lxe51fjzU_55RkwWvLPsB8Lw37A==
13 | sn://wg?eJxNzssOwUAUANAJ8TWYzr2m89ppaUrjFVEstU2LEOIRj4Wk_yRi48PsdGl7VqdECAGlKACnWlP1epQLkEhBUEbRamANBROGS8YMADNKisTwpBEbjoXHmsVGRAmzAN_N4Cjd4B61wm26Hmeuw5vQ7XfsudOLN_48xMFIHg-d1XrKP9F2NnCrHnjXds_TyW0VoG9bMJ6c7j7rnsOdDUu8DNPstvvkpELIyWl9S8X2sjjs6_9lYZR-5vkPKoc3Jg==
14 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_P8MMTCcoQYlbjKilQNyi0bjEpeNMJsaGC3gjO2ltX_VKjDG0bY4ouGNzEs9PpRBFHCUHToZJNZIgtVAAGhG0rWSqRWomWlDhiQOJlnEKBtK7EZ6UFz7iZrRbbEZLzxUN7PTa1sztJttgFlF_qE7H9nozEXm8m_a9qo_-rdX1nfS-DimwDByNz48AOpdob-GKroPF8r7PM1Zm7Ow2v6Wie50fD_W_s6nJgleW_QDz0jf0
15 | sn://wg?eJxVzrsOgjAUANBG49eopfdS2tKNhwQlvmJEHQUCajQaH_ExmPBPDi5-mJusrmc6NUIIKEUBOLUVRfP9rFcikYKgjKJhYgsFE5pLxjQA00qKTPPMTDXHylObpVokGTMA3050kl70SPx4l28mhedyB3qDrrVw--k2XMQ4HMvTsbvezPgn2c2HXjOA4NbpB3Z2X0cYWgZMpudHyHqXeG_BCq-jvLjvPyVpEHJ2_W-t6l6Xx0P776y0sl9l-QOEpjeC
16 | sn://wg?eJxVzrsOgjAUANBG49eopfdSWugmIEGJojGijAIBNRqNj_gYTPgmHVz8MDdZXc90aoQQME0KwKklKMjno16JRAqCMoqaji0UTCguGVMATJlSZIpneqo4Vp5aLFUiyZgG-O4ER-kE98SNtvl6Ujg270B_2DNie5Bu_DjCcCyPh95qPeOfZDsPnaYH3rU78KzstgrQNzSYTE93n_XP0c6AJV5GeXHbfUrSIORku99a1b0sDvv231lXpvUqyx-Bkjd6
17 | sn://wg?eJxVzjkOgkAUANAJiYVnUYf_v8MMTCcoQYmiMaKUAnGLRuMSl45LGRsv4I3spLV91TMYY2jbHFFwR3KC56daiiKOkgMns0l1kiC1UAAaEbStZK5F3sy0oNIzBzIt0xxMpFcrPCkvfKTteLfYjJeeK1rYG3StxO1n2yCJKRqp07G73kzFO93NIq_mo3_r9H0nv69DCiwTx5PzI4DeJd5buKLrcLG8798FqzB2dttfo-xe58dD4-8sNVnwLIof8W437g==
18 | sn://wg?eJxVzskOwVAUgOEbiYVnwe05xx3au9PSlMYUUSy1jSmEGGLY9ZUsxMYLeCM73Vr9ybf6C4wxtG2OKLiTRz4-pVw0cVQcOFk1qpACZYQGMIhgbK1SI9JaYgTlnjiQGBWnYCG96uFRe-E9bkTb-Xq48FxRx3a3JaduJ9kE04h6A308tFbrsXjH20nPK_voX5sd30lvq5ACaeFwdLoH0D5HO4lLuvTni9vunbEiYye38S3ku5fZYV_9eyZDEp5Z9gPzDDfy
19 | sn://wg?eJxVzrsOgjAUANAG49eopfdSWugmIEGJrxBRRoGoGI3GR3wMJvyTgwsf5iar65mORggBy6IAnNqSovF-NWqRSEFQRlE3sI2CCcUlYwqAKUuKXPHcyBTH2jObZUqkOdMBP93wLN3wmXrxfrWN1q7DuzAY9c3EGWa7IIlxPJXnU7_YznmV7hdjt-WDf-8NfTt_FCEGpg7R7PIM2OAaH0zY4G2yWj8OVUmahFwc76vV3dvydOz8nbmy7HdZ_gCA1Dd4
20 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNINsbGC3gjO2ltX_VKjDG0LI4ouC05wuNTKUQRR8mBk9GgGkmQWigAjQjaUjLRImnEWlDhsQ2xllECBtKrGRyVG9yjVpgut-OV64gmdvsdc-704p0_D2kwUsdDZ7OdineUzgZu1UPv2u55dnLbBOSbBo4np7sP3XOYmbimy3C5umXvnJUZOzmtb6noXhaHff3vjJpMeOb5D-zSN-I=
21 | sn://wg?eJxVzskOwVAUANAXiYVvweu91xvat9PSlMYUUSy1jSmEGGLY9aOIjR_wR3a6tT2rU2CMoW1zRMEdzVE8PqVcNHFUHDhZNaqQAmWEBjCIYGytUiPSWmIE5Z44kBgVp2AhverhUXvhPW5E2_l6uPBcUcd2tyWnbifZBNOIegN9PLRW67F4x9tJzyv76F-bHd9Jb6uQAmnhcHS6B9A-RzuJS7r054vb7p2xImMnt_Et5N3L7LCv_p2lIQnPLPsB88Y39A==
22 | sn://wg?eJxNzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNINsbGC3gjOyltX_VKjDG0LI4ouK24fHwqBSjiKDlwMhpUIwlSCwWgEUFbSiZaJI1YCyo8tiHWMkrAQHo1g6Nyg3vUCtPldrxyHdHEbr9jzp1evPPnIQ1G6njobLZT8Y7S2cCteuhd2z3PTm6bgHzTwPHkdPehew4zE9d0GS5Xt-ydszJjJ6f1LRXby-Kwr_-XUZMJzzz_AZUoN44=
23 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNGVsbGC3gjO2ltX_VKjDG0LI4ouK04wuNTKUQRR8mBk9GgGkmQWigAjQjaUjLRImnEWlDhsQ2xllECBtKrGRyVG9yjVpgut-OV64gmdvsdc-704p0_D2kwUsdDZ7OdineUzgZu1UPv2u55dnLbBOSbBo4np7sP3XOYmbimy3C5umXvnJUZOzmtb6noXhaHff3vDJpMeOb5D-zaN-I=
24 | sn://wg?eJxNzssOwUAUANAJ8TWYzr2m89ppaUrjFVEstU2LEOIRj4Wk_2TBwofZ6dL2rE6JEAJKUQBOtaL8_SgXIJGCoIyi1cAaCiYMl4wZAGaUFInhSSM2HAuPNYuNiBJmAb6awVG6wT1qhdt0Pc5chzeh2-_Yc6cXb_x5iIORPB46q_WUf6LtbOBWPfCu7Z6nk9sqQN-2YDw53X3WPYc7G5Z4GabZbffJSYWQk9P6lortZXHY1__L2ij9zPMfKPc3Ig==
25 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNGVsbGC3gjO2ltX_VKjDG0LI4ouG1zwsenUogijpIDJ6NBNZIgtVAAGhG0pWSiRdKItaDCYxtiLaMEDKRXMzgqN7hHrTBdbscr1xFN7PY75tzpxTt_HtJgpI6HzmY7Fe8onQ3cqofetd3z7OS2Ccg3DRxPTncfuucwM3FNl-FydcveOSszdnJa31LRvSwO-_rfGTSZ8MzzH_AAN-o=
26 | sn://wg?eJxVzssOwUAUANCJxMK3YHrvNZ3pzE5LUxqviGKpbbxCiEc8dv0pYeEH_JGdbm3P6hQYY-g4HFFwrTmK16eUiyKOkgMnq0YVkiCNUAAGEYyjZGpEWkuMoNwTDYmRcQoW0rMeHpUX3uNGtJ2vhwvPFXVsd1v21O0km2AaUW-gjofWaj0W73g76XllH_1rs-Pr9LYKKbAtHI5O9wDa52hn45Iu_fnitntnrMjYyW18C3n3Mjvsq39nbciGR5b9APhuOAA=
27 | sn://wg?eJxVzjkOgkAUANAJxtOow_zvMAPTsUhQ4hYiSikQt2g0LnEpTLgThQ0Hs5PW9lVPI4SAaVIATi1BEct3oxaJFARlFPUutlEwobhkTAEwZUqRK553M8Wx9sximRJpznTAjx1epBu-Ui8-rHbR2nW4DYNR30icYbYPkhjHU3k597e7Oa_Sw2LstnzwH72hb-XPbYiBoUM0u74CNrjFRwM2eJ-s1s9jVZAmIVfH-2p19748nzp_Z65MqyyKH39GN3Q=
28 | sn://wg?eJxNzj0PwUAYAOAL8Wtwvfd1vWtv09KUpj4iilHbtAghWkEHSX-SxGDxw2w6Wp_pqRFCwDAoAKempOL5qFcgkYKgjKLWwRYKJhSXjCkApgwpYsXjTqQ4Vh6ZLFIijJkG-O56mbS9IuwFh2Q3S22Ld2E4Gugry4_27irA8VRm58F2t-Cf8LAc200HnFvfd8z4vvXQ1TWYzfPCZcNLcNRhg9dJkt6Pn5I0CMmt3rdWba_r86n9XwZlmK-y_AEjrjcU
29 | sn://wg?eJxVzjkOgkAUANAJiYVnUYf_v8MMTCcoQYmiMaKUAnGLRuMSl45LGRsv4I3spLV91TMYY2jbHFFwx-GEz0-1FEUcJQdOZpPqJEFqoQA0ImhbyVyLvJlpQaVnDmRapjmYSK9WeFJe-Ejb8W6xGS89V7SwN-haidvPtkESUzRSp2N3vZmKd7qbRV7NR__W6ftOfl-HFFgmjifnRwC9S7y3cEXX4WJ5378LVmHs7La_Rtm9zo-Hxt9ZarLgWRQ_9Jg39g==
30 | sn://wg?eJxNzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNKFsbGC3gjOyltX_VKjDG0LI4ouK24enwqBSjiKDlwMhpUIwlSCwWgEUFbSiZaJI1YCyo8tiHWMkrAQHo1g6Nyg3vUCtPldrxyHdHEbr9jzp1evPPnIQ1G6njobLZT8Y7S2cCteuhd2z3PTm6bgHzTwPHkdPehew4zE9d0GS5Xt-ydszJjJ6f1LRXby-Kwr_-XSZMJzzz_AZawN5I=
31 | sn://wg?eJxNzrsOgjAUANBG49eopfdaWugmIEGJrxhRR4GAGA0GNT4GE_7IwcHFD3OT0fVMp0YIAcOgAJyagsLzUa9AIgVBGUWtgy0UTCguGVMATBlSxIrHnUhxrDwyWaREGDMN8N31j9L276ET7JPtLLUt3oXBqK-vrGG081YBjqfyWPSz7YJ_wv1ybDddcK-9oWvGt8xHT9dgNj_dPTY4B7kOG7xMkvSWf0rSIORkOd9atb2si0P7v1ydzFdZ_gAeVzcG
32 | sn://wg?eJxVzjkOgkAUANAJxtOow__fYQamA5SgxC1G1FIgbtFoXOJSmHAnCxsOZiet7auewRhD2-aIgjuSI7xflVIUcZQcOJlNqpMEqYUC0IigbSUzLbJmqgWVnjqQaplkYCJ93Ois_OiZtOL9cjte-Z5wsdvvWHOvl-7CeUyDkTqfOpvtVBTJfjbwawEG93YvcLLHJqLQMnE8uTxD6F7jg4Vrug2Xq8ehyFmVsYvX-hpl97Y4HRt_Z6Ft553nP3z4N24=
33 | sn://wg?eJxVzrsOgjAUANBG49eopfdaWugmKEGJrxhRR4GAEonGRxAHE_5JExc_zE1W1zOdGiEEDIMCcGpKCvz1qFcikYKgjKLWwRYKJhSXjCkApgwpIsWjTqg4Vh6aLFQiiJgG-O56Z2l796DnZ3E6T2yLd2E4HuhraxTu3bWPk5k8nwa7dMk_Qbaa2E0HnFt_5JhRsfPQ1TWYLy53lw2v_kGHLebTOCkOn5I0CLlYvW-t6uab07H9d9aVYT7L8geBlDd6
34 | sn://wg?eJxNzskOwVAUANAXiYVvweu91xvat9PSlMYUUSy1jSmEGGLY9aew8QP-yE6Xtmd1CowxtG2OKLijuHx-Sjlo4qg4cLJqVCEFyggNYBDB2FqlRqS1xAjKPXEgMSpOwUJ61cOj9sJ73Ii28_Vw4bmiju1uS07dTrIJphH1Bvp4aK3WY_GOt5OeV_bRvzY7vpPeViEF0sLh6HQPoH2OdhKXdOnPF7fdO2NFxk5u41vIt5fZYV_9L2tDEh5Z9gOYLDeW
35 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNOxth4AW9kJ63tq16JMYaWxREFtyVHeHwqhSjiKDlwMhpUIwlSCwWgEUFbSiZaJI1YCyo8tiHWMkrAQHo1g6Nyg3vUCtPldrxyHdHEbr9jzp1evPPnIQ1G6njobLZT8Y7S2cCteuhd2z3PTm6bgHzTwPHkdPehew4zE9d0GS5Xt-ydszJjJ6f1LRXdy-Kwr_-dhSYTnnn-A-8eN-g=
36 | sn://wg?eJxNzrsOgjAUANBG49eopfdSWtpNQIISXzGijAIRNRqNj_gYTPgl4-Dih7nJ6HqmUyGEgG1TAE6VoubzUS1BIgVBGUXDxAYKJjSXjGkApm0pMs0zM9UcS08VS7VIMmYAvlvhUbrhPfGi7WI9zl2Ht6Db71ix00s3QRzhYCSPh85qPeWfZDsbuHUf_Gu756vstgoxsAwYT073gHXP0c6CJV6Gi_y2-xSkRsjJ8b6VcnuZH_bN_zJqW72K4gcjtDcU
37 | sn://wg?eJxNzssOwUAUANAJ8TWYzr2mM-3stDSlqUdEsdQ2LUKIVtCFpP8kYePD7HRpe1anRggBw6AAnJqCytejXoFECoIyiloHWyiYUFwypgCYMqSIFY87keJYeWSySIkwZhrgu-tl0vaKsBcckt0stS3eheFooK8sP9q7qwDHU5mdB9vdgn_Cw3JsNx1wbn3fMeP71kNX12A2zwuXDS_BUYcNXidJej9-StIgJLd631q1va7Pp_Z_WSrDfJblDygwNyA=
38 | sn://wg?eJxNzrsOgjAUANBG49eopfdSWugmIEGJojGijAIBNRqNj_gYTPgjBwcXP8xNRtcznRohBEyTAnBqmVR_PuoVSKQgKKOo6dhCwYTikjEFwJQpRaZ4pqeKY-WpxVIlkoxpgO9OcJROcE_caJuvJ4Vj8w70hz0jtgfpxo8jDMfyeOit1jP-Sbbz0Gl64F27A8_KbqsAfUODyfR091n_HO0MWOJllBe33ackDUJOtvutVdvL4rBv_5erk_Uqyx8hazcO
39 | sn://wg?eJxNzrsOgjAUANAG49eopfdaWtpNUIISXzGijALxFY3GR3wMJvyRg4OLH-ZmR9czHYsQAq5LAThViqrno2RAIgVBGUW7jlUUTGguGdMATLtS5Jrn9UxzNJ4plmmR5swGfDeio_Sje9qMt_P1aOF7vAGdXttJvG62CZMY-0N5PLRX6wn_pNtp368EEFxb3UDlt1WEoWPDaHy6h6xzjncOLPEymC9uu09ByoScvObXMtvL7LCv_ZfNSb2K4gcmxDcc
40 | sn://wg?eJxNzjkOgkAUgOGJiYVnUYf3nsMMTCcoQYlbjKilQNwiwbjEpeNOxth4AW9kJ6XVn3zVX2KMoWVxRMHtIo9PpQBFHCUHTkaDaiRBaqEANCJoS8lEi6QRa0GFxzbEWkYJGEivZnBUbnCPWmG63I5XriOa2O13zLnTi3f-PKTBSB0Pnc12Kt5ROhu4VQ-9a7vn2cltE5BvGjienO4-dM9hZuKaLsPl6pa9c1Zm7OS0vqXi9rI47Ov_y0KTCc88_wGUYTeM
41 | sn://wg?eJxVzjkOgkAUANCJxtOow_zPMAPTCUpY4hYjSikQFaLRuMSlMOFOxth4MDtpbV_1aoQQME0KwKklKOivR70SiRQEZRQ1HVsomFBcMqYAmDKlyBTP9FRxrDy1WKpEkjEN8N0Jj9IJ70k32i6LycqxeQeCgW_Edj_deHGEw7E8Hvy8mPFPsp0PnaYL7rXXd63slofoGRpMpqe7x4JztDNgjZfRcnXbfUrSIORkd7-1qntZHPbtv7NQpvUsyx-AyDd4
42 | sn://wg?eJxVzskOwUAYAOAJ8TSYzv93OttNS1MaW0TpUdvYQoglloOk7-TAwYO56dX1O30lQggoRQE41Yqi_X6UC5FIQVBG0bKxhoIJwyVjBoAZJUVmeGanhmPhqWapEUnGLMBXIzxKL7wnzWg7X48Wnssb0Om1ndjtppsgjrA_lMdDe7We8E-ynfa9qg_-tdX1dXZbhRg4FozGp3vAOudo58ASL4P54rb75KRCyMltfktF9zI77Ot_Z22Ufub5D4VoN4Q=
43 | sn://wg?eJxNzjkOgkAUANAJxtOow_zvMAPTsUhQ4hYiSikQt2g0LnEpTLgThQ0Hs5PS9lVPI4SAaVIATi1JsXw3apBIQVBGUe9iGwUTikvGFABTphS54nk3UxxrzyyWKZHmTAf82OFFuuEr9eLDahetXYfbMBj1jcQZZvsgiXE8lZdzf7ub8yo9LMZuywf_0Rv6Vv7chhgYOkSz6ytgg1t8NGCD98lq_TxWBWkScnW8r1Zv78vzqfNf5sq0yqL4ASLlNxI=
44 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNGVsbGC3gjO2ltX_VKjDG0LI4ouG1xwsenUogijpIDJ6NBNZIgtVAAGhG0pWSiRdKItaDCYxtiLaMEDKRXMzgqN7hHrTBdbscr1xFN7PY75tzpxTt_HtJgpI6HzmY7Fe8onQ3cqofetd3z7OS2Ccg3DRxPTncfuucwM3FNl-FydcveOSszdnJa31LRvSwO-_rfGTSZ8MzzH-80N-g=
45 | sn://wg?eJxVzrsOgjAUANAG49eopfdaWtpNUIISXzGijALxFY3GR3wMJvyRg4OLH-ZmV9czHYsQAq5LAThViiI8HyUjEikIyijadayiYEJzyZgGYNqVItc8r2eao_FMsUyLNGc24LsRHaUf3dNmvJ2vRwvf4w3o9NpO4nWzTZjE2B_K46G9Wk_4J91O-34lgODa6gYqv60iDB0bRuPTPWSdc7xzYImXwXxx230KUibk5DW_luleZod97e9sUupVFD992Ddw
46 | sn://wg?eJxNzjkOgkAUANCJiYVnUYf_P8MMTCcoQYlbjKilQNyi0bjEpeNINsaGC3gjOyltX_VKjDG0bY4ouKO4-fxUClDEUXLgZJhUIwlSCwWgEUHbSqZapGaiBRWeOJBoGadgIL0b4Ul54SNuRrvFZrT0XNHATq9tzdxusg1mEfWH6nRsrzcTkce7ad-r-ujfWl3fSe_rkALLwNH4_Aigc4n2Fq7oOlgs7_s8Y2XGzm7zWyq21_nxUP8voyYLXln2A5LZN4g=
47 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNOxth4AW9kJ63tq16JMYaWxREFt21O-PhUClHEUXLgZDSoRhKkFgpAI4K2lEy0SBqxFlR4bEOsZZSAgfRqBkflBveoFabL7XjlOqKJ3X7HnDu9eOfPQxqM1PHQ2Wyn4h2ls4Fb9dC7tnuendw2AfmmgePJ6e5D9xxmJq7pMlyubtk7Z2XGTk7rWyq6l8VhX_87C00mPPP8B_MQN_I=
48 | sn://wg?eJxNzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNGVsbGC3gjOyltX_VKjDG0LI4ouG1x-_GpFKCIo-TAyWhQjSRILRSARgRtKZlokTRiLajw2IZYyygBA-nVDI7KDe5RK0yX2_HKdUQTu_2OOXd68c6fhzQYqeOhs9lOxTtKZwO36qF3bfc8O7ltAvJNA8eT092H7jnMTFzTZbhc3bJ3zsqMnZzWt1RsL4vDvv5fBk0mPPP8B5d9N5Q=
49 | sn://wg?eJxVzssOwUAUANAJ8TWY3ntNZ9rZaWlK4xVRLLVNixDiEY-FpP8kYuPD7HRre1anxBhDy-KIgtuSE7we5UIUcZQcOBkNqpEEqYUC0IigLSUTLZJGrAUVHtsQaxklYCC9m8FRucE9aoXbdD3OXEc0sdvvmHOnF2_8eUiDkToeOqv1VHyi7WzgVj30ru2eZye3VUC-aeB4crr70D2HOxOXdBmm2W33yVmFsZPT-paK7mVx2Nf_zlJb9jPPf39CN3Q=
50 | sn://wg?eJxVzrsOgjAUANBG49eopfdaWtpNUIISXzGijgLxFY1GMIiDCf_k4MKHucnqeqZTI4SAZVEATpWiCO9XvRKJFARlFI0OtlAwoblkTAMwbUkRax53Is2x8kixSIswZgbgp-sn0vGfYS84b4_znWPzLgzHA3Ntj6KTtw5wMpPJbXA4LnkZnlcTp-mC--iPXBXnBx8904D5In16bHgPLibsMZtud_mlLEiDkNTufWtVN9vcru2_M9eWehfFD4DgN3g=
51 | sn://wg?eJxNzjkOgkAUANAJxtOow_zvMAPTCUpY4hYjSikQUKPRuMSlMOFOmth4MDspbV_1NEIImCYF4NSSFF-PWgUSKQjKKOptbKJgQnHJmAJgypQiUzxrp4pj5anFUiWSjOmA7054lE54T7rRNl9PCsfmHQgGvhHb_XTjxREOx_J48FfrGf8k2_nQabjgXnt918puqxA9Q4fJ9HT3WHCOdgYs8TLKi9vuU5I6ISe7-9Wq7WVx2Lf-y4YyrWdZ_gAjpjcU
52 | sn://wg?eJxVzjkOgkAUANAJiYVnUYf_P8MMTAcoQYlbjKilQNyi0bjEpeNSxsYLeCM7aW1f9QzGGDoORxTclRyt56daiiKOkgMn06I6SZBaKACNCNpRMtcitzItqPTMhUzLNAcT6eXFJxXEj7SZ7Bab0TLwhYedXtue-d1sG80S6g_V6dhebybine6m_aAWYnhrdUM3v69jimwTR-PzI4LOJdnbuKLrYLG8798FqzB29ptfo-xe58dD4-8sNdnwLIof8vg38g==
53 | sn://wg?eJxVzrsOgjAUANBG49eopfda2tJNUIISXzGijgLxFY1GMIiDCf_k4MKHucnqeqZTI4SAUhSAU0tRNN-veiUSKQjKKBodbKFgQnPJmAZgWkkRax53Is2x8shikRZhzAzAT9dPpOM_w15w3h7nO8fmXRiOB-baHkUnbx3gZCaT2-BwXPIyPK8mTtMF99EfuVacH3z0TAPmi_TpseE9uJiwx2y63eWXsiANQlK7961V3Wxzu7b_zlwr610UP4MmN34=
54 | sn://wg?eJxNzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNSRgsv4I3spLR91SsxxtCyOKLgtuL0-lQKUMRRcuBkNKhGEqQWCkAjgraUTLRIGrEWVHhsQ6xllICB9GwGR-UG96gVpsvteOU6oondfsecO714589DGozU8dDZbKfiHaWzgVv10Lu2e56d3DYB-aaB48np7kP3HGYmrukyXK5u2TtnZcZOTutbKraXxWFf_y_bmkx45PkPmCw3lg==
55 | sn://wg?eJxNzskOwUAYAOAJ8TSYzv93OttNS1MaW0TpUdvYQoglloOkz8TBxYO56dH1O30lQggoRQE41Zqq56NcgEQKgjKKlo01FEwYLhkzAMwoKTLDMzs1HAtPNUuNSDJmAb4b4VF64T1pRtv5erTwXN6ATq_txG433QRxhP2hPB7aq_WEf5LttO9VffCvra6vs9sqxMCxYDQ-3QPWOUc7B5Z4GcwXt90nJxVCTm7zWyq2l9lhX_8v20bpV57_AChENyA=
56 | sn://wg?eJxVzj0PwUAYAOAL8Wtwvfd1vWtv09KUpj4iilHbtAghWkEHSX-SxGDxw2y6Wp_pqRFCwDAoAKempMCfj3olEikIyihqHWyhYEJxyZgCYMqQIlY87kSKY-WRySIlwphpgO-ul0nbK8JecEh2s9S2eBeGo4G-svxo764CHE9ldh5sdwv-CQ_Lsd10wLn1fceM71sPXV2D2TwvXDa8BEcdNnidJOn9-ClJg5Dc6n1rVfe6Pp_af2dQhvkqyx9-jDdy
57 | sn://wg?eJxVzssKgkAUgOGh6Gmqcc5xnNHZpSaWlEVkuUxFK4qiC10WgY8UtGjTg7XLbasfvtVfI4SAaVIATq0q-vNRr0QiBUEZRU3HFgomFJeMKQCmTCkyxTM9VRwrTy2WKpFkTAN8d4KjdIJ74kbbfD0pHJt3oD_sGbE9SDd-HGE4lsdDb7We8U-ynYdO0wPv2h14VnZbBegbGkymp7vP-udoZ8ASL6O8uO0-JWkQcrLdb63avSwO-_bfMyjTepXlD36SN3I=
58 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNINsbGC3gjO2ltX_VKjDG0LI4ouG1zEo9PpRBFHCUHTkaDaiRBaqEANCJoS8lEi6QRa0GFxzbEWkYJGEivZnBUbnCPWmG63I5XriOa2O13zLnTi3f-PKTBSB0Pnc12Kt5ROhu4VQ-9a7vn2cltE5BvGjienO4-dM9hZuKaLsPl6pa9c1Zm7OS0vqWie1kc9vW_M2oy4ZnnP_MWN_I=
59 | sn://wg?eJxVjjsOgkAUADckFp5Fhfeeyy5sJyhBiaIxopQC8ReNxk_8dFzK2HgBb2TntlYzmWoMxhg6jonITVdDPD9VXSRpNcEkq0l1EiAUlwAKEZQjRaF40cwVJ91zF3IlsgIspFcrOkk_emTtZLfYjJe-x1vYG3Tt1Ovn2zBNKB7J07G73kz5O9vNYr8WYHDr9AO3uK8jCm0Lx5PzI4TeJdnbuKLrcLG8798lqzB29tpfQ-9e58dD4-9ZKLLhWZY_9uI3_A==
60 | sn://wg?eJxVzssKgkAUgOGh6Gmqcc5pnNHZpSWWdCOyWqaiJUnRBbNF4CMFLdr0YO1y2-qHb_XXCCFgGBSAU1NWeT7qlUikICijqHWwhYIJxSVjCoApQ4pI8agTKo6VhyYLlQgipgG-u95Z2t496PlZnM4T2-JdGI4H-toahXt37eNkJs-nwS5d8k-QrSZ20wHn1h85ZlTsPHR1DeaLy91lw6t_0GGL-TROisOnJA1CLlbvW6t2883p2P57BmWYr7L8AXxAN2w=
61 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_P8MMTCcoQYlbjKilQNyi0bjEpeNKFsaGC3gjO2ltX_VKjDG0bY4ouCM5ms9PpRBFHCUHToZJNZIgtVAAGhG0rWSqRWomWlDhiQOJlnEKBtK7EZ6UFz7iZrRbbEZLzxUN7PTa1sztJttgFlF_qE7H9nozEXm8m_a9qo_-rdX1nfS-DimwDByNz48AOpdob-GKroPF8r7PM1Zm7Ow2v6Wie50fD_W_M2my4JVlP-_oN-o=
62 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNOxth4AW9kJ63tq16JMYaWxREFtxVH8fhUClHEUXLgZDSoRhKkFgpAI4K2lEy0SBqxFlR4bEOsZZSAgfRqBkflBveoFabL7XjlOqKJ3X7HnDu9eOfPQxqM1PHQ2Wyn4h2ls4Fb9dC7tnuendw2AfmmgePJ6e5D9xxmJq7pMlyubtk7Z2XGTk7rWyq6l8VhX_87C00mPPP8B_MCN_I=
63 | sn://wg?eJxNzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNOxth4AW9kJ6Xtq16JMYaWxREFtxWXj0-lAEUcJQdORoNqJEFqoQA0ImhLyUSLpBFrQYXHNsRaRgkYSK9mcFRucI9aYbrcjleuI5rY7XfMudOLd_48pMFIHQ-dzXYq3lE6G7hVD71ru-fZyW0TkG8aOJ6c7j50z2Fm4pouw-Xqlr1zVmbs5LS-pWJ7WRz29f-y0GTCM89_l3E3lA==
64 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNINsbGC3gjO2ltX_VKjDG0LI4ouC05isenUogijpIDJ6NBNZIgtVAAGhG0pWSiRdKItaDCYxtiLaMEDKRXMzgqN7hHrTBdbscr1xFN7PY75tzpxTt_HtJgpI6HzmY7Fe8onQ3cqofetd3z7OS2Ccg3DRxPTncfuucwM3FNl-FydcveOSszdnJa31LRvSwO-_rfGTWZ8MzzH-_qN-o=
65 | sn://wg?eJxNzjkOgkAUANCJiYVnUYf_P8MMTCcoQYlbjKilQNyi0bjEpeNGVsaGC3gjOyltX_VKjDG0bY4ouGNz8_mpFKCIo-TAyTCpRhKkFgpAI4K2lUy1SM1ECyo8cSDRMk7BQHo3wpPywkfcjHaLzWjpuaKBnV7bmrndZBvMIuoP1enYXm8mIo93075X9dG_tbq-k97XIQWWgaPx-RFA5xLtLVzRdbBY3vd5xsqMnd3mt1Rsr_Pjof5fBk0WvLLsB5LfN4g=
66 | sn://wg?eJxNzskOwUAYAOBJxdNgOv9vts5NS1MaW0TpUdvYQoglloOkjyRxcPFgbnp0_U6fRQgBrSkAp46m4vkoFaCQgqSMol3HKkomDVeMGQBmtJKZ4Vk9NRwLTx2WGplkzAZ8N8Kj8sJ70oy28_Vo4bm8AZ1eW8RuN90EcYT9oToe2qv1hH-S7bTvVXzwr62u72S3VYiBsGE0Pt0D1jlHOwFLvAzmi9vuk5MyISe3-bWK7WV22Nf-y2C088rzHyOyNxQ=
67 | sn://wg?eJxVjs0OwUAYADfE06Dd77PdbfempSlN_UQUR23TIoRoBT1I-k4iLh7MzV6dZjKnqRFCwDQ1AKZZCvz1qKsiUKlGNdQ72EJOuWSCUglApSl4IlnSiSVD1WOLxpJHCdUB310_F45fRr3wkO5mmWOzLgxHA2NlB_HeW4U4nor8PNjuFuwTHZZjp-mCe-sHrpXctz56hg6zeVF6dHgJjwZs8DpJs_vxU5EGIYXd-9bU7nV9PrX_nrk0rWdV_QCEqDeC
68 | sn://wg?eJxVzrsKwjAUANBQ8WvUNPeaJk02Wy3V4gux2tGm-EJRfOBjEPpJgoOLH-ZmV9czHYsQAq5LAThViiJ_PkqFSKQgKKNo17GKggnNJWMagGlXikzzrG40x8KNYkaLNGM24LsRHaUf3dNmvJ2vRwvf4w3o9NpO4nXNJkxi7A_l8dBerSf8k26nfb8SQHBtdQOV3VYRho4No_HpHrLOOd45sMTLYL647T45KRNy8ppfq-heZod97e8M2lWvPP8BgOY3eA==
69 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNGVsbGC3gjO2ltX_VKjDG0LI4ouC054eNTKUQRR8mBk9GgGkmQWigAjQjaUjLRImnEWlDhsQ2xllECBtKrGRyVG9yjVpgut-OV64gmdvsdc-704p0_D2kwUsdDZ7OdineUzgZu1UPv2u55dnLbBOSbBo4np7sP3XOYmbimy3C5umXvnJUZOzmtb6noXhaHff3vDJpMeOb5D-2cN-Q=
70 | sn://wg?eJxVzrsKwjAUANBQ8WvUNPeaJmk2Wy3V4gux2tGm-EJRfOBjEPpPIi5-mJtdXc90LEIIKEUBOHUFBfV6lAqRSEFQRtGuYxUFE5pLxjQA00qKTPOsbjTHwo3LjBZpxmzAdyM6Sj-6p814O1-PFr7HG9DptZ3E65pNmMTYH8rjob1aT_gn3U77fiWA4NrqBm52W0UYOjaMxqd7yDrneOfAEi-D-eK2--SkTMjJa36tonuZHfa1v7PQyn3m-Q-EnDeC
71 | sn://wg?eJxVjjsOgkAUADcmFp5Fhfeeyy5sJyhBib8YUUuB-IsE4yd-Oq5kYWy8gDeyc1urmUw1JcYY2raByA1HQzw-FV0kaTXAILNBNRIgFJcAChGULUWqeNpIFCfdEwcSJeIUTKRXMzxKL7zHrShbbscrz-VN7PY71tztJbtgHtFgJI-HzmY75e84mw28qo_-td3znfS2CSmwTBxPTvcAuucot3BNl-FydcvfBSszdnJb35LevSwO-_rfMymy4FkUP_PSN_Q=
72 | sn://wg?eJxVzssOwUAUANCJxMK3YHrvNZ2Zzk5LUxpKRLHUNl4hxCMeu_6U2PgBf2SnW9uzOiXGGGrNEQV3FEf9-lQKUcRRcuBkNahGEqQRCsAggtFKZkZkjdQIKjx1IDUyycBCejXDk_LCR9KKd4vNaOm5oondfseeub10G8xiiobqdOysNxPxTnbTyKv66N_aPd_J7uuQAtvC0fj8CKB7ifc2rug6WCzv-3fOyoyd3da3VHSv8-Oh_nfWhmx45vkP-So4Ag==
73 | sn://wg?eJxNzstugkAUANAJSRf9ltrh3ss8YHaAEpSobYy0LssQrUajEYyPHR_Vpht_wD9yV5Zuz-o4jDH0fY4oeKC493N7bkETR8WBk-tRhxQoIzSAQQTja1UaUXrWCGrdBmCNKkpwkf7CrNJxdim6-Wa-miziSIQ4GPXlLBradTrLafyuq31_ufoQ12LzOY5fEkxOvWESlOdlRql0cTKtLykMDvlW4jcd3-aL8_basCfG6qh7d9rt8Wu_e30sS0MSfpvmH5UcN44=
74 | sn://wg?eJxVzj0PwUAYAOAL8Wtwvfd1vWtv09KUpj4iilHbtAghWkEHSf-SGCx-mE1X6zM9NUIIGAYF4NQUFOTzUa9EIgVBGUWtgy0UTCguGVMATBlSxIrHnUhxrDwyWaREGDMN8N31Mml7RdgLDslultoW78JwNNBXlh_t3VWA46nMzoPtbsE_4WE5tpsOOLe-75jxfeuhq2swm-eFy4aX4KjDBq-TJL0fPyVpEJJbvW-t6l7X51P774zKMF9l-QOA0Dd4
75 | sn://wg?eJxNzjkOgkAUANCJiYVnUYf_P8MMTCcoQYlbjKilQNyi0bjEpeNKFsaGC3gjOyltX_VKjDG0bY4ouCO5-fxUClDEUXLgZJhUIwlSCwWgEUHbSqZapGaiBRWeOJBoGadgIL0b4Ul54SNuRrvFZrT0XNHATq9tzdxusg1mEfWH6nRsrzcTkce7ad-r-ujfWl3fSe_rkALLwNH4_Aigc4n2Fq7oOlgs7_s8Y2XGzm7zWyq21_nxUP8vkyYLXln2A5LTN4g=
76 | sn://wg?eJxNzjkOgkAUANCJiYVnUYf_P8MMTCcoQYlbjKilQNyi0bjEpeNKFsaGC3gjOyltX_VKjDG0bY4ouONw8_mpFKCIo-TAyTCpRhKkFgpAI4K2lUy1SM1ECyo8cSDRMk7BQHo3wpPywkfcjHaLzWjpuaKBnV7bmrndZBvMIuoP1enYXm8mIo93075X9dG_tbq-k97XIQWWgaPx-RFA5xLtLVzRdbBY3vd5xsqMnd3mt1Rsr_Pjof5fJk0WvLLsB5UuN44=
77 | sn://wg?eJxVzjsOgkAUQNEJiYVrUYf3nsMMTCcoQYmiMaKUAvEXjcZP_HRsyti4AXdkJ63VTU51DcYY2jZHFNwpI56faimKOEoOnMwm1UmC1EIBaETQtpK5Fnkz04JKzxzItExzMJFerfCkvPCRtuPdYjNeeq5oYW_QtRK3n22DJKZopE7H7nozFe90N4u8mo_-rdP3nfy-DimwTBxPzo8Aepd4b-GKrsPF8r5_F6zC2Nltf41y9zo_Hhp_z1KTBc-i-AH1Vjf4
78 | sn://wg?eJxNzjkOgkAUANAJiYVnUYf_v8MMTCcoQYmiMaKUAnGLRuMSl45LGRsv4I3spLR91TMYY2jbHFFwx-H281MtQRFHyYGT2aQ6SZBaKACNCNpWMtcib2ZaUOmZA5mWaQ4m0qsVnpQXPtJ2vFtsxkvPFS3sDbpW4vazbZDEFI3U6dhdb6bine5mkVfz0b91-r6T39chBZaJ48n5EUDvEu8tXNF1uFje9--CVRg7u-2vUW6v8-Oh8V-Wmix4FsUPnBM3oA==
79 | sn://wg?eJxVzj0PwUAYAOAL8Wtwvfd1vWtv09KUpj4iilHbtAghWkEHSf-RwWDxw2y6Wp_pqRFCwDAoAKemQRGej3olEikIyihqHWyhYEJxyZgCYMqQIlY87kSKY-WRySIlwphpgO-ul0nbK8JecEh2s9S2eBeGo4G-svxo764CHE9ldh5sdwv-CQ_Lsd10wLn1fceM71sPXV2D2TwvXDa8BEcdNnidJOn9-ClJg5Dc6n1rVfe6Pp_af-cqZb7K8gd9Djdu
80 | sn://wg?eJxNzssOwUAUANAJ8TWYzr2m89ppaUrjFVEstU2LEOIRj4Wk_yRh48PsdGl7VqdECAGlKACnWlP1epQLkEhBUEbRamANBROGS8YMADNKisTwpBEbjoXHmsVGRAmzAN_N4Cjd4B61wm26Hmeuw5vQ7XfsudOLN_48xMFIHg-d1XrKP9F2NnCrHnjXds_TyW0VoG9bMJ6c7j7rnsOdDUu8DNPstvvkpELIyWl9S8X2sjjs6_9laZR-5vkPK0g3KA==
81 | sn://wg?eJxNzrsOgjAUANAG49eopfdaWtpNUIISXzGijALxFY3GR3wMJvyRg4OLH-ZmR9czHYsQAq5LAThVisLzUTIgkYKgjKJdxyoKJjSXjGkApl0pcs3zeqY5Gs8Uy7RIc2YDvhvRUfrRPW3G2_l6tPA93oBOr-0kXjfbhEmM_aE8Htqr9YR_0u2071cCCK6tbqDy2yrC0LFhND7dQ9Y5xzsHlngZzBe33acgZUJOXvNrme1ldtjX_svmpF5F8QMgrDcM
82 | sn://wg?eJxNzjkOgkAUANAJxtOow_zvMAPTsUhQ4hYiSikQt2g0LnEpTLgThQ0Hs5PS9lVPI4SAaVIATi1JRflu1CCRgqCMot7FNgomFJeMKQCmTClyxfNupjjWnlksUyLNmQ74scOLdMNX6sWH1S5auw63YTDqG4kzzPZBEuN4Ki_n_nY351V6WIzdlg_-ozf0rfy5DTEwdIhm11fABrf4aMAG75PV-nmsCtIk5Op4X63e3pfnU-e_zJVplUXxAyXxNxo=
83 | sn://wg?eJxVzrsOgjAUANBG49eopfdS2tJNQIISXzGijAIRNRqNj_gYTPgmHVz8MDdZXc90KoQQUIoCcGoLCur5qJYikYKgjKJhYgMFE5pLxjQA00qKTPPMTDXH0lObpVokGTMA363wKN3wnnjRdrEe567DW9Dtd6zY6aWbII5wMJLHQ2e1nvJPsp0N3LoP_rXd8-3stgoxsAwYT073gHXP0c6CJV6Gi_y2-xSkRsjJ8b6VsnuZH_bNv7Oplf0qih-CVjd8
84 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_P8MMTCcoQYlbjKilQNyi0bjEpeNINsaGC3gjO2ltX_VKjDG0bY4ouCM5ms9PpRBFHCUHToZJNZIgtVAAGhG0rWSqRWomWlDhiQOJlnEKBtK7EZ6UFz7iZrRbbEZLzxUN7PTa1sztJttgFlF_qE7H9nozEXm8m_a9qo_-rdX1nfS-DimwDByNz48AOpdob-GKroPF8r7PM1Zm7Ow2v6Wie50fD_W_M2qy4JVlP-8kN-g=
85 | sn://wg?eJxVzrsOgjAUgOFG49OopedYWugmIEGJtxhRR4GAGA0GNV4GE17JOLj4YG6yOv3JN_01QggYBgXg1KyiPx_1SiRSEJRR1DrYQsGE4pIxBcCUIUWseNyJFMfKI5NFSoQx0wDfXf8obf8eOsE-2c5S2-JdGIz6-soaRjtvFeB4Ko9FP9su-CfcL8d20wX32hu6ZnzLfPR0DWbz091jg3OQ67DByyRJb_mnJA1CTpbzrVW7l3VxaP89ozLMV1n-AIDcN3g=
86 | sn://wg?eJxNzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNGVsbGC3gjOyltX_VKjDG0LI4ouC05Pj6VAhRxlBw4GQ2qkQSphQLQiKAtJRMtkkasBRUe2xBrGSVgIL2awVG5wT1qhelyO165jmhit98x504v3vnzkAYjdTx0NtupeEfpbOBWPfSu7Z5nJ7dNQL5p4HhyuvvQPYeZiWu6DJerW_bOWZmxk9P6lortZXHY1__LoMmEZ57_AI_DN4A=
87 | sn://wg?eJxNzjkOgkAUANCJiYVnUYf_P8MMTCcoQYlbjKilQNyi0bjEpeNMJsaGC3gjOyltX_VKjDG0bY4ouONw-_mpFKCIo-TAyTCpRhKkFgpAI4K2lUy1SM1ECyo8cSDRMk7BQHo3wpPywkfcjHaLzWjpuaKBnV7bmrndZBvMIuoP1enYXm8mIo93075X9dG_tbq-k97XIQWWgaPx-RFA5xLtLVzRdbBY3vd5xsqMnd3mt1Rsr_Pjof5fNjVZ8MqyH5nKN5o=
88 | sn://wg?eJxNzjkOgkAUANCJiYVnUYf_P8MMTCcoQYlbjKilQNyi0bjEpeNMJsaGC3gjOyltX_VKjDG0bY4ouCO5_fxUClDEUXLgZJhUIwlSCwWgEUHbSqZapGaiBRWeOJBoGadgIL0b4Ul54SNuRrvFZrT0XNHATq9tzdxusg1mEfWH6nRsrzcTkce7ad-r-ujfWl3fSe_rkALLwNH4_Aigc4n2Fq7oOlgs7_s8Y2XGzm7zWyq21_nxUP8vm5oseGXZD5dvN5Q=
89 | sn://wg?eJxNzjkOgkAUANAJiYVnUYf_v8MMTCcoQYmiMaKUAnGLRuMSl45LGRsv4I3spLR91TMYY2jbHFFwR3L1_FRLUMRRcuBkNqlOEqQWCkAjgraVzLXIm5kWVHrmQKZlmoOJ9GqFJ-WFj7Qd7xab8dJzRQt7g66VuP1sGyQxRSN1OnbXm6l4p7tZ5NV89G-dvu_k93VIgWXieHJ-BNC7xHsLV3QdLpb3_btgFcbObvtrlNvr_Hho_JelJgueRfEDmPM3mA==
90 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNKFsbGC3gjO2ltX_VKjDG0LI4ouC052o9PpRBFHCUHTkaDaiRBaqEANCJoS8lEi6QRa0GFxzbEWkYJGEivZnBUbnCPWmG63I5XriOa2O13zLnTi3f-PKTBSB0Pnc12Kt5ROhu4VQ-9a7vn2cltE5BvGjienO4-dM9hZuKaLsPl6pa9c1Zm7OS0vqWie1kc9vW_M2ky4ZnnP_SMN_Y=
91 | sn://wg?eJxNzjkOgkAUANAJxtOow_zvLMx0ghKUuMWIUgrELRqNS1wKE25kYWHjweyktH3Vswgh4DgUgFOtqXg-SgUopCApo2jXsYqSScMVYwaAGUfJzPCsnhqOhaeapUYmGbMB343wqLzwnjSj7Xw9Wngub0Cn1xax2003QRxhf6iOh_ZqPeGfZDvtexUf_Gur6-vstgoxEDaMxqd7wDrnaCdgiZfBfHHbfXJSJuTkNr9Wsb3MDvvaf7k46Vee_wAjuDcU
92 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_P8PMMJ2gBCVuMaKWAnGLRuMSl45LGRsv4I3spLV91SsxxlBrjii4qznZr0-lEEUcJQdOlk01kiCNUAAGEYxWMjMis1MjqPDUhdTIJAML6dWITsqPHkkz3i02o6XviQZ2em1n5nXTbTiLqT9Up2N7vZmId7Kb9v1qgMGt1Q3c7L6OKHQsHI3PjxA6l3jv4Iqug8Xyvn_nrMzY2Wt-S0X3Oj8e6n9nbciBZ57_APbgN_w=
93 | sn://wg?eJxVzrsOgjAUANAG49eopfda2tINUIISRWNEHQXiKxKMj_gYTPgnBxc_zE1W1zMdgxACSlEATm1JQb2ftUokUhCUUTTb2ETBhOaSMQ3AtJIi0zxrp5pj5anNUi2SjJmAbyc8SS98JJ04X-0ma8_lDvSHPWvhDtJ9sIgxGsvTsbfdzfgnyeeR1_DBv3UHvp3dtyEGlgmT6fkRsP4lLizY4HW0Wt-LT0nqhJzdzteoutfl8dD6Oyut7FdZ_gCG6jeI
94 | sn://wg?eJxNzskOwVAUANAXiYVvweu91xvat9PSlMYUUSy1jSmEGGLY9Y-sxMYP-CM7Xdqe1SkwxtC2OaLgjsPl41PKQRNHxYGTVaMKKVBGaACDCMbWKjUirSVGUO6JA4lRcQoW0qseHrUX3uNGtJ2vhwvPFXVsd1ty6naSTTCNqDfQx0NrtR6Ld7yd9Lyyj_612fGd9LYKKZAWDkenewDtc7STuKRLf7647d4ZKzJ2chvfQr69zA776n8ZDEl4ZtkPlTI3jg==
95 | sn://wg?eJxVzrsOgjAUgOEG49OopedYWtpNUIISbzGijALxFo3GS7wMJryTgw4-mJtd3f58028RQsB1KQCnSlEQ70fJiESTlFG061hFwYTmkjENwLQrRa55Xs80R-OZYpkWac5swFcjOko_uqfNeDtfjxa-xxvQ6bWdxOtmmzCJsT-Ux0N7tZ7wT7qd9v1KAMG11Q1UfltFGDo2jMane8g653jnwBIvg_nitvsUpEzIyWt-LbN7mR32tb9npV31LIofh7g3ig==
96 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_P8MMTCcoQYlbjKilQNyi0bjEpeNMJsaGC3gjO2ltX_VKjDG0bY4ouKM4wfNTKUQRR8mBk2FSjSRILRSARgRtK5lqkZqJFlR44kCiZZyCgfRuhCflhY-4Ge0Wm9HSc0UDO722NXO7yTaYRdQfqtOxvd5MRB7vpn2v6qN_a3V9J72vQwosA0fj8yOAziXaW7ii62CxvO_zjJUZO7vNb6noXufHQ_3vbGqy4JVlP-_uN-o=
97 | sn://wg?eJxNzskOwUAYAOBJxdNgOv9vls7ctDSlsUWUHrWNLYRYYjlI-k4kLh7MTY-u3-mzCCHgOBSAU60pvB6lAhRSkJRRtOtYRcmk4YoxA8CMo2RmeFZPDcfCU81SI5OM2YDvRnhUXnhPmtF2vh4tPJc3oNNri9jtppsgjrA_VMdDe7We8E-ynfa9ig_-tdX1dXZbhRgIG0bj0z1gnXO0E7DEy2C-uO0-OSkTcnKbX6vYXmaHfe2_LIyjn3n-AyRxNxY=
98 | sn://wg?eJxVzssOwUAUANAJ8TWY3ntNZ9rZaWlK4xVRLLVNixDiEY-FpJ8ksbDxYXa6tT2rU2KMoWVxRMFtyRGej3IhijhKDpyMBtVIgtRCAWhE0JaSiRZJI9aCCo9tiLWMEjCQ3s3gqNzgHrXCbboeZ64jmtjtd8y504s3_jykwUgdD53Veio-0XY2cKseetd2z7OT2yog3zRwPDndfeiew52JS7oM0-y2--SswtjJaX1LRfeyOOzrf2fUlv3K8x96sjdo
99 | sn://wg?eJxNzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNINsbGC3gjOyltX_VKjDG0LI4ouG1z6_GpFKCIo-TAyWhQjSRILRSARgRtKZlokTRiLajw2IZYyygBA-nVDI7KDe5RK0yX2_HKdUQTu_2OOXd68c6fhzQYqeOhs9lOxTtKZwO36qF3bfc8O7ltAvJNA8eT092H7jnMTFzTZbhc3bJ3zsqMnZzWt1RsL4vDvv5fRk0mPPP8B5hEN5Y=
100 | sn://wg?eJxNzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNSRgsv4I3spLR91SsxxtCyOKLgtuLy9akUoIij5MDJaFCNJEgtFIBGBG0pmWiRNGItqPDYhljLKAED6dkMjsoN7lErTJfb8cp1RBO7_Y45d3rxzp-HNBip46Gz2U7FO0pnA7fqoXdt9zw7uW0C8k0Dx5PT3YfuOcxMXNNluFzdsnfOyoydnNa3VGwvi8O-_l-2NZnwyPMfm0A3ng==
101 | sn://wg?eJxVzssOwUAUgOEJ8TSYzjmmM53ZaWlK4xZRLLVNixDiEpeFpG9kYWHjwezM1upP_tVXIoSA41AATpWJej7K5kikICijaDWwhoIJzSVjGoBpR4pU87SRaI7mJ4olWsQpswDfzfAovfAet6Jtth7nnsub0O137LnbSzbBPMLBSB4PndV6yj_xdjbwqj7413bPV-ltFWJgWzCenO4B656jnQ1LvAyz_Lb7FKRCyMltfUuGe1kc9vU_s0GpV1H8AIJoN3w=
102 | sn://wg?eJxVzjkOgkAUANAJxtOow_zvMAPTsUhQ4hYiSikQt2g0LnEpTLgThQ0Hs5PW9lVPI4SAaVIATi1JgZfvRi0SKQjKKOpdbKNgQnHJmAJgypQiVzzvZopj7ZnFMiXSnOmAHzu8SDd8pV58WO2itetwGwajvpE4w2wfJDGOp_Jy7m93c16lh8XYbfngP3pD38qf2xADQ4dodn0FbHCLjwZs8D5ZrZ_HqiBNQq6O99Xq7n15PnX-zlyZVlkUP4DSN3g=
103 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNOxth4AW9kJ63tq16JMYaWxREFtyUnenwqhSjiKDlwMhpUIwlSCwWgEUFbSiZaJI1YCyo8tiHWMkrAQHo1g6Nyg3vUCtPldrxyHdHEbr9jzp1evPPnIQ1G6njobLZT8Y7S2cCteuhd2z3PTm6bgHzTwPHkdPehew4zE9d0GS5Xt-ydszJjJ6f1LRXdy-Kwr_-dhSYTnnn-A_FyN-4=
104 | sn://wg?eJxVzjkOgkAUANAJiYVnUYf_P8MMTAcoQYlbjKilQNyi0bjEpeNSxsYLeCM7aW1f9QzGGDoORxTcVZys56daiiKOkgMn06I6SZBaKACNCNpRMtcitzItqPTMhUzLNAcT6eXFJxXEj7SZ7Bab0TLwhYedXtue-d1sG80S6g_V6dhebybine6m_aAWYnhrdUM3v69jimwTR-PzI4LOJdnbuKLrYLG8798FqzB29ptfo-xe58dD4-8sNdnwLIof9Iw39g==
105 | sn://wg?eJxVzjkOgkAUANAJxtOow_zvMAPTsUhQ4hYiSikQt2g0LnEpTLgThQ0Hs5PW9lVPI4SAaVIATi1BgZfvRi0SKQjKKOpdbKNgQnHJmAJgypQiVzzvZopj7ZnFMiXSnOmAHzu8SDd8pV58WO2itetwGwajvpE4w2wfJDGOp_Jy7m93c16lh8XYbfngP3pD38qf2xADQ4dodn0FbHCLjwZs8D5ZrZ_HqiBNQq6O99Xq7n15PnX-zlyZVlkUP4AIN3Y=
106 | sn://wg?eJxNzrsOgjAUgOFG49OopedQ2tJNQIISbzGijAIRNRqNl3gZTHgmHVx8MDcZHf9_-iqEEFCKAnBqK_p8VMuWSEFQRtEwsYGCCc0lYxqAaSVFpnlmpppj-VObpVokGTMA363wKN3wnnjRdrEe567DW9Dtd6zY6aWbII5wMJLHQ2e1nvJPsp0N3LoP_rXd8-3stgoxsAwYT073gHXP0c6CJV6Gi_y2-xSkRsjJ8b6VEnuZH_bNP7Gplf0qih_Gdzau
107 | sn://wg?eJxNzrsOgjAUANAG49eopfdaWtpNUIISXzGijFLiKxqNj_gYTPgnBx38MDcZXc90LEIIuC4F4FRJiu9HqQCJFARlFO06VlEwoblkTAMw7UqRaZ7VjeZYuFHMaJFmzAZ8NaKj9KN72oy38_Vo4Xu8AZ1e20m8rtmESYz9oTwe2qv1hH_S7bTvVwIIrq1uoLLbKsLQsWE0Pt1D1jnHOweWeBnMF7fdJydlQk5e82sV28vssK_9l5V21TPPfyaqNxw=
108 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNOxth4AW9kJ63tq16JMYaWxREFt22O6vGpFKKIo-TAyWhQjSRILRSARgRtKZlokTRiLajw2IZYyygBA-nVDI7KDe5RK0yX2_HKdUQTu_2OOXd68c6fhzQYqeOhs9lOxTtKZwO36qF3bfc8O7ltAvJNA8eT092H7jnMTFzTZbhc3bJ3zsqMnZzWt1R0L4vDvv53FppMeOb5D_bsN_w=
109 | sn://wg?eJxNzssOwUAUANCJxMK3YHrvNZ3pzE5LUxqviGKpbbxCiEc8dv0jK7HxA_7ITpe2Z3UKjDF0HI4ouNZcPz6lHBRxlBw4WTWqkARphAIwiGAcJVMj0lpiBOWeaEiMjFOwkF718Ki88B43ou18PVx4rqhju9uyp24n2QTTiHoDdTy0VuuxeMfbSc8r--hfmx1fp7dVSIFt4XB0ugfQPkc7G5d06c8Xt907Y0XGTm7jW8i3l9lhX_0vgyEbnln2A5hGN5Y=
110 | sn://wg?eJxNzskOwUAYAOBJxdNgOv9vls7ctDSlsUWUHrWNLYRYYjlI-k4OHDyYmx5dv9NnEULAcSgAp1pR8X6UClBIQVJG0a5jFSWThivGDAAzjpKZ4Vk9NRwLTzVLjUwyZgO-GuFReeE9aUbb-Xq08FzegE6vLWK3m26COML-UB0P7dV6wj_Jdtr3Kj7411bX19ltFWIgbBiNT_eAdc7RTsASL4P54rb75KRMyMltfq1ie5kd9rX_sjaOfub5DyjzNyI=
111 | sn://wg?eJxNzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNGVsbGC3gjOyltX_VKjDG0LI4ouG1zfHwqBSjiKDlwMhpUIwlSCwWgEUFbSiZaJI1YCyo8tiHWMkrAQHo1g6Nyg3vUCtPldrxyHdHEbr9jzp1evPPnIQ1G6njobLZT8Y7S2cCteuhd2z3PTm6bgHzTwPHkdPehew4zE9d0GS5Xt-ydszJjJ6f1LRXby-Kwr_-XQZMJzzz_AZIeN4Y=
112 | sn://wg?eJxVzjkOgkAUANAJxtOow_zvMAPTsUhQ4hYiSikQt2g0LnEpTLgThQ0Hs5PW9lVPI4SAaVIATi1JkZfvRi0SKQjKKOpdbKNgQnHJmAJgypQiVzzvZopj7ZnFMiXSnOmAHzu8SDd8pV58WO2itetwGwajvpE4w2wfJDGOp_Jy7m93c16lh8XYbfngP3pD38qf2xADQ4dodn0FbHCLjwZs8D5ZrZ_HqiBNQq6O99Xq7n15PnX-zlyZVlkUP4GYN3o=
113 | sn://wg?eJxNzrsKwjAUgOFQ8WnUNOeYJmk2Wy3V4g2x2tGmeENRvOBlEPpOIi4-mJsdHf9_-ixCCChFATh1FX09SkVLpCAoo2jXsYqCCc0lYxqAaSVFpnlWN5pj8Y3LjBZpxmzAdyM6Sj-6p814O1-PFr7HG9DptZ3E65pNmMTYH8rjob1aT_gn3U77fiWA4NrqBm52W0UYOjaMxqd7yDrneOfAEi-D-eK2--SkTMjJa36tAnuZHfa1P7HQyn3m-Q_Itza0
114 | sn://wg?eJxVzrsOgjAUANBG49eopfdS2tJNQIISXzGijAIRNRqNj_gYTPgnTVz8MDdZXc90KoQQUIoCcGoriubrUS1FIgVBGUXDxAYKJjSXjGkAppUUmeaZmWqOpac2S7VIMmYAvlvhUbrhPfGi7WI9zl2Ht6Db71ix00s3QRzhYCSPh85qPeWfZDsbuHUf_Gu759vZbRViYBkwnpzuAeueo50FS7wMF_lt9ylIjZCT430rZfcyP-ybf2dLK_tZFD-CYDd8
115 | sn://wg?eJxVzssOwUAUANAJ8TWY3ntNZ6az09KUxiuiWGobrxDiEY-FpP9kYdMPs9Ot7VmdEmMMteaIgjuaE7xf5UIUcZQcOFkNqpEEaYQCMIhgtJKpEWkjMYIKTxxIjIxTsJA-zfCsvPAZt6L9cjteea5oYrffseduL9kF84gGI3U-dTbbqcjj_WzgVX307-2e76SPTUiBbeF4cnkG0L1GBxvXdBsuV49DnrEKYxe39S0V3dvidKz_nYXRzjvLfn9SN3Q=
116 | sn://wg?eJxVzjkOgkAUANCJxtOow_-fYQamE5SgxC1GlFIgbtFoXOJSmHAmLWw8mJ20tq96JcYY2jZHFNxRnOD5KBeiiKPkwMkwqUYSpBYKQCOCtpXMtMjMVAsqPHUg1TLJwEB6N8Kj8sJ70oy28_Vo4bmigZ1e24rdbroJ4oj6Q3U8tFfrifgk22nfq_roX1td38luq5ACy8DR-HQPoHOOdhYu6TKYL267T84qjJ3c5rdUdC-zw77-dza17bzy_Ad9xjdw
117 | sn://wg?eJxVzskOwVAUgOEbiYVnwe05xx3au9PSlMYUUSy1jSmEGGLY9aGIjRfwRna6tfqTb_UXGGNo2xxRcCeP_fiUctHEUXHgZNWoQgqUERrAIIKxtUqNSGuJEZR74kBiVJyChfSqh0fthfe4EW3n6-HCc0Ud292WnLqdZBNMI-oN9PHQWq3H4h1vJz2v7KN_bXZ8J72tQgqkhcPR6R5A-xztJC7p0p8vbrt3xoqMndzGt5DvXmaHffXvWRqS8MyyH_eqN_4=
118 | sn://wg?eJxNzjsOgkAUQNEJiYVrUYf3nsMMTCcoQYmiMaKUAvEXjcZP_HRsyti4AXdkJ6XlvdUxGGNo2xxRcEfx16datiKOkgMns0l1kiC1UAAaEbStZK5F3sy0oPJnDmRapjmYSK9WeFJe-Ejb8W6xGS89V7SwN-haidvPtkESUzRSp2N3vZmKd7qbRV7NR__W6ftOfl-HFFgmjifnRwC9S7y3cEXX4WJ5378LVmHs7La_Rom9zo-Hxp_Y1mTBsyh-Okw3MA==
119 | sn://wg?eJxNzrsOgjAUANAG49eopfdaWtpNUIISXzGijALxFY3GR3wMJvyRg4OLH-ZmR9czHYsQAq5LAThVLlXPR8mARAqCMop2HasomNBcMqYBmHalyDXP65nmaDxTLNMizZkN-G5ER-lH97QZb-fr0cL3eAM6vbaTeN1sEyYx9ofyeGiv1hP-SbfTvl8JILi2uoHKb6sIQ8eG0fh0D1nnHO8cWOJlMF_cdp-ClAk5ec2vZbaX2WFf-y-bk3oVxQ8l_Tca
120 | sn://wg?eJxVzjkOgkAUgOGJiYVnUYf3nsMMTCcoQYlbjKilQNwiwbjEpeNGVsbGC3gjO2mt_uSr_hJjDC2LIwpuF7Efn0ohijhKDpyMBtVIgtRCAWhE0JaSiRZJI9aCCo9tiLWMEjCQXs3gqNzgHrXCdLkdr1xHNLHb75hzpxfv_HlIg5E6Hjqb7VS8o3Q2cKseetd2z7OT2yYg3zRwPDndfeiew8zENV2Gy9Ute-eszNjJaX1Lxe5lcdjX_55BkwnPPP8B9Jw39g==
121 | sn://wg?eJxNzrsKwjAUANBQ8WvUNPeaJk02Wy3V4gux2tGm-EJRfOBjEPpPIi5-mJsdXc90LEIIuC4F4FQpCq9HqQCJFARlFO06VlEwoblkTAMw7UqRaZ7VjeZYuFHMaJFmzAZ8N6Kj9KN72oy38_Vo4Xu8AZ1e20m8rtmESYz9oTwe2qv1hH_S7bTvVwIIrq1uoLLbKsLQsWE0Pt1D1jnHOweWeBnMF7fdJydlQk5e82sV28vssK_9l4V21TPPfyUyNxg=
122 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_P8MMTCcoQYlbjKilQNyi0bjEpeNOxthwAW9kJ63tq16JMYa2zREFdxyO5vNTKUQRR8mBk2FSjSRILRSARgRtK5lqkZqJFlR44kCiZZyCgfRuhCflhY-4Ge0Wm9HSc0UDO722NXO7yTaYRdQfqtOxvd5MRB7vpn2v6qN_a3V9J72vQwosA0fj8yOAziXaW7ii62CxvO_zjJUZO7vNb6noXufHQ_3vLDRZ8MqyH_PUN_Q=
123 | sn://wg?eJxVzj0PwUAYAOAL8Wtwvfd1vWtv09KUpj4iilHbtAghWkEHSX-SxGDxw2y6Wp_pqRFCwDAoAKemoMCfj3olEikIyihqHWyhYEJxyZgCYMqQIlY87kSKY-WRySIlwphpgO-ul0nbK8JecEh2s9S2eBeGo4G-svxo764CHE9ldh5sdwv-CQ_Lsd10wLn1fceM71sPXV2D2TwvXDa8BEcdNnidJOn9-ClJg5Dc6n1rVfe6Pp_af2dQhvkqyx99wjdw
124 | sn://wg?eJxVzsluglAUANAXki76LbWPey9vgLdjkKBEbWOkdVkgUIxG4xCHHR_Vpht_wD9yV7Zuz-pYjDF0XY4ouOdycn5uz51o4qg4cLId6pECZYQGMIhgXK1KI0qnMII6LzwojMpLsJH-_HSnw_SSR9mqWkzrMBA-DscDOQ9GxTKZZzR517vtoFl8iGu--pyELzHGp_4o9spzk1IibZzO9pcEhodsLfGbjm9VfV5fW_bE2D6I7lbXPX5tN68PZ2lIwm_b_gP0lDf2
125 | sn://wg?eJxNzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNGVsbGC3gjOyltX_VKjDG0LI4ouC25eHwqBSjiKDlwMhpUIwlSCwWgEUFbSiZaJI1YCyo8tiHWMkrAQHo1g6Nyg3vUCtPldrxyHdHEbr9jzp1evPPnIQ1G6njobLZT8Y7S2cCteuhd2z3PTm6bgHzTwPHkdPehew4zE9d0GS5Xt-ydszJjJ6f1LRXby-Kwr_-XQZMJzzz_AZISN4Y=
126 | sn://wg?eJxVzrsOgjAUANBG49eopfdSWtoNUIISXzGijgLBRzQY1PgYTPgnBxc_zE1W1zOdGiEEbJsCcKoUBfP1rFcikYKgjKJhYgsFE5pLxjQA07YUqeapmWiOlSeKJVrEKTMA3054kl74iDvRIdtN157LHegPe9bSHST7YBnhaCJPRW-7m_NPfFiMvKYP_q078FV634YYWAZMZ-dHwPqXKLdgg9dxtr7nn5I0CDm7nW-t6l5XxbH9d-baVq-y_AGBojd6
127 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNKFsbGC3gjO2ltX_VKjDG0LI4ouC05qsenUogijpIDJ6NBNZIgtVAAGhG0pWSiRdKItaDCYxtiLaMEDKRXMzgqN7hHrTBdbscr1xFN7PY75tzpxTt_HtJgpI6HzmY7Fe8onQ3cqofetd3z7OS2Ccg3DRxPTncfuucwM3FNl-FydcveOSszdnJa31LRvSwO-_rfmTSZ8MzzH_MAN_I=
128 | sn://wg?eJxNzssOwUAUANBJxddgOveazmvXlqY0lIhiqW28QohHPBaS_pOFjQ-z06XtWR2LEAJKUQBOtabwflZKkEhBUEbRbmIdBROGS8YMADNKitzwvJkZjqVnmmVGpDmzAd9udJJ-9EhbyW6xGS19j7vQ7XecmdfLtuEswXgoT8fOejPhn3Q3jf1aAMGt3Qt0fl9HGDo2jMbnR8i6l2TvwAqvg8Xyvv8UpErI2Wt9rXJ7nR8Pjf-yMkq_iuIHJrQ3HA==
129 | sn://wg?eJxNzjkOgkAUgOGJiYVnUYf3nsMMTCcoQYlbjKilQNwiwbjEpeNGVsbGC3gjOykt_7_6SowxtCyOKLgt-eNTKVoRR8mBk9GgGkmQWigAjQjaUjLRImnEWlDxYxtiLaMEDKRXMzgqN7hHrTBdbscr1xFN7PY75tzpxTt_HtJgpI6HzmY7Fe8onQ3cqofetd3z7OS2Ccg3DRxPTncfuucwM3FNl-FydcveOSszdnJa31KBvSwO-_qfGDSZ8MzzHzN2Nx4=
130 | sn://wg?eJxNzrsOgjAUgOFG49OopedYWugmIEGJtxhRR4GAGA0GNV4GE97IwcHFB3OT0fH_p69GCAHDoACcmoI-H_WqJVIQlFHUOthCwYTikjEFwJQhRax43IkUx-pHJouUCGOmAb67_lHa_j10gn2ynaW2xbswGPX1lTWMdt4qwPFUHot-tl3wT7hfju2mC-61N3TN-Jb56OkazOanu8cG5yDXYYOXSZLe8k9JGoScLOdbq7CXdXFo_4krkvkqyx_Crzak
131 | sn://wg?eJxVzjkOgkAUgOGJiYVnUYf3nsMMTCcoQYlbjKilQNwiwbjEpeNINsbGC3gjO2mt_uSr_hJjDC2LIwpuqyKPT6UQRRwlB05Gg2okQWqhADQiaEvJRIukEWtBhcc2xFpGCRhIr2ZwVG5wj1phutyOV64jmtjtd8y504t3_jykwUgdD53NdireUTobuFUPvWu759nJbROQbxo4npzuPnTPYWbimi7D5eqWvXNWZuzktL6lYveyOOzrf8-oyYRnnv8A7mQ35g==
132 | sn://wg?eJxVzrsOgjAUANBG49eopfdaWtpNUIISXzGijgLxFY1GMIiDCf_k4MKHucnqeqZTI4SAZVEATpWiIN-veiUSKQjKKBodbKFgQnPJmAZg2pIi1jzuRJpj5ZFikRZhzAzAT9dPpOM_w15w3h7nO8fmXRiOB-baHkUnbx3gZCaT2-BwXPIyPK8mTtMF99EfuSrODz56pgHzRfr02PAeXEzYYzbd7vJLWZAGIand-9aqbra5Xdt_Z64t9S6KH4SyN4I=
133 | sn://wg?eJxVzrsOgjAUANBG49eopfdSWugmIEGJojGijAIBNRqNj_gYTPgnY1z8MDdZXc90aoQQME0KwKklKeqvR70SiRQEZRQ1HVsomFBcMqYAmDKlyBTP9FRxrDy1WKpEkjEN8N0JjtIJ7okbbfP1pHBs3oH-sGfE9iDd-HGE4VgeD73VesY_yXYeOk0PvGt34FnZbRWgb2gwmZ7uPuufo50BS7yM8uK2-5SkQcjJdr-1qntZHPbtv7NQpvUsyx-CWDd8
134 | sn://wg?eJxVzrsOgjAUANAG49eopfdaWtpNUIISXzGijFLiKxqNj_gYTPgnBx38MDdZXc90LEIIuC4F4FQpCvz9KBUikYKgjKJdxyoKJjSXjGkApl0pMs2zutEcCzeKGS3SjNmAr0Z0lH50T5vxdr4eLXyPN6DTazuJ1zWbMImxP5THQ3u1nvBPup32_UoAwbXVDVR2W0UYOjaMxqd7yDrneOfAEi-D-eK2--SkTMjJa36tonuZHfa1v7PSrnrm-Q-GMDeG
135 | sn://wg?eJxVzrsOgjAUANBG49eopfdSWtpNQIISXzGijAIRNRqNj_gYTPgnBx38MDdZXc90KoQQsG0KwKlSFMz3o1qKRAqCMoqGiQ0UTGguGdMATNtSZJpnZqo5lp4qlmqRZMwAfLXCo3TDe-JF28V6nLsOb0G337Fip5dugjjCwUgeD53Veso_yXY2cOs--Nd2z1fZbRViYBkwnpzuAeueo50FS7wMF_lt9ylIjZCT430rZfcyP-ybf2elbfUsih-FbDeE
136 | sn://wg?eJxVzrsOgjAUANBG49eopfdaWugmIEGJrxhRR4GAGA0GNT4GE_7IwcHFD3OT1fVMp0YIAcOgAJyagiI8H_VKJFIQlFHUOthCwYTikjEFwJQhRax43IkUx8ojk0VKhDHTAN9d_yht_x46wT7ZzlLb4l0YjPr6yhpGO28V4Hgqj0U_2y74J9wvx3bTBffaG7pmfMt89HQNZvPT3WODc5DrsMHLJElv-ackDUJOlvOtVd3Luji0_85VynyV5Q97ejdq
137 | sn://wg?eJxNzrsKwjAUANBQ8WvUNPeaJk02Wy3V4gux2tGm-EJRfOBjEPpPIi5-mJsdXc90LEIIuC4F4FQpyl-PUgESKQjKKNp1rKJgQnPJmAZg2pUi0zyrG82xcKOY0SLNmA34bkRH6Uf3tBlv5-vRwvd4Azq9tpN4XbMJkxj7Q3k8tFfrCf-k22nfrwQQXFvdQGW3VYShY8NofLqHrHOOdw4s8TKYL267T07KhJy85tcqtpfZYV_7Lwvtqmee_wAnezce
138 | sn://wg?eJxVzrsKwjAUANBQ8WvUNPeaJk02Wy3V4gux2tGm-EJRfOBjEPpPIi5-mJtdXc90LEIIuC4F4FQpivB6lAqRSEFQRtGuYxUFE5pLxjQA064UmeZZ3WiOhRvFjBZpxmzAdyM6Sj-6p814O1-PFr7HG9DptZ3E65pNmMTYH8rjob1aT_gn3U77fiWA4NrqBiq7rSIMHRtG49M9ZJ1zvHNgiZfBfHHbfXJSJuTkNb9W0b3MDvva31loVz3z_AeCZDd8
139 | sn://wg?eJxNzssOwUAUANAJ8TWYzr2mM-3stDSlqUdEsdQ2LUKIVtCFpP8kYuPD7HRpe1anRggBw6AAnJqCitejXoFECoIyiloHWyiYUFwypgCYMqSIFY87keJYeWSySIkwZhrgu-tl0vaKsBcckt0stS3eheFooK8sP9q7qwDHU5mdB9vdgn_Cw3JsNx1wbn3fMeP71kNX12A2zwuXDS_BUYcNXidJej9-StIgJLd631q1va7Pp_Z_WSjDfJblDyasNxw=
140 | sn://wg?eJxNzrsOgjAUANBG49eopfdS2tKNhwQlvmJEHQUCajQaH_ExmPBPDi5-mJuMrmc6NUIIKEUBOLUVNd_PegUSKQjKKBomtlAwoblkTAMwraTINM_MVHOsPLVZqkWSMQPw7UQn6UWPxI93-WZSeC53oDfoWgu3n27DRYzDsTwdu-vNjH-S3XzoNQMIbp1-YGf3dYShZcBken6ErHeJ9xas8DrKi_v-U5IGIWfX_9aq7XV5PLT_y0or-1WWPydzNx4=
141 | sn://wg?eJxNzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNKFsbGC3gjOyltX_VKjDG0LI4ouG1z-fhUClDEUXLgZDSoRhKkFgpAI4K2lEy0SBqxFlR4bEOsZZSAgfRqBkflBveoFabL7XjlOqKJ3X7HnDu9eOfPQxqM1PHQ2Wyn4h2ls4Fb9dC7tnuendw2AfmmgePJ6e5D9xxmJq7pMlyubtk7Z2XGTk7rWyq2l8VhX_8vkyYTnnn-A5d9N5Q=
142 | sn://wg?eJxNzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNOxth4AW9kJ6Xtq16JMYaWxREFtxWnx6dSgCKOkgMno0E1kiC1UAAaEbSlZKJF0oi1oMJjG2ItowQMpFczOCo3uEetMF1uxyvXEU3s9jvm3OnFO38e0mCkjofOZjsV7yidDdyqh9613fPs5LYJyDcNHE9Odx-65zAzcU2X4XJ1y945KzN2clrfUrG9LA77-n9ZaDLhmec_lF03jA==
143 | sn://wg?eJxNzrsOgjAUANBG49eopfdSWugmIEGJojGijAIBNRqNj_gYTPgkEwcXP8xNRtcznRohBEyTAnBqSao_H_UKJFIQlFHUdGyhYEJxyZgCYMqUIlM801PFsfLUYqkSScY0wHcnOEonuCdutM3Xk8KxeQf6w54R24N048cRhmN5PPRW6xn_JNt56DQ98K7dgWdlt1WAvqHBZHq6-6x_jnYGLPEyyovb7lOSBiEn2_3Wqu1lcdi3_8ugTOtVlj8hZTcO
144 | sn://wg?eJxVzjkOgkAUANAJiYVnUYf_v8MMTCcoQYmiMaKUAnGLRuMSl45LGRsv4I3spLV91TMYY2jbHFFwR3K0n59qKYo4Sg6czCbVSYLUQgFoRNC2krkWeTPTgkrPHMi0THMwkV6t8KS88JG2491iM156rmhhb9C1ErefbYMkpmikTsfuejMV73Q3i7yaj_6t0_ed_L4OKbBMHE_OjwB6l3hv4Yquw8Xyvn8XrMLY2W1_jbJ7nR8Pjb-z1GTBsyh-9tY3_A==
145 | sn://wg?eJxVzrmugkAUANCJiYXfog73XoYZZjrBR1DiFiNqKRC3PKNxiUvHTxkt-IH3R6-T1vZUp8IYQ9fliIJrzdF-_9VKUcRRcuBk2dQgCdIIBWAQwbhKZkZkdmoElZ5qSI1MMrCQXq3opPzokbTj3XI7XvmeaGG333HmXi_9DecxDUbqdOxstlNRJLvZwK8HGNx-eoHO7puIQsfC8eT8CKF7ifcOruk6XK7u-yJnVcbOXvu_Unavi-Oh-XXWhhx45vkH96g3_g==
146 | sn://wg?eJxNzrsOgjAUANAG49eopfdaWtpNUIISXzGijALxFY3GR3wMJvyRg4OLH-ZmR9czHYsQAq5LAThViorno2RAIgVBGUW7jlUUTGguGdMATLtS5Jrn9UxzNJ4plmmR5swGfDeio_Sje9qMt_P1aOF7vAGdXttJvG62CZMY-0N5PLRX6wn_pNtp368EEFxb3UDlt1WEoWPDaHy6h6xzjncOLPEymC9uu09ByoScvObXMtvL7LCv_ZfNSb2K4gckezcW
147 | sn://wg?eJxNzskOwVAUANAXiYVvweu91xvat9PSlMYUUSy1jSmEGGLY9aOIjR_wR3a6tD2rU2CMoW1zRMEdh-PjU8pBE0fFgZNVowopUEZoAIMIxtYqNSKtJUZQ7okDiVFxChbSqx4etRfe40a0na-HC88VdWx3W3LqdpJNMI2oN9DHQ2u1Hot3vJ30vLKP_rXZ8Z30tgopkBYOR6d7AO1ztJO4pEt_vrjt3hkrMnZyG99Cvr3MDvvqf1kakvDMsh-V7TeQ
148 | sn://wg?eJxVzssOwUAUANAJ8TWY3ntNZ9rZaWlK4xVRLLVNixDiEY-FpH9kYWHjw-x0a3tWp8QYQ8viiILbiiM8H-VCFHGUHDgZDaqRBKmFAtCIoC0lEy2SRqwFFR7bEGsZJWAgvZvBUbnBPWqF23Q9zlxHNLHb75hzpxdv_HlIg5E6Hjqr9VR8ou1s4FY99K7tnmcnt1VAvmngeHK6-9A9hzsTl3QZptlt98lZhbGT0_qWiu5lcdjX_85Fyn7l-Q96ujdo
149 | sn://wg?eJxNzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNSRgsv4I3spLR91SsxxtCyOKLgtsXF61MpQBFHyYGT0aAaSZBaKACNCNpSMtEiacRaUOGxDbGWUQIG0rMZHJUb3KNWmC6345XriCZ2-x1z7vTinT8PaTBSx0Nns52Kd5TOBm7VQ-_a7nl2ctsE5JsGjienuw_dc5iZuKbLcLm6Ze-clRk7Oa1vqdheFod9_b9sazLhkec_mn83nA==
150 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_P8MMTCcoQYlbjKilQNyi0bjEpeNOxthwAW9kJ63tq16JMYa2zREFd2xO5vNTKUQRR8mBk2FSjSRILRSARgRtK5lqkZqJFlR44kCiZZyCgfRuhCflhY-4Ge0Wm9HSc0UDO722NXO7yTaYRdQfqtOxvd5MRB7vpn2v6qN_a3V9J72vQwosA0fj8yOAziXaW7ii62CxvO_zjJUZO7vNb6noXufHQ_3vLDRZ8MqyH_PQN_Q=
151 | sn://wg?eJxVzrkKwkAUQNEh4teok3nP2TKdiYZocEOMpjQJbiiKCy6FkH9SsPHD7ExrdeFU1yKEgNYUgFOniH49SoUopCApo2jXsYqSScMVYwaAGa1kZnhWTw3HwlOHpUYmGbMB343wqLzwnjSj7Xw9Wngub0Cn1xax2003QRxhf6iOh_ZqPeGfZDvtexUf_Gur6zvZbRViIGwYjU_3gHXO0U7AEi-D-eK2--SkTMjJbX6tYvcyO-xrf8_CaOeZ5z-FbjeE
152 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_P8MMTCcoQYlbjKilQNyi0bjEpeNMJsaGC3gjO2ltX_VKjDG0bY4ouCM52s9PpRBFHCUHToZJNZIgtVAAGhG0rWSqRWomWlDhiQOJlnEKBtK7EZ6UFz7iZrRbbEZLzxUN7PTa1sztJttgFlF_qE7H9nozEXm8m_a9qo_-rdX1nfS-DimwDByNz48AOpdob-GKroPF8r7PM1Zm7Ow2v6Wie50fD_W_s6nJgleW_QD0ijf2
153 | sn://wg?eJxVzs0OwUAUQOEJ8TSYzr2mM-3stDSlqZ-IYqltWoQQraALSd9JxMaD2enW6iTf6tQIIWAYFIBTswp_PeqVSKQgKKOodbCFggnFJWMKgClDiljxuBMpjpVHJouUCGOmAb67XiZtrwh7wSHZzVLb4l0Yjgb6yvKjvbsKcDyV2Xmw3S34Jzwsx3bTAefW9x0zvm89dHUNZvO8cNnwEhx12OB1kqT346ckDUJyq_etVbvX9fnU_nsWyjCfZfkDgyA3fg==
154 | sn://wg?eJxNzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNSauMFvJGdlLaveiXGGFoWRxTcllw9P5UCFHGUHDgZDaqRBKmFAtCIoC0lEy2SRqwFFR7bEGsZJWAgvZrBUbnBPWqF6XI7XrmOaGK33zHnTi_e-fOQBiN1PHQ226l4R-ls4FY99K7tnmcnt01AvmngeHK6-9A9h5mJa7oMl6tb9s5ZmbGT0_qWiu1lcdjX_8tKkwmPPP8BmbY3mg==
155 | sn://wg?eJxVzstugkAUANAJSRf9ltrh3ss8YHaAEpSobYy0LssQrUajEYyPHR_Vpht_wD9yV7Zuz-o4jDH0fY4oeKA5eT-351Y0cVQcOLkedUiBMkIDGEQwvlalEaVnjaDWbQDWqKIEF-kvzCodZ5eim2_mq8kijkSIg1FfzqKhXaeznMbvutr3l6sPcS02n-P4JcHk1BsmQXleZpRKFyfT-pLC4JBvJX7T8W2-OG-vDXtirI66d6ftHr_2u9eHszQk4bdp_gHzyDf0
156 | sn://wg?eJxVzssOwUAUANAJ8TWYzr2m89ppaUrjFVEstU2LEOIRj4WkvyQWNj7MTre2Z3VKhBBQigJwqjUF9XyUC5FIQVBG0WpgDQUThkvGDAAzSorE8KQRG46Fx5rFRkQJswDfzeAo3eAetcJtuh5nrsOb0O137LnTizf-PMTBSB4PndV6yj_RdjZwqx5413bP08ltFaBvWzCenO4-657DnQ1LvAzT7Lb75KRCyMlpfUtF97I47Ot_ZzRKv_L8B4PyN4A=
157 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_P8MMTCcoQYlbjKilQNyi0bjEpeNSRgsu4I3spLV91SsxxtC2OaLgjs3JfH8qhSjiKDlwMkyqkQSphQLQiKBtJVMtUjPRggpPHEi0jFMwkF6N8KS88BE3o91iM1p6rmhgp9e2Zm432QaziPpDdTq215uJyOPdtO9VffRvra7vpPd1SIFl4Gh8fgTQuUR7C1d0HSyW932esTJjZ7f5LRXd6_x4qP-dHU0WPLPsB_ekN_4=
158 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNOxth4AW9kJ63tq16JMYaWxREFty1O8PhUClHEUXLgZDSoRhKkFgpAI4K2lEy0SBqxFlR4bEOsZZSAgfRqBkflBveoFabL7XjlOqKJ3X7HnDu9eOfPQxqM1PHQ2Wyn4h2ls4Fb9dC7tnuendw2AfmmgePJ6e5D9xxmJq7pMlyubtk7Z2XGTk7rWyq6l8VhX_87C00mPPP8B_F-N-4=
159 | sn://wg?eJxNzksOwVAUANAXiYG14PXe633aN9PSlIYSUQy1jV8I8YnPrJsSExuwIzMdmp7RKTHG0LY5ouCOw-XrUylAE0fFgZPVoBopUEZoAIMIxtYqMyJrpEZQ4akDqVFJBhbSqxmetBc-kla8W2xGS88VTez2O3Lm9tJtMIspGurTsbPeTMQ72U0jr-qjf2v3fCe7r0MKpIWj8fkRQPcS7yWu6DpYLO_7d87KjJ3d1rdUbK_z46H-X7YNSXjm-Q-bSjee
160 | sn://wg?eJxVzssKgkAUgOGh6Gmqcc5pnNHZpSWWdCOyWqaiJUnRBbNF4DsFtenB2uW21Q_f6q8RQsAwKACnZhX5etQrkUhBUEZR62ALBROKS8YUAFOGFJHiUSdUHCsPTRYqEURMA3x3vbO0vXvQ87M4nSe2xbswHA_0tTUK9-7ax8lMnk-DXbrknyBbTeymA86tP3LMqNh56OoazBeXu8uGV_-gwxbzaZwUh09JGoRcrN63Vu3mm9Ox_fcslWE-y_IHhi43hg==
161 | sn://wg?eJxNzjkOgkAUANAJiYVnUYf_v8MMTCcoQYmiMaKUAnGLRuMSl45LGRsv4I3spLR91TMYY2jbHFFwx-H4_FRLUMRRcuBkNqlOEqQWCkAjgraVzLXIm5kWVHrmQKZlmoOJ9GqFJ-WFj7Qd7xab8dJzRQt7g66VuP1sGyQxRSN1OnbXm6l4p7tZ5NV89G-dvu_k93VIgWXieHJ-BNC7xHsLV3QdLpb3_btgFcbObvtrlNvr_Hho_JelJgueRfEDlrA3kg==
162 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNKFsbGC3gjO2ltX_VKjDG0LI4ouG1ztB6fSiGKOEoOnIwG1UiC1EIBaETQlpKJFkkj1oIKj22ItYwSMJBezeCo3OAetcJ0uR2vXEc0sdvvmHOnF-_8eUiDkToeOpvtVLyjdDZwqx5613bPs5PbJiDfNHA8Od196J7DzMQ1XYbL1S1756zM2MlpfUtF97I47Ot_Z9JkwjPPf_YqN_o=
163 | sn://wg?eJxVzrsOgjAUANBG49eopfdS2tINUIISXzGijgLBRzQY1PgYTPgnBxc_zE1W1zOdGiEElKIAnNqKovl61iuRSEFQRtEwsYWCCc0lYxqAaSVFqnlqJppj5YnNEi3ilBmAbyc8SS98xJ3okO2ma8_lDvSHPWvpDpJ9sIxwNJGnorfdzfknPixGXtMH_9Yd-HZ634YYWAZMZ-dHwPqXKLdgg9dxtr7nn5I0CDm7nW-t6l5XxbH9d-Za2a-y_AGBnjd6
164 | sn://wg?eJxVzskOwVAUgOEbiYVnwe05xx3au9PSlMYUUSy1jSmEGGLY9aGIjRfwRna6tfqTb_UXGGNo2xxRcCePfnxKuWjiqDhwsmpUIQXKCA1gEMHYWqVGpLXECMo9cSAxKk7BQnrVw6P2wnvciLbz9XDhuaKO7W5LTt1OsgmmEfUG-nhordZj8Y63k55X9tG_Nju-k95WIQXSwuHodA-gfY52Epd06c8Xt907Y0XGTm7jW8h3L7PDvvr3LA1JeGbZD_bkN_w=
165 | sn://wg?eJxNzjkOgkAUgOGJiYVnUYf3HsMMTCcoQYlbjKilQNyi0bjEpeNMJsaGC3gjOykt_7_6SowxtG2OKLhj8-enUrQijpIDJ8OkGkmQWigAjQjaVjLVIjUTLaj4iQOJlnEKBtK7EZ6UFz7iZrRbbEZLzxUN7PTa1sztJttgFlF_qE7H9nozEXm8m_a9qo_-rdX1nfS-DimwDByNz48AOpdob-GKroPF8r7PM1Zm7Ow2v6UCe50fD_U_sanJgleW_QA3SDco
166 | sn://wg?eJxNzrsOgjAUgOFG49OopedY2tJNUIISRGNEHQXiLRqNlyAMJryTg4sP5iaj4_9PX40QAkpRAE4tSd_PetUSKQjKKBodbKFgQnPJmAZgWkmRap52Es2x-onFEi3ilBmA765_lY5fxL3ouN5PN47NuzAcDcylHSQHbxlhOJHXy2C3n_NPfFyETtMF99EPXCvNdz56pgHT2a3w2PAenUzYYjZeb_LTpyQNQm5271ursNnqcm7_iZVW1qssf8lzNrY=
167 | sn://wg?eJxVjs0OwUAYADfE06Dd77PdbfempSlN_UQUR23TIoRoBT1I-kri4OLB3OzVaSZzmhohBExTA2CapcCfj7oqApVqVEO9gy3klEsmKJUAVJqCJ5IlnVgyVD22aCx5lFAd8N31c-H4ZdQLD-luljk268JwNDBWdhDvvVWI46nIz4PtbsE-0WE5dpouuLd-4FrJfeujZ-gwmxelR4eX8GjABq-TNLsfPxVpEFLYvW9N7V7X51P77xmlab2q6geBoDd6
168 | sn://wg?eJxNzjkOgkAUANAJiYVnUYf_v8MMTCcoQYmiMaKUAnGLRuMSl45LGRsv4I3spLR91TMYY2jbHFFwx-Hi-amWoIij5MDJbFKdJEgtFIBGBG0rmWuRNzMtqPTMgUzLNAcT6dUKT8oLH2k73i0246Xnihb2Bl0rcfvZNkhiikbqdOyuN1PxTnezyKv56N86fd_J7-uQAsvE8eT8CKB3ifcWrug6XCzv-3fBKoyd3fbXKLfX-fHQ-C9LTRY8i-IHmP83mA==
169 | sn://wg?eJxVzssOwUAUgOGJxMKzYHrOMZ3pzE5LUxq3iGKpbdxCiEtcdn0pYeEFvJGdbu3-fKu_wBhDx-GIgmvNUb4-pVwU5cmBk1WjCkmQRigAgwjGUTI1Iq0lRlDuiYbEyDgFC-lZD4_KC-9xI9rO18OF54o6trste-p2kk0wjag3UMdDa7Uei3e8nfS8so_-tdnxdXpbhRTYFg5Hp3sA7XO0s3FJl_58cdu9M1Zk7OQ2voV89zI77Kt_z9qQDY8s-wH5-jgE
170 | sn://wg?eJxNzssOwUAUANBJxddgOveazmvXlqY0lIhiqW28QohHPBaS_pOFjQ-z06XtWR2LEAJKUQBOtabO-1kpQSIFQRlFu4l1FEwYLhkzAMwoKXLD82ZmOJaeaZYZkebMBny70Un60SNtJbvFZrT0Pe5Ct99xZl4v24azBOOhPB07682Ef9LdNPZrAQS3di_Q-X0dYejYMBqfHyHrXpK9Ayu8DhbL-_5TkCohZ6_1tcrtdX48NP7Lyij9KoofKcA3JA==
171 | sn://wg?eJxNzskOwVAUANAXiYVvweu91xvat9PSlMYUUSy1jSmEGGLY9ZNsxMYP-CM7Xdqe1SkwxtC2OaLgjs3l41PKQRNHxYGTVaMKKVBGaACDCMbWKjUirSVGUO6JA4lRcQoW0qseHrUX3uNGtJ2vhwvPFXVsd1ty6naSTTCNqDfQx0NrtR6Ld7yd9Lyyj_612fGd9LYKKZAWDkenewDtc7STuKRLf7647d4ZKzJ2chvfQr69zA776n8ZDUl4ZtkPlSw3jg==
172 | sn://wg?eJxNzjsOgkAUQNEJiYVrUYf3nsMMTCcoQYmiMaKUAvEXjcZP_HRsyti4AXdkJ6XlvdUxGGNo2xxRcMfmz0-1bEUcJQdOZpPqJEFqoQA0ImhbyVyLvJlpQeXPHMi0THMwkV6t8KS88JG2491iM156rmhhb9C1ErefbYMkpmikTsfuejMV73Q3i7yaj_6t0_ed_L4OKbBMHE_OjwB6l3hv4Yquw8Xyvn8XrMLY2W1_jRJ7nR8PjT-x1GTBsyh-OY43Lg==
173 | sn://wg?eJxNzrsOgjAUANBG49eopfdaWugmIEGJrxhRR4GAGA0GNT4GE_7IwcHFD3OT0fVMp0YIAcOgAJyaksLzUa9AIgVBGUWtgy0UTCguGVMATBlSxIrHnUhxrDwyWaREGDMN8N31j9L276ET7JPtLLUt3oXBqK-vrGG081YBjqfyWPSz7YJ_wv1ybDddcK-9oWvGt8xHT9dgNj_dPTY4B7kOG7xMkvSWf0rSIORkOd9atb2si0P7v1ydzFdZ_gAfHjcI
174 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNOxth4AW9kJ63tq16JMYaWxREFtxUn8fhUClHEUXLgZDSoRhKkFgpAI4K2lEy0SBqxFlR4bEOsZZSAgfRqBkflBveoFabL7XjlOqKJ3X7HnDu9eOfPQxqM1PHQ2Wyn4h2ls4Fb9dC7tnuendw2AfmmgePJ6e5D9xxmJq7pMlyubtk7Z2XGTk7rWyq6l8VhX_87C00mPPP8B_PKN_Q=
175 | sn://wg?eJxVzrsOgjAUANAG49eopfdaWtpNUIISXzGijFLiKxqNj_gYTPgl4-Dih7nJ6nqmYxFCwHUpAKdKUFDPR6kQiRQEZRTtOlZRMKG5ZEwDMO1KkWme1Y3mWLhRzGiRZswGfDeio_Sje9qMt_P1aOF7vAGdXttJvK7ZhEmM_aE8Htqr9YR_0u2071cCCK6tbqCy2yrC0LFhND7dQ9Y5xzsHlngZzBe33ScnZUJOXvNrFd3L7LCv_Z1Ru-qV5z-CWDd8
176 | sn://wg?eJxNzrsOgjAUANBG49eopfdSWugmIEGJojGijAIBNRqNj_gYTPgnTVz8MDcZXc90aoQQME0KwKklqP561CuQSEFQRlHTsYWCCcUlYwqAKVOKTPFMTxXHylOLpUokGdMA353gKJ3gnrjRNl9PCsfmHegPe0ZsD9KNH0cYjuXx0FutZ_yTbOeh0_TAu3YHnpXdVgH6hgaT6enus_452hmwxMsoL267T0kahJxs91urtpfFYd_-LxvKtJ5l-QMjojcU
177 | sn://wg?eJxNzssOwUAUANAJ8TWYzr2m89ppaUrjFVEstU2LEOIRj4WknySxsPFhdrq0PatTIoSAUhSAU62pej7KBUikICijaDWwhoIJwyVjBoAZJUVieNKIDcfCY81iI6KEWYDvZnCUbnCPWuE2XY8z1-FN6PY79tzpxRt_HuJgJI-Hzmo95Z9oOxu4VQ-8a7vn6eS2CtC3LRhPTnefdc_hzoYlXoZpdtt9clIh5OS0vqVie1kc9vX_MhilX3n-AybCNxw=
178 | sn://wg?eJxNzrsOgjAUANAG49eopfdaWtpNUIISXzGijFLiKxqNj_gYTPgnBx38MDcZXc90LEIIuC4F4FRJKt6PUgESKQjKKNp1rKJgQnPJmAZg2pUi0zyrG82xcKOY0SLNmA34akRH6Uf3tBlv5-vRwvd4Azq9tpN4XbMJkxj7Q3k8tFfrCf-k22nfrwQQXFvdQGW3VYShY8NofLqHrHOOdw4s8TKYL267T07KhJy85tcqtpfZYV_7Lyvtqmee_wAptjck
179 | sn://wg?eJxNzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNGVsbGC3gjOyltX_VKjDG0LI4ouK04Pj6VAhRxlBw4GQ2qkQSphQLQiKAtJRMtkkasBRUe2xBrGSVgIL2awVG5wT1qhelyO165jmhit98x504v3vnzkAYjdTx0NtupeEfpbOBWPfSu7Z5nJ7dNQL5p4HhyuvvQPYeZiWu6DJerW_bOWZmxk9P6lortZXHY1__LoMmEZ57_AJCMN4I=
180 | sn://wg?eJxNzskOwVAUANAXiYVvweu91xvat9PSlMYUUSy1jSmEGGLY9aeEhR_wR3a6tD2rU2CMoW1zRMEdzeXrU8pBE0fFgZNVowopUEZoAIMIxtYqNSKtJUZQ7okDiVFxChbSsx4etRfe40a0na-HC88VdWx3W3LqdpJNMI2oN9DHQ2u1Hot3vJ30vLKP_rXZ8Z30tgopkBYOR6d7AO1ztJO4pEt_vrjt3hkrMnZyG99Cvr3MDvvqf9kxJOGRZT-aezec
181 | sn://wg?eJxNzjkOgkAUANAJiYVnUYf_v8MMTCcoQYmiMaKUAnGLRuMSl45LGRsv4I3spLR91TMYY2jbHFFwx-H4-lRLUMRRcuBkNqlOEqQWCkAjgraVzLXIm5kWVHrmQKZlmoOJ9GqFJ-WFj7Qd7xab8dJzRQt7g66VuP1sGyQxRSN1OnbXm6l4p7tZ5NV89G-dvu_k93VIgWXieHJ-BNC7xHsLV3QdLpb3_btgFcbObvtrlNvr_Hho_JdtTRY8i-IHmDY3lg==
182 | sn://wg?eJxVzskOwVAUANAXiYVvweu91xvat9PSlMYUUSy1jSmEGGLY9aOIjR_wR3a6tT2rU2CMoW1zRMEdxYken1IumjgqDpysGlVIgTJCAxhEMLZWqRFpLTGCck8cSIyKU7CQXvXwqL3wHjei7Xw9XHiuqGO725JTt5NsgmlEvYE-Hlqr9Vi84-2k55V99K_Nju-kt1VIgbRwODrdA2ifo53EJV3688Vt985YkbGT2_gW8u5ldthX_87SkIRnlv0A8jY38A==
183 | sn://wg?eJxVzrsOgjAUANBG49eopfdSWugmIEGJojGijAIBNRqNj_gYTPgl4-Dih7nJ6nqmUyOEgGlSAE4tQUF_PuqVSKQgKKOo6dhCwYTikjEFwJQpRaZ4pqeKY-WpxVIlkoxpgO9OcJROcE_caJuvJ4Vj8w70hz0jtgfpxo8jDMfyeOit1jP-Sbbz0Gl64F27A8_KbqsAfUODyfR091n_HO0MWOJllBe33ackDUJOtvutVd3L4rBv_51RmdarLH99wDdw
184 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_P8MMTCcoQYlbjKilQNyi0bjEpeNMJsaGC3gjO2ltX_VKjDG0bY4ouCM5quenUogijpIDJ8OkGkmQWigAjQjaVjLVIjUTLajwxIFEyzgFA-ndCE_KCx9xM9otNqOl54oGdnpta-Z2k20wi6g_VKdje72ZiDzeTfte1Uf_1ur6TnpfhxRYBo7G50cAnUu0t3BF18Fied_nGSszdnab31LRvc6Ph_rf2dRkwSvLfvPEN_Q=
185 | sn://wg?eJxNzj0PwUAYAOAL8Wtwvfd1vWtv09KUpj4iilHbtAghWkEHSf-SGCx-mE1H6zM9NUIIGAYF4NSUVD4f9QokUhCUUdQ62ELBhOKSMQXAlCFFrHjciRTHyiOTRUqEMdMA310vk7ZXhL3gkOxmqW3xLgxHA31l-dHeXQU4nsrsPNjuFvwTHpZju-mAc-v7jhnftx66ugazeV64bHgJjjps8DpJ0vvxU5IGIbnV-9aq7XV9PrX_y6gM81WWPyUyNxg=
186 | sn://wg?eJxNzssOwUAUANAJ8TWYzr2mM-3stDSlqUdEsdQ2LUKIVtCFpP8kYuPD7HRpe1anRggBw6AAnJqCytejXoFECoIyiloHWyiYUFwypgCYMqSIFY87keJYeWSySIkwZhrgu-tl0vaKsBcckt0stS3eheFooK8sP9q7qwDHU5mdB9vdgn_Cw3JsNx1wbn3fMeP71kNX12A2zwuXDS_BUYcNXidJej9-StIgJLd631q1va7Pp_Z_WSjDfJblDydvNx4=
187 | sn://wg?eJxNzrsOgjAUANBG49eopfdaWugmIEGJrxhRR4GAGA0GNT4GE_7IwcHFD3OT0fVMp0YIAcOgAJyagvLno16BRAqCMopaB1somFBcMqYAmDKkiBWPO5HiWHlkskiJMGYa4LvrH6Xt30Mn2CfbWWpbvAuDUV9fWcNo560CHE_lsehn2wX_hPvl2G664F57Q9eMb5mPnq7BbH66e2xwDnIdNniZJOkt_5SkQcjJcr61antZF4f2f7k6ma-y_AEgoDcM
188 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNINsbGC3gjO2ltX_VKjDG0LI4ouK04isenUogijpIDJ6NBNZIgtVAAGhG0pWSiRdKItaDCYxtiLaMEDKRXMzgqN7hHrTBdbscr1xFN7PY75tzpxTt_HtJgpI6HzmY7Fe8onQ3cqofetd3z7OS2Ccg3DRxPTncfuucwM3FNl-FydcveOSszdnJa31LRvSwO-_rfGTWZ8MzzH_C2N-w=
189 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_P8MMTCcoQYlbjKilQNyi0bjEpeNOxthwAW9kJ63tq16JMYa2zREFdxQn8_mpFKKIo-TAyTCpRhKkFgpAI4K2lUy1SM1ECyo8cSDRMk7BQHo3wpPywkfcjHaLzWjpuaKBnV7bmrndZBvMIuoP1enYXm8mIo93075X9dG_tbq-k97XIQWWgaPx-RFA5xLtLVzRdbBY3vd5xsqMnd3mt1R0r_Pjof53FposeGXZD_MEN_I=
190 | sn://wg?eJxVzrsOgjAUANBG49eopfdaWugmKEGJrxhRR4GAEonGRxAHE_7IwcHFD3OT1fVMp0YIAcOgAJyakoJ8PuqVSKQgKKOodbCFggnFJWMKgClDikjxqBMqjpWHJguVCCKmAb673lna3j3o-VmczhPb4l0Yjgf62hqFe3ft42Qmz6fBLl3yT5CtJnbTAefWHzlmVOw8dHUN5ovL3WXDq3_QYYv5NE6Kw6ckDUIuVu9bq7r55nRs_52rlPkqyx-AFjd2
191 | sn://wg?eJxNzrsOgjAUANBG49eopfdS2tJNQIISXzGijAIRNRqNj_gYTPgmHVz8MDcZXc90KoQQUIoCcGoLqp6PagkSKQjKKBomNlAwoblkTAMwraTINM_MVHMsPbVZqkWSMQPw3QqP0g3viRdtF-tx7jq8Bd1-x4qdXroJ4ggHI3k8dFbrKf8k29nArfvgX9s9385uqxADy4Dx5HQPWPcc7SxY4mW4yG-7T0FqhJwc71spt5f5Yd_8L5ta2a-i-AEl7zca
192 | sn://wg?eJxVzjkOgkAUgOGJiYVnUYf3nsMMTCcoQYlbjKilQNwiwbjEpeNSauMFvJGdtFZ_8lV_iTGGlsURBbeLqOenUogijpIDJ6NBNZIgtVAAGhG0pWSiRdKItaDCYxtiLaMEDKRXMzgqN7hHrTBdbscr1xFN7PY75tzpxTt_HtJgpI6HzmY7Fe8onQ3cqofetd3z7OS2Ccg3DRxPTncfuucwM3FNl-FydcveOSszdnJa31Kxe1kc9vW_Z6XJhEee_wD4bDgA
193 | sn://wg?eJxVzssKgkAUgOGh6Gmqcc5pnNHZpSaWdCOyWqaiGYVhRZdF4DsVtOnB2uW21Q_f6q8RQsAwKACnZhX5etQrkUhBUEZR62ALBROKS8YUAFOGFLHicSdSHCuPTBYpEcZMA3x3_aO0_XvoBPtkO0tti3dhMOrrK2sY7bxVgOOpPBb9bLvgn3C_HNtNF9xrb-ia8S3z0dM1mM1Pd48NzkGuwwYvkyS95Z-SNAg5Wc63Vu1e1sWh_fesK8N8luUPhKo3gg==
194 | sn://wg?eJxVzskOwVAUANAXiYVvweu91xvat9PSlMYUUSy1jSmEGGLY9Z9EbPyAP7LTre1ZnQJjDG2bIwru2Jzk41PKRRNHxYGTVaMKKVBGaACDCMbWKjUirSVGUO6JA4lRcQoW0qseHrUX3uNGtJ2vhwvPFXVsd1ty6naSTTCNqDfQx0NrtR6Ld7yd9Lyyj_612fGd9LYKKZAWDkenewDtc7STuKRLf7647d4ZKzJ2chvfQt69zA776t9ZGJLwzLIf9Vw3-A==
195 | sn://wg?eJxNzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNSauMFvJGdlLaveiXGGFoWRxTctrn1_FQKUMRRcuBkNKhGEqQWCkAjgraUTLRIGrEWVHhsQ6xllICB9GoGR-UG96gVpsvteOU6oondfsecO714589DGozU8dDZbKfiHaWzgVv10Lu2e56d3DYB-aaB48np7kP3HGYmrukyXK5u2TtnZcZOTutbKraXxWFf_y8rTSY88vwHnNY3og==
196 | sn://wg?eJxNzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNGVsbGC3gjOyltX_VKjDG0LI4ouG1z-fhUClDEUXLgZDSoRhKkFgpAI4K2lEy0SBqxFlR4bEOsZZSAgfRqBkflBveoFabL7XjlOqKJ3X7HnDu9eOfPQxqM1PHQ2Wyn4h2ls4Fb9dC7tnuendw2AfmmgePJ6e5D9xxmJq7pMlyubtk7Z2XGTk7rWyq2l8VhX_8vgyYTnnn-A5X3N5A=
197 | sn://wg?eJxVzjkOgkAUgOGJiYVnUYf3nsMMTCcoQYlbjKilQNwiwbjEpeNOxth4AW9kJ63Vn3zVX2KMoWVxRMHtIuLxqRSiiKPkwMloUI0kSC0UgEYEbSmZaJE0Yi2o8NiGWMsoAQPp1QyOyg3uUStMl9vxynVEE7v9jjl3evHOn4c0GKnjobPZTsU7SmcDt-qhd233PDu5bQLyTQPHk9Pdh-45zExc02W4XN2yd87KjJ2c1rdU7F4Wh33971loMuGZ5z_zzjf0
198 | sn://wg?eJxNzskOwVAUANAXiYVvweu91xvat9PSlMYUUSy1jSmEGGLY9aOIjR_wR3a6tD2rU2CMoW1zRMEdzenxKeWgiaPiwMmqUYUUKCM0gEEEY2uVGpHWEiMo98SBxKg4BQvpVQ-P2gvvcSPaztfDheeKOra7LTl1O8kmmEbUG-jjobVaj8U73k56XtlH_9rs-E56W4UUSAuHo9M9gPY52klc0qU_X9x274wVGTu5jW8h315mh331vywNSXhm2Q-VIDeO
199 | sn://wg?eJxVzjkOgkAUANCJiYVnUYf_v8MMTCcoQYlbjKilQNwiwbjEpeNOxth4AW9kJ63tq16JMYaWxREFtyVH8fhUClHEUXLgZDSoRhKkFgpAI4K2lEy0SBqxFlR4bEOsZZSAgfRqBkflBveoFabL7XjlOqKJ3X7HnDu9eOfPQxqM1PHQ2Wyn4h2ls4Fb9dC7tnuendw2AfmmgePJ6e5D9xxmJq7pMlyubtk7Z2XGTk7rWyq6l8VhX_87C00mPPP8B_I2N_A=
200 | sn://wg?eJxVzrkOgkAUQNEJxq9Rh3nPYQamY5GgxC1ElFIgbtFoXOJSmPBPFDZ8mJ20Vjc51dUIIWCaFIBTqw4v341aJFIQlFHUu9hGwYTikjEFwJQpRa543s0Ux9ozi2VKpDnTAT92eJFu-Eq9-LDaRWvX4TYMRn0jcYbZPkhiHE_l5dzf7ua8Sg-LsdvywX_0hr6VP7chBoYO0ez6CtjgFh8N2OB9slo_j1VBmoRcHe-r1bv35fnU-XvmyrTKovgBgZw3eg==
--------------------------------------------------------------------------------