From 9bfea90f0bc1aa5f5a6403f196c643049eaa00b5 Mon Sep 17 00:00:00 2001 From: qyx <565485304@qq.com> Date: Mon, 14 Feb 2022 14:58:28 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=96=B0=E5=A2=9E=E5=8A=9F=E8=83=BD](master):?= =?UTF-8?q?=20=E5=86=85=E5=AE=B9=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. JPA相关的内容提交 2. 接口规范相关的内容声明 --- README.md | 67 +++++++++++- dev-protocol-common/README.md | 98 +++++++++++++++++- jpa/dev-protocol-jpa-auditing1/pom.xml | 58 +++++++++++ .../DevProtocolJpaAuditingApplication.java | 56 ++++++++++ .../com/baiye/config/JpaConfiguration.java | 22 ++++ .../java/com/baiye/config/MyAuditorAware.java | 29 ++++++ .../java/com/baiye/entity/AuditingBase.java | 53 ++++++++++ .../src/main/java/com/baiye/entity/User.java | 35 +++++++ .../src/main/resources/application-dev.yml | 7 ++ .../src/main/resources/application.yml | 10 ++ .../main/resources/config/application-jpa.yml | 28 +++++ jpa/dev-protocol-jpa-auditing2/pom.xml | 58 +++++++++++ .../DevProtocolJpaAuditing2Application.java | 56 ++++++++++ .../src/main/java/com/baiye/entity/User.java | 78 ++++++++++++++ .../src/main/resources/application-dev.yml | 7 ++ .../src/main/resources/application.yml | 10 ++ .../main/resources/config/application-jpa.yml | 28 +++++ jpa/dev-protocol-jpa-auditing3/pom.xml | 58 +++++++++++ .../java/com/baiye/entity/BaseEntity.java | 41 ++++++++ .../src/main/java/com/baiye/entity/User.java | 27 +++++ jpa/dev-protocol-jpa-entity-callback/pom.xml | 20 ++++ ...vProtocolJpaEntityCallbackApplication.java | 4 + jpa/dev-protocol-jpa-shard1/pom.xml | 53 ++++++++++ .../DevProtocolJpaShard1Application.java | 38 +++++++ .../configuration/DataSource1Config.java | 95 +++++++++++++++++ .../configuration/DataSource2Config.java | 93 +++++++++++++++++ .../com/baiye/controller/OrderController.java | 35 +++++++ .../main/java/com/baiye/dao/db1/Order.java | 42 ++++++++ .../com/baiye/dao/db1/OrderRepository.java | 14 +++ .../src/main/java/com/baiye/dao/db2/Sku.java | 42 ++++++++ .../java/com/baiye/dao/db2/SkuRepository.java | 14 +++ .../src/main/resources/application-dev.yml | 7 ++ .../src/main/resources/application.yml | 10 ++ .../main/resources/config/application-jpa.yml | 28 +++++ jpa/dev-protocol-jpa-shard2/pom.xml | 52 ++++++++++ .../DevProtocolJpaShard2Application.java | 56 ++++++++++ .../configuration/DataSource1Config.java | 95 +++++++++++++++++ .../configuration/DataSource2Config.java | 93 +++++++++++++++++ .../DataSourceRoutingHolder.java | 23 ++++ .../configuration/RoutingDataSource.java | 24 +++++ .../RoutingDataSourceConfig.java | 89 ++++++++++++++++ .../configuration/RoutingDataSourceEnum.java | 22 ++++ .../main/java/com/baiye/dao/db1/Order.java | 42 ++++++++ .../com/baiye/dao/db1/OrderRepository.java | 14 +++ .../src/main/java/com/baiye/dao/db2/Sku.java | 42 ++++++++ .../java/com/baiye/dao/db2/SkuRepository.java | 14 +++ .../com/baiye/web/DataSourceInterceptor.java | 39 +++++++ .../src/main/resources/application-dev.yml | 7 ++ .../src/main/resources/application.yml | 12 +++ .../main/resources/config/application-jpa.yml | 28 +++++ jpa/pic/回调事件注册表.png | Bin 0 -> 188743 bytes pom.xml | 6 ++ 52 files changed, 1977 insertions(+), 2 deletions(-) create mode 100644 jpa/dev-protocol-jpa-auditing1/pom.xml create mode 100644 jpa/dev-protocol-jpa-auditing1/src/main/java/com/baiye/DevProtocolJpaAuditingApplication.java create mode 100644 jpa/dev-protocol-jpa-auditing1/src/main/java/com/baiye/config/JpaConfiguration.java create mode 100644 jpa/dev-protocol-jpa-auditing1/src/main/java/com/baiye/config/MyAuditorAware.java create mode 100644 jpa/dev-protocol-jpa-auditing1/src/main/java/com/baiye/entity/AuditingBase.java create mode 100644 jpa/dev-protocol-jpa-auditing1/src/main/java/com/baiye/entity/User.java create mode 100644 jpa/dev-protocol-jpa-auditing1/src/main/resources/application-dev.yml create mode 100644 jpa/dev-protocol-jpa-auditing1/src/main/resources/application.yml create mode 100644 jpa/dev-protocol-jpa-auditing1/src/main/resources/config/application-jpa.yml create mode 100644 jpa/dev-protocol-jpa-auditing2/pom.xml create mode 100644 jpa/dev-protocol-jpa-auditing2/src/main/java/com/baiye/DevProtocolJpaAuditing2Application.java create mode 100644 jpa/dev-protocol-jpa-auditing2/src/main/java/com/baiye/entity/User.java create mode 100644 jpa/dev-protocol-jpa-auditing2/src/main/resources/application-dev.yml create mode 100644 jpa/dev-protocol-jpa-auditing2/src/main/resources/application.yml create mode 100644 jpa/dev-protocol-jpa-auditing2/src/main/resources/config/application-jpa.yml create mode 100644 jpa/dev-protocol-jpa-auditing3/pom.xml create mode 100644 jpa/dev-protocol-jpa-auditing3/src/main/java/com/baiye/entity/BaseEntity.java create mode 100644 jpa/dev-protocol-jpa-auditing3/src/main/java/com/baiye/entity/User.java create mode 100644 jpa/dev-protocol-jpa-entity-callback/pom.xml create mode 100644 jpa/dev-protocol-jpa-entity-callback/src/main/java/com/baiye/DevProtocolJpaEntityCallbackApplication.java create mode 100644 jpa/dev-protocol-jpa-shard1/pom.xml create mode 100644 jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/DevProtocolJpaShard1Application.java create mode 100644 jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/configuration/DataSource1Config.java create mode 100644 jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/configuration/DataSource2Config.java create mode 100644 jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/controller/OrderController.java create mode 100644 jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/dao/db1/Order.java create mode 100644 jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/dao/db1/OrderRepository.java create mode 100644 jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/dao/db2/Sku.java create mode 100644 jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/dao/db2/SkuRepository.java create mode 100644 jpa/dev-protocol-jpa-shard1/src/main/resources/application-dev.yml create mode 100644 jpa/dev-protocol-jpa-shard1/src/main/resources/application.yml create mode 100644 jpa/dev-protocol-jpa-shard1/src/main/resources/config/application-jpa.yml create mode 100644 jpa/dev-protocol-jpa-shard2/pom.xml create mode 100644 jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/DevProtocolJpaShard2Application.java create mode 100644 jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/configuration/DataSource1Config.java create mode 100644 jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/configuration/DataSource2Config.java create mode 100644 jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/configuration/DataSourceRoutingHolder.java create mode 100644 jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/configuration/RoutingDataSource.java create mode 100644 jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/configuration/RoutingDataSourceConfig.java create mode 100644 jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/configuration/RoutingDataSourceEnum.java create mode 100644 jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/dao/db1/Order.java create mode 100644 jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/dao/db1/OrderRepository.java create mode 100644 jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/dao/db2/Sku.java create mode 100644 jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/dao/db2/SkuRepository.java create mode 100644 jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/web/DataSourceInterceptor.java create mode 100644 jpa/dev-protocol-jpa-shard2/src/main/resources/application-dev.yml create mode 100644 jpa/dev-protocol-jpa-shard2/src/main/resources/application.yml create mode 100644 jpa/dev-protocol-jpa-shard2/src/main/resources/config/application-jpa.yml create mode 100644 jpa/pic/回调事件注册表.png diff --git a/README.md b/README.md index eedc83f..840d5eb 100644 --- a/README.md +++ b/README.md @@ -103,4 +103,69 @@ ## TODO-List 1. 使用 切面+注解 的方式对同一类的请求带上相对应的验证信息 2. 注意在调用请求的时候要对内部鉴权方式和外部鉴权方式进行区分,然后知道在使用JWT方案的时候要进行JWT防止伪造鉴定 - 3. Nginx相关的配置 \ No newline at end of file + 3. Nginx相关的配置 + + +## JPA审计 + +### 建议使用源码 + +dev-protocol-jpaauditing1 (自定义审计) +dev-protocol-jpaauditing2 (内部代码实现方式) +dev-protocol-jpaauditing3 (正式环境使用) + +### 原理分析 + 1. 从 @EnableJpaAuditing 入手分析 + 1. package org.springframework.data.jpa.repository.config; + 2. @Import(JpaAuditingRegistrar.class) + --- + Auditing 这套封装是 Spring Data JPA 实现的,而不是 Java Persistence API 规定的 + 注解里面还有一项重要功能就是 @Import(JpaAuditingRegistrar.class) 这个类,它帮我们处理 Auditing 的逻辑。 + +--- + 步入 org.springframework.data.jpa.repository.config.JpaAuditingRegistrar.registerBeanDefinitions 方法 + 1. super.registerBeanDefinitions(annotationMetadata, registry); + 2. registerInfrastructureBeanWithId(...); +--- + 2. 打开 AuditingEntityListener 的源码 + 1. AuditingEntityListener 的实现还是比较简单的,利用了 Java Persistence API 里面的@PrePersist、@PreUpdate 回调函数, + 在更新和创建之前通过AuditingHandler 添加了用户信息和时间信息 + +### 原理分析结论 + 1. 查看 Auditing 的实现源码,其实给我们提供了一个思路,就是怎么利用 @PrePersist、@PreUpdate 等回调函数和 + @EntityListeners 定义自己的框架代码。这是值得我们学习和参考的,比如说 Auditing 的操作日志场景等。 + 2. 想成功配置 Auditing 功能,必须将 @EnableJpaAuditing 和 @EntityListeners(AuditingEntityListener.class) 一起使用才有效。 + 3. 我们是不是可以不通过 Spring data JPA 给我们提供的 Auditing 功能,而是直接使用 @PrePersist、@PreUpdate 回调函数注解在实体上, + 也可以达到同样的效果呢?答案是肯定的,因为回调函数是实现的本质。 + +### 整理 + 使用相对应的注解去注册进Spring容器 + 使用注册的回调函数进行注解化设置 + +## 正确使用 @Entity 里面的回调方法 + +### 概念掌握 + Java Persistence API 里面规定的回调方法有哪些? + 回调事件注解表 +![avatar](jpa/pic/回调事件注册表.png) +- 注意事项 + - 回调函数都是和 EntityManager.flush 或 EntityManager.commit 在同一个线程里面执行的,只不过调用方法有先后之分, + 都是同步调用,所以当任何一个回调方法里面发生异常,都会触发事务进行回滚,而不会触发事务提交。 + - Callbacks 注解可以放在实体里面,可以放在 super-class 里面,也可以定义在 entity 的 listener 里面,但需要注意的是: + 放在实体(或者 super-class)里面的方法,签名格式为“void ()”,即没有参数,方法里面操作的是 this 对象自己; + 放在实体的 EntityListener 里面的方法签名格式为“void (Object)”,也就是方法可以有参数,参数是代表用来接收回调方法的实体。 + - Callbacks 注解可以放在实体里面,可以放在 super-class 里面,也可以定义在 entity 的 listener 里面, + 但需要注意的是:放在实体(或者 super-class)里面的方法,签名格式为“void ()”,即没有参数,方法里面操作的是 this 对象自己; + 放在实体的 EntityListener 里面的方法签名格式为“void (Object)”,也就是方法可以有参数,参数是代表用来接收回调方法的实体。 +- JPA Callbacks 的使用方法 + - 修改 BaseEntity,在里面新增回调函数和注解 + +### 使用总结 + 在实体中定义一些通用逻辑, 然后在对应 Listener中进行调用时机指定 (参数的合理化和健壮性检测) + JPA Callbacks 的实现原理,事件机制 + +### JPA Callbacks 的最佳实践 + + + + diff --git a/dev-protocol-common/README.md b/dev-protocol-common/README.md index f90744e..241df1f 100644 --- a/dev-protocol-common/README.md +++ b/dev-protocol-common/README.md @@ -8,4 +8,100 @@ arthas idea Arthas是阿里开源的一款强大的java在线诊断工具,使用起来非常方便,进入代码片段,选择你要诊断的类或者方法上面,右击打开Arthas命令,选择一项,即可自动生成命令,省去你敲打命令的时间。 Search In Repository 直接把中央仓库的查找集成到了Idea里面。你只需要打开这款插件,输入jar包的名字或者gav关键字,就能查到到这个jar包所有的版本,然后可以直接复制gav坐标。 VisualGC Idea堆栈的可视化工具,和Idea深度集成。直接显示所有进程,双击即可打开JVM的堆栈可视化界面。堆栈和垃圾收集情况一目了然! - Zoolytic idea里面直接可以看zookeeper的节点信息 \ No newline at end of file + Zoolytic idea里面直接可以看zookeeper的节点信息 + +## 接口设计规范 + +- 对URL使用kebab-case(短横线小写隔开形式) +> 如果你想要获得订单列表。
+> 错误:/systemOrders或/system_orders
+> 正确:/system-orders +- 参数使用camelCase(驼峰形式) +> 如果想从一个特定的商店购买产品
+> 错误:/system-orders/{order_id} 或者 /system-orders/{OrderId}
+> 正确:/system-orders/{orderId} +- 指向集合的复数名称 +> 如果你想获得系统的所有用户。
+> 错误:GET /user 或者 GET /User
+> 正确:GET /users +- URL以集合开始,以标识符结束(REST接口专用) +> 如果要保持概念的单一性和一致性。
+> 错误:GET /shops/:shopId/category/:categoryId/price
+> 正确:GET /shops/:shopId/或GET /category/:categoryId +- 让动词远离你的资源URL(REST接口专用) +> 不要在URL中使用动词来表达你的意图。相反,使用适当的HTTP方法来描述操作。
+> 错误:POST /updateuser/{userId} 或 GET /getusers
+> 正确 PUT /user/{userId} +- 对非资源URL使用动词 +> 如果你有一个端点,它只返回一个操作。在这种情况下,你可以使用动词。例如,如果你想要向用户重新发送警报。
+> POST /alarm/245743/resend
+> 这些不是我们的CRUD操作。相反,它们被认为是在我们的系统中执行特定工作的函数。 +- JSON属性使用camelCase驼峰形式 +> 如果你正在构建一个请求体或响应体为JSON的系统,那么属性名应该使用驼峰大小写。
+> 错误:{ user_name: "Mohammad Faisal", user_id: "1"}
+> 正确:{ userName: "Mohammad Faisal", userId: "1"} +- 监控 +> RESTful HTTP服务必须实现/health和/version和/metricsAPI端点。他们将提供以下信息。
+> /health: 用200 OK状态码响应对/health的请求。
+> /version: 用版本号响应对/version的请求。
+> /metrics: 这个端点将提供各种指标,如平均响应时间。
+> 也强烈推荐使用/debug和/status端点。 +- 不要使用table_name作为资源名(不是特别建议) +> 不要只使用表名作为资源名。从长远来看,这种懒惰是有害的。
+> 错误:product_order
+> 正确:product-orders
+- 使用简单序数作为版本 +> 始终对API使用版本控制,并将其向左移动,使其具有最大的作用域。版本号应该是v1,v2等等。
+> 应该:http://api.domain.com/v1/shops/3/products
+> 始终在API中使用版本控制,因为如果API被外部实体使用,更改端点可能会破坏它们的功能。
+- 在你的响应体中包括总资源数 +> 如果API返回一个对象列表,则响应中总是包含资源的总数。你可以为此使用total属性。
+> 错误:{ users: [...]}
+> 正确:{ users: [...], total: 34 }
+- 接受limit和offset参数(在定义业务接口中用到,且一定要进行校验) +> 在GET操作中始终接受limit和offset参数。
+> 正确:GET /shops?offset=5&limit=5
+> 这是因为它对于前端的分页是必要的。
+- 获取字段查询参数(用于对外暴露的查询接口,严格限制数据权限) +> 返回的数据量也应该考虑在内。添加一个fields参数,只公开API中必需的字段。
+> 只返回商店的名称,地址和联系方式。
+> GET /shops?fields=id,name,address,contact
+> 在某些情况下,它还有助于减少响应大小。
+- 不要在URL中通过认证令牌 +> 这是一种非常糟糕的做法,因为url经常被记录,而身份验证令牌也会被不必要地记录。
+> 错误:GET /shops/123?token=some_kind_of_authenticaiton_token
+> 正确:通过头部传递它们 - Authorization: Bearer xxxxxx, Extra yyyyy
+> 此外,授权令牌应该是短暂有效期的。
+- 验证内容类型 +> 服务器不应该假定内容类型。例如,如果你接受application/x-www-form-urlencoded,那么攻击者可以创建一个表单并触发一个简单的POST请求。
+> 因此,始终验证内容类型,如果你想使用默认的内容类型,请使用:content-type: application/json
+- 对CRUD函数使用HTTP方法(REST) +> HTTP方法用于解释CRUD功能。
+> GET:检索资源的表示形式。
+> POST:创建新的资源和子资源。
+> PUT:更新现有资源。
+> PATCH:更新现有资源,它只更新提供的字段,而不更新其他字段。
+> DELETE:删除已存在的资源。
+- 在嵌套资源的URL中使用关系 +> GET /shops/2/products:从shop 2获取所有产品的列表。
+> GET /shops/2/products/31:获取产品31的详细信息,产品31属于shop 2。
+> DELETE /shops/2/products/31:应该删除产品31,它属于商店2。
+> PUT /shops/2/products/31:应该更新产品31的信息,只在resource-URL上使用PUT,而不是集合。
+> POST /shops:应该创建一个新的商店,并返回创建的新商店的详细信息。在集合url上使用POST。
+- CORS(跨源资源共享) +> 一定要为所有面向公共的API支持CORS(跨源资源共享)头部。
+> 考虑支持CORS允许的“*”来源,并通过有效的OAuth令牌强制授权。
+> 避免将用户凭证与原始验证相结合。
+- 安全 +> 在所有端点、资源和服务上实施HTTPS(tls加密)。
+> 强制并要求所有回调url、推送通知端点和webhooks使用HTTPS。
+- 错误 +> 当客户端向服务发出无效或不正确的请求,或向服务传递无效或不正确的数据,而服务拒绝该请求时,就会出现错误,或者更具体地说,出现服务错误。
+> 包括无效的身份验证凭证、不正确的参数、未知的版本id等。
+> 当由于一个或多个服务错误而拒绝客户端请求时,一定要返回4xx HTTP错误代码。
+> 考虑处理所有属性,然后在单个响应中返回多个验证问题。
+- 黄金法则 +> 扁平比嵌套好。 +> 简单胜于复杂。 +> 字符串比数字好。 +> 一致性比定制更好。 \ No newline at end of file diff --git a/jpa/dev-protocol-jpa-auditing1/pom.xml b/jpa/dev-protocol-jpa-auditing1/pom.xml new file mode 100644 index 0000000..294e1fb --- /dev/null +++ b/jpa/dev-protocol-jpa-auditing1/pom.xml @@ -0,0 +1,58 @@ + + + + dev-protocol + org.example + 1.0-SNAPSHOT + ../../pom.xml + + 4.0.0 + + dev-protocol-jpaauditing + + + 8 + 8 + + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + mysql + mysql-connector-java + runtime + + + + com.h2database + h2 + + + + org.projectlombok + lombok + provided + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + \ No newline at end of file diff --git a/jpa/dev-protocol-jpa-auditing1/src/main/java/com/baiye/DevProtocolJpaAuditingApplication.java b/jpa/dev-protocol-jpa-auditing1/src/main/java/com/baiye/DevProtocolJpaAuditingApplication.java new file mode 100644 index 0000000..76c7639 --- /dev/null +++ b/jpa/dev-protocol-jpa-auditing1/src/main/java/com/baiye/DevProtocolJpaAuditingApplication.java @@ -0,0 +1,56 @@ +package com.baiye; + +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.context.ConfigurableApplicationContext; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * 开发协议jpa应用程序审计 + * + * @author q + * @date 2021/11/30 + */ +@SpringBootApplication +public class DevProtocolJpaAuditingApplication { + public static void main(String[] args) { + // todo 这里先拿到上下文一会检查下配置 + ConfigurableApplicationContext context = new SpringApplicationBuilder(DevProtocolJpaAuditingApplication.class) + .run(args); + + List beanNames = new ArrayList<>(Arrays.asList("db1DataSource", "db2DataSource")); + // 检查Beans加载 + checkBeansWithName(context, beanNames); + } + + + /** + * 检查指定Bean的注册 + * + * @param context + */ + private static void checkBeansWithName(ConfigurableApplicationContext context, List beanNames){ + + Iterator beanNamesIterator = context.getBeanFactory().getBeanNamesIterator(); + + AtomicInteger i = new AtomicInteger(); + while (beanNamesIterator.hasNext()) { + String next = beanNamesIterator.next(); + + beanNames.forEach( + one->{ + if (!next.equalsIgnoreCase(one)) { + return; + } + System.out.println("bean number is : " + (i.getAndIncrement()) + ", name is : " + next); + } + ); + + } + } +} diff --git a/jpa/dev-protocol-jpa-auditing1/src/main/java/com/baiye/config/JpaConfiguration.java b/jpa/dev-protocol-jpa-auditing1/src/main/java/com/baiye/config/JpaConfiguration.java new file mode 100644 index 0000000..14e3cab --- /dev/null +++ b/jpa/dev-protocol-jpa-auditing1/src/main/java/com/baiye/config/JpaConfiguration.java @@ -0,0 +1,22 @@ +package com.baiye.config; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; + +/** + * jpa配置 + * + * @author q + * @date 2021/11/30 + */ +@Configuration +@EnableJpaAuditing +public class JpaConfiguration { + @Bean + @ConditionalOnMissingBean(name = "myAuditorAware") + MyAuditorAware myAuditorAware() { + return new MyAuditorAware(); + } +} diff --git a/jpa/dev-protocol-jpa-auditing1/src/main/java/com/baiye/config/MyAuditorAware.java b/jpa/dev-protocol-jpa-auditing1/src/main/java/com/baiye/config/MyAuditorAware.java new file mode 100644 index 0000000..8e58eff --- /dev/null +++ b/jpa/dev-protocol-jpa-auditing1/src/main/java/com/baiye/config/MyAuditorAware.java @@ -0,0 +1,29 @@ +package com.baiye.config; + +import org.springframework.data.domain.AuditorAware; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import java.util.Optional; + +/** + * 审计 + * + * @author q + * @date 2021/11/30 + */ +public class MyAuditorAware implements AuditorAware { + /** + * 需要实现AuditorAware接口,返回当前的用户ID + * + * @return {@link Optional}<{@link Integer}> + */ + @Override + public Optional getCurrentAuditor() { + ServletRequestAttributes servletRequestAttributes = + (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + assert servletRequestAttributes != null; + Integer userId = (Integer) servletRequestAttributes.getRequest().getSession().getAttribute("userId"); + return Optional.ofNullable(userId); + } +} diff --git a/jpa/dev-protocol-jpa-auditing1/src/main/java/com/baiye/entity/AuditingBase.java b/jpa/dev-protocol-jpa-auditing1/src/main/java/com/baiye/entity/AuditingBase.java new file mode 100644 index 0000000..f2dc374 --- /dev/null +++ b/jpa/dev-protocol-jpa-auditing1/src/main/java/com/baiye/entity/AuditingBase.java @@ -0,0 +1,53 @@ +package com.baiye.entity; + +import lombok.*; +import org.springframework.data.annotation.CreatedBy; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedBy; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.EntityListeners; +import java.util.Date; + +/** + * 审计基础类 + * + * @author q + * @date 2021/11/30 + */ +@Getter +@Setter +@RequiredArgsConstructor +@Builder +@AllArgsConstructor +@NoArgsConstructor +@EntityListeners(AuditingEntityListener.class) +public class AuditingBase { + + /** + * 创建用户id + */ + @CreatedBy + private Integer createUserId; + + + /** + * 创建时间 + */ + @CreatedDate + private Date createTime; + + /** + * 最后修改的用户id + */ + @LastModifiedBy + private Integer lastModifiedUserId; + + + /** + * 最后修改时间 + */ + @LastModifiedDate + private Date lastModifiedTime; +} diff --git a/jpa/dev-protocol-jpa-auditing1/src/main/java/com/baiye/entity/User.java b/jpa/dev-protocol-jpa-auditing1/src/main/java/com/baiye/entity/User.java new file mode 100644 index 0000000..9eb73f9 --- /dev/null +++ b/jpa/dev-protocol-jpa-auditing1/src/main/java/com/baiye/entity/User.java @@ -0,0 +1,35 @@ +package com.baiye.entity; + +import lombok.*; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.*; +import java.io.Serializable; + +/** + * 用户 + * + * @author q + * @date 2021/11/30 + */ +@Entity +@Getter +@Setter +@RequiredArgsConstructor +@Builder +@AllArgsConstructor +@NoArgsConstructor +@ToString() +public class User extends AuditingBase implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + private String name; + private String email; + private Integer age; + private Boolean deleted; + + + +} diff --git a/jpa/dev-protocol-jpa-auditing1/src/main/resources/application-dev.yml b/jpa/dev-protocol-jpa-auditing1/src/main/resources/application-dev.yml new file mode 100644 index 0000000..d917e92 --- /dev/null +++ b/jpa/dev-protocol-jpa-auditing1/src/main/resources/application-dev.yml @@ -0,0 +1,7 @@ +# 加载不同的配置文件,进行配置文件分离 +spring: + profiles: + include: + - jpa +# - shardingSphere +# - dynamicDatasource diff --git a/jpa/dev-protocol-jpa-auditing1/src/main/resources/application.yml b/jpa/dev-protocol-jpa-auditing1/src/main/resources/application.yml new file mode 100644 index 0000000..dd66f39 --- /dev/null +++ b/jpa/dev-protocol-jpa-auditing1/src/main/resources/application.yml @@ -0,0 +1,10 @@ +# 基本配置 +server: + port: 8900 + +spring: + application: + name: dev-protocol-jpaauditing1 +# 加载不同环境 + profiles: + active: dev \ No newline at end of file diff --git a/jpa/dev-protocol-jpa-auditing1/src/main/resources/config/application-jpa.yml b/jpa/dev-protocol-jpa-auditing1/src/main/resources/config/application-jpa.yml new file mode 100644 index 0000000..d81a3a6 --- /dev/null +++ b/jpa/dev-protocol-jpa-auditing1/src/main/resources/config/application-jpa.yml @@ -0,0 +1,28 @@ +spring: + ###########datasource1 采用Mysql数据库 + datasource1: + url: jdbc:mysql://localhost:3306/test2?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false&rewriteBatchedStatements=true + username: root + password: root + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + hikari: + ##数据源1的连接池的名字 + db1: + pool-name: jpa-hikari-pool-db1 + ## 最长生命周期15分钟 + maxLifetime: 900000 + maximumPoolSize: 8 + ###########datasource2 采用h2内存数据库 + datasource2: + url: jdbc:h2:~/test + username: sa + password: sa + datasource: + driver-class-name: org.h2.Driver + hikari: + ##数据源2的连接池的名字 + db2: + pool-name: jpa-hikari-pool-db2 + maxLifetime: 500000 + maximumPoolSize: 6 \ No newline at end of file diff --git a/jpa/dev-protocol-jpa-auditing2/pom.xml b/jpa/dev-protocol-jpa-auditing2/pom.xml new file mode 100644 index 0000000..83621e3 --- /dev/null +++ b/jpa/dev-protocol-jpa-auditing2/pom.xml @@ -0,0 +1,58 @@ + + + + dev-protocol + org.example + 1.0-SNAPSHOT + ../../pom.xml + + 4.0.0 + + dev-protocol-jpaauditing2 + + + 8 + 8 + + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + mysql + mysql-connector-java + runtime + + + + com.h2database + h2 + + + + org.projectlombok + lombok + provided + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + \ No newline at end of file diff --git a/jpa/dev-protocol-jpa-auditing2/src/main/java/com/baiye/DevProtocolJpaAuditing2Application.java b/jpa/dev-protocol-jpa-auditing2/src/main/java/com/baiye/DevProtocolJpaAuditing2Application.java new file mode 100644 index 0000000..70b0d58 --- /dev/null +++ b/jpa/dev-protocol-jpa-auditing2/src/main/java/com/baiye/DevProtocolJpaAuditing2Application.java @@ -0,0 +1,56 @@ +package com.baiye; + +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.context.ConfigurableApplicationContext; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * 开发协议jpa应用程序审计 + * + * @author q + * @date 2021/11/30 + */ +@SpringBootApplication +public class DevProtocolJpaAuditing2Application { + public static void main(String[] args) { + // todo 这里先拿到上下文一会检查下配置 + ConfigurableApplicationContext context = new SpringApplicationBuilder(DevProtocolJpaAuditing2Application.class) + .run(args); + + List beanNames = new ArrayList<>(Arrays.asList("db1DataSource", "db2DataSource")); + // 检查Beans加载 + checkBeansWithName(context, beanNames); + } + + + /** + * 检查指定Bean的注册 + * + * @param context + */ + private static void checkBeansWithName(ConfigurableApplicationContext context, List beanNames){ + + Iterator beanNamesIterator = context.getBeanFactory().getBeanNamesIterator(); + + AtomicInteger i = new AtomicInteger(); + while (beanNamesIterator.hasNext()) { + String next = beanNamesIterator.next(); + + beanNames.forEach( + one->{ + if (!next.equalsIgnoreCase(one)) { + return; + } + System.out.println("bean number is : " + (i.getAndIncrement()) + ", name is : " + next); + } + ); + + } + } +} diff --git a/jpa/dev-protocol-jpa-auditing2/src/main/java/com/baiye/entity/User.java b/jpa/dev-protocol-jpa-auditing2/src/main/java/com/baiye/entity/User.java new file mode 100644 index 0000000..e0b0434 --- /dev/null +++ b/jpa/dev-protocol-jpa-auditing2/src/main/java/com/baiye/entity/User.java @@ -0,0 +1,78 @@ +package com.baiye.entity; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.*; +import org.hibernate.Hibernate; +import org.springframework.data.domain.Auditable; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.*; +import java.io.Serializable; +import java.time.Instant; +import java.util.Objects; +import java.util.Optional; + +/** + * 用户 + * + * @author q + * @date 2021/11/30 + */ +@Entity +@Getter +@Setter +@RequiredArgsConstructor +@Builder +@AllArgsConstructor +@NoArgsConstructor +@EntityListeners(AuditingEntityListener.class) +public class User implements Serializable, Auditable { + + @Id + @GeneratedValue(strategy= GenerationType.AUTO) + private Long id; + private String name; + private String email; + private Integer age; + private Integer createUserId; + private Instant createTime; + private Integer lastModifiedUserId; + private Instant lastModifiedTime; + + @Override + public Optional getCreatedBy() { + return Optional.ofNullable(this.createUserId); + } + @Override + public void setCreatedBy(Integer createdBy) { + this.createUserId = createdBy; + } + @Override + public Optional getCreatedDate() { + return Optional.ofNullable(this.createTime); + } + @Override + public void setCreatedDate(Instant creationDate) { + this.createTime = creationDate; + } + @Override + public Optional getLastModifiedBy() { + return Optional.ofNullable(this.lastModifiedUserId); + } + @Override + public void setLastModifiedBy(Integer lastModifiedBy) { + this.lastModifiedUserId = lastModifiedBy; + } + @Override + public void setLastModifiedDate(Instant lastModifiedDate) { + this.lastModifiedTime = lastModifiedDate; + } + @Override + public Optional getLastModifiedDate() { + return Optional.ofNullable(this.lastModifiedTime); + } + @Override + public boolean isNew() { + return id==null; + } +} diff --git a/jpa/dev-protocol-jpa-auditing2/src/main/resources/application-dev.yml b/jpa/dev-protocol-jpa-auditing2/src/main/resources/application-dev.yml new file mode 100644 index 0000000..d917e92 --- /dev/null +++ b/jpa/dev-protocol-jpa-auditing2/src/main/resources/application-dev.yml @@ -0,0 +1,7 @@ +# 加载不同的配置文件,进行配置文件分离 +spring: + profiles: + include: + - jpa +# - shardingSphere +# - dynamicDatasource diff --git a/jpa/dev-protocol-jpa-auditing2/src/main/resources/application.yml b/jpa/dev-protocol-jpa-auditing2/src/main/resources/application.yml new file mode 100644 index 0000000..aace5c4 --- /dev/null +++ b/jpa/dev-protocol-jpa-auditing2/src/main/resources/application.yml @@ -0,0 +1,10 @@ +# 基本配置 +server: + port: 8900 + +spring: + application: + name: dev-protocol-jpaauditing2 +# 加载不同环境 + profiles: + active: dev \ No newline at end of file diff --git a/jpa/dev-protocol-jpa-auditing2/src/main/resources/config/application-jpa.yml b/jpa/dev-protocol-jpa-auditing2/src/main/resources/config/application-jpa.yml new file mode 100644 index 0000000..d81a3a6 --- /dev/null +++ b/jpa/dev-protocol-jpa-auditing2/src/main/resources/config/application-jpa.yml @@ -0,0 +1,28 @@ +spring: + ###########datasource1 采用Mysql数据库 + datasource1: + url: jdbc:mysql://localhost:3306/test2?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false&rewriteBatchedStatements=true + username: root + password: root + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + hikari: + ##数据源1的连接池的名字 + db1: + pool-name: jpa-hikari-pool-db1 + ## 最长生命周期15分钟 + maxLifetime: 900000 + maximumPoolSize: 8 + ###########datasource2 采用h2内存数据库 + datasource2: + url: jdbc:h2:~/test + username: sa + password: sa + datasource: + driver-class-name: org.h2.Driver + hikari: + ##数据源2的连接池的名字 + db2: + pool-name: jpa-hikari-pool-db2 + maxLifetime: 500000 + maximumPoolSize: 6 \ No newline at end of file diff --git a/jpa/dev-protocol-jpa-auditing3/pom.xml b/jpa/dev-protocol-jpa-auditing3/pom.xml new file mode 100644 index 0000000..dd2227d --- /dev/null +++ b/jpa/dev-protocol-jpa-auditing3/pom.xml @@ -0,0 +1,58 @@ + + + + dev-protocol + org.example + 1.0-SNAPSHOT + ../../pom.xml + + 4.0.0 + + dev-protocol-jpaauditing3 + + + 8 + 8 + + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + mysql + mysql-connector-java + runtime + + + + com.h2database + h2 + + + + org.projectlombok + lombok + provided + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + \ No newline at end of file diff --git a/jpa/dev-protocol-jpa-auditing3/src/main/java/com/baiye/entity/BaseEntity.java b/jpa/dev-protocol-jpa-auditing3/src/main/java/com/baiye/entity/BaseEntity.java new file mode 100644 index 0000000..3f75a7a --- /dev/null +++ b/jpa/dev-protocol-jpa-auditing3/src/main/java/com/baiye/entity/BaseEntity.java @@ -0,0 +1,41 @@ +package com.baiye.entity; + +import lombok.*; +import org.springframework.data.annotation.CreatedBy; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedBy; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.*; +import java.time.Instant; + +/** + * 基础的实体 + * + * ps: Auditing 在实战应用场景中,比较适合做后台管理项目,对应纯粹的 RestAPI 项目,提供给用户直接查询的 API 的话,可以考虑一个特殊的 UserID + * @author q + * @date 2021/11/30 + * @see EntityListeners(AuditingEntityListener) 这样, 子类就不需要加了 + */ +@Getter +@Setter +@ToString +@RequiredArgsConstructor +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class) +public class BaseEntity { + @Id + @GeneratedValue(strategy= GenerationType.AUTO) + private Long id; + @CreatedBy + private Integer createUserId; + @CreatedDate + private Instant createTime; + @LastModifiedBy + private Integer lastModifiedUserId; + @LastModifiedDate + private Instant lastModifiedTime; + @Version + private Integer version; +} diff --git a/jpa/dev-protocol-jpa-auditing3/src/main/java/com/baiye/entity/User.java b/jpa/dev-protocol-jpa-auditing3/src/main/java/com/baiye/entity/User.java new file mode 100644 index 0000000..a74a42c --- /dev/null +++ b/jpa/dev-protocol-jpa-auditing3/src/main/java/com/baiye/entity/User.java @@ -0,0 +1,27 @@ +package com.baiye.entity; + + +import lombok.*; + +import javax.persistence.*; + +/** + * 实际工作中使用最多的一种方式。它的好处显而易见就是公用性强,代码简单,需要关心的少 + * + * + * @author q + * @date 2021/11/30 + */ +@Entity +@Getter +@Setter +@RequiredArgsConstructor +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class User extends BaseEntity{ + private String name; + private String email; + private Integer age; + private Boolean deleted; +} diff --git a/jpa/dev-protocol-jpa-entity-callback/pom.xml b/jpa/dev-protocol-jpa-entity-callback/pom.xml new file mode 100644 index 0000000..cb1c04e --- /dev/null +++ b/jpa/dev-protocol-jpa-entity-callback/pom.xml @@ -0,0 +1,20 @@ + + + + dev-protocol + org.example + 1.0-SNAPSHOT + ../../pom.xml + + 4.0.0 + + dev-protocol-jpaentity-callback + + + 8 + 8 + + + \ No newline at end of file diff --git a/jpa/dev-protocol-jpa-entity-callback/src/main/java/com/baiye/DevProtocolJpaEntityCallbackApplication.java b/jpa/dev-protocol-jpa-entity-callback/src/main/java/com/baiye/DevProtocolJpaEntityCallbackApplication.java new file mode 100644 index 0000000..b6c2331 --- /dev/null +++ b/jpa/dev-protocol-jpa-entity-callback/src/main/java/com/baiye/DevProtocolJpaEntityCallbackApplication.java @@ -0,0 +1,4 @@ +package com.baiye; + +public class DevProtocolJpaEntityCallbackApplication { +} diff --git a/jpa/dev-protocol-jpa-shard1/pom.xml b/jpa/dev-protocol-jpa-shard1/pom.xml new file mode 100644 index 0000000..ef2d6bc --- /dev/null +++ b/jpa/dev-protocol-jpa-shard1/pom.xml @@ -0,0 +1,53 @@ + + + + dev-protocol + org.example + 1.0-SNAPSHOT + ../../pom.xml + + 4.0.0 + + dev-protocol-jpashard1 + + + 8 + 8 + + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + mysql + mysql-connector-java + runtime + + + + com.h2database + h2 + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + \ No newline at end of file diff --git a/jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/DevProtocolJpaShard1Application.java b/jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/DevProtocolJpaShard1Application.java new file mode 100644 index 0000000..6e23e2c --- /dev/null +++ b/jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/DevProtocolJpaShard1Application.java @@ -0,0 +1,38 @@ +package com.baiye; + +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.context.ConfigurableApplicationContext; + +import java.util.Iterator; + +/** + * 开发协议appication分片任务 + * + * @author q + * @date 2021/11/29 + */ +@SpringBootApplication +public class DevProtocolJpaShard1Application { + + public static void main(String[] args) { + + // todo 这里先拿到上下文一会检查下配置 + ConfigurableApplicationContext context = new SpringApplicationBuilder(DevProtocolJpaShard1Application.class) + .run(args); + + // 检查Beans加载 + checkAllBeansWithName(context); + + } + + private static void checkAllBeansWithName(ConfigurableApplicationContext context) { + + Iterator beanNamesIterator = context.getBeanFactory().getBeanNamesIterator(); + + int i = 0; + while (beanNamesIterator.hasNext()) { + System.out.println("bean number is : " + (i++) + "name is : " + beanNamesIterator.next()); + } + } +} diff --git a/jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/configuration/DataSource1Config.java b/jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/configuration/DataSource1Config.java new file mode 100644 index 0000000..08bd9b8 --- /dev/null +++ b/jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/configuration/DataSource1Config.java @@ -0,0 +1,95 @@ +package com.baiye.configuration; + +import com.zaxxer.hikari.HikariDataSource; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.orm.jpa.JpaTransactionManager; +import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.annotation.EnableTransactionManagement; +import org.springframework.util.StringUtils; + +import javax.persistence.EntityManagerFactory; +import javax.sql.DataSource; + +/** + * 数据source1配置 + * + * 开启事物 + * + * @author q + * @date 2021/11/29 + */ +@Configuration +@EnableTransactionManagement +@EnableJpaRepositories( + basePackages = {"com.baiye.dao.db1"},//数据源1的repository的包路径 + entityManagerFactoryRef = "db1EntityManagerFactory",//改变数据源1的EntityManagerFactory的默认值,改为db1EntityManagerFactory + transactionManagerRef = "db1TransactionManager"//改变数据源1的transactionManager的默认值,改为db1TransactionManager +) +public class DataSource1Config { + + /** + * 指定数据源1的dataSource配置 + * + * @see ConfigurationProperties 数据源1的db配置前缀采用spring.datasource1 + */ + @Primary + @Bean(name = "db1DataSourceProperties") + @ConfigurationProperties("spring.datasource1") + public DataSourceProperties dataSourceProperties() { + return new DataSourceProperties(); + } + + /** + * 可以选择不同的数据源,这里我用HikariDataSource举例,创建数据源1 + * + * @see ConfigurationProperties 配置数据源1所用的hikari配置key的前缀 + * @param db1DataSourceProperties + * @return + */ + @Primary + @Bean(name = "db1DataSource") + @ConfigurationProperties(prefix = "spring.datasource.hikari.db1") + public HikariDataSource dataSource(@Qualifier("db1DataSourceProperties") DataSourceProperties db1DataSourceProperties) { + HikariDataSource dataSource = db1DataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build(); + if (StringUtils.hasText(db1DataSourceProperties.getName())) { + dataSource.setPoolName(db1DataSourceProperties.getName()); + } + return dataSource; + } + + + /** + * 配置数据源1的entityManagerFactory命名为db1EntityManagerFactory,用来对实体进行一些操作 + * @param builder + * @param db1DataSource entityManager依赖db1DataSource + * @return + */ + @Primary + @Bean(name = "db1EntityManagerFactory") + public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder, @Qualifier("db1DataSource") DataSource db1DataSource) { + return builder.dataSource(db1DataSource) + //数据1的实体所在的路径 + .packages("com.baiye.dao.db1") + // persistenceUnit的名字采用db1 + .persistenceUnit("db1") + .build(); + } + /** + * 配置数据源1的事务管理者,命名为db1TransactionManager依赖db1EntityManagerFactory + * @param db1EntityManagerFactory + * @return + */ + @Primary + @Bean(name = "db1TransactionManager") + public PlatformTransactionManager transactionManager(@Qualifier("db1EntityManagerFactory") EntityManagerFactory db1EntityManagerFactory) { + return new JpaTransactionManager(db1EntityManagerFactory); + } +} diff --git a/jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/configuration/DataSource2Config.java b/jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/configuration/DataSource2Config.java new file mode 100644 index 0000000..42a3bc9 --- /dev/null +++ b/jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/configuration/DataSource2Config.java @@ -0,0 +1,93 @@ +package com.baiye.configuration; + +import com.zaxxer.hikari.HikariDataSource; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.orm.jpa.JpaTransactionManager; +import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.annotation.EnableTransactionManagement; +import org.springframework.util.StringUtils; + +import javax.persistence.EntityManagerFactory; +import javax.sql.DataSource; + +/** + * 数据source2配置 + * + * @author q + * @date 2021/11/29 + */ +@Configuration +@EnableTransactionManagement//开启事务 +//利用EnableJpaRepositories,配置哪些包下面的Repositories,采用哪个 EntityManagerFactory 和哪个 transactionManager +@EnableJpaRepositories( + basePackages = {"com.baiye.dao.db2"},//数据源2的repository的包路径 + entityManagerFactoryRef = "db2EntityManagerFactory",//改变数据源2的EntityManagerFactory的默认值,改为db2EntityManagerFactory + transactionManagerRef = "db2TransactionManager"//改变数据源2的transactionManager的默认值,改为db2TransactionManager +) +public class DataSource2Config { + + /** + * 指定数据源2的dataSource配置 + * + * 数据源2的db配置前缀采用spring.datasource2 + * @return + */ + @Bean(name = "db2DataSourceProperties") + @ConfigurationProperties("spring.datasource2") + public DataSourceProperties dataSourceProperties() { + return new DataSourceProperties(); + } + + /** + * 可以选择不同的数据源,这里我用HikariDataSource举例,创建数据源2 + * + * 配置数据源2的hikari配置key的前缀 + * + * @param db2DataSourceProperties + * @return + */ + @Bean(name = "db2DataSource") + @ConfigurationProperties(prefix = "spring.datasource.hikari.db2") + public HikariDataSource dataSource(@Qualifier("db2DataSourceProperties") DataSourceProperties db2DataSourceProperties) { + HikariDataSource dataSource = db2DataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build(); + if (StringUtils.hasText(db2DataSourceProperties.getName())) { + dataSource.setPoolName(db2DataSourceProperties.getName()); + } + return dataSource; + } + + /** + * 配置数据源2的entityManagerFactory命名为db2EntityManagerFactory,用来对实体进行一些操作 + * + * @param builder + * @param db2DataSource entityManager依赖db2DataSource + * @return + */ + @Bean(name = "db2EntityManagerFactory") + public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder, @Qualifier("db2DataSource") DataSource db2DataSource) { + return builder.dataSource(db2DataSource) + //数据2的实体所在的路径 + .packages("com.baiye.dao.db2") + // persistenceUnit的名字采用db2 + .persistenceUnit("db2") + .build(); + } + + /** + * 配置数据源2的事务管理者,命名为db2TransactionManager依赖db2EntityManagerFactory + * + * @param db2EntityManagerFactory + * @return + */ + @Bean(name = "db2TransactionManager") + public PlatformTransactionManager transactionManager(@Qualifier("db2EntityManagerFactory") EntityManagerFactory db2EntityManagerFactory) { + return new JpaTransactionManager(db2EntityManagerFactory); + } +} diff --git a/jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/controller/OrderController.java b/jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/controller/OrderController.java new file mode 100644 index 0000000..b31ab62 --- /dev/null +++ b/jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/controller/OrderController.java @@ -0,0 +1,35 @@ +package com.baiye.controller; + +import com.baiye.dao.db1.Order; +import com.baiye.dao.db1.OrderRepository; +import com.baiye.dao.db2.Sku; +import com.baiye.dao.db2.SkuRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class OrderController { + @Autowired + private OrderRepository orderRepository; + @Autowired + private SkuRepository skuRepository; + + /** + * 保存订单 + * + * @param order 订单 + * @return {@link Order} + */ + @PostMapping("/user") + public Order saveOrder(@RequestBody Order order) { + return orderRepository.save(order); + } + + + @PostMapping("/user/info") + public Sku saveUserInfo(@RequestBody Sku sku) { + return skuRepository.save(sku); + } +} \ No newline at end of file diff --git a/jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/dao/db1/Order.java b/jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/dao/db1/Order.java new file mode 100644 index 0000000..8940310 --- /dev/null +++ b/jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/dao/db1/Order.java @@ -0,0 +1,42 @@ +package com.baiye.dao.db1; + + +import javax.persistence.*; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 订单 -数据源1 + * + * @author q + * @date 2021/11/29 + */ +@Entity +@Table(name = "order") +public class Order { + + /** + * id + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 订单名称 + */ + @Column(name = "order_name") + private String orderName; + + /** + * 订单价格 + */ + @Column(name = "order_price") + private BigDecimal orderPrice; + + /** + * 订单时间 + */ + @Column(name = "order_time") + private Date orderTime; +} diff --git a/jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/dao/db1/OrderRepository.java b/jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/dao/db1/OrderRepository.java new file mode 100644 index 0000000..53833be --- /dev/null +++ b/jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/dao/db1/OrderRepository.java @@ -0,0 +1,14 @@ +package com.baiye.dao.db1; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +/** + * 顺序存储库 + * + * @author q + * @date 2021/11/29 + */ +@Repository +public interface OrderRepository extends JpaRepository { +} diff --git a/jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/dao/db2/Sku.java b/jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/dao/db2/Sku.java new file mode 100644 index 0000000..042e548 --- /dev/null +++ b/jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/dao/db2/Sku.java @@ -0,0 +1,42 @@ +package com.baiye.dao.db2; + + +import javax.persistence.*; + +/** + * sku -数据源2 + * + * @author q + * @date 2021/11/29 + */ +@Entity +@Table(name = "sku") +public class Sku { + + /** + * id + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 名字 + */ + private String name; + + /** + * 等级 + */ + private String level; + + /** + * 颜色 + */ + private String color; + + /** + * 规格 + */ + private String size; +} diff --git a/jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/dao/db2/SkuRepository.java b/jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/dao/db2/SkuRepository.java new file mode 100644 index 0000000..20d5f12 --- /dev/null +++ b/jpa/dev-protocol-jpa-shard1/src/main/java/com/baiye/dao/db2/SkuRepository.java @@ -0,0 +1,14 @@ +package com.baiye.dao.db2; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +/** + * sku库 + * + * @author q + * @date 2021/11/29 + */ +@Repository +public interface SkuRepository extends JpaRepository { +} diff --git a/jpa/dev-protocol-jpa-shard1/src/main/resources/application-dev.yml b/jpa/dev-protocol-jpa-shard1/src/main/resources/application-dev.yml new file mode 100644 index 0000000..d917e92 --- /dev/null +++ b/jpa/dev-protocol-jpa-shard1/src/main/resources/application-dev.yml @@ -0,0 +1,7 @@ +# 加载不同的配置文件,进行配置文件分离 +spring: + profiles: + include: + - jpa +# - shardingSphere +# - dynamicDatasource diff --git a/jpa/dev-protocol-jpa-shard1/src/main/resources/application.yml b/jpa/dev-protocol-jpa-shard1/src/main/resources/application.yml new file mode 100644 index 0000000..b34e170 --- /dev/null +++ b/jpa/dev-protocol-jpa-shard1/src/main/resources/application.yml @@ -0,0 +1,10 @@ +# 基本配置 +server: + port: 8900 + +spring: + application: + name: dev-protocol-jpashard1 +# 加载不同环境 + profiles: + active: dev \ No newline at end of file diff --git a/jpa/dev-protocol-jpa-shard1/src/main/resources/config/application-jpa.yml b/jpa/dev-protocol-jpa-shard1/src/main/resources/config/application-jpa.yml new file mode 100644 index 0000000..d81a3a6 --- /dev/null +++ b/jpa/dev-protocol-jpa-shard1/src/main/resources/config/application-jpa.yml @@ -0,0 +1,28 @@ +spring: + ###########datasource1 采用Mysql数据库 + datasource1: + url: jdbc:mysql://localhost:3306/test2?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false&rewriteBatchedStatements=true + username: root + password: root + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + hikari: + ##数据源1的连接池的名字 + db1: + pool-name: jpa-hikari-pool-db1 + ## 最长生命周期15分钟 + maxLifetime: 900000 + maximumPoolSize: 8 + ###########datasource2 采用h2内存数据库 + datasource2: + url: jdbc:h2:~/test + username: sa + password: sa + datasource: + driver-class-name: org.h2.Driver + hikari: + ##数据源2的连接池的名字 + db2: + pool-name: jpa-hikari-pool-db2 + maxLifetime: 500000 + maximumPoolSize: 6 \ No newline at end of file diff --git a/jpa/dev-protocol-jpa-shard2/pom.xml b/jpa/dev-protocol-jpa-shard2/pom.xml new file mode 100644 index 0000000..4d0cc35 --- /dev/null +++ b/jpa/dev-protocol-jpa-shard2/pom.xml @@ -0,0 +1,52 @@ + + + + dev-protocol + org.example + 1.0-SNAPSHOT + ../../pom.xml + + 4.0.0 + + dev-protocol-jpashard2 + + + 8 + 8 + + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + mysql + mysql-connector-java + runtime + + + + com.h2database + h2 + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + \ No newline at end of file diff --git a/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/DevProtocolJpaShard2Application.java b/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/DevProtocolJpaShard2Application.java new file mode 100644 index 0000000..781ff6d --- /dev/null +++ b/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/DevProtocolJpaShard2Application.java @@ -0,0 +1,56 @@ +package com.baiye; + +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.context.ConfigurableApplicationContext; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * 开发协议jpa shard2应用程序 + * + * @author q + * @date 2021/11/30 + */ +@SpringBootApplication +public class DevProtocolJpaShard2Application { + public static void main(String[] args) { + // todo 这里先拿到上下文一会检查下配置 + ConfigurableApplicationContext context = new SpringApplicationBuilder(DevProtocolJpaShard2Application.class) + .run(args); + + List beanNames = new ArrayList<>(Arrays.asList("db1DataSource", "db2DataSource")); + // 检查Beans加载 + checkBeansWithName(context, beanNames); + } + + + /** + * 检查指定Bean的注册 + * + * @param context + */ + private static void checkBeansWithName(ConfigurableApplicationContext context, List beanNames){ + + Iterator beanNamesIterator = context.getBeanFactory().getBeanNamesIterator(); + + AtomicInteger i = new AtomicInteger(); + while (beanNamesIterator.hasNext()) { + String next = beanNamesIterator.next(); + + beanNames.forEach( + one->{ + if (!next.equalsIgnoreCase(one)) { + return; + } + System.out.println("bean number is : " + (i.getAndIncrement()) + ", name is : " + next); + } + ); + + } + } +} diff --git a/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/configuration/DataSource1Config.java b/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/configuration/DataSource1Config.java new file mode 100644 index 0000000..08bd9b8 --- /dev/null +++ b/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/configuration/DataSource1Config.java @@ -0,0 +1,95 @@ +package com.baiye.configuration; + +import com.zaxxer.hikari.HikariDataSource; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.orm.jpa.JpaTransactionManager; +import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.annotation.EnableTransactionManagement; +import org.springframework.util.StringUtils; + +import javax.persistence.EntityManagerFactory; +import javax.sql.DataSource; + +/** + * 数据source1配置 + * + * 开启事物 + * + * @author q + * @date 2021/11/29 + */ +@Configuration +@EnableTransactionManagement +@EnableJpaRepositories( + basePackages = {"com.baiye.dao.db1"},//数据源1的repository的包路径 + entityManagerFactoryRef = "db1EntityManagerFactory",//改变数据源1的EntityManagerFactory的默认值,改为db1EntityManagerFactory + transactionManagerRef = "db1TransactionManager"//改变数据源1的transactionManager的默认值,改为db1TransactionManager +) +public class DataSource1Config { + + /** + * 指定数据源1的dataSource配置 + * + * @see ConfigurationProperties 数据源1的db配置前缀采用spring.datasource1 + */ + @Primary + @Bean(name = "db1DataSourceProperties") + @ConfigurationProperties("spring.datasource1") + public DataSourceProperties dataSourceProperties() { + return new DataSourceProperties(); + } + + /** + * 可以选择不同的数据源,这里我用HikariDataSource举例,创建数据源1 + * + * @see ConfigurationProperties 配置数据源1所用的hikari配置key的前缀 + * @param db1DataSourceProperties + * @return + */ + @Primary + @Bean(name = "db1DataSource") + @ConfigurationProperties(prefix = "spring.datasource.hikari.db1") + public HikariDataSource dataSource(@Qualifier("db1DataSourceProperties") DataSourceProperties db1DataSourceProperties) { + HikariDataSource dataSource = db1DataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build(); + if (StringUtils.hasText(db1DataSourceProperties.getName())) { + dataSource.setPoolName(db1DataSourceProperties.getName()); + } + return dataSource; + } + + + /** + * 配置数据源1的entityManagerFactory命名为db1EntityManagerFactory,用来对实体进行一些操作 + * @param builder + * @param db1DataSource entityManager依赖db1DataSource + * @return + */ + @Primary + @Bean(name = "db1EntityManagerFactory") + public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder, @Qualifier("db1DataSource") DataSource db1DataSource) { + return builder.dataSource(db1DataSource) + //数据1的实体所在的路径 + .packages("com.baiye.dao.db1") + // persistenceUnit的名字采用db1 + .persistenceUnit("db1") + .build(); + } + /** + * 配置数据源1的事务管理者,命名为db1TransactionManager依赖db1EntityManagerFactory + * @param db1EntityManagerFactory + * @return + */ + @Primary + @Bean(name = "db1TransactionManager") + public PlatformTransactionManager transactionManager(@Qualifier("db1EntityManagerFactory") EntityManagerFactory db1EntityManagerFactory) { + return new JpaTransactionManager(db1EntityManagerFactory); + } +} diff --git a/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/configuration/DataSource2Config.java b/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/configuration/DataSource2Config.java new file mode 100644 index 0000000..42a3bc9 --- /dev/null +++ b/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/configuration/DataSource2Config.java @@ -0,0 +1,93 @@ +package com.baiye.configuration; + +import com.zaxxer.hikari.HikariDataSource; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.orm.jpa.JpaTransactionManager; +import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.annotation.EnableTransactionManagement; +import org.springframework.util.StringUtils; + +import javax.persistence.EntityManagerFactory; +import javax.sql.DataSource; + +/** + * 数据source2配置 + * + * @author q + * @date 2021/11/29 + */ +@Configuration +@EnableTransactionManagement//开启事务 +//利用EnableJpaRepositories,配置哪些包下面的Repositories,采用哪个 EntityManagerFactory 和哪个 transactionManager +@EnableJpaRepositories( + basePackages = {"com.baiye.dao.db2"},//数据源2的repository的包路径 + entityManagerFactoryRef = "db2EntityManagerFactory",//改变数据源2的EntityManagerFactory的默认值,改为db2EntityManagerFactory + transactionManagerRef = "db2TransactionManager"//改变数据源2的transactionManager的默认值,改为db2TransactionManager +) +public class DataSource2Config { + + /** + * 指定数据源2的dataSource配置 + * + * 数据源2的db配置前缀采用spring.datasource2 + * @return + */ + @Bean(name = "db2DataSourceProperties") + @ConfigurationProperties("spring.datasource2") + public DataSourceProperties dataSourceProperties() { + return new DataSourceProperties(); + } + + /** + * 可以选择不同的数据源,这里我用HikariDataSource举例,创建数据源2 + * + * 配置数据源2的hikari配置key的前缀 + * + * @param db2DataSourceProperties + * @return + */ + @Bean(name = "db2DataSource") + @ConfigurationProperties(prefix = "spring.datasource.hikari.db2") + public HikariDataSource dataSource(@Qualifier("db2DataSourceProperties") DataSourceProperties db2DataSourceProperties) { + HikariDataSource dataSource = db2DataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build(); + if (StringUtils.hasText(db2DataSourceProperties.getName())) { + dataSource.setPoolName(db2DataSourceProperties.getName()); + } + return dataSource; + } + + /** + * 配置数据源2的entityManagerFactory命名为db2EntityManagerFactory,用来对实体进行一些操作 + * + * @param builder + * @param db2DataSource entityManager依赖db2DataSource + * @return + */ + @Bean(name = "db2EntityManagerFactory") + public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder, @Qualifier("db2DataSource") DataSource db2DataSource) { + return builder.dataSource(db2DataSource) + //数据2的实体所在的路径 + .packages("com.baiye.dao.db2") + // persistenceUnit的名字采用db2 + .persistenceUnit("db2") + .build(); + } + + /** + * 配置数据源2的事务管理者,命名为db2TransactionManager依赖db2EntityManagerFactory + * + * @param db2EntityManagerFactory + * @return + */ + @Bean(name = "db2TransactionManager") + public PlatformTransactionManager transactionManager(@Qualifier("db2EntityManagerFactory") EntityManagerFactory db2EntityManagerFactory) { + return new JpaTransactionManager(db2EntityManagerFactory); + } +} diff --git a/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/configuration/DataSourceRoutingHolder.java b/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/configuration/DataSourceRoutingHolder.java new file mode 100644 index 0000000..37aa767 --- /dev/null +++ b/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/configuration/DataSourceRoutingHolder.java @@ -0,0 +1,23 @@ +package com.baiye.configuration; + +/** + * 利用ThreadLocal来存储,当前的线程使用的数据 + * + * @author q + * @date 2021/11/30 + */ +public class DataSourceRoutingHolder { + private static ThreadLocal threadLocal = new ThreadLocal<>(); + + public static void setBranchContext(RoutingDataSourceEnum dataSourceEnum) { + threadLocal.set(dataSourceEnum); + } + + public static RoutingDataSourceEnum getBranchContext() { + return threadLocal.get(); + } + + public static void clearBranchContext() { + threadLocal.remove(); + } +} diff --git a/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/configuration/RoutingDataSource.java b/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/configuration/RoutingDataSource.java new file mode 100644 index 0000000..746f0e6 --- /dev/null +++ b/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/configuration/RoutingDataSource.java @@ -0,0 +1,24 @@ +package com.baiye.configuration; + +import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; + +import java.util.Optional; + +/** + * 继承AbstractRoutingDataSource,根据我们当前线程里面存储的值 + * + * @author q + * @date 2021/11/30 + */ +public class RoutingDataSource extends AbstractRoutingDataSource { + + /** + * 采用的数据源的key是什么,如果找不到,默认给这个DB1 + * + * @return {@link Object} + */ + @Override + protected Object determineCurrentLookupKey() { + return Optional.ofNullable(DataSourceRoutingHolder.getBranchContext()).orElse(RoutingDataSourceEnum.DB1); + } +} diff --git a/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/configuration/RoutingDataSourceConfig.java b/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/configuration/RoutingDataSourceConfig.java new file mode 100644 index 0000000..01d0be1 --- /dev/null +++ b/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/configuration/RoutingDataSourceConfig.java @@ -0,0 +1,89 @@ +package com.baiye.configuration; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.orm.jpa.JpaTransactionManager; +import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +import javax.persistence.EntityManagerFactory; +import javax.sql.DataSource; +import java.util.HashMap; +import java.util.Map; + +/** + * 路由数据源配置 + * + * @author q + * @date 2021/11/30 + */ +@Configuration +@EnableTransactionManagement +@EnableJpaRepositories( + //数据源的repository的包路径,这里我们覆盖db1和db2的包路径 + basePackages = {"com.baiye.dao"}, + entityManagerFactoryRef = "routingEntityManagerFactory", + transactionManagerRef = "routingTransactionManager" +) +public class RoutingDataSourceConfig { + + @Autowired + @Qualifier(value = "db1DataSource") + private DataSource db1DataSource; + @Autowired + @Qualifier(value = "db2DataSource") + private DataSource db2DataSource; + + + /** + * 创建RoutingDataSource,引用我们之前配置的db1DataSource和db2DataSource + * + * @return + */ + @Bean(name = "routingDataSource") + public DataSource dataSource() { + Map dataSourceMap = new HashMap<>(2); + dataSourceMap.put(RoutingDataSourceEnum.DB1, db1DataSource); + dataSourceMap.put(RoutingDataSourceEnum.DB2, db2DataSource); + + RoutingDataSource routingDataSource = new RoutingDataSource(); + //设置RoutingDataSource的默认数据源 + routingDataSource.setDefaultTargetDataSource(db1DataSource); + //设置RoutingDataSource的数据源列表 + routingDataSource.setTargetDataSources(dataSourceMap); + return routingDataSource; + } + + /** + * 类似db1和db2的配置,唯一不同的是,这里采用routingDataSource + * + * @param builder + * @param routingDataSource entityManager依赖routingDataSource + * @return + */ + @Bean(name = "routingEntityManagerFactory") + public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder, + @Qualifier("routingDataSource") DataSource routingDataSource) { + //数据routing的实体所在的路径,这里我们覆盖db1和db2的路径 + return builder.dataSource(routingDataSource).packages("com.baiye.dao") + // persistenceUnit的名字采用db-routing + .persistenceUnit("db-routing") + .build(); + } + + /** + * 配置数据的事务管理者,命名为routingTransactionManager依赖routtingEntityManagerFactory + * + * @param routingEntityManagerFactory + * @return + */ + @Bean(name = "routingTransactionManager") + public PlatformTransactionManager transactionManager(@Qualifier("routingEntityManagerFactory") EntityManagerFactory routingEntityManagerFactory) { + return new JpaTransactionManager(routingEntityManagerFactory); + } +} diff --git a/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/configuration/RoutingDataSourceEnum.java b/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/configuration/RoutingDataSourceEnum.java new file mode 100644 index 0000000..2dffcb1 --- /dev/null +++ b/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/configuration/RoutingDataSourceEnum.java @@ -0,0 +1,22 @@ +package com.baiye.configuration; + +/** + * 定义一个数据源的枚举类 + * + * @author q + * @date 2021/11/30 + */ +public enum RoutingDataSourceEnum { + // fixme 实际工作中枚举的语义可以更加明确一点; + DB1, + DB2; + public static RoutingDataSourceEnum findbyCode(String dbRouting) { + for (RoutingDataSourceEnum e : values()) { + if (e.name().equals(dbRouting)) { + return e; + } + } + //没找到的情况下,默认返回数据源1 + return DB1; + } +} diff --git a/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/dao/db1/Order.java b/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/dao/db1/Order.java new file mode 100644 index 0000000..8940310 --- /dev/null +++ b/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/dao/db1/Order.java @@ -0,0 +1,42 @@ +package com.baiye.dao.db1; + + +import javax.persistence.*; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 订单 -数据源1 + * + * @author q + * @date 2021/11/29 + */ +@Entity +@Table(name = "order") +public class Order { + + /** + * id + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 订单名称 + */ + @Column(name = "order_name") + private String orderName; + + /** + * 订单价格 + */ + @Column(name = "order_price") + private BigDecimal orderPrice; + + /** + * 订单时间 + */ + @Column(name = "order_time") + private Date orderTime; +} diff --git a/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/dao/db1/OrderRepository.java b/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/dao/db1/OrderRepository.java new file mode 100644 index 0000000..53833be --- /dev/null +++ b/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/dao/db1/OrderRepository.java @@ -0,0 +1,14 @@ +package com.baiye.dao.db1; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +/** + * 顺序存储库 + * + * @author q + * @date 2021/11/29 + */ +@Repository +public interface OrderRepository extends JpaRepository { +} diff --git a/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/dao/db2/Sku.java b/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/dao/db2/Sku.java new file mode 100644 index 0000000..042e548 --- /dev/null +++ b/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/dao/db2/Sku.java @@ -0,0 +1,42 @@ +package com.baiye.dao.db2; + + +import javax.persistence.*; + +/** + * sku -数据源2 + * + * @author q + * @date 2021/11/29 + */ +@Entity +@Table(name = "sku") +public class Sku { + + /** + * id + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 名字 + */ + private String name; + + /** + * 等级 + */ + private String level; + + /** + * 颜色 + */ + private String color; + + /** + * 规格 + */ + private String size; +} diff --git a/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/dao/db2/SkuRepository.java b/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/dao/db2/SkuRepository.java new file mode 100644 index 0000000..20d5f12 --- /dev/null +++ b/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/dao/db2/SkuRepository.java @@ -0,0 +1,14 @@ +package com.baiye.dao.db2; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +/** + * sku库 + * + * @author q + * @date 2021/11/29 + */ +@Repository +public interface SkuRepository extends JpaRepository { +} diff --git a/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/web/DataSourceInterceptor.java b/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/web/DataSourceInterceptor.java new file mode 100644 index 0000000..ad818c7 --- /dev/null +++ b/jpa/dev-protocol-jpa-shard2/src/main/java/com/baiye/web/DataSourceInterceptor.java @@ -0,0 +1,39 @@ +package com.baiye.web; + +import com.baiye.configuration.DataSourceRoutingHolder; +import com.baiye.configuration.RoutingDataSourceEnum; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * 数据源拦截器 + * + * @author q + * @date 2021/11/30 + */ +@Component +public class DataSourceInterceptor extends HandlerInterceptorAdapter { + + /** + * 请求处理之前更改线程里面的数据源 + */ + @Override + public boolean preHandle(HttpServletRequest request, + HttpServletResponse response, Object handler) throws Exception { + String dbRouting = request.getHeader("db-routing"); + DataSourceRoutingHolder.setBranchContext(RoutingDataSourceEnum.findbyCode(dbRouting)); + return super.preHandle(request, response, handler); + } + + /** + * 请求结束之后清理线程里面的数据源 + */ + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { + super.afterCompletion(request, response, handler, ex); + DataSourceRoutingHolder.clearBranchContext(); + } +} diff --git a/jpa/dev-protocol-jpa-shard2/src/main/resources/application-dev.yml b/jpa/dev-protocol-jpa-shard2/src/main/resources/application-dev.yml new file mode 100644 index 0000000..d917e92 --- /dev/null +++ b/jpa/dev-protocol-jpa-shard2/src/main/resources/application-dev.yml @@ -0,0 +1,7 @@ +# 加载不同的配置文件,进行配置文件分离 +spring: + profiles: + include: + - jpa +# - shardingSphere +# - dynamicDatasource diff --git a/jpa/dev-protocol-jpa-shard2/src/main/resources/application.yml b/jpa/dev-protocol-jpa-shard2/src/main/resources/application.yml new file mode 100644 index 0000000..98e45ff --- /dev/null +++ b/jpa/dev-protocol-jpa-shard2/src/main/resources/application.yml @@ -0,0 +1,12 @@ +# 基本配置 +server: + port: 8900 + +spring: + application: + name: dev-protocol-jpashard1 +# 加载不同环境 + profiles: + active: dev + main: + allow-bean-definition-overriding: true \ No newline at end of file diff --git a/jpa/dev-protocol-jpa-shard2/src/main/resources/config/application-jpa.yml b/jpa/dev-protocol-jpa-shard2/src/main/resources/config/application-jpa.yml new file mode 100644 index 0000000..d81a3a6 --- /dev/null +++ b/jpa/dev-protocol-jpa-shard2/src/main/resources/config/application-jpa.yml @@ -0,0 +1,28 @@ +spring: + ###########datasource1 采用Mysql数据库 + datasource1: + url: jdbc:mysql://localhost:3306/test2?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false&rewriteBatchedStatements=true + username: root + password: root + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + hikari: + ##数据源1的连接池的名字 + db1: + pool-name: jpa-hikari-pool-db1 + ## 最长生命周期15分钟 + maxLifetime: 900000 + maximumPoolSize: 8 + ###########datasource2 采用h2内存数据库 + datasource2: + url: jdbc:h2:~/test + username: sa + password: sa + datasource: + driver-class-name: org.h2.Driver + hikari: + ##数据源2的连接池的名字 + db2: + pool-name: jpa-hikari-pool-db2 + maxLifetime: 500000 + maximumPoolSize: 6 \ No newline at end of file diff --git a/jpa/pic/回调事件注册表.png b/jpa/pic/回调事件注册表.png new file mode 100644 index 0000000000000000000000000000000000000000..19f369b96e0c78ae26e3fa39513945a2718f8d55 GIT binary patch literal 188743 zcmZU)2Ut_t`aKK?3W`(}BOL+^(iBD!=}ibI*l1EhN2Q6B&?7~PA|-%`NE57-5Tpl) zC|v{;BtQs}-V;h7kdWj%%*?&>``>RrkB4%?K6}4qt@Xb9n0(#Bl^aWG%Ql$t zmPKQgWxs~01V3!0V}#uk+PRFr(WYQ;OXvMO_?CZDA`=52(_Xp3ODdp@n!GD5?fZjw z56Nt#5f~We+X(7cW>c7s%>Nl4Rt5AICLw82zoEf!>O1&&e%O32J|8yOnDeHAH_pAY zg))ir#nn}y_cyUIMrN9VS8I5&KY>|Gqf0mL|uXEesNJc%Tm((58?@jFV+^r(WaHFqkHcxEj6l zsW6zir^|dt%<|GMMsKVkSBcRi;afLvdS(e0Y`!PzGcn9s^v*LCBJuvK|FIR0L9E4x zsf2k_kc>IZYGupLxL;SQsJ6)sfituWkOkE`0d}+5^Wpak*dXQrlMaWy(^Bh6$;t|o zIk^5i0)A$KRH8j8DonB^x~#J4Bd*%R95ePB{O3#egkyF7gh_lb))Aj=<1|L^!t6dJ z&U)$S9896{zY__#cQW@?7{-(qQWTQunK0ly8gxFRFUb)En+Pyr%KTt%F?V$leWnn* zIB;$T;@_ca5!<)Bz}zo{2|*(RV6?S*3R>+-21vPitqw;OX6_F#n>F`95Kq9<3J2GJ zM@nXtduQQ31UB_pD5QQe+?&aN9r-dvN^N3&%^!}A_ zjQ`&`5Pi1RVFY`0gwAfi6W_`2-kbt6he(Tck<_pFI%IS!n)bdP1{2?SyHi`+3@52s z6DcqtA`i*_W2JICYu85+sSKRed5pMS7oWm{F1hm8)+v2g2DH(S5apUCO>n^1+gML$ z=1y}DNJY3k10I#Sgu3>ZrFuCbs%{_;nMb44xm##QOj9dv`)Oe?t~Jz*)^u`=x+mD= zs7nukk)ET`5v0~nxDC92Fh%0eGuV-8`h*G$9UbCZzqKqLgu^iA<}b(}vG~W1c4ZS= zQ!r#FyJj6_qitkB494`HWY+l&ko-skq`kH8_&PORtT-Wj6GcB?O~YbV>t5~tpb<>k z<)9kAb0Byht5W>yHy?tooAbjOYV4OU_{I|47EKdaJ*E!Fc!pestv%0{@W5IkN8}yrBW&s;WX^$TO+BgK zl$VM4)(Tu8HXq-wfT<_!RlJLA#%;8ag3!@>TOX>o-svtMDs4*1+W05Fdhg5?xJ}|K zi~^#X>xAz;7=K5EfA4jOB5A|67byG0R6pFQ64D&dW=mFGHjV=V%jKD3`+d6YMQ zvED9XY~l z?Mbxpl(DzeY~=-0BdiOi>@<;0%{ihu&5b)v{e4wq7X>wS5P6Pk(yU=^z&7LZe21$ zWMI2NKJ{}Ayg{0+@TJ};9Ic`46=p`0;Gm(CJ2)E9rV$lJ>wc>8YE)1LUw|*uG>P6U z@%tt(?mwCL7fz^N15)9N#`HD(^8t||fBMAsjCe={aoo(>V*`7* z0gaLs#rSfG?vx5RJhFbp3tQfY!z}Gg?BwYQXiE*hXypU;&m@Spzjcxt01GTMITr2=iHA9ta8tq()8 z@t}V8oO`jb(4SHZL4f2B##R#60Ol01)cQhVep9=iFuvBjKkc+L5nvDZv0iOnea!&r zj5n^8L2YHUcUFm9nRrZ7F=0&dZ3A=yWkVfh-%+j`b@>=g_pY%gEphRnjPM12Gtqg3 zd#CCXl??c-Hm#K$H6S-h@YP@}GK9=SnDcL=^m}b5(B2En>PkD$RUWM8bFUN2NP(;S z8@y;d1|3zqibscUwwtAr{K*5`X1zztM|`xyg3TA}hAi)JU5y?)asdrcIs)XKbpX}C znCBNilor;+fmVPq)~o&0e@-Q=P{YJlJ8Qna){WkJMnAu(%l0JHR>SXISF2YGsiN$B zdp?H5#pN-!5kT6hh#9u@g;Et}$P{x?$E0!TSF+pSJ9N+3D;XiP~{q&e#%HxJQQ z#3P6ewNMwXCEeLtn7O>_myeLJNtEPAGp+r+sVd|U=PSxWR}d`O-9A#N+RbNe$9z1fv9sE>DMAdM2@2yHosSGeJY8%;z@Et^%ViXk6I#NxXKK*jTgNUxLoV z8ZdN^`!~5s%o&ym^gHM;y)(N`9U}mAG#8}Es_Co)0IS|wP5szg`Ae_sh*m`(8S}E* z%d&o;bTO^l!!y*G=-hS`WA}~F&PF$#n5VzGOFjxYj%rUeS6PI?>WJolr>8LhR;pvw zs%^Ls5cC)+Io=m%4R2kYr7@)--L|UIPHIb-7!(C>i`JX=8lUj?=saRXEA(zztEUG? z)J?S9d`Bo}xUY=80~nN%={JCfRr>MLiS^W9c@a7x?d^DJ`Jw+virQYjT-02=8U!9%w;K&zt`xA7hv?+W#Xh#1jYpwWzQ7+K#5#!`5tj46ZCkM z(J??>fidT?W#XjG;(w$hs*{Xdu`BD#`QNWK3z~6?csJhc0L(zmS+KVqM z<+0rof3~ZlZn+H<=+sq(-ki+&n-(J(*W%KE1b0_Di zh%@d7?89o3mhJ3f^XaR97a_{M)wBBFBx_tKAvx0Jw*&hZAy0RA=UWs|FEu8QX!CRGo9@aW zwCkB6GMx>+gjarydhoaipv&+cApWEaunxZjxuOH& z$%IB*uB+CXKzIWpX%yHVbKZucpxMpcmckppL+G>3U})PwHK0pw7!Hj093v{GzjrU% z!vpEUnGPg^Z}x1%lFc6L;053@|H1f+Ax?oF%<%4L!bjU&G;MEUx_uI=v=u`V4e@qB zHQ@xPX)y&+;VSg=gtc*VPYLs8i)zyTBu5q?#g9x*GGC#g7q_%Fz5sx>8baS6XI!4` zA_~KQU|xms#ap>GegOP|~UmrZQ7!FI&w#vktgppV=jG%wm{Pv@PH z{vDj&G$ElDIs0wkBi92ysRN;mugnfiI@-ovZTNdgP{^L>By({`$Ns_eXaSnI8iEfs zWIiTSHRNahlOSR3e%GGzUg#S;B^;~3hnp_0kB*I%Yg zBI28<3imj())opsLHGVnBR6nQii{BMO4NfuidmIQP6AXA(bq zi#1y#ZdfJ(ULM=?mi<3;hRmeCwbJ#X=)P;E1pk;mRK$3Oy}JK&u*y(+J_zGnM|++J zNJknSs`jDK1_3${=1j-bDBEP-UmWs)mTP7#XJ<1`p6)_6KE!MSH7GDT53oR)egsW) zidrinuu->Fwn=Yx&=Nbn2epSTmh#=qc@X|b%_V{qD7H_}d3EWKIMXgHLFE<6iJp+) z@3GqyX6fz_K4oU-zsB4aQzUm~UE7QRc|ZRT4I`u{hkZ4sO6cBi>{GR?fj!CO{xD3h zS0BVBE{~p8{W{P>(Ur#t(UC||co6j6sobfYUv-7FImR!cIY986Io!%F{2K|b0GR7K z7P2EmJ&E|0=25}UrrXklUND5CnZas|mk?&_iqmEZk3%ok#=))Z9#gFxHZe{b9oRE;@)MpK5eUlrH5u;x~HY$@#>#aOtrq5SrL_TjyzN@lk1}XmgCq~BnCZ%%GY5D z|F#Tk_{jTcWT1)QEt}&o=nE)vT6KscGn27Eh$^25zNYFn*I;vpeuA#uRoUH3@EH3i zJb>8rIH92UP7I526437yBh^Q*J^jAoC8HJ+No)Q^cmZt;SxBn{B5?mZ!@n&7YA_bH z@?C+KT)9fJiOs}WLp8<}=t4i^_8VXWturA(WX&sQ2FyV~F8x&xlv}+;fJ~p@;5b0b zZz*gs_vmG^RSP5bO%-zRW+B}kr)ZWMl?al86fs%!CA~}@)7*-SCfZP;E-UbSca;qN zgzkSNfH4pS-~J#)m@`qzno{hd6hHh=Qsg2=it%QEDA(!{6S|1<_Nu49q9bvDhNVTb z`EJkH+fz5|3t=PiypJZwnQJpHlBSuvH=9Ty?E&rP#6H`+f2><=4Knu(mFYkxlL3Zh zE4|Xr4Rjg4LDe+o*BNrt9qeV|l2G~*R_DrCYX#xM6wN_XdH;^M&2D4J-0n6)$D%53 z3s9~8K^bdM=Fi?>uN|qnv4@)|TJ2wDij2ogfFFDw4&!WkIAVd&aFQ_wo3XKtExq^BTiTC9}z4gzFvv2R3UnQcc{%(I@n7`jY3NYSZ zJ9&G<5EM6IY3+Ift&`odK*0d&Oi2zNiP`zf%cWN{fwJ#vdGzXT+ncDOA4dcf^xNtH zVyXkGE#0YsV=;-MBKA64Q#zsRzA28_{VEl#%G+H~txf|V<)ZXv#?bI!L*|e#ZF#}X zDaYXf;fS7!4l_E~((XSFQbmS-FJW$ff;tigrX>7EsbiMq1uEU#3rf%1%U;)(I}Ack zxnE%}CzIS8{J&}A`x#g>ol#%y?FNAQTR%0GY*lJ%Vq$+1FqAz(e!?O2jtQ;y@6Mb@ z3g8>}hXY3lKYZ!E_Y_#WFVJC1kwdQEAYD7+!{cEcZ|JGd!i*lwqe;z-SQ%`c}efeMf_rM8RI^l1i z&b;47E45TFd)eocdQy~NfEZN3j%lM-uR6JTJ7-rkHadN)1grX<-39U%(?((2==ej=v~sJ9!H>4B`Mh)c952dVZM>&jWmKB!)CIsc_yPdQtPQRzNPm zby-<5KnLP)#q#&H^RK;_OZ@{#f5&TS3J|b2Z$3Br-*(zDNwwDP3jbgxjmf|ScWE)E z@DwOr9X~L+{}ZSXL34{;TBS69<_hztBl+jomkWRI@}CD<&n;sy?`adC#0Ydt_|69t^8;hEo>nln+f7fz2Sa%_ z{`cd_0e|$Q_(#qNLp;F(M~)p_|CuPc{gPsQUpMxuKys~gPs-o3AKW{g2v!qFmeEIm z{_{yAsq;MEQfixrijv!>)7`K9wUEDVrWn#$2kreDJw$R*-q^}0-S6Q)jD>=ELq8un zSjEVrgQ@;AwX4V-_s;i)p4Sdmsrdh2W%O1a-Cp{yg|hy?3kAa8RFUid{R`8BSp*L5 z{C7(;2Wvxt5AGcNvb{NJR}1*=;<1Cje9r#&oYU8h+8?uZi)x0H(?sU&aP|JAxL)JEUWE*d=JI*wA!V!!;h*|=MAP_~Kr`H0S7en2P4 zd-GY4bRA|EVIE$*0^ve7Flhv4^j|55b&BwX=G^0|_Hqd5IEl~oDj16*MG(9ZCl5{p zDA~x!Hxa<62~f4;K^MJsEfCh?pKh$t=_EKD6UextT+<6eyllU5xP?i6r@Q9Yx;LL( zDq+vqNP|!0M{f4u2jGk?#yHAZ*c2H!pj}Vvv5fwSE$Os%{Mc2~Y5^YkD>5+l z;alo0scD+ThGb3YXmW{oFex01Zj#g8>%kvn{Eg&VhR$@7G?fY@CCTS`+KC7PZ4%qE z>Y)^{q%7HULUPt=_k8Kih>L7GOY zZ|WZI#97%m{=(YFdWdkI>(bkdzaBaeF*&5YcF%HUZm5tEbO3+6sWWbA+I11X4~dVa zeMePI(+`dvu`35=(}{U2G;rQ}DXQG`a|h-E-{l_(wMpUqZ08RNBsqy~rYDluP`5lM ztpdX{PBgDSR#~0g?NsL>ru_Ea{v|EG*G&u?h;SmLxfS%Nw9bf<7D?yRYKR%H2ETek zY2zOnIfSd@jH2x67t(5|FH+MEfIA>9!huo`r`6Lqk2ghs6`mYa^fGl?j};;#2iu9< zGaPnlpTian#m6%Z2SPj5!VyT>3v(1kgpDq7f@omhdF^{4)5&tmv$b!HT$TO{ zTDGTbGcy0UDj3rzX#Ma9LEql_$y_Zic;g-QjlSDf$*OYxiz^1$fIo)5H9<_OWry_Da!Lp zVo8Mx$mVLz{q?UAG=B3Ge14lwbG6$Mqa>Y3AeJZPP|FGBX9qG>qL$3@3ede?;s?v9 z`-O`m*sQW0M2NeZeyW80B>AoSHoKFE2~R_+w&}|?v2)^4+hx!-!JRv+N0Y0ciPlMP zgpkI(3bk`ghYPn}Es(($_%6;v$S#SWzmzzS8$A&P`$yn#RMpWZjZd`0PO{%{j(#{n zNJ78Ur7uyW)%Y&^oQV10n-tNWWfOY;wNz&cp5HS3XC_rt9#MbKSvn*~qHl3&u_TSC zvx7?8-tlpexG>xmJYMM-#C&4Y{2F^CPgV9;a;5I}2g~ox#}qPb|NJkvJm=8&`;>Ug;o2x`a7xK7GKqpA(P} zBB@BW=bY|PJ_Vs|6*Bi*zt4re7VXc>X(hj*<(s_cAXi-G_keuai(pT63(+zqZ}T%# z|0p`98CCN^X8aJag04h&dyTCm_r+hx=-|vgmb&7|rtR=+5Kjq%zC#ijuWh#Vo7g3b zuLe3?^JGsy6XLpi>hQxf<@DRN`R0=;f^#cqKr=nSc#j4`?rtdg^i^^*^czhTqCR^* z+Y(rg{K6$iHZoZ?yRExsybBo9_V9lNgW|E+KEC(mGF&fDx^<^OZ2eUYzeqdRW;b&{ z5E71hYvDk{d)nFMhI@j$G00`;sX(C9v1#+R_wC8{mUV}{o`B|oSRG7%NqsEw3D`_9lhf1<+|9icpE8VPs8kvb@4n@VvSoi^BawnrSivpRWI*Z@J-~(r3+ZUD`%LpvwxI*@yPj_-kccZi(tWeyw2&`4&3?V z$Dhx4#yj$-(rnUYs}K#GKO;l013>oUW95p7`UkFa6+TT!#&0`4M~=V(J6S`0&ryqO z<(EF*;tJktm(%%y`Q(cZ2lHOY?`^?Cu*sv-ngWe(QvVyei)?Yp8u@ zV%@g+ovS;&LXTFCd2luSDsgBmn{t|4Hl)-TrQ2s(QajFqm9QwC%?i zQDMHnOy(K_ob1b!&^m~u%f;;5LDxoo!<@9WY@l7Awu>XATmp{g4Rs+PWdww-5mXB; zV(F%Lgw2S+_ulwRPk#%Va9J0^UijI1_`@5owV!F*Ev;NrjUhb43%jYKF6Y??$XYiM zAjU-@^IfoatE2N(^VZr$93@WHotz^Hzl)!=1PFzbT7dx9fRuzeRNJW20* zrF)@2x%?)U+~>LE>*SKy`3UOe1z(;jMd+N&F$Z zZS;IMB!Ri&=J7F&q2GG^yXOBDx$V`?O700o-&&)tZErlpr9An-=#kj4Tm z+iSu3?Pi6X4Zf)7!(-oHJB^=g3)ZuXy}kf8i?t)UD15VyBCw>3U?CUQ4P)5|su`zo zM5U!N8YFK9AIv9i>Pdd;-u_Vmf2`8&F`DNQhnV%9>=mr6luNM?{SS?__?85A!Vylq zf_!!G_}RK>*JA?aWu>bY4{jL}3@(;ZUf zf-`T|`S^&nryehB-+F|H#AjFpT@equ=*uHQ`_4Vb8MK`NR&0M!q(a?hN~on@op)~i zy!&v%TV;8^A^rh(u4J;ur`q+${lfJXTOrvR07%WpL|+Ltvt3h7#!B5Of|c5Tcz36l z_vhi51+g8-EPJ$vA$(*{FCFAl$S|*hx>;d1<2w0qsd$zPe46tK_uLb7X6m)oJN1%U zpP?lAj|vnUdsYd0WH&i0=#SjBOb7Mv>9z%9ERqO6YZ zl!>lBer6F{Cy&!w3DSr#h*@~8|5Y&0 z|0Uh0z!5~e#cyTX6GrA2$Lfo2BF>&;OMZ`414p#36P=PXyzDy=iXyvSF!R2$-$ew@oa1v(V9DCWNL=V$N9tL*%CMO5 zH56pIC-hhqr3DoWT`m@OeSGcFht!I&KfAeEtFT8F&k}_c%^fm~J*ruI5fXz@TDM+1 z>?AtZ*4i5vDL=4MVMXd}qb{-5xFNX0-#!ghb{xz%($gG^+svM6ELd_3Z3`GXA_F+a zsOfIbj{MjAYu6t@5g@W9Z?Q1*XGO@JMV;p@kDhg5pKGJRMx zgf7bLajV7^h|W+}JzZA%rLSerk%)l`lm(LGp8dDK;n4;F zVV#dA%1V~C_N07F#^)Q;G8rs&eqZ<%xs34M=4Fi?=i8v5z7h8;VVG?H1@`s=yGa#3 z!<&~#j-hiogBD#J9}sJ*rV2gWT&dX+3f7eyk%IEmSELlr)l3t^0lZ&!eTrHz{SE$M zD%z%^+7$?HogY4<@A5MP7VLI{j_LfO4_lvX4+wHk2-rl$`}3y49Pp&&iPa z9p7jEik?l_1h*sZMoDmvDC?^`He5kSI-fdi?k6J677h7hn#HA<$p%DE5v8D+1+OhY z9#H_rAo|uFdYv<_dON_56W-#R7W zepjo4V_G|84zvaAvy53ItpDitV8{koo5w{lS6_&FVrgEC5%--p1H|S!D?$sZXuV(o z_UDueIhW9P?m5S=+S6+NTfr4uy&=&R?uT18m8cyr^xRF&%{YE>eYD zuFJ$HE1jRsZH#A`;X)$oCQ01EarfL08%P3}vr_AQCbzgHq;S2>Ckd)nm(b1affCdd zPDxvTY|3)csQyB3F?2YMc|~XGkS~{ODTnWi$9;o5)Y&1~4AAl$iy$Fn#C>sE(IF!N z<|ziChDOhYWFGX3Sb(DXK-0HJ)WnY7DIcr>aN*I<5ueNyJtcuK{igOdV(gg^;|7}| zxwd=7vTA0W6ZzgzEVq9@W=ZEWn_OA@#-_pb-(u`7E?Z{)Tm>gyYS} zr4O8@mk#2ivv$_%(S1fr@<`-IMa?VaW=BK4*>ffN4J`)KXj;%P;z<_iAhSOTm4^@Q z3B;hhaH5hAMm(E7#5_QK(|1;Za1CaEc0?%m92?A49b=h(AHCKQ*7iv!-62dAd>sLz zo@bk1Osv+u58#)(;b-MRSlZ5gjHobMsHXC;c$P|Zh7aeuC@+0bI11u3Y>xP%egxoA zd+;Gn;ej9|9G}*ppOuBqc=e8XN?*;$)3j11g4}P-MkNH+)?XQ2yQ9l;nSBkQjm5e- zxjU{A(Oj1Yg?vt&mn*IxO1?H2<5pV*8JH`(v#_0}y7cn6SseuY(GVy(gOXMAQ8EyX z*e|1Uojt%=;wAF_9dJ#*@S%#W>AMS91JAo^c=@NgKdfi{a9M< zP;)}MxRl!NiFgj-pJGkx{B{6%&bPkoV_`0<&mI>i)vAYcMqyuM_pwBk>&zeBA!6%C zr3B&%cFBuw!9NzpOD)K+zjvqoM9K*q`L}cREmlHJ7SeJ^0*DM}tKUNDRaL$U-}>tX zcDBK4dI*J$6U|2ldmr_gz0~`@#~FW633fVq6WPd;(sqe#coGjGR<&SC*Ou z`3&r6aY6MQB$7-TY+bUOhtq$r$Qk9nkd#>GRE=8;?X(5_Zd5#>&pJ-r7SnGE$BnV9 zW>$n5n;2NhX%YjEM+6{e&jN8`y=lK=Hef27tcuP7Kh2FTy6ckEr>8i!SE87lXq2IB zuK6A{>7LMT>S(|_6kjkF@=cj-8H7$Gmz4IO4OQAOdl~JYUw?M;{wH_g75h(XVQibQ~f#biQF3oxgj8)3{Vgsn%~|v@#@n)&h?VjLW`0X#+BDuQLa4m za*IQO-vUFXs5%7=vb7*l)wX;XRMJ^i(Cc>aa_M~Ce~AdSa6R+HOTD(=5W5|LL=E$7F7UJ zXjM`*tST>HyQe9Ze!}`}Ux=epdF7d>fHF9aXY^UXw*+(M z^`ovaJbnH?uf^(>s$?$4Jow|A>w=F1dhtuygSkCE@v&#KHSJ*4LlAkcIozsL*<;M0 z98j^$#5s-#l$PMH0}0Erupp^6`iL5F{OXqv&)kx^IaQ?v9D|P+t8L#=$aN`~jDAM1 z#*A8C^SqlTdbuD*>x#i))|PVj!{T3%i;2&VH|7)oHssqfigd^ZW)BjIov10hia8xO zrxBRB05XvQUSP1jCkMT2BB@;k_kE&sF%4xHKBA0#7JkYg4(cwHS~2Bw zc_6lY4{0@)DG3lzr%QYkiE&vymGnph2>0<5tkp&R-hu*x3d3w+Thn~Gl6SWi1K<9> zuBQy)1K-cN+~}3zp3pd67p-s)0o^`Pii?@fE#5knD|t!pF8><0Dch3yv_!yB(|(!5 zy@s*x74S9fy+L9A5Kqo3Zv$6>8u*!9$;Mi?)iX_O$o5^`AEy+?Dw+h=vTYA4`wi=9 zZl9i7s&I@aPFK_Le$@qt^H>f5jM47qB}%`bf|m^RFO6WZ}TY^Eew$288ahkGskbD0ADG-36ofz~N~Pt%~ib5VQ-*vJk* z6rnkL^PP&yU-mt!5_P*(_@M-KP9ayaPIVGYkc|8o?Z}=xH3oDdV*9SEL>1}w2{Wuz zE_O}=6=&p!{6L~{O8Y4GIiHRZ6eSepRN$6q+O#enBcVqAF{rM#`Z9oL%-3Q&Uy}Oc z@POg-^;@ZpDqF4XZC8M^kvE6sRMz?5qiV;``-2Z!Ij4NwRi)W(K;A68&v|5#$MG%l z+OwB^=OE)d{%ugV<_?qk;u4nCcek)HsIDSK%0-P>YReN<@`>iti{M6q7rO~=YP7KQZ%A?8htmVL2)8>`_)ZX~Wq(08jRB*?N(5mUC zY+L%o(tyAU#Pc-Nl$-0lqmGC0{m_f}j|+n<;xgq1(ms)d_=+R#`95*ln}=3yQ;IMx zVy}7T8twx6q1<7`99_LAw$XKJ^t@(9FeS2pvcwt$ElQC4ZqAo8(O5rm7@9k9sOe9fRgllz>%26_0M@2Uy0edM+ktrl0g zClo!pA|3h4F=D)8a(vN$=Hk5F!WeSny5PIy_O|x7(rUx`GlLHViw*~V6hScqd4^nxEwaqJjTIap`Y7Jka32$LMNUOw_*X=^tW9z@#MjA)pyG`Nbe7_=i>kRU zlhe1rf&zzI?;xZ&pObTk?gO>jp5^9e6|Q~`5+`@ySFoz#ri>(?;?W1+jI1K~j}z^{ zxh~OH+()^lw3h|uxgb@vJMIZ#26-H zNknh)N_u8DH)T+K+Cbo}B->W4k;#|e!iPS!t9(L$SQX|3TrVy=L4tG1*QC|Vs;uJq z^PEe@om^YGxtoM8Rm-Va#j{GTY;ONF8nHMcl`$+g{^PO= zDrIY^D1Z5##r_k~!`4F!&oTkj>s&lU_|AD=XwjQ1bdjQ$0UA$Iye@ZnM2Ehx&Dk!t z&IM45U8F<=NMPpeM8~;fxiNQt`|q-#O?FMT^*m4KL>4`)b<73e8m&62>KLYdeCZDK z5D)-lQ(f0mL3>JHDM-sk6|)^tuepJO80ikj&AbCu&E0c-z>Tdi_Ny<^8Kbh?0%SYl4EtAudOlQ7~qq@Qnw%@ zp$n2IG53Vo-hi^j3pdoB^`)PtN=Q1Ii#eDKXHG7Yj9!rVWT`)1oz)O|3RIsg_75el z%hT=w5MZ$ij*U*fzseao9|#<`iQz3XH@Neuv9=%)xB=+IH&c;+jW<}E``EJX+ySN zWrt-|Qrk*@zu?l$y8arhHt{th(5J2?w}`#tRh(DAe5UNkwm~|GjZF|q)XEb zGDxG?L-tQ{%%c}WC%dmozm(OtZxNT@RUK12c!fam7|*F(mshyX-W(o|62LtkM?E=; z1u`WY25KW~i&Av6UU6#KyCID|*RQc%V|~YdIWR?>Od+HL4=}9A~FMp~UjxDcPfdU)W zCeFjMfpRNPIolFLR?&a5#YQ&Wt!ay_tYiz?sr1vA7({tH-jX{3*le!qcwN%zqY~p^ zPJun#LOe|qz>4}WIm)?lVMF7&#dySesEiwb(XD|WM_gq#2sOsSAq&|o5ao!w9U|16 z<4MKj#8%GDXFQ8v)Ye|33`FQttrGafJ}E1Wc|eNC#Mkup&8NT#YCm{g54k67O<$tU zWNN_xdPiBoFJ8KxSPRGrr5ITLXeMSxz4lvUZF%~U+?d;ZDmiYGY(={tz-o)%{J7RG z9_~VbIB&;4wA0Z%WA16Xvjo*x<~|bFrx%-Wd?Rz(57|;>65SbACwQ^F>#DR`3hV3{ z_#2-A@iWka@>*(PDly$WXR)AGsu%VGF*rF zOFVmxw0A#@*YH;^@sGN3^ruAK@{z?DWbGZr(?WdS&{J}5F>hfp-skx>)hc`T&L@lUpmCC>s_NuL)(Vcn* z9sM0zWbaDXz@hn@rG-t)_S@x|^^Yz+6MGi5^Q5%c5PJr5N)nui@NE);fh-xPhLX_W z9|9%;Hom&7I)}LoyCSn4*?MaujA`wWRKjj4vdUg6;CT|ziysJlB}%OaubcImdsZFV z$aB0w^w6bd^9o`&HORNeZyu)xITi9_b3%mO4{MLiRT*o-0b$t^L;xT?kK?qO?+ZVzb$9^ zdyfgbe&QUGRE@*igM(9{FKb3GDde`nQ7T(cQEvy*UoD@7eW1PYPs0`_O+X^X)PKsR zuGo0U052B_zwEni8Rz&}=7C^}OZv504`<a%v+35OJUY_ve zIpll0^H1$TPSrzhP)hP|0|^kTHC=4`3gCI*%_O5(&1+z`?G+IqxY#?bQ`j>EWEl_* zL=ERI(6s@o1yob%@qG#CD(#fV!#1paSjyU-k?M6C6_CNFV^sms)QVlsQEJ~u@_yl> zR*Z~EDW}5*q|v6Z@%=&#o||*UFo3lKkST^2W`B)5_UqBaU1Y1QNg6Vrz^9M#J1&cw%u3IejzuU zO>Yq5l7z^U08047rlqg8Gx=fmyMgUPQV;>K(;tF>0xkA|@X!LqUtghvMLVA`$l=Bx zEYDr6cx9fdH56saU#DxnS*!w1>=Z#~>kVZGfadNZb%v3ZCx!WYG^5O7!G)C{7V1rh zGc3E$21-I%riGqfrQ)BQ6CIb7aQPKNxpYNbf3-@3ek%^cmnq3Q4C(tAT_De+sF69adDri##LG7t&d8h;ORgl1-Nqe|>E@euLMI z<=(wlU9~c~F-Cex#+qIyXV^cCNU4#tZ8EjKej>}k2i~T$b&5n>v9&eYhF?S$^r}ws zpNTZP<~dlnv2;QE;+1zn-{)PmvcK5G50s)uF3h(M^3%6yKIYH}W%SR(*iARnmrZGh z#@%cZ8zTgI5T+t`eeSA$b)K>12OWO@`P$6eHuui47k{!peC2gX7&sbzw9r(jcA{aF z<7Vv7rQXtx#)iV7g+I=r5M!HRLD!JIv&|E7w!cR;sGH-DAXfA{?uVUcukDIto=iT& ztw(V6=GSABYRhWMUH_(cW-&$DzZP=NrmlxB(r~e1GKv%2X`^Y{R^*+eI;^0lBI`<@ z(l*A17C^vkF56_dPYu^#;xqPO*_1zQH0>{I4gLk6=O#I{huTk9(hE0MMc_ANLw#Oi z5brM&%r5Hb$(_HRdcIf$V!A7$aGi*Zn|$>9$9?|7-&X959RClQ>K;d@!KU3u%dQ(n zOOS8Wf8fx$idYE0DaS#U$*nQ#qP)!6HH*$r2}}#Y7O5-@8|S`ByDk@)zcv5-Or=nb znG<-M{LOL;N1oA{)#IY9=OK7-jgGgTVokxa0@s)-`n+tgZR?N;Y3F&S{nlG>+lB2i zdDdW0UH)>QA7O|&HZ1e5*WmPBP4s);qWFczG_j?gmesD70;_)QBHtgfYxlA%(#X&D ztQ(i-!{hV!99mWyhntCK6zYBc^!d5<9Y)Ml?E3UfKO9tT?lGu=K2O*?I7XF-akJr6 zN-pRSyJ%l$7v^&~H|egPDj!#&ZIURY{El0S(&*l6X1ZJDu_*6PUeedwFPO%gj?46M z3IwET;P+KP#-kuyaI;sX4Geo4J}t~NVb6ki93z)o@@2Sk2FSE5x((bATB~up`_mNy z@f@_Uf8WDR_ZC6rN!)C% zw5Ezhn-e~u<6l}PVdIy1GpcVfPRXCza95(fuTk(=H;m-t?~>%Xg1PMtUYX|vl{1#_q#DN;?2Oe)jqr|g@y~oX z;X9l|yz}#*+g-et1o31|IpDod#>K`n~@7!=MEKqbyg%HIp1)4 zu)ONQ9oZ9^4Hn+lUJZ3~(>)Df$3?T9Pq2xVIm^msmi5^4xl{}6AN^wXVt6L%vSM&e z&;4XQtoFEpO;AGi#TyUiZCx{KtmG78Jg#3!>jl3;N3&kOxbg6#?4_Qh>heBLi$yC@ zM-!7*Og-L;}HRuusuMEa{~WsP$G{%vVjGEzY<)^(N;g(-&+?p z?OY62Q{)^*Ul#C=+q-d9LX6M6*7P)A{R>MOZ&dHKK8iqNao9*efJL*|^-g=&!wN$M zzD_ykq=Nb~JIkB0lCx=JimElKQ4Wa?h8Le4=@4>NxTvOdn6C>G)N$Iic-Ql3<9Ohz zA|KGyXmH~cFu;!G&pP#>zyc8c_K+n086>;*`?yPJAC>p$P<7L?n-rz7gWE@JI`c3FEeXgx9ul}?)N_cUn@6usJlxEDg4d+V^Mys(Cu6pDMa%Kh+>_BPJj z$D6C2UKJz=|F-VFB;h-ybxCfac7Vl1*;ZQtG=E-G?Ht24+;#J8v9i9W^M=MN;PoOO z!YPNV^3UzG!IXa7W%;Uh7Pk*F3(NCRo{t3+KqF_=eE=~U_@4FuO#C^_xT)*pjaQgsX zFC23m=W%||Z+t%QW1t2Vj@J>CIT}wnX?OIww{f7?QOY{iPPK;ITBok(2t`9RlA@mo zB7J$c9oF;%_TG{}*-o{@!KlA>=dyZ|YEymtHAZI0Iz?B^l`qDZ+!27$}{Tvq2UK$Q}p#|p3muU$n0Y%$3 zMbhJ@kWm(>@pc|sa!SEN{Vp)Ku(7YKN%Pme$W#{~07@nu zg|Kf334E#*TEYRTSS2y{uU4)U*m;ctzSqp%AX{_;xqt||PlWxM(R1tKyeg?u(DNI1 z5rQ_AOR;Y}TZ6|EgXCuJ)jfVzfNUl^rYJrd0w#`HgF0K(B;#8Z!Euf%FAI{{~%&hnoV>ORRDmfqk@UdNZ*41?Hes z3{CCb+qp|}Vf9yhd|~wfPIN+sfB!0Cb6L6MiI%2=#O+V9sDcWP{z47jZ!8HqC8g?~X$@&cD~t*M1`-ipcisc9z+6 zMXCnU`NOy~yJ+UgmW)IsZ{qY%IK}uk^mVv{@6JFmEdp=SmQ~#=Pq^~}o$Od$s)eS^LkwR~@I@|9c64ncpuL1=HUZxiv2*S}x_Q zJ*^c9W@0|BcE*_PR3)dWI!w}Arz!;!Gwp%9tDn8-b}Btdw(Bft)4Ux|lCxu*z89@W zL)Qy^kOVXy%Rp}YJFf}Z_^UYHQxg&l8&w`czn##hnYey6K%DaP0#mP*uR58l*lTP` zghMuk5$52%m+*(@lnG3|6OrptlEZ~9?V-`o_?jP;IBUSf2pc4&>zcIYU!7bVnSxY6ydqpfGT{q#7Et{W`n`B3|OJ>q`;T*mJK% z_ZR=r`VeSKHx2}KFnXweT*OA3Hl3hH8n{l|YP=Ozu=iyt1x$7R1fB;G=cc`z!)JW# zALmoqT*VQ3oM_XcxHXm`CdmpUyu}iO%|3HuU1}-|3%Tn$^q_tE0o&|OyE-LDSQOFKY42AZIgjdymVi@(?%fu*Q`6abp97D z>TA&ue(30DV@~6{UIUzbv)(j!xJ1JmIf|2fMP@U|CCUWz09>O*0U-umq5_WE#BkBP( z#;Lrg7_MW9E$q$sPkiyy8b(^HA(ymaXiF2X7q;v2@6EiNnO2F<6%MEG1c2rnmY+-C zx=l(6{ev~MDG>EcG3>$Oml?*1N*_^*VuGFqBjY57-u#a8F)goP6`(x23Jr0rX1|!< zISQ8_B3-nqy${$*gij)_t2sDDdBB+gwe}x%id|9hImca%u$~k^c8tzuv{;Hi(R}u> z&BEtt>4ad*pV^%s9z0#49O5)L5gI2yGvc0%$9|t%e_SUjLY@Aaxk*-bKuvk8PsDR# z;09zgaROipaJN?VU%u0yBYDl(qys!2BM@qBdMNx2A2yPsCt7IEIN2&5ig@Fr4cOPe zjv1_2nB~iYe66!Sa*GQW_{o#wQ^osNGOB&%rLdmBg@w{NfP)l}YsrbpH89seTNQ>& zWW4zl>r5rIa;N-##;bK|_W{DCvx@ptEmtvg5viM=q4z=cN1Gd-59HJcv*9flAJP_E z!d>LP=7&n8^fY+QHv-m{@}~6<#bgaSaahLrYHzY~n+mYy8V85L2?My&~`R=$3H zCh1OEI-4^u_FKP;6c`u2lC(hHJ03q? zW7>cz5yo`nn?quIFsv!O<a~_gnpEoF4x~w8Y z;R?)eckI-+SyCrWzSL{%gr!+{?LHwG#%urCL=$vIm!O+SPx`X&so6!~&*4bbwJFgv z9&Uofdh*gvK+-Pu@K#Xr7x9G&Em@wNwNn(Yzo00vquC$JXb};esiYtJ{GM_=Zn6p- ztPYd|Iw8AH;wPerGEr{ZU@EjY_$MxqfUMjSw6+8^v1K1 z&)qN1P4HDmeG3Q-B0q?ZQ>ur7cq_ey6+D9YUIcrvRObzz*$c=IyQDF2_tAO>^yx?W zH3=%`3oTuJ5tuOdnY}p7i&-W;2&Z-mFn}xq61M!D99tp!IQ8?-JE@?F4NZ9A>5p^1 zN`~AhFRTpLFM{PqY}3Chx1SYqO7f)aB1`DBWh;472{0xH<+%%wTW&h1Eb7Wlz4!t_ z`hNH9y4UlrQYXbcvv;4usXMo^6d$>0()4U2H@>N~Epa>031pK(r&Hf!Aw zS@?JcTKN>_|A2W=rz__<6QYzvz}=lU`gs5gG9CN;pbjSt3^qT^mj67s^uSjJE!V1U4Q_|j&6tN!)_>Nv5fXX! z&7>!KQukLn!?jf`^Sg`bU%pY6-xFLlPb~gSPyB{U&we>~Zc&ynx>-cG3kNpyT9o`@ zOo5~gjc2%Thnavx)ko0{GnjUcbL^N9(s;r{An8ThpyfP;+XtVFkdVi&k%4+Xbs{x+ zz*yJXCoZUt%%)Id)}oPC4Sj#pD4l`7D7VrqF0__RjEmt}+noF+t7!be`r9%FHxv5@ zpjW(uB2+E~PB1E!FEgLnYpL>73yH7%wiY4opKHNG#R+%!qOdt--?oj)G$ zydiw-{BvQ337qAaaatU{&r7K%udGE6DWrNzh{WDdE~r#=gxO9UrfF$CFm<+&QE>;atXHTPI>` zgDV|>+t87M9On@_OLjcyGU=i8jBM0AR9@9jCwsa7@pMT1+v(w!{2pqu^IX7aMD^f_ zdGPTVFz(C{{AkEFl%CD9Y>tLJ`@%syOmqr?8dyq~tPDGgPcgKEP?zQoFN}aW|Xj=swk#=bJL!4`7yVU;o-d)53xL`Dw&W zL}G1e7_(qkdrZ3yjFZmn5+WKZt}suOd=33{4?4y1j4()K=pm@B88&LyqFEG#Yk z9u5A5%QLYC3htz(22>l^U*n{e+{Yx7Iqq3$R>KeEWqC}k5Yro%sJuG_uE@SiB6-00 z&s|noo1_&ny~#?1_K}mDXr889Vtw$hyIlQa$HX^IkQ#m~j5~I(_~=}RZXi$~_(@QL zh~_k;_Q{J$%L6;;A~Mm zOD^?@v=LeT*)5yrx#89K<|dpHm?|@bp{jUaHYCcbokBnEl~NQhA{-~L1EMbj4DFfv z#a3B5r2D3KeQ|j6=nB`IMS|dp#X*kZ=#d3Ghs9~FW>+i)1zQwD*SxGXb$>%A#|y{Q zmD__$+~KX=kVTzY$J*5yoYC=OKD~0f zksBuG;zXzSWwKsBOzvi8CnSKnGA!ltlpAT7;}r~I25PTPAQcZ$PVu#kX_n?tUjT2A zv(s!DN6?>PmtjD02D7m+s%6|Ybw>;$FcBt&BI2COuZO8zRy18eS2g9^Lkw=MRA9T|X#D?qZsg^@Pw(-0( z35taydC2F{lnGAjjzs9jNoV#Um8VWJ7bB?9B$U zdMm1@_XX*NRf6(tP z#6p)dvtIA_B{rSm@Reg%*MkH}R|B^2n}xlD)ar%%S+ip2iX1?Cf@=mjh2udL7v=O5 zF0PgGeH>!QkU$C2 zm}>`wmUlo9^6Ua8_K?Ftd3e_1U_Ti;%l4NC%Q4IKC1It&I7K}ZB^m4kGJM#p%XhZe zNCc;IZ-4{4I95!)5#9u6!f4()i`;q|l+5I+A0t?gOvNZqi=R8xuWa3Ee zl}WY zvDTS~JUXgINfR7|lSO_3z}yzDHcD0#87_~ixvA+8Vr2OJi9o7dgycloZ6d|Mjn0qI zj#Zb58iYepwJuK`Dqj#bVuCqF9P`)I(A z3A)V&48X{qKCgRm?HZ9k^P8<;6lq6->6f<4jPJd8q6v~Zf6E2o@*z?;){OS11 z-sRiy)#kc(9u=D{X(-BWwAvo@X^t)84n6>r`rVI6>u_|RD7u((F@V7 zf|r9@OlY|G+F|IY8yPgnyjWlWWZX>$L3tVUam}_s?R~=Qike&mYNAwR4Fl&{yG--l z6bGgS8QxGJ?Hvi`mF7*j8_&LMaDeO=!wrqI)U13389m2v=8?-0*1eRS7gOJ?7f%+`{A@~T}!mu5m6c{OA z))Ng^d{*hwq3ZCW#d>62`9vCNka+9fekLx$fPhgrzL6F57O98Q7wLfdG$XnF>lFCJ zostRvZuh9Ka$3hPVrA($8eSeO2}=l~`tZ=iVoDq?WBOH;+sZ`h@myWr`)`;JiWd9t zv|94Te>z1Z7xd?&h)B{!ckYWr{1F~Sgi0_Q&Yt5KYUnG=<-wp8=EMpOC$5OV4-+Ji z0L(-3{IUJY3cAi>5`%5Gja(wpgvWOLzm|@jEWnsw29{avEU6;ENqbv=z`q(diM4!E;EMaB10m$?G3kk8I2=)FWV>chJ z$;dA}2i7#|>`{b`*YiWntB`gf6M0yFP*6FWQQrRggBZYA;q~11oV^UP-CMe1|6A>< zO!*ct`X+p>IPi9`)guTV zrDVEGmVTad&@)I5n9O#`3f+uKb{Cn@{Qjw*y@5tH>1kXx2}sK>4Dz)W^PoJ*=_`;m zdEMnu!APU~XkMx3t!domYUmFTk{imD3T99!-bR?Kw`nxjgSj!`{&L||fNr;_X+rA! z)zds-2>FE+FmVJ#H&DeSD<0r6(wK6{nf}RvV`xkb+9L3>Z!jpF0EC)_uglqDw!`|Y z2oX<{<^!&&Hv_6|8mjH;4QOs9a-nLRkO0ck%s`8fj_DiRu^H4$DwPM`4W*+K5f?UX zZC9xF3iy6!$`=`;H?sy&Ovjbi=g$Gpj6zlQt{kATvZ9<}LM=vTKk9_XzZ1meBoJK*c-?QHwx&VyZs>M2wJQ=m-iWPd5i+IQAm{oa(>}z^YH*$oAwx z3_FCFRG;--D`)YI#pcGjA6YQTc;x<+Pw68`7T6yF`TZ zj%>%TIxa@QW-1%0al+=Htvr4hddFqe@a(tG;j3&8(6`!nruBgwuHrM6wSp373bmmw z%+oW$FS0%I;~EZ=OjfDX1SL0!r~vm+xiHtjS&r5rv|%J-dyOic7XBO9bWq(exwEn_ zfb!x;M+Ejq>}^e;BSP)x|JFpxf^XP8xG4u5*@`|D*uDskk9GS2Fq<6kUd1id+KvkO5yrg|3-fZ5T@%Y6L9VQ%8e&mzt^KyE01@l zsDj?|nf);|D%s6DLDKY|&;Ypx#G8v_sCI_163m{QW>TsO=G6r8trgJ8sFVK853>(({fAkFg37VA1@i?;?6MpFP|g&D~38lb2ykx%WC z8>z0XJ;y8ZfI7Xwx;x!#0;=7}3D?6@f%!s@hXAcxTR$|if zxk@d?0fqC+y*0OzRplUCvT3`>NLiHDR<}~fC{pRTw|eI5vB5g9L~bm$ra(+wz_s!J zs@^#gj8w&xLF*G_5Q9rW!$MOaD>X=#(~M^iC9kadAk;gav!4|}%n7VdGDK6dIfH$z zR|*hU5Ku5)1s3y%$R6Mj4uNE`hw1db6p-QNHw zxDLm7yaM9*B09YG26?SHjRg~LoaRR^-&Y*sHM-{C_34NND>sxa$w6yY3?I8L&Q|Z0 z`#o%}Zr{$T^ z%e$IhWBaUSjuX4QoK$JIKzhZp6?v;I;;(EsGFb^N_Jh z+Ne$6_X}?xKZ8R+nWX7D zdH@bbN+_yaNZ$39cX~LGvwV+NtZPYUPd^N5Ef^KfFnY_4Fi;oc%DrSOccwfwB?>v? zC*> zPNdSM7R`(^1(mao+J&+Rt>?RyWfLE+PPq;}X@EVFLR9skR&5nlZXp@-AJlQ6U-C-u`1MyDq@I+dX?STQ97&g0NeNw>1w0`A(DcrmW?~8{w~&tMuZ(oi^D)*|{)T zZrr@&zg9XJ5auC0pf$btYo0;0b`g*V!(iH^KzJ6Xb=*dC;kG|{Ba!p81`_VTYpKZI z6GNl{V&G`ktCNQR{^|uf$@m!sn{cP_P7yHWOCi#@<_0(9R)P*k;9XPiEMb`WB6>Zr zVv)v}BYl4lR;dN?v;ohNCfwj;CekS@6fW)xdZs^Y%8j()MmPI!IO3;{1)*CPjXPHT zddGN(@Hs_~W2gXg&tM@+c3{+_x6a&h-_`LYtl>uaH{Q&kqX{EkQ_HSnB^vTl%Vwsq zRomanxo;~}dd@<*#oPGlHr1K|o6C<4-RCToJ2ZfsEXGkLFakEudLfIuLay4z>uNN- z=Oip^)E7^fZwtFR18Z4E8}YnER+^22elm3S=DL-mR{T?C5fYljma+MJiM)nVo8tqb z8)^kS6&n~b=)90On>_<68(-u9Xm7g&40{@%cBN_Mi6Gp#d+2<+GO z3UhMQE%dEDlPCno!}+uVU73yFPOXbZHm`2v%}KY=^1{Eb>VWR#?fXYV9*J%Era$$I z2!FW0_BjJ2K4H99f1wcMt<*dQzj{(^Cu|{=0dp8^^_LM!FVsfoiP6Z}NTBlqxH8s3 z{$!Q5`A9crN-^cDfVbV-kb$SyXXs=} zrxYUv#lkLTvO@)Kfn>BHYk;D;UH2gDnKcD^1i&0JrgJz4$Jqxs&4g)^mB*K z4%6PQxDAtwpqW^Ayl9sQ>&tVIdA!QV^yXsS=E0=1P4sQAqmMv-o=N?`Rv1PgLjsaM z1~Q+%A*cfl1hqIGOR`9~-*!%gVJBBHTS&fkTw`&s5(5 zb2?;DBi@l~^^1kFJntVzg36IwE`R*hCAn5FlXv~z&C;yjK_4E(#U_K;K(G+3D4Iu3 zEi?2g*$AFdBU5*kIzidqPrnu42WR*iuu93akQLlM2U0U*jnwcpKo+-w0t5#`MRc{2-KmR1Zw2G6HuBI8C%s2VB* z>P)#l^jjzWLs7s;xRxE+HyEo2sOGq80vN<>4FDbVB%h61MCH;wP?Mk80K*iBpu<}D$qZD9_yqG(jpKWF}lw%77R*nZ;2LN7)~Q!C0)#^ba#xHHS_$w%~nuw=9CKI z2D+*4xXk9?a4x|3p#GrbjFW1f$zZGbz=QNfj{-)gC&tdOihD0HQ1b~S&0=HsE5uWf z%;Y$`uKsT(k7TjmP2$C zF~n_0fBVB9R|A|G4>JKA*8xIO=BV)mk*fjXDZsE;4DHR!)cd3=7SU(r;Tjh+NEi^a zK$_8K)zum2BF6{~aT*3>><62ukM0b>mR_}#KntX+>M_kBE>6nGb7>K#VZw@mL%G>Z zqO2k2GohTU^Dc*;icK{${Q~7%(SG&qV{uIjFsHZM~*a)t#P% zPt*47eo@&BfpM^|V{X?KH3U||o4h{m44wvQ0v(evKw4T7e|=8INP33S2f&955Pkdj zI`}Ui8_S5%FkxoKNfqTRk;-xGAR{=pGDud zZ^Ac9;zu&aJbUb1GYbii3OKJKfTKYaNu0wjE0iNHlR|xmI>BVXK0Az|94aS}u}hO4 z3x9d3MmE(0j^KYGFI%nR;6(AKfDR3rQM7`qCkT-dLsEk>MpxDgf=6>>W$R(_Oi`Fy z_H1EwmACCzsW0wE^yxS@2JgMH3{*))4JmW`__73?Y zTRByNKyr{W+uF!3XO2tY>g|=OmbC6z;SNhMd^B@F#9)3b3z%*EGqvm^Jg6i>f`Hqq z`iu{Xv736$K83dXTp$dsZghYAC_h9pKC7!~4TB7ivb2kLnt4yl#!ml0k|#ak!CC8~ z;VeX}%!RzQ@CS&y#~aD&{Hp<+kb3UBrIZddyVB`hE2EMZo{hD17Ep(1v>-K=XG*R9 zfM0tsJE?tT8_5JlkMeYm)Q4!}Zb~c1X`#ykeF@&4Y?#BUtxV+PQ^7;f1+9p1io;}p6)StWi;J}1rBdFCQXdj$$h1`t~*Ni%XHarG`s3=Jeo%dM3Z!^Sh*o7OV>|bfxw%*_&M#k|4 zc^0~T_*z~m;)_=VObn3F?87OB(WbDM_cY}^HaY&A(HElsCYYXZTa_WnUs+_n}lpf+pavF5pP!G83;D}{UO zsS>0@(0|wv0cOX46KH=xtWGHn8)p|o9a2^VhZl*WCpi$IH@nU(Ekq7ql0Un_XYKPM zD7wm)vWfymYpF`De(SgT1cG(XN8auw_E9Wi6*u|&=iLz<8m`>o$R7ZSFvuv)Gm*-r z2f6Z>V1RZ6ky5@M&vSez>aidHJA-8&E^QPg|Bk_v71{x)L)3kU*0~*I>hNcl;D$kU zttF~AvJUK*dSmKz5Y^VzjGY?+8|%Nbjkz~RFT>Hjd93)R9n=Qagro>(B`C8lR*yJwg3KJ!PG!X7&pCU#cT<@tnz7?` z2*uDYlCUKE>rkU50$?Dld#o|BF`u!Tp2n`G&9{Te_z6YqPoOLBPA?j)t1|PPqGR)fBK(|wjzGsB($)n zAV|sH<~69rHw4Q8*k}j=g~nF5x0RmmrX3WnT9V3Qr#b-yHu74!bsq2XBV(Jtty1Ss2dE> zoLI(ldp|H_AE;nO`AhHfg~2jct6;|q_XILf54-6dy56G@#T&*@g^-#mTcylqrFQuZ z`FFzDxW$QP%q~29xJ1Wbl1(?#zn(y{vn8HQki%Z!P%vPeb+MzS1z|C#bvv$1zjg4f z#F%~L*7cY-DtK#e%9g}seHdo+R5uH7^%vtma{{f47 z;`*xpe-!9n1Zn3#>R+7N3-`_F&r02ttq(7EE@xXeVihh=E{`iOq8|b9S=W64Sy}am z?P?+TuoYlC{R?IOZ=7q@ogk7K?bxf4;4|$e9A5Qe;NAet;p4CGUISZ~N3E9=7ap^k z-CA--qkj>(OTxi^$16CDt!NkXi0uD)FP^D&!H02|y2osnpMzH~XMjV{W-TwqEZ^czSG&5LyZW;ocXblibhU4Jsd*6i z7kT{eFTEemkAYV-0jGntu3ok)oRH4`ie&p?9_1lO2|`P&}<&+9t@ z6>uQlUEm+)!T*sT{(Y;PkuTzzPBY*fm59GRwg0^T|AD{$>xx@Hv{MbjyPIJ2cQ4^y zDoW182K*mbWD)Rbz6#bybBZIjrpFSQ0Q{&&(<`CIBHX!Te?hW;DRQ{aV?$=+5gLHo zmInWQ;#)2!n`p|tJS?33y)|>3lTMB3zW|7l+qjF@tcLqRFQv9W0Fy8OIMTGv zbt>RFvck42_D5>sY?IH9oV3EHabyoy>Y*npn3|+dJNV=?8+RRiv&ws8+wv>Mb*CM@x^i^b<~!O?{6 zE46U*;V=%Qy5@b4Vs#$}emwfR3_`SX|^X(NDN_1;PNv#?%VzTGc({2fYrckcPf!+>(u2(Wg@AKWxJSDoWT zB;oth&(~*h4A#pz6{4fBR9<;L5?9+hmt{N{hwJkow0#6ogn8@L#m-K@{GZM3-!mR_ z0S>2oIG$|)4j+mH$f{d2BK+}S93-_7*!e+Es-mKU#)>V*ngO8mc4BL7$M>hbe1*?( zh|WeFFSgmz;(1n^<$)#cbh$YLw?PZ^897hZVDny#$L3!(#a1JrY5F}9N;Hw>31B#X z7bNV5P@e<0<5ZR{cTeqv#S9(iy*}akS;S0+N|iW~R4nYASlAajXR-5h;vhAA=KJq( z9@*E&r$E+?RQD*Y>*qAcJ4$XOiSD8h`j{sJkZ8|ZC_6$~*Qy`)Lxwy=BiFRCSQm?f zjP0ZHU}Uar)z<#$?)U`iQP$d`I`FbNvtajb(n%K)&(Cz<$ig5qs z{>}pHvMV35Xgfimbzv_YV9a)-<|zQ*^cD`A3WaY%?ATVHQtt1X5tTJqI0*bpbR?2>^>NcUIOd6MY;2 z43jalct0>py6ka3fZA*3+NO3p-A`@(E;mmbw+d&L5r1ONxqGUIbPdW>ecBTTS;1Z4 zGvZ&5rt=z(ad9~3V$<;$$(Lg%161V2S#X=O81o06A=#j_IkT%?!`nhM1 zj?vnI`StD8$W`SFsyJ*Xj)3s@3I7ehh0fX95GH8gSF*@1{@^F7ecZeD{A{Ato#Yy@ z74i2HbI%vIalBc=7kb|#!)X+?QORu3SKuq0$MWhyA{ki?4p}arMyn(6#If@)c2_rz z8cW&JpV)!BsMCVv^@ zPi~McyC(*`s}G`==~;d;W)h?|%xi4sv76BOGTY-ao6Ca!#=$EP&oL+L{2NbA=X8D# zr6SCiIKeV;FT2N z?3x|itDiHRYdCO=OvoQdEqif5SAV^%R)pD)H`#}mZ`dx1cn%LMgMR(lXqa-3s-VV7 zAmsrh@P<#oNdT*8D>Gu!TF!c#$zDNy9eaKHy~Xk+KsjBJ>+uAnbVpmS=LYXJkF*92 zvc;~k9d8JWq9wu*Co^W-(hGBCNv|vIJ{bdpJREjbHSYcZO``0M-@pbVQLNnW$sa35 zR#K;ni2-sPMw72ad+J70Z#$|0=n0=w=DhlZT0=Asy?6dW`WVb%Hj5q~-g%dTs{FIogNW0RHmlTl46AKer3D5NXL{CS~6B<(rb_b~Uo z>=k#5TZw+vq2ru4ZUU}ZMROfDQ2A?jgeTeA{29>RtquvUTw+CAKhWG={(_?(%Ns+_ z;jt^k!JJczhEvCoUvwuDXz8obMsBQcDSN^^aAXnrqfghMJa2^)A2C^iG>8=av`k~Z z+&Z@{W_=q7#EeyB6#ZU#;1YjxF5dvBE_O*75;?(av*|*JQsU^3I$+fb&9l5ae80Jk3& zDt@9;Y+uiEnaVJ~yA7NV;8{_@E2dl}NVViRd6TU*6R(v46FBhE@;y6T}OqO7gK|69V4XlbHSXenLpO(PGLK}?+)O0s^kOXt(}(6 z3+(D7(k|JYEjzSCL;*(v3vJc3Zk;LFg)M)M{t~<281ZyVA9FC8dk9g?cO!e%)Th`p zCMW;9{C@4UoDfLb54xjEXJypXR~v^RRWK+cfxkXJ@W z;JsiDn#yUW<53;$8Fk`_96l?(vc_xqvIAbpOSk5Ca17vwl^-PE#o+A9mT!f|CIY$H zhpC^NCsGpdtbC$oWox4Y--(oDJJU_E?S1tu>sXe*rf$YWkdAVLf5QLWAK5U<(hvTs zlPCmMJgko%&bOqubhMApe2UCz z21Z+a-v#r?iU0hxAPvKGOn{ysezi3P)8~|}CL{&m z293Zvh|_7V%C9;$v3Me_>864VlS4K+0_C-@2$>{+cI!@JAmi(YUW~o%*uCaTla+`H<-u=jKk>)lMOWPjW_ywz@G-x#( zA4Mihq)PkfOPw~fsjY}Ij~Io@O^JSJGp^)7rnjc2xZ!7jbR}2gIMrwZ*IHEGm?VDy z1OT!5?59gK{`7ZIaTqD?k76lugzzxz?hwq@Y}e?A2UoIhgaltX@j+=@e=%g5_P`AY zXq=0f{SE5j^zx~Ym5jrw7XiRp)U5`PN0qj$t1BE9P@%eSZ9=9OEWGK`sy1+taUPvX zDE}@4bG2~jdvoaXJm%uxpcin@7XeduP45QfQ@thYJ<@dkjABNX$DpjwcGpu&7eFp( zqw8)uIX++4#*Grd>fq+Day<-d?ae=~QnHL@YYEmGI?;=2$cUeQhrRN|YX*GH)aB-# z)xSsM5B=U{n;3|^QGg_4l8k7RS1WYg$g?Z?Y-_c+ry}Ag8arL6-fB%X!X8gys3%sH z5ufD=Knev`(LCr!QmhdE=XV(bBYwMRZ|TeO2U52_%FTr&VDX#ky^)xUl;fALwVo3t3EUWJTE{9%g1>5iT`ikHS zcUBu801zG*xX5{t^_YT1GEUMd`~H30exx~I2oO?{`_?`^KZUSM%bc=6mdYRBp$nig zbqA0_YBSCGOuy$qcKFTh0)Sl)3c#N>&K_j_oI;>ELi(T<)xWNQt8g~*>f>w3UD>c! z*C~fh)ZRtXxSzyMko3aUDUofb-1N#7bX>~4{fnr#TJP@Eo^)bRh1Wu~c>n4G$g6ZE zGFQ{ptm4hzX{#cJDU%LE2+dr?-m!1ar|QrAo&XwYL!3Con%Qta1=XA?TnWS{+|>+J zhNz+V@zXqpbhkFp?sCI-|eoU6eh@sxDd-4_~VZ92kDpT{p|OM zd^}tCx#~d=@v|O(WjMsordVE8KrMpBiB2&@b|iYr`}Bjth%2L68^RXb`5eG1Y1l3= zGiu;ZE87?w1o=Tm*k0nInS_jvr|IStmDL8{0jCnVIKpq7WCjt9)^(e%6%a1@*7-lF z4ymEcgDOQuc?l~)@%Z0Yqt=6vdAX~PQ8&)Sno>mLs0j6TPkFn!Y*ga|UCP%bhJMMwqq>bU7-<@1%FW zI#UT=)eL7s?vh8{TuBl(<~-asdN{mm7?}KwmOp`aRSlhdR!JvOz>Lh#!5H+slvn;x zl<1PIOugh=bzQ!@y|!cWkWvqH$F_ZWRsDi13!%OG#`#FRQ&yi~e1Gi~Dm*?|jbx~S zsGK#EO9N2CoNm=d1>GfyA-ycUF>}TBjVrxYz*x56Hwv1_;9i;&MV zxG8?BvOk`z4ec98$S0Z`h*{UA~yK!=1tpK|cN3Ww)C z+1Gg&qDH{CMz5ZPE)yeed7GyEu2dx12$*A9fyl^riFBgayi>4#k(PQiiq~$YR`$Z! zKw_a_S^?FzQ4Vn;48fpp9noEbkKcDbIS$4g5SV(oFol!fIx1|@_dy#&1fdS#_wg!G z5OVqKJDIBwPd-@w1nu?V(k1<~%o7Mu@UO z^C!HylCL4ghYjKSHf;=3ad}hXlcoMuf@fufj{en+Up-9R?A2WLna;?p!LP5exa97= z4aAp{E6)6BVfk_HV;+w!hk+7KsYZ=@(QNc>RCro}ul>51@|>}hs@9<3Q1JQ(Gq@7G zU?|RIDtgahOt;lP$J|Vmiuls|oZgm>&)PA*>L~K@x5;n6Jm5(#M~pMz=aA6&QJ5GB zpr7(o_t^}yn5=(x&flQuy6)qZ>3>Vx6(;3c%dCyb82-IN9Pn#LHVlyO6$!WY+}C`z zmNCa$-&J4n!!E*qh;BZ)T$iV%X0w<9z&u<{O;s~ML#hq^mrW;`Skl!_oDl{Xrp+E- zpJq{38S&_mH0qNNqIM*?Hk+e1C6eW=r3dQjI0)nkll*5ba@*Y55vZKU!RJnHC64oP zK6K7669P5pm!PgIa%5W@OO<8qOjwam_C|+FqKkJ}?V>$_z)mKc|@UC}2X?B1U2AQJZM8p^a7B0#&q4RKgy|Tx$$Tt^d z)d#TLkK@(Erzj|b*FOgq57f(hjMN=-s`8qU)NMX9fp9jo7rXJHSM3R zSRgnWZ0SH_fcX_1zR8k`)#g%AoQKs z1{I~$wm6^$4RRX?P9AuxJl{1Y(?M5fn_a$(4Doz_{W)zH!1xQIF9`obL){PH`%W~w zj_~JPau$k#=-1kbIPuyVdI4)Ex4B?%9bF{Jf94UctYlV1IRsSj$3za?j_sZ$u@Ts7+#Be-LXW7KfGAYyp@TZej8nZn|DF4^^}L9% z`b~4XB06*Xl>Du_=KAR&po&X`DNO@^J=f#*u#!()l@@OQP?-b3^3I79F<$)ssJUHY zgR9lv6lC$KeFJdl%)Xp{>lBIGTkT9D1Zu!n1$$*`r>dxP)BB)Y(Rg1Fe$-1AP-Mw? z=a13Fq-TgZ#dZQye`=G3;_a^?X-xT0n;_qj07Q`- zA-Ffu>Mf^;XLl5LNka*k*q?fA+)Kg%CpT^g&Lp()86so4LiV04nTUAE1Yd{0w7X^< z3gH8q4wWK@{;72uQCp7^P6j=h@WufqzzN7+G8Up|D4$oi2LdY83MeGiF`7Oonl-|T zxk3g3)9$=|p_#9d(5;$&u7YGGcXaKSp6L4CE)?I^DQhXeMqd~bKr5_Uu6}Z|@l1<} z|7{%gu4a^LcpFW6JA?U~>w=!&ZUW%rI;+&sgM-Tqv{%$z-<=kA79- z&{Y;*tZX}13^!}weuwi@haHal$Yne){NVf_IiZt6J_Otn{{_&x2Cf<=*5gr=gRR9x z>EIHPu3xljql z;L^vIXjIi$Iqc**yicdAu^h@+YhAvtqeUoAoGT$?gNrUOV#;itQGVY~#4HaU_8tsb`HQX$@`#PQgiiB}@5#!W z1lsm5ank)yzh6TB_PX;AiFlfL&i6ja3U}Y~CtkL~0G%JQ-AF!RI5Re8XL{hp_xL(jXumn>v%{ocH~{ zALoZ-r~@2s)>?DUHRpX@w{eEp?@-+Y1>K(0p)uKrA&DJo>_`H|_(OCwb63`_B$Z^s zlV>sPEuU5wX-tghAFy;ym9{P5*mDjWGUh)SLCk*k`QqCz`cvWO=I489ZaK@DWWi2nR+pG{y>@`Y zbbQVfD4p&ceVtb7opm^nUCDu*E^S;mZs*ydjWsCmON){BsbFG?=X zCh3fF)F@CGDidz-f-utl`Vs~4zXN^SgmR2d0;Z4PX;(g5xkT2&Po*N=H}?XpGdJ5Z zfg7H|n+LpJwO?=*(3Z#cl0YULo^p51{8^Q{cy}D`2!icoy(cz{#F$L!x0DfLocuo` zoPc|BFIT<7-+*vdV_rEHw<1UD)7eyO?7kG0bAHK=hA$5~^QM6QazT>pG!~=OXmo?R z=l^}>F$MG#DDiq4Q9ZaVE}_dUHmg$3UGaib8tSy zVJmQUd|6Y|hg`%zKWFd0W@Y>cH8L=Yu9W`GX}lv{4-q3q#%9o5NX>S(0f8=mbMAk+G*2 zR#PQlnAXdCj;`SCBN;{n+<}I(H5;=EPxy?Yd!UHiOeC=fA(alM_6q2xuVN{D;( zipST;N(Kyk3}zRtTNh_A0aXrrfBuC+h;s2usX+a7w1X{w*jger%dW2E=R+ezB0OpD zfPjs=>v)!sn|jw;0g+(@NkiSSh)hGT31%CWwyfS!oN&3XlNhhjN%$SJC4KZRMo2i+ z?Rmk`DY#-~A)o0Y&5pI-G1ANx-M(?L$t(kE0M6UQcXhe98YD~R#m9$;KVv*l^8byC z@?omf*S<;jyVU4N=x>GdSYz!N@NA&xcvW?eE4_t3THM4K$;@^gQql@*m-J(~sPJGQ zWE&;c|ELc#$FZ@B0k5?fR1@wMxZ!Odj|@W-O&PV5;T=0KF@I_#z;f82#zimVy^BIl zgu{nEEEb_v*y(67IuNts!b^l++kITh1G3DTCI!N0Ioi<`R=c3qzgI zoR+ZSifQnx^(*0F95fPgBm$&+28|ykb24D@T77LpPCRX*8cug54D!Cm!H%9#8E%KtNDdrr1J?%4(}Ov%uu3&DC}>6c zw+_P;)&MRqM1I~!z{L_^@^+e-@)xh8J09?2if-_YO73`AME(m8rgoL<#KcIG?A?g# z-nehM{r^tf{HxkuqvT~{s4-m00yRx!d*%z$44};XgR2EsKtnGQMZ>U2p&dUzd_End zt7l`P&E4e^UzLnU1mOh=>p!XPliH5+tr#uZxsZ17tDEdt#h4O4dAD)Zj z?|s}GLk6g=5@Fk0Zt0)Y{gPr>Ds&xaTp{pYQ2-h@V3D{=@W+!iCVkK)lEq0vVoqO` zXLP^f7Q_7(2iwga$zYjB1^?2tQgeyG4okmk`wrt#oaj`O$~O}dZaTtSY2OM#>=-y( zPAM?0pm?W_&d@YzW^;4B=HTvfih{X*&BkabsUYEGxZn~C^W_u^p++R7R`Hy*kC?T} z*-}58rP1QF9d+B-q+gEzO(U)+mFCQ*SA#Zu{9=wHGTfpNtPKLea-)qJCXCG>dszmQaSX0UWEW z?1K-VCW%(xi&L*7nE|W;uEk?fYYdCImY`yS?+xZq;Lpv06q|N$H zk!6$T%R-GgI${!S7+W-b(r38~sNO0%h*pooB5C9EeO}jvz==eZV@y{;yvstg>(*Fa%c2=lvSbBFXu#|6c!K0w8EQ)@mfl~l z`y#Qv!9`o`skayg!u=dUpts*Kdy=j(#jnZ8RI{|Uv6m}6?y>RcuXA31Lh#-K8PzT! zd=R$_R!#68TYt)O<(o2}0Hsl5@(2bVLTEfD%egi_J<-TKj5aI@rJ+F9QsLVSh(LC- zhsVDSV$!GDn${IG|8mGv=n71?wh7Um+sgVqJiMr!QA1djgSXwU0b5y`HFgO%R@2!@rT+sreKzgsa^<$PKJ(@xJGQl4Q+L^ z6U}Ntal!Yi>cMkbxMMsGUjRj{46Fztw@vq(F778mJmrlVyvZei@4-MaUKM%c&)#1O zP*;g1goFisuJf;@tPr>qwxxB{rHc2U(IE9(W->Mrhhr|LtN&B|g4h6{mx6(S3AQeC?dwK4 zKb>s4cn!5CxmcLC1H>nQ6(HDb9pB95{aE}7$8=!{ADZOGEZ1L~8pjv5i4qE=nj@Z9 z{Dh}5^%9E;^Ml!FjC&Nc6*R{+E2h%wLfsnLWGz#v=m!JbmcGVz|7u!m%MhMSVWU5{nW4| zH;>&Z4~5ba)m2Fw8^t>!ao*9AO{buF+qn`nagG3J`vtf!I{0RS?a7&xj~>^Og2RZW zZrUBy>8!s#e7ap+o4&w*BKFTe6@9CcZr1 zZ4L2CHnXmqlcH#3{K!B>UjemQEDBfFg-{bTz>6H6uVhc**{bG>ZEt9I@tap?Dn6WE zjGprNim@g6%CQ4n4#}Z<{nmeZV%CzhXW=Lj zwqrxmXLM2sjw!?k3Xu#n))hp1-Mi5HC;b8gB>>C+v)N*xOLn`m#01XMWn*yC?}9z{ zJZ@+TJ5gd$5Vdx>Flf17z&Y!U{)d=+MMnn3s!I0u2*1%!$yXRXXwn_;u}42db$8yx zJD?iaur&Mq+{uzrMq$ylk@WkUhAevj;$eqqCKmUC*$RiG4zh26Y(AgSsd+g?Rk8aw zV;Fl!D+ObGvLl8bVI({uN5E*_&s7nBuk!FAsgNY$y9k>FIwDqLZ!Rn&W|+KOca^fq zYAvgNZeq~ekA5XMZd)_;v2IPh0uxlcai|Is(}hMXQ@Q9Ypduj@|#tDW}O8PxQ_Vv3u!PT1Q_Fb!_(xS{H)bj}9HPHavn`61TK8B@(i0q`;)j+!PcqL!Q%5geZrU8o zBR{E!EvSDbYx-Ii4Id!msVf(@pw2yY*~Y9{5@8uJE4rQ%$+MpXqf0rt2S3%Z@6PVs zPJT;?JA*{QHD_MR{%nl-;QnZbf@X=#(ookLonoqi*D{O>2zkGb+75uWyZ- zhH??;RNvWmM|E+zD?qgT|3t9CAjp5LJbFcAn#0Lr?;^BCQ92&Ke1%Z~-2NMgqfGMSY(5w0k6#*zouW3R>J5vhC8I+b~6Dzjc z+c-ws8)H!W$mS;&WIn*SqZ*=~=Td%Oo#w@4qBex-J-T`LQGp2iO`1&d!A=~!>LeRV zogd5H$vCy#6)WJ1ybx|*ntSEHRu!nI#nK=xmB=z`l5MNu7?ZJTvp^8<>O;}57f(Sw zHN{ZotvAl`cM&ZlGsBo2Eg*9=Oy|l*jZ0*++W?N2W%0swb6?bka^~oF|AbRNuFi}; z@pq-Rke=S{Vd>f;5KvWv`$Qlb*s~+9>gA{-N#Np5nSeA+e+_m4J-yAVP{--~6CZ`N zOmX6OGiopHHOCq}1#7H|*5&LA!F~eqm&iKkh~j|_)c_;@rND;~vb8qI2G=DslxO635rva& zm`>ir_jUf62h3NNP=nBX4Wm)`HJ(;MEhF;RxdMjA$+f%8th2h#dY(+XlUX#Q0)4IU zJDmq(#8Upz6Pm)-`d0dLuf={`@NgQHAdR){qL7UbEUIsIWxWX+hfn{|GtVu|4(R)^b*}v z^I^pbfU;!^LC(pS*nG==pZ*YEIH0j`d}184fg}9lTgUbCYwoC*D0|o~ssVqux(y0{ zdptd=OQ z-|qdpmlK$J^h;t{R)cjPx9pk>2cIp<1t&@82iucf&|~KlbhZosYZaFG=<}-MuX~Djg?!8qcF*pCY}>HUooFeX?NG^ z8OLV4gK;r%*g?&5|Lx)3bN`#t|L@QL|L{j%P%7tYr%c}eX@mXm>!9I&ZW@)zWfTlh zyZ?(d8N?G0{|In_6Y)P=jMr$ddzxhMpyH(n-@%ffq#xdnI$m%dA;sW-z z&3JutXkEJ%-MQ-_|E{Q$aYtQIZ$96+jUXe%PW|7~CZta@KrPOmHV{PYuA)%>H9Bnj z?IHR{|HY1aWK7h(1vC^ckb2J*F90C{UV{!l{&ZCp)sk?pMN;-_}M_ znU}?RWlBr&)nSb9Zz}2cSk*U5y&w+XWD-C}h2OFqfa@`DOfZ;pCu2Hma&6=?`RYGz z#CKO4>cvUJs2P*eyhiV|&J+*l`WC~p)CdDT6TVO@k6KOhv(&>(c)-a>314S(W~96tL$EO@p=lU zVnJJQe>Yc7Rpmc|)nLIAI4;7SZwiNbNq_<0;fGQ45zmT`sh9RvAWLa|-rd$|bufmw zQR(fPam=W!iF5*Nr@>+{dH-Ab`yI^0?6<-@gAyvAI`+N9JT>969aC(~7Bkbpv7dh7K5XAgq2`?CFl&+G!U3|YO`)Q@ zCJTQ7`Qa0vMjG%^veA`lNKE8qKVE{-;J4R5O&d04XG8)zKS?NCWu1SXZvIx6K-zZE z)3N}W5x6rRD)*P2^(rCgKY%MhR$q5WnBJJg^Vt8#H{7S%UCP{gSQ`1;E{8?`^pIXm zkG>VVJ&gHxb!=?+@ASBs!>t3ik!MuIiPn(27o?krZHq?jRnVoN5@eh`E6@?3^e7EB5!+QrfQ97kP?`V)wJxJU37?<Xe8byx*{xkovMS}gl1-GE}w8VbzUKQs$>U(?aDOD>6b1LD#e3yazO1FC9KI-`< zn<@Hq(-f_Bs0BzZ21x$9cSNp*?;dEdwQcl`rkd_@%6YsWS!Z&R0!8yO~)$JMSF?Q>EIp( zIj>tSX~5pjz0H?Zqx>`zYaSw*PxJt?F*KSBGydnfbcGx_n?H`e6!mD6^*!t%Jr8`( zl;(bq8hk_&XJ2&tfZ4OPMv`#cRz=|>*W38eiWI->YZFCs*@bdQ#<#m zs;o&&>m81M&wZ!t`MQMY0GQ!R$GWHO*G{bgLv+ysrmC*z_pr;yr%*%U!;a2eB}=UK zE-p1nd1{+;MK(o+*V&75ZL zI<;5io3CZjuEL`%kjMVlbjy={IkZ>>s{hb^+v`40chCG`RMHLJ_!XP>m(mF)PO?3* zIXmj(YLs0Op66gG*&U7Q&}~L_H6wPGBJjkQtyn&9u=ifG?A<&fA7*IT1GCB)C+6-} z!<7lHWqQ#$@^LWc!v2ydPMtbFj;hb_P@iQ=o60@M@q+Dq7L`WR5`ENt#HsNdU_{<} zE4=PHBJ$Vk^=7Ue;r>16rz|WAg$FLBxTdsg5AEH$T91*9VjTT3#{hG=T+|A6$N`m? zrz#QE3Ojm^PY%N|JR4oarGmtW4oXDW`y*R)ErF=n-Gy7jne|&7`mz8KJ}B25zMEB@&fz9*xqwfYBko5N$+j)gH;{J*>E;N3 z|Jz!elZgVc8pe9-O4F)17$Qv2?(>Y`No=S{epy00OSJN?-C&LE)YPlvy=qEDLURNl zBDQ><@@3avhZy2S1ex#H*?a0!Q59MZF5yJS>MsGur$@E{lC-ruuP-6%B;RM>aPayC zI7GbQZOva#fwTtboWZ66)UNv=EH{d|He#Z9Rl#h}Df`Nxjcz~jg__>4XdW|Z3SDGj za@armQB(c!s?<6cLj^^H0KP+1EDWybX*`hN*rZd6YbKAe_xP25Cd{}|xcUg0Q=~1b z^hdu3lf*KP`4q@@d(yS>(f4&Y!b|J1CFyP%NsfMxmVIYL3muaBIetwaNBuHgokF#Dumq+6G_kh!yqV zyN{X`ZOl#a(rlDJK}On9zwiEo$WBcuNp^iJ5>$HP?XH$RES*egYsP< zc*HOLBk=o0!=eh8_x$-K%D%ej0DfJHAZ`VY{UG zc4rS*!U{g{g;+MKQh$TF%n@)3EN8FDE_ANPGAF0W9god8Q z>p(U&t{52Ot{bcK-bL(NN{w&_E{GR(7l`Ymk8Z3_HkoPqme5$$%;PC(v&U* zYBtXEt@*-D;M*38kREi8R3n7Nc>Z2Jo3tkicy8@4`mRXUQzoRXC0AoEH451}X~J*L;6*~$qyf(+srQVQD3 zA+{)~etbdAr8D^Z6kP>ovAk!$2`gPz(lW>VBr_~3BruQ-YMv?u@J42|tB#Wsl|EgEEZ@H?cdxa+s?)(xQ44^qC-RjwGl?UYZg%~B z%PF;6=*zs){&s42;@1>RQbjkYi7pVI;&FF%zpI&rBRD24>KAnrUb;_Dh?YondFPUj zhMxt!f9(=j*jBOfWEzp0(>5lL>(JtU{pO`WqQq0^lJ0~ zwG@55Vew8>82Kg0Cei*?SS!ZMFwWy-&o64AA@Zo9gpaA$-L8e%LO41xPyJTT4e=}h-m)lCq4D>vW^1+_}Zs&Jvz_G=(=}BsEVEt4h z`ARywG)nA~BgL1G=3#EAe~kAZlLGf((jOSItvVh0H8ar++=}`&ml#dPkQocAt9c3& zcKJj^5d%1rt*MGOJC|vynZCOrU)2(HXbwI~LrMzXevNo{118iSZ#L#DCPMGB_d5!A zw;(j=k!;4a^EcIV@HQ1PU1)P*K8lxKl)ZiD{LR+xI74yuX(E-KtNmqjVSyEf5~a+1 z2(rJT(e^IcBIO)WWyRLC%VII64s)8NuSiZ+Mq|~qxulA4L9xcJ1+G@$O3s+G9@ z^w0m^%AduOTr^5!-~ESvYy8^CNLY?FSw>|vJ6v?DIhdN~;_*$nHtdOh^mvqSi#60d zgfiAq)`g@hO?qo!32H6O2yAqY>^EAUMA%1;`%m4=UVweuNTZ0KBXs&eMpQj{p&>8x zsX@rujP+f*ZrQ%LFf>W};u?7kKQ#O-QC+c5a5w$F>~Ye$nn$T2B^&qKS;(mdY-gcJ&ow5up{OY1^Ajos@8~?QSH3VDAySQ@>gI0pitqm}Pr-7AEt5Kup z{ytr_SVi%gM*Ct|Ds?r_PX|fL;OpJ6pC-m`^vC!G1XNh$Tpeb9 zc;BAlS&pkF?=Vm#JXkQqf{+ya}*Q#p?21dkOE2q}0nS{L_SMxcw z_XaRCdcu={7pn^tRwL}*@`4;8_8y(YSz}ietC_bL8`7=4pWsc;+YXJq)NG0qk7F91 zFX{thVp|o@>2roH9%HYb;tN^_);r!b*lNpB6^L9`m!+*(#?d$oN2B=E;G zwAIBpQb^6n%jkmo_&Zndho_(CDGEHfVj7mb*(#zM&%T}%{JSuL&@ZiCu9PPGo@BLF zUSQu?D>u9Ozt6BKxlYdEA6-j`GV+lU34~9&dT`LZhtjz}xHBIiRIemJmadYIiH}<< zLYMNFE;&wLCR_D*+3e?=`ACY>AbWIN40CqPyo-!xn#A}R$NjBB_C@Bsh{|4FO?$JE z6JpXnOWdomy~7+OY!h1i)Npa7XU4wz=I*;Z+lh^V!pQ4QM#T&E#utoYwWTR{b=M5! zCk8hf*=GDDXYOj=d(X#1uiMCaj<;NY8UO)qo4J@?M7h&pw?;9k9ca6U1PVq{!qQE} zn))vp%(`?bl`Rj%2cGrJgdKY+ct1_6d}=P&&F)p&9*Rg9XT{4zXUP(t3iU`!r zOSI?VM2pA)Zx&rnO&u7!z@XT$?jnz4SP}cCU5gXzwr&sI8 z%ITo7Svc{X*g{{{o_QpnJ)2+V8AIDCGuRxoYduk*YQ0w39H6-^TSP+{H7yWBk(Xz9 zVS$|kL5aQ$!IGy4T$V5fbJv@HAIg?PRI9N0sAK~Dl&KA%+S*zeH(cz7jDiH|n|+=5 zQFPOU;rQuRs|wub-GZyVWUg%}k%o;3LB1)a$fWhOKGbeBaTG4ix5VDm*N~jBP!!7V z1(o#U3|{9TJ?m?B9>%4}K~zt;8XaY$qr4e!H~lU_CUogTjM+(%h@`Bb{RKif>i0>jAYMAiysdV9z4XR#Pl+VETsp?AdGH<+&pTnpf-jC zP%mz^p2N8t*B1{yIml0pQdlhFDzrypv@W(>M@Y<*(O3kKtj-wF6I%J+%Es$%e{w>w zUpa`AL)Yj`F6qOiVG|E7sGV}TBbTiHC7TNA-~P za*Zaf>b6bYw1^Ja*%l2Ro2B?3QM6{L&4jHLPta3aO~xs_tQmCsn0=KbJG#RmnNPKT zh&!&H)h{k+w4QDxV8{bGh;Zyb_A+vjp_i^WyH*C33tb*@6T z*I>MNUzY91c(5C!^-i@`9mNYxbXwtMD#1?4T{8s!* z>OYGpVbNkNLG=RPl+$xY#29d6q4zd@3=8x)N(Tt75M=w*hGF2*MC!|jaMYN+<`a6q zKL&Ux#NV%+AEa(!sGt$9?~tAHrY^)#m|O@c-oVV7k6GP5v~$aXSp(kGT%HtX66)u)Qt1v#D?jF#=Vw$b> zOKMyD62;+>h|-W16AQ=1p9mk-wp!IY3dcK&lmJEZkrz2ue7R-Cx^jeuQdDVGGum4r zH?KSRKgwSIm9$KK+r>X_bir^;xU}ZAmvCunp%_1e;Z@N1uE|_Ir>5{9`JuPhNo=Ya z`mWT%Nx>^-J~J;xIr?I=zy{e^7(%>r=xREizBQ0CEe1a2r6OS{$_UL=fNzh^O#6;! z123HFA@iZ_*&iXk6(2qsQbfTqGL&8EN;BH?_unTLy_e;br`n9Jd-i-k-pE{=Qqbb` zKyF7KELTbkJpXMBr^bnxkH7EKDvnT{ ztR>U*5|ks_2*r|G-diLA{Ue7V8J1*oy^blZ+iK9jV`~7k2Sz4@ng43J<=uh^F{pQV z#A<4mk*taUV6uMug*Xl^`XAlD5P2iW7n|S!Q3_Uy9rKX(Pn78fQQ=xMvXO&;o7wUt zj>V2Z|7nDXsZeG_n-kiyR0bJonRcUY(y1e*6(3w-*G~nNyhr@# z=eGq|o@rAJ5W`Qa!pU%tXfQ36$YYW2!9AZDvp>;71y{ZY(CZU_ey&lVYcXAXxPoM({M6%LI{% zb*@(IfT0|I_@gC2Oo!z!@LZ_fG-#Jw9fwl-#k+W`UK>$f{PTOIG@4XhiEGxgWc!&d z=3y-O7E&jkqqZ|jWJ56ZBS_-DnU3ukSsZoG?`N7t9p8T2L{5ai&ylr+oCG_aUZd}# z5*1`Gu#`W$iRS7_&g9Ad%&~fDB77a}NWT@}BPNs0((5*9Y4+I;QAU$w{y^nPZ~Py! z-T@|H$*-uQ+253oq~tbGY|aQDw_ zmH0;XlMZp}u-FF22RH2_rvyKXNfcW)k7i4bP0)}1?4FdFVtWrxe-52=dJ-^HXck!` z!AcYJhiY2^k6*^JPqUjf45N{6iM$R`F4Ajo@5GkdO3|Xlr{8T5D^uZ8_-z#EUDtVpOvS9s`nbsdE-$G{4LU(4J*Dn1(a0VD8*bje$ zq`4y`3a{FoL__bE>6FRATQBz)`@f!y{!32(z^>#F>7Vp#(P4f7_h@4(a}V=OD(j6L zd)frIP7+}8d6O6~Wr4zg4TCefShFQ$Sj)C&$BWp7Utl*EF8S?Vs%%J!cmdmQ9oEdQYG)tTW#kLSrEy?G?QhV$49WJYtAo{im{ zpv`hOKT`F#RYsaw2ETgJ+4pSGm?*&*FIKLS82V^Q1?tg(%GtzAKG*6g^Hpv@!7(PE zL~==yUMmR3q-a>JW|TkaGZ1u*-Z8rZdZ_{Z8^bB2u#~ zjH^0)X(FX6OsJX~p;1S}-9=mY+s}v+DhBK*n(Seap-=~4Hbz6bKIN9))dmA97dAA| z==1ZKIzopWM+DBib&m(?@l&n9(#RKl%6Byn5gC#*S^!Ba7Pqqd)zM9(4#fU@Lm6~k zSOrC>3(SBBodI`UNo`+9H0odEOphigh+WRWc&1&IL5wxqinzoU*{X$zGJs8I z8LBD*{~v2z>|eEZjJd&&zh>cx1MR_PKaiVG=!^{~8_;c;Nh9UP-WhzRm?bTMaWXfF z_2HS3_*?&sg)kGRkzt2B2!;=tgC7}7ZjI45()o@|kaYI? zTKgkCeEeb~kn^^}w7?$tCXG5b8~FlsU1EF~EOJa%);Hl48wAsnt-;yRo>Bk6>X5)V66)B<6T0dm8ehMEO);R#jF zkAgX*dMXG;OCCw3Tz_|!%P#NGc6%82BkGc@_CHA~cU+ixsVZooJy`^e*I1a&-I zpd_devQ+9d8dptD$~&V1#u?Y$`HsZCZ2#Bin39d>T0B zP6+EmU3F)jiSALl33!fv+c$z0!CKW9E52a{BD3ce%%_}-)m}K$D zHZS{;&4M=Lpo4TcVl2h2Ut~>?&68&1l|$)FBSW@6C*nd$Y(}k;srRM=rSl`+aD%N( zHieRVn3!08Ki=aW0URWmu>>9DQ=|^M>Q+0pLpcM%P^~Kj0)xJrcUA(t1T(i7u~V3* z0PGX1i4=jA{dtJZYt9ZDVS~+C)b(w`5QdA#ZVCnvUk0v_*H7laEicLR;gf4>tjZ6D z1}#S8<)%TT1shv=CoKQ@k zRVd%F$SD~DP2nM2-XcL3z}hcB!fBJ7O+qBqW^$oT1ov|)|Dg{pE(wXgmx==&%O6=>GzOf1mOqPGwcrJWgX)tE&mt-6C~z?!56zl} z>4o8ik#)Hx>iA_ax$cvtU$4Qj^((h#r6PuwePdyc6sy6*pYOU^R`BiOsbEwmLO>z? z0usDQ%*XhhBRD4Ncw-CM>}CO8^Y^$ACtt0ew7KBJK9n3<{xP_gCrB{%3Ww=)ad~d4 zU#c8`b8}6;^hlHR4Sjy!J+4#i3){lMdq{#9e4E$hTsiVw;9*uJ9ldbvdxv(g-~g#_ zF6@Dap?2j;8v4uTc+RNmf2CzJzJ*5;@kmTF|B}(eKLad@qKu%R8rsiZ@9t0Bm~a8> zaBAgD^eTqN2PKU(4kwvbI1GOu7t?Ul8Kb?j$5&h-vrw!Zz>Z+Utxg0**j_Vz<{>_u z<5+xVyg^Z^Dw7TC#I)GY`tkUzGw5V6{&;C;L`Zar@}_lY@2L=`Dw;yj7%W$V+Hj>z zHO)iL8nsQ$4N?y>`28!DJ)(2I0qcQmwyr}h4&05a;xlJbM=b`-BG!t6JOxphzv#l& zX4+H>X=*;#pyNT4ZdE+e!Tg08Kg1aw^@pZnz<}2EuY0QpEvaRX90L!n=Fi?Yr`$f> z%1FwzR|y0l&warxqgDJtNud}S*a((==dfPHuQ7pW8B0yDrOA}8o`_Xcl^VOh)mO7m z!<&{{y25@2ZzU|+BA%uZoJk34rm%s^O-EF1)vfb~RnVDm{L4%kD!1NFyRP<0gK)i$ zBp9{tAwe>OO%X8NxGMaNQ#)ba&Uo}It!bEL$Hoi5cpci^-!@E+U;C9Pm%EFZYbS!Vx|O2kg!k`&o=4LoQkDlMM^9L8Y#;RZXU`D@h#Y0o zw<^Br*Z>2Y`pc;6f{Z4V&N@O<9xt-K-8r%{WgEO7h+XeDV^IbV*X(Dz{_P- z=Jmf1{^z5%=$(y|322-$b}#Mmd*MG+8QlD(jlt4tG%n2HK>&~U{$lcn*!AT!-tnk2 z$AEZx;y_Q;r(cP)!ggDCu(bRrHto0vzKCB1NbdAXuQ0A8vBuPoHG4SXD>nySf z*$VRJ__H~;Nxu~?E}=fAplw0BFANeK_Fo4#ZqxNbSO;(pBIa1PrZ9J4t@$J#XOZn7U=n$%`hgl~+A6U) z;q-A3q>=I8%Xq2NaX!~!HJi*@fFwq8Ge6(B#JS^VA39&})l+|4cYC#7UqNPGF9yYLAo53T3%F^rq6{Sk(`5^vkpjl~ zcGPn3^;j}A;JYk<-ju_?wmxc3yjAlCG7PU^O4fJ|#SrR+dg7sU#;y8lyVh>ENWKy7 zG&Rtr{M-Cn30fp~p&=0LXs#s;c#0}}=DkU{hN>Lh-#C#^oDr>YSJx$0smf*}iHW!f zud4Q)Z?!_b?8C&!Cf?1Y`*DzaTf>-{D{)4VB1#Wp!O~y{NJVA+S#r_K3%4!B1)$#0 z4|h=MEpZsCU8rLME|_SDj>s$I>s6m8X@AIC6dF&Mm;Trb5s^;{Z5&^!hF9EX+@E5O z=5^`TV~0^iy>hj8(TnGW2oYR;BgKBXE#H1o{sNf%w`=qP{DrXPT--_+KKNQ<^!rCg z8%@G?e=|53oX|_}+4hpV)O>kfZg-s5Fe>mtG<}+5z%}N!a5If$D`nxZAq>4NJHl}0 z-QZ{>YLo2sp)65b8EKkHf&XFI?REZPCt}th7N+pDH6pXW0pOR2c=r^;21M12D)YXk zxM}g^=B(82h^{(!m(AI3tE_h5p~Ys@^T*&G{ECbKWmj!y;oPO6-&!qy%%23A5-?roYE^&11 zrifpT(`M#+|@kjyS*{7zw;daO^*6oLXjQS3LaO-vijr_A66u7Mu<_ap30*W;(u##uU*+RK0ex$a{D3kDQGGj1n`Ija61o8iQ2zayJUwbm-UZV4kGvh(5`@JvoPi`C>Rt8p1-=9$GGV z#^I9+S$!Cud)JLB?eI+h#P;|}X2c+R77c-1&cVA4KNLe?V=?zxX~UP@N|6T3WKIF= zA`*sdw^k(f2xK~dQjV^ErJi2w0YP%S03%sdQ*H()8W>U~!s8tf^xJ$NVDxnS8hDlu ztlQIz1+?%7c`{y{&%9@LGyQPLPW^>l$5kb7Ao&rQ*IZw!;GC`~aGz-~o|`t(3sKbB znZ*-E%U04B#uhp#tOs$jjZgaSj5KWHu5-$qS1_viI~{*)u$~9abT2sHvSeb*f1qyX z?)cuMI3mF(m}pEK{~}P&baOTypI8?UD5j({hd4Dq935skDxcJ};uHrD#RdW8Vl&sX zi&vxxuV=2|+<|4BB->-W51WZr(Xlw_u=8AieLPD+09qmC2ftVCV;PN@^mSlQZX zWri6WmN-^$wCX;l%lFhKTXM)7t&%&(2&e?6$(*3iR_9W`qT6B3XUJH-{eS3s>$s-h z?|&F@z~~J`K)O*t7$_kPqXY?+k`!d9j8f?y2&22C6%=WtB}R-Mq0%5AsdUGv`^Ecv zf8U?a{d@fGe~8!iT3qKk=Q{B`=gFOZx3j+oX7^oJ6IoD(O_s+BoP}mGp-OK6&f5m; z1`lgKE71H1i-z6+4h7vVDU0iAO8m4cT@#*Ije7hC2*n{o*PG)v1pYnM^=sn^@^@(>Oj!2J7Giu~3TAhIX5KnO@627Eee$EVd0}_VFl6Yf zIqUW%m9+oXS+LhmOjfS%0nlZ`gpZ9`6nwz`Y?DD<-Sc{CS=b6b)-05HB>%FIZQhfU0Db%_VZ78gp> zTr;9_{O%`Yh=YPr9YnAypeHerDk~)u(#pu#5a`e*sh_B%9p%|WnZvEt z|J@~+q?XVY_1tWA{p6V}$*oLs4rvZ0Diw)m6u5^Uh(f$fn^v$lG>Vu>$X^E}=&|9n z05FhE=`{d+cyC@aKD<~O!GVz@ z&@0Tji!L1r-IRLb|FhZ;x$*Rw0!s?Lfm_}~lDjL6HE%ht5VAJd>U>{7!R87gU+Rp* ze|!rp`5VIj=(z7;+uv4SCn}M$$B8EQi5mB$$2qk@BQNqlL;!(Pyx$n^j zxd2wRbmj5z&)I!*d_V<2_7k{u5Lt%+x@`R-)i2%+USC&r&Y3|8Uc|7k3?{YvlSy#> zd0gf(!!w%~?UO)&IeZAXqb#zTy}M5MRSx(qk!18u#a0E!YEfwrp#E5`d=!*v^#Mq zkxQ0^7N%7ajY;JE6d~1SeEn!U0{_UeQuC;QG<{j5L;fFi!jknW$1_$Ux$tdLce~Ku zfA0B!lyxwk^0PShZ(Rqgnv~4E zL^jv=@ys253p*`qnVx1Z(0;w=gOjsc%+J;~pD}mF)|;P>=lLPSn{+@gkdr= z27K}IKu)ulrin6)XS#a1_~t(In-9dg_^LX%I}A+q03%luZ(l?gUpUn9;W7mQQ4nBHDvwzT9XpA-p*tluG+AUJyFPi+vfZA3z zRE~3CT;N%)Pwe5V1pkv^6)HR)@bwhArKma`wKzs!-UyYVBB@a7J^n;&CmhUeiyPNa z5?LPS;k3$Kzxmc)@g@rqWKc5p?^FJ2%E>pN?2IpD22H#X6~a9M@yE9!Dv|{?Y;rBK zp3S94Cfag<*D2fXyNGKxgwTmfnL60&M(S99F(dopeO7c)a`D7}%=v!4yp&>eg3Xe% znF{4wy1So8iPZU9q1f~}?d@KZJl2QTPVZmuiTtwwdqj5wKkbs>@zA)!F4Aw>bQ4Zq z7qW22A*-F{2h7;v5#6m8M_@Q@rf}MeigBfoMA26AZ=icbpI>v`hC0w{kCAy$5ZNll zdlwT7L!`c{lf`M0g|%3m%xyn3RIoq(6!>QS8@0e+-p(?ZQG2j(`P`dh_Jy#rU2U(| z+0A5({F9vBlF!~Rnm-O-h_}E$cC4ppJ@*N)670D5BP|Gfln&f}LrTq#S zG0+>3$?jU_Rdq(eyd(nA^x^Y=d?@MrNDyOMpwB_mT6@D7uj!qok*{L9}-Rql1-DLLN4uL>@}9Ac;vnV;hPCkD}bjp>`fv z*RXG7#@pzqA=SU)e|uA1nycv<$BRx>*|oCb2#JOm1rvPe%1IAzOTDEs9Xcvu?0)k{ zNAGqW`+M(+FLvajYZBFZ(KZ_;u)ERKyqzvh_ccV2lhOxw)?S@e5?>5@E~=6(k+(qU zD(I4Q_A^hXRnA!TKHX2d9H)Q8RZ5X7bJ%gn6LxUEpHn({b7P*lI?7?pIn#b$6-Uo| z?7zs}bgOog^g<~!N`@@(SgmPXHrtYp4%sm-HX3Ep6YXMy+j(4lNq9fv&|Y0S`Om}~ zRQWC6TfsU9fqMrJ-cEEa_ZhOM>t>dnjx*-5U-X}Nr9c&K9EDSaTHmoDKe6{w!!6ZU zV&#D`4dLmr@yo1vuF{4hW3Kq0#xN0Dp70&?SQc+D;1#Suv|V2@$tehV_=+w)bp?61xR1!>Q<|p zLkTt97nJG=9VohIbb*B=TD1=K4I8vY)ewjJxP> z#rN%So&pN)wHUEz0+&0ci4eA~56BoeyLrULdvI@8G5fE|MYL}x7iG2;lK4cQJo87r zTcBGxGnOmt7qnXEn9`=FDff+^a^`_Tc1N`7w$S}Y?s-;N@_qi%?`)vE?6*lGYAV#5 zM~stX`aVvS*IQ3cHzDjL~4W?BlnbE z&daCXja4)h1yPlF24Lu)q#6?k7zWYy0i_u$vmBvghFG$jT#N~_#xAdQM7u&wSe4EA z3;}NRyW~>59$}{eRlg~CnBs%qg9*qK#G)K_VEbtr8r>UW@u?LwJP#unUuT|Za&-+T zAKz-I2kv2i~K6joA!*e&cNcI?+Jr;vcXvRsGrd1Kxw;Fq+f8Do+z(2kQ+NI@xdJ?4NZpo_1{Q6i1 zWx!YPu_|JWU#Lxvczx|7F`>;f+K17$M~iyBI+0RrWT+{lQaY!N;sS=+hlNt>KnL7`UdQ6tb~Tl;XFOp{eLMMDeI+KuX&7 zkBRi_d*9NRC2iQaR@W?cLNZz5AJ$kb=gk6U{#vqgYxOn@l?nbn*315L?I_t$r(#E1T1%*py_( zA}o|DiNbggmb`z4$iEn80P5?3eg))AiimgPJv^rwEh8{3wg!*k9I0 z4yMLnAGm8enA%Y@J!tXguU>lyFmp;B91n}C>70BT)VMv6AZ#(yU+K`}?N%fExW((H zF&FHHCPIito4}9~*|(s+-dRo@&kpq&quWG;!bgiFX(a?D<7>uW+xO)k`TwPET{o4Y zm2H-c8-Fp!9P91&+SA|UgQI$&dya4oj@HbP#29*zRYxo^n^m6w-hWP}csN|p*S)3o z+B#CngC)Gx?W)~*l$1FdN6?B2nQ(p906>~iFJJ2!AUz2`pc)QTPC%e>hh@hl@DAnZX8`s^dc8qs<-v$ zlp~9nev3QBG=Q!shmI%4$i*jMKxV}av%}g=!46$gX`FwaE;XC+4;`MB%2nTWE*elA zQkEP)bd0g5T)*MU^g~ffp0BJoyRGwL%F=&kI{a?F5ySFz%C@QY4IeEjUHqGdxbbFq z#zsWKYsps8V^D;yd^CR+Jp4yCu>gkAM!#3$D1(6x;9k?`zT#BSydqcor!iYK=YZN5 z_!D{eKb_X2?0k}CM2l_*2SGf&)WlycW>YHY3hqp;eQY-Rt%Z*WS@G<+dFpv_#h-S$7wD(v_B|G4?(zHG z`H|?2lf6QVvhAngG|$MpU$JT@B>RPM)a~_#SYC74lHG3nMxDU3x-$E;*yG0 zp~sjTpUENfhgp;UNU*kws^*0mw|WNiHCwz!#g=m-qfJV6;>OKuJC)e`^0Bf}Lutgc zu4VWW1I)qMQp%rfh!@4LzcdSvg+68qpGyIiZA#AG!Z4xB>_z{lIVm5}hTPY1tvmJ4F%sIe zE+Uyj{X$k_@^1@gRxt&v*L(G|EQdUYKeCNvdT-XtL2F;24-Rh8lEJi{EKeuL@HEx( z=YMs#raDH?ysY}vejNdna`l+9Ljyt#33jkNiPk4#;jID*vNMLDfDSX*Ec^JP?Wh`G z&5JZKA-r!DA+J{?_dOJus`J!Vn-**6XC)h#%K9G;%nn5Y5vBb;@I9YI{kGF(NsQ-K zoXhrJT(4Q;@jDi*O4IGrOS>%#|9o>G>v?%?KpR0TzK0O&N$ufzkE6)It)-=)K++UM z;Yda4?w9Q|uOVEU^Gid%Sx)R( z@@yKf zblc7xGT^lZ)6|p_wioyZGP!$ZwJCo{;_$2XWle6U=Y5tJyXlxTm9)55kuC3f?Yn1^EBQO3<8&k_#_LGExK0pz=5t(}Ms#j@uev2II4( z_*o*YLu5~o%TF$#hS&)l@9u)Xa)?+DP5iQnu4nJ#8Z3oA?~~(GEWfG;4W|8?8ec)2exeA~nysg?kaied`%8veMxo-bHSZ$?DA$l|TLKUn>T? z8@@e#Q0Cch@3_N#LUk;RlIWwD4|O(4g5Txh>mNwxJp#$|EkC~84Ls)FqwyLFs`)_Q zz}PiDt6ld7Y41WK{#U~r@jC@e$x+N%ym@&=oM%sS(aYaoyl0C2-c)5I-|s|o@^_sV z7SzIFc|{F_>07o@-Y&Uq@~W%X_m}IKFdvE_mvHBb)e_tfzl4v5X(9#h z4satpLhf^?YSDPe1Qx;`M!zC1d8ANJCYI!Sc2qa@vgt&ExMkstE;^ z!1pKLt&y>;K59PSl4)z$Fq~{UoV}8{)KlDxyE-6Y#NC@+txsVpGUDK;RGi!Nk=z34 zaSfeVyTCstbYgS$h-%+tb&wn7T)(x9?k;AINgDPhLNEOsP94=s4-RTM)^Y##Gr5?2 z*iN*LJEG<$L_};su=~h_{dxVHU0ywPlGxgSVSAS^j#f~qpG@1FoWqT9WUM&CUPWj!(A!g%i8;rY8dfH(D zEp@d=ch=jqaRfn?uc74Vn;LNXyOh%!JgAUvA!vlJb;uIlFo0tmokvf5^lhxE=5WVE zIdZ%(oQcRSud{{*OXo6@!g&+vm`uB)XsGfcPTe-1Ay_zX7RgWaiS6rcg5nm4Q+LoA zG&?qAQA>V;3fAl1K>ON|(`i!^9T&?R{Ij_9beDgrZ^t*RAW!JycAg`|=ZHrL!ZW@F zX!y4$pJ41h=9$kMhCF;Mxo9Kx%FtpT?9)k=aq7NmtFcmqe8u$Qk>0`b^I(}u1?BMT zv{Xnk4g`cCBjNsjH?zhQi#K!wb-pRTvZTtotH>3u@udBvG=X$8m(qi-2 zz_nTIn1?^QPO>bIaiQZpE(yB@%*rHji3JZ@=3?*~4jCdWT0;a2#0va+3rYq!jwf7C zv+NH#+u07wH!gSc2jA*MFhzAv{I}&TOwAQ$`V;F|S=DVqw0K3RY8wAek=%zk+fZVi z7MKDVy`hCzyFDO?V0=Too;<;=2Vx9#Mi>ycYLqV>*Ki66*GkrH(Tc~4@U)TBy6w;^ zoYTVE?0TxfeppJ0!?CX}BCd(V*x$cd`9*F+!`EE1JsA;~KkmXlO;>N==xN2icw=1sq}U_% zi1eD(~7p zcKopSHgqpmX{9^J;ZZQ9>vQHPH{7hxa>N;0kB=P=-tu-4W*>_#Hr_GeLcBQjq;`3J zYv&e`bli!?S zPVnhMaEhMJrKyXGVxpy~h-|ipexJUP<_Rz@LuWf%(LcWA$z(uH;jbMkhqPb5?%LZ9 zuK7Yx@%?J7y2GH|1u}9+;j-d(Q2EG}$#knq{r(~Ye5G6iG!CRMY1g?-I|Z<9eIvL- z@&MMp*WS-@F2Oi9L}h;imU8j?`eyTUH7Vt58AdpQYc(d$t)lUZmk`i=m=z--gvICw z)$Y6n!jt&e5C*PG`gsJucBOQ1GNn32W_>I1yeT_POJ2s9R8A|=$5D#CDUIA5Anw+N zU>uiIwD$_?`RMgl0CMxGJV}jdIDM_3MLki!>@ZEnlBo;+wxSSJzkj)&kr$h5ZXL41 z$(!}p=iruNAxERfC+{@#U!<-9>NNZ zy~iGM#~qrOj3{tvN?n&NRH>X|7DM=2#Rh ztO*u2eI>bB=I7u&KecJ{3}MC;I~m?69>gBy_i-@x*t4123;aQSM|4BVnk3y;6{4i; zw{!~3n_3!ml$OxyLKh`vzp!4?!UC=R>-@L55XKYYd+jQ;vo%Ru5QwSlrO*~muQV}g zu<)91x!+(i-Num1ft$u_k&W?78}EvP?uy$8W9hsLa28&c=-Y_a1^}`WfZk!yDC{-}|g6#Pa0yNfGiQRx4ZZd><|EKg^UPL(qN=V9zVR4wvHE+gFv$;`_ z)0#wz{h5l?5-YS?73&(mw@CB-KqnrD^sX^hmgD%?yDVE-_|ao-0(o2UOHUiw}PuxvuecQjjx}AlKaFK;_9BCqZGBF}BFe zvu<+AizGK$X5FJOCPU{azXjW*ZUJb8-=K&(;F=wMe!`qjz2>eJ#-7D6nJU)6UNLw( zvBHT73T%(UtxR4M*g{(9oUFAPabQ3|p3_$c9r@$xiy1j;O}wV>om@wx$Yhy>MF-_M zQTAdG$ZqQ3ICamb%l-KE|7rDDh*T@BldHJ-5VHOE$=!G>v%z_U)H{{;+m8mAH8rr5 zaQj;YaIl$^nxQG{XU0T|Kdb-6yahkwTTJ+-!M%i4u`+DxhqHe6NqT*fZKzeX6SzDwOmiD!E*z2gny|maC z$>AkRWMFZT3eP(aaXKnstB+fzL0Pv*oXzRQ5!-Cwm0M#^w`GcM#QLG=f85YlX06yt zML$E+w=H{?a>AuBs6kHqVB#Zqb8%?}c@PZ=h!_3d#5CIS2I}k(`=X_6jCMJ~gHYg-)4I^znl9Zd zM4s1gO)7mgh~+0qVaZ7P)&c8DbWD_+^%0tUAO$=*U}MxaA;7{5y_GSDSv@l8|9q#K z**8)+a z-j9kZQ0TwkhGXK|l!I#3O#>%)r*&|9At@-AdXAfgF444AsZn$;2m`LSoGS=x;Sezt zi|oP)EPFX`p_$;6N-|vYCf%lpvoIz&q>VUGMK5NEbH)N+AW~Jr-Ph_K7!^l;@cXHF zu3=g?DQ%?o6AlWHFi&Br1Q`T6yJBb2B%@@7?L>?%32K_BZ@99}e(4&{JT9OWB24jy znnHZXpyCiNc#TDNB7+2%QRM=yKCd1roNh|1xW%Pp965HI!IhKXuIc8@17*tBW%srR zNT(EJ`TbTrZ=F7cwO0oVFAf>zHrltiYIsa0_`KYMQ*4B17l_DzT1TAp&vn&3j3ySRIEP6K0?8z_mAn7FaD)Yc0;|Hf3MU61tDv1F%yC9bgl5f_Ixi7??; z4%#qU9||}PR2(RskfiNH3^!t&HeiUW6&&SNLEcsg4C~@|2m>oyx%n|H&i-&2^BN5F zG5I^!5sqk?m~!Xb+dVs5QMmNRQo448HqKsaeaH$ij`i&uad1$qiia$N?`9dqa2C|8 zMRF1O_g9*!;}plkI1li75J~I{H#2M9@^2kDap)~UwY+?K0Yb4)I1nijq04j4vsiz) z{y8s{wj^9XyElI8Bwx0KUR+W8B_+=>#~GqDb0KZ@UXL`K@*>x7_!hfr2-F=#qF>bZ zD!x&&bCh6kMKYMe??ZE=oeKM0T5!_)>1+(1>HAKq_vfa{xUFdg>yV3%LOMUYB4|9j z%*)z=k&wMi_>ewBHM_~RouHK+3PD7oLBn)4Q9;{*wWnL0q{OukQ@G1R-XhE77XCyz zLGi_j@SCVAyEXL@s&xLpmaiW+|Fr9}JIQd@o8)eaXkiCx=?uW8*?rM$|F@!9=;xmLYV$DrmCv#c7vfaosUJAV zGQzA__IjdIb18TGNWrwpCk=*dzA11a#j|6Uc}H6sC1RHq6+b1FOaq7@GSfK=F2E(U zea&@g0#EGM!=P5|YZoF>gj;QO<5MP;xg8_6#$1@WJ3~{XwR!|sbS?6+Z>5pdN?%}J z4>T^L7i*E*2ad;!+ahVaY(1ahd5q`I+N=Hb_-5WGu#d_LpYH5;El}tkHHio5a!5=n zSjJs0o<2e|ojtllclx#EAy+y`XKE4OgU|b zA|H0(#_CIEW z?OKrW%c-yJH`^LGsvjD7z zK)S5=GhVT%*l!{q>}sY~uOB>a)kRz50HpwCzOvGC7{ z10T9_{aAo}N|ku4{Eu`K*+5xkf${6X(GD={kh$S|S}!Rd400h-lhn{cq3U^GKg(-f zkda-D%yr`YctPIWKM?(VELGSN4gv)d1k_2-$`$98TetPW?3Kl))91w5ROVNUZ=FK# z#Lk-oYZ)C$ele27!S+{Wh8GnAY-A|Hg;)l{3+4wA+D4lbx$>tf<=DianSujdw4&ee zjG0rzR4n>Y-m@X}Lc3Pg!F#dXQ*UJlBb`9m*Ge*zk7&Gv5S!^OKp`foZsdpiuDQS zK0aUfJk5#TCtd$S_37NaDmBh)AJdFGbvqtFKc*Ky2DPFzko52EqppFd7KpPSv1vAr z{j=Qv$t6Sw0UePtkMu6pMT5rOF3aqDs_u?T&i)1EhSx|=a zYho+rP>nL*C2-2%Ntj~r?YvPBha3j8^a-`0SnJ9el#_T}r{myJ}0x!q0H|~eB|np=IV6nLs{TGc5hzR%!gr~ZUp8H#@qEu z?pV2*oid#Y9&pl3RxcoVF4yJh4ygm(v^5?{n125{|99M)#Gel=-L;pfo;`m~i`8wr zbII&d2n2G5q471Jk&`-DN(cBpBf3C`1VH&J_f=ez9+j3UFcF|yY7-@eTHcV4%(}d11Xcyonxo% zj~Om;Tb-FKv}>!tQu;FLfA1BR$1P`d#rTwMRBXiSebyb4gxo?UzBF8pxGui<-B9&B zYwrZp{K)(j^DZ3>h~N7szb;ChuF3q9dHe5^onz>Tf&yU(rE2ARR4u}(i+cFH8&?~E zXLR`P@p7WV%3Twu5#SWoD0dl570k&)-^%@pV+-Y1xrZeStgJxHG#p+l((wZpPC?@l%^qh z&;j)q2oVAU(yV8r6C%E;o<`~xUm0_4f{(EeNZX#oo45r}9b8y`yP*c-&a1*l)Vumzb{r<0*xf2?L`bvk7u-0n)Xm4 z_Seqtp+el+L&tSwtSkj3xey#{lj(a&5#8zm+^H4faiw^lc!thsYm!zf=qUA~K|RzE zW8BV;xFzz+c5K3B9(72#D>67{>3?1`Z73=bVL;&dIo!*+3>m|eu$9y&9WRd+Z+U~3 z_R(V2AIJ%33Z7YAt4zFq7^x^%7lVJK9{u<8VrUcclKZtW>&FYbqogXPqVY$38!?&O zjZfC;05WgCcK_Fx#f%fYi0#L1Vmm1IKT`*;!3fvffuxk2flp_aYzJf)tF;G%Qi*~#?2VW1iPfYc1)Qo6g`QyOtOrY#X193@(!YY!E} z2%wAw#N$MMM-?{}%eC)1I|2|+=|{Fs65k1=Ye4r=-IOFgE2+|1yuq4!PGkq`b+R0% z;E!o8Al0GGwAH|tXAz)Bw7#SdO*)i5&e+?#*b$o&n`+K=vY_n{t6*?=O|bDZzY-}+)SPsRS)zvfLd zJ;zy08D5A6`N6`@PXsEj22}kxh#&&TYd2YT2Pi?tvv8qjGHpDZ-`_wHhqgx6NJFZP z2YB_9!9j45%G4-2AF0>lN-vJSwX>HGr+mFBfY@g6d{Tzj^y^SS53DLR%(ELF<2D8V z7FB*w$+p&_{cgp_vPmbNm~MVzxLKB+L^?lBdt85*b1|Oj3obp=Pje@un}upKgU|C!H*Feyr#^tB1B!e zkU!ieh^d+xI;R8BHawS<0uJ(cpQOVwSFeGZBl;b? z|3-Z3J_8~5cx14=q8IKxx8te@J1#Q%z}|3@a$WvMfb3LTdk8WZ#4WRM?#2t!GC_D6 zsIPyvm{4K$9spxCfbl#l{vP0krG)L<9DLm1)FQ;Y{A+~k7lzt z=L}-t;^#r$JNz3R;;crN7KY(}D$k9}G?CqIli$+ZteD#}y`~OylF23XY3#8yD9TG- zMb5r^hUkFq(oK5Ptp~xnzGMxBx<{irN$G!#eQU#+eB9kI@Ao|iN~}rBlSX(!1z!HP z`eT!I-&}sJH{biB?x1p-LB?cdV1O^u7a$%~^+9LUiv%iRl9E)#^Mqeo4*aBEGCkk> zXdcUtVwIs&LH`M^zIXogi8K%gC8ep*(R+$@poZ>D@AXw6 zvs6V#n~Zj}Dp%(KjoE3U$!HhlPX;dO*Ok^|7kz84vuLU~$96;7`^cV;&-i@kRE1DV zSP3e3z9=Jyo6BRLhN7I+%*56#0)xrUiW8luJ;Bd|-}RCCl{N+km^b%fDv|zVXFqm) z9dx{1vY31bMUQ7!sXa|z*-u6Z-<-6i?;1{O?8kO8#kw3=8T8&Pz)U>Iuu+s*6u}pM zzraTA+u5JRF)o=A&4XRvd_gy?2pv4^A~}Vo9iC+D0=r>gl1+c(!`|o%vyy+%640yf zZDy``KfdbkUd@`#^g^P`t0kGFvy6K*4ZGPk_cF;xmzO^5HFn<7T49N=y*F4tY<&AM zzVcr8$!Eiw$3#pVxT&*@+*c zxX6&}H%IDcwfBLc>BU}{uFt$EtbGuAV!p(F@tb|-A~DXEZDxKNxUHSmb?5Rd`?AvW zbZWNw+_P#z`hPym|9+~!?NgR9d*V9^$3Y5poOF#=UaIA@}f_U1%)%;~Rm z(_gEG=L3KpVEN+?B*^|*7vNXt{b3+WV)ZOn^=gT16@i~uEB4P5DyR)`b-)=dk$pP7 zLd_sPb5QDDeHCHSU8QOM_j#T7SyXXKs{-u*uJ8ZPqVHrfk%lq(^)FtYV=ik? zDiuyEui~aR9{{QSd#`b*cm&hQ%h7)$s{eXKAAtMtxy7&uAl& zT>#-htoDEZIv!mzGyjx{>;J#^{9iZ7zX^}4S2r_1#*bl|PeyB-UH3j;U19lW8U87N zbp;QcvtRD8*Zvi>Jn8M9&7wl>_+PB}&-ko9&YtwyOP_5#nYy|M$Dwx7#?V~u%k(Sz z@+3REfo3!tAp6LkJ#4qc|44DXaHIC!$DH+Hkf#@oBmPDh;j$ki1UAE63Ku&i8_+bU zU+GTMmhV>bF^BADBG0CRiUWH9ASba=WFvnFz$p-Wwf?8IQ?ScesV5fzbAgEC6>iSS z(<;I}N-ON&FJz-Udp6I2@!0D%YJSZ;mr06Blx+I@Fx^gW&18zuI=DiSpej)w|2@Vr zDDNI&bnA-9#k`1wKmN17msa@~IdG}`Zd?qqZ+E23&-L_tgc`e4;^e!wEOH6BHxEOA zU6mi?7n!;Z5T?A{8}E{L+Z*#gADfb2FNT<6HXNL$&X%1nmL*2jbW(Esea0GQsy#c! zvno6RKApM^^<=bI#lrcP|7A^#&c%N1<_^u}HqFlqpIg$it~O_FH{iiGdHLhrM_GF^ zm_3&<;R`Q2aJ2aXiZ ze=0caX@T`fL=A6mg({r={_C3@@6F*x$b7Z~h;jMI|MIBTrm(_CbC`obI^{gFG8Amq z$U2$#aN1K54S~-BSiC6` z9`57yvNNFO@pJ29bIbACXP(w5S&pT9Xj7EpvXTFRk>u4Ne+hQ{P-x98*}D8u{h&kE z3C_-OW;;ZZ#X;?14*ws^1jLfOV3kwN_SyaMXn?lHqN0ARX|tMF1+4yV&1_4)>pd|A z*#oiWEuycCKT*VRc~CODIEdIlvAYN=8B)A;QGMk zQhoQ%mE@eVi)i?ag<7R{*6kF$_n0v|%%)Hi{|^d34iA3)9UIF7GTA3nYn>OA_2(ZI z@E_lN9s{U_W>tp;$CcUpu+SX4KQ`Mu6bjQyfL+&Jz5rD&o^%Yn7CzM0P}eGUd=}M-yoIxoz=z_@XxKr zRvSed$O=`qg2~uvqf(gaXZR7R59|9K94o0(i$O5v)WvTNzcw6At(&i-Nr--2nO9Tj zvL=8xN)`&*>6F?NSJ)FzPib1W_0~LmDlisvJ|0u@fM~!*sVR;A`V;cQai5Sb*=3k1 zY{Aa|(5@EFXT=|^nzhfclD1RgJot3EwsA=~Lj2oqvE!S~Yi!#A=`nY2QVpp=>PY3c z18X7c)eZ*i#hB}M{7@AD__+db75zwQeyjC_c>RFoJk0M1uu%s!v-eCl8(G+m1i|>Y z7c27X&uFH|yYc*jU_Zbx`Dy8#s|JS=OxC+}SZ4cX@1ccCnN@F`d{>`7tf~EFA;ULz z-;whBSX5Win9EL_OJQ5(qEUVE9he%U%mtvlh|{L~-9ngVN|({kT*ukx>vkAB%0w}p z`p@$3g#o-`gX1Q^_2by*m7GVpyLIB49_uAR-6IYS^oXOs6HGOBwy%4+KN>oY2T*|9 zhkm>B4a2QhD&KFu`8uT}M=23}oL&(!w3v~7){{MLp(Vg{>Q;jXxT4DI0Zp&3mh`?8 z^^ks31>CUtZOySl7`7-4P}LZkodDLR=HT&y);!VtjNGP6O#cTi3UF>s8AGTwOcs zW_e~Bl=6NSJOe07fUQ9AEN%spugGFgz$P@-FR*UaQ3d0WWIvMQS4v;107vKfh7*R0 zB;^Ophz$}vzRK@6&tG$>KfpBp>yRy|ink?Dj5aEkpfah8{0s;jGW)TDbNqZU({v>J)0XWg6I-Y2N z6NjzhAGAkyI5W3_aVi<e;VNDzo#jVx zly&c>nypERm6b8aRAw)95-(^G!!EDvR85T+z{^z2Y7cR*JZE9Gn5v{bUoVKI9z1I6u%ncAaz_FDCwhNYLFiL*&Jyt3MEE1 z4l-?sSJZ{n&=}y#jf^3wOgI?RUi3R4m!6|<9yw2$F0cYPO6Z?IZt%_z8~~AgUp=s! znrE%tmlNN4qYNg74aMI?Mo+S?8oXf2vD~X94noqwlZ2jbWNcZJP4^!jc4zOc2FAP zbmHS(;nL^Arh*JWaNQyvc`uqy7)-t}{!;bbj!_f9P9}1hwXph#b$AD@$Vbf?&!_@s zv!-iH-Q6u|arH61C{g27zN-7|{hQog(EHOu%uB@7v-_k^j@X4rq7`lOiDfngG)y!M zSc7Ur0$AgPkXF;3o`Hj?8bxz0ObkBsVH_n;YB+Z z8L|froyJ=Mzq!BIunaw5bhYZEuq^NBIu${dRJ;q@wq+qzCf#|!gyk*LC92=8HIzy(sDy|gAXIoN6;BlzcOnE3e~1eY?@rOI$pjkCj6DmX z{gMnqA&zm5OEQ-fdXWrhck?9(XS11ROP71Hk^B9S^EZ5)|q9ZECzab z>dXdHX<;<|7897zL_Ca^hX$D6R?_z)OwTci?a%79>8U$qR9OqB75TE~3!+gf4}2PX zCw9aVj3`07WSJP8lcIL)F^Bf1-onIl-3bJl&WY{`02HQ)_!6amp!Ykg<{C5&0$Ulx zQXUBLZ3{gYI23z)zu6UoV$JAs8Xt^ztE^n_J&H}wH*P;!RZ}dvGu@^Ak;zQy_zuRo z#AoT7iL%$KHaCad>Wr2n@y_bQmI0cPDGdN3v-w#kNi_|^x-@klNU{0%zU{nV>4=WG zeaLK+;5Z|6es)0L&L_5;skOY#T_etJn_|OYqDu47Cx>Ke5@8f>$d-s0A{1#EdLyt!J92lGx0?XVQK4lxD zF04l{*R{^D5i~zX#iq>9dGa264kjFv#+mxk-E3?QnwP z-pD0Td#EePuu&dmJ+cU&@D|#)iC)|CDRriNIqHZe=#1y_P4_#z@^)*BPQmneVSv|k z_zka3th@X_$vtKN$!(#05$aJiQ;Qodrr0_};xo-pi$<0y<1g7R3a;%KJK)m#GO0v049?v52Mjnb?rR;Iv)!E;j@Z7aM6Dwt`91g=LyPtU_~y?H#;Z}k72F&O&{2_Z9fA;x6ihwNo3gY4UAp-}dHAF{6_SyRZq zMs`hhMn#qs8Ipa=zTNLW-{1Yce~-ugUw`z+cwg6b&biKczFya%e_?k+fw_^=Y`qNB5sE%FXRgl(-}3MD+(Z7&2``Adh$seg8@&mR(!1FuWf2SoC0|Ek|VQ$}3`@K(r9U*=q?xiAJ8zFpZ z+6Gqx3lKGKmP^?CAJ~T@^TG~hGHqIl#T2x&oT0%PA@wbH&J>7sR*%1p*=$ln>QVDA zH?^h~+Y6aHi zkW7Z$f*nGY4OB{%V1)q~?v)4ec)R@|PDVcEWm*3RuSxEnzniv!DFuAw81R@5$W&Q* zeb}<X&m7ftaxAxg2bda@aK zgsl1;^k(R*ix|4Fpsw6}`nW`po9Z@fvVvu~&7W5u&jt5gXwQ)e ztExhIeQ*6eD)8Ud+tV$%tF;owb;hp&ml|=<<4a^Kz6}o#^V4`8E1fRU$6cTn2){OuQ?$EXz%TOOG`s1s*La3=}fpxcgqJN&q>nwT!l3>NNXLexjYT z(>06Qm=9(g3(-QOeV7_~d zE4tsQ&=JyFY`=*vuNlT*+nU*wv%K$I>@!{^KDax5rF*s6WN5DASmBH|Z{GiyW$6*) zKs^8kI*&{8ZQtrmk0i$Tj;E3WNaetsbeyptl|6KP3<<|{cPS&)+o#&!;)YLvshFgH zZAZ}v&V6}86Zz3Q;!$9<{{fQNu{CLWr!IV^A=EBbVUSC;t@E{8~j7K&(l zy6A6Yrc<5(T#>jkvk!Gi&rRC%clgjbYD{`>a{_gcE3X}So(QzovSl@g{WVZN(qRG3Lj&_D}?Qb6#G4T1hh@Z0(I>#=(@#H;kwq?1W1?UWo8bAq? z6T7J{uA`KeiF3^4V=bp!ZSIRnLD6%MT*#F>^oHO<@pGi(a-ix9zH754&K}GOU}W|5 zi*C8kaLm&$CEt;s6>b9eqG{*_#zq4{YFZNiWr!pP23~?9Unb3h;(xdd1;^9(U|q9p z?nf3RN?(BnAF*XiUv>VkA^VSD>@kPivaHcMGC^rlp3j26p&wg%1a%>#*Bub`X4l*Vwcou7RA2nr-jcM!U{!j zto4aH$`qlG4L`+MJ-o~d3>(8pSK$LK9$CU(mer>2$@Y{bD78XWYq!Du<-6ei+!&3r z*B>H_0JRcmqSOZU1mtoay4HkIy50+@%tjbP!F*b4@Hr{HSUToP&7y>ykHOc+vNpMv zf_V?qoWZ%m+>lts9jQfbM7}0I`HDMzpMqq%cQbyRZYb;%NY5v|qU6gH~+5Hv;$uAl};m2}b-Yh9;nNCU(Pa$@|} zoGe0Qv;&$4K~yf;jLWFDm#@|8+qB<3SRp4%5huv(k?)idKYxS3&ESc_RVWo zH?SA!{qXy3%%Mn`_JZqE-)Z8XxIgRRiU5ci^*DH#va!GKqQJff;?)@DqywbOy<3;E z`8E9FfpdmxdQWl=Br9<^jm=k!)2^L2;4Vp|ixb-^-5gbZY`sXtdkPccU_GL)M!^cq zsJNCj#kvkc6bi}PIsDhj>vmh*I-?REppQEqFTm4^`-&4X`ObDC|H;0)OEz!C*G{ZN(JEZ%~A?&yN z+tD)$6Kt&*(mRLUus^Qy5{24LRD>Bd{Or~@rarvVPEHm=EzZ4=vS=fZ7^Xvny4^r% zn9liG17%belwi&j5)Wht^E2J3B;}$xk68AdSBq1ip&_(ihWsxo27os)H4H;YA=J$E4O6hKBnziT6wQUCu zBeB^qOt~r9C$j*35?c<(tl8@L+J_2KM>o*83JqX!lhW8jEdcuBR2;|gD+v32*i0*l zZC4;G-dh}`21F72h!6=|#zOspq8XNXv@6Zg$X=+~=L{x?nWn3JhR!bGGw>H#6^nJ+ zSHg-m8uBi|CS>|i9kF86@3a*=H0~eGnw>*sG<+sp_IwLeFpSpIWtKaQlsjxlb@M}P zidWY8Vj*y?EX#hgaCj@0eHups7!UJ{^%kR{IU)vdqq-;wToQi4-UR5BbSi;qdz_(G zkN>#|>C&RJLBEf6qVPwd8|nnQZbWie2m5LTCl9{1;iR_s!&pMa0E%Jp%*cgUbtH~x zPw@V~Qwk?2=lzsYmtIh;Ni4qLX(J=|^6hs^)N`vyy#rVbxUjDZe#;iC5H_a~^2aw! zq|WJ_M}WFI=F0h1=2puaU4{wN*5xZDp)@u`lz1`T4hva!dXF5>I-g7XM3>}D*6<9X zgJV!Qd2tgWv2Iei0Q4Qeslf|VU%WOSYz>X|>JLF95=BtJisN*rQ%M6+&%Z4wczKPa;0x%9;23}~{dheF zcaNnnMS7L93_fW)lr*y#TbbxbD#C&w7)<0u$}Nx5pWqQf_C9S5S(B1J^{JEI8?pEHMN9 z5|K^ZrbBIQr~A6Lbq`6yw|9J7f2gl2ODOo*MMr@fV0L+#{(R*5LRowrE7ajtkn8L@ zmo@T35ZhGjV6Wfa#k#jH#V~qh^8S~OaR1S5WPyM8_^BPG;9)hlmH6=u^r~(mHht-<3BuSuaSxFa?_gJS2O#AI zYeH2XIJk&igzbiK{m^3~v@pbE@k^UcW9Kij;58A~v0F7$4J(w% z-q&hv7rRAmQa)HsV?FedA3fVs|0+!}NP>LnyVSf?^9W1nA5R3vN+oqMG%y#)n-QIh z^aF`Lk$HKM7LBbBI9CCef{TXZ$dX&4b=~VpOAoS-@9y9GJ)Ni-GMCMY!2Y4Fry}mD z)MU=xPScP-liDxQTL%Iv9MTm1K_aN+J2LCDx8>}7E@`{oVgl$E?C-_7TPD9Z8oCsi zdfq90Iq-EmCm>8Y=P^+#|{z<{UXXQ`y;x{YRFJot%!w6J7M=QCI}mFaA}A@M>Hm`jKwu)d8$d* zxMbqHRKVZ+Ucp}}fu}%p5hio%9~=Ox;C}ucOGD)a7@1L(OK4p469Mc4jsQ+~jj=;z zy9gED12F!PGZ=bg%eelrj^a<Vs~EN#sem`XwPS@E%#3g|_3$(Tg7Z2>=rq_y z!xF2CA7c*Y;iEXEcW)Tb$f{Ry;Gf;$0xiA@xmXGRD_luRbeQ5Nk`DAhtLFJXBDQuI zegD3C*&zimg2CUO@*z4fmWVMR2v|nrc(eK{Ctx}=DLkb)py-W@C6+b z(mst9>?@s(^anu~C$k;H;rqqsXTZVSQbO0VpjUK!o!znP*?+%2h9cGdziv#%LOyxp zA~7S-%kd{`!@+y}b11Ts#yw4v;s2K9oHT(FVf=<_tzdZXWfUDWMRnjr8mNmWrPQ4p z?=cNI>I9~UQDaLy?tF16z0S#lg(QK2@8~Qwq1v1>Q3jMtaezEtWC4@(idC5AOYhPM zfzF`~c};j!1xAB5`xo=V%w@}-_Z(~DsbQ50Z}9~#0RT=r3OXz8v>aXg07y~Zf}Tdu zFKcQf3oVd!U8SxHFb~wY2W=Hk-eup9Vc#jcT~{SvPPF319*$g**h{#C*m>-3WFJ+# z|kG+<*faJ_bLKi&4-=p7>hU=2*fq5%Qu?d3Yh5m^L1SEzbd~9PK zG$8e#so<=P$?U}|MFL{Un?U+qx_^Y!+dBidfKS(q`Q=)UaB zuZlxg%(t#WI4kVcM#WgXxxSZ1BMBdU?T z0H?cJ0AMChCHxKq^WV`bEDb!X)T*vvL(feXBxHw~*Da0QVrppiOK=`w=6FT5Elx1V zL5v1a`I5MIEO$L23jl6zLf??6?nnI;xK!`v5;bAo0q-$Gb0X7n{>MXA@gm0ojlT`1 zqs(S)&b|VKHx1~BKjNPIJG9M5!3^t5A2uiSlkAS>%GPogtoQ+w28s^;5w@x{)LCik z5FxG(=+fKmaeQAT;mCF(T1vF+qe#aA+l3W+r~Y~Pu1zJIv&px{kw0P1z#cL2>=hi> z!dPrsb!R&SsH$KiHE#!u)VU0o&JOktv0ja5uLR`iOQpMC5bUZ8pLTBQy?YK%L#xFm zSo0Y1e<^nXUM)6~E}|-! zIEc3uKYCV$<89O|K}j1v>8e_K#h>s@*}poIZIVXFS8}%^4otbOrR?=1+eTI^C2{(E zO4L3|48(%FcH$fJkU+PdmS4Co&;x`l{2{Z58d+zH?U= z!2H5c`pD}VQcC2SCZN%W7C#nWu~12mIIRL&mRZ#3v+xQSI|=Y+xKQ1=Ya0EwoXMOC z^_ToqQ;z!i@#C{(KO=0=TgB;X3KR09#qSP)uWR~?ymGu_c-qA92h1r#A#{sG+t+sy4qSdCbDt^@V@oUspHtK# zqI#}xJ{b+Z2Pv}Jl-qFf{A8Tp#D^8N0}6$S)*9>lcdyRhTd5~KSxfVt;JP~`vHRG9 zHXBDa31(OI0&nm90``?%q<)V{nQ7b`DRzf(R9=ik!L`HsTAV_f349}fKpumA+E`we z{3!0%MY1KFd!DX0odPi=+pakT87q$A^i7gkOqF3)!o5~}T!nb*2GkI26Ms2y70x2r z()Ru@YZBYWShnkw-=ka96J~5`(;XhZ%^Ftsn)p2igr5gqMsa?vY8FpvivaFkfHCjD(jia-U;Mi3VBA6SDI5xr z)3K_4BVR5;T%cgj3=X`#vMUM)7RPw>vQ|ZuKG%b% z8%yi}?47;vx`#EG<0}!%evBk5fs6I886Qil87T=YYYo5s zV{rYiFoEuTIk+pf6Env@s(ucZJiZ@cDPiC!l@F&m7G9FG30Y%D1$5xp^Q)u}dD^ra zmA0`IWo*FUH^lvgkQ&@p#y)Jf{1qGGaF6o<9W-fU6)y`Uu3&A3P>L?CzlWjbn29Og z|7yE4;BC(z`a`N;#zRRxch2uK&k91QXIAkmSvwB|@M3A>N01U_ zE3Su$4F&)_u!Snp^{=^Ka7+M1nXNGf(92GZwVFR691sSND8BJlt0FvE?jrk6L?65} zKs_h6_%L5mEIu^g3nA@9uknrOQK^3u>j|tZNzGOF2rBCOGO6=UG+IG@bTY*NC)Oac zSNe314j2RE)QQMx@zg_w$&cg#X`I%|t5JAA>n|)2oD;kVc{{XPE1}hd;;9U-aWRX5 zRANeFNqhR#A@Fs3_+0OBnafoJn+ICPpz zOGFAG95o04YH$hkU0D{5QE9pm0`9A)W?gR?{=Qf%4SdA9b30xd9y@7x50*^b; z*SlJK$H2LYnWcmS|Ga%!U*ror1TCdYRy1;7?)uGmi`3PeYvy4%x#O*{G>94=vlk)Iimb z_k3}Xu(wYU*EnQXq)djO^+(oji;7FM3_rZ1^u(}z*{xMN8EzBqpUhGm)~pgAc2Jr+ zgpH@eIt7|2*>hLHF461Xl zN9V>JjU1f91`74Dn{h4FUZ{i*cj%Da-U-{;;Nei>-XVn4u++!c;uF+Y6VOzdLhWSB zt&!jsa#_|{|MV(C!s1anHgX52plGTjZg5Ic;c9~bnfP!u0` zi1csP%%bpV{^mTJ81$)q+hV=`_m8?mNLSZ3(#ylrI{nA?n*$?0gMqiXGX^<+xl5bZ zQy<@DhzT*=mF;eu`P!x=?n|N#2>53Gt+S!A1b#Mu$FnOVV7Lt?U*?p2cd2OBN*7E; zNF)O0`Jd<(p--6^KDGWtsVefSg4e`Vjy?K!0*MF8|I@atU?x^MDad?O-ED zarG;;Mh{h){AAYf)JyHKK4#<005TwJw0PYffMaB=VNVv{hvDs{YSS+zJdBoVo;B;m zK<~?uxZp0Ue#Bn8zrEWk6IZJs>>BK?T{N+Ed?KuWJL=NeUDTiRpFi{m>v`r^WkkQ( z@8m9@lNb?sF@CeMY&|94)>F5!KP1SB^CWdrPFc8vi#o{si#GdDbnGnEt7D}h*t~Ca`ZQYWMGMBFo^u1tfH_j9^P^%iv^tmb zkLUBgG4XfQB^H$vpR^tOEv5ZneN$j4K5L-Wtv;!^=^$R#zcLWeKDBl(<^ zUSSFBC_c5~GM51fO1YIEov$)?OM<=bQBf*CYB%S|5ijA^n?0mxn6z~mmFg4?Rllk# zyoQ~4K9q6rav0Tj&tgld?)J_{uevT{_DQ35&*KfQ5^^U)YhP~$6?;bV0kcikc%T8Z zM3y(6KrwopHpH|tHzBaDpRIjSB$oYoj7aTR?=<_y;A?xs?zHKH7sqm;K^n9N&vMya zLuV%6gEg4Xpf!%v7;#x=>DBM}k90*LUomjL$NlHCi4xb?d6SU~Lu@z0YvSn}D2m>0 zpV0@tl+_8AiPcS57EA^n0toW_Hv5e)h=nxP^igRq(w_Bvsoh?;Cd}-!u4qwBkMami zM*cUaduG$f03`4P_ez{y=I>WXb!Njx?6|7v>d$!zhw#>-r$!7lNW1%Vjb%hw6_ZD~ zCKIU{V{tQAX8=89H@L0rGNh?NXmDp%ut@%um4Y1cSv>Iz-iMN6>y&Ji-Cx!56>8g? zOIL2`FAO#TW(>5XvdMdAqFut%iKj9AKjt)6qRexC7^63AYfbT^4(dwLN~D5U?{)Scqm8x z2iLFWG-E)e@Jx8MGSxX;JyOy6sHAHUeyb?SbU@0e-#N5SZA59t)LN|SSp_j{c?!O) zFwvLlC$(z(Fn8*{-n4KhWd)A^Rrr>=*6D2A6a$p&6#^ z?iwwg zcd%JkTkPWQaFkgIukMkV8uU@zDW<1`_lJx!A?oN;cUph)9A}Lu#UP$$_`9++@cI9NZ>#*-_ zr_{=Ni3;U;ZDf7X_5&>*SOUJT{Y&PEJEpAX8!d@TwN5JmtP8}zyTm&G7UJ}=%H`8U zdS}lye=mpGH)bzg<4;aYKFf+!ngI@bMN0QGl>CF}RUNI#Yt!OZbpIq7Xkb2mE?MAy zSnm<)w|-&^%&^Qs9R6I%!7C4Mv7n&OM5siOsNJXE?k#b0+`sSSiF5KxpnVJ2Pgo^C z5_jUc8pm~{j10%yCKfIF=9>R%zK7K#LMR|@OH59pw=%eiT;vK|E(E&4p0r`Q(f|vl z2g|&Ym8~m1dc~*1dVuG9APhcPg3dAO9p?1Qi{bC6>~9$0nS5>#rg>_hH0k_D-gEIp zHRvd`)$c}u#?p#^1TH>3a?~+~`xo`Y7pkvat`gob-TVjOUR{c8R}X$P!z*fWD_`ZS zH^(Xi?5u+uK00yXe-P3>J1Nxk?SP|f_`!YQtW2TUXYyN5{^<`$H{F2dd~UoCPszS3 zttj+flDqgD5Xqu2fb5;;~ZJymZ#C_e^N^>x!8_aFiJn0vDAB zmZ)lsx!JnyrUiTxhQf*G-o9+BRT%1g|MoB0WDRJ}hXOX*BC*f>X;2rCeQ2$7M{CHJ zq0GmYdLdg=kK%EN(;-h>N2?h-n$G<;{K5OM9%b|iwVeD3^Z`yA6X@e#znEs!$>scb zaKTEZeR7lMKT(CO_}{E!2XTJB1*WX{XUBennH;n9BpmYliuQI`3>B$nJUZh^HeEGO zxLC}OHlC9I)DU00ScI{VvDR{kTElw-YhWVQ4#oK_!@j%#`SG zIH}*^?L0vqF8~XdwbdOFp+@PZku&v(aKQa*&z7a1ZiBzC9&~B>T2~`TWCU7u zWLOU7wWVQR`$SWGH}jm2?<0w(tTTfwd17|8+(2b4II34Xz!a&oDOMbWt}}=6O*U5w z7|CE>_*9ZWpH!8qRSG^1jzf$%pMl*qn#&a!J8V=vD?!D;gpQ35+@y^c^bouW6#Klno z6h-V2Bptd~KKf6p;(qjRuY}QjX9RPA>K*UdwccdvB1sE8`7P;#u6;cI*BK+OvEq6P3)P5cuzi2ra}1zZj{1Nu z=x!0lF<=-bb3-i?`-%6Pi79xyqcV?v-t2{DY-*Z98RmL<0zANn>eH8J6}oPDz`Vxn zp*kne&}2$oJ@BlIpOIj9RqI@H#+~nvQV#6h9x>=o+NvCw6t|OG#0L;5G0sB+oBl^> z{~hW7_ZNTd1~%cO=CAh&uvr?thcLhI(3KWu2%GiWhyJ*!FVwDs(E z-y08IT%AWW8xgP=f%nL2nV;5|W3Ha?=p7NB7lSXF(?Mxr|Iai;{frja503gQ)|~} zdSWebB=Ds$5Xj1u92j$5_}VSq2Yen*Uq+?F8Wj%%pL`d=_G6N_Ke@u_0n;?k!W&6X zyF+&TWP0?U`;I)zt+Vp&yfc!ebe9JNyBhX_2?a3-x-$NVT6%jUkv-t)c)W9*Cy{FW zjikBM$19l6O@h6Zo^w|G1TpDq-H(l_=12U*`miPAe4~UDADh&?g4UO|q6d#cEL zTaZKb9QuoQ)u1+Iu+!3`w->(BSPgCD_J4$!5zj95k8F#GDboMvTwh^rH z=+)&2i#%ot!5BrWs{O5L_$2-M1x+L4KQsdPMWdN3v~Q9%*mldUU-5TW)NoR77cMsR zAO6bXRh(T2&11=nSF1#15O<7IO`<*1`Pn#5kMZ6r=1!(3o2|BfoWTiX`!!d`@PpRQ z6dudRHRU~84)4x`6@RxJ7rK)wo_(_H`Ebni_#$yaFIR4wi6Dcq^^3-wrPu6s)}8ug znYljnuxG`=Ps4{-CzZlaEDBa4H>2Ygt*;QHTR8(LLH$DsIs*MGe3Lh-YhswYyuiGk zLK}RorL*P=^0b6@>$MvU0e@d}x4FJvf~8HWDb#hRcbM346e!N$-}Ga)sRPbuLE_xg zotLLE{xh@QsBCfmvu~m{E?rB+?E0yM{;Tm{BhPnZnNbk1_BJYaJI+FbcC_Hg2^to~ zFftU9PK7HwfII3%brCx~&h{pr#?*wq_i6%GC&?y4L1p$)QrXc~#{iz*1BE2N$627} zTLq{o)@_kA`emRFMde(S$tLR zHsnxrs!&@<`g{oc__nBzV4CuGwsKKG-Y|}@FwpdaT3e9U{kZ!xJ`(bl<;sRiI{}#U zpKW;0rZDn&yZ8V^%jb~WCeJ9Flg=qG+O#PsvFqZfBX*D_E zQ@tDx1>Vc$q3(IXFAZO+`P<4g{wkI-|8af$qg3^~uBwkQ<|Kvb(2Gy`$KehY`$om~ zmfK?4K5yCH@AF1q$`U+&a52r%GMpcz*!yC#jW!{X7%>zgK9JosJm9#Wq!n1m_T=xZ zRZLRki#Yex7*Y3e-_(BTBOqQC$A}mYNnH8^c9lYy6{YUGsAVx6{1YQdOEB}9XW4Zo zNvdAWZ@qkPNr9mrSbWud&uQ|GsITb4-pqc!bJ0$n3?$n4ErAk6x{ zJj2$GI<#6+t+Vteov3f+MT`=*c^i?zpMmGmMciiitRRS?4 zhwt}m8Q1>!?Xx60@kD9Q`3KGAO6AInA9AV~N(bfNndqrG4Ks^^;DY&>ZS5Z-)4c?% zj7>_W`}l2D zZKgxo47z(^I-Bc;K}DaugAf$%vi0Z0*nh;u*GP7au1#}h<99Y+@{aViB~}%0B<9Ae z^usBf|yo~&K2wIs0>jQq723&gDCIq^oYwpYwKm%oR`mo{&L3wTS z)1RI|Xvfhkfg#)1lw}r44X1>O#H>GpL(Z32SCZyxM7CKE?q00;c-{FDC#3lRxxs9o zWOa0<9_tzF=o#Vn>%Bd|E@ZRy1|JySP!_cw%?-FV2pr*`Qxkz62@5U2L?q8qlhkNOil=eDXlpf)g(XDT+jzsfZL^cIP)TWL)6k{UOxnGGW12Rb5 z!@^>6Dz#PY!8x&N~NEyDMa#WpP0-fWQBQ-B`S5+b@n-dza#5H#m%bC;rc|=y>gp z9<#{G06}XcnZOQ!PWuArT2>>3uhA8EtpMF0V*x}a6`kyF0$4B3yQhX$Lo2F32Jgl{ zt2b{C?`*jd6X>vX9GJ2+CM|jGy`*1+{FQK+=AlXpUqZP(rNaGWLe;A7BA{&BFRJ27 zJ^$h!Xm^OdeH7XG-(l+k;z1Gl*wHdyX_XdeI6Kw+R zywI*jwB=w1<*s@2^O+H~bLU{ zrf1`2t?b(G?vBji;j)WKnSqU_nx1@r^nNOt@|KYO`JV+Gr=73w#Jjc90yAeE9|-%F zwe*Vt)p0psm>N|F_`OhvMQbqo49Bfzmg{esdx%Ni1N@QsQ=C3g+lPk?s-UyP$h8q< zN`yJC-~cyOTrPFdALh{r3H$8dE+mPclZs~ew!aXF-6}KNh7lxVY5$< ziJ_GCv{`K6;p;u%4{Y}Tc7AFMFj~=T*`u~6<%&jH5W$o<#o89d9eR>$OxQwn1PfO`wd+WGoq`zt$p%q;xrPliz)pcg74DY z$Rp|Wt^Z@zV;nSi50EvVf(E*ZR~n@XO@|Le5x--~#@s8F40z18wS4KvP`}cA3@Kji z3N+$FH-$5O(p>?j=Rp`{@SyjjxPpoRJXPA^kZ(A?G#2p8V4g5}rg3c7f9ctc;gymT z_u{vW@Ac+yhw|Ma-DO$HGhl98X}~b}3S6Wd_~{46BlBdFXQ!nFy!Zk>RW-O01^+Z< zl#qUyyDYTbKR>?X!M!gPT1aowVJlc>`Qr!e?fCu`SN%&Ptgl}G7(boR=!?0n z_|$8p-LXXrgVR}ibM`H0;Nmp5f|xp)+_A0IE<$M&=3L8u0(6r~x}TidWFu%`uLH0$ z?bVt?ZYrMg0zn(HT{>-Xz2j}9|CWS4a0ED5A^J4=bP$k8Y+IMAvgj=oUVG{U>-H@x zG2HRBJI#NDZy;O>a?~C%M>84@z;4jbok~eE;a&ttxQxB?AmzMd3RRbE7`9XE@{s;u zYL=G@j8L$rWSaNiwC-zBi+kUL?T&C1NQckMei5z0 zm_sF@0gaMR6o|T@qFc&5-!6GLct%Z4zf8I!ax-0rb1oO~PB-7Vk=O#%R(9lNy1?^D z$Fk;V4V+K-^NKEjrg2%_&Xw4AV+iY!u{6kc-^|+7)#mBG(^p++%U#|SGt2WcI*hSK zyyg~X^n(`S4JNt>IpRI7h{!m8H!Pu#E{hf){Dj2iWP3wa&9Q`SM|i8_tyHFdUE z0raV6g+eFc_E=rxK;jrROh4e=%*w2s{lp89!aM)@qV<-w@}Y)Ant;qE^Aj80Q)ZlB zBWU~9#S0spb!B1+<-ou>De&w*6VAJ=-*&32%J23V`Px19f7XOgRg;q9i-Y9q zdXv*<&vLmaJQ?l{|6GtJ^AQolT=dmDclG2t=u%2ZiEk!TZF!X%c6f#tfg?kHJaG1P zj;dX0ncZp*n`mt#5F;4HTBbKsjh)+ zfNI%ycBo18FTJbA?O!@^SU!%#%$BqS6ekccs9J@vDqk6`(|v$N@Cuvp_ig^LK-)q{ z17uXT`;P^t=?l92>jOYtl%O$tUI1);EJ-e+5a>|@GPN;=fB~fX;0xNNI4y!MA zV6k6%c(6iM#~jST*1SSuUC;gkPk)?c)FLkQJj;|T>VLhSZeC5n`A5hG*IQp1=UH=06Te(kzt}ul0dOQt!TqSB zNh_}VkvFfIdiDM@qP@cb&>gTp<@A5#H7F2I{=DKN1ErfgXLbS4v`GDj0V*@WX=j|P zJvz66DjR&-W8Hrdie%VE-;5jNH9|J=nq%VNOduZ(2068qWK#K%Y7#ZAHe~)va;J0u zVXT`ek{rxXc`J-Sjtxs@(x5^jOI0Y;#NiT?yM(xSue?3JtKA@bDoyvG`C; z4VcstllsnMDgs>?nPh0E?+qrB`I-YI$FloVwSgN##m{zAjLKA@x*`-VA}nL~a28Nw z^c^c#rV`XV4NS{A*+hd0ffXU@)++T5&@Y)E879^&X&2VfsLLfkRn`#N;nDRKtTsb* zee-QDy>QK|Ir|N;P3a)){OvVa=?t~nTU1Ayw!IG8GwnL?rG-qyHvvbyY8_bGG&smS z-UbFegi2bZ`gyDDg*YbmPQ?X2^55!^-~U?fa))3T9A-z5ZzQFH0aV%6f5F@Wpv{AZ ztIDJ7Hq%Tkyb@Lk!z_TiqhKBz^UjSMvX=>DMB^&3zN?=3K>^_J_hyB0CDMx8EjpH+ z7k7Q-A5Cjen(4yG!JO(m;-J~qN zGWsxnq`E|iggl1XIAbTF_mxes(VJLyY{;2$OgconIWv%FYa=~9#bw^In+%;}!>cBl z%w9L2k+umsfun(u$bwT!O4b8(=*ieP`~J@NVijf-`fbwhvCtD9cYBTqu7`Rl7m%CS z(N&})l(j<3w}z^B zsJDL)uIS|Oet>ur=teUpt#kVGigGgn3Su{rV)0hzIIX*C_Ln=~0M*j5$fChJR}!Gs z*x$_wdamC-q5LhDJt4j{mi^RT@d`s^gtPZZ?a?Z{SmB&h}((&-I6F3~kW0iJ#bi{RK+rAsoa%Y{hKhn44<4B?VqZ}KhRbReSG zzc6fJ=$wF;B@koO`?8J^ltm0Y*gloeo+Um#&rhIcJnhb)RVG!5$u=qp72D7nQz15Ue^p7pzSb&>nyslxzZx*sM()~; z5(g}Lrv^6oi%#`tJHNdazoDkkJ_FSHw*GW2=IJ*D7C&bIXZdt^8`+#l8dz=ypn=T) z|EJ<5tGzVIw1zxlVeAF$*3H_Vd?HJ+wu5Tjcew?Zg$#Ii%_%dZGD0p5(*CmJ284?@ zR|bcIbaNdnsCTsgRNv#8s!6}Zu4S1-`5n<()$JV-Z6&UJ&ui&e3WZwJPTl;QhpWSb zjkFSm*1q2W*d@5}jtgT4t3p&g;;(jntuUixZqbd};fO8cM3_gK@7f@6CsQ8m`0%fF z!)Sd&cgWECp!6uMHL-J_mB^mxJ92~j7iq=NdQ8F2A?7A?#~8UsGxkl$2SG_QGPTLl z#(S*OX*P657|)icGxvINZDKbbIs}9t7RK4%KkovD@5HCBUu}bf?kDQ)EdS)4lqWU= z9S@a;SVFAOo?6J<3lot1vB0$GqOk z;_JeT;2SaQD-liol@XfaPq{^u{O@e(|0M2jYA&Pt*QNKC${KfEtAs1^zZ2wiP$U+ok%(~>ef+jy~X zZb*A(kl(Tp&#*Es-1cJzz3{{!c>#Hi=7W8*ZM840ndIgOWr!{MI+rttBURRcN_SbX z6m#OMgfg=kMx@{s_~!vGqyy!`MiOfX2>EfJqYzLtlNZp+@!IE@4sC%jp8EM}qPy+j z_Kz5QS+95Emz-3T5v9byEg&iESG2Sm>FYY z7GKAQ^>L=};M0KGyV7618{|81qB7&GSQ#(>^Iw9R{$KgrgICJH4D$f;$5^t??EAJk zfKe&eK6$Ew<`?u3=P@fZldgXD`RPJuQB_Sia&p>>sZlQnH{K$mRVGu-a#8sy&xTcY#pI_$``bBqLJfoIsQTE{ya!&({ z-dv(Wpu3ZjA)G(Sc`itUP$jKP3(63D>otoZ)%q!l&mgBbeAg9hTScLv%>V$HMi6B~ z$AA}aplI>Fzb}OQglmCO8xQ{1zT#p$K6HWk;}}aYKa*@Q^}MRMU7F42Eri+n)fR9D z==M20c%UA<=d}N$?TE>p|3GszhUPT)Vn?BOhS;oKVuCW!ryHv|&N;g&;y)=}_`^5x zMV=Vuy;Q#f6DN!}=C&3mF#e^^k0&xoc7PWb$fud@?zZpI?%b^FQU1-@C{%=B{J31yL%U8w3o<>C(t`>@k$GBQVMfWXIPPI4Imjyh)a zVR3#kfZT148^UGZpgE)(Ld}xv!~$kAD0ho3;INr zYI_YVTWEKl4pJhL{$O^k3KFKMg$1QcWKRvi=S|{Q|Rwoot1~~z+ zfcsd-IPXfMfU7=7ExM~NHO-Y!U{Cq0=UsvM)%Ocqp2}4WGZt149}^_h&ZhSz)B)4j zASvz$)pp}gbOg1WKi?-$4Uyqc?5&LBwBY}TvGisS4};A5h|_6;b%FSF8&R|D?kgY#1SS6XQR%#H96 zwV?t;Je{BLmwd@X)A-mQyc|2p_)hUyNm5xyS8>6)w~UkCT2Z^#I8#oorb4;(X&f&{ zQWOE!4nqxB5B%jyyumk((DP~WjJ?1**O-gE7FMC<3{jiPQ0k!&F0-W^RH9WJ5EAG= z=qxbxwc-%}fOy~x-xAc>sWf>1btx&YEVP)uGhGP2Q5_aTAugK>v#q%w0P=wra&E(< zx+ST^AqS=$h}a`;DD1E(QHi#(33ZzTK_ThCFIe-rJ7P0Vz#=R35j`k;A5$uBppFw+ zl;cm~m4{2DE1-aLq>!9hJLnmGw@nU>^osey)2WFKgPsh-eGPI%H(NmZk0*QZy1E7Q zd2Hq7iozUXx^eQsbsjT0y@!IpwykouNgzXcXEL+5QEFs`0YWybcr-RFZJU{&=vw2> z+(fZ^32>tf-YCm(i#+N8+X#!sWriQuz@l|3Y*Uc-2kV9ILLV!i&zYK*tF38a--K2M@JLY!rK$b}VHOhnXG9cIjqk{d5=1N8z@M;(o9d&WZ}3sh3o2Ie?}*O{k2>+# zt#u`SXq~$Cc>230UTSNpaN4XB*@+Eijil@U<@b_8{fJwlC%*otTq66Cnn%wT$IW9g z-|DkwhlA(oqRKO~qk}TyvIN#$y2TY#DU&`#zA6!;0>nznrxb>jqdFrXv!gcm3&jCv zmqQz=yS^NE!H-eeHjOZl(hG{tRn_>fjjs#fQ{03={Jtp6&V!sRf8M6ltH%9ydt~=S zITUS@l+II*^~rpVOKUjU4pu^3cRsS7&zzSNhI|#z)_ccFbPvMR$@4mX6k$(f7VKA% z>&>06Gy1?7GHzCQgD8@QjyRP zNxb<$P{ z&s;jtZnoHr$(uk0KkB0#+%z>kmgDxNzTBA$UhpYTIb+Wr#tOX6Y>iQC;3y_5(-)zc zIcC<@l)MMGflrtxj&pi@3Q?jHqyS`GY$g0dR1oFKk{oNNp&U1xeN@^rdB#U){mw z%!gOm^QUZMRz9m1Kgc1OxH`(?#n=*^;Ku{?tBsuB;OWx2jf|SXc#Es{%#8StXwwD4 zS-M^l2hxa!1{7heY=zzT1kaHSdeoi}`xKKuz<|cmEy3!ncJh)31)aODR}Q>buRLVC zykn2g(?I}937g24PnQI_fF1A#1`s5niuX*~jMsHYRrNoyU$<7uO%3xIwRp>79eTG% zKTTEXP0Go2;8{Klxur*UoDHh{ssFL!VutY-AX?SPab&^!KMY1IXzdj{7#EyVtfCl<(HkxrSxgs6nXj)wx`iC4nfb@&N|U=5pK%PXxn<)mCP8M^Kbz7xf>LPO9v zN4)`KUzlH{&>h8&h7CNMh9re2u;wBomN~4tbWzL9o&mc77edrSVNuSAqtz5pJ@4c6!%D)(MkH7&57t^Gqxg)8DAW%P$6>io|)gSKmdq!{Ks(nHz>ucS+H1ftjIw# zbjFgQUprbQSeDJnBEr#lLd*k7HAeq>QxQo)I3Y*DJikX7#nVQ5ix}C5$2?lTb=kMz?FM9O97wtQPdq9-3ulS&! zRmy2FP!>HV=x&W%G|K*s&QTel7&Q(uWI=|$8&?l~S07PaCAv2s$d`6;bTdii+*4R$ z))KHVGngjDp#j_jgxGmT0k8cQPndOIamXzx?xy%1(Q}h^1)Vky@7NilZp^h~fg^9r z!2GkvRBe_eXPq++J50^$!It6& z)oFV0u$KqNRxhu7IQ6y$##84GRQUYL+}dQG~b`3cnxtMQ3H zDOIxBib0)F*&GIj5!%n1jfV}BugUxjmz93$IU49J|4XNSVE^FA7|JjgeT#YGMZ+x5 z$?2HaxL$E)%3W-%;c^Vp!Q4zgjVzx^nez*ZrIG{tqo1{NqoYEb$-E z{(o@P|7W!H-_I;3Te>EG%6u9pIaPa9da>8!Qqs6TzV4dJVGn5Ew*=+p;0dFr{TD|H zlEP10F4r`<%FBHGF9P^KaPhOCOcOLVHIql-s4Fw*V)NqccXesN`aVw&IUwH5C_nDR zEt|bwBM(3Op3bvOgLe`9$lml{>czb{V5cln4*9I%e|~0wjNEV0gt5sb`Gc|3%%B}t z3E{x)7|Gnz1s-xLaru+6eit0*vzPpAfZVyH>HN4?z+(G(@2cg+F%G4k4hy+h4LU3B zjRC~o-c^f(FMs~O@bbNhVLH8l6+_93S%uTc-a?DLPrV-%&i;7WL{MS-VsUic{{}A~ zpgjRIKMtk+&r@UB%ccv$@&r``5Mr9nSDQ+x#PgXgD*kS3198>h|1=mt-2hao<4zq2 zA$JpZqN+WW7cbU*Sh$^4o*?n|26{LioYzxJ)?bejNQUQ^nP>y5RfxIh2> z?fx%%UdeS>RnuOv>#x%S-1|CIaliauzL4lP=qAoP-xC6#?35=2Aa~vi2mJZ%+D}B# z?jXOD(W`Jiui$cWj(bXiDhhn^;IHTNy*TJ{ZyKP7W+s?FSgzl@z=U#jt_}~Df)p#3 z>C-bnVE(y3eTb2CIp3GjC&$6VzxXc6OxGPP0W^AMQ{!pkh-=_Zrex5q>u%MhfqR91 ztLX{;$3JqXPKPbehJU(}MXM}c?BrgY{-(-3Z2N6_zG(TN!O7gAt8qG*`YiIf> zdwQ&4_r35hBHE=8*2TTjptIj2f$JkRO~2&6=54119i_$m2?dDP--fxzL!Yc}>+hEM zG&=3zAjvPS4E;pzpX~vLxUv3r!{(*s%N965_N6~NBnCiYIH*K%hT}12;=s$98geUl zGs*pD2mr}^RMDUbn_7xQ|7EP>fZZpi?E5Fv7w68?7k~NVnN3HT6OyO>$1d#EwC8|# z?&{K&dv5H1k(A(XH=ZlZwN&pCYq|Rehco9&UdzbY0fWqEN1zESFd=HkJ(K_9qx@b$ zCJwso*P$jG`Ov{$&S~&t(AlbG(-FX!fA-I3QH~W0E;sNczFc`C$Te>(BzbX&BXjru zW9kxmW7I;(n(E^Wx@6Kn3&|niq|N4nvE;6fPUy*&nXM@7dKQ3Dy ze(l}7INzL3hTd&DE^PXe{klkLl9E&z@U{&laDej~dpvxA7C#y5ExkA{bp?~bh;zR* zQLHtt8<=p}{wmK4s0?4aY>@`pr2+8zOz57a9FaB|h1T!vXO(FC(@}?WZI? zk7mIad+AA70h(z-QN21Bhse*&J&evBC20W~fhr@>kYOUqyYFi5y0_w}{LYp-4S_fX zZop4lmXlFuS@+(XBS_pN+goUPwo*JQio)COagg_%Sb9*Nr|`XL*_N09V9z;i!&Wh3 zloViEGs%)UYXK1Qn*Pid@uWqNiXflq2N=m_qW;^@Sxsx>U{sRYe06>bEcG$`%9j2m;c6)0{y20 zGH~-C&{gK=Q9Kg>_MhAM1^!Rm^`+}G6z}4@iY9Rx0?xs9gvG5 zo|zNKz~2smh@Dp>4G0;66g#3d7oYkGiO%kxX-bOVzw;-K%FbZ!@Vn=!ZLmks!5B?g zNw^0b3>>CuCJj>$}$Eexo(Qf#1xgJU-ND7nQwIJZ`re^Bo2V@6%){(oYHa_ zT{~jrjd>u!F*FTAGk)zKfmDW|dLi=HS{Z;mf8t_tP__r~(M^rhxS7ce{o;_8t>sh7 zEqVT?E+Vf}TyTPCzu%OnAIMbE@~#j=v9?X+G!0#tlnJnR@ud7nzo>6IsW*E)w2&_K>$4xmq;()>p`O|dQ5Z!Z$Mv5fO``PN8HUKfaEeeS!u$~c zn2m=rU!88T3=IpOTw}Vpx^`4Tq>Sp6nVcn?Q2d@g^E7!34KzZmdcnUfP{J+mYOD|) zq^X;ABbKpdOWWg+1lL_W)DPOo09+f+6}cL_ypqH43H=XKWGh zZ(9ylW}fjR&&Klwj`)f=>Qh+M#4L-e$rlmby;Wc zBzc{cU>wZ>&avjgzAlgKrZNsLiazymtY1jtp;BrIOKlJ*@1V zOX(KauF)||IXD%K5IgJrlf_~LI9;gUNUNd&GVJ48J1y|B7X-vp4_29WpA0!Zco`k*mW zvSIehL@^oU3Vt1+(t~8$RlAHr#kOtEkd+63KEc^6s$;(hsa4m1{HIWi_~)dj$%B)x zjQ|Z!h^f*EskXsTUQbO|YF0)g6!Q*M`o+lueP{?x~)&U+gjyCIjk6+f^-z`UVuY*LG+AZ+)4m zx>>P9h&ZA`TUj6T@z5}SQwK#B;CI?D7?1Zu@Jjhtx#GjE>}JU=-4<4loOvyuFF&$t zf_$RsP?jNY-dCdNDkX^6Lui!L52+4)0Z_3{M#p2K&2ZiANP$9u^hS=bZmWgy@EkBv@AAu;_K`FB$}WA3H7H59RT^T zdo)$82rWzH(PB~S*~;OX3`@5X`1T|Be0RMj;#rAZOl0|nM>O5qogz1L7E6G%qxt^r z@g?7TWCCnMAs$p$!S$R~D$%spx|H{;8>2Td<9+OXnoLx}NILhp@?c?#hN1!eT#U^$ zU58TL=!2=aoi2fGb?KCm$Baui>7D+q>$+RO&`@x9Qpf-myjgZNcFa?t*q1LqPqo>a zyr}UTgtsMq6Z@hR1wV1^{h&!iiJ!O5wI`$Fb43JI-NUUEMygb4k3ku?WN!Yl4CdH! zpVUr(?pqW|Ue~z8ZXgH`eZCV#*G*|gG6W-m5hp3>BOR;83SNzu^=$goBWI#M8dtLAP)<_J;czY2Kg_7IOC}$qkVKecI@FHS+9I@E3ZMK^S(I02X#q$>ykl%5dr)o0BVZ^^g z27V1LS+&zLcl`Lr=GeH63^mV|vdXj{!&Wed8BY-xsdgTQe0d2FOa2v;ZV)25OW&6hl zsVCfs<%#N>ZP&L**EJjC(9s>`)poj!2~HD^;u}e6fwwFttr=$|!${{}9M~MjQ@pkO zNe*_s2S9c9g7w&L-J)(N6^s2$&vAqPEdx(=l)tlnOb~-03l@v;r;mM>%p1?FVBJ6TXR!shcj{q;# zOkJdB4^cMF61Wk2Z63q>>ZY1VH0j!IC5VzT^WfRKvQ3pZK2oe(_Y?UNkHM76-z0g% zq7Pn1f*#9$D92MnNz0yFq9F?%P{j+W&ojuAA~4uE-*?<$09Hk@E(Jf0H5jxHE0m~) z#*uT8(P8(sb#)W_C(ZO-b&{LC)wvBjAfD_IGryR9ys0@enN-Q9kShB5N_dN)2Z2s(bGc&klzE$@y2c}_3$xke2pReUY&gpwMj z-EEhd<^+%6>TFsaQm62fXz^|K5=+tiG5*y4~cK(f)7 zcqs&+UuIYaX^353Y1Z9Z zcMUobV!NF&#K)#S{l3?in<3wFGeWUvY{x)3r%DU;L99SwZj_hbNVP|iz9Y?+`BfF) z-iKVJ&M{W4++g!~u-LZT&uij@IO@Sd`;WN-`T(!#%#JZ%D?qBRsp|W-R8!|Rz@IHu zoqUftO|#s-;v8zZs*n~okktg1<=8DQ6eQ?V*ZoEN*QZxZ|MGO&T!zmn;rA5!^*(`! z;;7=|ZeLmxoHs^Xgv zC_D~g2sLM`Zg$=eQqniJ7>g~0Rw*@}rqG2tE!9<$73?ZkXZbvqdy6Wo?xUhnutUT5 z>rmM~QJv`B*sh|!l8n;lwg3h98cVF6nybiKMzwo+Bbh~szCx?0s~YjH$Ax4UGfcuZ zPrS9DcNAL}6=I80%YE37=rfee5TeR6G3bg2V-NY9al>xtCcw5G+?Yt%e-*$9H z>3zFwK&5n<-`a`*E!Y(Gc9^8{ln{WLUP^pm_7uYB7Y@3o*9m3lzBH#ztK1hQykg{A zocF1a3Ftf$*)+%5PAc)0b*mI#QCwXx%&w>uTO~Iy-6+)mYH^yjtdVHrF!C{el3@0p z#zwKwjx>rCn4SD~F2+lba?3uIy2n2=WS*uHTbPzRQ!{9^GEnF$-IYOp)MFq%R0}4* zPo0O3mO3U5z@kl;K>&BmMGg;Ny+mX_DTUzx4 zE9No7y04V+m~V?5!;q2VMU-MT<)^$?M)5#}J$7JFmMPcvqfR0(w*sZeH1z(Q3U z7cEuhgs6W5lsu8EwPyIdTc%a=Yp*XBw_y#Xof$ps zBMr&xM|2!P#Mtvmp{HTjPezjPLhL&40g`6ovFhQdIo`%pH?NyoTaU=)KHPMNg0;w1 zv>122J*h2CB}18mW*>5&iWhD|1$jR|41ZLoM+gbdiqYy3i5y~IMn>UnjcAKO4%9F! z?t6Xmni0>60=X1Wu3l^Q-jMv1r0hdk_tv#~v>ZFZy{~!9hw_#wK_kYqwyJHU#C0YY z-Q82&ulyb*#P6_`o2qKAM?Iv_b%uTarcDLr;#<8dAcR=KrUT}9nj`Y@j+|M>5yLd+ zmg7#yDO;OwlCU+D*w%LBInxfr>Wp+^+ZSCRzd#*r+*B=hY{}rEdj=Po)O)z>v|!Yf z-`hn{`|&(x%iav1rKdawCHv=+tYJ_`M}V=(35DqV{mq^&-2j+PPmZeaf*%m!CK2SZU9>Y&_4%vYQurA6Kv61y5Km!;EDIzTsSgmrL`r@%ZEFE9 zmr)W8jPE$JYA3)ZLMs%0+B5oDuV*H7{PKwoMhJxgj!p$*GJE!5%HXPpkknfu-bSJv zBF3w(u=MeeCNDuc_xyDHV@_q_yAkWV4w&;O`fjfN?xIrm_!ZY`-y>r(cFVW!#{cet zvj}fFy}L`nfyYL>+)1c{y0*Zn<(8_b=5{aPPkqM>+2I>jiX%mj9wK5@b73oZNGf`(d3MT}B$uB=3WJ`AH^@G1(->KK96YeqNI z)0qL7%uy<5cW8gN9%G`yxd^-0TGsddm7at6ZxgUZs$4u7)}&L?u2c;(jl@VeC z;>$$*gE^hfdIwAmrf|~TPvy`9zDQ?PeC;&7}%!AKi=XV zWb>w8dvlwTBe8^^x6TqUV5#8H(ImY`9q}KtiMoptwn4B7kQuaQrdjvrZc2(xA(XmDQ?dD&16}ScXEmD7E9lB&*9$s?F?`tkTA3L}$j<;;K0O zj~{!R6O4S~*as4wrXQ{>$(TTPAP)JRoF4LMWny?*(2>TeEjH#Ez=Er)poq$OiDyST zmN^I(OcnCTqLPjy70(klfUiE5)tmwk7%tayvJv}fyN-Yg4tikiDdBj@{=9ZcWU3?C91a0YIjA+MWUhgvYwnmWZaMLT*{eijC+JN^C z=fYEJ*zHAKRZ7fbE6CA!l;6=4M&eBw_4{12%BsC6b@ecxF6f=gRutnaI_2)fOO;-o z^l!3gG!g20Q$6ED!9!M5UpdovNn6G!m7gSK?|^9sFcx2$C3N|6fOVQN-;Vd)rU#%C z>rT4IE6Q?)xRxxzEwr&b^ip}e*)Yv&e__Hq*VKweK|aVnU{E8AUA@Qy!rU=3VzHrXpO`8?dS|7* zL&U%*VmM$`9H?^g&uyj|_LSX*CQ-S?IsRnU zGws3Kqis>te~vr>#C9Rd5@rE9V5$h@EK}Vj97p+1K!-x|e*VJ^XWg}dwoO;7a)^7D z$N9x+GUciPQFH+BHpG2b_Ix#?`!5_#$boH(f-EO%X`-$N47P$ti5!IRvOAa<$KwqRC(;~=3cJp90CnDNaO$- z?hy?LD=B25f3X=o1H5&CN{6&mL2g-=zCWLuPp{RA0bQ0r$YEJv+5W`TBB)#;>E}u< zJph#P#gy{sZEt)Kp;ZmLmGkcnt}@%Zm6pS3n#TZ$Sty9IpFIDWXQe|fP= zqM()fJE*jAGH)p0heycrg^oSogiI#ze*M{Lk)6uPS(|1@7@Vq^BdLR69rgu#){B2o z@1Y4o(R6GpAfGz#)uIl&R0LiJ3-Yn9eW%&9k*(LuYA)WQHS08w0VE}S(XHc ziR5h%Uj$^C%e)A@*Uesw(l-ouf^4+akYl)6ctWqv6}zv->0wwrs+Z1`Dx_NEP{geLg;-BaPF_-$e5`zJBE zT@fnNJvaZ4AU7Ct81*UU|?!IhWlO~vZXyRg6mbvnwAr~EFJd;A!%;2VrC>Uc#% zg&$WUyI2mJNjFM!qTKe*O~XTKf6K9A6Yib#y}Y^v9jAulWq4)p-+K8_Yzi?vSl)aN zV^aR6kQmf&)1<;m)>&@>6aF&-ps(g9%`{mcg-?<5Y&eoibf_TpI`(xOUrdv+1V!9} z1K4*h0hBm<^-7?w?i3jz@-*I9bl6%{Xwdc|5@wobY(SPRBt0d^lz^S3QLVkZ9SsyjjbZ8 zVJ6h(N7AwdG$k@<9BuE%?D6SryRp2;shPQkhpok5zu^iH#V*T?rHH(988fo{)VR7@ z&9YZ|9qzIOA{~b=vnfuOl-k6I7I+@bn_z+4`1!y#fZ2C8dYC%D&yAVpPmpZ|J73|S zkyNZNljo0905yK&5)=>+y8^)CcfMMLGj-C4@fUHsPNn{xjczf=ubzdeXy#+mv zY|9(Fthjg^o%QX5@%py-(Vnu^(s9(^LvgV?mdV8 z@Cn_8mV+9vHtu7CeJn&v!pEN*u_gUA#%WB;x3`4-F;Zc?TdtjKg~HmV6fi953zOnS zd2wm2cUNxzdiCp`aI^wA?B+x=ZnG@3cf*hJ?cL&!8A_XYMO!_0rN?R_vUUWf1sMFk zNW#1LSp%uDWNTg55g&v$C0k>jVzmN;vwph&sP1FS0k){=hq<1zKbGjqWue=`UhiBI z1CPp+QT@XX%p|^?J@94ZFiaW^DASE>smGV?2lS#g_l~;l>mxIstan(le+AlN7WN9` zF2U%>5}U>4LdY|85Vm5p`&A5jQYPX-XfbY$ zb{bVzEZM+fTR6Sml2xRJ2p>+N{nnM`*l*Vv*AH;-t;)w_pujownW{EBe`iomJxEc* z?BcH_ot<=+72{*SZVrFUa4JN2xc);Cw@kcY6L$YL!;C|l#Gd?B&1TiM|sQ;$D!nNT0ta zdK4`Ag6%1d+n>p7+X6GDQDLs0zz-a62Y)v6f|>=H{?;2o5Id+aJSN%_7O%W0dFRsK zDF);sq6vS54R9(s9K%}7~vjZVD$6@R4nh7?VGT?-k$1n6AB*M zAq6TG#2JnG9Z_4$1{Z;~9NCcOtEpa`t1B-e-!d$7N?g2=E0z_uz;(WRd(S>?*iYNqKuHTH@ z7qOiI%;&%g4;9meM(#q+HayH+B7PupQcXGWPQTiXEMeCR|UGtHwP`{37T!gKYgmAB@$L7xBoCXwH*f^9{ z(|q05;M!Lx`>L!v|7*gb!p$lc&Qw>Rw5Pb7aCVqJXaR=8trvRAJlG<=@B73wV;(K> zP)Ag@KWjm91N-=?(FuJ!>8WCqy6)h48raB}q?K~c$AbG3^-~Q7MyiVe7lFg_eNJEI z+zy_@OV<2nIkug(`-+^J0XbaT((BILh)(jpq;183vE;>|qwm+)gQ-63DHRX|E~KY2 zwPgYCnrlwCOZ$5G{$0^(X0_pL>+a9lKL8Eu!ki=)Y%CCAcL+9bb?3ZB_7guG8pC(EK z5Px;4>GSGS>x`y+*+N2jRGByG+b3z;bYtFA8XP$0UfrOS2{DTw8v*syHll@QcRTwq z(e8t_=P)*S6qg^ND(grlb+L{53>`{I$<3k`!ANU;Dze(^0t*cZRG*UdE6^2(bq{~s z>8(nzvJ_87ncBT#RUDWDJC>0+6!fr9RQ?v2zc_rP<-gLdOB;u=rXCwXWA!*%K=2Ip z=`}6MpF4&CyktGsgb0oU+=o->*2b*A7r(rcSep&`7qj*k7gQgooSnkKfhjEAE=?nY!&3W*+V^XiMyW|v5wU--g)E)=IoQ# zCq4<-hL)=)t((X}?1_KO~i_X&#kS46u=Yw~1UsNPV0T|X`Apg3&p7 zIAys+{PQfei4Lrz@Hds*bWV@!i$>@jRzxo<+03NTRYfBQ5T6zv4 zqy#lPu@Cz)K_;TyT!^VfP#SEjM68!pZ)NbPvfR=%MQbdPVu`yp(RC!wj^2NXb|Q9h zU%JC#gg+F=7r&R;8M*rDqKhM!M&InZb9JaEChQTFCIx@FYPf8H&OxuZtl5~82(^^t z!QREwNr(LhyHx@GW2e6Lp4l-E9s)yylt1-zy0mY(&0|m2BIvoyyoTb}li@9vR z+H!TdUv?WF{G>C_^w2yn_03Ysn3QpD_gd-lsobw1T8oCQ8n#=MzxVKs7%q)s^!Vg@ zyQw~f;_e(dWq--soe{Q{9F9_uZ-)RASE3y*TWFDDrJ%E5)}FP38o}B@@^nWP$R17g*`I?%W$|z0+_kxWUGqic#8u)- zAMlXGK%S3pW6K0PHs-qDV$JwVgSIKRIVesI50%2T^eVf?B*SyYgf>C2hU0EjC3(%;gce zjnIV2?pQsmeD$-AYs9vpwZZ{09<`C_KhGYYYm_BDy*Ih?Y=pf7QyB}`Tpj3`-bu@z z8VMK5xAeBMhRGV6i*BXQf{rLMKM~Al_&;arPoA9C77|_M?JSFvrDJH%<$EFOZIWT$ zf!T-&+9oW#^Ql-)hf&u`Q?SUwA+UnGEA3gLaE-wdCas8hM{fGS+zS)Q#N*PN*Wd15 z^%k6&Yi-&{v!!j~PFG|*`m9)P^}E(St`ug)p?qi(|Lx#IZHy@w@N7@Krv*A)}Mc< z@XpoOB8OTzN?z6e0}eGlcf$LG`iDj9EPMqk-~Tj>>+M{z^STewI1x|cSS(M|^Tp64 zDc$lFZ_RNX6Y&}i;A>N5@|v5fGY-uEv7(&ahcbKvRkr&Xs{cZ)yw1w9v4H#>L$sn6 zK$-JonFi-6TEbVL8Gwt%FDi`Z%7?ls_E2qc>r-|Plkn8IY9jor$^Q~0N7p#rF{k|+<{CcbNk)+(8GT&aR~r0)!gKGR3C~T$ z=KF&Vlw|*yxB0LbaF-7h1(mwRr%MYsVf-IU&JBo`Fu>(!CwFged`w7d3qA=;RY}D9 zB63#i%PsE(_NQKwU;vpINi!RmXSZVv;t|bXvaEjC~H3ay9uBHwH6AZb9ODsKgWR3*07^cviloR=eM4mt0|W4_7=Ty`ZZE* zY+07;^lL&egzQJNMlTO3O#X_hm;Uei?!+a7mt&afHI4*Gkb;rApp6sy_DtDBttsKJ z{WxL_4lmxCZuL6}&wg!S+Rr4InvjNi$f7{x<)7&|Ka8(HP#YP>IG~)EP^Ye)EG(cy z=3l-z)<#`Zg54=%+Mtv-0meV9=VomdNquGC^=Mi*g@)s zhNe5_oyc+4QJV^kUuOTRO4TtMF=`bKVUM3Qyc05qv`3veLqmH+*nbRJ&S`bivJU5X zz63Olgy$auAIw_W6NKcU@y)~i++W#tulQy#dC7$YyQ%2HN8M8Z?!s93evL-hwyv-J z2&2P=pn?gJZ^g}y$JYv3VU!`OLVDk-S5i9P-g)@VB}Z++LoSJ@?^{8DYt3zaOB07J zI-O~D?|cn=J3n6|bu*`;sV%wMkH1fv1x=sO6x!N6^=%#MtHXsURn*Yu0? z)UU+?gSQPSw_wq0ki15Liv5n}c|t3>GCBetEYMzK=N8&Y`$ctZjKapeIq4Sg$JDKy z9m?!kg+(iF;qj>!5%Px&lOv3w0sw>pV*@p>j5wwHJ7O}G62|85{7J)7{A$)o`wGLP zS@Fz0dvBVRw+7&6aHF1Hgr{=D8k|(J9Hj2`Pz0L>%wz!E8b={rk*Xrr`4Ss1^xQ#b zLNcYYBoMz}W#eopHLtIt9XuniiOXB?%1~*So0<>f)!k-;k+V`Km)b~_4X{Owwsmsf zNUpdBeE!6FvLD5XGDIbP{!{6zC}`!g_o2rWt*Kh^sg2~SFMZ2&LvhX(+0{{8Q4sfB zWC^6Vvmb3VDySYt{fLu>?Hm80ql)E2rlpC|lka|meE7#j@-g%Ujd-H}rnlmpy@=}Q z4&fujLUCtVZ<|lNS%K2&)?l7C35ei>RU2J}1yCjj zFGa0iQ=}8|Rm9Y&QH6m@HgC)@Zx$2s<8}^drQ3?FV3VCug8zd?4VMdCz_$KU0%{|s~W4BQbq`ewfI4Dd8on1{fJ>V3erLYjdTWR#?w!44R zs-2)hmf(bSEDWkpOtLY5+~69@`j!!zu+8Py0t~M-E)N2%>WYe)&^slh0ypnH6S_=c zyU^+j_d;m-W_yBAq`h{RcvCM!6MrazEh%U&)pN(dkUcV$Z==Bcd}#=4`#!?+VQYeo z(_G3X*Pf_AP}pmn_2$0}KJ(aF&|42wzB=P8%@NR5`(JCRde6ErwSqtGM+5P&)Owxq z>?CTjk{tkoh;wFt5o@U?KaLH4WHTJG3X&g<%_zjPmbg;!A?wUg8o!KUm||Y>wWmPW zz9omk0iRM?ukyfdvv)WkbzK~79x*%Mup`INST3Q?Zm(q=d0Q4SE zHfX+vc{+NguBke_nPNJ|g`%0A{ih>>Ho%Co zo{v`t)PV*mAvnHZZyd|dobVb#omN=@&h{R%TSuGxn zzLm?02O*u-;gK}D-3)BjM9MKB#_fCSejJ=Xc*c6M`J2Ul#X3L9!oVrv^$^Bzb}G z@2cd`{8kMtGeu3AGDh#$xVC|{QDj=r1Gae+bA)}`Va_cX3EUMJy$Jynj-d+}(+!g+ ziWQ%KELSMyeES9&6GM(eQF-e2sC(aH1UAYj{$>f?NIUVIifFUiSAN~{uqrL=By zo~{z2sA%1V^wDxJ<266&yvD6Udh+GvSUOfIuUM$_hTntN`p%8yphix?QuM5RJyc39idKzQ ze))Y?%_+raC{M^Ok2vZZQ_Fe{`VKYw6k3?(UiS%4up(COm zBOIG+Q)k=!t?DR}=Be=Q-8G2W4!OJ|<22y`4a+kh)9P0FM;zQPrxg>VQydbNw#h!O zbcG|qakmj;HCg+4WbM}6cT#5WzajU7|EeNS4gjmyQ3=WFUyqYE~otC^V# zm0x}Q$NX6_oHb9&{jfY6cO%CSdVcG4c`iDH9f}ne^}k4|w5+&H+J^K6Lf2f#lO`eqg6F}@)Zmp2iG1nZZ-yl@O)KZ$O6?e{c;PNm8mt> zQX|?#*ZqpYwivBw5oD5QO0*$Gn)>(OZvbb;zU*6dCwltaLHuZrf#`8)&FYb5fYu`j z8aX>FOmrWWh=&l2#2=HOoQpK#hfw!xt8Dd<&ivgv0#30zlug=L%=57>?Fm~zth~`+ z$8g|-T!|dZkUaR?Jx`7hMfB<5h#;JK_r2t#TdQ~MfWw2kk5WTL`)aLp_e|NZuks{0 zww%M1!rg~g)a-7X!oFc-1JHqVUF9}p+oFN;8}11clvcjr7XPvGS0(B_rK33U8X#Sf zQLnAj6eajmajb`48TIE)l!Bbzzr?LNDcRI%{DSrpv9b5LHPVO0HiI~kpO#Jmv&to4 z*g;I~Eq+eFiBwsX>7boXbTkXNz02EA>$#4S-M%vS+yiKx zDN{r5NmM917T2_+g?_b=HrV!L?!`@g9%Fy(4$K<)=JwNs%rCjsZz~mpW_`I4ZE_aD zC1-zR$iitQ0=|!4`0~~7mlk7%?5Q>_g3k6P4pJO5&uP*e4>%5);N3UZ@+}iJ%K5Dy z1K@erHFtS2%K0#kgLVrG<^?Gh;%Y28l8!8A*7_BE9HuRcO2l{}>DtFOLgjZA7!MS zk(aP+!>S)~N-6~NAkC@KrM;2z>*hwPB1m6^`*kIxl0jmN%<+$~vI3g2Dpm#Z#HtXN z1Bn^dNyu+{eTHT1Bq-5iIjsObf3;@95;{;$X9njX9Rfl)-uo;B0lBHIB=jNGtiMRI zarQyU+-;`L7-zl}11pWwZNZis47E-3D>dW$_y1l%K4iW5rz1Y82=$|hRzqNS_4sD= za#4`pMG^U6ZeQnXPwb%G*)PpCT_V~`(N~XkR4*l|5H)<(Qb1-6j;t*04r91&8QHRz zXDSzDQ75|KQkCO%JQXACsyxT_W29}7`~AS(_ZDH!4c6or3@UL)$Bxqsmg=mNm}i^m z71$)_-3)LkzK|`F*TnLog7P>u)ERKmqYpQ7sufH=Lg9->ESPGUsqJ_(4^5~dS%Acb z7G}O7?c38wNT1Dri0BO!O@2=|(}`beqmwLbrN1kZwtM&8{S0a0f5SvF|MqEneL!BqBbTqQG@UzPZ?_VeA%G7~VBvGXi z%B&ek1jp^rQ>}IN@?F}1h5GtTJ)OyN$>=xm=wiG;%QB3hxBm6pOMqC)+>k5(<040m zurqO#Q{Y9R#Uvpe*S z<@URCpYy2r)G5DH%B|fudus5>Wju%u{7Ch#&)?WBO9(N1l32y#A9=2Eu~9{28fbK? z1A!El?Y78+rFL|TP9S4z!w$HseQ-o$i@akbD|6_6_lbwKJ`d%-zx*HI8<4KkisCCO zR$|WfaUhMpYvTv!cQl0;M>@d*chwMOD}Pq74_M;&8$ez$_FbcZc`J&9)Xpl#?(LyZ zCoKsvNdYjUcKVw;X{r{gR8fPuMu~C&pO$ZFcnUD zcSr{4E^{V)bHRgm-4JP{fXa~0sAz#Q(&^7>$!dZIG=gc|+xYW>seBWl03F_y;z6eG z+D9z7Cl|!k0nv1p_MBXj=>zC zq+1-J2Tj>uv4ny=AoDJ5>muUGV^RYjVLj1vre;)49$7(;+r*Kua>+g(*tm}6raZY_ zu;{4y+zUkmJ2A>4#08y762;iYZa!^Rh_~>2eXlVpO1XZbx1h@wkbkE6kiVX+m$4Y ztE~S*A_@T~$x<8T*5g&{qy@kb9TQoZJ?o>1`< zE1FnQC|mUQgxV@u|4k=sWxPEbCGRamz@!kKcAR@S9&%L1y0bxzhHE z^WRKXC2+>4hkv?t7TyC_#5uhlm-tGH&9R((ayEGQMo8%-~7w87k*6M);OG;Hl zhwDz*wbZ!aj%9lH;L(=dp@fFQ_kNr*>)}o-jb`0H^Qjl;eQiqadODG_?RZ<5m?V5* z#ihnLE~NR~?xd|6M=|$Tf!oC9?=3y*uRSPt?Rt19fqb@eJ8*3x>RSJgH*aot#>8~` z{j{K$SO@u#sHVnFE1;8|6ef59rH!2o&R;j| zWf`(A=}CIB>rpX2hx>Jkm#2V8s0Ck@Y_A(|wnU~%>aZD!sLZ0&2wB2Ek=<*Y$u5_- zCYE0rOB71PJvC$y9Dh?x$Qh7NuDxOSGFbokZ;R8(-DG=#$yC~}HEg*?SU2ISG(#zf zB}u@%lI>Zdopre)hr4Kfzoi=vI3e7|y20+AaBZ1Em>}o!I)-&1L8vW)BH>l>vZ?Tv zVKwJ`ttHeNd1R~{x0HRK?h8V=_B~|C+#FFoKFdT>Na#uR-$ZK~zStyT>ETztBi!>; zE56bs_P6|NvTh+$ZIKRb?PAfAQuk{fFaJb;zxVTv`zPtL0G+$g$*xl3PY1Jl?%YxgO0q@!{&i z*!nlNNXH3nmY*L?LnUE#$Yj}QwsC`|+nclmSMHRfa1@WK>>R8C!gf-z1q=+qHuTtT-0`mjQZb^k)Be>sjrQd=;^JJS4n)huNaxk4){`aAnt2*2;KKz|i(An)S>J=1C) zZ96$Q`~0!S%*!k=ss81_6<)PrnV3#R5T(okngXIDm4Srki}%f;>JTkkezN7-Q?*6P zgd1%wA|pxOReO{nsVra+-Br|2|JWjV*h377Xwbb=0nXyuS3pOUa)NZhlt5Jzf0=wQ zoNJ2)@)$DtVO9p1Wmk6e#lwDxeb|9{^>F^AOmOhg-^_U5R!fX}Uk@C(vNA@3Wj6u+ zRfOA8fYUs8EG+-gGD3nhT&(`R6?q$mG~p;XauoG2M`Q8fMQv7GKxWuJbZfVqE5-nl zy)(r<^qs~Jf%w&IZkWthTv2{0>_VWOnCGyj*vgXs^Z+QEp6xKC! z^YLo-TY3B62zHh2 zGyJb1;S;$cJ3RNojmL0Y-*Nk>MJd98pK?g)vFq!(`?M@ZB!Bg;98?KZYnpp$SS#tx z&w(ij4izjBN%K~3ZKm9{NbtDtMD7Z-dI2kLrMRv*mq_M+Rn&1R%5Um{5_bE{*qrE} z63uWe^2N52G9>n~in z@(i159=RR(_}Woa|Fh<{Tu{BAhNe}hnT>>H;OiSLa>Z$F8kEkn?rN&wu^l#d92h9k zle9B8evJ+~?zn*>4=8v*>0<8~aEKErHmnvSWdbdCbbm@456d|GHCqvx!nPJ0G@mA( zAb#tya}DAxJAESe$0g&uzDS9l`7^c?D4zAq2M_~qJ&3l*5(B{_!G082&MLMweWhlvT`hA3{PY zWFS6^axPmKp>c0tX2Le4N$MssPahwR)y)uq`Z#R>#G|1i<7;$*o#X(`F@S`!a=pPP zJ>Q~Bl=*p=;oT6$#b$=$HeJys9kd28 z`6{%{A7@NhqJE0AlE#(4cb1xkL-9Co!nNCgQ@rJsVi!u?`A?sZ1wsIZRTi03hwyw| zSLJa}={@>v)cY_YyxNx{3a z;RRS4tVPa@p_o8$*$butiwd~AGOkq*Q4A0=HnH;s}mZ(9hnCYQ1S zJqeev=F}V7#8+m3#u|#);HE^_alSF1TQLWcS>UQM6a&9b0y)a$9CgEXlK*$6k`zd< zs!x+DB(h}UQ|>ov#vaEPg)2Wtd4fgDeQQ7RNrZf6PjJ9%Ls`esTeAJ%&`u^ybq$lD zTVx-cw7HbxmO_tP)t#2ixa8@jxcZN>Pq>knda0|=gUmo(6|~@r?mKMI{x{eIg8j{7 zB9qFFNt<`qE=)+2wArA@HP!50UYjPKkoeOgisENo3w{6}T@KP~$T88^zNt!%zxf0D zbK-*v7E*5j(2LdmCUS8=AE`9&2n1KFP}t-b1%Y9fS%Bmu!Z1hVi&KXr1BhazI3W0` zCd&BA7(h83wA+stv)7`8JecsP;j-QK#NiWd&}EL$tkS6A#^bS8a>hl@W$m;?Z6g0emg9$3C&Z&-W_%_ z_U}`J?EPTS_9#T)U-6TxBSSBAuW}pzn^e=Yu?>R9%uM1DsXkCl>Qv z{Pi3XM23JN0+UAXfLx)%w~2;C zqxkBsBfTp3Q3m&vaf$8DCS1Py`kLBVcPR7WG#Y-K>_;y;T_?}mZD@n{%$<&IM(7#N zV&J|Ln|aPZZYsZ?h}Yt22f+kqW4g#mIoe*wq} zO3`P`Xh-VB(<@#>!rNlbqIl@NnDYuA&}UnqJX@YC&&@yRu-klY7n_z(nEaJi9f&@7 zw<*DHRQB&>{eQo!wgs(*#0r7mX~>V#fi5++u#Y?irsi0>cyw1l55S;K8x+rsy9*h> zuswEB&q;g!Cw#)nCVRjg@E;YZb99DpJLOJbW8|Uy!nQruXdqV*^ZlDN!pYD?69fk+ z`rVR-`h6@d8cmVcMk(e1G=lBK#E9sbNEyh6z!qPTzp@d+NK2TCqOY1ja9A)UODDL# zc#JmGSPz95n0Ak?H6PPwc1xJ_gnIsw0-vJwMnyoOxSdpl@UF}2@bBf{!W1eE?h~|3 zAU2CKE5-+TtT}S?z`GzMIYX~+2MQZ-?|zHruXgqs%iYFTD+Ov?JWX!;;SvrAGQZb6 zi{6^JCdxzdMHB!rmo_YCZ1|&XIwKdHxHfOa+tKJ>vb5~~C(&Co$jO#zhdJ4RJdVQz zdw2F3)TOqZL`lV~_c1*y;h%0Hrs-5v4D&x}71uWb?)DgsVsmEOKjf;+_yhhMwTzIf znnFX1GNe|iX|N#9Sx5n*$V1BFA`%0G84`b`vFWY=c$B0{hPN@PjBEh7Tg42l{r)yp zzVgqk74rio5AHx~3#2-Bo0(bdD-hO~=cn+XXuWQJ8uio0*ir(Vl4d(qxrZxjM$O?2 zaU>6dY<_Tf6y=O|3vK%x8FGY)*hp+o^sooSObf|XDVsgL4;s|9vJfAPd!O8VY@T$8 za*a%_rP>*OYZ}!bThD40KC0%Vt2-=IGBVGPw4m`aeBi7axRfp43P^uL7FYSLp|sLQ zIEfBE+wJQg87>CAWvMPD=w_kxJPFNZcN9~cVVe&1u+%7WS zcQ=DR?WFB3aRUO)T`08H;!Q4@$GrKv`f9m{3REbl^$MqWw1DtwYpr3yIQc>|8AfKF ztr4QW8A`+{i=bDI825XxN5$03JWv?O*Mhw+4msObBeRVlaU9MhLeH;N+VWffL6Qzg!POH zl;Gb5^g|TlUY)<0e*J%W4E(pSPuqb|BPb?JN;vXmNET-`ra6W7gyP3M**=D`T}M?B zo8_u2E?>x@6a%6_smdo%6fh-r^Hm87EG&wEgw?O zS!>pyGgut`hix8>G*CiuS1lO|H+XCAA`t?j1$5l(q=O11LNlEwx5@exd6`cI{rl*KpjpcX4?@2}EK?ZP)Ut!;O?-Nas*#Om`J7E^JbS$es z=*YD!gWWhacePh7(OfzQf=e0#31@y~PLcfYulT6g&@qWy8IcCA!~NN*qFU9{6S)-( zq^EAt{R`l`LB}^j0fftN>mWanw5^qT>ouSmSp;V#-XhS}QgZ(AXhEDlmn_8g2v4cZ z`>@3Anvzz|Qv92xCbNg^i%(|2L)f?UJhl)INR28uMESs_AeKRIhrA|o?mBcn>3QQM5?c1wJIZs@Eked=>K<;N zEkE=E4Buy7d;c}F;OuG9J$m?1-$Q#vLAZrD|1E34zR2zE>Q_Kz~)4>6@}*)YW}N$Q-MWr$tpy zUnY0KQzR9C)q-Y%?{RcFC%f%2=%GJz$U59=9uI=6Q_8ZMytNCrRBm#+A?UIZd3io5Ff9zZKaKvLT0X_Gx{o(ai5FIP>pOPOwtdJH?{a@I&sjdUJC- zV4L&ZQ{ay+A>mwvluzEt1pP|z-555!Wi$2jdjDPkV?e%OY(1q&=o$W+#dD4G=lt)! zKfJ-uMw#uW>GRJ8Z;>AV`;z_2QG~GS_yWCVuzc7z{UhMv_9{Zk>#SiK;36uG5T5c+ zcJ`^e-z;E;;Ob+B=X&YDL07GEUfpCjJHUehPH_Dkae9e|oej9$_B9E5vjrtdml`8U z=f7vqzl4_3YcE^KAE6YL*P3YBWMEiBp*AOpkYKkb^|{8*s4H!BmVfx^3`ucSMET%V zm;SC=eQ`8O(fY+_U}<^YMiHqVa$t6WtX$F1p)RB)`ars|AUO_t;4a2G&my zK=4M0mY_2@ol5DAN-?t{&9u{bc;E0b#Gi6o2%sMjhr0!}@^tIXUTJ@DkfvI189H*^ zs`q+H%p>(JD#iEBmf&Cd7PV8549YK~G+`_&+gH65>&Fe7IiLVf-Dv}2^Y!{cp9RWe zR|;r%%N!L|B_m}gjX{wu#<7itI%<4enN=m{=e43)vgPGx1*!tMfR$fU>rjdBTG|{B z$LMQVZtKHKosj4&0)NQlz5_pCJq0Lp(z<9K_Y1=9s;Q_0Oh^Cw)!M?dAsaWuCrN=wSg&>Z|@K z>j&p|UJhJV$GOwjmLa{!;E`PUgfc-T6G&x&0+(%pzosfR&Um86k$-~E_N&Sv7l~GF zr9FI^JQj<=+gR(YK`2CbLG6VY^)~U1QNU1JzB~dJzwOxSIuR&O5)H>!X4A*`NQO8NF`X+(a9Z?$+CxRuc&0P|FTkT|k@yiTPZHNW zdstiNoNG-MTA3bsZCr0Qv5oGvI|r!KlS(l#*mS)T&bzYjL6;{DBdxX!ZYlI*sx{4?Z*p4b$ zyD{*btrWPVJ~kBW1^Ul*t5pI@W=8}Q)td`1o`#IxS~IxlC~S(3FeBm}?25dHQtvkg zTpHd8Mq*Z`R)c-@6Y82TbTKg)z2_f;O^b}@>$Xhfy7SWLOI#|Dt>pK)&0E( zew{f-!$~PA`wx3hTpH)RZPPdCU71a(l$SvF_-$YZUgvj?=6NAPWsKhvPPlv(lh;Z5!>Q}-A*v0@xxv2tsG;&0LK z67dM^U=Ra@A}LvSOi|wW+}j(JhgSzQ0TK=qCUy|^ieMBZSnuV=CtRH)vEm^B$;~sMzRY=LPZnnYvsGFMN#Wci zXUm#qRI9|5DH-(Hm?Ha8&7Ue|{4pJlBUdRaa%x}Ze3aKtL#JlA4!!uIlqhnjmH1*mHCfs@c)BR{a2~?G~#m2p;rRt@PFy{K2==1 z-0S~k6!c#|v}XJ71jT>-W|uT8aFFutQy_FGG@WHTU7X4hE;-~Ma?bY)UC)m$&T*NS zu+}M@XKwcJzp&}A*GB$+Az$tDm(u%N$KpHw67$>pm&JZbWll?beq$nLH;@p2;qG}! zKHi(7PB-o2So})WseHz~L&N4M&Scyzs?Ri<4H`D06?{`JT+{wO5wkfj_Ckb6hM0I_2!X zFVy`%ue>6=B9*BjznhpDc(ipsv&=2*)4hDjd6pLGpgQXVmg_gG-j@Zef8Vn%=@D;R zLU%5qdl|SB7mfI_z_YQ}R^+1{I^s>d3x;*y4K7y>smrR?fApRu!2bQluB*+et8wHc_1|v?jK-=nPiz8BqN12z7w=?%lM&Hf3b__tn2#hX4HC z{~O-FkT%c|xR;4*!t4M2kVfRl^Mf*1pUaQD{x6*W9JG^m!@$J9-*>hOzh9`(jK72k z?h!pfF z;S&@Rf`H!PW2AiazV;3;nyJ9C#@QOzz3v|n8iizX!6kbxIrX!0d+Ght$yZ|tJgxZv zwAXc9Zh^Ufym?8`RjQZ|ly-^m-ZDQKO5IHUX*{TAXmMa*QR5o&gL5^WRBNvB3B9H5 zyC|uVEu*G+#>Pvixn!Cff6_VdA#FG?Tpp$HfHS!#lw>xGgfe_a*+iYi@jHw0)8G1> z`Sd|K0GE8z93XhF16Y!o_d%MaITwVLt?0+r7TTKokK9f#LE6nOSWi2BpK>YCfO z`;LA$e4;c`Uz#ih+7B3Yv-{ls!Yz$EFvHdOcI%i|`nJ)Sm+L7X+!syTd^Od5b+F|fu;P8F^%;qEO1}mX zL9YKmI_aS*LdB-T*oN~bWQY0v1MojAkaY{(R(z79aoH;Jm(LH!$%|`|-}Z9$vH&-E zi{Re3n-c!R5*x@1U<~u7Q-dhee|L)9pOz$Ff2?%0fji%5v^cG?@Le72@+UX>6pB0f zhWqZjrl0%W_mZOyBV!F@#+_Um92{LD_{%!x2QS(FTh7_$k=6*TBMGh>9bKj8J2~ui z3BK=xicRz#`Sl;I2dotaI1HY5E5#jzDjbJiKdWRTa9-g50Dcp`#uU4p;urHbTi$H( z#_Grw(Tx^<^P$PTW0&wL4Nj`%LF|by$~`GMZ8}QY*0p|nxze8|3FDJyF0BF#a7Z%3 zNuB>x-3D^W1o6{EV1HBt z+?`Wjcik$>eBqE39wt^2FB8l2zAZvuv{-*{6nVs*H0nvir(_eC{voF*>{=nt5&l5w z(cOzn2Md3t;HJa^znL-rnN5v=MU6x2>F>7$5HJYC!`vgE+`8OQ3w(-&l+?f-Q8Mzq z?PIh;fC6t7l8K_(|F9~z`82B^pXHxasXm)9af#dazhEdcPUn;<=#~grkZ^HH;_SbL z<{O~SOMO|#Ha5=dt9C~-jlmb7;zu7+akB)R4Cf*_BxV%VA@m-zmuudcpWJUPy~*UL zQvI-a8**b96B4lh2xx&8q*3ghj-%zhT)h{g>GE504~%nbcv%RIwPnXqW#bAuqOw;q z2hjZlZ2z?Xl2O1Ck^>06k^4A!?Qvmd<-+PAHV#1ZxA^JNv0I~;pLfS~2VsZzgE^81 ze&W!F0EXK&aMsSR%Wge49hd4AxLpCqWqwf<3G525&&p1=rG*1mCSZ|zxn~o(XLb7v z4?hi;`UBhj@xV+iG4Z?cPnoHvA}-Txi*im|6ajM-hvyNl^D^UO6?F6;>nL5%@5Q$4 z)5;I`NSl0)Cj7c2>Te;Bqg&owTo8m=8l4fpMmM{B1JjgdmB|Tm z3gxeI>f6;jldOYjD?{7l0MCl+vipBr^xQIW!Y3bvCpnB>CDq{RI_PvvZp@&l<&8~M zNfF%Lxq94ijFN?IrS3ume!c%}x_>6wwM$$^Pvw14id{i6^297>=N+)b1imh7W&P_1 z6W^h{D5kisOb%tSIIK+FSeShlr%EwC^ojl8Ycm#eG$i&Q83-g&=1fIZp!}2`?baQv zp8K3|uFq9_UE!q6Y}-fvxT6gtvJV+V+?;ffmR~H$=WicmpsdIj9+t@NCdN-w)K(l* z#e^o0)g~~9L~(Wfv-~U>(zsISKUuhO<=1-FJ^p3jdJhfzr8e&o_cSx)9eCeYJg(q4 zt?*Zl-+w5Z!OKsJ$h)*5m?`^!4VeRDqOLW>lVI1D>SH~r_8;W!VDEX18hPH?skox< z_Rq?3uP4J(!#kvAZCq$HqYcox{g9QvfK;UoL0FCVg-CPhE#v;7F%#v{D#Vfbi>g%e zC7{EMz`C0!1$kT-lNcV)k_47`{vo!p51MtEA)^DP91JyKixcip{rr!iPJ zj<Ui8gW_Yx*K{V>LP}Sqe!dqn?0@12Lc{-3^6{*#gnte&~;E zFzQ5I`{mZNnNR2P;(J?7z&53a>(>cLCF<9N$SkV2n6Na8;=uQ7C1iMeP5bFYJN(tp zBu4^PBLZFqZp2{oRICQR(%cH{aOthEdhOL$l3uLeJ=3)jbawmg@k{wno3m5Y(#*{- za8^-o7IHKV4!b^pkUPXyvEx?W@3TwxlUu$!^92>p#NM}v4Yi=>IL?^xu_ydSEK*(i zfp}S*e75+G>#Ym(#L)5|S&17P4Glh!MLuwC`3-i?q>;6%)6ISvT+jKi$;M5Mq3wwj`~bM7DKFkoJ>whaVXy{ae(@jbu#LE zyzP3GXEj%u&7yhM7fAg`$;0o3^F9BpuV;~hj<9D^Hl4AHtxQ$?9ckUYcf!If9xr*1 z>F8p%oLzmV&flu_-;%T=>&XAYvHZ~Oy+90F&V=ae_vKkIWlZCrdvEQRdj2VH{Y><8 zjCG9bs$o92(Q>cDBRP4U_jHEfn`*QZnzy>2D7_d{H)jDm?i*B;mH%6YvLo9E;wmtm+BLT_Ky#H-@Mi*HtorV zv-y$GF{Bn{c196Zfyc;Ms)HX8aD3a?gg^difP;73kfLV@VBu(}A@8{*cAu zIWpmF*-5tVuy^5cDavT@`Z-RBhKAR#C_Bh1)OVL^v-7-W{K700H|ib0-;i>_Ze8VM zAnV1^Fi5FZIgSlLy^?ptW)2;@9)aj>(PHPGVQDe1M!a{5z$!UK!dEBTNvNZOJKWvB|O|1&3t(g};g$LO5y&;PXC zr!nqlw?o%_?(7wODGDfS!C5-Clq6B={7#00!wmUZh>!P`9>udc7%FIF-r$<)cgPFy zfc6!Yl#{$mKEyF6y~JW@si-LgB`F<9AckYE*7`P$@jP>VeeQx2PgXMve2bV(YFO!4I(8H|DH z^;}IONwk*qcLKAG7d0lk1e3%DtZO&l)!-LYRQ;Cmea?+v1HI8-D@_p*Vj`96;(k<5g_JrEVQ8Jk;^a zNMv?0{ix8zz4!apj)$z**B#EP_F{J#Iyhs+@>bRtN!#34-r+T@3zHyG70?fJ#*G^( z<939rQkBNe>g||JD_&UoFTdJO_Hnv)y4!buVZwG}(G*lWvo0nn&!-0R&al#rlJ z!PaYx&t4;|D(?6m@~5k{)AeH!seewhhSxoIN{r=K@ZD0Z{q1>VS*_Cug8*KNbG5#P zk*!w09u;h`W3O*7x^+)OG}LJZS1e=&>mUPpgX#Dle ztRe=B{xfNwH0oN%8{@$Vq*UbQ{l<>0f5ua_Z7qA7YoYFRwBRQqSg^rG_H)6(@@G)u zF^etbT@hCHi5S7QXL}b_o|3&4l$D~gH}2PPxBavw`(SG_$Mi;VyP~m8D&)FPXx>sL z*xUzFj5#R9&~7cmsMeTB9i^>I*6P^^Ss%=9z%Z?QWU3csu35XF-5SW_4obFB~W2jm-A>uz=$Srd%jvF4-qMJ;&R>)X-ayp(M+Lw$< z(g?6?+_}w|g3S{?i8xl9x0&9LZ25V?T${wa-=%Fg8n5E)Y!@!_+d5W@nrYYjs;J4J zVLXQe0j2vOb}Cq^nKb=*zRE`11G_f~7}}kPYzSMWzF`iNa)KUvg}Uwb0j2SIyzsXF z?XX>ez@f@Nt%1O}pMP$LGZ4JuBd;L8J+yvG{i-bY>0A+7zy%?7{s$Me$Q%=md!6e! zc`H2_qn;IMH(&X5F$4IdrRH4lA>)7=(g4iPqIfCebq(Ml-noT;f4rQ+wC8^_pcg($ zY-6d52~Ed+yGm@Q0d&>RayAoOObb7D134XSH=%TqP-uS-)K2h?)?0o$a4mvOpOQ*c zzKLfr_37KCRu{U+QX^5x6hCZVpxvC)w6#ExQ)coAKcvaZiiX7kHh!mkn3TA00Pe7N zp8~zskm37;@0Ca!NyEp7mS1~sXdclwajzXb&B;`?4r|!cjSM4I&DZ5IWCB5wN=kOy zD{R6mViu-`u(2per7{Dh@~2X6NcJ$Pc<1BV!}#5@Z2}i41&g`y(7kglIwZBPoL-4z z!csN@L%S!y%rNb+N1d{;+)aJ@#?&;rWHSj{?w~a0pievSXy@>$XlRKUua{j3n3IZp zz+UZkrH+SUt>GxaHkID0$JHJmv>1cEn+k5sz`Qi9TWvJwLaRP2Jq3f{QLB zu-Ty_+5@Ytk?kT2(l%(Yk-tgRf<7iDswwq>xYO&RojT@Z9~siUb{9+!D?frkvDO_H z%H`L!m;*jw1~|Rfk%8d}%;v$MmVW|R9X5YYGN+4N$yF@#;|S+qqM`c^{j%dKLHsWC zw2Ex6pB)9?bFE{Up_c05oe%-Ab(Rcjgucn9hQfC3U+p|j{Wm;U>k0zD6vzFcpUL}V zgOY$wH#rzs_&|ln7q}Fd{sfX7!#9GK&xxR|ImaexL`*cMjAb~bk50(kSkVb25eu7+A z9(pUN5)dljofQ`&dh<#ZKdhHOl0Xiv%#m5EHl^q63+!>k|Gw36EPSMoHF5ij?h*%c zw{k@LXp)|{I!4zhJfj4_gE44_g{psquVYZf<&?}mlor2FSvDI~0RuKCBLPLO%tlbU zzUM+lwV+LSz|i$YI#CsZU7)o~VCJ0ud_-*QMN-vZ;-GDoMyUh1Y#Xv7Jb3i4Q0sFy zZC5Ot;j!j3E@fELO^lXyb*-{8EI}K=bvH>Y&de=o)%^)DSyt*bt_Ef0pg5& zeQ4JDihJ)=SVurAj8K~Mu_{A`nPDSmG2Lft6~f%`U-gO*wV$J9_?__qN)s+hTaz9&IL5uYJe2gag&4~1&{u+ap}k9r{T>Ll*| zf}5sUt;Y45G{;N*@cjrxotBApc?F89Zi5uTk3XvaGywvo_aupNV?6fWS+Wf73+^}~ zchg24(a^Z43VQ^ZR*X$BTVnnmSGqx|^^aU_Tf5rHDdL2R$+cojvhVHU_sF6boWSW} z)pI%?*VE%SAfeLHd4OcP~}1I{-EC<95_8c_m#6PdQnaMRS#_`!Z+XT zGdPNODDjcPH8C8U`v#|I=ta5U6grVnoq%!DNJ%k2f`7>*!Y!WfD?YND?Ytx29q((z zKFF7-@wJ@z zu3T8H0Sd=i4k(f6t>O{i*^rlaV~jkUG;WwwPWH!V zs+@`6ENm4&dc+&&9AWiNWSb1*QxMnWY1le_BVEZ{-V2+1NB7=aPA^Vd)=%{Nq=_$o zG##V#)-GO-bwR1TWAr}xIz^c61X_XFJ~n=03&Ya==`>%t)l%PYQIKZv>NW(gs+N9y zN1P9POx!C3MnO4B^=`>=8d-mW{k}<(yfq@+f>S+rot^l!Qf__0c(aQU2jYZ}uVdrl z>}@Km-v;U@(BJODT6h)hcw=t2BvSdLrGDFqoXHG)+rF~LY1OJ}i|Bk6j{7|9Ayui$ zKHwNI+FW_7h4h_sO8OpN;KWKmb4XuNXuWlOVl-(sTibTP=cM;T%!GeTsOdEzI8~ud z32Zd)Q;YN9Xlaz#Rh#XINNDkK1D@C`Mg12L=tM9XWyK%xLAwZqMjE}soim9Syta1T ze?AZk_vs!+QSL3LJ?){0jMzT`|0^yuO~NMRO;X>vJ^!$3S56t+t;Mcm%NNd_3ue;2 zX929l_S59TrJsH>L~7Wzc-pWYtWhiAXU**l){uVIr_$Lf^}UM7*Zyci`srOa8L z)&5{Wa&$xYcuOn{o5#_oSM`qy61)pMIc=SB*Q`@1lUKm$oTcNV^9F4FuY|upS5qf0 ziU-!%g%5&c!UTu@5jO< z=4B<14?fZ(n7FuDEiGg^=kH|9h^49EYv8>_E|Q*?N%1||H?B~Mz+}s=mrIiGhY3X*FR*e< zl_0;Ts;91Lf5GP;QS+;Xay{FW>TphCUXNjm^tEy5%wU%kl20h!VT%437FVS~239a^ zyT%}1>S^J5qnu(-Naz-Bm0sC)yKSABIbXqPqUN^rLCUr5$f(Kj60>Urv9l#t{?*9y zdWm`4^_!vgb+prw0|=GEXwDjp*rNHbu!;wzT8?TT85W)_jz<s8vf3Ih+5wju zon&x1DJWYI+524n4-Pvw2j`(86wz^Ug@8HRRJZT_6r@b&v^2`j%LJQj)dP=3jGJ)x zIXFFW=H{~RPwcN7q6^4CqW4*UST#S`+K{J{?cY6AfRXZ#KjVgzyme`8nCF$D>*}K5 z>*30Vaf#%_zjVu;WC+=pmv&9*H@$VUlE^rNOJk_u_!$&FE|TO3*zh>=z-0{ArNv?J z2NerDnarBZM`N|)?tT@ce%9s=>r&Q}&rpy|Y;wcHJk7($>vs%$E7;sCet(-Q?#$4s zJ1G@wv<)O&GZFKWSG!;Yjfz*(J&pRjlcww@DCDFB#MUSyqjHnZ!Uez0`rR0W9Xzh8 zfttS!L;Wt*hy8hp6Jx$OSd0_C-@S?9-mcQ5KxSN3-TF<`=y|=s@ZHCsXR#5R@dLsI z5`p?OO`f13#@~XekejtN?~|X@e|W&6hlxR@KH|Mr^G)2#et_*zQ;(sM+QQ4y>6L{G za3nqu2XA0mIqzk_CSnR2kn#>^=yZd*{Hod>5 zdmTgf+%WmPSGAB)(YJf0rK)?-o4;q{i4rv#wYN_Uu6U!T0WbPC^Bw8k zx?PTgs`Gvftw)NER7A7%X3O%tP$X@hhE?@3|IG!KJL#Y_j$QrGabO35DWD)88Qo`3 z5FLMOb3vY%m~pPtDi)}2DbKjbt8SVVa}y*B1jHOqRiIOB0ik=^sr1s#Mk|i-Lz1W# z>gT*v0+V|X^=IaECGiR54|n57J(6TsTcpAp%xSi>%3Jdw?=e(DHSRr|w^yn657HO~ zf%TBw=kuy&)oY`>VlBYT^Psm;2ZM|6B>9qUiFkrUJG@$-H4S|(QJm&V=X{h@Kltv> z={*n6O+z3_{_Bl1m;%imwkgJ*im_n_PDKwjpEOp_2eJUUv2qVPG1dkN$MpdFxJ2fY zNP+SVq(o8CI~H8QN%5l5jz>1)ur{U z$;zqzrt%FsNqd6qnc}*^)Bpw}MVNhqJ^pA^*zP~gkuUVTluk!9-cV2j(I52~ts&YW zbWfz;|M$StSN8aqf^sF4>G=bgg+YJM4W6@>gHc;FqJ1o5|kWVp&B3%bN)cux9aNY3aJ2 z+49X&e^)?MnKa%e95=ye!Yz!vE4?vFE*+!0P&oeUXUK@p`lSE8fR`~e7{l-OOS4j5 zL73<27pA}Z_xhIaf2!M5@dD-?o=rUf&6}+#0+2X^8_XN1w$*^X?`w z_Zcic6{IuejstEEhkHrL_%jeM=&o&?0rZ2FoM3U!V%}USn!&p?U8xE z6W%-n3n}DcO}avbFe67pY{K(CA#_#Dxyxs{((_xt$n5txSfsQB>Tt2*lx_LWF@xI5 z&YYjQ!oVMQ>I3X9r&-$XtIAp*nMFIKDD&nX13P;6wC1{PFMJF`8vvPd;a@cnBq-(L zuN4Qpz6q+djK$tPDM=v=wYKnU&lrB+ z44h}5cTuzY^&ueETAFeB#!mQCP7V1vChUAXE2bVE_ei2^nRTUydy`~zd7QBYDs)_j zSKi0m?0imYCKu=g7f58DuN)0rsEbxnvgoG0_#)#p5m*1MBGE!q>Cdd!QJhF-ugUL~ zt!&=Zh1{P(*!14q4^pO?uIFC0106<54Soynd2VVvNZ7ljF52O@16#CwE@VCM!K0|L z>sET(rW+~Y#j?`6RjyUyLaO4w3S-mR%(Yi-m(=rlZtq-RXwhVxhtEuEnh3~3l4f&!9K(gF^*Sf({m-*cP#RW!%89$fF#R@gDQXWEJh z)5z;EYwRneNYCT){;0Qe6~@9M!H zDOHEkVw=C$!l$sgocr<^4kdu@Q8(J1Ft`C!WOsmzHOT+`jy0dOz#wK`-Zwc_I#n@X zQs4rm)yaIGwISoDed!)MXNg?4iqqb=3Uhe2^_83F3ohy|YF2nH>*GCP#it(6XA}=! zDq~c~kIa0=0SHS>^34>~uVZ2%;R7tjj%iuXU0t#tT_rSbcTe>+5y=|oQ!|1;EnQWvP(xMu=uTX453Q2>8Vtga&vA%?Cwb|7F}tKie*f?n$CAb(7xY%Kul1(dGbi z0Nx<=>NSm!BwBF5%lNneCCPgw58(DO8#F;*d2snq+eb77he zUVrjfvtQ!)Tlqxju&GP)4XWgm&>3C3-SDnMkV&nu<= zy8mlW$$_Pdg(XkR@1U)5X6r+D?btI*Jitot>tH4(!`r7N`84N{LNBW8J7)ckZ*jA6 zvWN8!xh+&&J=cO>`Omkc`rL(>ZgO013wfKt$Q@!Icsnd{9?B$FC-*M_^#DXOjKRrX zcJDi}Z&LF9+UW)>=)`Z0>bCabbfHYWg3DAQpS?tP*Z9roRZ%VSxMBn!_vb7PLGUq3 zbH|W$r5dOb%2Fum(btNFWeapxf=U|mL%&>cyYAEk7nViuUkjZUa0^#rMt1C!f zD=g+3zqjPGDe+6iZlH$QTD#n^tNmaoEk=Kzi_{vIp#ct?bXNw*#s$2~EByR5L2CaX zJy_b!bDDDf)Mv=u+g&~|*qZGW4;|@nZunVPpuoxrd%5w+c`bEoFCFzQT_r2^!XmACLU2 zsR(!9<7V|c@r6>?N2qT5(r;i5Ohe-ECZyLhQ&-BCd{6V%ih8Xj%csJhWC<;T(}IEzk)&f2;aosBf{e{Jx{~?3@{7@FuTWP18-SVm zJE^YG*K1rcly1bji&b!nlU8!t2zI{WG>C%^P?ZWQ`L}pTp zsQGODb(enwnR{}_-c4*Ta@hSZ6CVlIG@t$~-K{>_Af46s`^LR7EM@#lTC4*{!A#+- zR^4qKzCwb&^V`n7fCe|2PVBMxv^kc>@Al*$H8lb&Op6;&-65m8+ue0B^lPmi(fwjk ztI=-9tJ5?LhYtNieHB3iv8oMHy)W@)c%K0nhx6{$s;ELNo^rL^wy%TGbQ*K5YVS3B zBEvZc=Q2AMYM^3^qp6E7Ob3RsZsFjYj^2o*2K2guss4Fh|6{#h1TL8SFNt_0tFMM) z{PfVk&iZn8*K!t?@xaDjb7eI~!7z0=XFK*rPLJpxc8d31RuFe2#6U-|CYGaI-}h(L zLuou;KSxxLM+8HunwxmNP&U8suk7<#rd1j{hE=jrXw)I&Y!)N<<&{coe}@}D^(N_E z`^1z}M=C8G_Jc>zJF@GVm^xLxg|?zKS;Dp2Cn*|m%2yn(uL<*vvTtL?c?TN~9QLnH z?B>&8$A)rU)|!6hHJQD>c)>lm#B`CWxB!`)s&;)Go-%KEl-h{u=?Y7E z(0r7mcur4BvVmhpi^1%HwR5+8A(WaIyozkq0VY4TLY6LtMSQpyb0p~;Mc03zd=*~OeH}ZWbdW;1pWjKpjfFMglcF!@LZnzgVLIqMP5{m{*;y0+;fxIFa9Xw*P#V} z1n_~;jFKxu&IeBio@>o1=N0h2GOB~>%dvi8R+fihfKLYz`l~oe|8^aCOP3w@Mx$Ij zH!$-pKBEab1$7tmSC!j^4myw$c!+MD4SoP=2_Wq(H?4?urP8){HzU5W&pQP(oDen!)@xD0pc(!%(-Ea|4QSp zo)|%1iM7}PYZ}cFvOwMZ*X;(C9h4Be#_jy*YKC3$?T#YZ@-H`UOl~eg2usuXm`Kdx z`{v?#9uFe?PMXRO=LQ4=`_dVncWy9dZ9aP)Z-S$d77o5l3H>^SGH^YwspB>Iv%Q?+ z!1rcXR{iR3iiib6m#XbxK$(OT_hQz{{#zJUO-ugd(9h?(G|4Jo*N{Ih(jz^X3Lcc* zU)d+SWV-F%qX$p2;s+nY_wN`bE*QYbI~bJkQD=C>`1^S;{GH(Ryu|Ty=E4ZXO z8S3shuOgwC4RHg#3sj`1`qPo3v7$3b7O+;r08&6Lzpx~{S3>dOlo=_Ruu#(8Q{(4*-tUto~fJ1nrHS4~NNX3U0M*Hia&s{Yw zfHH3dYOhE~*4BI9WT~4}BEFzBIfRllU-=AqUL`0V*`Og>*$a?9k9&X1>jQPC9*{j- zI0y3HK!ZU9#X%|2BSgft_gRi66$_p*j%j9z-Zurd)=($9hE_(TiPBQDTFPOxnNNtza5vnHC%nmM=ktSj+bIaG{U0$M@BZ5vkr{@+fjjnjx|D@Kg@}sX3)WVU!2m8@k zJZFK+eNs6t*|{#bd=vs*^m7(J{cS7W^_)Wydo{*9wR7g4JIr||+pDt1&|%&_qT*vy z$fW6{M6cAT4$AtiMH8 z$v^3WNA|?Xk1JT^7TxU}1}E_fdKwE?1t>X|!GJ~pA6fOPUy635^_7x1DbPuCDA3T_ zkHw0bS5d0dFn{gitpVMXCyLO%`WQ={1EEk1OnMWfBKz3@%YkQQ_5-0M2I?HfD6>C=5n!o!ce8GZIg6J4AZHHXzuBcs!bbcDnTJR)wd8+mACT?@C#=Z_VC?>{Va@157y9po-q z{`;_f2<)ab3D*4DYxNyg^rm7Da6YypUkOOMx5Er1N0oJpKiBMfF&0^y$?X1MYgChbaBFfx7K**jk|$Rykcw1xcA+teW>G4eyP9 z#eN+XfN){KCE=Ygj=%5yE5b?99z%oFoC+WUwpxG_ZJ-OUWIGj$(U%694^?_2sB_YS ze9=GUwgg3=%pGLXNf{GV-A-F|;Cf^D_m8x}$bi+zI zq=GZpvk|&PlS2ens`dpgyY9dfQ>bG)`aS)!_@+v={HPcomU{fj)S3bg)|^B*q2}Z z?oB3j8Tk2uW1W>}s`viqnoY%hn3YVFwZ|&%=*@ zckYo$gG29qzDn^CPv#m|+KrHSbhc=Q&D_@bPWD_37LyMvV{gPk^4oOa*OcTWeA3R3 zfBPY=D!P`hwRQ`w5#>Fq*})-V{RVFodPqpC!Cble6+&}8l$rq!&snq$ItSJ&ciH{c zaZ<=syn&)auJ0ypd3ENy*aC}k0#-G0IB~!F-Ms0&a2H?MQteRvLC)Y8)qIZUw@ig+ zv@Qc~Hhd=Md7J{|~4==!6c^X~&owrBv)1pmpDr8=!;L&Z-AY%C#`^-{l)L`lc?#*S#`X zP7RANT4F_2JNTq~F!KHq8S{sNoGH{zD0%64pSfFr;9dF+@O?I3`#DiGK2cQw(mXJ% z`c06+)z{s^GY`XkYfrrM&l;{qBhKW5>&HAA^~c=uvpt4vt^sDaBw3(3;h*OJ$!rB$ zPf*w{5P!LrYDYY?*$uJj@O@w^0a-R6os%4Pjr4`VZo?eg5u}Bm9rW1td8OwIlQ^Xk z)|fv=$x44#5ll`wsgVk9>eY{Y%CQX0q+#xv$_+wtuxj?}!B=Za_2-{>5eMCw?IRgT z%DS7O^<8Xun9`L0n7Fj2bIh#Mpq>K-!v#d}XiE@h1-Hc5lDd7mg(8KNs~G@rj-O8R zp+kB$viQU$9gs%dOVKOQF@JsvPHd~5(SWm*XGm$6T^cNs zNFV$-7Apx(3^?cs1c70y8hdvjPrz}n>UJp_cldO1Nm{S$)|#_#x0=t6U*Ee`Q^^@T zgil!m>Z#LD@Bs`NSSj;evOm5&`|iGDqDSMBtaKDQ!5mgu%O@;XS+f!0HIl_fG0js? zv{uYL^rQ=umoYthgvwB@gJ{uMqoPZU+MQwv_6%w@!w9MwgQgScetytSRr}*r1&t`W zYkvHyt8aYjq9R!44(z`DiCoT6OB-&n#FCH^+p%9~s-+%Mj7z}xQ0@!T6&-EZ5fO5~PgAqz z8LzB)6*)YQw;MaG`ZTV#FU5Ep9A{1?9a?z4+BHY`gI+m_cd);cd~sX$(stv+>{6~EPpNu;JwJalamG8{rYPXO8Jf@N- zsh6y?VafRU!ogyW5S)m6o2WMeD;kKD-BqhVT4@z1^XFq#f1ajE<>!^0N>jAC zGb~NvN!$w3nsZE~G+MRH9E!hl_{dUx-Z5(R*pw(aC*yf;_UQg-qbN}uMCsAI$fQ78n zd|>jO%GOIx;2;uL!DbPPw{#7gP6sJ!Nr(jFe>_hArZ^WUE|vokLMU6i!W@5npeG&L zb&oJye4Cc#JdH@zn=e*6Cl0H4muWRRA$uV#A5As0o(L=anI0iv;$yH()!A6`L;x&c zV8K2fw(s7K+Rpt(fnI4P@W4g>9RIwRHPG8gET#C}RdU~j@s6tU_S>2^!64NPkAm4Z&IYr4Z>{oYq-@wX1C#MP9HGK5bqep4tafoEATWw#U5d9l-jDzj zrZEGVIxXcv0>Y(W>m4ZsZi99H=-ACaSz*wV-uFfR;NH^KSO4FUt%YvMX&cGZKAhG` zzJ;=cuPgxG_PGP(kuxmQIjXqqrd+nGxI(xNEAdJ|KMcLJOHEaHuI$al=`T_6<;39S z!nA22vDE!gu`of0{ngy>eLi*kfT`{q6sX@C6KwpkD_Rt?M}9Opcgnw3-f&A!Eg5z< zod{Ei|{`oHXQXwE7FL~=;s%>f3d4ZL#+=|AX;;UtK?r(wz1zwIe z2H5jj6>1|)JiT7E2}BM6i^D_X%9kI7%}885FxtpNq-lqaH}`q1j4M(@&yz2e3JVGR zCwGoI0U&>SS@>8sWby#waB#htx4MqmkMEM#b3-dW%&&8nlqkdQIm|g!44<)o=%fRO zwL2TfeXk2@;=r_mEI|Gb|PZuxdTzL3+BJkbe4peMlTb%^*0)AiVAeYfbkP1aZ{L z5SHf4)2#!}sBAaEc$j%Xcvw31->fQJK0i)Qc#q@v-E5zHs;9IuG^8|;NKMuPyvNcQ zjQsPh)iwH%rHxgrR5FdO3i!yvL{SQY{H&nke_DbyDLUT9%N-W@f#uyCDKPH_sfHMq zb2#gjjw}?!Lk~nRc!Hs2sRxBLt8dNSr$kDRm3yjhk%I_5@-J_lIr*U(0%L-0eot)Q zn|tx#O@U%6SKfFX%kC9N^NDwX>hSW%rawF4Nf{TyK}AXyPY!V{oB?+89G5Y+Gg;yK zI%ugcUcbAj!K{%@oFLflF0RB3;Pp{``H2i1VXm8e*Cm?QZ3t+)*&_G zcMtqseg0m2*|O?#^$@OZ#Nh~uU>U$yOAjw&Sk{$EhX8XFgf4SFh+tTb3Ekg+dM zOo`JI$QE^$1K#gCyy3v=gleNl#rGlp12TKld`lEJmK}&hx2@~-KlL>IHls@V)Ud!< z)O;WmTKPTk%Ejvs)!*LX;pG~+PSMl+;BoGk8gqY?Eu}Sg<=Y%Qf;gYX<9C!_dX0Xg zWo!M7Pel`d8nWEI;jVN3#K7ioGKlbXD*86dS-&OQo4`TzWD(tlk@76nCC~7|RUC0! zF4N!hjNQ6^Jm+yu*m_NYJ%^$ipRke-SSPdh&XlVG% zf;HRVIP<1bHV&J1oA`=fsPo^joyw>3+fh$rMQ;}<{pgj#50FdTf2N(ZXFd8(|C(?yQZL7fyCXVA?C%r3xqJP5X0FErhM` z;qOlJVQ`i#(OY(4pTo`#Ml5|a_z2%ML*|G>oS5~iGLe3nXzRm$CS=`7K2B4GI@KlY;frW<2PQ#Q3-y1Rr!XU2EXKqh9B>Htc2fLJz8Z}Hj}EJXZ2fQ zC2$XElS)KfX(}sadDuRCP?u51qI3(>PH3Jr8>);^B52MiwDJEi>#1HV_=F9Chg8g) z<-1gm4gVnSg7;vFQ^-8YT6fbwKkmZ)Xgn}3h@Mps2UrRGdFh#;(d=u7ak|6ez#zS? zfq9|LV=Lqti8kDXZRjxsZQdU)CCYT;QQg<;4;6;KC^#QmyrHLMG5EsH!3UwJr^ne9=ZardH+&a@5i?tTnBBn!En#AVm z*ETyb*rGMT!!5&O0L#12a8VLWd{;MZGaM`KyZDM@oLjOSU2aS$Gq!f!=g^A3<8E;x za%HzL1}Hg4TY}=EJ!*ikid-j`P2s zW@S2vvjHj`cKd~V4}kgK?o^Z=fVnEOsJ8LCch!?bR;gd5=?1BN34UpD+ir=azSqjP z9Y88^7aez_t@v(ErA7Dt+M*{-v(zR1MYVz|4<72wfxuye!<*Zte2(?s=UdTl96IUd zLAe_#t<(V1@?V(3(ioE6`aG>UD9m2z+*k?z0dbU9K|19A~Jf_D03Dn>wh&IdcIyynmaSv@>+?w z`s7JN4(O7Xpio{>G3+;5q8ccrs@$|O2c=f;EEMp1@HKx?82n(@TJ2f{&Pmd=&qz%L2?u3T|lz zU4Qk>t{Ct~{Fm7vPo$XH&v{bQ#o-iNiWq-rC6 z#+xd$^C`yidexL&0FcD`WURT-%Ki+Elj@D$2lvkucF{S~I|OzWcY-n2Q{ zcZsHkXvMD+JcZ-dMO^!Nr9WS6bk>dcCq%X8;L<%?D2Ugp|0#_BZ|;Ws=YPLC9Q5@U zMU{z_xW#6l$$2Ev%O@JUDwnSPNLIZ>)|>?pokNT{lAl9n_^*+3C$H4!W1^8ye!M$u z(S9=AP2XbQmci89Oe1Cm{NtV*mgDpP=l(h9`+%m`JRfZ)E?hD*#F)r)m0e;-?Ad z7u*<Ff+mPP1f5S=E0B4Ti93ac?k8ZPzU=#@GPd@cXU zTL0}>Oh~x$<6r-VdKV=fMU6u$mYvw5xcE?`$QJ~_A^Phe+eN(*)U7aQ$|cxx)n&4o#Mfn z6(krOI^RSc`j;o*w;JK*sjukH6T)wH*UoKt=P*&ol(AynRrPPx6r9`4tNlZ$$51yy zu**w^jZTP5LHct_RNcJx{pslW7mOrJNuWu4(5{PVh}-9F0At@th)=cpF8DBN!~@BS zx<#Ny^#@|SjH`P3u1i!O3OB*$KFoi+uznooKVg(Pa{U@$Q~lJymSI2?x3H(3;Vr}+Tl>*VIcTYNvlp-iU)4?9(3F}GMJU|8V=d= zJ9;^P_HaPG(AF#9eY_Anp0jtqJQ+Q;6K2m``T1Row26I;7dy zRmFgtq0_n|Hs*c_Ph2Muj_Z7Nr-o_?*~R;oz=g{rJb0dJn0GUTl3}eAc(G6dUPRLU z=WDtdZ7z6B-DFB5bl;1^m&z}Kpd=G!1L1;gwz=LaLb8>kJk*;G5^rFG(m)0;mu4uP z!_xYPU}1({h64oDxqztwH?$HVc9D;J`61`*VM^M7;Nx@&Afh<12oU110)~1oyFo@I zXq4k^*QL{MjKqzw6Rlm5lig1-eGiH52JKXkE@)ADv%|<;%DRRi3hfu0UUNzW1@{ZU zmmB&VfpO=s$C{b>>4 zt!j6n%vO#3W2IVAVSH+2jA-a9{O|&Jx$+hGK5zTKK9+A8QXn%ROJ__C3_7IRYvwnb<-e(V$s|%mFM8Vft&gW}RJ>w&(r92NDA!6t zXd>{YKxSe_=jSJuixg_dJ+UdF^>@(_I?T_qSoO~5eT5pr#`UFbRO@|;C)X4eQ)y>h zU5zemZU%4GAG|D6hRMZHoe&XsH@_#aP)0!g1f(HG*g@q0gZ-E9l)EcSuq?hLP+p~w z_mZ^wHI~-6&yBt}Yj9s~tW{~uIQXU0H`sLHJZzV)n#1j}{j2KPU-uqv!RC72iktl?I6re zSfU*y^ELeCsVm8f-Cq?z-LFKed6(P2&U~hj_G)K6R&PLpWk-BAD9TqI=Yd zA>nV-pYzBF#Gy<`n%EZG==`C2VpXudwd9r?{{Yk2Qvv#y9y$xgm}&-OE&g=-O5F9P zaB@5|(}q9&>jJNU$O2K6Rv2qvA@7S}Yi-B9#1Up|IH;`HX7J2N4E3;a3 z)8#R*8ri>EWDP5e(8 zN8!xQxz|zCuA2CZO7@TBrP~|M#&1F3b95RK9 z6NNCo`OURQoOq8gZyfh0@!SZ_qkBJ8Lm1J=UYtgj4A|3=O7@9|F6W?qz?)O)?+`?; zBFPOi>^jg?mHv9e#flG%(*0t65cZx`{AUTYI-ZkakFBZjge}jx@Ekkj*0T)rM+-H- zNgN2j@m2VD4{;aH)h;zV6P(&qMYn9$U>1F2V)^l>H3jSBf#1ic z%L+f-W!MImfC^3lRAVG!b)$?tkjON$-&+5G)MP->o9O=HLQCIAAtq2W1b*$rca}Js zph>SSsW+)$kz%{|Clu;%h-OE>?DVpSIrb4T|--emxKC(F3hS9=>eH&uPX6VYwMJ9|)9GSgJM|0irmf z>qhGG^lYb2hbgu=v&fZ3maD%nhut4E|5rt=Q-lec@VTA{{}ofbMeVlVHlcQD8X-VF zu~hx=xrGh0TEB4TO`;mCiO3Ev0f9qAFOF3xj%hK_otBUMHW1G#o__x8{h$IP#le6V z!op60^4Mub^j(s^t@LtM*ZJ>Y2hSvEwK^>o6%n*%sibmFUwILq29^>2-hmqd%k@{4! zljdjvL*;bEbYx$BkSNpNbk2Zl2H$9wS*UeL2}t ziD!2PWSj2GuL&}KX;}9;%3~-+8@n8XR2gtW+(1up$Dcl1=~eAzbUyAp?<*h=a8Ujd zZoB7$xC~UTUak$s?EWi>$Nxbm#PN|iOY`(D4>lD|Hhg0eJR>V;Us998rwk-XMWt;? zPVRFE+-xfPbPLks>KB=Em&nY+S&*rEyh@0dx2hsZJRSrD*pxISyaf6h#yD<>XL9t) ztl%jn9}Zp0cRd3HIw}$8Ptp%ZsXvbPq0^7;q{3ITTfQTnx=$lW$*AXNj-wfIiTEld zphMt$N@YKTerZXM%md<~wkVFnRJGH3{P!)>#+WFnl=b%mADGEB93sDOl^4yg?+*&a zH(1IYYm(ONyUo%s3H-HS-oM~G(j43OIB&G_zP@UM@{j%vh?z+Q*eL^}!L1^EZo5wB z3EaDBH1N6j9ri1(xep^>9V*ApyXJh)O~&c!5X)YNmJ4FMWAcj8E+RT4e%y@Oqb0Q< zUFmWIZ)0kzwPubAMn*tTe=u&uterZSW)EYlCz{pGZ{XM4Fl4yxU{aOGPO3M-UmC~a zHkA}8zAb4?HF5gTau~ZDU$WFH;lUk zG)q`*EK$T_CzXj}!E~jg4$qhL{3sL6^XU#p-D@aK`$enV#jN&&WV>mpBJMa8{x0LN z*C~GMLP*|s(DaP~C8&mnlMlSnnHKPNje=7>^h@%28y7cw&IAJG08U-IdOz4Z*5Ws) z{KY9vB;nXV7S?ZSG$@1}I|uZ*@-Xs~TFcIFiW{Fj6@sMMVO};knoodWV*343!?}6k zN$|kGg)#cq(y0@t_A322OA+MEyf_uZ^*2 zPH7UQp&pl6o0@?3zd6;VU5CvKL%VHDLzTl{_Omb@{vOf$9A8^=!_F>7T0GhQ8C{O3 zHy%k>N}5R6kvfOV=~pfB`ySaXVz(ks<(g&Q~}EV3?AY)!JKmM|NgOW6SI zvB=;=C9h-zuhGqkdYE!BmY-)yO|nBKR@}6?imDq3@FXCOo`={fgLRivs_iOxMKL~)`mV4?ghpO4Jw5CR0~3+n_F%?U zdD!!|f9=Gl-EKfYD+u}c1Q@J4=($#4zOM4r;tl5qQ<)i&!!f<%?NjgcO0y$NpsB=JT!0X6;Mt%J4#oEQ+WsV#czqZ1FR~*8#&xEZrP@b7oNdB#1BdVnJUmQ`wQejefd3RJ;qn@eoV9e z^sVv*O>e?K@Lq3dy9t4m&wzr#S=C1mlk=CF>yC4ySFm-Xi~ZYNoD7=kw`8-e6JBxx`XH+-5aHtA)|sE|Z+1?EyL%gc2XdTzV;&Vz6EahMQIP1Bwy>?r+K+C! zK4sQ~w3@Y8bH7p)JS#loX}==h1ES5VwfH5h;Eyfcz)qKJ@C6@9-B-Uoe4~yo_zJY; zYM(q8$rN(mK}EQ~SPJ_)g%=!NomTi0f?*BH0oOclO`UkTcaZxbn4ftykCYYHGeqyT zrRjpn_ApxO8KY3QGq7(Al8qip3%Dpq()r1Sqd5tHy&`BK{xr9yjsKpm+T~q|l;GiS zFi74^zxg8vB4Kn1?$B#kBK^kZK2yzhbZ}eMc<7Zn``NHR_RX(E_Y`zie7?XIQO;2wgF`Yqkw^>3!)L7C4@2(M!w1|%x~rUfYAi^uI4kpq&wM1 z6u)9^!LVGT)LL*0U~OoF{Bzg5=p9n2th1;UY-9Al9KFA8It%EUuIbljs2}|$dSXJq zON|ZE&UXf0Fy zLBFDPyqs!(YpThaRqOgkz$xN$&%wQkU;Uv)x=fK8NmnbDPPe1pZ4b7LHCb zA9c-woR(Z2d~0F)tcM09+Bu`*{(N)?Y!PQa3^jGDs(z%EKK=Uum>|yGx@4b{-r$w8 z+P3&Qba?R)Kq5nQ1IrYJwl#NV0aN;mVGVoHqP4gA%&nlAJAi3hQJs85UpnLS$l31a zkNmd*#H4hiS?=<4^(_I39c%Xij=H zIx1*C`xP?7cPV4uV7UNVS%19zm~4toEGI2vm`Vy93W{ zBOak78{VbQlT`UL%K3mOAda5GV!(~4D;j?du&Im1fdVWhep>Py@4pZK<}&pU8`jc_ zqk$P@*zowgsd?Vl06N0bNRKdGCEV-3cQS4#4MB(ou7MaS6di|F_1RF)w;$jzFXH5t z96+xkdgX=<-?-T~OVdWbjkFmB<`ifQVJ6*2%iZ?m=MIr>%NdSJ+RD0Wz{$kl+>3mW zW{!qtk>xr1VYUw0hSP=rRPHKD446~$+ialf6QS=NYhdK8x!fx;coUgmdyj;tN@Dbk zOH!XKR_xROy|+DHSdrfqS%O(sZlhamJo^@8_=c`LGE7U4*Lhl^U}Yea!1xM}Z8m-e z<|cGwAl#|EU~J^ph>~2aB+&U`qq%a0H!N$`?S+eW=v z<^L{PV0D&c^wh}&hzg`-JSqNNspSzJgke>OdeJ`vrM6OnL0Pvc7;SsfH_Jpnny%h& zT9+b|n7j8q2%E$NvFHfFnvIsK``pzo@3mWSeqy!wA^agCNJSfkUWprq7MDo2xJg4_ z?XFfX{%r7A$%5k5C!NjE#ZS`{S;~7$zF6;WaA+f^$p1*~%iaJ|aSE)M&$#w_a zB-Un-?%z(RQV&~=jhwuSeG1`07C8S5u;3d8_WE_dqSOS<0bHLag%-v%P0v0dG$?zY z$qSo=<>rmS?>GR~D^rkL!u|e^?GG#g88<`T`xS>_N=Ke2Us}gI{9%SEqu*ZBeJVol zqJ^QMWWHC~jSmDEdf#opvZfaZ8u8zRb4}B-f0bakc#=3H+LO7-W1`IOvGHudORNr* z?KahLC!|c?;vBR@DDZ+4_zxSSCHJ3U1M&H&VD*2N9MbF)a}Itx!DDs0gExP+1Rbjo ztOfgDNLf)6nf*Ng3(!>ImCGql@Ds~<2r`Am`PyQP6au~x4HyoPDz+v6D?tK15E*DLoN3s3rQBW zpcE4YoMKf~@UU{oZWWT(VyrTs|7LXc*(7w?ZB3EtmT!e2M60Z+U`0MU$>kKV1j+X& zuK#qo0hW$ZK{AVqYBrGSmpx%CB>`mc%b}F1;!t2dK!W(ijwl z!x}%6#;3QAbAYGxh~!eHYc)xD)oW&oGp?xi!#w72tcDt5M~i*WNPTC-J5MpLC^tvWO@O=Vn>C>ir5BbcaXuK zWd@n9+J>H;xpOvk#9-5v1F^)WaWzEIyT@G{){3z>`K=^Ib#>YnGomc#C2vW18k-RO z9p|Qtk)q6jT$*po^sBG}E@&rR%KDr7t1sy4-_0dJyhk-ZHR`}ei0UWuw;R*G@3}Z| zmU}Jvbanvw@-jo3|Cw`({#|OJ>U_iYf0PlB^)EF+Ft37?umW-es=U-_|$X)o&L~-K*tHhq`!t?RGJWmC^OboSWu|Kx-#y zPEVnzIz4Fu^i|@b`sFp=7+){#=NK7{g+DDTF6?30B-VEFd5--eAOB0P(mrJiU)~k zbZ~_uir*ZF4Q2*%-@K8-E2K}m*2zh;e5dB_s=P0Do9cy<%CoO>FJHbL;Z6;f?FEy_ zng6b|lI5zGx;iQF6qNv;UtiUNeRo23ffNkR)$xbHv=(KzJbtlh@o@EizAlo8^Tpk! zbg#Kr?;zweL`$-a12cghl=Mw&mxlpLAxztl0%*+xK^OH~e6bZ9GHv?UUfa}x*?{FP zxQQeW*CuT`Fwf4IR~kqP*#59{r*Sv<`EnVShLo(}O&21*;NHQ2&(*T!iEUf+B$no) z2n;h2B0y@M?Q^o#`_gi&a;*%c@ud8(Wcx47Euwq!-%|Z_EVQs>AZij4cZC0aNtMH! zDOPPtI;eUrcj^ICIcm;5+0x{G3rOR#pltdbK^>_0ZyZ7cpp{A@MgZuXXdgBzTocO! zMkMw~T-T3*X)YG?;5s(-cxqUSi;*Kt4oxjeSAb|^o|TfqW*GO?jf`sTF`kF1-OP)I zN{0|RCD~N<9AFC}FndHZB;BUfDBk(zn>oQ1A=<$brqnGk&16xkS3 z`k=NG?%ckNZ@B2Pqde6;5=c)_CmosI%cb0-!%1?LySYhgZe)}6FWw%|sUFB$OIAA;H zmvdk@9hsIegx4CXjw)btF4-)BCE{uma63}fg7<}`eK;w(+OlN7VmBSzA6QzJs5zAV zuZsR}N&eRYX?7oE$uJ?QKEJhN^#&G1RM+0Br-As3u$3&c&BbrhVe?rLA;IrdjUN%n zhdowdQx2~TOmImv6zW+3J3ik`AWe9kU&*7ZU^SuB9ynkdSh&}s66%~C0eXtgn&y81&!{v0Vlcsz2~*Mc;yv4HcR z|3t4;*Ey+=&Zp#^**EdPWWhlMi=QA^=aDo?Yw^hVcAcngfs3*~UDCjB6oB_gN7;{4 zhm>hz$>p4zN$mEnGFkv96&9_`w2Y;OMJV4|bLIkNxO1+`t@JtI{_f# zooBRN5&1IZ_Gcq%{q>irH=KI8SFfUp_f!<{s1Y-4WoHoTw=^fnNw=LdAu$>J1TfKjajQ@X6%m0>!za~Otuifv1_v88r zC~%#k+Rub^EWU%Z&Ldag=FB;~#eZc(E5EolRU5Q$)^w$|U8m=5GEpj{{GI^dCW<0E zAe997{021EOmXUuBT-%^^#RU1a zF02`yw5Zn;CGtH10N`=fc0QK)G-ee62Qn7`mBpHb!j0&4?Bk2osNiJzoa(3Zvog_H z&SrIO(Riz<3GWrrEf+EeGNmH!MEH1h`X#$&@mKnL$gvUuD13qlOW zV47g$TL+*Sc$FUyH&AK8qH$@&{+vNi29yU8Kt>uCa3`aS=U}NtkW!dDj?!=IMN=AH zU3prtMBPOf5oHNJaGN~f-z(&t;+{*s1})YkK;=mtoP=XSd7P2Lr~ikrw~mVPUEBVp zB&7ra=}t-MZV(X!C8U{gPytDYW~95Nq(cyCkP;aLff;ltQE5p5rMm{^z4-36pS_=V z{nqdO$Hfx7W$ydBuQ<=+I6lsI4Vp<~NgAY{@BQfnC3LhCVaI`j37SHoi-EDyDd5ui zH5()PBrw%H;`mx{e}^V)SnTlA(6gG7Feyn*_G2w%ES0_2lFUC*2+RL8l>gZix7zAC zcFg9Q^E;O7k%xG>{L&qYI^wBl^rGt&B*9L}_}8X{Lyf8Z%1S4Ms_hodOyd6 zT7PptL~j0OiKr`XWgDf#7%1XTo907)%}fOft(*9MFUvBq{}MxY+sdqp3bnV%OH1^2VN8VTd%x6nUa<}WPS2^0n-fuU<-0I-9gOpWzk8cVz4DeMQF|r0IcJeC#c0e(L!^9=tYD`zR3sMbR$6p6 zz7g8$HERh;gLc)xQ1o~c*&<6aArt+pJ{L8oZD> zMo9w4q|@?jNCSAQbBAuM%KD`!JI3GR2ty~H@3p{P7^y5@`^cojR=()Lwr4me_Pd0+ zrLs`q;6^iqk)w7#DZBfBZJ({hc#x@%&`2m-k9vP=`eyy(AGWFQ>{*h8o9U)fZ4PU$ z7_&V3ZNzerQ*0{fN(#&VI{6~I0bu00P$X{FbncqVG}{oL`t+t{u_LyNHLCxP6J%(U1`JrWDVL;+5*!zA=6)U;$f-JX^~FabVUf`Or5w`4*Yp zhMwvge-LnG^}Bj{D!ZsoTD4CIQIex~y;f%A_j`z)RE7AjWW1XvBdng_mN^pJD%bhf zpt-HugXm^r4R=O54m!J~^1`TZx72X6D^P1unPSsoPWC3Fsa*Yg)w`0kVmAJ?P;E7I zQhNzP&!785bWd**c)=Lb<%{CH2`x1ka*fJquA|j1v^X*OC)bhoE`5tkpyn#p*~q>) zo$AHDH$VZ|e@$~N7YPR3tQr%@|T}V$Ag;p z$FGw~UQO886I@RF1;k#9|NV-B5ZpO~R`s3YITM$}TUwFJIMiY)L_2K;kJfrg$IO*L zJJXR%IL_=2{gD(<$bekyA_0XU)`IAq=g#q5nC3mq!j_d6#Rh~nEd0aj3 z6x%FA%#V}66V=keE3JDgsdAgx?4(~VNF24~%&*p0_1l(&MtJbF#P?zJ@yj=kJ@WGG zcn-QDu77Doc5lXQfwEqxey}zr*;#JRvR`b6#0m%--~Z}-jf9=lwlBaG8i_x+#=NZP zRa5x>rfp0mlaj%F%@0g-npvl%fy!n%UP0$QuV-k7uY+@i=_AodQ-myh}FsUz`C%d7jJra7YD z*?drCmk&dxNhuGzeK5N4&RhR!zrI6|O)OJdyPV%C;RBsRdOJk|)8{Qu9?0-CiY1}l z97yqG{*hCV{TYP!%=To-?z#8HIZncYUL5<`x%?ij{OZ{ z;fPok(mh`Lh>6%|v9#LZJkvM!-#kR~Ca2Xu3Td9)NWa>qN%n?j$ziRf9@Og`!h2?8 zJF%b7>93&%BUHWz2)EJ&n(5OElJG@jb)%-gy73rhOF=Wj`z4^)@bz|*w(D=%s0(+c z3MZ(rb`|0#Y2}yXqw^+OSBI*ixl9$F{m9Qv5zVizjXjy9g5q@(;K6MB#RotiCYmNF zugllW5CnC=dvMZ3PueZIaFk>3MzxOef%6+)Z%{E zdO9%5yQyMwJVt6CvWQDDoU6iBFQUzqr5JvSI`y(E> z7lYDt&V6s(xML)`{Z5s>ya}yJsNlmGxKmo{T)l8kY&e6GLQ$}1s{1*%CtEkHyledA z_*BQrP1gg3R|U>@?d+-6XQq$y0%1c=Tk@zA)MVmHR-ANp*x7EyNV-R&joZDS`vlgI z_(%CnGk2yIsK8B-95=sQJm@b^`=I(_g?3H6l?>C%|NbvY^zwg-W&ixerSP=*QeV7y z=kh!Mk?H=YX7E3MIsPxG$mMqLe}1z5+T}skJoJAnYX5V@{r6Ay$>bWs1U~-4F3WCR zbg3Q_w<8W}FMe#&0MOGWph|eRJfBH)!R^{ze4SCfK;e9io+$mjpY%F^wAu=M>%)t+ zpZ|Qp)^YZ6=W`{=Q6l|8dWRvUl>2J~|!kBq6ZAl8ZrG0d|)UGW*}+;D7#k^E?++XY2Bc zy8rJh_PN1a_@qv2vjM?S`+xs9KjO;!%ZJ|ZzpoB_X}$ram*2>^e3$-fH1J9VZ>|JC z$C1WgK551O|IhQBIL}%7<`MgUhQ?W(DsE48mU!^;qSmV4C1MM~`MUGpFYIDh7w!y! zb2}#*DI#U<9PB<(xy41wE14)k>p!cRMKN4Q_-mn17& zK7h>Y#9i|CxO&GA9+M(YG7)X6wH`sOu8L*k^^1UXQbKj^&oVxNxER9u;i|H$M|v;m zS2O=m`8F@>JXO%TY-jw4U4Gq(iyL*adncDr zx^~ohJhTGIut!^^1Sbs_Q6PxaJ?~BKv0wC~gMeo!ZTjyXozKmp1FW zIyRczTK2^EXJdZTSvug6#U0am&NtfOPRF)>;VzE09;db)gPVoeP&w|R+B`ThF>c51 zis5!QH{1|so0pIu_R|BnLm+Mihb=h&n6f6VjyNvG9RmjEW+yfi*MP%$*;iprN<2*e zU9sJndr6QU81z{-@H0})^3Ls{h!udH+#3G}02nmp6Evnmszgs)S#a^E;1_=dt$V~d z$xuL_RDS(ggV7ul^) zf9?_1f8V|NSS(;-GYWAW<t9E9Zt*@YxA~7@lMA++DQ8)bA+3@0JV+%HR`~ zx3y`t$Ms|)^&(-5hNhp=3dG(FC6;IBKu9ppP_ctv>lXEGy@@A$aO~v(qdNb~f`o_c>Rg?RF@`I`Y7(^F^(X z%kS5*K_7TUgGT{>aI+f7P4D~5huX&0VjT}+E^wC&Rb0lFwKJMtGA~8-NcrNw>d3^z zfhFn9mx$H?NzIo^^k!%DyapS@h;8B{?S4~$bv?f`ddV`&kf7R>G$%@>%rO~;d@!>b`g0?`!Pm=3!B27yTU%Wi&-$r91A=l>MlUe}5G z&@)EG=648+9zH0!P5EB*b<#x=(%&HUWNiHf{8cZ73+(;a?Fjm8K@`;weEk-R9>J-8c%xjrE8E)63U#39|Sr8%PEq2_7GK>t#3mLWP*Ka-ghnADb{G|2q0erwuWdPNoj1?e7YJu&k*czL}a&3baos>*(Suc z6SbUKgHBk`yrgyBJzp`=#MW(C26k-ilzXuKduK2$CUBKLBDAUJgUpm$=f)J$Rka`$ zPk+M~Alc69^B+CGu$2doA##-vt`B3tK6 z6N68|;nRZV&RVD&{NC$gzL)}E$d8o(#D-J*wxF-*F-M*iXZ@{N4#68~1g zT0U)-4{|TBefA`8R{rT@9hO&FK|joceyF5W3maQGuw?V=*LbuRz!E!mm^*iB&62sv z_hOa+v-CJ7NW&$tvHL!PXN!cHC@l1DK@*@&ZcQs+64ecKN{?miI+}BU& zgU_$I0Sei;x9zf70CthRlb>eH)=(VYU|hA6a%ymcgsC$i(yPaJv0Q3D+Hg`{B5hQ! z<^!Ajt|b6a2G~dt$6h=$dioD4bBkampLMK35yj#w?OEpabdX#vBmCzHwhc!+xt3B45bJG<_UEgDXEc>P z+>jfim`XWKKJ3kfD3Ozd9@+3DRy{O5{5H4IRsi;CZq&c)$w%aYh2bVN&XvzxLp|`z zyJ1Sm?=I48J{}~0H%s(P3ZJBwVsROK4(?Q>8zdk21k<4UfxMF5#tjlO{juTQ9aVz^ zgCiQ~8 z3&{pgmmhisNrrRu_hU17(#h_6(J$bq5bSs5>Z_%=b0(Sy7#vfkFp+QvRS(4ak_bbX zldLAR-pd7Nf}m|JldH=HvvgbB+3JZen(_j9dqI_rbMZA;@z|%sE)vDvygvu_B~Dn8is=1 zLz|Dpf0wE~kei4`EhfJHB!5~q;rCKxQTBwmR(qQ{MS^L2A`|=TtNh&9Dtoc(ciA0& zkmHJ4G)Nd=S|ssE+H4e*$VS*BHVqFK#FM3Hla1yL77)|dnSewutC!tBj|FlAfq5JV zHsnWC|K9O#GRWx*-$*sqPKLF2^4O_8XcdHGGZv$6YB=1zssXcTDr89IBuZCfSDt^* zOKdQu-Z8exmM_tL&J#up(M~NLt|VT(Qw~e#>2K+I0Z%Nmc()zz(wiq81EsyDXbD?+ zB3LEd!xa;MtK)!0|842FL44s_K_u@1+377s1N`1}WZo!Gv=l7|=o#0@5)Eav>MQWR zTJS+rbSmCUqUP_bvTs<>$(S^g&XxW%2i?}l=!cZ<}N^)%G;;Ix7gZ0Ev!anqXi00@-JN&f0w#@ zsbq806P$)p?Kf$Hjn# zK~yK86F&R`%5Y|M!D(I;z@%FIHwzn)WVLG(m?P)HkO&4Nr&JH60;Ha>tDo)TH>dKV z*WcPe@VDaxNxi6ipU8zTaz)`66xgQ&|2Zy^4TG}g@*jFdJ!r339e|1DXqV)nGmEDoJ#{|l0Rcntli;D6O$h>a zyHn!h-z^#@eD3-m>4+U^EjXJzMbtfPXbXYHLVu&m&g#)=;yx|3aq>2Jc7(Nm`zu^Y z6W>Iu8;4`m?6X?xXD{r!D~%Cy$xN|^><=FfKU>cDy+kw|-# zHamnzh29K30|BY&s@b!XbdJk?&!m+Z?H*2m`kO0xn?mB$!DigY$8M(@gV+|WkNImX zvlhlx=D_-s9IwYa^iGkMn)!uNZSX??W;*WJXeXm?)?uQvK$4g31X-ynrFm=o+ zGu&OPg0$|}NN8*6TFn~UpGN`>_KTQyX)8{#GBB!=<#sw&-nWM{ z#t3}P!mPBN7(`@gW_(hO#HhU+A2E4cfYY_8kILbbI<5xlSh4@vh9LAJgRBRIayFVs zr$aadnO?R2;Cgb6jKA_O%k7nT5%pJkCajJ4KG7KTnz-3BVV+!CtEn?#@L=gEzVT3# zr0|eG{q^`^{0}c_;c$A|Yua@hdN|(QCMGM|YjESFAD2lg!%jruT%_`0;vCG9yO`JU z`5aF4Y&>`Y_=j;0`Lvhcsx`0h>JeQ`{(3ZRi_R2VnVKBYvDwqs&R zNku)M0JqF`(`&PwGyeN83U*rk+P}IYIi-&6&+8iUGw63OQ4kV&77dG<9GN61S9Z{eWB36Gr=KSa0w~w+(7B(Ph z(Xz9 z@G0yb=tnWv>a4DTF6CWRvi@?6kve9C>4+?4UN(aHTVJE@@YA9FM^{4Qt%0mtd=|PA zs4{f2SjmnzTLhHUk6eYb9r8ES8oVg_*KsIc0yCU$(64XQA6&+zHjeGL3{=_y*69L< zJkDC4a9;XmsHtS17Hy>hofa%XEEm|uw+)yr1w(YIVgxHyW^HJ5Ah9u(O{ ze5{Lc$7z@I^g6zSB4}ND;Qn0(TMX93e@9KXPOrV}!6WjFrYGuoNcix(q|n~;kC9xA z-y6oHh4ivk$u?H~@iep|7c+iMCwk*9^ugg;pLI!jf24kv@Mx)4 zjfo7cV>2CI^5f3tJoyrUP4fR&U*4-xnd5tUmzx0uLxJqDOkSi1yk zc_{%1kdm@g@CU17CYl#n-2S=+!mE7p91+Q`(fr!CPW(l2CVOe8uStvXXd+%pAd|i6 zYouF{)$jZ*YnNE9wLi-OrZe`R#de5rdDM7N6#n4DR()q3G<4NXA59R{Ab!odu5 zsP__79di~9VbiMruJpIgCTj^(@Jgo|_jk!9l_xWO;`ACcqaqAKj{R+?_X@G4g+`b+ zbkLL8^hY?VxdY_{)~fr~j`1olUiw|3Q2LLj@2|#0YCKF$seLt;Vg7V_?2D5!EUt65 zDFxsqs$@XSzmeGkUS!{IS*_5AQY!*vbab0<^o(C&UV9luw3#qIs<_Q(RY4=U?{E$1 zWFxxgb0d@QmkL%V9{lf6YyJZ zA|5qBj$1jl0oW+yjc8i82Kgg`LU(jxklMC|;tjEPtiaq~!pc1m&k1)K`}vxc9f)DO z*Qnr5$F(**r!rPgmutt%raeew1y7fQA$xcx@OQYSH-%;Gja=nmrNQ^RdJz#wH+d?P zn$)M&JYtC)Vg%YA?8B?gn~y$}`AYw+mwRQ9WA0V*5>lD}lyVwJovn__xETaPac4WQ zL`w#FA^cMpMp@GGirf2|fX?987M2WOOX)s`P;!Y_;u)fcShdGIz_90l>;FiL_6Vcf(s-Z@_NKO)k_ z3yl#0b#n^+_by-a=D{>v#9d*^xYrmcX6MX{LGT{YzR+GZYvnIivv0AwT&F_UOKeW7 zEWQT3$rqf^R?*}6IoGPC5h4K?U`Q;B zKBelNdcD{;bodMS-5}7&u6YjiEUk_&`&DZaibjou54Dww5r;LX1wJ)fPsqC{Fn~>m zvkFH}xUc)hV4_)th3JR@uSq}zFT3mBYQ#xW;BAFsu*k0~Nx&;7_xr3HN6C6cY_upv z)Fpl^991Sz+1o8aGea+gTb-76q5(p*@$I>hmm6F!cvHW*DTOLXJUHm6OQZ7Spbblk zTX+$-bAct_B~gEZr1|1PGye`guWE*!HHvizV4|2emviYbME*E0q)XGQ&RKhc#d zEt%Xqno8XrCvS`k9o-`|0bg{Zw1phnA^_t(tjz#fjur}AmT zlq0Dt`dx_fjH7*Z$8X#vwM~5@T#%}Xf>nkX%q<;E!SA{1z~pp8`0AxagD|oj`|6>b zJKM9Cp)`88>AH|zh3NaYzb|VB=-+mE1F$#q!DHBV4M~HaO@f0UCTeRZYmdIvi~@9{ z7av~v(CK_Hg78+aP&S7HkEe6xOh~XG$pO#+#^$}_wtDRhGsXx-W&m(8pKvQrXd_?O z)EyYc)-u@|^pb}YlYOl}6RYt~qow;>BDYQF1lRzkc)Y%t6TTjVdxkQTG-`tMzTBb) zGxQ3FIHs|_9ug5EF>JoV-T)zr+8aQmCzbh{Eq%ee-mYXczxjgb)a)O%LDexV<)RgvQuoVAP_||R^k2F^*3dob_de3JI!ADMUF-Fou#D&H}b1}%98bh z`P}r=D%g)O`kuK;8ybOwB0w(m$%k2!5@IPyf@9&Koew1JH0Ztlq~~MU9?`^PQTo85 z8Oi1HL1o6I*_qkER3ODpCMZZ=^yF^tifThn&VU$!L)7zxuQg0EJz{M52sgI<>QpA| zI!28BS&3@LEwtTn(Yp8UmkhrV_KSCiDM5<56cQ~5Stm88ChDl;LBJBp)sl&q;7`~D zraTOqvFVv-yd{=1iu&XKS{78Jsot9i+&AJX)Td*;{)xBPjAL}yLm}pEdWHX8b;r%j zPc3%>c@vHNzoi|n@Cnv6l+UHUVkJA>nB$R{wAEdj`X1lQWSSTFyg zouZP;bXqcQ_B~CPmlY&6N-xR%)pCu6UwqzVoz3Oo?i?8W5szSr+F@>-5p2ReCF6w> z6~~AQ;up-A4JLyoYq-os7jQc zl~5VXVutxwR&@{X$nNnZD!sWFv^&c)JZ@Rrued?u3^Yhf@9eM-Y^AE$=^u-&bSrB> z$0aloUbtHv+`(U1c9>2QugPPuyG1gCpAEx0m^x1ro~PFLA>?&dRv{bQ-J|lm58B)Q zO8C#es9*v!jG}lCy z!27KTB~Fk1^hDYYUm9BUBzZQ?R#^%{MCh)(?$O=NfjL){Dn!)Oe_u?^vvz*m-0jQD z(UeWB&0v{?LJyER{`!4&Q8@~u=hzoaUksJDIc~(`wy?nXBLTd8bXFe}XF8S_vh*?P=euR`6^v;sBReZIOKX+_&l0CW@xV8js%ZZQ}=lM+Fs zFxpVn+0;d^J6?OI$S73=1-fPpGuM~!`T~Tq9k6Cxt^r5)TC{F>NPRh?24%q5+IPZ@ zFsCH10&l`>&N(ZGJvQY|O+H$y_DH%r%Q`9QR6KFu1)NDQ^+ztV#a2%OKL%8qZLF9e zDpen@4RcvFxs?9BMHlM6_z1+I>lWQCiq?&gL-;#ZFr)b=$yqc&F8LLWR6oIS_876a z|0TV?UONa_Cr=@FrSjh1I;}5NZ4#_P1$vWbbJo5&GAp9D2=shy;~3l$7tw(M;@$aQ z&8O{&)q>-ImxR`1llW57JiZW*Nyd&cDRNG)yn+Q&^R4ewgJ5XI>|O2r1Q!Xr>_)&k z7BypX0bQ~Dj(6#! zWjI#T3gZx}vvQy&0c(VDTp=B^v+>Kx{=&C5&+tFaiCDC6flgOM1$}hAF;hQ9f7DXn zoe0Owf~ZG?f~{&?e-s&Ft$PcLT{B$te$w@)Dr@Hk+`;g8)7}91`O(gE73UJncnsCz zpH8l?WQovmU5g;%9xtBCK9M?3wyF=O7g3>CruXP1!$gvK^0g23ZW7_-4sX?I|NN4X zE=2UeesKS*1tq7}L|P(;6q@`*6P9YA-OQz7GS^Plr-{pL)Bz8t!7MN(it4sd)w4aT zRBh5V-`q{!d20i{-;Dd(#Rjr}rg#gf(!s3UY?u$PwWy~8xn|9i61dLZMA!a;3BWO{ zgZMXrDnbzyL-u!EV%F@%37sTCyiI4|`)_;wyxMn2@PEX#}*WEc6~S?>#~ z4<9ukvh)Eq&-&U9Uy~xLpFmgqq*FzdeBi3RWjo)3PMtIJvsxca1IrL~&Ud;#j>uEi ziQl$~;8de`{UUd3a#x9`(625>O(H={>K8=4c7iEKyr3SiZx&WKhXq%j0hi+*OZWBp zh?nxjP~PAXBAFPM;iP0Hsc7cGiCw(mSWscYVY6&rE~#yuPntRy& z-`_w?BMh)lt@&3k^$&_6;jw8YzLOGzJL+1X_)ETw{-SNh!-K}3=LP!b3^gI1zCN&J ziDgi{wku&I%o4b}ezRYYU70UvGXj&W=AZXzGnywL*tAChg=m!iX?G9pmg=rZ&T~EW zpniB)snUV=dOIJrD(%Cd5p(^-fIE69ji=W(zeWkLO{$6DaQm><992e>(}McaoWC!KOMj zLJ8<_V{Z}N!tr*=UiGrd3BTQ6x`a@AzPUfJ(**tYQP4J*ze0!B8lQIZ4mgfMbRz4o z9hMA7j7xOvfJ(TMqMcR4BDkN5hj{bPP$^A4$jN#QHyA2E zfGoQUiN4OHMH#DK8mgg0nBvUB4Azdr%9mqKy9IfsIf30QyCZ=Kj=j^Zws!O;@aS!2 zm%gk&Z%%Ieka0;a2(P2no^J=OhuDgMV_8`4M4^*Gx3X!$w9|CRdmY#|(=s|J~XB%d52i&{edu6>$k0IQQa z(pz^xz*}CgC4>LF^VYL%02hwGi8z+8_uVJg%ljVgvYwgBSULzi0JoM{_r4S96dxo}j~#9qBtqJ^W8s|9;t_l|$%f z^NfFq_DScRq18W%Pw>y+8E4E*o2|As(D?W~M9zK;3yBEVFQ^vMcSP$uaQLOh-;q3d zS+8bApvZur>+i!H8Sov<*fGz2J+~_0HF69k?AMiHCD;QlitVZ%`bwo};@+5UyXh&e z72a0%yyQZzJE0&){g|;=hDp!_Q{l&OJdhJUBvd8;kV5!!kU^imnfY?VZ+n9q;|f*~ z@$Nm%SJk{}v=9Z+`WK?-?Swj#VF^r9tkR;;JRYWZtZ4-J-FC;r{JW{-tU{^H_ZN;g} z#V~})q8~(CC{#w98n3m7Myd|eeQ=qsk*)0?##1a;3UGbik3wnuF-=c_5r3!6zTY)g zhu2)TYp#=wn>f@U_zZIsfr6^8vPp7L#{2C`SO@n8cv=q(N|!ZP;PcDTOv-i4`Th#5q0}hGSg|8hYVx9 zLhrISFXPR{;VP0lr&V&dW;X^fXxIrIfnc(ke#wKOy|mG#8XcZ7g?Xmp#nJ z-s-i7JDVjD6X%Y1QoLn@2lJe}fK9%YInNMY9$g@j`l+w^o|njLOzZ4r(3$j3Tc}DW zloylXu5KG*-*QEj_o*q*lw@@>>-Cqwl1FP06B2NznAfUiMOK)E{fTJ0>ekVm8ZbHZwYV4{RJh%SZv&Q$3MoQGGEeb?A?)#AIP6V^Kc$cx+w`-07i&Mq+FY&@5=B=I3VBAHNe z2>Y&MLgFqB3b2bp;<=6#jMhV}|D=t1(8{j5tQ)YW+&b0EU#4@=d;ViA(Vgl8Wc~FX zg#5JYD2G7d{@Dwl$9CG5a=B^wyA4eGsZ7u4>qnb7NB>m#sozW$>-;18!SV(D1ZN~z zEFoBrO_7UX&xe#lXitn4?mkH!SuRbm4aTli{i~N#s`wz zcAhPdvrT_vnG%*FrRM3krdfP|Hgxv4CgdsF+_UT%-s~pA#Jcy)YdBZR8;p zJWmrT)1S+OM8qM-Ad?nVtx4eq-PLG^@>IP;5qZ-qI}mLBnw&eOP3jzrKAY;}wKw<= z3R06F0u-U@(E{qEk0zM8Gn;1E5@`%t{P1$4^=U8O=c$C+B}fAnx?iUPG4pA>+oxPz zDesdD7`apKeoYh}syn^=i#LZIYh2EL6$4Z{wF^jK=*=0{yD9wpxt}Q0tUufAQGmbbgxO5EQYKKfMv>C+_E# zRKq4;Q9zL~`u)9bQ=DYRD($5X(8ipH!_30teVid#4gfw`;PfGB+0v@z`~7jUXboSRL;Mggp(<|k0iO;tR}0&^b~vjtfCN+k^-`B^h9@c ztmB8k`Dc}k{cC>4O~n;raC#WALOx7%9sFCsY1Fu=UU1NxJK9k#j{#n=dlNKTcD*cK z*E^p@MJzCkbanENU3c!Gy|~AQZh5w!F$6(Dd4De1LP{VmVMB*37ksDBHfO>Rhq++J zSa;YTfm9;kSn6!NrFSY0n$nRr_~{r9l;wp6Y;eB(q|*PcCgo2o(JGbvUJ=}uLsCSh zf$DUP$vZM|;wo-cW&hQ!SX`heLY`Zy@Az{D3=n2M4Ad;xO*@fi|7yLL^*O*0W~`TY zuc4oj@eBi~W6o^8}+tfm~6TiqT$VV4eQZCCc&%?+nAI0h_%2U&Y?1%zjM;uS`U2b$QK}?5}zWYJWG@X;n znDWm@w4%b+a}&@_6F}0(d%R;D3mv4Gdhjz`Z+( zf5_4xI3!cB9M&f{JGCXj++^=r(~4+ zw1yr;NfIf*^rS{}?+Hs$c+Tg7klg*0y-_S8{6o04Ci3-KpEGu9i$$G;WiQ$J?@1=cD6?+=Qepp zEWLj2lG+aE)9J~NMhbi%Xw6SWDvCz~Gs0ipbHi(2;pWYc#)HfLH8;CMP40a3*dUg7 zaoU9Nk0PzwtTg1+6N4*_q20^J_KK_1Y138FE3YS&#w^CsBt-XW7BiLGH6-}D==qO7 ze)6TivZ+jaJ22!SSHA+jhCRjp)ZcUqwdZCcs1uf)1@zxC$LWrNgth&N>3E(%G(}L( zOs&j{oR1D{wPne?-a*OxQ_WS<3Vi2lOF~^Qa2Ntf^zolI#zonNF&yu#cJ0Av8;R)H zqj2}x+bBBE6PaF;y)tUkk68v0WjxC)S;X=o@`o;qdB15~v|NfR9mOm`qgS-we7 z>$lzRQ^mUfoSAT{Q7P6J)?$-moM0nr0nX za>zCj0P?1ee2#q+60fqPAbi;nq<46AQua0q)7Fz`} z2dy;DXB{uL?K-dI-$dLTBX9O|>!+Y3uZ*j1{9C$re^**As>=_@Oxj)lgXe%co0Eq6 zZZap!1$u#3o;JD~Dxs5@H)1(L-Q#o>CGT;HUk#0#_e3w{;Op8EGV?^z-=)+tmZDs- zl2FqD5i(C%06!zQDnK|=j@w005>58L&^4YG!#gobKSr{NpAj%&sBt6stCy~%W~yFd zzT4xmM(Z_J$F6~Tvb`tHd_m%3P)*U$l(i}?lT9@Q5tlaQa#lQDTK?nU{>S|izX&h4 zs>$}kp2rj)dR6ZP6OB|S+)L_BIol@RjO&?u-*Uq^x!CljnbLsw*Ygw-vcskTW(FK2 z*X5LYKhK)(F3?CEGUFbcN8pZf>g7cfS1Y0UZYfoNnSne4GC~Ce3PX!xl}5zKw50jZ z?_Xn9f7V-i9615aI-L+tcJG=BE!s+iTI&Z25dR7z1R%|$1LFoAEy8pTQ@l$Nn3Deo?Y_LymRf6lQ2tOI4!6~xy z*xJ!0c4sZnR2i-q9}!HL`4e`cVTN|4U)&W`jG`l58k9*e=#0-vtS9$ZXY+K3Xg*2x zX`}k)eXBf%%3{)WQQ?DAZpqLnR^`-xuhgjTw#r!NBKZjtjN7vj&EpI-QHQ%VLL1a_u+b z`d?fdH09sM^N!nkyL*UhVY(cwr!T~SHTS1SKO2D)qjOgPq3*K(mb*hDlLLo%PuDSy z=XnUiONph)i|#XCm;T{L_Q+ndyTZowV;8f3lR_;Km0gTf{1Gpjln3Bdb#)|UJ>;5) zF4uq0n&~UeW>^TP#0DmQ_w(2UQ*7P4V1{YA2UY>fqsIvYhZ09VNh9)YvP_S(r9`K+ zX2@wYZ}erXfM&~!rN2ld9f{Nh;jd|x#)O?kwvAcUUahc?Jmg`FPG3-KMfX# z@%mmp{-FlR&uuehrq195A10N~GBRVJF>EO59-mZMXjGG6$2k8hmF8TvGyp$*FJto| z@Y`oNV~-d+;MGp8_aN=5)VQtjXmr1H` zwv>?~6?9|OcdJ)%L4Aq$o^GzFoEE)&C@1uOg2`rRhc}DL>$g(d`xA{;G;3OmXqQCL z+qP+5wcx1bod=AS7l|jL97V@h{iZn?+r64J7iAeXvo)~a&`Ov-@25RctT&1CM%f{@ z-_(!n#U^jAzLj|9SL5tRV6|wpsK9wRV<4$X>yU2eQ57wn{8HnQzA44j#GK9BDoT!< z6p0c{RmGDT3X}q%GE7ZfCcgET*U#IipT9w4zSg+ex$7Qzc+AF+SSXROMj@?u&EADI zs9J}H&?}C$=~@___X*tWRB?P+U!h0RnUl%52F{#@^GV|Oeb>@9e4-hq8rRimu1GO> zhhsXd82!fYxCY!hWP`Znz&33_;ZGdV7ybK4sa<{j_4Y+6y#!CxneP2R`Jb}g7&v$Z zWWRA$lAQvFFD3wf`uHnHM&8Gct*4K_!rc>o4QEdM%UD%Ud2z;`wix_VxaH{6D#6!O<1}i!n12a8}N}VOWvgpixqe^I` z*Zx=sjbZ+ZY>@W!aj~4`$%kD=?+(wU;An(w&RR_vVAAS2A}L{Qh5@=vHd|GP1%m0EI?*5>tn39W=e#&vZ&r?FH-pA=x^kfvcNM} zcJJAy;zJN3K$w6V8jSmtwf=KEfh>rVc-w;=(iG4aIGlb*WL!q)&o0OceCeerdBxJd zd2ii!=L4zdV;*6!kwnvsrAd4C9}A;rWDFMT!}^Y&|I;P-x2>;FX4*jVb0t@-Q}4UM zvXaxqbi!E&^-t*5nLhw+A2@AeC8DM}DuGy-3)9HxSkLO-xbm|KoSo z^w>DK(#|eKcVVlzbBz?oF0c@U`{c||)_Wy;r%blvsgbeoZ*Fi(`qtya8E9y`HyKhq zdBo5cDg|`!s(~&In?fYm<*)50)O;F*=+S#u6|V-$eio)g6DU&MO=e|*+z%F%B&eX4 z)Ra)Zu>}h7WQ)?-@%jk7KXbEsh1p7=BinGm(k?)4h^%#3A@kJ#iZTbS0Zh@NZQRbg znA%V==^^?3l@ihaqPEcIUH{j+5ILr^j@%AaZ zhRlw2w?I5(Didn0J3u z_P>8OPsa$$l9A&n@Tx|3KAC4`yx`J_2=+ZEkiQ?NUQ2WAl}BbubeplT^Fa~gVY>$* zNMOQ2c94YHohtzkd+biLI$#SYgf&kNXuf*D zXZLY7Z@ZYGW3`C8py!4pfx{wqESAk@`x-KwQ&BUas;&_3(~}FJ&rsLrvo3Ry5h3HSPnsI}eG#7|6|p=ChrkbvJQq zIqYMgAt*|9kJ;}ramHA>C{y6gBjyE$?s4aEG2bq7crD_5?MNaVvC}?A|7XDFYGBs{ zsyxU_U!>hRIe~GF`GMp0Xb1Q}j3%;WzmP|F0be8k`Eb<4f)*GoIrccuJAO4v_hi6bayulFay%5 zfT%P`$Doojlqg*?2uKe-Fu*>!?tR_Qe?NP_+@HOD$@n>It#hq&t>1ARU)?uO(^fwC zzT`LjH3h_NmDehOcNtT;xH)hdPW)44UAL+c%I}|jHec_``is%eb-qur()_3V`dpOr zNX4J?kP7-{U}fS|mhtWlMr@*a#{;FLbo3IzB`P-%srXB+GcV?fnYh@b&ZBl+;f+wj zYD5f5<*ir^X*xBxOyPX7@WoH8`7zeqcCNoPc_bHE9;80jgynEQQ&OP7S z`TZcMkGHafM+nKN5W9_(s+NvU$~3o70ZeU>wAQ+H>|9<4SS0$1%4H;qw_T^Whaka2 z$w$LEkl2E&z0&v0G}@dqa`CIW5N}r=338J#b;tWVveHDun*mh_4Ai14xL^wU*6G<}Imd%jA1I^0o~k_R&~JDt@m)ucZ6gzk zo9i?^S-FKX8tG7yn(JB{IX2jK?PY{q|8jG1&jyUd>5S9S?-bQ$!(@k}V7Aw8dWYUr zhSL^a>p9)qsk0Dp|IJ2Yfo(^5<F8;)1f0ueC1T*w3X~34D=Jb0HyTDwGk84-96E-rH(-Zr)@R zW7fK!GDJtglioexBADiQMb5d-4ibkIOiL7@Afc*!a$3sl7RP!wQ08ldz-+6Z@D`w! zc(m4U2D$sijxLGQ>PD_falRE28U0Z0rQ&gnw=^43;$V9^10nv^q4+cJ-C+KHr!evI z^%*HZqn11>Fdz8bRIlblggg|qJUTQ=n>t@ZbC}s9=yjY%^?n(7ZUZUcQD5`%(;@zAcS1=sMC`0BM zz2C?*0?uskiq}zNos4z{qzr6-Tfd@f#JME6t<&{Uv>d%>hqabFiDSuowNm1H>Ey(S zdb43|1g6?uBK8sGB+n$4TmsxLSkOh3hO74%#Qf3J*lbtd%d2KW*iqk!7P98;2dJJP zV$BTLD?YSDmtrp7`zzM7p{&C@n|CfCgrtb|BbjV1^33&$Vdjq6B<~F!tRDhB<~s@58yFd8<6jY4>x`me+UMc*Gfp zo+Q&!de-YM)X6FJ6xUvyuvUsrnDiI0W&pL zm%ypCxwVVKr<$J%f)qzhUre8n(6XKkx2*ourp4d2rQ1Gt$Bj~aI4UF~pH;>~>@8YM z(Q+Km$}St2<^iL+w%!J7oA}hSmR@Fmk9DUyOGg~I;6-bE zb;HSch;q6+B;cXa*DM{pyGl+kRH3HJO>bsElvG_dj;nb3OM=_j;V)xZ{KkAN`>f4F zhiY1Zg~kgP-$#*>^4Mpl+)wR>9Qy}e(&KZPsST2(_B&#CyLItGX#%HhEuBX5I}4&mv|if^^TaiMKqxY(EM`h} zR74roQFUfve|x;roxz~fU{2mH0IVdYZX zAS53lzGgs3)ctV}F)pL9xD%I2JS*Zlku_#y|Bxx@eaYu zN;;6b(H8^$8w;b=nK@KHb0z|cyJS*-;qmPoV6S+>9YcFbO?XcCLkxMM+}`L(R0(~a@C$wZ^&gSL(Z6fD_;4yjotlRI!g|=%UWe-G zS{s3myWf5UEbv{`UIA%X3LTl&8nKsYP@jAp1;L|FLzIB5j-h2kWQg}5n8m+qsp+~y zvZhC>=r=}jQc7>E%EP86ziGD7Db$L|-r+ag;IhNdTC*s3n^dW>DF5iH*{6G1!tthf zqs?t<3>C1a@+~WP+F8G=HPCbcS7tnBR(9~fjD#cC1JTy za+juNt=TLF=6&nqnD+uT)GU5JGpJto8M(LnN%2-0~-!FS0<6?Q;xRXP^^5^?|PQx zjB)G`3>5CVUM-4hcxTh&m%{SI<~J2HUII_+6sh2$9(drrY^`o#iSu=}?TiTWmwZRf z`LT;8i>uo5!thy41Y~f2+efDcp&i>D{CMQdXLWKD*4CoOTj>a>>=^=TSls#zGJ<{nZSiJ?{*lzt=Ec*y}9j>m$;jMC-38SGG$ivqKH4B(MGdKjKo zZ||)QFK{l;UZy;wfM0VfFK_!_(F1{tnVr-zOJn|Q%>~AP%V*a88#Zt{kM`Ql8)G{! zM5O!2n7CA2{CSpJ;*`gvfJ41b1iJn{qdj{- zY=WX`#AM|B&a}NyrR$BRSm(1hDS#Ey?1oezy0%g^>N6l+QNzkz7DB9J{osw6g$tQb zK=|d<(c!diF=n#DF*Xx@(_XXn!j=?vytixo91kx*%Vo;#;e|7Y8uKX=3&$kSRZir> z@t3XvN6bzX>1b+g)7t(1TK$ln8L=C`r2rB5PMcp?%D`qHVqjtewV<97cHr+tH>Q_b z&kct%gj9Qvy|Ou~2-a(}xd4(iyEClKV;uR`tqL3~j`J2>cqBGIp{BDGpOsc3JU#R5;?f*f*>K8JM<6x%}wrB%YnJ3GSLYKeXx%QCjb| zU-Dw>G1=$I#o|rOpc$7l8#TvPoxs)TFO?fD;m)Qk5YaV3)_yq%_F~m>p1fF zTP0Jh+w#OvI`;9J^HWmuMcFb}l{f{zRz8neG#%#$aaW|z$p)z+_m1e3oej zi6t+jF|cy3tUlt#M)M{Fekb4@iQR~}oN3-yw3nny$JJFS-h&h6paPS4&U{H%`x-HD z>~V>HHCl3P%KBqn(Blp6jm!meE{TT9Xv{(_EvG|n)HCpFBlfokE<@btfSN3KRsk)V zV<4Rss=q$bX)lZF07$XxP~O}8yQ6qB1Yug@TDXEV>`Yk!}U3Oq+wksvJ zcuIddT?#EIpYlt|+Z_qJOpd0(=nUGeX_|Z-!b)@`Ev55;cFvGu$GTYwo((ZKjy<(i z9{i=4tQwMk&2s46G~OjpXRi4{?mpPBVvxzH%#0kw)r~6P-5V!Hk>w7sy$5W5AJf)o z035*zSFh^L7~fDmbll~88{k?-zE^1KGktj>!&)&m+vi1+tD3!iz9yJ!?>BNibANu) ze_$=y*_#5IaryG_hy54$AO*$oYjC~VjTRUb1t0PrC{#P6Im<)b3H>cBz}64NDSfnb zMIkH2HVU)S*<|RY<#EPH0R>4G#R5Q;!UM~!yX%3jl!}6`nS18OJmM6ZK)PEAiF++P zR8_Xg#0}MQd>Q3&W%~yE*TXm4jg(wEe_A=q@d=eR*l-<&VxqXOfSvUck&iHP1}eC~ z9aKIx*A2I>SE{oXut4S}ro`55wsmLr>Dwx|8z3s~hOjG~z4^Hjq}$3u7*$u6-AS_@ z*)6d7RQ4dZrv5AM>@)gYrv}qH6R6zH>&zck=^w+1g_B6ytI7O$b*wh;%B53qs=a&u zB2!Ezn+SVDkDKPxI`0t?prCXjV$-efU9bw!A}S)%r7AQSZ#Pk8zq1vMTDz7}bsQ%~ z`V>aZ&`Sv!U#JiCf0c2F3(J!jN`hhw zIkJ z_DHnG^q8q)8}hW~V{w9t_exuc0LyCH$4;+`)*yw7|d@6E&f=I!=?@?nnFFq8>UZ@7hmxweXwZ49s zF|ysP=y5?%V(A7qzfT3+p?&L;iCFQwa@d)@PoG0F=?b)NC4`|KT~6B_F&gzwvC&q7 zvf-7YvtgTzSL}L;3W0jmLU*zEk`pK~BbJ1;XXI-s(^<<8J9C`zXwBtJHelU3I2Wb# z24z!sSU}&Jh=hZ3?4DU3ouuN zj= zArcM=tLm#AN|hbu-|ajL|5`LA?iXrLaG^@@ z*UrvH7hJNyu4Sr7J%+4rdhwik$K>~$~)B+VItMh+9xkjUB!IdQRH# z-dzRyKj+6|T|ujEIRVfch5a;rd?!k%VoQy=`kn}D`225^vHKie2vh)2{7vb(>S{}u0o z_4UnSTN-cNhz}6Pw1MwJ2h(e&O+B~ptB`}Af`@DDM>U>6}#Z`FJrn6 zJTchf0}Q}cC7Ix*G+Lz{>5)ljOR+GdxQ!;195Z$S&h*ZK{4o|jO zf9XOR>nk?ZEQZRPix%VZUG>s?#(vd>&Q+fDTZP zG#lhTXnOgmi${|)Y`EX^2gY+cOCQ*s1cpPOWhqOtT#ov5di>X2 zPa(nGH%`E{+3AG$;wj{9M!g$axV#Y&dP)wmub%h_nD(I+G2Ohdq+IS&2gz05A(H#1 z7XvDFu0iQevfu{YDZ)g-Z5Uu{wb*_3d7DqgK8!j#B+;y1!?A}};WRWq$zs#Q4r_)B zo?&W2E=AM7SpfMZab*ertEli^d(H6q^$zw5)rm+mB3?rqD*vk=9fC^$inw9@GTms5 zEUWNMRda03a-SoTj*4ig>`w|!;o};dAo{qGqmQ!xN#*zM&Tl8`{1fAvhmKHdj6myX zXQFtjkj|&D^tO$Odgj^>-jB49%tE~CIte0S#OK1wRva6$DpsENfbLH8_jCD#UYY6Q zt7mV=02ke(?3BbuBHR!Wd#>VH&-$A;;z#HmYi8B^^S&>Nv~3kYNx*P z6@M3Hb^Z&m99xZpPo=SPL)mAL@j?5=k9@h~vo_Q1-r(qMIcZ71tYA!#6W0XO?^NL;_IHDm>(#q$JmD@HB%# zcXUX}?>ReY5n*>5_wc$WzR{?o?cf4v5yV>XN1`SsEX9B?^i|bG%{V(7UV(QtVVj$k z_!&uJL9fAKA@@`$Xw2fVB=GAniKT8anl51|L}T65@L4j$#*flYz7PS>H$^iJy6KT(t#HL?7J_tcznVHOva8a4 zpNDEvOv5As&t_G;9FCdtj5~pDb|B|q82X;ZrLPMK^xT}WPe%zB)4{1X*^e5+n+<#` z0kU=SV_0LRe>2C>84F2lxJmr+5w>NxwmrIy?uXlX^WMRv}COXK=l4TY~2h!=|HB zQ9tdc&X$PBsHd3dV0O?9!epF9F8;b+y+pl#=On?N(JMF(sPyjP$@hh!W9wlGg@BY{ zFrT@$dfnSWg0-SCn^$5qFmtdKjfYN`eL|;gtxLtU`zBq8}q*9y0~*W$mbqbeIR$KR$j{$khPKls3Xpo zl`%bAhBm~X6ePIYl0LC(;F%Lmtu_2aH2OzJLmARvt9Fcj;aI=}4mT68k)W6|)Y_#j zrYf#oy0|Qz`<#>-D}m?q-Gtm2bPf07p%|uy%*3BMGwH~F9q4-V_gRs1NzS|y5lj4p zBjVOl;UT4qq%H{yn|dq&poNnxi~#+j(??%?S8@D|2V`H#0!~M;6X21Af9KQ9QW}=< zP62W|cIbXr>YKok6(d~WuQv@XQ09m=FR|$=G-+5g=`$u$z_cH7VZzUAHK1>*BCQ@O zwn(&7^-@MVL}$m0lm)6=;|{V{m;nXW6CX)#0nqEl7gw4gEL(c($*F1L(bWPZe?0tl zf11XPMmnX-aHc465TpVqBRTx9nr{hKLE*NnGrV5D)v+HY;&1Kifn>oHY->s(d7aUS zKP2ltQM~|b>PgD%kyKkeV7%0yBG*EChVdxx*8r;?*znBmUalURPd0m$<4>>M+6H5R z*c5^`0Ah%EjG<7`QtGb#H}lss6o`RaS?2zRovr*ZfIH$sm_B9s5by!}dCgFY%&Lm& z?BO{L09P<-W}B5G;8MNQ0e`?Fr^Deb0OE=?FnSkYz~63DFCy10pN{(y@IiF+nyzxq z#0QXbaohRir%rbR-$y>J{f*r6jqf8WrXN9dk`m1%Q`RJqBlL8M;T)2Ki~=If3*i$M}U zN8->EnkJO{PM6KRLw~fMV*)aS%DRE+dCIedC7`O@3z|Qm7%yEqD8}SCH8$FZ{w8tg zqiraOBBT#pqy?a;o7sV2=k@Qm;c%D??1IoA3^8hUO7oJen(c*meB2Td1|N8rCpY)1 z{sh=<{Xli_N(^Q!a?s3tClK~QOXC2{I^*O zffxazl_LApPFnWgSvz+}PYV5kR-u%SoR@7Rio&J%0JO$x(U{}@YgQ^lfN9SLJsz9c5B<}NSNMqffoS(p^M6Sr%c)3g?N8CI;kOhD4 z(5y%99?qgkGcTEN6yCrYs0uUa%<3Mrr-(Zc&wSbrr5d#2usr{5ziMTxe58aMgp-M& z-w420C@Tmi$>k6$omO_!b;9saU4Lnb*ko@z(ATjDwc-S}L{vNw+wB*2XSS|urQvy| zJOjveo?Z-KyE!Zum$iU26&J zoy)Rju&#&kA-PLSrqJhrr}&@T{%tOao>14=&%Z41!(`vzX+hdO5_NQli&#Y`QGc~|49OB9zMLs0s+4G&&rCgH&cwtu zJr)xZbbmZ5Peoev?WB_f)^cW9B*~^wzWke?N`nq@!3}&v?PZx5@(1g4HL)<}Ca-lZ{`*$hX<^QWkKo(>1H$iDf}PqnganC(8e|M2xQ0W zuPR>!3t}|vo*QdL#*7~zJOS98F$f2jYCo2k*Ov*Xp25`0(;2XfaSa=wcBe+b4v~IQ zSgj^`xR@-VpYAhlASD1d5c$+fLGQ$l5i=g^3k7@( z;QVfT_;YB=4@n(=%T!r<9U%iZk>+;Yvlm5(qxmKOI$RiEa_5$l5f&3kbG?!ZQ!ZJR z2BbKWWNQ)B4jF^eAoceXfkFHq?Y(y_e?({;xUh9JUgVUi!kIH>@}i{{XaEBvR7bu) ze58o!Hc_Moh7rK$-qX_*nSEG=5D9#^kU}G1u}=q#;86AqxEdH71;9|xPv-X}6dbeb z?b~e(i5CH&S7mkB@P6BbLpJsLT(x zj|Z*zjew5+;B6iQP&;C*+4;68jpI)bc{Cs?`@iFR zgRi%h|3QE~yxn<;RC_D7DX`_368&2t${Ub#W!j1v8hCixV#C+?`}%--?A@jDc4~fB2hIrbX%a5)ht3);Tyq^vk3H)pcMs{JYiq7}a?#1^eDV>1DhDYpX0_f7hIL{kxu95(^7Tz$Pi5dB{D zB2#%n`);(umx71#AuSQtdOr%b#Y`YyJMmKv6ftgS_ z%Cyt=eoV-BT0vh?dKe7=zo8#;{hP&)n360LbsukzaY$^^DrI*v7NaJ;?RDODYB}oE zP(V^)c%i;ZO0Z{m7u!W^k&4fU6Yk4Rk^o^T;J&5vI*Wt$GYCS~VPIXt4_L57yRGF@ zCQ;*kb`lgsv*T6S&*=boy%{F99_8LQ=l33as?`p1G=CCXPuQ1!g8U=oRUN<{$@dgg zdEuFW7@l1A&KP=a-Ug>NrsGt>9o+0`E7;(Ct$a5O;_>O~0DT zphdw4(3yMCleAei%uM+Z$ssLHVJQl457>V!+lWON7%)|u?nz$sbOWqVG*oUjnQBcu zpAUp+1R}=BDKQ;46%{U)sXQC$Vn9sC*mmc6c(>-BRKLT(F%0gZ-|@Qdht#-uH-SJe zm@6QgP+q=5MMvm@jU@qt$Txe*ItxFN!p%dUk+g{fS6#1k--2wAx1AXxGSVhBs}he` zsgip&)cIh9L5P>8=`jXr?=Bp(MMdJ`UieRux(&w)it8QArjU# z^U;o=#tikFv7}v_MLtyBY5{6X-@8+i_cqg3N16Gps)e^Rjs)GDoo?4Bce9LndXv;N zV5-fOg7rmRd3<=$VU2R3&ps$D7d+hjTdw>|d5j!{G-!M$If{~Vi2EgS_`Z~gAhD&8 zD*f$oAdtbUPsw}nkboNGqTwl7Q!wE!{bm*F`YW?O30TqG-3icgWVRo;z1dl!hkg&< z`&fL5a;W?E+|>y`JcSy8nh9sT`Je+$5DEg(UGU=b=bYcQ*Gy>dFQ9J;`Wg@%|FKy63iQ*6 z?!;dqN|%3#N8rn3e?#zc+v1eDVyG*RpVTw5i0_Zu>w8s7wk0S7HW7edhALpGH@;At zvg0vg86hm z-1h^TFNeC$cQ&cgA&;bjgrw;$`z5)8Ygqmh7Jm8Akx&u)B1@Xrbr2UWv<1ZxkXF5u zUiN2>oSJ6zcWd<pFEcksrQp zwQt-dwZ~G9e!w^3e@`nkhFw?}R-)%qWkkHN=Ufr9joV3qonwzZZN{CER`%7ilAH_I zFg6ocr-X_bS99#yPJ0dSc+~qcDZHYxCBVx#&fP`W#5|m`QlQhe;6)5d#g{0tJ*Ls6UYeH7zyBM^O@Zr zeGK0U#j`}Rb6spPrz{4Wh?rnsd8e*^R4x`iR`5#iDZ=S1Lg`2^wtTm!;sXcqO&GRv z&~aBD8&JFpfR*H`RGLwWf!KCkV}dnEogdeWkJeu*Xlc&`p5(6Q*(jvu0P~pRI{n{) z>|T@A{2A0{eosi?72-8FODS;($*NP#@}l-TcLKzZtvvVF0qL??1VQF6QbV zekYPB9-9){B$`+A8rN2A{*{F&-WV4c`1=|!H)jJ{vD5Hwv>r9G zZl>rPQh-Fz-K@*DnbJGgl)Fp7@m-Q?`N%YIuTB8QSS;_U$Qev=|JtI?eh2Z8$y3GQPAkiV1A-imIbYfqXRyZ zT5CpRaA4|nhIog~_e>yy<3M``Mc1DjE8@*p^ur#FgBC{j!hker&rD%S)Ucx9);6h* zH#_Mci-D1*07uplj&Q!B1hT#4XC*frRL)ey6e=85e<*jT>Jx-Z*f3-KRLb8%(W8S_ zE|X3dJo+ozPVDZXKmDgSmX0CUjKnNR^}lNUS(>1R^6QcnG zW}0z#*zW>$*-GuwB9Jl2kOlvl|G0jNMc_U~hQ(CMhu~5U=Lf z0hD=#ez~$ovx>vYdD-b6ERsA^z1;?uOm66tp}(uoBf(s}SlfJl#*hnR;Vr5jTXUd` z(qeVKuZ&V->!rn$V;nCYfG{)qwxjU_bs&{rrHH$<>DkYf!Sl z%bN%ikrH+#*lYq%$0L~6n&#-S8Jp^|unossX!!tnvVY3I1dZu?LfU3Q9U$3@esJ`t z#q*~xg}cJI?#nyUJTRKpT)c`1%s6K+uHv=a&6agYy@Ib9rtf94>SmUyrT;wVuF4V! z;%@ZK4@73vMhghi_(-9uO6-%A`UurN>}|bP3{f?$s!CSTsViR{4ouREt+W<+74kEE zG;*2dYPD;QSCg%Ev~e*btR24mQ)_fGI|!`&EV8Pu`s(`uZch^g!7q67D*Nu~w9@jy39P4Rl{vySCp@sW+ z=eEWE;$2DXe!%SsavLvURa~Nz8JAw{afUEps>yhR;9$4f~Yib z0(&4>E~P*7c3Ar_jqm>j3?udPn@zT>(yQXB!;>5L^Emg-sp@&yJs1k0wy7*Cp@;N~ z{_ki+{ouJtzqHUDd;joT%--U*%~|{6EdvZW2)Sj(T*8U3^{tuLW9ztXWIPL5x~(q3;#Y={64?%f1^6uwBI~k0-qRzn=UWIZ}#_Z(u?3)0o1wA zh2lk6lJ197VE|HE&)zq-Yma|8k+|L3m(K;pC#O&j1#kK=Gl#)d;Y_AUT!+xQ72eWP7G9 z8HuIKrL#R{;9hQD)CIiTQpkV*hwBH2et;BNG&u;lr4`I=6jB$1z*OUI|1NHWo ze~)C(^q-2*?JxiS@&Ear{@uR*FGEt2asFTE!hbL8|10+BzvIIHY{CB@E^tA5?Ku1z z0MCuXfv1PO{?FISKTk#Jd>D=y4pj`kxm<={9>lA3UN)*+HpZt~(cWT3PsNW}_5%j? zTEezlST9Z_`L&cUCerpUFK>aFm*SBBATc|ZPHGl!8EHF6eh_4Q!$GuJye zmvt+9|M?eVtBQ?<&5aw3TKVFIBcrNz-Xo&}M@wzARav(9o$VFndaoCl>oqJ}P$S`63XXT0m3NvDfZ855GRC z1-F9;I{N=&0Mg!P^fdh1_wUy1s>%&|Y|8Y7X=Wv+|Hf81bVFfzHe}Dccph_Hq0;4Z za;T<=8VkSnK5Btq?Iv9)PbH&)VZBBaXuVd)FB6vl0IVK;+5+!Fugk#Oq~2^W+;+na z0_OSRs~xBOTRxbj_6@*Yy)0L#ApTQVcWriJ#+t&jwC}9x1P!mcHe{x?CPp0gX{E zB|OC^p_ddabb}jGH8*48V}hF8M+tS^7?08S|UW{ZA$MYRlyB zYbWC{36HtM1%B}LVRj2q>Jd4?%0pEJ63`2U`B^OcPfOHCf96!>TsNKK3hi$I^x0qA zfh(_nJ`ykw>UdY$e^t9Rp#iF3M-$mVRP>`8;UR@3RO-krLU+U-KwpY5i0e_Aa}sQN zHE-RL9@lSqpnhjzj?SNv%`IKK>y9!Vv+I`27gObx+a-|gT6h>!!1%|VZzS07ZXtj3 zlE-tpC7lyRlzdoWK#RLwsv8L3G5?Vt)vq7A^>i}ir#{pTlJ%sq>dUQj(6yLxcoG+m zm78@zbnfPzKkstO40OMp50*R%)4ur0!rroKEMry(RAv;f{^~C)9>UTVMmKO@uUzLZ zW7caxZXxeyN!!W$J6l{jl|T)Fp6TvaUDEW(vmop@$j8ozLC60Y>pWWz+iH z?VP=91-O-M>I%uecMeytM)UC_DlRevB!@#80TS z@BS6g`E&@(!tUE1%d504Gu_xx%=D88jgn_LTIB3AkHP7DiofsXcP#F@~wd;N!wGdwRQ_kb&R2k5)CR_(yXFjp&l+j_sfsgN&{ z#nYEXll=G=f5~Jk6#ckyd-#2t$1dwx>%gg;FQq}_h|6&_>v73$>eV(dKvai1N;n4Y zd}9QB_Hx?Jx`<+moh)`SsjmM7pRXf z$zYOWudZuYfF1f3R#LTK50S&8&54!abigm|4?MB9A^E7d2Xs64eGZ+hf|_A01uDop zd9O7mpe}d#&yaK&MR7HxAJ(uaM_XY0yXps1jJNURpD?3tyKb0*8`j`VunMDvicL!vlE7&A6+wd`>r@5cUWzKW~$3KgQGB7`?FhnOF(&?nu8Uelxt`3{AiTGEOI*tLxUrufZt$bi| z2%C>M;f|sfx)v-i^(usHDqR4dqdl(fS+N^y1USUv1|=EiFtGHy%6Xk{>L zKfgCVcATUvfgiY=#QLtb3d;y*Evr%=@|^HBQZGB%ze)m^Hov_LeER!qI>XkOu5Bwl zW4OSqEDH@p-s$Vzd%}%eS=7(v`2oSC3VsFXF@BQWMhsz%?`dXGDA4l%jwtxh3=th# z1Z58Df#(~!X$>Bg75YKGkq$wLT4x8 zyE;_#oFTSUWCfaSJ!8&jgfr8VNTvOUg4ZRQ-3h<>=eDTy9nwV}Rti9dF*7mk-xEgU zGGlG8;r|f%CeHTb*7!rm%?idrosAA4V#c2h!#k+V{|%6Be)rGzSOWyNKgvcKmaS_Y z;(~IEw;XLWI<}ZCdv3?^W>;HQ2 zZ{)cI&<$vqXMj4Z_YPaW64kCwJ}`8I4%ULePdKrEn6op2aLhltYpKezKcIMY(tb_! z8xTK5qH+?Ir)_E@$anM0D?!`g+$I?6%-KP7ABhKi}C&%1Qod+xlk? z3aR!yEwrYT;PR~&3vwSy75<{w?%@!Z`ol9d)5}6YG-=?gMO1JB)+qidt9Lb-pdXCk z0&?^z?f%a9Zlmut|7}0AAbC}S-)lr>n)hwzd@5*d$ttwPmu# zJ+J(@gW{|m@Rc@{e1ZyDCwM!4Vt3{a#`-u0q7Xtq*( z&Naj9+?Y=8?7=ZaQrP#ZFm!3@{XrV#eMWRIA?ugVV;+J?@C9h#kCi=C4M{| zfAet8n-UaFu~N2eseQ@}_f;InwRd@3!|+He66Z&xxPh2L@CBmxr;46|wn|Xn+p_|3 zJF{aZ0#nO>7TlK)rt8RTwo9IBdqpWHjam_}CHT+EVSG@xn+qaCTP>Ng!!FUFzXJQu z$Jjq)4BYNV=$T#<%NKQ#-{-iGIVigL!G#Scod0u1@y4*vT@DQ!%*z@d-~tk1XV9V0UGmNv5c1yVwxe9MtsHSo@-06Dy{ z3svaxlii_TwjUii3}`ID!FWBu-z!?avUxnRSt)idB|L|Mutm@*XDN>tJ15+(UUXu9 zr4jOTiWnu`)3k~CX{qPPu3PXjv!%_AL`mqr--!GQA3GKTJT?|Hmfrodg$BSeu+BMR z*5D?coL|FdX!zq19$o`~7YvQGm4^ewm;`}xJe3i0TT~0)J1skWL!kE?h z7uIZ?Pp~-jfBheAeP=XWQTwklx-f_qb(A1F(R&Gkj2bOk5JU7R$zTRUl<2*U76j3Q zh!Q;v5j|R>_aVB7L2^&>-nH)k-uKRj^J&&u`|Pv#bDsS?zhc97(e!l-aA<;j*!nCR z6HF_9zB2?EXpBgZz}A=t-308FssRrM*4vwb0ML!9V-kWXbtktnCpfyA^-N`MdrTGc z=(NoIet+Tnjn!8Vh}@=e%m_f2#oLK^15+qwi>`0d)G7>@dqWvpT>f?Ck%se&0q8AS zUJBN`&|HqhcM9q&T&$~y&!Bq*;=2Cc0!|}%+C$>nZ3Gcqun2ye@Tb;Hpb^6aLvD%V zHQTrlUKn6Jq0io*OW5~#rO?}yDbRnlQ9NmaXy`5#nq9$^l#wd&nAxW z3VasDkMqylVL@08AdA4gN?eJkZ1qu}8PbuBbBg?FNjJ2>3l%)9R;)BQ`|9pV1d&7+ zzN69>Upiw}skD{x#Hfsl0FiMHaiY5L%kfIqm)&P0J#y+B_2O~$c7ioE^OLv?WZF5H zNy7~!4y*b~6w}g31KcIa1@|x{Pjg#ac?XCxipV!oFp-BodF-lPPCvc?D33go`wzE8 zanAr)r?A=w@#@-a3rFlrF;59cnO}Q;x7x-uwLa^syF@F^ojoZTG zN_EgQH5?(mah>1Y4f-6b{yccnm2&lN)DnJugF3#+{LQ*la`7tGe6($$DgXZZXHK1l zjNwDpsDz?X&sU1al`C;cHiQW@FtQ?u5~n0TQh|NKrHxH9a)A0o{5z|pJ0j06e=-V9 zo51u;D_2pw{qnQ8hXhcSs>0{Snld8p=tL*Hm5m(6dmkRw)Uo5(8khH21u%(rCgg() zufN35V`h1Q=sfGD#=#cbl>jY?{UH|UJUvar8X#|D56QZR7Z*SUvYwE=|4a@O7y40B zWPU>j37~1l8upYWV)Fd4YI(a_y|f@4_c*rl^V40a1aj-W_cwCE**-zIb=A(hQObK@}OTDWRn{qzD zMR)Vd{Rq3a!w4th*Z1b{U`YEWlmRSG!0L?_t!<+Yr6tP(09KFS6A`;TO;Iozv(--Z zwKiL*S6+;Gx>jlySS=z&ZF7wBd0%P+o|S3tohdgd zXmz^aYh;xVEsfkC-<(~nS{kjybO zblf|S?g;^ixPVTMC2>znY#Ck3OvNkNXq4-Cs5IaskzGfiWF)W%=mJ>I^lyZMc+dMgR1jP})WQEsQ#n#TCq)Y-@M(I?DF~j#;Wh zHA>oZM}hLmMQ;XVJ5E_9=07&s$FjPW)ymBP0VeOQ2f=-XqYE3N8QCkS1kds!Q9ztW ziHY2?dk3N9Ub~)GGq_zHDSQyLeg@(O@jxG<- zyU-gWiBa#OPOe5xyem>&D4eK4(K$!O`C#s_I~7OpHU5&lP^pAL-pSU?0_G{F%d zhD|z_&jz$zT-06PrKo=A)VdAEsdjA2JgUBN%rIp^*gvdjEjXVP2rLm$FkUy`pYAu& z9Y<`*4mZeAXB9`AWqS=RM;^mFIC)J_cSM>h<=5R!3uyBmw`3LHSVudu7;zddPrLTH zb9KO3*hS{`ZV8YmEz?cVKsmTw-a+0|LnIr|#?Bfj=G$Y3$M$LZv-5!+pT&L3NQ=U7 z2()WDA40xxM>L2pk3L%3WE%H+;5@8Wkj>~9&D8&)v2l;~=cv3>@h|!|ztfjol0sa> zU!i1cY!*&&%Ff@EMmX0-y#pVhjw{;~DM^U>UrevHKqSFbX`%!Xkk^!KHW@0V(K`%v zSdGIV#(){n1=MnT#%HYLNKu1En@N^`sFz>TVXkRbY8wWSM_kYZWy+))ioWvV`w8#n zEtmHm>J;SBoXL=VHQ=~KqQH+y=#u4x%j%$C@EONFS%$|#4l1RAw!mHILf<*jZe<&Y zeUT%xPD#0{3hin(d-V*NP0LO926~ibtL}2|QF>?7zFgZXiezR6wYZ`AjjiNw2VDuH zrI6g+Vou#wHopuM5cC`D>hDXI^O1BXbi#HXj*PQ;}0qCbrm%~*wp7r8>{qrHcplQ@dz^w=y$KtrkMm?r18?|XLF9(HnD zBGW5ku8>^fVEiY(`?H3=8cOQQd#DzdxC>pmhs7eBG^~JgH`I>vPYDD!XtBfCfr1Mw8k`QIx`U>iWZ`8J64ZiF$Jo>E5fB3iE(ni&bNomsZZPj3QSerIRH+Z z-$>EPT*10MqEZ6}xx-?fo8+DJ1cs>*0=9~ynvtzP-f|%JIy#*)oHN&391HAd;ia|>mrf6Iq*gE1 zrP@N~Ukk~12QF+BSo2GSr*=m_!@hRM$5-7EPfL4_dYZTOL7dQHkUG+lF}oX2JR{93 zVkMa|oPQfSMx}$-dEPZED)(+^sx$3QnauUxi=y*e_1mmY@Rs+ngAS%&Pwoy<5^E{R zKEj$`R-%%}NpOLF&%Qp)iznfG#oZ$-rt0IVKM`6lp22EFyl7n|79$+-Fa02O(@)Y` z5<@{GqB&^asO%Y2ydnyqQLDU*{u!88hp%(OOM1HF^IjF+(LjWf#HIQs=%|3Oqe+56 zfD>vibhD&Elz=xtlLaKQM{^nFWQV&!ImW@t6ebeHZBh4G57eW8vn?-bYCb~UdV5LZkaURF7j zl8Bs+zgXkpg{2n{$yBB+v#*FPN|LN~3Ve2BoOmkAp{nE-R3%=ok8cqROE8du{Q z^K<8fCb)7qJNvM6-2?e$KQ-`OBd|us>^41YA>7ijzckA3J6kkw5+m$wShRDU8!jZm zn@~*tDG?#eJ@{neSd5hM)+rn!StT%<6|{ziOh=wgIQ2hxjNGQip%CTWSU63f@%476 zWnn(vB7&>m$3wqaPw_y`r?|7>ZqzGzjHth{7Iwp{?_&w`iG|>Ca>$UL986&Poy3K> z<)tLBY%~bP=Mxyrm~M_l6i54PHYO%Nkwqiz!G!(U;XOy$$;>DioUBg3PMz7rui>|k z(6}!pjiXX{$7Zyy_S6l2GIFM!F8o13#@XOhd+A?5C^03O8+o!IS231|zPF>r?X+s- zho(%({i*rR*KCjyv2pA1uYvbjeGHHOeNZAoUwRfdpJ;pd zZgH@MccIr(wb4bTP4$nwRN*Li3TIq!OfuE$k0|+W0~%EZ!U(B1C{mhu_B%kv)lIM{PE?T>@ZU~vg{(eFBIoQ=O_Xsh{ekjOLq+&roMJu3{1xe zQlX5`)MbaeMDED+JRg)_7TjpH|NdP$ZP**vU15B3`%li-tCdGb@#`{Nf8J(@)>BL; z;`BaqtewbyN^<;D95F1G*+^5A735kb^*ElD+$p2|ORWY#0o|6=%s{^H)|eX2k$)f& zeo)HsMY1nO@$`okr_yj@`yxG;7_y{;-G77sO40TH*P=@drJK4<s7lsg>^mmWkii+~tAf1ELxW9Pww`uERRVXP7c%&tGqI6r8 zS|1h~^0p1zX0jZNH@Q2$baRi%^Fx8bR}*do{xh<@P)YBR9UzOjkCgS9q5+sUzt_eT zoD-+)L;l*f_PtVFBqJIbnI%3%w-Z?ew9K*gQLq&46IiLmnQ#Uy5!DSn@s(p908Spg zo+`P*Nk`Uok;AIQoML<1Tme@W=T@YJa}SjxkhInL)x}r zcF6cK9sFXU(-X z0c1)YZ`Y1F`)9|GZ)C6dJAe{lr!C7Sxs8*8-N#BdVfUP~PJ%IDvtYfBN!MiNX%t7s zOcd^=9q*Dxa1uaMYmIMxmWHl_plZ72=YT&KPY2LD4ra;=WItw)rXHqfO<2mC8Nc|k z+4#Pm1NVgtI2w9V`o=&d-oWlVvkLn07AeHZ?EIp9)GYwz_Je0;pso`mu|8#Sg7)k0zLA*&6N5&$9Wy_c>#2zZglRMCA2)D9&` zPQ#b#tth(VVIaRDhuCD}J*nLE_Z%9|+itb;WI0K+sAnBk?#FSh9SFpoV;; z*4U7aS3a>86u7ZB;jLTpxgv?cN3A1jc?6yAg`tF2z~Y&M1{lRdxa#M0(1Cff{wZ>X zgf<|S5UtDjHT|~-scu)KC6Q7PReHavrY8w*94PlHz4R&pgjkya`prsKq6L>E+NG}M zOVE$o(=46)KytLU{FR@@u0MK|#qJz@I0J@HE2ltOxsfFot<=$)u7kG#s~6KZ0itB; zDI$da@@d1-OAkaT`l{)F3nGS^?>;}1S%|;@4TCphqqv>MaNCRV`Tj`a;4SqCFcK8sIKL?9m zBahK+jMy(qq9`klnGP~07d5(5@i`O}Uqin9#l;&&?0Vxy4=XJ1hz9s2QpenZQYb7<~qYj*xPad(s3>Dy;J zLHIYXhdahQIbGCOzroK~7uc>xm}&b2HI}~|J#P)OY50~y$8lED2btA&9=mXlRJ|9< zSIveF*Y^dDC8-FR=9#INI#6Xo*Cv?T}r-S^DrXKn5vO+LS7IDNL2!U1Vmk z)?@h`HC3sUJR8)Z`w)8lxK zfD9lyCfAzIeB$4PO>h7Ne8H+m%G`PGYyx^n3}wk{3)MsY5b133D7d{Rx%!t_%h15M z=qS)RGoid*2;BzF%(3~cKmffz7|EQiwuP%%?6*;b?OmrA$nmlv^sM>v?=uVV6)ezQ zJ!%jrCcbWqV25`6w&K8+icE*$%G>-O@C9nweR#8o)hYXMQ2SeFVZmU@rS{-BskV{F ziR@@DC#|`2!quSWat}V*QYPg8aBKcxAo}Mng?!*?$kbL3VEH12uk2`bgQ4uRj}$b{ zF;PAq(rxkW;p&uF-%U109^u_+e6dM474tSd;`Ao zI|`V|*G?G4H6*X(smg%j!TGb*v-FmVkkeSUR@wdkL`PtqI}-2a9?_?fOXrC>s{D|C zXM$2)C(IifF;i%W0QzJBIJ>&uMKT^D{5^acKW*4kjhY6MXhMHT!h?a4u|e!T6*A=Z z{#1--*>kyLR)lL3OECUx_Yz&`%^Fv|Pqf+H(nAGGrq4Z$-rK8(TKzb#u>KwP| zJc`%A`lQr9B%bFCXN50L!hqeM%zVt{UfdoZTR*kbLD5gwHTh&8wx_5uqq*+rp(mPA z+Au4*J1BLOzNLOALa{ER#N>@zAL2<)+o0WWYUi=|b0xh|46MK^dk^bC+TqEW9C?Up^YN13BLQq*F(l6u82{kR$iwo zcSUOYGn2&eM8i%BKowkz0IqP4SkMp#CFV;+l^rrsmk^+Ocj;IOd+cA#OxVZcZvpk3 zj=Q9+1|u;zpSK`v+6!zy#I$43g;SV(1htkQ@M&r$VjMca{DZ*=!@5a6LS2@*BI%q) zsWsA7_CQ>HXd_D^so0w-UgZT8aT;$!t8fRqVX1H%JIJq)KeYWdm4yMHaM_~jD7jgF zZe#VuGpg?<1wfysgyBBafA*uQBHSao{wI5RK);XI-%8|O&jzRDws2tT2+XVfSrjX* zd`C%s%8T2(T<)_DNIoxbp58l-PqOi)NU6cq*W2pNK{qs6+S!wL-SJtvHpdFk_|p0a zxgB>hmi4n3@j^qHfR{CA#jhah4&Sze!w7d zfc!(!g2Yywppn7ZWSI^LKI4++;{HV~3rYh1F7}EUF~X--Hx*(j7~<%8CEJKohi{U6 zt7X05f)4W`RC?ov@$kc*T@bS#F=vbS&Mytu*`h5rcDGLu%78&pd8Ry9_^*bj;mg6y!qvJ-KS!<_JL)A!5LI}Z zjz>1=P{Zw9%6yHP1ZI`}Y$Hf;&9GiN8FDoVD6$9@drft37LA^U$yL_wcsLRNnYQ~8 zzpWiuIvDpyjpNau>EA#F^fdLt3z;=}T-G*wXE%$=+rV0t7Nh6*VB813XtyKCY@g5f zK7Fy33$6?bJ?-1F&g{R^S%yx{*lk!kW=BojKCt1kJAoo55;YfM-dSft5yNu38kTcT zNm{lYf-3$Qwu{(eJL7{>ipPW-J96-+1r>NTxUOwe z*Z?QjH73|z{aW2u?`$x^<8`9&+O=+b@7p%#LVVqYBi=%QtYdl}ew=6&ImMSGpA^~0 zabk|8H<+1HQ)pHwB{y#hm8EI$QNPMMaa=XCpq%Hn8+}IHw7_$}ppWziEl-aQ*n(-t zu|G6yZCOGSi&4{dno_=-xyK}@J~$?ZnJ==P?|Gb_C;|AFQi^STZ5YxB+-_)hi@ixs zGXc+xi5rq`qkV`FrC?@!M(p_C7+)E`egQHQX|G~oscWM{+v>wOB|d; zuC-$%pWF}!4p>DcBdEy( z8|PgZUP_~AuA&M@(Wr$<5MAT^su7gg;;*`9@89#7Ho#Tpqsqsc0eJ-rmYe-KzlImz zG4EA%u^Dv=ewZ}q?>%#@P_Hi#xi!fq750diidZPZm-8Tu(JHJAp`H0qh))UV9%X!ct_ zE~Y*HXb;KLt#%JXiOjl-d$rU{a(7@mUU77ZM(2@1i-_U+B+!jf%RiFZpMG^WnsF_* zPGW!a#-CJVc8veVne^{WoJH!i(qXcPb#}pYz`ZM-lRIa2v?qpEJ&ZTv1h2bEG+EzP z2D0A4eX`Pi3%J&u+9FkF1GTz-c|zS3*wkyYJ5QVKh5coy_G754W^POVrjXWI7R(1u zRx|(_L#*smLI2nmXr{mKx%4ZMfNI)X?%p@vApnNAdvyCks<~2y>bmx^+{~Qk#oOXm z+NFgC+u5Ee;grD3N4y?JqFi1Vv_Ak4&XBpe>$cPD-+q}vm>BES5vd=8QYTYa=^|&) zCC(eC4NXOVrnK`)`LL?%Wghc7OP4} zYgipdM@rVO9p!c7)D@R1;lzrbIQ+(drny$?!OMxbsi=MLBErZif^w7cHlt&Vko_1x z?4s{}4P2OvB=<4fW20<89nLnmTxn6l?ccIwglA23y#iM zFk|z6 z7D;E}Mn@7UTxm}|ceky3=xeQHkaT$7&eP{ySSNR|il5RW8E&{L;&erbr>hm`NQ#RB#|w8Sydnl^NArf?kG&A>T2H_(txB$ZmEZ4IS##=T^CoLZzk^d1J?9ufqZUe z!zGQsKWz!1Z*_yo6|I$?*z&SOtoFFQBV(FrtM#-WuI0?BmMnYRU{Uw;EY@Uy-aD>wWwPhV(xx(_#kHTp_?Dq76Bx# z3S4L_A`vcPTodSvm2+&e{%ObI+PoyZtUuPo-AK1mIGQH7yjobT_I0JWucm7JN5dAk zR6$c~rsMX_R~;)(gM>%iSw2tIIs1y<`cq^-&TP*(Xxjy(3(sDabCeldsks2!LFJr7 z7KdK4<7m@b_Yb$DpRabyg3!hZw~aMyV2JuD4wMppRXfoHRH&ktR<;Nr@`m6rC&foUSuUyV+Af(_>CDLmCS-0h(x*SFuChx;HhcGweZ&(lbniN8A*Q!1ku6ZH z{{|pJavfJEabDFDS8?P&8bb-v+gui@?@x9jcyQ;VH|DQe3jI=D4B@=)lWU?}B{2(7aZfK9qRsVgrPI9ai%pV@qB2 zML)u)cLklF!AGkh8KcV8-GRq;?L?Jou^C0$kKzu$ok}RR_FG@`;yIiGyLIr0p zWCHrNmt*|IWkCMu;V#9Lk*4~ZOYjl~y|sSF&Q{NRNl{(Byz}^U`~z}2`pofxYgq?6 zUC^tH7_3O6S-1o?$&{)ybKWS>Jk9=T9x+_kEgj@sAlnjK2h=NYmfqrzeEXMV$(Mf} zH?&t`v^#eh;e+4M(u^OSrLd(*02MH2!<=XiI8aR`jzR}4xQCh-sp#G4@V6ppl>o7> zR^a>dBw@_s^oNLr0<;8^Szg?A@N~wj48OI4c$+Ud2{hd#PHvg`{APU;rzk0^cR z8?`@MYoPP@>|ThR-Eb}R#1>Ne%ak>lTWwU5cA9cK3ZijeSRo2FLcC0%+#PnWS>^g3%Q1O*5&GvXT1(94Vecxmv_)V4rG z@mnRn!@dFUK)2F*rrO+f;Y2R1?Q+nrV+Tb+{KM z{yHgS-*RRno-;{wLS3nnblt=Z6$CWT);AQ4G6E_d@!}b8={kQX6T0|NHUeQ?7ZiTo z^L(cfUjTy8A@jJ0DW6dW!OlDN;}Mpw z`Gd7)6L~K}juy53t%vq61cnUN@p9rpjCt%o%T>@33exMVQ zs0KMdP^oc#RJHRy2#Tgut8Lt$tJ9*2u<*94J7|z7(V*lH{}rbSrugjZUU>i^UoS=; z>->huPN^x^RF<_XMa2P7wrQ&DhJYGLp4_bwU*J3k=tMN69lNW+dry1 zXtS7F0@JS=&wy44ekk%~Jy%g{KXov>fZ(@V@!*+x?M$(Saemxw$)qFEA(#PE9Dn-? z?R&{-XQdh5`Z?+stNOi#bit4r8*bD|i8+bK`0b6im4IhmVrNBXaBxQE?lJk}Vkm&! zlTde#C^THuM-Po9;#Qv}F=MN5{43yZf&LY${td7uAex#ezl>&#JkGaAHR(<$L-eHx z!#!G3`Y6%v2OExA3tO+DW?#? z7niII{K*H^gEKnu*qB#xU{l?aJb)WsMG(DzhD?gO<)DnyOZiKY+IEN4z~id38Yf~2 z&f4noZz=o=C14cylLUBy>3U4oc;vt7^F{s7NlYSz5M4RGwDfK@0}UK=9n*)9f1sfw z@Kp;2`0$_JDAN_tFtms;G2Hwtsn+a9Hm~7aVyziga<+|8mC|x&dKXQlBCTrt*nRG-AF3{51MQqqNdHgh;Dey=zs)4L%aqf2IYvK3ieX$yHtyIBSL)9^J>2)|Q$no3 z{V}e@pqMVZ1!L_UYZJZ;Tn#jR*qhB~xm9t!bRVK+{oGEKWeo8S`$Sn z%ox0#^x|r)G@XA^0(xVR^6X*a5y!K?Ut%=f-|K%^l^^CI9~ijFp8|vwa9F*)nPI^s zlLPdLDHr!@8|NZo2lTy$x67dGM_Vva9|2$*FqGPl=>Aw}BiHfSq)y1&068(Uth8ie zhyOm<*nG7O*lQ7S2UxVkr#b8oKm^J^H8T*$;=rpJ-CAKz3f|ZegkS8+d8C`E+&9^^ z8KkW5Fk#P6R~gqX{vc}L^eT9=S!yX&XEPDUrQaV?{r#_u8T9|qPS>7Bg_`K|i*bZc zI`XQ$3$;y30AY4OAw&}d@DSexSht4`N>}lhP!=N(MReZNq_Qhtr4rI-T}w%X>0nYh z8izvSqoJfoj5%8)M3dZSw1H-)QDeD=@<}9XlC5R_;K{_($}Gh))9>245$;KeLHQ3u z`Uo8~T7i4AN)R$Hw}3?^E?LGocp{8Q(}6u6-JbR`gy|nI`+ttoDm2s>@6LxjqVj?0 zLh0^zbo9rJ?XR@CFZOG@lxs~&*arz+ISm;@74CCk&XqLro&mS^>U&;B-`5SV=H|PZ z_A<`Uth)AqW~0^YTM;`1(n#XU>2+PkzF)RK;YLj(`r`J6o9MG%rO}v4jcAOD|B2n-+2(=eb>`BHPCnM?50-C3FLx56Lj^C*+lfkz4o<6JTdSb_OGTCC`+NP*0`L)5 z6%!D-8J*u>d0VogFVx;ByKFDB~*^GHnhXi)W#$D;8shd@rj}KAo1$?CY-*q>nG({W7rS2W z3P`8=KIIsyt3nfwlCbF9OUqQ>FrWI0^(?#DZ@7r%5|$@{A^z@Sa_OdGDJXR2a;2JbSG> zF{AtzA^S$fY?$%M@+~lf-ha(_b*Rd2GvnSOg+5GeH=VY-nG?hr2C&}B z4qZzA837qcEz`Kw-^OysW|=mQo3?C(eRpci-XBXQ2_$-m(Je}!;fQcWVXgI4#6 zkoQMpu3rhm`*u_n{^b&Sk2aDTqlR+Y-Et7F)byH>GiFyvOy{5L13gLCg#UU6x71yJ zdAvH&a%n_!96cp7))ZQgx_5Nr(&6=g{gn%R3kf!@+j-7T+n#{$@%htDUkINBm>Cl- z_1{m83W*&%ToS#SMlJg@%mTE4qg)mwcW)){i^!(``nNE5EjpTcAVh7RPf8@x3H{M{ zwTWAW^VM>X@UQqdjn%^c8jJj|7SscP)AO@+w`O-~;)6Y^OWnabdev-protocol-gateway dev-protocol-devops dev-protocol-shardingtask + jpa/dev-protocol-jpa-shard2 + jpa/dev-protocol-jpa-shard1 + jpa/dev-protocol-jpa-auditing1 + jpa/dev-protocol-jpa-auditing2 + jpa/dev-protocol-jpa-auditing3 + jpa/dev-protocol-jpa-entity-callback