From 537f8a63110945c20592747f36ff90e732dbf06d Mon Sep 17 00:00:00 2001 From: wangyu- Date: Tue, 24 Oct 2017 07:37:42 -0700 Subject: [PATCH 01/72] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index e21826a..97f1a00 100755 --- a/README.md +++ b/README.md @@ -191,6 +191,10 @@ Then start the server with ./udp2raw_amd64 --conf-file server.conf ``` +### `--fifo` +Use a fifo(named pipe) for sending commands to the running program. For example `--fifo fifo.file`. + +At client side,you can use `echo reconnect >fifo.file` to force client to reconnect.Currently no command has been implemented for server. # Peformance Test #### Test method: From deeb7395a44e9cbbdf05bea073815392a64137a9 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Tue, 24 Oct 2017 07:44:09 -0700 Subject: [PATCH 02/72] Update README.zh-cn.md --- doc/README.zh-cn.md | 268 ++++++++++++++++++++++---------------------- 1 file changed, 137 insertions(+), 131 deletions(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index 04d53fd..8d4ffdf 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -1,104 +1,100 @@ -Udp2raw-tunnel -![image2](/images/image2.PNG) -udp2raw tunnel,通过raw socket给UDP包加上TCP或ICMP header,进而绕过UDP屏蔽或QoS,或在UDP不稳定的环境下提升稳定性。可以有效防止在使用kcptun或者finalspeed的情况下udp端口被运营商限速。 +# Udp2raw-tunnel +![image0](images/image0.PNG) -支持心跳保活、自动重连,重连后会恢复上次连接,在底层掉线的情况下可以保持上层不掉线。同时有加密、防重放攻击、信道复用的功能。 +A Tunnel which turns UDP Traffic into Encrypted FakeTCP/UDP/ICMP Traffic by using Raw Socket, helps you Bypass UDP FireWalls(or Unstable UDP Environment). It can defend Replay-Attack and supports Multiplexing. It also acts as a Connection Stabilizer. -**欢迎任何形式的转载** +It can tunnel any traffic when used together with a UDP-based VPN(such as OpenVPN).Check [this link](https://github.com/wangyu-/udp2raw-tunnel#tunneling-any-traffic-via-raw-traffic-by-using-udp2raw-openvpn) for more info. -[English](/README.md) +[简体中文](/doc/README.zh-cn.md) -[udp2raw+kcptun step_by_step教程](kcptun_step_by_step.md) +# Support Platforms +Linux host (including desktop Linux,Android phone/tablet,OpenWRT router,or Raspberry PI) with root access. -[udp2raw+finalspeed step_by_step教程](finalspeed_step_by_step.md) +For Winodws/MacOS,the 4.4mb virtual image with udp2raw pre-installed has been released,you can load it with Vmware/VirtualBox.The virtual image has been set to auto obtain ip,udp2raw can be run imidiately after boot finished(make sure network mode of virtual machine has been set to bridged)(only udp2raw has to be run under virtual machine,all other programs runs under Windows/MacOS as usual). -如果你需要加速跨国网游、网页浏览,解决方案在另一个repo: -https://github.com/wangyu-/UDPspeeder -# 支持的平台 -Linux主机,有root权限。可以是PC、android手机/平板、openwrt路由器、树莓派。主机上最好安装了iptables命令(apt/yum很容易安装)。 +# Features +### Send/Receive UDP Packets with ICMP/FakeTCP/UDP headers +ICMP/FakeTCP headers help you bypass UDP blocking, UDP QOS or improper UDP NAT behavior on some ISPs. In ICMP header mode,udp2raw works like an ICMP tunnel. -在windows和mac上预装了udp2raw的虚拟机镜像已发布,可以用Vmware或VirtualBox加载,容量4.4mb,已经配置好了自动获取网卡ip,开机即用,稳定,性能很好。 -(udp2raw跑在虚拟机里,其他应用照常跑在windows上)(确保虚拟机网卡工作在桥接模式)(Vmware player 75mb,VirtualBox 118mb,很容易安装)。 +UDP headers are also supported. In UDP header mode, it behaves just like a normal UDP tunnel, and you can just make use of the other features (such as encrytion, anti-replay, or connection stalization). -# 功能特性 -### 把udp流量伪装成tcp /icmp -用raw socket给udp包加上tcp/icmp包头,可以突破udp流量限制或Udp QOS。或者在udp nat有问题的环境下,提升稳定性。  另外也支持用raw 发udp包,这样流量不会被伪装,只会被加密。 +### Simulated TCP with Real-time/Out-of-Order Delivery +In FakeTCP header mode,udp2raw simulates 3-way handshake while establishing a connection,simulates seq and ack_seq while data transferring. It also simulates following TCP options: `MSS`, `sackOk`, `TS`, `TS_ack`, `wscale`.Firewalls will regard FakeTCP as a TCP connection, but its essentially UDP: it supports real-time/out-of-order delivery(just as normal UDP does), no congrestion control or re-transmission. So there wont be any TCP over TCP problem when using OpenVPN. -### 模拟TCP3次握手 -模拟TCP3次握手,模拟seq ack过程。另外还模拟了一些tcp option:MSS,sackOk,TS,TS_ack,wscale,用来使流量看起来更像是由普通的linux tcp协议栈发送的。 +### Encrpytion, Anti-Replay +* Encrypt your traffic with AES-128-CBC. +* Protect data integrity by MD5 or CRC32. +* Defense replay attack with an anti-replay window, smiliar to IPSec and OpenVPN. -### 心跳保活、自动重连,连接快速恢复,单向链路失效检测 -心跳保活、自动重连,udp2raw重连可以恢复上次的连接,重连后上层连接继续有效,底层掉线上层不掉线。有效解决上层连接断开的问题。 (功能借鉴自[kcptun-raw](https://github.com/Chion82/kcptun-raw))(**就算你拔掉网线重插,或者重新拨号获得新ip,上层应用也不会断线**) +### Failure Dectection & Stablization (Connection Recovery) +Conection failures are detected by heartbeats. If timed-out, client will automatically change port number and reconnect. If reconnection is successful, the previous connection will be recovered, and all existing UDP conversations will stay vaild. -Client能用单倍的超时时间检测到单向链路的失效,不管是上行还是下行,只要有一个方向失效就能被client检测到。重连只需要client发起,就可以立即被server处理,不需要等到server端的连接超时后。 +For example, if you use udp2raw + OpenVPN, OpenVPN won't lose connection after any reconnect, **even if network cable is re-plugged or WiFi access point is changed**. -对于有大量client的情况,对于不同client,server发送的心跳是错开时间发送的,不会因为短时间发送大量的心跳而造成拥塞和延迟抖动。 +### Other Features +* **Multiplexing** One client can handle multiple UDP connections, all of which share the same raw connection. -### 加密 防重放攻击 -用aes128cbc加密,md5/crc32做数据完整校验。用类似ipsec/openvpn的 replay window机制来防止重放攻击。 +* **Multiple Clients** One server can have multiple clients. -设计目标是,即使攻击者可以监听到tunnel的所有包,可以选择性丢弃tunnel的任意包,可以重放任意包;攻击者也没办法获得tunnel承载的任何数据,也没办法向tunnel的数据流中通过包构造/包重放插入任何数据。 +* **NAT Support** All of the 3 modes work in NAT environments. -### 其他特性 -信道复用,client的udp端支持多个连接。 +* **OpenVZ Support** Tested on BandwagonHost VPS. -server支持多个client,也能正确处理多个连接的重连和连接恢复。 +* **Easy to Build** No dependencies.To cross-compile udp2raw,all you need to do is just to download a toolchain,modify makefile to point at the toolchain,run `make cross` then everything is done.(Note:Pre-compiled binaries for Desktop,RaspberryPi,Android,some Openwrt Routers are already included in [Releases](https://github.com/wangyu-/udp2raw-tunnel/releases)) -NAT 穿透 ,tcp icmp udp模式都支持nat穿透。 +### Keywords +`Bypass UDP QoS` `Bypass UDP Blocking` `Bypass OpenVPN TCP over TCP problem` `OpenVPN over ICMP` `UDP to ICMP tunnel` `UDP to TCP tunnel` `UDP over ICMP` `UDP over TCP` -支持Openvz,配合finalspeed使用,可以在openvz上用tcp模式的finalspeed +# Frequently Asked Questions +### Q: What is the advantage of using udp2raw FakeTCP mode,why not use a TCP-based VPN(such as OpenVPN TCP mode)? +Answer: **TCP doesnt allow real-time/out-of-order delivery**. **If you use OpenVPN TCP mode to turn UDP traffic into TCP,there will be latency issue**:the loss of a single packet blocks all following packet until re-transmission is done. This will cause unacceptable delay for gaming and voice chatting. -支持Openwrt,没有编译依赖,容易编译到任何平台上。release中提供了ar71xx版本的binary +**TCP also has re-transmission and congestion control which cant be disabled.** UDP programs usualy want to control packet sending rate by themselves. If you use OpenVPN TCP mode this cant be done because of the congestion control of underlying TCP protocol. Further more,with the re-transmission of underlying TCP,**if you send too many udp packets via an OpenVPN TCP connection,the connection will become completely unusable for a while**(It will eventually recover as most of the re-transmission is done,but it wont be very soon). -epoll纯异步,高并发,除了回收过期连接外,所有操作的时间复杂度都跟连接数无关。回收过期连接的操做也是柔和进行的,不会因为消耗太多cpu时间造成延迟抖动。 +Those issues exist for almost all TCP-based VPNs. -### 关键词 -突破udp qos,突破udp屏蔽,openvpn tcp over tcp problem,openvpn over icmp,udp to icmp tunnel,udp to tcp tunnel,udp via icmp,udp via tcp +For udp2raw there is no underlying TCP protocol,udp2raw just add TCP headers to UDP packets directly by using raw socket. It supports real-time/out-of-order delivery,there is no re-transmission and congestion control. **Udp2raw doesnt have all above issues**. -# 简明操作说明 +### Q: Is udp2raw designed for replacing VPN? +Answer: No. Udp2raw is designed for bypassing UDP restrictions. It doesnt have all of the features a VPN has(such as transparently redirect all traffic). -### 安装 -下载编译好的二进制文件,解压到任意目录。 +Instead of replacing VPN,udp2raw can be used with any UDP-based VPN together to grant UDP-based VPN the ablity of bypassing UDP restrictions,while not having the performance issue involved by a TCP-based VPN. Check [this link](https://github.com/wangyu-/udp2raw-tunnel#tunneling-any-traffic-via-raw-traffic-by-using-udp2raw-openvpn) for more info. -https://github.com/wangyu-/udp2raw-tunnel/releases -### 运行 -假设你有一个server,ip为44.55.66.77,有一个服务监听在udp 7777端口。 假设你本地的主机到44.55.66.77的UDP流量被屏蔽了,或者被qos了 +# Getting Started +### Installing +Download binary release from https://github.com/wangyu-/udp2raw-tunnel/releases -``` -在server端运行: +### Running +Assume your UDP is blocked or being QOS-ed or just poorly supported. Assume your server ip is 44.55.66.77, you have a service listening on udp port 7777. + +```bash +# Run at server side: ./udp2raw_amd64 -s -l0.0.0.0:4096 -r 127.0.0.1:7777 -a -k "passwd" --raw-mode faketcp -在client端运行: +# Run at client side ./udp2raw_amd64 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -a -k "passwd" --raw-mode faketcp ``` -###### Server端输出: -![](/images/output_server.PNG) -###### Client端输出: -![](/images/output_client.PNG) +###### Server Output: +![](images/output_server.PNG) +###### Client Output: +![](images/output_client.PNG) -现在client和server之间建立起了,tunnel。想要在本地连接44.55.66.77:7777,只需要连接 127.0.0.1:3333。来回的所有的udp流量会被经过tunneling发送。在外界看起来是tcp流量,不会有udp流量暴露到公网。 +Now,an encrypted raw tunnel has been established between client and server through TCP port 4096. Connecting to UDP port 3333 at the client side is equivalent to connecting to port 7777 at the server side. No UDP traffic will be exposed. -### MTU设置(重要) +### Note +To run on Android, check [Android_Guide](/doc/android_guide.md) -不论你用udp2raw来加速kcptun还是vpn,为了稳定使用,都需要设置合理的MTU(在kcptun/vpn里设置,而不是在udp2raw里),建议把MTU设置成1200。client和server端都要设置。 +If you have connection problems.Take a look at `--seq-mode` option. -### 提醒 -如果要在anroid上运行,请看[Android简明教程](/doc/android_guide.md) +You can run udp2raw with a non-root account(for better security).Take a look at [#26](https://github.com/wangyu-/udp2raw-tunnel/issues/26) for more info. -如果要在梅林固件的路由器上使用,添加`--lower-level auto` `--keep-rule` - -如果client和server无法连接,或者连接经常断开,请看一下`--seq-mode`的用法,尝试不同的seq-mode。 - -udp2raw可以用非root账号运行,这样更安全。具体方法见:[#26](https://github.com/wangyu-/udp2raw-tunnel/issues/26) - -# 进阶操作说明 - -### 命令选项 +# Advanced Topic +### Usage ``` udp2raw-tunnel -git version:adbe7d110f build date:Sep 6 2017 05:37:45 +git version:6e1df4b39f build date:Oct 24 2017 09:21:15 repository: https://github.com/wangyu-/udp2raw-tunnel usage: @@ -121,7 +117,9 @@ client options: other options: --conf-file read options from a configuration file instead of command line. check example.conf in repo for format - --log-level 0:never 1:fatal 2:error 3:warn + --fifo use a fifo(named pipe) for sending commands to the running program, + check readme.md in repository for supported commands. + --log-level 0:never 1:fatal 2:error 3:warn 4:info (default) 5:debug 6:trace --log-position enable file name,function name,line number in log --disable-color disable log color @@ -135,7 +133,7 @@ other options: 2:increase seq randomly, about every 3 packets,simply ack last seq 3:simulate an almost real seq/ack procedure(default) 4:similiar to 3,but do not consider TCP Option Window_Scale, - maybe useful when firewall doesnt support TCP Option + maybe useful when firewall doesnt support TCP Option --lower-level send packets at OSI level 2, format:'if_name#dest_mac_adress' ie:'eth0#00:23:45:67:89:b9'.or try '--lower-level auto' to obtain the parameter automatically,specify it manually if 'auto' failed @@ -146,113 +144,112 @@ other options: ``` -### iptables 规则,`-a`和`-g` -用raw收发tcp包本质上绕过了linux内核的tcp协议栈。linux碰到raw socket发来的包会不认识,如果一直收到不认识的包,会回复大量RST,造成不稳定或性能问题。所以强烈建议添加iptables规则屏蔽Linux内核的对指定端口的处理。用-a选项,udp2raw会在启动的时候自动帮你加上Iptables规则,退出的时候再自动删掉。如果长期使用,可以用-g选项来生成相应的Iptables规则再自己手动添加,这样规则不会在udp2raw退出时被删掉,可以避免停掉udp2raw后内核向对端回复RST。 +### Iptables rules,`-a` and `-g` +This program sends packets via raw socket. In FakeTCP mode, Linux kernel TCP packet processing has to be blocked by a iptables rule on both sides, otherwise the kernel will automatically send RST for an unrecongized TCP packet and you will sustain from stability / peformance problems. You can use `-a` option to let the program automatically add / delete iptables rule on start / exit. You can also use the `-g` option to generate iptables rule and add it manually. -用raw收发udp包也类似,只是内核回复的是icmp unreachable。而用raw 收发icmp,内核会自动回复icmp echo。都需要相应的iptables规则。 -### `--cipher-mode` 和 `--auth-mode` -如果要最大的安全性建议用aes128cbc+md5。如果要运行再路由器上,建议xor+simple。但是注意xor+simple只能骗过防火墙的包检测,不能防止真正的攻击者。 +### `--cipher-mode` and `--auth-mode` +It is suggested to use `aes128cbc` + `md5` to obtain maximum security. If you want to run the program on a router, you can try `xor` + `simple`, which can fool packet inspection by firewalls the most of time, but it cannot protect you from serious attacks. Mode none is only for debugging purpose. It is not recommended to set the cipher-mode or auth-mode to none. ### `--seq-mode` -facktcp模式并没有模拟tcp的全部。所以理论上有办法把faketcp和真正的tcp流量区分开来(虽然大部分ISP不太可能做这种程度的包检测)。seq-mode可以改变一些seq ack的行为。如果遇到了连接问题,可以尝试更改。在我这边的移动线路用3种模式都没问题。 - -### `--keep-rule` -定期主动检查iptables,如果udp2raw添加的iptables规则丢了,就重新添加。在一些iptables可能会被其他程序清空的情况下(比如梅林固件和openwrt的路由器)格外有用。 +The FakeTCP mode does not behave 100% like a real tcp connection. ISPs may be able to distinguish the simulated tcp traffic from the real TCP traffic (though it's costly). seq-mode can help you change the seq increase behavior slightly. If you experience connection problems, try to change the value. ### `--lower-level` -大部分udp2raw不能连通的情况都是设置了不兼容的iptables造成的。--lower-level选项允许绕过本地iptables。在一些iptables不好改动的情况下尤其有效(比如你用的是梅林固件,iptables全是固件自己生成的)。 +`--lower-level` allows you to send packet at OSI level 2(link level),so that you can bypass any local iptables rules. If you have a complicated iptables rules which conflicts with udp2raw and you cant(or too lazy to) edit the iptables rules,`--lower-level` can be very useful. Try `--lower-level auto` to auto detect the parameters,you can specify it manually if `auto` fails. -##### 格式 -`if_name#dest_mac_adress`,例如 `eth0#00:23:45:67:89:b9` 。`eth0`换成你的出口网卡名。`00:23:45:67:89:b9`换成网关的mac地址(如果client和server在同一个局域网内,可能不需要网关,这时候直接用对方主机的mac地址,这个属于罕见的应用场景,可以忽略)。 +Manual format `if_name#dest_mac_adress`,ie:`eth0#00:23:45:67:89:b9`. -可以用`--lower-level auto`自动获取参数,如果获取参数失败,再手动填写。 - -##### client端获得--lower-level参数的办法 -在client 端,运行`traceroute `,记下第一跳的地址,这个就是`网关ip`。再运行`arp -s <网关ip>`,可以同时查到出口网卡名和mac。 - -![](/images/lower_level.PNG) - -如果traceroute第一跳结果是`* * *`,说明网关屏蔽了对traceroute的应答。需要用`ip route`或`route`查询网关: - -![](/images/route.PNG) -##### server端获得--lower-level参数的办法 -如果client有公网ip,就`traceroute `。下一步和client端的方法一样。 - -如果client没有公网ip,就`traceroute google.com` 或`traceroute baidu.com`。下一步和client端的方法一样。 - -server端也可以用`--lower-level auto` 来尝试自动获得参数,如果无法连接再手动填写。 - -##### 注意 -如果用了`--lower-level`选项。server虽然还可以bind在0.0.0.0,但是因为你显式指定了网络接口,就只能工作在这一个网络接口了。 - -如果`arps -s`命令查询不到,首先再试几次。如果还是查询不到,那么可能是因为你用的是pppoe方式的拨号宽带,查询不到是正常的。这种情况下`if_name`填pppoe产生的虚拟interface,通常名字叫`pppXXXX`,从`ifconfig`命令的输出里找一下;`des_mac_adress`填`00:00:00:00:00:00`,例如`ppp0#00:00:00:00:00:00` +### `--keep-rule` +Monitor iptables and auto re-add iptables rules(for blocking kernel tcp processing) if necessary.Especially useful when iptables rules may be cleared by other programs(for example,if you are using openwrt,everytime you changed and commited a setting,iptables rule may be cleared and re-constructed). ### `--conf-file` -为了避免将密码等私密信息暴露给`ps`命令,你也可以使用 `配置文件` 来存储参数。 +You can also load options from a configuration file in order to keep secrets away from `ps` command. -比如,将以上服务端参数改写成配置文件 +For example, rewrite the options for the above `server` example (in Getting Started section) into configuration file: -`server.conf`: +`server.conf` ``` -s -# 你可以像这样添加注释 -# 注意,只有整行注释才能在配置文件里使用 -# 注释必须独占一行 +# You can add comments like this +# Comments MUST occupy an entire line +# Or they will not work as expected +# Listen address -l 0.0.0.0:4096 +# Remote address -r 127.0.0.1:7777 -a -k passwd --raw-mode faketcp ``` -注意,当写入配置文件的时候,密码等参数两边的引号必须去除。 +Pay attention to the `-k` parameter: In command line mode the quotes around the password will be removed by shell. In configuration files we do not remove quotes. -然后就可以使用下面的方式启动服务端 +Then start the server with ```bash ./udp2raw_amd64 --conf-file server.conf ``` -# 性能测试 -iperf3 的UDP模式有BUG,所以,这里用iperf3的tcp模式,配合Openvpn,测试udp2raw的性能。(iperf3 udp issue ,https://github.com/esnet/iperf/issues/296 ) -openvpn关掉了自带的加密。 -#### iperf3 命令: +# Peformance Test +#### Test method: +iperf3 TCP via OpenVPN + udp2raw +(iperf3 UDP mode is not used because of a bug mentioned in this issue: https://github.com/esnet/iperf/issues/296 . Instead, we package the TCP traffic into UDP by OpenVPN to test the performance. Read [Application](https://github.com/wangyu-/udp2raw-tunnel#application) for details. + +#### iperf3 command: ``` iperf3 -c 10.222.2.1 -P40 iperf3 -c 10.222.2.1 -P40 -R ``` -#### client主机 -vultr 2.5美元每月套餐(single core 2.4ghz cpu,512m ram,日本东京机房), -#### server主机 -bandwagonhost 3.99美元每年套餐(single core 2.0ghz cpu,128m ram,美国洛杉矶机房) -### 测试1 +#### Environments +* **Client** Vultr $2.5/monthly plan (single core 2.4GHz cpu, 512MB RAM, Tokyo, Japan) +* **Server** BandwagonHost $3.99/annually plan (single core 2.0GHz cpu, 128MB RAM, Los Angeles, USA) + +### Test1 raw_mode: faketcp cipher_mode: xor  auth_mode: simple -![image4](/images/image4.PNG) +![image4](images/image4.PNG) -(反向的速度几乎一样,所以只发正向测试的图) +(reverse speed was simliar and not uploaded) -测试中cpu被打满。其中有30%的cpu是被openvpn占的。 如果不用Openvpn中转,实际达到100+Mb/S 应该没问题。 - -### 测试2 +### Test2 raw_mode: faketcp cipher_mode: aes128cbc  auth_mode: md5 -![image5](/images/image5.PNG) +![image5](images/image5.PNG) -(反向的速度几乎一样,所以只发正向测试的图) +(reverse speed was simliar and not uploaded) -测试中cpu被打满。绝大多数cpu都是被udp2raw占用的(主要消耗在aes加密)。即使不用Openvpn,速度也不会快很多了。 -# 应用 -### 中转 kcptun -[udp2raw+kcptun step_by_step教程](kcptun_step_by_step.md) -### 中转 finalspeed -[udp2raw+finalspeed step_by_step教程](finalspeed_step_by_step.md) -# 如何自己编译 -[编译教程](build_guide.zh-cn.md) -# 相关repo +# Application +## Tunneling any traffic via raw traffic by using udp2raw +openvpn +![image_vpn](images/openvpn.PNG) +1. Bypasses UDP block/UDP QOS + +2. No TCP over TCP problem (TCP over TCP problem http://sites.inka.de/bigred/devel/tcp-tcp.html ,https://community.openvpn.net/openvpn/ticket/2 ) + +3. OpenVpn over ICMP also becomes a choice + +4. Supports almost any UDP-based VPN + +More details at [openvpn+udp2raw_guide](/doc/openvpn_guide.md) +## Speed-up tcp connection via raw traffic by using udp2raw+kcptun +kcptun is a tcp connection speed-up program,it speeds-up tcp connection by using kcp protocol on-top of udp.by using udp2raw,you can use kcptun while udp is QoSed or blocked. +(kcptun, https://github.com/xtaci/kcptun) + +## Speed-up tcp connection via raw traffic by using udp2raw+finalspeed +finalspeed is a tcp connection speed-up program similiar to kcptun,it speeds-up tcp connection by using kcp protocol on-top of udp or tcp.but its tcp mode doesnt support openvz,you can bypass this problem if you use udp2raw+finalspeed together,and icmp mode also becomes avaliable. + +# How to build +read [build_guide](/doc/build_guide.md) + +# Other +### Easier installation on ArchLinux +``` +yaourt -S udp2raw-tunnel # or +pacaur -S udp2raw-tunnel +``` + +# Related work ### kcptun-raw udp2raw was inspired by kcptun-raw,which modified kcptun to support tcp mode. @@ -265,8 +262,17 @@ https://github.com/linhua55/some_kcptun_tools/tree/master/relayRawSocket another project of kcptun with tcp mode https://github.com/ccsexyz/kcpraw + ### icmptunnel Transparently tunnel your IP traffic through ICMP echo and reply packets. https://github.com/DhavalKapil/icmptunnel +### Tcp Minion +Tcp Minion is a project which modifid the code of tcp stack in kernel,and implemented real-time out-order udp packet delivery through this modified tcp stack.I failed to find the implementation,but there are some papers avaliable: + +https://arxiv.org/abs/1103.0463 + +http://korz.cs.yale.edu/2009/tng/papers/pfldnet10.pdf + +https://pdfs.semanticscholar.org/9e6f/e2306f4385b4eb5416d1fcab16e9361d6ba3.pdf From 95ee6e64dcf4a375356d5e21c0ca0687ca2dd4a3 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Tue, 24 Oct 2017 07:45:29 -0700 Subject: [PATCH 03/72] Update README.zh-cn.md --- doc/README.zh-cn.md | 269 ++++++++++++++++++++++---------------------- 1 file changed, 135 insertions(+), 134 deletions(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index 8d4ffdf..59b45d4 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -1,97 +1,101 @@ -# Udp2raw-tunnel -![image0](images/image0.PNG) +Udp2raw-tunnel +![image2](/images/image2.PNG) +udp2raw tunnel,通过raw socket给UDP包加上TCP或ICMP header,进而绕过UDP屏蔽或QoS,或在UDP不稳定的环境下提升稳定性。可以有效防止在使用kcptun或者finalspeed的情况下udp端口被运营商限速。 -A Tunnel which turns UDP Traffic into Encrypted FakeTCP/UDP/ICMP Traffic by using Raw Socket, helps you Bypass UDP FireWalls(or Unstable UDP Environment). It can defend Replay-Attack and supports Multiplexing. It also acts as a Connection Stabilizer. +支持心跳保活、自动重连,重连后会恢复上次连接,在底层掉线的情况下可以保持上层不掉线。同时有加密、防重放攻击、信道复用的功能。 -It can tunnel any traffic when used together with a UDP-based VPN(such as OpenVPN).Check [this link](https://github.com/wangyu-/udp2raw-tunnel#tunneling-any-traffic-via-raw-traffic-by-using-udp2raw-openvpn) for more info. +**欢迎任何形式的转载** -[简体中文](/doc/README.zh-cn.md) +[English](/README.md) -# Support Platforms -Linux host (including desktop Linux,Android phone/tablet,OpenWRT router,or Raspberry PI) with root access. +[udp2raw+kcptun step_by_step教程](kcptun_step_by_step.md) -For Winodws/MacOS,the 4.4mb virtual image with udp2raw pre-installed has been released,you can load it with Vmware/VirtualBox.The virtual image has been set to auto obtain ip,udp2raw can be run imidiately after boot finished(make sure network mode of virtual machine has been set to bridged)(only udp2raw has to be run under virtual machine,all other programs runs under Windows/MacOS as usual). +[udp2raw+finalspeed step_by_step教程](finalspeed_step_by_step.md) +如果你需要加速跨国网游、网页浏览,解决方案在另一个repo: -# Features -### Send/Receive UDP Packets with ICMP/FakeTCP/UDP headers -ICMP/FakeTCP headers help you bypass UDP blocking, UDP QOS or improper UDP NAT behavior on some ISPs. In ICMP header mode,udp2raw works like an ICMP tunnel. +https://github.com/wangyu-/UDPspeeder +# 支持的平台 +Linux主机,有root权限。可以是PC、android手机/平板、openwrt路由器、树莓派。主机上最好安装了iptables命令(apt/yum很容易安装)。 -UDP headers are also supported. In UDP header mode, it behaves just like a normal UDP tunnel, and you can just make use of the other features (such as encrytion, anti-replay, or connection stalization). +在windows和mac上预装了udp2raw的虚拟机镜像已发布,可以用Vmware或VirtualBox加载,容量4.4mb,已经配置好了自动获取网卡ip,开机即用,稳定,性能很好。 +(udp2raw跑在虚拟机里,其他应用照常跑在windows上)(确保虚拟机网卡工作在桥接模式)(Vmware player 75mb,VirtualBox 118mb,很容易安装)。 -### Simulated TCP with Real-time/Out-of-Order Delivery -In FakeTCP header mode,udp2raw simulates 3-way handshake while establishing a connection,simulates seq and ack_seq while data transferring. It also simulates following TCP options: `MSS`, `sackOk`, `TS`, `TS_ack`, `wscale`.Firewalls will regard FakeTCP as a TCP connection, but its essentially UDP: it supports real-time/out-of-order delivery(just as normal UDP does), no congrestion control or re-transmission. So there wont be any TCP over TCP problem when using OpenVPN. +# 功能特性 +### 把udp流量伪装成tcp /icmp +用raw socket给udp包加上tcp/icmp包头,可以突破udp流量限制或Udp QOS。或者在udp nat有问题的环境下,提升稳定性。  另外也支持用raw 发udp包,这样流量不会被伪装,只会被加密。 -### Encrpytion, Anti-Replay -* Encrypt your traffic with AES-128-CBC. -* Protect data integrity by MD5 or CRC32. -* Defense replay attack with an anti-replay window, smiliar to IPSec and OpenVPN. +### 模拟TCP3次握手 +模拟TCP3次握手,模拟seq ack过程。另外还模拟了一些tcp option:MSS,sackOk,TS,TS_ack,wscale,用来使流量看起来更像是由普通的linux tcp协议栈发送的。 -### Failure Dectection & Stablization (Connection Recovery) -Conection failures are detected by heartbeats. If timed-out, client will automatically change port number and reconnect. If reconnection is successful, the previous connection will be recovered, and all existing UDP conversations will stay vaild. +### 心跳保活、自动重连,连接快速恢复,单向链路失效检测 +心跳保活、自动重连,udp2raw重连可以恢复上次的连接,重连后上层连接继续有效,底层掉线上层不掉线。有效解决上层连接断开的问题。 (功能借鉴自[kcptun-raw](https://github.com/Chion82/kcptun-raw))(**就算你拔掉网线重插,或者重新拨号获得新ip,上层应用也不会断线**) -For example, if you use udp2raw + OpenVPN, OpenVPN won't lose connection after any reconnect, **even if network cable is re-plugged or WiFi access point is changed**. +Client能用单倍的超时时间检测到单向链路的失效,不管是上行还是下行,只要有一个方向失效就能被client检测到。重连只需要client发起,就可以立即被server处理,不需要等到server端的连接超时后。 -### Other Features -* **Multiplexing** One client can handle multiple UDP connections, all of which share the same raw connection. +对于有大量client的情况,对于不同client,server发送的心跳是错开时间发送的,不会因为短时间发送大量的心跳而造成拥塞和延迟抖动。 -* **Multiple Clients** One server can have multiple clients. +### 加密 防重放攻击 +用aes128cbc加密,md5/crc32做数据完整校验。用类似ipsec/openvpn的 replay window机制来防止重放攻击。 -* **NAT Support** All of the 3 modes work in NAT environments. +设计目标是,即使攻击者可以监听到tunnel的所有包,可以选择性丢弃tunnel的任意包,可以重放任意包;攻击者也没办法获得tunnel承载的任何数据,也没办法向tunnel的数据流中通过包构造/包重放插入任何数据。 -* **OpenVZ Support** Tested on BandwagonHost VPS. +### 其他特性 +信道复用,client的udp端支持多个连接。 -* **Easy to Build** No dependencies.To cross-compile udp2raw,all you need to do is just to download a toolchain,modify makefile to point at the toolchain,run `make cross` then everything is done.(Note:Pre-compiled binaries for Desktop,RaspberryPi,Android,some Openwrt Routers are already included in [Releases](https://github.com/wangyu-/udp2raw-tunnel/releases)) +server支持多个client,也能正确处理多个连接的重连和连接恢复。 -### Keywords -`Bypass UDP QoS` `Bypass UDP Blocking` `Bypass OpenVPN TCP over TCP problem` `OpenVPN over ICMP` `UDP to ICMP tunnel` `UDP to TCP tunnel` `UDP over ICMP` `UDP over TCP` +NAT 穿透 ,tcp icmp udp模式都支持nat穿透。 -# Frequently Asked Questions -### Q: What is the advantage of using udp2raw FakeTCP mode,why not use a TCP-based VPN(such as OpenVPN TCP mode)? -Answer: **TCP doesnt allow real-time/out-of-order delivery**. **If you use OpenVPN TCP mode to turn UDP traffic into TCP,there will be latency issue**:the loss of a single packet blocks all following packet until re-transmission is done. This will cause unacceptable delay for gaming and voice chatting. +支持Openvz,配合finalspeed使用,可以在openvz上用tcp模式的finalspeed -**TCP also has re-transmission and congestion control which cant be disabled.** UDP programs usualy want to control packet sending rate by themselves. If you use OpenVPN TCP mode this cant be done because of the congestion control of underlying TCP protocol. Further more,with the re-transmission of underlying TCP,**if you send too many udp packets via an OpenVPN TCP connection,the connection will become completely unusable for a while**(It will eventually recover as most of the re-transmission is done,but it wont be very soon). +支持Openwrt,没有编译依赖,容易编译到任何平台上。release中提供了ar71xx版本的binary -Those issues exist for almost all TCP-based VPNs. +epoll纯异步,高并发,除了回收过期连接外,所有操作的时间复杂度都跟连接数无关。回收过期连接的操做也是柔和进行的,不会因为消耗太多cpu时间造成延迟抖动。 -For udp2raw there is no underlying TCP protocol,udp2raw just add TCP headers to UDP packets directly by using raw socket. It supports real-time/out-of-order delivery,there is no re-transmission and congestion control. **Udp2raw doesnt have all above issues**. +### 关键词 +突破udp qos,突破udp屏蔽,openvpn tcp over tcp problem,openvpn over icmp,udp to icmp tunnel,udp to tcp tunnel,udp via icmp,udp via tcp -### Q: Is udp2raw designed for replacing VPN? -Answer: No. Udp2raw is designed for bypassing UDP restrictions. It doesnt have all of the features a VPN has(such as transparently redirect all traffic). +# 简明操作说明 -Instead of replacing VPN,udp2raw can be used with any UDP-based VPN together to grant UDP-based VPN the ablity of bypassing UDP restrictions,while not having the performance issue involved by a TCP-based VPN. Check [this link](https://github.com/wangyu-/udp2raw-tunnel#tunneling-any-traffic-via-raw-traffic-by-using-udp2raw-openvpn) for more info. +### 安装 +下载编译好的二进制文件,解压到任意目录。 +https://github.com/wangyu-/udp2raw-tunnel/releases -# Getting Started -### Installing -Download binary release from https://github.com/wangyu-/udp2raw-tunnel/releases +### 运行 +假设你有一个server,ip为44.55.66.77,有一个服务监听在udp 7777端口。 假设你本地的主机到44.55.66.77的UDP流量被屏蔽了,或者被qos了 -### Running -Assume your UDP is blocked or being QOS-ed or just poorly supported. Assume your server ip is 44.55.66.77, you have a service listening on udp port 7777. - -```bash -# Run at server side: +``` +在server端运行: ./udp2raw_amd64 -s -l0.0.0.0:4096 -r 127.0.0.1:7777 -a -k "passwd" --raw-mode faketcp -# Run at client side +在client端运行: ./udp2raw_amd64 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -a -k "passwd" --raw-mode faketcp ``` -###### Server Output: -![](images/output_server.PNG) -###### Client Output: -![](images/output_client.PNG) +###### Server端输出: +![](/images/output_server.PNG) +###### Client端输出: +![](/images/output_client.PNG) -Now,an encrypted raw tunnel has been established between client and server through TCP port 4096. Connecting to UDP port 3333 at the client side is equivalent to connecting to port 7777 at the server side. No UDP traffic will be exposed. +现在client和server之间建立起了,tunnel。想要在本地连接44.55.66.77:7777,只需要连接 127.0.0.1:3333。来回的所有的udp流量会被经过tunneling发送。在外界看起来是tcp流量,不会有udp流量暴露到公网。 -### Note -To run on Android, check [Android_Guide](/doc/android_guide.md) +### MTU设置(重要) -If you have connection problems.Take a look at `--seq-mode` option. +不论你用udp2raw来加速kcptun还是vpn,为了稳定使用,都需要设置合理的MTU(在kcptun/vpn里设置,而不是在udp2raw里),建议把MTU设置成1200。client和server端都要设置。 -You can run udp2raw with a non-root account(for better security).Take a look at [#26](https://github.com/wangyu-/udp2raw-tunnel/issues/26) for more info. +### 提醒 +如果要在anroid上运行,请看[Android简明教程](/doc/android_guide.md) -# Advanced Topic -### Usage +如果要在梅林固件的路由器上使用,添加`--lower-level auto` `--keep-rule` + +如果client和server无法连接,或者连接经常断开,请看一下`--seq-mode`的用法,尝试不同的seq-mode。 + +udp2raw可以用非root账号运行,这样更安全。具体方法见:[#26](https://github.com/wangyu-/udp2raw-tunnel/issues/26) + +# 进阶操作说明 + +### 命令选项 ``` udp2raw-tunnel git version:6e1df4b39f build date:Oct 24 2017 09:21:15 @@ -144,112 +148,118 @@ other options: ``` -### Iptables rules,`-a` and `-g` -This program sends packets via raw socket. In FakeTCP mode, Linux kernel TCP packet processing has to be blocked by a iptables rule on both sides, otherwise the kernel will automatically send RST for an unrecongized TCP packet and you will sustain from stability / peformance problems. You can use `-a` option to let the program automatically add / delete iptables rule on start / exit. You can also use the `-g` option to generate iptables rule and add it manually. +### iptables 规则,`-a`和`-g` +用raw收发tcp包本质上绕过了linux内核的tcp协议栈。linux碰到raw socket发来的包会不认识,如果一直收到不认识的包,会回复大量RST,造成不稳定或性能问题。所以强烈建议添加iptables规则屏蔽Linux内核的对指定端口的处理。用-a选项,udp2raw会在启动的时候自动帮你加上Iptables规则,退出的时候再自动删掉。如果长期使用,可以用-g选项来生成相应的Iptables规则再自己手动添加,这样规则不会在udp2raw退出时被删掉,可以避免停掉udp2raw后内核向对端回复RST。 -### `--cipher-mode` and `--auth-mode` -It is suggested to use `aes128cbc` + `md5` to obtain maximum security. If you want to run the program on a router, you can try `xor` + `simple`, which can fool packet inspection by firewalls the most of time, but it cannot protect you from serious attacks. Mode none is only for debugging purpose. It is not recommended to set the cipher-mode or auth-mode to none. +用raw收发udp包也类似,只是内核回复的是icmp unreachable。而用raw 收发icmp,内核会自动回复icmp echo。都需要相应的iptables规则。 +### `--cipher-mode` 和 `--auth-mode` +如果要最大的安全性建议用aes128cbc+md5。如果要运行再路由器上,建议xor+simple。但是注意xor+simple只能骗过防火墙的包检测,不能防止真正的攻击者。 ### `--seq-mode` -The FakeTCP mode does not behave 100% like a real tcp connection. ISPs may be able to distinguish the simulated tcp traffic from the real TCP traffic (though it's costly). seq-mode can help you change the seq increase behavior slightly. If you experience connection problems, try to change the value. - -### `--lower-level` -`--lower-level` allows you to send packet at OSI level 2(link level),so that you can bypass any local iptables rules. If you have a complicated iptables rules which conflicts with udp2raw and you cant(or too lazy to) edit the iptables rules,`--lower-level` can be very useful. Try `--lower-level auto` to auto detect the parameters,you can specify it manually if `auto` fails. - -Manual format `if_name#dest_mac_adress`,ie:`eth0#00:23:45:67:89:b9`. +facktcp模式并没有模拟tcp的全部。所以理论上有办法把faketcp和真正的tcp流量区分开来(虽然大部分ISP不太可能做这种程度的包检测)。seq-mode可以改变一些seq ack的行为。如果遇到了连接问题,可以尝试更改。在我这边的移动线路用3种模式都没问题。 ### `--keep-rule` -Monitor iptables and auto re-add iptables rules(for blocking kernel tcp processing) if necessary.Especially useful when iptables rules may be cleared by other programs(for example,if you are using openwrt,everytime you changed and commited a setting,iptables rule may be cleared and re-constructed). +定期主动检查iptables,如果udp2raw添加的iptables规则丢了,就重新添加。在一些iptables可能会被其他程序清空的情况下(比如梅林固件和openwrt的路由器)格外有用。 + +### `--lower-level` +大部分udp2raw不能连通的情况都是设置了不兼容的iptables造成的。--lower-level选项允许绕过本地iptables。在一些iptables不好改动的情况下尤其有效(比如你用的是梅林固件,iptables全是固件自己生成的)。 + +### `--fifo` +指定一个fifo(named pipe)来向运行中的程序发送命令. 例如对于`--fifo fifo.file`: + +再client端,可以用`echo reconnect >fifo.file`来强制client换端口重连(上层不断线).对Server,目前没有效果。 + +##### 格式 +`if_name#dest_mac_adress`,例如 `eth0#00:23:45:67:89:b9` 。`eth0`换成你的出口网卡名。`00:23:45:67:89:b9`换成网关的mac地址(如果client和server在同一个局域网内,可能不需要网关,这时候直接用对方主机的mac地址,这个属于罕见的应用场景,可以忽略)。 + +可以用`--lower-level auto`自动获取参数,如果获取参数失败,再手动填写。 + +##### client端获得--lower-level参数的办法 +在client 端,运行`traceroute `,记下第一跳的地址,这个就是`网关ip`。再运行`arp -s <网关ip>`,可以同时查到出口网卡名和mac。 + +![](/images/lower_level.PNG) + +如果traceroute第一跳结果是`* * *`,说明网关屏蔽了对traceroute的应答。需要用`ip route`或`route`查询网关: + +![](/images/route.PNG) +##### server端获得--lower-level参数的办法 +如果client有公网ip,就`traceroute `。下一步和client端的方法一样。 + +如果client没有公网ip,就`traceroute google.com` 或`traceroute baidu.com`。下一步和client端的方法一样。 + +server端也可以用`--lower-level auto` 来尝试自动获得参数,如果无法连接再手动填写。 + +##### 注意 +如果用了`--lower-level`选项。server虽然还可以bind在0.0.0.0,但是因为你显式指定了网络接口,就只能工作在这一个网络接口了。 + +如果`arps -s`命令查询不到,首先再试几次。如果还是查询不到,那么可能是因为你用的是pppoe方式的拨号宽带,查询不到是正常的。这种情况下`if_name`填pppoe产生的虚拟interface,通常名字叫`pppXXXX`,从`ifconfig`命令的输出里找一下;`des_mac_adress`填`00:00:00:00:00:00`,例如`ppp0#00:00:00:00:00:00` ### `--conf-file` -You can also load options from a configuration file in order to keep secrets away from `ps` command. +为了避免将密码等私密信息暴露给`ps`命令,你也可以使用 `配置文件` 来存储参数。 -For example, rewrite the options for the above `server` example (in Getting Started section) into configuration file: +比如,将以上服务端参数改写成配置文件 -`server.conf` +`server.conf`: ``` -s -# You can add comments like this -# Comments MUST occupy an entire line -# Or they will not work as expected -# Listen address +# 你可以像这样添加注释 +# 注意,只有整行注释才能在配置文件里使用 +# 注释必须独占一行 -l 0.0.0.0:4096 -# Remote address -r 127.0.0.1:7777 -a -k passwd --raw-mode faketcp ``` -Pay attention to the `-k` parameter: In command line mode the quotes around the password will be removed by shell. In configuration files we do not remove quotes. +注意,当写入配置文件的时候,密码等参数两边的引号必须去除。 -Then start the server with +然后就可以使用下面的方式启动服务端 ```bash ./udp2raw_amd64 --conf-file server.conf ``` +# 性能测试 +iperf3 的UDP模式有BUG,所以,这里用iperf3的tcp模式,配合Openvpn,测试udp2raw的性能。(iperf3 udp issue ,https://github.com/esnet/iperf/issues/296 ) -# Peformance Test -#### Test method: -iperf3 TCP via OpenVPN + udp2raw -(iperf3 UDP mode is not used because of a bug mentioned in this issue: https://github.com/esnet/iperf/issues/296 . Instead, we package the TCP traffic into UDP by OpenVPN to test the performance. Read [Application](https://github.com/wangyu-/udp2raw-tunnel#application) for details. - -#### iperf3 command: +openvpn关掉了自带的加密。 +#### iperf3 命令: ``` iperf3 -c 10.222.2.1 -P40 iperf3 -c 10.222.2.1 -P40 -R ``` -#### Environments -* **Client** Vultr $2.5/monthly plan (single core 2.4GHz cpu, 512MB RAM, Tokyo, Japan) -* **Server** BandwagonHost $3.99/annually plan (single core 2.0GHz cpu, 128MB RAM, Los Angeles, USA) - -### Test1 +#### client主机 +vultr 2.5美元每月套餐(single core 2.4ghz cpu,512m ram,日本东京机房), +#### server主机 +bandwagonhost 3.99美元每年套餐(single core 2.0ghz cpu,128m ram,美国洛杉矶机房) +### 测试1 raw_mode: faketcp cipher_mode: xor  auth_mode: simple -![image4](images/image4.PNG) +![image4](/images/image4.PNG) -(reverse speed was simliar and not uploaded) +(反向的速度几乎一样,所以只发正向测试的图) -### Test2 +测试中cpu被打满。其中有30%的cpu是被openvpn占的。 如果不用Openvpn中转,实际达到100+Mb/S 应该没问题。 + +### 测试2 raw_mode: faketcp cipher_mode: aes128cbc  auth_mode: md5 -![image5](images/image5.PNG) +![image5](/images/image5.PNG) -(reverse speed was simliar and not uploaded) +(反向的速度几乎一样,所以只发正向测试的图) -# Application -## Tunneling any traffic via raw traffic by using udp2raw +openvpn -![image_vpn](images/openvpn.PNG) -1. Bypasses UDP block/UDP QOS - -2. No TCP over TCP problem (TCP over TCP problem http://sites.inka.de/bigred/devel/tcp-tcp.html ,https://community.openvpn.net/openvpn/ticket/2 ) - -3. OpenVpn over ICMP also becomes a choice - -4. Supports almost any UDP-based VPN - -More details at [openvpn+udp2raw_guide](/doc/openvpn_guide.md) -## Speed-up tcp connection via raw traffic by using udp2raw+kcptun -kcptun is a tcp connection speed-up program,it speeds-up tcp connection by using kcp protocol on-top of udp.by using udp2raw,you can use kcptun while udp is QoSed or blocked. -(kcptun, https://github.com/xtaci/kcptun) - -## Speed-up tcp connection via raw traffic by using udp2raw+finalspeed -finalspeed is a tcp connection speed-up program similiar to kcptun,it speeds-up tcp connection by using kcp protocol on-top of udp or tcp.but its tcp mode doesnt support openvz,you can bypass this problem if you use udp2raw+finalspeed together,and icmp mode also becomes avaliable. - -# How to build -read [build_guide](/doc/build_guide.md) - -# Other -### Easier installation on ArchLinux -``` -yaourt -S udp2raw-tunnel # or -pacaur -S udp2raw-tunnel -``` - -# Related work +测试中cpu被打满。绝大多数cpu都是被udp2raw占用的(主要消耗在aes加密)。即使不用Openvpn,速度也不会快很多了。 +# 应用 +### 中转 kcptun +[udp2raw+kcptun step_by_step教程](kcptun_step_by_step.md) +### 中转 finalspeed +[udp2raw+finalspeed step_by_step教程](finalspeed_step_by_step.md) +# 如何自己编译 +[编译教程](build_guide.zh-cn.md) +# 相关repo ### kcptun-raw udp2raw was inspired by kcptun-raw,which modified kcptun to support tcp mode. @@ -262,17 +272,8 @@ https://github.com/linhua55/some_kcptun_tools/tree/master/relayRawSocket another project of kcptun with tcp mode https://github.com/ccsexyz/kcpraw - ### icmptunnel Transparently tunnel your IP traffic through ICMP echo and reply packets. https://github.com/DhavalKapil/icmptunnel -### Tcp Minion -Tcp Minion is a project which modifid the code of tcp stack in kernel,and implemented real-time out-order udp packet delivery through this modified tcp stack.I failed to find the implementation,but there are some papers avaliable: - -https://arxiv.org/abs/1103.0463 - -http://korz.cs.yale.edu/2009/tng/papers/pfldnet10.pdf - -https://pdfs.semanticscholar.org/9e6f/e2306f4385b4eb5416d1fcab16e9361d6ba3.pdf From 00edb620be37516f67184221cea219efee5a8d98 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Tue, 24 Oct 2017 07:56:59 -0700 Subject: [PATCH 04/72] Update README.zh-cn.md --- doc/README.zh-cn.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index 59b45d4..5a0ef6c 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -165,9 +165,9 @@ facktcp模式并没有模拟tcp的全部。所以理论上有办法把faketcp和 大部分udp2raw不能连通的情况都是设置了不兼容的iptables造成的。--lower-level选项允许绕过本地iptables。在一些iptables不好改动的情况下尤其有效(比如你用的是梅林固件,iptables全是固件自己生成的)。 ### `--fifo` -指定一个fifo(named pipe)来向运行中的程序发送命令. 例如对于`--fifo fifo.file`: +指定一个fifo(named pipe)来向运行中的程序发送命令,例如`--fifo fifo.file`: -再client端,可以用`echo reconnect >fifo.file`来强制client换端口重连(上层不断线).对Server,目前没有效果。 +在client端,可以用`echo reconnect >fifo.file`来强制client换端口重连(上层不断线).对Server,目前没有效果。 ##### 格式 `if_name#dest_mac_adress`,例如 `eth0#00:23:45:67:89:b9` 。`eth0`换成你的出口网卡名。`00:23:45:67:89:b9`换成网关的mac地址(如果client和server在同一个局域网内,可能不需要网关,这时候直接用对方主机的mac地址,这个属于罕见的应用场景,可以忽略)。 From c3e1dab8384e762a9021411f142d6ed4453ce2e1 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Tue, 24 Oct 2017 23:58:41 -0500 Subject: [PATCH 05/72] changed assert to warning --- main.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/main.cpp b/main.cpp index bc0dae1..91bb008 100755 --- a/main.cpp +++ b/main.cpp @@ -1196,7 +1196,12 @@ int client_event_loop() else if (events[idx].data.u64 == (u64_t)fifo_fd) { int len=read (fifo_fd, buf, sizeof (buf)); - assert(len>=0); + //assert(len>=0); + if(len<0) + { + mylog(log_warn,"fifo read failed len=%d,errno=%s\n",len,strerror(errno)); + continue; + } buf[len]=0; while(len>=1&&buf[len-1]=='\n') buf[len-1]=0; @@ -1452,7 +1457,12 @@ int server_event_loop() else if (events[idx].data.u64 == (u64_t)fifo_fd) { int len=read (fifo_fd, buf, sizeof (buf)); - assert(len>=0); + if(len<0) + { + mylog(log_warn,"fifo read failed len=%d,errno=%s\n",len,strerror(errno)); + continue; + } + //assert(len>=0); buf[len]=0; while(len>=1&&buf[len-1]=='\n') buf[len-1]=0; From 6515d428e9ab3c9c0c60811fd83b29fbd873ba0f Mon Sep 17 00:00:00 2001 From: wangyu- Date: Mon, 30 Oct 2017 01:57:27 -0500 Subject: [PATCH 06/72] port fd64 to udp2raw --- common.cpp | 16 +++++++++++++++- common.h | 18 ++++++++++++++++++ makefile | 2 +- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/common.cpp b/common.cpp index db6a3b6..e4523f1 100644 --- a/common.cpp +++ b/common.cpp @@ -593,7 +593,21 @@ int create_fifo(char * file) return fifo_fd; } - +void ip_port_t::from_u64(u64_t u64) +{ + ip=get_u64_h(u64); + port=get_u64_l(u64); +} +u64_t ip_port_t::to_u64() +{ + return pack_u64(ip,port); +} +char * ip_port_t::to_s() +{ + static char res[40]; + sprintf(res,"%s:%d",my_ntoa(ip),port); + return res; +} diff --git a/common.h b/common.h index 3955a59..ae7c4a5 100644 --- a/common.h +++ b/common.h @@ -70,6 +70,24 @@ typedef u64_t padding_t; typedef u64_t anti_replay_seq_t; + +struct ip_port_t +{ + u32_t ip; + int port; + void from_u64(u64_t u64); + u64_t to_u64(); + char * to_s(); +}; + +struct fd_info_t +{ + ip_port_t ip_port; +}; + + +typedef u64_t fd64_t; + const int max_data_len=1600; const int buf_len=max_data_len+400; diff --git a/makefile b/makefile index fcf00eb..979d89d 100755 --- a/makefile +++ b/makefile @@ -8,7 +8,7 @@ cc_arm= /toolchains/arm-2014.05/bin/arm-none-linux-gnueabi-g++ #cc_bcm2708=/home/wangyu/raspberry/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-g++ FLAGS= -std=c++11 -Wall -Wextra -Wno-unused-variable -Wno-unused-parameter -Wno-missing-field-initializers -COMMON=main.cpp lib/md5.c encrypt.cpp log.cpp network.cpp common.cpp connection.cpp misc.cpp -lpthread +COMMON=main.cpp lib/md5.c encrypt.cpp log.cpp network.cpp common.cpp connection.cpp misc.cpp fd_manager.cpp -lpthread SOURCES= $(COMMON) lib/aes_faster_c/aes.c lib/aes_faster_c/wrapper.c SOURCES_TINY_AES= $(COMMON) lib/aes.c SOURCES_AES_ACC=$(COMMON) $(wildcard lib/aes_acc/aes*.c) From 7a234865337937572b678f116dd911d9c1d1fe59 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Mon, 30 Oct 2017 07:21:27 -0500 Subject: [PATCH 07/72] fd64 integrate --- connection.cpp | 35 +++++++++++----- connection.h | 9 +++-- main.cpp | 108 ++++++++++++++++++++++++++++++++++--------------- misc.cpp | 3 ++ 4 files changed, 109 insertions(+), 46 deletions(-) diff --git a/connection.cpp b/connection.cpp index 968ce04..6e16e88 100644 --- a/connection.cpp +++ b/connection.cpp @@ -7,6 +7,7 @@ #include "connection.h" #include "encrypt.h" +#include "fd_manager.h" int disable_anti_replay=0;//if anti_replay windows is diabled @@ -249,7 +250,7 @@ conv_manager_t::~conv_manager_t() last_state_time=0; oppsite_const_id=0; - timer_fd=0; + timer_fd64=0; my_roller=0; oppsite_roller=0; @@ -310,9 +311,9 @@ conv_manager_t::~conv_manager_t() ready_num=0; mp.reserve(10007); clear_it=mp.begin(); - timer_fd_mp.reserve(10007); + // timer_fd_mp.reserve(10007); const_id_mp.reserve(10007); - udp_fd_mp.reserve(100007); + // udp_fd_mp.reserve(100007); last_clear_time=0; //current_ready_ip=0; // current_ready_port=0; @@ -372,21 +373,32 @@ conv_manager_t::~conv_manager_t() ready_num--; assert(i32_t(ready_num)!=-1); assert(erase_it->second!=0); - assert(erase_it->second->timer_fd !=0); + + assert(erase_it->second->timer_fd64 !=0); + + assert(fd_manager.exist(erase_it->second->timer_fd64)); + assert(erase_it->second->oppsite_const_id!=0); assert(const_id_mp.find(erase_it->second->oppsite_const_id)!=const_id_mp.end()); - assert(timer_fd_mp.find(erase_it->second->timer_fd)!=timer_fd_mp.end()); + + + //assert(timer_fd_mp.find(erase_it->second->timer_fd)!=timer_fd_mp.end()); const_id_mp.erase(erase_it->second->oppsite_const_id); - timer_fd_mp.erase(erase_it->second->timer_fd); - close(erase_it->second->timer_fd);// close will auto delte it from epoll + + fd_manager.fd64_close(erase_it->second->timer_fd64); + + //timer_fd_mp.erase(erase_it->second->timer_fd); + //close(erase_it->second->timer_fd);// close will auto delte it from epoll delete(erase_it->second); mp.erase(erase_it->first); } else { assert(erase_it->second->blob==0); - assert(erase_it->second->timer_fd ==0); + assert(erase_it->second->timer_fd64 ==0); + + assert(erase_it->second->oppsite_const_id==0); delete(erase_it->second); mp.erase(erase_it->first); @@ -743,6 +755,9 @@ void server_clear_function(u64_t u64)//used in conv_manager in server mode.for s myexit(-1); //this shouldnt happen } //mylog(log_fatal,"size:%d !!!!\n",conn_manager.udp_fd_mp.size()); - assert(conn_manager.udp_fd_mp.find(fd)!=conn_manager.udp_fd_mp.end()); - conn_manager.udp_fd_mp.erase(fd); + assert(fd_manager.exist(u64)); + fd_manager.fd64_close(u64); + + //assert(conn_manager.udp_fd_mp.find(fd)!=conn_manager.udp_fd_mp.end()); + //conn_manager.udp_fd_mp.erase(fd); } diff --git a/connection.h b/connection.h index 3ffb28e..2284de8 100644 --- a/connection.h +++ b/connection.h @@ -85,7 +85,8 @@ struct conn_info_t //stores info for a raw connection.for client ,there is o id_t oppsite_id; - int timer_fd; + fd64_t timer_fd64; + id_t oppsite_const_id; blob_t *blob; @@ -94,6 +95,8 @@ struct conn_info_t //stores info for a raw connection.for client ,there is o uint8_t oppsite_roller; u64_t last_oppsite_roller_time; + ip_port_t ip_port; + /* const uint32_t &ip=raw_info.recv_info.src_ip; const uint16_t &port=raw_info.recv_info.src_port; @@ -113,8 +116,8 @@ struct conn_manager_t //manager for connections. for client,we dont need conn_m u32_t ready_num; - unordered_map udp_fd_mp; //a bit dirty to used pointer,but can void unordered_map search - unordered_map timer_fd_mp;//we can use pointer here since unordered_map.rehash() uses shallow copy + //unordered_map udp_fd_mp; //a bit dirty to used pointer,but can void unordered_map search + //unordered_map timer_fd_mp;//we can use pointer here since unordered_map.rehash() uses shallow copy unordered_map const_id_mp; diff --git a/main.cpp b/main.cpp index 91bb008..dff93f2 100755 --- a/main.cpp +++ b/main.cpp @@ -5,6 +5,7 @@ #include "log.h" #include "lib/md5.h" #include "encrypt.h" +#include "fd_manager.h" int mtu_warn=1375;//if a packet larger than mtu warn is receviced,there will be a warning @@ -602,6 +603,9 @@ int server_on_raw_recv_multi() //called when server received an raw packet conn_info_t &conn_info=conn_manager.find_insert(ip,port); conn_info.raw_info=tmp_raw_info; + conn_info.ip_port.ip=ip; + conn_info.ip_port.port=port; + packet_info_t &send_info=conn_info.raw_info.send_info; packet_info_t &recv_info=conn_info.raw_info.recv_info; raw_info_t &raw_info=conn_info.raw_info; @@ -821,11 +825,12 @@ int server_on_raw_recv_ready(conn_info_t &conn_info,char * ip_port,char type,cha } struct epoll_event ev; - u64_t u64 = (u32_t(new_udp_fd))+(1llu<<32u); - mylog(log_trace, "[%s]u64: %lld\n",ip_port, u64); + fd64_t new_udp_fd64 = fd_manager.create(new_udp_fd); + + mylog(log_trace, "[%s]u64: %lld\n",ip_port, new_udp_fd64); ev.events = EPOLLIN; - ev.data.u64 = u64; + ev.data.u64 = new_udp_fd64; ret = epoll_ctl(epollfd, EPOLL_CTL_ADD, new_udp_fd, &ev); @@ -835,10 +840,13 @@ int server_on_raw_recv_ready(conn_info_t &conn_info,char * ip_port,char type,cha return -1; } - conn_info.blob->conv_manager.insert_conv(tmp_conv_id, new_udp_fd); - assert(conn_manager.udp_fd_mp.find(new_udp_fd)==conn_manager.udp_fd_mp.end()); + conn_info.blob->conv_manager.insert_conv(tmp_conv_id, new_udp_fd64); - conn_manager.udp_fd_mp[new_udp_fd] = &conn_info; + fd_manager.get_info(new_udp_fd64).ip_port=conn_info.ip_port; + + //assert(conn_manager.udp_fd_mp.find(new_udp_fd)==conn_manager.udp_fd_mp.end()); + + //conn_manager.udp_fd_mp[new_udp_fd] = &conn_info; //pack_u64(conn_info.raw_info.recv_info.src_ip,conn_info.raw_info.recv_info.src_port); @@ -918,9 +926,11 @@ int server_on_raw_recv_pre_ready(conn_info_t &conn_info,char * ip_port,u32_t tmp //g_conn_info=conn_info; int new_timer_fd; set_timer_server(epollfd, new_timer_fd); - conn_info.timer_fd=new_timer_fd; - assert(conn_manager.timer_fd_mp.find(new_timer_fd)==conn_manager.timer_fd_mp.end()); - conn_manager.timer_fd_mp[new_timer_fd] = &conn_info;//pack_u64(ip,port); + conn_info.timer_fd64=fd_manager.create(new_timer_fd); + + fd_manager.get_info(conn_info.timer_fd64).ip_port=conn_info.ip_port; + //assert(conn_manager.timer_fd_mp.find(new_timer_fd)==conn_manager.timer_fd_mp.end()); + //conn_manager.timer_fd_mp[new_timer_fd] = &conn_info;//pack_u64(ip,port); //timer_fd_mp[new_timer_fd] @@ -1469,22 +1479,48 @@ int server_event_loop() mylog(log_info,"got data from fifo,len=%d,s=[%s]\n",len,buf); mylog(log_info,"unknown command\n"); } - else if ((events[idx].data.u64 >>32u) == 2u) + else if (events[idx].data.u64>u32_t(-1) ) { + + fd64_t fd64=events[idx].data.u64; + + if(fd_manager.exist(fd64)) + { + mylog(log_trace ,"fd64 no longer exist\n"); + continue; + } + + assert(fd_manager.exist_info(fd64)); + + ip_port_t ip_port=fd_manager.get_info(fd64).ip_port; + u32_t ip=ip_port.ip; + u32_t port=ip_port.port; + + assert(conn_manager.exist(ip,port)); + + conn_info_t* p_conn_info=conn_manager.find_insert_p(ip,port); + + + + + + if(fd64==p_conn_info->timer_fd64)//////////timer_fd64 + { + if(debug_flag)begin_time=get_current_time(); int fd=get_u64_l(events[idx].data.u64); u64_t dummy; read(fd, &dummy, 8); - if(conn_manager.timer_fd_mp.find(fd)==conn_manager.timer_fd_mp.end()) //this can happen,when fd is a just closed fd + /*if(conn_manager.timer_fd_mp.find(fd)==conn_manager.timer_fd_mp.end()) //this can happen,when fd is a just closed fd { mylog(log_info,"timer_fd no longer exits\n"); continue; - } - conn_info_t* p_conn_info=conn_manager.timer_fd_mp[fd]; - u32_t ip=p_conn_info->raw_info.recv_info.src_ip; - u32_t port=p_conn_info->raw_info.recv_info.src_port; - assert(conn_manager.exist(ip,port));//TODO remove this for peformance + }*/ + //conn_info_t* p_conn_info=conn_manager.timer_fd_mp[fd]; + //u32_t ip=p_conn_info->raw_info.recv_info.src_ip; + //u32_t port=p_conn_info->raw_info.recv_info.src_port; + //assert(conn_manager.exist(ip,port));//TODO remove this for peformance assert(p_conn_info->state.server_current_state == server_ready); //TODO remove this for peformance @@ -1500,30 +1536,36 @@ int server_event_loop() end_time=get_current_time(); mylog(log_debug,"(events[idx].data.u64 >>32u) == 2u ,%llu,%llu,%llu \n",begin_time,end_time,end_time-begin_time); } - } - else if ((events[idx].data.u64 >>32u) == 1u) - { + + } + else//udp_fd64 + { + //} + //else if ((events[idx].data.u64 >>32u) == 1u) + //{ //uint32_t conv_id=events[n].data.u64>>32u; if(debug_flag)begin_time=get_current_time(); - int fd=int((events[idx].data.u64<<32u)>>32u); + //int fd=int((events[idx].data.u64<<32u)>>32u); + /* if(conn_manager.udp_fd_mp.find(fd)==conn_manager.udp_fd_mp.end()) //this can happen,when fd is a just closed fd { mylog(log_debug,"fd no longer exists in udp_fd_mp,udp fd %d\n",fd); recv(fd,0,0,0); continue; - } - conn_info_t* p_conn_info=conn_manager.udp_fd_mp[fd]; + }*/ + //conn_info_t* p_conn_info=conn_manager.udp_fd_mp[fd]; - u32_t ip=p_conn_info->raw_info.recv_info.src_ip; - u32_t port=p_conn_info->raw_info.recv_info.src_port; - if(!conn_manager.exist(ip,port))//TODO remove this for peformance + //u32_t ip=p_conn_info->raw_info.recv_info.src_ip; + //u32_t port=p_conn_info->raw_info.recv_info.src_port; + + /*if(!conn_manager.exist(ip,port))//TODO remove this for peformance { mylog(log_fatal,"ip port no longer exits 2!!!this shouldnt happen\n"); myexit(-1); - } + }*/ if(p_conn_info->state.server_current_state!=server_ready)//TODO remove this for peformance { @@ -1533,14 +1575,11 @@ int server_event_loop() conn_info_t &conn_info=*p_conn_info; - if(!conn_info.blob->conv_manager.is_u64_used(fd)) - { - mylog(log_debug,"conv no longer exists,udp fd %d\n",fd); - int recv_len=recv(fd,0,0,0); ///////////TODO ,delete this - continue; - } + assert(conn_info.blob->conv_manager.is_u64_used(fd64)); - u32_t conv_id=conn_info.blob->conv_manager.find_conv_by_u64(fd); + u32_t conv_id=conn_info.blob->conv_manager.find_conv_by_u64(fd64); + + int fd=fd_manager.to_fd(fd64); int recv_len=recv(fd,buf,max_data_len,0); @@ -1572,6 +1611,9 @@ int server_event_loop() end_time=get_current_time(); mylog(log_debug,"(events[idx].data.u64 >>32u) == 1u,%lld,%lld,%lld \n",begin_time,end_time,end_time-begin_time); } + + + } } else { diff --git a/misc.cpp b/misc.cpp index 983a647..80c495a 100644 --- a/misc.cpp +++ b/misc.cpp @@ -10,8 +10,11 @@ #include "misc.h" #include "network.h" #include "connection.h" +#include "fd_manager.h" +fd_manager_t fd_manager; + char local_ip[100]="0.0.0.0", remote_ip[100]="255.255.255.255",source_ip[100]="0.0.0.0";//local_ip is for -l option,remote_ip for -r option,source for --source-ip u32_t local_ip_uint32,remote_ip_uint32,source_ip_uint32;//convert from last line. int local_port = -1, remote_port=-1,source_port=0;//similiar to local_ip remote_ip,buf for port.source_port=0 indicates --source-port is not enabled From 2e6be9e1597ce814b23b30ca4158f9021643192d Mon Sep 17 00:00:00 2001 From: wangyu- Date: Wed, 25 Oct 2017 21:00:10 -0700 Subject: [PATCH 08/72] Update README.md --- README.md | 12 +++++++++--- images/udp2rawopenvpn.PNG | Bin 0 -> 44610 bytes 2 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 images/udp2rawopenvpn.PNG diff --git a/README.md b/README.md index 97f1a00..520365f 100755 --- a/README.md +++ b/README.md @@ -1,9 +1,15 @@ # Udp2raw-tunnel -![image0](images/image0.PNG) + A Tunnel which turns UDP Traffic into Encrypted FakeTCP/UDP/ICMP Traffic by using Raw Socket, helps you Bypass UDP FireWalls(or Unstable UDP Environment). It can defend Replay-Attack and supports Multiplexing. It also acts as a Connection Stabilizer. -It can tunnel any traffic when used together with a UDP-based VPN(such as OpenVPN).Check [this link](https://github.com/wangyu-/udp2raw-tunnel#tunneling-any-traffic-via-raw-traffic-by-using-udp2raw-openvpn) for more info. +When used alone,udp2raw tunnels only UDP traffic. Nevertheless,if you used udp2raw + any UDP-based VPN together,you can tunnel any traffic(include TCP/UDP/ICMP),currently OpenVPN/L2TP/ShadowVPN are confirmed to be supported。 + +![image0](images/image0.PNG) + +or + +![image_vpn](images/udp2rawopenvpn.PNG) [简体中文](/doc/README.zh-cn.md) @@ -226,7 +232,7 @@ raw_mode: faketcp cipher_mode: aes128cbc  auth_mode: md5 # Application ## Tunneling any traffic via raw traffic by using udp2raw +openvpn -![image_vpn](images/openvpn.PNG) +![image_vpn](images/udp2rawopenvpn.PNG) 1. Bypasses UDP block/UDP QOS 2. No TCP over TCP problem (TCP over TCP problem http://sites.inka.de/bigred/devel/tcp-tcp.html ,https://community.openvpn.net/openvpn/ticket/2 ) diff --git a/images/udp2rawopenvpn.PNG b/images/udp2rawopenvpn.PNG new file mode 100644 index 0000000000000000000000000000000000000000..d66478e52f15fa3b6638fc2732199abdaca9e98e GIT binary patch literal 44610 zcmdpeXIN8N8?6o_u|T3@0i=nH5(VisR0Tnb0wN&NOXv_v=uJe5bR;xsVkn~Y5_*$r zLhl_ZL0afNlzY&bPiIEw`|hv%Jokskpl~>6@BO}ey=$#^zfgD}MSlA7>0`%^kxSo` zczEm>3HI2r;}=en0{^mB*LDZ^>$vShsXNEAT4`p1FMc(;egF2cW4R$`_H<7GU!StN zr)GQX7`XQ6&+$gYTZ3cAGW(<@Za;F=B2<8)Y5JV5ov!+P#mPc?eq(53&AD(sqAOe# z!+A~ije+`a;m_`#xc>C^@6px2UVnN49WCK`viWzh&?_&*46gefi$3+smEVq^6##eY z7_uJ^KTo=?ok(mGE!MOxODjz?DmB`T+iC3^;XAOK8+`{;GHD89luAxXx%(CochVA^-z|(*3`I~0J0l;`QD!EBD>Oa*CQ(Wc ztoN@zsMZ##%Y)-CQE+vJQk($gJ%d5tdj0frl^(Vppy+eTyC!gY%K%mL$dJmUiK}Zc z_9CSwm=bO_7UCr-K=&^<0Peh+B;LweFU1QjHgukfi)j~Mpvir8gKu)AE2Xc4Tb;MS*Zy2>>it+_ z)Eavz`d^l*zg|z$Yt{;0TXQ-1OV76^cgYS?`rNgXxY|qDvFwM&I5~lTncX*4b|*FA zb6s24jJrH$*o+UZC<~@PnAmu3j${wfa|glt#b1O4yE2EjBB=cBw15%dwS93>*GP-J z!`BJU>Gvk}BFFQkHcjKK|667{|MhqpKQhy(Z&&SZbL>a z6&5Xeyk+Upqeo5cN#bRlCa6i>lQ+3}cmyU~FvB^zUS*Ax%*UB)+te#vo%;M&UaYbg z6&4oSOa}3la-%lpQ}vMEA=G@Wh2GqvKE?v*jUdkLIz-*E@cF(og>Vy64;b9i`|ra7QiqfS9vn_ezNcJ6gDSmp;8ths(Pmr<}_mT%Rv9Xs1op*S5c-&|Om z=wUgIZ_KOoo^KI*qP~gZt2951NwWlK-LukFzR+oHx`5EA%Mt9$VAb=sy}y5k#vZdC zWaH%IROFgGP|X>9nFqTMI#F=EzSGOJl7dNl{LS@_)nee3#%p#8 z4?#b=z%d-r4o`u%$U&~LcQ{`u5A3N&bjJ(W8a{mTwp@N)-%Xgfkl(5ueYosKZanJ; zvc9{va9>Phe{&_~=B0q5$BjopJALhHca7N3qA*OJc3~B+k+3j-_OlJVZ2dC)cw7w+ z3H3XQ(nr*I7N2vBlErN^nTaCSA9+`oXVcKFf=lJ$DAHZRB$qM`hO8b&XN(g5m(Z&h z>#dP9Km^*L43XkFpRerzGfH;veMSb^+|$kWtT9ae%oxNX%HDUdk*TxUfQU1+xG?Yd zT518Us>HbC9foq zHuJ}hby|6FDL^NaoLg9LR1lTZV+v(n^)7}7*WSM>6=D}TLlx5y+6yfrypO~PD+}ip zCO#wrO=O(Z~rWb334$ z}7C8Ji7Ib@iFr-BVP+11@ALZh8>8#kGJ3Tkyu`O+(ni$vqqb z7DQZLqQ2iKS0eASKZ(SKPOmRAqKZ0+P|G z>9)77q5JvFNq?LPp!T%Q+`yop<;*a=na_cJN~LjjU!AN&HhbSDoJqd*BNf~$h3Zze zLIX*lO*ggM`mACrH@)-B{dDzm=~umk@XgLzn}U>z{Ap{0%OpXo$EHTlbtT(L-TnMT zMlu)CPxdc!qzHup39GFzvHS@p&MJ|HQdo6PYv{@?bzE{qhDtDRQ3)?+kY|*Z3(LA} zwycjR)BFMM-eo-Hk5jO}>zq{v!4KJ8)D%{G|Do!W8w8%9PQ{_Pi?KJsvieT<+1bG7 zYCSW{QVQRRMAQ40_<6#N$x_0{$S+SV(y-DWtX#~SwRONAP*2~Rd`Y|LK0RH#(K*~c z)8Ig}tgA(LTGMyGuPxHSL=d zlPn%bj}4o1ly6N{+*FtWFi#`s$NSur5{PCgYsU-sQVuNLkQOs#fDUwtF+qV=e1aqe zM1H)fT}^~7lo_US@d~=H`#rifbUlcEF=E<|n6F2`YT7u~x9VuoOk9*8jy`54H{1Mm zZIYdWL&3L|(mnsm$340LuuHkp=Y<<9c)r`!uH;SJ)x_{UP^C3n#a zN$qy86@wu^UP(=9U_+E_tB21d!|~QLC-nFa*s~WKDEF4-vqJA5BGVQsww=;lO<#0Z z72bWtM~@1A;-;>U$^jrhD3aC~HR<)^7+Fmx39{kjXS?9XV1Vk|uiwa1Xd>II5wO2OA+G!cXku_FgZP z+4ww?a}=M`8e14Wi!3N4mW8_+T&_KfG>upmRv$b~hOgH}=!=bEei7fXemn!)mMnq0 zIOWK3%$)V@zAa6Q`o|?kp7xHUz#~?$03FKft}k}0s3`%LDkIRmGNhieuTViF+u5FRV8E72qq^|Z~UUgGz{}~sytj*=sWKwwd?SV1aG94TOOvTc_t(I~r0jf9(f7cnY z|Gu)gu^&H`D@=)lfUN&NO)-G({^ymo)9xubAf7ZYhNhwaak>KbRby0mjZ;#SFPIw( zqyo@o{Ps`NkQh3Sto6)Y5hSqh{kJ&3j5n~-0suKs+W6k-^Zd8yZig~?t=$QO0FNSk zp%i$Im7k#Too?Vh|DO*n<+IcG@83U)oB8>9uUYGu0Lq+SVq;^yoQ?u?fokVj#{ODZ z91g(WK_aXX0fX#_2wB~7FFFL4xqtFisf^}nXO zzr})_FBU5!ur+KOPL`Kj6~sAMx-%WCIrLsN+ulUjbMo&s9)P5Na+{UOMh7bWu{b&r z*T;s<(c_gs)yL2Wdo9mJ;Ks)M4fE(-0pjZ)aiQn9Ibc-Q%;1+F?H*gnQIMbZI$n1} zKPT^s99?q)gQj4+E*={(GMA)zm@&6FQiktVlDC7)$jFoiPTfe0yQ+>cx3+tlpcniL zEaP$Rhe8XtlxJhSIs~aUsJcMA_I0l68MCg``%jYzQXobO|LSj^Z1R z_D&@kT-jo5NI0m$uDqsf0#XMPy1&tj;kzVK%V#U%rep}045aMHq**;ng7vZQwjT1l zospGgk6#(GU#{ek6x^hy;WdB!keVIW1nS(l2y?71&GDd=I8;3AT^Nsrdd(IbTM;fG z18UviE>FprA?a^>X;;k{LQ)z{0|8bFkQFWv9ofIjcS75SWJXHIxvcMTF&a0t^O+ig z!&DR%8E}!eY^&VDO*YJpXe}C-%%+=T9)Os=iO{aA2H zj3Oqw-BL|WtuIDxXq>qJ;ofDPhm)K5G^!j{8#~DXcV9mtuIdBNpp*{iXAiAoeJJOOJTmTpJQCp>?U<^i)h+c7bstyTSk`Ii z8<@mo@CUsd-j2%IPmM*6D|%5Lhx=O&^|MPJEUa|~le(kjPMU;WB2RUs$?p2>gK%S! z&)!#uD1juexG-50`dyCI5iHlB#OLZamU1$rnl*MdLy6O816GLEM%c@)p z9%G+gqhWiiYbwTqv?KBZ2zKYPpep)%eX2-$oynS3sF(Y&h(aF%$8Xe1lXe>_Qm41_ z>HPA>omjt`th&`0%a}c(r@*FQK?dxQ(9IQ{?=~pMoOniitt8oOi$-%n*rDjA`x6Tb zi#{rNmD~jtCIhV&DA5F?Uytyj&-YOH#cMV#Wu7@g5uj?!`flGr8i6$*3U9znQ3QvZ zx8(GzAhKx1*2D5+e}K<7XOaDdW~xPmimJ>4LY_q$KuuI*T8fp^%FBm)8kgEDZQP*J*!gbr;(7K%v7EJp59+e`;qvqZu5>8w6MO@J6= zXWc2yRI;DCVT4OCjd=s?{07uVDA3>-I+EtOY1>+d`5G7yIB0uF*!v z>6q*qkP7oiXsX;{Q+jeXS_&YNBXoY3VJ644=Vp;``D|+J%fVcN%{v0O4iUnI#Sp+9 zbKZlw++5hoq(B$kS!51#?!-Di?Rdw^*%8FxLH*_}_k<2)&i0<$Z=d?^68(;kojb2H ze^r86e`RP13SioS1|TN}>d`}dzDGfIXDg65OU3hP<45!j@aByc98cXvC^?6dypD}Q ziGoH|BA@83`YRs2CM=WB?)uYN9XoJ5c?)C=67H~Helcc<@SpjlOrW%JV17e%lW%&On$kMsLg#d~ z7?fxxR`EDZfia2Q^)0rf{lt_V$pNyI4!)F1#bC}0wyBZ>h_}IGqvRaf`4~z zf`glnuguqT*W#J+8H->3`Tn{mVTCf=3FPP4e_5KDIr)VEs6K6uKpb%aN%Nnm@sR|4 z4X4+AU$li(az(ky6HEjyYD+gP zg?Do8^Hb+vHdAdXxeE*-?#J?G&XY0w?MKs-G$$lNCipt{?f3Q*H-sG)hqJgBLYftJ zH*R}W!4ay*tWOnJ(Vy9fFg-MbE%fK2V^1|A)@P$2Bl6~l?Dq<_d7hAU*joq%(u<0u zYgWZSTA>zTLk%?ONIGpf$=eb`b#g;M`XWfmXWm)w-o2cgGi4IvtrMr4o0}W1-~d=J z02b+(n3%8&v!2oP&5XJq206s>$fzJS6Ml_AH{(Bqp0y*PJE`|PIIXg z?2;Wn+X{`+*evI^=)uvyp)rSXNA=vRuX7k7J+E=thlUTOL$Ebtdk@}eYci3~Z_2Dy z-ZVkT1s72^{1xQk#X4(RZ6;P{jI})Gb&TAs*${AeitMB#K>h(l-$IG0kKpu>-KasZ z?*rgpJm#xizJT_6#}FGAc*P@;!ryaiXciUkuMLWpNn+d_;!q=7uee#qt`Xpc0BOO} zIJogLuttP#;_3HgG3iUN{YS*iX#YVk0}{gCcq9`5vAFeTWng27A~0O&2y#H8>D<_# zcO>*0iwSiQ&BT(u^#}nMXGGurf;+wqc`C-@c*4^IBBz~I&5CxNePlBF_@^6AE;`gZ%*l3?M3V565I)NoNkt!T+Z zUXKke0jo7vlRcd%nskeoo$)TonbJ$*O{65&cceNf)~+i3qa?qZ`wb96DbeNyX;fDe zLKR8H4XHR#C{(e-+14Qu27au$00`d;nvZ8oAkR=)Wb;_+|KE>1LRY|+J#(g~t zvUZ; zEv+5<_k;c)_TxzSc&_MVd*krD1KT2C8mDDz ziGo0CY#k}1p)l*S2px~oVAS5lR*|0`-I*V|K7CL6b0^%#vsgFa&11f0#qVDWP>BG# z?9VbKUimHe5u81)O5D+ zy1dazE=fH@De;t?M)ZLhbGOJzw2Ik7r7J@oc#ls;WFujtU-S;dd+7Hr-Mk}MGfl3>e~J392&i^+d+op9)erj-Ih zh?|cb=Tk}mNQjc(>v2Z}A@W|Mm6OzM5PNHwDlFIsZZuD zu3De6-Rp#zj9Q7o=E5g~-q$W^Io-FUa*Ne)9zR*K{Y)0Vy%UA?{;b9FIbmN`U@c7? zbg@mA<$Po|+bMFk3ghR)$l6=0bGS3ZWs5cfba{Un0@57o=# zn5ckTG>iK_q4k;^X`>fVGqax!%3Jbio_`F}V@I3g&xY@WzIEW-)=Dmtq$-Mf!!{=6 zUH;(ah57QP7)7l-gBR+@4?g8y{FLS$$ho?ptCe*8LL>63k6a+%fD&DvI$4MkW zLAgbePLmBmSqWo?1xv`L`cg_c!9D-|pw(?n!Ksh~ogmk7Tk5H2XJiZ(`u*#E&5qcZ zk4-5p6^Fq}tC$3`z)_k=Z!+P@^49~5E{(QrrDCsMy|RJ*eXhg7^eoy8kPweYmNWuS zvZ$;xHR3;AjMBJ9K}OA5wf%9x%bz0N;e~o7G`rL_Ss%*Anq9nZx^;>iK`9_}U1&Kp zLv3Go!jW-Q{IRg&8R3_1I~*AE{t)O7hCsP=@#6+XHQuFZ0_*s%f_M^vBSyH5-Z^R5p>Mx)uyZio-W1u* zBdb)eYr>Kp7Cbne;W%X#-W{PL<8oggz#z8YOEv=yPm9XPRM0fnu+eFLAGWUA&laZa za7c{1oHr9(OzEpslzipH5smC(2xdE@du5T$#uQb8MuWvzkHkQ?gOJ0OFs_ymQLP)e zC_Zd3ZRV-2VOEzdI^cRpmeHVL0-)(k{r<1iX&rb*uVP(U5?O>T^Q)%l9hP^?@E33{L?L9rx~uS zxQ(%R4>?j8AD7rvEesD_Xbu5Xb1_<*_qD$CydM$nN|(5s7~B{1&8C>O2Uvr8cEx z^u6*5(jh>WWze6chL06orRRuN48A;!^fN=y;i+R|izs z=m5&iX3gt`2umQlX;QmAXEMw=7v(oe$)5;!Us zGt~Z=2->J^@@n6Z^sprr3?uI=rw@?I(c4!liOGuBL9oNcCEg}-zJ&g|ail$9k!IWvM%x*s3OSF)_o{yt$M0{c2CEN_P`?b#rBl&6#DX{jE z%F4>v%^3C`-kawq#3<#*!GM&+s`vUoUWaCHuw%8dvAW!}4@Q3e1t4-eQ;X*!=&caB z6%mboTjz-I=BJXgQR0V7Rfms-Mzin3&VneoHcKH-c3!e!+y_3USucPMU2xA zR~aU1)|-*VoAKc7Ep@so4J6fmxm@)8N{*9lg@(sIozvb5r&``r4l44E+kT_OO+!HD zDmHy&EJt&4vaGG=Jp|`}aith(0tZSu(e2mQIo`elDD|BNYNCc<5}+L21qg%~X4*@) z-o4b`H$}An>bu?Ov6r-mt1^!aW87-WZ;NcgM({j**m*@+8RqmxUnp3yAv|}?d5tz* z+FSzrZXPc0l!-#67@5H1X|fO}FSpiIUt78rF`re*@iwXrC^6Hxc+C|FT)OWp9%<-F zh0ux&p29Z*`rEN@CNx_>FR>Zx+%ypmTf6g>#5be8#FiB)x>w7y+UHTB)yl8$ySLj% zgzv8VKlk8gaoM^aTr(dVKKCr9q1xBU3GkEM>11fFEk9Ug>%+~aEuqE^Ff6(m8>jk- zn}yiLk(AES1TEhLz>dICxsf_lMmB-sgJ4ramO_&zi&F52&jdT40lp}&pslg3r!Lwy z_xKoj?|sj~`)kaGeoX0u$U8oAFVabJU9OQ)tJtl5Gl`9Ok8j}{jclZIdg!BlR-SL6 zYXac#zKA(tX0)SDX-Tn6+e?RT6?^MxWm5?*U~HTKzja^eGD+qs+YCEE6PFwSxTy;- z!R*-ci8sR;=v|mhuI`PDS)da44AO?J8*j&OkQh}_rxX+j=MI;+33q#c)?^70-b?24 zQ5q9~j+N<$yDq-k5MEvDbN@Y@A_{xpUusFprPSNgC*6`j$om{N58vv?rP$Ph9;&K` zKT0*7e=PB+;Ts*bGnC;fbghnap`c-eu*{qQYL4zfwB3zaWTd4T^ z(U*gB??|`sE2a8-KC0uuRtY&2%ehY67|64W zeMIvPHMqNLIkcsxqj_fuJ7+qOYa1oR2Y;v0TYEs3tl0XM$|~svbYVC5)o?TX^YfTu zql*>0rkUm={=Q^(W3%csZSyY#W3JWLPXz4?sSaNh9XAF6-8WnfJ}#I)f!M6B<5p%agZiYrx09k z*jPkn-(J~5qJS2d9x8oP>EM7lk1)8zv|aH$hAs@{pfjqUH;GAPn)8s~6mc{9K!b3Y zE#y&txKeXf6*1p)c>P+)2(+iH2-(A|z3RVEykYc0q>8zWuDF1Cgdacq*`TgomDG-_ z6H5QhC~!9mIb)LO(?_G}utENUq=C?SrK&1jCbiN{;d+((m0Q~CN(^viuRevz9mb;l zxd&TvFGDRG_$8?jf#d3rzADuvz2n{#rq4(P>O^0h?jE%D=;|-5Xfjd8P<-`hy8TrV{Bw3&m<3Yfl16q zYBR{kq*tR$U2~V`&J%OI9v&_nfc^W*ajx?&#+oBus%)%siIJ|*M(SXEjW)?v}ebn9lsd5?>SH`77d1Bu~Ah~oD#DwPa^ zOF~li!>e33T#OR9iruLeqU=XRHS9;NQ_F5*+iGt~lrd@C5L~)^JtbQtzCT2{7`ae& zlP|m1gDm7A3{}ZF5M%n@*UjJ~ny)E%s14<&w6r9{H*qr^r>}9X=e#lM>kxZLpyO`5 z^?K8egr>928lup9^h$@mar@H)tIG|(crSm5f&4z*K%PTD0j8*w_hFJ0I_^sA%`vBW z&DGJeC0s%UaoFtT8^M0PE393Dp_J;fkt`7$TOk1(Naf4;$!{isrUbTW%(A%qw=aX}8*(+v9I<;vTVRUKz>~ z9T?focln?!?F9PG&S7}-j01D$sF6FN^&aC0)v_{T&O%1jU42u?DWCW`r-#|&PBOQ6`{Y!|bIoVhC zTK!RPh6%uAGaPvt;aPSwv$|Cx*0VfXRD$OH4`N`2A6k@#uPbVgjX%Jq{PM-QFg}xu zUJRTa^{L29)0Gcpk6?DlM8*3$kgiQyxop@Es1)7;OeTK1N;}sFG>ZfQZpEE!DXN0) zbGcKiH9GDC3$^G%gp$ec_kx)u{jDagv8Ztj)EJGSMlnVul*Gn;y?|8FNBM^;gKjv3f0b$ytMJEXH zuD%O&9^Pd_Lv8Pei{Gq`NA%qrP`6Fqv?`Qs>``?TgMX~;E6vB^Wwjy)v8!3mjx+em z&mN3rjhf@lm=v#z5fL_HBUM2g*M0c`CF@HBOg-^Upqt)!A)f)b#jW!-+%`mFIM9+R znWm^)>T@Z1c^y3=Bwws9;>xlSaoe3QR&&!tBF!%c!~@0F$HP9=17*6$hff8&$Z8iD zvlOrAGyXle_=()*r)Tj|T6WWCRZoxe(u{FmIx|9$dV$XtapkwJu8@$_a&l8(OZ-!+ zzuE`5@m96>>R|$e0$Q7{`=F`WwD-ei`bFk7#HbB5$rwPaIEvclNzB>)9N`$_#d1J&ccEci8g0p9P zj!W)94#eo2y;U0~cof2!RI$V*z9vr+i_YF&&1^Zq_;BRB$$%Be9Bg`5MO4MC@U1rY z8kK5hkzLwP>3dNw>b5J7m&)FMJCxFwNt-#sT2bj-S14Qwe%2h& zYPlXKiXg)eU=nuyCHcydL9i?5ndn~Pan$(sBu0}ZKGH8h4)7i6NbVfQ?i_wx+C0eO z;-T_V^v&{h@($#P?tguNU-P(;#s#TNEd0pABEI<*hq`6uii(3h z6^P1ce@|nlUcU7@*C#4b+PQ?()8tax4*7C!_Re~f%JaSA+HC>+l!0qkssFMYE$4&w^}H&O;y3?YiZJVZM~5+ zvIij#F|g(sVqV-q{@RqR_6{E>Ny0XPzG-_U#Nl0ZU}XY@H9O_!yS#r4oPSMnEdbK5 zeonO2ZJ!DoI4@sYxiT1=Tq3ZqY)bltn`#~smVXfK@k@{m)Az!3(&Hc-xNJ&!&f1AB zv8kd`cFoXBCK0&egY3-4V++GHz33i)SPJ}`}n6jMY4~A(RPoW*Ajwsb+ zrIg8!WB%~_WWr15^~lHf zSS>dX2W9Kezw+3S9hmM8*22t2w#lGcbGvHcLLMGpphl1b%3PJpUU~h6jasLqW?r9?vT1uRY?6&N zf2iH^M?!L5l^x|XFktGUT@hBFe&dc96w}P8E-fw9ai`hjC1t1BP%2zmOmM(+b%`>1 zh)yoS7kf);INu8P+xdzA)d{HpVw?l3&`!5_D7R8MTQAF8;p92ocM%QqrE}+$#>qW? zJIQeVjb-I@{d!9m9%oz0q8-1c?4-MPriRm60C=33fZYlc61xCJzz&9=&H^6jO>S^- zFkqwwo@71fq90E0&KE;y22?u?3HUuzDUp7)z{*JwcA2U>FOM9?Sg7Y{+_Vw;u7L`a z4<5oSp+F5HS4Fow)N&oMCRL$b?v94Qm@D!I_qMu5{wE!;40p z*?=(*_pZ>c`Fr+4#gwSb9* z;4RtT97@T^$l!{YtWj7v@=N_!Ya*a=?+V~iN;D1&{T(sb6&=8O{y&&1{SP{i?-WlB zTHbg9*ld7qloFv}(D&Nme@vE*I-N=H-pK%+I@5l*9?s)m)X{Hr-mdJC@2!NmSXKrU z^;M%)9#uF%uLZ{8pXO4s>$KbKY{6e0AYYW3da;h<#DXq)(F(Jw&G5uM30{lAsa0Tr z>W>V^NB-pR>`?Sx(!QOY52-|4i_!ai!mNKEM|#*NPt;PyRzjTBhf}NGY_2uu#wb`d zW)j?6R$l+F!_uxhR_VrRIb6&dZeG4rNi^uo(xidJ|L;Fe7%b#O&a_)f?quY*z669Z z!2I~8|Ho#(Z^QWI)9w>cGTY-EvC5qm1Q5Mr+YNjM04tv*(n#|8#1D)*q~Tydr3^bS zFVxZDF=jvmXgS~C@lCcJl#MM)ir%dNM>AAgzOV)O9W)MU0F&N7ZB5&haqAa_OBeqa*&hByEGDr0t!WdR+=IVFMQMn)PCUTzl-vKY0mA;lK;cdZw)MaUDn=jC*^8 zM%hlPKeBH{bh_oNu@ttynqt?)_A}!|1Gv==n=|;Fz4~&-Kj~TzF>N zs;f-R!nd{h_wMA#X@CuAU2O!@7Z9{Q)yn8!wAO={27dGO?VQXj;?SwrJ@F>~t7D>4 z(cQW+;H$|Me4Q3d3;SIuRnEGuR^bl*Vc6tfz3*=6wLotllqu2GhR=%zU|J5{9Hs@H z{O3XLc0+x!b$FnKh^Z(Xd(eB-+5vd~9cS%a{~2(1ljfe13^64*-l<$qVY?PHaaM5} zGh}HSWomThs|_(q>mMdfeZX(>qSm4}DX1EGJcG-S0``Auf#5mDzLfKhdi z5&+zLimJQ4nd)#r_2?WO9aR&w{i-$oVC{W_Re$1ygYM(Y{dHCCcwr zKF;;LAL&Ap(?I<7jtu92Ga3V1fVj5M#^o*Fc)%@cGnbxrJ!VN^H%`E|ba!j#lNY4a z)vJd*Vm^E2scPusD*j_6IW&*yl7r|)M^h$=Eqr5f9lI?CLeD4utaShjUGD7Dv?tmw zgu-A)ofN=ftoWlH1JG@r9(N-WifB8uuHQ=$XAR_>iIN2*dk+1EU+r>W!ZE%4^B>4^ z&Q+l~HhdMq^~V7t+8}<1(IAp{R4H zZp}!rZ54Q^sY&Q`eGOTU06cMS<6WPMLb%rUIq2?KANxk>LV0NcX>TeeO3NlAGn4Sg zCi>6K19;(^w9aOz<6JnyKyk@|K+`6uR9pEo_NdB|coDZ!S?x;KlI8?q!SswVh~CZ0-IXTPLDxz%o@Som`XE^quRxQ^_}Tkg5dwVjKWaYsd(!}rV3n1X zIV}dcrMP^o!(>2Qg_U6>cV^QAZ3;5>H_0<%u+)h1j`-Wl9pQ>}yynrwFTJvc4_)+8 z;?{tguHP6;P`M;W;X4a}j4x{&;466f(5g25aRuu$qNRa=VO;(t7$Y1IdB%eJX=Qs& z$i<->)gfnw;(@Kh&aE+Kppp`TX^|`1^C^bCW<%A#Pg))ceGj+}IdXomsT_qW6td<| zcjYcF6_)dB6pPw#-8JCqX5(EGcd`yUT{q8daR2QTkJk%Dh$t7axlYoqI^&fiWCOgcEweF1Vz^#QFyISo>i0x!!6A#Uw+4@B`ms4xJ&F zi5E<;MZm+y6|wf=XP9dicz}C{$C|*cdj$Z)00-IFpY`>+Nuxp4IeQj%@=QvMbdc@Y zdHTn@7WKmDKoJTyt%XYBCn`8lsseZsuqZq0qt4a7xf`HSYN2#zh;qn&+k|vTGKrjV zcX_DB{=}?b&6v+KV+UZneEezC@mYR`IN?YVTf*DE8^%qJ`_Dl9}vJ?cZd@kdNP~0pEFs7e1W-8dP7l&9= z<<*-@j5v(B^||fNLO&zgbVLXl80}VV(nO4q;?)NzNWC#ERd0CZDTl+S>f=&n@>Emh z3YW^jwhk@#Ik86&N9T*bvcZQ+KDmC&+)vi{$X!Va0~$?$o~*iS?||+T79_3K(B7-P zjqa+*s`$+!PCG*Pe|lPC9{65lR%w!Eibo-@Jm+F|k4aZbyN*x0=}U4qE=bJ9xUbWt z^SIH4j25FrHw<$saO?xjHh{Bz{D8Q$bdyi_!>@f5e(s8-cA4a6Lx?j*T5n8xD|>i$ zEhsHCC2&{Wt2Cfsz+?GUW@Dx`C!URWz_{fiV-q`^%7EBUCPZ1ZDez)vFc1l{{sxI6 zS$DxC=PMZTJ}sBbIM>yWt#Max70~8l_BQtkRK3^ecKw_WHZ6d@4o!SelQ>mXh{6+N zmzdx$a{yF?AI+}gD2&_`D~0B9ocdj4M^=zV*BSO-)7r-~R>l+oyyVDEa)3MgN2!}D zwk>}fDhdW1s1U43=ohXB!nWsCo=1$(iP39k0D}PdxwRP4^+2%Y+?I_uHsxyLe-5<( z{x9FK#fB8Ix4k0mv>k+`6xnMCUqa*Ci!_~s^3#jgDGRu&MKa@|fX947p>a^Gv~V)b zvp-U*?QAU+F;+Q(SC88+fF)rvXf=4eaPJAt&hPkxdN0ilx}ShW-!5|B-?YBoh+wQM zo;+?bZet@fbI$0)zEJBKILAD@OQZSDTzNLOZ`$oX0L^}B6n_>+aRiOFzO+RGZqXxX zw5;ta7>eyt%I5m6s5yNXwf9%Q%b8y5<9Un zrvAZGDdRRK#-Is7){)T?+cai<>)owieFyX41+v)$9_L=(V_c?q^4_#D5SWe-n3u9c zXjE$hVzzbeIo-pLPDwyT0X)Y)OB@i*r*Z)I1RJw`2Q~EAXLYV$yv`;wb|LmS`8lKe z7HZ8XLw!`H@H#bTQRMU%`Sb_qS!TzQa6}+0w0Z2`y#kRVrb6zQG z#92AZ^^d*$=)eu#8D?}~e%~1iR%BfY>WItv&WZY;YVw=n_7`W~cV5G9EqlQ3TO4&p zp7X>$*KgLJK)p*R%~WZP(z9h&d*av-Q5L%#=}3mrvS$<`$vfI zdgx@5xbM$lBG9Q*Uc|bNZ0G;vsIV>xDpR!rEOGlst`_G%sW-9C56(xN6RUa4H)biBsP6+I1vIpFHT&&CJ^86$2&TkB9XX zn#c!{n;34~aRPRELaF@lF3+2cZ1k-%{3Own1T^gEH|@zlZj7q^6M=gsi%UuQy4<}m zv(@;McLPTBP6KXxA-@eq+YFtgjoDtuRYxCJTr<+Zn8)DwNci;X{E}U{UPK}cyLM@~ z35^@Mkg;S};3_^!dr>6m;^;_>3|GO6%7;|&01lZhh60gg zYCyYT_nSi$IA*$C#2XarT2I!G_n-Pm?|XXZldey-Kw2 zRWm9%9E>&DxSy__4NxsO%2&7Z_l_Eo#tc6#pOPRJjzuCs_xJ^Y9c?2id&2~zn7+H* zHoco8(wzKD2X8ZU4B2&G6aFSQO(q|+&}o*;NN)m#NOaxdxNS=b52$Yoh%6GxbR+qO zFDL4BhF;BJPRuaVX2`oP2> zS|l^;h7R41)TZB8OMFd*a4nJz7AI}*T)1+x8^l_%2pqEk(p400j%$tOYuhL7G%>`H zJQf1vH=OzMWH2j<&ZO>#=cicPLikE8?`#}3l>gBxU-yEc=gSk`88Ti72hOh$YOHYC zvQM=UqWl>$X4l`&c3Br)60vIcA~`o!uJ)uGN`x;QBPAs_*$$+W*nvqv@;VDkj{3xc zVX0m{MI_g|Z&OvZD9~F6a?Tz1>xukwFhdtpa!jJ(%KB#DDgb*Lxv;0Kh(N6SBVqmJ z?7OxNho66ImGi+KI~Wd}9ule@rV+47CI<6%V0!Y$#JF1~YCjiSPnPahBfK`wIcIr6 zx@s(2#MHWTdH0Jm$7Z|I%8+%>`*T>2T)oPT*`OzflJ7qknXD5@-fW1MZg1>cL}iBq z4A;$V-XnA5kCK*DE`ahBI3$-8!4bJ6(K9u_o%DL5rM0+X{Ff)WqiCn*V4e2^C7A@;e^oFn-OSg;r{b5%Nqa26erEI=(bEZ}3rszdw~ zbzAcaH)P*+p0Ue_^|9N~X0nUO9eFoOIna5T&m&X`on~j39`ORT+jrAdd-jpBsi{rfmiY^EO{g%d?Ku*aE4-C} z;RrxJk#vu5dT>o5rs%b{K~5&0WotM;>GUzM2Hf{OvU&q&Ds_6EZhiI&tX^bk2SP#D zfJ2z)Kh})nlPbii+c%d;CC`6fn)&IXa&2^$F@D#ctaL zj=6HZY*@5bL34&${>!=4&Sp0Kea5yBhIi*D9whyPbXYqGk0fre4Q1P2NnT3c=j{Dy1LBG zkzhgftIG<`8USOR!Ji>ka2^{1uuC<3ShmIXv{gwpGFaWXPUrEZ=r~TeKV$2H4>sjZ zHi=gDb1ya_;mbzn?%>6nQ^3W2R3JG=fBOPCSZY8GD^HyflpesbU;3Uey#r%1pK+`e zIUQ`)jwRG2U-dB-W~PU8)00xcs;!6{w_QOiWT17plV9W5W;8g`2ZQEFQ|CPkdyeVq zfF)UIy|YK}rv-pW2O7MzS-TTEuxfO3mV*U1OsMW`SgV{gLa&g4U5k(a2vuu_Nd(!v z{e!^L0y?!pTFwMOl>C&^w*oK-erxR6kANd~WT)Ol?QJ~QnA3^czRPxF@zg9}i0`GS z*SQR-2=as}fW(vLj@iPC?)GD@zA_x*N*-rn(#x^%w3u8d(#)grwg^$le1b>z=juzT z#?C-;c=wE0Dfc#$Nap&lVKKt~mTP;(nUHE^j%>C#heQ-^_n5*Z!@i|6CdQ5O0S%K; z9JE&W0BuN}gXr~WT^3nx-Wi<+e$8?_JG<3t5(xi9V$E0FQ7xPO_hSVB8V3~_NlNeh z8>kYXrhz`?qmFFv3@;1jHw8yf`wrY(J@lPiH+L!*w%144_IMRJhVY`3EhBePI058C=tOa74lN_x#cg?hkuO>GMLxM^IZ2z6DQk;QB z*KmGlr)qv()4bEB;rFUBGz?b<)gNdFVRwAa=WH*pn+%5pEE!%QAGi!(_qJE0SO-QV zh?Tk5JHCZy_to)AI(M>O!*|Y#`3rqP)8lz&+FlCf#jdL_m=dh&sLX*K=)d#MfcM{U zTL-#Q{nmBn6Lq!5EYMgdH$;7J^7uTpA=Sdn%#2)%yU;dt+G$+>hppz{AGJbe07wsI zfMfxT?ALbdza7E=AUfhEA^fOf=%|Xj1^&hne`$wb4EE%vTmE&#`wRsZsFjD+;NqCc z8YzypGxR^ZU5WFY9R>hr-yARiPc%$vrM((slrZb3ilF+rm;e%j;t54#_7W~JPyg1R z52z}mZb3{hybgwFes+T&agVQ?fwV+RO-&6fg8!AW1O}`7_79K30M_gyW#x|rCS5dy ziU{kPe?Z`*ii#28Q1Z4{KqkML45k(QIgI|%NPQalC@;ESz?ksV0=Vrz*$YfTHPGtRKSbGHlv(|i zHD_j4v8TeHaJlp=?t&NC`rbbdh&j^2?g+4#Hq$_k68U0Q$w;8hTMe2oLLp}trO#{e zJtGLP9sZ#}=KeB2H+OX6)DUI0Mz?%VLz&BHM4Q}U;NE^DOb!v^mzqhTt`Q3i;_23yxjyd*UvxbLx zDve~hdpkPL0jIMa3CX#?to&a8$7^9#e~$-{#SK#0381qx2QelBSVg*MfVNXAmMDK3 z$QKUf&&z^5t<`IoSuabBunVSaeXtD>+b-pUJGj1(9u0r5aksn8{;IcijsvIA+3e1y z2~O}Renp=^6Xg%GB``sVs(lROAnpgEr>Uvw)Sy|mU0p0K*-senf1YOqh^2#rg9iJ% z8^P{QKf%5KxAma}0jM49>$*t4ui?LnX-XiWv&QqinTsXVZ}tDW#=f0*^W)fP8>Ivs z;f%Z70NMW?p888^>e&7fkgjOAmd3_n&O`pG3uAFOyvrCdfl11QY@38bTWB8WjYTQt6f!0g)PdMx=)xI)@r+7-GmFzYE=aKl^>w`+onpSg>4h z-*d$o$MHLttYa2R%D&0zzR0V`ntf-3gik#Uw}##M@mEFrH`wF98r2|Z_$L9Yc3)j- ze@7Pn8$J0b759O+b&D#6XA3FCQfIVDn;46{#U&J^A1ei58JRhSxz56oj=ygfG zr_^_AR2Ujz{SHS(3ilnSuX7f|25ijg_(tOdu7dV3i6R*%2X}Rfuw8=p_t>-{7lpU~ zNBe~&)vIIO7~~ai2ANH6?vLE^R}EoR+(;w&*0x<1lIb)ZUFR&FXvDzQ!4no6$i_`I zmt$s@{&@6#tUjzc;YHRKe%>GJ+$J!qlYAs_-OeHPe=U$*hy76pBtCfipPqSo zm#d?knE9S_TN6f#x#Q}-eyp91VPq4V{OLBLt>N02Qitc<9fi`ITV`G7ViX$#n|Y!K zsOGAV!i5=P21IgBw_y_ipNRK^%Ooxho$;@xa;6X}3?GK>p6F)5jV@&!I9B$R4V(eU zsjq2DcX1rRYY?IYF_3lT4Cgybu*nR1vzGm#-3CH+A>?M-Q%1SXHVa#okWz8=vq{?oF{@cf~{1meE z;!PmWpsmhYgv`ij=IjMO$%b3yC+8@q1;oNW@s3ga{#7xPm2-rjbJyQMr=4%$CL=c< z0KgXc>pZ!)O-*w1-+hl_?;Jn!gH5kSzWu3)5bnVUT~Ix7ASOOtTG&U;=n3?6#iS$15L%L>p=v4Dp^CF>+3ELTF#L1H1ngl z3T3z;&-TY*sE7f`rvWNMl{jqP8)$V=FM9@Z?yIx4{-);1LpWQ(iV>Ht9e4z{nvO{K z_4l^|3zRtk%C7L+%0!GRf{N!wAynFLaSf;}g7!1o(CcsvK0lkwrMA_gn8?{j?(?QYocLKtsy{F8UPf}Q-)u0h~&70*DIsjiAbN)BCYTN z#!my#mswL&A#Yqm1yQ+m_{^L3HHiO@|A?ev&Dhwlat0$GHDo}d`J$~dwR+?H!9V(3n zQc6398#; zuHXfmd~piA7OPk8VkkboJErQKY3_T|eyl{F8ULN+~ zaFY&)jH8-BPth@^X6DB=F}H`Yd{>=|!lwNq#lczfUvbK>5NKAJEQu>o($hIYj+hq2 z`04A{ubsLkJGb=C4T{fYlXu;E*D_?|nEq|Oqkr>#`7I#B$ zmM$;!h88bcY(2GpQvo`(hfu-vRcRp<--i&-*Ynh$lWk84EOR?BifATSjB_>XCQ7`V z&iDYQ8vc{d5jl($pA^o>N%hlB@tmX0{U+_#_(!wHH z!SA>u_YLAj91J7cMBIyc+hU6K!-e~8YO9pQid{XwCv~xm zUUpr|+e(>r&vqLp8(V8QYmGth^O;1TdJYrEq5Wxl8p5?Q&3sXowno)D;W2m@r$6Q0 z@*l@-Y8#|1z5)US7H+6okm-ccE{%ftQJ^b`2`hPE=x%?C1ipL&()=F(MDKb+;EP%EwoG7k0>ooM+k#kfGhD z7Quy3s2nn|F~w6Iy$*cGI3nLZxpne84PgTx$exektx$tQ|M{Jks&n&-Gf%aZo9pl^ z&UT-%9hPH<9ccs&VX2qN3|tuO($q6G2vj1|vyP>%xCy>vS(#(NG`y825i$miV%p0p zMTpcJ`1zXe=(;;Ne(?)-rT)1n7q=GkR;>csaC7Ze&!OW3Gsh_gCu;@PS8e1(gDB_{jt#_tx%4F*|%$kl*j*Y@jW()Tve zIPw&)uplkhWz2FYclW`_40>(tZC&xW=(erW$X!UMNjQKR?WzeNov3~SxT0b!S&TQhAXvA1(;fIkcZ%=d1ZOJig zuD^#qDUx(pe=orAa`1rS_W!Y*NGNYkc+5}`JKYhz(C{z?@5QXxPn6tGOumPa38+c? zlJrGtG~M>wg?wcavLM~GA%$#)rIk5&N*6!`>|;_^7@>J)Z6*(yDpEzL0eVYfcQcmc zn0IX|R$!Me9mdJ=%Jp@QAq!-)!}UrJ_Tl~_K+11eC&UfJ(_yX1Z;a4hkrS&M*r6u- zxYfUs+uuB*H@0&U5z=5@Rz=(SIpw=(;@xAd%WJlE%C+wcNjgqHsbFVgweUlmf-IMHv+4RkK) zR$H|D?E3Bj6r#iSWT85}pRf0lYs-)4QVlbSFTLNp1C*DMR!u5B#%Zw(rgp;^d(VgL zfW{}RhYvWC_a0LmTy&iTE9-k-T zU#XPjJ>M}Xmiq6|yGP-p<~)(AcLEIY|iuLb%lVk_4xdlZS^LPMY-Az4`LxhFD5 zW3&9cm*Cmm?-Z#RWyIQu~_~|!uDA~&aN>0RKefhNPf5j@mRu&pYL&y_tkM}{v`AjQ;dUBMW4p8~;WW>}g`7~ze4R>smRhT$?T zT}(VH{v5SWer273>G;~(BVBG2$B*tHWE8)bp^m{j^Dn>4=VLR8yRpwW%(E+w|>Qxnw_-|l%Qa9FjO;_25D<;0{wKwmBnG~cZt z6yY{HT+*&qA!s8ASD%A$&PL>To3fS(4(`{fs2B_YZ<3X|dVEJ4$UfY864Q z5Y~Zk;Er8{o*2>`wV5dTOcV68&KntaakhW# z@GuQmYv{(dM>Sd6pM_K3K6#w?o>Qj^mn2T)35T$Q{|=Y=g;DI+YZFW?jwRX~K$97aDsLQt(NV-jj)cD%s>;*0CzlZ0-jqqQJ=@;5TO zbyQ>i!P9SM?td(x+*aeeNcH_^WVvrQyJdKK_sK_={?56SwTM$1^G#C$kCN<3S@t&PDLq{(;;}BqPr3)b^Kd#q(H>K*nJ{-Gx76H( zgvHBMT3#95K6QMysYLkRn3Bnf;s7K;|9n8d?IaluQny4E8ct;#)01A`NnoZp#o}0V zd=&{$j|`I2S8uXMc(v5y6qkQohUP;WCh4J3XYh9l{1SR(g3mauj)M+E^^yvJ)#Wke z>kEv_*--B^Kip8C2eKnICE2lH%t&)iqp7u=Oqb;s9wcYzr4`wSv<(qHz1);V+~4y( zXf%PSr#CD}G&DR242_^6^{1@3g&)v!z|(Oc_xcOXS0`%gikU&pw4}cd3|H8XOH8`n zD8=ZL9hR2GXSMqvz*@4{A(8NO?LLTZ=K0@bq);bDXs(0`JHDKb}&EH590+atN3rASOP)cog>#4_&IDytiMO7vRN}9gd^a_;Ju|izdDH|c)Jhw{?3}uvl($CY)EdNjA;1(AXD`{1CBs+@jEgj! z;-6vqx7QC>VHhWnAgz?Cr~O*Czjzk=`a#(Zev@?@-gEWWmCSx7!L?)CK0cPxjp>Xg zmAu8FDgCplnI|$FjX(F&TT^$!BfCvUSkm)tX#p`=pk>c!Jp+A!7R_an;cR`y>U2mqkoo{HkhJAlO-> zOvhOHg#($hhZj2M>*LD;I=hs&Ada`E%p#;%BV>*$Bo?+dDv~up`M$)xJ?6w==VLc9 zIQzDP2e>SNU>Fo~_!08MeluwE>Qx#EQ<^79m&ukHq59IHZg|3@8tF5n7kBn`X>G{( z0vPA8JJb&r7_pi=SLJ#7N$o0MRqOy1?UB^`ixY#)=kw-wX#4Aso8tZAie&j0dYSby z!HT^IR_qNx#=HhuV-gG{yVw?W4w&wSl6K0eG#<_y-_;=(j(FOG@f+H%>nb0V9fk`k zArVxZA+?OCrM=P1f2^A%?c#@>hn;o3N||J|j6%8zHz}j2(%7W-O(l0nXGLi^H~u8M zV3osSVwz~=`K4`h8jS~)%nE+qR(TwyV!c@`EBy>RwM7}UC-PhPsaVI1g1La#fy`7U zHyoJA{h^ZNw;dQ0CFQP7y&Be%&*-`FWGlLg!{ImzoG~gZucz4|x(o+_uMPU!fwFWVMSueU` z+G2XqhgGkT`iN_}F@tcd#%89aQ79QKk%7!tn#cGt#|}sWAf3j699R@y>JiU!L(?PVAO%ue~T;5cL z)up~z?3VPpV_}RG@JpJT@ghW3@?;+%&7SQ)y4?1GvT{hy=~q%pXeDFx__5xdHbZ5@ z@n1KP`IgrgO)_&0YFmpgnR_AG!*y3o7s7xAT#biYn-U^O#QN;DMT2iVAZzgR^e>eC zN)SZ7*KhdnIEe6-j)>2EP6)|cjb_sK@&1rQf$RX4yI84yr1@s8^ZFO>*?H};;b^z* zeq@Y|eXW|G6E^wVQSSBeyYu=)4qCupBZP3QEZlYP6moCHieT94zty%K9!=dYZ==;7 zzcYvdnAGE{>RB1?-eMW1*M2J>FE~`>Y2*X9^)!k_0WPZkFh`?t+?6`O(gaXYvmI6T=b&Or_tE1$j?_J!%8I^UU{!OLMbke z!_)2By=6LH34cKN5S_KTbq6uLiB?%iglM29JkjgId2^`k`>?^?%sK$Qlh_-@8A28DHvElhZl z*N+h9qU_}=KuD1}<5@1`0yf6bJ4s)Z@ZB@_v@CAhlyEJtsFuQ2fWq> z;%p{5qY^Kv$Kiqsqe~dY!$@t>K-17RP4Rm&3&BCrS+Yi}Jkwyq&b}~g7)EAI-?=_< z8H{;?!9Lm_2OgqZ=f@{KCd%AV!A9e3mik28H{t0OOlQr~;5R1N@pi_;=TRXgFy%)^ zK`#5{n(UeDAGio&|8iax^P^rt$eFu>z2EeNV~J$8JtU|FutZMW9Zs17C_gcVv(v^` zF^5>x06PiXM-EBBq{A&iLm8d*YbUvgk4djsi!By=V*^aeTVuN_g&dOh$3){L*H00j zPyg`;5}7)52LqUD#U2Bv#fYCIs!&q9-457B>lvuk^dEI-`|4E@!dwy=ba$b8e3d$I ze2FlK*#55XIAcJFPSaias<-;lIT8NEKnN`GDECd+DtHey4$e{wT`FExRE zN986X$Mskvh*#pl=vp-vHOlm9E@t3y^wmlRD&a2M&fSd>w5{KCxoE#>_3B$BDeIi`yjNjpQ&p-Q1b=4V3%c^-LP=d0c%c7i3+hErM?$nUmWlwgS(U&re zy)6s#!(PC%GpL`m=%W0#bo2|kAyqV2qQ&@3$_onWVZnXrcL>5cOMeNJn|SYpAYRxq z;PBw$`oydmzAAh~i$}prTxjK)^b@ax%flIAL0Q;>`A==i=3lizIca_kV2Vh0T zZ05T{8P%w9=jH;!QXikQ&2%ps;XC)t*#jHNzc-*a=AM}h>u2}$ozsaw+;pfyL4Wcb zn+N#dELk!UMY&I*j{y6y@5Y|RS-G>&_T{?o%oLtLCrDVX^N|zybk9m9VTzy{he?51 zJ8K3l6zeSaZ09qepDbQ{&vHKGf*cXJ^Ax{2h;xA|Xf)s9fuzl-OvW3I&cQoNVB#SRY|Iz`v_ zy^$3Un=r7vd{1bN&wS2x_vpmkNeE#tbRRpWOf7NPSz5hPqo`FY`S=^+$ZKc6E$8q_ zC!=3<6pybychz*lH)j@y3PVHB6=}~&k#d);WRJbIhn3B<1A6kU?ta;a2h%?}%b5-=VuGN)pl;*E4+=qmwtq*atJxWM)8 z*ed_8g%9S+fOMC}MRa|>YNk`95V0a&X*%ml7;iXr+V8k6f=7vgQ=iLy!Y|SX$5vmB zVz%4t5JBCsG#ZI^n|q{L)XkB1Gmt#Qb^ zWhJj=T!6OMB0rT}w)2tdVM9AkzVQ$Lm`uhxT+9QiWUS4dem@zQDVnZW?>?k6&b}M2 zvE7@WQbrQclI(!o^{FNt+P?3g~bO=S@ zDylRSvL`M}>V=lndqA(O2!+pO-I~af+~9VvbQ1y8oe^6D!W-Pa&P)H&0w1wE$U+@X zIa;cUpE93{-~PR%nXk{J#YM1L|9g-F5L)pqsI!w@_75`>Cmu+Ppe!x}Z-Ak@Fs-Fs z2YVQ3_bjS>%i77&AkCK!_Bge0(JM|HSY);ju|+iLa+^(zZ|8nBAkp2Ju9}!&WOxTJ3O#?v~-Q zSUN^Y8IvzC4p1H_@0xGA-5pbQ3A4XFg@$H2li`y+MFz*J21$6>ZoD6_)bx+ zK@%J*Xk)1P#*k^_wbwQ{W{q{+f1@_j5oT)@JmTP~Wvk=?7Sjf%VZd0ETtI&p1 z3)*tO?YeFHut8{JPLV$4&+ux(31 z@~Tg>9h;-;S$nY`k`6DHj@0jjyxuP#+ zpv3a>Xqz^IC6=pFh1D+p)+&RKJe*5HzMqJ3od3qF_{<=`_z&+oNqwev!thLyr;X2Rl!>Euzt@wP)Q7`>t1 zzOVY%P@jjc!F14OFh|OJ$&4@@pBk+^QT;I6Hu+}a3*pw+O(f1=j@0G&$N>@GQvHD? z`Q8Y7&>kgoIOR0~E4g7A|3A^}^Q?g`;<~XC-|6Olk#eKw4$c5Q11i@itCl$7Z8DC{GjE9GZVQm?hvop?vp7b6VZIs#Or418)tiVFaQ>Yo*8pcj|s!{5yYg zDaYLqn3$rUyDv-FI(!l=;J!bc15j^+ z{d{haF3{ekzu6Q>wJ;eGn2afgkKw#KU6j! zv1)0s^#g5meCrOZ_YfInz*OK|WD7G%vPG=ce5=@*aMyY==K7B20Q(+2XwsG}QCJ54_vF0+XZVZwumw3*4R@lelx#{p2hm`7>a*xj8@`4!%jifRKJZvssRxeI37?TbmlhB>4Gs~CUN=aPn zEfylyyQ#gY8O|q$8dGQj)(?q#S?q&@?Q-P!bDXH- z@Jq0kd8?!^Du2-r)@f1!5v=HFsNDrdQn#N}oij%TvHKz)^7j1Z!1rD~q(N<5J{X10pLlYi|&KBVC-DF=#>Z~K3$iD9qoU_2!x623mZ zTe66GNxB!yplgs(76xCVPxYh41f)}hT-scHTC!I`MhOiBV0FB$nwqbkL1~BpRZmc# z4y;F%lS;x#h9XJI+YMbzn~pnE^yp(3MWV?K+ezPygGGk}ouk=Q1lH~S@!|#>D)p9I ze&r2r*9&+b-|Q+uybSCP@l#1fZ1&V;!P3Rp`ctG!&DDZ<30i}M?e*gg3L*^Y_5%I- zH1Ic~*{?@xXm$8(#xAzyX@pw^dNSUdr;qWW6pC&$nHV+xANNT^`J4KgRQ5=S&GESN{kYy7cL|iR*2X2-@XIPNuo*SPd#5dhpRDvS;9F zO;An_;qf?4Cmp0;N-9%9MDY-NW(e0a4BVEdX6?Zf&x?o5RH=UAOEpJ(I7RD8U_GiD z5uuR9oh~94(G`(bw4W%>de%QsI6b%h<%^OPhxlY1zz`yuM{^P~?o=x`1ZFG|hXTZ9 z_bx^84<4{Zes|i8t}NwPH)WCxTr>CUP=Y^|wBu&)+R_yy_grZz6BdvlrWhvzR_TRp z6~12h`AQDAyJ_|#>xZAgL3j++CGpQpNba*N*Y7gj-fMQ=b6po4Qy;#lF_3y)^x_4u zRru1wWkkHu?Ky?Ca4IJul8l73sit?a)d_Wm9U{dmFcR8asbFqoPG zDEdC}_%15nXJNoLOKHuEMpEulToa+b)|W!YgVB88(tg|xA0$uM`>`Edia>B*2{ zc3;Sfp{x6+Q!DRy2UGoydYzln1L!$a)6@8yBRSKUzUaY&(R4cg4c)K(3 zWV|_T1D77WLU2s>LPnt4LDN&3b^0bMOLGm%lNHK^LG3^E6eu}C;FJsYJ)-L@o)(cV z_?DH%l+@99pK7m6G~XzMrHa$fcQy+EauFJX=pvJnRXD>nDzu7(9(VWP1qs)N$sKDa zd9$@qUQ>Udc8s~5a6NXhNmhSP+#GlZx+5tO8gn>-Vm6l$gmgyn*X+cJw_u{tcbd6J zU}7e8gyuzFq>6>Ev|Fy=>M%Q32c2@SO+>Z(ZFi1&se5@DH4U{#xq9(5wmxoA48sVt z6nVbq5lJ0?k(ggxDW?YzftM@E4|4-8o$Po0@qmr2^{jRDr*87L_fX1c<;ED<{c4-# zqRD1im7nZpGEDqUlWfxK=iHl!?>W9X7KZ(lnP_J)qva%B!8q4f?3Z7B34&i=*r^hI z4Q=NAylrJq1J40TkKNBv15w~W{hkk3fv=1&{Rc*l9-Qi^1)8g$uLYVXVZPf))SU~D zKkCU;^dHV(lciQ$_KLThzpQ)^bX{@p-&V#CwsOmOyo@W$cq$EhU(~0J`A=yM;k7JX`=87sJ^c z?pE=&<6K6l`&D<2ok`-#VPkW6sbVuiwKG$$t-j> zIlgea?OgH?>$RtdkzMZKiEwWlDssrsn^UjUqeooID~tiyCv zC91BJnPO9wr#n)Ew0%J}MN%xcmOWo4s*x6LrRxC9xHn~6ppbCmQ>4lvz z1Ddak*2hv_BiV8Am8Zl0^MpPbq1yKk&3n{lW1f|_yc|u5gksy0#KNWf#d~R<&_Uz) zQ%@8$5@1x|&yf(cNQDJMT{o>sFc`p;8`EgIjw8u!C~-Fa;^4n%3=KnY57R(@MAQYt z)Bl&}A(NveE%jVE{5ICJx0E?34Q&XxW3NXnX0YiQWG{2j`xrd+$#FQY0XkN3P_@-@ z=Z>m0xF>Ir)<{z}{i-FDWBf*?f|w)YPFDZPi~2pS6(C@v`eIuaLmtQWaLBclLV9Nb z|2VTMOIKWcCx_XbPIe7#gNYgk?&r=Q&=*msIOYdc&v<)8^S$`fx0im9T^>i9G1u#t zbGa}FK@oh4s{gy+vTYR;n7BgwT`(inlD*+|5{2_6aETplwdcK&xL@pkFcQJ@m_b3% z^=m%O*%@Za_a=r7r(92DDm`2i?@hUZ=cbb zwkGVyaolCO%C~Zrv3$nI5#Hh@ze+(E-cp$ITm4Y76`n8t;0R3@7lezT2m~zJ<<^m# zKrap8!adE@eQmM)z*0JcCX|C05K12z;dnQfjM&_~Vo$pVn!5$0%o})@3ktCniv04Q zUwKREYaT_WG;l0k(fwj?Ib*iU9%F){AhO7dIx2T8j%;7=3g4~6xmStU^J zmC8T$uBp0YizcXLj0rf4@l?Rtq@Mm=d;M#G&ZDBGZcC8dUBIPEsh;_E4>)W#%P0j5 zy$t-Eh<1cROZ_{TqsFT%Ps%PLkCV{;#S*Brt;g! zi9OScblQVDKL~{i_~9(aNB>A;aycME%Tej>+N^?Vh}pNlY>$u9WQ}OC&D&%o-_V^ZyTGr@u#Rn1b99J=8^ zLo(}ZxM^{`-OpqgwMnm12E%d8nIeZr4-@es-Xoy)!WxK zpL6e6ddB5fiT@F7;d_QTvfURCiRa&UCv3KBSFgXz-8gB4eAp;NDtFed3|f00ZMnBC zU?f?obC6@tV1x^WE!16IFH`-h;~l31}Z)JB`V95w&GY~-va$h>u@I{q+ zo4WqY4@9}m(4wn+5Da$t(PqZ!(%l*ey#yl$CUz$O8SxowhmRTO1V(|(xX$@R&NjG_ zo^v?*^qp_L5RwsNckI@56=YF^6Y){kziu9O!7Fu!n+WMZf#mTfI@c{eg(Cqz&XJv<3 z{;-hjr>8r4QKUsbX8k%zMry9qUN(fg_p`UPpad; ze?#1Vfm`}z$k|>VXA4v97)Q6=%`@M&acD8?oj)DhCTfCmd0t~)2}YpYE;9-6!=Fn| zvpo9?9m0MdvWH@43odEl&Ejnw z47d5PVHhz5aTl(%!zzD^Fczc3GJeE)_VgZ6>}U1U!*Ag+tSa%$?oyH(O)>(t99;dN zTJ^H1YYFd1eYh&7PG@tx-O~4*(D`0SabE<69PR}_KW`^#?qA2t1I8k)@5&8Xwy@85 zD=I3+QX=ZY&7$g@W}43Y#gzl5av48)vviG4Nzz~Q4uCc>I8C~!*TG7OVUyJ@J$HD) z?F$4#g8O9F@RlSsC8n^rO5ABuWAHi0OCaX`HCff#Occ#pu=*JH(X~+R<3Rs~%kuUV zXHn1a?9bWknA)jg+0b0c(t1d@{|-Y1=^uF(90LAMabUE$_yEBaBSr$+?4P4ry7WJyo*PTeZ{3SNf ztn);Prx3Rc`9=}PE*ZA3^VE*lg0rg#K2z8)HZXRh`EuK9$pv*IzkA_*&)oAYOZRi1 z0;1b5dFg#f6+Kj-L?d#UWc{a3I>Usae{q-eetvJ=l94AiIvkW&1imt7Fi4S*|D4^M zb2}L-=G*`E8UM?<_RL~GnQb`;%Mx;LDGwxP%flu9bCPt*3(W1pjB^0ir#axzJov}4 z%RPj{7}+%FqHX^QcmDdtCthjcz<^73MkVS%h&K`6t(k8ms+fTBV2vB3)|2rVj<>J| z2kq_)A2*kwzHq7L#$86z-1@L(uE`7KlggBZHeB=9on zHRy-fPWI8~6FnL7?zloWP-4vg$jFcS9N#xVgH>n94J81XT5kcTm0djPH5r0c6g7xG z{_Xt)jg(gQnGZhcY&a^*v(4AVBXfQW2F&CBWI4z8-t2Cy)GqR zs<4vW%7Alnr}j>1iEbYA#- z)Bnc+Zf({wX<}GwGJ{i7_NL&TmzWFX=p+btAVf@Jx(4{oIzI%m$%zX1C?fP{8C$TOx7^`_2t0|kLfn`-QU4R59{#m$z$dk1 zKKn<*g$*m#D{8fJM8!zfO2IfN$4ugLq+RL)TQnuYy6gaO1$Bze70cmVayNjJ!qP5Jdj$S1JedJ$uqcg4x_5gM1hG;#rHV%u6jh7M#ws>rEwjdM}7~f!3 zeeW*Br}qUhO|Zccbtk6aT``Y&oULTJ5iy;b@iqUNBj0VHLds6sXRtR zxXvLE=U8`v>4$rcMM4|*w3JEGh%SYJS+&XSWT^8gSO)G_c}Mlc zSWh-%U*6~p0rSPdyy8ok5-9i5PBukfW5Bn(ybHfZ9{lm!n$PX}nNsd=w0YX9t5v@A z6+s`d`Md~4-$i@8dm{(BnAhZmNDY4CBhYbANO93whMcl|!Bq3vn;z^yAX$%Q*%z*E z%LP&m#WwoLEIVwQvw2rwz-xO)yEN6Y#IaKATpX3!S9=}NTyJmRAA$b2!CQE~FvHCK z?>_;uAkHA_cn|b+8RUI-Ho!FdNb_yuha&c4>;U%YJQF73)_?!lV@U}0nQ}>&Hg9GJ zn?u{XINAJ~%q@+3oMvpi?Gr1?v zdrzz6h{OTtW&5K;l@Xdhwe45vFeSI?>N##c_zhYR(J}^|0|2G}&qT0aU-dS1Ck@e( zksE!pwv6hr#4TYe$(*NBrsl+UDnZf<)cYA>Wk7zZ+UpRzSCqWNEe}cw)i7eq5!asA z-2*l$lLV*LVu2PW?oU8NUO^UB#+f?5SC2~qvP;%6!|-9J3Q6G7{af?<*Q$)SCI=k$ zzc$0)+=)jcG<)leP#WlGyAGRHwQrB(Old~p&n}D|Hha7&H7ciP5^bxcr`-{)zrl2e zsGvLHrA3!otFhEf;R{dK-l5yAI|?e-K@>nPiG`u?dsl- zWJ0O{Y5Xu(s+^e6c{{@)Syx9M)6KdExyIs?&MJLnzK>Y#HiIaK+@IUZEe91C{bh^? z!KFDJKn#FG3<$@&)r94S3$NcExpNw__GwSu#~4PB1qHNFsxk6IF~%p%+TxD;>ZirY zbuw&KXy)#ThdIBvGE&nr!0s?!)n9wmh|zxKG`eU5u|2*5#P;rgT{n-iL37*tBys3H zb!cuAWx|TTwCg9K&{a<9_Bp^KeYLjUIh!A)G5bPtd91P*V%x+1a-Vm>bwTtd-o}s3 zu5C_X6g_-@y0($RLG9&0FR0$Akuh+=ufT2HL_ zX9F0M%{>q~^j7a-{{fHu^Y_30N)pQC_Ic>zG~ZUYN#pyg2G#?N(sq^?Ov!AJ9g-uk zg643@Xg~KtIrW?P#{wvisvDG=j-Oxepr0EGk|OPnf0&<4w?!`-pCOYOfIGaQfRlTy zLb$V(-+s}6d%4|sbJ8m+{Ir8Pc9r zx!ekp=6O@y_ZO{18GwU%Ae+=$(H6%L&ba8~`?SI~I5^FA$IZGhk8)1_odC93T(aXb zMvqEcNx37;KRRw8*u zwrrIlQT0Iso@^crFM*SslANA!o0S6&#hzqQ7v2o=5v(mB7?%i*JnlD560i)%wZ(Ms zm|1U+k}chMJUdfHy4d8u1tnvIFAs2c@;;>UJMhuF2BQsAXs+J0imLSG{d-L+kd<1F zI*p2KMP0iMZ?hoS>d63bpgs1(b*{Qk2uh$IrdVtG4Z@5tr-iN&dUOr@GH(cD9HS9KqnHYgj zz{g)j%hDa?F5)H~M(vo+2aE{sitFgZje=M7)~xr1Y=EGFa+&ABJs5k0TPWP&&-^Zp z3^~_ElQuiAVFx2JBkeesg;(H%-Y!Tv6!y)B$O!MVxx-Ih!8OR;yLZQA)DAq&XByR% z-%czT&-8_}m7Fov0fQjuF>>v98th+^HMrAZ&yu#?%cgw)`l~{b%J{_0u92*B>W`DngLojWA#^bWt1SW6@ zPP&|X`0vGlIhVtaN`pvBuhTE~kVK?}7Tdj27q04kOL-)PIwEZtDGyV1k)3G{@J{{^ zUaZwc$$fwg{z*wH7tXLaAb(d!ETnPop1A2b$SzHqw!(FpFuCV-_d>}@!xg>0Lw({X`*=UjNIWpHn~k%%rMh|1Q=iY2R| zb!zfrNMF6vNSVoV>Uo?sWpn`?JdFG1D5 zG|25^U=90c*}ECG^bC2He7o3uWE*#Nd)aGj3AFUsC1_7*x9zGg?|Fjl^Nb=Lq=Gy| zA|vT5PeVurSCiH6W%5WIVmmfeA+#r9I6FUmqqJOnD9c6IlFMy>oO*iU!#A$P@}pD0 zt?)c?BT!R3Zs6$t<16swmd4xJClCdNYW4#@+VK?H^u?p?9!r<_^>O&dB5JF@=6l8Z zxuL522?c6;*PVc$*KDVEjmqM9OTA~^^gEo3^+!`aldPcI540ofdx3-Ab+;~F71^(z zulEq0T7xmYrW-u9;Xh5k7a8C4)Em5R;G*$_R)$Bn>jTd2%FgxSMPsu|IFzLe;^At4 z`MMQR*q)Ea@n>DCvUI*rRL?q|+7+Be>q%JR;gHUjH8E|kM=Vhh!%lzKq3u%GnXPF$ zY`1uko4|ePx!)B5K*0!LP48jlu#%9-u;W}C7v|3u_PIg$WAtJG>NAzCzBfNgZd8Ye z?Utq#|KPBA#GfvS%9OQYu_=X?@x%4u%L-&`vv$ao9s(Du45Lg(XmPFl@Y1OGJFrw5 zjR)(PFw%Sjwg~1_IpS_jmd0boNO(S6O5kCy?EkCo?EjhW_c%_jOoyneaubW{ghPgr z3+0|U6-jxxo4bs;-R0zB6h;)f!a9dGcUeqPmmD!Glx>%rb!~E6V!K2{h82@xb8|kN zuFI+G`~m0ehwo#1Y>&^j@7?G9dA;B7*AsHp(pi_HIuxRulq3rG%kMnson_*;a)Mj2 z#0~D#u%}#8E?d+P*(Yf<;w5Yi^LNj&mm7<4CU0)0n;0B`4_c=5E3&RurwW+vF-MnX z7lidv=dx9h%|21&C$#6;@&kwq7K0*ctQs_#+Kee4%x4&O0O#$!iQgW_afJ+y!ri;T z>q@jReWA)r?fK&|?Sug+C%fNeyY74c%g~DIHdJs8Y}D^EhR+ogPT=I8y!yGB>G1oG zdv3mT9KHgX1vSDKhgY+6ox^oA*8Rk)T6E20uxHfUI{D!l>PI-IL-JOYXTuiJ%j3KL zdHcnJxIVrNlMXs}*^|4{+7ur~@CVbo2t%UQM!HIBsH*!LLYv9G9%C*Ybz-S-dAeK+ zC`AB2Z}R=+{oHGJ?3%OTyF4I8W7H(0^4^1&Z|+IOXh}D^QZdIi9S~n*I|sBJ*MFi5kuf6Eyt-}Kw<2eG65*{A%J)1#z$3hR zJmwEUSLXJ5yO`kkkF$U2_F*WS{P1Iih2!oAvi9Q41bppqRA`k-&-ax$8FyGv9y!)7 zY4p3^ReqYDQo#O{`<%z)wH_tt-!Fa}Xin6-m4rN_?Vqtghi=Q4LaP~FEjE?UxT=)6 zJZ>k~Dqyh>6OtWQZwpCq(dj)4scFCu_h4sIB%ilxXULzL8DV#x^GwQn1c6@3WXSuh zh!iW55oY`K2}(8NLT5!ztJNdhF$VrMEe`gQ7L`X{b*#5Gn^vcQD$+rbqY5&vpVZSU zne4==6)jsE4+S~^$J^4hg`J~KZILudqz8^;Jz!bh+fL_~gO$7V19|25Yri_hA_j38 z6LlE%nS&2PZpRY1{`Oab>oA4&N~hQx{SM1oYI3EbgPslGcE1o3rqN7RW1)QC39{fq zJ)s3mU98QJ*+@;Q2G3;i`*(C8i<(@^b{=11 zFl1sfEh#eWYtSbC?8B!nY+(0@Y{Jqn&{l<2`mGl*%WSm08J*CV6|L=lR4V}D-;*G4 z%9xC=NmFY|{LULvv-U!}qIZbU<&Qqh$=M&gl1pcmI%`lO36LdJFX2@eq>R_EDH3GY zs%xY`CMB*a*O;}~s3kqev zG)&^+bSl-EQ2{mfjsE3`?;{{LRjox2h&x<6qoVq&yiT$)%K;Rar5=>#3VEDl56bdG z*i)|`jn9jj^N_MtN7Rq~jw+KoKMd1or<*pjt92kmTQw%Fp8t2$@=dde1v=LbTEmE0wGwp?*=PUd3#{jf9+8Yh6QLBe>eUx$6KfJAJU%9v#&gf zv$_pv9)=ujo1j!OM@vr~gDl2*6_G=`ro0P#SQ%3lWy6RE%{Ive9~-A(#E;W~h(U^! zvsE{hUn)b%xHkr_-yOh^3r4@{(X+E)8ueq-LPj)iHI8P2V924eC9T?8dL#ixiollBkeHX8$ZK}o{bZb#cyq`usk)GGqw4lRZ~m{hngtXZ(R7u44GT1 z5%p`r?$@2p0byvlWGVG1qUqfWT+xNPacW}u+cy}E%Vs2B=?rsIiL4w5TVVlj9?Hdy zb!=l@6)pDJ5_LhT_3opS&_`h^T4ItMW_LnD$r59D`hOSz)Pi8eFn#F+(sTw&C`73>VJ;+Y`}-PxgG zn{i9m1ABK64wwg?v%GZ^vYb7U%i>(|zXxjj<8R%pSL$ugg6}#;s{DxGhlH`2acWl) z*|q-iNeCjFrBa6K^(P^$uo|~qOj&sYs*2{r|2+V_)kk4RDJs)l() zV$<6BSF((#>A?^ZzgLpo5Z0%;XaS2hJ5cM8jL+D$b(H>i5W&%xI4^A!bhVVz7#l&9 zM~^51ppKv;W!WG%^XZY(gqZq$da8WckfS?$aMewqqi3#NHJ6pqajz#zcCI*@^%r>f zOYH&xg zLF9zw5xh>BuXW4yOh@)byjaMV4=~@V=*Cl7_X!O!LlZ&J*^EuMgp&s$vlYnkdtBego6y|*8jZ! z$~*zr^UT9qI!sKDF7(=of|KQ>6;!UjFwv*M%r^`##V@)$gIbb8f(b<*7L>#l9X*eX4!K z9Ea>z@2up;&(?3VV~-GRRR5YL4`5}^r{>wqd{0{U?zzJ+2(r_y{yA=x@$2n1m*&y0 zVZE5agx-tmYpd|sDYwT5oFIJ)bIj|^|91FBEWW%i2j1ZYEK(5Hjeaz6N%0k_JtOry ze)4lCVQCSS`aYu(i}Rw@C3AZ*J|XI%O0d5yaL4mPmYV)e#i;W^;oPT!Q#ZQdsom`# z_zowqyx2@d)c~SxOMbg=1(x(f=HzP*?<6zkqR6maauc}qJHw>%-+KDz*We;n&ICmX z`#N^RemVw)8?q`RTnePg={n(m2L1pN1pV;Ql@-vHXi?BwS(4e}1mE=|^b^V;2$grG z#HprK3re2WEmT+f)$+G_YGXO^hdBsble5`y(FU02AM(w-odp6neplas| z;>*;=-k-os2I}g77PhsKv;X>z14^2#$!gO7`JoND^5xgVZH=+@?2n^;@nxSs_&+=t dz0c;|I^<<#?o-!f_yY;>IO%Z4zS=e*^ Date: Mon, 30 Oct 2017 07:29:40 -0500 Subject: [PATCH 09/72] added an assert --- connection.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/connection.cpp b/connection.cpp index 6e16e88..0a5309d 100644 --- a/connection.cpp +++ b/connection.cpp @@ -297,6 +297,7 @@ conv_manager_t::~conv_manager_t() assert(oppsite_const_id==0); } } + assert(timer_fd64==0); //if(oppsite_const_id!=0) //do this at conn_manager 's deconstuction function //conn_manager.const_id_mp.erase(oppsite_const_id); if(blob!=0) @@ -388,6 +389,7 @@ conv_manager_t::~conv_manager_t() fd_manager.fd64_close(erase_it->second->timer_fd64); + erase_it->second->timer_fd64=0; //timer_fd_mp.erase(erase_it->second->timer_fd); //close(erase_it->second->timer_fd);// close will auto delte it from epoll delete(erase_it->second); From e8398d0d31d3dc248454e1f39bcecb7525f04f6e Mon Sep 17 00:00:00 2001 From: wangyu- Date: Mon, 30 Oct 2017 08:02:23 -0500 Subject: [PATCH 10/72] fixed some bug of last commit --- main.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/main.cpp b/main.cpp index dff93f2..aa765c3 100755 --- a/main.cpp +++ b/main.cpp @@ -826,6 +826,7 @@ int server_on_raw_recv_ready(conn_info_t &conn_info,char * ip_port,char type,cha struct epoll_event ev; fd64_t new_udp_fd64 = fd_manager.create(new_udp_fd); + fd_manager.get_info(new_udp_fd64).ip_port=conn_info.ip_port; mylog(log_trace, "[%s]u64: %lld\n",ip_port, new_udp_fd64); ev.events = EPOLLIN; @@ -842,7 +843,7 @@ int server_on_raw_recv_ready(conn_info_t &conn_info,char * ip_port,char type,cha conn_info.blob->conv_manager.insert_conv(tmp_conv_id, new_udp_fd64); - fd_manager.get_info(new_udp_fd64).ip_port=conn_info.ip_port; + //assert(conn_manager.udp_fd_mp.find(new_udp_fd)==conn_manager.udp_fd_mp.end()); @@ -857,11 +858,11 @@ int server_on_raw_recv_ready(conn_info_t &conn_info,char * ip_port,char type,cha } - u64_t u64 = conn_info.blob->conv_manager.find_u64_by_conv(tmp_conv_id); + fd64_t fd64 = conn_info.blob->conv_manager.find_u64_by_conv(tmp_conv_id); conn_info.blob->conv_manager.update_active_time(tmp_conv_id); - int fd = int((u64 << 32u) >> 32u); + int fd = fd_manager.to_fd(fd64); mylog(log_trace, "[%s]received a data from fake tcp,len:%d\n",ip_port, data_len); int ret = send(fd, data + sizeof(u32_t), @@ -1484,7 +1485,7 @@ int server_event_loop() fd64_t fd64=events[idx].data.u64; - if(fd_manager.exist(fd64)) + if(!fd_manager.exist(fd64)) { mylog(log_trace ,"fd64 no longer exist\n"); continue; From a54a0e269b2bb5857da869a89086878135cee2c8 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Mon, 30 Oct 2017 08:19:21 -0500 Subject: [PATCH 11/72] fix timer of fd64 --- main.cpp | 6 +++--- misc.cpp | 6 ++++-- misc.h | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/main.cpp b/main.cpp index aa765c3..15148c0 100755 --- a/main.cpp +++ b/main.cpp @@ -926,8 +926,7 @@ int server_on_raw_recv_pre_ready(conn_info_t &conn_info,char * ip_port,u32_t tmp //g_conn_info=conn_info; int new_timer_fd; - set_timer_server(epollfd, new_timer_fd); - conn_info.timer_fd64=fd_manager.create(new_timer_fd); + set_timer_server(epollfd, new_timer_fd,conn_info.timer_fd64); fd_manager.get_info(conn_info.timer_fd64).ip_port=conn_info.ip_port; //assert(conn_manager.timer_fd_mp.find(new_timer_fd)==conn_manager.timer_fd_mp.end()); @@ -1509,7 +1508,8 @@ int server_event_loop() { if(debug_flag)begin_time=get_current_time(); - int fd=get_u64_l(events[idx].data.u64); + //int fd=get_u64_l(events[idx].data.u64); + int fd=fd_manager.to_fd(fd64); u64_t dummy; read(fd, &dummy, 8); diff --git a/misc.cpp b/misc.cpp index 80c495a..033c33c 100644 --- a/misc.cpp +++ b/misc.cpp @@ -951,7 +951,7 @@ int set_timer(int epollfd,int &timer_fd)//put a timer_fd into epoll,general func } -int set_timer_server(int epollfd,int &timer_fd)//only for server +int set_timer_server(int epollfd,int &timer_fd,fd64_t &fd64)//only for server { int ret; epoll_event ev; @@ -969,9 +969,11 @@ int set_timer_server(int epollfd,int &timer_fd)//only for server its.it_value.tv_nsec=1; //imidiately timerfd_settime(timer_fd,0,&its,0); + fd64=fd_manager.create(timer_fd); + ev.events = EPOLLIN; - ev.data.u64 = pack_u64(2,timer_fd);////difference + ev.data.u64 = fd64;////difference ret=epoll_ctl(epollfd, EPOLL_CTL_ADD, timer_fd, &ev); if (ret < 0) { diff --git a/misc.h b/misc.h index b14c876..2049d3e 100644 --- a/misc.h +++ b/misc.h @@ -112,7 +112,7 @@ void iptables_rule(); void pre_process_arg(int argc, char *argv[]);//mainly for load conf file; int unit_test(); int set_timer(int epollfd,int &timer_fd); -int set_timer_server(int epollfd,int &timer_fd); +int set_timer_server(int epollfd,int &timer_fd,fd64_t &fd64); int handle_lower_level(raw_info_t &raw_info); int add_iptables_rule(const char *); From 1afe8d7317d2b2bb03703feb064e9f4e6ed932d4 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Mon, 30 Oct 2017 08:37:53 -0500 Subject: [PATCH 12/72] more fix --- connection.cpp | 16 +++++++++------- main.cpp | 3 --- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/connection.cpp b/connection.cpp index 0a5309d..667f91f 100644 --- a/connection.cpp +++ b/connection.cpp @@ -734,9 +734,9 @@ int recv_safer(conn_info_t &conn_info,char &type,char* &data,int &len)///safer t void server_clear_function(u64_t u64)//used in conv_manager in server mode.for server we have to use one udp fd for one conv(udp connection), //so we have to close the fd when conv expires { - int fd=int(u64); - int ret; - assert(fd!=0); + //int fd=int(u64); +// int ret; + //assert(fd!=0); /* epoll_event ev; @@ -749,16 +749,18 @@ void server_clear_function(u64_t u64)//used in conv_manager in server mode.for s mylog(log_fatal,"fd:%d epoll delete failed!!!!\n",fd); myexit(-1); //this shouldnt happen }*/ //no need - ret= close(fd); //closed fd should be auto removed from epoll + + /*ret= close(fd); //closed fd should be auto removed from epoll if (ret!=0) { mylog(log_fatal,"close fd %d failed !!!!\n",fd); myexit(-1); //this shouldnt happen - } + }*/ //mylog(log_fatal,"size:%d !!!!\n",conn_manager.udp_fd_mp.size()); - assert(fd_manager.exist(u64)); - fd_manager.fd64_close(u64); + fd64_t fd64=u64; + assert(fd_manager.exist(fd64)); + fd_manager.fd64_close(fd64); //assert(conn_manager.udp_fd_mp.find(fd)!=conn_manager.udp_fd_mp.end()); //conn_manager.udp_fd_mp.erase(fd); diff --git a/main.cpp b/main.cpp index 15148c0..abbfcb1 100755 --- a/main.cpp +++ b/main.cpp @@ -1501,9 +1501,6 @@ int server_event_loop() conn_info_t* p_conn_info=conn_manager.find_insert_p(ip,port); - - - if(fd64==p_conn_info->timer_fd64)//////////timer_fd64 { From 1bdb6a5720f661e0153a5d090a538ba42fa9fd20 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Wed, 1 Nov 2017 08:25:50 -0500 Subject: [PATCH 13/72] fixed bug of last few commit, and fixed a bug of bind error --- common.h | 5 +---- connection.h | 2 +- main.cpp | 20 +++++++++----------- network.cpp | 16 ++++++++-------- network.h | 4 ++-- 5 files changed, 21 insertions(+), 26 deletions(-) diff --git a/common.h b/common.h index ae7c4a5..a4a45ac 100644 --- a/common.h +++ b/common.h @@ -80,10 +80,7 @@ struct ip_port_t char * to_s(); }; -struct fd_info_t -{ - ip_port_t ip_port; -}; + typedef u64_t fd64_t; diff --git a/connection.h b/connection.h index 2284de8..5850bfc 100644 --- a/connection.h +++ b/connection.h @@ -95,7 +95,7 @@ struct conn_info_t //stores info for a raw connection.for client ,there is o uint8_t oppsite_roller; u64_t last_oppsite_roller_time; - ip_port_t ip_port; +// ip_port_t ip_port; /* const uint32_t &ip=raw_info.recv_info.src_ip; diff --git a/main.cpp b/main.cpp index abbfcb1..a9dc9a7 100755 --- a/main.cpp +++ b/main.cpp @@ -27,8 +27,6 @@ int client_on_timer(conn_info_t &conn_info) //for client. called when a timer is mylog(log_trace,"\n",send_info.ts_ack); - - if(conn_info.state.client_current_state==client_idle) { fail_time_counter++; @@ -603,8 +601,8 @@ int server_on_raw_recv_multi() //called when server received an raw packet conn_info_t &conn_info=conn_manager.find_insert(ip,port); conn_info.raw_info=tmp_raw_info; - conn_info.ip_port.ip=ip; - conn_info.ip_port.port=port; + //conn_info.ip_port.ip=ip; + //conn_info.ip_port.port=port; packet_info_t &send_info=conn_info.raw_info.send_info; packet_info_t &recv_info=conn_info.raw_info.recv_info; @@ -826,7 +824,7 @@ int server_on_raw_recv_ready(conn_info_t &conn_info,char * ip_port,char type,cha struct epoll_event ev; fd64_t new_udp_fd64 = fd_manager.create(new_udp_fd); - fd_manager.get_info(new_udp_fd64).ip_port=conn_info.ip_port; + fd_manager.get_info(new_udp_fd64).p_conn_info=&conn_info; mylog(log_trace, "[%s]u64: %lld\n",ip_port, new_udp_fd64); ev.events = EPOLLIN; @@ -928,7 +926,7 @@ int server_on_raw_recv_pre_ready(conn_info_t &conn_info,char * ip_port,u32_t tmp int new_timer_fd; set_timer_server(epollfd, new_timer_fd,conn_info.timer_fd64); - fd_manager.get_info(conn_info.timer_fd64).ip_port=conn_info.ip_port; + fd_manager.get_info(conn_info.timer_fd64).p_conn_info=&conn_info; //assert(conn_manager.timer_fd_mp.find(new_timer_fd)==conn_manager.timer_fd_mp.end()); //conn_manager.timer_fd_mp[new_timer_fd] = &conn_info;//pack_u64(ip,port); @@ -1492,13 +1490,13 @@ int server_event_loop() assert(fd_manager.exist_info(fd64)); - ip_port_t ip_port=fd_manager.get_info(fd64).ip_port; - u32_t ip=ip_port.ip; - u32_t port=ip_port.port; + conn_info_t* p_conn_info=fd_manager.get_info(fd64).p_conn_info; + u32_t ip=p_conn_info->raw_info.send_info.dst_ip; + u32_t port=p_conn_info->raw_info.send_info.dst_port; - assert(conn_manager.exist(ip,port)); + //assert(conn_manager.exist(ip,port)); - conn_info_t* p_conn_info=conn_manager.find_insert_p(ip,port); + ///conn_info_t* p_conn_info=conn_manager.find_insert_p(ip,port); if(fd64==p_conn_info->timer_fd64)//////////timer_fd64 diff --git a/network.cpp b/network.cpp index 9416a18..3c2181a 100644 --- a/network.cpp +++ b/network.cpp @@ -1820,17 +1820,17 @@ int get_src_adress(u32_t &ip,u32_t remote_ip_uint32,int remote_port) //a trick return 0; } -int try_to_list_and_bind(int bind_fd,u32_t local_ip_uint32,int port) //try to bind to a port,may fail. +int try_to_list_and_bind(int &fd,u32_t local_ip_uint32,int port) //try to bind to a port,may fail. { - int old_bind_fd=bind_fd; + int old_bind_fd=fd; if(raw_mode==mode_faketcp) { - bind_fd=socket(AF_INET,SOCK_STREAM,0); + fd=socket(AF_INET,SOCK_STREAM,0); } else if(raw_mode==mode_udp||raw_mode==mode_icmp) { - bind_fd=socket(AF_INET,SOCK_DGRAM,0); + fd=socket(AF_INET,SOCK_DGRAM,0); } if(old_bind_fd!=-1) { @@ -1844,7 +1844,7 @@ int try_to_list_and_bind(int bind_fd,u32_t local_ip_uint32,int port) //try to b temp_bind_addr.sin_port = htons(port); temp_bind_addr.sin_addr.s_addr = local_ip_uint32; - if (bind(bind_fd, (struct sockaddr*)&temp_bind_addr, sizeof(temp_bind_addr)) !=0) + if (bind(fd, (struct sockaddr*)&temp_bind_addr, sizeof(temp_bind_addr)) !=0) { mylog(log_debug,"bind fail\n"); return -1; @@ -1852,19 +1852,19 @@ int try_to_list_and_bind(int bind_fd,u32_t local_ip_uint32,int port) //try to b if(raw_mode==mode_faketcp) { - if (listen(bind_fd, SOMAXCONN) != 0) { + if (listen(fd, SOMAXCONN) != 0) { mylog(log_warn,"listen fail\n"); return -1; } } return 0; } -int client_bind_to_a_new_port(int bind_fd,u32_t local_ip_uint32)//find a free port and bind to it. +int client_bind_to_a_new_port(int &fd,u32_t local_ip_uint32)//find a free port and bind to it. { int raw_send_port=10000+get_true_random_number()%(65535-10000); for(int i=0;i<1000;i++)//try 1000 times at max,this should be enough { - if (try_to_list_and_bind(bind_fd,local_ip_uint32,raw_send_port)==0) + if (try_to_list_and_bind(fd,local_ip_uint32,raw_send_port)==0) { return raw_send_port; } diff --git a/network.h b/network.h index af0bfcf..6e803f1 100644 --- a/network.h +++ b/network.h @@ -99,9 +99,9 @@ int find_lower_level_info(u32_t ip,u32_t &dest_ip,string &if_name,string &hw); int get_src_adress(u32_t &ip,u32_t remote_ip_uint32,int remote_port); //a trick to get src adress for a dest adress,so that we can use the src address in raw socket as source ip -int try_to_list_and_bind(int bind_fd,u32_t local_ip_uint32,int port); //try to bind to a port,may fail. +int try_to_list_and_bind(int & bind_fd,u32_t local_ip_uint32,int port); //try to bind to a port,may fail. -int client_bind_to_a_new_port(int bind_fd,u32_t local_ip_uint32);//find a free port and bind to it. +int client_bind_to_a_new_port(int & bind_fd,u32_t local_ip_uint32);//find a free port and bind to it. int send_raw_ip(raw_info_t &raw_info,const char * payload,int payloadlen); From 6a825dc51e511aae6a3e45058181962919eac1f7 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Mon, 30 Oct 2017 08:41:54 -0700 Subject: [PATCH 14/72] Update README.zh-cn.md --- README.md | 2 +- doc/README.zh-cn.md | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 520365f..569856a 100755 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ A Tunnel which turns UDP Traffic into Encrypted FakeTCP/UDP/ICMP Traffic by using Raw Socket, helps you Bypass UDP FireWalls(or Unstable UDP Environment). It can defend Replay-Attack and supports Multiplexing. It also acts as a Connection Stabilizer. -When used alone,udp2raw tunnels only UDP traffic. Nevertheless,if you used udp2raw + any UDP-based VPN together,you can tunnel any traffic(include TCP/UDP/ICMP),currently OpenVPN/L2TP/ShadowVPN are confirmed to be supported。 +When used alone,udp2raw tunnels only UDP traffic. Nevertheless,if you used udp2raw + any UDP-based VPN together,you can tunnel any traffic(include TCP/UDP/ICMP),currently OpenVPN/L2TP/ShadowVPN and [tinyFecVPN](https://github.com/wangyu-/tinyFecVPN) are confirmed to be supported。 ![image0](images/image0.PNG) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index 5a0ef6c..ba38279 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -4,15 +4,17 @@ udp2raw tunnel,通过raw socket给UDP包加上TCP或ICMP header,进而绕过 支持心跳保活、自动重连,重连后会恢复上次连接,在底层掉线的情况下可以保持上层不掉线。同时有加密、防重放攻击、信道复用的功能。 -**欢迎任何形式的转载** - [English](/README.md) [udp2raw+kcptun step_by_step教程](kcptun_step_by_step.md) [udp2raw+finalspeed step_by_step教程](finalspeed_step_by_step.md) -如果你需要加速跨国网游、网页浏览,解决方案在另一个repo: +**提示:** + +udp2raw不是加速器,只是一个帮助你绕过UDP限制的工具。如果你需要UDP加速器,请看UDPspeeder。 + +UDPspeeder的repo: https://github.com/wangyu-/UDPspeeder # 支持的平台 From c591902be18224ad2139890683cdbae086132a53 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 2 Nov 2017 19:49:04 -0500 Subject: [PATCH 15/72] added missing files --- fd_manager.cpp | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++ fd_manager.h | 43 ++++++++++++++++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 fd_manager.cpp create mode 100644 fd_manager.h diff --git a/fd_manager.cpp b/fd_manager.cpp new file mode 100644 index 0000000..67d75bd --- /dev/null +++ b/fd_manager.cpp @@ -0,0 +1,63 @@ +/* + * fd_manager.cpp + * + * Created on: Sep 25, 2017 + * Author: root + */ + + +#include "fd_manager.h" +int fd_manager_t::fd_exist(int fd) +{ + return fd_to_fd64_mp.find(fd)!=fd_to_fd64_mp.end(); +} +int fd_manager_t::exist(fd64_t fd64) +{ + return fd64_to_fd_mp.find(fd64)!=fd64_to_fd_mp.end(); +} +int fd_manager_t::to_fd(fd64_t fd64) +{ + assert(exist(fd64)); + return fd64_to_fd_mp[fd64]; +} +void fd_manager_t::fd64_close(fd64_t fd64) +{ + assert(exist(fd64)); + int fd=fd64_to_fd_mp[fd64]; + fd64_to_fd_mp.erase(fd64); + fd_to_fd64_mp.erase(fd); + if(exist_info(fd64)) + { + fd_info_mp.erase(fd64); + } + assert(close(fd)==0); +} +void fd_manager_t::reserve(int n) +{ + fd_to_fd64_mp.reserve(n); + fd64_to_fd_mp.reserve(n); + fd_info_mp.reserve(n); +} +u64_t fd_manager_t::create(int fd) +{ + assert(!fd_exist(fd)); + fd64_t fd64=counter++; + fd_to_fd64_mp[fd]=fd64; + fd64_to_fd_mp[fd64]=fd; + return fd64; +} +fd_manager_t::fd_manager_t() +{ + counter=u32_t(-1); + counter+=100; + reserve(10007); +} +fd_info_t & fd_manager_t::get_info(fd64_t fd64) +{ + assert(exist(fd64)); + return fd_info_mp[fd64]; +} +int fd_manager_t::exist_info(fd64_t fd64) +{ + return fd_info_mp.find(fd64)!=fd_info_mp.end(); +} diff --git a/fd_manager.h b/fd_manager.h new file mode 100644 index 0000000..20cea91 --- /dev/null +++ b/fd_manager.h @@ -0,0 +1,43 @@ +/* + * fd_manager.h + * + * Created on: Sep 25, 2017 + * Author: root + */ + +#ifndef FD_MANAGER_H_ +#define FD_MANAGER_H_ + +#include "common.h" +//#include "packet.h" +#include "connection.h" + +struct fd_info_t +{ + //ip_port_t ip_port; + conn_info_t *p_conn_info; +}; + +struct fd_manager_t //conver fd to a uniq 64bit number,avoid fd value conflict caused by close and re-create +//this class is not strictly necessary,it just makes epoll fd handling easier +{ + fd_info_t & get_info(fd64_t fd64); + int exist_info(fd64_t); + int exist(fd64_t fd64); + int to_fd(fd64_t); + void fd64_close(fd64_t fd64); + void reserve(int n); + u64_t create(int fd); + fd_manager_t(); +private: + u64_t counter; + unordered_map fd_to_fd64_mp; + unordered_map fd64_to_fd_mp; + unordered_map fd_info_mp; + int fd_exist(int fd); + //void remove_fd(int fd); + //fd64_t fd_to_fd64(int fd); +}; + +extern fd_manager_t fd_manager; +#endif /* FD_MANAGER_H_ */ From 069a9ba2b43aa78b1a5f2868ccb204c017b86739 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Fri, 3 Nov 2017 01:04:59 -0500 Subject: [PATCH 16/72] added version.txt into makefile --- makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/makefile b/makefile index 979d89d..d00a3fc 100755 --- a/makefile +++ b/makefile @@ -15,7 +15,7 @@ SOURCES_AES_ACC=$(COMMON) $(wildcard lib/aes_acc/aes*.c) NAME=udp2raw TARGETS=amd64 arm amd64_hw_aes arm_asm_aes mips24kc_be mips24kc_be_asm_aes x86 x86_asm_aes mips24kc_le mips24kc_le_asm_aes -TAR=${NAME}_binaries.tar.gz `echo ${TARGETS}|sed -r 's/([^ ]+)/udp2raw_\1/g'` +TAR=${NAME}_binaries.tar.gz `echo ${TARGETS}|sed -r 's/([^ ]+)/udp2raw_\1/g'` version.txt all:git_version rm -f ${NAME} @@ -69,6 +69,7 @@ cross3:git_version ${cc_cross} -o ${NAME}_cross -I. ${SOURCES} ${FLAGS} -lrt -static -O3 release: ${TARGETS} + cp git_version.h version.txt tar -zcvf ${TAR} clean: From 482e65885817512e9451f325b9a0231149ff52c7 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Mon, 6 Nov 2017 03:00:16 -0600 Subject: [PATCH 17/72] increase heart beat length --- main.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/main.cpp b/main.cpp index a9dc9a7..ac8a85d 100755 --- a/main.cpp +++ b/main.cpp @@ -9,6 +9,9 @@ int mtu_warn=1375;//if a packet larger than mtu warn is receviced,there will be a warning +char hb_buf[buf_len]; +int hb_len=1200; + int server_on_raw_recv_pre_ready(conn_info_t &conn_info,char * ip_port,u32_t tmp_oppsite_const_id); int server_on_raw_recv_ready(conn_info_t &conn_info,char * ip_port,char type,char *data,int data_len); int server_on_raw_recv_handshake1(conn_info_t &conn_info,char * ip_port,char * data, int data_len); @@ -429,7 +432,7 @@ int client_on_raw_recv(conn_info_t &conn_info) //called when raw fd received a p conn_info.last_oppsite_roller_time=conn_info.last_hb_recv_time; client_on_timer(conn_info); } - if(data_len==0&&type=='h') + if(data_len>=0&&type=='h') { mylog(log_debug,"[hb]heart beat received\n"); conn_info.last_hb_recv_time=get_current_time(); @@ -773,7 +776,7 @@ int server_on_raw_recv_ready(conn_info_t &conn_info,char * ip_port,char type,cha return 0; }*/ - if (type == 'h' && data_len == 0) { + if (type == 'h' && data_len >= 0) { //u32_t tmp = ntohl(*((u32_t *) &data[sizeof(u32_t)])); mylog(log_debug,"[%s][hb]received hb \n",ip_port); conn_info.last_hb_recv_time = get_current_time(); From d487ca57f74ed79d47a87904df80eddf4e68b2a0 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Mon, 6 Nov 2017 03:15:05 -0600 Subject: [PATCH 18/72] changed parameter --- main.cpp | 8 ++++---- misc.h | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/main.cpp b/main.cpp index ac8a85d..472bbc1 100755 --- a/main.cpp +++ b/main.cpp @@ -242,7 +242,7 @@ int client_on_timer(conn_info_t &conn_info) //for client. called when a timer is mylog(log_debug,"heartbeat sent <%x,%x>\n",conn_info.oppsite_id,conn_info.my_id); - send_safer(conn_info,'h',"",0);/////////////send + send_safer(conn_info,'h',hb_buf,hb_len);/////////////send conn_info.last_hb_sent_time=get_current_time(); return 0; @@ -285,7 +285,7 @@ int server_on_timer_multi(conn_info_t &conn_info,char * ip_port) //for server. return 0; } - send_safer(conn_info,'h',"",0); /////////////send + send_safer(conn_info,'h',hb_buf,hb_len); /////////////send conn_info.last_hb_sent_time=get_current_time(); @@ -920,7 +920,7 @@ int server_on_raw_recv_pre_ready(conn_info_t &conn_info,char * ip_port,u32_t tmp conn_info.last_hb_recv_time = get_current_time(); conn_info.last_hb_sent_time = conn_info.last_hb_recv_time;//=get_current_time() - send_safer(conn_info, 'h',"", 0); /////////////send + send_safer(conn_info, 'h',hb_buf, hb_len); /////////////send mylog(log_info, "[%s]changed state to server_ready\n",ip_port); conn_info.blob->anti_replay.re_init(); @@ -980,7 +980,7 @@ int server_on_raw_recv_pre_ready(conn_info_t &conn_info,char * ip_port,u32_t tmp //ori_conn_info.state.server_current_state=server_ready; ori_conn_info.recover(conn_info); - send_safer(ori_conn_info, 'h',"", 0); + send_safer(ori_conn_info, 'h',hb_buf, hb_len); //ori_conn_info.blob->anti_replay.re_init(); diff --git a/misc.h b/misc.h index 2049d3e..7a287b0 100644 --- a/misc.h +++ b/misc.h @@ -25,13 +25,13 @@ const u32_t client_retry_interval=1000;//ms const u32_t server_handshake_timeout=client_handshake_timeout+5000;// this should be longer than clients. client retry initially ,server retry passtively -const int conv_clear_ratio=10; //conv grabage collecter check 1/10 of all conv one time -const int conn_clear_ratio=30; +const int conv_clear_ratio=30; //conv grabage collecter check 1/30 of all conv one time +const int conn_clear_ratio=50; const int conv_clear_min=1; const int conn_clear_min=1; -const u32_t conv_clear_interval=3000;//ms -const u32_t conn_clear_interval=3000;//ms +const u32_t conv_clear_interval=1000;//ms +const u32_t conn_clear_interval=1000;//ms const i32_t max_fail_time=0;//disable From 50f682daf41638be43e1e98a3a825b939190ba22 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Tue, 7 Nov 2017 01:07:32 -0600 Subject: [PATCH 19/72] new option hb-mode --- main.cpp | 34 +++++++++++++++++++++++++--------- misc.cpp | 9 +++++++++ misc.h | 2 +- 3 files changed, 35 insertions(+), 10 deletions(-) diff --git a/main.cpp b/main.cpp index 472bbc1..1d1b1da 100755 --- a/main.cpp +++ b/main.cpp @@ -9,6 +9,7 @@ int mtu_warn=1375;//if a packet larger than mtu warn is receviced,there will be a warning + char hb_buf[buf_len]; int hb_len=1200; @@ -242,8 +243,10 @@ int client_on_timer(conn_info_t &conn_info) //for client. called when a timer is mylog(log_debug,"heartbeat sent <%x,%x>\n",conn_info.oppsite_id,conn_info.my_id); - send_safer(conn_info,'h',hb_buf,hb_len);/////////////send - + if(hb_mode==0) + send_safer(conn_info,'h',hb_buf,0);/////////////send + else + send_safer(conn_info,'h',hb_buf,hb_len); conn_info.last_hb_sent_time=get_current_time(); return 0; } @@ -285,8 +288,10 @@ int server_on_timer_multi(conn_info_t &conn_info,char * ip_port) //for server. return 0; } - send_safer(conn_info,'h',hb_buf,hb_len); /////////////send - + if(hb_mode==0) + send_safer(conn_info,'h',hb_buf,0); /////////////send + else + send_safer(conn_info,'h',hb_buf,hb_len); conn_info.last_hb_sent_time=get_current_time(); mylog(log_debug,"heart beat sent<%x,%x>\n",conn_info.my_id,conn_info.oppsite_id); @@ -442,7 +447,8 @@ int client_on_raw_recv(conn_info_t &conn_info) //called when raw fd received a p { mylog(log_trace,"received a data from fake tcp,len:%d\n",data_len); - conn_info.last_hb_recv_time=get_current_time(); + if(hb_mode==0) + conn_info.last_hb_recv_time=get_current_time(); //u32_t tmp_conv_id= ntohl(* ((u32_t *)&data[0])); u32_t tmp_conv_id; @@ -790,7 +796,8 @@ int server_on_raw_recv_ready(conn_info_t &conn_info,char * ip_port,char type,cha tmp_conv_id=ntohl(tmp_conv_id); - conn_info.last_hb_recv_time = get_current_time(); + if(hb_mode==0) + conn_info.last_hb_recv_time = get_current_time(); mylog(log_trace, "conv:%u\n", tmp_conv_id); if (!conn_info.blob->conv_manager.is_conv_used(tmp_conv_id)) { @@ -916,11 +923,14 @@ int server_on_raw_recv_pre_ready(conn_info_t &conn_info,char * ip_port,u32_t tmp //my_id=conn_info.my_id; //oppsite_id=conn_info.oppsite_id; - conn_info.last_hb_recv_time = get_current_time(); + conn_info.last_hb_sent_time = conn_info.last_hb_recv_time;//=get_current_time() - send_safer(conn_info, 'h',hb_buf, hb_len); /////////////send + if(hb_mode==0) + send_safer(conn_info,'h',hb_buf,0);/////////////send + else + send_safer(conn_info,'h',hb_buf,hb_len); mylog(log_info, "[%s]changed state to server_ready\n",ip_port); conn_info.blob->anti_replay.re_init(); @@ -980,8 +990,14 @@ int server_on_raw_recv_pre_ready(conn_info_t &conn_info,char * ip_port,u32_t tmp //ori_conn_info.state.server_current_state=server_ready; ori_conn_info.recover(conn_info); - send_safer(ori_conn_info, 'h',hb_buf, hb_len); + //send_safer(ori_conn_info, 'h',hb_buf, hb_len); //ori_conn_info.blob->anti_replay.re_init(); + if(hb_mode==0) + send_safer(ori_conn_info,'h',hb_buf,0);/////////////send + else + send_safer(ori_conn_info,'h',hb_buf,hb_len); + + ori_conn_info.last_hb_recv_time=get_current_time(); diff --git a/misc.cpp b/misc.cpp index 033c33c..b39fbcf 100644 --- a/misc.cpp +++ b/misc.cpp @@ -13,6 +13,8 @@ #include "fd_manager.h" +int hb_mode=1; + fd_manager_t fd_manager; char local_ip[100]="0.0.0.0", remote_ip[100]="255.255.255.255",source_ip[100]="0.0.0.0";//local_ip is for -l option,remote_ip for -r option,source for --source-ip @@ -247,6 +249,7 @@ void process_arg(int argc, char *argv[]) //process all options {"force-sock-buf", no_argument, 0, 1}, {"random-drop", required_argument, 0, 1}, {"fifo", required_argument, 0, 1}, + {"hb-mode", required_argument, 0, 1}, {NULL, 0, 0, 0} }; @@ -589,6 +592,12 @@ void process_arg(int argc, char *argv[]) //process all options { mylog(log_info,"configuration loaded from %s\n",optarg); } + else if(strcmp(long_options[option_index].name,"hb-mode")==0) + { + sscanf(optarg,"%d",&hb_mode); + assert(hb_mode==0||hb_mode==1); + mylog(log_info,"hb_mode =%d \n",hb_mode); + } else { diff --git a/misc.h b/misc.h index 7a287b0..84ea943 100644 --- a/misc.h +++ b/misc.h @@ -13,7 +13,7 @@ #include "log.h" #include "network.h" - +extern int hb_mode; const u32_t max_handshake_conn_num=10000; const u32_t max_ready_conn_num=1000; From 14ece87bc3c34a9d6146b63ef86acbc2a5de623b Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 9 Nov 2017 02:18:22 -0600 Subject: [PATCH 20/72] tune parameter --- misc.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/misc.h b/misc.h index 84ea943..2d96e6e 100644 --- a/misc.h +++ b/misc.h @@ -25,8 +25,8 @@ const u32_t client_retry_interval=1000;//ms const u32_t server_handshake_timeout=client_handshake_timeout+5000;// this should be longer than clients. client retry initially ,server retry passtively -const int conv_clear_ratio=30; //conv grabage collecter check 1/30 of all conv one time -const int conn_clear_ratio=50; +const int conv_clear_ratio=20; //conv grabage collecter check 1/20 of all conv one time +const int conn_clear_ratio=40; const int conv_clear_min=1; const int conn_clear_min=1; @@ -36,9 +36,9 @@ const u32_t conn_clear_interval=1000;//ms const i32_t max_fail_time=0;//disable -const u32_t heartbeat_interval=1000;//ms +const u32_t heartbeat_interval=500;//ms -const u32_t timer_interval=400;//ms. this should be smaller than heartbeat_interval and retry interval; +const u32_t timer_interval=600;//ms. this should be smaller than heartbeat_interval and retry interval; const uint32_t conv_timeout=120000; //ms. 120 second //const u32_t conv_timeout=30000; //for test From 0a4555dd4271260aa0c50badcf73f16aaaec6d47 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Wed, 8 Nov 2017 15:55:41 -0800 Subject: [PATCH 21/72] Update README.md --- README.md | 3 ++- doc/README.zh-cn.md | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 569856a..b98e502 100755 --- a/README.md +++ b/README.md @@ -16,7 +16,8 @@ or # Support Platforms Linux host (including desktop Linux,Android phone/tablet,OpenWRT router,or Raspberry PI) with root access. -For Winodws/MacOS,the 4.4mb virtual image with udp2raw pre-installed has been released,you can load it with Vmware/VirtualBox.The virtual image has been set to auto obtain ip,udp2raw can be run imidiately after boot finished(make sure network mode of virtual machine has been set to bridged)(only udp2raw has to be run under virtual machine,all other programs runs under Windows/MacOS as usual). +For Windows and MacOS You can run udp2raw inside [this](https://github.com/wangyu-/udp2raw-tunnel/releases/download/20171108.0/lede-17.01.2-x86_virtual_machine_image.zip) 7.5mb virtual machine image(make sure network adapter runs at bridged mode). + # Features diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index ba38279..13b4c81 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -20,8 +20,7 @@ https://github.com/wangyu-/UDPspeeder # 支持的平台 Linux主机,有root权限。可以是PC、android手机/平板、openwrt路由器、树莓派。主机上最好安装了iptables命令(apt/yum很容易安装)。 -在windows和mac上预装了udp2raw的虚拟机镜像已发布,可以用Vmware或VirtualBox加载,容量4.4mb,已经配置好了自动获取网卡ip,开机即用,稳定,性能很好。 -(udp2raw跑在虚拟机里,其他应用照常跑在windows上)(确保虚拟机网卡工作在桥接模式)(Vmware player 75mb,VirtualBox 118mb,很容易安装)。 +对于windows和mac用户,在虚拟机中可以稳定使用(udp2raw跑在Linux里,其他应用照常跑在window里;确保虚拟机网卡工作在桥接模式)。可以使用[这个](https://github.com/wangyu-/udp2raw-tunnel/releases/download/20171108.0/lede-17.01.2-x86_virtual_machine_image.zip)虚拟机镜像,大小只有7.5mb,免去在虚拟机里装系统的麻烦;虚拟机自带ssh server,可以scp拷贝文件,可以ssh进去,可以复制粘贴,root密码123456。 # 功能特性 ### 把udp流量伪装成tcp /icmp From 2f12d552295b9a6c43da2c99db9a53de61da7002 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 9 Nov 2017 02:37:26 -0600 Subject: [PATCH 22/72] tuned parameter --- misc.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/misc.h b/misc.h index 2d96e6e..31c5c15 100644 --- a/misc.h +++ b/misc.h @@ -25,8 +25,8 @@ const u32_t client_retry_interval=1000;//ms const u32_t server_handshake_timeout=client_handshake_timeout+5000;// this should be longer than clients. client retry initially ,server retry passtively -const int conv_clear_ratio=20; //conv grabage collecter check 1/20 of all conv one time -const int conn_clear_ratio=40; +const int conv_clear_ratio=30; //conv grabage collecter check 1/30 of all conv one time +const int conn_clear_ratio=50; const int conv_clear_min=1; const int conn_clear_min=1; @@ -36,9 +36,9 @@ const u32_t conn_clear_interval=1000;//ms const i32_t max_fail_time=0;//disable -const u32_t heartbeat_interval=500;//ms +const u32_t heartbeat_interval=600;//ms -const u32_t timer_interval=600;//ms. this should be smaller than heartbeat_interval and retry interval; +const u32_t timer_interval=400;//ms. this should be smaller than heartbeat_interval and retry interval; const uint32_t conv_timeout=120000; //ms. 120 second //const u32_t conv_timeout=30000; //for test From 43ae798e77bef3e5222063d39a741801289e090f Mon Sep 17 00:00:00 2001 From: wangyu- Date: Sat, 11 Nov 2017 01:07:28 -0600 Subject: [PATCH 23/72] improve heartbeat --- connection.cpp | 12 +++++++++++- main.cpp | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/connection.cpp b/connection.cpp index 667f91f..2638cf0 100644 --- a/connection.cpp +++ b/connection.cpp @@ -711,7 +711,17 @@ int parse_safer(conn_info_t &conn_info,const char * input,int input_len,char &ty conn_info.oppsite_roller=roller; conn_info.last_oppsite_roller_time=get_current_time(); } - conn_info.my_roller++;//increase on a successful recv + if(hb_mode==0) + conn_info.my_roller++;//increase on a successful recv + else if(hb_mode==1) + { + if(type=='h') + conn_info.my_roller++; + } + else + { + assert(0==1); + } if(after_recv_raw0(conn_info.raw_info)!=0) return -1; diff --git a/main.cpp b/main.cpp index 1d1b1da..2c06530 100755 --- a/main.cpp +++ b/main.cpp @@ -439,7 +439,7 @@ int client_on_raw_recv(conn_info_t &conn_info) //called when raw fd received a p } if(data_len>=0&&type=='h') { - mylog(log_debug,"[hb]heart beat received\n"); + mylog(log_debug,"[hb]heart beat received,oppsite_roller=%d\n",int(conn_info.oppsite_roller)); conn_info.last_hb_recv_time=get_current_time(); return 0; } From 706cb0b5835258abdd1234a0224c54b37de869a9 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 9 Nov 2017 17:02:02 -0800 Subject: [PATCH 24/72] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b98e502..5a2e53b 100755 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ A Tunnel which turns UDP Traffic into Encrypted FakeTCP/UDP/ICMP Traffic by using Raw Socket, helps you Bypass UDP FireWalls(or Unstable UDP Environment). It can defend Replay-Attack and supports Multiplexing. It also acts as a Connection Stabilizer. -When used alone,udp2raw tunnels only UDP traffic. Nevertheless,if you used udp2raw + any UDP-based VPN together,you can tunnel any traffic(include TCP/UDP/ICMP),currently OpenVPN/L2TP/ShadowVPN and [tinyFecVPN](https://github.com/wangyu-/tinyFecVPN) are confirmed to be supported。 +When used alone,udp2raw tunnels only UDP traffic. Nevertheless,if you used udp2raw + any UDP-based VPN together,you can tunnel any traffic(include TCP/UDP/ICMP),currently OpenVPN/L2TP/ShadowVPN and [tinyFecVPN](https://github.com/wangyu-/tinyFecVPN) are confirmed to be supported. ![image0](images/image0.PNG) From 7599d99fcc37303181a36a80fb451449cc3562f0 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Sat, 11 Nov 2017 01:15:50 -0600 Subject: [PATCH 25/72] new option hb-len --- main.cpp | 2 +- misc.cpp | 9 +++++++++ misc.h | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/main.cpp b/main.cpp index 2c06530..3194ba0 100755 --- a/main.cpp +++ b/main.cpp @@ -11,7 +11,7 @@ int mtu_warn=1375;//if a packet larger than mtu warn is receviced,there will be char hb_buf[buf_len]; -int hb_len=1200; + int server_on_raw_recv_pre_ready(conn_info_t &conn_info,char * ip_port,u32_t tmp_oppsite_const_id); int server_on_raw_recv_ready(conn_info_t &conn_info,char * ip_port,char type,char *data,int data_len); diff --git a/misc.cpp b/misc.cpp index b39fbcf..dcf7e89 100644 --- a/misc.cpp +++ b/misc.cpp @@ -14,6 +14,7 @@ int hb_mode=1; +int hb_len=1200; fd_manager_t fd_manager; @@ -151,6 +152,7 @@ void print_help() printf(" the parameter automatically,specify it manually if 'auto' failed\n"); printf(" --gen-add generate iptables rule and add it permanently,then exit.overrides -g\n"); printf(" --keep-rule monitor iptables and auto re-add if necessary.implys -a\n"); + printf(" --hb-len length of heart-beat packet\n"); printf(" --clear clear any iptables rules added by this program.overrides everything\n"); printf(" -h,--help print this help message\n"); @@ -250,6 +252,7 @@ void process_arg(int argc, char *argv[]) //process all options {"random-drop", required_argument, 0, 1}, {"fifo", required_argument, 0, 1}, {"hb-mode", required_argument, 0, 1}, + {"hb-len", required_argument, 0, 1}, {NULL, 0, 0, 0} }; @@ -598,6 +601,12 @@ void process_arg(int argc, char *argv[]) //process all options assert(hb_mode==0||hb_mode==1); mylog(log_info,"hb_mode =%d \n",hb_mode); } + else if(strcmp(long_options[option_index].name,"hb-len")==0) + { + sscanf(optarg,"%d",&hb_len); + assert(hb_len>=0&&hb_len<=1500); + mylog(log_info,"hb_len =%d \n",hb_len); + } else { diff --git a/misc.h b/misc.h index 31c5c15..28adad2 100644 --- a/misc.h +++ b/misc.h @@ -14,6 +14,7 @@ #include "network.h" extern int hb_mode; +extern int hb_len; const u32_t max_handshake_conn_num=10000; const u32_t max_ready_conn_num=1000; From 211d7ea4d366071680e6089f595e897ba39bac6a Mon Sep 17 00:00:00 2001 From: wangyu- Date: Sat, 11 Nov 2017 01:46:58 -0600 Subject: [PATCH 26/72] help page --- misc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc.cpp b/misc.cpp index dcf7e89..e7b52a2 100644 --- a/misc.cpp +++ b/misc.cpp @@ -152,7 +152,7 @@ void print_help() printf(" the parameter automatically,specify it manually if 'auto' failed\n"); printf(" --gen-add generate iptables rule and add it permanently,then exit.overrides -g\n"); printf(" --keep-rule monitor iptables and auto re-add if necessary.implys -a\n"); - printf(" --hb-len length of heart-beat packet\n"); + printf(" --hb-len length of heart-beat packet, >=0 and <=1500\n"); printf(" --clear clear any iptables rules added by this program.overrides everything\n"); printf(" -h,--help print this help message\n"); From 5b1e59cae241792db64aa663def0f1341cf955da Mon Sep 17 00:00:00 2001 From: wangyu- Date: Sat, 11 Nov 2017 01:58:21 -0600 Subject: [PATCH 27/72] trival --- main.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/main.cpp b/main.cpp index 3194ba0..7f255ad 100755 --- a/main.cpp +++ b/main.cpp @@ -229,11 +229,6 @@ int client_on_timer(conn_info_t &conn_info) //for client. called when a timer is return 0; } - if(get_current_time()-conn_info.last_hb_sent_timeclient_conn_uplink_timeout) { conn_info.state.client_current_state=client_idle; @@ -241,6 +236,14 @@ int client_on_timer(conn_info_t &conn_info) //for client. called when a timer is mylog(log_info,"state back to client_idle from client_ready bc of client-->server direction timeout\n"); } + + if(get_current_time()-conn_info.last_hb_sent_time\n",conn_info.oppsite_id,conn_info.my_id); if(hb_mode==0) From 9516cfe99dbb67b0653084d701b735889bb45081 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Fri, 17 Nov 2017 02:17:41 -0600 Subject: [PATCH 28/72] increased conv_timeout to 180s --- misc.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc.h b/misc.h index 28adad2..7872517 100644 --- a/misc.h +++ b/misc.h @@ -41,7 +41,7 @@ const u32_t heartbeat_interval=600;//ms const u32_t timer_interval=400;//ms. this should be smaller than heartbeat_interval and retry interval; -const uint32_t conv_timeout=120000; //ms. 120 second +const uint32_t conv_timeout=180000; //ms. 120 second //const u32_t conv_timeout=30000; //for test const u32_t client_conn_timeout=10000;//ms. From c33bb552cdc1dcc79de2c1200d4dfabfbdeeea4e Mon Sep 17 00:00:00 2001 From: wangyu- Date: Sat, 11 Nov 2017 14:35:08 -0800 Subject: [PATCH 29/72] Update README.zh-cn.md --- doc/README.zh-cn.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index 13b4c81..68b864e 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -162,14 +162,14 @@ facktcp模式并没有模拟tcp的全部。所以理论上有办法把faketcp和 ### `--keep-rule` 定期主动检查iptables,如果udp2raw添加的iptables规则丢了,就重新添加。在一些iptables可能会被其他程序清空的情况下(比如梅林固件和openwrt的路由器)格外有用。 -### `--lower-level` -大部分udp2raw不能连通的情况都是设置了不兼容的iptables造成的。--lower-level选项允许绕过本地iptables。在一些iptables不好改动的情况下尤其有效(比如你用的是梅林固件,iptables全是固件自己生成的)。 - ### `--fifo` 指定一个fifo(named pipe)来向运行中的程序发送命令,例如`--fifo fifo.file`: 在client端,可以用`echo reconnect >fifo.file`来强制client换端口重连(上层不断线).对Server,目前没有效果。 +### `--lower-level` +大部分udp2raw不能连通的情况都是设置了不兼容的iptables造成的。--lower-level选项允许绕过本地iptables。在一些iptables不好改动的情况下尤其有效(比如你用的是梅林固件,iptables全是固件自己生成的)。 + ##### 格式 `if_name#dest_mac_adress`,例如 `eth0#00:23:45:67:89:b9` 。`eth0`换成你的出口网卡名。`00:23:45:67:89:b9`换成网关的mac地址(如果client和server在同一个局域网内,可能不需要网关,这时候直接用对方主机的mac地址,这个属于罕见的应用场景,可以忽略)。 From 8b59b4afb9f14366a716051154dbd2340b901589 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Tue, 14 Nov 2017 21:14:49 -0800 Subject: [PATCH 30/72] Delete udp2rawopenvpn.PNG --- images/udp2rawopenvpn.PNG | Bin 44610 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 images/udp2rawopenvpn.PNG diff --git a/images/udp2rawopenvpn.PNG b/images/udp2rawopenvpn.PNG deleted file mode 100644 index d66478e52f15fa3b6638fc2732199abdaca9e98e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44610 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 dz0c;|I^<<#?o-!f_yY;>IO%Z4zS=e*^ Date: Wed, 15 Nov 2017 13:15:21 +0800 Subject: [PATCH 31/72] Add files via upload --- images/udp2rawopenvpn.PNG | Bin 0 -> 59954 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/udp2rawopenvpn.PNG diff --git a/images/udp2rawopenvpn.PNG b/images/udp2rawopenvpn.PNG new file mode 100644 index 0000000000000000000000000000000000000000..20b1970467217b2d2ac75642cad5fcd2673a09da GIT binary patch literal 59954 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 Date: Tue, 14 Nov 2017 21:20:02 -0800 Subject: [PATCH 32/72] Update README.zh-cn.md --- doc/README.zh-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index 68b864e..0fb14fc 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -1,4 +1,4 @@ -Udp2raw-tunnel +# Udp2raw-tunnel ![image2](/images/image2.PNG) udp2raw tunnel,通过raw socket给UDP包加上TCP或ICMP header,进而绕过UDP屏蔽或QoS,或在UDP不稳定的环境下提升稳定性。可以有效防止在使用kcptun或者finalspeed的情况下udp端口被运营商限速。 From 51b45c8f39ab8ee0c89de47683ebe10803aa6aea Mon Sep 17 00:00:00 2001 From: wangyu- Date: Sat, 18 Nov 2017 09:50:23 -0600 Subject: [PATCH 33/72] new option mtu-warn --- main.cpp | 2 -- misc.cpp | 12 +++++++++++- misc.h | 1 + 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/main.cpp b/main.cpp index 7f255ad..507c34b 100755 --- a/main.cpp +++ b/main.cpp @@ -7,8 +7,6 @@ #include "encrypt.h" #include "fd_manager.h" -int mtu_warn=1375;//if a packet larger than mtu warn is receviced,there will be a warning - char hb_buf[buf_len]; diff --git a/misc.cpp b/misc.cpp index e7b52a2..ec213e9 100644 --- a/misc.cpp +++ b/misc.cpp @@ -16,6 +16,9 @@ int hb_mode=1; int hb_len=1200; +int mtu_warn=1375;//if a packet larger than mtu warn is receviced,there will be a warning + + fd_manager_t fd_manager; char local_ip[100]="0.0.0.0", remote_ip[100]="255.255.255.255",source_ip[100]="0.0.0.0";//local_ip is for -l option,remote_ip for -r option,source for --source-ip @@ -139,6 +142,7 @@ void print_help() // printf("\n"); printf(" --sock-buf buf size for socket,>=10 and <=10240,unit:kbyte,default:1024\n"); printf(" --force-sock-buf bypass system limitation while setting sock-buf\n"); + printf(" --mtu-warn mtu warning threshold, unit:byte, default:1375\n"); printf(" --seq-mode seq increase mode for faketcp:\n"); printf(" 0:static header,do not increase seq and ack_seq\n"); printf(" 1:increase seq for every packet,simply ack last seq\n"); @@ -253,6 +257,7 @@ void process_arg(int argc, char *argv[]) //process all options {"fifo", required_argument, 0, 1}, {"hb-mode", required_argument, 0, 1}, {"hb-len", required_argument, 0, 1}, + {"mtu-warn", required_argument, 0, 1}, {NULL, 0, 0, 0} }; @@ -607,7 +612,12 @@ void process_arg(int argc, char *argv[]) //process all options assert(hb_len>=0&&hb_len<=1500); mylog(log_info,"hb_len =%d \n",hb_len); } - + else if(strcmp(long_options[option_index].name,"mtu-warn")==0) + { + sscanf(optarg,"%d",&mtu_warn); + assert(mtu_warn>0); + mylog(log_info,"mtu_warn=%d \n",mtu_warn); + } else { mylog(log_warn,"ignored unknown long option ,option_index:%d code:<%x>\n",option_index, optopt); diff --git a/misc.h b/misc.h index 7872517..acdb4f2 100644 --- a/misc.h +++ b/misc.h @@ -15,6 +15,7 @@ extern int hb_mode; extern int hb_len; +extern int mtu_warn; const u32_t max_handshake_conn_num=10000; const u32_t max_ready_conn_num=1000; From b01b087949d8c3ee6be028508c7a46b93d698f0f Mon Sep 17 00:00:00 2001 From: wangyu- Date: Sat, 18 Nov 2017 02:10:59 -0800 Subject: [PATCH 34/72] Update README.zh-cn.md --- doc/README.zh-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index 0fb14fc..b78dc45 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -52,7 +52,7 @@ NAT 穿透 ,tcp icmp udp模式都支持nat穿透。 支持Openwrt,没有编译依赖,容易编译到任何平台上。release中提供了ar71xx版本的binary -epoll纯异步,高并发,除了回收过期连接外,所有操作的时间复杂度都跟连接数无关。回收过期连接的操做也是柔和进行的,不会因为消耗太多cpu时间造成延迟抖动。 +epoll实现,高并发,除了回收过期连接外,所有操作的时间复杂度都跟连接数无关。回收过期连接的操做也是柔和进行的,不会因为消耗太多cpu时间造成延迟抖动。 ### 关键词 突破udp qos,突破udp屏蔽,openvpn tcp over tcp problem,openvpn over icmp,udp to icmp tunnel,udp to tcp tunnel,udp via icmp,udp via tcp From 9162a533d35a24daf0e5cdb84b558790ebe092c9 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Sat, 18 Nov 2017 09:51:50 -0600 Subject: [PATCH 35/72] changed -h page --- images/wiki/111 | 1 + misc.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 images/wiki/111 diff --git a/images/wiki/111 b/images/wiki/111 new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/images/wiki/111 @@ -0,0 +1 @@ + diff --git a/misc.cpp b/misc.cpp index ec213e9..185b2dd 100644 --- a/misc.cpp +++ b/misc.cpp @@ -142,7 +142,6 @@ void print_help() // printf("\n"); printf(" --sock-buf buf size for socket,>=10 and <=10240,unit:kbyte,default:1024\n"); printf(" --force-sock-buf bypass system limitation while setting sock-buf\n"); - printf(" --mtu-warn mtu warning threshold, unit:byte, default:1375\n"); printf(" --seq-mode seq increase mode for faketcp:\n"); printf(" 0:static header,do not increase seq and ack_seq\n"); printf(" 1:increase seq for every packet,simply ack last seq\n"); @@ -157,6 +156,7 @@ void print_help() printf(" --gen-add generate iptables rule and add it permanently,then exit.overrides -g\n"); printf(" --keep-rule monitor iptables and auto re-add if necessary.implys -a\n"); printf(" --hb-len length of heart-beat packet, >=0 and <=1500\n"); + printf(" --mtu-warn mtu warning threshold, unit:byte, default:1375\n"); printf(" --clear clear any iptables rules added by this program.overrides everything\n"); printf(" -h,--help print this help message\n"); From c22b5e96809f9b091c79bfbafd1d9851bab3053d Mon Sep 17 00:00:00 2001 From: wangyu- Date: Sun, 19 Nov 2017 12:40:53 +0800 Subject: [PATCH 36/72] Add files via upload --- README.md | 4 +--- doc/README.zh-cn.md | 16 +++++++++++++--- images/wiki/mac_nat_vb1.PNG | Bin 0 -> 56836 bytes images/wiki/mac_nat_vb2.PNG | Bin 0 -> 71699 bytes images/wiki/mac_nat_vb3.PNG | Bin 0 -> 69723 bytes images/wiki/mac_nat_vb4.PNG | Bin 0 -> 76474 bytes images/wiki/windows_nat.PNG | Bin 0 -> 11376 bytes images/wiki/windows_nat_vb1.PNG | Bin 0 -> 27837 bytes images/wiki/windows_nat_vb2.PNG | Bin 0 -> 21907 bytes images/wiki/windows_nat_vm1.PNG | Bin 0 -> 33890 bytes images/wiki/windows_nat_vm2.PNG | Bin 0 -> 29589 bytes 11 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 images/wiki/mac_nat_vb1.PNG create mode 100644 images/wiki/mac_nat_vb2.PNG create mode 100644 images/wiki/mac_nat_vb3.PNG create mode 100644 images/wiki/mac_nat_vb4.PNG create mode 100644 images/wiki/windows_nat.PNG create mode 100644 images/wiki/windows_nat_vb1.PNG create mode 100644 images/wiki/windows_nat_vb2.PNG create mode 100644 images/wiki/windows_nat_vm1.PNG create mode 100644 images/wiki/windows_nat_vm2.PNG diff --git a/README.md b/README.md index 5a2e53b..4e5c5c1 100755 --- a/README.md +++ b/README.md @@ -3,11 +3,9 @@ A Tunnel which turns UDP Traffic into Encrypted FakeTCP/UDP/ICMP Traffic by using Raw Socket, helps you Bypass UDP FireWalls(or Unstable UDP Environment). It can defend Replay-Attack and supports Multiplexing. It also acts as a Connection Stabilizer. -When used alone,udp2raw tunnels only UDP traffic. Nevertheless,if you used udp2raw + any UDP-based VPN together,you can tunnel any traffic(include TCP/UDP/ICMP),currently OpenVPN/L2TP/ShadowVPN and [tinyFecVPN](https://github.com/wangyu-/tinyFecVPN) are confirmed to be supported. - ![image0](images/image0.PNG) -or +When used alone,udp2raw tunnels only UDP traffic. Nevertheless,if you used udp2raw + any UDP-based VPN together,you can tunnel any traffic(include TCP/UDP/ICMP),currently OpenVPN/L2TP/ShadowVPN and [tinyFecVPN](https://github.com/wangyu-/tinyFecVPN) are confirmed to be supported. ![image_vpn](images/udp2rawopenvpn.PNG) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index b78dc45..00f889e 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -1,5 +1,5 @@ # Udp2raw-tunnel -![image2](/images/image2.PNG) +![image2](/images/image0.PNG) udp2raw tunnel,通过raw socket给UDP包加上TCP或ICMP header,进而绕过UDP屏蔽或QoS,或在UDP不稳定的环境下提升稳定性。可以有效防止在使用kcptun或者finalspeed的情况下udp端口被运营商限速。 支持心跳保活、自动重连,重连后会恢复上次连接,在底层掉线的情况下可以保持上层不掉线。同时有加密、防重放攻击、信道复用的功能。 @@ -20,7 +20,17 @@ https://github.com/wangyu-/UDPspeeder # 支持的平台 Linux主机,有root权限。可以是PC、android手机/平板、openwrt路由器、树莓派。主机上最好安装了iptables命令(apt/yum很容易安装)。 -对于windows和mac用户,在虚拟机中可以稳定使用(udp2raw跑在Linux里,其他应用照常跑在window里;确保虚拟机网卡工作在桥接模式)。可以使用[这个](https://github.com/wangyu-/udp2raw-tunnel/releases/download/20171108.0/lede-17.01.2-x86_virtual_machine_image.zip)虚拟机镜像,大小只有7.5mb,免去在虚拟机里装系统的麻烦;虚拟机自带ssh server,可以scp拷贝文件,可以ssh进去,可以复制粘贴,root密码123456。 +Release中提供了`amd64`、`x86`、`arm`、`mips_be`、`mips_le`的预编译binary. + +##### 对于windows和mac用户: + +在虚拟机中可以稳定使用(udp2raw跑在Linux里,其他应用照常跑在window里;确保虚拟机网卡工作在桥接模式)。可以使用[这个](https://github.com/wangyu-/udp2raw-tunnel/releases/download/20171108.0/lede-17.01.2-x86_virtual_machine_image.zip)虚拟机镜像,大小只有7.5mb,免去在虚拟机里装系统的麻烦;虚拟机自带ssh server,可以scp拷贝文件,可以ssh进去,可以复制粘贴,root密码123456。 + +如果你的网络不允许桥接,也是有办法用的,具体方法请看wiki。 + +##### 对于ios和游戏主机用户: + +可以把udp2raw运行在局域网的其他机器上。最好的办法是买个能刷OpenWrt/LEDE/梅林的路由器,把udp2raw运行在路由器上。 # 功能特性 ### 把udp流量伪装成tcp /icmp @@ -50,7 +60,7 @@ NAT 穿透 ,tcp icmp udp模式都支持nat穿透。 支持Openvz,配合finalspeed使用,可以在openvz上用tcp模式的finalspeed -支持Openwrt,没有编译依赖,容易编译到任何平台上。release中提供了ar71xx版本的binary +支持Openwrt,没有编译依赖,容易编译到任何平台上。 epoll实现,高并发,除了回收过期连接外,所有操作的时间复杂度都跟连接数无关。回收过期连接的操做也是柔和进行的,不会因为消耗太多cpu时间造成延迟抖动。 diff --git a/images/wiki/mac_nat_vb1.PNG b/images/wiki/mac_nat_vb1.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e2ea283ec302e5c3eaf20f5f7006122a92d129b4 GIT binary patch literal 56836 zcmdSAXH-*b*ER~W6%~c8peP9FR)|ssAxH}-TQO3CfFL44dJPef5<;_qf^;F$L3#~6 z0tu+pfE1CE5D2}85<(InKu&z0_nb4{GtQ51eE+^585t`hW3GG6d){-->$>LpU~Hs! z`lQH7E-tRq;0OPjaB&@x;o{;BJbsMx3*pm+Ma~zukBQ!0u8O`(%bbh9obMRk;o_=_ z<=eMC%DF!A;(?_P7Z-o)pAUB@yvTuzYa#{w?;W!MC-E2K|bDMmId--1D`_t`Z?89}R zkX!EJ{g;o6`1tGug_PAeiD?E5FxDsB(}1w*b28?HFZZJUIWPb0 zLe=x{N7A%IL)x$iTKDty@dnB3^78WE)75+)-b6Ae-iq!cWwO;>|3t}F@7(`KRdw{3 zfVhX4hF@)SFl($U{wi$ztC!1{Mk+v(!C4dR>gLN$?3CgNO#d}zV1HKk$kjv} zKep-hev2SPwZY!x;^FVufj0wDT!DfPmz~*%2lZaF9faQO>?p)yhW{zGzc(C}ZynhR zW-)^M`b_T}hEV8G`8eGmM1AIw74VpIq*o&_0kN`r78_fLr&Ay7Jv=rnGOLhUOSQ)* z1P%7Z)|rz*i3UPN^4S-_8jz#Atg2CDgAPA+o)~!2tfgbnIYF|s@c%>$`u7FyD%^$K zg}?szOzqm!YKIRnGPdE`=Lmr#?a<9ehwmvnTQ9c^JLqwtX9p!=iCYf*SpcSWo!!y*{qonl<1{3m-Y4~n3SiP(z*zax#P#~K@YRQ ziwC%I+Whid+Q-!^>}z@YV^Z_@OCX5%scM!@NI4mzzOgZ%sQ>}kNC<05=;x@$%SPOr z*2>dDGCmy-=8DbxST(7PjsVyq8n4Bo<2U|(buRRi! zZ|GN8nq+P3uV6z>P@nG938XA2NZ(|rb4+-7%R^BUY!eBE|M{O9R+fk}Q@e>h(^JDu zJWv=$Tyy-G=tFI+nP3~PCR-WxG0UABf^$Uq?iE-GGR5oQuud~;Fq#SjzXokU-k zQ-&)+mn3><-#RzF@s%8ZsnPMk6i9s+$BiSx)+Skb)o-L$2QH)z?cN3@FTRSMo=>o~ z$u#m_NrWk7dBi(1Tgns~^FUxnUc-?bMdf0eSCDK!k3?&aWGiR;=7s6jL zts@Cq@8A?MP&@aeufn=%1`rsmWD~Y{AocxfA`bN-unVIp-9=svx`aP?0?dT`=t=aO zNqMs{4GU^EXmCXRRSz;(iWx<;7;p}taX1x`GZ!K&+7FnX2WwD&-l1&*K{f^B)%r*Nmu)DB;qVpK?&bLT97|%AeZ;wQ=YsnP z8Xr0>hgwO2DHw3~Ig9FRW)Os5B&wEY6Wag#>awK1$*Zc^s}lJ4?N5{-!KdK4x53c8 zYeJnpK?ZmHW^hJ6$>W`W#~M)`ORG>(kd8Chaugyh@0pjR{$2Vf=fVK62G<7N=HL)s zpF@|Z(i1&}SzEr44_qxn*0IWoOOEv}&v}|!7%xcaG5Ht3MduZ0ibri~ij1q-R!#&J zZB|NM7xGrOFh9&K)~wX&ajAKo+biJe?Vri8o^-*0i-%vt$s;{jLz9ZH39s(8rV@jh zxaWzZ`64p5zbf|_T{5~bt1+XH$g2-{Im?(o?Dz1gvkvm&BTdabP!MegZw&%+ZbKLB zPgVSvHRJt-^vHOPn* z4x|51qP%Iy6<4(8PFFuX)uZi=0X6`t3w_8Vh8r&EBm8hQKUY!~ha&p_wK|z~Kj)(IG#I$+&L9-gRlZN8v4^^Ztf)Bh)x>g#1b}-YnIstx zM%`$MtF;ghn&YHK(>LU|;*P8i%^qT-Z)xvm#nu3g>#h%sB^gJ%%xCkSskg`d?0nFX z7%XMeKGERgoN{RpX%o$f)m?`YNmEU{CKg(Ue8As6DIrAeU^yhT&hp6#faL3q=gnbY zjpga1c+E}jrF*#Y4sgTE$SWza@gD&!gXTz^3xUnQjno+zG9dUDGl>zY8I;{N7udyzlwX_UmuF(Z#g{{hN<6Oo$Z5#_r_Vm@LkV=og4c z&QcRze&JNAK<%u#^ou+;kZRBEnVci`myw*Z8)%tO0up#xGPF2b{b1+BwCYT#fkO-k$ z>jq0@m!~{3itdK_P_L%7_@TFiFt2J}^+>2ar*LCILUvlX%(4q;Px-(y^_+8C&1BYtP>cDHF`ZCtR!b*2mHeaP z>&(ejORQw~sG+-S%WiKuaIHM}my;0&xfW@qKDO``o>tbM+j3%Wl5kF?k+5^ahf)rc zDeDQgczc0K47+g)_I+mH`M)hJiYmsh)^IsJZNV=Vq29;IMo}HUwe`9*57_NuK3?nv z-(X>n4>TgqH+e#|Bf|-I(Or5SDmSA1JTN|*Pt|D)bE##Vag4J~pkGY#eO=gmvRwW1 zpr)dhrrwWB$mf$MO9i(ro>3Fzjw38iA#aQcST|oCDW+eyP8(E&n<4M${D%;_OblWa;(4|smaxCpRGtl+|BPwhIXZo$;YT3}I{SuAw4+RbH3zpSEx%gC$^AL|Ee#2+3T=j&nrhOu#Y$#e3J|F?ar!9D%X#|U z*(na)fYcLU>w+hQE+el*;E>FUZ(*c@)$YTM;5MYRD1`1V zB5d&7)K{_dumQ<=W4uY8tgo$XbPcEd4abkS&rbhF32%)xpF zA0?%Go(4%PW6#DB$VdmG#ijn~>AO|{P9ktd4_EK9tCV#d1ElqKg zYLIBTW%fsF#C$H$Sy=l^twM*nsDgVuK2dQJ;iB`tX=Cb)hWAn!>@;AzU_P~0~`2pXgwHm)hz(X=vx)XlJX+G{JbHlR@)CAP_Gflb)SbSqT<`0?X7NY>(Z?tnQq zNxix1gG#}!+A?DOc4hxD&BPM4>GXZ8ac0%^Ng)dGyx#|eXmq-LDXP3SiSK^LZhfDX z#0tq-pZ8P6WOMNJ4*98rz+VS4SIr4A<+mu0dRf27^>S^ZXBbP}>WQ#Wmz9!Zht%0-%i!&m5`+(T%s}6EY-tI9Q4Ip^5y?*Fkq#@rF@O;N&b- zv)G8tG{l{rlYYG_b>#tu&02xIDkA}VfuxL>$K$iyO$!XO-)GX2c+pk7$X<-KZCPU! zQq$AIM$GfQsQ#=lGvMZ)SB(?4_^V!*SG2E@wwz@qX+petZ{>RF3-;O#>tErYLS4+o zkE?qWC#J2cjB0x73p6`-^24ibeN7p;$>lYk0&g$G3cQE2T#VYavZ5KgX(m1d95Y*P zoo=w*(0CU~^2@G$#9fv&Qd*=p{K>jYVCoKP-}jffTK3N@dP8b~!>FeQwq`)Q^YAcm zq;752ulG&yZp*oa%#Z%PDi|yFjG^KPW&H!4gli24iF-iBT=@!=`RdnTu3j5D5;gnn zwCV6q0U_TkHMmm($D}NE~@d`ykevweodug;777 z(LedTO+V&mznBX5-BUmQmPxwOv2r{3&AEC3 zL`A8+{#_%F6n9&IL;u(~=67dn!nB`WWy`wJf`5j}#k#LQpBkfgf+I{q|CZbB?BT zER)DUfI?l2|B$E?yrBWHqlPTmV# zt@`k6<&t>NNnwD*rED36DomoRT5`tdZdGK`xalrmSCQUfLK3e81UrhrEiBI>k z&nSqx3~FCYtO`o3PjDQ(ntPuL7L9I~iCK`mXdg>C%px9cjI)w`v5QVky9;S+>jkDB zlYJ&>Gti{9f+l2=rsXnyvzPH=^ox?>C;#-^njVQ?Bh8nG&!ZoCJE=#N#c8{+jJ=%&8g z88taC4{haV-Wj+{X`p4+EgL};_WA(}cJ}~j7n3HF3Qhvo`uw>D6 zEnC=neeDiNyuR;UK7kJ>+H0vxHc?L&joUj+rPo5 zmK|lf$UR{WOTnk`ZGcs3)qZ0D=!A_$_4$s-v?162hwcQJ%%sb63^}lrp3&6saqab? z0->BqkAypWkQfE@z&Uf|HD#GWL3?KXyOI57t6X+D#;>yOPBT(BXZXFn@$eqMo8T@t z-(>X~Co4h=MO-J!IaOhOq@W`>9t6pO zm?Z8Zt5rR7I7}JQGcg2r`!%giVunPF_3Owt5KkssHBe8}-11dkuP_#(T9b9e zK;y+=m`CvEMTRkJCj

HX0Kx$QX?=_AKm|94Np%dlRoTS80;~R!=bnx{?vVCS+yRN0w(^dUP#~Zn|GR( z=H|&peA$ZNU|aF#7eNVr39ZP~k6D*=51ayQwyWd&I=@ADA$Udn2=5^)N71ITp*m8q zggB$X-RqdS!mWrs-{+LIc<_c}W?%!Qh84QNYFYdizjOYms@nYPb*+FQ4x#U&kvnOm zv9qp-WDbzevM<;#l6QveHslZeIyHXzEw1}hma2HD!yT_$_131ow^GYv-yn;SdSCJ4 zRXiM6*{2n;)|KpOSuF5$napS<;q7g7hv*n_J|Ck4{k~t}HPm2 zH5>BS0{|}QB?TNJ9eSOiV-Jrt2vndA^*Cl}vHSP;h3{27E1Xrp1%0yGGTqfZP`}Aw zaF`b*2<{o9W#j)o{FaR`i%*LJWzWAe5!$g+GBm+<%xLYuJ*VrH=oiU-G?h!8DiQ_h zR$3NP{Y{{eg+XdY@-NPUC9b%lhWNmt^F4W^sSg)n*h}Qjp(jd2r$1zDkoP`)E!1tj zaWj8=%dj1?&SpGsxvG3>Cu%ZAldzMjoNS=jO$m+5UwAsgD~;@TmnHMGpxxM}G=t$A zmXRfgg8^HHF4&t z^Rx5c`fnwIPDlvue9g2l1S6@LCwKnVH3O1`v-LZ43U-~J@`gQA?8<5AxsTocV{pTL z8`PCg18x#_I6Po$_|xfozk2#R@1sAbEXYYqDDZ}4rfh?EK7Z?^W8EH(MKR63MO^q& zO>O3~RywBCtNmM@YcBE*f3G!gCLcAf8yH}d%e*6>fqB*0(Rl_d1{^x65D5(d0R!8A zD#IV`2B>Y)e&#`bbp8dZSbS_c2*nm20k!>|6wN%kl%N>rdYCf8ec9rax669<83o*& z_+Tqb1SjCVj6JOh1jS6PRpyunJlfu(RsE82DnLYaclNx>a+V4{3zFLO(n6;uFlMyQ zZC(j4^1v$Spgz7bp!L`Cb2Zq->H46e1C}M3apL6BWCd{y08>uu~QL;U}w=wGUNjZ~$xc3);|a7hwk%R)Swi=nFiS?MT3n(7rqs zjpl%aIKx5U@?tQqe2xPm=48mM2l7^EL5>DzRzW!|?AXGuhZdt3?{Q?0FC4W)6oS2+ zmIoW`X9Zf}6Au&c7FcHdvwA4tkXgn4le_ejWvkMU@|`Dqd&Sf9*A*_!?*|<^xC{kj zvw9J}YQvS_pj}-RBNNKOlg&f&eMHX8ukZGyL9e%scX#&^)Ta)@>>dJeGnW+RR;)ly=$GlIIA^@UABzt$aJcX|9Ler{T&r?FVQc7yB{gK zjExOw;r`O4oLpXn(H{#);SG#SPYejl8r7FVAXKg}8JQ@4jrOw}YuIuJutfVGPg@Um z^k@#enM-fu*~dba@I9p`8ZaD8K)8_{0AGYj>hE1Q@?-0-B>K1BzVfIpUz?UfM8^lqp7rCj&@(Afz;q9kS@g0#8fs*nZV9emg zSuV1o61t4)-t|yFcA{c7SOV|x#%SO+xE-m+A#@&km^<}n!Z^yKYz>!3ZF<*{s?msP~lp13(HVO8~d}*F$e81h7n(gUb`##Y+S=@L@CfNtSf-PG0$T0*{2Q zIzA7Tg^A~^O&{@{l=X1KJ?R}_*i4>LzTyTFg zC92})pyEEFDTm#eiIN_^V=2eHn=Px}P<)-)7k-_Mf9Wb657lS!#{t9E7k_e3eY(H2B@SyfwPpRFQ6t&Zq6sweAVG2BpIT=l)L>kX-iw4vL-_iy17boeV=>Tj>hvC79opd}}u zKCDKD_6Gyt$Nu)+KijF~J|f$5W1ar2MSYcS@quo6lcYxl0UkD6#Z?hz`8i>JIHn&;j7=rg`aJLc$>?)W!gxP|ss}`x}S#zGpxlLk+s={qk z7%&_+hdVtG;xzan!VTBw#CF9>*IGGgdtf`<7S=F#L}Q6Xa-HQa8(uvVTNS;N`xS;z zpP{Go8yE@TQy5AW>T=adHcIu}%#DH>$wf)1vEgeBO`RxHFgJKdG9u*Hp>v?^G`#UO z3IH?8r)^0YrnW^XxzD*XR1joR*xVt_7RwnPrdcXTc^S3vZ;~hM`$enMf(7c zlE9s@K*~htq9y9=OCC>6)j$T=7=FoRdN6+Qb6CP9) zx}Q5KnsN;?b~1rGNYXUu`>I2aNUbQQTi&I*gFMc(#ov>9R!EtBk+gerY6o1yJd!Q( z*X695Wi1wK5jCdK3HnffAWXqDS)FeacRw(k8fTOp@$1 zVkk9ucP62CVw7~cchQPEGidQ^PJh87xcT8=U%Glop`eeQb>Ak(eSa68;BE##vY(<4J`!wR+#AbZ9mxYH&Imw@ zcP|&N=x};Ck@lYOf{(jWqk7oO7oSI8lYz5w#GQ7C7Q#v!X1ZgM%? zm`|DaI^C$R$BE+$q8I>AF->J^{2@=pKDM>xAp4pja=xmH)#V&%#QlBqwM)mM`bNG6mB z{5ZYPl{ONLS7(Kks{w(bkFdX9{M^y}QevUh3lJQz^_Twdr!ZpmM{lq0Fu(Ikv=yFj zyv}ND<}^`R=3EnVT1UrE{X%9e(uEfAfUJ-7%qVwMg;m=nRnKSp2ggac?2^M}tHki$1+?!<0OO zmUyN|X0;VmXnV9&sNMqFQ6SZRD`y6ZozQwxqP@ROvl|c@i@)4u4>kJxV>^GO?9Yyc z6tJ5Q47@y?8qmd1fngu%9Xj{c8#l^YvkTiX;wS0uFBx$qqD=U^45^h;%XPjIO=FWZAgdix#ch%l^*q`a!I+Jj)a%$A@6v zho1AJc8UTMm*a}R>ntvYLzM)U=Vi#N!JhN4^&~`-Iv1^4qX8a2zYpG@Z+#&su;_FN zGjWlB<@qfyBVwYdj?^`uyToS!cX$)GXAKLOptC{eT2NA^M|>+xBp(r zzhZf=k$tc8r;~(A8lp{BTlsnR^^c41EO=$ee1-;JxnTVD?&O1^g*8pLP;1}j=+v8X zhmWL(vx7>mSW2jXGv5Za1MFR5Ir}9n_taf@#M*5ZbEyWl5#qpV4d+DMC4WGuvtH|= zn3L8K>sod&$z!#g;PiBTL+USsTGy5|hh0D+krEr_(N~24?yog4aDn%L0bAIe62fB7 zzrRZP@qcw}32UKPp%pey9A1Z3DI&J!5}YJ0CsWq7M{i}CFD>*NW-MHIP=NU`up7>W za}aN~R3rT-NHqLB_LF(kZUZ#)?+4te>pG^@vVspvVOn?{u0AcKwhVn1M)N33vwrX; zot_q{yq&)2^J5qKcLg_MdOu72=Gv)O{ij|m-RdDRbLL@Mc9W%0ms?Ih-?Q$n8*J9? zskxT<>~ks%SPL{+4AO=QjE1|Dwr;W&?)LkejM8t>cNw>Q>}u}L8lFzgax=qyvFSYI zOW|OiXe}&m>o_Qe`L0lP`oiLqE_`oqo!{D6`;Qk}?_6~s*UDGxoDec=7K!S%0B8bM z*MgbEgIS}@b4Hn(u6nWJat(xHp2uR%=kfP~VbzZ_3SZmpczGX!_=7ym#M7MVs_B)F zcz?>TRBAulekhuhJDn$>(6=^o8IIGsMEHJQqTNh3I#I{y^xW&fYzr+i*>pLFT)-T9 z%t(WZ+LvRaY0x5nJr_;$@TlLE7pT68(7}%NgQ4(^!=Ymvdqc<8K(23?K~AlVlxThc z>Fv$Y;vB`a^EXwV5eqy*M?=Q!l7`pfMHQ+8f9S{$r_McwoK@$iLPpls-oG>OeuT%N z-OiY!C!TAE!r~3b_A1tHGvdYeck*zez?COojo-T?nXG};_nm}QM{BDM z*?uya2R^8qju z_+qW(?+RZ0)f#Uhw2wPJ?ei9w8nnt;G=u2ToUisA(&wvviLf%eu1p-G3?b#cASR^J#=n zOE7c!^;cA&-8$7bot+Xk;a^fHQm^_0OQIaw4MFKpY(Z9WKPD^lpaCFLGR&h!%L!R) z`tJwZ7=5jH8^sJI>U@ZLrq1zj&L5gY(;7eh9L|9YX5E$@LWS8~f5Ca^U`IZMn+tPu zN80g$R%o1G{}QC{WLC&tv6!0oH7I4<;hkvq%9aneY#gc-8akzWQRWzD&^a~NA@XX< zO}`bb7){ItV}V3IyhKDTl1kDc7hdXwJnE>B+fza{lwetb}UKI#l~=>z~>Xh^@wsa`+bgJmjJ9_?&uz@sCy4dLAXv+;%xRRH<9#J@=KV6K(e=8+})m!ZT0ebwVgtQur^0X#oJj+D0R3jqCLq5y3&` zJ9CK;%I0*dVnyh)f}>q#7@NOWc&cgjuV=2=Kj_5P7Nw#)?4!)B`mVN{JNKRtZD!Ko z2Lsugkmzn+S2e$0%-e9u9V2NYoaDbA^E52l5Q~0HYX!L$jxds6Kn+p*&soKXLJ zp`utd$?@iEtfpwOBtp^Ickr`^@j!3GGj3-lGV!(9z`w2Z%zo)Rw8G^6`=sI#-<2V?Kq)vS$T z=5C+qJ?bs@ASu|0ZOxx(-Dw9Fs4_H9H(HJTB7^~TK7NrSd zsDMDmjoU2lDqN3=rDixst^Iy+7<&q}ah@axlwyy)j5>hj-*a^F3b2i6UZ@@@d+V+S zDr5;{!7b#ZQ?z|e_-Nbzy_qyxGJoh=Q_;)JK#5;@xCn>2sH? zucX`s6?UE?VxKb7PZ^^lR;C6zqNLWs_B(q|Mt8URP?C}W9uESBsWxl3TIe(yzoTf9 z|8H-ywAxHKr|Bu3neGZUGQ0??%&~gcdO%-|mBq9rVpBFmSC~{h$*HM+4x2 zoq9Qs)a-!j%F-Dl;&qKQCc*SKhR{zcua&?m^@MEhpJH{o9cB3U%T~I*izqu-c<~)U zGj*>#6fA9#e|LY?=*jGGXLOk#e_K63(OJ!UG>D3z4G0!O!nQG zn*Zp+4*5oXI%3DxH@BTNWNg$;zE^$hw&}a#8s%md{Q6}zvw5c9iA@b2)H;f*8-+Hd z6<+7YKF|pXX4?B%WBjj9L5_ON`K*Qs{C5;q#g{GiP}rXp?Po?Wx&HgL%E#2g{-2cV zHmrLBU1$uli1{oGeqe@%PH>2yK~GBkq~{v*4&HZ_+9?s+d$Mj%eYZXx{fK^I@H;I> zH?z-0uGY`FiJci3w21$)W2l{3ZKU;l1a49C$h8q)c6h&LwC}9%Xjbi*Obkhe?{3YO zgJ%ckm08r{W8|QbPa?-RAt|eD|IAF-bi(tijCTvtKea&M;@X?Q>zRFOse_|W&ZZ`H zI|er&-w9&jQ>eukJM-PP>EBEHuCY1t(|#52X54UM_Ifua1}r-x*R)s_GHLu)$nl1 zHW8cJ5(ns)F$J5bj@K*a=hB8+WuT>x^w)B#NG7pJU2DztV0&iai0gzRGCu%w;J0&( zg%Rc}cf~vcx(yWt-1QYxYCnWT9|Z>YpIF80UM;Pevn~a(E44H>Dz&tjm0Gu$agP=E&J;IkMAdM&ldDMtADN1RU>C}WrRIbpDc6OGu})I zyMXPbkNfl!=T9dS>ckjh(OTr1SkPVP`)rYYo2>sS>~~K&$H3TiEhVi z+IKg04Ms!BCt0_j@r17{y4MmZ=#A8^hWkgm69L=%ndW`EHQhTwXEt{kf=8)i-Sk)3 zRMe6M;!uBMcF%XqD=*>;WbedMobw<;bUu!vT@gwMkC+YXP~jvtV)guDT~z#7RYyDantJ(}w5U+@YU5-Q^y|PtX+vlGq_7UFyt>;u08Iw|wYG5Np)g znHXm+F&2ImP}Z~Z#yohzuT&|xR4ct{SlWo_mQ>(br{_Ic@9czywJg_<$fJ`)gLkuY zSHkuhiam#~H+bL->=$0tvnIU>{~$y5K~^u9t|DcgrTD)MCY)pN4CHy7m_2RVk{s*- zWPN>i-{aM=`eybpC@}KRN)DxP zDx&fD0Ky`Ok9T~Kd2qd@K8Z)+TYaGcrg{G#UR)N9lGKYobL6W z@YU&glX~u(=7*ey8vdskj!KOevY6e_1YSL?7~Es_-hU?wU&QpLzPq1KRu_q`>C~5j zjPXUqkbG)5xr^{AVYLz6Gn!mHg5Klcg_4>XI%2b8==ZhEvVGtDqg8jP%539@>}~8o znVEDXC0wC6Zm8H|i$i3oqWbcyk%vldJcDoYB+Tj_Dx@y&_v7(Zi%roV zAQs+Vmup>q{UgG44si0tmz!e8!PaNV$0D;*&t<;fm#&Sqz-R}W4}kk+gch=+GR{Y- zcb%4OIS*FvJ?io*Pf%%jU*z~l``okq-HW=pgTbXl2q}p@5*s@B<^H>4Qi%t2o|q@S zNm=cL?)+4<+@b(&$SdD?u|PD`;w>d~-3K8T3F z?|nJTr;6>5`D`yHjCH5!&epBBP7Nk;2b(;|mH@=7gGM5MQ+4n34oT@5Mm%`? zk*H?C3y<4H5h8!tpu(alL(i!$LEpl-C0FxQe($;9YJt_i15e-&m_l6(*oeY*VZ~D2 zM9@b}7%)Wz3O7fpM0XH#JE{{Il>J%8OIyweY=)V44Jh$In?#eyhy(kR1#hh#yntQ$ z8~Slec}Za-RY>$xONkJ)R;@cqa~slkqPP3ajjZ1X5&all`y!S|L$NhIba=6)PzPA8 zzml*CG~SQXz1S0jc#nE!R>ih)G0${SRc_A4PxCzOO;e3MY1pM}1S;+Ty$Z+%yPk59 z9xB_fCQGplOIw|fW^7~c{whd_K))>!ciU8PugXh2wIbjY@XcPQC0l&Y`dAS8bHkvw z^!c$GKFE_oxx$cD!0*KK*CCb(3}v7p@H6h~jK5;@!qpXo+v`H{;r0t^_Pr2qB3JK+ z19npc-;Bje3kgzNvJ=7&#CRB5zBLiiBm` zN|@vHx%vHpJfXK1hJvjlr-`m3S1C-sdlFBECom*aWJOd_{l+n*H?xj`8=kBVwcKr? zP{l0T6}L)|@XAhd^Y_F29UDrhs;AH>cs09GDI;R=5xQux>Q!e<6(#-_XyPEE#BzGM zbGRIngw6M{Mhz`OLMFDttcTZMT++7?@1{}Vv)%>+WkuqfoL40wSs*XN;M^kunz4O7 zF8nW}BeRB=8<;+mZt8+dFnLfd@)sYCf;wGKobMIr=&zzowoHm6=HhpR-iN;#ZqEYI}4a&(SeJfBrt(%!lD zVV{$I#3j&IF9~xx{Mbw44vmMjhK$+iu?e`Z3lRv~0P^PC8to%mD&$C`tR{L;C3w;ZFGvNmr;(`ll^~ z(p22fpKHDlUB?wxC2;*(B2r@6MLMAU2T4^Mjr$ccOqsI01HfgLEoGZS@2HgWw>*OK zDoCfyfB|Y|fPv5Z^VH{Mz>T+cd}!tExqnZem|UNp?C;)hL@QZA}o_UXw+xgAAwblgyz&iR`N4%%~O4WQyAE#8eOB)hA zCJ{k_`&?IrO>KB=_~y_3jpUkAC{g<@A0V%teR+nrzaU@Ie5Wz>(wVt&W^Zls#xkbXegGLgXSD>a-x5h+LSt)i6+p+#6 zG-cjkPlL7Eq0*x~Rw9sEX5*`**TT@@s1ZDIS<8p5EQ|-*qiWc5i2-d>5sSIMi%wk= zP`JR~UiET5M^l0glo$RdMszq^J=?jFZQbM-EsRLD{YHv526dhMiq~K8-E=c|QTC)@ zHA0Y!J$KvUYC#!>UcUd zr{~~>mHesNt5;kO_C>fm3dcgV8LOetcD$davW&iN&7gmiWz^=~lD?7`(N7=ddNBe5 zzk`u>BVI^Z1!b9}j`rZWr!%YO(aq3h6@Y+8cB(Kf{^zPtPmd5peP=^c@psHScmEAc zuUmyOE2>GV2(dpIiwj4N7`JH;yke?TO=v{Rrs`JTr6*Y%Ulo57cNKZ)| zIas#I=)I=^tJH7(fCLVJ(Eyn-v*BZAGG_E*aXgp34LX}gR7~@4foM)U_IFmg&kv{o zS}DY&&q`ZaJSDSsplj#;J06jP(E16uf~;bx_@+&-dD|rg;HtGr?n<~`$0eM+n)7mY zs-S%fe9-2CNF=S)s3sKYT@t+U;YNHU+c6qUJ@SLKN^p+UJ+;#kT6Qypo&xzEdSRgt zvQ4u$+25LPbq!N02xfpvzJShXNog#&$oXXFAhnS}Iw7d|?Aefr`6AkBbt#o|R#`Sxi zy$?G331+r<@$&!oe)m=lM=yeQ*b3EJ_F7ucD4T8FQF5B(OYQzoK+85TZtC(!4*KQJ z^$-5p=AZWAQ`podvK#JHXWmkWSOg!)&)2)c^vX?V&#`DOl!nXBm11Glv7+Da7lsmS zLK_|9Y88xytj85KZOPqWp1LL9Pwy|d6zJoO{7agTWUGx=x+guNhKhxy!E!RVTzOec zgWkx3E%{>kmrvQsbJ@u(zd)=p1ne_qmF-~W~7wLh==jl=_EaLfm%m*eE^^?eAN?I1%o&A-(_ z8h$Bv;fh|H^a}o6HCW-HaE3U8>anUCJBBHx zNIR?2*UQ2u@z!BNei1i7Dd$hZRr6Gb;LD;(8djfWky+6R3ah@4lpg&4{kzFsY$Nv; zLixSse*;lsR{L)WMkRVjsnpG#Ez>Qqb9+(|okF!mYTWFSUK*=a@pcwJI@Hqlt!X!w zLajNm3=#yK#k=F>8_pW-v3@IVTvb@+)QSyn$tNwGDGl9Ddp6Y;t|_P2-n}Jkv{%25 z(wG~>04r^6piXgjARlljp868n{aW%oJf3LQ4x0^i-kgWlAzgq@O$&mqg^r@!&{09> z=EZ$eoFgIp3AvZl(l3uK8!i1r8Y|VJ_rz1OH&}?ztYT|SPgPRvSwS`VkR&{B4nR5? z)XLv>QyvV_CSjVud*ifVbQM1#XHS>X>PZ4X1O~q5)w|h8e|~zFBA+KYRUn^WDpwb1 z-tsUb<&FY#_Uo5c{U^^C`?CHy%W}T}#|!L8QYh5DOQzNq!TZ8%&+tnM%VO24+yh`O zg(SEY?{PCO&8k2toY8F&LauS)%z2SO#OW#=q86kSNQ*byP3L7KgidFEwX(aEYfjh= zy#UK8pmOy_fG$iLl-!M&vpV;wI$v@Mr%Z@jMBKAac=B_PW;?mL+=CN_v&-Ni^_4pM zxSgxpjgv0QufZI3GpW4_PH^uSh6m&)2LG=>omSF$o5BL5JA%ZfB=HS`WH9Q;an=7k zo*_J0y5*Ma@Ib)zomTkq1C^hp2I4(c1~(p$ny%Ar{XF0X5ABo<98POC-D_-UsfPs1 z>Er|l)Z%S4X)YSv>~vqna=!EXVcHj9HuuS#*~($cKjMFEk!o@O6qlubj zD*i~@L=Q{1V3SM8&OH4lQyFxRAD^)+I}-+1xI>1Ftd15&OMjSlCKOD&qqV`ZIP{q+ zH2o`5sNNy*Mxn;6PwQiGCToh;iz`$Zk--HS^?NF75n@0ZdHsd{cy!8!+91pzK@C`4 zN3T#D<^ilssaB{fxV~8bw(($gAt7$gnVE5(!HRKK6pXHnlHIR>eMVXU9jYfrpw881 zQjJmaRRqRntA#|bwei8H1xx00=5pi|voj=@8;{+8{bfysDgeCi8#-b!mTzaNs##!_*Xc#S!a-(pa4@su_$9qk7;%9W|};&h^#%6 z2G9kkah+l?4_4iNqgHg29P(JFt}1T^?NJ7utI9#gy#OEUCY~EHDg}p^6L%#v^+_%7 z-JG=K(6!I=+8y89>F;Og_n@Kz5%q%aVrOU-5GS56@+Dx8mZDftPgNqN8ylA=jqFfk zQqHLPeq)p(obZX_=AK`T;gX7dE&in{LW}#?ufmf>kbC=4aF2wL9B8AAE4{{+Uc+zI zU8}lC-4KAkh*tjiU}r;X^S-&F-=={4!ZCFt-|R+f+!uP&&9E;A)3$!&??E}o)|Ezy zfn=wer#p}~Mn+V-W{k!S6HKUwUy5T83%VX49PBuH}` z%7HNZd~H?P*mc2PLpHWh8&LEbu2WW}*drAsKCDvt-@lJMYHW6W54(sdJuhvXmOiLB zH9dT>+j#hVSDei3Xy*Ti^A5yXbTiszbY|#%#!+I}rHfktm7%p$4Nd*r5D-Q*Uc@nzrPN0qU+T_^Nws&bN1xZaYlmu z@aT`$hE{c*%cQk!VJvK_{xy#zay3L$?CS>5qenS8?C(LP!}}Nz$}#l*1PSxteP=jR z9K$6orTYUhyp4rP9>Uty?ncCSN5Und^zt(IH&18GUF(-1%?p%W!ACw@S>dI&h>WBA z>X0Ch2;=3VI5B{OLRDwjlA%T0kojoS!x>epEjBbzV&atC(%jQ!llLrb;-YO}Q0Tp; z9&g;gdiecs)n-v#1JTQ$VtKr*GhzHcWhqEstEntr@&9b(xX<8Q20#YxUXCV@mUhlf zwvhMA-6|FF)o(opMn&dz&gXkWZ8qw4{yzs9QY0`(ifD4smM>;$rGV*iJz97NhEcG| zR%07EK}}48wR@)bH)CW5MXBPEq|n7>%beFSmiO;Icx(j{6QE~-S6)be$UJ-b(V*GO zxfzuK9!M)iU8g8ld0*V*IzS0hhTs0ftHeLrKwViyk8kPLcTwf0FAn;*v2RvvE5%eL zA4&*HJR+$M7I7x_+9b|;xNP_E*Yj_ty5ge{ zpUMSECo8Adl904>q0EbqQ_9PRJG(;@f4YkaVcuwyl`ixc)W;wEmCL2s!UGLP4A+HN z1YfM~#xo7k?mc&GI?^erJp3guX%&}lZX2{fp4-~$WEen%UO-}KtjF#73OUj@zYGy> z8ytdB#H{ED2AYIp)I8H}bahhfWMyytbX7sGOO+%I-~28OpHT?M!F-g?VzodIUo~A1 zcjbIIU(GJv!M`|OZH}FF1|BpHLjJlnn<4#Di6#@n*o7w7S>V*19eK>ZQr`DayZOT^ zPPkwjHg7Jcvp_o8jKCT2>YMG_9XEx$}Ed`bZS}%TY?*pyK_^K%L#SiUH zEx^_Bumhy%&Ot3~YSx*pwQASn-P_whh(#*#$LmM`v)w#I+IO|#>v(_)ll8b5@G&4~ zBJCU1;`k>2h}6gx09DgiXUVM(LrfZq_)$mI1gwMIcuF`wTJ6;^yV&kz5i>0C5Pv&} z=`yC)O5{&*g6x$Y#n&;QkzcfI19FYO91l7gkx4LJ0<)i`lGi9 z)||2nG^pvDfFtLo7eGX!TbVMYEO?|@Dd9iu;^D^DMs#9e@bX7k?%V4d!Cn2$p1ae? zhHr7McaN+-FHaem*HY@j0LB;I`!&KQb%tfewX4csRbB-$pKK(V$FljZEkw8HN}C|QY^O6R$Ap^A;w;3Q0;l0w*V$41KePej{!54f0D(do^ZY^OLs8ai!kK3+wv0MH{GzZx~=#P6Fgq3r)K*nd5uz=Z_9vKU6IS94jc) znRB_qiQ#15scT;IL&jb+bA+<-FgA4CcY1VX5ZzvAr3$)eOl2=<#X^Ld5m`%ItTaDG zI<{}s4MGOy6`bp5nNnOU4*-5bl7i&J<5a9BKoS{%p`G3E5UEbUn*JL8#5AdFXGE zYVFs{4%uSb52*EW{`hQ-W*r$1v>-M}gNwW0VBWo7&rtmNJYtRw_f8pj7u$;1Ib#Tz z5nkMSM$NnccYUe~rQ#X+{b)%}7k&Bk&ClG)8wUZuN@9iEB^ODb;baLRa3_7kw9tEo zY1kq_Qt~m>*xrld{CxfiG3J3%wR`XS|B9v4jB z4bhF*y*wN0FCrZcMAyeOeEKlxD*nkWCt|kF*(AFEq3=?ZN-;OG-@sO@XO(7{zS#GY zk1%H?2f_Cy9q=)a>!1eFYUYATbGU*Iqfkw@OUEbK+rRl{>!2&R8J-}&94xD5S;`sH z+$$hhoEpmxsx5Yj0q{BL!8R|SVvmpR@NNHkfd%^dr40L`9;9Bl_yBIE+<{zf0yRia zfl|+T0{wP}{l4Uf!cTdxdaUe52dZ?noK~MHRa<0fuP{+!@v2UV>8BwVj@DktoL_A^ zc?;=tdxyWwSXZdUA=qKzQ9{hll-rK;I`ygBmF^%xDXo2oRpg$zqj&A#ad~xW(vk}k z+6U<(0vT}GZyDP^XkOais$D8a*UgCRw)BcPFuNej>SjZQ7wa&oPIb@#v@oH-V5tW4 zXL$bw0$vaGw@6>8x^Nk^#|mKCL`mbM<7paffmC$0ZECK9L{IluW8G%DDma*&m1g3g z58>P)`^t0vs5&z;P~L_IdM zA+cTsTI@W-Ka(S5HmGp3rKG}D0Q@*UQ11<0Ssz8WOk;sdnsR5y*%|G#=zMY6R3i;Ktbc&sK?Tr#zm?<@?UX}YXFB%VjS6iYXEb@{u zkxz;qe_RA9ys(co_S#{4fjW>&w#B_8JXKK4x}{C2@ma~j_W*)yp|6$cP)rV@kz#hb zze0|S@~zF<6n-OEv~o~-)p7lQy9h*R?#7K0Sui}5_W@;~&XV#2m6R&q`uJ4%5yT*C zTNbh~{S?PjoqhPW2^MhU=5 zAQ(@Fo$+RwgPFl7Ql1?ZK1v&9S2sKU*3kC*5}GoLId|fP+@Uc9cQ&jpS?y zF$=XIDIqD8z?j_1S$<7(L<($|Kiir$*5EiWyN106n|qhDRJ|J(YLoXT(C6I@^Co3W zA$%aN<@nK(FOx=9dT%Fv<)f_M0{}w8NkXD^=lESy@~An0GPJIL_jnDX+<`K|#YRcl z4=>GZ>@v5-66qB3KdXXc@-Se5#vP2@n+!5XDoff`K^2xihS&T*Y|~g%c1pUa<*w&x zuWVljDz@5Bls&PXP$bM%hv)B6`PGb5KW~7{-97D6Fa% zC~?~h_oK@7+Q;*sH)G!V18y-69kk!(Ok5^duDN_Vwp zK8aIXWx65nU2}|v0WhOlWtd^!WzIw*wxn%-&s<5#tJ@=Im9Xdk;amNlZpkJMyz(qJ z+V7+2;(U4(F?@3qQ3)-aoF_S+yu(J>w^t6@n%U!8JYn+C3tzB>rY+cR`)>1REm1;J zQvw<+>RJOWZX6@Io}N;gNtqXM0@Gi5oN9>&y$193uw*AFSzUnY@P-tP6DYP&Xk}Sd+R?I5X8 zX63#Bh;K6C25)hGXwRxClqYq6oT8$UxW}oZS*1T) zr)g*mXvivtb&X^(_Z*^JlU)g<~W|uCp zX7@u70cAqyCa(5BXe72Q2f=lu*--6g>N8{v?=QO-i_aZzmj`%jXviC_Xl9LO`kXs7 z@Me=w11Y(tY}@~G&4m||8EkS!+GWL^GuIPIl-YYsE9fO{BKKRl4aH5kYcOA@<5SS^ z_1;&E0`G|Dr)rUZZZ7Jupq$@4m4W}4mm_T*C?;uorELHzq0~Z#?Y+{Y(=zLu<#zrS z7;9W>p_)D&EQSdk_-PROZVnqAM;HM+r4YTwZLyux$?bI)o%)2e{$ZgAj5&xsz(Hb% z6G{2bi{FwmV!ha=Miliz8+gNYeR!gd}PKQF>$|uoo0;6@kcJx;W~z1cgI2xWR&-`?W(ortf+Q+4j;89csBB=MUF78DOPJzQ?oj)2pWY z?bD{Zgd;>fLlutz#8&B#V>#+i)Q^E`U^T%e*QJ7mKaIzQ13X^NhyQLScKFR~&M}oZ zC>*fHO`H$Orp$p{=~!y`k8#+lM~q&^^zaGeG;i{id9SA}&rCk7q}cuRnBn@@wygaV zC3(`m!5Lm z_1u-r8;-o}qtqX-b(w|@{wi01cKLpX5G$jCMw7?2lsk)THoQ$M2{4+ITKgNC?;vi0 z4vE~ryYizK%UNANgxTh8&=jT*LdK1mHV6E%J$nA6Wh3WxsDPmN7v@xhTjYbh(ZVb9 zDcgv`Le}=*8Em>huCf$>?bHU-WuC1?^HG0m`meobD1>^Q>~5TKr_@sYJU_aU?9|v( z&R&Hm=XOVy^ZE_Bu%8AkP{7QUR~YSI%x4{f>i!594sQvGCj@j-fcKncvr`=g^otJ~ zQ)Lwww;w#lF)0)cuTP(ypI>=_XAMZ#3Szz=p5%+Y^CW*##-p%9zk(3ihLidUJ zJX0?T>ApiuCKA;W_xLi*EXWTeoxdpblGv22DoF zr;ts1PLv?z%%l8r_gZK6c}p^!^7$MyUV0>@rAnD!<8Mp3w4n?HfSPyqfv1XYwlC6W0>RBffh0 zLU;&gdeC0Lny)|S{-oGNTf}mLz%3$x8ar7_8@_kz4ec{$bTpxpArD|Pkp?gGX z0v``)jFi2JK(`1?&n?L{^pJKkSg;1(6ereXl}y|yi$aUK7+OOi3x7rnhiZVW4nNYN zxVw&1MNm`f#mj1-z`&ir_ukMx+eT)`M#fbr-erhJaCRw_*kM8V2SHriy-;a^>38`$Z)_^m|;w0Rm7|DLvG zFH!-V`BJo=9KvTVGLh+MQbK31b$adVy%?X_>qy6gQL1j$%i!%oR5zP>w5Wn~oV)av zy}s7BG?fX#IqKx~hy0n=hYyb+t66CcEtglu>J{X?$~y@4rlvl6T_s+^KX%@T{IqV< z@7a2Up%+c}uNgJg>Q)YqrgvSFlwZqfcLl~f)<+YENF|tC%>aof^|9pi0C>+uAvjAB zb>{e^jge2KQGy?61!FGc^~`H?`HlJz-EL_Y9kWDM$cfs6%E?TWrykc4CjuUndEnZx zS_>9fgZfsBC5S~^0KES#!J=0R9W1$vUNSegU2<)kCKZj`CQMIsW7)jl)j?ZaYg$J? ze`wLFR*?|wGSC15&8fwQBPw@(f~+#dbTPk^eEvzFQ1+h@q9)c=R+>fass&?MO(v=8 zcArgI!fruEZF`%*Q0*T%0w$Gh9=7x*L41&Ok#Z3jffX=dtf%BhAErRNY%_rdofoV( zHE$ZyP3`Soif+F~5Cto=|7jdtYFtq|Hb04DDmK7XJavD43}o;L@`oO$^*_(*i>%jgmRPt*lddBNGonw%--my)Oq7M8H%3!P&MxF=%g@k~<4b|=TC8!ESq zb0g9BJ?sUc1hfJcHT~lqpzNJW0StW-0zD4;K9TIHEDGAO)ORz}o`Br>O#2fQ`T{S$ z1~Cb^88=<~s=~j|}!@x;@Yb z2R@yo_7^?K-R*+QrgC9%86V;#*gpc{;(th|LEn%5yGTgwLAL(|{vj=eJShDWrBtd> zLUlCHcy=felUjqI>Vun-q!ZLJhmbxAy7hi$`bC5hY5Ym-Gz(WdZDcxkXF`+!L(9jp zvL(A_T(=^&lR!Jyz9`l~!p>1)4Gap-pzYwm1(Flc@h^od&>qV@WYLSgW_hXmOR?mZ zls$P&2T_z!>TmR^jnawerfD46AYnMz7rj=b-t zyW`A=C1bLX)>0^ZN87oWu20`HoAUKD1l}OzFzWqHRApRM6x=c1G2M53tazTwYojw@ z4=iap*pc1=F~yV_>u+>$cx0Vjla^HLcR5nRKKPk znOBe?&dg%-QwIhK*D3nM^!jidB_Okp3*eSeBkLhI`ZQ(Og^~g_AO*5y$H~I)jYir* z(j5;vsX$taAkk+%=3bGVioGS*)1zCUgTpsEs6hdjt*a*bhn3ACtCb(0QjQKJr~tkm zI|PQL$i`!Wi}kgws}h9oB=1qA5-P?nWcn;SZ@X;D7@SrCTkFi%9VK^eFJ0H-Ei``) zQ}XN2tkN^f5CnQf2f4&nVPyN|;@Vd)&Ko19Yt(l1c;C@UId(AL6XE~+RVE8beTm6u zO5LiHb8D&^u7uH+5A;vr!UxHE;m@TZ8GSYS;}IEy#PH*~o5O6ozvYM}9~TUL9z`>9 z$!ouN(l8!Y1UN1t3t2b*JJ?Mq+c~}ihS5Jx+H27eN36jc@8|Td_Wv3&N{7p80%&E~ zKK2@V$-2^5p3{r@0;G;ZM61b~K;q|%HORm_keLvYYwD5R-iH5avMXA`bx|(Z^_T+N zW`EIq<%K+4ON_r25>;Ambt%JdxrlCOhQ5QEqM<)`ydH*kfVV{wdwD@G5uQIWsaA6M zpDdU)xj>xemtRr!N+LYp_$bII>%AEU^mg)I`{!)b`8h&t7eR*($NtybzRnGW@U0}E zf`PVo*owg^@HiQK6J?#XU1Ztx0BF^p%f?=!(4!CwS0X9!LXNwcK9Ovl^pUzZT0@u~ z^St3th-(tqUiPf0=r?U>98>gF`x+%<<QKNw`M5NU@3E^ zj{KRBq?Y>hwa6Ivk8{u+l!xMZ8cpRGbN_R#DQ#6&pFLyi0p+eivho=-lqFo7F zQ3FP}P7Fnvzw^1MNFlekY#r6^Z+0HZV{LUl6SqDD`#D7~=5gI#(Z~y^hQpF)o46~d z%=WU3SLX5evRIa>qH})+P=O5CH=l^obRB*8NoP6x!1a35t*Z{!qrY=(hYpesd3`Bb ziTBT@8Q9bnLbAo~B=>9uCLOUjSbkTN%2k(oe*9cNy;%8lHAG!x^YKv_ALpfE*dgx?0_UWr-( z1jDdiFF5}4i7arv)A+7Zukp7yKM9qo>;IlmCoK=4Q>~Xh4NY=&!LL#O zpl@{-ii^u?eE395-8wDssRaE9)f29bLrDAsW)@BL9jzEu@Nlw>YU~ZcJ{7;CIg{mp zWzUHzn*SVwqbcCF!yg0&^z#RGyS`RT*1DF0b^M?KA()$YR?3;IOf&m9Jc**W6e7Uy zS=f`?y6G>1GrvpX8^D`WW_DHq}Xb*V-OQug{xxw5Gz63?;-0sg*S5MIW;PW}&@kSTnSO1^fq`3Of*1e^NdG;r{%tT@FInJ!U2v|BOc*YE}T|Hv2K;?$?~O z%d(ICrqaGx_9fXU!;EfS%-O#q{lfCSp_B0LK502QR-yBM3S+iLkm26sL1%q`@pu3I zKs@dsysS#%q2!s-$ye&esqhX}<3i#5!Lb?)tq2Bq$gfK448eT=JnFtn2l4~4KF1hc zg~&%Qge6+S_qx||Dy-le9ToJei|_bWWKiq2Hc6nGX?W8bHDRhCg?c94}v zH#7%B7am6wr_L30<1ORoD#{eDakNNMwAWyAcO%5q;}Fmx6mEGnGTr_LEIJ~sp_nW3 z2G@pSzE}%RPmaQrX>I13c72aSWc^hrw_JS?X?p%}lv&epYpo+^a330}+4G-<=@f%< zSj_R=3HC*TU|aqJ0$0&6 z(BvN0la-W6W)_r}4ZH!|wuYbow{c*##X{pZn@M?EUgVE!8wyFd1dW#}i%TdH5ck*P z2z_f|Im_YA=LFpFSIYasWK`$Q4PTAV3|6A9X}s6)c*Wf+{E&w)dsr8CvUN$ktx4S@ zA26D7emd4R6R^9wqdOnJA=H^rL(qjFurO>~KVOcbN=MZ9Sx1F`sNAp#{r01}& z;xzR?krU1Y1G%ofzgV${%5P1 znQ*}LJHD;wcX=JS?f3&-B_<_&fM+@YmbP2k5No8LxqH?OvRyf^((*}N3d`oOpItzg zqgfRSYX5Xru^L5|f|3UVs)E1sBUU>GwG}ft2kAhe_Tp7a{Hg0b_c1?|gD!6b-e%&F zYm*K9L071+*rqCI{_?3cvXgpSPB+f|&4^)TqJih-se-d(3|)4nnAa*xc;#^)?LWa; zOywO-vBKnwW0pi7zaEOXUg(ZCV?T#b-LVahjB6%eT(l^BDB0|oSl3~+ZhO*q6rjWPWZMP{9|0zzKEnSXPQA7Hyl z&w)LBDa$mK!yW%z-)UnwgN*VbKbI6Te(4+-NgKUU8gY46C`g4L$Z}1Y-((}cRg$}r zLSf?{;@S=)8ASPjKNn~2a&6peXN6T3u0FD&?l~**^1rg3rOHvs-bwIPN`By_Ao4P7 zr1zEt-Dl*Re8b>P0cf|5OQ917wNLkzs&M}A{c*CRij-qIjsNqVO5X=H-F|4gAJCKk z(2I5nFt&Za)L*%rdMPl5baq#^C;J$2N6pQ@`o2%V`~0()ZSmjfUN{`Nea~9Eb{jKA z$=wsD--!E6tNv4O#w-zpGTfCu4pJjPo>>N-ARrU0`pOuK!{qt970J>mjHbrtG&tuKKIo?O320WHLhOgRANaL zJHfS*FIJudgqj+6?IT@pOgeRdO_m<}ME;e!vDmw&E3+IyHR}5it=y_{=VpjaXq3$E zKOY*Y;X%EA>XA@(@i9t6GCtzIK(9)}g~$!l_VAJ_WvO$C}tf*5r}R#in_Y}_rF=?CE@yy4-Otrz)T46Arx9kYH# ziUQ$rc>dGcCI+w(#2BZyPgWCcz2mwnLDz&QY<5W9i(UzGWgP7fFL=7uQdW=A#b)4! zBQDs%Fx{cH>E&&KGL8AgYrggY$25I*0}j)r9H_E@3;umzhi20r-n@w~o_f9N$UT$u z4rSBn37t%<26mvJ5iEb_E{24(S4gQgr|;JF$NRQU(*w6htpEK>1UYSeWD>ewC?zZ; z@az6~(MREQtz=|)+v`9&gCsN^OW!Zk@muDN-|eHz+?9?Do>DXd4=Ma5u_T&}g7 zGaNEw7k*=_>@MK$>R6G*q0B>OWqx^Gt0~$Z!}N9BkeV~}L8 z{|m=~Cf8(mh0HsC8uMszEey4A3W*ZQkX2{B2)Io;;!J*Ut{+A&90^ z@PnTO$(xLy<(~%Mj&z7Wyb~pV?R%cnVny$4hZ?Lt0;4~7e!A=29p8xU`DP&rI6E^u z>od@j>;5@3zs3ZQNf_GAJhOj5*WzAeX6W%L0_6EPDM@v|cQtG4t8jC&FEu*;8One* z-(|c?^}V9w*2l}I#gL1>=T;p;E4gR241J=**ZfU=0(oyL?dCLILpr|8K}0Kh*^lH+ z1L3*~o?2z!FnXyOBpf1ZrK$0wHvdH1P5>^Dk@j)RSbb?@li@z)~@knvAg zo7OKLVq_mf=Acft!vocRS#9(V3}27dLm2t`AL6Wzv_5zJG^=8zT$lQkPk_()Yb>w* zp+4!Dc?hKfmlgS2rUn1@a+Z#T9VFNevWZsAK3}RxD&Gjc2ym1N1OCUhlOZ{qzfs`u zK*86pHKkA|{r%FJM{~tRS`&BYvIn|wSti)#Vvn3~e39l9iBMg*Y%WHea>P)sW?hcsm+jyt%6Q>A zx5|`L8fNgnP}e>D!MZt#M8?bO3sYXta!0fB(IB!^>*4P}AMTp0>sPE*EMp2zQ9UVE zL{wRYZ?#U-tVg8t(fA{MQ(boS;+E;e2$Ljof#eX!E=9r5no-%{QeVQ%s?PP#Q^t&< z{pbL}$^Dq?Co;-hurhkC}i3yzRuk& zL;kik5SnHCRctr~=uL%_9NSD{!7i@vTfFyfd-9^48W=TdWxeC!JFpSdV4*rsc_v-WrFIetfz7nIR2f zA6{&X`>@mw1($q2@Lnd0c6TFT- zvY?a0;n$n^j2A@AN-drAo0J2Hz2!A&Q9?%ZpF3AkIj_U`Lao|{QUTIvA`@ZQbGKG| zg`cH-ti?|x&FI6Ltebr6;#_nZFS_8Qj17D2!u9Ntn{e@h=vILVDurddYO+yHq#WgK z{@FWuR|cgaH|Rj#&6L40Lb_P6> zV4yN`1J!p~Xx|*L-aHeg!E22J`Gb=Qw=jjCxQ#~uu{b%)7_{9?D8*}p_aZ}e2u7h5 z5C*!quc!{Ive#WLA3hQ12h*r8d%i-<;`uU9saB7=UyJD`?fswwH6EV2^+zlYR-9rZ zLvQf%ZHVBW3rTEWY+AxEI z$*W%<72~y=PxjKS$JN54WmZhIzB$4}=j`=!qmDV&D2wN+b)P$FQ(wf}>3y*vWHW{*iPWaiJIwy5Se&4(NGf_A_m>E= z5hbW(tm!zu7j5O2`|jYY+2^r6DCx0bZ1SwEz@%5s(bIKQ{_nzc*g1dQRj`{fk==w) z;QP#b7$$Z+F-N{@Rhnvm{;i{S;<5R(YV7pSU&x`QG@D16ejz?o%fMpgKd=Z=;cs(? zq?4h2^|1~L+Ao906by2&#r%=UaL|9RIcc*QS5FG*NixE;;W17=o!^AgaLf?^kFN_H z{^p$Sn*{QJ5WLGqS@V9w5w*)%<@c?5fFw=gu2dDB$c@GlZ^zN`L? zi%;9f!(Hn*&<`s%`B{lRuu<6(L~8QP#Bn;S`qZwo5pPy9|3KnqS;h^yO5Xa#d-`kP zP&=9WR?AkC_M02H*71S!lLHsHev5Rp(({`R+tX(&g@k?KsZwWD`E<3p6!`As>B|X` z>0()_MSAp9Z0j0#Vd^=6uA@5@ZZ}h`w>yLbn${yr`2K!|%b#!M=oh_z$E9HPlSLF{ z-Ri5xUl1SjOM;>iq{;A@5-&H6AT6wBTJFMc)0;KtYV;hPx4T&XnZSCehoFQ|9%|%o zyhnII`e=x!-@x_h()z@xw=nS=ejC9)!>KYJuXld6uRls{vyKsd!hX|A&u$&e&!HgAyhU~G{qtr62Qd)XVH>P%J8O13A*V}QutN_oHu0?^8d zrr#RX3(^Du1gcKGC^c#P=Eg?1>W9Mam-(xi$S03~=W^*D#D5xNbo*mSgK8b?1o@U{ z#oUkzv=|obW;l1=h{S&AesSNtw$~?B#)>k#^x$@(`F^X`qIxjOG3Uc7>D)i)rU8TwTeHR1~hot>HlF+sx1Z$ zYho<-KF&E=pEnCFv=3*{H(Zb-fZbX-@R4{HHmCON;nuF7SsCo6YLLeH-{;*Fh4NKboF zfN57_B>9v7(e+}&o@X6JnzU=%%H6oo;=|e!ZCg2uXqIo9l}C@1`u3}#CvIp^ELb(8 z0V0~OAfVIop)F=>I(z-BWqpHm4{^1mPd4@j+@+Jm%7UnTy+UjJK%!llrU)?7xb9M7 zSed;5WpO<9zxW%z=|4^2dpw$um_*QgYy{lO{ItJrI`M38<}>)w-a%A|hf>S-G#283 zZ<9AJNq?7-*tESKPLF+LL4GZ4*`4I?UTP)CS%-#Ufr1sMXf#-IM9c-*h9P=Cc#K^`*FBrN3zqOf?%8OovYzS%+^()qRp{fv`y?As;a5 zRfY4uNpD`@4>!PW7cec@lts*7j2`Hq7&Te0_qOt`Wk44mO#5}@9$MZLoxTHuc*Klw zS++BrC#eiwn@Ritw9SfvbH)A^+70&*l#;|V;RLH#qBf0=N-eO1TAHvT3$kt7cL(k^ zXzP?;D~#m}fyymt`YtajD@;1+?u=Uwz+&&Cv6Qv3`E(51&=A#Mg1bO!t)-hZ^gS*J z;-TN=eJk=f9Jydo>N{jsG1N10WnYDo%-R3MEz4J4T`nhnu zM{(t#xwOD0o32i&Ks2Hs&u5Li6@`QZe9KA_^*S67<-xu@qQO(8!y^@)3NKojj=m?( zmtKk%)4g42EqL{X=GZ%)Aw_)18Lt!%_i<5x`Hd=Q{o;y^boPdP5d4Gul27OBSZ-(6 zmRlmxcT!Z=ZfOK>7b&Owgjf&JKy`(haLdoVoFWi6_!F=k>>!3*e#tQhGhRuOlwR2Z zQgwQ}f3#?ZoqbooI-6$n4+SBLv!C!W$v)wy`xWxo>*ZR*=r*GC@U74Ji7M7zI@y6y zl}C;nne-*05x3rgoa|s)PgEJ**l4xTyaMDk=%L5coURTtnvvOFp#gL%kny{qbdUpe zem>*%sbarO2qHIWBrd4Ep;u-ze+MrAHC4-jtRm6=Lh{aJ=kQMOT<6=>IJB0%v*!s4Fy%^_ zz2=I%iuHcgpc*dM^{@b&mAiQ9bG#Ve5i&vPj*Q&yPZ$ueP40xf`BlDbcZ4;ARq!mgD`YTN~0pujI?w~ z58X(|kONXf3|&KaGcfmobKdWH@4dg^k6~ix+AH?6_gd?tJpc2pz~fvzQTj-6Ik^<` zq4dHSMS>2D@ev62u!F1ST%sQYzf5Zg1n-v)$A9#6@nm%N?Bk$gNO@oP?2(Y(_VCGH z8OyU4b1x+Mrw~rK1FJXqJV&MMjx?(^dWWZcKh>ck#gdI?P5Nj__kGy zD7FI*!T3#+4I$(U)MO}&?##))-fs}Jc#Dn@=uZ(qiGptz9WfNzs233l4GJz42E_S;VkGG}@l#kC!wA^x@v#w7F*WEqe^4+!hrRJqq;IPxUQv2r*eu9`~d4LE; zJm;p40Epj2TuyZ1LbSqkcgSw8pU;HX26rn2eW19?C8Y&%9c@Unkho>8OrHqpb0kBhRShv`wm26ktb41Kr!wA-Zs@w|&(otENj!-kwM!_cddhpYEV7i~Eu z1GC=9WZyMp*B2uFLwU5c^loiv*q$jmhBG?&RMt*rx~`pq7gJr(Z)u ztR#oBT+k{f>PSbUHC6Qf3!F$XfVsPH7~Eh}2x4{#ho>K)s_QZCr4G$}QyfCvqb$nF z)&M{$vT=^{v5!eYiSZZ3EyXgg+{5I%MsF22^%#!0+7!K3gh!Rtx*n^ z_^p)z>>D3-=+iz>!nBAW_rp_v*M^0rM4#y}yVVSFZ0l|T&S;LXJ^Az1KBliTYP3S> zu_KGSPJI=E?n?HZJQcsR*g6wF;NaC6?o)7<0dcap2@IP3J3;aLKdF@YHz}dJffs`v zuA2SBwRLm`>Lj+kq3jjQk?tkSbK=S3e2Ynj?HTK`40|LAd_qWsPig4q}(%} zmHAlv+^IJiL9aY=-v3Ew^pVxcA6a|PIbUL<4arr=Y%W~SXkmck%)pe>*@l8P-47D@ zEg}?2&@$eaPF8N8ek%JR1s&P#ApTb1^8xz{XU;X=-!4Af)PJAd z?iIU>HDgw`D8FSdkN;3Mh>#~v?kvWxI!1}}u@F_=WZJi$i&zpYe5}l2IdO8g>HwoW^|b%& zjA2X6J)-a@&#PJ$w4^`m!}7+kxNRN-n#WOoW>{R?|2tQRe`6ovv4_pu=AW+p;@Ci! zRj&k-vRAv$O~X2@Y+QFSR8U=)_>%$FJ=KJkR&24DJPn#YfbJO7o=Pjs*&6|}{N5YmC(&6@} zerWgav>w7Y3hz*I*siq&ro>f08VOY9*8PBcQQ^j>wk;t*pL6o@;}5B#)IaXxvEHzl zeXo2?k;CR9vs&fy=gz7rv`u~7yp9~X67|v{aVg71#DnwCcX2yMz70Q&y6lw~zG?N1 zR!~$xZTM$ABuvk1=~!WT*Em*JhhL2D5nsnxpP;+swdR z)e{W{=^lMq9QqID{m6VgJ6z|p)*1x%Dyrki5v9q@9`@c{`fBUqNZ>J&k~<>A>LAX# zjFPkRv9ra8L3;;poBHf5B`!;(c#iu1hvbkszhT|?yvsz;6sHZvR#cQs^`v{qnm(`p zz8%b*e9V8}YV73W?%c`zi#LhGWRb(TRmHBkyCw>~;#BZNb+Mc9HO%YPZl@ zg6kFdq>L_TXmPuj8-|QzXswljlq)yxZ3d3yXs>Z@Kj11id$I6B5qNssmNZX#kjc&d8g3AR%LYn1$C`*WCxtVu4&%T0pjlK2I#)24K(xtfdL3T^dJOb~_G& zV#f{&J#$Vxtt7>T^n=${v=3fzCy@0`H9KQ!Jlw3coh8tl)DEkYaX%8QaMq_6H$a+= zA1~72&4(=lweZhP{pHNTEMxn1cjZxfdusR~eQ~i~h>+2XD8FoNgA%p$kj|QF z_6$FWz;UF`Ing{c6?TsoKGqo~FnH#*b;b~8UuaN7thgFT=J;#-buYD8-&DIH{RlT( z!78P)OL2`t5T~8m+P**m3xbdvh93VqIUJnw8Wj?KD7cr=KTqxdv9cKqxxzo7b&iI_(-uTF($38z+RTTFqrRnM|tI>GWpoRwTxTf@Gr zNoS4b(t)gld!fOZ?zr&9;TJqC^!qnU{pGhihRhzI;+@y6Pdz2;qU?H*g;nHVIR(OGyaM-ofdAMBSdMc_@VQkB8`n-hGpq_WQ;mKH0sR;-<7H{G>*0cu2B7%?dWGZfVs?&ZTbxuu(=&uM!o%Y994TFocXlBrfd}a*=L{<_$E|%B@ z{FgvhjS4G`am;D3j2CD@KOMxOZ)^qTROlHUn>bu=_1?2IF`W!v+RzxwP|ruU)kC=V z%s7k5^II;9Gz|%Zb1kwE29@1lF1-gSbTHkr?&VD7cMj%Uc~j7|UQ&IJ&ar;2N?cso z%8%`9Co7c?43*jmZ4SFL=QOnp*I#U@r&YH1P@rJxxQ3GJ?>#8@`Z$yxM)Jvs!-raT zt4ycdb;yvGZ!|L!6=+e$mQNF{K&{#wri#eI@})Uf6Yf)vrmsu+))v)wI1H);7quQj z`NXXU^*wy5uZcY^W9vv`kijhzTD!mm;zHQWgE?CksgIXoW;W&*^|<9XxM_Q zy1O0{rUjuDv<~pl(aotywon*_g?0#btgn6S<%TG?P8Vp4_7jL;A&%a;q53pNAGiD< zo~JFtLR^}S6=^O=ZlT0&t5MkPj+Z|QlnPGMnF(7&zwP^Y7M(nAr&vJ$+6OG_Xpw=G zr2V^$TeEJoc#?+?m~i2`w+B4V)nxvFF2m%q3nk=@eqnxVqiv^P8dU3yLG@4>Ylb2X zXkkgoN^)f^)OtsqECNQ@pwpQ>Cds8pjTooi_7QHVn4$Z$ajIQ-lQ0I~+YgZvEs8~R z5TIp+^(p&|>dnUY1m@^S&ntQ9hWJb$v^mBWNjh>AX)zQ!&rL2()R|sPxMnaL4Ad<# zdjPq{#4s!%=)>z`2IbHhK@_)yc9{Vgdp(CNGH8~WC?oyt;1X&h;TT%APOZn!L_griVgoi$DF$|SV($PcE~b5^az z3G~P(jgJ)L7Xd2?TKz?$>Z?s0i7 z(L#RH+z?&D4N{&`jOS-_D{TpF1fYYMiEsSz>+gw>MknCHZ#itQC*V6-1_6|$5>kme6!%ytDjEef-v$43hzq9taI7T=2XJ`vA zoAtdtJ*ByEB)y=9IY3FSdW2a92xQr)L5<{Co+-7yZTX5BF8-R>*Qv z@Lk?*-W2!F%U33zCMdMxGmAwoICfL`oOa^Tdp<-og?{-(dPu zA*MvDnff&@*eLNc%jZzE`ZLIBr!ub9?vL|3w>T3iR2t$RK*k57pAXQI&p z!XX{`seAG^jyLnI#7cOslJnQaW@yRUJ6(9tm)=n#0s_i55)Y-bfy%`l8V`|2rVidg zgv#`YRy1CNivg*c$W2Hi;BMtK9br;wez{?;K)+GETj#(A{rpzIF#Bhz8BqZ4h3`0a zGHxz<@K%EA%PmHoI!k9)XN_7YfSmmWNqC~WQ%1p6(Y}v zYWvRgTxRdPN{#%gf9{=k;UBvlJLR)@($&#Vn#WVK186Jk>ftR($~t(utRv-jtM2zb zgglY^s=BW2OqKn_o|_>{`07ecV@1&Zn}o^VK zxE{narM?=^Q0468kDas_Qb^{{F?GnryHWIW$A{>=KfeoeOQ~>&oe_I*#Gt=hESnOK z-|=eg(_MmA(6jc>c_cY|s%7(?B-ACw!AkBop!$w~WmjOoFtUEPWQn!Bu@fZ1`8nH^ zX2EwG2&=lvcjI#2k4Q+Uj=!H1e{*VagzA~ngd8bu=aXaJ4RTU_`#%F}&sf4}h}zX2 zt_<*eKNjrH{yB&vg}*!wAUoUjUbd2HKsgTz~9eHZZdV0u9>0xDwM-XItPHE&ABzp@z6mL?~#9Alk4ssAWPb7 z+yDX^2;om6NIMe=0LH!k4k0b-DNC-pt1c$pN2S9JAz~JkY?~X}TPb<{outMXi1#*n zq#@~<3cJG#IBx{77rHLJS3Kcm@qcPxj6Y_@HJFbFZv%^C)R-U$N_K|%5B@~-9+*s- zJ}TPJba`~+7yVmOR~=UbUUkg>x}7Nu2_H?1|Kh|CIt%f)y#)LVm$`EccX&gczdTXG zOxV||G<8UYh9`Yiy1YRvK->2G6-oPD*)6wiW%1Md3Q=x@uxFo;zNc24Sj}Sw0~Ns6 zZG_|p9~{|3B~zi_)|HHHY`k*Z?F>)n!FvMai@?+7C+B9^-8*cz_}aPa%NY5v&QrbE z;W>4rjD4{mqef_uABl)slX4Rab+Bw2S9^%Tl0rY(2WSZ0jU-Pm>(4;U%FU6il73DP z<5E?QJ$JF@9$9kAJZBlDx8rOLp8TYtUy%3BZOBQRAhA=}!5X(mz#Wrxg~f(r4}ILm zgW$Spr5y*Ac0bFhA7rX7LEH=o8AxiyU)nnDI6Grrs>d@@TKAk5@Fy`A1Z^1_zVoy= z){CUuQo${n4U(0Q#H@i!x6)kzGFL7+*KOB9vK&=v(o;>Z%~ud;pjr@%d}9@m#NaD+ zaPiuoj(wID@Nkcoz$!SJbACaBcW;Qh7>r&q#9~`kfX1z-H`RV{6NsGMA!9L4{0X>d zh8oFG;~Y#IM5@uHMADQb3ELY5l2Avr|M}vlT?Wdwkz==1Y@CQlu-&@ouO zo8SCLQ9tz7jxu|3+RYy%t~$>plaG0e_IGD3Qd3u?W4ZL^HQz1Za5ugUC9wY-A8m?= zZ+A1hWrgXe1e{|VAB%4LQ7vemk%stB$oCp_WaXVBlH3-hhreJJpW4d1};C2 zG~#ozD-g&+_JxGqbpa&F(*N{vBvi3v7+s{_xjVFNEB^zRU6oJk-5`D?mN==fTPHH&*JE%vOD%<=6Pip750) zr@~*?-Yb2EuD#=ES3a{K=~YD#tT$mUCW`e3Er^P|US&!6%3u1|VI#m+SLc&7l8F7?L4hP_CM)6Z2ZBx_O7R9BkF9`wzKdpNX4kIaaex!gDYG()nTqv>?u z(;D7Q>n0hV5i-mWBHUh)E1JX-H*|W^pWZ^SUVYL?>bwD2d!98pCSOF=9V$^%dX7EZ zltRd7yy6ET#z4;P~*Va1Eg0Tgp^nd2h`DtDZayf6e-1f5K>PsFFwK)HyYfL z(q-AwrlQLk1%Efs*r9RA7^$>-L1n(d=3v7Gap=^ruMiBu4OK7mpHYLiwS)bG z=LzrRnQe@fgpZzCN?_>k4UMKAW=TGUjBKN`Cir6%U9e^6+e_W~qTx(HcO&S-ck@8H z@jCsw<)u++`|wkqsOrw$>!_LC=PXI{=RAMLR2Q}F;EO+s<}Gcg2x;<7N$1&EAx4I; z6R$#_Y#t>u?hW%SM3RS8NdKie&~PJ#O2_!!EZJF!=a1${1<@P|nq*z;Feh)LJ=O+_ z7Zob351!&j`3-yWvxIqiy?qL?-qj#lVhyWOk(@VgjbfmEM4PIc*S`K4V+=%Zcn>l# zSW2^WdpgbXevgG7sY$bl8Cle)mU41)^FEc%n)K#iFy2{=AnDdTTI{}x`N)L8Dt-X} z%g&+Dq7>0IX_3_N3vBBomQvsKaRX;JDuo$AAeE6Q#yOgWR^(251ZBwSO1XEMTQk@6 zQYfJ%J_&Fs(X}^mK2#tG04WyFs zBC+Ntbzq|qJb8wH(D|n;wj`&heLWh;jv@XPIV0ot3xAkd=O8(j!3{tS?qp$8wKk6D zgE-t={Ob7yd5;0{nuq#aylsfa{IU&>C*iR49bb~NN#EV+%APi!7!x@>W%vQ){~43S z7mUZRc|b_(`4h+8cm>c^!=v+u-389?=%24|r-={ZtVM9T_xC{SBF<@yBcs>^c@c3u zH8&idH%PAsK$kOqhIrA>TM+a67(smLYaCi}QV2hAOVnb4bb+RR{kGBkAOK(1y3Mg) zLgPEZNWKR2v(Ivz8DpCVbq=^d`wnz#H9MuRGg78*18_b&?F!WO{t7_XV+L-HJf;_0 z{k);>{|JanFbZ;~J(Uso&H`btvQ!N7qQAjSdypQq-Lcp6>sT5uLU1ugsV?@*RRn_6 zwGKMo6(@gSAd2AWvI?z}Y8ZP8thZDOw@8cuOFcgCkMhS=PV@Cdn1&uw@@A&U}3({pRDbcfzpm9^?|FnGqe~f}%H+%ImV~$zw>o6*7L4!*X^8fT_ zyc^mop)6sRBv!TZNv|{GUEV*=M4qqh(&EL`ZmUYe(@pL9z zi@^1_)XfXvg_SCVE;_qsUX^a6UqVKK2?;;^11q z%*TCZFg|vh=YQawV#dU*8^!)QAypk~$0e+m0##^zs{~mJvk&+OF4QX zv<$p}94oH*ZQY!(ZCqyxP53C_){ETZ3uX|;iA0>dvK$Wh4%7+n)8k6jn2=m0KaHQXt+5^_=2dxH|xMbuix z_M)j;7NdoFSHzk803hRxv$Feqz^;lE2D=d+fHmH-DXn+sewS2dm%&=bMSjh^`o?x5P z7^cFBiBMBf6%&m#ACsRmY)@%`R-D<4Y*V|d$v_M``oVQ7t#ft#I3#i zMR_Pm&+vu=(3O?#BB19M*L2G>}s=f}f?!-_o3)Dy~? zsaGWuhWStUy_h~;8vGb7uvTQXk%KnMVW-RbL_}hS+*RB?w=SbC!0|*Slr$~@MIncm zJCqrX1)?7(Nni>3;AxNAO|i?gO?}BU7>4xb1$wNjSn&5UQ6EeSHw!jl!{F^YMiH_S z^JBYg0UxYo$9fK&ae5>c5cj2usea_UIjLz`wPC1SNfmcBC#xK-x!S1fcYk1>N8@HL zdy8G%ZQb;rG)aVJ{m)P;+}o}dOPF6751mRQS!b%!NO4i-Qp3}+n1uplqy5ADNbi13 zZhlEkt+8(QD@a29z857vT?PH8Uq&Nw#T76NtH@C#SRoN6?r9BTJ*Y}6tH){tzSH@M z8hNOkUCGxPpVVQqn2v+|fI0dDBdVaJaSnm*)yx&A7=&C_icGF6*(Pa$r+u=#?%IA~ ztt5|$_PG_rXJJ;|0L?AMYt+s>-IaV5{_zjSk| zZ+h=_u^I%BPk}Pyp`SIfZ9nbhzbG4=3KK>tAHA(e`DNqiP*_Usk=SQw)A;8G?#wao zioAW>S!P0XVxpM!bohI><9vsWJd)rf8#mYf+65o&O7tzW_oz6-!!U@T(cC33f*?g= z_Is-xjVBLq)4t`*;BT54QuirO>ogIg@W@A@dH{6?v=*u5(>Gw2<;OOTjPvDNSN>9m z$n0Myfl=wOXFnFM={gfb^{zm6$Mwzkc-Q+S_Qskb6O=P5hwwX;r;zmpmRDj&CygMm z6EIDP=IEp02Tk6Px;%lL1KEz00yFhMS+scX1}NyF02CLgEld2Kv1xj1+p0o6gTN#5 z-&~vnZpM2T;w0KBLEW@F7)`O{m`|CH&8t$|T-FmMU7|M%-P$tqW_T>58ki%Xhk=ZC5b&CD{|K>gg#IwOy+E+89`WJ z7uf$)ryhM#&Vo5NFC!+{Yj8^#`a0Ygxt+bp?AG1P=6IN7@meXlI0*zEqpw$Roliy3 zj__r2TY$f7PQ#g0Vn?g^kBZ%NHh(=ViSv~=`DzF54MS~|hthn#S^7|LXqwH38y88^w2md3_?VlXM~dt|0#pI)s%c~B-+u%9j} zOhZ!Gd#z#>qHfR+*s(;3WcM{TD{U~->H`gOi9xmeKZ%<_C2nMB3$enN3&BL%~E%iwpd7 zGaWxoG}NXy2J(2Cht^lJcTV%C%tcPVQH_G&1e~0#pc_g(S{2&y{_rrbiR!#k(A22Y zheLfoS}*3W3yOS(O{?*s)?ATIgF)trym`+B~ne9=*dg3E0NOy^k^5Fxzhvn+q z-{-wlnaYaEU9cPy1lK#Jn*lY$Z8-p|WOTu9(zA&qvOVTXp6s1zTE=yN@$BUC1i} zYm<9O;k$du>hslzNj;PKo9$6{rW<8_lP6-_RSV~)W6}J$Y4(~A*H)l)h)HvyD#d_k z)#j|i=?}o&PigvPzu#^&xExBAwru`8=gC%9E;s%K)aKQn?f5fo*gbI}C)GdPK?sGi zbiGPD74%a(zE1{$+s*f>9py)2RWlnCUe_+0$`m+S7bln1l!QGvLMRrfL<^Exw>D%j z?+rB%a{61Z)YTtNj1{D5QJV@RI8_2$;dWZ3D%&X~9AAz@p3q2_`Bt(LEyc%&nhU-K zegn2gBwIUaJeGf2Cj4o&P@}Y{#e(v`wza*nwt_j&M&8j)HB7P`Y}4t>R#X(WZBI0_ zz!of8@dY!iXsu9%ssTb{dxV4q#YD@RmnY5H(fK-!Ehoe1op=@SZ+itRR90jG+B>O` zTmq>>=&wC`RIiE{416faxZX_l`N63k8)!J6$l%~$n@h~87A8C$ zxG>+v>$JBAvX85#S6`6F>}MQRChf-Lx+qkSFYE56SJ*izq*|P&O$qJ{3@c(^SBYB! z7_d20dl|#RXuu62Ecm$Q=aSLyiblqcLUXML9r^G&s)eb+oT`dCk&>6u;Z&)H56VCfbZ1FsyWXl`-p)!s&_rVZ&|9a00TnG{3)i z-j`>{^SURUGqVIm84D*VEld*}aWL4tE1r(Q{BU%50 z_gG1HGev8X;vVSKAAB&?M!Fq#+(q03ygcKtW0nHu5@51JA1SWmXD|Oq(^^Fqlo694 z=&(pXQ}b!biJ&CGY8!O9omP$(^<+W5z_z$V;Y~Xxn<+UNAes&j@$?)CUYn8gaD+GA zWl~X)&b}-&k~pVODjV6}n>8&(Oj578eyUJRs1h>|8~^ra_}9F*bs2ulmR^y4&+X)7 z1^1%qcvHPW_aEA{7br`;7yB%FRfU@cGm8Q|K9~-a$-;T;TF)0dus%)gwCG#S=-v46 zb_VUTu_fiTt1k(mYOY?HW!^F`Bt<0H^l@68 z!tWeqxbEB7wc?SKPuF{(nhbFYl&qiFvN^W)Kj7nw2z_NC^T6(4Q+1Cz^abosA_wOJ z=$8>DC)^5b{xoO(^~us$lX@CYTzvcxd0O+?KrmVQ)KPkj3bMiVQ{eWNAOEvJ({`a3 z7UP_p{^L!Q7V!?Sfp5-ADex^$!HV@EHm{KAKW3lpz$c1C-n71?rS`3>0~s9_kGveG zz-nO0Ur#0LPh52jsXmppY))>Gj2oM&wh0-xtRGQdP=6|`M6998oDHh#1n{dlCz9vG z*?y0~63b70hZ?3(I`w8Lp+17s8A|&{JbjeQG(Rj~Rg#CkSr@>!bUtgDv!BdFMV%l+ zl1`pV-V~`b4sn+2P-HYf5G)jK!e)AtT(d5{engORO;GqJz=d268;v&{~j&0BxHG**xKEd6cPN_76l14( z7`jpW#|oB5-l!C6Dtb#=b0%|;Ip6SB!1}mRN$IC;eKszx7^c@@AE@$KYqH?-a$Q2a zRaM6?HyTSL62`{er}U9O^QqO(luyD}bu8c7y@i$M(&My?3~J4cme$*y4R8i7JHOn1 zIj#>JfBKz9lo^FS@XT1Ji*|C%%&1z_+z*SlU@nyy@^M~x*fqLIQOKjA<2122X|(O} zaEdWpw7{!;am|I$!6YiM=*_r;T9xCbW?%p^pHp2!D_z6YcWI@MJfenQgCGbhe@WwW zax%RwTB!?D6RXMNtEcJPm?=AI5_6x4}Ij)c3tS>g$=NfCRBV8G2i;ndxAdBuL5fOB(DRjKq7Qv3C>^4Dm z^|ieo9_;enb;eCfr z+@2s1;sguYPCoS~alBjf1mDX)Cdo4SR1MwKB? zx7T*~r$tRCy-C3Fi|AS5`zPQ=#Ct|RtGb)RH4~e$7=geqV>=UC4sYK@z4^jTFsx!# zr@_+IAZe`4|$}TXx^QMNUD%>a*5+bEVHB0@?lDJpH1HY?@a3tR1g= zCK1ygH)`uWZ9;+X>UwTCAeelX=Cp0NMJRA;G;XQV=E7lb*9T%louOkH@A~8zHeucu4 zhNQD&v&F?YFpPu0gqI0zbtQe0mjB8gV@W#Jerh1&waq7zR)tV+B4uCB5Z8Xt%VL41VgI>9wPkl_d^OQz3iOmH4tC(!Rx&Pg!bB>REqd zK@{740pkGYuh59b3r=vv#n5_5!||XOt?8ytIrfQx2a)q~cGuVbAVkesu-_p=EZc&= z+)Ua)#CtFIwFlHDHbvXTmP3)*oj(n|mh4RHRCtZwjGQyK%j%qOCDD_iiG7FLG^vej zAeytn*`2Od7Y$w+b-VL?0`{dL!w~YZt*3EOKWQ{OwmhPrc~>8LtDnc*B{Q+nm;v=| zoWEIL&%2=0vhf&=(R?meL0(S1;Y~5ZTJn`M4<2+WYOSRew>d-Zlq>*Q@^W+3Ej^8T zBQa-eY+PQqx*8Fm$NJj|cI`XDer!ND&+uQR8_!*I_AuivmZDH-04WeD-1kAZTEpx$@ozNkypn4V5q zKi+j!Biul8r+{DzPF{wHtp0*TNw0~VxvzcB>z9$dV#hgw(OV1CLZq^mPJQtL3d_B5 zzH1xQ5#r8yzm$5)Q=qTBPTaO8Yj{2SbmbBSUr+yhrf@0f82R?3`VEC0SLH?AmpNu& zh#ygvHp}=ic)^lV_RGE0PStL*%)CBj$1-#7Z6-ZpT|FkAYo2kuR&h^yFR4nJm6G;L z-o{;oxAkeV%PcJSpmOs~<|8DQ^SZz5(O z5`}#eTiX&?&;A?l$Bmpp9d7|cG*vE+Es(G(Bn*8Ojd^#rkR1~=jZR^C;WkKNYwg= zDwyV9jSp*5n^pu05|n%m2%y5lgTTxa?p}?#Q^G&3Y$;e+*!K+N-( zFP-9v1EVJ=b;&py>AV#(I5{}Vr?MszHM;^BSTj0UCnq&)J|u1I$I?A3LWO=D+)TxZ z$Yy@;S~pS7*i}@V6&>?NY^Jj9IL3!(W7 zDe8JQ7O`4JG2I5<&z=zjQ?L+Z0ULF@cf-oIyV4y4OBZ#63PhD-2TXi+UDn&XzZKfF zIeQ!<>q~iyPJ*1-8=u@^@*Lt-iii;B~rd7N!L{hgPLn{kPEQoC~K*7hVJ zYxk4K3s!M8hl$4(Sj&!|Ob(N8bAJRP*XNem{X3U&8$RY#UX-e!*7Zi0+`~V zDa0rf(h&wX`z--vE_VLGGt+Q?2VjvqV_sG|)UJyvr>C=zpwTYW(;(7hVuOUyeF6b} zu1?LQ?cb&Ef6dM7c%R^HJBL-o;qne~cno|C@M#e8=8|ur!X7ER6@{p+Ifbi^WHeV@ zsGfFs4v}=afZlMO8@2zw=qa_{GNev8t>{ImU&Mrc8YlF-bS|il)5)__*{7zR@z8xL zt|D+nU_*ewfJy2-Rq|zaQ2kanXJLow3TTW)`D32VCbfD$En=_+Nzp!7EOD68!8iFm z{gsV7QpwJ(cOqKs5DIZaZFf$`Bw#GTaQ5UyH8;c>W#w-3wcYjaTb+&URv8n7!9MnyqUdSJ*`}CtJ~L0 zF96o>tC9N1ywsN_Ri33^(icOyI3K;>fJRCE(Dz`7N;z`;2&qvbZ)$Z zSMW7|UL;LLWz$g2;O*imeQ`mx?MLy$*E_SE+W(Dh5P`9es#$CgZ{pY7VUVteH+ za?3sPrIBaTzs~qThwVXF_C7y=?~Ec2FLw=kdYxH~i`^QQKU+&?ID(9`1d1ZJ<7n+> zbz{`y@H6#7ULWb8BD>3Y$E+CuipBwJjp>JpKOBD!JhS60K)t}-#}12o4qYM_F_XJ+ z(j}K3)LHG~4F09>m2S|}I?broEu_5*irFVnH0}IeGg2tsc9MK7oN;qDV=&0~B=7LP zC+W!9fWJ*WPf0%|E2VKdc5dpPe?4i}8cvlcf>K7Ev<+Ebp}J7@g(%iIYda4yYi-BD zrp}=I=}l$q+9sovz%eB-v_N2J6Nu9qanW-#xX=1I&bqFKMPZJbz66t55na^7rPaON z)k|bbu0t)aa-V_ZBdJxCcFEu?UF_6aKWx}8n`hd9+*W8g^&n7+>I4%(6DIrt0gCAS zi9Dl=xixcSW4jb0Y_3@J+rTS=q-!Tc=8HkbD?sO#h6Y8;e(G-Bw~MUY#^z5V*S8nD zNA82zHQ?!nxRfSHCNTIz?6&(MOjUT*yvi_Pkf)JgS`Zju{5I(OlF=t3Evsr?gqYMjjX8 znt;|P!lxwzofX4obPUeKPGe(rZ+2|Cy#Wq~Ld8o~W^N5R#i5vVSi$8gwp&=@Z-AW= zYJqg3zF%p;UUZ=p z?mty0re7#u1Yr5`~`twj=J=xHM@eYn|_h> zAtahXVsL~Kv=9hX`}~fT3bI6URrrzTZ4?M(TcrbRyT<>iKG~}|0RCfIY!!I6*iCTb zhBVc^5Dl>R^Q&&Ykv3C-bhU2YxN)25D-XC_@hxme1O)t$M*8pYXzqi6McJEl?C;u| z`VC};|7QjYfPEGc8vUz>+ka-zoRE;vrYiUTRppO*K$SdrH|{tKW#&7s9+e)*=uVE- ztJsUBVx1>qVkj36_G?m(X7ZHWS4FCtCV44SBq>BOqu*PPxYYvYG`Q+&W;e`P08R*d zC`OaAc@%XpgM1G6JeP0s*s5Xua9m(xG8_JS3GMrD$@Fx_vM@Y_#jM+ItwWL@4mI6O z$Lsgbnk)Cpo)?gTfP0A8m6csy!xuzX-QQi~|63j2WgTe*r)VD-3|ejb?hSbZMT_e0 zvjIUgF*!LUZC5nQ85-7HEnO!4BJAcqXNR!5Q1#mL{hjHd{|!_AX}ztx=?f0CfPnho z(9qv2lFd^x?_;{O+DTG+(16uwH95xSgau!orx>3y*p^KtPb7js+YR{|VEEl@aw`F5 zZ7MOPC!@^ARM)j1TY+p~bT~|Zv*gyZXPHb^gQ?f$lwwf;G9X>=FbJx?0Mu#u_Nu)* zU2JLYv`P+jj8&hu+xLMz65(|C5UPuyS8WC5r!Vexe_Fx}rtKLf_*4Sj0=rX`G#eY+ zBpyJ3+xRqOpigzK3QeonBT|P$)Wi4Te-yiazwE4`ywq$h>!0Dy?7x8a*6%aeRAmEu zN<1Q}M_pZA5iv2ZuDM4vG?3g&6KQuQg{}W}IYhdy9@~Y9)v*Q&3xN+FqgXnEP@5Fc z4v5P)O@PNfa)pMHU$_Gf4FWBhlKXpmYt}tQm0tyY^%RBy1horhHnv>1l9uQzo}Nwp zSIV*`hC!g~WuO}PqiI2$Kn4m73|xM!bItN?ca}8=(BLZp`g|9VgiM1*Z(ip$wd)`0 zZX-42-n@C%UvN$5$0Yx1AFHGskO8vc--|T@OsFacSB0% z9i}+#;BN&<$FJq%vC=cR{PuLc32?oApMgR7Z(26ffB@$J#;c*Ud;x|61c=L7Tf^Ks zW3Fg-+g_U&?6Nt*43#+gsUlU3u#H;-o;B=$PtEVT_J&>0t}hb+*JNO~8Z8t+jTCi+ z(whB-8Q9?3;QfxtQTBnYIQ}E*_S%f#hO;%0+ip80PTKryUz34!*~;}C#ro30GBf2k zVSC2wsgVHc%KVp;E5?3?qJG6i0KD9nWc532Vp4O!-};)*?`GGOygxsJmO3oS^V#$z zij*3)6QB-uhJA@P*kbe$dz}B6X=;qbY z+$P74M1B2w3pkal)N8E$Pr_D;k@));*pU0S;%wkos@ z;`5qo@hb(KVNlNNkymT%ideMI7F0Z}+Le>U2=3Yzb8U9zV1N};~`>o}U6z8Ek>x81&qfNi%=@cve` ze_6o}YDby5VwtZ$PyA&D+p#|f*3=N^UxEDpF@twO$bZ&tLO5g^|N1? zF(Xh4uh#K|~`SHFK?hDX(qrwc2?01$ZX@M@zN^ zRWMx*=dQU$*mZ_AnQY-*z3#5E zsKBbL2rei^X#ygh>?(+WfCz>lAxL+rQUU}BsMuHqlpdzYzRb)wGw(U?d(M~C@P&x^DX{Qqpb+hVz-Z7(E3)n!~#-r5d&rK8gqyj9Qs3i0?I9ysc z;y6%u+W9Zf-`go@;v#`qM_a{zk4f%Wf}NI*c7j#6~GZXbB0cGV-lUkc}ge#ljl+7mr2qwqs% z+mD(cNg(`yps%0f209-%w+l-7kw3ovm+c-Pk5aJ8(7ER#@_;&m|M{d=2QJ5vqa_T2 zf;6_@Hr)Xfx03c9Znp(ZP}HPG*w(+wHntJSEg@MmkQEaqAi>X#q)uL0-?m2F-zr}q zvsHA2X`i;B!<&11wwr0Z)gB?4?Pnkx07}yhylCqH7QL1PFrCR1N>p8)HiNFaiY0YT zsZrfEwY95Ihky9tLoeRN0R+vXoYuF!D~prAwO2+Gt=ruR)>W=7n(ikZG5cLIzURYS3N%@ne6x zPJyK;F@rHi3nbnYYow==KH9ZF_q=6PG`Tlm>Ct~r6^fhpr4lM^CKoG&-`sob@13IR?f3~{lJmdfStxXl zv{#5k+Kf~@?;cuI;0t*Fg9(R*m-|M$4t7A!3t=P7xBBfxeeIk|r_=TPMrRDH)l#+8 z37k6dYNeIwgLdC5B08u64vCpw%Q-Fz2aBqR#A~pC9_5#wlM6-aM!X9>6XWFE>LU)c z)Y9?$)uf>+SCyNnq6_CA7O83dxrQh8l(!Ff9NM!DNgf`DOiWA`7aQaZw6*VRa6Z?z zfxZ72NC*iPoOQl}tp?I>^-xCTsvCy?XghrmO2o#zvrNeP@|b{-vysc!$RIT%AzXxIJ+A&2Zn?QF zhk;Hk5JtmTYx6bn6bj|o#++Y`;wE3~YtPZfwAC9zijG%O9FXXN{WW6u!Ekg$mu}dV zuv#YQ0kXycD@HNKPn-FdC)_O(V?{NEy~sG-%GqurU+Nk>wTN|kgJH^I&`lyQ0%pu8 zRU8YIqtI$+ooE>;w347m@CEh`!3`BdwWq8zeV!>hj_JQmX15J4SNoq|xZ^?OpIYXL z=ZvMukh&$t!pkcfd7_F6##uMCU6R!hLWBtG$WY+}m7`{9GRLH(%nM_f^zI~&IiPu* z{TIjd6xSDN4dce^?_Kga!v{j1fk5%GhUuVz2=|sb^g+I2WM^8dFQfrC5l^;iBo`Yj zma8%J4O%)dzO@>qhQehmDfd3TH8yh+;?yIAefWv!{m|Y*VhYto4zNKGr3X=nIGBVd z(&7n9TeRRiPoi*)pLg?hLu$E>u+p10t0>>;GX5z>pw#gKSSwqAI(3s|9SYI1!W;2S zoyhp(6n*mkH?2FFHG{~75gp>~;S1H`fTh4t8|(>sV>=V6-h_Iwmya*0Fg2N}U9g#u zzpl92I~Pw_s`Kx@tZJ`LrN0b6+BPgZU$fGA>M_c!FH{gM4@!J7L6G-e`9(dD=DfhopdvzdZ$1R~flQb=8#yTYqK zWOIESYCOvZ5YZ(#Eo%XgR7{gCHi!Me+A%dq25w4^py8gv5l)*fPn-8{DS@Hnyt8Ib zOUK}UwQAa{=-uKs$fgo$C_3IKkW-B+v2n}p8Q)zz=oY-}kd2uL7&5eAvxR#Y>~Gkg zYk3z_lv;$=UMtOijaf$B{o(Zld3TqW)x@EHmFMB?2I_aMwI1Xe<-{XWVNv6<@lRWt z^~Wb@3QlV%3`6IEeBOg()?H-{#M+C@IZi*E*q!J%Pc4Vx491jrt62k0Wt%hW#f`bu zL4P;aluyNWP0B2Axv3Xx#=??WJG6v3#2ag@#jf+UNXhPNo$aYU0DNa*fLB-EKIXax zZZyYmF&Vkbhu6XmQWJ+YN`7{-GLB-^r6!;(v|vOif9ct#gv|3GnntbOF_=qyO|BX| zxA3*VDVKGh_x`y5hTlVhl8adAR*{SZ8 z5{rQz$LW2qvC<=+9?n)&!+uoXycMB6N$ILv@A7PhlRbXkAYxqK ziF!V-@BONIkSB9?m5RMPy~0#ECkM54Sef=ZTD+RCT_6=NPj7ArR6Qg!{b7mhSQVL- z_DVg3>`d%TTuvIU1Ru0G7D60@P+>B1)vOm56T=C+k=?)kf~-<=7pmFuY+9D*pkSA% zIGfEDKfi<@P$pe`v|k(=A*|`FZr#lVYDM*QpRRVDpk1_WR_0alq!7IBhqhgn>^SJT zTd&HF;>}3%?d1vGt*RuI9Dzffc3Ik8+PVp|xYI1R7MvWk_xl?+yaR4-G(CxRO2zzS z*G1pEmaOfeA~&jR_Tj$a5z8*x;7^{Km9TV|COYKf+QHc;PbdZ5RI=&v>oM$ZzXY86 zCQf-;?bMNO7*?!v$Bi%fe-gs3y0*eB%3U!;y!YzTuZ-R~!Of2s4`5)$N!aOtEzp^x zfoJl!bG?xtbJ^29U6oCQ&x)a&4xg5mjl0K5DY11g)83ybrHeMV?uA)T9GQtBW~e36 zsO;NVKf&&>*b$kj!C60HF;#V*%$rVy(pDAk?i(BV1kRT$cvsC=dV^b}hEx2!?P!{q z*9+-&u9ETo%Q~16cKRvz>W&eTX2)6*%x~FJbexR$#qZ_zh+_vik0k=6Ejo@vyHYIh*2(M?;HGi%|(miD2H*(v10;#xq9vX?CX`B3zJLQb;`&o(5cNWQM3XjFAhsWjgox9p>(93$F zFxz0DAY)wMY9nQDKQoy)O5ikn#z*}K%f5nG1qPB`jwG>+`x50s)`_xfE>ncubmxF4 zx5C?x{n;;vKh4jVW*j{ofUFBqe^n81U8g|Ps*{G)w6Z2-^p#rf=i{?9*HooLq-TR8 zlpCY3m4)DD25PKX^Kwyk`0*3!@KZXE(2!AM;po~&k!13XhK@YE5#a2{wV>b{p2bgK z36H$0qav<&2QQZ>WkS%*AWwwjJWC!i<1S7FZW)Gywdlp;^sFw zqwSu50sN~zf=4`%!3GFKs#_6U3d(tzPM=z>Na=0(NpvLK#JG7iuX0r|*_TnP10eNi z{2k>ixi`>cd`4A{XP+!(WOuy1r%jf$s@ds=3$VX3#CLW&xQF>xl~BjV1itSMuRE?~ z=`hMQ7SU1QEw)@PR;Wdr9TrlN zJ0VmdDfL8-e9Sm2U)2^>c1>&VFG#p!P?yS|;I0Af05T`xTYKg{GFZ?&mgGT_-=s!< zqvwXKXzr%@psb9$34OAnqJuwjch-=bnv_~xRzeW;Fm?D+q{V+(mhx~mFG&&&8a#fkc$@UM(AukN?pH^mMOhZ!?rho`{J#11W~n&a&*Ou0K7 zIk=t5FYMu47_ao6Fk*xI$s5CZM;AU|6rJ80ePKo&2f>A>rB#Xwdg9G+F$2bL4&G#) zo*TY;q!rRNl39zHKH|Ha(N@o?6`wybD!}`52Pv%$P9Vc|SPmf#0 z`90ycB+T&(X(Gh0JpPppTgao@S4XAC-T>m$I%FNsHnpbvi0%Q3ak|BE{VU_mmf5YM zJ;J_|HsB;j}4WC!*LHXIJ_=uCTN<6;iqVA~QQXQC&eCdg$27dsceca|a60hpRhsZ|At4Y{FuC56 ze=FbK(J}Gps!1((`A_J#2YTJV0&f*7NlQvT1I(5JX!+PIff}b5Ew1O~RkBQ>JUS69 zxhnXJqEmAWkikh4<~}c#sX?ZL{-eC!Ew@0hjT-|)fgC`VIS#?iI!p~#SNhEMUPlDZ zDxsL2<}_NobzD3mKo1eLpflB$^`z?aTb@M@qoo0CEtUX#jPr|uh}* zVSHKLXY!{=jm5{DDdUhRuql(05vg@1WSws9vN8c7#6mXYF93<#Z9mT*Jvmar5E=ED zbFp-S2#0VyiOeobw{ADmrqlt=l{*@rheF#}!!;i=@Z$s!;eQd*xRrNVHi&E$FxC(O ztSHlG=939`dsAsk0BOFTSgN||a^RNWt6rYx&!1MYy{WSu2TBO)J?(NGdV96-AA*B+HO}8Do+V5|I=!RE&})+sHP^ zGL{(oHjLe1W{fe+zC3e(p5Jl&e&0X7zvubm`Qw@6xQ;ol>$tA>a-OgE`99CrdA^hE z?W|>_RHVej#AL2tyYi2i*iIucu^rKSBt%a-3iqEB{p|?;$J#>dN1xiN=w_FfxvjaF zSb3T>@6m42{obe7?gfj9$+rG`?Z5__ZWza0T4^NHaPxSBC0!1ZcF1ntN?n@-%1%QuC}WM*bMychj`vse+1CNR#0#DE>Gt*v47 zW!rif7d>4Yj9s6u_hM3KY9!?}#y?x99nmn0QQMKGmg_tAW1=NavaGDEm&4)sd3dy) zeo&{d)b?A#g;%kiYbk5EnBLk1^5EW-6jaWP?OKg84}GyFHF6Ncus5}U%=;?(DETP+ z9GrvmQ9@547cQi}6w={>v_^XI&cx=UZHaU7(n@|$p6I$geR{_2;lpMQm#f8^rLRyZ zc@`iLPNA;89@#%KvVAoqENpp0W^VYaL)iM1q3@F?KRY_E`uh8$-@QBF3xT9s?Ryds zkoL^_we5okd64m+EwbuH9@sR^n(po!#=*-s-^yE`-RKz&_;<*bvci~jN~OyNVjCl| zQEgu5Z*OW2DKxSS#kQv?Er?&dn3S9k(2IyJr`w@-O4_GBs14EvR@2)+p;4&>#mCNUO~KpGHtlRD|)2T~8Y{*I>12U%;lK@Yp?l7&@74 zJKT!*%7iu&n>t6ea$WuT@(o>1yj+iot=et)w9?|Jnep}pV`33ZWdkaZG-|AuaS`H)38$?B}t6YW$~@?iAaYKrrxg zChdZ$nTEG(S3!i95d~0MvE=3YneOg( zg{)R~4N?FZk!$q78`6-gY}z&M4T%x81wam(2I(4%p6si+=tKbK-c-;96exQegLbpI z=rNnCG8U&SY%L(qUtuslEp)rO=EG;MZ$5ZkA5Oh`PX)MRLK>W{;ioUKHDVVpM0J|U ztPY~RBkSa5Ky@;MDY{^YaQzl!>206&HBy_rCI7hWFn$kEA_j~=+xEOg1=-OnnCYkp zb|=_~N?po_XWC&_e`#!jEbFQu&iU)D%uN5dDNd826ICaV$qd3ZUDufjxi7~?9)2*X ze+tB$<6f^Z_vg=iEM;c)aiO)unJ<|EMn4jHL+Pg>x$ltN4gMGWp&CIz-w5|Qk>5B) z4;btk!&>2-yi05wUPX30Zm`^R4j9Gk*dgC-d>(W8%d^20c;-!keGBOt*|zRNx^JMO z17y|ImhL0%ZFoDAyG@+-Mu z)nquKI28CgZ7FirJ)+iQTqH0 zf{C6Q;Hx($foRqiXD9oU4Qc3hSbvCykL8e&CKkJCvT?TI{yDNpv>$mMx$7WwXAntP z2dJw8+ImXb5)1V&l+gpDPvXQiTYI!yMNsJK0-;w09w{el1SszRMspYvNv=r0@M=pR z(|jE>OKa~lmU=1P_smRbA$JJ)GD1^rO-Whf1G(|$uq7to({plTANI{ujpqXULW2oJ zC;#jdH9`k7yDVU$D7Gvu>-9n?0pQ|Nalw|P=m0BX`!Sp?J@ONyz~y}B9zxF*(?#yF z6P*N7v|1O;ML!?Z+A|b3e=x3N4iXKY;JkaFGS0cXdI?PAS5#};3{`>8j*L|zYrYp1 zcSr;PBYVg2zA|qjHP#~A8NR2W0Qv27YHrCPD2g6vPUP5zRdtO4}P~@G@jDs6A`nK6Mu_GtR)t(#CfR zp1=Fcml&D5JsD@*bwBQ5ZOo)@HpPRo1P;I|XA4C>j0x!EuRmf9A z9Y}~bT;=(J;~2jYMi6cF(({__a{-y}^nQ4F>mm#$j)NyW8+&C6#WU$)!KxHCif}=FZSd-Lbvv+5wMx>tto@?I>>bk72N?S9V zX67D(vium{>ciZK2RXuX9w}ukF!fEZ=!y>m*!tEv6s7 zihJFJHe=x)5iC?)+p`JSUz7LzBcUK`k)pX<0w0_IjF5Dkmz(ZVIBnBqJ_+Xc*Klyt zLf2RSf1+3#6{eU&EK)yd*4*J+_|2b@n057RjN6g*MoKMa`oM-(;L2d$U)Qdu?40

)+6OU|qo8QAI;7qqbDP}o*+I>4v({L`;e};pFO_)rJaeWxlZCo47wM~L<3hF22v8Gs$$8FK!|87{Khls zKkhnXR#DYB?@@Uj|5+y=NpJ;z8tge{+b&J8j-CXR(SxeB9bRWNj%*{MeLSgf9EPcs zOU~Gg9Cz1*QK5{Oi4t201femQEP0+eQKn2ntAC^mC;l{?)B8vl=MtDP4=?sw#U>~p zbM;OolD$rke)?S*W^jJFk`(iJhTDSs9?g2>mzFkD zlYB?05M-y_{Z#gW^>6m)ebP_;>L6n2?6E9t0A+{BC=I2Cp_ z=CP#9Y0whZhzCa~IQO<>UFXT9I@C_@<0K{Nghk>1oUu;%ZlK`IV)@G7kex5w37I8! zkwhlD=<70GTs?@x;A`37_3ZR>t4yQjBiHy#S|=L)25&da!rGAhK_h^Z%ef`pd;UV< zI?Aki@5N+6=>BVn_5K<_7-8V}YbiB>T^_>u2TBwfiLKcy^S+HHmKxAvt11q-U^86Z2Wahtw zuDJ+S--C5D(?uR$L*7<1oiNH=id-Gi@1N=AfW|2uG7M|@mbK$xFrXWC(XYx(u%PMO zO7R*fuHR_FYx1*A>Q%=muPOXhO-a5cUbC0ri6qrg7_HK1k~Lhxjn^qVT0POsw*Ppg zNpnI|cm}ub!D$$BQQ(RsqlmX0iA0xu@A{Ddt>e$?+^Pwf1*_p$adup4VctyS`Q>4U zt(ZTn58V^*B+7+yW+I~g9E)2A;|MF<8Ko@2GO8f?-2;Ks`a5#wDS7U#gfqz!qF-t;2q5jtR_1{c4Zkmt<(<}9@nah>?UcX{}xaJ5{ zImmaMWA+(y;SawO+4Y`3ZWYXgANl{PkW*hPly|N6)Qfl^ik?3FtCn|@SA?YlN+!eS zoSn$Z;yRZVjHwTs%{??(=Z96i}731Yh>=He)Tiiy`m^x`qSp-BjGJ10(}n*f-1s9?g$=tB6TqfGuRp z3`hb|K*FLw`7d-}lcw$P0653Vs{COjkA+qg!uoNBk8v^EA7GrdBHLG>$&J{93?2BU z11Y9k&d)TZT)xSzKCf#v4D^QYy^=T|{|g7^55}-pZJ>YY#~Hg{WH_x%1{`G*NI#o| znPz(_qz`w`f1+LxwDi3uq@sKAaD~ZWayJTCO?)&IL0d(A_rjX(n!t|23|I80T^u#=;vmD;n*qKlZodDE;^q*$ZdVO*JT>(W=-+erIL`}!5c z4Wz5**YQY6@x1xjPB`LTg@&Cl3@zzXxDupmWc19*+S|o%7ghR>A1G;o0^7%q zL{v3-bn8Hn?=w6XD!Ue?ZLv4$74m=wMyJnBBr&Czw=L>qqVI3r_wcTrUATclM=XMg zFzv)oJ!L{-q*Ux^D%^8MD6k;a4!W7~1x!fjLZ~XPZSA-~k}H7QO1-QUR8y1N+5f35H3x2>8zReU~90;Ad z#%b6#hirj4B@u|Yn)CP_#gM?cjFV{|ju~#nY@e==9aFy$Dx})L%>iY9!CP?RC zD{E2D*wsjj!<%rW{7eKOQ`DO8dt;1}XKct8LNN`pPwfH7h~!(^c{BJ`b9%@W5IX2D zOyV_vq-i$*+MXk(>RpyJpO|*`{IV`yO;sHE&SNi=Vc?{(UQw zH-Vu1#Ny0^b4S5J9x>$0B*duns{Tgc0C8P7B|yBB2L9OcNwHoJB{&7?)&=V$F*4c+$5yS!AgYxo_o%)zUwz4R18T$L)f zZEtoNxUuhe>6oCa7bQw25&ud(ySxw zAJ$eI%dC=NY|ae%-2n~nxEq;j@EvBoLc}TIpRUNebWG-_`4w*yaQEd}u@qDsA0d=k z;0C)m#0aWu54qBCK--uMQ+^s3DBUimF9v0MfBb_RO3DsHdOMJ{=Dm`5j?frCCE1%D zcR50R1klFKN1(F)gpZ~C!yY`u_2nkcGAnVzlfyw&VAV%2{6C9iWr4BFD2tnAMQCF4m2zW^%r|>`FPvPTR{EX9K zi{gZqXWe@eMI30mn21$HcXxMxUA%inZZ|DyM@YbpN&NM9{ylx9XczIUDF?Q6XQ#Cw zqj4`VKLSOMN*%&789rVqT44SDD!9=x2)h`f-BWCR_4WLazE6siTB^;tNsZcVVH8Q| zv58*dPrFXK3YJ_aXMU7bdVz`|Q8(aza9T}~gN{*=keAKC)f?Kph!&#dKUfIU8GJM4oOIQr4tY8_zt!8sJ{l*^aahWLprig^i^P zIVs!WVZX|;lejGWBtqy}Wp?K2*!mVFmG}EoW!PcAlX13CNju%vVB;e|=qk#(L~~)904S(^JVb{|h&9no#vX9siNZnX|7CnZ=xawLr5p76fK+ zXZ*dZyMA6xLzq++pMonbF9$$e>GtE-0QYQLK0R?54%PY5gbO%9G!?3OrsczZoN(V$ z8A3>;)yXiA&u4w6GUB$>`bT+1|5eZr#xe#NoztR)Wu`7)&u4ZVQ;;F+ap+-Mwj{50pVT87WOB=Z<0KVqDyD4HlV*EOX zjAq@%X2Q|>>5b9mQJDXxtr)NgA_1qDCk<)0B~?8hGJJ(^?^a~AY6|)p+XPr|*lhDj z?p)f91-)yXkc<@lBIV{!qO@SN%xbA;agN{*=~k@g6+xMG&gp zHhBY%^%@;)-NhL8&5Enm5>ziv)Ds*K_E2Y3=yBp$r;rHIe3HP*X&pxZPNan88}?y@h=nR zZka#2LsOiEsjQAAFG&y5Pc_!aZ=d~=U3Lfx5brGc&n{DP4|AiO{u&VURKnfeJ#2Ha z3l}Q(blIg3yiQTL4>6*}ZKmIkyMezhOZ7I2sgv23UWE|!vF@$6$gbemr!)ydr0(&#Lsz%dutBrpg0NF5qev^O$YT$WBm;ILf!g+3o;bieS zV<__VEvOqxKpA5MAnfeeSY^<$1@Ep!2Z2&A{R!8DSIb`;11t=6_uyhYQDE2s*Rh72 zLsaaXI47GCwE5Na1M82-uhipiX$x!CiyEUD7ZfBiTa@tFz>^Dr7{l#49rKq&u(oXj zYdD5~Z*c6&OJ*qufp@SAe!gzl)JP}c{EiI8Y-}XKR5~_DuEKNO#U1HMONR|F;O`IS zM;u%x&RFbUS|-nZ-pkdF6s+BehA9v;4Mn-E*7rIK*>YxF@(g(?qC-G?0Xq=nApj>t zUc(6A{@F$eDGnmP=%EHn@)_#4nk`Bg@qXqnJ$a_5GHO`@F*XKh*;SEViSgP#Ir$=# zfAYAjJLaI!pf~kj0gmM_x-QDKYm`tZZ?024^P_6X!A#*;lhEo-DGD_YXpA1N`S*=& z`ei&`E0fS;vK=%b{4s`@e4%2s-JP4P&cApdhRQlZoNrG#+uYgtQr$T0q{`oS6?jG;@D)2RKX_H@6 z@7EAQN6#GWX0>)E#GmiVj0e>;HEx4Ce%PKL=rKq_fQ8mAf=I<#^5Jrc`N3NmY0EiPCRI5F`juecsE5OrCHqEi0?3 zs|#k>p^p%GYp1k3U+Rjv+goQ+K*MJ~NXD^b5blRJCGa{;!aE@YpF3LG6N z)~Of=ybw0=G8-Huw>k%VO^~b&AxLPbYFclEji>81=ti;G<132i@xQE=7M7aR&gTMU zH04>p@}2Cwp|pG{)?b#l^$AJ^HrUI>G_PFAXZO#pSh|ZS%T;Y=x(0!`0!z0cLT1Zp zfx7|{Womz?{NFafJr5e(8WkzVkF~j=yQ?ihcxcIQh6d1+o8~wXTj66I!h59-yyb4) z<6HLq6XCT}f`!h5#eH&e_}SS4bzt-*iIK|{GJEoy9x);8Gh$}@EsQkuF%^7YQI$tbLh*jm(HNO+Omj_9;)w&0E)P=Vt=`m0QFzmN43f*BV+f9$qVQ)^kqSGS zT{f14D}xU@`SUZ;(Lp3L3Mq16ilcKuls>`!cOM8Jd>6iZkVv`RT5!ie4!`X{n0)aF-3?Iso^uI^ySNAoB1CEFAuJ`r#r_1cyH(qF&2)23FH+TIH z;KVSV-ICPp2r)-{H>LsLC6nICjRDex8GMOrNkquT_%}22s1jaujJNtm%;mF1nc%?m zrsD~RTndzdaue4itbRmn?)KqguI!**Qk2he5x(fg5wk~kP$d-{j8+vT*|~0eDt0H& z(bH2s>=%=DTno@t8->MDAw95Qlg=&*ZRYN1e`^=jZZ0TRe(o3R#xn8HI;c=P-=$PS z;r_i_}T|{K5i>rdN!FyV@q_*{@uX zBgnS*J%AE_$4l!Q85xCUSiTt=8}pKsRePzAiX`%`fQK2vaWyow-lM zgf#PtHuYD9X%%faa-@(#CZ+ib6qoU<%0sKk*hx)PSOZ{_#5vSw?0mB zK=>j^!yj?eYiZX_nsFrUOrEXbVJ0I#Th_S!Zz`ps%)?u=y{k-E^?$HA_K)wvga+}j zPd{+oBuR^w^UBG2bN1v{32sD-lVLtax?w-!-G~Vn84l#B^6=Y>D@PNLAZu#I7!*9y z`EPsMUq&Olx+FR!z%$W|jhG7C)*eqiS53?GshXLinfC*Cbu7BGleW)|#2O*d>3FnKRIuTRf$ zCU{zfgUfU76hNscqn zAp-4R9dBsHr=+B~+SqT1Z&Zk6YF@NAt4Z^+^Lk{v!%dV<@nU~ffKgZu$o2j_E#8f^ zkSs|c&^1=yC!6PDhN5VlSvn2Nb`aWl0i7MOR>%ULz8%>Dt!2`T0`%_XBr`WiGsa;( zn?66RK4e?MfGXK(tJ|y_vbNl0C0qKxz|3!$;zs1vWSz8ahkCep%`k#+diicqe5ZSG zKF7FWa=u(1bduKgoTGV&ZnDA1XI{hJ-Z$AjLu%J@%HIIOsc|w!OIj|yiIVg}+6}qw z;N>L(R>a_Yh|n1~Rj>&nE-d9cnY3?3x&7O1u{)AI#TRl+BLCkpM!1lg+#Jf)zpwpl z9Vr|)9CG)(s9-E!IDSxsqNloH9Tw%mXBCXI%Zf?Px?%p~#vhkgpoR? zD!I9r(8KY(ubUcYpP&_*IOAqu8?*`0JMbcL4y5f zI2jKbV}?{D119qme9`njo-WX}8*Pm9+24N&D)J~8AEnc-@KYMYIOB#6)YP!jMuQtG z@VYEO7~syYJe(^7feUS9qnm($RS(p!4cAaU`)h>aF8cyu%&UE1;UW9m`Wpm^f(5UY zp6>2>YU*CH^`Tzzi6ipV<3Vnl;y=0vh=nojdOFL8AlQfx^1W}CErP97*NE(z2g28L zs_6RDQ^L6z=B&mBB{a*))mOUCwI8bLhL+I|p64bAzmZV1m)WMb!z#9c^NlhaMk|c- zUCI{|E>PdRE0g6GEpDhZrD@?INC2p;mcv;1$8JLfUsEmc_NXl6>#qwvRi!A+Um5n~ zkjc5B>B8~V>d#)s!z3)rg9+WL)*?6@7Qumh6FVZZG&SKoJv~K3Q5_muM8{l;h_x$N zZ8Hry>n53Y%EYLB!vy|Yur^XUwy}ytT>Y{%=(#X-=(KCa;~{(ht<~Vz46V1RJ3j<@M`sG#9! zw(JSR+qF@;3GV9uFlY`e0&mw~#C8L9>s<0kmvLElIj_4J_(xmwQgT@H76rf_Q8i_?QapQfk{el zGiNCcc8uiXwITLhg|29U$=i)byy8UJXW-jtFyojpN_?w5Azvd6*F`5td>KO|UJ}&3 z)wEvH+>snKZN7bevuZUP)=C;U{8=WgSHR~|MAdHrZFC|I$@0SehRu0Y&BYSsG)$C* zx<~U$6NCP4P&bN^Po??roNYvK*?Yop%b-@MNWIo`2R{{p*GNsIHAaa@Y;I7Lu%m;d z4Ua#)LEg{IH>pXLsUh3DZ(jbwZ6_j4h6Vam_|HX_Hk8M6s2BRFFps&~(!zDXm}5|7 z#uWz38V9yg4+=n`CDGDpN6o}rP13W2(4tE0>1@!eZ!;1KlJ%BUfTt4b$=5T zH99*xe=jI_=rcdKH}KK5;x8V=%(smpU|H5Ji_>I-2U~R;3+;%E9s>6fR`|KFf9^}N zsw<2mfB|#v!ejN!P}zNH)2-aSYnJJ+?tW4*)Ld_RI8x(!mpKH2IB^|Hp&KU%d-(1{ zN*BbPLI&M{PL7wffGTG4kkVq61xcB?-B-|t7~ zW+zgz^;MFe)mj4*WoTAYoz4JL^n7J&VDM;fY0NIOV_Oxs>^^l48NAyB(e0}hg`^+C zYLWp2SF4BSPn{ywp7%G<1Wi)xSEfHi_}A!w$E%SziubHezU_EiS7I1^K6V<)Iiq08 zEGwWDQ@(4Y=$N$a+{#{eH9R3V(FxYKN0eqGA-lW8Fd4@&ht!$hMn6F9n0ZYGZ#?Ur zifnp90>n{BfN2TqtoP~JER^o1L7AD(NEflIL`TmUO}T3fEs5n3~OtdJ8@}kvlqr=a~MC+_jrRHHAw?QXatE5 zz^WmApyZR8mFD!RKqK2vW7H~B0H?>7h}o1$57uQ^)R2nBD@CmJ zcj(Ie?R<>pttGt=9hox8G%Nd)<}vowjd`O8sLxvKNr$&DlbzlyY`eB0WBbfXp4ze+ zVurT8To-gM-2O{UaZmnE#=b2uF)~kJzml$Jbt8t(KfZWzIz{(MNeR#`Fezp4TxTShaIA;_!qNfLZyu#V=AydXxDN5#M;)7>h$ zW0AmV1KxavH0r^a!p~J-pbR4n1()Bx`!wQ$#*L?^bY10^=vEta@&70XHo@tU{ZJGC z$;sqjRIHA4*wL;m$&K)v9){*CY6eKP+xh-Oz8yB%vgU8BCY7h<#Vz~p-}xG$iry@i z4m+V>bO+)@R)^<^LcXafztq%Jv^)0o*S6?SM!>D4o!XyYG`>>yftK_?+8N zIq0s!46WKl)yGd`Z>?;&CpKib$JxuSxytumdggJ$uAg0AnEl5xik-}inyKMDw+6kT z-_i{_5nx*L!x{i_;JZULlEq&8Vp|in+xtX;%)=q$b9{x*EU^#i>+;?4I{+&dZ^6-Z zW#b#K_JV0?iPFT&GmXFe{rnX!rCDGU&O5a}4n1oU{|X56BqAF2MR-~kK2zOGDL>R? zv_IeZ_j3EO2pBIubsFkcDfjxG6ZIkQ=`Gnckl`1)mQL4DI*JvtuWTToPSC1^n&{5V z{!U~#)YC)GIn0{WAj|uqo@pP_o~6j?kQt?_`kc*%?Iv)a^sR)1;53W znE_}XW}Q=sSbdTGUSZeAXtA!Xx;=S-WBoSE=C>?je<%IvOQ?4o-~N+ahrqA*bsaw> z-&E>;L@%wkt?df0D>`N{4kc^P8j{p8&d<k7@AwCU-X2R0vH zkF%fMco=+qil{XgW2U*zZFwq`OMpE*WNDi2nQ3FNOUR0s0lu#)tOr3R-YgcrbWrE? zNgzr!Gbih?@FA{Q8P@BO?&V(wKN1@$LCQ@}+p7Wbd^<`)B7o8gbEidR<3_v?S4BlN zRkVSS!q(91vMPw6+n7%?9USS2XxP4L(}qUQ{%AF-v{}HCtlkOVeeHIYSt1OEyl_MI z$mXqATY7QGPkJAUmPyVBZ@olq+$FN6qXBXH=x2nXvq|{gj$MJ_ZnEj=Y z^p`M%KzMz(^QcnR6!(PE+~l?@x^O;Yn-J*}e%`8Y=!|4}XV)_e;-m2`N&hr_UiKJ; z*8?QQ5PVDllSk?hHTS4JvLq8{j&42_oTJax~st07`A%F(VfQjY*i|Q zKX~vUdV{t*E?MGMm!WN;%&cebRc~)^lYzoB_*-zS)FfMD^2Jh3YEwsC!zdC(8@%4< ztB3h={U+m4hn?nP^WFr`ZM$v|M6TnWtE(pQRpf>*Dsq^^G2Fb(*)n;)C1~2{e|j?H zQejbN?U{Uq6Vr1s)ICq28-tUr{27%eE(z$LfL&{`vb7XONY z7qrzl!UF!6uyRMem34+2N>9Pdi`rC`BZ)eq*f#~GslYcUuS^LiENQf;3EhN<=mTmh z?5U*JLED%6B0613rwhh@H8dgzxwQo{gk@rrUqPGI>AWCYdcUC_8vjF!_}_V71@UR`Gxaj{iUpa^<^9J4Fdo#6$s0&R1w#{=r=R_%>n=(-V%M%| zUKRT=3n>6Tn)oeU1uM*)VKqw`BS3{Eq;`d-`h^JvMT9L@{+<2}|2?Po08QRzYf3*1 zYP`?p8;KaAH(Qod%-^4$GHOOrZX8EEQS9a${FiZ#qpw>haRLP~5 zgAuH$$=1iiPlKoWz;L$_C&b-5&8w>Nj=|i>wpu8lY&B;5&u?42ivR3rec@kq7yYfu zYW%#~A5MK468R8_pm(VqZ$?}6BqDN2uFlW_pVPqCs8Y8#naBNEF)f)t9YMN5I}_G# zj!!2^hEc2{c0wl}Q*b!j!Ue0iYSXxYJx{9MAyd)Jwd?r1`O$kv(prf{VL3ObkrQ5( z{~3CNH=mzmXFe1c5p`=yUgO-(>|%f0riz7*vD0T2C~%O8Rq?Av0wdB z6Mlj>zUiFbVVcr(VXmepV%&rJPyUIA!*&ji34@~xPM~i+cZ5$fXkb2v(vEzZ}I-3JUeb+bnJ~C|^5zA0|)P0OKIu+ql z?W8$5FD~w&xuuf0$@;XN{U>dALm3}op>yEWBeK`;_e71x#|Q=4@sCLb$%zyC z>6F|8H3jK!7%#xI&+bGLggJ0k@1$=GYDs=T7e@PhNs9yP*9d%j7}vA%9~ihd-P)dS+^1nyZR!GG1H1XO90u@qr)s zN*p@(C>%>4^Jts9k|>jqdE&ueISqc1+^(Z$hl~UCbnT21LSETOf1-Vx4izN#>Z;3H z*|E}_m?j6#M(cPTiGC7fR8hEW{!vbM#{I)=)uELPH)2-r)cL|+h9MXB9?U^c(b5({oA|wpZC@qXh^O7)K@S#5vH*_{|K>r!D}?!cx(HJ z-wj-D*;4yK-}m2he%B`5@QsR@>`QfWUht^C_zHnu<1V2qKL6>f+Slg$P7n>Y@92JC z(3G-GY&FbZjEA0VqG1#tC%>J}!xc*%0+}9d9qW;Dt__cb$tQmn+lpSP1gyLy5RZXt z;Un8lg_b+Sbst_i{@3ub%B~7=1x*FlojR8=6i@q2$*MwcsK=kBgzg^nMRFuwRRe39 z0%+aDdz$zKsgzkoFq5Y+tyqFW#`D^_V%IY-$Zg$(m)&S$j!-Ld38@`-o3C$ zti4r8hY*C%=UK`rvT2i*PlfbZXGN*Xd-WW@>r1C{@0dKcDfP#bGo;H+Hy7jYBqU-e9y9?USx*!!d3&$wgGo%fxhrg7G73g5|SUKIZ)M@ z=&^O`AY-+5OLWMFG4FM1!Ywj!&2MZV;VxN0J)k^eGYk*?*2B27Jsvv*3tJ(JOtUK5 zy|CYKAY_0rAliv?E&mOjAdoT$p&{~Hu^~V)(Rz5oXg?q==1L4sy5u(ULLC&_}DE_S@oju*2nCt3S-m z1H&TEDHsC$Aib>-`%63LjwZ^u!*qRggF3Y3R69LbVzb+$UsVBa`!JQC)nG9jYi7Nf zfQF7Xo@I5+PW{c;BlXeS3BAUbR03|=eTaC_Ui$5|{o?TbNDm#0*x-k==rUBTTTfbE z%~GP|?@Yo&o}f3j(7Lc>uR+B4&l480lHDlN%FR-F$H>sBZvfK@xz_h8_^A1*Aq0n! zese56F^Fk`&WJQ_&&aEZ$9VI@9bY@sw{^lyW7w>F(N^26d%E9`KivuYYi0Tw1}{Il z{j@m>JnYh%5>%RJ;(u|$)6qEak>EjW(w0kYRdFc5oPQ2zD#4cyHS{C9^ z9=Q?466JGg+wpebR(`|{@l6+<`Ot=iDF?j9&oV(01hgYhQok)07qFKZ5^?wNfpd*f zqx{@HqQO0(1JbTN(J)y#d8gD)#fuq9gMg^ZvF5bGd8vUh8 zycW8gBRU~dtI0fxF>49Prv1Dw3j_hDV6VGD>9YBmkuho3!G*P4$k>cS+HS7ILed3f z{m11C)38Tg0f}5w1-+$5O-2XpW9Uo1m&2aJnyWpD-c|LCsn@PCK3IUso_IU>sFPE7 zJH6W!f-LXq!&|^J`EYYx#``#i{oID3}?H`%_>@&#H?I-Gt@M>8grDMzArcJ zKma;V(&v=WzEM%l`{(b9$9lkl$3=>H=$Z;V!-+Z3a$Y>_7o#C-ByEz`VZXu}bBs1f z9Qv4(qk^yUcDQ-9%L4ZI#=d`2%63FROAvcBCGFFn(5Ip}uPJ`YLbWQx;-$z`c|<0y z?_(4A8e-*3u*2zY)4Xg^9o2lbG66J<-MvXssdGDjBYu z)2R3J?E&D&;{xk1(o6(*Mp}Q`J=;kHH|HIyKe$}1qX56dB$Y+Y7u*3(dm;15u+$h0 zE@gN@JZ#pnyw_*ixB3xbOUkBJm$+r}6bVa`x-|G?049|!uVx7AX_4Q=LheD-sh z&U|@y{K5;UejJ6E!RYIF3a~lgw=wY#UAH^(?qLnN6ACh0MO=f%1J7|ThH-u*9F_gl z&9br@9^YGC;$OmEOH-QR|i`m!otS>eLRzsrnFo{&!b zz$dINnq90!kqM2)z$cpI&@ zOK6IK2wfu{URozYn6A!N%3SPjQ#5P1_bxdiN-&U8Vs?Qs{5Sz89v!h_8mdQ=?~c^H zNlOI00x23zYF;=!5U?o_9bVd|FD_h@vqCWB`w!!a>H2Gy6>>_D3JTZPkJw_=V;0>P zmUZ#o9L-VhIQ8dX#J3?|E{KUQ%sFiQkAa(~j1pO0_^-R%urU2AaDgcC?Tfb4PT<}X zZix31M@-Z6pTCev+v(}xIj-xYi4W7iX&pYCnEFQMg81s-sy(a@3ZdeKLTY9hlot5KB)d}p=<`|fG)Nh+6g z9E1%m$Lr)wCZI17{p!Rmwa|i1`hJQ1B|-|TsW>r*kJpDrd{Dfz z)t0%7!!*=2Xd!ZJQDzJUO_Ox{SAM0n@*ua(oL2Fxy0_g1f*7|NBx^>2IVb!sgXP=p zBXql}TF`Y^2cUxK!09$O&HkkC`dc;S0$yz$c<-%!e;M~$dP5E0YT9{%4x@U#Q25u& zXD}znC;n!9+hDXT5o6(GTyJK&n~8^e*em3k|)G$paRrP8tQ0*16pus&P1 zFM^dGZ9@B_5ifVu?)s=_G9n^K9(eQi;vsB)?#lIzH+;r2Hf(E?uIvIkuCt_jf{^C$ z5bTjiAo1>>G`-{@*DA^5r;AfRfbf16%!Nv zCR%p5L>0`uBU9x`scCi-&6PZ@z^@JGU8mYZv*=eLrw-iCuxj)y7&m(R@kiB(9|kB zh4)X~X}ib{o3+b7Rrj;g@uT0%-T#BGcMoU!jsM4sdSR>;%@i>MZ zbwWJFk6HHvteQ}c&aQfe5)r3T8i|p-sE*O(ZyZWv{7JVeR3|>!-*X7hx#iMgl6==k zD;Bm8ydOtIFfVZbo|AeesU~O#%VxfK-5x#ra6OgPGtz9ZE|ms&7!vU;sme)ThQ9^> zppOU;Mg^9h=lztYAy#=Kw4hDFG8J$Qyh3?<_=tW76U_o@HSVmfOY1e<`-4viDG5?d zvsq(@^B>UVEE07(>$rYNa+A@|aNcqo=XK{6dsquA^A>E!-)+2({^`{?OL|LdQWKv! zGqyG%zHVG&H9^wrzdEyMk-bcKpjUnfkK>i)SzplI8!i!fFg~N=*y0=aOvxd9V3M;c`Zgo z$UoVg%`!gFm-g!yG`s6UHBsb}DfhS9zb?YAiSfkOgnaw`W9_47Qo=-wo=5i`1Jrc1 zxss-h^}b!)iQ(ypwwb2r0hjfAdzS5yBrlU;uQvFQnr*v$FX2qEf-}@}BkfOn3wIFC z_vV?-JMHc#zz#&CZ*zQfYfxojn%p?KWr7Isvt?++uQr0ZKv}BitX@! z|NWo}llyC11^u%!{_$0>gMuIyo&M6$*&WJOpfV*}s()PQOjL7kBt8^}Ezsr~DpM)M zM#$*Ht3Yc6}Y7CYf!VAXx+#C^_pjgo&o&=dKoiQ>~VGs0#n1>ftO7o9w@ zX&D=KAwt0!{<&m~@+pae*?ooH^)Yzc@#J^pWxzD|2N__^9CS+@DO9g z7E%un@M+$c`P+KRAJ~GQ3Yn|HOK(@dMad*#qjcV`zdd1I1ajM^9Ype|dG9~DV$djE zcdO1{EcgquKChds;;rzgMdha9wK@R~e}0!B@uh*JGN%{MIiL5MdH=Ppc=9Qld4`-Y znSVNB@x6`$Gz>TN{tGEt@4{gf4V3Ldj};Ru#{jg&r_O^X<4uP}l+6-nCqPm{x_pjD zaJ(p2+pbuM=;zu3&V8f3zjd5z3JE*#cv5|A;ZGuMPM8h4PZD(k-g z8dFd!B7)vb*HyB47La5Avm~@V$Hdbvm~pb9BS~|e{5lU*4yS~-h1Y{r1Q%LCUpuTk z6z_x@RiGyXxg`$E7eVA+)8&5o$0Zq6(K@8s;KpDE`ms0r_h;X(?rFokcr&g#8kiSs zlA396W;?)}nv}Jr(ZLPNJ13MJ4PFZgxeZML8+qdyQ|Al4)hRB2`_cTWuYsjz1+zU? zEyd#TV?jQdS*>Y1__6lnWJ%54;DPay{k=|wzdWGloeXU#_PjR9=v*~SH0To_Sf=+D zcCx_{^XA#c(A;oTi_c+m8iU7Q%VB&JDSEjfu_`LXJSMf%)HAe&QzWyo0e5L#wSlSF z5Y3;YJ?D&jlT)olTCas)nNN~+fiX(sU@5Wu@KCSq)V%RzK9FwnkqpzRz-d;Lue4H0 zkwRGVieeAB^PWebX~!z{pXTvdcCXON1xRsac=#N~Ue0PL3o)cU9{;ODDaM#Kpl+v= zZ{(=P--jBTyd!sO*xJ8|ma}6U7nAh2xbpGj^_`6fv7hJe@rvyi$5^7A3$rbLZ55~0 z_eP%St(RD@z)sC%+=_B$*3Py>j|>+qQkLnJGT92C27OIH6KBV*ysMjwH1f{HUshvA z@>~jIT@Y)O;>SHj0$k~OFJfbz{^1{!0PD*>njhZJbnnpn?(ysLNvo_KlP;2Rx%_@~ z`1*5Efllj40V^ji6}DjiwqiWDZb!P=T`^g5e5;{Houo|&pnp?{MTQ1atdti_Mb8(d z@9v^os>bqEwr}$aF%~GB#ORDGykbj*4Hu5XGBiS@lAdwFcp7?B|Lxd~RzSPmV~U*H zTew2mIWh$mri%yh+0HQvTWsYtTD-5M9CXW%((F#gB|RO?xhGPwU3+{P&bQ$~_gbmS z+gddqz)t)3f5;#kJ-3k+i7(=moTe1+lX4hW3qyrtX(37HwtQ$O;%P{0xjKQdfm~NN zY(?|d$f$Twiax~?_oMw*2^Bt;h|jzRqW>6)$;v?Q{LiH7Iv0CvV)@xG7C~6{eNtim z)NG%lt)+&uH(AX?8TRhYFngkSuygew=6Vg$jHy+U^Rm2)q#)=8Fv|`&JObkqON2Xr zoZvdhxzg%IpAkV_`qsF{Q zx6t8Uq2rP%nvU{+JrtsI_AYJbzk`$zXL-e7W_j)s2hEQACwYtJ)^6Lq>}HvbeDpDc zq1#KOQ>!vp0^9%DRZiw&KDXLlRotl^Yf>t?WM z7R84(`%ZBzj3pKhC<&Pk&8pj>7st-i#Ca1FiRZ0Jg^OnKf{9B-Q9BU|t|x5UPWLGH_9aS)E%a^y@`@^r260 zwUBU=Z~OZK_3hW6AKm~fCQ!Q!4A4;*r7t!^;E5qVU|sG~7N?1c`A6lJ$sjh4W6IUY z068(!^CQ$infH_1upVr^*%2C~HyZ=GkR(1Cxh8eD!P6+jH?oaFVY^&;vm79@$4kbG z8$4a{vm0>PkMw@j197qzd|2Q66dIdR{}}BgeGZ@sRS~dzh#|8pZx^M}JrKx07-zr} zsDh3~v7)h$Nzs~M9pY>!46fXq7GV{0ocRU|U=ghuc?gbe~}oie{2UWIEH5`&6;Et)!LGU*fGO&rBI zSFeGN(t%qud@TF|CR#priEH89uPv40xwtL=%Kfr_%ZyuIFCjwMN)!4=r7;g7-tsw0 z)?9x3Kgj~1BzQbii(k-wMdVAu)Y=!LPkW{0#^jFnaKmXPX6Qka8G*JbyjNixJh}Pa zN>~up%9*&Lkn+|lk#URq%tP;MPD*w=F9Q42(4zz}>4la3 zew4$9P;BYF|GU92PP}|l__Ezm?1#ISr1?sCz2CIqf%blE-D*KrnK;1m5Rl0VP} zVm$vG-3_Ek7+Tb`PGP7Q5n}U|4#8WO#aOPQ(a z4-G^0HXuhn)P9%BcD9*tyd$0MXLR@$#g~+-r5qbqY72rJ4bHJRq28Gj@#}Z^(i9NR=nTB zAwcT*myZXfbC!CptDS`>Y=7WL$IgF=Ibm>TNd>XSgtZ=lxvYs>THg5gG~zn1>I${i zB4@39;wZvH#?-|y3~4Lgyyq>cF}k?Z9dQ4S8qNE7A0feS%JLT^D7J8NGS*ww`&(h& zo+qsP$FG~`Hdz+ojQu?T_6S`*0z;nuCnlU%?7(c2R(1H_kltH!016rBB&;A0ob!C+ z#DicM$#Xj_X-B|JlS+q`Vv_RZy&N$#UsuZdo9Gz`rr4rM4FF4?;Z5xMd6eePuBc2E zp$V&sCg)mKs=B2Zq?jK;s@godoxZ&lwHtf~8Gkag-AIJTs#RcSp^39BbE(20B_}kB z?|sW7gDS%Cw}R7~E>N3DvV{6{bW*Upd#4c%nJhYIL`N3E{?X-YI5FPhp&BXUsf}_O z4wu2>iUm&xC9h6uMn@J_+TB8M~2!ZtA=Z%R02Nts140k;0Su?ihU_ z-_}1undvV&{F*V1&B*p_`1E&FhZGVCOe!aT0;Ufi)iB3a7 zI?5TmqRURp{xiEy)F3})%!@7?KgQPr`lZ;j^%p6Y>WjCV$oc=xZ_d^KVlR7rIs;I{ z3~%7GQ)6f*^QXP!wq{(t3`DwC%2Tx(K@gE7kmf!rv@CJB++utve>A3pm zf#saQuEf%ed-B8KFRNW?Qw9(%N4TlJ9TT><*e@h$bmXy|>~eu=FfrbHXs!F~?i&wgCyzG(;#|KGw4K1VMKJ8kUT)V0xXrYD2!)B3bT?JRC5MocJ2ZG3+BkirSfqBD<^1x1STp-G z)ju7&gq9&iYM^9l-Gm1F^SHp*B4*aKn>{^JaQg%3uwe3yGo@ae7*7rNKiC)LYfkG` zjkvBF%JXGgDtBVAV^_yPK!mrP9e{aK>cOu8EsPS;LtE|M%=+u~DrO(Sz~P2r;Gp;( zteZ?vGlxCA}(1x3mJ`(0k;ZJp4Ej9rh(K&K}S9~ot)=(h4$ zD!1Tu%$N-(i75^d%sOB2*aMx$zyLDem|gG z1*nwfXIWP)rfS^;-x^@whyVzqsZ5Tkl0CjZU2|3Afn zT5#}>pqwsGBc1E6v2EX?cagb%Q7{*b5IyTwM!o<*@TzhzQk9m*M+iziZmy`Z50&WoANOe-)i$a+;2$NF$O$yj{Q5 z>yx8J68ruU?Ovmu744nk#GSF8?wV~DW|qn{-&2tlo)B(AlrmF86{e%)S25`P)X<8G z@{Tb+;eQ)CmdBh?7T(IQH^4U&==1fnT2P_Jp$$1F=>p`A#Gt#2b>#I^S9jjMXu4yw zNtn0Az)0U9Y~#b$7||Y^$cLUSf;yP?$fcVG&+T!2FJm@_HY4m1(AR%g9#V%;0+Wr2 zMZL<>bM<>I5FPRU+x;@gdcr zhJ9Y+Zbf5x;X$4Z`a+}G{QTwFI~O6Ly>rv9!k35$qxQ({wfy}NoL7!U!A&nUwAbNj znn!+3P_8)Tee82Nhf+K4;bqzwg=o@+?W830aT)B3p-^=o@6jTFZ!%oax=2ZzDwl^j zzx~<##eJecFu|#)c;9hpKN>>i-gT#j>#C!l!~0-U*W4P2R9$`HE1mD>qS(Jo|-&t@5R$d}BXM zy&m7poHn)ta+ua34@LJp_W!7p1)j{LCvYYIl2E~aW&S46nAIb1a=YBQVlJ<%)V-ekL8uGv!sv0>k0=3+#&Yyf0q$p=>9L)5#Vy4xOZG8( zn)&Ucs)E|Bz}CfV>2JMm+*ca3+Oj0#m&0EE5?*F3?+Umr^^`J1l0HhG`lX#;kQJvr z^Hw&E#u}YAyv$mzLLTFyyCbM!VS1F}8A|*3mx_+*=XcBa=#o#qMqRJiex6-U*#j1S z^su0xTB+a$RxN?(Q-9>A-33kv%{WrBbur6mFnS8}!1dAm2rnokM)-R$EM*GBdxrTPvK2_5YYDtSTcTL{{s%3wZm7KxXMH&WnKN4T%9xYH9K0KV6eoQG( zsT~k98Db;n(N}Wv+r1Xii@pK4i%IT9?Yv=cpFa0+g1WJDidqF#M>N?!{K{g=7h3G! z!^ml$QV_>21&-(G9q-C&Z)9yO^p=+8=NqoBq69t9Zy??uEJP?-J*^MlW}!oNm_@hO zZjV1aLwNL+@#EBeR7Hxj)=mB+WFG0O7!CfZ3GSKW*)ZBEg((%O(Y5y$o_`JSCuf4s zSspd~^JXelKpZHw5~YVOy>}YQtSm|GWD!x*wf>6OryMf@ok`*4h!Yd_P`iPlk$q$gBj7FklgKT(vT zsi!q>QDEK#|0V#8Loa9t3ce#q`XBW-GWE@c+Xhv3*ZFgb&(S()+^AuOrU%omLDoLz z7k2?ru_uk7M*I@WuZ$C}30(%u%7tI%;xlVl%-Z3V1FPpx@c54%q?P(w`K;dgWK&pv zg=)upNi)B0zta)DbzHsd6(&aD(=~f^vu!HAcd^s5QRkGGD1d8B5m1=F0BVIpRmd?L zqhE(S)VEre*H63h5+!GaLhC6R&FUbodI?i&X61Q35Rga%_D|4Nw;8tWB zp~|w_o#wO6%b3M$)uEf)6;{zIG?D3hPJ`Z6$=9EI5u=R)%_=q?KDC4zr%V+VYiX?% z4nk{Q>NOeBgv2jVibnETYUiimzu%JbS@=&jp8Jz;+cneugu&cDJvdhD{Rq7W8g`}` zqdqVPL4el8({N5&btT~2=c(Ds(S4&0TPXH(oW4GYQOOWv7|) z9lVOur|Wh7`TPwirlwOKQc~xv_>UFoa``xaqT)$`pTUMbj<%_|Q$;i$W?1t1up}n!kV3sAY#ZSkFwxYkiA} zVE*KAE&*Ns@fJfut4v~CCt}rxi$3o$vt*;FwC1zV8a(E8{57g`-&yS~W`y4=AlXpc9FxeX3nBno)aw1#Qzqy+fpEs$P zU!|jN8;J#P9}8nF8uU>fz#R}=`aD?Mxo~1W#%$sbkAM5pejIvW?7`N(nu<4)Rqj*j zUWZ-Q@nwabW3)a@FyGfH@8)gSzT{a6_1DS5#wt4MV}IGi-9WF$ptE2pPvkb4(uTp=xA8Nf@Z_|`k^?aKyy$w{}hT3*s*a`jvJ}!$k9zp(_#wP~V z{U<}kX}F?6Qn6DORkW@dOL7e6*Vj z4n|jh4xzhK_g3HONd|Voj?w^R=W|awqd&HToJeo&T$k`ZG@8#o;otGsg489GP1z)M4V6lR zRd+?uwBIjj&S~vHs8G0Q`=5o+p6^SkOtnG12EWEyiu~vz>703#asC)aYA!m;QuBC> z=zW-`VQnK1^@_?s%oq(Ibn7Xp>xS`)S%4St`2u8+Y0Ia=#!FsnSKyeV=TZm@flr*v z;Ujm)b{#<*vSFkmK;W?J3Y@@ zYDyW9q`W#CQ5$0I?EOb0qLr}M+zMf+1(q}=OB$Bw50ElO-=f~wQk9kvK3`B)mL|F9 zg#jjcuOc(166dr{8K};(tCeV{GWj;dN_qrNb84_oHLU)vFx77a6OU6Q8_*PQE7qx&TzxMsD?t#l$nQ&o* z>)z$#rAc`H3HSVi5kx{7TfkTg!^@!nI9j|t9#$>;l@Iu9!sX;8t#A@!H2Eh5mktUF zc}2u$>kG#hj)p72jJd*n5Fs8CkYzpbq+_<4Fi$O2&=M346uORvbA(KNFmomflwl(mSeS(43FAKuIucd3p zO0I+L6Xq+dZk-AiF>tvZ{$c-(7j$)CK;xr-7~bu}d;W=FadF;=?na`3Smm%uZfo5f zZ_GiwC84c;n-=7ty_fB(Y8Bw_`oJ3t1fvP>RPvIPmHv^nFBB>Ri%V+Rg&O zI=zCdq48SR4=AI0fg5q-N&(V^{l%na8Ik-3U5tq-;q_m{hQKghd+A0VoI+E|F-bt zQ0ina>x?@9pLV`FHp_PG&@C3{bGtDdDlIVZMh!+c|6EkNnioAN2Ebp&8T0=@Mi>Gl zGt#qrnkdDMsCx?Ms3XjJrJL%!AYFH~KK1&nQ%<}pE8S`4yK{{liU2It4Qb}~R)G}1 z+gCnvulb)Ar;@Dgq~W#o=c1%rUK(VEtF&sD&ZIAB|7$tm`(lFOO#x?y29RAC5SKVs z4|^`GRu<4pU9 zeocN$vY3;@%4lxz0s<8s+OSV=Y^+t@+mj_|?>Y-w*BcF($J*6>!@aEc3^A}$ zmxN=boyd8aH?OHd*G(}Uz8B(AUDo|}oei5)obBY3#${b4opK^wZNm0TQCa)I9dxi% z#=l!Sk=CvboP4+J!p9bl80WS}Ufc6tO6!`w?L%s>ApTRce(#ZeOXmyEkxIYhyVj45 zdyb9KV73sns?*AA06-CcehJ7JefqiL*v0KFYsc<|*`uepW)AgpHOid-Zhha4@CsXL zV2#%uN$B~=4ZdD+mAk&jyRDKJ{D5%h!8n|Z)+9S~gj%@3cU07$TNxeI>Q15Ximo9g z&PiVdTP4IE3F6Vzs#E7T(}21j>-=$Y{r9~yl$~f!iR01$tW(cBI+~sF%n-$;U*6>_ zoTqa~l>NK{aKhC$&5Wq_8BVagpYe$7ojsejMGw)ffF_E{(%bm2$ser!1-^VR6+xqU zl??Pma6UTIsYvh$pI75a6dvDaBHUN+7y$B2<}CB+W&_K$Ops8Q*h<(-vzHMO1?`Ua z<{kQfTLI$7%GG*)^Q4b3s{5KlANhy3eKmE&dT=>hFB!1f?xYkRpCgu-rO7pb=6}!y zzW_aS@;nr7KR%?>Z%4tkB3z}*W{oQF`J2u)hk!jQct|P)h`5fxb$``p9?kFHF#zm& z5CE=+VtIi#E?QDJ5QK`jIR(ruK=Wq%S#LDI z_}!*o__dzG=a25@e<@%^#J}cmoEH9?(83Ks8NR{Nz+qN%q_N^ae zwGWS;zB)!%Q%g|Q`Z4U``K6lhuehD~Ew{@)t8%$h5yTaNuJB=9wFnLo@`qp3Jh-iS9p|4~?an4f;F}2xt zJ$e|QTWw4A++|)DQz}WL{d^588ugoeo-yNw+bI*+dZ$KVqN$)A7oVEHUw;`@49j(X zASP@2-z?rfqjm~yl2G;HK~^qp$|w#q8~aiX|Lv+z*J2uI@9Hw)9htp%iQJ$2sOZES z-WagUGd}q_1h@sa1d{rRIx|fqPZsa7geREg{;FRAZ zMH9Yt^0snEY3mW5=1OzDKFcfiKI)c0)=@8s=!CR;cNB4FHhch-i7JehU$$^qe5BLW z@WFBDE4*3`H&Y5O5*Bn^|LR>tkuBVGcwTBf_;Mn?={4OE1*Z7ZN`IR*t; zkSugTnZGo{uQDF}aseKn?<$e)T3uN!1y+uaTA8S*CP}A^j#-S`7b*`vS?H#_n-@6< zpuAaduHkY2&A3W~*E{VZm5Q^wYM%btrtMR{2alqNA_oPngh8Sag!gnV&*q}*GuZj) zP94u;0KObLml_TaQptiM*HV&;BK`>T7j-|lL#p$P=G+w`NKO4P$hKeK$lkmF8u;uT zb~a&l_2>Qlym9URxD}%m{R@(1!{@oX%%Iq_D*zhz{l+iQ%^^KCluo3p6l}?y5>sqi zSEmm}%8~;v&is`BQ6Y2z4v0Rnz8RUK5Av_Yd%bCX`TA8+qL z7Sq4nOZlGJI1qQ)zhjnDp0fGo7X!K&R{hHA4U>;oEJ<_zL_~<{%ZaGn`cJrF?sE~4 zYpZK3OfL1wz&Kd^L(SQly*-srq0u6K!S4_HN|^WNf=?>WWQ;hpHI~c-%PZo~rP3E} zq1|50WY}n3|CQIK1XP&x^%3ahqys3;%0y84(NavjwQLnT+EVkfSF!@8rK=4htL6k+ zag8?LcgEXQyLc&TePJ z_|d643wX$5XD)W!A1k{k2T{1P?Rie-hCa_q(-p!3SZ_TjG?}x(prj#Mnrr7v`Ab?p zxkG3ryU>I77u^^z{LVGfsx)sgWdcoAUYuHhZJ+dJjWpl0(L4aCh0J(C-c!7B z$xi4XFUUK+@02*#ubc{%+v_e3##aPYzjFGDrnFiC)!Q4dXZT_gONiSxaS3O80FQDr zu^sqxli4XbRmZT*-EX^x5RHGfpMLLp0>Fx5fa0446srVaGK`>D3h?j(l0<-vVw z-^`)xhr6xZBkS6tyRZu%Fx#Ii__(V=;03<~2Y+($2 zEQtySY23kuKCnq8q)2nItmg*JY_z_YMHy^h$Qt?3%yW>8Gv}|n9wU2b5<`>j2XdB9 z-aI}704Ord`=mWvQVMjFzEgKSj{be%W-0w;Zf$TU@){vqdYZYNwQN-EyR19Z9hY^!$L$U4HPy zW*CpGlbln1*J?TV9zT;Y_=`>gHIWMsdIGB$yUC6NaZ9~yD z_QQ47wadwI8T9!%F8eCmxwlas;)ffs-+V<<(UvJWd-l7x;2_p6Zl^_9qh|jwd_|$K zfo4GMNd*4(K?jr=Z(^|&kpFT@#f(6B6LkQh=y~46Y42F~sRz7bSN~C6OJv!maW34R zN#!$A#Wl=uOmaqrS|M0?vz~ysKQx?}vQS^!8u452u8$_1{!O$%|KA9C)t!wGe1Eu9 z(e^f=$FO1Mx?-ab9oKK1UbSNX;*VJ6UcMm=>U}{c!>oSOI~Xy?(ZkMxj>pevp~{Ow2Oa)chH3OIPIMD`7sF3t zT%LuLD>*ps!A-t$SikZCZv*OqK^be#47S&!#jq3NYC)O{6JygQhWJ8+Og%zVSIXj5XdYj#zLK0|D;MEuwW3$%HSt|tz+96rw009;@wSoHz$xB_?~ zz~et>*_>3U0#>B~uOz{$YSr0Y7oc75)bWq*KMg*j0M+XBdh(RN$bLQr=-C&2sSMxU zA};;~4z-PL52v7K!a+!@`Ti32+O-?8H@JcVLp*FcSRA*6$>=`fcC_f1Oq_KT(d8k{ z@lVJ-7h9wjyeD{Ym;+F@Ea^^=kd~gwOjup7h)bWT=@c}^K)o|HY@^yt7vGDD54mIZ zb-9KzK?>0@1~=j%6B*{<70SZoR%`B!$88c0_qV6B6oZaxMy6>0ZcC9pZ=Vr-hAw-< zI07euFdC2ByUjJ!Jl1vzvHM$~S6GY6JRhM=WVPfFmJc%aS1|h-yoq9hlpExpSfhC` zaOah)hf)AgNIXA6isJXUkNS+cRrQgde8axKKq^m?eODbXCS{n zzqBlv3w#Xx?^Lg`YKpa<>JW<(m(DPbI3g%1Yf_Q3y#|vA2og<>$0CP}=J%$At3Q85 zwa3iLyB{LLFN~5iSNO(gtp?7=HmCpJzeNBo9)d_+PtNitHsp3aImesW54;lLP5dv= z2i}wi9)O1`W;N3<`1|I+QqXgs?sXrNk-=f3vQF0TeqPYJrvP!{o4FNEWdic1oN1gr zM=e%^7CaVa!ufa1st}rRY8D9BphGr`@~~Q1eQe303iaH)K!9+|TH!40-|zLsl@NQ5 zSB2)Vg%!$d3jo>T*ZbW+G#c2s*&5QK6+MQ|Det8%x^U_kE41x2>7A+3g4wIAQ)^t| z!7%p;VkXtBp!ec$uVzaa z{MCcm{d&iwib|JLf(ZVNPW(Oo8;}BNr3iJHYNpFNQgmTb7f^jg5m;SYTLpCp*r%e?OVN z{R%WRMf~qLfaVJ0`rptN$j!ev2xdjEQ6DdD#Y%N!^ zRNPMkQHK+WXzzna1;X3(u=yijk9$U4wK62ffm}j=&mAGd!8*t#G-e0;kY4|I3~5WvgxJ2S^RjAK_dW$` z{oE()OrPFGj>B`UrzC^S**Cfb5U%snHK}bmgxU<7i_*EwfQxl^_9cu&#&%_sR{U_t z#sHjp(0EK+Yz`@JF5}7$aeVKEBw?nxI&w0unI(B- zSztLb)yjMx`dljW5@2XK#-uMpwWgX4*1&DMtU!O$6B^D1zIrPR!3UmI-TW)lKXY(@ z2b=tYgo`wT{4H6~SP3z=s1|N7CexD+(?6wW6B8DEVN}}K6WD-0JuQ~3z}E4muILk< zLn*+*zTST^JyWFs^tpW(=0k{EJe(v#8ckJY`BP+H8cXbG-!ZO8S)rz3ysunfEY46} zT|UJcQBUcS3(}_fnueIs;$oVO$#F(h2mTuwK0Y^`zN!tE?P|Cm>U6gqA9Z*B-#$K> zPckhspJ%?8$XOWUu9)B|16W|o$P5%38^{ZP^EWGfJh`*ttD__8W4l{snBU7 zsWJTbflI@^ZJ>`2X)rlGOI{5cEn{h1ML)h8XW)U;kdN9xVmG)xN~4BXoAWmL9s-xm zK(b|P90ej=1JP*s@O}5#m8#*@0z<<4I2#2Iz??SylZ-lCS!M%RXf;(?-i?g0S6R=F zusec@LHxX@CxXF(qGOf(G`v+Na^esZqFI+w0eN>iA1J?-bM z$dgE44&zh5ci&5k=_w%vwW2(lg+yvv1gHBG9In=1H~s2Zv$yYMMbN5pkhRjhVoR;# zTz~;bHX?yyoiz?f0lN(z<_N2P#mgrhKVhF`qkkr%GHShfHsh#vWQ&P+i={B13ri-9 z9X+yJE2mU}$D=%x{m^}&eaA`rU|CC5rIgTWmnOXk@vpI`gOw^E%Ac-T&rNgK&f`V3 zYydCXHb}}I&oqT?o{W*l93g+!-0Hefz>4Gs0J}p!6@~!u>yiT`ooOVxDP6YhpM2BN z1h%lM`_J7HE-TF==$%OoLD3@JnPmCcsU2;-Rd&(CHDA0`DrBj-p-DF&ELyHH%Y*Z) zTzjPL>YwO{Ux%*S)!YBiAKUf7E&7L@VFvErGdfdsvO&BnfSp{$T_APtq^8g6f)Xsn zsRjICYn5v6QXvLTv^vG!v;l}4FM}te()^YyIq|L!nJb(4VWvTiV)K+_;Ct5 z#-0Vtnbacn12$H%Y4-em@B3A2zFM3gUmPXX%1YGlkISyaTxr zNj`tz+zqEmbpHQe7}3_)=IerlwY*}c?Cpq%GHSh^t|I@IY8WFr6x{&oLktd-sW ztntz5Bjm7qUG69JO)+0X!WwyL74yPM>zv_;B{LnbqTj-5C&QGy@9E(;Lmy(${mNiM z14n`GanNe2_bXKM^Yy^YL0ieeTa!2MKtzy_doCw21N4Ya?z=pwQ;nZZyG1u!Ex=!< zwEIn}kwdRe6!>y1e0F8s`~Fk-T-gQgB0jIy48im?txU4H>ksPQ=Is=FZ3!#cbw5=z8~yYp{tivZRwVppBhIPf z@Vd7wqBy=)nfN(A=UVS&?jf6CjXh(yudLoMwYKffdKi$c0)Q)ccio0#T)sg8X`hE| zvh4h?`4sfrS5#^)QDAk&ViZE%n%`Mk{lJ|LH)sf0(NQ$C?a}Esd5s)e9z~(sYDE=> zOcY-%?izQe;fh$?-@vLNyN)@8UPIK>fNJh`Y=KPWz`HHeUx(GW{r&U32IRy1&ziAc|11qoFP?JJOt!KK)QP9 zq2l6%0@m|Czht99xS_NkDJmO^zW5jopN-x}RgxpfWHVhFHo2zBpL_o3wHq4e|UMxlx`PHaofb=!Qr`use4zmpKI!ze!S-ddiwF>-&>`9kjM@ z^We>K@5FZ!=nBusDlv$VUdwYDJ8nsTi-J?bhxH+4{`WrEnV$#2ROJKElj+i7OQowe zBmww@%1vtJh5)VHJsk5nj(&}R2~6a>_EZEx{fQ8I;=Hh7HUR#xMm*ats8-v%-eIrz zC#XV~f}>q?#K51oU8g)7>X^P3e(Ru16Sy0oVb3KJrfah^0{WNfLaz%c8v8sDEXG>}7)Qgb(`2sRd4oRyNDwImaK^it;C zkhD3p%;J)9A!%aO^BcF3+tEk-3<{b_A&04t_k~iqH!A8*O}R0^yytt_vzp>As|U`? z%7$B00>8rhH5Z~Y zAqA9Y18VBd2HT#qX&bIfTky1{@0HK_=PEnpE^MO9O+=-)-^0_^tW54x; zTmK9)YqhpAY~TbgY&uDG0c|Zu&l<}d&d!h3SyK*(gBxwa%NNa(kaGdO zLeduqH-roaNZq_vNQMkW^FDdMxaM??rWyQDwcvLB-7#mG+~&9 zgUsDk>^KtYOs8~-+yAOleR3BrPj_6i_>-A`4Zjacc-S|(QMPyTydJ;cNY(wwbE@w;$|pVf%#8?iG>f8H@$P+T(#sdgU4GDx0W1*@`1A}l}Toob8Gc0 zJORRUrhUP6y(&LB}8Bz}j-e?uu=o+5;WSwUhaoTN%q zOF5Yuv$^T1U;m`xhp$1+oFyv1ee742=jx}ahg;6I5qJeBP%3zvA+qvW?+sBAdioQ+ zB#^-7!aRNMi=TD3mNca2|9s*E=FvoU&hgy$bxXD!yh%r8838wB&# zM4rNyWkog{PCvBd033gR(h(dsee*Cj1XoG|@=fTlLLeRqtciKuHT zM(fVHnwp82r{VEly34QKrtM62JL8xo-qZ=4fM&JA8n*4_QX9A#jBWcqil>*~zT%c< zz;6F|S+Q<5E$ego_k$tqS7uQ26jLWyvd3FfqHE`pZH7uZh3W(>{axPpFGi0yVAwWF&<+quMMxJ`sroH^U09>j<(h)WII- zW|zSmN75j)M>#c%ubvWhLF1@c;I2#T34vNlB%#+U+a{k_{qEw%oKfgF9e(hLl3 z0)1cse|U?Z+pl_(RX`>^9 z@fm4wYpP^q;7<-uR+}@=CFwFJqB?qe(-J^!8<8s(6l6AVh zD2>lc;zSXXgHQGQ2X@l0r4&9bfd_&ii zMU;hZwlllHY}qeyr!?hY)Zqa#@lZh37?<+lwJbn^x?n)9*ey_oS5nMJJc30!``VWG*X*kxhxRBDX> zYbQ1m^-y*H zj^s*aA=e?+6yTAWZsF=8G+i5yDy~2TbYgwNocySdAChmy53`JAHx18(T^O}|Bp%VX zZ545fL9U^nkTv8k|{xgv<9Io=N#n{=PUjX(~s#jVgiCHdc7QJW}XEu=JqYmHQ ziaad^G&$o|b9Y(){wn8q-`uOsGwUaSnr8AEd7FP5{?4TCv8VYmoL){t;0A$0pve9=1_T`>xd;u{ zeOGApuyf!w#H<)web2PAwb+^QYy8a(NuYDxcxDqqXGi`}>#KfPr_;=0Lgm|~GUViO{j3>8hg5Fu&xpX?u6Q_%iGW|8g)YU~!t;x(Eu-B;r zJ@tad2O9X3oV(|g-w6iWz2C~EnPHQoj-q%*b_ld%x!&)+WUpl(n7K)rxtZ>N%wv*0 zcy93=h$;FNf$lZRWr0aCN$U7!WC9;&I}W|u0(fge`#a7GHnOQGVieH|uTd`15QtEDYJXEeEaqLrx@eiW_%Iru;%oqjN-#^y2 zqnBEwJ?>Qf@Cd1-aMNNgdHd_v(fQ4lbOW}{XzGvz-yZ5$UUbrm`~CyEZaBWyLK^a< zgH`R(!M7LkxUVloa@PYGu zoeYWa;McP@uiGE3@JIQ`F)`!ecDrL16@O~r6(wOEX|FtYVzvaxKXQn zsSBc!i?+zbMNL8XWU0YfmDelHSU1YRn2GIY8rbsbmSDC2Q_wGOfB(ZU`;Mwx9RwPI z+m&^&D_*!r43DacN`6~1vS#_HJY2tuQ>H$=AlksZw z?*|o>7L8|`&{pIW`MK#h_lYN1zo^JL8x3v(myGeBxoVM5z3rJv9*}Mz6vG%H1gGVP z=LYkHr#$a&)okq%UBrAg)}p*?xX-Drg{h(1aCdaCd)OoB*d3dVruRMW&&1Lde5}Y+ zo_HEQ1n}<^*Obl^WusQ3q$S|O<$0;@N1MI8bw{746SCz+=$E!8Zzy9MGm@+iBEO=+;T4*11IH96t9? z7md|_ASPK`vqb;b6y{2?i(e}dcBUI~9XxRNP-lLrcOwc0kWU2%3_db40}?&x3c>2C z-;_Q9kfV6tmz#9zYOHFVPj_Evib)z%Y%pF9d{*#B^(vCWz~7HsHQ(v2cRA}Whxn1a z{`Mt;r)I86+r;2N%B=s+Fi_e^eK|AzRd*4i4&q)FCa1JM7EgpM0(5-8({s9Lckzm&O&I;wqlp+$dtPt zGFvJT#86aS&F&vghc#o1fyxFRt(BH)r@2(MR6d`#Q|aLnRmB_2Wz!qIJ--3Yr$&K zsm?FSL%5iIHR&Xo$lUpYS1!bklDX7d@mRYV$Dvide0f<0xo3ZOO*05-X~TS|D%{M% zXlee3k$n*BmPO#i#0N-qO?c4BxG| zciU1UEB|uoZelbnO%GhqHYR$gvaVCK#vYf&%XFD5R<^ClhkCy!s!|mvqoa4&zC+U* z`30z{GeWzpXAC=E4)~N(x)-AfNTsv7Wx`YHo7pP@?>{H;9bIHA&CJi_e6}8_cuuuX zcpe`bx0=r(14ggD@oNzGn(Z4KHbR}hpDCXTSVNgs^j+vLAOPzV>AkDRVZC^w%8VV@ z;W9(#<6XdM+~?ZewTDmtTw>rv_@mD5!9+GES+ecWG4TZK??by=*Svl_R;ko`w3hX? z$=UhWvQO~-*id@kU%Y93dthlz5*OT9A0U$3^QLQ6iK};YV09gNC$BQ7y|J|V;7)D0 zVstDEKv)p#=D7DOW#Oq>$m)*sUgL0SC8zgcDpNR>PjJY?^*8&O1K&q5S2rCOtGXE2 z4X*1M`U_*YVQLsQl160F3lELnhvYH0rYt%aJp^SKeZyl*3rA~ha`WDg8o4z|3|C)V z(7pVet1mD(ymj@9FOlR3?)zR4*{@kDp@Tn=De0CPEXyg@)Lad%yRdBbPh~&^I___D z34wXto3V$@J0g0)&C|we5sJ+cCLX(>YKI8t2K)ke#5oaHGRds zPn-^4nREcb)jf`#y*;ONk`woMq)G;2v%CYxqE6p1ELb^jl~sk3N#0zdDy0sp@ts+i zDXB5FyM?mrHh44qat3w0-JsK6ZL|Z7$3xzsVyNJw!|z8Ud&ghY?H&3v9j`}2t$)q5pOqtJN6ganOr+*!6Jsn+Jh*v@6xa#W z7llY$iNcq%!PIwfWj&=un=-+SZEZ_F1q-hof?V3>urSjGF?t~Ij;{N)WWA&ZCIh9V zLQTn5VTuKoEkU%{jc>Qw3YxtupG-f0FSPVv?^Wm$598dRP9h5&3TXQv9jNje{$*do zyaqNP5_i@;-})Y_UR8!`)HzAi1AB{mM$<(+ij=qoAJqAv`*GFeS4c|!xOP9^1P{+^ zop!^c<71cUpKmQ7xZh>x!*eFPHh01oJe(NWs`hi=p`L41;zLpo4(QJcFhR+d(jb{9 zUXg+4!~3&nvzYl3Trj^-K_wbW1PL8SgEwJBM#48B*_veYm<#uBb=mn<4N}k8XCI?sUUXMd4pq8I*}Y?Rr-~wA;cq9=*?Nd zNAMM%K-{Xkk#cR+*pln+t;fk}t53xTa)NwT2gRA0*{VB^xAv}XTeLPi%jVDb)jC=J zA%ZO7aCnAUz1OtrW#>oZz`e;-%c)@$bleyH!>mo>{a&WrL4(glLEPuhkL6n4y_?7G z9!(2OM4I|Bu{8Sis477V(?u3~V$-bvT^+T)CoyJC;{YDx3-an6y%dcszt3d-Z2T>5 zk`m|eRHt{%IPgSik1EW(jv}P5sHO$9UC~XM#r)13V_DAJ;GC|e=5n$o-t=rStJ`_6 zvhqo5<-s$Ljd?ESmJdA@pU>VO{jHsN0_A+C*YJFvVK0@aHIpbH+0OL$ky>BwU^p)VJgfyME!*h39nO&nx!;EjA2&5$kQ|ZGIcc zr?#%H*m1)zO>RnzfaaORTEK5-6D1BAzf}(z*W6w%6q>Pmh@r2u#$%u&yj3K8QB@?n zZZtmRNv_kte0cCeK(bSnPL|Sv%(_7~yDRX#Hhm49m5#Qceu===FOGeF8#v+{r1*pIeIn=2l8?aOW_{w8reMzaH0x2ko6w&(_Ukq2k5c z0&Ke*$vWA*Ha?yDa-T!a$8R;!SIl;3Z8lByR)pb%$`*P)Xi7@f^#-0#hTDMJJY;vh zSC?(wT0L-%SBXV!@vW65HE2evvrHV}bv=Q!DH-+a5)5aEY+47_exMEy`hv5zK_;6u zJfV$ED=M1tql`a&FPDW`ygf^ed*+)%yww+6X6?@B!U>c{0zuxC;ZiO1XM@8G-V7*8&HljpV8) zN-Unxf!@^aark;QCpc4ytqnx@$yM0gaOvqB70Jj8wuLo(QY&UAw^SpH#PzwHkv-k* zZun3cCS_02^NF5W+I+UUI-->m+KdY0hrVBiYR_?7_W}N1>bD^iM-74-d6QPvq=V1- zh7F`G{HTaz6m-Tg@w0mXzXjD0yvi%Hb?P^1;6v2wbC4o<^0jAJvyht3LUEWFw1e$)68IfazIXUlC6cw0*2G?hVV@zlzUaw9eCWLQ&2NK^LP1wel(bwjW&FsksRn&{V0>Y7S%c2(^rOKzqm-SiROV-!IXld3 zVBD$prm5J;Uv<$SL1#n6X3>uKxOi}~NMwXlNsTQw;O(vrt_vI{WhZm6)p^<;6t@?> z2e#lwG4>P4^ zWm_8|2s9Y(l#4#(i}$z&C#gxnWE#B99AnwI=Q#}L1@t6qksKzJ%Tb0G{ym_fG%`v`GdDu*y z{yqR4L!k{~ibOMG7K7w;PVd-XUK|F=Uv^F{99SNGQvt!>t^1#T558$Lct^VDi>!;h z;5K>$3w8Rvn#94py^*dG=z^TwICvw~5)a2@hip<{T34jWx@ZtO5W#1GWU9M^@Vpu# zZ0;SdrKR^{+}5;#r<30&R@O@M+`mtQ|L;wCQ3%#etCJ%lg6ggLAQ?FIw0L~3CD2#! z<{ORe6XhQ2FSGKrclni@TSVf2b?C$5!1?+0)pSagbkrCFtyU4gnidvJ@O1H7Crzw- zg+&{_rh&9A<#g<19rq<=hV+7=9MlYkOr5I5L%~;=JjW>pIm93ynklk!`N_bf`Zoa# z*HbOy>()rnc3-7SfVaA>coqwReqe7_Ov zu@R5-_WNykKyExOM7ed370)iHgv`gjh{K;mRB14B4?N+-asY1^AbsQig8C0nZIzO$ z;9NlpTYKT`!|PImY&jkZMU~l3_SwKyozau;EZ3T?ItglqkX$Ph;|9^LDfJ-(6Nq0= z7k!WzRYe@qS9rcF1!^UqO7;eq@_VhHim}orRx99Ig1Plg3kMvDiq_o?4U56+?E>$W zt`&Pbu7{$DG{?>S?>luS5IGFrwKwDPZ(sb7*U?pwcHxnwWlvcg`eh*F*Q21OpqTZX zUyD}HKTl1Kd3oUnsOJkCM)b)j(eeUpHv`D6|L>b^yfVG$A_T$-t1Th{aU|vv?iK^t zANZ+vLa^Ow5;9^|1N1p3dhVgbh}uL@|7J#J8gLAIt0ypxs)73kd!*wB_jPi)sxGpq zNODJOij3RyF={MFU87t1*&$w-82+L)0pE|=61C>4%&(lmQC->jeQb|(`M%cyN1z+(c?h^S#Wbhw498_Xhox8fo+;e<)ib$n0BTqP$wVm9lbRj|-6Q7*e5Q`01~tr7_3X3Vuda6SDch-j$BJ-8$Wbuv6*(|5M`J%nSl4 z;QU5GMoxaX{dN&kaD(}x>k_>@o(4-0B8oE-(fiKLvTuBn?F7Kh*=>#U_3qZ$)FYXj z-D4%2>Ym@Ex<~6e(3jXkB`UfDnqM#b28nRBAba7EP5r}bGCqhIY}=`#8fyUq44LOu z(Sfum&zj?9!O(i^n{2q}@L1I&tlAsm*oKi8twCBD|kQFCe zgI3(Nwopzs<_n6!In;(WbenN&rre}>^VXG`1>|Z){QZxFQ1hS?A;8A!F)8t#2Eca8 z`4S+%|1*X)tAJ-ThGu507bo2l`dr1`Ne+{bXKy&kf4x?7>n*tZAd!ez;F0#=X3L`< zh%Ud=M`kW|GH9R!cJ4O_;y}3zBaICHHg4O@y5gIKQP+^%#~a@2ym61rV~a~PxSS9tk-UOH9aP7)1(Rp!v4P-%1h_Mm#u4PrZ6@deLoTU%!Hdu5RIqPHS0lC@m?%Abmr zGrl=OY@McO!?%$nB8&kW0=#k($kNuNjeP=Q>0g3IQqg`y?t~!|ou0@kcpWf3eB;4| z3fdrRHkbIT?eW8=I{#zO0ZoF47$N~2(%Y4h$|EM91x_q+bN+5{mnc^ibYHzz$2rNG zGxG`z-s#u#RA45a;E~Ygbr}R#6@yk>{*d_(s_Dqo> zI_8(Et!{x`eViRq#l56T{VYNIWOEU_HDe)xd322HXRw#~2h?plQYN)ep%y!hD?f?J zZ>=nbEn*>o|LLkv{I^*Lsm5n4U);!fkT1k6EHBchl~RaI8UQc`%$rkl(}i?TSd~JYKRSQJz7{qoL-H_-oF7i%F^ME%y1j+5M3yVK zy6A@3+h@$BEdMZJ9FU)LZSuJK@8!w22zSrtYJ%(G__%Ccf!N8g2FG+bbPfZT@% zf7Rso7vym-sQcAxw`D~@*wn=>qA;;WWs<{i^$rC)1Crud0>)k@=HTp>XhiV67KrIN`B1VC6RlYC(_eN3h4bv{9Im4(w{c?wP0st zegG7X(fPsO$dFtnC%NeW+^c=hL`~x&c>lBa^C!0wDUNP^RRcd`>-n~K$&tG$zs@5e zv7J=v=C^Wr1FoJRT!(KsWq`&j0RB?HAfA`9Z9m%uzBJ?S4GNU!}d)`Oa^ z+f=~a{tBT!<&}85+OX`SRQKE4n9iZV_VXOV5iDtf}+x8Tj4(-SY=^Q$E6=Dku`O6FCoWE{%lYw zkt#+@RHY^EDxXLN6rHZ~(5wprT{D;1R-r@GZKP|WL+*Za*){d4VWi7^z3?EB_J4F?Ctvl z0t1Wjd(w~_eUkZ}{Tz`j9{(<_d^&DAzB&+{NS%bc)YN^1D(xJ_7R4n+T!FFb%IPcv zJ0*OTS`Smh2P^ZN>ozF#DA9q&CteBY$z}+0NEK%;e*4T8Wt0Q{9Pql z+S+5N@X_O~F&8VVPBu`m^Enz($1LdzuW_2)o&2sYidk8)^vY8#nEJ0c{srSk4ou3& z=TYUet!hr~E!0{6cO+}EEbZxKr?NS-E--awf@x&Je9YfM+`<+RxwHGKY=8dk4pud{HUp|?KQB_3#S?{p&BJW*`6pg zJouoYe5j=M-;F{njd=D$`UmKT(hoKJ(tiIb2dWiV6~@z3%UjN1TZeU3gPqsnB!t0_ zC+&X&*6f-E{NbdP=J#0k`bvTUe7KV5fYcCUB|*MuC!UdL(1G|r{-?|StKWovkP_P| zP--oIhe>q>x_IO?Xhgvp60T)#Q?+RyP<2}PCNIPn$|_QkJShC!nJ@; zQYY=8LH|z-(mln{U?v5Z@6T!#;{&VA zWGeBkPe`GAIZjjvGYs`l77vU|yLY$6=r0DF1p#7d6uZGT@*pQfxYZd@fOvZVb-y?# z5HqUod^vDznaFV^{K9NO@OGC2+QC*J+>Z8M9|-S$r5VE#T=(1q`QqyOvtS_!+*TdJ zTju~Nr|03v+)oFT0^7AajH0JrQV|SnPybF!Sohw|lJ>0-GOZt{7cxEp&=ZXjs(cYa zv%&adXkWn=0goVLb)g^9Qs8hneIuibK!e?FFP;VSe^ny;PtEVv2UpS25<~P{1q5SO z32iNP1h>D9$3d6sS?@m)Vgez}#aqLNUJ+?%e9`HQomFfT3-hH$1qu&GS_XQtQ3^{Hm3Oy;3Q20nxp%nsIK6!4*PI?!N##Yp% zS97_cI$qRPf>5UcZM!YA^G>iDL8lg+nbXk8pa5*#3D%Jfa-6h$OSTwyC8kPE0*9JDbpeiPuF<%R+p6=yZJGMo&id59*) z;;C&Cib~C}Zp@G*Ci{@PW)JRnxT;$D@tiORnn80)ek z$#jw84Yy|7q;zR>2+kYZ1;Dd&N`o%v#sqm52NsLTr~wmQWHc|gc(zwL#RLw&cvJMsxJ+~`PYUUDsd>(;F0R#7!%k>&+AqMFe+*>sR-pwjdFot{na zKUWp7LA2lo{;t(bPZcm2JY2DDuBs9ny5lQ$9zLF!(Ve2)ml*zXtGELfO{SQ^HXan) ze0A`!pewXvXQC_YZ1DKyR?(;L+aclX#C-}m?)weOG4U9)s=+`Ob|AaK0g7+VVE9wv z>bWSfPXy+ggDcGS2|wZ(8^x@EFy%hev-y6y7$#dIn=)j0W%JApAs~owar~yn>egEW zgQ*BgW_zN>;UxcMz=i0VUgZ!&L8Y{{7yg4#xrUz4Wo7WiEN)s$qDIVRfi3-Q zsr~?$%yNdT>_mfVr1|A7-0#K3E16UgvsWUmRi7l9m`l!!E|_%pze9@B7q>LGZc2_# zIT5Y|TfCn;0~v~NP8Q#KZpCiz6z3Kc-z2nb8yWjzl84*8wuRP%V;IaAH2Q=o`(WBD zOyU)R3N!f_^vMjzTkS_u_gIsLC(4|axAL3)s@RWEZ`75ACkjHNs4`0brwu~3KQ^a~ zp!x)XEiEKo(}@hFQSmYO1CTfKmklyu6HpcK?K9r{hv}vFS+N@;ke3ic{MRe>xmCFQ zbg4^qV*rWEV!iH~p@n9ti$s-Z>FgwFp9FcFYysJMuY>cCR0+8L1b*(O&N%O<7Fy zx4{>8H+! zaeL^UI?zRgI}B8uK)V0%{PkiRB;iwFu<$X&%5y53hRyhJ3RLI@qx>PZ7VO*SZL&Wo z3p_{1Pc2>2@QcihjyYTjqgOMZq$Y34qx-#LPaFnln`3O!>q!yw=B`)f1)+{F9jnSdkFyUY znpTOmqFJlIWPVmDZcE4ZWZ~V?<+MfGuBvFiXl6-FG>W@TeD$Wfz;X8l1fa_6`df21 zdK9J~q03o|cjVC0_aQD2IiI+Av?&j#f*>7gHs(rPQKq}b#8GmJ$$gLMT&j`qAzN;) z_2mZ4OyuwKi+@Gy470;5qb|$LM*60Yj7PV84q6Zo9{tWmi;M<+z%wm1oJ(EQMx$)~ zIW()TxOMx0M!`#@kV9_;&IKGM8iFo;NEh>)&i7-ZvBGf)3FDh?c*Y>l zW1~ZyS)(sOZmB6Sb=gGNM)~%TMT@&4OTtvnLRa-p*4Q{gYBXwn%vRPn%ybbTt%QJJ zhfeBE5aIV$S9OM8Xb6NAlc=uOM?p%fiqo1#ov<}rRgj<@`Cim ztt-p533P{jS6NQs1pdqhLJVpnQEdW8^(+90obXXS#8-Kl)!WTgI^p`cZ}z#uotMUa z1)R#NFC+b0m~VKVetq8R^A;@fxUWCOqsvwbjg8_E>RR(v8X%9o>n8ucK~%(S0Ikwm zk%jtlPUF$t*X%AOtW`oB_of}NVjBxlium_c+qVVK31?I7*9bMkDQW=9yHrNYk6BFt zhzx)TDMh;T@}ITW4-$Tv(nF-UhX(sohbm>fb7F3qNeKBmRMF&=o~)tq#65})x~jRE z@!qeR)$jKBjhmJ^2-9uWIAh})$MXA(bB{U2azzK0zl-R+-oQq9njL^*3*(_+d@rJ}JGf(RXk& zM%a$05LJYs=O@?2+mo>@ITvm)o#J~WMx$P1CUveawcM`QWN|0w{gQ(5Jr7OY%D)#w zjg(Q^W<{0EU=dw&a0}PXg2N5i`vP#)D(tCs1QiEww=idr#_+3RnL5wyb6> ze&5!S?P03FuUwnzC4SxH1jc-(yXQus0>UTzOyeVR`GZ4&RxXV%mjLBO#e_A`_SA&5 z*Kb&+IZh$uv#RXz33RGAfm89%{&)tj@7WThxUKZV?d&X5IO40kcOUM1`68rL&l z(5pEesD1)fvF~bhWTI~)0}_oYPimqL(09~)Y`RsV`V+szaWFCIL!G`CJc-!8&6gYq zkNA>kKhfa$XT-Y%#i-<^jHf%44mL6^R^etf_9|NzXzx@Siax#caKxP2q_LP8h@};9 zp39z4lOJzc+&CUa(njqzUv(FB-OqUIG4?7u=#TW7 zl;-Dbda++Aq~H8Zi@JcW35<|WjX)6BZ%{|+MY z!nXMCl-Je1{(wxnmw25|EK9;QPst_J%l8u$-k?yNu=_nh?(JpZzG{|(-kw6^L1rSf z@;>=9mTx#RQ^jG&ZRL}A-ltkZmv!TtK|J=#i;z59*k>K_2)98LK(_HE1bBFV8V&!- zF0TJLcJ$v8#s{GZpODy$lSVbZK*Ys64AmLw$t$hvmficFOhE z_aA2#b76*B*#<@F~GzDd}Z_VuUviz z3P>Q0t8TELc&a@$*;q(R1ugjLMxk)gOUiWbLeiB=FDEe#MDx1Sr2+)b7QQJF8<1P@ zRxL0N7~n7sp$Q6D4Qlk4e$2I}{+-GZg({+U3Vt~zbNm+j>paa_ul;cB^+&@i(@0SM z%zkMV#9Gp=zqbGI%X-nguTs>~Qs8-*Gc0`~%gLZ8u>1=Ro+M=h`StTK?}TW9l<{*x zf#1#kM56tts4g2$Zy9r2anS$Zj*+d;4jfb)W0WLo`1L|sB^YEr$k20HXIcc=sW2%YYwzzLHnYU zpf?2O9I`o9VCUZ4WeUPNp$#Hy|d1H{TqDHRk>7ClXH-9#? z_urn(GYdHEeSKT)ftKRqp{#L2K7fCf)F0>9-HM>h+WGTDeT3C<{zAf~!u|FHBYnYB zjRgyE=Ca?qx3O-`*HOfS0*|`%#jM$>j+yHm`jXqB-U8dFbQ1II+(=RSOlF2{(0Oby zD>g%wP3~JXvqFH$$@+`!v>ycepz3`(cw?o3>K?seTcp556VgvCVTE)_>H#QAKKB6&BGum=FgwjS15 z6vH592a<%;R?K&iiQi6FUMS^i(=YHy9nRg=jBEg5T zCp|E5cYTc1wu|U*5=#yjI-?cm@D0*g*GAOEu#SR zZt=;^g*tNK5dDbYHXyJdEuR&Jp_OUN5%z?-eva|XIZ3;hRUBNMQxS!Y)N)HbU-r@O zzu1X8u{{jx@d23K_R;xan?PG%2i9exv(1vY3MI<3|H9VsF>%ps9=>q_u(GBOxe?B? z5VtwX7}^8^9nh^LN0*^wx5&;)5R~hSAwhqAZI7hth;EnZvj=EhTnDaNd)D6))S!70 zc)p)cTsuygp9ceZj~dD@uq7+!B(0-=TW$yn4#&5Tw(nbR(CQs#6wu_ii_Y4+(7qT>x%$KnV+Lj8GQ6}xmP?{ z4`439osv3<{K|u=65KkLNDunObmRgRv@1o?Y*~jzu*|ZDUO6A z3ubar-O%qx7a17!pxp{n(o35@?s=US)u>UsHLTWrtN&A}ZuirOIOHBvu^P?0`NOmK z*p;bw96-q(xK>h|R<-v!2UDgW`$jCNYZFggm+~raE!!tbs83vEv&H%9EU7w`R6a8D z!r<6tH+dB@X25%V*!e8;8j!NaBrxEhvfNN(AMx0YTJ2*~KmOG2hrJSwndDI-&s4u9Ayo z*{if*Btm)nMTETxii~-iS@5;CtQyayQuY4a4aSM2tjxCIM<)!5Ucsu%PY^sBXKsQ8 zZXSVBR#uBm-hIbM%jodSofd{}ZwvnvplXFK6p};BYBZ~7Q2+{zNZ-SMT0T4P?;olZ zhbWDKJxNXv<(Lb#4U`FQzlBNO{k`(RMit3;&eS5R3b|Sb@ZG!D#B;yLke z$1eLhajL79E^Jny!+Vqdx$_PyD=VYBC|t{KA(U1ON^SN{dn{Lc)S}?n#ja%UDm)BD z%P(>fFa+e`n4b$yn-68!h+MB6K6q@=wOH7(b!q3?Jg<~Zbiphx03IgsJ#Lz9`9xU$2MFVuI{4(DqF(hXk=}) zSPdH!tqT+2Isf0w8Zb*XA0YuW_~VOY*<**|iFA#X;xRwQguZYPtI;b3<1*zf!-8#7 z$GiuktB{K()Q_z2^#Fhi=KXcLa%`9|^QH2)?Ar|&<_gz?JV)H!&3MXjRI#12+m?yY z$FC>ikkqw$1;?zw833qn=wP!&&^X|v#cN^I`AW?QqU4vsWB}HS8YSd^Yo7;NXVPs80mTP9p8TbdkgKg%9+60I3}V%DvlT2(Eu zB2FbdGd$s~0CkJq?8Qh=BjH=ET;H-GYM67uht2ZoKw!!5r^*b-%C%-cGvEGW(zVlI zQ9n5!%@@cXl#c0L?|zS;xyN3suV0ui+;3FwpeT?tOE1&D$~B9!$RfwfUYty63n7S; zv@o-foRFmu*3LnpvK7Sj-^eEe$z4blFJbfM7fCO|3MP239o38@5QJ_^de+it3tja- zpxb0ur1hWr9ib|inE;^6+{r>cE8eT0chJ61H(Qv(O!OJpM4+W^T{B=mob?Z9#Z*DzBa!!hkf_6sq^h9%!1_(ipH9zT zcBsGmdv(H#(~Y53^AgrWb^{wuPHVO#b=Y~2M6RNl5Keh{v_GDd)O z&=to0WLqwiekiLX@^I^n&8heU=7BgsRzqz}4Jj@N)DE(x^d9snkvK9>!;o6)EyQ^W z%Cfki_T&2zPm7wGVjCM9t@|pE&CDLbOp>$5W;0NUkJD574n0c#s)zF!>K-wrvy>K>=wgk?!uH6lUmdkPhh{q(Kp-8-@lM8kCZjP-%v62$7Z^8iwwDgTLo} zo^O5cyS}y8-usU||FF34nfp4gxUcg(jx#QC+U;Ci8WlpL>PZ`W#+{J+Xp1#5&eqe> z@<@3hiXYW4dZlRxFD@Oi=|e+p!w`P{G06(xlX#pi^A*m_sTYI(R&JSt<=!!;kjqLO zhWXzL(0F`DHubsaG^0Gxrnz3RHzDBI;Q6vADQ6Y@670?gyZzzu}rKk?8DfKd&lJ zxhD&3nsYx1C&{j?97f41cK!$nUfMAbyT|o`t@*}{ecl=yGz{=M=Xd+g#gy7c2+uS* z5jR(yE0Zx8Tn^b+|7wXh_L_@XG<`8q6*l8{!f>KB?B?3vJ1Xd7G26s<> z8f8L%Ms4zO$?vj%X}>FJw944KoP%PuKe_$DzWo4ETC9^bE48lEEW;J%+k5rC=A6N2 zZd3rBrfhGVPim~OnKtEQ|I`GE?!b5-w1UboB*0QHw@U3pZE7ffG8}vZX=&1B1{)bQ z@4C0GDGLl2M)mE#b{)xAJU7-`vA(@MH;2=s8jjilcbe$C0TdG1>-+zuJn-WEA-<8R z84&};nuX?3Dq9cqQg$dPTi<-nGw1w4P0~%_0#xn*WmY>*)^-&-u{G}vh-&Ft$JKpS znNeIBtu!4O?b%k{SNWMMdjVC;o-G+*qAerU(6TnnEhao#^obv|ei&%;Ots*Ab_#(& zEZu!bqyYM~hsJ5u-CMb+c)qv&JK+rp)#c2!C1qI6S0Sy}@SgZF6}R=DvD>Ycl^Z*i zNrrt4UW0d3pR$Xb>z#ewZV|QL*!PqAe2Hh944F~-X7MdMzir_bGF22M1jRl05}IaZ z&e;~^e*G5ESu`K-+m0%FMRi5j*; z8taE~fZtKW(ed*+X7>3aF<0`N@%Q;}B@;fFq!+4Y*ZNW2*`dFMyk&ZSZmIN(^OVS5T)*-DXp)ObYr(V*$SMI7$A98=)k)_^YLZCyAEBE!9qi=b|zd>ODAJduJ z$XmeQZ%y~$cYwcdyb*+4AfFZS>zm7rJ_A`eSzbtFcH*P!n++kC8DGYOCcl}`fUdvL z4baJe;20R(&TmnD;VAG@p^Z$gj`z(y;>Vf#_?Z%G8>o+RvkAmFYwJ;JAvQw8#H;y5 z5HjE^rkrtMsGY#6?X4}?(q}X^rqN0eVJ0WdLveR4=&6q{V-1I$oQfyj)t#?TPy7pG zsoZaVRR;XZg$$NC@RX;{Dooq|RXxtR$M-N5z3^!5nT=t(iC;9qi~*bq;%2U8qMU-r z87CT1v$cq%>uxSTO%26ugYyZGa6Rdc4PXJSuB`~}jCnJHq#iYbirHR}oE8faz!W7w zaKhEqoGq0aq7nS90*T?QOdAs}k5w^!L1SH$ya*8JYtfiii*CkxWSCrbk&u#jb2HKE z(1C3H+IC!3QpVU=+wHa$(IqswtV?x@$5GlT`DW76a>=J_A(RB+!+gxkZQq~1a3=S$ z9QS4d_4oJlR3fP=NT^_O6_4MRd9}AazEi^`8x}3Lg@5PQqy?qyNDHZjEi)zlJC3z6 zUyC0+wb2|F?RCMf(=^iFRkkK~wd+U5b;z69~}=UFn9Sju4IY8 z(}B)CvN()be7wesBIp>@$r!?9CD{*APt*xv)D6@!#-xMW>#Ol@<}-x31C<*#Z-Jwo6`p`MI>jr`h0YdemfgMdb+q%Zd_pn}ZHJu?IKs0TUf@pQ{q-zB^sA>&ZZ z{Oq{PvXx1~-TvH7m>-UMDk_3~^Za&X%vxl&a(JTiN7~o8*8~Kqk6xGhw&&B;plsx^ zBF+$a97O)H)TTv%ysGodHq9$?j&Gt%{KYd%nj0Tstp1UUR+YmA>bv`KDJ7i&ukW++ z^Y2vfere>icQzSXh03xkDgG6MY)J!xWQM9k?)3f0C@_wiWu?v|$=)RW9A-nDohDo!z~S@qFgE4JPB`z20Se zvRNQwaC#_PecJ5}dQvafzrvLYD;S4KZm_s$l>U?jlkQvlm#0Z=hNZ|QhDYCBo^%zMz7 z|1Oil9iXDcN#)*Kr!^`R0aO$E{6P!`upNee_jUIg4{z%U{3NRI-88ndvlAFL=cy*| z1R!W42?p%BL)(I_s#m}P;&u{Zs?@a=sD1gI)g{^flQ{GxHw13hpq|=#_~01`x9Lu#5aZq%ktD3F&c32= zf7f~~1uVO=>zfYD9Q2Zq19Uzo^{0n%Vk-wdui1(a1;XTUxe@maBpMH~&Hx#Z_h^5~fUz4ZI9hbB>XFl#^z$xQt3PKz81nO*S%&eG zJLD}{DVm=|ARI<``JEOG3U`qbc6LzBgDL{`8HTOcjLzbo8ZjLv3(Ft6FE1C@IIKf&cSk;j~;t6ORLI}W2)8b6|{0kp~tAA<=!Zi=d1~s5hF##Vip%McK z$1I8ZK-BUwoa$v!(Z|q?OS$vYisW8w?4CJIgt7Fd6DyIG;wEQR@+$(QZ6T{MP?U=H zWkdMW1_MG9-Ax>zxJ6+_wbn0Z68Ol8nOnFI0_;n<^d7F1gDmGBo$Or{P;yNY)iKFy ze#@%Z@Tr&0<9N}VQO!AKIwI^qbUxS3)$kQ-x{?ACfB52Ow{X<`b#SvH0n^4VE>GvZ z>iWhG;TI!w#;m;@jI*Jx=H?knx1O%KxX!}V6vM*;%^iYex|o>tnCR_Xjm#~rK0y?E z;?s`B6EtV>qq#W>^$07?p zMN)noMJ`=s2V=1CCJl5?v%m`m4&F2Z8d-H8WY}>cSldU6Cx^94pndO-ig#K4ko?<2 zjE2n*8Bb^vI3;TnJ63uf7Ttu@)b!RV=PPgedDaXvc)Yyh-6J^-`Ly6 zcml^!aytCa-sgV&0onYngZ?#^pvtuZne0(lSE-r#2&#QngDT>GC14iA@}kHotjiF} zpZ_X6)n86Q&JKxW(W|qJM@80ZAx$EIhWcXf*}nRDcLvdw{9< zelj*($D5Kiz5YYYMQ2rNd>Joxdl~*g8mwSw=?m(2!$6h6g5Kj@b(W*j5t_xK%!!xH zyyTi{8;`BP>Af9CQb2)yNr?FYHax(?$d%apCEv?Vz653v6CWuR%>&9+W_OP#Ozr8q zvoz{uZ(xlJEAz!M4iOD_#mQyRDuPVGXfzRf!P4mN1#bkxuBgq>#yr#xR@4;FTT{KP z!W^5}X%NX!)1g&6A`@cJNC;OWn|2Ssi+mwfr7|8i;2Ij;fP4hD4lt!cve2gwD<3@N zs`;QKxnkOENY3h6qY1u(%yOdJaO`^I)U*thAP^tIFOPG0NkZFw71{+lWXKK@lWFvV zSn*_KB5fjx9{Xo{e{pT}^XP+XS_)w$lVs9kzdzm)K*q+fHsE?2M@suYd;Qrv_0z|q zAo2-igqJOM!~phKPai}U^(`*nZ?Hpa<)Mb`BtEe|L1IIY3>jV2k$O#H3;{aTldVur z2Tu5jkJf@gieE;iV{p2@(3@*eFBZ1f(6QSrF)I719U(_ZH!^PzXPm_^F)k_7*O(?s z$c)?)fdrwR(dZXCfJ3tHzelBz_dka&W3CF)F%i%(NvdmW$t ze(v|V+*6~$u(Kr3hnfqEVT^D#*id_&-WsTF)LSmdKp@kcr4Y@kt>L=?qLZ=+Rcbs> zL8T=Be1v5AR1}l_3hkJ=2mb64&lN>>uukWNs)--svUU??WZVLz!MXX1P3$LO%AhI71QABF_ z!-_P!51%?5By=s1I$~)yx4p=EE((FuxFKp2O9qd^?goc8usnXGNuMW3O`1q?mIU8i zteWf@H|6k%)Q8Uew&egV`25JS%Z`W}c}h7G>Ci6C*r*N7Z(rlt9qCbk%A}11q|*6! zV#PHs-M5hjb-vRmQBXqI^5?*Q!%_s53l*q183YZ?hi3R7z0j%HSQ3L?8K~E`sRTI0 z=r61G90;nS1z@p8r#It5a&NYi9p`}my;u0+rO^H;2a}DX$O1Erj6nx%Q`b@BZ z2e26!l+3&tlHA)F8F^RHpCKWG>Di6(-T7>E=2jq+C0>br?)eA~GI?x7QOl@aBY`*N z9Lwj-(>nzH@V(`-0(vA_VNMH;o#>ARaL)b9R26L+PTBS za1DC>4Gm=dEePQb6dWu5l2)g2hw3E@3{@S7A}brEYWs{J*+h(W<>7=a5gyi4_EY*( z?q6e4h(!tb(#YqrvY~0sZeo)!BaX&pisDXkau3C==s-<*(fMqexnzLeVxgUT{9a0- z{gYg>Br#GhZ<%{W_L^Gpg|}t-j3IsAnHf}slmeL3TrSh_jO{N*4$U; zY_^55=N9DQ2`G81T4=rwJ8}0IiliVIl2W|^#C$Sv6#q+3Bjrp+8wV)(7auR^-EMdo z5Bb`9Zcbcr?H$#hsL(YN#(p4$SbHIdPF9CyQ#>vN% zSj7rJt%jf#TXE~cAjryRBc|@%h4H-QkE-ahs<~hk>ye;VAnxuPHAG;c&7;y9s)lhxd|81JR*4-^>cm6sNL9N^k>&4F<^*c2UZ4 z+jYuV-`9FRfDvwTJmIt0IS-{2AAS+Iwvjt96R<{sD*T@FmVaLnDPM>A;4hug6sH2_ zH!?CB;d_$P@(i`gj&AIiW)~{8*>pIkMn$Z`Is`&W`Y|A}ip=_cm18*z)%RN4W z-}xr?Z528MP)R7DLM#SGtdL5!1jnrXkn8!etJ{df$AK+ed1q@(95g28p^Qz%S42=n zo@(N-ifIQS@wI&rD_ZM3t8(q+5%t`{06uOKW8%jbB<%m9cV=Yq%%?iqLunF06%7)zxW%zqeSgr2KMG>y|J z+$s-gdK(KdKHT_Sc?a0xgA?HPXsD89IzJdOscA3=4_%!y{BF;d7Zk*bt-q+u zs8rU=%gVt)r~52Ek(AaNLPnfi@HBTnxJO6r`8{nMAg1)r^{bT@2DHAjveb08^|kUu zT=zMY-5siZc=f`<8HY*oL{46OEk%oVKtde}u+wdiUj!MwypGPdr9%{e+ zW*E2hZ4h#dK@vja_UnXYgG>^lb^Td$7e6ey=3SXT!dX?NjH^d&Bkk9C6k-}>px7UlAwx$t14FlZG2G!mD{X#A{$D zDrF&an8(i}WVdb(l;+4BMT1D|0J>NKhA5nK_P_Zv(eNb#}OPtS20vd zaB_Z8N2oQm>>nx3GL{mFSw>8Mu{_BMc7;f#ZL?4y=NLT1TUW3{2X0Ga$?|v;f(ujp zKtC2f#X5J^eo%sg%-j;m6B3J6*!&JPat&{3*H0?1@FipE>&T@YRl;dg6F#Ga!w>Yd z)V@7Y?JQ*||H!}eB%i4c{>6TbGXWK;QDb8f*01bH^#Y_}#5ifFG5l&Vf<;2FaDWWi z8XwP4-ABdm1|hf4CD>YtCrCBX(U4+5;3{)~ER?0(NHqK77}p*M#(f4y&E~XV8NFG9 z?KCiyNVF6dO;SaUrPM0Rv*^*$TlcuxIbdnLw4macJ0$sS)7`BaIJobqpduZm;09|1 zOQsv5&pHIN<069juK>)`7WiiMpScFiiD-WC1@4K=`B&Wlm3tl9BTkKiD17JN@0Ti< zNCQ8oJ+h~m(y|LD&^IHY+6$JHXOxmCiNuno85dUwr9_@k}~3Px*h{G@TCMdp>I5~*?0X+dJg zaE)f={kjVC@Fk`%s0Zr%cIpoK*b5onQAVJazI zC9&cALniIAz@cBMZPp_RX<#J2=5dM$E02PJSPoZl7=*erNItGSlmR(N(ySTxN&DV_80uS@Fo=-UxCv|I$w(gACnHe^!Tc-Gbp z7PdgUFi~MF#YV3y+R6xDoImGHwsB_D?rq{NIRYTmtg@8`?;|W;#qh_^lE1zUns0KV zPz1kIj*6J3NZibdq@f|!mO2HC6FYfJYki6uBxCeSxc+YcNAL zJRzg~fD)h8eKns+n$^yY865wzKtE2E9+HIeQbq{$ zwCB?hyxgif`$6OqdiVsM%XExgsH?QIIkM)ikt1BjYl+zYQyX4OLFnr%uBb`l4K|TF zNJ1No2QbOL_0#Y>HZUshr--g$A`tEJV0+8VTpA?{yX*ET+(D~6c`p(bFHjO~E_-KG zH>`yuQR8{Wk=D+WMrLL@4Ob)*+|Koy`48-3MEzrhE{8|r_|yowU~3Bwve+#?lcDUR zpN9W<1rV>o0dI-9)LZS|Iej&3+LztgydwMwzFoaJPkz|DN zbV3gzT!Ax!6RUCOfOJa@Ym{BRJg~m2&CPcHTo7HgbH_^7$OB6 z3*z``brtOlA_?W>_Cx`bk<#|pKN|HDgsFv0x4M>K*jnbPZSMZ?ZK{UvkU4)nw=~f#K5-XX3 zOVKAhAi!@EBhe;f|1oeD26K)kAL;trbn*YYbnC41X@NA zF9@fr4HMaz-BtAmtQQK?hc+Q(xzY%|aFT?tj_tzMnVmsSUpLQU3^O3u&X=r`Dh$`&^gWPb~e!wApyQ+a_1ySK`rP5rASjoVcxSp zBXKbbHLjqMXZewXyF)2Wy6xqRwdUzXY)W$JMK_ATnV8DDq95Y# zH;O>mQJ|6fs=lJZCZsxp$iRo^Rl+rxFD)oy*rq>MIpmE>5BN~uYs0s5{wdYz&x6ns zYb1QB5mB3faALB4SHeWaUW%0-_l~uPp#1Ef5v@WHQ` zN;Y3TK%w*vOqJ!q>LgJ@4neZor$-vs3nm*CTizW1yM^wMQedDgIuZ0CnBN(A*V^J< z{bLNY6&?XWo$??RneBd-S|)`zWC!4p5f5&OnTXu?G8SSCd2}GO;SWvS@RW*Re=Yoo z#3HL|o39hI8k7k{&6V{*1|FHWVVE_y#y?hMtiALI?lOQbW&y`bpF}l-Is{AcHu&Hi zr(uOIqTUqb=DrSzC=^e)TJvgg$vifNHjEsf+}UP`@D+r(rZd5^XY*0~bp1dNMQVpv z)$^oZr%~r48?&vFoFD^?yJZC=cD8o$ic-ps{+0QKl{rpp6l8?X1`8vbn!Xl&zFs!w zS|dW>g?VMiPv!4nJn_qZT*Vk4A5@96|!v|B%o7A=OsAS0$Lc?o{oBEd~At! zBB#p!7`BTKGFO~wOK4Hn2@^mn3DcGS@`<#3@jMnaSO>sC#V8m>tueQ0L;0&)}2SHCdesTBQ$7^ZBQLO0X-e?-Z7iGGGR5$?-a86Nj6= zVvsN&931F}11Ob1D|2Y~oqWNLwc-m^skmpWU|rcSX|=PJ8&j0vI4XSNkb| z4zaU-kJKz<%O#i1^H`Z2S87up`p`1-}-hpk6a8`G<=l*;a++<%4K)AdBr9 znR(NZ!hxfSM(D>L{)Kg)(Dm>(_ZIISg|T7=CZh{L65z8K)rFsF*@FyfL+GW-;r^?= zlxWnBSb4t8;NEFUc5Sbg+mpXo6D?C91z%l{(2&hDA&3Usy0~yNii|&qzW*dUviYI$&(-_}&4X>`@8*dUJg9vL7pRh3fY8Y;}dy}C6Rgc+UgxXD!`aq#- zai0P|Q_iGSY!FGgHTepv^2)r`H*HtUwolvzut;C-UoKPPKm=Ka|} z#8dMukI$HyS>@2T1)j#PmZ8FwDdPTNAWQrqFb)g*tHbDKMq-I8TXZ%^d3(e$0ikUq z5>E-p{Oz{Y+2JOTvcb^kz5=*b7o&iJ9Ya8C8tCz;^bxm1&55Q_c{5l>Sxd&v;F!Ms z0dJ#jd>;&ey+Qte`M&ZMX(sBu?Nt~;fN9~z3A(&*_aK;kF9mwy{+3Gg^>gU8YblGD zIMYR#J$c02cra;^TQw2IFC>H*kOqiAMTnDi;v~(JoEepBrOL)`99lTfKyq?&d~sFynLw(l zkRSkrfC!d*H{p-B@u_0ne;B7H5~S<)L=GCW$3!65ikh?(6=_B>htHdGZWfovM{)&QcF=Uo-mtMfb?3CN=1tX%>8&6;zEEWj9BuBpD(`0z&c5o15ka8 zMwf=>V`WBnnG!}P8nRb>{t7kw(mPSl3f;dj(n-h8G3N>UfUwk0qh#6 za1mKyM+Lkup3z|}Hw!PFsywCL#L?34wbC{&Zetqcd+X!7VI0|32s`^gE5SV=$ptdL5k?y3VTP3+>%}8vexU zbLjv3-jzI+MeX_`@!twFr#|S_r6wCu5!T+~Uldwhw*M)m>3@1gysWZjzk7owhFLob zE5bYIIf<5V@$R+JpnsJxl)I5WY+pR9(yGTPwn^%usUj}6XsvW8$SaM!U1?8?ws`70>xK7e&A^J%|BC9^(G5qC_=kfw#PEDJUa#Ly;^{ttN~0`x08X!5Ig~#^O(AY zksPg_zwwZ+Ge_d_*I!LaI%--ka5l#`WrqL)3G*L9z;~|*|?wZLR+45kOXY))QupR)43ea4?p5ChC zp}4YX2R9hNRD~M=N>TmYJ;CH!^j&^9gohDCO<}c>=Bf zFP#D0qr676PIVOj-2fRtH#!Ny5*E}0TJSbsch;p4bSfPScJ?lFV?p1HDOrEmUAs|n zWjN8GCPn1vunLWv4l|1xHiE4WR$2)VUNC3xk zxDCD1oLn$%TzhTr-aM(Kd8HpI{)!0Km#&r1|ES{|Z)gfJE~PNWH9^+v3mD9Yo0FvJ zv+nl*TJoNPzrXnZ-Xx$w{@F{PfdCEk>K+H^Iub0F%`5Ad`)k%`pxb~hY*_f2BMsg8 z^P++AIwU7Zk|IR1j*aU4&D~a}zl6*`N-qkv`0yXyc^}O5@Wy7ibN@yqXFXaDLb*`< zruj7W1F#Klet_@(0(#5_E4%r}{YHSl!EJvP{vOFSO%B{lse2B+QJpsdZ#R!y=D6YP zzx)6q(QSYNQh><1GXZCgCjkjqhB|+j{I}a3|1GEbeQ9lN?Js4CQSp4d#b4B@5gN8N z)d0lOc`pEkFrdH#tAUh_7nipRZUD!vYgITrJ*^BZYq=98LPEm*ow>H^;5IWr!WDVC zf3c%8?D#lwV+%RYQCNP{i}jm8T;a`DwRG+I*lsy)iC?(%l zgA}7I8s1HCpnD<4`uS|dSNa4_AEl55B_H}0+5VK|&GU-Z$bR0lPGq0V!u{)cpbs4& zWCk7nxXoJaz0d_Q=jCF}?d`>8CGplU2;U@1gF4dUXhW(T8l=yYwvK?)X;rK$eG>4G zSadve>kSA8-F-_68V8gT{Wvj4efq{$2n7TonujcL6=NiX5+Pg}u`6GaOPb*O3u*D8 z$>9)jLFZRhf4-1LoRO$Y{{~4qgWmx@xuO;U0?A~n$>BM-2F5Uz9kp|7wW{;SKyU=$ zPKhl@2MBy)jjF(7 z+&wU6&HOY*6$W1bTxsKQg&3CdOjhOFCwll)G!G&0tPOx5ZQ|nuNsu*Ho)AD}Yo~>e z>dP;HVq^@V18TYP8Tn<5Yc_5@+oY3zGMs?!ym(1JhDz_|@Xag9Y=d=4j450AE%4Eb| zIBnHvSMv7lgTvz|56to5^hm7UN>=*xLh;w1Q%B&01wQFdhi~t?dvr1MJ;6(#RMs|7 z>llQ;h^hHFO?V|j41;OvyW%H>kIC?pf5a9ac>jLhKDDtGA6X1-{ItI48}4p}d$Fge z3*%5aAn0e09ZraYtshIMMZ6iWsF}YwMlieu zOVCVWk~0>0OQHeM_KQ(5D~>wXl))YG58rfhODskk#zYRKOx*Bn=!yH-_uuPBJ<){&2$t&P<8r+G)uUMr0^Fo|u+-8Lp?%F5c13!ldI$ZRD&D;W(L`>{-`Z#ah)yhEmFqLAjoYF?ePGcg~{FDtvDy?m1;)N23?75Vd zcD&|PVe_==YY|3mqD3(pY>nDrH2~xHyfjg5NqNMKtUSvl!VzBb57*a+lNBL?rL- zo|DZ^xclllWq55uEc`96^$7Y&+uFuEPwXhYeUCil$dI z5`HK8s#WtJ+cIzP(B85ldJNaJw~Nu8$xT_iV~%!oEc{@Q_59#z!UGXY{R`5-;0#Iz z*4N!(Gqw+il8-{sW~%we#-VAC3AMRqxn>w^x{8#-BJdrVReuvXR_iPEDu8=6Id8Eb zSx7YIb*uD@xd!SKY>RiQH9zWvLX@EV>fvCiMb?$mD2C=DlPIg}kdg#gQRHhK;SIF? z91)VCKM_txuQnt7K<{~|iEk-Qy*azpS>#!JE}PxP!3?K(77y04pL;uN2|b_pDyw$p zcojfqrl2D4t%H5Bi#ToK({`UF?OaSzbz)unv^D@w!N17I-(Ky!1u&I!Xnsy=n%fS-*ym7$n$6b=hg-{6e; zDIJ6K(;jXH5M+^Xp^%|>a~Y+=a{_6ZUMqSq ztH?#A0x>|!!_`7#NHW`Zxnr7-MRvV9VRKpmK`7LEzi*hvFWbbPAfS3|w`AP>=$dvYTu3dqY(}xb^`IVUyUR17T3; zu?9mKmHRp`!W}u?bShkk)spb1tE3{Llh+>>sKcI+oifWb3hrH-7&&`qC9322z ztLiYWX5=gsVUY&X(ggjb<9;Hp8rkJV8o?moE&#oD)>?;_#=d<9X-tg}BckcJnn~MkhYHBJ)_$5jB zFgJ8~Q>Yke%O=s8u>;$XH!se z`dAwI4)0>gTEjb;k?OQRjmsx&j*g4P|EMEm<|j^H@A`z^?bct1UBm>B+&3alB{*1n zjgF6v6=Qh;&z4YZ7*S{Q$bK`c8qm3t`+Ap8Q(Xkc$o0NG z>VqhwS@mHt5y2xp>m7rzLE_0Z7NRiOT#eBlU#Q`0Q4tE>vtx|9NvhdgJ|vAv3`5y5 z@2Hm=M{^^nGm7upcp1M2o^<^;%vRCeU$wJn*v*`GAa%F0^(_$*;(v(p9hw1h&qvfp25(X9P)EUvcK zXU={8n>0aD-c0{|&nA9?%uyiV{`;hnk~4GK%RB>Gg%$!J9wr4=M$lz}Ue9aJ(UGv# zX3ic!%gsfu$aWhQ8w*u3n>2!=`WJk>`Kiv1wqqiqvqS^hC%1-2`8t_8-AWvNZj-NZzz`dnD zjt5NI5N!+IIx6JZkFMcOYZ5TsT1%Xqpap?)GjwC7WoZe#H(a4gWNHM|A(7*!Zerrhat*fR8k7LE zb@gw1_4Z#c`AzU3H=7NzviA-KP$^`uI_rz(EhIj`Q*~2?;8MZgVdC`)xB{^Xr03(p z=M6@ye=zBf#pVB6(17jzrYX)A%w+N}UhDs^k)Fx^Uy%{O!@PJ?0MgLWG^E1qA=~4> zbe~M$J>*=uUgK@x{_}yi*D;;f87&XNm^U5IP5wK%<^S=c{{JogzX!sS2E@U^ z;r8t>h)Vcw_?XJ+&P}!mk3F35(R~(5Tgc&y`O*6}F}S4fx$Tb-UD z?oQYK;i1YJ5im6v%lE}p*F}5uyAiKXjXTNegX%#M!UyPiXl z2ZO`cxk!K#rn*tW;rfJBIAeUgytH#5pq>|iCI9nFpA2cQqlSQw<=w&ISGy^;zsWus z9weDsU|^6Q$%9{L{df2O`)k7lR2M1ZK#j%Q;~PQ0T$UQ|__>$9y_V|RM%!MszSt}B z*Z0|yci{LIwnq&&`>c$3sGrzkG6v$1XGUeBGny2Kp<4}(M&FoGSVG(ip-ULh`S|pl->2VtIaNh_btv%f;b}dyltB zk7CYxE|vn^ue>R}#6ETQTqg?xyJ?00+2K8k9{CUd$Tc@>>=iR3$)~{dbz9@3b%w#| zmWKV6I7rkbdjNN)P_kdT-egL0i|Hu&tp8%g_0MhvIn#A?7T`<)0y(3W@~+z5u0R(( z+l6K8N1ykGzb%*vsHE;B1kNaC2Q#5;x~O=@V>I0d#j*FNb2X7?P@ku57YhMyfeo`$ zfq%PG1<-@QdgOALszcra)z=M4tUG0){++^?Q8IfeY*@Ykf!)Wca4^gj`LiJF8PQ5clztrWiLnyUn_bWNhZ6?zt54vRvMhm1f3jj}jYM-0@cRV#vMr2U(N=zD56wfpYRLa9g_(2vI1y8^0YUjO>p)eK& zCwpAluw8WNwkogVQWt1Ta`*aujaQNBG9Qz@4>z5@D*9eQL)PATu1a!EfW=h!@qU(jGFZ|<h}7b-w(2k#&{b1qUSE%S{ts!aK)bLELZ~6F<_P% z{|U=v@+oa%Sv}~vcm`o>`gL-jv?)ExpUxc3!J25IdlspRpxWt?_pWIjW1dx9j{s+u z`d4m~a`?mz;4uC2cKoI)DY(Y3dA!g+Vqc~^%kcaAM#?F z$dm9xCU{A}Bz@tU28}wQ6sm{W!;Rm>4FcCBL<|_+6oEC|3b`V=hzR+`wA8%sTQhe| z8q(FV%Y1QsWdt@k@&9^$S=gcQ;Hr`{%|)5>zZEMBWteMx^-9E*(_o){)LT_u*O|-1 zP*@hnS7&(8WJ>yu%t)b{UtrDx<);3wh5lvIyA>@eTX5l#R%Xdn7hAVy**nm{NzZ}^ zLw--)slN6YZg%5#gXYN3kLXvrP=`ffffp32)AuzXfF?o3Qva<8xl9#~ghMVN>w z9WGN;H=JN!%=MFwdR=UAJH{ZPXdN0f8GuUgJkch@JR_upN0T3v<1{M{r2Brsk62eq*hRX2*Mp4-`7W8<_L$?<2k6ABIr>d^_N~xa$2puh;E9?%0OoB#n}-;UV=Pos6SnZl=9zN z-709?>y5FuKcD081AGBPRN)sPrlN~OY0%XPT_ZPV{aGmI|7L>yFN3-AzP47-=j!5U zsS0OXUEjv#zc#5vthTnc{hmt3s>#g#bFSoJ$;%@1f6T|fk8n4J?)%qk8n%9jIT2fV zX$0(PriV|+$l|t<@7}!|86K9Nb4dZ6%(AjSu5Ser5308B+_~e%{;89Na9__&JWdY$ zYnCP({PGEEcd=#9xX^(H`=>eUDDLoJ)_^-hYVh){D|)G-Y2<@?>90 zM7d-d=zIdD;_e;j8~{ReONx=|HOop?hDsO_yHAB4+ofiI=t`wnnbwnF941q2VI0@} zO&Fhwk2I5?^NAM~Sh$6!I7=bJL}lap7Vh3{kZXW@rW_`FG}j6$@H(VX@zF)*qRJnC`ufeUs|Na&0u>`wFQ?OOiRegFZ@L;9v)&6^Qb{bK*J^e8R`g?jMw&rYAhDzx)mx%^EXU^FMl&yf+{W(5>aj=-%m zE8*os&jUhmhuJn?MKh;Xq&f5(Qne^ax0%BUw)b=+AE=4JU6Ss%R}v7FF$moTYoi{(`e(CxME?`n3)hF(S8PB6u$ zuId9EAOe3wkE^B|6lHUFTPT$t^udw=pLpJaB-5*Te7D{`cl5-N*Ud`qaI7kjPJuB= zjC{e{JLN;j$R%aKgx!#Ux8*;pN#BK^j}~NDsGTLlrJqkoTV~B@48*r#F!D7YnQ+iv z@Mo~ol1mH2EB!_6y@vHEOou2clesT<7+!G<>Li*0NmlshhDinsu}Eb$sLQuu)=mjJ~8ke zF)Vu|{;UaAgF>6MU5v{ARnxV{HF0HOw4yx3s4YZ<1Xro}K%onjS4dO{Y+5C)@)AQH zB2dH%1U4lIj8aJ2XhB7VU;vE*E+Wq&YZDSBV5AAr$PbN0NI@ZFNeKinJd(`Lxa%MD z-`sodxifd}neU$SeV+A~!m>`3e1ll4bbN?pYwR-IF4uWv4TGNwygDAY4(qac4`(tO z`&M_V3D}p<%*gJ2$WF;Cmxt#+t%B1wQjDQyhoK+*N6OLwDgRjyWzS>?iRLb zkX;(t;hv&BC7M!xYtypfAon@&_|L@5tI39J1G?(K;w)$Lw{G$KaEFpH3l%3RN_4_@ zJzr9AWpBMi$;;Y+5>-tyNi+x~^bSS?^zokx%9Fd7{l#TckGLXCo%(Ivj?#^Jzcfk; zv1!-*;?c<%G~n45I=5VZk&zMFw-va~Rb)?pnG^#i0C)bYw4A17>N|~hTUx#V_>%PSta#IxLkRyt1JuZ1FGl)AGwpwo zqUId{b?C-!UgpnwSv23L-a0IB@}! z6u9az)|4yP1XRm1nD=rZ_vN0ZeACiolMMG20IALN5)z>e62^Ei3R7VV&k}n|IYPAw zvJ=>y{RAGwvgAgZXea6foQ;vD#s<>g{j?FK$etgFsZllC&RCx&<_c3^HS$^$r0eK` zm60(q9xet&kpAfhv+DoAAW0iLU;k1+XzwufL*w|4i(_+7j$BY6fQ1n44&5%DCvwLG6v7-fW z8R465h&jw+`asik?il`pLTnxs6T)dRv}D>3G&Zd)Loh_|_(_^}OeSkgv!KB?OVfA1u@XOCF2FAYkscTQB&14_J5s_k=qF z{9Xfc@3KG|5+2U@_VIw@&)(*cH33zcoT^#oRPq`slIlVAqlQysU{s#Urj}9bs2x=4 zb5M00blYu7-_O`MTN(|$@OyRMIos&16Fh8Qh3HW#xtD+2sD*@pj_2EySaMMoD%wJE zY;SKjl-l@x|A#y7+NBVJ>yc4b!?Cuo{8JtBUOt31*T3{WtTEMd4 v%5__GTXpW^=71z6txQQIX~SjLCU~`=TSD)C*4b=AE$lb}9}(JkkXrCx7dsVG literal 0 HcmV?d00001 diff --git a/images/wiki/mac_nat_vb3.PNG b/images/wiki/mac_nat_vb3.PNG new file mode 100644 index 0000000000000000000000000000000000000000..1ebb1338e3f7fcfe8722844c809894605adbb30e GIT binary patch literal 69723 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 literal 0 HcmV?d00001 diff --git a/images/wiki/mac_nat_vb4.PNG b/images/wiki/mac_nat_vb4.PNG new file mode 100644 index 0000000000000000000000000000000000000000..734849a88b31afcda74e8b49c895781761dcc1af GIT binary patch literal 76474 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

s@-NI)4*J@q}AR7kM$X_=qn3iS{!*zB%DJqTz zt$CRE$T5U2qox~7tVr;{UFZ7!c1x)0;e4c}?A8&a+I1+$aZ}U(Lu);^fB9UEWW&#M zA!ml)?e8f6D;&|faHX28iOOo)n!-Vv5{<8AeeHoe+@I$>Ltea|PJLP38i)3k2k;6R4Mj(Ng9u7mdOdJ3#LNl(`T*Hi z8q{9b_!_j&96Aec)A~Ax#`(HY&PR3yZgZn+9xP8G-jt@&t07OmF zE2Yqw!3z*+OFRy`DWPfn6pQa*7$vHN+%+RaB>aLNFZ=x&%?BL$-rZRUnEi5^=Sn#s zYS23nVWEk#!Hz3W1tp(q)K7kNLuAX_{bHqxBNI849iO z;$_lDLz=swLQN51Y+3shF@iGZhfs*~1ma??<`*I9oG<~&-L^-vyjDkgz>urEXa6dUf!^R38)4yrYdD8X0>PVkbo;X0={iP#le_Ly!OM-1ycs<))n}D*~VRLG|mP#T&TD=a0~p5v%UzYTm9I z&$FBg)p5&69m^!Cabx=};sBfcUBA)fXOySUYzPw36P9?*W}F4Dwk*DlYag&iTWrM* zw^U5HJ7;dpA@_)4Duzo(!5mm@(hAV`@bGIfNuLGtGChd-Ti6BLMaTM;2As?TZPr~q z+q7u?d6f6pAO9K(Z|fp=@R%+5*@IWl)v6arc$pLdWyiBEHLV9$ zeh^&HyF2qZ^Msjk_Q}sb*X9y;YxOsdsw`xA^+TfOHAUF7Xr=&Y7h%r0W4Ew2bu@Av z8oE6?WQDcg(qfw>z#MX9n34`ji^nGid-c_E;usTLojod(Itu1UkpgN-7dcXdfQt}E zN)>SAa)ops=Rc!66u5Ioee9ZIVnhNzM?-L3-mH62@Y9(KQ(Kc1@3lYTM5tvar!etl`v z=aF&Sw%S2-Z?|FBn=V`DWWg_R#GAwYSd`&YZC6@)|FDOPBhc z-F;;7XRJ~Hm!=J(i(k>RO$VD6e^$bL)-kL)g)fz4yWkP+E$klwxxCfvBPZ=&vkWs9 zShV~C(4dz{u^`!U-4@-MzL7=9p~T9`@xewjyA;Q1%Uhc|D8Ez28i^dnflLFtuB!|` zZm4d+ov^F-F#JXJq1JchNE_)JdtwS|n^Udq50Xj#Xpw4LM{|-|7rNBM+2*Jaw>SCy z1!!wnqi3g^zkfbhKv;R0>B(-z#aT&>YVI2#teIczPQ1Z3KK^qjG>AD_4a zQ@8Y&K|>nP=XcAeKx}B<-VY-EECc5CJuRW%7B=DCJXMD>=SPT zdwy<=L7_tTq0*4&S$%&brTNZ6zGBWTf&)NsGBw&;Ab;jwu#fUF!hN4~N(AC+$US;P zu;ro<#)s*jd1fJnl0uw>FpA-Q*+#>q;x#c^!@Woj*vgMb#Du?)KH-gSPVbW%30wax zegPeaae<8>N+Ve^xiQw!?4A}H9m+oLef{_HJ?w-Q&0XiT1Rg+OBwDJ}b8^#){41Ge z$g&4@abkDhMms_9QhMGaGJj1}Y-YgM?~ukL)HDCae)@0EBlVvix@=KGI(T=gg$9Cw zHn(jvVlV`&3~Y93$d!{B$ca+2w4po@ z!uIt_dynNkL2NhfcQW&Sy45}*S1mT2*2w-1*>I~1Xuam;xjMOG>Cez3{N7G?O7gIc z-~|cS7LNm)l8~ljv2%Z%!6rs}`2YyF)b`6fPB<;7TvvCa;^D#rW4sl!KCAWiSi z3T>qd;%Cz=ruw~^-A7VI?a@mPES&-h+e{k^f&g`MVr6zKv)dnV57(ekH~SQNYB)o> zX+Uw}zxWxroC)c!0P?%HA>F&cLIw&K$q4!^fH_X)fMM>;@=U@oJ+3?9%rasxyM3QN z<1Tr>nEG0~Kjua`rngmC_!~^gHl{O*h@6W8A*>b$%l0>A<>Ta8!#;fUw&`NrQRXW~ z4&e4;1ixjWt)p?S4=GL^AN5>q5n8am@L@7DVBlHSn&SfQ1x2obZ=4!inpPKmyB14Gf4R10i`RgoRuz#0-YqrD8(F-+?~`Vs5-srYV8(qI|9uxSGB{f$M zk+%3*JPs1DjcDcVHwwU#P2?^Hz)H_i5unu!(<=9xG?EP3SyHv}{6JKEczg{lh`DhS zF)&_o}vw1|!yXf?R3Gn%LIyg^-6cc)-6}xg5=qlo3M+f_9{Y#gd!E z%3U7|8rJyrweM=o?7K|^nb8MM9cET$)(E!{jb}nhRP1XtVU|3`^@S5fG0PzPCejLvV>Fk zAfsrpNn;b0II_e;4AT$d@OfP<$71SYtQ&vW6)O%1wpo|zMo?ySmmCAbD3r`x$cWca znY3ZRwAPPLUJai(15|+Su7^`GK!6?uECWyo+(iuY0HC4(r7vB%5cpHTg$h?kIF!5y zgSk8k6U%p;#6B*H7xJ6NmwY>i%wVAnHt6NU!Vu_ahv=R)?$-faX# z>?*v`5p<*oBuwNuJJ!_qdoa)()$o7E(en4C=4j<4-v31O06nL0U^~cdUg8rk^|Z1% z4mIK=sjyZIF9VM*qplM@o3+eq4&I|WR9_|RB^Tr#z_F#K&zHY);~i6>deMEX0T#h` z0AE($(X`;#7kU_+oy|eInL0Xb86fu});3)%-sp{GB+zN9oxQwi(k;Lg5_Uz*lc<1E zx#2o3;VdSH1gfQ_Q`Py?4A^^iyNAo+O0-REmNUducJsWBG?sty13`J)WwLi}NMovB z_A`&ExAy0k>3*Mna&2IFyZ5xz#B3g0HGGcR(8eD84*L)#=DO6c30LdHN3le$18?e3 zxso)K&U~klRUVth9A%+E$9%g3eV$1FZwOCZczIsLtV4zLT^nN(U6vbkol!pM zz8h{&1$8jm^^U`${eA0YGPZPC$Dm`PhmA8!GFEhlQxDAa7}sLKRq!W>x`xk5)8cV^ zTRdF(m;A2Uu|$niB;&R*Hp1i0#^##?`BCh=G7f*hoYgeLn_4QX*J41svvWHw-ei%; zCJ7-v-3oZt_TnkI!yhr#G@jU+C_GeXyGRS@@I1EP-qen@8i%Ve2^}5Z7(NLG!QTJ3 zv^0&!vR+U_BC^n06M&t_zS$k}aC_l`t+*7S=Srj{R5ml&Q?{hf2UB`|C-uSE zbK0%@IzPB33jx2;Mgv#teLCWK)^hvSNJ|uPKia~j@2JnjZ*j+-`nsLFZ8nTAR;HZk zFvCcA93Fl{9V~=pnr@9#P?JL*1@-g!l(&VoXwrNwb?=A#oOF__F zk9kB@ZHx4*uC=HQo(k9xxBwDTBUM})1R?T*F#S(R0cI@)IQBkoG04spWmKa{O&gDx zMq_+RO%`iuAy2+i$zT*Rz;+R<2GQRH2PZCBk)&|G&FExcm^Td!)CHozgg_&!8_%hhO;ghLe1A=$FD zXzjkXiAp;B#KR6WSuZT+iM?h}uTV$c8M?K|26vh;E9$)vHExc^e2Mcas0?~7<`=&PY=+cvw( zVxd{9>TtnETDcEoE>-r&oTjo^@@$b2WP1rP=Jn^V9M)!%+lWePN|&{_I#E!4{^SKz zhS=E@Yq_V_ob|Gr^>g@Psbm*8nVY1JLA6icY@4x!Lj9W1hS zJmRRvU!20(_yoi7#%?>Q*&Ku!JoUY|r!ef_o2FAJlG=l~GR4Vd)zcHoPU_KwLJa(S zyv>~#ey*x-a0)SccVT)R^+ey9XB1|fQ|zj!lpxqpETHLb8cbhyUgK_10c}@CeWi( zOp~#v&m7!MUCK6y=^uUak`jN?GGDW?`621`>U#ycHQ`TRrp(g&eA4Hi5xM)J)A?qA zH}xcwUrF~GhcZ%wXXiU+mLFQxv}nVUZ9r}?8mBH&*OruQ^y@EeNj^)nEDyhGWRXQ) z=94gw&{9B%2)RjXv_9b#6;+%KAX;l;kr7wO#1vx4hQ9;h+5CKYsWqp4#?Vfk-XttrBG~(rNktn!p;mXa%NTy(<2Odt^VV z{*uO1r|XvmW-CqoUgUVj-&3{K%&&aX@m`lOUB7qbo0!}Z{rq`~71z@}c$lQ)z9ufH!-u4V#(I}^J|;9VI7fg!&;mDIxcxH0;O8=zYj`+cIND&4~S?n z73=oA>YYTXGdAO<-!PMaPbF(7KK{&X&f#Wy$`DO`itV65g1oT*4@_E36NvB`y(9mu z-X`=Ca^+@gY9%Q1vyWoE@!iZ$t+RLx34KIaolJv_j%UX`^_^`CQOIgJxrUjXed_k9 z-4vnL827NSC!-nqKcm^Vp$rbb(z#N@>MLoj#z?K#m21VCtAT|I?c%$16dWZmgFB{g zNbt#-I+pF)g=_vyzMVfY)`^jAbgi#mdF^>0pBMch-III|`geo!IsBIuT5jdqt7%=# z^yG@0$wR>8xX;+G12MR>&1VEYEukhR7%3?Jh$H3S z@eBc)T#;xY^=Wyr5;5Pg5zN7%d#PE+b|Hu_;jm`!2hA_t>c>d{`heb6(v#l7mx41zklu@ zaPQ7N^*ZOg?lTzqNbXe^$HIyf+W?}g=FxqygUGi65&q?23>r)DEYV{7YDv4 zk7RFUxjIP$lECHpE2NWm`u1Nh&x3#4K^Rxpm-Q)Y_4{j|{1$c_f#&m*UE8RAV4zEjRytR~+=ruw#C! z?w12ehDjgXyMCcta>iDB9+-Hp_C&C9J^-zdBenerNVu6S9Y?89XslcURIn`IZcfoo zSka|L9b@89xTTT;Ga_j8eHl>BcuQHo;CPa>hI-luG`fIw3?Kn?{wIyqWteg+^H90chhUayI|qQV=nCsm2jHWjNFMvv$Y2 zpt?bW{-T>oQGuTC<|BuETBxHo$X5Q%}F+A2cg7+V7a=qLBoVX%WZLQZw~pTnDzP9O?0fr>K&u2 z9h?P0MtC|Sj21~R(d!vYaXMu}956yD^tdz-VL@Z;A!& zrE0dnPgAWtS{)5*cRmehnBQQb^T1YjyD44l)jTI+De0A`A_;?zM8QU-B$x9ZJ)yT)XocW7*~qTva;z8bc+$h`Mz z^ugtNdwjLXX`Oxd*P25r+wQA>`hxNM2Ifdu`9H}bgS*ZrP*sPrqF{dwweh2mmt})Q zto9u82^{bKfdNe(5SHj5P66>Gi0>I2v1Z`fIR>@8RlQOtILyJu(7^oE9PhQ{M$U7M zq6YN-o|o2Da;AORnpc9AMQ`I9$jq73VY+)!r_}Y2mprcdqIChoiG^iVmjW?zbHe(q zvld{oy)%wby4URN;k{R$na-{Vh-XC(WES@buFi9$#X?1*I7M~^2RSG3zMyjgoJg!QrJ;;X^U);#D}94YN*AOL)mka zYgV4X{VsQ?X&zXly#81wHKTFwB8;q(#r*l`6h7L$chm1O)_l8o$3o1W0Rt3o&{~P7+ z)ZfO?;S&;W2^b|9tzQ<*+U6bTFK-zbDAit*=<=T{a`@CEGsL6(!h!jXwjlF~d6oj0 z(F+`LQC$@XOxQJ6kXjmYrJmdVBlE5T8160^MbcytiX$&fVtx$qN*{3NVYcwrfHZ*PBUe)MhcOS@2iby0E+rF!}T! zr}4)<4s-;b8tbN*N0o$%az7qVxszJBUb+p2GaTyt= z1tMn9`nJYti<_KV4N-cks@|}Js$bdNc8d*P3C6*Mefhd?b2d}%TD9FeSQOdhqON`X zR;o$rNyPy{SGz5+L$?5^dns+$E|;cpC=sq@u5zoqi1_c<8*|cBzaMh@1=?qSBrC?f zy!`W)upz;;=X`BKH{}V;eb9Nm2W0pFXY$v>9wks&mGuf|v5@fyY(1yf!0Kr9^}=7- z^%L=TOS6sa8zs^AEg8y%60Uq5eTL%0n<8_cDJUgXF7gj3Xm4ttJ z)t)JtRyn6LCdAG9wyT*GoHH1<{`Oa33MtS2*%RFPL9ldFJ)3VGTS4G?lK{hD=q?}F zRDIgupKJKyXFFfopFj7v@cds;`W#0W`s!o-UC_Xcz1s)3K#9Ye!*P?i`Fg`br_~f= zJ9%a-kM83A!#`aEE>SbXE=Q%s7|T?0z~Ol>tE-FiqkV8M#aEryhT5&Fni}3Ie75|g z1nA3JqgqBm$dmgYZ4sXl3wkr3$%RzO!Ncm4ftY4}mJLRN-a%JKkV_ziZPz6Tezskho7F$bgmA_-*xOz%)lV+LGjyJvE)5z`h(_Do7j)lf#~g#`;AgDlT0vwu2=bQ*ks zgGfLK3#`90Hlf)ZX?z>NtMjXuerz_}21>v&MlU(!^Fn|0?q!RwWV0XAFzzTvbheL~ z20^sapnNt`g=I9Xx+?Ik9h5~hS{f|(g&@E3=a+!ddgDr)w87VUH`|(bXr)7=fdWr} zzs3c$xKD3wtk&8qS(wcN`?Y}u{I{+RDBZ|M4WKm~I-A9QLt-!{xBuSM9lg&#J(S-v zT=Ta~U~*}}lAO!9nhQ(90*(|hi2*1%CB2Qgml~YZikZ$R7Ooc@?pF_$s##O_#Y*nw z;ICcmWN&2udtR!wxJn47bM5#VT=Mt0=*g)=##niygsV#!g#MtWiBj@-VWq3EJe-sG zJ*DY+M#dGHz=~g4HfL9^_lkvsekgl#)u*-H>e*G)hX=*c)uo~?uFvLtC!iL9x!)L5 z?RlbZg{wn0 zORrXNAKALxT$erPJDlH@t88>4Z^4l?5vPIr@{?1q95P^eQeAa(^atC(A&7}(Lz!1Q zjmL_GS_4Qb(CERDP|exo*SQXiw$!IaQ*YUJ37C%uwZF5~=ZGzlkCv=$_(DjZ(LvZ! z>}V3=07J)+hkC+Sl9~>-*6Bf9m1mcl6jh6?$3rIWud(ND(*OoiPiPIa-5hT$vPcqn zObNT)C9^MTftLZYwpKw8OVB615{q4)RX2^_=JcMA%^{?~5$g4wfPX`q8DuS3jQ`RJ)WMm=Lmxrkj>%4-5g8 z01N*&4ai$O5H({qdzYth+^CNAZLjd0eT=#465`dY&&4eWi$9E3lq~AmlRp&q*OUP_FY2p{z8zM+ z?o92<9220FGjS1>3Nt=Iy&+-O&tZ204I=9`N`Hr6!fE{;O!>`7sl9&YaxMh@YWpLUEQ#;idG6!v06TXly8#EYQJwvPT z@WHZAYE3|TySxO8wpjYW2JDIh`c+qMndxM1f%w}GUAg)4fAl>l2e+_Jy$@ukMxd5+ z?%$s?ofHqve@J;N^c}#oW(|dgiP3dE3Srlj75+HDWwgAaR{Q7A&{+Vh)6vC1c3`T7 z!!+~I4;Ww6vVbAIvD1n290&fmzg-TUg&J+bwgwlQY4pg0rCEx>-EJ^N)B7Q0j=IHt z6uVPzJ$GQNSh|qsUA!B^!8+wvTOKh~op&x!tu>jCq&+)x&u#!HJ#+zh_t__TUk5s< zG|XX7yY!4DssqEt3zaR+-;_UCX-7^^pq;rN3TU_mPTj2E=+vDuvac$%cQ@O=!%88# zqrLYu)&81HFLR{({*DrZwA{($>@2gC6C>y&F5x0F|D6@2{x%7&xGWPoO zLMsnPv&8M;?xTI7Cx7m+dT0y6_@IV{bGGiQ*M26dMkT#Zk>ENqeg?RFb-^S#7grn<_VZCROAVV9K(lLNtS@*9L35sD);!nCA-uB;B zpVQW4@IKKUBz@D()n!fG^R_`+9L`mNxpm8p$!v1 z1wLufeGj(wLnHWTKB^X+5kK}v?y(d%uGW>XabF&Hn~JQa*!0cUE9=fNoSmTR-Y<Q+q50755nbGK`^7&VZ@$}&#c zxM~WA&VCcZt8>!1U#5*ViW}~{PeGxhn0>sn{Uv1SP7<+KM%KIR$?Q~@$QB%G)lTur ztv|SSganwTDXN*mdBuj5{0atk-gNy9LaW)u{Y342k$&iX+|RP=gYy(qjZCHzGC5tJ zahIu-w%sYcB0-R9!gAxs9NN|b-F~C8-Ys6s&`)V#mg;#Z;?b*a{<2uoyUTxo1R?CV z@hjx16BUT1qm#VWrL)KY`_3*kP#q&adEXgh#djZJk=q_?=Y&7(7Za$Tw%(!x9tG)r zHtBVqboe1RtUk`|lvAadQHC5~j;pbIW`XL{lR27WlavO{Cu{+NrMQ*fd~uI4EG0I$ zP#{nI(?+1>6;&ODHEr>x-cpIm?2ykH&3{{j1CkgiVjIr=ub2KR7A)?Z3_)2e8H?9H zI8A3LuP>At@<^HzXI1oyPXF@uYSk>WKxm!dneh?OmDON=*s5ag_d1e|Qh&{2ktIe% z>PWEScj*_YAFK6se@iwADkKx0B3DR)bbw(57EmsaH-FnNcm&(31zSl0{ zTDqUaND@tsYb~x73#-YQ>Z`f2P~NBukbHUNc2}cE2(pC>l$4v|pV}ItpHP^zme8@R z1~%#Hn_&ozS&>~cZMj9iCj0tDJ`zz$;Zi5F_8IB48o2pxG>Zs`Fe?G)-;VL<4P}K{ zqUY13GP-!@yTeT*Qa?g7Gqi8wjG+<)Z_yeOs#QR@FbFZE?huuR8c2_7+0#jEdZYdE zV^qU2C83zMbHtbY0?1wF>ig2T!?SeU`M@LX+^@#Arq~8EB`hG{)qfM&w9*!h^2wP)x>sfthHATLLwQ zsY0&LXjk7;x1MZl#tZ1dF__`PiHNl=#n#!oAg0|y&H;pt%_f8Egz4Vivd;V3&veMh zlaj`5i(2sPTsz1!VXR!)H6L`LM=5WM1(umB{EJ!7Bs6fI8XJ0a30Klg|0?4Y*nrRL zJUEH)A3m&@9G$Vs#kQeBUU*j8~K&J&QZ?W@^K#3q?9J-jnaR7@F+bn2O%^@?#QoM-B8B>=h|Dxb)`{1J#I zPh%;m?#jSnlP}Ple#tI-<%?Kc;+{kB1TA%k`{^$StXx(Zk<{=HA+sP}hDYtH-ds6C z_0PMgF(mf*Fxf)}S=h6!9$$-@V;JcJ%KcV#GO{~-U$pk)lCYZzcC3K>ng$5g>1?75 zXMdXs2C0&)z9HMcyVhCx{i`&rr{lSt0W40A^O+0vM~!&lA2;e1S2~m<>6lmuQZ+8K zGYiQ%?Wogg2klLr+2Fre%7``!+2&7S4wB~s7Gs}ba778bnH8$2g3Kp{(A!PDdkjq! zzQT2CF>J9ULcICTe4>n78l}e2!iw2mVFi0Ku<(LPYOYD>#I|=agj>ZvmC0TpC}HV z{bHNb&S_GQkxWlIF|3t4z6pEk>T2kbP&Ms(`W@r?p<{}?(hXT$bGV{aum4IkE|@+e zP9u;`q3h)k3q{>mwy;>qhNv)}XwlE^_@CysuU8?T+yzUut8%TnQRtAW>Hrt)x4?-X z;bD6McKMv@jxn(SsiTNRt-T`QYQ||{BP-QNyE}j7bpg2D?fjbb3Y)rKO3C5SlFFpm z!l|v^0L_s~!yR4|MtqMXBYRoHz~)e356U`{9p!;2?`Kg2t)F5F5svcOSS%N;6sBEP zWt>v!tG+4D&}cN*Kxrc*ULWvj@apScH}A!-ITo`sad}4`TiHRrtTkC zYm9rJx8&e;h|Komk%PR-t1}46k+RsBl?sp^m#2TN_m5g|(T2`cgtwZ5qN!Ht42YWG zc;64Ab@f|6?<*Ss@t12h{#Lz)Sb0^}3u#Apd;ImI?-FWR+9`<*DNCg_&t~au&I9U1 z7Rt|374N-NC(Uhqye@MH$1H<|jS`uPLV$hi1N8_+FlX*dWSYJLnfXk;TL}q1a9B`+ zNWf$?e+o<|>3kU47IC#tj>(#(=RR3ns=3dx*=EAf9C;s__=6%S&QwIV%b{D-5AzV>v0kAn%_N;+M3=rejr_dl{>Il?A> zY5d()5jS%s@sg>243%ZK-UOL^dj39C0R9pw5H;6zwFX4w@Pu-TPEp-dvjnCF5TC(#E!1 zGBNI_8VI%hnr}oaGqb=FJelafrWC0>_Z{xU#&sG~La$D>=1l1IWAr7_Pz1Ie^rJL3 z^47JR+zAOQ;<7u&1Xqvazu}S8Gb6v=xPFNfaWbh|L_PDdJzq|G7Zy2-#nu{U)P6Q6 znEKdyONu^(esnixz#XzyuugRsag9-crbU4G;^K_A{>G|YW z^C`ROjTZBphi{*@-ey)_TVUUKLzSl5L|TN0$^whAwZ3#`N@t zS}NOK|N4ZvxhY7so!7~-5IieDxAFLqo}G`xxN>BKL)H{_eQ5&xRS($RezP4x$x$t! z*KM0AYe2+q%oD<04`zQDQ%b)zX}&*o-&pmi^qsoVP!I56mgI&e?-4?I(^x-L03Qt1 z&j}9ht#vI_wwd~*-(Gq}PcO+P`5sEq#k=2!4Kk**akF%6!--4DdRq(jE!1R%(V5u1 znu|23w#|CV@fRk+p)qXQcFQwxe>Wcet?2DEX5{>3kL~_3&)zN@^;%s5xx_Vfy|~* zqqQ}qUJBL|H=*?*yu^=7!pEe&(NZa+`jml-p6RHnA4aKP`=B1o#FgJoZ<`_B1icay zb`8Z3r`Oy~BwB&F0(Yzvp%gC*CQ2=1WFLKO;w9VZiN?By;^$@sl7(lEm^l;9}+WG z`d#IXN|cNT+!Dhz0tiBdbMfEa)l^n?dbzDSmLoM5Z+jWny3M2l?TtbKv!^7*VNm^9 zBUdY^f=Jq8+vmyF(RvB{dprCD7Mly4Yfh`qfK^n1(BtE8f@UeHbE^{17ZWd_t4>@- z;M1{x-cQ2J#SS^mS3m&Pw@u@3q0p7)1OgJ&o)&(_i*yr(>?aSS9!fHET#H&8n@om1 z=(^+%TieB!R*mYNe@hzMGc6f_q5lH+b4;&FsDaH*^G06$i{ybU^z!J7`H1R=QIU@H zQ386X_(Nh;;w-9pcMI&ed>I>=S;og?ajI6FqH&RPsX~(P3ybMgy<_v9gjFd=O+TW* zs|luZA|C%)FAWYIjr${JcpoABYKcy4pC`0T>8221c6(eTDICDR6cHsWvuIU)<00BY zNe-YV=38xMy2Yfa*<3zl)S5F!bE`CmnDBe7dYRzi`kT{8&Xjgm37y$VGKrEcvduc` z0Uo{1>dW;%KdPwiokj=ZnkGb~f1bo6h2L9XM3trnPzuxR@Uh3MX}QF$l9xiO+xGA z8NGhF&o(n*h~tk+`lUq!x6C;YrjQcJ{g65Z^Tp(*l~z3n(PD^4sicWvth+4$WBVn; zkivM)>Z1HhZNluwtzx}S^-1u6YLZhI`O@8DibEUd@c!ndq*oCTR+@LjJhyReQT_=2z`Ae~DAPkxnV-!%hfIWLpM4g!fV9E55Eq zeKEv81Oh=}kdvE>o45*%GS!i;NG~R@VmBBgeWMv)^%9XlIJ(plHadaPX*$G_w{Ya8 zcMLbo_Q5v!0+Y;6+^)B7!y2br-cULF8 zE?D{FWXE2HmL?x$LV35k(f9+~R($o{&uAiM*RfGmHy21OCNHmWGS=aOl7wp14_V2t z-f|c#d>p-N$P=$wAAQZqX5c{Q^h6ofqOc*34lA}tqNO2-SNhC(wIe$rB(!BoINzfW zN$y?{K~ujX6Y+~SC5JBp0cHXmsFFMw1ohQR8b!$0==29ZSetL~II(e}fphI4ce*d1 z0E=jjMLr_jFRt?UBH6$fShT{#ZxL8iGyyCQX*s`HQf)oe@~bpA?4wgqG6!v~h5Zq3kB(h4QTUCNX9s@;bVwh7j zGjA|JsK}mu0zZ1ew%)^CQdAT!=Dyko$e_}aIcm4y%!Os*XNs9jx{o8> zQQ>#lvuBcn89sbgxc9Uq2-pfyyb!EWS7bY%x3cpa(_aK`STzj=J*1dYIhJK*U+L8p z&Fmx3zv?w`um}v(FINW2`>2+Peix~_@_h^paQrQ@ac!BgLeytWt_t0HP6FwljLhQq zivE|&rDV&aq++Dz7qiYi_!)TJBF5|CSqMeR^KCv&YkJkr5Ho(d({1Z^FIG%$(m!(W zt*$!D{)D9zOdv^32fKV}IR&Y^uXlwa-aA9MABCE%`6RxZ*AoL~_9=O0g35l;ME>uE z2+;Y=DdyJZ#Q!0@goU9nO(b>jt3V@q@+c*V>DuU92y=;P>1QzhX(2gaXpD+0Q-H4GUb$YE zxgdvrsJ%<^(3>xS&vDobvD%xcpZ!0zXK_Fn#OVU*LO?U>yzSIGye4f6Z48tAaH5s~c|+EKxBpBLF0B(eg$?Yk>%#El!gSn$;7Z zW0s{v%ZQ>cRqHl`_q-8J<_f3(6d4A(CUb$CCczXtulK#PU8>oS?o}__o|?O3BAj2V zImqg0)~Al%$Z^P{d6xLXslfdjM?DE(9X?3@|L2LNNz6GAr1&=~v*m82NoRzJSZOr4 zfp|!3ODg;Oera^NeSg=Sk|ofiTCu19qM(?x?eDr6N&BLXPy5>ROf^MmAI6IJf*_oG zvaZ9gOYZ2`T_TF<26;y2`8j;L4^uz>*Bb7P?s+j>4{3(z?n>jRn1n6Txi9)3uyzLg zyS3fe%=^{>hFlLi=nQ4Da_Px@D=6o>Jx(|BgP)f{78=JS>QfVM3do)r=rZCOq1Ng)?O5E!(8eJqfF#@^Q?0xCF7D(WG{Gl-K zljbNH{tl%i1N}cTdx4(r6O&CB5QkhRGXwi{jXeZP#h<;rkyy0NNvpY1@n!7y^F!#T z2x3JM2|$b_mn1Gu5lI0ZZW?#v>{!b&W;7xEKG}3nL{iM?+NNfq|i;&F4Bf zC7+-VB~^My9!gW;J1xJL&s*2y(cZhc%G=Qe`rmUkpdDOOf9@~4xp$azArz#&8u2^y z@@w;TPFwp8KE(aKNI(NAz2GoXAX2rFBL`c&mb|~N1exACB-Yel**Bs_e+t|KXH85@ zL~Cep+v<3-+!lM6z1|T+C-yFA_B+3#nft5ANL(ztG(Fu&;Cjd8^<{FAhn^b(d?3m7 zf~IIu$o7tsc{GPK8l4la9_lC0@Cj(0u|XH40O>*b@&AU#<#w&Q^!%jQ4g#jnqM8ul zH~FQ@{zo%#hh5447rSzwF!1oRoTdYMKeTAd-R9RX&1ymU(*gyzf3=%erp_o9z7LK(N8TG04JMMi8jd7U;Vhp{ zG?lN2*it0Sx2ruV9w_!A6&Cf!9{Nj<8bd-=+IT2gA9*~p`=liNklsD8$ShJ1c~zLB_HSBM{-hNiUiZ=_Hsq6e*HHQaGy!KsgEhy zIpk>Wg{?-kxFkjiaI9lANMoyDyRp9_a(A|)E#mp#5k|;K{&Q4cZhk)haSCKG5W;1K zV|%u=PVuVpkm{Z!bLl-{MLfE=Vf#7ELrf!j7>2^(>4e zCW>vM89!sF+f0@8?$L9QkgB{{6<CF>xLGZ zK5u(3t6@>C0)XBx{TWUA);oCaUL+Qqsco0SoC(Sl4C%^|bXearSNvigO5%qjR^3@K zs%%0{xb9m$xAH_bR$X4e%h8Si@IfS<^dovpxxaU;+xt~*_#efxmpy}M&NTgj{8xE*HMab`@V+M4b3m;Ur}JM##a5)d+*4Pq+MTS}q8a9Ll;k4K*RG+2Z#o*d^udcA4O z)%qD&le^xgHeGX6XnJuH6xo%NROt=wAQ3b09bLEN9WgX?FvvBpol%0SArVrC%DSKP zTF&jzi2B>^_!C)&)t8%KMj(Ry1qwl!LWE;m>EI|9MmV+|pwdF@Z^pm*;VweHM7%n; z@^B{Nhly$Nxpe4q608cNf$Z4;x&unu0qi8nrm|St9utq-{}e`_{LZV127j=%midj- zE#9dQ&Bq*yWC8(;XB&e&XC1|Q> zBxwCdZ2X4{^hyN7w}z2(Dd|FVdZ4ClPWbMqZ+7@ zG3`e|w@)&nawXtgQj?N`(n*H#o!35Sa!3CkuaZg6x=XivclX}n%Y`~8;N+8WfpMX6 zk)4zP5!*d45JVq4FfcG(VKr>V=yG{>aGPY04Bv*rVDl=fss|+e(f?B?QpN0P##zVN z#{uJ<`Kr#dN{xyOF-0h8ue1Gq0Wq`2GSo_K(C*I8SgtGa%G(QzGTryNzCBrFSdqT@ zzgGG0(qOCUrisuD%;U(~&Qi}Z$+GL!#iq%5{F|MfT`dr6VvVapk;z~tCPaM@v;8HcBrr8KHOyg!OH+$Lob$R|mW;#?jaBvXo;=nyUeGxpIJvm# z=vB=u7}-^<@R~~2>q)T=4Ft?Up9fndnabJU>56?AE57zHVn?)_Ys}oRl*cdTkyf@K zOH8KJwtuB*Z1tV~?}Aa4e0@J`d#>NO&i&$^r|(OHD4xFG2S=EaOAj9kI>7Zu%FzrL zd-;*Cfy8S72yC8!K9jBD2ipRi(jC!s%Xf!!v{jHm; zK}cjBr`R6>y<*Zm|J_DXhkztRr6zfI_I;Twfqc%4o8i)xv3mWz6tyRdVlg&(JW!`knA~2uAv!%Os#lM?=rfNhEG?|?}{N5R8 z@a>i7DUJ1M<3x&3g|n!-5w(--$Ys#s00~rHFiaVcO!ME*DI>%`zRQ2Zh_h)vEiE9B z)B!dei>$YGM}!Qkd#p_7Nz7*KkXuviM*R{&xT0mGc4}(Me61_|_=qmq{@i#s>KZz& zZGhsxpYqR^chmkE__KQt(+B>cI@SDdY%oLhm+jKKR zgwuy0f(0cKhD$!f4RPmSVMks|?UC?Pu4j^xt5eNa5*%LpWsEPyIf#SyDEA7T#kNvU z%-7x$I7Z+?9D8-%EW+h@Dl55Ul&SXe5|0!KJ2uA{kjnC1)cy=9b7Xk{_}rRx9vS~h zKf37^g2j@JX)G}ppkdr$*)FH{8e8lFx56*! zHRL#NZf}8!(r|Pr#G=y-q}9yz#i+EWo?Rc7bn$&req?c^d8 zV(TRKM#|yjlQnXw2-re}esk+8mQDY>kX(qCV$xuJ;o*2yja>cEv^s2;A!pjz0z}jnAn59Ur$m2ipJY{7u58IB7sGQMdb5mx0Ptl2w zne-MHBN4bRa4X^S_2kEvC5;Cy`8oyPR#RNAp!(G4tlQ+uY^2Bu*@ek>lb0$6G^&OOIu>EBOFu zu%VErMa>+#HQX>MCFMRWEH$~HXCD8`OWr@ye&OZju8t9p7+^Igvc&udT-?S4KZmSl z*hAYd3Z}ljTlaqMK_w+N)iE_+7Yq3O?XYMNyP8i7h^5aK7VS0ZpKs}oBbFsKC^r@A zeLHAR&9-ylFs4YqTp3i;+Dz$b4lo2D!Yqgi(CMA_AFiOP#EWlYZbRXFGq~cbvK9JHWqQs zIyyLa5asF;ad??Ag}Kr(AWnR^|EE8>aOCu8F1za2H_9D%PItA(J^AY zivvt?1Kiyc_a~h_)XdY?UkN*WS&ED>?0eU{DlQo!Dtf1~u;PtYE&L=Q?JgLqpS1mh1@cg%mgUsU)2LXAP4~qNmth3lrn*QaPt#gexfh2Cd2N?&ZSrkVH z1)X)4`CWBGI@4n*P;0n&x_%>0RIVDQ^-QjmMb(TR`|9=pkV)P8dl|cx9W2C< zOSN+^ygY-3RVoW}k<)WKxc{Z+y3l-ya&gcej#+QGA?SDa)Te`4E7ZDu$|$x1uq-v4 ze-ej%yS!}v4r{qKT-qqbImbe?KQ{aR_}}cV;x?t4{*4G#WXE4CWb0bw;Hu^KC`UQdUJ{M%GLaT>*LyO^UMsB=zx7v@qw7V~&RX4UV zD!Dy2I@wilzptsq>0K{`Q-l9zRF|~+feC*YSa~>C3B`8?fAz0oHr}jyams(ph-2q} ze}h}SfM&>OD2EKO zCUiT027(eT;=bSDNpIr+xpGTPPx#JEt+3_h-@EZ|5{s8{fq>O^I{RhMO@6!$Q5Hn( zEHUp-P({@@yU=}=r0ps12;b9lc;b1Z;E2)e^kS)1{v6K(C+yj;K;VZar@8(~Mz2>U z-htbhno;$Sk2vs$Tg~4wC5HQAo<6@TfWB)Vt zT*kLN#{kJYxHkhOKT1r$?y^MuP0Qxs1g0OE?T!sUb#$ha453pnFoC()ErwlDX(!>Z zk0TBjLUjL1a>{rvNd|)&Mp(OCp7?5G_jCH6S9^sH%+3F0wJLtQ>bTCZ*nAqj-3@$B zU*{899KQPLEJgCu5jrW4NC_(*oGv}l`Dxepi4l~Z^0M;iCiI?Tg;v}ioG1oLVOBv{ zlYk6(QQlZG4|#4qT-B>5|8{vUJU5ebM^P0N4hndVR}S|^0uaV;x6gk(20P0Mb#U`+ zaQTnl#25)N{u=F2eHAlLp7{QIcIYrqkzM|qbPelOu49pqCG^RvoG~;cD>QP#>So39 zh-D|vsqX11TE9XratR+wRJ(VS8eXJ}X9sKSX3qyI^sAjVz0)x2 z?6B0@>X6`+nR1Y@z3OCdBb?(ULB!!eWjHhD{Y#d6(PrGW9Ifq&Aox}!N0$vDcjP>u zYNGi>3xq%Q!U?hzz7*=7b5sbeDA_R4+7y^Zh=q+^v12u|3HG*N z9vq77*2iY9VMx`k>@?=zy)?F_yyA*$&vxFuef#RO0OvfbxDr-jR~AC%e;5+=7XB)S$xD z$d<(-&np$VC8q~SZyA3yeY&F98JEYK+x_7c?k4N@&W9}qqtv$6$iMfMiDWK&PWSu;y07^g}-cV8JMEyo||GIMi-<^UdL8EisF6Hs~dq4=b2** z!k4OEKILm)?gBnO@WLfqp+WRo99E1X3PKe(GQ{{G+Cb9 z^o&!@dJOh3Vu+2;D4~j~3%mIjtM9G*RDf!MZo4AR#1J7lOx=h)m2n=hy~`7#p%|cq z3CVLTP_cTru|Yv=XqwjHIyE* zFpE~=sO{WaxIAlLL-*tgj7@ph|CzUAd;XzT-G7x^yAO)@UvU_BKlm>ytYS?f2vb z^(?=KgvP~BnLjalrO`t&z%*&;>3O(+DXKQqh(a=TgKEEXX%MA2LEz4M#fD-dhAB?& z{W>rIT3DyA=*;30{<%wQqY7QDE4)VTKzCwp1 zfP3fRd3z!^J+a&bld&7;egOP6IxxO;o`R>dbtldD-E?^sjbY6QC}r!{$jE!f1IWzm zZ-84HGU+}&A<&)RA)^{s&(H09Mx1Z(XH|T*ao=z=z(}$|5`Syf6^m{i@5XM=i$WL6 z8EtJ1{f#zeCw^^ijPO)FF$|h3GW^;rj5(xo|IDSV>A3MHVsLLNvyLEi!bOh&=V)*q}xO;WNB^*m5 zPrGculfb%B#nP>9EW0s-Gzf)+AXQaW1F^<4kpv3b-Xl7|12&mVxKyQiAZ^}K{0@m9 z>&B&L5(tl!p#^l1H4Z6Jtcb23Ej815oga3>hZRI6*~<&j_~guCa+%@Xith#n%IyYApq*Yl{lW4FqVvf1Q;a;y|%eb~Z2+W=p z-Ja;p(W#BgKU+aEaQrmuD&`*B(IB|yycUw+wWj~*2zx41ba%?*Cq>C+S;tfAhB+Sm9wh5d3xcWyVtb5utvmb*ouF zJcmoMv`YoO8%ul$!RF8~OT7Gvw-G4IH)5ClN-V#NB$5&Hs-H2#8JDnlrk`QnXewm) z7U9HS1w_0GKks_~S2|^8Z1&pbZb$72& z+HV6OFSNCD8oc(ix&qOt61tV$ZorD?hoE5&aPb%%xx(eRllyMG%3l(1m)-cX?yP=; z1DX1K;i%h21kjNH1a#zRNLySKF(}{LAc2J*m;8EX)E{7l>?+~#ye8|_R;y-)(PAlq zE|62QX_1y6H(XN3Ha#bZX*4JJBX-lO*5ynBdhh!0ANe=yBayMT6h?;kn3=W~H!DH5i*GMI^XyYc_`70XMw)1Q zun=?ihkJ6R&d)=a=+R!T`-5xSdq+$qmz_s`?(e!I8vjHDpJN@+$@t%VV{@vOxN+&n zNRx96$5fxd_Ic=#wCg~m6nSI$P}Aaz>U1A$#%|7$*B>}~*8S=&mH=my_Z&YajlAS2 zfe|aII&$eB6I)S?P7eT-dYg=Y-=U=)*MrhtEqZLRr%5~ATKSe_uoBg&`Zzkq9n8@2 z=hJP|H8kqd{e1k%0rp{olryE$QTmXqM%MAbmf@r{jYE2?_U(X03VAN&kVtp%m><2G z^U!FXOJXENv{f$^cnd$y>el;0kKl1Ad@x1!33OdWGYox;5I_%Zc z@pKj4%52*?r|HRRW!TaCRi`t?I-`mM=>u$rdF|sH%WF2K`*vQm!}7qFYY)~3=Op0uEl}-eag%cF{Orm$`9!{RhUw!TEy5LX- z%~~a_$X%nMgzLCAz`eN{;3?vzuD`yqtJwgE=yA-?IRA!wtDnJo2dS`KnWs_mW)cV= zR^J*D>LBUs1(K3_Q~%F!iV}~KjZ)J0rZo_?Lf3tx=-48hFR99LsEQ?9FkhIElH>KH zZA82?Iyw1SM9md>6Sng!_NVhYvpg;=tQ^)%5HjL8RN)blU#NM|)T-coUnFWT{5|g{ygKpDLD^3K{WhgjUIJk-d}tKSyFWg#Rut4 z)N~^LFV@~FEUv9>7F{bsaCZU(cZbH^rEv)!+}$;XySux)YXXgj;MQ2^;2ONK(Q@p}@DB=5Z@Zp()EMO7 zBIl1{=m!F*h``q=PLMea{u+-{hnwV-Kk&ZoP>eD@E>oE(gw{Mm=mdW^wWtlAHHfoS zsrs{Qf%8NyzIES@r07l8cP%y2fd}ipCDF;0#2X^f$39gCr1bu$y~OP=5bUM>J91+a?bTe1N~e6iwghlb_=xmLtmU7 z8@A~3ud{bUb>Ji)9w{{v3K2oH%hwGkrL}1X^53I9U(C-~!Y=K;`ENLwpPkiy1I$S6 zO+!2L!z3jF13YA8Nfxy|cL`OpWKOGL+dOxeT+z}+R;gd!rq|qT6CHBTY9JE7#a8w0 zddJb=#mi0^wDP!)xBt8I*PBB^CA7?)E<~*=zj81E>HG_8EkD1mm}En8s3;!q(mpxm z=g5isHAC8K9q)Bha9_M|&Khxo0~6T2Gm4nhbo|@~56p_8t0F^t^))v9e8_Fg1tL8~ zJ7*>$qHnF_sNxSY8)rLE)k&Qwj9sobaSLoOB|eyhQ?Hgd@~!QQCDN}qmC*Rv&)fpp zh$NrR3mpV$h>UonkzrYAi#98-EzLEQ$TyuT@}2FsN*L&CkdoOL6$)edpb_s&{Q_;? zwy3?dtHN=p*8RA>Ei2Uxc8>dEzxtt+{01rTM)SDCU2kF8g8c1GQaM|u-j6oINZE|c zt=tD|>#}|gmWt|2_i;28lg4`gzmGwu`PX~_G6)q?}&cR`LF0n7WsJ#p}b2iYpUOKMYmAC%|O;jALu=`+R_bn=TG9!xC`%PnC| zBUaxgKR)OMhc)S@FhqkWI4+{{(+{v5kd_uZnpsZx98w(ZxKfy+K^&gICsg@U^8!TN zMIO-Dp!UkWW?oM_;FH(dxp-ejrM(bb5i2Jsn1EOZ4N5n`?#GzTP@_y~vvTo7B15L| zi7uIdZ86v^)1pV4j*NfR8Nm}`oLf}(NQ`J4@TcWgCo6nHsGN$Kir2!!HgE4pVq`I@ zJjMvd1V$7Q5K&voAB!csG8%o!=Pc$}N41x}=VeMG-uvtJDT%zl^++gaQRLVC`C`4< zi^g}8=T(4Lo2FNNGnA}bY+b)QHWj<$$E4L?6KGL*%p$0bVOe}GPXKi;e&S_5hTX#i z4?Fp=V27M9J+#s9+VSR@qB^yZ=a7WXMG&%j3K5@~f0V{hpt)sGsydMaCJd}pl-+)6NU?uwdup&;tS0mJvZ1}E}yJO z@#02i^V%x-o^b5i(1J-RzQkX`&<$WV#dIoQpNDsTPz|}Fes&jv+Ga- zVR(dDebz3uteHe$ft>lDo2P-BDdhYIHOxM^(QwiZl)ip&N4xMykBr3(-e@HJni$Fv zHCX5xE*A@j0Bek3Wl9X?6d`tqu;>VcKIBqJ7o?*@DH1ijWD-R@8XI9|)o7Z4c`3ue zDG&j#GkUwC`77*kUxH~+P)JN}@|X+m#*{P*$adGxRWn7u;%xBo4IuUqD|3S{q2H-K zOi@M+H;fti-`?If6cl<5>-ozm7f7InxM5*|ac6tTXhhB~!w5f3VI6rG9A!?WBow%C zzzYHcoWR^nq7wGzH)+hZ1#B`%BXcSR(ux`v0)9Q(qVizQbg`@g{wb_vIwOr$E3<+l zDG8)_Z4qNvO%luY#|BC(1_}{+bt4DkfD8p8W=C3t%M|L;vjsX5T754L$4I6Kt#d_T zI_?XL6(b;JQAi-9z?z20BqDs@whX{PlXlV6rQz}I!7hKDBR3K@t}9R@Yk6^25%`@$ zuR@@*Tl-Q2LeEfZEbZeurmYF0)BRxYKD4MaCu79_TfsE_BICbn$C#{smZ<4U^*r?I z9C2iX(r5xWdcbMCuO2nYIm0fkp1>KA5E-Mi{+){xduaJ2ceaLgdT= zMlT1M^r=EwuGJXULP?j8aO;G`)+!4I$;T1Y*pxdP;`2yuv&$ID%>~4M+2sb?%Zhj4iB+U|1obvPLNF{)HGS8~^XYzqz&m`q@X!B6UqmtBj%ZW=%I*h3;eABDwYlezR@W^;6mKNz4E?u0z& zpq@bb8@mqvB_U>wZ{D{MzT@$*ILQ-X)}P4d;fQ=;N?A)^8vAX5#~6Dj67=jXy!gb#>6NWv%H!0nU=D)0f$&Gn`~lV1D#_8I zRDW@(AdIfi^%q6}Db`~tvt`XVZO^lZ?iT}KPboxru?XA4*QVqz(!I@R#2JJk-)ne( zWE+z=#EGR_hPdW-zS2~F1YP}LobNs4EY>A z=Ux&!ht1?DM)~DR5B^)0O{<6cI%(a<;mwe}6o!#J$DtU9OHLucNo+paSfLVH^S-A6 zZXMSY*X6&nAp323*tu-g!U+psj|wAWE4<9j&7leNSp#(U6}Z_qy_S!QS}~XYY5vLOxx1Vr_JtDp zNBFLf=Da~FmhfBMaE#Skkd7xQ$v`az#&`0}^-otn?REvuv4EVeKLtjA)&hxPF4y1U zP4sd^>3j{0>V=1fZq~oOd|^CT`T4woIa_i^o%H?nV3RIU-UUuEV9-8 zR(zu9t!>-;+vqm}i$_w$+B&)xz=tOutmp?zYp_9~BwssRea2VSy3v8U*mexswh8#k zDn%imP{5_!+BWku7p6u=#VkVG06R~^$c#1a|9madcf7FP|Lg4Jr$ofp-iK+?ytOHc zUOKX6SHkR4(FBXVtaM1}m+g10og_w1p>SwyQOeG&w3HG&=NO%PYypgDdvm-^+t%?E z5#g!xB7H3p#d$lZvup;X6BE^U6+djW<$S;j6HT*a{=FD|82XEFMScN^BrDqR7+P@2 zs6#=3Aq3dW-aK3xG$tA*o~x)3IbNKMHLa<*gG8L==wkSH*P@cg9A(_>KBBLAU?Xpk zcOE#pOq>y@9iStyt# zC>l$B@7T#Kxs#0ILJ}4E-K7_sWGeLM8`aq@Nz(3``P(8x$!tLa9|eTfiX(J9ll_)N zM4mUQ{wIm+I)#PCa!GA9$Dj!3y@!Qjmy%%|V3lxdH@InZ7VL`SW0ZG5iu(6e8D|Uw<%ZL=6Cf8d?Bq-u`xsYGv-h| zHG$SFr(&TlNb>`HQvMoj<29I(?R_5!3$vy>q@az$M?zO9NDDuEy6#h2i zL})W^`W$|h`VHwV<9Qisa#WfxlsUl24b@T|)4yLh|ceSG=NkDEKNX;-iMGa+>m6QyWs?=xwxHRcRpV=>Q z{0L$?0ZWdCbR>&N=laV5C!?^9&e-0l@rMPMABVU`n0@E4VXGg=x2*mllgSg#?)O|i zQD?tPv};gN_{+Tqp2XXRxqFiO6blhPa4k-a5{3~jURNkS8qrT8R<~Z6k`%=4{;WLq z7F(}*s7PZLTe7*6R#mTha&NM;PkCbgd6f#D|J6SBgKEp9u$f=p~ zHQ%i~W_P#E;-Qg_;TN`pL1GN`g9Wq=JG2O1af}{W+51`_Myle%$Rvl)%mzgZ#Y9HH zLe`fGem2t9k>Y)SHE0ko#rG0_!D1Ev5jP1v(h4A&v3GEg_>?afb{=^6GNy+s{^{Q&g{u)4654a7p8B_8;O)Eczpn) zt^@XF0K-Gt;$Xh|?7WN+@X1Imx3CbZWHZHcFo+C5B7i=ojmVmc0=QHmdQk&2KgwhbTPO8E6P=gHBJhg<4}a zWO;1qQ0rP1W->{CdqS!mQ{7GSo%y^jc)Lkf^y8g{;xI|_R{+_CHKp0u+9Kx$-rA_G z`JD(8m6uGgF^J03@CwMBhSLPy*TLDp++!iT7j}x;r_17w86zJ;nxd z&%?M}V+DWI0yDS>lZY8$E&PBb9omggr{(f23j$ze>dEEr;)-U`^e6Z%X*1NmtCfu&*jF|F zx{>b91qu_jb)UK7rd^q*HJ?;RUzXJ_)aS3QS=hFEXWo=Aw*8&2?AKD0F_)b-8FRpZ zbMU@e!mhRgt9$VM7Q`mK6u?@mt2D)QpeU&ednCkDEMpJ4I>6=G4u&}|?LO@yGU-3{ z_P6=<^42f}QS0(cUxL!~0w2^8Gt=}&F3Dt@|}4K9NKzX6@}f z1&a>7>=&x@1ARZt@QXg9!Wv=jL???7RjTER_v4lyt4m}M4XkqDxOQ%OjGT_;WHiE; z1wC@L`hmtK*LLlc76`LEb4`@EB=5Q-_RD39>bP8CP4?6Fkezl?2SVkn zrl(>M4YpCOPr38xO5i@i(y+F2CoRIduy?yQjERGgONn%(gY|D>?RySmI2MfTNxzm6$2}Fx z6f*jayW|v$=~JVltQDo)YsS%AOG!#&__yr*T6@&^s;(wxed3hR3f_;-3t%EXpW4Vn zDtbvuF_*HgR=LkuDV;fl@>Uh+8IDV@ZQ%%s3};?XZPN}l!`ey0P(`M}F2+?q)iTzl zt*Hj{dWA6s2Q2^%`LvNz-(r3gNlhZkv{Ow|LG~#+^VmfXnLIf!5X`$2U1ED)RP{Of zjWuRZ3_9H7vl7CFeVJq?TagigNe8?vsXpTqmja<4f-47+Fm&1$-Nl;0BI6rMv8vx3 z_h~wzb^PVEwKkOqNojGDv9yMens6qa58GmSt)4DCI(&y zXC^IpAT6UR$0Gk>VKL|YBFP=ZX3lw=s znH57JKM(m&yM%=X&RFj7t_xEJOXeBO8R%=)=?Zx)=9JZB3^cOgMp2P7Bw|APwXcX& zceHr>dAAaXzvFpZ!nSxV0F3f2}BypcJ zR({$~SqaQU)@Py|l+a+nQ^WG%0X5_9j4-`XNdMabspd(Gub{vSQy*6~^-M16N*9fx z(MdASmszOg^-14LfoNg*Foh+a7 zIzhsTIYE@Gqh*~AIHK@wMJb4B@)(1HbGDdLSsQS#KZ`4bj(8QX7cE{QeC@E~aO zux>PF?8P&6ifZt8qdX%$6i=xUArTpf3BnH>Xg`hmG zre%+4djD~wQC|W~!|1jD1$cbifwc_^ zouuuBCcmC-8L^IR4d1L9shg0C{AT?)wi=8x0MzTg8KaAd_WVsPo=37)f2vnz05-tD z3n=giA!s%GL{{%~&|J2_A3n0}f;zo;0IusgyDqvF-j$zO10 zf4e?OErd&i^+AkDLt_t9Z*$vHBdA#HY}tm&&5^&xI}^yucN$){_35hXBO|OZrT4<3 zdWF_SU=WL3nTa8pQN(H@XW)3Xv+?}SA6SopQ|^3+&K@r?k!1%UN3xAk2C9(Il!_){ zZV%;)P^myZ#9W;tpL8|y1j*Xvp#MZxR*$3*%!Mghp29^xd z#UMj^=@kWc_i_fP<$H5}M-5wzwo_s{$^Eaatt(;N!8tMY?>(e@w%Z%wvMWqkOt}kmGv2Sg$AThjz zs_VR?1V4w+t<~9Q;*RB(8{c?&$Zx8r{*-(7 za{Tz60Nt?;7GAb1i2y=#F>AamRvr{oZI6XcCS;ABD_?}ofa)>zGlkJT7+WrE;Z{f_ zKI~OWMjW|%IYn&L6`|9Zc03lvyJ}%VVnQ(|r`k7&I2i=eLevU8yHQ(T-f*%&V2GgZ z+o6!^^KoS?Q)XT=7wncCkaH!Uu9>1OXBH7YxhBGp9@J zVE+b^x6y>D?@=dKux6VsHl?i_?##}HvuhpSPOP64jH#1_><*b%$;vo4`0%i>d*jgJ zbeE-`B@|8x$E`MURfDHw+cit6$nmYqREs`1*xtF>MonBYa5^?w4OJh}sdM+WZH1~U z;efK|je3%^XGZ0jMM@%G`x9<|b>5w%7%Q$xpTXtCvGH;Ar8LGrw$2!Rl`QuvImc#b z43~DgLZ#SX-rQ0m`aPL$gM##ORzQZ_%wln4{42KtE8=A63t&Rl0Olb;-FhYXhh;QM z?C$QS6~moj0Cc{8gqjbb;N0~c6o9fZ2j^<%@(qw{HSjI z{`E+J!~O_VDQy3E&&NpLP2Yb%0W@PkK!EFCy8e$5{y z8v@X?+fhYB;L(rz)wYJe^-pp#vXrQp7`+sZ{(t@{hcT>BF;?Vc=9-F%D#aoi7-f%l zG`{%~3ZLv!dHZ2VXeaTW8XIZM%^j$B%iubPWsv=PPc~36wWSV^%6lP3V3nLWk+H6! z8{r5X+#3Qe3yE(tURTRDr5LNqc$d<(j~+<4xJK7KPu!`eqLe9?XL z5{T2GHcBi4djY>@@qYxU8&CpfVjv?~|K-5~06i~kZXWyW!j50z#crSEm{GAD#$%;1 zJ;Nryb^Znk$0;39($LU=U(BdPVn@p~!X(eTSotmY@;loVlF0yOV3NWte{t9K<1&=x z%yI%qsrlOfk)7?@fMAVgL+BJd@=`Ff1Z$!2)6>(ci!UmsK}^7CyQKrj$ih!{s2c6>t9*DU(tc>*JQ;Okrjbfcfbm1CO3r z`zb_O&p{)&GYEu|yq~!JE{m>2&>J?ojq;%WBk9nw_qH6Tf=|^V8zRBDF$y$R$>VEX zU7LA|IIXtsve7$V@aJTTSFPfC{Z<@X#r;b#_id%Y!TV3u)}g^jEUDAxRVbG&zOxH< zi}rP1GED~YCD_&u+?xx_s!k^oGGjR@CDT6^57hFTb+pw!diJV8ICrscTI>U0e)?3t z*ok_9NDJl)IQe8%Em{_LuT2`wUL{x7dS?#QjxYub94&$Dw7s^Yndp?6gn^Z7!}(eD zvVpqq;E+Z_{3btzsC;`D55XSAV_iwk(n*(2Z?t|jR+rkSny3BIfN(+Q<|888?Ae9i zLqjbB=)N3b6VLRl)m!}7agp*X2TEx70QzLCbd&Gtp)?!}R@Kl5mQj%#!(-qIBHp*s zivH3%H=9>d?`C;Aa)G>8E@r30MwxH4Xg3S@pe?z0VqIHcrd1(gt1)|ov}Mce3ogO6 z#hcb>CKi55fqL0g7*W&uB_=7wxN97?V6Oa|c{xr^7`5K_0D)jveixW#1l<4r6!$|u zqUXsPOR$wvBpiZcrtVJ0`Ksb=- zP$Yo->nq|WGu+du0XiV8-5h1fV4JxTA|UC^yI^@fT9FNHPJ__x%W8P=Gm@-?&DeD) ztF3J_gK^IXWR>=a%w|oWRC9mUX|^oHNmpeWWz^#^vo~{RszfK1y^mK*t~v3v+jMySt2Or(s0QW$1u7C#P6cF zRE~Q(vXUj??oD{S>R0q5DkfXfUQ>QzcXuVF?QuNNNMVzLp+9q6Neos$`rL>JN~;Hb zfxqC`bwjGhO6*ZgJ{5F#Df`WPezal7A*fv4i;*Ok2a6iDv0~Th>FN*xVQ%lvrwZI> zlSM`Oy2*3U@LSS`H4yJZZ7(O2$OBm?W;y!Bi;q79lAW7v{65a|TR3}OQ}OKrmQ@uy z6+20pPamukV6$<{yh*5iORAwDW4UhD54!$mGt?`%@7oh$X38-C2*Rb6TlHjGqUv*c zk&>hgT8aTEb0FA

VLMo-Ushll&~4_2%4x)btz(kEoZ!&VMe^dvMyt_C20zFPE9E_Xh#ORtSpONc3>g%4b*4BcOivpL3hFpZ+(;K z_cau$K%Fl>s(ruH!O68GcnMN-(p`06$p+|&m&|E;l>4Y%87Hd;8qx^n5Mzbyp7SYmTJ5?0rKdYOcU|P&Bx@sL~<^V4t|A@b$qFgp|D7LA*uV6uwo#svI zWoAkTatqMpQS!zScD$^?;E<$mK9*~dz!ImRP#iWP+cbM=M7ZpAER$4Z#mB)mEeWgw ziizfqH>F)8nTdEfTM|Y|aKxK3_sx{bFx61pC;=}_m)-;v71b`$h*@cvB-X1=18lC@ z)KIc$q*rU}v=dIAom~-bLJRvUuzrX{L2!I)@e5Gml_6r(ooMvJAJW_SV@Vdb*n ze!u4aAUzB%9Q5#`N!>gIY7kvT5UzQVVX2Ua)HI2$sf%`Be$T`_Z&~kemJ!A9-ky{* zstA9n!j^Or-5J)@pi!QgIgy2ArhixC^JjAIgKXplaBq1A@#r!*?bgwkhO4y8`$KM6 zBa$?ssv%EThRw zLR=~5%X`P=rhdAdyY|%b74NL*t4SM`)8k}~^v6D-UP}R4^EiuNBvETEVKKnufX=wDQuTpQN2^jA-;9MFMc=Say+^yn<{N;V!Aq08S6Fer&* z%_bLU0Sy|gpgP-=#mU|7j~HnjHu>f+BPX%Zpk{ax=JD56ZF}5w2@inzk2XgS*_KCd z$_Ts3t{+eh$ad;icRj`;*hxlg&&q_QPsP~`NCSfkT%L8#1(MT9%e0S5zdbYp2PTNO zk;d5g!+k?eD9f^zsHpFjfJ_o!~W* z_5?lZKrI84ERSQp0Zoyq1O8ZUgxpBQ$gw`?wqIi^I98#%Vy-gKdZ`!ISr$UVlC9?si2g_o9zCtQajal`GIjTQ|g{FkqPL@}rfCn|Xi>fN5o4E3z=hu{={8qkT zDe92$5e6l2$&>}}$={5D;BC;Hp#kpH{^!Ye^Oh%=4PbnS#@8a!brq^=CnFJa?~*!+ zFQ_3NmZrAh;9*^cnjv6_%Qa$=-(qBn00`I10}?u5#h)O>{ZfLSP>SBZ4R2M9lMFCP z0LsJL`Ey+z4%ifX-|hC6xxu~qP;)WcLvve7*ZBCkVh&sh-Qs$9lY-Vd;0bww)i=U3 z+r#XeL@!IRBedyqTd7);Mi)ro)#>h?;YD<>rR$gsQPcL8R$ejPTS@17JI+=jTi%gs z>R&ZAeGd2&I$r(FRzqm8h!toKoitUHejtFF_QC;O0SiFTD@5p|0^AOXPvbkW=!1)%_ERGd;t9JkAmf`3KBCMg_LnYyrs& zm~pvP4%|EefWr(}$})|V*q3y!Hka=Rz{?l796@;u zdIP)ZOI31HewobttDdPv>R+P*wfvvjN5K?*WGoSWZfB}$9?9y1$(Rr&(Q)X)f$S`$ z6OD%b3Ua;O0^ez?j z-aq+>B*_w*a@xc~;s>0%1w+*%`}B`qAn3Ei+C{j?5EJMsb-l9V&BC>DjQVrVZ{ zG~D2U1QFB|^=dpavgGnwhd!nZ605DT=&_f|Uv%hL9Z(+{-ZbFv*-9tp7@K^wdR4sj zx~Tk_9?5~4ajltTclX$=<02wUB z7;plLL1@bEV*|fA)$OA{EjQX6>E*sP^jN~UZP-tz+b)VS8khq0Kdbq5pYR@#vXjw! zeMv9m+AEvxl(vqA1_rBfuMU?I*+kOURwk;dETPXtX7#Af^?XAx&sr;7FSAXdIt;Un zMWwbpz6cV8`!);akeDaLl>1eaP#n!>6`T+6@oChfkBuOdlDoJtEho&6BWbeR3$0hL zu=j$yWeokSY1c#j zPdU7ihyqwzb=`js*2W+PdXcHW4qHYKL#^83>z?mMX3~e)XlLrk!QAPizM~sIwhMUPw+Lv?^KW?Yl!G!l8+~q`0a6D$AayL1+qq(F z|9bgh^{c&9Syv1G)5^ZlqkL(8aCG@2u-@)j>sVfUIzI15zX!&_X zrZ55p;^)<@$mt|4!A76cH-Ms6PL`~5FblCH&VZXs)4kJE6X8X7@y0^02XP=ITc67|-XwcC{P4@R6?!%Yb_{AhlltuPM?SIa`srU19-H=4V^3Zw z2rB)cb%O&pe+E+Xk{)~K`B#|tzH~b>dDWse`LLXt@~k$M?!VwIP+;RAY-4 z-qsv0mf3-fzT>Lb2f=xtw$kel!1`^1Y5s&f_$~2s#ks>V4jMQ~1nxf)qI$ofI;E#d z5AV0YSwB#F4}_#GmR#FDa)adC7}mFC)MsbJd?X^Ce>gm z>X^6-Cy7%S!VNf=GXLZFG6#_Lh#es#R64~PsVd2(Unq*LgV&(;`f zd)E>LQxuUFnXIFb**x|}6#PTzku|m7&#|;Wfbd$hrJ{mM)ENsX&ur~&8NMd!d`be? z4z|I+*p4PmGrwd5G4OcQBZ~gdBXPuIHs1$qhX1wc9Od=vjT&#aND6KRLj>A3K=QahooE% z+Fyb1FzsqNOnacn$FK9c6OP)M7F;&B!OKp^M^noZ2i3O-$bVPOzw{RZ2P6jT>rhOh z{RDN{1t+)ACQiK!r9A0TIkfx1)rsc`za^Mlo&SFljO(o{G0?Y?(}B<-Zu$K0<=P4< z5s!T4Xv3Gge`A62`G>X@RQn9>u>lBUOgjSb1tGkfa^})v5+2=yOF}9ZnJ+l4c(*0n z+aLl12M6m!<0D&R1&7S6*=}%CZVA%oLm$0ovIOLjKZ7d%({Q32t^5Kw-Bo)Kt6a||Y^%K)zL=BC| zZg6FPtSWcRn^xA~*%Nw!EM@Pzk70EEKZXygvNx6_D-7F*N{wfa=7Vag#2ryn)wrjI zK8PrB|<>I5~eFIe|TRGP^}X z4!u{v>4Z*JsTqZ$2h@hWBDxq3V3^a@oh%UJwz0FI_8AjFHjH|rOkwn>PXR zsyKYn@=^-km#x;3V43c8w#QO?tDmDa)K!a10&_Qb~N#^JC{`f48<~^cj8AxE5a)zm%w;)J#5Ra8*Zv;j`T?-nK zV%sn7+O&4ZFuy)jveURwW1ZX62hOkGdMR5&ayL_2<1{w$}f~C*@MHI_B9w%dD7EW z&GKYZs??`IR=Kp(+@5>()M0?>iV^6l=r8%=vi~XgxVyW5QGe75AT~c|0EqpwzXa&V z1BNV*`iuIbAX38j&wxLm!L&d5mj=_0GWFlIAuMu~$Lrk%1O;7yWQ6UOUjdor^<<;Z zZoBC~9tr0zm*PK!CV)1Y;76%biFhIZ@ywavqy9s3dX#4TP5$w|fKW3=@c;gVo7G~A z14)b1`eOmh>{mOq0?Cq}B+vbe1@bX&y5&^FQOUztm?8vvd0|RyhlLrq&61keV^q=;-Jq zY4cZO!UAXBB~`n|&oZ+-pY~3v9CbY@=tUfZ|LLVu6!#y-8>XmQ=|hfzGykQQE2(_% znS1*7T8$3^(Q&*ciebSjSS`a{P+VB~hNPD|f*stbmsIWkg;^wU|1FJwB(q42LWeR% zCR%fYQ_%RFliHu>J9nX4UXjmTF z)<;Mc(DR`8(_)d>hQj6$5fJX!NZk2Z&HO2xY1e2Q>>OVn zd@ZgPAX;{&`0r>Lvxs6+0)*~Z*3gG0!_c7&$D-U{*MhX`vv*6^m^NUri*5-~NH*4v zv5ciK#kwjCr`2GY*cg|#d*a|xR^`@rV4HBWHNM(@euh|(p7O>v)1+48sO`o1TlCM4 zRv=2vKgK$GIg{KCfr_aWB^-rjT9E?s0;B!V#u|f{Yzrx$3U=!%!$SeH9bwR`XI^fs z3L4r+U$zH6u3A?V`)V3hYv5$sq)BuAUwLNbmLgBjf9IKnxxL;FnWwks>9iuIw<^VS z929i>75;$o@QHT6#+qmn{Vyz)ZhD=+-|7jn^B_t7g^0!bz+A!3E*zBz)=1~3r7gv@ zB~aIz$|3g|L6ws)w;gY`Q4VK~5UZBC!lpd#`wyGmOcp1RnIVofKr$06=BpqU5)#x8z6bye_>L|H&=S|D`}pwyo34uAC%oWptTPKi$7m@Ka8JJ+S&zb&Lf6d?PB< zK&s}X?f=2LU||dG2Lb}tkNt0$3RkK?`~I8swr@ zUZNj92D-b$o4Wbs-MLi_|7Fc%pRqLIS=&NmJw-U4FRB4CrBnn=IkjSZej_$q>{~sU zGN_WodpN}LOUdoKK6)piajRjsCxYgK^biYCP-8y21Huv`#QjuFUYcGBmZ;V@$r%?p zvOASBzh`I4SzMHai%%~6zi~=W-9fIR8pZH9wD@%9!Z3K!wB-gj60dYNkWs0eOf$^W z;mFXs)ddndGpg{%Pk;*;YLFxnd3jHt3u-=-kT%e~X+Tf`8Hc`Jzr@|C9tuZyV*vd|M!!j0zZKI7? zM7C^l57SUKr!(Tw>oNN9pXX|@#7J8(0XdChjyQ`1T_A|s>E?zj_K^tyIcQi6{e#$5 zsUh26kA%||+(!>;uU{X@%70?L?#4CRpH57MqpIPSRXwTHca4wxmuJu9|K!^?NxglHLlpsWsHJW{FVElJnH2hV z`DsFnbXF1D0&c{Q_%3Q^ri``OX85`OqZ_j+rkfB$`-EsuyQy@}qvO(*GxbJXPB0m& zB6!J6Z*^Z_bPDUs!{KZ_FdrT_Q@EdUsIfw%n$7eOxR@zuz+-+_G3g+tomLXkiwe+Q z#{l2x35fve77xeNt)7AZEZlNS@ouT?9`?N?Ci!bmz?}jCdHxGS*I)9_p$`;NAst1t zQFlq4h*9@5I;BRtzZ#ySq~ zf6HwD>Er{HIoxK3#`g13WiVuNc{wuY>(yaeyJUL~`f#@f$f3*Qv>y5tkP^?7fSEHw z^We9^rBP~%Zp5-SgBs6;AIs`G%^LRohaJ{a@v=hstWq`|U6iNbnmKd|5j{<6;~LjA zI!C7e;^mv`NrHm-%l$H~eZaO((aPLXgVW;L9Nk8v;E6EVij>MFj_^$ zuJ7zYgl}c%3ZQia{uj#0I10D}8F0h~KYIg_paC{HYxcitd0*B3C-o$=q4*qG z(7zYdDjMd^i5lDW6-tyNTm((_^S_l|bp-E@60@h_2H2|y*q@iz7w-^`c%G#oGi{t* z_MfP^mev$}EPSf<1a$qyW7A!$4sor3VI_8w7uIQ>20$vPOhg3_+re+j4=oKl2fizR|>)mc& zE2}`s@{k=cCN+t>g@t!dQ6M_Ky*SaXON#gCp{N9(!)G{^|Fee%g(IxYq`280k@_f7 z&7}AR(ckp>k^*i~o$aeK#6zQgsr1&vLg!sCQhqy>2$im0a5As7x@HbEt@1bxxxd)q zo(Av}s>;Sk9&TH5jCgHA-bqz~M^#KtXG+oa$d--COD1D_l<6=_d}z1Ng6SfG|L+z%*p z>dTqmo(OyiUEq!vj0LhOTRPu5N+^oW6`_G80&!}DYB?(V;jU?5x2%?9uVlxNnh;#x# zv6*5yRA-jUDR{Swx(j%@8o5!pq^;Nhu33uim5CY?3$Z#zwAJ&iy58K37c^e|sjO($ zPRicFyrnjkQSHS!|Nr&&-BC?u-QE@uqzHmkDS`?j5Ty4YT|~N4l%j?%ihu=>GJ-TI z38I7^>HvZuMIlJBP=z7%B1lOB2`~bom=IF#6PS0F@A~Hb?)~Rp*5bb>=j^l3KIiQE z+ow-!Og3ln3pO83OK=@A59t}ii*;Y_s#oJQH-GWkWGhSUq=28@6gD^95*qwwZK~(X zK%7KqYpO(b=S*e`H6rxurOXP&wQRsp6q4RI$?8rm_kLi%qh$jC`Z`PneXjHaVw&#A z5!Ik915ZhLl!XBGVtkCdZw;yM-#93xO!=9zA_Wvr3aCYX@M;jz}Yk zMLDp2!@FcC6sMT&GNv_>F(c6=Sn+h99zsFLw{w#0oSMM`OEQ4;olQ zLgVnaE01I`Tpbx5alg*J!CSP&Z8ARy6!$SA=u%w2PS=iJkEBrb{pHo<$^znTL)CK1MvMO}SbFORmM!hA< z6k80hmX2NoLhgXug!DfhwvsJV_U~fI|CZZ-B^6}y{z{x2fL+hvl;_gzzgJRIyuS=V zPpSRQGq()eO3BdPLwVpRD*6z`*pZ$Du3M`j40?4~w7FdII@$Flw8&eYMZHdVhR9_5-dd-FI&7)c&)CZQ8GLNL)qKl%8j`%B_F4G%P zSQg(-Bb!ryrwwcLnMCX@G=sUIw3NlaWjnouyHdql#9ODbv;2gb|IxY3H~yGcH;;Tb z9AAH(ZyH7?Yex~4f+0c%)Iyq#UU}Py|FT~4;pDhc4X6F|YB^SIpe0OAs+h9MF%>a; z%vCl$T95g}q;85~IGhmmad*t4S?4};bxzJl+2~%uLA_<^Z8+J2S{jf~xR7E6q<}C4 zmAT;EyHVRitJlG;Q4Jl>G{P1jD-_9rV8>)TnGsqvOI~ZmM37E$bPIfN@G-MOv+nPV_CJ6+46)CMs_QY=gd@rD*^i6kv2S`6 zn8q!;R|0YxZ|Ax(33F8hoR9eyc^@*K?eKOpS>@*u5awbv_tVy+Jq012#Cf>QraE0w zdzHS}tM?Iwh(uX?aUz@k6RXN7WTKw~ekEVXewo@4vTB=xrR@u4TU)F0aFzMnT6f^QBVpO|`tQFw>w7)OL# z$*RXj(xR`CTHKn;Tf{yccKcmvHtIXvZT5!&wJ5?ivV2eU7)!2YyiZdesd3;DR_S`UkDp$skT%8P zts(2dnxL6@G+08V!aiImS%K}-5R}*~v)kf3%C)|wsHGOWMlZca;^OrGO6d}&+0&Yr zf99cbm96mM#WdTta{9i|xC2E>jKgwjz{o0%hQ*$_H`DASd0b`i%x)L-^u5gLc=1Rv zH#&qb;Z*Bxuyp^*4sSGRM?8{m#VtYz73LzlIVvS$||V<~nmRNDh%LesT>RN}AmM6~20aIPA436pGHvhbQ!4^@KyhRdhL@tDfK z(8n$}KntI0X(ejrz;{|~!)kxLWChqb|GpiUedBG_iqfA7OOEQt46WKQ=ZftB{Z+KFAM4Gup> z$5`3V&r-_VBIv4jt4G}4aN=^6tK)&g=|S(%__w?4f;s`2H29HUGqvjawrc(E%;$Cd zImyylePZjoMtVWGMyYYk*A8Oo>9w1)yu_Xjs91#QsEtvW$*ix#_AHT!vS!2`B7LBm zC@*6}d*^2N@W)2QquCJl@88e+2XuIeW|bUp?!+j#b@(^weYC4~&3+s~sq^op(c{F$ zP86no#wfHCzH}m96JBe^OS>aaw9-l|)_1oL{%9r=^xE&7-`pN^e_yrp?4R!83l0Q{ z*x7G!yS=0CzSyplO)<}Mq8-vi(RaAsbQBTG7pkN$U9OKGIMQ1Jx<=RjeiA6mQ`pIR zpL6zW==cmm+fp#SX=6n`cZwg;7Abruv&etfjKPczdY)h)@d>DgatiV<^}-J%FCqkn!%RR)JUX8?85aZvy# zc{`Ozh&U5<=}c^Z9W7Wg))8G88Xh2$(5?Z>`g+1Bhc~eUCOE!);eLRQL<$r#4TKM^ zftL_~fgHPdhIzYvb zX!)jfiZ;bkKXDx6UUR>H|Np0FD6~;( zb1r&E_KsFKoIP_;mbnGR(4_WX@bv8`>y9h38tbb}I#DS^y^ri(Ri94w%$3v$H8*n< zMA*>F5dU;lKYKhA!otEO_A>2~QfB+RJLC2u{~~o%8{K61dGud8(OY3@*;OsV;8cO7EmdnPE5)vLG=!l_pi?bN7reGeBn=Z26YgY_ zfOHy1JKIyTwvLY6Zp7-erY1i_`yxBq>H>z&n0V^rrZ*g0gyPm=*Ye3rTmj?pT%%UG z!_09J>z!fL-%+=*~r52dCbF*^U z1NfHz2sLui9x*D*se2m&XsjP0nUE?75>TU;M;1C>4|iP1^S{QxiwwdQAU`fEldFuk zmR@9FhR_ur5y$U&-E)2f3CZsBkXsU|tAbNXHIRGo%*Cx& zuDn~{Uh9~KGZqI$qL|?qsw|oyGTWLF^PfYKpb2Ig?=lce@C#B^OUuFS&(ZTU)|pss7R{NnQ8irAA=x0qF>Uau`xlJLh13GD2$ zu54@$iBaD17uVX9F z-hLL0Q}8`r=-fWf)1NSY+1VR~kD+MAY+2{Ml+c6@=2^efx^HHp(233Ce{ouC&G}J+ zS4bihq?k@McT-6!;6d1Y3o`F&7qpU%jN9V_(7|e#qh=1RJRBjaOcoROMV)sm9U(Ks zd&k2v=xN5ylKLe0dyA*EX!9t8>=YkNolcd-5VAx`)kYdsp*1>`6rvf|Km2TIIz;BG zkA#sDSw)Iw2->{XG6{5*`q7u%5Ol8`2r;RuK>|5Cg7bJW29VQ^cyBI6I3Yg>XrZ^D zVy=WX^tcrITpj`hlK|!uGKO*0VosO%_z~vyBPABiJ&F%mY`>lXPmYs^k}B;I?FS-W z`Jju;;0eXt5=A8Ja;|8Dw)%BZgw>FMU2Pk%SXty%rSfFl4tpcacJ~SXUX>4ST7OYV z>_G~ngOjICd)#vU*Wp2UC`8b-L@Xc^93-Gi2!irUnfQnl*SLe!#%nXq$Xr4rwI=6m;Vj%; zB}wug|4w4xzpaRA)a>DaLj~nF+U`%r{k_;9^daa|Am&kLbe9qWnZ%L{`N_Azq?{-T zcAvP)W$afLQK6))zpx!Y7?!2QxFEH?L35~E%)rCmm%M*%KS&w8##+>ihmjbr2K>^J zlLkSe3=-r&yGFD?8!3izxq3-s!A|qM70zjt;Z~6oVRVsQ$XU-_3uDov5uk(tL#{V} zIa2nXe`c{>B(#Jk@SWZpxudY*9LN{QA1Dwg7$_7d9C$J?XKc*Ad27g=;fEOn0&P!# z6r2>!lWKG2rFowL?X$1CV_U&)hcDPo2sS+$Nsx=4+%S+>a7x@ zG0rhLz`sbWb8JrRbnNmf9{*9cx;aXHCipOwN^SI-Z4C!trQ_r-p8RdB%0<>n^6(Q1 zp{oXHU+E+?$pgp-a9D2_CUVKAr53>|V0Ew$urIJ)*f4Agh6!$QC53^3UJ=dPV>cR0 z>*{!cB+{<_TliDM_mRUy@{ezP(wD|*Sej$UAk{| zdvyDB-|Y_A@BuyP|;tO>@J-1u3ln0B|hOjynMb$kD!Ut*#6h zC=Ed|(qcohX|f~PH93$Rnw&^Z&0{})Xg>Ngqq*qL&6@{^1Bb)C8}3k>7j9plFa zy3@DbnereU<^G}v7{+k-$yT@lR&H-!lz@Fv!)lm9#X7S6TV;quMtMCEcC>}OToJsp z0AC1S1^WA>Yv(^aSeUGT28_XA03I=R;W-H0Mp;m(J6Y88%es;V^D0RLO#*kx1*#WZ zBF^a;@ePm#ubDK&I_aK>-*+fV04?XDl=g%JAfjn&pS{-g(pF*Tn2bz}=JQuq?+FPP zw)yCfJy@U9calheDmJ$>W(88)U}>;y*#EOR1HUgiC31b2GLbl4(FvSbhI+yi$P<_b z)GV$ZDY`Mq!om`SHjMmYARr!&OjKhX?8hgcRKLvV=+Vo56Zjl(2(fk>nR@tco%K6*7S9PCZ=<3qe3Z;Ce`w7>5xTb0J&NVA;YR{xN`qaI{;uTff`5+pOE7 z4_&mjCQ&NUAkkIe0V3P+4Y!-l&Rrok58EAEvcJG4y7V|$7cdWke@=QWWM$Dx=iD z#ZChf4}CreDLqO)4Izu0juz-$+}q~9p>_?gmCZ(Q^{|LlknSHlD#WzIFm@O(>?G_o zOm-i29%c@+gWZ5Z@R4QCbZzIYw+4Ycm|W+5xgd9X0?y_y>{hv2F;DPn3eng@^v zG!G&VY90b|AER5tj6wRA`uFrx^s5T!qE><2fyV(_X<|hrSTFwZgQbRAD_%sVnuZ-d z{(OlwPv$F{vv{bI3Uw71K|D literal 0 HcmV?d00001 diff --git a/images/wiki/windows_nat.PNG b/images/wiki/windows_nat.PNG new file mode 100644 index 0000000000000000000000000000000000000000..121b5caeedc0a7616d2abe2d2d70d24769a7badc GIT binary patch literal 11376 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 literal 0 HcmV?d00001 diff --git a/images/wiki/windows_nat_vm1.PNG b/images/wiki/windows_nat_vm1.PNG new file mode 100644 index 0000000000000000000000000000000000000000..43af45e244b2334bb08754950f624d6738619bee GIT binary patch literal 33890 zcma&Oc|25q^gli=id2Y5wn8LZ_L8kZ$i8Q^mXL*mq%=?C(nU7|f6v zOC{SdWSOyy;dk}^yuY9CKi|jW_s6(%@7(*^?m5qMp68sGC?f-{3+Jw$1A#ynbhI^0 zK%kQ-;NwYu2DoxRJ1GS?obWZ#0)uLXxR-&G)2{dR?}I>f35*9%=zw#E=h{}jAkf7x z$Db2DUS&=o(CZx?jr(Q+_N4Z+C~jO%EkUw+XU5KJt;N6F|6BW9^OIEuN`MQu)3X;! z@2MUrk^!_oqnC ze>yWDf9LxhS?1M2H?*in&WVm4%Xr6tAFr{mNr}1dC2q z1#=BlzSQ=7qkHxD+b2&p!~N7QoOcpW$>AimAfEZ3K!shs#5Kq?&ubdgdJAuG+`=X1 zC$!GP^`jn<#=wF4UJh%UHk9^dPW|ocwpNJnc{2Q3BLyt}gDh3m%5R)X;=W??)zZ<+ zQj@>{JZ*GI!kZ^<@Z27l>*fR|Oo~7IYMoqh#q~^M*SMwqJ+M$=$MSxQtUCUePoV6) zb(5Tg7Y@z5X458S%ht%llEgH?HTsOgrOzbi$)(-bc&L7DjX*vdhVq{px-Q#zVWoS8 zA!7P{#*7vkdP-gW!M%x%<5j-NWcpZ3v;oYBynN&y8(!k2@ZrWS-NSH;Eh)deJ(vkW zprAxcIcA%u-=@LnVa|`oU4^ClDie>izfp|a1LiZyPEBi%5-`l#J5p(rAFIuC?@5jY z62>3py(j#poG+jF&V0Nu58rC~p`=AoZ1^`fy9M%%15-4d#aXQfJ(kbS*LWXQP78J4 zG;Gpud8=8iHVaRc_V|spExns3Cw^tCo8B#1$vBp{aw`+M)uij@NH9SwJ{ovMZl31? zn$G90V8K6fnuqR+arUR&)E{bNFMlMV@7_e{dN*GK6~*{hObNQ)lPQg;g0ZV7q(*;? zhqQ*vH;Hd?zgdDZbUWQt2kqV*?D#@*=ZzaABviS7vLAn1B*Xlt`>C%@J$|9u@WVu2Cv+o_ zez?*~L8IRn%?GsqIQHY|adV4sFgQE?(>tZ8a}R$pIew)$b&&J+grcSSWOxWYT)pfW@1MD-^N zd+xsBoX1PSv)KicHL=liL#mE!#G%^$Q#G1eO;L+ zJpK3>zWsvP`rn(z{?ARNA22FM2U~OUHFNj>>VAs=lz|j*`rl`l*RG+&-)gxBiP!jQ zAOAd>aNo@a6XWw1a|vk4Nr?^#JptDJ`^)sQJ#zY^p8orfdeB&xdvyO@-Vj3RZ{D@I zuIZ-rKLeQ)p@%a5JCwvVgB##h@5!!!8~24OoSz`=JE|m{VRDzyIz+l8O38QPyzz9t z(`46k_zRjA**ft?q+xEGCf4wsxIxIMm1LT*p@q#e?|S%XE`|HwY0ilphL0z<3f8^N zip82&^Da3HW=L~N7Z4YM`Rh$)m?z-vyf}t_!kTLO&#Jwlq}|Wi1$o-udQZb4O-@+`Fo+#LqPixqT@P8{c&F>f>*Wa{sMD)XP}NUAgd` ztnyEv^mQTpb#O)QY5hJT*5guN+yG3~#34hAM%OIFJQtvN@$b?nZlr3s@rCSu+6*6m zRI=_5ON~UImhF-)=NLLIea~1wmfh2qz4uu=?>MwFbc;RwY3xHc(}7~8OSTypJlXLH zENx}aD2!Fd?_XKy4T!$8N+|?+nLjda!MBV3f7TReL`PVhyA?wbmAE@dGkPbUyHR~onr8r_ zR6X#eX~^c{V92k%AKsA7pEAvoXseq4mMMS>NwTc}eVhDAOkG>u9hyoID4WpW+q|`p z{2+wXf8bIW!aZ9R_P=s@pWx#b<97Dd|6I}J_AAZt1G_b-{i`1>_u%1_^fY=Xd;85u zdhuhG={D_p!q);<4VP#9SCooc1uh01*-h}Hta?LOk5wme=<9rm3kow6stRTVlovF8 z_TQtjzA=)Alk>jYiDT`j-n@kpe*gUB|Jc{>P#opZO7> zkr)6XKx#Y2W^Npk_Tm3~HhgF9ML7F$S1kzz;Gl7=t4 zpYI~KP#Ly9#(_Z3w|Rf=p9TGh1fH5t6J@c!**zfH$*q4PEN1tJenJ%lQf0f0_o%gt z!GNWht;2#VnDJ4KSrwe+2^x%e=Q(LP?_bi5Qd#5&BOwFUs-W%5nh}1}EjBt&)&nZjSK}u9szS)W| zYZ)vJH|ei3cCd6{=gQF6!((4KaN+8sytA{iuE;*b>Fn1LaVyI->89#H9?;taLNa=&Q7$KWio@oEnp1$&xr@S(2P;fxKSubJJWhX5^0&VOnm}sI* zs^DU+wYj}A3H`NK1=IK#&w9N`!GtZGz3nyT58d&!1OP`QPdq}ziOr(uHgnfU z1N+vgj%Q-avV?wAVC$>)K{@g7TNFi5e(8NTWZ^XwXwOU%g|M^sdM^t$SpL{NQg|j{jJ79elv@PpQPXaV$H5PMmsk4cz zul@N#owxRd^XG4H=-o`PMW$^%en0&3`Vf7r>Ma)Qxg)Ew$VSwas{{IbjYY=8rN8S( z3>*@+_D8!4OP*XZzL*%~H&-8EJ#52wD7})&cL>1_*aN*t6vtt50~gA1jMXB@r1Nps z5agxJ@FsgMqYIH2?8EP5-o98424otZGy1^oXu;G5X5mKXTO=ok=ZH#{kXg@5?wooZ z*pNe>2)@(*V~O#BW(Ou~QHUSrdGc2v?U5z<<*pLcOug@gt)y#njdcFvmn*|b`A654 zi2?-HCXbJeN~!@D)dGQq0#%EsyB)3csFp%PsmoABNmO0FPy)*vw&qT_kiF+XOyV>L z$}krrL+Ag;{ORdUu$MkndTL24ckS@7ab#*IgJKR8B4SU3srD$A5+Cj|-5 zSGpz}jtE~$feoA}^y%nj#h=)^R@&8YJ!!wg(niT{j3hSkH9kbYNGX8#&o@RR`M<68 zGvkjACv_?)orj20VuZzvkipZ~CWfT2q8WpD_K1PlBze=PRet!o&HYzRK%2YjHczfD zjvf3N4?DR2G^W&}1-JQFy4h8sa+YngC!WlG>gEXmX!7L%!8`iybJm>NTJ2YE>xSF` z9xMRylvh{3QTdsFL$Yn#0lI4Rh+B zaR+rbmE62}zwTgln#R16NTn@)HodO_hT8$G- zMOOP=4EJlDX0~=?0Dy)GOgJH}dj1?}`r%zL^|CoNlH{iaG<=K;(>GC)?c2#&N`dt) zq$a`?d5%v#YOIfINK2p;_)UoTX!IZ5dv=j^GR;8}E~tv1=Q zM)Kfi_5<3V9&bR<)o)rsP3P|eD4JWqhMZPp#)rN~9b1MUQMV#2JZ~_2Uw#?q-B*sO3|GlhckIc}=E&2zOL z<9&je2#UXozoriB(pQBML|O5>=@tye*tYaLtJK;)Ff#StW_3*GfM(-3Krh7S8AudB zM#3a3*sMRL;>9vAKSNd%RPXW5C3laUtG41bEoyTkRKY=*M&MNv%*0TwQ*Ar%PJ%Eb zGjSAHtkFtZ^gB44hWzl}=Ax~1rby;E=>)@FG`Aoj1!vLE#b1NIfTUXz0YtE~*4pjJ zIiNuCDDFCJ$ZN=Kz}}|9fQIWM?s6npZplj+X{iLE6rX)bB4T>tO(KJLv|)b)A}e3> zsepO5F=%WomC4e*7T34$`ZwhjGr?hQw=n*oiR zra0-@1LTKm-ZpcU-DggoFs$YRwd4YPFw)CR2qmgeV|I21QIvJpw*Z3~VQ+PWSHI)tR{Me!K49-_6SHH#le#n^k_PJ6E$2ki~ zkt9wcBwKvdKQlyBuU|}RfbHW(G&kSGM&g`Pd_R5*JXD9Gvj~58-FgXJaS70J`y$D3 zii0Gl5p_1?Bi=KcgiFucd!N;^`cL;ZoeWlCf;)L|J*fXgoO9_ou9LUb8LN8})#uOM zU64YbaO2^^=A-m&ADrUfeT%d`d49Ts11V_^CVHJaX5i>B8F~_1&H~ zg6hF16wd?dlBn+vrW%@`BWbeY4$&dH7oP3W$^A^pGdCT6H}X#9=vw0}?yT?@H5V1? zI4N>gG2FsdI+cr*Qg>c1Dxr(nVfi09XgWg+U!@&bJ&U|_TZQY1Ze@f@$#`HCySqtG zi`1){qaV+6@=CT&Vgiq$>=_`!q4W`c!~MWqB`$_jN-`lwTuhc@wRzCOXv{p&skrG#S7yS>&9Myga++8jMXj9a>L zz;2W?zN01HZY=WiuQ{*0$ln$$VQVJ=>eyQ%i=_4bCWceI3=dqzOT16}c9=hvrjwDF z;CF6ogfbe>yciw2x|g=hX2lnBHT1hf!wvUfT>5p?{*1F@;2FQrxQ?sN`e;$m3x;EZ zBM;aGRZlK@()KddQV4~h69@goo#R9?0L{=j501%>e zoo`$$q*hMz9+vFm5vEv)o%0o;IY*OamjUoIEyna$pXRUO{~#rCjMz}^>^O4H6n}~| zYo8UrgHP)#?Z+0)Ydw#&1bw&!SfI%todOw)j=H;>2}@Av)7G=r*9pmWUfoR(t=f5e zKh&_ME|OyG6C536Ialflf<26ngN?EE;N1coIW`FhH;Z1>q2Ma*7&1Ytip~()S6c&%g5K|8_*R* z90hl>2pO`KOz@Pu67>MWSljcDJ$vndc`oj(8lOo#W~~H59llfKgPexZWXa_*Xx!*N zVfJu5Gw*QQmFQrQRi+}3-b+6fB2_W)A>?aJ-l;bmdN{CXmr3@GhF9XKeevfj`d0~o!JHH#KU@StCNub@}GR$NzY?y&Z*s`*H+btBbWUeB=%xva*t z=dwY0d)(ObX94#{wS}f&Mq&+;sJ3^8c(s$$;iSfi_j`vsdB%J;O2)LU z_rn_1SBpZTEhNkio?5y_X-UcYuq+C{d~)!=h7k1fx_=z{yTFsdOLa>3b;+!Pg-Z6- z2akb(7vH&<0dl>X^f&Td!uJ)qVui-R)F;h;oC2RH?bS7iB@J_a<5j!1oXvmn;1KEKdM}cH}qSM09iwF{UkPshSKcZN{(?-7CsZ*NdpU>jRe8G@m@3LJ!#%#W`RAX!rU{`av&oHU_!1YP6X&T_yZu28< zp!k$YjEej+5bTJ$EyKF0n|~z<|3|2G~V>+j{m@vc220`=9qEi znXlpUYBA}t;ns!7@=a}x>iRzxZvq76^mbupHPWpJR80xA-;FTm_ELdTnMb*hZ}*=S zY+vx#b~{?`6;JMZ=UmRcUtV?wz$Ab#gPg`J0iebJu09AfdHhEibZn{tP7K1F`hQ>C zj>B~9%(%cl63w&x+o3%nw4ER zeq&_&6uo2qbBCXj=@Fgw7MBEI=5rivpj!ax2MpuYI6S|4U>DIO* zb3@%z;J$2ZR8&#>y`I-gCEYqpQpf9J{kAq)yR8=s1l38NLa6xE)Y2q z-(>x`(OZ63{PfnyL$I+-NWH@2B8ja@Xx0Q@{OJsF-zc-Jm5WX-b@qN?XRd|^_uGFdx-eK# zQ_y*5M*YWB7JEOmi~9@?G{M6_#~uL_5X)MhJBgh39g$08Aem3hmV|5$OyGtcsITGh zxdCDyUq=yd5T%s(b9empx=P_%u-oen@{a}JjId@ZoC8a0`8gg`V1E)Rr-@DNa|;BE zNm;)cG=9i}WJfdKnHRg%7m&GzzHSBImUYaG5`QPXS+?_ut>!)DRYM$et!fs|?1pa* ztj9@wz{By!)f{NE%3T$mbJ{XtXOH>bacE9?@hrHt=X0efE1oqny;8NUT6&A1+FokE zN6IF;cJ9Z)DLs;vTAgU)Y1*GNjlYQ5xMW|6D7d@#z)Nvy6VDjK%D_+NE{xT=8RRR! zL`7)F zU*pNKF6c>H!t@9WzKV9UBXnrQDy}eL$~Tp!btX*mzqWG{tdS6h?9LWxWR5qM0kWo} z4j~Q(?vD&wmT+f9r`pvTShNmJ8Q@%V@(EqCI;L;BmZ&x|^Cj28I_=NpyC#KN^glgv zP_7f*>+!mXa0U%i)&reI-3G1GSKDGrD|B z#!bcn$`P2b09heAnTo=KDQKUn{h#TCxQ3Ve^BjY%d3KZ^IG0>TtJc_>;z*~p=29Q)433uMDJM#E`SdkwLH#9{kO*1k3@ z-azo83={HnQQ3@S>M)CT1XEXLJCM1DpA4~f$H>;aBbC$o+Fc~Y83by7P!7IVS3_Ko zT)B>_zW?+DJiP!+?WMOWG;!~ zZ`e^ijD@?*#X#nUL&`PfCbXtpIa#KH8# z`fj#WeLqaK1_7&7ez(SyO-2eFS+h z!QM=j_O&t!b9l%U8V!+qBnjh#-^w}#TJr4XM^(FBlG&1Ct_v_5kt1Hwozzz59?_#| z$LzVCd%vboF=6Ie^`*N;5;cY%Tuf`F;A;3B)3XuZ5sOe=Sw@g!>3L+%H86GgT!h71 zjGg~c3S>TR1xNN*u2>5_xJ!P`cLat8to0CcBXcbhyaMc@a1xr>{w=$Z{o$<7^GW_F{-;;jueXO8kEQqAvSnpEOm)6AU+j;l*1w^;BX<)RhRJ69GLw^x~(M|f-V6x_=H2WL&69dE9^Dp(Y;6JIk`Bxjb&8s_b)HbWT ze#N(98&`NOCZ>EkTcET#IEu2^8LUrR5|*sw>-e)(rrEo%m1p5Ubrc}WfutMWWmM+1 zyFKvgV{Ierm!R@`qP$(#?*hKwqJt`^1=m>$;n9=qr2_ZuBw|mU7>iX8!C_ima9tB! zyL<($lSFZ}>Uo4_>J~R=fIh#E@yb@1c{BWxciH3N^XVuTXM2@L?4dTFyPaPSo|*Xa zTz;`Sz<0X4jVjz>=XHdh^j}bHpx_#ZK<*stp%3^pDXgFaBRoBc{qi|dMfOCcC~VC% z!!9&IF%TzCWDChHuT$Nq+(#A{ z@fh*92vmY@=fKYY@^G#{l1}_tW#goJ;-9ksQz-3JEQ2iC`8gMZgTC0!>ihKJ{L2V@ z0S^aOb9R(#I(DWKaN_<-RVylo?R@2YwC#C86Jenn*+MljhNhXe!91IySDg93_0cJQ z{IRkOrfGe&7yPx?7E-?-qYbs>VDYkqpt@%=oK&uUi?i2DcJ%1{_`QgDI*MwL)-xPu zv2r_4{U@W3EqXa+BrX~xE@BFR7Cc8foHDp2Sz+(S7r4JCs4%tn7XISP7C;J}ECRO6 z`IdU99n{#49{C{#SG$UV2rR)>DC%~m#!0Sk?jxzH1RGr3%5q=Zh-u}~TcHhE!U9=f z;C%C_)XG%?PWg%ezND8x%?vybM#lQ&3AxW1Ns zDZ&|5sS~z7P!` z53kDOx{Ka6gkHn`D6Co)^sC7wy9(~tDP=Ve691Q97`jQ;8n}6d{?LIPISvasjFDq3 zL#lHLy9N6rh9N9CBO)09@wJP;{pK(1l3!X$&n(u;1(3d{o9vy8F6;q{v&Trrm^!bMt-_iMVA&w7j`WWz z>@W`Ys`>+i^PHQwCs}lDb?Xa(4-uaqK{E5&ni7o7gf+L%J}`BlNQt5@7Ur7s^39sr zguVL9hX9(?Km2_rVDSr)Ld`Ss>dZORA^6WA4BIy%6>u?&9QM`h??a-} zZTSRuhAqN_ioDN%FYEweVE?hI*7bHTGFY_j^4nGD3ZE%}D^|+eT@A+NCfN#+g^d%{ ztq$L8T5NL=eb$Z3)#s3-Fx+q9%mAvJv{zqHlEGJA*q2PXF*FsK-6sAEMVYM*W9{M-g|`t6_v$w zvqOE=nJUWFi=C13G5GgXwe%gnQ03oj*>v?av-& zSI}xZsYcG=)~~N%*0!nv2X6$AU_-AJ^AyPpWc1mpw~!X^_Ap@7XpORmZVJ!7=a=Yb zvwxcxAQyG?g>9I_7AA1Tz3{qiGC$rxwR?iHY_^vsCto;u#1H+Y=*&IqN9Fz|AM1?J z{4=unXvahB#fntl06zNHt1box^FqORiEluqO!ChMvqeQ;c#4BD#S4Ecx&*s&mQA#-Hili@V-L}7EVJQQCf zWSGnSEuzT&wDY#<1EoTap6j$i{!M|~-7&>_*#bq-G^R3SfO9iB4$i=Z!-Q2T@#7o> zn@!SJwXP`VXPZkD?MqE?9QHph?09DA7@~H|rBOfaY}5{}%Ul>gv@3O&PoGTqKJp&+KtgE~p>~-VgSX-G z@l!6>z(Kax8jc)iP7ynYgFc9a-rKnk`vY@FrujB*A{771{tWH+G&IKJ$t$Jq-1r@gE9-T<8O5KWaKmruL$@19L_Le z=JEUW(@oM@p*W6*Q5&Cm221VVkz<^9KhN4XUso1i(Hg7aaJ2K>PUD}>OJ~U(fyR=1 z8QZIbE0uhMpvKYK>5PTnC&FVD7Ydt|eC_C(#@@#th1Hen5AKiq3H3~N+dJ6w;MLG_ zxs0P0cqa;{eh=d>ce~EInm@vub7W_38P*2AMfs-Y(DIP0$aHfXhzeX$1*fC zaHOfGqn`LZVdU56m1wB}Q`lAMv^~bGOz0^m6-ZuzIalTcl!wY}KK30-rkr_oFL|Ui z*PCQ|Got+P8%eub;PXsJRf}KdWbLHAuyrTSrHJ=o5I?@|LwADT(P%=$)FUk>qiBo- zQ#j=y&C*;5CB>H)qzehR@RZt(DdaUddfsh_Q?=fsj)hi~*f}yn|NN2^FyAQ47C9}= zQ(d}2c_z!xQMWOvP_^$>*0N?p)Ep}hiLK9{PCWE($RD)z8X|m>2HzCuC+FLZ_13?* z%t|iSVq+~(A-8CJF8CE@1gS!#9GcRyNO8~v^e6RX$7@l;G3_009edn#D05HlxvG5^ zZh@?!ttXxikPh62Tpm~4mW+>ip`BRX&{o#Y6jplXpH*S962BcQps{H|Pv#L@ zR0Zop2lbQLz3!EZb|mY@q`=lGP1BsEyNRNxK&qf~()K(wGBtC!(E|3ZzO6+Hi2O*4 z5-JA@Y%aVyGPUluqb(|-wdx;yYfS`_Ysth2i!RwAhqWypaa7M~_CH6ww72`JhQZ|` zjjZ-2)EYl}=%1V50*BwMd(0qq(8A(w=xuHDacTW*2P!J?{J*Jfo}1Gg5+ zy5ht#;FJWhB6~JRsc!*w=VuR}wP9A!syy?{`!z|ORUzAY)$j z+gk3D_gj;iK=@WYhuQk4>Y5*1wit!s4crnUhYpA6(Y$o+jgP3w4#g(-$d-_G^IF9S z`M?bYzQPc$k41(~ci7_L*Bap4x6_k%N6IP}i}_re>n>WFKsDZ+|Jgu|UQ7uQD4MFt z!(~ic%zgJu@Lr2-@2E@F3L3dKXZvo;I4fM|Yg(@d58lD*JYSR$jTX0s~f1pi&iLosmQ! zfJV-wCO0xkQ8xL94ddDkk!;;GL26PRkI&#Q(gc~bg`~#z64)ype2+|e%)IjI+Ba=K zQ1$jje9nKSk^IU@qDUH()(oqD1Xy(T>GNK4Ha6Bnq5RbNvr+VwRWv*WzgS_3dwi`S z$Uf;h>i#zUiZV$z%+ufenrw^SgD)pVnr~e#Z=@#eaYt436u$6oW>J3Sn$!j*Es3&y z)UIFkX$Z;1ln^!hZtWy4kosAMs(gY3Why(`l{{3U#Zl0_gtp~?j<*;hJbo+7QdOei z3qAC&b2ZQL&!EG(lpyE%Q;#>lCjnnMet$2@Z>^gz&;C$ceRI0aFcE_mK)HrU0u}wC zK|kh+ugL@0vrHewn&s}-_k2~=vzHx}+~zkr(IWQVuS35wf}fem(O!j(ZD8mh<(Gph z)CYpx%OR-K&T&%@w)A&;h<9e>4Z6NDkLKIfs`ppJoYG2X`qQ2JI-I#rwYK-%K@ZqF zNaxkfS_HOqth{$2JK}Vse1`V4dDJUAvGv=OB{;?R3y|*rO0uO1lk2_iCN_N=mK(jm z0u)YMY0gnwOG;x3=|gk&77h~7oT)GG7MKrkHosm257|r{lB6CYNkqh}aDdFgw6xqJ zRG}fd%12xJkVt34vX_h@NTK&z1^ZoAsw4cZOV^7-_VDYl_Fc^{Y^QRBnq_ViqhFju zo_};Q?Gj%rpN)L1Vqfr0MUjyYE5hUga=)U$Ak(R@1QEe`N(krX4INUpor32qN<8G( zltd6>A-Fpvdp_&qRHJGjt>`JY*P@i0*hDhtlbsAiFb_3bilkI)((@?&mSMGUI^lhg zhfa^ci@!y95glB}%jI%>JIzFASTDJD$xG?2j5AphC(qGQrV{)ef{=W-LgzHqm0GmH zoMdk3RViFp7VoUgaaUq)IS}K>@?Wy2LBmaQDGbxHTe%-mZgYNc^~De?J?Rd!weRUM z-j}>KpN+reW>_opL)$9VS|pCkSpQNyV-5x=i>>4}pblL8-?o_Xpb18xF7}1)>A&2# zgBh>dv6rs6aUcg-cN{XI4&5^($t=Eqyib7C7QVseHVhdBaeHUsX@71&CNfLQYWaMU z@q1x(5K8hqktq}|Lp%Y>Z#^!ftrszLs|CW&nl4O_l&UV;_~j^W$I1~C$7(Fj=CnNI z3D|rH`zI=+d|9~4XjbWvUk-K{@$yfI7Gv#Ol2qw?J~9Y|0rLJp&MH*^C92_8NyXQE zD$JPgUqxwhlsftSdFNHBoM2tjlqW6ve|4(wCRt_VHsAD0EVG@mCX9Wv=wQ-=Sj49e zu6cKHLPk}zG?amA2Zg^(31AwtcYbXPW#%+*pM!mAH+&$M+OpSCY9ifA{i%y7ct%-7-ywk9B%${Vj5tzDSzdN-$A?S*}p4;qSv)4L}tn}VDb_c*(=vObF4 zZ0r}zR80`>q=Sz0kk*&t9z2|rFLWo|AMI&US4B)Z_MG3(u)mD=19;kFRH_2l28mho z`(94`>@l%o!zj@?e;u}zoJKSZ4YB$5C>WX5@#7u@|7r`1+DrB&EAZPQR%npCLIX>i z&^b(5WTKF_j+2W9&Vx1W&NJ=Xl3>Vy!JC6;w(@m4y$^_mY^V`>izydb=sj(S%{{O!4Y8nX~4cnvidyXmSkjT`~^*NxL|wG?OXJk{{e%h{=`qEy>FK z&DQ9N8fVoVbDQtWc(J$SDvNkAMj-%n$m$)zdclu_)S3}*N4Fh;2_Yr2l6$LSF*VIw z8@~zX$7eRQiMdwI-+tuy&zjCEE}v}lrQIP%*tu#bhZoV^x^{_2ge%IqhiyESTZj8s z#fnoOQrmh?o=*I+G%Go~s-HVYwyC__-ad3x$lZgXrCAB*;HpEBQCpAk<=UbY8}r7$ z<(OKpn!A9x-(8H!k{sXsrR@7inde*6*GCS!h$!{a(?!|nPSYMIS+mA!&51GHo|=;Y zRrRtIM>!}jg_o>nrZI&nQwA9!hiFUp%=Z29vshvh6}viS>6S^`Jlw){hPLyPnSqs- z$c$Q#kkgd1{#}(PtWiVZw+*DZ=rh&?HmGhHQ?6g`f#1`EaLtkG(NZ1`sJ8Ag7R?>P zdvwN$7jL~KQ7`*1W`ji~7br{BAustXzLd&7@QWE4!ufJDf*97eNnmi@9SJCckJyVKTZfXYZ!zmmHWBr_CL%&5K&i zl>BX-c-}plPk{3|!-H3-I8i}Tcq~k-A*+oume z_Dy!0sm8(iZNGeKia^lK>!`*ZHl}_hJgrdxLdje!`p-$OpE~9c{Xm(`M~d9sccFoA z%kt`VhHLDE%b2UABh`CW_odX(#u2T?#$2=zc9#^2?5mpSA2kXlfxg!tbPKs zb^Ap}Gh9`QTn@lx_`#x2Z}JnE31{Byc0p|k*PUw+y%iqm^SHRW^yMV0Nqak?!mLje zWu7=}%f13y^;Z0fGEc%Y{C9GMJk=9lTDAF(f8Gkw8$8pb(cm7tCEDO(H=S3y=$vO7 zj|nlwbv#01hV1KY5z5RHeohp|R-U4ZS!0K20l-$h@)k$EYQtUa{GoLc^IMe?13!@W zvdtCqZ!3P*i1Xs<*{ZL?wdh+zwali>3~Pm3_@uM=Jm2Yk_*TM(u4AIWPfxUvgNF`v za(>@AeR}K5C;6`gYJZEGOJt~xadr?{awB84&je8hh7cqgD@9TC9tt`v_?mf zFgqNcU$uPDU*)TO-4Sk2xeKHhI4arkst3#ZutAZutMmX;T1otU%ss~bkEi~s2m@D65aBk!l?Wt#5`z;tr+UA_z-4DcQ`nN`3 zx5}Alr@IESRD)T&@Ixi@oIazne0n!b3K?$PSQEDLZ>3^TxnXV4x_!AFNf`Gwg_FP) z6C|6xR@y5?zk}9+RFg(V#|>t!<~L9y{?_bV^L00cs9q|nCa{=Xk5Aqq0)um_N~Q7e zOscfOO?@}?OsyhN9)QpV;Sc|j!QQQ018T%*o~YBH{GBCDpy9G;Am+y< zj+$M45A4y4nJojh?&3PvWh@asJB2uTs-$rzoa8@Z0&E!sw%h<^Ds0G{(fdfmnrm%Y zip5j~B`>ICziURg+%99LrbBk;A?)|4IWfVjqj=?jI1!3T0J6CMx^_|Edxbtgbr(l% zx%rM#sprQ<1~O8T59w$Bq7V;VGKO^#`6@_E_9chg3wf}1(?~wE;lqHG+%uphx_@0t z7W^`fkyIN(d!y)xJ4IX!HG%A~T2_XBCvrhXKdD1HxA-j2I&Aqi4kvS+96>y6-&|2G z13ble#l7US*r4@xj>a`m4Ill@*A?SqlF!@nb^mn%0VST+3ipG+z(K3c6P1pV%?>oU z?`;H)3Fmrtv7%UX-8fQQ#Q{M}<-&RIbd$iH(fDcBLXte7gR1X8~8{($frSZF-o;^I{vOr z`yo{Ucej$ywDxFCAJ&^}Q^*S@ZW!Vr56lo^{FBk=>li}$6=^EL5kKF?Hs! zrNU5lSpTBq^ejKAr#{|Zl@9}K%Q`MmX2rYX7)Z102&Cfn0aXCmu7!a2h(IP@vzHk@ zLr3D*545mfhecpBDPEP;E2YH!MLX7ziJw(6>zD*7n64nJ1~{2ztSnw!Xd`(0V-@d2 zZFyIWDebiTB`(gmL3Xr}-yE=k7`q<}9k4T8zeW`km>2kTctc=eqweBj?4Fyf0^Z9` z6($z_e)gL8Z29JH8_GJ8tYvH>F?>qv|Ku?uFoy~4>6JVjvq%XV(!|$NC12$rlLxoh z+0?oJ+b^i1um=8M`Y6jpG&ew<tlU0_*VjSn!P1_fE*o1 zzsDHS1bQO+Z_OI8|Hl)(epn%24o1>i?byph-+31*E~L*^%vq{()03R!J`5<}7I!i$ zCEC_Ah>PpDwniWA{ZBz(11qI{K7|%c$|-_Q)x#o)oIgo%YhRxT^;2as9W#T!+eIRE;@Y z{)WaDsdp3}&cD5fwKQnfr4hzk%cEv@(_1zV`6~Sj6ou_*AFYEXQu-o4dwL^oifPJj zx-h4|~NDl_z1AC-rzZBib+A>|zLX zLSu{eQ$tBZn#ap#z(*Z0xma|>4VEi2Li=g>Q!>Jt_Tkmu%N%TE5GuTDK3!XLp7qo+_NfR= z|E28WoDJvTev8S~28W#9=;WZ_ZxqUY_^Xv=zbtg?^}HcRzKQ5~)1OQc&OEhdgliGw zPp}RBj?MawbT^MHd=m9J!L78AF>@$&`7BT$`Z>XVzj1%_=VGNmMzuxf(Oe$RbhxvM za%cY}dCSs10rF=I4Z;NdMcT?XHpFC-g!!3 z$J?p4S=uKqSS zM-o?=l6fFxA^}%nzJl!^(84-rOmpJ^_`U!HOTNZ% zR2J)IRP4-#s@~EO_%|gs;s1==nDFOzHk9+CN2`Q5a)F|Duvk7eS=RWyhv|yV?>K(kPLL$(c~{n5FjTn zg0KBkzE>tzftR-;7`-6mi;8HvmGYHAQka$oBR@L{%DZeW?3~I(C?rmzv0PpUINJk}iXSnY-cME6xLn%IRBV5@0S z2^XwPkfu`Nnse)_#wI8w`IFp$G;R*R;J64f&PzBE z-8F;QQ6?{{c2*z$iBv70J)~S9<2^c!JNI!OkdX}zq9R~yfiUGg_fbJ$ed22G4mysN z=tDMt_l?;8e}#Q_Jk)>ucso)dMKZ1u8b*}8%9fCwd6jkO2)VK=Bw5L77@e83!rAMS zve${D?u^QcbBf#v;rDvqQTl#=kH^;^^|<$Xy?3E|GJw{B8$}RF;`_(ua^8yS5+Mqc)GQp!2;tF#2$L{lY41D z@<>ry0J59?ReBA@IUwIZ*vP9gg8f-~AVa_8H*p&)v$XJ8*bdZ6yWg9$ZRh&UUKI?K zMy~Wz^8DgM+iQ6|b=pxTFz+N(isY;twzRC_TD={sVskhK)niR8Xk$im>_Z`?9O$Kk;r%wQ1uppJZ9oP=&cY z$IiA$i(9qkXV>JWs-hIxD5)RnsJ4n;I+k_qc82NuvFW(QlU$wrw;2^Al);fJtkz1P z=k40JN?}a)nD8yUPOGxMmX(yP+0=^z!ez@Xgk8l0_{_;8afSQLNFV$T69vXPDTh68 zbN8!P!TV*y=HvSNL?9=U&_{{{C$uzgp2kv13da|WLxEDVYu3QDp`ddB(=JxHhP34Wh1vsq*Gm>exNBw51>uII<_4Vosfv zA+mIlsC~o{w~8G9^DjfqM028!`yE1_`RQelP?gWU^*nKm%8D*aix~On;&q-F?hJFM zGF<|etR%G4Zhw!Q)*w^^ztrpD>Q%WUSKhN#r+TJ~mZsBJr)@eTy$g3-QsN90ym8`u z+gBgQ8*jDZLKugWKfaFFxfv_5*0-jb5l}xoWBNk*vGRlpdqre{Nb=#houSK4ULy6j z$=dh!>&M|*qXe24+FPaGj~;8wNM7M%n&ephre>88ykH$ ztF5D~mb5P?)Ww6LjK9QRr!u9ztcZeo-#>L5-r}ueNj&@X*riz;18!uXu}gszn}-Ei z@#*3=ze6`)1`ODJ_?Y}Gw^Cqysbf+oS2n`qxo6}#5W*AZmTS4pk~k8-yffp$~M=dy>Q2Js5E^APMg}$eUX7vA6JJ&g(69d>VPx zJW2T}`yLC;^9J^z&JV2nex;p@J$UTklX7{^ot+p_;^F>%`G-1)oW~b-3a(@3Gp9z$J|%Cds6XYCju4ie~d~|iwux-)RXDlK$*v6?SqeuGYq>tRNfJPBs-u?RF>0n89 z7r`e!wqt?tIpnUnlRv3QP_ij0lZLV+k!SkPamoG!yD1H&rRSXu999KwlJaXF4na(v z@R(jv9Yjp@+bgeMxCp-?s<3sA^xPgOigHz`m@u9Rj$5{4N@fCfkPdz8d;7Z?q2u5o zAihP(0dFva{?|R>M1H<}4VY)VtW)0=cfIL-3of_RSwbb)3^iYUU6g0s^XU7Ct)Fi_68)5@O#&JL+Sv zf;7!7w6ot{v;t|)!ie1MtT+7#M@TC$+e)wAL`!j;3@czkliMMiwGv2m23pw*oMO?q zG|(0QW7~-N=~X+k9c`shCXTl9=?C($Dj5W1E@CT}BKJ8_$amYhP1u zt3_>&NYx~(gzr0*si!2~D;)VXdVUU+nkk~`P;%agw665pu0ar{ z^fKE3s=SdKFJeWQ%W}=I*1Ph&_*x}U4^B9AZOi06N&a(a7| z{B?MIsOIz$|7UcNRu9uO0)AUg_=wI;BbDtX-=uywT_|I^%t<<|lVUubbG8rJ_M+3~ zJkl~eBQLbTUlv#zd?vrZFqaXg!@NUX{K^(a_F2N#*)yMhJe8da$5-avu>^%a2AL=J zRmK82Jyh-GWSjocbwo>{BC9WbGT03(8m|bq^_$OFex0-Q-@PMKy*pF)%$~I2Nt-Nw z?02ZKlDF8eyH>rYvEgc&LZhh?56CL5xzVR_nvDSPAsaR(8JH?w_1*2=RAY$sl@Q?y z<+4Ktbw>}KSPbp$*4%$%lyUJB;j`~Sg?Jl<88t$b9gn=|wOAmSVgz&y3hGw9&nI+& z@TlI=mYB4PCz%}T%MEfBjgtNb-XpjRBZM51dKy~))4jH%R(@)vBai(D^->E)S|o#3 zB>h*-{q@ftFdBrH=C(?wZgQo@Xzq+bxXLL_9+Yw@IG2iLIcT#Ygl87L6m3-uu&+7}#8^e*XGM z+IyxlN)IEiS&bAMr%qM&`3trUHnn+Gvk?$6B`adxD69*YYu&-9uWRN}AiXj_`R6Q< zfcQMUZyFU2ef-7e608dLn|nvR@c(egX)3j?H+JWlUd5lH`ldrGDiR~_wLLA4@gF(P z`?dw?FV4QhZ8lIb@@?4r_n{b^XjdeqoWoHm-t$NGJ$-{XobI!;$6h!^_+GhOyYk-& z{ylEsN9ptwqvDM#vr>KUl#6{X{3A}2%?#ycXq1K zLUp)o;z$$s1~vNJqN1X#;I1#7VLilwlTwa_!}eT0mCceIP5>OcDv(@bHp_K=azI`< zv)=@q)!K_Rvc$D_bo(_y>%~_u>b~+yEY}n9tPaEJ`(;MVjg`huQ#u+Fa!xhv%Xw=f zY7+QU#K5PcM$-z_R1D(zMS;!`Wb$b2-IFH~Z32=aA6mp&^BWs1ltPOLy*I>|GIExYHXIS%gA*JQNg z)gc#av>j>CuZa#vKApVUIG^5~)f-AR7R+}oEg^jyg}t*?EXczP4CSke+lW1ekynd5 z1D%%-aCdDrh0XeYfFC^7WtsIn9C>bnZ_oETeb{SVO$QzMqVma67{@sRVXP8axaM4Q z3DERlY8TKY&S=!;3=LMB=_Cc*2Z`tzu43iZJmsTDBv#&^!PhpyG1TOMP=ZINJ0(Jf z1EXLMe?^rZ-{v_mqT8>3}h8%ZZ8SZ!+J1MQ>+Cd=oE%zuR0t4Qa z%>-7uJr|M+{*;>{krZqtnB3*;EZoBv>z;et3|sS-aurUrT$xA=iN2eDmTg4lNw>yH z@5qrDW2F~5C$AR#@ORK*;`9RuhVM&9SUlHL=#Ll?Dpu>mZ>J{{TH;+~y+|N~f9@sB zIKY2Gp=4p&1OH{XR-ear2|#Pq7$Q8C=%gx3vVZ%cQ(0OdH-)E!l>4){-yta{7}YxP zGtGJrL*B{>mKQtJrgj{Vyb-IN^zHcTnBJ(RgzQwlog<;Wg%OcC?H`*4pc-(tij)-D zqdB5h{n8GyvjP5TIwlHL!_RWv@38~cHkZaYr%?P-$~E%RK(l+c!&>zuFPtKOMrAuo#*R+{q$Qz%YYsCGs+LV9E;iO- zG2zlpXHY_V5jcUS6MlOWZS&=_kWM^X-&Xswhz!+6sNC<}N#yD*_2PY?<(22LB8Hpi zZeCLPZ%R%^kt%y`LBEx2LdMfq$M$6rm1vo8S+HPVpX7O@p(ny?1Z>oF`X zm6GHr2MTG-ow?@vdlE^BFmuS>u3K@5e5ZcQDP{4Da`e6vR8sVR{**@^y{0FIWi80= zzsgE*GoI~U`l1akG7O9L7Q1vNv6B^v4clA|!7n)QU7L=Pg*-_P=}QG30o^H$>7d0hwiF-WeHd z6g(gK_++nu^RmtK>N#TMEX3M@nt#XlD7K85405zu^+1l+U`lV7wV%q$kBol2q3BJ6 zsNbJWr-rfu^7|C1=RDu3h`!G0S1QOaC+#-B(J?JXntsh;fq2JOuvQ<+f8uVgRQq{f zxdHCbL!(+Sd<5}XTS@wJik;UR-kGeMnUlgkKR+H3-I8td!rVUb-Mwjx{YL_BonN|C zrW0Kp31y`pChorydpg*}e{1{ijI$M{CW>1GqWosHub0Ly{uj@*<#jBuLUmsK;XZY;Yg0b>ikuk(m4xAZT?@Ay+1Yw7`~#1CZedCW&W%brfW5hY#o;U1)CIT?hQ< zqx$1y;$H84i%Q>q+jt5AV;fHfNVhe0ktzTFpyo82ImdE`V%90P-5jdg3O62+UO&>{ zNi*BBg#!ek0p%ABo?R}#fcOqq%-~b@saGTQY8R|pD=ZZ2Ohr3b8<2Rttn+GZ0xN%1 zhTu6(2Xb_)f1yf9tP#Y$jqQhnOJk!!;+foromOGu&J_fQaGj2D`8CxJx$gp=?PUd~ z8p#zVJSYNw>a$_K5v3s^+p#I{$}+Eyz7ZENGM6$sfzn9 z3p5Odd2Expyw*OisW9S@_4A~a?cVO*9Y5{%rnLIou1uHeHM&>(@{q(k z%_h6Hf8zkht(scTyGOAhJfYxdb2s&G067I4-dq`E(i*JuQZl6-q9)olEfc>?$T-DZ{ zi?6QA^Tfy;aeN%g(&e1(h}BZ}Fr=s~h6P{Je%}7AH2U+iBEB9si{i-O-}B}1r+Ng) zOO^0XnVP55zBW>WkN2NQA76Tz$%7O!PznJHUs}toLyo?MDL*f~d_j zEJ@k0UnSfEc_Y$L^+8YXir(VyXr18%r_Totc?_{zcvKj=3oW+fz!}WyR9@fqI)Tks zv?4i`SmjIVym#%`O%nYuRKi+)s}%=E zamC+A+aayW*6l8&`4O6Yrcs@0W1H zPT}1T*p(|dB!+(FA`hkuDO!(Xlabuc#a1R2jUw9P#gQuaO01t3?4CF`vV`>tiS zPIl?62V$aS*Y7S1?D-}K{K$Mp$UD&1Z~^prW7~3IMWHyaHpFDA0_UEpVUecVcOza( z@%+KZItDHb+P+cFt0DEr7h7JUB9DX^a27~Wwq~bae#(x`EFZLb?v6 zvs;2fVj$yxtlv6}MueBpaqunY0#03?i38zBEjGhz2G4|zw&2)+qQOy6c>rQ^T5-x; zd}VCS3Pp2oMHeNvd&PP!O9s{g=j%5uu)Z@8r$||keEa~43wib*1L1t2C?vhEhG?|K ze&~?^nuiAZhhCTh)R6Mo330G}8|=0LV+?Jn9*xgmVkP8kLo4_!xkziG0j%QEw6{m4a;Oggq z`$n^TXqxmvuY9aq1-0!UjvvqRAp%^nD)g4vbin~#^ZP}P5qaLDi^j1v;4^=ALfzu$-Nxj4sE8++#!;-XZH>7!I@2leU8J4W6ABYPh>;2J z-7ntq;}r%k@H&{p)5dV>)QS*x!WwId&##=_MO*61QLG~;o7dh^XXz(c^J3Ng%)9Ko z=HfXle%o62vD($wQ#z0ja^cd)2KFaNmp*OD4KGbPqqcM)n^K~vyeB;+m^$a2uMVK^ z`+-?GXQw2uLipHarTv(*jVr|RT2va@)-l1>1(fALC2hCq) zNboxzx4VyP_&IJPblVMPzf%4^9p+5XZ7ho2p-u|76W1ylYNV#S7@jS4xO-MOs}tEm zZY%7vhc^~p)~On2bmSAs?s#gZ1!p23fgpVb#D#_iwKCWg|Cn61w}}pGLmoTdrY3Ia z$RAzg-%sAPA6-IxNh&GRD3FRZ^myNgPl)eB_z3R!K$>nViOlqDYWnbN z%h??tl3OvZ9&E%+W%cE3bS2yt!`T9x+n|hnm&6;B66;gzY zWs9t4y{A1hTR)H_T-gp^p0SXa=_x7WkDIPdT%JD7Odu|_WsW935mQx_)U)RYcorh^ zqQEI9ziK~CcNu2LiKVOXNl>Z`aEVuAAY@KY4PjC-TAIe59oqblDl-7`UDCn+k02A5Q*uo7T zNBa&aJgq5}`8_zEIe6=qU)w=l;@dV$W(a1v>lcq=r63Md3zY~Sd{)a&h>2uF*RawS zRj^0+So&JeKEUS$r&!IQZRV&s37$3vS{ZNc)u4DEKpEAL*VYznL^(hqH`-X zgr4;yaO>9&@Udp7viG;GG;Rb%YC_NX{~r!vK2?P2;4K9jt2rG^tyvf{%u4pgyioM3 ztfcf=;ByLUF+h{zSvmRBK%{LLXlk!_Zn@xaN&^vPT5_rwl ztgSBVYaKbIM8@{qR@idS>oPiEX-a$JcGCXrMQfEzxpNUO2$h7%HzS%mj1cW!PA75^w{D38o75?* z7KEbJoC^c0?LQfEF6cvxVXAtg_=6u1=BlP)srvD+)C%)&eCN(?n}3AivWq|&xM*Qw zNs8gfvsp2y$kp3&X?5Y`{%0gmP#^fB^{k+h&A-yKG!TYg1-~BFN-^WrBR+l2$X{a5 zgm4sj-a&8s1q~3N7$wioLOA6y4hfrNkhl5Ax^jF0m+8Xs=xMc@ zYj1)#1ud_2{=KBOKnJVQvHS%7)ci34l$VLp7Mwo7p0xS`GL#(P`^PipGE^;d+KrFy z8|!$$G35NB+D`QShfgPhqTdkwc2K5TmVeEXnXV5S)g7_farIGuG=FN#ZS??qtG6!1 z^G@x;ySF60;znE15H|fZ`cS-(S!$g_DSiQWN#W%@k!r@59eq1eI{p)1?hDP^Y3Yha z_OXKGbmpo7_U_!tYSaS>(S_AZR*DCA;mm-zHH5ID08}uYW4bmj8r)J-G`IDv*K`GZ z4_gJ2w{hn^#WYp)n96lPc_7W#W)!upLc>Jy7yq#R(I|1(VS5}BDqdFv<@UT1RV*rK!HNgTBA)UY#Z52+Z|8;&dA+#@udeTK^%a$LzK)v?K z#(4@u9-xUVF^I;Y0^~q%_|8gTGe%DRmVpKV)e|AkRS-4x#{&i&_=!wf^z~OEf zTU5C7L+`HZ91iFtpQTVtDbNgQL=9@3r$5ex*A1D8xCxWM-8+q17)giy3(&N-0X7($ zqyh6YvhwJVn2MB}L6{5J6vJGkeEda)Gjd0+m*NFaG>9%hPPy$Yk(}8Db*2R1r7VQ+V~Uz3E=NCMufW~8ghL*|%-|ox44=UAkW&CrM3cq8O?!=L676q1c z7y2-bvv*bgW;d3b59fk59%xSxz?7KC^9`o232(FDn;vF?*!rupHK)Ndt9nx4ETC(J zrK_rXl43vS?CSMiOetFT$FZ2=Wbj1UWnFa|O&Qvsyl$^Uu3UnT)V$cG}? zw!rDb=%WW0UmwCyOBQq12M;{$R^t-m9uu4+;+6$XSP()uQOmVgmqtCk$%K;h)aKdF z2Oj!DUQM{n*Eko25liFck1pD@4Y{=vcsjb@F**oRpJNkE#2YIRNku_a!zx&oQC4^3rSvzU`(tVyL zVFdrz-I`HpyK!O>CR_jV>8Rb99HDwa)HR`Ywp*TxOT>rA9UX!bsT3K>3TQcb~s9I+c517~7ys}UC*(>&ZS7ZAHvD{tG>O9Y3 z+>-Hk&hj@WB#ANQk)-8FN3mkT8i)ju1L!2ENx;T5KrSAMLl>8Zc^BCD&B-$0?iKuv zi=NbD%5twC8rtcn`-{6fhZc&Z=4c3d4j)Hd|MdCRdH3urkEO6u$Lnv%ZUNU<)O|vy z6Q&*HQ{;{l)EiG@J8eW;WYx262BoRle$HMuzm}R*kbc=CwTt%I=$R?Y-I<)dk8@{+ z_#GXjx82Z(X2V9+MkVrXdO1E_3To;O5$aEkIr6+jRmzd;vC$=i3`<^{(5K{0Leme| zqrUv*qTybRltM;iV_}!9`rF&?BI%Zda`ks3bL}>4t^Nl2J>!d)2oVZkcP~W!M+X=a z6B1)N%6~wpSU%Z>|J?D*_kTYVj|-og+);14@MVg)E?YHjWD?(dD%f6DCSv^}ZCv}$ zoj~0^i-GlvMMd;>O*M(!Dd~4~^Hs<=k5o#0yr8EcsBgBwy zak1md8|(CV*6uLqj$880D9ykZ7EPQph{xsE&d{h^kWM!QP(3_dYg@PGj;7ZfOzm%M zo-0&h*jn||;Myh~o{h*1Sk=Hld^Hf=sFkC$D>ZDOs-iPir{(kE^qalP&aP#V$D$g= zUL2is`kq#z)8f}|@8`oaUOki6tsa(ZJT42*Mi!Q(;eFL1smObuPAGEx7%sk|(WPsK zQMSFx+D~Kov8GmKkna0~kq++}`%rNWHopMPoT;N&8$B=OHi(){|Dji?8_qY@e=cPK z7qm$bm3FA*_@9iSGg%3gi25@GyVg;>YUCaE#IPGJat|fdf~kS9-$xK)#*jmPGgBKN?Q2+3Uiw4oQTdZqb#a5@hI2;UG#16 zaipRR%go z{HC*INRhbBurWK+Z>$7TKFx|izx{WBkkTOPV-m!r*Lk-E5HMmIG$m<67%b;C`~>EZ zBY&j}_7qlQle{PmLZzhr!~YdPRd@gc`f?hAsaK)30!*XBg}Fz$4QP;ChUg>IEBibc zaEC&H?*@`!TkgRgN8vi5+4|Do2jU_VSQ>NR{UgZ~jsdG~Bvh-;m%garV3ht*tPeDG z`iD0I?>bt+A7~rbA?yL%9vth?Z*U@s5n#|?LG(fQkkL$>&>Hv9b_%RBUEJfWz32DWFp@A5y}8U<+r)&Fx_L%u5egk$_h-l%L^66gSP z7o0DBxErBKiqa;z6+&$m8r*R4xEX)xP2&Njiw9WmX-7ypAiwfqp;rNQfc0&96^L%; z7Xg=#V$UrSME>lwJ~~MZu8x3a;JSffRit*6b&(6{3t&nt5JZ^hxXVtki2@esCxQRW zI?oxc5DQ&d#~>d%jRFAxLAe~)X;4yd4x0DA4M^@rpzR3T=)4g zFZvH6Q&VlqpeQ{ynGg^H?w)>&0B;C^d(r_ZM8f-0Sm`Z`qS3#r_n z88^_*rxTj-Ix&Lz&=l9ecf0@n-cS8AM&wmIO`p~Kqt9vup=Of;Ce@pM5t64m5_b_B}Kc#=JGC!9x#G{f5p-xeM=c$n-4~aBL1k%gA ze$tLSgjRr}_cl8`{z;Lc2BytuLt-8H!ZThsiSJ^#!( z%*47;0iclLpAJ)B#u8|Da3EEIF$)q_vg@m1C$vEbT|kGn8=A+Yq&NW%*%sFK9st`- zP{gDpYW1hmhN?s>$GVJW4!DX}q@l^W?ASxz>E1^3r7~|!j!93EW}*87P`!Zha}d6* z^O)DTY>?&dbWC~5V&d^*)e-@UMsY|n7(iMS* zV3aGg33Pn}mx%-Tupv+ZS?EH0@cYjm(0Ifl8mb`l5DO!`e0AI)R)nND?^X0>T!0S}i#nU*XKZ59<@m8)K2 zgj33RHX*PO)@LT)351ig|7Chu3FRvP4g+Y!KjN`$kdKAn$-#Z~G4PHx-`%%mOL!7s zSrlF$41vtSJ8A{C8vHdv)qWESgpEo<`h}qF2Mzdg0JYMZ4=8w(LjhF4-)*RW-O^W3 z2?WvuL8Hx?RAIEAZHL>Y+f%7=_dy6JgnytJpDAd@x0}N<(}}r2_6Rz-wuv$zFk|}# zqdfpHuFw#eOkMz!$;h2Nbp-l*^u!#Y#91q>*{$_~%~fFO0L@k(_r&9ptD6EY(C!yC zH-?GUYKnij)F}NhkH)^!Hl#6bq1oe8Ncf=tGI_Mn$ zhys3h$K$NUNPG;!^9pm8ykX%Av+voQx>ME6Zz!$AZN~?E`ffn^JeSw2zwDaR2Ao}P zCFD48uwsT_9|iPyN@5fr78=Uyytn}08<0`f|6yrSG(csgqn6_};n=WoNg&Ml`|xtb z(d|xyWp%GIr)!h)`8+csatd6SmF1|=Zm$Bw?ic#F4FE(Vxh*YPEV`GOSww%$YYC4* zA&wSBxA)mU!tH;(@csGW@fl(K!!KRgZF;{RxQtAlks@(m7}?k{6ty;OhE3lqu$Y$# zVqfC*5{WWFIG=+#Km9}q*Dw%YUbRZu=P}{Htz2a-oOs2sL|%+XRQb%ZAycHMReJkaH6#J6OULMh$-5ken>uqM@bsm00_Bd9j>HSj+v&^v`>4)Rkk!LM1mXf#E6@&v+Pc#`! zk>hFoS+G`Rhm%5#EukV3DNg{4$gIUTAY)rb4=tA`<-zpw zJ&cam1;3jKX`V0Bqhf_ZHJ_(NK2&`^H-0*5Li@6v^2_k>U4;vH%S^UMSzdcBd+g0V z=$*(7egAmiNYhYBa{0<(NL2qy0~+3$GVXypZ>|3fYUMQ+=lz}%j9(kN-IXg`yf&Qd zeA~*At*k#SI9`5|xZmC&*%a& zG@K3EBhHwV(v>OGI*hK8J4w}k%-_t=e#~Thw$0jJm!F!ij^&zywzJC zC$RV1S7AQGXvM;xm$TZb=BHT+igbDg82?wBrQwhXXIO@b|2XPh0~Vk!Rr> z)APS90K5{zK>n(*c7P5zMce7!O26*Q&f`=lA$2Fjh3)b;aT~z>%97pkF~~yUx`Vq` z08#k0KJ$&azlhwm!m`1Vz(Y#ZI2nxOn-L%`APVNQSp@x!dDj<5?IHT=<7sV2vOCBQxohY*tki+2V{irzoe9>(!IH{#BKaYmv)|Fb zin#L$O4otp06^H)>|)Rh(T>Vp6E06!O5|76<_5iG5} zGVop`ynNBEyv)N&XqyYBw_1MUvX|cfSlL_l>l+n%e_4h}Jn%k1t(eoZ*!GaUfcNFC zFTK-j(7fgQ>j_DB@-cqDzOV5D*9EO}Gl$#9=Ni0dr+`_G04PKR>Oh+uCOsXWvYd$V z`@9{t-pp3BOO2bVw34+3d|BX;+2^2a?h|%59;tKA{rUXDUu9kFEs>hC`6KKa+|(F0 zf!72LC8`)SbaQ!__Gjphy}Ip40|)#Brz5}3fynFrj~U3}&qFYTS-~V)vuDmbp&1>N z4mq=ZxYH;gDMogsF@~4mLdjJgp^ecWE zlYh{hH6*w&_7er8-4rD0T1S~Jv~71`>#ABRB9c^_6kKa;G))=vNO#{io&H{az9eqK z*)!nwA<&0Z(6zv+cmfti-#XCdvsm@NWBZrLlp>|QaWRn$$mElblj5KppNUCDMY~Yj znT03Gtc2>357=t$U~0h1;P5dBl^d-v90W ztGFOVdaUQ1+0v3PO}eeZ9qdml{*v?>F^o3Gj!T zn1e&vur+=cYU#iR2NE%-tVDcA7ut=JQu*L zNBSHXsg6z5+d*1YeWP2)m|`=?)-M@(tVPBH*5iIdUg;}^P1#$jb8X@+<@D9Q@}cws zJMW6>hgowCC%!oQ`YYm3TLkFqG(Qs3F4DP@S?uYNx}^2A(v2J0ev=4#u@-f_E(&Jt zpHna8u_*n?Vp@l6D1l#p3=63~pOP?|SkdY5L~l3mX=E8gscRVdLDMy*2IH|IGq--> z?IC%7E(uBa3r9;V{7*e4@CfE~O}_~w9DhAOdBKIB?ScBKib2^Y7Rv5(r=Gs|^aZTB zy*yt{YuiPH?yn`0=PcEIRmI4o9Hoi2szH2wrT2ozh%!%I`ngTH&fKqiAFWp(b(-j) zQHxWGboTNP@YJ#-#_OW}Ja`JWiFIlJ^eXNwbSXxDG%1i82)SZ==ZeLyA=y~~@HHhp X*rkU5!bc83;zmnNS2bVx+JpZGDrsW> literal 0 HcmV?d00001 diff --git a/images/wiki/windows_nat_vm2.PNG b/images/wiki/windows_nat_vm2.PNG new file mode 100644 index 0000000000000000000000000000000000000000..1cda33c13763b8d79374343048c79b761f9992cd GIT binary patch literal 29589 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�p0W=HDinOf-;yggB)5a$z<@Ub*(L1+*1q9L0t|vMp*YI z5taB1jThUWLoTd*9?ysK5nX6r95cH{3mIfGzJZV%_be|Ga@?Pn)hBWdwGXw1VioFY zKB$=7E|~lE>AcvpcVE?7P}z-BHC|Lh@7`>V5WfizL`_Sj=%DiBiJ^@&-My*?6=?4U z6Ptv%DQ_G4Rh10ND+?VT{JL&cy;fl|K{ulj31{Pp=R}`t%=EL(ol>rV?{z@u^kS(U zv01&X2(h2?El9UEK>U;`w(5s=Dmc6!#>?*yduNkLxS1L-QSQ2=k1GF%zQ4tSDmem- z1UBr_Nnfi8O28=*g&Fc0x%*vpf}?P&yd{lal$S~tFZ{8LIuHXzsLGgJ{WtNT^7J~_ z9Yw4kZr!={4hAe|y7{(3`A|@W~T4$_z1b6@ta| zvm&A!3YuJP++JDXxL>J4GdDT=2}JfUKOPr+<|bmGA};f?WxxdSgJ5UWTF-?V143m@YtmgP1&sd%64bEqEq6%clX(>8t&Ak9^aLJa0x2z#L6aTK3fl^ z*576JbvqB4saUk%)Z}wZ@kx5gIEl7h&nR2KW{6L+9J9`Q2CI>!*I2;ohIJYsaAc^V;J^qGW|L zRO0p@{X?z>zp=cSk6j^-WnqUQwopV_H*;O)8eidcWho}o$ZKK?Ii|DeMBt6KO5 z6CqLB0USsZ7a=^Y=T;bVL?lxb%c|FkxB~9~PW1j85WUhQ>n8>(n(JBZ;sCo3Y#(C% zUZY;;j))f^MLJFJ4GXNL|2L_P39MZOL`iVuz+*6;7K{E~5L92P*Z(F8yoR^=Th&G= ztpDC>3!sehU&^&@i(rZFIB4>LE^v_BV`IV;@^f&M(NvKi^w* zq^&%lf3%0qSSjJk%}(|jB*9E~nx5covXEjQg7u?yR5eE2!lE`3C?{#mq`?i$ub&^~ zyCm$8=2ACbMgFo!+#i%O07!7F41mX3s^l0W<2%$@Q$Dg5@Ub-z6QymNG@itrU7WFPe$q)B2gRYXqy^;b>Xo0< z^Cm{T;>#O){`Lpy;fh-JClw@|5P77IN%|H0lp|YhgyI17GbUy$c`|!=H{CCUZQ3p@ zFFa?}DI(h0h~&@hhL}z%LetB2b^G4eGub6$wLhzVmn$49EYjl^TLp7@uz|%NC@JCH8jJ z0K$NIFx*5F|RcR)Af@% zRFhSn6lBM0e%eR+spo{O#&2QV{HY;j?o&MuC2fBy-U(4slXhn7b!+fKKeKD#@i~l< z>w=J<~9!mF#d+Y@tBP!}p0VytgmdD)Vw5O?x2%L40Lc#XNiu$=F{ zvvLG)PH5AJLMn_)LVq^GXxvk>fbCm<#2qf{NybpI!EqPe0xtF77Sg0UV(2cF5^j-F zy>^R`W_(|#ZBtH$x7AdtlCMZ>wam%0X8mM3kgiBDix!a1#-a8oJLcNQE{p66RX z_108AMkD(cB)*2WMMhb2mJqx$@8Q2EqxDWGdgve+xyh3?Z{(@4_m^tQTaDtS(@qbQa3WdlcO%A zbc%KmtNFC!={KlZ6HjO}o3?+?^CA-QZaAW}bU_@=oHJR6*PrcLBP+EOfFu z!kuW#tQj831=GX2q-=PFp`<3Q;-kN0_e^*A_tl^KjXOs3lpUBpKrE7LpmYO>&Ho~& z@HhQEd&#AmmTqxj@p@7tYj7Q2aUY1P!XAB$n)EJ1jIXD#vs=lQTtU6I6X^Zpd8Qa@ z?GiBeax-r-U7U_ZBDdoDO%7>iDGO>BMs*HhNxEkVo+H4BkrU1Z&glY5^BBnx>QujBA-!~NKb|vdve5k8_c

N+#s(4MXm!KOa~NQB;DPXS)PA zWSRt|U?-Exmxm~ftA;kU*jjiVK1C%~Wz}EwgdKZQeO$mi#BQsWCBm1Sq}R`9Ld@Q| zq<~(yNn>UWJk9K=dk%Z91+htus-lSdYWNFZpfe_rKfp3qi7s*7^ z9|!z}i*349l{lS9TIt$UF221i_2O*E7s~Z2rxkiZlKuJbvHX8ZH~su@{kJ&27zg-I zvXZX*pRW{(?f=Aj8EthQJ=*~TYRhGke7L}+imNWmp`Nx$J9dcJ`o@!%dIyDw+ z$%tw+(h|;X*4@Dfuc^$AeSgIOMSzo}O%?2g2#O8)i~a=?eX zN{_b6Z=bBr+#f-_6OOnpM-i43j4cK#MP7wC*__7iGU$Yx^((_RdVe&>vH+gF=-!&$($koLm zUm=b=X-!Gl(0>QQZ&&!ek|fN%0qPToa|Yv_&eQa#f#q4#qK_{Gv!|y?5m@nYW5DXk zIgZFa_vMq!6vPp(4yUh{hrShs>6$T*wVY`rO|g;2S;OU_$zII&G6pkx2G-jUN@V*G zeBLBxer}74_$}D$`hBU^kg~HA&Ep^WPP2O7TrBJ8Ge<`@-M7Dzs=|&|0CUZ8>x#IN zeDPxFKZCG7llVFjVp`6#VW8GEQ)xp!o|vg6`wpF7fzC7+m zfA;IZv-x9RlkNhA3Mg@y1s1sxTw)KOnH~KX$a*XR=<#17Ny@+rd-8ChYXJ5ja{!&| z-M_}SOYIl8@aX?q;t$*hW}4=RLL+HMNA5l%GK0w>3uHovgwST_%6ICnuuehdveH` z$z>!sX+jJH4i5gB|KcdMYzTP8KzRTBPmF4kqDmMs48DtDI(8cnzp(&~a{()o z`C04ga=QG=8(bb`?7r%8KogN9obBrlvg!?v?>(hPbfy%F);)M^qw-y^o$77^fjNvw z#iBBW_4t=5@+aF)an->sSsjU2#Cq7&cXppRI01CZX-lKnndQ0blg7B8OfQbJ${MiY z?$zb!o8(*sv=jF_hXQ(pAGha%$NO~x5PCvkrX&xZ2;oscl$n=Ls(I?qg|^_214605 z`|pjd5D8q#EsaUJ3dWa);St$XHKZ3j{zvTX=(vFq;c z#fttF4u1XVzT_Aifzs+V~6w~ zzsaR+v9X1F_2$?-Cjr#1H!G)3dv9y3tu2qgV)Xuh1X8~MOPaX02Y^S2O!Zy+8|i7v znQqL*CTM?c^o{l#$Q_?A($gL9SJqtmFiQjMa+aiu90$@%?n=R~9zvPyOB=HSeSWE0 zpa5|0o9Yr$#RSlG=#N%t4J{CwL!(1yBVLsb{#DcF=TRQ}*DTKmI$yVqS-$6^V6uL)wD3L{6MQt|KFd@+L5N z4D=!M$JMx+y!su?$w96btq9Ao*?qXR2PKLL-$!f>-MYcj@3&sFwk}_I(?^UEd!2k~ zl`2E&rF8V+r%#nW0!cgEaC6YjWCq{jCYn5Gk-8Rpv^#FX9X4A>-Ys*nW`w z>2T&OP(U6tyO6<=yO|=(Q{*8MA#L%ucv@3~W~|?H?Z>)$@N5-Nv^%2Q(aAQ}ALeuh z%-?`52i5y}0ruA!W9W^dooC_4*@PlQ+c3~M%%3uCk#qjyEd3nTgC9HYv}&a|{mfAP zFzym44HgD$5-eX_Q$6bC0dq9;kw^sKk1k&+z;ATlj4;~GjC4oWf!U4Nf?J0M)lIS* z^4d3D@(9Q)zw5}*|GqPH(j`~~Cj<$Ki>Rd$3sGk@#(Dg4@AqEwe@zT#>izu|KV!S0 zz$O%MPBg;n?d>O8bmX~?OSuEao0=!>%TsH;MCT?XmdR(l)=%>XqBEOnDm4EJX*2oR zoaVn4{dSf$aEY@@i7n`tA1H9AY8BGkk|5u(%^!`9QH4xXz3%zdYoIlD<8Q4jId@Pn z?_4LlTI>6W?Vd^aS}yBF#dFWO-fXWR@3Soc<@4FW!rs~1%sYLZJPunAt#~2SN3%{7 zm0Lg9QyzV}J=4)zuI?#^RCe>9Xf&dP&K@tl8YFE{8O6RPuyXN&rfTh~qcK$x8=BGC z+a}(C*KAp)iZta+px5`eVGTq9lDl12#JR5^zi%t*l1|pLz`l{)45?20YUy42r(nt4 zFBVNtKY?TYA%8A$b0mZATSMlsRq3Fkg~SQ3zP1N!S5il>FCl7KPwqx_;#D%SW!4p-xn&PMN$?H^~ z0{Jr^i18^plw0CZlY8aZJe97Ef^2WG>mR&+*Y<2K1%MZe?v#{)C#fas1_#2Ag|+_0 z^_sS4py_d)@gg^5nux^4Xv}u(sXck0kb39zF4Cr{_`tLOO%dHN;H5UVg#{{Zhx9=X zfT!T*M!F|P=cOTwL_x6-KvNLn*&}Q!8DwRyfHaJmEPF0>bD!eCVZZVCbpPl9Nuy8{ zWOEK3=(9Tq)Q085Dih#R*FYKwC|GG|{(1lY7JGj@A;B~7z?aepXAY}{Z#pr6pEUh} zV1a=+^r$pP=o9;qd*z#^BOfUc2cCkc#{B5NK*ab9ANDjIm!beNO*Ew*8rNJu*k&Dx zH-Fe%JA%Cq8aY7A2suY^+mV;P3)bV2`(3a@)QSddSm-w#A!(&A0=MK3TbE4&o)eUl zM2zk(cr~5B3hBS0l2`VEA_VCNfF4-4snR{MdE}<1siV6Yd}^cjC-Vk#AtzXYbOQ#< z3W9-f<;FO#vg9}~&oE3AHVi9u0c6~vF)uc{Cx!`2k!cA_=guwUWC$$?naP3v0p-Z@ zX;;4ge@{PAZT^2?u(OS?pRaxXz`U0c(j zp!eo^(8f3;GuugAB3@-!|KT+A!#XHGC^!^iK>oNwqzD@n*PAODE6{$H$XXq$*!xUL zWVu^tr?)AJvSw&`Y1h?&E+0e*NETt)ur|mvRY%qT{IA91h*gmC=9rzg{Wajns zxqiV+-1d5}m{d14HIE)`+^Za0b!K&W-|x%dGU_UJWOjw(5Nh59Pjw#k`A9!wn_f7T zoF&J;oEe{dg8!A#r*vrIUq)07s;1*RLZavE^^@;bRPQK-#W|$ko5Q~CNLc8esD*;n zir=7lnqf_eYcCV^?@zNz&AX4XO3=fQIC^Uh%?4b9?Un-HT6yW;}sI~>nF7tZL2szl^VhD3GO_&@ZpR$XK+{)d)JRUsBU(d*JEy$ z-k+HKV+#vD>#TI^E}cqAaCpZSwOOOvnY3iOfc;_jxHozzD)w1kot~Vilj{?eI;l_Y z>Kx*_K(VA)ygZyyLaQvLLY_uxrOkS&9%BG0Rz(yEpxU-VcJ3KDfN5Yd%gmMV;EA-n{2?{5E4w91jdE#+raioIUj8tfV*P9dt~V&u+=zN=+1Tvd7H4kptdQ5jW#X`*1Waeed~*BD zKQF+9h##qKxJqm1h~=2oGJn>VxAb8%2}`P-=(Yjk(LP1FuNnh(>4oM}RCHu#_uOlW zVNReF#9+~wp$DsGxcwW@`IsCUtpm6J4$e{Ogf;jQIy5=*eh;V3#msP5DXi6@e_N_z zX1#yTZs*3c%?c00XhH!lQ;hxPcMMDJE8*%^bI#&19B3cV{jBG`bmwoq4%zzIWR$ey zwkCU0ZdkuUymd-->u<@g{K0cquSTa0`ow$tcfAQGE*ISpfidWs1!cyD+~r6vhSGQX zKJ~JwRKI>&7JY1x&5_&M#}c#sHz^j>NM@*YG1?c8t(UV~h;J~5ql{<9DnCG(+*GHF zd3RSTv7oSInHvdADGtEGe=2p0jvQ<)T^!gWQS{piI+CRC5dAsQ=^3-9460gi)A-UW zUwkH|yf9LAyJ~K=f1u`+w87rH6ZAQqW)|(C_se{7j{uR37wrzy9+`uJ_78$*EG^8JwnQ#;o^OX|J%X=Y*tj#fc_gWQ_ZiR zdp}d5E9&JdIbzu$o853Z~(HkfXWhp?D_v4?~-msJD|w3*p@ydO<4qb(ExV*@Dx(bu69cq(fLzJSp;1wIP{?EJtpV9DtRjvR}$ z0lpgS6FL$?9B=?khhHDYZ{YwBK=S`<RBQP6djYQo)kfYPcKA;y#Nep2G!5tR9@C;Ohe09DTFU~EhWLmdc|^9# zz}m7T=&8dX^+zbEt#ME;YuT4XesTSoxlmI0?Q>a|xB1q_`un#v#+ zV!Tf)7TsRA2kGMLb4?;NF!JRE^d1DOH-e47INsf50^2%3)f-+;i)_*fWh5Nv_}LRb zd^^D&8e{X~Jvb;qx^70A7^3dI_EVGZrZsIW`FZX&b9X0NiWCDO|E^R5jqSMZ-{eap z9ybh{emE32sUcqlD#{Bu6+;XtN(R#aj(O8m8p9y?)$Bp~%7gTvk9auvVgMa2@|ku& zd|4L{@M-elWdZ{`UIktXQgP>|%jaYud^>EVg}CaWtz>R_ zCv{f6{lW3DlXN2Z+Z?&HI0wtM#M%BvHA{Jm`GvG1@l0HJ*L}|1^Cd+WKs&DKY5oSZ z0^zOzKf1_=KiB_MiTx-(yzM3_12%mg`URq`kOYA=;hRT& zX|y(Nf0?OIEl_<`=kC&M`I1T--uhzCL#|jZJzFvAy2Oq1mb6^#@3` ztbv?ybSLX3giie%VshHs?UQ20OXTc(n+1?ywegZ{VJunRk-z1+Tq{VpRY zf-PZMc{BflD=sj<+fH60RiW%3XkYxv-=$b^bGPLT`gc-_^%ocJIY?Z^Z5*SG#p?gI zRN}X?5Qr(njH)TmZUr*Nq|On##YnqyS-&2!`89o>kuVmD#CSg`_dvkY^iV=D4I34! zhkrZwNuJfoE)jAz<;|N+{Ko>pEP)&1-d^&o8+3N<5z(e&ejpa-nl4p`UG^7HHCm4Q zKF%(j2wRzF@>*zA$WN1YvbW}GLg9jjut=Lkl#AL{7t)q9m)^mvV5EXA-#rKR3oSdG zoNv^ZX9UT?chj@cnk?G?x{stLE^`eP=4I#N8b*kGfg#9@KDR zKFgh+wPL0vhschI`T%kv(Tp9rwc zOHFy=t8qA@J&eYFs;H!GLYk`m!p9~Etnnjz?&G~b8hAq=+?u<`?zA{OQ)<=56V9ZM z#<+lVSWu3nJV_tVGa16y)2fL}RkTc*Jh1x(}1(G_*Z=tVNO76wilkbfX z*Cmm7Cx4ow_tzg(;fZJ3VT!@Fe@MN?eT92QMH7Wt+p18C+iYJl=IBPTY37vWo>7Po zurhZOXAxpLH}PnY$M9h0lzpJn7W@^x6*@Tn>@i(_!AR9})`ScK*K#6|V|PF(a%Li#nB9M$LoxSlZqovxuar3Z5?bma#WiTaR<*(Q|f5cZ;^4z^>Hw zD2`rGxJcVqnR{nUOi{CiOUo) z>wdAgw^shQd-=SckLKZHTVaf;4fZqhkE{au1|D_l{>SP^Ol@kAU1tB~@{;2x{G$^? zPdrcYeI1{0ZW2nDiHFOj1-=_Im8xm;E(;W4jJI`Yg%8{Tcpw;+7RTKTdloMZ@QCcv zi#Y*lmdpuHzEWwIquBFi=FF1r>Zi&2`0p09Qbc*QubAo*FBuGs>7WKr$G)IJ#dp+NFw$701s+hLqBdH8D~2;EL!Tdh2} zIj8jEHnk!#fmdg4u(Ibu*>i3FNE3@P0`IqWPBI zM}7~?Y%CzjJz=?a(DGNc>2GR`H_;d-+CD})@;|_^fZEDh5R@QL_)WM5})>G9JYtJR_;3-&Gk z^?_V{aUwD8x{?9DW_|F=p^Gcc1BD^(f|6GeM^3T@e2(U@^dZfko6hOQ1%j};^-D+b z;5mCb^1nZMo24xU|C2FpjeDi11$2iV#ed2P97ixN&7U{kg4@ae)xIgE(+*%(SUi*( ztlfn6y1Uj`?XiyP%z?0$hNg?O5d~VuKSdIxSU~8GI)h1Dt<}oACw?WUAT&k01 z;lD4?y`1$sMPZ*7rsOh_s}miPjg-ga6$f@#zUr+OKJyVP$7x0 zUi$t$R?XeK8hmT;A*Q^g#WF#m#}J>GEy2)U^D;92lm2W}!2Ca--l9k(Nl_(3xn4Qv zt59fs3bDKLVN`(ZrDXxWoLL_I$g52`QR0%qRLJb_S=N?*%3Lc z+=|8(x1H#x7RTB%>PVMX*Xon4tn|d|#<#R}V|EN}Bn@F-Zif*7z2Mo@!t<#{vYJd B6EFY( literal 0 HcmV?d00001 From 91097eab5d5fa5016e9e43afec303c394b906c79 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Wed, 22 Nov 2017 16:14:49 -0800 Subject: [PATCH 37/72] Create ISSUE_TEMPLATE.md --- ISSUE_TEMPLATE.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 ISSUE_TEMPLATE.md diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..89b42e5 --- /dev/null +++ b/ISSUE_TEMPLATE.md @@ -0,0 +1,6 @@ +For English speaking user: +https://github.com/wangyu-/UDPspeeder/wiki/Issue-Guide + +中文用户请看: +https://github.com/wangyu-/UDPspeeder/wiki/发Issue前请看 +(否则Issue可能被忽略,或被直接关掉) From f081ab751d97fdd5d543ea63bcb731c0b22d33f0 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 23 Nov 2017 09:35:33 -0600 Subject: [PATCH 38/72] do not quit after got EINTR --- main.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/main.cpp b/main.cpp index 507c34b..6cef30f 100755 --- a/main.cpp +++ b/main.cpp @@ -1196,9 +1196,9 @@ int client_event_loop() if (nfds < 0) { //allow zero if(errno==EINTR ) { - mylog(log_info,"epoll interrupted by signal\n"); + mylog(log_info,"epoll interrupted by signal,continue\n"); //close(fifo_fd); - myexit(0); + //myexit(0); } else { @@ -1440,8 +1440,8 @@ int server_event_loop() if (nfds < 0) { //allow zero if(errno==EINTR ) { - mylog(log_info,"epoll interrupted by signal\n"); - myexit(0); + mylog(log_info,"epoll interrupted by signal,continue\n"); + //myexit(0); } else { From 3bc07d5c867a0c40e3b32da440ea247b02b51e4e Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 23 Nov 2017 09:56:20 -0600 Subject: [PATCH 39/72] more log for epoll_wait --- main.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main.cpp b/main.cpp index 6cef30f..37124ca 100755 --- a/main.cpp +++ b/main.cpp @@ -1202,7 +1202,7 @@ int client_event_loop() } else { - mylog(log_fatal,"epoll_wait return %d\n", nfds); + mylog(log_fatal,"epoll_wait return %d,%s\n", nfds,strerror(errno)); myexit(-1); } } @@ -1445,7 +1445,7 @@ int server_event_loop() } else { - mylog(log_fatal,"epoll_wait return %d\n", nfds); + mylog(log_fatal,"epoll_wait return %d,%s\n", nfds,strerror(errno)); myexit(-1); } } From b35edf74865275cdc970384681a1a076d3a8d0e1 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Fri, 24 Nov 2017 11:05:13 -0600 Subject: [PATCH 40/72] fixed get_current_time() --- common.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common.cpp b/common.cpp index e4523f1..c50d5d3 100644 --- a/common.cpp +++ b/common.cpp @@ -16,7 +16,7 @@ u64_t get_current_time() { timespec tmp_time; clock_gettime(CLOCK_MONOTONIC, &tmp_time); - return tmp_time.tv_sec*1000+tmp_time.tv_nsec/(1000*1000l); + return ((u64_t)tmp_time.tv_sec)*1000llu+((u64_t)tmp_time.tv_nsec)/(1000*1000llu); } u64_t pack_u64(u32_t a,u32_t b) From dc6fc48941c09ce2b3675d4872aaee8922ada536 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Tue, 28 Nov 2017 23:00:00 -0800 Subject: [PATCH 41/72] Update docs --- README.md | 2 +- doc/README.zh-cn.md | 8 +++++--- doc/build_guide.md | 22 +++++++++++++++++++--- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 4e5c5c1..378cc7c 100755 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ When used alone,udp2raw tunnels only UDP traffic. Nevertheless,if you used udp2r ![image_vpn](images/udp2rawopenvpn.PNG) -[简体中文](/doc/README.zh-cn.md) +[简体中文](/doc/README.zh-cn.md)(内容更丰富) # Support Platforms Linux host (including desktop Linux,Android phone/tablet,OpenWRT router,or Raspberry PI) with root access. diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index 00f889e..1ce49dd 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -79,10 +79,10 @@ https://github.com/wangyu-/udp2raw-tunnel/releases ``` 在server端运行: -./udp2raw_amd64 -s -l0.0.0.0:4096 -r 127.0.0.1:7777 -a -k "passwd" --raw-mode faketcp +./udp2raw_amd64 -s -l0.0.0.0:4096 -r127.0.0.1:7777 -a -k "passwd" --raw-mode faketcp --cipher-mode xor 在client端运行: -./udp2raw_amd64 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -a -k "passwd" --raw-mode faketcp +./udp2raw_amd64 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -a -k "passwd" --raw-mode faketcp --cipher-mode xor ``` ###### Server端输出: ![](/images/output_server.PNG) @@ -96,6 +96,8 @@ https://github.com/wangyu-/udp2raw-tunnel/releases 不论你用udp2raw来加速kcptun还是vpn,为了稳定使用,都需要设置合理的MTU(在kcptun/vpn里设置,而不是在udp2raw里),建议把MTU设置成1200。client和server端都要设置。 ### 提醒 +`--cipher-mode xor`表示仅使用简单的XOR加密,这样可以节省CPU占用,以免CPU成为速度瓶颈。如果你需要更强的加密,可以去掉此选项,使用默认的AES加密。加密相关的选项见后文的`--cipher-mode`和`--auth-mode`。 + 如果要在anroid上运行,请看[Android简明教程](/doc/android_guide.md) 如果要在梅林固件的路由器上使用,添加`--lower-level auto` `--keep-rule` @@ -164,7 +166,7 @@ other options: 用raw收发udp包也类似,只是内核回复的是icmp unreachable。而用raw 收发icmp,内核会自动回复icmp echo。都需要相应的iptables规则。 ### `--cipher-mode` 和 `--auth-mode` -如果要最大的安全性建议用aes128cbc+md5。如果要运行再路由器上,建议xor+simple。但是注意xor+simple只能骗过防火墙的包检测,不能防止真正的攻击者。 +如果要最大的安全性建议用aes128cbc+md5。如果要运行在路由器上,建议用xor+simple,可以节省CPU。但是注意xor+simple只能骗过防火墙的包检测,不能防止真正的攻击者。 ### `--seq-mode` facktcp模式并没有模拟tcp的全部。所以理论上有办法把faketcp和真正的tcp流量区分开来(虽然大部分ISP不太可能做这种程度的包检测)。seq-mode可以改变一些seq ack的行为。如果遇到了连接问题,可以尝试更改。在我这边的移动线路用3种模式都没问题。 diff --git a/doc/build_guide.md b/doc/build_guide.md index 2f2d4c5..8db829b 100644 --- a/doc/build_guide.md +++ b/doc/build_guide.md @@ -1,8 +1,10 @@ # udp2raw build guide -the guide on how to build udp2raw to you own platform +the guide on how to build udp2raw -## linux platform which supports local compile +## Build udp2raw for a specific platform + +### linux platform which supports local compile such as PC,raspberry pi ##### install git @@ -36,7 +38,7 @@ sudo yum groupinstall 'Development Tools' run 'make',compilation done. the udp2raw file is the just compiled binary -## platform which needs cross-compile +### platform which needs cross-compile such as openwrt router,run following instructions on your PC ##### install git @@ -74,3 +76,17 @@ cc_cross=/home/wangyu/Desktop/OpenWrt-SDK-15.05-ar71xx-generic_gcc-4.8-linaro_uC run `make cross`,the just generated `udp2raw_cross` is the binary,compile done. copy it to your router to run. `make cross` generates non-static binary. If you have any problem on running it,try to compile a static binary by using `make cross2` or `make cross3`.If your toolchain supports static compiling, usually one of them will succeed. The generated file is still named `udp2raw_cross`. + + + +## Build a full release (include all binaries supported in the makefile) + +1. make sure your linux is amd64 version + +2. clone the repo + +3. make sure you have g++ , make sure your g++ support the `-m32` option; make your your have installed libraries for `-m32` option + +4. download https://github.com/wangyu-/files/releases/download/files/toolchains.tar.gz , and extract it to the right position (according to the makefile) + +5. run `make release` inside udp2raw's directory From c217854190cda149610489506328d6f562be8c8b Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 14 Dec 2017 08:58:49 -0800 Subject: [PATCH 42/72] Update README.md --- README.md | 5 +++-- doc/README.zh-cn.md | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 378cc7c..dd13641 100755 --- a/README.md +++ b/README.md @@ -91,9 +91,10 @@ Now,an encrypted raw tunnel has been established between client and server throu ### Note To run on Android, check [Android_Guide](/doc/android_guide.md) -If you have connection problems.Take a look at `--seq-mode` option. +If you have connection problems. Take a look at `--seq-mode` option. -You can run udp2raw with a non-root account(for better security).Take a look at [#26](https://github.com/wangyu-/udp2raw-tunnel/issues/26) for more info. +### WARN +For long-term usage, for security reason, its strongly suggested to run udp2raw with a non-root account, though it needs some extra steps. Take a look at [this link](https://github.com/wangyu-/udp2raw-tunnel/wiki/run-udp2raw-with-non-root-account) for more info. # Advanced Topic ### Usage diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index 1ce49dd..2daf081 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -104,7 +104,9 @@ https://github.com/wangyu-/udp2raw-tunnel/releases 如果client和server无法连接,或者连接经常断开,请看一下`--seq-mode`的用法,尝试不同的seq-mode。 -udp2raw可以用非root账号运行,这样更安全。具体方法见:[#26](https://github.com/wangyu-/udp2raw-tunnel/issues/26) +### WARN + +udp2raw可以用非root账号运行,这样更安全。 如果你打算长期使用udp2raw的话,非常建议你阅读一下 [这个](https://github.com/wangyu-/udp2raw-tunnel/wiki/run-udp2raw-with-non-root-account) 链接,学习一下如何用非root账号运行udp2raw。 # 进阶操作说明 From c03177b3703b9c99af0704137fce960c79b81e9e Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 14 Dec 2017 11:25:48 -0600 Subject: [PATCH 43/72] changed log for root check --- main.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/main.cpp b/main.cpp index 37124ca..dc28dfb 100755 --- a/main.cpp +++ b/main.cpp @@ -1676,7 +1676,11 @@ int main(int argc, char *argv[]) if(geteuid() != 0) { - mylog(log_error,"root check failed,make sure you run this program with root,we can try to continue,but it will likely fail\n"); + mylog(log_error,"root check failed, it seems like you are using a non-root account. we can try to continue, but it may fail. If you want to run udp2raw as non-root, you have to add iptables rule manually, and grant udp2raw CAP_NET_RAW capability, check README.md in repo for more info.\n"); + } + else + { + mylog(log_warn,"you can run udp2raw with non-root account for better security. check README.md in repo for more info.\n"); } local_ip_uint32=inet_addr(local_ip); From 19b4d456365ea5d44e2fa6e7447e59061f14ef51 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Fri, 15 Dec 2017 02:34:56 -0800 Subject: [PATCH 44/72] Update README.md --- README.md | 5 +++-- doc/README.zh-cn.md | 6 ++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index dd13641..a32497e 100755 --- a/README.md +++ b/README.md @@ -81,6 +81,8 @@ Assume your UDP is blocked or being QOS-ed or just poorly supported. Assume your # Run at client side ./udp2raw_amd64 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -a -k "passwd" --raw-mode faketcp ``` +(The above commands need to be run as root. For better security, with some extra steps, you can run udp2raw as non-root. Check [this link](https://github.com/wangyu-/udp2raw-tunnel/wiki/run-udp2raw-as-non-root) for more info ) + ###### Server Output: ![](images/output_server.PNG) ###### Client Output: @@ -93,8 +95,7 @@ To run on Android, check [Android_Guide](/doc/android_guide.md) If you have connection problems. Take a look at `--seq-mode` option. -### WARN -For long-term usage, for security reason, its strongly suggested to run udp2raw with a non-root account, though it needs some extra steps. Take a look at [this link](https://github.com/wangyu-/udp2raw-tunnel/wiki/run-udp2raw-with-non-root-account) for more info. + # Advanced Topic ### Usage diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index 2daf081..5c0ffa9 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -84,6 +84,8 @@ https://github.com/wangyu-/udp2raw-tunnel/releases 在client端运行: ./udp2raw_amd64 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -a -k "passwd" --raw-mode faketcp --cipher-mode xor ``` +(以上例子需要用root账号运行。 用非root运行udp2raw需要一些额外的步骤,具体方法请看 [这个](https://github.com/wangyu-/udp2raw-tunnel/wiki/run-udp2raw-as-non-root) 链接。用非root运行更安全) + ###### Server端输出: ![](/images/output_server.PNG) ###### Client端输出: @@ -104,10 +106,6 @@ https://github.com/wangyu-/udp2raw-tunnel/releases 如果client和server无法连接,或者连接经常断开,请看一下`--seq-mode`的用法,尝试不同的seq-mode。 -### WARN - -udp2raw可以用非root账号运行,这样更安全。 如果你打算长期使用udp2raw的话,非常建议你阅读一下 [这个](https://github.com/wangyu-/udp2raw-tunnel/wiki/run-udp2raw-with-non-root-account) 链接,学习一下如何用非root账号运行udp2raw。 - # 进阶操作说明 ### 命令选项 From 1e9404e6eccbabcc0341647a834c2b025795ab7d Mon Sep 17 00:00:00 2001 From: wangyu- Date: Fri, 29 Dec 2017 05:41:04 -0600 Subject: [PATCH 45/72] add luci-app-udp2raw and udp2raw-openwrt-makefile --- third-party/luci-app-udp2raw/LICENSE | 622 ++++++++++++++++++ third-party/luci-app-udp2raw/Makefile | 76 +++ .../files/luci/controller/udp2raw.lua | 30 + .../files/luci/i18n/udp2raw.zh-cn.lmo | Bin 0 -> 1364 bytes .../files/luci/i18n/udp2raw.zh-cn.po | 120 ++++ .../files/luci/model/cbi/udp2raw/general.lua | 38 ++ .../model/cbi/udp2raw/servers-details.lua | 96 +++ .../files/luci/model/cbi/udp2raw/servers.lua | 56 ++ .../files/luci/view/udp2raw_status.htm | 39 ++ .../files/root/etc/config/udp2raw | 16 + .../files/root/etc/init.d/udp2raw | 121 ++++ .../files/root/etc/uci-defaults/luci-udp2raw | 25 + .../luci-app-udp2raw/luci-app-udp2raw1.jpg | Bin 0 -> 87254 bytes .../luci-app-udp2raw/luci-app-udp2raw2.jpg | Bin 0 -> 91137 bytes .../luci-app-udp2raw/luci-app-udp2raw3.jpg | Bin 0 -> 152168 bytes .../luci-app-udp2raw/tools/po2lmo/Makefile | 12 + .../tools/po2lmo/src/po2lmo.c | 247 +++++++ .../tools/po2lmo/src/template_lmo.c | 328 +++++++++ .../tools/po2lmo/src/template_lmo.h | 92 +++ third-party/udp2raw-openwrt-makefile/LICENSE | 21 + third-party/udp2raw-openwrt-makefile/Makefile | 56 ++ 21 files changed, 1995 insertions(+) create mode 100644 third-party/luci-app-udp2raw/LICENSE create mode 100644 third-party/luci-app-udp2raw/Makefile create mode 100644 third-party/luci-app-udp2raw/files/luci/controller/udp2raw.lua create mode 100644 third-party/luci-app-udp2raw/files/luci/i18n/udp2raw.zh-cn.lmo create mode 100644 third-party/luci-app-udp2raw/files/luci/i18n/udp2raw.zh-cn.po create mode 100644 third-party/luci-app-udp2raw/files/luci/model/cbi/udp2raw/general.lua create mode 100644 third-party/luci-app-udp2raw/files/luci/model/cbi/udp2raw/servers-details.lua create mode 100644 third-party/luci-app-udp2raw/files/luci/model/cbi/udp2raw/servers.lua create mode 100644 third-party/luci-app-udp2raw/files/luci/view/udp2raw_status.htm create mode 100644 third-party/luci-app-udp2raw/files/root/etc/config/udp2raw create mode 100644 third-party/luci-app-udp2raw/files/root/etc/init.d/udp2raw create mode 100644 third-party/luci-app-udp2raw/files/root/etc/uci-defaults/luci-udp2raw create mode 100644 third-party/luci-app-udp2raw/luci-app-udp2raw1.jpg create mode 100644 third-party/luci-app-udp2raw/luci-app-udp2raw2.jpg create mode 100644 third-party/luci-app-udp2raw/luci-app-udp2raw3.jpg create mode 100644 third-party/luci-app-udp2raw/tools/po2lmo/Makefile create mode 100644 third-party/luci-app-udp2raw/tools/po2lmo/src/po2lmo.c create mode 100644 third-party/luci-app-udp2raw/tools/po2lmo/src/template_lmo.c create mode 100644 third-party/luci-app-udp2raw/tools/po2lmo/src/template_lmo.h create mode 100644 third-party/udp2raw-openwrt-makefile/LICENSE create mode 100644 third-party/udp2raw-openwrt-makefile/Makefile diff --git a/third-party/luci-app-udp2raw/LICENSE b/third-party/luci-app-udp2raw/LICENSE new file mode 100644 index 0000000..e963df8 --- /dev/null +++ b/third-party/luci-app-udp2raw/LICENSE @@ -0,0 +1,622 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + diff --git a/third-party/luci-app-udp2raw/Makefile b/third-party/luci-app-udp2raw/Makefile new file mode 100644 index 0000000..8ce589e --- /dev/null +++ b/third-party/luci-app-udp2raw/Makefile @@ -0,0 +1,76 @@ +# +# Copyright (C) 2016-2017 Jian Chang +# +# This is free software, licensed under the GNU General Public License v3. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=luci-app-udp2raw +PKG_VERSION:=1.0.0 +PKG_RELEASE:=1 + +PKG_LICENSE:=GPLv3 +PKG_LICENSE_FILES:=LICENSE +PKG_MAINTAINER:=Jian Chang + +PKG_BUILD_PARALLEL:=1 + +include $(INCLUDE_DIR)/package.mk + +define Package/luci-app-udp2raw + SECTION:=luci + CATEGORY:=LuCI + SUBMENU:=3. Applications + TITLE:=LuCI Support for udp2raw-tunnel + PKGARCH:=all + DEPENDS:=+udp2raw-tunnel +endef + +define Package/luci-app-udp2raw/description + LuCI Support for udp2raw-tunnel. +endef + +define Build/Prepare + $(foreach po,$(wildcard ${CURDIR}/files/luci/i18n/*.po), \ + po2lmo $(po) $(PKG_BUILD_DIR)/$(patsubst %.po,%.lmo,$(notdir $(po)));) +endef + +define Build/Configure +endef + +define Build/Compile +endef + +define Package/luci-app-udp2raw/postinst +#!/bin/sh +if [ -z "$${IPKG_INSTROOT}" ]; then + ( . /etc/uci-defaults/luci-udp2raw ) && rm -f /etc/uci-defaults/luci-udp2raw + rm -rf /tmp/luci-indexcache /tmp/luci-modulecache +fi +exit 0 +endef + +define Package/luci-app-udp2raw/conffiles +/etc/config/udp2raw +endef + +define Package/luci-app-udp2raw/install + $(INSTALL_DIR) $(1)/usr/lib/lua/luci/i18n + $(INSTALL_DATA) $(PKG_BUILD_DIR)/udp2raw.*.lmo $(1)/usr/lib/lua/luci/i18n/ + $(INSTALL_DIR) $(1)/usr/lib/lua/luci/controller + $(INSTALL_DATA) ./files/luci/controller/*.lua $(1)/usr/lib/lua/luci/controller/ + $(INSTALL_DIR) $(1)/usr/lib/lua/luci/model/cbi/udp2raw + $(INSTALL_DATA) ./files/luci/model/cbi/udp2raw/*.lua $(1)/usr/lib/lua/luci/model/cbi/udp2raw/ + $(INSTALL_DIR) $(1)/usr/lib/lua/luci/view + $(INSTALL_DATA) ./files/luci/view/*.htm $(1)/usr/lib/lua/luci/view/ + $(INSTALL_DIR) $(1)/etc/config + $(INSTALL_CONF) ./files/root/etc/config/udp2raw $(1)/etc/config/udp2raw + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) ./files/root/etc/init.d/udp2raw $(1)/etc/init.d/udp2raw + $(INSTALL_DIR) $(1)/etc/uci-defaults + $(INSTALL_BIN) ./files/root/etc/uci-defaults/luci-udp2raw $(1)/etc/uci-defaults/luci-udp2raw +endef + +$(eval $(call BuildPackage,luci-app-udp2raw)) diff --git a/third-party/luci-app-udp2raw/files/luci/controller/udp2raw.lua b/third-party/luci-app-udp2raw/files/luci/controller/udp2raw.lua new file mode 100644 index 0000000..81d1f01 --- /dev/null +++ b/third-party/luci-app-udp2raw/files/luci/controller/udp2raw.lua @@ -0,0 +1,30 @@ +module("luci.controller.udp2raw", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/udp2raw") then + return + end + + entry({"admin", "services", "udp2raw"}, + firstchild(), _("udp2raw-tunnel")).dependent = false + + entry({"admin", "services", "udp2raw", "general"}, + cbi("udp2raw/general"), _("Settings"), 1) + + entry({"admin", "services", "udp2raw", "servers"}, + arcombine(cbi("udp2raw/servers"), cbi("udp2raw/servers-details")), + _("Servers Manage"), 2).leaf = true + + entry({"admin", "services", "udp2raw", "status"}, call("action_status")) +end + +local function is_running(name) + return luci.sys.call("pidof %s >/dev/null" %{name}) == 0 +end + +function action_status() + luci.http.prepare_content("application/json") + luci.http.write_json({ + running = is_running("udp2raw") + }) +end diff --git a/third-party/luci-app-udp2raw/files/luci/i18n/udp2raw.zh-cn.lmo b/third-party/luci-app-udp2raw/files/luci/i18n/udp2raw.zh-cn.lmo new file mode 100644 index 0000000000000000000000000000000000000000..e25325de0821449545710424e3005f4229cfaf7e GIT binary patch literal 1364 zcma)5eN06Le%Z_H0jAHj=DMCXe44a*xe&DFb`>h{Y;32q8!j`mZ7R$M?D!QHteBa=bm z^pI$Wa8k=|yvs;!0nu{NVSn9TIrR)C^5N!Up(FA)s~hW@Ycz7+(Jp7(WatD!h!GPr zVJhFUy)4mpqKEf-V<7_>KTJ%PI3Bh&K#e|P=(rv+P*()T*CP%^U2}bIW^S%3FHe=9 zuPP`|6&9-2uU9aQ&L&q>A86jANO;qbxlGNTDS{svAnu+;KfDhl5+b@FHFOc5BOy$* zaDe|^_y6h>#h4uncicJiju+H9J4@Af{OltnYUe|4yadT_TQeTu#xoHq10|C#NPc*X z`nCh>P^oFZmNca_zT5$d33d%@EmA~TNS$}1;<%TXDRtCF?BZ(b}0 zZbeCzCY>apSeFESF8J~%RNvLonEldjrQ*3F;QLW2RTp|U@5)vhfCG%z*vO>CnY93YDY&$$<*&5x-d}jkk1@VawQQ5( z$zIHt)Pt|lm*2SW)CwQV5<$sKNA<%8zkb+?ePrfR`mFhm`JYNZK)(z8c?Yc>)fD$( zo7pT@7=SJF6<|Rzc#tqJ9o&j`g7nywjZ8tI9D)Eeun->@a12Y_N+RZ)xyrt z&X<1nt(U&?Zd6a9pXE_rC|WhVXMSZXFuSjmxyzrbYjS4a2VRSkUcSAsF?4bFP57A^ zr+){MgmULL;4`RY!llM~<&}sA`@7hFd{af>{Cmesz#j!qkK6T+)D7OA2NqCizg?T? pes#KG4!9PTdh?IA-q-7gwjxgz_&v9b2TLm3)3bs9M9Hvz<6pM!bj|<( literal 0 HcmV?d00001 diff --git a/third-party/luci-app-udp2raw/files/luci/i18n/udp2raw.zh-cn.po b/third-party/luci-app-udp2raw/files/luci/i18n/udp2raw.zh-cn.po new file mode 100644 index 0000000..fb20472 --- /dev/null +++ b/third-party/luci-app-udp2raw/files/luci/i18n/udp2raw.zh-cn.po @@ -0,0 +1,120 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8\n" + +msgid "udp2raw-tunnel" +msgstr "udp2raw 隧道" + +msgid "Settings" +msgstr "设置" + +msgid "Servers Manage" +msgstr "服务器管理" + +msgid "Running Status" +msgstr "运行状态" + +msgid "Binary Version" +msgstr "文件版本" + +msgid "Build Time" +msgstr "编译时间" + +msgid "Invalid Binary File." +msgstr "可执行文件无效。" + +msgid "RUNNING" +msgstr "运行中" + +msgid "NOT RUNNING" +msgstr "未运行" + +msgid "General Settings" +msgstr "基本设置" + +msgid "Server" +msgstr "服务器" + +msgid "Disable" +msgstr "停用" + +msgid "Run Daemon as User" +msgstr "以该用户启动" + +msgid "Alias" +msgstr "别名" + +msgid "None" +msgstr "无" + +msgid "Server Address" +msgstr "服务器地址" + +msgid "Listen Address" +msgstr "监听地址" + +msgid "Edit Server" +msgstr "编辑服务器" + +msgid "Alias(optional)" +msgstr "别名(可选)" + +msgid "Server Port" +msgstr "服务器端口" + +msgid "Local Listen Host" +msgstr "本地监听地址" + +msgid "Local Listen Port" +msgstr "本地监听端口" + +msgid "Raw Mode" +msgstr "Raw 方式" + +msgid "Password" +msgstr "密码" + +msgid "Cipher Mode" +msgstr "加密方式" + +msgid "Auth Mode" +msgstr "认证方式" + +msgid "Auto Rule" +msgstr "自动规则" + +msgid "Auto add (and delete) iptables rule." +msgstr "自动添加/删除 iptables 规则。" + +msgid "Keep Rule" +msgstr "保持规则" + +msgid "Monitor iptables and auto re-add if necessary." +msgstr "监视 iptables 并在必要时重新添加规则。" + +msgid "seq Mode" +msgstr "seq 模式" + +msgid "seq increase mode for faketcp." +msgstr "用于 faketcp 的 seq 增加方式。" + +msgid "Lower Level" +msgstr "" + +msgid "Send packets at OSI level 2, format: \"eth0#00:11:22:33:44:55\", or \"auto\"." +msgstr "在 OSI 模型第二层发送数据包,格式:\"eth0#00:11:22:33:44:55\",或 \"auto\"。" + +msgid "Source-IP" +msgstr "源IP" + +msgid "Force source-ip for Raw Socket." +msgstr "在原始数据包中强制指定源IP。" + +msgid "Source-Port" +msgstr "源端口" + +msgid "Force source-port for Raw Socket, TCP/UDP only." +msgstr "在原始数据包中强制指定源端口,仅用于 TCP/UDP。" + +msgid "Log Level" +msgstr "日志级别" + diff --git a/third-party/luci-app-udp2raw/files/luci/model/cbi/udp2raw/general.lua b/third-party/luci-app-udp2raw/files/luci/model/cbi/udp2raw/general.lua new file mode 100644 index 0000000..a4d3430 --- /dev/null +++ b/third-party/luci-app-udp2raw/files/luci/model/cbi/udp2raw/general.lua @@ -0,0 +1,38 @@ +local m, s, o +local uci = luci.model.uci.cursor() +local servers = {} + +local function has_bin(name) + return luci.sys.call("command -v %s >/dev/null" %{name}) == 0 +end + +if not has_bin("udp2raw") then + return Map("udp2raw", "%s - %s" %{translate("udp2raw-tunnel"), + translate("Settings")}, 'udp2raw-tunnel binary file not found.') +end + +uci:foreach("udp2raw", "servers", function(s) + if s.server_addr and s.server_port then + servers[#servers+1] = {name = s[".name"], alias = s.alias or "%s:%s" %{s.server_addr, s.server_port}} + end +end) + +m = Map("udp2raw", "%s - %s" %{translate("udp2raw-tunnel"), translate("Settings")}) +m:append(Template("udp2raw_status")) + +s = m:section(NamedSection, "general", "general", translate("General Settings")) +s.anonymous = true +s.addremove = false + +o = s:option(ListValue, "server", translate("Server")) +o:value("nil", translate("Disable")) +for _, s in ipairs(servers) do o:value(s.name, s.alias) end +o.default = "nil" +o.rmempty = false + +o = s:option(ListValue, "daemon_user", translate("Run Daemon as User")) +for u in luci.util.execi("cat /etc/passwd | cut -d ':' -f1") do o:value(u) end +o.default = "root" +o.rmempty = false + +return m diff --git a/third-party/luci-app-udp2raw/files/luci/model/cbi/udp2raw/servers-details.lua b/third-party/luci-app-udp2raw/files/luci/model/cbi/udp2raw/servers-details.lua new file mode 100644 index 0000000..ba961d1 --- /dev/null +++ b/third-party/luci-app-udp2raw/files/luci/model/cbi/udp2raw/servers-details.lua @@ -0,0 +1,96 @@ +local m, s, o +local sid = arg[1] + +local raw_modes = { + "faketcp", + "udp", + "icmp", +} + +local cipher_modes = { + "aes128cbc", + "xor", + "none", +} + +local auth_modes = { + "md5", + "crc32", + "simple", + "none", +} + +m = Map("udp2raw", "%s - %s" %{translate("udp2raw-tunnel"), translate("Edit Server")}) +m.redirect = luci.dispatcher.build_url("admin/services/udp2raw/servers") +m.sid = sid + +if m.uci:get("udp2raw", sid) ~= "servers" then + luci.http.redirect(m.redirect) + return +end + +s = m:section(NamedSection, sid, "servers") +s.anonymous = true +s.addremove = false + +o = s:option(Value, "alias", translate("Alias(optional)")) + +o = s:option(Value, "server_addr", translate("Server")) +o.datatype = "host" +o.rmempty = false + +o = s:option(Value, "server_port", translate("Server Port")) +o.datatype = "port" +o.placeholder = "8080" + +o = s:option(Value, "listen_addr", translate("Local Listen Host")) +o.datatype = "ipaddr" +o.placeholder = "127.0.0.1" + +o = s:option(Value, "listen_port", translate("Local Listen Port")) +o.datatype = "port" +o.placeholder = "2080" + +o = s:option(ListValue, "raw_mode", translate("Raw Mode")) +for _, v in ipairs(raw_modes) do o:value(v, v:lower()) end +o.default = "faketcp" +o.rmempty = false + +o = s:option(Value, "key", translate("Password")) +o.password = true + +o = s:option(ListValue, "cipher_mode", translate("Cipher Mode")) +for _, v in ipairs(cipher_modes) do o:value(v, v:lower()) end +o.default = "aes128cbc" + +o = s:option(ListValue, "auth_mode", translate("Auth Mode")) +for _, v in ipairs(auth_modes) do o:value(v, v:lower()) end +o.default = "md5" + +o = s:option(Flag, "auto_rule", translate("Auto Rule"), translate("Auto add (and delete) iptables rule.")) +o.enabled = "1" +o.disabled = "0" +o.default = "1" + +o = s:option(Flag, "keep_rule", translate("Keep Rule"), translate("Monitor iptables and auto re-add if necessary.")) +o.enabled = "1" +o.disabled = "0" +o:depends("auto_rule", "1") + +o = s:option(Value, "seq_mode", translate("seq Mode"), translate("seq increase mode for faketcp.")) +o.datatype = "range(0,4)" +o.placeholder = "3" + +o = s:option(Value, "lower_level", translate("Lower Level"), translate("Send packets at OSI level 2, format: \"eth0#00:11:22:33:44:55\", or \"auto\".")) + +o = s:option(Value, "source_ip", translate("Source-IP"), translate("Force source-ip for Raw Socket.")) +o.datatype = "ipaddr" + +o = s:option(Value, "source_port", translate("Source-Port"), translate("Force source-port for Raw Socket, TCP/UDP only.")) +o.datatype = "port" + +o = s:option(Value, "log_level", translate("Log Level")) +o.datatype = "range(0,6)" +o.placeholder = "4" + +return m diff --git a/third-party/luci-app-udp2raw/files/luci/model/cbi/udp2raw/servers.lua b/third-party/luci-app-udp2raw/files/luci/model/cbi/udp2raw/servers.lua new file mode 100644 index 0000000..34be005 --- /dev/null +++ b/third-party/luci-app-udp2raw/files/luci/model/cbi/udp2raw/servers.lua @@ -0,0 +1,56 @@ +local m, s, o + +m = Map("udp2raw", "%s - %s" %{translate("udp2raw-tunnel"), translate("Servers Manage")}) + +s = m:section(TypedSection, "servers") +s.anonymous = true +s.addremove = true +s.sortable = true +s.template = "cbi/tblsection" +s.extedit = luci.dispatcher.build_url("admin/services/udp2raw/servers/%s") +function s.create(...) + local sid = TypedSection.create(...) + if sid then + luci.http.redirect(s.extedit % sid) + return + end +end + +o = s:option(DummyValue, "alias", translate("Alias")) +function o.cfgvalue(...) + return Value.cfgvalue(...) or translate("None") +end + +o = s:option(DummyValue, "_server_address", translate("Server Address")) +function o.cfgvalue(self, section) + local server_addr = m.uci:get("udp2raw", section, "server_addr") or "?" + local server_port = m.uci:get("udp2raw", section, "server_port") or "8080" + return "%s:%s" %{server_addr, server_port} +end + +o = s:option(DummyValue, "_listen_address", translate("Listen Address")) +function o.cfgvalue(self, section) + local listen_addr = m.uci:get("udp2raw", section, "listen_addr") or "127.0.0.1" + local listen_port = m.uci:get("udp2raw", section, "listen_port") or "2080" + return "%s:%s" %{listen_addr, listen_port} +end + +o = s:option(DummyValue, "raw_mode", translate("Raw Mode")) +function o.cfgvalue(...) + local v = Value.cfgvalue(...) + return v and v:lower() or "faketcp" +end + +o = s:option(DummyValue, "cipher_mode", translate("Cipher Mode")) +function o.cfgvalue(...) + local v = Value.cfgvalue(...) + return v and v:lower() or "aes128cbc" +end + +o = s:option(DummyValue, "auth_mode", translate("Auth Mode")) +function o.cfgvalue(...) + local v = Value.cfgvalue(...) + return v and v:lower() or "md5" +end + +return m diff --git a/third-party/luci-app-udp2raw/files/luci/view/udp2raw_status.htm b/third-party/luci-app-udp2raw/files/luci/view/udp2raw_status.htm new file mode 100644 index 0000000..964b117 --- /dev/null +++ b/third-party/luci-app-udp2raw/files/luci/view/udp2raw_status.htm @@ -0,0 +1,39 @@ +<% +local function get_udp2raw_version(name) + local info = luci.util.split(luci.sys.exec("%s -h 2>/dev/null" %{name}), "\n") + local version = string.match(info[2], "git version:(%w+)") + local build = string.match(info[2], "build date:(.+)") + return info[1] == "udp2raw-tunnel" and version or "", info[1] == "udp2raw-tunnel" and build or "" +end + +local udp2raw_version, udp2raw_build = get_udp2raw_version("udp2raw") +-%> + +

+ <%:Running Status%> + + + + + + <% if udp2raw_build ~= "" then -%> + + <% end -%> + +
<%:Binary Version%> + <% if udp2raw_version == "" then -%> + <%:Invalid Binary File.%> + <% else -%> + <%=pcdata(udp2raw_version)%> + <%- end %> +
<%:Build Time%><%=pcdata(udp2raw_build)%>
<%:Running Status%><%:Collecting data...%>
+
+ + diff --git a/third-party/luci-app-udp2raw/files/root/etc/config/udp2raw b/third-party/luci-app-udp2raw/files/root/etc/config/udp2raw new file mode 100644 index 0000000..8a27625 --- /dev/null +++ b/third-party/luci-app-udp2raw/files/root/etc/config/udp2raw @@ -0,0 +1,16 @@ + +config general 'general' + option server 'nil' + option daemon_user 'root' + +config servers 'default' + option server_addr '' + option server_port '8080' + option listen_addr '127.0.0.1' + option listen_port '2080' + option raw_mode 'faketcp' + option key '' + option cipher_mode 'aes128cbc' + option auth_mode 'md5' + option auto_rule '1' + diff --git a/third-party/luci-app-udp2raw/files/root/etc/init.d/udp2raw b/third-party/luci-app-udp2raw/files/root/etc/init.d/udp2raw new file mode 100644 index 0000000..3733b66 --- /dev/null +++ b/third-party/luci-app-udp2raw/files/root/etc/init.d/udp2raw @@ -0,0 +1,121 @@ +#!/bin/sh /etc/rc.common + +START=88 +USE_PROCD=1 + +UDP2RAW=udp2raw + +_log() { + local level="$1" + local msg="$2" + + logger -p "daemon.${level}" -t "$UDP2RAW" "$msg" +} + +gen_client_config_file() { + local config_file="$1" + echo "# auto-generated config file from /etc/config/udp2raw" > $config_file + + echo "-c" >> $config_file + echo "-l ${listen_addr}:${listen_port}" >> $config_file && _log "info" "listening on: ${listen_addr}:${listen_port}" + echo "-r ${server_addr}:${server_port}" >> $config_file && _log "info" "remote address: ${server_addr}:${server_port}" + + [ -n "$raw_mode" ] && echo "--raw-mode ${raw_mode}" >> $config_file && _log "info" "raw-mode: ${raw_mode}" + [ -n "$key" ] && echo "--key ${key}" >> $config_file + [ -n "$cipher_mode" ] && echo "--cipher-mode ${cipher_mode}" >> $config_file && _log "info" "cipher-mode: ${cipher_mode}" + [ -n "$auth_mode" ] && echo "--auth-mode ${auth_mode}" >> $config_file && _log "info" "auth-mode: ${auth_mode}" + + [ "$auto_rule" -ne 0 ] && echo "--auto-rule" >> $config_file && _log "info" "auto-rule: true" + [ "$auto_rule" -ne 0 -a "$keep_rule" -ne 0 ] && echo "--keep-rule" >> $config_file && _log "info" "keep-rule: true" + + [ -n "$seq_mode" ] && echo "--seq-mode ${seq_mode}" >> $config_file && _log "info" "seq-mode: ${seq_mode}" + [ -n "$lower_level" ] && echo "--lower-level ${lower_level}" >> $config_file && _log "info" "lower-level: ${lower_level}" + [ -n "$source_ip" ] && echo "--source-ip ${source_ip}" >> $config_file + [ -n "$source_port" ] && echo "--source-port ${source_port}" >> $config_file + + [ -n "$log_level" ] && echo "--log-level ${log_level}" >> $config_file + echo "--disable-color" >> $config_file + _log "info" "running from ${daemon_user} user" +} + +validate_config_section() { + uci_validate_section "$UDP2RAW" general "$1" \ + 'server:uciname' \ + 'daemon_user:string:root' +} + +validate_server_section() { + uci_validate_section "$UDP2RAW" servers "$1" \ + 'server_addr:host' \ + 'server_port:port:8080' \ + 'listen_addr:ipaddr:127.0.0.1' \ + 'listen_port:port:2080' \ + 'raw_mode:or("faketcp", "udp", "icmp"):faketcp' \ + 'key:string' \ + 'cipher_mode:or("aes128cbc", "xor", "none"):aes128cbc' \ + 'auth_mode:or("md5", "crc32", "simple", "none"):md5' \ + 'auto_rule:bool:1' \ + 'keep_rule:bool:0' \ + 'seq_mode:range(0,4)' \ + 'lower_level:string' \ + 'source_ip:ipaddr' \ + 'source_port:port' \ + 'log_level:range(0,6)' +} + +start_udp2raw_instance() { + local section="$1" + + if ! validate_config_section "$section" ; then + _log "err" "Config validate failed." + return 1 + fi + + if [ -z "$server" ] || [ "$server" = "nil" ]; then + return 0 + elif ! validate_server_section "$server"; then + _log "err" "Server config validation failed." + return 1 + elif [ -z "$server_addr" ]; then + _log "err" "Server address validation failed." + return 1 + fi + + is_ipv6_address() { + echo "$1" | grep -q ":" + } + + is_ipv6_address "$server_addr" && server_addr="[${server_addr}]" + is_ipv6_address "$listen_addr" && listen_addr="[${listen_addr}]" + + _log "notice" "udp2raw-tunnel start." + [ -d /var/etc ] || mkdir -p /var/etc + local config_file=/var/etc/${UDP2RAW}.${server}.conf + + if ! ( gen_client_config_file "$config_file" ); then + _log "err" "Can't create config file". + return 1 + fi + + procd_open_instance + procd_set_param command /usr/bin/udp2raw + procd_append_param command --conf-file "$config_file" + procd_set_param respawn + procd_set_param file "$config_file" + procd_set_param user "$daemon_user" + procd_set_param pidfile /var/run/${UDP2RAW}.${server}.pid + procd_close_instance +} + +service_triggers() { + procd_add_reload_trigger "$UDP2RAW" +} + +start_service() { + config_load "$UDP2RAW" + config_foreach start_udp2raw_instance "general" +} + +stop_service() { + _log "notice" "udp2raw-tunnel stop." +} diff --git a/third-party/luci-app-udp2raw/files/root/etc/uci-defaults/luci-udp2raw b/third-party/luci-app-udp2raw/files/root/etc/uci-defaults/luci-udp2raw new file mode 100644 index 0000000..c04688e --- /dev/null +++ b/third-party/luci-app-udp2raw/files/root/etc/uci-defaults/luci-udp2raw @@ -0,0 +1,25 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@udp2raw[-1] + add ucitrack udp2raw + set ucitrack.@udp2raw[-1].init=udp2raw + commit ucitrack +EOF + +general=$(uci -q get udp2raw.@general[-1]) + +if [ -z "$general" ]; then + uci -q add udp2raw general +fi + +if [ ."$general" != ."general" ]; then + uci -q batch <<-EOF >/dev/null + rename udp2raw.@general[-1]="general" + set udp2raw.general.server="nil" + commit udp2raw + EOF +fi + +rm -rf /tmp/luci-indexcache /tmp/luci-modulecache +exit 0 diff --git a/third-party/luci-app-udp2raw/luci-app-udp2raw1.jpg b/third-party/luci-app-udp2raw/luci-app-udp2raw1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b44fbd5c88acc6b669a213ea1096d5f7e2f7be5f GIT binary patch literal 87254 zcmeFZcUTkM*C-mgbU})A6c7**>Agu45Ru+NdKc-TMnOQ4B3+6g0s>MZy%Qi5>C$@% zReC}RfrN1KzVCO>J@>okJm=o~$N7HWxlWRKCVOV~%vyWxwO7BMy

})Kb?}2jJlW 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%0D#h(@m}b4C#6_}tRHG`(dhbK4tsuAa>I|QYy~dh# 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 literal 0 HcmV?d00001 diff --git a/third-party/luci-app-udp2raw/luci-app-udp2raw3.jpg b/third-party/luci-app-udp2raw/luci-app-udp2raw3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b8b4e30c4d81e1488473d1491a48390ff059694c GIT binary patch literal 152168 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 B`}P0; literal 0 HcmV?d00001 diff --git a/third-party/luci-app-udp2raw/tools/po2lmo/Makefile b/third-party/luci-app-udp2raw/tools/po2lmo/Makefile new file mode 100644 index 0000000..ad2c133 --- /dev/null +++ b/third-party/luci-app-udp2raw/tools/po2lmo/Makefile @@ -0,0 +1,12 @@ + +INSTALL = install +PREFIX = /usr/bin + +po2lmo: src/po2lmo.o src/template_lmo.o + $(CC) $(LDFLAGS) -o src/po2lmo src/po2lmo.o src/template_lmo.o + +install: + $(INSTALL) -m 755 src/po2lmo $(PREFIX) + +clean: + $(RM) src/po2lmo src/*.o diff --git a/third-party/luci-app-udp2raw/tools/po2lmo/src/po2lmo.c b/third-party/luci-app-udp2raw/tools/po2lmo/src/po2lmo.c new file mode 100644 index 0000000..0da792b --- /dev/null +++ b/third-party/luci-app-udp2raw/tools/po2lmo/src/po2lmo.c @@ -0,0 +1,247 @@ +/* + * lmo - Lua Machine Objects - PO to LMO conversion tool + * + * Copyright (C) 2009-2012 Jo-Philipp Wich + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "template_lmo.h" + +static void die(const char *msg) +{ + fprintf(stderr, "Error: %s\n", msg); + exit(1); +} + +static void usage(const char *name) +{ + fprintf(stderr, "Usage: %s input.po output.lmo\n", name); + exit(1); +} + +static void print(const void *ptr, size_t size, size_t nmemb, FILE *stream) +{ + if( fwrite(ptr, size, nmemb, stream) == 0 ) + die("Failed to write stdout"); +} + +static int extract_string(const char *src, char *dest, int len) +{ + int pos = 0; + int esc = 0; + int off = -1; + + for( pos = 0; (pos < strlen(src)) && (pos < len); pos++ ) + { + if( (off == -1) && (src[pos] == '"') ) + { + off = pos + 1; + } + else if( off >= 0 ) + { + if( esc == 1 ) + { + switch (src[pos]) + { + case '"': + case '\\': + off++; + break; + } + dest[pos-off] = src[pos]; + esc = 0; + } + else if( src[pos] == '\\' ) + { + dest[pos-off] = src[pos]; + esc = 1; + } + else if( src[pos] != '"' ) + { + dest[pos-off] = src[pos]; + } + else + { + dest[pos-off] = '\0'; + break; + } + } + } + + return (off > -1) ? strlen(dest) : -1; +} + +static int cmp_index(const void *a, const void *b) +{ + uint32_t x = ((const lmo_entry_t *)a)->key_id; + uint32_t y = ((const lmo_entry_t *)b)->key_id; + + if (x < y) + return -1; + else if (x > y) + return 1; + + return 0; +} + +static void print_uint32(uint32_t x, FILE *out) +{ + uint32_t y = htonl(x); + print(&y, sizeof(uint32_t), 1, out); +} + +static void print_index(void *array, int n, FILE *out) +{ + lmo_entry_t *e; + + qsort(array, n, sizeof(*e), cmp_index); + + for (e = array; n > 0; n--, e++) + { + print_uint32(e->key_id, out); + print_uint32(e->val_id, out); + print_uint32(e->offset, out); + print_uint32(e->length, out); + } +} + +int main(int argc, char *argv[]) +{ + char line[4096]; + char key[4096]; + char val[4096]; + char tmp[4096]; + int state = 0; + int offset = 0; + int length = 0; + int n_entries = 0; + void *array = NULL; + lmo_entry_t *entry = NULL; + uint32_t key_id, val_id; + + FILE *in; + FILE *out; + + if( (argc != 3) || ((in = fopen(argv[1], "r")) == NULL) || ((out = fopen(argv[2], "w")) == NULL) ) + usage(argv[0]); + + memset(line, 0, sizeof(key)); + memset(key, 0, sizeof(val)); + memset(val, 0, sizeof(val)); + + while( (NULL != fgets(line, sizeof(line), in)) || (state >= 2 && feof(in)) ) + { + if( state == 0 && strstr(line, "msgid \"") == line ) + { + switch(extract_string(line, key, sizeof(key))) + { + case -1: + die("Syntax error in msgid"); + case 0: + state = 1; + break; + default: + state = 2; + } + } + else if( state == 1 || state == 2 ) + { + if( strstr(line, "msgstr \"") == line || state == 2 ) + { + switch(extract_string(line, val, sizeof(val))) + { + case -1: + state = 4; + break; + default: + state = 3; + } + } + else + { + switch(extract_string(line, tmp, sizeof(tmp))) + { + case -1: + state = 2; + break; + default: + strcat(key, tmp); + } + } + } + else if( state == 3 ) + { + switch(extract_string(line, tmp, sizeof(tmp))) + { + case -1: + state = 4; + break; + default: + strcat(val, tmp); + } + } + + if( state == 4 ) + { + if( strlen(key) > 0 && strlen(val) > 0 ) + { + key_id = sfh_hash(key, strlen(key)); + val_id = sfh_hash(val, strlen(val)); + + if( key_id != val_id ) + { + n_entries++; + array = realloc(array, n_entries * sizeof(lmo_entry_t)); + entry = (lmo_entry_t *)array + n_entries - 1; + + if (!array) + die("Out of memory"); + + entry->key_id = key_id; + entry->val_id = val_id; + entry->offset = offset; + entry->length = strlen(val); + + length = strlen(val) + ((4 - (strlen(val) % 4)) % 4); + + print(val, length, 1, out); + offset += length; + } + } + + state = 0; + memset(key, 0, sizeof(key)); + memset(val, 0, sizeof(val)); + } + + memset(line, 0, sizeof(line)); + } + + print_index(array, n_entries, out); + + if( offset > 0 ) + { + print_uint32(offset, out); + fsync(fileno(out)); + fclose(out); + } + else + { + fclose(out); + unlink(argv[2]); + } + + fclose(in); + return(0); +} diff --git a/third-party/luci-app-udp2raw/tools/po2lmo/src/template_lmo.c b/third-party/luci-app-udp2raw/tools/po2lmo/src/template_lmo.c new file mode 100644 index 0000000..27205a7 --- /dev/null +++ b/third-party/luci-app-udp2raw/tools/po2lmo/src/template_lmo.c @@ -0,0 +1,328 @@ +/* + * lmo - Lua Machine Objects - Base functions + * + * Copyright (C) 2009-2010 Jo-Philipp Wich + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "template_lmo.h" + +/* + * Hash function from http://www.azillionmonkeys.com/qed/hash.html + * Copyright (C) 2004-2008 by Paul Hsieh + */ + +uint32_t sfh_hash(const char *data, int len) +{ + uint32_t hash = len, tmp; + int rem; + + if (len <= 0 || data == NULL) return 0; + + rem = len & 3; + len >>= 2; + + /* Main loop */ + for (;len > 0; len--) { + hash += sfh_get16(data); + tmp = (sfh_get16(data+2) << 11) ^ hash; + hash = (hash << 16) ^ tmp; + data += 2*sizeof(uint16_t); + hash += hash >> 11; + } + + /* Handle end cases */ + switch (rem) { + case 3: hash += sfh_get16(data); + hash ^= hash << 16; + hash ^= data[sizeof(uint16_t)] << 18; + hash += hash >> 11; + break; + case 2: hash += sfh_get16(data); + hash ^= hash << 11; + hash += hash >> 17; + break; + case 1: hash += *data; + hash ^= hash << 10; + hash += hash >> 1; + } + + /* Force "avalanching" of final 127 bits */ + hash ^= hash << 3; + hash += hash >> 5; + hash ^= hash << 4; + hash += hash >> 17; + hash ^= hash << 25; + hash += hash >> 6; + + return hash; +} + +uint32_t lmo_canon_hash(const char *str, int len) +{ + char res[4096]; + char *ptr, prev; + int off; + + if (!str || len >= sizeof(res)) + return 0; + + for (prev = ' ', ptr = res, off = 0; off < len; prev = *str, off++, str++) + { + if (isspace(*str)) + { + if (!isspace(prev)) + *ptr++ = ' '; + } + else + { + *ptr++ = *str; + } + } + + if ((ptr > res) && isspace(*(ptr-1))) + ptr--; + + return sfh_hash(res, ptr - res); +} + +lmo_archive_t * lmo_open(const char *file) +{ + int in = -1; + uint32_t idx_offset = 0; + struct stat s; + + lmo_archive_t *ar = NULL; + + if (stat(file, &s) == -1) + goto err; + + if ((in = open(file, O_RDONLY)) == -1) + goto err; + + if ((ar = (lmo_archive_t *)malloc(sizeof(*ar))) != NULL) + { + memset(ar, 0, sizeof(*ar)); + + ar->fd = in; + ar->size = s.st_size; + + fcntl(ar->fd, F_SETFD, fcntl(ar->fd, F_GETFD) | FD_CLOEXEC); + + if ((ar->mmap = mmap(NULL, ar->size, PROT_READ, MAP_SHARED, ar->fd, 0)) == MAP_FAILED) + goto err; + + idx_offset = ntohl(*((const uint32_t *) + (ar->mmap + ar->size - sizeof(uint32_t)))); + + if (idx_offset >= ar->size) + goto err; + + ar->index = (lmo_entry_t *)(ar->mmap + idx_offset); + ar->length = (ar->size - idx_offset - sizeof(uint32_t)) / sizeof(lmo_entry_t); + ar->end = ar->mmap + ar->size; + + return ar; + } + +err: + if (in > -1) + close(in); + + if (ar != NULL) + { + if ((ar->mmap != NULL) && (ar->mmap != MAP_FAILED)) + munmap(ar->mmap, ar->size); + + free(ar); + } + + return NULL; +} + +void lmo_close(lmo_archive_t *ar) +{ + if (ar != NULL) + { + if ((ar->mmap != NULL) && (ar->mmap != MAP_FAILED)) + munmap(ar->mmap, ar->size); + + close(ar->fd); + free(ar); + + ar = NULL; + } +} + + +lmo_catalog_t *_lmo_catalogs = NULL; +lmo_catalog_t *_lmo_active_catalog = NULL; + +int lmo_load_catalog(const char *lang, const char *dir) +{ + DIR *dh = NULL; + char pattern[16]; + char path[PATH_MAX]; + struct dirent *de = NULL; + + lmo_archive_t *ar = NULL; + lmo_catalog_t *cat = NULL; + + if (!lmo_change_catalog(lang)) + return 0; + + if (!dir || !(dh = opendir(dir))) + goto err; + + if (!(cat = malloc(sizeof(*cat)))) + goto err; + + memset(cat, 0, sizeof(*cat)); + + snprintf(cat->lang, sizeof(cat->lang), "%s", lang); + snprintf(pattern, sizeof(pattern), "*.%s.lmo", lang); + + while ((de = readdir(dh)) != NULL) + { + if (!fnmatch(pattern, de->d_name, 0)) + { + snprintf(path, sizeof(path), "%s/%s", dir, de->d_name); + ar = lmo_open(path); + + if (ar) + { + ar->next = cat->archives; + cat->archives = ar; + } + } + } + + closedir(dh); + + cat->next = _lmo_catalogs; + _lmo_catalogs = cat; + + if (!_lmo_active_catalog) + _lmo_active_catalog = cat; + + return 0; + +err: + if (dh) closedir(dh); + if (cat) free(cat); + + return -1; +} + +int lmo_change_catalog(const char *lang) +{ + lmo_catalog_t *cat; + + for (cat = _lmo_catalogs; cat; cat = cat->next) + { + if (!strncmp(cat->lang, lang, sizeof(cat->lang))) + { + _lmo_active_catalog = cat; + return 0; + } + } + + return -1; +} + +static lmo_entry_t * lmo_find_entry(lmo_archive_t *ar, uint32_t hash) +{ + unsigned int m, l, r; + uint32_t k; + + l = 0; + r = ar->length - 1; + + while (1) + { + m = l + ((r - l) / 2); + + if (r < l) + break; + + k = ntohl(ar->index[m].key_id); + + if (k == hash) + return &ar->index[m]; + + if (k > hash) + { + if (!m) + break; + + r = m - 1; + } + else + { + l = m + 1; + } + } + + return NULL; +} + +int lmo_translate(const char *key, int keylen, char **out, int *outlen) +{ + uint32_t hash; + lmo_entry_t *e; + lmo_archive_t *ar; + + if (!key || !_lmo_active_catalog) + return -2; + + hash = lmo_canon_hash(key, keylen); + + for (ar = _lmo_active_catalog->archives; ar; ar = ar->next) + { + if ((e = lmo_find_entry(ar, hash)) != NULL) + { + *out = ar->mmap + ntohl(e->offset); + *outlen = ntohl(e->length); + return 0; + } + } + + return -1; +} + +void lmo_close_catalog(const char *lang) +{ + lmo_archive_t *ar, *next; + lmo_catalog_t *cat, *prev; + + for (prev = NULL, cat = _lmo_catalogs; cat; prev = cat, cat = cat->next) + { + if (!strncmp(cat->lang, lang, sizeof(cat->lang))) + { + if (prev) + prev->next = cat->next; + else + _lmo_catalogs = cat->next; + + for (ar = cat->archives; ar; ar = next) + { + next = ar->next; + lmo_close(ar); + } + + free(cat); + break; + } + } +} diff --git a/third-party/luci-app-udp2raw/tools/po2lmo/src/template_lmo.h b/third-party/luci-app-udp2raw/tools/po2lmo/src/template_lmo.h new file mode 100644 index 0000000..57f59aa --- /dev/null +++ b/third-party/luci-app-udp2raw/tools/po2lmo/src/template_lmo.h @@ -0,0 +1,92 @@ +/* + * lmo - Lua Machine Objects - General header + * + * Copyright (C) 2009-2012 Jo-Philipp Wich + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _TEMPLATE_LMO_H_ +#define _TEMPLATE_LMO_H_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if (defined(__GNUC__) && defined(__i386__)) +#define sfh_get16(d) (*((const uint16_t *) (d))) +#else +#define sfh_get16(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8)\ + +(uint32_t)(((const uint8_t *)(d))[0]) ) +#endif + + +struct lmo_entry { + uint32_t key_id; + uint32_t val_id; + uint32_t offset; + uint32_t length; +} __attribute__((packed)); + +typedef struct lmo_entry lmo_entry_t; + + +struct lmo_archive { + int fd; + int length; + uint32_t size; + lmo_entry_t *index; + char *mmap; + char *end; + struct lmo_archive *next; +}; + +typedef struct lmo_archive lmo_archive_t; + + +struct lmo_catalog { + char lang[6]; + struct lmo_archive *archives; + struct lmo_catalog *next; +}; + +typedef struct lmo_catalog lmo_catalog_t; + + +uint32_t sfh_hash(const char *data, int len); +uint32_t lmo_canon_hash(const char *data, int len); + +lmo_archive_t * lmo_open(const char *file); +void lmo_close(lmo_archive_t *ar); + + +extern lmo_catalog_t *_lmo_catalogs; +extern lmo_catalog_t *_lmo_active_catalog; + +int lmo_load_catalog(const char *lang, const char *dir); +int lmo_change_catalog(const char *lang); +int lmo_translate(const char *key, int keylen, char **out, int *outlen); +void lmo_close_catalog(const char *lang); + +#endif diff --git a/third-party/udp2raw-openwrt-makefile/LICENSE b/third-party/udp2raw-openwrt-makefile/LICENSE new file mode 100644 index 0000000..6e53158 --- /dev/null +++ b/third-party/udp2raw-openwrt-makefile/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Yu Wang (wangyucn at gmail.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/third-party/udp2raw-openwrt-makefile/Makefile b/third-party/udp2raw-openwrt-makefile/Makefile new file mode 100644 index 0000000..22f7673 --- /dev/null +++ b/third-party/udp2raw-openwrt-makefile/Makefile @@ -0,0 +1,56 @@ +# +# Copyright (c) 2017 Yu Wang +# +# This is free software, licensed under the MIT. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=udp2raw-tunnel +PKG_VERSION:=20171125.0 +PKG_RELEASE:=1 + +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL:=https://github.com/wangyu-/udp2raw-tunnel.git +PKG_SOURCE_VERSION:=b35edf74865275cdc970384681a1a076d3a8d0e1 +PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz + +PKG_LICENSE:=MIT +PKG_LICENSE_FILES:=LICENSE +PKG_MAINTAINER:=Yu Wang + +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) + +PKG_BUILD_PARALLEL:=1 + +include $(INCLUDE_DIR)/package.mk + +define Package/udp2raw-tunnel + SECTION:=net + CATEGORY:=Network + TITLE:=Tunnel which turns UDP Traffic into Encrypted FakeTCP/UDP/ICMP Traffic + URL:=https://github.com/wangyu-/udp2raw-tunnel +endef + +define Package/udp2raw-tunnel/description + udp2raw-tunnel is a tunnel which turns UDP Traffic into Encrypted FakeTCP/UDP/ICMP Traffic by using Raw Socket. +endef + +MAKE_FLAGS += cross2 + +define Build/Prepare + $(PKG_UNPACK) + sed -i 's/cc_cross=.*/cc_cross=$(TARGET_CXX)/g' $(PKG_BUILD_DIR)/makefile + sed -i '/\*gitversion/d' $(PKG_BUILD_DIR)/makefile + echo 'const char *gitversion = "$(PKG_SOURCE_VERSION)";' > $(PKG_BUILD_DIR)/git_version.h + $(Build/Patch) +endef + +define Package/udp2raw-tunnel/install + $(INSTALL_DIR) $(1)/usr/bin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/udp2raw_cross $(1)/usr/bin/udp2raw +endef + +$(eval $(call BuildPackage,udp2raw-tunnel)) From 29708ba43e6f47c61add5c327969dab9aecf3e1b Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 4 Jan 2018 01:22:29 -0600 Subject: [PATCH 46/72] added target for linux perf --- makefile | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/makefile b/makefile index d00a3fc..897da1d 100755 --- a/makefile +++ b/makefile @@ -1,10 +1,12 @@ cc_cross=/home/wangyu/Desktop/arm-2014.05/bin/arm-none-linux-gnueabi-g++ cc_local=g++ +#cc_local=/opt/cross/x86_64-linux-musl/bin/x86_64-linux-musl-g++ #cc_mips34kc=/toolchains/OpenWrt-SDK-ar71xx-for-linux-x86_64-gcc-4.8-linaro_uClibc-0.9.33.2/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mips-openwrt-linux-g++ cc_mips24kc_be=/toolchains/lede-sdk-17.01.2-ar71xx-generic_gcc-5.4.0_musl-1.1.16.Linux-x86_64/staging_dir/toolchain-mips_24kc_gcc-5.4.0_musl-1.1.16/bin/mips-openwrt-linux-musl-g++ cc_mips24kc_le=/toolchains/lede-sdk-17.01.2-ramips-mt7621_gcc-5.4.0_musl-1.1.16.Linux-x86_64/staging_dir/toolchain-mipsel_24kc_gcc-5.4.0_musl-1.1.16/bin/mipsel-openwrt-linux-musl-g++ #cc_arm= /toolchains/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-g++ -march=armv6 -marm cc_arm= /toolchains/arm-2014.05/bin/arm-none-linux-gnueabi-g++ +#cc_arm=/toolchains/lede-sdk-17.01.2-brcm2708-bcm2708_gcc-5.4.0_musl-1.1.16_eabi.Linux-x86_64/staging_dir/toolchain-arm_arm1176jzf-s+vfp_gcc-5.4.0_musl-1.1.16_eabi/bin/arm-openwrt-linux-muslgnueabi-g++ #cc_bcm2708=/home/wangyu/raspberry/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-g++ FLAGS= -std=c++11 -Wall -Wextra -Wno-unused-variable -Wno-unused-parameter -Wno-missing-field-initializers @@ -47,6 +49,10 @@ mips24kc_le_asm_aes: git_version # ${cc_bcm2708} -o ${NAME}_bcm2708 -I. ${SOURCES} ${FLAGS} -lrt -static -O3 amd64:git_version ${cc_local} -o ${NAME}_$@ -I. ${SOURCES} ${FLAGS} -lrt -static -O3 + +amd64_perf:git_version + ${cc_local} -o ${NAME}_$@ -I. ${SOURCES} ${FLAGS} -lrt -static -O0 -fno-omit-frame-pointer -g + amd64_hw_aes:git_version ${cc_local} -o ${NAME}_$@ -I. ${SOURCES_AES_ACC} ${FLAGS} -lrt -static -O3 lib/aes_acc/asm/x64.S x86:git_version @@ -56,6 +62,9 @@ x86_asm_aes:git_version arm:git_version ${cc_arm} -o ${NAME}_$@ -I. ${SOURCES} ${FLAGS} -lrt -static -O3 +arm_perf:git_version + ${cc_arm} -o ${NAME}_$@ -I. ${SOURCES} ${FLAGS} -lrt -static -mapcs-frame -fno-omit-frame-pointer -g -O0 -lgcc_eh + arm_asm_aes:git_version ${cc_arm} -o ${NAME}_$@ -I. ${SOURCES_AES_ACC} ${FLAGS} -lrt -static -O3 lib/aes_acc/asm/arm.S From 2da0de34a2791455b83720ef765cdb3a0b2c018f Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 4 Jan 2018 01:27:52 -0600 Subject: [PATCH 47/72] moved cmake makefile to 3rd-party folder --- {cmake => third-party/udp2raw-cmake-makefile}/CMakeLists.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {cmake => third-party/udp2raw-cmake-makefile}/CMakeLists.txt (100%) diff --git a/cmake/CMakeLists.txt b/third-party/udp2raw-cmake-makefile/CMakeLists.txt similarity index 100% rename from cmake/CMakeLists.txt rename to third-party/udp2raw-cmake-makefile/CMakeLists.txt From 7fe8321082680086ee6bd3353fc747e3b2f19373 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 11 Jan 2018 17:26:30 -0600 Subject: [PATCH 48/72] add -w options to every iptables command --- misc.cpp | 67 +++++++++++++++++++------------------------------------- misc.h | 2 +- 2 files changed, 23 insertions(+), 46 deletions(-) diff --git a/misc.cpp b/misc.cpp index 185b2dd..13ab991 100644 --- a/misc.cpp +++ b/misc.cpp @@ -50,6 +50,8 @@ char key_string[1000]= "secret key";// -k option char fifo_file[1000]=""; +string iptables_command0="iptables "; +string iptables_command="iptables -w "; string iptables_pattern=""; int iptables_rule_added=0; int iptables_rule_keeped=0; @@ -428,9 +430,9 @@ void process_arg(int argc, char *argv[]) //process all options { char *output; //int ret =system("iptables-save |grep udp2raw_dWRwMnJhdw|sed -n 's/^-A/iptables -D/p'|sh"); - int ret =run_command("iptables -S|sed -n '/udp2rawDwrW/p'|sed -n 's/^-A/iptables -D/p'|sh",output); + int ret =run_command(iptables_command+"-S|sed -n '/udp2rawDwrW/p'|sed -n 's/^-A/"+iptables_command+"-D/p'|sh",output); - int ret2 =run_command("iptables -S|sed -n '/udp2rawDwrW/p'|sed -n 's/^-N/iptables -X/p'|sh",output); + int ret2 =run_command(iptables_command+"-S|sed -n '/udp2rawDwrW/p'|sed -n 's/^-N/"+iptables_command+"-X/p'|sh",output); //system("iptables-save |grep udp2raw_dWRwMnJhdw|sed 's/^-A/iptables -D/'|sh"); //system("iptables-save|grep -v udp2raw_dWRwMnJhdw|iptables-restore"); mylog(log_info,"tried to clear all iptables rule created previously,return value %d %d\n",ret,ret2); @@ -872,7 +874,7 @@ void iptables_rule() // handles -a -g --gen-add --keep-rule } if(generate_iptables_rule) { - string rule="iptables -I INPUT "; + string rule=iptables_command+"-I INPUT "; rule+=pattern; rule+=" -j DROP"; @@ -1042,31 +1044,6 @@ int handle_lower_level(raw_info_t &raw_info)//fill lower_level info,when --lower } - -/* -int add_iptables_rule(const char * s) -{ - - iptables_pattern=s; - - string rule="iptables -I INPUT "; - rule+=iptables_pattern; - rule+=" -j DROP"; - - char *output; - if(run_command(rule.c_str(),output)==0) - { - mylog(log_warn,"auto added iptables rule by: %s\n",rule.c_str()); - } - else - { - mylog(log_fatal,"auto added iptables failed by: %s\n",rule.c_str()); - //mylog(log_fatal,"reason : %s\n",strerror(errno)); - myexit(-1); - } - iptables_rule_added=1; - return 0; -}*/ string chain[2]; string rule_keep[2]; string rule_keep_add[2]; @@ -1081,14 +1058,14 @@ int iptables_gen_add(const char * s,u32_t const_id) iptables_pattern=s; chain[0] =dummy+ "udp2rawDwrW_C"; rule_keep[0]=dummy+ iptables_pattern+" -j " +chain[0]; - rule_keep_add[0]=dummy+"iptables -I INPUT "+rule_keep[0]; + rule_keep_add[0]=iptables_command+"-I INPUT "+rule_keep[0]; char *output; - run_command(dummy+"iptables -N "+chain[0],output,show_none); - run_command(dummy+"iptables -F "+chain[0],output); - run_command(dummy+"iptables -I "+chain[0] + " -j DROP",output); + run_command(iptables_command+"-N "+chain[0],output,show_none); + run_command(iptables_command+"-F "+chain[0],output); + run_command(iptables_command+"-I "+chain[0] + " -j DROP",output); - rule_keep_del[0]=dummy+"iptables -D INPUT "+rule_keep[0]; + rule_keep_del[0]=iptables_command+"-D INPUT "+rule_keep[0]; run_command(rule_keep_del[0],output,show_none); run_command(rule_keep_del[0],output,show_none); @@ -1116,11 +1093,11 @@ int iptables_rule_init(const char * s,u32_t const_id,int keep) rule_keep[0]=dummy+ iptables_pattern+" -j " +chain[0]; rule_keep[1]=dummy+ iptables_pattern+" -j " +chain[1]; - rule_keep_add[0]=dummy+"iptables -I INPUT "+rule_keep[0]; - rule_keep_add[1]=dummy+"iptables -I INPUT "+rule_keep[1]; + rule_keep_add[0]=iptables_command+"-I INPUT "+rule_keep[0]; + rule_keep_add[1]=iptables_command+"-I INPUT "+rule_keep[1]; - rule_keep_del[0]=dummy+"iptables -D INPUT "+rule_keep[0]; - rule_keep_del[1]=dummy+"iptables -D INPUT "+rule_keep[1]; + rule_keep_del[0]=iptables_command+"-D INPUT "+rule_keep[0]; + rule_keep_del[1]=iptables_command+"-D INPUT "+rule_keep[1]; keep_rule_last_time=get_current_time(); @@ -1128,9 +1105,9 @@ int iptables_rule_init(const char * s,u32_t const_id,int keep) for(int i=0;i<=iptables_rule_keeped;i++) { - run_command(dummy+"iptables -N "+chain[i],output); - run_command(dummy+"iptables -F "+chain[i],output); - run_command(dummy+"iptables -I "+chain[i] + " -j DROP",output); + run_command(iptables_command+"-N "+chain[i],output); + run_command(iptables_command+"-F "+chain[i],output); + run_command(iptables_command+"-I "+chain[i] + " -j DROP",output); if(run_command(rule_keep_add[i],output)!=0) { @@ -1167,12 +1144,12 @@ int keep_iptables_rule() //magic to work on a machine without grep/iptables --c int i=iptables_rule_keep_index; - run_command(dummy + "iptables -N " + chain[i], output,show_none); + run_command(iptables_command + "-N " + chain[i], output,show_none); - if (run_command(dummy + "iptables -F " + chain[i], output,show_none) != 0) + if (run_command(iptables_command + "-F " + chain[i], output,show_none) != 0) mylog(log_warn, "iptables -F failed %d\n",i); - if (run_command(dummy + "iptables -I " + chain[i] + " -j DROP",output,show_none) != 0) + if (run_command(iptables_command + "-I " + chain[i] + " -j DROP",output,show_none) != 0) mylog(log_warn, "iptables -I failed %d\n",i); if (run_command(rule_keep_del[i], output,show_none) != 0) @@ -1196,8 +1173,8 @@ int clear_iptables_rule() for(int i=0;i<=iptables_rule_keeped;i++ ) { run_command(rule_keep_del[i],output); - run_command(dummy+"iptables -F "+chain[i],output); - run_command(dummy+"iptables -X "+chain[i],output); + run_command(iptables_command+"-F "+chain[i],output); + run_command(iptables_command+"-X "+chain[i],output); } return 0; } diff --git a/misc.h b/misc.h index acdb4f2..5415a90 100644 --- a/misc.h +++ b/misc.h @@ -51,7 +51,7 @@ const u32_t client_conn_uplink_timeout=client_conn_timeout+2000;//ms const uint32_t server_conn_timeout=conv_timeout+60000;//ms. this should be 60s+ longer than conv_timeout,so that conv_manager can destruct convs gradually,to avoid latency glicth //const u32_t server_conn_timeout=conv_timeout+10000;//for test -const u32_t iptables_rule_keep_interval=15;//unit: second; +const u32_t iptables_rule_keep_interval=20;//unit: second; enum server_current_state_t {server_idle=0,server_handshake1,server_ready}; //server state machine enum client_current_state_t {client_idle=0,client_tcp_handshake,client_handshake1,client_handshake2,client_ready};//client state machine From b0613e5b9b1039e607611e174c1a9d299bccd6e6 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 11 Jan 2018 17:38:01 -0600 Subject: [PATCH 49/72] update 3rd party --- third-party/luci-app-udp2raw/Makefile | 23 ++-- .../files/luci/i18n/udp2raw.zh-cn.lmo | Bin 1364 -> 1372 bytes .../files/luci/i18n/udp2raw.zh-cn.po | 4 +- .../files/luci/model/cbi/udp2raw/general.lua | 5 +- .../files/luci/view/udp2raw/dynamiclist.htm | 98 +++++++++++++ .../files/luci/view/udp2raw/status.htm | 39 ++++++ .../files/root/etc/config/udp2raw | 2 +- .../files/root/etc/init.d/udp2raw | 93 ++++++------- .../files/root/etc/init.d/udp2raw.init | 130 ++++++++++++++++++ .../files/root/etc/uci-defaults/luci-udp2raw | 2 - .../luci-app-udp2raw/luci-app-udp2raw1.jpg | Bin 87254 -> 79120 bytes .../luci-app-udp2raw/luci-app-udp2raw2.jpg | Bin 91137 -> 90519 bytes .../luci-app-udp2raw/luci-app-udp2raw3.jpg | Bin 152168 -> 134611 bytes third-party/udp2raw-openwrt-makefile/Makefile | 17 ++- 14 files changed, 335 insertions(+), 78 deletions(-) create mode 100644 third-party/luci-app-udp2raw/files/luci/view/udp2raw/dynamiclist.htm create mode 100644 third-party/luci-app-udp2raw/files/luci/view/udp2raw/status.htm create mode 100644 third-party/luci-app-udp2raw/files/root/etc/init.d/udp2raw.init diff --git a/third-party/luci-app-udp2raw/Makefile b/third-party/luci-app-udp2raw/Makefile index 8ce589e..66541e1 100644 --- a/third-party/luci-app-udp2raw/Makefile +++ b/third-party/luci-app-udp2raw/Makefile @@ -9,17 +9,15 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-udp2raw PKG_VERSION:=1.0.0 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_LICENSE:=GPLv3 PKG_LICENSE_FILES:=LICENSE PKG_MAINTAINER:=Jian Chang -PKG_BUILD_PARALLEL:=1 - include $(INCLUDE_DIR)/package.mk -define Package/luci-app-udp2raw +define Package/$(PKG_NAME) SECTION:=luci CATEGORY:=LuCI SUBMENU:=3. Applications @@ -28,7 +26,7 @@ define Package/luci-app-udp2raw DEPENDS:=+udp2raw-tunnel endef -define Package/luci-app-udp2raw/description +define Package/$(PKG_NAME)/description LuCI Support for udp2raw-tunnel. endef @@ -43,28 +41,27 @@ endef define Build/Compile endef -define Package/luci-app-udp2raw/postinst +define Package/$(PKG_NAME)/postinst #!/bin/sh if [ -z "$${IPKG_INSTROOT}" ]; then ( . /etc/uci-defaults/luci-udp2raw ) && rm -f /etc/uci-defaults/luci-udp2raw - rm -rf /tmp/luci-indexcache /tmp/luci-modulecache fi exit 0 endef -define Package/luci-app-udp2raw/conffiles -/etc/config/udp2raw +define Package/$(PKG_NAME)/conffiles + /etc/config/udp2raw endef -define Package/luci-app-udp2raw/install +define Package/$(PKG_NAME)/install $(INSTALL_DIR) $(1)/usr/lib/lua/luci/i18n $(INSTALL_DATA) $(PKG_BUILD_DIR)/udp2raw.*.lmo $(1)/usr/lib/lua/luci/i18n/ $(INSTALL_DIR) $(1)/usr/lib/lua/luci/controller $(INSTALL_DATA) ./files/luci/controller/*.lua $(1)/usr/lib/lua/luci/controller/ $(INSTALL_DIR) $(1)/usr/lib/lua/luci/model/cbi/udp2raw $(INSTALL_DATA) ./files/luci/model/cbi/udp2raw/*.lua $(1)/usr/lib/lua/luci/model/cbi/udp2raw/ - $(INSTALL_DIR) $(1)/usr/lib/lua/luci/view - $(INSTALL_DATA) ./files/luci/view/*.htm $(1)/usr/lib/lua/luci/view/ + $(INSTALL_DIR) $(1)/usr/lib/lua/luci/view/udp2raw + $(INSTALL_DATA) ./files/luci/view/udp2raw/*.htm $(1)/usr/lib/lua/luci/view/udp2raw/ $(INSTALL_DIR) $(1)/etc/config $(INSTALL_CONF) ./files/root/etc/config/udp2raw $(1)/etc/config/udp2raw $(INSTALL_DIR) $(1)/etc/init.d @@ -73,4 +70,4 @@ define Package/luci-app-udp2raw/install $(INSTALL_BIN) ./files/root/etc/uci-defaults/luci-udp2raw $(1)/etc/uci-defaults/luci-udp2raw endef -$(eval $(call BuildPackage,luci-app-udp2raw)) +$(eval $(call BuildPackage,$(PKG_NAME))) diff --git a/third-party/luci-app-udp2raw/files/luci/i18n/udp2raw.zh-cn.lmo b/third-party/luci-app-udp2raw/files/luci/i18n/udp2raw.zh-cn.lmo index e25325de0821449545710424e3005f4229cfaf7e..a73a6cf62b3f7afc647f65cdb53850730f7ea31e 100644 GIT binary patch delta 157 zcmcb@b%$$103-9uRXvk~89jNPuAB92&irSK8=lQyI(ZSJ9uot@<_nCw85!qH?qSxD zP|eqP$iTojhk=2?D&8(dnQ`T($w2;-$!D1D8Q)CiVX;?S0hDu`^(6gp^s$l)zTkR0nBBTdo{{UispvoTr D$4)cD delta 200 zcmcb^b%kp~03-8@bxS4(GkUT;pFQ!#^0vt<81**aVBF2fIA!t_W(|q6VY=HH7#Qa; zFff?J+odQouKY9^$iFlB3bQ@qlgT11_K6FCa*nf}rK~Ejnb`xB3jp$Yw#eR({Ih)+F9}kfNT?x{O((sSBy74y$Mu*0m$b%?9wegNw<7IkPWg+=xDmz mku@Fx`+)j0CU0TsmrMYPvVQNac8F^c(gU)805LyM_5%RJPeGUf diff --git a/third-party/luci-app-udp2raw/files/luci/i18n/udp2raw.zh-cn.po b/third-party/luci-app-udp2raw/files/luci/i18n/udp2raw.zh-cn.po index fb20472..92c892b 100644 --- a/third-party/luci-app-udp2raw/files/luci/i18n/udp2raw.zh-cn.po +++ b/third-party/luci-app-udp2raw/files/luci/i18n/udp2raw.zh-cn.po @@ -77,7 +77,7 @@ msgid "Cipher Mode" msgstr "加密方式" msgid "Auth Mode" -msgstr "认证方式" +msgstr "验证方式" msgid "Auto Rule" msgstr "自动规则" @@ -89,7 +89,7 @@ msgid "Keep Rule" msgstr "保持规则" msgid "Monitor iptables and auto re-add if necessary." -msgstr "监视 iptables 并在必要时重新添加规则。" +msgstr "定期检查 iptables 并在必要时重新添加规则。" msgid "seq Mode" msgstr "seq 模式" diff --git a/third-party/luci-app-udp2raw/files/luci/model/cbi/udp2raw/general.lua b/third-party/luci-app-udp2raw/files/luci/model/cbi/udp2raw/general.lua index a4d3430..dbd22e9 100644 --- a/third-party/luci-app-udp2raw/files/luci/model/cbi/udp2raw/general.lua +++ b/third-party/luci-app-udp2raw/files/luci/model/cbi/udp2raw/general.lua @@ -18,13 +18,14 @@ uci:foreach("udp2raw", "servers", function(s) end) m = Map("udp2raw", "%s - %s" %{translate("udp2raw-tunnel"), translate("Settings")}) -m:append(Template("udp2raw_status")) +m:append(Template("udp2raw/status")) s = m:section(NamedSection, "general", "general", translate("General Settings")) s.anonymous = true s.addremove = false -o = s:option(ListValue, "server", translate("Server")) +o = s:option(DynamicList, "server", translate("Server")) +o.template = "udp2raw/dynamiclist" o:value("nil", translate("Disable")) for _, s in ipairs(servers) do o:value(s.name, s.alias) end o.default = "nil" diff --git a/third-party/luci-app-udp2raw/files/luci/view/udp2raw/dynamiclist.htm b/third-party/luci-app-udp2raw/files/luci/view/udp2raw/dynamiclist.htm new file mode 100644 index 0000000..7ee3dc9 --- /dev/null +++ b/third-party/luci-app-udp2raw/files/luci/view/udp2raw/dynamiclist.htm @@ -0,0 +1,98 @@ +<%# + Copyright (C) 2017 Jian Chang + Licensed to the public under the GNU General Public License v3. +-%> + +<%+cbi/valueheader%> + +<%- + local values = self:formvalue(section) + if not values then + values = self:cfgvalue(section) or {self.default} + end + + local function serialize_json(x, cb) + local rv, push = nil, cb + if not push then + rv = { } + push = function(tok) rv[#rv+1] = tok end + end + + if x == nil then + push("null") + elseif type(x) == "table" then + push("[") + for k = 1, #x do + if k > 1 then + push(",") + end + serialize_json(x[k], push) + end + push("]") + else + push('"%s"' % tostring(x):gsub('["%z\1-\31\\]', + function(c) return '\\u%04x' % c:byte(1) end)) + end + + if not cb then + return table.concat(rv, "") + end + end +-%> + +> + + +<%+cbi/valuefooter%> diff --git a/third-party/luci-app-udp2raw/files/luci/view/udp2raw/status.htm b/third-party/luci-app-udp2raw/files/luci/view/udp2raw/status.htm new file mode 100644 index 0000000..964b117 --- /dev/null +++ b/third-party/luci-app-udp2raw/files/luci/view/udp2raw/status.htm @@ -0,0 +1,39 @@ +<% +local function get_udp2raw_version(name) + local info = luci.util.split(luci.sys.exec("%s -h 2>/dev/null" %{name}), "\n") + local version = string.match(info[2], "git version:(%w+)") + local build = string.match(info[2], "build date:(.+)") + return info[1] == "udp2raw-tunnel" and version or "", info[1] == "udp2raw-tunnel" and build or "" +end + +local udp2raw_version, udp2raw_build = get_udp2raw_version("udp2raw") +-%> + +

+ <%:Running Status%> + + + + + + <% if udp2raw_build ~= "" then -%> + + <% end -%> + +
<%:Binary Version%> + <% if udp2raw_version == "" then -%> + <%:Invalid Binary File.%> + <% else -%> + <%=pcdata(udp2raw_version)%> + <%- end %> +
<%:Build Time%><%=pcdata(udp2raw_build)%>
<%:Running Status%><%:Collecting data...%>
+
+ + diff --git a/third-party/luci-app-udp2raw/files/root/etc/config/udp2raw b/third-party/luci-app-udp2raw/files/root/etc/config/udp2raw index 8a27625..eaa58ee 100644 --- a/third-party/luci-app-udp2raw/files/root/etc/config/udp2raw +++ b/third-party/luci-app-udp2raw/files/root/etc/config/udp2raw @@ -1,6 +1,6 @@ config general 'general' - option server 'nil' + list server 'nil' option daemon_user 'root' config servers 'default' diff --git a/third-party/luci-app-udp2raw/files/root/etc/init.d/udp2raw b/third-party/luci-app-udp2raw/files/root/etc/init.d/udp2raw index 3733b66..3c960cc 100644 --- a/third-party/luci-app-udp2raw/files/root/etc/init.d/udp2raw +++ b/third-party/luci-app-udp2raw/files/root/etc/init.d/udp2raw @@ -1,51 +1,56 @@ #!/bin/sh /etc/rc.common START=88 +STOP=15 USE_PROCD=1 -UDP2RAW=udp2raw +NAME=udp2raw _log() { - local level="$1" - local msg="$2" - - logger -p "daemon.${level}" -t "$UDP2RAW" "$msg" + logger -p "daemon.$1" -t "$NAME" "$2" } -gen_client_config_file() { +has_valid_server() { + local server + for server in $@; do + [ "$(uci_get $NAME $server)" = "servers" ] && return 0 + done + return 1 +} + +create_config() { local config_file="$1" echo "# auto-generated config file from /etc/config/udp2raw" > $config_file echo "-c" >> $config_file - echo "-l ${listen_addr}:${listen_port}" >> $config_file && _log "info" "listening on: ${listen_addr}:${listen_port}" - echo "-r ${server_addr}:${server_port}" >> $config_file && _log "info" "remote address: ${server_addr}:${server_port}" + echo "-l ${listen_addr:=127.0.0.1}:${listen_port:=2080}" >> $config_file && _log "info" "listening on: ${listen_addr}:${listen_port}" + echo "-r ${server_addr}:${server_port:=8080}" >> $config_file [ -n "$raw_mode" ] && echo "--raw-mode ${raw_mode}" >> $config_file && _log "info" "raw-mode: ${raw_mode}" [ -n "$key" ] && echo "--key ${key}" >> $config_file - [ -n "$cipher_mode" ] && echo "--cipher-mode ${cipher_mode}" >> $config_file && _log "info" "cipher-mode: ${cipher_mode}" - [ -n "$auth_mode" ] && echo "--auth-mode ${auth_mode}" >> $config_file && _log "info" "auth-mode: ${auth_mode}" + [ -n "$cipher_mode" ] && echo "--cipher-mode ${cipher_mode}" >> $config_file + [ -n "$auth_mode" ] && echo "--auth-mode ${auth_mode}" >> $config_file - [ "$auto_rule" -ne 0 ] && echo "--auto-rule" >> $config_file && _log "info" "auto-rule: true" - [ "$auto_rule" -ne 0 -a "$keep_rule" -ne 0 ] && echo "--keep-rule" >> $config_file && _log "info" "keep-rule: true" + [ $auto_rule -eq 1 ] && echo "--auto-rule" >> $config_file + [ $auto_rule -eq 1 -a $keep_rule -eq 1 ] && echo "--keep-rule" >> $config_file - [ -n "$seq_mode" ] && echo "--seq-mode ${seq_mode}" >> $config_file && _log "info" "seq-mode: ${seq_mode}" - [ -n "$lower_level" ] && echo "--lower-level ${lower_level}" >> $config_file && _log "info" "lower-level: ${lower_level}" + [ -n "$seq_mode" ] && echo "--seq-mode ${seq_mode}" >> $config_file + [ -n "$lower_level" ] && echo "--lower-level ${lower_level}" >> $config_file [ -n "$source_ip" ] && echo "--source-ip ${source_ip}" >> $config_file [ -n "$source_port" ] && echo "--source-port ${source_port}" >> $config_file [ -n "$log_level" ] && echo "--log-level ${log_level}" >> $config_file echo "--disable-color" >> $config_file - _log "info" "running from ${daemon_user} user" } validate_config_section() { - uci_validate_section "$UDP2RAW" general "$1" \ + uci_validate_section "$NAME" general "$1" \ 'server:uciname' \ 'daemon_user:string:root' } validate_server_section() { - uci_validate_section "$UDP2RAW" servers "$1" \ + uci_validate_section "$NAME" servers "$1" \ 'server_addr:host' \ 'server_port:port:8080' \ 'listen_addr:ipaddr:127.0.0.1' \ @@ -63,59 +68,49 @@ validate_server_section() { 'log_level:range(0,6)' } -start_udp2raw_instance() { - local section="$1" +start_instance() { + local server="$1" - if ! validate_config_section "$section" ; then - _log "err" "Config validate failed." - return 1 - fi - - if [ -z "$server" ] || [ "$server" = "nil" ]; then + if [ -z "$server" -o "$server" == "nil" ]; then return 0 elif ! validate_server_section "$server"; then _log "err" "Server config validation failed." return 1 - elif [ -z "$server_addr" ]; then + fi + + /sbin/validate_data "ipaddr" "$server_addr" >/dev/null 2>&1 + [ $? -ne 0 ] && server_addr=$(nslookup "$server_addr" | \ + sed -n 's/^Address[[:space:]]*[0-9]*:[[:space:]]*\(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\)$/\1/p') + if [ -z "$server_addr" ]; then _log "err" "Server address validation failed." return 1 fi - is_ipv6_address() { - echo "$1" | grep -q ":" - } - - is_ipv6_address "$server_addr" && server_addr="[${server_addr}]" - is_ipv6_address "$listen_addr" && listen_addr="[${listen_addr}]" - - _log "notice" "udp2raw-tunnel start." [ -d /var/etc ] || mkdir -p /var/etc - local config_file=/var/etc/${UDP2RAW}.${server}.conf - - if ! ( gen_client_config_file "$config_file" ); then - _log "err" "Can't create config file". - return 1 - fi + local config_file="/var/etc/${NAME}.${server}.conf" + create_config "$config_file" || return 1 procd_open_instance procd_set_param command /usr/bin/udp2raw procd_append_param command --conf-file "$config_file" procd_set_param respawn procd_set_param file "$config_file" - procd_set_param user "$daemon_user" - procd_set_param pidfile /var/run/${UDP2RAW}.${server}.pid + [ -n "$daemon_user" ] && procd_set_param user "$daemon_user" && _log "info" "running from ${daemon_user} user" + procd_set_param pidfile "/var/run/${NAME}.${server}.pid" procd_close_instance } service_triggers() { - procd_add_reload_trigger "$UDP2RAW" + procd_add_reload_trigger "$NAME" } start_service() { - config_load "$UDP2RAW" - config_foreach start_udp2raw_instance "general" -} - -stop_service() { - _log "notice" "udp2raw-tunnel stop." + if ! validate_config_section "general" ; then + _log "err" "Config validate failed." + return 1 + fi + has_valid_server $server || return 1 + for srv in $server; do + start_instance $srv + done } diff --git a/third-party/luci-app-udp2raw/files/root/etc/init.d/udp2raw.init b/third-party/luci-app-udp2raw/files/root/etc/init.d/udp2raw.init new file mode 100644 index 0000000..7232d5f --- /dev/null +++ b/third-party/luci-app-udp2raw/files/root/etc/init.d/udp2raw.init @@ -0,0 +1,130 @@ +#!/bin/sh /etc/rc.common + +START=88 +STOP=15 + +NAME=udp2raw + +_log() { + logger -p "daemon.$1" -t "$NAME" "$2" +} + +has_valid_server() { + local server + for server in $@; do + [ "$(uci_get $NAME $server)" = "servers" ] && return 0 + done + return 1 +} + +create_config() { + local config_file="$1" + echo "# auto-generated config file from /etc/config/udp2raw" > $config_file + + echo "-c" >> $config_file + echo "-l ${listen_addr:=127.0.0.1}:${listen_port:=2080}" >> $config_file + echo "-r ${server_addr}:${server_port:=8080}" >> $config_file + + [ -n "$raw_mode" ] && echo "--raw-mode ${raw_mode}" >> $config_file + [ -n "$key" ] && echo "--key ${key}" >> $config_file + [ -n "$cipher_mode" ] && echo "--cipher-mode ${cipher_mode}" >> $config_file + [ -n "$auth_mode" ] && echo "--auth-mode ${auth_mode}" >> $config_file + + [ $auto_rule -eq 1 ] && echo "--auto-rule" >> $config_file + [ $auto_rule -eq 1 -a $keep_rule -eq 1 ] && echo "--keep-rule" >> $config_file + + [ -n "$seq_mode" ] && echo "--seq-mode ${seq_mode}" >> $config_file + [ -n "$lower_level" ] && echo "--lower-level ${lower_level}" >> $config_file + [ -n "$source_ip" ] && echo "--source-ip ${source_ip}" >> $config_file + [ -n "$source_port" ] && echo "--source-port ${source_port}" >> $config_file + + [ -n "$log_level" ] && echo "--log-level ${log_level}" >> $config_file + echo "--disable-color" >> $config_file +} + +validate_config_section() { + local ret=$(/sbin/validate_data "$NAME" general "$1" \ + 'server:uciname' \ + 'daemon_user:string:root' \ + 2> /dev/null) + [ $? -ne 0 ] && return 1 + eval "$ret" +} + +validate_server_section() { + local ret=$(/sbin/validate_data "$NAME" servers "$1" \ + 'server_addr:host' \ + 'server_port:port:8080' \ + 'listen_addr:ipaddr:127.0.0.1' \ + 'listen_port:port:2080' \ + 'raw_mode:or("faketcp", "udp", "icmp"):faketcp' \ + 'key:string' \ + 'cipher_mode:or("aes128cbc", "xor", "none"):aes128cbc' \ + 'auth_mode:or("md5", "crc32", "simple", "none"):md5' \ + 'auto_rule:bool:1' \ + 'keep_rule:bool:0' \ + 'seq_mode:range(0,4)' \ + 'lower_level:string' \ + 'source_ip:ipaddr' \ + 'source_port:port' \ + 'log_level:range(0,6)' \ + 2> /dev/null) + [ $? -ne 0 ] && return 1 + eval "$ret" +} + +start_instance() { + local server="$1" + + if [ -z "$server" -o "$server" == "nil" ]; then + return 0 + elif ! validate_server_section "$server"; then + _log "err" "Server config validation failed." + return 1 + fi + + /sbin/validate_data "ipaddr" "$server_addr" >/dev/null 2>&1 + [ $? -ne 0 ] && server_addr=$(nslookup "$server_addr" | \ + sed -n 's/^Address[[:space:]]*[0-9]*:[[:space:]]*\(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\)$/\1/p') + if [ -z "$server_addr" ]; then + _log "err" "Server address validation failed." + return 1 + fi + + [ -d /var/etc ] || mkdir -p /var/etc + local config_file="/var/etc/${NAME}.${server}.conf" + create_config "$config_file" || return 1 + [ -d "/var/log/${NAME}" ] || mkdir -p "/var/log/${NAME}" + + /usr/bin/udp2raw --conf-file "$config_file" >> "/var/log/${NAME}/${NAME}.${server}.log" & + echo $! > "/var/run/${NAME}.${server}.pid" + return 0 +} + +start() { + pgrep "/usr/bin/${NAME}" >/dev/null 2>&1 && return + + if ! validate_config_section "general" ; then + _log "err" "Config validate failed." + return 1 + fi + has_valid_server $server || return 1 + for srv in $server; do + start_instance $srv + done +} + +stop() { + local pids=$(pgrep "/usr/bin/${NAME}" 2> /dev/null) + [ $? -ne 0 ] && return + for pid in $pids; do + kill $pid >/dev/null 2>&1 + done + return 0 +} + +restart() { + stop + sleep 1 + start +} diff --git a/third-party/luci-app-udp2raw/files/root/etc/uci-defaults/luci-udp2raw b/third-party/luci-app-udp2raw/files/root/etc/uci-defaults/luci-udp2raw index c04688e..d8d7b7e 100644 --- a/third-party/luci-app-udp2raw/files/root/etc/uci-defaults/luci-udp2raw +++ b/third-party/luci-app-udp2raw/files/root/etc/uci-defaults/luci-udp2raw @@ -8,11 +8,9 @@ uci -q batch <<-EOF >/dev/null EOF general=$(uci -q get udp2raw.@general[-1]) - if [ -z "$general" ]; then uci -q add udp2raw general fi - if [ ."$general" != ."general" ]; then uci -q batch <<-EOF >/dev/null rename udp2raw.@general[-1]="general" diff --git a/third-party/luci-app-udp2raw/luci-app-udp2raw1.jpg b/third-party/luci-app-udp2raw/luci-app-udp2raw1.jpg index b44fbd5c88acc6b669a213ea1096d5f7e2f7be5f..8369c26c65e4d84bbae07d8048de9a884b1d5295 100644 GIT binary patch literal 79120 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