From 61030f4221139a5f8574382c08f09a6a57515df0 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Mon, 5 Mar 2018 14:48:04 +0800 Subject: [PATCH] auto commit --- README.md | 4 + notes/Java 并发.md | 450 ++++++++++++++++++ notes/MySQL.md | 6 +- pics/19f2c9ef-6739-4a95-8e9d-aa3f7654e028.jpg | Bin 0 -> 39936 bytes 4 files changed, 457 insertions(+), 3 deletions(-) create mode 100644 notes/Java 并发.md create mode 100644 pics/19f2c9ef-6739-4a95-8e9d-aa3f7654e028.jpg diff --git a/README.md b/README.md index e7665ed9..c166b8ee 100644 --- a/README.md +++ b/README.md @@ -65,6 +65,10 @@ 整理自《深入理解 Java 虚拟机》,主要整理了内存模型、垃圾回收以及类加载机制。 +> [Java 并发](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/Java%20并发.md) + +只整理了一些比较基础的概念,之后会继续添加更多内容。 + > [Java 容器](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/Java%20容器.md) 容器的一些总结,包含容器源码的分析。 diff --git a/notes/Java 并发.md b/notes/Java 并发.md new file mode 100644 index 00000000..dfe524b4 --- /dev/null +++ b/notes/Java 并发.md @@ -0,0 +1,450 @@ + +* [使用线程](#使用线程) + * [1. 实现 Runnable 接口](#1-实现-runnable-接口) + * [2. 实现 Callable 接口](#2-实现-callable-接口) + * [3. 继承 Tread 类](#3-继承-tread-类) + * [4. 实现接口 vs 继承 Thread](#4-实现接口-vs-继承-thread) +* [Executor](#executor) +* [基础线程机制](#基础线程机制) + * [1. sleep()](#1-sleep) + * [2. yield()](#2-yield) + * [3. join()](#3-join) + * [4. deamon](#4-deamon) +* [线程之间的协作](#线程之间的协作) + * [1. 线程通信](#1-线程通信) + * [2. 线程同步](#2-线程同步) + * [2.1 synchronized](#21-synchronized) + * [2.2 Lock](#22-lock) + * [2.3 BlockingQueue](#23-blockingqueue) +* [线程状态](#线程状态) +* [结束线程](#结束线程) + * [1. 阻塞](#1-阻塞) + * [2. 中断](#2-中断) +* [原子性](#原子性) +* [volatile](#volatile) + * [1. 内存可见性](#1-内存可见性) + * [2. 禁止指令重排](#2-禁止指令重排) +* [多线程开发良好的实践](#多线程开发良好的实践) +* [未完待续](#未完待续) +* [参考资料](#参考资料) + + + +# 使用线程 + +有三种使用线程的方法: + +1. 实现 Runnable 接口; +2. 实现 Callable 接口; +3. 继承 Tread 类; + +实现 Runnable 和 Callable 接口的类只能当做一个可以在线程中运行的任务,不是真正意义上的线程,因此最后还需要通过 Thread 来调用。可以说任务是通过线程驱动从而执行的。 + +## 1. 实现 Runnable 接口 + +需要实现 run() 方法 + +通过 Thread 调用 start() 方法来启动线程 + +```java +public class MyRunnable implements Runnable { + public void run() { + // ... + } + public static void main(String[] args) { + MyRunnable instance = new MyRunnable(); + Tread thread = new Thread(instance); + thread.start(); + } +} +``` + +## 2. 实现 Callable 接口 + +与 Runnable 相比,Callable 可以有返回值,返回值通过 FutureTask 进行封装。 + +```java +public class MyCallable implements Callable { + public Integer call() { + // ... + } + public static void main(String[] args) { + MyCallable mc = new MyCallable(); + FutureTask ft = new FutureTask<>(mc); + Thread thread = new Thread(ft); + thread.start(); + System.out.println(ft.get()); + } +} +``` + +## 3. 继承 Tread 类 + +同样也是需要实现 run() 方法,并且最后也是调用 start() 方法来启动线程。 + +```java +class MyThread extends Thread { + public void run() { + // ... + } + public static void main(String[] args) { + MyThread mt = new MyThread(); + mt.start(); + } +} +``` + +## 4. 实现接口 vs 继承 Thread + +实现接口会更好一些,因为: + +1. Java 不支持多重继承,因此继承了 Thread 类就无法继承其它类,但是可以实现多个接口。 +2. 类可能只要求可执行即可,继承整个 Thread 类开销会过大。 + +# Executor + +Executor 管理多个异步任务的执行,而无需程序员显示地管理线程的生命周期。 + +主要有三种 Excutor: + +1. CachedTreadPool:一个任务创建一个线程; +2. FixedThreadPool:所有任务只能使用固定大小的线程; +3. SingleThreadExecutor:相当于大小为 1 的 FixedThreadPool。 + +```java +ExecutorService exec = Executors.newCachedThreadPool(); +for(int i = 0; i < 5; i++) { + exec.execute(new MyRunnable()); +} +``` + +# 基础线程机制 + +## 1. sleep() + +**Thread.sleep(millisec)** 方法会休眠当前正在执行的线程,millisec 单位为毫秒。也可以使用 TimeUnit.TILLISECONDS.sleep(millisec)。 + +sleep() 可能会抛出 InterruptedException。因为异常不能跨线程传播回 main() 中,因此必须在本地进行处理。线程中抛出的其它异常也同样需要在本地进行处理。 + +```java +public void run() { + try { + // ... + Thread.sleep(1000); + // ... + } catch(InterruptedException e) { + System.err.println(e); + } +} +``` + +## 2. yield() + +对静态方法 **Thread.yield()** 的调用声明了当前线程已经完成了生命周期中最重要的部分,可以切换给其它线程来执行。 + +```java +public void run() { + // ... + Thread.yield(); +} +``` + +## 3. join() + +在线程中调用另一个线程的 **join()** 方法,会将当前线程挂起,直到目标线程结束。 + +可以加一个超时参数。 + +## 4. deamon + +后台线程(**deamon**)是程序运行时在后台提供服务的线程,并不属于程序中不可或缺的部分。 + +当所有非后台线程结束时,程序也就终止,同时会杀死所有后台线程。 + +main() 属于非后台线程。 + +使用 setDaemon() 方法将一个线程设置为后台线程。 + +# 线程之间的协作 + +- **线程通信**:保证线程以一定的顺序执行; +- **线程同步**:保证线程对临界资源的互斥访问。 + +线程通信往往是基于线程同步的基础上完成的,因此很多线程通信问题也是线程同步问题。 + +## 1. 线程通信 + +**wait()、notify() 和 notifyAll()** 三者实现了线程之间的通信。 + +wait() 会在等待时将线程挂起,而不是忙等待,并且只有在 notify() 或者 notifyAll() 到达时才唤醒。 + +sleep() 和 yield() 并没有释放锁,但是 wait() 会释放锁。实际上,只有在同步控制方法或同步控制块里才能调用 wait() 、notify() 和 notifyAll()。 + +这几个方法属于基类的一部分,而不属于 Thread。 + +```java +private boolean flag = false; + +public synchronized void after() { + while(flag == false) { + wait(); + // ... + } +} + +public synchronized void before() { + flag = true; + notifyAll(); +} +``` + +**wait() 和 sleep() 的区别** + +1. wait() 是 Object 类的方法,而 sleep() 是 Thread 的静态方法; +2. wait() 会放弃锁,而 sleep() 不会。 + +## 2. 线程同步 + +给定一个进程内的所有线程,都共享同一存储空间,这样有好处又有坏处。这些线程就可以共享数据,非常有用。不过,在两个线程同时修改某一资源时,这也会造成一些问题。Java 提供了同步机制,以控制对共享资源的互斥访问。 + +### 2.1 synchronized + +**同步一个方法** + +使多个线程不能同时访问该方法。 + +```java +public synchronized void func(String name) { + // ... +} +``` + +**同步一个代码块** + +```java +public void func(String name) { + synchronized(this) { + // ... + } +} +``` + +### 2.2 Lock + +若要实现更细粒度的控制,我们可以使用锁(lock)。 + +```java +private Lock lock; +public int func(int value) { + lock.lock(); + // ... + lock.unlock(); +} +``` + +### 2.3 BlockingQueue + +java.util.concurrent.BlockingQueue 接口有以下阻塞队列的实现: + +- **FIFO 队列**:LinkedBlockingQueue、ArrayListBlockingQueue(固定长度) +- **优先级队列**:PriorityBlockingQueue + +提供了阻塞的 take() 和 put() 方法:如果队列为空 take() 将一直阻塞到队列中有内容,如果队列为满 put() 将阻塞到队列有空闲位置。它们响应中断,当收到中断请求的时候会抛出 InterruptedException,从而提前结束阻塞状态。 + +**使用 BlockingQueue 实现生产者消费者问题** + +```java +// 生产者 +import java.util.concurrent.BlockingQueue; + +public class Producer implements Runnable { + private BlockingQueue queue; + + public Producer(BlockingQueue queue) { + this.queue = queue; + } + + @Override + public void run() { + System.out.println(Thread.currentThread().getName() + " is making product..."); + String product = "made by " + Thread.currentThread().getName(); + try { + queue.put(product); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } +} +``` + +```java +// 消费者 +import java.util.concurrent.BlockingQueue; + +public class Consumer implements Runnable{ + private BlockingQueue queue; + + public Consumer(BlockingQueue queue) { + this.queue = queue; + } + + @Override + public void run() { + try { + String product = queue.take(); + System.out.println(Thread.currentThread().getName() + " is consuming product " + product + "..."); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } +} +``` + +```java +// 客户端 +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; + +public class Client { + public static void main(String[] args) { + BlockingQueue queue = new LinkedBlockingQueue<>(5); + for (int i = 0; i < 2; i++) { + new Thread(new Consumer(queue), "Producer" + i).start(); + } + for (int i = 0; i < 5; i++) { + // 只有两个 Product,因此只能消费两个,其它三个消费者被阻塞 + new Thread(new Producer(queue), "Consumer" + i).start(); + } + for (int i = 2; i < 5; i++) { + new Thread(new Consumer(queue), "Producer" + i).start(); + } + } +} +``` + +```html +// 运行结果 +Consumer0 is making product... +Producer0 is consuming product made by Consumer0... +Consumer1 is making product... +Producer1 is consuming product made by Consumer1... +Consumer2 is making product... +Consumer3 is making product... +Consumer4 is making product... +Producer2 is consuming product made by Consumer2... +Producer3 is consuming product made by Consumer3... +Producer4 is consuming product made by Consumer4... +``` + +# 线程状态 + +JDK 从 1.5 开始在 Thread 类中增添了 State 枚举,包含以下六种状态: + +1. **NEW**(新建) +2. **RUNNABLE**(当线程正在运行或者已经就绪正等待 CPU 时间片) +3. **BLOCKED**(阻塞,线程在等待获取对象同步锁) +4. **Waiting**(调用不带超时的 wait() 或 join()) +5. **TIMED_WAITING**(调用 sleep()、带超时的 wait() 或者 join()) +6. **TERMINATED**(死亡) + +

+ +# 结束线程 + +## 1. 阻塞 + +一个线程进入阻塞状态可能有以下原因: + +1. 调用 Thread.sleep() 方法进入休眠状态; +2. 通过 wait() 使线程挂起,直到线程得到 notify() 或 notifyAll() 消息(或者 java.util.concurrent 类库中等价的 signal() 或 signalAll() 消息; +3. 等待某个 I/O 的完成; +4. 试图在某个对象上调用其同步控制方法,但是对象锁不可用,因为另一个线程已经获得了这个锁。 + +## 2. 中断 + +使用中断机制即可终止阻塞的线程。 + +使用 **interrupt()** 方法来中断某个线程,它会设置线程的中断状态。Object.wait(), Thread.join() 和 Thread.sleep() 三种方法在收到中断请求的时候会清除中断状态,并抛出 InterruptedException。 + +应当捕获这个 InterruptedException 异常,从而做一些清理资源的操作。 + +**不可中断的阻塞** + +不能中断 I/O 阻塞和 synchronized 锁阻塞。 + +**Executor 的中断操作** + +Executor 避免对 Thread 对象的直接操作,但是使用 interrupt() 方法必须持有 Thread 对象。Executor 使用 shutdownNow() 方法来中断所有它里面的所有线程,shutdownNow() 方法会发送 interrupt() 调用给所有线程。 + +如果只想中断一个线程,那么使用 Executor 的 submit() 而不是 executor() 来启动线程,就可以持有线程的上下文。submit() 将返回一个泛型 Futrue,可以在它之上调用 cancel(),如果将 true 传递给 cancel(),那么它将会发送 interrupt() 调用给特定的线程。 + +**检查中断** + +通过中断的方法来终止线程,需要线程进入阻塞状态才能终止。如果编写的 run() 方法循环条件为 true,但是该线程不发生阻塞,那么线程就永远无法终止。 + +interrupt() 方法会设置中断状态,可以通过 interrupted() 方法来检查中断状,从而判断一个线程是否已经被中断。 + +interrupted() 方法在检查完中断状态之后会清除中断状态,这样做是为了确保一次中断操作只会产生一次影响。 + +# 原子性 + +对于除 long 和 double 之外的基本类型变量的读写,可以看成是具有原子性的,以不可分割的步骤操作内存。 + +JVM 将 64 位变量(long 和 double)的读写当做两个分离的 32 位操作来执行,在两个操作之间可能会发生上下文切换,因此不具有原子性。可以使用 **volatile** 关键字来定义 long 和 double 变量,从而获得原子性。 + +**AtomicInteger、AtomicLong、AtomicReference** 等特殊的原子性变量类提供了下面形式的原子性条件更新语句,使得比较和更新这两个操作能够不可分割地执行。 + +```java +boolean compareAndSet(expectedValue, updateValue); +``` + +AtomicInteger 使用举例: + +```java +private AtomicInteger ai = new AtomicInteger(0); + +public int next() { + return ai.addAndGet(2) +} +``` + +原子性具有很多复杂问题,应当尽量使用同步而不是原子性。 + +# volatile + +保证了内存可见性和禁止指令重排,没法保证原子性。 + +## 1. 内存可见性 + +普通共享变量被修改之后,什么时候被写入主存是不确定的。 + +volatile 关键字会保证每次修改共享变量之后该值会立即更新到内存中,并且在读取时会从内存中读取值。 + +synchronized 和 Lock 也能够保证内存可见性。它们能保证同一时刻只有一个线程获取锁然后执行同步代码,并且在释放锁之前会将对变量的修改刷新到主存当中。不过只有对共享变量的 set() 和 get() 方法都加上 synchronized 才能保证可见性,如果只有 set() 方法加了 synchronized,那么 get() 方法并不能保证会从内存中读取最新的数据。 + +## 2. 禁止指令重排 + +在 Java 内存模型中,允许编译器和处理器对指令进行重排序,重排序过程不会影响到单线程程序的执行,却会影响到多线程并发执行的正确性。 + +volatile 关键字通过添加内存屏障的方式来进制指令重排,即重排序时不能把后面的指令放到内存屏障之前。 + +可以通过 synchronized 和 Lock 来保证有序性,它们保证每个时刻只有一个线程执行同步代码,相当于是让线程顺序执行同步代码,自然就保证了有序性。 + +# 多线程开发良好的实践 + +- 给线程命名; +- 最小化同步范围; +- 优先使用 volatile; +- 尽可能使用更高层次的并发工具而非 wait 和 notify() 来实现线程通信,如 BlockingQueue, Semeaphore; +- 多用并发容器,少用同步容器,并发容器壁同步容器的可扩展性更好。 +- 考虑使用线程池 +- 最低限度的使用同步和锁,缩小临界区。因此相对于同步方法,同步块会更好。 + +# 未完待续 + +# 参考资料 + +- Java 编程思想 +- [Java 线程面试题 Top 50](http://www.importnew.com/12773.html) +- [Java 面试专题 - 多线程 & 并发编程 ](https://www.jianshu.com/p/e0c8d3dced8a) +- [可重入内置锁](https://github.com/francistao/LearningNotes/blob/master/Part2/JavaConcurrent/%E5%8F%AF%E9%87%8D%E5%85%A5%E5%86%85%E7%BD%AE%E9%94%81.md) diff --git a/notes/MySQL.md b/notes/MySQL.md index e3c5c88e..6cccf3f3 100644 --- a/notes/MySQL.md +++ b/notes/MySQL.md @@ -12,7 +12,7 @@ * [1. 索引分类](#1-索引分类) * [1.1 B-Tree 索引](#11-b-tree-索引) * [1.2 哈希索引](#12-哈希索引) - * [1.3. 空间索引数据(R-Tree)](#13-空间索引数据r-tree) + * [1.3. 空间索引(R-Tree)](#13-空间索引r-tree) * [1.4 全文索引](#14-全文索引) * [2. 索引的优点](#2-索引的优点) * [3. 索引优化](#3-索引优化) @@ -92,7 +92,7 @@ MyISAM 只支持表级锁,而 InnoDB 还支持行级锁。 **其它特性** -MyISAM 支持全文索引,地理空间索引; +MyISAM 支持全文索引,地理空间索引。 # 数据类型 @@ -172,7 +172,7 @@ InnoDB 引擎有一个特殊的功能叫“自适应哈希索引”,当某个 限制:哈希索引只包含哈希值和行指针,而不存储字段值,所以不能使用索引中的值来避免读取行。不过,访问内存中的行的速度很快,所以大部分情况下这一点对性能影响并不明显;无法用于分组与排序;只支持精确查找,无法用于部分查找和范围查找;如果哈希冲突很多,查找速度会变得很慢。 -### 1.3. 空间索引数据(R-Tree) +### 1.3. 空间索引(R-Tree) MyISAM 存储引擎支持空间索引,可以用于地理数据存储。 diff --git a/pics/19f2c9ef-6739-4a95-8e9d-aa3f7654e028.jpg b/pics/19f2c9ef-6739-4a95-8e9d-aa3f7654e028.jpg new file mode 100644 index 0000000000000000000000000000000000000000..905b16ba21519e04d3deaff29b67791188d4041b GIT binary patch literal 39936 zcmeFZ2UL^Ywk{k*LAapLD6@Hz?nQJkirIC+xdEG6Zs)6{3Fsj1FVQJtfqKYxyf zj)scr{KfNh7Z?~B8L4TRm@hIg(=#wK{A`4b9H?`W;tU1F8HRII=NSI&7wIdA?lc+c zL@zlR7w7~X895ypsR;xIfygL;-u~?HUteS=fIgn0JbmUY74QSpdC&%+lq>nX?y}m|0kP`S=B{ zTosp)l#;$FqjX1EMfI+lx}Ls)p^>qPsnug^8(Ta3C$4Vp9-eS7@0YIvgMwd&gvP|a zjf+os_dYQ_BQxt$c1~{Imy%LcS$RceRYPM_b4%;Dw)Wn>{(-@v;gQjq*}3_J#iiwy zRqXc8?%w_Z?hyY|E;11Le~9&W$$pWG4v_1_$&=(KDSygEcES_5$mvc}Toye=uc$-$ z$oT@-jpwHsZbzpT*Pr1Q)5S1ay7ZjA$Rj?(i~T9uUnKk21bgvclI-t-{cpKOLDb}A zz~qtBfgqq`z4TB4(Enu@Ie!CU`|9%4-U2N#%v1oAN(ilzI`&c`fzk&0%fO^g@*cnor!oCu=P);=jv^jSC=Y zNuXExvrNa-rXs{MU=k?C?zaMboYortka93>BxOb!jv(+_oUdE9>_K4el0bx5)n7mN z=XqKTeN#Zud_OoV*!U0b5BaS}3R!wp#9GC@91q(H9q45e=!|U>?-G&z99`WAvDrDb zbwdJ~?rSu#o7)RvFg2}-W#`b)9=|BI#^dmfb2`;mzk^cu>Y7f$9k#O80-bx2cM>IH zBx%B>1h0I%bdWtn*UzA%4EptQo|MA^0&oj+CTHJDz;84-MN&ExH@t66y22jV^^8(T zk(`;wD{C5iv2@W~uh~0gf2pmH=ZHaVJx$>$0{z`@wd|$u=w3@MQr%M{*Sw9Zc!NGU z8u{aD=n&FB;&g9hzTUT7Ljz7c3m6ln3CsXfNFBz{lLTrN0EXDx3D1lMN?)$k5pSCA z8Yw4Oaomf-seU4X(!!dia0=BV(A--@gS^x+HI$D8s^6O;f!GVZ1-`7azW)~*)Uh6x zxB;2rOd`(+dh;YcC9`)`q!KMDpVX&`J(wtJ?>v_ z@~cdO&`_c3Q=fjl$uA-q)-afOocn)m;0}l4u>2t}X1WOUbpu>1S zm0YWQQs>`j*eFK3&j-5hbWl#~xF^hbK}*7f26X zk~}Mr9`GMmkyT5rOc}F}SNL4( zK@n7Tf>vGc+ba___wq647&)Q=_!k{wUZo7MJk-|9{nLfNniw)FgsuF0~-gLr5T=p5F@gt|kxdZPOMimB=@QVt}2e zUV9nXVCf{#G_b1<`J#R+$kpGhL%#8Q!ts8S!RWO}SnZ`2PY$O$6(rEZ6?)aw)^139 z)fA<#R?_{tFm)`&2UEw4D@_*^FZ=ksT+R$Is2ky4Ner2JqUh@Q!1;V^S!xF9ejMT^!_OngU&6ApBJ2dQUNtf0x>+%kpb}^8xP(+Sbp{q?W#@}ffsZHtaM32!vXemHVzUrKzyeBRU0(Zu zb0vYev|>r12T{aVunc5w{5ppF3s5^+QJLXB*?;jm>CXWe(aISM{9YXi^urSAf;@-W zBE)r{C4q(tNg(1&MxQu1ZfaIUdmtr}Y1%&x7>pE;zYhkSCn2g3KGw|os@132dyvi+ z#~l_N0RDu6WJY50S{e-!@27heOX zB|D~q0$pP(v1YD4Rqgl2KJ$hsTU;1X`Bj!IORY|+ll;H8K zYs&Ce>)~LQ>l6(z;HfxUV!cNl{t7G&`7S=j?tnW_Mf*={LuUqZ$mr&T-wq~$lnWVo zS^NKLco}ylUy?xJNx+hQ-cKWevS=-C8~w68;2iVMX3JE7)dkJ{YKiM>VYLnL74t#D z=+QC`@ASl@(>&PT34CQwF*bw{gzL_6&^9JkP09}AUbvNij^?teRiPvc#_ZngzGozQ zWJpaofi;$wR0QrtH`G1Ei3sp@n28E@&1YlwRdy(_7jjV@Suh-bPXbv-?G&NqnFma_ z5RDpyy}ECUg*tskW+o)iSAyGNs)LRN!)ijUI4*8hn|Z?2j>y%I@>4i0+&$c#FqDN0 zd4S)F^F)lacZwoowpBD7*24*I=0Q{%EI>LBG!T*C(%362k5&@%!SsG&`;8U{>Mu5l$cCZyueBh`^9wH$Vc^Ac1J9!}@rsrP!_x;Mf; z3K#8?K=KDKq&UWcPwp3$6X`6%!MpNy2pljK>-p`4w{PU~Z*bKDT2(gJFy_UBC_wSt znD^(ys=j8$uW6%8dxcMa8B?Sfc%FExr@iMrbBNL9vY1npCtdY4Jm)U%plcACn(gWG zqZ%CHGO*XRPx13NK@#J4pK6;!yyC~5~Lv#u= zOn9@BFdCRy{Mt5gIuKPJWp%>R`i3{r_W7&a%B5H#@6h2tI?T`!bAj)p*p36 zre+q_QQhH#pkL9JC|z4@sWQ7j|AwaVXfu<2^I*jQF(W!iC=ns>RzcoY1&;s@xedFm z^tS7gAK`=J-W+2K-0ACQxb3Xb>!Qm)woWG0TcZYEWzASjT>VmOAsa?c;9tEWd`)}~ zBm8u}oCH!cLwxSAjhZ~JV81b!>&oAmayap0F(b*QfCw((tUey|ZPy=I-z-1UUD-J# zykB1Pngg{}L;H-+Xk2I2qs|64y?H%nU6uo!w#jJp>%dc#R1oY~a>gtQ=CfgtM8_ zqzWGSgHiH_L|XD-+b1q{WQXXwIuTa<=JfK zllu}QZ6_6225PBS5^XXMWK1(|#}>R2Za4&Ak(R!>O5uJaP@!BnQOAf#NN|1M@BE=! zkVrFyIgWBpuXV+Wgz%uNapU`@Z(~~Rvzv-b#pt=5StiOUU#6-Dt7Ec;8Yiq~9IH|; z4WQ(W%&Rrz)sWZT&nDiyWb-vDedB6HYt|jR9n&oze_0v>FDGjh2}A`})3FdyoAx3+ za>Z&G*J3Xg)2}dXm!-mBaBM4e*m;Lx%9L@p!c;bR29e$ggrn7}Dj(eIgz2N0AR|@6 z!=+vgA3M<5%%J_PSk*68hCX9hBf(LV(!oTa-?JRa3yPp=hX3}f--6!lc{*qo~oPV=<%W>h3 zk=Q=ct(r*Fnhp+&plk}WIAe~pGW>G%Af^?TcP~dcd$>A8ubRhdtj7DCS3;B1p&*1B zu~u_He9hSG|HHJXIM4U?4_`rttS4113D;7EcjILgKE~^5UwW3Y#6y4H_4)CZdLV_u zozfa$9Eq=c+FIY&#MQBhbfzlmKn;!{in9?Ar2!#d#jI6U^GqfPRya(*QX`~^=W(t( zzXz@B8Z_UeKZ>W&C+>`E%Rb<*l!*U_AO1IgJUxK>H;==20byIT3O+9Sb5>CF6r@>!P2Z0~quR05tz-jdJj4$kI9jyiNPRD^)~+33n=S2rpat zu0T(}k9UJNWFp?}unv^8EVs%!j~mJV(rt_TKl}xaM>L&%=13r#dVAJbp;&t|9iv(` zU(3?$+leuYA51s45YZP3rNAEN{H7MYErJMonYe1rND@f3E{HhLqSWwpZaA_9t?_4f zD*+DOZZ)12MiqPm8x2njsrVt+?SMws22X74T zXu;UwB@f1xRw{P!DWNU*a)Y&F-$-zQI@(Cw!LbIMR;Ber(~BneNDp^GWdN*IonR2T zVQu#cG2)uMo=xf0vE#M@t$|WvONbgn4Ho#rgu}C|8O&WzZmd2s)Vl6sPHTs$3lSoi zr;V--o_J*ctU7k%e5rPn`=e;nxSiAuky&9!3l5w{Lzzcn+-3rTA-2;tYf?CKNGo&Z zWM;S(%h$!vrOO1Tnba4l42ACb97f80m&)yTwKu4mQx7`I(PdT zMJ;=CW)*Ur*_6{Pq!@5;H>$k5Wv-~<(jpFpFX+b(g=Q=B^LCbzKv9SE`I6~}p5=2+ zI||L%gK%yPQ=pT3+fzrBz{c%ZhsQ|^zMt7?TTtTWI_`y>9rukNmz(A2K4Rzy*8IwT zeUAnC&R095JQQKg!PHz{m6B7n_&)Oj_5K0!ylWlHv+N~lox!TQaMr9n!my9U=9(mv4NVQzZF`Y7Rs&XR*VMb3@~R0yU_qklFjNRT7&V=`zO?}h3Rqs~q%Bh3UZon4Xr(v-}0&!2RCE%jxje4&%yB8fsgyLq@34eGCk`*>Dxpq zUk+iBX68gKrSSD^5Ogr&@FVk~Eu@@k&g#`%C*BofJ$kDSI$KKeF|HzM_paFZME`4p zgwt`h-$qT>aDu7N%EE#YG9)o43jR6A;nN1fbfrZem3?@x@gz9pYPEE&!ei z>hNSm+NEy%@bSH=V8pgIK@5Po)fUGLs2@Y}m@Oi(TZ0hmOn@FskFR1q3?bY*$iQU$ zGyeER#FM|V7>8Q`Qi$5RfEf0{PmIg*Fdwj}nCmSv|G*Cic4Ei2bE zI}9Fp<@hnxwG;NhmluOtET1`s`iXZSJ~mzc9GCs(P+crQWnEHiprq4-!Qg7F8qfZP zS7r`{U9frtjV}aqj1v1eeEfRV=+x@cLDA7X&j&)&vRkrR zL^?;N2l>rC#^ty7*RII6pQ%ede3MgAWZapx4J^v8`Ch^kR`W!a7hkn5%8!1ZbCX-> z#$Rqco{EibJFHkhd?CQPD7SFi?Y)qs zhs>iLNs5(GHz^&j-@G~3vz#%iddM_KeDt>#yVCmP96KnJGL}ypOC^<)~ehj=mF^CE}fAeqtr~`1FwKgQdpQLwdJV{5)cp+nmEs zsN6P~wFdO%tZB zaDN!wU>KjD7-Qnm{h~sF4A?c3^>aDxz+yR=Y44QK>AF~Qt=F4?rWr2KrX$c{oWjI4 z1=agYVVevxM!FmUvmJ)HM+9HnMrnu98(n5 zoO+rdIOoTt-Mg18wqZEx{R;I+JVfXg=sJ(#xfh^rxw*u3fs9eDHj78wDjQ?2A21?~ z6SOle34Ey^$JAgjo)nl+IsH9PE0&I8iJl(idztf_6D{fK1;A7?^8TGK`YVA(hw~(= zF9jmj21y_iNHMgg9WB*Zw{0XRNCH6ttca&J*ff}%L%gnm71a)3oYc|J;;Gd8p>+kthf?O?S1#!hH*>h!#myK|%5^$J$n5kfP}@y8BT*|1tijZK z__cV8qBTd;eMDxvN5SEas&JQ!_wGjMhF#Y8J4V#mhDA2GUJr{8?JwMF}bhMe{=JrWsO#7oUZeLXoYgVxGVGu&Ut2w6>cL! zyTA$VcCj6cSWub!32Ne=}9feVn}*Z7`Y3npCl zy>||8R_QHTQ|BUG9$eoaH}TJdO~Dedqrb{GRjAV}OPTJRD0tu>s zBvL>C7K3mFx+k%A^aSxeN_M2Xgg(>)cbf>X(LdN40InYb*xz|p$P5)OiUhjlL&@Hk_me>HDN9mq zcqP>?GLNc0e4XJcx(wRV1|XiuEaaFBEdoR-k5Y+>g_=w=3aEUo7lnFQ(fyDdBdI`XtO1*@yq2W|-jCR8-WH_hh@28x7Q+pF z?E7iWtRil!WIV|W2T|U-vNxljTAGyLI`GQNGGiE+rSG59|D38ozPJ?(+2&b+>;YlO zWtA$KZ$E_0ZYAmcuwk?5bIc4UC+LVyvH6|-EP=Gp@psUf9v!_7G{Fp*J%H&PNqXuvx0Eo z96&*Tbq5seUxOq(@lNSDfYJADgmrk2zA_<7FD!8npI7ZSsu>cUb2>2wZ(zO`iAUnyzptmgV-#djHFOh6#+xSIsJ)bp3$)7mP0|JT~j7}Fy@=Iru&_g0q#`mHel%3Cxc@Z@j{AV7Tp zA-q&A%O-r2|8OKKko8+vGl=KwUIR083R6d<-9#LoigM6CeB*O--%>~8_lADkI-H}a zJD2ud*P9Ab86S9Yf@=(Pw>w#02n@w+l0a8;4tNIZe%6Ts4-=Uz5F2Z;QH|>o131~4 zS9m{yDe|?`qka^#mczzI#ubOBe){w#W5=IbKQq!d>Ak4gd|=n5HCQ|ZH`4TD0)i>2 z{D3pmNbYBFB6Y#^tqzpj(^K9$y*Tzy(Gmu@Hc{D}jfe)=ksg@x<;1_mPJU$@|Fh4| zwXzsW0#6}lM)tjUnej8le9rF{wQ3)HbW!o9`_{JBiymCY1*^Sj%z^9adr@-QBr{h< z)YR*J#qU55l|6KuwGtO5*arkuGHSmcb{Jya5^0hZ(sJQG7RANo=Dp+E*)r+Wb36mD zQ5`FDYTOv)>q#lHxCBk#^WLmm5WB6z%S1qBAR))euu8xSCj_`n;rF8erN%gp)zmS# z>F$866xq4SNIO|!k&Z|`<3FN4=^&zA2hXG5yE`IHihwIy9e^%dc+>hVixsd(pwW(EFeD^$;?9*3l@ z$tMBa0zlkF1g$+3x~6azSG8lszvI2b{Zp~>G7RB&i_gQ@O_NsyyPhxi9{mv;$R&kS&;^&GX-h9!;6#-!rwXL;y4@6mcXojy4$i*$(9JpK4C8uvx@)ke5>g3Pa%HI?LX}RcGXywXL z8lNz@#%x^^9`#1_+o-{3*OzZZo85PH9_W6^cC;-EzGs=?;|`$UkH5MX|4LTmznr)C zZ|7K&ch>zgt=ag`X7G!}W-$qLfspQkJP7d?=}ZKygL5(vApZAO%x^5dlnH=WJQ?bnY# zfZU^5B*R_n7eI;(UG=F&0pU5L3hrXhrvZKe5)Qht#H%g5H{1O0dmNwO7 zaj;KIlu#X!*urxVlu01OLm+3;U|^30af5JA0mb?K05AAep$&=nu{A4lbOdmktQqTx z2gfu-E)uBjGXk5ZkRh^Y@!Ic+{QIq4pxs#L|G8a#KNXAbb?5Q@K4MeLNYD`<5WZ8Y zdtJA+4kkQ_`U0EUl?6y_Vm%4el7kPgd+&dFFK6Gjt_MoCujxY!M$jRqh9S5C@Z+Jn zWlt>A@$pL%C_?8ieN|f1S?@-qqbVL@scl{0V^CodNE3R>qNAO$7iT-GlA8uqvY)k| zL4SVV;`-oI`u&`XK*q|$ z;RlEJ&Bio@D6*osRN|hSx3dMHksYxqFO3z|H>!E8Z&r*bo0s(GAX89+$l!e_OAVGL zdZv@V>Arn}u&dO*bxnz!ZY1g(UbYB@iH%2U zaxG((bIdc5{cY^Y8NI0e`b~MUq~k8SmRDo@pVC8thv?+#f+uxtSP`H@d6w`IzR3&e+c`i_GZ zJ^+iL?U0U6u4Th%4&It%?ip4)J60h{=i76I;ywYLbLpYmv<`n`)S1pDuN3BRTT**>&c7?!zCi z*%IGCKPHMYd1epTXGMx;6V_mVjzPB9KD% zT<1e&C6J#2ARM;0I?9$$e_|Q0@(qCF;ej-hKzjh=QBvrs00xK;8X!Up?E%pKi3+Dt zS>jzp7zwlnU`|`pOOKyh>6p7{hF*>#&*+z zEXL9F6o>xHYl$1E4O(Lif1^jQo6k9=S+Q?h9PKcCRpthH&^1#V=&hOC&p&{l^whh! z@*mq1ZG5{^7YFbXcBM@>Mt6{#7eO@-_nbPO^;z7b!&@Ei+2=1o zU+r|-t}i^^sPylZdUC{>pbQ_X=g>A8Kzq#{Mfj+iQ|a0lqB|I>%-*C{G0XOYTm(m+ z*mA1Gt_QQYS_}jl42a`U4w9?w&hH$#>{6E-8J~o{=vKxV6+D2yoQZnnu2DAS?vrWy zpnb9klX2lN)?D)$2}C|DQm;*RQJVbL=QhaRX56?@XTRZxm`xvj;?GPS8{?k@kWnnL z7rZTiLl9epWl12Fp@QE^Y-o>XIkT?`;%@8$$qIj5Lw{RK|LS|&pO2}?@dNR-q6lC) z-v^d6Dm~!uWaK|;P_PYsqi&RwqyK!>#9_i{xL2Zl=+uhdwO-0c2d?AP2S^hnNAF%n zCJv(CU+j$7_t{V^Yd`5Y=D5h_gAonz2{`8jp6(d%zXzBiR)wgYkoKrxg{x6tWj0?j z?k5Hjyd(#^d3w!88jMZ~(xG?0Q9fT&%O&vl??qi$!4Kf=6Jq=l2dOGd7gxn2(mWsb zoV)~?TAq86(cia68)azmFlO#vU+37l(C7zpp}pU}H(Cmbs;@uG#AI{#F}iBtBK&3r zw?LC-rt&GVNM%tsdljs}^ZC=?dK^b3!S8N-NHMIc^G6Dr5!r~8lU7FwSqCH#WalP_ z*>r7ork(%giyj^_an1E_Mm6@sg5uC^ga#y=XoRZV2K#JP$@DQywWMT#LwE}%jnY9l z+gfH>4S%z;j`HLQ7+EShClV;3F&B^z%a~aRWB;TxWvL)5> z*hsPa@R!Xg;yq7&SqD9;{BvFNCN?T}iu}J<*d-70HfaZdz*128<;A=WCdbs!nmV$I zzJawNOfPVPBKY1Uc)-E`l19;pe3Jc8*?rSVB?at_Lv1lZ)kqrO_49~oJ-AHErfh_* z4*Gc^CvhG9Ols12;C8N)>kI#PnZ%*~0$=M#wjNfJGI2?z&LYB2&YV;NPtUctx5h|c z*=p5%5EHB3op+3w<~YN*b^KF5TG}y?K!MS(cg^+aS~=ZejYs7ZAKJYXULA1cz6HJs zxE7Z8&@2j<1O@N9MiWbqxAtrN*5E+$i-k!4QUdnT&M{3_s6YWtz)#=%-+~(Q*#udv zUu~F`cpZb2@MSyht6vo91KY!?Q*#(s8a_OEl+npkvouxe!}mC04*; zfcA2 zVE*Kn=Gl&-j(Ot02!^0=Ub9ZYWwqobSnz8LqiAII_J;qi$JBBRrpVt4Py1veKkoy# zmfYur8%9HmkFKb@EXI^dX}W)(`#Y#wLB zS}rI&Z%8#9uB}!)u*K`j-ZN#+%*cJ!|KY8hH(NRP2J~5j(wwr4$DtGLpH0VFdOHN& zlyzdXXS9g7K z;gNSg{s7P|bWbk8bJHTnBUChnKYsuE_|~__-Pse;dq_*nP)KPvvz`x+(=A983?uQXoa=I)aiT%DpJsHKg<1&uM0QJ+j#6NTu_I?~$Q8pe6h z6(%&=lr`R-ujOFrKL_jXmjUzgQhVuv+b{sr+5z8RpoocU=NLC1u$R3Rf}qT%jH z)JWs|TIAl^L5ejdp`Li<2LZ^yvuGBvJMc!oX|J<_a5>y#AjsI(csno{>L!R)W?Hoa z+fvci8e>Jg>-5|k$WO64s6w<>8F^XA!f1_s_vpsB9l*(oja=M%j znGk+wpJ)u&Tn?G!05gI4<;QmI7FTP)6TWZ zN3700;a^|kS=Rv3&`SMFO(f7MXz-_=pJzq>9_IL4xZ_`Z|Ci60{G;}~RD&Gm`Uwz( zlZ&IHW#ZBO5aRG%mrt9I%3mJbn(;bH^ES#KdJBhjSkO-S<#bX*ociTj(6Q7^8?LU^ za@S($XcC>V`ls1ApA&#T3q zHEyiyI9EzmaShHsDC7_RAptpS?=6{~pR7J9n|ifnb#hfh4c$b|sC(Dk%)4k>J^BqT zWBW4axgj@H4Vqg=syu!)w0mj1r0CxILo$u?b$p`FfAmB7FlFy&qfX(tby2-e5`qpl z+;%p^M;=F7YhM}oYT$nOGCJk>34?n{s#84RJ&U_c_H6A8@51EydI%34X)^YcB4pYe zri*Qb23IaqWV#q9*lzcql0T7BDbX`TS9YeB%kFjyQ>2f>wMSmnvKfKl{`xNLsY%Z) z#k$*xsIegljg@0}o6l>rt7C~b5@=Hs4KXm>(W zqMM7C<+LXM!DWiEZSYbkH)b*gT~jy8R#{=i=e;lI2}!n7J$t*_N;$%h;h`aPE4LhN z!&lj6mtH~h6|nXvf~wQUaAB&|eb>IHkFJU_q}&UV8ugwD=E}nv)sKq25YOx@ zm6tgu)8lpJ>~`zX_X*>p7|o|WM%~w-8q3;3UX_Kp3lKKM{LN|Yqtg!%D?F$uGw`23 zLnoPVqQt5c1H>$3Ev?bltqg{IIe9%o#n`??ngj~Sby|VC&uNE#hE398DT8!J=3+Rm z4)iXUUl4oU@sW8t$88xAT9eU?XTd@O-6Pm#nw&Ox%V-)ed!{`|?Ls>`jkM~<*4MK3 zsZ=^0=Ucfvu0xATj^%Wb-I58vszP~$TIqQ<>SOMo&8X$TE(gSirkcSaDcl%gASLa6 z0Z!!33pO5i3;G9bOXHuRx3AKbo)Fz}m*^1*MeAT`XD&t;;hS8*NF-vmY!z^nh7E?Wyu@N^VN=9z+ED zv%&l7YlW&Ez)jxHn5=~(Xor=%UFWmvE_0pwuZyKFQKiX=C1YFsaYxe2yCe{wB9>bh zs}hX`H@KJ^<1FrDP=m!zwswvVk7MtbMgNG8Hck$8DSUCWo-qyUI!hZWcV(8A+K$N7 z_tagm(?*R;(D!>7C)4Ev@*nQp>_>*SP2Ir|I$!Hq4cTO=rbOQOxKC59ImTw=CbI1@ zT#Sdq?AJS_IA^P5Q^{a5Ej80MR(kyo)-^qMKCL%i;OgqCXs2mhGii;DXCEXc=q_}2 zUV~0We5a-HHO8KLpMjeN+_~WgFep=0w{wQm`SHt9-WyZ#l*QeHl@3g^3%4W7)x7 zE7pX#Dv{bzJj{yq%Ued|poK>~K?ZCG*vci2RtF4(dm0(=`3B;%5U@AO-HK)_qMlD} zE2GH)%8QEjm|uNkZRsirL=P?4wr>w6#qwA-%An*9-P}9N~Er# zHBJu|3||G@(Z8Pj{rBE)`2K=}qyChz^YPr1f7bA}{6%=F)7jMorudTPlTwM{y-HGB z?AfEAEPWndpQpV|;k^J~Ovud4`qFN#Z zjb%Ldp>g@Exn9;zIpXp6dBRR!kWH_CLzu~U`fA+y8}$uk2dU`-Iy;Z+lQ4YgXmhpF z)zwgpSG2hETPoIfzMtROuz&JuySZ2;a+)CD=gV}X%}ThxK#H7HLmg@LR-?IA*>%+%bM+Ti^0=1k4JNqg6EWtXx$LUarjcD<4=YCA0Y zl0Rsn&e4Xby2wPPSGy+evSTVi&9>X+yaT0olApIV^|r=#PndT`_m&p;pI`Qe z7*0bcsySwa>R*uyvWa!|P4zMfeR18nzUyl8!Pf|y72AvW$o%XxnH9E2LdA&u4`e(_ zz7D9ySrXSNKlYK99@d*QDhKR(+R zHWMF|FJBxpYY?*{k{Obvw?pOZNcOd>H{@_BWgyiav!vZynlwCzg=U5?$0J5BsM+(x zW3o?7csA%cNy`qrJK)PWfFuyWt(YC!$rZ#J-Xbcx+m#ez9NJpg z=>%D|Ec1)`FVBOxV_ckH+TI%~%EYSVXFwZSnXMvMd+kD+K1=EcQD)@lQWjHZ_Zvze z1JW_Q@Q2Ig8Vug|VV33hKq+TLD||nKM$Q_MbEuqx5BHXO)y)VDxQFG=#%11J-$;8k zuS8GZ>fAbI;~M>g!ooYm#chYMdkmo;f|vuE_9dbfBLyH&D!vPLRcRLrj@)6*?X4w_ zybzH}4zbDiy1v5iI@4DlclB)yAen?YJ1gE2YNy@0y>*D}wH7&91Y-a)D18BTCHb>| z8{Gdn68z8Oh?MVrU5efNb~zrOc+`t*ihZLn@4|iOyI+8B;!;V9Dp$>?)ltC?uZJlT z@hl7(EpwOOVib{A1{5x=jmkB_ZHVowjgack1MlaqM{O2-D^QR8TBKU&{qDgXD^9g) zcE;tljzm6d1|SPg(Vq*^oe%`UzyO5*trXEfg}p%ZMT-JsWfnzLF4_Wee4;znmk1dG z*#Khy^S3}okj3lNorRew0_!+pTllXjK17|jdcb2yfHXZ4NCC|YQ`+o~x!jmI*jB(^mdZXFH*=1D&#uU6|(v`_CUDw`BMfg~I9lVy~&ox=~ zEWaqZWZLI`ldP&Z(Or+S4Hf<e=&F(O;=!coAC|*`^P7*W-L%LanOL6 zyLCS3N3WXBr>OWc6{;?BS3Aac99X*sK7HW+l-i1Wk%jw%hn7}%yr4gpSeNOl+^SJt zZttm$KTM&@(wNndhnR+9QEUPZTbqtT!VZ>xv5Na6tZMAflczbEs@|x$nt8{kA#n-1 z=v38yRD`U0vPe-{;%O6Bl}KsANAe>5ixVxUypT{$jR)4@sT6B!ReW!P;yV@|YMm#6 zGX3TvMWefUbdIx%9J&dYy(fKBr8pfDCcE)n_4Yya z|!5LL<5n#iXXqR>a7{ucs59K``f3v?-9i;XPI2yoB<-s!)Xo{h@xp=7tha+JJ9a>s#O?eC<=)NZ1IQ?hwOGPO8DAr&QNZn2EfP6a)Hp z_o$Ko=Apk{klf=~-61+_?t1U>ByJ-z>o13GE&4WdIo&tE&b_er>2|B~%Q>KTHn$*> zUmFBYJvv{M8cZBGXk2*r&27hS`*sPp3hN5pi6BGJ{E7J!vKL0n-QaU5+>0?xEpyNnUx$4T0`2xm%{Dsr$*Z<)ds76dx7Um)P~u279&T>L^$V14~d9NScQ+>PPQ{6rTZ67kFM!f1nPBc zah;yL-Q+>dg!1HM`(cS040Fg<5-O)Uy=b50TFK8Fvd35Kyze&ZWaRjLKx0&2li%8Z zxeu^G?^b?#hH_*3k${5=o&^pa0BqvOV09|6J_~YhWy- zogZ+7;R)%4ku=~D87%+s8BPEX_uF%w7-y$YLxkw0Zakq3@M`m+eNf>eb3_{p8t6fX z(=jV*Du4v?&RVS#i)A5hK~%hvfrxoyz#Ob~fsa9kS=KlsqH+Y7h@SZwU3_B1PULfI zol*QXAqM(;ij4GMQe<%dlOjX*kMfUxorVpGUuMc2M|+S5&EL5xn!35OYYT7`f1C$H zi$713bN8(6J%0wq-!aSDKPdZ0I7X>AKDz2Y1+4J)Xshk$HOunJXSJ}valcbf$dL90 zw^$=`dCO?0kisiNgmmi6ebet47;``DIdT2eV}I{?R-3{Z zc?EgNncWRGHM98%@pBUC>m~^FGqF_XPB(S&nard*0(r`fd_ChV7_m&A*Zo*x-=W{Z z%s zbo!Lax$=eR*X+;3^(V!#UvNszeJf?q^FJQ!AAX z^4`z9_K~SXmer6s!J}B$X_&mM>fLeUNx#tRS)PoK0a|n@fKp;vsezR~ko- zdmq5LQ&GW-E)@p}8U}GylTWqu$YhHImHcm!3Ez($xQa`pNTu zw8H*S_De2`5!*~^NVL*S%~jE~Ctm_fL+-qGzzi#X`~G!qm4bn6c{fn;3kIARYrYWLtvG7x0FaNTAn{tpR{1;5IVqwjzaNSbt_2+IG=RtjAFKkdcy!L#Y$_g1P$Yr; z3lN8_Q90d*33Ei?d4T(f=Ub&l&mFMZ$F#&tK++cQYB~$LxWWv} z!RC&OAz|M+I#P~rq*q1I2Hs8AS%5|kuFN_0g*0EdRGuB5s==Aiu4iz0YQp1 zkzNEs4^66cA@mY@PpAQs_%6@c=iamTIp03F{O)((Ki+>J3s#=BR31+SKaUZHTtukASZu-HrWHSnHqB*Nlfu=hNphn_BK~fZcwA z?gtqE1PyctY~oac`uiH%5ZMbRu+pxadYhg6eeOnSG${pGch^N?Crr>L1DV0eml{CR!F45}6 z?}|iPiaa10?fKO_a@GxB%Qjw9V>S#KLdc=)QN*dnU<%i;o+pt_obmlvFO6e-uXu15 zR7s>KEsu-}n1|0LoARlVs=xj!pF9jT6e(3C8~Rw%Z0V0`IU)ab|&M7 zzC_Kw#1RfUFEBXNFFm$QKrGD7eFyof06{J|5rq%GLE{`6dbZRnJs=+F7`IavqjA)XrqgwCXu0A*6^qz(LoE#gb%9w zmp?p;?paJ8Z6^M#Xz$IbGP;7zxBs#s=~;DD?|sNs>Rih4ej;sOd5Mptuj~Syha#h_ zl?J!YCbt((l&-M&yYBN%1V?aGVn^&ORW!X2b3eobMxZ* z{`RQkvB`&Xq;d2?EZnzs#CoV1C}##Zr9w6FcsG3wb;AJarD$&9#jNVm{inYQK)|g3 zr<7*mFsvm(F^%oFu#Hk6wBb6Rep|jz%hiLm`&&c>`T@wna_V?Nd6ao zlZ*ZtYo7Gai#5=?PMp?Wcn@NhV+|o{_q!aI$r97EykvRR-Ut8fC^y;gD@m4*oa}_W zkw`fPPEbg{2xuOII|*^>Mu)pkp>JS!5EwwJYSux$d0L|$; zCT0l$rn*K*X;!svcOMtD zf=hrxl+YvVRbUcc7rK@}!^jM4O>_>npso>08o4age;1f@RX;qJuP5Hc9DjV>DT35d zh8N>@cdbtwnU^eGg@i51)@K=Gybm_@s*IQIb0<~ruI96+j^%RjTP-c^OjKHB6;nO~ zzW3YzssR7r0z!TRU6>r*N;U|*O%0-Sh$D-5NB5^8rni(+tZ8{!tTuWsp$$Q{%hJPl zKNj&t%%PJYkEj;=c?^(5-uNMW=ky|eM@yu6Gv#w_9#&~~w{0)r^Xi$y9&0uFMs(eV z4Sf>htwY&QDf3lx)ZVkGRpq!#qx_scV~%ewM|}Uh#H(Co=nyQY)vrt(aVV3TI(_?D ze06VL*ZxfyYih}q;mqMl`nt1oK6@`S?#^W8uu0$Q_b5j}{a5Wy7a2HvT%wqhYo(t) ztr%r}Gi$wQZe?W6e>;}YU9JDL*@}gMESqMtTV$2WRk_G}3Plx3Ia?C#XX`Yib!2Zf z#dFfC7h_FhMn3aO&=)iNwL!ERNGPx1M66|23T3jUC#D=A1$<#oTVD-DZy@f>6Voys zihkV0A#6NO+=VNpPY(lR1GJ3c<)dN`f;v*#`)-KN2X?9N5<^5;w$tyw-iumIZITf% zR(#7$v+2Ctin-Bif7be~Y&%SLZ-=IXxTlsl73DD42EowFLGD*n(%q{!Szp2ZN^z58kC?BU6m&bHW**otzU?RsAgyoTj#H>n z8C->5yyjWb*3!fRyFTvhaIx%S~mpW&4S6BvoW*qE5%)ZGA~Qae5_UlY?wck$Xc8?*mpF z&y*`{uYF!HpX6VwhI>sPsquC=30sC4^i^nu`x-%a?xxcsSlp%qJxtGdQE!{^Ngb*l zYi%kdd9b4}g87DQK?be?h)*dGLvg>{427oFN@*+68Q)Hp@W)Y=XWsiiCN8nt)RU#% zB5)3uLR)WQ)Cr-R%s47?Ob!}txpxGHosb&F{{$udg@`unG4*j%hG{22a7bWxF{)B@ zSarE58b3TPUc%dwLFbORzQH^`+1M~ki=lgY>Xf}lC0h)J35MxeM5}tevjOAlq zw2;6gc3O-v`b&W$_;8jeX#%QEW8_@=rGab1L1$&;`6b^)sS*sgrbqS-N6=MGySgb& zthplnS;+WmMD#A+=*Th}vB!Ys#J{}@K8Q2vEMXmJZ4yNnX8?kAo1#0}0#kW={Fugh z=4VME@z_FmNx@6K#co<|jsU~_x1TrElM5}g4}_#OP`u0}YhraBxonEowzP@15BVO% zU>QZ@=S1sm_?k7%H=wjvav<4ZID!7l~A>k@i#4Iw&PU2C_Mr zbcXKEr!T24-~nGd85ud6ebn{j`#WA`KS9+VNX?AOAs-q||HLMM=#_b>*s$*5d}}DR zlQq;V>ZOvR;pk3Y`Eco7N5_<-6`EueTsMdpq@o=#K)LVL!5bzmk8)J%?|p<(YP=Kq zJpARUML{*y80T|WSHP53H)RLMkqL`LfN+AR_@m5Ke1cO7s(<}c!i@fVC!39XK8M1Z zDbZm205EXuC9WS0KOFJA_Sp2u`2fgc40W(OUfF2)*LdnS<&sW;l*s$}FPa7BH@fdLY6rjYuGvuczKn=9Gb`>V`^>c*0NK<=s^g zDTFRfY|RQ_?tIO3m}RUU#)0pCb^K!CLk+**G-Sif+`z^F>&RyF&I!BA1n4NNAcl$}0x$`kL+ulGP3;LBtInZKV&40U%v*V9%36!&hT0$7 zE$Byc#tVBUwO){4cU)3hBPT|t%ZqFwm=SgZmvP$ojLJrZwv_ibdkdzs>1pYyuYYLr zGO+ljqOGN=Bsl_zg$Jm>uLEy%=iwBQ!U5hJbQcp{?C%-9NMAG@==P%>*gGQCNBTS4cO3ph!|D+jXgp)A2sNM zQ^KViT=B0&e}eo2YfA?uPd4WfVIt75xobpoZ3DN~JSDBx#>NZ`pcA!{o}WJK&+3!z z^ST8e_d^B``-oAB?M!TRmJ#kBC7k%TkSg|-BP^8(Drf2{Vu5I|lrp{BZ0VK81lfuv z_%1dBZ~`*I`K>HvW!in2DA6lQ600vXME2aB5$MHg9i@!qU~Z!kF$a+u09fmz^7O|C zdeidsYeKMuuj?(vav(2Ut)Ltwi_tf^%g^PExRr4uHkKL_`)J2N8PK?XuV>ihcvBmbc=qayZLg}gxSH_ z+Zc!7^jdtu3%ejYC!$awh14r*&usUKCS`#u$!trdo?rXp!#42KD2_5w6 z%k_L5aJ~24AIfs5Rx{a%Q+88t^Te-?%mRyKNNP^LLXxEy4l$p$odFZ}>r=3-ruM{i zX1$>Y{YtG{;6;=kB@~@hsXWJl^dzAH1Bt~nMfjob}KVo zzKpjqj@-#7IyG*-XCkbqq%BTg2EczA98$%8fk}9c+C1Al=vb$!;}`qHSuXVpPsV&x zk09)>4GtH}^IPPa({5uI=$*RUS5)C>FVK^X8PxOI%Hm+<3yKa zl_hqkbbisxxax+F%wOGR-lGD7CRpqMz$S!F92|YwNNP)yB`m6szCzS|eYJu7sQ*s* z!@d?zC!2E~Bd-eYNWz>ofL`5T1`i(GO?bR-R0d3Nu#a6VvM?6ny@CvM)Ra2lbS-3V z!9;N14nh``5W7v5OspH2Kykj4^3MHG4;qUAZ^|UVa{-ltjk!FbSXH$>XeIls+UC)X zhMkw^K(gMPJ8+i>2MdUpTCngqU&5RCqr&L^oVV?o)dV*yF|TM@n!X^55@CW@>VS_J9aYqUWZf<`U}~JhUZl^C+>PwLiyW^HjkC* zRXZdI`hA2yQHEFOLJgu3$pEYHy&*i|OrS53|KQA2@>8U$ zqFsT8Vv7tdL#*oxM7Jjpn8|*p#QG=NtRexlHQqxSU_Z4(kq@f#KTmB+I*tZU2Rau2 z(70B<6y4SQMo=c&WdN<*GVJZ9IQUVmKRH|LD3Yt;M2LPVHE||!DLn`2q3Egf7}mPw zR+I09`23QI3rju^qrpa=IqMGvcYJyfPHP)`!_0j)qQ#PMkyN9|pAwzexWFjXCT8M4 zH$Dk*s)C2?7)3Bp947=(gh<~s@4I!f{H!#Kn$OwK!6kz{kQ{5e05QuTGuE&@3ckt` zw__Y~uB+Ko9LJNBao(SrGb%K~P(6;(wx9ZvkyCCoojguSvZ+tz7|zre>xGSqtT^klg_5EBlBg?E~^7IMag`o{FM^WJlUH%Q*bC9Y53qZgE*(b z(YTfrADRxDCrk1BF8D2^h9c9jr%qFte{6k1m2Ems5$oUqzUtlAAVJg+$cijZtzItO#}fh=`OEj_b@>#I3@HEc&oiHajG*h1hR$Zn&ATV8 zv*!Ttf+&;_pX+(Jp8yRPFz^#55Uu%hqcX;wJD}8HdktkXY*6V>kUjP`t!)U3`@Fie z&xxbKeL~S)+2;rA-Cc*flLM`F7O`ksg~7^A@k+cP>4U3AEO5EP8;&-uG1G=aRSV43 z)VTN=HbNWKPtaH)SL;Y-RAj`MmhRZV*Y8gDZ=)sm)P%F%KQ>UCc~M!v;SH>?oo8(R z53rP&-p5UF%njvvDwucMB?x-D$dMT>csIi?cH zNj{ZZ*ADzwO0?`(Z|#w9BC7MEldTF-3p@!cOWVjj^Q5@H=+d72?-1~QBj-s|?YB=R zh2nUfCe0vT0X`+u6PZ7PSj>;(uf1!S_dEm{3KjXgjvkC3goJ8UHMkB%tH{#}yA+!F z+#Y_g2ufWHkv25-nQ!E5KQauY$DB*Syb$rZJ1I4uVDNH8xa*!eaTM{?J7^GGZK4JZ ze!KguEY6WyJ$XyFxAOVx%fa&fH)BAu3F~Tli#oL(r|`WspMxLEYCLx*IrcYRrT|m1 zzoE}Of);XJ-p2N`J!Zob-Rrb_R2erjb3-%mF4Eo0C2e=f(yQK9E5**l0ZW(leIP}*isRcrMu#(dZuJB{T_b-wnQ!jknJBua<>GPe zx>EhDDg%-JA!k`JdGJxG^FsHEpVC+ABqX(6>7Bi9_TU6O`~tviwZApWEw*HPC(S5# zf)Hv6)I1~xf5k5Uvo)=Kffxg)YFXwn&>cnr?KvUx`Iv`xk<3pKcWO6|B74O>t{NAY zSQ&pxR+DxTq}9@fbRTL32eJ=6XKOR`4b08^3F?(%v@&M#Rz5axR~6&hx?(%qXvXi| zAsz22&O02RB>d>~@9eIie|1v(#o+p@qZ$8ij%I(QlXd^WTn*@FH2r&XHN;=d+y1Gy z+T3r>ZL1CUIinlQ^C3r~l2ota?UI1|W*QP-Q2AQHhUBY+8AUhfOt0=BUbWl7TEb7F zBNb3x$h;^$VI=xHqpiOk=x;t-z%2GxpRLhfwrA5enb~XwzYsX#tW(B^02ff~OY3zu z1J;Gn15^x!X-Dwl81pgpiQXt_9?rLo0I*1SQW}nH$E*JXDDiLlq?O;%$C5iOc)(Ra zX;CJ76V|{*IXs;h5xV`-#PH`W)H}uNHalE47kXeei57^Mv5pT|S@YlJs_3|G_;2LZ>#Wz#d z)`}@jVhtX93cBZa&wR5STv-I1Hc9+51X}A@eXjIU%}7!#hxE@Q1VBrxjIMTCA?eqn ztuHT_Q#`b@k^{zaU@DNcICoGI7g6eHc#<)zRhEm3+));lrSq28JGY>5{T%f>;v;wP z#!pb~ao{dojl4~ZrG#7)wG25WEhlTGU!7qm>ED0ujHwHsFK^wGJo)v?Me#3P{ocE?R`;=|h+q zK$Ehb{N4JEhD}{1sP4o9?#q$TO^e;%KP^MOh}reiRHHe7+|RUV{}aRnWE(Yzp3h(Y z{YhDE?EhBwPgHz=RJ>dKMc*#^cl!1dDF9Y0e1G7ng0p8Ci?A#Meja!i{(3a z#?2P@pPdQXPHqcznAR5Y2KcGK zS|rEP#KJr-?>?`OS($lO$rq*T#hxtApP?|)=u*>x)XLi=Sfa^ciPTpTG9T~GZr-Yl zfRygrdwdQB12ded>hKGJ++?|$*Xg`=t22UfE#X!{2@kHi4X(}>tozCq7OJw!vCETw zRq5k>uOAxc18(&>jkkz)Ts+I51DxR@{NsLCHDnx13ByBjO~x>rmW#2e`QnV4;*^ni zxFbpoqmk;R{-R>4lks)(n@bT?^xE-*6(xb6-)EI<9gNKhtov@lz`@?>MfI_C_fdGB==*8~mVooQpn=h50 z0#JNYO=)gx^;*a3At%X?v`6ve-1YV9==Z-2kH-RD{fUj|xj%JM1VR4ft^dj$^gmbJ z_=Df!gupRCxd{i7Xv4GiM(UM5;K~30@Xacv!pdi^PnJdp^2jW|r`Bv@wJ}J!*G|qM zzPbS!1GGYXWM%H9Rp0PAtowxC`qjPt=<$O-A6UzstBd537gNun?yzT^q7vS2Ei-Rs z&M!*vSfLA*Y608K9HAktx9$q5>!P+YP}e5H+&1%ffb2*T6OKH)GXOsP25p-ywwoM< zg}JYl9!!1NeX+!M!%kDbx?DGCOP)E{y!ZvoMEFY|w-R^WQq=1O#_La_?|g?&Q63!~ zF(+JTm1JF{)A-P-H7x*#m*IjTLz=zi79B}@0ySMgz@?zDj*qtmh&|LeuD@(b^vBx{ z;O|*No!w5x8gIFlv>x3;#0GSA$x;l_OAG_fx`gEbeB;2%uW(KIAy7fm$iSaiqJh?z z%jTh5_E6TdUnfD~0-S_(-j3na)Oeu&!cR~YJoKOs+)SrFIc_>tJNoItQ2VXz7Mex) zg}u_uKgJvqu9l{G8!n4nBSt<|lyK{@ZGW~bdLy@-iHun2@|)8D9^D1fYpaqP$^Uk$ z(SH|@tWpNVR4M)C690DA(DjJ3Ge1DE2tNu#uO!$mn4eb>-n28rhH5?Tz7Z58z?SQ$ z;RD{j4JZ#_p+MegHG(*B^n8M9Dkqgp9ZwN%jA|S`W_r^^F+>?edguGS4)VB$CvT*D z3o@D?3j`gAfJj-tgFrN|y_-Rv2l}|+7dmGCh2^7L+`tC{iw8SJU)37MaW3TZ9h|9q ziMeve-J`&iy#%qbp~a6%QAEn*_eh7=4GkEld#N|4 zJq}BWDSHZKodxRiafjbxTSxjg`5v05T0`uQyu=Q`Zw(A}A0eB#M~H%qG`t{wPIn)< zR{C5cx#x6Fg_cO3CAzl6-&?J(fdiVa@Wph_%yhQ%1s!cp^n>b`-`HQBCzIU0=wE@kH^XRh-)2e2f}J*yv# z+Me|Pe(l*J%i*d>$25N)pop);4a6rrx@uOY>Tfb>ZdL4P5n(uI>XXJCM!40IGqE;i zfV|#YG&5d>izj`285K{FEd2!)Zk$jCA{(d*6aQvo55Br1a=Bz7<>YocuhD8WYk1BK zTgg&zc*odOw=}9?El^kwBMK{UXmXmlLlZ~zRk8QPXuP=QK)eN;D53v=)Nm|S^= z93c#OI<1)6KD&`Fr`&S#?!26?#-8Y$A09b^#x?Y;_U0@~C{95#}Ie6wxXq?0xo>yHPt(hq8gHOANG)NJgQ2z3LU$Rfw zh2AEu`L>>rtK5mQL$(j*iuyJczo0p}>YjD2SfEuWm#3@J7Ga-;<=iVtU;RAn2PA>3 zYSdZSkH*T>+S-LEqRwZK23N$mHT`y;`Kc!6giwtuvFQss)^$JzA3zj6_#3MB4+UQw zn39?*jP4X$py+$4Zt@9MR5aF#Z-7oZlx4`JudEgZBF!p?56n%5hq+BqC+$}DFGc0Z zTwVoYng<-3i!9YW35b$o>5b{svgNA7#zu2Q$=IgbmNS+U3&?pfwe8SNz7yirbupdw zbu1D|xo5d`!I^d4Lij^gSUN<{uw`1sSe1C(i8;Bnn0NhNMhool2jRo~wjduE-w5;o z=mO%lP1)~%AHDtY^?%E-=Z}N^aeM#I?W8uFa4rr263-Kt6$o=O)N?~UE ztL*;U%Jp)V72A@zW;i@P_06xuvfYJ`&Wy=6F@Uz4Bo7}qaa0(^p)<*|)T0y8kUTwP z0kH3`_B)?m_g8~%SEm8i>h93i{S3leX25r4Zd(d~?lz$XqXf&Y-l>rt-!#hQ40OXP zP{Ac`M;xDN0_D^?@Pf|(@V$_SLwAqQuAs zmatHivJ#Q8iMjY2a&74FCg6}^YCm_?UkAnSFwktlo}!^<<@lpJ51ReZhYLK6_dB&7 zuGx6vawEmXMCM3VNU(XdI66;Scw19r|JY(P64I}(#rZto_JSqpgg3aYE-*SziS=tm zuvK(mn(8qp`&r6pDIZ{@vkJzO$Z`NA(@8I&`UWhKSNoyB2L+({(8^tcdP!AqLBe|| z+t%&J(c)he9#$&n|MqeI{a)DwY5?jxV8JEKFk)z0DXQO`z(di+jC{HA6l17r& z=!*qJMf`4ykqFNd_tI{aAVT#3i^ zUm)CKZmR%p>DJr1ONb9pH=ISKKr=YhK@Ub^?_)R%2L4brH>A6@fcw&UCUyZ3?E#DC ztI|F3i&$dx4p_kXt#J8rxeb2cfiHj#+?*$Gt2rVQA|jUJ~?} z|L%>@*4J3C5dsCNz>W`e0~$I~Op3m`Fy%DxRv3}|fO-0ek?6O>fxo^4@1vNp02P)^ zOdh?Hv=AWkqVgk&@R?%AZ2+QfzHoBx#3138{&toONyoj2D9Sh>7)+M`6ISCNDD1!Q zt@?kbD=-=PB5_!WyEFOZ_;}BgrqL3Eeu<!Uj5u1u;Zce=t`RYR zKh5x+!%hJWLI%!5#~&;LlsJwe-{Y6%YH^VKWh;6Q=D$S#ZvOzHJl}k0*6EDT{tS;V znz+E9lU*_|w49;;;t9-4PBu0aADgpQ=pCqsnmZJzVtB3F|+yJ>o2i1$QxJeE=U9nn6zL3Ns) zflRLXYC>^epZ;s{k$%u$g!*AxLM$2z>vO)ZnCW(0vYmV=4xE`Zy6xdSz3obA1 zi60lM?KxkZ%3X;itCFUORtFMUjdVq*(6xESf=;Yl>nrhQ%1SmSLx~p%Q=qmUwS3ox zWalSH9h!_(z?incWt9_9(L7o*lj7AgnX^6To=7Z3!TQ4jdA&uUY`qwz_XOX1#p-P` z^s6McbeEuv%o42*Cb4p~o@j-I>8u$(Gg*i4lVI7E+~hDu5GZwc3VSA3*Hr#hLk(PI z(f(C|f^?somR7u3d`lCeX(Zx74A|2hefIj2mWl*G;S;t(7z!R_bNxMVq*l9hZ;WS# zw0*rFna>65XGfC(T$T|8Qkw_TI=R=;AA`XVP3wzq@V@8CWk);K0hi_mfkHDaqLT89 z6>aP~bqk?=Z0}(gV-)VOP<#V=Xs*2eTzSWCiU|PRR0!9i)J(t8Jr4V% zp42z#UoJZn<8zkh3(Vw|ym58dpid^#8=~7^cn9*@ZE95(J;$?Ym#*FHns?K{LKpD@ zD6vq-ssR4!PIkLphOnL?Auh)}mS<6i3_876-CU*YkqCSpb$+0Q2UK(J2(u=s6;;Xa zyS#m{ZP9b&uJ0LhdGrG>Nbeo_0}|Zk^9Fba-3w|H%B}6|XBw4CC|XKfwV`}%pi37m z<=Ujo_oNiX==M*SZC&NICA+KB+bXUfQTFsPG> zLc)<0CMFN+m(rhK36oKkA>xn5SLZ<(`_kII4E9L7`S@s!eBbc)ILm_VOoEH5k+L+% z9scFVuv;mn6=gDEY$7`O@nVS5XGF8X9Y86eni4WGazttVwd4j6`Hlxpj`h1fShJ zVjswXvGNYt@J_^S#`n0d>jgDx*G#Hz2c>M~s!z`K%mIN(*J`2eM9$e98h(=TOlFCq zht((BnEatFh@j8!o!9An-j25zYxs>#6LuC*HAU|hPz(3*gY`x&mTjAtwhx3+2a=lK zX;T^Qhoktdp1R!&AtWTRk1nYUo9!e)gKs+aLi0>s3)w~Kr9B{ntFQr0g=WmXh zi;u_Lp)_mdSU;l?$G};G*~NhnQ|K=56IU`<9>g00hd0o7JRxDvTa?$5#6p6?Qq@~_ zba}s8fl89W_dpo`zC^&Do++n-O^Bx=(X!#(Qh@#F{81A)s0DmO_RhCkr1_8}S(v5&vCRv>_ z!_(hb%X(<0J-Qb+&0_LV&UDyF6m^?@gW^J@2C-VazP+P`)SRg2o!Lix;js7H()&O3 zJEBr+jqeue`6Ok`2ax}&`PKeI)!tIpp972e41h3KaEwpy1ea=Xl)!8+sFI~`MH$?> zn7>0NE;0&e_Z02H2Lj#zrbkq2A@hjQOG1P!FY}rP<*ihhQE3dqsgx`jiMwB@<1oN#!Q^lS!O-B5=dV5F4l$Ajm-1EnzBgp=%~Jt; z3Nny46B5>JDhr>M>*R9*(a}WrH=exvcMK zcqA;969y+Ax)cb6`ah&p0ulNG-|znYW4$?$PJQ#SrW3htwRi+YL_}ieKN!LS82~9| z4j?saM1g_EBrb@XO&rP?o=*8;;o=Ks>cL}MCB`Lu<`g>YMB$v1)vXH<-C|lbQPpIt z`?vDcbfQWo4)lS>5UOkc5WxHgy$t@_)O{c2wyLZ1VDeXGTvYd7Rrh@e?UG&Jk>MTP z?2%<$BwPoRFK%Jau7NQt_sOT3-S8P|v*4Db0$lQdz%O4s7cT#YST_iUOh%Ho`~0`( z!z!1^yee(<-jJ+m25f$S%~vAO33p0go@y+_vfWhWFM8uW!?t()pjEDLbDz6YWL?tq+e)3q_tx*}wm)r<(a;H;m|)7WO8M^f1= zUpO6@Qg4vjD~`r32aVub^H}|d2}OEev8t%t9~|(SQNC&8ar@YHWG|$eaSSfNqIxqB zr7~6XhPbcezQK+xk%js6`Y}AoSF_lM_T%<>LXQH)KF7WgT~35vOllmjInJkKV@#HE zl%?WLuUbPx#MQA79Bra5uhP(4$a7=XF5;Ko<1rt0b+xdIE?)R57tRo8s}a8TH)C6! zl0{n;K7PjOl+ms;SEMjV;)uDA*ALCs%g&Ez}K>DhoL;7Cz@gi$=KV$w+c2hn2SERpx zwW-;-CsUY+v5oK#$P;@TT%C~F;sy<=AMf{CFp;t$Kka%Js6y`a9w1 zYtL=;K75%iFSj9`J}=jG++5<2x*@x75SRvD=v(aW%PXC=_5R|7ZYm>*f|d8Rcaj7u z9K-U80hK=udguMUApDKHY!a3=l75Eds8WDEA9Z4M#xS?}6Euo%J8o|jp`-~f+qQ3C=V`I*>$c$JgW8WOsW@K*@|`;s6`%3sa|xQZLUa)s^5M` zkRx}(Z<<6%Bt7JnE$X7P$P^Q!D}0Ub^&TZ&MIP>|rPG#g3U<5C&DO-G5~_+78TQs> z_2iwcogswJBtXvMAqVhuZ=U=((9zaWu&8S+AKFL-bV~xmmtg~b8gv|RUp_Q8XRF&TvSsF4H=Y0BOzYq!p zE#}t%3BS=`v|Y z27ASf#`1Ojz$fRIVpK{qxk@HI7^S9q(Np^pwnS2v1DGlxvF#w-^L9pAMvAEOI$r8+ zE6z5uXn|gY!-d#)*?pvph}dXlY6}VcXs>901?vTY8>Xtc#@>q$e2k05>W%v2O1jzj zqnn>_6EjBp7T+3GrpZa1Ll5i{YepJ|`Stkp(M>(wqtfa$ zM5%$m^LpUsB_*g}8m;G}cM4GhRNfKvU);AHAiaKlH?_m!&=qoQ?(eMMTir8Ejqx3k z<@D!4%Cg%L7=P>v_gz_S_k99*uzV3xx0YQ9Ie8Oep`^^bByf&`L+U&9c0Mhs@;OkXA2~BK2Fk-tJvJQ<}?y&KI)DW(pj|nh`evWdn@F zA)Tjg=yv6xlUD#t!&cUAFZt284*^^6M5C@fL&9|ow{!hsx2&BkE!zRWWmQZH`bUqr zuz#S}H@TK#I5q~JXEZmS2h5(Mfgk^=K0W_z|7(BJQIYEc&<6R>kI<04FcmIMyl_N* z?bUdz!c@ulK$nEh_%CZ#f2sExz`E3R$MoIUy;x!Ua?2%#;4PU#fRJ~|qHxbv8WGK` ze9}HsTOF}CtHK!#SO#!mYPz0yvmo!xk>I!{oyVbH8RSRNBTP=PJF=>KmeW-Ae<@Ph&(^S7>+5V4;D`*z~deN9uj7`)8V$v+O*e zRktH1C-j4w+X7KqkBC@SC1{Gd+oo4^zi#92>m?z27Ttb`kP~-WP1;irjblxf^^%2a z99?DmxTQDOjl;2_I0;&STB_d*c1~wHnb6Q@+94wk`G1j)(Z2 zWKd;OrO$0Kl85pNtNr7K-UFnmp4%pSg_WzhxT?7U^T)`luoYhsvW$e{_4I!o*hlwS9(U+?&cEYRfv zc%++KiO6S|k7J=KXWT=@1}^FEA-eE_S2gpg$YO7?mLu8gguD>Dr9w$Z@2v1&HKGHzR~^kLV24(#P%FBkI=E7QQf|)K2$o9$AHM z#&5uC<2cJW9LCc;sn~Ok`-E72-3%O&(F-g~D~e(Ksh!_#rm2^tW9OI>roA2ESTD6F zC^<(~sUJ_6-?_z%GViUfo?azb`XhAJ{^n`^$G$@sdI(~-&9z#DG7epU(1ZEG*f1Af zrO4!9m%&>TOzRzJdMUmu&GRar<>e_1<3p0@cdV(wz01IBimE8wQM>pg-I+L`?EETO@PVAZiSC8)-7CA*v4~FZx zMfcloyp0hdDad{WYNq7y|B>6rd3O~~+4Bny&G`hl*!}VA{LgOxH`_~<-i4!&;PW4S zDrdyxKN=1@s__Sz&OYF{pSob|z+Z?b%!AzJJa6n!;r`KbUEW*qdp%x}X~8d|W%chAgktH~?}In{rawGeva zA|_RDE#vcz{n!7xX69$q!1v8FJZ6&j!urp(;}V-Y1SM7}*Y$LMJEwa`t^_YEG?aecXe=3j}Qw*e4Aa_aexOI+s0-*k-s{-7q2-yK@+@99i zlHPmmi%{E0f)6KtkLyg@a=#nA8~a#Cjsl-9aI%zf+?BnBfex_$1T`tDDuR@cyb-H$ z&^cDvSD>+sbUfjNlH*?v%RNs-bK!jAUpvSAv5xm&-TogfF8)_f>c9KGe|1sdpA-M@ K`TrNs|Nj9QjJ>4* literal 0 HcmV?d00001