From 687a9d25cc8f011da20951e914e8747bae94ca81 Mon Sep 17 00:00:00 2001 From: sts Date: Thu, 29 Aug 2024 16:17:26 +0800 Subject: [PATCH 1/8] Add article 20240828-riscv-plic-spec --- articles/20240828-riscv-plic-spec.md | 417 ++++++++++++++++++ .../images/riscv_plic_spec/interrupt_flow.jpg | Bin 0 -> 46402 bytes articles/images/riscv_plic_spec/plic.jpg | Bin 0 -> 74623 bytes .../plic_operation_parameter.jpg | Bin 0 -> 176999 bytes 4 files changed, 417 insertions(+) create mode 100644 articles/20240828-riscv-plic-spec.md create mode 100644 articles/images/riscv_plic_spec/interrupt_flow.jpg create mode 100644 articles/images/riscv_plic_spec/plic.jpg create mode 100644 articles/images/riscv_plic_spec/plic_operation_parameter.jpg diff --git a/articles/20240828-riscv-plic-spec.md b/articles/20240828-riscv-plic-spec.md new file mode 100644 index 0000000..86f40b5 --- /dev/null +++ b/articles/20240828-riscv-plic-spec.md @@ -0,0 +1,417 @@ +> Title: [RISC-V Platform-Level Interrupt Controller Specification](https://github.com/riscv/riscv-plic-spec/blob/master/riscv-plic.adoc)
+> Author: Abner Chang@**March 12, 2023**
+> Translator: Sunts
+> Date: 2024/08/28
+> Revisor: Falcon
+> Project: [RISC-V Linux 内核剖析](https://gitee.com/tinylab/riscv-linux)
+> Sponsor: PLCT Lab, ISCAS + +# RISC-V 平台级中断控制器规范 + +目录 + +[1. 中断目标和核心上下文](#jump1) + +[2. 中断网关](#jump2) + +[3. 中断通知](#jump3) + +[3. 中断标识符](#jump4) + +[4. 中断流](#jump5) + +[5. RISCV PLIC 运行参数](#jump6) + +## 前言 +PLIC(Platform-Level Interrupt Controller) 平台级中断控制器主要用于 RISCV 架构下外部中断的控制和处理。PLIC 将各种设备中断复用到 Hart 上下文的外部中断线上,并通过硬件支持中断优先级。PLIC 支持最多 1023 个中断( 0 被保留)和 15872 个上下文,但实际的中断和上下文数量取决于 PLIC 的实现。 + + +## 中断目标和 HART 上下文 + +>We use the term hart to unambiguously and concisely describe a hardware thread as opposed to software-managed thread contexts. + +hart 用于描述硬件线程,与软件管理的线程上下文相对。 + +>Interrupt targets are usually hart contexts, where a hart context is a given privilege mode on a given hart (though there are other possible interrupt targets, such as DMA engines). For example, in an 4-core system with 2-way SMT, you have 8 harts and probably at least two privilege modes per hart: machine mode and supervisor mode (Ref). +Not all hart contexts need be interrupt targets, in particular, if a processor core does not support delegating external interrupts to lower-privilege modes, then the lower-privilege hart contexts will not be interrupt targets. Interrupt notifications generated by the PLIC appear in the meip/seip bits of the mip/sip registers for M/S modes respectively. + +中断目标通常是 hart 上下文(中断目标还可以是 DMA 引擎等不在本文考虑内),其中 hart 上下文是在给定 hart 上的给定特权模式。例如,在一个 4 核 8 线程计算机中,你有 8 个 hart,每个 hart 可能至少有两种特权模式:机器模式和特权级模式。并非所有 hart 上下文都需要成为中断目标,特别是如果处理器核心不支持将外部中断委托给较低特权模式,则较低特权的 hart 上下文将不会成为中断目标。由 PLIC 生成的中断通知将出现在 M/S 模式的 mip/sip 寄存器的 meip/seip 位中。 + +>Note: Previous versions of this specification indicated that the PLIC supports U-mode interrupts. This text was removed because the privileged architecture does not define U-mode interrupts. If a future privileged architecture specifies U-mode interrupts, this PLIC specification can be straightforwardly extended to support them. + +注:规范目前移除了用户模式中断,因为特权架构并未定义用户模式中断。如果未来的特权架构规定了用户模式中断,那么 PLIC 规范可以很直接地进行扩展以支持这些中断。 + +>The notification only appear in lower-privilege xip registers if external interrupts have been delegated to the lower-privilege modes. +Each processor core must define a policy on how simultaneous active interrupts are taken by multiple hart contexts on the core. For the simple case of a single stack of hart contexts, one for each supported privileged mode, interrupts for higher-privilege contexts can preempt execution of interrupt handlers for lower-privilege contexts. A multithreaded processor core could run multiple independent interrupt handlers on different hart contexts at the same time. A processor core could also provide hart contexts that are only used for interrupt handling to reduce interrupt service latency, and these might preempt interrupt handlers for other harts on the same core. + +如果外部中断已经被委派给较低特权模式,那么这些中断的通知只会出现在较低特权的扩展中断寄存器 (XIP) 中。每个处理器核心都必须定义一个策略,说明如何处理核心上多个 hart 上下文同时发生的活动中断。对于简单的单个 hart 上下文堆栈的情况,即为每种支持的特权模式提供一个 hart 上下文,在这种情况下,较高特权模式下的中断可以抢占较低特权模式下中断处理程序的执行。一个多线程的处理器核心可以在不同的 hart 上下文上同时运行多个独立的中断处理程序。处理器核心还可以提供专门用于中断处理的 hart 上下文以降低中断服务延迟,并且这些上下文可能抢占同一核心上其他 hart 的中断处理程序。 + +>The PLIC treats each interrupt target independently and does not take into account any interrupt prioritization scheme used by a component that contains multiple interrupt targets. As a result, the PLIC provides no concept of interrupt preemption or nesting so this must be handled by the cores hosting multiple interrupt target contexts. + +PLIC 独立处理每个中断目标,不会考虑包含多个中断目标的组件所使用的任何中断优先级方案。因此,PLIC 不提供中断抢占或嵌套的概念,因此必须由托管多个中断目标上下文的内核来处理。 + +下图为RISCV PLIC 中断架构图 + +![RISC-V PLIC 中断架构图](images/riscv_plic_spec/plic.jpg) + + + +## 中断网关 + +>The interrupt gateways are responsible for converting global interrupt signals into a common interrupt request format, and for controlling the flow of interrupt requests to the PLIC core. At most one interrupt request per interrupt source can be pending in the PLIC core at any time, indicated by setting the source’s IP bit. The gateway only forwards a new interrupt request to the PLIC core after receiving notification that the interrupt handler servicing the previous interrupt request from the same source has completed. + +中断网关负责将全局中断信号转换为通用的中断请求格式,并控制流向 PLIC 内核的中断请求。在任何时候,PLIC 内核中的每个中断源最多只能有一个中断请求待处理,通过设置中断源的 IP(Interrupt Pending) 位来显示。网关只有在收到来自同一中断源的上一个中断请求的中断处理程序处理完毕的通知后,才会向 PLIC 内核转发新的中断请求。 + +>If the global interrupt source uses level-sensitive interrupts, the gateway will convert the first assertion of the interrupt level into an interrupt request, but thereafter the gateway will not forward an additional interrupt request until it receives an interrupt completion message. On receiving an interrupt completion message, if the interrupt is level-triggered and the interrupt is still asserted, a new interrupt request will be forwarded to the PLIC core. The gateway does not have the facility to retract an interrupt request once forwarded to the PLIC core. If a level-sensitive interrupt source deasserts the interrupt after the PLIC core accepts the request and before the interrupt is serviced, the interrupt request remains present in the IP bit of the PLIC core and will be serviced by a handler, which will then have to determine that the interrupt device no longer requires service. + +如果全局中断源的中断为水平触发,中断网关会将首次中断电平的激活转换为一个中断请求;但之后,网关不会转发额外的中断请求,直到它接收到一个中断完成消息。在接收到中断完成消息后,如果该中断是水平触发并且中断仍然处于激活状态,则一个新的中断请求会被转发到 PLIC 核心。网关不具备一旦转发至 PLIC 核心后撤销中断请求的功能。如果一个水平触发的中断源在 PLIC 核心接受请求后但在中断被服务前取消了中断信号,那么中断请求仍会存在于 PLIC 核心的 IP 位中,并将由处理程序进行服务,此时处理程序需要确定中断设备实际上不再需要服务。 + +>If the global interrupt source was edge-triggered, the gateway will convert the first matching signal edge into an interrupt request. Depending on the design of the device and the interrupt handler, in between sending an interrupt request and receiving notice of its handler’s completion, the gateway might either ignore additional matching edges or increment a counter of pending interrupts. In either case, the next interrupt request will not be forwarded to the PLIC core until the previous completion message has been received. If the gateway has a pending interrupt counter, the counter will be decremented when the interrupt request is accepted by the PLIC core. Unlike dedicated-wire interrupt signals, message-signalled interrupts (MSIs) are sent over the system interconnect via a message packet that describes which interrupt is being asserted. The message is decoded to select an interrupt gateway, and the relevant gateway then handles the MSI similar to an edge-triggered interrupt. + +如果全局中断源是边沿触发的,网关会将首次匹配的信号边沿转换为一个中断请求。根据设备的设计以及中断处理程序的不同,在发送一个中断请求与接收其处理程序完成的通知之间,网关可能会忽略额外的匹配边沿或者递增一个待处理中断的计数器。在这两种情况下,下一个中断请求都不会被转发到 PLIC 核心,直到先前的完成消息已被接收。如果网关具有一个待处理中断计数器,当中断请求被 PLIC 核心接受时,计数器将会递减。与专用线中断信号不同,消息指示中断(MSIs)是通过系统互联经由一个描述哪个中断正在被激活的消息包发送的。该消息被解码以选择一个中断网关,相关的网关然后像处理边沿触发的中断一样处理 MSI(Message Signaled Interrupt)。 + +## 中断通知 + +>Each interrupt target has an external interrupt pending (EIP) bit in the PLIC core that indicates that the corresponding target has a pending interrupt waiting for service. The value in EIP can change as a result of changes to state in the PLIC core, brought on by interrupt sources, interrupt targets, or other agents manipulating register values in the PLIC. The value in EIP is communicated to the destination target as an interrupt notification. If the target is a RISC-V hart context, the interrupt notifications arrive on the meip/seip bits depending on the privilege level of the hart context. + +在 PLIC 内核中,每个中断目标都有一个外部中断待处理 (EIP) 位,该位表示相应目标有一个等待服务的待处理中断。EIP 中的值会因 PLIC 内核中的状态变化而改变,这些变化是由中断源、中断目标或操纵 PLIC 中寄存器值的其他代理引起的。EIP 中的值将作为中断通知传递给目标目标。如果目标是 RISC-V hart 上下文,中断通知会根据 hart 上下文所处的不同模式到达机器模式的 meip 或特权级/监管者模式的 seip 位。 + +>(In simple systems, the interrupt notifications will be simple wires connected to the processor implementing a hart. In more complex platforms, the notifications might be routed as messages across a system interconnect.) + +(在简单的系统中,中断通知将是连接到实现hart的处理器的简单线路。而在更复杂的平台上,这些通知可能会作为消息通过系统互联进行路由。) + +>The PLIC hardware only supports multicasting of interrupts, such that all enabled targets will receive interrupt notifications for a given active interrupt. + +PLIC硬件仅支持中断的多播功能,这意味着所有已启用的目标都会接收到给定活动中断的中断通知。 + +>(Multicasting provides rapid response since the fastest responder claims the interrupt, but can be wasteful in high-interrupt-rate scenarios if multiple harts take a trap for an interrupt that only one can successfully claim. Software can modulate the PLIC IE bits as part of each interrupt handler to provide alternate policies, such as interrupt affinity or round-robin unicasting.) + +多播提供了快速响应的能力,因为最快的响应者可以响应中断,但在高中断率的情况下,如果多个 hart 为一个只能被其中一个成功响应的中断采取陷阱操作,这可能会造成资源浪费。软件可以通过在每个中断处理程序中调节 PLIC 的 IE 位来提供替代策略,比如中断亲和性或轮询单播。 + +>Depending on the platform architecture and the method used to transport interrupt notifications, these might take some time to be received at the targets. The PLIC is guaranteed to eventually deliver all state changes in EIP to all targets, provided there is no intervening activity in the PLIC core. + +根据平台架构和用于传输中断通知的方法,这些通知可能需要一段时间才能被目标接收。只要在 PLIC 核心中没有干预行为,PLIC 保证最终会将 EIP 中的所有状态变化传递给所有目标。 + +>(The value in an interrupt notification is only guaranteed to hold an EIP value that was valid at some point in the past. In particular, a second target can respond and claim an interrupt while a notification to the first target is still in flight, such that when the first target tries to claim the interrupt it finds it has no active interrupts in the PLIC core.) + +(中断通知中的值仅保证持有过去某个时刻有效的 EIP 值。特别是,当第一个目标的中断通知仍在传输途中时,第二个目标可以回复并响应中断,这样当第一个目标尝试响应中断时,它可能会发现 PLIC 核心中没有活动的中断。) + + +## 中断标识符 + +>Global interrupt sources are assigned small unsigned integer identifiers, beginning at the value 1. An interrupt ID of 0 is reserved to mean “no interrupt”. + +全局中断源被分配了从小整数标识符开始的小的无符号整数,起始值为 1 。中断 ID 为 0 被保留,表示“无中断”。 + +>Interrupt identifiers are also used to break ties when two or more interrupt sources have the same assigned priority. Smaller values of interrupt ID take precedence over larger values of interrupt ID. + +中断标识符也被用来解决两个或多个中断源具有相同分配优先级的情况。较小的中断 ID 值比较大的中断 ID 值具有更高的优先级。 + +## 中断流 + +下图展示了通过PLIC处理中断时,各代理之间流动的消息。 +![RISC-V PLIC 中断流](images/riscv_plic_spec/interrupt_flow.jpg) + +>* Global interrupts are sent from their source to an interrupt gateway that processes the interrupt signal from each source + +>* Interrupt gateway then sends a single interrupt request to the PLIC core, which latches these in the core interrupt pending bits (IP). + +>* The PLIC core forwards an interrupt notification to one or more targets if the targets have any pending interrupts enabled, and the priority of the pending interrupts exceeds a per-target threshold. + +>* When the target takes the external interrupt, it sends an interrupt claim request to retrieve the identifier of the highest priority global interrupt source pending for that target from the PLIC core. + +>* PLIC core then clears the corresponding interrupt source pending bit. + +> * After the target has serviced the interrupt, it sends the associated interrupt gateway an interrupt completion message + +> * The interrupt gateway can now forward another interrupt request for the same source to the PLIC. + + +* 全局中断从中断源发送到中断网关,由网关处理来自各中断源的中断信号 + +* 然后,中断网关向 PLIC 核发送单个中断请求,PLIC 核将这些请求锁存在内核中断待处理位 (IP) 中。 + +* 如果一个或多个目标使能了待处理中断,且待处理中断的优先级超过了每个目标的阈值,PLIC 内核就会向这些目标转发中断通知。 + +* 当目标接收到外部中断时,它会发送中断响应请求,以从 PLIC 内核获取该目标待处理的最高优先级全局中断源的标识符。 + +* 然后,PLIC 核清除相应的中断源的中断挂起位。 + +* 目标处理完中断后,会向相关中断网关发送中断完成信息 + +* 现在,中断网关可将同一中断源的另一个中断请求转发给 PLIC。 + + +## RISCV PLIC 运行参数 + +规范定义了一般 PLIC 运行参数寄存器块,它们分别是 + +>* Interrupt Priorities registers: The interrupt priority for each interrupt source. + +>* Interrupt Pending Bits registers: The interrupt pending status of each interrupt source. + +>* Interrupt Enables registers: The enablement of interrupt source of each context. + +>* Priority Thresholds registers: The interrupt priority threshold of each context. + +>* Interrupt Claim registers: The register to acquire interrupt source ID of each context. + +>* Interrupt Completion registers: The register to send interrupt completion message to the associated gateway. + +* 中断优先级寄存器:记录各中断源的中断优先级 + +* 中断挂起位寄存器:记录各中断源的中断挂起状态 + +* 中断使能寄存器:记录各上下文对各中断源的使能情况 + +* 中断阈值寄存器:记录各上下文使能中断的优先级阈值 + +* 中断响应寄存器:用于各上下文获取中断源的 ID + +* 中断完成寄存器:用于发送中断完成信号到对应中断网关 + +下图为 PLIC 运行参数图 + +![RISC-V PLIC 运行参数](images/riscv_plic_spec/plic_operation_parameter.jpg) + +### 内存映射 + +>The `base address of PLIC Memory Map` is platform implementation-specific. The memory-mapped registers specified in this chapter have a width of 32-bits. The bits are accessed atomically with LW and SW instructions. + +PLIC 内存映射的基地址因具体平台而异。内存映射寄存器的宽度都为 32bit。使用 LW 和 SW 指令可以原子方式访问这些位。 + +#### plic 内存映射 + +> ```c +>base + 0x000000: Reserved (interrupt source 0 does not exist) +>base + 0x000004: Interrupt source 1 priority +>base + 0x000008: Interrupt source 2 priority +>... +>base + 0x000FFC: Interrupt source 1023 priority +>base + 0x001000: Interrupt Pending bit 0-31 +>base + 0x00107C: Interrupt Pending bit 992-1023 +>... +>base + 0x002000: Enable bits for sources 0-31 on context 0 +>base + 0x002004: Enable bits for sources 32-63 on context 0 +>... +>base + 0x00207C: Enable bits for sources 992-1023 on context 0 +>base + 0x002080: Enable bits for sources 0-31 on context 1 +>base + 0x002084: Enable bits for sources 32-63 on context 1 +>... +>base + 0x0020FC: Enable bits for sources 992-1023 on context 1 +>base + 0x002100: Enable bits for sources 0-31 on context 2 +>base + 0x002104: Enable bits for sources 32-63 on context 2 +>... +>base + 0x00217C: Enable bits for sources 992-1023 on context 2 +>... +>base + 0x1F1F80: Enable bits for sources 0-31 on context 15871 +>base + 0x1F1F84: Enable bits for sources 32-63 on context 15871 +>base + 0x1F1FFC: Enable bits for sources 992-1023 on context 15871 +>... +>base + 0x1FFFFC: Reserved +>base + 0x200000: Priority threshold for context 0 +>base + 0x200004: Claim/complete for context 0 +>base + 0x200008: Reserved +>... +>base + 0x200FFC: Reserved +>base + 0x201000: Priority threshold for context 1 +>base + 0x201004: Claim/complete for context 1 +>... +>base + 0x3FFF000: Priority threshold for context 15871 +>base + 0x3FFF004: Claim/complete for context 15871 +>base + 0x3FFF008: Reserved +>... +>base + 0x3FFFFFC: Reserved +> ``` + +### 中断优先级 + +>Interrupt priorities are small unsigned integers, with a platform-specific maximum number of supported levels. The priority value 0 is reserved to mean "never interrupt", and interrupt priority increases with increasing integer values. Each global interrupt source has an associated interrupt priority held in a memory-mapped register. Different interrupt sources need not support the same set of priority values. A valid implementation can hardwire all input priority levels. Interrupt source priority registers should be WARL fields to allow software to determine the number and position of read-write bits in each priority specification, if any. To simplify discovery of supported priority values, each priority register must support any combination of values in the bits that are variable within the register, i.e., if there are two variable bits in the register, all four combinations of values in those bits must operate as valid priority levels. + +中断优先级是小的无符号整数,支持的最大优先级取决于特定平台。优先级值 0 表示 “从不中断”,中断优先级随整数值的增加而增加。每个全局中断源都有一个相关的中断优先级,保存在内存映射寄存器中。不同的中断源无需支持同一组优先级值。硬连线所有输入优先级是一种合法的实现。中断源优先级寄存器应为 WARL 字段,以便软件确定每个优先级规范中读写位的数量和位置。为了简化对支持的优先级值的查找,每个优先级寄存器必须支持寄存器内可变位的任意组合值,即如果寄存器中有两个可变位,则这些位中的所有四个组合值都必须作为有效的优先级级别运行。 + +>If PLIC supports Interrupt Priorities, then each PLIC interrupt source can be assigned a priority by writing to its 32-bit memory-mapped `priority` register. A priority value of 0 is reserved to mean "never interrupt" and effectively disables the interrupt. Priority 1 is the lowest active priority while the maximum level of priority depends on PLIC implementation. Ties between global interrupts of the same priority are broken by the Interrupt ID; interrupts with the lowest ID have the highest effective priority. + +如果 PLIC 支持中断优先级,那么每个 PLIC 中断源都可以通过写入其 32 位内存映射优先级寄存器来分配优先级。优先级值为 0 表示 “从不中断”,并有效禁用中断。优先级 1 是最低的活动优先级,而最高优先级则取决于 PLIC 的实现。具有相同优先级的全局中断之间的联系通过中断 ID 来打破;ID 最低的中断具有最高的有效优先级。 + +>The base address of Interrupt Source Priority block within PLIC Memory Map region is fixed at 0x000000. + +PLIC 内存映射区域内中断源优先级块的基地址固定为 0x000000。 + +| PLIC 寄存器组名 | 功能 | 寄存器组大小 |描述| +| :---:| :---: | :---: | :---:| +| 中断源优先级 | 中断源 #0 - #1023 的优先级 | 1024 * 4 = 4096(0x1000) bytes | 这是一个包含 PLIC 中断源优先级的连续内存块。该内存块共有 1024 个中断源优先级。中断源优先级 #0 被保留,表示不存在。 + + +#### PLIC 中断优先级内存映射 + +>``` +>0x000000: Reserved (interrupt source 0 does not exist) +>0x000004: Interrupt source 1 priority +>0x000008: Interrupt source 2 priority +>... +>0x000FFC: Interrupt source 1023 priority +>``` + +### 中断挂起位 + +>The current status of the interrupt source pending bits in the PLIC core can be read from the pending array, organized as 32-bit register. The pending bit for interrupt ID N is stored in bit (N mod 32) of word (N/32). Bit 0 of word 0, which represents the non-existent interrupt source 0, is hardwired to zero. + +PLIC 内核中中断源挂起位的当前状态可从以 32 位寄存器形式组织的待处理数组中读取。中断 ID N 的挂起位存储在字 (N/32) 的位(N 模 32)中。字 0 的第 0 位代表不存在的中断源 0,被硬连为 0。 + +>A pending bit in the PLIC core can be cleared by setting the associated enable bit then performing a claim. + +PLIC 核中的中断挂起位可通过设置相关的中断使能位然后通过中断响应来清除。 + +>The base address of Interrupt Pending Bits block within PLIC Memory Map region is fixed at 0x001000. + +PLIC 内存映射区域内中断挂起块的基地址固定为 0x001000。 + +| PLIC 寄存器组名 | 功能 | 寄存器组大小 |描述| +| :---:| :---: | :---: | :---:| +| 中断挂起位 | 中断源 #0 - #N 的中断挂起位 | 1024 / 8 = 128 (0x80) bytes | 这是一个包含 PLIC 中断挂起位的连续存储块。每个中断挂起位占用该寄存器块的 1 位。 + +#### PLIC 中断挂起位内存映射 + +>``` +>0x001000: Interrupt Source #0 to #31 Pending Bits +>... +>0x00107C: Interrupt Source #992 to #1023 Pending Bits +>``` + +### 中断使能 + +>Each global interrupt can be enabled by setting the corresponding bit in the `enables` register. The `enables` registers are accessed as a contiguous array of 32-bit registers, packed the same way as the `pending` bits. Bit 0 of enable register 0 represents the non-existent interrupt ID 0 and is hardwired to 0. PLIC has 15872 Interrupt Enable blocks for the contexts. + +可通过设置使能寄存器中的相应位来使能每个全局中断。使能寄存器作为 32 位寄存器的连续数组访问,其组织方式与挂起位相同。使能寄存器 0 的第 0 位代表不存在的中断 ID 0,并硬连接为 0。 + +>How PLIC organizes interrupts for the contexts (Hart and privilege mode) is out of RISC-V PLIC specification scope, however it must be spec-out in vendor’s PLIC specification. + +PLIC 如何为上下文(Hart 和特权模式)组织中断不属于 RISC-V PLIC 规范的范围,但必须在供应商的 PLIC 规范中加以说明。 + +>(A large number of potential IE bits might be hardwired to zero in cases where some interrupt sources can only be routed to a subset of targets. A larger number of bits might be wired to 1 for an embedded device with fixed interrupt routing. Interrupt priorities, thresholds, and hart-internal interrupt masking provide considerable flexibility in ignoring external interrupts even if a global interrupt source is always enabled.) + +(在某些中断源只能路由到部分中断目标,大量潜在的 IE 位可能被硬连线为 0。对于具有固定中断路由的嵌入式设备,可能会有更多位被连接为 1。即使全局中断源始终处于启用状态,中断优先级、阈值和 hart 内部中断屏蔽在忽略外部中断方面也提供了相当大的灵活性)。 + +PLIC 内存映射区域内中断使能块的基地址固定为 0x002000。 + +| PLIC 寄存器组名 | 功能 | 寄存器组大小 |描述| +| :---:| :---: | :---: | :---:| +| 中断使能位 | 15872 个上下文的中断源 #0 - #1023 的中断挂起位 | (1024 / 8) * 15872 = 2031616 (0x1f0000) bytes | 这是一个连续的内存块,包含了 15872 个上下文的 PLIC 中断使能位。每个中断使能位占用该寄存器块中的 1 位,总共包含 15872 个中断使能位块。 + +#### PLIC 中断使能位内存映射 + +>``` +>0x002000: Interrupt Source #0 to #31 Enable Bits on context 0 +>... +>0x00207C: Interrupt Source #992 to #1023 Enable Bits on context 0 +>0x002080: Interrupt Source #0 to #31 Enable Bits on context 1 +>... +>0x0020FC: Interrupt Source #992 to #1023 Enable Bits on context 1 +>0x002100: Interrupt Source #0 to #31 Enable Bits on context 2 +>... +>0x00217C: Interrupt Source #992 to #1023 Enable Bits on context 2 +>0x002180: Interrupt Source #0 to #31 Enable Bits on context 3 +>... +>0x0021FC: Interrupt Source #992 to #1023 Enable Bits on context 3 +>... +>... +>... +>0x1F1F80: Interrupt Source #0 to #31 on context 15871 +>... +>0x1F1FFC: Interrupt Source #992 to #1023 on context 15871 +>``` + +### 中断阈值 + +>PLIC provides context based `threshold register` for the settings of a interrupt priority threshold of each context. The `threshold register` is a WARL field. The PLIC will mask all PLIC interrupts of a priority less than or equal to `threshold`. For example, a `threshold` value of zero permits all interrupts with non-zero priority. + +PLIC 提供基于上下文的阈值寄存器,用于设置每个上下文的中断优先级阈值。阈值寄存器是一个 WARL 字段。PLIC 将屏蔽优先级小于或等于阈值的所有 PLIC 中断。例如,阈值为 0 时,将允许所有优先级不为 0 的中断。 + +优先级阈值寄存器块的基地址位于 4K 对齐位置,起始于偏移量 0x200000 位置。 + +| PLIC 寄存器组名 | 功能 | 寄存器组大小 |描述| +| :---:| :---: | :---: | :---:| +| 优先级阈值 | 15872 个上下文的优先级阈值 | 4096 * 15872 = 65011712 (0x3e00000) bytes | 用于设置每个上下文的中断优先级寄存器 + +#### PLIC 中断优先级阈值内存映射 + +>``` +>0x200000: Priority threshold for context 0 +>0x201000: Priority threshold for context 1 +>0x202000: Priority threshold for context 2 +>0x203000: Priority threshold for context 3 +>... +>... +>... +>0x3FFF000: Priority threshold for context 15871 +>``` + +### 中断响应处理 + +>Sometime after a target receives an interrupt notification, it might decide to service the interrupt. The target sends an interrupt claim message to the PLIC core, which will usually be implemented as a non-idempotent memory-mapped I/O control register read. On receiving a claim message, the PLIC core will atomically determine the ID of the highest-priority pending interrupt for the target and then clear down the corresponding source’s IP bit. The PLIC core will then return the ID to the target. The PLIC core will return an ID of zero, if there were no pending interrupts for the target when the claim was serviced. + +中断目标收到中断通知后,可能会决定为中断提供服务。中断目标向 PLIC 核发送中断请求信息,通常是通过读取非幂等内存映射 I/O 控制寄存器来实现的。收到请求消息后,PLIC 核将以原子方式确定中断目标最高优先级待处理中断的 ID,然后清除相应源的 IP 位。然后,PLIC 核会将 ID 返回给目标。如果在服务请求时目标没有待处理中断,PLIC 内核将返回一个 0 的 ID。 + +>After the highest-priority pending interrupt is claimed by a target and the corresponding IP bit is cleared, other lower-priority pending interrupts might then become visible to the target, and so the PLIC EIP bit might not be cleared after a claim. The interrupt handler can check the local meip/seip/ueip bits before exiting the handler, to allow more efficient service of other interrupts without first restoring the interrupted context and taking another interrupt trap. + +当优先级最高的挂起中断被目标响应并清除相应的 IP 位后,此时其他优先级较低的挂起中断可能对中断目标可见,因此 PLIC EIP 位可能不会在中断响应后被清除。中断处理程序可在退出处理程序前检查本地的 meip/seip/ueip 位,以便更有效地处理其他中断,而无需恢复中断上下文并重新通过中断处理程序陷入另一个中断。 + +>It is always legal for a hart to perform a claim even if the EIP is not set. In particular, a hart could set the threshold value to maximum to disable interrupt notifications and instead poll for active interrupts using periodic claim requests, though a simpler approach to implement polling would be to clear the external interrupt enable in the corresponding xie register for privilege mode x. + +hart 在 EIP 未设置时执行中断响应是合法行为。特别地,hart 可以将中断阈值设置为最大值,以禁用中断通知,进而使用周期性的中断响应请求对活动的有效中断进行轮询。此外,实现轮询的更简单方法是清除特权模式 x 的相应 xie 寄存器中的外部中断使能。 + +>The PLIC can perform an interrupt claim by reading the `claim/complete` register, which returns the ID of the highest priority pending interrupt or zero if there is no pending interrupt. A successful claim will also atomically clear the corresponding pending bit on the interrupt source. The PLIC can perform a claim at any time and the claim operation is not affected by the setting of the priority threshold register. + +PLIC 可通过读取中断响应/完成寄存器来执行中断响应,该寄存器会返回优先级最高的挂起中断的 ID,如果没有挂起中断,则返回 0。成功的中断响应也会原子式地清除中断源上相应的挂起位。PLIC 可在任何时间执行中断响应,且中断响应操作不受优先级阈值寄存器设置的影响。 + +>The Interrupt Claim Process register is context based and is located at (4K alignment + 4) starts from offset 0x200000. + +一个中断响应/完成寄存器作用于一个上下文,位于(4K + 4)对齐地址处,起始于偏移量 0x200000 位置。 + +| PLIC 寄存器组名 | 功能 | 寄存器组大小 |描述| +| :---:| :---: | :---: | :---:| +| 中断响应寄存器 | 15872 个上下文的中断响应过程 | 4096 * 15872 = 65011712 (0x3e00000) bytes | 用于每个上下文读取待服务的中断 ID + +#### PLIC 中断响应处理内存映射 + +>``` +>0x200004: Interrupt Claim Process for context 0 +>0x201004: Interrupt Claim Process for context 1 +>0x202004: Interrupt Claim Process for context 2 +>0x203004: Interrupt Claim Process for context 3 +>... +>... +>... +>0x3FFF004: Interrupt Claim Process for context 15871 +>``` + +### 中断完成 +>The PLIC signals it has completed executing an interrupt handler by writing the interrupt ID it received from the claim to the claim/complete register. The PLIC does not check whether the completion ID is the same as the last claim ID for that target. If the completion ID does not match an interrupt source that is currently enabled for the target, the completion is silently ignored. + +PLIC 将从响应中接收到的中断 ID 写入中断响应/完成寄存器,以表示已完成中断处理程序的执行。PLIC 不会检查完成 ID 是否与该目标的上一次请求 ID 相同。如果完成 ID 与中断目标当前使能的中断源不匹配,则完成将被静默忽略。 + +>After a handler has completed service of an interrupt, the associated gateway must be sent an interrupt completion message, usually as a write to a non-idempotent memory-mapped I/O control register. The gateway will only forward additional interrupts to the PLIC core after receiving the completion message. + +处理程序完成中断服务后,必须向相关网关发送中断完成信息,通常是写入非幂等内存映射 I/O 控制寄存器。网关只有在收到完成信息后,才会向 PLIC 内核转发其他中断。 + +>The Interrupt Completion registers are context based and located at the same address with Interrupt Claim Process register, which is at (4K alignment + 4) starts from offset 0x200000. + +一个中断完成寄存器作用域一个上下文,与中断响应处理寄存器位于同一地址,即从偏移量 0x200000 开始的(4K + 4)对齐地址。 + +| PLIC 寄存器组名 | 功能 | 寄存器组大小 |描述| +| :---:| :---: | :---: | :---:| +| 中断完成寄存器 | 15872 个上下文的中断完成 | 4096 * 15872 = 65011712 (0x3e00000) bytes | 用于每个上下文写入已经完成的中断 ID + +#### PLIC 中断完成寄存器内存映射 + +>``` +>0x200004: Interrupt Completion for context 0 +>0x201004: Interrupt Completion for context 1 +>0x202004: Interrupt Completion for context 2 +>0x203004: Interrupt Completion for context 3 +>... +>... +>... +>0x3FFF004: Interrupt Completion for context 15871 +>``` diff --git a/articles/images/riscv_plic_spec/interrupt_flow.jpg b/articles/images/riscv_plic_spec/interrupt_flow.jpg new file mode 100644 index 0000000000000000000000000000000000000000..57d070f3bb5818e3a773887854efd9ba8899ff24 GIT binary patch literal 46402 zcmeFYcT`jFwk{l`N(;RzL1`jQk)pJy2#APSK|qO$NC%M?ASBW|QBY8jj-Vn$dMDCF zeuxx7dWuq{C6urvg>QMzx%-~I_c?of=NsP`_n*7SJ4jjOo$s1!&SySz&b{w@1c=ZD zb4zmw8yg!03I0L$rXZ$}eQa!hUjMPNbF%;0xHvf2Ik~yGx&I8F{e1g*czAiZxp@V6 zdHMLkjeEZ!RDfUb&-*_o`E&T6qrewG4>!-BJ^p9g-baWq&%T@cZnCo-hU^n&V;5%I z>w>@_5H?P5wtpu49~;{~b`DN1a7w&<;10Dy;Plzq_kok;FQjrlmi7o{{z}eqnLx7jg*iA69p@4`bA|h^pXg!j2p+MsPYWvB z_bZ&ZN)f;JXoy!rQHQ8R{Uh4HN%sFvu*m;UlKoAv|1H-fgrA)aym{=x5IBU%C`>#8 zDQr7UEnRgX*~INZD7HDS?USjs4^3pBNYdL=Gw+R)n}|baX-s5@rb~0fgUL$#GyaRG z`PC{YDhvrI(KVIfo^P-DlDw+cX`+djLBuhf-vXhY2*KrG^$W!hXY_YI9g=>21DL#I ze%hq0u+6p+yi7Yo**5{LN-4>MCI^<=ecTCsj*CytE40#Wi&uAcS4txx8sgi}Uwl=0 zfZzXy5!)VwGY5cE^-tG~ZN;~^!eh7jm}(bl#->a&j7>JyFJm;19De>m(QRsib#AoB+Q4IgwsjWFV-L_Y0fZss4v^NG=4&cUH{hsV4}3jb$A z?I&CW)9wj()#3$8Zw;-r_yzbdbl=##_VDJ43)hjzJa)?R%IotNQ11mpaMvrD4J@%= ztOGz;*>~i~`Oz9&VpIGuN+bBeJTlO;@cpcVb|hPeUa+&QH6*lKJcg=Ix|Bi*CazVJ zaKcU{IR!}cuoazNdbQt|-@|_T@&1$SA1Y)?rK`=9WCMz;L|#8fnvYtX=Q9 zzkE>Uwaq6+mK;a<(+pKP4!`vYz06&9#fguuvj=InVhOUwB4JQH@>KFuk1<^Puf<3JDRaT(d;z^h+wJA{nw@0_e1iwmP0 z{mMGnx)rqY)f%;PCT+s8;7RJ)?FtJLW@U%;8$*bO?K6^eAzI%Aip(1*2Qnuw+NRLT zOu63P)#yWh{Je7GY2FCGH9BoP19genfEHv(QvY(2rn+{mvjf3hqT+m|bIU?!9`0Xy z_TclvoEX~%cUNAt$x*7-YB&7`QkEq=C;r`xI`whP)a< zManqX524FA&U}&Gi{~|wW~h7%u$dCQLH&{xUhL>;BKvJSK?9{yn0>0ywOP`9x?}9q zy*ZJd?(822Ty^QD&f$WkuHxM_mA4$fM4o@05~Y}EZo2QJeCoCa1jR%_&&Xmt(>GE}LTvUcb3MOG#6$Nep2L++_U0wJ30$JpY%T%~bx%-lVQdpUv>#}Fc) z2KWjY5#AJG{Z%JbXs&9)q3`2iPijsTP#iXt=TJ$ z$GqmpPD=Hi+{O*VC%9?nhVaffJ^*hu6nN0|YEqAh<|yOtqn*2^rhef^GR}{?(G$(N zLMnV|Ys~0F%(_(urw&@5D*0Gzka!e1G{Cvlxp@f!{CVvq^waF5@TsEvWbXX54c{m^rJp>%5b<9)CS(IXNc1CTzoX zJ$jY<4M*;`tqxG}^ce0WEH@I@i9W?FVksjxJ99O@u5DT67+x6(Xi!MLlx_6W&3mZ6 z!twxl)E3vH1t`tMpjA<-0HXLiGP8>%M8&o@OL?JG$r>^@$=}p(9J*D%r(VTSaZnjJM8=)U>rroDW+nct{a=)uiJw^}NlA%X3=o zCny-6V%^xHPhB_%yrjZOdC6#PB);RJHFq51W_@i{z8ycW1Y;D1u4|EyU5{dC3#ii&eJ$`4>7zgBaxz^*?dn`h={cuYI~3 zY3xbTiktf|xGGIobl(L{6+g<3qQKB=!Z)@KtG6KXZNlCl-F=kYouqyy-WN5mSh;?Z z!<8covgsR@SNjbgu?KP0nwTThue>F3P<7Y4ENiW-Pu!-y(!PLFyIY!(v83tU)9YR^ z`=R(8ZbtfKw-4$(xQY=BPbPMqbqr+!q{E|(Y{+l{lztPCMA(A}FFAN+=w&?r$*7B(85iXWL^j>`c22e2D>9C2xL$%N_l$n8Vk4;>g{5PXZMpxdtM}`@DEMMP) zJV`z=S)?hS`IA>X!uoMkU-_yEYkwFClVY&YH79}cqmE^h5HhIK6t7wKO4i2_nchp3 z*_W!?1|4aJ&7U?_gC6(Q`l+D=UYj^y!fW2gRhJ;eStHYBdgK`bM|RXq!rBv4!~{{FZg z<%zemQ1GFowC`8iD~9J-`_rjYBwc)axE2Z4qs4*djaq*bFfivCh=L>JLqWz zRk3kwdO6GReCMyQ90+%z4AL~1`L%Fy2D}pV2GthdP*BS3n%bvwhGCKQ>t7}+NM|>q zC13XceOejqjSK>?+~Zd`PhWIP(i&<64dbAl-K@olxTWxEzi{Upka*iiA> zy)<(8$9V<$6ZniT(IxAoZb*1G#hDbI*E1MxB1uinIq>y6vh+gTw{r6Hpe73=tHZH! z`Nt}I8+5X-Tn2KaF!A4p8UYrMfok9h zuMw2%HZasF>gw!kKT0~`K}?DD9)xG0btR*2l2#Tzf8MouW5VHF;>pp&qV?*Q2mE)o zQBm}Btj}{|ZNlj9^$3^=XFG8QbB$_(<%%Q2xtD`eoCO=jn@>32nwmcPA(3=!4R7$= z#pirC1PMMr82U-ZA@JFVMTU+Lpxp!TP6@Pped{pFltSR^E7zTR^R?#MWP;;;(XK1? z;-6f|?BxOQgK$DQMxu?~Z4;n(!FY`h64zrTc7M5Bm3lg$ScJZw?Y!MMKD7JDhXS5I5759gy3<)@tGoGkD<_%HTH#}p73 zdYD)Y;RQyB#Q|W+-@4c1bq0)S2gEJzqTX^Vt#&)v?YyB$39l` zL{MxINig0P8^S>Z3DyCkSG#tEP>Y2-k?t)IyvHX8;A_u2$A%>-2wik_zi+E#>hJWn z05o#et2NjtSdAQ>EWoLw5lrAJ3vn(BuTp9T+5 zGclY-aZ&_hN*UsSS`iXY{L)zLX;7c&i12K6?R_*c-K&_aDI-7$X>gbN{Fnd6V>a?A z+zSzLoDm8>4b4ctj$ElRorwS(%w1v<-<=~jcI9||oN1H&O7iPVV*NU~XZYD%oXj~P z=x7F%>QhTzk7|<|H?k=1&R=fo$@C4wlys{;_fk&N4T?U+9yILt%0Ka!yYM*=kO?^k zS+)8HKz8-mbjf2Aoo{;(@3|CM%|Z`e7U@h2q+~{@Q06+lEw_w4yK|4XHKdO1TuWxx zef>)Bmp$WsOo-HDS$X!vEt~JvG(0u9dx;T9#3sq@w~5O&1U&r?gw{N{xak&}(^C0T zp{2U&sb+Zlrq6?D z_Q(rmqL0J2%CcNnPf^w#sAjoI?qm$#^sn8>TYcWH60b$AwWl&fKU|*Za&h!q)XTd7 zu+v^p!Ba`1zhbI%;MLDq0?pKK^-1OP@qksImN)UK=aE)Pw9QPteD_8l<7V$E+$ zN}o8EA?yi)d@M@3uwA7q9MR*j72GsF;Xq;usOrW#zBuf{Bz0*pNLRH_G}5ymOfSHi z?tnT5Y?5wUm{Sl~h5{+a(Q;(*=WT_b)EoW3FuB?2G*xd1(32UM)b` zVx^3-L$p}2dCTw`Mhh<^MB0ubtw?fZr9jZ^lzr=Fu*F;1Fz?^bdOma&O9q*DsDXy; z8;l=Lcr$A}gmKdnVw?bSi14^$K)?*B1?N4~eI5whLqf9-QC!*P6@Bexa;?eKzLekK*J~yo!UC&ccwCOCbFZHRN zkkw7WF+|JA5a!!}xr6R_ZWAa&i_*RRczcj@+RaJs8(TwFSi@*i zm(-=)F0Gk7RFrAvl^a_NzvG*VKWG#J9(;ybpaT`urrjTw+GOy6GxhAqrRTWJ%gEY;N5c%S z@g%LxI*nT#Lf;`nw(_Cx-2MaE{4a#_um88*1x-jg;|^7;!y7{j!FD#a&Zff>O*EDa zl;3?2GMREw*SA)L_Ric(%6kn7H#QTy%=X_7@lEJQOwz0p6~++PBF{zPYQviI_yONe z6X})_ogIa~>J0K~n}2?<-Np!fEfKOC`X^FqwBbVSryx4>WIbnQJ&iGl;PjAb&01F-8Z{5lU^4cC+% zJhBI=o>%P-aDYYyVEK?f8ZhhOEhgMD7Orfl78Z~?BUJ=V(O{Ux4c<(L<1OOMG*zmIwr4Y82Ds6-*wSRvr=kp z;XB~7A#yu0BJyUMO@-$I98k3AUKe3JWTq63qwLFOJVP6)dd+S=73VeY#a(MiRU}sx zzQf*8Tlxhdx4}TFh8?(qLwMv$QG8>KjNf|P&u%U^ycj#_nHFL=Atu4_to#@EwTHUi zIm1mVjnUlF5?P#lfG?aY>CZlRc0yBQ0by>zX+u(DC*W6xC_A)Al}&XNXe3IDu;}~3 z__N!tmo3Ikp&&d_-+8vBp2a&(wd#U#!U@@UDI+`L?W+sts1k9+-#+iP%Hu^QKTALS zY=ickX%P+4EF#P(lU%i}jh|_sUno0nrpO9ld;8z&#($$XPTur$sGAg6$J9EcmmDvj zzjUGHY2A3L=w^QjnsK%`4=%Mm->TdKqs=ih196iGJ3!a3$jP0SL|G?k z=8%@D0e|t+#;BK4pRRIi!*uQ(5QOTmt^aS%=AT1r@%dREpqgMKj2CF zpnH?|82;!)h_6x&D|q5eHmrrcKa*X>CwzI>v%^Fb-9I`081I{xlqas~tMfYm4s&ym z%XIdY)t|hZ*1PKD{zSOmeKXT%|Dt~)WGD1rvA$;?s=6QWxoZ4|eP9pbqLn1a0gO;$ zK%PbDj4v@`6t{ZT%!Ot~zi4;W;vuR<@Z#r%lMAQTozk6zLCE-nnOTdQV5hlZ+q0PS zdEswLn#(*MI4V0!W(J1qb~&rFeX^7^3LJE*UEBIQ|Mn05j%{HNQftw*&dHEw=A!IL zdGSv={RlZC?G=IXKWpd?Mv%v6lDIKfderKN)(H4v4cFR_wOL|mLXvLZPpkF%9Ctbc z8bV>_t6I$DGEE71N*O=XTv<7031C)2m9VTM#nnM?}QWz`anrGn6 z-=Cg|H4f>9+*{0}T!%>mnKaZ_^zkXiAv&yM^}-sDYc3rj{A-l>-rsMh<6rn<`~JcPG+ z_M0f6dvc9|Z-l|gqz;GDI1TUnKzg}pnOkVhZuC|6-PRVN$zq8|J;ei3dk~Aj^haco zR}UT=^RuRAO(+ivhyuR7a9#oh-?=XPE2GJ*d}EokaAVk|=}ty@n8zWWB!wzf;m<$$ zk{4b*%F1Mj+t|VRjQpsQHh^QGR;Mr9oJUi5Prd*9_g6iJC%({zl1_45+(>wEx$z`> zuym@f-JPRzL5ow(h3{8dt>ncK`^vwQFDgThC$e*2Q) z9oS@BC)MiOF`Yc9HC2tQ(*51YhAT01YUN8@!Oil&Y7Y; zU@(S|ohOL8OG%;ynjEAK#(s$*sd>9zX>Dzk{5sS7-a0Tuw|}}IIqluW2DXoPQ_Ub@ z%s*Kp)HnrB#w8ko=#*0rSRkk|txGAmXofzqfAwfr*JFo)K-!>j6kEgEM*3TMZ?gE- z>yY|LBS#APDzgOTU+ngDDT-v9U9waKJSWwt28^YJ%sGo#)e9DRO_^Vs&V88=wfqO5 z@pr(Z*gqP6!NGiK@B-v_HETbdI^GSdv0I6gOfb6pwhmXWpP<{U@Nh`+ekWIv(G^W0 zwvEDfTdM=%s-VkLMb;AsQ_#X1I~@&M-&+&|4T0xg8rC&%539Eli!1VvTt!6u`u-UE ze~4E9K3fJe0Tu5CS{uO9{>09~CdDVu6dE^s-A|6-$wTxo^(#rW-mL~sr=YDy#roX+KE4i zI-K4!`JmdkC&Blva>^t8omWowPAzYF>a(Uxvkyf4IBk05<0&J5r*cGIJ?M8cVvs0F z5|-V~02{HLCj<1_kFgZp(@v%lv2g*vGj?ab*bBPEj>%IA$Bu?(VM&n;>k$kgR|dDr z=SKze^ub*@*Ulh>+#PP${$)v=Qf}n+uAzEd{#_(;SXw%%dV_~>nR`)JoT}fBmND#&I_3cPbb;oMghta*<5df-9Vm9wO^;D+z^lA_(uFW%oiDP^S637a(S zf=j?%ePbQCil{2R<95O0p=|}Bxe`M^@KoEzLbGr`-;z(8rm{*^O@*1y-o4ag6d%Zf z(5Fb)t^rBHU}vjqH~MfhohvTi!FYAMrw4OXQQEooj3S*a{nkQ^kv9RJoF~3E*TU_3aCA7se7qJ1sBy1y6PsHRR~oG>J)j3?QA-}ar%U=B3`+hJMEw0vRR<33Ugmy`X+ME^ zfD=ad%~egKg{Wt$4Bjp8_7tM~w6bB({V_&V|A;TWw^Ao?`JO+)d=93|JB*aKa!s&| zWQ@2xu6u%%f}Wmn`Z99C8GF6qob_Lp9d96lAK4Js|3#cBc9|P2jA^$7Z_Z2@?L9M^ zrGhe~v{%dQL6QRO)zz)1+isaSi!1owA^0shwG%b;tYtfzTwYC~rmW5vgqJEj%IAi~ zs=;X|&`SQ`js+O^RqmRSeCY1LT!UZAX0Pt4h0{5tLMN&4ZZ<;c=$J3JsWZ#BoU zxOrh!vFdxr+R7vQWDiS~vB$dqvv@lZqDI64nkwBI3WSm<`bnS^5!O%>E=o2@2@Imu zrOkYTwcYuT4c?_TnOU&-*Jv^@wr`YRYxyn0$6XXH-29X23+ru5g>TM`W6gtrV3 zI<@14yk_TaQ}W_;<6Y=WAtjy1d@FwH5?Nr5Ir1dyFPM;=MKhpA$X0!QDx@ac^!0__ z(bme8>h&zhF5(R?8zjIZQNQH4o4>814>Fvn3!Q^}p25|>MBVg+CT1Kb1`J=S=wXd6 zQn-U2Ozyw&K1^KM2ik<9k$6{`2K+Po}m;vDPiHO46lcia{XJLwvwBM{nob2MO3 zR<-(Ti;Ab~(dqECxkqX78yEWgN8NagR?@^;bZSFGFz;VjoO|%1xd(DHHf?p%8xJH0(6Wh?%W}i_Mjw zj^&ijd6)!aw>?+yv9>2rKuOaX*eAb_DdOTMz8=Ay7y@tet01^QEnLtEWlWt*L~;8S z0`~?x^u1lhYd?MSDz}oddO!5R{#i?0==SU*0lz2~ADcJP#3-1;PD`d7v)Rs+l!JPk zkA^-^8~UjZC+L>tgKF)Id0>3i40{E5=}A2GYE>AScd2;@X7Zvj0VMaLh`tO_n@%|I zcDObPDhlAPW6h{0uSv^Cw)c}?reAKW4GVDz{w{O2?SAU(M$T4fPf*M$!k>aSHcrv=y9oHhn2s3V2xMql@h_u{Kv z86}Ri43LyJ?SRvt;69X*=fL8)YZ`Pb%=ZE!jQQy@_xJ06;=*1A2KZLY`hwsD6WQf~ zKKF->)Jm=1%qTU*W}Qp%uVs^$Fk(wPb-0=LHJ$Ci=y`+BuuIfLh$*j zBFx<}`$>4)ps%JI`y$9Xc$#)O$yJVWXisTuw*>D~^=mu!OV;zw)2F!)J^4sBJ>J|z zlefe$jR*7ReOg@JE62UIIG}N;p$Ylpnd-;ir_bjk$w3?dTsxktMU}eQF<0Z;jZg6R z$d#wWq_)1BS~R$rmHhR)dr+2jLv2XGbr(730gf*CjgM2Q{+}4S%7HY<`^eTj%jS74c( zmxLEaYyFz6D=K2Bj_9-+SRWp|ku`TQ^Xi8YTiV9YmeMP#B7-%mpMP4)zq-S|C6~zP zAA-9Y;<;HpFwX51-&<7WBC0EytF>rp!$VT0yk|yxa+l&EsrR89f8V2S>1djyU;Ba- z`!w7KGbvysOuvr2@MY@8u?dta#V#JLusrtm)OEjuA8INsPaDOi*}vdgmjc;c?QJ1G%IiJK9FX}7V~>PnLpR^5GeU%4H{KKiphN+EI(3p7s0om8UnjhP_ z3xRqz+uop`#)4KO7O`>n*dFBj3<=IOyfyy)26dew)X%!845Q1oSnNScJ+tV%|FZVb z>?F{oenW!Z89bTDu4NG(gwDO!yALw{kbyI&s)P3GR&(=zavvam$9O z(vlDTu=t;tPc;<;MLB`gFcD}Cvl_k8BX!%sLX)@$*~eA;CLhWU#DJ!whWU!6`eoA- z!`XK5){Ny&MbXgRNHQhkSOuKj$sf)TS|FfP)T{_gEMC8PbX&@z^g{G`3>R1S9)vfJHcjC+aP0;q zVHrfi8@U>Zd^vg{@YyWBSj1-ox=bPj_<{bq2dTq!&ixi-4Z;Ol9+iD-Q6kS(Rzok> zf54ecFg!QxSc0d)Q#3PtDf+#z$kKC^-Y%Po z>m;Tf)D1VdIMTxY1C={2Fpm>?HcXAKdhW^eA=cNQ=W(XYJPaWTU$wB({R1A|#tSI( z^`pdE@zt!M=4-!{8ZE0*=(UZXAIAsVdId0ReDqbEiJ%3p&jH-0?SXHS_pFn-Mm zLHA&IH85Y{?+?a1=~wXv!UPwC^=*&#H|T!p_>dg@SIo)v(~{m8mpl%8^xzJjk37r^ zXkCe&pPlczW%)9VWS8O9*NndXb?G>GD6Cd9Qhtko6l+q9stLXu-^9wKfS^ajWc{W97sFZu$f76W1xVS?=TM z?;Qu;-dB?soICv7u&T2>G-sV5X4gI|F{Jb3+t#}H3=p9ccH7Zuq~;*kx}C3}`jGmI zreo$EhuKsFHt)Df^9@s7T7BWEoj;BP-+d&I)AS3EA@-Hmr#Rw zJ~I)Gd|7LFVy2NOsFA(hEGVl_;WYKwwVC&Rx{xYgRee*B&=Qj6LIn^rJ4we#omap9qj(kprwq z2T$B;z#^LKGdrO!f;e~o*VCQBB{spQ>Ld5xyDwN(6D7+t&34tCM~7{K;lX@?Iz-(h zj%5>bLcdVe0}QjnW{!rN&>YoTHA!soC6R954GfZ#qdqAfh;lkaKZ9x43s7YV0~I45 zL%nw7w5VI5J~6mugD>UAGe2n=nPo~J)7)Ps35!}q%*hKv*cUOfC^rg-Ii^BmUJDBTHucg=7lFBW$qQra<5nXm z3(c5dxu`d{Pk7xdY;)^Uw{N&A>nX>k{8)toV~AE0GdtHs+$G1xvY6YYaVnAq%1_^V z)(2-@N;pEtdAlpd9s$7#w0{F5IJt^CNY_I;euT>~tjMd%#!-_CV~Bl86;fw&m(1>&U6e{9i4!Gs~>)B0tZciG^Q`Qa}VMi9KQ$ITJ=ZV zwd=)GOtpR=dx2T;p~6@>6`m_c|5hLMUj>4{?O1%_dypep!0I04Ud!CBh}|#(3jc8$ zv~(*l-#tj-SerL^rGMp8@&ywARc_?J`VH6wvr~Hz1^pG!ZMfji?LmgaKGOx;{tHL) z*rfAcQFk~j=E30ai}kA-;QZsFF*}FARhXZxr3(YsXn1hupHXOxkO%AJSDX%v2e>)m z1h{tD8JKmUU8m~rcYV~Kk(w4f!oHQ32&}UXdXlkRfBXcPlfdpuAsVu}SM%bphrw!3 zTf$OwSYI%8hzR@-Zn`PMfO=hZ7%qzBDITUvd;17!jo;0OR+h~pfTM^=O%ojk3`~Pw zA6eI0F;PIySq|6w9y;(|2IVi?obfdCx#_{?L#GZjEGRb~rz+6M6fg}07B^5}y>&|r z2YAAIK=WG+L9}BCOJB=mflp91e;C$zS6!&1Tb1;)W_5ypp(;i!o50O-)oE0>_6Q%uisGUdlLUy=pkp= zXRwihB@Ki}BKzCnvMgBtP^Ke*c_S3ZEUmY^9B$biFe?JCdLOI5?L=GZtX48>eW%r_!9S? z^1%@ zul{EIgSo82kC{zpF1$sHEd2}v4&;crcCz#+sm=3`^6q{sU)#USdCwgWG2vL8t1j)J zV|W*_!G6vH-)5Evf=HHY%8dK-D?tkht3Jd3jTO(n8nm!-xqT_`Uym%Pd+doI?!rJ z%E`gUdzSznxhf-!YvgrtbCfT|)oHkRR9(b=O+1kAslqwDYe#JMfZ)9+6=#2zE&5LI zIo6MYMNqiOL%96bnsH36&a&)D*Xj%gH0OAEJUMp z%Q{u&tOm5Dqr!t#E8ZnSe&c%Z6btM`TyK@7(p)=ypTmHbmfp)dIukE;GwY8`>-Fb?7 z@GRA`8ldoP}L!WM2AKaoW10Nm-W4E>~TI6um{5WrhJ zXLDEgVYl=-Pp|6TA^SdnP!W$2VA1YK9?0X>!dAz#L2Q?s`aC@ zcwAOLTjJQng*QjUR@EB@!ofl=4lpqvb$u0n7X$l_?8Cch#rKiav}MdF4c5w&4^JH- zwhS+Zir+aS#6%emro-;>wuW>sS7_6ZAE@`-_tgG#$Szp1|>NUmC<@u&_;(S%fF#&k3XD(O*mi zGKqr`Yg;%eWEp86Ajg`ue#A3(p{=$}EpXp?XP1|9M^yG*hTQm(+WEa!Ys#=ES7m&= zT!pyakx9*2kBW2zQtewTB=X!{QTObfz@Enh)`+&6Cb?Ef0`lP$hz8%O{WP=zj_Q_n z37CG&LUgXj%^s%W;*G+HNm!AorT##Hrz5tq&+CvC#i(LOm(A;SHphhul6c>MIrxKT z*Uf>5_l~He-(FMZI-1L-v_zM+-nSooT{D)ktXS#zGkE&slNTS}K@^l?A3{v(3tLJ_ zuB#T%j`f&Xu5ny|TKy<0_}!9&amll4T(;QGUqzgiQ9o6Kd`<~xZM3Secn^}Hi4rXR zQS?ES)F{I)AIa`Gs^iE!yWkXei8U0a%4EH@4a+QxGjBK%EkWD8M&SoZW5Fsf}=eIiVO$dgJsCUx}$lazYfaC zdgjsTLUyp6kRNjtQ(R=0V!29`R+}nA_rKTzeO;f*yJGL(&>7tKuHd+D3mLtKm>hJK!tG>I~Dek+aS0b8|h>eVe-RZJi4N$ zF^{>FpEJIZ43dVUcD)L;RA#k_9LRQr(E@-Fav-7w?AoE!svDo3?RZ6ZrGgK9Tse^0 zj@L@Xy9`dsb~<9lrk8e&+ZtUZ$E-pU;E~{oYV1BWAsCXfv_N-MYjC&BPNb5PB0>!5 zd}UZdVQus5TOjsus~xeFA!b3a=uxz#4E8|d48YpUCi(Hzs=3p*WFRz$qZR4p6U#JD zKj&cYFrT@gn@aXVOdiD>@BRk))&7zAwEM#;txW7eR5O^b@hg`pSk@14eUAQDApL)R z=au(sYUxr*AFI6W85`&u{tFXj44SBa3PwOcA>PRdU=|yR({2T;IGR`*2 zbmV8lm#L(_`Vc>U_Q;@I8+I|aPE5OLn=mqyyt6VGOu+NoC-tE$%iQa-Ubv?zVXf(2 z8py6nX=VqWU2!1-OuQkuTFy|GNv=I}lD{S|CvJ8-{ID!^OdtnmT31&l%K9~kh#BSj z@t*HlJB_;m6j2>d1IGz{EoVs9XN~nOBX8abnXwYs_*7}053vN(fX-u0;@+R3I2|^y z;srK=A;CM0RcN=otvV!g6-=Z?w{gPAFS2}7h!Zwrx?)e>ug_m7J9=(B^Yn{;{m%_t z4O8piLpO=IMAng;w^3}PEJY-?yG?a;o5|iqLB?nVyuC^@)z+ZsAMb}g`Rj6YLVuy= z>?Q6+a~#=N<@9(>x#rH5n%dFY-ZW#ANz1eSp+f~}XJod$-|!s>*w=uOWR1^3jrJ3m zp0~dlnToe%=P$!4*xT@@3e6rctz8|rcMkR@fe?9PrT`=ax?)9_{{@yyV!LgmJTeWq zo|k-|K)Rl%%*SwLeXiTtC!YIjm1G;__Iz#a{zv~@Hj~=VbLdYPA$2?t;~K}7rGZjIn^D0jZ#Xsh(qfxjqf-eXbt-w(2T3R zEm@x?%0KIH;c^`0hk8QZ*@q!qP46H;5_vrVeVAbiq)_N2!CJ}&*xHHMkLJJWX`(TD zXI!gX_HyH>{79~v*+zcG=}KI->a~V6yC-el`& zUT#v0e{uI|+(R>eGPyKz%a<2;M4NJ`%sfx!Dw2ySwsN~TbZa`(Ekp4L53%T>&6%2o z*ANugwJ%9?9>+YGo1AN}vu%?et;Os^dJ=Q;qH1zNWwY-dj2;?Lthe@;Jzq6{H3K+a zwC~K9;|PbLf3H$Rm4ShN+aBbZH7W>9NI3a2_p2>w#pP|tyJ2WhuySC?6QTDfxr6^H zia3a0u>;A-vln))hzpE(85lDP49mA1zH)W{Pn)YzVB&?-6U21J%)m$NF$@ph@ z96}D$4u1aefSG|`sb9?7wFx;5yZfJNKGzBDdh1N5KMri(FJg7?7u5lk~*aB*Uw+%^~R{aQ^CdR zfH0y>_xB*U!k|o1VLDJi&0_UNKCsh+5e{r+H>J>$vo6Y9%5;&v06hH>q}?dbr7;n9 znfocG{WylOY7>pA)u&-%SlUzFl)RpF?*!i;Puk)zhsX&w$3(&`d+E2!eqko`yCh7G zf`+w?HPn>)GQ{)E(oQZvCAw}$Z}@%XrDzW+7Z*jLa5L~mul(MFa5bTO^VnJvN-3NR zsanK#x(k5X8YKuzg5tQl&FjbVz4VaM8dw3Z-zcBCm9+ zytTDy57N~cV+MhCJT@WxE7IlPeZem;{I97+H+C}Ek##7O@!}$!rjNw#K`xE!(!|l% zL5(>I_d&$N_u*YEYX*S_>xsE1C^PsZU0U2NO3j!<++?svFz4fX?c&7iX)W75X5q?t z6h~OB40|*+GYYN8Fv&dWGH%57h6ttGa6HQ2&FF@J8hnT~mA799KP5`*0m3PH_SZCH zUL&oXsCvakEc*ciT&ue8xW*D^JepY-7U_E#}|%V?RxOoD0R5gj#-59g|Y#A5C>{$ zQp+i4$~w`@~zS>}oY|57E z#;6|Y?Qfl?bF@3S+&-Tx^A^%l?pWYu<4C`a@6oX9#Z<#1Dq0S{Lp^AE+G0bJy4LBC zFboECD0^l`W!Y@!0imXx<8iIx3@7u-(K>a3d; zZ%pIk(JJ3ollA(&@BC|mrQE_KfpQ>Hz!?T8ub`#cC>5sD%kgA=*%*;Zj=`1;QaSUyrp7>R)A- zx_G6lswblEZwlERc(wJ0a}4UN>@h&sptZBq;qe?LDE0|v>RtQ{0re;QZtDY_gl-tC3lVPQr9x#TY+@l#wKP&3&e%0wOjYAd%`+5k|S_ybTQ zh|vpKLPLzR^s$t6!08b5)-BZ1&pOY3poTcfn3gvANhkoL`p~jpsSLS4O^5OX_{sHR{a^e6#!gIcur>AMjhn z7#gBn^e)z3!YKaT!!Ll)h?u(Xu-se>S*+MR_ywEDl#WGz&_0Ut(HgaRhgy|p=Mg2K zafcT)LaJ2fSeU>UQSPO@He&13NE3kX0CoO)V?B11VGA+yLCNQ$8SCdo6~MBsu_`=r z6gxX_P-`?o65a+GR0}AU9CmZPuf>yZKs{aS7125oVEqKby!5z<;8BDomA5eIhs%zA zsGGkH(ZO(Mi#t0fVvjrTb^Bz}cFkqJ#^}noXVc(MoaJx*Ab8XAS_s=AhWv&c>FL65 zi^HcU&9Cro62NB@k9xC`P_SRC z$qs%v>!5RYfadkU*#7WLt9O8QSVRDqxzj|7Ml#`pJ~EF$5}1v*y1!tuWA3i1gVHzU zQSpyCO?eggsDm`Z(lx5FnFQN|l)zFfM1#vhIsFXNT5gIsr{nLQ3;UXPv5)tzBrAgnWIc5L+goEb2;2oa&%% z@?MQ|h_xIZOoepugZkH1cMfGVi}TkBi^5uloT&t8&kAcVd@D4`5m|xF8%iW21wsql z+#GQ0vA^s^T z_AE{Og??I*k*CHdd*g=slVgiliti~LTF~g8%Y8| zkHT7kQe2Lx8}-5Cn30>mO6QDFOTaS!zN7=nF=F>=n{usY05N0*+D%BlZa=I=WsLx! z`w&z@mavohZWA7$n(*1}OJsRN)!SA2mFQ=7#bs_+1_uHl(6ZB^9soYBaV(vTFLGF+I6zU6~Ei)Y}1O*6I??lq2ZNz0@#%Imki-? z8cJoP%Kf_Ms1nj10(-V`@yG~yVrUW^J_^l%ai-FWwS`vrjwpFS8ppI#KvaNP#T}2- z8l|B(pi$h5Zw$x>C6F@5@MYvnqQrgJR+w};F#`fkk;2wkkiVIDws_@t%)dFeu*?7I zhW@+foZItgPNbibBrgI}V?&jbG2#3r=&$GSE*C@gU$ySIFs45KgBQsc!xTj-{({x; zGx>?e>>Ske{>h4Jc7hz3439;_!lVDysr~meJG6&YkDJx|7)wXx<2wXot{kKi&Hfg$ z<7q*>iCy#nEu8?AO7topxNn0X<5Pi#;{sJd&xKF+M}0VarsxRToqO?i99x-bce4M*!d9m`k0u|5pipe zRM=WtEae;75yeu)@HfYLlz=Pc=AVJPrcl`9JlQy7$cO+R&7x|x$e!!i)%%>r$)Zfc zkM`zQq*?TJ1-{#Klw1AfzIP(8 zpFpu_T3c3;+s~2U#KI2An9qBjW2u?P6`b%7PCby(G?ipJHrG{;%GXbr0fBuQ~m#^ za0&t7k$;Vx4Rw-eZYw{J47FpJVj#?QrxT-T>v5NH%Cwkv$NuHVWqsGj6^x3DA3RhF zrYr4w^d)yw^yZ8uQ&|nM@7^pEH3mRG)#PBAmK+Y8TCErwAejTQc9=#ziPcmdSO7(Dsyq);CP0YaEJLg?eOh3v04P;KE- z)32_F9S#Z$6d$48OOQ7UHjcdkV`eA(Ae*vDr7qwV{K>X=w@l^c%)Ozo)@*d5ze!KQ zB`2wei0{3<6czhUYq2MPuU-3pD0=-ptx0VflUREJB?$`AmnK}a-1_1m$|M)GceX9q z5Le$E^wJtzl{U6tPNs2Zcnw0$F83|rrQdtJuhy_a-&9w8y)pHXR!jEeP0*j~WooFk zNLeLMpH>;28MPBl=+NEnXl)_0KMFA5@|kv66lJAFR<&tEE0v(3v5m8N`aeh63yp<@OHMUn?2L9zK%eL^qzu zUf1w@{>sx`hj*8@>FxI&>7rW{Gtl>X54aQRd1%zL$n@mdFc^81|NVzljX)@DOr4!$hKwrCg-oJ2=$w z!qsK#jswD}z# zHGe@+052)l35p;;>apyYx#Z}I=2-uvDMe33P6U}mh4P)*)=9AzhLcIQ5*u zjgvcgSeyA_tacEU-hg^klLMOE#seHJp9v{QfIe{D-^Mg^56k-1H@;_cnO8I2KiKy2 zoraq}m?2q8yc-E=MMU~h8qSI59HnoK)Lr;;?}JXW9w~EvXCR*wGJ%GHG}c*9{iZ;H z^d0}r8f}dO#KAOffNZ@ECvg&8VXO_{b8`|fBjFo6eyp%|2jHQX&;o}a^mtplzM;#U z8;!wSX^}v+mxLTz@!Rh#7#NL14Of%AZ5DX{2dnoz{Xn(h-5otbM zH&MQ*5uK)J{6KRM_0-_f*);*Nv18gx*-Y`@*z>?%uW~k$^wphRh}5RuK9)EIhczuv zbvHchjtpmTMB&n$F%mp=1AUXog*#N0T0B?#gOM7d)qC(dpPston0lr+6ZZUat=8*(Te28-F*6zf%2yy5mZTVWG{SK_a3G>68 z{yXhT=jYwT7_$04C#eeQdut80oW6hn!;U~;f-N@7xCkXN}#)&@Oy^ z*2oc&n2luzPes5ERw!Joo09NG@vsb@erOMQ@VI_NhkIVIxV;k=ZexzSjv^-ml%&vP z3)I0pjOFp(C=NGjH;~Zxox2}!6i&vZO+)zMlJ52Qamu1wt$w8X4i7$)-c0;R9oNv z+Idg8OtVFv5mCg8)(BAYHiA)BHNJgZdaAuK9M!^+0#Jwnb%kemd_gK`G8XB`pajiY z#n0ro717Df$))>!xHsJYiVL9A^Jq43$Y`o9SE65+w1v|hAy-cy$hcRX*pe+)&9cjv zHLwdHsdJ|FtIG)es4o&za<}N<k#V2euBiH5#^qgp$`x;a!Qx}#G6|(g zMp0ak;kAEo>;65g*fvQ!^5|S&Gk{v`9m4R}Fkaq%RFbfb?)UeK38GRZ9qOO1z~r72 zoj`PY3f}!No*(6PP>Z#Pc2OFWFkuj#v>*K}`nvJKcAoty-ew!%~U1$M>8yDO)TF4`V zNR9#)-gc$brB z2i>=Q-`hec|G3R9*llN<-`zU!lE-m!g8@>Ljjr~s_VHQxW{GH)P?7sHVvZNKR}nHs z(5$r}Rbo7IAEyPeT^BFOQllBfa+K$!j=vf5s_I)($)x&>cOUJ0Y;yKGZ)nO8-H%s1QgD4M=RahW0zdC+dvc2e9!tO(->eep`idH~CtDu^-_+7OSu{s!@Q zCfjmpfNlVhya~~FP~&H6W8*ay5lefRh5;MGYKu1jmGCCGWNhdsT?E*j4o(;(NTLRZ zv8ZN-lscLw>Ed-CKN+Ni0MhAO*{ou%luA566-8$q>hOukYegO}P|KD|zNzQl5?+6M z42MI2LA<#i;-Yz8&ud2U5as5wtW(ztdd`Gpwg=z4TZec-@anxTExT#*Ls@y{n?&ZF zLuG`ou;L43=PpAKqB9z2UHZv1LNrH_W&XN*Hq67)iAIR^>epRxIZizyvQ7QfZP_N- zuRAO~cXNNcr1oJAJ!(W*k7r4fWy5R+rBC)nC|~;c^c!aLc2BpG^tyJ19a1_wqdX{) zyN^fdc)l>*BK8?NOud*lg%*V}tSSkJO*AR&05by64L|Q?a(AU%Auz zoy~u*sQ*h1O!_~g8x>q-R=;3Z*n4~t%ZLJ41Sl>VO9rX!9DXt8H8;XoVyn>J)B?s+ zHO6O>D2hBp`f1g^Gz@a%Df|Zdh4WJQ|FD7ae}Xe&KwA+?jI|p=c?~bCBuwn&82Chg zO>26YT0RkI4SWlRMIGed+7vlijbBJ^bG-W%sDn5D4~o)19%r>_!bl&7cZkNr_y#f0 z)1|4^w@YznOXf0#=BldJ4U>9Y4h!oXVE13HQ7ZdPHCrRR08G=pkRnqMC&SLU>@@i< zZyOFyxnR0=31u0zM|$k7M+-9}n~oSR@&_m91E=@h6&|2hg2|G;0-?ZPwW9yP;r+)K z_Q%)%c6_lHTIcY3{er28z}d+Y0MO~H>h$V(|gXPLKKgXY?Ef1eCop76$nJM}v6$?nYoNg4Cdc_Ka z4(6!RF>w!YX0M=Tx6#6d!F|K_SFu~O13b|wtNcyc3YXuah^^99EH$DfT2w^EzhEw{tK3H z-A_kHjCAUrK|)(uRDeXW0V#gjzg zO@!!?l5tYZli1dfG>;Lxt&c?41BRa3n|N8@e`yH}kp%BtYac>yL0y3J;5O04VhSHy z76~NlG%-xz6>jk@@tCtdpL<>==WqY?wGJ=DeKUdZ3%2b%8Pw6ofltX*(rHd3eR?K8 z{FM#k38O9^^W3*oTV)JpBgQSWn;XC)LyPt=v8nFtJ0?3PAmY5=il`^{ynWuOxA!Af z{bH&ug7J)aBy*aP-DT`Grma=x0F{wgtFT3ndhU$Ov z1N%qxga~MsQDZorZsLAlRC!1Y((ZX<@i*5Y0E7%OdM_{L>Q^;vE8Hw+`GoM+Z>kGY zL$i`5-wd%c+2D*>uk7XuK#^ln+-srP7@jfQF$i;|-2@X|f9-|KJ(DM{&L<$vJ$bYx zctS2Of_|7Ygpktx*0*d%-3dyf9cp1ZUA*{~eR_XP`cR|S05=rVIvF)#RGqrqTml`M zwac|%e;!52T1~kd(SxW8`Ays6Z;O~D&8$%NBT!Y6m%^~|inrCztt%u}d@bhQs0Wqc!w$b&m~5hIFIghEQ| z0zFqutJ1#DOJ6iwCn$lMCuXudxs_7egH$bn_A;RWoDT4Dwe|T08@HNSZD)TsMR@$) z0T;2X$z^$)BKq+asF)AGV8y8pgZ?bDZJv#qzp=Zl@E1v=2rv(YvGb8zs9zi)q%(P6 z`BCF-nHg;_!xfjV<07=sVjx|f#gk_rsWI$9bjV#HOT+>5D;=vk0|IqPCp37q@%EwU z7&$(k72fv;yA&c(UVeXJ)dG6lW}uk66+?vK8?F2=ujSbJtkg$u%Pc<`t8|AJ-k#d6wKgurPVnE^Ap52=u{ zB}?>aALA+FzzIM@LvA-M=wQlUGb|{m;iUf)x6rOvvp->J>8hz5v?PZ zjZ23qVn4FtO;oV8qsO7>XTB06hy;MB#`*Jlx~}7Vp~6I!H}6nICP=TNM{suFSBN zwuyP5%-{3kxRp9g-nogiE#e^VK>sh;WlWSoE|NBpLF=-kRW~Q5ij2CTxwhs!^&9E@ z(4ioHMNGx#>4R?l?UK;uQ;5pvg^2b%89@0hc{)1YNelK%<;OaB^e^oKGxyh3{S)C9 z6jRB}5#0w0-pqm{4W^IbRUGk%aS|U#7h)iQ&up7(#FJMO7T;Y=Pg=!1jb9%bA3yX- zH1McMyWZh81nq=<)CBiHfcg(D#J4h=^IFHT>TSId&WAVmZ2 z+_8Y`YhuK*fNcC})bDn5f#Ku>HYZNY`oby_C`=$)~*i1JY22U%`3O*OGZ z*azt^b{FxDa4Dhb%0+8^#kSMJS31&8X9o?mH<3o+&i$qJA(YhN@AkLeWy{Ek^#yfq zRjUj06Ol=GA04$(Dtl>oEcktVM@#6EsT|PAZaD{aP*PJ7Gz%1{S!pTd-lgA$Or&a( zHT`pTU9cAO)aSVuBp>yPi>HWCYVs$>!{vx>BA-5J;_^lk+bo?1D)EqubvS`<<@%|f z-ZRLYt4RG1izoNo-eh_@#-AA{N$AD@neK4=!bvd8jUmx6;$=YiPT~kuGX0^gm`o4L zlMVd}f{i{)KU_>v3F9wVe(QTl+v_ba=h5uDAfu{gr-n^^&3P5ulfSlV|5Vhm-_%+W z479sBJ{{{f*sYH@6}40S4Lu_4l!F9R1{7|)TVGUlxRRC;IfGp0x0h_&`y;{^ca~ic z0DP|?Eksg~06rEa9HIE=FvTK=tAZAMH#@quRI9+`!pmL@F}Uqlkm&MPp&YwgEkeFp zMJ_7ENR6vv8ONSdt?rU*+aI->$qR1mbhsEO^I#!1%q|vvvv(m zrP|XYvgC5E73EbQA~$U=<)5AIP~2LKt>f@d(yx)*lj_A@Vn4Q^Hc0`mhSHCw4Uqq{ z@rKE`iqo29UvFBoSr3QL zFRDrQuxHfFya$H8NsUk*Hx(q5H?hM@>Bmk_K?m9pOH71nx#W?L;Ukpa&F93rVk|}eP3aD91~>CzxK2)J*vU3$iMZp%lEpVx~1wu5TOSiMZ*$D zDZxp(#&3Hx>(9so80uLq5+j>vlfil6o+*$N1dL^h{*E5~SH}~=>xI85OMxEg4{gn# z9u;dV5;jC+dMtJQ2RsgQLsBfDHH;boZ={ZM5PbED^Cd!(t`&>3C#S}8_`0u)_B{(O z55=fH{IqH{VS6dTf)|$6RT)tW&Qmg}JeDPyOtYl44iv1XfB^EnO=58I&E?nFwW7nR zhn`F#X!79;^Y||!lpQwd3sRh1?4<7xRUtuoc*pvG|TfwPjk8w8aYK|oSy$z+XQ7b+ZL@Bvgs!fU1 zDu(HOP2>n^o%XxhpzRI#q>j~JBfmJ00;SmnQi_y_+oQIHL)GPUcH57lH7Fwul z=A-jPmPwaus;!+@&-ieEBFaYeqqsSS^WqzXnEGq9(U$7Bo1}9*j`sT9oU2%#{OMe9 zDOao)X{Re8Q5*26$Qs_ct$g&^bCaJZ&DtrR8gv5=-&Lj&?o3TsGM+pcskx%`8Kcmv zP*p3r_8+NKr;q3uQ2Pa)0UYGTsXhuwlzZIT z*K;T4f5DooPr?}|ZqsMy*SLOEWl-$2%*xXz+U;Jysm@WcdR%SQYy0CpjN9q!o0!ul z^%GQ5_Vd3mJ(SkRJz9waq)50VG(h{FiU6`F(Z|UL{PK9_Yw_{mLmLswZ4s#q(lISHN9&KiC?s* z$80XAs$vt~+7L5?}fx32OeLDxFP=85?|%a{8&dw<{|1r$qcrD>9O ziZGnpy_^==Bym6{V}8 z_}YqTl=PdBdHJ(W_*Bf=Q7?%(#?NkI*sxp^9JBT(Ke12tNVPQ&6fGq-MUFsLL(-2tB^95&D1r|r@Kfuts zPSX_Ig$+g(ayO1IT$A?ZJ|k;5E4F&CizUQlMCC9}(o&m7?eOG_iQcqHhu$AH0!&%{ zX$;auFS-93SRCZ0Eiqj40i!-!BuS{ppHCgtY09gbY&Pl=f;5B<=l`xJryn0SrJTsE6&X{ z6gZS(Kk<`#@%^GX78Qvn-@^-&E&^jNu%rjxjFEsGP4=>sXiKxvdR)b>wj-!`-H$mL zSGx6^l;hKnraxZq{eY%RC$!uDJLg+s6KYg#UO{`)i_CTQvOJ`7DgN{U1@TKY#sK z{$F_XUx~SqCQW}=gZ%NmKO|beX?MXa2VBl=q_0h9fdsLx1-}to^SdeHUu9c=I|~p) zpXgnx3_CA4UN3P%?uG8zehyDU8JNcY);qvJSrWlAg2sVBoXJFiM8a~Mdax$_zCv3+ z)u)_Y_S7rx*{l5XJn}K`!SN!ezUzW?@QfTNpT_mv_Lg z_%WRSNj3R5+^@fmP5`fxXBy3t)d6osU=XmaQipTE;BYe$VRsdfAQh(`buruz4bY7n zZU&{;z5S~Dxk*0UV8gj@l4gO2R19MAWI#?StGY=sagX(h?6+hbnCl#9+Vcw*Ou~MH z5k3G3(Rvi%gzoU<^orn==(9~EK`4YH;hlKO6-sP&c8wkyG5Hc=@Ibc3?=|bKG`4Yu zH=a;3iv8A0Sz5r^*1IU1I zDME;yU9YB692)LR*Ct)M55jU>b&q>!@W%7UDrvG*eo>9$!b~A)j%L+!* zPKMi9mJJ3dFjW_)sSSs04g?&HdoCfwJF^=Oj|{FxAKh?k1(kyxz{4VpXa*^)gDDiy}XXtm^7P2{+ug3z;r1_je?4eLe-x`YpBqP2m!X9KsS&WSnO|t{BI+IU{yz z5^y`#J>_eMmZ!t&!Vghgkdw3J2fV|3O-@h`CD zu2r<^B)QS%K_S1P;LKX-WQ7R_BF1E=2Ndc> zv%Hm(J!0{Q@glOq@LIca-e*KusK2Q9%=t(4GnFhj^B~rU(pEf`I4*4^o`n!vNhzR8 zhyb(}^LC&57S2T@RB*yu+wD4oktkrhY@eK~4n-G5v}bL!$LaYoI~~aDiBcOb0jDe1 z?pUO?tJkwuVUf$oS=ELsuBwaUXUQZ8lp)QikzKgMQ#PceY_HE5cwg$Cdb40p-W*4( zi1)95<~pZ+Ejv_aayk8&UBpw!fWZqnkhjo$dU5KR`4moC*yC>p>K_rCy+VP4L@00; zw9ZZ)vT?;3oR&#JP5i|$#H|%dB?_+FAFWYAsO*Ys(czn7&-{Yzqnh(%ZqQ8;(zyMQ zEO0^I-L;g%wCtoOo*XJgP%ah&2Nmz5w>)b4cF}(1%=NgliFz?d=t!-<^@@k09sYhUtgS`}oykd8a)j3IQBXtwBKaDf;q z?38+Aa`@S`sv&c*TjHhW{esJnYii%72PeQxP2A5mZQmN~&8^F|_P6`1ap21QS7g+G zwaNdBQtI~z{I|BWf2Z;I{d>P#zdib$?hS_PU}*Fg*)1;Y@8IEoIdOsC`!|lDz&hsN z@vXi*Q{9yL+fe8@52cGGT~cV!k_u^REs>_eZq9Uhy&V7Y>~?rd-l>Pta$l;@%o)0(v3@v>Duer%_=Py_X`zY!1Usgi>)24<$(%Wy3|JU2?->Fo8ZD++8Vt-|} z!kGMjPSpSS@81<|4ljO}xBX`zJy`bmmqzxt8-ZEq2_>R^06vLsgr<`%ARh9!S_!borEhkU=oJW_` zbZB-SGJI5#;o*Mx()uBR#Gs!gA6upGDd%iHTa~N!zWzK@5xY*cPp%IOD*CoP^Ecbx zZ`B4~vq|@n2Mf%(UlqVIBgY_zKHuTAPiWAc7hPylqiD#RI)3;#WJk5Gv=@Ue z%wHKs`<--eyk2b(9N2t?`|jIX-yOPf?pt?mzIg&#V954!_Cfeo=Ufr!Ub^J{Q zZQ>zEc}S&paJss#{`RG7KQTe-S4=hT2tNCna*76%gfSKf&|dd!`&;#jRN2E6M9Srg z)Hv7Z%q)tdZwWwXJaegh7fn1~`+rMF6RGvcxy2oMkl+AuGfz#h&OmvkSOXWDX91Y> z3SqAutr!TB_DlSxCH}?3+OSy&8-J3yYvPI(*Sn5asd4Dddib3YBYC`)dVN)pBBeC? z<#@s8A0t6~1_i7X`5sRDb9%2O39|h@SA1NF$8({4F)3NW2mz!yb?I>XP*n(V=fF~c zMwZR$uGcAIF*BC;F2sI(;H9+rTw~iY=abOhU$C~3YOtI?g>||&R@zo>Aw)^O8Uj?{M{u8|jHiqT0P?Ja z2_MZlW;x)o)WbWUIsOAJ)9%2(`A$N7{gRMii}*X(k32|)r?o3CPX>PhwH?Z*I;93Z z_sd=-7H`fNYur;?QIl3!-P8h0Qrd4RH~5oin_Ic20gAkG+A5I`>xoztv~QyJ*~JW8 zFEKywmZO|}gvZU65 z9nVg79cuAX>MxkhkG*UHp%o74t#D3iGlTJ81`wRAc}FJtpI9V+o2~x9;QoJ-wKj(c z?Yg+j(ZX64#!nLr;qb@O44Ox#TOUpws7@Ey(^)xKi1E5=lI16FbhHDTc3*<$R@S=} z7ZS}8A#%wOzu4|eSu$iy*`jtJ?en2y%c~OF4GjfLi&x#xw(oUS_{RIq-MI|p9&U11 zG--4r7xaWHcSvo+}%x8 z6ZCSi&yGaxmeM@pm4lV!3Z)QGm$Z^v{Ud~Za|27#v=fBscv~n+)V=>fM7JpXa%dFN>Rz4dvo4#qZ137RKtZtP*!Bj{YtT2r|BAlCDhRC z-;`=?l}8o|`ttl-|6_(xy%%Bz1mw&`a7pjI+{%GO`7VZ)XyK|x-8ro2MBQ}U;Cs9L-w6YR6_2STKYsKUEo-M#7_5x z5xdWoVsGXRo${66zfRF$(2o#g2>ah`%DEXIsdW7-*rC|7O|udnGsrmzJ)*5NA+|1+ zAZ4F}j|xGa3))lZ_R-G@_jC5GewNT}%QI2R{MJtDp_?L2SZ`_Tw5RO}Qo<9N+ zOD)W9KXt=5*qHfzy85SdqN#M7u(LfvkaLTIJ36rR{(l8C_13rmnwp8sO}i=j<7ZQ1F`^2LEv_JN%ie zX_bcwbtcsRo`Q%)_x-FHU$@|8)A#Ryp&8hM@W0BUNRi#VR`5zIo^!Aq49G`Y(s@(BD_(n5QfE!35&ZqiAw{?LFwD&LP#}g9h9w7`~dRHq6-b}HN$4ggs?Zk3PZkfrz zJawC^He5Vvwqs(f%^Lf8D_yF+{(>Bz*bhNbuJ0=ez(IK&Zw6Hou*DR7%fSdad=uK= zA5-c(YaV-|^4=14_1xQ=9$6pm9}(LhvWK_EbMH_S{tHhtf)^J;_784%7$B(9?1-i0 ziTxini;FH{1UxQD2%izZANK(Gm0Ov9qy(*qLLufttCIo!PpU!Q z41fK2I}it!n^#BS%;^r!m4g_3rOEE`lK!EsdgIS8m)o39*E*gfkhFdty$=jnx6xIS znJ4D1V2xUCbluX3;KB0P(5hqfYSsp7Dh8#3vu!B4>W*I9gvZL9PL@8NE&H(oOjH{^ z@fXptA^!d^aQ;v@0|c-vHxEb6Qt3GvxBHw;Z(oqWegq!92ezKVy(a1qhkQj5um~c5 z9J~d1R!V6~-n2`wg;EsxVWy{MZ;)D^1k~(AH%P>p7tgt7R+d=%$)J3z`<9)k0=#F@ znbQ8`ubW!3&RMIxf-)G2^kW%QD9JIF2~_+7D`E!4;zn{S3oW0Sg(^4nwWQe?-~DWP zXLau$qkHepzJ>Y40%wR!mJ=|wh)2JHw{;#48N&#>&rL`>EaT?x--J#gKzOPeO2vN_ zp`po>Hz{~39iFtTRTzh_@#C^U(RP{2-7DlYYeQO8Aat{*pd>E2Dw%Af)nTm{12j(l zf-x;R3tVg@-D9n7o@PdboKJISzdbwBSZbi9ek93D|GOBZP+iLf;C zZO8(G7K0y}R-7wiwDf6*2u1_(GwEc7-?*=te+3v)bT>ZAcb3XT(+#L?~Db9mNtaW_Zv# zTkfc~X@N~iCuEF?F{_u#_pA*Eln%4hauGCF^d=~eb0jqeh2SWNtZz@GaTt2|wr_{D zSI{S*^Aw3_q{!y0-#C)py3gXyiuc(k$dc?{syzi{)#*HzSPp{%J}VJ2KD16L8`0X!yx$gTJZz8h%G1nY5mtGS zF`N+r^sm?GZlGQ$!9zsPD{MhyItaB6xVs3fd9muKyG& z`O|a%33dJN(4GHv78(21ZoeHb>tSd+ja;ipX`hHh{I22`L!TTdx$fp*Jl)ywOkmLZ znNShSUX<%x!fI+U zr=LxPnCm&?n9w!E#dttP^8H;(^xBE2Hr0rLp?u-efE?+36+<2@t2D`ZR*Pk%LV|nP z<)lk!89Ie9ti5(1kL@v(hzvOoShB}QU!`ln!sE?xf#=wD$gn~5@JGr>^&tR`-kg#n zvmc85mbSM!GfzOXc_I;m*S;l8F6^SE-dyxQl|t6*crY}--G_Ve(kD71`8tNjY-WC= z>Onz!(n@`;mBjaRYF{bfY=@Q6olW$ipG-^WW5~wGP^8aB_`^I#+wczf=L(h)_z4sC z{fdLE1wzanC_ON66&vf=Fu1L7Ao|m1((~Qi4G`#$epfIH)d4_Im!;o3evIFm;FhV{ zz2%%WL3e;eu0fUeS#|pug8fClf$!p`Xp^@qjjg>*dM&w9zh7cZ#-d(>TbFcuH%M{O zdGNIzw*(lnTSsIftUc4t=a2YQ#i$v%g;~+pcg0zd?uc^zJON%7$c#}j5TS`w*5axK z@_;uyIoBwIBkU1K(c`^bQn9q(-r!`eX;kPmV*hfpAW3bLk#k=xBZpn~TPG%u7%px! zfeWsqTS+?=5gz?NmJ8-8*0MgJ6V^s6dMt>1%INjxm z$&&aWzHT`_B&D%zaIn1jlQ^?~1&av?yK=S<^?w`4g@ z3P+f*j*N5O7>7`|tfWsoR@y4h^SU&(2}LuX91dyxl$5u%Uiszwhp)270xvDYOBbHs znVld$c^Y{D&&~NXxt%CEqAn*#Q@yQwI%BycGi|dxesZr`Wz^=%I3=I5r!+AO7;Dek ze;COBgHZ*~hrfvL|1^O4|FAPh#1&|kF#&}#H-r1-7z*Sts1_i-b|WG*H46`sH?5vk5?c`)5XyK5W)F{bV4#K`D`8wsdQr1ne+D}wDfMe+$S zmMgfIvcaz$&l4s2ga(!XGKIEaC4*=m8lt0!LWDU%E|# zKJTpWn!G;JJ8~iQBfDp0=bqyS&e_ZQa3`8*vuoDyMmXs14-G> zlSBN)nn!G|3bbTA{&?uqGalHwWEaI0@i2lXnI)z-xfF6CI&+qKjNnH&dW(ZX?*86h z5NpzH{Lnzr7?!~tI6u|CbT*VmU}QlB)P_wiL(X)3+!`u6TQlFkz^+)WZ-cDX-Q z=X?i;0>{_I7Y*7oZ!JN{z=GZtFVZprr>p0x_u^cxiaK}}e2-0BFH3uKy0h-5dZF~) zAf9ZnT+n+mX+pCf@0)DYb^NcPotZ2s}vR`JSD-_&1q z+c^**$q4);gmqFK(n6gn!MEc_oq=k#jH==7PM6u?8!}`VlNk!Y&)%63l=tOMXbN2Nyn5LB~^7ap;?=b^Fe%q%~YZWWpG zB<2P`?0Xla=-reY0&3JZj)cU@Uodg#R!ay;l%R=2s~g_cf3GpJ8merG{%_q~dpOg5 z|KFlSv>XbB-QCE!b#RE--02BPl4=!E$)Ut5sl{v#p(K(@D1=hTqB+mBhNY5YVrVnv z5M#S@_-2QGpYHp9uB)fJyZia;_dM70*S_CfyLNr|-S_jk-tYJ8WT<0_-= zwjtnCfGzl2M#TNUgqi@{B=z3wZ&0vL6@Qzh6k-0o_4}ju{&Tbvso^9*KBc^=cS5l; zT%dh?1|w6cD@2F?0-w5v`i4AQ9{b$9>erPQ33-PPJb%_Vc-|Bs{>U=yWw)86YRFyS z!ay%?4XNPwLWSEqDKhXbUQRPUm*G7>yfA}Khfy7{hl^@T% z81hVF;E$H>vc_?59I?xGk;byUD;?xdGT@oJFN(4w>$59N;d5bp_Dl?4uTgXV4C86$ z8b15NOOn))CX-0Widxdamo0%lMH8I{ZL$YFmcxE-0PL9OQd%; zS6Li6IM2ZbMs6XqJQ|W zUqbMfgmsO5*EN*g>&m?%B(nY(08Yz^tobi9wK_vc7nP4L-x7V+$2j;{>TGJtQ{CEi z#Yg-Y&nDh|yo&GuvERfLZa>Pa7O)##OKU1)^@p!+@Wq}^wA~hDYbp0c2|+lykEjhX z2QV_w{z;G51gATrESnextIxB~lc}-fWzp_jKRq~Op4{}aMx%FiJ&eKBXf(WzXCXk= zhrYU<&w_CEUfnq?$Lm3dDeaVQ?Rc}Kjdl2;J+?9%8;yY5E|ZS7cumtKtn478&|2Lu zz+7O?<-)QXp5_(l?(SkNwo|XFw(_!Krzzh!d5hDLf~LlG&M;!eC{mNEN+wvPG;{&% zXu2gPN51`7+XuxJ8)j~4wokCugemW}$O3x-Lm#a)=D8t`iB_fZUquw*aGcHo|3fF% zY5Vp^@SebabyOoqnIhx%BkOs%hBK<4VM^8tdB?zDKO`Vzpd)8QIZ4*(q5q@26sCTf zs3zv-!8Kdp>C5QGu@vHZJae-EP*sHX?jIy7{KQLwd0W~0w`vjO9m!Dli@sH#dK|s!mtO9jwz`3Fvpsb8;pe=k=bm+`nO1f)+Fa%mO(GNoE z6gQDt970eCN>*|u>`gc2HyivOOqok09xQ~+bkR{s>F`scb?Hq+Nc@0z@_h^+3sLo$ zfIRG1$Fidz!gP5!aX#MPk1EzFzq*M%+Z=xBi}wl#^ChSJZqB9q%*!T(g}CB8YK?Q) zFVt4Ti@3&5Iu=VB7u}LCu^xOF>K9EqI@wb(Se{m7mx~`9KwaPwc06_7sXx8Z66v%sdW*Ny{&8i;w}PfG(nSOdg5j^+~nv zXq_x{2b(Q8%Yf2ug_YfE1;hK@0xw<*2Q@8G5@%VH=7kSax*+<>M%U9zHV(4a1&lzvSqRx;QFOcvqHz7zBTL!i2$Cl zjA~2FS_cw`LX+j!iIR|ufC+LOUdVfhpZDu#ukfy%<4K{gxsRLMOsvgvS)+5|lx2I& z*BURI;b%K=F5Ai#OoS)xtGHIdL7KwZe<)5wolrku(XSWjh_7Qfxx_Wl zQh|jtt<5wG(G;LicgeVywQ^t2DIse1;Wo~s@{EU=F8`C(DZolI>NouF7 zt=2igq8SHJ^ZCBMBd}nQrN>Gz@)ax-YR}wzqXw!Qn4#H=Z(2K{(qx|2u4g>|8T)1`l0U3LlQ2b#2wV zLMn~X^ANiWvL$cX6#K{xg1GS*uJESYWIyE65PGHhYGOin^4?5lFMv0ecfYHF2iTeEX;S?nS6`$VtQnP>Ko;j7HTUFZX?0 z+{Uf)ly8WZUL>c1hUY#25fH#lb1U)!QhthkAw8%hBv159SQ(feZFe;qU4*zMO;+8f zm~i=azBUdvRb0^sk_3@GmzbxTOj_uq`Q08{Pt7iOe$YPb{ozRY+H%rz(Js)9ib-^3 zDrwNASD8*z5NAl#MD_wytg$tERrQVVt&^@D<3T=YlHHXx$v05RSR+~lCL7s9o+*Yx zga-*$6#_4Ym#RMv)jF{YiE*h^Qgf83D^F@K{_sT02xwLQmC%TN2P_KRB??92syaX1 zg>v+oHsUHgiQ~gvM|rU{YrUC>QbA+IJ&>Vf z{#KSB<@I5I_{EZnnv>!?AB%J|e8Vl4!-U0O^Y6YoUL01>mL-@B?mb|Zq~LFroSafj+K7Ei5IdZvS2#3 z;I-%^xXC0utGAxb??}y5*NuKV;;GSbxjBZf>75p|!aG_#X}o6q7jjSaZ^>G=NRY`R z_c~V`@i4l4R?Aqh#JAA`$qTr33)@}xKOF%7ZQuK+!sq`vtqf!=e_O!)asD5gWWNMY zp=(`~rykTyCbqOgxUCs(U~0c~>NaW5+R~(wo_{DjZ(7@=4trK>IYhfjzKP-7MXFMr z__A(02e#+(G=qP0f zE0GHmykT0*?RtcFZ}42s@4t~s+;`?cbKp#i4eZq^+F?I!sBkp&Qyd4=zy@4GiCmgs zl0M6-ecuvGupCH|e|t1NxMJe?`${41*2qTHUpp`p@vynjuh#3lZ;z83cK|mljR6FR zx%LN($w{Onz>JH9$c6#7>d~Deb5EgE52|^4>Em;5$FNHEBBeFYo-?}R=MK{jfsfmP zh#pkqWH-y?Y(r@6+p5AW<$&^gAKq6u9KPgMnP}RQlT(mnJ3rj!hb$7L4Jbaa=p}fN zUM5lotwl6J_uh*ld`i8Qba{ICwc|@Ce2nw-bt1c`%_h)`N>iQrXHsxhYC{#Jv6d=8 zIwB2AdWi*K5#61rkB{b%Manpk9Z5ARIN+bTvQ>mJc^xBu9C)K^$BS6EvF5P4D4cF5 zK|Rl7+mK^^X{@8hw6A_%)~g7!Z&%6Rof|cSG^0yIX=pczqb9;hyE$`lOZWTJG*Nyt zNvK`db^P~gAdO=j(M0y;P-nb7uSU3f3`3!j`NszBsgHm)GfB~OQq}8H&XblvoXW_k z7W`AwHSY}?TK-b~BYyzh5iWCr}+nvC~arQJ)T~ z(LbiD>D|djocU32n&%zqEr_7Qx@^5knzw3dNVr+O_Ymxz z&ZR8Eo0`Ae8@}urGFg(>NEK^!zWdBMfnPjrB}0=LMcKHZs_W;g9lT@wdGH0snqqsk zVzzxv)MuDOS!O3Z(9}TZr`3HccVH9y4pZYKaw~rwo$=! zQ6VV5p}`sk9y(LHMcxAJR{l)!GE-7nceBC^N7=r`@U{8cGKpnV56@Nb5P-ZBr=?QI zmlJJD+IBVErD4wv&t*cNv`T}bQip?UujIc-Io1@nfoc8GRx9N%Hq+lbV>7~HXqcO{ z6f6*Di4}hFXPDbLkx&5o#19l2uX>F^^^ihHSr$?`4R)*N$dPy&d8p&@zu>o0d~G?vlsmCE*WO=eg%TD!7$afBx2~?dO_9oqxzsAP51TjfI-H zm>!_??FAa^OvO$w2O#h_RmYhM8!mhFK3BIrSR|L3f1iAUA1JCOpEoT`>m|HdcH)J$ z_lmSDN~HB3Njz6B83t*CN6+`6V5<$q zN!zOICykX|^-`+pqao)cJAH1!_w|zhd?ddVjnVAKE*Gc@;ASX5Oo5f4$R*A?B-?*^ zP`dWDj7XDI7L_-a02jWaH?^1noz9=cHD3ob?A*|IKJ1I12tZ!w>+5{8mPnfFO5YKe z2<-Nj7gS41?x!3zxQa0xlAPndi+siONH`HNBKHFmGH^2xVEz=9LTpK&03eth@Bjb+ literal 0 HcmV?d00001 diff --git a/articles/images/riscv_plic_spec/plic.jpg b/articles/images/riscv_plic_spec/plic.jpg new file mode 100644 index 0000000000000000000000000000000000000000..82894df5dc50c7be6fccc735f8cdd1439093331a GIT binary patch literal 74623 zcmeFZ2|U#8-!DEwwisl|Iu%kRm8~LE$(AIQY%!IDCRCDlw zRF=vz$}EyBlNmI=%=W+B&vSm~oacA{&T~KK|2yYA=XLJM_Z2hOT;J>ZT%Yy*`Fy^@ zK_Lw$f56Vs4kjWZ0y_!*!Gv_!dRt7;Ss2XO8D;>3!6d>V5r96jcC+}*>|%kPZ;*?_>H zb77amuS8%Xug2bpi%&>QN>0zXb2l^V-u>*n{DQ)w;>S;(mRD3(RoB$MtZQj)YwzfM z{pM}o$4{U82L^{IbjIknvG3zQCMMalbMwDA3((@y^1ei1qW`k3zwPYb>`MXcYXvw1 zF^T1UiL8hKm#Bi6__}Q?75BPIoVvJr{r2mUO8e3ty=a!wF*(9gK7FZIT1D5CuE$>9 z+V4C2a~q5KpW4~qHuhilMS-mn6#<7QssKa6_`JO2jj;b@muM%FmMerQRZ*`CVbAS5 z;p!M)F4wqi1PyX)xbBOA^(_027py4dE@7Hqe!0)OMLrl^nYTS(BbU}ij6>ew-6@w zli!H+M~Y)F^K%)t~ExA2MLu3$nMA zj0<6qS(o6jE6Z3gDugZFJ{LYO@h3)I7FiOpRXY4U&SISXMienQxg8=h|o zg^*GITS<692&=qO5}t?a_O)!RsI9GNs9^nkwEIEtpW~&Uua&o7n+*H8 zk@SuLnb&ikL$PcV+Ll7r45Ra=S+@oz->J9KMKe&n`sJ07Dh>W>k4ibW@8{oajS*-J zF1&t6_cHs?6Z0H@#)Y!LaA&Fk?Xvi}?59;QL&{oqQlP{(BiyhuQyy|&NAIojcHZv1 zr|pJrUstqt-f{OMjP1!9fzmLfTVR>XD53qU1r6TpvIaBf8M8F*z&ex^MMBw}NnY6A zj27))-&Xdv@NLJwcz?09bO|%IOB|B+4LKx)`P8#~I8X9XZ0QbY41n(Vb%f4(BBg$$#ExfEjL@#W*pD zEhtrJwUhJJ1qUdDPNz@RKQwxHds0E?!1(lJ)5;)og;$sLQV@Dc0pF`l+H0q*#cd&I4QVpt+bncWlezjA$7)~yJxALugi6Ol=mFbp=MV@)K zVqF^1qcMAs4v$H3%QtMs3RJMpP%8bQ#W5(1&82tWz=lVu5b3ByZ4;Jhoy!d?XS2@t zXN*D*-nCn`x~!uo=N~s2)icG z#h-o}i#pia# zI{z!S1|myQw%91HE57+G56-p3hWA@*KvDGKPQoqR7S^*1j*KW|T;nRdym6dtOJrs* z)!|I4PULON^-uf~iC4a?n#9@zetUuJ2tA_a$w&sp2;u`bJNlw=clnyRc(x_b;yqZBg(2*6y&`h{DI&JrM4 z0wMz;X4LrP=?Tj4-d&N$(HG|GPP}S6&f5M+)@puNn&bD8JSxSI~YwfRlc9u zAFpH4C4YJUkzxDOB1?|8SR0m%K;|QhFgnhZ0t6FjrBPFH3NN60eZ|)sPBBO;y9yw5 z$Fsz8gTWJ)i-hlX&9@sIB%5?i*4I1)i#8$Cp5l!7MMzo!sxsm_)|Ez1^$Lxj-)%?P zy&^iQr8kJ;5*uvvY@sVO+JOAC_+_Sjj?RXK%=I^F-P{ht`wR?e`-QOBB*Ch#QXwqJ zo`xi3VApa(2MHazEZuQB)J6^nB3D{0<~Y>7e~H)EK8b9db1x7K5m_FH1pJGD4ul*e z;mRVnb!%hlJAAe93Q*WVmUWVLRTx9EkG>uq<99bDJ(zE?E!&qQBpn>?;`#K2TwRW5Ip@$QayOKS*v%p@h$f8PizNj zi_^V3p=4MBA(V zMeaS(wRpQy3dT8S$S`sd$PBaG_d?<J@aL7=9dWMzWvNX8{YsfX3tkcYnd)6MJ_uD!1 z6f??8O^4b0dS9={pQl|WeUjcNI+ryXz*FoJsEKlr{9LS$5GJd}J;pmMgr&GLQV`R? zE+GZOy+T-I(LwA?#iA7V^YCo-PYVmp0Rk_yXLBi;mX2UKp-ro?xK+{P$V284W?()sCd1pLgtt=vuZI z%jP9P+TyiHNb@bpDc@5<82kq0B!tNkgs}MIz&7i5B3ON7R+$h+_rkXTO>x6o2;(|& zk4_^`Q|sT%THVAK{+x?gM4DUhs<`&HFq}0|Gsnp+8zF31lrC`#85kIjM!+Vi6$1&4 zDqW*d&gP@XD|*bBn-?nv4+ZB(9IKUSG?(tMBUn9km>9DdQ5^u5wh$?Sr#%4+km6Y| zWQ~upe~sS=-z{;Vu7WG~sKmQ9K(?PQwRo3QN)J-jlv?An@j{sg{A=@{qMuJBLUt2HSnu^q7-nfc!+LWj0sN-C1tdG}_ zLq5vhm!ul20!3#P&N5@*rvQ6DDq6HdwdC%xalrMXnpYGjx zmfG7;Q8}09gP*<+JVHG{Zl4icpReo-$kLA$YYROrJ?A>1ty$M=E&p{w6@;(#@1NhY zd{opq78!H==8H6U^mD(;Y`#_AHKZ&)G|>z`9Kf0GC!=TL$#U~Z4Xi#t)y!MV!u@8e zp%3q9?emxE&Ii!Qho{m^9~VW$*d5X8-&eX_ITe?{uSABx<8ks}1(~=uq&A6XyB@2< zE{ z0`6Wal5>w=fIM$JREk@R;T~oaW5bPMQ#I8%Rd&ez%j^9mt25m<4`dE`_#0i5-}B1- z`;4^#55Wp;B|^H$)~Ojly%wl}HPdEHao@u}K;@xSsI1#)QdpFj=PW3zTUSLvVN`!#~Y&1riPlue*DS$D3A5=GRRva8a3Ay zF08*9w2*7Cv})t%pnE!`)6Ut|$x{*)Nb7N}@aMi_A{f*T<|bn+g;29+>@E2stj?jv z&&nTKr4z?ab#2{wyvcG6yk8v%K^0_qk!u}@s#uxDieQkLT7WM#S=0`v-RejwG+AWc z=QtLl8(vexe1);HFxwi~?Ixk$Ea&|rPMoih0WQau4p?m*5i)rx#^HhG)}IMM{Syn#kqThC-Nvl;G1$RRpPZ zMsnl%OCqbk1+WmeN#c+=SjGw#fw#JtQw{^HV(^{= z8*^7A8_oiJN(#uM#8F%~x%$!b9&F@AAxzq(GfTsdyQTheX}+%mhTkqwR@H|BJZ?F_ z$X+lmV3~Hnd*%E>^7LH{*srsy+cG+!J_g?12mu`g=HNS+?OGr~28CaMA!Z#QQuakf z>SU`mDq(W=r>)uky4ay^ZOo3fw|>#cEOZtxH=l;$1DgL@`{{@1{EFn|)&2Vy{51mF zF(o+i0BBS2$h@eOP=hOBWS8hyX?ey~|vdYNkLYFoZVR+X2NkF=fyX)G3r;3f!3u3zdUho(XeM{cy(^#~5o@IKWSz1IQANqoHy58fv>slC>$T6(2YRg|(SXnscra?>rM6ADWp7 z{+^cn^qEQP*v|8okH0sb$SNe;wdEjW0lk<+xhDluS= zC#zhEs;jx>=zaO49oaxL5U$Lwp@V~R<0#XN0Wt{3(gKWmi#@F<ap*VgqNdh`vDe9LZ@;ULn_%o!T`cA}ZtNj&@`50B(y8e*UiP!a-;>|BA2BiLMT0egCIjM~>`0*hB zC6YE8F@Q64;yO$rDv&K&h@%Z38+I2%TTirFeqns76gMiWN}p6du%Q7cEx9e z3J#hx$G>OKBy!cThah);ZrzEIT`cBE1{y;v_c~z}@FuNkEX`li(_U{cEG7&Ef((`; z9x|lf#M4Gx)<78?G{4wd4a)9pMGh;TtIo>Yx~Z`*=U}TY+wktKrH=x}IBBGt=L1Z&$lz zloE;=F32znagTDJkN{Yo_8NY+^(rWzA(3k4Fdr%n*&KS{_Gv~}Z1HegVWJztr2eEq zUd)GgPjl17FCoh%m{fp=L9A7cdeC0BXscky$6yY>bn{r?%wwOgN({;C*^qv4&&5c$+0@w%;ZyH(L+C;R^Diqaoc;YiQqlOXnI%pOyb&iS4-|>OC8YrX2aY*sqHzJ zE#n!S>v8{dHfp4#dun7oU`>4il~~Tn(oeCL6Ht9kptMn$W9i%SFbu))yzK(a`W0Bc0*P(I)ZAIpsiPBGpTg{WqCdnIx&UWail1>AgyZ>~4bWW{(beM$^wB2!L!YPn zCiK2P<{XSw~4NR1i(k?Lih!v&pKI+qNyzb-tLzO;n?$nc8I@K|{#=1A7m5*i2 zlYpXv%u_hY5V(uD7EpSDp|^6jg7k~Q6#eeQcl|hRRw1W8Y(s*d*{?1aO;;~9FJ-j1 zhwIAEqfFShjEwmKo|ZoMv=G+15oiLvhEs(@C%~atZ+20QnU)Th|FSZwua%n`pu|Q* z4*ZBBLl!9Kk#&BpwPb$n3b>D$&$YFoNhCC0wq%D84t z1vzukf0Xk3yeJABa4r1Xqj=gqko|B&31No>8l-_q*v7o%f7-POrVbRsGCuMPK)%s1 z7eA3X(s*sz0-Yr+?nY8v1TA$Eg8RW!KcxSe_x!W5!qT6PDq#F&A6|5k4&}4*TgaMZ z8mDVU1~c4hjbJClSGgE7v+Zh%Z6160EaF5x{pQx*^|BaVuanwDPjmPtit@lWN0DjQ z$x_$|t{NtT5z&lHXw-!K*+=Qlv1pEci~7}|t&{zk55{v=)>O-AxQxxD?{u?buVT6lgUFOB_s@-bSc`gV zEw=Kz_xFE^iAFyhT`#tW1;EL z)e1&v>jQW^O5Ru?g594!*)iP4p@@I0Q!bDu;EN6}JhFPoHr$;*2BimR?J3I_z_s{k zz|r{x6x0VK>zP0unqjDNbf7dd1^O%Lsbhj}lV!_k9dSE#EMc~=`Ml^@jn!cZ=I2Nf z6Ukl2+s3c7)^w&LlXJvbGq*0QsqEEMFU)(R_rOuZu5b9@Hlxa6wQHFwj;csQ(Gw`1 z5}6jz9tu>NHCr`aAcbK!YVZzmoiiWhq3sxGOr{h1adDs?Cf4GvfsS2Me#uIM*KZw2 z9}pt==5wIRgIHdciipLT;aaSBKqaGE=4&K)y4EtPQbAFw8EdGPgI-k1?ylO1jMwS9 zN9g+%nBPPhWXNz~+5!ZmD+dK%QPKi)+y{X{KagHIsD-oSVXD#9s^ekQP(ABX@njBJt!fB1@j=Ydbh zjujqsLQceie9dfnDV~-?tg`26BDiNUs*EhA4Q-=9f+xz-EqBSon6vMPdk>$jJDWMg z{E~7bJG7!%bFN#fHn4v~yrwqNAAb%t6wyqrMof<}h;g_bA8i35ibb8g%zdpxAxMh* zZaS?ipWeRSUN<snoHo=FND1%9MudfF z-xm`((AXLkT)cPu=b1CImH}woM8^e@C1b$jk}PDWaU!++dsQLsL*sVVz%`tKbJ#h` zl?sygGtS|C73*q`AFqC?78v_@g9>oi;3J3}B&&nU@-$wugoAtpm_voi>vkUj@O1ak z%&7kKICm@lEH(VSW;O%BL)-Z^PDCu8Sfu?-L7VobI77o4Iv}$72*7$Tg$IO1z z9jzytrA=>g;W>C(RWg<32EYw_4vwE$>L=)75n3};iW#pn_xTNPb>hxru}^W$p`q#~ zVU44qY#9Cu{d({tk5RY%dz9VmR$T89LES{K&@?oUBBe+JfB9s~a)!}P~C>|gH-#d6}nA(is%YWPJBM_D9J1pk4R zBX=(vC1+L3Lq9<#Ph<7-e+;Z{SL)|H_wgwy{q%jOT7j*kUyC2^`_K>kb9YQhhyy7{Ds9Fe3< zu9q46+T`~9^-fPI%f=s~W?uxaQB|GHz3hxp&8x=k_#wDJsr!akUl6g4$f`0WDny2D z)INdquTDK_VyjU)+3h70O9nEYC6BvuV5tpMOvE1kF2 z$m05O?LP>H1p^g1Q`+`-8tpT_F@-SC4g8_SZ80JDX%~CXuOibK#OKSk2qyTJ z?N$hoo2j%oB82&YTmkrrPI=vsGoX#XtHK|#oB4%K9UNC%t379{JW74h%}jbEpx~6* z@ip|X#>e{R!P24DqpUF5{dN^TF2!}NR*zio8K_0vSWMdZv~APrWRYppzvUE9z?qiZ zeSy?+{4{eEm6Wr->a(#aV#SYzU0-?XmxJ`a^farb_3Nee%G{O{-F5TV`fHYxhW8*# zwiIp)c0H>mIsNl9Keja?sKltk@w>*wi_!<=t5-7X*}ttCExbIxT*~$TXzA4Qwx@fA zF#Te#qYyUez6T^^jb25Ippb(1h}o<7N+Lh*GMvAC7yxg-lWB1vk_+(t)ryl%#d9ljB>fYek4=<&c!vw+wL{jU8ktswLWqCy^lmQ zYIurslZEO;CJSMrf(_W6pd@GYsKt$jHDvh)4KRyJsX3tls&G!9c$Q!BGI-A$jt14* z{B--s_VSZ39k{U{_ZaZ6lpECreMIe0>rH{U?NB=l$*`^p+5Brp0lS5LCI`{L)|J*# z=){;iYTTF|5O?*Ug`B0-N0A5J1yaSV1&&Bc+tq{wQiK1fu_mVPSXNu3IlHKQsXNJP z@7PayqxLRwpEMmYxBYvol&ZgrCrUJvL74)@X>_486k1PZ8i%rpoO420oUC8*M7D0W z50$rhw`Dt$GHYIQR+r$Pw<+PIbcDH0NYjKTxiXZeIM6JFRm|{|sGL&(ea5=7)jLKx z*)Q1UDeMQwT$Dy$QQHD5ndY+lTqXvz-R38VuyVh2F_Y5JRj%`Vm&~Lioi3 zIiAO7Qq>e*0jrSVnYFLFGF!L2ZdYN}V3~DasfHz!aA$VJ%0mAF1DF#lAI2*ifz(b` zmp~fL8lW92EWsGJAZ32?MD%ZrX1Hdvu^UF#*TietO{(dgz3*w01%G+};KiJ$Uat@W zX@HxFl|q0Q#1i<4Wyqk=>s|vXRu=45`q%!ukDVApJeTNbu*kke(xH~kwO)jtx0laN5p;qobOubk2XRE{H%Fmf;#h9-BpZ$}ax9%+(e09h0 z{1bI2wZLzir~52JrCfU#}>xu@2j#?G(gS#i$CTf$b7^;unzV(LlX2jF2?hktF(z z2y|8!H|IoXDTyfVjIu7s>pQdId*t1V>rP7#KR(&AgM-Z|!XASXxZ43+YBuU%Z0G_q zgRF?j=pr4!{I0bl?p!)^ zxS{?`kHk26`XX0~7s1aYpC`px>p~V>IGS8xoG{#Wg@acJIR!2FGnmGx9=#1aM5YwGZlNiZLy#WCIlj>Q#b;qqY3O-(=9?F9oFh8GeJyk=}Uo(O75p*KT?U|~q491p{NH&R6kTN=rOS z9IIXfK-WyGi)FU7d-P8YmaLfr?C;s^a~5fZMHRdG?<=zm*WB5#YUAVehGSc{%WI=2 zj)D!kK-R<;;-sceuh=b=A?PkP7=E+ki3a8scK?=D00=^bY`tsIxxr);f$wQ})7@tj z)Z>K4@glhAF~*~_m~jRnffr5RyW5);SYVLt++;lUh7LY6_a@>^&Bs6Q(fy_Eq3J3qO z(g)Rw7rzXT*;Q5;O;0uSC09FN-7s*U(*N_DGw1#(3wNoVvRj?7H2aYEGc6)Ya zi)LljlJjFhCr<4XKKQH2=$9+Zm?0h^xZCF zArUS!+aocGU}|u8W868Y21tvYL9>|7U{g5}fmZlDiZk1!6Sr#@D)DF8*}BaB$(G=i z=&t((@sk_QM(%5EP}Nu^euMag_&k(X4Ce@hFcLBzWPQ&zmf3^k`FSAW_@v&6IShBy zg=x>WJjR-T{sn_R!p0Mh9)HksNte~7w^BJZ;E$Fs1d%)&3HCJz1XT*Jt|LEP8ubXjI`FbMn)Unyn5y9sM?It+}MOmx&@* z&AQ(p({6zqs&X}XS`Y$V22C{Rv+UdZeNB7H#$HwKO8q)kI=}Fu^Acmwj&(mobF0JX z=|_7`UTPB^lSK-oI$1RWsjtAM#6w0jWZW*?E8wz=;(E1LvO_XP`EsH1sF7hPW%^2Q zmvURG)dvRl%WI4LEj@>t3cu8JBP&8%NpkpR6C~}X5LTVl(H)yD+nLa)7nEZ%z?1PS z@t$-)>g-o!TWaf%e&K)j_U_6E_}Yxndk0TeY$FZMB%xkV;{kBgk6&fIZPJ}GZM^|< z@-G>jQ0brBU#+_7NxRa~2R8yKcK#k&XWz)LIAn8K+m96>kWyfE(mGSDP2Q}0F*>6F z6hh@djrBT~+{Vdy?Sq8m8X;>inhK05& zd!cD&FrWh^C)hr*kh$ybKwA;Nu#zg@Ju1m-iyHe>s(06@EWgobW-Z~3Hd^P2bdmW| zLI;`U0!p4(hslsJlBq@~r+8f{VGvgSz^!6sK5o<|9It!+qM=dYi@oe8>e=+2x){Hx zI9uZi)$L=B!-OCx9C#2jJRO!xV&#r-mn2jr@|LwGbXu_6#vbx#;I*BiX|HxZ%6M0m zdVYW4d*%Az**?cL^0|)RS2Q<1U?Hac==cPDwJ||p;fX@`VMq+?w4xu`cMIm)DA=uo z3G$U2*DD%69KRT}MtiHuHKY|t3mv>B<)wGAMp8ZD~EV=uok z(@2RnZe1t|4l?{&Sh*#wOE<^)>GONLf-4in5$4mxp#wj68w+Hupmq+J-d7t+3Yq+( zlvZWr>Lxku=)Yz`c?o0{1s%Ss{7mb$*yC*dgqdI5u9=(K8}TaWO^@FzrFr|9Zc=c% zkhadFx?{&BW;!n9^X$w`B<&0Qdd`+ljXGXH+&tMOPAvVlm!ZZpSdmksD+w)EuM}TO zEPXOOXnL?{LQCw$eTv8Eg<8V-i%((Ldc-t|P8xO+NGos+v6k%W!lyR0SD~CkFM=Z+ zUVQrYu{$}KQD1dCXtqnivmxK0-E#Axn=Qj)%r9_Nu8rWWHXL$g!3EN4T$2fA2^t&< zZY6{|01;@>DqQ!vmmv0pyEnXeRfi5NoU>T8KD{`xsv!2e$@8>_Uj?cB0z56FUkK9# z)P0JOS~i2Mnugsp6i^|s52?948`kIPCExtqbD4F&ZEYT#bhTUS-B}sbYWLR0e)A2x zmC}577JxnUSPy9U>3sHT`eqa>6O-4;nDr%UK!i50E-IAKZsN25RC?5d7Lhrz0GStV z$HuB>BGsDAK<)=$fxHeN6PH09dT|0)G*1XS`C}5VB zotVPYxYQMN3DKJ()5}3s7)l0b1ffRp*UwwI(5MQ5jRvfrk8}KsiVH?MBheSg({I!a zE>d&gUa(mg$WWD+*Tu;Mg*0vq0^iify&KTyzc0?2`T^=u|NUWqtKotC1acz4*|?9H z5=gmn6@w6pIPD4R)%|8)ZQA>@#cpGgDGWyM$?X20XHPzNk(rSVxuyj*hrq?6^|^}J zbD!}+$iYs!YMaj$s!LTrFPc`W(RTHQib9=N>%~Yv*|sN&^_GdPubXWwSmOdke6JQu)54K+FtH}y)m)#F<4k#2nQuBBe*cALsPO4cV zdoflZI|J64191h?o!m9h1BQNEFrr0$OHCfsKh=6+FTLLT0ouJLxub>dlNtFvYybCOVb8jHVcVz@H;i5}NTZLZ|tR&?KsSxXUzN3OY2v zbk7i{>fU(nKu_91-JHJNF6HY(J9{r45efr#povdL(jEz66z%Q&yT~&@GEQJO)!cu^ zH0A|7hF4A=(M>mW((FSG?jMzY%5JHUeCTIka?WtJULXZrR|y3)Q5%m|BcCNv z!svNCRcK}v0e$Y&-08kwDWs7@)g$}c3o5TvZ8hC|HplW=g-+-9y_&?QrvDPWi~fTo z77s9d>@D)xCNk?Fo@+o7!iw>-15>~LR89Avsrz0Yg9T;7|F(c?nR_ejc{xNT$kUzj z0qZ+h{cBzvW)pEa)4bey)3D}7pJ6SS+J?rp!J>F-m-T&i=keZO=)jrt zq0bs6q5dfJpzdLImr_!p^5yW8Z{Iqsjgga$7G-oVDu*MN=Cg#bJ!YdoQVx<9?Z&4; zoOfoRmAHhi&IR5u6dBq|UQ)G2;_1n3vJhqf(5!?^9;h386gIjbSVID!#B5RHwY+QA z_&@rD@OKlSe@Jf>9sg_Qe<9~z)c9|i>;C{X(9jGYl$Sgrsv&7a+%CZgWIy^ov?a`8 za^Z@r!-kJlo3GSX-8S9MZrWU!h1?{OE%;`*SO+w1C~)b1v$leYIlv_JHiFuUxX4Fu zs!@>byyNNmfi0?KL&b}w%yMM?xW(ap>M$nH7-$%eAmFafOpCK?=*V`Lgu0vr_Ubm& zDxUqRQzejBzmJV0`Tl&#U0G9vX@5$(g|&aG-S>#py*l%jf8Ujj#`PgtF34CE%Y_W- z3@{CId3r3B6#5Q5$c1sH;Z?GUdHxeWhq~{K$$cN4y4RX0pWx-n8S4N2OfcNFWt?{r zC>n|1gs`{zJTqYB^$!YReX<7{r@?Lyfp<5P&l0(MzMww#qiren563n{aCCsWv?HGd zirk5_4YFsi_F>m_O!=TY1=76@_K%xSJqrp#%eIf*v`{QKuoPB%)9R*@$qU%37gjwI zlM#Q{d`p8v+e<*#?&u8HppGEOHoZCr9}W}9s`DR!%s+LolQG`rEYm^ND61mDFovFN z?T6xm7lp5$4X9i(Ik7+eY0&HM+u4s#mKDTYXqxi{S(%k?__v!IqQM5;UBOoD2z#`t z!2T$JU3T)0LN?qZzJg`dn=n1aAf+Oe&(A|!%#4nFtEx%Bnl2=gPS3s0hihCnpEKno z7Hw5=*J~i(6WLVRA5<_`zf@q zN6l-iHu_STOQvMN5$hIk-+X*?3mL=+w0mTEB;9w!1M`4k(f%OC*qYihqIF$k`eT>& z)DBXJ*0tE~)3pk^a|T<(q-3>)uMhL~x!Z!+AxN z(~RO|`MI;*`wp$~IiTCO-udw{i}&m0tXaA6A<|$4r-7Blq;t1nY#5!_zt?57;~BkCy*&+Ae0Q%lcod%Ot^oU5D(dECJ`-TiILCxT8Gj5G<1OyH+deV#&oYx28y ztJ^3okM(~NDn+kD>3DUhgx=ZQEsG5R4AhIg7|KZ9FyK|y6Czh1ApSNq*>X5o@iX(g zVb8s9tz}ntZJHE^MOSd)xGz+eEBq$4vgU>cV_>?SMoIvOX?3oquQ^(?Ec}%`KH#g* zp#9Z&{#a7B!>Jg%><^k&xyngHN671uvK0OS#&C%2AI+*85jO;@52&b zP%LLEMMEI1!8YL#d`vj^pw+Bm`b?|KbbXSyJ4=wiY9NMvAaYxrv)A<9^Nsk+5(vy? zWbSg&6Nv4i;GI5BPLLkUg6>N+?SkK|dS&C?n7s3V6s}!UzUkJERfRKWPUVOsYBvo` zM@;v!^zHfgkO4$7?9Lve(VAYK!Xrvxb%{D{SF?1-iG|H$PA1x(_tG782k1nec3CN% zdW&2xsIu~ZmLKcMaHGns2{9eNSa}H({&iB4^g~XqpP`&??rtw~_s+MiyCqFUAmI8+ zBw@THk!d{-0^& zUmmkub^Zq~*&lgthgafLkl)-s31L%xC_Zd}0L;a9@|Xs(Vw|6WlEY7wQC`Ki6K4%3 z@xLaF1=rA>K>Y8cW>dR|<^*p@3CQ_@;62*(Klzk_|Ir41FO~ljmAn7J0^f8zE3%uH zhi^r3j$H2Mul-c=vm4T#S&qPfjVpJfZA0xjOa=!ZQFlM_hO#G)2G*z!1H$wOC$lx{@aF47|G>ouEmj{TTu zSb0)IO@mN+8f(rcSS#?<0W4%?K?5!fQ4Y|bs)g6P~twh=tbXD%|$_D_V>Z*-bKDMee{bI&Q`Q@1*6#Z5byKIW#Mr(4sh;LkPVghO<$t&d^yi?0h#$k8ike^+iKC%^A+X$NoaVp)9*TtW7Rj z-mFw`|H)8iL_qZF3%y-R*YY3zdhWaA6=%mU#gtQ%R`)k}b&*0cb5}V3AqiB9;h%>PpJ5~% zUk)_jS;QmJ=eiD5UF(i48SFx2MFxkY%$ZU*D?Z)g#Q!a?#4?v;0DK4^eDf!2MVFwn zQ30HNCqelfQBI%(SsbeA`K4FeQzd&q*1vRAL8i8#GX8YoXXOINeadOSZS)r*Ogm#1 z+Fd}EbW`Z9#$EMni(A%GpfNHl$xKB3>p9AJY$elf>6=}OxgDBJ@-5jAXQ!WLyGJs^P*}z*2|Ze=t`EG z_c@S$c)e(l0VhFEh@GE-LuhakyK@6sMy2uhi#$7n0{j$NFWQw(u3tO-6sBD9FKyX> z>HYtaj{l?2{@3XJKhtggmy!MtdmVor7KkVRE6DZ#qDS?YWc{yke?e}f`Cx;735E+= zg}HkJz2qJ|Mtk*Fu?E_%sN;yI&M#QFFDOn#Y+Cj#8`3SypFWN8xDC@C7zI5nQv&Hi z?ooU*z(Y>Ctl%jFj1$Advx|A_@S#FjQukn0v?Y^x?$ee~{3rYwr;1RDIsV!C>29?q zzTo!)RE7?T@<5PA;O@awzoNhs(=OxN>`_$~d>sVmnh-{=BZH=6@RW~a*fP+Zcx$<@ z)(*)8ffqg;FL3Pz{o-1?5C?MXc#Nonv_AP|6dtMTc{)w$H%WX9PrvKCJFx~6`UUD6gf7M9{ z%T)*H6tuyemmkIfTDBZb@8+8gyFbTN2yA^^1h4djupU{=a>uBl!1X298b4&l8W&_U zAB%qZXLj@ahvy=-fn^(slR5~X(?@OSa*&2bq$~nU0EYcciF_!5VH~M}y+r#EVEEU5=g0(uD)k<$G9ST3i`guFRKbEDKo% z0SFmyS;!jl1?$?D#Y-Onq-$|mx+3==o-4V7LG5NA@n0{$+SIR{84;n7kZva}Cz5t+dk6X0A3hs)Iaf85FK}_;WPkv>3@GU$ z@2g8I8u9#W(RrEOaP9a03Cj8q(=QE(X~1>`J+tfyRghN(GeGU9}g& zHvbU)B}nE0+m`s5>`z>hUuJ6>!2!s`Lj+sBX1YQM+Xn||7f)dV!K=uH4=fqZiVAd& z^E2^3_Wmx6F}neJk_imuIcj+~UlNG`r)pn-pZ#zRiTXi$4Tn;_Ii4T`DFK90AURJE zc=rCa>OW0uGA9b4V=wW)r)WlJt_!q&;H03h=u!-~O+{Pt<2bo@zOpKwG5g&TlXKkJ z_KTgi?Pj+%*W{FP41ewW*Om$3C4f^oPgp!b;DFpvxjV?G6pR>>2Bmp;emQdN5^~5= z@Wy9Bkbx;9pZr6?`lBbAhyqSn^>q1}#K2p7TL!?SqEu}%YU+>Q{_%%X{GXE7#Tw3i zfWs8Fr+}l^j|&?CC4x z>`jMRr{^_va$5M$8W3Dr+z0KAP~qrQNqy)l==fK?hv%8^+dqFPcevdgy2?+ZFf&Le z^^)7(3!Zmvw)TLQ>_BG?&U60524%KMYjs^=PV8u@_OSQ!Sl3jY`gpZb#r1Dr)aPE1 zeC>WJ=SGi2^xq)mNW^p+_cRp1>FQ}fKZbleeO|;i;Y>bb;kdejZTmm^PV^;yPdDD; zC=!<a()A3wVpCe|YnX^X>Sjtb-uP?+8bA##)&gRe4f#*0lIu~me|JIQbjXI6XuL1Zs) zs&+i<^xJl2RM5fN&2R6YTKHyC+GePGzU-E$;ilIougV9m@cJ)ZJBF_XdV;|mHOP(Y ziQNiWJn@+N2-0TnGfB|}Cx%;Bdw6fSuXN@@teGzRK6eD%1| zf-fT~;IyvbKDZNCTb;^-D%#YYAM$guH(OZ*D39b{H2c)G%1QH5mtxI_*3`v$G4>wq zVOuQl9N<9dml*QNKq>VIVGBOd!}Q=Vfg(X>fqebCk`T3JL2Zp4>BR5fU+zbvJwwf=7*o6jZ`_lS^S$9HB+&3>sM#38b^HPl z=TEUmNx8^BF)A0{^DmuK|D}WKAOHV9+k>}kA%=AX?%=sn;3-X1{DejF6lVn)tn!bP z&Y$l1UbahrpBWff;%x)(+u`)E{~vqb9oJO4t{VhJK#bC*1?h@_1;GNuhM)|B4Wwo) zNE4$X5+o!@FG2(r6ojaNC{?-w66q=;y_XcMKp;U33zDq4AI=%~IiquC_Bp?O?>^`5 zKTudCin+dwyw7XH^5aSRH1>>$K$r)(LCfomqr4)j6I5iPaqrfr%Qo(zRzhJx zHnEg*Z>Bd)zlF1iwX^)Yl#kRB6mJUvUZ<51K+On5)}YUg$_f4jkxl@x{%GAVh!+?C zXTKEngUS~UIT1qBM;+tYLzSb}$~cS_>*~n%u9E&-gK;ZY-@}Tw6?og%t!ta)geoMK zZ1XE1ERc$1h%a&;{etMtpv(&tfIAxON_=I6c5CHoRx5&vymM)Q@SoMrf=p@`C~Fig zu&YZj#lEvlH;|d3Skx;sspAYw>J=9)3Tq}3?Z3Rh?O~tGv2F7!eTC2k2O9{F?ZR-q zob`ZcNr6QrX&4fUl@LgVS5TIEx=6uwa4VJ5T4ud$gg9W_UhH-~HqG(uaB7{L3TheL zMJbgo=SibzTF(Pa^qZ6RJ%LijiP2NZX3+x&1Kh-0>J8~JdmqP~E3RBW@;X}b9Tw7ZW7@NI_B`X4Rx2T82wf4i z1WD+mR!r4evf@22tkOrLg5$=A_LnPEQCE*hC#*YjWI*&jB}JX$2M+?3YKkKM5L|?kT#F+eKXf)eX(jdrXAlFY|bxE9&h*HoYHL=j! zhnL<(DYVk8Ntj~LUUr>Uz>N3f9>rf`8`Wz!g<%Wun;&`AVwa9>bLO`^yYJ9)vUs+b zpY~o&<8}V@KGm12>#ychj(7p((Q2@Ehbgpls*=GfQxm)kq)$Wk_k6Gf4|>GKf(VCK z9+G48H@olHl^a!DH^6dkU6~%WaNh4NUh?1*o_Yp)27=;;XlV-VdNq=t1Y|;uxk#RB z1t!8^3ff00G^UmkPdPbQQ6|Xl&eeYX=Sf>8sCTN@Um$uAAr1XlV|%W{I7Y5|F`>;x zgHPs}jgBjLZ*S@;BPbU2PT&tJJv>sDs`_-bH&#NoeU4^vi8=6y+iD;f1B}@PgJ%J| z`L|7t?4hh9fO%@|!ESA6^PG<@eNq+Qp-yK%7N(_9; z7hp$U9t3x6Gc1P7skv0G*Hz`=#XznaOVbITwYicoDOBbDs>UF8UF><)rH!BZ9>qtU zh;hzhmV)*&GzWr2{K29&7J1oT+UPtuc1iw0j339uZclajwS9}WtW#)tysQA@F+e*Xs2{fuL%Yx_4{X<`&gXoA#ep_^(u0b9|plzw(lX z>HhUk0pQ8%VOE1fd~MQJfNv+HUup%K+1MdE4=RZxypG`48Z`urjv4oRgT!p13w0}^e#)QTzOTY5B&^^G0YHc~8;EpgLMx`!95_h2A=iy(&=k!(%)pit zPx=#C;NyEAYw&pMPw?kjUw=16tD8eSVf_h?! zT@x~-S_E=r%i2O-bTE%XkG+)jY3G9*ag14;>&<>o{fFakDz1qXMljFGwsdkP`F9Cw z@XKVk=VGmq)ZDnP+pjPp~7y^_Ha}>5FO-oh(f6 zLKLuRBcXUYbwIMo#gv}{0KOH3Rvos(EEm(bO%gI~YPftl{gJmQ);qo8B3HdgywP@7 z6j%|$^e97FJ^e1KnGUUH93V%RlIiMl|3jpYt|s?lB7ZF@^9$%Q-g z+6(razwJE~c&qX1)2q2pw)`yoazu{*l%Pczkx8aD@b?2j^suaPhq8i)<-zH|EJ0NI zWc*32&$>$+EYF@gnEg^QzI?!8@6{K6JI<+%5cgLL5o=UoHJlr#2l8N#GMbng`S=s; z@;a{4Nz3@N#v0!D`-UA{o)_*`dRAI8VwJO}(JsL%!T4RDZVrtG)zKmh7W7BPBF%`(BvrMfdmmNvumeXgZOtnm|e#s=tZ|R0Avh z5*lVpa-#Vm)e5*eMpIZRb}`SQYvw~t{k8*HnO2#@X1+qxgC%+1Yjf%~r$b*=?igIl zoU_;rw9yos_~}6IXg;>r&C1(I9gu8`)>hP*+elb1%$-|@kC;+H~Z zsOQ)aps;b#RE3R=k*wo*x%-l(JUcuq8XwkaWK}%9ep}6B3 zKk%g7I5t&~R~D{|XWFISJ;OXP=ma-8J5Ch!4`tR8(@P44n^hF6h0k5K5e_Fdc2dTk zqo*fxk&rIvcOJz;8rCt!YTP3@ull6<+0fB&j1Vq|UY*0(syp+{dr~dIOKfndbF`Vi zR2zBg{n)nwfgcd&YDxe{@rz*g0(4O77sP83I)F1wTv8qpYYgFkSVORd49v+gNU(s=M3e=~YYh3oY9wj|A;4+>vpndC`Qx8~}zFtMacI zd*p+sdWEslC@B&&jKCVWtfmoNc48D`_;et$;Q|?XVBk%ryJ~4^&}~&mOYO|7gZ>&e zKc$_M`#A<&P|YDgZ5`zJLu^(6#|qd=z+*YnDupxO&sqjfJrm60{4BXM_ zyCe4H(OXA#jX#DyNzmSZMep7Gu330#lCK}Q`3!c}LX2u>&Z;j+A$V+b&Oqp*>o|<`J92HRE^q)b7XXWV23?bG?FIz{lF!TK&6%;X zwa>KZarYQR5nRD2B|Nhee=vQFt)|hCFy_ABS;zm;d6ComPOf|ropNGi#O)DIl2KmQ z3K=!mqf7N3aV-gL$+IBtz;Eo78R&yvz3(+^moCUvi(?EdeQ^yFn5L32RF&IN)w_Jh zM)v$_mMknX$kwTag`hhWS+s|~BF~+jR3EsAD6YYLb9;Fdow=l&e$igH#L?dLjh+bp zl~Qtz(=&JwI|`9aHv#*wc{f)bG$#dejw8d@RT+UW55rOB@sn|xpR1cVS7xhn zy+1?4sZAg*)rTmwa-g52WyF-^YU6iM_zz4s@vOV64RB-4H9$^oJ0s9`D{sSgPnm?D zra$$F$Tyu(O<1BW>4P}3%Ph6 zq>jc?`YE1pKUbrQ#ZNNz^xw{#m?N7Sjvjww{$>Q^Tfv+0KeH$enCL@1IetE{C_eP^ zMtun?uDG5cSITk@&mttv2OWH9>6-mgb;!Qt)@yHx5J7KOjc|9tQA{|sgh(QKkRXkz z3F~aUMek;c1a!TQQrZ;8Gw?Mz+vYGfYs;~l-LRX}HPpo1AGGf3>o@lM{NkG}s1-No zMp<6)Qe9LHwx3Kds1w7)Yzu#s$1qlr97Pjnk7O11Hyh@_GDJw4?C!@TKg# z*U81v{N?{jr~fAE_J`>-h$4QJX8&QH{tqru(M-3%ou(rElv6ART(1M%fQ@v~E@rt! z)PP|~TteQZqS9yOlkvP~j8$lV&A!HwW2f9G1))URQ_Qp^=nt6qz*`Lf&iR}Et@Trp z)Y5Y1L11P*ASTP2Zrvn~qzl(kBPz5ae6Qp<;WV4-w}q#gbmtiL=Zz+vsBkj6Gi@+2 zL3X=pUa~1zV15hQ0~nT>LJV0BzqjKeMh>qAy(S}#kDI2@D?RdfZoY1L_Ja;o zM1xsjwA;S^6E+D&(gTr$=HOWAL%N$6!N z5dALPwv8MFD~v$1bts7mV_E$$z03_u;=C+}H{uSh)~%X$EHd8Dt~yZp^1|5DZTd_d z?(vUA)?SPxp=U&kfA8Xls;+8zN6bfMiB4l==DKZ1KPC5QbiJ#>-F}eh-r=E4eRb@R zW!X`M6Z;YT==&5scs<^ZpF?!Tgpfsm@_y%N51FAujm5~|S7rdivpEyeu`2GYQhVUJ z>2>eG89TiM>r1%>QeNk^lGa8VE!&h}dX4`8q*n@fG_XKLgl3RU&jfl+00=xP9ak|` zzYW_*yUyL^sNiU?>)3K?V^d*Lq7tq_7DoOEMeP4 zCo-(mECRx~XYVPlyseeErFt%Iv*5*B1DWmnhQ^R@lO{&lvm6d6C(_7C)DpuGcJuT3 zb;RX*o10^ZVxG#PMHSYOERTwtuM=X%Gma(K`)^3uV|jFOsKCInk=?4B7zc{kj-2=4 zdUN3hj5J=79c&%34cmYWpM|yBXOdW9i4RBQ%Vl~tj@fG3%PEjbr$pXAUZQk+htCdF z@gMb|eZ{E$;sC%v0kGXqEa38gJ}dBRFUdkr-Jg94{Go8JFI{Y3lRw3Dk6OvRTqr@fw+|NVVofhMrBA4rvYsBnG%Zm{DmzDAO}hmdT!CThPqUq>Msa# zK_m+D=IsL*q7IsP$yt6?2~P6kV3b$L|0FMp%Y5yaSXo|4|p)T#sP^ZLHApH0A1W z9de|&de5|~K2L|Vl2`u-L2L@UNMRj_UBayc?KGq-+s>cM-s7t6~Jmhy^TI3EQ$ zmYsagihQRt?-qvc2)$rWJ_G+r#BdxUY+2E~9T-6e+^I37?>Pf(NrU>C*7uRiMqF0V z=C*#Cj^-ADJ*WkXE~I*Z^5Dh{;0i-t&#PCmPbbk)Q5a-F304Afv#TgK0tzUNN#UXU z4HH)s2aAQCxEnq_B&gu;R*UV^;bcG|;AX7^%=;bqi)?aD&Qnw6PY!T=AiZ_5BWAGA z3*<3WOQRyvXQ->>%gbb^PHxpDL{{@ zCqT_wmeKJ2Vyotig~8(=jAraSHQ65OX)7HOZ~t^2Zhv8~^-0|K^O zb9z%9z$_G4cjSdbjkn&z+3hS(u)p7VG0;>;!6MCG-roL1)KNj>xXJou#hWA(_T`6v zE2sX)dP)IsOOWO)PsxgF3J-+W?PR}e;;lg|J9(2PDwrK*vHq(^XJw%yPGoxOiLEM& z`0j!ef2py3d<2N|C7s8B3~w#bLxlM@&iyoWkl`<}=jUeCRMn5cOKHK|dqLUacXgrP zDn2^XNeiMSAvbtCx$49k^C~m05f01=V;eP+q(5$OkfRjxcCYiRxZaXw_OPPHRXptV z)xsLRVPL+wvN!0 z2DlElDa??f(c|N32vabaB700eRQ_mauiYjythbkf<+_e1d!nRVZ{K1e5DC^l*}VlY zB^laAshbBhd&emR{2GlQXb`%#C5D$vdiGvMrh1)KiM_ki$NjOxaI3NMsRu@h7I%*x zSFT(8Di?uvcv$e7*q073x9T8lg}dg3p96(!Fp>_|hFj56RnC_le@wnqER3wR#fz&A0)~R=Wa%f;^PqCQ_=aerx7J)rzMgZ=*#u!a|ngxq)2De-s%42!eQbgY` zOdIILYqFbhF>gpV(|QfL+t0wSDoxw)O+UT1u!vGKMj+ePf{OD0lq%)ln^x((0}Ur! zPB6q~pJbF$Lh(KDw}h$GTcF|1vHDM*Dy?s<6y(kQ}B`M3_LMbDT>38#Bo) zClsV^#5Ci|;Fok7dykR^^chA>bJk(=?sZvg&7^!UhsvPdoK6 z*?9BSRlOQ%6(j`13)=2YwSce&IJjodPCoz*eb z{@U)K)Bd+F4QltOy}6Ne)3}_QTRH~qsitO@)W%}T;na6cw_S~}5v50rK?@4GMox62sIZ%N|Lz~c?ROkSu2pvt38XR*l zz0L-_A;;L$pRJ!<44-u=#;LBfS~7aOW3^QDi`&zMPlKa&Vh7jqKu8>Xn^=@M_@Pkudba|bRsnXOCOl)gxGOIi3)^FyoD6Acyfy*^Vp zXTWvVz&#k&9{qvOdm#m``@Xw8B9c9{94 zM2;ToS}J-gr3X#pRO;kV`*mosymbYcSuuK}@m;~o66|GSgxj($M}kbau=siKH%X>9ZX^o0X?9$cT`um(Tq zM&#u@^g4kZ&JQmR;+HMI^(n5eA;1^m-#XFBUBffs$MFPx>6ma+nNA*xUfFVJ+&<8- zA%nZkX{dV6!Qk|9dC8!{2Yu~3jvTc?%y@#h2hz4?zM~@{&DM!$xjYAUPb$ONvF@@` zOI|K#K)l3AHosR=UHhnOqBd()jmDkxomvPO_X94hX&TtuQRtKA{4&5Vphy~6ifL4_ z^+Q#xs^0sy=-B*>!`(m0z$SK2!>1jW!M zGmXOC?2%JeF~p2x6yeFGZ{20@{eswIeEta>N@yj^UnC9?Ie3;eP;l$DDQ`1Xfe6j@ zGKK>;#FSoN>P`G)?6Fa2qp*m|GU?kscQ!4Pgv>!AhL;3(Z8aFpj*Y<-2ePIQL|Vtf{)A^X9bD%#Rn2 zeY~J{Mb*>K)!SRi+_vA~3aALx(F3AdEYyLfr?b=o*G?Fed_T5 zZhgE_d$f62W3+7ad8m?}UB7{30zbsA7TOJ%@xLH+;^CK6&i*ONOiF_%)e)71NwK(2lOp%^oR_J>9tZ+P->s;pOer>nO48@}=_zhZDBT@T}`jcIL78LCh z8_yx>7@ndzOTUiDvII|%4s~J{$Zm!wdDEs=LJ#Ph9r>u8VcxXl$)5Le4tvUXNE3RO zHLh8?!+!q@3ovGf3VJhG7qMVU<7gKDIr@uAr?%iHpy_SSX=9c1q;xokSOtwpq5knQ zWjS_Gg`w?0OO*}Aj1%xQPhCR&kVVMsHB-Y%*K+~10C55lEYa^slWn312nK_3^=qGi zwaSU%D(6Rx_CR;)v<}J`Qu=`FkqF75wQ$I2*rahp1zn|bvDvOq`rmoqd26u6KtdTD z?TKPp>4V%q+Srxe9LdC=XY3ngHHE!Dr!Z08yJoe~Y73Q;73RjT)GWLxYtJN(t`--Q4aqpgTg59kh<{CbX#skFD05pjxS)pbdXk&4|yI zdfkZW#)46Bo)D31i{GA7i;<|3rMD{LF1T&vhd4Zro78rl9@${vShL}$M`~d=MJpz^ zAG28k_#x5N@}SG=7lb7slzd^TH7Kv@x&L`$vz6W_y*#~6jeYx8+}!f>D}UM};cI3W zeHoa?*a>MG8q$(|K3A=TH-d+(MazlhY+S9@ zJ5|EXd;&Ljl&{T@@wrEGOWZ9htP$RZ(E73+mRM-=38e<1A$xFdcsX~GceNMh717l} zCE%mg!rc!`EC5}173l8|ApookO8MWNB>lT1|Km=p^BjE~^iye5O8odYK_ACVQ~Dud z?LN>`)t0g_6jV$XL|Zp~^SG;c@@#T#rG8{`5{XEcBh@RLvO`BSyu24p22^g}GSK*{ z`=msR)PWW_@)$1&PXlV@-QU>lQhyou|9$iPKc*KO6@>o$%n#hs`+=CJs1m#9d|6I1 zBsOXtK~Rf%(}wrHKm5_}`Ld#h^J076RL518uTc!Q*(qd~{1W)m=Mdm%mG6Q(VrfUg zuIWklgyMZ;Sl06boli?Y!>@?#$fWDC_qfkD2MT~u)xg?$L@)*O2rtQ{ADZ<0W}A|h z^d2ed%J)^$>~CJ$n0ey;0AH;YV<;7Vl(s1Gwa<%(MA}^ITq%_cC24!w2%p7q=J zld*VFSh)%D0H=&IDn7o99=GdSAceCNn0F!|N?hTo%pB9s+aCME5W`T1vP8$IQN zqtxTgTHa<(o;55fD1Q^rSu*g%2Eo~n;HiP2?=q2ArHtg?tdhW3*u2Rlqd%E9ks!T@iCC@)&xBm>P~J2Z ze)(M$_MN#aJ@5i@#h9#w^y#CH0h)*3t+enu$9tDQjrzQ9VyKFC^-j=bJD#K%hmT?%M)t>6uXVu5)+;Y+ z+bn(oZrT}g?1o8WK~{~51@>{av~lY#slD+BM|~w;EE%0~HCra;E!rfXt%}IbUN5yg zNHh`5Bi9DYR8cMLg+Z7a5?ZOHO(E&iUr0+ld*(HGuR?{=27DfRym@!-QlewY32WYG zr_Y#*FQ6h@ikV0OL*WM@R5pGKluqxfI!YV%w9u%09Po%~Ke8&pz5n!;(Zr2PvNwER zyt97Jl=4BwxV}@qulY7yZ|?zvJYsNC$oC_H&QnNjA8RyE*4%o z4vyX9r%)!6K_li)aRkAQ@PfkHhaCujMQ<t1}MN@ z;IKtaw-JYc`#vPTF$f85Zia0Rvh-mPtIuEa^qm*L04M)@-Qk%ZAhDW% zhJ=yl(!LN+fscP)>oz|{E9UHo&-L;anNw!*cig-z<4i95kd1#qq>fWs`I2LN;1)wj zXjLHOz1-B;ft z0#^a|F$`Ge+bd}(j$6`#Y@+CgI_jxu_``MnZEUgf;Q44y1@AKW1HkRliqiz3a;^q+ zm_vlFFaot|snVt>W}AVfv+aZS6@Zb%B+5kg7<%5lef$dy`c%I^`0XwKvCQ_zZA*Xe>r9E@P8I@TNl>{38kxYF zbeeU4WmqhEN(B35F#wLhOAd)2s0QBoue~w|z2mR8$^Q{yg0KVFj3&(V4KTw3&A({} zE{hTl)F!^I$A77dQ}6>CT0`bZ?tV^T9WCgeuA@`xbsZZ93?s6}uX(Xs>Ek&80cB}& zZed4CSU;tR4sBICeL*(}#7y`o`8sYP##Of*_ z*Z}%00Z%2w5A8|?30u^{433nVaxl`aEccVfhba7NoI&$=k-EQ9W>|vdzEjsKvB?(l zrv-qyxp|&}2G2jO71@uZlVd<9Lg@qO5nH191&&gL-_6)UD<0~ruPosP*w5xK7fvaE zzx8k<`l$BZ*3}{iHV}&82IjbOi2KU-GVAu7-@EAHy4OvD z3H53F@`L}@buP$ig2h)svkXcYnPt@~|7jjsqYrQai99eTH}Kp%Iedz@9qT2Ss=xoR zpk8|RfYp0Mc73kv2330VlB4_s!0f+-z{T!O1^xrLc6jM8i1*>u;M*S(1A%dc6|@-o ze0jfx8>O%ypqDILo?n_d33 zl~V|ybMZb5z=+030x?M+8{xJ;qSgKW_*W1>6ET&z3u1kEnVfbrY6Cxc}4oV=PQs;wIAL~J-gao&Gq8B zRrUvV3$}&0tV{==?ttmyabl_6Re~sJ=CdHE^U$5HJ$SPR!ydDVk3DS9n=dP})_D6k zFTWuUcPoC)^OO9Z=fc$oF>1Ue;FEp;seVZ-6JaU~NisMo477qp?|p?W2C-(klV*1g zwVZ2rHmMlgpCh$#%c+|;yG3@@NkicFEdB`Io68gC7XdetPA-}y!E(@Cl^K}nVpP^S zJ|FyXAU3{pm*=?y$JANo>bGK7Q7+};nw&%taI$;B4fIKnrR!2AYPgqqKVt;&+R&Zq zwd_-gKA5~KEKbhJilt?9SJf*@qfL#FNtdjDKIb(ykI<~(^P-SKt{-%G)I1JQuOvM%#ZysL z`ZQ{cED&t*cB|juUnZmCw8!l$#i3x8*BOHITY-)f zwvLJdjjh-w<&|9uwk%3a$zb5geb1&fzynd-SY!qm#JN#V<&^TX>x_fEvI56 zi}!XIEa3V7bi~%T!n{=gH_|R*&+>0NoBx8ak~bkxdVhSl?e}=tU;6p0mVhbxtrJwZ zpsZdGav`VgnZ;kN-#@MO{ITFY5V2R~=TK-lBZ~a1rYk|AU^&2?Fu~hq>$s@J?me(v z*VGrwixpiLOA5ohwQe4$Tq$9^$nfWrSA(10Vk%5x{<59q74pl8o>S1;*+?+H3mKD4 ztheq@qQ!-+!*bhRr~IP zmrs%8N|L^Ig~tg6vBlQ6$l+*O8D=RUJfK0-8lXL_$TwXzPA&qI40LMe13Y1QtiZT~ zbatod13tQ4funh=#nYSfp>UM2O|zenbc7RG?GqQv^BQpXdfFu->1-u(5&6)J~xgMuxRJ-)@)7+ zYs!j+jnOr@ty`t*?>DM+dN0}57wr}f9wan6Wbvd>@bV0( zlod{GkdFxEp&8>jL}-6j(XFP<@8hu#`kbvj@1AQ>+quG-mR;7ncF>UAiTX2rWGr*;HA9U#OGLm#T$&}qrOFK#|*{3-@ zIH)Hb!D!_v26EMST95)T?q>XWJemgX3lfjI3nkC@Zw@rt!+MuScFTU$oj0n=&^~$O zhScf9Rj3>BZM`!GF~LNZuVMP~5b$0*{?$^kewmTR9*)TAH0#7I?VDq4FIXQC*6IjC zyP6{5TCxz)jVK3Zeu6R#jao|)^cvYc03s+Tpw?F2`@;=LAC)4spR3^c&L`x`CznFN z`?q^b{vN2|pDB2WhKxVJ2hsEb?wW0G@HNjP0vsxDWiNbiH`fRV&9$Ltg5~G;R-Xm; zb{l|Mw27yuxSAEh@U`6-i?3$s|9XM-&qO&>g{{RqEUz!xGs@Y{jv6$#AUL1Dm+pB^AVmy*DE9yu6{=lQZQo<}$5H-i7~fAR1~ z@Bh|j@W0~BPcgx0QE!SH$gh28!%9#q@fKaiCJ*u3oNXOZ63}Nyw!yxOo6*{qa$Wh8 z%dCpunYs+cJuS%2`2ea>ul)EO1^ni=KMw4r0dmKa9EHtVV^ExM z&B>as17$-t8cy20AOQ2%s!#u*N)r&RI1L`wL@H|*)4%&C2m{(jdwHN}J|!`Ti{M&w zWx0;8r@beSPvZ+rm$@-l4OfkxHoWsT0O(M#Ho>ci96QL1)yX}~^?{|Spc`Wu(IYTr zf;xaYQ4&4aI$cglqP!X|4)7k1ZCX{Z>wb_i2;Z|IMM}xkL=9Vwo|}B#y_qdmJ3tP1 zv^i${`Gmf=M%kvNvwHlrv&_n*EscA9zJ?1x7XxSqe3D^oX@?P4tQD>%7iOojF;T6B0i^3Wjyn zfusi@8^ITdbveLqTcPPFo+g@=8W?e;3TVVoiikzC{Cjm1)A&z?<#KP}z{URPIt-+` z;p?EYM}Vk(1ynhWm}FK$%{mk-ideh#9Y5uDVRR?jn|pAWq(hv)GFv#PHRTDQFA{}T z0N`YER0R0<7&2trfe=O@pnTMVQFyt3p$c(eK647Lt+e!-oRK z?~(M>j~=VX4Q#YP*nJEGtd?u=Fs8UE8tpmNf4G5+QTZxONLaLqrU9NnAH?O znzMQHeuH8gWlF**l6iA^zhhd{bkiuBC!fU5;l!~rE+gypA#LFXeWi~!|2F?YhkvMJ zYq!1aL8{j(Z@oZ&gnd#}h_umyx&2t4Bno~7Zr~?so$oyV zZ=4zu7|~?T%Qxq05&LzjfnpC}=bGQq?|F7%IFDOR-fKRoc)B1y3{*4;)drar|KmW=S!4zuM zEU43pRDRVRtphj#Sb1@ee8nq1T|S(vvyKghKE702ER1;3wCW`0 z5ta3+6-aBwX3;=TV2c_6o5ugRd$5xXR52B-pCfrj$sm_g1AzMSI}7TW0|W$-UIm0X zmA^Um0}E1~-e?4xH3Fb-k~wdi&w_Mjx(5WdWB6wa&_D>pOn+@4RNA_r<=I}s1Nn5F zKhWDWL4AK&zr`09KP;f?dplWz0APL}4_Xsvh;>1_P8i_v3|zO!sY0^4>QN%o{J8cwCzuRQUGVMr()p`#%(7 zMJ(`aKCGe6?x)P^|LUZFdt?^qG60VM(bvMW1Zg$#V#qS+iEId*!ZNu!XyH^eGHO~6 ze+&qAz9>R)g9-@Rgseh*44(Cx6m(?2FYb^{aHwIU`~GNu;e zPq2X6KCIboO!Uti=qGygk12cKNxqaKYWd!wdELp4j;|{%m&|S4yHsl?_*-4`-`8(V ze<0Po@TmVl)j3FX4%DG80Lb(r2n;TOajRbetgWD$RRI9BrjgcI-o6BG1%v$XK`1<`r!B7P>&!NjEl>`wOR zLM9^r4jk2n0H$&N7X;s8^R{`xAG{JI?K}nG-4+W&!Ynkrv>9~7RU1HbRzwY~*#W#B z+@Ik^*w|UZe3*+4z^F+Gpvvv``p#pf)=s^l`Hi%#o_1!{}ks4{F9;y@J|Wa zAfGH;a4r|9z`4+Ylym$J)Q*D-aeZAM1-OB&Sl|ZE0dZ!FbXd9Jt7mD(FL;&+;91PR ziDV*AEO@SW)xdMr0nepMf&ye0Jd3&Rf@fK-3_QzADS?^AU$ZZhn6J(&alv^-AQzlh zG@3qv0q#(-9Js?R3;NSQ9j@(Pm;7(5j0bBdtVDcum`J+?a!+pc= zsyCJNGXLMrKmNKC-ff3J*}?C|e|^BdJ+L!ir+@(QhhIO0qV3v#l-4ioI?iZ^v7_ZmHvT&gb#or1po0s0p;UeWDxrI z@BZ$mwjGs&iK;?n4~$H1Heu0ML}{vRAiq2U(P^krfRnICo$$=^8G`}HB8X#WMFmBrl$ z`abM-03wv`Gr*Ppy?}e^9~e_o?OApY4p;0gSULEJwOg z6wftxlO~C7qB(9~?b>K7=I-LLv=!wmPL!jt4q_l3qef75HEImR)TeD?pDp#iJLFX9 zp)6PO3^$V}Gw8ozPrP2Y-@%}cqNEEOt#=^MrDHmCz5oz&C(=rOK}f>O2!qOEkp8H( zjF*cpbdtSx?xK#Di32mAyt7NQcA(i?J+wm2LPj%k{Vt7lvKN4K!NDWnVHAJSdj8e- z34nm-N4F32{hbEYhkp`$xWESdyLIFe2T}(`D7s^QOlWX9x1q9m}2) zm&*?*oWgI)er3D&#+n_fI;pQW@GTDhv5?LWx8{H0^*=IQ3pectRu1t`i8)daGT+$WryI8M>tS;pX+LqxFXi2CWAu^s+oQi3578X#6D~`^M9BSox3A zKh3TVP6>#K*>^l@8mHjg^>*HlRXIvs319pKR%#jzxpA{^7|C$zw(x zl)nMg^(`gz!>HQ?H6OpbV+L5yOR!#tFIB-yS@m%jgB_Ndl#2B`=encaBJ*a@78Ou# zzwy<}wxg6NABWM?a3?^TK<;wibUU%Vg7}V~1yqy1r8x%XP1t!OYaRs{WEf;b?xZ;C z%vtgr5fn*ye@mUjSF#7;Sa2qNCUE9D-oXgOaY3kFK?U>?r5bZieEkYmy>fsW!lIl(Mz$vP6)3cx# z5@>m$9j;ro*H>UTS1(5-EFmKff7rXI>>Yx(d{guUnsyZfnvDjvXvBJN&~I6%puYlt zxoyz1iI%!wq*Todp(2UB@HFwwX5mNJ)teG`??Cm0Nx#BNv$0Xe{;Y!C-8^UdR%0=S z)vj*Wu8Sg@wS8qe9+;fq?m<^3p+;Q9eJ>*HUV|POAP)VRKL7ROi!x><_)(l;*2EzJI z$J6NubX4FHLJVZWQXr3e$7VQQ_P0_%6m{wL+LoL^~L(1~u zM~BcQt+s_%uL;EpUTA-J!#_T0NByFHM)j?~gzEkkwYjkJ0F_QTcE2eUNF;{lC$*e>4i|?>#0s-O2%hLx`L4W`Gz;fQ^=hD<1W0 z&{uG&p#|=zT9p^E-bA2o2KaNlw%qeMe~}h>t;&0P&(+r%s0~Qz+1ZI=t~^hdA62br zPRE21gxl~d@8@@_I|Np1RQ|kP**|4ttL7G}&ZdCgtY4FKWk1j$H|PX;ao6&!*s|d& zUIh|3V(sPp%#7Of+h^&;i55rP;!Yh!#S%rUReB5XNApL}R-Cf~#B;E>1Mntr!6xgm9 zSZD}m>zMhZr^*_8-*ZKsX7|(1Nz%=W>Po9*G(FY_)Ms1}K=o%5Y{83Hg21hRYB~6B zJwX!`Yunh==yk9P??8F5qqo+?rEn$v9rm)P5*pqUruX$5W!<{8c%P!s%VA9R|AJup zza1#rZ34>pmr_}W>8NPDYp#s5R_!*kky5jVw%rh@2Trp@Db?eY~9qv-98w${Uy*aGk~F2Vzpdi{m$K7s^A zItD)I%C#i+uVtIV$$B}U()PO+*^2@+^bclFqraP#4QM%Lhy@~EvVzpggui=v^Rt-TB~Z?jP? zDx3nM#uLOy)KWD494^1E4v0510xwTC!=`#nW@egPzQHX*`&<44!&7!Be*xDaal-RI z??C^}>-=~A|9i&x{uz7Z(O7a`b=U(Zml3DkZfedTC=EO)y8`e1A$yxUCr4Wz(G3MZ`9 zEBpnqv^B~=f2DrJmwhux~H3-m;vFdp_>;~3T!qZ0fBU}4Vq=Le&qtCx|s8v7F z{<78b%#9SY%@d!5K9jieJ6`I{430syGA>oruVg7x`LBpgT$6(KqJqNJKGz$Pt}nC8 zOAx5i6tk&NBBbv2nz(Xmt2Dy5&Ytk7Kq%HKg_Jbgm$(?FX)VgTx^*7y4!$sZ+CXO4 zN0h>_!KDyItCmh^o6f8}NXrTI@$Lo!X%wxe1QvO0K58DP81j@F?nd3y6X@?}=V!c} z@O*EaXIX}^b8OR<-Ly^H<-gefOzC7x^qYu)33UjvC3&05MAeD_559ZzjkHpm%NN}% zQfIF{8T~YrCZU@da`bTPXZqRXJKOo+K$YMY3&;vNv&=f^4B4@+(&w9WPGv$v0A3897F-o;mD7;ep3<1f`jCGvV!aJQC0a3 zKd^DAus7Wp@pm5|U)}`W85~0z@6-G}c_($b> z!F-Ge9V}=!G6U-gsc=pL@+O+&;7wi^I7C>@)lMJZKzxbaoA%T1VD`{(2j;3m$Mr)b zqvA`aRnW8-zY|c!ukyF^_gi!#zZ%JyI!zaH{)rDRgk0Hh3NAd0BMEx>uD4 zSM+KBc&_H1HvDc<#@WZDYg?zz7E#U{(k8Hc*~06+d>ri7f@Jo1}y9LRt zCXbm^z-{om1=CJ8c_xtn=Uk9YaK+DWwmsv#z_`YPiQ@j z9$l*%n9%N?V%_7noljvY22ZDp#Ua)PVKzWRjEXoATj+>mceB=Hd->sk=q6bLS!NP8 zwh7~5k>oh;lQ9ZWWlz0vwlGfmCMmA6i+6+6hKRx!5nE83e6tjpreN9#4D#Z*vf+NA z(&cYi#wRL1mAS5AkE%B}e|VMXw>~&~(qh}DiF*f1wx^!`NTW>gaqogLHxyD*Ukj#b zWF`E52{wk*85pWaV-aN7^iJnyshE&Cqk1S`D?s9$`)=Wm&CBtU_Y~q5kpqA*KJ%R= z&wj?tN*x2k9o0;TgtulmP8P99vA9(}wF*6pJGPdm`7fYbn(1ER_wPLGu-U02U*amn zmFgHHwgOHB$RJt6g4|1x4$}&j^&m!Ycfa~deF_k2Ym+j^$UAL&*0o@V%2nwa2%y7y zHrW+jPa7h#-?50zc+qdBTD)6efQm3{pFek|PK|B>;$c16Q|N(ml5#->+B0seD(oaN z>a_7g1%IlU5}IQH+VcTw_N{nH+z#$$R(eDrUYr|J+oz=hDY`#CGjcGGd!V@2CaLes z_ia}t2Rjs=%#;>w9gJ;{R9K#$^%I(P#emUT$-6rqJ;@HMp|sxIL)hk7-mg_KV)7C> z`=RT$YS4bcEQQ5wE?)ds*|$Nb2H?67<*m)6SY+w7y!}g!_yn{_&|U_Qh}Hbr_x3~L zqr|(l7rT9x*E+39cR0baeu^5|dMG*f5Z`swEQ*ezssOTS8FA(j=K$nD_npolM+MqB zA7W7=zp#=r-Gj%T_Kuf1q!~ZG7WsLrcb-azTJE}=zVm8)CZKqf3)&yR9-!cTX|Z@Q zczwta+Ys{4#j5oIQb*qpRFa!v`q4_3QcjUmP|wV)hs_Cj&-WK#SJcj3vKleLiR#%qH&qvfmV5Yrpx>v#$MbKTgI= zYHXa^_kBJd7%E|6k;R1BmC9O{5-$NK1P{8cf!;CvNODvczoqNi$qX@Jw9B&RT)*Rw zy{eKHsqYBLGy-nRMYZh*}Tb{B%E696-$8-(_vu!A~f{;d&n+We=jR(tk zJSHwET&}~8Ib8L&{6RkTpgTsbbYaBBrbhpyjebeg?VI&$+St_?^hsVUGJr;)kjwB* zv@1ZAQ>k)ROH?S6`sG_-A^zxt_XsckW0$_|eRCjlBzeQp125Jhih1Qo zPog~58GHxPa2w8u$-d3Y28m-T<+e5#6~=B;hTq4{Tlx82TNvrL32r~YP`hIEnm>a9 zqSh9qOief#X}h7;anjnhQOWL_a~xxGM2+FNbnWe<=?ociRoXUj6=*|$8ny}a!!a!nU#w@2l{GiPJ>Kslt4)1~Bf-|!_``4K;C(|Wa3 z4V<99!hqbO-K~1n(uoSo&*UU4Rv)l#6B-Fx7GvtM%US9(0I?|ms!EYJxsJ@ltlQ5+ z;_LCH_=LFv|FT$*jCT8Q%LWNm>)gb)ArBJy2JjD;z?!DljYP5GK`k1u4qHYmOO)F$$^uu)4`(BTt+~#f#4-%qkj`w{C08 zF9g1&ar~FG%0n})Z(@iGlx}nxf-BWI?sc2&hqy&vPxd5>a`jlNu|AL|Y}CC6FDE|~ zX19IqSWwp2A)7CIs+~%<#BG0{g=LmAP<_0P5%1x*3K72zH-qS{jDc6ERL*gf1P3@J$Uef4Cn9=dl#!BnoKW13SdLe zjU}$5jCDrfHjF|B?C*zc!wrx0%-c1sk@s`v*RYe4S21;Z7MLh~s@7_YlIu&{FaQsy zCjvVVgfy;`4D`h~dxt|h>qaG*ld)wq3BTI~=8v5|1o88#Mz=E_%z4oE9lU65R%C9N zVQb|66+NKC?qUVc?hEHwQlYfY#@B}RwAlVI_XI!|TE|c~YP^_B>`0bHYeFdzfetC(Z>l3OGD3~jw*QXW zGU6t+>rmUBiznaUAj~;FA>`ORq(y8+ZGt}_iwLnb`#_zb&U72Ab$0LQ)}q?(C(fA~ zw$9bopPlz@O`hA-7?2`7@kVEIU-Z61XZJbH*6in8g8R_SWUeDG%XDXm13e&>^%auC z$U!3LF7-Y{y%U_FWbF6M%Vup&Qivk)VIqezaoSv!w%wP^S8I%G!LJACT{q!wu1o3lLf;Q-yTWO$T#Ce?{2RG5$&+O|a)(7UuN+PoSU142Vmt62!X~(0d^s_W z>`fpj33QpR>-3^;#wmp8)%9m7-)u58_;z`3Wlb+hN2~Ar`Hw}p-Z8gmmEw0y9!ult zgG9)Y%=|`<0klSZ1BgO|I|pRpjpP|b8IR0CzE8)q36D7B($H$w1UGYc)>U-2Gz-t& zSUr~Bf*$N(Bf4O5?s>=qLpPp}8tf`9JUY~rmQkamQLbyNPVL&VTo^Gddx5-r>~-Z% zviGrn4H5PaVZi@8Yw{lz$bXzm_D84hzxUe8=l%oO(;p$E{y}i(pFrZRs^i-5GJvaK zFoP0da+#qeHKnv2LSGFH9*d`yqr})3Dz1H@j@6U~CAqRB-rRH9@M6`M>Zuj}lg0uO zUi%h66Wpu^q3VdXp7aIg4Pv+@j+&y5}bvPl%j=){CMOW@BfCvId zqh&v|8Ax&?!IAg@FNgfKdPSjH^ePY<=qErYkwC3k77u6|ukf%FRd4lvY^!=AU}X~NGk(~{NIvcJBULxrI54XyGjh?=(NQu6vQA zc0YxWKQ#m9YD~}|b)ahF%myceNY8I~Y?D~*~vEcyW4Yocmd!T;6esUv8#Xa&4F?Kd`&(Y2+5xzf0jX)R`60tQuuFA zrdB}Zzkit-;_(Vl0(SzY(U@0=vB(PqX!}wu*>iq1?)~UCsEhG-jmAM)HZs;DY3W30 z>DMyZGn(12E0fdqs&#C<8atsX=t5b`AVWrBjEcIbo*(1{^lNkrDcW>Z*w?~6qPU-P zv!?9|S<23Zy41}cTNH~*S#zzUihj-HzsS&%gG>!vA{&{p?Zu{RpI7hivcOs}*BJ?s`gmNXwN%GwI6DxTzrC3I#k=f@+8 zCIOlG3x;!c=FPzMNy3Wu337vPBSU>w?WNDI3V{80^&X8eX4?&a;;tdr=u39kt)MwQ+$fbY1D0+9GUb(tM)>7Ch|I9eM%)anp1xx5 zzfW5^&Gtdp4M7FxgFADcuTQa+-{7FX>cjt}58-tyuG~0yz!oNHCY-|up&4ag;xUHJ z$b^jZ)3Q}%O@}E4*AIR6C@H!@jug7R_06SS7gEe?UdL@AK9w6y^kTSfn?BmBIXl0| zf!wH5{a@755otSu+XXk9T1uxD~gmib-lji1@%_%#kn8g9>Uh z&v%DE(hfjl3+427C9bVI({s`L@y?yk_^$8aTPdvzg3%kd4UrH*^@?i zZ`Rz$utnCEZimBfZXNn24mgfq^kWxv7l>2NBuu%fEY`XU-p$o#&d1m6zn1<}D6X`_ z-~C7xs`{$mW#EZ$b1=CV-ou*YD%f!3kh9X6n0ClU7oo$&!c&G%C!5ehK|5;njN0(mFFNy-n<3;S zD;2Z1Vn4TzCpPgf{v;#u^ehC^r3ZW#Iq+Gcx%SW=kj1&`2pNv~)JleYuCbW3dKM~s zzF)B%@8L@HHg$jMsj7M?IZLP%%#nYk=T8K#r0bv3^YWI&1ey7U) zjZSJVX*2u;@n?F(c5@WYK6X%ODT0|Ijk{D!R^}3aetZl zgSC7fX&SLk+kzH@Mk=i*bR&h8BTNvmFln3^Nt6UoG_+XId<0Ish>3{!p%J>dbd$>m z({x}TmklfSE-q(mpYV2*&o|%Jxl6^C z-*#=#rIgxkZ~g`HzuMTXMjhTDz{{&K1kc#dtHKEaBixdUUEBk`COg8Po4*K2X&8Ch z^EhS7+55Bi7pft3sMWjsoymnp<(ja~<#9ap$^r@&5?wFw$8CK5?mdJkqxH$}#>GVQ zo)(Sm&>j{{KUQpMkvMo?P_OQL{o71ouk}}?B3I1-$u?KdPT)pFBQO>s0j8M!CO_JH87Hl+eOy~)|{s11MBaE*%zdwSfA*WV*WNtXdf=sIkyXUUwVLBe5B3UuZ-iCsS2*?N0Gk6kWQDDt7PJK9 z+W#T548F_AlF61w2sV*N1WYm!i?Uv=MX^{@L@`S+u{>{e>s7_F&s8Y7BXRFs^!{K6$*j{~bw{`-3MC$GFQw$-BUR)<4h zg+3O=L&gq_q(Y80Fb#Q#zkn1PIYeD*LT)sFNo!FgU+J;q5zk&Y-kM%z+v?wXLpWe} z1}_B?XI{17J%ZOks5+cN%*;=*oBHvtvM7Q=fecI2hG@UlT)k3tiPSg`saV~Xg++8g zcqGWR=e^J_ctxovi!2UgGyBSVvD6NIQFqS*(>d&|+WQj|)>Cz>_wwd{g9nTK<9-|e z49e**_x@dIr~d+O`NtUrD{Vp=vfL*fY%o2FPcsNSeb?VuPk!mZd5wz{He|H{9(0^JlNPJlst7P}rll#TbXWbOpniRt5ISnH~0NS((A01C?>Vncq7>3A3a ziAR?M%15BeL&ZR9$U0-<&^07=UoD~)(c=AClCZJ4z*pR(Ie%bD{`5m<34i$D{iN#; zEB0X6qo9p*Tv70ofN#(OIsBZuB4`NSSWy`+k9!$@j;(ijVwuL8)^~2?WhulAo0>=H zUY+kfCUDZMVpr*vomG2xwl{9QF(pij!-3oDtB^$wEhITxk{^&KzeDV$QQ1ZU#Nyk~UXAmtW=;;%SrPks*|HrY+FzI7MaWm4dpTARuFq zi&m&P^d;aTSSObs1+Ry6Y4ud?%4dov;H~&zyw-=-wB!JvS9xi!*(%328Z@iL9&^3T ze(@ioOaGo-|4p-Nb=(4C$dEk=If9Uk4WazT3Gt&~irunml+C#7bjUE@uBO*;#73c5 z73W%TqD}WsTd*|MVBv~o7&!_l6{wR0n5TN<=yf!_FHn+~JN>F6*DX}noLy~v|Ae>N z!o=xhL(8cl*VECL%=SsG>gsZtZ${kCK-6QRO;uPix98JsnUq_B)sOt_-+GT8_wwvU8^61G2p) zX_IG2P4%-UcNoU8&X-P*O;@#T;R}=gU9SH>*8~1Pl=rt-5tNW-3C)7yqM$RBh~e0U zz+iNs4TB8u8k3QbFO+S z^5WGy!yN+t*M464tG1FxJ+ST}4LQK_VGV$2`a=h@B#&(d`CL3p(wQln&dX-gDgd_X zeNi~c^b`*LpxV?;K4ACTDoV}DCt+61o(7-fI8cJ7vFG}6g51r#`v9d9;ya39zDIkJQK5$ z-fqzH(eGrSAg2seY)$1|F>OTgkY%yrGScAEo5{lPb7q3l<5kGn`0QzNg?1Tp8_l+l zJhlZ?^KNZnMX|HDCtj?HkI(TJIDRg^WG?AE=iY&+BeKKS!leJI1L$y*E66J&k6nX@ z5s2FLU@y|+fgH~|1B7S?uZWj3iTD4-=Qr3HL{Mo*tGrtP#M^>Y+zj`A{SuIzBdq}& zj3-Q`Fwu>=rtuV&^}fEIlc&_itweT%@b}YKLWBn9yhNN{IjfO=4t{l6oeG4 z`GHAx()5mR((9`muuXSQpO-4K zV9WiLf&EH|{fL*Xj~PU=udzr?o#IYY=^0`-0>d5!z@kR_DRbUu6WXRF+P+4$39Wi$ zc|F+)L_N5zI?bK8++Rq#YJj#7c8UwVq+8mIn8>ztQ-FO)Icth528#S1s zzZV`yf^F@0Ua60ff8te-#XhZ6R{qdKY=p?Pp#jsU84&YdcnJpJPwz6)EztPy&Bl`8 zCUjXaS30bbSQOK+A2~*w>0ny9L3nq1p&YGI?h*VvAl)e`Ep1m}?!t4*d1b2z%lGRq z-#NpLUosP#0(bt7$v_u_bYB8;!}vUBXB7d?(7*m&3}9zKg({L1LSXNLD)YIAcn@&G zUy)+-HPQt`5b@;eKCRK|qurw|9@SZDax=MYcQ$V}OFD3vkX-u>94UVPhI~AA-b;J{ z@)q*-{4H4*sDdTgP|IKZCNeDE`iJpn+YfeU2PZ{r&pnuXWHPXDN9FZ*Ny2@HkNEXu z`UG+yoza<8fJNqUuYW4k`60pB5mcyhvg@LQuO3l%Zh@*1^5*1C)%dinmW~m|i2p14 z?|fp^uU^iv_SS>03Ty07-l<#MLb(M>LClkc8`o*Gr^gYI$ss?x5x0?Ii-SQ#ai0pO z@XrNurym|~)J%OBs;S{u9V7%hST|iDP=XZjf`WN(!wj+wqjiGB z#He-}X_vh)mqrg=_-Q4t>1(X&ZS3$F32f&#`x2SQ@Q_g|gVG?6m-1DT1WQ2tt3t2> z?aXR-SD<8A)MlOw+W+E4qkf`*d2r;5A(xjIsbPoap^WY3F5wU!Fe*$9`_Mh zl13U+w5=lx;uImY6Vpilx@FP1oMxpLas8=|Z!*3kyenw}3om(3Yz)&z2QL*MWq{D_ z{2*csSx19*>deH0q^1COHxx$a2{lpr-@W`+r5>ZX$k~7TXdz~^toT8>+{Zb(kLcXo zr058w8{QoZ&%e|4V*w9xJFoNW5recA1oI9S2^lg;b=0LhY%&$6#Jm@s8T#2&r1eX^ zL~RST(uGdH?oe<{=sw(!FPm>94|vfF=bMmmZpvUyMAuWX%pn(F#M#Q)g^34Emr3{h z6;c$6__tasGBrNb?gdNBSpb+Bte_Kb!dpXz7?hYmTiVYxQPQ|wre)vqnZNO} z5>dfF^z$9dFS~ARUPk*}M(@GbQ;`c%7?7+S2nK-1?t$r6GJTW)DT_4#FiT7AdT5fB zZqb9=6Eew=xh*zup5_0hue5W6&+%1)g%4#YK+VJYTx@7kZp(|J<|65Y2t+ob$bl=3 z`mOGC+tt^eEQC|{#_j4Yjq(Xt?A$hfv^OW}h{C6ZA|K0?r^fD!sqXA0BN8xVd=GrZ|HhdZKHaL$D{^nlP z*=%QkUQ^EyRrW`tZYYnY$=$uYDS!9<`l=h$&G$@Q?tDN$xyPEEJqd=hJ)n*s#)j5F zdD&3MxNIF@h5hV%Q$ne+U{*J$gy6n6-PxXCrAQxC4Up_`k+yKZQJLvG%Qs%T4yK_? zy&~a#Tn7lj(gW%U#8~3y8Z~+|6h)^&W@SF5;p)v97t`%L6d!f?u0g#XU1pWYXtVC6 z@~zqwiVFpkvJUP>BWjKD^)etG6oyX#g?R_=c0WbrkuKHlIk29b`!>1*rX-hD?^X@d z5@Vn{iLCW;!P|wL>7{H z93%lS4J1evIb(5|V~btaU*kANPC{&$D=j>Lmg!`KO@G5FmoAkvhlhMOzSF4Jb=!R8 zRgvY5M-Gr7|JQzEQSc2sokV1wB2#T)SqfKGNx28+8~K{0#6(1&rOfNU;qI)sjtwrE zI;^$rK!Dc+2ML)ig;mk(RR~^%*lpmD9cH?bYs>-&>*t47bn#Hp+-JuOD&+x>AzMasFYHz)Vda1j|7x>ZglV3O4oiKnJ zC(o2|Jg_@h>hYHHW>z&yImA7p z8FBZ@g=00<7btohP%jpR5!|&<{TN0rB$Yv&UCXLks>84e>jtp4tP;QLUeT`_Lj8jM zE*2e%^dRiaYuq`Z`z*-vm{_^S!qss~9XSE7h@{gyZ>Qnc;EX_k9@|%d6aShzC6~_K zYHzw7?unoseImAVw(or7xeAi{rf=wiAQo{J#O(sE%+^^~&WTa%*$SwOV}Vs?UCVhg z6oQ+rRfKA_*2up+qc|dSKr72~`C*F4y|zuOBaBc3<7{i*6IcRk(T6eJ1NSClu}oY} zj$MB1*gM=NA2)gH0Jk&Nl|HkNvdolia(3^cj^a?;H5TB``V7}juGCv3J!_h^W*B}~ z?zS(riFS75aH#PbuPqep_XQ-k}T}e^%CQ7eIZKcbS9_34xf4Hc6pzHQ{dSFzp zaZd6^To1Gaugx68E5a*cblj|cz*-pqsY6iKH_dBZWu4+WjY6;?@I2tP{{xeE zigB%}u^;&akj3liZ4s=ALGtg|R4JHcn&!n)|k5x#=}VNs_ntv}d|fBy>rV zdOvshv;Dx>W(V(0r&Uu{EnsH%Fr69ctu#S={oYzdxVzEi6TH*)-<@<%xgjqr!l>Lo}Z>$)HQAce*FaYFx(5NS~aEkQ%L_+L#!zV~n%kp~1;& zW+-g`o~6>u#<2F?MG(b z_i+;?)_oc*=)!xJ-KE?P>DCR!c|BA$<6paaR`sHK1|N5jmpKG>N#;><44HY16lLhP zAG*h!rdu`GIa^`GK8$@hYMU6`&`~g8r9u66@~E2k=d>^0wl$I?ZXXQEj zLmb%X8c30q3J|%eEE+r5+XVlFYRA%R#Tgl)W9MFZR;Be%HTbXb>v)hGJ+;j<^gv^c zto(YxTf`FLMsQY3MXasW#5W$YV#IRIUws2--;Qr7(2JHYb9*8`+8K>(ElX+3^=0X9 z%1PJNC)SvSpwnuEn$gUQU`FF_cYXUF!Wl=+TCt2zF&AGChxnaf;Rz@0GaIg`GCNcp zRntZfFE}XAq?;-^qb;T)ey!IGgrrmH<4wi z=J|N4EBmeCZBzZ$Cl-Z6u6B}VhD5hfo&E47$}O)lQ#^Iv(lpnMEW{@{xfZZZpi$ z{&ci1Z@8ilUQy*S!s;>6Ggq0x^zc{J<4>8ydW5WFNY8=lH1?+{!{D@vp3zptj`(x( z4IXbU)vF}NMXkEgfpCQGtqd0iY1WI`IIffz{;H9IxmE7;HYwR3qi=ieO2)(E7W>{< zCgysczJ2XtGN0;%q1h^EoMXT>Voq`;^_%ZAsjPJ+Sl^d1S<^}2Z z8(nbfwYRU9adhM#vbwae)?oQoi-?|F6BEsqoM*>F2QQD|5!em9Xsicweq5Uv>i*mn zdl*A?wqvb_cM;xO)w&+;c056yGX6ZeAk0nvQfzeRg*&E?d=tsECPX9Gm^iYstoINQ zE6fGOr*A7+Vi7?fJOa2H{`)7QZJ!rvVaq};+)YjYzG<9qqqM2l zFR+Js*`*SR@;;%Q zHl}=_$UouI=OI<@$TR-$!R!;&1X~cSpiFm%XE$ld#?&f1S5*kA`rDp5eZW}4(Q<$D z)grhZmgAL@>Dh?libk@$uT!q6NIyuxOv_LL;}wtEnLtlRHL4xg5H*XWGuw3wP8K(P zeXsTU=tv#UVq6TwQ*^KRGM(6dGBXY9+YOG++Rhyu8sC|a`W$A~qvyjhIMJ0Ds zS($5kUQ63MtgSMn;G5;ou?C%}UI_04zfPG-K&~LH#)O2`kwxKEkL1mvn6a0Gi*K#W z`m}=fp1ax6`y|1vg5cc~op?7o$x%3Ay)@r)2Rnv$*95`Lp#!po9^0#D$eseP=ZZ3G z@39bdKegDTAaJS|Rw9MEhXwX`*?z$+V4J^pZ?+M7?{!YaxEjvK*Mpq6C!QZ}C%(37 zL~VeCEa3XCAEFYSu9X!Wk7mk)&|r)dMPly3Nc7VAYmri3>-ZSOII!Z>tJX?l#dvpd z%2>5{SfW$v4A;%JXB;mM#XE+9Kq%y?-?Ic=)YT9()3XU<*LJ>mSUxhZf_#i?A{HyA z&**WG-^d$E$@17ktS{*~)!}i!_*$x}e6J^#s_x7yZcnxp5PuPsxOz;8KY?%6jMVYd zvpUM;vZN5zByZ2-%GL>+FPzX7R*4jzH(NuO%%jzJucnB6)buO4Q9_mNHsao`K z?F^U%AotO(N%kZHS9IAGSM?#4&CvAKeP~z|C;~ zcazMp`&gnz=grL=%V5mj!NmN1O7k3b?s@=KM)U5$a$J457aj(Yb?}(0P9uVf_T(6{ zV+IP9%fE9A=ReOcR9qY#3U~{pJjLHwv#$ar{nNm&eT78k;cy&0nI!?84~T>g zbwG^~?JUj7rIXm8>*(|6T47Ew>$a`=we zJA49BjD)9G1BY2mA}q{3&&rPtL`D(UZOBt1j1?L!y^~#gUOBe#P0;q#VPoDC$7}kD z>;2`5qY`s|YQQ2Ypk+N?H2xd_z6v#g2+4=MVUe~5D(+O>sq!~wN> z*7oMQ4uPVP7X^n)ER4=tweM~e)9%94`<#)t*%=>mI0tauL@BU7qGYUc-F&hn-?AiK zcrlG9P$Dl}_S96Qc3e7tKet0}*g}32bBaE}2U6lpZxS~ zoG?H6$su)R+(oJ&0AIz4D1{q9FiUWQ;1*4ZdN8%qxhh%c!J3Xug?emSnc~0#s7^dX zgeexAnX*asNXRJjc#Ju?|0Uew6g3l%arX-oC_$-rD0pWyzuc#u&!74Y{q`PfX(bg0 z3y*_*AuO_r>1Fc?i+YZR9Gcyv)BFeGfWMdHbJRma5SAMq%GTTqwr9S`L>dSJ*FHqru zyFWL@z1&2Qx3u9~$J_W=>;n=qwt|lpj-xpnzLI}BD~82zH=cx#edd^eOjeE%9Q~sk zU++k!XQ7#km;sVA1k&$o@mx?_9+G7{kg2pmG!=&$oOHalY#O+4q+;{v?uYcnSJUhb zyfg>43Xfo_gjFZFn5v>zeP#KesnMM?_<$WL7Z!ra=_#m=w?$Ll{4658Vc{2FDvx*P z7vFR#?dRoU63rJv!0RT#SOngu>+-;Pmp-55%(##Rm|9UMHL3@7Vp{TeFAA>;Koa3k z5vl~$SJ&Px)wg!sTx$NUwz4AeQ{ReSxJ!e!A$j+}-q}Nrp8oOk|IMoFKNs}=(Z3O! zAvC)KI>^z3N64iHnJfgOq7fhSGddgpc$n%0BsbYkrzpool>~JyQ`-|d-iW_htt(6d zE8Oq>FaE-w_%r?&|C{RYXZ$au|3aboQ~nnYf8l2Q3CoUuKk{E)M*iK)|H;eczhz*M z?-C((2d?Zvb}U$2y{WJRkQ#bcI-E`tYJC;bjfhfGmk6nD zGS(?OPa9Zr+`ap_;%k!xv)jo_@j;|R;JJUt2Kj$z9)Bj!{(o~B{70A1Ke}&)LiT4E zFn=FW=HET|w}b27J@`lCZ{^w_jY0A*Bs~&LX*U7@LFj-Pj^gfsd{{b+3a$#y0Dw`* z?6gb}E`BTuWn++MYAfTH%GoK0hO#pZmR-iLZ4lmq>w`!Q8EAru)^l&CFX{QyPD*7y zTG840w4uBYg}j<)C(d}>uD4MM^t87Z*rmGBoFob2gx{Gk{`PE5$H}irJXsxXi3x~2 z+w}3jyRZicgZ+V5BXaEbUW%Vqc$h3H%nZn@TXg*5)9l=cUl2w7&6V&~e`^y-fd0V7 z@i(%jg*;~+@PfPoc%phu2<}ZQ?(eUFq4#^g#~k=?EhPVgi6CwXH;@-y$P4dTLcjR7 zbOF@Rf4xHa^tWDHzDQxxm4CUY^Z%$0?XSWA E1sTxLmC<2^c6HTU@|d6w28dwF!knNr3khP{QCZA@K9JLok7|L9GxH z`u+R&Ls(S!_aP=CA}lH{CNBQ_l#rB`l#q~;5Eqw{k&=>L2@Y{dSvi@NvcLcS{UN^} z|NRvBT`3_h@%xVd+97B`$xE!@i5w6X(m}0|7ZR2i611bxfL2k!(Ql^yeh94)77-N# zBuPnw8){bp@`Z(00AfW&M8Mrq;C+;cyr_cqwmo9251$g(xv023I^({C?%v8)r6U8Z zb;hSJ#YjpitEjF~Tfae1f8!<-Q#11&J9pXav$eB#aNK|NnCo%36Yd_qXZ+6kp9=^K zyBvNc0vCBT_C{QMLSj;KX4b9S**SmQ$t^4@E_qP;@X_O{>YCcR`ezM|ZPfOT&aRi; zJ%dAU-wlt9j*T;zQy-^4ef}~t%U=Bc<0oecUjFr)FCmoh|6uDMoc)O}dBE2Sum&RH zzxfhc5dltNc@a_VZDI<04vU|w1nc`jQf?XlDfu6SW2fa4M-`kGhwV}|7PuP zoc()@#r(H8`v+tH&{#wP zs?Ak^k}zs_2$!29)kh`F)7abI6^(t4ymX$s{JL{y@H*zgLvoL|0V33xVzrCIjsB2zM~=9Ah~=*GbLj6$n--vIBIaq_ z0}}#NYp=CD>tG&>?8+8PV0eqoH(}@*Q_l@7G(CEbhDpOW8(g;R#OK5Hw@i8}s|@6} zeiY_BPUg|zWdTZbp1mQOeQipV*h(AgYNx3+Ya;#Iqw<)T)L`CG|DulKesu2A#j){T z^=^oRV`LFJk7!D4dgz<&EH@F0$jY;bbJbikLO(^h2~F1wW9GynR@kWAK?4ig)7fnK zXf0Our;VZ=J=K_!(Vx_t_rKLv(o!sXl*ybW+T6P<>xidu>brzHAp z%c0)Hh3F@KVpQT z)^3`TwHa?a{DetPKv$BJECY)1D(^yr@$OM*VtMf9dBe4P2l}KP13r7b+UF)?*tE4F zPFZ=&2R*zqNypJofxkkNz_ z$jh8CIfMBN(Hb=UfTuaz!|6sV0 zDz5Ppy?i9)!SlC<<@X26MnbL>SFfwOrM|z#^}&HeJ-)F372^-}?7;Xha5qc>CWgFg zQP-lBU?A|~F0+OYk$048QoQwcIEQI}gK`G5DlgH}?IFA$v-QEF7s)1HTnBB`%A1n4 zc53>n1h2fb>z0){Pkn&38ce?^6cnoJ%-x0z6`6$G_<0iH&S5Q!PK|CC!CL244ej#Wow zn|-&5ZBr&}X=E#PC7X_IHsQD{%(9QQX>EW0W<_OJfbPR97INj|P%FN915TQA7Zzuc zm|b)EOqV!%-a9f*weY*M$TyRo0-7-tEeElj%2?s~Lejyab`62lg zNdYV>0nrY^)aG>c-$1Vvp!{6qd5734Ee*MzDNl^njE}l|kL~L?TM(dEueGnK^mgc~ zXPKdsQ!8{_it(C&iT4x80Gj2LA~&wfSZEDR^4Y~!E+LGsBnZ7RJoDCQ^>MFw$1SIm zV%)a~tJfu>QX5it${!N{@Yb!BR7v6~V>)Q6l+YB~7bYfh0b(RtE&Q02Wpu>+yR>YAhBMv0u@e zwVL942j;(J_8Bdd4Ez{#J=<`hJ5<8q%-Neye1)aLcB9|;DJ{y)?EwoY4Y#sKrjT;h z*D3T|qA;%y(#K8um9FKX6OOH0$duO207q zPbb9~qCbPQEHAQh5UJGy6cF$MOT#H6CD`ANozwnkvnf}`!0lO8-AHi9WM-lI!>Mrh zsrF2nDlyfJXUl0Q!kxod5=jxFPhnyOD4Av}-U-+*l=XS)b81rni{Oup4mBAvRDYg* zR-07!9=mVgeQ^5lih;;XuRkt+wy)W?PHr8T4HDGaa(Du2)hZ*HA$=TzNx@RrQ2wSN zEF`#UG2hlNztOVU6s30iLj?+u5?5(r2ynsrf+ik>iVAs%C?w4uk%kFh#x!JiPZ)2%C;mlAiJim4s4y_RUDb%%cSL?6k;Ez|3~@r| zXiwb*sE`n32?x<1j350V;u{iLAz- zrm#L!DQVdl1#6j!^3Fh6O!-hmTx}n-Mea)(LK2SUykpkkvf#kt$RKw8aP@Hm!HJ5k*EA^f0=socP) zJj5OUr5^P4j}6HmA1@1KOH{8KU$bS;Mcqiz-I!DQ-P_@b_V-byLL*H5CC4A?H514EQRS~4VsXz_yi`B11m z{~lpSU~2B`S{BBWtuw(-7XPk*Y&=i?DWqPkphQHh%13;c>lRaYzZT-FAI6IDeE3C{ z=u%)hf+_xFVK}y(R^ygH*nlf-HTSqpimi#d`j)pdU$o-!q5u`xN_kcA4YMIC)2<|f z8WV5S}_`Ay_!Mq%TL@Z zYT{y!YE=8Q=jh2-NE7I15~0@dQ15ab`;OM`6~XuemBzZ$Ho;N%(5DBmcYQEm-27%?oV3?Fqtz_{CWQCL zdzdG#rn-?<{~(K{5Jfw}8kF}Mt^BH6=C>>@e?|I_!QC%C)A^;8K(vZ2;Cu(tjVQfA z*5V3j3@8Or58TzkNeC)?Z&MifdCr4Z>D3pgVWTUzNlbRuVX4bVXn`U z(2AMtrMie!lkSuIs#`4;By|eRgl@l!x7jGN%3eeb)nKc5Na+9c6B}EPsgmn>0D~D6 zy-R`j zU2wi8KL3tEL=#>C1DgYY3z5xR3%_6+FkXD7Rx=)v@zRX?;g3UPkD!NRAxf%|4k?z~ zl`okanDtF-$PMS}3orM>NkH3cSqpPH+>?Yi!;l)~G?a#}U5)E)Uk&FmauSD*jjfpemckEIELuApg_!K3L zq=xY|AdA699R-H9EK0{UZ+nkCyMb>;Q-g;4IA{7V4CqRn7CMoGH|mLGJ^%ur(JX{_ zWH+aA&3T952s%a{zaJw)SU-l#I`IaNIlGiw%xQD*GC8!?Xe|w8H!6uW*(Rhk201^x zC)ec?t(Mb49PdYD_p^+;44vrcPNR4%080#am*Rk&WxFhtUV8^YVizk@m5Ki=CmxrUz)Or=+BXR`%crZnLvBpQI7Q09!+ zWM8BjHWw*6f1cQz7<|V4xVb`PrhaSc$PaI<6OIOvp`qLQy3A(~l!eU)byY11#&(_L@H_C=T+5~tEw7rWXZ zCHzG|urc13RUgAMWy-1I@{S?xT&;}4fT2K@C4x^wX|G<6$o@g=(Si5#;!>$DsN5wQ ztXCgbYb1)aP=tR(1-Ud2hDYf!kXXMc-)q8q!u&0-hBrDYRz6#qURL6MVui%o)MURNaNhSrqzhY!#(LZXAn9+cQYxx(E1K5BMnrWmueAfAwtneSXG|TDH~O zx}n_}<<)zFC>NilADIc%L7!eO-hPYxK@Dh10}R$mq!4Dav53qxoW#frjYqb=L3D7s zQ*#28f(cFfYoi87Eg|vz{ekje&pDQtj>*{S13ijplL^a!hL=adUG?VkcbE$k*AS^{ z@L}`AwZs^V0zqbGS7>TQrnHNO#}?9)N!pqpbS~X{y)7fHXpx zAamBh5HK@J{Jfv!IEun~az&F>nbMsNl?`Six#2zjJq^*UV~%Tf3cY*t<8t_VmwsSf z$h=iHjL^9Ot_{wGdF2sXcq*sUNP%Znc}-4&m^f*u)>j&L`({_;;JWy=&r)x@2EV+s z^0DUOx5AweJsYZCAX;kyDfNQr_p~;QG_7XN%Tb%RzcoZte^uNseD66H^te3o+4zAk z3Kz_`;Hzl3tI4o0CyGxJpw1hOeMV$v2QOn23S{7EIwWtyPIjWHoM09SaE!X>&}DjVMc$elUhkjcrW4n#Oj{eUO8KbH z$ih!WAs9Gxk=^{1rbw1OB9-O$7%#)}pZ8{wIHxM#eA{9fUW^Z_CE5r3x)xYGo6qcd zz4g%r-Hqqk&Rb?APP>IG*i|93hiy@ce>#{Fv0|8h_6 zr4hW&swo1^@_^utdUrHJ1*p~1Cd=2kCFD!i3Bs8Da2V$bE2MU60XB}9(zxoK|EXjH zku4HvY$FnEKn;?a%>M46v`1U_$l%T|4=cJ*tFc3(ibA~aU>)sw7a5`BR623ain|Zz z(n(XuqDQouYDoadm(nDv^odjsOU<>Gb}k*RrZ%rtJ#W0(@5Bw;ErXqMbx`XrYbBlp z`=bC=o6s2=Yi-UiZ#H~Mkuf!r4#ch^=zFzVM>B&tk2ZA$Y`#g2vg&IbFZSiWY<*xs(@XeYVX6LjAIeIZh0Kc+fWo9bpE`aW2lJy6N|3%sUr&KkMwHD zwkV*;lYz?^P9osQ7otR4lx^kZn6mG9!hOXJ2O% zr|s77yYw<8Th?4>^ZJ-1-`6Cbnmo|y{kV3R-0+x;L%p(H$P#4j4yTI9L z{;F2R!CUcWO}U*GkIIjW<(#p2kn?KPV|}{LVH+oIr7a2CTZrbwcEPFlq&K?do!Y?848^nozh-0mYzdy z#}0`z3AOj&2`ZX($)2~G<_zDCjQM&!|NQYJshezzqRB= z)1em=PP+Gka7DP()YhP17UWj~R2qq80};{kG$s^pf}JR0hL^S(C5JiW65}jg7|)tq zBZK`nF@tuPs^{Hbw@q_!Q{s`Ws~$hQ`RFW)H_Lu&V9r}Dj!2rNH=j0de^FMpT~*WX zk_5R*fC?~pK95FZXJ9w8tiUZlg;^eKM%{Ojy^F3y_l@e?T2NK@y6Gpcy3N$jJ>r_e zp`4xkyOt^}O4|x9B2N*XxiEA5h)>V@#%IUSCe_;?KgzV*JYVY?v2*Pw$gn4~OKulh5|f0j zqEkKh$LLpN&j#2w%Dn2=g!W^qL#mm4h!f6|S!y@5)->wMY1SC3uypd5wS4aEJYN*_ zEJq~m$+nv-6}Ijgx%gMh{AWx3|M~xJrtC0ga6&6NUTrD)r)_=>O>WFF>eAB<%ThYu zEbPOuYOn<&O=bvCiCXG4!zS2Rw7RL`7QSU~&>wiqK8=~NTc1l%Q8e4%iZ53Rut%W^ zdk82|mjI=PVf^4gKlUQKAjS>>YHBw+Rou>O4gTnF2<$=HZ0mxLJj)jJXE z&t0|f8rP(?X=oKaBk$*D3sC320QnW5;z_JbTLz?vb0)mu2vDa-&i9q~_wqblSOuNe zt+ppGhjM_CiOKgs`XNPflaXE2dsHQ=Fx za5zKL$@^WYr?;_VbVbMm-Nd59*`Y0NU0BwyYnWf!kS2z87h;zQP>MiGPu4(da6yL# zLy;A{O9fp=>obR$W~_-*18<+mHpgGLwC7L&IWzb*FZg5u%72-s$G%_ATkl&oiB`7p zjWRK--hEPM+eNjTRr-YJ=vMNZ(6Jy+AAFH}4)zeBJm6ra6Lxh#u3t;-vuE|ZgSY{_HI1+{*9})qWuH^~6f4?U{Cy^u@F+0&+wi2n;i@xMJ9h94eq9HHpTcdQ zKqQs`EXjc*G)H21?#wjbcF%Cb;}g4|n!D*-i>8D<{HU+0DD=z97C*(^2({Xj1J@Ip zXpAEm#gkTB>b#jS?Vm86*DepvL$|4tnyyKGg@Q=qpU`9GyN5zcSlBenQ~aWhiMEV+ z%MVSeYkH&K91?#z@SjNr5stDV@mEpON$^1o{6>7@mRmdYFEjh7rXSw?uAt;$D{%W# z7E?C}_!O-r)>l!lyJx-+Ubh}DtTe@{rWv#tf2EyjzH_R|oZ_3l`TbML=e^Q=Wb`LF zt7#|jSc%nabn@n!R+h_@U;RYLkx>`(ggd?|VWRK5EcIVI{Z#?P z?J}i-9)&Yk$}gQSJM}%JVjE8)e`37Z7Q^xg+6sM)HBq!stYxo zdvbP#&BtK@3NT<(3rn-@53`>0*2A^T4MQ)*1SrP=wQG)5#)~^FN1h@5q%}jF>#%Dn z?tzuGH*0)WyYf_-r~0*L7cPF+p2Li#pgj$MLY4A#X&K~R*6ojQkfqRpARk%9KMLhz|r)flD*Yy@HQoR4&Tf* zg7;p{I6@d9)r(-N?23v#d+BI2u9xd!e$$aLzx6{&^HAzeP04$5SN_|p<53_1)P>>> zk93TOWKu*4CZl!tceQNUg17EoX_0QetsfO}Pqvo>>|o3jyc$0x+}VkWY-87D-N#jF z?j#3qHgc^rJNCyf-?bU(GB^Q>w|WSX?q%h1$Sm<2=kd-{M$%)vgY5Ox@q87h_+vJD zf9&04@VtJL&~zH!6Ttf%qyx>m%adbaI{6#=nm;fi(=(n_mA(r0TP^|yEF9)2Epq|b zt-~9{9sxw8eJL;-w$x=}SIt;!$b<%5EFHZwKSwT6O?S*I6kW4(>7LxzP038ens?GA z8ZGq`qv%)|RG{N+YNIZrGcm6c_HpXt!Jmtie_daqr6GURJ%;UaTnp&fBhc zmUB-wGZ`N05TIBmoG_BOCx-_6TQO-l2`&wp@B76Q?iA()$u}H~JenHoPWv|$)Bdkh z05W7}Tqdr_jSqf3mW~#JxviA3z%tMFU8ic?zmG|NJwzD6)O(?;Lh2ukIkUJ-mDGbp z^0%BA{LLS_WG!}T%Al@&P@2M28O_Ja%?A_*<{ZZ9bxz74uQGf$GBqv7O_sl1|Ebi6 z45L|xf}pXZUD=I_G@0gga6?6KT>tnFne`RrLwf2?!b>k63V(V0-(8X+JSca@RCw@C z!db;|FhLG~a=_E|kG)3WGLnUL_5ExM|LBF?XwSo5M)NZ4a!?_St4H**_KY++)LB4p zOs@G}jM#F}`q+YxF4r1rJ!II7!51mQ>-|ZDR-;}vDh+Z>%Mu6)6 zr|FFf2c@R2CsX|iyP!lB=eIRK-x}J!scK5-ZA{R$SYu&ci@JQwtuq&Bq_RT)9=7*z zHbIhi{#lS`eEoMO>$}O3lT#OVe!Mm^yvsk;?FdV8*V1Sx)BSw&1jkXQqbDt|sft3I zCwid93!69o_UEtNM<@H_c>1(-qmM7U8}K_u&ug3sJM^ETihtJ}q4^nb-+%v!niS zgz)fnYhqzjJ?9wzK_UMUUfB8tIu7r~P>QEd@UyU0X7zH>`K>OlOJrky35H%$N2!K7 z42aU*EHbk+X?)z|Chbe3f!Da>Gk+=iqWx9WFOZ%2la8A}f5v+MD~A|?to4o`3r z;Zi>a4pHPCXASunm{0snQ!1a=88`mE)AH%zjOF3tmfaUnmaS(BW&o>iaR$b>!yN1tTD}b@h!HaH<74 z;OT_ww@rs-^8mDQnmXeX{<8i%jrvO0tL{Vl=hCac>N^QLu;M(+X137KPxa}lYIDf9 zE+y*Ky)E;}`4e^e!h~cvjRG{_kOO z*yJY6>2UNe&a1AVC{%C>17fbZCl~oY`jdY5DE+rj;ch5YZrRu+iN@LD1ATc=;f6>a z7NGQh!r=9!Ds(#>Tc5zYQ`)}3RWZW+IO=8q0P;ft>ef}Bz5w-fC8p=P^^M=-lZgP{ z7{NyNb0n?`@5+d^8h$?v@Ug^5T9Y{knm05@&0qXLI0Ckv~jBg*7|NUD(uSTT$xMz@dsNRjIm_R3Xc<-629p)|z%MNN?6IZGAh%1sYj&}_yRgCA-jUH2QeCKf@bu)nro zm(Sv21*n?~Pxa~^jWdiy|UeF6~I zj~A%M9n&9d6%*v&@12Obz08u`BRu*9%>7y{Z?cr1@0Jd6I-3Qkdn=Ol|8GtMkn}`k z(|{N#;z2C?OdKgz^FtA?yL#KW)egQ<&&#`Z;l1$YXyfIPRxDdOXAZ3CK63%e2(t=W z3`hUv3My&>1kTw&g!XuY+g2R?4W)1Ng24J-1uy~88xd1h4sY)?R|*=C5ukee+tIvy z`#)dUjRv~d=2s*@y>W9EpjvMIEfC)hP}vuQ2cRCbA4|Xe0fwffm2B#RVum zAm@L&a!4F>=^R4GG^_KUQhaG>yj3%0@Dp}bfU&LE*Bcfaqz;@38@T||SUmMH?kW)8 z{H`{gGVoUMdNvf?@s)?+{& z>Oc+jOKOG!E0CtJl2H2=?9)>IDjKhew+C3pw|}`Hw3L>UxY=|k{&`TZQ$pvJj_nOy zZ`593iOoj9p?l+{!7J#+x{Nu6fsZtU`MY6+thQq>aQb-%Yh~=`Nq%osUV@@&!}M7F zym3@t1MT&NZ9jlNPC;b1^Y2pV`IvDv!>&XM!xz81_QM)hSKPGI9m5ih;Kqjjtl-$C zTiLh#b&PkTqYitKS{9PTr_imCINVUyS%7yfbPp1H>+~tb_u>lY>4laL^#tSSyZ$R0 zd;Zj3^yhY?|7ZR;U|NuuUDC+>%q37&$mL#Y)@=kD0FMh$V@42vR^`RHB z6IA5D5Ho_Gl0*8n@yTs4%tvBd-WO;?ooBM9b$MnBkd=vZfo?O)5O!ajPy#T$K9}4T2 z@`tc|`)>vdzhGfR66Crz4uj#6p%114)LR1c`VJR(^KUq4z>H`SpvG-lLFtP&*T5(T zy=XOh?FNqPGe2=mv(d79)~!}8Sa;=wbI)U|?tt!ieY%*#wENZqZT7)Xc(dM|c5n&I zb!A6TG2=&V>zbV`KpY2$QQ2Nz4q0bS?+nW9>ik$}vGIdQ`BTP68-?z4Ul6j#-2=LX z!O$13L5U>Ap9Y~TK>@t$1|#JlTdYJs;o#7TnZu*8>&nbJDd#Hn+i$L(-}KE@()25d zb-}HZJmJaFd(Jijr`%b*d#6C*4k$; z(>JQ0lLAGudowiU`>dsw35*)gCcdAMdLdw2;8lKe{S%L6Ep=bjfWm@#uZfJ+3J+YP z5<>R0mXTx7wM%W#_$A=9YT+QZ4TIKhkiWqs`vnMvbjr^NZTz@xQy zE4w7G{W0L1q}!d5bY@%=|CvsvE~xV)K)t>Mh)6z9^&r&UB6iwj)5(>Q>8aT2pTx4 zskTO=8^PiE7IryQ4zY9;t7))f*C$7M`(_lFL>ww} z+GM=)x-$Xfd$v+efgFEL4o|_H)5|BBzObNf!v)t$n!3dQ+LFT-cVORSeJkaDEg8~c zc7D2&&|5Ivdm+PjOUQ-`aRvL~uRibulLBwCZy}BLb6i;^Kl+$*36ruTTf#Z=%a!FF zsS#UedN*8fR6f2nHFo4s*Q?$40DCUZj?-s;falZGz@z{PHb}a zE6LxxzH>%<^~-|OX}y^Z!WVv$Kf7@v;e{w5Igi*~zstdXOwyxGL1Cw z;cU$;*tkV*wU=#*)dquYksr-R&nB&pzw(FTB))db85BQ{oim@pA~L$#`c%4nbl^v< z&wE)eNo!U+u*Hg)o(A3quKsozqAz-1>fEZ*eLC8ut(q=W4yBN4FxRb7HYMFt{hByT z>&6OiY0Yi5{Ie6zYH6)AD>wLKw;#0cX|R6B<3g>P&>3f&zqO@`y(R#OarHd>&IGIW zA*et;F>`Su&@A@~>9TgpPANSqHM;B9fzp^TPfS(L{B9D<1C%5|O{t5X*YMzNDXh+z z=vTx|AGgu={IKg-ykyALN5;)}{I$jF?%AOTyD^RsJsSFcmBb16*$JLh<08!f8ODeT zP<^w|*gM>3U?hUx3s9kGcoU_C3~%@xhfJ{Dx;#R%9(BuS_wTO3oFA?gn&_!L&^(Cy zjy`|#=f&MHwZ(|RT-$?xpzQz_o)1qii%r_wc>XF!;-Dr0L z!0ffeSj;KfSZ@bbv3c#RTq*3|b|wDPRQI7Jl}ifB2DnwXhq4&d}S>4O9%o^~@V&X^&G8}PN-n7AJnf8-u3 za7v|l*9)fwItzi?mqkpIIS4YH1u`jKfs^5 zsCVOh;fKeq0fCn%jOyQ~2vGS4#LteE-^my)e3*p76v@Gx^mvNTf#+uJ$BtbJO+t3n z44XQHm`c<*>pBf-%UpastI)N%lKLXiA*(mWKT?Bn+-zL4#|~L$IG=~}sJjRy(~+2Q z*+$j9jJA8CX$}($~PyW6@P|T>_M{NB?6y_MIW#{Jsw^{@P4| z=X0lggNuiYvV3y^+mC<7GA=mi2)_3zy!20Zmad?X!UNs79u z`?n^)5_l7H>IhpU@np7>MCsEi?!Jn}Zp`>}M?+NR&NzutcL(u>I3-w!t2;Ui07(u{ zDTV&6lDm=63kv7vt)y6Mlg3yoNzu|`3X%vc+MDlpiz-&=<5-dWhb8A`@47^tRqPv? zC*K4@HSZ~`y_ku5&=pLtG!9S;O>bI9(8gOu1XtFThU+JftyPa*m7{j|@o1~TgUXlV zk|-qlA$htKk@V+!!DK|Dl4Zl3Ih!fs5!>?rwf=5OCU6;x!0%wza4l zoN0e5Y&z!=(JCj2bYfV0jK&sPtWDrFws@Ob&b&7BKC>^Zb#eu(i&LM}tULC8S>CpU z+BiFED_MKZY9i%Z<{4=XQuuXD(SC#F*ZjE4Gn6wBykm+^izBG>l-Zx>hFBxa&+&TC z8d&CuJZI2c!3;JTpY4?9evMpzdwxAFL~is`#>aT4D;AYo4BXlv4LP3tPKaKNsdnvn z-)Kj?c<(*j&&YVMn=bP9-DcgzQP$#PpPBBi<4<$aTZCy~UrFfL6w`kG6!!?yMUf-O z)67V0;r8Q`R>T801A`yjIc|kHn9G#2l&|lrPe1px-5@gWMBM41<&S(2j`_JH(yGMU zlR#C^qLr|g<&tQ)Na%j-QR8zpmbhJyo7w4NpLWOPbkGu&qruM};W)xTqC{@6=H5i^ zs;ex<+p(=59=NtXDBpf>%=h!L+<~smhxpn`TzRfN(gV^ZL7?LK9d=prf z@UxE9y5r+@wa&OKF>lHe)eU6Z4~e%>sy@%janA>ls`aQ(=2bZSU9!YTM%4CeGRBDF zmDq58zOcu>f!0q=t;M6oTR78o9~XmOfT9kL@B#Xf;lgVvK!a-TyCtJ&%hjcLQdHyX#ZNh|5emRsPCtc(O zDE2HDNk#zxuF2qrgV4ej^L+&lm|h|XO=Vep5M<2gkd~t@F~7673%~S*LA)N3Fc0jl zBdD#u`VHF=D|?;=mGf1ADo%zziGVyWXjLXtK-<%G3}X^qkL9mBDnM=3O8|M2pJ>*C z+yoiP1VQ;9tEm9qUj=Bi@c-YGzMIC@tY4T1DG8A=_yu=Ykk3|r`5a=3b7MwyqUCry z-r>!|SVazRH%_;B)ArQZ?auSZxE)Eb5P1TgB{Y!gT_)V~#4 z;{UHa^W&blBJLKjeS*zmlmWuC@zLhv z#?#*r4yXW)9{W>g+kdBD;xJpR-2eW$2)D-6Hxo0QN|SnpR~I!dMrRuqj6THcG7XJ7 zeAKGnUiQrM?Ax@cy}o9+UA5Te%_EJ|&(ITY_DyW@xh%F?Pp4!Bc}tD-Ge-RS_lw(7 z=|b;EK$1qJpEY@(VKi#bNY8&f{{F!- zt+tqNxdPNI<{}mv0YDLCdrs3PEa;$tDT{Lh?C`?`qN`=P;t9K;ww<5Gd3#9S*SIco z`G)5^-&Q60IuBZY{N%X3*?n1-u^WAiFiBxKFT~PVNBZO5fK~o{gE3P6V`_8b!TT%w zgC3pBa>!Hj40sdolh~nt`QT~d)g6Znm~yccmVd$=kwxuN{#93bk?qM8z1>)qk8an} zjpgJH~60PW{V^l}7HMfHOM)Dxgry^YtcFdUEpi!s3~ z@F|EQtlrl6Dd#axiJ;n3g|j)r+V}L!NP*g(=}+p1r!BX&d!B}eK2V36TqrQ zWF}xMRuQKZhS+tW)ArH`VgPH+eEZhq!ZcEPPzf$A5gZRUzw2A_hW^v_PbkjO_huitde2v$gylxfC0p2)92XFq{ zUI#m1&Pk)Scz&=ed-K?yQxHVQDA<>5sZ_MsTmBkee^zYARN8I#!DRM(*#pG~QYtX(P1{&wpfEv<&Po6VE`umu$LzX3|w^ zk;blB`1Mqd_Z$SmX{FG+>(DgVKDr-i1sMz@DhA#Fv~jtVXAZj+Hs=(MKW%7gY{=xM| zI|Najbq-NxTQG~?iV(AW0qQsq+njI| z$R|F{;mHfrM|i9IIpuI1JE3JsYfBT`zI{))Qv0sjcV)vK``lDc&pMnRHo#4qOg^Mo zG)$ab^Luv=Ns)4=iQVQP^4 zxv*E=K?_YgCL=mFaZ;yg z0MRJnP6`@f0Ji-R2fc!7V5fwLiJu zXVVKfqpW)>$#RcTN-ltrwIuI=ydy!WJR~x2so?C@h0nv3N+PUFoO5G4akjvo>}!aM z@_o8G$moKtevis{cEBs%FuT@p`AO)!YOr}bDKL4b+xa(raTct&?Q>!2&p9AT7vszm z2d}qq!R3UFI2D(-rstT8Al&yw63S1=PI?c@yefK_?#%xDSPix8#_a@W{~aX!Q#{fCp*;Tq3jR*Z+kXi2-x0w7{!sX65bT4rV*D>KM=reMpb_^SNanDv;eEni!nx<8E}3z1N;*6gV5W&i(f;b zX9-YB&1!hlHx$M?c6}05g{i(wtD6|(m%bd{9OB2HZ_j9dek$H>`L2J6m?P?Xlp*^G zy(LTK@E5j4Zo+@czm=45wWJ$N@{O|}Lj2JIxXhhrGM${bJEk}5+KS$rl$UoWg#>*e z!#LeUhhz$;^Wo+ajQ@Cx|zPuKp2uh!g?COuu^sduncIB5PIWF6jOC?VO> z`6Bz8O_Xp)E~gZ)%$a@1*j8iKtyXrN{iG>VuV+x~Vzc9l4c1o^5SeIp#eMGDSxhyE zT~5N|3-q+&5w)CnOQQgKufd*@S-A^C)b-O{cZYl?3>=MXAD)x{bousyU{&!+hyjQK zpiY-8KpE41gSx&8zl?awL7Zo7xy}zq8GWQV=}&OKZ8h=Giy;al;!E$xmd{d1K%Kl< zlu|cn3;E8u307mx3FIAy<$wjBQ1v<4TGxetpEYb{`DN0m=1q)#ZqLqOM&xD>M!nJ4 z*-W#;7q)j@IBC5jjKIu0LicCAs+U3(S!Po}a6(L(Oi zFHFSR@$XU2k%;3X^YU!rR%Pi^^l5A58dh`Oz1Yu5enFlA>l{n0BVJN_$8D4q(3?Ae zpol&KcJkU~@GSzEPILmYJ&&nKll^HVF|#t@{X@sB&-o;uuG zeKEf%fCj*toZR0~w-ybPBJZfCe#uiBLa?W4$Q!4@61u$I)he zy#C02b`@`D6&zY3v*J_R#BMIcsmRSNzB#du6mVlAv8&+Td=~%81vADA6-258;G#1F z7;K^|`hm(WMT*&>alvGc*_O`n8r@jO>P7hGPNX7bk4 z-Tj1|rRA&dtE8*YpnrscjYk9K=%o(hbtq)7-TJ=@Kz6PuJLb| zOiZpT%WB#@>Dtlc>v|=vIowqwZVChPgH$Tm4NUoEk45|`zXP4z?+XbS6)1ohOH&9Z zt-(1Vk~Va-H2l1s5Xz}*D8{?9O43UnM^+`3eE+6X>%N|*FFP^%?WF3*)Hfoa#qc?l zl#OM%Vn$`r(QKYo0@FmdYv#WF)cWUGxqE6>H~%;Ysug%t{r4*%El%w1@6G)I{lh|k z&NYkXo*;}vELY$~nQrZXCq$7LLy#aTYubZGvAEksaLzntJlB4V$$!_7?mA(zjog#z z|GIm8Ro1V#-DuQ54D0`l5&)l|`yT*?e*#3}KL!OMgb+*opGN#2X5WqW0|cc1Fya3b z{=q_^U;F>Wp_+Yw$pEOG>JOHFkWa)g3Mq^~AO?_;_**ROD8%rBz;`tSLg$u8w6J$L z3m>9L-CVnQinRb`pb6M}CrTJl{gXJjgU$iaOWyMRhdIo<3C zMx?{l`&n{4O?Q^P_ei*bjEe0*IBf-ORxOU-|#8RH9*_1NJw?6#!S0eghk(VoAT$Of$dnA!ifZEyc0-C z;rUrCyo1b%9kx~hw)X|C8XJ4Lp}4LV&M3uQ8alqQrQr35WBTWAJ*&^2SH3{+)KEXb zc;MDC4nQ4<@vM&u{|-n?fz4Uy8s`T|idB=e6Km$qTy}ir6sAHzoV5^XD}> z`uh&+{~%g9_D@h)}d_iCBPV&IrkqB}K$StUbAWA%IR#%d>CC{_=trZ^0<5*c&8^a8f zpJ?zn+pzqy+b>Rh&B@(X>c_y7kD4yBlowpyHDeGeMFWw;iE-$opwMw(MB%yjAH|va zI_aFw&NZ4hLN0Qyw;mof2-cyvH?PJY8X%bS3|S*-md26%`;2~-fa8tBx5KAvpn#f& zxDD~nWx`v&d^ji};-7(C8AM`*L368_&N>S&Zwba8vuaU1qu}tMFnZe66Cpa`o7jz} z(JRY}V6s6iwW$UaGocaEm=<>_K#s?efjY1Ue^bmG) z8r=LzIpD&_@}}jX`RSkwjFY~i6VBX@O&`T>M`a;WJGoBy3qY~&Lai^xjXL{p6s%>D zfojQp^-+4afarZ08AyqLw>fw)$n&{{UQlE*$y%~5f52?8;pVDKLcex`y(T~?fvcn! zVr70Bso*u(p}Y-R=z*Ub1{SseOt^4afZ8x~I{m0t@59q!i_UA_E0X(CKd!RMrQ~5@ z(^C49XkBrQV3Bv}WO z3L|62F2qDdag`*g#AF>?#;%g=`!b7=Y%_=tvs}No@ArHE?)!UP_j4b|b3D)U2aaRL zeCG3czu)J1zRvA+k`mI%^go~whmsV3Ye&13Mr-ok{cl;FAf}r~s6*H}U z?@iT`MOkpFGh26=y`W@{5K&ohL#j8v-OK*5?9?&!e*3=bl`{2Q>?5y8`@wdlftv>9 z82L0?mdItA)WYsbx#QN8GtJJ)0b#gp=-_tCvf{8&?;pg{@sidF-CsoQyNi73!@jrL z|G@8M6Ij+jU7#TurV*Mrx%i1;O<9UsRoM9%c@G~^<^s2^{nTC9^r~G{e@*Z83#ar{ zQt#A__YE>xzI%kneAVfs$u^dh)Eb`s2HZ;YJ>0@kI^MpABZnRZUP+2=9A~fd?7ibf zIqt_xEv2nqTK`;>-7g&Cww&g?PRQ7M0v-lhUg4DY$8c@7kg_D6X^Eb>7)4uY#7cgu zW;{;acd7^B^KRc*sw~(0l@05Ctx5RR7`~(1B1}hKk%VxRhd9u}J7PxDp1;hz%;_b| z{Qivbr)b9ozY^w$unGs-Y?6QLJ$o^B?c}yEQ>~@LIl3}(exp^&(^I$`s1XMaA5i@} z?4kWdm_W#uQA&9cOMUx0spd$n^xaX37e^O*jtc&P^~}D_h!<6|Eq7I?nR|LzI4HsD z#2uuV$LC!20OOM_&o7vW{&V3g39)T z8>35#JrR6AMkg)f941AfJ->oMHZI-pMUamBpIn-z9W?+ky+M8;q!pP8LeEH)k^#<9 z&X+1+M6X~KD>8!wus^SbGHYu$X%VL7{|AMh|4}5$W7P8EU@uFIn#FduuTJc=>AfD7 z^zH}qVQa2N+Yldt0#o=2I-^bG@{uEg^Rnsq_oqrnt~KI9^u2P0eOEx5`hTiUIsrR% z(OjJCUq9TF2;h8d=yWEM)-=etpXme@0GUnz1fz;;5WR~_AP>VpI*?Al%6y^0<~z&7 zGZuhZE(@*AHgewxt8fo)ZM{>rN^k};7LWUqg1Pc1SFtA()Do6ssu;$cD;bP<_QM6+ zKe=okUEr<50Q(%3g;9qhnMcsPZLWr(Ngbg2&HQ8&;WyCQ%*g@PRWHHT)clE1?^5G) zH#~`ApOwU(cFWpk#2F(q*p(#8N1zUI?!pnK+)zC1KE`-5S&HVBP>4DD(q&e0Ux}d< z--`4iA#*NFd)WU9tRw9(6VYxlT3N#J1a_eORbbLH3@YO85I3@PI zS>9Z*4%zWjeNA<&>zVz6@>!Qc4=bDzERU11!*ermjZ3^}BhK!yN#ufclapWFPRN>h z+tvBnv%8%{Gayt#_x;@~BeVwHe1DuE$VRE4G$h;;xi~Q_2c{oOmadGx%)CRJX;P5m zh_ySSYW3EZ#D~DbHkzXh$!f^s%lI-2W-rpb((re~Q3>r9!l)`$xE?0bnG4O)h)uX1 zzXmFHzwdA-pflTTD&sn)_v~-C)K6@be0skrwXAAH2u+xQt<83EU}(}>H}s_dNfIeE zg|Uu8@2EE0aM9`MIIabZ=Y$TO=@T_F(00P;lxp{z7~RGKF{f<(2etm9?hCNtnKf-X zIR&VUN;nUTmw`MHP1A)`*DmxF$qu$16A-=?KqYyL6fGzspQioNfA%Ck>#&2sl~L}u zJipH)po7BoVd0*0wz%Z%T|JyeXDFaBt5x<^=7{yK2ZNtyXFQxnlx{v1dHPT?JU4Te z0Qbp`+r-72D1WeJ@HZUxf$h;+m^abHY%aVXMW@jwv(SF8wJWBraFI7O5FZVob>=ou z8lV7?nE;ZmKklnLi&%8ssA z85*e{&i~1^zc#O8p@ED2jUmhu=cT}7%A4N&BFUMG%vPuUS~rCmX1MC~<~;Sa?~omH zocD_#$l$T9}!8GiXfj~~mH<|6Q`=a)lue_>&H z-nUW}L#G?99n)4}w;f9wPw80P&wn=Uh7$?uybmvhMK8iBubp5mOYt2=nCpz07MQd* z2<(*~t=(_>PLq?nmQ+qG>qUtkk{p=ke@97otJeK;2gM=E@qPmNPaGft1hpxIdE>X7 z9#_TQyW_}fkVvj~AQ?HKV6@UcDUG_MZjd@~NCs8-c%*GDUa3*iA-OofN=7e92dg?!&IAEZo@vQ## zaHsiod4f8qJ3I{`IAYnuQk0YgcJ6zi?M7kpEIs!%w(jKo`hcll$h(=72ZX*{4*uaM zf0$R^;rqS#`9(6_8V70GHtGR_hh7@74Ihow%J>XjoV2~KsQ#%x9%vfTI%S=)f-{;A z(gbTfydMiP&b*WhmEnTBmIGT|O2x&R>Nx^;$#g%O*9MAwH;;r1xS*qY6g=mT>^G^g zczBK(RV;1xQ0Um@IyGz`*ahrPbd5P3WJcj{nrQs2zIP%7(PGO*WD-ZpXQ zwZr2KkBc8+Pb2#VSIijgYxf=@*l)4MtRv8KhIVtE97Ls&k{pcgsm9zzMH(s|WP~KR zy;zj_@LNH9>p*~W~P z5m{yfr~Du)N>>k9RLtgwr%!jDJJW+GAzP#O?cP`BFCRPFVQX|J0{aCJmDGTB@n*@6 z7&U{yS!OlsbXXZZ_bNK&I|co`P`a?Icz7@KVr-=7E@J3Sw_@jGh&BYz+=Md26YoB$ z%{MWpxXlqHj1Kz_EMJ2HJ(6GFpJ1p-QS$kT++fA6pj4qcKU2VNiz|mN~fGqk+L&a`dL@Dm#yzSN!Z#bm!fg+mFYzrN*ttapRK9$ae z9W(?N3y`ETavRp++skeF(GM|t(C$2zacQLyPIqXeMX*m~92r<}_NQ!jfA8*@)Dpwb zK&0fyAzqH+UV1h#91&#%ZWgu+g^_vh2riGL1Lv@wqe7Q>ozA_#*I*7UKkM{|jf&6i z7nJdKm6fk1EDh7^yz?Pj)Chd>fSN+htD(cWWr82+VrrvoUs+PweW2feu^h?oW>P#d zHr^x#D`n@og_!S;7{(Lbg?(Yb% zLWrGXlaQSQXakUW_u8oJ1A~T9QOcCg9v& z&DI?%uI|$=d?8%+y4$(!Q0k=juE)pT?Swy7s2!Y&XGz3!E=@75al=VlM0aPk3O+lp zoq>>a7F?$$sLP9b4OJN<_ql&s`_8W85#RY`fSr+ zK09;JF~>i82*bwH+?wY5Q3nqb}0^4-qs9{!$}1RCrl{z;=IDcEC!bJVUbR_ zCKTW9spL0t-%t7kN@rcd&)g=v-@2g^p35yBfn5fitfx)65Koq|M==Un-zrPWY+mT~ zI%5Wl%PIl|Y}&^xQW)A-C8Xafi8+%5;K-$zY}wxna4R~Z1s0Fh>Nf~KW^<#l(}J=8 zMNVLthy0TN{yr=52c3MK@~QfXdg`6R+u0X^I&S16}Rvdh6FNyLAv5OT% zOFqy>Mb)#dDaqt${m@lyA!~Mq&)cH%J7Jo&_5+6vcQa4>oepHrMYPErh=AMRsKrG#T<9%t?tKArj@z}3XB@^qTv zO%MBR=0_T~voccxfkM4o9z8?GRg#lI)QX zUJEPm@R*2n=KH>LK0w9cBoNka);Y*_5~RNNYe)KVq>AE&a;cy9_Ofne2B(bNF|E_Q zuJ`5Exr^*K?otm0D3#aW8$Evt>^yIFKiB0YY3TJE*lUeWAj_9ig);HR|S(ukSu94%5kNk#txqB3>5_ zD*O%U_{3Ue;jC$7rfD%M{7u``9j$Lf9Hj)V1b}}1;I4D^x^)3`g z67r&2wiI|mQ+YP8tY}Hu0>91{X$84hG%}u*^P`T&#K}GX+%Op%AtLTH!Oc$p-I)NR zpGA#6a)tOOmn2yBU6`w|cx9{+kW54Ob5HU>ur`%Cr2HTFUP6Z6e+8kjpYKtVTmR(lfe~_&sLi^IgL$>`y9((a?#4G5VaCVdk2U-J68`Y zBv)j!B*;|6yg8$ZLWsgxeega=meKNj5|mVU?|a+1F8$9r+U%S=8hB2T!y$Q9Zk2tA zi9;vketqSjO*N4uA=XhkKWFzN26A$+p^yhqgScqnM0^wv^#0Zq{gcb3gxDLr*n1<* zxFIN1v+Si+;C9`zQG1JnXOsKc{Il!yUjutwoIjV0j|2%6$iRtpZW7*8a^`>9RfuG|Uw{<^$Kgqk3I4Ad=gPHCmK+{DG%sK(hjVtd(@~9e`Vf^K-@rKl&RPX$ z_%#x%+grwD+Ui~F+mHVibv6C;xLj^>y@$&gN;KjXqC9^dN1s{y32BDWmuUHMy)CZ7 zeX4Q4!gkhHmTGEfDH@87evyA~CQJ=XeRzAf#B#`AI}}gAcHkO*0^-l(4Aj~!c4n;= z)g{c5VH6+af7v;+&8`RK{;Bknty)(=qW5s>pwfeP%1VPEc^3%30TaOvg370*hU0e{ z?e%<}W*QNKKNSzY_%6NPaVK9;!L4TK*tEgjrvSL|MC{&I$ACbvYr8G`nW-_08wvyb zq&Pu%c`ZM^P!->}>BUlU`T!e7>g>EY-FCO6z49%f`&oJrn7C<1U5~s=imlt;ZK9Xs z#Ev(kFT}{YKKI)nitY5@juf~0^d)#CF;~Ot$d5-SV5wxfKba*ZMo9*xT!W1`KCCLn zf({I_JWIPG!v+PNH8^uO%f`O`TnAFKcBQ2GTk+>q{V>+I#!e!V2N8zt0J9(Pk)#UM z1s9rj41yoy_`+n+MD>-zoy+}YXij%dV-z}P*}azc=CYWsp&MC|N09mWEe#9EAnHiP zoeP=_QJe&tKyiqNR}iH9o2xb1oM^!&DK8(Ds7Ca@(5ugr&VF{O9BboI9A_$H8-SmR zyH4Kzg}M|27seP-oaJ68Yw!OU9klpH*~dw{+~uZsx?qdTSl5vbgvKX5+9c_q4O|DHheMHa1d`tM!pAxVPtA)cD>ArRs1KOu;9P`Qzl~qZfiJ zj<0a|aZE3kBOCCJ#^8!4vgvKju1a(lQi_Ro&It0}bkgm$kOX;I%@4&+nvFNk#1vL# zxvT4rK2ga%mfa;Bi=zh^&D+xNv`J!>da&G3@G__QOmRz*Z)SSUjnVFhOJ#MHnG@%w zDYafmw+sPp*m=w?_G6AbXaL%_$dQ328?Z2jaKw^EOG0;mriA}OuH(1Br-p8Y69({_ zG*P?=SMDLM2;nK>Kl$v}*$FsL7^I4b!MM=}*B1QQ3aJxHXa;o(m$ec3{+yR)JKWmyKt-9BG9 zs>*kZ_i`k{2`$DE>|!U?$^4v9D(39&uPza6q1Ib!LDTI_Rieo1y|czZ@?CNl{VFnr`Jm453t& zzz&JR{&!4;#@dhH>P}SJ9;MQ zBzJ>~cW>L=J`7IWt)O>i=D@_)|%K6rUD#t9Y6jA)IeWqsyk9z zzQbQji{>39ctmF3la}%y8X1P8Bhu>|x~fkL%87^6PQXR#K!T+~l0xzNQ_E5)^feq!#O=D0`Do0>SVRl2&9yGi#Yj>AQf7wE- z@WS)U7Y8*jq$anHY|^}C;;(ot1VD(}+pnIhe}LDZqr% znJ1wF%7R%_-NCL^yaPD@u_fn5ZAoj71{gcai&P!c$Q zZ#d80z<1#8JVo42=1m8g;ilHwcP8#5>mv*nhw& z&lSZGctkO3A$12nQFiUfUOF~*Qaz0A;#U2*Mn!D+D^bVUO!`8%%j?*v8&*jV3)%XZ z%aAjbluQyX$L)ri%z9W>)aSutBfn%la|4KygMl#W-RmcRY%`AHmR6F5X6oT|f84w! zy|?uq_ESEKw|fy)R)zU_qd%y_*}mjXl#XU$f8WP*wd`SKkJ&bH?q3MHC5Y%6wSm9~ zOANH9H>2*;LrwJ=rg5r$d6KV27pC^79b7Ug=Sy0z|Cw?7x47B=#_QaZpq_MU{$9xZMaJ3CEWbb~fL`1h$jn9T z0%yf^EA~-}0+?i|ow^hk)G6WHN@5+xhBfs0zTs??f<=`N~Qnu{)Ph{>|mwMQouaUggh%V~$N z8i6@m%Am}MZ-l;tc+L>`7L7gy|WOQ;}C@9)>*WCxd7U?xAvZE}|6BP*A=EN*iDc zHT3nhNxIFf~hoz>F$7&lN=s|Jvy4|6^FTk4ft&< z^wa6dz_w>aANFOQ;yqdQIMajBXv;TbUIOTSvEp;(`akWkC%t)AM%R7;`?|#G;DBy? z(|u^ywic(dk=BBj<4&U%cagCUsgrvxXu0y4t?VcuzIBLFuSWb(FA(N(g81AX-;o26 z{yssn-o4eY6DyStOB;0K8XRzxTwDpM!8RTt#*v27CY!3gnw4|LoXvbU_l3q?-DhlA zH?bi<;KdSE2aS_VH5L*w2H|GYN2+l_xclUxTcfr&?;e@3HPmNM&m0=9(&wH#CdHCh zXKF(r|2IFt(Hbym+`Um|{Q&pV0EYk%uz~F`l`UbKcP5o1w2iSYl0UZg>9;|CgYC|t z_GvS!wg3n*P1tDdfIoFgU!uZde($QSV(Cz4bLT2-j!D8&owzobYg+}1&8*$*V$*|W zlqDW?(k0ShfU=K!T)39EMAS0YQ<`vs4RX8zo$;`b88Kz!NSa|`P~MR5`p$v=mnCUG zY9j)acL^Q&O|SrImnLCB^!fD#Cq(?+8f31^jG`F%UL1EQ`Y^cj}C0yuUr7IMlN!Nt>Ri^gTvk!|c1dyF|SU7PG@wVDBG zF6bKjks0sNSJ$%H>2>c*Ax#SVc>75zT(G|R`qS0VcG+Ki*0Xt8``=nf;`pK9Ao<7x zS^V4^gprVkg^22@hP2`Y_=Ipl94i(`&=k=0qdTp0;vGWj{;mcXk1JVz&R z_&{=wb`TM1y377E9TjVr6613?5L98QnN*ikjogTsO%Cwd?wv7P~y-uAU z#9^X=mGD?VIuMJaTSgixtDd+$P!OeTYo-MMCVUibBndnQZpW_aSfX^>(7rZK^pzVB zj8f@!RT<1G6E!z}GI%!Pu<6T%m%B~e8Sds_ve8_p^sfwEvzN1L@DaW9#d^9;#Ngn_ zw7^k76b7;Zyt_DGIU2nIWzS692pabu*m}=rs!$_>)NY-95xPpKF4AzTDMg05rC5i! zB+I?L>9MN(M*R=lNbK&bM#8+1)c=&ww` zhMe*O9?oTOVG(@)?Yt-Z|!|Gm`rvLukm#=Nm`dlFG==zP|{94uyTR-5GLdx}`(;FVd{~_N6l(Nb{|u+iVOac~+db z7>HqE4qpM?Yi*j5HxtiMn5&M$@H-_jF4WyhD%{9`g-aUY@8#Xt&0 z7z1`*o#;=FF1;xAl`mG7A)pxkcn#+o^`{CUFw3)?QThK9S?!7>zw8?`C5!J{qXI(2Jwcw1-3N zNhuTBQs4v^mfy)4bBC{YgqOabHLRY<-d{LX{;9vL3E8B7!avt?CW{ z4&2MZUee!`SYe$Q2VQbC78P4-d~ zWU4eq?6zmO`QMebe}sJH!x$MJ9UU1xRdY$&U8FU->mVR$ZRLP`VHAtg0T*B)-=T5# z3|E3;-s`dBgRPxEbt^VRBXcT=WMMYNEa{V1>-u5ld;#gSMrZ%XYWG{y z!1f?JK{BL)H00H4e~h=;<{qf$>o?eC+A9#ed6&rbCNS-*j_VSYwC(2$fvZxM-K(E8 ztkzqezrKaqT;MT~N-$Lb6E7S@+6#W(Gc8bY-!+(i@%z`~+}8mYjtUyZ;b$^+q4!d0 z;MppMz6&jg{=m(b^MZf{rE@sGaZp`iFsVHGdrjQ9=u{=xHsqW$JbFU3_c1%WaYBK} z`xb8#duKyacZEWV{;et)NVOIG{`Igx=1mRDX>cTGSf`Op&~?-`UI;8~$|Osz6%^z1 z?!mTKx3Ge{peDza1I7-=6k6e{vYVrSUH(H|7$LgLhnz`zeC(vh58c@d+u#ai+$%c? zV9{pSnX4|Q*3W8P-iHQ0cwVjf9k(i5PPgXpXE2X(y1)RsY+lH#MYiyJRpB?yg?$-k zUKoTN=e}_mF1r~#NrlH2zo>n{_zra|WpY@`5;8YMT**1Ao8IyHH|t8mKE$m1uOb{G`E(1*m!E72vdU zlt|9rCWsHA_}<`zKs*yzhhGZ+-`6*H~joEBVTG^BYbqQM&&hug-wF zil^7^-t3`Vg6}EgUY`C0o^X+!i80PE?`TUZx79qu3)IsK9K`@2o4YAov2 z@-)3Oe)@b3;(ToU5Bq|@dV*Y-zkhVYnZv(@SiK=-=7|yPS246#v%`7<6+QxMG(FT; z+o6koU?@rUTe&HhF|B-$mHX(0`tR(&?vpwd4r#47v3bpHhg$qrZ4UH%vfr7Ap!PL+ z$?jH$2Yi(mvZLI*`%>sT4my&*=3G(j?c6Fm@Y_G0qY|QkTgu!7yx5Xua2Q6rlo6M4 zd&S#m0D+1NPI&UbIK<0G=DV?-KV7>)`@l3E7uznD)^;{pd@# zc$9`aX9ECJkim_9fb+Qj+QU?PU^$-`JPV8pP|{z(6b8Eky*~v<6{Hu4eNnZF&Su@l z{~hM0Z?#o#c|WWxJYTl3hM)gGTzX*K92mem+;W**7ucV8Be0?MwIwhWA_#K6 zIAALOi|CY>{^SU;%4hyZ#laspZ&AGHMZ9aTfLddiPo zEua1?)tIk3h%@Lrjk31Ug-!~p*1fBh*A~4OG}Cst|2h?+mVe(=8jWnpAo=#280Y+Q zkRF{LcQn_V?A3VP#ruT=16SYRbSUmGSy=#*yAe9N;!RZA!n9_0v#*c_#m6z^`x8QgbZ~LpUN1d#l)$rjg4!<^N zbgqI5y(pyZ5dLxylfZ~wm--GFxSjyt=0Am$Hf$7!f$Ij1Y~Iy??<-^TY{fLx zFh?Ew zU<|JW#Z(cjS`6G1Cg$=~6XWs$#S_x;>KZqmIbHXKAr-4nk{V75ceeT1x6m-QuZC## z5O(eGzLG*ye&|@E4IORUbb)BoJ^Szw8+bwX;Gk_qmFS<|cYu(Pv%6t8(Y(rJOVX15 zu5@HqsJtM~u+~Y%37>!YW4HcKM{EJ88lj#>!#FXWd_dp75$5az&K1DQZEIIkKbjy4 zZv!t`2>{)q$GC=IxaSIL2G{8FZef(fIYB(GlfCHBGfA zW_wQ%KXQ6Po6k9(Bw`mTJI@bwoX+OKNXXaSfZ&b4zJ~0Swd0DOdtTmS?Jh77w=>Z& zGQ;P=%YzQR3OXR{^63;{OId2g!fMf0nF+cphL=pHUGkaS(O{+)eG(Am`r>oZ$WV5zT*> zt84z5=noNaaO-NyAWN$Ct_m|MUbyl3|1VY;AXf7e|0z~F ztgl_XdVoP}(3F>5Rwpei1@T^}>?^Z)zEC^7;5r^nxL6)xKqJ9O6e6OO3_Jzf%XCzd ziOu_~bJfNhAv)%-JJoW-K>Y0Y`DkjPabv}{LFibw`i}X_4P~P8%6p*JyPpFe6@Nh{A3jcY1_^Z77gw101|Agxf$>;eEfj(4PJqY z!1;ATS~jf&io)3$JCN~{H^^)1@Lrp`$+Wn|6JaZ{seqzqHC9~Q9^d4&{md~nAI3pg zgcC$QPjAhlW<%O`hu+Mt9lO^~Zy6pK*>V3U)An+iKqeRS{r^by{6En^|L1$c``NYd zA04KuxS^_0(4m=Gg@E>3vT_Hhmh1>O&XqyVn4z98ym-C2APoJ&XNtZ+d+lBGtn=|0 z_canrbltkD8+RQZTS2^K<9|memhX%B`zu|OIlOsXVG9z}I$$}XVp&J%Qq7&BXbU7R zVRN90Dp%=e5J~NfQ#`;BER1cgNMBFjcX9Mtaeijn8HCzxv zXP}-^aW}k|kF5qz+h1O-Cv@QwD!| z{Pg`re--Xd85JSWbE0C|jE~Qz+hz}0HsFM{Y7a4J3c=q;7i8Nq=tiwYf}_imw`Wxh zkKGhI0n5GX&7=rv(Q;>a{?QW3g(5h*B-##7@HYL6pvff9KwlZ`}&O^hMUwsd6djQD5% zUCvyoiA&hyV9<5jdpDs;XC$(4lE#xGQ3>@-Gx6;zu zn{0n%XsS*6%S)l&>$%s#%xmf_0_fSF|Cp>LfJ?@0T()E#SEqWhw{gI1Ej$C@AT{r) zjO*2=i9-j6)MpUTJ%`55%^h1Kwwhp*h<`rUSqON$C$@$uxwDXea(&G_>M^8+e^tR} z$hR@bQG5bOnIg9aR<&*I-V-ppp{Gs~*R?h2M;eqa|H-xdCR?LsNB63IgGB@47`XD^ z-pBv#dwc%JyXyIGz9Z#oFn{jPuj+|lpwVO#tgN$<2};#Xmp7SapQ>w196t3duGTzV z)L5J@t%`F-zJ2xLka8t4)9|YD<;N!OJ8PW&lLos;Z<5%C65w=zW4y?6q0JSZ8Z;}d zDfxJy>1<7Zz?;h2nz-)+(uMx}(rG^XD=Xs+94Bv_i+*r(5D?(}{hjXK+Ln6ulP`msTr@po zzT^!NN0aCd$mKhEU!%qY<#*5>Q2yxSD0w)cr?}5V#ujDXzeFC92`^orAEnPxVJyjY zP%>X81{qC0q+@eD);g4gBRRTb)emZIn8kSk((*qdj?SHceazloC+S1t;p{;p8#YaJ zMrZ5fdSCV~bnoPH?9#%?i$Q}|{uf%rHH)q~NsPn!2*(A#(4r>~~Nl$9Q08x`(kdgGLY-_C2QAQ8@7^bWhp<@`k{ry+0k~|49{C{ZFdE@2wNa zf_8%Nc$V7$lgExZx|sfM{5`@yX&Q2&k;NJ`1|@qcd;~orzG}PS(geX?!uPxRq-W*$9gI zH;xcSnmAtz@thn*aRQ2A9=ldZEj&ATj>P%WS5)Yc*u(sMmD8racei#rS$*M#oDXG^ z7bMVt?r7Kt(0d_5kwkfgll?#_4}%YX0(syx--5T0ZPO{LrMp|3D!!_=?wq z+Q8A$2GPZ^r$4qCIGkLSioj8-5hW-v{yG2_y(!h2Eks6duGoc34)o3wQ->#9->E6Z zZBQj|*HjKmTj4Y3-)B9049nt3fv;A^c_Wg^M0^wApCFYP08NuSjyX=OV_GKENz5Kg zj!&u$Q`x-Ld(pr-A^k|ju3KcKTRBeR<|(Hxr$PVB!?##PJ<{IK+vA`%4&OVv za6O`Yic}x&Oq2MO-BMG)Jgy59dakuGofcNPqnYdMN9o`)bE|Ns_(yw>8#}OAPCppa ziW3Zzn?bC1lKF%uuF>_ z8%Exkl`eo*`HxzlcmO&$vtY(RUaRZ6Nhh=k$~6JjT8ZRl(ny86yW9Tq!9Qe`QWrfh zy|{*d`10c=u9t$itsZ;A@T0X92=pQCf{Z6&vE}~m)c)j&0z%EkK)R&8ePPA)Eb2hA z<{Kiuz*@X0@)om#)ju_o!IC6Xr52KyIv8)nFsjXgEP~ZUTQ{sbY#Juzp?x9Wj!?C% zu%pzn+6vn;bA`T#p&#C<1n#_ikgwhdaMc5JWdR%EIm=F~J;~H(SuT|sM6EXXBFo2%3+l?{0=E#0s29soY zmqV%_oB?t9CG=(Ufm%RuD~G%{RlP{$-xcpr6(;TfOgZ(LQruxeX}jIEM6PvfZRpTo z6Mm?jBTi}{jHuFD(@AAU5A=`ko7fx~wW@sTdoQoG-RohN@f{S%L?>*^SboIyP{I=C z>M)bN09?H7WN3qV64zjf+0D32b*-WoP}37~a5qQi6gA8He$Uy;`Wi~EXZuw3dR9cX zW`%oBxi>qUy%WX1gTjfsz}rcxfV2Jp)SVz-WDk(^1-wK*0#XAQ?15tsFw1XPz~$~6 zG%G;-xBrJ=Wp2e#J&dR`oHx}9c32e!p~kx7-6YCe!wD{S0ST$ePfI4p0}`92EmD{m z`24+Zk`9+#QVXv>Q!#RuwV_aR(Z+dbakHx!^z04v5Ob(kDF4G~i#v{AT$laA@P2unS3+dny-Tlfy>KQ> zP0AaQS?9CmwIAhlyJ~^I_b`W`utIbJRS@57JNzeCi(z$s)a&lwn)e3J_J2@LYDW_m zDa+c|tHxDQN}YDpCtvW>l@T-bz29w-W%`K-u29eE7=)KvWHBO55BYdezZVd2jXIJa z{j^WSUm98t&qQOgkB!%sX+KMqa#!|3=J+k`!8IV^o^XC=w4sY7E%wtZ*2!L_0h41Y zUB8cS=6x7MdC9$EXWcr0{&DF6&%sO0+cyfPNrGE>D2@h_%u{Rd2FfH;zCW7eN2O${ zHk0>U^9G%vT7~{aK5G}|AGezp4Lax|j(T!iYn;ouT|WcAJO?W#-Z!v?)IITxl?7KA zYPS!L{|((?*!Al9H^ilP?6+s%O@Uo~eAPNMa{0_?bf)hW8O;-8V4%5p8zm#EP5^Tn zihT!-&QI(CB+}1nrD!$al!mQyzV=fyrEgX&5Adi|rqLu;_BlLQ`h0_1Ig_0Sm>S@v zi1~1auoFF_8I>sMs=zReG$@lAaq9`ZBp5{Xkc?~4D zqYh(x$a`vqnO1QlY9iQ6+Ew9YBU*IM3llqh5)^CH88q1TtvU@mU=cngGKwgCDL5Hx!fOkZL@LBzv0vwmJ#-SNMA zoeLua{yz<@cNXguJC3stBS(ifk)g{RX%dtl@|K<3N|IP46q+dK=Dj{Rhg7L}dh%Pfgro^e#FgKrFMQiv%lh!Oh^e(o z^((dA|C)Zk$nN39rE9HehMas*zDQABkYIe#?|@T9Ip0mS>85!%*06`@wyiFFGZ(rE zp4RsRGzrRvpT93FTjI5B$KUZ$q__xQO}Bwtmc#_GQ%$8f-#Ggqy-7l>Q+}&(q&7__ zC?DO^c>$=rle9t1U}fCrM%Tq16+V0x76aK~pQjIZ@JEEdqX1FxnqOiVQlrZ6>$yb06g$<5`arPU#0YYTWP0VMuZK!s*&n z6|(fBX47LX26f!eRnV&ycjJf-rlWW^IXxECAcV(*SHZaJ&%!O6G6 zqtcz;)A!qAuUru-S^lN0)4oDnaQFvqds%D42x}zmsZ)Ros6quaO=oH$A<`uDHBy$8 zz><5_t|I*DbumI{%(-TyefpT34?}iWw104h2v_)}>~e>sBAh>{twb*)#4YnUZ42M4KA9h+S4APs>WG64B->f7i*_@tmdy+e@tJTOF{J?2}(=TYp!08v^@zwc> zbwcP`blb`9AhFjIW1u6z)n}SNRs8nj<;9$Y&M#^T4QH1vZtwd4hW80+B!UL2m?esZ0OOGjPG+_u zk+RgNL*3dvdb}WTDECV6QyUZrU zEiUVqKfg(Dl{nl}?&o673eI@cUayvv_vO`G=r^gIeld@89ha^3y4P^zf8WmQL9aeF zn5_u5c|4#^&zvs*w|)MXUzDx+0Q}@fI}06L|86iYmBqVk55O|_l+$N^a<^m7vpGqU zNxdbbIFTvA*0-^XYO^ojm%Yni7^a;~yXV1NbLU-(SiML_5y+)>om$l^yjoNTJ~4zH zr3xX~x-dXPEy0!EfiiGRaWDV(54;=Bf>Voahpe=_Kk znR;t2{RpjaLf*FY_`99K9{1zw@2&N1;c0>8c^g_}xp2h!k4U>lDVs6dG8t_%Y(}je zGM(!maU8K}N_u$cnoNO=rTEZ+-9ruHkK1LC<0>0g_+u2}){|L_76lMU(1jEE88}aT zk_nDVQ^h!T7)U8hof$a2=UZ9LBU6Lw`rE?@Rb9!KV;=Vtw3|CIx}qkgL(H_hLEP?DHrGcV!!7WyBo!!L{2R*mAbqe z?7mrTwo4;_N>lkbYfWS)RZ{`$_alAyWwE-N|ib5d~D*Dr^OF}TYFNIRrOYEXqvn<;02 zhd8nua>&DILr7NV;n7CcSj-$x(*aR9QNekYaXahYq2rVT1~QS`Vh$%^K2tgQJQ+LA zEujCfUC=V1PemlABRA>$n{81%-R{M@SNTq}I_$-L|BT7aPk7WFn6mSOmG{0U+{z3I z7d}z1Yix=ftPz|5&J_fIuXv`bDatV-Knur`&G=&c@Xz~r3p^!aKN*8SLFViP=Qs9&V(|+dm95c zk-&cqpLz8a2un!QPp)kE{TY}oadP+tJPDvgE7oVB#k1*y)0J6(nXZkWR~V7NSe2n| zwC})9jU3eS>#|km72K@R7Lqa3=74^}opCUU@OG)W^(dXzq@Mt1-9vvm87q-k3>Qe( zx-EUQ&T(?L@T-0OKs9F<{ex0{J%dF1ix?`Vi%sB|L1|n+z?HhHPqQAa$i&b@49tD& z+*CSw&iA2{U9PE(VL`pw?bg?cra8`gkEhEthIpQ0mz@!r5s4ysWhN1gyU-QX zD&bg>yoBfuZyvE*lw6ajXb;E&n_ zDW0h8n7LY;=24xs{Sf*3=U1<;2BcqkRaBKMe_Uum{P%{z@)D;7+{e3Mv~uPZ4L2pt zs4fCq*9N@yKhM^k`33ONGFmAdgaUDASW=C|yGT|NR0^mzeq4vsVLd3bvW$J2UY{!~ zQVu-4gm%C8GYWaG?;E~puHTdao5h1Oc*HLg`%BTP9)EeanTOt2d(u(0)EYxqmi(0AVgEO1D>RxKOLr!pFi!aM?|TO zB|pD>E8VE_tx2r)l?P%D$Ipp+Xl_2dp$Z33?`7$CeiQPMf=Wu(n;isadIYlK8h|R=65w{ANMOWR zCNz5&gd}voA5k>qPaZw&SC!etj= zKt7;iLpdF|ts2X!s@h&NX}YHGbt@0;IrT5Yn!8_JIj6B-*m3B?7#TY-_@YOS<27r0 zgKWXiGgD+ynGUzHYSS5gUon^2M}aJobP{|f;1fTeBdWldTPld%NqYapW$AThY0MCs z*sMYuXlu#Po>{~7xkeKe81rsGcUis-zH}eV8n$ecL&%Nkn^Wh82j1kP{30}OT(sWu zvFQ1E$9kb1T0T2gau{(9v@Mto{BnvrJo+toGn428m)i;@8pki1BbrX5<}@SLDn>^s z=N|U+@J#71Rw@6w^b3v%`kUZas>4A9Qh)Lt|aQ4JtC?s03)2 zNRyv&6AWhNz}hiQ^~-Hzed#Az7WP>*(R?>RdzyC>F%u}p0U$#uJU zb1_keGQCoQbf|eJr~v%?OLr1@i5<9WejuNzuMdOAq6GUehuGtsyl(rrdJE}ZLv!O} ztedt<0|5m-sb5uGxSkI>EwgnRQ_RwXuDmK=nRMyONSkrrIbU{jbzJHI;O{Lh!u8ui zAc`q`Q-wV4@CC=RfiD|oxd=X@8uj_MK_6H4ldLhP7IWU7wUpOd74Um*L>p}(BHsd;Y4TP4mzFG&mHczfna2yBiiQ`8Kz$;ckwRvMovb z%2F)4g)>E8-*}dqyvDG8t)~f+nuh8+k|>MaWpE13%-RL z&+g)$MC)^oKsv>sN_Dpw*I+&hcFHnrKsoN~cnuexWfsiFPOT4h34GT~+5Oc2L*05j zKp|=nz-VG4O^z%h`1G5Ql0X~d(arM%#ei6Ws-IPzg+vt9KI{S|PLmY5{j&LxM_%pu zV@GNl_6FM3_ypnzffO0udDa|HrIfABNl0fdwYb`}4D`oYm$~2-+c>V`JI!2#E1z6* zkky>q92j~kx9pZ2_nA1+M@!{HXxzKRv{ZP|PGS=v5YwKu4x-ZrtvHb#*gb-FWSL^! zupQM|?IB@3&wSLFRNBdNbNlG^bB7VzWVjT$``F0U`@*IIZ(Xfv`#smY4*>mp0xGWIxQEAUKS?#?>Cc@Usysz)^ZV`5rP@ znE`l(D*75>s+22I1F}sc`=NBUQy>AvljRj9dHVf^pY9fy6|0W;lx*E;f23qUVfcDs zOoH|49xYbHbTh0huF+P4li9ro=LI5Pq_kj%PX(={1|rnEJ62b9zbPL+;p=u@x$IHE z@uHiB2IdljbN3^aj;LJ5U!N<)0!?n`0%9Ev(#Fl^FeH5e6%$}gf&0#0v2n7HLQXkP zK}C%gn(Wx;^rVw;Er;{vKNn1oRXDl@Co%4XKeD)V$!oqN{RbX0)@R1hnu+}m%}Jq* zw!4JQJ3253jsn{%!OS{@*zfDVrZ}>tlp)HpX&(kKB*X3M(*EtpTTsp&W+Df zln-Tq3OKKz`LC5Caq(~QPtPkIZk7=r`>lwlDq9Qpv0jU?n!=6ybJdQ2(D9z87ipUWd#5Tkh9Pt z1-ed%r!4r;V8Gd;M)3k~;J0HxK#9Kz9nbn51+qaP3PgTl$+v+fqAeSlK-R=|;>vJ! z)-NFu_R%^M?b{gNaE7hBBYQ^?{fX}7O4LT*>Ra3MVu?XF<_(*l`wK~5THE+m!W9(R z!|6a*M^o_WWm~;KmBRL~$%Cj37F%uAKTdTHd>7Dc*?Q>(7hfZS4EBl%*S>B#mh$Y% zGcQet+B4q$LsC(*0C}apwH8_qVKwOYQS#W;p?3DYUtu5VsF~(#9PvjLz)k` zBAp8^FJAL%gR#g!lCI+w2B59#`|ePdpXCS?X-$X~Lj=HDnXo|7(?EWa+!kgO-nlY- zXrpDJspd$A{WCV@F{S5#46Kc&UpwlC!>hMxSxluc={lOT)0L6u&tm`qQF~c zIwE`F`clsHg>_RbixXg$Z;5RuNU{SUu1zEWWN8%!pG^M!Y{5$S$Jr8#IpH0pBlzO; zQbk=eXb^U(<^kjl`} zMt7^XRb>^`l*%qMMBbFKwd`=KPp?^S#}%;h>vZJor8AGDKhmu=Zf@<{1#)vxQ+VjKN*`Y03FC`RPlE9|31)0M zTZN9BWi#fKz2PEeL2M1G#cq~JY?-6J*}=kz%@HX-5#5-h25cMkoI+=70r6b9$5jWr zM@qssLHQP}KG3IW{lnHEzHwxvowoGbc#Nrj-hKDx)bCzYz*6Rqmlu2i8c;+PsEy+T zP38b>aC=1lnOZ>yE2gENIiwhpu24O1ta;-V!jM9r8$dCv63SH6&QUoo(4={C9!jmJ zj4~kDh}>^{=HpjCjP(7(^+LUsJVjv=0n*ZLZuV?=6O)3tJZ^cOGMYuG%*B;^KKG)x ziJ<*gmg>mTti`nAzC>4!iz{-EsPc%sU@vJbPN~?U{0!k$9q!NDZ0Fx>tO!);NK*C! zx%>>yA^+>L#$RlJ9PaN7Q)U0$@wPDVITplqpt^>{$-^glEKG2t)AdMR`&mFK1<1?z z%J~2ariRu5u19=@=2fd=KC#jROvwQ{Dk+4ZK=F<+Zm>|P$KB+QK)GyHRc_S_kC&JJ#>eGT-)gFOd?zLTdl3~mRUJguXgrez%LBYsW%*PSmC z?lk-}DD+>0jH0=fzZCZVpk@S)_U~xS|HjWc4AYlzmVkS9P#_-;E(T@D8T-FP`SFcX z8OM8)-#Eur)Q2zFIe3DhINovJ5Mdo(~om=UP_ESxy`{q^9-9kOpJTMS^VU3Sht1`SUvS*_no&SK8L?K@-2=268xT$nXuYqxKXp z*RVE*L$tqvE9_LS%nHZ+@J6H86VKOG9?tGwv*KroM)J)1I9O0dtsjN+l&u5+#M_GV znp@eUz78B97souLK6w!cB(amoYcUFa7$^0+uh0p8JBB`N$jm?D@t$;_75~cIT9xxg zQK0V2h2uIdv0ws85b-F(>E9`(OMC^XH6XR^gtMPXwSkJH72PC8g4W%!9+#G{gpU<7Xuzfsg>*@SnimT2~4Jxt{SN|S9S}~%{K7cvNN`SDaSWd;+ zDUmaXQc}Zc>K6aZ+vD<_zT0pVJPIyv=H&GZ3Sf9eEoOP0@q5%8T%BOnRe5puIABYu z`R^bKFG{Vp9(PdLDuSjY8z32d_00;|hhGNwM??uEfaaWbLv>{%PV_630GFClXv?=L z*!teddEiii!@(hI)$sQ9FxGMSvSoVR99IFvVC~uDEF!pmNRz;mQye9LfIJf}66os7 zh>HrWbvezNIWz2h@!HOmI(p{rx&^}puRlMSH9sCYfXc?79uL6M|HtRIhD8JCm3ZX2JDaT`-vPBX$p&r#CZ_om4Qr?R(9UY2?qy- zuKbZ$%X?{;e@F%Zt+zJVG)xX?L8D>?Tl?nny33R7j>m=<6(ZUWJop3)Tf}Wa+t`Bs zQMsg|eR=ZIsUF>t-YF68yJqIb{3%HXD2TOW1)UuQQpjXjNuq7X0$O3Dvsb@nqdTy> zLx0F5*D+|2zHPKJg(v%CrFTjzdt|)P`P8jurq1@v-1X8EzP%)UU;}?Z^2V_S^`VO>_~vp1>%(eQftjs1C>Ph%87+FoSr`#3083r0ku}oe_i%nSr2m&+f02;y zS>j`W(-2DuD?)n1goobR%KD+79=}n?F>D2^$PnXH01a~FAdgp5ed)@vIpHskYA(rE`Dk4+ zNeRms_!kw7g+B%oFi_yB4=Q#Ao|s@#-Y)rVvU(&v{08mk7tQJ;pRrGfuQ6ii418pn zZ@j=ezvRv_jraQsd=?RG#XD!P z-Cdx@dWg0WbE!2Sa~5()l5%?c{<_VL2bhwJ&jgx*Lf_7a^sR!?R=?!gFrGZXn3aP` zE+i;G+Ent#zPZ8E&v>_-6?cB?xw6(WBEMj2uaAPPtE;VAZEdxZ=A+{S1vx3!=E4{a zu7$5ISQ;Qlzmq<~b1X@=wou}!y(3TsYBi|Eu$RxbH8pmuyoxMS7UGWl*;D*y|0e@e zbLT9DgP2v~+W9!ZbSKz9-L|wLcb{~S+K0Hsh6zC+t8k5dmt%Q*5iV-!K z6B#xYSbWZ6Yl75SSW&R>F|~mckW#RW8_$d(nGUb8UUF3>((XtEC1+qx3KxV zFo)ZVHHD9@Bx|GRe{Fg3s=1Nyt9=tD5?q`QKmQGB8|wj98d6Js&bDLp2Ac2qG8|>? zv5~T;@0=9<*pZoGK)4*pFj`+;@HHhc9(hp#=rki6@w zD}wcBaspY%+kx#CALy>TC4@Dgeur^XQzERncJ1Fc-~X=O_m{Z+|4u{x4JbNzp~NXI zi_p_RV2Q-;_;?*x%xvR@D-4&SPS;LXuZn){N2lRdMZY!(df$WG3G> zVm^ocpA!B0fI~?wA3)rtarE496EEL52*f~swQ~^y|6baHOAA8&i(KHgMf4v$sSxoo z?mDP6TUNHrDLG<}u=Hw!SmTWEvG8`@;j2|HWw80??-nV|5zF!mi$DN3EpC?2Ug994 zzXHuQ*c)_?ZK){|P;8%#K<$=V_R*?bX|kXic26K#u5JBqIBElZN%}nHn~xCE-hIyD z+I_bizNRrL6>U_C)HLngQsb_(qWLjUrK(^)k8NZ=2Nvvrq+l7g_Oh z8`MX)X{GLbBnV8>=03A(y*1FrQ-sk$HlrhNrvnGp;jG#{}A~PhKnzs#3Q{SXU>%xxKzQU5PY^w1aff&Z=Pi{e&;?=2C>?g& zLZXyy75|#2Qj9U|LoG^fP&?_pFgP7Qa#*!&_2Z4CFKG5bx zCZ?;)cks?WcSZ-as7q!xaH^lW?JljMat%a-rJoWW{LEU9mkwb3~&+(e7p%&+e4A9M4#KYRWvree{K z<^yNB;$Y~SCU}`aHqew0@vJlnpUWt0zi%!*+G2|5$pI!`c~ax3^>8^Jl8%x< zpPW9&ZYn|)TNPOa`=gFYyO17OUFUQxU%7xNx4M)zV(A3zOs^c9R%1RfVM5hnsp zM3@`G+f9o$hRIWam#rWXXW_dz5m6uJrP8v=A&+1mG7V->zT_YA$Z9~5F-M>$sJ&z>ZQq=7z8BD)te$HlMT>6nDp@mAb?D@f-H-mlafYDhkCEz z!&(9gJp8XF92_|JwpHPrw&PKuyv%7@f6FR2G`>GkAg;znFqY!5``mC1HBc2cs5pQ= zGqR;TU`Gxo=&qOYlYqUJxP83_NgGsk6b4h)EQ16_7+6=PzBHgV7U-eXxlPE*p7AI% zINeWS?o>P6%lx=kIwIS}`&6o{%cJ?u9eT81&NTh{fmmq)$JN`C{J1JSf5?G*5Qvn) zm_VnUe2^_dMH>$9W;(F_DxMTxEHAqwhAV&Lzis|S>aVdrSF1ctf1J7z|8s8;Y8C`) z>tmpL1{es_Poj8BMZwBtF|xg85ih=aXQV|!H{BVw?E}s6?^C8mcMiGRFT1b5Wi0Jh z4hVd-W2;1Fn^-_EHUYZ>*Kh&Ui+OwDQj3AW?*^N~AZwJm<)a9PeXV1Ip(z_srMcIO zC~H_CwS$3Dgu-t^PEZ{9@S$GvL2sn+>@3d?G~$(PM+x$f6&O=lAZ~O*hjEnTwR{Z2 z*{U0FfAUW-dpoOHzjjn%)m`dCIuR6}yox|Hf_uej7`?xxPOuxgte)on%4rg-SIYKG z50LB`Cf&D16*@((@85U&b>Vxx`kyI{`tLCpK-(jb4(68(p}6{8?3=nlnLrj!Ilb9j z=Uffz!keO(POa!W2QG)abhXtq?#Ku;*oIEvsod43uBvWx9zwpx&ALWY z)0}%1?e2izf);0QqV_UM@2SlRwok8J)Ae&+p4&7w&xm~YaS3?4fi?r;ci}tiD2x~6 z&az^(%=~1aqE>KCC{fpo7&G>!=L{S3lZef_St*|qi+)iw+SHC|Rrxrl@=im)m4pH3 zxSj%5D|v#(I)#L`i_Ek=tEY$SE2DohPUkU#I?7rRO~DqjojG^<9IC_bzA3lq;)LH= zAHUgnrN#8Hh!WR*)PW~`ph;bcU&K>nYcnXb(hNe90#0Nhb5@1^@<9P~tIZ~rdjBGo zsziS~l6rh?$;gHyv8eo_@1Xh)PZc4f&SGr42p-~@(a#Bz9w{5;%f<}3#h zI}2;kj|rZ^w$f)$j{n-b@VGjj{^Whyq0tTBt94Zb5~+X;zZ3+gK(q$gq#u*K+<2Lx>$kt!2I?4U7G9D#*6}v1uJgQi_sa|Mcvt4iukgzDwSQm-?CUlN*^PHGV zTV=pu>foA8p z*;(!(LGKxy7f@Q(dJS2fBAYri2~5_05p{>pcbXy>@7-)ybtn`xQCO#o;QfP5&T)7% zFQO~vC{*%BYGF}gpKl&EvD&gAztFQPQF{Xi14Q>5v8`mOL`Sx6H<$S49Q9<^ zo@c(rHm)Sha`2`Q7G)>xK{Mw`n5V=wz3pkPy;6s73kEaB$hVyfLc2m*T8m~a?=W2 zsO^3u6Ylspxy1QU)BfOL%KAVfcu8<3h)|>9n=$(CjJbH{w3bF)Wxws;!Q`I0cDLD) zJ&E-OHhcD7{Olgb4_9zJcEq+|3$Lhb-6*0TFA!g168pmiV#QnqD*QIjgL?#H331&E zeS%*LwE7E&ruL$IQ5NA3?;G4Y!OkuHussoNZ;g1Y@zsfI3zldg_JA)aupsmYY|gUU z>TB)jiY@rt8RfC53>OLf=E;FZ3x#r$eTwe6gSk<^*8V1Bf2OYF>D{wEj{`vw5frg3 z+n@^qc|IPJ!9}>ul+k<2xW+;J z;I<%y`cOnVr>wG*IX}B_15dZ!qpQA!aPx8E+pD{_xxQuP9r%e7Qin5%kbc}fiU+)Z z-DuWQ6D%q?7^h6uJG!l7K@GvsOUm_ej!7ynC%wD2%Q8f92QvElJjO2!C-aj=X#9T*;Q(%3P_@nfiu z#)+>tHXj&T?K^K+K}T^?_}K#KNecsL(Sw0VAP9e}E^WskUt#n*<`$j=K4BzC=MPN; z92mSPnj$wp_MkuQ(?Q{iv>sLnZ?pUPF0khaac*M0KrG#8{49iHm!5=b`Gs^!beKbQ z@#4x&^-s2sc2<@eBypNYM)w}MCw*fL3{<7ceiKs1z_^FeR-=u$k~hV#c-Pqu zw`nahkbM`!?P``FO64QsBKWcr?eFT3Gj%9Kt-BspyEI()Pg?gxo*-5{nw zo=k&0;4)KWbpVgn1O<%foEaU0>1VF-3TS8in9W2jWz=3<;)rv>sQ9@yP6qf3BB~#| z1qMoitRxWNd0~T$DO}V5X$0Wb)5k*1D^UXFWh784Q(0!T#aqBZ%Xf5cz_$q|C6E(z zq^D=}C18|9qOTLjGVQWO8jA{Swx;O{y3c-#)lABbahBcvL#9CF0$W2M;ltEH#KT1Z zKhqp1s29}cnM{X@=2K&+CTF(?ps;hI1=AWtHtj5&ykAqcs%Uc=U&uw{q;9Kl4(p%6;d#j&7@ufgJjA~g@Ed=@8 zUXl~TZ@Vu1Je$VTIOC#H*!dky5%aS)-j#_Od$sJlm6_E~G~;K1q%wn0rU>GR7_2@^ zq>(uANuWTuy-15&B8zq!;GhdD!EyYUJ?$+h;Uxmb(2wJ)34RD1CM$*5O(ZcUR9No!ohFe zpWAnTDWQ|fi?~;D^-U&~Gp5`NzUmU}^m?Q?F)9!ye3GaO!O^&iUolGG&Bu@Vf<1?7Oati64d=B^nk!MSHlqW zXWPs2ckxG zn#x5lo8_%q9%p5&Mb)qT7+HVkj402KdzyEK50u?Wxbm2#212BBTZ>;9vp!qCsE^brG7s?jBKnQU%6z~{{v63Vi-dMqH5V&6L6&_7+WZj>&ZI<^|Nv~ z*?krp(TR-U)R$;1=gVMyMMe+crzy_Zb+(srxjG~$hLH{5HM-VAg*W>F)&PUHBBHUv zP(H^ll}g@UV*%r5_?cM=_huFNT=|aNVpCk_UX}J;c4x)fG6Jvo9(S=+x>G-+_fBy zvC3D3UU6P7AMk(n7vend$pVEQk_PCx8N)X5v>9l_Pp%@3@UOGXY7CXGr;>*k+agQ0o*;pT9OOh#VM!aJ$pl%dGxvW%V%?sJR|t~ z!Z_xTRuK0W>}Rqh%Y3%mAswsIlz596rdKe&XMg|jLI7rny9o7rVlQqAF!6){X*YfGrMQ5hYe7JayA@s)_8L_8zf1J z*POF!VbQ!@Vb%I^KSTwsZ{N>f%q%7}X+Jmr2fAsS)C`e{zYDxAsD@vG(uu=*PhLzk zbkzxzOS4jXKYo3*;d_vXl+Mq-XT)ytWuib-P=g!IfQ#IoFc1Yhn4Cd=xLQ5C%YQB~ z@ZRn+Dg)z;;IWZ6! zy8+TTPidc}mnNQt;utPsn3^mJ+e~!a>9YH`(wAyr<1jPuaY1abxm*^V^25arxyLzaC z4!GzWAg8C+%hU2>=-M?D7uRz_y2}{CpGC2phA^4^2j&jJ(%@zKNoH1Dkp9;D^DIY^ zcP#WOyI!Z)-}ENyvE@rW79a(`&K7@a)HZIFn$99_6jeWKJPK<_0$cl3dg@p2;7=&k zN;`uto8;FsjVab2h(HdW*q_;eduPQ{IF1vBj1ex9Ita)`%oA=N{W=i7slRsiTSBb0Q2|}!@K0-v3Tf%XUcncHQiMa{ zGxaRkMYdN`TQf1CR|m8%uJq3?*eX~#J%_?`e?2N`A+!JGk3$80Arh&YQJ?JRuiUf8 zH32Q9M9wg4?lvcpuz{y!gHwW@SS%Q44AnFzc`|cC#ZzhTvh6Lq2(Z0|3u(VMcK)9R z&wuv){~zk7pSiSm$+ckmVgPo}ErP()D1i(~7MF*)zX_SOQhpKq*tu?^`tMpE|IOD9 z!tk(-6nY?L3)?DM(8JMS=oe zFn~(dpS}E!#NLsq_O1Px^@;xKNPy{SnSzO17+fP%-hy7h)dwbN8?GThrzdmOApWI?R<{z4`dWTUv-k zPH(MAg3wRofDWCI3^c`mspvA3Wmd3^s#Mw5dM_))g1*1tFMJ)694Xgs){hk!vGeOS zo};~5BDrwD`1OiF_gFYjm7Ym zY!h6(GSz$FUQt1Lg44{s2Cm&Tc1v*t%nil8g8NX&I}RRcFj$Aj%!M$^tAQ*_JJC!H z{4m8b7|~=0pfd*TOKh@suk(J3yXrC)cVBdDd3;Ch^r(IV5r(l~ha~EoU1o1WDEU;^ z(z0@$jIz`!Ima#v=5Eb{YYCm>$*dEc&1Z!R>ZCz0-xg`zF7k-C2fDzV6T^73?W-8D z_;YA{L-o6Y&OnWPE78sq2en&O$yTa;w=n_GWhMeRK|6dbS-zVTs#ngM-v@6rofGHB z$f(G7em?8CoPvLnc+EI?Nji#lI)G=$Ny5x=_gR9j-O?<9dkp;%MN@;F>kz;uJJs(D zwAdz|P4{}nbt}DfFDzA5WSjkMQ(sC9a`O&;o*(ZltZ|nHYfo^jl9?_)OG)O_0K#-m zD(@)U7^uVQ35+MOfH&d+cuKzsMJ~8_`MDhSvoN-qxpnb#=po^-rW?4j<(8RYCXK5& zM_D-9F7gGZLh;uZLbot*G38Plv0d4lSlM@9T$Fw7b8=gia`pHRMeSXaK*Y{rwu`mI zu%*Si)WggAqIgp3=@>o3V`nA%IJv6W={;CP!5f4?491nlYy-sgvN?1&Vln0yR&3#` zYs!esfS`bUE6vi92g{xsnth!x)*L*NvTzb331Z0tO2ch4JSUd_-U5bkW4%cSSa{B3 z7V7pQTHpN=u^ttAQjJ80NW6`dif6g9TV0`GG$cqWY&J7k4>X1IU#JLd={a(*QzbH zQztInviots7{cFL#pR{dsdkYrn2d!Qx~maX-!rKzu%yhx?8x%uZH#SKQV52JhP5AJ zk(t@1cIouKB#{|bwhG8%`|(M~vpAk?{jYYqpn`7BBh)|+X{+TqAPMD596+7wC22GL zGz8M{#BAa8nQV;?#E^T3|0V6YBmBd&87t1W&43O86|ao;8db%r_nF-on7e1+K}Shv z%Edo99sFTTDn0oZPJv)8#)wU!(xL$}lGX)L)9kW|CEk)>@7G#JLX+ssNk3A+uR zysew4>}O=umD0!EFLQePNB&&l0`csN+h&!cv<5=Fx;T`@XmtQLMjF=Sys5;3uW{1P z#PnuP{?bvRKGZRaiotC*kQ$I^%--HZ-bOAN9kvzfGBXOCU@Bi`5`Mw7LMwfRXAh~n zc(96E+67%9>bp`Iaw+IdHrv)?0a*E-==YWtn&})?4xLIzG)f{k_)d(iJ6n3jOv=k| z%ngm?niwml;Ba5ydx_^(&x?U-puo^YOjPvZun0p13UA0bnp!lWaXR^OQ8IdewjFCB zhuO0FH=xobkSDR?8jV>%b8T2G$XBbYbDZn;Z}#`4WmuZrn(ts#s)44CIn}k`$dh8P z;fWX~%_AbVPfiALCJw8-SSJ4n{T9|uDML~bs+f~dfbUC4qs4F3&)+mYH{H%_k0dwmVGHT>r+ze7%ct!_~bb>f!=p- z5!pY5*yM=r2WjAcu)rx;w@~IttvE3IG)aspJNpShkT#e`Fg?j^!dGXSKnC&l#e;*Y zHsAOo=DP^O0#$ThJ#4+=VYXGWN|W23`Im^}ri)*p&>CqVO*G0q0g)<`Kh#B@MOc5<5kmzCJARDtwBYJ*E>%;;sHMjavN@rU; z1~(|qx%ZN(&;{_^LHDqgQH*LtZU%~@iamFdw2ztu-jLiHm4d1N#BMSCNlpTkDePXr zqyyY#-VXBMGbvrx>iSbg&MFl_kGKrgbb$z|LfQ$sG}-a2G__`#`rXi>Q6R$3k0YB| zGmF~pCc3lwY`U(dEK%S2u;aU~Jn|X9k=EX}UU7Ki(1v5#aqkA{e_e87<&iqA;Ek;g zRxIiHudibzk#^->KN24NI_P`z#<%1{N36ErHtPZaBPF(W|XQU0& z@EB`)VPIp5OIHEqiO0s2lA$EOdi)t|8gm2{mmBT7{~67!a_HM)Lu0Sp`~WK7%pw= zeX#Pq>C7FOtT?NZo;BT?wG|2HdpF}3*F5FrM|F~zoK$|bK#hlBC1-k#A_v^-1#7#D zQ5qRji`+j7(QMkM12CWpFf zG+{+Upf=7j7TiTdQdk!hp)(>6csM=@s{&{%k5n5+;d~GxkbdLy=eotaV!ypdlFcf9 zQK6h1=>^b1{Cb`zv=6u+0sso2L?%Z}QU-Q9TueTpdH8Oun9tOIu8~>}`{@pVw!F%Ze5P>*dw}x+hpuHGYP!5QSp4 znKnzlj2B68f0q=U%H*Tt)d;aZv`u7HbQcvTl*9T_$&BqYyHbIdK*xX0J@zr60-=c^ z-E1kx__9St0VW;Nj2>^MNg5UhFr?}e9i$jiBG&>8hkxKvgpBZmQlF1(I;q}3WN6;wy(JqFz4v z@Qg@0_6wLwz(lY{em2@Nk?{y-{Gv`T!S?vS+v1rp!byvbAeID=(LxJddLHDx#%%kz zqPFio%1&K5mC7c#fUwn=CM-#A%@}z-?kXru_1?R z?c=uN9TcO5kMz?$<$zTbd`W5=dJh_yZ1(nmH!u_Kb53z-~;S&zT5XPxOm8{ z8ek`<$nFU|#)3DBuv9CI3(dK2veS{MXz6PG%pc>~R>fg4z-m*Zt}chQ;w$JXuv#TecVfjrwGT^Wo)NUVSQ6Qdc<6Ht+6>4+fXMbaj5SX4_81G&Qf3lXs&M~hopGT~he~*aaAR-2urXVa8ogGig z_}PrR1O!H{EgBMzeY*+5X7mE_2=GsHqiw4`U3)Za!eS?z3JN9JrwW4pV2|00O;}Jy zst5Au&@?@ts{gg^B%6YVwKy*j%5ir_%>T_IQ?AXpZ5rU8ApUtwRcM9ExdtJbZLub& zE2WZ2IAEtyt9IHG*y)+gsti^Ak(R=jyfv!f1Z9+dkxg#6J4vb9#Ng)m9Lmgyw%oHq@R>5Spjm zqloh&n5eq~*&d8OTau>(B+kwakW&mMer$MK#jP29xWLHb9>eH@R4d7fDudQxNTAgv zcXQi%w!0qGqm*A}E;*s97S+qAK;!SRpc5y-3uT)&WVq%>Vz7dB-F_&U@S3Ks&bit9 z_*#WtU@&*121Mw@WQ*-Q4O>`!wkb*&df>c$;Nw@V50@yIP`|q26^C39&4jSw^tL2G z^`J(AKZE*7aK=wxxucESo3t#hMAq_h=6OTxL4!%a%+?CpG-<2>s6V}#*3b9~WzOt+ z1a?pM2x6G0(_ZjQ$`rz}n9bR0&^lOL5JA58DIC#hFC)56srnj33s; zL>Gh&qVyOo*u1EIaQZCv3r)fdm>t~a$|N#a7t!5B=ZJ$Yr)`ikU#)*h9OHgvrcS!$ zfPE2Cj{>%WW!#8UxQ5*Y65>Py^DDRmCpy1mslD&$;zstR^L)&NS3SHs1T;QT(!Q|G zG$)pS!80GMs!8C@q&>iN>BfB?Uir5uFrT*@iuB{28b-fB#it-f4_@azCh73Awrp<2 zFJ`YAA45>LM{YKR4cMJxTM`nnrBqn@E{{$P95eU?*KBS9ia34!otwj7y-Z`@_3mgi$^;a_~E`qo9@zFG)XRaJ<8 ztT&*-e3XvDTWAe<`;Ow`rA80#L7fX=y z1hcwA_`3vpAQ889=Y*$Ht5HdVHtZZn-D>EeV@}#r_XDBYW8>N8)9n+_q|DpFN@_#! z2^6|oHM?{eYMYVtH?!u*ozvF1OCr>?SAk3PHf_c zxQ8AcTSl)iY86&X3H@F4^klL!Pe0R|T?y=tGWU~C%d7G`&X0S@j8&V1=lK3^UX+c> zrIN{8t(l)Pr#bISvdR|9xa&o79g($oJGU%wji@>hA6Y=5jQ_>kdxtfdt^LA5P(;*7 z7Z9SNfYK}!r6hJxM8pC}i;75z5EYOJAyJSbMFbQ^7>S60NQqLFlF$(mkuD&lpduxZ zP{Jcgp7|F0J$qk!&+P9#`BV^^tTKBrkuV55h32kio48u3QRCA7IZ|S$? z5JMSW4l!Pk4Tvr<65wn=bOAAeXAl|qm*}#bihl>0<6`4bhXP@o7`p1o`c%cDHddAo zBB*$9*Oi59KT14ARNc#>w;GU+DA}JsZf;CGD$4wU)ZU!znOad4@}rdQ*`Y=}$Ro#^ z2jWL<*EKyGUvhihw{0R9!9M!H4d{5aDd<}2RgZ2- zB|oXk(H3X?GwtMm_v=~gPy>9jn;j&IO{FaD$On~S*g5hC3z9tf%PQ1&R|gIl&T9ho zU%08QLnPn(0o({XG2hkcYcNyd$k}J>+ZsrQP*jk>nUH>n{#lO&d3t9$eI0kI#gDi! zN)ipX1@C0`=Q*T6ctB-{S-=hsHPWOixlfy@;iXU4^xGBlq%f5=m5Co({VYBs$SMmv z|Aj-S0|L`E+h0bQXaM77kbg!|t*9oVH<)idum<@{6}X_DtKY$(0SE-kbwWi@R{epv zM2#F#>Jjec1&^KXG`v@y;f!4A`gO=`)wM^7$CN{xLQ;hoI&(&}2D1sny;}n~D(U>S zz}ZYyphK?HgAo(zd*1cC+sZjLJ@>XBG>HmSBk|$6_mx$2+UuCU z?FQup@P(vAc*2)3fRg>5(7)`Y(c}C@KV>YH+#o=&2i&nt9+(@hR%LLh8$}UxW*K=6 zQHD!)sqQs5;Khud;|0YDE!o!huL)&>%r(sloyIw*P2=R$o|VS|n7uN!=-=3ZxPjm! zArRFFmAP2{ZYYFBRe*4#MagVmlM`4DZZ8+xyf+<}rIRi@==6uiNN&T=8QFd$GoVC0DFc#%)>ENuMl4sw?3P;)mymcOqzP4V=F z=-N%QxSwJG7X_RMD8D3xU?(tF1&T7LfiZ6-pTJN zNK<*ccGrPD`@cE#l!1&k8}yMI5vn_m{|b|B}OA>i$S#s)!UTw zd$^8K#GuO-;kmRC>L=uY1H78ST?9RjVrm0LfuQ8Zi>jw8VhN-^w)4#T3H+u#@7*Oz zY8x|KC!21K)sxGkrpi9077`AR=7i(B7^iKghV35RT8}<+zQ@hAzQBfFoz@5~y&u8Q1ykYI0g6+@^U!Sd?OP>Vl zJZ!&t{p5|gijkUqAhLwekmS!11&6aoZWaZD(*W^Jx_i_s_M9(ds$bY#NDlj z_Iz{w>h%6b=Oy%W8W^VoyAGXywd)`(HerVP>(F|lVpxWd!T=oiY;MQBd9sY!p(z03 zi-`@Xx|`eNlfFK+CiYp?{_|Uoc>3#qN7|=eat$&7XX#I&A`3^XkjblpxcVdc2~y{jpj84;^dA7nSe2-NOv_ zu)VU@X}p?Fym`#q$u<1c7}!ST;C`v9C6_yJPy(Z$>PnyCt=_3AZkWjNZ~el(H*yZN zeNT+Iy-GU7VN!u;2~N(fKM+YJ0tk;NXd>eW zj$b`ot?DF#FVjGr3A?_HUhDuApkn!fDc%^?rV1~iC-dhw^P`>twv-jY_mY3V)gIc5 z-9YLEc%wBy`*jOIqC7d)0i6hNb!b>`DJ*546kBN47UwMOC>V0ky4#aHSWRV;IpF|` z3UvNK{M^mDFm1HMT>5%STKudf9O5a7P|>BXYkciK z-nvgFr2P0Eb>-_Z8@~Z;L!NU%`JAQssXbKH$Yt)$7zjJSF9II{D1Zz|+jgp(g;Dn2 zg>zc}%;>OD!HYW=+*dkoI4GeWS&8d_ws}UQ*PQC7tN`~Qqn31GSUoZCtD3{fh2{aN zix@y;iiv^TVHJ0NxhR!piz4pm0+uZ0e;`86b3D&F9PQ4{Taa2B2LpoAd^ts#p1VH!51jzK z(1Aw}eZK$8DDVHtxK1(!?w}|WZFsg#Zl=XN$$Nf8BOI&dQh{OH{o~Drh|@>fI4<+_ zvTq>ETZxEe=JHScIzu=IB?v4(n%$M1n&tn2aQe9{{xqmgj)!;fn$y9JYq5@~mS3Kd z?7HP#&wp%%2!C!st@!K#l%L(vWlZD$(I2t@sUkp?El|^{=2=dq z^W;u-bAD9OXrJ|2VH=y>9CkmHN1kEoJ|@Jy#knaLvh&x(Y-k9X~WXGb+_4pp}_FiIb! zvXO)NjaX^-t_AG{JksmdV9#K9UF?OdCm(cuL|717$MXIFBG9T+8^5UBit=N%RUR1D6OOvwXD04=#hc>4;&^`%awyK`siOfiiY zFjpy%y-LbECe9j1jwW+o4>^Ou16wsJ(%V_E_oI$`&9g`s`IR?H-5&<>sp%=rZXY^- zyjyyMMNgn+{pn>UqC^8J@_10(Q>(DSYSYI|_@G7ZTE zG)Ky)$&`&iN@!9E(mGG)iq3AUH{GRGRL)Q0u-&ly(PD#Y>nocada+y=qzc&`t{q&A zyx2B@l`-%&-|M+TG(O1oSc~AhB)i2?UVDZKJqv_7{X%Qsz&sz+TEmyVhWR@*HJg>~ zx7+S(`uujN4xmApr~z;#^8q)r1tllM@y4clLq`oz1iDntSL>oWc{fyda0^btcX2)P zV{o$TB4<+I1$V+)q6G97?i`iwhQE^sC~gel6RmoNKyeC?z8$HTpREN= zV#wWwcPo8+Mt-j2g#FDpbEWILoo^TIB>)BzB=$lXJd@I>7VH|-5bT%7ZE2D<`OOHs z8hbqF9qD6d<`>4H-B>4^>*d_i2X!)HSFbX))s9mi(zXJd5c*Y0Bvz)V+UO-=X}@2A zmT`ZOae0!hCvNk;opajSyF!18zo(f^ph|(z@o4=mk`_KjB?u6SxD)o}CW;wbif79l z-BS*#v-Vv7=J}S|sfVAJ%xdx zs^|I)-*NmnFOZww`<<1L!Cr-Q;3LB*xH=Q$lZtnY{#{W8C0GL0fW=8H-x}OMUCGX< z*9pQzuqASrh>G-k;a#n68nU!Ts`rx(+WR3UE z!g6Hj2(hp*p-fZ~Ja&~svnSzA_Wi<@XP%NlZ`N6};;v@-Pg*I9uNaMz(JlfIxz!JYaH+B0+EZI3Q#^I`v;!{h!= z&un!cDEF)g&0lb;KHUE|S!p2$?9oJ6CFU9wjVB% zn|iAia(yM~zC#0DMhm1$1K^@*=bn0ugA+ZtskMuyDK9Loap|qbbL6$eTU1mpm*JZWlwcO?x zUsgsLoOGD*C0Yw^fZ%(M?m^Ef1hsBNXxV|4*XbL<6qOPM#?6}dH7TQbNkUL#U$K5y z1%HQ**i@q*>Tc1*TlxbAN{9khOs3U5&j&`6D5RIY#-3qUbZ5o~$uqXkfcq-Yh1)uv z%&Hb8MH7YsjVZr1q+fjT`v5y_#Imu27GM42>5Z(0JCF=d=8T1g#es<%wT^* zEcFX+$)n2I+VqLBZxZ^BNT*2jl+G-nlrVsq1d#YgEAw6z)exii;^V5Ei|1c|Sif<@jrUt=>qHqC=DT1#5NObnoT?ecJg_4ywq&3oUM}OXr&a{f z0w3s~?_)nTa{kp|?PbwITd5+q!0z#$_f;Qpl?N9Y9C4;na2J70e4o7>}VEC$fT} zQpL&2u;D|UE&NSG;#(x*N4#RibG%kiI8p$+FXPn!OO5lwmz9U3P_laPR-smJVX2yP zJ;{)p)eyu=zu#c!;FMi$vbpK1{eB0+Z>I0%_r%35rlEvNQT4&dsZ1`tIYS@x!#^OS zv2stRN^PUk@L?mia)cP?5JFB>&FkX5Px)(#Z{OGXAZ__xBHX3FsRPo;eE{p(2tp4V zL<_ZY2jL$6k~a6neZ9tF@2+vat+G$+Y-KHqCxTMe$qneW627l! z#!=H{(l0;QRI+-q9t6@l3EDP-2~ccvX00Y-1Zbf}zff6l_$OJR%*$M@5K5XnLGPRw z?3Lcx`bsrDoaFj-b)A**PPGqBCH!Mqg7r`_C|S2?Lb5X2Q7=5OKOh8 z%AyDWZN@XB?hsw6SRdF7y}m!7LxynGA-TTfz&JnF>?gC*R+I1bJ#I)l>F7;IW918$ zpXuDwh&B^;~nm3NAp?&r*kzS85Qu0-E=#lKmr(7IZ1 zt2SQ5{qVJhSIhCv%)nAlM-x^ZAMIG-CJct|^4u_SDo=YJ4j*QD^fc9*4P@zFWjar- zuM-wFJs5sP-?h}uZxcNx?II1)xyPv+i92{l7aMS>xD4aZip}uYi6lO9Z9@?M-osxu zTdi+y{c^`6@wbdxbp%>Y6h&v|qErkGhCl)r#MR6eoF!sJh300wiUZX&-mxcH1l);k zKboq!G47`Nh4~*IBdWo>eoIK%Ar>#Kkx)QWBG-YZyb{(WdUI!@KyklD=uyVCjjKKi z+K1FAv=)PKl*!en=cN*|D$0A-rayU+wtuTj)kz{zGIXOVq+9+Y;7pQ*H_Q5YLeO*pbWJ-ly*2B2_3Y^}KLHm7$xnzsW zy2NJVWWRV!5WNfIlK|=A>lp*oMmn-|ohra2C;)PA7TYr_xoJ>8oIBKD>C}^c?BP|t zLso89G4;^Jw{0G(I}z=-dqGkd&fbP9>F4ya_7*?}0!#i=-ujY!g44ku|8I^*Z+mUI zk53p_JXRO!c%=A_sa)6Fr#M*3R$#q6)>Z+YjBbz^yCbZSCtZ(OW!Q1g&7g}Ike2*2 zDA8&46~WOLd}#cPe%=lFw7`rm65+7*dMn49j>tmT7*rkav67_K%Y&$6cMTd6 z5=J!1;Y-3LrFbJGl5ot7W74oiSypE#pHf~u*>xD-PAZLD-ZG2kfYn$GfiONH-bS|%~xS=o~VJ-T7cZ7+r+-qg34=AO= zP7{xW^Mgf|)tZ5nm7uu+chk1?1>&Wx^rwljtEqYtyY+Yi^v^H5+E%BWmOK=ES~45{ zjNx8Lh{CKQp3VIUtAW|nOzdJm8JW$Cs;iZ(r=5`R(5R zgYQg2l%|df+`JeS_^BoqIR^YBFhVrn`wXhwp?^)6XnQfm>3)OKO{)x-Oo_ze zD#`fHC?}x=Sm*0nj7P_iY8^=&ig+p9(=}9wDFNI%qL@)ff?RXC6DIn|ag(9T-CEqw z4?^1PZ;FfF?!=Fzi=FJB3Yyx>EvYASPg5YRXGWPXW==!cny?OV&{>4rN3+sF%eUM6rs1fzTR;DhG9Dy?nLJ zT7FmakNv)5_iG8BF-HmC?$-tccwAh)^^WPp|3D|3cQ9=^JF|2H}l9y7zANdQ87?b}ql?Kk2TBrH&#Mz2Ozy^2|b? zeksqK@mn*2fo7sFS#~Mz^DFX&`=N*|p*{E56Se_zq~Yby!D{In-u|fJw7s8WzLBpX zr6$zPL@Bh*UX?Zlsg)VInXb-*wUl6Ql|2fU?~FRgb!KRwmbPYDEiFnN)jtI!8RK=1 z#YpF0APMy)cY^vb3v4dVN|r?sIQx}l7zr@Z}R&9Ikwkk|B zxbw(?T=)TsiG`Ia9sWR|sJ4=Z&t|?do0?Art0^^Nfk7Xoi4v1G6JLFhMX!J;V6gTU z^3Ma^F)!C9{?iq=({5iAmOgfO?J_e-d$nD;_WC}mg(wjyK+pk=MU96Z1$QY4G#u)6 z*w!_sHk!^I9L_00XlatAMoaMz_7P>Tto_ne-;PyFh4>*N?=2SfPJak0)Jkx|Ulh_zQ8!>8I8!uTxKL}!F*I3GA>Erg7;GDf*5^_irJWP*Wyo|X&NK|x z(6X;pTwQFIeD8hf*7;=F<`c;ex1EiXae>}xty}l{O;ScK=wj6=y#+z!k`S=nUTcE| zCSXtZ{{Z7{ffJD+dI*dn$dW>n9`Y4rtW)pUy@K{f6@96E>y@qRTY^_zV~*7Xw+Jni zMzJDg&*lW7vg02J-udqtclqBf%_n{3%;R20OYhxXd)h1wdIVm}1~&82`St~F#wc!n zmmEE^c)r+59^9h`-zy{*2~|L~i9ZLoLlGg*gi=t@&04o{H&nIB;EyaN!r*8`^e*OT z8Y0i1tpHa1JNR{$hK}<=xQ=^t#I(w6$T#JR-ZFaS%lOWFhxcpLknT803(%wvkZq)* z6}>^5$}d$h_4#;Snau6mj-s(!6CZ82rA@y?P(gGLqk!Jd9ictw?T|+QKpdn7|GV!# zTkpIw?{bT(sK`XbASWYh{*Cjxj z2141QxdzOJLZU$^F30Qa;rxlSPCHUvXo1(>el;m6Nqn#X8h>?LF;_a`DaG^#3!e`5 zVtjI=blxe=u7LCJKx5w$^tCcDUVc|vP6`~BXP+vNoV&md{M2#u3JBi_>vG?7-6F<( z`bqNDw1J@fui=7RNAmaQg$QB@cd-Gz1(E@ru8{#3LZ7M#-DRt!pPxPCl5f~o={}NQ zTNNC)ndvaRY!whTPU@(%3@<=;7vVmO(mw6hF~09#X8f#G3x8@SkZ_VaS@A}6C#N)W zV^&$LbJwWV<5f*|*Y6-q-4!@kRigBBttm3wM8!B|6T#{7MkmXMq>rI5#jBycyjYM0 zqG-zF>IU4h*$Joh?+|ZG-km;Y6-7gCt$g(hsE`dVf1vwFD&P&G*8#b46&mGVyUWYt z*64ZcFWX2^x?G_lMLUe%2v+mBcj-Pq!ElbycRm! z;-uWx~MQ}d5(PnMuO#I{S0KbNt zyDt46hBTU^v|ymEK~pV)6HWwUlnQY#JQ&NGiR74Tuogh$EXuxIuqxGO<3YS2|HYi~ zG(N-TlYg5Ehy3R_WGS?ejs5eB{T63gCiU%-%%BF4 zubI^Mp$15xv+;CQa`wQlSzErdm%B`p`Y+|D<*)9hTyEKvglos(qZMbEEfMaC=SP#- zsSQm5mmXgvdOu&WdU|Jt&_euguNC!AuhmZWArCb$$<5?71f>QyB-GB$ZF1A-q3tAy zPo>$%vxm`3{7KKa0B=-V{L>OjG&ijC&`Yb?^tTF&M~SXrQ%68SqcaDWgZ`H5n-nTrz8ed+uGCK&3jk*D+v%aJv)f3&x-%HC|?C$-FUNB1L z(qXBl(T)VHd;lXFkU?T~fe54bp2AOwEWIr%7RcidZz_Y3U35b<+7w#2R@!$B05u;G zJAdvX!fXv9X?dgHC;MT3ok*RknD3>}pQfG^6#*Qk^~{&CmO(s!tbweEBO_<@DuxN^ z$D%maIo7}XrpU~3TFfGDQ#fFA?>Hk$fzvAB7=`%?&N_jO&{UL0+@hb&lWrU|4$mz{ z4UfE+{)(I~AeM*_hGNJmfxtz$UzAt9UpwX5~W6J8->q4x%yDSc$ zyE5DK^%dRlH%=Nt2y&RPUl6tqt;O@KWkh1v1-P2QN?yE(cz&vSf?wW^Y{%x>kF$@I z9X~8BIh+UPPvxL+1ntU|8QlvQ)Cl8HGI4KM=Zmt^q;J(DevT}$eUt6Cuw1K-fexEg zehf6u!(n*_5db_H>fe~;G~}Za%B&7mY4ZO*MD8|TSWzj>QS1P1^f2zn)RdHdFSN=Q zX+!JHk{tDWrzP>+Hdxw-i(=;jOJ>OO6i+d0{X2F@rbkXwP>zjX#oi582R=UYMD+KT z0VN{^a)XLrJg=K?o77?ZrtG2c^c}^>m2so*NgxED`$wAlf0IT{Y~lHI!yBpm6hMT^ ziKu{X@T||2eHPyK3g6)ERNCY_&k0x``{P~Ahi{;Rmeh6ju0#aw_af&}lX_PrKor5s zLOPB19REy+YV)=WKYF(8eEc$lHFtq9=P+ECSYMm~JtNS774n@`JG6hHJqP!e1f3i$ z3svB{(w5W7qwE>zkh7)l5g$)j7Wu}VP}PFQ3mgl(d1eiV**76u!C6}nj`Ip=Uv*88 zrK-eHk}0Ph5%B2$2S>7uCvgyL!w0D~?0k}SEFQJ#)tfW5A+q_u*1Y-8#=l~*Jn`LaiI!jvtYYPZWdg->kq_E#Jt}68P*V~D|p@*`5Zih zPp<02W#{9_xv}fUS`FalDR#}8>X}1a$vfBR-o7D?DLOgeUp3P@IUJ)sN#Oz4>{_F4 z21-}$Gy3`HANz56xb2V*f1%9!kY(sot~Bt{NVmj)!#}(Y8XMsm{cBzGxBAAR8B^ZD@#mE^kjsO@VI)zto2X=*N%b;O8E)^7RynAmdrHY? zYNj0#`qT|%`YSPD)+`2rX~bnw3mood#_t#!g+oaaWJX)sENZB4lK%zshS7+EP87n@ z37{S9-Y$A}&25ykViR#_Z}U{ZGh`k}!csEY-wvkI>&n z)uCg?LQC44zE1~&|P!jG~; zDw=^a&t9r5`AfbDoUHPzxC5557&S;3ER4+Mf$B*sy4qLmX-`l-OSD6=;kc~ED%TJD zugQ$io{O@lx=)FIGsodK3~f?ZuZ)*`wqcjN*f$FI*vv0Wr3Tw2E?%^;cYa|R;3nY* zx&=3ghJPTatH6GV$J+jdS1;L^W+KdO`NxP-;78lmN&k*E{d)>G6!0&5@V`J7mN!fi z#VcH2InO?m(gt1ycj;wxPK3Y}!104va4I*lqrucRni}AIuGfuR`nn?d>W`roqmj@O zKInB(uy;|5vp?>r{du6Jz?0+egYZ0m_Vm+HiaY^p+b=x&!daB|0r!0_tK4NwNBP%b zPugBA0!qOTuE9b(!Jw1{C@HTD5G||P&k8WGOy8p7(WyWcKITY*cryt82+W4r-=B3*< zaq;dOtwNpeWJTa(O_XL^oN?7+Nk)LwBi-R_ne)N!-yOxjq(_PEo_~hCB}&0u0&OW! zV1*GLlhl8L&y~$NFcF+PbCTlq`IMGwQ*u+O2?2j|K-HUdIU!1sU(^N5G~sy*2BX!3@#5Fo8IsnT9+wq;#a+k@Tp zMPA|^WM&b0)|q_e4}@Unu4P1Qg$^47=}?3zi~$V%Ar7^)Ws>vZA1GR#Kl$#081h%D zh5%k3#8oejQaJA13jRe?tWcMJ-wgo;iQfJA+hMJ@Wvkj~2o8T3`0)$ll?YrxuZ5J4 z;eUJ5%yNssVwSnkk8+7%(-)r~?GTwkd+s11&;$g1J4-#TI1oiwPXzTS(1-s*_n<88 z$KOFg*XI*pE9x_ySu(sHP==cC^3L+{TuL1#I>Vf65M6x`H|l!)B6p-Zf%;Vt? zm-5y%mGvk7=)kf1+l6e+$353y!PalC#3>^rd+1!g!GI_Hz?mrtZ?XVsa}sDyM7<%k zVdif#5Ew3N93@P2GvM{Z(#rY5^`e?A(eF7B=5{DBCsm;(E8TU$QPrQYqSGM^YX@Se*6$Gy&V29&gs6veU{6Cgy2*7Hg0=iDwNqF#3f($!nY z{%Rjz-+oy1TbI+ZlydZyztqeSSnyw%hl&QnC%90bcVR z6;bUjxH^7=Ak9gH-@{5><|k57LqKbFdmA~+_SNcg(eI)J&*bmZABQUZ2Hy@IurPzw zn*_QbptTV}qpcz81$p);>Msk{`Hs0y=eo^o@=jwk3@fq5rn>Wp);!4v=vCv`O@6wZ zYP@f*<#R_@!>}Jx9vMUHH?K**VpnrD=4r{#^5;|n8AAn|(>Km#Ike;)^8r~L6(yvdv(CRxoG zsqLROY!ycwmKv2d4I2z9^1XK5?#wkS^y zmO%|E@qKxg!_MtEC+@jfcae+3(viisjH#1JqvV+eI}-k2t&3hrVC z_kN#-`TLtfDry;b)MX$8Hdc884LL%q)D8154h4;M8;X7D{Ld23e{+4x|NVRabIf5S^}l6h98epJg2f3YM?|@R zMWWaZTNe5sEAI*v~}eJqCCs-5*LPyWMoT1)?C`m)K=lZ z2g6b0TO7eDb6RyEwLo{~a!=vb3}sobs|UCFMeUq8c2M%|R+?%*9W?eqvh?jjwTih# zwzM{kQak9OIQb(s5jXa0i1$=bHD&~4w2xx$JEb-Oq5!?_si#ARb>T5vWYgO2{cYCY zlkOzXi_bnozWO_2>p!B6n0Lcc;L6bMhAe<0{AvJp)1dGRHn_Efq&^tc(odfv4Y^h zQhN~fqAs_sfDlP8cT6==QcJ*=3riVEFq~4LEbvduDfk~<>`RD*h0ThrV6%e;&#K;AfY&B6l#G@ z#l9Y^!z56oF;_8bp>)1Kl;Fwk5IZh+o3x7e714h2edBSw+Baf+!Rppc{Uu&xuA^DP zJ*S%T1fGC}kAdY!+V(h;eWKyvEUT%ybN9Qa!)#Sw0!;bNnuvL)!Z?%DZqdhiM9iTWo2?}1(0$4 zu)YFl3#_8`{f*_4=cW#L`T!l>&$Mhbh@v28;LY?16<8~_kA_&qDnOcSKfQX;VB zo}A-zgxF?S2~vIL5;|#%tmBK$ZQ+bzJ`~O?ELzBmffAzu32jZNW30!$nWXK*ZVgv!=ltZKj@zba-zwo_@%Vs3A+P|M zqjSKy0RHb7fu_*6n)I>&h4KlbN)e>J#8aZAKwBv&){3|8 z9z%Y!M_T>3ri*IOWOyRf|8pG)1-xgCuiNaVnMo}Xy&qGB7)_Zmp zeFJt1`q$ETuN&>o!Ex-^*da6i0o6bovwC`|NrZ2u%NOKSO`tn!MKrFIMypw!sq@7RKu}kp!l^uoiJzF>8e*jfl>d-U-LQq%$k2q!B9rh`P%8472H ze#-aHbROuCz2I7&rU+*->V6JRZ$94fT3TvYz8xA{6s^8pFR?O7I=BJu!*cQ1dh#H^ zUgS2CWpF4Nngt=q8YLgw zSIzphxb~y`hu~9Dhig>~jnT5)TM4g-?$F}0J-LL?fG2rhUwAN=Xx>?dE!|jvDb+|u z;|JyZO_kjnO0!RvSiKVC_ctd%TdDPo2lP_)LLT0Ur_^{3$_`}5Ycwu7#Q2s;AEk3& zcWV$h^TU|HlB0?l^~cwKHpOJj(ClxW^GJp_<$)dv2w)p9-{>F~90Nm*g@sGNe;{(mll1W#V%z8pctVZzVo9NVcca@bsFjI~TbmfDhJefD~heCd(^Mfu&j+|I~#qcgr za(<3sf{R@Za}5CAHe;GG@tBRYO>oE3Sbh5Y0^NBEa>#~S7xW723>9~E9oKI(xnXWU zS#nd?#Q9_5ipJ(<)5V!c5DqZ7c04RS$t$U=42nT3R@@DsNDVR$zwk*7?rqATT+)80 z;@ed7>irvO{_jWm#l~63Hfs3QJwv`EZ2~FmHuNUqE-2y|l+@tNtL}%@q3w9C?0~*L z$4TpR=Hn~YsnUK@wC%^PNF0rWzn#Ob0V93vIuepP)n_>D-(rH|w(XwiB%I|qq!fyt z8EsrEC#v$T{1tKTyE#=yvWV40Toi03*Ig3^3S5W>L>WLyXGDdYlFkchbjqMnl;>MF zXE>U#^L}3a&}DU^pNXYjZ%fj{lIjoX4;HRPQoDB|bjHB**#RtUE279#uY~&mp@eY= zl=A=X+s}{z+(qFXUGn4zMkHZZFsVpW>+-`>b7T5GeKJn-&i2id)o#5Ug3w{RsxHeB zFWIQ{ws7KkTaCO zYn?7;B*9!9>r2FNY3b~lFp_FXuc1Kg#3x_%UN_a3ie6uD>(l|3gYXSFyAkBNy}%gz z1DSiO-Deo%MOVTB`OyypjWpF{tFo{zLPX=mE!rkXm;Q;xI>xVU8HxabU_*uPJ0X72 z*~=`65N1N7tDlX3L#2H#x1(w8$mNNV4YcHw$>gh74!?o#U4Bc4JZFX^`ECu64m&cO zmwdQFP>GK%q_w}4SBq#Q?ru35BLH4`5cw2X5Pbr>y2!p|G_{VgiMapCsR1K1XCQw5 zWMNK2;_iaNd{ixU$bc2Z(aU`SOYvHw7W({NAHMaRWt$oIuvT!nM)ho$Z(#nhu-Osm zmoAsGQg%%={KU-xldKlOPN4;~dlVV2j^-vrl+xD{Do5FxPu$U2*)4pB4CPHTmQoQH zLx4Bf&zTb|#j}YHyara1@HSXfB4PAUzquXH%(jzg!X2s)8YEFz^k~zW$imBSt9s2( zrOFvP1rApp*T{Zaobqt@3I)X7^QZK0en0Zzgw7L+H;12vFC&8Av{r)&=tin&&~RpP zc~n4t2bE1EAWw_dQBWW}K!pB35GiHd3;P!>F@2dofUm`kbqp6<)v$5(wiJi$FCN}a zxwZYbZ%M}sd^#VS`KxpnDo=%AYw-j5R?s?jf~rs2)$Ba1&8Vy6L

@c%l5^9plYY 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

d51zn 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 aGS~d)4p`=Yq6qE(|BQbq{^R>?^nU^FyEyUy literal 0 HcmV?d00001 -- Gitee From fef8d00e2fdb194b7901a2ae45555f74964213e4 Mon Sep 17 00:00:00 2001 From: sts Date: Thu, 29 Aug 2024 16:25:11 +0800 Subject: [PATCH 2/8] riscv-plic-spec.md: commit correct result of tinycorrect-translate Signed-off-by: sts --- articles/20240828-riscv-plic-spec.md | 97 ++++++++++++++-------------- 1 file changed, 49 insertions(+), 48 deletions(-) diff --git a/articles/20240828-riscv-plic-spec.md b/articles/20240828-riscv-plic-spec.md index 86f40b5..417b8e5 100644 --- a/articles/20240828-riscv-plic-spec.md +++ b/articles/20240828-riscv-plic-spec.md @@ -1,3 +1,4 @@ +> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc2 - [translate]
> Title: [RISC-V Platform-Level Interrupt Controller Specification](https://github.com/riscv/riscv-plic-spec/blob/master/riscv-plic.adoc)
> Author: Abner Chang@**March 12, 2023**
> Translator: Sunts
@@ -28,25 +29,25 @@ PLIC(Platform-Level Interrupt Controller) 平台级中断控制器主要用于 R ## 中断目标和 HART 上下文 ->We use the term hart to unambiguously and concisely describe a hardware thread as opposed to software-managed thread contexts. +> We use the term hart to unambiguously and concisely describe a hardware thread as opposed to software-managed thread contexts. hart 用于描述硬件线程,与软件管理的线程上下文相对。 ->Interrupt targets are usually hart contexts, where a hart context is a given privilege mode on a given hart (though there are other possible interrupt targets, such as DMA engines). For example, in an 4-core system with 2-way SMT, you have 8 harts and probably at least two privilege modes per hart: machine mode and supervisor mode (Ref). -Not all hart contexts need be interrupt targets, in particular, if a processor core does not support delegating external interrupts to lower-privilege modes, then the lower-privilege hart contexts will not be interrupt targets. Interrupt notifications generated by the PLIC appear in the meip/seip bits of the mip/sip registers for M/S modes respectively. +> Interrupt targets are usually hart contexts, where a hart context is a given privilege mode on a given hart (though there are other possible interrupt targets, such as DMA engines). For example, in an 4-core system with 2-way SMT, you have 8 harts and probably at least two privilege modes per hart: machine mode and supervisor mode (Ref). +> Not all hart contexts need be interrupt targets, in particular, if a processor core does not support delegating external interrupts to lower-privilege modes, then the lower-privilege hart contexts will not be interrupt targets. Interrupt notifications generated by the PLIC appear in the meip/seip bits of the mip/sip registers for M/S modes respectively. 中断目标通常是 hart 上下文(中断目标还可以是 DMA 引擎等不在本文考虑内),其中 hart 上下文是在给定 hart 上的给定特权模式。例如,在一个 4 核 8 线程计算机中,你有 8 个 hart,每个 hart 可能至少有两种特权模式:机器模式和特权级模式。并非所有 hart 上下文都需要成为中断目标,特别是如果处理器核心不支持将外部中断委托给较低特权模式,则较低特权的 hart 上下文将不会成为中断目标。由 PLIC 生成的中断通知将出现在 M/S 模式的 mip/sip 寄存器的 meip/seip 位中。 ->Note: Previous versions of this specification indicated that the PLIC supports U-mode interrupts. This text was removed because the privileged architecture does not define U-mode interrupts. If a future privileged architecture specifies U-mode interrupts, this PLIC specification can be straightforwardly extended to support them. +> Note: Previous versions of this specification indicated that the PLIC supports U-mode interrupts. This text was removed because the privileged architecture does not define U-mode interrupts. If a future privileged architecture specifies U-mode interrupts, this PLIC specification can be straightforwardly extended to support them. 注:规范目前移除了用户模式中断,因为特权架构并未定义用户模式中断。如果未来的特权架构规定了用户模式中断,那么 PLIC 规范可以很直接地进行扩展以支持这些中断。 ->The notification only appear in lower-privilege xip registers if external interrupts have been delegated to the lower-privilege modes. -Each processor core must define a policy on how simultaneous active interrupts are taken by multiple hart contexts on the core. For the simple case of a single stack of hart contexts, one for each supported privileged mode, interrupts for higher-privilege contexts can preempt execution of interrupt handlers for lower-privilege contexts. A multithreaded processor core could run multiple independent interrupt handlers on different hart contexts at the same time. A processor core could also provide hart contexts that are only used for interrupt handling to reduce interrupt service latency, and these might preempt interrupt handlers for other harts on the same core. +> The notification only appear in lower-privilege xip registers if external interrupts have been delegated to the lower-privilege modes. +> Each processor core must define a policy on how simultaneous active interrupts are taken by multiple hart contexts on the core. For the simple case of a single stack of hart contexts, one for each supported privileged mode, interrupts for higher-privilege contexts can preempt execution of interrupt handlers for lower-privilege contexts. A multithreaded processor core could run multiple independent interrupt handlers on different hart contexts at the same time. A processor core could also provide hart contexts that are only used for interrupt handling to reduce interrupt service latency, and these might preempt interrupt handlers for other harts on the same core. 如果外部中断已经被委派给较低特权模式,那么这些中断的通知只会出现在较低特权的扩展中断寄存器 (XIP) 中。每个处理器核心都必须定义一个策略,说明如何处理核心上多个 hart 上下文同时发生的活动中断。对于简单的单个 hart 上下文堆栈的情况,即为每种支持的特权模式提供一个 hart 上下文,在这种情况下,较高特权模式下的中断可以抢占较低特权模式下中断处理程序的执行。一个多线程的处理器核心可以在不同的 hart 上下文上同时运行多个独立的中断处理程序。处理器核心还可以提供专门用于中断处理的 hart 上下文以降低中断服务延迟,并且这些上下文可能抢占同一核心上其他 hart 的中断处理程序。 ->The PLIC treats each interrupt target independently and does not take into account any interrupt prioritization scheme used by a component that contains multiple interrupt targets. As a result, the PLIC provides no concept of interrupt preemption or nesting so this must be handled by the cores hosting multiple interrupt target contexts. +> The PLIC treats each interrupt target independently and does not take into account any interrupt prioritization scheme used by a component that contains multiple interrupt targets. As a result, the PLIC provides no concept of interrupt preemption or nesting so this must be handled by the cores hosting multiple interrupt target contexts. PLIC 独立处理每个中断目标,不会考虑包含多个中断目标的组件所使用的任何中断优先级方案。因此,PLIC 不提供中断抢占或嵌套的概念,因此必须由托管多个中断目标上下文的内核来处理。 @@ -58,52 +59,52 @@ PLIC 独立处理每个中断目标,不会考虑包含多个中断目标的组 ## 中断网关 ->The interrupt gateways are responsible for converting global interrupt signals into a common interrupt request format, and for controlling the flow of interrupt requests to the PLIC core. At most one interrupt request per interrupt source can be pending in the PLIC core at any time, indicated by setting the source’s IP bit. The gateway only forwards a new interrupt request to the PLIC core after receiving notification that the interrupt handler servicing the previous interrupt request from the same source has completed. +> The interrupt gateways are responsible for converting global interrupt signals into a common interrupt request format, and for controlling the flow of interrupt requests to the PLIC core. At most one interrupt request per interrupt source can be pending in the PLIC core at any time, indicated by setting the source’s IP bit. The gateway only forwards a new interrupt request to the PLIC core after receiving notification that the interrupt handler servicing the previous interrupt request from the same source has completed. 中断网关负责将全局中断信号转换为通用的中断请求格式,并控制流向 PLIC 内核的中断请求。在任何时候,PLIC 内核中的每个中断源最多只能有一个中断请求待处理,通过设置中断源的 IP(Interrupt Pending) 位来显示。网关只有在收到来自同一中断源的上一个中断请求的中断处理程序处理完毕的通知后,才会向 PLIC 内核转发新的中断请求。 ->If the global interrupt source uses level-sensitive interrupts, the gateway will convert the first assertion of the interrupt level into an interrupt request, but thereafter the gateway will not forward an additional interrupt request until it receives an interrupt completion message. On receiving an interrupt completion message, if the interrupt is level-triggered and the interrupt is still asserted, a new interrupt request will be forwarded to the PLIC core. The gateway does not have the facility to retract an interrupt request once forwarded to the PLIC core. If a level-sensitive interrupt source deasserts the interrupt after the PLIC core accepts the request and before the interrupt is serviced, the interrupt request remains present in the IP bit of the PLIC core and will be serviced by a handler, which will then have to determine that the interrupt device no longer requires service. +> If the global interrupt source uses level-sensitive interrupts, the gateway will convert the first assertion of the interrupt level into an interrupt request, but thereafter the gateway will not forward an additional interrupt request until it receives an interrupt completion message. On receiving an interrupt completion message, if the interrupt is level-triggered and the interrupt is still asserted, a new interrupt request will be forwarded to the PLIC core. The gateway does not have the facility to retract an interrupt request once forwarded to the PLIC core. If a level-sensitive interrupt source deasserts the interrupt after the PLIC core accepts the request and before the interrupt is serviced, the interrupt request remains present in the IP bit of the PLIC core and will be serviced by a handler, which will then have to determine that the interrupt device no longer requires service. 如果全局中断源的中断为水平触发,中断网关会将首次中断电平的激活转换为一个中断请求;但之后,网关不会转发额外的中断请求,直到它接收到一个中断完成消息。在接收到中断完成消息后,如果该中断是水平触发并且中断仍然处于激活状态,则一个新的中断请求会被转发到 PLIC 核心。网关不具备一旦转发至 PLIC 核心后撤销中断请求的功能。如果一个水平触发的中断源在 PLIC 核心接受请求后但在中断被服务前取消了中断信号,那么中断请求仍会存在于 PLIC 核心的 IP 位中,并将由处理程序进行服务,此时处理程序需要确定中断设备实际上不再需要服务。 ->If the global interrupt source was edge-triggered, the gateway will convert the first matching signal edge into an interrupt request. Depending on the design of the device and the interrupt handler, in between sending an interrupt request and receiving notice of its handler’s completion, the gateway might either ignore additional matching edges or increment a counter of pending interrupts. In either case, the next interrupt request will not be forwarded to the PLIC core until the previous completion message has been received. If the gateway has a pending interrupt counter, the counter will be decremented when the interrupt request is accepted by the PLIC core. Unlike dedicated-wire interrupt signals, message-signalled interrupts (MSIs) are sent over the system interconnect via a message packet that describes which interrupt is being asserted. The message is decoded to select an interrupt gateway, and the relevant gateway then handles the MSI similar to an edge-triggered interrupt. +> If the global interrupt source was edge-triggered, the gateway will convert the first matching signal edge into an interrupt request. Depending on the design of the device and the interrupt handler, in between sending an interrupt request and receiving notice of its handler’s completion, the gateway might either ignore additional matching edges or increment a counter of pending interrupts. In either case, the next interrupt request will not be forwarded to the PLIC core until the previous completion message has been received. If the gateway has a pending interrupt counter, the counter will be decremented when the interrupt request is accepted by the PLIC core. Unlike dedicated-wire interrupt signals, message-signalled interrupts (MSIs) are sent over the system interconnect via a message packet that describes which interrupt is being asserted. The message is decoded to select an interrupt gateway, and the relevant gateway then handles the MSI similar to an edge-triggered interrupt. 如果全局中断源是边沿触发的,网关会将首次匹配的信号边沿转换为一个中断请求。根据设备的设计以及中断处理程序的不同,在发送一个中断请求与接收其处理程序完成的通知之间,网关可能会忽略额外的匹配边沿或者递增一个待处理中断的计数器。在这两种情况下,下一个中断请求都不会被转发到 PLIC 核心,直到先前的完成消息已被接收。如果网关具有一个待处理中断计数器,当中断请求被 PLIC 核心接受时,计数器将会递减。与专用线中断信号不同,消息指示中断(MSIs)是通过系统互联经由一个描述哪个中断正在被激活的消息包发送的。该消息被解码以选择一个中断网关,相关的网关然后像处理边沿触发的中断一样处理 MSI(Message Signaled Interrupt)。 ## 中断通知 ->Each interrupt target has an external interrupt pending (EIP) bit in the PLIC core that indicates that the corresponding target has a pending interrupt waiting for service. The value in EIP can change as a result of changes to state in the PLIC core, brought on by interrupt sources, interrupt targets, or other agents manipulating register values in the PLIC. The value in EIP is communicated to the destination target as an interrupt notification. If the target is a RISC-V hart context, the interrupt notifications arrive on the meip/seip bits depending on the privilege level of the hart context. +> Each interrupt target has an external interrupt pending (EIP) bit in the PLIC core that indicates that the corresponding target has a pending interrupt waiting for service. The value in EIP can change as a result of changes to state in the PLIC core, brought on by interrupt sources, interrupt targets, or other agents manipulating register values in the PLIC. The value in EIP is communicated to the destination target as an interrupt notification. If the target is a RISC-V hart context, the interrupt notifications arrive on the meip/seip bits depending on the privilege level of the hart context. 在 PLIC 内核中,每个中断目标都有一个外部中断待处理 (EIP) 位,该位表示相应目标有一个等待服务的待处理中断。EIP 中的值会因 PLIC 内核中的状态变化而改变,这些变化是由中断源、中断目标或操纵 PLIC 中寄存器值的其他代理引起的。EIP 中的值将作为中断通知传递给目标目标。如果目标是 RISC-V hart 上下文,中断通知会根据 hart 上下文所处的不同模式到达机器模式的 meip 或特权级/监管者模式的 seip 位。 ->(In simple systems, the interrupt notifications will be simple wires connected to the processor implementing a hart. In more complex platforms, the notifications might be routed as messages across a system interconnect.) +> (In simple systems, the interrupt notifications will be simple wires connected to the processor implementing a hart. In more complex platforms, the notifications might be routed as messages across a system interconnect.) (在简单的系统中,中断通知将是连接到实现hart的处理器的简单线路。而在更复杂的平台上,这些通知可能会作为消息通过系统互联进行路由。) ->The PLIC hardware only supports multicasting of interrupts, such that all enabled targets will receive interrupt notifications for a given active interrupt. +> The PLIC hardware only supports multicasting of interrupts, such that all enabled targets will receive interrupt notifications for a given active interrupt. PLIC硬件仅支持中断的多播功能,这意味着所有已启用的目标都会接收到给定活动中断的中断通知。 ->(Multicasting provides rapid response since the fastest responder claims the interrupt, but can be wasteful in high-interrupt-rate scenarios if multiple harts take a trap for an interrupt that only one can successfully claim. Software can modulate the PLIC IE bits as part of each interrupt handler to provide alternate policies, such as interrupt affinity or round-robin unicasting.) +> (Multicasting provides rapid response since the fastest responder claims the interrupt, but can be wasteful in high-interrupt-rate scenarios if multiple harts take a trap for an interrupt that only one can successfully claim. Software can modulate the PLIC IE bits as part of each interrupt handler to provide alternate policies, such as interrupt affinity or round-robin unicasting.) 多播提供了快速响应的能力,因为最快的响应者可以响应中断,但在高中断率的情况下,如果多个 hart 为一个只能被其中一个成功响应的中断采取陷阱操作,这可能会造成资源浪费。软件可以通过在每个中断处理程序中调节 PLIC 的 IE 位来提供替代策略,比如中断亲和性或轮询单播。 ->Depending on the platform architecture and the method used to transport interrupt notifications, these might take some time to be received at the targets. The PLIC is guaranteed to eventually deliver all state changes in EIP to all targets, provided there is no intervening activity in the PLIC core. +> Depending on the platform architecture and the method used to transport interrupt notifications, these might take some time to be received at the targets. The PLIC is guaranteed to eventually deliver all state changes in EIP to all targets, provided there is no intervening activity in the PLIC core. 根据平台架构和用于传输中断通知的方法,这些通知可能需要一段时间才能被目标接收。只要在 PLIC 核心中没有干预行为,PLIC 保证最终会将 EIP 中的所有状态变化传递给所有目标。 ->(The value in an interrupt notification is only guaranteed to hold an EIP value that was valid at some point in the past. In particular, a second target can respond and claim an interrupt while a notification to the first target is still in flight, such that when the first target tries to claim the interrupt it finds it has no active interrupts in the PLIC core.) +> (The value in an interrupt notification is only guaranteed to hold an EIP value that was valid at some point in the past. In particular, a second target can respond and claim an interrupt while a notification to the first target is still in flight, such that when the first target tries to claim the interrupt it finds it has no active interrupts in the PLIC core.) (中断通知中的值仅保证持有过去某个时刻有效的 EIP 值。特别是,当第一个目标的中断通知仍在传输途中时,第二个目标可以回复并响应中断,这样当第一个目标尝试响应中断时,它可能会发现 PLIC 核心中没有活动的中断。) ## 中断标识符 ->Global interrupt sources are assigned small unsigned integer identifiers, beginning at the value 1. An interrupt ID of 0 is reserved to mean “no interrupt”. +> Global interrupt sources are assigned small unsigned integer identifiers, beginning at the value 1. An interrupt ID of 0 is reserved to mean “no interrupt”. 全局中断源被分配了从小整数标识符开始的小的无符号整数,起始值为 1 。中断 ID 为 0 被保留,表示“无中断”。 ->Interrupt identifiers are also used to break ties when two or more interrupt sources have the same assigned priority. Smaller values of interrupt ID take precedence over larger values of interrupt ID. +> Interrupt identifiers are also used to break ties when two or more interrupt sources have the same assigned priority. Smaller values of interrupt ID take precedence over larger values of interrupt ID. 中断标识符也被用来解决两个或多个中断源具有相同分配优先级的情况。较小的中断 ID 值比较大的中断 ID 值具有更高的优先级。 @@ -112,15 +113,15 @@ PLIC硬件仅支持中断的多播功能,这意味着所有已启用的目标 下图展示了通过PLIC处理中断时,各代理之间流动的消息。 ![RISC-V PLIC 中断流](images/riscv_plic_spec/interrupt_flow.jpg) ->* Global interrupts are sent from their source to an interrupt gateway that processes the interrupt signal from each source +> * Global interrupts are sent from their source to an interrupt gateway that processes the interrupt signal from each source ->* Interrupt gateway then sends a single interrupt request to the PLIC core, which latches these in the core interrupt pending bits (IP). +> * Interrupt gateway then sends a single interrupt request to the PLIC core, which latches these in the core interrupt pending bits (IP). ->* The PLIC core forwards an interrupt notification to one or more targets if the targets have any pending interrupts enabled, and the priority of the pending interrupts exceeds a per-target threshold. +> * The PLIC core forwards an interrupt notification to one or more targets if the targets have any pending interrupts enabled, and the priority of the pending interrupts exceeds a per-target threshold. ->* When the target takes the external interrupt, it sends an interrupt claim request to retrieve the identifier of the highest priority global interrupt source pending for that target from the PLIC core. +> * When the target takes the external interrupt, it sends an interrupt claim request to retrieve the identifier of the highest priority global interrupt source pending for that target from the PLIC core. ->* PLIC core then clears the corresponding interrupt source pending bit. +> * PLIC core then clears the corresponding interrupt source pending bit. > * After the target has serviced the interrupt, it sends the associated interrupt gateway an interrupt completion message @@ -146,17 +147,17 @@ PLIC硬件仅支持中断的多播功能,这意味着所有已启用的目标 规范定义了一般 PLIC 运行参数寄存器块,它们分别是 ->* Interrupt Priorities registers: The interrupt priority for each interrupt source. +> * Interrupt Priorities registers: The interrupt priority for each interrupt source. ->* Interrupt Pending Bits registers: The interrupt pending status of each interrupt source. +> * Interrupt Pending Bits registers: The interrupt pending status of each interrupt source. ->* Interrupt Enables registers: The enablement of interrupt source of each context. +> * Interrupt Enables registers: The enablement of interrupt source of each context. ->* Priority Thresholds registers: The interrupt priority threshold of each context. +> * Priority Thresholds registers: The interrupt priority threshold of each context. ->* Interrupt Claim registers: The register to acquire interrupt source ID of each context. +> * Interrupt Claim registers: The register to acquire interrupt source ID of each context. ->* Interrupt Completion registers: The register to send interrupt completion message to the associated gateway. +> * Interrupt Completion registers: The register to send interrupt completion message to the associated gateway. * 中断优先级寄存器:记录各中断源的中断优先级 @@ -176,7 +177,7 @@ PLIC硬件仅支持中断的多播功能,这意味着所有已启用的目标 ### 内存映射 ->The `base address of PLIC Memory Map` is platform implementation-specific. The memory-mapped registers specified in this chapter have a width of 32-bits. The bits are accessed atomically with LW and SW instructions. +> The `base address of PLIC Memory Map` is platform implementation-specific. The memory-mapped registers specified in this chapter have a width of 32-bits. The bits are accessed atomically with LW and SW instructions. PLIC 内存映射的基地址因具体平台而异。内存映射寄存器的宽度都为 32bit。使用 LW 和 SW 指令可以原子方式访问这些位。 @@ -226,15 +227,15 @@ PLIC 内存映射的基地址因具体平台而异。内存映射寄存器的宽 ### 中断优先级 ->Interrupt priorities are small unsigned integers, with a platform-specific maximum number of supported levels. The priority value 0 is reserved to mean "never interrupt", and interrupt priority increases with increasing integer values. Each global interrupt source has an associated interrupt priority held in a memory-mapped register. Different interrupt sources need not support the same set of priority values. A valid implementation can hardwire all input priority levels. Interrupt source priority registers should be WARL fields to allow software to determine the number and position of read-write bits in each priority specification, if any. To simplify discovery of supported priority values, each priority register must support any combination of values in the bits that are variable within the register, i.e., if there are two variable bits in the register, all four combinations of values in those bits must operate as valid priority levels. +> Interrupt priorities are small unsigned integers, with a platform-specific maximum number of supported levels. The priority value 0 is reserved to mean "never interrupt", and interrupt priority increases with increasing integer values. Each global interrupt source has an associated interrupt priority held in a memory-mapped register. Different interrupt sources need not support the same set of priority values. A valid implementation can hardwire all input priority levels. Interrupt source priority registers should be WARL fields to allow software to determine the number and position of read-write bits in each priority specification, if any. To simplify discovery of supported priority values, each priority register must support any combination of values in the bits that are variable within the register, i.e., if there are two variable bits in the register, all four combinations of values in those bits must operate as valid priority levels. 中断优先级是小的无符号整数,支持的最大优先级取决于特定平台。优先级值 0 表示 “从不中断”,中断优先级随整数值的增加而增加。每个全局中断源都有一个相关的中断优先级,保存在内存映射寄存器中。不同的中断源无需支持同一组优先级值。硬连线所有输入优先级是一种合法的实现。中断源优先级寄存器应为 WARL 字段,以便软件确定每个优先级规范中读写位的数量和位置。为了简化对支持的优先级值的查找,每个优先级寄存器必须支持寄存器内可变位的任意组合值,即如果寄存器中有两个可变位,则这些位中的所有四个组合值都必须作为有效的优先级级别运行。 ->If PLIC supports Interrupt Priorities, then each PLIC interrupt source can be assigned a priority by writing to its 32-bit memory-mapped `priority` register. A priority value of 0 is reserved to mean "never interrupt" and effectively disables the interrupt. Priority 1 is the lowest active priority while the maximum level of priority depends on PLIC implementation. Ties between global interrupts of the same priority are broken by the Interrupt ID; interrupts with the lowest ID have the highest effective priority. +> If PLIC supports Interrupt Priorities, then each PLIC interrupt source can be assigned a priority by writing to its 32-bit memory-mapped `priority` register. A priority value of 0 is reserved to mean "never interrupt" and effectively disables the interrupt. Priority 1 is the lowest active priority while the maximum level of priority depends on PLIC implementation. Ties between global interrupts of the same priority are broken by the Interrupt ID; interrupts with the lowest ID have the highest effective priority. 如果 PLIC 支持中断优先级,那么每个 PLIC 中断源都可以通过写入其 32 位内存映射优先级寄存器来分配优先级。优先级值为 0 表示 “从不中断”,并有效禁用中断。优先级 1 是最低的活动优先级,而最高优先级则取决于 PLIC 的实现。具有相同优先级的全局中断之间的联系通过中断 ID 来打破;ID 最低的中断具有最高的有效优先级。 ->The base address of Interrupt Source Priority block within PLIC Memory Map region is fixed at 0x000000. +> The base address of Interrupt Source Priority block within PLIC Memory Map region is fixed at 0x000000. PLIC 内存映射区域内中断源优先级块的基地址固定为 0x000000。 @@ -255,15 +256,15 @@ PLIC 内存映射区域内中断源优先级块的基地址固定为 0x000000。 ### 中断挂起位 ->The current status of the interrupt source pending bits in the PLIC core can be read from the pending array, organized as 32-bit register. The pending bit for interrupt ID N is stored in bit (N mod 32) of word (N/32). Bit 0 of word 0, which represents the non-existent interrupt source 0, is hardwired to zero. +> The current status of the interrupt source pending bits in the PLIC core can be read from the pending array, organized as 32-bit register. The pending bit for interrupt ID N is stored in bit (N mod 32) of word (N/32). Bit 0 of word 0, which represents the non-existent interrupt source 0, is hardwired to zero. PLIC 内核中中断源挂起位的当前状态可从以 32 位寄存器形式组织的待处理数组中读取。中断 ID N 的挂起位存储在字 (N/32) 的位(N 模 32)中。字 0 的第 0 位代表不存在的中断源 0,被硬连为 0。 ->A pending bit in the PLIC core can be cleared by setting the associated enable bit then performing a claim. +> A pending bit in the PLIC core can be cleared by setting the associated enable bit then performing a claim. PLIC 核中的中断挂起位可通过设置相关的中断使能位然后通过中断响应来清除。 ->The base address of Interrupt Pending Bits block within PLIC Memory Map region is fixed at 0x001000. +> The base address of Interrupt Pending Bits block within PLIC Memory Map region is fixed at 0x001000. PLIC 内存映射区域内中断挂起块的基地址固定为 0x001000。 @@ -281,15 +282,15 @@ PLIC 内存映射区域内中断挂起块的基地址固定为 0x001000。 ### 中断使能 ->Each global interrupt can be enabled by setting the corresponding bit in the `enables` register. The `enables` registers are accessed as a contiguous array of 32-bit registers, packed the same way as the `pending` bits. Bit 0 of enable register 0 represents the non-existent interrupt ID 0 and is hardwired to 0. PLIC has 15872 Interrupt Enable blocks for the contexts. +> Each global interrupt can be enabled by setting the corresponding bit in the `enables` register. The `enables` registers are accessed as a contiguous array of 32-bit registers, packed the same way as the `pending` bits. Bit 0 of enable register 0 represents the non-existent interrupt ID 0 and is hardwired to 0. PLIC has 15872 Interrupt Enable blocks for the contexts. 可通过设置使能寄存器中的相应位来使能每个全局中断。使能寄存器作为 32 位寄存器的连续数组访问,其组织方式与挂起位相同。使能寄存器 0 的第 0 位代表不存在的中断 ID 0,并硬连接为 0。 ->How PLIC organizes interrupts for the contexts (Hart and privilege mode) is out of RISC-V PLIC specification scope, however it must be spec-out in vendor’s PLIC specification. +> How PLIC organizes interrupts for the contexts (Hart and privilege mode) is out of RISC-V PLIC specification scope, however it must be spec-out in vendor’s PLIC specification. PLIC 如何为上下文(Hart 和特权模式)组织中断不属于 RISC-V PLIC 规范的范围,但必须在供应商的 PLIC 规范中加以说明。 ->(A large number of potential IE bits might be hardwired to zero in cases where some interrupt sources can only be routed to a subset of targets. A larger number of bits might be wired to 1 for an embedded device with fixed interrupt routing. Interrupt priorities, thresholds, and hart-internal interrupt masking provide considerable flexibility in ignoring external interrupts even if a global interrupt source is always enabled.) +> (A large number of potential IE bits might be hardwired to zero in cases where some interrupt sources can only be routed to a subset of targets. A larger number of bits might be wired to 1 for an embedded device with fixed interrupt routing. Interrupt priorities, thresholds, and hart-internal interrupt masking provide considerable flexibility in ignoring external interrupts even if a global interrupt source is always enabled.) (在某些中断源只能路由到部分中断目标,大量潜在的 IE 位可能被硬连线为 0。对于具有固定中断路由的嵌入式设备,可能会有更多位被连接为 1。即使全局中断源始终处于启用状态,中断优先级、阈值和 hart 内部中断屏蔽在忽略外部中断方面也提供了相当大的灵活性)。 @@ -324,7 +325,7 @@ PLIC 内存映射区域内中断使能块的基地址固定为 0x002000。 ### 中断阈值 ->PLIC provides context based `threshold register` for the settings of a interrupt priority threshold of each context. The `threshold register` is a WARL field. The PLIC will mask all PLIC interrupts of a priority less than or equal to `threshold`. For example, a `threshold` value of zero permits all interrupts with non-zero priority. +> PLIC provides context based `threshold register` for the settings of a interrupt priority threshold of each context. The `threshold register` is a WARL field. The PLIC will mask all PLIC interrupts of a priority less than or equal to `threshold`. For example, a `threshold` value of zero permits all interrupts with non-zero priority. PLIC 提供基于上下文的阈值寄存器,用于设置每个上下文的中断优先级阈值。阈值寄存器是一个 WARL 字段。PLIC 将屏蔽优先级小于或等于阈值的所有 PLIC 中断。例如,阈值为 0 时,将允许所有优先级不为 0 的中断。 @@ -349,23 +350,23 @@ PLIC 提供基于上下文的阈值寄存器,用于设置每个上下文的中 ### 中断响应处理 ->Sometime after a target receives an interrupt notification, it might decide to service the interrupt. The target sends an interrupt claim message to the PLIC core, which will usually be implemented as a non-idempotent memory-mapped I/O control register read. On receiving a claim message, the PLIC core will atomically determine the ID of the highest-priority pending interrupt for the target and then clear down the corresponding source’s IP bit. The PLIC core will then return the ID to the target. The PLIC core will return an ID of zero, if there were no pending interrupts for the target when the claim was serviced. +> Sometime after a target receives an interrupt notification, it might decide to service the interrupt. The target sends an interrupt claim message to the PLIC core, which will usually be implemented as a non-idempotent memory-mapped I/O control register read. On receiving a claim message, the PLIC core will atomically determine the ID of the highest-priority pending interrupt for the target and then clear down the corresponding source’s IP bit. The PLIC core will then return the ID to the target. The PLIC core will return an ID of zero, if there were no pending interrupts for the target when the claim was serviced. 中断目标收到中断通知后,可能会决定为中断提供服务。中断目标向 PLIC 核发送中断请求信息,通常是通过读取非幂等内存映射 I/O 控制寄存器来实现的。收到请求消息后,PLIC 核将以原子方式确定中断目标最高优先级待处理中断的 ID,然后清除相应源的 IP 位。然后,PLIC 核会将 ID 返回给目标。如果在服务请求时目标没有待处理中断,PLIC 内核将返回一个 0 的 ID。 ->After the highest-priority pending interrupt is claimed by a target and the corresponding IP bit is cleared, other lower-priority pending interrupts might then become visible to the target, and so the PLIC EIP bit might not be cleared after a claim. The interrupt handler can check the local meip/seip/ueip bits before exiting the handler, to allow more efficient service of other interrupts without first restoring the interrupted context and taking another interrupt trap. +> After the highest-priority pending interrupt is claimed by a target and the corresponding IP bit is cleared, other lower-priority pending interrupts might then become visible to the target, and so the PLIC EIP bit might not be cleared after a claim. The interrupt handler can check the local meip/seip/ueip bits before exiting the handler, to allow more efficient service of other interrupts without first restoring the interrupted context and taking another interrupt trap. 当优先级最高的挂起中断被目标响应并清除相应的 IP 位后,此时其他优先级较低的挂起中断可能对中断目标可见,因此 PLIC EIP 位可能不会在中断响应后被清除。中断处理程序可在退出处理程序前检查本地的 meip/seip/ueip 位,以便更有效地处理其他中断,而无需恢复中断上下文并重新通过中断处理程序陷入另一个中断。 ->It is always legal for a hart to perform a claim even if the EIP is not set. In particular, a hart could set the threshold value to maximum to disable interrupt notifications and instead poll for active interrupts using periodic claim requests, though a simpler approach to implement polling would be to clear the external interrupt enable in the corresponding xie register for privilege mode x. +> It is always legal for a hart to perform a claim even if the EIP is not set. In particular, a hart could set the threshold value to maximum to disable interrupt notifications and instead poll for active interrupts using periodic claim requests, though a simpler approach to implement polling would be to clear the external interrupt enable in the corresponding xie register for privilege mode x. hart 在 EIP 未设置时执行中断响应是合法行为。特别地,hart 可以将中断阈值设置为最大值,以禁用中断通知,进而使用周期性的中断响应请求对活动的有效中断进行轮询。此外,实现轮询的更简单方法是清除特权模式 x 的相应 xie 寄存器中的外部中断使能。 ->The PLIC can perform an interrupt claim by reading the `claim/complete` register, which returns the ID of the highest priority pending interrupt or zero if there is no pending interrupt. A successful claim will also atomically clear the corresponding pending bit on the interrupt source. The PLIC can perform a claim at any time and the claim operation is not affected by the setting of the priority threshold register. +> The PLIC can perform an interrupt claim by reading the `claim/complete` register, which returns the ID of the highest priority pending interrupt or zero if there is no pending interrupt. A successful claim will also atomically clear the corresponding pending bit on the interrupt source. The PLIC can perform a claim at any time and the claim operation is not affected by the setting of the priority threshold register. PLIC 可通过读取中断响应/完成寄存器来执行中断响应,该寄存器会返回优先级最高的挂起中断的 ID,如果没有挂起中断,则返回 0。成功的中断响应也会原子式地清除中断源上相应的挂起位。PLIC 可在任何时间执行中断响应,且中断响应操作不受优先级阈值寄存器设置的影响。 ->The Interrupt Claim Process register is context based and is located at (4K alignment + 4) starts from offset 0x200000. +> The Interrupt Claim Process register is context based and is located at (4K alignment + 4) starts from offset 0x200000. 一个中断响应/完成寄存器作用于一个上下文,位于(4K + 4)对齐地址处,起始于偏移量 0x200000 位置。 @@ -387,15 +388,15 @@ PLIC 可通过读取中断响应/完成寄存器来执行中断响应,该寄 >``` ### 中断完成 ->The PLIC signals it has completed executing an interrupt handler by writing the interrupt ID it received from the claim to the claim/complete register. The PLIC does not check whether the completion ID is the same as the last claim ID for that target. If the completion ID does not match an interrupt source that is currently enabled for the target, the completion is silently ignored. +> The PLIC signals it has completed executing an interrupt handler by writing the interrupt ID it received from the claim to the claim/complete register. The PLIC does not check whether the completion ID is the same as the last claim ID for that target. If the completion ID does not match an interrupt source that is currently enabled for the target, the completion is silently ignored. PLIC 将从响应中接收到的中断 ID 写入中断响应/完成寄存器,以表示已完成中断处理程序的执行。PLIC 不会检查完成 ID 是否与该目标的上一次请求 ID 相同。如果完成 ID 与中断目标当前使能的中断源不匹配,则完成将被静默忽略。 ->After a handler has completed service of an interrupt, the associated gateway must be sent an interrupt completion message, usually as a write to a non-idempotent memory-mapped I/O control register. The gateway will only forward additional interrupts to the PLIC core after receiving the completion message. +> After a handler has completed service of an interrupt, the associated gateway must be sent an interrupt completion message, usually as a write to a non-idempotent memory-mapped I/O control register. The gateway will only forward additional interrupts to the PLIC core after receiving the completion message. 处理程序完成中断服务后,必须向相关网关发送中断完成信息,通常是写入非幂等内存映射 I/O 控制寄存器。网关只有在收到完成信息后,才会向 PLIC 内核转发其他中断。 ->The Interrupt Completion registers are context based and located at the same address with Interrupt Claim Process register, which is at (4K alignment + 4) starts from offset 0x200000. +> The Interrupt Completion registers are context based and located at the same address with Interrupt Claim Process register, which is at (4K alignment + 4) starts from offset 0x200000. 一个中断完成寄存器作用域一个上下文,与中断响应处理寄存器位于同一地址,即从偏移量 0x200000 开始的(4K + 4)对齐地址。 -- Gitee From 4dfe1d524c8309321201276295390e7ddeb1c977 Mon Sep 17 00:00:00 2001 From: sts Date: Thu, 29 Aug 2024 16:26:59 +0800 Subject: [PATCH 3/8] riscv-plic-spec.md: commit correct result of tinycorrect-spaces Signed-off-by: sts --- articles/20240828-riscv-plic-spec.md | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/articles/20240828-riscv-plic-spec.md b/articles/20240828-riscv-plic-spec.md index 417b8e5..4e1f549 100644 --- a/articles/20240828-riscv-plic-spec.md +++ b/articles/20240828-riscv-plic-spec.md @@ -1,4 +1,4 @@ -> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc2 - [translate]
+> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc2 - [spaces]
> Title: [RISC-V Platform-Level Interrupt Controller Specification](https://github.com/riscv/riscv-plic-spec/blob/master/riscv-plic.adoc)
> Author: Abner Chang@**March 12, 2023**
> Translator: Sunts
@@ -24,9 +24,9 @@ [5. RISCV PLIC 运行参数](#jump6) ## 前言 -PLIC(Platform-Level Interrupt Controller) 平台级中断控制器主要用于 RISCV 架构下外部中断的控制和处理。PLIC 将各种设备中断复用到 Hart 上下文的外部中断线上,并通过硬件支持中断优先级。PLIC 支持最多 1023 个中断( 0 被保留)和 15872 个上下文,但实际的中断和上下文数量取决于 PLIC 的实现。 +PLIC(Platform-Level Interrupt Controller) 平台级中断控制器主要用于 RISCV 架构下外部中断的控制和处理。PLIC 将各种设备中断复用到 Hart 上下文的外部中断线上,并通过硬件支持中断优先级。PLIC 支持最多 1023 个中断(0 被保留)和 15872 个上下文,但实际的中断和上下文数量取决于 PLIC 的实现。 - + ## 中断目标和 HART 上下文 > We use the term hart to unambiguously and concisely describe a hardware thread as opposed to software-managed thread contexts. @@ -45,7 +45,7 @@ hart 用于描述硬件线程,与软件管理的线程上下文相对。 > The notification only appear in lower-privilege xip registers if external interrupts have been delegated to the lower-privilege modes. > Each processor core must define a policy on how simultaneous active interrupts are taken by multiple hart contexts on the core. For the simple case of a single stack of hart contexts, one for each supported privileged mode, interrupts for higher-privilege contexts can preempt execution of interrupt handlers for lower-privilege contexts. A multithreaded processor core could run multiple independent interrupt handlers on different hart contexts at the same time. A processor core could also provide hart contexts that are only used for interrupt handling to reduce interrupt service latency, and these might preempt interrupt handlers for other harts on the same core. -如果外部中断已经被委派给较低特权模式,那么这些中断的通知只会出现在较低特权的扩展中断寄存器 (XIP) 中。每个处理器核心都必须定义一个策略,说明如何处理核心上多个 hart 上下文同时发生的活动中断。对于简单的单个 hart 上下文堆栈的情况,即为每种支持的特权模式提供一个 hart 上下文,在这种情况下,较高特权模式下的中断可以抢占较低特权模式下中断处理程序的执行。一个多线程的处理器核心可以在不同的 hart 上下文上同时运行多个独立的中断处理程序。处理器核心还可以提供专门用于中断处理的 hart 上下文以降低中断服务延迟,并且这些上下文可能抢占同一核心上其他 hart 的中断处理程序。 +如果外部中断已经被委派给较低特权模式,那么这些中断的通知只会出现在较低特权的扩展中断寄存器 (XIP) 中。每个处理器核心都必须定义一个策略,说明如何处理核心上多个 hart 上下文同时发生的活动中断。对于简单的单个 hart 上下文堆栈的情况,即为每种支持的特权模式提供一个 hart 上下文,在这种情况下,较高特权模式下的中断可以抢占较低特权模式下中断处理程序的执行。一个多线程的处理器核心可以在不同的 hart 上下文上同时运行多个独立的中断处理程序。处理器核心还可以提供专门用于中断处理的 hart 上下文以降低中断服务延迟,并且这些上下文可能抢占同一核心上其他 hart 的中断处理程序。 > The PLIC treats each interrupt target independently and does not take into account any interrupt prioritization scheme used by a component that contains multiple interrupt targets. As a result, the PLIC provides no concept of interrupt preemption or nesting so this must be handled by the cores hosting multiple interrupt target contexts. @@ -55,9 +55,8 @@ PLIC 独立处理每个中断目标,不会考虑包含多个中断目标的组 ![RISC-V PLIC 中断架构图](images/riscv_plic_spec/plic.jpg) - - -## 中断网关 + +## 中断网关 > The interrupt gateways are responsible for converting global interrupt signals into a common interrupt request format, and for controlling the flow of interrupt requests to the PLIC core. At most one interrupt request per interrupt source can be pending in the PLIC core at any time, indicated by setting the source’s IP bit. The gateway only forwards a new interrupt request to the PLIC core after receiving notification that the interrupt handler servicing the previous interrupt request from the same source has completed. @@ -70,7 +69,7 @@ PLIC 独立处理每个中断目标,不会考虑包含多个中断目标的组 > If the global interrupt source was edge-triggered, the gateway will convert the first matching signal edge into an interrupt request. Depending on the design of the device and the interrupt handler, in between sending an interrupt request and receiving notice of its handler’s completion, the gateway might either ignore additional matching edges or increment a counter of pending interrupts. In either case, the next interrupt request will not be forwarded to the PLIC core until the previous completion message has been received. If the gateway has a pending interrupt counter, the counter will be decremented when the interrupt request is accepted by the PLIC core. Unlike dedicated-wire interrupt signals, message-signalled interrupts (MSIs) are sent over the system interconnect via a message packet that describes which interrupt is being asserted. The message is decoded to select an interrupt gateway, and the relevant gateway then handles the MSI similar to an edge-triggered interrupt. 如果全局中断源是边沿触发的,网关会将首次匹配的信号边沿转换为一个中断请求。根据设备的设计以及中断处理程序的不同,在发送一个中断请求与接收其处理程序完成的通知之间,网关可能会忽略额外的匹配边沿或者递增一个待处理中断的计数器。在这两种情况下,下一个中断请求都不会被转发到 PLIC 核心,直到先前的完成消息已被接收。如果网关具有一个待处理中断计数器,当中断请求被 PLIC 核心接受时,计数器将会递减。与专用线中断信号不同,消息指示中断(MSIs)是通过系统互联经由一个描述哪个中断正在被激活的消息包发送的。该消息被解码以选择一个中断网关,相关的网关然后像处理边沿触发的中断一样处理 MSI(Message Signaled Interrupt)。 - + ## 中断通知 > Each interrupt target has an external interrupt pending (EIP) bit in the PLIC core that indicates that the corresponding target has a pending interrupt waiting for service. The value in EIP can change as a result of changes to state in the PLIC core, brought on by interrupt sources, interrupt targets, or other agents manipulating register values in the PLIC. The value in EIP is communicated to the destination target as an interrupt notification. If the target is a RISC-V hart context, the interrupt notifications arrive on the meip/seip bits depending on the privilege level of the hart context. @@ -97,17 +96,17 @@ PLIC硬件仅支持中断的多播功能,这意味着所有已启用的目标 (中断通知中的值仅保证持有过去某个时刻有效的 EIP 值。特别是,当第一个目标的中断通知仍在传输途中时,第二个目标可以回复并响应中断,这样当第一个目标尝试响应中断时,它可能会发现 PLIC 核心中没有活动的中断。) - + ## 中断标识符 > Global interrupt sources are assigned small unsigned integer identifiers, beginning at the value 1. An interrupt ID of 0 is reserved to mean “no interrupt”. -全局中断源被分配了从小整数标识符开始的小的无符号整数,起始值为 1 。中断 ID 为 0 被保留,表示“无中断”。 +全局中断源被分配了从小整数标识符开始的小的无符号整数,起始值为 1。中断 ID 为 0 被保留,表示“无中断”。 > Interrupt identifiers are also used to break ties when two or more interrupt sources have the same assigned priority. Smaller values of interrupt ID take precedence over larger values of interrupt ID. 中断标识符也被用来解决两个或多个中断源具有相同分配优先级的情况。较小的中断 ID 值比较大的中断 ID 值具有更高的优先级。 - + ## 中断流 下图展示了通过PLIC处理中断时,各代理之间流动的消息。 @@ -127,7 +126,6 @@ PLIC硬件仅支持中断的多播功能,这意味着所有已启用的目标 > * The interrupt gateway can now forward another interrupt request for the same source to the PLIC. - * 全局中断从中断源发送到中断网关,由网关处理来自各中断源的中断信号 * 然后,中断网关向 PLIC 核发送单个中断请求,PLIC 核将这些请求锁存在内核中断待处理位 (IP) 中。 @@ -142,7 +140,7 @@ PLIC硬件仅支持中断的多播功能,这意味着所有已启用的目标 * 现在,中断网关可将同一中断源的另一个中断请求转发给 PLIC。 - + ## RISCV PLIC 运行参数 规范定义了一般 PLIC 运行参数寄存器块,它们分别是 @@ -167,7 +165,7 @@ PLIC硬件仅支持中断的多播功能,这意味着所有已启用的目标 * 中断阈值寄存器:记录各上下文使能中断的优先级阈值 -* 中断响应寄存器:用于各上下文获取中断源的 ID +* 中断响应寄存器:用于各上下文获取中断源的 ID * 中断完成寄存器:用于发送中断完成信号到对应中断网关 @@ -243,7 +241,6 @@ PLIC 内存映射区域内中断源优先级块的基地址固定为 0x000000。 | :---:| :---: | :---: | :---:| | 中断源优先级 | 中断源 #0 - #1023 的优先级 | 1024 * 4 = 4096(0x1000) bytes | 这是一个包含 PLIC 中断源优先级的连续内存块。该内存块共有 1024 个中断源优先级。中断源优先级 #0 被保留,表示不存在。 - #### PLIC 中断优先级内存映射 >``` -- Gitee From 34a0b70337819039068836b2cd4aec110f40b124 Mon Sep 17 00:00:00 2001 From: sts Date: Thu, 29 Aug 2024 16:27:16 +0800 Subject: [PATCH 4/8] riscv-plic-spec.md: commit correct result of tinycorrect-toc Signed-off-by: sts --- articles/20240828-riscv-plic-spec.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/articles/20240828-riscv-plic-spec.md b/articles/20240828-riscv-plic-spec.md index 4e1f549..f621844 100644 --- a/articles/20240828-riscv-plic-spec.md +++ b/articles/20240828-riscv-plic-spec.md @@ -1,4 +1,4 @@ -> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc2 - [spaces]
+> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc2 - [spaces toc]
> Title: [RISC-V Platform-Level Interrupt Controller Specification](https://github.com/riscv/riscv-plic-spec/blob/master/riscv-plic.adoc)
> Author: Abner Chang@**March 12, 2023**
> Translator: Sunts
@@ -24,9 +24,11 @@ [5. RISCV PLIC 运行参数](#jump6) ## 前言 + PLIC(Platform-Level Interrupt Controller) 平台级中断控制器主要用于 RISCV 架构下外部中断的控制和处理。PLIC 将各种设备中断复用到 Hart 上下文的外部中断线上,并通过硬件支持中断优先级。PLIC 支持最多 1023 个中断(0 被保留)和 15872 个上下文,但实际的中断和上下文数量取决于 PLIC 的实现。 + ## 中断目标和 HART 上下文 > We use the term hart to unambiguously and concisely describe a hardware thread as opposed to software-managed thread contexts. @@ -56,6 +58,7 @@ PLIC 独立处理每个中断目标,不会考虑包含多个中断目标的组 ![RISC-V PLIC 中断架构图](images/riscv_plic_spec/plic.jpg) + ## 中断网关 > The interrupt gateways are responsible for converting global interrupt signals into a common interrupt request format, and for controlling the flow of interrupt requests to the PLIC core. At most one interrupt request per interrupt source can be pending in the PLIC core at any time, indicated by setting the source’s IP bit. The gateway only forwards a new interrupt request to the PLIC core after receiving notification that the interrupt handler servicing the previous interrupt request from the same source has completed. @@ -70,6 +73,7 @@ PLIC 独立处理每个中断目标,不会考虑包含多个中断目标的组 如果全局中断源是边沿触发的,网关会将首次匹配的信号边沿转换为一个中断请求。根据设备的设计以及中断处理程序的不同,在发送一个中断请求与接收其处理程序完成的通知之间,网关可能会忽略额外的匹配边沿或者递增一个待处理中断的计数器。在这两种情况下,下一个中断请求都不会被转发到 PLIC 核心,直到先前的完成消息已被接收。如果网关具有一个待处理中断计数器,当中断请求被 PLIC 核心接受时,计数器将会递减。与专用线中断信号不同,消息指示中断(MSIs)是通过系统互联经由一个描述哪个中断正在被激活的消息包发送的。该消息被解码以选择一个中断网关,相关的网关然后像处理边沿触发的中断一样处理 MSI(Message Signaled Interrupt)。 + ## 中断通知 > Each interrupt target has an external interrupt pending (EIP) bit in the PLIC core that indicates that the corresponding target has a pending interrupt waiting for service. The value in EIP can change as a result of changes to state in the PLIC core, brought on by interrupt sources, interrupt targets, or other agents manipulating register values in the PLIC. The value in EIP is communicated to the destination target as an interrupt notification. If the target is a RISC-V hart context, the interrupt notifications arrive on the meip/seip bits depending on the privilege level of the hart context. @@ -97,6 +101,7 @@ PLIC硬件仅支持中断的多播功能,这意味着所有已启用的目标 (中断通知中的值仅保证持有过去某个时刻有效的 EIP 值。特别是,当第一个目标的中断通知仍在传输途中时,第二个目标可以回复并响应中断,这样当第一个目标尝试响应中断时,它可能会发现 PLIC 核心中没有活动的中断。) + ## 中断标识符 > Global interrupt sources are assigned small unsigned integer identifiers, beginning at the value 1. An interrupt ID of 0 is reserved to mean “no interrupt”. @@ -107,6 +112,7 @@ PLIC硬件仅支持中断的多播功能,这意味着所有已启用的目标 中断标识符也被用来解决两个或多个中断源具有相同分配优先级的情况。较小的中断 ID 值比较大的中断 ID 值具有更高的优先级。 + ## 中断流 下图展示了通过PLIC处理中断时,各代理之间流动的消息。 @@ -141,6 +147,7 @@ PLIC硬件仅支持中断的多播功能,这意味着所有已启用的目标 * 现在,中断网关可将同一中断源的另一个中断请求转发给 PLIC。 + ## RISCV PLIC 运行参数 规范定义了一般 PLIC 运行参数寄存器块,它们分别是 @@ -385,6 +392,7 @@ PLIC 可通过读取中断响应/完成寄存器来执行中断响应,该寄 >``` ### 中断完成 + > The PLIC signals it has completed executing an interrupt handler by writing the interrupt ID it received from the claim to the claim/complete register. The PLIC does not check whether the completion ID is the same as the last claim ID for that target. If the completion ID does not match an interrupt source that is currently enabled for the target, the completion is silently ignored. PLIC 将从响应中接收到的中断 ID 写入中断响应/完成寄存器,以表示已完成中断处理程序的执行。PLIC 不会检查完成 ID 是否与该目标的上一次请求 ID 相同。如果完成 ID 与中断目标当前使能的中断源不匹配,则完成将被静默忽略。 -- Gitee From 7d7808b85cb6f8f515231492e04658785b897903 Mon Sep 17 00:00:00 2001 From: sts Date: Thu, 29 Aug 2024 16:27:25 +0800 Subject: [PATCH 5/8] riscv-plic-spec.md: commit correct result of tinycorrect-tables Signed-off-by: sts --- articles/20240828-riscv-plic-spec.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/articles/20240828-riscv-plic-spec.md b/articles/20240828-riscv-plic-spec.md index f621844..bbb17d6 100644 --- a/articles/20240828-riscv-plic-spec.md +++ b/articles/20240828-riscv-plic-spec.md @@ -1,4 +1,4 @@ -> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc2 - [spaces toc]
+> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc2 - [spaces toc tables]
> Title: [RISC-V Platform-Level Interrupt Controller Specification](https://github.com/riscv/riscv-plic-spec/blob/master/riscv-plic.adoc)
> Author: Abner Chang@**March 12, 2023**
> Translator: Sunts
@@ -245,7 +245,7 @@ PLIC 内存映射的基地址因具体平台而异。内存映射寄存器的宽 PLIC 内存映射区域内中断源优先级块的基地址固定为 0x000000。 | PLIC 寄存器组名 | 功能 | 寄存器组大小 |描述| -| :---:| :---: | :---: | :---:| +|:---:|:---: |:---: |:---:| | 中断源优先级 | 中断源 #0 - #1023 的优先级 | 1024 * 4 = 4096(0x1000) bytes | 这是一个包含 PLIC 中断源优先级的连续内存块。该内存块共有 1024 个中断源优先级。中断源优先级 #0 被保留,表示不存在。 #### PLIC 中断优先级内存映射 @@ -273,8 +273,8 @@ PLIC 核中的中断挂起位可通过设置相关的中断使能位然后通过 PLIC 内存映射区域内中断挂起块的基地址固定为 0x001000。 | PLIC 寄存器组名 | 功能 | 寄存器组大小 |描述| -| :---:| :---: | :---: | :---:| -| 中断挂起位 | 中断源 #0 - #N 的中断挂起位 | 1024 / 8 = 128 (0x80) bytes | 这是一个包含 PLIC 中断挂起位的连续存储块。每个中断挂起位占用该寄存器块的 1 位。 +|:---:|:---: |:---: |:---:| +| 中断挂起位 | 中断源 #0 - #N 的中断挂起位 | 1024 / 8 = 128 (0x80) bytes | 这是一个包含 PLIC 中断挂起位的连续存储块。每个中断挂起位占用该寄存器块的 1 位。 #### PLIC 中断挂起位内存映射 @@ -301,7 +301,7 @@ PLIC 如何为上下文(Hart 和特权模式)组织中断不属于 RISC-V PL PLIC 内存映射区域内中断使能块的基地址固定为 0x002000。 | PLIC 寄存器组名 | 功能 | 寄存器组大小 |描述| -| :---:| :---: | :---: | :---:| +|:---:|:---: |:---: |:---:| | 中断使能位 | 15872 个上下文的中断源 #0 - #1023 的中断挂起位 | (1024 / 8) * 15872 = 2031616 (0x1f0000) bytes | 这是一个连续的内存块,包含了 15872 个上下文的 PLIC 中断使能位。每个中断使能位占用该寄存器块中的 1 位,总共包含 15872 个中断使能位块。 #### PLIC 中断使能位内存映射 @@ -336,7 +336,7 @@ PLIC 提供基于上下文的阈值寄存器,用于设置每个上下文的中 优先级阈值寄存器块的基地址位于 4K 对齐位置,起始于偏移量 0x200000 位置。 | PLIC 寄存器组名 | 功能 | 寄存器组大小 |描述| -| :---:| :---: | :---: | :---:| +|:---:|:---: |:---: |:---:| | 优先级阈值 | 15872 个上下文的优先级阈值 | 4096 * 15872 = 65011712 (0x3e00000) bytes | 用于设置每个上下文的中断优先级寄存器 #### PLIC 中断优先级阈值内存映射 @@ -375,7 +375,7 @@ PLIC 可通过读取中断响应/完成寄存器来执行中断响应,该寄 一个中断响应/完成寄存器作用于一个上下文,位于(4K + 4)对齐地址处,起始于偏移量 0x200000 位置。 | PLIC 寄存器组名 | 功能 | 寄存器组大小 |描述| -| :---:| :---: | :---: | :---:| +|:---:|:---: |:---: |:---:| | 中断响应寄存器 | 15872 个上下文的中断响应过程 | 4096 * 15872 = 65011712 (0x3e00000) bytes | 用于每个上下文读取待服务的中断 ID #### PLIC 中断响应处理内存映射 @@ -406,7 +406,7 @@ PLIC 将从响应中接收到的中断 ID 写入中断响应/完成寄存器, 一个中断完成寄存器作用域一个上下文,与中断响应处理寄存器位于同一地址,即从偏移量 0x200000 开始的(4K + 4)对齐地址。 | PLIC 寄存器组名 | 功能 | 寄存器组大小 |描述| -| :---:| :---: | :---: | :---:| +|:---:|:---: |:---: |:---:| | 中断完成寄存器 | 15872 个上下文的中断完成 | 4096 * 15872 = 65011712 (0x3e00000) bytes | 用于每个上下文写入已经完成的中断 ID #### PLIC 中断完成寄存器内存映射 -- Gitee From 5e08c041187634b40fccfdaa623bc84806d3af44 Mon Sep 17 00:00:00 2001 From: sts Date: Thu, 29 Aug 2024 16:27:38 +0800 Subject: [PATCH 6/8] riscv-plic-spec.md: commit correct result of tinycorrect-pangu Signed-off-by: sts --- articles/20240828-riscv-plic-spec.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/articles/20240828-riscv-plic-spec.md b/articles/20240828-riscv-plic-spec.md index bbb17d6..c008837 100644 --- a/articles/20240828-riscv-plic-spec.md +++ b/articles/20240828-riscv-plic-spec.md @@ -1,4 +1,4 @@ -> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc2 - [spaces toc tables]
+> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc2 - [spaces toc tables pangu]
> Title: [RISC-V Platform-Level Interrupt Controller Specification](https://github.com/riscv/riscv-plic-spec/blob/master/riscv-plic.adoc)
> Author: Abner Chang@**March 12, 2023**
> Translator: Sunts
@@ -11,17 +11,17 @@ 目录 -[1. 中断目标和核心上下文](#jump1) +【1. 中断目标和核心上下文】(#jump1) -[2. 中断网关](#jump2) +【2. 中断网关】(#jump2) -[3. 中断通知](#jump3) +【3. 中断通知】(#jump3) -[3. 中断标识符](#jump4) +【3. 中断标识符】(#jump4) -[4. 中断流](#jump5) +【4. 中断流】(#jump5) -[5. RISCV PLIC 运行参数](#jump6) +【5. RISCV PLIC 运行参数】(#jump6) ## 前言 @@ -53,7 +53,7 @@ hart 用于描述硬件线程,与软件管理的线程上下文相对。 PLIC 独立处理每个中断目标,不会考虑包含多个中断目标的组件所使用的任何中断优先级方案。因此,PLIC 不提供中断抢占或嵌套的概念,因此必须由托管多个中断目标上下文的内核来处理。 -下图为RISCV PLIC 中断架构图 +下图为 RISCV PLIC 中断架构图 ![RISC-V PLIC 中断架构图](images/riscv_plic_spec/plic.jpg) @@ -82,11 +82,11 @@ PLIC 独立处理每个中断目标,不会考虑包含多个中断目标的组 > (In simple systems, the interrupt notifications will be simple wires connected to the processor implementing a hart. In more complex platforms, the notifications might be routed as messages across a system interconnect.) -(在简单的系统中,中断通知将是连接到实现hart的处理器的简单线路。而在更复杂的平台上,这些通知可能会作为消息通过系统互联进行路由。) +(在简单的系统中,中断通知将是连接到实现 hart 的处理器的简单线路。而在更复杂的平台上,这些通知可能会作为消息通过系统互联进行路由。) > The PLIC hardware only supports multicasting of interrupts, such that all enabled targets will receive interrupt notifications for a given active interrupt. -PLIC硬件仅支持中断的多播功能,这意味着所有已启用的目标都会接收到给定活动中断的中断通知。 +PLIC 硬件仅支持中断的多播功能,这意味着所有已启用的目标都会接收到给定活动中断的中断通知。 > (Multicasting provides rapid response since the fastest responder claims the interrupt, but can be wasteful in high-interrupt-rate scenarios if multiple harts take a trap for an interrupt that only one can successfully claim. Software can modulate the PLIC IE bits as part of each interrupt handler to provide alternate policies, such as interrupt affinity or round-robin unicasting.) @@ -98,7 +98,7 @@ PLIC硬件仅支持中断的多播功能,这意味着所有已启用的目标 > (The value in an interrupt notification is only guaranteed to hold an EIP value that was valid at some point in the past. In particular, a second target can respond and claim an interrupt while a notification to the first target is still in flight, such that when the first target tries to claim the interrupt it finds it has no active interrupts in the PLIC core.) -(中断通知中的值仅保证持有过去某个时刻有效的 EIP 值。特别是,当第一个目标的中断通知仍在传输途中时,第二个目标可以回复并响应中断,这样当第一个目标尝试响应中断时,它可能会发现 PLIC 核心中没有活动的中断。) +(中断通知中的值仅保证持有过去某个时刻有效的 EIP 值。特别是,当第一个目标的中断通知仍在传输途中时,第二个目标可以回复并响应中断,这样当第一个目标尝试响应中断时,它可能会发现 PLIC 核心中没有活动的中断。) @@ -115,7 +115,7 @@ PLIC硬件仅支持中断的多播功能,这意味着所有已启用的目标 ## 中断流 -下图展示了通过PLIC处理中断时,各代理之间流动的消息。 +下图展示了通过 PLIC 处理中断时,各代理之间流动的消息。 ![RISC-V PLIC 中断流](images/riscv_plic_spec/interrupt_flow.jpg) > * Global interrupts are sent from their source to an interrupt gateway that processes the interrupt signal from each source @@ -296,7 +296,7 @@ PLIC 如何为上下文(Hart 和特权模式)组织中断不属于 RISC-V PL > (A large number of potential IE bits might be hardwired to zero in cases where some interrupt sources can only be routed to a subset of targets. A larger number of bits might be wired to 1 for an embedded device with fixed interrupt routing. Interrupt priorities, thresholds, and hart-internal interrupt masking provide considerable flexibility in ignoring external interrupts even if a global interrupt source is always enabled.) -(在某些中断源只能路由到部分中断目标,大量潜在的 IE 位可能被硬连线为 0。对于具有固定中断路由的嵌入式设备,可能会有更多位被连接为 1。即使全局中断源始终处于启用状态,中断优先级、阈值和 hart 内部中断屏蔽在忽略外部中断方面也提供了相当大的灵活性)。 +(在某些中断源只能路由到部分中断目标,大量潜在的 IE 位可能被硬连线为 0。对于具有固定中断路由的嵌入式设备,可能会有更多位被连接为 1。即使全局中断源始终处于启用状态,中断优先级、阈值和 hart 内部中断屏蔽在忽略外部中断方面也提供了相当大的灵活性)。 PLIC 内存映射区域内中断使能块的基地址固定为 0x002000。 -- Gitee From d161c4f749470fb8721140488cb37c6b8dd4e865 Mon Sep 17 00:00:00 2001 From: sts Date: Thu, 29 Aug 2024 16:38:08 +0800 Subject: [PATCH 7/8] riscv-plic-spec.md: commit correct result of tinycorrect-epw Signed-off-by: sts --- articles/20240828-riscv-plic-spec.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/articles/20240828-riscv-plic-spec.md b/articles/20240828-riscv-plic-spec.md index c008837..8745fc9 100644 --- a/articles/20240828-riscv-plic-spec.md +++ b/articles/20240828-riscv-plic-spec.md @@ -1,4 +1,4 @@ -> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc2 - [spaces toc tables pangu]
+> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc2 - [autocorrect epw]
> Title: [RISC-V Platform-Level Interrupt Controller Specification](https://github.com/riscv/riscv-plic-spec/blob/master/riscv-plic.adoc)
> Author: Abner Chang@**March 12, 2023**
> Translator: Sunts
@@ -47,7 +47,7 @@ hart 用于描述硬件线程,与软件管理的线程上下文相对。 > The notification only appear in lower-privilege xip registers if external interrupts have been delegated to the lower-privilege modes. > Each processor core must define a policy on how simultaneous active interrupts are taken by multiple hart contexts on the core. For the simple case of a single stack of hart contexts, one for each supported privileged mode, interrupts for higher-privilege contexts can preempt execution of interrupt handlers for lower-privilege contexts. A multithreaded processor core could run multiple independent interrupt handlers on different hart contexts at the same time. A processor core could also provide hart contexts that are only used for interrupt handling to reduce interrupt service latency, and these might preempt interrupt handlers for other harts on the same core. -如果外部中断已经被委派给较低特权模式,那么这些中断的通知只会出现在较低特权的扩展中断寄存器 (XIP) 中。每个处理器核心都必须定义一个策略,说明如何处理核心上多个 hart 上下文同时发生的活动中断。对于简单的单个 hart 上下文堆栈的情况,即为每种支持的特权模式提供一个 hart 上下文,在这种情况下,较高特权模式下的中断可以抢占较低特权模式下中断处理程序的执行。一个多线程的处理器核心可以在不同的 hart 上下文上同时运行多个独立的中断处理程序。处理器核心还可以提供专门用于中断处理的 hart 上下文以降低中断服务延迟,并且这些上下文可能抢占同一核心上其他 hart 的中断处理程序。 +如果外部中断已经被委派给较低特权模式,那么这些中断的通知只会出现在较低特权的扩展中断寄存器(XIP)中。每个处理器核心都必须定义一个策略,说明如何处理核心上多个 hart 上下文同时发生的活动中断。对于简单的单个 hart 上下文堆栈的情况,即为每种支持的特权模式提供一个 hart 上下文,在这种情况下,较高特权模式下的中断可以抢占较低特权模式下中断处理程序的执行。一个多线程的处理器核心可以在不同的 hart 上下文上同时运行多个独立的中断处理程序。处理器核心还可以提供专门用于中断处理的 hart 上下文以降低中断服务延迟,并且这些上下文可能抢占同一核心上其他 hart 的中断处理程序。 > The PLIC treats each interrupt target independently and does not take into account any interrupt prioritization scheme used by a component that contains multiple interrupt targets. As a result, the PLIC provides no concept of interrupt preemption or nesting so this must be handled by the cores hosting multiple interrupt target contexts. @@ -78,7 +78,7 @@ PLIC 独立处理每个中断目标,不会考虑包含多个中断目标的组 > Each interrupt target has an external interrupt pending (EIP) bit in the PLIC core that indicates that the corresponding target has a pending interrupt waiting for service. The value in EIP can change as a result of changes to state in the PLIC core, brought on by interrupt sources, interrupt targets, or other agents manipulating register values in the PLIC. The value in EIP is communicated to the destination target as an interrupt notification. If the target is a RISC-V hart context, the interrupt notifications arrive on the meip/seip bits depending on the privilege level of the hart context. -在 PLIC 内核中,每个中断目标都有一个外部中断待处理 (EIP) 位,该位表示相应目标有一个等待服务的待处理中断。EIP 中的值会因 PLIC 内核中的状态变化而改变,这些变化是由中断源、中断目标或操纵 PLIC 中寄存器值的其他代理引起的。EIP 中的值将作为中断通知传递给目标目标。如果目标是 RISC-V hart 上下文,中断通知会根据 hart 上下文所处的不同模式到达机器模式的 meip 或特权级/监管者模式的 seip 位。 +在 PLIC 内核中,每个中断目标都有一个外部中断待处理(EIP)位,该位表示相应目标有一个等待服务的待处理中断。EIP 中的值会因 PLIC 内核中的状态变化而改变,这些变化是由中断源、中断目标或操纵 PLIC 中寄存器值的其他代理引起的。EIP 中的值将作为中断通知传递给目标目标。如果目标是 RISC-V hart 上下文,中断通知会根据 hart 上下文所处的不同模式到达机器模式的 meip 或特权级/监管者模式的 seip 位。 > (In simple systems, the interrupt notifications will be simple wires connected to the processor implementing a hart. In more complex platforms, the notifications might be routed as messages across a system interconnect.) @@ -134,7 +134,7 @@ PLIC 硬件仅支持中断的多播功能,这意味着所有已启用的目标 * 全局中断从中断源发送到中断网关,由网关处理来自各中断源的中断信号 -* 然后,中断网关向 PLIC 核发送单个中断请求,PLIC 核将这些请求锁存在内核中断待处理位 (IP) 中。 +* 然后,中断网关向 PLIC 核发送单个中断请求,PLIC 核将这些请求锁存在内核中断待处理位(IP)中。 * 如果一个或多个目标使能了待处理中断,且待处理中断的优先级超过了每个目标的阈值,PLIC 内核就会向这些目标转发中断通知。 @@ -262,7 +262,7 @@ PLIC 内存映射区域内中断源优先级块的基地址固定为 0x000000。 > The current status of the interrupt source pending bits in the PLIC core can be read from the pending array, organized as 32-bit register. The pending bit for interrupt ID N is stored in bit (N mod 32) of word (N/32). Bit 0 of word 0, which represents the non-existent interrupt source 0, is hardwired to zero. -PLIC 内核中中断源挂起位的当前状态可从以 32 位寄存器形式组织的待处理数组中读取。中断 ID N 的挂起位存储在字 (N/32) 的位(N 模 32)中。字 0 的第 0 位代表不存在的中断源 0,被硬连为 0。 +PLIC 内核中中断源挂起位的当前状态可从以 32 位寄存器形式组织的待处理数组中读取。中断 ID N 的挂起位存储在字(N/32)的位(N 模 32)中。字 0 的第 0 位代表不存在的中断源 0,被硬连为 0。 > A pending bit in the PLIC core can be cleared by setting the associated enable bit then performing a claim. -- Gitee From 62ca23cf9b1c4ca7275d09cfcc55610fb4699a25 Mon Sep 17 00:00:00 2001 From: sts Date: Thu, 29 Aug 2024 19:22:53 +0800 Subject: [PATCH 8/8] Keep the format of table of content do not change --- articles/20240828-riscv-plic-spec.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/articles/20240828-riscv-plic-spec.md b/articles/20240828-riscv-plic-spec.md index 8745fc9..a5429fe 100644 --- a/articles/20240828-riscv-plic-spec.md +++ b/articles/20240828-riscv-plic-spec.md @@ -11,17 +11,17 @@ 目录 -【1. 中断目标和核心上下文】(#jump1) +[1. 中断目标和核心上下文](#jump1) -【2. 中断网关】(#jump2) +[2. 中断网关](#jump2) -【3. 中断通知】(#jump3) +[3. 中断通知](#jump3) -【3. 中断标识符】(#jump4) +[3. 中断标识符](#jump4) -【4. 中断流】(#jump5) +[4. 中断流](#jump5) -【5. RISCV PLIC 运行参数】(#jump6) +[5. RISCV PLIC 运行参数](#jump6) ## 前言 @@ -356,7 +356,7 @@ PLIC 提供基于上下文的阈值寄存器,用于设置每个上下文的中 > Sometime after a target receives an interrupt notification, it might decide to service the interrupt. The target sends an interrupt claim message to the PLIC core, which will usually be implemented as a non-idempotent memory-mapped I/O control register read. On receiving a claim message, the PLIC core will atomically determine the ID of the highest-priority pending interrupt for the target and then clear down the corresponding source’s IP bit. The PLIC core will then return the ID to the target. The PLIC core will return an ID of zero, if there were no pending interrupts for the target when the claim was serviced. -中断目标收到中断通知后,可能会决定为中断提供服务。中断目标向 PLIC 核发送中断请求信息,通常是通过读取非幂等内存映射 I/O 控制寄存器来实现的。收到请求消息后,PLIC 核将以原子方式确定中断目标最高优先级待处理中断的 ID,然后清除相应源的 IP 位。然后,PLIC 核会将 ID 返回给目标。如果在服务请求时目标没有待处理中断,PLIC 内核将返回一个 0 的 ID。 +中断目标收到中断通知后,可能会决定为中断提供服务。中断目标向 PLIC 核发送中断响应信息,通常是通过读取非幂等内存映射 I/O 控制寄存器来实现的。收到请求消息后,PLIC 核将以原子方式确定中断目标最高优先级待处理中断的 ID,然后清除相应源的 IP 位。然后,PLIC 核会将 ID 返回给目标。如果在服务请求时目标没有待处理中断,PLIC 内核将返回一个 0 的 ID。 > After the highest-priority pending interrupt is claimed by a target and the corresponding IP bit is cleared, other lower-priority pending interrupts might then become visible to the target, and so the PLIC EIP bit might not be cleared after a claim. The interrupt handler can check the local meip/seip/ueip bits before exiting the handler, to allow more efficient service of other interrupts without first restoring the interrupted context and taking another interrupt trap. -- Gitee