From c71e052cd8857039892f9c45572d36983315813d Mon Sep 17 00:00:00 2001 From: ZengHongKun <431250696@qq.com> Date: Sat, 23 May 2026 23:07:31 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=9B=B4=E6=96=B00.96oled=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=EF=BC=8C=E4=BB=A5=E5=8F=8A=E7=A1=AC=E4=BB=B6iic?= =?UTF-8?q?=E9=80=9A=E4=BF=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/i2c/Base_I2C.c | 13 +- common/i2c/Base_I2C.h | 52 ++-- modules/oled/HW_OLED.c | 535 +++++++++++------------------------- modules/oled/HW_OLED.h | 251 ++++++----------- modules/oled/HW_OLED_Font.h | 262 ------------------ modules/oled/OLED_Font.h | 202 ++++++++++++++ 6 files changed, 469 insertions(+), 846 deletions(-) delete mode 100644 modules/oled/HW_OLED_Font.h create mode 100644 modules/oled/OLED_Font.h diff --git a/common/i2c/Base_I2C.c b/common/i2c/Base_I2C.c index ff59664..c140748 100644 --- a/common/i2c/Base_I2C.c +++ b/common/i2c/Base_I2C.c @@ -1,12 +1,11 @@ #include "Base_I2C.h" - - -HAL_StatusTypeDef Base_I2C_WriteCmd(uint8_t* hi2cX, uint16_t addr, uint8_t* txData, uint8_t len, uint16_t timeout) +HAL_StatusTypeDef Base_I2C_WriteCmd(I2C_HandleTypeDef *hi2cx, uint16_t addr, uint8_t *txData, uint16_t len, uint16_t timeout) { - return HAL_I2C_Master_Transmit((I2C_HandleTypeDef*)hi2cX, addr, (uint8_t*)txData, len, timeout); + // 调用HAL库I2C主机发送函数,直接透传参数 + return HAL_I2C_Master_Transmit(hi2cx, addr, txData, len, timeout); } - -HAL_StatusTypeDef Base_I2C_ReadCmd(uint8_t* hi2cX, uint16_t addr, uint8_t* rxData, uint8_t len, uint16_t timeout) +HAL_StatusTypeDef Base_I2C_ReadRegs(I2C_HandleTypeDef *hi2cx,uint16_t DevAddr, uint8_t RegAddr, uint8_t *buf, uint16_t len,uint16_t timeout) { - return HAL_I2C_Master_Receive((I2C_HandleTypeDef*)hi2cX, addr, (uint8_t*)rxData, len, timeout); + // 调用HAL库存储器读函数,使用8位寄存器地址模式读取数据 + return HAL_I2C_Mem_Read(hi2cx,DevAddr,RegAddr,I2C_MEMADD_SIZE_8BIT,buf,len,timeout); } diff --git a/common/i2c/Base_I2C.h b/common/i2c/Base_I2C.h index 9e79dad..a358f61 100644 --- a/common/i2c/Base_I2C.h +++ b/common/i2c/Base_I2C.h @@ -1,39 +1,29 @@ -#ifndef __Base_I2C_H -#define __Base_I2C_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "stm32f1xx_hal.h" +#ifndef __BASE_I2C_H +#define __BASE_I2C_H +#include "main.h" #include "i2c.h" - - /** - * @brief 閫氳繃 I2C 鎺ュ彛鍐欏叆鍛戒护鏁版嵁 - * @param hi2cX: 鎸囧悜 I2C 鍙ユ焺鐨勬寚閽堬紝鐢ㄤ簬鎸囧畾浣跨敤鐨 I2C 鎬荤嚎瀹炰緥 - * @param addr: 鐩爣璁惧鐨 I2C 鍦板潃(7bit)锛屾爣璇嗚涓庝箣閫氫俊鐨勪粠璁惧 - * @param txData: 鎸囧悜寰呭彂閫佹暟鎹殑鎸囬拡锛屽寘鍚簡瑕佸啓鍏 I2C 璁惧鐨勫懡浠ゆ垨鏁版嵁鍐呭 - * @param len: 瑕佸彂閫佹暟鎹殑闀垮害锛屽嵆 txData 涓暟鎹殑瀛楄妭鏁 - * @param timeout: 鎿嶄綔瓒呮椂鏃堕棿锛岃嫢鍦ㄨ鏃堕棿鍐呮搷浣滄湭瀹屾垚锛屽垯鎿嶄綔澶辫触;鍗曚綅ms - * @retval HAL_StatusTypeDef: 鎿嶄綔鐘舵侊紝濡 HAL_OK 琛ㄧず鎴愬姛锛屽叾浠栧艰〃绀哄け璐 + * @brief I2C 主机发送指令(纯数据发送,无寄存器地址) + * @param hi2cx : I2C句柄指针(如 &hi2c1) + * @param addr : I2C设备地址(左移前的7位地址) + * @param txData : 发送数据缓冲区指针 + * @param len : 要发送的数据长度 + * @param timeout : 超时时间(单位ms) + * @retval HAL_StatusTypeDef HAL库状态值(HAL_OK表示成功) */ -HAL_StatusTypeDef Base_I2C_WriteCmd(uint8_t* hi2cX, uint16_t addr, uint8_t* txData, uint8_t len, uint16_t timeout = 100); +HAL_StatusTypeDef Base_I2C_WriteCmd(I2C_HandleTypeDef *hi2cx, uint16_t addr, uint8_t *txData, uint16_t len, uint16_t timeout); /** - * @brief 閫氳繃 I2C 鎺ュ彛璇诲彇鍛戒护鍝嶅簲鏁版嵁 - * @param hi2cX: 鎸囧悜 I2C 鍙ユ焺鐨勬寚閽堬紝鐢ㄤ簬鎸囧畾浣跨敤鐨 I2C 鎬荤嚎瀹炰緥 - * @param addr: 鐩爣璁惧鐨 I2C 鍦板潃(7bit)锛屾爣璇嗚涓庝箣閫氫俊鐨勪粠璁惧 - * @param rxData: 鎸囧悜鐢ㄤ簬瀛樺偍鎺ユ敹鍒版暟鎹殑缂撳啿鍖虹殑鎸囬拡锛岃鍙栧埌鐨勬暟鎹細瀛樹簬姝 - * @param len: 瑕佽鍙栨暟鎹殑闀垮害锛屽嵆鏈熸湜浠 I2C 璁惧璇诲彇鐨勫瓧鑺傛暟 - * @param timeout: 鎿嶄綔瓒呮椂鏃堕棿锛岃嫢鍦ㄨ鏃堕棿鍐呮搷浣滄湭瀹屾垚锛屽垯鎿嶄綔澶辫触;鍗曚綅ms - * @retval HAL_StatusTypeDef: 鎿嶄綔鐘舵侊紝濡 HAL_OK 琛ㄧず鎴愬姛锛屽叾浠栧艰〃绀哄け璐 + * @brief 读取 I2C 设备多个连续寄存器 + * @param hi2cx : I2C句柄指针(如 &hi2c1) + * @param DevAddr : 设备7位I2C地址(左移前) 如 0x15 + * @param RegAddr : 起始寄存器地址 如 0x01 + * @param buf : 接收数据的缓冲区 + * @param len : 要读取的字节数 + * @param timeout : 超时时间(单位ms) + * @retval HAL_OK 读取成功 + * @retval 其他值 读取失败 */ -HAL_StatusTypeDef Base_I2C_ReadCmd(uint8_t* hi2cx, uint16_t addr, uint8_t* rxData, uint8_t len, uint16_t timeout = 100); - -#ifdef __cplusplus -} +HAL_StatusTypeDef Base_I2C_ReadRegs(I2C_HandleTypeDef *hi2cx,uint16_t DevAddr, uint8_t RegAddr, uint8_t *buf, uint16_t len,uint16_t timeout); #endif -#endif /* __Base_I2C_H */ -//author: 淇℃伅23 闊╂灄鏉 \ No newline at end of file diff --git a/modules/oled/HW_OLED.c b/modules/oled/HW_OLED.c index 37ea8b3..cc7edee 100644 --- a/modules/oled/HW_OLED.c +++ b/modules/oled/HW_OLED.c @@ -1,387 +1,176 @@ -#include "oled_font.h" -#include "oled.h" -#include "Base_i2c.h" -#include "string.h" - -#define LEFT 0x27 -#define RIGHT 0x26 -#define UP 0X29 -#define DOWN 0x2A // 淇鎷煎啓 -#define ON 0xA7 -#define OFF 0xA6 - -#define OLED_Addr 0x78 - -uint16_t const displayWidth = 128; -uint16_t const displayHeight = 64; - -static uint8_t OLED_RAM[8][128]; - -// 淇褰㈠弬鍛藉悕涓哄皬椹煎嘲 +#include "main.h" +#include "i2c.h" +#include "Base_I2C.h" +#include "OLED_Font.h" +#include "HW_OLED.h" void HW_OLED_WriteByte(uint8_t regAddr, uint8_t data) { uint8_t TxData[2] = {regAddr, data}; Base_I2C_WriteCmd(&hi2c1, OLED_Addr, (uint8_t*)TxData, 2, 10); } - -// 淇褰㈠弬鍛藉悕涓哄皬椹煎嘲 -void HW_OLED_WriteCmd(uint8_t iicCommand) { - HAL_I2C_WriteByte(0x00, iicCommand); -} - -// 淇褰㈠弬鍛藉悕涓哄皬椹煎嘲 -void HW_OLED_WriteDat(uint8_t iicData) { - HAL_I2C_WriteByte(0x40, iicData); -} - -void HW_OLED_Init(void) { - HAL_Delay(500); - - HW_OLED_WriteCmd(0xAE); - HW_OLED_WriteCmd(0x20); +void OLED_WriteCommand(uint8_t iicCommand) { + HW_OLED_WriteByte(0x00, iicCommand); +} +void OLED_WriteData(uint8_t iicData) { + HW_OLED_WriteByte(0x40, iicData); +} +void OLED_SetCursor(uint8_t Y, uint8_t X) +{ + OLED_WriteCommand(0xB0 | Y); //设置Y位置 + OLED_WriteCommand(0x10 | ((X & 0xF0) >> 4)); //设置X位置高4位 + OLED_WriteCommand(0x00 | (X & 0x0F)); //设置X位置低4位 +} + +void OLED_Clear(void) +{ + uint8_t i, j; + for (j = 0; j < 8; j++) + { + OLED_SetCursor(j, 0); + for(i = 0; i < 128; i++) + { + OLED_WriteData(0x00); + } + } +} +void my_OLED_Clear(void) +{ + uint8_t i, j; + for (j = 0; j < 8; j++) + { + OLED_SetCursor(j, 0); + for(i = 0; i < 128; i++) + { + OLED_WriteData(0xff); + } + } +} + +void OLED_ShowChar(uint8_t Line, uint8_t Column, char Char) +{ + uint8_t i; + OLED_SetCursor((Line - 1) * 2, (Column - 1) * 8); //设置光标位置在上半部分 + for (i = 0; i < 8; i++) + { + OLED_WriteData(OLED_F8x16[Char - ' '][i]); //显示上半部分内容 + } + OLED_SetCursor((Line - 1) * 2 + 1, (Column - 1) * 8); //设置光标位置在下半部分 + for (i = 0; i < 8; i++) + { + OLED_WriteData(OLED_F8x16[Char - ' '][i + 8]); //显示下半部分内容 + } +} + +void OLED_ShowString(uint8_t Line, uint8_t Column, char *String) +{ + uint8_t i; + for (i = 0; String[i] != '\0'; i++) + { + OLED_ShowChar(Line, Column + i, String[i]); + } +} + +uint32_t OLED_Pow(uint32_t X, uint32_t Y) +{ + uint32_t Result = 1; + while (Y--) + { + Result *= X; + } + return Result; +} +void OLED_ShowNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length) +{ + uint8_t i; + for (i = 0; i < Length; i++) + { + OLED_ShowChar(Line, Column + i, Number / OLED_Pow(10, Length - i - 1) % 10 + '0'); + } +} + +void OLED_ShowSignedNum(uint8_t Line, uint8_t Column, int32_t Number, uint8_t Length) +{ + uint8_t i; + uint32_t Number1; + if (Number >= 0) + { + OLED_ShowChar(Line, Column, '+'); + Number1 = Number; + } + else + { + OLED_ShowChar(Line, Column, '-'); + Number1 = -Number; + } + for (i = 0; i < Length; i++) + { + OLED_ShowChar(Line, Column + i + 1, Number1 / OLED_Pow(10, Length - i - 1) % 10 + '0'); + } +} +void OLED_ShowHexNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length) +{ + uint8_t i, SingleNumber; + for (i = 0; i < Length; i++) + { + SingleNumber = Number / OLED_Pow(16, Length - i - 1) % 16; + if (SingleNumber < 10) + { + OLED_ShowChar(Line, Column + i, SingleNumber + '0'); + } + else + { + OLED_ShowChar(Line, Column + i, SingleNumber - 10 + 'A'); + } + } +} +void OLED_ShowBinNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length) +{ + uint8_t i; + for (i = 0; i < Length; i++) + { + OLED_ShowChar(Line, Column + i, Number / OLED_Pow(2, Length - i - 1) % 2 + '0'); + } +} +void OLED_Init(void) +{ + HAL_Delay(100); + OLED_WriteCommand(0xAE); //关闭显示 - HW_OLED_WriteCmd(0x10); - HW_OLED_WriteCmd(0xb0); - HW_OLED_WriteCmd(0x00); - HW_OLED_WriteCmd(0x10); - - HW_OLED_WriteCmd(0xc8); - HW_OLED_WriteCmd(0x40); - HW_OLED_WriteCmd(0x81); - HW_OLED_WriteCmd(0xff); - HW_OLED_WriteCmd(0xa1); - HW_OLED_WriteCmd(0xa6); - HW_OLED_WriteCmd(0xa8); - HW_OLED_WriteCmd(0x3F); - HW_OLED_WriteCmd(0xa4); - HW_OLED_WriteCmd(0xd3); - HW_OLED_WriteCmd(0x00); - HW_OLED_WriteCmd(0xd5); - HW_OLED_WriteCmd(0xf0); - HW_OLED_WriteCmd(0xd9); - HW_OLED_WriteCmd(0x22); - HW_OLED_WriteCmd(0xda); - HW_OLED_WriteCmd(0x12); - HW_OLED_WriteCmd(0xdb); - HW_OLED_WriteCmd(0x20); - HW_OLED_WriteCmd(0x8d); - HW_OLED_WriteCmd(0x14); - HW_OLED_WriteCmd(0xaf); - - HW_OLED_FullyClear(); -} - -void HW_OLED_On(void) { - HW_OLED_WriteCmd(0X8D); - HW_OLED_WriteCmd(0X14); - HW_OLED_WriteCmd(0XAF); -} - -void HW_OLED_Off(void) { - HW_OLED_WriteCmd(0X8D); - HW_OLED_WriteCmd(0X10); - HW_OLED_WriteCmd(0XAE); -} - -void HW_OLED_RefreshRAM(void) { - for(uint16_t m = 0; m < displayHeight/8; m++) { - HW_OLED_WriteCmd(0xb0 + m); - HW_OLED_WriteCmd(0x00); - HW_OLED_WriteCmd(0x10); - for(uint16_t n = 0; n < displayWidth; n++) { - HW_OLED_WriteDat(OLED_RAM[m][n]); - } - } -} - -// 淇璇硶锛氱洿鎺ュ垵濮嬪寲鏁扮粍锛屽幓鎺夐敊璇惊鐜 -void HW_OLED_ClearRAM(void) { - memset(OLED_RAM, 0x00, sizeof(OLED_RAM)); -} - -void HW_OLED_FullyFill(uint8_t fillData) { - for(uint16_t m = 0; m < displayHeight/8; m++) { - for(uint16_t n = 0; n < displayWidth; n++) { - OLED_RAM[m][n] = fillData; - } - } - HW_OLED_RefreshRAM(); -} - -void HW_OLED_FullyClear(void) { - HW_OLED_FullyFill(RESET_PIXEL); -} - -void HW_OLED_SetPixel(int16_t x, int16_t y, uint8_t setPixel) { - if (x >= 0 && x < displayWidth && y >= 0 && y < displayHeight) { - if (setPixel) { - OLED_RAM[y/8][x] |= (0x01 << (y%8)); - } else { - OLED_RAM[y/8][x] &= ~(0x01 << (y%8)); - } - } -} - -PixelStatus HW_OLED_GetPixel(int16_t x, int16_t y) { - if (OLED_RAM[y/8][x] >> (y%8) & 0x01) - return SET_PIXEL; - return RESET_PIXEL; -} - -// 淇褰㈠弬鍛藉悕锛歝h 鈫 str锛孴extSize 鈫 textSize -void HW_OLED_ShowStr(int16_t x, int16_t y, uint8_t str[], uint8_t textSize) { - if (x >= 0 && x < displayWidth && y >= 0 && y < displayHeight) { - int32_t c = 0; - uint8_t j = 0; - switch (textSize) { - case 1: { - while (str[j] != '\0') { - c = str[j] - 32; - if (c < 0) - break; - - if (x >= 125 || (127 - x < 6)) { - x = 0; - y += 8; - if (63 - y < 8) - break; - } - for (uint8_t m = 0; m < 6; m++) { - for (uint8_t n = 0; n < 8; n++) { - HW_OLED_SetPixel(x + m, y + n, (F6x8[c][m] >> n) & 0x01); - } - } - x += 6; - j++; - } - } break; - case 2: { - while (str[j] != '\0') { - c = str[j] - 32; - if (c < 0) - break; - - if (x >= 127 || (127 - x < 8)) { - x = 0; - y += 16; - if (63 - y < 16) - break; - } - for (uint8_t m = 0; m < 2; m++) { - for (uint8_t n = 0; n < 8; n++) { - for (uint8_t i = 0; i < 8; i++) { - HW_OLED_SetPixel(x + n, y + i + m*8, (F8X16[c][n + m*8] >> i) & 0x01); - } - } - } - x += 8; - j++; - } - } break; - } - } - HW_OLED_RefreshRAM(); -} - -void HW_OLED_ShowCN(int16_t x, int16_t y, uint8_t* str) { - if (x >= 0 && x < displayWidth && y >= 0 && y < displayHeight) { - int32_t len = 0, offset = sizeof(F16x16_CN[0].index); - - while (str[len] != '\0') { - if (x >= 127 || (127 - x < 16)) { - x = 0; - y += 16; - if (63 - y < 16) - break; - } - for (uint8_t i = 0; i < sizeof(F16x16_CN)/sizeof(GB2312_CN); i++) { - if (((F16x16_CN[i].index[0] == str[len]) && (F16x16_CN[i].index[1] == str[len+1]))) { - for (uint8_t m = 0; m < 2; m++) { - for (uint8_t n = 0; n < 16; n++) { - for (uint8_t j = 0; j < 8; j++) { - HW_OLED_SetPixel(x + n, y + j + m*8, (F16x16_CN[i].encoder[n + m*16] >> j) & 0x01); - } - } - } - x += 16; - len += offset; - break; - } - else if (F16x16_CN[i].index[0] == str[len] && str[len] == 0x20) { - for (uint8_t m = 0; m < 2; m++) { - for (uint8_t n = 0; n < 16; n++) { - for (uint8_t j = 0; j < 8; j++) { - HW_OLED_SetPixel(x + n, y + j + m*8, (F16x16_CN[i].encoder[n + m*16] >> j) & 0x01); - } - } - } - x += 16; - len++; - break; - } - } - } - } - HW_OLED_RefreshRAM(); -} - -void HW_OLED_ShowMixedCH(int16_t x, int16_t y, uint8_t* str) { - if (x >= 0 && x < displayWidth && y >= 0 && y < displayHeight) { - int32_t len = 0, c, offset = sizeof(F16x16_CN[0].index); - - while (str[len] != '\0') { - if (str[len] >= 0xa1) { - for (uint8_t i = 0; i < sizeof(F16x16_CN)/sizeof(GB2312_CN); i++) { - if (((F16x16_CN[i].index[0] == str[len]) && (F16x16_CN[i].index[1] == str[len+1]))) { - if (x >= 127 || (127 - x < 16)) { - x = 0; - y += 16; - if (63 - y < 16) - break; - } - for (uint8_t m = 0; m < 2; m++) { - for (uint8_t n = 0; n < 16; n++) { - for (uint8_t j = 0; j < 8; j++) { - HW_OLED_SetPixel(x + n, y + j + m*8, (F16x16_CN[i].encoder[n + m*16] >> j) & 0x01); - } - } - } - x += 16; - len += offset; - break; - } - } - } - else if (str[len] <= 127) { - c = str[len] - 32; - if (c < 0) - break; - if (x >= 127 || (127 - x < 8)) { - x = 0; - y += 16; - if (63 - y < 16) - break; - } - for (uint8_t m = 0; m < 2; m++) { - for (uint8_t n = 0; n < 8; n++) { - for (uint8_t i = 0; i < 8; i++) { - HW_OLED_SetPixel(x + n, y + i + m*8, (F8X16[c][n + m*8] >> i) & 0x01); - } - } - } - x += 8; - len++; - } - } - } - HW_OLED_RefreshRAM(); -} - -// 淇褰㈠弬鍛藉悕锛歀 鈫 width锛孒 鈫 height锛孊MP 鈫 bmpData -void HW_OLED_DrawBMP(int16_t x0, int16_t y0, int16_t width, int16_t height, const uint8_t bmpData[]) { - if (x0 >= 0 && x0 < displayWidth && x0 + width <= displayWidth && - y0 >= 0 && y0 < displayHeight && y0 + height <= displayHeight) { - uint8_t *p = (uint8_t *)bmpData; - for(int16_t y = y0; y < y0 + height; y +=8) { - for(int16_t x = x0; x < x0 + width; x++) { - for(int16_t i = 0; i < 8; i++) { - HW_OLED_SetPixel(x, y + i, ((*p) >> i) & 0x01); - } - p++; - } - } - } - HW_OLED_RefreshRAM(); -} - -// 淇褰㈠弬鍛藉悕锛歀 鈫 width锛孒 鈫 height -void OLED_AreaFill(int16_t x0, int16_t y0, int16_t width, int16_t height, uint8_t fillData) { - if (x0 >= 0 && x0 < displayWidth && x0 + width <= displayWidth && - y0 >= 0 && y0 < displayHeight && y0 + height <= displayHeight) { - for(int16_t y = y0; y < y0 + height; y++) { - for(int16_t x = x0; x < x0 + width; x++) { - for(int16_t i = 0; i < 8; i++) { - HW_OLED_SetPixel(x, y + i, (fillData >> i) & SET_PIXEL); - } - } - } - HW_OLED_RefreshRAM(); - } -} - -// 淇褰㈠弬鍛藉悕锛歀 鈫 width锛孒 鈫 height -void OLED_AreaClear(int16_t x0, int16_t y0, int16_t width, int16_t height) { - if (x0 >= 0 && x0 < displayWidth && x0 + width <= displayWidth && - y0 >= 0 && y0 < displayHeight && y0 + height <= displayHeight) { - for(int16_t y = y0; y < y0 + height; y +=8) { - for(int16_t x = x0; x < x0 + width; x++) { - for(int16_t i = 0; i < 8; i++) { - HW_OLED_SetPixel(x, y + i, RESET_PIXEL); - } - } - } - HW_OLED_RefreshRAM(); - } -} + OLED_WriteCommand(0xD5); //设置显示时钟分频比/振荡器频率 + OLED_WriteCommand(0x80); + + OLED_WriteCommand(0xA8); //设置多路复用率 + OLED_WriteCommand(0x3F); + + OLED_WriteCommand(0xD3); //设置显示偏移 + OLED_WriteCommand(0x00); + + OLED_WriteCommand(0x40); //设置显示开始行 + + OLED_WriteCommand(0xA1); //设置左右方向,0xA1正常 0xA0左右反置 + + OLED_WriteCommand(0xC8); //设置上下方向,0xC8正常 0xC0上下反置 -void HW_OLED_FullyToggle(void) { - for(uint16_t m = 0; m < displayHeight/8; m++) { - for(uint16_t n = 0; n < displayWidth; n++) { - OLED_RAM[m][n] = ~OLED_RAM[m][n]; - } - } - HW_OLED_RefreshRAM(); -} + OLED_WriteCommand(0xDA); //设置COM引脚硬件配置 + OLED_WriteCommand(0x12); + + OLED_WriteCommand(0x81); //设置对比度控制 + OLED_WriteCommand(0xCF); -// 淇褰㈠弬鍛藉悕锛歀 鈫 width锛孒 鈫 height -void HW_OLED_AreaToggle(int16_t x0, int16_t y0, int16_t width, int16_t height) { - if (x0 >= 0 && x0 < displayWidth && x0 + width <= displayWidth && - y0 >= 0 && y0 < displayHeight && y0 + height <= displayHeight) { - for(int16_t y = y0; y < y0 + height; y +=8) { - for(int16_t x = x0; x < x0 + width; x++) { - for(int16_t i = 0; i < 8; i++) { - HW_OLED_SetPixel(x, y + i, !HW_OLED_GetPixel(x, y + i)); - } - } - } - HW_OLED_RefreshRAM(); - } -} + OLED_WriteCommand(0xD9); //设置预充电周期 + OLED_WriteCommand(0xF1); -void HW_OLED_VerticalShift(void) { - for(uint8_t i = 0; i < displayHeight; i++) { - HW_OLED_WriteCmd(0xd3); - HW_OLED_WriteCmd(i); - HAL_Delay(40); - } -} + OLED_WriteCommand(0xDB); //设置VCOMH取消选择级别 + OLED_WriteCommand(0x30); -void HW_OLED_HorizontalShift(uint8_t direction) { - HW_OLED_WriteCmd(direction); - HW_OLED_WriteCmd(0x00); - HW_OLED_WriteCmd(0x00); - HW_OLED_WriteCmd(0x05); - HW_OLED_WriteCmd(0x07); - HW_OLED_WriteCmd(0x00); - HW_OLED_WriteCmd(0xff); - HW_OLED_WriteCmd(0x2f); -} + OLED_WriteCommand(0xA4); //设置整个显示打开/关闭 -void HW_OLED_VerticalAndHorizontalShift(uint8_t direction) { - HW_OLED_WriteCmd(direction); - HW_OLED_WriteCmd(0x00); - HW_OLED_WriteCmd(0x00); - HW_OLED_WriteCmd(0x05); - HW_OLED_WriteCmd(0x07); - HW_OLED_WriteCmd(0x01); - HW_OLED_WriteCmd(0x2f); -} + OLED_WriteCommand(0xA6); //设置正常/倒转显示 -void HW_OLED_DisplayMode(uint8_t mode) { - HW_OLED_WriteCmd(mode); -} + OLED_WriteCommand(0x8D); //设置充电泵 + OLED_WriteCommand(0x14); -void HW_OLED_IntensityControl(uint8_t intensity) { - HW_OLED_WriteCmd(0x81); - HW_OLED_WriteCmd(intensity); + OLED_WriteCommand(0xAF); //开启显示 + + OLED_Clear(); //OLED清屏 } diff --git a/modules/oled/HW_OLED.h b/modules/oled/HW_OLED.h index 57ac6b3..2adff44 100644 --- a/modules/oled/HW_OLED.h +++ b/modules/oled/HW_OLED.h @@ -1,220 +1,125 @@ -#ifndef OLED_H__ -#define OLED_H__ +#ifndef __HW_OLED_H +#define __HW_OLED_H -#include "stm32f1xx_hal.h" // 鍖呭惈HAL搴 +#include "main.h" +#include "i2c.h" -/* BMP鍥剧墖璇存槑 - 鍥剧墖鏍煎紡涓轰綅鏄犲皠锛岀储寮曞垎鍒搴斿浘鐗囩殑瀹藉拰楂橈紝 - BMP_xx[H/8][L]; -*/ -extern const uint8_t BMP_Picture[64/8][64]; +/************************* + * 功能:OLED I2C 驱动头文件 + * 依赖:STM32 HAL库 I2C + * 说明:提供OLED初始化、清屏、显示字符串等基础接口 + *************************/ -/* 鍍忕礌鐘舵佹灇涓 */ -typedef enum -{ - SET_PIXEL = 0x01, - RESET_PIXEL = 0x00, -} PixelStatus; +/*==================== OLED 控制命令宏定义 ====================*/ +#define LEFT 0x27 // 左移命令 +#define RIGHT 0x26 // 右移命令 +#define UP 0x29 // 上移命令 +#define DOWN 0x2A // 下移命令 +#define ON 0xA7 // 显示开启/点亮命令 +#define OFF 0xA6 // 显示关闭/熄灭命令 -/** - * @brief 閫氳繃I2C鍐欏叆涓涓瓧鑺傛暟鎹 - * @param regAddr: 瑕佸啓鍏ユ暟鎹殑鍦板潃锛屽彇鍊艰寖鍥翠负0x00 - 0xFF - * @param data: 瑕佸啓鍏ョ殑瀛楄妭鏁版嵁锛屽彇鍊艰寖鍥翠负0x00 - 0xFF - * @retval 鏃 - */ -void HW_OLED_WriteByte(uint8_t regAddr, uint8_t data); - -/** - * @brief 鍐欏懡浠 - * @param iicCommand: 瑕佸啓鍏ョ殑IIC鍛戒护锛屽彇鍊艰寖鍥翠负0x00 - 0xFF - * @retval 鏃 - */ -void HW_OLED_WriteCmd(uint8_t iicCommand); - -/** - * @brief 鍐欐暟鎹 - * @param iicData: 瑕佸啓鍏ョ殑IIC鏁版嵁锛屽彇鍊艰寖鍥翠负0x00 - 0xFF - * @retval 鏃 - */ -void HW_OLED_WriteDat(uint8_t iicData); - -/** - * @brief 鍒濆鍖朞LED妯″潡 - * @param 鏃 - * @retval 鏃 - */ -void HW_OLED_Init(void); - -/** - * @brief 鎵撳紑OLED鏄剧ず - * @param 鏃 - * @retval 鏃 - */ -void HW_OLED_On(void); - -/** - * @brief 鍏抽棴OLED鏄剧ず -- 鐫$湢妯″紡涓嬶紝OLED鍔熻楀皬浜10uA - * @param 鏃 - * @retval 鏃 - */ -void HW_OLED_Off(void); +#define OLED_Addr 0x78 // OLED I2C 设备地址 -/** - * @brief 鍏ㄩ噺鍒锋柊 - * @param 鏃 - * @retval 鏃 - */ -void HW_OLED_RefreshRAM(void); - -/** - * @brief 娓呯┖鏁版嵁缂撳瓨 - * @param 鏃 - * @retval 鏃 - */ -void HW_OLED_ClearRAM(void); - -/** - * @brief 鍏ㄥ睆濉厖 0x00~0xff - * @param fillData: 濉厖鏁版嵁锛1瀛楄妭锛夛紝鍙栧艰寖鍥翠负0x00 - 0xFF - * @retval 鏃 - */ -void HW_OLED_FullyFill(uint8_t fillData); - -/** - * @brief 鍏ㄥ睆娓呯┖ - * @param 鏃 - * @retval 鏃 - */ -void HW_OLED_FullyClear(void); - -/** - * @brief 璁剧疆鎸囧畾鍍忕礌鐐圭殑鐘舵 - * @param x: 璧峰妯潗鏍囷紝鍙栧艰寖鍥翠负0 - 127 - * @param y: 璧峰绾靛潗鏍囷紝鍙栧艰寖鍥翠负0 - 63 - * @param setPixel: 璁剧疆鍍忕礌鐘舵侊紝鍙栧间负SET_PIXEL锛堢偣浜儚绱狅級鎴朢ESET_PIXEL锛堢唲鐏儚绱狅級 - * @retval 鏃 - */ -void HW_OLED_SetPixel(int16_t x, int16_t y, uint8_t setPixel); +/*==================== OLED 屏幕参数 ====================*/ +#define displayWidth 128 // OLED宽度:128 +#define displayHeight 64 // OLED高度:64 +/*==================== 底层I2C写函数 ====================*/ /** - * @brief 鑾峰彇鎸囧畾鍍忕礌鐐圭殑鐘舵 - * @param x: 璧峰妯潗鏍囷紝鍙栧艰寖鍥翠负0 - 127 - * @param y: 璧峰绾靛潗鏍囷紝鍙栧艰寖鍥翠负0 - 63 - * @retval PixelStatus: 杩斿洖鍍忕礌鐨勭姸鎬侊紝SET_PIXEL锛堝儚绱犵偣浜級鎴朢ESET_PIXEL锛堝儚绱犵唲鐏級 + * @brief OLED通过I2C写入一个字节(命令/数据) + * @param regAddr: 控制字节 0x00=命令 0x40=数据 + * @param data: 要写入的命令或数据 + * @retval 无 */ -PixelStatus HW_OLED_GetPixel(int16_t x, int16_t y); - -/** - * @brief 鏄剧ずcodetab.h涓殑ASCII瀛楃锛屾湁6*8鍜8*16鍙 - * @param x: 璧峰妯潗鏍囷紝鍙栧艰寖鍥翠负0 - 127 - * @param y: 璧峰绾靛潗鏍囷紝鍙栧艰寖鍥翠负0 - 63 - * @param str[]: 瑕佹樉绀虹殑瀛楃涓 - * @param textSize: 瀛椾綋澶у皬锛屽彇鍊间负1锛6*8瀛椾綋锛夋垨2锛8*16瀛椾綋锛 - * @retval 鏃 - */ -void HW_OLED_ShowStr(int16_t x, int16_t y, uint8_t str[], uint8_t textSize); +void HW_OLED_WriteByte(uint8_t regAddr, uint8_t data); /** - * @brief 鏄剧ずcodetab.h涓殑姹夊瓧锛16*16鐐归樀 - * @param x: 璧峰妯潗鏍囷紝鍙栧艰寖鍥翠负0 - 127 - * @param y: 璧峰绾靛潗鏍囷紝鍙栧艰寖鍥翠负0 - 7 - * @param str: 瀵瑰簲codetab.h涓殑姹夊瓧 - * @retval 鏃 + * @brief 向OLED写入命令 + * @param iicCommand: 命令值 + * @retval 无 */ -void HW_OLED_ShowCN(int16_t x, int16_t y, uint8_t* str); +void OLED_WriteCommand(uint8_t iicCommand); /** - * @brief 鏄剧ずcodetab.h涓殑姹夊瓧锛16*16鐐归樀锛岃嫳鏂囷紝8*16鐐归樀 - * @param x: 璧峰妯潗鏍囷紝鍙栧艰寖鍥翠负0 - 127 - * @param y: 璧峰绾靛潗鏍囷紝鍙栧艰寖鍥翠负0 - 7 - * @param str: 瀵瑰簲codetab.h涓殑姹夊瓧鍜岃嫳鏂 - * @retval 鏃 + * @brief 向OLED写入数据 + * @param iicData: 显示数据 + * @retval 无 */ -void HW_OLED_ShowMixedCH(int16_t x, int16_t y, uint8_t* str); +void OLED_WriteData(uint8_t iicData); /** - * @brief 鍥剧墖鏄剧ず鍑芥暟锛屾樉绀築MP浣嶅浘锛屾牸寮忎娇鐢ㄤ簩缁存暟缁勫瓨鍌 - * @param x0: 璧峰妯潗鏍囷紝鍙栧艰寖鍥翠负0 - 127 - * @param y0: 璧峰绾靛潗鏍囷紝鍙栧艰寖鍥翠负0 - 63 - * @param width: 鍥剧墖闀垮害锛屽彇鍊奸渶淇濊瘉鍥剧墖涓嶄細瓒呭嚭灞忓箷鑼冨洿 - * @param height: 鍥剧墖楂樺害锛屽彇鍊奸渶淇濊瘉鍥剧墖涓嶄細瓒呭嚭灞忓箷鑼冨洿 - * @param bmpData: 浣嶅浘鏁版嵁 - * @retval 鏃 + * @brief 设置OLED光标位置 + * @param Y: 页地址 0~7 + * @param X: 列地址 0~127 + * @retval 无 */ -void HW_OLED_DrawBMP(int16_t x0, int16_t y0, int16_t width, int16_t height, const uint8_t bmpData[]); +void OLED_SetCursor(uint8_t Y, uint8_t X); +/*==================== 屏幕操作函数 ====================*/ /** - * @brief 鍖哄煙濉厖 - * @param x0: 璧峰妯潗鏍囷紝鍙栧艰寖鍥翠负0 - 127 - * @param y0: 璧峰绾靛潗鏍囷紝鍙栧艰寖鍥翠负0 - 63 - * @param width: 濉厖鍖哄煙闀垮害锛屽彇鍊奸渶淇濊瘉鍖哄煙涓嶄細瓒呭嚭灞忓箷鑼冨洿 - * @param height: 濉厖鍖哄煙楂樺害锛屽彇鍊奸渶淇濊瘉鍖哄煙涓嶄細瓒呭嚭灞忓箷鑼冨洿 - * @param fillData: 濉厖鏁版嵁锛屽彇鍊艰寖鍥翠负0x00 - 0xFF - * @retval 鏃 + * @brief OLED初始化(上电必须调用) + * @param 无 + * @retval 无 */ -void HW_OLED_AreaFill(int16_t x0, int16_t y0, int16_t width, int16_t height, uint8_t fillData); +void OLED_Init(void); /** - * @brief 鍖哄煙娓呯┖ - * @param x0: 璧峰妯潗鏍囷紝鍙栧艰寖鍥翠负0 - 127 - * @param y0: 璧峰绾靛潗鏍囷紝鍙栧艰寖鍥翠负0 - 63 - * @param width: 娓呯┖鍖哄煙闀垮害锛屽彇鍊奸渶淇濊瘉鍖哄煙涓嶄細瓒呭嚭灞忓箷鑼冨洿 - * @param height: 娓呯┖鍖哄煙楂樺害锛屽彇鍊奸渶淇濊瘉鍖哄煙涓嶄細瓒呭嚭灞忓箷鑼冨洿 - * @retval 鏃 + * @brief OLED清屏(全黑) + * @param 无 + * @retval 无 */ -void HW_OLED_AreaClear(int16_t x0, int16_t y0, int16_t width, int16_t height); +void OLED_Clear(void); /** - * @brief 鍏ㄥ睆鍙嶈壊鏄剧ず - * @param 鏃 - * @retval 鏃 + * @brief OLED满屏点亮(全白) + * @param 无 + * @retval 无 */ -void HW_OLED_FullyToggle(void); +void my_OLED_Clear(void); +/*==================== 显示函数 ====================*/ /** - * @brief 鍖哄煙鍙嶈壊鏄剧ず - * @param x0: 璧峰妯潗鏍囷紝鍙栧艰寖鍥翠负0 - 127 - * @param y0: 璧峰绾靛潗鏍囷紝鍙栧艰寖鍥翠负0 - 63 - * @param width: 鍙嶈壊鍖哄煙闀垮害锛屽彇鍊奸渶淇濊瘉鍖哄煙涓嶄細瓒呭嚭灞忓箷鑼冨洿 - * @param height: 鍙嶈壊鍖哄煙楂樺害锛屽彇鍊奸渶淇濊瘉鍖哄煙涓嶄細瓒呭嚭灞忓箷鑼冨洿 - * @retval 鏃 + * @brief OLED显示单个字符(8x16字体) + * @param Line: 行 1~4 + * @param Column: 列 1~16 + * @param Char: 要显示的字符 + * @retval 无 */ -void HW_OLED_AreaToggle(int16_t x0, int16_t y0, int16_t width, int16_t height); +void OLED_ShowChar(uint8_t Line, uint8_t Column, char Char); /** - * @brief 鍏ㄥ睆鍨傜洿婊氬姩鏄剧ず - * @param 鏃 - * @retval 鏃 + * @brief OLED显示字符串 + * @param Line: 起始行 1~4 + * @param Column: 起始列 1~16 + * @param String: 字符串指针 + * @retval 无 */ -void HW_OLED_VerticalShift(void); +void OLED_ShowString(uint8_t Line, uint8_t Column, char *String); /** - * @brief 鍏ㄥ睆姘村钩婊氬姩鏄剧ず - * @param direction: 婊氬姩鏂瑰悜锛屽叿浣撳彇鍊煎惈涔夐渶鏍规嵁瀹為檯瀹炵幇纭畾 - * @retval 鏃 + * @brief OLED显示无符号十进制数字 + * @param Line: 行 + * @param Column: 列 + * @param Number: 数字 0~4294967295 + * @param Length: 显示位数 + * @retval 无 */ -void HW_OLED_HorizontalShift(uint8_t direction); +void OLED_ShowNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length); /** - * @brief 鍏ㄥ睆鍚屾椂鍨傜洿鍜屾按骞虫粴鍔ㄦ樉绀 - * @param direction: 婊氬姩鏂瑰悜锛屽叿浣撳彇鍊煎惈涔夐渶鏍规嵁瀹為檯瀹炵幇纭畾 - * @retval 鏃 + * @brief OLED显示有符号十进制数字 */ -void HW_OLED_VerticalAndHorizontalShift(uint8_t direction); +void OLED_ShowSignedNum(uint8_t Line, uint8_t Column, int32_t Number, uint8_t Length); /** - * @brief 灞忓箷鏄剧ず妯″紡閫夋嫨 - * @param mode: 鏄剧ず妯″紡锛屽叿浣撳彇鍊煎惈涔夐渶鏍规嵁瀹為檯瀹炵幇纭畾 - * @retval 鏃 + * @brief OLED显示十六进制数字 */ -void HW_OLED_DisplayMode(uint8_t mode); +void OLED_ShowHexNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length); /** - * @brief 灞忓箷浜害鎺у埗 - * @param intensity: 浜害鍊硷紝鍙栧艰寖鍥撮渶鏍规嵁瀹為檯纭欢纭畾 - * @retval 鏃 + * @brief OLED显示二进制数字 */ -void HW_OLED_IntensityControl(uint8_t intensity); +void OLED_ShowBinNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length); #endif diff --git a/modules/oled/HW_OLED_Font.h b/modules/oled/HW_OLED_Font.h deleted file mode 100644 index ee300e1..0000000 --- a/modules/oled/HW_OLED_Font.h +++ /dev/null @@ -1,262 +0,0 @@ -#ifndef OLED_FONT_H__ -#define OLED_FONT_H__ -#ifdef __cplusplus - extern "C" { -#endif - -#include "stm32f1xx_hal.h" - -const uint8_t F6x8[][6] = -{ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// sp - 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,// ! - 0x00, 0x00, 0x07, 0x00, 0x07, 0x00,// " - 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14,// # - 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12,// $ - 0x00, 0x62, 0x64, 0x08, 0x13, 0x23,// % - 0x00, 0x36, 0x49, 0x55, 0x22, 0x50,// & - 0x00, 0x00, 0x05, 0x03, 0x00, 0x00,// ' - 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00,// ( - 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00,// ) - 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14,// * - 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08,// + - 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00,// , - 0x00, 0x08, 0x08, 0x08, 0x08, 0x08,// - - 0x00, 0x00, 0x60, 0x60, 0x00, 0x00,// . - 0x00, 0x20, 0x10, 0x08, 0x04, 0x02,// / - 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E,// 0 - 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00,// 1 - 0x00, 0x42, 0x61, 0x51, 0x49, 0x46,// 2 - 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31,// 3 - 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10,// 4 - 0x00, 0x27, 0x45, 0x45, 0x45, 0x39,// 5 - 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6 - 0x00, 0x01, 0x71, 0x09, 0x05, 0x03,// 7 - 0x00, 0x36, 0x49, 0x49, 0x49, 0x36,// 8 - 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E,// 9 - 0x00, 0x00, 0x36, 0x36, 0x00, 0x00,// : - 0x00, 0x00, 0x56, 0x36, 0x00, 0x00,// ; - 0x00, 0x08, 0x14, 0x22, 0x41, 0x00,// < - 0x00, 0x14, 0x14, 0x14, 0x14, 0x14,// = - 0x00, 0x00, 0x41, 0x22, 0x14, 0x08,// > - 0x00, 0x02, 0x01, 0x51, 0x09, 0x06,// ? - 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E,// @ - 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C,// A - 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,// B - 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,// C - 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,// D - 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,// E - 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,// F - 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,// G - 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,// H - 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,// I - 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01,// J - 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,// K - 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,// L - 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F,// M - 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F,// N - 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,// O - 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,// P - 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q - 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46,// R - 0x00, 0x46, 0x49, 0x49, 0x49, 0x31,// S - 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,// T - 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,// U - 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,// V - 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F,// W - 0x00, 0x63, 0x14, 0x08, 0x14, 0x63,// X - 0x00, 0x07, 0x08, 0x70, 0x08, 0x07,// Y - 0x00, 0x61, 0x51, 0x49, 0x45, 0x43,// Z - 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00,// [ - 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55,// 55 - 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00,// ] - 0x00, 0x04, 0x02, 0x01, 0x02, 0x04,// ^ - 0x00, 0x40, 0x40, 0x40, 0x40, 0x40,// _ - 0x00, 0x00, 0x01, 0x02, 0x04, 0x00,// ' - 0x00, 0x20, 0x54, 0x54, 0x54, 0x78,// a - 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38,// b - 0x00, 0x38, 0x44, 0x44, 0x44, 0x20,// c - 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F,// d - 0x00, 0x38, 0x54, 0x54, 0x54, 0x18,// e - 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02,// f - 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,// g - 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78,// h - 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00,// i - 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,// j - 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,// k - 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00,// l - 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,// m - 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78,// n - 0x00, 0x38, 0x44, 0x44, 0x44, 0x38,// o - 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18,// p - 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC,// q - 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08,// r - 0x00, 0x48, 0x54, 0x54, 0x54, 0x20,// s - 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20,// t - 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C,// u - 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,// v - 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C,// w - 0x00, 0x44, 0x28, 0x10, 0x28, 0x44,// x - 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C,// y - 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44,// z - 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,// horiz lines -}; -/****************************************8*16鐨勭偣闃************************************/ -const uint8_t F8X16[][16]= -{ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0 - 0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 1 - 0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2 - 0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 3 - 0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 4 - 0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//% 5 - 0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//& 6 - 0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7 - 0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//( 8 - 0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//) 9 - 0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//* 10 - 0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+ 11 - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//, 12 - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//- 13 - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//. 14 - 0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/// 15 - 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 16 - 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 17 - 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 18 - 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 19 - 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 20 - 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 21 - 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 22 - 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 23 - 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 24 - 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 25 - 0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//: 26 - 0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//; 27 - 0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//< 28 - 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//= 29 - 0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//> 30 - 0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//? 31 - 0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@ 32 - 0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33 - 0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34 - 0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35 - 0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36 - 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37 - 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38 - 0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39 - 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40 - 0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41 - 0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42 - 0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43 - 0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44 - 0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45 - 0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46 - 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47 - 0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48 - 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49 - 0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50 - 0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51 - 0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52 - 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53 - 0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54 - 0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55 - 0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56 - 0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57 - 0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58 - 0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[ 59 - 0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\ 60 - 0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//] 61 - 0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62 - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_ 63 - 0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64 - 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a 65 - 0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 66 - 0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 67 - 0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 68 - 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 69 - 0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 70 - 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 71 - 0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 72 - 0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 73 - 0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 74 - 0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 75 - 0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 76 - 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 77 - 0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 78 - 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 79 - 0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 80 - 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 81 - 0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 82 - 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 83 - 0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 84 - 0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 85 - 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 86 - 0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 87 - 0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 88 - 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 89 - 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 90 - 0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{ 91 - 0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//| 92 - 0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//} 93 - 0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94 -}; - -typedef struct { - char index[2]; - uint8_t encoder[32]; -}GB2312_CN; - -const GB2312_CN F16x16_CN[] = { - {"娓", - 0x10,0x60,0x02,0x8C,0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,0x04,0x04,0x7E,0x01,0x40,0x7E,0x42,0x42,0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00,/*"娓"*/ - }, - {"搴", - 0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00,0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00,/*"搴"*/ - } -}; - -const uint8_t BMP_Picture[64/8][64] = { -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80, -0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x30,0x1E, -0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x3C,0x40,0x60,0x20,0x20,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x60,0xC0,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x30,0x10,0x10,0x08,0x04,0x04,0x02,0xFD,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x10,0x10,0x0C,0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE, -0x00,0x30,0x10,0x10,0x10,0x10,0x10,0x08,0x08,0x04,0x07,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFB,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x30,0x00,0x00,0x00,0x00,0x03, -0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x50,0x80,0x00,0x00,0x80, -0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x70,0xF0,0x0F, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -}; - - - -#ifdef __cplusplus -} -#endif -#endif - - - - diff --git a/modules/oled/OLED_Font.h b/modules/oled/OLED_Font.h new file mode 100644 index 0000000..6cd34bf --- /dev/null +++ b/modules/oled/OLED_Font.h @@ -0,0 +1,202 @@ +#ifndef __OLED_FONT_H +#define __OLED_FONT_H +#include "main.h" +/*OLED瀛楁ā搴擄紝瀹8鍍忕礌锛岄珮16鍍忕礌*/ +const uint8_t OLED_F8x16[][16]= +{ + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},// 0 + + {0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00},//! 1 + + {0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//" 2 + + {0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00},//# 3 + + {0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00},//$ 4 + + {0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00},//% 5 + + {0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10},//& 6 + + {0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//' 7 + + {0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00},//( 8 + + {0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00},//) 9 + + {0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00},//* 10 + + {0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00},//+ 11 + + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00},//, 12 + + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01},//- 13 + + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00},//. 14 + + {0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00},/// 15 + + {0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00},//0 16 + + {0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},//1 17 + + {0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00},//2 18 + + {0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00},//3 19 + + {0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00},//4 20 + + {0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00},//5 21 + + {0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00},//6 22 + + {0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00},//7 23 + + {0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00},//8 24 + + {0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00},//9 25 + + {0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00},//: 26 + + {0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00},//; 27 + + {0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00},//< 28 + + {0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00},//= 29 + + {0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00},//> 30 + + {0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00},//? 31 + + {0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00},//@ 32 + + {0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20},//A 33 + + {0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00},//B 34 + + {0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00},//C 35 + + {0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00},//D 36 + + {0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00},//E 37 + + {0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00},//F 38 + + {0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00},//G 39 + + {0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20},//H 40 + + {0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},//I 41 + + {0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00},//J 42 + + {0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00},//K 43 + + {0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00},//L 44 + + {0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00},//M 45 + + {0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00},//N 46 + + {0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00},//O 47 + + {0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00},//P 48 + + {0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00},//Q 49 + + {0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20},//R 50 + + {0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00},//S 51 + + {0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00},//T 52 + + {0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00},//U 53 + + {0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00},//V 54 + + {0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00},//W 55 + + {0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20},//X 56 + + {0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00},//Y 57 + + {0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00},//Z 58 + + {0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00},//[ 59 + + {0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00},//\ 60 + + {0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00},//] 61 + + {0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//^ 62 + + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80},//_ 63 + + {0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//` 64 + + {0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20},//a 65 + + {0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00},//b 66 + + {0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00},//c 67 + + {0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20},//d 68 + + {0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00},//e 69 + + {0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},//f 70 + + {0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00},//g 71 + + {0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20},//h 72 + + {0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},//i 73 + + {0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00},//j 74 + + {0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00},//k 75 + + {0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},//l 76 + + {0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F},//m 77 + + {0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20},//n 78 + + {0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00},//o 79 + + {0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00},//p 80 + + {0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80},//q 81 + + {0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00},//r 82 + + {0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00},//s 83 + + {0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00},//t 84 + + {0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20},//u 85 + + {0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00},//v 86 + + {0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00},//w 87 + + {0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00},//x 88 + + {0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00},//y 89 + + {0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00},//z 90 + + {0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40},//{ 91 + + {0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00},//| 92 + + {0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00},//} 93 + +// 0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04, +// 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94 + {0x00,0x00,0xF0,0xFC,0xFC,0xF0,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0}, +// 0x00,0x00,0xF0,0xFF,0xFF,0xF0,0x00,0x00, +// 0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,/*"鏈懡鍚嶆枃浠",0*/ +}; + +#endif -- Gitee From 1c83408f52bb04aadeeadb2ab881fd8d7d472920 Mon Sep 17 00:00:00 2001 From: ZengHongKun <431250696@qq.com> Date: Sat, 30 May 2026 10:52:00 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=A7=84=E8=8C=831.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/i2c/Base_I2C.c | 18 +- common/i2c/Base_I2C.h | 47 ++-- modules/oled/.keep | 0 modules/oled/HW_OLED.c | 219 ++++++------------ modules/oled/HW_OLED.h | 134 +++-------- .../{OLED_Font.h => OLED_FONT_8X16_ENGLISH.h} | 17 +- modules/oled/OLED_FONT_MANAGE.h | 23 ++ 7 files changed, 169 insertions(+), 289 deletions(-) delete mode 100644 modules/oled/.keep rename modules/oled/{OLED_Font.h => OLED_FONT_8X16_ENGLISH.h} (95%) create mode 100644 modules/oled/OLED_FONT_MANAGE.h diff --git a/common/i2c/Base_I2C.c b/common/i2c/Base_I2C.c index c140748..18d2da9 100644 --- a/common/i2c/Base_I2C.c +++ b/common/i2c/Base_I2C.c @@ -1,11 +1,15 @@ #include "Base_I2C.h" -HAL_StatusTypeDef Base_I2C_WriteCmd(I2C_HandleTypeDef *hi2cx, uint16_t addr, uint8_t *txData, uint16_t len, uint16_t timeout) + +HAL_StatusTypeDef BASE_I2C_Write_Cmd(I2C_HandleTypeDef *hi2cX, uint16_t devAddr, + uint8_t *txData, uint16_t dataLen, uint16_t timeoutMs) { - // 调用HAL库I2C主机发送函数,直接透传参数 - return HAL_I2C_Master_Transmit(hi2cx, addr, txData, len, timeout); + return HAL_I2C_Master_Transmit(hi2cX, devAddr, txData, dataLen, timeoutMs); } -HAL_StatusTypeDef Base_I2C_ReadRegs(I2C_HandleTypeDef *hi2cx,uint16_t DevAddr, uint8_t RegAddr, uint8_t *buf, uint16_t len,uint16_t timeout) + +HAL_StatusTypeDef BASE_I2C_Read_Regs(I2C_HandleTypeDef *hi2cX, uint16_t devAddr, + uint8_t regAddr, uint8_t *outBuffer, + uint16_t bufferLen, uint16_t timeoutMs) { - // 调用HAL库存储器读函数,使用8位寄存器地址模式读取数据 - return HAL_I2C_Mem_Read(hi2cx,DevAddr,RegAddr,I2C_MEMADD_SIZE_8BIT,buf,len,timeout); -} + return HAL_I2C_Mem_Read(hi2cX, devAddr, regAddr, I2C_MEMADD_SIZE_8BIT, + outBuffer, bufferLen, timeoutMs); +} \ No newline at end of file diff --git a/common/i2c/Base_I2C.h b/common/i2c/Base_I2C.h index a358f61..5a896db 100644 --- a/common/i2c/Base_I2C.h +++ b/common/i2c/Base_I2C.h @@ -1,29 +1,32 @@ -#ifndef __BASE_I2C_H -#define __BASE_I2C_H -#include "main.h" +#ifndef BASE_I2C_H +#define BASE_I2C_H + #include "i2c.h" + /** - * @brief I2C 主机发送指令(纯数据发送,无寄存器地址) - * @param hi2cx : I2C句柄指针(如 &hi2c1) - * @param addr : I2C设备地址(左移前的7位地址) - * @param txData : 发送数据缓冲区指针 - * @param len : 要发送的数据长度 - * @param timeout : 超时时间(单位ms) - * @retval HAL_StatusTypeDef HAL库状态值(HAL_OK表示成功) + * @brief I2C涓绘満鍙戦佹寚浠(绾暟鎹彂閫,鏃犲瘎瀛樺櫒鍦板潃) + * @param hi2cX : I2C鍙ユ焺鎸囬拡(濡 &hi2c1) + * @param devAddr : I2C璁惧鍦板潃(宸︾Щ鍓嶇殑7浣嶅湴鍧) + * @param txData : 鍙戦佹暟鎹紦鍐插尯鎸囬拡 + * @param dataLen : 瑕佸彂閫佺殑鏁版嵁闀垮害 + * @param timeoutMs : 瓒呮椂鏃堕棿(鍗曚綅ms) + * @retval HAL_StatusTypeDef HAL搴撶姸鎬佸(HAL_OK琛ㄧず鎴愬姛) */ -HAL_StatusTypeDef Base_I2C_WriteCmd(I2C_HandleTypeDef *hi2cx, uint16_t addr, uint8_t *txData, uint16_t len, uint16_t timeout); +HAL_StatusTypeDef BASE_I2C_Write_Cmd(I2C_HandleTypeDef *hi2cX, uint16_t devAddr, + uint8_t *txData, uint16_t dataLen, uint16_t timeoutMs); /** - * @brief 读取 I2C 设备多个连续寄存器 - * @param hi2cx : I2C句柄指针(如 &hi2c1) - * @param DevAddr : 设备7位I2C地址(左移前) 如 0x15 - * @param RegAddr : 起始寄存器地址 如 0x01 - * @param buf : 接收数据的缓冲区 - * @param len : 要读取的字节数 - * @param timeout : 超时时间(单位ms) - * @retval HAL_OK 读取成功 - * @retval 其他值 读取失败 + * @brief 璇诲彇I2C璁惧澶氫釜杩炵画瀵勫瓨鍣 + * @param hi2cX : I2C鍙ユ焺鎸囬拡(濡 &hi2c1) + * @param devAddr : 璁惧7浣岻2C鍦板潃(宸︾Щ鍓) + * @param regAddr : 璧峰瀵勫瓨鍣ㄥ湴鍧 + * @param outBuffer : 鎺ユ敹鏁版嵁鐨勭紦鍐插尯 + * @param bufferLen : 瑕佽鍙栫殑瀛楄妭鏁 + * @param timeoutMs : 瓒呮椂鏃堕棿(鍗曚綅ms) + * @retval HAL_OK 璇诲彇鎴愬姛, 鍏朵粬鍊艰鍙栧け璐 */ -HAL_StatusTypeDef Base_I2C_ReadRegs(I2C_HandleTypeDef *hi2cx,uint16_t DevAddr, uint8_t RegAddr, uint8_t *buf, uint16_t len,uint16_t timeout); -#endif +HAL_StatusTypeDef BASE_I2C_Read_Regs(I2C_HandleTypeDef *hi2cX, uint16_t devAddr, + uint8_t regAddr, uint8_t *outBuffer, + uint16_t bufferLen, uint16_t timeoutMs); +#endif diff --git a/modules/oled/.keep b/modules/oled/.keep deleted file mode 100644 index e69de29..0000000 diff --git a/modules/oled/HW_OLED.c b/modules/oled/HW_OLED.c index cc7edee..ff13474 100644 --- a/modules/oled/HW_OLED.c +++ b/modules/oled/HW_OLED.c @@ -1,176 +1,87 @@ -#include "main.h" -#include "i2c.h" -#include "Base_I2C.h" -#include "OLED_Font.h" -#include "HW_OLED.h" -void HW_OLED_WriteByte(uint8_t regAddr, uint8_t data) { - uint8_t TxData[2] = {regAddr, data}; - Base_I2C_WriteCmd(&hi2c1, OLED_Addr, (uint8_t*)TxData, 2, 10); -} -void OLED_WriteCommand(uint8_t iicCommand) { - HW_OLED_WriteByte(0x00, iicCommand); -} -void OLED_WriteData(uint8_t iicData) { - HW_OLED_WriteByte(0x40, iicData); -} -void OLED_SetCursor(uint8_t Y, uint8_t X) -{ - OLED_WriteCommand(0xB0 | Y); //设置Y位置 - OLED_WriteCommand(0x10 | ((X & 0xF0) >> 4)); //设置X位置高4位 - OLED_WriteCommand(0x00 | (X & 0x0F)); //设置X位置低4位 -} +#include "hw_oled.h" -void OLED_Clear(void) -{ - uint8_t i, j; - for (j = 0; j < 8; j++) - { - OLED_SetCursor(j, 0); - for(i = 0; i < 128; i++) - { - OLED_WriteData(0x00); - } - } -} -void my_OLED_Clear(void) -{ - uint8_t i, j; - for (j = 0; j < 8; j++) - { - OLED_SetCursor(j, 0); - for(i = 0; i < 128; i++) - { - OLED_WriteData(0xff); - } - } -} +static I2C_HandleTypeDef *gI2cHandle; // 鍏ㄥ眬I2C鍙ユ焺鎸囬拡 -void OLED_ShowChar(uint8_t Line, uint8_t Column, char Char) -{ - uint8_t i; - OLED_SetCursor((Line - 1) * 2, (Column - 1) * 8); //设置光标位置在上半部分 - for (i = 0; i < 8; i++) - { - OLED_WriteData(OLED_F8x16[Char - ' '][i]); //显示上半部分内容 - } - OLED_SetCursor((Line - 1) * 2 + 1, (Column - 1) * 8); //设置光标位置在下半部分 - for (i = 0; i < 8; i++) - { - OLED_WriteData(OLED_F8x16[Char - ' '][i + 8]); //显示下半部分内容 - } -} - -void OLED_ShowString(uint8_t Line, uint8_t Column, char *String) +// 绉佹湁杈呭姪鍑芥暟 -------------------------------------------------------------- +static void OLED_Write_Byte(uint8_t regCtrl, uint8_t byteVal) { - uint8_t i; - for (i = 0; String[i] != '\0'; i++) - { - OLED_ShowChar(Line, Column + i, String[i]); - } + uint8_t txBuf[2] = {regCtrl, byteVal}; + BASE_I2C_Write_Cmd(gI2cHandle, OLED_I2C_ADDR, txBuf, 2, 10); } -uint32_t OLED_Pow(uint32_t X, uint32_t Y) +static void OLED_Write_Cmd(uint8_t cmd) { - uint32_t Result = 1; - while (Y--) - { - Result *= X; - } - return Result; + OLED_Write_Byte(0x00, cmd); } -void OLED_ShowNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length) + +static void OLED_Write_Data(uint8_t data) { - uint8_t i; - for (i = 0; i < Length; i++) - { - OLED_ShowChar(Line, Column + i, Number / OLED_Pow(10, Length - i - 1) % 10 + '0'); - } + OLED_Write_Byte(0x40, data); } -void OLED_ShowSignedNum(uint8_t Line, uint8_t Column, int32_t Number, uint8_t Length) +static void OLED_Set_Cursor(uint8_t page, uint8_t column) { - uint8_t i; - uint32_t Number1; - if (Number >= 0) - { - OLED_ShowChar(Line, Column, '+'); - Number1 = Number; - } - else - { - OLED_ShowChar(Line, Column, '-'); - Number1 = -Number; - } - for (i = 0; i < Length; i++) - { - OLED_ShowChar(Line, Column + i + 1, Number1 / OLED_Pow(10, Length - i - 1) % 10 + '0'); - } + OLED_Write_Cmd(0xB0 | page); + OLED_Write_Cmd(0x10 | ((column & 0xF0) >> 4)); + OLED_Write_Cmd(0x00 | (column & 0x0F)); } -void OLED_ShowHexNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length) + +static void OLED_Write_Batch(uint8_t page, uint8_t startCol, const uint8_t *data, uint8_t dataLen) { - uint8_t i, SingleNumber; - for (i = 0; i < Length; i++) - { - SingleNumber = Number / OLED_Pow(16, Length - i - 1) % 16; - if (SingleNumber < 10) - { - OLED_ShowChar(Line, Column + i, SingleNumber + '0'); - } - else - { - OLED_ShowChar(Line, Column + i, SingleNumber - 10 + 'A'); - } - } + OLED_Set_Cursor(page, startCol); + for (uint8_t i = 0; i < dataLen; ++i) + { + OLED_Write_Data(data[i]); + } } -void OLED_ShowBinNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length) + +static void OLED_Write_Page(uint8_t page, uint8_t fillValue) { - uint8_t i; - for (i = 0; i < Length; i++) - { - OLED_ShowChar(Line, Column + i, Number / OLED_Pow(2, Length - i - 1) % 2 + '0'); - } + OLED_Set_Cursor(page, 0); + for (uint8_t i = 0; i < 128; ++i) + { + OLED_Write_Data(fillValue); + } } -void OLED_Init(void) -{ - HAL_Delay(100); - OLED_WriteCommand(0xAE); //关闭显示 - - OLED_WriteCommand(0xD5); //设置显示时钟分频比/振荡器频率 - OLED_WriteCommand(0x80); - - OLED_WriteCommand(0xA8); //设置多路复用率 - OLED_WriteCommand(0x3F); - - OLED_WriteCommand(0xD3); //设置显示偏移 - OLED_WriteCommand(0x00); - - OLED_WriteCommand(0x40); //设置显示开始行 - - OLED_WriteCommand(0xA1); //设置左右方向,0xA1正常 0xA0左右反置 - - OLED_WriteCommand(0xC8); //设置上下方向,0xC8正常 0xC0上下反置 - - OLED_WriteCommand(0xDA); //设置COM引脚硬件配置 - OLED_WriteCommand(0x12); - - OLED_WriteCommand(0x81); //设置对比度控制 - OLED_WriteCommand(0xCF); - - OLED_WriteCommand(0xD9); //设置预充电周期 - OLED_WriteCommand(0xF1); - OLED_WriteCommand(0xDB); //设置VCOMH取消选择级别 - OLED_WriteCommand(0x30); - - OLED_WriteCommand(0xA4); //设置整个显示打开/关闭 +// 鍏叡API ------------------------------------------------------------------- +void HW_OLED_Init(void) +{ + gI2cHandle = &hi2c1; // 鍋囪浣跨敤 hi2c1锛屾牴鎹疄闄呬慨鏀 + HAL_Delay(100); - OLED_WriteCommand(0xA6); //设置正常/倒转显示 + // 鍒濆鍖栧懡浠ゅ簭鍒 + OLED_Write_Cmd(0xAE); // 鍏抽棴鏄剧ず + OLED_Write_Cmd(0xD5); OLED_Write_Cmd(0x80); + OLED_Write_Cmd(0xA8); OLED_Write_Cmd(0x3F); + OLED_Write_Cmd(0xD3); OLED_Write_Cmd(0x00); + OLED_Write_Cmd(0x40); // 璧峰琛 + OLED_Write_Cmd(0xA1); // 宸﹀彸鍙嶇疆 + OLED_Write_Cmd(0xC8); // 涓婁笅鍙嶇疆 + OLED_Write_Cmd(0xDA); OLED_Write_Cmd(0x12); + OLED_Write_Cmd(0x81); OLED_Write_Cmd(0xCF); + OLED_Write_Cmd(0xD9); OLED_Write_Cmd(0xF1); + OLED_Write_Cmd(0xDB); OLED_Write_Cmd(0x30); + OLED_Write_Cmd(0xA4); // 鍏ㄥ眬鏄剧ず寮鍚 + OLED_Write_Cmd(0xA6); // 姝e父鏄剧ず + OLED_Write_Cmd(0x8D); OLED_Write_Cmd(0x14); // 鐢佃嵎娉典娇鑳 + OLED_Write_Cmd(0xAF); // 寮鍚樉绀 - OLED_WriteCommand(0x8D); //设置充电泵 - OLED_WriteCommand(0x14); + HW_OLED_Clear(); +} - OLED_WriteCommand(0xAF); //开启显示 - - OLED_Clear(); //OLED清屏 +void HW_OLED_Clear(void) +{ + for (uint8_t page = 0; page < 8; ++page) + { + OLED_Write_Page(page, 0x00); + } } +void HW_OLED_Fill(void) +{ + for (uint8_t page = 0; page < 8; ++page) + { + OLED_Write_Page(page, 0xFF); + } +} \ No newline at end of file diff --git a/modules/oled/HW_OLED.h b/modules/oled/HW_OLED.h index 2adff44..d67e923 100644 --- a/modules/oled/HW_OLED.h +++ b/modules/oled/HW_OLED.h @@ -1,125 +1,67 @@ -#ifndef __HW_OLED_H -#define __HW_OLED_H +#ifndef HW_OLED_H +#define HW_OLED_H -#include "main.h" #include "i2c.h" +#include "Base_I2C.h" -/************************* - * 功能:OLED I2C 驱动头文件 - * 依赖:STM32 HAL库 I2C - * 说明:提供OLED初始化、清屏、显示字符串等基础接口 - *************************/ +/*==================== OLED鎺у埗鍛戒护瀹忓畾涔 ====================*/ +#define OLED_CMD_LEFT 0x27 // 宸︾Щ鍛戒护 +#define OLED_CMD_RIGHT 0x26 // 鍙崇Щ鍛戒护 +#define OLED_CMD_UP 0x29 // 涓婄Щ鍛戒护 +#define OLED_CMD_DOWN 0x2A // 涓嬬Щ鍛戒护 +#define OLED_CMD_ON 0xA7 // 鏄剧ず寮鍚/鐐逛寒鍛戒护 +#define OLED_CMD_OFF 0xA6 // 鏄剧ず鍏抽棴/鐔勭伃鍛戒护 -/*==================== OLED 控制命令宏定义 ====================*/ -#define LEFT 0x27 // 左移命令 -#define RIGHT 0x26 // 右移命令 -#define UP 0x29 // 上移命令 -#define DOWN 0x2A // 下移命令 -#define ON 0xA7 // 显示开启/点亮命令 -#define OFF 0xA6 // 显示关闭/熄灭命令 +#define OLED_I2C_ADDR 0x78 // OLED I2C璁惧鍦板潃 -#define OLED_Addr 0x78 // OLED I2C 设备地址 +/*==================== OLED灞忓箷鍙傛暟 ====================*/ +#define OLED_WIDTH 128 // OLED瀹藉害:128 +#define OLED_HEIGHT 64 // OLED楂樺害:64 -/*==================== OLED 屏幕参数 ====================*/ -#define displayWidth 128 // OLED宽度:128 -#define displayHeight 64 // OLED高度:64 -/*==================== 底层I2C写函数 ====================*/ +/*==================== 灞忓箷鎿嶄綔鍑芥暟 ====================*/ /** - * @brief OLED通过I2C写入一个字节(命令/数据) - * @param regAddr: 控制字节 0x00=命令 0x40=数据 - * @param data: 要写入的命令或数据 - * @retval 无 + * @brief OLED鍒濆鍖(涓婄數蹇呴』璋冪敤) */ -void HW_OLED_WriteByte(uint8_t regAddr, uint8_t data); +void HW_OLED_Init(void); /** - * @brief 向OLED写入命令 - * @param iicCommand: 命令值 - * @retval 无 + * @brief OLED娓呭睆(鍏ㄩ粦) */ -void OLED_WriteCommand(uint8_t iicCommand); +void HW_OLED_Clear(void); /** - * @brief 向OLED写入数据 - * @param iicData: 显示数据 - * @retval 无 + * @brief OLED婊″睆鐐逛寒(鍏ㄧ櫧) */ -void OLED_WriteData(uint8_t iicData); +void HW_OLED_Fill(void); /** - * @brief 设置OLED光标位置 - * @param Y: 页地址 0~7 - * @param X: 列地址 0~127 - * @retval 无 + * @brief 璁剧疆鍏夋爣浣嶇疆骞惰繛缁啓鍏ュ涓瓧鑺傛暟鎹紙閫傜敤浜庨潪閲嶅鏁版嵁锛 + * @param page 椤靛湴鍧锛0~7锛屽搴 Y 鍧愭爣姣 8 鍍忕礌涓椤碉級 + * @param column 鍒楄捣濮嬪湴鍧锛0~127锛屽搴 X 鍧愭爣锛 + * @param data 寰呭啓鍏ョ殑鏁版嵁缂撳啿鍖烘寚閽 + * @param dataLen 瑕佸啓鍏ョ殑瀛楄妭鏁 */ -void OLED_SetCursor(uint8_t Y, uint8_t X); +static void HW_OLED_SetCursorAndWriteData(uint8_t page, uint8_t column, + const uint8_t *data, uint8_t dataLen); -/*==================== 屏幕操作函数 ====================*/ /** - * @brief OLED初始化(上电必须调用) - * @param 无 - * @retval 无 + * @brief 灏嗘暣椤碉紙128 鍒楋級濉厖涓烘寚瀹氬 + * @param page 椤靛湴鍧锛0~7锛 + * @param fillValue 濉厖鍊硷紙0x00 娓呯┖锛0xFF 鍏ㄤ寒锛 */ -void OLED_Init(void); +static void HW_OLED_WritePage(uint8_t page, uint8_t fillValue); /** - * @brief OLED清屏(全黑) - * @param 无 - * @retval 无 + * @brief 鍚 OLED 鍐欏叆鍛戒护瀛楄妭 + * @param cmd 鍛戒护瀛楄妭锛堝 0xAE 鍏抽棴鏄剧ず锛 */ -void OLED_Clear(void); +static void HW_OLED_WriteCommand(uint8_t cmd); /** - * @brief OLED满屏点亮(全白) - * @param 无 - * @retval 无 + * @brief 鍚 OLED 鍐欏叆鏁版嵁瀛楄妭锛堟樉绀哄唴瀹癸級 + * @param data 瑕佹樉绀虹殑鏁版嵁瀛楄妭锛堜竴鍒 8 鍍忕礌鐐癸級 */ -void my_OLED_Clear(void); - -/*==================== 显示函数 ====================*/ -/** - * @brief OLED显示单个字符(8x16字体) - * @param Line: 行 1~4 - * @param Column: 列 1~16 - * @param Char: 要显示的字符 - * @retval 无 - */ -void OLED_ShowChar(uint8_t Line, uint8_t Column, char Char); - -/** - * @brief OLED显示字符串 - * @param Line: 起始行 1~4 - * @param Column: 起始列 1~16 - * @param String: 字符串指针 - * @retval 无 - */ -void OLED_ShowString(uint8_t Line, uint8_t Column, char *String); - -/** - * @brief OLED显示无符号十进制数字 - * @param Line: 行 - * @param Column: 列 - * @param Number: 数字 0~4294967295 - * @param Length: 显示位数 - * @retval 无 - */ -void OLED_ShowNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length); - -/** - * @brief OLED显示有符号十进制数字 - */ -void OLED_ShowSignedNum(uint8_t Line, uint8_t Column, int32_t Number, uint8_t Length); - -/** - * @brief OLED显示十六进制数字 - */ -void OLED_ShowHexNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length); - -/** - * @brief OLED显示二进制数字 - */ -void OLED_ShowBinNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length); +static void HW_OLED_WriteData(uint8_t data); #endif - diff --git a/modules/oled/OLED_Font.h b/modules/oled/OLED_FONT_8X16_ENGLISH.h similarity index 95% rename from modules/oled/OLED_Font.h rename to modules/oled/OLED_FONT_8X16_ENGLISH.h index 6cd34bf..9039df5 100644 --- a/modules/oled/OLED_Font.h +++ b/modules/oled/OLED_FONT_8X16_ENGLISH.h @@ -1,8 +1,9 @@ -#ifndef __OLED_FONT_H -#define __OLED_FONT_H -#include "main.h" -/*OLED瀛楁ā搴擄紝瀹8鍍忕礌锛岄珮16鍍忕礌*/ -const uint8_t OLED_F8x16[][16]= +#ifndef OLED_FONT_8X16_ENGLISH_H +#define OLED_FONT_8X16_ENGLISH_H + +#include + +static const uint8_t OLED_F8x16[][16]= { {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},// 0 @@ -192,11 +193,7 @@ const uint8_t OLED_F8x16[][16]= {0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00},//} 93 -// 0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04, -// 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94 - {0x00,0x00,0xF0,0xFC,0xFC,0xF0,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0}, -// 0x00,0x00,0xF0,0xFF,0xFF,0xF0,0x00,0x00, -// 0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,/*"鏈懡鍚嶆枃浠",0*/ + {0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}//~ 94 }; #endif diff --git a/modules/oled/OLED_FONT_MANAGE.h b/modules/oled/OLED_FONT_MANAGE.h new file mode 100644 index 0000000..aa8a781 --- /dev/null +++ b/modules/oled/OLED_FONT_MANAGE.h @@ -0,0 +1,23 @@ +#ifndef OLED_FONT_MANAGE_H +#define OLED_FONT_MANAGE_H + +#include +#include "HW_OLED.h" + +// 瀹忓畾涔:閫夋嫨褰撳墠浣跨敤鐨凮LED瀛楀簱(浠呭紑鍚竴涓嵆鍙) +#define OLED_FONT_8X16_ENGLISH // 8x16鑻辨枃瀛楀簱(榛樿寮鍚) +//#define OLED_FONT_16X16_CHINESE // 16x16涓枃瀛楀簱 +//#define OLED_FONT_8X16_NUMBER // 8x16鏁板瓧瀛楀簱 + +#ifdef OLED_FONT_8X16_ENGLISH + #include "OLED_FONT_8X16_ENGLISH.h" +#elif defined(OLED_FONT_16X16_CHINESE) + #include "OLED_FONT_16X16_CHINESE.h" +#elif defined(OLED_FONT_8X16_NUMBER) + #include "OLED_FONT_8X16_NUMBER.h" +#else + + #include "OLED_FONT_8X16_ENGLISH.h" // 鏃犱换浣曞瓧搴撳畾涔夋椂,榛樿鍔犺浇鏍囧噯鑻辨枃瀛楀簱 +#endif + +#endif -- Gitee From c5ee774145a5fe7e49c8d6f72281db441a97d900 Mon Sep 17 00:00:00 2001 From: ZengHongKun <431250696@qq.com> Date: Sat, 30 May 2026 12:00:36 +0800 Subject: [PATCH 3/4] Trigger PR update -- Gitee From 8852eabc37f9fec4fa3de22ba438a92508473d54 Mon Sep 17 00:00:00 2001 From: ZengHongKun <431250696@qq.com> Date: Thu, 16 Jul 2026 22:38:54 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=BF=80=E5=85=89=E6=B5=8B=E8=B7=9D?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/VL53L0X/inc/bsp_VL53L0X.h | 52 + modules/VL53L0X/inc/sys.h | 60 + modules/VL53L0X/inc/vl53l0x_api.h | 1953 +++++++++++ modules/VL53L0X/inc/vl53l0x_api_calibration.h | 85 + modules/VL53L0X/inc/vl53l0x_api_core.h | 108 + modules/VL53L0X/inc/vl53l0x_api_ranging.h | 47 + modules/VL53L0X/inc/vl53l0x_api_strings.h | 277 ++ modules/VL53L0X/inc/vl53l0x_cali.h | 26 + modules/VL53L0X/inc/vl53l0x_def.h | 640 ++++ modules/VL53L0X/inc/vl53l0x_device.h | 257 ++ modules/VL53L0X/inc/vl53l0x_gen.h | 16 + modules/VL53L0X/inc/vl53l0x_i2c.h | 67 + .../vl53l0x_interrupt_threshold_settings.h | 194 ++ modules/VL53L0X/inc/vl53l0x_it.h | 9 + modules/VL53L0X/inc/vl53l0x_platform.h | 40 + modules/VL53L0X/inc/vl53l0x_platform_log.h | 157 + modules/VL53L0X/inc/vl53l0x_tuning.h | 146 + modules/VL53L0X/inc/vl53l0x_types.h | 112 + modules/VL53L0X/my_vl53l0.h | 9 + modules/VL53L0X/src/bsp_VL53L0X.c | 170 + modules/VL53L0X/src/vl53l0x_api.c | 3035 +++++++++++++++++ modules/VL53L0X/src/vl53l0x_api_calibration.c | 1276 +++++++ modules/VL53L0X/src/vl53l0x_api_core.c | 2239 ++++++++++++ modules/VL53L0X/src/vl53l0x_api_ranging.c | 42 + modules/VL53L0X/src/vl53l0x_api_strings.c | 462 +++ modules/VL53L0X/src/vl53l0x_cali.c | 180 + modules/VL53L0X/src/vl53l0x_gen.c | 81 + modules/VL53L0X/src/vl53l0x_i2c.c | 428 +++ modules/VL53L0X/src/vl53l0x_it.c | 262 ++ modules/VL53L0X/src/vl53l0x_platform.c | 271 ++ ...7\347\224\250\346\226\271\346\263\225.txt" | 44 + ...0\345\212\237\346\241\210\344\276\213.zip" | Bin 0 -> 1040537 bytes 32 files changed, 12745 insertions(+) create mode 100644 modules/VL53L0X/inc/bsp_VL53L0X.h create mode 100644 modules/VL53L0X/inc/sys.h create mode 100644 modules/VL53L0X/inc/vl53l0x_api.h create mode 100644 modules/VL53L0X/inc/vl53l0x_api_calibration.h create mode 100644 modules/VL53L0X/inc/vl53l0x_api_core.h create mode 100644 modules/VL53L0X/inc/vl53l0x_api_ranging.h create mode 100644 modules/VL53L0X/inc/vl53l0x_api_strings.h create mode 100644 modules/VL53L0X/inc/vl53l0x_cali.h create mode 100644 modules/VL53L0X/inc/vl53l0x_def.h create mode 100644 modules/VL53L0X/inc/vl53l0x_device.h create mode 100644 modules/VL53L0X/inc/vl53l0x_gen.h create mode 100644 modules/VL53L0X/inc/vl53l0x_i2c.h create mode 100644 modules/VL53L0X/inc/vl53l0x_interrupt_threshold_settings.h create mode 100644 modules/VL53L0X/inc/vl53l0x_it.h create mode 100644 modules/VL53L0X/inc/vl53l0x_platform.h create mode 100644 modules/VL53L0X/inc/vl53l0x_platform_log.h create mode 100644 modules/VL53L0X/inc/vl53l0x_tuning.h create mode 100644 modules/VL53L0X/inc/vl53l0x_types.h create mode 100644 modules/VL53L0X/my_vl53l0.h create mode 100644 modules/VL53L0X/src/bsp_VL53L0X.c create mode 100644 modules/VL53L0X/src/vl53l0x_api.c create mode 100644 modules/VL53L0X/src/vl53l0x_api_calibration.c create mode 100644 modules/VL53L0X/src/vl53l0x_api_core.c create mode 100644 modules/VL53L0X/src/vl53l0x_api_ranging.c create mode 100644 modules/VL53L0X/src/vl53l0x_api_strings.c create mode 100644 modules/VL53L0X/src/vl53l0x_cali.c create mode 100644 modules/VL53L0X/src/vl53l0x_gen.c create mode 100644 modules/VL53L0X/src/vl53l0x_i2c.c create mode 100644 modules/VL53L0X/src/vl53l0x_it.c create mode 100644 modules/VL53L0X/src/vl53l0x_platform.c create mode 100644 "modules/VL53L0X/\344\275\277\347\224\250\346\226\271\346\263\225.txt" create mode 100644 "modules/VL53L0X/\346\272\220\344\273\243\347\240\201/\345\244\251\347\251\272\346\230\237STM32F407-VL53L0X\346\277\200\345\205\211\346\265\213\350\267\235\344\274\240\346\204\237\345\231\250\347\247\273\346\244\215\346\210\220\345\212\237\346\241\210\344\276\213.zip" diff --git a/modules/VL53L0X/inc/bsp_VL53L0X.h b/modules/VL53L0X/inc/bsp_VL53L0X.h new file mode 100644 index 0000000..9b7b0bd --- /dev/null +++ b/modules/VL53L0X/inc/bsp_VL53L0X.h @@ -0,0 +1,52 @@ +#ifndef __VL53L0X_H +#define __VL53L0X_H + +#include "vl53l0x_api.h" +#include "vl53l0x_platform.h" +#include "vl53l0x_gen.h" +#include "vl53l0x_cali.h" +#include "vl53l0x_it.h" +#include "sys.h" +#include "my_vl53l0.h" + + +//VL53L0X传感器上电默认IIC地址为0X52(不包含最低位) +#define VL53L0X_Addr 0x52 + +//控制Xshut电平,从而使能VL53L0X工作 1:使能 0:关闭 + + +//使能2.8V IO电平模式 +#define USE_I2C_2V8 1 + +//测量模式 +#define Default_Mode 0// 默认 +#define HIGH_ACCURACY 1//高精度 +#define LONG_RANGE 2//长距离 +#define HIGH_SPEED 3//高速 + +//vl53l0x模式配置参数集 +typedef struct packed_2 +{ + FixPoint1616_t signalLimit; //Signal极限数值 + FixPoint1616_t sigmaLimit; //Sigmal极限数值 + uint32_t timingBudget; //采样时间周期 + uint8_t preRangeVcselPeriod ; //VCSEL脉冲周期 + uint8_t finalRangeVcselPeriod ;//VCSEL脉冲周期范围 + +}mode_data; + + +extern mode_data Mode_data[]; +extern uint8_t AjustOK; + +VL53L0X_Error vl53l0x_init(VL53L0X_Dev_t *dev);//初始化vl53l0x +void print_pal_error(VL53L0X_Error Status);//错误信息打印 +void mode_string(u8 mode,char *buf);//模式字符串显示 +void vl53l0x_test(void);//vl53l0x测试 +void vl53l0x_reset(VL53L0X_Dev_t *dev);//vl53l0x复位 + +void vl53l0x_info(void);//获取vl53l0x设备ID信息 +void One_measurement(u8 mode);//获取一次测量距离数据 +#endif + diff --git a/modules/VL53L0X/inc/sys.h b/modules/VL53L0X/inc/sys.h new file mode 100644 index 0000000..176eeff --- /dev/null +++ b/modules/VL53L0X/inc/sys.h @@ -0,0 +1,60 @@ +/* + * 立创开发板软硬件资料与相关扩展板软硬件资料官网全部开源 + * 开发板官网:www.lckfb.com + * 技术支持常驻论坛,任何技术问题欢迎随时交流学习 + * 立创论坛:club.szlcsc.com + * 关注bilibili账号:【立创开发板】,掌握我们的最新动态! + * 不靠卖板赚钱,以培养中国工程师为己任 + * + + Change Logs: + * Date Author Notes + * 2024-03-07 LCKFB-LP first version + */ + +#ifndef __SYS_H__ +#define __SYS_H__ + +#include "stm32f4xx.h" + +// 位带操作的宏定义,直接使用您提供的BIT_ADDR宏 +#define BIT_ADDR(byte_offset,bitnum) (volatile unsigned long*)(0x42000000 + (byte_offset * 32) + (bitnum * 4)) + +// 计算GPIOB寄存器的位带别名区地址 +#define GPIOA_OCTL_OFFSET ((GPIOA_BASE + 0x14) - 0x40000000) +#define GPIOB_OCTL_OFFSET ((GPIOB_BASE + 0x14) - 0x40000000) +#define GPIOC_OCTL_OFFSET ((GPIOC_BASE + 0x14) - 0x40000000) +#define GPIOD_OCTL_OFFSET ((GPIOD_BASE + 0x14) - 0x40000000) +#define GPIOE_OCTL_OFFSET ((GPIOE_BASE + 0x14) - 0x40000000) +#define GPIOF_OCTL_OFFSET ((GPIOF_BASE + 0x14) - 0x40000000) +#define GPIOG_OCTL_OFFSET ((GPIOG_BASE + 0x14) - 0x40000000) + +#define GPIOA_ISTAT_OFFSET ((GPIOA_BASE + 0x10) - 0x40000000) +#define GPIOB_ISTAT_OFFSET ((GPIOB_BASE + 0x10) - 0x40000000) +#define GPIOC_ISTAT_OFFSET ((GPIOC_BASE + 0x10) - 0x40000000) +#define GPIOD_ISTAT_OFFSET ((GPIOD_BASE + 0x10) - 0x40000000) +#define GPIOE_ISTAT_OFFSET ((GPIOE_BASE + 0x10) - 0x40000000) +#define GPIOF_ISTAT_OFFSET ((GPIOF_BASE + 0x10) - 0x40000000) +#define GPIOG_ISTAT_OFFSET ((GPIOG_BASE + 0x10) - 0x40000000) + + +// 定义输出和输入宏 +#define PAin(n) *(BIT_ADDR(GPIOA_ISTAT_OFFSET,n)) // PA输入 +#define PBin(n) *(BIT_ADDR(GPIOB_ISTAT_OFFSET,n)) // PB输入 +#define PCin(n) *(BIT_ADDR(GPIOC_ISTAT_OFFSET,n)) // PC输入 +#define PDin(n) *(BIT_ADDR(GPIOD_ISTAT_OFFSET,n)) // PD输入 +#define PEin(n) *(BIT_ADDR(GPIOE_ISTAT_OFFSET,n)) // PE输入 +#define PFin(n) *(BIT_ADDR(GPIOF_ISTAT_OFFSET,n)) // PF输入 +#define PGin(n) *(BIT_ADDR(GPIOG_ISTAT_OFFSET,n)) // PG输入 + +#define PAout(n) *(BIT_ADDR(GPIOA_OCTL_OFFSET,n)) // PA输出 +#define PBout(n) *(BIT_ADDR(GPIOB_OCTL_OFFSET,n)) // PB输出 +#define PCout(n) *(BIT_ADDR(GPIOC_OCTL_OFFSET,n)) // PC输出 +#define PDout(n) *(BIT_ADDR(GPIOD_OCTL_OFFSET,n)) // PD输出 +#define PEout(n) *(BIT_ADDR(GPIOE_OCTL_OFFSET,n)) // PE输出 +#define PFout(n) *(BIT_ADDR(GPIOF_OCTL_OFFSET,n)) // PF输出 +#define PGout(n) *(BIT_ADDR(GPIOG_OCTL_OFFSET,n)) // PG输出 + + + +#endif diff --git a/modules/VL53L0X/inc/vl53l0x_api.h b/modules/VL53L0X/inc/vl53l0x_api.h new file mode 100644 index 0000000..48148e2 --- /dev/null +++ b/modules/VL53L0X/inc/vl53l0x_api.h @@ -0,0 +1,1953 @@ +/******************************************************************************* + Copyright 2016, STMicroelectronics International N.V. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of STMicroelectronics nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND + NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED. + IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +#ifndef _VL53L0X_API_H_ +#define _VL53L0X_API_H_ + +#include "vl53l0x_api_strings.h" +#include "vl53l0x_def.h" +#include "vl53l0x_platform.h" +#include "bsp_vl53l0x.h" + + + +#ifdef __cplusplus +extern "C" +{ +#endif + +#ifdef _MSC_VER +# ifdef VL53L0X_API_EXPORTS +# define VL53L0X_API __declspec(dllexport) +# else +# define VL53L0X_API +# endif +#else +# define VL53L0X_API +#endif + +/** @defgroup VL53L0X_cut11_group VL53L0X cut1.1 Function Definition + * @brief VL53L0X cut1.1 Function Definition + * @{ + */ + +/** @defgroup VL53L0X_general_group VL53L0X General Functions + * @brief General functions and definitions + * @{ + */ + +/** + * @brief Return the VL53L0X PAL Implementation Version + * + * @note This function doesn't access to the device + * + * @param pVersion Pointer to current PAL Implementation Version + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetVersion(VL53L0X_Version_t *pVersion); + +/** + * @brief Return the PAL Specification Version used for the current + * implementation. + * + * @note This function doesn't access to the device + * + * @param pPalSpecVersion Pointer to current PAL Specification Version + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetPalSpecVersion( + VL53L0X_Version_t *pPalSpecVersion); + +/** + * @brief Reads the Product Revision for a for given Device + * This function can be used to distinguish cut1.0 from cut1.1. + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param pProductRevisionMajor Pointer to Product Revision Major + * for a given Device + * @param pProductRevisionMinor Pointer to Product Revision Minor + * for a given Device + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetProductRevision(VL53L0X_DEV Dev, + uint8_t *pProductRevisionMajor, uint8_t *pProductRevisionMinor); + +/** + * @brief Reads the Device information for given Device + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param pVL53L0X_DeviceInfo Pointer to current device info for a given + * Device + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetDeviceInfo(VL53L0X_DEV Dev, + VL53L0X_DeviceInfo_t *pVL53L0X_DeviceInfo); + +/** + * @brief Read current status of the error register for the selected device + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param pDeviceErrorStatus Pointer to current error code of the device + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetDeviceErrorStatus(VL53L0X_DEV Dev, + VL53L0X_DeviceError *pDeviceErrorStatus); + +/** + * @brief Human readable Range Status string for a given RangeStatus + * + * @note This function doesn't access to the device + * + * @param RangeStatus The RangeStatus code as stored on + * @a VL53L0X_RangingMeasurementData_t + * @param pRangeStatusString The returned RangeStatus string. + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetRangeStatusString(uint8_t RangeStatus, + char *pRangeStatusString); + +/** + * @brief Human readable error string for a given Error Code + * + * @note This function doesn't access to the device + * + * @param ErrorCode The error code as stored on ::VL53L0X_DeviceError + * @param pDeviceErrorString The error string corresponding to the ErrorCode + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetDeviceErrorString( + VL53L0X_DeviceError ErrorCode, char *pDeviceErrorString); + +/** + * @brief Human readable error string for current PAL error status + * + * @note This function doesn't access to the device + * + * @param PalErrorCode The error code as stored on @a VL53L0X_Error + * @param pPalErrorString The error string corresponding to the + * PalErrorCode + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetPalErrorString(VL53L0X_Error PalErrorCode, + char *pPalErrorString); + +/** + * @brief Human readable PAL State string + * + * @note This function doesn't access to the device + * + * @param PalStateCode The State code as stored on @a VL53L0X_State + * @param pPalStateString The State string corresponding to the + * PalStateCode + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetPalStateString(VL53L0X_State PalStateCode, + char *pPalStateString); + +/** + * @brief Reads the internal state of the PAL for a given Device + * + * @note This function doesn't access to the device + * + * @param Dev Device Handle + * @param pPalState Pointer to current state of the PAL for a + * given Device + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetPalState(VL53L0X_DEV Dev, + VL53L0X_State *pPalState); + +/** + * @brief Set the power mode for a given Device + * The power mode can be Standby or Idle. Different level of both Standby and + * Idle can exists. + * This function should not be used when device is in Ranging state. + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param PowerMode The value of the power mode to set. + * see ::VL53L0X_PowerModes + * Valid values are: + * VL53L0X_POWERMODE_STANDBY_LEVEL1, + * VL53L0X_POWERMODE_IDLE_LEVEL1 + * @return VL53L0X_ERROR_NONE Success + * @return VL53L0X_ERROR_MODE_NOT_SUPPORTED This error occurs when PowerMode + * is not in the supported list + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_SetPowerMode(VL53L0X_DEV Dev, + VL53L0X_PowerModes PowerMode); + +/** + * @brief Get the power mode for a given Device + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param pPowerMode Pointer to the current value of the power + * mode. see ::VL53L0X_PowerModes + * Valid values are: + * VL53L0X_POWERMODE_STANDBY_LEVEL1, + * VL53L0X_POWERMODE_IDLE_LEVEL1 + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetPowerMode(VL53L0X_DEV Dev, + VL53L0X_PowerModes *pPowerMode); + +/** + * Set or over-hide part to part calibration offset + * \sa VL53L0X_DataInit() VL53L0X_GetOffsetCalibrationDataMicroMeter() + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param OffsetCalibrationDataMicroMeter Offset (microns) + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_SetOffsetCalibrationDataMicroMeter( + VL53L0X_DEV Dev, int32_t OffsetCalibrationDataMicroMeter); + +/** + * @brief Get part to part calibration offset + * + * @par Function Description + * Should only be used after a successful call to @a VL53L0X_DataInit to backup + * device NVM value + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param pOffsetCalibrationDataMicroMeter Return part to part + * calibration offset from device (microns) + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetOffsetCalibrationDataMicroMeter( + VL53L0X_DEV Dev, int32_t *pOffsetCalibrationDataMicroMeter); + +/** + * Set the linearity corrective gain + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param LinearityCorrectiveGain Linearity corrective + * gain in x1000 + * if value is 1000 then no modification is applied. + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_SetLinearityCorrectiveGain(VL53L0X_DEV Dev, + int16_t LinearityCorrectiveGain); + +/** + * @brief Get the linearity corrective gain + * + * @par Function Description + * Should only be used after a successful call to @a VL53L0X_DataInit to backup + * device NVM value + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param pLinearityCorrectiveGain Pointer to the linearity + * corrective gain in x1000 + * if value is 1000 then no modification is applied. + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetLinearityCorrectiveGain(VL53L0X_DEV Dev, + uint16_t *pLinearityCorrectiveGain); + +/** + * Set Group parameter Hold state + * + * @par Function Description + * Set or remove device internal group parameter hold + * + * @note This function is not Implemented + * + * @param Dev Device Handle + * @param GroupParamHold Group parameter Hold state to be set (on/off) + * @return VL53L0X_ERROR_NOT_IMPLEMENTED Not implemented + */ +VL53L0X_API VL53L0X_Error VL53L0X_SetGroupParamHold(VL53L0X_DEV Dev, + uint8_t GroupParamHold); + +/** + * @brief Get the maximal distance for actual setup + * @par Function Description + * Device must be initialized through @a VL53L0X_SetParameters() prior calling + * this function. + * + * Any range value more than the value returned is to be considered as + * "no target detected" or + * "no target in detectable range"\n + * @warning The maximal distance depends on the setup + * + * @note This function is not Implemented + * + * @param Dev Device Handle + * @param pUpperLimitMilliMeter The maximal range limit for actual setup + * (in millimeter) + * @return VL53L0X_ERROR_NOT_IMPLEMENTED Not implemented + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetUpperLimitMilliMeter(VL53L0X_DEV Dev, + uint16_t *pUpperLimitMilliMeter); + + +/** + * @brief Get the Total Signal Rate + * @par Function Description + * This function will return the Total Signal Rate after a good ranging is done. + * + * @note This function access to Device + * + * @param Dev Device Handle + * @param pTotalSignalRate Total Signal Rate value in Mega count per second + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_Error VL53L0X_GetTotalSignalRate(VL53L0X_DEV Dev, + FixPoint1616_t *pTotalSignalRate); + +/** @} VL53L0X_general_group */ + +/** @defgroup VL53L0X_init_group VL53L0X Init Functions + * @brief VL53L0X Init Functions + * @{ + */ + +/** + * @brief Set new device address + * + * After completion the device will answer to the new address programmed. + * This function should be called when several devices are used in parallel + * before start programming the sensor. + * When a single device us used, there is no need to call this function. + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param DeviceAddress The new Device address + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_SetDeviceAddress(VL53L0X_DEV Dev, + uint8_t DeviceAddress); + +/** + * + * @brief One time device initialization + * + * To be called once and only once after device is brought out of reset + * (Chip enable) and booted see @a VL53L0X_WaitDeviceBooted() + * + * @par Function Description + * When not used after a fresh device "power up" or reset, it may return + * @a #VL53L0X_ERROR_CALIBRATION_WARNING meaning wrong calibration data + * may have been fetched from device that can result in ranging offset error\n + * If application cannot execute device reset or need to run VL53L0X_DataInit + * multiple time then it must ensure proper offset calibration saving and + * restore on its own by using @a VL53L0X_GetOffsetCalibrationData() on first + * power up and then @a VL53L0X_SetOffsetCalibrationData() in all subsequent init + * This function will change the VL53L0X_State from VL53L0X_STATE_POWERDOWN to + * VL53L0X_STATE_WAIT_STATICINIT. + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_DataInit(VL53L0X_DEV Dev); + +/** + * @brief Set the tuning settings pointer + * + * This function is used to specify the Tuning settings buffer to be used + * for a given device. The buffer contains all the necessary data to permit + * the API to write tuning settings. + * This function permit to force the usage of either external or internal + * tuning settings. + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param pTuningSettingBuffer Pointer to tuning settings buffer. + * @param UseInternalTuningSettings Use internal tuning settings value. + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_SetTuningSettingBuffer(VL53L0X_DEV Dev, + uint8_t *pTuningSettingBuffer, uint8_t UseInternalTuningSettings); + +/** + * @brief Get the tuning settings pointer and the internal external switch + * value. + * + * This function is used to get the Tuning settings buffer pointer and the + * value. + * of the switch to select either external or internal tuning settings. + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param ppTuningSettingBuffer Pointer to tuning settings buffer. + * @param pUseInternalTuningSettings Pointer to store Use internal tuning + * settings value. + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetTuningSettingBuffer(VL53L0X_DEV Dev, + uint8_t **ppTuningSettingBuffer, uint8_t *pUseInternalTuningSettings); + +/** + * @brief Do basic device init (and eventually patch loading) + * This function will change the VL53L0X_State from + * VL53L0X_STATE_WAIT_STATICINIT to VL53L0X_STATE_IDLE. + * In this stage all default setting will be applied. + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_StaticInit(VL53L0X_DEV Dev); + +/** + * @brief Wait for device booted after chip enable (hardware standby) + * This function can be run only when VL53L0X_State is VL53L0X_STATE_POWERDOWN. + * + * @note This function is not Implemented + * + * @param Dev Device Handle + * @return VL53L0X_ERROR_NOT_IMPLEMENTED Not implemented + * + */ +VL53L0X_API VL53L0X_Error VL53L0X_WaitDeviceBooted(VL53L0X_DEV Dev); + +/** + * @brief Do an hard reset or soft reset (depending on implementation) of the + * device \nAfter call of this function, device must be in same state as right + * after a power-up sequence.This function will change the VL53L0X_State to + * VL53L0X_STATE_POWERDOWN. + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_ResetDevice(VL53L0X_DEV Dev); + +/** @} VL53L0X_init_group */ + +/** @defgroup VL53L0X_parameters_group VL53L0X Parameters Functions + * @brief Functions used to prepare and setup the device + * @{ + */ + +/** + * @brief Prepare device for operation + * @par Function Description + * Update device with provided parameters + * @li Then start ranging operation. + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param pDeviceParameters Pointer to store current device parameters. + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_SetDeviceParameters(VL53L0X_DEV Dev, + const VL53L0X_DeviceParameters_t *pDeviceParameters); + +/** + * @brief Retrieve current device parameters + * @par Function Description + * Get actual parameters of the device + * @li Then start ranging operation. + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param pDeviceParameters Pointer to store current device parameters. + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetDeviceParameters(VL53L0X_DEV Dev, + VL53L0X_DeviceParameters_t *pDeviceParameters); + +/** + * @brief Set a new device mode + * @par Function Description + * Set device to a new mode (ranging, histogram ...) + * + * @note This function doesn't Access to the device + * + * @param Dev Device Handle + * @param DeviceMode New device mode to apply + * Valid values are: + * VL53L0X_DEVICEMODE_SINGLE_RANGING + * VL53L0X_DEVICEMODE_CONTINUOUS_RANGING + * VL53L0X_DEVICEMODE_CONTINUOUS_TIMED_RANGING + * VL53L0X_DEVICEMODE_SINGLE_HISTOGRAM + * VL53L0X_HISTOGRAMMODE_REFERENCE_ONLY + * VL53L0X_HISTOGRAMMODE_RETURN_ONLY + * VL53L0X_HISTOGRAMMODE_BOTH + * + * + * @return VL53L0X_ERROR_NONE Success + * @return VL53L0X_ERROR_MODE_NOT_SUPPORTED This error occurs when DeviceMode is + * not in the supported list + */ +VL53L0X_API VL53L0X_Error VL53L0X_SetDeviceMode(VL53L0X_DEV Dev, + VL53L0X_DeviceModes DeviceMode); + +/** + * @brief Get current new device mode + * @par Function Description + * Get actual mode of the device(ranging, histogram ...) + * + * @note This function doesn't Access to the device + * + * @param Dev Device Handle + * @param pDeviceMode Pointer to current apply mode value + * Valid values are: + * VL53L0X_DEVICEMODE_SINGLE_RANGING + * VL53L0X_DEVICEMODE_CONTINUOUS_RANGING + * VL53L0X_DEVICEMODE_CONTINUOUS_TIMED_RANGING + * VL53L0X_DEVICEMODE_SINGLE_HISTOGRAM + * VL53L0X_HISTOGRAMMODE_REFERENCE_ONLY + * VL53L0X_HISTOGRAMMODE_RETURN_ONLY + * VL53L0X_HISTOGRAMMODE_BOTH + * + * @return VL53L0X_ERROR_NONE Success + * @return VL53L0X_ERROR_MODE_NOT_SUPPORTED This error occurs when + * DeviceMode is not in the supported list + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetDeviceMode(VL53L0X_DEV Dev, + VL53L0X_DeviceModes *pDeviceMode); + +/** + * @brief Sets the resolution of range measurements. + * @par Function Description + * Set resolution of range measurements to either 0.25mm if + * fraction enabled or 1mm if not enabled. + * + * @note This function Accesses the device + * + * @param Dev Device Handle + * @param Enable Enable high resolution + * + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_SetRangeFractionEnable(VL53L0X_DEV Dev, + uint8_t Enable); + +/** + * @brief Gets the fraction enable parameter indicating the resolution of + * range measurements. + * + * @par Function Description + * Gets the fraction enable state, which translates to the resolution of + * range measurements as follows :Enabled:=0.25mm resolution, + * Not Enabled:=1mm resolution. + * + * @note This function Accesses the device + * + * @param Dev Device Handle + * @param pEnable Output Parameter reporting the fraction enable state. + * + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetFractionEnable(VL53L0X_DEV Dev, + uint8_t *pEnable); + +/** + * @brief Set a new Histogram mode + * @par Function Description + * Set device to a new Histogram mode + * + * @note This function doesn't Access to the device + * + * @param Dev Device Handle + * @param HistogramMode New device mode to apply + * Valid values are: + * VL53L0X_HISTOGRAMMODE_DISABLED + * VL53L0X_DEVICEMODE_SINGLE_HISTOGRAM + * VL53L0X_HISTOGRAMMODE_REFERENCE_ONLY + * VL53L0X_HISTOGRAMMODE_RETURN_ONLY + * VL53L0X_HISTOGRAMMODE_BOTH + * + * @return VL53L0X_ERROR_NONE Success + * @return VL53L0X_ERROR_MODE_NOT_SUPPORTED This error occurs when + * HistogramMode is not in the supported list + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_SetHistogramMode(VL53L0X_DEV Dev, + VL53L0X_HistogramModes HistogramMode); + +/** + * @brief Get current new device mode + * @par Function Description + * Get current Histogram mode of a Device + * + * @note This function doesn't Access to the device + * + * @param Dev Device Handle + * @param pHistogramMode Pointer to current Histogram Mode value + * Valid values are: + * VL53L0X_HISTOGRAMMODE_DISABLED + * VL53L0X_DEVICEMODE_SINGLE_HISTOGRAM + * VL53L0X_HISTOGRAMMODE_REFERENCE_ONLY + * VL53L0X_HISTOGRAMMODE_RETURN_ONLY + * VL53L0X_HISTOGRAMMODE_BOTH + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetHistogramMode(VL53L0X_DEV Dev, + VL53L0X_HistogramModes *pHistogramMode); + +/** + * @brief Set Ranging Timing Budget in microseconds + * + * @par Function Description + * Defines the maximum time allowed by the user to the device to run a + * full ranging sequence for the current mode (ranging, histogram, ASL ...) + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param MeasurementTimingBudgetMicroSeconds Max measurement time in + * microseconds. + * Valid values are: + * >= 17000 microsecs when wraparound enabled + * >= 12000 microsecs when wraparound disabled + * @return VL53L0X_ERROR_NONE Success + * @return VL53L0X_ERROR_INVALID_PARAMS This error is returned if + MeasurementTimingBudgetMicroSeconds out of range + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_SetMeasurementTimingBudgetMicroSeconds( + VL53L0X_DEV Dev, uint32_t MeasurementTimingBudgetMicroSeconds); + +/** + * @brief Get Ranging Timing Budget in microseconds + * + * @par Function Description + * Returns the programmed the maximum time allowed by the user to the + * device to run a full ranging sequence for the current mode + * (ranging, histogram, ASL ...) + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param pMeasurementTimingBudgetMicroSeconds Max measurement time in + * microseconds. + * Valid values are: + * >= 17000 microsecs when wraparound enabled + * >= 12000 microsecs when wraparound disabled + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetMeasurementTimingBudgetMicroSeconds( + VL53L0X_DEV Dev, uint32_t *pMeasurementTimingBudgetMicroSeconds); + +/** + * @brief Gets the VCSEL pulse period. + * + * @par Function Description + * This function retrieves the VCSEL pulse period for the given period type. + * + * @note This function Accesses the device + * + * @param Dev Device Handle + * @param VcselPeriodType VCSEL period identifier (pre-range|final). + * @param pVCSELPulsePeriod Pointer to VCSEL period value. + * @return VL53L0X_ERROR_NONE Success + * @return VL53L0X_ERROR_INVALID_PARAMS Error VcselPeriodType parameter not + * supported. + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetVcselPulsePeriod(VL53L0X_DEV Dev, + VL53L0X_VcselPeriod VcselPeriodType, uint8_t *pVCSELPulsePeriod); + +/** + * @brief Sets the VCSEL pulse period. + * + * @par Function Description + * This function retrieves the VCSEL pulse period for the given period type. + * + * @note This function Accesses the device + * + * @param Dev Device Handle + * @param VcselPeriodType VCSEL period identifier (pre-range|final). + * @param VCSELPulsePeriod VCSEL period value + * @return VL53L0X_ERROR_NONE Success + * @return VL53L0X_ERROR_INVALID_PARAMS Error VcselPeriodType parameter not + * supported. + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_SetVcselPulsePeriod(VL53L0X_DEV Dev, + VL53L0X_VcselPeriod VcselPeriodType, uint8_t VCSELPulsePeriod); + +/** + * @brief Sets the (on/off) state of a requested sequence step. + * + * @par Function Description + * This function enables/disables a requested sequence step. + * + * @note This function Accesses the device + * + * @param Dev Device Handle + * @param SequenceStepId Sequence step identifier. + * @param SequenceStepEnabled Demanded state {0=Off,1=On} + * is enabled. + * @return VL53L0X_ERROR_NONE Success + * @return VL53L0X_ERROR_INVALID_PARAMS Error SequenceStepId parameter not + * supported. + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_SetSequenceStepEnable(VL53L0X_DEV Dev, + VL53L0X_SequenceStepId SequenceStepId, uint8_t SequenceStepEnabled); + +/** + * @brief Gets the (on/off) state of a requested sequence step. + * + * @par Function Description + * This function retrieves the state of a requested sequence step, i.e. on/off. + * + * @note This function Accesses the device + * + * @param Dev Device Handle + * @param SequenceStepId Sequence step identifier. + * @param pSequenceStepEnabled Out parameter reporting if the sequence step + * is enabled {0=Off,1=On}. + * @return VL53L0X_ERROR_NONE Success + * @return VL53L0X_ERROR_INVALID_PARAMS Error SequenceStepId parameter not + * supported. + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetSequenceStepEnable(VL53L0X_DEV Dev, + VL53L0X_SequenceStepId SequenceStepId, uint8_t *pSequenceStepEnabled); + +/** + * @brief Gets the (on/off) state of all sequence steps. + * + * @par Function Description + * This function retrieves the state of all sequence step in the scheduler. + * + * @note This function Accesses the device + * + * @param Dev Device Handle + * @param pSchedulerSequenceSteps Pointer to struct containing result. + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetSequenceStepEnables(VL53L0X_DEV Dev, + VL53L0X_SchedulerSequenceSteps_t *pSchedulerSequenceSteps); + +/** + * @brief Sets the timeout of a requested sequence step. + * + * @par Function Description + * This function sets the timeout of a requested sequence step. + * + * @note This function Accesses the device + * + * @param Dev Device Handle + * @param SequenceStepId Sequence step identifier. + * @param TimeOutMilliSecs Demanded timeout + * @return VL53L0X_ERROR_NONE Success + * @return VL53L0X_ERROR_INVALID_PARAMS Error SequenceStepId parameter not + * supported. + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_SetSequenceStepTimeout(VL53L0X_DEV Dev, + VL53L0X_SequenceStepId SequenceStepId, FixPoint1616_t TimeOutMilliSecs); + +/** + * @brief Gets the timeout of a requested sequence step. + * + * @par Function Description + * This function retrieves the timeout of a requested sequence step. + * + * @note This function Accesses the device + * + * @param Dev Device Handle + * @param SequenceStepId Sequence step identifier. + * @param pTimeOutMilliSecs Timeout value. + * @return VL53L0X_ERROR_NONE Success + * @return VL53L0X_ERROR_INVALID_PARAMS Error SequenceStepId parameter not + * supported. + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetSequenceStepTimeout(VL53L0X_DEV Dev, + VL53L0X_SequenceStepId SequenceStepId, + FixPoint1616_t *pTimeOutMilliSecs); + +/** + * @brief Gets number of sequence steps managed by the API. + * + * @par Function Description + * This function retrieves the number of sequence steps currently managed + * by the API + * + * @note This function Accesses the device + * + * @param Dev Device Handle + * @param pNumberOfSequenceSteps Out parameter reporting the number of + * sequence steps. + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetNumberOfSequenceSteps(VL53L0X_DEV Dev, + uint8_t *pNumberOfSequenceSteps); + +/** + * @brief Gets the name of a given sequence step. + * + * @par Function Description + * This function retrieves the name of sequence steps corresponding to + * SequenceStepId. + * + * @note This function doesn't Accesses the device + * + * @param SequenceStepId Sequence step identifier. + * @param pSequenceStepsString Pointer to Info string + * + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetSequenceStepsInfo( + VL53L0X_SequenceStepId SequenceStepId, char *pSequenceStepsString); + +/** + * Program continuous mode Inter-Measurement period in milliseconds + * + * @par Function Description + * When trying to set too short time return INVALID_PARAMS minimal value + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param InterMeasurementPeriodMilliSeconds Inter-Measurement Period in ms. + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_SetInterMeasurementPeriodMilliSeconds( + VL53L0X_DEV Dev, uint32_t InterMeasurementPeriodMilliSeconds); + +/** + * Get continuous mode Inter-Measurement period in milliseconds + * + * @par Function Description + * When trying to set too short time return INVALID_PARAMS minimal value + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param pInterMeasurementPeriodMilliSeconds Pointer to programmed + * Inter-Measurement Period in milliseconds. + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetInterMeasurementPeriodMilliSeconds( + VL53L0X_DEV Dev, uint32_t *pInterMeasurementPeriodMilliSeconds); + +/** + * @brief Enable/Disable Cross talk compensation feature + * + * @note This function is not Implemented. + * Enable/Disable Cross Talk by set to zero the Cross Talk value + * by using @a VL53L0X_SetXTalkCompensationRateMegaCps(). + * + * @param Dev Device Handle + * @param XTalkCompensationEnable Cross talk compensation + * to be set 0=disabled else = enabled + * @return VL53L0X_ERROR_NOT_IMPLEMENTED Not implemented + */ +VL53L0X_API VL53L0X_Error VL53L0X_SetXTalkCompensationEnable(VL53L0X_DEV Dev, + uint8_t XTalkCompensationEnable); + +/** + * @brief Get Cross talk compensation rate + * + * @note This function is not Implemented. + * Enable/Disable Cross Talk by set to zero the Cross Talk value by + * using @a VL53L0X_SetXTalkCompensationRateMegaCps(). + * + * @param Dev Device Handle + * @param pXTalkCompensationEnable Pointer to the Cross talk compensation + * state 0=disabled or 1 = enabled + * @return VL53L0X_ERROR_NOT_IMPLEMENTED Not implemented + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetXTalkCompensationEnable(VL53L0X_DEV Dev, + uint8_t *pXTalkCompensationEnable); + +/** + * @brief Set Cross talk compensation rate + * + * @par Function Description + * Set Cross talk compensation rate. + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param XTalkCompensationRateMegaCps Compensation rate in + * Mega counts per second (16.16 fix point) see datasheet for details + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_SetXTalkCompensationRateMegaCps(VL53L0X_DEV Dev, + FixPoint1616_t XTalkCompensationRateMegaCps); + +/** + * @brief Get Cross talk compensation rate + * + * @par Function Description + * Get Cross talk compensation rate. + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param pXTalkCompensationRateMegaCps Pointer to Compensation rate + in Mega counts per second (16.16 fix point) see datasheet for details + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetXTalkCompensationRateMegaCps(VL53L0X_DEV Dev, + FixPoint1616_t *pXTalkCompensationRateMegaCps); + +/** + * @brief Set Reference Calibration Parameters + * + * @par Function Description + * Set Reference Calibration Parameters. + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param VhvSettings Parameter for VHV + * @param PhaseCal Parameter for PhaseCal + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_SetRefCalibration(VL53L0X_DEV Dev, + uint8_t VhvSettings, uint8_t PhaseCal); + +/** + * @brief Get Reference Calibration Parameters + * + * @par Function Description + * Get Reference Calibration Parameters. + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param pVhvSettings Pointer to VHV parameter + * @param pPhaseCal Pointer to PhaseCal Parameter + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetRefCalibration(VL53L0X_DEV Dev, + uint8_t *pVhvSettings, uint8_t *pPhaseCal); + +/** + * @brief Get the number of the check limit managed by a given Device + * + * @par Function Description + * This function give the number of the check limit managed by the Device + * + * @note This function doesn't Access to the device + * + * @param pNumberOfLimitCheck Pointer to the number of check limit. + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetNumberOfLimitCheck( + uint16_t *pNumberOfLimitCheck); + +/** + * @brief Return a description string for a given limit check number + * + * @par Function Description + * This function returns a description string for a given limit check number. + * The limit check is identified with the LimitCheckId. + * + * @note This function doesn't Access to the device + * + * @param Dev Device Handle + * @param LimitCheckId Limit Check ID + (0<= LimitCheckId < VL53L0X_GetNumberOfLimitCheck() ). + * @param pLimitCheckString Pointer to the + description string of the given check limit. + * @return VL53L0X_ERROR_NONE Success + * @return VL53L0X_ERROR_INVALID_PARAMS This error is + returned when LimitCheckId value is out of range. + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetLimitCheckInfo(VL53L0X_DEV Dev, + uint16_t LimitCheckId, char *pLimitCheckString); + +/** + * @brief Return a the Status of the specified check limit + * + * @par Function Description + * This function returns the Status of the specified check limit. + * The value indicate if the check is fail or not. + * The limit check is identified with the LimitCheckId. + * + * @note This function doesn't Access to the device + * + * @param Dev Device Handle + * @param LimitCheckId Limit Check ID + (0<= LimitCheckId < VL53L0X_GetNumberOfLimitCheck() ). + * @param pLimitCheckStatus Pointer to the + Limit Check Status of the given check limit. + * LimitCheckStatus : + * 0 the check is not fail + * 1 the check if fail or not enabled + * + * @return VL53L0X_ERROR_NONE Success + * @return VL53L0X_ERROR_INVALID_PARAMS This error is + returned when LimitCheckId value is out of range. + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetLimitCheckStatus(VL53L0X_DEV Dev, + uint16_t LimitCheckId, uint8_t *pLimitCheckStatus); + +/** + * @brief Enable/Disable a specific limit check + * + * @par Function Description + * This function Enable/Disable a specific limit check. + * The limit check is identified with the LimitCheckId. + * + * @note This function doesn't Access to the device + * + * @param Dev Device Handle + * @param LimitCheckId Limit Check ID + * (0<= LimitCheckId < VL53L0X_GetNumberOfLimitCheck() ). + * @param LimitCheckEnable if 1 the check limit + * corresponding to LimitCheckId is Enabled + * if 0 the check limit + * corresponding to LimitCheckId is disabled + * @return VL53L0X_ERROR_NONE Success + * @return VL53L0X_ERROR_INVALID_PARAMS This error is returned + * when LimitCheckId value is out of range. + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_SetLimitCheckEnable(VL53L0X_DEV Dev, + uint16_t LimitCheckId, uint8_t LimitCheckEnable); + +/** + * @brief Get specific limit check enable state + * + * @par Function Description + * This function get the enable state of a specific limit check. + * The limit check is identified with the LimitCheckId. + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param LimitCheckId Limit Check ID + * (0<= LimitCheckId < VL53L0X_GetNumberOfLimitCheck() ). + * @param pLimitCheckEnable Pointer to the check limit enable + * value. + * if 1 the check limit + * corresponding to LimitCheckId is Enabled + * if 0 the check limit + * corresponding to LimitCheckId is disabled + * @return VL53L0X_ERROR_NONE Success + * @return VL53L0X_ERROR_INVALID_PARAMS This error is returned + * when LimitCheckId value is out of range. + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetLimitCheckEnable(VL53L0X_DEV Dev, + uint16_t LimitCheckId, uint8_t *pLimitCheckEnable); + +/** + * @brief Set a specific limit check value + * + * @par Function Description + * This function set a specific limit check value. + * The limit check is identified with the LimitCheckId. + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param LimitCheckId Limit Check ID + * (0<= LimitCheckId < VL53L0X_GetNumberOfLimitCheck() ). + * @param LimitCheckValue Limit check Value for a given + * LimitCheckId + * @return VL53L0X_ERROR_NONE Success + * @return VL53L0X_ERROR_INVALID_PARAMS This error is returned when either + * LimitCheckId or LimitCheckValue value is out of range. + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_SetLimitCheckValue(VL53L0X_DEV Dev, + uint16_t LimitCheckId, FixPoint1616_t LimitCheckValue); + +/** + * @brief Get a specific limit check value + * + * @par Function Description + * This function get a specific limit check value from device then it updates + * internal values and check enables. + * The limit check is identified with the LimitCheckId. + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param LimitCheckId Limit Check ID + * (0<= LimitCheckId < VL53L0X_GetNumberOfLimitCheck() ). + * @param pLimitCheckValue Pointer to Limit + * check Value for a given LimitCheckId. + * @return VL53L0X_ERROR_NONE Success + * @return VL53L0X_ERROR_INVALID_PARAMS This error is returned + * when LimitCheckId value is out of range. + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetLimitCheckValue(VL53L0X_DEV Dev, + uint16_t LimitCheckId, FixPoint1616_t *pLimitCheckValue); + +/** + * @brief Get the current value of the signal used for the limit check + * + * @par Function Description + * This function get a the current value of the signal used for the limit check. + * To obtain the latest value you should run a ranging before. + * The value reported is linked to the limit check identified with the + * LimitCheckId. + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param LimitCheckId Limit Check ID + * (0<= LimitCheckId < VL53L0X_GetNumberOfLimitCheck() ). + * @param pLimitCheckCurrent Pointer to current Value for a + * given LimitCheckId. + * @return VL53L0X_ERROR_NONE Success + * @return VL53L0X_ERROR_INVALID_PARAMS This error is returned when + * LimitCheckId value is out of range. + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetLimitCheckCurrent(VL53L0X_DEV Dev, + uint16_t LimitCheckId, FixPoint1616_t *pLimitCheckCurrent); + +/** + * @brief Enable (or disable) Wrap around Check + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param WrapAroundCheckEnable Wrap around Check to be set + * 0=disabled, other = enabled + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_SetWrapAroundCheckEnable(VL53L0X_DEV Dev, + uint8_t WrapAroundCheckEnable); + +/** + * @brief Get setup of Wrap around Check + * + * @par Function Description + * This function get the wrapAround check enable parameters + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param pWrapAroundCheckEnable Pointer to the Wrap around Check state + * 0=disabled or 1 = enabled + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetWrapAroundCheckEnable(VL53L0X_DEV Dev, + uint8_t *pWrapAroundCheckEnable); + +/** + * @brief Set Dmax Calibration Parameters for a given device + * When one of the parameter is zero, this function will get parameter + * from NVM. + * @note This function doesn't Access to the device + * + * @param Dev Device Handle + * @param RangeMilliMeter Calibration Distance + * @param SignalRateRtnMegaCps Signal rate return read at CalDistance + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_SetDmaxCalParameters(VL53L0X_DEV Dev, + uint16_t RangeMilliMeter, FixPoint1616_t SignalRateRtnMegaCps); + +/** + * @brief Get Dmax Calibration Parameters for a given device + * + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param pRangeMilliMeter Pointer to Calibration Distance + * @param pSignalRateRtnMegaCps Pointer to Signal rate return + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetDmaxCalParameters(VL53L0X_DEV Dev, + uint16_t *pRangeMilliMeter, FixPoint1616_t *pSignalRateRtnMegaCps); + +/** @} VL53L0X_parameters_group */ + +/** @defgroup VL53L0X_measurement_group VL53L0X Measurement Functions + * @brief Functions used for the measurements + * @{ + */ + +/** + * @brief Single shot measurement. + * + * @par Function Description + * Perform simple measurement sequence (Start measure, Wait measure to end, + * and returns when measurement is done). + * Once function returns, user can get valid data by calling + * VL53L0X_GetRangingMeasurement or VL53L0X_GetHistogramMeasurement + * depending on defined measurement mode + * User should Clear the interrupt in case this are enabled by using the + * function VL53L0X_ClearInterruptMask(). + * + * @warning This function is a blocking function + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_PerformSingleMeasurement(VL53L0X_DEV Dev); + +/** + * @brief Perform Reference Calibration + * + * @details Perform a reference calibration of the Device. + * This function should be run from time to time before doing + * a ranging measurement. + * This function will launch a special ranging measurement, so + * if interrupt are enable an interrupt will be done. + * This function will clear the interrupt generated automatically. + * + * @warning This function is a blocking function + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param pVhvSettings Pointer to vhv settings parameter. + * @param pPhaseCal Pointer to PhaseCal parameter. + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_PerformRefCalibration(VL53L0X_DEV Dev, + uint8_t *pVhvSettings, uint8_t *pPhaseCal); + +/** + * @brief Perform XTalk Measurement + * + * @details Measures the current cross talk from glass in front + * of the sensor. + * This functions performs a histogram measurement and uses the results + * to measure the crosstalk. For the function to be successful, there + * must be no target in front of the sensor. + * + * @warning This function is a blocking function + * + * @warning This function is not supported when the final range + * vcsel clock period is set below 10 PCLKS. + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param TimeoutMs Histogram measurement duration. + * @param pXtalkPerSpad Output parameter containing the crosstalk + * measurement result, in MCPS/Spad. Format fixpoint 16:16. + * @param pAmbientTooHigh Output parameter which indicate that + * pXtalkPerSpad is not good if the Ambient is too high. + * @return VL53L0X_ERROR_NONE Success + * @return VL53L0X_ERROR_INVALID_PARAMS vcsel clock period not supported + * for this operation. Must not be less than 10PCLKS. + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_PerformXTalkMeasurement(VL53L0X_DEV Dev, + uint32_t TimeoutMs, FixPoint1616_t *pXtalkPerSpad, + uint8_t *pAmbientTooHigh); + +/** + * @brief Perform XTalk Calibration + * + * @details Perform a XTalk calibration of the Device. + * This function will launch a ranging measurement, if interrupts + * are enabled an interrupt will be done. + * This function will clear the interrupt generated automatically. + * This function will program a new value for the XTalk compensation + * and it will enable the cross talk before exit. + * This function will disable the VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD. + * + * @warning This function is a blocking function + * + * @note This function Access to the device + * + * @note This function change the device mode to + * VL53L0X_DEVICEMODE_SINGLE_RANGING + * + * @param Dev Device Handle + * @param XTalkCalDistance XTalkCalDistance value used for the XTalk + * computation. + * @param pXTalkCompensationRateMegaCps Pointer to new + * XTalkCompensation value. + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_PerformXTalkCalibration(VL53L0X_DEV Dev, + FixPoint1616_t XTalkCalDistance, + FixPoint1616_t *pXTalkCompensationRateMegaCps); + +/** + * @brief Perform Offset Calibration + * + * @details Perform a Offset calibration of the Device. + * This function will launch a ranging measurement, if interrupts are + * enabled an interrupt will be done. + * This function will clear the interrupt generated automatically. + * This function will program a new value for the Offset calibration value + * This function will disable the VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD. + * + * @warning This function is a blocking function + * + * @note This function Access to the device + * + * @note This function does not change the device mode. + * + * @param Dev Device Handle + * @param CalDistanceMilliMeter Calibration distance value used for the + * offset compensation. + * @param pOffsetMicroMeter Pointer to new Offset value computed by the + * function. + * + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_PerformOffsetCalibration(VL53L0X_DEV Dev, + FixPoint1616_t CalDistanceMilliMeter, int32_t *pOffsetMicroMeter); + +/** + * @brief Start device measurement + * + * @details Started measurement will depend on device parameters set through + * @a VL53L0X_SetParameters() + * This is a non-blocking function. + * This function will change the VL53L0X_State from VL53L0X_STATE_IDLE to + * VL53L0X_STATE_RUNNING. + * + * @note This function Access to the device + * + + * @param Dev Device Handle + * @return VL53L0X_ERROR_NONE Success + * @return VL53L0X_ERROR_MODE_NOT_SUPPORTED This error occurs when + * DeviceMode programmed with @a VL53L0X_SetDeviceMode is not in the supported + * list: + * Supported mode are: + * VL53L0X_DEVICEMODE_SINGLE_RANGING, + * VL53L0X_DEVICEMODE_CONTINUOUS_RANGING, + * VL53L0X_DEVICEMODE_CONTINUOUS_TIMED_RANGING + * @return VL53L0X_ERROR_TIME_OUT Time out on start measurement + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_StartMeasurement(VL53L0X_DEV Dev); + +/** + * @brief Stop device measurement + * + * @details Will set the device in standby mode at end of current measurement\n + * Not necessary in single mode as device shall return automatically + * in standby mode at end of measurement. + * This function will change the VL53L0X_State from VL53L0X_STATE_RUNNING + * to VL53L0X_STATE_IDLE. + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_StopMeasurement(VL53L0X_DEV Dev); + +/** + * @brief Return Measurement Data Ready + * + * @par Function Description + * This function indicate that a measurement data is ready. + * This function check if interrupt mode is used then check is done accordingly. + * If perform function clear the interrupt, this function will not work, + * like in case of @a VL53L0X_PerformSingleRangingMeasurement(). + * The previous function is blocking function, VL53L0X_GetMeasurementDataReady + * is used for non-blocking capture. + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param pMeasurementDataReady Pointer to Measurement Data Ready. + * 0=data not ready, 1 = data ready + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetMeasurementDataReady(VL53L0X_DEV Dev, + uint8_t *pMeasurementDataReady); + +/** + * @brief Wait for device ready for a new measurement command. + * Blocking function. + * + * @note This function is not Implemented + * + * @param Dev Device Handle + * @param MaxLoop Max Number of polling loop (timeout). + * @return VL53L0X_ERROR_NOT_IMPLEMENTED Not implemented + */ +VL53L0X_API VL53L0X_Error VL53L0X_WaitDeviceReadyForNewMeasurement(VL53L0X_DEV Dev, + uint32_t MaxLoop); + +/** + * @brief Retrieve the Reference Signal after a measurements + * + * @par Function Description + * Get Reference Signal from last successful Ranging measurement + * This function return a valid value after that you call the + * @a VL53L0X_GetRangingMeasurementData(). + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param pMeasurementRefSignal Pointer to the Ref Signal to fill up. + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetMeasurementRefSignal(VL53L0X_DEV Dev, + FixPoint1616_t *pMeasurementRefSignal); + +/** + * @brief Retrieve the measurements from device for a given setup + * + * @par Function Description + * Get data from last successful Ranging measurement + * @warning USER should take care about @a VL53L0X_GetNumberOfROIZones() + * before get data. + * PAL will fill a NumberOfROIZones times the corresponding data + * structure used in the measurement function. + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param pRangingMeasurementData Pointer to the data structure to fill up. + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetRangingMeasurementData(VL53L0X_DEV Dev, + VL53L0X_RangingMeasurementData_t *pRangingMeasurementData); + +/** + * @brief Retrieve the measurements from device for a given setup + * + * @par Function Description + * Get data from last successful Histogram measurement + * @warning USER should take care about @a VL53L0X_GetNumberOfROIZones() + * before get data. + * PAL will fill a NumberOfROIZones times the corresponding data structure + * used in the measurement function. + * + * @note This function is not Implemented + * + * @param Dev Device Handle + * @param pHistogramMeasurementData Pointer to the histogram data structure. + * @return VL53L0X_ERROR_NOT_IMPLEMENTED Not implemented + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetHistogramMeasurementData(VL53L0X_DEV Dev, + VL53L0X_HistogramMeasurementData_t *pHistogramMeasurementData); + +/** + * @brief Performs a single ranging measurement and retrieve the ranging + * measurement data + * + * @par Function Description + * This function will change the device mode to VL53L0X_DEVICEMODE_SINGLE_RANGING + * with @a VL53L0X_SetDeviceMode(), + * It performs measurement with @a VL53L0X_PerformSingleMeasurement() + * It get data from last successful Ranging measurement with + * @a VL53L0X_GetRangingMeasurementData. + * Finally it clear the interrupt with @a VL53L0X_ClearInterruptMask(). + * + * @note This function Access to the device + * + * @note This function change the device mode to + * VL53L0X_DEVICEMODE_SINGLE_RANGING + * + * @param Dev Device Handle + * @param pRangingMeasurementData Pointer to the data structure to fill up. + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_PerformSingleRangingMeasurement(VL53L0X_DEV Dev, + VL53L0X_RangingMeasurementData_t *pRangingMeasurementData); + +/** + * @brief Performs a single histogram measurement and retrieve the histogram + * measurement data + * Is equivalent to VL53L0X_PerformSingleMeasurement + + * VL53L0X_GetHistogramMeasurementData + * + * @par Function Description + * Get data from last successful Ranging measurement. + * This function will clear the interrupt in case of these are enabled. + * + * @note This function is not Implemented + * + * @param Dev Device Handle + * @param pHistogramMeasurementData Pointer to the data structure to fill up. + * @return VL53L0X_ERROR_NOT_IMPLEMENTED Not implemented + */ +VL53L0X_API VL53L0X_Error VL53L0X_PerformSingleHistogramMeasurement(VL53L0X_DEV Dev, + VL53L0X_HistogramMeasurementData_t *pHistogramMeasurementData); + +/** + * @brief Set the number of ROI Zones to be used for a specific Device + * + * @par Function Description + * Set the number of ROI Zones to be used for a specific Device. + * The programmed value should be less than the max number of ROI Zones given + * with @a VL53L0X_GetMaxNumberOfROIZones(). + * This version of API manage only one zone. + * + * @param Dev Device Handle + * @param NumberOfROIZones Number of ROI Zones to be used for a + * specific Device. + * @return VL53L0X_ERROR_NONE Success + * @return VL53L0X_ERROR_INVALID_PARAMS This error is returned if + * NumberOfROIZones != 1 + */ +VL53L0X_API VL53L0X_Error VL53L0X_SetNumberOfROIZones(VL53L0X_DEV Dev, + uint8_t NumberOfROIZones); + +/** + * @brief Get the number of ROI Zones managed by the Device + * + * @par Function Description + * Get number of ROI Zones managed by the Device + * USER should take care about @a VL53L0X_GetNumberOfROIZones() + * before get data after a perform measurement. + * PAL will fill a NumberOfROIZones times the corresponding data + * structure used in the measurement function. + * + * @note This function doesn't Access to the device + * + * @param Dev Device Handle + * @param pNumberOfROIZones Pointer to the Number of ROI Zones value. + * @return VL53L0X_ERROR_NONE Success + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetNumberOfROIZones(VL53L0X_DEV Dev, + uint8_t *pNumberOfROIZones); + +/** + * @brief Get the Maximum number of ROI Zones managed by the Device + * + * @par Function Description + * Get Maximum number of ROI Zones managed by the Device. + * + * @note This function doesn't Access to the device + * + * @param Dev Device Handle + * @param pMaxNumberOfROIZones Pointer to the Maximum Number + * of ROI Zones value. + * @return VL53L0X_ERROR_NONE Success + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetMaxNumberOfROIZones(VL53L0X_DEV Dev, + uint8_t *pMaxNumberOfROIZones); + +/** @} VL53L0X_measurement_group */ + +/** @defgroup VL53L0X_interrupt_group VL53L0X Interrupt Functions + * @brief Functions used for interrupt managements + * @{ + */ + +/** + * @brief Set the configuration of GPIO pin for a given device + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param Pin ID of the GPIO Pin + * @param Functionality Select Pin functionality. + * Refer to ::VL53L0X_GpioFunctionality + * @param DeviceMode Device Mode associated to the Gpio. + * @param Polarity Set interrupt polarity. Active high + * or active low see ::VL53L0X_InterruptPolarity + * @return VL53L0X_ERROR_NONE Success + * @return VL53L0X_ERROR_GPIO_NOT_EXISTING Only Pin=0 is accepted. + * @return VL53L0X_ERROR_GPIO_FUNCTIONALITY_NOT_SUPPORTED This error occurs + * when Functionality programmed is not in the supported list: + * Supported value are: + * VL53L0X_GPIOFUNCTIONALITY_OFF, + * VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_LOW, + * VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_HIGH, + VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_OUT, + * VL53L0X_GPIOFUNCTIONALITY_NEW_MEASURE_READY + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_SetGpioConfig(VL53L0X_DEV Dev, uint8_t Pin, + VL53L0X_DeviceModes DeviceMode, VL53L0X_GpioFunctionality Functionality, + VL53L0X_InterruptPolarity Polarity); + +/** + * @brief Get current configuration for GPIO pin for a given device + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param Pin ID of the GPIO Pin + * @param pDeviceMode Pointer to Device Mode associated to the Gpio. + * @param pFunctionality Pointer to Pin functionality. + * Refer to ::VL53L0X_GpioFunctionality + * @param pPolarity Pointer to interrupt polarity. + * Active high or active low see ::VL53L0X_InterruptPolarity + * @return VL53L0X_ERROR_NONE Success + * @return VL53L0X_ERROR_GPIO_NOT_EXISTING Only Pin=0 is accepted. + * @return VL53L0X_ERROR_GPIO_FUNCTIONALITY_NOT_SUPPORTED This error occurs + * when Functionality programmed is not in the supported list: + * Supported value are: + * VL53L0X_GPIOFUNCTIONALITY_OFF, + * VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_LOW, + * VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_HIGH, + * VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_OUT, + * VL53L0X_GPIOFUNCTIONALITY_NEW_MEASURE_READY + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetGpioConfig(VL53L0X_DEV Dev, uint8_t Pin, + VL53L0X_DeviceModes *pDeviceMode, + VL53L0X_GpioFunctionality *pFunctionality, + VL53L0X_InterruptPolarity *pPolarity); + +/** + * @brief Set low and high Interrupt thresholds for a given mode + * (ranging, ALS, ...) for a given device + * + * @par Function Description + * Set low and high Interrupt thresholds for a given mode (ranging, ALS, ...) + * for a given device + * + * @note This function Access to the device + * + * @note DeviceMode is ignored for the current device + * + * @param Dev Device Handle + * @param DeviceMode Device Mode for which change thresholds + * @param ThresholdLow Low threshold (mm, lux ..., depending on the mode) + * @param ThresholdHigh High threshold (mm, lux ..., depending on the mode) + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_SetInterruptThresholds(VL53L0X_DEV Dev, + VL53L0X_DeviceModes DeviceMode, FixPoint1616_t ThresholdLow, + FixPoint1616_t ThresholdHigh); + +/** + * @brief Get high and low Interrupt thresholds for a given mode + * (ranging, ALS, ...) for a given device + * + * @par Function Description + * Get high and low Interrupt thresholds for a given mode (ranging, ALS, ...) + * for a given device + * + * @note This function Access to the device + * + * @note DeviceMode is ignored for the current device + * + * @param Dev Device Handle + * @param DeviceMode Device Mode from which read thresholds + * @param pThresholdLow Low threshold (mm, lux ..., depending on the mode) + * @param pThresholdHigh High threshold (mm, lux ..., depending on the mode) + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetInterruptThresholds(VL53L0X_DEV Dev, + VL53L0X_DeviceModes DeviceMode, FixPoint1616_t *pThresholdLow, + FixPoint1616_t *pThresholdHigh); + +/** + * @brief Return device stop completion status + * + * @par Function Description + * Returns stop completiob status. + * User shall call this function after a stop command + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param pStopStatus Pointer to status variable to update + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetStopCompletedStatus(VL53L0X_DEV Dev, + uint32_t *pStopStatus); + + +/** + * @brief Clear given system interrupt condition + * + * @par Function Description + * Clear given interrupt(s). + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param InterruptMask Mask of interrupts to clear + * @return VL53L0X_ERROR_NONE Success + * @return VL53L0X_ERROR_INTERRUPT_NOT_CLEARED Cannot clear interrupts + * + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_ClearInterruptMask(VL53L0X_DEV Dev, + uint32_t InterruptMask); + +/** + * @brief Return device interrupt status + * + * @par Function Description + * Returns currently raised interrupts by the device. + * User shall be able to activate/deactivate interrupts through + * @a VL53L0X_SetGpioConfig() + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param pInterruptMaskStatus Pointer to status variable to update + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetInterruptMaskStatus(VL53L0X_DEV Dev, + uint32_t *pInterruptMaskStatus); + +/** + * @brief Configure ranging interrupt reported to system + * + * @note This function is not Implemented + * + * @param Dev Device Handle + * @param InterruptMask Mask of interrupt to Enable/disable + * (0:interrupt disabled or 1: interrupt enabled) + * @return VL53L0X_ERROR_NOT_IMPLEMENTED Not implemented + */ +VL53L0X_API VL53L0X_Error VL53L0X_EnableInterruptMask(VL53L0X_DEV Dev, + uint32_t InterruptMask); + +/** @} VL53L0X_interrupt_group */ + +/** @defgroup VL53L0X_SPADfunctions_group VL53L0X SPAD Functions + * @brief Functions used for SPAD managements + * @{ + */ + +/** + * @brief Set the SPAD Ambient Damper Threshold value + * + * @par Function Description + * This function set the SPAD Ambient Damper Threshold value + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param SpadAmbientDamperThreshold SPAD Ambient Damper Threshold value + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_SetSpadAmbientDamperThreshold(VL53L0X_DEV Dev, + uint16_t SpadAmbientDamperThreshold); + +/** + * @brief Get the current SPAD Ambient Damper Threshold value + * + * @par Function Description + * This function get the SPAD Ambient Damper Threshold value + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param pSpadAmbientDamperThreshold Pointer to programmed + * SPAD Ambient Damper Threshold value + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetSpadAmbientDamperThreshold(VL53L0X_DEV Dev, + uint16_t *pSpadAmbientDamperThreshold); + +/** + * @brief Set the SPAD Ambient Damper Factor value + * + * @par Function Description + * This function set the SPAD Ambient Damper Factor value + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param SpadAmbientDamperFactor SPAD Ambient Damper Factor value + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_SetSpadAmbientDamperFactor(VL53L0X_DEV Dev, + uint16_t SpadAmbientDamperFactor); + +/** + * @brief Get the current SPAD Ambient Damper Factor value + * + * @par Function Description + * This function get the SPAD Ambient Damper Factor value + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param pSpadAmbientDamperFactor Pointer to programmed SPAD Ambient + * Damper Factor value + * @return VL53L0X_ERROR_NONE Success + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetSpadAmbientDamperFactor(VL53L0X_DEV Dev, + uint16_t *pSpadAmbientDamperFactor); + +/** + * @brief Performs Reference Spad Management + * + * @par Function Description + * The reference SPAD initialization procedure determines the minimum amount + * of reference spads to be enables to achieve a target reference signal rate + * and should be performed once during initialization. + * + * @note This function Access to the device + * + * @note This function change the device mode to + * VL53L0X_DEVICEMODE_SINGLE_RANGING + * + * @param Dev Device Handle + * @param refSpadCount Reports ref Spad Count + * @param isApertureSpads Reports if spads are of type + * aperture or non-aperture. + * 1:=aperture, 0:=Non-Aperture + * @return VL53L0X_ERROR_NONE Success + * @return VL53L0X_ERROR_REF_SPAD_INIT Error in the Ref Spad procedure. + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_PerformRefSpadManagement(VL53L0X_DEV Dev, + uint32_t *refSpadCount, uint8_t *isApertureSpads); + +/** + * @brief Applies Reference SPAD configuration + * + * @par Function Description + * This function applies a given number of reference spads, identified as + * either Aperture or Non-Aperture. + * The requested spad count and type are stored within the device specific + * parameters data for access by the host. + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param refSpadCount Number of ref spads. + * @param isApertureSpads Defines if spads are of type + * aperture or non-aperture. + * 1:=aperture, 0:=Non-Aperture + * @return VL53L0X_ERROR_NONE Success + * @return VL53L0X_ERROR_REF_SPAD_INIT Error in the in the reference + * spad configuration. + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_SetReferenceSpads(VL53L0X_DEV Dev, + uint32_t refSpadCount, uint8_t isApertureSpads); + +/** + * @brief Retrieves SPAD configuration + * + * @par Function Description + * This function retrieves the current number of applied reference spads + * and also their type : Aperture or Non-Aperture. + * + * @note This function Access to the device + * + * @param Dev Device Handle + * @param refSpadCount Number ref Spad Count + * @param isApertureSpads Reports if spads are of type + * aperture or non-aperture. + * 1:=aperture, 0:=Non-Aperture + * @return VL53L0X_ERROR_NONE Success + * @return VL53L0X_ERROR_REF_SPAD_INIT Error in the in the reference + * spad configuration. + * @return "Other error code" See ::VL53L0X_Error + */ +VL53L0X_API VL53L0X_Error VL53L0X_GetReferenceSpads(VL53L0X_DEV Dev, + uint32_t *refSpadCount, uint8_t *isApertureSpads); + +/** @} VL53L0X_SPADfunctions_group */ + +/** @} VL53L0X_cut11_group */ + +#ifdef __cplusplus +} +#endif + +#endif /* _VL53L0X_API_H_ */ diff --git a/modules/VL53L0X/inc/vl53l0x_api_calibration.h b/modules/VL53L0X/inc/vl53l0x_api_calibration.h new file mode 100644 index 0000000..9f9739a --- /dev/null +++ b/modules/VL53L0X/inc/vl53l0x_api_calibration.h @@ -0,0 +1,85 @@ +/******************************************************************************* +Copyright 2016, STMicroelectronics International N.V. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of STMicroelectronics nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND +NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED. +IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*******************************************************************************/ + +#ifndef _VL53L0X_API_CALIBRATION_H_ +#define _VL53L0X_API_CALIBRATION_H_ + +#include "vl53l0x_def.h" +#include "vl53l0x_platform.h" + + +#ifdef __cplusplus +extern "C" { +#endif + +VL53L0X_Error VL53L0X_perform_xtalk_calibration(VL53L0X_DEV Dev, + FixPoint1616_t XTalkCalDistance, + FixPoint1616_t *pXTalkCompensationRateMegaCps); + +VL53L0X_Error VL53L0X_perform_offset_calibration(VL53L0X_DEV Dev, + FixPoint1616_t CalDistanceMilliMeter, + int32_t *pOffsetMicroMeter); + +VL53L0X_Error VL53L0X_set_offset_calibration_data_micro_meter(VL53L0X_DEV Dev, + int32_t OffsetCalibrationDataMicroMeter); + +VL53L0X_Error VL53L0X_get_offset_calibration_data_micro_meter(VL53L0X_DEV Dev, + int32_t *pOffsetCalibrationDataMicroMeter); + +VL53L0X_Error VL53L0X_apply_offset_adjustment(VL53L0X_DEV Dev); + +VL53L0X_Error VL53L0X_perform_ref_spad_management(VL53L0X_DEV Dev, + uint32_t *refSpadCount, uint8_t *isApertureSpads); + +VL53L0X_Error VL53L0X_set_reference_spads(VL53L0X_DEV Dev, + uint32_t count, uint8_t isApertureSpads); + +VL53L0X_Error VL53L0X_get_reference_spads(VL53L0X_DEV Dev, + uint32_t *pSpadCount, uint8_t *pIsApertureSpads); + +VL53L0X_Error VL53L0X_perform_phase_calibration(VL53L0X_DEV Dev, + uint8_t *pPhaseCal, const uint8_t get_data_enable, + const uint8_t restore_config); + +VL53L0X_Error VL53L0X_perform_ref_calibration(VL53L0X_DEV Dev, + uint8_t *pVhvSettings, uint8_t *pPhaseCal, uint8_t get_data_enable); + +VL53L0X_Error VL53L0X_set_ref_calibration(VL53L0X_DEV Dev, + uint8_t VhvSettings, uint8_t PhaseCal); + +VL53L0X_Error VL53L0X_get_ref_calibration(VL53L0X_DEV Dev, + uint8_t *pVhvSettings, uint8_t *pPhaseCal); + + + + +#ifdef __cplusplus +} +#endif + +#endif /* _VL53L0X_API_CALIBRATION_H_ */ diff --git a/modules/VL53L0X/inc/vl53l0x_api_core.h b/modules/VL53L0X/inc/vl53l0x_api_core.h new file mode 100644 index 0000000..91f2042 --- /dev/null +++ b/modules/VL53L0X/inc/vl53l0x_api_core.h @@ -0,0 +1,108 @@ +/******************************************************************************* +Copyright 2016, STMicroelectronics International N.V. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of STMicroelectronics nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND +NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED. +IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*******************************************************************************/ + +#ifndef _VL53L0X_API_CORE_H_ +#define _VL53L0X_API_CORE_H_ + +#include "vl53l0x_def.h" +#include "vl53l0x_platform.h" + + +#ifdef __cplusplus +extern "C" { +#endif + + +VL53L0X_Error VL53L0X_reverse_bytes(uint8_t *data, uint32_t size); + +VL53L0X_Error VL53L0X_measurement_poll_for_completion(VL53L0X_DEV Dev); + +uint8_t VL53L0X_encode_vcsel_period(uint8_t vcsel_period_pclks); + +uint8_t VL53L0X_decode_vcsel_period(uint8_t vcsel_period_reg); + +uint32_t VL53L0X_isqrt(uint32_t num); + +uint32_t VL53L0X_quadrature_sum(uint32_t a, uint32_t b); + +VL53L0X_Error VL53L0X_get_info_from_device(VL53L0X_DEV Dev, uint8_t option); + +VL53L0X_Error VL53L0X_set_vcsel_pulse_period(VL53L0X_DEV Dev, + VL53L0X_VcselPeriod VcselPeriodType, uint8_t VCSELPulsePeriodPCLK); + +VL53L0X_Error VL53L0X_get_vcsel_pulse_period(VL53L0X_DEV Dev, + VL53L0X_VcselPeriod VcselPeriodType, uint8_t *pVCSELPulsePeriodPCLK); + +uint32_t VL53L0X_decode_timeout(uint16_t encoded_timeout); + +VL53L0X_Error get_sequence_step_timeout(VL53L0X_DEV Dev, + VL53L0X_SequenceStepId SequenceStepId, + uint32_t *pTimeOutMicroSecs); + +VL53L0X_Error set_sequence_step_timeout(VL53L0X_DEV Dev, + VL53L0X_SequenceStepId SequenceStepId, + uint32_t TimeOutMicroSecs); + +VL53L0X_Error VL53L0X_set_measurement_timing_budget_micro_seconds(VL53L0X_DEV Dev, + uint32_t MeasurementTimingBudgetMicroSeconds); + +VL53L0X_Error VL53L0X_get_measurement_timing_budget_micro_seconds(VL53L0X_DEV Dev, + uint32_t *pMeasurementTimingBudgetMicroSeconds); + +VL53L0X_Error VL53L0X_load_tuning_settings(VL53L0X_DEV Dev, + uint8_t *pTuningSettingBuffer); + +VL53L0X_Error VL53L0X_calc_sigma_estimate(VL53L0X_DEV Dev, + VL53L0X_RangingMeasurementData_t *pRangingMeasurementData, + FixPoint1616_t *pSigmaEstimate, uint32_t *pDmax_mm); + +VL53L0X_Error VL53L0X_get_total_xtalk_rate(VL53L0X_DEV Dev, + VL53L0X_RangingMeasurementData_t *pRangingMeasurementData, + FixPoint1616_t *ptotal_xtalk_rate_mcps); + +VL53L0X_Error VL53L0X_get_total_signal_rate(VL53L0X_DEV Dev, + VL53L0X_RangingMeasurementData_t *pRangingMeasurementData, + FixPoint1616_t *ptotal_signal_rate_mcps); + +VL53L0X_Error VL53L0X_get_pal_range_status(VL53L0X_DEV Dev, + uint8_t DeviceRangeStatus, + FixPoint1616_t SignalRate, + uint16_t EffectiveSpadRtnCount, + VL53L0X_RangingMeasurementData_t *pRangingMeasurementData, + uint8_t *pPalRangeStatus); + +uint32_t VL53L0X_calc_timeout_mclks(VL53L0X_DEV Dev, + uint32_t timeout_period_us, uint8_t vcsel_period_pclks); + +uint16_t VL53L0X_encode_timeout(uint32_t timeout_macro_clks); + +#ifdef __cplusplus +} +#endif + +#endif /* _VL53L0X_API_CORE_H_ */ diff --git a/modules/VL53L0X/inc/vl53l0x_api_ranging.h b/modules/VL53L0X/inc/vl53l0x_api_ranging.h new file mode 100644 index 0000000..6d9f4b0 --- /dev/null +++ b/modules/VL53L0X/inc/vl53l0x_api_ranging.h @@ -0,0 +1,47 @@ +/******************************************************************************* +Copyright 2016, STMicroelectronics International N.V. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of STMicroelectronics nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND +NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED. +IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*******************************************************************************/ + +#ifndef _VL53L0X_API_RANGING_H_ +#define _VL53L0X_API_RANGING_H_ + +#include "vl53l0x_def.h" +#include "vl53l0x_platform.h" + + +#ifdef __cplusplus +extern "C" { +#endif + + + + +#ifdef __cplusplus +} +#endif + +#endif /* _VL53L0X_API_RANGING_H_ */ diff --git a/modules/VL53L0X/inc/vl53l0x_api_strings.h b/modules/VL53L0X/inc/vl53l0x_api_strings.h new file mode 100644 index 0000000..20d594a --- /dev/null +++ b/modules/VL53L0X/inc/vl53l0x_api_strings.h @@ -0,0 +1,277 @@ +/******************************************************************************* +Copyright 2016, STMicroelectronics International N.V. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of STMicroelectronics nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND +NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED. +IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*******************************************************************************/ + +#ifndef VL53L0X_API_STRINGS_H_ +#define VL53L0X_API_STRINGS_H_ + +#include "vl53l0x_def.h" +#include "vl53l0x_platform.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +VL53L0X_Error VL53L0X_get_device_info(VL53L0X_DEV Dev, + VL53L0X_DeviceInfo_t *pVL53L0X_DeviceInfo); + +VL53L0X_Error VL53L0X_get_device_error_string(VL53L0X_DeviceError ErrorCode, + char *pDeviceErrorString); + +VL53L0X_Error VL53L0X_get_range_status_string(uint8_t RangeStatus, + char *pRangeStatusString); + +VL53L0X_Error VL53L0X_get_pal_error_string(VL53L0X_Error PalErrorCode, + char *pPalErrorString); + +VL53L0X_Error VL53L0X_get_pal_state_string(VL53L0X_State PalStateCode, + char *pPalStateString); + +VL53L0X_Error VL53L0X_get_sequence_steps_info( + VL53L0X_SequenceStepId SequenceStepId, + char *pSequenceStepsString); + +VL53L0X_Error VL53L0X_get_limit_check_info(VL53L0X_DEV Dev, uint16_t LimitCheckId, + char *pLimitCheckString); + + +#ifdef USE_EMPTY_STRING + #define VL53L0X_STRING_DEVICE_INFO_NAME "" + #define VL53L0X_STRING_DEVICE_INFO_NAME_TS0 "" + #define VL53L0X_STRING_DEVICE_INFO_NAME_TS1 "" + #define VL53L0X_STRING_DEVICE_INFO_NAME_TS2 "" + #define VL53L0X_STRING_DEVICE_INFO_NAME_ES1 "" + #define VL53L0X_STRING_DEVICE_INFO_TYPE "" + + /* PAL ERROR strings */ + #define VL53L0X_STRING_ERROR_NONE "" + #define VL53L0X_STRING_ERROR_CALIBRATION_WARNING "" + #define VL53L0X_STRING_ERROR_MIN_CLIPPED "" + #define VL53L0X_STRING_ERROR_UNDEFINED "" + #define VL53L0X_STRING_ERROR_INVALID_PARAMS "" + #define VL53L0X_STRING_ERROR_NOT_SUPPORTED "" + #define VL53L0X_STRING_ERROR_RANGE_ERROR "" + #define VL53L0X_STRING_ERROR_TIME_OUT "" + #define VL53L0X_STRING_ERROR_MODE_NOT_SUPPORTED "" + #define VL53L0X_STRING_ERROR_BUFFER_TOO_SMALL "" + #define VL53L0X_STRING_ERROR_GPIO_NOT_EXISTING "" + #define VL53L0X_STRING_ERROR_GPIO_FUNCTIONALITY_NOT_SUPPORTED "" + #define VL53L0X_STRING_ERROR_CONTROL_INTERFACE "" + #define VL53L0X_STRING_ERROR_INVALID_COMMAND "" + #define VL53L0X_STRING_ERROR_DIVISION_BY_ZERO "" + #define VL53L0X_STRING_ERROR_REF_SPAD_INIT "" + #define VL53L0X_STRING_ERROR_NOT_IMPLEMENTED "" + + #define VL53L0X_STRING_UNKNOW_ERROR_CODE "" + + + + /* Range Status */ + #define VL53L0X_STRING_RANGESTATUS_NONE "" + #define VL53L0X_STRING_RANGESTATUS_RANGEVALID "" + #define VL53L0X_STRING_RANGESTATUS_SIGMA "" + #define VL53L0X_STRING_RANGESTATUS_SIGNAL "" + #define VL53L0X_STRING_RANGESTATUS_MINRANGE "" + #define VL53L0X_STRING_RANGESTATUS_PHASE "" + #define VL53L0X_STRING_RANGESTATUS_HW "" + + + /* Range Status */ + #define VL53L0X_STRING_STATE_POWERDOWN "" + #define VL53L0X_STRING_STATE_WAIT_STATICINIT "" + #define VL53L0X_STRING_STATE_STANDBY "" + #define VL53L0X_STRING_STATE_IDLE "" + #define VL53L0X_STRING_STATE_RUNNING "" + #define VL53L0X_STRING_STATE_UNKNOWN "" + #define VL53L0X_STRING_STATE_ERROR "" + + + /* Device Specific */ + #define VL53L0X_STRING_DEVICEERROR_NONE "" + #define VL53L0X_STRING_DEVICEERROR_VCSELCONTINUITYTESTFAILURE "" + #define VL53L0X_STRING_DEVICEERROR_VCSELWATCHDOGTESTFAILURE "" + #define VL53L0X_STRING_DEVICEERROR_NOVHVVALUEFOUND "" + #define VL53L0X_STRING_DEVICEERROR_MSRCNOTARGET "" + #define VL53L0X_STRING_DEVICEERROR_SNRCHECK "" + #define VL53L0X_STRING_DEVICEERROR_RANGEPHASECHECK "" + #define VL53L0X_STRING_DEVICEERROR_SIGMATHRESHOLDCHECK "" + #define VL53L0X_STRING_DEVICEERROR_TCC "" + #define VL53L0X_STRING_DEVICEERROR_PHASECONSISTENCY "" + #define VL53L0X_STRING_DEVICEERROR_MINCLIP "" + #define VL53L0X_STRING_DEVICEERROR_RANGECOMPLETE "" + #define VL53L0X_STRING_DEVICEERROR_ALGOUNDERFLOW "" + #define VL53L0X_STRING_DEVICEERROR_ALGOOVERFLOW "" + #define VL53L0X_STRING_DEVICEERROR_RANGEIGNORETHRESHOLD "" + #define VL53L0X_STRING_DEVICEERROR_UNKNOWN "" + + /* Check Enable */ + #define VL53L0X_STRING_CHECKENABLE_SIGMA_FINAL_RANGE "" + #define VL53L0X_STRING_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE "" + #define VL53L0X_STRING_CHECKENABLE_SIGNAL_REF_CLIP "" + #define VL53L0X_STRING_CHECKENABLE_RANGE_IGNORE_THRESHOLD "" + + /* Sequence Step */ + #define VL53L0X_STRING_SEQUENCESTEP_TCC "" + #define VL53L0X_STRING_SEQUENCESTEP_DSS "" + #define VL53L0X_STRING_SEQUENCESTEP_MSRC "" + #define VL53L0X_STRING_SEQUENCESTEP_PRE_RANGE "" + #define VL53L0X_STRING_SEQUENCESTEP_FINAL_RANGE "" +#else + #define VL53L0X_STRING_DEVICE_INFO_NAME "VL53L0X cut1.0" + #define VL53L0X_STRING_DEVICE_INFO_NAME_TS0 "VL53L0X TS0" + #define VL53L0X_STRING_DEVICE_INFO_NAME_TS1 "VL53L0X TS1" + #define VL53L0X_STRING_DEVICE_INFO_NAME_TS2 "VL53L0X TS2" + #define VL53L0X_STRING_DEVICE_INFO_NAME_ES1 "VL53L0X ES1 or later" + #define VL53L0X_STRING_DEVICE_INFO_TYPE "VL53L0X" + + /* PAL ERROR strings */ + #define VL53L0X_STRING_ERROR_NONE \ + "No Error" + #define VL53L0X_STRING_ERROR_CALIBRATION_WARNING \ + "Calibration Warning Error" + #define VL53L0X_STRING_ERROR_MIN_CLIPPED \ + "Min clipped error" + #define VL53L0X_STRING_ERROR_UNDEFINED \ + "Undefined error" + #define VL53L0X_STRING_ERROR_INVALID_PARAMS \ + "Invalid parameters error" + #define VL53L0X_STRING_ERROR_NOT_SUPPORTED \ + "Not supported error" + #define VL53L0X_STRING_ERROR_RANGE_ERROR \ + "Range error" + #define VL53L0X_STRING_ERROR_TIME_OUT \ + "Time out error" + #define VL53L0X_STRING_ERROR_MODE_NOT_SUPPORTED \ + "Mode not supported error" + #define VL53L0X_STRING_ERROR_BUFFER_TOO_SMALL \ + "Buffer too small" + #define VL53L0X_STRING_ERROR_GPIO_NOT_EXISTING \ + "GPIO not existing" + #define VL53L0X_STRING_ERROR_GPIO_FUNCTIONALITY_NOT_SUPPORTED \ + "GPIO funct not supported" + #define VL53L0X_STRING_ERROR_INTERRUPT_NOT_CLEARED \ + "Interrupt not Cleared" + #define VL53L0X_STRING_ERROR_CONTROL_INTERFACE \ + "Control Interface Error" + #define VL53L0X_STRING_ERROR_INVALID_COMMAND \ + "Invalid Command Error" + #define VL53L0X_STRING_ERROR_DIVISION_BY_ZERO \ + "Division by zero Error" + #define VL53L0X_STRING_ERROR_REF_SPAD_INIT \ + "Reference Spad Init Error" + #define VL53L0X_STRING_ERROR_NOT_IMPLEMENTED \ + "Not implemented error" + + #define VL53L0X_STRING_UNKNOW_ERROR_CODE \ + "Unknown Error Code" + + + + /* Range Status */ + #define VL53L0X_STRING_RANGESTATUS_NONE "No Update " + #define VL53L0X_STRING_RANGESTATUS_RANGEVALID "Range Valid " + #define VL53L0X_STRING_RANGESTATUS_SIGMA "Sigma Fail " + #define VL53L0X_STRING_RANGESTATUS_SIGNAL "Signal Fail " + #define VL53L0X_STRING_RANGESTATUS_MINRANGE "Min Range Fail" + #define VL53L0X_STRING_RANGESTATUS_PHASE "Phase Fail " + #define VL53L0X_STRING_RANGESTATUS_HW "Hardware Fail " + + + /* Range Status */ + #define VL53L0X_STRING_STATE_POWERDOWN "POWERDOWN State" + #define VL53L0X_STRING_STATE_WAIT_STATICINIT \ + "Wait for staticinit State" + #define VL53L0X_STRING_STATE_STANDBY "STANDBY State" + #define VL53L0X_STRING_STATE_IDLE "IDLE State" + #define VL53L0X_STRING_STATE_RUNNING "RUNNING State" + #define VL53L0X_STRING_STATE_UNKNOWN "UNKNOWN State" + #define VL53L0X_STRING_STATE_ERROR "ERROR State" + + + /* Device Specific */ + #define VL53L0X_STRING_DEVICEERROR_NONE "No Update" + #define VL53L0X_STRING_DEVICEERROR_VCSELCONTINUITYTESTFAILURE \ + "VCSEL Continuity Test Failure" + #define VL53L0X_STRING_DEVICEERROR_VCSELWATCHDOGTESTFAILURE \ + "VCSEL Watchdog Test Failure" + #define VL53L0X_STRING_DEVICEERROR_NOVHVVALUEFOUND \ + "No VHV Value found" + #define VL53L0X_STRING_DEVICEERROR_MSRCNOTARGET \ + "MSRC No Target Error" + #define VL53L0X_STRING_DEVICEERROR_SNRCHECK \ + "SNR Check Exit" + #define VL53L0X_STRING_DEVICEERROR_RANGEPHASECHECK \ + "Range Phase Check Error" + #define VL53L0X_STRING_DEVICEERROR_SIGMATHRESHOLDCHECK \ + "Sigma Threshold Check Error" + #define VL53L0X_STRING_DEVICEERROR_TCC \ + "TCC Error" + #define VL53L0X_STRING_DEVICEERROR_PHASECONSISTENCY \ + "Phase Consistency Error" + #define VL53L0X_STRING_DEVICEERROR_MINCLIP \ + "Min Clip Error" + #define VL53L0X_STRING_DEVICEERROR_RANGECOMPLETE \ + "Range Complete" + #define VL53L0X_STRING_DEVICEERROR_ALGOUNDERFLOW \ + "Range Algo Underflow Error" + #define VL53L0X_STRING_DEVICEERROR_ALGOOVERFLOW \ + "Range Algo Overlow Error" + #define VL53L0X_STRING_DEVICEERROR_RANGEIGNORETHRESHOLD \ + "Range Ignore Threshold Error" + #define VL53L0X_STRING_DEVICEERROR_UNKNOWN \ + "Unknown error code" + + /* Check Enable */ + #define VL53L0X_STRING_CHECKENABLE_SIGMA_FINAL_RANGE \ + "SIGMA FINAL RANGE" + #define VL53L0X_STRING_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE \ + "SIGNAL RATE FINAL RANGE" + #define VL53L0X_STRING_CHECKENABLE_SIGNAL_REF_CLIP \ + "SIGNAL REF CLIP" + #define VL53L0X_STRING_CHECKENABLE_RANGE_IGNORE_THRESHOLD \ + "RANGE IGNORE THRESHOLD" + #define VL53L0X_STRING_CHECKENABLE_SIGNAL_RATE_MSRC \ + "SIGNAL RATE MSRC" + #define VL53L0X_STRING_CHECKENABLE_SIGNAL_RATE_PRE_RANGE \ + "SIGNAL RATE PRE RANGE" + + /* Sequence Step */ + #define VL53L0X_STRING_SEQUENCESTEP_TCC "TCC" + #define VL53L0X_STRING_SEQUENCESTEP_DSS "DSS" + #define VL53L0X_STRING_SEQUENCESTEP_MSRC "MSRC" + #define VL53L0X_STRING_SEQUENCESTEP_PRE_RANGE "PRE RANGE" + #define VL53L0X_STRING_SEQUENCESTEP_FINAL_RANGE "FINAL RANGE" +#endif /* USE_EMPTY_STRING */ + + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/modules/VL53L0X/inc/vl53l0x_cali.h b/modules/VL53L0X/inc/vl53l0x_cali.h new file mode 100644 index 0000000..d4b3309 --- /dev/null +++ b/modules/VL53L0X/inc/vl53l0x_cali.h @@ -0,0 +1,26 @@ +#ifndef __VL53L0X_CAIL_H +#define __VL53L0X_CAIL_H + +#include "bsp_vl53l0x.h" + + +//vl53l0x传感器校准信息结构体定义 +typedef struct packed_1 +{ + uint8_t adjustok; //校准成功标志,0XAA,已校准;其他,未校准 + uint8_t isApertureSpads; //ApertureSpads值 + uint8_t VhvSettings; //VhvSettings值 + uint8_t PhaseCal; //PhaseCal值 + uint32_t XTalkCalDistance; //XTalkCalDistance值 + uint32_t XTalkCompensationRateMegaCps;//XTalkCompensationRateMegaCps值 + uint32_t CalDistanceMilliMeter; //CalDistanceMilliMeter值 + int32_t OffsetMicroMeter; //OffsetMicroMeter值 + uint32_t refSpadCount; //refSpadCount值 + +}_vl53l0x_adjust; + +extern _vl53l0x_adjust Vl53l0x_data; + +void vl53l0x_calibration_test(VL53L0X_Dev_t *dev); + +#endif diff --git a/modules/VL53L0X/inc/vl53l0x_def.h b/modules/VL53L0X/inc/vl53l0x_def.h new file mode 100644 index 0000000..6c9af35 --- /dev/null +++ b/modules/VL53L0X/inc/vl53l0x_def.h @@ -0,0 +1,640 @@ +/******************************************************************************* +Copyright 2016, STMicroelectronics International N.V. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of STMicroelectronics nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND +NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED. +IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*******************************************************************************/ + +/** + * @file VL53L0X_def.h + * + * @brief Type definitions for VL53L0X API. + * + */ + + +#ifndef _VL53L0X_DEF_H_ +#define _VL53L0X_DEF_H_ + + +#ifdef __cplusplus +extern "C" { +#endif + +/** @defgroup VL53L0X_globaldefine_group VL53L0X Defines + * @brief VL53L0X Defines + * @{ + */ + + +/** PAL SPECIFICATION major version */ +#define VL53L0X10_SPECIFICATION_VER_MAJOR 1 +/** PAL SPECIFICATION minor version */ +#define VL53L0X10_SPECIFICATION_VER_MINOR 2 +/** PAL SPECIFICATION sub version */ +#define VL53L0X10_SPECIFICATION_VER_SUB 7 +/** PAL SPECIFICATION sub version */ +#define VL53L0X10_SPECIFICATION_VER_REVISION 1440 + +/** VL53L0X PAL IMPLEMENTATION major version */ +#define VL53L0X10_IMPLEMENTATION_VER_MAJOR 1 +/** VL53L0X PAL IMPLEMENTATION minor version */ +#define VL53L0X10_IMPLEMENTATION_VER_MINOR 0 +/** VL53L0X PAL IMPLEMENTATION sub version */ +#define VL53L0X10_IMPLEMENTATION_VER_SUB 9 +/** VL53L0X PAL IMPLEMENTATION sub version */ +#define VL53L0X10_IMPLEMENTATION_VER_REVISION 3673 + +/** PAL SPECIFICATION major version */ +#define VL53L0X_SPECIFICATION_VER_MAJOR 1 +/** PAL SPECIFICATION minor version */ +#define VL53L0X_SPECIFICATION_VER_MINOR 2 +/** PAL SPECIFICATION sub version */ +#define VL53L0X_SPECIFICATION_VER_SUB 7 +/** PAL SPECIFICATION sub version */ +#define VL53L0X_SPECIFICATION_VER_REVISION 1440 + +/** VL53L0X PAL IMPLEMENTATION major version */ +#define VL53L0X_IMPLEMENTATION_VER_MAJOR 1 +/** VL53L0X PAL IMPLEMENTATION minor version */ +#define VL53L0X_IMPLEMENTATION_VER_MINOR 0 +/** VL53L0X PAL IMPLEMENTATION sub version */ +#define VL53L0X_IMPLEMENTATION_VER_SUB 2 +/** VL53L0X PAL IMPLEMENTATION sub version */ +#define VL53L0X_IMPLEMENTATION_VER_REVISION 4823 +#define VL53L0X_DEFAULT_MAX_LOOP 2000 +#define VL53L0X_MAX_STRING_LENGTH 32 + + +#include "vl53l0x_device.h" +#include "vl53l0x_types.h" + + +/**************************************** + * PRIVATE define do not edit + ****************************************/ + +/** @brief Defines the parameters of the Get Version Functions + */ +typedef struct { + uint32_t revision; /*!< revision number */ + uint8_t major; /*!< major number */ + uint8_t minor; /*!< minor number */ + uint8_t build; /*!< build number */ +} VL53L0X_Version_t; + + +/** @brief Defines the parameters of the Get Device Info Functions + */ +typedef struct { + char Name[VL53L0X_MAX_STRING_LENGTH]; + /*!< Name of the Device e.g. Left_Distance */ + char Type[VL53L0X_MAX_STRING_LENGTH]; + /*!< Type of the Device e.g VL53L0X */ + char ProductId[VL53L0X_MAX_STRING_LENGTH]; + /*!< Product Identifier String */ + uint8_t ProductType; + /*!< Product Type, VL53L0X = 1, VL53L1 = 2 */ + uint8_t ProductRevisionMajor; + /*!< Product revision major */ + uint8_t ProductRevisionMinor; + /*!< Product revision minor */ +} VL53L0X_DeviceInfo_t; + + +/** @defgroup VL53L0X_define_Error_group Error and Warning code returned by API + * The following DEFINE are used to identify the PAL ERROR + * @{ + */ + +typedef int8_t VL53L0X_Error; + +#define VL53L0X_ERROR_NONE ((VL53L0X_Error) 0) +#define VL53L0X_ERROR_CALIBRATION_WARNING ((VL53L0X_Error) -1) + /*!< Warning invalid calibration data may be in used + \a VL53L0X_InitData() + \a VL53L0X_GetOffsetCalibrationData + \a VL53L0X_SetOffsetCalibrationData */ +#define VL53L0X_ERROR_MIN_CLIPPED ((VL53L0X_Error) -2) + /*!< Warning parameter passed was clipped to min before to be applied */ + +#define VL53L0X_ERROR_UNDEFINED ((VL53L0X_Error) -3) + /*!< Unqualified error */ +#define VL53L0X_ERROR_INVALID_PARAMS ((VL53L0X_Error) -4) + /*!< Parameter passed is invalid or out of range */ +#define VL53L0X_ERROR_NOT_SUPPORTED ((VL53L0X_Error) -5) + /*!< Function is not supported in current mode or configuration */ +#define VL53L0X_ERROR_RANGE_ERROR ((VL53L0X_Error) -6) + /*!< Device report a ranging error interrupt status */ +#define VL53L0X_ERROR_TIME_OUT ((VL53L0X_Error) -7) + /*!< Aborted due to time out */ +#define VL53L0X_ERROR_MODE_NOT_SUPPORTED ((VL53L0X_Error) -8) + /*!< Asked mode is not supported by the device */ +#define VL53L0X_ERROR_BUFFER_TOO_SMALL ((VL53L0X_Error) -9) + /*!< ... */ +#define VL53L0X_ERROR_GPIO_NOT_EXISTING ((VL53L0X_Error) -10) + /*!< User tried to setup a non-existing GPIO pin */ +#define VL53L0X_ERROR_GPIO_FUNCTIONALITY_NOT_SUPPORTED ((VL53L0X_Error) -11) + /*!< unsupported GPIO functionality */ +#define VL53L0X_ERROR_INTERRUPT_NOT_CLEARED ((VL53L0X_Error) -12) + /*!< Error during interrupt clear */ +#define VL53L0X_ERROR_CONTROL_INTERFACE ((VL53L0X_Error) -20) + /*!< error reported from IO functions */ +#define VL53L0X_ERROR_INVALID_COMMAND ((VL53L0X_Error) -30) + /*!< The command is not allowed in the current device state + * (power down) */ +#define VL53L0X_ERROR_DIVISION_BY_ZERO ((VL53L0X_Error) -40) + /*!< In the function a division by zero occurs */ +#define VL53L0X_ERROR_REF_SPAD_INIT ((VL53L0X_Error) -50) + /*!< Error during reference SPAD initialization */ +#define VL53L0X_ERROR_NOT_IMPLEMENTED ((VL53L0X_Error) -99) + /*!< Tells requested functionality has not been implemented yet or + * not compatible with the device */ +/** @} VL53L0X_define_Error_group */ + + +/** @defgroup VL53L0X_define_DeviceModes_group Defines Device modes + * Defines all possible modes for the device + * @{ + */ +typedef uint8_t VL53L0X_DeviceModes; + +#define VL53L0X_DEVICEMODE_SINGLE_RANGING ((VL53L0X_DeviceModes) 0) +#define VL53L0X_DEVICEMODE_CONTINUOUS_RANGING ((VL53L0X_DeviceModes) 1) +#define VL53L0X_DEVICEMODE_SINGLE_HISTOGRAM ((VL53L0X_DeviceModes) 2) +#define VL53L0X_DEVICEMODE_CONTINUOUS_TIMED_RANGING ((VL53L0X_DeviceModes) 3) +#define VL53L0X_DEVICEMODE_SINGLE_ALS ((VL53L0X_DeviceModes) 10) +#define VL53L0X_DEVICEMODE_GPIO_DRIVE ((VL53L0X_DeviceModes) 20) +#define VL53L0X_DEVICEMODE_GPIO_OSC ((VL53L0X_DeviceModes) 21) + /* ... Modes to be added depending on device */ +/** @} VL53L0X_define_DeviceModes_group */ + + + +/** @defgroup VL53L0X_define_HistogramModes_group Defines Histogram modes + * Defines all possible Histogram modes for the device + * @{ + */ +typedef uint8_t VL53L0X_HistogramModes; + +#define VL53L0X_HISTOGRAMMODE_DISABLED ((VL53L0X_HistogramModes) 0) + /*!< Histogram Disabled */ +#define VL53L0X_HISTOGRAMMODE_REFERENCE_ONLY ((VL53L0X_HistogramModes) 1) + /*!< Histogram Reference array only */ +#define VL53L0X_HISTOGRAMMODE_RETURN_ONLY ((VL53L0X_HistogramModes) 2) + /*!< Histogram Return array only */ +#define VL53L0X_HISTOGRAMMODE_BOTH ((VL53L0X_HistogramModes) 3) + /*!< Histogram both Reference and Return Arrays */ + /* ... Modes to be added depending on device */ +/** @} VL53L0X_define_HistogramModes_group */ + + +/** @defgroup VL53L0X_define_PowerModes_group List of available Power Modes + * List of available Power Modes + * @{ + */ + +typedef uint8_t VL53L0X_PowerModes; + +#define VL53L0X_POWERMODE_STANDBY_LEVEL1 ((VL53L0X_PowerModes) 0) + /*!< Standby level 1 */ +#define VL53L0X_POWERMODE_STANDBY_LEVEL2 ((VL53L0X_PowerModes) 1) + /*!< Standby level 2 */ +#define VL53L0X_POWERMODE_IDLE_LEVEL1 ((VL53L0X_PowerModes) 2) + /*!< Idle level 1 */ +#define VL53L0X_POWERMODE_IDLE_LEVEL2 ((VL53L0X_PowerModes) 3) + /*!< Idle level 2 */ + +/** @} VL53L0X_define_PowerModes_group */ + + +/** @brief Defines all parameters for the device + */ +typedef struct { + VL53L0X_DeviceModes DeviceMode; + /*!< Defines type of measurement to be done for the next measure */ + VL53L0X_HistogramModes HistogramMode; + /*!< Defines type of histogram measurement to be done for the next + * measure */ + uint32_t MeasurementTimingBudgetMicroSeconds; + /*!< Defines the allowed total time for a single measurement */ + uint32_t InterMeasurementPeriodMilliSeconds; + /*!< Defines time between two consecutive measurements (between two + * measurement starts). If set to 0 means back-to-back mode */ + uint8_t XTalkCompensationEnable; + /*!< Tells if Crosstalk compensation shall be enable or not */ + uint16_t XTalkCompensationRangeMilliMeter; + /*!< CrossTalk compensation range in millimeter */ + FixPoint1616_t XTalkCompensationRateMegaCps; + /*!< CrossTalk compensation rate in Mega counts per seconds. + * Expressed in 16.16 fixed point format. */ + int32_t RangeOffsetMicroMeters; + /*!< Range offset adjustment (mm). */ + + uint8_t LimitChecksEnable[VL53L0X_CHECKENABLE_NUMBER_OF_CHECKS]; + /*!< This Array store all the Limit Check enable for this device. */ + uint8_t LimitChecksStatus[VL53L0X_CHECKENABLE_NUMBER_OF_CHECKS]; + /*!< This Array store all the Status of the check linked to last + * measurement. */ + FixPoint1616_t LimitChecksValue[VL53L0X_CHECKENABLE_NUMBER_OF_CHECKS]; + /*!< This Array store all the Limit Check value for this device */ + + uint8_t WrapAroundCheckEnable; + /*!< Tells if Wrap Around Check shall be enable or not */ +} VL53L0X_DeviceParameters_t; + + +/** @defgroup VL53L0X_define_State_group Defines the current status of the device + * Defines the current status of the device + * @{ + */ + +typedef uint8_t VL53L0X_State; + +#define VL53L0X_STATE_POWERDOWN ((VL53L0X_State) 0) + /*!< Device is in HW reset */ +#define VL53L0X_STATE_WAIT_STATICINIT ((VL53L0X_State) 1) + /*!< Device is initialized and wait for static initialization */ +#define VL53L0X_STATE_STANDBY ((VL53L0X_State) 2) + /*!< Device is in Low power Standby mode */ +#define VL53L0X_STATE_IDLE ((VL53L0X_State) 3) + /*!< Device has been initialized and ready to do measurements */ +#define VL53L0X_STATE_RUNNING ((VL53L0X_State) 4) + /*!< Device is performing measurement */ +#define VL53L0X_STATE_UNKNOWN ((VL53L0X_State) 98) + /*!< Device is in unknown state and need to be rebooted */ +#define VL53L0X_STATE_ERROR ((VL53L0X_State) 99) + /*!< Device is in error state and need to be rebooted */ + +/** @} VL53L0X_define_State_group */ + + +/** @brief Structure containing the Dmax computation parameters and data + */ +typedef struct { + int32_t AmbTuningWindowFactor_K; + /*!< internal algo tuning (*1000) */ + int32_t RetSignalAt0mm; + /*!< intermediate dmax computation value caching */ +} VL53L0X_DMaxData_t; + +/** + * @struct VL53L0X_RangeData_t + * @brief Range measurement data. + */ +typedef struct { + uint32_t TimeStamp; /*!< 32-bit time stamp. */ + uint32_t MeasurementTimeUsec; + /*!< Give the Measurement time needed by the device to do the + * measurement.*/ + + + uint16_t RangeMilliMeter; /*!< range distance in millimeter. */ + + uint16_t RangeDMaxMilliMeter; + /*!< Tells what is the maximum detection distance of the device + * in current setup and environment conditions (Filled when + * applicable) */ + + FixPoint1616_t SignalRateRtnMegaCps; + /*!< Return signal rate (MCPS)\n these is a 16.16 fix point + * value, which is effectively a measure of target + * reflectance.*/ + FixPoint1616_t AmbientRateRtnMegaCps; + /*!< Return ambient rate (MCPS)\n these is a 16.16 fix point + * value, which is effectively a measure of the ambien + * t light.*/ + + uint16_t EffectiveSpadRtnCount; + /*!< Return the effective SPAD count for the return signal. + * To obtain Real value it should be divided by 256 */ + + uint8_t ZoneId; + /*!< Denotes which zone and range scheduler stage the range + * data relates to. */ + uint8_t RangeFractionalPart; + /*!< Fractional part of range distance. Final value is a + * FixPoint168 value. */ + uint8_t RangeStatus; + /*!< Range Status for the current measurement. This is device + * dependent. Value = 0 means value is valid. + * See \ref RangeStatusPage */ +} VL53L0X_RangingMeasurementData_t; + + +#define VL53L0X_HISTOGRAM_BUFFER_SIZE 24 + +/** + * @struct VL53L0X_HistogramData_t + * @brief Histogram measurement data. + */ +typedef struct { + /* Histogram Measurement data */ + uint32_t HistogramData[VL53L0X_HISTOGRAM_BUFFER_SIZE]; + /*!< Histogram data */ + uint8_t HistogramType; /*!< Indicate the types of histogram data : + Return only, Reference only, both Return and Reference */ + uint8_t FirstBin; /*!< First Bin value */ + uint8_t BufferSize; /*!< Buffer Size - Set by the user.*/ + uint8_t NumberOfBins; + /*!< Number of bins filled by the histogram measurement */ + + VL53L0X_DeviceError ErrorStatus; + /*!< Error status of the current measurement. \n + see @a ::VL53L0X_DeviceError @a VL53L0X_GetStatusErrorString() */ +} VL53L0X_HistogramMeasurementData_t; + +#define VL53L0X_REF_SPAD_BUFFER_SIZE 6 + +/** + * @struct VL53L0X_SpadData_t + * @brief Spad Configuration Data. + */ +typedef struct { + uint8_t RefSpadEnables[VL53L0X_REF_SPAD_BUFFER_SIZE]; + /*!< Reference Spad Enables */ + uint8_t RefGoodSpadMap[VL53L0X_REF_SPAD_BUFFER_SIZE]; + /*!< Reference Spad Good Spad Map */ +} VL53L0X_SpadData_t; + +typedef struct { + FixPoint1616_t OscFrequencyMHz; /* Frequency used */ + + uint16_t LastEncodedTimeout; + /* last encoded Time out used for timing budget*/ + + VL53L0X_GpioFunctionality Pin0GpioFunctionality; + /* store the functionality of the GPIO: pin0 */ + + uint32_t FinalRangeTimeoutMicroSecs; + /*!< Execution time of the final range*/ + uint8_t FinalRangeVcselPulsePeriod; + /*!< Vcsel pulse period (pll clocks) for the final range measurement*/ + uint32_t PreRangeTimeoutMicroSecs; + /*!< Execution time of the final range*/ + uint8_t PreRangeVcselPulsePeriod; + /*!< Vcsel pulse period (pll clocks) for the pre-range measurement*/ + + uint16_t SigmaEstRefArray; + /*!< Reference array sigma value in 1/100th of [mm] e.g. 100 = 1mm */ + uint16_t SigmaEstEffPulseWidth; + /*!< Effective Pulse width for sigma estimate in 1/100th + * of ns e.g. 900 = 9.0ns */ + uint16_t SigmaEstEffAmbWidth; + /*!< Effective Ambient width for sigma estimate in 1/100th of ns + * e.g. 500 = 5.0ns */ + + + uint8_t ReadDataFromDeviceDone; /* Indicate if read from device has + been done (==1) or not (==0) */ + uint8_t ModuleId; /* Module ID */ + uint8_t Revision; /* test Revision */ + char ProductId[VL53L0X_MAX_STRING_LENGTH]; + /* Product Identifier String */ + uint8_t ReferenceSpadCount; /* used for ref spad management */ + uint8_t ReferenceSpadType; /* used for ref spad management */ + uint8_t RefSpadsInitialised; /* reports if ref spads are initialised. */ + uint32_t PartUIDUpper; /*!< Unique Part ID Upper */ + uint32_t PartUIDLower; /*!< Unique Part ID Lower */ + FixPoint1616_t SignalRateMeasFixed400mm; /*!< Peek Signal rate + at 400 mm*/ + +} VL53L0X_DeviceSpecificParameters_t; + +/** + * @struct VL53L0X_DevData_t + * + * @brief VL53L0X PAL device ST private data structure \n + * End user should never access any of these field directly + * + * These must never access directly but only via macro + */ +typedef struct { + VL53L0X_DMaxData_t DMaxData; + /*!< Dmax Data */ + int32_t Part2PartOffsetNVMMicroMeter; + /*!< backed up NVM value */ + int32_t Part2PartOffsetAdjustmentNVMMicroMeter; + /*!< backed up NVM value representing additional offset adjustment */ + VL53L0X_DeviceParameters_t CurrentParameters; + /*!< Current Device Parameter */ + VL53L0X_RangingMeasurementData_t LastRangeMeasure; + /*!< Ranging Data */ + VL53L0X_HistogramMeasurementData_t LastHistogramMeasure; + /*!< Histogram Data */ + VL53L0X_DeviceSpecificParameters_t DeviceSpecificParameters; + /*!< Parameters specific to the device */ + VL53L0X_SpadData_t SpadData; + /*!< Spad Data */ + uint8_t SequenceConfig; + /*!< Internal value for the sequence config */ + uint8_t RangeFractionalEnable; + /*!< Enable/Disable fractional part of ranging data */ + VL53L0X_State PalState; + /*!< Current state of the PAL for this device */ + VL53L0X_PowerModes PowerMode; + /*!< Current Power Mode */ + uint16_t SigmaEstRefArray; + /*!< Reference array sigma value in 1/100th of [mm] e.g. 100 = 1mm */ + uint16_t SigmaEstEffPulseWidth; + /*!< Effective Pulse width for sigma estimate in 1/100th + * of ns e.g. 900 = 9.0ns */ + uint16_t SigmaEstEffAmbWidth; + /*!< Effective Ambient width for sigma estimate in 1/100th of ns + * e.g. 500 = 5.0ns */ + uint8_t StopVariable; + /*!< StopVariable used during the stop sequence */ + uint16_t targetRefRate; + /*!< Target Ambient Rate for Ref spad management */ + FixPoint1616_t SigmaEstimate; + /*!< Sigma Estimate - based on ambient & VCSEL rates and + * signal_total_events */ + FixPoint1616_t SignalEstimate; + /*!< Signal Estimate - based on ambient & VCSEL rates and cross talk */ + FixPoint1616_t LastSignalRefMcps; + /*!< Latest Signal ref in Mcps */ + uint8_t *pTuningSettingsPointer; + /*!< Pointer for Tuning Settings table */ + uint8_t UseInternalTuningSettings; + /*!< Indicate if we use Tuning Settings table */ + uint16_t LinearityCorrectiveGain; + /*!< Linearity Corrective Gain value in x1000 */ + uint16_t DmaxCalRangeMilliMeter; + /*!< Dmax Calibration Range millimeter */ + FixPoint1616_t DmaxCalSignalRateRtnMegaCps; + /*!< Dmax Calibration Signal Rate Return MegaCps */ + +} VL53L0X_DevData_t; + + +/** @defgroup VL53L0X_define_InterruptPolarity_group Defines the Polarity + * of the Interrupt + * Defines the Polarity of the Interrupt + * @{ + */ +typedef uint8_t VL53L0X_InterruptPolarity; + +#define VL53L0X_INTERRUPTPOLARITY_LOW ((VL53L0X_InterruptPolarity) 0) +/*!< Set active low polarity best setup for falling edge. */ +#define VL53L0X_INTERRUPTPOLARITY_HIGH ((VL53L0X_InterruptPolarity) 1) +/*!< Set active high polarity best setup for rising edge. */ + +/** @} VL53L0X_define_InterruptPolarity_group */ + + +/** @defgroup VL53L0X_define_VcselPeriod_group Vcsel Period Defines + * Defines the range measurement for which to access the vcsel period. + * @{ + */ +typedef uint8_t VL53L0X_VcselPeriod; + +#define VL53L0X_VCSEL_PERIOD_PRE_RANGE ((VL53L0X_VcselPeriod) 0) +/*!>9)&0xFFFF) +#define VL53L0X_FIXPOINT97TOFIXPOINT1616(Value) \ + (FixPoint1616_t)(Value<<9) + +#define VL53L0X_FIXPOINT1616TOFIXPOINT88(Value) \ + (uint16_t)((Value>>8)&0xFFFF) +#define VL53L0X_FIXPOINT88TOFIXPOINT1616(Value) \ + (FixPoint1616_t)(Value<<8) + +#define VL53L0X_FIXPOINT1616TOFIXPOINT412(Value) \ + (uint16_t)((Value>>4)&0xFFFF) +#define VL53L0X_FIXPOINT412TOFIXPOINT1616(Value) \ + (FixPoint1616_t)(Value<<4) + +#define VL53L0X_FIXPOINT1616TOFIXPOINT313(Value) \ + (uint16_t)((Value>>3)&0xFFFF) +#define VL53L0X_FIXPOINT313TOFIXPOINT1616(Value) \ + (FixPoint1616_t)(Value<<3) + +#define VL53L0X_FIXPOINT1616TOFIXPOINT08(Value) \ + (uint8_t)((Value>>8)&0x00FF) +#define VL53L0X_FIXPOINT08TOFIXPOINT1616(Value) \ + (FixPoint1616_t)(Value<<8) + +#define VL53L0X_FIXPOINT1616TOFIXPOINT53(Value) \ + (uint8_t)((Value>>13)&0x00FF) +#define VL53L0X_FIXPOINT53TOFIXPOINT1616(Value) \ + (FixPoint1616_t)(Value<<13) + +#define VL53L0X_FIXPOINT1616TOFIXPOINT102(Value) \ + (uint16_t)((Value>>14)&0x0FFF) +#define VL53L0X_FIXPOINT102TOFIXPOINT1616(Value) \ + (FixPoint1616_t)(Value<<12) + +#define VL53L0X_MAKEUINT16(lsb, msb) (uint16_t)((((uint16_t)msb)<<8) + \ + (uint16_t)lsb) + +/** @} VL53L0X_define_GeneralMacro_group */ + +/** @} VL53L0X_globaldefine_group */ + + + + + + + +#ifdef __cplusplus +} +#endif + + +#endif /* _VL53L0X_DEF_H_ */ diff --git a/modules/VL53L0X/inc/vl53l0x_device.h b/modules/VL53L0X/inc/vl53l0x_device.h new file mode 100644 index 0000000..dc010c2 --- /dev/null +++ b/modules/VL53L0X/inc/vl53l0x_device.h @@ -0,0 +1,257 @@ +/******************************************************************************* +Copyright 2016, STMicroelectronics International N.V. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of STMicroelectronics nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND +NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED. +IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*******************************************************************************/ + +/** + * Device specific defines. To be adapted by implementer for the targeted + * device. + */ + +#ifndef _VL53L0X_DEVICE_H_ +#define _VL53L0X_DEVICE_H_ + +#include "vl53l0x_types.h" + + +/** @defgroup VL53L0X_DevSpecDefines_group VL53L0X cut1.1 Device Specific Defines + * @brief VL53L0X cut1.1 Device Specific Defines + * @{ + */ + + +/** @defgroup VL53L0X_DeviceError_group Device Error + * @brief Device Error code + * + * This enum is Device specific it should be updated in the implementation + * Use @a VL53L0X_GetStatusErrorString() to get the string. + * It is related to Status Register of the Device. + * @{ + */ +typedef uint8_t VL53L0X_DeviceError; + +#define VL53L0X_DEVICEERROR_NONE ((VL53L0X_DeviceError) 0) + /*!< 0 NoError */ +#define VL53L0X_DEVICEERROR_VCSELCONTINUITYTESTFAILURE ((VL53L0X_DeviceError) 1) +#define VL53L0X_DEVICEERROR_VCSELWATCHDOGTESTFAILURE ((VL53L0X_DeviceError) 2) +#define VL53L0X_DEVICEERROR_NOVHVVALUEFOUND ((VL53L0X_DeviceError) 3) +#define VL53L0X_DEVICEERROR_MSRCNOTARGET ((VL53L0X_DeviceError) 4) +#define VL53L0X_DEVICEERROR_SNRCHECK ((VL53L0X_DeviceError) 5) +#define VL53L0X_DEVICEERROR_RANGEPHASECHECK ((VL53L0X_DeviceError) 6) +#define VL53L0X_DEVICEERROR_SIGMATHRESHOLDCHECK ((VL53L0X_DeviceError) 7) +#define VL53L0X_DEVICEERROR_TCC ((VL53L0X_DeviceError) 8) +#define VL53L0X_DEVICEERROR_PHASECONSISTENCY ((VL53L0X_DeviceError) 9) +#define VL53L0X_DEVICEERROR_MINCLIP ((VL53L0X_DeviceError) 10) +#define VL53L0X_DEVICEERROR_RANGECOMPLETE ((VL53L0X_DeviceError) 11) +#define VL53L0X_DEVICEERROR_ALGOUNDERFLOW ((VL53L0X_DeviceError) 12) +#define VL53L0X_DEVICEERROR_ALGOOVERFLOW ((VL53L0X_DeviceError) 13) +#define VL53L0X_DEVICEERROR_RANGEIGNORETHRESHOLD ((VL53L0X_DeviceError) 14) + +/** @} end of VL53L0X_DeviceError_group */ + + +/** @defgroup VL53L0X_CheckEnable_group Check Enable list + * @brief Check Enable code + * + * Define used to specify the LimitCheckId. + * Use @a VL53L0X_GetLimitCheckInfo() to get the string. + * @{ + */ + +#define VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE 0 +#define VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE 1 +#define VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP 2 +#define VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD 3 +#define VL53L0X_CHECKENABLE_SIGNAL_RATE_MSRC 4 +#define VL53L0X_CHECKENABLE_SIGNAL_RATE_PRE_RANGE 5 + +#define VL53L0X_CHECKENABLE_NUMBER_OF_CHECKS 6 + +/** @} end of VL53L0X_CheckEnable_group */ + + +/** @defgroup VL53L0X_GpioFunctionality_group Gpio Functionality + * @brief Defines the different functionalities for the device GPIO(s) + * @{ + */ +typedef uint8_t VL53L0X_GpioFunctionality; + +#define VL53L0X_GPIOFUNCTIONALITY_OFF \ + ((VL53L0X_GpioFunctionality) 0) /*!< NO Interrupt */ +#define VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_LOW \ + ((VL53L0X_GpioFunctionality) 1) /*!< Level Low (value < thresh_low) */ +#define VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_HIGH \ + ((VL53L0X_GpioFunctionality) 2) /*!< Level High (value > thresh_high) */ +#define VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_OUT \ + ((VL53L0X_GpioFunctionality) 3) + /*!< Out Of Window (value < thresh_low OR value > thresh_high) */ +#define VL53L0X_GPIOFUNCTIONALITY_NEW_MEASURE_READY \ + ((VL53L0X_GpioFunctionality) 4) /*!< New Sample Ready */ + +/** @} end of VL53L0X_GpioFunctionality_group */ + + +/* Device register map */ + +/** @defgroup VL53L0X_DefineRegisters_group Define Registers + * @brief List of all the defined registers + * @{ + */ +#define VL53L0X_REG_SYSRANGE_START 0x000 + /** mask existing bit in #VL53L0X_REG_SYSRANGE_START*/ + #define VL53L0X_REG_SYSRANGE_MODE_MASK 0x0F + /** bit 0 in #VL53L0X_REG_SYSRANGE_START write 1 toggle state in + * continuous mode and arm next shot in single shot mode */ + #define VL53L0X_REG_SYSRANGE_MODE_START_STOP 0x01 + /** bit 1 write 0 in #VL53L0X_REG_SYSRANGE_START set single shot mode */ + #define VL53L0X_REG_SYSRANGE_MODE_SINGLESHOT 0x00 + /** bit 1 write 1 in #VL53L0X_REG_SYSRANGE_START set back-to-back + * operation mode */ + #define VL53L0X_REG_SYSRANGE_MODE_BACKTOBACK 0x02 + /** bit 2 write 1 in #VL53L0X_REG_SYSRANGE_START set timed operation + * mode */ + #define VL53L0X_REG_SYSRANGE_MODE_TIMED 0x04 + /** bit 3 write 1 in #VL53L0X_REG_SYSRANGE_START set histogram operation + * mode */ + #define VL53L0X_REG_SYSRANGE_MODE_HISTOGRAM 0x08 + + +#define VL53L0X_REG_SYSTEM_THRESH_HIGH 0x000C +#define VL53L0X_REG_SYSTEM_THRESH_LOW 0x000E + + +#define VL53L0X_REG_SYSTEM_SEQUENCE_CONFIG 0x0001 +#define VL53L0X_REG_SYSTEM_RANGE_CONFIG 0x0009 +#define VL53L0X_REG_SYSTEM_INTERMEASUREMENT_PERIOD 0x0004 + + +#define VL53L0X_REG_SYSTEM_INTERRUPT_CONFIG_GPIO 0x000A + #define VL53L0X_REG_SYSTEM_INTERRUPT_GPIO_DISABLED 0x00 + #define VL53L0X_REG_SYSTEM_INTERRUPT_GPIO_LEVEL_LOW 0x01 + #define VL53L0X_REG_SYSTEM_INTERRUPT_GPIO_LEVEL_HIGH 0x02 + #define VL53L0X_REG_SYSTEM_INTERRUPT_GPIO_OUT_OF_WINDOW 0x03 + #define VL53L0X_REG_SYSTEM_INTERRUPT_GPIO_NEW_SAMPLE_READY 0x04 + +#define VL53L0X_REG_GPIO_HV_MUX_ACTIVE_HIGH 0x0084 + + +#define VL53L0X_REG_SYSTEM_INTERRUPT_CLEAR 0x000B + +/* Result registers */ +#define VL53L0X_REG_RESULT_INTERRUPT_STATUS 0x0013 +#define VL53L0X_REG_RESULT_RANGE_STATUS 0x0014 + +#define VL53L0X_REG_RESULT_CORE_PAGE 1 +#define VL53L0X_REG_RESULT_CORE_AMBIENT_WINDOW_EVENTS_RTN 0x00BC +#define VL53L0X_REG_RESULT_CORE_RANGING_TOTAL_EVENTS_RTN 0x00C0 +#define VL53L0X_REG_RESULT_CORE_AMBIENT_WINDOW_EVENTS_REF 0x00D0 +#define VL53L0X_REG_RESULT_CORE_RANGING_TOTAL_EVENTS_REF 0x00D4 +#define VL53L0X_REG_RESULT_PEAK_SIGNAL_RATE_REF 0x00B6 + +/* Algo register */ + +#define VL53L0X_REG_ALGO_PART_TO_PART_RANGE_OFFSET_MM 0x0028 + +#define VL53L0X_REG_I2C_SLAVE_DEVICE_ADDRESS 0x008a + +/* Check Limit registers */ +#define VL53L0X_REG_MSRC_CONFIG_CONTROL 0x0060 + +#define VL53L0X_REG_PRE_RANGE_CONFIG_MIN_SNR 0X0027 +#define VL53L0X_REG_PRE_RANGE_CONFIG_VALID_PHASE_LOW 0x0056 +#define VL53L0X_REG_PRE_RANGE_CONFIG_VALID_PHASE_HIGH 0x0057 +#define VL53L0X_REG_PRE_RANGE_MIN_COUNT_RATE_RTN_LIMIT 0x0064 + +#define VL53L0X_REG_FINAL_RANGE_CONFIG_MIN_SNR 0X0067 +#define VL53L0X_REG_FINAL_RANGE_CONFIG_VALID_PHASE_LOW 0x0047 +#define VL53L0X_REG_FINAL_RANGE_CONFIG_VALID_PHASE_HIGH 0x0048 +#define VL53L0X_REG_FINAL_RANGE_CONFIG_MIN_COUNT_RATE_RTN_LIMIT 0x0044 + + +#define VL53L0X_REG_PRE_RANGE_CONFIG_SIGMA_THRESH_HI 0X0061 +#define VL53L0X_REG_PRE_RANGE_CONFIG_SIGMA_THRESH_LO 0X0062 + +/* PRE RANGE registers */ +#define VL53L0X_REG_PRE_RANGE_CONFIG_VCSEL_PERIOD 0x0050 +#define VL53L0X_REG_PRE_RANGE_CONFIG_TIMEOUT_MACROP_HI 0x0051 +#define VL53L0X_REG_PRE_RANGE_CONFIG_TIMEOUT_MACROP_LO 0x0052 + +#define VL53L0X_REG_SYSTEM_HISTOGRAM_BIN 0x0081 +#define VL53L0X_REG_HISTOGRAM_CONFIG_INITIAL_PHASE_SELECT 0x0033 +#define VL53L0X_REG_HISTOGRAM_CONFIG_READOUT_CTRL 0x0055 + +#define VL53L0X_REG_FINAL_RANGE_CONFIG_VCSEL_PERIOD 0x0070 +#define VL53L0X_REG_FINAL_RANGE_CONFIG_TIMEOUT_MACROP_HI 0x0071 +#define VL53L0X_REG_FINAL_RANGE_CONFIG_TIMEOUT_MACROP_LO 0x0072 +#define VL53L0X_REG_CROSSTALK_COMPENSATION_PEAK_RATE_MCPS 0x0020 + +#define VL53L0X_REG_MSRC_CONFIG_TIMEOUT_MACROP 0x0046 + + +#define VL53L0X_REG_SOFT_RESET_GO2_SOFT_RESET_N 0x00bf +#define VL53L0X_REG_IDENTIFICATION_MODEL_ID 0x00c0 +#define VL53L0X_REG_IDENTIFICATION_REVISION_ID 0x00c2 + +#define VL53L0X_REG_OSC_CALIBRATE_VAL 0x00f8 + + +#define VL53L0X_SIGMA_ESTIMATE_MAX_VALUE 65535 +/* equivalent to a range sigma of 655.35mm */ + +#define VL53L0X_REG_GLOBAL_CONFIG_VCSEL_WIDTH 0x032 +#define VL53L0X_REG_GLOBAL_CONFIG_SPAD_ENABLES_REF_0 0x0B0 +#define VL53L0X_REG_GLOBAL_CONFIG_SPAD_ENABLES_REF_1 0x0B1 +#define VL53L0X_REG_GLOBAL_CONFIG_SPAD_ENABLES_REF_2 0x0B2 +#define VL53L0X_REG_GLOBAL_CONFIG_SPAD_ENABLES_REF_3 0x0B3 +#define VL53L0X_REG_GLOBAL_CONFIG_SPAD_ENABLES_REF_4 0x0B4 +#define VL53L0X_REG_GLOBAL_CONFIG_SPAD_ENABLES_REF_5 0x0B5 + +#define VL53L0X_REG_GLOBAL_CONFIG_REF_EN_START_SELECT 0xB6 +#define VL53L0X_REG_DYNAMIC_SPAD_NUM_REQUESTED_REF_SPAD 0x4E /* 0x14E */ +#define VL53L0X_REG_DYNAMIC_SPAD_REF_EN_START_OFFSET 0x4F /* 0x14F */ +#define VL53L0X_REG_POWER_MANAGEMENT_GO1_POWER_FORCE 0x80 + +/* + * Speed of light in um per 1E-10 Seconds + */ + +#define VL53L0X_SPEED_OF_LIGHT_IN_AIR 2997 + +#define VL53L0X_REG_VHV_CONFIG_PAD_SCL_SDA__EXTSUP_HV 0x0089 + +#define VL53L0X_REG_ALGO_PHASECAL_LIM 0x0030 /* 0x130 */ +#define VL53L0X_REG_ALGO_PHASECAL_CONFIG_TIMEOUT 0x0030 + +/** @} VL53L0X_DefineRegisters_group */ + +/** @} VL53L0X_DevSpecDefines_group */ + + +#endif + +/* _VL53L0X_DEVICE_H_ */ + + diff --git a/modules/VL53L0X/inc/vl53l0x_gen.h b/modules/VL53L0X/inc/vl53l0x_gen.h new file mode 100644 index 0000000..d28669b --- /dev/null +++ b/modules/VL53L0X/inc/vl53l0x_gen.h @@ -0,0 +1,16 @@ +#ifndef __VL53L0X_GEN_H +#define __VL53L0X_GEN_H + +#include "bsp_vl53l0x.h" + + +extern VL53L0X_RangingMeasurementData_t vl53l0x_data; + +VL53L0X_Error vl53l0x_set_mode(VL53L0X_Dev_t *dev,u8 mode); +void vl53l0x_general_test(VL53L0X_Dev_t *dev); + +//启动普通测量 +void vl53l0x_general_start(VL53L0X_Dev_t *dev,u8 mode); +#endif + + diff --git a/modules/VL53L0X/inc/vl53l0x_i2c.h b/modules/VL53L0X/inc/vl53l0x_i2c.h new file mode 100644 index 0000000..1f0cbd9 --- /dev/null +++ b/modules/VL53L0X/inc/vl53l0x_i2c.h @@ -0,0 +1,67 @@ +#ifndef __VL53L0_I2C_H +#define __VL53L0_I2C_H + +#include "stm32f4xx.h" +#include "my_vl53l0.h" +#ifndef u8 +#define u8 uint8_t +#endif +#ifndef u16 +#define u16 uint16_t +#endif +#ifndef u32 +#define u32 uint32_t +#endif + +//端口移植 +//#define RCC_VL53L0x RCC_AHB1Periph_GPIOB + + +// 设置 SDA 为推挽输出模式 +#define SDA_OUT() { \ + GPIO_InitTypeDef GPIO_InitStruct = {0}; \ + GPIO_InitStruct.Pin = GPIO_SDA; \ + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; \ + GPIO_InitStruct.Pull = GPIO_NOPULL; \ + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; \ + HAL_GPIO_Init(PORT_VL53L0x, &GPIO_InitStruct); \ +} + +// 设置 SDA 为输入模式 +#define SDA_IN() { \ + GPIO_InitTypeDef GPIO_InitStruct = {0}; \ + GPIO_InitStruct.Pin = GPIO_SDA; \ + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; \ + GPIO_InitStruct.Pull = GPIO_NOPULL; \ + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; \ + HAL_GPIO_Init(PORT_VL53L0x, &GPIO_InitStruct); \ +} + +// 读取 SDA 引脚电平 +#define SDA_GET() HAL_GPIO_ReadPin(PORT_VL53L0x, GPIO_SDA) + +// SDA / SCL 输出电平(x 为 1 置高,0 置低) +#define SDA(x) HAL_GPIO_WritePin(PORT_VL53L0x, GPIO_SDA, (x) ? GPIO_PIN_SET : GPIO_PIN_RESET) +#define SCL(x) HAL_GPIO_WritePin(PORT_VL53L0x, GPIO_SCL, (x) ? GPIO_PIN_SET : GPIO_PIN_RESET) + +//状态 +#define STATUS_OK 0x00 +#define STATUS_FAIL 0x01 + +//IIC操作函数 +//void VL53L0X_i2c_init(void);//初始化IIC的IO口 + +u8 VL53L0X_write_byte(u8 address,u8 index,u8 data); //IIC写一个8位数据 +u8 VL53L0X_write_word(u8 address,u8 index,u16 data); //IIC写一个16位数据 +u8 VL53L0X_write_dword(u8 address,u8 index,u32 data); //IIC写一个32位数据 +u8 VL53L0X_write_multi(u8 address, u8 index,u8 *pdata,u16 count);//IIC连续写 + +u8 VL53L0X_read_byte(u8 address,u8 index,u8 *pdata); //IIC读一个8位数据 +u8 VL53L0X_read_word(u8 address,u8 index,u16 *pdata); //IIC读一个16位数据 +u8 VL53L0X_read_dword(u8 address,u8 index,u32 *pdata); //IIC读一个32位数据 +u8 VL53L0X_read_multi(u8 address,u8 index,u8 *pdata,u16 count); //IIC连续读 + + +#endif + + diff --git a/modules/VL53L0X/inc/vl53l0x_interrupt_threshold_settings.h b/modules/VL53L0X/inc/vl53l0x_interrupt_threshold_settings.h new file mode 100644 index 0000000..41677f1 --- /dev/null +++ b/modules/VL53L0X/inc/vl53l0x_interrupt_threshold_settings.h @@ -0,0 +1,194 @@ +/******************************************************************************* +Copyright 2016, STMicroelectronics International N.V. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of STMicroelectronics nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND +NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED. +IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*******************************************************************************/ + + +#ifndef _VL53L0X_INTERRUPT_THRESHOLD_SETTINGS_H_ +#define _VL53L0X_INTERRUPT_THRESHOLD_SETTINGS_H_ + + +#ifdef __cplusplus +extern "C" { +#endif + + +uint8_t InterruptThresholdSettings[] = { + + /* Start of Interrupt Threshold Settings */ + 0x1, 0xff, 0x00, + 0x1, 0x80, 0x01, + 0x1, 0xff, 0x01, + 0x1, 0x00, 0x00, + 0x1, 0xff, 0x01, + 0x1, 0x4f, 0x02, + 0x1, 0xFF, 0x0E, + 0x1, 0x00, 0x03, + 0x1, 0x01, 0x84, + 0x1, 0x02, 0x0A, + 0x1, 0x03, 0x03, + 0x1, 0x04, 0x08, + 0x1, 0x05, 0xC8, + 0x1, 0x06, 0x03, + 0x1, 0x07, 0x8D, + 0x1, 0x08, 0x08, + 0x1, 0x09, 0xC6, + 0x1, 0x0A, 0x01, + 0x1, 0x0B, 0x02, + 0x1, 0x0C, 0x00, + 0x1, 0x0D, 0xD5, + 0x1, 0x0E, 0x18, + 0x1, 0x0F, 0x12, + 0x1, 0x10, 0x01, + 0x1, 0x11, 0x82, + 0x1, 0x12, 0x00, + 0x1, 0x13, 0xD5, + 0x1, 0x14, 0x18, + 0x1, 0x15, 0x13, + 0x1, 0x16, 0x03, + 0x1, 0x17, 0x86, + 0x1, 0x18, 0x0A, + 0x1, 0x19, 0x09, + 0x1, 0x1A, 0x08, + 0x1, 0x1B, 0xC2, + 0x1, 0x1C, 0x03, + 0x1, 0x1D, 0x8F, + 0x1, 0x1E, 0x0A, + 0x1, 0x1F, 0x06, + 0x1, 0x20, 0x01, + 0x1, 0x21, 0x02, + 0x1, 0x22, 0x00, + 0x1, 0x23, 0xD5, + 0x1, 0x24, 0x18, + 0x1, 0x25, 0x22, + 0x1, 0x26, 0x01, + 0x1, 0x27, 0x82, + 0x1, 0x28, 0x00, + 0x1, 0x29, 0xD5, + 0x1, 0x2A, 0x18, + 0x1, 0x2B, 0x0B, + 0x1, 0x2C, 0x28, + 0x1, 0x2D, 0x78, + 0x1, 0x2E, 0x28, + 0x1, 0x2F, 0x91, + 0x1, 0x30, 0x00, + 0x1, 0x31, 0x0B, + 0x1, 0x32, 0x00, + 0x1, 0x33, 0x0B, + 0x1, 0x34, 0x00, + 0x1, 0x35, 0xA1, + 0x1, 0x36, 0x00, + 0x1, 0x37, 0xA0, + 0x1, 0x38, 0x00, + 0x1, 0x39, 0x04, + 0x1, 0x3A, 0x28, + 0x1, 0x3B, 0x30, + 0x1, 0x3C, 0x0C, + 0x1, 0x3D, 0x04, + 0x1, 0x3E, 0x0F, + 0x1, 0x3F, 0x79, + 0x1, 0x40, 0x28, + 0x1, 0x41, 0x1E, + 0x1, 0x42, 0x2F, + 0x1, 0x43, 0x87, + 0x1, 0x44, 0x00, + 0x1, 0x45, 0x0B, + 0x1, 0x46, 0x00, + 0x1, 0x47, 0x0B, + 0x1, 0x48, 0x00, + 0x1, 0x49, 0xA7, + 0x1, 0x4A, 0x00, + 0x1, 0x4B, 0xA6, + 0x1, 0x4C, 0x00, + 0x1, 0x4D, 0x04, + 0x1, 0x4E, 0x01, + 0x1, 0x4F, 0x00, + 0x1, 0x50, 0x00, + 0x1, 0x51, 0x80, + 0x1, 0x52, 0x09, + 0x1, 0x53, 0x08, + 0x1, 0x54, 0x01, + 0x1, 0x55, 0x00, + 0x1, 0x56, 0x0F, + 0x1, 0x57, 0x79, + 0x1, 0x58, 0x09, + 0x1, 0x59, 0x05, + 0x1, 0x5A, 0x00, + 0x1, 0x5B, 0x60, + 0x1, 0x5C, 0x05, + 0x1, 0x5D, 0xD1, + 0x1, 0x5E, 0x0C, + 0x1, 0x5F, 0x3C, + 0x1, 0x60, 0x00, + 0x1, 0x61, 0xD0, + 0x1, 0x62, 0x0B, + 0x1, 0x63, 0x03, + 0x1, 0x64, 0x28, + 0x1, 0x65, 0x10, + 0x1, 0x66, 0x2A, + 0x1, 0x67, 0x39, + 0x1, 0x68, 0x0B, + 0x1, 0x69, 0x02, + 0x1, 0x6A, 0x28, + 0x1, 0x6B, 0x10, + 0x1, 0x6C, 0x2A, + 0x1, 0x6D, 0x61, + 0x1, 0x6E, 0x0C, + 0x1, 0x6F, 0x00, + 0x1, 0x70, 0x0F, + 0x1, 0x71, 0x79, + 0x1, 0x72, 0x00, + 0x1, 0x73, 0x0B, + 0x1, 0x74, 0x00, + 0x1, 0x75, 0x0B, + 0x1, 0x76, 0x00, + 0x1, 0x77, 0xA1, + 0x1, 0x78, 0x00, + 0x1, 0x79, 0xA0, + 0x1, 0x7A, 0x00, + 0x1, 0x7B, 0x04, + 0x1, 0xFF, 0x04, + 0x1, 0x79, 0x1D, + 0x1, 0x7B, 0x27, + 0x1, 0x96, 0x0E, + 0x1, 0x97, 0xFE, + 0x1, 0x98, 0x03, + 0x1, 0x99, 0xEF, + 0x1, 0x9A, 0x02, + 0x1, 0x9B, 0x44, + 0x1, 0x73, 0x07, + 0x1, 0x70, 0x01, + 0x1, 0xff, 0x01, + 0x1, 0x00, 0x01, + 0x1, 0xff, 0x00, + 0x00, 0x00, 0x00 +}; + +#ifdef __cplusplus +} +#endif + +#endif /* _VL53L0X_INTERRUPT_THRESHOLD_SETTINGS_H_ */ diff --git a/modules/VL53L0X/inc/vl53l0x_it.h b/modules/VL53L0X/inc/vl53l0x_it.h new file mode 100644 index 0000000..c4f8c35 --- /dev/null +++ b/modules/VL53L0X/inc/vl53l0x_it.h @@ -0,0 +1,9 @@ +#ifndef __ALARM_H +#define __ALARM_H + +#include "bsp_vl53l0x.h" + +void vl53l0x_interrupt_test(VL53L0X_Dev_t *dev); + + +#endif diff --git a/modules/VL53L0X/inc/vl53l0x_platform.h b/modules/VL53L0X/inc/vl53l0x_platform.h new file mode 100644 index 0000000..9149869 --- /dev/null +++ b/modules/VL53L0X/inc/vl53l0x_platform.h @@ -0,0 +1,40 @@ +#ifndef __VL53L0X_PLATFORM_H +#define __VL53L0X_PLATFORM_H + +#include "vl53l0x_def.h" +#include "vl53l0x_i2c.h" +#include "vl53l0x_platform_log.h" + + +//vl53l0x设备I2C信息 +typedef struct { + VL53L0X_DevData_t Data; /*!< embed ST Ewok Dev data as "Data"*/ + /*!< user specific field */ + uint8_t I2cDevAddr; /*!< i2c device address user specific field */ + uint8_t comms_type; /*!< Type of comms : VL53L0X_COMMS_I2C or VL53L0X_COMMS_SPI */ + uint16_t comms_speed_khz; /*!< Comms speed [kHz] : typically 400kHz for I2C */ + +} VL53L0X_Dev_t; + + +typedef VL53L0X_Dev_t* VL53L0X_DEV; + +#define VL53L0X_MAX_I2C_XFER_SIZE 64 //定义I2C写的最大字节数 +#define PALDevDataGet(Dev, field) (Dev->Data.field) +#define PALDevDataSet(Dev, field, data) (Dev->Data.field)=(data) + + +VL53L0X_Error VL53L0X_WriteMulti(VL53L0X_DEV Dev, uint8_t index, uint8_t *pdata,uint32_t count); +VL53L0X_Error VL53L0X_ReadMulti(VL53L0X_DEV Dev, uint8_t index, uint8_t *pdata,uint32_t count); +VL53L0X_Error VL53L0X_WrByte(VL53L0X_DEV Dev, uint8_t index, uint8_t data); +VL53L0X_Error VL53L0X_WrWord(VL53L0X_DEV Dev, uint8_t index, uint16_t data); +VL53L0X_Error VL53L0X_WrDWord(VL53L0X_DEV Dev, uint8_t index, uint32_t data); +VL53L0X_Error VL53L0X_UpdateByte(VL53L0X_DEV Dev, uint8_t index, uint8_t AndData, uint8_t OrData); +VL53L0X_Error VL53L0X_RdByte(VL53L0X_DEV Dev, uint8_t index, uint8_t *data); +VL53L0X_Error VL53L0X_RdWord(VL53L0X_DEV Dev, uint8_t index, uint16_t *data); +VL53L0X_Error VL53L0X_RdDWord(VL53L0X_DEV Dev, uint8_t index, uint32_t *data); +VL53L0X_Error VL53L0X_PollingDelay(VL53L0X_DEV Dev); + + +#endif + diff --git a/modules/VL53L0X/inc/vl53l0x_platform_log.h b/modules/VL53L0X/inc/vl53l0x_platform_log.h new file mode 100644 index 0000000..3cb2146 --- /dev/null +++ b/modules/VL53L0X/inc/vl53l0x_platform_log.h @@ -0,0 +1,157 @@ +///******************************************************************************* +//Copyright 2015, STMicroelectronics International N.V. +//All rights reserved. + +//Redistribution and use in source and binary forms, with or without +//modification, are permitted provided that the following conditions are met: +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// * Neither the name of STMicroelectronics nor the +// names of its contributors may be used to endorse or promote products +// derived from this software without specific prior written permission. + +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +//ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +//WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND +//NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED. +//IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. BE LIABLE FOR ANY +//DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +//LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +//ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +//(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +//SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +//********************************************************************************/ + + +//#ifndef _VL53L0X_PLATFORM_LOG_H_ +//#define _VL53L0X_PLATFORM_LOG_H_ + +//#include +//#include +///* LOG Functions */ + +//#ifdef __cplusplus +//extern "C" { +//#endif + + +///** +// * @file vl53l0x_platform_log.h +// * +// * @brief platform log function definition +// */ + +////#define VL53L0X_LOG_ENABLE 0 + +//enum { +// TRACE_LEVEL_NONE, +// TRACE_LEVEL_ERRORS, +// TRACE_LEVEL_WARNING, +// TRACE_LEVEL_INFO, +// TRACE_LEVEL_DEBUG, +// TRACE_LEVEL_ALL, +// TRACE_LEVEL_IGNORE +//}; + +//enum { +// TRACE_FUNCTION_NONE = 0, +// TRACE_FUNCTION_I2C = 1, +// TRACE_FUNCTION_ALL = 0x7fffffff //all bits except sign +//}; + +//enum { +// TRACE_MODULE_NONE = 0x0, +// TRACE_MODULE_API = 0x1, +// TRACE_MODULE_PLATFORM = 0x2, +// TRACE_MODULE_ALL = 0x7fffffff //all bits except sign +//}; + + +//#if defined(VL53L0X_LOG_ENABLE) && (TRACE_UART==1) + +//#include +//extern int uart_printf(const char *msg, ...); +//extern int uart_vprintf(const char *msg, va_list ap); + +//#define trace_printf uart_printf +//#define trace_vprintf uart_vprintf + + +//extern uint32_t _trace_level; + + + +//int32_t VL53L0X_trace_config(char *filename, uint32_t modules, uint32_t level, uint32_t functions); +//void trace_print_module_function(uint32_t module, uint32_t level, uint32_t function, const char *format, ...); + + +////extern FILE * log_file; + +//#define LOG_GET_TIME() (int)HAL_GetTick() + +//#define _LOG_FUNCTION_START(module, fmt, ... ) \ +// trace_print_module_function(module, _trace_level, TRACE_FUNCTION_ALL, "%ld %s "fmt"\n", LOG_GET_TIME(), __FUNCTION__, ##__VA_ARGS__); + +//#define _LOG_FUNCTION_END(module, status, ... )\ +// trace_print_module_function(module, _trace_level, TRACE_FUNCTION_ALL, "%d %s %d\n", LOG_GET_TIME(), __FUNCTION__, (int)status, ##__VA_ARGS__) + +//#define _LOG_FUNCTION_END_FMT(module, status, fmt, ... )\ +// trace_print_module_function(module, _trace_level, TRACE_FUNCTION_ALL, "%d %s %d "fmt"\n", LOG_GET_TIME(), __FUNCTION__, (int)status,##__VA_ARGS__) + + +//#else /* VL53L0X_LOG_ENABLE no logging or no TRACE_UART */ +// #define VL53L0X_ErrLog(...) (void)0 +// #define _LOG_FUNCTION_START(module, fmt, ... ) (void)0 +// #define _LOG_FUNCTION_END(module, status, ... ) (void)0 +// #define _LOG_FUNCTION_END_FMT(module, status, fmt, ... ) (void)0 +// #define trace_vprintf(...) (void)0 +// #define VL53L0X_trace_config(...) (void)0 + +//#endif /* else */ + +//#define VL53L0_COPYSTRING(str, ...) strcpy(str, ##__VA_ARGS__) + +//#endif /* _VL53L0X_PLATFORM_LOG_H_ */ + + +#ifndef _VL53L0X_PLATFORM_LOG_H_ +#define _VL53L0X_PLATFORM_LOG_H_ + +#include +#include + +enum { + TRACE_LEVEL_NONE, + TRACE_LEVEL_ERRORS, + TRACE_LEVEL_WARNING, + TRACE_LEVEL_INFO, + TRACE_LEVEL_DEBUG, + TRACE_LEVEL_ALL, + TRACE_LEVEL_IGNORE +}; + +enum { + TRACE_FUNCTION_NONE = 0, + TRACE_FUNCTION_I2C = 1, + TRACE_FUNCTION_ALL = 0x7fffffff //all bits except sign +}; + +enum { + TRACE_MODULE_NONE = 0x0, + TRACE_MODULE_API = 0x1, + TRACE_MODULE_PLATFORM = 0x2, + TRACE_MODULE_ALL = 0x7fffffff //all bits except sign +}; + + +#define VL53L0X_ErrLog(...) (void)0 +#define _LOG_FUNCTION_START(module, fmt, ... ) (void)0 +#define _LOG_FUNCTION_END(module, status, ... ) (void)0 +#define _LOG_FUNCTION_END_FMT(module, status, fmt, ... ) (void)0 +#define VL53L0X_COPYSTRING(str, ...) strcpy(str, __VA_ARGS__) + +#endif /* _VL53L0X_PLATFORM_LOG_H_ */ diff --git a/modules/VL53L0X/inc/vl53l0x_tuning.h b/modules/VL53L0X/inc/vl53l0x_tuning.h new file mode 100644 index 0000000..a7ad71b --- /dev/null +++ b/modules/VL53L0X/inc/vl53l0x_tuning.h @@ -0,0 +1,146 @@ +/******************************************************************************* +Copyright 2016, STMicroelectronics International N.V. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of STMicroelectronics nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND +NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED. +IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*******************************************************************************/ + + +#ifndef _VL53L0X_TUNING_H_ +#define _VL53L0X_TUNING_H_ + +#include "vl53l0x_def.h" + + +#ifdef __cplusplus +extern "C" { +#endif + + +uint8_t DefaultTuningSettings[] = { + + /* update 02/11/2015_v36 */ + 0x01, 0xFF, 0x01, + 0x01, 0x00, 0x00, + + 0x01, 0xFF, 0x00, + 0x01, 0x09, 0x00, + 0x01, 0x10, 0x00, + 0x01, 0x11, 0x00, + + 0x01, 0x24, 0x01, + 0x01, 0x25, 0xff, + 0x01, 0x75, 0x00, + + 0x01, 0xFF, 0x01, + 0x01, 0x4e, 0x2c, + 0x01, 0x48, 0x00, + 0x01, 0x30, 0x20, + + 0x01, 0xFF, 0x00, + 0x01, 0x30, 0x09, /* mja changed from 0x64. */ + 0x01, 0x54, 0x00, + 0x01, 0x31, 0x04, + 0x01, 0x32, 0x03, + 0x01, 0x40, 0x83, + 0x01, 0x46, 0x25, + 0x01, 0x60, 0x00, + 0x01, 0x27, 0x00, + 0x01, 0x50, 0x06, + 0x01, 0x51, 0x00, + 0x01, 0x52, 0x96, + 0x01, 0x56, 0x08, + 0x01, 0x57, 0x30, + 0x01, 0x61, 0x00, + 0x01, 0x62, 0x00, + 0x01, 0x64, 0x00, + 0x01, 0x65, 0x00, + 0x01, 0x66, 0xa0, + + 0x01, 0xFF, 0x01, + 0x01, 0x22, 0x32, + 0x01, 0x47, 0x14, + 0x01, 0x49, 0xff, + 0x01, 0x4a, 0x00, + + 0x01, 0xFF, 0x00, + 0x01, 0x7a, 0x0a, + 0x01, 0x7b, 0x00, + 0x01, 0x78, 0x21, + + 0x01, 0xFF, 0x01, + 0x01, 0x23, 0x34, + 0x01, 0x42, 0x00, + 0x01, 0x44, 0xff, + 0x01, 0x45, 0x26, + 0x01, 0x46, 0x05, + 0x01, 0x40, 0x40, + 0x01, 0x0E, 0x06, + 0x01, 0x20, 0x1a, + 0x01, 0x43, 0x40, + + 0x01, 0xFF, 0x00, + 0x01, 0x34, 0x03, + 0x01, 0x35, 0x44, + + 0x01, 0xFF, 0x01, + 0x01, 0x31, 0x04, + 0x01, 0x4b, 0x09, + 0x01, 0x4c, 0x05, + 0x01, 0x4d, 0x04, + + + 0x01, 0xFF, 0x00, + 0x01, 0x44, 0x00, + 0x01, 0x45, 0x20, + 0x01, 0x47, 0x08, + 0x01, 0x48, 0x28, + 0x01, 0x67, 0x00, + 0x01, 0x70, 0x04, + 0x01, 0x71, 0x01, + 0x01, 0x72, 0xfe, + 0x01, 0x76, 0x00, + 0x01, 0x77, 0x00, + + 0x01, 0xFF, 0x01, + 0x01, 0x0d, 0x01, + + 0x01, 0xFF, 0x00, + 0x01, 0x80, 0x01, + 0x01, 0x01, 0xF8, + + 0x01, 0xFF, 0x01, + 0x01, 0x8e, 0x01, + 0x01, 0x00, 0x01, + 0x01, 0xFF, 0x00, + 0x01, 0x80, 0x00, + + 0x00, 0x00, 0x00 +}; + +#ifdef __cplusplus +} +#endif + +#endif /* _VL53L0X_TUNING_H_ */ diff --git a/modules/VL53L0X/inc/vl53l0x_types.h b/modules/VL53L0X/inc/vl53l0x_types.h new file mode 100644 index 0000000..db9e81d --- /dev/null +++ b/modules/VL53L0X/inc/vl53l0x_types.h @@ -0,0 +1,112 @@ +/******************************************************************************* +Copyright ?2015, STMicroelectronics International N.V. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of STMicroelectronics nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND +NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED. +IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +********************************************************************************/ +/** + * @file vl53l0_types.h + * @brief VL53L0 types definition + */ + +#ifndef VL53L0X_TYPES_H_ +#define VL53L0X_TYPES_H_ + +/** @defgroup porting_type Basic type definition + * @ingroup VL53L0X_platform_group + * + * @brief file vl53l0_types.h files hold basic type definition that may requires porting + * + * contains type that must be defined for the platform\n + * when target platform and compiler provide stdint.h and stddef.h it is enough to include it.\n + * If stdint.h is not available review and adapt all signed and unsigned 8/16/32 bits basic types. \n + * If stddef.h is not available review and adapt NULL definition . + */ +#include +#include +#include "stm32f4xx.h" + +#ifndef NULL +#error "Error NULL definition should be done. Please add required include " +#endif + + +#if ! defined(STDINT_H) && !defined(_GCC_STDINT_H) &&!defined(__STDINT_DECLS) && !defined(_GCC_WRAP_STDINT_H) + + #pragma message("Please review type definition of STDINT define for your platform and add to list above ") + + /* + * target platform do not provide stdint or use a different #define than above + * to avoid seeing the message below addapt the #define list above or implement + * all type and delete these pragma + */ + +/** \ingroup VL53L0X_portingType_group + * @{ + */ + + +//typedef unsigned long long uint64_t; + + +/** @brief Typedef defining 32 bit unsigned int type.\n + * The developer should modify this to suit the platform being deployed. + */ +//typedef unsigned int uint32_t; + +/** @brief Typedef defining 32 bit int type.\n + * The developer should modify this to suit the platform being deployed. + */ +//typedef int int32_t; + +/** @brief Typedef defining 16 bit unsigned short type.\n + * The developer should modify this to suit the platform being deployed. + */ +//typedef unsigned short uint16_t; + +/** @brief Typedef defining 16 bit short type.\n + * The developer should modify this to suit the platform being deployed. + */ +//typedef short int16_t; + +/** @brief Typedef defining 8 bit unsigned char type.\n + * The developer should modify this to suit the platform being deployed. + */ +//typedef unsigned char uint8_t; + +/** @brief Typedef defining 8 bit char type.\n + * The developer should modify this to suit the platform being deployed. + */ +//typedef signed char int8_t; + +/** @} */ +#endif /* _STDINT_H */ + + +/** use where fractional values are expected + * + * Given a floating point value f it's .16 bit point is (int)(f*(1<<16))*/ +typedef uint32_t FixPoint1616_t; + +#endif /* VL53L0X_TYPES_H_ */ diff --git a/modules/VL53L0X/my_vl53l0.h b/modules/VL53L0X/my_vl53l0.h new file mode 100644 index 0000000..745a371 --- /dev/null +++ b/modules/VL53L0X/my_vl53l0.h @@ -0,0 +1,9 @@ +#ifndef __my_vl53l0_H +#define __my_vl53l0_H +#include "stm32f4xx_hal.h" + +#define VL53L0X_Xshut PDout(5) +#define PORT_VL53L0x GPIOD +#define GPIO_SDA GPIO_PIN_6 +#define GPIO_SCL GPIO_PIN_7 +#endif diff --git a/modules/VL53L0X/src/bsp_VL53L0X.c b/modules/VL53L0X/src/bsp_VL53L0X.c new file mode 100644 index 0000000..25f772e --- /dev/null +++ b/modules/VL53L0X/src/bsp_VL53L0X.c @@ -0,0 +1,170 @@ +#include "bsp_vl53l0x.h" +#include "my_vl53l0.h" +#include "delay.h" + +VL53L0X_Dev_t vl53l0x_dev;//设备I2C数据参数 +VL53L0X_DeviceInfo_t vl53l0x_dev_info;//设备ID版本信息 +uint8_t AjustOK=0;//校准标志位 + +//VL53L0X各测量模式参数 +//0:默认;1:高精度;2:长距离;3:高速 +mode_data Mode_data[]= +{ + {(FixPoint1616_t)(0.25*65536), + (FixPoint1616_t)(18*65536), + 33000, + 14, + 10},//默认 + + {(FixPoint1616_t)(0.25*65536) , + (FixPoint1616_t)(18*65536), + 200000, + 14, + 10},//高精度 + + {(FixPoint1616_t)(0.1*65536) , + (FixPoint1616_t)(60*65536), + 33000, + 18, + 14},//长距离 + + {(FixPoint1616_t)(0.25*65536) , + (FixPoint1616_t)(32*65536), + 20000, + 14, + 10},//高速 + +}; + +//API错误信息打印 +//Status:详情看VL53L0X_Error参数的定义 +void print_pal_error(VL53L0X_Error Status) +{ + + char buf[VL53L0X_MAX_STRING_LENGTH]; + + VL53L0X_GetPalErrorString(Status,buf);//根据Status状态获取错误信息字符串 + + printf("API Status: %i : %s\r\n",Status, buf);//打印状态和错误信息 +} + + +//配置VL53L0X设备I2C地址 +//dev:设备I2C参数结构体 +//newaddr:设备新I2C地址 +VL53L0X_Error vl53l0x_Addr_set(VL53L0X_Dev_t *dev,uint8_t newaddr) +{ + uint16_t Id; + uint8_t FinalAddress; + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + u8 sta=0x00; + + FinalAddress = newaddr; + + if(FinalAddress==dev->I2cDevAddr)//新设备I2C地址与旧地址一致,直接退出 + return VL53L0X_ERROR_NONE; + //在进行第一个寄存器访问之前设置I2C标准模式(400Khz) + Status = VL53L0X_WrByte(dev,0x88,0x00); + if(Status!=VL53L0X_ERROR_NONE) + { + sta=0x01;//设置I2C标准模式出错 + goto set_error; + } + //尝试使用默认的0x52地址读取一个寄存器 + Status = VL53L0X_RdWord(dev, VL53L0X_REG_IDENTIFICATION_MODEL_ID, &Id); + if(Status!=VL53L0X_ERROR_NONE) + { + sta=0x02;//读取寄存器出错 + goto set_error; + } + if(Id == 0xEEAA) + { + //设置设备新的I2C地址 + Status = VL53L0X_SetDeviceAddress(dev,FinalAddress); + if(Status!=VL53L0X_ERROR_NONE) + { + sta=0x03;//设置I2C地址出错 + goto set_error; + } + //修改参数结构体的I2C地址 + dev->I2cDevAddr = FinalAddress; + //检查新的I2C地址读写是否正常 + Status = VL53L0X_RdWord(dev, VL53L0X_REG_IDENTIFICATION_MODEL_ID, &Id); + if(Status!=VL53L0X_ERROR_NONE) + { + sta=0x04;//新I2C地址读写出错 + goto set_error; + } + } + set_error: + if(Status!=VL53L0X_ERROR_NONE) + { + print_pal_error(Status);//打印错误信息 + } + if(sta!=0) + printf("sta:0x%x\r\n",sta); + return Status; +} + +//vl53l0x复位函数 +//dev:设备I2C参数结构体 +void vl53l0x_reset(VL53L0X_Dev_t *dev) +{ + uint8_t addr; + addr = dev->I2cDevAddr;//保存设备原I2C地址 + VL53L0X_Xshut=0;//失能VL53L0X + delay_ms(30); + VL53L0X_Xshut=1;//使能VL53L0X,让传感器处于工作(I2C地址会恢复默认0X52) + delay_ms(30); + dev->I2cDevAddr=0x52; + vl53l0x_Addr_set(dev,addr);//设置VL53L0X传感器原来上电前原I2C地址 + VL53L0X_DataInit(dev); +} + +//初始化vl53l0x +//dev:设备I2C参数结构体 +VL53L0X_Error vl53l0x_init(VL53L0X_Dev_t *dev) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + VL53L0X_Dev_t *pMyDevice = dev; + +// RCC_AHB1PeriphClockCmd(RCC_VL53L0x, ENABLE); // 使能GPIO时钟 +// +// GPIO_InitTypeDef GPIO_InitStructure; + +// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; +// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; +// GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; +// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; +// GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; +// GPIO_Init(PORT_VL53L0x, &GPIO_InitStructure); + + + pMyDevice->I2cDevAddr = VL53L0X_Addr;//I2C地址(上电默认0x52) + pMyDevice->comms_type = 1; //I2C通信模式 + pMyDevice->comms_speed_khz = 400; //I2C通信速率 + + //VL53L0X_i2c_init();//初始化IIC总线 + + VL53L0X_Xshut=0;//失能VL53L0X + delay_ms(50); + VL53L0X_Xshut=1;//使能VL53L0X,让传感器处于工作 + delay_ms(50); + + vl53l0x_Addr_set(pMyDevice,0x54);//设置VL53L0X传感器I2C地址 + if(Status!=VL53L0X_ERROR_NONE) goto error; + Status = VL53L0X_DataInit(pMyDevice);//设备初始化 + if(Status!=VL53L0X_ERROR_NONE) goto error; + delay_ms(2); + Status = VL53L0X_GetDeviceInfo(pMyDevice,&vl53l0x_dev_info);//获取设备ID信息 + if(Status!=VL53L0X_ERROR_NONE) goto error; + + error: + if(Status!=VL53L0X_ERROR_NONE) + { + print_pal_error(Status);//打印错误信息 + return Status; + } + + return Status; +} diff --git a/modules/VL53L0X/src/vl53l0x_api.c b/modules/VL53L0X/src/vl53l0x_api.c new file mode 100644 index 0000000..0163f73 --- /dev/null +++ b/modules/VL53L0X/src/vl53l0x_api.c @@ -0,0 +1,3035 @@ +/******************************************************************************* + Copyright 2016, STMicroelectronics International N.V. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of STMicroelectronics nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND + NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED. + IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ******************************************************************************/ + +#include "vl53l0x_api.h" +#include "vl53l0x_tuning.h" +#include "vl53l0x_interrupt_threshold_settings.h" +#include "vl53l0x_api_core.h" +#include "vl53l0x_api_calibration.h" +#include "vl53l0x_api_strings.h" + +#ifndef __KERNEL__ +#include +#endif +#define LOG_FUNCTION_START(fmt, ...) \ + _LOG_FUNCTION_START(TRACE_MODULE_API, fmt, ##__VA_ARGS__) +#define LOG_FUNCTION_END(status, ...) \ + _LOG_FUNCTION_END(TRACE_MODULE_API, status, ##__VA_ARGS__) +#define LOG_FUNCTION_END_FMT(status, fmt, ...) \ + _LOG_FUNCTION_END_FMT(TRACE_MODULE_API, status, fmt, ##__VA_ARGS__) + +#ifdef VL53L0X_LOG_ENABLE +#define trace_print(level, ...) trace_print_module_function(TRACE_MODULE_API, \ + level, TRACE_FUNCTION_NONE, ##__VA_ARGS__) +#endif + +/* Group PAL General Functions */ + +VL53L0X_Error VL53L0X_GetVersion(VL53L0X_Version_t *pVersion) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + pVersion->major = VL53L0X_IMPLEMENTATION_VER_MAJOR; + pVersion->minor = VL53L0X_IMPLEMENTATION_VER_MINOR; + pVersion->build = VL53L0X_IMPLEMENTATION_VER_SUB; + + pVersion->revision = VL53L0X_IMPLEMENTATION_VER_REVISION; + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetPalSpecVersion(VL53L0X_Version_t *pPalSpecVersion) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + + LOG_FUNCTION_START(""); + + pPalSpecVersion->major = VL53L0X_SPECIFICATION_VER_MAJOR; + pPalSpecVersion->minor = VL53L0X_SPECIFICATION_VER_MINOR; + pPalSpecVersion->build = VL53L0X_SPECIFICATION_VER_SUB; + + pPalSpecVersion->revision = VL53L0X_SPECIFICATION_VER_REVISION; + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetProductRevision(VL53L0X_DEV Dev, + uint8_t *pProductRevisionMajor, uint8_t *pProductRevisionMinor) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t revision_id; + + LOG_FUNCTION_START(""); + + Status = VL53L0X_RdByte(Dev, VL53L0X_REG_IDENTIFICATION_REVISION_ID, + &revision_id); + *pProductRevisionMajor = 1; + *pProductRevisionMinor = (revision_id & 0xF0) >> 4; + + LOG_FUNCTION_END(Status); + return Status; + +} + +VL53L0X_Error VL53L0X_GetDeviceInfo(VL53L0X_DEV Dev, + VL53L0X_DeviceInfo_t *pVL53L0X_DeviceInfo) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + Status = VL53L0X_get_device_info(Dev, pVL53L0X_DeviceInfo); + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetDeviceErrorStatus(VL53L0X_DEV Dev, + VL53L0X_DeviceError *pDeviceErrorStatus) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t RangeStatus; + + LOG_FUNCTION_START(""); + + Status = VL53L0X_RdByte(Dev, VL53L0X_REG_RESULT_RANGE_STATUS, + &RangeStatus); + + *pDeviceErrorStatus = (VL53L0X_DeviceError)((RangeStatus & 0x78) >> 3); + + LOG_FUNCTION_END(Status); + return Status; +} + + +VL53L0X_Error VL53L0X_GetDeviceErrorString(VL53L0X_DeviceError ErrorCode, + char *pDeviceErrorString) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + + LOG_FUNCTION_START(""); + + Status = VL53L0X_get_device_error_string(ErrorCode, pDeviceErrorString); + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetRangeStatusString(uint8_t RangeStatus, + char *pRangeStatusString) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + Status = VL53L0X_get_range_status_string(RangeStatus, + pRangeStatusString); + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetPalErrorString(VL53L0X_Error PalErrorCode, + char *pPalErrorString) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + Status = VL53L0X_get_pal_error_string(PalErrorCode, pPalErrorString); + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetPalStateString(VL53L0X_State PalStateCode, + char *pPalStateString) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + Status = VL53L0X_get_pal_state_string(PalStateCode, pPalStateString); + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetPalState(VL53L0X_DEV Dev, VL53L0X_State *pPalState) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + *pPalState = PALDevDataGet(Dev, PalState); + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_SetPowerMode(VL53L0X_DEV Dev, VL53L0X_PowerModes PowerMode) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + /* Only level1 of Power mode exists */ + if ((PowerMode != VL53L0X_POWERMODE_STANDBY_LEVEL1) + && (PowerMode != VL53L0X_POWERMODE_IDLE_LEVEL1)) { + Status = VL53L0X_ERROR_MODE_NOT_SUPPORTED; + } else if (PowerMode == VL53L0X_POWERMODE_STANDBY_LEVEL1) { + /* set the standby level1 of power mode */ + Status = VL53L0X_WrByte(Dev, 0x80, 0x00); + if (Status == VL53L0X_ERROR_NONE) { + /* Set PAL State to standby */ + PALDevDataSet(Dev, PalState, VL53L0X_STATE_STANDBY); + PALDevDataSet(Dev, PowerMode, + VL53L0X_POWERMODE_STANDBY_LEVEL1); + } + + } else { + /* VL53L0X_POWERMODE_IDLE_LEVEL1 */ + Status = VL53L0X_WrByte(Dev, 0x80, 0x00); + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_StaticInit(Dev); + + if (Status == VL53L0X_ERROR_NONE) + PALDevDataSet(Dev, PowerMode, + VL53L0X_POWERMODE_IDLE_LEVEL1); + + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetPowerMode(VL53L0X_DEV Dev, VL53L0X_PowerModes *pPowerMode) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t Byte; + LOG_FUNCTION_START(""); + + /* Only level1 of Power mode exists */ + Status = VL53L0X_RdByte(Dev, 0x80, &Byte); + + if (Status == VL53L0X_ERROR_NONE) { + if (Byte == 1) { + PALDevDataSet(Dev, PowerMode, + VL53L0X_POWERMODE_IDLE_LEVEL1); + } else { + PALDevDataSet(Dev, PowerMode, + VL53L0X_POWERMODE_STANDBY_LEVEL1); + } + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_SetOffsetCalibrationDataMicroMeter(VL53L0X_DEV Dev, + int32_t OffsetCalibrationDataMicroMeter) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + Status = VL53L0X_set_offset_calibration_data_micro_meter(Dev, + OffsetCalibrationDataMicroMeter); + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetOffsetCalibrationDataMicroMeter(VL53L0X_DEV Dev, + int32_t *pOffsetCalibrationDataMicroMeter) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + Status = VL53L0X_get_offset_calibration_data_micro_meter(Dev, + pOffsetCalibrationDataMicroMeter); + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_SetLinearityCorrectiveGain(VL53L0X_DEV Dev, + int16_t LinearityCorrectiveGain) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + if ((LinearityCorrectiveGain < 0) || (LinearityCorrectiveGain > 1000)) + Status = VL53L0X_ERROR_INVALID_PARAMS; + else { + PALDevDataSet(Dev, LinearityCorrectiveGain, + LinearityCorrectiveGain); + + if (LinearityCorrectiveGain != 1000) { + /* Disable FW Xtalk */ + Status = VL53L0X_WrWord(Dev, + VL53L0X_REG_CROSSTALK_COMPENSATION_PEAK_RATE_MCPS, 0); + } + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetLinearityCorrectiveGain(VL53L0X_DEV Dev, + uint16_t *pLinearityCorrectiveGain) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + *pLinearityCorrectiveGain = PALDevDataGet(Dev, LinearityCorrectiveGain); + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_SetGroupParamHold(VL53L0X_DEV Dev, uint8_t GroupParamHold) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NOT_IMPLEMENTED; + LOG_FUNCTION_START(""); + + /* not implemented on VL53L0X */ + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetUpperLimitMilliMeter(VL53L0X_DEV Dev, + uint16_t *pUpperLimitMilliMeter) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NOT_IMPLEMENTED; + LOG_FUNCTION_START(""); + + /* not implemented on VL53L0X */ + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetTotalSignalRate(VL53L0X_DEV Dev, + FixPoint1616_t *pTotalSignalRate) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + VL53L0X_RangingMeasurementData_t LastRangeDataBuffer; + + LOG_FUNCTION_START(""); + + LastRangeDataBuffer = PALDevDataGet(Dev, LastRangeMeasure); + + Status = VL53L0X_get_total_signal_rate( + Dev, &LastRangeDataBuffer, pTotalSignalRate); + + LOG_FUNCTION_END(Status); + return Status; +} + +/* End Group PAL General Functions */ + +/* Group PAL Init Functions */ +VL53L0X_Error VL53L0X_SetDeviceAddress(VL53L0X_DEV Dev, uint8_t DeviceAddress) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + Status = VL53L0X_WrByte(Dev, VL53L0X_REG_I2C_SLAVE_DEVICE_ADDRESS, + DeviceAddress / 2); + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_DataInit(VL53L0X_DEV Dev) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + VL53L0X_DeviceParameters_t CurrentParameters; + int i; + uint8_t StopVariable; + + LOG_FUNCTION_START(""); + + /* by default the I2C is running at 1V8 if you want to change it you + * need to include this define at compilation level. */ +#ifdef USE_I2C_2V8 + Status = VL53L0X_UpdateByte(Dev, + VL53L0X_REG_VHV_CONFIG_PAD_SCL_SDA__EXTSUP_HV, + 0xFE, + 0x01); +#endif + + /* Set I2C standard mode */ + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_WrByte(Dev, 0x88, 0x00); + + VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, ReadDataFromDeviceDone, 0); + +#ifdef USE_IQC_STATION + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_apply_offset_adjustment(Dev); +#endif + + /* Default value is 1000 for Linearity Corrective Gain */ + PALDevDataSet(Dev, LinearityCorrectiveGain, 1000); + + /* Dmax default Parameter */ + PALDevDataSet(Dev, DmaxCalRangeMilliMeter, 400); + PALDevDataSet(Dev, DmaxCalSignalRateRtnMegaCps, + (FixPoint1616_t)((0x00016B85))); /* 1.42 No Cover Glass*/ + + /* Set Default static parameters + *set first temporary values 9.44MHz * 65536 = 618660 */ + VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, OscFrequencyMHz, 618660); + + /* Set Default XTalkCompensationRateMegaCps to 0 */ + VL53L0X_SETPARAMETERFIELD(Dev, XTalkCompensationRateMegaCps, 0); + + /* Get default parameters */ + Status = VL53L0X_GetDeviceParameters(Dev, &CurrentParameters); + if (Status == VL53L0X_ERROR_NONE) { + /* initialize PAL values */ + CurrentParameters.DeviceMode = VL53L0X_DEVICEMODE_SINGLE_RANGING; + CurrentParameters.HistogramMode = VL53L0X_HISTOGRAMMODE_DISABLED; + PALDevDataSet(Dev, CurrentParameters, CurrentParameters); + } + + /* Sigma estimator variable */ + PALDevDataSet(Dev, SigmaEstRefArray, 100); + PALDevDataSet(Dev, SigmaEstEffPulseWidth, 900); + PALDevDataSet(Dev, SigmaEstEffAmbWidth, 500); + PALDevDataSet(Dev, targetRefRate, 0x0A00); /* 20 MCPS in 9:7 format */ + + /* Use internal default settings */ + PALDevDataSet(Dev, UseInternalTuningSettings, 1); + + Status |= VL53L0X_WrByte(Dev, 0x80, 0x01); + Status |= VL53L0X_WrByte(Dev, 0xFF, 0x01); + Status |= VL53L0X_WrByte(Dev, 0x00, 0x00); + Status |= VL53L0X_RdByte(Dev, 0x91, &StopVariable); + PALDevDataSet(Dev, StopVariable, StopVariable); + Status |= VL53L0X_WrByte(Dev, 0x00, 0x01); + Status |= VL53L0X_WrByte(Dev, 0xFF, 0x00); + Status |= VL53L0X_WrByte(Dev, 0x80, 0x00); + + /* Enable all check */ + for (i = 0; i < VL53L0X_CHECKENABLE_NUMBER_OF_CHECKS; i++) { + if (Status == VL53L0X_ERROR_NONE) + Status |= VL53L0X_SetLimitCheckEnable(Dev, i, 1); + else + break; + + } + + /* Disable the following checks */ + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_SetLimitCheckEnable(Dev, + VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP, 0); + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_SetLimitCheckEnable(Dev, + VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD, 0); + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_SetLimitCheckEnable(Dev, + VL53L0X_CHECKENABLE_SIGNAL_RATE_MSRC, 0); + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_SetLimitCheckEnable(Dev, + VL53L0X_CHECKENABLE_SIGNAL_RATE_PRE_RANGE, 0); + + /* Limit default values */ + if (Status == VL53L0X_ERROR_NONE) { + Status = VL53L0X_SetLimitCheckValue(Dev, + VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE, + (FixPoint1616_t)(18 * 65536)); + } + if (Status == VL53L0X_ERROR_NONE) { + Status = VL53L0X_SetLimitCheckValue(Dev, + VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE, + (FixPoint1616_t)(25 * 65536 / 100)); + /* 0.25 * 65536 */ + } + + if (Status == VL53L0X_ERROR_NONE) { + Status = VL53L0X_SetLimitCheckValue(Dev, + VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP, + (FixPoint1616_t)(35 * 65536)); + } + + if (Status == VL53L0X_ERROR_NONE) { + Status = VL53L0X_SetLimitCheckValue(Dev, + VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD, + (FixPoint1616_t)(0 * 65536)); + } + + if (Status == VL53L0X_ERROR_NONE) { + + PALDevDataSet(Dev, SequenceConfig, 0xFF); + Status = VL53L0X_WrByte(Dev, VL53L0X_REG_SYSTEM_SEQUENCE_CONFIG, + 0xFF); + + /* Set PAL state to tell that we are waiting for call to + * VL53L0X_StaticInit */ + PALDevDataSet(Dev, PalState, VL53L0X_STATE_WAIT_STATICINIT); + } + + if (Status == VL53L0X_ERROR_NONE) + VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, RefSpadsInitialised, 0); + + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_SetTuningSettingBuffer(VL53L0X_DEV Dev, + uint8_t *pTuningSettingBuffer, uint8_t UseInternalTuningSettings) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + + LOG_FUNCTION_START(""); + + if (UseInternalTuningSettings == 1) { + /* Force use internal settings */ + PALDevDataSet(Dev, UseInternalTuningSettings, 1); + } else { + + /* check that the first byte is not 0 */ + if (*pTuningSettingBuffer != 0) { + PALDevDataSet(Dev, pTuningSettingsPointer, + pTuningSettingBuffer); + PALDevDataSet(Dev, UseInternalTuningSettings, 0); + + } else { + Status = VL53L0X_ERROR_INVALID_PARAMS; + } + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetTuningSettingBuffer(VL53L0X_DEV Dev, + uint8_t **ppTuningSettingBuffer, uint8_t *pUseInternalTuningSettings) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + + LOG_FUNCTION_START(""); + + *ppTuningSettingBuffer = PALDevDataGet(Dev, pTuningSettingsPointer); + *pUseInternalTuningSettings = PALDevDataGet(Dev, + UseInternalTuningSettings); + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_StaticInit(VL53L0X_DEV Dev) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + VL53L0X_DeviceParameters_t CurrentParameters = {0}; + uint8_t *pTuningSettingBuffer; + uint16_t tempword = 0; + uint8_t tempbyte = 0; + uint8_t UseInternalTuningSettings = 0; + uint32_t count = 0; + uint8_t isApertureSpads = 0; + uint32_t refSpadCount = 0; + uint8_t ApertureSpads = 0; + uint8_t vcselPulsePeriodPCLK; + uint32_t seqTimeoutMicroSecs; + + LOG_FUNCTION_START(""); + + Status = VL53L0X_get_info_from_device(Dev, 1); + + /* set the ref spad from NVM */ + count = (uint32_t)VL53L0X_GETDEVICESPECIFICPARAMETER(Dev, + ReferenceSpadCount); + ApertureSpads = VL53L0X_GETDEVICESPECIFICPARAMETER(Dev, + ReferenceSpadType); + + /* NVM value invalid */ + if ((ApertureSpads > 1) || + ((ApertureSpads == 1) && (count > 32)) || + ((ApertureSpads == 0) && (count > 12))) + Status = VL53L0X_perform_ref_spad_management(Dev, &refSpadCount, + &isApertureSpads); + else + Status = VL53L0X_set_reference_spads(Dev, count, ApertureSpads); + + + /* Initialize tuning settings buffer to prevent compiler warning. */ + pTuningSettingBuffer = DefaultTuningSettings; + + if (Status == VL53L0X_ERROR_NONE) { + UseInternalTuningSettings = PALDevDataGet(Dev, + UseInternalTuningSettings); + + if (UseInternalTuningSettings == 0) + pTuningSettingBuffer = PALDevDataGet(Dev, + pTuningSettingsPointer); + else + pTuningSettingBuffer = DefaultTuningSettings; + + } + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_load_tuning_settings(Dev, pTuningSettingBuffer); + + + /* Set interrupt config to new sample ready */ + if (Status == VL53L0X_ERROR_NONE) { + Status = VL53L0X_SetGpioConfig(Dev, 0, 0, + VL53L0X_REG_SYSTEM_INTERRUPT_GPIO_NEW_SAMPLE_READY, + VL53L0X_INTERRUPTPOLARITY_LOW); + } + + if (Status == VL53L0X_ERROR_NONE) { + Status = VL53L0X_WrByte(Dev, 0xFF, 0x01); + Status |= VL53L0X_RdWord(Dev, 0x84, &tempword); + Status |= VL53L0X_WrByte(Dev, 0xFF, 0x00); + } + + if (Status == VL53L0X_ERROR_NONE) { + VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, OscFrequencyMHz, + VL53L0X_FIXPOINT412TOFIXPOINT1616(tempword)); + } + + /* After static init, some device parameters may be changed, + * so update them */ + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_GetDeviceParameters(Dev, &CurrentParameters); + + + if (Status == VL53L0X_ERROR_NONE) { + Status = VL53L0X_GetFractionEnable(Dev, &tempbyte); + if (Status == VL53L0X_ERROR_NONE) + PALDevDataSet(Dev, RangeFractionalEnable, tempbyte); + + } + + if (Status == VL53L0X_ERROR_NONE) + PALDevDataSet(Dev, CurrentParameters, CurrentParameters); + + + /* read the sequence config and save it */ + if (Status == VL53L0X_ERROR_NONE) { + Status = VL53L0X_RdByte(Dev, + VL53L0X_REG_SYSTEM_SEQUENCE_CONFIG, &tempbyte); + if (Status == VL53L0X_ERROR_NONE) + PALDevDataSet(Dev, SequenceConfig, tempbyte); + + } + + /* Disable MSRC and TCC by default */ + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_SetSequenceStepEnable(Dev, + VL53L0X_SEQUENCESTEP_TCC, 0); + + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_SetSequenceStepEnable(Dev, + VL53L0X_SEQUENCESTEP_MSRC, 0); + + + /* Set PAL State to standby */ + if (Status == VL53L0X_ERROR_NONE) + PALDevDataSet(Dev, PalState, VL53L0X_STATE_IDLE); + + + + /* Store pre-range vcsel period */ + if (Status == VL53L0X_ERROR_NONE) { + Status = VL53L0X_GetVcselPulsePeriod( + Dev, + VL53L0X_VCSEL_PERIOD_PRE_RANGE, + &vcselPulsePeriodPCLK); + } + + if (Status == VL53L0X_ERROR_NONE) { + VL53L0X_SETDEVICESPECIFICPARAMETER( + Dev, + PreRangeVcselPulsePeriod, + vcselPulsePeriodPCLK); + } + + /* Store final-range vcsel period */ + if (Status == VL53L0X_ERROR_NONE) { + Status = VL53L0X_GetVcselPulsePeriod( + Dev, + VL53L0X_VCSEL_PERIOD_FINAL_RANGE, + &vcselPulsePeriodPCLK); + } + + if (Status == VL53L0X_ERROR_NONE) { + VL53L0X_SETDEVICESPECIFICPARAMETER( + Dev, + FinalRangeVcselPulsePeriod, + vcselPulsePeriodPCLK); + } + + /* Store pre-range timeout */ + if (Status == VL53L0X_ERROR_NONE) { + Status = get_sequence_step_timeout( + Dev, + VL53L0X_SEQUENCESTEP_PRE_RANGE, + &seqTimeoutMicroSecs); + } + + if (Status == VL53L0X_ERROR_NONE) { + VL53L0X_SETDEVICESPECIFICPARAMETER( + Dev, + PreRangeTimeoutMicroSecs, + seqTimeoutMicroSecs); + } + + /* Store final-range timeout */ + if (Status == VL53L0X_ERROR_NONE) { + Status = get_sequence_step_timeout( + Dev, + VL53L0X_SEQUENCESTEP_FINAL_RANGE, + &seqTimeoutMicroSecs); + } + + if (Status == VL53L0X_ERROR_NONE) { + VL53L0X_SETDEVICESPECIFICPARAMETER( + Dev, + FinalRangeTimeoutMicroSecs, + seqTimeoutMicroSecs); + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_WaitDeviceBooted(VL53L0X_DEV Dev) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NOT_IMPLEMENTED; + LOG_FUNCTION_START(""); + + /* not implemented on VL53L0X */ + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_ResetDevice(VL53L0X_DEV Dev) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t Byte; + LOG_FUNCTION_START(""); + + /* Set reset bit */ + Status = VL53L0X_WrByte(Dev, VL53L0X_REG_SOFT_RESET_GO2_SOFT_RESET_N, + 0x00); + + /* Wait for some time */ + if (Status == VL53L0X_ERROR_NONE) { + do { + Status = VL53L0X_RdByte(Dev, + VL53L0X_REG_IDENTIFICATION_MODEL_ID, &Byte); + } while (Byte != 0x00); + } + + VL53L0X_PollingDelay(Dev); + + /* Release reset */ + Status = VL53L0X_WrByte(Dev, VL53L0X_REG_SOFT_RESET_GO2_SOFT_RESET_N, + 0x01); + + /* Wait until correct boot-up of the device */ + if (Status == VL53L0X_ERROR_NONE) { + do { + Status = VL53L0X_RdByte(Dev, + VL53L0X_REG_IDENTIFICATION_MODEL_ID, &Byte); + } while (Byte == 0x00); + } + + VL53L0X_PollingDelay(Dev); + + /* Set PAL State to VL53L0X_STATE_POWERDOWN */ + if (Status == VL53L0X_ERROR_NONE) + PALDevDataSet(Dev, PalState, VL53L0X_STATE_POWERDOWN); + + + LOG_FUNCTION_END(Status); + return Status; +} +/* End Group PAL Init Functions */ + +/* Group PAL Parameters Functions */ +VL53L0X_Error VL53L0X_SetDeviceParameters(VL53L0X_DEV Dev, + const VL53L0X_DeviceParameters_t *pDeviceParameters) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + int i; + LOG_FUNCTION_START(""); + Status = VL53L0X_SetDeviceMode(Dev, pDeviceParameters->DeviceMode); + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_SetInterMeasurementPeriodMilliSeconds(Dev, + pDeviceParameters->InterMeasurementPeriodMilliSeconds); + + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_SetXTalkCompensationRateMegaCps(Dev, + pDeviceParameters->XTalkCompensationRateMegaCps); + + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_SetOffsetCalibrationDataMicroMeter(Dev, + pDeviceParameters->RangeOffsetMicroMeters); + + + for (i = 0; i < VL53L0X_CHECKENABLE_NUMBER_OF_CHECKS; i++) { + if (Status == VL53L0X_ERROR_NONE) + Status |= VL53L0X_SetLimitCheckEnable(Dev, i, + pDeviceParameters->LimitChecksEnable[i]); + else + break; + + if (Status == VL53L0X_ERROR_NONE) + Status |= VL53L0X_SetLimitCheckValue(Dev, i, + pDeviceParameters->LimitChecksValue[i]); + else + break; + + } + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_SetWrapAroundCheckEnable(Dev, + pDeviceParameters->WrapAroundCheckEnable); + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_SetMeasurementTimingBudgetMicroSeconds(Dev, + pDeviceParameters->MeasurementTimingBudgetMicroSeconds); + + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetDeviceParameters(VL53L0X_DEV Dev, + VL53L0X_DeviceParameters_t *pDeviceParameters) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + int i; + + LOG_FUNCTION_START(""); + + Status = VL53L0X_GetDeviceMode(Dev, &(pDeviceParameters->DeviceMode)); + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_GetInterMeasurementPeriodMilliSeconds(Dev, + &(pDeviceParameters->InterMeasurementPeriodMilliSeconds)); + + + if (Status == VL53L0X_ERROR_NONE) + pDeviceParameters->XTalkCompensationEnable = 0; + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_GetXTalkCompensationRateMegaCps(Dev, + &(pDeviceParameters->XTalkCompensationRateMegaCps)); + + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_GetOffsetCalibrationDataMicroMeter(Dev, + &(pDeviceParameters->RangeOffsetMicroMeters)); + + + if (Status == VL53L0X_ERROR_NONE) { + for (i = 0; i < VL53L0X_CHECKENABLE_NUMBER_OF_CHECKS; i++) { + /* get first the values, then the enables. + * VL53L0X_GetLimitCheckValue will modify the enable + * flags + */ + if (Status == VL53L0X_ERROR_NONE) { + Status |= VL53L0X_GetLimitCheckValue(Dev, i, + &(pDeviceParameters->LimitChecksValue[i])); + } else { + break; + } + if (Status == VL53L0X_ERROR_NONE) { + Status |= VL53L0X_GetLimitCheckEnable(Dev, i, + &(pDeviceParameters->LimitChecksEnable[i])); + } else { + break; + } + } + } + + if (Status == VL53L0X_ERROR_NONE) { + Status = VL53L0X_GetWrapAroundCheckEnable(Dev, + &(pDeviceParameters->WrapAroundCheckEnable)); + } + + /* Need to be done at the end as it uses VCSELPulsePeriod */ + if (Status == VL53L0X_ERROR_NONE) { + Status = VL53L0X_GetMeasurementTimingBudgetMicroSeconds(Dev, + &(pDeviceParameters->MeasurementTimingBudgetMicroSeconds)); + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_SetDeviceMode(VL53L0X_DEV Dev, VL53L0X_DeviceModes DeviceMode) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + + LOG_FUNCTION_START("%d", (int)DeviceMode); + + switch (DeviceMode) { + case VL53L0X_DEVICEMODE_SINGLE_RANGING: + case VL53L0X_DEVICEMODE_CONTINUOUS_RANGING: + case VL53L0X_DEVICEMODE_CONTINUOUS_TIMED_RANGING: + case VL53L0X_DEVICEMODE_GPIO_DRIVE: + case VL53L0X_DEVICEMODE_GPIO_OSC: + /* Supported modes */ + VL53L0X_SETPARAMETERFIELD(Dev, DeviceMode, DeviceMode); + break; + default: + /* Unsupported mode */ + Status = VL53L0X_ERROR_MODE_NOT_SUPPORTED; + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetDeviceMode(VL53L0X_DEV Dev, + VL53L0X_DeviceModes *pDeviceMode) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + VL53L0X_GETPARAMETERFIELD(Dev, DeviceMode, *pDeviceMode); + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_SetRangeFractionEnable(VL53L0X_DEV Dev, uint8_t Enable) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + + LOG_FUNCTION_START("%d", (int)Enable); + + Status = VL53L0X_WrByte(Dev, VL53L0X_REG_SYSTEM_RANGE_CONFIG, Enable); + + if (Status == VL53L0X_ERROR_NONE) + PALDevDataSet(Dev, RangeFractionalEnable, Enable); + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetFractionEnable(VL53L0X_DEV Dev, uint8_t *pEnabled) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + Status = VL53L0X_RdByte(Dev, VL53L0X_REG_SYSTEM_RANGE_CONFIG, pEnabled); + + if (Status == VL53L0X_ERROR_NONE) + *pEnabled = (*pEnabled & 1); + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_SetHistogramMode(VL53L0X_DEV Dev, + VL53L0X_HistogramModes HistogramMode) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NOT_IMPLEMENTED; + LOG_FUNCTION_START(""); + + /* not implemented on VL53L0X */ + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetHistogramMode(VL53L0X_DEV Dev, + VL53L0X_HistogramModes *pHistogramMode) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NOT_IMPLEMENTED; + LOG_FUNCTION_START(""); + + /* not implemented on VL53L0X */ + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_SetMeasurementTimingBudgetMicroSeconds(VL53L0X_DEV Dev, + uint32_t MeasurementTimingBudgetMicroSeconds) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + Status = VL53L0X_set_measurement_timing_budget_micro_seconds(Dev, + MeasurementTimingBudgetMicroSeconds); + + LOG_FUNCTION_END(Status); + + return Status; +} + +VL53L0X_Error VL53L0X_GetMeasurementTimingBudgetMicroSeconds(VL53L0X_DEV Dev, + uint32_t *pMeasurementTimingBudgetMicroSeconds) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + Status = VL53L0X_get_measurement_timing_budget_micro_seconds(Dev, + pMeasurementTimingBudgetMicroSeconds); + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_SetVcselPulsePeriod(VL53L0X_DEV Dev, + VL53L0X_VcselPeriod VcselPeriodType, uint8_t VCSELPulsePeriodPCLK) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + Status = VL53L0X_set_vcsel_pulse_period(Dev, VcselPeriodType, + VCSELPulsePeriodPCLK); + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetVcselPulsePeriod(VL53L0X_DEV Dev, + VL53L0X_VcselPeriod VcselPeriodType, uint8_t *pVCSELPulsePeriodPCLK) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + Status = VL53L0X_get_vcsel_pulse_period(Dev, VcselPeriodType, + pVCSELPulsePeriodPCLK); + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_SetSequenceStepEnable(VL53L0X_DEV Dev, + VL53L0X_SequenceStepId SequenceStepId, uint8_t SequenceStepEnabled) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t SequenceConfig = 0; + uint8_t SequenceConfigNew = 0; + uint32_t MeasurementTimingBudgetMicroSeconds; + LOG_FUNCTION_START(""); + + Status = VL53L0X_RdByte(Dev, VL53L0X_REG_SYSTEM_SEQUENCE_CONFIG, + &SequenceConfig); + + SequenceConfigNew = SequenceConfig; + + if (Status == VL53L0X_ERROR_NONE) { + if (SequenceStepEnabled == 1) { + + /* Enable requested sequence step + */ + switch (SequenceStepId) { + case VL53L0X_SEQUENCESTEP_TCC: + SequenceConfigNew |= 0x10; + break; + case VL53L0X_SEQUENCESTEP_DSS: + SequenceConfigNew |= 0x28; + break; + case VL53L0X_SEQUENCESTEP_MSRC: + SequenceConfigNew |= 0x04; + break; + case VL53L0X_SEQUENCESTEP_PRE_RANGE: + SequenceConfigNew |= 0x40; + break; + case VL53L0X_SEQUENCESTEP_FINAL_RANGE: + SequenceConfigNew |= 0x80; + break; + default: + Status = VL53L0X_ERROR_INVALID_PARAMS; + } + } else { + /* Disable requested sequence step + */ + switch (SequenceStepId) { + case VL53L0X_SEQUENCESTEP_TCC: + SequenceConfigNew &= 0xef; + break; + case VL53L0X_SEQUENCESTEP_DSS: + SequenceConfigNew &= 0xd7; + break; + case VL53L0X_SEQUENCESTEP_MSRC: + SequenceConfigNew &= 0xfb; + break; + case VL53L0X_SEQUENCESTEP_PRE_RANGE: + SequenceConfigNew &= 0xbf; + break; + case VL53L0X_SEQUENCESTEP_FINAL_RANGE: + SequenceConfigNew &= 0x7f; + break; + default: + Status = VL53L0X_ERROR_INVALID_PARAMS; + } + } + } + + if (SequenceConfigNew != SequenceConfig) { + /* Apply New Setting */ + if (Status == VL53L0X_ERROR_NONE) { + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_SYSTEM_SEQUENCE_CONFIG, SequenceConfigNew); + } + if (Status == VL53L0X_ERROR_NONE) + PALDevDataSet(Dev, SequenceConfig, SequenceConfigNew); + + + /* Recalculate timing budget */ + if (Status == VL53L0X_ERROR_NONE) { + VL53L0X_GETPARAMETERFIELD(Dev, + MeasurementTimingBudgetMicroSeconds, + MeasurementTimingBudgetMicroSeconds); + + VL53L0X_SetMeasurementTimingBudgetMicroSeconds(Dev, + MeasurementTimingBudgetMicroSeconds); + } + } + + LOG_FUNCTION_END(Status); + + return Status; +} + +VL53L0X_Error sequence_step_enabled(VL53L0X_DEV Dev, + VL53L0X_SequenceStepId SequenceStepId, uint8_t SequenceConfig, + uint8_t *pSequenceStepEnabled) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + *pSequenceStepEnabled = 0; + LOG_FUNCTION_START(""); + + switch (SequenceStepId) { + case VL53L0X_SEQUENCESTEP_TCC: + *pSequenceStepEnabled = (SequenceConfig & 0x10) >> 4; + break; + case VL53L0X_SEQUENCESTEP_DSS: + *pSequenceStepEnabled = (SequenceConfig & 0x08) >> 3; + break; + case VL53L0X_SEQUENCESTEP_MSRC: + *pSequenceStepEnabled = (SequenceConfig & 0x04) >> 2; + break; + case VL53L0X_SEQUENCESTEP_PRE_RANGE: + *pSequenceStepEnabled = (SequenceConfig & 0x40) >> 6; + break; + case VL53L0X_SEQUENCESTEP_FINAL_RANGE: + *pSequenceStepEnabled = (SequenceConfig & 0x80) >> 7; + break; + default: + Status = VL53L0X_ERROR_INVALID_PARAMS; + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetSequenceStepEnable(VL53L0X_DEV Dev, + VL53L0X_SequenceStepId SequenceStepId, uint8_t *pSequenceStepEnabled) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t SequenceConfig = 0; + LOG_FUNCTION_START(""); + + Status = VL53L0X_RdByte(Dev, VL53L0X_REG_SYSTEM_SEQUENCE_CONFIG, + &SequenceConfig); + + if (Status == VL53L0X_ERROR_NONE) { + Status = sequence_step_enabled(Dev, SequenceStepId, + SequenceConfig, pSequenceStepEnabled); + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetSequenceStepEnables(VL53L0X_DEV Dev, + VL53L0X_SchedulerSequenceSteps_t *pSchedulerSequenceSteps) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t SequenceConfig = 0; + LOG_FUNCTION_START(""); + + Status = VL53L0X_RdByte(Dev, VL53L0X_REG_SYSTEM_SEQUENCE_CONFIG, + &SequenceConfig); + + if (Status == VL53L0X_ERROR_NONE) { + Status = sequence_step_enabled(Dev, + VL53L0X_SEQUENCESTEP_TCC, SequenceConfig, + &pSchedulerSequenceSteps->TccOn); + } + if (Status == VL53L0X_ERROR_NONE) { + Status = sequence_step_enabled(Dev, + VL53L0X_SEQUENCESTEP_DSS, SequenceConfig, + &pSchedulerSequenceSteps->DssOn); + } + if (Status == VL53L0X_ERROR_NONE) { + Status = sequence_step_enabled(Dev, + VL53L0X_SEQUENCESTEP_MSRC, SequenceConfig, + &pSchedulerSequenceSteps->MsrcOn); + } + if (Status == VL53L0X_ERROR_NONE) { + Status = sequence_step_enabled(Dev, + VL53L0X_SEQUENCESTEP_PRE_RANGE, SequenceConfig, + &pSchedulerSequenceSteps->PreRangeOn); + } + if (Status == VL53L0X_ERROR_NONE) { + Status = sequence_step_enabled(Dev, + VL53L0X_SEQUENCESTEP_FINAL_RANGE, SequenceConfig, + &pSchedulerSequenceSteps->FinalRangeOn); + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetNumberOfSequenceSteps(VL53L0X_DEV Dev, + uint8_t *pNumberOfSequenceSteps) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + *pNumberOfSequenceSteps = VL53L0X_SEQUENCESTEP_NUMBER_OF_CHECKS; + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetSequenceStepsInfo(VL53L0X_SequenceStepId SequenceStepId, + char *pSequenceStepsString) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + Status = VL53L0X_get_sequence_steps_info( + SequenceStepId, + pSequenceStepsString); + + LOG_FUNCTION_END(Status); + + return Status; +} + +VL53L0X_Error VL53L0X_SetSequenceStepTimeout(VL53L0X_DEV Dev, + VL53L0X_SequenceStepId SequenceStepId, FixPoint1616_t TimeOutMilliSecs) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + VL53L0X_Error Status1 = VL53L0X_ERROR_NONE; + uint32_t TimeoutMicroSeconds = ((TimeOutMilliSecs * 1000) + 0x8000) + >> 16; + uint32_t MeasurementTimingBudgetMicroSeconds; + FixPoint1616_t OldTimeOutMicroSeconds; + + LOG_FUNCTION_START(""); + + /* Read back the current value in case we need to revert back to this. + */ + Status = get_sequence_step_timeout(Dev, SequenceStepId, + &OldTimeOutMicroSeconds); + + if (Status == VL53L0X_ERROR_NONE) { + Status = set_sequence_step_timeout(Dev, SequenceStepId, + TimeoutMicroSeconds); + } + + if (Status == VL53L0X_ERROR_NONE) { + VL53L0X_GETPARAMETERFIELD(Dev, + MeasurementTimingBudgetMicroSeconds, + MeasurementTimingBudgetMicroSeconds); + + /* At this point we don't know if the requested value is valid, + therefore proceed to update the entire timing budget and + if this fails, revert back to the previous value. + */ + Status = VL53L0X_SetMeasurementTimingBudgetMicroSeconds(Dev, + MeasurementTimingBudgetMicroSeconds); + + if (Status != VL53L0X_ERROR_NONE) { + Status1 = set_sequence_step_timeout(Dev, SequenceStepId, + OldTimeOutMicroSeconds); + + if (Status1 == VL53L0X_ERROR_NONE) { + Status1 = + VL53L0X_SetMeasurementTimingBudgetMicroSeconds( + Dev, + MeasurementTimingBudgetMicroSeconds); + } + + Status = Status1; + } + } + + LOG_FUNCTION_END(Status); + + return Status; +} + +VL53L0X_Error VL53L0X_GetSequenceStepTimeout(VL53L0X_DEV Dev, + VL53L0X_SequenceStepId SequenceStepId, FixPoint1616_t *pTimeOutMilliSecs) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint32_t TimeoutMicroSeconds; + LOG_FUNCTION_START(""); + + Status = get_sequence_step_timeout(Dev, SequenceStepId, + &TimeoutMicroSeconds); + if (Status == VL53L0X_ERROR_NONE) { + TimeoutMicroSeconds <<= 8; + *pTimeOutMilliSecs = (TimeoutMicroSeconds + 500)/1000; + *pTimeOutMilliSecs <<= 8; + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_SetInterMeasurementPeriodMilliSeconds(VL53L0X_DEV Dev, + uint32_t InterMeasurementPeriodMilliSeconds) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint16_t osc_calibrate_val; + uint32_t IMPeriodMilliSeconds; + + LOG_FUNCTION_START(""); + + Status = VL53L0X_RdWord(Dev, VL53L0X_REG_OSC_CALIBRATE_VAL, + &osc_calibrate_val); + + if (Status == VL53L0X_ERROR_NONE) { + if (osc_calibrate_val != 0) { + IMPeriodMilliSeconds = + InterMeasurementPeriodMilliSeconds + * osc_calibrate_val; + } else { + IMPeriodMilliSeconds = + InterMeasurementPeriodMilliSeconds; + } + Status = VL53L0X_WrDWord(Dev, + VL53L0X_REG_SYSTEM_INTERMEASUREMENT_PERIOD, + IMPeriodMilliSeconds); + } + + if (Status == VL53L0X_ERROR_NONE) { + VL53L0X_SETPARAMETERFIELD(Dev, + InterMeasurementPeriodMilliSeconds, + InterMeasurementPeriodMilliSeconds); + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetInterMeasurementPeriodMilliSeconds(VL53L0X_DEV Dev, + uint32_t *pInterMeasurementPeriodMilliSeconds) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint16_t osc_calibrate_val; + uint32_t IMPeriodMilliSeconds; + + LOG_FUNCTION_START(""); + + Status = VL53L0X_RdWord(Dev, VL53L0X_REG_OSC_CALIBRATE_VAL, + &osc_calibrate_val); + + if (Status == VL53L0X_ERROR_NONE) { + Status = VL53L0X_RdDWord(Dev, + VL53L0X_REG_SYSTEM_INTERMEASUREMENT_PERIOD, + &IMPeriodMilliSeconds); + } + + if (Status == VL53L0X_ERROR_NONE) { + if (osc_calibrate_val != 0) { + *pInterMeasurementPeriodMilliSeconds = + IMPeriodMilliSeconds / osc_calibrate_val; + } + VL53L0X_SETPARAMETERFIELD(Dev, + InterMeasurementPeriodMilliSeconds, + *pInterMeasurementPeriodMilliSeconds); + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_SetXTalkCompensationEnable(VL53L0X_DEV Dev, + uint8_t XTalkCompensationEnable) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + FixPoint1616_t TempFix1616; + uint16_t LinearityCorrectiveGain; + + LOG_FUNCTION_START(""); + + LinearityCorrectiveGain = PALDevDataGet(Dev, LinearityCorrectiveGain); + + if ((XTalkCompensationEnable == 0) + || (LinearityCorrectiveGain != 1000)) { + TempFix1616 = 0; + } else { + VL53L0X_GETPARAMETERFIELD(Dev, XTalkCompensationRateMegaCps, + TempFix1616); + } + + /* the following register has a format 3.13 */ + Status = VL53L0X_WrWord(Dev, + VL53L0X_REG_CROSSTALK_COMPENSATION_PEAK_RATE_MCPS, + VL53L0X_FIXPOINT1616TOFIXPOINT313(TempFix1616)); + + if (Status == VL53L0X_ERROR_NONE) { + if (XTalkCompensationEnable == 0) { + VL53L0X_SETPARAMETERFIELD(Dev, XTalkCompensationEnable, + 0); + } else { + VL53L0X_SETPARAMETERFIELD(Dev, XTalkCompensationEnable, + 1); + } + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetXTalkCompensationEnable(VL53L0X_DEV Dev, + uint8_t *pXTalkCompensationEnable) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t Temp8; + LOG_FUNCTION_START(""); + + VL53L0X_GETPARAMETERFIELD(Dev, XTalkCompensationEnable, Temp8); + *pXTalkCompensationEnable = Temp8; + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_SetXTalkCompensationRateMegaCps(VL53L0X_DEV Dev, + FixPoint1616_t XTalkCompensationRateMegaCps) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t Temp8; + uint16_t LinearityCorrectiveGain; + uint16_t data; + LOG_FUNCTION_START(""); + + VL53L0X_GETPARAMETERFIELD(Dev, XTalkCompensationEnable, Temp8); + LinearityCorrectiveGain = PALDevDataGet(Dev, LinearityCorrectiveGain); + + if (Temp8 == 0) { /* disabled write only internal value */ + VL53L0X_SETPARAMETERFIELD(Dev, XTalkCompensationRateMegaCps, + XTalkCompensationRateMegaCps); + } else { + /* the following register has a format 3.13 */ + if (LinearityCorrectiveGain == 1000) { + data = VL53L0X_FIXPOINT1616TOFIXPOINT313( + XTalkCompensationRateMegaCps); + } else { + data = 0; + } + + Status = VL53L0X_WrWord(Dev, + VL53L0X_REG_CROSSTALK_COMPENSATION_PEAK_RATE_MCPS, data); + + if (Status == VL53L0X_ERROR_NONE) { + VL53L0X_SETPARAMETERFIELD(Dev, + XTalkCompensationRateMegaCps, + XTalkCompensationRateMegaCps); + } + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetXTalkCompensationRateMegaCps(VL53L0X_DEV Dev, + FixPoint1616_t *pXTalkCompensationRateMegaCps) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint16_t Value; + FixPoint1616_t TempFix1616; + + LOG_FUNCTION_START(""); + + Status = VL53L0X_RdWord(Dev, + VL53L0X_REG_CROSSTALK_COMPENSATION_PEAK_RATE_MCPS, (uint16_t *)&Value); + if (Status == VL53L0X_ERROR_NONE) { + if (Value == 0) { + /* the Xtalk is disabled return value from memory */ + VL53L0X_GETPARAMETERFIELD(Dev, + XTalkCompensationRateMegaCps, TempFix1616); + *pXTalkCompensationRateMegaCps = TempFix1616; + VL53L0X_SETPARAMETERFIELD(Dev, XTalkCompensationEnable, + 0); + } else { + TempFix1616 = VL53L0X_FIXPOINT313TOFIXPOINT1616(Value); + *pXTalkCompensationRateMegaCps = TempFix1616; + VL53L0X_SETPARAMETERFIELD(Dev, + XTalkCompensationRateMegaCps, TempFix1616); + VL53L0X_SETPARAMETERFIELD(Dev, XTalkCompensationEnable, + 1); + } + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_SetRefCalibration(VL53L0X_DEV Dev, uint8_t VhvSettings, + uint8_t PhaseCal) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + Status = VL53L0X_set_ref_calibration(Dev, VhvSettings, PhaseCal); + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetRefCalibration(VL53L0X_DEV Dev, uint8_t *pVhvSettings, + uint8_t *pPhaseCal) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + Status = VL53L0X_get_ref_calibration(Dev, pVhvSettings, pPhaseCal); + + LOG_FUNCTION_END(Status); + return Status; +} + +/* + * CHECK LIMIT FUNCTIONS + */ + +VL53L0X_Error VL53L0X_GetNumberOfLimitCheck(uint16_t *pNumberOfLimitCheck) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + *pNumberOfLimitCheck = VL53L0X_CHECKENABLE_NUMBER_OF_CHECKS; + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetLimitCheckInfo(VL53L0X_DEV Dev, uint16_t LimitCheckId, + char *pLimitCheckString) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + + LOG_FUNCTION_START(""); + + Status = VL53L0X_get_limit_check_info(Dev, LimitCheckId, + pLimitCheckString); + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetLimitCheckStatus(VL53L0X_DEV Dev, uint16_t LimitCheckId, + uint8_t *pLimitCheckStatus) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t Temp8; + + LOG_FUNCTION_START(""); + + if (LimitCheckId >= VL53L0X_CHECKENABLE_NUMBER_OF_CHECKS) { + Status = VL53L0X_ERROR_INVALID_PARAMS; + } else { + + VL53L0X_GETARRAYPARAMETERFIELD(Dev, LimitChecksStatus, + LimitCheckId, Temp8); + + *pLimitCheckStatus = Temp8; + + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_SetLimitCheckEnable(VL53L0X_DEV Dev, uint16_t LimitCheckId, + uint8_t LimitCheckEnable) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + FixPoint1616_t TempFix1616 = 0; + uint8_t LimitCheckEnableInt = 0; + uint8_t LimitCheckDisable = 0; + uint8_t Temp8; + + LOG_FUNCTION_START(""); + + if (LimitCheckId >= VL53L0X_CHECKENABLE_NUMBER_OF_CHECKS) { + Status = VL53L0X_ERROR_INVALID_PARAMS; + } else { + if (LimitCheckEnable == 0) { + TempFix1616 = 0; + LimitCheckEnableInt = 0; + LimitCheckDisable = 1; + + } else { + VL53L0X_GETARRAYPARAMETERFIELD(Dev, LimitChecksValue, + LimitCheckId, TempFix1616); + LimitCheckDisable = 0; + /* this to be sure to have either 0 or 1 */ + LimitCheckEnableInt = 1; + } + + switch (LimitCheckId) { + + case VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE: + /* internal computation: */ + VL53L0X_SETARRAYPARAMETERFIELD(Dev, LimitChecksEnable, + VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE, + LimitCheckEnableInt); + + break; + + case VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE: + + Status = VL53L0X_WrWord(Dev, + VL53L0X_REG_FINAL_RANGE_CONFIG_MIN_COUNT_RATE_RTN_LIMIT, + VL53L0X_FIXPOINT1616TOFIXPOINT97(TempFix1616)); + + break; + + case VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP: + + /* internal computation: */ + VL53L0X_SETARRAYPARAMETERFIELD(Dev, LimitChecksEnable, + VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP, + LimitCheckEnableInt); + + break; + + case VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD: + + /* internal computation: */ + VL53L0X_SETARRAYPARAMETERFIELD(Dev, LimitChecksEnable, + VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD, + LimitCheckEnableInt); + + break; + + case VL53L0X_CHECKENABLE_SIGNAL_RATE_MSRC: + + Temp8 = (uint8_t)(LimitCheckDisable << 1); + Status = VL53L0X_UpdateByte(Dev, + VL53L0X_REG_MSRC_CONFIG_CONTROL, + 0xFE, Temp8); + + break; + + case VL53L0X_CHECKENABLE_SIGNAL_RATE_PRE_RANGE: + + Temp8 = (uint8_t)(LimitCheckDisable << 4); + Status = VL53L0X_UpdateByte(Dev, + VL53L0X_REG_MSRC_CONFIG_CONTROL, + 0xEF, Temp8); + + break; + + + default: + Status = VL53L0X_ERROR_INVALID_PARAMS; + + } + + } + + if (Status == VL53L0X_ERROR_NONE) { + if (LimitCheckEnable == 0) { + VL53L0X_SETARRAYPARAMETERFIELD(Dev, LimitChecksEnable, + LimitCheckId, 0); + } else { + VL53L0X_SETARRAYPARAMETERFIELD(Dev, LimitChecksEnable, + LimitCheckId, 1); + } + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetLimitCheckEnable(VL53L0X_DEV Dev, uint16_t LimitCheckId, + uint8_t *pLimitCheckEnable) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t Temp8; + + LOG_FUNCTION_START(""); + + if (LimitCheckId >= VL53L0X_CHECKENABLE_NUMBER_OF_CHECKS) { + Status = VL53L0X_ERROR_INVALID_PARAMS; + *pLimitCheckEnable = 0; + } else { + VL53L0X_GETARRAYPARAMETERFIELD(Dev, LimitChecksEnable, + LimitCheckId, Temp8); + *pLimitCheckEnable = Temp8; + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_SetLimitCheckValue(VL53L0X_DEV Dev, uint16_t LimitCheckId, + FixPoint1616_t LimitCheckValue) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t Temp8; + + LOG_FUNCTION_START(""); + + VL53L0X_GETARRAYPARAMETERFIELD(Dev, LimitChecksEnable, LimitCheckId, + Temp8); + + if (Temp8 == 0) { /* disabled write only internal value */ + VL53L0X_SETARRAYPARAMETERFIELD(Dev, LimitChecksValue, + LimitCheckId, LimitCheckValue); + } else { + + switch (LimitCheckId) { + + case VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE: + /* internal computation: */ + VL53L0X_SETARRAYPARAMETERFIELD(Dev, LimitChecksValue, + VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE, + LimitCheckValue); + break; + + case VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE: + + Status = VL53L0X_WrWord(Dev, + VL53L0X_REG_FINAL_RANGE_CONFIG_MIN_COUNT_RATE_RTN_LIMIT, + VL53L0X_FIXPOINT1616TOFIXPOINT97( + LimitCheckValue)); + + break; + + case VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP: + + /* internal computation: */ + VL53L0X_SETARRAYPARAMETERFIELD(Dev, LimitChecksValue, + VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP, + LimitCheckValue); + + break; + + case VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD: + + /* internal computation: */ + VL53L0X_SETARRAYPARAMETERFIELD(Dev, LimitChecksValue, + VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD, + LimitCheckValue); + + break; + + case VL53L0X_CHECKENABLE_SIGNAL_RATE_MSRC: + case VL53L0X_CHECKENABLE_SIGNAL_RATE_PRE_RANGE: + + Status = VL53L0X_WrWord(Dev, + VL53L0X_REG_PRE_RANGE_MIN_COUNT_RATE_RTN_LIMIT, + VL53L0X_FIXPOINT1616TOFIXPOINT97( + LimitCheckValue)); + + break; + + default: + Status = VL53L0X_ERROR_INVALID_PARAMS; + + } + + if (Status == VL53L0X_ERROR_NONE) { + VL53L0X_SETARRAYPARAMETERFIELD(Dev, LimitChecksValue, + LimitCheckId, LimitCheckValue); + } + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetLimitCheckValue(VL53L0X_DEV Dev, uint16_t LimitCheckId, + FixPoint1616_t *pLimitCheckValue) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t EnableZeroValue = 0; + uint16_t Temp16; + FixPoint1616_t TempFix1616; + + LOG_FUNCTION_START(""); + + switch (LimitCheckId) { + + case VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE: + /* internal computation: */ + VL53L0X_GETARRAYPARAMETERFIELD(Dev, LimitChecksValue, + VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE, TempFix1616); + EnableZeroValue = 0; + break; + + case VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE: + Status = VL53L0X_RdWord(Dev, + VL53L0X_REG_FINAL_RANGE_CONFIG_MIN_COUNT_RATE_RTN_LIMIT, + &Temp16); + if (Status == VL53L0X_ERROR_NONE) + TempFix1616 = VL53L0X_FIXPOINT97TOFIXPOINT1616(Temp16); + + + EnableZeroValue = 1; + break; + + case VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP: + /* internal computation: */ + VL53L0X_GETARRAYPARAMETERFIELD(Dev, LimitChecksValue, + VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP, TempFix1616); + EnableZeroValue = 0; + break; + + case VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD: + /* internal computation: */ + VL53L0X_GETARRAYPARAMETERFIELD(Dev, LimitChecksValue, + VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD, TempFix1616); + EnableZeroValue = 0; + break; + + case VL53L0X_CHECKENABLE_SIGNAL_RATE_MSRC: + case VL53L0X_CHECKENABLE_SIGNAL_RATE_PRE_RANGE: + Status = VL53L0X_RdWord(Dev, + VL53L0X_REG_PRE_RANGE_MIN_COUNT_RATE_RTN_LIMIT, + &Temp16); + if (Status == VL53L0X_ERROR_NONE) + TempFix1616 = VL53L0X_FIXPOINT97TOFIXPOINT1616(Temp16); + + + EnableZeroValue = 0; + break; + + default: + Status = VL53L0X_ERROR_INVALID_PARAMS; + + } + + if (Status == VL53L0X_ERROR_NONE) { + + if (EnableZeroValue == 1) { + + if (TempFix1616 == 0) { + /* disabled: return value from memory */ + VL53L0X_GETARRAYPARAMETERFIELD(Dev, + LimitChecksValue, LimitCheckId, + TempFix1616); + *pLimitCheckValue = TempFix1616; + VL53L0X_SETARRAYPARAMETERFIELD(Dev, + LimitChecksEnable, LimitCheckId, 0); + } else { + *pLimitCheckValue = TempFix1616; + VL53L0X_SETARRAYPARAMETERFIELD(Dev, + LimitChecksValue, LimitCheckId, + TempFix1616); + VL53L0X_SETARRAYPARAMETERFIELD(Dev, + LimitChecksEnable, LimitCheckId, 1); + } + } else { + *pLimitCheckValue = TempFix1616; + } + } + + LOG_FUNCTION_END(Status); + return Status; + +} + +VL53L0X_Error VL53L0X_GetLimitCheckCurrent(VL53L0X_DEV Dev, uint16_t LimitCheckId, + FixPoint1616_t *pLimitCheckCurrent) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + VL53L0X_RangingMeasurementData_t LastRangeDataBuffer; + + LOG_FUNCTION_START(""); + + if (LimitCheckId >= VL53L0X_CHECKENABLE_NUMBER_OF_CHECKS) { + Status = VL53L0X_ERROR_INVALID_PARAMS; + } else { + switch (LimitCheckId) { + case VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE: + /* Need to run a ranging to have the latest values */ + *pLimitCheckCurrent = PALDevDataGet(Dev, SigmaEstimate); + + break; + + case VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE: + /* Need to run a ranging to have the latest values */ + LastRangeDataBuffer = PALDevDataGet(Dev, + LastRangeMeasure); + *pLimitCheckCurrent = + LastRangeDataBuffer.SignalRateRtnMegaCps; + + break; + + case VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP: + /* Need to run a ranging to have the latest values */ + *pLimitCheckCurrent = PALDevDataGet(Dev, + LastSignalRefMcps); + + break; + + case VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD: + /* Need to run a ranging to have the latest values */ + LastRangeDataBuffer = PALDevDataGet(Dev, + LastRangeMeasure); + *pLimitCheckCurrent = + LastRangeDataBuffer.SignalRateRtnMegaCps; + + break; + + case VL53L0X_CHECKENABLE_SIGNAL_RATE_MSRC: + /* Need to run a ranging to have the latest values */ + LastRangeDataBuffer = PALDevDataGet(Dev, + LastRangeMeasure); + *pLimitCheckCurrent = + LastRangeDataBuffer.SignalRateRtnMegaCps; + + break; + + case VL53L0X_CHECKENABLE_SIGNAL_RATE_PRE_RANGE: + /* Need to run a ranging to have the latest values */ + LastRangeDataBuffer = PALDevDataGet(Dev, + LastRangeMeasure); + *pLimitCheckCurrent = + LastRangeDataBuffer.SignalRateRtnMegaCps; + + break; + + default: + Status = VL53L0X_ERROR_INVALID_PARAMS; + } + } + + LOG_FUNCTION_END(Status); + return Status; + +} + +/* + * WRAPAROUND Check + */ +VL53L0X_Error VL53L0X_SetWrapAroundCheckEnable(VL53L0X_DEV Dev, + uint8_t WrapAroundCheckEnable) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t Byte; + uint8_t WrapAroundCheckEnableInt; + + LOG_FUNCTION_START(""); + + Status = VL53L0X_RdByte(Dev, VL53L0X_REG_SYSTEM_SEQUENCE_CONFIG, &Byte); + if (WrapAroundCheckEnable == 0) { + /* Disable wraparound */ + Byte = Byte & 0x7F; + WrapAroundCheckEnableInt = 0; + } else { + /*Enable wraparound */ + Byte = Byte | 0x80; + WrapAroundCheckEnableInt = 1; + } + + Status = VL53L0X_WrByte(Dev, VL53L0X_REG_SYSTEM_SEQUENCE_CONFIG, Byte); + + if (Status == VL53L0X_ERROR_NONE) { + PALDevDataSet(Dev, SequenceConfig, Byte); + VL53L0X_SETPARAMETERFIELD(Dev, WrapAroundCheckEnable, + WrapAroundCheckEnableInt); + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetWrapAroundCheckEnable(VL53L0X_DEV Dev, + uint8_t *pWrapAroundCheckEnable) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t data; + + LOG_FUNCTION_START(""); + + Status = VL53L0X_RdByte(Dev, VL53L0X_REG_SYSTEM_SEQUENCE_CONFIG, &data); + if (Status == VL53L0X_ERROR_NONE) { + PALDevDataSet(Dev, SequenceConfig, data); + if (data & (0x01 << 7)) + *pWrapAroundCheckEnable = 0x01; + else + *pWrapAroundCheckEnable = 0x00; + } + if (Status == VL53L0X_ERROR_NONE) { + VL53L0X_SETPARAMETERFIELD(Dev, WrapAroundCheckEnable, + *pWrapAroundCheckEnable); + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_SetDmaxCalParameters(VL53L0X_DEV Dev, + uint16_t RangeMilliMeter, FixPoint1616_t SignalRateRtnMegaCps) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + FixPoint1616_t SignalRateRtnMegaCpsTemp = 0; + + LOG_FUNCTION_START(""); + + /* Check if one of input parameter is zero, in that case the + * value are get from NVM */ + if ((RangeMilliMeter == 0) || (SignalRateRtnMegaCps == 0)) { + /* NVM parameters */ + /* Run VL53L0X_get_info_from_device wit option 4 to get + * signal rate at 400 mm if the value have been already + * get this function will return with no access to device */ + VL53L0X_get_info_from_device(Dev, 4); + + SignalRateRtnMegaCpsTemp = VL53L0X_GETDEVICESPECIFICPARAMETER( + Dev, SignalRateMeasFixed400mm); + + PALDevDataSet(Dev, DmaxCalRangeMilliMeter, 400); + PALDevDataSet(Dev, DmaxCalSignalRateRtnMegaCps, + SignalRateRtnMegaCpsTemp); + } else { + /* User parameters */ + PALDevDataSet(Dev, DmaxCalRangeMilliMeter, RangeMilliMeter); + PALDevDataSet(Dev, DmaxCalSignalRateRtnMegaCps, + SignalRateRtnMegaCps); + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetDmaxCalParameters(VL53L0X_DEV Dev, + uint16_t *pRangeMilliMeter, FixPoint1616_t *pSignalRateRtnMegaCps) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + + LOG_FUNCTION_START(""); + + *pRangeMilliMeter = PALDevDataGet(Dev, DmaxCalRangeMilliMeter); + *pSignalRateRtnMegaCps = PALDevDataGet(Dev, + DmaxCalSignalRateRtnMegaCps); + + LOG_FUNCTION_END(Status); + return Status; +} + +/* End Group PAL Parameters Functions */ + +/* Group PAL Measurement Functions */ +VL53L0X_Error VL53L0X_PerformSingleMeasurement(VL53L0X_DEV Dev) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + VL53L0X_DeviceModes DeviceMode; + + LOG_FUNCTION_START(""); + + /* Get Current DeviceMode */ + Status = VL53L0X_GetDeviceMode(Dev, &DeviceMode); + + /* Start immediately to run a single ranging measurement in case of + * single ranging or single histogram */ + if (Status == VL53L0X_ERROR_NONE + && DeviceMode == VL53L0X_DEVICEMODE_SINGLE_RANGING) + Status = VL53L0X_StartMeasurement(Dev); + + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_measurement_poll_for_completion(Dev); + + + /* Change PAL State in case of single ranging or single histogram */ + if (Status == VL53L0X_ERROR_NONE + && DeviceMode == VL53L0X_DEVICEMODE_SINGLE_RANGING) + PALDevDataSet(Dev, PalState, VL53L0X_STATE_IDLE); + + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_PerformSingleHistogramMeasurement(VL53L0X_DEV Dev, + VL53L0X_HistogramMeasurementData_t *pHistogramMeasurementData) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NOT_IMPLEMENTED; + LOG_FUNCTION_START(""); + + /* not implemented on VL53L0X */ + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_PerformRefCalibration(VL53L0X_DEV Dev, uint8_t *pVhvSettings, + uint8_t *pPhaseCal) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + Status = VL53L0X_perform_ref_calibration(Dev, pVhvSettings, + pPhaseCal, 1); + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_PerformXTalkMeasurement(VL53L0X_DEV Dev, + uint32_t TimeoutMs, FixPoint1616_t *pXtalkPerSpad, + uint8_t *pAmbientTooHigh) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NOT_IMPLEMENTED; + LOG_FUNCTION_START(""); + + /* not implemented on VL53L0X */ + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_PerformXTalkCalibration(VL53L0X_DEV Dev, + FixPoint1616_t XTalkCalDistance, + FixPoint1616_t *pXTalkCompensationRateMegaCps) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + Status = VL53L0X_perform_xtalk_calibration(Dev, XTalkCalDistance, + pXTalkCompensationRateMegaCps); + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_PerformOffsetCalibration(VL53L0X_DEV Dev, + FixPoint1616_t CalDistanceMilliMeter, int32_t *pOffsetMicroMeter) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + Status = VL53L0X_perform_offset_calibration(Dev, CalDistanceMilliMeter, + pOffsetMicroMeter); + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_CheckAndLoadInterruptSettings(VL53L0X_DEV Dev, + uint8_t StartNotStopFlag) +{ + uint8_t InterruptConfig; + FixPoint1616_t ThresholdLow; + FixPoint1616_t ThresholdHigh; + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + + InterruptConfig = VL53L0X_GETDEVICESPECIFICPARAMETER(Dev, + Pin0GpioFunctionality); + + if ((InterruptConfig == + VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_LOW) || + (InterruptConfig == + VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_HIGH) || + (InterruptConfig == + VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_OUT)) { + + Status = VL53L0X_GetInterruptThresholds(Dev, + VL53L0X_DEVICEMODE_CONTINUOUS_RANGING, + &ThresholdLow, &ThresholdHigh); + + if (((ThresholdLow > 255*65536) || + (ThresholdHigh > 255*65536)) && + (Status == VL53L0X_ERROR_NONE)) { + + if (StartNotStopFlag != 0) { + Status = VL53L0X_load_tuning_settings(Dev, + InterruptThresholdSettings); + } else { + Status |= VL53L0X_WrByte(Dev, 0xFF, 0x04); + Status |= VL53L0X_WrByte(Dev, 0x70, 0x00); + Status |= VL53L0X_WrByte(Dev, 0xFF, 0x00); + Status |= VL53L0X_WrByte(Dev, 0x80, 0x00); + } + + } + + + } + + return Status; + +} + + +VL53L0X_Error VL53L0X_StartMeasurement(VL53L0X_DEV Dev) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + VL53L0X_DeviceModes DeviceMode; + uint8_t Byte; + uint8_t StartStopByte = VL53L0X_REG_SYSRANGE_MODE_START_STOP; + uint32_t LoopNb; + LOG_FUNCTION_START(""); + + /* Get Current DeviceMode */ + VL53L0X_GetDeviceMode(Dev, &DeviceMode); + + Status = VL53L0X_WrByte(Dev, 0x80, 0x01); + Status = VL53L0X_WrByte(Dev, 0xFF, 0x01); + Status = VL53L0X_WrByte(Dev, 0x00, 0x00); + Status = VL53L0X_WrByte(Dev, 0x91, PALDevDataGet(Dev, StopVariable)); + Status = VL53L0X_WrByte(Dev, 0x00, 0x01); + Status = VL53L0X_WrByte(Dev, 0xFF, 0x00); + Status = VL53L0X_WrByte(Dev, 0x80, 0x00); + + switch (DeviceMode) { + case VL53L0X_DEVICEMODE_SINGLE_RANGING: + Status = VL53L0X_WrByte(Dev, VL53L0X_REG_SYSRANGE_START, 0x01); + + Byte = StartStopByte; + if (Status == VL53L0X_ERROR_NONE) { + /* Wait until start bit has been cleared */ + LoopNb = 0; + do { + if (LoopNb > 0) + Status = VL53L0X_RdByte(Dev, + VL53L0X_REG_SYSRANGE_START, &Byte); + LoopNb = LoopNb + 1; + } while (((Byte & StartStopByte) == StartStopByte) + && (Status == VL53L0X_ERROR_NONE) + && (LoopNb < VL53L0X_DEFAULT_MAX_LOOP)); + + if (LoopNb >= VL53L0X_DEFAULT_MAX_LOOP) + Status = VL53L0X_ERROR_TIME_OUT; + + } + + break; + case VL53L0X_DEVICEMODE_CONTINUOUS_RANGING: + /* Back-to-back mode */ + + /* Check if need to apply interrupt settings */ + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_CheckAndLoadInterruptSettings(Dev, 1); + + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_SYSRANGE_START, + VL53L0X_REG_SYSRANGE_MODE_BACKTOBACK); + if (Status == VL53L0X_ERROR_NONE) { + /* Set PAL State to Running */ + PALDevDataSet(Dev, PalState, VL53L0X_STATE_RUNNING); + } + break; + case VL53L0X_DEVICEMODE_CONTINUOUS_TIMED_RANGING: + /* Continuous mode */ + /* Check if need to apply interrupt settings */ + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_CheckAndLoadInterruptSettings(Dev, 1); + + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_SYSRANGE_START, + VL53L0X_REG_SYSRANGE_MODE_TIMED); + + if (Status == VL53L0X_ERROR_NONE) { + /* Set PAL State to Running */ + PALDevDataSet(Dev, PalState, VL53L0X_STATE_RUNNING); + } + break; + default: + /* Selected mode not supported */ + Status = VL53L0X_ERROR_MODE_NOT_SUPPORTED; + } + + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_StopMeasurement(VL53L0X_DEV Dev) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + Status = VL53L0X_WrByte(Dev, VL53L0X_REG_SYSRANGE_START, + VL53L0X_REG_SYSRANGE_MODE_SINGLESHOT); + + Status = VL53L0X_WrByte(Dev, 0xFF, 0x01); + Status = VL53L0X_WrByte(Dev, 0x00, 0x00); + Status = VL53L0X_WrByte(Dev, 0x91, 0x00); + Status = VL53L0X_WrByte(Dev, 0x00, 0x01); + Status = VL53L0X_WrByte(Dev, 0xFF, 0x00); + + if (Status == VL53L0X_ERROR_NONE) { + /* Set PAL State to Idle */ + PALDevDataSet(Dev, PalState, VL53L0X_STATE_IDLE); + } + + /* Check if need to apply interrupt settings */ + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_CheckAndLoadInterruptSettings(Dev, 0); + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetMeasurementDataReady(VL53L0X_DEV Dev, + uint8_t *pMeasurementDataReady) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t SysRangeStatusRegister; + uint8_t InterruptConfig; + uint32_t InterruptMask; + LOG_FUNCTION_START(""); + + InterruptConfig = VL53L0X_GETDEVICESPECIFICPARAMETER(Dev, + Pin0GpioFunctionality); + + if (InterruptConfig == + VL53L0X_REG_SYSTEM_INTERRUPT_GPIO_NEW_SAMPLE_READY) { + Status = VL53L0X_GetInterruptMaskStatus(Dev, &InterruptMask); + if (InterruptMask == + VL53L0X_REG_SYSTEM_INTERRUPT_GPIO_NEW_SAMPLE_READY) + *pMeasurementDataReady = 1; + else + *pMeasurementDataReady = 0; + } else { + Status = VL53L0X_RdByte(Dev, VL53L0X_REG_RESULT_RANGE_STATUS, + &SysRangeStatusRegister); + if (Status == VL53L0X_ERROR_NONE) { + if (SysRangeStatusRegister & 0x01) + *pMeasurementDataReady = 1; + else + *pMeasurementDataReady = 0; + } + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_WaitDeviceReadyForNewMeasurement(VL53L0X_DEV Dev, + uint32_t MaxLoop) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NOT_IMPLEMENTED; + LOG_FUNCTION_START(""); + + /* not implemented for VL53L0X */ + + LOG_FUNCTION_END(Status); + return Status; +} + + +VL53L0X_Error VL53L0X_GetRangingMeasurementData(VL53L0X_DEV Dev, + VL53L0X_RangingMeasurementData_t *pRangingMeasurementData) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t DeviceRangeStatus; + uint8_t RangeFractionalEnable; + uint8_t PalRangeStatus; + uint8_t XTalkCompensationEnable; + uint16_t AmbientRate; + FixPoint1616_t SignalRate; + uint16_t XTalkCompensationRateMegaCps; + uint16_t EffectiveSpadRtnCount; + uint16_t tmpuint16; + uint16_t XtalkRangeMilliMeter; + uint16_t LinearityCorrectiveGain; + uint8_t localBuffer[12]; + VL53L0X_RangingMeasurementData_t LastRangeDataBuffer; + + LOG_FUNCTION_START(""); + + /* + * use multi read even if some registers are not useful, result will + * be more efficient + * start reading at 0x14 dec20 + * end reading at 0x21 dec33 total 14 bytes to read + */ + Status = VL53L0X_ReadMulti(Dev, 0x14, localBuffer, 12); + + if (Status == VL53L0X_ERROR_NONE) { + + pRangingMeasurementData->ZoneId = 0; /* Only one zone */ + pRangingMeasurementData->TimeStamp = 0; /* Not Implemented */ + + tmpuint16 = VL53L0X_MAKEUINT16(localBuffer[11], localBuffer[10]); + /* cut1.1 if SYSTEM__RANGE_CONFIG if 1 range is 2bits fractional + *(format 11.2) else no fractional + */ + + pRangingMeasurementData->MeasurementTimeUsec = 0; + + SignalRate = VL53L0X_FIXPOINT97TOFIXPOINT1616( + VL53L0X_MAKEUINT16(localBuffer[7], localBuffer[6])); + /* peak_signal_count_rate_rtn_mcps */ + pRangingMeasurementData->SignalRateRtnMegaCps = SignalRate; + + AmbientRate = VL53L0X_MAKEUINT16(localBuffer[9], localBuffer[8]); + pRangingMeasurementData->AmbientRateRtnMegaCps = + VL53L0X_FIXPOINT97TOFIXPOINT1616(AmbientRate); + + EffectiveSpadRtnCount = VL53L0X_MAKEUINT16(localBuffer[3], + localBuffer[2]); + /* EffectiveSpadRtnCount is 8.8 format */ + pRangingMeasurementData->EffectiveSpadRtnCount = + EffectiveSpadRtnCount; + + DeviceRangeStatus = localBuffer[0]; + + /* Get Linearity Corrective Gain */ + LinearityCorrectiveGain = PALDevDataGet(Dev, + LinearityCorrectiveGain); + + /* Get ranging configuration */ + RangeFractionalEnable = PALDevDataGet(Dev, + RangeFractionalEnable); + + if (LinearityCorrectiveGain != 1000) { + + tmpuint16 = (uint16_t)((LinearityCorrectiveGain + * tmpuint16 + 500) / 1000); + + /* Implement Xtalk */ + VL53L0X_GETPARAMETERFIELD(Dev, + XTalkCompensationRateMegaCps, + XTalkCompensationRateMegaCps); + VL53L0X_GETPARAMETERFIELD(Dev, XTalkCompensationEnable, + XTalkCompensationEnable); + + if (XTalkCompensationEnable) { + + if ((SignalRate + - ((XTalkCompensationRateMegaCps + * EffectiveSpadRtnCount) >> 8)) + <= 0) { + if (RangeFractionalEnable) + XtalkRangeMilliMeter = 8888; + else + XtalkRangeMilliMeter = 8888 + << 2; + } else { + XtalkRangeMilliMeter = + (tmpuint16 * SignalRate) + / (SignalRate + - ((XTalkCompensationRateMegaCps + * EffectiveSpadRtnCount) + >> 8)); + } + + tmpuint16 = XtalkRangeMilliMeter; + } + + } + + if (RangeFractionalEnable) { + pRangingMeasurementData->RangeMilliMeter = + (uint16_t)((tmpuint16) >> 2); + pRangingMeasurementData->RangeFractionalPart = + (uint8_t)((tmpuint16 & 0x03) << 6); + } else { + pRangingMeasurementData->RangeMilliMeter = tmpuint16; + pRangingMeasurementData->RangeFractionalPart = 0; + } + + /* + * For a standard definition of RangeStatus, this should + * return 0 in case of good result after a ranging + * The range status depends on the device so call a device + * specific function to obtain the right Status. + */ + Status |= VL53L0X_get_pal_range_status(Dev, DeviceRangeStatus, + SignalRate, EffectiveSpadRtnCount, + pRangingMeasurementData, &PalRangeStatus); + + if (Status == VL53L0X_ERROR_NONE) + pRangingMeasurementData->RangeStatus = PalRangeStatus; + + } + + if (Status == VL53L0X_ERROR_NONE) { + /* Copy last read data into Dev buffer */ + LastRangeDataBuffer = PALDevDataGet(Dev, LastRangeMeasure); + + LastRangeDataBuffer.RangeMilliMeter = + pRangingMeasurementData->RangeMilliMeter; + LastRangeDataBuffer.RangeFractionalPart = + pRangingMeasurementData->RangeFractionalPart; + LastRangeDataBuffer.RangeDMaxMilliMeter = + pRangingMeasurementData->RangeDMaxMilliMeter; + LastRangeDataBuffer.MeasurementTimeUsec = + pRangingMeasurementData->MeasurementTimeUsec; + LastRangeDataBuffer.SignalRateRtnMegaCps = + pRangingMeasurementData->SignalRateRtnMegaCps; + LastRangeDataBuffer.AmbientRateRtnMegaCps = + pRangingMeasurementData->AmbientRateRtnMegaCps; + LastRangeDataBuffer.EffectiveSpadRtnCount = + pRangingMeasurementData->EffectiveSpadRtnCount; + LastRangeDataBuffer.RangeStatus = + pRangingMeasurementData->RangeStatus; + + PALDevDataSet(Dev, LastRangeMeasure, LastRangeDataBuffer); + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetMeasurementRefSignal(VL53L0X_DEV Dev, + FixPoint1616_t *pMeasurementRefSignal) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t SignalRefClipLimitCheckEnable = 0; + LOG_FUNCTION_START(""); + + Status = VL53L0X_GetLimitCheckEnable(Dev, + VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP, + &SignalRefClipLimitCheckEnable); + if (SignalRefClipLimitCheckEnable != 0) { + *pMeasurementRefSignal = PALDevDataGet(Dev, LastSignalRefMcps); + } else { + Status = VL53L0X_ERROR_INVALID_COMMAND; + } + LOG_FUNCTION_END(Status); + + return Status; +} + +VL53L0X_Error VL53L0X_GetHistogramMeasurementData(VL53L0X_DEV Dev, + VL53L0X_HistogramMeasurementData_t *pHistogramMeasurementData) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NOT_IMPLEMENTED; + LOG_FUNCTION_START(""); + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_PerformSingleRangingMeasurement(VL53L0X_DEV Dev, + VL53L0X_RangingMeasurementData_t *pRangingMeasurementData) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + + LOG_FUNCTION_START(""); + + /* This function will do a complete single ranging + * Here we fix the mode! */ + Status = VL53L0X_SetDeviceMode(Dev, VL53L0X_DEVICEMODE_SINGLE_RANGING); + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_PerformSingleMeasurement(Dev); + + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_GetRangingMeasurementData(Dev, + pRangingMeasurementData); + + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_ClearInterruptMask(Dev, 0); + + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_SetNumberOfROIZones(VL53L0X_DEV Dev, + uint8_t NumberOfROIZones) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + + LOG_FUNCTION_START(""); + + if (NumberOfROIZones != 1) + Status = VL53L0X_ERROR_INVALID_PARAMS; + + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetNumberOfROIZones(VL53L0X_DEV Dev, + uint8_t *pNumberOfROIZones) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + + LOG_FUNCTION_START(""); + + *pNumberOfROIZones = 1; + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetMaxNumberOfROIZones(VL53L0X_DEV Dev, + uint8_t *pMaxNumberOfROIZones) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + + LOG_FUNCTION_START(""); + + *pMaxNumberOfROIZones = 1; + + LOG_FUNCTION_END(Status); + return Status; +} + +/* End Group PAL Measurement Functions */ + +VL53L0X_Error VL53L0X_SetGpioConfig(VL53L0X_DEV Dev, uint8_t Pin, + VL53L0X_DeviceModes DeviceMode, VL53L0X_GpioFunctionality Functionality, + VL53L0X_InterruptPolarity Polarity) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t data; + + LOG_FUNCTION_START(""); + + if (Pin != 0) { + Status = VL53L0X_ERROR_GPIO_NOT_EXISTING; + } else if (DeviceMode == VL53L0X_DEVICEMODE_GPIO_DRIVE) { + if (Polarity == VL53L0X_INTERRUPTPOLARITY_LOW) + data = 0x10; + else + data = 1; + + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_GPIO_HV_MUX_ACTIVE_HIGH, data); + + } else if (DeviceMode == VL53L0X_DEVICEMODE_GPIO_OSC) { + + Status |= VL53L0X_WrByte(Dev, 0xff, 0x01); + Status |= VL53L0X_WrByte(Dev, 0x00, 0x00); + + Status |= VL53L0X_WrByte(Dev, 0xff, 0x00); + Status |= VL53L0X_WrByte(Dev, 0x80, 0x01); + Status |= VL53L0X_WrByte(Dev, 0x85, 0x02); + + Status |= VL53L0X_WrByte(Dev, 0xff, 0x04); + Status |= VL53L0X_WrByte(Dev, 0xcd, 0x00); + Status |= VL53L0X_WrByte(Dev, 0xcc, 0x11); + + Status |= VL53L0X_WrByte(Dev, 0xff, 0x07); + Status |= VL53L0X_WrByte(Dev, 0xbe, 0x00); + + Status |= VL53L0X_WrByte(Dev, 0xff, 0x06); + Status |= VL53L0X_WrByte(Dev, 0xcc, 0x09); + + Status |= VL53L0X_WrByte(Dev, 0xff, 0x00); + Status |= VL53L0X_WrByte(Dev, 0xff, 0x01); + Status |= VL53L0X_WrByte(Dev, 0x00, 0x00); + + } else { + + if (Status == VL53L0X_ERROR_NONE) { + switch (Functionality) { + case VL53L0X_GPIOFUNCTIONALITY_OFF: + data = 0x00; + break; + case VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_LOW: + data = 0x01; + break; + case VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_HIGH: + data = 0x02; + break; + case VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_OUT: + data = 0x03; + break; + case VL53L0X_GPIOFUNCTIONALITY_NEW_MEASURE_READY: + data = 0x04; + break; + default: + Status = + VL53L0X_ERROR_GPIO_FUNCTIONALITY_NOT_SUPPORTED; + } + } + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_SYSTEM_INTERRUPT_CONFIG_GPIO, data); + + if (Status == VL53L0X_ERROR_NONE) { + if (Polarity == VL53L0X_INTERRUPTPOLARITY_LOW) + data = 0; + else + data = (uint8_t)(1 << 4); + + Status = VL53L0X_UpdateByte(Dev, + VL53L0X_REG_GPIO_HV_MUX_ACTIVE_HIGH, 0xEF, data); + } + + if (Status == VL53L0X_ERROR_NONE) + VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, + Pin0GpioFunctionality, Functionality); + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_ClearInterruptMask(Dev, 0); + + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetGpioConfig(VL53L0X_DEV Dev, uint8_t Pin, + VL53L0X_DeviceModes *pDeviceMode, + VL53L0X_GpioFunctionality *pFunctionality, + VL53L0X_InterruptPolarity *pPolarity) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + VL53L0X_GpioFunctionality GpioFunctionality; + uint8_t data; + + LOG_FUNCTION_START(""); + + /* pDeviceMode not managed by Ewok it return the current mode */ + + Status = VL53L0X_GetDeviceMode(Dev, pDeviceMode); + + if (Status == VL53L0X_ERROR_NONE) { + if (Pin != 0) { + Status = VL53L0X_ERROR_GPIO_NOT_EXISTING; + } else { + Status = VL53L0X_RdByte(Dev, + VL53L0X_REG_SYSTEM_INTERRUPT_CONFIG_GPIO, &data); + } + } + + if (Status == VL53L0X_ERROR_NONE) { + switch (data & 0x07) { + case 0x00: + GpioFunctionality = VL53L0X_GPIOFUNCTIONALITY_OFF; + break; + case 0x01: + GpioFunctionality = + VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_LOW; + break; + case 0x02: + GpioFunctionality = + VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_HIGH; + break; + case 0x03: + GpioFunctionality = + VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_OUT; + break; + case 0x04: + GpioFunctionality = + VL53L0X_GPIOFUNCTIONALITY_NEW_MEASURE_READY; + break; + default: + Status = VL53L0X_ERROR_GPIO_FUNCTIONALITY_NOT_SUPPORTED; + } + } + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_RdByte(Dev, VL53L0X_REG_GPIO_HV_MUX_ACTIVE_HIGH, + &data); + + if (Status == VL53L0X_ERROR_NONE) { + if ((data & (uint8_t)(1 << 4)) == 0) + *pPolarity = VL53L0X_INTERRUPTPOLARITY_LOW; + else + *pPolarity = VL53L0X_INTERRUPTPOLARITY_HIGH; + } + + if (Status == VL53L0X_ERROR_NONE) { + *pFunctionality = GpioFunctionality; + VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, Pin0GpioFunctionality, + GpioFunctionality); + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_SetInterruptThresholds(VL53L0X_DEV Dev, + VL53L0X_DeviceModes DeviceMode, FixPoint1616_t ThresholdLow, + FixPoint1616_t ThresholdHigh) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint16_t Threshold16; + LOG_FUNCTION_START(""); + + /* no dependency on DeviceMode for Ewok */ + /* Need to divide by 2 because the FW will apply a x2 */ + Threshold16 = (uint16_t)((ThresholdLow >> 17) & 0x00fff); + Status = VL53L0X_WrWord(Dev, VL53L0X_REG_SYSTEM_THRESH_LOW, Threshold16); + + if (Status == VL53L0X_ERROR_NONE) { + /* Need to divide by 2 because the FW will apply a x2 */ + Threshold16 = (uint16_t)((ThresholdHigh >> 17) & 0x00fff); + Status = VL53L0X_WrWord(Dev, VL53L0X_REG_SYSTEM_THRESH_HIGH, + Threshold16); + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetInterruptThresholds(VL53L0X_DEV Dev, + VL53L0X_DeviceModes DeviceMode, FixPoint1616_t *pThresholdLow, + FixPoint1616_t *pThresholdHigh) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint16_t Threshold16; + LOG_FUNCTION_START(""); + + /* no dependency on DeviceMode for Ewok */ + + Status = VL53L0X_RdWord(Dev, VL53L0X_REG_SYSTEM_THRESH_LOW, &Threshold16); + /* Need to multiply by 2 because the FW will apply a x2 */ + *pThresholdLow = (FixPoint1616_t)((0x00fff & Threshold16) << 17); + + if (Status == VL53L0X_ERROR_NONE) { + Status = VL53L0X_RdWord(Dev, VL53L0X_REG_SYSTEM_THRESH_HIGH, + &Threshold16); + /* Need to multiply by 2 because the FW will apply a x2 */ + *pThresholdHigh = + (FixPoint1616_t)((0x00fff & Threshold16) << 17); + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetStopCompletedStatus(VL53L0X_DEV Dev, + uint32_t *pStopStatus) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t Byte = 0; + LOG_FUNCTION_START(""); + + Status = VL53L0X_WrByte(Dev, 0xFF, 0x01); + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_RdByte(Dev, 0x04, &Byte); + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_WrByte(Dev, 0xFF, 0x0); + + *pStopStatus = Byte; + + if (Byte == 0) { + Status = VL53L0X_WrByte(Dev, 0x80, 0x01); + Status = VL53L0X_WrByte(Dev, 0xFF, 0x01); + Status = VL53L0X_WrByte(Dev, 0x00, 0x00); + Status = VL53L0X_WrByte(Dev, 0x91, + PALDevDataGet(Dev, StopVariable)); + Status = VL53L0X_WrByte(Dev, 0x00, 0x01); + Status = VL53L0X_WrByte(Dev, 0xFF, 0x00); + Status = VL53L0X_WrByte(Dev, 0x80, 0x00); + } + + LOG_FUNCTION_END(Status); + return Status; +} + +/* Group PAL Interrupt Functions */ +VL53L0X_Error VL53L0X_ClearInterruptMask(VL53L0X_DEV Dev, uint32_t InterruptMask) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t LoopCount; + uint8_t Byte; + LOG_FUNCTION_START(""); + + /* clear bit 0 range interrupt, bit 1 error interrupt */ + LoopCount = 0; + do { + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_SYSTEM_INTERRUPT_CLEAR, 0x01); + Status |= VL53L0X_WrByte(Dev, + VL53L0X_REG_SYSTEM_INTERRUPT_CLEAR, 0x00); + Status |= VL53L0X_RdByte(Dev, + VL53L0X_REG_RESULT_INTERRUPT_STATUS, &Byte); + LoopCount++; + } while (((Byte & 0x07) != 0x00) + && (LoopCount < 3) + && (Status == VL53L0X_ERROR_NONE)); + + + if (LoopCount >= 3) + Status = VL53L0X_ERROR_INTERRUPT_NOT_CLEARED; + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetInterruptMaskStatus(VL53L0X_DEV Dev, + uint32_t *pInterruptMaskStatus) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t Byte; + LOG_FUNCTION_START(""); + + Status = VL53L0X_RdByte(Dev, VL53L0X_REG_RESULT_INTERRUPT_STATUS, &Byte); + *pInterruptMaskStatus = Byte & 0x07; + + if (Byte & 0x18) + Status = VL53L0X_ERROR_RANGE_ERROR; + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_EnableInterruptMask(VL53L0X_DEV Dev, uint32_t InterruptMask) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NOT_IMPLEMENTED; + LOG_FUNCTION_START(""); + + /* not implemented for VL53L0X */ + + LOG_FUNCTION_END(Status); + return Status; +} + +/* End Group PAL Interrupt Functions */ + +/* Group SPAD functions */ + +VL53L0X_Error VL53L0X_SetSpadAmbientDamperThreshold(VL53L0X_DEV Dev, + uint16_t SpadAmbientDamperThreshold) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + Status = VL53L0X_WrByte(Dev, 0xFF, 0x01); + Status |= VL53L0X_WrWord(Dev, 0x40, SpadAmbientDamperThreshold); + Status |= VL53L0X_WrByte(Dev, 0xFF, 0x00); + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetSpadAmbientDamperThreshold(VL53L0X_DEV Dev, + uint16_t *pSpadAmbientDamperThreshold) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + Status = VL53L0X_WrByte(Dev, 0xFF, 0x01); + Status |= VL53L0X_RdWord(Dev, 0x40, pSpadAmbientDamperThreshold); + Status |= VL53L0X_WrByte(Dev, 0xFF, 0x00); + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_SetSpadAmbientDamperFactor(VL53L0X_DEV Dev, + uint16_t SpadAmbientDamperFactor) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t Byte; + LOG_FUNCTION_START(""); + + Byte = (uint8_t)(SpadAmbientDamperFactor & 0x00FF); + + Status = VL53L0X_WrByte(Dev, 0xFF, 0x01); + Status |= VL53L0X_WrByte(Dev, 0x42, Byte); + Status |= VL53L0X_WrByte(Dev, 0xFF, 0x00); + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_GetSpadAmbientDamperFactor(VL53L0X_DEV Dev, + uint16_t *pSpadAmbientDamperFactor) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t Byte; + LOG_FUNCTION_START(""); + + Status = VL53L0X_WrByte(Dev, 0xFF, 0x01); + Status |= VL53L0X_RdByte(Dev, 0x42, &Byte); + Status |= VL53L0X_WrByte(Dev, 0xFF, 0x00); + *pSpadAmbientDamperFactor = (uint16_t)Byte; + + LOG_FUNCTION_END(Status); + return Status; +} + +/* END Group SPAD functions */ + +/***************************************************************************** + * Internal functions + *****************************************************************************/ + +VL53L0X_Error VL53L0X_SetReferenceSpads(VL53L0X_DEV Dev, uint32_t count, + uint8_t isApertureSpads) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + Status = VL53L0X_set_reference_spads(Dev, count, isApertureSpads); + + LOG_FUNCTION_END(Status); + + return Status; +} + +VL53L0X_Error VL53L0X_GetReferenceSpads(VL53L0X_DEV Dev, uint32_t *pSpadCount, + uint8_t *pIsApertureSpads) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + Status = VL53L0X_get_reference_spads(Dev, pSpadCount, pIsApertureSpads); + + LOG_FUNCTION_END(Status); + + return Status; +} + +VL53L0X_Error VL53L0X_PerformRefSpadManagement(VL53L0X_DEV Dev, + uint32_t *refSpadCount, uint8_t *isApertureSpads) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + Status = VL53L0X_perform_ref_spad_management(Dev, refSpadCount, + isApertureSpads); + + LOG_FUNCTION_END(Status); + + return Status; +} diff --git a/modules/VL53L0X/src/vl53l0x_api_calibration.c b/modules/VL53L0X/src/vl53l0x_api_calibration.c new file mode 100644 index 0000000..2995897 --- /dev/null +++ b/modules/VL53L0X/src/vl53l0x_api_calibration.c @@ -0,0 +1,1276 @@ +/******************************************************************************* + Copyright 2016, STMicroelectronics International N.V. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of STMicroelectronics nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND + NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED. + IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ******************************************************************************/ + +#include "vl53l0x_api.h" +#include "vl53l0x_api_core.h" +#include "vl53l0x_api_calibration.h" + +#ifndef __KERNEL__ +#include +#endif + +#define LOG_FUNCTION_START(fmt, ...) \ + _LOG_FUNCTION_START(TRACE_MODULE_API, fmt, ##__VA_ARGS__) +#define LOG_FUNCTION_END(status, ...) \ + _LOG_FUNCTION_END(TRACE_MODULE_API, status, ##__VA_ARGS__) +#define LOG_FUNCTION_END_FMT(status, fmt, ...) \ + _LOG_FUNCTION_END_FMT(TRACE_MODULE_API, status, fmt, ##__VA_ARGS__) + +#define REF_ARRAY_SPAD_0 0 +#define REF_ARRAY_SPAD_5 5 +#define REF_ARRAY_SPAD_10 10 + +uint32_t refArrayQuadrants[4] = {REF_ARRAY_SPAD_10, REF_ARRAY_SPAD_5, + REF_ARRAY_SPAD_0, REF_ARRAY_SPAD_5 }; + +VL53L0X_Error VL53L0X_perform_xtalk_calibration(VL53L0X_DEV Dev, + FixPoint1616_t XTalkCalDistance, + FixPoint1616_t *pXTalkCompensationRateMegaCps) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint16_t sum_ranging = 0; + uint16_t sum_spads = 0; + FixPoint1616_t sum_signalRate = 0; + FixPoint1616_t total_count = 0; + uint8_t xtalk_meas = 0; + VL53L0X_RangingMeasurementData_t RangingMeasurementData; + FixPoint1616_t xTalkStoredMeanSignalRate; + FixPoint1616_t xTalkStoredMeanRange; + FixPoint1616_t xTalkStoredMeanRtnSpads; + uint32_t signalXTalkTotalPerSpad; + uint32_t xTalkStoredMeanRtnSpadsAsInt; + uint32_t xTalkCalDistanceAsInt; + FixPoint1616_t XTalkCompensationRateMegaCps; + + if (XTalkCalDistance <= 0) + Status = VL53L0X_ERROR_INVALID_PARAMS; + + /* Disable the XTalk compensation */ + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_SetXTalkCompensationEnable(Dev, 0); + + /* Disable the RIT */ + if (Status == VL53L0X_ERROR_NONE) { + Status = VL53L0X_SetLimitCheckEnable(Dev, + VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD, 0); + } + + /* Perform 50 measurements and compute the averages */ + if (Status == VL53L0X_ERROR_NONE) { + sum_ranging = 0; + sum_spads = 0; + sum_signalRate = 0; + total_count = 0; + for (xtalk_meas = 0; xtalk_meas < 50; xtalk_meas++) { + Status = VL53L0X_PerformSingleRangingMeasurement(Dev, + &RangingMeasurementData); + + if (Status != VL53L0X_ERROR_NONE) + break; + + /* The range is valid when RangeStatus = 0 */ + if (RangingMeasurementData.RangeStatus == 0) { + sum_ranging = sum_ranging + + RangingMeasurementData.RangeMilliMeter; + sum_signalRate = sum_signalRate + + RangingMeasurementData.SignalRateRtnMegaCps; + sum_spads = sum_spads + + RangingMeasurementData.EffectiveSpadRtnCount + / 256; + total_count = total_count + 1; + } + } + + /* no valid values found */ + if (total_count == 0) + Status = VL53L0X_ERROR_RANGE_ERROR; + + } + + + if (Status == VL53L0X_ERROR_NONE) { + /* FixPoint1616_t / uint16_t = FixPoint1616_t */ + xTalkStoredMeanSignalRate = sum_signalRate / total_count; + xTalkStoredMeanRange = (FixPoint1616_t)((uint32_t)( + sum_ranging << 16) / total_count); + xTalkStoredMeanRtnSpads = (FixPoint1616_t)((uint32_t)( + sum_spads << 16) / total_count); + + /* Round Mean Spads to Whole Number. + * Typically the calculated mean SPAD count is a whole number + * or very close to a whole + * number, therefore any truncation will not result in a + * significant loss in accuracy. + * Also, for a grey target at a typical distance of around + * 400mm, around 220 SPADs will + * be enabled, therefore, any truncation will result in a loss + * of accuracy of less than + * 0.5%. + */ + xTalkStoredMeanRtnSpadsAsInt = (xTalkStoredMeanRtnSpads + + 0x8000) >> 16; + + /* Round Cal Distance to Whole Number. + * Note that the cal distance is in mm, therefore no resolution + * is lost.*/ + xTalkCalDistanceAsInt = (XTalkCalDistance + 0x8000) >> 16; + + if (xTalkStoredMeanRtnSpadsAsInt == 0 || + xTalkCalDistanceAsInt == 0 || + xTalkStoredMeanRange >= XTalkCalDistance) { + XTalkCompensationRateMegaCps = 0; + } else { + /* Round Cal Distance to Whole Number. + Note that the cal distance is in mm, therefore no + resolution is lost.*/ + xTalkCalDistanceAsInt = (XTalkCalDistance + + 0x8000) >> 16; + + /* Apply division by mean spad count early in the + * calculation to keep the numbers small. + * This ensures we can maintain a 32bit calculation. + * Fixed1616 / int := Fixed1616 */ + signalXTalkTotalPerSpad = (xTalkStoredMeanSignalRate) / + xTalkStoredMeanRtnSpadsAsInt; + + /* Complete the calculation for total Signal XTalk per + * SPAD + * Fixed1616 * (Fixed1616 - Fixed1616/int) := + * (2^16 * Fixed1616) + */ + signalXTalkTotalPerSpad *= ((1 << 16) - + (xTalkStoredMeanRange / xTalkCalDistanceAsInt)); + + /* Round from 2^16 * Fixed1616, to Fixed1616. */ + XTalkCompensationRateMegaCps = (signalXTalkTotalPerSpad + + 0x8000) >> 16; + } + + *pXTalkCompensationRateMegaCps = XTalkCompensationRateMegaCps; + + /* Enable the XTalk compensation */ + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_SetXTalkCompensationEnable(Dev, 1); + + /* Enable the XTalk compensation */ + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_SetXTalkCompensationRateMegaCps(Dev, + XTalkCompensationRateMegaCps); + + } + + return Status; +} + +VL53L0X_Error VL53L0X_perform_offset_calibration(VL53L0X_DEV Dev, + FixPoint1616_t CalDistanceMilliMeter, + int32_t *pOffsetMicroMeter) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint16_t sum_ranging = 0; + FixPoint1616_t total_count = 0; + VL53L0X_RangingMeasurementData_t RangingMeasurementData; + FixPoint1616_t StoredMeanRange; + uint32_t StoredMeanRangeAsInt; + uint32_t CalDistanceAsInt_mm; + uint8_t SequenceStepEnabled; + int meas = 0; + + if (CalDistanceMilliMeter <= 0) + Status = VL53L0X_ERROR_INVALID_PARAMS; + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_SetOffsetCalibrationDataMicroMeter(Dev, 0); + + + /* Get the value of the TCC */ + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_GetSequenceStepEnable(Dev, + VL53L0X_SEQUENCESTEP_TCC, &SequenceStepEnabled); + + + /* Disable the TCC */ + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_SetSequenceStepEnable(Dev, + VL53L0X_SEQUENCESTEP_TCC, 0); + + + /* Disable the RIT */ + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_SetLimitCheckEnable(Dev, + VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD, 0); + + /* Perform 50 measurements and compute the averages */ + if (Status == VL53L0X_ERROR_NONE) { + sum_ranging = 0; + total_count = 0; + for (meas = 0; meas < 50; meas++) { + Status = VL53L0X_PerformSingleRangingMeasurement(Dev, + &RangingMeasurementData); + + if (Status != VL53L0X_ERROR_NONE) + break; + + /* The range is valid when RangeStatus = 0 */ + if (RangingMeasurementData.RangeStatus == 0) { + sum_ranging = sum_ranging + + RangingMeasurementData.RangeMilliMeter; + total_count = total_count + 1; + } + } + + /* no valid values found */ + if (total_count == 0) + Status = VL53L0X_ERROR_RANGE_ERROR; + } + + + if (Status == VL53L0X_ERROR_NONE) { + /* FixPoint1616_t / uint16_t = FixPoint1616_t */ + StoredMeanRange = (FixPoint1616_t)((uint32_t)(sum_ranging << 16) + / total_count); + + StoredMeanRangeAsInt = (StoredMeanRange + 0x8000) >> 16; + + /* Round Cal Distance to Whole Number. + * Note that the cal distance is in mm, therefore no resolution + * is lost.*/ + CalDistanceAsInt_mm = (CalDistanceMilliMeter + 0x8000) >> 16; + + *pOffsetMicroMeter = (CalDistanceAsInt_mm - + StoredMeanRangeAsInt) * 1000; + + /* Apply the calculated offset */ + if (Status == VL53L0X_ERROR_NONE) { + VL53L0X_SETPARAMETERFIELD(Dev, RangeOffsetMicroMeters, + *pOffsetMicroMeter); + Status = VL53L0X_SetOffsetCalibrationDataMicroMeter(Dev, + *pOffsetMicroMeter); + } + + } + + /* Restore the TCC */ + if (Status == VL53L0X_ERROR_NONE) { + if (SequenceStepEnabled != 0) + Status = VL53L0X_SetSequenceStepEnable(Dev, + VL53L0X_SEQUENCESTEP_TCC, 1); + } + + return Status; +} + + +VL53L0X_Error VL53L0X_set_offset_calibration_data_micro_meter(VL53L0X_DEV Dev, + int32_t OffsetCalibrationDataMicroMeter) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + int32_t cMaxOffsetMicroMeter = 511000; + int32_t cMinOffsetMicroMeter = -512000; + int16_t cOffsetRange = 4096; + uint32_t encodedOffsetVal; + + LOG_FUNCTION_START(""); + + if (OffsetCalibrationDataMicroMeter > cMaxOffsetMicroMeter) + OffsetCalibrationDataMicroMeter = cMaxOffsetMicroMeter; + else if (OffsetCalibrationDataMicroMeter < cMinOffsetMicroMeter) + OffsetCalibrationDataMicroMeter = cMinOffsetMicroMeter; + + /* The offset register is 10.2 format and units are mm + * therefore conversion is applied by a division of + * 250. + */ + if (OffsetCalibrationDataMicroMeter >= 0) { + encodedOffsetVal = + OffsetCalibrationDataMicroMeter/250; + } else { + encodedOffsetVal = + cOffsetRange + + OffsetCalibrationDataMicroMeter/250; + } + + Status = VL53L0X_WrWord(Dev, + VL53L0X_REG_ALGO_PART_TO_PART_RANGE_OFFSET_MM, + encodedOffsetVal); + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_get_offset_calibration_data_micro_meter(VL53L0X_DEV Dev, + int32_t *pOffsetCalibrationDataMicroMeter) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint16_t RangeOffsetRegister; + int16_t cMaxOffset = 2047; + int16_t cOffsetRange = 4096; + + /* Note that offset has 10.2 format */ + + Status = VL53L0X_RdWord(Dev, + VL53L0X_REG_ALGO_PART_TO_PART_RANGE_OFFSET_MM, + &RangeOffsetRegister); + + if (Status == VL53L0X_ERROR_NONE) { + RangeOffsetRegister = (RangeOffsetRegister & 0x0fff); + + /* Apply 12 bit 2's compliment conversion */ + if (RangeOffsetRegister > cMaxOffset) + *pOffsetCalibrationDataMicroMeter = + (int16_t)(RangeOffsetRegister - cOffsetRange) + * 250; + else + *pOffsetCalibrationDataMicroMeter = + (int16_t)RangeOffsetRegister * 250; + + } + + return Status; +} + + +VL53L0X_Error VL53L0X_apply_offset_adjustment(VL53L0X_DEV Dev) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + int32_t CorrectedOffsetMicroMeters; + int32_t CurrentOffsetMicroMeters; + + /* if we run on this function we can read all the NVM info + * used by the API */ + Status = VL53L0X_get_info_from_device(Dev, 7); + + /* Read back current device offset */ + if (Status == VL53L0X_ERROR_NONE) { + Status = VL53L0X_GetOffsetCalibrationDataMicroMeter(Dev, + &CurrentOffsetMicroMeters); + } + + /* Apply Offset Adjustment derived from 400mm measurements */ + if (Status == VL53L0X_ERROR_NONE) { + + /* Store initial device offset */ + PALDevDataSet(Dev, Part2PartOffsetNVMMicroMeter, + CurrentOffsetMicroMeters); + + CorrectedOffsetMicroMeters = CurrentOffsetMicroMeters + + (int32_t)PALDevDataGet(Dev, + Part2PartOffsetAdjustmentNVMMicroMeter); + + Status = VL53L0X_SetOffsetCalibrationDataMicroMeter(Dev, + CorrectedOffsetMicroMeters); + + /* store current, adjusted offset */ + if (Status == VL53L0X_ERROR_NONE) { + VL53L0X_SETPARAMETERFIELD(Dev, RangeOffsetMicroMeters, + CorrectedOffsetMicroMeters); + } + } + + return Status; +} + +void get_next_good_spad(uint8_t goodSpadArray[], uint32_t size, + uint32_t curr, int32_t *next) +{ + uint32_t startIndex; + uint32_t fineOffset; + uint32_t cSpadsPerByte = 8; + uint32_t coarseIndex; + uint32_t fineIndex; + uint8_t dataByte; + uint8_t success = 0; + + /* + * Starting with the current good spad, loop through the array to find + * the next. i.e. the next bit set in the sequence. + * + * The coarse index is the byte index of the array and the fine index is + * the index of the bit within each byte. + */ + + *next = -1; + + startIndex = curr / cSpadsPerByte; + fineOffset = curr % cSpadsPerByte; + + for (coarseIndex = startIndex; ((coarseIndex < size) && !success); + coarseIndex++) { + fineIndex = 0; + dataByte = goodSpadArray[coarseIndex]; + + if (coarseIndex == startIndex) { + /* locate the bit position of the provided current + * spad bit before iterating */ + dataByte >>= fineOffset; + fineIndex = fineOffset; + } + + while (fineIndex < cSpadsPerByte) { + if ((dataByte & 0x1) == 1) { + success = 1; + *next = coarseIndex * cSpadsPerByte + fineIndex; + break; + } + dataByte >>= 1; + fineIndex++; + } + } +} + + +uint8_t is_aperture(uint32_t spadIndex) +{ + /* + * This function reports if a given spad index is an aperture SPAD by + * deriving the quadrant. + */ + uint32_t quadrant; + uint8_t isAperture = 1; + quadrant = spadIndex >> 6; + if (refArrayQuadrants[quadrant] == REF_ARRAY_SPAD_0) + isAperture = 0; + + return isAperture; +} + + +VL53L0X_Error enable_spad_bit(uint8_t spadArray[], uint32_t size, + uint32_t spadIndex) +{ + VL53L0X_Error status = VL53L0X_ERROR_NONE; + uint32_t cSpadsPerByte = 8; + uint32_t coarseIndex; + uint32_t fineIndex; + + coarseIndex = spadIndex / cSpadsPerByte; + fineIndex = spadIndex % cSpadsPerByte; + if (coarseIndex >= size) + status = VL53L0X_ERROR_REF_SPAD_INIT; + else + spadArray[coarseIndex] |= (1 << fineIndex); + + return status; +} + +VL53L0X_Error count_enabled_spads(uint8_t spadArray[], + uint32_t byteCount, uint32_t maxSpads, + uint32_t *pTotalSpadsEnabled, uint8_t *pIsAperture) +{ + VL53L0X_Error status = VL53L0X_ERROR_NONE; + uint32_t cSpadsPerByte = 8; + uint32_t lastByte; + uint32_t lastBit; + uint32_t byteIndex = 0; + uint32_t bitIndex = 0; + uint8_t tempByte; + uint8_t spadTypeIdentified = 0; + + /* The entire array will not be used for spads, therefore the last + * byte and last bit is determined from the max spads value. + */ + + lastByte = maxSpads / cSpadsPerByte; + lastBit = maxSpads % cSpadsPerByte; + + /* Check that the max spads value does not exceed the array bounds. */ + if (lastByte >= byteCount) + status = VL53L0X_ERROR_REF_SPAD_INIT; + + *pTotalSpadsEnabled = 0; + + /* Count the bits enabled in the whole bytes */ + for (byteIndex = 0; byteIndex <= (lastByte - 1); byteIndex++) { + tempByte = spadArray[byteIndex]; + + for (bitIndex = 0; bitIndex <= cSpadsPerByte; bitIndex++) { + if ((tempByte & 0x01) == 1) { + (*pTotalSpadsEnabled)++; + + if (!spadTypeIdentified) { + *pIsAperture = 1; + if ((byteIndex < 2) && (bitIndex < 4)) + *pIsAperture = 0; + spadTypeIdentified = 1; + } + } + tempByte >>= 1; + } + } + + /* Count the number of bits enabled in the last byte accounting + * for the fact that not all bits in the byte may be used. + */ + tempByte = spadArray[lastByte]; + + for (bitIndex = 0; bitIndex <= lastBit; bitIndex++) { + if ((tempByte & 0x01) == 1) + (*pTotalSpadsEnabled)++; + } + + return status; +} + +VL53L0X_Error set_ref_spad_map(VL53L0X_DEV Dev, uint8_t *refSpadArray) +{ + VL53L0X_Error status = VL53L0X_WriteMulti(Dev, + VL53L0X_REG_GLOBAL_CONFIG_SPAD_ENABLES_REF_0, + refSpadArray, 6); + return status; +} + +VL53L0X_Error get_ref_spad_map(VL53L0X_DEV Dev, uint8_t *refSpadArray) +{ + VL53L0X_Error status = VL53L0X_ReadMulti(Dev, + VL53L0X_REG_GLOBAL_CONFIG_SPAD_ENABLES_REF_0, + refSpadArray, + 6); + return status; +} + +VL53L0X_Error enable_ref_spads(VL53L0X_DEV Dev, + uint8_t apertureSpads, + uint8_t goodSpadArray[], + uint8_t spadArray[], + uint32_t size, + uint32_t start, + uint32_t offset, + uint32_t spadCount, + uint32_t *lastSpad) +{ + VL53L0X_Error status = VL53L0X_ERROR_NONE; + uint32_t index; + uint32_t i; + int32_t nextGoodSpad = offset; + uint32_t currentSpad; + uint8_t checkSpadArray[6]; + + /* + * This function takes in a spad array which may or may not have SPADS + * already enabled and appends from a given offset a requested number + * of new SPAD enables. The 'good spad map' is applied to + * determine the next SPADs to enable. + * + * This function applies to only aperture or only non-aperture spads. + * Checks are performed to ensure this. + */ + + currentSpad = offset; + for (index = 0; index < spadCount; index++) { + get_next_good_spad(goodSpadArray, size, currentSpad, + &nextGoodSpad); + + if (nextGoodSpad == -1) { + status = VL53L0X_ERROR_REF_SPAD_INIT; + break; + } + + /* Confirm that the next good SPAD is non-aperture */ + if (is_aperture(start + nextGoodSpad) != apertureSpads) { + /* if we can't get the required number of good aperture + * spads from the current quadrant then this is an error + */ + status = VL53L0X_ERROR_REF_SPAD_INIT; + break; + } + currentSpad = (uint32_t)nextGoodSpad; + enable_spad_bit(spadArray, size, currentSpad); + currentSpad++; + } + *lastSpad = currentSpad; + + if (status == VL53L0X_ERROR_NONE) + status = set_ref_spad_map(Dev, spadArray); + + + if (status == VL53L0X_ERROR_NONE) { + status = get_ref_spad_map(Dev, checkSpadArray); + + i = 0; + + /* Compare spad maps. If not equal report error. */ + while (i < size) { + if (spadArray[i] != checkSpadArray[i]) { + status = VL53L0X_ERROR_REF_SPAD_INIT; + break; + } + i++; + } + } + return status; +} + + +VL53L0X_Error perform_ref_signal_measurement(VL53L0X_DEV Dev, + uint16_t *refSignalRate) +{ + VL53L0X_Error status = VL53L0X_ERROR_NONE; + VL53L0X_RangingMeasurementData_t rangingMeasurementData; + + uint8_t SequenceConfig = 0; + + /* store the value of the sequence config, + * this will be reset before the end of the function + */ + + SequenceConfig = PALDevDataGet(Dev, SequenceConfig); + + /* + * This function performs a reference signal rate measurement. + */ + if (status == VL53L0X_ERROR_NONE) + status = VL53L0X_WrByte(Dev, + VL53L0X_REG_SYSTEM_SEQUENCE_CONFIG, 0xC0); + + if (status == VL53L0X_ERROR_NONE) + status = VL53L0X_PerformSingleRangingMeasurement(Dev, + &rangingMeasurementData); + + if (status == VL53L0X_ERROR_NONE) + status = VL53L0X_WrByte(Dev, 0xFF, 0x01); + + if (status == VL53L0X_ERROR_NONE) + status = VL53L0X_RdWord(Dev, + VL53L0X_REG_RESULT_PEAK_SIGNAL_RATE_REF, + refSignalRate); + + if (status == VL53L0X_ERROR_NONE) + status = VL53L0X_WrByte(Dev, 0xFF, 0x00); + + if (status == VL53L0X_ERROR_NONE) { + /* restore the previous Sequence Config */ + status = VL53L0X_WrByte(Dev, VL53L0X_REG_SYSTEM_SEQUENCE_CONFIG, + SequenceConfig); + if (status == VL53L0X_ERROR_NONE) + PALDevDataSet(Dev, SequenceConfig, SequenceConfig); + } + + return status; +} + +VL53L0X_Error VL53L0X_perform_ref_spad_management(VL53L0X_DEV Dev, + uint32_t *refSpadCount, + uint8_t *isApertureSpads) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t lastSpadArray[6]; + uint8_t startSelect = 0xB4; + uint32_t minimumSpadCount = 3; + uint32_t maxSpadCount = 44; + uint32_t currentSpadIndex = 0; + uint32_t lastSpadIndex = 0; + int32_t nextGoodSpad = 0; + uint16_t targetRefRate = 0x0A00; /* 20 MCPS in 9:7 format */ + uint16_t peakSignalRateRef; + uint32_t needAptSpads = 0; + uint32_t index = 0; + uint32_t spadArraySize = 6; + uint32_t signalRateDiff = 0; + uint32_t lastSignalRateDiff = 0; + uint8_t complete = 0; + uint8_t VhvSettings = 0; + uint8_t PhaseCal = 0; + uint32_t refSpadCount_int = 0; + uint8_t isApertureSpads_int = 0; + + /* + * The reference SPAD initialization procedure determines the minimum + * amount of reference spads to be enables to achieve a target reference + * signal rate and should be performed once during initialization. + * + * Either aperture or non-aperture spads are applied but never both. + * Firstly non-aperture spads are set, begining with 5 spads, and + * increased one spad at a time until the closest measurement to the + * target rate is achieved. + * + * If the target rate is exceeded when 5 non-aperture spads are enabled, + * initialization is performed instead with aperture spads. + * + * When setting spads, a 'Good Spad Map' is applied. + * + * This procedure operates within a SPAD window of interest of a maximum + * 44 spads. + * The start point is currently fixed to 180, which lies towards the end + * of the non-aperture quadrant and runs in to the adjacent aperture + * quadrant. + */ + + + targetRefRate = PALDevDataGet(Dev, targetRefRate); + + /* + * Initialize Spad arrays. + * Currently the good spad map is initialised to 'All good'. + * This is a short term implementation. The good spad map will be + * provided as an input. + * Note that there are 6 bytes. Only the first 44 bits will be used to + * represent spads. + */ + for (index = 0; index < spadArraySize; index++) + Dev->Data.SpadData.RefSpadEnables[index] = 0; + + + Status = VL53L0X_WrByte(Dev, 0xFF, 0x01); + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_DYNAMIC_SPAD_REF_EN_START_OFFSET, 0x00); + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_DYNAMIC_SPAD_NUM_REQUESTED_REF_SPAD, 0x2C); + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_WrByte(Dev, 0xFF, 0x00); + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_GLOBAL_CONFIG_REF_EN_START_SELECT, + startSelect); + + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_POWER_MANAGEMENT_GO1_POWER_FORCE, 0); + + /* Perform ref calibration */ + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_perform_ref_calibration(Dev, &VhvSettings, + &PhaseCal, 0); + + if (Status == VL53L0X_ERROR_NONE) { + /* Enable Minimum NON-APERTURE Spads */ + currentSpadIndex = 0; + lastSpadIndex = currentSpadIndex; + needAptSpads = 0; + Status = enable_ref_spads(Dev, + needAptSpads, + Dev->Data.SpadData.RefGoodSpadMap, + Dev->Data.SpadData.RefSpadEnables, + spadArraySize, + startSelect, + currentSpadIndex, + minimumSpadCount, + &lastSpadIndex); + } + + if (Status == VL53L0X_ERROR_NONE) { + currentSpadIndex = lastSpadIndex; + + Status = perform_ref_signal_measurement(Dev, + &peakSignalRateRef); + if ((Status == VL53L0X_ERROR_NONE) && + (peakSignalRateRef > targetRefRate)) { + /* Signal rate measurement too high, + * switch to APERTURE SPADs */ + + for (index = 0; index < spadArraySize; index++) + Dev->Data.SpadData.RefSpadEnables[index] = 0; + + + /* Increment to the first APERTURE spad */ + while ((is_aperture(startSelect + currentSpadIndex) + == 0) && (currentSpadIndex < maxSpadCount)) { + currentSpadIndex++; + } + + needAptSpads = 1; + + Status = enable_ref_spads(Dev, + needAptSpads, + Dev->Data.SpadData.RefGoodSpadMap, + Dev->Data.SpadData.RefSpadEnables, + spadArraySize, + startSelect, + currentSpadIndex, + minimumSpadCount, + &lastSpadIndex); + + if (Status == VL53L0X_ERROR_NONE) { + currentSpadIndex = lastSpadIndex; + Status = perform_ref_signal_measurement(Dev, + &peakSignalRateRef); + + if ((Status == VL53L0X_ERROR_NONE) && + (peakSignalRateRef > targetRefRate)) { + /* Signal rate still too high after + * setting the minimum number of + * APERTURE spads. Can do no more + * therefore set the min number of + * aperture spads as the result. + */ + isApertureSpads_int = 1; + refSpadCount_int = minimumSpadCount; + } + } + } else { + needAptSpads = 0; + } + } + + if ((Status == VL53L0X_ERROR_NONE) && + (peakSignalRateRef < targetRefRate)) { + /* At this point, the minimum number of either aperture + * or non-aperture spads have been set. Proceed to add + * spads and perform measurements until the target + * reference is reached. + */ + isApertureSpads_int = needAptSpads; + refSpadCount_int = minimumSpadCount; + + memcpy(lastSpadArray, Dev->Data.SpadData.RefSpadEnables, + spadArraySize); + lastSignalRateDiff = abs(peakSignalRateRef - + targetRefRate); + complete = 0; + + while (!complete) { + get_next_good_spad( + Dev->Data.SpadData.RefGoodSpadMap, + spadArraySize, currentSpadIndex, + &nextGoodSpad); + + if (nextGoodSpad == -1) { + Status = VL53L0X_ERROR_REF_SPAD_INIT; + break; + } + + /* Cannot combine Aperture and Non-Aperture spads, so + * ensure the current spad is of the correct type. + */ + if (is_aperture((uint32_t)startSelect + nextGoodSpad) != + needAptSpads) { + /* At this point we have enabled the maximum + * number of Aperture spads. + */ + complete = 1; + break; + } + + (refSpadCount_int)++; + + currentSpadIndex = nextGoodSpad; + Status = enable_spad_bit( + Dev->Data.SpadData.RefSpadEnables, + spadArraySize, currentSpadIndex); + + if (Status == VL53L0X_ERROR_NONE) { + currentSpadIndex++; + /* Proceed to apply the additional spad and + * perform measurement. */ + Status = set_ref_spad_map(Dev, + Dev->Data.SpadData.RefSpadEnables); + } + + if (Status != VL53L0X_ERROR_NONE) + break; + + Status = perform_ref_signal_measurement(Dev, + &peakSignalRateRef); + + if (Status != VL53L0X_ERROR_NONE) + break; + + signalRateDiff = abs(peakSignalRateRef - targetRefRate); + + if (peakSignalRateRef > targetRefRate) { + /* Select the spad map that provides the + * measurement closest to the target rate, + * either above or below it. + */ + if (signalRateDiff > lastSignalRateDiff) { + /* Previous spad map produced a closer + * measurement, so choose this. */ + Status = set_ref_spad_map(Dev, + lastSpadArray); + memcpy( + Dev->Data.SpadData.RefSpadEnables, + lastSpadArray, spadArraySize); + + (refSpadCount_int)--; + } + complete = 1; + } else { + /* Continue to add spads */ + lastSignalRateDiff = signalRateDiff; + memcpy(lastSpadArray, + Dev->Data.SpadData.RefSpadEnables, + spadArraySize); + } + + } /* while */ + } + + if (Status == VL53L0X_ERROR_NONE) { + *refSpadCount = refSpadCount_int; + *isApertureSpads = isApertureSpads_int; + + VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, RefSpadsInitialised, 1); + VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, + ReferenceSpadCount, (uint8_t)(*refSpadCount)); + VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, + ReferenceSpadType, *isApertureSpads); + } + + return Status; +} + +VL53L0X_Error VL53L0X_set_reference_spads(VL53L0X_DEV Dev, + uint32_t count, uint8_t isApertureSpads) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint32_t currentSpadIndex = 0; + uint8_t startSelect = 0xB4; + uint32_t spadArraySize = 6; + uint32_t maxSpadCount = 44; + uint32_t lastSpadIndex; + uint32_t index; + + /* + * This function applies a requested number of reference spads, either + * aperture or + * non-aperture, as requested. + * The good spad map will be applied. + */ + + Status = VL53L0X_WrByte(Dev, 0xFF, 0x01); + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_DYNAMIC_SPAD_REF_EN_START_OFFSET, 0x00); + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_DYNAMIC_SPAD_NUM_REQUESTED_REF_SPAD, 0x2C); + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_WrByte(Dev, 0xFF, 0x00); + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_GLOBAL_CONFIG_REF_EN_START_SELECT, + startSelect); + + for (index = 0; index < spadArraySize; index++) + Dev->Data.SpadData.RefSpadEnables[index] = 0; + + if (isApertureSpads) { + /* Increment to the first APERTURE spad */ + while ((is_aperture(startSelect + currentSpadIndex) == 0) && + (currentSpadIndex < maxSpadCount)) { + currentSpadIndex++; + } + } + Status = enable_ref_spads(Dev, + isApertureSpads, + Dev->Data.SpadData.RefGoodSpadMap, + Dev->Data.SpadData.RefSpadEnables, + spadArraySize, + startSelect, + currentSpadIndex, + count, + &lastSpadIndex); + + if (Status == VL53L0X_ERROR_NONE) { + VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, RefSpadsInitialised, 1); + VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, + ReferenceSpadCount, (uint8_t)(count)); + VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, + ReferenceSpadType, isApertureSpads); + } + + return Status; +} + +VL53L0X_Error VL53L0X_get_reference_spads(VL53L0X_DEV Dev, + uint32_t *pSpadCount, uint8_t *pIsApertureSpads) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t refSpadsInitialised; + uint8_t refSpadArray[6]; + uint32_t cMaxSpadCount = 44; + uint32_t cSpadArraySize = 6; + uint32_t spadsEnabled; + uint8_t isApertureSpads = 0; + + refSpadsInitialised = VL53L0X_GETDEVICESPECIFICPARAMETER(Dev, + RefSpadsInitialised); + + if (refSpadsInitialised == 1) { + + *pSpadCount = (uint32_t)VL53L0X_GETDEVICESPECIFICPARAMETER(Dev, + ReferenceSpadCount); + *pIsApertureSpads = VL53L0X_GETDEVICESPECIFICPARAMETER(Dev, + ReferenceSpadType); + } else { + + /* obtain spad info from device.*/ + Status = get_ref_spad_map(Dev, refSpadArray); + + if (Status == VL53L0X_ERROR_NONE) { + /* count enabled spads within spad map array and + * determine if Aperture or Non-Aperture. + */ + Status = count_enabled_spads(refSpadArray, + cSpadArraySize, + cMaxSpadCount, + &spadsEnabled, + &isApertureSpads); + + if (Status == VL53L0X_ERROR_NONE) { + + *pSpadCount = spadsEnabled; + *pIsApertureSpads = isApertureSpads; + + VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, + RefSpadsInitialised, 1); + VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, + ReferenceSpadCount, + (uint8_t)spadsEnabled); + VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, + ReferenceSpadType, isApertureSpads); + } + } + } + + return Status; +} + + +VL53L0X_Error VL53L0X_perform_single_ref_calibration(VL53L0X_DEV Dev, + uint8_t vhv_init_byte) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_WrByte(Dev, VL53L0X_REG_SYSRANGE_START, + VL53L0X_REG_SYSRANGE_MODE_START_STOP | + vhv_init_byte); + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_measurement_poll_for_completion(Dev); + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_ClearInterruptMask(Dev, 0); + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_WrByte(Dev, VL53L0X_REG_SYSRANGE_START, 0x00); + + return Status; +} + + +VL53L0X_Error VL53L0X_ref_calibration_io(VL53L0X_DEV Dev, uint8_t read_not_write, + uint8_t VhvSettings, uint8_t PhaseCal, + uint8_t *pVhvSettings, uint8_t *pPhaseCal, + const uint8_t vhv_enable, const uint8_t phase_enable) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t PhaseCalint = 0; + + /* Read VHV from device */ + Status |= VL53L0X_WrByte(Dev, 0xFF, 0x01); + Status |= VL53L0X_WrByte(Dev, 0x00, 0x00); + Status |= VL53L0X_WrByte(Dev, 0xFF, 0x00); + + if (read_not_write) { + if (vhv_enable) + Status |= VL53L0X_RdByte(Dev, 0xCB, pVhvSettings); + if (phase_enable) + Status |= VL53L0X_RdByte(Dev, 0xEE, &PhaseCalint); + } else { + if (vhv_enable) + Status |= VL53L0X_WrByte(Dev, 0xCB, VhvSettings); + if (phase_enable) + Status |= VL53L0X_UpdateByte(Dev, 0xEE, 0x80, PhaseCal); + } + + Status |= VL53L0X_WrByte(Dev, 0xFF, 0x01); + Status |= VL53L0X_WrByte(Dev, 0x00, 0x01); + Status |= VL53L0X_WrByte(Dev, 0xFF, 0x00); + + *pPhaseCal = (uint8_t)(PhaseCalint&0xEF); + + return Status; +} + + +VL53L0X_Error VL53L0X_perform_vhv_calibration(VL53L0X_DEV Dev, + uint8_t *pVhvSettings, const uint8_t get_data_enable, + const uint8_t restore_config) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t SequenceConfig = 0; + uint8_t VhvSettings = 0; + uint8_t PhaseCal = 0; + uint8_t PhaseCalInt = 0; + + /* store the value of the sequence config, + * this will be reset before the end of the function + */ + + if (restore_config) + SequenceConfig = PALDevDataGet(Dev, SequenceConfig); + + /* Run VHV */ + Status = VL53L0X_WrByte(Dev, VL53L0X_REG_SYSTEM_SEQUENCE_CONFIG, 0x01); + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_perform_single_ref_calibration(Dev, 0x40); + + /* Read VHV from device */ + if ((Status == VL53L0X_ERROR_NONE) && (get_data_enable == 1)) { + Status = VL53L0X_ref_calibration_io(Dev, 1, + VhvSettings, PhaseCal, /* Not used here */ + pVhvSettings, &PhaseCalInt, + 1, 0); + } else + *pVhvSettings = 0; + + + if ((Status == VL53L0X_ERROR_NONE) && restore_config) { + /* restore the previous Sequence Config */ + Status = VL53L0X_WrByte(Dev, VL53L0X_REG_SYSTEM_SEQUENCE_CONFIG, + SequenceConfig); + if (Status == VL53L0X_ERROR_NONE) + PALDevDataSet(Dev, SequenceConfig, SequenceConfig); + + } + + return Status; +} + +VL53L0X_Error VL53L0X_perform_phase_calibration(VL53L0X_DEV Dev, + uint8_t *pPhaseCal, const uint8_t get_data_enable, + const uint8_t restore_config) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t SequenceConfig = 0; + uint8_t VhvSettings = 0; + uint8_t PhaseCal = 0; + uint8_t VhvSettingsint; + + /* store the value of the sequence config, + * this will be reset before the end of the function + */ + + if (restore_config) + SequenceConfig = PALDevDataGet(Dev, SequenceConfig); + + /* Run PhaseCal */ + Status = VL53L0X_WrByte(Dev, VL53L0X_REG_SYSTEM_SEQUENCE_CONFIG, 0x02); + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_perform_single_ref_calibration(Dev, 0x0); + + /* Read PhaseCal from device */ + if ((Status == VL53L0X_ERROR_NONE) && (get_data_enable == 1)) { + Status = VL53L0X_ref_calibration_io(Dev, 1, + VhvSettings, PhaseCal, /* Not used here */ + &VhvSettingsint, pPhaseCal, + 0, 1); + } else + *pPhaseCal = 0; + + + if ((Status == VL53L0X_ERROR_NONE) && restore_config) { + /* restore the previous Sequence Config */ + Status = VL53L0X_WrByte(Dev, VL53L0X_REG_SYSTEM_SEQUENCE_CONFIG, + SequenceConfig); + if (Status == VL53L0X_ERROR_NONE) + PALDevDataSet(Dev, SequenceConfig, SequenceConfig); + + } + + return Status; +} + +VL53L0X_Error VL53L0X_perform_ref_calibration(VL53L0X_DEV Dev, + uint8_t *pVhvSettings, uint8_t *pPhaseCal, uint8_t get_data_enable) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t SequenceConfig = 0; + + /* store the value of the sequence config, + * this will be reset before the end of the function + */ + + SequenceConfig = PALDevDataGet(Dev, SequenceConfig); + + /* In the following function we don't save the config to optimize + * writes on device. Config is saved and restored only once. */ + Status = VL53L0X_perform_vhv_calibration( + Dev, pVhvSettings, get_data_enable, 0); + + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_perform_phase_calibration( + Dev, pPhaseCal, get_data_enable, 0); + + + if (Status == VL53L0X_ERROR_NONE) { + /* restore the previous Sequence Config */ + Status = VL53L0X_WrByte(Dev, VL53L0X_REG_SYSTEM_SEQUENCE_CONFIG, + SequenceConfig); + if (Status == VL53L0X_ERROR_NONE) + PALDevDataSet(Dev, SequenceConfig, SequenceConfig); + + } + + return Status; +} + +VL53L0X_Error VL53L0X_set_ref_calibration(VL53L0X_DEV Dev, + uint8_t VhvSettings, uint8_t PhaseCal) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t pVhvSettings; + uint8_t pPhaseCal; + + Status = VL53L0X_ref_calibration_io(Dev, 0, + VhvSettings, PhaseCal, + &pVhvSettings, &pPhaseCal, + 1, 1); + + return Status; +} + +VL53L0X_Error VL53L0X_get_ref_calibration(VL53L0X_DEV Dev, + uint8_t *pVhvSettings, uint8_t *pPhaseCal) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t VhvSettings = 0; + uint8_t PhaseCal = 0; + + Status = VL53L0X_ref_calibration_io(Dev, 1, + VhvSettings, PhaseCal, + pVhvSettings, pPhaseCal, + 1, 1); + + return Status; +} diff --git a/modules/VL53L0X/src/vl53l0x_api_core.c b/modules/VL53L0X/src/vl53l0x_api_core.c new file mode 100644 index 0000000..8f0632a --- /dev/null +++ b/modules/VL53L0X/src/vl53l0x_api_core.c @@ -0,0 +1,2239 @@ +/******************************************************************************* + Copyright 2016, STMicroelectronics International N.V. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of STMicroelectronics nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND + NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED. + IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ******************************************************************************/ + +#include "vl53l0x_api.h" +#include "vl53l0x_api_core.h" +#include "vl53l0x_api_calibration.h" + + +#ifndef __KERNEL__ +#include +#endif +#define LOG_FUNCTION_START(fmt, ...) \ + _LOG_FUNCTION_START(TRACE_MODULE_API, fmt, ##__VA_ARGS__) +#define LOG_FUNCTION_END(status, ...) \ + _LOG_FUNCTION_END(TRACE_MODULE_API, status, ##__VA_ARGS__) +#define LOG_FUNCTION_END_FMT(status, fmt, ...) \ + _LOG_FUNCTION_END_FMT(TRACE_MODULE_API, status, fmt, ##__VA_ARGS__) + +VL53L0X_Error VL53L0X_reverse_bytes(uint8_t *data, uint32_t size) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t tempData; + uint32_t mirrorIndex; + uint32_t middle = size/2; + uint32_t index; + + for (index = 0; index < middle; index++) { + mirrorIndex = size - index - 1; + tempData = data[index]; + data[index] = data[mirrorIndex]; + data[mirrorIndex] = tempData; + } + return Status; +} + +VL53L0X_Error VL53L0X_measurement_poll_for_completion(VL53L0X_DEV Dev) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t NewDataReady = 0; + uint32_t LoopNb; + + LOG_FUNCTION_START(""); + + LoopNb = 0; + + do { + Status = VL53L0X_GetMeasurementDataReady(Dev, &NewDataReady); + if (Status != 0) + break; /* the error is set */ + + if (NewDataReady == 1) + break; /* done note that status == 0 */ + + LoopNb++; + if (LoopNb >= VL53L0X_DEFAULT_MAX_LOOP) { + Status = VL53L0X_ERROR_TIME_OUT; + break; + } + + VL53L0X_PollingDelay(Dev); + } while (1); + + LOG_FUNCTION_END(Status); + + return Status; +} + + +uint8_t VL53L0X_decode_vcsel_period(uint8_t vcsel_period_reg) +{ + /*! + * Converts the encoded VCSEL period register value into the real + * period in PLL clocks + */ + + uint8_t vcsel_period_pclks = 0; + + vcsel_period_pclks = (vcsel_period_reg + 1) << 1; + + return vcsel_period_pclks; +} + +uint8_t VL53L0X_encode_vcsel_period(uint8_t vcsel_period_pclks) +{ + /*! + * Converts the encoded VCSEL period register value into the real period + * in PLL clocks + */ + + uint8_t vcsel_period_reg = 0; + + vcsel_period_reg = (vcsel_period_pclks >> 1) - 1; + + return vcsel_period_reg; +} + + +uint32_t VL53L0X_isqrt(uint32_t num) +{ + /* + * Implements an integer square root + * + * From: http://en.wikipedia.org/wiki/Methods_of_computing_square_roots + */ + + uint32_t res = 0; + uint32_t bit = 1 << 30; + /* The second-to-top bit is set: + * 1 << 14 for 16-bits, 1 << 30 for 32 bits */ + + /* "bit" starts at the highest power of four <= the argument. */ + while (bit > num) + bit >>= 2; + + + while (bit != 0) { + if (num >= res + bit) { + num -= res + bit; + res = (res >> 1) + bit; + } else + res >>= 1; + + bit >>= 2; + } + + return res; +} + + +uint32_t VL53L0X_quadrature_sum(uint32_t a, uint32_t b) +{ + /* + * Implements a quadrature sum + * + * rea = sqrt(a^2 + b^2) + * + * Trap overflow case max input value is 65535 (16-bit value) + * as internal calc are 32-bit wide + * + * If overflow then seta output to maximum + */ + uint32_t res = 0; + + if (a > 65535 || b > 65535) + res = 65535; + else + res = VL53L0X_isqrt(a * a + b * b); + + return res; +} + + +VL53L0X_Error VL53L0X_device_read_strobe(VL53L0X_DEV Dev) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t strobe; + uint32_t LoopNb; + LOG_FUNCTION_START(""); + + Status |= VL53L0X_WrByte(Dev, 0x83, 0x00); + + /* polling + * use timeout to avoid deadlock*/ + if (Status == VL53L0X_ERROR_NONE) { + LoopNb = 0; + do { + Status = VL53L0X_RdByte(Dev, 0x83, &strobe); + if ((strobe != 0x00) || Status != VL53L0X_ERROR_NONE) + break; + + LoopNb = LoopNb + 1; + } while (LoopNb < VL53L0X_DEFAULT_MAX_LOOP); + + if (LoopNb >= VL53L0X_DEFAULT_MAX_LOOP) + Status = VL53L0X_ERROR_TIME_OUT; + + } + + Status |= VL53L0X_WrByte(Dev, 0x83, 0x01); + + LOG_FUNCTION_END(Status); + return Status; + +} + +VL53L0X_Error VL53L0X_get_info_from_device(VL53L0X_DEV Dev, uint8_t option) +{ + + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t byte; + uint32_t TmpDWord; + uint8_t ModuleId; + uint8_t Revision; + uint8_t ReferenceSpadCount = 0; + uint8_t ReferenceSpadType = 0; + uint32_t PartUIDUpper = 0; + uint32_t PartUIDLower = 0; + uint32_t OffsetFixed1104_mm = 0; + int16_t OffsetMicroMeters = 0; + uint32_t DistMeasTgtFixed1104_mm = 400 << 4; + uint32_t DistMeasFixed1104_400_mm = 0; + uint32_t SignalRateMeasFixed1104_400_mm = 0; + char ProductId[19]; + char *ProductId_tmp; + uint8_t ReadDataFromDeviceDone; + FixPoint1616_t SignalRateMeasFixed400mmFix = 0; + uint8_t NvmRefGoodSpadMap[VL53L0X_REF_SPAD_BUFFER_SIZE]; + int i; + + + LOG_FUNCTION_START(""); + + ReadDataFromDeviceDone = VL53L0X_GETDEVICESPECIFICPARAMETER(Dev, + ReadDataFromDeviceDone); + + /* This access is done only once after that a GetDeviceInfo or + * datainit is done*/ + if (ReadDataFromDeviceDone != 7) { + + Status |= VL53L0X_WrByte(Dev, 0x80, 0x01); + Status |= VL53L0X_WrByte(Dev, 0xFF, 0x01); + Status |= VL53L0X_WrByte(Dev, 0x00, 0x00); + + Status |= VL53L0X_WrByte(Dev, 0xFF, 0x06); + Status |= VL53L0X_RdByte(Dev, 0x83, &byte); + Status |= VL53L0X_WrByte(Dev, 0x83, byte|4); + Status |= VL53L0X_WrByte(Dev, 0xFF, 0x07); + Status |= VL53L0X_WrByte(Dev, 0x81, 0x01); + + Status |= VL53L0X_PollingDelay(Dev); + + Status |= VL53L0X_WrByte(Dev, 0x80, 0x01); + + if (((option & 1) == 1) && + ((ReadDataFromDeviceDone & 1) == 0)) { + Status |= VL53L0X_WrByte(Dev, 0x94, 0x6b); + Status |= VL53L0X_device_read_strobe(Dev); + Status |= VL53L0X_RdDWord(Dev, 0x90, &TmpDWord); + + ReferenceSpadCount = (uint8_t)((TmpDWord >> 8) & 0x07f); + ReferenceSpadType = (uint8_t)((TmpDWord >> 15) & 0x01); + + Status |= VL53L0X_WrByte(Dev, 0x94, 0x24); + Status |= VL53L0X_device_read_strobe(Dev); + Status |= VL53L0X_RdDWord(Dev, 0x90, &TmpDWord); + + + NvmRefGoodSpadMap[0] = (uint8_t)((TmpDWord >> 24) + & 0xff); + NvmRefGoodSpadMap[1] = (uint8_t)((TmpDWord >> 16) + & 0xff); + NvmRefGoodSpadMap[2] = (uint8_t)((TmpDWord >> 8) + & 0xff); + NvmRefGoodSpadMap[3] = (uint8_t)(TmpDWord & 0xff); + + Status |= VL53L0X_WrByte(Dev, 0x94, 0x25); + Status |= VL53L0X_device_read_strobe(Dev); + Status |= VL53L0X_RdDWord(Dev, 0x90, &TmpDWord); + + NvmRefGoodSpadMap[4] = (uint8_t)((TmpDWord >> 24) + & 0xff); + NvmRefGoodSpadMap[5] = (uint8_t)((TmpDWord >> 16) + & 0xff); + } + + if (((option & 2) == 2) && + ((ReadDataFromDeviceDone & 2) == 0)) { + + Status |= VL53L0X_WrByte(Dev, 0x94, 0x02); + Status |= VL53L0X_device_read_strobe(Dev); + Status |= VL53L0X_RdByte(Dev, 0x90, &ModuleId); + + Status |= VL53L0X_WrByte(Dev, 0x94, 0x7B); + Status |= VL53L0X_device_read_strobe(Dev); + Status |= VL53L0X_RdByte(Dev, 0x90, &Revision); + + Status |= VL53L0X_WrByte(Dev, 0x94, 0x77); + Status |= VL53L0X_device_read_strobe(Dev); + Status |= VL53L0X_RdDWord(Dev, 0x90, &TmpDWord); + + ProductId[0] = (char)((TmpDWord >> 25) & 0x07f); + ProductId[1] = (char)((TmpDWord >> 18) & 0x07f); + ProductId[2] = (char)((TmpDWord >> 11) & 0x07f); + ProductId[3] = (char)((TmpDWord >> 4) & 0x07f); + + byte = (uint8_t)((TmpDWord & 0x00f) << 3); + + Status |= VL53L0X_WrByte(Dev, 0x94, 0x78); + Status |= VL53L0X_device_read_strobe(Dev); + Status |= VL53L0X_RdDWord(Dev, 0x90, &TmpDWord); + + ProductId[4] = (char)(byte + + ((TmpDWord >> 29) & 0x07f)); + ProductId[5] = (char)((TmpDWord >> 22) & 0x07f); + ProductId[6] = (char)((TmpDWord >> 15) & 0x07f); + ProductId[7] = (char)((TmpDWord >> 8) & 0x07f); + ProductId[8] = (char)((TmpDWord >> 1) & 0x07f); + + byte = (uint8_t)((TmpDWord & 0x001) << 6); + + Status |= VL53L0X_WrByte(Dev, 0x94, 0x79); + + Status |= VL53L0X_device_read_strobe(Dev); + + Status |= VL53L0X_RdDWord(Dev, 0x90, &TmpDWord); + + ProductId[9] = (char)(byte + + ((TmpDWord >> 26) & 0x07f)); + ProductId[10] = (char)((TmpDWord >> 19) & 0x07f); + ProductId[11] = (char)((TmpDWord >> 12) & 0x07f); + ProductId[12] = (char)((TmpDWord >> 5) & 0x07f); + + byte = (uint8_t)((TmpDWord & 0x01f) << 2); + + Status |= VL53L0X_WrByte(Dev, 0x94, 0x7A); + + Status |= VL53L0X_device_read_strobe(Dev); + + Status |= VL53L0X_RdDWord(Dev, 0x90, &TmpDWord); + + ProductId[13] = (char)(byte + + ((TmpDWord >> 30) & 0x07f)); + ProductId[14] = (char)((TmpDWord >> 23) & 0x07f); + ProductId[15] = (char)((TmpDWord >> 16) & 0x07f); + ProductId[16] = (char)((TmpDWord >> 9) & 0x07f); + ProductId[17] = (char)((TmpDWord >> 2) & 0x07f); + ProductId[18] = '\0'; + + } + + if (((option & 4) == 4) && + ((ReadDataFromDeviceDone & 4) == 0)) { + + Status |= VL53L0X_WrByte(Dev, 0x94, 0x7B); + Status |= VL53L0X_device_read_strobe(Dev); + Status |= VL53L0X_RdDWord(Dev, 0x90, &PartUIDUpper); + + Status |= VL53L0X_WrByte(Dev, 0x94, 0x7C); + Status |= VL53L0X_device_read_strobe(Dev); + Status |= VL53L0X_RdDWord(Dev, 0x90, &PartUIDLower); + + Status |= VL53L0X_WrByte(Dev, 0x94, 0x73); + Status |= VL53L0X_device_read_strobe(Dev); + Status |= VL53L0X_RdDWord(Dev, 0x90, &TmpDWord); + + SignalRateMeasFixed1104_400_mm = (TmpDWord & + 0x0000000ff) << 8; + + Status |= VL53L0X_WrByte(Dev, 0x94, 0x74); + Status |= VL53L0X_device_read_strobe(Dev); + Status |= VL53L0X_RdDWord(Dev, 0x90, &TmpDWord); + + SignalRateMeasFixed1104_400_mm |= ((TmpDWord & + 0xff000000) >> 24); + + Status |= VL53L0X_WrByte(Dev, 0x94, 0x75); + Status |= VL53L0X_device_read_strobe(Dev); + Status |= VL53L0X_RdDWord(Dev, 0x90, &TmpDWord); + + DistMeasFixed1104_400_mm = (TmpDWord & 0x0000000ff) + << 8; + + Status |= VL53L0X_WrByte(Dev, 0x94, 0x76); + Status |= VL53L0X_device_read_strobe(Dev); + Status |= VL53L0X_RdDWord(Dev, 0x90, &TmpDWord); + + DistMeasFixed1104_400_mm |= ((TmpDWord & 0xff000000) + >> 24); + } + + Status |= VL53L0X_WrByte(Dev, 0x81, 0x00); + Status |= VL53L0X_WrByte(Dev, 0xFF, 0x06); + Status |= VL53L0X_RdByte(Dev, 0x83, &byte); + Status |= VL53L0X_WrByte(Dev, 0x83, byte&0xfb); + Status |= VL53L0X_WrByte(Dev, 0xFF, 0x01); + Status |= VL53L0X_WrByte(Dev, 0x00, 0x01); + + Status |= VL53L0X_WrByte(Dev, 0xFF, 0x00); + Status |= VL53L0X_WrByte(Dev, 0x80, 0x00); + } + + if ((Status == VL53L0X_ERROR_NONE) && + (ReadDataFromDeviceDone != 7)) { + /* Assign to variable if status is ok */ + if (((option & 1) == 1) && + ((ReadDataFromDeviceDone & 1) == 0)) { + VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, + ReferenceSpadCount, ReferenceSpadCount); + + VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, + ReferenceSpadType, ReferenceSpadType); + + for (i = 0; i < VL53L0X_REF_SPAD_BUFFER_SIZE; i++) { + Dev->Data.SpadData.RefGoodSpadMap[i] = + NvmRefGoodSpadMap[i]; + } + } + + if (((option & 2) == 2) && + ((ReadDataFromDeviceDone & 2) == 0)) { + VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, + ModuleId, ModuleId); + + VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, + Revision, Revision); + + ProductId_tmp = VL53L0X_GETDEVICESPECIFICPARAMETER(Dev, + ProductId); + VL53L0X_COPYSTRING(ProductId_tmp, ProductId); + + } + + if (((option & 4) == 4) && + ((ReadDataFromDeviceDone & 4) == 0)) { + VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, + PartUIDUpper, PartUIDUpper); + + VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, + PartUIDLower, PartUIDLower); + + SignalRateMeasFixed400mmFix = + VL53L0X_FIXPOINT97TOFIXPOINT1616( + SignalRateMeasFixed1104_400_mm); + + VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, + SignalRateMeasFixed400mm, + SignalRateMeasFixed400mmFix); + + OffsetMicroMeters = 0; + if (DistMeasFixed1104_400_mm != 0) { + OffsetFixed1104_mm = + DistMeasFixed1104_400_mm - + DistMeasTgtFixed1104_mm; + OffsetMicroMeters = (OffsetFixed1104_mm + * 1000) >> 4; + OffsetMicroMeters *= -1; + } + + PALDevDataSet(Dev, + Part2PartOffsetAdjustmentNVMMicroMeter, + OffsetMicroMeters); + } + byte = (uint8_t)(ReadDataFromDeviceDone|option); + VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, ReadDataFromDeviceDone, + byte); + } + + LOG_FUNCTION_END(Status); + return Status; +} + + +uint32_t VL53L0X_calc_macro_period_ps(VL53L0X_DEV Dev, uint8_t vcsel_period_pclks) +{ + uint64_t PLL_period_ps; + uint32_t macro_period_vclks; + uint32_t macro_period_ps; + + LOG_FUNCTION_START(""); + + /* The above calculation will produce rounding errors, + therefore set fixed value + */ + PLL_period_ps = 1655; + + macro_period_vclks = 2304; + macro_period_ps = (uint32_t)(macro_period_vclks + * vcsel_period_pclks * PLL_period_ps); + + LOG_FUNCTION_END(""); + return macro_period_ps; +} + +uint16_t VL53L0X_encode_timeout(uint32_t timeout_macro_clks) +{ + /*! + * Encode timeout in macro periods in (LSByte * 2^MSByte) + 1 format + */ + + uint16_t encoded_timeout = 0; + uint32_t ls_byte = 0; + uint16_t ms_byte = 0; + + if (timeout_macro_clks > 0) { + ls_byte = timeout_macro_clks - 1; + + while ((ls_byte & 0xFFFFFF00) > 0) { + ls_byte = ls_byte >> 1; + ms_byte++; + } + + encoded_timeout = (ms_byte << 8) + + (uint16_t) (ls_byte & 0x000000FF); + } + + return encoded_timeout; + +} + +uint32_t VL53L0X_decode_timeout(uint16_t encoded_timeout) +{ + /*! + * Decode 16-bit timeout register value - format (LSByte * 2^MSByte) + 1 + */ + + uint32_t timeout_macro_clks = 0; + + timeout_macro_clks = ((uint32_t) (encoded_timeout & 0x00FF) + << (uint32_t) ((encoded_timeout & 0xFF00) >> 8)) + 1; + + return timeout_macro_clks; +} + + +/* To convert ms into register value */ +uint32_t VL53L0X_calc_timeout_mclks(VL53L0X_DEV Dev, + uint32_t timeout_period_us, + uint8_t vcsel_period_pclks) +{ + uint32_t macro_period_ps; + uint32_t macro_period_ns; + uint32_t timeout_period_mclks = 0; + + macro_period_ps = VL53L0X_calc_macro_period_ps(Dev, vcsel_period_pclks); + macro_period_ns = (macro_period_ps + 500) / 1000; + + timeout_period_mclks = + (uint32_t) (((timeout_period_us * 1000) + + (macro_period_ns / 2)) / macro_period_ns); + + return timeout_period_mclks; +} + +/* To convert register value into us */ +uint32_t VL53L0X_calc_timeout_us(VL53L0X_DEV Dev, + uint16_t timeout_period_mclks, + uint8_t vcsel_period_pclks) +{ + uint32_t macro_period_ps; + uint32_t macro_period_ns; + uint32_t actual_timeout_period_us = 0; + + macro_period_ps = VL53L0X_calc_macro_period_ps(Dev, vcsel_period_pclks); + macro_period_ns = (macro_period_ps + 500) / 1000; + + actual_timeout_period_us = + ((timeout_period_mclks * macro_period_ns) + 500) / 1000; + + return actual_timeout_period_us; +} + + +VL53L0X_Error get_sequence_step_timeout(VL53L0X_DEV Dev, + VL53L0X_SequenceStepId SequenceStepId, + uint32_t *pTimeOutMicroSecs) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t CurrentVCSELPulsePeriodPClk; + uint8_t EncodedTimeOutByte = 0; + uint32_t TimeoutMicroSeconds = 0; + uint16_t PreRangeEncodedTimeOut = 0; + uint16_t MsrcTimeOutMClks; + uint16_t PreRangeTimeOutMClks; + uint16_t FinalRangeTimeOutMClks = 0; + uint16_t FinalRangeEncodedTimeOut; + VL53L0X_SchedulerSequenceSteps_t SchedulerSequenceSteps; + + if ((SequenceStepId == VL53L0X_SEQUENCESTEP_TCC) || + (SequenceStepId == VL53L0X_SEQUENCESTEP_DSS) || + (SequenceStepId == VL53L0X_SEQUENCESTEP_MSRC)) { + + Status = VL53L0X_GetVcselPulsePeriod(Dev, + VL53L0X_VCSEL_PERIOD_PRE_RANGE, + &CurrentVCSELPulsePeriodPClk); + if (Status == VL53L0X_ERROR_NONE) { + Status = VL53L0X_RdByte(Dev, + VL53L0X_REG_MSRC_CONFIG_TIMEOUT_MACROP, + &EncodedTimeOutByte); + } + MsrcTimeOutMClks = VL53L0X_decode_timeout(EncodedTimeOutByte); + + TimeoutMicroSeconds = VL53L0X_calc_timeout_us(Dev, + MsrcTimeOutMClks, + CurrentVCSELPulsePeriodPClk); + } else if (SequenceStepId == VL53L0X_SEQUENCESTEP_PRE_RANGE) { + /* Retrieve PRE-RANGE VCSEL Period */ + Status = VL53L0X_GetVcselPulsePeriod(Dev, + VL53L0X_VCSEL_PERIOD_PRE_RANGE, + &CurrentVCSELPulsePeriodPClk); + + /* Retrieve PRE-RANGE Timeout in Macro periods (MCLKS) */ + if (Status == VL53L0X_ERROR_NONE) { + + /* Retrieve PRE-RANGE VCSEL Period */ + Status = VL53L0X_GetVcselPulsePeriod(Dev, + VL53L0X_VCSEL_PERIOD_PRE_RANGE, + &CurrentVCSELPulsePeriodPClk); + + if (Status == VL53L0X_ERROR_NONE) { + Status = VL53L0X_RdWord(Dev, + VL53L0X_REG_PRE_RANGE_CONFIG_TIMEOUT_MACROP_HI, + &PreRangeEncodedTimeOut); + } + + PreRangeTimeOutMClks = VL53L0X_decode_timeout( + PreRangeEncodedTimeOut); + + TimeoutMicroSeconds = VL53L0X_calc_timeout_us(Dev, + PreRangeTimeOutMClks, + CurrentVCSELPulsePeriodPClk); + } + } else if (SequenceStepId == VL53L0X_SEQUENCESTEP_FINAL_RANGE) { + + VL53L0X_GetSequenceStepEnables(Dev, &SchedulerSequenceSteps); + PreRangeTimeOutMClks = 0; + + if (SchedulerSequenceSteps.PreRangeOn) { + /* Retrieve PRE-RANGE VCSEL Period */ + Status = VL53L0X_GetVcselPulsePeriod(Dev, + VL53L0X_VCSEL_PERIOD_PRE_RANGE, + &CurrentVCSELPulsePeriodPClk); + + /* Retrieve PRE-RANGE Timeout in Macro periods + * (MCLKS) */ + if (Status == VL53L0X_ERROR_NONE) { + Status = VL53L0X_RdWord(Dev, + VL53L0X_REG_PRE_RANGE_CONFIG_TIMEOUT_MACROP_HI, + &PreRangeEncodedTimeOut); + PreRangeTimeOutMClks = VL53L0X_decode_timeout( + PreRangeEncodedTimeOut); + } + } + + if (Status == VL53L0X_ERROR_NONE) { + /* Retrieve FINAL-RANGE VCSEL Period */ + Status = VL53L0X_GetVcselPulsePeriod(Dev, + VL53L0X_VCSEL_PERIOD_FINAL_RANGE, + &CurrentVCSELPulsePeriodPClk); + } + + /* Retrieve FINAL-RANGE Timeout in Macro periods (MCLKS) */ + if (Status == VL53L0X_ERROR_NONE) { + Status = VL53L0X_RdWord(Dev, + VL53L0X_REG_FINAL_RANGE_CONFIG_TIMEOUT_MACROP_HI, + &FinalRangeEncodedTimeOut); + FinalRangeTimeOutMClks = VL53L0X_decode_timeout( + FinalRangeEncodedTimeOut); + } + + FinalRangeTimeOutMClks -= PreRangeTimeOutMClks; + TimeoutMicroSeconds = VL53L0X_calc_timeout_us(Dev, + FinalRangeTimeOutMClks, + CurrentVCSELPulsePeriodPClk); + } + + *pTimeOutMicroSecs = TimeoutMicroSeconds; + + return Status; +} + + +VL53L0X_Error set_sequence_step_timeout(VL53L0X_DEV Dev, + VL53L0X_SequenceStepId SequenceStepId, + uint32_t TimeOutMicroSecs) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t CurrentVCSELPulsePeriodPClk; + uint8_t MsrcEncodedTimeOut; + uint16_t PreRangeEncodedTimeOut; + uint16_t PreRangeTimeOutMClks; + uint16_t MsrcRangeTimeOutMClks; + uint32_t FinalRangeTimeOutMClks; + uint16_t FinalRangeEncodedTimeOut; + VL53L0X_SchedulerSequenceSteps_t SchedulerSequenceSteps; + + if ((SequenceStepId == VL53L0X_SEQUENCESTEP_TCC) || + (SequenceStepId == VL53L0X_SEQUENCESTEP_DSS) || + (SequenceStepId == VL53L0X_SEQUENCESTEP_MSRC)) { + + Status = VL53L0X_GetVcselPulsePeriod(Dev, + VL53L0X_VCSEL_PERIOD_PRE_RANGE, + &CurrentVCSELPulsePeriodPClk); + + if (Status == VL53L0X_ERROR_NONE) { + MsrcRangeTimeOutMClks = VL53L0X_calc_timeout_mclks(Dev, + TimeOutMicroSecs, + (uint8_t)CurrentVCSELPulsePeriodPClk); + + if (MsrcRangeTimeOutMClks > 256) + MsrcEncodedTimeOut = 255; + else + MsrcEncodedTimeOut = + (uint8_t)MsrcRangeTimeOutMClks - 1; + + VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, + LastEncodedTimeout, + MsrcEncodedTimeOut); + } + + if (Status == VL53L0X_ERROR_NONE) { + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_MSRC_CONFIG_TIMEOUT_MACROP, + MsrcEncodedTimeOut); + } + } else { + + if (SequenceStepId == VL53L0X_SEQUENCESTEP_PRE_RANGE) { + + if (Status == VL53L0X_ERROR_NONE) { + Status = VL53L0X_GetVcselPulsePeriod(Dev, + VL53L0X_VCSEL_PERIOD_PRE_RANGE, + &CurrentVCSELPulsePeriodPClk); + PreRangeTimeOutMClks = + VL53L0X_calc_timeout_mclks(Dev, + TimeOutMicroSecs, + (uint8_t)CurrentVCSELPulsePeriodPClk); + PreRangeEncodedTimeOut = VL53L0X_encode_timeout( + PreRangeTimeOutMClks); + + VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, + LastEncodedTimeout, + PreRangeEncodedTimeOut); + } + + if (Status == VL53L0X_ERROR_NONE) { + Status = VL53L0X_WrWord(Dev, + VL53L0X_REG_PRE_RANGE_CONFIG_TIMEOUT_MACROP_HI, + PreRangeEncodedTimeOut); + } + + if (Status == VL53L0X_ERROR_NONE) { + VL53L0X_SETDEVICESPECIFICPARAMETER( + Dev, + PreRangeTimeoutMicroSecs, + TimeOutMicroSecs); + } + } else if (SequenceStepId == VL53L0X_SEQUENCESTEP_FINAL_RANGE) { + + /* For the final range timeout, the pre-range timeout + * must be added. To do this both final and pre-range + * timeouts must be expressed in macro periods MClks + * because they have different vcsel periods. + */ + + VL53L0X_GetSequenceStepEnables(Dev, + &SchedulerSequenceSteps); + PreRangeTimeOutMClks = 0; + if (SchedulerSequenceSteps.PreRangeOn) { + + /* Retrieve PRE-RANGE VCSEL Period */ + Status = VL53L0X_GetVcselPulsePeriod(Dev, + VL53L0X_VCSEL_PERIOD_PRE_RANGE, + &CurrentVCSELPulsePeriodPClk); + + /* Retrieve PRE-RANGE Timeout in Macro periods + * (MCLKS) */ + if (Status == VL53L0X_ERROR_NONE) { + Status = VL53L0X_RdWord(Dev, 0x51, + &PreRangeEncodedTimeOut); + PreRangeTimeOutMClks = + VL53L0X_decode_timeout( + PreRangeEncodedTimeOut); + } + } + + /* Calculate FINAL RANGE Timeout in Macro Periods + * (MCLKS) and add PRE-RANGE value + */ + if (Status == VL53L0X_ERROR_NONE) { + + Status = VL53L0X_GetVcselPulsePeriod(Dev, + VL53L0X_VCSEL_PERIOD_FINAL_RANGE, + &CurrentVCSELPulsePeriodPClk); + } + if (Status == VL53L0X_ERROR_NONE) { + + FinalRangeTimeOutMClks = + VL53L0X_calc_timeout_mclks(Dev, + TimeOutMicroSecs, + (uint8_t) CurrentVCSELPulsePeriodPClk); + + FinalRangeTimeOutMClks += PreRangeTimeOutMClks; + + FinalRangeEncodedTimeOut = + VL53L0X_encode_timeout(FinalRangeTimeOutMClks); + + if (Status == VL53L0X_ERROR_NONE) { + Status = VL53L0X_WrWord(Dev, 0x71, + FinalRangeEncodedTimeOut); + } + + if (Status == VL53L0X_ERROR_NONE) { + VL53L0X_SETDEVICESPECIFICPARAMETER( + Dev, + FinalRangeTimeoutMicroSecs, + TimeOutMicroSecs); + } + } + } else + Status = VL53L0X_ERROR_INVALID_PARAMS; + + } + return Status; +} + +VL53L0X_Error VL53L0X_set_vcsel_pulse_period(VL53L0X_DEV Dev, + VL53L0X_VcselPeriod VcselPeriodType, uint8_t VCSELPulsePeriodPCLK) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t vcsel_period_reg; + uint8_t MinPreVcselPeriodPCLK = 12; + uint8_t MaxPreVcselPeriodPCLK = 18; + uint8_t MinFinalVcselPeriodPCLK = 8; + uint8_t MaxFinalVcselPeriodPCLK = 14; + uint32_t MeasurementTimingBudgetMicroSeconds; + uint32_t FinalRangeTimeoutMicroSeconds; + uint32_t PreRangeTimeoutMicroSeconds; + uint32_t MsrcTimeoutMicroSeconds; + uint8_t PhaseCalInt = 0; + + /* Check if valid clock period requested */ + + if ((VCSELPulsePeriodPCLK % 2) != 0) { + /* Value must be an even number */ + Status = VL53L0X_ERROR_INVALID_PARAMS; + } else if (VcselPeriodType == VL53L0X_VCSEL_PERIOD_PRE_RANGE && + (VCSELPulsePeriodPCLK < MinPreVcselPeriodPCLK || + VCSELPulsePeriodPCLK > MaxPreVcselPeriodPCLK)) { + Status = VL53L0X_ERROR_INVALID_PARAMS; + } else if (VcselPeriodType == VL53L0X_VCSEL_PERIOD_FINAL_RANGE && + (VCSELPulsePeriodPCLK < MinFinalVcselPeriodPCLK || + VCSELPulsePeriodPCLK > MaxFinalVcselPeriodPCLK)) { + + Status = VL53L0X_ERROR_INVALID_PARAMS; + } + + /* Apply specific settings for the requested clock period */ + + if (Status != VL53L0X_ERROR_NONE) + return Status; + + + if (VcselPeriodType == VL53L0X_VCSEL_PERIOD_PRE_RANGE) { + + /* Set phase check limits */ + if (VCSELPulsePeriodPCLK == 12) { + + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_PRE_RANGE_CONFIG_VALID_PHASE_HIGH, + 0x18); + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_PRE_RANGE_CONFIG_VALID_PHASE_LOW, + 0x08); + } else if (VCSELPulsePeriodPCLK == 14) { + + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_PRE_RANGE_CONFIG_VALID_PHASE_HIGH, + 0x30); + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_PRE_RANGE_CONFIG_VALID_PHASE_LOW, + 0x08); + } else if (VCSELPulsePeriodPCLK == 16) { + + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_PRE_RANGE_CONFIG_VALID_PHASE_HIGH, + 0x40); + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_PRE_RANGE_CONFIG_VALID_PHASE_LOW, + 0x08); + } else if (VCSELPulsePeriodPCLK == 18) { + + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_PRE_RANGE_CONFIG_VALID_PHASE_HIGH, + 0x50); + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_PRE_RANGE_CONFIG_VALID_PHASE_LOW, + 0x08); + } + } else if (VcselPeriodType == VL53L0X_VCSEL_PERIOD_FINAL_RANGE) { + + if (VCSELPulsePeriodPCLK == 8) { + + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_FINAL_RANGE_CONFIG_VALID_PHASE_HIGH, + 0x10); + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_FINAL_RANGE_CONFIG_VALID_PHASE_LOW, + 0x08); + + Status |= VL53L0X_WrByte(Dev, + VL53L0X_REG_GLOBAL_CONFIG_VCSEL_WIDTH, 0x02); + Status |= VL53L0X_WrByte(Dev, + VL53L0X_REG_ALGO_PHASECAL_CONFIG_TIMEOUT, 0x0C); + + Status |= VL53L0X_WrByte(Dev, 0xff, 0x01); + Status |= VL53L0X_WrByte(Dev, + VL53L0X_REG_ALGO_PHASECAL_LIM, + 0x30); + Status |= VL53L0X_WrByte(Dev, 0xff, 0x00); + } else if (VCSELPulsePeriodPCLK == 10) { + + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_FINAL_RANGE_CONFIG_VALID_PHASE_HIGH, + 0x28); + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_FINAL_RANGE_CONFIG_VALID_PHASE_LOW, + 0x08); + + Status |= VL53L0X_WrByte(Dev, + VL53L0X_REG_GLOBAL_CONFIG_VCSEL_WIDTH, 0x03); + Status |= VL53L0X_WrByte(Dev, + VL53L0X_REG_ALGO_PHASECAL_CONFIG_TIMEOUT, 0x09); + + Status |= VL53L0X_WrByte(Dev, 0xff, 0x01); + Status |= VL53L0X_WrByte(Dev, + VL53L0X_REG_ALGO_PHASECAL_LIM, + 0x20); + Status |= VL53L0X_WrByte(Dev, 0xff, 0x00); + } else if (VCSELPulsePeriodPCLK == 12) { + + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_FINAL_RANGE_CONFIG_VALID_PHASE_HIGH, + 0x38); + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_FINAL_RANGE_CONFIG_VALID_PHASE_LOW, + 0x08); + + Status |= VL53L0X_WrByte(Dev, + VL53L0X_REG_GLOBAL_CONFIG_VCSEL_WIDTH, 0x03); + Status |= VL53L0X_WrByte(Dev, + VL53L0X_REG_ALGO_PHASECAL_CONFIG_TIMEOUT, 0x08); + + Status |= VL53L0X_WrByte(Dev, 0xff, 0x01); + Status |= VL53L0X_WrByte(Dev, + VL53L0X_REG_ALGO_PHASECAL_LIM, + 0x20); + Status |= VL53L0X_WrByte(Dev, 0xff, 0x00); + } else if (VCSELPulsePeriodPCLK == 14) { + + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_FINAL_RANGE_CONFIG_VALID_PHASE_HIGH, + 0x048); + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_FINAL_RANGE_CONFIG_VALID_PHASE_LOW, + 0x08); + + Status |= VL53L0X_WrByte(Dev, + VL53L0X_REG_GLOBAL_CONFIG_VCSEL_WIDTH, 0x03); + Status |= VL53L0X_WrByte(Dev, + VL53L0X_REG_ALGO_PHASECAL_CONFIG_TIMEOUT, 0x07); + + Status |= VL53L0X_WrByte(Dev, 0xff, 0x01); + Status |= VL53L0X_WrByte(Dev, + VL53L0X_REG_ALGO_PHASECAL_LIM, + 0x20); + Status |= VL53L0X_WrByte(Dev, 0xff, 0x00); + } + } + + + /* Re-calculate and apply timeouts, in macro periods */ + + if (Status == VL53L0X_ERROR_NONE) { + vcsel_period_reg = VL53L0X_encode_vcsel_period((uint8_t) + VCSELPulsePeriodPCLK); + + /* When the VCSEL period for the pre or final range is changed, + * the corresponding timeout must be read from the device using + * the current VCSEL period, then the new VCSEL period can be + * applied. The timeout then must be written back to the device + * using the new VCSEL period. + * + * For the MSRC timeout, the same applies - this timeout being + * dependant on the pre-range vcsel period. + */ + switch (VcselPeriodType) { + case VL53L0X_VCSEL_PERIOD_PRE_RANGE: + Status = get_sequence_step_timeout(Dev, + VL53L0X_SEQUENCESTEP_PRE_RANGE, + &PreRangeTimeoutMicroSeconds); + + if (Status == VL53L0X_ERROR_NONE) + Status = get_sequence_step_timeout(Dev, + VL53L0X_SEQUENCESTEP_MSRC, + &MsrcTimeoutMicroSeconds); + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_PRE_RANGE_CONFIG_VCSEL_PERIOD, + vcsel_period_reg); + + + if (Status == VL53L0X_ERROR_NONE) + Status = set_sequence_step_timeout(Dev, + VL53L0X_SEQUENCESTEP_PRE_RANGE, + PreRangeTimeoutMicroSeconds); + + + if (Status == VL53L0X_ERROR_NONE) + Status = set_sequence_step_timeout(Dev, + VL53L0X_SEQUENCESTEP_MSRC, + MsrcTimeoutMicroSeconds); + + VL53L0X_SETDEVICESPECIFICPARAMETER( + Dev, + PreRangeVcselPulsePeriod, + VCSELPulsePeriodPCLK); + break; + case VL53L0X_VCSEL_PERIOD_FINAL_RANGE: + Status = get_sequence_step_timeout(Dev, + VL53L0X_SEQUENCESTEP_FINAL_RANGE, + &FinalRangeTimeoutMicroSeconds); + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_WrByte(Dev, + VL53L0X_REG_FINAL_RANGE_CONFIG_VCSEL_PERIOD, + vcsel_period_reg); + + + if (Status == VL53L0X_ERROR_NONE) + Status = set_sequence_step_timeout(Dev, + VL53L0X_SEQUENCESTEP_FINAL_RANGE, + FinalRangeTimeoutMicroSeconds); + + VL53L0X_SETDEVICESPECIFICPARAMETER( + Dev, + FinalRangeVcselPulsePeriod, + VCSELPulsePeriodPCLK); + break; + default: + Status = VL53L0X_ERROR_INVALID_PARAMS; + } + } + + /* Finally, the timing budget must be re-applied */ + if (Status == VL53L0X_ERROR_NONE) { + VL53L0X_GETPARAMETERFIELD(Dev, + MeasurementTimingBudgetMicroSeconds, + MeasurementTimingBudgetMicroSeconds); + + Status = VL53L0X_SetMeasurementTimingBudgetMicroSeconds(Dev, + MeasurementTimingBudgetMicroSeconds); + } + + /* Perform the phase calibration. This is needed after changing on + * vcsel period. + * get_data_enable = 0, restore_config = 1 */ + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_perform_phase_calibration( + Dev, &PhaseCalInt, 0, 1); + + return Status; +} + +VL53L0X_Error VL53L0X_get_vcsel_pulse_period(VL53L0X_DEV Dev, + VL53L0X_VcselPeriod VcselPeriodType, uint8_t *pVCSELPulsePeriodPCLK) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t vcsel_period_reg; + + switch (VcselPeriodType) { + case VL53L0X_VCSEL_PERIOD_PRE_RANGE: + Status = VL53L0X_RdByte(Dev, + VL53L0X_REG_PRE_RANGE_CONFIG_VCSEL_PERIOD, + &vcsel_period_reg); + break; + case VL53L0X_VCSEL_PERIOD_FINAL_RANGE: + Status = VL53L0X_RdByte(Dev, + VL53L0X_REG_FINAL_RANGE_CONFIG_VCSEL_PERIOD, + &vcsel_period_reg); + break; + default: + Status = VL53L0X_ERROR_INVALID_PARAMS; + } + + if (Status == VL53L0X_ERROR_NONE) + *pVCSELPulsePeriodPCLK = + VL53L0X_decode_vcsel_period(vcsel_period_reg); + + return Status; +} + + + +VL53L0X_Error VL53L0X_set_measurement_timing_budget_micro_seconds(VL53L0X_DEV Dev, + uint32_t MeasurementTimingBudgetMicroSeconds) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint32_t FinalRangeTimingBudgetMicroSeconds; + VL53L0X_SchedulerSequenceSteps_t SchedulerSequenceSteps; + uint32_t MsrcDccTccTimeoutMicroSeconds = 2000; + uint32_t StartOverheadMicroSeconds = 1910; + uint32_t EndOverheadMicroSeconds = 960; + uint32_t MsrcOverheadMicroSeconds = 660; + uint32_t TccOverheadMicroSeconds = 590; + uint32_t DssOverheadMicroSeconds = 690; + uint32_t PreRangeOverheadMicroSeconds = 660; + uint32_t FinalRangeOverheadMicroSeconds = 550; + uint32_t PreRangeTimeoutMicroSeconds = 0; + uint32_t cMinTimingBudgetMicroSeconds = 20000; + uint32_t SubTimeout = 0; + + LOG_FUNCTION_START(""); + + if (MeasurementTimingBudgetMicroSeconds + < cMinTimingBudgetMicroSeconds) { + Status = VL53L0X_ERROR_INVALID_PARAMS; + return Status; + } + + FinalRangeTimingBudgetMicroSeconds = + MeasurementTimingBudgetMicroSeconds - + (StartOverheadMicroSeconds + EndOverheadMicroSeconds); + + Status = VL53L0X_GetSequenceStepEnables(Dev, &SchedulerSequenceSteps); + + if (Status == VL53L0X_ERROR_NONE && + (SchedulerSequenceSteps.TccOn || + SchedulerSequenceSteps.MsrcOn || + SchedulerSequenceSteps.DssOn)) { + + /* TCC, MSRC and DSS all share the same timeout */ + Status = get_sequence_step_timeout(Dev, + VL53L0X_SEQUENCESTEP_MSRC, + &MsrcDccTccTimeoutMicroSeconds); + + /* Subtract the TCC, MSRC and DSS timeouts if they are + * enabled. */ + + if (Status != VL53L0X_ERROR_NONE) + return Status; + + /* TCC */ + if (SchedulerSequenceSteps.TccOn) { + + SubTimeout = MsrcDccTccTimeoutMicroSeconds + + TccOverheadMicroSeconds; + + if (SubTimeout < + FinalRangeTimingBudgetMicroSeconds) { + FinalRangeTimingBudgetMicroSeconds -= + SubTimeout; + } else { + /* Requested timeout too big. */ + Status = VL53L0X_ERROR_INVALID_PARAMS; + } + } + + if (Status != VL53L0X_ERROR_NONE) { + LOG_FUNCTION_END(Status); + return Status; + } + + /* DSS */ + if (SchedulerSequenceSteps.DssOn) { + + SubTimeout = 2 * (MsrcDccTccTimeoutMicroSeconds + + DssOverheadMicroSeconds); + + if (SubTimeout < FinalRangeTimingBudgetMicroSeconds) { + FinalRangeTimingBudgetMicroSeconds + -= SubTimeout; + } else { + /* Requested timeout too big. */ + Status = VL53L0X_ERROR_INVALID_PARAMS; + } + } else if (SchedulerSequenceSteps.MsrcOn) { + /* MSRC */ + SubTimeout = MsrcDccTccTimeoutMicroSeconds + + MsrcOverheadMicroSeconds; + + if (SubTimeout < FinalRangeTimingBudgetMicroSeconds) { + FinalRangeTimingBudgetMicroSeconds + -= SubTimeout; + } else { + /* Requested timeout too big. */ + Status = VL53L0X_ERROR_INVALID_PARAMS; + } + } + + } + + if (Status != VL53L0X_ERROR_NONE) { + LOG_FUNCTION_END(Status); + return Status; + } + + if (SchedulerSequenceSteps.PreRangeOn) { + + /* Subtract the Pre-range timeout if enabled. */ + + Status = get_sequence_step_timeout(Dev, + VL53L0X_SEQUENCESTEP_PRE_RANGE, + &PreRangeTimeoutMicroSeconds); + + SubTimeout = PreRangeTimeoutMicroSeconds + + PreRangeOverheadMicroSeconds; + + if (SubTimeout < FinalRangeTimingBudgetMicroSeconds) { + FinalRangeTimingBudgetMicroSeconds -= SubTimeout; + } else { + /* Requested timeout too big. */ + Status = VL53L0X_ERROR_INVALID_PARAMS; + } + } + + + if (Status == VL53L0X_ERROR_NONE && + SchedulerSequenceSteps.FinalRangeOn) { + + FinalRangeTimingBudgetMicroSeconds -= + FinalRangeOverheadMicroSeconds; + + /* Final Range Timeout + * Note that the final range timeout is determined by the timing + * budget and the sum of all other timeouts within the sequence. + * If there is no room for the final range timeout, then an error + * will be set. Otherwise the remaining time will be applied to + * the final range. + */ + Status = set_sequence_step_timeout(Dev, + VL53L0X_SEQUENCESTEP_FINAL_RANGE, + FinalRangeTimingBudgetMicroSeconds); + + VL53L0X_SETPARAMETERFIELD(Dev, + MeasurementTimingBudgetMicroSeconds, + MeasurementTimingBudgetMicroSeconds); + } + + LOG_FUNCTION_END(Status); + + return Status; +} + +VL53L0X_Error VL53L0X_get_measurement_timing_budget_micro_seconds(VL53L0X_DEV Dev, + uint32_t *pMeasurementTimingBudgetMicroSeconds) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + VL53L0X_SchedulerSequenceSteps_t SchedulerSequenceSteps; + uint32_t FinalRangeTimeoutMicroSeconds; + uint32_t MsrcDccTccTimeoutMicroSeconds = 2000; + uint32_t StartOverheadMicroSeconds = 1910; + uint32_t EndOverheadMicroSeconds = 960; + uint32_t MsrcOverheadMicroSeconds = 660; + uint32_t TccOverheadMicroSeconds = 590; + uint32_t DssOverheadMicroSeconds = 690; + uint32_t PreRangeOverheadMicroSeconds = 660; + uint32_t FinalRangeOverheadMicroSeconds = 550; + uint32_t PreRangeTimeoutMicroSeconds = 0; + + LOG_FUNCTION_START(""); + + /* Start and end overhead times always present */ + *pMeasurementTimingBudgetMicroSeconds + = StartOverheadMicroSeconds + EndOverheadMicroSeconds; + + Status = VL53L0X_GetSequenceStepEnables(Dev, &SchedulerSequenceSteps); + + if (Status != VL53L0X_ERROR_NONE) { + LOG_FUNCTION_END(Status); + return Status; + } + + + if (SchedulerSequenceSteps.TccOn || + SchedulerSequenceSteps.MsrcOn || + SchedulerSequenceSteps.DssOn) { + + Status = get_sequence_step_timeout(Dev, + VL53L0X_SEQUENCESTEP_MSRC, + &MsrcDccTccTimeoutMicroSeconds); + + if (Status == VL53L0X_ERROR_NONE) { + if (SchedulerSequenceSteps.TccOn) { + *pMeasurementTimingBudgetMicroSeconds += + MsrcDccTccTimeoutMicroSeconds + + TccOverheadMicroSeconds; + } + + if (SchedulerSequenceSteps.DssOn) { + *pMeasurementTimingBudgetMicroSeconds += + 2 * (MsrcDccTccTimeoutMicroSeconds + + DssOverheadMicroSeconds); + } else if (SchedulerSequenceSteps.MsrcOn) { + *pMeasurementTimingBudgetMicroSeconds += + MsrcDccTccTimeoutMicroSeconds + + MsrcOverheadMicroSeconds; + } + } + } + + if (Status == VL53L0X_ERROR_NONE) { + if (SchedulerSequenceSteps.PreRangeOn) { + Status = get_sequence_step_timeout(Dev, + VL53L0X_SEQUENCESTEP_PRE_RANGE, + &PreRangeTimeoutMicroSeconds); + *pMeasurementTimingBudgetMicroSeconds += + PreRangeTimeoutMicroSeconds + + PreRangeOverheadMicroSeconds; + } + } + + if (Status == VL53L0X_ERROR_NONE) { + if (SchedulerSequenceSteps.FinalRangeOn) { + Status = get_sequence_step_timeout(Dev, + VL53L0X_SEQUENCESTEP_FINAL_RANGE, + &FinalRangeTimeoutMicroSeconds); + *pMeasurementTimingBudgetMicroSeconds += + (FinalRangeTimeoutMicroSeconds + + FinalRangeOverheadMicroSeconds); + } + } + + if (Status == VL53L0X_ERROR_NONE) { + VL53L0X_SETPARAMETERFIELD(Dev, + MeasurementTimingBudgetMicroSeconds, + *pMeasurementTimingBudgetMicroSeconds); + } + + LOG_FUNCTION_END(Status); + return Status; +} + + + +VL53L0X_Error VL53L0X_load_tuning_settings(VL53L0X_DEV Dev, + uint8_t *pTuningSettingBuffer) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + int i; + int Index; + uint8_t msb; + uint8_t lsb; + uint8_t SelectParam; + uint8_t NumberOfWrites; + uint8_t Address; + uint8_t localBuffer[4]; /* max */ + uint16_t Temp16; + + LOG_FUNCTION_START(""); + + Index = 0; + + while ((*(pTuningSettingBuffer + Index) != 0) && + (Status == VL53L0X_ERROR_NONE)) { + NumberOfWrites = *(pTuningSettingBuffer + Index); + Index++; + if (NumberOfWrites == 0xFF) { + /* internal parameters */ + SelectParam = *(pTuningSettingBuffer + Index); + Index++; + switch (SelectParam) { + case 0: /* uint16_t SigmaEstRefArray -> 2 bytes */ + msb = *(pTuningSettingBuffer + Index); + Index++; + lsb = *(pTuningSettingBuffer + Index); + Index++; + Temp16 = VL53L0X_MAKEUINT16(lsb, msb); + PALDevDataSet(Dev, SigmaEstRefArray, Temp16); + break; + case 1: /* uint16_t SigmaEstEffPulseWidth -> 2 bytes */ + msb = *(pTuningSettingBuffer + Index); + Index++; + lsb = *(pTuningSettingBuffer + Index); + Index++; + Temp16 = VL53L0X_MAKEUINT16(lsb, msb); + PALDevDataSet(Dev, SigmaEstEffPulseWidth, + Temp16); + break; + case 2: /* uint16_t SigmaEstEffAmbWidth -> 2 bytes */ + msb = *(pTuningSettingBuffer + Index); + Index++; + lsb = *(pTuningSettingBuffer + Index); + Index++; + Temp16 = VL53L0X_MAKEUINT16(lsb, msb); + PALDevDataSet(Dev, SigmaEstEffAmbWidth, Temp16); + break; + case 3: /* uint16_t targetRefRate -> 2 bytes */ + msb = *(pTuningSettingBuffer + Index); + Index++; + lsb = *(pTuningSettingBuffer + Index); + Index++; + Temp16 = VL53L0X_MAKEUINT16(lsb, msb); + PALDevDataSet(Dev, targetRefRate, Temp16); + break; + default: /* invalid parameter */ + Status = VL53L0X_ERROR_INVALID_PARAMS; + } + + } else if (NumberOfWrites <= 4) { + Address = *(pTuningSettingBuffer + Index); + Index++; + + for (i = 0; i < NumberOfWrites; i++) { + localBuffer[i] = *(pTuningSettingBuffer + + Index); + Index++; + } + + Status = VL53L0X_WriteMulti(Dev, Address, localBuffer, + NumberOfWrites); + + } else { + Status = VL53L0X_ERROR_INVALID_PARAMS; + } + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_get_total_xtalk_rate(VL53L0X_DEV Dev, + VL53L0X_RangingMeasurementData_t *pRangingMeasurementData, + FixPoint1616_t *ptotal_xtalk_rate_mcps) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + + uint8_t xtalkCompEnable; + FixPoint1616_t totalXtalkMegaCps; + FixPoint1616_t xtalkPerSpadMegaCps; + + *ptotal_xtalk_rate_mcps = 0; + + Status = VL53L0X_GetXTalkCompensationEnable(Dev, &xtalkCompEnable); + if (Status == VL53L0X_ERROR_NONE) { + + if (xtalkCompEnable) { + + VL53L0X_GETPARAMETERFIELD( + Dev, + XTalkCompensationRateMegaCps, + xtalkPerSpadMegaCps); + + /* FixPoint1616 * FixPoint 8:8 = FixPoint0824 */ + totalXtalkMegaCps = + pRangingMeasurementData->EffectiveSpadRtnCount * + xtalkPerSpadMegaCps; + + /* FixPoint0824 >> 8 = FixPoint1616 */ + *ptotal_xtalk_rate_mcps = + (totalXtalkMegaCps + 0x80) >> 8; + } + } + + return Status; +} + +VL53L0X_Error VL53L0X_get_total_signal_rate(VL53L0X_DEV Dev, + VL53L0X_RangingMeasurementData_t *pRangingMeasurementData, + FixPoint1616_t *ptotal_signal_rate_mcps) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + FixPoint1616_t totalXtalkMegaCps; + + LOG_FUNCTION_START(""); + + *ptotal_signal_rate_mcps = + pRangingMeasurementData->SignalRateRtnMegaCps; + + Status = VL53L0X_get_total_xtalk_rate( + Dev, pRangingMeasurementData, &totalXtalkMegaCps); + + if (Status == VL53L0X_ERROR_NONE) + *ptotal_signal_rate_mcps += totalXtalkMegaCps; + + return Status; +} + +VL53L0X_Error VL53L0X_calc_dmax( + VL53L0X_DEV Dev, + FixPoint1616_t totalSignalRate_mcps, + FixPoint1616_t totalCorrSignalRate_mcps, + FixPoint1616_t pwMult, + uint32_t sigmaEstimateP1, + FixPoint1616_t sigmaEstimateP2, + uint32_t peakVcselDuration_us, + uint32_t *pdmax_mm) +{ + const uint32_t cSigmaLimit = 18; + const FixPoint1616_t cSignalLimit = 0x4000; /* 0.25 */ + const FixPoint1616_t cSigmaEstRef = 0x00000042; /* 0.001 */ + const uint32_t cAmbEffWidthSigmaEst_ns = 6; + const uint32_t cAmbEffWidthDMax_ns = 7; + uint32_t dmaxCalRange_mm; + FixPoint1616_t dmaxCalSignalRateRtn_mcps; + FixPoint1616_t minSignalNeeded; + FixPoint1616_t minSignalNeeded_p1; + FixPoint1616_t minSignalNeeded_p2; + FixPoint1616_t minSignalNeeded_p3; + FixPoint1616_t minSignalNeeded_p4; + FixPoint1616_t sigmaLimitTmp; + FixPoint1616_t sigmaEstSqTmp; + FixPoint1616_t signalLimitTmp; + FixPoint1616_t SignalAt0mm; + FixPoint1616_t dmaxDark; + FixPoint1616_t dmaxAmbient; + FixPoint1616_t dmaxDarkTmp; + FixPoint1616_t sigmaEstP2Tmp; + uint32_t signalRateTemp_mcps; + + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + + LOG_FUNCTION_START(""); + + dmaxCalRange_mm = + PALDevDataGet(Dev, DmaxCalRangeMilliMeter); + + dmaxCalSignalRateRtn_mcps = + PALDevDataGet(Dev, DmaxCalSignalRateRtnMegaCps); + + /* uint32 * FixPoint1616 = FixPoint1616 */ + SignalAt0mm = dmaxCalRange_mm * dmaxCalSignalRateRtn_mcps; + + /* FixPoint1616 >> 8 = FixPoint2408 */ + SignalAt0mm = (SignalAt0mm + 0x80) >> 8; + SignalAt0mm *= dmaxCalRange_mm; + + minSignalNeeded_p1 = 0; + if (totalCorrSignalRate_mcps > 0) { + + /* Shift by 10 bits to increase resolution prior to the + * division */ + signalRateTemp_mcps = totalSignalRate_mcps << 10; + + /* Add rounding value prior to division */ + minSignalNeeded_p1 = signalRateTemp_mcps + + (totalCorrSignalRate_mcps/2); + + /* FixPoint0626/FixPoint1616 = FixPoint2210 */ + minSignalNeeded_p1 /= totalCorrSignalRate_mcps; + + /* Apply a factored version of the speed of light. + Correction to be applied at the end */ + minSignalNeeded_p1 *= 3; + + /* FixPoint2210 * FixPoint2210 = FixPoint1220 */ + minSignalNeeded_p1 *= minSignalNeeded_p1; + + /* FixPoint1220 >> 16 = FixPoint2804 */ + minSignalNeeded_p1 = (minSignalNeeded_p1 + 0x8000) >> 16; + } + + minSignalNeeded_p2 = pwMult * sigmaEstimateP1; + + /* FixPoint1616 >> 16 = uint32 */ + minSignalNeeded_p2 = (minSignalNeeded_p2 + 0x8000) >> 16; + + /* uint32 * uint32 = uint32 */ + minSignalNeeded_p2 *= minSignalNeeded_p2; + + /* Check sigmaEstimateP2 + * If this value is too high there is not enough signal rate + * to calculate dmax value so set a suitable value to ensure + * a very small dmax. + */ + sigmaEstP2Tmp = (sigmaEstimateP2 + 0x8000) >> 16; + sigmaEstP2Tmp = (sigmaEstP2Tmp + cAmbEffWidthSigmaEst_ns/2)/ + cAmbEffWidthSigmaEst_ns; + sigmaEstP2Tmp *= cAmbEffWidthDMax_ns; + + if (sigmaEstP2Tmp > 0xffff) { + minSignalNeeded_p3 = 0xfff00000; + } else { + + /* DMAX uses a different ambient width from sigma, so apply + * correction. + * Perform division before multiplication to prevent overflow. + */ + sigmaEstimateP2 = (sigmaEstimateP2 + cAmbEffWidthSigmaEst_ns/2)/ + cAmbEffWidthSigmaEst_ns; + sigmaEstimateP2 *= cAmbEffWidthDMax_ns; + + /* FixPoint1616 >> 16 = uint32 */ + minSignalNeeded_p3 = (sigmaEstimateP2 + 0x8000) >> 16; + + minSignalNeeded_p3 *= minSignalNeeded_p3; + + } + + /* FixPoint1814 / uint32 = FixPoint1814 */ + sigmaLimitTmp = ((cSigmaLimit << 14) + 500) / 1000; + + /* FixPoint1814 * FixPoint1814 = FixPoint3628 := FixPoint0428 */ + sigmaLimitTmp *= sigmaLimitTmp; + + /* FixPoint1616 * FixPoint1616 = FixPoint3232 */ + sigmaEstSqTmp = cSigmaEstRef * cSigmaEstRef; + + /* FixPoint3232 >> 4 = FixPoint0428 */ + sigmaEstSqTmp = (sigmaEstSqTmp + 0x08) >> 4; + + /* FixPoint0428 - FixPoint0428 = FixPoint0428 */ + sigmaLimitTmp -= sigmaEstSqTmp; + + /* uint32_t * FixPoint0428 = FixPoint0428 */ + minSignalNeeded_p4 = 4 * 12 * sigmaLimitTmp; + + /* FixPoint0428 >> 14 = FixPoint1814 */ + minSignalNeeded_p4 = (minSignalNeeded_p4 + 0x2000) >> 14; + + /* uint32 + uint32 = uint32 */ + minSignalNeeded = (minSignalNeeded_p2 + minSignalNeeded_p3); + + /* uint32 / uint32 = uint32 */ + minSignalNeeded += (peakVcselDuration_us/2); + minSignalNeeded /= peakVcselDuration_us; + + /* uint32 << 14 = FixPoint1814 */ + minSignalNeeded <<= 14; + + /* FixPoint1814 / FixPoint1814 = uint32 */ + minSignalNeeded += (minSignalNeeded_p4/2); + minSignalNeeded /= minSignalNeeded_p4; + + /* FixPoint3200 * FixPoint2804 := FixPoint2804*/ + minSignalNeeded *= minSignalNeeded_p1; + + /* Apply correction by dividing by 1000000. + * This assumes 10E16 on the numerator of the equation + * and 10E-22 on the denominator. + * We do this because 32bit fix point calculation can't + * handle the larger and smaller elements of this equation, + * i.e. speed of light and pulse widths. + */ + minSignalNeeded = (minSignalNeeded + 500) / 1000; + minSignalNeeded <<= 4; + + minSignalNeeded = (minSignalNeeded + 500) / 1000; + + /* FixPoint1616 >> 8 = FixPoint2408 */ + signalLimitTmp = (cSignalLimit + 0x80) >> 8; + + /* FixPoint2408/FixPoint2408 = uint32 */ + if (signalLimitTmp != 0) + dmaxDarkTmp = (SignalAt0mm + (signalLimitTmp / 2)) + / signalLimitTmp; + else + dmaxDarkTmp = 0; + + dmaxDark = VL53L0X_isqrt(dmaxDarkTmp); + + /* FixPoint2408/FixPoint2408 = uint32 */ + if (minSignalNeeded != 0) + dmaxAmbient = (SignalAt0mm + minSignalNeeded/2) + / minSignalNeeded; + else + dmaxAmbient = 0; + + dmaxAmbient = VL53L0X_isqrt(dmaxAmbient); + + *pdmax_mm = dmaxDark; + if (dmaxDark > dmaxAmbient) + *pdmax_mm = dmaxAmbient; + + LOG_FUNCTION_END(Status); + + return Status; +} + + +VL53L0X_Error VL53L0X_calc_sigma_estimate(VL53L0X_DEV Dev, + VL53L0X_RangingMeasurementData_t *pRangingMeasurementData, + FixPoint1616_t *pSigmaEstimate, + uint32_t *pDmax_mm) +{ + /* Expressed in 100ths of a ns, i.e. centi-ns */ + const uint32_t cPulseEffectiveWidth_centi_ns = 800; + /* Expressed in 100ths of a ns, i.e. centi-ns */ + const uint32_t cAmbientEffectiveWidth_centi_ns = 600; + const FixPoint1616_t cDfltFinalRangeIntegrationTimeMilliSecs = 0x00190000; /* 25ms */ + const uint32_t cVcselPulseWidth_ps = 4700; /* pico secs */ + const FixPoint1616_t cSigmaEstMax = 0x028F87AE; + const FixPoint1616_t cSigmaEstRtnMax = 0xF000; + const FixPoint1616_t cAmbToSignalRatioMax = 0xF0000000/ + cAmbientEffectiveWidth_centi_ns; + /* Time Of Flight per mm (6.6 pico secs) */ + const FixPoint1616_t cTOF_per_mm_ps = 0x0006999A; + const uint32_t c16BitRoundingParam = 0x00008000; + const FixPoint1616_t cMaxXTalk_kcps = 0x00320000; + const uint32_t cPllPeriod_ps = 1655; + + uint32_t vcselTotalEventsRtn; + uint32_t finalRangeTimeoutMicroSecs; + uint32_t preRangeTimeoutMicroSecs; + uint32_t finalRangeIntegrationTimeMilliSecs; + FixPoint1616_t sigmaEstimateP1; + FixPoint1616_t sigmaEstimateP2; + FixPoint1616_t sigmaEstimateP3; + FixPoint1616_t deltaT_ps; + FixPoint1616_t pwMult; + FixPoint1616_t sigmaEstRtn; + FixPoint1616_t sigmaEstimate; + FixPoint1616_t xTalkCorrection; + FixPoint1616_t ambientRate_kcps; + FixPoint1616_t peakSignalRate_kcps; + FixPoint1616_t xTalkCompRate_mcps; + uint32_t xTalkCompRate_kcps; + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + FixPoint1616_t diff1_mcps; + FixPoint1616_t diff2_mcps; + FixPoint1616_t sqr1; + FixPoint1616_t sqr2; + FixPoint1616_t sqrSum; + FixPoint1616_t sqrtResult_centi_ns; + FixPoint1616_t sqrtResult; + FixPoint1616_t totalSignalRate_mcps; + FixPoint1616_t correctedSignalRate_mcps; + FixPoint1616_t sigmaEstRef; + uint32_t vcselWidth; + uint32_t finalRangeMacroPCLKS; + uint32_t preRangeMacroPCLKS; + uint32_t peakVcselDuration_us; + uint8_t finalRangeVcselPCLKS; + uint8_t preRangeVcselPCLKS; + /*! \addtogroup calc_sigma_estimate + * @{ + * + * Estimates the range sigma + */ + + LOG_FUNCTION_START(""); + + VL53L0X_GETPARAMETERFIELD(Dev, XTalkCompensationRateMegaCps, + xTalkCompRate_mcps); + + /* + * We work in kcps rather than mcps as this helps keep within the + * confines of the 32 Fix1616 type. + */ + + ambientRate_kcps = + (pRangingMeasurementData->AmbientRateRtnMegaCps * 1000) >> 16; + + correctedSignalRate_mcps = + pRangingMeasurementData->SignalRateRtnMegaCps; + + + Status = VL53L0X_get_total_signal_rate( + Dev, pRangingMeasurementData, &totalSignalRate_mcps); + Status = VL53L0X_get_total_xtalk_rate( + Dev, pRangingMeasurementData, &xTalkCompRate_mcps); + + + /* Signal rate measurement provided by device is the + * peak signal rate, not average. + */ + peakSignalRate_kcps = (totalSignalRate_mcps * 1000); + peakSignalRate_kcps = (peakSignalRate_kcps + 0x8000) >> 16; + + xTalkCompRate_kcps = xTalkCompRate_mcps * 1000; + + if (xTalkCompRate_kcps > cMaxXTalk_kcps) + xTalkCompRate_kcps = cMaxXTalk_kcps; + + if (Status == VL53L0X_ERROR_NONE) { + + /* Calculate final range macro periods */ + finalRangeTimeoutMicroSecs = VL53L0X_GETDEVICESPECIFICPARAMETER( + Dev, FinalRangeTimeoutMicroSecs); + + finalRangeVcselPCLKS = VL53L0X_GETDEVICESPECIFICPARAMETER( + Dev, FinalRangeVcselPulsePeriod); + + finalRangeMacroPCLKS = VL53L0X_calc_timeout_mclks( + Dev, finalRangeTimeoutMicroSecs, finalRangeVcselPCLKS); + + /* Calculate pre-range macro periods */ + preRangeTimeoutMicroSecs = VL53L0X_GETDEVICESPECIFICPARAMETER( + Dev, PreRangeTimeoutMicroSecs); + + preRangeVcselPCLKS = VL53L0X_GETDEVICESPECIFICPARAMETER( + Dev, PreRangeVcselPulsePeriod); + + preRangeMacroPCLKS = VL53L0X_calc_timeout_mclks( + Dev, preRangeTimeoutMicroSecs, preRangeVcselPCLKS); + + vcselWidth = 3; + if (finalRangeVcselPCLKS == 8) + vcselWidth = 2; + + + peakVcselDuration_us = vcselWidth * 2048 * + (preRangeMacroPCLKS + finalRangeMacroPCLKS); + peakVcselDuration_us = (peakVcselDuration_us + 500)/1000; + peakVcselDuration_us *= cPllPeriod_ps; + peakVcselDuration_us = (peakVcselDuration_us + 500)/1000; + + /* Fix1616 >> 8 = Fix2408 */ + totalSignalRate_mcps = (totalSignalRate_mcps + 0x80) >> 8; + + /* Fix2408 * uint32 = Fix2408 */ + vcselTotalEventsRtn = totalSignalRate_mcps * + peakVcselDuration_us; + + /* Fix2408 >> 8 = uint32 */ + vcselTotalEventsRtn = (vcselTotalEventsRtn + 0x80) >> 8; + + /* Fix2408 << 8 = Fix1616 = */ + totalSignalRate_mcps <<= 8; + } + + if (Status != VL53L0X_ERROR_NONE) { + LOG_FUNCTION_END(Status); + return Status; + } + + if (peakSignalRate_kcps == 0) { + *pSigmaEstimate = cSigmaEstMax; + PALDevDataSet(Dev, SigmaEstimate, cSigmaEstMax); + *pDmax_mm = 0; + } else { + if (vcselTotalEventsRtn < 1) + vcselTotalEventsRtn = 1; + + sigmaEstimateP1 = cPulseEffectiveWidth_centi_ns; + + /* ((FixPoint1616 << 16)* uint32)/uint32 = FixPoint1616 */ + sigmaEstimateP2 = (ambientRate_kcps << 16)/peakSignalRate_kcps; + if (sigmaEstimateP2 > cAmbToSignalRatioMax) { + /* Clip to prevent overflow. Will ensure safe + * max result. */ + sigmaEstimateP2 = cAmbToSignalRatioMax; + } + sigmaEstimateP2 *= cAmbientEffectiveWidth_centi_ns; + + sigmaEstimateP3 = 2 * VL53L0X_isqrt(vcselTotalEventsRtn * 12); + + /* uint32 * FixPoint1616 = FixPoint1616 */ + deltaT_ps = pRangingMeasurementData->RangeMilliMeter * + cTOF_per_mm_ps; + + /* + * vcselRate - xtalkCompRate + * (uint32 << 16) - FixPoint1616 = FixPoint1616. + * Divide result by 1000 to convert to mcps. + * 500 is added to ensure rounding when integer division + * truncates. + */ + diff1_mcps = (((peakSignalRate_kcps << 16) - + 2 * xTalkCompRate_kcps) + 500)/1000; + + /* vcselRate + xtalkCompRate */ + diff2_mcps = ((peakSignalRate_kcps << 16) + 500)/1000; + + /* Shift by 8 bits to increase resolution prior to the + * division */ + diff1_mcps <<= 8; + + /* FixPoint0824/FixPoint1616 = FixPoint2408 */ + xTalkCorrection = abs(diff1_mcps/diff2_mcps); + + /* FixPoint2408 << 8 = FixPoint1616 */ + xTalkCorrection <<= 8; + + if(pRangingMeasurementData->RangeStatus != 0){ + pwMult = 1 << 16; + } else { + /* FixPoint1616/uint32 = FixPoint1616 */ + pwMult = deltaT_ps/cVcselPulseWidth_ps; /* smaller than 1.0f */ + + /* + * FixPoint1616 * FixPoint1616 = FixPoint3232, however both + * values are small enough such that32 bits will not be + * exceeded. + */ + pwMult *= ((1 << 16) - xTalkCorrection); + + /* (FixPoint3232 >> 16) = FixPoint1616 */ + pwMult = (pwMult + c16BitRoundingParam) >> 16; + + /* FixPoint1616 + FixPoint1616 = FixPoint1616 */ + pwMult += (1 << 16); + + /* + * At this point the value will be 1.xx, therefore if we square + * the value this will exceed 32 bits. To address this perform + * a single shift to the right before the multiplication. + */ + pwMult >>= 1; + /* FixPoint1715 * FixPoint1715 = FixPoint3430 */ + pwMult = pwMult * pwMult; + + /* (FixPoint3430 >> 14) = Fix1616 */ + pwMult >>= 14; + } + + /* FixPoint1616 * uint32 = FixPoint1616 */ + sqr1 = pwMult * sigmaEstimateP1; + + /* (FixPoint1616 >> 16) = FixPoint3200 */ + sqr1 = (sqr1 + 0x8000) >> 16; + + /* FixPoint3200 * FixPoint3200 = FixPoint6400 */ + sqr1 *= sqr1; + + sqr2 = sigmaEstimateP2; + + /* (FixPoint1616 >> 16) = FixPoint3200 */ + sqr2 = (sqr2 + 0x8000) >> 16; + + /* FixPoint3200 * FixPoint3200 = FixPoint6400 */ + sqr2 *= sqr2; + + /* FixPoint64000 + FixPoint6400 = FixPoint6400 */ + sqrSum = sqr1 + sqr2; + + /* SQRT(FixPoin6400) = FixPoint3200 */ + sqrtResult_centi_ns = VL53L0X_isqrt(sqrSum); + + /* (FixPoint3200 << 16) = FixPoint1616 */ + sqrtResult_centi_ns <<= 16; + + /* + * Note that the Speed Of Light is expressed in um per 1E-10 + * seconds (2997) Therefore to get mm/ns we have to divide by + * 10000 + */ + sigmaEstRtn = (((sqrtResult_centi_ns+50)/100) / + sigmaEstimateP3); + sigmaEstRtn *= VL53L0X_SPEED_OF_LIGHT_IN_AIR; + + /* Add 5000 before dividing by 10000 to ensure rounding. */ + sigmaEstRtn += 5000; + sigmaEstRtn /= 10000; + + if (sigmaEstRtn > cSigmaEstRtnMax) { + /* Clip to prevent overflow. Will ensure safe + * max result. */ + sigmaEstRtn = cSigmaEstRtnMax; + } + finalRangeIntegrationTimeMilliSecs = + (finalRangeTimeoutMicroSecs + preRangeTimeoutMicroSecs + 500)/1000; + + /* sigmaEstRef = 1mm * 25ms/final range integration time (inc pre-range) + * sqrt(FixPoint1616/int) = FixPoint2408) + */ + sigmaEstRef = + VL53L0X_isqrt((cDfltFinalRangeIntegrationTimeMilliSecs + + finalRangeIntegrationTimeMilliSecs/2)/ + finalRangeIntegrationTimeMilliSecs); + + /* FixPoint2408 << 8 = FixPoint1616 */ + sigmaEstRef <<= 8; + sigmaEstRef = (sigmaEstRef + 500)/1000; + + /* FixPoint1616 * FixPoint1616 = FixPoint3232 */ + sqr1 = sigmaEstRtn * sigmaEstRtn; + /* FixPoint1616 * FixPoint1616 = FixPoint3232 */ + sqr2 = sigmaEstRef * sigmaEstRef; + + /* sqrt(FixPoint3232) = FixPoint1616 */ + sqrtResult = VL53L0X_isqrt((sqr1 + sqr2)); + /* + * Note that the Shift by 4 bits increases resolution prior to + * the sqrt, therefore the result must be shifted by 2 bits to + * the right to revert back to the FixPoint1616 format. + */ + + sigmaEstimate = 1000 * sqrtResult; + + if ((peakSignalRate_kcps < 1) || (vcselTotalEventsRtn < 1) || + (sigmaEstimate > cSigmaEstMax)) { + sigmaEstimate = cSigmaEstMax; + } + + *pSigmaEstimate = (uint32_t)(sigmaEstimate); + PALDevDataSet(Dev, SigmaEstimate, *pSigmaEstimate); + Status = VL53L0X_calc_dmax( + Dev, + totalSignalRate_mcps, + correctedSignalRate_mcps, + pwMult, + sigmaEstimateP1, + sigmaEstimateP2, + peakVcselDuration_us, + pDmax_mm); + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_get_pal_range_status(VL53L0X_DEV Dev, + uint8_t DeviceRangeStatus, + FixPoint1616_t SignalRate, + uint16_t EffectiveSpadRtnCount, + VL53L0X_RangingMeasurementData_t *pRangingMeasurementData, + uint8_t *pPalRangeStatus) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t NoneFlag; + uint8_t SigmaLimitflag = 0; + uint8_t SignalRefClipflag = 0; + uint8_t RangeIgnoreThresholdflag = 0; + uint8_t SigmaLimitCheckEnable = 0; + uint8_t SignalRateFinalRangeLimitCheckEnable = 0; + uint8_t SignalRefClipLimitCheckEnable = 0; + uint8_t RangeIgnoreThresholdLimitCheckEnable = 0; + FixPoint1616_t SigmaEstimate; + FixPoint1616_t SigmaLimitValue; + FixPoint1616_t SignalRefClipValue; + FixPoint1616_t RangeIgnoreThresholdValue; + FixPoint1616_t SignalRatePerSpad; + uint8_t DeviceRangeStatusInternal = 0; + uint16_t tmpWord = 0; + uint8_t Temp8; + uint32_t Dmax_mm = 0; + FixPoint1616_t LastSignalRefMcps; + + LOG_FUNCTION_START(""); + + + /* + * VL53L0X has a good ranging when the value of the + * DeviceRangeStatus = 11. This function will replace the value 0 with + * the value 11 in the DeviceRangeStatus. + * In addition, the SigmaEstimator is not included in the VL53L0X + * DeviceRangeStatus, this will be added in the PalRangeStatus. + */ + + DeviceRangeStatusInternal = ((DeviceRangeStatus & 0x78) >> 3); + + if (DeviceRangeStatusInternal == 0 || + DeviceRangeStatusInternal == 5 || + DeviceRangeStatusInternal == 7 || + DeviceRangeStatusInternal == 12 || + DeviceRangeStatusInternal == 13 || + DeviceRangeStatusInternal == 14 || + DeviceRangeStatusInternal == 15 + ) { + NoneFlag = 1; + } else { + NoneFlag = 0; + } + + /* + * Check if Sigma limit is enabled, if yes then do comparison with limit + * value and put the result back into pPalRangeStatus. + */ + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_GetLimitCheckEnable(Dev, + VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE, + &SigmaLimitCheckEnable); + + if ((SigmaLimitCheckEnable != 0) && (Status == VL53L0X_ERROR_NONE)) { + /* + * compute the Sigma and check with limit + */ + Status = VL53L0X_calc_sigma_estimate( + Dev, + pRangingMeasurementData, + &SigmaEstimate, + &Dmax_mm); + if (Status == VL53L0X_ERROR_NONE) + pRangingMeasurementData->RangeDMaxMilliMeter = Dmax_mm; + + if (Status == VL53L0X_ERROR_NONE) { + Status = VL53L0X_GetLimitCheckValue(Dev, + VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE, + &SigmaLimitValue); + + if ((SigmaLimitValue > 0) && + (SigmaEstimate > SigmaLimitValue)) + /* Limit Fail */ + SigmaLimitflag = 1; + } + } + + /* + * Check if Signal ref clip limit is enabled, if yes then do comparison + * with limit value and put the result back into pPalRangeStatus. + */ + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_GetLimitCheckEnable(Dev, + VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP, + &SignalRefClipLimitCheckEnable); + + if ((SignalRefClipLimitCheckEnable != 0) && + (Status == VL53L0X_ERROR_NONE)) { + + Status = VL53L0X_GetLimitCheckValue(Dev, + VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP, + &SignalRefClipValue); + + /* Read LastSignalRefMcps from device */ + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_WrByte(Dev, 0xFF, 0x01); + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_RdWord(Dev, + VL53L0X_REG_RESULT_PEAK_SIGNAL_RATE_REF, + &tmpWord); + + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_WrByte(Dev, 0xFF, 0x00); + + LastSignalRefMcps = VL53L0X_FIXPOINT97TOFIXPOINT1616(tmpWord); + PALDevDataSet(Dev, LastSignalRefMcps, LastSignalRefMcps); + + if ((SignalRefClipValue > 0) && + (LastSignalRefMcps > SignalRefClipValue)) { + /* Limit Fail */ + SignalRefClipflag = 1; + } + } + + /* + * Check if Signal ref clip limit is enabled, if yes then do comparison + * with limit value and put the result back into pPalRangeStatus. + * EffectiveSpadRtnCount has a format 8.8 + * If (Return signal rate < (1.5 x Xtalk x number of Spads)) : FAIL + */ + if (Status == VL53L0X_ERROR_NONE) + Status = VL53L0X_GetLimitCheckEnable(Dev, + VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD, + &RangeIgnoreThresholdLimitCheckEnable); + + if ((RangeIgnoreThresholdLimitCheckEnable != 0) && + (Status == VL53L0X_ERROR_NONE)) { + + /* Compute the signal rate per spad */ + if (EffectiveSpadRtnCount == 0) { + SignalRatePerSpad = 0; + } else { + SignalRatePerSpad = (FixPoint1616_t)((256 * SignalRate) + / EffectiveSpadRtnCount); + } + + Status = VL53L0X_GetLimitCheckValue(Dev, + VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD, + &RangeIgnoreThresholdValue); + + if ((RangeIgnoreThresholdValue > 0) && + (SignalRatePerSpad < RangeIgnoreThresholdValue)) { + /* Limit Fail add 2^6 to range status */ + RangeIgnoreThresholdflag = 1; + } + } + + if (Status == VL53L0X_ERROR_NONE) { + if (NoneFlag == 1) { + *pPalRangeStatus = 255; /* NONE */ + } else if (DeviceRangeStatusInternal == 1 || + DeviceRangeStatusInternal == 2 || + DeviceRangeStatusInternal == 3) { + *pPalRangeStatus = 5; /* HW fail */ + } else if (DeviceRangeStatusInternal == 6 || + DeviceRangeStatusInternal == 9) { + *pPalRangeStatus = 4; /* Phase fail */ + } else if (DeviceRangeStatusInternal == 8 || + DeviceRangeStatusInternal == 10 || + SignalRefClipflag == 1) { + *pPalRangeStatus = 3; /* Min range */ + } else if (DeviceRangeStatusInternal == 4 || + RangeIgnoreThresholdflag == 1) { + *pPalRangeStatus = 2; /* Signal Fail */ + } else if (SigmaLimitflag == 1) { + *pPalRangeStatus = 1; /* Sigma Fail */ + } else { + *pPalRangeStatus = 0; /* Range Valid */ + } + } + + /* DMAX only relevant during range error */ + if (*pPalRangeStatus == 0) + pRangingMeasurementData->RangeDMaxMilliMeter = 0; + + /* fill the Limit Check Status */ + + Status = VL53L0X_GetLimitCheckEnable(Dev, + VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE, + &SignalRateFinalRangeLimitCheckEnable); + + if (Status == VL53L0X_ERROR_NONE) { + if ((SigmaLimitCheckEnable == 0) || (SigmaLimitflag == 1)) + Temp8 = 1; + else + Temp8 = 0; + VL53L0X_SETARRAYPARAMETERFIELD(Dev, LimitChecksStatus, + VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE, Temp8); + + if ((DeviceRangeStatusInternal == 4) || + (SignalRateFinalRangeLimitCheckEnable == 0)) + Temp8 = 1; + else + Temp8 = 0; + VL53L0X_SETARRAYPARAMETERFIELD(Dev, LimitChecksStatus, + VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE, + Temp8); + + if ((SignalRefClipLimitCheckEnable == 0) || + (SignalRefClipflag == 1)) + Temp8 = 1; + else + Temp8 = 0; + + VL53L0X_SETARRAYPARAMETERFIELD(Dev, LimitChecksStatus, + VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP, Temp8); + + if ((RangeIgnoreThresholdLimitCheckEnable == 0) || + (RangeIgnoreThresholdflag == 1)) + Temp8 = 1; + else + Temp8 = 0; + + VL53L0X_SETARRAYPARAMETERFIELD(Dev, LimitChecksStatus, + VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD, + Temp8); + } + + LOG_FUNCTION_END(Status); + return Status; + +} diff --git a/modules/VL53L0X/src/vl53l0x_api_ranging.c b/modules/VL53L0X/src/vl53l0x_api_ranging.c new file mode 100644 index 0000000..f07283f --- /dev/null +++ b/modules/VL53L0X/src/vl53l0x_api_ranging.c @@ -0,0 +1,42 @@ +/******************************************************************************* + Copyright 2016, STMicroelectronics International N.V. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of STMicroelectronics nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND + NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED. + IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ******************************************************************************/ + +#include "vl53l0x_api.h" +#include "vl53l0x_api_core.h" + + +#ifndef __KERNEL__ +#include +#endif +#define LOG_FUNCTION_START(fmt, ...) \ + _LOG_FUNCTION_START(TRACE_MODULE_API, fmt, ##__VA_ARGS__) +#define LOG_FUNCTION_END(status, ...) \ + _LOG_FUNCTION_END(TRACE_MODULE_API, status, ##__VA_ARGS__) +#define LOG_FUNCTION_END_FMT(status, fmt, ...) \ + _LOG_FUNCTION_END_FMT(TRACE_MODULE_API, status, fmt, ##__VA_ARGS__) + diff --git a/modules/VL53L0X/src/vl53l0x_api_strings.c b/modules/VL53L0X/src/vl53l0x_api_strings.c new file mode 100644 index 0000000..bc2bd30 --- /dev/null +++ b/modules/VL53L0X/src/vl53l0x_api_strings.c @@ -0,0 +1,462 @@ +/******************************************************************************* + Copyright 2016, STMicroelectronics International N.V. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of STMicroelectronics nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND + NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED. + IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ******************************************************************************/ + +#include "vl53l0x_api.h" +#include "vl53l0x_api_core.h" +#include "vl53l0x_api_strings.h" + +#ifndef __KERNEL__ +#include +#endif + +#define LOG_FUNCTION_START(fmt, ...) \ + _LOG_FUNCTION_START(TRACE_MODULE_API, fmt, ##__VA_ARGS__) +#define LOG_FUNCTION_END(status, ...) \ + _LOG_FUNCTION_END(TRACE_MODULE_API, status, ##__VA_ARGS__) +#define LOG_FUNCTION_END_FMT(status, fmt, ...) \ + _LOG_FUNCTION_END_FMT(TRACE_MODULE_API, status, fmt, ##__VA_ARGS__) + + +VL53L0X_Error VL53L0X_check_part_used(VL53L0X_DEV Dev, + uint8_t *Revision, + VL53L0X_DeviceInfo_t *pVL53L0X_DeviceInfo) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t ModuleIdInt; + char *ProductId_tmp; + + LOG_FUNCTION_START(""); + + Status = VL53L0X_get_info_from_device(Dev, 2); + + if (Status == VL53L0X_ERROR_NONE) { + ModuleIdInt = VL53L0X_GETDEVICESPECIFICPARAMETER(Dev, ModuleId); + + if (ModuleIdInt == 0) { + *Revision = 0; + VL53L0X_COPYSTRING(pVL53L0X_DeviceInfo->ProductId, ""); + } else { + *Revision = VL53L0X_GETDEVICESPECIFICPARAMETER(Dev, Revision); + ProductId_tmp = VL53L0X_GETDEVICESPECIFICPARAMETER(Dev, + ProductId); + VL53L0X_COPYSTRING(pVL53L0X_DeviceInfo->ProductId, ProductId_tmp); + } + } + + LOG_FUNCTION_END(Status); + return Status; +} + + +VL53L0X_Error VL53L0X_get_device_info(VL53L0X_DEV Dev, + VL53L0X_DeviceInfo_t *pVL53L0X_DeviceInfo) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + uint8_t revision_id; + uint8_t Revision; + + Status = VL53L0X_check_part_used(Dev, &Revision, pVL53L0X_DeviceInfo); + + if (Status == VL53L0X_ERROR_NONE) { + if (Revision == 0) { + VL53L0X_COPYSTRING(pVL53L0X_DeviceInfo->Name, + VL53L0X_STRING_DEVICE_INFO_NAME_TS0); + } else if ((Revision <= 34) && (Revision != 32)) { + VL53L0X_COPYSTRING(pVL53L0X_DeviceInfo->Name, + VL53L0X_STRING_DEVICE_INFO_NAME_TS1); + } else if (Revision < 39) { + VL53L0X_COPYSTRING(pVL53L0X_DeviceInfo->Name, + VL53L0X_STRING_DEVICE_INFO_NAME_TS2); + } else { + VL53L0X_COPYSTRING(pVL53L0X_DeviceInfo->Name, + VL53L0X_STRING_DEVICE_INFO_NAME_ES1); + } + + VL53L0X_COPYSTRING(pVL53L0X_DeviceInfo->Type, + VL53L0X_STRING_DEVICE_INFO_TYPE); + + } + + if (Status == VL53L0X_ERROR_NONE) { + Status = VL53L0X_RdByte(Dev, VL53L0X_REG_IDENTIFICATION_MODEL_ID, + &pVL53L0X_DeviceInfo->ProductType); + } + + if (Status == VL53L0X_ERROR_NONE) { + Status = VL53L0X_RdByte(Dev, + VL53L0X_REG_IDENTIFICATION_REVISION_ID, + &revision_id); + pVL53L0X_DeviceInfo->ProductRevisionMajor = 1; + pVL53L0X_DeviceInfo->ProductRevisionMinor = + (revision_id & 0xF0) >> 4; + } + + return Status; +} + + +VL53L0X_Error VL53L0X_get_device_error_string(VL53L0X_DeviceError ErrorCode, + char *pDeviceErrorString) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + + LOG_FUNCTION_START(""); + + switch (ErrorCode) { + case VL53L0X_DEVICEERROR_NONE: + VL53L0X_COPYSTRING(pDeviceErrorString, + VL53L0X_STRING_DEVICEERROR_NONE); + break; + case VL53L0X_DEVICEERROR_VCSELCONTINUITYTESTFAILURE: + VL53L0X_COPYSTRING(pDeviceErrorString, + VL53L0X_STRING_DEVICEERROR_VCSELCONTINUITYTESTFAILURE); + break; + case VL53L0X_DEVICEERROR_VCSELWATCHDOGTESTFAILURE: + VL53L0X_COPYSTRING(pDeviceErrorString, + VL53L0X_STRING_DEVICEERROR_VCSELWATCHDOGTESTFAILURE); + break; + case VL53L0X_DEVICEERROR_NOVHVVALUEFOUND: + VL53L0X_COPYSTRING(pDeviceErrorString, + VL53L0X_STRING_DEVICEERROR_NOVHVVALUEFOUND); + break; + case VL53L0X_DEVICEERROR_MSRCNOTARGET: + VL53L0X_COPYSTRING(pDeviceErrorString, + VL53L0X_STRING_DEVICEERROR_MSRCNOTARGET); + break; + case VL53L0X_DEVICEERROR_SNRCHECK: + VL53L0X_COPYSTRING(pDeviceErrorString, + VL53L0X_STRING_DEVICEERROR_SNRCHECK); + break; + case VL53L0X_DEVICEERROR_RANGEPHASECHECK: + VL53L0X_COPYSTRING(pDeviceErrorString, + VL53L0X_STRING_DEVICEERROR_RANGEPHASECHECK); + break; + case VL53L0X_DEVICEERROR_SIGMATHRESHOLDCHECK: + VL53L0X_COPYSTRING(pDeviceErrorString, + VL53L0X_STRING_DEVICEERROR_SIGMATHRESHOLDCHECK); + break; + case VL53L0X_DEVICEERROR_TCC: + VL53L0X_COPYSTRING(pDeviceErrorString, + VL53L0X_STRING_DEVICEERROR_TCC); + break; + case VL53L0X_DEVICEERROR_PHASECONSISTENCY: + VL53L0X_COPYSTRING(pDeviceErrorString, + VL53L0X_STRING_DEVICEERROR_PHASECONSISTENCY); + break; + case VL53L0X_DEVICEERROR_MINCLIP: + VL53L0X_COPYSTRING(pDeviceErrorString, + VL53L0X_STRING_DEVICEERROR_MINCLIP); + break; + case VL53L0X_DEVICEERROR_RANGECOMPLETE: + VL53L0X_COPYSTRING(pDeviceErrorString, + VL53L0X_STRING_DEVICEERROR_RANGECOMPLETE); + break; + case VL53L0X_DEVICEERROR_ALGOUNDERFLOW: + VL53L0X_COPYSTRING(pDeviceErrorString, + VL53L0X_STRING_DEVICEERROR_ALGOUNDERFLOW); + break; + case VL53L0X_DEVICEERROR_ALGOOVERFLOW: + VL53L0X_COPYSTRING(pDeviceErrorString, + VL53L0X_STRING_DEVICEERROR_ALGOOVERFLOW); + break; + case VL53L0X_DEVICEERROR_RANGEIGNORETHRESHOLD: + VL53L0X_COPYSTRING(pDeviceErrorString, + VL53L0X_STRING_DEVICEERROR_RANGEIGNORETHRESHOLD); + break; + + default: + VL53L0X_COPYSTRING(pDeviceErrorString, + VL53L0X_STRING_UNKNOW_ERROR_CODE); + + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_get_range_status_string(uint8_t RangeStatus, + char *pRangeStatusString) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + + LOG_FUNCTION_START(""); + + switch (RangeStatus) { + case 0: + VL53L0X_COPYSTRING(pRangeStatusString, + VL53L0X_STRING_RANGESTATUS_RANGEVALID); + break; + case 1: + VL53L0X_COPYSTRING(pRangeStatusString, + VL53L0X_STRING_RANGESTATUS_SIGMA); + break; + case 2: + VL53L0X_COPYSTRING(pRangeStatusString, + VL53L0X_STRING_RANGESTATUS_SIGNAL); + break; + case 3: + VL53L0X_COPYSTRING(pRangeStatusString, + VL53L0X_STRING_RANGESTATUS_MINRANGE); + break; + case 4: + VL53L0X_COPYSTRING(pRangeStatusString, + VL53L0X_STRING_RANGESTATUS_PHASE); + break; + case 5: + VL53L0X_COPYSTRING(pRangeStatusString, + VL53L0X_STRING_RANGESTATUS_HW); + break; + + default: /**/ + VL53L0X_COPYSTRING(pRangeStatusString, + VL53L0X_STRING_RANGESTATUS_NONE); + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_get_pal_error_string(VL53L0X_Error PalErrorCode, + char *pPalErrorString) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + + LOG_FUNCTION_START(""); + + switch (PalErrorCode) { + case VL53L0X_ERROR_NONE: + VL53L0X_COPYSTRING(pPalErrorString, + VL53L0X_STRING_ERROR_NONE); + break; + case VL53L0X_ERROR_CALIBRATION_WARNING: + VL53L0X_COPYSTRING(pPalErrorString, + VL53L0X_STRING_ERROR_CALIBRATION_WARNING); + break; + case VL53L0X_ERROR_MIN_CLIPPED: + VL53L0X_COPYSTRING(pPalErrorString, + VL53L0X_STRING_ERROR_MIN_CLIPPED); + break; + case VL53L0X_ERROR_UNDEFINED: + VL53L0X_COPYSTRING(pPalErrorString, + VL53L0X_STRING_ERROR_UNDEFINED); + break; + case VL53L0X_ERROR_INVALID_PARAMS: + VL53L0X_COPYSTRING(pPalErrorString, + VL53L0X_STRING_ERROR_INVALID_PARAMS); + break; + case VL53L0X_ERROR_NOT_SUPPORTED: + VL53L0X_COPYSTRING(pPalErrorString, + VL53L0X_STRING_ERROR_NOT_SUPPORTED); + break; + case VL53L0X_ERROR_INTERRUPT_NOT_CLEARED: + VL53L0X_COPYSTRING(pPalErrorString, + VL53L0X_STRING_ERROR_INTERRUPT_NOT_CLEARED); + break; + case VL53L0X_ERROR_RANGE_ERROR: + VL53L0X_COPYSTRING(pPalErrorString, + VL53L0X_STRING_ERROR_RANGE_ERROR); + break; + case VL53L0X_ERROR_TIME_OUT: + VL53L0X_COPYSTRING(pPalErrorString, + VL53L0X_STRING_ERROR_TIME_OUT); + break; + case VL53L0X_ERROR_MODE_NOT_SUPPORTED: + VL53L0X_COPYSTRING(pPalErrorString, + VL53L0X_STRING_ERROR_MODE_NOT_SUPPORTED); + break; + case VL53L0X_ERROR_BUFFER_TOO_SMALL: + VL53L0X_COPYSTRING(pPalErrorString, + VL53L0X_STRING_ERROR_BUFFER_TOO_SMALL); + break; + case VL53L0X_ERROR_GPIO_NOT_EXISTING: + VL53L0X_COPYSTRING(pPalErrorString, + VL53L0X_STRING_ERROR_GPIO_NOT_EXISTING); + break; + case VL53L0X_ERROR_GPIO_FUNCTIONALITY_NOT_SUPPORTED: + VL53L0X_COPYSTRING(pPalErrorString, + VL53L0X_STRING_ERROR_GPIO_FUNCTIONALITY_NOT_SUPPORTED); + break; + case VL53L0X_ERROR_CONTROL_INTERFACE: + VL53L0X_COPYSTRING(pPalErrorString, + VL53L0X_STRING_ERROR_CONTROL_INTERFACE); + break; + case VL53L0X_ERROR_INVALID_COMMAND: + VL53L0X_COPYSTRING(pPalErrorString, + VL53L0X_STRING_ERROR_INVALID_COMMAND); + break; + case VL53L0X_ERROR_DIVISION_BY_ZERO: + VL53L0X_COPYSTRING(pPalErrorString, + VL53L0X_STRING_ERROR_DIVISION_BY_ZERO); + break; + case VL53L0X_ERROR_REF_SPAD_INIT: + VL53L0X_COPYSTRING(pPalErrorString, + VL53L0X_STRING_ERROR_REF_SPAD_INIT); + break; + case VL53L0X_ERROR_NOT_IMPLEMENTED: + VL53L0X_COPYSTRING(pPalErrorString, + VL53L0X_STRING_ERROR_NOT_IMPLEMENTED); + break; + + default: + VL53L0X_COPYSTRING(pPalErrorString, + VL53L0X_STRING_UNKNOW_ERROR_CODE); + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_get_pal_state_string(VL53L0X_State PalStateCode, + char *pPalStateString) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + + LOG_FUNCTION_START(""); + + switch (PalStateCode) { + case VL53L0X_STATE_POWERDOWN: + VL53L0X_COPYSTRING(pPalStateString, + VL53L0X_STRING_STATE_POWERDOWN); + break; + case VL53L0X_STATE_WAIT_STATICINIT: + VL53L0X_COPYSTRING(pPalStateString, + VL53L0X_STRING_STATE_WAIT_STATICINIT); + break; + case VL53L0X_STATE_STANDBY: + VL53L0X_COPYSTRING(pPalStateString, + VL53L0X_STRING_STATE_STANDBY); + break; + case VL53L0X_STATE_IDLE: + VL53L0X_COPYSTRING(pPalStateString, + VL53L0X_STRING_STATE_IDLE); + break; + case VL53L0X_STATE_RUNNING: + VL53L0X_COPYSTRING(pPalStateString, + VL53L0X_STRING_STATE_RUNNING); + break; + case VL53L0X_STATE_UNKNOWN: + VL53L0X_COPYSTRING(pPalStateString, + VL53L0X_STRING_STATE_UNKNOWN); + break; + case VL53L0X_STATE_ERROR: + VL53L0X_COPYSTRING(pPalStateString, + VL53L0X_STRING_STATE_ERROR); + break; + + default: + VL53L0X_COPYSTRING(pPalStateString, + VL53L0X_STRING_STATE_UNKNOWN); + } + + LOG_FUNCTION_END(Status); + return Status; +} + +VL53L0X_Error VL53L0X_get_sequence_steps_info( + VL53L0X_SequenceStepId SequenceStepId, + char *pSequenceStepsString) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + LOG_FUNCTION_START(""); + + switch (SequenceStepId) { + case VL53L0X_SEQUENCESTEP_TCC: + VL53L0X_COPYSTRING(pSequenceStepsString, + VL53L0X_STRING_SEQUENCESTEP_TCC); + break; + case VL53L0X_SEQUENCESTEP_DSS: + VL53L0X_COPYSTRING(pSequenceStepsString, + VL53L0X_STRING_SEQUENCESTEP_DSS); + break; + case VL53L0X_SEQUENCESTEP_MSRC: + VL53L0X_COPYSTRING(pSequenceStepsString, + VL53L0X_STRING_SEQUENCESTEP_MSRC); + break; + case VL53L0X_SEQUENCESTEP_PRE_RANGE: + VL53L0X_COPYSTRING(pSequenceStepsString, + VL53L0X_STRING_SEQUENCESTEP_PRE_RANGE); + break; + case VL53L0X_SEQUENCESTEP_FINAL_RANGE: + VL53L0X_COPYSTRING(pSequenceStepsString, + VL53L0X_STRING_SEQUENCESTEP_FINAL_RANGE); + break; + + default: + Status = VL53L0X_ERROR_INVALID_PARAMS; + } + + LOG_FUNCTION_END(Status); + + return Status; +} + + +VL53L0X_Error VL53L0X_get_limit_check_info(VL53L0X_DEV Dev, uint16_t LimitCheckId, + char *pLimitCheckString) +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + + LOG_FUNCTION_START(""); + + switch (LimitCheckId) { + case VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE: + VL53L0X_COPYSTRING(pLimitCheckString, + VL53L0X_STRING_CHECKENABLE_SIGMA_FINAL_RANGE); + break; + case VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE: + VL53L0X_COPYSTRING(pLimitCheckString, + VL53L0X_STRING_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE); + break; + case VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP: + VL53L0X_COPYSTRING(pLimitCheckString, + VL53L0X_STRING_CHECKENABLE_SIGNAL_REF_CLIP); + break; + case VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD: + VL53L0X_COPYSTRING(pLimitCheckString, + VL53L0X_STRING_CHECKENABLE_RANGE_IGNORE_THRESHOLD); + break; + + case VL53L0X_CHECKENABLE_SIGNAL_RATE_MSRC: + VL53L0X_COPYSTRING(pLimitCheckString, + VL53L0X_STRING_CHECKENABLE_SIGNAL_RATE_MSRC); + break; + + case VL53L0X_CHECKENABLE_SIGNAL_RATE_PRE_RANGE: + VL53L0X_COPYSTRING(pLimitCheckString, + VL53L0X_STRING_CHECKENABLE_SIGNAL_RATE_PRE_RANGE); + break; + + default: + VL53L0X_COPYSTRING(pLimitCheckString, + VL53L0X_STRING_UNKNOW_ERROR_CODE); + + } + + LOG_FUNCTION_END(Status); + return Status; +} diff --git a/modules/VL53L0X/src/vl53l0x_cali.c b/modules/VL53L0X/src/vl53l0x_cali.c new file mode 100644 index 0000000..2885891 --- /dev/null +++ b/modules/VL53L0X/src/vl53l0x_cali.c @@ -0,0 +1,180 @@ +#include "vl53l0x_cali.h" +#include "delay.h" + +_vl53l0x_adjust Vl53l0x_adjust; //鏍″噯鏁版嵁24c02鍐欑紦瀛樺尯(鐢ㄤ簬鍦ㄦ牎鍑嗘ā寮忔牎鍑嗘暟鎹啓鍏24c02) +_vl53l0x_adjust Vl53l0x_data; //鏍″噯鏁版嵁24c02璇荤紦瀛樺尯锛堢敤浜庣郴缁熷垵濮嬪寲鏃跺悜24C02璇诲彇鏁版嵁锛 + +#define adjust_num 5//鏍″噯閿欒娆℃暟 + +//VL53L0X鏍″噯鍑芥暟 +//dev:璁惧I2C鍙傛暟缁撴瀯浣 +VL53L0X_Error vl53l0x_adjust(VL53L0X_Dev_t *dev) +{ + + VL53L0X_DeviceError Status = VL53L0X_ERROR_NONE; + uint32_t refSpadCount = 7; + uint8_t isApertureSpads = 0; + uint32_t XTalkCalDistance = 100; + uint32_t XTalkCompensationRateMegaCps; + uint32_t CalDistanceMilliMeter = 100<<16; + int32_t OffsetMicroMeter = 30000; + uint8_t VhvSettings = 23; + uint8_t PhaseCal = 1; + u8 i=0; + + VL53L0X_StaticInit(dev);//鏁板兼仮澶嶉粯璁,浼犳劅鍣ㄥ浜庣┖闂茬姸鎬 +// LED1=0; + //SPADS鏍″噯---------------------------- + spads: + delay_ms(10); + printf("The SPADS Calibration Start...\r\n"); + Status = VL53L0X_PerformRefSpadManagement(dev,&refSpadCount,&isApertureSpads);//鎵ц鍙傝僑pad绠$悊 + if(Status == VL53L0X_ERROR_NONE) + { + printf("refSpadCount = %d\r\n",refSpadCount); + Vl53l0x_adjust.refSpadCount = refSpadCount; + printf("isApertureSpads = %d\r\n",isApertureSpads); + Vl53l0x_adjust.isApertureSpads = isApertureSpads; + printf("The SPADS Calibration Finish...\r\n\r\n"); + i=0; + } + else + { + i++; + if(i==adjust_num) return Status; + printf("SPADS Calibration Error,Restart this step\r\n"); + goto spads; + } + //璁惧鍙傝冩牎鍑--------------------------------------------------- + ref: + delay_ms(10); + printf("The Ref Calibration Start...\r\n"); + Status = VL53L0X_PerformRefCalibration(dev,&VhvSettings,&PhaseCal);//Ref鍙傝冩牎鍑 + if(Status == VL53L0X_ERROR_NONE) + { + printf("VhvSettings = %d\r\n",VhvSettings); + Vl53l0x_adjust.VhvSettings = VhvSettings; + printf("PhaseCal = %d\r\n",PhaseCal); + Vl53l0x_adjust.PhaseCal = PhaseCal; + printf("The Ref Calibration Finish...\r\n\r\n"); + i=0; + } + else + { + i++; + if(i==adjust_num) return Status; + printf("Ref Calibration Error,Restart this step\r\n"); + goto ref; + } + //鍋忕Щ鏍″噯------------------------------------------------ + offset: + delay_ms(10); + printf("Offset Calibration:need a white target,in black space,and the distance keep 100mm!\r\n"); + printf("The Offset Calibration Start...\r\n"); + + Status = VL53L0X_PerformOffsetCalibration(dev,CalDistanceMilliMeter,&OffsetMicroMeter);//鍋忕Щ鏍″噯 + if(Status == VL53L0X_ERROR_NONE) + { + printf("CalDistanceMilliMeter = %d mm\r\n",CalDistanceMilliMeter); + Vl53l0x_adjust.CalDistanceMilliMeter = CalDistanceMilliMeter; + printf("OffsetMicroMeter = %d mm\r\n",OffsetMicroMeter); + Vl53l0x_adjust.OffsetMicroMeter = OffsetMicroMeter; + printf("The Offset Calibration Finish...\r\n\r\n"); + i=0; + } + else + { + i++; + if(i==adjust_num) return Status; + printf("Offset Calibration Error,Restart this step\r\n"); + goto offset; + } + //涓叉壈鏍″噯----------------------------------------------------- + xtalk: + delay_ms(20); + printf("Cross Talk Calibration:need a grey target\r\n"); + printf("The Cross Talk Calibration Start...\r\n"); + Status = VL53L0X_PerformXTalkCalibration(dev,XTalkCalDistance,&XTalkCompensationRateMegaCps);//涓叉壈鏍″噯 + if(Status == VL53L0X_ERROR_NONE) + { + printf("XTalkCalDistance = %d mm\r\n",XTalkCalDistance); + Vl53l0x_adjust.XTalkCalDistance = XTalkCalDistance; + printf("XTalkCompensationRateMegaCps = %d\r\n",XTalkCompensationRateMegaCps); + Vl53l0x_adjust.XTalkCompensationRateMegaCps = XTalkCompensationRateMegaCps; + printf("The Cross Talk Calibration Finish...\r\n\r\n"); + i=0; + } + else + { + i++; + if(i==adjust_num) return Status; + printf("Cross Talk Calibration Error,Restart this step\r\n"); + goto xtalk; + } +// LED1=1; + printf("All the Calibration has Finished!\r\n"); + printf("Calibration is successful!!\r\n"); + + Vl53l0x_adjust.adjustok = 0xAA;//鏍″噯鎴愬姛 +// AT24CXX_Write(0,(u8*)&Vl53l0x_adjust,sizeof(_vl53l0x_adjust));//灏嗘牎鍑嗘暟鎹繚瀛樺埌24c02 + memcpy(&Vl53l0x_data,&Vl53l0x_adjust,sizeof(_vl53l0x_adjust)); + return Status; +} + +////vl53l0x鏍″噯娴嬭瘯 +////dev:璁惧I2C鍙傛暟缁撴瀯浣 +//void vl53l0x_calibration_test(VL53L0X_Dev_t *dev) +//{ +// VL53L0X_Error status = VL53L0X_ERROR_NONE; +// u8 key=0; +// u8 i=0; +// +//// LCD_Fill(30,170,320,300,WHITE); +//// POINT_COLOR=RED;//璁剧疆瀛椾綋涓虹孩鑹 +//// LCD_ShowString(30,170,300,16,16,"need a white target,and "); +//// LCD_ShowString(30,190,250,16,16,"the distance keep 100mm."); +//// POINT_COLOR=BLUE;//璁剧疆瀛椾綋涓鸿摑鑹 +//// LCD_ShowString(30,220,200,16,16,"KEY_UP: Return menu"); +//// LCD_ShowString(30,240,200,16,16,"KEY1: Calibration"); +// printf("need a white target,and the distance keep 100mm.\n\r"); +// printf("KEY_UP: Return menu\n\r"); +// printf("KEY1 : Calibration\n\r"); +// while(1) +// { +////// key = KEY_Scan(0); +////// if(key==KEY1_PRES) +////// { +////// POINT_COLOR=RED;//璁剧疆瀛椾綋涓虹孩鑹 +////// LCD_ShowString(30,260,200,16,16,"Start calibration..."); +//// status = vl53l0x_adjust(dev);//杩涘叆鏍″噯 +//// if(status!=VL53L0X_ERROR_NONE)//鏍″噯澶辫触 +//// { +//// printf("Calibration is error!!\r\n"); +//// i=3; +//// while(i--) +//// { +//// delay_1ms(500); +////// LCD_ShowString(30,260,200,16,16," "); +////// delay_1ms(500); +////// LCD_ShowString(30,260,200,16,16,"Calibration is error"); +//// } +//// } +//// else +////// LCD_ShowString(30,260,200,16,16,"Calibration is complete!"); +//// delay_1ms(500); + +//// break; +//// +//// } +//// else if(key==WKUP_PRES) +//// { +//// LED1=1; +//// break;//杩斿洖涓婁竴鑿滃崟 +//// } +// printf("%s\r\n",__FILE__); +// delay_1ms(200); +//// LED0=!LED0; +// +// } +// +//} diff --git a/modules/VL53L0X/src/vl53l0x_gen.c b/modules/VL53L0X/src/vl53l0x_gen.c new file mode 100644 index 0000000..df9ffab --- /dev/null +++ b/modules/VL53L0X/src/vl53l0x_gen.c @@ -0,0 +1,81 @@ +#include "vl53l0x_gen.h" +#include "delay.h" + +#ifndef vu16 +#define vu16 uint16_t +#endif + +VL53L0X_RangingMeasurementData_t vl53l0x_data;//测距测量结构体 +vu16 Distance_data=0;//保存测距数据 + +//VL53L0X 测量模式配置 +//dev:设备I2C参数结构体 +//mode: 0:默认;1:高精度;2:长距离 +VL53L0X_Error vl53l0x_set_mode(VL53L0X_Dev_t *dev,u8 mode) +{ + + VL53L0X_Error status = VL53L0X_ERROR_NONE; + uint8_t VhvSettings; + uint8_t PhaseCal; + uint32_t refSpadCount; + uint8_t isApertureSpads; + + vl53l0x_reset(dev);//复位vl53l0x(频繁切换工作模式容易导致采集距离数据不准,需加上这一代码) + status = VL53L0X_StaticInit(dev); + + if(AjustOK!=0)//已校准好了,写入校准值 + { + status= VL53L0X_SetReferenceSpads(dev,Vl53l0x_data.refSpadCount,Vl53l0x_data.isApertureSpads);//设定Spads校准值 + if(status!=VL53L0X_ERROR_NONE) goto error; + delay_ms(2); + status= VL53L0X_SetRefCalibration(dev,Vl53l0x_data.VhvSettings,Vl53l0x_data.PhaseCal);//设定Ref校准值 + if(status!=VL53L0X_ERROR_NONE) goto error; + delay_ms(2); + status=VL53L0X_SetOffsetCalibrationDataMicroMeter(dev,Vl53l0x_data.OffsetMicroMeter);//设定偏移校准值 + if(status!=VL53L0X_ERROR_NONE) goto error; + delay_ms(2); + status=VL53L0X_SetXTalkCompensationRateMegaCps(dev,Vl53l0x_data.XTalkCompensationRateMegaCps);//设定串扰校准值 + if(status!=VL53L0X_ERROR_NONE) goto error; + delay_ms(2); + } + else + { + status = VL53L0X_PerformRefCalibration(dev, &VhvSettings, &PhaseCal);//Ref参考校准 + if(status!=VL53L0X_ERROR_NONE) goto error; + delay_ms(2); + status = VL53L0X_PerformRefSpadManagement(dev, &refSpadCount, &isApertureSpads);//执行参考SPAD管理 + if(status!=VL53L0X_ERROR_NONE) goto error; + delay_ms(2); + } + status = VL53L0X_SetDeviceMode(dev,VL53L0X_DEVICEMODE_SINGLE_RANGING);//使能单次测量模式 + if(status!=VL53L0X_ERROR_NONE) goto error; + delay_ms(2); + status = VL53L0X_SetLimitCheckEnable(dev,VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE,1);//使能SIGMA范围检查 + if(status!=VL53L0X_ERROR_NONE) goto error; + delay_ms(2); + status = VL53L0X_SetLimitCheckEnable(dev,VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE,1);//使能信号速率范围检查 + if(status!=VL53L0X_ERROR_NONE) goto error; + delay_ms(2); + status = VL53L0X_SetLimitCheckValue(dev,VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE,Mode_data[mode].sigmaLimit);//设定SIGMA范围 + if(status!=VL53L0X_ERROR_NONE) goto error; + delay_ms(2); + status = VL53L0X_SetLimitCheckValue(dev,VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE,Mode_data[mode].signalLimit);//设定信号速率范围范围 + if(status!=VL53L0X_ERROR_NONE) goto error; + delay_ms(2); + status = VL53L0X_SetMeasurementTimingBudgetMicroSeconds(dev,Mode_data[mode].timingBudget);//设定完整测距最长时间 + if(status!=VL53L0X_ERROR_NONE) goto error; + delay_ms(2); + status = VL53L0X_SetVcselPulsePeriod(dev, VL53L0X_VCSEL_PERIOD_PRE_RANGE, Mode_data[mode].preRangeVcselPeriod);//设定VCSEL脉冲周期 + if(status!=VL53L0X_ERROR_NONE) goto error; + delay_ms(2); + status = VL53L0X_SetVcselPulsePeriod(dev, VL53L0X_VCSEL_PERIOD_FINAL_RANGE, Mode_data[mode].finalRangeVcselPeriod);//设定VCSEL脉冲周期范围 + + error://错误信息 + if(status!=VL53L0X_ERROR_NONE) + { + print_pal_error(status); + return status; + } + return status; + +} diff --git a/modules/VL53L0X/src/vl53l0x_i2c.c b/modules/VL53L0X/src/vl53l0x_i2c.c new file mode 100644 index 0000000..c2de632 --- /dev/null +++ b/modules/VL53L0X/src/vl53l0x_i2c.c @@ -0,0 +1,428 @@ +#include "vl53l0x_i2c.h" +#include "delay.h" + + + +//VL53L0X I2C初始化 +//void VL53L0X_i2c_init(void) +//{ +// RCC_AHB1PeriphClockCmd(RCC_VL53L0x, ENABLE); // 使能GPIO时钟 +// +// GPIO_InitTypeDef GPIO_InitStructure; + +// GPIO_InitStructure.GPIO_Pin = GPIO_SDA|GPIO_SCL; +// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; +// GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; +// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; +// GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; +// GPIO_Init(PORT_VL53L0x, &GPIO_InitStructure); + +//} + +/****************************************************************** + * 函 数 名 称:IIC_Start + * 函 数 说 明:IIC起始时序 + * 函 数 形 参:无 + * 函 数 返 回:无 + * 作 者:LC + * 备 注:无 +******************************************************************/ +void IIC_Start(void) +{ + SDA_OUT(); + + SDA(1); + delay_us(5); + SCL(1); + delay_us(5); + + SDA(0); + delay_us(5); + SCL(0); + delay_us(5); + +} +/****************************************************************** + * 函 数 名 称:IIC_Stop + * 函 数 说 明:IIC停止信号 + * 函 数 形 参:无 + * 函 数 返 回:无 + * 作 者:LC + * 备 注:无 +******************************************************************/ +void IIC_Stop(void) +{ + SDA_OUT(); + SCL(0); + SDA(0); + + SCL(1); + delay_us(5); + SDA(1); + delay_us(5); + +} + +/****************************************************************** + * 函 数 名 称:IIC_Send_Ack + * 函 数 说 明:主机发送应答或者非应答信号 + * 函 数 形 参:0发送应答 1发送非应答 + * 函 数 返 回:无 + * 作 者:LC + * 备 注:无 +******************************************************************/ +void IIC_Send_Ack(unsigned char ack) +{ + SDA_OUT(); + SCL(0); + SDA(0); + delay_us(5); + if(!ack) SDA(0); + else SDA(1); + SCL(1); + delay_us(5); + SCL(0); + SDA(1); +} + + +/****************************************************************** + * 函 数 名 称:I2C_WaitAck + * 函 数 说 明:等待从机应答 + * 函 数 形 参:无 + * 函 数 返 回:0有应答 1超时无应答 + * 作 者:LC + * 备 注:无 +******************************************************************/ +unsigned char I2C_WaitAck(void) +{ + + char ack = 0; + unsigned char ack_flag = 10; + SCL(0); + SDA(1); + SDA_IN(); + delay_us(5); + SCL(1); + delay_us(5); + + while( (SDA_GET()==1) && ( ack_flag ) ) + { + ack_flag--; + delay_us(5); + } + + if( ack_flag <= 0 ) + { + IIC_Stop(); + return 1; + } + else + { + SCL(0); + SDA_OUT(); + } + return ack; +} + +/****************************************************************** + * 函 数 名 称:Send_Byte + * 函 数 说 明:写入一个字节 + * 函 数 形 参:dat要写人的数据 + * 函 数 返 回:无 + * 作 者:LC + * 备 注:无 +******************************************************************/ +void Send_Byte(uint8_t dat) +{ + int i = 0; + SDA_OUT(); + SCL(0);//拉低时钟开始数据传输 + + for( i = 0; i < 8; i++ ) + { + SDA( (dat & 0x80) >> 7 ); + delay_us(1); + SCL(1); + delay_us(5); + SCL(0); + delay_us(5); + dat<<=1; + } +} + +/****************************************************************** + * 函 数 名 称:Read_Byte + * 函 数 说 明:IIC读时序 + * 函 数 形 参:ack=1时,发送ACK,ack=0,发送nACK + * 函 数 返 回:读到的数据 + * 作 者:LC + * 备 注:无 +******************************************************************/ +unsigned char Read_Byte(unsigned char ack) +{ + unsigned char i,receive=0; + SDA_IN();//SDA设置为输入 + for(i=0;i<8;i++ ) + { + SCL(0); + delay_us(4); + SCL(1); + receive<<=1; + if( SDA_GET() )receive++; + delay_us(4); //1 + } + if (!ack) + IIC_Send_Ack(1);//发送nACK + else + IIC_Send_Ack(0); //发送ACK + return receive; +} + + +//IIC写一个字节数据 +u8 VL_IIC_Write_1Byte(u8 SlaveAddress, u8 REG_Address,u8 REG_data) +{ + IIC_Start(); + Send_Byte(SlaveAddress); + if(I2C_WaitAck()) + { + IIC_Stop();//释放总线 + return 1;//没应答则退出 + + } + Send_Byte(REG_Address); + I2C_WaitAck(); + Send_Byte(REG_data); + I2C_WaitAck(); + IIC_Stop(); + + return 0; +} + +//IIC读一个字节数据 +u8 VL_IIC_Read_1Byte(u8 SlaveAddress, u8 REG_Address,u8 *REG_data) +{ + IIC_Start(); + Send_Byte(SlaveAddress);//发写命令 + if(I2C_WaitAck()) + { + IIC_Stop();//释放总线 + return 1;//没应答则退出 + } + Send_Byte(REG_Address); + I2C_WaitAck(); + IIC_Start(); + Send_Byte(SlaveAddress|0x01);//发读命令 + I2C_WaitAck(); + *REG_data = Read_Byte(0); + IIC_Stop(); + + return 0; +} + +//IIC写n字节数据 +u8 VL_IIC_Write_nByte(u8 SlaveAddress, u8 REG_Address,u16 len, u8 *buf) +{ + IIC_Start(); + Send_Byte(SlaveAddress);//发写命令 + if(I2C_WaitAck()) + { + IIC_Stop();//释放总线 + return 1;//没应答则退出 + } + Send_Byte(REG_Address); + I2C_WaitAck(); + while(len--) + { + Send_Byte(*buf++);//发送buff的数据 + I2C_WaitAck(); + } + IIC_Stop();//释放总线 + + return 0; + +} + +//IIC读n字节数据 +u8 VL_IIC_Read_nByte(u8 SlaveAddress, u8 REG_Address,u16 len,u8 *buf) +{ + IIC_Start(); + Send_Byte(SlaveAddress);//发写命令 + if(I2C_WaitAck()) + { + IIC_Stop();//释放总线 + return 1;//没应答则退出 + } + Send_Byte(REG_Address); + I2C_WaitAck(); + + IIC_Start(); + Send_Byte(SlaveAddress|0x01);//发读命令 + I2C_WaitAck(); + while(len) + { + if(len==1) + { + *buf = Read_Byte(0); + } + else + { + *buf = Read_Byte(1); + } + buf++; + len--; + } + IIC_Stop();//释放总线 + + return 0; + +} + +//VL53L0X 写多个数据 +//address:地址 +//index:偏移地址 +//pdata:数据指针 +//count:长度 最大65535 +u8 VL53L0X_write_multi(u8 address, u8 index,u8 *pdata,u16 count) +{ + u8 status = STATUS_OK; + + if(VL_IIC_Write_nByte(address,index,count,pdata)) + { + status = STATUS_FAIL; + } + return status; +} + + +//VL53L0X 读多个数据 +//address:地址 +//index:偏移地址 +//pdata:数据指针 +//count:长度 最大65535 +u8 VL53L0X_read_multi(u8 address,u8 index,u8 *pdata,u16 count) +{ + u8 status = STATUS_OK; + + if(VL_IIC_Read_nByte(address,index,count,pdata)) + { + status = STATUS_FAIL; + } + + return status; +} + +//VL53L0X 写1个数据(单字节) +//address:地址 +//index:偏移地址 +//data:数据(8位) +u8 VL53L0X_write_byte(u8 address,u8 index,u8 data) +{ + u8 status = STATUS_OK; + + status = VL53L0X_write_multi(address,index,&data,1); + + return status; +} + +//VL53L0X 写1个数据(双字节) +//address:地址 +//index:偏移地址 +//data:数据(16位) +u8 VL53L0X_write_word(u8 address,u8 index,u16 data) +{ + u8 status = STATUS_OK; + + u8 buffer[2]; + + //将16位数据拆分成8位 + buffer[0] = (u8)(data>>8);//高八位 + buffer[1] = (u8)(data&0xff);//低八位 + + if(index%2==1) + { + //串行通信不能处理对非2字节对齐寄存器的字节 + status = VL53L0X_write_multi(address,index,&buffer[0],1); + status = VL53L0X_write_multi(address,index,&buffer[0],1); + }else + { + status = VL53L0X_write_multi(address,index,buffer,2); + } + + return status; +} + +//VL53L0X 写1个数据(四字节) +//address:地址 +//index:偏移地址 +//data:数据(32位) +u8 VL53L0X_write_dword(u8 address,u8 index,u32 data) +{ + + u8 status = STATUS_OK; + + u8 buffer[4]; + + //将32位数据拆分成8位 + buffer[0] = (u8)(data>>24); + buffer[1] = (u8)((data&0xff0000)>>16); + buffer[2] = (u8)((data&0xff00)>>8); + buffer[3] = (u8)(data&0xff); + + status = VL53L0X_write_multi(address,index,buffer,4); + + return status; + +} + + +//VL53L0X 读1个数据(单字节) +//address:地址 +//index:偏移地址 +//data:数据(8位) +u8 VL53L0X_read_byte(u8 address,u8 index,u8 *pdata) +{ + u8 status = STATUS_OK; + + status = VL53L0X_read_multi(address,index,pdata,1); + + return status; + +} + +//VL53L0X 读个数据(双字节) +//address:地址 +//index:偏移地址 +//data:数据(16位) +u8 VL53L0X_read_word(u8 address,u8 index,u16 *pdata) +{ + u8 status = STATUS_OK; + + u8 buffer[2]; + + status = VL53L0X_read_multi(address,index,buffer,2); + + *pdata = ((u16)buffer[0]<<8)+(u16)buffer[1]; + + return status; + +} + +//VL53L0X 读1个数据(四字节) +//address:地址 +//index:偏移地址 +//data:数据(32位) +u8 VL53L0X_read_dword(u8 address,u8 index,u32 *pdata) +{ + u8 status = STATUS_OK; + + u8 buffer[4]; + + status = VL53L0X_read_multi(address,index,buffer,4); + + *pdata = ((u32)buffer[0]<<24)+((u32)buffer[1]<<16)+((u32)buffer[2]<<8)+((u32)buffer[3]); + + return status; + +} diff --git a/modules/VL53L0X/src/vl53l0x_it.c b/modules/VL53L0X/src/vl53l0x_it.c new file mode 100644 index 0000000..ecc6032 --- /dev/null +++ b/modules/VL53L0X/src/vl53l0x_it.c @@ -0,0 +1,262 @@ +#include "vl53l0x_it.h" + +/* +//上下限距离值 单位:mm +#define Thresh_Low 60 +#define Thresh_High 150 + +//中断模式参数结构体 +typedef struct +{ + const int VL53L0X_Mode;//模式 + uint32_t ThreshLow; //下限值 + uint32_t ThreshHigh; //上限值 +}AlrmMode_t; + +AlrmMode_t AlarmModes ={ + + VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_OUT,// value < thresh_low OR value > thresh_high + Thresh_Low<<16, + Thresh_High<<16 +}; + +//中断配置初始化 +static void exti1_init(void) +{ +// GPIO_InitTypeDef GPIO_InitStructure; +// EXTI_InitTypeDef EXTI_InitStructure; +// NVIC_InitTypeDef NVIC_InitStructure; +// +// RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//使能GPIOF时钟 +// RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能SYSCFG时钟 +// +// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; +// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通输出模式 +// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz +// GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉 +// GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化 + +// SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOF, EXTI_PinSource6);//PF6 连接到中断线6 +// +// EXTI_InitStructure.EXTI_Line = EXTI_Line6;//LINE6 +// EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断事件 +// EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发 +// EXTI_InitStructure.EXTI_LineCmd = ENABLE;//使能LINE6 +// EXTI_Init(&EXTI_InitStructure);//配置 +// +// NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;//外部中断6 +// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;//抢占优先级3 +// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子优先级2 +// NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道 +// NVIC_Init(&NVIC_InitStructure); + +} + +//警报标志位 alarm_flag +//1:有警报 +//0:无 +u8 alarm_flag=0; + +//外部中断服务函数 +void EXTI9_5_IRQHandler(void) +{ + alarm_flag=1;//标志 +// EXTI_ClearITPendingBit(EXTI_Line6); //清除LINE6上的中断标志位 +} + +extern uint8_t AjustOK; +extern mode_data Mode_data[]; + +//vl53l0x中断测量模式测试 +//dev:设备I2C参数结构体 +//mode: 0:默认;1:高精度;2:长距离;3:高速 +void vl53l0x_interrupt_start(VL53L0X_Dev_t *dev,uint8_t mode) +{ +// uint8_t VhvSettings; +// uint8_t PhaseCal; +// uint32_t refSpadCount; +// uint8_t isApertureSpads; +// VL53L0X_RangingMeasurementData_t RangingMeasurementData; +// static char buf[VL53L0X_MAX_STRING_LENGTH];//测试模式字符串字符缓冲区 +// VL53L0X_Error status=VL53L0X_ERROR_NONE;//工作状态 +// u8 key; + +// exti_init();//中断初始化 +// LED0=1; +// mode_string(mode,buf);//显示当前配置的模式 +// LCD_Fill(30,170,300,300,WHITE); +// POINT_COLOR=RED; //设置字体为红色 +// LCD_ShowString(30,140+30,300,16,16,"Interrupt Mode "); +// POINT_COLOR=BLUE; //设置字体为蓝色 +// LCD_ShowString(30,140+50,200,16,16,"KEY_UP: Exit the test "); +// LCD_ShowString(30,140+70,200,16,16,"Mode: "); +// LCD_ShowString(80,140+70,200,16,16,(u8*)buf); +// sprintf((char*)buf,"Thresh Low: %d mm ",Thresh_Low); +// printf("Thresh Low: %d mm \n\r",Thresh_Low); +// LCD_ShowString(30,140+90,300,16,16,(u8*)buf); +// sprintf((char*)buf,"Thresh High: %d mm",Thresh_High); +// printf("Thresh High: %d mm \n\r",Thresh_High); +// LCD_ShowString(30,140+110,300,16,16,(u8*)buf); +// LCD_ShowString(30,140+130,300,16,16,"Now value: mm"); +// +// vl53l0x_reset(dev);//复位vl53l0x(频繁切换工作模式容易导致采集距离数据不准,需加上这一代码) +// status = VL53L0X_StaticInit(dev); +// if(status!=VL53L0X_ERROR_NONE) goto error; + +// if(AjustOK!=0)//已校准好了,写入校准值 +// { +// status= VL53L0X_SetReferenceSpads(dev,Vl53l0x_data.refSpadCount,Vl53l0x_data.isApertureSpads);//设定Spads校准值 +// if(status!=VL53L0X_ERROR_NONE) goto error; +// delay_ms(2); +// status= VL53L0X_SetRefCalibration(dev,Vl53l0x_data.VhvSettings,Vl53l0x_data.PhaseCal);//设定Ref校准值 +// if(status!=VL53L0X_ERROR_NONE) goto error; +// delay_ms(2); +// status=VL53L0X_SetOffsetCalibrationDataMicroMeter(dev,Vl53l0x_data.OffsetMicroMeter);//设定偏移校准值 +// if(status!=VL53L0X_ERROR_NONE) goto error; +// delay_ms(2); +// status=VL53L0X_SetXTalkCompensationRateMegaCps(dev,Vl53l0x_data.XTalkCompensationRateMegaCps);//设定串扰校准值 +// if(status!=VL53L0X_ERROR_NONE) goto error; +// }else +// { +// status = VL53L0X_PerformRefCalibration(dev, &VhvSettings, &PhaseCal);//Ref参考校准 +// if(status!=VL53L0X_ERROR_NONE) goto error; +// delay_ms(2); +// status = VL53L0X_PerformRefSpadManagement(dev, &refSpadCount, &isApertureSpads);//执行参考SPAD管理 +// if(status!=VL53L0X_ERROR_NONE) goto error; +// delay_ms(2); +// } +// status = VL53L0X_SetDeviceMode(dev,VL53L0X_DEVICEMODE_CONTINUOUS_RANGING);//使能连续测量模式 +// if(status!=VL53L0X_ERROR_NONE) goto error; +// delay_ms(2); +// status = VL53L0X_SetInterMeasurementPeriodMilliSeconds(dev,Mode_data[mode].timingBudget);//设置内部周期测量时间 +// if(status!=VL53L0X_ERROR_NONE) goto error; +// delay_ms(2); +// status = VL53L0X_SetLimitCheckEnable(dev,VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE,1);//使能SIGMA范围检查 +// if(status!=VL53L0X_ERROR_NONE) goto error; +// delay_ms(2); +// status = VL53L0X_SetLimitCheckEnable(dev,VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE,1);//使能信号速率范围检查 +// if(status!=VL53L0X_ERROR_NONE) goto error; +// delay_ms(2); +// status = VL53L0X_SetLimitCheckValue(dev,VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE,Mode_data[mode].sigmaLimit);//设定SIGMA范围 +// if(status!=VL53L0X_ERROR_NONE) goto error; +// delay_ms(2); +// status = VL53L0X_SetLimitCheckValue(dev,VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE,Mode_data[mode].signalLimit);//设定信号速率范围范围 +// if(status!=VL53L0X_ERROR_NONE) goto error; +// delay_ms(2); +// status = VL53L0X_SetMeasurementTimingBudgetMicroSeconds(dev,Mode_data[mode].timingBudget);//设定完整测距最长时间 +// if(status!=VL53L0X_ERROR_NONE) goto error; +// delay_ms(2); +// status = VL53L0X_SetVcselPulsePeriod(dev, VL53L0X_VCSEL_PERIOD_PRE_RANGE, Mode_data[mode].preRangeVcselPeriod);//设定VCSEL脉冲周期 +// if(status!=VL53L0X_ERROR_NONE) goto error; +// delay_ms(2); +// status = VL53L0X_SetVcselPulsePeriod(dev, VL53L0X_VCSEL_PERIOD_FINAL_RANGE, Mode_data[mode].finalRangeVcselPeriod);//设定VCSEL脉冲周期范围 +// if(status!=VL53L0X_ERROR_NONE) goto error; +// delay_ms(2); +// status = VL53L0X_StopMeasurement(dev);//停止测量 +// if(status!=VL53L0X_ERROR_NONE) goto error; +// delay_ms(2); +// status = VL53L0X_SetInterruptThresholds(dev,VL53L0X_DEVICEMODE_CONTINUOUS_RANGING,AlarmModes.ThreshLow, AlarmModes.ThreshHigh);//设定触发中断上、下限值 +// if(status!=VL53L0X_ERROR_NONE) goto error; +// delay_ms(2); +// status = VL53L0X_SetGpioConfig(dev,0,VL53L0X_DEVICEMODE_CONTINUOUS_RANGING,AlarmModes.VL53L0X_Mode,VL53L0X_INTERRUPTPOLARITY_LOW);//设定触发中断模式 下降沿 +// if(status!=VL53L0X_ERROR_NONE) goto error; +// delay_ms(2); +// status = VL53L0X_ClearInterruptMask(dev,0);//清除VL53L0X中断标志位 +// +// error://错误信息 +// if(status!=VL53L0X_ERROR_NONE) +// { +// print_pal_error(status); +// return ; +// } + +// alarm_flag = 0; +// VL53L0X_StartMeasurement(dev);//启动测量 +// while(1) +// { +// key = KEY_Scan(0); +// if(key==WKUP_PRES) +// { +// VL53L0X_ClearInterruptMask(dev,0);//清除VL53L0X中断标志位 +// status = VL53L0X_StopMeasurement(dev); //停止测量 +// LED1=1; +// break;//返回上一菜单 +// } +// if(alarm_flag==1)//触发中断 +// { +// alarm_flag=0; +// VL53L0X_GetRangingMeasurementData(dev,&RangingMeasurementData);//获取测量距离,并且显示距离 +// printf("d: %3d mm\r\n",RangingMeasurementData.RangeMilliMeter); +// LCD_ShowxNum(110,140+130,RangingMeasurementData.RangeMilliMeter,4,16,0); +// delay_ms(70); +// VL53L0X_ClearInterruptMask(dev,0);//清除VL53L0X中断标志位 +// +// } +// delay_ms(30); +// LED1=!LED1; + +// } + +} + +//vl53l0x中断测量模式UI +void interrupt_ui(void) +{ +// LCD_Fill(30,140+20,300,300,WHITE); +// POINT_COLOR=RED; //设置字体为红色 +// LCD_ShowString(30,140+30,300,16,16,"Interrupt Mode "); +// LCD_ShowString(30,140+55,300,16,16,"KEY1: Switch working mode "); +// POINT_COLOR=BLUE; //设置字体为蓝色 +// LCD_ShowString(30,140+75,300,16,16, "KEY_UP: Return menu "); +// LCD_ShowString(30,140+95,300,16,16, "KEY0: Default "); +// printf("interrupt_test \n\r"); +// printf("WK_UP: Return menu \n\r"); +// printf("KEY1 : Switch working mode \n\r"); +// printf("KEY0 : START! \n\r"); +} + +//vl53l0x中断测量模式测试 +//dev:设备I2C参数结构体 +void vl53l0x_interrupt_test(VL53L0X_Dev_t *dev) +{ +// u8 key=0; +// u8 i=0; +// u8 mode=0; +// LED1=1; +// interrupt_ui();//显示中断测量模式UI +// +// while(1) +// { +// key = KEY_Scan(0); +// +// if(key==WKUP_PRES) break;//返回主菜单 +// +// else if(key==KEY1_PRES)//选择工作模式 +// { +// mode++; +// if(mode==4) mode=0; +// +// switch(mode) +// { +// case Default_Mode: LCD_ShowString(95,140+95,300,16,16, "Default "); printf("Default \n\r"); break;//默认 +// case HIGH_ACCURACY: LCD_ShowString(95,140+95,300,16,16, "High Accuracy "); printf("High Accuracy \n\r"); break;//高精度 +// case LONG_RANGE: LCD_ShowString(95,140+95,300,16,16, "Long Range "); printf("Long Range \n\r"); break;//长距离 +// case HIGH_SPEED: LCD_ShowString(95,140+95,300,16,16, "High Speed "); printf("High Speed \n\r"); break;//高速 +// } +// } +// else if(key==KEY0_PRES)//启动测量 +// { +// vl53l0x_interrupt_start(dev,mode); +// interrupt_ui(); +// mode=0; +// } +// i++; +// if(i==5) +// { +// i=0; +// LED0=!LED0; +// } +// delay_ms(50); +// } + +}*/ diff --git a/modules/VL53L0X/src/vl53l0x_platform.c b/modules/VL53L0X/src/vl53l0x_platform.c new file mode 100644 index 0000000..fefd91d --- /dev/null +++ b/modules/VL53L0X/src/vl53l0x_platform.c @@ -0,0 +1,271 @@ +#include "vl53l0x_platform.h" + +//VL53L0X连续写数据 +//Dev:设备I2C参数结构体 +//index:偏移地址 +//pdata:数据指针 +//count:长度 +//返回值: 0:成功 +// 其他:错误 +VL53L0X_Error VL53L0X_WriteMulti(VL53L0X_DEV Dev, uint8_t index, uint8_t *pdata,uint32_t count) +{ + + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + + int32_t status_int = 0; + + uint8_t deviceAddress; + + if(count >=VL53L0X_MAX_I2C_XFER_SIZE) + { + Status = VL53L0X_ERROR_INVALID_PARAMS; + } + + deviceAddress = Dev->I2cDevAddr; + + status_int = VL53L0X_write_multi(deviceAddress, index, pdata, count); + + if(status_int !=0) + Status = VL53L0X_ERROR_CONTROL_INTERFACE; + + return Status; + +} + +//VL53L0X连续读数据 +//Dev:设备I2C参数结构体 +//index:偏移地址 +//pdata:数据指针 +//count:长度 +//返回值: 0:成功 +// 其他:错误 +VL53L0X_Error VL53L0X_ReadMulti(VL53L0X_DEV Dev, uint8_t index, uint8_t *pdata,uint32_t count) +{ + + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + + int32_t status_int; + + uint8_t deviceAddress; + + if(count >=VL53L0X_MAX_I2C_XFER_SIZE) + { + Status = VL53L0X_ERROR_INVALID_PARAMS; + } + + deviceAddress = Dev->I2cDevAddr; + + status_int = VL53L0X_read_multi(deviceAddress, index, pdata, count); + + if(status_int!=0) + Status = VL53L0X_ERROR_CONTROL_INTERFACE; + + return Status; + +} + +//VL53L0X 写单字节寄存器 +//Dev:设备I2C参数结构体 +//index:偏移地址 +//pdata:数据指针 +//count:长度 +//返回值: 0:成功 +// 其他:失败 +VL53L0X_Error VL53L0X_WrByte(VL53L0X_DEV Dev, uint8_t index, uint8_t data) +{ + + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + int32_t status_int; + uint8_t deviceAddress; + + deviceAddress = Dev->I2cDevAddr; + + status_int = VL53L0X_write_byte(deviceAddress,index,data); + + if(status_int!=0) + Status = VL53L0X_ERROR_CONTROL_INTERFACE; + + return Status; + +} + +//VL53L0X 写字(2字节)寄存器 +//Dev:设备I2C参数结构体 +//index:偏移地址 +//pdata:数据指针 +//count:长度 +//返回值: 0:成功 +// 其他:失败 +VL53L0X_Error VL53L0X_WrWord(VL53L0X_DEV Dev, uint8_t index, uint16_t data) +{ + + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + int32_t status_int; + uint8_t deviceAddress; + + deviceAddress = Dev->I2cDevAddr; + + status_int = VL53L0X_write_word(deviceAddress,index,data); + + if(status_int!=0) + Status = VL53L0X_ERROR_CONTROL_INTERFACE; + + return Status; + +} + +//VL53L0X 写双字(4字节)寄存器 +//Dev:设备I2C参数结构体 +//index:偏移地址 +//pdata:数据指针 +//count:长度 +//返回值: 0:成功 +// 其他:失败 +VL53L0X_Error VL53L0X_WrDWord(VL53L0X_DEV Dev, uint8_t index, uint32_t data) +{ + + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + int32_t status_int; + uint8_t deviceAddress; + + deviceAddress = Dev->I2cDevAddr; + + status_int = VL53L0X_write_dword(deviceAddress, index, data); + + if (status_int != 0) + Status = VL53L0X_ERROR_CONTROL_INTERFACE; + + return Status; + +} + +//VL53L0X 威胁安全更新(读/修改/写)单字节寄存器 +//Dev:设备I2C参数结构体 +//index:偏移地址 +//AndData:8位与数据 +//OrData:8位或数据 +//返回值: 0:成功 +// 其他:错误 +VL53L0X_Error VL53L0X_UpdateByte(VL53L0X_DEV Dev, uint8_t index, uint8_t AndData, uint8_t OrData) +{ + + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + int32_t status_int; + uint8_t deviceAddress; + uint8_t data; + + deviceAddress = Dev->I2cDevAddr; + + status_int = VL53L0X_read_byte(deviceAddress,index,&data); + + if(status_int!=0) + Status = VL53L0X_ERROR_CONTROL_INTERFACE; + + if(Status == VL53L0X_ERROR_NONE) + { + data = (data & AndData) | OrData; + status_int = VL53L0X_write_byte(deviceAddress, index,data); + + + if(status_int !=0) + Status = VL53L0X_ERROR_CONTROL_INTERFACE; + + } + + return Status; + +} + +//VL53L0X 读单字节寄存器 +//Dev:设备I2C参数结构体 +//index:偏移地址 +//pdata:数据指针 +//count:长度 +//返回值: 0:成功 +// 其他:错误 +VL53L0X_Error VL53L0X_RdByte(VL53L0X_DEV Dev, uint8_t index, uint8_t *data) +{ + + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + int32_t status_int; + uint8_t deviceAddress; + + deviceAddress = Dev->I2cDevAddr; + + status_int = VL53L0X_read_byte(deviceAddress, index, data); + + if(status_int !=0) + Status = VL53L0X_ERROR_CONTROL_INTERFACE; + + return Status; + +} + +//VL53L0X 读字(2字节)寄存器 +//Dev:设备I2C参数结构体 +//index:偏移地址 +//pdata:数据指针 +//count:长度 +//返回值: 0:成功 +// 其他:错误 +VL53L0X_Error VL53L0X_RdWord(VL53L0X_DEV Dev, uint8_t index, uint16_t *data) +{ + + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + int32_t status_int; + uint8_t deviceAddress; + + deviceAddress = Dev->I2cDevAddr; + + status_int = VL53L0X_read_word(deviceAddress, index, data); + + if(status_int !=0) + Status = VL53L0X_ERROR_CONTROL_INTERFACE; + + return Status; + +} + +//VL53L0X 读双字(4字节)寄存器 +//Dev:设备I2C参数结构体 +//index:偏移地址 +//pdata:数据指针 +//count:长度 +//返回值: 0:成功 +// 其他:错误 +VL53L0X_Error VL53L0X_RdDWord(VL53L0X_DEV Dev, uint8_t index, uint32_t *data) +{ + + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + int32_t status_int; + uint8_t deviceAddress; + + deviceAddress = Dev->I2cDevAddr; + + status_int = VL53L0X_read_dword(deviceAddress, index, data); + + if (status_int != 0) + Status = VL53L0X_ERROR_CONTROL_INTERFACE; + + return Status; +} + +//VL53L0X 底层延时函数 +//Dev:设备I2C参数结构体 +//返回值: 0:成功 +// 其他:错误 +#define VL53L0X_POLLINGDELAY_LOOPNB 250 +VL53L0X_Error VL53L0X_PollingDelay(VL53L0X_DEV Dev) +{ + + VL53L0X_Error status = VL53L0X_ERROR_NONE; + volatile uint32_t i; + + for(i=0;i zmx_=kB8dnpq6*G)p4i$(6%O^B9B|Hl^v-_dI;|$5Gdm?};!2Y`CdG}GB0LbZ8fEB_ z**F+|e2w}#y6tVtHKNO2^M2&^5lkJC>yegM7>Mb!qQQq<4bHjzP;8qQNgXZ6GY~STaAHjo4|U;4F%3QL>^5n2R_xR2PE|1|Ygj zzLRkpx656pj)E5eCih$u?tEYoax#g zP2THKb-c>O^7=HkcHVV2Wxge1$6(fVe3+6ZFOtK%VgdBv|>|A!p9Q#sIhhu>?0+S`gYev0cqJ{;>BQV4S zA=7_c28?paVBLkfV=WDtp&kY$^4dSkpR3AiM}>8Xt)Vlw2l&%4napiKiS=-F&Mgz$ zvv>0`oSUwd-I(I*Il7wjH`N(-J|}4iA~6c$M=mQuy<4L{&_=BV^HJm)W=H2e-5^UD9*vzN<;07KY}`$BlE;?yQGj8M6=~ zgvW>|x$xuq1J|or3Y6rPSA=w!|Dzy4o0f03i9lmZ6h}6P?cCZwgPz=(M00b{K21b z(x5CIR$#C!gRIp;>mM;jC$83C5O82)Dk_2D5TGnw4q2WBYmHH|5z?tGU?EGswY+{e zFMRSlkFxwx4P7uyLQ_c-#Jf~LxIJZId-JvIZ-^Vj&_+_+xcCYw<&H&>Xnosm+V*FTdUC| zr-+;pp)q8CXl?7d#(B!VGPiTiphunCnh7YTCFawd@%C z#uIL~Loi`xG7j&Jl6A2EdQ{`f`~gGl%vOaan#~aG}{ZY%USLn=D1&! zC1XVGJM0T>QsHCFaAQEE1sTB6RMQxV4NWUKbj|zF(3nXwr3t4xQzGUA1N}lw0S2Q| zhzC~v#gGpS@{1t_7=p?^9$5VsWPTvv7i3BxD3wHfpfwfO#$-rH>XDi@_xDfgL1#@w z)J!Wd8l*%(IVz<>Kp<+lQ~(efrbIvmDu+Tq5Nf-WAOH7?A=#A5U^1u1y zmEzFT^qjPPpr+@@i0_E6l2bEf;Q`n9?LjJ3(#9 zv9I@wIU0^1M(tuCGQ`L|oc#{6u4I^WDvm5)TTHF}x_Z_8G`_Yqe7kjdHvH0aAZ`!wXp(IK8sdKT2*T`Wu}dR{yjzwfRsVtmwLd#&*|zA$f$QnaY>saGKBi*vsh z7*%t?2?}JYy^miYRte4V_{zpeHo9P?sgxtC#I>F9#Zfa?2povEw1p`SuoV6IMHS6F z&I0ltuo6~)ccoIcHmwk?E}(+Ki8c`gN)PFe;gMnnmS29ijj!)nk2@>nJ?w43Fd1@l z9sBGx9u2<)HCkpn@1HtM$zL-;GfxU6uAhuS#K^2%5Fu&$hX5ChcFe2I4K(jUH(MW- z5s;2uDl9Y3KQ8k=W=$Yi4$KNZfO@E+GKGkPP6*iq4H`I{!KaBf;o>zdOx(Xo$a{*_ zzYRncJO$M5NyorWwSY!RD0(>yZ%Dd}unpR}`2#uP^~EpL0E7`nEcQxyt)*=*2UQ@( zf6N*##G-a9|w!uvUstV5uc; z>^|m#wzkO^sYR`Z?)sDy-LP41ca8%tXV=S_fe+w=oZ`U`^sM-FsjW-{$~ER03GLmO zn`#+ZnEL8$unrK7pjmGx6}mWLqi%8lV9K6xOBfXEE~DbIHcTqyhzi^8U#-Oo1mpEuBS-N7YQyWb+Jb0a2I^W+OEtwR-Gx5#f;`2srhdj>lMULpQaCEm4 z+~z=N_St*aWp+{EXIx#09Q^R&tTXvV17sgF-ZFeyo_SQX6l$sbM)YxVKKp)PxU{xu z{5~-w$NKQ`J@h1wK^iuMdCI=wCFp5@)yNzhd^|n-Hsvb9UzJ9;mh`*9`CZKm+3s5M z^Xi%OdNZkgAN(Z~CivQ1ziYxA7`ZuU^~yMxYPI~ec$xbLG-Hl1pS=hS`-;M82t2*Ir#EMYcsiBT?o zayS{)Q>HdmiOt&9U#f<(OY5Tz>`eA{p}meW-i$J}g-dw2ZnGy3KKR$^ihT&tfu6le zj4)Ym`=Sqx%9USE)t+4sT|TvWHa?f|A*WzM58gRZo3m)K~jM+U9=|AvNQR zV1rDEs41N(hm0i8;+AK#y@5*-+PWY{Yb_6ZdA~`_Dz)5Zuh%IyJ}$UtmK2SQT1qN7 z*R?7$O%FQV_sl=^RIU!4Up`+;-HLb4r;bve2I&4qm&ykD=6T7$I52_IUmM}X2 z4;*Bwg!`9#7^0(4E~;>#;==?J2h4GxHJq{6l>#@kZRdz5%JdT_8wZQh|9SNp3di6a z2T9Gz%<^U*>NVBG=md?p{q@*r$W&vG2s=TF0`*`dEiGs;&K!m5Kp1dBCXs#|}dLg`&$YggDH-?*{%~LjV9sQT^{M z4-K9E_wo<`aQIJ4(*K%E|4r*+;OP7x@-qFO@mIEUl%50*001KZ0JQ&gUjEDAA1A$k zbD}faQooQ#(M0`$h58xNk(H5-w{Re!nhI+TWYNywP+PG}TG(EgSk5rzBB`hIi%wRp zrmVZCEK#A1<4Ok7`bBd=E;YQwYTKxZRy1(g<5o&vPBUTJcNt8~`;xuGJG+Bhab78< z0B7nowC8SK=w{CTM#aqZ<)ECYGu{2$2Y0R0&x=HfCg!vIp3cLJ6d!>X7DagkHY!Lt zCnu+cZ{;QTSqsB0C0kBj+ODxptf^>Vy0=45sc0aen1{@$f~Lf^@F1gWYPNV!!`apD zYx!JZ8>5ix2o2P4mq*kA$gWJCG(S1)KopFtv1M&z<`wgEO(RzeQf@2#*RTT#KJKbU zGW(&kp@p^YLtIP8-N0XgTX06ah|vS5x-eIEh}3H^hy?@;{JOrWTG4IscQNG!Sxy$- zl;j9QRkHW7LzhN8M2+^?eh=cFT~tC!9&p85$L{x%6cl}b^QE(MKK>eRC#@GW&ieFT z3#Qywjk_KEPz1_ZUPF+&sRugXfEiF&%c)6iWJuYUO`IoehPYZ^!eg0eVIwUaFp-s;07s#BT*oa3FmCT)7nqaKu<8cHH;>D?sonK2 z#7=~LWTKjtGp$TN4yt0dO)!Xh*y40R3EvL)i(O5 zrhZtj00|Oc88OIIloHUt1r!gy&U7}T+L_0WjpT_F{$AfMuDJ)0R*!Z%k|tnO8EJqx zvIr{P&Fx#kmJ?*9g*IUYmi+buLjHj%M*OyNBIl zDwm-wj+z{|Lc=gi3uG@#%iclZAOEZ!;|^zVAJDXA5J@4QlsmW*!6DVzT+g3g;Ak;Nw>V--^;_T965Zp zw|2QlazytTb!Wv4WmE{53n0-L5oLMeHnW#~?GomEw%@XEGXr${S7suq&*D20i}M2$ zZpA)GV)&znL2|tlCzs;}zxK(a_K0n|7Np+saSk|2_DZ(qzcj==gAHTRSsT_0deXqKmWUB~0xNwo5|q7dd#u?~Wc+j$cs?;XdQ)_0qIpX}9G48fv_y?R z(Cs8>9`S5Lykj0UVpQoh&Ir2la&T|bgeTV;`fGTC)xUtX(yMufe&uWe7*5Pym|&_V z&Kx+4xzQ7Ktmy>~w}zciQ=KHn9-xkTWcsC`5Pv%wcI!p{;inp1$mW90snI2_D9{#Oq%}>dnKooABtvLxN1Y%&+#KlHM#QOO7>*U z(ae$N!O66kZVZ)*vx!|6}sx<@QNv`au3id&?|cqt|eI)ee2 zs@cCW&W+9-YM1<~qyias7*3Wol`d*DE!;xM&u;fYY_LUm&knB6y3=22Kwc27qNad0 zhEUjMbk64%7@|u?wt3&XEgFW8H9R$OrGMAm18LkvZ@xv-Iak{VS=dyScT{cs_1_KY2c7eScc<8a`{ZGI2E>hb+JgWEkU$rIjNivJ@cJs+CuslP#un(VeWrZb z>#S^!vK7AQW9F|lzT%UH(Mn6}wx5$POS=<A;Q_{m74!z34 zm?yK_$y8i(MTK}_UqFFJD^g2D2(x~Y{l$4 z)Nb34wJC7*<>2;a4U02U4}{m9NJ;tqKWy7%{gZBOYaz)i|IpR%f9UGJn{MVdiW~Ba z3YdO+jXwne7^G`lY{)3yz|jNkn1}b?O3TWg`{uGA$Pq<@n_!E!3T*+=OkDcb zBdxLy{#d4!8HV#Sz0-%a*m~=4lXkNet?PN( z7{_m2>Ua-!e?RS=w=`xqT%W5YYJ6}4T&Po|LXsj*28B3?=oMR)9D3bWptl0AYnJ)g zU^?gRY18s+7rSZfTJ#8f9k;F1s(O-I)UKatRV*Vg`xM4B)YL|j%jb)$38}UCTRg5! z&=rsq);OD=ovC}AUgDZ-aB^O3$9QXQ(p-D$##(BoOAE>>SoK=3*4s8y%r5OtN6*%_ zMCnJIzS({`E)W~<-xqR;&4=NJ{@KD@si&l7Pb*^zrBW3o znV(l6MUUJp6Y;*ED2h<<&ddfYE>G7Cjf^yo2-ozxGeU$yMgRl%k65!{;OAq8CC-$nS} z@TKM+rT!1{{Cgw+r}zK8r~hvNr6$A5EW@Dj9~cVeAAqxWeDjn1hoNi`0RZOzXODlw zsQ=|hXVjwpWru8r`-7GEjbMfWhk1;r&{-NxCeffksc8zMYkmUPy7_ zgk(y_nz2L&0}jI`vG&K@fn{{w&yP`~CeL=?0%>e?`gdZ|%VhWcbc^!i!bHjN1pG$a9|$KL=nx#5MwAu%4HsWAr_V5e zD-DOMw(6PvC8U?1_TmbI-`2)m|5Ki0PX)V`c!?lZ-^z!z#$`*$B`Xnyr0RH`*Fh27 zn9$?J_+xt(9cWs_^Je$lh^=&a>R*7iS7PhJ#61N2p2CyJfo#L7*aNEyI{-*od_fJN zG%dE#d|s|Q0y`(VTD&8eO0o~cZb(WbRBM_oExqOo3o3uqQ9wm`t!Jr|GCwG3ZbET@ zmXu^Orx>;^-YR}%R+R|K8cgvY?=~-s>u;vVg%cCVN|sr#8q~_c9~~$^+}72r+kNub z(vXBmN)Cdjn|5HKUOJD*bP2!@g@9c;frq$%o~rYZhU7$GA<5)^P~Fq=Vs3-=yE&P9 zD0MV-z1q%ccu~lPl9VGW)aDpzyofXXp-UMh*qS}ro<(h>x3!a_t45tl!>FU{qoF4} z%2>f+W*COG!FAKWC5?=)g+D78-bT`75)kNc77v3Gz`g!E>9Ti*)Px# z8pc;QzqSpyar6TD0Vvt~_XM%?qD%r9v zTP!apW+Y1C(^at2QAenhPn_T@5)Il@RYwxLMM4ZW01IwOL}#eUHwS53HOz2agF!k!NU(zFJjGebv(|nU`?Dt8I^(rP&O}e{%Lg9I&P$X zJEK1AZ5(+WsglB~rL=;huv#JwnXiy(C7ke(MI%(nn7@RnZ}F9+Mb}`7-2Xn*ml|!W z*+&Q&OOAYuP$K0Zh9!ejW3q4lWKf7yrs}h>Ao3zo@9fF=^1Yh>+YuuR(vsqrN`KPG zAl&YoHKI|a9tMRShsR*qufLTTKs;O(>su7dwJ`0(_PFm#b^wjw~(CJ6FNlz;HAgES? z#(9vH6x(0saFKlU%H{g0J;pWE1WQ7pE$;=5`G~a;C>In`M4yz-MG^$INNKKx3{B{X zdJiV8Hn$fd>2r_rUh<8~+r(}VhTSFvYp2r(0%ZEtXE%k|p8&M4FGE1@ccO?WfFIH{ z_F~PiF(aP;NZn+YdotiBf2;_J@ztj%KuW=F>4GUSJ73ST*0QuNQE5H2nG#N+xSe33 zn4of4xS^n+m@tVj{YvI2Xyhh`ek*W#OM)_DAPGV^9Ahdv8tvC_~bPwr*bpgFst*Xmka(#U>SgoAeyL!b;Lbs@yc@ zQ8Xpk{6ji&*&lkr(AvCCyF;~K+YxP9r=@Oc7rdJ}-p#Zzmk*2X{m0K{vU3`uE6Kn) z#%FwOco%gW=IbB!k^1NK`2SxrnY$$Y$Riuzj`^j={Oo0X2hMnSV~rkC zfGVLwCrwz_Y{^{%)x~nVzTghEd}B`4(CUx}8WKK>X6VAuz|}n2%$RCd)o5u_x8*{> zV^WUMk9|D&_S`&p^g25j1cVp}EDF{w?X$|w4SDKdsBr+XMQI!dBi7X;I*)o(g|L&G zlaD^hy5y=y+`&ReDK*P-0*A1rAP%)n9V$p0C>fKsiYApEMJjzMCbJ1z(lse_tkIRk zu^+cd;m0xiDCqv$W|h;J4mE!M?t^&v&|931T)Q59Y+1vjp$0M!<#=kz1vw>9E)rHsGzaJl4cJCuc_FnzB?yMZ2u$mcC2q|Alt*L1X)tc|CF;7c zMzlqnU=1&q9-vVmrGU$)^oyTek1Bg~Ykj62WD^o@ltOB9=-NmlkjwS30)#`gCcq9b z&kYQ^aon08m8VTGSc-HpFgVd?qms@rhZf_9F*Aih!UZE`R{y5$$K^~f)ck$f!h)-5 zj&{SOuM=!g{eBKD#e{m4p)weZS8mYLeaq@pUsry>R=q$G#KH;}%FayZQF+m_Mou>9 z@?eoCSN)UtWWLWqM6-O*w9{(ZJosET5X6KXaauo#TJJ5b~dm=>L007PdzJfj$v4{-_bw z63c`9^En38KmeZqzL~2vE3-9&yPko)1)ceokCoE_N8;{DM)(^-dnSUJ*AkrMD! zIT23oMy|ljtHby&vta=W=Ux(XP~P6act(dJZYKhit9~oHk>nx6icvyduyUBMhdnR1 zw}BJ?Z&BLk%Tbu)u*bT*VSw?`>}CgdiCb$r9v6-MU<%IIOf*=*&*99jba%bcYaEDv zs`Ss=6aL!Y7gIXd$nwR>h#jEjBwQt=hZE$i3jQEhNz@?*L!5dM|L35e;5bkRK=8@f z^KWlGR0=Hb|b@SUl($grEBHNXyj z7Jh^E_VxKupc=idiOuy9WS>$FsAAiD#oH@W`+#WBEcXnsi zR~hte;KXQp&4uVeBqcoUxiSS4Y&Vb1J;3n^^k8}$_UPG(_1vYyiT~;BJ<|rj@5ZeM zMJ(a8rL&$s+I21OHjV&5abPK`?R2zJ%-OJ7Pg@Fc`lq-W_rSWYW4P3B%|3#b+Q{>? zE(bGVZ&fjFYuUOi;>gubT6gdpvNq|xk4AQIeQ_&DXyJ>^*ad?)JN{^jb6P!+0;O!7l z1So?G$9u4T0(zhaL7nIA2jnklf z=FuJ_{cP4zaCE=BF}CifRPfk9u=Kk+bR{_{->B8eYMABgZO!m*b9iEwRu24Z=NxK5 z_eMb1XSZm`XA$>{=}h+4&ePBR$@f~_%N5SW_c=a(e_ibfDuF(MU8hWcWS@uD_tETB z6a93GT|7 zdYzDI#}t{&tMmv3Fv6koSNK1}emki}cc<=h=JZbCzwh;w+ZDgR8V7!}<-a+l_VP0I zWb57JFe4gnXYl3BP_kPOvkatMiEsQy|K!T$P!3|n zoBlq5D*dQ7(hqxvMnnLWDD|=R#=v8}!=ZAcI^KjzC?+DT70X=IaXcN>C1&C(lHxEP?nDpLO%Z>OkNv*=*vV)wX`?d8 zesQOwYOG+^3Ew=LT|Pi zks;8wMDFb29&Q73OzY?P$&ta{S2-wgF%$UoW zV%<{}y@{x0ZPbmNTQiW;VTAoD3mTj)ft8&=4hWGq-;3bc6NbzYXTWA4=42LWHgz!t z%e_jTSh7Bz4OcLVZSq(jZzqIct*V=>V>dw!ZOWa+9hFQ#7NgT6qfUnu+HLu&cU~QT z#>XS498(8m_7t6b-oaCNfmu!-P7KcbQmCzkCldsQPrPl(RfNO zJ^Wkwn&M{h%6aPsY){2c^)JQHJgj{bn?(2dV~+Q1d{t?w=CyEJWsRmpy78H4pN- zyxA=!wX!?;$GsmWO~r}lHq(-d7Pv6IIUhJ6H4aqQFCIE3iw=fnU#$)=SNF2q1Ad}$ z6v`#Zr2j^2O9cY}jqG0T12x1j>GqSI*WTBNCTTNCO(K(guXn^YkUwPhtC{{Bdiq3& zIoO4;^MmrK%$u&#L2$D$0#bBM<{0wsw%KtX(5xzv>u|_NS}%g_oF0v7l2qEzSAd}L zh_`qWSwtlb;&;ujj;6Hh=)Mrw-#bg^q+zZm+Lla-G&)~w3J#=ME4Cz&={9q}u?ZL&yhXJGE#uArw;*$P% zo`~d|gIjI2fxacn zSZ|C0^+ZQ(zqtwJ#mBr*9Ilj!ZmbxLEl^yW2laYR-Ni%aX^=hpu4Ih&WEM zzTf0u?zlRWv0Jbclb8gyYNAUEaEdoljINnqx0$BQ8&1X%aA^3EoN{T9zLE8wr4^Cy zP9VJAIiVo)?b*QHRyHfWT{>WvVRBc~lz&MvM5-Kpuoy<~q-QVJBda=kHpa$_N{7kl zbmkg`*?tbLg!R8rgz>K1KEXd&L5k@aE=wYH4JUIQEwU5Nrg5zze*a9pt*v3XWgZ(Q zh8pa~g||caCa28hRx=(&>OrfjJ!%0LJQ0eJXvnfH1Dg z?rQM;32_tzLKO!?`y3fSCAbaAV>ZWe%eFe-}a#ChE0o6XtW~xRo(5}9k zh549C3{Px<-H(l8dOk?jt8z@?3oDG@6=&`#b}lE-5q*K{<$6~xntH0{pDs5U*UL{* zSkw*(&$y|9k}z$!@m?)Wph1+vEkcTO$4EeRDj2KH5yxR6yEBv-gRtlafvqFRr5qQw zMI={jx9^MRxBqTJ4F8??_q{>yTQxC9D`hNllqPLhN>{}K+{&bCp;pZ7#lF8bLT z9lFwSQG9{rNwG>og6St}s_;s5HbXo(9u$(N=nj&&A#o;}F*DW`8MZ#UM0^ItWbdB+ z)`|Pjva{KDI8_?>dH2seWYAuaXo)w9O?1NE1F>Fq^IN$7fM|%>6zT&hak;xI_$4!Y zkUzIP!699>2f6zQfZXpd`fzey1fgSFf30xDNz4&lpFq!~&K$Pob|6)uFoLOeIvUf7 ztjt3zOXBZdZ_!L|d0e_8Fqoex5zdVo4?+l_?4e*exxE2a{4|bpnoWOBe7U}{&*01( zqhNfJfk^(ldDjsI{y8UBXbp=6e#agDWpzcTetn`luOX0g$=guwI)Ck`0NsOm${Fr& z{H!lUGqHooZ7Khs}h&*uJR{A#hXazjq12V#xLt{DUC(P5oH*Mr~?Zv#M^$8tP6 zb|X0+kBPU389$c|VHo;g zt%~j1=(9j$NKFD;3YW_gViOOpx-&;KAi$5p!YE`22@fxzZbZL1wT6=Ub>csYv*{3V zDu)Xn%Ot%P4v2oPZw~+xQn!y|1RKl2y;^uy`m(x9?RcRPQbnJfiz*#tcofCL{n9dY zVP`R8z)TNGFV!YoT>L(-gIg`Q@nN8CWg~$=+=!Ge5HU%g$*_IqF=k{2HMop?ihIHS zDnpA!<+G?pB_NH4vIh*LV4sl?1TY|svNPS>u0SfoKz~Ua2`u7dvL6n`v-E49hnzX5 z_00YIPWt6axTQ{`IoSv}z*6F{7Z{mNRKnbFIQJnRm4ax>PB$bX=njbzH?--SA3U2{ z0tA*kozO{U};$oSTMAEC6Rom2|2JGFm4HGm5Huy<2zGKnow%hpn_^~Z=1{9@-qi8Ali^{Ar(8(} zv#*#)3O)xxLXfUDX#sDW-dn-!2wMm z3I>h4%_9j|9w#^hOeN6m%@nPmR@dTsEEFC8xGG{aMigpqcDkuFrfYNk5Ehz9xchRJ zBtQfh&vUogxbUc*4s5P_c)r?nxm9u0lTkqUwvO!xhPs365n==+lgOqi1U5An(GTy= zoTetOd-H6;h%pP1W1zRsgLpY`QZNn;yVbag<}ch-W(o-#aPJiLh+w4|$7I@b9D5l*lmbGv$3ZRfAsVA&N<`kH(tF`*^)~!Y7BoIVgq2 z`EO-&UO)V5V$^Y45i=qyb8UOsoKVf>U{>3p3_R-j0rv#7*on{yAX=T@^X|m{Y2e6* z8@*D)vbcdXyJtTz_AMy`O3L(w>IRAOeH#(6qM#HA+r2mai|S=8EYF6~6Bh5W~pK``Z30=WP$R!vP)$ z6kXnRb?4s3%ZEzMTu08v+)QE3g{2q2x**qIkOQ^&+jSaK-@ou>KljrNmpyT1UQZT} zFf@^ZI{AKK_-^gmTyXe1h6)8<#)Y83&e|dtHN|6COf~ks$mIaylI82zBe5^BOk>8 z*8>P!Or8~7&bS^qF|%&5Tuq}T;=Bc%RWSSl7l(>&5=8y1+|Og$Qlvo$`(_}t4SdR2 zyeZ};N7qlY z(RQKp{=V}JqnsqAOAnUKSQIIiEDNMsMEX+J>mR$aTNRkcxe;Czcfsahf`y1`czDds zeKKp3=h!6u=j)#MWmo_|YM5Yu^K{4ZZi@*kCFBJ|L=fo=Ft^4YhIO2Ac!FzLS92k2 z;y{}Y%W~RrQodAflj@%8Ijv0t0}b$-7M*%z#IdtaOG-YUjav=l^6}NTy(#=!#=Ph$ zH37v+e8qimb7%rzxDV~9v7OG>JX&KGD%je}`II>fY*iiX*TsrpVKPj_=afsZ-{pXj2a%|-Rw}uJVWGo07b?&Z3Q5OW;<(_D9 zt_jxh+MihMB_0o#T$;2qa{tY%KNxScaPVy!UYmLZk!wFlA|;yyWposDctH40gG{bA zeu`U0a`e8D%0>eg)9#yMY`}a!AH3W@dhYRxy(+_?dBQki2NdakgLrq~fFBh&`(rVz z;Z78Xm|v^dn=Kz|FW;qbk-VnshZka#^K`$9{_Z8p{2CjPLBa5z>SzbI9A!R@;0e|R z5wO7Cp@Rdd!|aC>c8xBM$RT9l)SmB`Q+NTXM~hbVLTr&4MaY`}Yg(KalQwUC5#eoR z!dF3pXLA0><))VT`bjgMhNRPJ;>pZ~M5vQ5n3yvk*0M5)=S1fdvk$aIs+=`;JzPG- za7&iN%tP2*1`t&p*PlajI^*AXy$NQ(0WEYw(fIO%;EnC&kv*GP63fnE3ahoFhj2bG z!0+3ZZbSOIqrSF1KGuK-;J^9{|WjDAfdVmC63 zzZBT#byU6_*U)bSYp&6>^Q&9+R$1k+xw~t1MnSJDke#cMW1N3>8{y<(`R$|Nr4GC> z0tVLv#qNfxMENjlp`4hV>SFU8Wa;Nm^JM?NrJnUoWXY`1#m<7^b%oO;ht|hp%eq!+ zeOGECm?{6I8hQ@(j9*2+6_jnMMP}`{LKo}xmhRu{;o+yz$gq=ERnGDrMP2!W z``yK9Jf7q{nh;XIoD5n_X;KxT$i+IXMyGH$xrnC8a)EB!{%6CVPA2t?XX{ch4CaF( z%N?i#CSvDyqYZqU*T}jH_M`Wu<_i=|VoV3BNtV(0_;1@i9w?zthQTMFJSd7abTtlj zreCuamfYR^S94dlZu!K5DY1}j?0jxtcvRy@v1r2@s@1KD?i1$$RJ(`SDB$F?zJFRJ z^?ADHk``7XVo+r;Pw2@N)~5OjAD9TU!<>R{l+ItRjBJQwL=o=vzwk+PDw|%Sbt-Aw z!zfZGs_zAkXJp&F1$7CX)G3f~b)L?*UbLk-+zj(sD=jgEEp*wozB2mu&IL?laFDki zG;UFH^Tm)23x^v7O^&UJFpnqp3+1L^Ol zy7jW++;CvGhE+R=?ev`m%32NL>Y(-l2?5#gzGG&J6TcVzqH=oBM$b*lXWIHmT^r?< zE>keoN?ozEg`q~qZm<^I&q^Y;xv;=94Qq;P?QdI03>lS3q&N&};$ZPdUF~2xcI1L2 zCgkK&ycLwfmXpBB{%)ayN%B^a1YQBSwB;!7Z`eLcbTQA z20rsPa9%Rqu6s+N`}-iNnkWb2y0x*}tST#=Tewl#M;wJHmo(4fyeHnl@atYuJkF|`Xa zU;_R1BjQ_sBbsBOk;4FSIh_{sn4ecsutv{W75FD$Rpa4qCHgQbR`Z(;2@S14Xq8JN zHCokx@|a_l!T}4d8G@;VMq(e6 z9Ryo$-EZdC{JK{@KF6@137Q5i!Y(arZwkx7<`(-A3p%q&x|U+k;Vix`2_9wSf95BM zV;Ih2V$VJL$h~Gac6!ncgFb$dq5s~*$|TCYE<0Rn7E??h(ZJ)7v~s-fqE+}t!?!8P zW!*`rDDIYuj@;m2l4Vw%=cHjdjl|;rE*RY?XKW}|ic!UNMo%qw0OH}7a4&U2H1Z!8 z^>nS}%c|N`J<#Qk4xX2=r($P7$tX&LFl? zsU1}qnR(!2@pI!V6B+{8T znYOM~%2gAq3h+doqS^G@DZK!FVYz|$zkFCqX6|72DNJZ-bd2F(vz|n$FB}d#)+~0ZfW8nG2)JN+8UwU%0O+zVf9b z?G=(vf^H)uq^*n|KgFbPB^uU}tzj)yN@bOofq68L5G7r$w!sRXSHXT04*bnF?Ok;hmE% zX`afURqv+$oR*l3KeY7tH*Y5YRrj3S_=HkWiUFgmWXEihog80<32*EW%fNSs^0{$X=bKr64XqK0>p6OjaqzDoUOb*K z7T}XdKOUdX&@@6?> zx#(a<-Igp_C04pkRp`BA+kbAC#xC_Zs@Dem#jz4eTkvuntKS}oi4GyC`Z~w=?{yGz zzkp6Pbk`N8zRb$?;=^7XDc{$O+CiiHF67SZ#_D5$D57I}3QXOg;)pH?QpC83Btny( zIkIYYpEv2|#jSZmQ3d~p_x{umRaK8n7}MUw)4!=WrY+UaW+Eb9NnK&7#^qUHmbGNr zAyGHXUDDuXIYqEg$pBYM^R|$L%}TkSG|GYAx(7SRIvuoH)9#yKP-|xlp={(Hz6l8J-Vp=1jFu zz$=YpM303oONQk(?}Gj9uAdVa0PQGq%0PP$@^b_Pqk#BpPm_kE?l0%~;RlV)s}qrM z`SZfxjuB$rs{S16!YoPZZT`G3Ieh|LrL~0>Ik?W-Q+IbeCdj^=;cw{EpvVu$S0CVln$9Wp~NAc zzt?Zuq|eD@x}%x7bPvP88B3eQ!aSnrkN~LV;tb$mL zcOy(Z=$9+1+>hS8-;heQPhjw!-3Ef%)6`Zjwr<2OUH zpv&8?VYKs7cZ)B@O#BHy%p%XKyZU?g$pG@0?|qz_P6n8ZZ?F^Ied*{pwT$WAG9E*A zp`Bl(GLUhlAIaNbr5tG$wb@W|u+hKb?2{&`_G^Q$Q4&oqq}f*m^`9$QLyf{mVYW;z zd@J?wth}h(?Fnv$ABbW*f-czYsO7%b-#QQ|u!@bso0G4}*X)EUf+3%rZq3KF0*dXt z6~qq}BJPGW7;T$d$Vhy;`g&aV>OC`l&*1KLSX=v>U2Sv_Ly9-Pj;!Y~b)jF^7hM9O z@QYwu5t%Ki>LQjGm6I?{ZOlubh*s#;h0h@boXjnvj4ebO<4dG$+IO8}@q&isRt3UA zQXzHcF_OrtZ$_g<=UA$4PURX}nS0)`Nq(|bq*^yiGzF5x3}IHOu*Tz)v!AUraHGo> z*z8%^onQ)7G7-e<9rYF1lsPFIs10JfG>R&OcB&jJr==u!@LP!zt@rHq56Sp2OZ$A2 z_ae;dl=DjuhaP(Jpx+g3S(%{Z2b2vtYor(R$giMIE!%dcybKjBjt=dt-1VohP&75eJtj#9KbaY{cZlrmhhX7Vq_1+B5&oQ<+YA({=LN$Ug)@Lf-A*}3B>IRq z_v2uJ&9jCJL8`||6A|Y4wX(_%0-ZB96pIc7^q9q*BArO4RF)=DB5+sXDC=%bU~|1( ziIRwKKVj2tfhMP*uL#Yh974>=qN;jLusPeP4`w7ui)b!esGYKVBssG;i zUU)TRKGa_)q`O6VYet?)dwY`5VRY;!H)^OtiIotIV^#b+hzL33ye&|Hsg&7Kym479 zu-;lduGVl$dE-XJQWyrm94!s)!TLdWO{wN)x>k;9$cU-Lg?2dgs{)@Uyt1aam#+bw_gXxKaZ_(O>}c&%U=VUZXrsNep65MDXUa^$aUOV=~)6@KbK zbuPFm;f=`Rs|848gFC+eQqwfIgBf&YH% z_w@8#jBm{|>2GT~rl}W=SwGK|Q2C6ZOc^g$BzWDdl+=WrQ}WmneZOt0TDl<#jaD_drD(CYxiw zvd=V!jBX}_ZJUXzhGX{xkIE}3y>pQ`vJu^jX}huz*_ap&zqp$Y+7)InK1s-NNhi`} zh8(3#BgCG4+B`$CO=Q|i-n959k7pVe$N8K3F!fWHIsVL&wyU-Dq4`RS;^gHpqWnP_ zSJHFLc*mDf$1MB`moY29T~dv598h283&svPY8{rCu5(z}Ja(r=4}0d{X?pxS?;rf5 zkDNT!Mpu)kN1kmxAywDX9cyso_bUbB@<>l`V1_`B(hvhupvnxqi0_yjELn}MonC!D ztyHz`QsPn45H9rr?qy1stg2_+)p)H=A+m|NQLFh{^kz~Je!=L-##nJp1YHJI;Wqs5L6O=!hZN&kPHEzTvzNo2AemPB{$Uim5h&g?1s`L_ zGpA9g)($B7VC-TdL`vvYZ0juLB}t_*-R?6;}mL2IMyxBeobbLiCJ@C@H z9;PVKl6z!c=TRkMJijwVo{BP<(3#4e<9h)?RRp}XVQ@pBnG0NK%tI3t-wa6_%LMHQ zIlfe6!;0w_)q9fIjO2~-kh-8>!q3jfGPb;dXC5e%h&cl1-FJ-BERdc;x9b+r!-3me z=09MCQz%)UEvdF0Hfr;;la>;}PSQ+uy1J4!U&`?Eum;bX}J3xKq_?M8)g1HAzMe?jFg45iGhyS*9yuEnOhhp9KmkNbhqbV@t z(i}qO$lz9jF8Yzzg%lGDSfUYHicU;7-h7D?xT?b15+J3M_#8`cI<4sITNd-N-@@$I zY+=Iye9U98myxTvvWNle%|sO(d0wA%!y`ZKr#1GQS(>kMaxaf|ZzS?AaJki{p8)xn zlXbFRVFqD~?0j`T7(CpEq=MzfJg|uC*f^(Vpp7RIgAj$*+hnHRGDXe4Bk9YcR`oVP z+uHg0x#KZfJ$vICE+Q%dm|dANvg=&a@wWIZVrr3#lUp@!w5p6jXr@H2*Inpmxl?Bm zSw)d>=J@W1fa>R7pQW)|vsTL*^Lr4f^?9f^ z>&VrKpITF!q%B9_wJ3pN06P@`y+TvM=|w1?vzLeoNNIQRpd;>dt|(QD72#sQ8xIB= z)YVYLhjrEyJ*cY0a^esW>L0%7scEJ@Z19LG@_5c@yxR)~A>eR%uh7;<%e2S!-FD9d zAe0Ps>`ztNAE1meH4Qi?QbEBp*pM&W=@qVNQo%BH$80XoLa9f^!qA2~pJZh()zBzfb6ohJ*?OMls7}OejyU=Dy6k{x}HQ^YJ>r|p( z*O;HL9H3IqFU~eAxS$W_7#8}^m z&;8APB1z(IRn{x{Xo5L`{b+J#n9?2xb!IA=lDSm!{FSI?GC+;h;mE9@tgXz-9#PO9 zqM+h|gmAy!RUNA){x^3)vzWWaG0ZKMVfcP)#j2bq_`RpM(s$rqwkuoBdh#0nph;{q zXsKWz&Y+V_0?+iky0!;Kz*LFDW^%F&d&vI_hoasiwLgv|eLqb8lE}ZjEdexsa!g&* zt-V{j=TiNJOf`NtOa(mEsAS4p^RpAsuJ!42Xyn<^ppmD7)cR@E!yMQF!~rw65g*F} z$`1refkcyD3^)m=79+nLb+k9z@W`LO-dHhGFz@@6GI z^0LY6rcxszKyqXcNu_(nQD}-!?m63m=Asl<4761a|1<=)&(tsi)t?JnYBIv|azc^=Lbw%=)$Qd)Ti zD>BV%?Dur$sC|y9t!Sx=CZ}rk>Mkn9ASL7=NHeOV5?o0-DOZ%GF*IT})XhXJkRxTV z0hQ{*nRibspI-*h2v~%_lBO*q7*S*t zNKe``&@210v5|AhI-_p`%VBiC0%Z&?=HrY-bp6Q8-qJxuLqN2;MRK)H z_zP@D3J+&iAh<%dBb5c8(m1asq)uSnNvc3GgI7JbraF9<`X$n{JB^YdhR!ODS#B|` zl~vf8O<~+g8y0Lcs4Q_9eKjGCx#yWS42xe6G%7t#4)^KND)V+s8Z3zmK`S{B4bmOk z7!rS~8G}Kg7nMk1(r+)`4Cclwt&t^^1C&1_6lVdI@1Z!V$qj=4z7N=&KZZgAF60bO zkoOF;(*!tGch&FjF(DklW;71x?}^(_3Fpy?I}9{MWY8x}1ZSq3Y~_dRfi!tCM=P^m zh=@8qvBcA(9GNJin}&=O#e@<)Hg#Yqt+1q-NIO&*#c9L@l=+?AQ^D3N0fch<(b00` zx*3brocSZM1W6r-zm^2a6VvZGg=99+8O<`XIS@1{n6wZef#n%PChj~Q8jdp5BBU)w zedHkBrt6{ff;5dt(E+A?)AP`=NFK_!NhL!Aljc^Dp6`!G&NJseIc9)tb2$1#P6s?G z&Bi@GX?_Gq!<9h}6nZ`jK2UOmn zbca-2cX6*1!V4XfSr9O;uHtd3m#4l**f5_U-39}a?=v{!6vw$ywKm@->dv^K1fQhb zWp(@VR;uYv;P1pfKlDDnx!x>!A9~|skvL^ONkyn$`YOP7+KPvr{CmzD zE_z;z;~Si3U>L6|wV}Hi>IC`erRp>!*RNKa$!w~sC8a2n2e|X6+uCKcZsRvtdsFfi zM9@EKN$G=8KEhD%VT1@$msmV}KTLrBv%|Ah{(xTjH-2a&S!LcQ6p?qHUWhs8ck4l8 z?2QRkJ8Z=h9L4As0NA06JwNPN1RAJMPt7&d**8X~+NiKhmo1rQJ}$XZEM;RVCsN!t zU|Q4X&oiFN~Zgk zKKEWWYcC{Ga;>_Rugz@yN=ti>bVuYz#hUc?K5?2}C= z-g+CxxBiEAFVDdHx$-RD@3FQ2-MxSU`mZ1+ad56c{@1bPL;J)OcBn>q|&4g85iYL&BB0mEq2rDrpg%SySVhRp}^Er1GrzT zN`K7gl(+B@Kr+pwIMz+2FObrynx%x)f+{!26U|PUX%0`&)l`+snS7?7*i>TQYqfZB z(Nwc)8izS?g|{TiO_fcwCebcRwalsLpIoc&^F>ksb-iZCzerUx%}k186p5a1hk*CY z!FCsv6lz+1lBh+O)huI#$HtQx4=1f;3uT?S(E=J5G>ON`lc>g#6CD2PO+F!zJ!Ks^ zs*Rt#@ll^OrpMF$iea%$+>ti|)%~qq-Ym5tl*YY-ehqf1SRe!{8Z$C`pmVKk4e1WZ4&8mWXs%}2jawrRKh%&vvTiJfc zFUJ07z+L*5A%YA&VGeWs*Sl!{Y$=h9@2X)S(4@1&Dl90UW(c1ht|kawyhMO~tUK`4 zBEUc>fB-0eTK8WL6KLp-XJUfB+PLpK+}glJ0Ob(`O_~ElTIL9F>TsI&4eTMmsirgx zUujx#9(Z;T&5cl!lefr9bTz-&bP$+6z*kLd|;)u~t4V5XM{boZO3bLnJMR2C+xv-`tj zz3E4g9R$J;KB?(s)H^@Ag4}I9UoxF%=M-0S7c5_n>ILurN6nO49f@xH^>%ADpV)ea zWD`+?HC7?2usY>c;!mf{1A6%9Jh%T3y}vJN!NC3VJdtGXSXOC0vb_$@tfJCsO<~`@ zz|Nc_l=utsXDl{nLZfO~k7<7vMEJx@MWS^iDotnivQm#tlhO~mC1y!O+?YW8?ao2d z#CK91-%h;JxJFBCF%{l2=RC;~7MZHzY0~KJWKG^s+TOS;WQ%L-uZg6%E{j~sOmWVu zM(S-u?T(Lt=c@6!ngbY(B8nber4OYje$_%v^E{>VGeggdX8s1pB%ST6Dj zhCkPL9l)DDU!<9R;`moAFu(!9eceuh`-G54>1`p|i=uZ(6cYhh)x+Et46ciL{tZWT z$r1Z(p>{*boqP7OX@@jF`4q3u+pPWkdwP6`bwBfGPiNiA4#5KsC(p^7k!iOh=qWzd zzCJo*bP|7W4*n|tyQNBd;Lq6}JklA=JHh|z`u)%IhRT%;Z0euz^&S!kNaQ~|Z=4M6 z%q{KA{|)`Bvi67UNIkG~{+R9Qc6;QO7@NYcBGS#W0;MWRjfcqv5>H_PwAe{GHVRLW z&-!j+PAF|_ztd}gH(9v|ZhJfn?Q45)Y2b+ceeAZ=!|}g^^zHn=U12t=b=JMKHyiDJ z4<`^r7B^d|yiT(VAv}9}5kS>e8A;vdHfCDmTL-rp6e!$e>#qJqg(b{SOJVQxMD^M ziV}u3R@?AEJi@%C>4muQZIt(G$%Y7j2j9}gXgzP!;DE*Wh4ALZU%2?~@+VTv;0NDW zNIzhna5w5n-&l#|yKYNRz)dMx%$;x9WE=!s%9L0mKVq6`GfE>UX4$4{(8AL$lAcI` zCNteg6%EsJP}#|3j7~x0?J1MA_1`j&w1lYyYM4g$TWRPqS%R%9BQZ-oXpE1b)q{*L z2@tCd8e~Y839mY9VRj!2a)di(=o%Y;6wP`uEgdmKyU8^x!>E)l~E0XHYHU-~~ddu!{R~PwGhefAoZQr4)D0 zSgWSfmbm-)ykv~Z+*$d!PMD!EYeq*gbP@wf!yfa2OO8@z?A#}4oQwqwlJPG5Q0aSr z7F=liXo^+T^gPV&JHbU5{t&@dZ^ae9+vU;X z*wKsK7;}U0Aw$BvUB?g*z%|yFKfsFB)OWDT??J==ug0$5w&Be4(2+L9Sm)U}J$~FQ zP}q0ZgGN5LS9su;lz$XsB>5er*j~%gi}8~;mcL$DEKPfd7a}XtYaj4`PYWZ+BI^>E ze?5EV|2Qq2U7Y@f#Xo;^iEir6_}7Jkn?#`DaG4EZghOSeDB-g$L6;yk5{YT%whOg(r3KS z`_ua?-~Fc~V3sBC&NI{862Jf@EuB}Uh-Ge>f^<3bB-~a+291mgoAelTD(?eavmG~y z;i!0W{{<1AOsSh7J0O{pM7(+AOs{ow$U2e#hj~(6G~XwFQatJS;Ag$`%1v#ZSZ~ys zs9wG>Cz)+l-BI%aT=R5YxjP{Ifr)yb0D)36$v1uxl6iJPG$t8_$#P_}&y@%4dnehq z1ty8k+V^A~B+M=f<%*JI4wb3s;|jWq`cwiQ?QAczzwf>XBQ{2)|{&^1rw zKI)VJp#p>$=et}LmeXNn zvBhd)oj+pCgbZ0cA62AACzxvHsSJusl|~j80YXA*mxl4XpQYmzQ`A6C%%d|vEe;qI zrlv6o^}MQaO$!u87?4EvBz=pv-uM~Eq&R{}wc-=U1mSE9*MnO`lj^93wvb~tM!*v9 z@iLchNl$in)&7!#wL}=qa}ZB8Z+kjpTGSvv+G?q=N|I$NP<7m8gY?GE`oxN8_EHb( z7V9d0#xYisCvKBoA8E`i0P3OM>gaOXJqx5CoddA_RFVwU+yK+<;C-klh;Z`JNNwWXRExLhe53m)HPw7OdK! zj6=Kl4}L%48EF{%yx7vE+fLpc*;)zY&59WVrU&06Xns)*B)qg3Quv-dL6LJmXH2LNpvP=8l;}7a_QEu|hE1^ytj9AR4d#=5AoAlGRwQhw zDyH884DaLp)~?;JBS9$aq*+X+<(_QVLSx2Cu;=W)I`6nb`=b;~;#*;T!;>xp=_Xd+ zFIDg7+T~odBK{gA47lNQh`Ejvh%Y2U-16)RXWsIE?EA>`{X!Uzhm7lL%yUJ^%#7yg zLW-^!bLx_11Akn3J|XcVipyTd{SCm1i#;NZyK=R_vrZG#F7y$*!2;zIYKAy<&FnAT zg5~}RMgDHjWOLZJ#u^a@I~q#v)ai5deN>W08jD9jbNhO9#S@=K_`7m`hkU*prv$f; z0?EtplF`L4Kq43wIw>zLusdpf|7vz`m_^l<#fmj!!@8uj(teS${NuB zr$^#~K}Mt#66wlH2>P)eTI8D8yA%=w4YD;={la%?0$=}GN87wod@@22hW|A~@cudb z!bsX~m+v1Q%HmiaM^dsRbynL!<=7=o7#ot1_SI$eIxy^IZTBmYml9>c3TiA4PirG2 z$=JVV2TP*h*0&RD;WV4bw*wiaCsgh`*LmYG;Q5|c1)e;x2~G~Rg9avu>-{$x6KhD+ z0cUSeFN)-<47-EqJknr+$v&1F)Va~Jo14<$$YnT@-q7<`@ z;VuYhsq8seTu7K8V=pQ~K|!vfg0dp-#@!IPJTUwnk7iNr`9ddAY z0SoMHicgOX6hlcm(s0xMu)B$pOvB3oKb2(+2^26Cdzzhf35Dd=@NDKJpZz2nPC~=I)`oic=!PxE}bV!-bc6PMmXz2-`%zeaQg^ zqgJnF3Fh6De14zKn5B&%fk{&nHPHP>Q__FmNzH1!}JE_UlI6Z_rCOfWiy3Kq3mI*Op1H2X^fDnf-8+m7!rwN57Q8g zD;4me1qw!6!4*aP8ctg6f~YomE1O*1B%>xhbI*!e&E%p=ha;NggHJjZRoNHgPnjMn z)zh{+#b=>?+n^_uY&|CBUk3(FItQyyv?L?cQc2Po6)-S7Ax@v-Iw?qr9DAi%bCa^% z46ilnk&PGH6+kPpl^r}9j*q0f)nt`7TqF$2-tgn_m zTI4wOep!mVXyUH3<9ubB?J8Fw55!xIK{1a%t~!`xECfG;@E=CzuhyHWmS#q|s*hP6 z|MAlMtdAOJj7oNXvND}Of~_-GHBfgnJ?Kt!Bi>TA(VX>+f$?jNt?|*c$32F1j2G|! z0voMvyF}7=oi(4Te9IH9-%dl?c$4JH8*BeSLq=pW@97jqK1H%$LB)$A45w_;+b)Q3 zJ|k;Tcc(nSEu8dfEE0RyR9UA_-U^_q5)zFe^k5x1C#TPkoQ+lzc_ZhSm%)i`r7%HH zeH;^gaY&3v|JaJ$3V15|45Y!;s4>wF1@E&S-51x< zlWM;HmBE~;`rG_`MW}PxDoVKDf6DVdgDhHl?jF3a)^z{Ax}&bV4W^u#O&XRGy&%qm z53%)RAKRXhyL%u9vQd8Ex&|yoM&W zkKK%htu1^Se*sQzKzAx9RKIKsqa=g!blCSS`_a|4IGR|(1!>-q&c1CZH35lK{r9TQ z4y+0{>6#B&zIt8$oc2qS?Jb!fQfA`_@R}d=PMnxEaOg~pygvj+q~)a)N+aa7dSiT# zaT}=pM@3iJ59og%gSD)z14OWZfDW~R z{u33AiK*GY`&ods^Tv2%zGLdo(AHL^vRkcizg**t+3S)KQtJ%Jfz+Vfi(-mEa1APv zBkBHF-Uflo&++vQ7B3dCTqA{cc7R!FS6Nxv?!oh<{m1FuZ=BjZ;@cN`!=EuZ?Q3_6 zsmAaf08Gd1sU#Z24#3PS;f~S)g#ivXKQ?Q1dMG&VmPHG*DPj!Jc}fr91u%A8jz}I& zuW;sa1x~Iond|i*IN(il@n(7kqVhI~V$vO=zU+~?)5e_bI^^Qw(+aO@dpHYu4CX{M z{fbZ1OL9oBDZJZp-WPT{CB4Idr0gZ&^BADZ4iCKCFU&xv^L+T)7d#}RSww4cNJL>l z)Xiv%LtPU&07`_K%M5+xB;^7n#DpCj&VEG2d^I`&Wd&0j#%TX#1a!RR-c1&tB}ELR z83<2>T+izcAM*9fg|UG@=rHW@ISDc{Id8$5GXP19q}64wnRhJSS#J@VXzc)fxK(Vc zNR<tpniI@&qC=+?6a%e8z=D~vao*^^5Z&)J!94P?%OxB$gstz(1hG8Wuj z`E#wM1=Jv`nAa+C!b!RDt zwJsjN1p%9Z&{&A>pp-#-$=59y`2gXiYgn%IG&g{AV?cUM-QCE{yOkUxt!5Kd+c-UJ zz6iCE^-=5AY9)LqIM5I|n_|3OZ|nxiDgfA~m2dAfIJkeC=^PfvYfqc_fX1U-{HR{+T1j-`!Vwu;0RI(a zyG`@Q87b7>CQ|Q^%_kN;vd4s<4v^n;Ik4FzczL*V9DRbvhhf|_eh6#EUn78XABrI{ z0x89+JHTz+lSxn59}f9*O$U-OQ%bdzx00_XYZwr4Hx1kog)Vzaq1f&mti12`dTsfHvC|+xJRE_P-2g8N=W#Eg@Pd3THxDN9qDeEyewGHzbKLgBz6R zD6Vrq&kH>Gq`3OY6E9z|uxsL7x2QgUJZH;u$?#F-GZVR!rBD`&H|2mPSF}3poi2(VMn{{2tIWMt?!*wzL?YjyS}0j`b^_BXXuE?d zNoLPW>l=^TKGeQ+a$hVwdL1K{4@4ZN-j8MCr||o4#9QIwk31AcBms}sH4a}0Cal;Z zPZALJ5i-OF)0^ZtccRSKf?KCxcMB6|tYjW5LlUc5o&qr67zku_N z0L_pTX3o3XHN(L4OdrEUW(RNZFBjEny^zKSM@uF$VnS#MP~gAJv3@1*>07UDfdD(9 zbp7o)FS6$B-ErAs;t`gHev^gp(AiGIFfWUEuVO11BBp3R)>epv!vO@|V+LJdhxJY~ zmRg}R6~M==R;gkd5~FZ(>Wd@mfVB=sgT0*^*5BE!Dy3XNGx8Kk%lfDl`llD9|7AXi zNa1Q`1LzN^B0e_Gdx4vf$u-8c{ce6PU}qz5{d?9siR5Nx7JaE0l93T@n}hd3s@D=uV5X2kBs*?jZ3v^k9l ziSi@2wp2}@%RE#E)=?g{E40Qo`A#L#C3e4_MG1CaGY;Bz3!pub2U)k|_`&eb+ zygQaO-?suNC83wR&LxR68s#eAI-WSyC=Rfc-}??jZpbI^pRWmM%$$WCiPW)9P=7jQ zcQ4P7uX@f8`HL4+8Fk#aB$*zC)si8xPy$LQV)JX1DN$@FC2Q)O##^!?zPXlD5`0QZ zy`s#pGs}hH#2XSDE4A@dIlvJPxMk3vT4126GM;>Ncmukk2QR7k6vm~(@!wKI^qKP= zw1Vf05|;*S4|DItWh{+Y?x+nO4-xDx$c6?r*aH^=q_E{0NJ2KiI;~flmj%7rfllvW z49k|fi<&$1XX$6DQQto&LVrwX+n!B@2|vyj*>`HBz6 zz9^s~svr@Rg>4ozMSIl*=WZz?d>oD}DzsGi8`yR@&}%K6X4nn-aD@~D8eq9#|Gh`= zo2J$W2kU_R6(IXnApUJ&o!h{mUnU$&3C{0Jx(0`StfvO@*8O=E{dtW-Fiye&?8CoF z0mm`8R4o9Kwu;fEcaBg$^Y>Fk&lrkFKW6#XBf0Ll@%u!KVR+CyL-;r2q#0y&DPKv= zb8EWRE*^+hilfc5X8xj(iAqItSbLe(5hSzrvL?F)Wl)Ff<2%AI%433d+eV z}e}O6!Ow9>dC73kbZ3P^Q1qHQA=o?w_w)3K$k)se0 zH*IL`6Cwf3`4S%oK1#`tq_91_)&t;U?DC8cAI zs-r=pFex{+cTD>s-~O`mP^02T&}vRh`CY-_r&t4zLUTFy{BEt523yddvs1-fg>HWJ zM|(UUgu!ruqZtcpU<@hKFv)98O!6&T8^NrTaaGRUD#s|a1GN~NDszqQa+tC?Vo1a< z0vladKxLbPt@Ak`DNuW|b|YvqBBWgfw$d40d2v~D=8A2w`yPbD=Zwc$A#^eSQK&$o z&xoY;a5s#$;Lp{WY1gtYIkgr|{b8)HjybJ`>>n4pH!sxW?sYGY_vF3%$mn2w^a z@F{Y%s?xD3ytfm{IV*F$kzRwP{MvS5JCS@=SJfvRKnmfsQO7qyo0G?v4OCR%TPFr| zy5@#5KR`K=We;VW7tmxle=4d$Nr&SK<%lZ!!AwpV9mbfNu=QHmsRdGUSH9I8r{`3Y zCHj#%Bw&`V+gkYL)&K1-p8?J(WZ$6&(gTgraR{e4B7*c4x{yk%7vS-*w-Y@WprL3% z$$tR~t|8EU7^t!HTWcTp`p{9zV+0vVDZKV~CK$NALZ?144bmd%J~%#nm+|Erhg86r zOLFekDr#Pyh}?oF$dSh*PtF(y>=rYak9<8jysX2j9N2!iPUyPrm6&)Mt7yZAU6g5ftI)w}=lpq4UBhahcU(0OFOID0 zTkv;;{ZG;b9rl@#-!L@}S+D?#wS`nUtQ^&d=vtQdj?CLEyOafeR=Hl552k2JmcQk5 zx%kN=Tpx5&EtUN|ZYKL5vq{ttym|^Q;9ost@EK_ubYB>;xxMS9*G(crrK5dHW*BZ3 zU#kqTmtm={zu5E#zb;pFj{?OIdf@K6p%S>mGH9nd-q@28A2htx)M{C_<(z`unNVIu+<~M zDNUy2n6OO9sfD~c9fy7?33^?D*Tj~gBuXfuNxvA$ZZvSM#NIYQ{#%Nf+l;=Bx3HP? z#40WIDxzb0o%oPMNLL6g4y5ZbXdYDZt0qyXJ8x`@pzbRp+Q$MRQEUw+obfZ5$*uXp zm;H6<{q&8KMGG8vgho@X`!K?P5x)4YH}6w*Sf47AK?>2MTv|LD70GIX^Vp*DxdYR@ zl%3PydKJlH|DzK2<nt%;e2uqLM{S{=3f*DVLYgBld+Qfx%DWls1ipg?DF+l) ze4sP4B=!A)mI7S>-V)2cpM3i+hqjnjV0lgJ@m&WocAA8u%E;w z0e+ZtA;;JLkD|%kOci^5+kS)*0D*IAIr}fm4z3 z1K34x)ztL1NEQe3M+*IwK%HIxDR!5d1PYa?L3wc$X5SEcofs>ZbFjVM)Jt3(pm7>Y zfIDw(jBBQ8P^d`YS!2`)G!*7Rk0nFCMr`H$P~KV39~k=IE?ne+kXBh@3FoZEdTjkN zSzf>3shlS~DI?Xo;xm6Z=%&n|IE`ocC%Mp4fq|f+4I#AYLjh`!t!X|a9wh$S=F5hf zc1zJ=yw^Bm5EfJ&X|W90yUKdtxr3b2=mk8W(rov9J}F|#zj=7=#W*vy%Bjb1?g@T3#JyhX}>bkXBhcY*eJ_7N+9sI zslLfBXp1fl^{oD&8zaLVx%3z@>OC1;_PaD%O??C1*LWI83B;zy(J*5WB4&fiPp(xf$?ti7y>43q+v z@bRVN@#}x0LDfl z7~_LWaxu*v+-r#y$CZS&h?p{hKW2u2g z{g#S-ysE|hHvpC)+gKl{2p`gv3u`Hd^~Z-P2Ll@h0>RUvV!O;e26Kio|6nqevP1(Q zxQT>%7sQmf8+mC&E?owq>M=p)kepH0Sq|6syV9xdCD5d}0k)nt2ND;I#`7Xfk#zX) z!hMiW-#O1gZf-NnT)kSsW(E@omCA76gBB%UfvzZlJm9@q7i%gzPRSqbn(zHf(#?jH= z#s}F1pob9p1k;l_I03^r4hM||>LelkWiTzIo?+=iDlQ7e7zntey|hO=PR}0<*)BTg z>FPYtmjB4gN4r}qs>tqk842C%mK(t9#T8lw=mcCbe~Ta$=zaN9GWH1S?)WdHKZRPr z2yst!jwe0i0!ZyAeh&)2C8?l`QOb;`mtuEZY@*oxYUWNffCxMJ67Myqu+*9H$zW2& z^@P?|#d8Dy{Ua!}E>lKx70MR7j&*qog|4^6vRFn^J|q5e2gtoe$)!yX91dVKF`iO9 zu6V{uZdjW?PDPKcQwozihi>;Z;zT->FhHBuTNbQ>y`$F%-&m`&r`*atvG+?&or)#& z2-=+#bUdMS3Xq5-7E1qtn&5)a;EyT71`?jUs#JSAz{H?bd%Am#XU8bU;?`*CfPm2d z_lge|J2430upF-xGbDmHlh$NQ)Zz7p&CG|qs(gvXc3c-inZCj%C66szPB36OCPxI9s4UeqojNFRiM>PUm3DnF`PRBjEjrHgrT+3;2@DA90AV zsq@3l5vM=Jh*3ms0xPRTT3|I>$WU==cVPBB1sQ+whBc0bp=Fzt2!4*#T+6CfR;6mY zvR}E#3U9G7_%AwN+V&g)$K(1(P|-sx@EJW-o7`QB!{8+gh;|yp{Z5s1W)h&8#S=JKf^EBf?eECGx}4* zK)ns9pZ)$6g5Or~2AtmibCB*wD%yXy;jxG6&5K?l$SRX)XGhxKma3@Y=1#S`T)Os} z46N(kp0IZ-)T0XM={epQR0tIA&4%Rb<-4os(kETqGQrb_6#wVz_BQ@!#p`N_U<44dcs5_~DEs9cfqM5!kW9dnFVj9x z@I>>&1~Sv!I{{iDPyS?`W!%OV|NVV5vQ0}n(&lS~;@d4bnGAc=+#Bir1r~GN4}oH{ zM%QVbe89$*-x25$JS2}A8qdvdg&gc;Jl>qb25UA>GqJwt6E<$Yq5cQ?f{`GwWbC;% zaxh-Oi#aO)K?X15lYf~Z>|66QbMA>n&48wlOKR`?|3MnPyyi1C;DCV6{w)jO|NloC zO-$V^jsF4kEn3@lMN%lea>d=kw>jB=D3kC1EycOQtw9KD-NuH~!{&)>Mj>W*n_Jrh z&&jlCL2S0~P~Bbw&SsyvTGt^(P|){P)z#&X{b!$a_Mee^_IOSTc`S?h3~$Ds&W0V_ z7UYyXFhG`RB#j%Cl+s86mpn2z#C?Y~(v4%7m1`LZf*MF66~rc;9YCwi%jF(mm1!dN z(K$REjxROIg&>WQz^+S{B&-F5CFXZ0Xy(u^!ak5p%I-tvi48k5z z0BeH(VV-I@J*Ya#RH0m{b=WHHIkxp6LlCrdDE9GfT>OMsAz$Fl1Br zRnD0*a8`H>pCuT(_)%bskF1l|$3dg+HmTPZdud;!39j9$1K~182Zz3UkyD~~2&dk< z8dB&s9N{=;4Z$$D;13Y|9^SMQ)-gtiW+xYO#&Q>7fB@|#895Fk2EOw(Yylev507su ziCa2cdC}{>e$9}~37<{^y))g?61XZhmQ~#3Q(^^|38zySdl^Pjim5h1=CZ2*1)jpB zD6Lt?5^Kdx94l%KzS5X4;h;)Aa*iQm?f)R{9D+m%x-Z{0UfZ^9+qP}nwr#z(ZQHhO zy|y*|#eXJZu$q~QTI4DtYLk`s-gC|`3lmEon0uIdPvQ(c#6yosM%%uGi&X?-v?YB8 zw8+SU_P=CGoWC+9PSOaa$oAP)RMTlcS`pvit}q{PMe3mCpRFDThL>^el^{{8Il z-(>ZE8AEg6YO%NV^AAkDK%Muo^^GYpoPUgNM~VxLHbPZ@N@vo~ll^$OSZrvwxCKWs zGAkjM{Q+%H^zNL@hBEBi=$A2I=U1E{Vz}&K>z4SJ;(1$Xn9f{Z$ zgu_XRCWh+n{ZZ)9@`gbc^lukoiV*Q4y;P7Yb^p~VagCgFP-7gv0wj6fFw1iysv7YF z(!C`Ftg_zu5}+p6(auLR2%Wqw{^87)KwYr$~+q=iO)h3{HV!j6&cR8t~fg zT+~Mu74VeULT3u*ds0&;#MKjT)20EEHjfW8Wt@+nk~;z1LX%el4B?Qfc%{h}0TAn| z_t<8|ddU@V*zWEDe<{kH@FK^MLA5F)xXDFZy%sqvP3x}mUs~kqq8dx$12D)PxAY8W{hoH ztCXKElo5V%Gh0vJcK{WytlgQsKrI9(QTNAkkAeb5#2u~~x&W9G4hp08PTn55hFEl% zGrB>GuF~=M76a@NoD2-2=zr}VuS22m+2yAf;4X`KYF0{?$NPEgwtznrSsVqLFBCb# zSxQO@V;ZAx)sft(6O$3YmmHaSD#pKKQM1E#r3)z!xn2>_bmid3y)uPxy+Kr#BGy)@ z1I)1(3sY*+=5Bjd_<>A8eWXww_MAi%H8@EHFbJ~;j(aZPDS3$ZLos= z@;T1*nSQK%k>$FRh~bj;kKx9lq&SJ`HXLG0W3CC8GnTANdRxdnxo`Ypd2aXIQZW zo$3ory@GrET+yunzTtSMft)9`hWlmzaK`b%w22{Dq=Y{XzAc81@3Kng?j5|*G4-Ec zk&|BAG@92k8P1OBpvzR^1Th(qj1y^SKF(mt$HdtODNehy^J>?y?jwHUZ;i6zY1;d} z3y!%CRhAJ|z`k_IupNptoS&wBS3qbm?Eg*3dgj}fYC=jGnM z*utrG#W|nL9mQ*tuEKs_>ZWzk`s2%r30t3y*BAfD1?d|I#@+4}Tn`yqw7ZmE_IC95 zBEY7PF2;|F;_BpGUZ_wsjGYWx94Yd^yQeP@!U$yy0K^?Y?s~u+XVATQNJxd-?=gua zA~4VJ1PQfBA6D|9_n@4}1N!TB6ZfPm3v_2XTbT000 zH|+NBK^X96k^J8H?#>6>3|_Ep>h_(eoI(W`ii5bJ?IQbjMwa3bYR)D?=&P4$<>*~5 z`m2^qx|5Iy)aK7njElOl04eT{{|2*XP9?G9dV308&~L^Us5KL}l4Z3kDv(rMEiXkW zj|c$F>SJ?pNF2%}lHw>Kb^9is2De5YSmqsRow{p~&#u|+Figf*Y}z4?N=~q3vzQR@ zBzzQaJP8)?J%bf`$ptxbmv9k8%69rJZe%DsxvEtqsVS3*uSQ)pcTiYi4t!Nah_KaKcdt!HR(ni&F5G!E(X~>DFYD?Woz$I#g@xh}929 zp^KwK1)OfsPEnCS1mvs1xQN~V-Nqhd2P(`A^N&YI0agPv5^uIE&Zk17Y41&fmlM{S zI$TAq^gI)>=gzvlT=A zVpI+2{8?s&LYp)m&iJw$C0R^-^Q34%Epp2ZeY}Y(Uh~ZrNP%!x|AKANcWmD(sH=WW zPaB3qBydw`pafCsnm?%Bz0IhLpL69Ar>Nl$s9Z&fw-vT{)j(Bct;cYiQoUR7s49K< zHpKXP49#lS8`9ern(2@elx86GWyo_-F;)Gwz)J>;qR35|2 zweq#rMG^9uT?twG(-Y*9Q71F>Fb)z89^_28-k(bxZb>f|uc99$(Q$JP+ZzoFPqMX zdociSYa<2SKqFsXEkc95_iJAt_g6lSl0@~ zh&A>^9s~w3Bu(Hw5;44XWR}!hK4k<^F(TAD!sJ%lg-u+?C87DI3^?D;;$BKKo-y-n zxaRsynQ)uc_zRUR(HjNifZc_lXAeWvxO>R1ErIlF&H4}So*Ssru@*INkvrUW$Vl<( zD8uYxx{#(`kGHCa4~&rIKgXuD%aT#p>4&rKNwN5k(ajv+kKp7V?JO6j9g{qBRq3EA)@6=B` z(et#O@ow}iw9Zmr^+8VE2!Cky_Oc4<(GfIaEW*B*f(u{y9}_dQZ0a24Zpl?~f+GXd z+zc~QRN7td-Mn8zByMl=dRQ3dckujN9rz!z)%6zY1)+}WNy6C{l<+RuNpB@Hksc2I z+vgLT-cdMk`B;=>ij`As#ryPSmyV#(hS&7#+Y;ZkC3gviiG6wR ziF^1untL769Li&7>C3#2ZZ*5VSxTV8-`P_wYx&#d74_ksK@t=GSsw?5-b<801OWF1 zGcD%;d1ffs^qDXP567LoBtglWgQQ#~$D3$L{ERZ8PKfF||AHgF@I3gH@**3lT1t&F zSF@bbXzKw%d1?0B`fbg!gr2IJFXCY;)8>*7YIIz+u>dSsTi{+Ii5K~B}aL=!G3PqI9Ph{&KuBm@L zrCS|S=NOWRR3|7VvOFp(N+NyfG{Vsj>~pso!hv__3U5W-w}RGjh@s(Z+q$BLmI(ty z&b+uI13+;L1P~+EDIpQs^cg&L$H3cg`f+YwCc{S=f)T!A+US(iY2Urs1%k%=054InS;O!9IaVLiTmir`w@|NSXnc0Tk{K32t>(%U{m)prTxhdp6I2Yll*pVkLITAwo1ATaI{pth_55V8zuwzH zBsgtaoDjx|>d+@ki}cU}KXX?rjD%W+C5L>vniG|L^FtTBvXH=3fCrnP>5k^%*-*iF zLBh07Q|2ML_bJqxAowwB${BCU?vMw3)7HPZBWjYz;3VJP?)g%7{ zwcJmT*kqyk%I4@`d1CLE?z=|M@!mkUKi?b>e4h2LdR{|UZq?-pk9scdad5iS$VqZR}f@$+M6eA((`T_v7nhVAQm0rXMj+Piekj3vqQ z-+G9(S<$l|PWTB^ZnJn5U(^zNcB6rL%%)W_h#NDim8wiYl1?no+({gL`oZ0Dt}I0> zC|MUtEUZkoL`0dTT(?B1`ggey<${j!yAgv=n6#&FhB94JQajt}(0svzNsb;5CNrT} z7z?RbmLr)SVnUeYR=ACz_bwyfr zjV?H50$|A?=sWpir={>8)LocnQ4N!9wv@G_R%Ge zwfur?QMs7&h98NMLkT7KvO*T){8^bHlT>9nALqTrZVIhR(;=5vaJhN+2ELNdGfH@cBoypOk+_vYo1 z7*IotquHgSn+9x89Oy?f@A7PU_%q zn-1|QbemJjh&Na%l$)$^Cn@W*z`SU0oz=;w@6*-^WpD+fPXw-1MycuSAJN(l2k6HL zfpbOCj|Z?IO!88&DSaji2m{#X-RcIXB@+lYQ}Tw_S9Jpq0>TEQ)X|}%jt4|6j!O&5 z)E~X9C3tSLK|AMlfZB9BXINMwARl1sNB{>l?6f_bjq9ALliG04S|Sv(+MWL~fdiX$ zgr%4n0`J0k0Ux;RP6sP{-*R|4vT*WrMn>L`R-Oks?b zyJ+;jXoAlGsSdHEzSi=VqMBp@Qj<3h7lHn=DyuuAF?)(T>z=op4-*7HCtR=e%DU|x zNHq|$B6OEbhZ@5By|)poR)zq3XNhw8ah9HkLk-en08-^5=23^9< z_c>XAHChYJE}}SCUXhzXCm`+TPEpE#u4Q`76w#!DVQQ&>NyIc!bp@>quil*E6i%3c)MAY$knY31WMB_;p1o2J zB{F;nvdfutVn=Yv8{H^YoOTNp?Io6WEVo9a5*RRrTgbP+c34L1>NY|F%U4igmQi03T-#l#Bv zjBBDpIjBfQR`7iI;KL)I0XaWpLLIrVYK|77L`t$6X;{UozV_=CK;L0Ld+`l-G9PfQ z>1rJ&6mQvP*b(JiJ4Si6A(VDG$tjl@IQDIRUNKza>1Th`Le2>6%Ss&=6_=GPyw$St+b?(I{U&SAYT--Gb@eSko4cHX`*!_)yw|5V} z?En$!Mu(%j1?Jr0jU~lD>r%>1-Umo79Twzv*bb+V{7Uxe8CTZKz>6~yDkfsRx+t?8 zZCtK*|K~cr=KP7nU2PdNiEBW`$~D52h`!85U&RP2x8(Gr2C(lF@9WvKl2RJsx`XOm z<-%NkW>uX|X;g@+%wfF}D`TmFSuYVbbn(c}T60fYy;esgXZW@@ljM}5LB(24VqtiG z#-_k!h|?iGg2TYU=00dpX<2QgL=$1Zrl|ShZcRbsUO8Nl~ zvQkX8bbN*Xm5?7{(VGmjzR?8-A{2n!B<=_0pUk}e{>3lTHRAFEl6Q&AKR;TJ28$6_ zHvB$}jlXYhj_SwmK77%66`uCT^9d?b$8TywIL_ge@g|s zTWeH{KKM?fI-X`nJI^=ahYLS$th@jkoJ?M}a_8x0L(Vh}EnCIcA1l#SI;T-QL42QF zi(!7$0FCPGFV7dL(mBghBeJ;HO--MA02>xC6mjfM0nD;S@aUdDiRe}cI;EK!9(!Ln(ky)4@0Qpo${5m7*(=-b!9<|=TZ2Ts7` zO=p}Nn^b!!P|q;tb^>;_8<-8sZJhQ)luM$5_)Q+ylRZ;qy!LCUoGb`fp}sXZXz?(x z6b?4~SpC_8PTO!{KKX5_kC4*?gsPTddVWb5013s1TEPkrGIJaDrB`7!1n6IvRJ?77!?`d968|Vq4 z5Bkd4#gb1M)H1Am@Bl>4>4S0qKi%f`C%8k`3)|5=(k1tmn;*W^r7;X+2|% zY1(hzSrV-U)Gp;KXv)QZ(u{Ekf`jAtUnyLDefby{FI6sW#E}JK-$vT|F90*3j#l>V z7p@7U`qK9;Q=o|E?eNE|K+sK?xWh-eR%ND0#L^U zQ|FIr2{9&2;IHU8UcaAC18uhGky}e+bTSGf^X`>;a7%;3Vz@w=M4@n55iy31Z3lYA zm2Bb7M}m~bLSeB?JvUwMn9!Xe($|{q^xZY<+O+)YL{j z8Zr*kDDL<(U2Go=eK^83CHRnfM}v5|If+!O>s11lZeuCU4cc`z8{Wimbzk_Tf7@xx z81Bv|?rUj&b872fBmG#t9Xn3^2F-t9*F*%O$+yQg0Z<|8zT*j@2X6TL75Kj0?=clP z{@CYrX=VOE{uM+ot10s?4%`JGFn7lKDdqFVxi+bF^g8c$ug!|-PB(c0iohM6YwlTl zRdXH92U~#St=oYVHESAJ$Mbh+b5P6nydBQVh+?8gBckVTSRvmqjw+tesyYK0XDO6y zsb*7=NQ~;Q;o>ibqJZ z<|vHm6u)9h{N_S*&ibOjhnhftrp`k{qz`L+f$wpNZiMJvtbwr%2w6f&4!Ln?0T){+ zOa6P|G05-oRGS?WOTvB>zSPrVMRv5!<*48b`GAU00zpRV!{VlViRO*cWO&bX=dxVD zJpZ(EAA^AdM~%jxN*e=}P|=m}`{ry&FS{C1(@Fn0r@gJY(4aavXAhI*JOY;e zw}u&nF*h2WOlr^}J@O5|lCs3t(VN<(6z20Hk@5DyCav@gC|{>sFk;RxYi4TTT;^tK z=v{yIqFEXhPYWVcc}~NQ{Xk0wVwQHK!b-5wwTd^0pih4WKdK2``a)KZ>TX1zCg!OHz{iRz z-`BV{3~&{^d?iXc!buEPEQr_`XKOCG)T6s{yQ>+)2vVGJ_E!@-7O(&STLAt!8pVgK zF9g=>Ps0iMOy+_qU=&F@iIBj$f_y|pbWo7Cpn`aE4ro2-F{7Fj9dRK!8UF#=v$Ed0 zb7XcaG|*)Jo3eekeY^Fp`<`4!1^NFgEPSpetN9 zQ~!{9VdiL(93Zg|eE8i8n?xLOua57Pp>7(9E$!e+Rxi%y2}YewKXc9+D;b}UC>N6r zNjnVr=5NHZ%!Oi0O+{cb6YBfWCD}1NzxXAv8}V*1&MV?U&v~!anAjaguo#2FD77%~ z{3Zp6tmK6BGl{~8qSpm_P^{d{$dAIq8K4tL^SGL% zlR7@2NLOE$%&&j^moe#b_J3J?SwhWIowI@v!oPUNhbk4Tni0BOI(&)$N#cn6T#f1O zUbGN(D`2MAw14hVn@UItt%1(F9)~l*)hed<=Nf5OVdt$)J`D`~MY0mjP5~IFYo|QQ z827Yk$MLfG(DACTQzGdaqOYL!!wHPWi3cG1a5bR~tq9@(u-?=Ihbsmz6|b6Q)gp^0 zKDk)Y-FBr}+-!61X`_*cOviOv+&_KEdfRe**p7*mrP!2VJ_0r?SHm;2a(C_sjbauI z5bejN0OKZte7A0o2taCDuIeMPKPo|=6|P4uU-0+P#A?j2@{kzy#fKrBezsj0D;*v? zUi4T*cfnl6BrIcNDV(=7Kwrkti~S>VADyj6#o^#_Zonj3sH2{jFKt2{i3|_1z2$$a z_qOj=o1r0W{WisVpYy~*4!yMh<^_~~coHyG)!wc_Ukm;xaShjjjVd~hphWIsHSJ8+ z!=CkMCwSjGO!_9i8uAv=8(JSCoFoc#H)0JLQ)4uU1Ym4QqvjeE8nZ}jxHS3Ay=d6D zXdZ>Tw?~=g-58d%5`~(Zw!G_k6|bg$>a6*Rs;)$Hq->o*v^vzlJa43MyzkXs#_RVi zWBC?~$sHchhuU}SZ wI-enClOq@v$kjV!e6$juSCEV@$7d0Lk8yboQE|lmQR&Ut`OMFzUa+>h6Sww zb}bGg20M*{xIq=H$(Ec=Ql({@1y;48nW+bC3i~WTscgL?Oc7PUJvU=^6xf-z&>4K- zaaP;0QoXL-h?R0!*1^TWJ0eoOtk=`)?cnHmp9zrqREl<5blP{+3*e{*z4*{(cw$XT zeyYHRq5+PT`H$F{Z^mXdD8`g#H8x71Cwb&o>vcXX@-oP$-`eecckm{q-k$a}nMP+7 z4J6`GaU-)?^Q4Dm#o_~CZiX!`Zi+D~XT%P~Z1A8-757h<7^)P)_61V{1{Y>^rCByA zCIggo&lDRg*}iUoz(A2(ydTtz9BJKN3{pb^t?REGV}N2h{3n3GsL-y)t~yUzW8fQ>_!K43rU17aM=a#ta8nHb!^PW5!>LA)=hdfGV@I3E|LWk4A5@Oxq@r9SH--t#hr?mq;Vm7Z4W2_o}xYyY)oW9!O zv_x3Z6<38Vk-n6{$`u!7vIO2;0JW5CL^4*jsrw}BOSXIhEYH_MbyU1$tnW$vS3du; z_?gt_h}tdq)WXL2X8CXhrt*Cew`V}>35%~O;-O)~Wraft#pK&MnR5KK#oPE8X`b3W z-UJ@UK$21xFyEmak-*eN5Q~-0PVoJ0yY_7XT{u4qkT>F4c%udbi$8{CGJFG+@RTTX zb7BUB!O%2y?(r<7IA>S3sB#kJ2DW)@$ z36k-UCIS*b|MmPPtn0{C@EN63PB>^TU8qf7@Js#0@>x?F+LcJ}zeRyG;~|VE!)6Cs z*;pwnT@@fOxmTAoW^T4h&(@JpUm2qN;Knr9^f!cOV)8jQU_jV!c_Y8P`z{Zu}%`T znYW2nI7iKbAFL{%|4PASvAc!ZelBy$z$2shCnH zMg#D6vyoT(V4Q5uU#mFx<#f}=D+C8%27?6sZ zavmW|i}Wm`vb&V~dYD#jMsv3Br{CVfgvHF&D~j*6;umvWd~EHFX-VHuvMGFbXai%) zhn~JRJvfHZxFU3@KJ?sg91cF#Kz+O8k~YpQnI6=7q`v2hX#LMxC0rV2W6p7Y1Y%71 zjY&4kh9DMiMU@>vIKxXs3zrM_-=wFx>6v?M*`TP_xMa z2eUGcWey>S1}uJ^pAk#S$z(@!Aj4ZU*4WlCbDw;~pNx=HkORoGOh*8h6U^;P;b=x2 zC>cK+*YjB&%D&9lF1-)f$>v&94?xY=3UGHji&h5BR9QA5Y0C_A+Z$9aOxh5*-yVtN+VD9{SV&>+X*_KAhHy^P z)^MKMJ*hESu7CYTjRX;daokBlozz6IEtRydrw-ZgP|iA>iBO1+jLfx-1mQ9|EAJS@ zo-HsQL7i!osdujOHpe*VC|wQ#+@V*<1SGCgG&wodd;aXD2nmlZ%ki<#_Mdsc@L21L zgIHNtHwJ<~Au#Yr+BWP5x+aJ1&>a?K{9|y8%{udRcToO?p)+sKjeZ8zs;A%sP{wo& zXjI?MP7Fi6rtp-1DS<3Fq}{HIQ;|z_0PE5R%{be1G}ki0->zgj!V`?q;4UV68cM~3 z#y!4MeAGEt+aUUP-Lfoubw8o^mTQ!_`n7}sf|vIz<~AIQJ8bfyrv3g@R`xdJ0nrxM zY#S7@#qKpyg(Z;5kucL<)59X;H9N66;!|IG=^&b(S zu&`9Jsd>szYm&x!c@!fBiM%a{!m3vkxn7=;26)Wu_V?5K(Od|eWLr%Kj&o4B<~IkW zzT~ zMv^>(?(q;4PgFAFW8tdN@HUONXCP}!%ug{}eJAeqDu%T9)L7%N@|%PvyH-RD$V1h<-B8xLrXl{yTYI_=YkD^ zPawdha(yAUQZPZl7BI@_@pxz5cntyZQY)E>1U*+&XjdSilj;_mB!+H)xbMsMthxr^ z-;6O6mo1#?uE!bbsWO&+fM6cM?4H4RCet{o5=7Tq^|+rpKdCs`O0Z^n(;|G+CLvP8 zPWCv!*0`E>TmL1^>EwNNsHcs(#vu?J3Y#CEUDxJ01$*$9%9$ zY)bk+URcoQd54y<9gCD&$#H8EO3+|ejyrYX=leZP*Z$7QtEh6|;~^%LfmqCZ{sBK$ zM+(mTs#zbk?Eu#kn{+WCQRXP%;e#90N=3W*;>X;D6UDW46+zJ?FMUc?2vI_bND8PbqY@mSpDKavHN&LHpa8j>E(TqeTVQxfNv-c1#29mLTIXa~#%*BqjBFZLDwtvs= z@N3A7#4uIo#1y$xhJC(j*W=9aO;o=n4u}u7H@_cav8DLtRMHFN_yyH-_8z4~rKnYE zUr4{k%Zx7>dWhwV;Jc~qV4tjLT2=g(hFBk!do*fs(6$YwR0Sd;8ONu~CM==HiGHSA zoa+4Ep3>3H8}12(ic^LssvKI-Hf6?RAS-2%(>EfBn5r8A>b(oZ=H%_)Wxbdk5vD~< zvbh7C5~GHBtY^mZ3#{unqdL&oMviC6hHp-Z>MD(MQmwmTF6Gv-)qI=18X2aGXlqU2%ndY zl+(3B-S>`3z#w+yrQI=@=}f6nUGt6SJD5Ly36_gbFZ?%~G-o;xcNHOegtvr7gN-d$ zON3uB4D0!Dk$HCJe+P}~*kbDFSJ)f+3l!TtBMl^FG*J>&tga^{ek(81|5RSuEU79? zHH5k}K|PLEKB5J9LQrG@wkDFp{q=tb+$F^yS94wR##kxv|5UVWDM#dpDM*7FgTBw- zKxKL@$jBvr8hHM-KX-VciqU(Pe*xbwLr+Dz>yJS4c5V;hqjIE-9aa7w(9w;M_zq~@ ze%iPU4x+@-wql+DbMw^z!xq&w9jw$z4nPa`G6C);XECEVqQJT;2CBNEAy1kf%L#6P zR)AXnQpI)(UTiv1aex73^HRYWm3M#0vg8N_>ZV{hCBzo$?@{#MPB4NavOONE^NW&d zq1S5SPYG^aeGHq;qjK1No0IG=$Jxh`QA~PX8^*`wTy@69P^kL zCP=`c3xmh3eouL7v(5nh`tFKVbx^PzoX9Sv__%d;Fun^({F zmF^vBN>5CV8-&c5=Px|Z34uTEaO6WpD*8V6TjA^Z4&yT}9wTAF(oYuLB)b_|wD2Q& zJz%g0K~Y2pV$rkb0sMBM(a;5;s943mkeTzvvzlYF~%?rguM~2iiy2<&3_q9Nn3YDU;Di zp{%cZ1tLFLJ6<>ET9dC&!}z1`cNhgRU(K$x+?HGJRL;bfsu4CS*kl)XNS>hdjXo{6 zv{YR`L9BnXqGx-E9gFa{HyspM6!Uj}%5#v#_pa>}Ng(GP5Fo)yX00&M{|n+-L^5GKSKo z&t&%0>vR7x(LRa>r*1&LPXT+ev3M`(%x=A}>6BV^CH-a@M#2s8*PzpZF1|f;e#RNZ zpN;K0#4XhrF%$4>*p(F*D=YM*BqS`wWjPr?xhdLj@@03q^{^;NS~WGH3=L{JMD@x@ z0;pbAk<-f|5B1d3!hxMq#j8v4(dHQQz*#3Gb}aEdgyjjffkB29C0UXZ=jmixYv5mL zVvzu7$;AUwwaO37le*?Cfc3J%FsP$s!+{u7QL^ z>F_=`wEzj;%tv9#ytVV=OVi$iOW|NTX@C-kPUJKqKH;%~$|7O`W!{c9aZZH=TKB(A zo1)tlVF#MUNbbkdTaUSWBb{o7Oc)D%tXd_<)W|hi6ugD1&`%9io7Oa<aBIk9})gk!R6-QXT z{nD{qNsl#3zeD9$Uh-a8uj@z-vgR`yIv)Bpt=zt={H^*(i5XK z?p0@8P-3B7;13hA`~;Vl@A=qDbl_$Y6>|ohrKphnD75HBPi*lUY&3p6F61;_2$~7Ti(N90ce;!yRei zAB6AwDtTg2bxsk)qRXS&kEk|?(Rcup)T8qBc0mxrd{l&!gJ;J%`PgQN-W|?4Lo8ga zy*e--x9DLF`$P7~LjlC@ulYC^a)Ew(uaN*{hlTNc%En@$;IU4_&$JUz8Cb~JE)=p1 zh~JQ#JB{MlB2Q6k8GN4bs1b9Lt6yr!yMtH{E<1djtGm6R znE<^5u@D7@3K5tEL33hp>?tk?@Px`Z(`mV;sWH`%Mwprb2C zTHVPSm&pEHMn`*rMn0pQWnY>ZaE1>~urmaA1Fi!yx&DT&imTAFqGqh)PNowPw9&J&Ls9 z2r!#oxsm5pMPig8f%i3Qf&mmlmP$fol2o-sEj89)!xJyYyRYA$l&gZiJ>;{G^Jg z3fT#P>ykAoz~^m`QnupK2rV*e*x4RQr)@#T*bf4a>@?z85L6U~BE$#^x#S^ok@RXDgLj8R-)Y*qk5^)(tnv*AHFB|5?-_~PM| z)}uQ4-bB@YtJ4hNGb%nk4yqaAVyHEVS-rwsHA2FyZN=?#FLSGfmTbQD%5`VQrrhI7 zR-J>U@p9Yt+?;y?rhp%WmDL#lU3j{BWZfx8Wkg|0&n^mO4|Z>N?S^EPQHx{Zby~Ts zAKk<)DZA`Nmt(Ckv%qT~t?=YLs8uci34?{DVj@TF56w!WrlHCtB-%VBR)Upolkdts zkE5v;mKmUBWP>rofhLokQ5r`p3tyYesH@iSASbj%zw~NZJS!RHVFim;C_;V}{X2Qd zz)=?`%fxzqXLWXO`^5|-ujZXsV;a(!b^f0^?Nb=&h`U~%ptl?Tkt5e1IoqKsXQ=#6#$w+jy_4V%&j&`4D6`8J+K&?=_3grP$}m@ z)qIvX?c7#?=o$+B^I088CB`0bAzCx02Cc|8Eh~;C*0wrox->LBw<&xVm2ATD&PLUl zljD_)){H9s5sn7OP_`^h+=zvvcEOG`N=Nh!-H-sjkpjsnqF1OR^IWEYT%1T$T{e-vjTRsweI&u9G34M%@0?mq- zg6lEJ^f{;8Qg#g$A}hxNQ9#6oS-viLZbc0$5CvIGG|47!dAPa$n@)hJ#$g$;Ht51h z=hk7n$Q-LRS$mfu?D8ddo%WP1ZvUN?fke)sRd*CyO|kbyYdj_ZBa(wCbZ3cjpM1B| zZe;J@$lCq)lBil3+UgA0%4T;6xdPl`A$$B3T~BCA15T$BLqnOnYq00(9Cw=fHR!o9 z0Wq=rt0L3#+CPL=3Sp_+Z!6xF#2e~cEhNt;^okye?75YkW55C zOeBmyaLG&lv;nWRhg+DV0%OIp2-&$b>6@ZRERWej>n%&~x;iqpRPeZ2P0Bfo`h7-q zt&Bsy%qIJFn3AK735blq+;UdF6KKnFW@_dPT0|VA<_bnET6+U(_ED9mkl97s&OXN-%3rTkQFjjhT;bZ> zf@2^w==cWjINlEO*m`gAZu$3Rc!Qbq{ng2xWCW_hoThN`Cma|2N)@mP{(U(Ns{e`X zFbN+<#KZzz2xO9Y`A`+zD1Er-Kee$qx-sFW*Z~mz8c`)}8a5|ys#c=g(dTf~Vj7(; zw;x4`k3IG|wuPf$Y^-{gG!i?e2h!=SIP4^`3Tj;tj9=pbcs@^kKoNc%@%Rv{QfR&X zt6y2pb93$WGlm!Bl}r6|t!0x>wYe8uul>g)`6plTpTj<`1jo3Pi+|C1X1IsSnVu3N z^#ZzkY77i)obaxNWbn#hw|0K`?@G;!4%sd@CH^i+E>|=z8`E7ckg3t2Xva;*SMp^x zGNvKfEqtr9$pj?)r&f#2<#^pg=_V(N5PTWc@PlQR5liD?P)hLm7ybj$lk6kP$wC9? zIH9Wn2)Qsds*xZMz*)bYsXS}do^E{Hr--dSGind9oT_70bym{j5C8f`*D&j0@^sQC zGs%LNn3LK=-fyknf_{tKzv5^Ch!K{pQstG@9;0=^e&I5o?Se&b+tDg&Yd*4;9^Hd~ z43@VVvFfIG>q2p2?D@d0xyjM~500~e%)E`jDzp#Aj%l~6Hs7CCiiH4Klx~v3as4?w zN4Fa?EQ|&3ljZzn-rt22eDT93oaFpK5#*h@> zoQzW(_{p?1WY*1XQRF`?fyB!?!6Vuiui6_zu5)n}qp~+0yzY;=i7a^c7ekKFA+03u z_psk9EZw^gu7|qar0c#BuS_U|QO*x2gUa?&> zF&o%G!N_9-0#D<8?kfgnteovY-W?fL=NKMH(5 z*DeXm+mvQdM2ifPhQNW=kg2sY^oB9&dQ~VJ5V?&_fs`M(uuDSEVJi>QKzebHf8k+` zjPz{*pm?P%rca-dS3`ZKyHFu8Xj~V;6_k7NnXEi@jbN*msox(waQu9~v0;$$$pTi` z@MU?PYsxveq`QnTf=Op^#oUX(H#L$yEPEMX zfo@B&dcT`uCnsD?h$(P;YZw2*zweyA#aw$C<6dnGVGg=a<*Apg=H=$mKeaj{R_7ka z)4aD8v)ol#pxaY|&Y(zO@+RLfD3;w*iYBM^=70!m435w03*?L-yR`}6RXBd7)MwXp zcd1B2@<)x~g5XC~e5!nMgx-+o4JuO;pD|)0Y!oTVUr^5+OU|doy*%uuQxN&N;oj$A zQr>PHFG}6Hiovxj{V6Og8Mpdm$S>AsWK3<|)dlZib-n;6%nWACoKq7*4>ZBm&mS}4 z8z2ltAy8AYbhTUSX2Me}ms$i@W=;E|^_aB=WwUO0g^bM2!!8BfGc_v1elsdM!U&?u zuA@KZU%M+Ms_;Z1?1gkwH;YStm=f4Pl50rgsFvZ^b~V9_gnmBmM_M+rK>Y5~n8@WM zxYBx$HFdyL0A8fdX4*dD}E3#b(%lgo5pgS`4FX(Q}TSkixVQ{ zOfk0fKW9oL)=}6fMwI)UF(y(GB_WtRF?wq}Yr%7!X?qzR&XV1Yr*tMHvdmjvLG^Xryzu`;{u%(8mlS|DiX}!P;%ouv_ivet4Ugy1VaiE{*fRx2n@1 zrwt|JkVovG&5g4!G5u_;GT|T+n{U)KK=Tb4hEsMtV0Tw6t#GrRx4Gv;s&d>+T^C#5)6)5Gq@6>PXhDNS+qP}n zw!2^3wr$(CZQHhO+tzFIdl3^8F|(YQ&HV$lxmB4b&tEIa=^`D)0czME>-$K$iv1Na zcebx&XNPA1jTaZrA|97;nyJ=o&g`CXLuAz5)H65_qKa)wpck`J|B{WZ) zS(Qh!aDEEmMIH4@Rm5qX%1Wq(vcp#=s`$K8IPPV2}g;^zfM59Y)Cp+W}l}@^ahQ>(v_hczv(Yn_oR6b?Be~^WmZndUuwx<2zc&_Gs^> z0{b4_jJ%|u+SmQ`;J4~T_7mO1ro>7jW_0;VxRo1)Y@hoxG-6&~yNV$b%7a4#_?HNhS&@MuzVtdth;~>k zdJG_HvEQV-%mays8!mROTl|>Fv0GVQLvja2K3Rsdo9=KgObzyVACT=?Sw*fMby58q zu(du}gEA8QMc$XjM2h7EQvp=X7Pm9cC$e&TptT6my)$)Mph9L5fk!8e0aR|S3nS=4 zf~1$yj@ytV!Wh;detA(lqir>Mn+M@$_dRF5x7|@_Y$&-5b~1ynQpsx@m@r0>u2kD# zCzZ*r=+#%_p_Wv1QNcJawd)SCGi8mUm@Qh_2fKwdX=_5%FRR8iV;^e8-(O8G1U?8lwmA6@L++zQ3ffIhX%5Apcp?*B zLqt$uwgax`;3U4{dO)5Mz7s)`ULnhhE))kEyE;Ji|RUe?^1MTYu775l>%i?XlB5EclGRoRS_Vy3TtVhd>k{mUob_zVR{ZA%ZrN4#HzDhru3LDdMhSW5WBM~i zuOkxjB8KmA)1Wm5DFu^Za(;ho_MJcQNy3HFe%+)^8f_Wv#q`^@Th^Cgv{t*MVlGI^ z9iH^9&12Ry=3LyLj>i3x#(Hpk+p)-BEl|4RvkO&2l>%H!m8^BFQly!EA+lmZ59-Uw z`vMFDrdlv4jyPx&)-)+Ay7)C|&QAH0RK7^Z$DuYTxk_u@$)8ry6^96KG@KQ2IR}f9Jrz@@o3OWN_c2xI)bi=r)M+WW>3~o&$ z_4OuQFx^T${;7lhBx_-Jo(0ufRb=_Yvb^;hoo*pmC$g`Y_w9`espSj<6mQ|&Fui|& zml80d5c@k?aD=QF0{d~~s#3_Fx;t?hWTb{>)L5c%RJ-XF#~IN;)OFba3AsTPJ&}?= zUyZ&QEs8V=u|GN&A0TtZ*IGYtu~T&%!PKH3h}Mgmy8R2Z`FiY zDmBkk+_j&$f?PG(vG&807o0JJ!rxL`v{7%WIvzziT?kg+nE|7!vy9w&WSeZcP>)Rb zHKTsRE1uy$^oEr6)}W}@rIcj+V-w!-eU#bgfL1&JfW-fu4EY~0hn|svwS}RhfwP63EuGN~??13(JRvWG>Njjd zMik9Nv#`0fDFR=G1$3fZqF6}rvD1+cO(YO$mZTq4U}Lh@Z~lAgDmRy$fq+t~E9(zi zisqm6jNIGYTwj?vbGtKx-`8{a>YQo2rSnTJv)?JW%ujl(YJQFwF$*NwA%$Er2bRfn z{4)bAaF68Sfn*m~dRGHuD=rgnH24 z8Qc0v`f&c?Njz8~u;wvLY@q58ga0;G(d7dm#g_;&LoRBOLDMJq14RJCvFQP7!o~s- zZ2(NNqtTieW`R2dy!t;uHWk^R^(%_>GcD-;jtJ(HeTXQMN54^6#{_AFuX7xe%PKN5 zyBcJ=kO*?~&3o<=4|=W19os)^(tRD|e}dcCf}cNc zaDBZNp5ymr*T3r|57Vui)65Zm+r)hOYC8*}^L}ex2}{^B{0DT*f}eidum1h;S-oNW zeYze7w+HB3yM*zs+tc?g^KtY&cZzDmf@&nib+X2f{g#mW=B)GzBP^w$= z1@CL!{UHC@7Y@RG4}z0*0dZ%W?VC70zF|aLxV5DZ-n+%<;?t z1p3Pje0Mx-1wX4rF7cMJhV8ANtx16V=5YSHMNa#>%su@4!VM7OfzHwSTkGN&Xm!)( zr2}v9)QQ`-bH?D6v)X^>3P5oQ^|A{5sA(t1Bh>g8P#^b$7bB>8p1&pFPGAG_JfFGl z<_LZl9*?1L1z5;{!oKJ3`x}Q#keJ&#r!}^R4`54oK%St+XIIJib#Ctk{Ab^Lzv0OC zHJ)B+?@H&*rtTN1Kganqd+ltzXJ|ElgdCip|LW(@*ZYmf-kJ8<^2_X8{5F@wxYs`1 z{zhOySm47B9Qr?~!}bn1P*gX3#Orr9=#KZ8CaoNesSrMK1uuO^Uksr+K$P;zeT@94 zVa>v8eOHv@?z>klEadO!`aoI4UYq`^lPm`mn!XtS$2ceDJ8W)(y-Lr4#q0goFm~(g7ub=}&)e9+eIcv$bL{7kL60F^ zol|>GK&Gy7N|JusBZ}jEXA?}EEVyN<3Cl$9iV|1F67y?!5us%>{LqiamHoPLwZ_I< zcEedp%%@E2p2&C<#cUrpM&Uzt^CC<8_a_lXnP9frulq|vk12l&7@HI_tN*+vVv8gD z%QNY$yTjvGSJElGFulw`^Y~tWb3P%y??liAxzc^BNu2OqAZ{qTcjKnQ(+LgW@~hr; zAHcC6Mt`|011|_M_OSkuPLAv8GHu4p5XVu!mwvt6P*pzfoc|pE00njzpB|ci(8ue>3$Hrf!pI1#K4ik#sA{{Nc?4Do0qjjA$7TU~j*x&Tt3k z!0WsSPF6@jrU20vakOlKMMCI#6AqXMfbceKtVJKe(8s=Eu+cfrD{5xd=ONCO^VAU^ zleprrNy7Sonw5WWUI?XY~vdoEAsh-fAJ(2Awpf2dH#SVVlZ$ zIu@R=W>? z7C92HU;SzIby=l{91#T5=Gwt|5+mVWq!iiKUH8jgHyjs>@cndbPl4a|#Y^|WJ}!sP zIVlv3l^$uTSuxi7U$QKV2vRrPjMnjxAwT5O0aW*KH^QL?C#w=%EvLJMOe3{b0F_pq z^`uigA5iCX{9GQy^khydh&y20rTT6&*jw8Uw`TQ=%!z0_D$)woF6p8DBpl#ud;qls zP6R*GYcOY~Vdgai@cW*cc^jl53p943u2qO_#=ujc-JTb#1OaM&%Wtqt5j!7H_3_{z4^9p{rT_*wL)v9&fQFbrqVi26@Hst*^;V3GK3;>* zFn?m|6e+RL-Khqnp8lwfj|mW<&@Aun{mI=mb1UreIWpOfmAz2lOH{F zt%!*!p(WkMUS#6BTwqR;{tjC&($6l=P;aY?VM9HTrxj^S zIsfgGF`}h~n`P*G`p+sc4VX7e1TEAI_p#0-f|;7@?^dyZ%nN#=p3?aLHf4t&Wgyy0 zB|$#y}bC^3uGRG#LJ7PA*XJs}BiVR7H2m+3&Ihq&NkLHyT$|vf9 zH<;Vr^8F^|kCL{hZUqo2lJXW)X6p6Yu?fEScmN+Npn%^~r8`nnffOd$8<8`)p}i9I z0*y2DWag9mUmH(0$pV3#_9oKok$P_5A}T6AI_EN=f0UD?GK10%&+-4AP+xIA;T!q> zK6ROxN)t2AI4iw=R6~BzG5J{3e zTWNtkvdpFevjgl5M7#aSSuuYC$TEkCqiZ`YLLbixte1cZ?szhBEBsH^t19kgp$X>= zx4_p+FAI@e#Ofm5(U##{Ptm1IkT;S`?k(-%QvZos-;LC;>UH@I)G*{iW3GJd)FVQ6 zk1jEUa3DpeIu>^gI?oQT=VslnsX0b9gZ6KUl?ppfrzX~E6bl+Btod6f7j}{~nMV2^ zC$5o1(aU^AS@fjasSaEgzT5pvm~4ObY(9^6?r_43{Ck*?7N?-XcGu9x^z_}+5I#C# z^YdSOS)?&!!g9Ho;yC-Yoa{Xc@dk&-fYp{7Q816vv<)dCd4E5gM3a*N7%qdisr;Q@ zIW!RcRLrw+@%aRatt$t>Mvu?Y3jd{)8b{NG zAX@ImA;u4P=HprW(TuZ4>yo(Ez=y22TBN6Qmbb(B`?F6W?U-1F>+`p#_n&~<375t2 zPDz!g>i0DC)G^3wxzU4kPaP1YO_bQ9SG&F%D?58o_;qY@N^JyHSf3l5NRGe7Gh9u5 zj*n(H8&kq5pMj@p=OHZJKqWyd`k3ZPJHWc$p%cXoxezZCC$!Mcmt-09g(iw%naR3v|6!)lU_=t4=3d(1X;qL#AB?MkQXm0f?DbUmIs|S@z<>)lRR%?A~gEpt~1G@il3m~#MGef z7|Vo^>kv%Ii&|ljg9AKaYv;A~KbXssC3!AzuJh}sZ}PZjKX8~}6>M4An%HkcL_?g)C(*H~m$G}6`RN}hI1^AUf zbk7>mVkVf0zwZYjsLn0}f!G->buCY;-@j2gFvw>+RWE1cij!#(1mv0NgI36e*R7^5 zFB4JlO+kV%xTfE1;g@u7&e@qPs$Q66n`l05KR0ra=Ix$BV&u!$N9$De1`1E-esaXm z$Cj=T_#&quTFytvk0q_)0z#RbikC9P^zp#)W%$0O9v}&#o+tiQe@P>~xBEC4c6YN% zBGEJtJN*$EoG%R$TGNOokFm?MX0hOPQ&<`Pe(4n8}zkr76uD(gv^61oiu{_ z3>hz;&IJH6Iyqo69;$?PbYI%j@SYsts1u%j}ZFKw%>hJ;5!^i{oj{upOyI{(4=mA)lDCCw-D~u<;$wCua;85}@ zd(uhFVp<`VT(*{o-1b2|=`cdNS{-b0o*|qLJ5`^MRFphsbBi+j1^>KAX}`rokcIVX z6`4={Bjwq78iT=ax6hFwxse+V# zCQ`H$^n_$DR<1vhk{1w{V#8`W)$M$TV-1@Pac_l~HgRA_X%1U~)_^rqv?G#Dvc9y8 zJ%=F=zNI$Y>grC%siGnuRjZXIj0Kq3O)*>(I=f-O;U8 zdWme)bi6DUPZl;G!DeKV)7zpZla7+FDq9Xas?qy5tA%Cy?f_i<^uc!{amh~*&L}$lH^K}N8kv__RNqapuH(uOeTp81nto06xmP5OrY?w-;)iTA#^co1YM~Td?QQ9XL)ENcYg}V*Z@NYc@S3rWhbhLvWus$;#kS5q?c!sq2Mv7%3*vX+T)?DN3d6@iRSc$^B3 zPukRq9K>oAsnXuXZh7X|=NfMb=wRFZcrbdXj53fv+^^J>%&hGV4~TRCfS-2u&BRH7 zwes#o=Nt%}t0l&94*K}&VNj0O+vRH-1hDrj+Au7w59Zt3z@_jY!_M0nf(7r-@lP(- zs6kbT{HB500l5u9elHwMGp&M*rGvN-Ov-7U`@rz{I;rzxyNY?b=UkUK>h$Gkn2#K? z-_AUHJZz0|IxZH;c;s7mH*cXPd-i!6GG}sVDrkg;?>KNHp(!;2DHN^%IRI94w>LSm5_7`i ztuYI=ISG#ex2VK$3NUm64x&r?(gbl5SI9h>HIIuM=?2gTSC!5wJiyY1OX^gBZwrFh96!Et;I+e=pMUZO0*e4d3j48^B50N; z<%yQ$$iilP;ExQWB8qVD&KY?IJpk~D2E`u(wE@lbux_%WuFpG=6A?AFw6oZO4zG_y z;0=e8{msD+DuA1ze5{%bIscBza@~JlW_KQgaW2B1CjqVW!SyLFVwS5o!{@llRd+9Y z=c{Lz5$E?-u*CJeg`#Jee-Y8>t6-z$Na#0k!F^VCkBB2;j|#7{9EE|?j1L9eruS7Z zvN7QhRpIj!ZzgQ&Rjg)e!g(7P9WtZw+Ovk8+sZ}jnd(Gm(6>3Gy6th^g;9lcLDyQAbPr4S=H@-PYt~TeD>ny zITQMLzZ3Mqq`=)p)K%)irRwu9b6y31?6!FG=aU+#?XYVi5bTMzejq=0tHNwaBQZ2Tr?`!lrx9!aGboPhp@hg zddS^gSMyFym83#l6A30^GIyi_LO6wYN|;D=WhAB$}@ul z3n-t?e`K5z`Ap)ib-nhIESJ2p1K2?&^$_AXYEY4mt^u#nag$odvhhWe6YVm^tKhy> zT$a)WPmp!{Prnd1&{)9}UJmikaoJcJ;Yd{1H4HF66klM2H;n8(_8=AE*ozDjt_1R` zVX~~G$Xgm3fn}+HQf-1)fOM^6EE;;{sW!zmC$w47`%P;~qgB0&OH7I7<)#f~X=>oq zbc3PuZx0HZA!A31w`VbYOK*aVBQ{rTLYhWtqi#!!$wcD#ao^Rv$4G_Ki4{Ec+c}pHxYl>NL{Rj?d4*#^%TcSiaQmv{7RHrSLb}hDuWdS8s3OHV zgG{Nj6;k9n+1fj^{HfWg9@;8rO?M0v3i9Vbkn#$NuK;wZ`w^oNm#|L7yJ`zOj=9M- z6OkR=44K@Fjs8FCha}d4f|Mh=1;^PQ^qGz=Z3fr)4R>!14but_%}L`jCYJ*u+M>)D z@fDf}7TE8rp_lYC_`k#~`pP1OyWtyh{%UNS>TH z1OvZEcV>j+ek0JowwT0ywRVnC(l{(ir`IZs-u0(C892~A7j>2fkdoH;F1OHpp1p*| zxNgPX(_5WGyJx8p4VMt^OGs-zbSEYDlp5%j5%I9`(Cc_wbdILo-zCo>;O&%mb zU|PrI58iPXf3S@|F=iYWVVHg^>xC@QM4_!oo})_GZqq()Q;etXNnLbD_PZDx-)BR1 zv)VlOrJCUKW{dhD1bMd93bN8UV+D86IqptX`_@(2PN&$jpj$OBBisFnJ}u|h)AV9l zYb&0{oQlovB-9yP&cAh!aXF#Z3O0afcLMWBiu1~FO47}FXop5JNgxHJt+~XFpoXNK zD2Kuf&Xl2h|9nY4jUb0i`CUq4?s{CAD?zLu zA7jLe5J~BMLc+Abi+5!1GdU|mL9OLpi?z}%2mOS@jogzFT+3^dMr7mTb{1vyss9qq zFU&`6lbWHW4e?N^_CQ}b+a{7?{pW2f&oz0YPHC3h0+v>+sd?V&&f<9`{VR@H2SA?! zro6)~5aR0O!#sRgM2PljonMJR{7R$Dw)FR(uG$$zzZ|Y?M_8^iF6b8XGvi|uWd~f8 zIEFc!eCYxqod+cXUcu3U{_VyBqnIysp(M(~7t1*BUm4~#ifPsP`HsXI^a4vv@>xZr zJDwvt$vfO{MxFOrp?qLvN2Mlm!NKhIx|5lmJ1!BU+d-*RvWP8xhiQzl@P^MfBD+ie z_)p!qPIni>P3kk%&fFD9Gc`ARmgoCw$ab?fq?1N8^l_%ss@5Rb_3nD`j_;QK>BqTH z0#MnS|A_}|s|iEvK4EoKz6=jhJEQN}Ux)ZGQJjZ?>(E4ip|u~Rr)Blxb!Z_UlA!^i1(y0jg$IWD_a8&C57uUquw z{yJB=*jC2?{*fzww@$t>e(`qw|1Zrw4?zc4#cV`AaI%teQdn!t4`X#=g$NRouA zD?_<(S`vN@5+r@n18X7aPmA=ZvVR?|5K-2#O{U`Mf!gYRq^XnY1T?ayXymoxHUpom z9Zha}g@k0aR#IA0h?+K1T4WxH711Uft82cV8h<~{`HaH3+CJFjy(725m;MElfiKil z{Gubj!m#Zof6zG6O4IbJSXc6j8CdiMrTol~9pBm@oUAX3=rLIjZA-UhP*bC80)kO1KBvDr(ABk_>fAl;EHh4d zI<}Kp&pJSU7j(qsjcQNBnOoWhQ>p`;ZLmwdKg1<&{0>@K8Pv}gJ{X<7*zV}9w{`ke zG7CECAAbM4BM@Sjo&fl7@Ui$AsUh|mL6+9J8>+TuU|tLJMfmPosm$jEYY+jIAF-MXGC zR+O<|ZpxAf=a%;}Hw#~VLC5bkyW`XUleI#%lEj1!Q}-_d++_B`alakJ{H*SQu(mS* zjqR#8t@gUV1+Zi@Wfo)gIo;^J;ax{|hsFPR8GZns>(DU(HKir9KG~YqVA#{~Fv{B9 z=7OI3oGz_pf1SEsfV|DPTIjo_0w8d5JCx30Y|$`HHESxlnaLrjC%3-nfS(2N1$k8k z@Y?_|Wpl#M8NtQwii!wI@vdZP3(5o7v<0Hf>rjfAS7NJU z05CiVo86!jS{FNK3IHuwUPDU;shmIXFztBS>Xt7Gn5kG!px{3%qw2r9WHjKu2QWE| zTX*_GR8JBF7w|&o{davENR@kaI<8!LS}>pLqx+A}R)OZ5i@}V|uoy8v^cpg)5g}18 zupzL!lY8x%@KD}HO-v#XuYE>OdcPKS2oOR>SHKL12@pOv07qbV1Eu$2^Zky+eK-y} z(ePIZuNY*YC7e`hSYy+^;_+uUIDo}lE3bag?#aDR(VpS`XXl>RTCcfI{aWAP7@E~f zt=~=CUN>%IThFX$6~BJWEok=*+~>_2`w(9DTLYtiCjTKg4*HIs##P#tuN8xS51*Bu zj@u>x-2N-}jzJeIMU!jWMn{La+g>uJzy8i{yvwHA4Iv8l%j9x(IoN$+WVPEwt>*Ws zmb-Pgt=s01-qdv?@3o;)+PrFz4*SQD>)+C)^QNn;9~ZlMD(L3Uo?G88uZ=KOEw!3k zgn*W=A=R=aOE^0$-0L@&D*mq&1-pVQfw-ub{0)odI!*NPJ6H7l`c>{~UiYnY=lHc7 z)4nw!jBnkx9UO#d-!?|;*G>Qw7f`RAz*|;bH%*+0+d6=&!ksWKiO6#`~-KnFZZVF zhIXDk(1uI-D}HOXtzc#VwM*CtHFoiy=rIOCSl|Q#R|A+ozCO(6$SW0X-&t1IwvZ&p zyz=1p)&eWgf^WKMB0%YzSHF?^321>HcYCe-KKPV>kX8hQU<4X7g_|gB6v-T7Ul>lYi7-hmwhk5k;@(Jf1z{((Hu+f>62a2*dRu;7EWZ^ zBDV2hLm5^hmptT6!NI{vU)pl;p@?N5k1eg7SGw9Sn#E$STr(7M_HjfmArc7m&u+fo)zRv4@)tK=H1J0xxHTz%cwIQcG>eKA{j;FlY` zAFsi&m%q+mob*3OQko!S#R0c+)B{vZ-`tgh%=X^>*Z|(i^^w7u^Vv2$AmG7_>iB_l z)&c{xe3>#f0FbqKt4De{3t75@II~bMFe6oG-^gDS zmC@(CyhuaU(UV7^KmoIEqNF~nBWqAdGL?ZO@6|qj+&;>A#P?9^r6`|ila;-GL4UxR z%}!`RZuU>mnY~V1PwIHEZ9*21q$3fZu*9~#Ih!0rP)$0bR=Hgb_`PA{I$wy1Hri?? z%nHk;USqH5y4teuGYMag;z%E2CL=EIc^o+3l{mT^f~v~x42DF{MKXAm94HZWaww^x z2>gJ~NxjwDpRKQkFuAu$KgUXU3n>kQK$7T=o)3As%~p(WBA|&K1IXYon|lS&HX#r0 zV{dLk#=~=aBRicJI<2>zLyM|L=^2c@)`T7xea@cn2dnu4Jr1M=!Tfv=U?&IH`dt`^ z>8~?HmkAxc4dPzmq7w{TiVq+yNp{QMDpA{W@JY^0l#sDy9u|hy+sugTmvG#WEJ2=0 zDPp(@EyB9|0{aFKY&xOkN%WPF$k8Co2X|S)Yv7Jj`Wt(J|Dsy2fLpZ+*?~k$)4<^7 zIbakLs86ivZ$_Klz6HtYalkj1(~LF2`;ypg+KrGrTEiRr_jpSV@fFH-HWsTSD*ihv z3Q_soRMkQl@D{|H`ZG_d2YON1XWbql#TzpPD5^1&NS08Nlq0{VK*KlBhRm?zeI4_n zf6%Z0EVAoLZ&2(fzS_C8do8v+qwWjRc1+&74+4!J7f&-fc-$u*qgJv zNzf{DYCWa(8)}U^yRnx-wX}(?uVU zK>sN=P``{Gp0nHvH*vgUKtW0f7ytHdBo?roK)L*UOS5ctOG?E;ZNUPzAgc1oco?tn z>}8!dUpkPZFl6nt9E=K3zROCYtQf3kecXmKvq|(TQzD)7L zVl0X_Ora4X02ly@Ly#dz89)^ID}2`L5q?Y3e;cn&sna11T%dZnF|_t!XRGA#3JBDk zEIzJ|-rmkImFem;dQJq>kCM5(Fq{6kJf-2|3Ne$sfmU@aE4gB@fPUx{a%jN(SXqG! z@Hbpe0bd1z&IhcIi$I9`9N#b4T`BM+h}|^2#KOEeL)jkY8TddE$oGi(9nF zp97df{y~&($KbhMR{SLugM^o`$ZN4U3w6Xs7%RFg{UcQsGi6rpK>2&ovOk&sUO){ ziV@w6y^N_W?DI1dCIsUM#SX`E86t%L2zUEgu({0=MNx-2BrmZ*sffz1o-l+fp30Yk z`kH|gn=!hGV_YIR<|LcchRZYUkY=7}x3;C&I*%AO@`Ah`^jyg-3#r{2vo>utxcLac z0b4z|DQy8`58=_&NG|En0=eY=Nx|^d-K>bX$1*L+dKsBPBJ*AvgOgF5i0ipPd0H>| zJCUngmGWWEmnNDo@=QV_2>2(xV*piVpdH{3gigqT4w8J2;($g=EiGP3h@sSw!9ai$ zxMznQsH^J3L(fTr72cb*+>fTu!|VNx?VBgcbecn=Ch`-m<-~x zADVwxFSX}YO<@EVm^lOO`^KGa+b3+b8iOjip}5gTJc(k-FbvYxQKPL_hgFiiDV=G) zA-#4IMp%ky*w(m_e$HcrO@{mQD~Fq?+LosMRkT$&)LK9vdEYt7Ju0|z4IgEq=Z4;= zlM}KM>Xh~BMD&jc$WBv5ft&<*Oq$pdzbd=sl{3x)H6u-RCEc?*+ere>8I&mPy+$+h z;6$^zTwY=en#^J$w3=k3pN@tTbeFHsV^!&ni$g3Uajr|xmjpKW0pYP+NmP0-wfRe% z3!~IXQ4K)Yd!=*M2Xm@T=_+TZlgoy3Ttzl=LCfbmafHhBRsWQ}tWVH$2X1g~_LOAF zp>osy^4#Mfg(-iBO!#3191#e@%2r6L*uJXjQZFSxpivyV$#ibBo-F-k&AaX)TwdHBTt~1)?ykwa+NZ}%M2?z9$2XFoA(bPD+TL-Dfm6b4 zLJXB748GlL0~J0Tt1PDK2X3Zn&*V5G@f4cam6)JMilCR#0&U)jaub{>jX{HdpGLu; zcY437FVT1zJE!G|`0}#`&P%OL968RuvJ&B#H*2cSnLB?B(JVI6>+>#I2dkk!k)``X z(9hi88IC0mod&Nvy}mMH6pWnoe|jNBH7KkH`jYs? z&XBT=pq2)AL#Clw^=JF#O^WiD+G6~9gK~F#hurnV5Tv1b$!%m)%nS4RWcW9xWWC8I zVNxR9*AM8d-uR+zwGTb(dB!?(HefOlEEr?ww&A@IA0dP6k-$tCp2wxNK#!e6DGf17Lzm~4*NEW7zX^M0pp1^WZWqXZk?)J?5)fayv}X< zwk#KVL$Gr8Z>H!1=9VvyPE;7`<47Jo{;mB2P_pX0t0jsrw683gmzaN>{AhU0QWq|Z zk_n>6E(1$@c3c!|HZ=1W!$Yb4K8o};RMkmw zE!E%wWt!9=X%;ywA0|)PWB4m>I2>|UvCH$Ks~&g3SFctO8bx3c8B$Te)KyOr#ZSD1 z_8ZR^iDC*O_cI6pza|F6onTJutkhX0x&i&v6s*@cRszPYVaQ0+{^{sZK>;}M33A-T zfJwo6DC*ce>4S@%SlyRzNd(W5>@VVb*Q?(o3FXQ{S%swuYk35QnR-S1HIA6T6h%@ZF^~~m$u9AZYhDOMnl>AAF_IB-sg1vO9uhx5ghrUR+NjBp zEs_hkd@;BFt%w5K(bSC-B)y0nw8Tx=xI879dS!6e+pMuYVrb3PLj48}>bhND!tiOe6C;MT z_L=3pU2396XoHRIoxM2~Qa;x~BZlO}dFP7VE1lTd_iFjxd9THU;vAE4M3*Gz(k%1e zDP)RgExU53BGWpr4PRl-jUH_2ecKnWH9|{^cNL!A;`RooB+e4>Acm(!yTuPnf8q_# zHv?SGcRVyPkr{GO!l^Sxu8U(cO7bnU>RG@FWDk;n3rQrflfq}+LqxnJRAW+rVj-c&n>i++zV89O2oni zbMwFHn+XGQ$i`Il&u@!_#CUynMrfD~}MMW?ytU@4-g+dmz_8UU#;&V?;P~sy3 z$_DlJ6Z5M4@vL6Zlz4m6t4*yNbNCGooE6H8tx%Ost9 zny-{c#CAe?-}o1-XH*znzL?zEMqMdKnX!ByFL(;b?7nk6wS(@X5_l9&tK5W(m*EI2c&bC*7glQt-;=g_IHmr zhY(yv@&7^y{)U`1u=6v0T?Ni1Y=q9@*ywKf@_o6(RNfq2Tjkh#7gs8E8==aJtxA}keaUZnc99?nBG0KI zc@uzf0Y#{wT$B$!n}BidTpc5^FYcFDq@Zz93??`uJy4oW#8Ts#<9RnxvX-&ES(>fZ z$W$=0rVWSWjHto0QIzUXtKu4HbqTqOJ=aG>oz>#3tY{ydb{cC)EPtlu9 z;p+R7sqTL&(M18UPa_bBs$9<~ZC5oSrIGhkB8yxf?s4H*2B{xvxbo(~K1rF`?_lQe z>dD&Clq86wghPmXt04Qbkfl-K=$JDj59a0MWB1Nx{_g7jH4kS(#CCV{0M0ThV8o5= z8*ShWMwAZ7hsRDIjTk9(zCQbdZdy-G*#Yp5YZ4utx*9lu)7_u+U~4ni{9=mWv0^G6 zUc}Y;3>LKQUNG`mBG~9oBBFJYqC0J@`QCPgsqm!j(K(bp`T<|eI1O+0RNot<1a z>d5(tlOqCO2@x0cbb%t~n_HUPkbX`H)b>Kq@?>CGcsg2$^n#3lzYeH%m~UW&MZ}D; zc{nV=*JW-Io@HlQkyFfhgh>f6FaK;~G!OK8H>0Ic_E?e0L9XqNO+#LY8PF!#Jaur2%Ly-oz?XTv6Iu zum_)Edn{A-ilv!wACY>ug+A0~C3`smvU%Qp;XspxXpKln+&;6-ol&ObLVdADxM-n= z*|N+9LiH|gaN;$tY||xq0#BfH>IB*=TiOU`^UlYl^6ARd(vr~_A&vVjUW&w&g1qA= zld-vpwk=Xh_52H=B2=FHI|Y^Ugxb-z-u60XK$2NFdCWH{n&#*kLwZAD8uH1aMn__p z)c{R8cuxH+jeW-jjXV14Zpzcy+~7r0oY(bqPQ>m~G5IjiGOWil5~^3g?M^Ph{uagvp;AT;uJ_(;3_kJi^E_`6c4jSv2b#ZN$-v29UWX?#SIt1?_F|N=Hwsc54sH-)nq!gzAX{E3K5z${8_UgX`*S zNPjaj9BA7aHLRG|nLfHjlD6aL9Qfcfd5s<@$PR4`4(=OSh4VKQV}=aF=0|`jNfCKq zDi3$Yz$Q2ckJnhTebf|!#x`a(H8y7uK0@=74F~gW1BcRSbDK-E1dVj9@sXRjoXH87 z-l;B#0vtK~mJI!jLcTXRdH^w^uux$5Kjqwrpr>c);yx=xI7NR z<{3|huF=~pslf zSijiS?bf8HXU=YWH9pm1%+klv)hqhZgMBsgJk(kBsM{Si``JFLOAq)~7kC(hDu$Gr zp7K$NR#ZgAbySiR6tdDrl8A=Dn)1_|=ph*49=nhX3TzXs%gK_2i1eZg02x01)xi}d zEX&y* zp@Qm0t|Swvi?fIS)-}US0fq@z2q7q%sLz1NOK<@UY>ucaCJuO1Vx}pBHQN*qOyEIn z)PR4$z{HnVcNs%;*f@X$k<}?=j(5?E0+2Src7R#T`%1b+_t3O?J}W7wFnT>%y5+V| z7S8Z3h;G(ef#h{OiBcPnsl9ZBSQRjH(@-{*7ugM(69jQSeNygJrbA{K#TI;%59(J( z7V?emKphHaiU*6q`mD=Fjgy=H>=4@}*pjXmZygBQe^`5`;M~GsTQpfQS8T1=wr$(C zZQFLTV*Rmg+qSJ0J14tN?S0RwTle9dedp6xb5`|JcaN`oj_#om_GYmdQ-6V4Y(^vW zIy=YIDB3ovp`8M8icMOO7*WL$?GML}Rqynj{Yi_X(yVJt!C>;v4Cl}$#Q97BeM3c_ z4jcI`2T8l&;^uf*9}y+d5Sm~xzioXls+gij<~Ek+U!?qWgZvU3p)Kk`VXv`#kWnzx zoYbn#$wgt#z%fB$ss&ncm&Fdw@k65*S7c2utiQT7zbkQ!h918n=@&n3516XSWxhNs z&?5UMuEh^l=Ju`;F%E@6$Qnipg(+9TvArIHmJ&r)D#|)uh`h<=eI!197vMjabEl+A zL4LIVd2(-$I@7pdE$}*Zssl~noP0s^ciywt6Y^$mFRKRwW6C|EM12cJYMj7u7aAer z3Dna8hF*-DO^=yv1cN;)_lfbvH(=ti6g;Z{;n;p7NtnPjZHFBEABsT8#|G>dvhNE~ z2>x;~to@VdT~cDho}U`C^!Xr!$+Nl7lLOD@2sMx*M%y6@$@}J{W<$#t&EH3|=Hz;t z;?l=EB`?xu)@&3zp4^5Uw|gzxZ_KPI5`JsBw~AM9kcKcF@k=8;vEwO)$r}dKwjYj< zPPv`XI4qr%gUB5%lD#q;r|Z?b7X)_F-9=YeDT(3u{&sS78~XXm3A?rQq#>!e#LVSd zT_dhU?mW{}0GkeYR@<^MO64pf#+Z(Ss8v$UF+AYGAKkaBe}Sl(ffg9g=`ile z(9lmY&Hd!7>Ww{$5B@TP2fmtSCbOcZqp_la&F6+A0C&S}Jze_NJsLyY&3cOc&9CbF zGa7flZz;F67%8WSrSW9qe9Y4+{5B3v>ktmILj<>}H#Gmwv7)?_iCpPCcy*`)lBU`s zFgVLMG7Ck%Gl_rt48xCP6MUZTwA9GdBb z$HJ(-4@MOBHJDsSbPiiW_@v%+_O$m)BI-5&7UegMqeJ ziU@`jcu}^)1A6*TB#FAjTITMg@{o+2D*l};gv9K)08z@=a{ao8t!J?fhQgNhDwG#S z*A5gO#F8?oRB?pN1}})Pz0@dY;$X@YE-%g3@;V`{+~E?NWiZYk)e7twaMjvyBe zPmg5LnbFd7eht6Z^AL-udGF_UI+nj_F9)E|DMT&l1_A^%Cef*KPHC#Cl~lcJd))OX z(HH7EZb8sUU=w{-`w9)sDT2XC=#qL3C%s0Z3b55jM9`R{DIuDSsu816iy?$iUza=| zGt0CA%1i5rmije;@I*-}fxGC6f3r=}x?2PB=)609@3MK~s!RzOG6@HXXr*QHs3Zr$ zq3e{CT(7C!+i0)A)b$J-D~~CZCzMXfUf+4VBJLFypzV|I!OPGRg(umpz0 zcYpp+>%V|{JM(84D^Cu;wUc&N5J}e}U3rg9OvRK?yJW{xRfiCb9K<+t(~bu(DlOwBg#&%u zu!Sbuw)Ko3Gcr8OQ4I2guR#}C-zPlkVuGWWDAY7)ad%YR4V+;EH=7;7f!z69bvnOM ze4_6Nc166Mj{?E!@UnH#Pdg8Z!?iL^>W*%qqKh3A7AHeG$J71+K2X~xOtdb0p?S=k zl>i&YLSn?q{2^;e76$GBSn}r=#etuRxzC@MStquu1F#HF$ss@Kdo8lKjWcPd0{zA} z{f}S&$Px$y>kX|w>nith!e4OJ)Yx^u#yBLO6Q7B{%3z~3X$o_J6e>25We^ZL%UMPH z79@G1qC}>&cxeYe0Vrl@rcR!BK#-f${@o;%FbC`+AJF+F?96>KMyd$rj4ybu_eYu%j_$j$wMFEaoo z*eRB(pgFF|_HVxY_biXc-IGFAu0`IRo545INK-le{BA&Il!P=-7tkGBHO%=jlru&j z7$8k(@{$b>cet!BlTe38_Zb=6pDrshNp2IHH$8-e+BQb)YXDp#^OLL$sPLV5lN$zU zc=sB_BHQOR5EmUW&*VldAZfVZS^Ouxlek!fmfR<5uyT#!p&AEP6Wk8-5V zt_w4>Qx79jWvs$;L>`qvG=kaSrdLjdQdeoY`y!KkA{FHtdvV(w-eH}SjZm)!B(@Cyj2^t;(MYKnQZnUR7sK2?> zG&RZ&wRz6PNihrT<3jx89@U9t4DrZD);ePI-t=xl7crz_VkD-4`6dran~L)Vi3YwQ zPbSQIc`9*EpczZXdkgq=bh)e#THQVU)`OPCV3PdVa}EA#y+E}+AqJLy+K7CEgTG11 zl6PvBj6;WLK=g$u@~*rk{H^zuFG6WnojlhJqyF70 zvpM1p^eexj4^RYy85S)MZ$xmwNC%6L%3G|vI|%?Kn76g6N7J#9E9uK8H6;8!7Z+41 z>;U8q7$n5`E<{I3nJ=#LOg$8=v?9Dqyw)s0gLR*yllhRkQU{ekQ-5IGV*5t}>ku_t z94<1Nhv-U7JV(W1PAoY3&r*S(0&`$2Eio5Ux+KHa7$)mtgH8Ze8JQ08v@0CUQ-D$P zT!xQ+T7Pum8mYNA=uBQ9I-kbOZ|?%6Hdz^wmMEc$vj7VtbZGUQVg*!gHd#LrQ0L^@ zpEWO*PFK=EAh~5l_v<}&CM*41%z(9XN)R-+f{v2WQHLuB`!-_w-(EU(o$F^?S&Q@V zDORjeij09>?X|~5)565UNsOv#@ZYS2K0(#?O5;cDGFImS@~8tr8d9sh+*$m|yefSH z#mL8!%S1U;sdPhqP*gd1*@ErV`gX2MoqY*x0)KI8%u_y(fBPar=+!kjovwl1kS+?g zYU-tqnQIoO#5BFJywQcBvHgW`ih|t8WSt0_t-}t2=*Z58R< zWRwJhA;=?N1bSeDj_Z-En3La#)vlKOjR(_S%%BdeR9zSb6J$$+j!M?m*L;1AREOiCmFQPhUmKA&hT@c zO6NXSE2jf9$>402{9;$>9qGZl{)+gV%9Q@~Jnf_=RZ<7miuu*^E%AK^!2$2xU6sgc zqDW#9Mh2HWNT~FLXl?DIDd`CrY-)U3#oey2(nlOi1Y}gy2!ra4C>jNoI@1;7 zZ|w!Rls=+AC2k10lFI#=T}1${KMk6Zdgnj0cC@~CsV-pf%12CzLu;o$jfZv2ICR*! z4F5a%0jVb;xHgtSkiZ|UeM%XsgANoMs z5>btc*%Z|2@WVOaNzTA5>oyrEgLZe-g5(^%W}80Y(+ALuv`JE|WR`{kYnseqOg*O~ zjWo}U{tmOUHub8^MHR5ELpZSH`P~7P^HRc!y0WwLoaMmXhzao9b^R(xb=>jOv~I@g z%QEpMl5!!Nkr==p1IuB`P6Pe z!L^I4nQnLTAkqaV=3)Qpkws(4SBzZu+_cM_N^k^uT>CcYJsj}N>S-U5P#q;sK0QBi zlF_2Ir?8aRep+RD^el>&@vu-opGa~;pcrC9O`MY|9byhtY zN2gFw5Qf%Ks=ltp0OfdW%kiX!Wm@u@7dK{z894n;W~iFIk!XMzo~pZ{ES85(MerfI zj@b~BqpLQV4q{q_LjWzF=h8nkwYy{sCO>$MKhcExc#&iCvc$b(jSqs{(J0M511s-P z3f*uN>+Q2A(`Y(3m6b7nlarei;F=l3c7LseSoh(#u?tiDx&Fl-MN8ktThCo)#vFA< z_(YCOJihKZIN*WkY#3OE{iDu}fy>YGNdS#JtJ$W?H42ZI5)WtL)L4|uNtk#w zBvI0+8>Km8t_{O0oyqk%p3M;gt%xc1#=RM>KPeGaQZ6hE04lE3>cQyai*BzR^Olmv zmDrQzkJ~$!p30#b^I|Smmel?m&P~Jpm{m3j;l2MsgBl|pgAo8TvYStuDD%g-Ci1rXX7&@IS z=yu1docUDBKtqWej$Vg%T~Mi7=#Zly)xK0xRxrjhJkNR8hce}NefDeVpL6D7{gEy_ zE=5*9s>@nT1IjBl@bBhZ6T|4@+Ycs>UuuuL3#E*54uy?m>C<=t^Z07}1WF#{X``A# z^2#YmsZjg)wfRx!(al(QPwtv2pau+`gl6FJ7PV1a&fJ=02vBM-ggMT|CL0xMo5teu zS00b)BzUN2<@hR!u+aC|1GUbXTk3I0LXwfFWqqZzW^2Ku2!gp5f!+`0Rt+>p>LL_6 z#jB9z%KHRS4>i026WP21afqu)o;cLULjOkV-BpZEGDCuF?5m-&WhBhB_O+4OSLXF= z^+hnPmFGasY6UCQW|`sbZuLI%FDX?SpBXTvoT(CNKRj6{7Wy@7FNJ7csl+Uf2C@92$Fh0 z_I+w&uWSpKW&JaJGM&XQdY+(BfpSUAs1&!TE{s(GA72WB@9XF`I|%yZZPckZwnwsh z+m|ZrM;BvG{gA9uPX{H7DGC#Dh{xzq%np=Niqm|2RuxfOlP_8a4}EW7CV@II9|LSp zQjyz%V2B#;r6rmEQIhlDz%an-pMb_>1}?#Kb4{s!`h8a6G6vHWEa#~d3G4@;9)Qb1Zt0eypp3diuqUAj)fkSZ z3+;rq&uzUC)hNlk*hb1po;K``?c>-f5tM~18B~VyePL!|!_($LD}pUj;H^-PC~YXV zl_|`kselvIq-Y9;SU)K@USvAFV1}0l>J7P4Sq!qvuT5kY8LbyX=osy&ppkg@7*M4& z(+9U4d6!1H>n;LSKT-5jx=GP)i3);U&bppDfhq4)DD1}_3|9o#pe?I#SEbJ(jA+|Ef%f3A{*MOfpWpG(ehA2pYsr}x7G%M#F>S#Gd1^g^fQ!^w z)oc>;&@GBN!-oH#Mxw`^a zBp(sYLd#n#Y}++&^-(##bGouMjI@B2^HJd8$vw5I7#+6Vp=Sphevuc#S@1P3>jqpn(Y?xp1fNgHp6Gr zGxY*h3=O7hoU+U1pLjs4ShY#w9#N{ysGO%C6M1;&$tM`5kfEh0cdHa=NJY}`ltDcZ zd+0Msj*HDC@65^%%jJ3?E&gH?i{5&jzr)ETW^O$}WhbYN^xhH7Th}yZ?u!Sh87Dx+ z-p(t_;ZIf$K5ID3veTN%)!G`qkhNkq?`g9vl4I~GQF(~0MSWxn;68PLy9<=sY~Lcm zs{X}=6)N1w;6Nz4D7er6RcZay+Lg>A7PVa-ads=qV(qy7k%`Mc@;7n3V6IJhFmfvE z1jS+tpoEBTo;Zi|l@)YCxd0`7nVDm_PsHcXk8`F$4v)0#ij>@nh0a6LJ##egXu5~# z9FqL12v_*)cu(S*!`;{jR>7KHo});-_RAh*X^_QG{lanavatp=Cj+i@(0{77mX#-8 zg$uSNVX(<3GJ;U&)KF$#6?(^$2I)I_qiQ*Jt&*$gtX2J^gU~Kx3(edwusLJT@Z8tR zegQMKS}P`3=!X(WLmX8UPJi8v1Y@&8iDaHxqA)e_M7PrA>h`k#T1)0v*r%?Hu)x_x zk(a4vSrcioO~x#PHKm4?)maowzW^Q}UR~ zYbT>3; z)u()T;)v9?@P(ebI-Q!*!J)4of|8O`e1?(4q&)r(sMsQtok>}#62omra>(!sLnuo@ zgW(?UT!f4p^~(a~?HD#1;6}7DADNe4GAz}wVIvQ*n^(8aCrh3)#>Q+94at&#h$>+j z1xHIB{t@Q{tM1sD`0tOj3nwoxm3}jb4%x7RV(j+RQ)oZCdGm_$gvK>F$c&NXnEQK< z3=v!w`b<*xRnMq-kMA%7a65)CHjb>*zI>H17z?sED^nbMqS~~e__`_ka$(7oV4G+* zJGdcQ$KpJNMW~rjWhlalssPBGdcuuRvD+mst`yBVMG_sK-N=9N!WP*Z@Tq4rl2XF* ziDmiQziBda=ch)u_OLxo=6t^>LLKD$oMQUm0tAZw{7`@ie{(m!H2S`*t6OdpNfMzN z-)_HV2TxFO3hW|74IvAGk+V&P)x0(qYh%ryK4bTsvwDkEy-T+8){KlFWY&2Qc>z&S z3BB$wh)3(EoH>*RO?Fu zM#@AX( zwlr)V4xz=LXTXf0$!m9wG;epqU^M-aysG$|ZWi*unML)yVOZ{~9#rV4Kg-pIANVtS zaut_Y^b*-b<2;;SBdc8)?5JB&nT9)GqK~dmnR88)k~m!Cp`)5F?@nv;J6sod)ekaSe>aZS#XX8g&p>y&i4x;}5QycvM~7 zT)VpiJ#QzF-CJ9M-eH?ng=w7J-I~w+!SAVezR0_28QU4%2$Yl?Ysk2vjpk-8^2oT> zU~Za7Gn1YNp{>@ev8x*Qh?}U5eKymM<^9opuq zvmIt!C%sZ{g{`wOz5hM4=($`+i9rJasj>dIGmDe6<4%mp)m#}6baxjrd#DkCd&yjSuH*bc{ zk-v(TI55g-9a^PtC9o%ak4(VwAO9oH4mBEEBP=8)h$6@c(?F9RC5*TkfZ{fGD}?n0 z1!Bq?(i=F1!5o<*9+UuNGyksF1G*ZDElVC;NXc~I4se)Y4l*$&l8^8&+<3w3a6AAK zMlsuCHy5x=PsG&!Bb-2!c_|Lu|IZp_I_R)m`IkIuWo;r*R2H>>>OEz+CU&0m{y#@N z;WhK4yfpoHj5j1k{D6vqIqEHS4NeGwsJo>^cZ6|`RqU8!;BtzHTyj}QQyk(Le8E+J z+Yodz3Iso*7GP26N&->==743OpkKk02h;@Pj2e+JKrsk*#?U(BXcpX4-324}2!v;Z z7)GFdjR-_keX9}5D8&FxV1hOt((qc&Yk4Q~0JDuc@X0)IiyeM4l6I3F_R0+>i5W(? zbI1Y*5Y4uW+U66@*`G2k-6Iw^9sMJ8cBWY@7yra?&pGDmg~j zaI%(~Ri%y6`XC$Tg0G$DJ)#X{xK>;!YQL}`rQIxv^%6R?G|15Z9R#(tsGf^;YBvlV zG7CJ7#xun{w<7IE9f=V;ltD{eGQg6ifx};?8qXSXWMPv;neYK#3wzv)!#s2>0nsrq zE?p+Tx`fF)JA(q7&rvI%4y}s*u!9F1C~Ii$QzZrFucM5Cl3L<5?YY)(1(Vj6BPFp? z4|_%`@E3Ri;Qrgbgrum7r!gnLEt41mp|;6AZpKEA-om9#bELtcEe+w1P%ZrFqJDV- z_Vzv_aW5d%DX7*wYSUu?FT@pshKfj1NC+~VdW!}gL==+Q&8j$fp?a)6`2yvgW)PE6 zfUeI$dKai9JPfPW({T?&Jx`j4v2l~~PHVm@*d^Q)79(;dOb8OH#F>2ItZVbO{ulGx z35n?sPZVn=RX%a%#_VQ$vikd0Eb8|B`h!1?FE(jcoK3azREkn;H{F66s$}q)Pas}# z;Th)MSEgZ%y0feO9WqAVuOE>8>tKM~KkxJnH}2xpLa#O641K|4nNUqlE$y&}@5}x; zEt)@0vBwTGN5W^yl!owx+w1rpWNIb5`u1}I1Sc6Aog(?v#4{c=>{6+cbjjo&myg?& zv$ae`T^NOwT9_ZiaR=M+qggH~6w1Mp-9d-`M@J6^Nk*K@x8aiQEHFdhI~qB=R;a?0 z93K%~_Ac*WJB`)~QN9CCtvS{~{E#ox?KeKD^*szlnzuSk08TRwz9ezThn~`tK~Dyl z^{)|pYrLHpq`Q9A4uq_iHSd3TE3T^hFZcISOD$rLBtO;uo`6&hgGGME81ejN$^ zYk&`OvA#3M3}KH;fq`eEi~xlKLm_Y}3)2r7jrhan=K+a2kE28ogYK;L`Iwm%4(V~> z9F#A1Yh;P6+Nvu>c(J+7*b5HJ&YFVJu!F=Sr*MKD)D=qIJATnSxc3_T(X5uV!`J)3 z0zdwZi;2>u2TQpHQ6!K1no<(KE|D*1Y3D9!Oxz}pO}i+4G8swoP3){=hv(1a(~T%M zv-z*oqY&>c(T;BJc|)2+GQ&;gy~Vz0?X`QOA#k!wn{fQQ^j7lP#FN9fIC$gdk+{RFVXWU(CBUwSrTtMh29~iO zfDvR=Zp#@x6mUq6M_{m~{k-`8As25k+U1Y&+yg{owfr}sLtA-2j${Nc&la7Y6vz-r z!TW8}zSHODk#vamJW^dXjOSg=UBx|DX48JK3IU!l30Vb>MeQy#^)0eRbwLHCKP}*0 zef&&3>vi0=%;%Fdhnb#l{d0TAuqUqPtmGw-T1pYSvD<}jrQj-+1Xh&x%-hATa>$Jq zf4D|nX!_fIrmi@YceTofV;bUgmC`CM;Ld>>Gdsuq(a@z^lP}odB3DDIvv^)iL)Tf{d;vTV%RCsI-RhTOvr<1d?ReWt-?@X$U@)2_lwf zI;tUIw!X^O91vQQ(j9j@B16PA(#-wDmfIaNSM@zm6uO$Ld}wd7^gD;8 zy-U+>vD9vCPDy=hT>hl2DULt45!)IH%N#IxJIIjYrwZZ6dUb!QJ=?=AZ}$JCPQq|~ zjXRu`rz52DBfwx)NvDS%HNs?fpfW#jG>V>MqZPX`*xs^hS;_Maq%^%CQ_dk1P99Q) zLKKzg>Dw9nW1w#0ZLy_uVC6@Uj;iP!CCEu>p?YVeGI{Qa6BoLkW&+)3>W7nHh+d~C zxMG^BEW>Y=iB~ugr)?w~yA)C8GdWZ#5HmT?2%~2&Q`3Hb4(PamUocvWFZf z$J2!R0N`Taow-1&ix#xCK>7>ReLeX%NvX`*7h5*#%E!-%J6dU{IdqYs@(-WsZQ!Qj z$TdH11Os7IssvXRh_-0sMM3dF0Y zHHSP&{&+L^FY=$SmE5&Ug&Tb3OH_QNbS3}Blfb{Vz~?Yv5`JA!J9)C+8OI`uLF-3q$IB57b3UPX(t90L%9j~fC6npSOc#+Jx?iW$W zSLH}5qj!Zp?DhHHGgh>DX`QVwp8EojW}XbR)*_H{X`r~vKF zypn1jF;xx)fT8tMF?&DY|GcOI0jau2sr^*F|Mk%QoRpMhm>5Nw>Dlz;9qlYljGUEC zZ0xNKoK5Hqo$TpUrCFGy>DB4}zxt2F=rok3S?7A9+YcRdS6BUevA>lmf7#URemf?t0YSRd;)Ej7QL0= z27oTOkX6mKwwOdpyX0jg+zw*sQ?Swr_9R`!SbEidw6j`#FAsp!yW690>AeR87edNiq!x~$+FMX)cICR5Sy{Vz59{#yM|L?LnuZ*qfWFFkpD>D<7S+Q!03TL32xTV5Ed3u zy)!k~LhX2oNnQdB@cQ0>ZvC!kM}IehlFB?14LI&X|JyH$M)tTv>AdnM5z0k``E{2$ zsKcZ&z?j&lg)zVe19u?1Kz8D8NZp~iEwq>9n^c?qR6-5;D(59je4K;l;f5t4`F%&o zuP`hd&C+|vM^e`G+xp;Y{b_yWZ_LR^jHersOmv4{;nT2(@;q^uX@(I=1M|65KbKAH z-PrpA)GO%xZyj`2Tc?xrHYeUaDSbp@LsQuln? zpS6S5@{?$#F!F6%>jV~LNxU~zmBe1U+r{FEtsk$qClj9c)M!5HLs<6rtq^tcq3L+U zO^!qngX3|>6{3Hs)i+X;r-<5fHq&%pe$jyQsxvEOt4n2?=DoiDVH`Y^Y&_#9G83Hc zyl_BT)!MS_WS{c3W}eaYgYu_UhNHodwA}-u1UXvBSEj*{vbE+*%`XX-KhI{dGE9Y5 zhoW5}Um5GrZgNfI@b*v7isVQ-{8tht^-S?e0_nmt2MX^y4Adr6-e?vcN|7N);o>nL{DL8Pa zrucK7h*~xXuxbE87LQ&P2soNffL-O1q82jW)(wEoAi;_Ijc_m96y*tP^vmz#_1uO= z@9S>wKFVD>I!w6u0tRpOSI&?Tfn2h7NHk??Z9LE;W&b7vdp%%>vmzeI}d-YqDQ&3y%%98o!Pp&?!y+!+Q$fFZ*>UNfrtlhSsp}ZP}e590Ky03x&b^bter60tFbcY*>dlsTr9| z$X6IN`p$N#p5^q5T;h<)zxxBugZ*<(`en}5x6~7s? zT_YzX=C0MAS;!ARcKj^6vr7eQIti@zG)WEKmarh8rXOz|f1N~W&xSSxm!4ge2IP$u z_9?vvapz`c2M*p6Yw+#R6T1uvma+wv$5L{h5gda`wkGF z>xXY-w^4vqUonjIZvGulB1b0yf`Wi@mW@Ly6-wMe6Z)C=Ig#L|_<_XnuUVBJ`!&{k zH0Ox_sTJ*~yr@tJDz^N=!B?Iy&$K1DmfZrEr zD}#F{JmR7hziCxk3TmJLvL}QySO{prs72c1U1${5Q-?H5UKDqRSiZ;*$R;A`7<)pB zMwKKaQxrAB-_Qd=yk!kmnxG>+E|e6D$UDm|jg>}Dsq%-}hBBKo37Xh}JQOB`G02Ij zMiCO@n`utYaHQnNE+6B@5(#7)5Y~DmqAj#gY?RpM3WK|FP0?q=tMZw5X(3cX}bU$D@T#2WGE`Ai>enS>+Xxm zD;HD*3+EnE5daI8rHRz^kJZqzaS&{&6E%oM;*?ZjsOgc9VOD`yQY2P(Dx(2lNR>Bh zujr^)D1u^0xBl+tg07a11MZ&Teop+ohCo~WC!M}_bFFD)BngPLn#VZjcL~#=3fb+8 z2u5qGz2RG#hamPjGsj9V?-cj(`>tniDN_~^9@eci+3qBpKUXR)d>a!h5JRs6NbPGf z1UXu3X#GYR;;tz2CZcqPnapjeN1qLzHa7i!fKaoj`DAd$8Q3PY%|ejI>6CUZW|dLw z#mC^^gfQ2&WDekb2QvNUsY(K7n|)p*U3<7ldd8u6*fzU0(%kxdN|5WkmR?$kt=#nH zA07JC6UJZvw8ONze?8(b?N$esEt>2G{t>$GH(i%G$?Of?6e58hIiBj@CE~!|Sc%ri z)?FnF?W5;8jBLm7%>BeGK(Otf&CWDBM%KKEC?n*edbrMb-wVONC4j|<)^RIyJYu>@ z)SC2@b8o(=@DD@j&&Nz3=PuCi{d|7#MSRl^(M5df$7HxR%GWmVpH)Iu3A1_72{Tu+ z)w#*Er@)het|5h8sZ+(#(I6e_AAxQNv|(V507Jh_1PhC?;WdpN67MC+qq=V3Es1+4 z?rl1vLY@kZ~P0`*Zq7O^U{;)f&OZKkjncHh1m3dGx@IJx5a^^ot z^4A;n$cf|-PJ8NTd3r5{l={<4m?_%K6-%0sC;*%hC1%X5m}5-UiS1i;u8d~phX1T4 zWnD6Lw~Hc=E?U7or=#Xo^r3JqJjSS{@(`ywq}Hy!H^>>lmx98|$YI9;`|u;s{m{}j z30m3UX4i0EGshTZ)s9zC$={(_gxX0#l4(H#M54dV4iZ`24%g^>uuh6#gA>l{wAjYA z!bqq`(-^fV0a#QwHX6Tz+yG%}XRU3ln{u%=7-DzcZGWm=YW<5XNlPb;DWU&+4@;vI~)ecHg>T_i$LtsXLw>?F?1XUPjzr^5D7I^Y&+wb3{+GZ!fcjW9Q3LA)mFk}*dj+U3ob@JKIO&nv+8q| zEC%eq@gmx^SQOCjuj2{UzjnIUFrxCh%A7&NtA;Qe5&-qFH9^N|k%X6;f z3h?!DA2n-EV6H$O_U=uwg2ezW?Hibkoba8%WONNEzA9*Z{S(l#vzuclAA_rf{_5CM zqyFf01*h}T(sq|(bG~g?^9Iwm+xgI9cPdM_uYa85;jomobxXt$6aW@m>n4w&0CQ$I zJcJG7i;)H|VvV?X?@wM=q!pz$9zXezQC(I;fDy(fqJIv zJ;>4y6i*$}2|LgHhEx`21N=;^d|bg?Jb^e&{*K|9>Am~c2G?|U`T|^>S@<|Jh|mV1 zLXBsAS99tGkba@k4)FSsk-Be|Xk5pGF@{S$Sc7jv(05%BbuM4rC6zBLzSo(*hu_cf zKDu&vC!Yh}mkM7H{|{#V`KgIGOd&D=KbVP(2m~bf-@{C24|@|QTJtWo4ciTIBp>uV zzcTjTN*nWH_8g2p;&eEfrYdlAMJYvBSWpD>IujQDIu>G+5%tNQ82~9DiY@A&(6Vps z=yiKGr;3ga4$k*xkL?IcMXBHp9p&4~yBit4C(4kTrz%DYKtm;6dqy(Rqd1Zq&^VS9 z{qg0}v*A!5U8yS(LaFjEPqEUKD__z@1NF^zYCrjqqDo4Hvvj^PDx;ptjZ-d?EHlec zgwV#l(%s2c95be3^0Ae@%m zN3gN>m{~eQ(04&C^`MCQ`3(j}>-J)vPcZEa=l)H`tPHW9DLG}`rR?#uZW5aSAN&^> z4KlGFnMPajHfc1?4S0RTjM_S7J%0{0YT=uJ!cobpNN*x54Hjw$fn`StIq+`8HHsQy zKSR+SN<}0LxPNMiqOy}pN|reg#-q5?<;rEUsVphCa9%~*19WwDXLUn; z<-nQienK=kH0?e%8A|Yp1BUiQKF0hj%@C1*EqyoK(Ghux!Y-T$M#91Gy7Q5I?%Y9O zH27@DOo+|^rGuTs7fyH)6a|FDPAo5^Wqn@f5B110v3a+yG5NPNopmc5z5~J`T zff-Mm#rD5dcwp$xB!X_iYA4#BjNMmrA<;fh&cJH$F@Nb(uLqq3vE=$45F&Kp#(#hK zNq!Rs%Q=vIq}xdFq2-Wmy6?N=JgNu(qgj(jBpSsSAAQ8}APLo%eCw6i&rB&yIPl1} zKMM`eM>g1%Vyh<=+KDjP9Uyf>K@o9nr94P^|5Ua0kP6yWH;o6R2XPx&C| zhK}D24oAu);70n+;fKs(cCOBrLUiE@^BW-9cO=^*JvMj58)D2E45SUxH)leLxYcYY zd|SM77cjQSp?44>bFH*m1)7>8^X1JIo=373f+I7EeS|D_0I~F+4>+$q=Dy|7o;F3; zu2(tEm)MvR*T-GjTS+;jhe4zqk8vB?MF2y)36eK;(>)#=*+&T30YU>6)W9{g4R zTLbp{=AE*BZ!oKrS0lRA!GO8Lv`lfndsRC zYbREO8CRyxsCenOYo*s);OBdPrCKASNQkQC7V=**63=j-?PswEFhx}(Bj*$n)Rq^3 zju}9-UQ~{?^YiplQvxPwZ~h~p<_+r*O{0u&8B5I}%HArsgMzlXez^+uC9%y4)}gdA zi=hdjhed#!b{3_gs8wyrbY`21sX-f9b50jpSrsr%MR2Us*~_TwEOOdS$#(G$#%A|- zrkL|cR!Unf+xu|*uw3pynxyqJk=ceR$5x$3->CKL9_*igCQNt8(${G$_%Udg<$>JpquG zz2~0tl~{1=yZ{TBe^5bdzD*8|Wq4c%ivzO)S9ZN5(`!Dug@8KD?Hbt}Om_?!`qs&l z^4?ydtFe)~QLBwAk)Stvtf5Mj8Ch@c%-VQ3Smo$QsSq|zDlW)9DLS=`{kn37u^}tW z-E>7*p_IQjk~#Y6tW>P#Uehhj0oHF~KD9rxuFVKSXr^R9J4*V>{()~10Oc4066@nj7&vA)wG8{`<;nxT~Vqy0O z14%Qva?`P~7=589$I^2lU%af%q^v4+BH!Me4FVrv{|SWu@7Cr2MYqw(@qg_$=Kmn; zOwj6B2m}z&>5nWc|Nl9%{)fT;wcBX4r2Z|Zq=xd{M*Q*Hjh5&};h}5gmlb*Z;&^iS zJkT@=j0fOKNVn2PNpq0mJKEY5ku9td3}B1Y9Zpg!+L%5x=1V_;#Au{V8j&@2-SWKc zbLCa+y|K9v>^8%5vgtK_;xyA%gI_);PmHSCo4+TX#6=i8T2AF`d@FA=74|mSrcRGI z%y=hf?9ZuMZD#HA-ivG_+UcIK+#w_!km4{s*WYB>@=u|_U=6)p9$v(O>e=;t{ce2y@u6b#f(%>f_iPpmV?ha|f3R-E zwO0sQOp=sH*y6o{I-*ceA1Guftul-r6#Y5SGjKh4XebhwO}f z5E`Dh4&0s`fMn$Qc-?jHXNn)X!7FFX`1~K%(Tnbf(X9s43t4sFcVB&RWf#gd6%F@Z!2T=sY zyiiH?7YY3CJ%WiZ0iaV?QAv@5!qFFMXQT*UCiY9C6&*!h2b~rEYNRe|;uN%(_1J|d ziq_7NDU%RM72oH{V?)AG_1?1=#Kf`$lAm30&|V&PhLjVC7c|sfAEQ{F;k^*+Ag-N? zXenO~jMvN1RQG#22nE=}^lQVrERWQvrIPLJ#xh!JMz0a+PBg}^D3nBj)T%N+!V^^# zZ2toF{<^G>kkEEvyl_jC0rmdF^Za}{A?X3u90AsxAp*K3U@FxNYyIr4f`dp=)6n32 zU{d{H-HT+00+OI%imeWPR>m_>xD-Ih5)_U!bob^22>1jAzs&i^wcp{p7Z`xUYuzZe zg#&i%Y-s`x58ilpQ_GH6c>K`7#R{@VkB=xtO<&CwwC@)q+{9IV?tfZ#p58yYi?CHP z2N{J!u7O4dX{T*R%36+87%34LmM*rvr6BPBS|30C#rPRID}WG4e4aYFu#bXOF;~kt zU(fz!u8=gS@W))>ZRm_FOB^Y(xL_=GjIKdS|I_3x?zn{14Y?TYmE-}5_XJ%jp(t_` z)!04c(}>idCtYhb*R|o+Ki`->11oUt^y>cc?^#NR9MX$^B+YsFaW?yKHCC-v*H?du zvK@`mYTA2LN^Wl# zi3O)&4^^j5u)ouDiY6&IB~EJM;j}IL01gHh_O-;e5gYt}cQ4h1shL$m-6&GQRYIZE zWrRP~osf@+g!lE&_>w>?TWqSZ)s8QVO13wo68w>}++~>UZaw!~AWUFDkm5w8JWD@c=SG}%BeiZ{i&3lh+lHXQ(M5m%)#gXT!{d988NM8keg32g zKAr9MU%Bu0)}OmT?s_b4eu>yD|HX-JwAflMnd@%&i-mn%PlEDH-m4D7=vBR`{A!M% zExOd7yL=Nr_fzUA1tY%hczN3Vp^C#q7{7&-q*46@Nc`?D9ZOSGozx%2tCIYq=6&L| zKgyIIMflcgK>jM1(hUq@cx>f4CWm>^t!rza)!yz-s4#ji z30i60=S~KkL#J8fvV7s}@V0>~uUqTqdw(m%&v!!ERU6k@jN%Re-sf%!J;ORDHFK1H zw&+=W>d4uo`Jf^6xu*YvwRZrrEm#soo2PBtwr$&e+O}=mcAvIwp0;h`|`y2Ss-&WPb+>ZaV9JaSJC$*ym!V>qC5;;t4nEE2MoI6OF~v!^*aO@oBB3`ME^ z2g?-`Z8{{NQA5dY*bS$vAKQz=g5rO2VY^a|$YTr=Ru-fHUZUl=lR%(Bv&jQ2H+;hi6h3DSE$Q?>$F_hrlP;)r^E%%^+*wn9X-jjRpE87%}dKQ68I>I?Ev2{2nv#$H#pHdNkqQys>bO zo*OZ^`hlh719U&46fIkL!(JUb0s(Lk%&)l9 zjw|}CppjN$0)y;x*yLfOp-$#BD|?VrV5yzofpROtuOqFRd2GLJaq=|+25n{DV1r1R zo8IITb2K51utNA=AzmCs*CC5N9019oXU~m(-dHG3hKn1RmA6QJV+h)bxxVHAdJRA$ z#!Wr`H*mf!JMN`)5kFp)IdEiqBYmT$S#U}_Zro^olo)(8xsBDynojq6-0y_f*PQf; zElszIKg91Q?1C(DBMJL=B>=k4cNTJrY;nGdl#sHwT_Yx>fWgHX^N4YP`fPlz+fiz1 zo-=;TQH<2p5g|~ily)=1f!xrN)IDVd5`K~8cJ#sA6+?iGlC%V7xd61k6QP=q5J1qd zP=WqhK)z6M%OLMCqKCms@B_@rg8qSqqWd~BfU1jrUC7yB5@Otp_sr3_9vO^gQHH{b zUPr**T(97IHvl`(7g;@XRZx|pazp_XH>1P}&?XV+B?ZK`t3P1Iq19_j7;wdkFfKYQ z^~y&eEEU?oM}sO%fWyDWRJPdZ)*Nud>ZKu=^Aea-qYzLpqi(jmtLi8Q3;K?_Z2 zd?;Ofz9Oh%eQqx^EpUD+o+=qPPAY|gY%!k1*rI#gRmKUl_EtPU;I|e)@jl%(uj56G|w&!H2N|T`Il1|D(;MjI`K>pBZ`?S47ynsBi30v#g_1Dh$MJ9tMp8WgW?#z z#KjPA*TyIb&>hmECH!K5gvq`4w=_hOwd~oK8r- z_*-#S?g!JMmU7$6OgtK%J~^M5qA&z${g0>WeoXO-vd|8#!3*5_s!4Xuc5rmcUo+5b zu#+?rP~G{)y>Jo%-*Epqfy{VB{-z`=X~OxD5tz|_uK%`-@b6-Qp}v**&p}?bOSyGX z^lvNTuh779@8R6XDayH%So{ zQtKb*@xgx8-_m~ybKdAKuB?Vlj}gfeF~R>_XFnhROc}>Q5h<#X7~pFq3)wa*9h61J zDyJD{w${CT30zdBKIE9BtvjAkKmz35T1_@nslQprUD*hS=M4rje6?1!o4?$QHdkR) zu4+=7ee1HTxs1*$maY&d14^r~Y9I_v4V^JolL`Q87gV;d78bm>v};jRzt+kwI%-j~ z)opDwU2&7}x>~M2F*$I_eqxIPXMW#b8CXKy@K(`;GSXL=!LOW=RHXs)R8Pr07MiE9m@gjeK*M{fJht>a!lG1D%7Wpg#^a>DTyLe1bBd7#)6UKPtp`jj+8Kh zl)~)96?j5nzg0QD>E3I;3E^4d)gDFTFXVz60Oy8MA?d)PaNeUj1@)|`af@z)wEC2g zFnsEI@w+yl1?W}fI}JtFU3l!&eb9a}@o)@9WfhD7(gkb(61h-0J&jakXw!yY%%Mq* z*{-AQBD3>R(cSb6$pOV>X8S8w;%uF)j09Nl6a#ys9~8L*^lT{7*!(0sxfCYgU|bOi zo%QCEmnk)!^-EViYwpUMYWq@u>Bg6J)nb>cn$FR+x~+XZUaB3=z1^=cr`STK^z!+n zjT{5wFi+3rR&&{x4g$?!u&;HPNBC8;QyfIesa*^RKyhBz>4N(PoB3GW<3+ACl2ewS`0{a1%?1`BaHAt^zCJyo#6y+o^4FK z)z{Z)w6Vn|Cc?C}tK|xr9nx#ri)-Nlt#JJzFu8wVz6HF0X-TaHp!!6IF)IVBt06>V8FEWW}*andOp|zltlp+V8C2_srAoVe^eQymtpf+V zF0*6(6BuvGD$7f(R?1*xKAsz33ybBnA0uvj72P<29&lY8-Ek|FLiD?Yy7W2I(9CoM zTy`-Tj>ua#F92QRSzVa*rjwJ>x|52|2G{MLbkJ#07>rYwM&zRjdHFsB@TM+SMQ)$- zkIPuNHlfv%UOF=s;*f~H^A3K&3I!rYqR1g6nJ4)5>(WkI8 z!bu#{#WCD~XU_d=vTohH7)-M*QyPQ~u3~T?v6x4F%nt8z$#y^*tVjJ}rZoLVkPPGs zn&SBx`g)P3Nur_Oh`y{BzONEqIDglc(WEa6L${*4Fu+d|l#c(ba4FQ{qmb~5V-8G_4 zKZ#9Xayje|c^noxP&T*xTmM*ge=b%=XvgiiUnt}FHF)oO) zI>W4mgD5spG`)8-BvI2$+}Tv<`gYS5fc<$LvLjzgefR5U&t}#qQ5U#JX79ReW{Z1D zPVAQ1_Ol;Fk=9Zkw*Hn! z*__h(RYVE6_ol1;LuPz`h&N_JAro*QgoJ}+Qo$YK?VSM?nxXYejgZ9Gl!qbn$GDO~i>#rlO3?{3 zKM|Q_{U>NbO5W%j1B!4Z@&y>`OhzDS^GskGYJL0**z?8!5lg~?wZ%Q>)oXj)ND;C5 zKo3cBebS;x{c6U;x=G@mp95pd+!&}d3e)Z+qS_!|nRaqQ3Yd^sIQzwpSI1{Y^e^skv{m6e3)~mWTCL zY%k8qj7yzX*f2qx^4NWJ(O<`%O}I+(rc=IK1cTR##uW9OSQDpWiy`tOg`g%n8G|DA ze-HhYp@XTq8G=x)>f1{ulxc@vbEQL5?67BnK(@Vd^5MxK%mH34)*)+2sJACa=Y!P$ z*j@+X_=dJ)iGSF6gv1Yqms;}8Rfuof#9(ZTuEZpeqze@CXgh>Z|0ux%5}gtUv1cC> z_w&FZ`AWX|f&0uFL1A~j43haB^v~C*{*%XY{(0#@w_JB-AOHXqFaQAmeZ}s-^H`?F zHnfI=sh^fVEY`4ZbMJTHnqaM1*q@*jgG4+n^>OLX5FBZJX#1wA7*%yf4+gBf?}>yu zfpJl6vS>>->v?v^jmcX^i-!1m+C~!1r7y)5y@Fb<&K1Q~L`W;SnC^9&9Un^Oz#jAGqac}5>^inZnh7xgTC z?O7NFP_}5=%5)Q}!>gm?fA~kQPhRf0={+7dX;Mw@2tuo~GQOOZ!B&oCC883Vz+a$j-8t_Sl5ZGu4xDi|AB%w$QDC`xl9lmxC|N_k>%j8CM@ z$t%QZ)mQOxKpBYxc5QQT_#A|NOxwu@Q z^sT~sseR5vpDzs@7X_J8gX*TCVQc-v_E1Mj6<%>%{K1>B@!G|-U9s)`aC2)`GRNH$ zeO0f|5dY{SA5~~VlQ7~iVP<~Hc?^XbQzdivy5Hcxb_7MUYD$(hFY3j&a9)e7Dnf{~+ zqh~vJKo9}4{#OPNWK=JAZUn4^LsFB3)@%7Hdsb_Zqu@@|OuMZ?8v&ir2M=4=a6Lkz z{8+eRFM&cBf~5;Q(NYrs(c#l4XECq4AiL$oNKlJ3G&p|E;xFLw=G!oY(9NYPC(bmw zEa>2hzi>KPs>?#}(%a^2S#ZpyxlB3Zedx5n8n|giepABaoGIY*(wvAnF>}(C$T_0j z^yU@qb$>tHi>#N(F5ZPLU@vLO>dAlaAX}iC*v;=pN#8}yv2g}L(~ z!ilg*dN^$qE`(fFHg=bO>wG<4FgW*NtYI|Ix30T=?0cMl?@a>e@PwDMOEd!S33;)+ zm`NYqf#$ZIqd_TMF^Rbx#pE%ltoPS-c1UHVq@nBCm`IGr%8HJOx0K7j+-iA4!b7tj#tuLMk}?6BxQ zWp3tszeaz5tRc^{q*nsrF5qA|I&l^cC=CM_?dbhd;9Iz~FZlYuwM($ieZ^xxLZRHx ziuFI6xXhHMq{pQsWR${U;qDn&o*2TyTwNa{pLY%we?^!a6&XkZ6fxc>I7%uhq9i3m zK<$k?NJl$DQ$8>z@jG;Am7$Q7iMT`3YYT+CpQgK?c9n$>7KxO#mARA9hLeQfl0eFP z-%{{bvxpN(hgvEq_#kMtvo{g*vhk6q0Fz!OX#85JN>0!yRiVjqTVKNa>)|q3EC%+xPoLLHTnC9(xpDvn)00 zerCy3!6r+mo2{kpy0#AgVI(CfB2=HBw`*oA zx8NxrmF&R2a|;ms#0plP(3WkZFz=244!ClB3$W!eX#$Z8F+(Cu-fqOLCLhWFdjSZX zpLI*27QgNo@{BAOo0B%i1Rq1<0xu$zFyd=0b4SlSY z2iHlOQklU6$y}NOG`~_<67LfSZxYGQuPtwuZTsP|O-2X+ZwUN?Unq|aZ?Q)1)6?DO zO3+hNB$1gTGA8)|yN`@{m251cl4Ex>_`;{Ood*{ToJe$J4Voi{p5w<|p3HPn`5u5a zIrf+^HB>a?7Y7U7cy@h{^WM#d@z`P?BT|`0Q6JX)I9kI$`@|=aC-)wPfxg5}EB&g-35$gS z0NI0iMgUs7W4anHoX#??&2vD;_MZFiX?w!8!Q{7J@)8*FVp$8!2_z~~spS@^_x%M0 z^?kqI{j?l>@!CDU?mpLy=}#7G-k~3XZ&jhr^M!iC!wk8f5hQ2DwNBP83Vcw9nA8jO zRjN{&036E>E$_Q+M2HK<3JTN?ogRMMcPo>RjG6g`bJ?C{4lDFmx`3hYG3k1uzzT4di#cl7jvHWap*w8_pE%j(#6)wpxw%d+ zRX4&rxHQi>fts!0nTB-P>F-?(v^)kUa}Wzyz>7i7k@INee1Bn1^ff#`6eZWJt(SYs zM80);bR2=3_-eoI&IKQuURpCNXU6EuD>{Hy*2l>dH1rD(ixC6PbW!C8&)e zG^~pqn7ss20hC=m?U$J@#HFZOviY^q2GXKQAgQUC6>mUET*EC!q_D%&lSb^|b4Vo0 zNAYz&Hq*xFFaXSshW_R&Ec@KOBco65AO4V%BjpWq3Y}Qp+6VOTIe6S=?{3AsdF6ZY z*xi^g$X(}q#7#o?$7OUlX40k;73up_B8HG%{KE|zddmRh&bE7a^y1$UY04s0zWY(f zyu_TJC)vZ9I3b0Cod8*^uR&kxMy#FUkf*3Jo6$UytcOvdhgTbbbdaW)z$p1LP^(Np z6`?lUCv0q#`5Dxu`J)%^D9kTdjBklbAafI!HdTy&@k2-115WR42?zCy5m-KdT-7b! z4&8Q4EymscT7?vrUrdmM_)YaWq(_-79)2r~?X|b(dCpfQ=j)_{W=n_JPxhGTJagx- z0!Pb3d6x^b4r%YNrE`E+Sp9%-m?S*di_sh6LW2otxq1C zn=sX2LH)!(&NJ-udhl z+wbW(|K0Yqun5kma>rm86viCQ$^5QhW0lUmXGG~X%)sY!=*kr$vIHyNLx(Z~R` zVBQS6V9p9q@8xjV@6P{hz+w>ztwl^qF-Kk{=46K|CX~gxrIMqg37m9lMDKMQNwwW= z_AI!M1xj5RpCLD8ARcsa;Z8vwccvXi(g!rUaVt&Cn}jYIS*GXZw;=oR{&n`+l;fV) zey;|0uGwfA8Lx^_EC`nYTcj10#O;7-Diwjdg$c@{EMx0x?tozNVqt@9IiY;MZ0jZ4 zh2GWr$kC&do#y+%s4oWLOOrIb${-LQgIWm*3j>)4eBmf5E%wVmz}}Y_H%bu&$|h%4 z(7$XoJ(+LPm+kfW8?6@FRJ1m+`9XE)fo`OZ|Iz!IN%C zosA=G*9sIZK_wwf%}swclMWrWD7Z8YSutK%O}ZFF`@K{>sy<@3ADPJ_2|hI>q4jBh z!7z-EZl1ygKYTSo!w4fjoWxox18tuKOLeiReze?;!1vkdlTi3JHQR0HKE-<@39=(@ zOE$%cjh4GTiVB6z0>fBW+JnT|i zV_rbEqzPiASv^P_hy3usNkqX(KQ*c6qVSOn_YY`8MdPSZ2({ekk{V0qTTHw-*rD<3 zTWR0!yXmIPijwBQxjPxr?zF*rWq1k-Z@d~p6=_L+P|zr#Xr46Ayw8#K1t=+@mZ>2W zn@`Il!G4sOW8;J_Z*1t!WS|&Bbk3d`E(ueT!P7(WFma>u?(ZG{JmR2c=JnH=LAwuD z>$QdPX4vQq?zP=8NPWEPa1LxS73ydN*@mVzxm4BbNtvy(EPbVYqoufkg^kPScsWxW z8`by>jZstvu#u7yYs+}ab#p#2&a`*^TWvqMEa2yZvi0X&T`)RM;4OjC*Vzi58Fr3* zTm{aJCy>8p8$~45U;ZOa`D|jc0~I1R^3bbcEvY39J!JqU!Wwp(lF#bh-J_!^=u z%&BkWwyatfi+s!?lQ>6J7UJkLn;BZhsztZ7H%0YDY@>rPXu}5y8gg1w40O)tmX<6OLwO*C}Q zWGMC>MVc_FC{N-sH@3>MFqyV_sRYOme*vi2`(%Z2@&uSgv`5Ln(I94%VR1BFj$qv@ zNeqDB;&r7YdPj;fxhgJGUEQTk#Q9>M{(4$EIb1TMh>3#KE2xkcw_6x`n3MW8zvImc z8&s4r4%1%&iQU-VURRbMg*h*N_KAalp_GwmNPRzL|I4|3X>R-eFJ{H?=@Y7oH_e|m zKSD_0&-FhNM*c-ibA7OfzKi~+fOf}puNWWf7m)5g%27m71}P~q2zqPGQ9Q))3&jIN z62GnfV*(kpRNl)(N5Vou!CXMXOTxlFTr@4VtS(kSxI@Z9-77pmRnj88m_;0JW?-Qs zX@VJ4hxR{2DFA>vHxsp=PXEV;_y_ubHrci^H*nB*FgJGmkLUj}wM+azDNz15Dg1a& zmQeZ^I@SMIPkzGG|F?SbZ*+u>UCa%Q{|j>ewX*j=AMF1ir=KQh5;lfb&PM+^BH#e5{w8X}Hj*-Tu7Ci;zhMCs{(t)pM<;70MiXW?H(Ij` z?{CLF(YfdAvaxUa)QWafwrdYGh$#D~yCr{sOb{#B+Rjm43dvuqOAUT*#5Zeg7ksy0 zgVz%$>*8m)(SDr=tof8v0fk@E&kqj|PR~(WUO!RhbrJ3^1^E6Dz7A(~)`EY!Wg4q= zSMcz3`hZubtxpE-BQnyj6}IX81f_1P%R)(4J7R1-oOR%Nns0h)ztw>9`ICtytH8(c z)~jVL^ZY7abK+t5xYSg|<*|q!8ehd5GXxho1=+S!w7{?QH9bHU3E#J5j~u zY0PBO@%vzD%gsEZ4`x7Xa&%6E^NLA5#)WunX&la=j*sE~T^<)~# zgW#T-tcU%PM0j0qvj50h`gvw-e?u+xFH4ENKwkw`nU44;S+GQ94i&nIgU z`MaMsF_u*&UNdqdqf+G|ukBKiH0;#!$1SNpvW1+e$_HFBTxa5_F$zmL$3>@?h;P24 z%TkB-gRb;Kb%UDx#JXwP5}WVgnQ455y(wpQV`!FwtsAd(tjBWJEL&Qd3G!REMa-iD z@?d;Rv&mBy50PbJdGsL1O>+a7!CQnY?-jnFLry0Q4y$Xm2#X_&=hT_#`bOGz-Zg%wB3W_s_#`_ubbOt@+4EPoD1oGo7gIl|2s zz4rUqVoOkD-b`;6HY`gNmc{Q`yQS%B@9$ayIup8Zo!PUAKP!#9UifWOW7+OCpPre@ zb{{%RZqp8URj-!*$an+UjxG8f^q>ViwpD48w!bIz6m?Rw`E*Q`*~MWP5lbqMwN*=)lBd5 z{#?|(U;R}g&noKF#X~4{j};)_qgJll<+A0ZZ6Wr&_$5+pnsv-*9=p-a?yYSi&@`CEYoa@%7X)!SZROQIV~OCU-ihbYLJN zL~EA3)93rXncP;*jOtsNrv=LT3Oso6J&rnh6$d&${uMaxu_SLNUuC;}CP zW-1_65xEaia>3_%AjWOHDF2eI!+&c8w=K!hfxybr3D4#8%XtDV8wgcY=81^V+$o{F zmPLFhWAF*CE5gt~XDBPaX&3!Xlevchl2`?qH0wm{La*72uZSLyA`*IWpwVe#g~S4# zG>a@8q+8xYE4Y6k-daI$FL^G9mN#h@*lHRhCaqS9Dj7JbiOMz-E~^R+cfb(U72Qj< zyp5biu$7`OreG8;L1~3)pKbFX@!~@2{@h3p+nz$)=Hw%;{*-StW%=Y3`1(ohj@hlG zK3F8#ShL5FLb05DBm?4QA4zcqm^{L3y;@myZW=5E+vWDOK3IP~iG8@xx}$}6m1|t} z+A>bM&Q7=m=x;BN4_FkQ7PUDu66E68V_C%HM)>8JrGC=!B&EeAM&rtC)EJ!pfiR<9 zniwc-nua$#oXlGhkrzhzZ_&ME%iFOgw?k8*Regk&-03pt_nFUe^1V@WrfhTBfwn8* zKY_9XukpN&q`X8v<|r;tvID2l30Gl1Lql^rE|PKXHj1e6)>Bk8Ww&;Y=mV*p@IuCW zIjH+8jqhd5s`WB9QFglg#nD-UI*GGsT zaL#J)Mz5xzs4->m#E)?#@C))Jp~heE63=u24f7#?4*m`ZvcBs;0hMx;Tvxwm7f~|e zlqr^^0e~e^g)DGEAu6MS=Cta=p1A<$ehiODp@Ti&0gD9a$X=QSW$Wqsh#4htOZt3Lr`!pp8K{r-FPm*k5XZ8K^lm5bZOxK^Cw`GbH z9?s7RO#b@3(|A*`YR?RgI2qTxrbK?>qLa_~7~|bvsy;mjWl6*kQzoA}H~5O=ARXtN zn1+1q4W`JNsCc)#ua@3SOKlUh!!G)dvME9cz?GU!`#w6eE)A#sxJ-{!D<(EK1B4~w z%IqAPyueEk8rV@po%{9sg@U>DR&HZwNVhFGx|@{RWY)imF?%#^N+9!+6T3-jeAOm^ z0A-bw|7Bmok+}_1maJ3Y_|78XGGqb9KGe*4jUc&XjNv-22g&biC341v zBp62Fr~o5PZfdwwUQE2)okw1(k+Yh#6D6PY^y!h11VSVEtSQ&9Y*>P%J0tUoJKhe; z0i1Z^xTbkr)1uE!qZ`pxoU`QiDvKU#rc7_+Z$}zzMkmw|0ZKFK%|lnYcgeEPZnjlW zo~*ss;v7&!bX>m9r)-uGnNQXF8bJKr^|=-K3X678J9dZ#zrL>dA8T@JP_@1 z*Zvc1#uj&LkV|5b`dzErz2Ja}?=RQApP`}9Y zYykw1)Ol4~#+d8!UVw$yyOSo=@e3xQi2*hz>)|H0=|Wo`4JbNLI~f|h%k0|*wmMTh zuUAI|5`YuL&~_J0$2r4oS~t=Y=5C9S)k|Xj-y*^fq(=wtQC44I%2{gQ8*_ixA49ZW znp-!aVj_1CwGKoF8H)0H8ap)7j5o4n$=Ev@=+PFcaM+wi zrN-ibN+TKIWn^ctr;fyK@+d2z*osWdU7~FZBH{|ZD~?f%IIYkVXknvoib2Sap}Z}1 zDM6XM#w$JV&oY2)D#VmzQtK6;(SAP~8JjiJS~ZN+uC8BNTPseKFXA>6lNWiH8`pYJ z0bLz7hGEExNCc-<3*bu2{-i$&7H9MbV4AVv}eJ*=k{6s1&J#Zwd_kmDD( z_7%qow(^U6`-)RRzC#YGyn<5~A_zQX1XW*$tLHJZn738$y zCNDv8`SuZn8xwcke4ke@Xew2bg0ddK)@zubBL-t76nc;pm}D+g=CcG30yjggT;g~z zD(fi{{C*DwD;gT1l?L!_W4fq(_sRv32}dA%+xwpFzOzKNFdtQlTrdMPD5BPdn&9TDKzk0s7|@de;GO8i=h{0`yU*lz6+iq z(pE@_fAVYn0G1ddpKaK1vnWu3$W?HEAK}l0PQ{0eo3ewrM_M~D*~E~7qA6kuJqF5!wDVu9$#%}(SDY0$6*j)Oo` zB#K<0!F(RwgD@&P(jGxZ$p0%wTqBa)hz2H{lW>tRMx1CjY(ZG8(B)5vva7HKqFA9n z7h#hJ<{dyxSS>x*DD8yBNZ*A~j+>?{H~()FWW`3_i>1J{N0)0wpnnX?xxW{ln{y9A ztWwvsjpaFWsu1(jAb!)qfipbZbwq{*_lxtN+Mip1gDf#{r0air6R;syub{hBa!Fd+ zgv@B{ou3Peb^SnbY1`iYcWtveOxKd?*S^BYgc~xx($cZ8xlC$53C=brt_rtoaPR}L z2#Pazxtmu2{}qPH!folEJ+S`2cz682LisK0`;lnfFQ+Sj6tB8+471ln^dyNXZZO%^vj* zo`D-Dc6agId<1yl251>WJ#j%!Z`oZeYcfg-|3PQCa{5;GiRUNU+tzv7V;SBrL_113 z`tyc$YSKzNrVo)g4G-@&EKi7$Y#ZfU{0RxlE2SSPtnY$Vhz!5(r_2I8+8N!6zlzU+ zC&wjZ?cvTMLH8tU(eqPIgmv}~fdwsgd^~h1puB)Kx+ZK`;o_JIy{Jn1%LW);nJ;%n zPt2T34$cJ_Zcc6FJvIE-!kV5oS^&0v|)$k3?WQF~rP!O6J=C?`gr}r%hUKf{Po;tv99sj+yeW_EfDyF0L72qei0A z3E^LH#-#NV!YSz^j7aJxgyYgiutw?O)J*aJ8!dh(VoZ1|Y($FGW=r_faOmIKkG1}1 zlb<^!#-xAlnh5@PLx_C-Ba%v;ksPNl3zEvY-*o8PeO294Q9ePZigGURcW_mV0>LNEv zZ=?GM#0&QCt#g1^b9PERl*DJ>YBk}0g-@kM&odY1w6Co9zh|8z^||ubSLj&-`68X< z(4|J(rRR*(-n}v%){iHhr^Y+bAXNh%pe5LSIvVl$hAu2#$1SWfJjeZEKe<1U&Z99V z#1EiG0tEA;HvIFw%OFb}g~(58K=H5?cyQ($sy23AdvFaKQu-{N8ct|rcaH0042gI{ zMPY;!u(4VLy|gXVMJd4i^b?sW?yKtWlOcGzI&?#kjan&O_kmP_rT*QzZ8}T+)50rK zb^N%;b^Vqn+erP^UufQ>UN8(J46hf50J!dcfAemkj)Ka}Pif}{kd>-do6VcunKD|yEMS8Hb8Yk-LFVMj$m&fN^j=3_xlkKaMzKkel&vfRtk%FAjm>yUNg? z!~-;Ps1BzqJJHU4p7)a`_)3L*dSCxh^^?2_#v5=AMi>oMO(yh4eh}P085n&1Kile) z&7l84yG&LeELPQM9z^m+QH0v4$-s3(F zg5%N|qiXAcYC207$J-;(>ns0~pVN-DN7nxYwE71~9Cw(>N;pz~mtWcO0<5A_+Z}!e zHFG*v(?$M30mVBO5L>?^1W`}@LjI2eobyQi&OTqqP62f=xfH>eBKQviIscyp;y7J5 zih*m#u-$GR@2_h)Y9-Eu8GXX_pl6mN}B=(v6Tzsp5a za2H{JmUw}UcA4m(!|O`$?kTB7JT4kD}2p&NM6Rag|qc>3s3G`$02?IchScH#D&VF)H$UQtE*-$Jy^8e zGKEkhnHcv~N~a}5G%)I`l1>oE8TV2D{0II6OGoyDt{J%j1xK!eSANYF^W^43^qoDs)6M@x{=VlOH_j;fU+uU(#p(dX>nY?Ww@UB zv1OBv!cKTp;5;PZXI0#E_sDgoL1%v;kW-3VvpKH@pZlH5Xg;0r1b?6-;VJkglzkxN zaj(3v`ZY6scWL$@ZopD#2vs{T>cLWoX9igO4_FD=;Tcp7I(?GVORh13FB~xL@34Wv zh?QHkfCYN$-^!icjM&`rK;2JaHKO9gv+q#*>cWZgK6f~NhtFg^ztip+r}ip zi)yNEiBitVn19`{-H|a$L+I_P%CdcWKz#zDL{NuXCc>S=z{iw1-MtC$+K{9XMDBaPa zO@o_^zTn+E3}aCKZ+EY)Z3oHD#1W0Ec@0UMs0{+ZXru3N#0I^o^B!(79~CB4yu_$u!%XjrEn=>EukOnF0z8kXO9zPsICgqy+c za$uh(=beO|;omhatH{IFUXu|z1`o4AJU^%znM}Xnb4v@8WMdUp$^4uxi59J z(G#~0MH={U$ztPcf@Bsw*3!b#W!;`6l!(7GV(f*a7y;%HKW8w@96=>qP}n z5F&WkgXaVXdC`LC8v( zYY`1xSOpa5G?Eo>qYa(~1-zAR?evsop%es&nFkrZd}_odQpi{OlEd^Lr;0D-7=;%IvO&cuI^OJQNV1x zR|cAOecl#UR#fWL#+}`EDgQf`V98rn!ii?jE0fnMjah$YwQ&NJ<^8NZU)<(trncNJDm*$hNn#x>rK+eCon zRpkY)g`Zc;`r_E+b_5kMTNxuWwq<<^mew^_2zZcM`^7W*dSCi^e`lRbwB5JOJ`kIU zz=1qc-pwX;8C3Ek*N8;l3ZZ8B`4sAeUB(`5Z}PXdesvO$IEP-RLF@rei zUG1FoU0*-yZjsKmRgd2QKB)THpr0iyZ&`BEx>w=EU0mV2hc7vUF;@M(FDdKUp;Xt< zrhkAuVYEcbSK7u>^#JF=y%|eb9wap)u8CaI{7jsFSMztZH34#g-Ty~b$M3_A$fftV z4%bZeqxp_|e^ZZa?{1CyHGefofa^8bPo44IPo_t%9*+=L$L2b`&uIQv1%B&LA3h(v zOm{!mP6y#{Rj5_W?4B@bnv-rtrOcPl&MA%frwFkz0U%T$W11=l1aK;@UhSdna-3sZ zLcXJP@GIQ%C7-xYg; zoyDvZvE_KOqye!6dC37+!Z0=f;TfX3#GUi50bx z&9kRUOY*$qn~7jsoUE7@2r(hypol3hBbk47SUidFlh_mbnc=ar2U7G9VnzTEdb?pL z7XkG5O`qDbonMkJuaTG3P~^e_pLqfqj9ygUs#af)0z!MCiZV?%9nrn%KdQc@o0zv` zF0a?Ce5u;ybO6D+w(vn%#(;crEIvF0tKjxVS&lRg0y>lMR{}u*2Zcg`O1rfH_UYID`t9J2&)*2=YsN-439ke&VNybr%~8XlU}ChE??+_ZL$8qC3k*2RYqj-9 zE|-_tyM+A25dA4bnSD7#yt=$27qDlHaQ38^qQ7Fa_ zMm-Nc7NY&?N*v0p&fqptQZwn;Nf4?Cfnt@V0rxNZZPT-Ww#LF9qGUwMJf-d?KF&xg zGUG7Bg&Mx6=OIAP0|!lU!%+fEr*N1EA{G0K6XQtv`38;!>?&l!%C))3$F$H4^sHbe zImg}yNmDm>P(dm1^jA5&lFlQ>F>-~ge}MholjNCQK2?`|9!!p!WP!x?cG>(9tZwZz zIr+kKj#S|rI6G%8lS3I1gmuoCD1YVpB@YJr@8CV0&Sv}7tDp+pH|9k@F;A0OC}q!M zRSjWK$sHs|n-z9u$qH`hjQ*6R&sXaZ`uD7jwv_^0PdiE$wA7m{{j8cc3A%b&s(v}dxU%>0x zfIX9Q54`f%D*gnA>`K#d_C(qtJ@j_lPD7$0SeEXVlgE`N@9r#~df|Dxp9tJiCB?~x zl3BOOoD(jC2Nbc%1owTDZj2cNfU3MUTBb6*YZV;M;pQ!^Sjt7o`(nt&&yHe1hTj}79h~m8+{fS(g(G5Y-Qs#OSu#atCvQ9KUkGGvwfAPkQi}Zs)Ap-&E)nbK_Db6 zXclo&>r*t=^pip$x`hjoZ82gXQ;R^e0ws~m=l^-Cpv>sB#~Ra&BZ*l>QX6fIkFN`5tiX&Q)9PUhJB%nKq*NXK3D?Aa@wz&ezOXAEi9J;S5? z65oBJf5#iy71lrWe{uDW(U~+++i2`eoJ?#@Y)ow1wr$&X?%1~NWMbR4?d0V7-h+3Y zwW@nxRa@Ov-Th;CRqcwcE!SQ$t7tJfg*-oO>_Xi{bxR~_87mIr{jY)jVQWH;l8!L@Px(T;r#7 zYEfcZ|J8xiWPAzr>~gfp;Glp~47m~MTc>I1>L|&8#_RCtf7i#}=g0bM3-SEnEzk)l z?ks5V4fMAU!%m#jO}`2a&=U(Yq8}xTVpqHG6o&ALeh3e*m$wwFcde)50XZ|5|^_g~2!>DF_=1eGWXxQvkRe2Vwk zx!FtTFp+c=1k9bHej%2U%IqOz1)r{Em~I@5+!|+XDq-^INL?-E?Wp z;Zhy=5weRm^YZ~>hNROXRdUz3-IY78?5l~pB~u_8h?@zz)9K*#Mv${j9lHs_uR9%V zYb2BnuekzYtNMmTeOp%-judn|v}c7Dy_^W>lLPwWwKY6L8$Ww1ztT51lswQD-f>rR zz|@^yHwyJrgH>rtnlH|6Qmx%;N(8TqTO@w%qt^=7l{N78q50@rQ% ztR8abyuSNda#CjJnmYBXqTGe??_=wA9_VJF2yc)I+dEKq<^A-O@y%|Or%jsUDzYpL z-T6m@z9z7b84n$fBkd+ba9_>{=eHG^X!c+}2n{n{=A zfCg5HN(|r6c81ikAhNf`*jv{c!_kG{MX{{HR;;SKXXY&9UF}oxl(U96{x=>l4|zAC ze`<7RGir8)2a*$%4(naWzrxr7glXSDtus^oY(-hT%(QgvCzU8W7&AOTx)!dXs*Hz* zFRGurYT8gg7yTTHqJGWvGTL#&9scJR9T45+XPr}?=q_4i7HW5LW5*4nDr`*l2(_ao zOZSAeceb&OEtdy=&foYW9vRp#X?Yl+XNaZ_5j6kn(mvM@iy~a5=~9N56s;EzyDKq~ zm%cje%fxA-4;$Hk-plr;d+Qvoqns_Ph09lCZ8Z>~z(%dtFB=$t9fi`~&+We?Oh5GM zL5N7_L2Y-CcJ!|-S9%RQ>|fHTlD$LmF09Bwx#AkSoVA-RH7G|wubbj~vFmrTp=wa~ zgIu=`V7}EVPbHyrx!TQZ5YX3>gj}*>MJ)*%F-L*3+;_A&+BTNAa|p^Y23ecVxkH?Apmg$ImlY;s11*`*wH13q^Uu(rKZfM;J^1WsN}v(F zq(P{l>d zVCnwyF8-~y^h({H0=d13ptJP4Jh>6?T1D#x)m=@0nAN%5sJkT~(u4Pc9qs)|L()$u z?~T4IcZhxXrR4wq&-3!-ce&Y&jQ3TAr)LJ@GuxG{iClj;Cb*z7{#fW#^3-Tbhrs2{<3RkB*k_$gc>oPphk={mZoRZ1NXPB+mHkhq6 z_S1W>9GF|R34#cmMe;xH)jl2lWCc0Dq%x&5D?Dmf;mvOTc?zWx<{d}u7tfYRE%uzu z0@b&XWd54vLAs_oGCk{#D>k}0$ZZAlSy{ny8MJ0INXi(S>UQn0d$d!6xA6G5;OKAv^_n(gKHu{4scv#`BWZZ>ELmwjVGT|P*Ip$lN36EKQWn5ysH4AYb0g1rt&f9!O#Crd7+fcX ze_!KGlr`Gs6>EMR?tx8ptK4Aw(L#2u){c|TaCPsrCG8PVkg+C5?Um$O?aX-axwKb^ zbT>lw8eY2_pNPMT7s(e2DfkBuDELxlJnlL@QW($s@Y8HxZxk&NKNM1P?H2uG_@Hg+ z?C(s-UbcaZ&j^?F!zB>lVqo8l1HR40<$dzj{Q%W7n3~}(Su6-5;onx2RBB3YR%NImy3ZOjy*=o8q zhm$a3Ld8NYTpkmCvG31domPRMK_c$(j2N8f(%y27| zWCNtu3OywlIK}4+I{;pT1NY1JX6cA}-X9oGtpvKCg&YO0x-Ado`7*^q9FIsXl@gwn zZ}u%QOD7u1hc9$2%$al&w@bwRra7{;flE!hw|#s;ZU%t?xqL`eK-rzdNcTRxez{jf zz&R&gZb$^A-oTVNuYFjol!!RbKNbv5#-7BFPQ>Pd9$AKWT&%YhR1~C?RuA6Ff<)=Z zh{cZ)8V2ML2nH!vnfiT#cUq04HZs;<7Nhov{*+MxSgbJVFBGL+!M#fV_~0=?rM=*K z^&*IYylh=jTxvqQBnziKY-x)=M&2rw#i@*>ow^uL1ABwfriGJm5}`c$-bNc$xcxWv zK9h9*2G`uC9s%`?KWU2&9K+s3N4Ed-HOpx&mDGCcFQWShe(eX>-kpP__1>YIfTTSE zN$s{hefPoJ#&GbCwA{OG)RDs&wkEFo4!LKwVcP!lS5Yo29mu(otw)fU zbS`pZ6`*2?1Ku=AAI2c|?^}>Hhj50*$HDPCSdJAn?~OBRK*zarn2xgA#pm8Sj6;`(Vq|m>hKpB=#H&_@ZuW=gmb| z8{k4(nkyeP)r>*~{Y6eKRv?U-*_J)cXit=EV+>93mG6h*Rj06;ERlnb>RJTmceW(-jV)^Wjjo^B#a}Ur5Ez1 zZ^pN(#~K1)by)b1J321^q}4pvVs7|$*`Gi$FgoCy{lrUY6f-9n`{0JmL*Jka`smH& ze6g@M8|?nMR28*N{axr>DaHR4<%DMCM~U+?Srv65-9J>L(t7a=|9Gk5Bsl6moFh2W18k+DIH5ff zEG><}Ds5>{ldyo#@S!k}4mGLsIHT9kJ^w77Twj354U;{EZA8KUpkS*`SPGE&oXf2` z@!pvd6_yn7Xex=xw+zT3gR$k>1GPZtdPC=#Jib3ydaB|_)BPhH>azy$YbG@Q7k%&Y zT{5_iE5Ia!ar7kra7AjVpARmcVEC%{HTd#X0wl-dew*JzY+`<0=A!u59IU2e598`& zPkK@Gux1inw`nx(>U0%DGxT~d9@Rk@3$mQ+vmp5pR2 z8%tPbvaXBE49v|6RJ$iEstKHbTdRg|is!S|VWO&>G@Vx!1eTUKSC+INSsG3O>%iTp zqf=Zv2|`OtD794`XXi!>*sgauDzUwnjq)MBhXpv`rjhnTnAIy27NJv(br@Llzkp=iv(8d&q0gUGWA3X}8dLVwxO4+(p_lOHjo0loo}?a8YksLbY>VKBUb z0prZ?%&`yC?gUSiOOw6j$RJ0NhvhZf8y=Ro4wMM#oeNK2;}{?AH{6EyFYw9DoL@O} zft|q>;F;AZl$LwZy1}tYbBB)<%7u9&l1;emYua-~ElB^%(<*1Tj#?ik)su zauoCOJVbvJ9Xbv-`4&~_u|POTE6^2mw5bGiH*Z99D*{2Zi9A()h5eos+xeN6-V$F` zC&%8_D~sfc%#I=vgtsQU6oA{;!CXf?dzTk)57v1=SY+bFAOfl6Sm#5p+zV{hT9e1L zBV@+8C8eTFkx}N*CbET-MtrkGw9>c5Vu}sPeWD4oSt({JF>)z97gRL?tJC1I>O5H_ ztg+tlSHG2#3R1yRG>@q!Z^Hjdv%>R?)IbHgsxvT`PQiZ;&Ivh9+NRGFm(UGJed<6<$Ve(mgs6ARN5zP3Wh)^bh^b?g*8y@Sy%*Zn?U|utDu}Ws&xue8F-qN%K7Vet7h5V zC-wC3OQ}Gdy*Y-^KT)&*xTx~YxWj_-kf`$gY0h%KY~zCR-_s*9#;hKQ2ZE1|+C1ek z@$$;11?68HBFYt6(UA1n>YZL4WR9lhYpagEFsqj+s}U5DnOcS)(k_2AY3sGtoQ2jt z(1OWx1lRWK;>)~DxI8VF8IP?5r=n=bQvBhrUU|q)0|ea>7`1sHAM6|dAuTIEJmaRY zovp{ef7&-d63uTT1V#m~`hYDbSXBw8HG6BWKQLns=&Cge4 zap>P7t<815gtf67kaF{22k#M;IZq7gVcQ&LCmXmD?Z&x4*iAjD;esHB2N(glhCTKA zi6z)&0&FOAyXx7R+n``Ed&?-Vr`}@LM+Yy_i{!n-KU-yV( zL4k7V ){FJ>=>5Rq$qRp%D7-(>sS;iJpc}a!MCz}V~ZGpT9Z~`Xza3aFT0SW^T zlZ7!ZAV&YeQ3)UoOl%;pzj%|;gquE^-oeWpi~5`}xV zpjR^Bj{l=j?V9+XlOJxS!@J}kmN}l4M~3l93;X3W?#;@jn+5#)B>j!D_Z|i4XABv1y(rHZJl6r>+WgsOYF*l+a$d~XIUxoW62>4w~ovnYSunYIR ziLhCQXHe@MO$8f%S?gt6rJzt$$5gTxMlp{H(X)`IDp6Tor?PWM3=(G(JF2fZRM!9= zn^53Q$UQ6kaDoSMN803t4NMj@??gJPz}Kk`virRTdl^9%U;1vlMesXI5OT3y=i*Iu zli}>%t_OJPz47(#l?|RvO8eI|al@RcHNG1?Ra6{2D4jaC9)LUY2!u zEnmdj|KiDb4r@Dm+{1LPhND8CYN|PDIKD_aYGm__)m*&o%_H_b}+3z-4D!+W~8rG`l7s{J`I%$DYIj`^{Y={Eh%rvHPnkeoBjpDX(#jl2JYWe#k zX{>CzkK1sYQD>5BctF^(G%DB(>a|9DST#?h4oVp5suO=MP>bCFQ0cRs6L?oiG_boM zxanr;(H}3d-BBvI!0vbnz0xejZu5GBu<1$gcC__Y_l9*2OqJb!Gyk3=;aA_T*EP{R z=)gxfe_s@El(v}Tc(QTZPTzhxoNswp?iN;P=q~Cx+N`)#eBEE+*z>mZ5d_F?AE|90 zg+9|PL>usUgBIDSZ&!PrZ{T#8blOhZ65L;418m*5y~fmVJYD{4p>}+{tm(XEX$d@J z^U%i*8SisTk`}3z)?s#puTtecjEgI zl{IAB6!%B_O&-XUt{0*Qrv!=pMJIY*>?r%Kv!Wu*&dkPW#{Lda@GU1B-{+6j>pyng zqLjLTpKW2Kjy6AL9Jy|-O=drck8MB?0Tpy0 zXyY^}RylJs#w~O%3PC!s8)BB0^_6|GZ|>G}x}Sy*XOJ z4zryz2Td2tY#y?>uXkB39%@7`O*dTHB~j_M`fj+ZRk?Clm^j`hVAHv-P6+jz4i9xdHxrVfvsB)H!Zd#TJgLbG!25J zMW^SvLbez`UAjgx=kJ>B@iaE+1i~bsfby=)JFwg8`^n~Z*x}m(wZTMMbC{@kJ$_Azq~ZF z&d-&Prga1py8@&8yj7DVj6f{drZ2Y?IaW5fpq`hT8JG9Gu8@#lxREA#Zrv)&GzVdbV_Xj>97tr;-5T5ui z6w-NKx~~`L%sz!?b+&!Nx5{{nA5oU^9xhY6v))h?c)31Pv0uIDMVE5uG7k5iKL&Rv z9qjK>xH!+)FGODuG;ZT?aC#t0zfIrqpDEYV69@`F&6EWlUcRi?2A*x-OSBJ^f9d92 zU1|J%ZU3ig@txATuNtI6O9DAu1MBqN?DNq5RG{7PmAeRSef@Y$x60$XxKI+hh(A8* zV&CEmWRP_!?5TPAjXGUw^+cC_(J0xb-ieTO>lSxY z^e3ZMr!(!k!r(!t(_O>LWl;<7BZ9u~{l0yRjke9wa$3w|ao=x?>P6Xa_tgs> zk|+AWxD3O$lmP|6AT$i>eMtQ1u^#gAA6lNtXmd^d>KqrH+z;8?`RrGJuHnkfkbC;k zzyKyNM`ItR{#ignu#PzHO??pVNQWzT}&C-k@X;Dsr%RDX8B z>hxO&>V|0{oRkSKwm$MxRN9Y7zke2p2R_sLDilh~@k{DFbn_GD^2cXg()Hv4_xI_v zbF-;n2_m_&l0mW7MCUO~Qn+|#&^sw-X-+&!Vk^&W>PfCoJ3~10_Jy?X+O_PVHZ7XT zQ%BCWQG63=4)xfVtL~RArd;ZF!{gWV5HV|O%mPddCd*Ki7C?xzxffNMAs9AMY!)40 zuQ;(1eA;X}hstEHhm0YX47e-?SYs5gXJ-`yaQ~yG(hSpDfM1^37Q#McCYzZ~HMa-W zTeb@a4}F8ra8Shq+5IRevD^QFI&v~RNhGOIZWLLm4|KA-Aliu4r@=uw0|9#6rwccO zJy!<8|17y1>@EMG!%HEBvcLSd&1{|>vSWdjUXk|_s;i)7V?#!>I6}99bBDK~-}!nt zqrl9UJAP@Cmsd*knA#hNX+X^LJAUpNUrS%hzPtZ*{$X?f>XMfBo#L$#%GC4e7JEdN z+}9}A}(*An{oTtsE`8R)B7f0(^uKmpsQx=E%`OU&tv9+^!U ztgFc82K(VhBG%dQ_M+a0346x7%)mrJ`&;QthXT&1CD~r)ua>7v<*Kr_iLZeSk%|z; z?NGK6&fV1f4XS{xqg2-)GQ5YIwk?%=^-}7k(Cgkzg|A|$M4tL8&2l)xs4!^wLe{X5 zr|fuqjlN*iwIaw1L1~U1v&sPsR8(YWYrOD?*X%<*lyY5yE8*lX$Mr`oT zcSX0-r)-m7lL!hX?vy9fKK9e7I0r?|!64_PuTB}mD5=arB+9wULV9+Og}1s@>U)0H zqM+q7&3lh)MX*L@eSCqBk>Xg0(S-9%#`D~kl5O;C+{uEO7@568R$CVJgJ-AaR-=-y zZkaHzqEmwW^K<3XDSVo7LcFI?&}y949!Ufk%H(Y#8(2uzd1lJtg>q;gX?f zu14P%y`Nm}H_+Zj+n(LmIc?Wy!|TsJ>X$xm3R|U8R^HQ-`mFm6t0`|)bU>BZC&%lb z0ny%l)sB3E!Q9Rp3P`B>KVYxEg#EqYeD$eEDC#U6zHTUHNP#fQSJlE}x`haO}5tD1XH z`p(^aXvle^imNMCE5b;J2)iCfuH$O=vZjCG_a)ke!HR*t0a%|@Y= znEpQ5_N0+MtZ!oqdxw%5DO55}0AAWV+!OC5q9T;~Zpy9jPGcdb91L zK5b5%l$Ch3ZBs`x$#TnDp>4dRo??2{F$rzFKL7eMAy=LH-Pp^|@bY)3|H&{Uic_Cz4ufQq%RAtNl6OCm`6m#sgT)jYkWGKGpI|3` z!btkQL@V9uVjg4*U3(4Ofw6)kfUJ%_>kSnb6<758qS;QI{i22C1FBksnM6g5c`;AIpNzS_cuv4K?IERaT0w;YA34jM4Wvzwj3&|}s zPR3hDsgw>%n8+cyP{xw^6KwG)VHfYHAw&{0S(z90S9RUH;}FEQ&8|^vhXy0}unEbI zak!Xk?JkDnsO`Y$*060h+C_o#Bert`CmFF($Vmc@BS8*#BCbu0IeP{9_cms_SLv(< zQ#!nz1H7i8HCd98eU$~rqO4Q!7`#|oSOQXGRIU-S23fHYXV`=psV(GojTRqSKWAYO zkw$4GRF(!_ZsFKk-4d^kzI1>E5ig5;S@9U>ueeG>TEnJV;l>RcWI{Ax%B5oNR1tUT zhnc~RVbuK6NGvKe8dQ0KenJw8yg@=#MFHGUIRR*ATmfr|(qqIkIRWp`8B9{unmsL+!mtfz^X-^_KIcBRe^GXo0Uk2NJGfU9*IAa1WZCIvJpBd2%UpiZmm%) zmG5+hh#TZE3Z0`xPA(=?ow<(Yk6k28s4%#V{BCV&FU=nubhK9C;DLOQmQp)4r5$v% zUy(2y`ThFx{+dd1=(tn6?c!>UmQ(VS9N?Hci3)k2sfu@WlJo0hbjPVS@k|5>j|-H@ z{>CEo1N&{Squ*7;X85}<@0CKK}R zK*+B6LXDbmyR()t6?eP$Lj%{_nnJ)OHieyB>R-- zuF=oT!*GAs5pubEJD8yUEGd%#~IXyqz;%yGW0q z{)G{=_5hkzO&WDA6CQ18gh2fV8iF(?x$T2Uo1jEDkqZ1d*)aX!cQTG#W%uw zD)$SvkLYJZ24-#+I?ygb?Yf?B(Xi-7_f2g$cU5sEz%l-lV zhrn)GSfVs+WmA-j4YwpaGdGF#DbY~bu>E5NORd0oepW*8TOlLzcQlj|Tv+IQt88zSOHH9) z-30YrRk8JE3M_e#l8-GTw1?DVO`wW~NPOi{LSoTWtg;6XFpe0o#t=Yd*Av0R964LO z$>djRGP$yfk?&3wpA^bB^N2Lx${`C`D#t;9DW|2=YNA!2p7!V-8$xBImYe@{Gs}G7 zC1t1wJ;2Ug8cPr{$NK3eKcP3&NE*x3sn16wrO+O%&nkXVFHCP5m0I#2bzgnuII2=l zSFWesb&Yb>BC8a8JNe2cO0H++8tY0|=SHPMR}GJ+F${W< zb+g`=rlwX!fM63;H~R7uM2%mACxzjMREwTEX=wE7?fCW>OkO>uJEh>QWMRS>1qD%) zu+Q3!M|Ankq%5{hvwZU4t2wCsSf!LD=9(1^%cG@m6O5$jfgN+Z)5LgtzqR(RsrGJj z^-V*you=xGx@v2c<|5!nWgV>IWkMDkDpEx`J%<&Ms>*?d*V<1EV60UvTA}NK;hon| zAcApdDa@amN;@_mQBF&z9lGS#M&YG%1a1)VQMHv>{`(@C(qjsldsyhwEIKm4E=$#; zP6!fk5=Y88C?rZfi$rEo;$bgeyEt9ZrIw$IN=Wx?5Dt;EYOw?RK8bRYVsAPl4Y8b-m3A*UF| zp1NFQl>Ivyz38BeVv1uEKV%9RkMNh#dM35-*nd|fSx#QgI-R6FpNX=&o0g;~>p{rh z6PFJu7Vi$WCrtFR918YEOD9!NN?lDj!UpvO*Puzqo8$459bhcYZLzL{RAgCeXZ`YN-?d6(TV1`3u)evc z-_jJhr15%B9TU*fNZrxFse9S13c7msllO`YJG*5E!26m3rUy^w+lYNIVxmDbLCs%Z%K>Rs)qV8sz~JUv>!P}6)98Eud~**S z6BFAR3YizRyjLz1fvxIM^)*w$2bx!26Ue5IO-s+9du#{E~l!bFhu7ULQ)TYkfFTWI{r?(#sRXMj5!*>KD29KU@ zPX5-NUnbHA%Y7U@><7q~anVq^?^+UF^Yt?u*4ZiZU%oU+a%@#~H>02cn6uCs$32N~1wwarBE*0lvcou?J zF!OGL5c}%BV!t6-3oTiUYS+d>(Nz&-&r7P#YCN)}V$Hbl-H*+n&B8o1^O^~rwoQf@Y88c>{99Owz4aue{ zTd0-XQv_zn{aWq?T7f$5GenWe8K+5gQL7{cS#h=DQF=t=Bt@-TV49_E8tzlcQPpZQ zlx4>H*Fq-?8mt6^zVGl4AO{#&?SXjkAGw^;;mwb?AJC2{NFu$;+5w;)IUXHNo`lEF zq>4(-Y>cr?Bi}{SqSZGo*C_@e8&z&fnOBfecyg&s9A0|(*ZkeT2O949ma2c-g6nCq7a z80HCB6)Rbw?h|J*!$K9%S;Xdg381G52>7)v)4 z$^3tm9fDA-Yo1`|51rI4;%dL7`T~I|Je%qJFJ5!Lqw7$Im z?xUpG>#MAd@{4Yk?ktc}gZ*o<>E+vwK@g#(DTL>3=^l5N47Gu>8d{OO5I{ z*+-t4lpZL{1Un?<=r%K<#W2O_&WvK5=0oyh-|`ni zf;xps`aqx&dPLgM4MEzEzTur1*%-qo#gG0x4i9RB+yql7!Vop;{lu;ygX0kUz=6C} zlKvZ#)FMPNhZoe3f8$?t0Y7Ha1|s#2BJ6!ei2)Qn4+W{^@LY~=v*Q8`<2X7G^>Pyo zq4-@BX!{olqIB{ur=qmV*lI^N#HqmsF&rNw#(4n4U%U=!RR7vYW3}=(=3+IG5)ApNsICLB*_`NM$)Am^ga1M^GQaN;(Cis1( zZ2BLzwWGXvsg8;6atc;wx{sSItQIIGq(m0&^Xlu|mDk?RmoFVc(Sgwf54KUJGlgjt zp1?3)h#v~eqz%5a2aRPB6&!=I2jM*vUYKjDGp07O zS02x{Ra&++I&3ozpVr^5ipA;3wz@`0>c4RsFkH`h5zYrM3S3DiMAO7R#k`dMp@qV!)t%m0*50v zqv(%v{Ir*$kt{B@JP)VU?h0KBW`>E?&?g4{A}5-onjra+3wwZJ;y<>_XI&1T0m~W) zU(+HNKymuvBMaOFK}gLQ_lKZ3|FS0{qIBX*u&DtY3w@Am>M%@)zlgVY8DyjELNkV< zI0IyY$VVv1iDaM&B1GdHu|mNvESV)*%r|N9ZCtl0t_goZ5Ww%`oKc`EhGJy=M^UzK zT2~pyJi`Kk!wiW29_g7)O*USqe#J7X-o}gh-m%V`zU?_K*kqAqI@)2K5$p(w%sp2`G$@Zc5Iu>jQ17+F zy5fKIXa~2&sD`XC_G}A(x^r@3U94wG`{WUrR){1WVO`{ZSOv)j)v)eX|36Y>u;+y8 zi0y4*RUnICN3`d)puc`1aC_S_8@#t~TL3#Wye)ze5!(|zg?3*(78YmSh{~Et!8sTn zrqL1TG9PS^g5rKz3_CtN+!*ZKb!^Zyn9b5uP1 zBjwc<%{HkW_U7V=xU3ifYR6r~4)p(l#E3H67V00V4(qp5R$K7(U@kzm!h{ncesKvZ zllDmHDdmt9#+|;01jBr=7a&_n%Dc^&fqQ@4dLE(0oeDsEFm#_}kPYj8%T)w87SQ36 zr95hj!!67|#@x2f@M)gZ>~kdKO({Wb&>D$7q#UBgxHEK@U>FYO zQvY#jpSNG%>5AEGI%!Ns_}w?IuTOogO*6T!s(%(!#+zZ%e6RxUki18XG4iursuqDN zC69x@R?*7{xI>YF3OcN@$F)Tn-kFHf-x%%x&HP^)e@s%(K&qdsQ!ZZFk$RL;N1y%- ziPFYZpyIdjRsX!3AZLF$>qtIm%b-T#EY>VMqcrFQ+u z^;}R6IR$4H{q8_<&)+U@_uaBk(Zo{aW1@R{CU7q@IFgwbzw>G-0=*723H;Db*vf1* z)M066_h9Ug$-W5v5XpwNSTfsYG6r=oyePuH^z^bKkd5tfD)5$#fIr}`J2qq9JoCS{ zFX#6VZfOk`0xQ_9pEb_A?4E4?y66E5*FQ;Z?*mKSi>_LE_5sw@=$Jgb_M7zp7*0fK z9-Ku`t=wjxK~NCkx)1$`x*Yiy=lgNWMg^lj??^>rW7D-E8lUKiB2N8`?8b2BZ_$Zi z+;1h%3?=>f#+LcU$c=Ht(jq;)`WnTRcuG387Ckk$0z@ZjjPMxCi+cwi&FD z{dpX;V^_4fq8uim7>Db~h$T1)*ZCK8g>eW*8V0-=#)14Xae?lw6l|D4;({?wagmHY zviutUf{t2AtJ+5EIfkru^3^m*0&#+SwCO!u-0EAj)xM>Z{m7nmB$j=>O>yUu+=P-- z^xo*m^+wB&ySLj=k6mm6pAQyq=8X9F)bTZPM^p5vONr?7B^{e*B~oo3O#`h=;DuYy zFQUGFt~Do+9&7Ku4wzl3my{U+9czul((y=bhGUD2LsowRkF20o z$G_egaqm!v)k-G|ACZ!lJT|CXmLoe3LvYARhdbJ0zddw{0M3s1-;bSAw{*u{91K!X z9!Qj%e{>>67N<>n3I~vW$?38%>TdDUvPEvro2;hO;5Vn$(AL8jDRF%10lnK`b$avIdRo3j9beMgM17ChTdIn`?wb{QNzV-cR@iP9>aAwFsT-Rn5ZT5`a zN|-qb8fny)?sAz89$b78e2YKpibrL2sl5{=4Q^nizEb&ijb|fG#<#5J2q2my8`vd9 z5eF(<-E??eNgs1N7E1f(%;y7=0FgV&7#euu!QP&AbDC}6s9efeyn>8LiXnR$IEPZe zASfC?KRk;q0!go|@troa-TI4q4*EEVH#qmyOS%;5T=Da#aNAU*eM-c(gtIMJt2^l2 zn`|p7)DEOySuF>nhb{*X_wy`E*UldqW9D`KsU)&SS95-7V9zCucRSK^xN~~wT%fb9 zQ>wx3h=EDf*W35|p|)M6Th^5kcPb?55l+s~Q7ORZl{Piv^6mU;S{PmM8sqh2s+nOt z%XVb~``~dlFK$F7e9QBwb+HDy>wFu3$#;v!)}{_P(L4(pKU#y*f6+rt>30~%ZT;a zzk!F&h7qDozGB&^OIfvO>48pD*9)k_>3cy#aeL_gp#U;p8D;goe(T~%v*PVb+;-Qu zw~>)4**h!-!s|uI>v$KoJSQ9ml8?0`C*11jgdreK3@_~I zH%PTFLvDfwy4I~s$E$mZ+!h@h$jWaSaiDW*Nqqj1!lsO8dt&L(3E21AeeOk*vXgOh zOSkW^x>=A&^-ce*7hpAcc=T%~ZVxCZJ!p7X{tPXzqcrodJmWcMld-QLQ?iGXS)yeVK+4Yfu(&rj<CMYI=pg=$>d9%0MEqNxb zB)V)wds_P5z5zEHnv2LDlbQu`>N6(XKJd%?KOy!|+Ai@l0RG<($ z6X|q)UEkrUbitY%8DoKu1hPg>#9fo3y`x(Y%Eei<`&dLh$UShDFUPMJV#qWyNshhs z#mj-S^D~dzT1)TOI?b`lnXC2s$G4IR>Z;G|a^{J|%yc(VMH@>cO}=hf?|=S$*-HBx z=g>6*duLpvyhwy95mij4$B`u&D(xd8*Y(t_frcddM@)>sKzg}Dcd@e#ht^+p*!FC} zdy`LpwgcDMSNNJaKOJw&zIE{7JqhXM zx@7dZ!l|qEUCo1-4VR*u{Sz`Jy-d z4A+|UB^~#|ileLtAs?1#5I^=OrA}?ty-uMa7Q76>cDx@{Gs50BG8s$hw4x8)b{&W8 zBqJNf{NlvBu_IFNHLWkwdY!y0E&|@8Z{R>MVeZ$F+@is=LB|F)(RPC8e}3rd+hCJV zjnslCQ=;#MGpa6r1x-%;xbRJ$5T!q|-5_P9g=l=fW^+BKi|kP8zL94)JgeaUG~Z3= zEDv^W8A)j;Qvtka>N}K|%dVCvi-e)w;R2^jZdI6Ov;FqJNA-METl1*Nc0L2be3syT zsxq(1wtoWJtWrAj&hb`$vHiS!Z8l?kH-a;t2E&e5;P&w@h~-|VeSBH;;d#1fUD%JM zeO?wB5eQn8dr+WEf^G&P5Hyd_-R^O zhe@Qc3X16$Ir)!d6AJtlY;57)7SShmLS+>Y{UHziNE&XUX17sD8eFzP=+mfqLv=(C zW0-kE+uQ=n>^bh#&U7d|B9W#MvwOD41^*XsUl~?cvt*qR++7Y9+}#P1;O_43?k))y zf)m``9fC{H;1=B7g1dj4yjSMVymM#n{hnw3&{b=#s_O33>^f|Y9Q=CK6$Oo(BRq>u z*V$`!I>9u*kZ$`I4~1Ri3s(5Jxpg+K5+ASa5tn!VqT?M;?(b7wFUG$0>YR-6>}KjyQ>&BHJoua(gzAFLv{!SP%qv3s__fBu*O_)5b(~!9WWAnHQ~76IJ=nT`qSfBI$r9 zX1gg3Dx;MT$1R&7{B&C3)P_-N;ScKO> z+Kx^rxR)RGXB8?w9*nqLpMsN}6zPYQpI(t7yvMtg!khf3J|{VbK5Z@aaiWhWo(k7u zw2@9iBDmsLZ8xfkvhkI)8BXA$P_)}|WVC%W+Na~MzuX$b44z7=hB$Q?$X5qAx7Ch> z#2~8C%Eea-W>~|X27T(_R~qjT=rnq*8E)YKS(gi^wI)nz;*ZsD3gPN;x-KHK z+*Liir;QiOvFDqY`#1JjJF>FQYYEoJ7;&Zq@j$4;yxm!A4CTR`tUt*vk%NQkTmXQm zR1wMEtbw}(fLWanh!7D3D{vH#JEG9+^RNBa$P9*#1qH>s6IX+S!ha;LwGplV+`+k2 zShsK*Y5Au7mY_;XKJVF2G>+|Ymi@!twHpf7BC+aT-?ujs{P$dwlZtk>T6u&d zloI@LJzWsu33DKN9@cf?jCC;zMj86RZG1GF5#NvMQAP6V`y9sI|DR+mPa2LJ&abUUgz@z$(ancOR1a#OTm4l!7cXF6@9(W+%u}+!=1LPP$ zCY#p^0+D7wSy8($&0$a;47r4U$#DWa34CR?}#U}&uY{9LHNA&YgOtH1>xIF z?ApbO1gEfaFXoP~k%uF4m^(Fy=X6Q`rXJiTPHM%w49O89lUR97CQcIn+_9NBX%O$) z0AwkwJpZQS!()CkpS#8q8#F2f;$tzt8TxaF!~AA3cg+!yNrU+QO@}|770h}9I#HZN zk38Hji51M`&z%%jFq;YJ262*AK=$uB9|>haGRiS_{bo?Is5Vj{#B|cdL{>Z=@dhSy zPPZ64!wI_+(zV{)wN>%XaPhA1u>rWTL7ymKILHzHV?gz39(KoeZZwr#n4aUr4|K|) zN-lFFSaieLR90q)&<|EJpd_#!N_L8HDSrd(lvt7c_e>GP;v|Zh*gyUVGXla)nCHdH zV;hlxnY`%#!I=;%kNX?*56*yCdBR_qx#Vc(m;>XZuGoNfSaT&Zn1t}&*npH+NMKc| ztiVFHbNzw2Qy>8A<1z=9G%Wt+cQIh4juRdKAjK4Wq5NN>{;$j@>RkCaQZ07Se>bQ9 zY5JOPUseY3vXcKR^QI(91UNr)X8(&V{qyPnpKkFV4`{^)kgaL?cK8YKX{sRL{QcNz zMoItQ{)k{`!(A%^`xk!fN%gvt@F;iu3qQ13&X%BMF&@Tn*MO@IV{A|t@Vm)k&Iw#~ z{>GFI3|mEZK8Nij}(XwsP`8NNV*PC9Okt^o9U4T z(E;`Bfv6N#jemhE1L|1=^;lv>Qj%EbfqEw7;p{*?V12_-@h!9Rl_6ttWOFfnJ%!$_>=h2YMxoxf8HH;Nak!{EY&V{+BlTPde;> zL!|-r(%H@3fYZnn8`LKSB4GJ*M;b)HVeSSTO?yE0?>Wnn6bQO0tX@ES2acvGIYLI# zpE^4L1IU2(4jj#Y(|PWT70Hway=E~7AIe1mcC$n3PaR-eIsh4mIrw5O%D?HHY>0Oi zNubi>9RBmx`p79{BE-FhQE7rZ`JSK{ATWV zZ;l4S=A=Y$`<`!{?pEm#*&_7DSUOF>f)JxO;zcO_LS&L%=21Pdh=~IG#GJUw0Cl>YZUsm#eW%^=F z6awc5H~fG5jOIU2|NnN2e^+ZEFn>7MCejbRe3U)!$=yTLEE}n}wbg@Uy15k=3!tmG zRwO$u=Er%&L+tF89cQrp=^IHe|4b2Wwh+nf#R;9T2H)PJyWZ8%&3tEVS5}NU5S(2A zLlyqr=JMV}`!KV5zo+2VDLZFAPKlw7ZM$Gk@+9BAXAzP|coF z_JX))f%aXl7{ipx6x3CzNLbucr@8w>9Ffga-aBQ(PI3mX4t;Q(+VCjxbTv2 zruhegy=jMXWSvsI(bR@_?uCi>?62dvrnn_5k2lw>U-PDxte$CWMV^c2*B%e3v}~PH zR)3vz`8fO5bEku5?t4My?4=&_Y5vOeC09XRYgZ3m57UFBBv+gEdA%|Gdx#h4|=V<>zBQ>S4wEWDG9YoTEsOGa?h*A9<@Sp z(6=U$ii;wem##4awak7Bcjf@w)r~07rUF_T?>sy&Z8?s z6F1Q3G2m~`sz4xXT4Q1XhCO7Xpuyi7H_FSxODla}7jkA+4MJf3I!R752P@Z@ zSjsxDWm(OEI^5F%OzMOqZ083Gh|`TVvqM_6yX z%NasF`)WDNHF%3zo2{Ici0K104+})F+HlyGdpz|QGBR`#NAEY9)}CqG2$v3~gte0f zBGI;*0>)E05|OCC)jeJqT36AFf6#yC?_-SM0p9oRHP2y#c;9?^ss{1O_gsGwZAofh zuzktQIlH!_`kfEQVI;aCm=0avisWmiSn~{aLXjH%N#7jI>VP)YXNP3Q3zEd@{h(7 zdr>LqRjnH_5@w%FLF-V(z)*}Y9vY<&(fFZ%)h5XYcL>B4R=LmI$CGw(AN(xHO_nsSCzUK{GW#7V~x0{-$T%Kp4ubV3l1b^LWph{cS9*eF* zEu!tZvR#A6fDL}HW2Qmg;?pF}v%fa3TPUlSF--dfE@0s??qv|=QXoL0{uvawk3|Vdxd$$-4+Pn?cZSzp?+fTUvv(VA zOhs+JEcrNUJv(q)sWkT$k~}otHMQ~F#9tsacpD^v4ku$Q;p%0H6PNjb@8~odk3HHH z=?d?fn7eJb*~$Oa+rNL)$FNkebGUus&@SV7_4Mi;eY}9H*6noGy!~gr>WzUJgem-Y zC{jnWTb@BX5eRVk%OkNzSXXB$b=A9O$|Z=2Qyg$`!?^vO+n;v%`&QP?Qt6hMzACjE zWo%@BTqjJIEpl-iQ8X#eSzKXD`%jLhk3cYLDwXHn8($|DMmFvT*dZP zv(SBXPu-Dgl6x=g&v5Z@gzDhKeH1kfQxMe!B;R>leyPfMx-_0`RbMQ&kycIP`w>_; z%CAhQGY~kGfAWTunuzZGj|z@Yt{MVf?|Lm+q%PGp~h<4@5*~^M30k zIC}lg^&Bew^7uGYk?yVm31TYNIMJ*fHLe6!)Mic;Y%!BkR;m-xWAst$| zg+WpJ+u0?6bD-Lz)B?f&EW*bB-n}mV{sdAoy z4Q6!`H}rPt&skSRRRu-434+j>GhxN~EBvO2U~x=>&G+5!RAwgYJ0}Ntd9n*^0}J*9 z^km_P-V`Ip6$m?r2!!$A`=m0Mz_rrlH~cuW;KmD@=|BUINl6x*n<{q#zLy9Lv_%?V`ge>60VY5+e|NrAGszJ#fWc*OLo9UMlH1aK(AuaE<%sXWADH zd{)G8N8j$7`9Xb;gKIY4e2v;gt^9X>=A(U8xx6%wb7%$D*M4-@DHSQ6d#w87*GoOp z9A1%kI)z9d&?YAOtM+cnvUjGI2-mYpZ=!cCTDR!TZXDW6>r3}naL2~AFBhf{yuYO4E6pehw~#768L7g4yY!Ck?1&^&$J0X#uC_iWNy;^)De*<9PEzyG3+ zG`kQWhk$Kkzc*UuCG8jzNi4$t==D(T?l&~XxsWtJ_lOPA2Zv0?$xT)L%Lh-!bRuWx z2BN;jLVV4LHP2S$p^O*ZV%TaXhcQ znQF5L;ydj`mJ05lzbI91#n*B<;-v>m??C>G5?Wz z=+oNefia9EE|ESZ|Ijt*kq{O~!V?{99p;nuE5%R6qE;vRWSmWfsZc{aYipPL z4$8cjM1_Xxp>gk_YY&~Va8?D&_h#?Dooh=n&+o$o^ZVqY)wM*B)1FyJdZ=PvxRv9! zxD{VniHjk9s#JR@%8WawPC&u}b1q^MI;uR}E3&iY5cCqEZ>4UkZ?%Pr*^rt~*g1TV z-_7u#Cm*dRM6F{@Fnp!HGE``-LH22=oK@wGTP}2SNbvpU<26@4^5~!Yt}RS6ui1-& zZ-x#r&2+!ovZ28H=Sj)E<1>%<=VlFqg*pBZ`Oq56n@O-n`HiW;qa(Q7vm4$!q~J%J zXNN_RQ*+0=7|N%hZzEqXoUpBQ?IXzPbKbUFH+`f_wte{tU9Z)>GA#1|lSJ#(_r@Mm+3G2; zX4e90PuOHaw?>@$%lpF5wJ_3kY?z~l*^l%ERlx>d$mwt%7i!I!5-x*J4ywDYtBvfn z-5SL=rq}0?RSkW~sgTQ(?^mg-tr}yla@JwW49VjP!<->qflSM#T!*YY$92!0IkYN2r}%ND1dDy%Mi@`&Qn-JEbp%_20@8mWuwQ`# z8(ut|ER^$5r#?Z6xK@(vz;}-)CQapQ^t9*WUGFY|gkB*tLDG=G9xldC)fY~g9-cCJ zcUl?B|Mm@eS+;Mz2l}%?^D=LGTgx~J&lO>*&dD+@#21IAsHBo8!Ng7oP3u+VoD zSg(=Yg5avNTA*G*=*sE~UeQUyD#{XXoaqC%P13%tDCWrQ8w;t=Q8DytV(X08~OjvP(hN6eCp&)r` zIaeQmIpQ)=Uj4?{81lB-{lUTh*Bh3sYrea*u{PUaKNx%c2e%>f6}7eLvi8t+)zQlh zjdH@ia>A4bpHhcMmuHIa=NmuI0}SUaMkDKZby-KcPn})Vgo+vl2aQx(tv!#<1?|~; zDt=uYaHe<|-ENQKcS1GXUC zemg1Dw({Sw?)gky`Dj@reeJmeq57?NnuEu*>G71c zS*PoygLG9Fu%`Hq0uk=eegz`T!I!WSr*ARHy8S#k-EE496rCB&welv6ERW-hup+zR ztoh#2mt8r~SA^2bhgiW+D}qKE(Xj#+qcFI8eO71I(I?0l+AYlAY|!wOvqp}zkdXBGR{JB@~~Md1rP9+^3YY>Tc&D`8DUNY)Ye7!Fxnv{*nK2> z!jM8CZ{YSKI}l6*k)y#dFtbm$ZTBwMB#ACKd?hQ8b|UbDz9bRncR;1QB7!?H3RMVs z1KX%!21C_m6|c!WhBg6)|4v@gzdh@XfRg(!WdXcH(O^{Rna4m6vTMn?O3U2=T!Y!l zi(CbAAzt4?OA5I0p;)?mb?9+19@zQ@z!WrbXpXGfS1QZ zyd~98Lka9iA^S`QJePM{Ajc%eRH3H&iXW=>BgzV(U% z--UeN#DwlAO}IwGqWJgCV2y@*A0*O=9Q!5$e>gfH&CXNF!$yz=L%Ki4yi*~ulN_vC ztO6;9pf@=7SwKhUM=e&7$Ii`Ff&80!0yiV3s&X+6wap=qN=oaL4ooFh+Xghgkb@&G zs;XO#2Xy$~Q`^!7qW=M#z~BK%ig$xhfdMtp&;Ok(tvob#!)S!ESQhxvVwI9)W=GmP zmAa^c7te{vVRZyw5{nq>sKyXOf$~MZgvw>N6QQh+Nd^p4$ixtU4kVD<;q6i?0Q(!O z%2ini1tjrjb6D_; zSP^*|U}bZ{2Uah#*~ZO*)zXnm*Lc324K4q- zVRRTmBI~!OmaXBi6A_4&SW5;>E(WI{a;_U;PtT8!%8nLE9HpL$thl6dmD%U6qR4qgWgj&0zsZ0#>qb^ z48HfF-!4^i2SFij6|UPoU$kgvOe-xB?lldLUWhmGmlMaymUIycZRx9SIk>S0ehuDO z5YF**r66D$xA!Q#;C>L-Eov^`5%h44O?T=?pd@viD0(uQr?8Mk%oCW8h34&Ne%OU- zC=U1F>M(9LU~Q**lj@L&ICx!7|1$_=vE~-+j3IR{iZE>VAQ()Utq~@-U&EirAp{C| z9cr#}i>ot0#Wr){UO3*r$oxH365S{n$S{9Te_t3U@meHACDOcqv1RRiHIY{4=)*3Z4~n=7+N+$2liUdv3m zNtP87xD+u^vyc`{4^J5eGqzZTfcj^BACaVop)Uo-ywrea0FWH6D*7nei;A5MhERQ0{t0dsRRRQz_0wrLx z7p$kFJ~TG%a6E7n{UnqQ51f{zap8#Ll&E=e=@hX_)8d_~c@y822MBHVEcxOjuvDph zLkbv9l&Dh@B?|A&3>4j_3sr=?X>_XeB){QAd%UNZCObWAMo+lpw0XiR`H;Xo_VeA_ zrNi?C<@LNH(*D$sd&KZe!TBW)cFt6vBu6B3RDuvnj&8P#_hG)}QoJ1)u?_h7xpvJd zY`HjA8jCEx^_1@LvrP}_I2yZelnw{gt{Vrg9O?=6{b_TTM{9`!Gw%Bem-w%*7ulzcBQu~;# zpm|x>xaq)L76^FJFfCpFl67Un!oybTfz=^t4G)j6cBSV0v z4@U!!h3Knjxd&ZcY1fNWzLdhk37i$yg!y@kzZ+}c*!8M> zN0h&vw4I~FCk9G7&{>^6o=njUDcwLo%vpXSX+9SJ`1@S^JD(JZ0J!J_SqVcEsje zHv2;2pG$Mh_k~vXzvTA7A-wZ;7WVoi!=O=$@wiGyPKcCe$kNzDN+w6iYQ?mgT2d;E z0bfL?q8+WDhB=v9H&(&4S{vXM?ta;Wb;kx-OK=N1FU~M5uj&Ca^H3tbBkjcpCpUU` zWaOU~0ah9*S(xsdQ!yJ?K!bkf~)7B;y)56JrsD-B4Lyz)NCRF6-eUWf3M$ls` z0|$JYa2;wA#n~i!JN$YJDh7k*vo<})d(`jS1YR0p@qwa0OHd7s$l_yhZV?vODWzTG zYYb^)r%sWgRSjsm6V6PvDM{MnG&e2e=AK`_eA52UG;LcFj_RQ2P(Q~SN0gxuBa>7~ z^>|d0tJx^l5>iin%5NqjYPWB`rC!pWZOHoe4DuC@Z*|SRs4<)g69p1@R5~;m;|s6?mGltjG@f$W1kLp>o1fl3CHzzlfqBFamZ9& z1H6^!+gTKbStwR)4@lBhlpt7_07${n&|Hpox$i!m6l~8IL|yRgqzWM`-!)3j+z>y= z7Ugo(Mvb44ek3pzKh`12SyKn+y{<+ZuFP382j_ho>vChn$`c9y7y)J=+=bR3<({p0 zFvH9YN*51OqxR>psmWd|G78y3b*tc_0i{c#J3`{M8j30=+wpSBO1HRMpbjaLwQ;Kh zqr&^Qlu$AsxnQBe^V-E31z-DT4spP2Q@lm~dO`mE7dZIGvnA5R6u9_(n(4heo!N}|%iPz?c0={I5xp_eA z69W{XfZGcdf{Y1JIK%;;04fw(|1Cg~2;4wLf>$F&@YO)H2IJ{vwDeDb1rkEu53$SM z#(6gP4JR&%)w9=siv)xJNw=9ynDTM?_F&`_`IYquwo>fCv~-Vgs*dP2ocS~lxS3$ zYs(Ol``MrT6N|U!2P0{C0UY@K1vp}B1HXY)#T6Z7ceGEckj-~jAH`C!XPFzO>#>Bk zyE7BMx3smsRiJ?Eh9|fJQoUnRGpVd*Fhn^8!reCB*>uiHJ|@jM4Zdcaq}68ug1&UJ?CvpVm*X^1@kPtDg^Q-0sah2B%{ z0cOkSdlTZfUzf}L#;}4u^Z{rzfNG7r(g)D$GC#R#6GjFUWQh@#_muoBC-KnGdHOVO zzkbFcl>`q!Eyq9}XoNQ-0~08kf`v9#h0H*GokeOP>opy}g&3-Uwi0Kdb|3%lr?{}w zCJ34t#}6<_aYHC@XaU0r7aAXDR!rC_7dHeICjc-uaiO7c7y*M6FXRz>Q54YNL7!uX z07foe$SyW3U~J++FJrHYlsyJx$m?(~`?~P=Y|-BH*9OIOnI#-Fr{M8Bb`QP#IH8UL zTb8{!hJy_|5GPDo8xhlGtVc;Hj+r$kA%Pg}pOyJbEkMAMii;L9=;MR|AkN>E!v@5` zfH*y-OBWEM0OC*yM0Y?8|01U58iEM=sGtjoi#NwG0kQiQ`W0p4ksT&a;HlG^yz>$f zEhlC&!`Qq8qUQIiu>gM+Rfj^@h(Htg+P0W3MLSwn<4lZryqJ%MSzK?*sx}$X@!+IE zW^rV}>8omH)9(*xxfa3u1STOh%=?MRfm9r08j^@K-w&9C#b5i{dbTl*+@++4Z?_96 zZ$8C^o@N+cBeez8-E69o+;wsuq+H&u=%$5Z#ztnMt2`YbC(VETK(+xRye|qSTy&CEKhXCE`#PZ z4czB2v*;sLOjNFX;U-;mF(aujPVLoEKVax49tQ-7(KK@J<9g0uNFBLS=w~Ua;iJPG zxJ5`AD}#k(yoBKAW9RVro+0$@8z{V@iQ?j+31d91gYnl){7e>eYi*HA2^K2(NGDJYA z#lrwOx-s$x3Z(-N6w@2@IoK(ye?%?t32QH-kUPM(unGacXD3ElW)& z*0!J&mfNv?799(|ar=elJFlH3iL(1k^FlC_n1C&<1H4#>M}pZOM(MMgk`fqNA?hh* zNPsZ?PJyq~EHOxI*%QUc%T4m21e%AhC9m!Q_G|@&{{c?Jo}Ax-gY|8-EH!?#)l$dN zy7g!H!Bc;s5&GWtY7d8tBjs-XR&A}OhV=mgo3grNt#k9XBC@Df^CpSI*Tq7-KnibeJb_WJB7+>4!( zv)^oSw34QOrN!bWyq!>U4!1gwi5&r%ZaThB)`%{S;4N=~P4Wi8FgH^_439M| zIv|LtdW=y71nT`E*oFPs44VWEAhY$uv;ZvnQsvT6Ekn#OlTNfv>25K5k}=edS_>& z#E{ulHMD|1x1GI_oB!!DGj{o$aH6E(acBQ%<&(4fyysIa_k~mDj|`vlkj2vFk|QfO z&zku%$okQRrEQ{T@6tIle*3WiCR>8tz@L!;`8>Dy ztF7$=ztVK_W32{6=*8qfV56+0bKvI!HvI7Dj30|z!IOvkdk1>X-f6mG3f^)4{F{RK zzRAODx-d&*ANxilW#3s~#zrUPO!jO+IOzvB8`w1tWb<0LZPvf$S+rG+Oj+W{gi_m_ z+eOVa6M4OMW`B87+1B3{d~3>Jqvz@2+|CV z=kw~(k2L1)@yYt;gNn#&*K7A;P5lheXC8X;i?CDnT1`3Ci1UoA(q7{G*q}2CgsC^? zdj7HgK@yN430T&zcxHu0nOV8-1^a(P)HuKWnE&eR-$NiAB7wN)Xb{q(Se=+B#uRe1 zw!{P}ND%0RK^hUiq5j`~TG)SeRv65&eJ2=EbNz)SL@>#5)Um0m86AxDW1<72iQz~@ zU!X*z-@f>7{vVy=I9kkz>ae3=_04v!wA3MrRX#*B?__pD!|^NKCLIy#SJ*sduA@kw zf-6c2E?4uD1y?N;T>TYeXN+;3*s225p_c08^L3={^hexX-qKM9Gw#fCM`5zIJSk7K zr=FTvu#X(ize%fufV>N?xL&}Gv>#DQ+!)G(luYCpp=4X_Y_Vt8*0)G?)L-T#1dfY6 z9}b0AXx!BVS(_MSm*%7n3|XKvrZ{edr%4ZE*3^CERG z7XETIlOZ`$vw#0uS-=vD`uEP=6P3=RBr83ACpVh4Pa^|P1^YE9B+3an3*u9zIWE}* zR;oA(y1qHgPMG7o<$`asX#{sVN9>hD7~`@W^>-RTLWu)ojg^jCk;wY6b-jiWR1?Rq z_NvPsEliZ!Tz*KSMyLqW>@*-|g|KSGb(Y&JC!Rb7hE>F!mfvd(DS0sD6ZwZOx`1G^PqEICRD)wO^CQ6--11lW@`&hs>y0a`J}4;+a`AMuv8s zOhhD;{;F{>5%ER(Pe1{n8~9rg3rmyh-@*ZyizUaC<3+G*#6RSwTETFp(fU)TSIixU zWXm}0YXXylPA};-v&g_8HWh;*u>Req>jk_H_?xf)cTp$+wz9s6{sZ_slJW)g zUPYF-dCAoHl4vH_R-PNHlp4*1}Z>Lo@z z;sKW~yAa9+gdPB_r}(?y^*52+3z%pBBKkY{J5ulkJbV)z^6@1T?C(soFCx7esNklJ zAGd-N5~Ik%KjDHtpvyB*!pl3gzMWOi)~RF&A>N1RdK+4Z1^D@;2V_Ej$)xa-N#aFB4I#Kfg+eAO0PF=`Ah6XAq#=R{ zPct~%(&hBy8)-{F>KZk{ornJM|ZvL z&)hJx_bfeDDRU3i-ZAxw=b__aaN7TNx&ZiUCyLP_Uj%~tp$84lyQJH|3-EW$8Q($b z3*Rpv54+CGc|Lf1J{vnOJz@IEV{O#nI3@r)JE^X`G zj6keS&dE`PW)X$b7|z1T#e}3*X)NKY{rI!6|Vr~w`LjH`3dy}$X||7 zE&*Yd*ON{Wy#>Eb)dt5iUfxO)Bdz96Q7u+C49LDXaq;dBlh{Xxk(hL++%Ml;EQVS7 zy7mV>PHJx%en2{l*_pYU1tD5d!6VQi4UhTL1!iS!WhHSVb9+T*^ru`v;d7HYnVIj7 zQDq5Aeh7~LgqQ}-?F6aWn?hv0};_yb7XwdlXm{>-lH)Q}c& z-!Xj!f#B#M#8_1BFmxwuu3bj)%q~(tL=p&m5!k;%kAlI`AO8yBIVC=2b%}lW4Z+}p zI}f$`>hx=9rH!nvc^&?epPOmw?b`pfr;T}VdaKWoXq|qhDM-O_Yi0uX;hV&_r>GOt zmXlCK-)~Qrt-@fjYXvPQL5Td?*7X;CeFS_i#uh9OD9>vvrLG4D>tC3v=-GM*_-I;s zDD`g6*1G)nf=6L1@YZmV2!BD~`EYZ!gCjwj2XW}#?Co6`RJM7~dcU(PziW#d(#TCK z;Xc%wGT$kdd8g_;-&j03qMYVdewTb(D(vfs;boBD-XGd?Z28UL^gg+K_x#wrEqk=R z0Om_KRz_9#LH&7u0Q^jdNas0+>uKoG=s<26m~ zpK;{p4qRag@Q>NKmRUoB*U#L%ee;m6$B@=OY@&4PB9VSAUDSV(@!(wVNRPps z*6-xD6F~1f!O1E}pbXMd=9=H(u`5H1hRWi@cllfFaRCXQEb9yUkW&IM1Lfbh%Ell$^YI{cu*{@{D z2e9+_N=tfqi0#};LwcgV?=e6&mm#uEPPLb85sd+OP?95g3bRZJ5qkPFTHKFaJ#LD- zoU_GLY;jlZ$WPU`pO|u(nXvY5@lY4gU82%QiK?Xaq5kSFqYz7t7HTDu^E%yw^X53{ zCtr*mqFsay1e#BH*Qz~~bNx*thr7xqsA%s*GQ62!^-lXgHx`2Tc;mTuP>;HPG;Ut# zJ0lU_GfHxnBh>_K-2JKX4QUc1stG&tM1NCh{jPGxr~693&d!KX1y1zOjTOG3bG+>cmo&>4mMSGfsB-ATdAx6}G_<4QjtOaW^H1*jmQMR+wIIs4!5?8~MfO$CQz!mTuQx4isz z2p*u8GqFqblpMQ2S443J4GL&8mu_>j(8xLm-Bx$P3w-e%+MvvI-P3}ZlQd8tC z#$Avk)JSWv-A|OMC9-rP&L^^j6=gL7qJmzcqJSt+H4r5TM4A0a?vzKEE4lE82vt_> zvodgJZl;mvRR@Yw0L3qi5Y`gYUuGB!%+RA6n4#=6^3g)qUKlx35PLEMXN>|lYaV}Ue507eNFq=wRbz7=A}^=#Je07KeK}`Fz=8Wyj2}N93z83sX~p7te~jIX#7a%e~1#jHZmD42>wcYl)}9oI~hBb7V@i~cC8_O2sPs1 zPmS61pIY6AQPH{NI^k`2+E zZ8kAVCSFUD%>=4<@-z=S1E=0p0J4!$vVn!@6Chbkit?u~{TjrJ-502A-OLhlrL8hs zc-_kpV7QFCf*j#)>m|tfYuQa8QNQxGZ4mQlB=gmZF`TQZoZoSEU^5Hl57)Sf%7gWr z@?vXOuyL6|*ulj21Tuq|F0yZt3XI{JDWZZWs{@zNesr17b&kMnZq!=o?|`4#YkaG8 z1iR&=)12kc4w=MR-fXByE~2KER2KB@&KyK$JB)S z>HzJxJ39b{_2c%1f^hJ8q5QS9Y}s%k@l`pTxiwk)pZgp5tu!9lxKngnFB^P3mX8n* zt4ybi#z~(kHVl|$BA;!&U2ASrA5*@2*_TiKY-wihN=QifzT$iQoRH;lJNM*!87I$u z&rmFtP)G0Sb{@IkE=O1%_H=S~Ms7Rx;JALl>jFuUr#2F}LAitUv~H@qzHw@`dy1KBVefq8 zJZEuk-Oc4yLw#Z8*8$vJfnM~|WNK>c&tI5a@G2r$G?}zHkMe~&YGZ94?+uz6({XKy zNXg)`wAB4>v2=Uaiz>k9IGyPINPR+_Ck>CFeRNpT;rSK#Suyasek#4*rlgEOnaONd zxz1%Zkz*X;>drlop^*Tg+bqp~Rst|f=7Yd*~$zUjtt0d{Sd5rl+F5>NnJRjf9vnVi zwjcVXBWqvv?zBx83sc9-?Wqam8NiTrqe_I4DFMC!ZC1CMz-2%1PKS6o@9Kd4STdyy z+N?Vxm?;X$LO%5uN+O1=CBZd=CcOl+DBd;A#(f4D=xSRmtG2WYG?wee&dPh@U6*#w z%I~$7oihfTj~v}+yy=gdMz^%D8(R+e5`L5IC0k1c1l1PN7VaE-@vgDJATZdBqPZ+x zytM>PcMN<#9tRMWKf1Ma(b$p#L{09T+1zO@O9LtQ9DkGB?=+UNA_(u^E$MEyC#M4U zT9%+7cuRg&)V*#syJxVr7N<^FvS{w=nwgsPuv7Hj%i__we!JWj9B)%=jYPL()=Z$$ zASf@pNMP_#V@y57WKupAPj4GGUI&`m3TLW3_=vrs zmB7*4kq_q;CM)s47xr|R3htrwP2umigeM^1b>i}jSJR}|XiBA%EX4=lkqENspfBKeQm;L8db;IM6jMI|}rAtQl}d&H+(>Nv!I zOBvpW*Iu~tdcauozICF|%R1&>^k*P?c&cEi4dn-zx}VMnR81L1&+Pq^Fn965J3k0p z(KJ7h89~HFVJHcx$bDA-Fjasd#GmYkrX(OE2gCJ&Y#UsenW8WtH51k0qr?vwYNG$> zFi{k?z4=c7DiE{@9vAgH!~di0E#u<&x~x$&xCeJ=+=2y{;4Z=4-CcvbyK4v*+}+*X zg1fu>ZSu@KGwFsl932Vu<_X^P^3wBdi({M!gu`}T^j z`ro`jA`=)y{O=5-ut)7>|CtL&_m$?HE&mlLyiy*tJR8I=Op`nNi44Nv5L1`}CyL_W zM_z}orFub$o_Bvoc|-Uxwl8HRo+(=SeDG7Rt3tDxSx^f(o`D_WbF zANMzB6qn&1TYr!xe@SB?*^+Xogk9&yn33b~mP3AFi?lfDv^G6{?}MPVPj>40*PJ@r z22I|nCj~9lj9ZRE92h2RIu*m9;VBPTY7mP`?5)ouDh1TzL+X)Lol-*6gj$LEs)}23 z9YKA-Zyyl0TS9+X9$6W6ISQ;QZqXSK@lR3zQ|ea$Odg3YJkgPdWmf4YK{G`u;3(I>GOj2Xv0LIN0Vgoh{eb_2eD3fR9sAz(;!2kMt5Bk<_{1RdJN%3BVeSOh9r=f}^zcrk$9> z#?C2JyMHsNVv9a%;#lcxXv{O;owt}}#dBtwk242Bgi17<4PO**7W^=cx%DPZcFdyo zJuNHoc(V#jlBuWlLouP3)0ENi5y>&k&H|=<17=%)l&6P$8SeAlPXRYSE$!Z%*3#3B zr?4oo4;67uj?bnuubB-&b+>)8#22BzwR%X_sce0 z%i>Z-*3dIhI$#=r)u+)ND|YfV_oCMTwU8-;Q@nOqg4J}8*hOJ#Tvhrptvvqc>k9^F z<6c@k*j{L0?WUEU+oFdNvPJm9o=kkmZ+aMdV-|A{UuxObNhRUljjnvRpI_8?&L zXJC$S__uHwSUOJPT2o@vDS>}e&~)n1>b1y!S^deMr2OHW$p2{<=k#53=d}t8m@>lT z_5lJh;*r%OkZZ9RO&P_3b^rz`1f2-evg0n*VRTl zT3Qavjd8Cu?xU7g=9UuT38JZSmMVrCG*r%eYfy&%jZ4N77#v$GCsw>d6@+eDT4oK9(AI}`(gSX^-uz*Af+ok-&}UiwcJ8+NjtFn~ zhntFQ$G6*UGLxbAxzC>G-9rCuHbYl95W#4>um=+$+aUtFjuH1K!AZt_0j{f?no!$L z|Du|)D)7YGQAf_7GQs49vs#la`9tUWMUB&wRGmOcBuj(X%6rXSwaMecdeZIo^2 z06E9htEh%!Bb1nbDe})iF_A1)&;gPx0ZT+CH$Rd1=j628HVj=RTh>1U16aBtyfk{? z;g6wKK>s+ca#-^8to-FBdHrcuND0>pl#q( zy1-5lSN#_Htv5l#N&NrP(!I%W*$D1>vZ#IU%he|g4ZJ2L{kbZ)$7ckpN}Q6(x|2;X z$xX;|BP2{!SO$jOII7Ce+G}eh3c6IS+$dw8RbeY$R~|rtn!0RUK7Js3=dcY0QyPbz zq=M(Gq<8AOouC+|bR>UtRC7iCB{A7Gq4}w_6-H{;2%uI?mN-1JC~YW7otR9Vz7!|1 zTL&f6`0KmdsV^FRv7)xe1|CVVgt4le9Y86tZXi-Yh)NlIJBZ<@qPF|Wg>b^KWHfGj z$al9xyBb4MMDp2Q($+^Z(Ck}3`w2EBt{ z|4>&V`gp;0jd*sUO>alp*adS(jL7Y{EYI;;@Yt|jF{00kz3m^MO^BIerQT7rmCW0> zsl6q7%okRa*f1;$TOri+XqxVh9kucbOuko3U4DUOIIm%9ctqD; zGwEx1L@^e^{BwxA#}Y62p30)*6c>CxvaqY(s@jq;CMK{Zbn;L@ z^&p;#X18Vf%q3)=HtG!PGj(U=(>#`x-cfT(a|?QgT!)ekW65hQ9_YY-67}B0FnGCbo;k1A z{8j3)B>2b_nm3DmDz1m(eFm61oB0&z_w?-@s25s>qbMD!FaXi-U_-G9{PqB{n3rrh zu%Qaz-+$P6;y|~;KT@(P|D}?K0d$D`S0WZ*B2==Nzrn!VQwjW6lK;y8K>?M&RM6HP z{Y!>kjtY>@+I>(CpvsECetXGZ8uo7$e+Iw!DrLmryrXk167^!CZN0ND!b`T;If$eh z=IGo%xCZIu_d@Nlxj$K@g{?RxV@ZFbaV#h1RJ}YTFWHdiY}%4^ee;g!tECBigRF9`ozK{d5e`)ZI-nZf8BgK zrG!5GmY-RWEkgj?`TPydu#?s8zgr;PGXHN0?eQKC~k52IQ5Asn4 zW;zNVD(0Epot-vTK^fU__&^EKbIj*tttL%!a~(t2Oh5XPuVXw;*0Sa~Bj&EDh2y8Y zw7qST##uM0OVZ8;WQqo4PS^S)<%Z;9SrSMr{7t9V_%f3)#L?(jw2 z7WDGMjIhn@@iOhdKA~EspD(){xpS)-QQxB6)QiwFidc`Dm)+ELDG25v)LHx7ws>fe z*uD-j%-3}2@Ahy^w5gM|Nusx&kc-F>A9OmVAgZ?L)wB)JQ!Y9#MPAshm&G&Md>U6^ z11@MX6j~#&F~#RY?vx1Gn2!NBtOaO=by`K&UsIjowMz_i10AFK*8N+~eybeWRt!@z z%PHmpO-~DOQmUd7=rhwLckyG3cEm$DP=*RsCNK`|r$A?wAuwC=E_jImeprA)F1=DN zeWAb>c+>FouHr!gKu?j9BbWLnRv|Zmazs=nkP`rtC!kd=P#CeB_@T0g4TQZAXo(MK z-3D;v()6k>h!0is=YqAOo&$(!W{ng>wB@MzVrppRia;3pxWtQK$tWUVr)bouv@j?Y zeHM-~0g8dm8L+V~2ug&5Y8Y2XISLps^0_+!3dEF(lcwKA)Nb$el3j8bg~na5Vbdzj#C$nBEfQ;Hhr#-Cy(1 zXG|d}4(b;yK_>_SuuuHlpp!8^-=L^LD#!aZ(LhLC0t1SBT4YeO?g9m@0|N@#(AZ#P zx4%_Y3v|yYIhCFq<`ryr<(%7oPl~1n`DscP*N#P~3Rx`%A3WgTh%rPZ4ps`5%5oF= z(n%d7++7rN%0P$OEC4jb1^FOBO2O0sj)5Qz7O^qte#*X5I8O**y6A%>xik>2HsJxK z$hEMB(=pM6{3ZMtFlxl6sFh+xu)Zby;6yO?o0VMY_^FGo@ zZ+-Y6Vm8n@bbt2ycC$C1PpHK&cw0nJ+b7B=1I}wo0A0@~IN}eyEdppj zDh}ej#sUCT!Ab)u3Dnk!@>rmXhUNc{K+a6ak7~KkC!8NWNud3$c2;xz(G#`w-!_{k z%Hx4Om9PLQ9PtBQ;64OYP5*849|8xKO*$NpX*Be9eYOZ)lQXHJ05Gj1<0~e~fD3vq zg*h=)AlWoQFTSDWT!0t*K{{k>#dWrvNZ}KIkbAr>0AH7-R51Pza`eYta}BXp5_;1D zKrGqlwC3*+xWWoEZKU>m@^`4Rm-cg1qg8%;_j}1cX}?fC zK3Ud({Nr9eo~6sdU*s{3kA?WDqe|Nd58g{-Rc}-GBK;@|7RrD9yNet<)=N;cL3dY9 z%M?B;;-}S!vk==a2ilHM0sh|_esU3rQusEfY}x{^&W*;->h}%eOx@H68p+u0eZE1> zshf&GBO7}SK!i5H7B&Rh#|I_M7`Kx{DH4bGxlb(4|0kBXz1(L~al|lvz|c4O2ml9V zSS;W_L6ZdpB1>M{~G@PGRXfLg8wo|{uAIGn~yljiD?c=KzEiiz9~Wo5u33g^r+>0pf0c<*ij20FfuJJEMC=pkE`z0A;`vOxRsT6PfA}$d7f!`H@7^d#sad3j6aa-(7^QHjP z4!eo3;~|O^xW>B#ZE^9GDP)R{wvJ!J89JXLJf--P3eOEaC)1}=arc_6kcB3IdQ`6X zmR(i5e}H#*yR_dLO?ZqWQQX=AUPmchihK)JX!J&>cq6DEM}uVCaSd1PSAOvzEEsiM zCVFM@%0Dr7RT6%IT!xyZak`s`*q94EcUMno-nctdFHYrGdJ#`x)bvS!JX!D^89pB& zk-YXOYY9ygbB<=bjT6rp6Rfnl5;4Cz;IqQ-Rn|DUQ{XXg?h*-5Y*_%j*0ODRXU^nU zJBVu{TRWxW5e3cf&JpXh5{b(r-h_J~!LBcPt1BbAMWilghY#oCjlO9HAbSCvy`8lv z!(trYPq)`4?H(_dTlJS3PW7`_8>Z)+AFKZ)zi%Gvr#>px1XH|G9yq7cvIcHd@Od$2W{`SARGx;4`3MN%?Wj#X6ua8b7 z+Hs=ZXSF$60fFul(vlA57z;M4o!tZXrSVL!A}s|{?hG>t5?NJbxdrYE0g(-CDx}y6 z81zXOB>TWgI^@A3WDMI&K{#t3t{-G$`w+!u7j58djl55}mQStg`;X>zW8iA)M~50E z9e>dCU758Q-o}4JF=jxfjJu=JKFq@9tPL^1eOYCwe?BVM?xtY(jsaWI{V_?&4~C(8 zJz9^1nUm}#0O}6P$q(v2(vkIbePQXfAz}(!Pu5j%tg{+K%LUX6lT^QTDe>$v@?zpX z{8fPaE`f(F8VjTx3m?KAv{t3w5VSvhS7)i6mD0LamauwP=O=}G9ls6BhEq2LHUA-u z$1&}B*bUMO%sIJ&GHA0d=vSTlbJVUKVI+dhw68Ob-mD$U!z{ zNM#Z*H+<`?vRstR)`!kP%O@Q=)rGsqHnt^6ke!OSJbmCU+ZMg!WTp$V2;5#jQMi)x zakmh~GT1{hCFjbU+TGqD$ernRTJ~(et=J)RCD&>>)DU@@@bVKCGnn`f8QPBJ1np%^ zPkq*NzI+P4Y1XB)S7=~PqB3>He#zuHeJmK~MN%usaoaiBJzjt>!Z4L6eeMooXBLSX z=TYKyc6n@6-lLtIEehro>0cp|io|I7VNtKeeJTX0QAZ_9=sJ^U7^LRun{xm3s<2NM z;>4g#&=A{aQ>%IY=9PZx?2Ic;s-uC<#E1DCJk{3HDIfUB6y~Q>|&>X zPtY{71h*AkUKM;wI|ZuGS}CllS&C(PMLUX#3Q9c5Ene>YoEyx>c%nRdw-;%K+Rr(|Gv-f>P=m3NZh7Qza|`rGxe{ z(tTwe%1Uvov{Ep2|KfY5Wkt$#=HIa8;(4?8KlyFSF#`2|h4xVY)IQQFDhuMC`t=0fd3DLe+L+gUSMyf$GZqopjY}1ocE2I!M zaUaCEcS9MjxBY?A$S`W%ugWzUuTeE?pM6?m)YJ+>#~3S|;+cCVsa2E6o0Rp{E#c*% z)!V8Kg$Az#_?}UQ0ai6&36q+yleOYdxM=iTc->X=^j;Yz<}BryP#dKa`@%@2tp37l z;rl-&Rwfc4i99g)rsZWcW?w9o&hWhE@ z{e0tFMcwVW~DjtPLPb!SA1g2)=Mo!&jm-1E@z2zuMipjooiKtP4m(JzJZ%%5rGb|j;jLmqpsIj3B znS|<{DS1tRKNmjt-L)s!xl_U<6}-FkJCJYS5nCorH@wF|NgW=?HJB~?DU)4K6UjC$ z=Ytl8XXGo*HB!#7XsCRnD`9zID-gCbi61%alr6=Kfel%xOvtj5bJwQxDkab%(1@R- zSD}A|7<;?$O2m!gW&*S5ZS_WIfw4mG{;jIi@OHFpp4}3599gttTZd7g$JKV6PHZS% zXCMUVEjH6O`}<@{p2EYGe#E{7%hjE4frX zRyhkXdUG<8zrcL|M0!!Slsx}?ZCD_}pnxK);MQeJBOY8TJfC`$J!7CKHOWrB>Puh( z81s)+Nj|rfuLPbpFs>!)pPKGj=;i~trEnR#8^YkTjP;;vBb{qzk2PH2XKsJ4*k3=i zj)#M&4oL0)#;rrh9-oxL%-tGao%=HLN?h*|jz2IdHG+LnoRZd_q!54Ue|K?A%uOLs zP)8PA9h@Bh(|Bp8M+>&y1|fT8&f>?Mg%X@qOXh*8MpN)=E%(`XZYh^rb04N8!eUSTt%bFu7?Uu8P6Sagqx)hz3@*zQ$y?!iC$k5*3H#b=P@8+ zNs1wAMQfS6Oy|12rco3Z;grjesm?7%mPQ8Vy?@M@Tq9Vf%vq)pQj-dyf!Uz1$=Ohy znS2wh9K%G^lK*=j$Fsp#{`uI5tq?N75_X1Y@38T!x|9r;FVUiQ}7w6f@TLm&P`5=%ckWAgE=|jXH*uCe2e@?mYI0T+k`90YZ@2eTV#g zz^kQd^xa&jl3l`!!Ynfv-NN`0!r}AMvj)0ME!NDgjJ~dCn@2l`u@ti$$e7uW)3T+d z4##5<{xOQd#{agh!)9tal1DDb>Lhl>$1Rgp!jT_Uk)SKBoYIoktv&PgzH81u>gei8Q%z&fGY6I>yWnDt@Wyxaf)2l~m;BD5Ud!rCI$IbE zvVy-V0+Eh~A%eHGou^YdQ{=hr4Wy{V>~l&-m{3yi*i(BQ<}-LdlDtCH6!AtdTwaUi z`xU&J6E?o=Cj~Jv3z1-onCt8^0tcH83!Z&^2P#06(dWYq*Y(ebsBf7y{6p`0*3sa{ zyvF;VQLS{0G!|Qq1E$`fFK!~R9jsb0$@%z`y43q)MqeenRLz$c~B-9<_XrThI5w z$1x2>=ZVRYg`{#;$;6gG@)txPfI5rkrrMktj~A2+9RQHaf&OFFi!a&nrg z&6whr@?%aj4?dzW<4AW)0T?rnu^WGXaBde5woxg~C1i9t@YJXkG)WoF&vpjRq`K)NK4_=ZKWMtLwvaV(ZY4E1eQ^=meVL zoDYxkad|MwPSY6pp3+)}#>_(DZjbYI?UM>sAbs^*LvY)CA8rq(!il-%y>p=c zgMN+HE6w|n&tc2l>s!}zb;M6c6NB}j&mnH-cktru`fP?aO`dL^YM2zlM_jMOdXg8Vt|J8^|E_*N*X5$mU>glRR<(1VSdY>6O*4wmJ~B z1d~uEYjhOI*Gpri11q5e>elrrI&WasrTx&0+9&QcTe4-kTajCz4+ly>~#+bJ0Dgpw>nzsnT2}TRxB8A zP`lfyW!+qU@^K6po(B-J&`Z8}J}H!rC?)x%Ls~FzJ9_%}mZzmYsgZY%y55q;CkI5a z9ShS}Ygb8JmXaY_2up}7ku}sUQ%$H3=pkh8uNE+*6qMnC_SG5`EJR>dtrmH5G|&zp zn*BIw<(E8mCbnDbK2lg9W>w6)OgXgp~-0QIYk_%&%bxoTl+02p3 z3-qH148d$=?y`X6oaupP_J9h0`&d9J*<|4R;G1nA19TT~blP>=!aw;Nh z6*@A-%l;8|Qo$1y{1~lOpi4WuXrR);?PvWb2D!>)3LJ~^xzIm&t-M{@nWm%ojqHq1 zj08_!guW>T`^-dy7JE6AC2c)pcXm}sXBs@`?Q=B7A;(k+`Fm3hSKMN<1ta{OPscv2lc~MzPMbriU<9@gPqd1BHM5+ za9HKlmcoA&XApe0EcifIcSb#YV0&LIq4#;JpbnPQe`)Q3PTE$j?DvW1%$G`aHEEn! zG0)7JRSIHd-M$!~fH7ivgDu>vGE-2$hFO1Ep(m(Oz9muNFguoI4xAl`6%Cp-QJjV1 z9JV%zygpV4xskuSLHJ{)cp~ul`3WOOa{iC=K*^O%?@@CCIL;N0m3S#}#Yj?Xz4MPn zNnB?%<@=6+dC~=37q44N>-U8FnMj21RyN0h-cK_lgAps)IvELBDxO}FWub#>%CAg!c}}%=W-Y6{;_e&T z)uv}#^RJrKrz7N#o27@4tWd{WqmV0w4pCQS&KmyDOr?( znc3-mdn)#JlT-om%9hmp&b>&7IiZ$VI<52C_9u0CrPf(MeIy+&ID7h{7gW~NbpX_6 z=As;Yjd-(=0`Y+hHLG#sT-vQ6WS(I56kVd?Vtnn!6aRaG>E-9G#t~omf^KCBladVTEF8 z?hfDTYs+m(>v-&nc9%zxL-@*z^){2z9Cd?ArBHtHe3Escrlgqu&qZs1rDmm-&%mKN zWt~nAVkmEs(-aJbZ{QaA5&{KpgzBQR(KvCrxe5 z#}IwE>Vj`=isoZQ_*!G)7OnkQ{V9feN;TcKtZPO=&+5C5@9r0;ugBkt+g{WpG`*QU zmU!#jjldd9)ZO5bX2aui6qIPB-RdMLG$rpw42>c+79Ltd*U%WE|2~H)W`e=BP~W+VHMF@-8RrX14Jz z_weI@mgj7E8p1$*rMZl@M2YBcP+0DG5Q{yx8R+XSOhTtbY9}G!PvfmILT(lFPxYFY z4mY5;88H|R*d-pQe%z?`?K#o^aY{O!PP2cX|1%NeS@X$w!YqKjvZ~>`~*(M zfI_=|WUn9+>3S)Cs;z86U86r}|Ew(K+qyDy(bGY5%MlfY*uk_?^4f%vmFIXUT8=@L z66}lsH_NMH8z&hm=E^+Q+ls5&u+{0XC+oK=$knRf%S_qecFWC6<<+gED5*XVhFdkZ z-vP{P0_MYKuvT3D-!i2%^(7e5P?;%htw()2v5(D@v{g1DoLD6*Xl(6Q@g|R9Gc?(t zZkoX;7REr^$~%Xgt|cl+FX&+!?j=7zh@x7bCl{>-t)SK3ODeKAQJ4ZvTXR|DMF#oJ z*(}{UovmZaqF-WV?D|lB= z04p;429Gc>Y;6!TvSN*gWGO(8G(*=78mhHBOhI;x?TqA?*MNX@ZNEdH_y$#qPu>N$ zWVz}^2%(`Fe?)fHwq#k)tJ@_<2Q8SUb}K|DONSXlH52?tn==$dSfY<30y;rVd2ToO zG^?U3e{&EllGuXWCg>p!H8+u#U?B4h>lfE#KX7m@U+-TVo%|{-2z6Ev@Q&y*R=A+x zT7hWGBEI0S`bX>qdWcfw&@60OrW?R+jjU5O zLEbY~rs%Nn@1JB!Cao7AoK}xaBXhU3g%8yGaxP0~Q#ty}YO&d^$+&G-BwRNd6E8aL zXf}PfmAkbM8c+%TC753&w_KUOFo@I;MNH?h7LJTjfr zYTh8NugCbRZ{fNaQnsl_S|1b~xrjsXzYtc<(vu-p8!IT`okO?Urn_an@yBia1=Ya) z!=psXNXNzD7;O);gS*2h@X^XLaJ^Y65N&56sYg>50m*@fm3#Dd_TtNeLeD=ECM^W# zm)mH@!1&;DX(TMZQlgf6EOu)EaGGMkX~qJlNeY~%2ymK_z-i(Fr^)s)O~8xmw($Y8 zb&#-KkbHk+n!+X)`?TRkCosSl7yvHX4Gt9*0ELJL3}6Qa*a9i=(o-;0XieX(24D}>yWz)iR2E~$hN65CPn1rn!0aMf?;b3b;+x6k< z&@Tpo-fl^5LBamulrrqw}< zkrUH#SrnXt>;D{77GMfFF=Z;)puULdNr2_v`H~NY#35DuUsQ%i3M#QKt!7?L>3j=n zs|#7g8l+SW0{2dsBqV`-A5h-3_1!mE(+(I@-l(`itfEP6`-YxO1lm-wnPObGHrMZ= zl76DK!M)sByaqX5gOG9b-;D#U3!o=-4RQkL`A;K%w1x=Ot`)uM4F5n2ztzPlWR1*- z57yrR9bN-XS(10EmM>HVwWWqITsAm}Oopba%2r!Ir9n zbaPv;vt8TFwo@in174e<9n85)*kS$+IjNVc0c!XU1z$OChUeIRfA7Yr_`mH_z=|N@SVgb=L$y$@Fl{GAx8Mg7sVLDmS z{qYQ2&8NqyC5xs^0uF&n4x!pVzO}?$%;nM3_fR1AP}Ea0Z5CQLQiVymZUv?P91Lh! zwN?0>dJ%38!rZ`5m6HIIdYTaTc_ zc^&yI+xPiVu;azhV6;Z|fHvuOas4%3@DZVQCB$tRGf~Pvxdqj5iZ(pmT{u5w7~MYw zp-!x_^y8m>nr0+l*|a9YH|YL93_BO_BP_J27F@Z36x)?mAI|=O?X!Xr-@LO=%2?!h zPHdIkmCXoy*1CauU5qZ^H1KdyjkrR3sr+3pHx)PLtw`|BaZpdijy`>Hb~~XJy^Q%+@eu#+$aJ|1*#vsK%Mg ziazw%&vfassabWnpdtAQjZfIIIJA26&8sSO_rY486=wrO$<;?gaTC;9J`k!=7+CF} ziP`4J4vpE3H*0zS=N4gLH4N6q4?+}XZ|#x2%w=neam2)po$k8pbJWcDh^)p45*bO~ zY*gDpGpdUKA3>ne0K>jh``L8>0V*>I%zHn`AINpM^n5GK@8oOT%$fPVp+$k`tPcB< zhla>SSGUYwD6wc(Y`d=r!$pUFmPUj^B z)-f+VM6Zgn)!=NRxE8IQJ(MmRhrCGbL)a*6xT8-{A z8qc4J_ug}kq-%D`vrUFYfw%mT$+;8M1Q_a7KiyT@AgCTjcsZ9vsW&ul+YB-?Ul4>jr zVcyIl84vIXV@EstCxTtD_ZtM}j3JBj{moZ~b&B&N=?<5hoBp3BanUgMQdf+dS>n9p zE6hU!0UqR!DYg>;LbS8g9fNM3cu%Ru50MGr(RCd8M>h7)2O~RdKMr#r-{3X2iq$|6 zM2ywZ&>8qIbO#p-u+}ngoZPt^d$l<|%b!;=FdSWjeKcnL5WPh^%gnw7cTjB116_Q` zwifD>n_6ruSs0EFqHHTkLm~}!4C9MTOFk`_CYGs|otfdxK2l#d#{01O$#HG>x1@ed zwMut};^Q;_W(uCJ$}^jC5MkZSV*U+tpCK>ZxF2EO&10g7cE*vHW;=mB7r<<+7~&JP zmND=?dnPPmQy^Sh(N)t3Bl?V!@!O(%s{K>pQJQUSg_D|XX$5g{GdbR|h1lvD!YGjj1#0eG_Uw$W_#dXWtMRANJOsfuK8q-#d{+Upkk3c;1DQtn8J z(Wx4VSqxtnEbuh~%ML;P72HpBAl9HWs4_M}&FYsL5 zS~X{eTdwahXNa(`EUkjtmpOUskwcz0CKKL#PDtig3CC(LxdqNH**XS(%d)a=lcJ7^LGb2)SUYz>3ufmq6Ks)MF%Rpp7Nz zmK@L*vSBCL3THxb?b%2?m!2|f|$ucigfdfKnd#*@HMxM`n#CoMBy zr?ENbTetFlt4nih62O}Q1Fmg_+g0n@=Fx*+?(1 zxkXK*?=MW{E+zc&uoVa%Fww|#?G&rQddzKkZXZE+W0g}-t&xI^r+vW8{{WqQj0CNB z5YLB@JB_}U`DWcjjVv=hQ^j#yLhr?E7||8|Xxe^U#-49JtXjq!%8?_p1L{;S87g_? z!-*Dcnx##+G+{us$2%C2tt!6P9R28C1Cbw^POwG$qp4WigT z<&6$tIrKJR84(DKGC~<8Jks^zIoJoW!sPZkb4&Eh24E~-S|TW*nOhF@e3g1EjMVcs3TS%JvWMXnArkl^i#Qv|@2m|I@5}A6gjO)*W3j$9 zaMPmDaF8k)rBN#oaY=2c5U27SE>OB`4=SSh76I!|Vw_jz{G~2^>qs$x9Y|l*Y-&$Q zerX~nX`=bOs}=MZ+8rZbRZ-Y>Mk0o>M+ zcfja%xM#l?{Mu3N)1}A@S_<-$?@8b3%*gSa7Q?%}lXpkkv638bmj9RN*Un+fH6*r) zt!(zOYdr51<#*Tk?6FmfZx21SFPr6Cg*RY)gmUy=|r7(;v@qwS0_DNc( z=ZHKuvvs&X(Pp`%SqEm*HD|~-xH)p&TV?M5_@<&9uFrHdvrAAOCcH<`6U zOk^ej4Y4u?fB3z%p%JmDH!8k5v+~Z8L>)9^cIJ&EiQaR_a?cluAC!jVIX0xvp1Ei9 zAERjdo*`p~%(a2ewcZT({O#4D@BmL7uGds?una@s#7yH7?;uXku}yRU(tOOX#4XeG z?R<7hpU118c=?6Yx54=g^|A~N3yCI5UM(GGZ6Rs68P`k5(fE0xgaOc7cKO)9z3&}g z$p*P0Q<`d!ySRV2H+q8>XAVWN!=ua|5nKD*LZq1Aefgy(OOR##UV>vjYna`r6F1N^ z31H)1ow;=Xytd*g^>q0APanDno6HFzJu0Yv-n4t8v=H$sdaG)`X{%A0G&J1l-CGQe z85L{R1b;dUj3`YFhimOtn#tx~J(B5HK6tiS&+8?6Z`algj??T`XhTFrkw^b2xT9gYHJtxq)b*De&TSUD;38tHXw5 zt|{^2z=x;#a0lYOgSsf5xE{s_TB87HTS@{*p z3A{w^btxQtk@gxOkUSlfd)=14C7jp%HDrUoq&DA$9=%eZVP?PlRW^RP-YspVer#r^ z-YSc{!Rnf&$tt~Y$ZDBe+Io5KUlNTrtGFFyws#qOu4oSNiR1B6lfumh%4c+JLF;|6 zlw{ShBtTWOTU_tao;YerI)!+tb=Lnv;4G61>qqY8^xBUJUTRZc8M7eud4zKA8(+({ zHoT@tWi&TkG(86N$9Al1HfHg1gX?Zw>=V zRz>9RN2s|EvY=b zxOLO`;}@jv5n)+$&1S}ak)73fE1cEHQ0!~QTlvZY_6_2hplJXOwO=HKe|Dp0_53}ViA%~ID3D(|O4NBcXCU>M^ zuZ+~uC1tpAbYIc35)!b=Y-9a|N6p8uH&c5}c;xn)&(McJjM_WruM$H+pl< zKuyVOoYZOO`ZTO^#IJfWj@5KIW1F{cZ|C!`xM|6)xjh?Fk3U<8KjV3MFz-*I@N~I7 z9BrcO7^jy{DAZQj(hV)ylzOhpRHspXz$^HTCD4=MG{A24)Kf>|u9}NQRlnZQ6!hRZ zW1TV_MB;9wB;y*W2T7KoChXPR*c<-iX=74F zncCNzU5{Jfv-WN_NlU!Ada+=C`J0pD+!Mo?cl}c8YQ6+*JbYP~Q+ZKNqUKdfm*sH@A4>X7aV|woNQo;@BVW!g{VBRj!1f zmvHD3%sPy7q4u6~I9UG{mU31aEgT4_T|0iQKbev~+Zn366IY&eFaK~b(>zw6dG=vJ zWVhiEmTRC=Fu-ji{q`@sd7vz%dwW^8!%Mby!*?M6hpO8Iwwe07mYd+!>ifSpYM1Nf z=HaYNrr1{@e@NQ5akYcm7@R;$0Ka0!n6m8!e zw5lx&&e0Z$pg8HECzxpAD%AKDV==re&own=B4eO#L`D2iczAyK!KI;T#61#CGJP^P zxQz7S`Lfy%3G3Cqith?57Dtp`1c(FvL>~%V3?LAr%l7j)nlaHPP zl1n1U?0Y=;&Zm77Z1fQp1mX~{Yfpey6X!R)f=xKxcfb}zQQtmdWHRjtq; zi4R?KeJ3x~&E)=;s56v$s%h>-Bmh0tkj3wCFjZV=<`_RS;>T4LNs#2j+|%=*K^ebx zF%ys#am7gaIu*+nwWQ37Q%lhCPKWu4dAo$;XIt+Zt9p+ErdrcZrS=Je+``(S14s=} z(B}#8E@eXsQ0@9PQeO7WMTpJc7La{r;IAR`shvUnai+kDsetlVCrAw6u&yWK2JiWF=MG#rPby4ThC^%h?X&+}#wCbWlSA&~hvzuPBIM=%R3 z`TphHcR}=zApS>?{3A&J5oEKl0OSxm(9HoWfE;O{ioXnQ-8tpH&7VK=R+nd;6|$^isr{8K%#Q`OVvjin(mzF#NiTd2?3|u$jRM0B})R z1Od*AIJscG0GVHgK<|PG3=oXxo(3T5tm*%nbDr<^DDx!Rx}gWKcvwi5!AiPj&H*J| zv;Psf|A^oJh=PAa(Hs!6b{GS43|M^#w|%q#n52fjp-U}Hl4e3d*vo7B3INeVp#KFv zL!gLvcIi30 zm;p2k+LzFDon}BG9B{0zd(oaKQq*U5eFHlXLO-5oXrlIglE01Fy7 zZEAG)r*pO$&kt=W`2jv*CELaVcs+N6GvOprF3o-Z@5IO7!;Z+gHlh)Q*^84i5lf zo2EJeI{h}Sr_dnk3d>fDKm_ElCRu)fzOdaOxdYJ8Z?fRo2iIU%P|X<}mE4qKur_>3 zrmIWAJv!{!hL(;c8Q?Eax7F1BVuZ)F-G_kx%r@rsZ zg`eDBJd{7e^RjUtRE1EDpeTvcS%0W5#WweHl@m-hl!AvV@(6Qqy{R}k%Jpy-vjGOz z5ckEPkxX9h9KP<(*`R#jeg6tZVzXzS>;bHy8w=^FPPw33N>S@k`AjGcwb=lC-lvm1 zQGOQhfmf$I-Ab=wT_}3uOlXRtbD?n)TyVNN z(Jbc$k)@S6jrD`M-}hoI*-U4sR%YTHUTohEZaGxYhmA7iEp>mH3hpz?Nq3K_!ph03 zn_+PB2${Yg;<3v9J-(ido>qtQQlficJ9j*9=dLY^_hE{&`PVN`%iiFkuI{s zpM-~;qkm1(Ta}UC9;D^HOsbewly34YGkIO#%%r_XorB~I_FI$gw208F4@Qq(Ms5%G zQfU?AqW1}B5_=emS-RwOaSfz044Nix15=V8V3$aYOtuLRm{s1&YqRPnWigy9>t`n? zIIw2$&W3$f&WDE!`;jSnhp#1s7QULs$Zt|SirP5v@$d*@f7EGH7ASu0Il8L5yWF|e zz<&yB{H&;(*5iWZn)uh^Sz6Z}%Wdp6KY#1t@la0t#UmQN+q5lCu|u4Pz~5Teg;unE zQ?7SB@PuQ?Numut&o}a82-kUXL$21eK@C^B;MGsU5e-G1s+wzpBr4C>m)o7k@Xc1l z=#0Jy&U(qQz}|hdTFkh;sIVQ$g%^nF0cX)N+N)3kHck(@@Zc$@|F25D@T$BI>5VnJ zqB326Om(_s8LjjqU%g7A3Uu8|=G^1v^wT#=2}by^YHeY5%Pc>gkFRoe{bzV%tH zFJeq>Zq2P2KCi2aXA50fGa=V++mXYjmh!S)r=0swpZZn%sZcwnw-LI*Sk3Oiig${* zyMn9ls3(msI$Q#L(WW2&aED9J>DYRs4sYV3g3wH$EQPzRYpW5-%J|0S<;#N-w$->J z@awLgk|Xd;cy2=VBA|}4L&yZj0E*<>-J%BU?Bau)!oW*0_=A0*0Q54GB7eYfhen4J zxOdijb=4-*uPNq0*mdBByz@M9@*F=f ztM+GJlTBCpvw7QpJ>(|(ITvBHEQ>>$LJ{W0DX7(W_W0>KSz74vX5-*D;q#m4iXcaR zS}qGNr5DtvSAQv8{Qwi6T-~W2W7o%QX_hcvW!0QSp=PAdiHAs^brWbgHdUylZB$GW ztkb&bDq01R>K}(rXiX942QnvXeR&^&!n)02XMO!sfwa@26Y@idD#^jW$uO^DHB4ym zsS>hYEI7Kw-JW{`W(0gz9wU)W$-q;d2q*NAec3vm@&6AU-eKcXv1-m z>m{C7{h%j>veH0^=@CW9M_0FE%h6%x zi>0fB282gO2um2tgT9Lu8iok%1H&R!;3J1%tcb@`_kwtG3uUy1ARmXJETEI@0D>Tdn>Qw z_4aZf0wT}@&Z49r;kFVDv$u^KBl;|8Rrf?U_Q|h*#iFlKLUA^mAk0SQSy%xHbvR&z z-lSCK{$ukZb=Wst=X&>g3f8o2$g!Wl`vU}7Qd|jE0VvsHKhc^|J_AJeuku7$MB`AR zJ_+FXZeh(FiD)0Wjs*w2AHFO5ist4W|JJh-_{rH7)6Rh}-$Vv7U2pX|JJhx;$naTp zx}<2PH8XX{pd4kco9ZN=S^AW531$^ECeXLr&|TyMjOp-~3)bailF7i@b>$*u)^2=h?1-zOgU#dc|3I(QpITr>l7t)yEgU!XAfbkx z;V@!ji@(M^@&Tmmj%O_r%gqC`{mOcd<|@|Q9_o+yOGMg4Q!b&v28R}50Z*?nU;6|< zMr8TDb30}IhTrOdgnwIBh{d`tjF!{-`$MFZZX9FmzpECal*v6B~bY1yOSpVB6 zEiUhq^@|%!MnhU|5+T+{&z1_VrI~MfkNNl4t{nXt2dSG=d$Q#2`4wsDf5wQ%iL2W0 zwJMfZ*BoTJ7G75B56R}1#sxp|0%tyCLgC_jf6Z*+Y5e;%&EMGilsNr|bkm?mcMHJL z1(i$TWw8EFMmNrrjMu+Xe1=%{C4a1 z;C4eI1-eN)-UXU6qgq{FH^Q4*ry2k4YOSPo#^R~j^Wd8boc1a-OtJRMndk8(+3@VQ z9anA74+{_v)8w$5AtAnFIlpzA<3pD(1}Xt}T&M1k+h4 zDgg~X{8hkhi_i8zESl#>pJcq~PoF1!PvOqTktH(-4=SCY=e7IE!S)h!am9bWic}(F zIwpb}>Y!M6cOkY`uzJG+zUzxf?MYg|j#?ZaHfO-!??ZrIqi3S_kAjfOhRJrAPnSSH z*!Uottgm84foba&Q{^G%KJUOBY~vFl^kZ!JKp_=5Hj!E|jU2ivZA=kVZ`}m+8x7TJ zS^*>*FNf^!!@+kt1V!magLguzD;)y-poQHGrhoi&BxQ*8ctk6avf>84Nu^kJ$`Q+* zOeBLh;0Yq&CxM8qjpL*U=$Ia=*(gPLRQEq}E`&V5*?kygV;j(jE#77?D4%BtSVK5f zy!)n>=Lr6?f==@873kt*-Dw1|2j!-`0?-55M{BOuMY9>%PuSjF95PLa@2=a)R^NA5 zLyhRVC;o~MuA>HJnGX#LMGuvLLKd7=l^`U!D7Xh>ZIfgdcg=HJY zgunWEjwFjN;`spoT0901CA56y+ir8^0Y1NK5~>$On%g+f9X0G7V-xlZ@8^{!i5{oG zBx|)376~`=dft@}9lDqxtGJu(juY!Wnp8t?^j%aI+Ipqi5VRCc4(n!QEjk?hHh00R z(YH^VfZNIgPVYcta-LS}w=EilzPc=k4>PJH!P)N++&2i%uS%G?&3C?8cIPe#CyB^y zxG=|*-9qfaqr^0=uy~wXM0(Qjj(BD7#hcZ=c2e8Yg6*yMMpX>gL_~5BliKk2U&h^! zjox35Hj9_ugiU3_JZi&7Mc~$=o%JRo#5|6Tvs9=g%c!t9Ga_i3+e5JXzzc*ok*<;1 zGu|dn8d4pWl6a{9ENlat@)arrLn#(5MEJvgHij3TqL4;8O?2s;P~KaiSXhfy$!wKJ zEcWfhfV$e;`nDFQpXk+YoNt!LT>k`_{QiY=$lv}6T{+g6qC(Gb6mM>QNibOzUs119 zn|rU`5?|4?`tH?T%Tw@Rc=OB2t%>^8Uer!7KQe)j!Ms(10SO%~fH8~;zrDV^Ko zP)IOibp0GC=hwbx05akT|4*I_CHj~oz|2pxYgy}|Q6e03V`+_)Az|ksRpZOXHqm(e zapxKCSSigPJ-5>n%E-Ub_~ybSuv)_x7Z)~o#bw^m7DVH!3H^S3KC_XbctG`~x@MGWCD(`0!JXgk^YfWtZ@|VabW22e^B4g z$HY6x$0W<=FLVgTKOV*C9@;Ddx-8fKV!7EptV8YSM0NHf{f()RMeIzy3y3aRTGyKm z60Obb`O*UrR%*Py!Gnew*q)rzMFD|hN_4_&OK6wb=P9YwMzeYN^q%M;m2qyk0AI8n zXaRLRlZ1F9nyEm7M?Eo{B-xcf#RFO=$>IFoa+YLp5q&qBq!?0+{YH!i?=~|l0eC}0 z7$Q>Lx$4I*EK)t$2rJ&D@YSGeJG&Lk&WYd$VCUq7$4GkgqMjlki=H$scajFG_XUO(L#J1@QPq0 zbrRTMla}3;-7?2(YqGz;V-~oZiJ?Va0knx3ze-DoU>E%53=0(SS7c^^76#41zqnc+ z6b*!?NW^C!kI0>4W`h&qcRRr}1lRn(iYT}&w~xi{{=HyNV6t?Y8=g!N)GZ>%nSW1m z_QXI#8-qZ_p(V#O=X|r)=%~buH!>rxc@Q7i5T%<9U0W0*<>GFxZwub||$F9-Tc4Y3a=n!NmTCTe8p2EB@d&-&UD3G+p=5 z&<&9s0Sn7X7~6)SjDV~7HaX5&)F^gT#=6s=FW0t?rnb7SW+RQwihqbHDz0pRRSN>3 zI#m>AkHgGEOR@sK+2JqaSTCOIaqPbd>)IgdB-(w}ywl@g!uw^SU!R=b@YR#OqKfsS z*1V;eQ!@cE>D1QXs_I+j*%$fl7D0jC_uPqVHHEuUFTXoyukn#yC%9KdX7a7V=S(v9 zI1MA?Er&u2@F5GJE^HzjuAdxXlP?^u9{^*QE)Kno`md%~CB+JfqLhI`o}^8HpPHsY z`12{L+RP6$)WsJ*92tfGvZOGU==W*88=slR)y{9Cj&p0rSXe`nE@#3|`4Kvnks(UY z4-(7uX+1yv?~HjnUiHDD|44ff{c%y5Bfikjy&bb!Ct4tqo`dkRln)d>VO}Soj)kCo z-v_h^i=R!3y7|mBzPmWvj%$JpY%Bc}%*Efg)EAl9A=+n1j^R~Ke^&FG#0m4f-*;>s!m0WT z+x_H>P|ASx;R_3BrxLR+NaKR!UAk}x+x}k>u~9GoU^gzVce6*yHyMWF^kUMHEZC{x z-wJUeuvHhnO~^6YGV6Z}#)aWYtStA3A|QVfYeK7>G2Z}=iSgr9&cvKwanajiaK{PU zf5aA-g2l0GYP84pKbfy#^xFexVqp_GcDi9-o^izyh5o%(03UA*v@#i1&qYK&2*H9eI>(td7^{_SqKYOjr{qTQp#63`^k|+cExe}0kGs(IY`^6 z|7wbV>t?}y2aB5i*F`(NS2?H%wV!NtYJk}Zd;ELiu(dMbK_1LqAJ^zv81Th4v9<`%=Zd}| zFel7W^7$UPmU0a!Wl$Y*(Aq(Da79=(?U?oii+mEd`jN0cL8PFV9dXD!r%f(W2x@qN zD-p=Tb)B<9lVm%or@$2l;m7diR5MpU!lEU;xen~l5R)${^@59~$l%G?wB0gUOR3XU zveex&e$_o}(az+g-AI|sx)(%J)pIHvqxNbcUAJdw1}V*t(dLtlAAQE$;7Ov{U_@x7 zxFpehqotHkl^|fFSY>}15QtBzSU4X6A)RUleD<#<_b-?L5aQmA-tdqlsvoB6yJD8}prUf8T_6*%AruFn^R;jNOB>vgF>V)& zD`w=mvh!|W3gM@A8CCO#xk1dliU+gHTI9C#>S7taWFtfGdB{e`<8{YfaS10J8Nq7ax?cpDOv%=9j$ovbr^Y3$$iN{QmGhx-ottX*3^3pV@n9H8@ z_4@!DeoczuwAk~=DJxljzMa(KB^l71bURinQ$GNj{2w4f36Qz31Ai_mUWDP5Q<9mQ~5KsYUm$=7I>p@*B^YBQ*%p246&T}OnD8BbmdBmSJr;*3@PB z#Hu#2T2VdHFHwmxF)>>)b@Dw#KlIUfpn^;>*8?h`FzDC1{bk_0XP9j})%-%HjStQH zVWb36-=95NZgR0&BZaD{c27RP_sJo|hsvBoyRqa4gU3d{QL;|EktM0rsn*HDqDJnb z+o_gby6j(rx+#5c@y9`yDeZg)EGpC=g}9~;&omYEaYc9ve7b%fP>~%1U{wH@TQopgJg6jrUy~-?@v|a z_MQKXYn!v3+5<=OeO%0JiRV_veJkHx%2lQRRL`Ajm%$;zCoX7P@&DPt!ptnO67Hm> z5>zXJNVE$|4b0S?>yyz_tCh%6A5q{_N{!Ai9I0dK_mQQRsF0LY*LpQR+W)AP@P^t$ z;Z!5~zSt*D`keNoU@6D9(7{83dK1x=M%Ep=ib1dw9A$0;=_MPeST+2U2xnxc+79l@ zObdJB8n#GJ#5zyS2`;x_W9`%>*DI|G1$usD`-(;$Dxy=DrB_&LfXYr&oXrl7L=0no z(d|umWjS(NTZZd(s)X9$X07vw?YFQ4suu1E_9^;CjEQ|C%d-%=?RbZiWQp?hI)3QyYHw zJ5dqwAh1s3P=hO5)xMXX_k9rG@3K7PO(KRZTTF09Hai+Ea8r>jqD#uhMLEKWN0c=| zblR8KgcyX^%~6}S_QmJ?>(E0P41!QCzqVAI?hayuNG0(Hx*J`rbSh-35veNS*fc64 zs)7Gaz_j!d^^S;`E41$sp6?OMwC@rB-(a-o6}ZD9roxtDMSb=PkOF)R!TSCWsd4LPKcG;Tpz>qN%{cG3{GY9(u%IzrnM zYJP)_T@S?sUu4h$G0*->pj>l4MKtjs`fV|zE#P$uR|_9I5N&5IydT7EB8MM=<3;fU zp{1a*Bls$yrBIJ)C}gBIeeg}=mZD(Rizq$E68^D2^9ePi1wM<28clKyImhOgUV#Bt z2EOStB-E}K{TDv1kis>L8D>P+_Y`<{UbG5&&yIQEMMcq>pPim8hn}oI^oS1^DjFyB zEOvuMH>lJ!e8*xl;+ON(#gK&N8cGl{g)@S2+EVEI3efRPxp&147U!ir^Qjc9xLf?1 zQUJFqZ}V51NhnJv>Um2Q>|54PoNEbsQ#FcGgp*XSdh~6{f}0H>Q2=%ot(@Qo1BHk+4N#WhqTjEf35!iVy{IBMjYwQ( zI9v)V;X`&51^H#7O{S1%vU{Sv6?uD-!+{A;NHJZkjGE`;wjR zIN_xP2z;-3)5TtFiz(!43Rp%w@V?yAbbs!`P%AjQjR<-5tZ=1zwIJ|x3b?NMA%5|+ zeYtlWEV-@QAFl%D*bF&_Cx9D8+1{tH9vaHDLAs6QpZoJFj}~&Sw+Ug#%Zq^fv)6b! zz=)Q&Rah?&3Pa$6=5pZe-5RTIRdMR2v*xvOd)X9x9H7SB)>?d!UHKQAN58i9xNiL^32vp!wiB$h~ZNT}8 zVVV*?vuijEm!VWw3b!y*{3V*CtQe*PFZ`O53ZYef)VvM2u+TaOZd!CktjhIF1oQt( zSh}}n>9n{vAO@BM`YAY)0Zf!K)li|8#-f-;7^Xo8&f-2|hgNe^g~FTHbw^Z^(R3{* ze2AD-Uu>G>{9r;Sm&)T5e6jz?b&?}imBfLCog6S>`bTeD-mjrmI-2C931(s9od|Wc z_I2+aX4+hG=vt!wF~&h~{TKkvd+BrjJ!<|AF5sJeck5n`g1;$ebd!>Nsf`jyi^d{g z`|KhkT9pg0b*I4_%3tAD08hL>3;{GaRS22=%@P|vUxl=N>2V?~Tw07j>cO?E2zp`` zmcRf9sFdwdi2$UKDfXyL3=p;Qcc}~v5KD@8so=V6&l>55$Uf4p1e+ik9Xh&2R~LiY ze-2$5iOmUhqU7}Z%H%&hC8h91nI}BuxdhwP`JXywIAw01xz>vL5?6yG$|Yo~fg(p1 z-JC?=8qZxB`x=#WSWM9bmGsa_@i-4oUG|x9kQF^-Hn*p0Oa&tHzDUM)fCK7Eg$Frm zu(8VasSuET>G^<4=6s~EiVjd>W_%tz0Xbj6xd4ygNQk$keu%j3b##$zixfK zWl<&jDH)XmLSpaU%K$85!fr(ei%jj_;n1y`k52*O!Vb#S@;Q)4dOnNBlq|0Dl+18% z?CS6lg#CFo93OV!eidgff5u-p0)H*I3?*p2m|uO*a?B0-7?^~J4C^Cq#y-3SVPW>y zn?u&$k8`_B8})=uH2z zkeW_~V9#KDW`hZ~)cf7EdAf9thQLX@Y2|_kLx5(7{s*}eMs?mjgbD#m{lKpw(Yc8q z7b+VXj12{#Y2LhcL)7Q;}+c%=4YT!D8MByOs z9>W8L2)GVzA_DA5e%xb39C7paBUGS%CInQ!446=RUm(;w7)JdIa>$)l8dM$G!s}Ci z+?iP+smQvO*=GHHv1 zAoadk_XOzoyOlO0SNNRQZuAQwOeWUebiOczMC+_hd5x#@Dp6?7-{#Y5@c%!5uU|d3 zhK!XvYaSnVU#L#WziBqKMhtByP!R374%fAP5^-fueN-ZL>O0H~PZjw3*S$RE&?~1K zfbr2C0NRqoe4{9h__7v~>An^~E@z0k>5dh|6Nv=Vnjq1J@B!MU6I7t+=VGl&A(so~ z8!Y-iwm(39n|GTbbmwZRSXwV(_Z4z{PVcCVEPd%XXNnyl}-l1!roDgtBAuaa4x_J0)2_tj6a zJOwH=1?x^+oxlYvsKEkNayYHwKW!^p8ZC|{-)M%}Mtt$O<@!SIxKI(w2_(hwT=f0v z|F$C&Q5h)s-!rEg3<{lh!hLOgk4hRuZLaK4wq6fJ&Hn+-V#yj$n*asH=as(Z|pvu@QRg}%LGl^-;z#tHStL#T&+zf)O(x^KL1g? z@cr$`j}Sivc{al6R}2IZfgT00S?oquYe>KEG3N0Em>u4EYye%uL8IIPz+Xc=pgU8On=7|eY9hQv!)U; zVF>Q#iH~e72}zDT1y|?nAUbW( z&iA~-0qy+GJM7TT&y*ml-eHx#TKIXMV;y%L5vZpgz@wDTTxY7VzB8EWl-Ft`6OI=j zJ=H01)eg&iGSINa;}}EI$ThT|hU}XLY<031gtg>As6>x@3LU|O>%|mj*yIt|QJVi& z>bD>x1Wx*2oq5T3M7`+<>^#%049AI&&yVevWHlK@-bBkxeFgoDzj!`D@K|4B%aw4x z9H2b=rlZIHc*1=OC6%0IoTVAl_xAGkOy)iC zhQY+#H+M~? z+2e$4fKH-rkDJNdWS+t&S%X&OKrSp!!HJCr4pP;ZURoBmgBz`Nk>BnEU`J(_h`>?f&UlBzoWQJ0qnVG^A?F;8JI-xxO*^xzu_j z37vj4$nz^MwViU{rKtZUMon+OlKWe8+L6u6wj^MQu&8YMi<1;<${Po)vKnT`(>^Cx zSITeLQU!`ajQnOWL&FrBP3?Xm`QrS?T$2KR&Y$j`{7MYW9|#q$dfTqu1AdecaUU#uUfhkY;B z8HDd)Ik0~`tdMyya|ttR~a z)l<+A>u-L}eS3(Iza`;9yi`K`b4%~ZS*i}ja)^xmZxoveSM6U8B~b&(MNuTPzxglu zBG9xP+xc#PULv#eS?>Ed9@Fj2g*eP>+UAX!x~Ab>JakH#qR?tMJ$aNGnP~A}1*@>O zuI4Qj%oqekpme~Dju*JN5HN6xX6|mVEswsxG&Uow7otjmre_jtpx7dR4om01U8i;) zU`BNtV0V?toZ4a5gEs6H$cLr%MRb=$GOh2LUgBVPS*)Ci#_}?6(2)!BC|b=>J9Dp^ zr~IYP@?#MHuZ8hwWV(L=HC=UVo30T}bp4D&?cN8{$|(g~MZeGOMP0qlQHN2aj)`c_ z5cI;o8}?5&@bK85XHG~*tcrORZm_aB>*;@F9ex&Dk;D4j0{N`{2~0Hz6rkcR6RN;V ze*A%UBf9V?a4uQffqP`xY=o=Zve7*7qj%-P6r-ezsaHCh;u;}ifvNBpLJOMw@xDx` z{IB%vv%_>c_5&0tc;ye9)MP`^PMC8{8?N%$Uj5Y-nRe(nC(_6Rl653@#;gSz}9R6OXvWCq6>{2$8< zj?;h1IPs!P=usqui?dHae(^>ki!enrHJ90nvUvthskjM`($7-w=m}KT)f_MjPuH?_4- zbmB|0Q~@Fv3a3rdmDexveh=e#ToAb5vi!<<2U8@6kXB&lAv(%|W_1Gt?b{J{DD|nY{J@<2tYI>p19H64o zsG(l=b!vt2?_6|zTuEI0)1Hk?x*EE#Sr)H7VfSMN>z9Q5LCCVKxFhbD!qNO3K4j|Y z@xU+tXk2&Jt~ZM--8BRx&CYO{r;KSh|{K$D8@L zxjSCY4os?b;huIFpSsdm@T_i+Na{W-JnGrq^NE*O2}1VjRt(~;6HX_K%y5PDS?x}@ z#_aa6${YtJ-ZC2Dei~qHpj$!vQxPztwcWveyP_zabmI5q=6n4kU(bJ5*U=qn6I`|i za9y5~X-@e)r8f}tOe1U3=0WY(V{Ti4Mba#-e}l3HsPDBzLgK8-v7u_3tXV!_Z5nlb2n0k{EY%MN@C-h> z6}1Q)WomrL&@W+w%M24^R^NVOpb2{L*EUIOA&7LZt;7;f6!LC;8S{qq_s$hAS#tgO z{P=c)gQD}cF&8=~Xsu{M@hZvxwV2F}FfaAtk$!~=*|ojW3UQ3}bwh2tJA26weaf8A zltZIkp7e|LD#d2ySeL<#f3FZ>eKxgI{RQctd^xpEnKt`hS z&p^QCl1$#WYkCdlWas7;>ZTWN$%JaXHrbC0`ktmwKL?&4`OHU!^ssI@$ey=!k7|a$ z6ne*%dOwCSTqQcC;(UF5=@KmutPjMM+iCkEF7{9n+BiB~JEvavME9-1Q!?VM4v};f z{{A~o?u++m=G~ZZm7aRb7Z$>jkhW9Q}m$sSWG)`xzGZ zIe+O0(Q}B;^1N7R|H96oes-k`!57xOkH>yi6Q`{oCYA8p#1BNtO=@hG^dvqw1G>XA zYVgZKFn$JA5(j_^OZi1NemEol$x6n?F&rm_`hFdPze8VR)M8%d7uG?c#50uSPBXGK zA%o`5(a??0Wh3}iOB6Za`rFfRi8*3s=D|lQJmy}Tdb@BQZjmPZvYAPn5iJb=2d8bh ziF{|*wug1q`t%n2Jd$%w9p*uV50H|D4mcw(L-wJxZol~8mV+xdQ$%+*`T&e9DU4#J zh|EbyHB=za6%!2x4QxHIyDmhT{tKMXv%V557U1RY3?S*zyBIsyB%H2C_zm&!>;vpa z02RGR2{z10z2pS>&+tMjSRpp>DOEGArRYxHtoucoDnn!2Hq7Dd!Kn=Pq1u zG(Dd6T&>*b0||KzlTk1sM~)AjR9E*bNj4A9R<-kk?)cT~eI9qpl`?qVg-XO*$qR90 zhUElf7XwU+rI{f6Me;wFb*N6mbO|z(T@21lANGK2$ z>qNppX#RPU#u$F7AhFvTG4Y_9s)6(Id)t8$0tbRCqBmq0sla{UAI+n2fTkdqt&%@UHudG3yDoPvh?sX|hu*=D)Kyr+8ccPo8aPGK$YUQ+pE)B%IBj47pN+s_k@ z{E}ZzLz-n0Rv)8-*pae86W_6wr3?v?-VZ%E#OGxz+@JlpKSZFN%EZ=-j)hJj6){DqfQ+ga!v8UEys-+K-&z()**;}xt-KnIx7oO-@zI6Jz}KX`&dl)zSR4%)r)S5)ZyclZ6-AkUYUMJGvJvE` z_%5oh81Ociz*OL-p}t-Jw{qbiKUq>0ixqX=JRBeQ3oA~vM3HrP0{sp*R3%fmVihw1 z*K#ci@C$EM?3u@cg(lx1HB39*dvZGAx<9P(AVS%Wj0wf#?e}!cdW+vT_Q~**Pu3-_ zdsJn!z{%3W;;(njx@~`wRrAPs&qW!2Pv(x@Y&!<+v&Az24a>jjR3JfF>O}KF*6M_6 zwKB)!oe)Vx#t8;Z^P@eGRV_zwwGv&0gn!N5rMvi@MM@7MuwZ~b@f?& zHoPA&l$A?J>TXem_NeP~bYQIb((LB7Yf2b9vZX_{%_HGN6IgIu3iGCWS2yz-HmH-- zLdfjw%q#8fcQe=2g}vT7L4v+SNmmg<13@t>X4IZkX;m513VhH%n)#8M6PNkrYN}ZlkeSK9XC@sF-i1GcKq&iUGBP10+Re$V|abV*=TXlgaTO z=xM(y{$NUq!XH?+#$0GWC@{!`ZQssGQNkA?)YtEHz2|AisxE-bQuD-hc9MItMa@z_ zzT96GJ~_9vJ{HFuNDzma42b`lzFO=4+lMO&L1+8k5#Fo)n}rR(U4_WjOv}I)5X`Ly zp7#3@?$gdi#0oO+I1oo0?{YU;4c@1A*2g?^J;KtyDG} z?A=wA6a*y`Fuo5_865~$yb#j7Ovf@HZLGSg)J5X3UA82+J5z5z=F$qIFc=*`65ZrC zCARaBk>mN?KLVHOnZvnbB2HuXDS|(e*#Xhl)?Y&ct_Nz6rU{PQ@Xr}5TE0AewJiET zTJli6LYqBM(+euVq)Q4biP`zA>^TI$c4wOv>?!#%@dmfwlk{9vvt8bY@6?P}NZsdR zu4xJPLA@|zCsn>RHWWQwz^8`{ZOn@e`=J?rOr?i;kO5h4KwIH zw_hNh+m17TL{)WC_Q?(gNN~@pIu(f3G{uow0j-tFrSP;O!hMXJT+$gy{kYpiFWDrW z82`%DHD!@Lt6P~Y>7_9G+nApla;%*w#jsjXM?HnbsxKi-_|z2Un>l{tG-tyZ;Ct%X zq}*H16YhK~2=CV%Cs&+RkA_4MbC?(ku$r%XRo%=+Gy5c`)lE||dwoZaj)G5Vv>0Mq zZ+J7Z0>%Oy-H{vaCveTU%v_^<;Ozo>Y1WeKY0_K-H@{ekdXT6>P{-xdQk1s)Z{sCOZE-isQi>3Kd?>kz=lS z0-XrX`aC! zP~~(xE+}wgdk+K3s?rqgQ<-WIG)s%OL0P~Ayv^6~2(P(g221stiP4-S=Z5Mib*n=z ziA(`m9u}qfbHhvgJz>b=uya=e2Z>+m*0<2~Ec$Z`d@#uKr#UN%0a}6??R6%HAjgJ9clD-~Ob1@q-WD;#A$NsyjMtr%C)^ z0W592kcON%^^qEwdTDTvB+^=5sh-yVdh^|-~AzxMl%{6uQR?bDToZ(q_GfQ)bvn)t9b zT`)k3uTA1kODP7^fa3}p&(UBG=?Ch8hj_>!hb$ShKTX|~8m5Y4 zfyE4$LOyD+>Bc1YgDrF=5pG4H%e3B%5w{zcm_Gj`^x=o>bv#6^DbP=Q^(!D)o;e_3 zl2V|Deh*0f<9rAxOipl2Lp+86B^&^VcHF zG~tE0aS5fLMLtT<#%{$N@k>r_Q1Q%TSmU%s-^{7OQ=lEDS>t%HIDSKFA6{dB&Bq$f zwFLI+NS}3u7A?jx9hvxA06sFfMZQu4{)0X^lx6bt`BdP{8kWr%=IBP#l|Fas}^ zEAyaejA-@%H?cx~cx;cD-6#yH#i~0?=G1+cqwPVrnXDCTJFr{$ZiuaV*TW^uhO~`3 zZ0&n`Nv+-Lz|JaPGWx#srKPKpsNc*-wF(&AJGB}Z!eaZdhAgB5gBfte1;-+`-BQ&U zKt@KSj@JMKoDwJh_Bb=I)ybw%212@L8UCk>sZLr+yh1QDgzPHG`-QLr7E|F8A*B(vJP1-zD zgY6llPujYM^|0McG<-J=#4E9Tnz`<1omDfRpS!UigHsX4d@(4#UTilVI~12*1zV*& zs0M#OLhO5?wY}n9b#$e?ozzEBVPLHukIvm4UVtXGD9R=W%~}8E;kIL@mi&lFutY|C zsJCv;$;jp00$Rd@C90J+Y!)FlP8R|dWeQ(W4cS(vvi$N6QEOS3Vz$n^RuicQBT}jx zZQ`wREYA(j`M`~y;eHHVpwM^cPf~u1{(wt0<=g{|MMgIC)GMd2ujmc@Dk86~?5+Zc zBOME@?{T*1z(LUL)g}x#1iqSG(O<9ZFnPmiP9l*#d{UVy?(LL!buY`Q`3hJ`Tz>BM z#C!&*MrM5s`n2~0>_x)ZV_ibq$3ZqNTPUlYCzDIR#dNE)3L|#AaP7QN~XtD4A7H$SEpf`J0 zTkfF#GhtetKbno$Ks zCT|T}H^?8PKPmLosUZx~4ryF*g>Bc`{(dSp`a4=SKK6dWY_-QgC3dvQJ6tl=ly%JE z1+*fsmy^URyxVTbUqMKwad`?yI zlTzF&OW?{%{TJ>_o@dCaf`REPdBa)rK|ZZIT0WIxH&TVhBZdPh8yaGZbdBl+EF;AH1^#raRAez~73Wb42v{r2&^jX(K; zEu=02=l>p|Du+yea$Rc1+NTMQ5bv4|o;M1euf$Ib`NUdyaT?oitJ1b+M+9g+^usx< z%Zd!beb`%3*p@2xRRgzH4K34*Y4SevZL!_m`wJM`Xnii612!{J9Lt5s10fde+Xw^y zUeTl(g>0x$Lo5pS?l=B2pY1h7m6q)YOoLw(?6pL$5`nZT)OUm@Xgtx!Lp>J^a5>h` zm9Le8ehi0qjSi6Dv$2Q{D1?0BkcVYg?x(&U?p8PLxWx5-)N0vsg<1T zp(nG>=zp_Zr_QaL=6O}U&{q`3T{`()fg}yqcIUyG8T#x2Kp1(1J zG-%{-w8eibB1Z+j`%8n+RfWeEhv;Xyu5kR%iAwxM{6_yP-46Y?1sfG494s_;*{>>6 zxT+bJTG0w=xP=}|k(ux21^x#AvMHkA`vk(Eh5wSCD&qSF5#c(kD8Bm_`tHBrKUXr- zzm zRd# zN3Q&cFcGwfS6ByB2zG1CAW0|(@jn|b0bBW*kO{M1d6W~7iYC0%hIUMtWRK*53jdRF zg#cE}c*vWusJyVJo6~%$|8J`Yf#G zkNj_7h2;tjkgKdwB_R{|<~o=%(V0BcpAd!R{!Yox%42s`s+R(@_d_n12YwJ|a+K>2 z{DBXps8=3&y{}3?+<2z-KPW{y@y%;LlLU1USk!$b8EYW1tN4oZmO$Yaa~0>${Qo06 zuRevW?i5lPqn=9(QXtRw*jz=gP#rm{CbNfwq{~GJh1Xv5BSBS%Q5|{PMScbWT?|w) zH^Oc3$T`}()y>!7S<)y3#olEtL#lxM4~YH&<3AAi2MYhd;2${r1OI;zZ<*}aI#CPH z@=-qXeK(57ejz8Z9s`*%|H0pXF#Hcj|H1e_nEVIRnK7a>1YFo6zW0R|d7o}M&Z9@_ z8K14P-+Q)EC{W`?BR9>?{LjWgTEfoR%>7Y73EyvK0!S9gc}cNC;cDmq+0f)N20Lhi z_Vo#HTt$7c?YsjXxYxFn43{WnKMrwlVTzbp+uu#BlP`Vh4p<2>d(R?2+h6nQMX__B zRK_jB8}p*|9s-j#**P@g0MCuj3TT9p%C(=w$bCrqSNW2TRLXL)*v%CD9CL=jN&U;O~DazA$rEHMvb16JyNIpA!sxpmG-GLdmmOg^FTzLMY~Xv0I^?>dBiu0ejX_WLnYaS{5s!NJV8 z44txzhK=M+MS{i&a3gB&B3h0A=n)wGi+Z_Y-=*bvP`sv;P}X(B1U%Kh2XD3YjPCLp z_43(Cq#ktLJ!;Fa--7w88KbijGXCgHix;9k$4%OGeAed;Evlo7;&_NCyhBr{t$(j= z=Uf~c5U&lhJxSuzI$;AEy?p4svI7Lz_^Xp$TMxKKfo8#jq2*Flr>l%HKuG5}!&`N( z3e%V1DjDP7Za!AuKZKXtjj_LM&-}#|{)T+OJ0Q>TbU?X2-YgvELqJR?_wk$YBSw6E z0Ve1dS8#{uE<8QbB{3Ce09R3y`^Aq#)mwW!0omGeB3q^8EbUeq5k2vO1)PTR_`qL9 z%gSE^d8J-gUm_AeSBBc(#>3_j!qH`I#qL0}%~c(yAoq;Jp+CJ4TTjZoG?HqMEY>9D zj?LRNoeDZs0m5WVC;?m5X57_})_+`3;1ux9osh^^i@ugi*L3i4{e(Y&A9QFbblh?U zs-GflGK$k17s?g}^;Ce^npp}|KaUm4vtW0kcBV<#H;W|(B`cw;_mU7|03(KU z7Rg(EE+&Y_Z*D!!ndCrmOPb(+arN}4V1d|fHIJsFi9Vz7>`@g1ZO;LffK2B)NmK5x z+UNAsnv1lBmnbq`2zFr>Syj!8GV8^xiSDVEl$;mXq7X=|aI7H}ea-I-%rTy;Qn`Q* z<8TRFgq|ZxX#)Yz^eVuc%xg}~?`yykgoZEkL0qipVRw}MR=iA^#ftM~mV##Itx-A< zAadLW`&V{mH$Gbcx^~YDzO09HgR==dlB%Y6xzgbdx*bq-)uA||(gf0l1{hkJc}&$5 zv0qObvt)zQU#o1+`&O;u7~r1Cn?~OlfyJwsFuAmVm-U9E(+#YKtQBh9g>5*%r`j&T zeX69g;w(x;-b=5z9gJ#J(sK#bJ!*giw&U!y&Rm@8TsvfWM+s{X$|{;m!Xk&ogwEXR z&6J^G(Pf4x)XzrhQ_^S-3+3PCN4V^#oVo@~RDDvlUvV}c$uIiWE2}Z}W=5=A^gvv6 zrGH_6dwPhR+W<#lVgR1~m)AfrXH1@oqE@wld3a40aZ=k2I@9@h>lx)QK|gz&u)BLY zQ$cgRH^=<-^fytadEUWIo;p+8aIRV)dHndII(bC(xWFbAtoEy}ubTQP%)gTC#IN@4 z-O}inw}2pMOG_vVLx=Q$5|d^wZ~A*kO@c}m`U(B~2ex-f4Tdew0rtA18#xlT%K^FAl9**rD0lo)0@o;X3>$praj_@PgUy+_-@&E zV$vqHHkyx|C#9q>r!oAYoho1vjs~TAD6e1b1<;06-YSQhHB@7fE6J&+#S++yZre%r zrbAmq4_w3sSqV17hGC?qxa{_O*RGJ<{Z}&4LefSF#($9`80b4rc@t2xkFSy5fiU|z zC6fELT1J)8yz;Xc941qZVQAdCSSMmH=tZsYFlN5Og!!G)M`L8P$b39(SI@ZRTWrkh zA#8>Xz{s|je9pSR@gUQ4{B-(gLZ|>*(A#x`_<64FTfLsrCC$zK=)S{6-9xVQzH?(# zG8c2B$v!Z8q+*D<{i{I|Sbs5Y@|3+sQ^U$xwOeCh6gysn=SUfcI#aH^YVtdWs3g?c zvJq_Jp;920p^Zl^vZ+#DbJ*d1IIVQ%-0Rld1k2l+G=#8ISydxe^sr`O{p=w#v6Zkf z*`z69rCHg0vmPgq^)G71wgzs^jD;e)jo&S+-BisVO6}5jR${}D2@UZPv#G;EVe7bM zX}D1C;v}&Y`}y?l(W1JgaZ6q!B*<;1_ei(HiJe;{@u8%SHd1QwVBZ@kh$&i$ybFK%EC;nHfUfbnr7 zyE?8$0msxHxm)1^&VO@g0u6<*{Zh0|$IB>7)K`FRluNrK2?aojwK{+LyL*)m#7g*` z)3rXixoNnh4#kBLI1Wqg&`y&?W5AR36V&R*+Qz=y}R}1 z*4yp%Bh56$84LFq=~Pusgawh3ASXnHO%c_AG8k~Q!n^x-p?{YTXa@7cW0;7EM#9u% zRB)eTS%`@S!?gW>BB*ObB0*b-k``eiKU{6 zj6{6zdECM5W6s)cZHen2iuX{?$W{@btYV`8pgbk(=VDYVcuSz-W2rDdqMBwT^Y>Rc z$hpHy2@@d6uZ7rP?8r$~VLy97KO64yxYDiejQkLaZNjcuU8O5;*^ z9P))r=BH;EgWU6TN&&N0i@gU+ash6ucGY1QA3249rzRUwb*T#9LFOTBXK@tF&A(L> zq+3`UkBOkj^>=G~Nb7)jG3H$x@hSE$?3$&wAdOB#TQBPg#9ot6IE5xiuJ3Mg4?U6y z%(0Wm4C^p3gbF1Wk#$U!D6wP61lAW!&;;@`S)b{q%uHL~p?C|@abDyk8l_mfL+!#{ z&^AZCM)0r+T0tsQB-!2}zO5bkA!b=Tj|8CaTxq$<) z*JrIde=Z{W63rjq>g$gi%`RbK8h<@QL-d}b*f6qdDd7QJE-oVCm?}x6_#|SFaKBa{ zUSEEiJUOT^l1N2i+u|@?V$_r#dPaKa?Yq!E11*|!&$!&w?YG)xMo9pv^*p?8Zd)4RqB?%=NcVO1FmWT`KgNFH z+nngciei3q?UVr>Bwl!aYjt+F>1%Zq!QLjh@!qCQ#`VAHM-25&M@jaNCjaEVuSbds zf)%`rpyn-YL%rY#ZSD0|1yQ(kzK=M!$e{}q?0b$&|Vdh z+%DA{9wl_UX1u2i-66gdRxP*f$I8ZauV8yZ_;n5x1rw|+V$4dvXzXlJ6V%+21*&F@ zZ$=+Y4RYR~O~KcDw&;P5L2$mUI5nX598FFr0_761!@x>QLi*FDEYkE0BNkVyiK1`A zAT!kKx*GuhAq6HmOHM`Krv7gQcy$-_ai-5ZmMFP3#%bR ze~HZ8x}NZQDk{1nLW6{721QLrB)383IAZ_!;KrHK1ypUBgBQu%6^2|0Z&J1(2~S}~ z2GTRKJF-!=xYrV;8`lCYZWBO5zEeM%0XcSBP-gU2Vc^BK+G^$q8yt267K~l9-$7i~ zytDRwIXfhI$zFk67bgQF9)|bngueuD+0=X{XkwPo&^(MF4n0ZlvJ7m>vH7YireVv8dXPj1_6%6hf#@*IVbi!|H6E@I zFC=5F3hq%a*~NngMC~65fKbjpG#rM(j(*%7DzJ4tgi5!5q~;3~_v#(NMSIQB2FuM5 zbV>>_7W2#}E{2`35T`qQw-Z>;n5kEgRm!b5H6OJ-(}%#e6h8H@8<7CGNGFIYi-%wV zf`LL4Zr@+n1m+3C(LZ(6G6)w|(M6ssJ%2wDMLnG)#m4sTcH-Q%l**-$gB;`Z=M!|D zY=W;Zq*5=GfkAn{ow;$J6IZGrcAbDhh+YmjKc+#PJUO>H%{2VIGD6}Nw`-3O*~9Se zo|>g9>v7xjoB@R|UVZ+Se&GEXN0Js6 z>Q<4=F>8wc<`z0BALoUxizF6IH=-GtP#Dd^(+5{#+wsOR^SB^`7OA=DBTNuS3k~KB zi~tqf>6-hBVjVqMg>Qo2{H2@lO#O!lmUv_X2#?IH2{?i~jC39MIcnKx!k;|6#Y8@K zpC~3!x5L#GYnn7)Oe4fLeiwEG&;QBuR|A6Xt^7Ht2&pi>1(|;Qq&}Ja%=PD~Z}U+t z&!FlyZSYfSD)%QkC=zu1k*!~8Cr{}HLy_SA&SJkAH-Qxozq^->_)D>80vwXuR4PG@ z>!N}jU#bd|=Y;0B$I`#Cco=yl?@GuOI^H2_Hk-3I=O?=_%)_Dodb^}ygDe(jEr$ie za*CAo<6)1!b$Igk#u>{BG~#Aw`Y23MiYSL#VP5wWhp~5f4Q?x-aE4*U#hnk$#Ghp3={{;nV2CMYzLHq#g25+p7aaF)RrxpS+ip*eJWrirLfrT*Q%a~Q-1f5rd z2&{XNzM?!Q(#hVd4|r03Yi`WQ@$5(!N}w?df@TZM$0|ca8r(36@;A;Sh6!AF1$Z7e zEOLqASxvv(jk~z|BIb_LGa11)_BOZC*@|fHWJJotiF1jA^9SLVMMl+K-{_cGP zHkosov+J1}vdlvI%PCE82UU1qgm%h!e`Pz=#ryoj@2|!XhZDUnVv6ns5}*F=WA)jv zyKL42rSQ70EEbt0%}SRMcy9kscO=zZ(Yp{X=^1r_9;_=@El&pytPLOR=umuH`r}Ts zOo=s}`W5gyliF;00*q0@fbzYyx}U833s&=U3y$o1muhbpI}{m!pN|lK#zv~bC_;Qh zU83OJjnRnh__icD=!Mdf?KeUQ)dJ{sz+P7e6?k^q6+rKU_9UalOmIB8$&BVnfBKnj}tEkvnB|Zw;)DC zc(*(%9e9HXmmeM3%I4!TjJ*hd`SxVH}W z&_%g3qmJypUtw9#ZRas#vgJO@3hC(?1r*V5ro3MrRmsDqw7agX z6U^Ak`+^t z&J78=kK3uW1%s}ro4)b@+r?cor{su)N03S(=gO(C6#brX4WIh|I2*60D6V79LuN#9FWD&I`{s+Q)xriEI5 zlnjWpEeM4S_vCF(xO+f5eYUI(^!0o391{o7l-@lz$1i~|7YrNE7wKpRm=+-2xff9_ z^9H%Q`HC5{9ToMhJjcJsUoQO_-(Ts=%Kl+`rpxu0o7W&m@q-G6vv1rCZ!M?I>93>R zic$3hIXyBn3*aXF%KXql+Dj{iJ933R9qq72JQ@0K#ZS?waS}8tjiDiX*sBlsr}t|A z2iJ3d+RReN#!(lU)8}mR5mbkrKHz;FvhRv{?jh?kN0k|KpzoY3(yD{Pv3qqqAh`8B z@UCDSz=8vz%YaG&KNrsY)ZG~B!p`irLvM5$Ns&Uyj9~ufWD#?>c*SrMC-D^K z^_3f%@ye|Yqf5^kuW}7?)6G6w`<(RoJ;3%l3CP)2_YESB)k@{BRU44?PS;D6wMM&* z!QZo5nAOWoe|MHkC0o1&!j7J?3aKQJ$gdk(Rk=?bvvHSl;M}Y;m`JC5O`7&9!AGkYb$ zRXvVMF+zTa?aGwTvSI9*@y+$`CNtSN4q&Xn$Tn#X~PylMGx>Nr`|aTic)e7xYasLjznF zOs=sMj*nt&lj8H^l%X3x;WGSy-#%r6a_U($2EywWhZB>5Y=VoHFBn2vqCs{{E+07X z<-1-4`%A{_jj7azh1l&sj4?G@-eYqc#==`ydYztLzFV*R0As0?H1)~UVWecTjZTn6 z+Zf+&Zp^((fOdU3x6N${yXEZ}HGAQq)&w2K`eY!M%Lx|$x}Od&P)CfBxc)URgnlYQ zkNOWxIF3F)Ay`Z);6mUf#%*kfsA4}#(6bgo`3^52(c1@$9-<#!{=g(JuPpi>w*j`P z=>c0su_O1X(gAfM$JdNy@XBSRyussKL3x5BFO58uC+GiOIq_`8 z7W{vp55kpmq4pNElBq!AsH3tMpW1^&?lvpqG3YC-r&S1n&_rk{HO&EAts)&dNA0W4 zsT%mD38T_&d?1-ExLbhe%V(1MK@+j3aMYf%S8?KTH$Jo%4DReyFF{?l zJbGhXvW_~c{#v2&0e7@|uAO!sw?5`dw`|@Nhl(|QvH$fPb}#uO`s+s>^_Qj$VEi=n z_^wO${6{Rk>YJ_?`$@B*4=4}u}T3X|(-ZH_1WP0i4%K;Rs@iD|s3-tgRjr017 zr5VDc|7ti`j&!8$YEJ{^brU!)*!pY`J-IqRc1!i49atO`1Qr60gXio;rWUpRZcKu} zyg}ZY$Mv8mWEihl@6vv}1~ga|7w{QmPsJd%7NoM#bd@ZZub3zrVG#}CYl2xHizv8@ zyahiiG9pVYOI{cl7#tnkaR8Vy08~fOuVNZ;&hIw`KM`=5r85q*f04*4-TA;OR&=fzX~*Vc}%sRg}QgP1DTcCI=G>Ba=-iqG3158 zD%$)`QS(|Iv|Jh$RGC5I#_&bJ5$}9nBQ<({QSj*%E)Vm8PeD`v{Y;$<>e4p0{rr!2 zwVBeqyUE862hR?NU`X?7ddVZSVlkQYzIL5Td;>Z_-3Dzx5UnTz;8V_ph9&|D9Zsl% zBd+{x`=wDB@_0$PK{KZ_Z8b1BQDlQ2PaukwcK*(%Fb_m2Q-1iebGmD*dSd9xE4sRO z2K{DJ7ncPcMdqlV^u!&#ZT)~beyFu~eFS`B$Dmk5_(A*fC{yIvu;ctImk>9eRBSiQ z{%ND1++8+s$T%8QhFAL*B5)hE&ZCO;d(}L!*=Ne7PZ6b+I{c*Qq)&e={nb3qk2{;V zUdL5Jzwk4cC=Tvmj=&~lHHO_|(%p#2XR3iPdO4y=eVc()BvEa??=N}wp?kqw`5`s- zP=V>P0%-&xHN1W}?Bg0EaSgBjL{b}-$zkuL6y~<{zh40L&a!56il?+{lYz;+gUIuV z#Eg^m1j~#mBRshlIvoK(|^}`K}hg6^?+z?m~6)5P_MF@DN%>Jx1DKvPvCPWS)tOk=KPUcR| zGB4gZOfB@r4s;8`{Ads2CJt%4W$JaRTvyx+HQL2}81;fn19mwLn&(QLn~yNe zT7Td_keM7vx^~>Vca5Rh^{?7b-ZQvw=LjH6t3?iGeeDkAA-_M+_mV$LJ^Oy~%K-U` zlb5EuA;-EWS%kaUd;#n;s_Ec!)6T?!0?nzD>fNA&nr9O zNfF@B!pXspCWB#lzqqKn)roGGiNz@0<-`=2pjVX{N3y*_tCxbVBI#=Ulp5n~SCbfv-V)V0IEO_~0i)qjN?J&_ zrBn~I*!dA^SFK~UyIK6 z2?MieS-Tv=^;zRdM?yaT>E6A(a?t)q$X^iLynEbWyQFWhe6+-nieXE3qRK_Kkm`A; zp!D}qtek3x2hSf<6>Pn;dguMpdGnu$xg5KU1=ngN=Lzff61Kw$G?;`Mak?#96d^J{ z9zEfBNApWHs-u6wCpuzxOhy23$f}zQbow!;#hD}n9EQP# zt~Zy+T<0Zof0c;ymgsEo{P@>dtl(FpSdnJ@4;V5FjRwksTeTRtAu zc)><~Xit)WTiHe4wD4chT0@0qFqXxx_osDDRrG%ew&Go_Sm#>cE`%P046927pYxve z_bxZS4O&2Pid?P)krVTP?OlDb0a>}(n}6oms$PA^jipq{TKSuW`vt3OfcOB_t0G6L zxjYR-ZOmCRzF`WhUNQ7%-ye>Bu+?WG7tc<;FJU<%T`O+)xA$L6Z?9Z=?x+aipC&On@p_)CfLuDz&9h+wRjOd()8UubkL4-vdx?%--h$*(w( zbUKUGJkxk<)R}LLLar_s)vfK|XLmlbub(e|=lX5b99$;}IPb7PztOgIt&WRrFn*m7 zc?jHfAR#rj^AkAy zElBT<+5t7kr_Kr;_M{P^KPIe&jx63*6d48*;uj{{30$w_lBU}rO+ouWq;@3EB9_xT zH8&S?`(B-L(?hR*-2#-eG*}t128#!A@o-yJ+x#%5n{}0bu5I7t7Ir}&{6m}fqCH5+ zO1rfKcOs&%9bRlCThJC36;-hX?>D-Aq}|0ITe*8Z3@xaJhpo;$_d^yau1cT?-3l@w zv5IPK`HI%m73}1*{P&YE87%9B{@3azwAohGRqSLO$|$3{YSO4B$IPT+N%M3nt8`JH z&vhp6{mSn}$@F=ma8OiK0v2zKn94QK7k?MHsFE-bw^}1f_CjMFc|u5?Bld<3zzRNWxx*)8)I>=y?~vvin@fVsBGhD|EGq zo1(H$LzEUO5~sEC%CyR#)wvlKDhT?+2GADCdnEPud(jqoRp}+P^#N#RZj{8RrGp zm0< zgVm$_+%r9s;p?OOgYUn&BnEXhoc5ZLe6OUxAZ78nT#vl!cu((mjLDJ7UgtA@rW9S4 z%t0cMDWGdfC{v7@l}da*8r}#55dWc=lQ5+tS?jw*SO%|EKc{nMvX`KXx&>JZ))!xL z<#i8eiay4=nlu<(%i1$_0ypuv30xuGA}6aF#Xp0BvKr?6;W+*x@G9eA>hRv653rZu zZm%I$(|!RaWNCdip=KoeC9haOCk{b1JlAzlnkn;2iWaW3_@=@^L^%k0q|c@Z;~K5u z(X5QUD>tpaF@an66(@BFjrd}Bh6%UO@Q_wAMywkZa!(r(N?tgK{m}^l4zkqC=JD4Z z*JNvEa+=lb*x8Db`7K@oR>7U)cGvfk1kw{kZ%)8#tDVrJnJj;_ z6_)cf*_=FP%xLL6Fjf~v`{bBt#-v-H zY@+>OUUXl$R*C)|#e|H7^pow)?3!D1x^>UBV!CGBFSDiiv_auMU$OydYo9CSZ6$cY z^+H&SE?SSL+n*M*jqA&cVFmk?~+8?85B)jdAb?P&c0N;)S9& zn_cQ&S_@Hk9S4yCh8`>f3p4j8tO{zeP7&WG7hq*}Ylz!9ZRJ7wRXDj1gr@fa`FyGe z;1<(E08Kmg|42tOS# z!v(;Ge3WXXq$j9%+E*-Z5jJ4J-l6!cCCT~i9?&6VFWKRCWO&*&3X?xra-yUHnI}fzOa4svlRQBOqDE;i{K+F6 z0YdgW0#ejv)8~Hj8+y|QK&sGVx^wG#@Mq=L{yyIwg7QT-WlqKg@o%^e>>OG*bZN#l z74~J_P4g$8I^C#=DCCXQ14Sq@47$w8>)%y?DvkMF9(GJI&z(TvTzD-hFaxf`^8>V# z)4UWml#bYV0!d_rDwF%_{4+jSi1Riu5kjCY&~9SekYd)@!cKexK}s&&oALJDzV5GcxU0d1GKy>s z!g2@qvG{a6eUU9OEM0CS5oktVQldxyN~c4<{%J<4g}ji2Ng=bac6vqK%g2B=4M1>* ze-sv%`lQirt0qwg*RNyun9C1Ck zeN~Vmrwz6^t>~C_dD4i=m=tGW{7(y&qPrd zs0=OWj775~QC}$R5|L7K&0JM3GGhBQs_Y&MU&jaMGq@0^IgCCF--r#&a@kU;q$4od zw>wzI`co6Z{OEuA^FYF2)tcA5D`HQhK%OMqF$JqIXs+luR5$ISN@9}~QbWg`a_47=( zr?i>_`8v_DW|zt2W%XjAs#%O-{p`}0*LwdE(6}OUgd=VnoCHJ0U3P|Kk~SOh2=MT& zL1ns!W+F;979VP*jh~Ibr6P2qx2BX^C~b@^4M`0y6tN}jIFMMWO4w32?b$5vrENI6 zc9P~PGiQT5#=^^)N+k7>jZSGxOGm4Ag(=x8HyvY;L8V%kV#NB2a;(~$k-7IaxK?Qq zI~2UsjYoJPucDqsBNFfwzH;NvAvKF)3en%$SG1lE(CLUZxT&jJg#!%2>fIB}ioB@i zE76}bC?#Cn+(L_qs&DO(%6)9G$KeHjpL!iF%Yn|!>1N+v^Y56P{>HJI1)tIt3-ym$ayCcpVvd{y&?`pxJB~Cet zZkpR~7uMdd5K47WY@)aQPaoRQp;+19&&gA5TBP(RRbi;|X8}jp#nt36J+aZ)B=Rxl zdBo=(5JTfFB$dp=*HC+8pW{w7JvFj^AMarJurR3FA2&bKXFY=Xt$gfsts=phq;3%X zwT&q4g&%+ud>_q2m29BSAu@a(A`S>==81x`R6Zo(Lye@>_^`x&PD%_qFp6zL9}ob3 zJs&1F8AcP{V=-!{z{E!^EkRYIkx?h3wCq1bvw^78NW(HB$g_gS=ERAK;s^jDD#{kQ zc=!>&b8_g;3;x1?ys^~?y9hdfqi@`;RAaDR2k}`KkyEG-KePm|V?Pm?=|bqcq%|k$ zCNJkg(fhsjzQ#I8XH~T7^Q+=wNm*-9zHp`Ur*^^0!%f1?tU23PU!r=01#Ffh(1PV( z&l-2uyFtrl1u3aQv-f@(7anHZMqm8B!iXXDfxVxr-#OXGOG!;tei3QYR!^*O9ZjK( z*lIf*_=ME~18AO*Equf9Ev=T7MYruN@V>rDefTJ6>>WTriR&} zL@_O&b`A4_YrKH`PeGcD1SW2N>uIjG9c5s`CB(%=W`U2so8Il;F2diF`9&#&L)hBc zWOjq1t3j+B%rb7i=M`>SIYVzoOF@7qJ9etgM~%+>AKk!LpG}hM*>?jQ-E0OMXH*)w zKQD7u!l;uwopKsGOeK8^jlFYfe|1)YM}elemeiBik=%GLuT;p<(H$$uHn&HURpQvm z%%}}UJ;Iy0{?tC8hCn3=i_Q_cW!7AKnO9$FCe`7rTZXnU&0|;R_((yQZ6?X6$^7F= z>;Rz-I{E4jmc>VvoX-3c$NsZSr^V|-S3$A?_~=xXNS`}-1+tSe!?1xSL{o?bI0VS|j#WY;(fVKV`iGSR7p^dV{%U)&-SuX|yB=u0CWIc(Et7yy*Cu=6U&CNe4^0Co&+?XSgiIKAf=PsRs zu1!wvx)wn2WqVIrMXyHMZ5G9-o`^iRCk75rjE%{(TE)dKn z4-7jJbtj404p-o78VCH5@b87S z97U^0ma4Xf{gOn4)^BMhac6JP??(kdpviF;aywA?On7jeO4|!*AktmSmaSGGsyYC< z+yPF67D6{6xHZV-KUmhy4J|S4m^NJ9(ghsTVF-{6`$9do+`G;;R)9vF-bY63Ehtyj z4M&r*uOElpF9e^_gFYr7&(tr~!B#Y+)L?%zz>S=(@!W???hwg+Z%xkk?)dAqtYgNO zUoYeAJU3LnUS5D@iWc4;0A)6vTIAGOm_N;RiR*lX3GeP1rD8p;-aF+QxOI80zvFln zg}g%BY?)2Lu>pt&w0MK9UC6-+8?}{JB5EjATFB9wxwqj=}a+>pLKW_scw7SCi z@S{$()ln!B?#*tK4TpO9h~&*>D%hS+<@y+{t|woaTDz-Q{PgCDvYGPWsPvpm3&Zbf z5?DeG;RAd-1M312%G^irQQShIbd))^Z9iQVSpEoizYMnPqe6{koZ4sHUDqz##Xvqk z9r1mPQiDHXEC#)4A+~q@27SFh5jLaNu4>=xtNB8ZmjVSt{eCHg0wSxERF>x91TzK! z0$PFq0#g63RZ^B=W)fv#VAqp(w6ioZa#l96v9~sGHleq+FmyC+WY(nqk?&NG@qvzyo!^~vL;^szYUac%6x5kgyMRG$> zVo#)y=qF%9=0U*}o>6f!Xdxn(vVxbWlC1*(SR<>vKTWPmi3i0y4ojwV-rc;L9!86O zeBL1Of8~`51ktxqAwIV@k!Y91q@*hNG-<+N5D`|I8_@L7{0Yvir%4(X$AWVjPa!H2 zJ?lJK8oZvnCdM=og|okRxTc*`F+N2s^!I?_10I91Bs_Z@gVOysPLS(Vb zZ%8%P5`L7%9B$0p5k)=@Z;WyjGM&@k@>AdOL%7U)aH5O#Z;7_nLoFc(3QyQ1J+GUk zq|~^KXfer zVV3nb(OSqPQNYNLzh zRQEctF0wMK@GLeBf3tvK(Vx}Nn6pT;m z>({2RYr=WL&RoNNhM#Isp-*bu7M(AkBS&}flJ9@bY|`(U-E~LWxA;AyeSm?0B>tag zwzPzhh^&$bowJ*>OKg`cC?o99lejx1A5a(0G8YI84l<4O@We|-m^SXP-dd(YfX%uy+_7iITuFX1t#s6?9-w8z?dIV~F5 zpAmL?JDR-v8SmP;ySmTu0aI9JZRKQ!lc{ONpjW)nmVMyQdFFilLgix{K=WMyg{ILz zS8bY@Q?&9!7t3EEQeR6u8~@wS!f>#ZG9CU#P7*c{(CRr5ko^Di;3=9|n;1Bm=*ikS zn>f*#JKI=a@Vq%yh%a`RQhf;_DE)G}Qk7>oJdjb$6_{}ONgk7ynZ9BdA!tFeC87_E zvQho9)jhZ2=ZBdq!La8|I(>hZ#e2oea>S>6S@d`{LG`+7yPkLWu^^)(h?_gbhb#Hw zRjgxx5Wy)RY$L|1voS}j#CrR3N(*QMY(7CiV8g-A(emin3k}hPWUz zAee)dYJ_0>24`VsH=?>xYBh@Ggm5H^BwMmmp-O#be$9H$1UBj5a zsEmp1g4t+#o|`LV*4@uLauQEQ(H!s3>J(~1uC2s-tpbd^uAeK{rNeCc5Xs#j3@Mf-vG zQ5yJmnrO>eoNwgys?g8lV(!N0W3}$}d8=nUQFF`PEjf8n$(EyZ!hI!o_8#hMs5Iy4 zd;5OSR_ZCg*axAi6J<+_&{1Z_DQ?RS57V@39#j;fojP?_We9Xq7>WcGIr-Vi4GAk) zs#q_-lpX)J&+>qgL@KC5xCL2;**6v{Vl zwf9b6v;Gxzk#`@wjy5MLrf)S7yU0h$8>~m<)=wv)4{{sj>9$OsaPT~25;RQx!eiNi z9>(k^YLqxqwE>*<0`63g_;u2x61zdIVEkm5Zo>-4X<^~2_tR~f3}t7m+_u2eYkjqA z{)WNLIRkI+I9P) zk8L}dv2EM7ZOz!$jBVStZQIF=F=IP9ncutCxA&>N_PROy>{0bp^>Ni}+&rWIsR_V;6eOMR6+zwXsB8aSN9rl>)i*ch zNUkVWA0qr5E;fRL&9%;Jb1q-aHRZ1%c^y`>JUbG z9{|(iUUngewB^n73sBx|o$6-=oOJ%6z24&!SovLP28jUM0Cu;LJ05v?CILkLMVy1V zWyQ5P2~kS6^OVOC&B$d%p$fcevg?EIe!Ti9WFsKWpEBSrj1+c4E^ViX9EAz2Qqp7B z)j$n^w>!F(kE>7J9)yf8NMU(Hd70vKjYngrp2<17ohOuLXt z0P?v^{L)P@mYJ4W8DlSMj*Ji8maZlL%r=--ZWS_W^(4MR)9qRzpM4=<2{4{uVQ7QM zpQ@L%5p4+*+!rjW=eLMYqMi(lM)8r?z0~dx=#IPq24d!Q$4^gEHb1 zf)Y0TX!t&*9dIOZ_kQ+-uuSJI?$P``ev$*AOoC0m{LW~y z!|fb8&6Uh5igExQEd+wQ6SR5z#JK6V)4mg0xHqeG5HibU2l@xA9J*Sq7p8F&PEyDL z3_dt?KtJ-tl904FFGQu@fD-PI*dvR~W+w#~28{82u5+h7HI>|ne4JHjK!J5PV9u|( z(+3ha2M3VEz7#kF+J%-K@SW2dgV+7n6TK;0YY7cqE0chJAR_l1G}$0p*HVC1PXiKC zJ21wdu^f8wLV zxT7XWh!sOi+aC~nOJR};1e_b>6;qLvAu^FY5`&tRAms6C}GkOBC)MJ+xLnODPjr+*QG zMt(>FE=>a!9>4A&az2DwFEv5SV)`SYpx~D7K$z}1m8=Q@M%&eHOkpn9PBg_Hclt+O`ex@;< z`X}U6LPJ!rAGu^%PiRF67fF047F-syEjJJ7q?bU7Gr`*Tb!GOpn|M-Im3_C4rUVid z5q&@4u1=~~F{L0eXgyuG269RI>CE#owEYq>bGWp^x3%b5gy9#Cso+aripE~qsPRL@ zB(ji8`uZ+yPgvVRX6S9HUH_L5%dc{#BWR$o7qC>m!h5`dQ|R@%r(^lJRk@(xcPdM& zJ}<6ZKlBV1rQik-ej!jZ2VXg$-&cqwP*@n>c~aSLlJmt(CLm%-GUt7>;)(oed2~jI z(!(^si1o2R`CRNI2MyrlLh69AG;no30;d3nkMylO^2kt~yrzP)Abm#kfMJVb;6_O9 zQ^5(p+>0iicZZgYY+Gh_prQLH622oJ+O~IUXMtbh&UzqJ#>=U}sZIi(LLRcKx_WlB zJGR+Xh$YHed|3K^!3zm3;-*qjd-rK^<3)K53ZTpJQ(jIS#K{$0#RPBtpr1&hZt1P? z0$~B+7G<@pE&ov=hQE0*HdEuPAiQ*s=mFq*hNyF@8+0idTA{7OR_Ix@*-1&>#Mer` zjb=}28ijGHR``Jg1%3(L+D@mfUDG7f8JWmwUe z=!B4%&knRPIdUNPr}wiTWnxb!6dAAq4)(dJ76;v37CK-i`fg+oXc^my{x7n;zQU(^8N3MmUaW3}1pPRO zC%v62gVbFwiXkke*8U>M{8b+dL4c|Lbw)+MF;;xw^CQ0x2bG0Go%53}dP2qJ#t$A> z^Nr+v|GpiuN3{DF^rI`GS<^wm>nrGAN=H8j8w#kuC|7l+uos!pqOjH{akU}D$m8ey z-V;M0x0mHhtTddcWY)oX0vRcR&nISVVnGL_nI_WgV5h$y>0%OBG&% zOVDl1LJuFki+n~_&-27NU>7@0oZg7{VGG%2?Tbj&us}7%D1YMxlmPf7Gd1#{`+F_I z*tOT5au~VsU-*-4KJ)_RDtwd*7KbwtQW0gC_5%`r@sg2#Iram*ahNv4))vEq+k0hD z?}sJvl;wI#(*;*2p1e|X?li*2IgpgoA zcMwQ(%o`Bi6}lt(nIY2Bh-FL$xHJOV)C&WUgKkJDwE9_+h7sNSrb5-9msW&s28Jc4 zBU(TygXHz4%%Zixqp4s~arqIG&#+7XXgfjO6w0d8lV5<%oy_GPmQ3^Kug3v@#zp)} z8iR0f4&^kC&|6{#@30kC_+{w#xtcb4Cw+u$$%qc+wdUePG^D$&F~Mb(ra2Kj_b|=5 zt$Nm4+Ys5Z%&5DCHx0u#{G@bp*$otqTkvyeGmnrZ901t+BgDG;Qu;MZqKE197;CVa z<(lo0i&H#gv>Fb&0GJn&qn@7A4UnHO=&h08va!F^BT!^%CEhMa6IOs7nRg`Bm7=rC z245tFDLK$bBM!^iq&jb*e1hiiQfmraz~A#Wo;EcTD>pIEV>dguK((-d`bCv$r&`x$ z>KA7~y9Y}EN24@))psslbVFM&tKT-OfwnB0BnH1E#37~h=tOHqvlH( zgAN4Jr)z3>KMjFc^c6fF{=lU{0~|skB>irR?0_`-j~!56ujSiR1;^E+6pjfiKkRYxTKd%5_v?d$ zR6I?jdAyj%J)DCs#H|#hRjN1CxNbE8E$D)D>UYrQZ9J1VcxH7R7?t)OU|ea4`r+@M zPVy8A9Y=fv$7I$B^amT4w1Cde73f;*;;Q`0shi+peckc3CE*=9mUtml*~lxt6dtIQ zb4{y$P^iIQB#XEBQJGxtXeO|D*kB|lL!}ww`odH5*M?`Ga+#mgAXWS_@0GMfMJaPf z-oga_)RfukB%yIz2|4l0IuwcD{jgr)| z5+tVQ*@-#$WU1YS($YO_`!#>dSqGitW<|4-H4ZTbqHLgr$)}02wc;C{HJ3Ol6Sl{{ zfa|iT0g0J?XLwA3k^U#9qtlmYAgcHpWRq&axg6MpYAJ4|7kG?`*ITqJPr^XxwU_ne z1;{csE*FU@NRzl3bXZo5&FLqO6S(2@61dQSl8iO1PC5yQNs>cH<>JpV1me>bwZw#a zD3oHe&-e!AX4WUyDB=HZlcaqa63wHtnCtxvXsDH4hwTbJV*Ni$J=0SGT zFFo2VB+ujQAKqrRfQ?ugE%V(5Vrb4!(IvgM^jfx4w3J-Kb_xk16d-gtfm*^+=p|s! z!!6Mjq#K_gbL(wQT)ZvY+}b5k9JB+vsD)RZcQ(cFGj;D+ZEupdM5@;wjqnqaJwX-B zk|L%Kc(+4+6#a~=b$)wv2t((nQw?} zWMy8+;;e1EQU-5vC1HA(Fuq`sM7=6aSF)r(1l$8|mu}h{Wn#z7pis)X;F}( z3@2thu*|%DU#xX!{hP>zdYj?5e3q@R+52VW?;&`K#(HV{Q0-Mjfe6 ziRh!jR2GrS@=^@2GH5%X5pijg))Pg~&p58H#bP%75a8X-f^9=(E!?ccmmws>gfQxE z8jdzAd3`HK@wZQY{Oxk83A{l-p&9q2Q~q20;wKr&D`HWb|2ys;S zjwYy9%l2!M^PhTHqgR$r*skF^45)2Mi8Zb(eax$!SaA%lE*Gc-Ei$_z-k2 z;Af?~=fPKA{#^~-q|4|p+{@FiqRps(G-pV@B1 z6RVFdmdsL?PC%ZLyeFLR>Vn1715rnbZFz=-y5+eMIxe_Y>VHn|pmc0nU%!2;wfiM_bk^egGqctk*{P=N~-kAhU#utl)COu`7Zf zu%`eoCThA)0sn?8ylRY7LTYGqMq>yn(Sy>FxDY*GWr+l%%wP=4+UaT=n^TUo9jF?d zhpLI~n%iu{Un5p{uQ)kpx-U2AY_B@J^HE?QM;Cdf^MgQ;6CEp<)-^f6u#?!$pa7Gm zRoc<-eBqQaW?q-+?irSZbte^ocIREPBbuWGH+d^&m4cLCXGJn(!nSS(2c3~ z^8+gk5FUIrM!7AU=^W`Tbd}$KO1e4fBN&*mW{wvanfBM7GIF){j;$$}L;jQmp8TfH z_GAczQgudHE>5Sfuz7((b>PF$ICz93VhsV2_}H-O_WCXpVICS(O5C{A@B|}Kuj!?x z@zhVK?)Ope|Q^#~8s*QIT6a6~^yr>nFXneV-Q+Db!;v!A5` z6P0X_?D-hZo5qlFk1ynQVMgGB5T&j2jfAsd$$ZERvh9(8=55&H@&_lzSQr(8+=F0AY=n$UOI;V>|K(<_HJ z={!DB%Ih^)=M@A8+u{26{Y17&uG|V1C&5XXj;i4&*eoJz-`0u~`cWA?zeSwm5-=R$ zq_8dmNco#=YN9aj&v(*7?BSqN*=->DI<^a1FJ%`_j%@<2IXcG7ThvWhN1!20oTe`B zdxln0{Ydg2^+XZF5M_)~(rk-fqdx_Krzr+#+aume>I>0#daoVMH9TX^+<0G1+SUep zWXU!0EYFImOs9aa&~U6hRnk3cz;Uz905uXp}npQsrw_e>KRcumxDG3ka(-r8ll z2tlxt&h>5fzj$KqArz?ld8kIXl-3E|ePCc0XV4`s>ffb4 z9ytLRV0cZCM^Af|AT6RlgR*iyo|fB}{mh+KTA)8EAFo14Or!|$Om^MKsF}#A2dWGR zJX5+o$I&jBEMFXyfY=ns4)oOZyow{@;3))K`gcejc;jQCSQ~$dc@;p^|B)a&s6823 zMHR6`Nm6~#N;gTvwDZO{5ZKo&*J(*KZBU^hPkLp$VJG0Sqs7qVJw1A*MvQD+R#mtr zDW3TxbLEbZk;Z_$E`j=L_^!FL^yVF-y~VHGlWj>D;z7Q{>9|nihiRHz0AJNylFyLr zoSA;ucB{Fqe0FKTip!O$X-bl7r`(F5W5d46VN+%lzHpLvdzzs9R#E)5E}VbaOcV3o z0pp-z!Ae}DP(wxY%nfo`_v8C-p|OGi@P zl%-zzFGB)#l`ekD@2HmXDIfLgJ?wU=jz$bu81Z^PtJiFVuN?_V#q}0iZK{-45RG0P zZe+b9&i?p5J@nYB_~;@3U>q7P%&{gU5huI%&JGSdH+(?TPsI8@?`%@CmA7bt98NN& z7B`~ttIAi8J3Ii$=of+d^Him;zx&KC(J@y9HfOdi#9~@243zUU+k+-F*uOtvO8Hyu zjsSRf^B-!SOkZ17@GkrBv!K8HdCUf1|WR|Pz=MdM)F@M`B-AMHhWK5s62fM z`|%y7PT{Cm5As_=_txZ*4bHT_D_2fHmx04so2_==lwDl05A2cNNFIwieNXW|j2gt7 zo~G(#c;(nSULUsjaUrGz^yVNU;x(727TJsIfUc>eXHA+Wk7Ulcs$dj6#$`h}jo_K2 zxoi+KV=3Z_k>=X@b?PK42~I^W$HS}mezFtutTJPlGl82ey7-9>d;v+UT;?$Gm&Qx_ zCv!%tcseC~E)Nj4b6C8S{`@^2M9enXHHWkLj{9#3W`2-t=;~gEQ~SQKfa?~BBYnZM z&iKgW>^sXz-GTf3PxhVM{N;r@F&{;QFJ->;P4}1Ce0 z+B7M|&9K*vifFfhAugjA5mj7EePVu`FzDe-W;InCv`rPjqa*UHn$snaT(&{zHO<&4 zj{nVOO8@6KGjOo^_l6Jvf9tPCMu?+3&;S62MgRcj|Nm_0=w#sFy}XLAxTnn`N#5cx^;pv79XJL9eWoTU})D0 zB^aE`Es#_anI7fY4>u7Jy`I2Z2;%h_&(b|y_Evg6tJU0D{KmN##}Y}{UA-Fs?nji$ zV0uJG5-z}m$)3j;1|N%4_sUsiCOJ(-;=5P+oq^DyC({0#6rVR1P{#aEw&$+7pi$B; zD7HoFFfYdEklaXT3NI{0PHB+(qn}%Wf^>p#$VPO(=a&JR5-+d2tRhzIE-{u*aujD& zmmNFU5i?;mcJE|>4o;p7>8B3NOw73#=Gy>6UQF)cWQKJ1kY5mt0DvjJpNoqt{9yc% zx8%O{GGjZr?5WZfYT7VjD?gADupFY3{V>CW=(+nm55p$&W5KFi&RVX|IbXkrTW$dl z&`jXKMj6}tBqxWSu*c*t_RX6chBny~!%xQJo`)Wfo6wtqr(AVO59Z9cgal*)qy5Ha zYfN_wC?=TmbKe)W3-ec;H~9U;a~M~V4nflpjx+??bcAaZEWY`MUp~UTSJ#IVr z*FV({n59obC;Jh(!Q4;)TYFcfc3*-IqG>o!(mMKsmo9bJbsXRu#&2$~_Q@s3Mq}E@ z_!3U=x^+mgMEjVb`iiAR&a#6P03#(j-9F}LdG<=A> zsAbb&0bx^FxbzRU93>NUfM{|1iXkj(yFxpVu=m_PgR1n4p9|R16pqwq=BP=x=UK57 zISrvxaAM>f*r;2v&Ik|K(_Pm;)yBu)S9l2^VFYy@YDq~Xc;f_IgR;B7q zpQc<=ylF#y-}{{Jx@KjHBW-OjI39`#jT)vchwFbxHCJORABYLSV~2OcYK>2`c`X#s z*SXD7w8k+4s^Ba(GHuq;(S2{G-Tr9uWwC>>e!w)#C)jfthznO|C9_t&{pm0UH;7tE z<2eR}QCVa@zO38btU7jt5G>?^O2{RJMpg^4UvHK~L=ST^h&a7#%zkH@fFz^YnQ*O( z1JPM=9J~!o1N`TqM#Wy%EQ}w&*I!m8^9;m^Ld?=6t6V&4DcU3o?B(S?3$Eqox*>R= zEW6A#@@B9<#J0gVxh zxJzVViXVd;XoE)f+!@6r87rBWkIi>;O<+9`*}&kP4+9GK!J8hZcAH^%g9*yk@nP+! zqa15qTTTS}p#^IL7|rq{gy=rvyW0u<$r_!86!Dyc`=zne;0w5aP1iJUuQn#l~|bFNCyxNSi5TN`&2?_czWIA#aWwgN!b%f?cq_ z(hC#=r9?(eNdni|?9#?RXs0!nNv^@cNlN=OATqj&C_w?|2e2CRk zDn~8WdB{9DU5^F(cG4Bu+G9FEMeI4Eb^04S!$B;pn!VV^I%>RP%ub4PbgX zZK(0cHo71k;K-iyaUU3%b3p}Yq?3#u70Lt&VZ|Qe*!)bdM`7QQ(*Q&Isi^3l8y}|{ zu25)w3qfL3fs!e{c917AtV%(N*q|ZWaq9B3FeYX!mi8?y4~k5ZQ=TAdzw|z{RLqiG z-SVV)QNDJu)SxVK`I4vw+@%2=)5iM5(wNa>wc5sUN4(1Fka2yraQV<0wesyqjM`zw z>jFwPH?r2PlT{C&1)CDQl3T<;wv#hAXw3`?@5$xOXw#+-s`>1--+E!}?C zqmhd4KvLQGl&#{e$QYJyAz0r-JZd!=Xnyef&8cyMUv+|UqQsMTBc5=2=~Op0-WM-1 z*Fk7`obyXdb&hI5QV~N_tD*^OZd_BMT-wU2Nz-0agF<4=(xzy6LXE0|q|C3XYT1&f zR2x|0!Q2K`H9~?)E}{^tsadhYq{so5Sfum;e^OG0@>c)*oz}#nA9K{bW0MAFNORr4 zES(k~Jx`iu-B=3e(RA$Ti0zbI4 zhQRqkH`pGP@Rcl|CL>D<-{_nklJb3dC`uF1C?u~p8wMaz0QHU$0Kxa zzmh{zpRvC%3q5g`Dyme3Aq<>cu!{fuk&zo#1yVd|*PrWsND3H0Iku|k-UJEkmVSSN z)=KLx|Cv0FJScs);gWDubKc_`+jm4li%cj8Y!D4`sA441DG56LMUHs=A}*{;I_$=w z_TSQB{nFM5G=!(|ln4)xDPC7KBRx>TWQ^qnryPU3f3(E~ud7OS`nX>RXm*fOuB&`z z^vEX9@*lcO(z{;LyUMtIfmwVF0DZ$8J~ef|&fZZc*4q`Oh*mB%F8Y>& zo!e76)mW$XVYnhv48A(=fvitkg;;I- z$X*r#A_U69B2*fefzPHnksoTWzQF&}Q2!|7mujye5gY&jtpfmn)&Cu3=rMmg;~N@V zI=>w^Sdo1G&eU>mtyWz~HYOCi#B-#_8|hGMp;~Zd>HZRusvRm5wiF+)WBSxw!mVSnVkQoTr>Q%l$&fYH(a^zc8=qy6*i=bLNuYMKo!Joi)atGC zWV>!e+rlY3p0G$JDfP~ru;kZUoLSqmsm5!u`}Jk6#x}kvsF{`dbj{mWSiD9e&lMN! zNZfbM5`4XzCba=Bv=n?+LjjoiQ^aB%?28fi4u>bmhQI`2JMi1(ZjJ5PUH8USJ)z7< zpaKdRxb)t#ZXfyd8Zqv4?oFcEtWP|C#n4mQ%y$wrdqhHOXaU2WC+R#-jQ4ZzEBCR8 z8y?93!;DjU&FW|ZVMO0`jXguW>&t@Q#O1ig$W?@1u%Vzj(zK7p)+!` z9T3EfYl(E8hAd@E+^8q{StLKQ{^uVZo@nZ8w5Hn@Xe5D%PKeB~1CXr%+yE9yBf~d3 zXppxx1#a|)?}+V=Xi+0GsZhWO0BnG{SzBAcO@*HDS*pC-@w8J=pNl+(3)G-`Q@fY} z9saa^>jn+Rpb>x=Lm*oEa40vQ zu%HAgR9a5mxA~t9o+m0{YTh|T7JVW1q`x+qq^@>1O!5Ud(~2QimCIMZ`@!3R zNQrerjujVp(9i|H@iO8D;nDu-GopuK+;#^T-{!Chg?%Ih7uo4a>()KdTcngaAOOo? zA*qHW6F`m^Q6@_Mi4kR{&A#l&IicRjd`6ZDKLj(d9mA_?+q!4Dhh}uO@FK(aIZX0m zA@SLLv$*<`J4^9)6j9i^9X)_ZF=K?7v;&(a`v5h zIb(CDg=wXEz42Ll9h~jC`^Lp?bI7hZ{iX;<&8Y6VE=IS!;SauOGJA!Q&9jydm#^Xv z+dEY|pDmuOrzM#-Q&5MgKLK}kZD_5Be+IE&hKn*OmWCloYs(M8Y%MmH4u|kF_AcnU zDtvnN%jq~AVdHAEV4MfXc@eu5y_F=I31E;`>QgHH`_v^%49``JzHj4%t3!gV6iT!j zBUF|*(01W^fB*uvorgHCWy}<5u#X}oyCqF^fY8>jl1v?wrOG|huMlU3=8i)}U9$lhzs})Y&1(u}jw{Saiz^2|Fkz)ya!QG~&DMUL0GI6ghnd zVsw9G%oH;xpq;J-pXC(bdMS>R$4;%jW{dGk$1?2nuL{>NLu{a321J?}%@@;JED)9z zNc~YK=2;}+X%zP;l=3hRYg}^9$kXdhcF(^qL8cgx#I&}dH&SAsr_6{(wy2}vHcyfn z@oZd0scslA-e=XchRV?}S-3%`X=dZJ{%Kv;wPfJ=M#7WqA2Y1IQ zkv`=}mtk-XYQP=GNd25|kOXP*1zoSNTu5M)fucc=R%mJkD)GnDCVnx+(~+ytQ1O#S z874B^2{9^s>}}?E^zZjzP6Qb&r}nAq#xIT_KA(yr-Z;i{lwt8SPqg?W9E7H@8IR*K z_Ue*bkbFW5TTaA2#CyKrZ51^n8+Pd-MB|$QA=D&~Q)5P|aj&(^MhUyz8;zk|kp;oR zOF&;rr1<;b_&s|m2}_jvTx+*p#d^#kN^)$xvP5f9f$;RIeYdGv??7JO9|P-qgMC2> z#1~evrW%?Z*4AQw%+>#_HZRWAF0S<}MlN3=Wfn!=(ADE*sx~x`vx8Ub4XDKr- zugafMvI3t$usT(jt->5(8P2?rDpT{3Z2VbY_j25{KB=sBYwyPuTLbxldJ07`;G*3I zmUX#IYzZS?6Ck&n7E>f4+>;H(;c`?{B3a4|$(z=bA%--i$rhjR(y=6-udy!;B8Dol z_$E74hbCeDiqKbwBVkRgfC`Q(frE(SM0_)CNnF>6|EgldcV7X9DdTbE8sgJrT)8BJnb-Dser-k9lB^1iJL zR*QBo<+iOWi3sx`{mWrIAlN#Yo;E+F-30JZ38odbyB+XXw5b@;{*n4bD+d-P+lc1y z)ZAz*$16^A-tRjr-|R)U)5LS0IV3(LY{L{`%y z3>Nwo&6-mIzphN_n_5&R%;x6p(fhcT2OMw{Sc<@s>4}q$ILUDVB#I0K(;u~4Rv~ID z0v|_~yadzU%OSl*DZ~1X2|80K$yRmFw5S`@pju)oQvCH67wR)-u9f8x#7pT0(|UXZ zZd-7ufKZq`c;QoLU;fm6BpI;=f#>d;g*C=p=!b|OQiYcy$|Z+Hm@-cZ;Kntp9i)M% zv1=gwjk;81+MoHACy7IuREpNVZL$hFZ_hLS}J#A`MM9s??RmJYj zRW)hS5woa5l?iWYmQ9r_8#TrDFIO#T(%lWR@P`YwEbDiPF1BjL5-wCFY1W_(vG7|; zwfNFo6%`K#DxeqJR{6UzKT&O~{>fbqs8*v%Dr-~l{J|rOR%R$|sof6e466n!qLxBP zS#EIps?fkYOid6W23sc2+U~Z3OV-sKHIVQ&Y|W0Dz20JhrGr^MQaqGv zhhXE`D2`%lkRrSb>mq@otDhnqr`RBsKgyv&kaxxjiNwOJGuSqiD9V&?aaM&PA!xk! zNlTjlV!09Nv{lSYgme-coKA@bgiJG8IYNvu$2bWU=f@9>30;t0UEbIRHm{PDycSw6 znPKguQnb_>SzXd7Bc`mVc`212G=F<9jV`Ad$#uFek>M?|BAZ^1s9kE4+%~&5xb6~9 zo4#1o&$i_jRrpdbn!>;5QJ_SnuwTkgN-!5cd_gb=C7LCYN-p1s-9t59d;yEy4mbCw zT>za>v#5Xy@j_E9`R~dKv5FSQm?r;FKdMwjxjrvfxG!%V#Hket^;eA^+zF=;*BzXK zuDQ{GXbP&Psk;s^E+ z?@zmm)9=?hdC|OYZ9_y30H%6FadHsR>L!@|2^II&)$iS#UEVI*y+I8-rgi;St7Fs% zn$I>+Aqc(mfc?RKK!AAnSD1_E{7%YuLEFw{t6p`zwmAl08c4jR^1*R}-{&Adr7)KHM_ojZ0Um0$LXozW11^0V2F#j1bJ7X#LC{4UM;1dA#nAE?f*NM+ z252C47uN?c=7yh#^dZ7Mx&L6bYgTpOe6R%(BU^6LKWS`(9BlUF;5?KOoQ1TpA?MVw zi8du`rpD*Wwj|Z0KpGRL+Bc9P^FM|53Xs0R@|%OyhK)_XryiuG!cJzq=fV`_weT}2%)ZM)WVEZjm!GbI!Azk*-d(3PKs_+ zP%{_G1)3L2{GDEj-o2HKc4U4O7yTutSvl9<+xHC3zh`a#R>a6pRCxrxt@`WRs%HOp zton~rZN3X)XrJ3@pWxo@z%=rPs~2c4uGJF#@f{$F8@(#H@o`XzTdsMi8C7Y+#Gdv`}eK_MynU|g9E=b6oR=D9uh0s}##aoXKq<-MYM<92_hUb_*#Tc^Y9F!UB+ z1VY0U0A=eDdYu4vy3xA^PslcSAGWLk-IbqX2-yzLgFm~ZmF7f~SpeBk zR;;?~|CKEDU&+pWOEy1y2S)A&;Lqvn8?Nsh!9*5(>}1luYNG+~L2lerL%?wdj5cR5 zXns0<5mgwW07}fDG7;q`N>uSTWT~@EsWmkfk*2{7LkzBdeP64jZO>vKQTKHEUX1@e z==NSo?CbmN)%yMD>X2RWO4jOy;EN2Iq{%18sl7d6zd!~LI(xa1SF(cTthfx7;I~fA zc%J`hcU*#e#PHf^zvC3}jA={Bl2gNvJ_6B6y&s>rYMW|))<*bx7Q#?Xa7mQ|+3IXU z=T0xh(%NRWswA&pTz(klbTgt`w}t;{g#iaT;GK9EeqOW{5kf~2A|= zvDN(BW*dsuw%zQmyPamGlD}Hxdk~d&1*kX@Uc#9 z=y|N@{s(0fzA5W8`5%{!k2~pS96&QeJf-IZ_CzG z5-Fh4DAJjSxaRy!Oq{O^Aicl%?Zugw)+jzhr}G7Lv9mBQ>Tf-K#FB9^0D=un8!2-? z{$s8=xPxGSEwwREYQ0wc&q+Kdnna9~L=1I2-dQ}J7NL#vmgot3tqC60`>FDJ?L3$k z_T(x`bmKQ&g}>ePISAG&0vQ}xHhyt|V5+{+Wo#M#|R1{8B|F;99t~>zO+ZV=%v9Q4kcL9jVjl&!%W zVe5{)kSUXM;%%I5Y&tnCaQ^(GS&=o2znZo9N3$3IXf{x8x9uOzLUOrW{?D3?`nP5k z{yWVg|5uv5{Hxir#{bZ4dS-Utf2G;KzXJAOnqB|jX!acI%R#bFkW~f)eNJkt-tU$I zY!gav%TGwGp&-uQvC?D{Cn_?-h-UxD+;|hm3X|=BHm>Y&74D80I^!ip2*Q)yg*U*o zXx0q%>LejNv)aCSVL#4B8NC=0>d~rfFb7r{{fGfw`P<6(Jbxzw`PM@ z*#6Nht=B)Aojn5U$fne+9$Icwv~EDL#!X80GhSG)(_Oq$S3#F3XBp7$^a-(W;Zg=6 zx4w5HZ!UfUuLnu7?hkorSSu9Q8*}+_fVhpC?}_-Q(Tlvmg3ev|F}w?#Q5`Tt2B2`+ z%Ax;|PEw=<#j#qw?!zQ2U-K_!5zN0DM$%WR9_wEf%&DYQcI>LD*X0o&JI_pIgpO`S zoA$0}I-1{JYEtsEY&H5*_z+Ks?d#lYlvh`pf_0j?Uruo^>)@R+BF@flrA#FHCQn&^ zltWaa<$EvvN%CGvj~-$Amu0JG#)A!?1VTADu!~NK%?{x~C{Lf+aR=cU@Xw)QotsR& zU1vP8=S-_zpYkb|js;-Ltw%#N?|PgCbt+Xuw;j(kZN&Matb#+uTB?`YV;5T$Ly?@% zByGwSqbh~$ELw+ znhL?cPj5hUdX}iU7~UQ8He$_$k-ONi#;Sr@GFmW{XAgDxZz$`W1rmmpj%IJmP&5~5 zzV1OK8jq0H+9QQL=hb8*s@YOD6AHpvD6cdmsGr|I=^+h-m}H>(ooSCXs*bVLSU!J* zC0;>E(}4I_vfp1VwMEY;Y!(nDB`3Tk#K~#oW*Xh*4L2pM$ZQ@-sA<`%*_Akd4qRlzfikc%PS(B6hU{_`X#H|k6yMCAetYT_pxqs#?{oguPc5 zNqzt|O5LtMhp)!u#`8sJiECcBM6D=zHM1SGChRlzT*yjT2>hlu)ZSpG+`;wITk z^2y0Zn6p3Te<&uDAYoEJN)@90jK1E7Zw%+JVQCc2twyN=D24fpSix_^nzEcWxO-E- z9&Euxi~^?nBXaN(Q5&XM0ErY1Hr1WnSzp|4IKM#+x@2_$)#>2Z@LR96P$3Av3W5W{ z3L-$f2B|5;^7gQ_QF1%2)WT*q^~vN^rti)j7c+x-Q)+4f@!VC`spXifg4LvLk_2UG zGz``=TB)kL6wCDH&p<}?)wXWJM6&NQ4b>|$0E*?zr15LqF}zw&L5vA@Q5LRv`k*4@ zmFS`Xc^5b72JqIE(~0GXEur$uW&D9Eor$LmT#@m;=ZK|6@*Xz=5Y5@e@S7uJCS@U- z(fc;-0xA-7sq>(H2w*>zp!*(qKZKD~je6heFuMLSF+3!UU*xd> zXWvg{a8B z#c*Lp#qsYHGztAzpd13FPB48ZAT{7ZQXc5K3CUpuIegRr15;$$u%owx~)jQ89iPjoL8bHF4Ge;394`J#4sIM#jf6K92sBz*eVn`nZ^3z(C56) z@z!Cl!>8X%6XES%ks7SM-}P1&x$k=Gx&=DbF+@n#kX5{ot_KT}=B0R|*7cJ5v~QNr z=@P3wLpbYYZ|hlR#bxOKQgH=AKT?l{0st8J?uz}t)7QyB|Cg~BT3Sl`tw=s4;a|C8 ztDv%mv`j)6e^Lki;2Df1XtES~(@z?*@7FgRUz2tR-y`QN9L>6XX{472}1W#Bk7a>oe>#AMDC^QkB zMyzDus3*|>!`nLsNA|US+Y?M|+qP}nww;M>+nLy$*tTukn%K^~J^$;vpXYj1@3*^Z z?_Otm@9gfRs;m09*LfUk#&@s~7c`~#Mr|Li2Z6|zUIgqG49d;XG4O{mkpROJ-ihMx z;pc62cC3V_d>l~e_<$fzE?(Y{VTmsG&v~FdGDr;!E%HCbqFeUO;hiIrfz6>CmABdD z`EsS<^}`TvIO6i|jj0C;JFx=}cNb!58bG1ca7H{r_XeO_-*oqapk+2e-{=M4O;U?+HFF1Hs1as!09{P;7A2hZfMUV6A zwq04~JGUdsP){{ul!#f&4i>m?mOY#E`oBcFgVdtzm%wt%$_`iRm#&uJ+Pmj!T)e;q zEw8s1ZEeBJd_MQz?!W4RK;AV~t@B)2?=smt+x9rtDvt-5=Qou$q%Wp5#!Cj5l1Wve z+SPulzKrWx{r0b^IFONmhW`=WFs%1DjXD!D`dXTEO)5(ZFEcei$$e>@ZKA)8WiG9~ zRh-l=OYQ=a1(bG7^+(No#TR!ojV-W@&z3pG zz@gEAWFTcdSc8;$jKix|h(Lc%n#zD7r5_X1Yi+fhtvQ$?WP(ZrOZrY@yuX$0!3;DI zNQAMUR3y~Njn6i|NH`)~X$TM*L$O=qS|LX*{6R!CvoPSXHRN!T@{aDIo?Cl$Ew^k`jLL6e! zh+2IjFks1ZP8n2B=8^-qq_35NG&rgp@T7@6ZYVOm(_(Y;+v%`(zDF11SLpSk#|W7@ z-Ifha(t8?FAH?EeWhl7~@4_ugwY;EBeQ@Q4kG_ z??U2KYx&6=CaH)&>i&3CDw>TmgpAXvbj#(c=12OJf_ZI+K^(n1pEl}eXN^{>4z-IC zUabFC_3UKt02qN$Gbq!c&%*veqp8EXH;yQp_};>4HlxguX7*jhfEvZjPRLX9S2w7+-3&8aElTO-zN>6zQK^fCz?R~`8s>Kfsf6% z-Ll{|KmG~g=WP{ysetDUCU-*$%il}+?NBt0boVkE=L^!`=Dz=I8$+bs)z)#;|6

?kIDdpd;zqU-T~2FdPF5qx!U$7m4#!exiNQ83>{7; zm{=S;_OT}TY&I`k_3Xp-u#rnNy9{DzeV5;2eBg;R-jwhFJnqn;Syz9$Cyw!bMwqfv zjZXrwcfwZ@G~XC;j_<>pqdxOm-kY&;I(kx(Qz&QR%mG%;@(VhlMB>I3{ZU#dap8>8 zmK{q}x1f0F$`v^%C!VlzM)CKcQRzKz+aY{%4^r_iODAs?QA?>R$x~zGU{3S5A!rUx z6!QI9Rb=5DQkC(0KCTP!@#i=rJ?QCf$nnSTCk$@()S%yTo(*GK1Os@}?3={gx5L=@ z6~6Qpregwj5lR~l5pgpP6(*gMfKmQz7V+nm+HL+?#h*QBQ4$l(h*Y4FXb`j@l8Au5 zM03Jf^+5K!N;s_McT;#SDMe)_m(UZ-P-M{DmRhcd2RoJ>KqHZlF)*k8@U1CR_v=(! zifIgO3P-*;4@h0Kv~<-=qWiVOd{(ozE|{CiaCcq#$9kADP?JqPOad{3uK(d>78xnkt%Gsw2{TCqA-cqnBT6wtC#^X9b#D~g%e_%npgbLG>R3-JGigPU)va3U zsbj@o3boAC^P^>YEHyHTy1rSZsWIVa@jgjTC9Nteq^W5>hbE0RwCaq7rY4P?(&W04 zsS$W?EfKan;Dgj(IPhiV2mSJr;A(2eB!B z>1k8kaw#Ic)QV7|UaR?ulPrZ%af6gUMMOc<&llBe^ARt~L4`OzF{zS&SAZxpqXA}? z9C_OY-5jlR7SmoxH!*3IKHpoa@=A4%qNTuQYm1tIy7b;Y*{cq`I$`_3Dxuz`hpewwmnox=q+aw1zd z(*=AJPXDXhqeB%n!8hj% z@44~bc!cqx+GAm5=66<>cIKV28JzZBRc$!67amn zZjF;^Al6((O3_MqGOX&TEOwNpb3k%eGF$D;fepyX@;UZ>F7)+yi^n6%e81Y4*!xL; zhs}>JA0>LbIH#^9c5Ky2am5(m137+kMTyrx-~QLR9VSa0;tK%nWNP%^_N|!F-SjW* z1eo06K>FfQX8j|GZ;0MH*xQK^%9WHx$PQXx7qGRy;g~K$SRHYhe96Gj#Q&vLkGwyq zG!c=OzPTr;nDAb&>QRK1oS-1jd_eCgF^OLqIJ$OC{kG15FDV)6~ zFRDDtT#3;iP3JE;oQI}JPbE$)(#w(~|B(pxK75m>=U3zffSpRuC?dy#xZg2YLMbVp{F0yhww<=RMK!-g_WF|WU?HUZya^3%j8(xxzbY}n@&xET z^yS)bdZ?54P$w<2eGX^G7-W$&X)Ucoe-igk5F2y>IVGNrH)b7M?TIp^8C_mU*uh79 z`{u1|$K#6xf;0~fbSnOBeSLcySvq4Nc{u$OQx~Q5q0UKw%mFkg-9Lc=FE5HYvW(q; zSlDgQK4~@1h~LL3roHaZw{9PKaBfh~6ad(?@~58)05)+=V*eX#N(0`T?a3WZC*FD6 z>2&XX+2f>0NrZzfJv=-F9o68jBF#k7%MgMG;eJozw-QS#UG2dyHmT^L&DcxFJa(69 zwGc9xwEPeN_j1Cy+K^G5PV?fQnC5(A>Hs~Fo6RTB>=+9D zvc$zw+XSKufHs{tpcI?zj%r4z!I8sn z23XSWYd5AenR8j0B_^V!mLxP8ZWV=Oq%dg{7P@-49D*~}>}T_z7{|MX=#SPXjg2ba zoTH=DPe}0hmD6C#>5bM-So&qVl@DaBI!A>H#=j^%4ntuCD zroD*U{mZS_qj#bA=cLUm87uI8VokEq0S2AB#kF7F?-NmB$+8%Inc&8d^mN{GXzrMj`b z40%Z69AVjelbNy7ES5J?{nieE?!Z`d&*w&%UkhDofbKvtU_f^um8wHE@@z3qS%PXg z(NYRE8td<)cfc3qHlGC)ZVZ+FAAxQLQQNZD+=?1pMV*NPRWm6usd&+Ju;5R!Ws)(S zNGpB5QaJc*(MZX|m3Nq?sHK9H;vB`n_KrUWJZNG|lNwEKGv@yG2ew^q+XXu8`nULU zgm))u(_hAE&2_aVMT*WVveR;spVwrf;b81rc=895E?Oo*^B36%Ng9sP=%u1a;x;U} z*nTPZPQg(DZCbo&uHJ$`McFV&9$VEW0m!CF0NHfODf|3%|1YvBxcgJ66#0LUO}Lw* z|By|dQ)FCe1j+%@!^57%p{s0e=wsg1GFs}SRn{b|Dw41}EV@+3^L+4axs-suf}*`M7axejGFd9PgEmm^_Hm!OGwP#PHj`J} zN|!iwZkViz&b-24>v`KKLHZ=0dext)d;dy{pQn69BT7K%=|S*9C0 z`$wvX6;-?*XYMAmHX6C%f%`v{6ApFXJ_$Wr5q)q4_*2Jg-MsB_c0XVT#*}*lncjA- z@Cl)-BPa}mjYY3VW*>_qph8#t&bEp*dw>dfH%~%A&ohJ{K)npYupu1j`LuFo6oX?h zwhm0fgmPvUQAwCkfKoeaQXxEPY7Nf$b$KRKx%k5bDCH0S{0Brh&e4f@FYFrHaVSl> zwMEo#EGR`?VR;p|09n`H84YDP9r4s@z2%tNWQ77j3w7}$bwx*p8D)vo{gb{SM5od7qd|Rx z5Pt&TPkz{c)bP#=;Wp!`ooLdwx#gsMH`9fr@?%tL{m5^E>4&M7Boh0|vK47q zL%mue&1_SX)-*&_Wim;zvu&~3f;0en8dK2Kt~&CTZ39cZm~LX#kbA1!q)oJ$Yx=1r z_nvG`Ac>^wXOQA3mJonwo>pB2gq>m7x50!vsI?nWn$ARuS}Zz$V9{I_Eg2m}o=mqF znSaBg7!hft!GqYSg+D%pqB)N7&qp)RjS7TGrKsub4DI1AoadPaOuu_*lBg{9>3xsWM z8ShAv?b_C|Nt>>-&fGC4*gP9@=KA|G1>&q{?Ps?am>^X&zDlu7{T35Sw4n-157MAZD=!=L>4lv9=Xm4hob-5oF1 zEJgO3D-+$BcD|{a`f(&mZz5g=8o)f!)sOm8%T~_1+w?6^E#Im}%Rdt;Ac2eaEaiOf zUQ6wVK5w5V6>evyuoa<^iyawI9nV~GZ|tZ<#haM^ekVBLIJ@ zRB{{RQNsHPz@O5LEuk$%0QeIQJpg~wTm|4ysKfyL$q0ZyrNH#|7uo~xC-QhJ0}0S7 zsuZ*#3>>`Aa^T{rk(*IfQW9BDRr3*I1q@(3eXSn>;&E&=A)f;F10JuyaA9IGRQ`L6 z`BWMCh`CeH_}@t?m4OU{jFFHM%Yy67T2L8SE-5m`y@h_1sPy&2PCH1v6haMpD)Z|n zt{mux_JbfV%{^RH*_Y9RqP`T^*M98Q-UwuU+rx7PV>%VrD-l+yncGHXq z>&5?(I9k<~8x3H-eQTHdZ%Z6Z?&g5|@c&L6-YU2F4~VV-(l}{`5W?AG&?aF5WNZxD zUfOg?;e)Jo+4Zsy%N0xEqVs` zgl@^dzqv~g?dZ!KHy_|4#A>{!Igyi8^Xm$pkizEmVCRIdJx2%CpA&jY%-pHi0$eZuVBYrIC1sdw%oCDnOzYlg44lyx^j^ND(V}W7ZyzhM? zbLtKEHqxY9g&;Z9z^%8(15Sgizqh@TIS%IQbEo#Ib4LV0VgmYmFaGl43NM`VaU>k9 z?(5dx7h&#Xk5ChgPsR*Fs^8n6=9nk%DR~NJ3weMRWCT9zG{gn#`!sUp1!ndYVl7P= zJCWDjPsCSuKFs>1-aR>a`7zs3&>Ot$HLCE`+pha9xDp$03-CT7rlRf0tnBPQgUTIv zpM6+EaYPLaG4nrTnOt9Yr1oa_;TJNlqVL>l!um82=CF{HoUl2k4+H~y*4z*Hg?6q2 z>8J)BO7um_^>-x4ymt_4NA8kdyYGnUTtNCs z^n-rE%O3*BJGyUprzlYz?j$+--;8l;&e>O7;y4hKkkJN`n7?zn82cHRKz$k_Z(@h{bwcS&RYqBILpP(R@5( z75yL=_h|-VXQ!#Qzf@^I7AoD;RrI7(WFw;^uenSL5WQ-`sz242#@XxA0{X$-YlSml zp32=y+{r|Sd+c?{%dtIJt}wf9b+22cnCR`oPRgpTj7onvmhuG;fl$MyB;s}0%@fqp zx0Rw$kB9+RwYQgzv~TI?e`=Xt`(SQG%K}&P;W4Wi)Ol{JgwQraHb~7U+Pe}88OZzo zOzt(Hf0b^2PV7>}qY0tFNi_|Bp&6S7B#uXWg}7b@e+u!|;G}%J8Z_3#M$QELavTV? zmD#5Y%qkG9*dMA6)9U#Gc)dUcRMWN)^^3$!#sySLg)*bkEOOJOe-^HWb;Ub-{UJ&t zHvM(qYBOMcYFwo_6TU4O{y3P)iAH=Z8P=_mx(udB?Q@5e1&52qN_Lg<7A@Ovl)T0) zK!GPZ0U9(Gtkn`@ou8trXVmdj}potrU}L9_#uT@DY+;Rp7*nFEhuwto{2fhMqiH) z2j?4ZT>~cuTh;w7IrP_y0`$f)&mqoo@5;*qkQ^id4#P#u_6_9jW#Y~!X}GKjFh>z* zcP$sYaIAKEB? zMxy-y|46S73?K&{fgvBCX#bbYfMrXqF78FT=&*;?p*$G#N`GWfJ|rRFxDtYYZ)8a$ z7?K5`Xluamkp#Nr(cojNFg`W~N{z^PkYH5efrLpQx^$p9-Q!Nb8Q_QJ5^$L`-DFxp)2eR5?B{LvThT)6=SPWiL6(PM#?gO zEXyJ9jE;!1Zw+QoIQ%X>KcNw%d9~c!z(N0T9(pE;XX1}}A?6F+l*g}lKhwc@&?AKL z>`{!&CZya1=u+90{J!!0im8PNAYl^{624)dPYS#JSZjV^q{yov==Bjb;OuthykQe-1yL%j}#9YtQx53qXpqZ)%@+FHB8>Cegk?aOmVb2Z{pexO^r~ zr&wnRv1d_~2xL=$Eukpm$z%gqLQo`Rkcht$g0Xr=QD)J zswhq7IVmn!#`6$T2ZU)CZ%Owsh~R>IX+!KgP*=W>+86Dy?e6Y9{h6=3W0&F`f6;P0 zpH`@*kGDRYt3vta{)M&d&mfr*$c%>~h&9ca(-X@3B~~W>>RsVxh^7et>R~D$a8i@6 z;Kz}ugV&^tw`M8}M#>}LsBjCESRoKDjeZB~@CZSVLusGz=`9=FI=vqUq6YIcf_Jv* z?DZ-Itu}(FPB6L9lJ?UoWbUQp_)%3&im>{}%Vl?|-`i)?xdFyAgI<4lJIG8#d1Grv zjU2k;67KzugK?a9<-lmpeFZ&aDGV8IH54N8qVPj?N8zgL*3a|qcs;G&v~FlPO_y0> zYMgwNz4wXu!J%-;^o(=)Z1FHTH%y7P`oitavZe&C`1&?x)x@13ER|}BVy43#RXH81 zqGl80GAdItYv~Y_avK`eHVaeR{P^U{-bz|DC6R_YjiW>)9pIvGrpAC78Vc*o z@01p68owM(q3D2=M(SS&lgG74kcsI6*EE3HSmQ#L&?X2{g!Hh9k;oc~8VSTg32HnO z2uCM0O(5MDA~uwC>BEA^6z@;e3j6~c*a#trE9k61 zF&Lj{1WX#-BG#Ws1sK^y`|n!5tO;z=Rz`Pjsk2vp#VLkolh8jcA#5Z0jOn9D+u0S_ zMWS|oVjEk&o@-(Tek|oK!p*zcjzjcA$|5$mNV$b=Xb)BNURJF~bzN3vY_wli-F?TY zMGcGx6ptF4^OcPjKU36-k7{R$TIr||GKd1nh#Eye_jbjJ`a6L0-SO+YRJ*n$)+6<} ztZme=qqkf^nJLG=ktb&)^W}#tJqGJ!94nbkVQU?Q7C=^5^VwpjZZu-?RZXf( zfqMummPpm7uq@fDqU&?=N4kk{o~&(`<CUJ$i@QDiWowtaq+ICz3bK1dhyHV@N z{ihY2p7EtlKgMt;-*5+3svCUZ4>;JDWYQrq`tXYEoewXJ%nGE|@YD*x%;X|<0fJQcE2 z#7?U*vlvOug%DJjh%{3dhA}{={NfNtW^dd5n`L&cQ|`jr(3_=AaQ4Ll3;zk9c+it| zo$s1EYnJ8D>7`b+Ascj6irQ;1AH+h9?;Wty15M>PW=U|um_Lh5k@`6oA_AS0JnogWaha$UU20Lr(vO9ZhFO1e`b3f zI!*eNuD;Zt`-HFr3reY-M)+9xb;&=IF`N~7nAgvLj_6i?ymZ<%!U#h>d9c8Csp|A{ zAue2Cm@9F!9mH)Xi(ep?z`PAz;mVxjePKQJTx2F8Mg^Ar@IKuVXWoR5Ot*Dp(YpV-cejl7#tg%g z`RG8OF{Ss*aJ2jt4qFB3WZn=jju`5N)jn~C!?5qq84J$_3`?pON88zfpcZ)Po$Iy0 zc@W32y{=1>v*aHwEBNgKLV&xY1KdjTp6}R@>5oY(LG zg6`6nT!|qanoOh^%yL#(oVRQIfy7R1;QLDlwxi+q)oO3dTTE?w^IDi%6u#Ep%^1Va zlnXf<{L?X=J)>1@9W4-7c(tGImR=a3jF}$!4`b$No5I!(d6v61fuxg^iVp5GDT0tP z5}hx0dvmtY( z6;Vm3Cc&%IwIh5gQ23bBt!%TeJTbs!YC%9q&6*iRGr>R3Rbr=U%Q!W<5RP}z+RoL1 z^UZ+y%70v3x8uz&&P_UyN4mhjmltw)jV8`b$n9IPeuagPm@%v%EwakAV`3O;G0p6v z_qw>Va_4M(#%O%9BNz6n9hr>UJDG^fw(&=NUJ$RUTf+{&_TIgu9g!@|K&~3JU$dEM z>rj$qJKMCW-%se*sYqhI8Owp6WaLvHNsmIj+6*rZ>YC)vb*~no>$&l!|AFPfgQ*cT zHnrQjZJMheC&#S4MIyMBBIpA;4Uz*^Z9=w}*@ST+jY+wbgiPF5`Bq{}=G4*N`O-wk z_rlhlu?i#P!(>)OxDS)Uj9WKI)=yo143ha(rt?AB#5TSU#Beo-9I+aY!}@3Si_PT z3&2)z1L&qCwu%4-2GvUnD;CKaK;#*z%FJ2s%R`n!UibI$ZSlqUJ~2%CGaJT}7m@Aj zY6#>0XtLchONsrm$fY)icq0g;5U4oQr8{rYq21;NRC64O>4fmm*sxV^2)2(J8(@$7 zvxX_xO|>ityzM!md6T`>e(SsqkB0!V`QSif7?#OL0&H08n*UwZ_6V2)gBtM+Oq0cLLQ`n@!rg4NIHgrl3&RdDx;P*sXQ%tl_F2NZ zS;8c2F_X>4LkcOcP)=^eFw!O%M!$iR`}a*L2G_q+gv?DSg!e%!Ky{?%BLI4kPyjth zXX&33;J+oHe`muja8uI?Z#Rwo-iu>+gj!9s#l zLX5^!NHB~lBFrRHsM!e=_``I2`8l9a=N25A7p?a7d^$Qla2uI>aaeJeCeg!v+)5MM zsE^kw-vsa{E`XCj3UC+Mt zGmD4y>0Pj8JgO_pmV;~E&Ye&~?3CB#h_w#R^{9?;0K*Jws+ zL@c;Ba?%Z*X}Z0f>9?ZL^TQ+1io z@+x9?sXVZ0~jbup%qpWl7$Hg#gDb2eDq*QO=fl43KN{%kQ~2-2p@0y2c2y0;^D^d&gDOe zh#Sj0kMhpVts>(($~&_>iGc4QkHY%J3h6&&f;ekSqQnc%UrO)K>;7_h#gr@@ULpB5 zx;qBqt3*Bq(rlaet^rc8C%z?wC%U{X1SU%0#7TJX))8!Kwb)9gb^xW!x`&g@FzRH;$~dGOZ?2P!#aK>E^xI7Q8xp6)N>G^r$O z(_S9!(_sO zuzLW{AS?{=x5^Lk_bgTe3v@JgcI3>0`ujTQvcc@D0b~P!s~w`#f+n9Agxr*HNHVLB zPG*@@#(O21R9dVCy!;d<=Idl!Ux-G<1@*?lawT}7!h!%56dfpp2pk84sF}HhiU-!~%2QZE{Nzp=C*(i=}E+0^E zaaO?{?~7Bxy_Ui~df&LLdb71zSL3_B8+Prg^QIzYqtdtOx1y@1TF42d9&HqNX-acd zPib>RroiS}3ay7cpCh);RN06I<1D07Z|hEkHO;n4m9|t4QrUVff94#E{k1)3W5>GF zG5X5B6H=rLn~Gx@_xq0Mvbr*OzZ&St>JY)6n&c<6` zwV}+P)@9MvPPt9<_pi(Cl6g2TEb3+>FWVMOSTBHb6v7ACab()khTZhyLzdgJ=cbf{a%(&_Y^rH% zwS7U>YbhH&xmRisp(#SW&OFImN`_3^GOARJ-NG%?AAU zakg6|j@$X}2UDB7Kf8(7$kICuN1y3kwijV>+Sx?dIix$}pM7f)2hpKjV@pFfjdW`_ z7ZcKrk@O0}gHYGxg+=o%iDwoLhO8ew-({7jEaT3@xo@9)AzwiN9d>%@VZTA;gXtSk zD##jb+(j59Rr_K0NdryZT$>S}8OPWpt~xtct^jRy7p`?DFpT|jUwW;8mb*aV-1G30 zyIU+0=C|XaB8SLVy7I@~ZtR>gPmy=O|Em|c@-qTGN;79^-U<2+?>(Woolg^ z^D{cR4R5Hhm|XkdGW_fNb4EHIdg=AxaE|RC2r4`|>C!=SC>>&$THSZ)=bA!uB2QA> zjEm%u)#xp(Yy5gfo^iY#D|oauzILzqmrH@#VtVe%ufPP$l)huS`#@p$?-a)UBV)GuL$%45NRIe^V?T;rOMPsYmyzox8@%_{E<+7%Jt!wC*Y4 zU{9OV^uEwvA-(`v0zN|#KW0!V8UFI#eL~Adw+sE650>e-jC!x>63*l}N3dyxI!64` zHE6h&pW`K>h1pO6F=sq>xuWB%LZG)bcQUOKgB7`P*-8)!IO z7;q!dT^O2a;*c>k6h*N(wNH*Q5$9dY?5E+2*jE^onMiMnyZ4B6H4p|55GLG{>%pye zyx84J_~Y~a6($S-gb5F4$ke%^OBFa@ii!g8ARR9?AHUM&^y*(6G-|89nytjBGxuV} zWHOFnyfe+^y=&P=5{xQMz|e{dNCM=3^N>C0CO~f-3SL zImP~ZQD(_-+|!^xV=;dl#mxW5E+vggQXKVceq$&8WeSfau%#~@gt^{)H)PG{t{u8Ajmu^!^C`L`3+kv#WAl9&IK4C3 z-C1TkYiyTX>GK;4!axJexGk(rT~nNMlveUWxA2CK)Z1`TT9MUYZf)tFJDooID)WFt zx}%c^Jz#f4MSj)(4YEZCXoW>z_jdezaY;s!&of&YbO>_Vv;ImM7c%6Q=pmq^O2Y&B`&pv(9YLT zDRPEn)WgU8BmFEKAFVCQsF_WdS(0~}fpKq0U4-5m`8uG#&x8j%iOpFO8%+{dS80Uk zEP(DTKy+SMcV1Y!s48{?;uE-e(l~@aTMAok-M~5sGqXP-Wz9KDB1(2oaKeUbyKtz) zKHHQHw`I;q`DKzRGq%T~u4}>2%RK6`3vT0Gy{?Vca~~{oIQC^FA&Th3F@8mJ-bVJh z91%<(aah@MAg~6jiiz;jM-(kO62-7Qu9(6v{w#^ZiYol6n5hGp?Ja@neUpgt=mlxUfVpCuCr-CJtHxqx3DAK>23Ac_U zbH5zO0t+Kae*2W}YebMN`-JamM3XG1{E7^UB!Pp3<4WXc#*(DD2#aNT5*EiYVL9^% z+eQnB0Yc~EZRxaj^aR7^wz&zewa8YLS2Rbj=mVR8!pwjKJju>*ucS$0X&eK4J)SsK zL_K%%#AnkMZajYSq!(*aYyB}n`5k(V#ZX6t-em%KycEM;+S>&L4tMH5MSo4vng17m z0yk!ht3ST(Xlp5k(B?qXGY|*13m>yNa}>|4PRw7?pG|2$PK-*LF*oY*fA|wLWJ6R1 zY3exB!0T#Ev@sGjwASkY(gc?I`Pl5n2ViWphp9E^0zM<Zpz{4<_XkGzBv z4hq&Huw)j>bU;P?UAo9fKkx5`+STr~%jg+wM{GC2wJnCDpD>n{z^d^lG&U+kQ`MMyN7rBDg4w!O)8=Cwz_@TUb1m8>2QV(^tK25GYV@f4 zb`@6BUeqro@q4{tDE#-}eR!WBa z(JnvSkqD;{@;MKHWShBp&Ek>SB;qVhbz3KzexJ+w8&U2Mu5nm0AI`mv}d z5tjsI87&zj9hIkUzogLEh*?&Em4Zf}`N+5otkh;B5mG-lZn|OP&SLY|9>@f;5i=m4 z61`^6&b44X_6)!rF&O2;>Ds zhbYQQd)ih9G#0HeVJCbvj)_ToRt=jrrme8y5*{>drUv`20OWzxZnVSMjrJ>M`t$v| z%4~tqwwb1M&TMtf*+r-w?J6%N*yyJj^wy1EXf^CyO-R7n-MKR>Z zHUZp$u`mF4pcbgL%T}Iht=gFdX64p$0+&XGb0fm??|wljLt1d_U<9?X&_E zJ*iP${T`fIB6WZ|FyFSR&ajZRDn(N-bxN=wVEMA5-zQkAz%Jgk^eO*r1kacKWDIV; zrvc6XWP!$9T#NK-5?h3q)kT6*=^&|zsR{ptpmMGUm;;weGTm{9%)NwTxjCyDw=R;C z)sniQp205~EgXJH&JY_1Cx>Xknp*1q0>UN2CHkIEmC)ziBLXEz391EI9^?=Gw*W5> z$ZKj4LWIDjh!FTK0C+~5Q`r4IbUFA`$8KjfGOk^zF{hBJXbFoo#DX@|jMcI@gb%H% zkYRwxdk7|abQQ}GkrM=&!brv1cdwV^$H;EY7X@sTR{ zE}R>XCScS4vv7u90^-eC2s@I`i$S~rSt}(Dm!F+Lic;=-ywdPM#`Ng|`U_}!4g0sk z2Ed1swapbmS8e{}$STsy!7_-v)3jAU=J$LkMl)bXHxMSvv4)y!Gkd6r`AyGW?MtV> zP1?iw%YW&8`w)LBzJ{hk&j|GouUCG$%XU-s-Sk8*dDYXaB!+9J+4b8z zw{}bAyU^zcuWr<}h43VrUVxaUDm~vq*--J$GSkP`2vi9te3YGK+O7EMNv$_Ez83jy z{lxYEkT$%-QypO47xP;ybbYHH7)dh)p=s&v;krHvSvj&bKEmm%W%Ya9oPn;%6rR8h zcXaB;npnfvZM^_k8~7rZ0oI25X;rtulRqH;E1y==&VacH$jvK&-2C6;9%N$w$B}RQ zH!}a1d$2c_*u^8e|0}hwyr4!u`(t>z zfY3a3FTCN^WwM?}=6;N0^lmP|$?vq&Z+)VuiF*uOavZJ3c)6NAjT;ZXP%lkfa?%?w zw&<}3-yCgSj5nuF+=6|P3I00I_W7p9_29gE!?uA(GPFw&W5`QpUrjIPG@3#C zI#{6o!jvZZ-3F9`^JC9vjNuU8&~AJ<$vMjeNAMY3aac^!4_FoZ9%VeX-ni+N?%sX+ z4#->)=SY#mL~mrUUD-UBua0iU9WP6`D~xA}vU@RzXLQ#ho&^F#ZU8xPrndRODcyH^b8UVwMZ4Y?;)i<@9Jo>q zTTg>{$&(ELG^ecH{ydvGZ?HGP$LfAdoUipr+l6E*P_^)lSWBO$iB$9HU?Tr!-@@C*fp)RY* zgU2wJ-_LAlq1F>MNj44eSN761iY?!`9Y9~^JGE&H*hLE2$HvW85(ha~B{g}{%4uZ6FxuLVsHTzsDt13R$X zzal~bfQaxu&iWM@D&pMUPhX=7w)@8dDnIW|mEV?Os(RH#O3%RV!mw@25j!AN&%HUm zo*9VEhOX7NcE)PkMdmu~uhazQWlaUy(43l8@t*8yEUoUBXc~(qgfv&PE%#x2Z98+j zYX=z+U|jV_r<%f67@iJD&2U<*vdSfd!zmH(eA@_UXf|UczE*4{*6#<-t|4P+cj{l_Ut;PS5s{5|V;4ew4z5hwo34m1nIB zc2?90NY$BUzM#-z-^a%;j+w`~rXj7T`>z4Zfmw24o}ebJL<1&tZ%Hj&{wVxS)!0Ly zhu|Hs_uF|1Jiq>xs!Ia?rfN%p-gvU4Fd&(H-zeQ)IM}BUPMP!xY(-h69a}eG`LC*7 zw19C4S4Sqar$WRqNmrKX<0XWItjci(6@XR$d?je3W<^TsOv4xV?a7W0b3sO{$Q-@e zE!Oo$(y&l~&G`Q#?k$7rS`&5M;O_43?h@Q3xVyW%JHcIp1cDRX-3bsRxVr{-mykQi z>ebzQpFXEf)vdcP#hCMBV83QjFV8E-^T+>cA{3ZvYW=H;uvk{R{vS<*NUqXIKoj9n z5}`J!UBjC8<{r>QNb_R{yAZxpA}MnIka3x3o|o zk@KxqKQRR}?N6*KQjSIA*mjT-C`Qu!k3xTD6v?O!_?mt+}Abikp~MZMnmHrbE+_@l)Y5f1zO}v z<*sBr8AJ?{sEx1|q}(G?`O6+Maj8_}f2RsI}lp|@83 zWTbz!>SxsdU$p9vytV3&g)Cy#F~I+~R{bELRsZKdTJ;;O2h|rXCnsGQO8o!GYW9E1 zYSKTlI@?FMUInhI>etbmtj_kSfC-YNiv03}!<|D3kkyrLUl+}37PV;^K!%GOP57(V zYs(muRBgg|0v_R29GXj^6&DXK6>V?NJWOF27ef(_i)Ng1IucHGzmv74N1Tb5&eR3P z6t`c3)oGmQ&iD+Bb9BY_kewRiT@r?KPY0Gxsx#Woey?b%5k~nQTLe5#TD6FIh7-5o zda2bcN&V)K{50Hy{JRdE43kHfN{v1=)(v{Ek(ifZwk(fDCISF!xU)s#tJhiz|4Z ztHwXPro#w7bWXy$aDGT~8jL#6P1*Q>P4VkMVEdOHNFD9Z%Cj>q2eRpnxw9OuqL)^U zAX>aSO2}7-R7Cu83{tA~7Im8u;~j01Wk5MMmZ@-7p_96nElHaM@Y{{z12p`BtEc|6`TAjwG#K<@A)YMmZc5jawsr1&Xo;1s<%-f!3Uy zP&gflrQf5o(5U9=*!xiLxxuhl^-7?VU+b-tUn;V!Ga_WR#6Bgs1f%qBhA{N$W&wG5 zydF99Zie1e(Sq)54p*t0-A&r^!)a0ndl%^)S!v4fHfGX%vi-IjdhRI#&)IHElxw|; zvNqEb>8e4^O#WUjC4YPjit>XMM@ms@E~IOOYeb4~nHc2tFI1Y_LS)Oz5=2nOw?k10 zWbphrtT=H>4ms%88{m%J9{koVoi z$-%X^xbPGE`Y!F|B>yI*<2)pnpS*pTWNz>b_6?4Q8O#lMd!N3afF5p#sdGBAyZH~$ z(Gj4ve<_0#BwFB>1G3*;%iQo=WF<{nY7`9jQ^OqiNM`&LRgr`g=8+m{=j!!nAT)n} zA@Tv*$Q$Lo{% zI|-uH45KBhx5oZYHl2Z8_fjQfNY_0vf&{ttOeEk5^`)j;YZ zZVVwA93&gw0tJIjG}Es2cQNC@i&AxWnZ#8~Iv1;)=4{|2Le53n7AVVCSv=!K89Za% zK!gm>Dr&L)%&BV5vhLNEr&eG7^q0Ywwfn9}uHi_o->D9+$=#TuT`3j5a%wj&cO$IF z9X5J%ymbDAT$vU_!jtxM?HX8>Gj5}0OtTXk-x?ndeEQ3BRR+Qv`(sp$2^JCwU_mv;>-!`8bqDqe!>!1xsV-#?t*Og&(7uIf;zYIBHhC z{dv~U;h4Uy42}S${x+}9ts7YS)ZuCGk@tT3Vx-j@v^h>y+HU)zSFQy)E%2(Wq2&HX z`me&8U^QH62oTm(p8sP&ng;;VJbwXcy|+q4zudA%B=0te_8!!J-`=rV4ry%Pa3RjO zEM~JVCCazP$bV!pH_}c*eKpsVCp&Zn;XkbMN+tnOOt;|pfUm8K>MmIvOzi2D5)ull`;TA1S+CbYIld^J44L zi78!t)r#caZ#LeF3RF8s>#1edX_8J@vZ2b(Vf>i$2{8)aOX~!SxvI z`)hvzX@&m^q~qRzv`XpL&W^(ykS2Nq(qMmpbn|4-`!^un_J0P_lK&Y<`x(ChX};+H z2Bdf1fb`J+0;F4`&;J1FlD~m8&c6X^hyMVicc2`a{Z4c0SJ+1&dH9grN0->40)Z(y z1Qfh$r%e7WPo1x}I_%3|kv&PjgW z+RF3(7D3Y&5MFoOSP2D9yC=hUh+slGD=R+MviFE>)xMJydYKq6wJzT&wP5wL`e(q0 zLfXLlV&Z&Fw{|iXV{1ZrLXIUWq0n#Dd3g=PhC@lbx zuK$lfdM$|R4M?AHtYGGb(K-%jIBl?<=6UhBY);s=b;i34MFkz=v9H6 zD55pY58uCP^&ir?xIWAOB}DcrISG)?JAicFv2r8m{7v8MkLQnxk!~iUC82-10W`Hx zlUMcs@-u4WeDJo@c)0; zK0>aBvAtl_(Ayl{Y2z>V^R{39ztkPw=Xf%1=iFMoA)IfI0 z^*R31&Q86wVy$UoA&?k@;zQ+<$k>j_65JuFTkM%}*4EDS4y<13kf7&BV$!Y?$AP?S zbb8szR#l})n>})R+2#00%JHtc>$Bp^2A#E<1^RD;beQ+mS=LY?Sv8rH1dH3vGtcsw zvjWOq$-QfuAMga9ja_Ty@t9k2eMPgyG>N5JoQl(#|Y46Wex3+qLvr@==+? zHWD5#Gf$}Aof{YvfEoJRF!8T(`}}-C+oJm;dF`%*xHkK(?ELO39b{(H!yA8S70b=q zYhaL0?QM{59q(+0Dl5wj z!Ddc22V5V9nopDR^LzYaYY2&##e=BB(Wzb{C!$=$b~Lih*SL#p`mqLqGcj0*pf?>R zt}K~8TPx-LMb_Ie@kTNIW)jt^e1}t{JCNa8b4y`pIxLlQaoKRN*s&1c&s5XKDxQ-7 zf4;Y@rO~y>kQ=fCrs)Lg0aeYUZR-Gt=0#(l^8UL!aa;T7oR;3=TC!KS-F)b7{9U&+ zcAc3{%g|n~&`Ztbn$0YU@()rz8wn5vq!4&3h2Mi&s5o@!q?EgtD5d>cxtc|3Dff`_ zjDf+rYfIG+>jD1U-q%=1LhM$+Snihexeau;Z)uT08s`Z(ut@juZ|QtHuHvLCx2q*4 zKCKBzXR-r7n5=YyH|dNanJ{pFuco^EVQ9xn=_eqa5#FRTZJaqfjTkD?1=ZiuIpuHZ zO!2pL9{wYp`AU|cR~8O-&^Rj?g_D-3Sz+DEpNZ-aMR;w=nmiY|0dwXBWS?=aJmW{2rL=|l!K{M8 zuJNO&61r8Tlvoty#Hs{N+tE~;$zgZ7{K3E*)(6y_C(TT;o8!nDlag2KvQU}i&E&^t zEr3J20n)kKAdVcDV_eKpHBqedTos=#@mm`b3Vw9rw`Ei{C&k2XB)!6tsOOausBq7D z9=LB8K%}kyjY!M>ABeQZ|4O7e|3ReH|9>aaO#d&5boS#Lk!Gs?i%4fb{)iFsHu--&c4oSu?@fe6(#w&qlP!Z{%>YZuZccDRJ4W&>nl*ms|Pu zwBVvtt&(=Jcdyt%&NzRbYOr2v1NYwHc6Va^74ca$oTXcSyjv{|eJsYFARqS3hGZG5 z(tgRK^3e0;+j2eA&#}UQR^*Tkn9s}>1?-=9D_+i|Z!1Hccq7h@1r{-h%SG0o&T?)! zNuTvj&%9L1a(y^T>qu-wHh<4s_0(#UC~pIzxtNx-3L{?@P}1eNW;-$@r2DaSjf|e0 zRhao1>n+;lu*Myb5$m2ixD_MuvF#93Ob)tV)ks+N!Ni(69z(R0SkRCpD!tZQAh)Mh z8N76~pxhWNXNu%e=2bHA9zz*!1BJ~n&=S$(zH{M1_O=DE@w{k@%fLJTzuN++m2Q&FUzF4#&ZFpm+X9$}a$p9w z01hI*OT>_qusZ!tq0E;gX~MCRuK6=-hiixd7Zhpjf6M|Srn;p=f{JWOY+|H36RekI zL(H()I3`iZX;(KDtXJ-Y!!Xwu_+d`R6EZW!1oOtbAptuX@l2p?vG5AH+&d72~8IEDcTv&!fPE zefq=FTD0}JEMv>nc(r$}o81aW=4c5RTpHUP6IeAydvQrz)PPO9&@{ERw@o|a`E(|z zhS0h34pC|iJKIIefiknSbTgL(=D?Jaj(i-Q6xVx-qQ-otzF#o!8ML3Qrmw$alZfZ4 zi)v}#S_y?qg-f-T$e1#3FeS1ozy{5G9T9K79n`(7i7ihn6v0LIq)8KK|GGnBITre0 z9cm+F4qa_9)rS807|_#h${JDgDXL)&#)ZYml~7X^l$CdrL-~#P=9;11z-oY&2^l@9 zgAu6s82z$lgNR7`i}_j?pr0+?==2aEsc%nF!CCB%g^;hCP=n{;sbQz1-X)j!iQeaB z^=RR(-e`5=5c;7im`v`UG*V2e+~E4$;&_=|Bn|6{EM{=X($m$Oe>AgL1_zc3mayTY z9maYhR7_Op=`he7Zz8K=x57Cyj%A*Kv2BnWJo4U3d<=D*e0KxZ(uC+ zKyF^@ssf)}>sURPZX|Q*k4UHX!=5y6^1gsz`|VmNvt0>I0Ft_jt-o&O!;;B2r4?@w zzw<;tt{@s_~{6X3m=^iWoUx5K6hL+2MEJJ#h;aVq%Vja-r-%Eo?|iCY)n7 z50Y^iu%GY;!Hs7s@%_R?L?)@omlbaw!+A14PuBUKJS;&d$vCkFrLYpt-+Tr23sOk1 zfP^%>i4264lItQ8Nl!)hZ_V7+*InL}_P}98PHt-;39D=%8H89&7(QR9KDco=3wiIu zvwRuD^3?d@7K=?oFufWhdBeT=xr_G_lJ9b`??}$|YQpP#`d78;g{Xir{YLZ89+l-C zGgtdc<$m7iVFcAn?R@w0^9(j40^P#4m#0nKyA81P zcbj8VUBLV2Uy3}t89Shn7(9qaemq*!TLds~cWA79d!*KG2iqBcul64V^#LPx&m_=m zq^$Hm)oaAg`B&Q4KxIV=HJ~KwoLNC*n8C3LKJ+8GTOXz{7QDW!P}5zLY81cWoOY6I z5{&I>cy~@BeTCo*f0*vv-VJg+8-MrV+2P?K;qB4xIRlcsSBKP^W5A z)~GEemF+Jc^ZwVsjOYQrPY+til4E=R)L(x;_9Uw|RH$sY-pAdwdHtT9;4aU@Id}iP zCn+oFwamdAMgjxH_nEwxRHvU8)A%lit(PF{D%`M7$r0i%>9v1Szs2QTIz|-jQI5WHX#%YeLoSF4|`;Ubth?v>BhK}r^1NB*w28)E6h-PI6Gy0=WmX-tOTXG%V~xt5=LgUQ)2JY7Uo zI05))_2Q@@5-OiyQc!#H$5GD|K6*dI;o2vHJE58?7*A5e5cag4J-UVmd7`clzYG)Q ztBhmS=V_w;V>2BVGQWM(KV!Gp74PMcN`*zR0n7vk@5&NznZH0MM>=iX4#!SUuqx7x zF}|vB-tG*jpsr4^-kD#iHx4`kCx{Phr$(y@kssTJRUiZd!9KTfFVI{}$GIkX9Fe*m5gg;kMqeNPc5QK)(ZIuY?Xwc0bL{D6 zJP&u8Z7Zxx7Iq+B9Srbck>JbZ<*Fq8jQ*J&X-ss~!KkW<))bs_y2?_#wGJ!gRjamtLG=*AzgH$OHa-&nwCn}XmafD6zWOKt`K;VI3 zs@?{vef{vE9xC8v71oE;YLRBKhv@MTECn2>D%x(=yM)-h6m6cYN8OP#uN$w&#I zy`AE7$%x~iyqyey=hs2bC%uU_;agJ6Pq#eu%Fq*(fYS-`M^qzD3HBMjSD{?lKBaCVnTM#K!>c8 z98M&}1qVVpL4Z9+xk3nqltIBEYUUA=(}HV=67mK^I)T;ne}xyF-b8M}=K&{$lJYu0 z_+TntNQqc91)_KFAn{5_t|buzR}wEN2dncnkgN$5)6B9^Ax!_t^nd##@f5lmoT^ye zhPV0-BHvGxY=ET{eP~k337&O;ghZ+m5K-nqga?StbYy$h2~)&qX~l}<#Fm5oT_wSJRC%d=V( zmj3W1UYu>kCKXe+@g(ryluW%DE&Y+LKE$dnepBB1O<~oQC4aEH{w?X*Ang_1_T6m- z1cEcGj;lE+`==tr6SfHCngYFPq0m4Ise%_mDSXN!EB* zcvr!wTC&P{#_h*us7KS$-FISsiw5s20yt{sqnX64B=u96bvhSq(V1fgH5l5M%IRhy zkh<4^BG--F@a2Br(CZX)zJ>x~n>#Q411O~|`V(X3wCJ~LMb}o3frQ_3A?^@V#5as2otB+sR+K}N2 zs-l6<8(W>x&Zk{}`5DZZuEe5Zom7#ShkPJ{4I5PD2pniJlc4G%K8k!P*K|d`aMXnY zLDF|az8Ezn0Ou3WM?T<9MLwc{uZ|FsW z8c0y3)x7WvT*8B3M1)X{WiY)-AbRTzT-rtI;K6Cm2j84M_aHwCVVPT=(C1%?z=2dY zOo|A>(KR6J1LfnaFsxOSqh#Mdi_c419t4%fPcE)i-^{uCg#sKhEQ~PX2pR!AA6%qA zKLRxZ0a>3g0}TQRkGO-6m1+c!JzqFKNeFJMk%d7?HLV-r4A2)aExA|T^<+sb8KIMCi zz=MA$oM~#$+u<>@*%gmLqM&HOa;dt3nvsl-Ku;|^@95wwZ%Q&zDK8=&!Q4vIY30u~ ztts_b{E#&@7u64*sOH&@+POw zAC`G+N3M;dkV}etU!5=%*&7u(Vykof_TT5{C^U@pO zpi@oQkRBUbsex2Es;2Q_!x62(J zA|N;0Vv9pc`&0EB!)~fb&31vbD4}tR-WT8Nm)5Vj^8zfln0OWuIO{37HcwWkXmSTF zIoKNG3nHzwD(%?KQJQD@5=bZSpFhlzE&q4_@A7&?Ogw-oHUGzQvz!2?p8vQoHsmKNu6LvrAkwy3}WdEfZ!p8;}z&3!3hzgGW6 z*PVj%nZ)=)vO_q5Uq#!-I=6P}4jx@@oeEe0r?inAL(+C)l6y$FzhcK3>Woo)>5@Yvc~@raN2$)MkszZOoa8#oSaJVN*>Pubss zwdcfY4iYah{UnIQ_v0H^^gLH%=T4`#Q#a9GcI6iy2akaG!5M15<$qd%cccL;FsUxT z<9J?Je0=vXZ=FCugb$wy(k9<5YkXHoh{r{>`pz}r1g`z#1V)d)|Mac0BUm`QR%tp{ zWD7g}3wjyan!5JL7CS&;%d4i6D5QnU z@CD?dc*^mi5Yn^)3UV^;T|;AMXGxRmxpNNYE0(Kt=Jn7#Nmd~Y-xz#$=st)W3?xnb z)AsNM0mmwNY%=?Ju2`NtuAorN#`P;=NLuQJKjG~wDu59Cv`KNvSD)|Cm)t06nY#c| zYK1b^e7T{tjP-KCuS##hAdpiRPb3JML2YqM+a{i}KiLNua5enZ6ety}dIwv6-;%8(!Pt~Buy4s$ixjtPm3iM#dNcTpdZPo0T)1_ z0lhvihRsUrcz1&BP4=Dg0v~EvHv1OE%1_X`e)K~e0xXe3Z#wfovBZMCc@e>I zifbtp1t2|&!MV5!utaEpC4MFbSfUuf66J3ImM8+SL@HZ=C9(i45$&HW@%^;XdvBDi zl`l~CHD6C7e)Bp5{f_viY5+@I>n!`&s}Xt$%#3fAhiOn2u2p{zRZ0quwNp0j`;?sd z1B3jlfkRSZmu}Vy2}a0OyW$j!%(NFLE#$f2`sa>EGz8*I_6zOCi;8ES(14EeLV;Ay z6Zog^2I7oRfDbpJF>>N)lZK~?$~n4={A(o?N-v75;Ky5cS=36155p*hm%scnQsz;l<72#q$K>tpvs_B$$6D!B757f;XPKgUzkf&TZjd&p$So^z$AE+E)Uda zI}KYP-rDqM65K91!u_v!>l$rdlk`RJi)WhjEN#CO;?JSc46#bmPtb9!$)$0hlT0X* zHRDNwO<0mOv+`vSX_L9hxeq>UFIrR9))0D^*8-QYL~>5^ff)+Gne+Nx`fZZ?*%lX# zLa0K`jw^hlc*`{rI6tX>pZx&bY!6FJUlvaSyu}yA^ot)dQT^;CjrzqwRRo&JmXdp` z?i@;x=?iCAc1V4`W@0J|h==QJmmfJ=I=HjD0}J5q?c)aHvP|rTeoQR_`{1W7Jh;HE zMglHLlc68A^*i(M7X@$`_q$-Wg}VYn!ihARq!lSAg(RPd{LRt@~rqe;_(^#eNa$Xl8QEeRc5UMmaBX&pKm$h*mx$_Wn2;s~2%y!ow! zUH4M;gB1eDw{)9k5QH%Gq6XokEi^yv+5Y>qhOZw>-7cd=H0UV?WYujwlo-m@H(%?i z{3$Oc5X+nKeuyJfDL!B>&-Q-UXeu^2bzQ+gvSqAOJJ$c*V%L`Y+n4dEF$(onCG9$q zEAIN%XW*Q#%-1L#aOa+!o!20#VP6AF<2F{n()htV$%vZ};La_ZqFJtDA&AYJ z%aCD4YrA|;Li5x16M1qBhM)>fKo7Ib)1}_n^9rb`+O^KwYW=(fdSCeuevhJ;)pDWK zxC*PV-#QdnK?@Z8R2zFPufuc2?T*O3e$_Ii-_7JKDmX0-OI`cl!!%70?7<#~T% zuY-SLuj(vWjVwPwXpA@uMV2gK>g_mzw15TKfn#To-Tnm`n60c$*dZ^;)z@eh&G>IDX5L3$1jYT*=thneK9=sJhnYU*h3Yl~S{Hox9 z_|5D$PO?hEc?&UA0%gVuV-jX1FGmi_popj-Sus#hIaB%@YwZ;q7sSHG&a|ZnKNVnU zylKH&U!vR_SQ_`%AGMQ)_F_PqXb4>}UYDlxv}>ZM+~fe3#uYc{UGfSd8~4Z=*5-=( zu-00X7ksq~KDKyvPUWR4F4HE!NU3VJeaWK^uZ=s7K0R0=syL@@S%vHG$5{T?toAgRV z>oC-J*m6NhgGo`8cgBRI)Y>;dD8Q+mI`|-y&gF_)`s98jZs`6YLh06YrC&*StJ2H} zLsO=gl>SrWn>YBJl$Nf@blr?xe%y9_C-G1SK30~!J20p&V-Wg`rmo!}Gh4WqC?Ikq zsy1|aomeA6Kx_6zRapB%nq*SsjUajhaPjRh{{|Ns0sy$U55Ps$b(*Go7_dzqUkU_a z@kfDea(&Lfw#kVQvV^pvS)Mc(-nPkQ3ezS1Gm!J3s(@|s>^ALS0s2ZtNurPH7(z(A z<*=pkEV3c#2mv=Jg}^p>Piee(E+KBM2D8W zlTe(L$XSeg2mP3+!2&WRV&Al{Q# zM!m-x7~$^{WGhaNv1afH)juM1p)u_{7^kFiiU}rhihT)2XeE1n!sy)BTi%?~aP1yc zCY#2a%EzuBESy4R)Gv}I0isL^P-$4dJ8Qk$9h(!NJDLzf03i;kxqo|#%#gcYphL71aLtcV9t8AE(up>(TRPLfwCYvG@NH#_!%$d75hiox=Zo(*jN^s&Z_s670-e28zxO z)@CNIs%CbMwnnaIOtx0W&PL8wW-d&kaw^g)Ok!s4RwialDyqQypYQSXWKwZ(a|Z7H z{XH&B7A7VJ&Q_*oTulGfHhhu;(V+!U&LR1C@9h7-{IxEwM$WEojs`BSc5JNX?9420 ztn*aICmxpv^>;v#FO-c!xvT^mcxJ{fYl)PkA>|e)xeHiEwmk;P4EBLs_pCdcWA1C& zD#A_w8I+tWSDPIL_=)o`-MupBB|R@M_q!7+k#YGaskmJSxKVR40o_TV(AN~W5*vEP zl`OgFAu)DzIwqlfr2rxCE(aY-jI{kEm;(6^4dx(2lp=(@mE8@zPS@E{*gc+pmmWu9 z?2G!?cKs307C{4;bpd=hZm}z)?iTeVU`P!0S0}m2Ldn z4Vc?LC)~JfSh1;b)jJ5sE6d2#6EnQz$5I{nupJ+f{p&!dDx;>|pB1YwGaX-;IJ@B&+ot;A2JYaqL5-VQCsiH+Td!LfYun zJ@SCa$u^k?3!5IKa1-L>$-OXJ_V5|-b}F$s+}xVy#J5`mozYg&lquBv`8}C zD}`n<5lP`#TvKXegUEIo%M`W~s#szWmi~a#>J#mtC(QMQ(8j2?)t2=avN>JskJc0h zILqG0Dy*&-2K78PpSzj*Ty0pS$&17AG0? zvggSI9cy70QP@a%E~bGPTA5i1?OB`omPbdEF`3Rn=gdP>#~w0`snE4jlIar~>mDW| zUC&qzgJIOsa{Zc%nc@4PYd%L)v+Hap{bY(k5 zH;fs3!U>(%vH@gdkw(-7{U=3yzkg1KLIgkaFX|Cd{2;4VR#tK6JemSRUtGoT1O;TV z{IEcni+9chT;kTEX_cN!lL$)^4a#^WH{+5L-DpV;SUS08%M-&)(UTknktN<$Q=5C< zCZ1`^Kn0?!P!N>E$Lx>vpc5o;Syvcm#3s5Y-%X%xWo+c7CV8j=tar|FNQn3+B#Xf| z!`(x;hc{UJYxWZuAl6*2+|LIh2RAOr4t)D181G_F{m8I=;py_2JW!aTKlfP6R^ZRB ze0Dj@z}+Vo>EoQa+$pX?pJ0cPhHKt2lX|VEMvI(tv{}0A*4#Yxh3npNH#rjs9|&!c!Q$~_y$7CPLL z#3I!+)iGbtC1cJm@*HI1o1-h)qaRp366vruehjn4LS=LeST^;65NuBchwX<1fkIz? z*QG(Ig%l_BK2hYS8fzyBV;+G}ys%T}LI`Q9gFqC#v_1UAQC-MB)hG(mp|X!Xl=(NG z?Mh8r6N4>uplw_@;nHO>8=MnEzqP-RWS{8N`lUmelF69Q2>i~l_ZRpLp<0uz1ximm zgH+5OGmw#=syB4^**eAd(OO)vDpxU&#is|iXhnl0;5laK-_ zXSnAr$wNqN%cg!_Bri9a{C5b-gf2NbO_zz-Y2Ju{1V@Q|7;Hp$#Aha|JcZ5l?qz3Y zr)Nh>9xbl=$&nsl+Lb(a%2dyL1>otv4Ak#KNKO3#}ErNj;E4w!JpR0-=4OS&R3gR$p9L z$%$B8GTCa`c4g3{!4$j;+JU69^#zEh2!X2yAF%>`crVD(<)c3>HuA2kZMHlvH-fw1 zp+fiTlQbmug}7Pie#z@tO!2OwOp@?rTT%XV!WT#4Cb@H|MGwA15L~^AUL7t zrLEMXd|XdiZk)W9`aB}_SzC&hzJN7t3cFkfr+fwbxQ=z+jI5%!bRi>7yr;B)1-VCr z6cr^g+o`ms0ULMbyW#Gb2u(bumJaFE?;02St)PP?T)c1 zPI!mz&epD{!DRf~`r$(MekF^iv)2V0U#|kOZz+%w-`n3Yg_&xD70S><*nBs*FmPL3 zt$p1dO;=?(mv6^C9{%-g_4``tYU1MHBrR zBRIY?5Cfv>%lK*k%XNH{uK+Wtz?Zr##t$jI+u(Xf!>Ay>Pz7D+V=en`mMy_p5T!e)u7$PoSvp8Eb#+l+v%*4!yp`~ZIzq&x~H zVKfDb*Lrf^>l)mESs*BT?5)?8zxR7a-jAbup5dXp?%Dj2R0><#Ai4V9SLoc7Nk(GW4`ev*%#d;%1UWfUVqi>+O)f<;kAH>Ty`GGfnT9k&m69Kvh3k5G%;X4tujNUInP!(lu5t50NkRf%S7 z<^k`-ocur|7mWOfb_RJjzA#4B2yGVm!rP(jDVu!8HXz3$t)Q)fYM4zyX`Dl4BiS_l zfOfy23|fYD^e)|H3=4_kvB-z+dqy?4%y8z}_|+(6+>3Ym0=XFp8`*3^8FrdVN#z9T`NGu_C{!-JB98jjU#wN@_$@vky zMXf%Q-joFz+8TK|W`vw8bMcQB=#N>TiV(#eMoK|$$8aSLF--$%ouHT3lhMdo8@ zKM8@@_eNKOuC|4#G6w~x>qDSX*HvVqQMVK`eiBM-RAV{4Vl6g)LCe(d9SsbI(fw=> z3V}rof#x~q2wFB$O0Sz)ygpt`|5HgkkzI*D;fj_}yy^>%3%IjUVmzc4i$r+EH~NZK zCDEg>*}fk?5oHPohed^r5%u% zx(A>(_^u^@{wQV2!Y$Kf-l6WD{RA-}+8VOE#-de;TVDqJm5iS%D=ww>=ue<{KdsNc zCoa=coS(V?{&j*fgQRg{Z0}ZhWX8r_s#C9~P>~w0l+xjofR(<&*9(q(uPg zLg{#L`chpbTVgjh)zr`@T1;_8?rrcg&G{r5c#I}kl3 zSuslKDsYvw{J(rBZkMFk*6z7VY1B!pGsj8qWF0pyJmgpqi{dXiqM;Ejo5hy7B>Jx+ zM_8SyU;==S`MU4kIsH$H90PVh<^VdUQOCz+SqjiO<#+EtoX)LN&}3n6@y%=KxPh;* zG?QF{c&*ymDS<*xidQFv+MUf9+)IH<&#>W=q*Z9~9UX4CDkyj;%=kZU55x;H-)$E% z^(Ou@*=xy;)W}{`szb1F+P`&{~W{d$1j` zVF@sCGAy8s)>c9-M6y1M=A?^|@2zN`ed6)U4~LjE)t zOB?}?n0)3)zKQSrjVFwH=^oe#^*1_)>qV^1GGr)X?()bfv?XrjV@G;ZoPCHx?} z8O{VDnqGZ65chF~8s1oc_Z#{8Oe`83lcv293rW0T8I1I@T275=f5y)HNRxJ3 zX9p=yLBsCXkwLzn!zYNCCszj*=GM}(s|rH3EIzJDv7RHjn0(*(qk)Dw^E+ppOK$ZV zeDK#1Aj!{I%(!ZJ`FWt7dn-p#e}ri(F`hK`nM`qLUO_0m<~RAMtp`)?dhUkrVSwRv zPh6lv&(CZ-lTXk-5NXD2@jk*0CKI5w>MQ&zm$LiLL`8t?L0l4>z_{v&whgESaqFR9 z^-`=yHtx~2AY6ieXmP^C8zd5P(phoyfL(;(i-w4|n8+PNsYkD-pZemnc=ln*dE1A{L3rCZ zNhIGTni|x78btNs0t85?+}?IaqFCc&CgH3vN=WYZCRAVih&=ot=9|XuFZvxFubrIx zC$oy+>!Fm8$!!nCwlz;QYl5dpr%5mRdZ32u%n&ukkYr90b{)fDT_!#yZ^{^{5M@(T zGzjt#$-|0#_Q%uT_Bo2>y+rg~Kr0>6;_;;k!`#ADr;GW~j!s60-FqugA#&+cx8!|I z6!35vKE90b)6sFs8?)+#Nrd0Y=pnQEq_W-PJ@?*T^lb7^d(nrn;CAQN^so@9m9^l$ z&@!Im2s8q)cYMb^)9Jnxe2lgU#}6Au4m;wzp^*ty*VuuwhV_fRR=8uZItVJN3puAb zbWkfiIr~9m)jIopad>qx`v*yCHn!vO`#?hyb7+aUJKEN0c#T(mR*C7iPT}p>&r4?o zoud0GUhb|Z#;|o_oR*Q{2@KjPj; z2apvXjOi*YFi3;C?a>%lU4v35P#}NtjQ4?M4q9xz z|7at>*0Jd%WkP$rw2js^*1`9HqM63Tr$URB$$CW6K(=CXLdKowO1uq|{mwlVp$L#z zpKVtzuthdcQnuT;KgX}Wj(_6IIT6vv5i}93Zh9rv^E@2J!0lLcaGekt8LL_#q`q*} zCQ&mfr@mMmY1~1OKt>suLF*@`=KmHWzQ%T!4)@|Wz8Fpnop{J`A=)mSy?ss!;+&p9 zF44($cl?Tu1sO2ZT>1=!I5_NoVJrv@ncE9{FuJ;Im2A);B6Ssjyc-wfvUnq6sR*73OIEWi_e*8)z^q{Z=L-;5~j&Dt=!_9sU*MF%Dg z2VtCfBDLP~WF*#~Ls@Ah4I{IZC$^DAzKHTZ!yosH=cLKT@j?4~bt2R-v@j5-HjEQp zMNkReP4v0)No-%ERS3vX9Dg$mP15rir-RxQlZR4%cgE*9_M&xI;o$d*-ZzErkG?9} zfMB#x7xV2>#E}bsXy5~sv+*Q|1*7dKP7PKoe9Kog z&+|w3&Ywz>SLF23S5O{xL<5(6NTuE>GLr(&!~Rc)Cl-pm-e=^7AgTL?GW{R2akQ7z z%r}a9*%y%U)Xb1{D2ia16h7Z>2Gn3>2c6*~v6HNUoznN37wALXq?rCpI2GUys6io$ zTW}BJ_3Z7i1Bfza}hm64T7MI4c~UnC8IWaiZ7e2SzpcKf}*T9b)9yW+ifZ`9=JlN%0e;V z1r)mApy(If)g=7&K<&Sli-*irB zvkIriw+%|Ji%X)Wm_(U04xV5c-G4LE!8X!q>TScnZ?Bg^c34%$gwiKMk_k^U#zjp* z7BRp^gBzih^hhFv$t?AgeE1C~Y5<3ZID(krPg#)%LaZss5~nUsSiR!k!4Bf#119;o z(p?XNv}Uxuj!Xp0f44(U82B-CVf`Wpcsi1a&~Vmn4!J=h!4KPaw&fHTCM-jES_3=O zr@O%0#i(Lrs{|i5?3-b})0;^N;~B11?oB?%`+I7+x-YJ50q}w|=gH(ov~OllsGg*# zY^q;aXJkzssS-IMSuNB;9M1Nqh1amAFTy~o7uMxPFxKhu)4TPR1?iIvdt7~vID&30 z_@&U6$0}(j@1cecl>&N4r>zx$&_W@$|lVP9;SS1^e25e+!8(D;Rc+a2F{OKG-$I#)ou5nhizYsExX zoMfwcq8-TK=R!~$99Z}g@k+3iJ?b#tcSXLB(qnd@IG!_%er>0-YO?S1xK|G!PCnE? zqH`z{bzdUYf5~seBt4R>|DfBHWwlS-iom>wq02*8`}dNgYyE1oEO zD!Y3&);VA~>!Rc3PV^k8JEyTH_6m%6BLzXJGFDfNFBjGCO+JyJX0GH<^-$xQv5^(a zVHV?Clon8q*V$I&BPatc8?Jci$SGW-RozqnZb|rK%|JDw@vUW4!Ieh! ztL2-4GrS$Zh3sMP(8g85=nU`lwuZY+vin&t#n*R(9_FFUSCl$f?c&x)F@cSpuE~Lj*eqa@9|BYR=`_ID4CH zX`f9TpP@=wi>!wE$L@I5xRWGPq2>~-Dj3N`K#jomZXa}6V#eCyxd2!~?8CX_3>s~m zS<5V?1HnXWYf0k2QDENVxh5q=XiB_5${p&UwFrBX=9R!II9`~{kN~scdGt52cakb2 zm$l!9UAc%N$=+O-$@7hjsYAuWq?X0-!Bp6c)SQY|!qEzoxJ^34cx(2y(D$Am06FIwhJe5pywMUo3v5@xq~O_uXf z&j)EzwH1B9Kn^A?m)foZ^q%}8^VsrQL**8NDhxX!f6Ntg)k|h?8cLgd@vdmP)4}*K{4s@-!WY zWE1;jlDgy#V?`?`yj)1pd0I@?ZpqQ#F?-x%gG>WXE-XDX=IK&qpy?9vj|te$Q)6~VhK0Blskc7_xAx;#igln(qw%uo zNCXxI3TCrW8|S5BhY)S*h?GbHq9#Vf^;&$81~f4(3ACZg;n9h1uu{eP07@Z1ERw zBn{_@Tm`e;9EUMKHy-99g@uHWy>NOGznF3G3Mcqn^1|&29%PT4&b5q`RjH*t-TF#2 zz*kwY1$;h=Ggq;OB%dvZGN zp1#SwY7a7`%jl4wN6 z2OWd0FrPBN1U-eeHWyJp44udoC(nZ7-2=Et0@V8{Mgx`zef2HQr$=M^t>@S76>E|k z$L9#l)b-}Gph}Z1MVvdvD{U*RlGoX0n_deM5N?S;infzI4F@lnPM16DfZiT6#_uQ0 z#bN7cXXIz4pcKt)BuhT2*)P})Hp$uBhtpdJV|O8p5{Znm1YkKB@yTfR^-Cyr@P!^l z#eaQd@fdDp_$k^FQ$iv9{y`23jUi32h)wv2I7O{-RBFB=3|X5z}Cq9m!ZR!mQ1hN~>k$^PP1U z!!fjnkIsl=zsnmel;hX3n9&Iw@#|%OL+%8hll)IJvzTlJ16nMclJKFh(enkEL_}a) zTBd1ua27LNAH(L_=n)Hvd z;o7pv%luEK`rJX@z!V8^V5}gpgp0>t>ujP-DEQb-Ll8N6f?FmlZ__gbppb?NI~8Ph z5BE}C&gc_^F>u-R=TDagJutz7 z6%4rUR1dC4m$)iqV#ox2hNEt~=Qt^#k#V%RzjM#+?$D(Mp$3n+V`Y63OC`7E{wkO(}+xEKHdU-8B9I*F271FwU+$au?cQ|;!l*>Bz%BE@z zA9k<6((@`;$|F0VBO=CZ1XNQ`QJabS!g|cKQglJ`I?bkIT~G07_{2#rKnp>GcV1{G z!TkfwmV83`%sNUn_e;e*1hR>*iuPZG&iZ~9V}6Sy&VBT}K>ZuhQ$qu-X9db;B4^f#1yX*|(z`=F~QxKk^^mV2PRb}8f z$ZXG@^7W@%qOE{p&AY=@u}F$wG5hA4ed1=oIKuWMl)T)h2yM}Os%*x0Ccp_Rt$#@i z=_=e(o^BB!H`s}ArkqqJ;`y@mCM2QFSnWRYuocDWfLRMR(>!6~sI_f@_aq?6nRtpI z3&|Jygp;sDaW%1dA@bGX)!l@fB(+_}-Q@}A6~R~GRa&0QZCDL+9OZi39G1ch3i;U? z!7!-#iNSj^+u+*cupsTjWQ5FXN}yG~S2;uBikFxp0F0Uc!-Q8@{Bmo?O-m)Ck3~{= zu*Axi^5)D4ceI2rh*9j}s_x+Mco%4!*|>@OVGYL5>v#Gwi7?oOlPR6=UT)2=EpfX# zo;yk>euIpoAIjVJ=c`w<-mK5++*%#+%;KB0Zu@+RcBTz$2%U1*T(H8P)xs4LBrEUR!kpx94iFAtSJ=zG9w(vKN4O`EsU_rJD)^L%&r zGgF&N)vqT*^^ep~T-N_MZ-%5og#;yD`b~h^;fD|aclzMu>-l3%qI*ZQE_y~lKxncj z?*+_Xau+1`<4fnDA z)&lkGY&<2DJ`-^QB9agnBP~^kD4R59z_+{`Ng+~hMG&OBeEcv`ENQ|3;yKWGb0KKa z-+rEib`63X4WJ(7;5SXclD?(en*LB1wO6)Rao_}=26%BopE7RzuT?;X0AePtzg$92 zA`cgo>!Mk6fdChE$+xEs?&CK!=xSqMaJE;D1{bBPO>=s4p;tVEJB_71AdFTAg!qO@Kbb6t8JH>}xF%#R?44jSH0nNZ%GXQA!;Rry zV~RZYAh6nKQt!8a)IDv@(tX-3zIzOc#K=BZ-wBKd^I_$<8}kO}Z0wTGm#3FAH$UmRE)$H3EC2Jy5U|(*h*`AX9NP z!GG9z8eGvc2u}0>iB<4P?qouH=Sexv5bm_A^+FfFFs)0vUdw%x9aJKC0PxCKSjU;u z<>xh;lAWMnq=ueZ?m@Hid~vSbhJ?7J?T`IP-}_>{yYkEWr!_G)lI!xz$m>?Gxi6}S zKDh&C+IY+h#ZPOqM%l4b!q&qY>H~)~wEVvo!>2A45ObZ>{oJ?#KOh1=6|2WBJJj7L zJc6YAKX$1@3#;d=ki%B|x(~_|)DyDf?5WDhMtsD?NL*ej>oOqi1Ckrzss+b#o0za=X@jV1vhM@fmiMe)@b`G$=L)(iEkBB)WadDE+_?`RJii)m&L@n67AK4$@_2)sLU`m8_hrcYB2_=a$=JwDsAkPI zM_HYv)5SBDOc6xWY4HSuF!Q`T;)m^lq{0w&l@PBJ)@EDd9uq>CZBV(??t?o35A3RG z$QE9f+-AOByq)&RI%W>DzSv6J5@NKN>2M-mb`8eE$-pqb5VxyK3W`^$5Tc4+;=6`! z_BBMVP^IONv{;=$LF_7;9Q213MJ_y(>EGCimC6WVB56W+3EW`&uhkNiQRtzrLjXAr zy?|?0aXD~+{BlHa_xk*r4FiPqAXunuWcx~P~_B3zIs=YOK5Fa zE!f=woOE~Pnt|2FkMX9WBF*GZX&-)z)aNXh%>(>w*iOUa>wV7rP9cx)ApQvI4ds+m zs)WC{BkoD|(^GOIdB4z}pfHY{)}S4RH4TJ@h+3<9)cpvI%^It|4HULV zjC@`s`N1$bel#fAD+1uRdBDSASmnMJ$*Gx?G8-r}-nE7KyI2KCUHwjg4KXV{g9q;K z{yhT=u~5#C1%^!5uOFvQ_oce+7)B&zT!~iDznqed(*Be>!4NoN^9U98tA*MGIHl!g z1bAtKoJ3=JX8YU|g$ke8fOf4P#}6&P0;qhA?$s37?w5g4d$Eia1Ke|T8lx~#z@5HJ zZW>$zr_`p|C`SIp*Em|?&Gfv|QREW1M$Vu3)GI0>!J)(ek$YmxObVSeZsAv9&7Md| z;$%EbSyBfJADSfhGgwO=MzLr?GrvFx9@rXZ6E)is>f8Dpv``{A6Ii9qk+9d|C?~OE zUl7K*Zr?OHg%HZ?A|h*Hmo=wKqrNyvkG-rIO6FIh7CT3s9wry~YS9&Ab+QQ?;p0-- zg|B*~Hnx=7I@8AX1x7;KE8NK^T^w&QS{X__7UdWIBIShpRQCb4Vl3KNh!oX$hcqwS zh?~(AKD$7aO&>>5Pp~Q{yjAcA$j8tUx*e{S`hdNj-qAQ4B zr-LatABinQ1jQuq9V=WIM$&?AE_g}3*(d{``E?h5Qn)`O8x-18oi6otucY9X@jN2x z8!Np#c6B6w@tHnZ+gJh5nA%;~g7hMvKbd(xT!9 zU8YAkvIzdYuwY#&3`}fhMM8buIoyvpF%E&GR-vqnK)Hn-<0xJ)XF2!(q`puJwYZujja)Uf%tj0Y7@wBe4 z6oA3yMe344uL7VsCmt-J+PQc#-woje??D56RJS4&zYrqt;nl`iVyV zjB+_>mh+l>;ik7OOV^oRPxqUHxP@JU3nJ5~LA64g!4bC;j{``qZ0Wg)r~+%mG9ppz z`GRVBHax=_sR-bMG9MPNI6NyknujULe7Rx>IyZ;ABQ-|rATMKMJTVF{cO&VuX}r@O zAWz|ZfoKfdv*y2lwUPpC^ljt$6J4EGu{Lb=$VzxP1}!@yTM^Ru!_FUmo*YgiC)HHm zd6M5*qQ~0ALEd;A9*Q*D>?>4 zYG8fl(1jT@>=_g$xUu*Mc}Tje?3TXGjv_-?)1F*6hE@9y=8$9UllpV|Ve7FaQ9Cl6 z7u4ksZ}=NOP5dl|;q=P_32ign6xF$YnnH|S*+uYA>=c_MqHeTr026&Hri|3Xz zQDM;q`bRW0CE$$bs6bVJ0G=8lWuzV+8{nIbhTdODUCwLu3pvP)?)%F>IT&_o%|8%Nv1x(>1SSZ_s7cJ+7Y&;p~zD0HDzT z04=M{)5KGS>U?OQ;}xUQJgJGhXpA+LrjSwzXnHelBU}5na#Ct>oXq(B`Z6~rO5jivnn|t{pnE2cNj&A#q#{Xc>kEK! z4z;u6rzq-Z%}O13o|=)RLg}mAZTrkuj9W#29q$bu1JA*xN_C?_F*oRS5$ed+?f^H? z@Kxc^&FrN5X|C30!&$=0EZvHL}3L?*rY#+DZWah-f3s*+@&` z(1ExHZ?fxM0xHEc?1zjIvyZxTs|~TH5>6&EDf&k_S7Y1_0F*P@KgxO8w6Q=@=8BXw z^2W=p4##BI1OMwiWpbX+OXB;@?C}&~!2GzBASm^eP%^}_Yl-Yw70Ww4d`T;WKq<8s zCpD3ryW3es=sTpD5cKfmwIFhD?w@GY4@j4Z~BItKKBt<|7M!CFvw=_Jv#)N+oM|visOePLN&Ut(dPE1gWfR} z2EuZ9p+%by=gQ2;MSv(%b|5Cw_y=q*teM954Q`qrz8;Pv8<7fCvsX#`D7>+hQH1_c zvA$Rcann34ck3z1rjKw5arx(~G!eY74dEuU_=ai3UhcZLw@TlmhV zZ()CwGv_VA0L2+W%XH=>(5vLKfM}vWmOU>%ylCH|9G{Cf$Z4R-s+YFQ}Xm4xaSt z*PgPsEO4TFb*$%)+G+^XVL>o)P^uYAIomD;h&>jWWOUXMR&@kjh)n0u$5|%dRDF=8 z{)aTVdabMeYs$5NPR5NMmhwXx`(@iD4@_qC!BCNbyNwP^10^QcR>}iam&PAnUQHq6H{uh(ZJ> z{*p=gAjFiye2C%bDuQ6}rI0rpPvR;AsWSkRp{%y9KvT=KGb>qsA25FL}|9t1k{>Kib}D2+ko!at-N~ zAP-E|x>6C`7X12jeE*2;l%DI(fD1W4{xNN*{B#8yF+4*?NSsTorny6f5?7!BWi=eV z^y%O;tSJ!m*4z^1_PQ2zZ+v&!@aQu949g90&Y}qI_)Z(0-M8#go*t96E5bSB9yGVv zS#DDZD6Wg3T|}>VTZG5u%6@RLksmO$z@m7sEQqvci@=JI?{Hv|kAsAu<%>BRyk)T= zNb!I?mknG|KU%h?fU=ui8+MF&In^c0N0a=u4q-(d&Bhxbow2Y<5^h+&!lqR>6N}G* z?HR1$$t8IK$0d~#g*h^Cg;_I{5K70!1rGBD07Lzf>dckK^@UK1F*tu*JiqlpWl^_q zg}rQZ-TPUyM3;pU&!KbiF3>4<0uN=5b$YtDczmwma(vkP+7C5y-r{+^sP`iF%QJcC zki87+r(P%Z5a46I0xCjx)Ui`7+iOL6rJ1BbA*{CesAhvg)HrSr@l zj6KyA%TOEM7dCZZwM}4RDghMrWdiT{c4lBKn5S_7fHwIWS{w7PYj!wcOp(GH!BzoB1b=}*W=s7tb7qc!k z5Vy+hVf%29bHu@})zjmKx#@9){{iTyzW@!<pE|}xc_fmWxMQ0qKVZ2ie!?x$iQ>#j zuF*Bt-dZaqnKNpuaFdu^iZ;DXKN6C%A;rUSE{RqajKZ=uAM(gDpL=Z8>cZx=eLlCx z<6JhxjU?;#7`)jA`0N!Y``+hVkelIUmy2c(9$*juY>zxVDj_dVpx-wtWQ=OH#3EgDfrZWbrl8U~Lt0R@8 z(D9dJn5^F)&BOx!-9a=fT_ zs592M$}vLYe^cwfqD}53^25aZrrY1mea}JRFIuk)cT=#veT)OkWIRGU0D{^Qp{?$( zr5+Ce@;8J^4L|96OM1cU*BC=!Y8w_s8z0a@?9Z^WA1w(~=vN=^uwU1D}N#h2=W%|8l{3XUa?`;>Sion+Po0RTL-G7}Pl%nNL z3P15b;vtVG{mOg@WNac*42G3XA|lR|oSnj1WGzj%W~mfL%r*&wCYJ`KKl@a2G${J} zq(mMngEoxFTuuaIC0BC*DI7u8eHuXy*Txx@wN?T}sQ%;rBbzt!O#n zJOIn9O1A4^!V(u_ZZmQe`rUR}EVcRW&-0MAjpcPTOv))^s56yFdJtD76^jO;L%JeS zSBs4o{6B=Ib-saD#oQwyYKVn~y}V0#F~4}J`?2R6S5>gd-v~&ri_SHM?g^TW&82oW^LYgMMWq&A^M6FP zlHei@xnVs*h}xYcW!?n5#_&|!pe7MfChPl%_$C*PzfBTOK3{_*(MXwc%j}uTrVNc% zpTntp2D#QVF+zLQ2)cuyW;OTEX<|~F)&$uOhq-x6#KMn1tmOoRVu-Tlv)E!>0^xaIBNYAPE zk=V@(8(5LA2FUzxjeVQ`fZ!CVFL$vKDTYMINm5n>*WX#%KdF+LdpoNfZ&HIe|72MNAv5##RQ(h3zZdAa zw8ruN0OWrGApieONB;NYxBn~chyS7dfOED#^||~XMGlQAh|wwi<$utAtmg~I`t0ob zEUTToylxla-d^cnNxt6#kmP{)JRzi>^V$>eC2Y^nwQwh59yxZQ{xI=CtC|0V=f=`D z3>2P4isKtMxe3qJl(}s^ZC|e?>Cw+e|n7P0v+i0?@rT! zZjN#U+2GM5Bs!#ixl2wOXE6NHp^F@sQpjKzhDJQ!DRxyo<*Z|odC-G19452VmOc{P z89DrYokv>RoNXAINM#Ed!>E3CfCU{7{+R=mHIyVt(k=(oLD0Oi+<`rv-@jx zm|HnWI|$;w5DcdcvZk;1MCf2=Tb8Ifi@k%*;UrQ}EMNV&^AHkga$>@gAMDqqC&3;< zP6_PR<2q$6@IL8!gZ8-IM-d49h-JFxmh zNr!X=ivnT(K^kp9ZjFT*CC7ULKCL#muL}4ZbbZ#F{yx1$hIx~jecCEqkbq=W&svax zG4h=6C|!n$u!<$Nn-TDKXLS7%;tN!UjLqV@v|5dy8PnnQ$-UL|+Y8NCnI=0dK}52< zXKQDnUP_?I7=zGmZ=mmO;ia9%A)*7>@FWyrS;k}Lmn4TslP4MU3T`X8r0mwv0G$qu zbw1gfyG?yY3S8;8@w~abMF`a#U%x@RH^0MHJK27@gw7L5nMaRli25{1Jb6FsrqgR- z1R^d`DA9J7q;U<323fv00udQFwPjp76-9iXnkVl&cT;K@;u6)hwVs z_iz+R6B)xi_)v-$$11m5@)KRmMN+-ZkxFX5*;;Ra6KM88X z&Sn1czP=GNJBM)MY&GVCRsT@0%4uQsmQ!~K$=_0Yy zWRlA5e7ydaDvHdgkJf>p^|{q$hgRGVXDsF@qnGKgPPZ|4MSYyK+ZT1{T|U#*_F@u6 zZIf(8s{{e80l2<$f7XC;fKJEwy9V$gtg+^=$)##M|D)4uK{LSrt^t#4f7Sp~%TuXk zl(zBCzxnwTpE5ZHi%Ci7?-=XYxT!7CI{z?odyrvO{-mGLwP$;)gE2&+lk#LWx3kZp z=LA7vyCdvHjn~RIx77C-%e^!TRcSr9@1_^&GU==LE1=*P3N*&n#%SR9nys!K21r4n z*Ju3zogT|Xr1+Thwx9LRN3o}j7!(EQ&y8IB>_>fX;f8gDt1$27M?%-B=;1#mHwrEY ztQqB90}tDU7@u%cMD$Sct7CL}xeql!=0bPuFVepKAQdq*f@K&F_0;Yd2#71Q2WN=9 z%{5C`stVB>a`_Y~%;VHLV}Zq>S9f=nZ0+J{6_!D%l0G>{JE5cMdnu%M_qov>+;QK% zQBg}@4$5YzP59koQQdOY+rX{apDrS}c<_MwEt1$xS*WNA8P;48c*sjTjx=e9gFt4yO*UPOdl}INo?JXjb=U{sib_{h^hWXJ_=1N&gj~ zH-yd~X4hN3sFS9ib-wLU!zy_2_uPifKp_u5JsnOXVs!?}Y}(A5yG{{8V=Z@emJHX& zTF_=bAoigy_uYo%Qs_ZKrCPZH0`zL&7RbzWZ?Uj$ANlNo*c+6GFKb6~4&nIdlN6IE z@7~lMT|Vs}F6_9UG`as-1K@IoIe0X!s{&o_0Y2Tdn)>E_(Ta^x1cI28HIBHFWAEVA zS(3k2#X>4^&2fKAwZ_8NSs?Su4Vv6f&L%b+fP#PmJ@`+7&g1TS@{FwA6hv*0X3dK? z-u3=K7`&q|2nO>m)B~GFI9y{Za8KbT%?E-`kw7)-{Rzee3Hql%&jJ+a+}yKst@1b7 z6ImR>82=XNnE$On$28Ju_)meZxS9wk&;dRj38{zkk5BJswZsh2{Oi-%6+w~C^0C7D zF)axLh*&}6HH6?rYy3^GdePEGHx zfvwOP9qKr`{H5LbZe)iHUsKYj==R|7whG7p7C>C*3>`K+6sDTuJ_=SuiQbFtNb=yj zh7Yswh3GSe;c%Ug!-x;>lN-ky%i$vc9<|~}d|%a2)+6Cn2kQv^6u6rDa3YtTNtf~! z{*poOg=aU1F(5%N@^OKQGcuUg^C$BwHS$FW_>-WYou~D`r01IdtOA+DQxhsW7n4e1#-LPS1CEA9h&JH9kTa|quxwysMQ}!VN+CTp zaDe3eKQjQpr8EER(~v0b+iT6CSKQe54AGb=ECNgcbTa8FQdF~+%A>UYl!?W7VThoz z3=GIvu7p@fy)rPwx(Qz77&p2LUrnQkhh_i;x+b7NAE14)Wo~c1ob2M2C2J1v1r+Fe ze+u-4V9@IenT+9@BEr6@IFIWWg@oh_e3fS(F;O-|7qJaYH*dY28vW*Kw zrrGWcTvM03xVJ^`^-L0pw$SzqV7iRt~JXN;kUe!AZMPyZ}K3osB^0MJ#ZS(`8Es{yZI<{H7>F~sYC&hvX&v#=NuIz^U#gl1EQiZF9D)x z86sbcqJvyYxwrH6&AS5rbnO5~Uq>8b_Hz;kB+Ng5UkvU~*A7jZac>xhLC2x6sS!pb zV@idd*R8tO2D4TYQl#Ox<7GYoqLMOi4;*pn1{eqabnT}&nDb8(tb7B>vbBEALt1`2 z5I;1!+X0T=llatLHDeIq=))=ij(&o;vC{{${bLK+-uvf*J|Ear%xXAS*CCd$~`3yH$0KV8&H&3i?G zRtGu6ILHGQSY3pF8wd$({ut+uk#yGYjdV5NG2boB3+Ky#%9z(?$CYMCbBWXc z?_IkA7ofYX1+0QO>sf5(7(s)@g207BTGto`3H z0Q+uVt5DCKvqVa0(v~9M;66FQab|KJsYv;#*W|;`oOcACxKX!W z=uvl5biH$2RnfpjvH=p8X6y{4)>IPonfT#mJ^{%icA}<#CYaBH{e$!c!GO%uWHSFx z)K2^-YM&9H^#?@lfH9yKx-tR(hyaalK$x^NfqjG9$A}3eLROeNs-K@qXR6lTrt0_Z zCa+N{txG+V>#9<#@^Xm5@JWd=+;d%R(El<9?EhyBX#6tV7W&g@BbJ5|6kwh{oe4+@V9=ui zb*WzV$Kz@mJTD(-`j|dbVY4&Ya z`Hq;zjv9Vh25y3!T&@3a{U7^R|9?4OF!_)E-^hKRec*6y;H#gcqw(U8#BJM~8cH-6 zY6HGIJmkR5y*n;s`N8B-bPINc;srsY+xufW&-XotRA_5*v1zw?_#)Ynu7li)f?T&| zse3L?oN+a>8jSjZo5Uz1&R8z|@2$D9x0$5-A_;*&0#dXEb7$jwuuP%y#N13yX|5lp z;msbY)khNll*KS9ZeowS=-B{qfdj3&8*AJWeDOj0xk>4SaHrML7 z(fDWg)u-LM-@mxX5T4Kr(H^%J0|_PlKCIschb{zSWe7n5xd(n4;VyUxph8Ad_~+i7 zuCOyQOM426WM*(0fgC@`}N0iV>T%v8YjXBAKn@GHoK$RX;4STFY*PC zS3Dj=GkowlaIq+m&Geyk@3tx#P8(UlWAi&nj7kt1+pi8avN_hjIiKJr{a$3L*grsu zppoyl_7+@0W*(P+G6=1sKVyBzx~uvXQw@E~Pt|uOgbD_&$%)h)Ne7+6_)RneQWx{7 zrrtU|knB1TnMb^iqo8+9d56@x*uFG&5=3nUFBg6=SPt(KbED>Q4zF>iGIwc;5Z~B4n0ySJbF7n(VC9t~(Ux@r2&4ITf|JOzyOhkGT(e*I7s3KTl`r zjpIQ)Hbkwb@!SIAZrr_aVJTIow)j#sy&Bu4JB@1d+@5*E7>z73%B@Lg*fz^&4MN!) z{S2?7OyjyuV7#=DQ&wK%`BjWE0Bu(9<#0TJs0euas?i(^aBsf%L}Tdm_ugEr>-i$( zw%!bIZ;m{=4!Ad0z=FFyv_@z7%_``$Iillqa=;bqv!JLs6~gDg|3er54T^T`Fo$X# zL)nDe7!2n*&26l>3brg1MhN31M_$3?>e?` z9&J}Mi8LiwZyo7g2kql`p8Nhlj|(vAXqw{w5-C-9)tX@22E2`!AVSAXGbuxHZR%GNhFs8f+-|jO zoC#wI^s9M9_f{2C11I?d{F8Lh0N_uX91rvT9x^X+Jo$}@GCyyzvOWSBcjQ*a@m+ z)>59Gc~eb?Pe1*LR2zG|rr68TqQ3=D5NRfDwkNJr;!NH8l}Y>rJD=4%JJgf+1xKnd zl?TE8>VZ(kI^4u!^365**v*1*0ua!v{u9t=8vPs43%bTYCLmVXxTfeQ8vFovlxB7r zmM6#(I12l6(3sAGm4#@BLP6^fr{k5QtM2{{^5YBgusp8Z?0MgGio7cZX~Z#Zf0+J*-jgXFce_YUp!R7vmY>*L4avHo4Pb(1@Z zNmLil2eCWx=DBg#1!Vb+6ME3NuE}0|Xcu-G5hxNSe34{1Tk8iCRvZJZ>bKvdv)Wwl zSk^Om8*)Q$Iswr7D62;76Sh4lLxuLR554Y?Qx!Q3Jti`gps79Li5qvXc8^Mw2oR!# zzjFZrJv1PoKag?rE>9xScOXvB8=q2GGOPX}AVipOTOOz*W|qLcc<%j!<*@O$SWy#` zQad_whzXXFW^^t0photf1_t0?bj?ejtrxdEv85L>I54fas1h+TC1eQMKwPOfxX4#n zX8|R|aCw03_bG)WRt$j&%L6>=Mf&Y4FcNDX{;(EFT=RtB29|#Z4^Yu6$5n+O*rSGf zv-@zsm+Te<$?DfezU;TJK(*zVi18y|tf8e7Mf1c3P%pScK?>Twa;EeeT-Gw`>EKwc zwJ#U}D~iw_;0nl+MPwVDEAbzQ`F`5pKm1Sq4=iSUjEoqsfK*ODe|GEJ=pGJJLt*$!h7z6_$>Qq&=c zlT(+|J2D^IVc=z^_VAi{39UcprB_W0q7^7*{+yhL7biK0$}HQ7*9eUj4I0gtU5AC( zrlWdPgoxq)xjbk4_wwA}pUZQ(2;M~$msTD*q6D@gMAWhHXrTtQH$2I8bNV?%+C=6k z7fCFLKIT%u={W%M$z3o{IbATviV%$O@(~jEJ=;V*QctlArR1bEM;owHnCTLgO6H4_ zG=UV!Wq1&YAkuVoNxhc*i$tLqsKVT(F4DAzc`QWInIdpye2FfL6kCwcXOC8|?_R3- z-dzRa*T@~CyYLdNhQTj1FcA9N?J`9}$iT6@lh9!M#^!7gq@_oRK@k zHL=CsUSj)6=9=8t&pgC{vR-Z19gj4>Tk3R>Rk)TOsi?ZnpC~rp0qt$Yk+Y%@bqH0H(D9HiGiUz_r6JY8I&&kNMw)7uQ2R!cKzJ*1*41AyQC5Ad75JA?lL z{`mg@zvI8aFIF-S0DkH}z(4#K`0vipmeKwJelgSee}F$;@A+pB{{VgOjP6)$`CD0x z2(O(_t^rydGiYePcN!sO(ezhD^>7GfeX^jY&YFl&`LBIyO!qn=Q1r|{@yi-EYa&$0 z=0;IhiIsk1xT+Lzfr+h1Y6O=dV87A4$8?apn!Vpj(P5;$g|XZmlPd;RPnKIo8sID$wDIjV*o~STwR9*&G ziM<#daL6tik8KtlK`skcW8tmrYy@cil_|jF(EAY^O7daPrz&>BL?OvL%tOgz*tuac zmI}l3H18inM23(KrfpM^~;7lpvq4NRQa=y9tD36**%5SXRkED`$w#XJmjV*cG|D8*s5|~T)#ro zGykBks8dCiNS6BqFXSnd?z{|aZ2E^1X zB=p^qOO5GIRleqb7ys#h7C!{tzNy$=Wo)c;`iD`$WoA+j`)JfOfkt7h(E|0lxy%0` z{;YYke~O>uZ}A6zH0b;hza8-XKgDlxA&9D*v7>XEN`vs{E>+ ze^%xHC4O^&`2SUv|4000l{f4Ly#ix}kT0Ubl66SXqlHZ|GFxhqe^=#8EIHC?Wk}vV zF-$F!OKw<2ZZs=hD7oli)wfe)3wBj@3VK&CJE*D@btzy;e=>sF)T8hG)$S@g&B z)UPkl)t=EroIf$sdQT{4Ck?T=B^w})s$gf?O)emq(#6T$pAm;lOgtY%{71$Ae;@9x z`2T;!zq!7{e;MmNdo%0f0}BKctMGqi^Ws0h@c%r}Tf@?Etrh+K0{auviEo9w&T=M( zbBN4R|kmq zobPk|IT!RD>A2v!W^j8<71o@x3f4$Na4AgSOrJ8WugBS70Jpt+=>uE4jX>mUbIi=? zA-3N zwl|%Z8biLEHbv)(+`Xkn(ywlJuH0%XGcRJ?Gpwt1A%>I=DdLlh}BsZ3XrXOO82a6Ttnu93tNebbH@&A51qj_WZ^c82>QbLf#;yHF6X*F~+b$jtWs z@!%ph+Z5I3#Ex1ek7}Yhd<9{aq6x-mlcZ}oay7nkObV$K2=T)~ZG0Ug{>{6Xkczs$ z%=B=?tdNL3xuWdwB-b4R?-*0tZj}SeuHEn{mqnv7xnk<&H--^1!KWnz_5%*}cb$Gl z^E?v!F9<_U!7iy2y@8>stz@?(BRl5`O2Omf5l9@lm_SFz`t6M?dSH=19hkWV_lzMC zGqu7mVh^iDK&>g(@2c(I8t(_kWmJyj+VAuB+NA9rLmELUT5L&K9mcUL^dP~1A_034dBSS2TY7w(e*J1fIMKsBuk+xI77U%yBm9bSl#=wOt^;^jM zNK`+rt=Q)jSe*{1qzSsdmJJTEe(fRBDKA+Fi`H~Q-0 z*;0WO_Pn#E6)I6Aj>?+p3j#V~1#jwN&VT5|<>wKm?dghNOy!@s`!$@IMzeJDu55EV67Z+Z0qV`s1^JyK-gY7op?07{K9)hjI9vT0J;hGPd)# zn>*jxrgTOxwEe`!E{Jos^GI!JKXyBVfF8eBAiRIc$kxa+{lu)WT_0pI2q^WDPg0 z1$y3CHQED>;;m4U0CP_o&3x&k&+{FZjJHnKgX{pl|3?c&BRqeBWc+dT2G?Nk{Lj5> z8&hioq2=b}QyvG1mao=7-$AS1F~!1x$+q}`_=GBqQ5t?oV|3clJMka)U-xUvMhgSx{04a82UR@#7ghteQwV#6C$JWj2dHQ5xEaiT!ZPN$ zt?+7zn7P+!5%$~9=?>Oh74FKx5abbov(R}ve4eX73GemK_J+h@O@bvsDb!Y+Mn5Z` z47;p~?$eQ@2`Y0}7 znZoya^vhTpP}pVMfdkeTyyaF!e=kcG+d3aR|n zsPan({Ll`xzz=>>j|Rbv{!*dJ(s33D;+>r?cO-FdXy;6$n*QKhb_F6Gxtnev@_qF-?f#XI-$O)PJztWL|R9&|4p zcr6u7n|TL8YB3{=wJOUTnn|%W6AM8mXEldb0xs>Hd89&HhFFdXRg1|`ZDE7CsW(o6 zm}x@ZeCmWNjkW*S!n2SZBp?LHTW0At%P5WFe0FVIpADz{hw|Hf z-z=iG2-t#JM5|WT3=xD~=sbkwIWeIxSp3zk$GySIADwI>a+kzu!P&+Eg z`r~}tJ@=aa#ZTe)<1jJbnZ5NAQl>6Rj4iD%F0i)`8lpoDc9LvTp)9+TZ%yZ~kVq0= zImD?_qM;45FViHyia=%_aKD|Np4V#1>1{l6Z-tXkM`O_SGKiOhvAmELEPcHRubtg) z*;)D)@L`?l^*zTOr1s*TK^?M}sI0Lv1EIKJh5DdS)0tx4AKE^|B?3eJyU2|)riwxC zSi_`(o|2(6wHTa}`=UCG@qxNF#O}3rv^7RfQuTr{QN#4Xs;TRhduir51C-Ow^5079HZ9KTZ7$wnl0uJiOtrP@kzv@n#X6w~!* z%(D4bX*s+R3Z3Z$;ti(i=cyvP64pCq0yjU>K8L0z$yt(MWcdE?V-${m~Ir zdX(`fHq!Ey(nfA7hOlB^Ie34kN<_!;pwXvLlu(HPs~gBETS=@Ae%byN6jV16wAB?W z=VpJcXVq|3iBsk2+HogiA5vsa-M?lOF;b)9A%c|lk&cJ6{sEjU-OaB6!dR?yoqddC zeASq=!;M8l=J(A6(DhcpsKCS*sO$Ue14?3yQ1SsxM;k>A;reMFTIBS*xA!_?raTA* zyN?gGrjCf+{?(3-N^QEci+XFD=Z%jy>9Lxpvx(*3zndvS5Jk?_My+95)UzvX##*;& z?6v|}po?r}bohA4GbB8=K^yeMu;>y>g|S3!d-aihuFpbtaJjGhZy(^X1qagx-v$gFeNt!lm>M9_317`@C3}~|5%jmVu8XBw>CE3!I!H7Q1vdcRf(rG1Df1ZQC z)0zX~s_CP3zBOddM-IbCY|X}Pn~aZy5Y|A{*gsWecFEHFiSXvWT{)=rDM}&0++V1J z*2?&R`Bei@fb1;LHYhNQ4gYXw0$R@{u3PR~?}euwto@3DfJh`!)N+JbTG(FG?VNUiW+>Q~_H`GCeW`^_e8X zpK+i$h$HF*=0SrXr9-SNDt4u~IxKcSM?mf%wN>><7zMqgzSKMAfQ0aO)2)yA zPn%BP4XV>`Ie}436YcvWARw}NSdV`@b0c0!c` zYEH%32I~;C`0NV4E}A2?PSy4tI(al^k}NGC?q@BfM!rjUL(-2Zd1@hiC41Lc^MeTAG2>MN_r=#GMo9}iV;Pl%;q6xDQ*Ay9A}($#FX z_3Ml@Bin{7kccR_W25ed9TCB1)PPn{ z`*EEL%H=BfI|YH@?Bj~j%xqvGmGPgY#FR}@>Xk(Ktc%Hi8-3}G`t`I7C{ zmJ8JLnhWn7;;FO4IV1xegw(OoG1zr5h>8Ieo;n@3yDiU2$`rpEny~paghyfcB>AUVW-9YT9&mW?OgqB{{`G76!sXhx((|tQ!Q+|yKnOHw-Fg_ z9RHcOCw{LkPZ&+=2WZnfB7&v7x7d(~Yxwb7m?OVftLxYIZ69mIuqPp1V(9#fgPkIr6ioyXr412cKtJY%Omgdof`xdeP;sCE)c zIcmpr0`GheINur*AAqKMuFITfP3UV5J(n}DOu-1+$I~v(sJ#M6;pvD$m zD7#}P@6TDR-h1XIU3}MqqO6gu7UiiTe7&rEaa}_`2b^(WJ)AnrJ_QJ}%<9cv9gAQB z5%WVrnh7F~_wwLBxURn5f;(z!JB<0?C5qIEvOzZBcJ{gr_|h;EyK&NTuw7pnbkM@A zO)PM&_cny~Q`2FCe_5Wki6ZRYqRngdUj8z@!vN#yuLbsH`QF;lsX*E2n@xd2GV*Bc z!e|zqnIaIVpnd`01oqe@+QZUjZm@4j34M=4=-hhOZ$IWs_@2uOYouQa!0|Y0#-J3tk>~; z2>Tgy<%YRz1=ICT?VA&uSX1CTh#nYh(8A7M*`|sp`z-72sf^b8ZTD2Vhk(fh#f;Yc zxN|5w+LOCAtn;7Ly1*-_jVvFz!_JZ$qSX|z_p8-4Xg&k{j~~IA)bhRnhv#o04NwI= zfKY||P$Ctet%40xX;&!Yx)LVvjJaU;D)__0_xSgSZn!Zqj_DaKc8Qo^M~>4l zF~ixg4zE}>pwcy#MaFlet7TYFJr)d3FGd$<1K!EUm-biCV}(JhvK5nqd4l+*eriw& z1BVTR zm;qAXO?yJu`kWTzj^K2_u=AV-zzJ5EfD1~UeTJA3EV5=Ze9)QGK(c@^2{(g54z1Cl z=-HHK*mBuzFJ%DW1&YMBd|#U4C{udN4*s37W#!_*af70HZj#9a0+aTT?%Z;{N;nIs^x>sVhd`X z;tOOM-I)`&Hn*xMg^o*E0Y+0OB?kEYJ#;^9QWq1}gNo z-Mmcfboe4pFJQix^*T(Qn%WChLk+^cny_BLS?qmuMiDYM2Ya)S;4fprc>$JwN#COk z3N;chvUXeZz8{xwzSGD@%9wq9g08CFjpXT*c8{4palUm?sEkVULYJ_7Qbc_*KwAu! z@^5k8PZ4UYNP$w#Gsx^O(2h+~=E=5=KOvfhm*`PGIiF*%@G>Z|%mVgg=`UR0%IZ@f@I~x|#YExPg6{y57En$5&kn~iiG=C*T zl|+A$@2Cm%ib$5D;mmT6wj}k&UTsuWRG?Xb6g0Xfapgd?FflIHCgh_(3|7?Sm7G5* zNHhnhRASJDRqt&i9FUbwEvH~AG#5IlC6jxDMjP|D74$W6bmF7TzA09ysGSNFX^LF> z8)4&q(WVvgYkGa+mj_KTDd-W{P1V{}Nkkc7sg$9Yh7^t)2_?4^J`|H_~nd^4i#@~RcBUB)vo1~GMG}d2WNqfJ>Ljt0RdMT4oCL|bnHj3x-f(r;KFc+ z_-c-b_7!;Jez_yS3VZ8dGmk2COARRPn3pBBD2Ju5S|zz@SR6#D?tW3Jeu&?ib2#E;w z_FFfLHPm+MIcFREL?@1&^UMFyFb~YH4wueJN`;Jm7K<`Hdp7N$5QZOKs#iio@+HPHpX#tO$5iLV^VG`s4ESviB6Y4KO7^LOD`-ij-vcYqEJeWL_au%~rgNEsxodhb87_47O8$9YuX5${B$%o^y9MzA)VMRBgl+)=RMrUMetfcXHmuR0_i`3r~sOv8*+84?Ko zEb_15;yfqiweffH)i5*2-VWOg)LT72ssGqCt50gMqtvuvb=h5Uw-3JsMF;UjZA)z;DH-O*$@Bd^Q1ac z_z_!`3>YH!a3#av#Y|++L*0;ndR@4k$betUrkDM z_|0&rK14O;sS`ZNkjc$CY(uV8O#1Z%WoS-et)Cjan>a5wxrH|FLLgD%y|gKCSQIti zbb+N|))&W{_x*Bmx2a#HWzg;{2nkV0itkmQ(3N0w5I?G6)j7l?D zls*wH=J=>8krf#Yd<5C}q8ROvc++}hKNM``a*E5<`eEzyzv%V2-p5`6pw}6IUQPdZ z^!jI>^n#`}U;zvHBRlO4@{ZT(40p|RhG9fK!TkQWnzT_FiuGafoP`;5yjz?Yy!eWW zuQw(Uc|s2en7DTtg*_hf@?oz*TZbC`Y4>}$*RcF)YU4`)U+_kaD|_9f<&u%n>k`SvE4GMXt+!ocga8rJ9IzU zDtE_XkZva+4r&-}hk-Jb5sy9`y3LT~a4gB?N}*Z531-PxXtDCp2R|~JWAkGn9fHvr zeX}$q2T)Th)|fkRzdr1oY{W{%>@iKE+Z9`P3byCGJq2pY_Pc_M2{~S#_&&b}ytAu) z#$UI{7IoB>lx$-rwiFy?SE>XUUNCA@R($Nyd7+E`RWH#q*|0Eij6vs^p zvR?!-vGtl{nm087AwzTcU~Oq`(r}O4{UHk|@OeKiUK*-FKcg22zdoOqZ#kYc2k`A> zoBb`@DNPDmj>RuE*c_Wiz%K!1<4$@ZPw5&)$GngT0Y2KT3E+7QxyMlrS~kvL6pR4a zMn}i|2W%z(z_w*>lN{Lb#~NASJ9q#X^8-olWMUe{0@e_h-Fr_|v(+q-oo={QU6^L@LP2J~BjmC!uZtJbEP&CC5%~veTiaIS6URE-_ zbXK>#xrRBKIuGX_f*n^o%X!1!_1DF@veU;fE)F|Fwa5f4LD*P(PAw%{9aWR> zrGh58`1B0VyjSm`QX4kH&odNH^OZ?Q;w3`7yVzaZ51czF&fE#^)agXw zG&<004S;Qx6IT(-g@)^HTlF48TVt;vDjKMb!TlM7_+kq(pWZGWeb^b3Qq8|zd+Cpt%9C+>0?C&{y?$jS`VsifD_KUj zr^0VcFaYGzjcVtDaBEgOKVTT|D06Sl|1J0aXWEpu?PRDQ=)Pxm>Xyy#i|_`gLo4X- zkbz&yP(=n_rtVjw{f9`_8TRa@jK|B~1Tg4+R~-j}N25FQ1phM7JauAy3IHz~7}ddK zwVx~C&tJkcZQF_1`P$dP*XkRn9WKB8<~9MG)j@nKDH`MA>xRcoL{PK-Iat_6eeSe9 zIjq|?kgmt#_;Ejk$c?yg+Ctdn3UI9r-y9~uwWp9Z|8%W=J&5Z+T=AW+p+0_kW zj`JGG;(=Cks@65!|LY0i!A`uvUFRD#`A8F-4fAu?l5k1=h~2q&Imb1E%faFbo$)?b zx5$(5{TqSyJ>FEBqLGj7RqWT!HfVdNRD`9QV!ps1kuar0OE+Mds0)-TToH1gF%2Ry zUy8o-3Z$AQKyr3*Pa*iM3<{yW~nrIxzY}MrO6?PD^fSkMBB)Hg zRPm3}$kJlOQpAqr9NQZD|127=ub8Bb^z` zsTNd-e^^^xoE-^Zt@a<*vi)b)TKvu0Y8#8ge`hVBVDul>#>5Hy#agZ|{C}{PJ$gO* zU#xZgf5%!~n!i{J`R}Yf{|9TC{)4rV0M>Hnj#-G;OH!1u!^5;bt}BH^l?C4b5ir%9 z^bRSB%v8{cQ0Fr{=~fS&2MisZ{3}P3h{keJjFhXv)FG0HDm2JT4NoOEc>t`9m6hA$!4@5< z*t?Vu7j|hJ)Wc4+s1!`HpbJolaxPVfGL|c^Lr?}NSAuPkUxH2iCMALAGNC)3s!UTt z^`Vg_<=dBl`V!@;vowJja#>Hn-n8QOrSg>qAt*6SNHxKJd)Gm|?(ZZQ9kf725M$qJ zbO(^zNU&JWI%Zl~N~2y8*?oqWu^%=b~%^qW=w_NttZ zl{I~Fg{qq={R2xEZ_lwF3E)8t$FVz~x)Py{ycY!VfRO|M@ zdG~u5+x#jv1Fk34ZFdOq9)*xS;+@=@Yp;s^qB_E#&OmMRMctRubnDw)dfH}riOim6 z^E>qMP56-}+M^ph_q%=vi`1hBbi!7NuPx$pcmFNw4Y=jGh0kXkoSf7wJ3zIO0Tan7 zi58Fn6sd zswDc!2%si0G>AF>Ko1fvVQ)Y&{$6KYNmcIQgBtf`&$MGGJio%^D|uUJc|)gZ&_Y%E zW+M66wt%UIyj@w{7kGvdk;d#}W!g&Tytyw0uKe|pQO(up1wDh_Z@EW)k`3~D#P(7) z_OuevyV#4ADa8T#!$t!bt@*E{Ez?Ef!?VcFM&VP!*S~(ZN5X&s7`e=}TAwolgSl1-P)NJzW(iBnR4@;a%pCpnSd>IBeqzT?&Kp ztH$}!wQ?b8>t+d_FHJWhbn=R84JfjbRX?32=jo+N57d9=AJ&qvHNDebH_lfhh@OuI zt|oCdo%YLju;;mC34U2aQJ?n{A&Ntmzp~4)o~5&5P|GR7vK5Bfcgi)}rgQ!- z#~xrZ2_+!}&Rq!J$jaTAr34r`OtV~;E+(m{vo`a^$jasub}h$a$yDb`vsIs}oA+LMv2W=$}N+w=h@kAN(hCU$pX) zalKi{E!4XJO|4&uyn9ffNu`yplf*J=h58DGh}nTLqqW7G#7@YQX+%(vbOz9HgCvpq zUZZ|-6~mFC_GN^P4Y(?6I;1BNz(={d9omn82`&7M+Sxy-UHu!i@PAOt{WogWO$20f z3?z_NJ${vhzbLTV(4L^@IFv$nt_W+F&#z_`6OV}aTQ-|_*x8|bcCqv-Cq`+AJ?}BJ zAl%QW#zz%nDDS4tlhYSsxPNU}{?z8kmU!Pwv!f9o!d6-VYHQIl(v$N*dL5J$l5Kp| zVuZkkFjgGlx1+G=CJGbPMqiBAnN{A|IQOsU1NTwQ_MhN;T2xIOu?b*mN@dq4T@ znU~>j??7&P)#RE0er(xL0}$pF=#b#7SI20BTU`TR!qS@i)J|OV`!1V7{&X^t z>mBA~UTq3UphXi{9+ATjQgWm z(X8N?Dg<{D_%pJEKF_`q8hbruZH8+#iPkVR;=$%{!IDc^ zwa0pj#z&UA>wkTy+3&Nb#?~Mp?>Nj9szV<}a&48e$GN$T==8do9n6Lpr*>sF&Ez) z=W@9y4xg)nBfxnw*u7HQ&c#TC5I;j?A2}HA&ES+Em@P!Mvm=_5$R4TnVbYyc5tO-@DJ&(CqYITgS#q#|t5X!>`6fsTpEk3)PY+pRGcn`c z5IuICv5YVTA@Y4BEahhs?^@y-4as|*`2LSTwFY&u0x|t$Py?`!b@fWY(cS`SG)2Ic zbb5THg?H08=j7Ajpu2tt`rBHYMAeRjeP{8VB}Ik|(B6T-m0y-NN<&wtiFdzyzP`e= zXSquW8q88PB_anhdGlgrBGoci#zKul+`<`AjKylOuiC-#bAgrCaW{i!J7@0`~Gcvz>`_4O?Igkh*G z*^Ff|lW=Y>gOKmnHs80_o<ja-iMKk@FFD5sA;I>H z1n-kxzU`yg$*lK2d-4`bqGQ^(y;o6JyNJOpjFMp(6giQcg|L(cKIWG$4%Qcx2%&_a zlfEdkUewms+v6iSU1Z66Sels4O`M-E{jXIaI9jf@)gFOw&fGaGgDx3bV8mys*r{_a zRg9c@`jjF)arnp~3|T|p3}?FuPz-sFv9=~VvcwO)+^ltUWgns+8%o!rL!t@$)uy6O zZEV*R$L`PG*^ko%1&Vk1DP3@G3yKhv-OVMJzKzIgtAH0g?|9dFFTvD7d**X)NDekJ zu;1(%ctATI&3f6*$;8Areku8iPJr-IN`)HSj5(9PO+G#v)Z`*OVZABhR-oncz0>bN z6EIX3QRJ)f?h996QvgR}QrMPIE;hIsrL{4TsL%tMh$-cK3>8}!Tj442YR~nE^{g?y zEz%QU*_0h53c;~>Yo(I(WNNSl>(XVFVhL)^Wp^1d)XsA)_?*z}{9AzHUGMXQ_Y+dJ zsy$iX)`oMp%nGm5*AszS%23 z8)|(NmcK#oVnJjrI^p$4{Ypr!n|O^aMC6xB^@~+wM)Xr-0wrcLApl`Af)Fs6;sG-l zg9{uebcbrB#-DdsXgKRFV&8JIsfB)`dHAr*XjI{NBd@O+ zu**+Q&Ic@~62&{eWqHO{@zo9s%+hb~P=tiX*jC#kYG4KTqc77F;hkskKvLs1ihCYC z%Z-5(X&_SD4_#t0D5O_Eoihh+s9P}Vr8t^rjZ2n;o5ELM33{}9wI8gdJy?#rOd5+j zHH+ZY2xkp1^Nemxz@Hi6VvnF!8)079f_$p{eWZ(hd1yE})Dt1R<;3sf(!@w)K1|k` zC?%@S8)Jl2%DyHE-?6*WSIwDA5|p52NuJ*QbPjC8#AtQiZa$~ZRofnXjqOC(8hGi# z^69GTyxWs7l{u9~2fS<}zCD>Oq=_o(Q*g&Z$8299FoY225```15^XFm5^S3R?V;{1ebQR66kwxVw~p8@}=MX(o=HqwzYj7 zuAbtCI)>*0_1ns=5qbL-euLJAbB#$&*FEF&tG{rW;dqvFDxGsJ5K5hb%NehN>|xw$wVCLR#Aku+`SbUT=neST?1^f35k8r~ z=vz%Tl%u)5SlXLK7I2f^_tMgAQ8aWI_my@FbRe!^dIcnf4rgjAASXEOLOChKC1awL zC1fl4?o{3CvF|~-1y3XqQp_#Y9!g46q~S0T*xT(I2RB^)Urwed{ZB1Y#7{x!4Nkmp z+M3&pciThhXc)-SPH8Y5=GE^(*bVNrJldNVU`Ng~H(-bJZCE3;Q~b%$vyDk+0y6at z7CY$iS?#mQ15N;2H7g!CyN8xN&_N^PGl|f9E3P2~?aNMrfg8!YGMVeDcBI}-onX$` zLsSLBX-Gg+!N4^J!?BWsR)GZU1;g37s~HpVU()?-+@r#o0fmGKjlJ1<+wMp=le*gQ5(I(`Z60ahN7@fi&3t8!!Hgr20^GbA`$+9g^}R1xaimF2 z>L2FwHvJK##YIoPlq@T@sO7hmh34A672IkzE#sIzJHU)Ytf?Bj;# zH~XdcZ&D_AGj--d1p32049yq%YK~8f-KSE)WC$QjIvUZw!#mS4ZB8V+;0nRLqts96tADgWd7Juh((mRut z`MFWf{cxYN&-nXkUk-RBMj4khxG00aMA!@0fE3eKhlRCp;oJ_$l&OLtA~TG|jR87fXu@@xQO z@f2h~Du_xjI*Q+lUbbIk8(bNiA&U$;yKayS64!Mwbd=yBa`Tw~Broz^d0Uq;}cOQk;M`B*MUo^qgE%=D|e8F`(M+G{*e?{m|lLyMBK&fBfDP5S|%&>nL>#WT>%ibua zDEFEH>XNN|&4bnhz5f-V?U>#n{zPbpIT=Cm)#SMh7+pljzaq3MAVPmlO_H=c4^LnF z8FeMn_7>|QIM#xJ7DpIuJ37#D3bll=JFP1dNBgLdgVJqPdhGZCxn( zJ3<@M+hYAkgtoO>WV$yU{4&^))jY!1*UX0h3XBYh|FwTwn@sJ(c{#TH5Ow?RX`+Rm zIyyF&j`eP6ZRWs^Ca+CUcP$uCDX|Q#G9c37Ww|?VkynTrp?UyF0G$mXpmH>k%}FLkIc( zrrgj=QKKO1jvwmSqYOJQhHCf-FX_mu?irbWtDI)5@1Uvt28Z5POZfvUg|Cdp*PkO; zzl4p=fTPY0g{9e@F#e7>6q*GIMe;W>60Hdl+2FV!QSkV8v9q+0?^bDkv8k+xdF+Sg z=%I?_1M29ZEXetDv|G~CkZDkD3BF0|&CQ3*Zi!B)^ofX~!-}qQ+N5r_sWNa`0Bxn^SjZQ%5KSi{)+F>%?wA%r zS-HNdSaqj}9~L1r^RQg)R*ufNC-!!MB~Qpvibd=P8i~r4uE^C@JX)eTS~7ZxvKL=A z;>5Y*Czm`-yXTjI5HU5NX=RKl29TW@NVDT$ZP6g$)gMC*L#Ku*l$X6Nn7 zKhb*iAJMvX!<*?DEl>3K(s5Cq1WcNDdnI8TYj{{53AI-@Q(l@AMP!aD)ZU?O)z%Tb zNYNVHORkJOI+XYcTHHK%vvnD%iMLN>+6!R~N|nG%RoR^F|9GIDy?pFI+N^QH;gldb zWp|(|(RMbPofoC3>WdRs#7kpFqH%o(@q4n&<`ui^#__-BpR3!0IbOHFDWy(ekUsoQ zAbYrZdGqR<)P=W|n0=i$6(fw}?|bYXaSylw2`Gyp+F&iNPmI(LA$Lcad<-0G8HV*z zN;iiW540?|YZJ8@p0e$yu3d*YUa=`vsk}oY9gBs4xc-uG_Nv1Fr2JO?b;nmWnm3MN z*-_>3q@^)HNbFf|Q97`#k)v>2Q0X7h+U#o#6%86e?Mb;Z5MV}Koc|SsN{T;7ZbV)L zTKJ`zGxqR72UK&Zu2*OUAX`rhUkhWTsn)cg$j{gi$SbLN(Nt6@({Bma3co*NHnguA z&uRl>GC6;AR{aUr+Q{lkI&M)F6zX{6xS3${pLOh}?Q6Oz?AB(kGhq9tCZA|0Ti0JA7c)6df| zfJC`TCDAK5$rwP&GbqUIqBB7|VRw;Zh(QKvF4dv?C>;Z$B^-(GVI6jp!nsXNyh=^H zoyJ)cq%x(xLIS+W+882-L3%^gAezTf{2(k**G%D>q%a_|@bwyAz)yzXJIxkp)X72@ zH{6-G%~KFrS0FzOJ=UMtPbewCuNSRv=sRi=N zHn^zs^YCbLeWX!(;>f)_sKV?lp}2#$PIJy}5l_>jV;u@rOHRbHS*>-v7VLpgke+6; z3TAk?%azHEl35|~O}Lw|Y?tT&7$$Wl?^!qo{V1Hqqce($G@!j@a~^QFg`+MEq= z0Mt@6T2xjAs}lYd)73p_mF~`tk|gmQjMrFy`u0{tkTsXteflTi{P~z~@1KuFYPq2U zBE9-PibTH4Xx~1Dz}1Xmul?R!m|T`J2Ral0EjZaSfiw(pqASN_x|~WWf^`>E72Tnc z5VsWBGNptxV7ELEvV3`9>8+@FaAn_thJ4-^yDyj;-k|@z=|~`Tq74Ne2q;zMf9?4; zvzsX(o&U3LYyCez-=0jDqLp{ZAFOx&SKZdKSYdD>UPpHqY;3%^9wynZ@jI@PHZ3&d z*RufdS~a@liSD;ZuVp{);j^_~+y2dxDTD?Y989bIyH0VeEApHH{cX>LQ2l({EmmI> z)y?<@T-RSK7mg$O%kX;>9(cbh6fIpAYqJlB;;c4T2O@}!R;I{L*YFoLYEm`_qB?s_ z5nNU4@3*quu)=ift1fYe2%~XFZp&~Ti*wa4V?HikaKCzS*2~aIvY%a6-d zx$LTR0YN=+ zjDq9}Ki2JG!3Q=dZ9iOCj}_zO_d)f*^{jB@Lx_wTK?bPKCt)afflFwN@l4q*rllN- zH~BM}uCNdV{hpUK@drV^5fA%4z=Q5Rnh$E<`ha`MqX|qV?o>R5F}^w#%QmBW^8vj9 z_oso9A#Oa*#{xYJUswIq9qvk#3sJ98_75~bNZ0NaqhH5@=rfHmu_t*VBd)W*rwV8rD;1L|6-? zG8Qa)k-S}pcXUmYv%|ldu|7#Z zeK;k1>t4;jMnRNm=d2%yxQNgPs`}bFA{Hc?A>WAS2=YFX>;R?^WUcM!@BY|l-+reg z{!%i#2(cOY{%mLf?N{flubDBHv(>fYQTkzhc+oz#tlP4e=DloHUqKXz&I0ZzlWddv z|M2#fu~qepzBN!6>h7-8-QC>{>Q05ax76LKQFnKDFLigJ?(SahEb#2T&$;*H{qp8~ zAal`#(4-48$NJ6x7)KKoNW^OtbwQhRec5HlS60@EJhqxQ2}80&W}kj8!&zIW`c8F! zIH+5%-2E{=C-qo2wNh7OOVg~AdU6&}S=lzRA1-S9dEeVeJ3aR@Z99;*Sa96^QPcxC zC^Qj#C(Ps-b#*B3MNuDmZi3NGIu^(_VoxoRzI~O~#rBLxMdi1?P+UNDhbg)}xbnea zMCLwhAh5Wx9b~c4F)i z4!B*PA4cyYy`Ha~chBdR<<5mW0G>xZ7k^3b2pIYCsZ&qT3O=HK1A(?|c0x9Mo*}1* zv_SAF#vl^EZ8`ePRvH)k;W@mUR~za2po!(dqDGX-%om~RSdd8&`;+`Q2jzHU^*t2r zDh2gw$98Ge1sbiFrs@ky0v|QCR{(o}XE6g_?-zXyL}QCV)(>Xg2*}0+kbm#jAq{~0 zb|K*RZopLwxW?`f4)1W&f!J92HBf-qWD3=A_7+1e5`gH{TVWaO77H{{F46B&6LLS9 zt49>l*AV8u549neLBwBJ5i~RPEzi>F>j}!8Y~~Ru$?^xpvqwSNwfX1=1j3i+T{Mg!QY`G36x*{{9Nte95_bQq5poiH zjAhh7IN)OwHETj{3ht3$)&fJld7{OqwueWtxR>j)8Se>t*DM{j6BOWUK|0qEU@pEp zb?+UlRt2IW*g>M%H|njwySe*)yX)q3Co5la)PvF@(KNajyNt`ayf0fFT`A|a*V4IA z%jlP}9!}rfN^_cT#dU1zKJq9hdZO}N!5nN4BtM-OJ94e}cxJKWhs30dSPHKAHrxEI zF|l+q6WksW)p8fn!GF=;N~IS3D{DZR()fvAu_FDO8V37RAJ_7aac^l>MJpVhAA0Ro zz{&hrL&~fBm*1(WM26H|1~my@A2bxHYPN;z9zI;M^{dn>OH`*wo`XiW<3Uw5t6n=twJ3*`y=x~G=pJ0xc&JQ>h3>1viz54R?As5R z%7L;Xtp??TLhadOG2;`623wQKamN`XVs>Qmz#luX^inx?t>ss3kBDG0oi-e&XEgn$ zt2<+;i;1aDijgvF_;sir(c|mbTo%)b%Y{}kue9wgy`A($V>}fB&w=1t@8E4BK+cagSH*aPy2G9u}^W`+RD>fFyWy^-TZkG2EtO` z5E#R44KL7%+@cjum6;if;N00p=6H{*(~D-54kC)o`LjH;?2ByI!e85qXX+guT$4DffU9HiNWGilKgXEeVfe7d@L@-9rY=wwuHbB(S)SW` zQHYv)+684nh?2G>#YyQivRx7zDz=Kw4>nV!=O)r>d})ltSnhnPm@>Ik{00t2v| zHAP~DK_rJK62->CXo^@1d204s$p=%F49yL(DIXJ}8KQ9y#b{T;!tbHewR;w4O%p}# z1qV|fh$WGm>eos0-HvRPkBh2S6&@-&(u)jMLU93KQM6EP^m0Mhd@JOnN*$JzCY?mB z6;7ebfq4$}rg)ZQz39U_&p^<0?$ltyi>gsJ8k~tlL4W^EQaN5(i$_uKkH%xAUQrX# z)anw|&XVEaETs~~A1z{M{N={)v5!4cnG;pVO0L={j&qe+PBYWeUa(l3uqr3_cvOkC z^-4=bKPE)0j?{2#*UF4jMaTb;Z1_CRn73{7NmP?%>cZK9L!ek#6OWpuTwo|M{s(YB zL8#rKorJCco}MjY%4k!>vK~z2nxa&gQ>?ljO{pdW(wXh3`H^mCF0p`9oQfrO z<01JiWE_!`Ukh;sdYsRloVr0u9WZSR(C`2e%+Kd>jAA$3cm5@UGL|B zcO?_T51mN@Q&bU>MQm)hTzXR&!aGy#(;7!l1veMrfkQJa3Ots}&_yW<&d97M{g>LH z!F^=GrqXqy-Ku3b)VMLDK`qQiyCk2mH0c9S+QlW*!GRohd4-=<^S*D6JD4p#wZ1I! ztANjkLTDf*f*)B#w1CM!2Sv0=M)4J9yTbY%lnlR%a*U3jvtCJ#(7o6BuUyuEb%p5y z9H;rE`{s?s|H^S11|}V5MyCHfQ{$dA;KhF$>w(;iX2iw&nX&X|N;S=n+fvDHx=v17UvqNpQ+-%7^0!)3P}!Cv&l~)8I;ja^>T8J}vYw<}-8Za`XSRl^>hVSMHeF_GW!WgRxfaGNO^Qc7!!C~bvJ`2V108f#_?a4VXQhwh zI5#3&k3;)ij;#h@VxE04Y$()Tb#Di1k-wf%wQLpR2S+0Zo32C7*%8lahfHKh9}8%? z-w}|N;Y!bX^T8j@2q!&%LX47T!li@$X!_{Hrdgo4`(s+64qC*T8HGCo;l=`uUC)$$ zDBAS#XDrt$Xv90VW9_jkmDcYP z_Wk_)&~|9>9txEo^xoRpIDh>;3Wqlar=EUc9lr2rWcEwp8|rRIs7{OVF@EC~NE|mZ zw`GQTciaZgHBmZ6Q^4Lp|7mCRD7B(BsS97^<|_GvGPK9UDqL0iL$FCGu81zxp4z?K zwbGJKJLri!VzBQ%A=|ydXO;x1%%XsIuFFtqsSD?DV&Tu@ULkEu<0EIdJ5`(hqtX^F znDfXMO~5IEc|?0Za=h(jpBT$@?c2qbWCb;DZwD0Z3%9k$=)^{EtWvrzFCU$$kh~Z3 zW4H0VMEz36TA-eDtxg&O!86MD+5^ zaWgIZw#0=b;gNwH(!Un1$`FNj#jvBj8n2d+~V;ItPwUlcOm zpJ?i0BzhE!c~Mr;3f+18Rinnt6ZMKzc2w%0!rAp>bGBw`_ z>Iu$zsQAL2aozBG*o8LueX_^Q?!eiSq?OcBE?0ug8_qX%_DA$cv+ZM%^(fqpUC*3J zJ<4PugXQ{q-9egMO8b#&5yujrY$r_d!@<48SJT6)PGQK;J+lS$=SeIv=?r)?8P4EbUu;)=c`oQoea|CK?2#z4s+IT2s?iH)*cQ za5>asE>}hTyY=eccC%uT%oe%3E!>79?uKCPM`>OGeA-ltFH_?2F*zTy*$~_IZ^acT zVU5bOn%2no;;7xKd%j~ANf!uex1E+e)R~Oo3byez3?W-v3Tko%32CI=eS-Wh@m2I= zJj55G2007+MnK~r8Gf>KpJ>k9>cir;mFhJMrTA` zXapbmqSGpaLBHcqrw(|C7vr`l+CuWO?F}xwta&Bj)=1@hD?aWqkc)Y8XXGL;9EKP6OAZE{f3e@ICCdji{uxxOB$9Nc7G(_o)FzQXL%sdEc zh#-(o^wIs060%@AbXM!H(DTjI08%^FHDf92|2S? zS_){_4KpL8|0 zN;mc*QbM_@-Og(Eo=qlt#BzAACZdT8<5=u+2+C^a-`SxD2;j)VGHm**qr9<(wt2ZZDthFRD3z2=| zJ;Q-IBY4d5BxC?K-lSHNFpRmWHnZ;k#9pE~3@YRH+t>;O+w$!o7bK>rhTf}(eJFkR zKqLFhG^*Ns5aInnR7~UZheHHxUj;jMR&z@d2MmqupThA|pKN^^ zeeh22CdJ0c>@vKJ$ z>#Rcn>n!KDne8cyF)r^A#Id-)vNNhsAXK+n6JoU_=f^|8YuDOPA~YbE0eJm9#xfOxFHqJ< z`yj|MbmWN081ZImc8Jlswd9=^-B87~q(I{G4V+KnELFTNu>J_n5^grRdN)+y=|tFG zG};jMPuURKTeo)1m)aTBYwI4(E>vpK(K{X<&6lEMG&{H+U6^E-Pd;IqRe#30k;FPc zAY7LjeVeE3b{P%%9^9$XM?O%Sexz8XMOU#K%d?Gwz*V3Ryz!A)Bk>|Dd@;Es}c}x);jrqLUk#M1qkNHR`+4FYUg10O^XE+_U8@R(u{VVlxK)emN z#I+)B^VRjRg7&#-oC9%yHaNOzfI}`<2h+!+Cf})q?%_tmziiR}l5GFpH-rdifQkxs z7Yu1-_u=7FlKu*cxXd{rS~+HkRqxSMv69}5+q|3l)E?L9?zzXxXL1@C{Q0c^9CBdw2z80iUX#NCI997MEL zc_r#9K)b-Gkpzks3rD6(Ho7=Qv<*N6;Y<- zxbE>m>=o${Suo8fbrT0nv(#rCO%oB*RMdQj7dz8b^h}2|A?oBb<@oTl%TBEo#MV$$}wAL6KFqlZ_B3br_eh(bTpQ9TIoW@Q~_%uQHG z&ht_irYYx@=Qe>8{WM`5lni{bFxDhHFsWr24nnDIO^hzI3c@T5*XuKCITneOOBceq zyk_*Hw!|$E<`$-Lg2^OZKNj$T=S5&GY?G|;MtaL~?b7KV57!Xr%A3ePug=pZNip=b zDNH;zgZT@0K%5J#oipsEi+bF#cNGZ>o;b*l>?|JnI?|nJ6L^~4s;l7Sw5lWyyQxZv zYZZ5p!N=+8-FxtF&l(TznE8>$aET1OLRlfGLEOs1Sy7}#cM?RIsL>R*!x`jtCl1TL zF$NRS@RNe+0tbzik2r!GPnyptNS`|`_Usp{+#7P1nTchQ8|x;L8r({3KT4L@{j_<& zuobpF)n4u=(Gw1z?xWwd^}o&fL5@cp(V`t-Is=K6OG_--h)5D!_i?>{oo6U$=6Z-O zF){xAr+5U(JXz!k=v-I*=V3CH1Z}?Sl%wH?LW5Y4oIztWQpe9i#MaowxlX5uJZH#Q zddQ#i;)%6g2ZT9xl2DN|r(lch-_WfRRSdk$UC!KMfUs|W!iG?XkjM?O=7+k(^1r>O z4UtSxcwfQ1-u7TTGBI^9xye*PRI+cUZ88jZjozfiAzInk*|h80#v;pp$;$w z!8H3Gp)}D2LfseTzoTCA6A6V(7;Y$=H88=`n#zKWrk4)ZgY2CLI6j0i({od;!mR}o z1W9Bry?vJGPg4%72T_L*%Dp&#~mZ@h9hGQ&FKlUxDQN4>!Xa~DJ%YC!p3N*Zer;Bu*dikNWXE}d^K=Lv zy&j&6Sm_;RY_wR3mlT9E zv`U`~Okv)>zF$XCt0LIU@5;GaSeM0usc6~ImtB!BlDFvBR`er* ziURD62Z%amUZU-w!woE&k>2ug>=Y0=y=Iy5>{lHXSLUJV6nTXiims*Et5oqjUED6h z5a51f$oY~tdTH{LDYkM){q^5a*){G{Y$Ff*>yuE~XD&G=zH7HTSaZf4c>On{gnsn9 z*>wPcBLJPm{|*8(vgt50vHeA0>rFr_(bn+-al?x;KsZnuHy2uI`WzqLY;&|ISrwSY zf|6Y4@L4K=WH-0HO-Ry_#8zA(rk%NAX(_bd1rJV)se7X0WvRR$p2HM3M%C-=N5$ju zEZJw$BxqrDV4r@G1+dH?n`d2>M1nlkq%MI@&rYhNjD< z1|bQ2cW`-v|FOj0`B-_~TXomL`kvgoIYP0jY(Y`36kGT1<_3FLJnyPEbv&x2W5e5M zi@W=s$=QEVOUMFhiGP%c!+;Wzti0><_1S+{B8vWZC89e>gtVVwyhJO-7ro$PBU=0xBhIp~oa}!B#EAHR#fa_j?tDZ_Y-`qYT<0cd z{||ozzO}yj0pfr9BO16CX-roEf5cmsiJol#bEMZt6Ki*5;;}_ZHQX(B*2MJ1p4ONB~hv^m4#(0-!AmD?Y_-m@o9JLG%;%!tmWfEiJ%B<-1Wpo#rI%!u57%!qm< zf6R#d$Hsse5&yRt@pL#p+UXyIg!Lw1M*M4#X!&c9kN^x4p8$h|-@BVOl-~R^1rY?k|CXDf{do8o*<^oo0qH9oq?RIiSkQHPXemB8O*FCwQw7lE)vQs$r8g#VU`Y3emz{~ zmj)hOFTp$E3cl2>j9qoRrY_%gQir}(;?&?2NKxxZ#&{=&HYv*s9?415ywpx!8ogrb z(Qd_d)OYRSHGjGUksoMQxa3VYnbPfOD6b@H6%G-FDbyX3KuyJLC>|7l11wq*A0bzZhum=ljn zo~Yj(pho129stycN6+5*sg~cD{D)Z~Sq~|`_44u5wud)&du?!rgYh)}oc1D>lV#SZ zd2Un$>jKn>KYptbEB`}{_~XB-5q~M`3ZB`jesSJd?{!o|nf$-hi0N&76o1u-a?l(C zv_5D@J7o+_GgMW0kqVSUkVf<7+g4~{lwZ9wD`va~G+xz+*6AGTBPbcn^o#Hytsbjs`DzmM~R;Az5srgT2JZ zEDo3-=J{Y%_1>{QW!kJkVT3K9C-!-tc7)tpkTpQh$P@TI_E0#gQAF9`7@wc#Si|x1KI1HMJ7dZJImwVwQ zPw%0P;EO5=C6D4E2pACu!GITJzzfNDhTqC&io&@f7mxJ}!~<2DLv<-T1Hg3!*0QZy zFcOU_7(eS!SHr3r$Ejn2vtezKEFFQu7*J(zwaHjWvwRCwFfjeBrX&YgB__(q1Sl)8 zz(Qu(NGQPEeK$%RcvbzpF-Wne%y;K%>HfPz;;$O&@jPMZ|{3z?$wU%mb1pxIaO$ zEnz<+1>i@70sM%B{Y4)kt6-r4KcZlikvwEo5vmVoUE9XURIusWeNYzJSetJxj4yDx z>bhc5u<-)9fCw?SkFj7{{jq3T9Xt-}vrZh=P==zxajs(QmM2H!CG9PBaExoNy$aw( zoS9-QaMheC0=$TyPHKc0B+^h!uzIQLD9$lJ&do8{anrGI=Hxc(n%~KrS1fNnnBhcI z`!IC3;f8bhE;jtq-82a+)mx1ahd}c6KJCK#oYSsQq8vKes+PivLh)%PUxzeg;_WdS zUk0jbO0-x5%_*X0tCcocZ(rhoT4qgvm#LsmSXW<^#93R!Qw&A@(c$%(_LO4>r+pXL z7;oTD91f!Qco&i4z7X84vnDwEkNxo~s#N~V zt9StO0XkClk5`dNPeJ+m>9<$$1_ez-ZRC$vkqZf?Sc~P4SJAT<@G3SN{P8MIb*cki z#a{-0yo#2lA4I*wAD<*9Fq8gx6_@YSe|r_(82@+`!=puR#jHxC|9BPMV<OLAP z6NtxG_NoqM?b%WrW9h_4Fcqj6$^&l=O!^8c#)=x)4ZicwXF^o+&(Br;sY+^YUabOn6XV$Q0mWk4Z^dG%R+gi=AkEkYYH9&$ zVd1e(aDJ|18y_HmnI0Ya$FLZRW4<7|kOik~Q7sdTKsq#U`)DB$?*8KEu$CvGivUfu z0MFWsOkKmLwn3CdF`#^&z{O}T7o0`WZ^(D|jfB{fC8j@!!nt9j?gXt4z2s3Xteyze zmQ%jwI-Zk&Ld%cI1e7$(2X_+V<9FOe!w;3eU4x~)fR@26jx_Cl9(ocr0-G}Ly8%Ri zk8NR$gB0$>JKvTq;XMc1x8<_JB!E2PzQ?z_IQF+!(Mb#)@GAN`{6D;k3|jwq6{l-x zUcHLrp`RLz$?I%QivIB`y0-lGDmqxBm&p$uuO=b=<5fKQ@{d>1drXCQz458|jZsH)=LUpmOawgCC zLLYa6VyIt8f@>mg1hVxA4tN!te4P_Ag!hE4Ng(?Ox-%@OTp&h;k5Nd@3(~vFD8F4P z-GxJR%B=$uPPe-YZ=G0qc_!fcDd<&axDE1KXP5y0Bp3kr78Br)4nzPU1RWq&jM-dL z;q3{n=V6p+O}$0LYwT5M;SbXWLv+EoBI&Q^h9;Mv7eUNarV*eBI$HPjaSs>X(7zH8 zXdzVm9(LpF6P86#9S9G7!GaPj{Q?2DA0RQ|1ksq~gL4yxJA~J!wc(`k>Y!)_KAOk{ z6pv0)zZH*SC{MFtKAPI9L@SY$Dz^%sp`s&Ih2)A8jB;Vv1zD6|r6Zd0akRVr!WV;8 zgIa7xQamBl+*u&;Ev`2t~;^T|LI5I-q(Ty@$cNr|$6q_!>3*z!4KS`;e={|`J`Y9^Z!A5>$qyh{S$&zM76wrzUgUf1Eqe3mG z-zX8Gs?M^=sYPUHRGBj zwx|u>5kLDgg5^RNqUGCXR;4_-nX~7L`ky9+#W)YpbW3=F$i_XywPQw+xLd}>T$I-_ z$l^0`-df(Y|GRev`G%xYQuztRUkDHW%^Nhc|1EhVBimnj;|6d-n=>0-x@PQ@!l z&o|T;gkmEGlSkLTFznlYF7TCI?)v z?6!|~N|1EY*%3*7m=7PW@FVISeMSl$tTfzpLjyKDK8a9j)LX=<97aUD{W{Kq<{R*9 zYc#-$VN++T2uo2@UqbQx+&&HQ3F-btpWErM1U$mf2nSLZg z;j;wUhAXgCj?MQPrM_|ainSJQCjo~0as5oc$TLl=Bo+Rma zSOHjZ=`neyGAj$586TY+pop7DHvRctI%jZ+MVZeM;lQs?th>>kKvl|GAy2&F@L&U$ z26`VIc59wLdJ&YjAxjI=gI`DvaQfYUY3@Y8t;&(&n@1>ZAxK89r?V^vdo^K$io1FX z4ZL70(Qn_!x-DJ#2DPO-(m~FHanlhln^s5@7>t1&NGFCXhR2n>n}c6A?IybhxqZ*w zA0{j7cx#Tq@nv_72;xe@>9HU83fT?eHBazGY~Jf$O~$JhYI%X1NNm#}jxVfMMdt$~ zJ{D4i0#?h!z=ABCm!^;x*0X&F{kqec^|ZlF)eYIJ#S!UbYdLsL)Oi>sPd765n8#y} zc`34+HOa@Zp=Il_7Hksaa|x| zC;jPP+Q$^BhVInllOQ_3@|=RUq;;oYePFRk-AYmNNK%3~Z7nllnoDNTUjw=4ksG$= zvUBUzXke-X%>d~_n}#CRf8IT?km@wZJV}_K$Yb14_9V1Jds4L@ChCvj#Ou}UEmx(?qJ$mi@H&1M%X@YEo7#gr^>rHcoLX^m(>jo|@bgopdt*gIB+(V=k<+ zh_e6;zWV-^!SBj`GdKszzZtw@VH9BS+}{kI^B)XuP4}0<_ftD<+R2x0VpZHPwqdupEhco4M^VFwD<@!WBm-!$RyGx`bF;Wkuj#LTcfZ`$Yv%(93T=DN4m81Lr~h#o)FSa(@}z>>ma{9hxan znVZLKr&D`+>t_?!u6bU3pnHrs7y~jamCYWqOX};(L$@bniizS=GU*R!8xaiSXaQ{_ zfaLankUaMfl2fTcnlC+su*s2UapWLRv&-};TnyfEebe{GrD1r5?nC)M(2ZN9Xn?5< zNF7xGsiS1LLzJXU%;WafX!EkQ+_!1s++tVF+~Tx&fte{PwQK3jJ==WT5Q&SN`6&w3 zN|E3n7(r^?9VZRu6`#ucESac7EO865l=Z}l&OudWg^H>b8phlDf4mJ6D}y^Q;{Vfcp=Zt7Nt zJn<-;EG!*%X6GG$b=dQ>OY?wh!K@NF;M=y2evor^Egcizyn4V&cQv5D24Bh8LX%j) zus1#d4+$4AF<;SRyo65DV53;-Oe7j%z-OwLVGR28EoIavsI8R*j=9wNU{|h|ht~q_ zQA*Q(@DGD0{di^Y8-T&R4p7q>i;tM?JI-VxcREOMg3uLFVpvT?Y_S)kawTC z-Q~b3$jr2$uqB8FjfbQpYY$L0>S+LWW*g+PUI#wzl2KmV|y$2ICavt7=c4aGJYXmc9%uB1IsPMFV_s5@C^Z1KQ zs8nOed=#Epi0J7$P?fRnk1_g^sZ&YOFny93kYGrxIc86fHrq7*D{-QkK%-9-8!J>n zcazsk(OxuffubUcos5kaEf@40_ApI)NjHIB#F2Di5`Y#4Qw(dbNsn)yEz3^0Y=( zR)xfxx={%!kgcO`9mUA6af5cR4IpkX5I~|8kkFhB(@ap($vN`QR~`}b8#!Y?A!9$e ze%xHpbRrExG=Z}4pt-R5VtnwHnebjO?Z;|ltwtslE(IWw(8njv^Yfj1npad)J&anx z_RXnuux5NYfr2QExKo30mpHPKJLx1hZ8SZlLQv_tzk!+}O$_I7Zb&q!A38(t%{kA1 zf$&Gb16l3**8|D-kOmc0)c7gLmr5E;Ag9p7+SAmxMHpU0xk9P7_f$q<#f0u$*?_t~ zet;3#^#Mi6XMC2rOzJ>tVYIwJ?c=WekmC{hb%B1n*LOb(%;1s*(U-1h6>f;A;F2th zY3`fVN82g+Q#aBDQ*8yZLTzZRlX3A8a#6u7*}Bp>MyaXFi?gUfI3TfF-_GENB6 zNau;|v&fM^4WjhqS#w)JOtKuIW1Oeu^nRe+02Chlm%<^OFTL?!DIB=s22n`JJnpC$!T| z>S$UL_$zPYf14odDDDa|!D?GdggNo6)mFqxNribe-i(0Gw)kb>d7L|adDQjd>;ZZ;j%FooB+1|LYN{dYw7A@Z~Y0T8{> z^nYy)=K$7lj{kfh{57&rgU@*req6nmzz$@>TmR+(8~1ClG<`@|Umpl>|BpOig6oMb z2lDU80?Y@e!}ebRPf@N?)NKA%SrX}gp;1&kE_J24yx`~tJ===kwM{zRW2|&a!A7BsqYQ`l}dzdyX~NTnmPrRPv? zELGPE-;O!UBzy~#+X<7JcC>Zo#ByaaQ4C@X2M;3%LsD(#bw|WWHqvX`u*L~wd@n-6YG2CbG6T_zAU{c%}g8jn0gjH zKavx_y9zG{o%_jn*yMLqGjN_nIKnK}Uu=5u%P^mt>a_^#c9_|gy2Ne=C`h2;Cv&jJ z%&V)8a!qOR&qT{w;WpQ$+1AP`Xjn3rox#bHGbq{EPRm1Qxd}8K_fqt) z4$s$6;CUGk3KV?nwhDE}9oWdMZoa`jK$-tglYuwx`g3@IWrVDWjp%j3G6Vjr#~nTmhcS=EM={4h`+WE8}#(`-xzGl16BrLefp=lHykZEKg*q)23bDPmlcsd{Mj2wDcGa&D_oI#W8{t#@{8_kmM%727Odd0 z2H30DHABWDS(v^-1LZyF3-#6jr>?%KWgOBqQVovN`;sj%s+YW?t0!&rZMi=9HAg^i z4r_UAelUr#4xJ44L8;$k zG<#k$Y-MyB2wWmaFk^hZK0e({jy`D`yP7lH>>m+tx!C=5YeVi<8$Qo6&D{{&Iw*RC zrB4FAAkoujNfb>ZY_Y(KQZ05sdVd02mbmCfbnGQ7nZ*; z-n=yS3gcMN7GF=~rD9|l8*9wuJDPXX{xyil{MSL;_U|B0`g;(k`)3gEe!G*afYbXJ z)7kkG{fe{(773WXg@H66WEB-TP*xC*QsF=}#3TXA3c&|HGAu1LM8w}tZGxT4$c$pf?(tC~m z(D>YSH9L_Ss6l`S7nT!vtU>}c$!+`~FgZW$%{UTbaNF#ZxZL=hwVXuq zD!T?KOm-h}v5}iOx%>B|q&5hqBJzRzCc5)(<4P}yU#DkRLGIll&)=Q+V&8^H zEHZW(+d>*uZ29ei#8Q(YbePYd3Ot7QK1F>n$nFj6rKqq;=c6nlnzBGq z7srVW#S2yRaSl+C&D+nQV8pDXsM>q!7Xj)ARrbQTNn?mWn!$GHPntnpR0HJ`ZMXFQ zkY*_PC(V$q2BaBm^7}Wqfi#1DHIQaFH~IfcGmQR8GeFn=lV+g35j*bkTlD9s9eP%1 zX3lg>5~9%}(E`#8q;-GN478~<1<_;a6$eXy(hQH4d3T-Ar6X|-K@^gVDo@)HVT(#x zfNFmsl81C4NGFVhkq8>ks@ka8{}`NFE3^sA$-jg&c4i1)K2J`Plm(iiQ;KEP7{Vd@M?7$~8Cj7Wla?Twn(b` z3=r^e<-8W+03kIpHdVlMg%nSHpa-n{dJaV0I7Hpm~=X&iPDLg?@mm?uu5j`qsw9n1t)A)vSFy8OFVlW+0S2Xy;mx44S0=Pn=e^(oePqTi|b;feVN;pX=v~ z?Z{j2diaTPvWJidO|T+F2MWmeEUzovz42!WhAcFP5)?3m$4A*hLkbR^fB>uH%3;Pl zhIl1%>@ zSR0Jkw;kH`!uQryG_aJR+Q|z$r)>sVEfL>~+{HROoi{mjZhud>XHHBlhbL)5E^NV>` zb`B0V7mhH)>sih;2*M%H(S?jDqtY4kb(xiU826noPL!X29R~+S-;rrO*4fUf=29tooo)Ih1X-SGoZ^+i1E|=|H$piRpEb$E`0nZn%ctd^=tO zaaZUxhXt>W0~)%&eElQ@73i7Lh+b(#ujRWH5=hVzHoAWRF}%YNx|`zChVFLavye?y zD~5Zs4U_C_#jfGsX|P92K6!*c_;u_1z%%<*#_^aocS7!y(O_;V(QN&X-^Q#F!QaNL z3dg;NDGrJtkUCIoLFAn8a9Yl{gjdK*ZfR~)9Gi0dM#r>h*s+6@%0VRKKVRAeYz_%` z2(d3IEbYi44PI>N+4Xek_6{Lo-|&DNrnvO4B<*ooRs5v7@)-|h6EsC}m7_nyzdr)8 zdrs=9H*k6oLXq@;i)|4&B==0R`7_*r9`!2fF8`?r88F!1vPUlbv`_!u7hJ0u3KpwE z4DRuxo1B-+y*E0W9U5=Lgl#K}g`T<*{~S~6k*R`w-X4mF!^vO|GJPdf;~nV|Z|i}R z>zrdG&sPT$?FSDGP=;ieOdKa{H13Xi4Us9`Mre0aCBe#H9Zv)hWacg56JdK0JH0;S z_6M3!Y{_r>%&bLVyQPpFe^`#-$hWl)^m+9vD-ch}(V5F8qJcXxMpcPF?8 zcXxM!ySuvu4esRYU5I znOh_CGY_+s3mYrVw)CzmSv&8^6=A*lJIM!#sK)akldZ8ihv^%gR23rgZoiV0A1Q)K zM7*=0+fr*yHJD?EhK|ratvkrB=k{1#W>f1|Ok z`Vn_M(Zv97n>vqYg?u0IEfyfo$IlHrX`5}=&Rg*K@eiA>lUVs#EjqvY4QhQeVN(~( z)C{k)t~sug0HyO^qR5-y5_>`ihjsdz`RRetSO-Y-^lGyeU+N6SRbYW-5M(9HZLh9E zedD|?fSF4I+@OA6>zsMCsUjrN!cVkx^I* zln@8JgVi-kGs6N;aH*6%x#;eTm^!r-?Q--yG-C+rYNwG!W;T1w*JWbERt)RTR0vAs z{!xH+4OxkemtL%}%Sqm?i=#mXvG8nPbLlX>HLE0xaQIgbUYkt=P}U!r`Z+hiz%02N zIW52NN0G?FCn4`8zp-bbNytKZkq@M6Sd@+x0$=Kfu(aA8qlnra5|nJj$O4ekAn93K zKXnd~JcKpxdE#~(UKH@&q(3=X2uwT%N9ZC0^$7HqM;YP7-g)R|iMHeV2CH+-oa(u{ z`_rn9VEENOLm^6o1(5kQPPyWG{o=Kf!S^Ygl`a3rg{ZP*nswU@2J>h75v$%;222D=V>y}x8T8!5UJjF>tde%<@7N2Icy1=!(& zXA?9);8Y{?Vt0P9)}5ld`y6D_h0vfMYv(&4L}*xU=o;=fGoN5Sdn+8r9v0GzvJch` zo*V&_d-uZnF0xB+A&oYv>lQ5yw5ooSovqo>Z;>|F%Iw*(SJB_)%?1^@#GzNJ;W7&0 zSsS~&V%9pQr|@b(s>;&J6ObK$?xRB0MWC)lwPgPdL)cl5t$)^%!R5X6L&~>--Y-tg zaqFQuWD+%mNu=;ubf&EnyV1$5)~#!)<&Blf5eN4+m7@(7|1osm)-JOPRW*2fpr+mE z`SIxl^fgfDb4yKk2|5(f{-Glma>|@%B2#LM%9jOyh`js@?)+-`j=QSzrB5?MGcGV| zT@ETR|0Hn9Uu9P?HCOBX=&T;=37!$XcEL!?*eeGH0K4KVsFmt6s4YtV$+*(- z`$%akca{8;_ftHzt)RxnPPVla?{YW>@2YaR2JWuf6&kJ1Xd1&oH>2;04-2;_Jo{C#d0Qp z7*IAYes*^}1E2%;Yj9UJG4Ctivo&e`{=WoWWkd0?85b_uKD>}-R8>5cu#`qav^IbR4R#O3xmpw z{$Ovy*_R2gdNS09!D!%!Q=5XFeSfiAe{a*7wlhJJZp1S!PZ}O|C6Q^Io!$? z>+m_&ff2EynWyobKP0R;U{7HlUo$0ds$c|PvfAK~gq>A|(e0$zu;BFU34(50K|${T zr?GN)406JA&G<4{W0*pGp$;U$516%O5&`fM*;zzX z3;ubi^?x3!Eo)4pZlL)lhoaQRA|?7zyzrcDbYfU6DT!jLEKLryc5-yOSSDE>G0C_Y zZ(8fkP1zCgaf%!|4j#74L%pV80~2|qYn`O#EkZ9SPa>%z>?R*wqAljqb0B7TORK8hv}qxZHw+m%RN#< z`GN?^6(TxV&Siw*HHSJ_{^o)4qz%us6@G_~Mx;VI1gi8prY*k3yiTVqB!+>iyP zs;#`g#o0t)AtJG&KfQ_S6`eCpM;z0gdQ;qCj~-^XF6~=dgp0#1itM{N9Y-@cs;92O7 z<53i3Td8$V556GA$_YUY418NE^1ta8nbmECogrvbCiCY`9ChqLBP7zUnJU)wuulB8 z?io@d`4W_IDkSgMkVp^~4s&h|@7JmHo)qm4mc(aUkc1sh6&vVEUd&4`7-2Ey_&Z|X zMeXhO$Nx;o^g=dmA>i4~W7_|(=DBRZc`p0E=DAvb80kAL{Q>HU4|qsh8O~>L05Y=u z4TEN~b#Gyf_!=)v^<5*BbJLlPR%?YI1vrQ-=ZWxGLUR+9sZF=&fbqn1di zi?0<+VU|NqLBQA5i7TpD*c5XtFjAib%XZ?dVb!GRuEhQTlEb;7Gq&dEcVs}?J-XCw zg_}*lmT;5yH-4D_@niSJihToDT`Yx+#?^xbzDp&uw;f4_rr2Deh2x<0paDzCG6X4enEE z$6j^E^xt{P6}=V=a`+k|jzbewu((4m9f`Sign$9e%zpxy8{bPXr%kB*(i|=7!tXB_ z3qE5znKi_T#rM)eR^qjPI3vL9`P21=&VZE__hW1cL3Is2_)c~G%)B$UEL1dQ{ZF} zhlmBH%j`RdocBXO+lTbtdL7q05lm5^KYVllVXAM!?9~wCcNkCcH#OfyXw{4vuk>MS zyLLI5lL5`D!NAdSVcZlX8DJ z`3BcVfQU=pc@qDd-;cmlI^~v2pNSx|@cWfDau3X>$h@*LDFd;D)A!6*{xgI3yMt%B zz?D|kIG=2UA5{m<13K<<`M~P>9*m7>L(})yb9<>?%!(zuL!bu{(8(`M* z!)4~KJD&spT%Ol&8S(MF#-@PBk&heBy5OF_ttf}fSKBr`3;HWvU6+gxEjE6puo*J0 z*uh_ctteAJ``{DNF-;A@a6=mSyeq690kVGX{eb5AQ}3>m=FFwRNqcTwfY8*p4|&5vaRiS?K5am7v|q$ zly1Zy!DlMCKYu+wZZaf(JjrboL(g;_PY33lZ$+2f+Wrb|ysEYuLb~WY3nV}Yx}Vo> zE#&RM_;wXF98t0$khP@GQgT$8x2W>Wc#Ujm!nhun!K*U=-LTI0#%Pfa?fw{ij}df;BI<7f|Zcohj=IF0;zwG!8bpLpkn?O8jqA@VpgPnNlLRflR0bz(rnW`w6Or2 zccu0r=Rn}LW(t813>?Oe0k)SLw2uAiJr~Ltg%p~VgM4w*AHW8c>`&dSUJJq~4xfHi zt)>DSR64J;vW5!X%&c2V`#tyMfw{}6e{+|Ub0?_twwX>^Bu`o>-ycf#(b0);76iy( zfd{Ps8;q;fIaU+fJRrDI!H!z$Cu>Zta*BF2P6?_Z3`M=i@Ek{%Ij%vq$bdcFiaP_m zJaK5E%Zjd)?D|7De#GgF(DC@e9GggZeu#}itj?Ncl6g3i!A+*!zc_jPCw7_Q`FV+8 z&nKRk>H{g~{+QFR^w}S+e1w45SHKYSwg1-8?>jUsZweGFFY)ekE(f(gUrAuL1* z?KF3ioi2a5$ixM26aWE*WQOSZsw?9UvJ>`@nfb6wZ^ z2{VP(r&b|sZL3h%rb5itGO_{`W`>rrwQX|vBpo*!@K+sp=+?o39TsHq%`~mWTs49& z-DD--gi!kO4ILzHpJ|Bj?gzHug1~;)KFal;gJT3Re|hNJaD-Jq*Y#NTooMvvuccnl z02>P3)k;WNCp358i7(czqEE)ZUf6{>_;>DoME8;-{i|o7!Ut$s?Q3cS*0Jxtse&p% zrrGabK^!NFM*^(B*s41CZ%~E@bzMjAwkmJX3Olv6M*~%Q=jg13>m6l#&AQqNMQ+8! zCa`mMi;{nA{-n@~ism9e+7~AVJPx88IFp4<8-OT%wKV9cu_`$!Eu}g`N&v^_U&!P3 zx3@hixE=WH>N3k`r={~XSiwaTa@Gn{nmBLyQi$+!*r3+E>%05!>b8C{@rWOl;{=CQ z$t_)R`nSOW6Zz)d*Ur_pkQW=Qhdwp;tbU2%+TVxX$YiUfhJlT`>o{gLGU&VP*JqdN zA6&dIJ-kLOg%@Xb7T|&-?!VV$gNqus3Mbx8lOb4h1xn4iVoPZjE=4NJS^r6Vc5Tv3 z4*Z-Oop*+|aJE_wXa39a-4`T64Q&TV_K?VC9*p zU3`TiVRe3kG!)Osm*Q=JT2YX$w%KSdz?u3~#YF}GMa3;8I3@;*#En{g6=5vRa0(2l zSFJ9VnsS{V&eNyMz>>%4bhs~~5YZ@bmFaM_z<4jPp#5|>d*GdpKI1DZ`#oSDkO%@H zd?RpJ6hCG#QWc*BOlATYB~5$-ChA736HDYn(0RTk{I#hmliwekwnrGp0Bu?)3$!WV zowZSR94Jw_v-9N{01Z&0{;It3MbtQ~@Z?g0B1gx-|>3!!gq zK!ipp|AWxB!aomH>Aw(a^AAEbt)heegHReRAVMuN{)N!ZW*|aM&yM~Jp<^}wAaw8Q zzYtm<_6MO44*!Kv!+#L!l=cUqfX4qqXs+sCghqP;5o%`iZ-fSdO#dPWA~d&Wt_v6o ztt-C+JYXz=OWFxo6$&Prx~3=4jIc1;m?+g;E|-Ig!q3{_muQ<2BoQ|qNM9lPN)hh7 zSId1~YKo3&O2*THN6N*#AJ3wmk>cr{p3KX3eB||=-m-vv8SqQ^1ZPUoaz3o4kzF^s z(5*KlUlY<>BA@1=`cjixRR*>s7IIBGRR(~;V~ZP3J8~RQnj*cS57|Z~^Iz70C7GVV z9@?*zDqfoTxCWMgqM>6In<%J((a;6TH+f_9^O^3~`Lb?;Iq}+;i&F5mV`tcb>G{#d z53mT$wQ3wt6(~~e4 zsjRSMxf;`1r!fa@eetbE`!AchFYFnRPirllG^*#mPs=EJY-;6y>WU) zV?9pKJ;i~+@KMw?sN_H8I?>+Ardm%cZ%>67MZ9KFYC170Ds_CUQrm|SU zuvEXsYA)zi)e7SARO~C~+Jp7^uX zZiCX;agc4pIMDh#)n|=4&Iu>z?JdMGV_9%5q@V36ZN(cugELX4ohQNTHbp)KaUb<_ zXlWmn{^BG-C6CZ%?!%+!Y#KReCf~h?>-3Sj{I2i#5CDMv_FRH4q%`+cEbt@{c$%ha zm$elWViWamj*{E8;^n(1n&0tDGAScrh=cAQ?0$&cqy{4 z`pRKuKGP!g$Sw00z-m*cEN2}%Egw6EHMa0>`?QeEqpwF460$f`Ds7w$8iP= zyB*b}u$MIB>&R}#DZ7@2-s^**ObxSr3T`6*nwd-*hGAtBA|R>SY^KZPvaAK1Y4I z$5e>s%uVvS62CNRMJ4 znIpUw7m4UG&_c}A6w!yG_1)?96l;TP;ek?yTVE7MfTk%8K!(M*LtCk!g#yuzBqJ94 z7FZ6S=-XVx=GIq~c11`?zrw9v^?iGEkPzh%GK{~`Zt%g~qP~u@VKe7Lx`i+21B6JSR2Ytnf=etq7fR3JG?-`B$57ZC@jT= zRhuUtN4^F7HbFhS4q5OXx|N9oT_Lalx3S5qQT#Vp1GM_)uVOfZy%aHBv-0lUzFnSt zIGgVzU$Xedi3@5rG+Gf4Xp)a!#&j&g5fCp;@3ZfOZLey^jss9X6aOL_X;QUve4qXq z?mduc)oW}$(nOvBk&Q6a(h%`N+XJ~n)ik?#ZO(JZ7F5u55%I44m9X@uI!6|Z{g-oF zK&H?8y%bRr2q^K)y&J@5!B}~rF_!bm;obwGGSAPd$ml;SKkAQ!@ewL8F~TFCS$n7Q z3+CEY60T&*)}eS}7b>C`tbz;snJkU4tLk2w>RzhqrmT#zTKd|*AbK`L++jDt!hzMs zg$E0hn&AQ}1*1UbNAwRS1Zm`m!~^JO@``8f`h-kYlGJ1`FW z42AAqw6LdQZVM+EU0X9zO`30HbalMCK(rXfpS`c#G?)&J!N^G%I_ z&1gxF``(gfZ}V))h^Nbo562gu=A$hRyCM4pSFR=Uai-~lKh$g+t0Hy2drv1le4sOI zA<U(s6NlvMp_fx|(Rzwhts~)Kh9g-1dTfS&($x@hxGhOFJQGuB*Xq5`^Bf^^ z+YszlJ0Y36n@g?t_9FBK)OaaL>NSTWw#xxiOajd}wzev9XJq&YnCHc>uvmH*BH{}W z2jj-}>~zWC{DS!@gureoLXrA6wPp*K?6&Xd!q4GGp8cmf+7InvbQRt2dv)&m3fuJk zeMWV}#M6+}3qQQ_+TdpVi|cshwx?~$O-k&WaIfOxHl*t*t`Dd><$Fp}v$?@zA_`wz zvI<|CLV-Up-@9`PwSwuz&+y?e$Y&QTCRF4RZs!|m#n4c~o2MI~5o`Y3;6dInxV;2X zfMs0K0;`xehvibIX@kbjgG*Fm}a8m-3Rbc@5hCO+B2k&alY7&#xTygjN)q)bY}e5CMbS%hyi~ z|9*QS!r_2EWus0kqZ~le#DPvrYhkhwOyZ{fB)1fAJf~tez|1PB?&u*1QSNCa_Undi z6cKjc?RBiF-;V}q!E~TE7Ls<_i5;oao_<6s`KpvyvwCdP*O*aOeIr7yxSgzgEZd;T zGXIQ4jR;+3g_OgB#xUW{5zM94(#j%1+X;B#wA?;Hy5Zd;TO;OWFN<`VTZDC48eJ|y zC%+;+w)&D{ly+Tjl2MO1=^*v8ipZ?Hnv%?_ook!{hvVi;6WFl%t=yXp_Rv}%p zAhTVO1prDPQd&tpwr2sE)NjgI@$DN+Yr4RsJgn8XdU1_D$*fc1h0gwQiKKi^h@x6^ zO4wvFZVYKJi+s>CRxp~L`K_FjUr|hc^Pf(88XqYEwZ2ZfFoaDOaR@h^hkGiR$Uoy? zMU$m-!CDUPRiJH^gs9W_M=Polpp!II`=OJxMN_47C)Q5CySmgVa(y9S-je^nR z+kucRzm(8wrx&kI71OQGio~-hFvp#0;>lFYe?5Xam{ZIKF`oQRY)ofr z5gm(PZ!S)6HfvJjSp)8&2 z`-?ij)|Gf68t|q40A3o}`CYk;&{xFXNNO}hRp`Q*G0xp-2C#6+ZZa!|viue#DPl}I z;`=wZ{)ub4QTCEUm`xU!Aks zvN!^!$u}OD^2P86IR;jQT5hZ7Cqpq^69UwKWPZ#)u)8+$G)>Xcc=3M2?M9m(PE?p~ z=j8)ESO&?_xe+s)GI|&}hTfrgfWznvmLq@!Wot0%)|WtPy=}U9!rO_fr|l%SqA=C1 zUFqqJ6Z^XOje(TfJFA{iPQCtU;yP=fPKT|Vm9!JD_VH>JFV=&ptL{ByydW{XtO(wL z?=$wm`KZLw9+hAAEz%%P!|qee>Nk;ref3^Pq$eq}rij+>0JorLHw?S|U@y3(glj4H zgZ-4t7ZRl5Avu0Wdu7t`bHb?{zHD8dJH9#%eKATiwted$;ua%_FiYlGFM&oA29P?{ zbsmLlsbfb1w+{UVy7~xR>W5pR`uFEA1D_kXInMKX9}GVd zG|V`aS99%uVdH*&RG?z} z04an&SleEq4Gx;(<;1yH{T(m>Nvj%L%Q1(fjpJd+n8l>)2h^?vkxiRJ->9Ux;fC zsW66t8Saf9%aD4HV?$$TlGd$Z6UuIivuO6$>o5YplgbT!h|qD>dHbJyP}c(?yHeea z?3Ys)J4wqmigwu@@VgAKmt)U*r)>l_ZlEBj`A3x`v;c@t?n?nh3{P{{Z5*7-*FXAK zhi*rpQR_OUls?f1$QVJESbU|iW|daZ=4$4u#&tfn&-RMxw9RVZupME_&XZED0^%zB z_FG6lQZ~kFbO-}M->yteb|Ug4M8vC`X@}ecMwZgi>TKONsu7gcT=L6;idroSSs}32 zx&>i1+zH$+(g`ok+Xb}8DZ8J-4#X?xx`LjJU}(JCP;{CQ)i~UoACaql2Bc+Lm$eMt z9q4c88n~?)!LaN)`iD-z0)8hMs4}QOdd**K(!!U)j*|1_#yi9`#*4m;vQoh0j!`aA&cnLludSUK5iUTXGi3WwI-)C{oY3 z>RzKE$K{I>BvWu8eOp@LDu!M(;Pra2qR>x~ivO3>#y6FLG90=Qz4=B#s)I|qi2r-`td ze)a6A=gUAHXB{%dUKLkEkEBaEd<-Yue&9CL!1g^j?3B)AT1ov&MG>xUO4m5OpwN_pAW08 zTRy`|^T^=nU0`;;@bH{Qh9+{C6<3-6h9V6K8!&>`ATzR~)w(s5yLb6fe;=8}lha#4 zvh|DWjq8$z=dh26%Yj9v1yM{3u&U!uMIMNx6S(TP>$D3uKFw8fIKU_;b=~!JKn!oK zK~BsR*9V0RGWc{n8;8{uaJJ{7Vc|MW=!3o5-L*H+fS94qdchk?RUT#r&lgJo0hTJ& zxTvtR{AnX_DvAJ#*uE3h?4#=m>~{c8*O=XQ|Hkt{H+u$5O^qG{pKO@hZ(z!dn}+e- z;x%S3>Z>Ki?Y&7YHQ(?rlLu;&ZC>ru0A%d&9&^Gr&8pSKmeDw$K2odRL}{nR9g|uK zKW8qyZ*Jh^{xa5xHear$QHS^K{T}+CFPHfDK4D8mhuS@D&ATJ>WGL*WG!BJmoS?}&zKZeGb*+q zqlB1X8);P4c@C*}EvX+5sUKI>(u=)cI%f)RJfOjVsEZFM5|dLwh7=9Rmx_W5DZ)DP zNg{>FD)W>2m_y{thr)yxLQV3cY07_&XUWAL!6Aubzu@2c641%>snE}2MxGQrvqx7z;7ovz;p5Ez6va)x>0sZXw5{@+{_sd`2|3!}c&cqud@RqV5ka_nm*4kUmKP;u^Ar5p-k0uLO2HGDy3) zkJWXkQSoTNP(kA+746mk|)H9sr`l!qfwXi<3!h|ml)e@qA}eK3T{zlY)sA0xr?56@W0DC@g6BRs@f z@^PBwSr=n;N*>a3-)%V{-E_N^@ayXan-IbltdtMNbsGieW$HsS4J=LIvZTR`0+7FTsDM)q3 zzFZtM7w5-wzN>0X@^JL7X@(M7Lg%NdLF6Z;uBLTn={~T2Ny#47GVtJEd9O%j+YrXd zagYW#6v7QDN^&rkTD23c7Z@)bGGZ;i9tpKgL-VLi5y2lX95HI5y-_C@!LKlhA7-Mu zQMZZYRzvk^`dK)G_JY3&kF`75)Sy;CU(R#a$H8Y&7Erp=91 z&*l%-JbF+8Vz$_30~A~^#~?oCZJ#A)oKGY0u3rqRJ&tQgeHU?my*zaDqJJVjm53*K z2Y3!EY&kk-JOnY%PFi%t;N3R*rLH^8^uEb`T>-3Pj^J>CQo}2(=)FYVi&U(o?20sx zApVBY@35L*{~aJ^?Unib^bp(?-b><+s119A(j}R1w1V8_<7axTur?Z5BS|B-6v#Wc z1Z+@7EyJU=qM)`XUiXW9BLzXNHr|(yuMpPnOSa^sW~$;%^-$%U%aRnyW)k69mK;}% z*V$FzAt)a$8>xKh%r4kKR5?)dwXBtEizshgzS*b#QNABH-O)W+4x^DKAf&h@g@QI~ zMix;aEJRg{k>A`=9w{a})33^SmQe|%ZK%ksY|^2EUM8tdqh$F_m`7<%A>s%L&4fS& zycku^ ze^5mkxw(A?b%N>V^qgH5*cl7eesJ@#^>px)#!2C(v)7ipCoyFn83pYIfA(Q5|Kh1! zjh^)s*j&xNa(k2XA%je7s0zao;Ynh1ADZtljohOf!1ILj>;&a$`!>?zO4q21V4Aqg zu&GzsMMJ`vfE;}ZWh91Hp5XkXu`XB4PkvMyCn0T9fDK=kJ_ps3j+P)^)gUN?_~r8o zTen5}EL3B08EQZ=j3Joj`iw|(iHd`9J}9bgy+E{R2Nz8GM!smS#^j@@(4yT0z}$$X zxL8i69BBjJQ74a42EInnGh7+{-AeIisibReHzi{&*zZsTgl>nMTND#{}7o^9!!M7OAK zuc`(41}7NGEbC2zOw5zOJ2w~-v!3aj%YarvtZn!gy+xhiB%#zxtmjyt;y|L;RymT? zhs05mYRJI2v2s<}kttX0wz_nt;|tvrBXm@kVL0$>)BwsBiP3Z-BBeWB7OJk~3TMz8 zG+(Ao@7*m`$H7^~^~y9L^)?T?5>wZUGm4N$Kg9CE=DA7}iohysp6?K$ja>E7V=Y%aACF%1Q`<9Ylx685@AYHhRQGVlV}^IJ#+mQoRuZxbEVgwPEKE` zq2&!xW(`OmB^H~sC6|v-y5NXTkdJ=<&!*l8XH7i>n!5l0&VJngj4=QEF!BH3X?~8? z${Ix%uyw{3qU+DDjx9|h(2V}{o-`6GN51bav7~V)}hyI-^J?I*;O$&pGB^opW9H2f{)m?o`_Il!qlvhz+!CD z>Mp#jhh*5vJP!kN1UBEq&f~QhcZQEZFggR}2*QM#zmjwt*IjWf4K;Ql7(owjSXs7bro}sY zP28nSgp4x2ftrr2?OM&R)#>9v_y*IYwob9R4ru$eg$#mm2TRyGQz`78Wy*L=?7^Eg zn+-Srto^AY)7L@d^*dX}ePI8Yj&^=`S7UGiSoDk;q)+l-JdAUl#HYpG!~AW<9AI$d zhXN*}urH+S=n^|xcF60mebrqmAKRwD-QI@NhjrE94pM?|*{<8OHN(0YHg&B9{^ zy63OqzC~zS7eVB7E@Do+Ge6YK_6OU|#rx-IwHVyrz+y2O^jt~vdtnL_aJ4{o!WjK{ z3G`|S?*x)bI0$F({c~&tZRr(aTfJ)q%wO~HuHqi(8wq;lm%TljF+W(?c7=EHdahTo z;CJM1QB84!{$ktM{sgjPM%T{pq0e&^IKrgMuC)o_b>l}A+HR<#OrGv>_?{b$b%KjX z@LZp0M0QSfqjsGL4Fj3e+hLEGYo? z^t9OgMzO3PT+KDlwP=<(B>oxpfKiQgH=2-YZO9@FaMnLC0wZeQ6*5vFnx`oxOFaOKhYrh825U1=+!W3v%&h-R6k-^YxZ9*`ryoaxItnDVHcfalp(7CN(POn1y z9uePU*-V6FOx4|R^yTsmYnbOscw=-cwH^&j!s3Uq6gOtm@$QZZkscCuTEVm57C(L;^7@L0S%R;dQv>GP-f^gmt%gi+b-| z^Hi<>)t4xx?C!92l08VT)TP@&*b~$wSU#khcU7NkB#IM7NE}Il(N9RpBN`Rb#r%*; z@2mIqVe}Ey*c1Fs-VTZ4w+<=)6iUKCt>4hrRTT&O6IXXg7oYvt$j6|~cS1^U7@AxL zrdYM1DFYYqKh$RaGslb~6X!5(696n=t~byQMP`hn3O0CC*mC!{F^Em`n17|JWSWI$)-fc?0kvXi{UzN5 zkQmV5=jU*Ttt*d0U$L>)(tp9X)~CrI;g#-fe8zR8v5En(v-i(zpku}}|M($7tP@hW z9=3SkKl^F$*lfk^`$!>bz>6ftEGI+SRKx~4DdL9jfxD7EI78k2lhY?rI_|F=DfT!$ z9wlv27Z5w895LV0*o@~1A*OISW|;LE>Iv=b!BfIB@nIs_+J62rn{VnmFee;k?Y&}X zK4V4XNCb|1@PI3EO(vTwnb{2vcbeWVLgc37%F`>Z6pfpYi zN3IdcQOe}SK~2@`?sMu5{X3{(2hP~6gAn>Bghg=~C(a`mVF`yy*xenGHSQfi(Dafm zlJOo6cV6<6lb8r>8oJEVQ6ccBJ`qwINi#f_H!NERl=23rcC&8Xr4yzu-gW5q?zV;A zDAh5-YD}L;y${D)-{@t(6fbh{$sWT8Y>tzey7v|*19^;wX5`f~MXH3p6f<&sz=3Eu z66FwItk}Q_oi?Ujq-291#Lw}Sy9ri`Y@Zd;a*Ib~X$78hwl{7cEEMhP8P(x#wa@mD z0A?S;@Sf`_>oczp=nqhK&#cXEv9#M!Z#w|GuHFw_pUhbD-;!qkK>H!(0|@P*rK2%D z%p9Yq@<(doZ658P|ADsM%6-df_#bGG?kfYKEmFIx@6DbQ`3KsQ(wKjs&AfhS@8=q1 zj`$baJ1CJoBDJH|9KT=IyHF(kKO;lkaX~W3Ljs|FYw@*f@n6se?r~l_wpaHF5tYK5E`2+2RAtp_udn==REhC+Up?32S7gqecqj`>l;tF}B z9zo(1Bt{8NN?Ni|K~_nu1kJctg+NN@d@$mlLd-}ZOiBEtB0zD^1fql&exBstS^)8w zM>w#di);Bi!E^^sFmb+i;t(76hWRdl8FM^sWK4Hk04wDogsmTAZf?c*oV>)YAWjdOUW<*!+OUsgHyE+R0N*0+kRc%x5ENtU-TzM_qX2q z4_Y|ApOS?KoT0;4!jP;KiA_KhQNHQJw;_MzEQLkg`w;qKNP9fC->XlP6CC$581?GS z1w`G`HeP$ux+D55Zw`$fa`vA}c+~GyO}a5{2{DIXS3`P(zJc#j{ybCiNBb7}@r4#z znBY|jiTa%V^DN{$T5#lJlYr<@E&C7O83K5eI;%>gW$;;jnN$6cJUN?In%p+X)LLJ@mE5InU8UfaBH!!>l3+n3kE}4QIA^$gZJyU{X zcBRcCJ*X>Cl==*d=RG~2pQ-Ps9l)JM;*;WUryYjgmw0zVn8Mp8*J-L@Q7%-xk7spL z!)8=$#+4O&x8UeG+lvv?SF%VsPHO&or`n%= zfGFS~A$8Mxn5;req}GdawN;dw7s~!nQFTI;t*uWX3fBxgIZO_uJXE=o-kPd`_yR9A zbx>8yO?dvkDE`H^uWFd17(_t^NNqGAwK=VU)Gm;X9yV9rkB8qZRXSkQ#PEm$h~O6h zjr~8qD-(b0S0lE#2J?YmXu*4v6y+d|9oko}5XLC06vlYE zU=TGAd;_>(?Sr{|XIZY0OnPk7m7y)7vXDv>9ak(?C`qztq%t|;ZycS&7mobw!oU#8 zb1r~F9GHqC+)es;rakg1L8EDd#;STB(wQT?tEyf)+cN)ruVeRd=v&+>WBkR3%VaqY zcEbP@VW5LyT|J}-4BJO_lLn2DM6QhprErVqJf%Bqk>0XI{~ovZqAo_C17F2dR=iN# zIZF?O{P$9DI~rKTcl67^6+V~)48PKB@4wil`-5%H>m`&QjtK5fZhBcTpOEiKr{jII zI`=89INPOOdecshSn$@P+~@8yf}8Ky2Gkj5z?Yee*^d z2+#(`$Z@Mhs?z!`;5sbhjd{Oq&_F(g?Vo++Nhe0%)xz0xY13>4dv*sV*2@uwhXI4(7JLw(AjTrB^v&+ z4PWT_m9~~>`AckElsnq}q+7%0vAyqu9l%Ee0{nQ+7mu|`eQe|-}oLd%%6|ltS z9DiY9f}3_S5}ax+UocBfA&{uG0L4=9yk%Z`8jUSx6E(DOS0;fT*kM#n!(yt_PZN(% zq9XD;T^T@~h*!oCDa(dZ{c}m#zTSvvcMXtyy2SPpqm@3#VNqf0L{dR`NHrN~EAm4N zJC58A_n1a=3u;?t+T8xW@-kFu2gND9&ywrVTzN4G0y=auu2#b>*U|$)_JUI0>tHgR18-@BlXudpAat~GxX;ogHSMc)*NYv$@)fj%h|BtrK z|7yFv`?J(D_AEOknQ=oi->Nb@0=2%@p{Ow|k%Bl=I@%?*tLCO;sb;^$nL9d9=&1;< zn~oCQUUp0Xmy?2p9EUBd6nYZ&=S~aoCOY&ikpOGA`BCp7@eaby5x4cLWFA+ z=<;;YDx1Kr8}s-(@!zFCOOuEN;v27LRUTDPatBEB`^7I4%PrfIswcrcu?1&HCVv07 za$jTuLdil{VB3)N|I@v@j9>rRyK7^&4(uK3=Kl>^7xw@0_SQjdHC(?o5*$i!cXxMp zhvM$;?ykk%U5Y!jP^?ICFYfLx#qFf`{XBENbI$koJDFtfot)$3v-N@n)axAD@tffvWZq$OtFMVFOoq-cu zY^-#GD2TTANS$av45*v8M_G^X-LoajJa!Fagoye>zSxXtZ@@BIx~EO zKgHF#=z>&c{Qwj>N&HQePwpdDM%3I#$y|=Zi4yYif}aBqSOfHKZ6pZ}5T*r4AL6w} z4O&{XBQ4^j9ofmn9z65$mI(3i__hnKy)^Te1@;sIFXOFHixFmD z*BuxfZuI4;wz-a>eiUvMr<2jFUTMCPlnv_Ax!sO!ig$9CyO!cOrX$?(-EjiW6a^3L zUsn5Ox0B{$_&QFV)!x*BSYt~$f-lF*O10s5^2RdB1LV0c1z)|3)owX*W|!6(RQ>k% zliW3=B9S>LoHrOh*&I)G+}u5q`jSl zKO9_|G5rtR!(Ti_*L~Z2rvaxEU%Z*m{>;Fi&+99!`+ISbyd#zs~KMC_0K`1&WAk9vvZYpze& znh2~iQZ8KP#~!Vq*omj36u317)>)MQ7joJ8yMp}h?6vsIg|tb95Q zf;AjUB4sc64f)KQP9G=IAbmAeY-y>>Tsp}1Z}Lr;n1tB=-9JISyRL*@W*0M7QNEL~ zRFUv<1`W}$+vlb?8LF@TvcvYkFj#LSEAH7uino_}hl*E3sdoLl%E8TR7{|cgLFqGG zCC|79aa0`{|DSP*yq?jgYA*W~8+IADpXPWeqv2NVnB=o3zxuQ&NNcn)q*Gj%)1t_X zUrmB4%gls!nq&ck=L2a68e=*-9TXE;sNJ$S4|cX|sWdfA?JLh?zDTXxg<3h|*zxX#UmBAq0{J7P|~b-go?oo=AjG0?=MrY$C$r!lbS{=%w4pjnXdK?7NR-4)ex>_kO`LgP{Z08G zGPh1?+j@lPk?%EdP0E{R-;8PptyJ&_=kD^lN2(&8F&BJUV9#MHa`Rhlid}YPnP&UB ztbMS|Bx!58nq031&FbZISI7c#>ePmL`B)t?YM$WTaR|nruDFt>MM23cS?xpXUsEMY z>kz57dZlkY^(5Fmb~ygDz>q{fkF)w?FUnTm;R`j!#Z_p~Upop0VTZSerw=I`SB4`U zPiRaK{vNN|PD+BR#!U6062a5&zu}+@>Z-4kz`~3agzLU*CFcYt`0io4*5RP7Mrn&M zU;KedNqW`pg9MnKY_kqP{#m-l#xLw*UQyl=P5;I?a{~C~?0NIFm{59^3>MZSXoy39 zU@`}fw6X3XNkkh50H{>V-0TB>IkaxT5SzgkPziG=ow6_S-2Y(?X<-q0VTKsX?BR{w z8qeH1V-9gO4Y@r4EWRoFvZCfH*Y__92Z@TqCGiSr0#hG#$SQ7Kp+utUIYRz_@6f|W z(Zg4CvKDt*PAqh_2c8MTPR3r%Ci_D8amUERo&3U*oZTyH*0_(_0z$-^)>Bcixydz* z1u}2Fy+5Dq$W#9?$g3PQ~wL@RzbC$LpTsu3u*BST~uzmxH z^XF} z&lQC2sfD~83b2SxGbSMkC6i8im5@N{A{e0BNdpBlDAHlaeI6sz@tT^l>a>ETc|JSC zP=1uU>`e1e1$&iB6Fz(!k2vLMh@P9%of4G~`%_4Swj;niS-<;v*7|A!j+m@+6mNvn zzLIarPY5Z%4}$q}f3ICNiI0{@Z}dpWTb}?oC~K?PH> ze7=6yONpRN);6dE9ySSMbI#qWUoB3k&$6-_KiWemSLP%u@+JwInYSzciiQEN*CRxa0x`dAZStvP9OW@7laEw^06S3ox z{AL5Jg%?*r^wxm%UhqmhI8zjHWbAmpw`QEYbFrahAHcy9$g6g)JJO4z6{| z**7~z4$th4LdJ)V!Gyk4Bn^7=3KnYQ3$WdkY_zDhVTLI<7*QO3^&_#-pii`DCMjVO zcV)|3LfR<#$Z`5jdYqY1BaWZS2>AV?O7VT!Ak@_HK(}tKh-=pNo0R$lWNin42};Y$ zHW$wzs zQPe@#azFh(vdy2nJ?_(6SPjxktsmw&#Zi+HQDeAyi+x?x_`8GBhyVuA4M(L#9>Kjkv zN;<}a64{pt^A9WjGab!Hzczyu1dqd|*c3hsgdR*cc(%M>t)6d!St^qj;(%aVrpn#c zNRxD*LAftzOqsPtYQv=1N7uIy82=|R9JNz!yBBnNi#cFhn%v|+vt>vOVTiHqFdGK_ z$z9_!q48Z_u^^#MPw731m|mtg$<1i+!&BZg=yO5=B7Xy$O_qP|cP~S!$l~uXo%L@rJ}lp(q^jqbb4SNey-yzC!0+BkqlOO?=XX zW|-{-bWrj#tWx6%pvJ@9V<0vgy=w~cPf=yY;A&7}E|zN2OeoG1U_i`379kou#!OV} zu|Fl8Q>cur;UEKLwMnJ=&HhMc;p$gm;FGhP%(M{3uODRa5F!?e2xf#pz;G_U=mU7Aj{p zt;1av|7J%Ts;hs(%uS}P^;QUD_oAW$B3wqDZ6+j0vRB;x>{kz)sq2uX%f8;w2ej?j z`7m5~YMncgIEWe6dX1sS@pU0p)fUsw)9D~rmkSQ#$*QvtQ*R^apU}m$mhp3LP2q$X zAqU~};Fse#^_U&OVz}D$Vn}YE``-A9E(F$%oFEczdr=*H#5e%jqixHq5;+0Vc*O{_h2K29T_)xHtC+?G0c7fAbUCA2%8yt*aG17JSQZ60Hg?RUa zJ5c2#j?w7~NDv2I@xwn=-Lv8FnOkWX8{90NPqaPNG{BVA7ylFQVK$!=!fD;N&?oyV5%3{$ONb8BU5_HYTvX`BffAB~KJR0G&>)tY7ISrp$vc1X< z^#))(Bj8|>6Gn32ROyhXQm6n(;D3s<`-B<)csQF&XJkkD8*c~CcoKf%LCBH{mO5bE zms@j}v?3lIgS9jB%uTFtm4BZZ+*B161c*e+GX)W?;O=}4EO4a4b9b(bIxNTi=t-!! z#lUM@;%sS++ahPF2@_N(HY4NeCVBqdMB~^8jiJd1E9q4A8}& zrA?btc#Uq)1(vhT>R=Q$9QM|auWOT$-ACCJ!|b8~N5?F%y#!?R0~%3y=ASP>|Dr@2 z9y)_tSqqaySvR9fa#`+n$wGBV#VHT^ZN2}%F-$;{_l-N#u{TDCipSHp5C{VY<9cC) z7iLC*rmZ2U`vnMVHV3^Jqd`*Rnft+Q0NWd9+<|}m=&A-u#z=p}(vXpb1{gq;6OYG& zQm>u~XerCztuD=SAdZ||a{I2;P@x{FOFl{C(QCUJeLga?x2wr0!Tp|A7bx(Kq}Gth z3t>mKh%Ct+IRF~ql|PgZVu!3ay$XI`ttwHKo1G$8`d8$I5R_?9TPh{|5Djkmt=W=& zaK5FE44S7W zOg7n!K`V$IkYAAkiSCuFb9KzVNTE>((%V~@x9Y0!dWR9vWWHnlEMH(=-Q*pi%o**R zu|KrIi@n8clPJ|;$1Ah@;KsMo*_^fVNaM(`CnDz)JDG)={nMp?-DF(AgGh5~$Mq`M zes23iuQ1~iWH-bXZjHHHHOW8d;CKuQ{eh#q@TdJoN^VFIU-zQsH~gvBnScK3j-jQj%ClXP7i!m{pA${*=a~J$6h-Nu9YRO`( zx7lcS*U z;i66K$3TKG)|zVMuHU{Tgy3?hX*5;u&lr1W57nB$$kD%Xzmk%&74>9C`?7V|uE@E{ zxH)T3+^@;TR2#UItpV?7#?#Pajyn*c-fek$u_ui4f3m}GFcM@ zO0NI*Y_cw<-|-D4v3GSKL<0QswSDcU#iK8h?@A}v^_K_jiTVBkiuAD|AiTiLHL`c* zL(B;56cl=C*L{K3+U;#%^Y*=c0sQP-AT==ni0|2lX{xhwL8vgKM{tmfJO=t>D{2LP z+NW#C^eop;xO+TU|N3D~{e&gz)aQfG;{}o4`4W6s8^%jSrIjZtO7D$_mJ{Y#5CM_k z+QZe4h2U$w*||8R)o#BLqz=a7c*7Fu5a{hR#jkJ)V} zhOWus)lx=30yu=3&nJ!fV7Jxqx@h~3q)FlFYm!e!Mu?Zb+GIk-*58wo^8)s6D?Hga zMuy?DuU9Y^l00K^D)*%&jgeL{ZD!-}T8ed~Ly`k~Gs@1BmN zt?bJt6#ovzuY}HSud~yng80B(H+70%t6!@rH7X&o>k(@qL04YQhy@bO2pXViKr<8# zIk!79H3h4k2zpY4CXMuU>`JXG;YAfh;|le@*8HJy5AS2{$E@8NsCvXF`Ua=M<=D~w zuJ^_W5jl#|J==KMhyhNOc*3VhPAf6zR3oTQk`!E$-0{foRjH;z=UyAV8AY#OS|`S% zIxrf$BIlCz`hwUL8;%-GZ#S&&V$5=may)|Dfz*3?%P#avg`8vWzkOjC=ybxevpXb! zsSNE2OmzlD1TnQoZmgs*DFiJ>QfXHQs5GO{7gv=UHaO?q^(stbG8hJAbh}ayG>I#I zsp~$Z9_ajC(PT-p$i8H{8F!t-(kb=Eq^W8QUCaJfUsmH**LhRKaS4kDf`5!k9}d`i;|oQryH%pHNO<6ft3{ zu^4IX#1WcZl&%r8pL7$J#ycNX;T@xsNG%3BM_S`(5z;FCV9LBVkbzmShSdlu?=qR$ z)~5V7A*iXq+u-23Eld2JC+*YCpPqqgMub_Cj96Cro*-MVV5=T`8|er*Yy(DIN~5Nl z2sCEBKX{K;c<7^4AEsT!A$J;v!cBTqnO1M0<1#zh3%3`M~TMi6r{J z`9K>QP(F~=0@=)zMIElmLLR3Hb5_f|^b0-S3@ldxpHflRp*vA zxJ;QpVL9bBh<78ZO-FacaKOGX^IegX!O6g^tF%&Iny1iuZkBbB-eq%h=Sjb3&mo$z z)2yi&8-+X>$q~`W0EHvvB+so4BSs5CZp~yK0PJeu)-B0pZB>eWH_^ljUQ4_5RoV;D zJLm)+BNc;_s`}qmg5SZY`lF-Mqv7U|O`(r0EXCFxxxysz_`3lN5KSDqiE3aLRs(K zQ>8iUeMawpofmd6AUn@zIN@Oy5047~DGZT9M)2l=cZdI1TchmjqoO5fQpK6t|13DM zdRhJjre)Ki z){C#<=<60a)FPGFM$*sDXTFRRoz&!PlA)qU5fn6_LQCnY_xv&Dgj_ZT;^f$F;BP0n zl=Vi}9d3ya((9$@2PMnheAlS)%i+XzFGjf$Bv&@0$s>rtwh*ODXvn5Q8r@|2Xg^P} zF6Q$@{OX%=P6OExtG4h(lk}b(5uc63zQas;ZOJAiGJ_*?!n=__D=Jq$!W*3=Xz5LM z@A(mO1r$;dnzpyb#?UEBBefa!UQ8XX+OenE$-mu1k6f}E*wux9Dp(ykY~9h5g407H z#)Kk9UNWF+ncwVr?6%?cIRshB`3F)-koJfFOf}{Ae*QKKJgH|*-m35V;ofqb(|VQ%ktx10!%L}QZewENPu8087c=Qxor1;C8|rO0*?Fr+w%mc$ZU ze%oR1mkmn4G|as|bUFhEI{I}TS#SFNWph(55Y|%ibHvACx+s*7+N>J|{Wq!fI4KIr z($^Zy%OM6H3~_6lbhDXr(Q~mecUsmXtVICHZ}W(fvd2`+y0+GX2lhgAQV)7Qc|JV!XP zbEO2S+0n0rhDcM_RNLjPDHnaQ8@)GPbO{XJDR_>?-~5`P$~(=W7`Qib)W-v-I9HAS z(^vTN8zP=udumtxF`P+B$C|JSWBvKXG`gNYFnzW2Ce!&=g=b?U&=t*7?2UmQ+t5am z*Jz5`P8sWE`ig#e6ai;3_cDA_q_r}~%X!dpu`Mo{g5-AY*CKl^L=C|aVM_0$H=?)& z?mnr)>L-_AXnBsod#{>)xwf{Yog~p8$BYwN%n zNjk=OIhcm04j4){;jCLMJ2K(UrS=ZzIo)o97kwsOPq&y@o~3umZY(BUCJvDu09qNH zH1R)*A4d0~^XlcDF&Dt;pWmJ$g2HQ(sfp1Kj` z0!pxmega4G#BEXw6xu}QINp{XQ#G`H#Rw!{-)vx+xR0ZHk>nk_ z>pi|OSxUTiHvQ;wai){oex+2@^?M44DCJ3QnY5zlAP>zIEsU7tK^@rd>^3A20&^7>F>bgnsurixvJLM<1)U=n9Qrh>YC_L@3(PRx2qm9+wHl!J>QhR5lXYugPL^`x7j7`llLBfp!m5#aLkpPPgx@Css zqDC&3`7d2IQ$ISs95E*BOP2nov3Iy8Y0*%SZkq=jw)ff3(kXMlA{$39;7DoH77GscN2166 zJRqgFrv?((6y}J!#jYgJwnTTo#~f0}A@aZsF_hiI6I*DhFwGacHJ82hO`z9l?Q*hQ zyU(g{ngdt}90`w#vT>mvXt1#Dr_+c9C~eHMV!ZVbT8KQ$!W&7|CX zxm)2Fy)o&4x1#VyNRnZk?ebs#5PnCcEr8H>bx*;UGLqgosIcL)9OEG2m_q( z5jX%h)JMt4SPla)+Z&z*7WRomnD5@FZmEc(SMXgV^x^dMws|v^*Fh4a#M$%R<7NzB zurqzeNDW+c&pxD;i@yo%w+8^Iw$<&TkO3$#eINMTJFRZ5C(E4EnS(4C&m$+cPSHz$ z%`CHr7)lM>qMa|A9;=TO%-KW@2hBdod=7qvUB7W|S?D|3 z&;x3Dney}wytrTPul2SO?Er z6+51by_bq$W7X2{v;b-|$U5TBXCJ)5&L7pVTZlZI86=aS>JWa;81N8O9g3eYkGus{ zhlUPV`@KQcAyZeJ9eh6=7aju9c-JT6GM5+Wp71L=HK%uIhH5yq-x<b; zJ~dNxx|@X7m38udTb2hCg+Y6LatCV*e_B8Zx9h=amql{H@u;cc4en zhIzos3D+~yoS-s&C2m_hISiLF$X42SC{5R!-V)!fGkI+wj2u+oj zzf<=q9%I|_T$JA@P?phehe-|g$>yj{q8{014(ChwLRvl5`Cr-c*MGX)zcXd4;4-7` zB5c4S(%z-S3HMBK zC#{ZHPb>|?LA41dAUo5$%MU|c16m6T<7HwuRTEi*B?r|)tthquUh|lBcNiYI+Q_6E zr%}5^YoPi;XIz!u4*fvql5-bsAf7aT+MZ=q$KKSm<+}k}_P0c3KpK2jBLzn+X_I(= zEL}QdbfHQ2fV8b)0z0(!DMv|Ecob>=lH->p4q^{oGG1tLsZi;?L;*;%`a5DJq{#AG zAjWplx`d#g{-2>URXbSFGBrQ}-}Z zyROC91$ta`lpNIbin~=$8aw@dTuo00a?22o(C>rrRp{4Lwg?;G2k}+V8}AP#H3POBIM;%QLEix0 zg|OM*7u!&xw7`)&k=y__j1u|`=6>}QR-9owAn$77k?GPYL&-4s{=!>qfJ;_9?_0~? zJqdxZuHn_rM(mbzoxOSS_gF&NKxsUOdzsRhi()<}`D4}fbDn?wzdP%~z{9c|KtVPL zeK0WR|2a7f3!5Q3E8E}hy7m8*%YOE}!f&VMZt7bMeGlD=P+pw=VKi$AN&u{1ZVAj8R*#++0`?)i zpg;Df-+g1(s2DP+&$djFw}d8I-xuu&_NZmk@x15RG4psu|;8jGm8|P&e(Dk z)>2a#9{XUNHq#w*N2&ArIy)tFck#;%To-kHYF7OhE5`S#4~aUq3b%ytkqtS$Lg_hjS9?btXlm2O9N8Ue?<#~a6Ea!%kZC3t zcHk{cIP2un-~np4L!>+80XABv#_&7x4MRB_Rk5@T{lYL%Tpx(Aqk-UBKY)s_>vg*w zD>sQPF-CcZ^xiIMrKp3u*F`)vV#RKjf+Y_oIduwz{jHC;=Vm9!&C()r$ztcSL$=*E z#9@KweEF;)l8%LL@ld=n)|+P{ujf*Ev7fB1H62m z8xrkcScI4B4f=Ba8GA{73a`b%9?jsp(ZOIdi2$?T!ESF%PlL%x#!}}I9B33s*LV!D z9UQ9O%*TrEX{%}2PlNmHAo}g~2|mf7_{u9aLyjJ=z@}6MPaFJL(IWz8 zWU9>%_`a)6Zn>&;X~C3TimxXYtJyXkQuEqq-4!&8wW+$Q;kQ^q_V3$oh;*LB1q!CI zb^>1eU~kO9cgd;+BAsHtwl(D%hcNpf;uE?&i%O~rjg~Qjk?Tk!;OvgFn)&9o8lUh< zSppRoR@cT@9ar(i?K|ED%6qrc8Mbj*mK*-uqK)&J@*eLuxP=qU`A*n>w{&p?+H7rs ze-egO#WgTT+bu`W1-n~nIB!ybUtlCFAeQZIG@el`K-|GlhLj}1{sX&ZJr4NP2riQ; zR|1@GiX;;9RtB=o(zk30XLvQXbq{GPU1?XuQr^egF3PUZ&0hVCLHHCOaGf8(^NgY9 z)C~)-#iu7k-*@W5>)Is9H0uA`%8Uhx105N;47D$bYl=WW>7xe|JNP05mYu{*#QO!E$pFNoisFLB&+eEje>93SN%gYo9HoQ0X?r0?L1KQSiDl^od-x@xodWf6Gk z&Ngl~R=wfT8{flfQ8c7lE8(IwbDwkl{p(#x219-JnE4`1@Z?fVmoNRXZ}*6L!utMI zWYz7D{lnvoB7nKL$1!&l5}>s~=P&tfxmX5&bX`mxIV1ljh}o~BD_4D5yAkp7f8%{- z?#_Qz7NoQ21RU7{nNp-c-L0>8)NL8C=Z5^f=NUM|i^Zdx)iYdwQkF$j ztogn<;5hW|>Qm}ZI0M}pi zJC@wiLHn@|t5^f4xPlft82av~W4087-U1Cl8kPxUUDg&WY~YYGYHE%UHnxrLF|$Mp z?pweQ9+?CoVJ#0tN*)KGTmw+P4mVi?JE?<;D2X}wDU8@M%=1e=+*R*{JzPX+&b!~e zf|#fZ7ErX=F{05HmU5H*(|1y^B1l;FPwq-a+keS#yA(uz?LeT={iNq9Q!LKRPQPRu~(oA!38C05I%u&S(y(+`ejrAncl9(91({c#O_h4SKb$`)M zC|M37W>!n)|5;IVI!AoD9b@vr1CqGOI4Fbq0_P z_r{yyB=fA$=`m6Q@DbKZpbtyo#nYRd%mzKxBmWC?clHUZc2)6%I8a~V$xZ{rev=oS zysR%Orfim;8~m&Q@sB;POz22IDGO}B7F(YTQd`|&Z+uwJ( zIY-a6@LCd190YiMwl13BqLfA$y>4!A%V%f86?EVgnpj-LqtIpjk^-T+V#S8-r<2M9 z1V30z%ap=D5l^31kT=XH^+Q|U{uXXd&P1Aw2TI=^w}c>{{1Oo@)cR0>*nQSS=^=En zV-(B%FA@HS1bMbt`y1O3oj?6RbpE@0GJ`~O7G;lHv%sRtv;g>-(lhK^^cz2X%csTXlVnZPiZg8|taS88n>hPzJSdHZQ`ymWTLGmWNAg%RKs* zXEuP926HK+o7I_DVU~LWa5Pq8I#}XhH~Sf_j5IcP3g+@g;c14raEgnSAMg)gn%n=+ zqP4o3St*A+*c`R(lS&8#doyo#DZF6w+ zq*x#%Wq2c$?MBW_1lJZ3o@E-Mgme2O4MC7YK7E`HxPVjByy6cgnb$DsjRsX`d?2kj*$_gwK|Cg`HBxV8 z;d;3KdrJqz@f-4@3sWC8rDMWZXnyY?r@Yv3qu;d3&#Uo48tTp4f|u3wPi8_q#7uR` zO|PZXxvv_93-07k+Mm&+bbPg?&;a9^GuacoWyHiLO$8Ej%I5R=?w@~d@+*2LSrMqF zGMBi_7rXz^$-t4)Fw}wBeVK?fp|K&TU$$jY`WcXxW81tMJ2e08#!Ihtzz&b1rq2$q z%Yxmyix!y{gVj_{R^8hyDiSB7{`0=bQ$S1-=T9g!=;b4hlIy#2e!@)k_evUL zXJR^8fp9i$63Y?d%DYrn={v?`fwX&U;d=TZLCT6l!x| z%lA6(6N^S|sX!w;`N~jbieEiz{2wxPna>nubp}l--i>CW@H$^8{cKBP7Tp;{QRa{u z^7j@74kBHILsOgvsfGuqqyI~NeyX`(XDp7k0q2P6SZPgXbf<;Nj^SQNI(~AK3{ANB zWU`1l7fq=$oUTijV!>@oc|x&+3Yz)P`5m(Bg(y%=N9D+(HSvu^=6z^h7XD}DvVEzp zzSDra?vvtr$ZmV>x8X%Wc!Q|ZRwp;T#u7wjF8fMza;SJz`x{aX%$ZuHx>cL?u~BS_ zQv=Ec_|3$;vA@LGO-8dxiVo;S4`0XH7fg)QYwgpewsL6IUeZQFoms;0BCr8)n*RjeEz!=sl8Z zzRE_euZST)sq=p$Ho~EX=TMswR!+1DbwCt@0s;IAqS)U9kz*)bYIgJi`G0nrl5F*< zL?DBKahv{+;xj9kAv+t_e`GL@tHUVo0mARUcA{-ldNk-qW&HjbETQ#xu*9;AFE?!J zx2C1fUxig#K*JfcC}@(_ma(FFcXm=Tns3i0Cs*SK9SynzuF*{Ek)L7X&xl;74(0is zcO*xAIO0>xhq4NIFNezW9;T*hxl7y@M@VB6U8XyX*5^kb${cn;Q|X;Ovrq(Xs0T>~ zFIH=tHTdxI+hihkI)&cL@oLtsT+ed374HL3z5N(BkflQ7U7?PqrW^r+9a{+-sY7Q; zN@zVwYj8DQp9%!;eC&1x{RWen|CA#vBIxvxm}`4UA~0EuIkiN1(-HR0nfoy+Z@Z31 z@EebWurXbsPTehE4JKce4GH=gwelZ~Jgy*F2qwfMs> zjz9m>J(#pWNic;PGr%72`r_U{Fjq;W7}(&2M&&nR#DLQsCI#+r+`8xKu*JF^Kf9G{jNmU#dUyA$ zH5sBR_+Z+;!el^%Dfbm5z?9ozgco|U;G-NN_atDVcv@D-=n1ZDXmPQb%si$1Z^?2;9{bGdEe}XjP_bOLGcUMYQeB2QcAnQQMEdu zB?bhQ3&Qy4>{~vzZFYbfRLzcjRU(#Ss1eaPZ%K`@@h~TizeTbmWmGc<<(ZG2O=$zu zmqGBdVhw?7kg;naNNFh12H2$`ukoaSYn9%X!Itx3yZlOV^ z$ZkxPh4l-H-sP?zMSv3K>Hgk;5>tSUz~eSRK0_c@^LEQ1l8O=0@T#rjzBL}Eywf|6 z_s^O$Y=X9v*2ag*=G)P;EiePx>Li#lzugNCv?&&($kRCt6>HDw) zb*DGcCr7`hT*SwwjK@IBx{p1FX&&>R1o|DBA@oT|Ham=W4PzI;tDC?ixLaW zbJ{LLsDX%QKALjI#I?dL3cp0J<8i+Y8Dc!FsIiQ5GM%P);7)QQ-htBsGb?~3 ztFH0?Te6BQ2i%&}A*naHrPga|yBtISnP1|||1rM|#!8%%-DjY^`u8mzGV77dB5Zx} z3FRKxlz`uxA})#Hl{)*i5RDMpy_-<+2J>lf#N*104;H?l7yf8=ZCAY!L5m7PF6228 z?=Zd6wO@rCKZj9s`LmRrBd>W)XIpLt*`v~o8V%a7w8NK=ZRN~W%z#0sZG_-*N!q>j zQGiaSlL63?3d>Ohdy;5APLt~LJ~M}_t6+v!HP5M;BAu1D;XWB*O1(NwG8YaIme&fb z9@P$Br`$l77YahEkw9OLpvmMU6m#GpD4C2~r*`4mmp~uCbZnH?;BjIv83L#vv;lq93Za($W1 zxDw(?civN06?f>wi6~69^XDXfFqpvjY;3!axi{L`x4PZwjsltmp78*&x_h*yP$TP#v#=C(TotZWCU~ zwoU7@qr)W^TNeE2LKp~Odr2MQp+jSL!@4d%^q4fSJs6Hq`+fZMl%U#TJ@`)Iy5Bs? z`%$fg0Xy%#y;9V~^!M6>UC(O-2DTK4KSHD_zMq%|&LkuH2;6EzCJB7-+E&&#dEZ{I-SLHcpPpml`kxn$2BlQuitxRim&O@q9cN4S(J*) zt1!aLMHPK6g^&0uxfhU144+pSB>k*{EMA0<0hD1m38wy52tjHsERfi$LF||l+}RA_ z-3lZ9(ATF5iLy4ZT~4+`=6BTZF6^_;bbfu*0S(I(F5EA-J2Hx`4pn2v=f zebBwVl(9N}w_Vy4XKelA=hIm|dUbPz_B(wqXnS?3uJpG(aeQSA3rNkhPR@Gzo{fJB zVhsz=SqBkB3LaS!t97ue+bn=g1`Y6VH82NO@E4O0uTPC{a6 z1%C)sc>v0*bQsv?A+2|6inIe+%ALvBVFA%fWI=>u}pC1z{dueV1yt@DTMGey?=k$ zc%%u>0RUn3at7J~qBEs63yKbi81duBT%$G@J#e_TI3b{qV_<+2sbb(^dE?;sd)`XR zhw?IPAKdt*UUB6atrl{S1tXHd89iNPFp0su6=wvRAO|-=wR(^YuiaF2&lwlf8$X9M zVYXp-cM07)H$sANsBCzbo#sX_{?Gm&_Hb#;L{TSNsupOL0NnNPonf7!-jW!;B&&5qmr|*gg|l=+8~|oZKY4B3EHtImiiG4YU>2hYk_9!?o9t`GGae5r7i#A~E{_M!dLm8`*YXPt3)y=Gs%8 z!{zR#Qgn4{{R2kE95E<(HuGP(QNXd%jSg-14K?>9q!W-`K;nuppx9_IHb1Rm- zn_|b$!$JP@w8IPZPP=y)CA*|^cz*c%WwmVN#*7z^)999Iq+couNks1h6Bete9WSm` zOZqODTM1NWFGxfp3qLUTD4roCJbzL>TYZc(c7L=p$`D z@nw^0duSN0e_b#saQS6oUBADm9-ux%QqbB~+W7ymxc;L4kHxibsYYvnjOxg^I`bf1 z0wN<*4OxA;K}(_v71vzWKB;0!j*s^DS!nSYdyS|%+yfLD8wPxhKAL>6)B+L>zm%mT zfEY@00hy*j@oj>Jc*HLwgx}uF>tIp@UYkX(84Rh8a%_HUL7jX8g58ka7PD}+CL3Ye zFSrC`m|3+`TU{%v7!oQxv1T*{>0|`fAlN;*CLlIA^uXr-Xob_w&VAZ78#BcaqpZRb znV5*DoxUOWEvPgId!MY)3hQDcQU31kg<<2ZBB0j9mJE+9AvWhaKCtI!4E~ZQHhO+jgI~KkPkwYHnug%$Yh<`yy4zo2pbUQc3>L zZ>{xoq>}yEs3_Ss91`wjccM8wlm*Pnq$u&4v2xnSevdwlcNbcko>2$SAF&v66H%tz zX*u5zsS;-zQ9+6Az5xeAH;ce5`wShmMBPKgqLqzp z`VoTez(mxfJU%)i)!WFxI^ugb$7sYbg?euE{ygD|pHJGY$}?pfSEa6o2=%72=h zmY)jfjR=qBd%TLvPF15pkLEW-O|Emx{6vWhK_G3BAD#b3rsqrMd`L!5OIEs5vwi^WcPk-Sq1OJs`$I1hGADp}u=*cHb=s=s!9g02Se8{y)f zh4y3oduGBCyK5o|;)n`vn(5@iq%lpzw9|Rbx<$6v2jPE(0%rY2ecQaYnhOS({Y#r1dTqU^>oNu`w$Ox4 zxSWQ9=;7X`ut;Z)jZvrl`Gs;&8}H#?*-GAPELsf7MiNOo|nyZD=n`Lg;pIe-vHVoSS->XQ-<@dSY;UQfEd{=4CoLSo8Dq zcko^H(6;R&PNol?`%VF9z&W;zGxU`J9E7FukY`UUk?oPi+70g?8qhr0IFy1fZIK4^ znUTEm>F3786&l`_X6wDe*+ zcV`?|G?G|R3xhLEH%$9iL7aa%S&^1Iq%rP9Mr4+I3ob#2v)s!l1A0S0*%cTt(W2Rt}n(dqOm%B*O zc^$v>*$5e6KdK%1qC5wTufWC5aGDUWVApX@{TJZo7)eb$;ps&7vGlW>Vw0d)7h#NY z&TGtamdm8BRJI@-!v4>5oO{lKsQlp6CC?;x$wCVGj4~ysmGV>GVUv6p0_<8TO z{y=`bMY7cw)z|Y-bi*z(mB=zqASx7H9f%4ovQn!H?ea_F?oTULB~jL)+0a`-KbXv; zj3%64PtK1uP}a*9gK6&b*^!HZ?(})>8bwFB@3>#nR#%>gz~tmQu$di^lSwnja^luSr!T_n>97SOgjWMSvF^p3NhKcE*2?14K)N-5KS$`d72uWO0J%O&Hl zu2-fPw!2!hVRw+t8+^C!u9>s_pC zUiD4K=`1=?mD+GZiNg@=c7(lw8$5P6Y~2wB6s^0uhsWf4>wBq1h0QMB(v)GSJ;pB3 zCj&_O&z_|9rr6Ea*T>Ja#<0OL`PMCc0&kZp*L5a#+tw%y>yEw&Q^*h>+>yedvZRgI z8NKX9*4o$0MeGSLmekfnbcaCr7WYw^`vVC=crsU_h0`Kv!rZD4Fu8g zt~BOg3sYUhlXO&1id+BImFdi~6wz++>GjsKes|-!nfvH&oH%DSGe?JD>yRB1@clmB`vTpL)+#Av z)04=br)K8?%phW~6~GLl*DyMVYO4SnvM+?(9wic_ZKsm#FNZxTX3xrslZ)ms2$;7ZIz6ZteC0eNeI1Zu)yc??~RsgA_ej3O;M$pJ2wmg)H%cfsx5${xMH zy8UF5wh$(cKLS}p_hp$kcSEZ^%SLtq^Ly{d2;<`%BW0H#lnN^)@J0zABsre(SW2$9 zwsE3jYl<|A`_-Fqf8C$~>SFyG;P zhB{`o7%Xd1#pfJfsv8P2HUg9MNuXxPlRq#wF(0en+Z{CI@b2o-bbiS*%ylOkk&u8= zuM-PrH~%(cBfH$}^}Q)9XKOP7s4p$IwC#3R-ek*h9?64<|Cm{}qPh^E7*tKm^17>l zn?WvlBqyXIcF)Wcqkq!z51>1lU=g5D^4~f%U2|4_s!mP0j zHbzEnunu10xz(d@t3NFc+;9ht8c& z0jOCR0cw^}Mc^2;JnRr*SQ?^O2sThRBe2_2{9y~y=q1RX_f>Fw>_|Q8c-r*Hggdf~ z)*vj$KBsb&TkL|aRA3|=FLJU%7O`OSA1)DXQ#t=E$6kBTtu}G?;~-X^{j(g~q#US! zq}H~N+Hrhk!>IF7qZ$gK7PnK(>*e!%4Q;cX9GRIDl;lyM_cVEU>SugEiJAyO&|kpd z6D5q1j&*Z`m31-h4RNmLDCTcqfWqynfY}b|dt?=RkCkQMR1mIpy?7|kedUW!;d%W~#>VH}-hBV7PBX8b$cJjmdZCNfF`@C(c3mVCX% zA7DTp;!FF1L@yfRVb`me=#B6)u^=yBp%%W8D((H77HRXZr>cyjH!W>Th+0S; z!+We12;65#41<8}*!}Xe-8*jdEJm5#yMaHJ7O3mNeW>fNyC#uNtON^q;MLw> zqEg-zfa%!hmd*d1j(tIp46gl3+fr6yYxrk6_6{6SVx|{CY542kwh6O z?biSnWa;8aq84h04gR=WIK(o~LOatl3z0@}l%V7e`Ui;`wlK~GQ@=Wt1nH*4>y?X) zGNC030kkY~_=7AZeQHC1Hwq`LGbpEIx}`Gdc$bz;;>6kb`U06UBkDO8Y9kFRsT6P| ztJ-?d82z6oJ7P6K_!3g0*GhiF!TXsbzU@gI1K4@RHK&OC9c(a7e~1CTeAQL!+>{PQ z*qmtPOp}2#d`ma}BdAdOTf5{pHL2(w%7qqTV3zv?SQ4S}Nxi0f?(yd04Br%Pzcms3 z9$mKbiS%d*ZnHQWkjvi{&`#J;C^c^N@NwHj(VFih@1JpnSHObSHAlz}6COI&uEmEx zIbC#4m4S(JGpF&Gvlb~!)n_YYzEMYFQs6PlaQB`RbQXq*4wgaezQ$pru4TrqrH zfTL#2HJ&Xq%X=KO@Ix}D{RRrFsQd0K-XoAEbw~VY-=*s{gVAcFR!V)_r?YP9LSOTi zr8@A;%Sxz2P;k5O>8Q}w4|mIqaKoeB<@(`b_u3b;ETfZ z9JDGo!@%y#G{#H%CTACR=zkiSc;@`+%4e1|bApM`n zK>KdsA7o(D;`Wf?5168jHwFPr(I%GlSd~hoLYsD)F3JcNsl!udzkrCd0%tU)6gztb z=Mwx5DJ|j-H>0>dbw!;{-(W*^-LMDwHfMldDKp0v9!DSb9WJF<9jwB}`I~PdWC~!4 zmh9fdcz|p?13I*{qOVM03{ZTI&4~HtN`=Y}T4EDQ7ArWA3>w{l9|vQo9}bh!Ki{Y{ z8(m5qVOu6i4DhMY&O553{IuFjE8K_`v`FPaHZ3Lkn%w}eWe94FE>6M2v_r1RWLE!{ zmpvkz43@g!X~p*Kqqp22V(KrL&(!#xvFsi zfX8k0^m8?d=0>@KPPaILJ(VCfxz$r#?hzUZCyBaj&AGpr0q)RCYN1@O%N!{V9{<@J zKYDY2a$)tVwgS#~_Ix2f;-^r6pawPkl|#`yAxshS6;k%i6unv4ohZ97;hX)X(JUx1 zyH!DdBL_d3GVQmfWR#t=pCrlqd*3e#W0R_o2+$b5TNRE`2~738F)P|8CHT68os&7Oc)8=VT7 zRHG(NtN$1+>||E~UZde8Niz%;j$O#NRjr$SHCA81i_{z{JIVbnzgxYRYK{UK|4{0$ zAuBxNQa0SLDZcTF@B>DRxwPQ7rAk!M*M@Y#y7vSer|TIlZC9ofc=gl^2{9hhL2iVP1rTWp?MAs8A`5w06q^ zN=`H>bRG57p_RiKz@}EWNo(j_Sf%OSR+V`9C#1eOB$yo7fo2vAi_|U*QlvUG)TKy~ zI^uiKJ>i(@{D%Cm*ub9A(%}D#ECDwlOThhKvIN~9!2{?^6uuQ|@o`-Lce4alIvuZn z*a7}MGCc_M z>8z|jYMCCw4(g~C(kzOfSLE?HsP2(98Bm_e+i5*PI9*Aclze<$9q<`w(P{=*U_GqwpLq~zE z&swp|Nb@EiJ-#Hfj)=z?G`iO2vBl^5`Z5K(T021e*gpNnLg@FyWX$>pR%T(f6= z*)S|A;|kG*>^{GrI{)>`jLLgoe;})G5(uRs==|cBiP8-+;F6!~16L=yj6bYMuJmH6 zG3S!Txy`x;SRV@&hrOozso>hp(npHU-ejf+;p!vBqdXUBs!=e|gYWi7z!UtZwqaa< zYSbVY6Ujy&qsUqBP!N3p$$KHZa*Rz~J9N3c7`cv2Kjp*KVJc!#SRRV?GI7wQ_n9J_ z;V`J`0r8F{u4L5_(bWLPve3~F378ps5_)q4+*#GkTwK=)F*ux_4O}C>DEFBTq!HO= z3Gr>N@3AtoX;tVo2(Kg-=^G;a@wL84y=T%bj*U!x`FK}8>p`T{Z9Ug(PlbFE=Cjj# z_M6&h=yKxYI(R6X&pC<|aUJ*TyZuahy%b;4@$U{O=C**2iv$MRY|uSn6?g(+keht+ zBeZS2VY^icUDi6I2FvOmtO=fDOGao}m8-TUChu5w`Y?My!(?=yZqXgCfg!gDkso z#D~GFH`W@6um()8(12m8-@ZZ}6bRmdNzn%S%h>wKphV;Yfvq*q ztxwpf@&oG~-$(QUpplVl^ru`CQh0__5zIOys0!2S=0R3NnGas)YLdwyO(fY_c5E39 z;?eh*qc%90IB3V~@rf;zO2Mk++xm?d)w|w!%^C!&1I5R#M0}+}G2I(*=jY1X;tJbq z`&n$=&g0fJwBCO55wDVR8jwa`6F=kIko3c~Qlo-xSB8k_ygg9u`y|Xc$4#N`E3l<5 zeeN&^z$0^mWnXrJ3n4hW9OjA1@(Zw_U)oGvIfRx-CTQ zT_V6F(|TkKFv&P-5EYRr2cH8>GUxX^Uya9{0A!%$cEikl?q6qX*}u-#hp---vH=PR z^e3043f1%d7qHC4XWy>Au0DYiYD|QcUwL+|0F}(_h;^SdGe9MSA_q{(z?!IeZ}Bit zM!IQ)efecG`7as>M+Y$(h2y&=P^p#($Y1}2&M`msw*08$xpX@@T8dKHJEQP z822OYLPhB-ffFR>Ue0rg8W2&`IynxXcBS}cY~O)l+=9(9P2A2A99s%bCre-x_}^KA|DCf0=>MH1_ zi3arZnKb{GW(n9h{s4gm4KtfH36zg^;9EkRy5tSAYV=?B>HWWe%7&fGGpJ_N>`~5j z1r@%H?FL}FE-!w*R#?ZPj8qCx@e-2A@Hx9Ycr2*mSGd3I4$M&ow7bqDij)1;b`v0f zk298wJ*der?&;RRC(K&kdYV-l9jSAQXDS&v4u{)Ye)>Uqmm57^f*LQ}#3reZO04tR z!P()x((YIr+vD!_Oh`GNVd!9rudcGvCBfIa`%(8|sHiia8o2G-84Tn@C-#gZDP7f;!IpDrnFGqVMSZ^-f+=EkuYDCBL7_O0nPj$ zMr_oD>PVuJU#}1;hsfkemh;dkz{=q7@0^4)$TeMP7(~-u6?ctrDR^buHMv|l9o+QH61ay3|b$vp#XxM7~m zhYC;0jy+(%3hdNU`|{_G&}%)KE4;rK%+Rzspo~(0V+IAC&mZofsGzE_{mjth{cDiz z+)_loA((I|?@qqXq1W03Sk0MCF+Qds>Dr*4cm_t}OvW0mUlEFxb^)(S0*ie+dH8aC zVUPfc(IBQ9xvr_-lrE$_9@IxY>b#MJ{3alEtzI;RT-kU^O!Jajf5cjrbF&fnFshHe;nre5Z z)V8_#8wS?p?3w$|Ae)rCEqWz5j$l-*_IQe|;?xI*r)-T5o zcz#>)V+Y;PSK{K1@|AGXV3@5hi-k4rHso<0%0t&4oe-O>MDtIxnhl3ASmt?q7f74d zjeq$~66tefnQZ3whSAI2j3XCD3>Vu|?a+KD^uFj$y#!cfQ~5EC3zL+-B7x=7R5&2E zp7PHkoA>i+f$n5U+8yg(i)?qjxVyFvG3Z}g#07#sgZ8+8vEAN<+mmYf!%*kxEv854 zFV$TeuiM-A{lIdIthpPb_p)CEJ;mf8D2FOWw{QD4{>wu_EqGZn{b#hiu5egTfU)i8 zh}p_FI$Zzrgtb8i;*KeIc*fzYLwu)BRFX!MwB*KB#NnzkK1bLAT>hd!r|TrTXNf(~ z+sVR#$vZ?|$Z9$I)09wNYQDF5KxmIHalfg-Gy#&8w z4sx;+!ssr*^E+mMXLxS1P$n=AuW5L}=hKPGoMAUw1p}a(kN8M>@_Phl&T`GQ-YNiB zY1aO9Z&a|c#o~u}x^%X?>c$~`v6CPS#o{4^-3r_GoP(BdYFt@0U1S&4ZnQl%1K`1( zQ8xFKrFJXD1u)8n*#sD6i()j9eXnn9_BXe)kk3p6uHizIE6F|+ zx7Aj%W=Xa)U4A?~9RJQjq1)UU_*I<3^yv z1%#2V(YOZqttJ20`(Y3Te~)1dOY-tcg%zzuRb!!5t42*v598zqBV<=E$~s*;+@xF? zA;L~`dgR39k(nDKPK205A7?2%q9(cMA1zL^{_h@b1rUoP@M;ucf`fQFz7#n3YB_Z` zywMFv#yZ|5YEal)HUm5Jb6$pXH#CeHQZ?BSi@SV01WqtKFR9z)Zk-$VxL)KZmy~f> zdq*FzEP~%XpFuuRZ`95$jU(Er%LDg%fZlA|!`Fvm{U=GR>_j49#LaL>1{>ugFHJAWo`yAxvBn3X zmj08$aV7kFU&xn%cw9i7Db;KFoJJ|3DZsQD;?h}8nF z(5x%5PX~r}&XrnlevSrKJN2qOnX}DSF+h!6i;5P0#K;X@01z`sS4Y9f%S%JGS@vrlT#i zVmfC?VwT@QH!RNo9AHRhxG5>zd4LB#H zMm|y{JfAs&4n}`07EY%mkk;nfr-Je0qg6@^%Z)Oi}KH>4ZbXdbLg zqTl&7tk{{0oaE3VKjiNhAjI)B^E$mg#X2HoLelG+xDEPgQTxe4tGS6n5oZK=g^{!4*r40;%Ru#J+8&!YDdhOfTOj z(ASue>(4zt>SR1dIWJ<4;RSWZfzgO2a@!K$S`J?`n zZN^Qkw_h6XkE>+f9vc*B4nv_r?-0Ujh>={pxIT+(NJuPS1IU#Ene#QoiQf~>xEAt_ z3Nl!qVwZIB>)o(1PyLEBokOWIIBFv)A6FD=b_RGduUX;!K77;$n)W3LP)6HhpX)(y zWAm25(4%r?WVyN$C56qMBqiwM0_IO+qctd?OBTq98)Q(F%A|$OQ^@iY?S#W9#UBtI zgpH6PR)6my6N}f%%!-#uznZ4xN2w&;&#*`mRxq688N~`{44xQZqaXX_T7AnFFV7G^ za0presCrr4Cac427)(&U}6y ze#1Kc8eE>&vo}%Qw>NRsQWvmS_y}7NjlFxkPP73=ToN{%!HugU$W##S*^C6H{51qK z&g>?0xV>n6?k8CPSZvc5YLdH59MSb2jF2epOr?b)nO{-{y|m!?TMkMZ^Fc~O;PR^I zeQ{1DE*Lje`I-x?<<2+Y*te~P@OoERPJAjlohyru7g86>l-Xp4UoO>FG#p`>A?5=0 zZhA4aBTjFGs|nQ$mA*;V%9mZ{(OEaDdl^)m2^Qni{E|19Fs+clmq%g}5-XEAE%y5f zO{0>f1Znm3E7?l4y}TfjTIyI)^MU?Pf1UucETqK0;q4(r|3>Cdf1XLcX19=e$=C(A z%1og8V{vJ}o?4UCR!RU0yp$eIshyNgRRn^!TMEXCT0RXCKfBP%;k3*HN!w6?Q^o8- zKCOhlSWDS5Y}lcZDKBVTfNoYlhvU1Ztqu#@XaDdk{s@_;X?oC&dg)sblD^@w1Ibs8 zV*zex^3(y{_#wn~KCc^;K|1UL1;L)OVJ)=JLv9(e;ZYDGcyuhPaab}5dcg4y=;>cE3ry!)$r#{%xp(*usfP^t1+%1&#G4;_=5$4)p0rq2Bab$f% zg(nkFHz#Ug6Ia-nwJK_^foHNj9(hHb^in;afFe;@`m(RUciR#|8yCpPxDA{Qxrbkc zDmuG|MSiIzhVhlFX%W=2;g&J}NI1D}zS2n5P;EhZBWGqIe{?-GM|6)yi4D_`^nBH| z$!BaDSSHUSFjZ~skT=L9C>CrgM!;=w5vHBQmwjoK!!QxG@Q(=&?a{vCRTBP?9@gDT zLORDNq5V|@8yI^0Js-;(S4G>%hZoT$KmT|0V~9*Db&hJL0X`czg% ziJ?>;)DG>R>x?zoKc(V_fuA9nYemu=)?1}ks*l|w}RZU-3tVJlY zt36f!6*u=Z7w2-7mC0lG)vPMc2#NT>)VAkU@3b4POxD}oq0 zlo5rXVD0aadzCmPT{s9=9u^1KEX4B&%kCrI!K9H;Kn$*^b*<29+OQW8di&8GDTE)Y z&^T4}U^`Q;rZ!$}vAeTKYV!l^A zb`)8iN6bQif%5g~ zY}QWE&i3uyb8JpVAzU4#A`+S9%yC4i^Jv2&hrkx` zaar2}+hW8^Je5_#E`rE^n(;0a5p~) ziwYrK;rVo@?vj=4Tm%7;A=V?8AC*=tQ-+q>4iPz)eB5w zc2+CaE%wtHA8waix2;Z-yUoO7u0aek4TFd8u9J)y2nG>f1J4K3xOU2j@iy;osj+Vs zh;BZ6EU#uZvmHQw-3g&uzvVf?)QWNxhqkGaoi9cVtm4@kl!R_NFge`EGF{n?C@ZgX zcLm}OgzDCL0iy2P(=Bxv8ud_ojINF!9{)z&JD)ed{uOnvK>g3C`y?RhzL)YJQTKtP zQTN4Xu*58Pw`EqJCs>^I(Qf7M5XHS{|3QDl}c@nj}Jb_Lz1W|$`5nMmB zO_U0kBXQC=%B3pNZHAY~VlRebwLa`rWD=IcU@<{S1T&NYBC~~wR@W5P8yXlf zO9zm5u~~@nyLYFS`Fvl(p|cL)%)OO+Nyvpoxz@9HL6j^3L7OdaPpCe?po%-#_>V^uFO~0k@IK+@u0$1DL%ZkFgVX5vHL^SIxy-h za#K#X_d9i~K39J>K=H0ML(CN_OAMw{*JiCM8rqCnP%WQr8N?u3E73CmQ$yZ-c zp-WOiTqMX8-?i#nK;GI!TiHGV>k}E$kT=ynz9>U!3pQI;x0~Yk+L??*wZZh%+2LWb zYWeu;Z;$)m@qs*&Sb;>T>4y%lq-2}UrDuIvp?;Gxaz(CGG=`ygs!K_O0j^&(Sv7$|UU6Eff2z8I!C91~vKL*Fdp z=xr|ICN1$5$7&>~2WHJ+IDnd17LMlf!kV>e`DTu}oo5&R&y~A#R+#~>78ekJf3vMG zh}#&<(?5jTp#lWp1u!Q80rjaC)$)bbMfC`Th-kV9 zZQHe7(+<4BAduCj>**tp_Z`!1itD*wt8$T|0)`MJnkK~i@e|q)=Im72$Fm}VR2P~g zA$xpEe)ULK!N*T9|8NPcEi5vYr*iE@#Uv6pXG}uNAm5sl3}%dFuvWw1A-u-DqDC&f zMovRdEBti>Fxc1Jp+p6xON=ZXnw*b^mWU#fgM$tyNk9BSC4|NUNW9phG5a8hb)0oI6LU6MYl$#xddjmAzM{ir*7s|Tp+B!5EoY374HCpJmgA30~C2+3? z7E;ZKi#fDL99gz?m&Ljh0=TGbjwxM4-=>~oXDjoftF3wzxF~(iGu7mkLDgvo?iy zp2V9=g0z~Fh+NP z8)^&pF}70xe7L&!xT+^s@V@2?Xil#;Dw5aqlwh%|4IE27#Ky^i>cIdaL^WNUmwNC@l2I+AMU~h0nL$qW7q(pDnAj{|jqZ1MTH#y{BA30-3(+=A zAjwb-KhvjJ|Kdk|nA`^_?vPPZte+ui^J^u&Hzq^}Sc_gBoBW$%%nk{Inyy=Qc?k%x zHamVH9mlX&zjw$LZHNTN)O08ai&PCZ3Ur{ZKv8PT>>hS?d`^-+PSpvr+VYL_y&uZ) zvf6k*rom_G_yp!oqw6aBk20~(^gR>xMJ8Jr1hN!vUdG7;vhaxnFe`zsWB_ku-iK;6kLO#5Ikbv(JJbec80A_Ei0)x zTCb7FLLaA8xKJ3c4m3j{t%*bpk*uwa=CSOTFABy;9^xr^net=U!)z~=ISi-lQ+QK4 z&z6>M{`lta&~ax&Ur$p z!!*NV-xpoD#T3rr{;)!msJA1@vD`E)-;?jl)&K^z!CGQjJDgq#KekUY*M*+OdQES%91zle#iRxPjqXVX~mM!+^ z^jDo;S*y10pE~`TB*4D~sM9aljIUZ4uoV{eD3`*opF1e#Fw4SM3AaXlLyyQ(nkklQ zEb64v5R_~#)Ku;ni3|*|IQw?$A$+oCWhAxdSkd_2WidGArf+#qY{EWLWlZ)PM|sPw|yNfpbZ6Ly?byOM!~rSiDEC z*{d@7k~YN#s={2E6rTCq7;}S&(-sYK`y-XNB!TuqAI-}%%#L=C(!!XOZv#F1{8Rm( zKK-GQr&Am)u!(74z{ApghmvcUdPI}j7LumF_fI8#**eP!knuQDc*i;t5_St4Q`xy- zh}OlQ1^F^dMzjS6s2}p|XbvAX@@T?VD5CSf_6Id`1q|6shGJkVbT1V%%j9_aNpO;m zO5;`;^`p$SoRrGMsN9{<&79A&HMSb0b7+kl9HS;i&*#e%VNDa$mFgZllg2zKZ7O9s zrAcG8dPKbnnp9Jypw)DyPcAg4bIK*Q2xYL*xby4=6}LFb#TX}6FxyA0v?y$}iHK6e z&=u$-zHeyKshg(EQw2{uqDy;s$*c|^#c7t=a8RfS$&kDT?ThABBC5BdCLJ3=m#>P(xltKV@M{uClxSawm_)hqmi1~M z)tm#>I?y6!->*0irC3?&C!+CHaFSFu6S3OULKoa((+Z3(fp5&V%uD28s@!{@lb_0} z*$@Czdwlfy&&d39sIeOPDc8+2ArO%JIS`QE|NQlO2R8>tBP$&TM=MqqV>ZA=+~9)W z%wg?o?UwSvZzjo7rThwiqLRME3yrYgeoTBgp_PQyra(W5>E0l+XCMV}lCG>9@2j&* zY#@K!cq;Wt6!oeQ;OV&`nJLF7nW@LKr7CaT^9LzLzu`}24oV3Bu@;9P2BqAW^(y#F zHa1N`yWn0s+UgtzMH3hn<433t#chS`2B0EYVXBqzYdyL0ql=%3BrxKw(m%^Q(ta0A zVYGTRsaJd}+dV0;!ZC1N<@?@7W1-P#v2LBYs6N)r5e#vL-N@a=V(Hb3)0YD{CX05l zS{9-t$~0hbv@Za!H*pF6#`%$gK$;u0IKD8E(zi}45-fV9PJE=i_H(74nZ;h4XMyV4jAX2Mt&Tk4k&!$kf(YE$c)UXs-E^2FQ&sh%QERR z<0NiZo0wbZY?g2wm5ST6vQ1@p3a}KzsGB9c>g&0*qIDDohcn1bX0n|H9Okf93--4r zHGiD)91+z0RS7oj@(;C(+SuALxv1ZC1|L-Bg}i#~-Mrr2d%)X-vqaDv#-JX$?$R4S zF?RZ3_i^R~b0Kqbr7uNMN*d@F@rQ(L&vRa6!*gKgg-{C)xff-XV70F{uU8A@6Qi=_ zHzS}koD6HQ*#r&w8-WaS_ICa04r^e`QF-GLzY|7mpP;36he+UIXRq7HU>1u`=<-bV zDnsLO_JQ9QUr6#LsVj&V=mTZfAi&^gT!Im)8Fbf71aV{+#8ncXXqLBv>TmsAWEyNV zt;yPEzfj)W&;3C4V>0oj*zLU!a3!CIe+#Dv_BG+mfahSb+Wy=}Xstn<>!__5NTS7) z=Lm^&S@b*MFh|_K7{&wD9vpvQ9y(HeWxtUkJaMRkZt{vw*L8)f@*8bV2@Hlv`Od4k zQa=%FeBVb?Md_EEPd`848F`l*!^vB+zPV|=l(43oD7x#5ecABe4pWmjQ~r{_*9<^RyWuQ4Z3p7_*7R;m7HGUi zalMPrEEh7d5|q;q*9MaYL|uBG>o6Etj#pEgUol0#iiydVSC^2}9Tka$zER0_vxp|V zsmp$Ek+0mboxJqpc5LpJv~NwGoXTuHnZ#Stwmmb2qA=bKzf@;3JE_bJ?7h>Q4Hm*a z$5+{cd<%Q`#XKeECB&mW(E~s@luC~yv0)yBL*${q?1v{<+1>!#Eon4jr%$J zWVy}9ZnFp>hX?q$4uwR;CbFDBztq+sQO@gWK!cN!(zQ-I^>IUu^Q^#3Q8d#eN=0wa z_;KRXK1o!%Ve+M*QKC?1Xp22#t#g%%+Ml}U+KXv3{ldAmOJJzAg*neJ=oSXwY2Vb2D{e@gjG$Uo-Z7*g#py5bZ( zt9oy;MtI=WXIg3d^DMU3?HDqnctd`Wv(R-JD-;WJYL3+E2Ju_Y1qeoVu{DCuo!vFsqmj zt=lusOg@x?Jze<&R{4f$4}+&iCX1+$Uhra~yT z@a!KX)3ITEmiZ)z&|QH;&9@4(Ge*fHvEOPnOB^wCV?7g~Mg5PJCHfn1Ls68h*A5`- z%>-tZaLTj&te~kV9)+jIcQ$^w;LUV*;3=PO=X*TT@>*rqaUZ)YoWDyKC>bc@`7yQS z!9!tj$mg&>zVmYZ9M}EUeQzaX&oNkstMpl{nMr0#7*~7)=WmNIB9AN*v_2MtGrj=z zabw90@OJX{3p~hqKKRJ+ub0?t|GuielN(~ZTyoYWO4nHOet0gem9A3J9qn(a*z7q&1bUIR$GrHONEf zSCSWMA+~;hD8LQ05-jWP&yK%3OAWH($Tsvklwm66jYHc}iI>k>o$%!_#WVNS4-o+7 zF1`RZNLZ5!L=MZ^4`XnGbSRHtE?He>qaf{qH`HMZ-hm!t3MJxTQYhi8q9C^_TUVh) zN8Cx!cH2Yy3heG}KcKH1cX6cjyZMM*98%w3#Ak`}_>zz+vuAE~hsm|vd0>L$DLrw; zVy7iP=r~m8w)E0KB$KST`Se2Zkcf=mfEZo7oFK7KT3s}yHas%Iin)Yga}Vnq)CA`9 zgMr_m#CvSwu;INYNiTCEww?n7;p#y=-!s!@tO&%9VZlA(D#URcM6!o1VScUKnahH3 zV`1}lE#E*}E2SX)%!R~xx2CY~oUOQ6YdH1t(4Y-Vr_P%NL^DyuGfy$DY97)7DzcbR z5vM02)hJ1l<34S0UxPcJ9n#9It9av57C|+e5bE3~ZxvO;8KI<{HB<~%Wu{^$H zRg7C*Ri8X7M*?s8jw#&?qTwR`I>^vUL?Oo^R7w5rZJQI@ww+9D zO!#JI@BN(f9DI4J&Ogh4O{>i%+fu6zB~bsh8wuD&3bL{D{ZI?$kb&fdiyw(UW{s{1~M6?nsL!2b)6q9J6D zfGDKIQ6~!E5m|i?vltK6nZW$>OhSn@h`HDuWZ%0RUe0srE@2aUd}i!sAXD0N z|7*O-h?OjDBqGKN7lzOw?)V%`))r>5H5=nMIX`C#D8W6`mod)Qv&-JS7kCMdspZrI zqoMa;%NE^1P+~qsA)t)QYA?Jr-=oaUK<`;VcPSx0sagIwVrk$Kjp{9xH51?mKsW8w zx0`TPxcWOZ+Wn@|Rj&2dD45T3SyZ@Vglx8Yl~GSbargvx zQ`iudydd*u&77S$ZG-`PA4`{ArVw%|N}e@@#RVXwsz6kPPA?tc`tHL^(DMCBYn+$E zT?4|bfEaOdlhx{2+;T{6+RAc@(K&c>x?_n)z~dph2PR3$r@yn8?$*5n5B|NE<>gBY8XNS<68PAxBTXNk2>yZ%BaIH>)!7D!xX}Y|N zc_oOpK*7)+TxDgXeLKUl?V!g7mUV7{ru={?cQ8c3J{07U2Mm^3YY|eV(T$>Csf0+i z^18JyWtH$=g(!frVxIj zS2nm-G-mFrRMk_mqbi!8gS37Xj52dhsT+MITRKk&oz{t60 zhyi?cFbl{1vY$!of5K7FM4%zxCFvsqKD)k*c7+yXibwQ|s>}voRq@r+J26yeW?Dl^ zq~uAC5pqE^SR^#wcCbl?cCd6$A6IejUiNh*jC{<qEdU>%mXiLOzm$1f>T*=O-_fEUIt}~6K?7v<4w2U5eW%*}E;iOT7`uoD zbU?@)V7bd4)|o(9#fY?MwQ}^XdKqkTO_aN+h0}N;AtxDyWK7#W0*T5StfYXJ#1-^~ zYtcW~B1vi>n2Mq^7N8HXEP$9v_KV=u*HEDwQ+j>WeOV&l zQ8LEXAfCGweP63tbt{~D@s_q>1t)aBo_O!+m3%M++<22f=34jnEt_eR&_^HqolZIJv$$>8BUONJy*%z3`|FTA3<~f$)zzq4w-gYXLN(biG__q6+PJ+ z?f%9xQmOsE`jJroPF$v zYR7{i=YD=pKRl7m#Y!(0LT8S`@(~OZ|4=m{wO}b4d-78=h`9Dmf+8gz%_Vsk(24+M$uCSD!hnnam`k0m*r9t013<; zW0O1k(y>45q&Ou=-jq3uqd3T#`n-pV7!%R*7+WM_G;Tjay2hF22?%ud>nCT$82 zQAtp^*-iu^3b{RhyF&(1oYlxyF+G^!fO(_`U3-(nLu^Z3?E0jsXxF0R^Aa}nwr`|6 zb|(IeCV4M7A8fFz7%{(Hf}$@_!{Apf)@4H6sdD$`o?^RaS=#@_w^vDqyk7b#m{R>J z)ldvnmE4NljOhV#xNGNV!L3!TFM`gq71q$#P=%%NiO1!1Q4<7F=~4v;>UBy0PawXtjJ*h7RV#;V?@z zY*^*Sk01z{TXY>=pdLk|u3nky_q)<4_^cypZ$nh7oy(G8WH-@)WCqtb2$eTYh?-}1 zSSITv$V|U1Fe-gaa<6ZbIi6saTx7j( zyJtKt*1{LE7{GTS=A0-HZdHy$S?{uqW}V)Xt{9vgl43eE=iiqvL!LAku0e|cK1Zsr z1&%9OT$V>USS?2Jqc-SMI}J86rt_e|Ehi=hGO7!bmg;71FwBTS@Tn&t z1$YXmoqQ?T>FB{}Y}*-f0@)W)mWm@y0Wfx;lJNY4^wyG&X1;k&hgW)1M&DNIIv0CB z-gM4*s6yX8ZKHK+wP`O_B`ddSgG7LHFyD;d=E+2sMT~{B^yh(e8TK8&q!!Kd1Z&*6 zG2A?+MO@uMe*N~aSbo%>f?K2*ZZ^;4c>=#q{>-G4{)`aUXojyv!5?xu1Ej%ZG$t#= z%B>MBl0XnX5lS7|q2qvY!$aY0}fHZ5G;ku+VxjMY) z`#!L)d545}-%oBPYFd;v?`&PSxgWr_YpGR^&m_N@M~1>Z94{9xa5lIYTP+`A6(M)C zz)kSA$DHQgf1Ha*a-P9S*imD8*c`E9AkH32A`?mT3LdO{-_YmbOha&#Nw1*KZ3329 zx7KQB(FazVKK`h`p(P2JwqV)W;@@v2$YLFEM8MQ~)yM@VnkOTn#!?4-x@%t;^bmq* z0aPul-5Lfs8yEItEmY{);FY&IGOymSx_?WOKW5@Y-=6$c0j0=*H~p)(bv0w};ht={ z=aO59vF1cxd=X>Wm6z7shD8KJcm5od(Xxwbnr=$eN^B4R(?)vM`xs zjh33rcr=Sl~L&aINin*l1pMj( zv$sGYBDy)tS6pgyQbdPhA3XZ^y<Zu0|U+tpYw3q0zN~v@(78h2Y5H_J^<0l zNZYo(cr9BchTRhg+qRlM?A=h1S5G}aTv5>26DZpcrxVghDr}Lz@*nzxu&E%p+$FT3Wk)Cp z80uyrU8S>P_9DStu8-MT#bwf0b9r72MAtT6OPbQ=>9`{jn$Ms4d%yW_Qwz&GnRA9U z81&gk$MBoDwN|n@V|OBm-Vm_>EBrk3B~N4Q^+)DESCTo&CtI&RSo;>+Y$hG~XxG@Q zgH}a;JrV6iB=yyN8jnXH7K>K{>UAlEdtjvdP@MoX+An5(-96g%p#PH9TA)e3+Sh7{ zm`$ELMu50Ko~Z5i*zA$ql!~nJewihs+=y(Y9NRF{LY|)z?cbU>Wx={+SKM071pWaY`a@_C)*k&AkxIyiQxB3UkeY-aX;~2NwXZ%3W_8!sY1|w@+Nn{d*WlFf? zaT|0qv!ncjE&kDV3Rn=L*L&;~FS+sMQ3WE=&-u6~D-*Vdb|LSm*XQOKZqCA$pzB3v z?l-*Uv##{$qyr&}dPwGSIysVQMU`xAky%~0+h(UMqqow%eFb#|y<#(%AVYDqyJQn{ zjzjca<3Cd(&Q2#zYTHaYR03-s({aU{8_FE)9KKO-aB`LEs*6&5mm85MCX=fX>Q*Fj zVTO~1>`{csQd-Q3BNV2P19EXZ-n(V#DIeMDEac!&F0GKbDw~yD0N9KIxnvAhP423+ zak0Z@_EU}DUI21=LF!Q2{C+7eoYH}{GvYW8sjcOw3cuZvxHFS(*&2ooC`*uED|qEZ z!wvt4E8IELhOE7?fqD!>DxaKi%e<^fKmPF6- zn*66vqC_2t!F4GJq*ERei0KH@YdUy|J`$INO|)u|IFg5w50uYE@h~k~jzr9s{5&rl z8OhjXp-73!39hVdw6*iRK98L@9O7*v@5kZXzgjxWVYr0aXulBLZWdHL<-Q z^>|c(QP5^8HiY;f@~xhGLrmdRv{iwH{06#grEz5GjhGC+$KF|cv@Y1;e1@mISuF(# z7Ksuj*9$khgz4=R_#h(+LfT5FQ|#g|}clbRY6Sj^~TD_0QI(sI|E z?_-=IRb*DXhA#q_xAE*U@{;yLwsJYl?c0eGhxCB_(c%egF*IIhtY0oSPWXMR5%ur` z<_0RkNj1wLr<@U8iuWmd4Klga_#v5lcKHxOrw)fZpagHinT;OnAR77t&s+3FNKt47 z4f|TtVXG~^8&hLx#8UBzjCrPbSd96G>69EMr}7-DBX6*5aKc-?hC1nQp!D3;S56t_ zb-Wmrz?xfk7woQv7z~Ux3fh?|(9_7%24x>(93`}7IM)U!M8X%3!aFcBKrtr0~cRNo|$Ra>D)u3N6CrJ%s_xAU^*m*8PAY`mCu4FBHclXfA zg+sfYNaK0d;&@IxV4L1qWps^Y)@10)80)HEx?7rz7wO+cJncE_tgQkODcb8El#Ya zmB5Xi3oF;yTsivrCF5NVD<@kA{?mO0Fj3}pZ0o&2U>)>is_D^8x#XkR(qlL6%STut zwB|?wjn-9J&SMKO!$kvE?cGfGZj||^H9Z5$U6Cfh`8P6pl0BZIPH=c|~0!}+$*1F4Z7mMZI&ljf)Gd zqP3&l=X3wO#-3J*Ur|zAMwIrSgF*lh)k-Lh_DTm7fB*ofecAv_|L+cJVDF%3=b+S(FYK%-}GnW<{|osbpbJ;Udtk1r=3c**vHn4HD8$Px}Nu4S3W6jE>IVzeoQ>Reod z^P>7vY_(Cf32Tg zc!8f(8t8fyu8Jx=pU@6ZHSQ0be%|j;-v`;ndRXE1Z%&RP&{Js2jKHM6Djx)i=elFB zx7VJ`s0t?fBpjI~7Ouv;f@*y3UCsw?nyQWZ`6VYK?UZo%2^f&M)sGW_3wtX`%>dQG zqA-;o-saP(n~Mbv!Rrp@gVP}mHp9n^*#XNOAn1yxgmiCqFxa<9^(`gnT&%po&}X3NFy`1zT7WB>^01X)$&5Nw0={K zp4eXUn@q_WaE&YSjuO?GYa3eIy11NW`h{R$t7LcRRE}6ewtNP$YI<{C%_c+6>@FR> z?)$}90VA8FG}fr)8_`Mp@wp3z7?a}&47dO1shr#dNR$Zam&sCAY(CB!HU6N33Zftl z9p-wopj1b_If)r!a!HayU(h1T zzDzRrK#hP&^%=b7VX$n($@g5Ve8PLQZBYtmh`AZue89yX==;oq{->uV0lmQ5zN|V` zPRUj~Yb~crYtkpyfUR0u_Vf(NfF+t03&zq8q6;MBM4RTB`qb2GI&%NL*1V0(TAyc} z+6D4fi^RuGPt>0P#84D7EHokboFF9adPGv$O?n($4Ne$u7wTR1X~~+Sb_o1W>z)D$ z_3!q`y6JGbEX0vy-q)kq&7*-V)Rm$%{&yA{GuTSeG26U@KlgUPVcPmDe zw?E-&2RTD1y(7rhYMPTyo$&+LX7w9;3(KXJcy@K%?e8{M^apu%d>8KR$3`0rbp+H& zOvjElID&>Q?@CYoY#o2*cS#);a`(5bum70!?n|U2`WP$Dtc~37_S`WibP=tGh3aQs z_@Tayk}7|oCa6`VoJxMC$uGNRtcWYQ=OVkQ7)ZL{eIfKsq)WR>hkKNnd$*Dj+i^v- z)2{-otqZlHx+gLD`!O0IF*C0nC32H0*uRvTfL}2H>4;Qu;m?fT3QG3qthHEyKz+13} zxOToCiWB9;s3N!*ZM>b2RY?4(%waRAjbyE-lTWpN_IE)_>n%F6Z%66rLzj<_SMiE% zt;eEMUvs5;9Ksa{y(?n$m|~_MJhJ7Pijp?;c$jXn;Fa*%)e*Jjc|)m&UB8Zsnwd^X z3w=LCz}g|vl$1-X!SdpS>g#8Q_8V2wn^Z9xK_{tICsUvJ;zI-yJIQ+oCyS&YR{-6n z3yXIH({nAJj6BX^%XXB;-@H*~OsEOEA4=bUsh;Mgx3pa7yy8K82|w5|I_3CS)(0o{+Udp zqyKGdIsfKvjoFI$@!{hEz8fZp+^15In9201Z%sNA`jdhscY^>i7Z!J4`65%=Y029wp|9%z$tWeM)CbH#IeQ#VM~V2N^zGp(#x%Q zPLh-iuY!wp7IWe6awif zaP9KzL|OZ-BhZj*UJ7E{b|h<3 z!@_Cguo%Rlayg0^G&fgq$HlOrF%Wl$K}lj7sv_zco8^JqyRY&dEdlu z@{p^}BQP64ZoAB{OlLaYI6BA0T!tpkY%mLbhPi$rn9?43t`hBHjT(7SHr zPGWV8bN$PT`r;YnR41!xeNygw^*e0%^Vi8c%w9oYn@E_dv!rs-jWx@f%&A@g^~!^X z8Rbc!4ci_|&^m8P<=v?rPsanYm4)XM-Qgp4C$#I}g*dUMI5nWKXO$*%8I#$ncwic0?2Rl%D6*i}`Sr&1AM)x*$5I`Y_Aj)wHT1VAGIGND!?m0PfSccrVd z_e0n{%{~(4USh52*nEdtKXWr3@@ycV+aeA98(>ARi%5DXL3C(8e#ZHx8zcnSMpL5w z*rj=*rlKj(ulG!N067C3he<%C*6q8+p>`H8f%?h-Ge&(g(8wBwn+Z7uN2I97(KBiU z;eU-Kn(H6*Ehj9Kf+<)}`+C{(B=r}_GVmOHK36|tN>Vw2BH5QThLfJ+jNYtUbU(4> z?o<$XykvRBlFv)g!jfP&Vz@_C%ukgze+~b17PvXL+pCv)A^&BB*ka6ftu#f9(XL?) zGxeFctV)I>vpK4aX^8=S#Hy<)Roj7M7#x7(4(cvyKnu8$y|={*JUYu}ZJ0ULm~ z0kdEHU4=b}J2)ZKS$5>5@(U@3cOU%bub@Z)E6lYu5xOS`75?lYMB4DoZga{CtofH^ z_GYO_MI-{f^y4RaMb%J~w19%Za98xO52|rt0_JtKrZ?Kbj^*YnPOC3X3NAkjB(^HW zazg==A@7|G?nx5#JjS51u-oJ5ovb^!O4Wl{`18q&6iBWflpvy|%TX`b7?%;8W&|cE zj6uC9@oAayzsGaQwGBI^`{~V*@2ec5SXxQ27pLD5AzeJ0WWq zufcNQ!NshumaKjw`&}yAi{}kgsU|}m$%1qaUW6^8KQ+%&TO=#i9Ht(nQBM7#MyVBK z@BVjj1^9ap#Lr1PKIB$K)JO$;hLa{fSq6q+(|f(O<&{Q0V;MZ6qO4A7X*K&PSY&~a zjF_?@6U47@I6$1uc)qgR$z7`ubhhr!S?u`d#VlOZ_r6^_m$un9iOAs=kUX#h!G+S5 zXHM?oBz`q*F7;bG?)tEEZIgQtX2rJx(^oej+sjwslcxwmW|FrxS-tHs})oS1#NSPMk{8 zq`qy_^Cx{yR2T?z4i*_w*bK0?^t)mm?+)4k1zkRnAMcZRd_NJ*#ZrShe$8WgQz_GS zQ{)k3F6b;~48M8Z_X5e&cabcsJ1A+iN!(PDH)7@<#d0*pazw^BsEJro?deunSyo*1 zs2w%dPQv$MM7U)htJ#TU0s#Y35fR`cj-Us_l_TVLGckN+ub&=Ogiz2$MvuwhW&$Rs z3xW}wL`d^RQR4?AG69_6qcQi@!~(l1LK{x!=5zDMh(!(A&Vb1dTJ6}DRAmC33GBxj z)^ac?Kc6bX`pCwjH}6PCQ_~!`O|R8+c{$%W7+{UvSK~^Tl3>JgEK+sulGz#Kq$Vh0 z;uET3(z+U|O;L9g$8T;Qw0wNBOeXsSl^n_6$Jp377yu!MEJmI=m)h08?tkx7Xp9!9MW8TMy|lwCwkz+e9+m;r6=S;qoWBgKf9DgXNF1`q-|r z`bzAl^swxvuCXF+;iHCjz8)|slOM7a&)Cj0p=nqi52V^|52VT;?T)kU?@|FOq={MZ z+ocL^G<5L=QHzNc>?lLT@&0l=&0uKLb5*iT(62aAB+y14eq3PP z<5P-w!YT|(XnXzv7Yc>g!`nvy`(}SfkkJBl#6lHIQq~>2iiS!>Wo9%VKib#1h9!A2(#sspz@E^8?ixc}$HW?2d(|4q%#4^6JV719Na>!4vu_U%r^xFn&C2o<1Ej0upu5OYbku&}*fymjRYccpT zd@naxT^Nu!coJpmh@c2R@T zkf&D6&&kwlM(JP2=9oN^lZ9KUQFl<=@0eavBESxOWX-cq zgWFhZXe{O;f5C4ycO6zR$wJnhoQz<$7n?%E@gVx$A`X4_XdT5fp{q)dG=%ncgb zsi$O+MoB9~-q$O@UQakyWB}v@yc+4JF{!{tNk^{aW_JSLl58T>uIj>I3?b)wdwM2^ zV?G>Hjd8KeMhP(KG?mq<$a$vgzR^+uwNN`k4TsUWN@0cipfYVx z{Z})$O1?Dg;tOPYL;$w7NY1YGO&zf~|jy}*X6L3!HtqkktbWB*EEQn^58 zKZ|eoVk{G_US03+*tv}TtAt5$pyeXHC^O!!TMGz=AMF$TMMq5OiNnYstHy95b&oUD zpv}U=M9hU%_j0S=9p~22&EN(4cji)2l5@`ss5fLK{!iwT>j;08-MH_XyZ%df$WX1{ z0p3;eq&c!Jz2gPg?IqRbAmroM3gW%wtKlK)jYmQ$y@FojQz=5D$N>5{?1!Y{hhbefdL0u z1^z2&+;F6OTw>9zw?&8xTGu@5L_s1fS9>e?`BPwq>y5uQGy<_;Nbi%kr@jd zdbEeMsg8@D;iPBd`95tq!SdUjw`}pUTaKwYk?23MqH%uZDe4lRk;5g8#KS^?XZK*V zMoZLQfBEcKlz@{qHzCJ#Mi+O2Sbp0#c`{>bdFJZW|LLm`wBk<&fz)I}pojJijY_W} zgbBW#?n=*Og&|n-5S;jvvYK;y*O3p2S`^skMNI%H&!c67_j-$>ykV-Zx$i|XT~0|K z7(<5CIXv)#4tKy*C=(_)zYt1(?YZZn5xnMBw{BmF=6!tC*%4?;dt7*h7eW1U6t`sNb@@5#EM6UZ$8P_>~89UgCw z{lS@G$rYVJhuC(?1-gy2%;aQ~23Fsz(uXq8XwbGd%I^$!)Os|0y2u{B7euv({=;wq zBmH)dy-SS^X2&dcL+$D2xAxBZ1`hTSL&8@nyVk17_{e3xe&s?Bki zNyrCNQrcmlXM9Gox4oEIR@(ORHAx1A)NkT~xZsN*-_C91bRIFt{`SbV>Npx4q4_)o>c z=}*O?dxdSC5yL^_@%0<#+^?qMgm!VM;$aRlAxCVS7^pze9hF z>}q+oagSL90dYVvTn`}u$6zq;0`g@H-RslWLk=Ne=mz;JXN^$&q(#Jc0ff|6;@rD= zSh$2o{1#YfxYfI@t3S}71BsHMhFOZYkZZ&dZ0FGJnJk$iBus>#LtEYRFQOX%(sc+ z5_?6?uro_nM9|xpZ&b4j)X>0c(tuxKlzq6BCFS-1&vnbS-*rpF zBzX*}dK6nZV^`_m(F`H?u0bom>$_GtY`9~NW| zPd`n+UQs(^XUZa-FLtHiB8GTC`M&$+jmD~5B!Ul+@fD!53=_)!$vq@*GaC+6o2V%O zEVbMXX6?MPSkZlNE6{t`TpAr}e&Ld2z{x!qr2fZCTQ~`FKrkVEIa};5fXE=Ii}%Iv zPa>3}-AF#Gao~@cQ!dy1*oXW`^Ej0-#=``R@2X6(74D^uyB_4#lcEccT76 zXHb;=MR*t$?#LBnP$jUey>(I#M%X4gNh6&V{twEZ47RX8_sL)qUSQ^cx2Kg5p{qVz z5igI(=h^^7#GgKl4N17X)o}8VMZ$eNifCN`0xJdUBB-Hk-vk4-#|hy_3*3QmWen>b z&!s3XY_!c@P(=5cFPk5Il6jkaK1sD!q`1XP|1x`={>$vq#>L|-J|XsY(q`vzad9vB zMQH2bI#ne&!;zThaa`@oUOft?-J;|5uZ*y%%g>@^8)5%ZFY5M}c*<^CBwqW9)9aE$ z3ZHvyJcS!Z+r;F)H8<5zX<6!j*Lzg`qxS&*Z+egROzj6|jHIlQZ+fnL%Wvh0EbBs; z*|t)k`hr-2g$cHXk}K9Cb^K!mg9glH*TX?pzvGoj!Z>3E!v>91H){XM_F);urHbs? z$|;Q>$6SDrF&Y}lZ%+Bd8B;W)S%$AhV)XSih5;tfNG`ZGN-?-r>V$65_Jl4;{IhT= zfK4)Xe}Z(NRb>)V$V6;OK4-2z+8`y7s*EnlqOJ$P>;uHl&QbaLy_>R&-@0x$Ws3suMc{OTlRy_LPARQ=vmsjmz@9 ze=HkikQnPlVFl_whbC+jKn`gOHh^h2zkM5)jPmEt@6_Dyh|02xC`(k^6W3@trHrO% zS4{^%B}p|DnyE#$Ur8~0%f2$m*F$J*K@|Z}%Q8Hso(TU;M?m@8vLR9Wmu2H2QvPqt zhF-*P%LW|Z;zK<7r)7h}5J_>(R79|>h^e=dB#=nqv_fvqUj(2j(mKtU38>QSL@1}! z@2l@3i$mRfKaM>L=sI7~M#T9tWET)R`i zMXp7O`9NORQWEZd!WD#$zSNanXQNWI8+{dD?}HiE10_peWsiE%`C%akH@84-?q0PX z;Py@oc%vdkY=Yyf#vEU{FAJ+KIWOTeSYd$0>;q}~^B_N{MfrM&1wIj!xJrDl)`ZOI zH%R60Y*yISMMH8OA$?Wf%Y?Dy7RzPK8zF>M^9Ycwu^mrekjWheDw5vo)w#3M7VH2g zZdA<|dsLlWFZU0cj*ZQP>ONx0dhX!L49Njczw>kme&O-95o!US?k68oWbw)>hc=C;P;62vaf;!u=xn$=MXd&WaMPjHuAq2e4YqulYt&P&j?Z@NJjV35oGT*D+_?u8 z76X^&9oQKO4|r0KsZ*ij4W5RQf%vm1d_i7xbAEuANwFf2(R^H@W_Bh z7&s4akD@>Sc?im0?qwC+-m3>S5eGruN#HY*I<#AYZ$1m8T{Pz)rSLk|yx6fywx|_m z*^wOZ;t41+vE;*|gPy|dr(&VkkLrMs2Ju*3UJSYxMbOmem{bA$-cv93$G9m=fKkOq zaa>yn;Pv(PXl{fZS^(F9!w(qf9Pnv{Wd9K9K4c6WGoT4~^%~9WQs4!V%4s5*lygVc z09ghE2MQ}&dK%#U^JLf{{omXz>Qw`KeotadTai4@cG@+7+*CPz1ou<#r+X8s(G5BW z9C8C9aOU0)q0R$TMF6+(JB1em|IRjJ3frR`Ig&NxEJ)}N8#_!!uw!?Z6Uyl(Bd?(B z!Tj>6Im#d_YNHfx2v1&PNlp~wTBCO;k#Mo3OR!Gx&wM1iHvJUsXFjq67WFWTj&tyL zK5|u3?bybRBkMCC`TCiUyewrs5&m|iHid`dZggAtwayRZH+FM>A*B3`-Bm!>+?zxf zyF<8Muer@mub^LPzD@ZjJ_?7BQo!ikB&M=)Hv21TcS(4fUa$ldQ?*dOc$;auFlB;( zkO)nv%c?nm09;joOMd?8RlN;g)VXJHePqQnoPKTFW;{HN?*t)cu^Anu1+$dACTA08 z6_&%1O_qC9yH#d5nfVBVMvkOPWi2;v)@^t|A3_$|igX|?Zr{#Cb=DrFvuN$DvoVM4 zAzG&5;mS;HIQcNrN)E||L37PFP6RP-O?Ef~zsqd2 zZ`V$lP@IZiLFyQ5cy{Cwi6d`PI5cg&7W=Hk^s;yDTX@8ANj${ zWFW9->zexP!`ENF9g}Mf*00y32I!gV(M9CSM2u$BS zY2XiZ3ts6I{DJN@+xI>}-oKz5@h|93{u{dae?xb~e}iu0{{-E%k!;Za0o{@K=*@VA z5q&~Jv05p9X1DD7DvMZ-R#ri|t<-;&BZYoIi8sTSlLO=fhD}Y?T+$_q(*oTmQsp^o z&}S01Qi|cUybWI$bxUXyTtC?Z{1uL*gWPVf*Bo>Lwo$?w8j!-QGeZD2fy4RitN-Xm{u=RkKi)S%=yB5< z%Hd2r$_d!B;IyBg3Lj^X@Ha~$fGZotiIR|@)5hi0>HXNIVgp`Tp%D}KA(5tTK1t$_ zGfX}?kI(4|f$8266_c7SL|>HUYoKw=ElL!y&5o}uO)Ei%O$9>W+#l!D)2v$`$v2Ss zW^{_m>CWS?D%-x}{N%i@>NXlE*pzRRWrZ8n(wW145lTzs zgjM9ESs(1 zR8Rrhj#mO9P)3Q5$kP-&Pc8^5qyXZa4@E-`FqSC?dpKPL&-#aNyX7C|-Z286f)cU; z4ssR@pn9SUS@nqs%6_?BVTDD|9`Fg7=#-b7P9p+z{E*(OvM0kchZZ(4!+O98zgeiP zEy^!Gr_Iui_G zCXZzRBo7s?30jBvkUbTge8xxUf;Vn|F_}=Cy5OA@ZAR|Vnf1-Mr)s!%qjHJ%Sd!ko zyU8%PFXU3cT0G=rzl=ricUc1N1bp|iiMhKc=L-@R_J&OY$%}qNhd_N;^ZDuT1tu`? zGKgnjFrTgCIfDy}R7+WbzzRB}yTRH6C78YX>0itr>5SMr8#Aq=-OKsZX%;#Et<%&2 zZuI$euM!}n#fMYW_mb*F3lN9o2r_d)3@(3O_z!eX0|>1bY>uNw@dA?%)x4*NzpwCw zF{_%j2f|}BIykDiKz|WB8<2DPfTs<00|wL>{E_LIp(E>PRdMpUw%1y-P*MTuZ7^5JY=GQZMT^C#AQ18<7;-|@~2xfeCkNa!)u9%r;Ag- zgGLk3%ghe+NqBb&>(q^-v=vI%6Fem0HLYcI?Ao%UykDja4iC>m>t^%@IgZAt(#cL$ zab`HftGMD2FhkdpS`gv$^Ndjf%a4|?q_$`3!2Jhxf0W0vtOtY+u@wQy{~LAZi$@Nb zD(}U@ZkQ_U({rG?MttISzCrBJe|{(#dt_cj>s(AO)b5Mor^s&m$EpceVENmsDH6{R zVJn6n)N3vmO#g}9^l9^Y5qqD%B#vMAARJSumdYg)oLjX8sS3%>BvVC(6pCgF63iUP zjnMcSMrPrJ!T_adX~VeB_!J2Il97ZuiQv;Thr!J#H4IRgRo((UVnlXi)JkSp=YB0{ zd3(LkDgM!Frq)pogI?4?e`+-?k;-cl@b;$4+yj9O&&XMY{FvH;H>MwJerq)=QVCnw z=Mf`F_EyIsLleTSZX~?`yBjlaX1zr>S2B||L&tMs?!_(XNNPcxBtXhIncF~V#XmPzaAGs8p>N_cg4Z)gs z*ej7AiRQ>)E`e%j&ZpnmS+B*qtZ%+9Z9&V zzm&0qJvQ$xRg{NEVKCxuwBvF@cqqj+i7`IyhX{=u%F0}JemG5G>RX1w+eq=NxfE-a zWn#*`8mS7O6U?czQ4&nSIb<&-Wpc{Bf<42S_@Il{kVV~u4dqDzTrY%U76Ubsw2}4H`bh%|$A{VoPbI zwoY%!Xm6o~Ig|lrXczl-P}38bG|=|*7JxG13MkbgGwi{Upc;xGsd*Z|#b&=!zOneU z7pZ%KJ86h8VWvNN%fG-oSmJN+hAZg&U%|WKFYrG43%s5F25-xMz?=Dh0dJ9)Kj6*y zU%>mbEvJglEmRiv&RpuCM9e9tgOX`Mq`6jEx@|Zl(Cg?(abIb9huzFj=s2sgbtt03 zU#7SUx{>D9Oo1o8$uYUq(2m%do;9<3qP_)N+)aGg5V+tpI#W_cPK^Z98XhHdlA$}# zIwSwt3*(sPHBCD$>qeag24s$OinFJU$AKs@`#~7hcut(Un)?GV8bSvgrH2T&+I%p+ z-6QZS$EMVLG{5^t64pujErhPV!i!z!k8jaF-%W!9-j?=pH2fppIkhh2Brb)U=N&h^Ld4poW!uPmUmsLHI`Dh(`e){nm}HRVFUU4 z!dXLSqFiIp-r}{n8_YsD+u4sIjebC*j*|kJa5)EJ3Wn=R`Q}dESOL}Xlb^h63wx#N z*k7h;ybF!7JsguCWwfo~E7VOh9Q(e@&&iVu`!SfE=6`PY{C~W?Wl$Sx z+pdih+}+)s;_hz6-6`(w?(R;DQ{3I%-5rV)cc)*v*0aBv_uc#V1Cva`07Gsv3`ef> zJT7vfNNKU~#7!!-6(<_KY}tF(kOIk!Kj8l-Rs1h`2V)HHSHl6P+H(KpbT13@zv*6E z`wif-3H^dUfvW@i>%@*GzlvAzVRNiYtLzUJEqE{XFhhkW8mp?dg_NazdOppi*3!y2 z$ED{O7)9{74o^Hsai$%l6!i)4`TQkD`w9h66W>ktT4P43P*bA0awPhB>o7|%4&L6> zQ>5lJE5YJag6-m6`e$8jXmfh0&?LIVPSS1w*?^Z#yN{|R1z^0F9Dez%&|gKc#K+f^ zKu3LE@BmR~^z+8l!MH1ZvS`GPAY1$}Z4E2~GPjQl>$;o_3~O~PWWqp!UDJEqiu$lC`ZGMID!1c9em5>5j4WA@~zoOoP z#9;J=2yF-nYB@?Am$|2Dh>hk3@EXU~i(YQ_!|K+*kbn+Juhtbja-OH~f#MXH^<;x9 zkqFThSiN*uokQ(q@lK=?Go7ao^4R4cth?9{GGm<&gYVQ8iU|^|P^fT_8j=m$uXUyd zC7m(BV(!N|g(U|yO}s};NuSRMXBQ|V(YO2nYrIOvVRSlKTfMH>>FOjjKy~>Fnc;Fx zjBI-8&=#{yt|?@lHHP?i$ZS5w{06rVjl+e$R@JuH5k82*rNaEXiY+|RZCLWd(Ml!W zK1|~|S?bDG+}dE)TPeQ5VO5u7%?Q3QHF}CSl>zQs-_16o$V-Rj(DwOD!|{x^EN4cb zY|<}w-RJybuOF(;@eJS2?Y7VjJY5TncZR1-Go;&E?hG(~+m+)5_ZL;*SPJVF){5Dl z5A?EGz>QeUJ5?X}gKtQ1xQmcjthB>D=OkDj?pkBy;8xOVU3RbF$%pVEI)b3#Aapg1X(I!}2SlW46V?gPeTwF>yVbIERfl&H5W?wuZy; zv#f|&D>5y0%P7^3o-7|vG#DqQ9Mma#%1i=OA$ND^Ww{$04!4=1y0E_SImb6!K97(tJYq^=wD8x(rh6HLpa{E#_Eq(r0WFe*s8u+5`EyJmxdRCM- zp~cWLJ1?B%jHZ3y@$|a5RSq*a2VlxZV{mq4A|7uE@4vA9^HH2IAV@?WK@c=>>x=w* zRuNP4ccnP>^R3nNQiP*d78 zbTM17;2&Vm!Kw!AzTrxd>|e44ddOg*)dhCwm4arU!w|0~DjV@q7UWr?=_X)|0CBqewBW}XTIWOlJl58*wWwxEiDf4&~$hJcg{)MBZu z`s@>9+_-*6-Lq`LZ3zm^_(ou8-g+PMao2u29t1Ljoq zD@ym%d!9<;Z>V>beiAlF+JZSJ?$-<|A#sKh(iS?>EZT^PL%?JIH`&NIdP}{cB^Zh1 z%lip?&f@DNkPsok9c(UV7ONrnZ3EX~BDz!v2$eFGyI&B6b}idb#HN6Js$NUNl_^8( z)q@Yf`Y^=B2Y}uL%vvxA%_J!K1E3HKqmYeu50(4qLeEvGA6XR$5*mR@>grZaOkLL` zp=5Ck8-%K34e|f{02do6*GB&CX2fnMiEya}^0^RTI_7#I$s5dvD^d>T_W+i}!eL2+ z`eURa5m=0geF+7fi)ihXKlAR#=h6PTb$RTambm|HUN_zcM<|j#tR?eL5R%)tgNxWn zdZ9)fVKtRHidGnR1LQACiR2kE0&*SsP+ZY&j3sse%FRB}A336&*PWVWWTvd8ZXH1d ztPQKkE|$Q23HUCFeiz>K?y*71PHus{>&C*w%o2wXiBn`t*&Aw%9DoZ6cEFY)(2N!Q z43w=_&fM^VH~6NO@{2eadPO)RMVW#;8dz{;W5%xeCXPJqF$jdr2`EIW^C~j-^j^3P z*F}S6$9qchhQqoA*2Td*L+MG%nj_6q1>ib`CUi794u0lJA2TQ0KOrg);KwIS+u>)M zq}TJgFtyu(CM2Pf%9$j;uHs(%;>h;=0wdIQyr5r7>aNPcl`f13@yCS?gs5JQQM3|T zH%yZh_uzQfotl z+~s+t@71{qM5^UPS^=Xy4PQV?jIV4#h*g3t!0%J-UhG=z+97Dpb!ufSY4B z?96k?f#^v(3PG)oS3n!V;Fgp2Yo&^!D*@)auncBt?Qf>oG_qv9e&ZEDqcJtgvTGOUQjgWtd)eA%`=^Ss=ch+RVF zwikQXt@6mi+Z6J~mxznu2z7)XYJpNwB#KtVinvI(jZim@D8|xV#*9!H(O>#&>NO%Y z$=+$tQX_zOSk3;qGmr+nBgi%&xPkR&6aG&pieIyma`@C^){9~@Y4vDuJt~xrgfxz> z-3oOgn`zl5=Phbjnc0wiD1=#mm~LvejQ$V8FaGok%6Gs*Poegr@>kWLZk5Y~CQVi& zR$mBys#m4TzJwugYE*Ik1gX(donA8jb?d3ui`-z9!VNmWE>0IgE2qYe)1azS6GA&q z;hHId^5F{U5t*S(UIyE%-GY**PpKSG9*uqaz0Bjg5R$lY?6oy(A!(h&^OsEJMBoF; znke|)++vvdJVFoM)>i#>m;|0AXz~sJXgh3zrk$k^TDQ+3r9Qj)<3FtP1 z4g8^w$>akdH`94KwKq>sde-bF?+_0}jU>C8p0+o41HN&OcW~P4^HCj66$-?Vy;vIY zrqoi!OcHC?lo%c6$wWWpPJ`Qqv!u4grTGP@0^wowXR3*gx#=4rOWEnLm^(Y5E;8Xv z;ce$4xz*E7f~9|~v_p=h!L%jZz3Sexsi7Yxa?!q&rlMt zhyePLfNPH-w*`P5SGPpA@EVp2KSBkbvqq%@ZjK(P*1LG_zWwY;^YOeEWRCm(tTqopb_x!U&Umph|7b|zE87!ZNIX3WWP5t>rk8k&m7dzLmWUh^%|9yJdW~w0V4B0n4 z3a2#Hv1~Q3@ztl zvK*=yU+Axg;PN1{Q09cB!mas{TiOa04PWmY<--=uO%jLM^rGs2ZNWCKCD)$T6(YOt z@_i8FVCXuFnxk)7$H9erIiHlCNE4@>iBccAfg?I6JRy!^&h}lPy+)r9@{#x1pZV`a zX`cl6oF=`2bWI<8VukT`0au{QEJX^mGuxTU2VRR0ub*gN(C|BbV(_F6s zd9DU8fB#;7jAjCXz+^@s(R~PCr$OjPFCZO?Fag!RTUp9;k$^@cJX`;op zcv-|`ZOS({Or}RtKzzLR^})_S9a^Ra!3l&zxjOZ`@I77I4i;^!c9E)phLG+{Cy}#h zMuCgsQc88;`h}otUly@t4I6g7W_cz(`Vn3WuSsBWADKfAzjDcyS0y4pRFlz$N$oPtX+By-rL7>IzOz)9H5 zF`AxPm}+>~56k4b?{Q%@eaM`K#Tf<~VK@Bdk8=r@i0XKj28nFzp;I!^o4Pc!)!!2{ zA50q~5Y^9dVOXb86Z+~UM9f%K8Q*>vv!2tg@`|W)R#bO}WvaT8D{()@!uO(?gXZud zGnjiOx?N#rTl~;RZga2t0d@m$K+=oVi_EO^#!wVCF6aAndqng{O@nM2K!B)%u75QA zHP3BbuWk(>uvu{1Y4}@1?eEd4T)moex|r7I^S|lzJ$q)8vK_r}X}Ye~YDT5Z@^&$* z&edxV7TxaJvpnR`Gdk5Km9PIZ(lE@spmnDdmTN18BER~Z0h37ho?CB~P>eF72RN$@ z2Hjdd0g)_C9)wLh4f3PV%xb2mw%IX! z7HG$i->)jk#^<*n=;BG?&C$7FO`~TZ>7mVN7!}iT;y)~@$YyZ8g?#cDl0hD&nZMK@ zc-1ukR*lS{N@Pc8pQ!BvY+%(vxTCXM*AmQl^EhV(n2r%{jix3V~m z;7^|__t*No30g>mD-~sAF44^CfBbshWh05k!zNKN@;{5S?UtP~L|c=@rd&!>ix_JT zm1d-_HRqkNvknIKRCBDWXkIrL;lZ4fF-hx8|6tS?K7@5Rf?;DZyuE{XL2puCAa8QE zM6KJiO>thAlNS?GmOXN>HuHK?GIoayD3mUrf~I34n7n#Vrtm8gr2 z^0DC>xu{t$OMy-sUueqK+&-M6p*uN2uJ5=%*~I_wMQcb@BwBFT{HQ-Ss&JAX>lm4? zyGELX#E%iC#G+5^$Y(vUMq%w`Bg|`avv5)(XwK>~2p^3h__jCO>?8+wwE6UG8AGts z?~05Rjse!;E454q)>D<1jjX%5W&qzsLWM+i-MEJIPVgykIbgxfGUkRY*Y?WXRGztI zD?N6I;zsWOXz-kqG2r6=X3Mj7c$sR$d$3`c(^AVoJ4d?8to7zl0IOXyY3P^emaa!c z&I`W4W?x=#v+e#&g{T8^Gcb?Z-eIlwiHO-14`o3IfYb zICHXSySgT^=bwE!68m#IS%T2uX*>`G zC&I8zh}Nwm1g-9Sl0b>6GwzUp4tyRI+hLzaMMFMh28ekEW3_pwD638SZzbvKCS5hL51-VP+d`Le57Y%EI=jRH zp<*Fui8;;@wXiI(x@5tL&T!uaLWv;-5<$maMA;I+EJgzk@xS9p1!9>BIT6mnABr+0 zAdLk2R6^d~fFQSNkkx~s@+zNzV% z6er>Tc>hwz4C|ML>2Zx|oxWkz`hKyn7QXZ3yaO_!1f6@@_IQUb;DbtPtPde}$k+Rm zHVqH799gy(H;EXy>oTmRl8R1U75VNmXVJv=Tl&J~w_adf^*XHyWz_@BytAYGtolW# zhd`Yw9hq&rIC3h@eMMK?BL}>j&Iidm;bG$G6r9 zNZ6Mp2RLkluBe0)?1V^0Yl(73kp9Rx2%04`IF+J_1=}}Q&4%Fla7*FV_+N@wy17Ue zxyc{fYCDNH2@JgEyJ<#yB-tp58m!ST$2E{EFkrLn%cHG1`X^=Bf4UX6KR-}36^k?|&mR_*T~`OJ#($JDq-4x?; z*c79BtS!NFt1VIC%s@r}ytot(T!H0XC+*F2_IUh0OYFh_!*yCA6Xq_hAz#@KspMrw zP2g!pz0}5<64%Bm7m#wq$(x`X^z|t~rCQ<9INTQmj6{oA_Ql53JU#cjSn|GYaCN#@OEkY48WfzTl@`C zn1&vFLc|OP2@-9aF0z*gp%3;tL_?00uiT~!21MMj|0gBNs-^QUSmIFbRKV>=VzP!F zCZ!0l*h(q{V>bpjh`L!4r%Ea`HZg<>I?ng=I|v2V2L)J)rw+kNHKQQih`-nho%FLT z#PhWWSc>jW3gG%i3RDck_CLK=O?HZ?e|xP4A zbvAZ|Hp?mT&|n6IxOQ9c;d4TzdW@F)o|zOdDW~?l}df-jy|NTzYzUMGnEFUa|cG+gx~CMl3|_4^1ybtrP1bHMRj< z`tindlfMG<87v}E0>9?(>-POI^?B$x`uGp@|3v-sdBF-x1Q3u*)&Dl?vwB$kbpXBn zGbQX2`U7o@6m1CI}?lcL2zo^#~n)mXxo2czs5f-{@p^anhh?LfhRGXleB}pMhbr z`4p028rFA4Mo`I$V^!(49!wq1S}|u?NpmhDCr+8Q>}o>YvfobZb|2_TLFvKaql4ii zt{6}?&2G=#4%+bg?E=2Z`ubCelMaS0O7d zPnKCNZSCUwQ>P>HP{*K-J?rhHuR>1pCEaFnUbfgIbQgv4Nt3+4n+lvc=j-47mD$c z3*$wE1_(?yRC}c@$(Q{x+kLklbny(H$$0igjXn*KrJZJw3|!mUYLosm92w%XnIOjPdLZ&6k zjPs2b#8}^YRZVQ-M`SuvvZEOYX+p9u=VKtrl(ydY8Sxqn6JGuhFZLAkvdcSci>yK? ze{%W%ofbarb)oH-F3Y~G>M|R@fa)Jq=K-%v*)$x?ha?JP`&|rdep5A2G z5&b#(RH(zGi#9$bo`&}e@df>rH%=1E^3a}bIMxM{)>JBZ8Gon$Ak&-8j=RlhI+kyw z)qS$xqj?p4V8)hD69rp+^g=~|=~CE;z&L9*Ac2mV#8b4Nb@k6-=eO~61QOoR^=st% zj>@lhLGL!(tgpEV=HAWGnX`Uke!8}zoJ1Z~$9ye_pQwfL>;k0r$Mh>cpSuzPu4CEz z5p-TPx^}ZKaf9$hH4#S)4g;m?;M4Q2{$x`qd*a@(wPWQox%*YV zSh+ttsSnQ3MQ_kywbY|e+wV6HrC(WSW`V!hSeZ;dfipmzyrP_^r)!3P_E+>|Zk=dx z2*pOC|KkIFr*Qk_w5Zk9=}PF)gIZ3`3ef3IE3cQ&w7M4J$Q)#9UCsUF%BqO zti*V%K||ow@Q$;~A#|cQ0tuEM%!80EP`FZ<)cHHQ?mFMTg**FozwVc40_<4|9h(*F zG#6ZsX!NG`({P3qxS8k-V4kd(u7mk7orqKre7-WxEP*@wQ;eYumpi4bOrv94Fnk1`;Qrx%h@Qrp zbd~GVDert<3)ZvDpDxRAIf6K&F#iP3U=S?7@s2z&v+d|FHQ#MQVzR)wE2d&bHXL4P z93&P!fXk<)KU~yb1q)foiME?3b-QnnpqFHNNwGuqG71-=xG9&I&mobeO%0 zlR{9sAGPiLe2nSvj<~$lv{S{+oj<|^&J7>Vu0MR(Uy40iGH*y{HJEfIS`O)^Hm8`i zWkW8B5_exGl;Yzdh#@S%jH@2PbbYd8MB|dyGURDxMhloFf%rD!mqq9HO}aMTe|Godb>U^rUWS0PFlw%q*Prvn z6OqU-Y2Hv3ROC=EsD+cS9%Rl90$Fvp$4NdNBH!e5NU3jD%~Dr}IlD6-Ng$S6R&P`Vb!I9cb3d6G@BFLkQ%kr-p%IpJu)Qy~eKDzOX28AA<}G1?x z@JiQ3*7Pvp?i_k?F-RyP#WUZ9qWL;Eh%n6ilN<8+k3?#5}~IO*Qipr0~|B z%gl5Kl}tL>1nZlCJQx9}d8Tdz-`(+!seHxliR#(1(f@>zd!4G$8DaKM`j*UrE zis4K7Q`Qa@vt!_mEi<=N+H_QO#;?_9NkR^pw7Ie{6^so=ow8ub6MRd^nyr(Z;q8+$ zE+6ZZ?S55Y>L?ip@|z_?EAJ9oFnumuucjPs#HQekWC6dHhGL5r18M4%XLi>UPOy$% zcgyzOSNg6LKqh`lebPcun}SypE1m!033UAP6R-=<&5=$r4IF0TXHOs>1BaP$Q)Ur& zz+vXd5$m95uUUkNGtNG~4~`Qzfk>S5i(`q?n^bS;HJz%%Cltd^7}dFSDZ|-%auj!) zOWGXhO*JkKcZ_N9OIrNw4%lN*cZ|3xy-?>9J#iF|OydRL-KDGoC&Wf~H{hq7<7e~o z9?$Z2zy@;Itf6I`H?s@Qw&$=4*1B*f(KlEm4?o^Im59PjTGAuqrwxC;6h`#`K0SiQ zQuoeG6&xP6p>$*%JU`atKt!O?-d|in+CpEJQ9^BcF(8i6VgLT}?#_0Zf&}w+(`P%i_Hoo@O^G(LG zS1Ll#u8xbVJ&+3#I4kY+Nx=H>?%d=cx;zjNXE4-{j*C|^)_8{*!;c=N)00fbwTAr7_~_wQO;roW5JUBxGybbSzvhsQOonnOYd@`S@k9(69baWo z7+Wl!r*mkd1XyZ0y>y*VMOp5eXDkTGQdQMdqkc zR1~&q&35Xbs1HoCDqsG2Y}2Zh7)ngaC=cTv0^^l{RomDTY-9oi(nQfm_=K+IV7@QJ zdCelKDQFxv3A&XS-3kVxyEnyVaH$p}D_&wO-unio$!Q$^@OVR@xpCDyqH+ z!r@adGMyx>0zqw-Fsj8`RsmAXPHQB~SoLNnqxt>!`OjI~(9(udkrs@+X+PL4^G9(v=Y7AbOxdpJF3)$v7lhK)YTPQzJ%EQ zygB{h`h5ddu@vk3hRjZVJ7Z+GnQ_%Mf>ya4@El3#QX`xCIZcaMfyWtEsY+=c$i#4J z)hk=PUSOR{ms&rbhi`&-ik~1Fg`umm3hpFT=O7#C-Ajw@ETufSo{y*Z64)B$KUif-=z1+(o<(?B#zd%J zHQm1Rz|p(t?43>r%-RlH`*kn@&l0^1L-Q1CKejjpM(afKQLhzsqcJ&8;N^c=k8Ye~ z`09bJOb9&?5a<79E0cxIfSncivL2)Jmd^johmty)a7#CEqjRk&XzwgrF1xMoW5S81 zooZ@y2`42#`+XotkEJ~`a(_4tSDz&m9+Oy%?!oi>y&X+WU;(;3m$Agf{^-7dO5CUZ zvdgkh@=Ocow{Ts*;OBR(7a89=JmaEJIp{-vNG8AL=X^Q|g%2NDQ~R%fK-IVT^$AIo z@I!Nts-J>gRPwN6jrel&o3FR{psNBZPIoFDk*PKodkl_GQlD_SskWT!DSeq@9YNe= z4@RHrMFc;Hg;Y624asr@c7fn0zG8q`b1TU?WU5kY;vklGL8%=CRBMuG+FcwKd;l0m z_rvn$!}2AAe`cRzkZvS{ViH*5AAdV7b-}S!?hIO{O~wkB#_yYqGKy2DjP^W5#&dhrm(5TwxW%vpb`!`GfG3EY2cQ!!M-#7ntBHX!BI(qM{Q|$FxZfBTANq zfT!HRSRau5m{}@wj)ew+UkuoE$^ONKA9#ACq4_bg9ajBa4IkpBkZ6l6y*)aI`xoLXDx^--F=IW~>R|@YDXeM; z48qOPAx%C1nxzCkmFwi>*w>hkzR6e%Q7^;i$&p~JKqK)*raI3#H1zv~)^a>j7jVXq zFGXD85AlrAlqDQsYc!J*93+0@yiH#dE~g~VKZT@hW?Ep5*5hYue##%#1+I88X1W8? z$X`d3$nO2(GJmZ_(?iU{S<4t(o#Z-}iCnE7}OVX(K*Ioi}-$R=)5*0^t;ci-dH>psIX~zm)^Uyq#3y~pe)1=K2P=WUAvu7EWT@QH zW&;E%b|K0}!fey+P;1>#UY?D>;t-PEUWtctNrHQ{k zk0E?SWSZAOLbne_Pkrz!@CMC@h_lzZ>vpKm>t}^M>FGK++(*CNPt4U61igjk53KLK z8ll8RolcIucG5qJS0xUyFDmizWyk;|w*}l?#6Q7x3?bU@L}x=1q}#-aj=tf>uI$-I6im2M`031w^wU`V7Xrvinex9?K{3 zTy9;!Y7l+N{0IKbycw%kW3SE3b7u==G@Gw&IjSPy?XgE;{bfJAf7vgYp~h;1f)^}0 zBa{%xeq%<`8}`Fw(q~khdipEr6V*syxpjDLPnz>jM#<%b9TU4KYRA$8GYd7~Fyjg5 z^N#p906U{5xgMF2-e1!`SCUKla|eV!crhnpWlF!kZte?v_`Y$xa}mjZQs-f?>4V)* z#i!kny&fHHdtvX$hCDLm0as%w#VZ1Y0FMxZ+E3Ol5562C`O=e3gPv{7UmzMjpWOtC zuV8_p(KeE`67s;j7m_dt9=Un~inY-c4&p|>K2wei|F;hX7)4<4^!^Tfz&x$c%G}|j zP4J^g4Ha35r0Qr1BDt^E1{}FQ1Pf-AT~Us073Z;tKzJpqU?Z-#j?!WMANacfC{+E; zjKYt6T>4~{t|DMGLxGWoWFWJy0pYLqi=<&a5dMs;<9bbj@YlbLA2>D*gug0ou;ko- z;qL-wx(YCjhk755IgJ=XY!Tufo(FUNJ$(%o{*`m<<-8*-q==C?#C!+AWCdBS+Zx|W z8u*_#@;Ch7dA=h(Ah(mYl-a^iazI$(%5GI9_SR(vI`_ikXX9|$S}=Eg2`LE)0Azkog*fsR3Ry?p zlz&UkbVC&C4M8NHo&HW>9wO-w+y7e%XU{)M`*jrjMJ~*!2$O?v;Z4d^18kk zpVgI0a`WIjG6)sD_Nv|BSBC^->Sh1j-quewh}!UfSnxj#$i2%tSl0&ch}a76Xu~L) z^B+_!eJ~q+Z~<^nKOATNUZsLijqnMD4e#k2w*phUA40>fq?aBf_{)F+9k3%u)&1PN z)%|sCKOGQTe>(g{#b$R5@m;ehdG|mKlb~^d+3huM=*=~54tF<&jsGAaO2#`736)}e zC3{2QM`6LFh`l*1ZQ@henkbk{>x5<*V?!yn8yqpZz;(rEhSly79WeOuH0F4F)$VO{ z#cQg5GAm}22a2QE;st%CE~Bu3A=me%p~~688&ECaZ2H*9JNSBAP=b74h9IwA8i^CX zw#MTf2Qbc!>aY2*V&gi+PF<_jcQ(m*R??DhZ?t(XDi zbuBm0KX#h+YzQ}AZX@_`4xFcBu0AZERJ>c_Xk(#`nP^WArT$1V028Veiwb zgPYde5Gx`?l*S@ss1*hwB>_{sD{HbO%K!rl{!mRapIqR6@z`tEFtxuS-i84|>u7(w zaQ|&Uk3Qr0z_Rz$H)C7scM7?9hHaj}L+&_oyQy%+Ga7Z*Vt3MQC z%92aU;v6d#qW^(Y`H^uo6WFmq+kx6xy6%+SFFNTWRmBN3w_s@*?aHu!uL;Njnovu+ zD8=lxN2cefMBQF0X)o8T=BA!&4)lMo>-_N#09>d9Bh&1SEo=d!1Qte#(Fjj1T@w&pr zoi)#s8oW_^P*m^q&p8gou>uv)#c7G?Tr!Pg(VALPEdp(JKV6yVOj0VnGl2&y>c)s> z9b!K^Z3aAFgta!gN|bIA-tr{ z`ndA+I~bfL`39!>-%Z{k5V~hgaZs+jsaGx0P)zUCmPyXK`l8vay$3vX(X zlx;y=p!GY~>mfD%$)|N|6ctL>l);Pocv7}xn2|TFKSGRaF*GgpQfqh3L@+y~)K!WH z?asf42GJ5~BiF*ChvL#&7Enul5#|j09t1oB+c1(;tDx#BrXm&A`*fzy|1~%Tuk=<+ z0A{3xP5#RW&B|%O&c^v4bMRlg(cg-t(VXa2Qm;DwxU?=2SPtn%Q?>GWgDI7}IEm8y z_{fbOSH1JuhyL@7>V|5w^GUtfYhKpA2sSi~UG6 zPMPJOjyd$a)9;Hf%mNoa9-fv%IK>?bm_{Kf!P}5$)#}}xu4qi~s}UU&F(;9dEQln>ucAO@~r5`12=+Oh8GgqCdY%0^-sy82hKNsT(~YdbVB}~o^;o1kp8zNeCCQi zSs;G<3Wh_@&x`URM9aMrb6H4|Pgoy#X(8VQ^;-33!PIH4`q{KSSaiY~zA$Uv06gdq zoFifLO*jr=WHEC*1JgaKXTn<2LR$DAZ^$|hSQLj>?3nL7T}(5y*Kv?gktHVcx=cy7 zZ_{ZEzUP=M6K%7&b3}XK(`i2T8(#8PlQEVkd^o)34rO!g$wFC=JyY<(I>@?jfkv1R zkoyepPD-V%Mdoz-oDdlZxCk~#pGfplo1#rGvrM{}K#iQ$Qy7HJg&}*tcES!(>i(h5 zo&?{#ijn6SrShs;ohuzhD1k!;OltR!1r-c&cuhW0qMV?3KXhJ~zzydMxmd3}aYkXt z?dj2bbb5WXQ=qsW6Q|$rssu30JWt&0rd0hvMrRHq1N#7do+I7Ag#QvbA=wet$$XoH zFuyIajkdZ%mQP?iBq*oLh2}xyAi^PJ`>`;&A&;5>JF54dhxpjPM0rby1>^n2cPc0O z(VNf29yfFoT0W+~H+wkKr@eay!gf;V%;SF0q6&=8NZFA~F;7p4`x*Xm6nrttl^NVJ zNG#pK362x=6x!pr^K6S2P-OJhHNi9>8>T>QmeCc_&uqlTgc??7w1*EA87(-p!Gf=9 zHBWx#KpI67B%N25F+W9k!c?OpK8$7e$#e`HeAd>M4-gILyl3J{&}~CRzJcxE91-S6 zem}KB_=z#z%!fhd{MTeOrLq5HTBonz_r5nmq#f_a1-f7sf3U>ofxI6HH-P1HS^ZIU z&_`pxQ$O8d5g@rVY!%(Wx8D2dFYCO>B`F zywsi{d4}MKotsHscd6t<*O0_2WCnf(s|n zWvIu4wcidOz%%G32k$*7K{-5pjz^F1^? zI-xMyz6&ZXX?6BNyD&6edK6hH2@{0x4NaOC09kuyLydt~Z(}wRW)Aq?pcZxB&y(NwmdoPFw^r$4_8#%UX8^t6 zvRBM`Tz0+RImaKZXYTdU3ITdqiGfPb5#LXd{btwM3n1P1uwsD^n*TbfxhP=l&)v5J z%)cWJV6b+9_?2-+e0|p|68eN!=_qp^6tJuMs}TN-SohyG%&~!1Yz{8C#;FVtnBv#R z=m>BnttBsuZ*#QE4>WrNojNn%p%sHOwjOoBl405DR@1TSusLDf%Wl(>uKxH^2_&5sf zntyyoI@P`ZIE48}OMwpI7l#7L|K$)C++(_&hnp`9BwvB-5!4bCxGkf2Ax`@R%`4eR zFm&_&t)jaO^)lYi$-s~26-Vrv>jrf;cida4->*5B<@d3tIZkmOyDSQ{ni-NL1qHS} zQZCb;zXN7Y;CUwnP-yhj1{4}WBI{xups?tjbq*J!lyuhA$Z z`Cp^aPD|XsMx&Yi>^t^av&@K5Ay_go0Q!Lel&|qU?q#%wS@BwT@V(hC)Fm0!wy*X` zh2;~AoHB5s&Wq>sELp2=K^0^99VjU?sZ=u| z*7@y5*^Ge6JW#_}J?2J7Ll)l-?A$87tI~rcNM52M5HhWh*^lixb?FXmG!@7qpWQg} zV;r)sZI8Hg4V6Lvm<<9tjzAxT zwzUE~t)XtWVGlnDiMQb36cNN6u)_1>BI2*Vqpg6Ry7n}V6x!nwccO!#;Q1D&6?~Bf z`+b=`ymhQ3q>2?aJkRw^fO)ZDZH(ZZZca~Z^;d0_UiVjRWP2O=S8X)C^HKLT5?8bE zvw;88!@1W$HQK|Mv_ z+-J&%d*XW6m!T8Cc%*A?xYc#WS0U|fKU3~5+kQgW=k~gX?wFlZ`1(dA7?n4G!<~h{ zyy_BzE0==05x*AX2P)lc;}%`ruOCc6f6Ni1bPQ@YF+@O}O+(Q|iC7IZ)#7LSa)+;_ zn=~+4)BxQ^VJ%_rcykF-V>2QQhTUsX31u*&AGO|`^Oul9DnG)A*SijhE4o&LzVVA7 z{KES(?>uaMD<9~`>mfF-Y43mY_mWrT0nD;4 zPo1pXEGcOiBKNi`ke%wXc6XHx{hjT z>^qOdxv~hz){$7)M$MF}`Uo^c&R9T4%!JbQLT3Xnk@@_~OAdyuu!bK1pxeks_m}ve z;d9zL(4U|HfI)g^{d-7}tX5U-CN3?0=7N37(q=Fk`!XwpvM6#_Co6Js=lS&E$McV$ zbG7$!+i(-${f`E@jSp1X&@m>o$U6Jf^u;k`I^#g000Ixk7s68YSV<0-k&@8^cKTZ` z4spU#qr{Oqnp-Y}Xudf4#1TuC!#4cWiBn71M0(=TT~!4e1mpK+LpT-AEZHv*BPH+$ z=U>CV*V6xHo;Lc;94AjO%q>SSTvtB81zk2^+LlM7ynW=ArYZAvK8-autXOWOB;}O- zKV~CLpxLN79czfNnV1HpPZoyMAc>a)>sDbM-6HnKFss2RuO+%&NGPr^Kfb|s^T_|l z-dhFL-SF9(XmEFT*FbQW;O_43uEE{iEx|3gYj6k_+}+*XW|QRo`s+TYZ)U2_Ow}}3 zo1}{3f~vj$>$lePu-%dLSrgCg9}%?%YOSL``4O(Jl%t>}Bj>+;cCM83y$0P07DH_H zoM-VusHL|s)pLnn_s|vng>xO1hJs9mVSOe2W92W{h&76}jC2`h8@m&-^C|bh6DZd5 z*u7Wliar(xzm#Kr=A@ki4T$&ID*26R~PBN8Z^#dvF(EihdRhRrp?aq41+4zwEUXXXx zwd46|M_c&p@hIcJgfnxkR%?N3KnXdTwK0E&h|7jS&=CoAgFkon=4VCT=8`@#Ap zg@Xuhnqx$+DB@C#+^dbUM5nFXwjVb z0Z>V*CcH{Q`f=(v?P+<-o@(2w-j>y}&HB}KbC*Zdouyl`<4envYC+{AUx}#B$e_aa z^%HxQbHAag!RTA5l>b2#OF0e``$Vl@lvNMKKjLh$$Tx;3b*e3dp-)t9&aB zeDaS=g9e|icqb(t1*2x?{UIeCg`lbxy}px@IwS?MS-H6#_XvZ^Qw!96Kd2_`SlAs= z$D07BGo-V?{4!S=1vl&XG4W1HVlA~km7Crokh}Sm@^KVo70(7Zy*0xG_zZ{M*TSQ` zJIUN4#J*;yI-Ce)CgSU^i71+xdwl!25`&U>Yma zVf>2V9|5T1ePSHOGIpkkY$%2WfAPE(JTPgSZqi?wkDhtoMsOT&e-ny(6RE)(pWX?@ zngBxaDT(sukivID@kt3oxQ;Y(#pz!{aXKfO;}yBrz;~&VthzKDjv;C>XNmT&miznV zAd}nmTW#M;63$nyBe7Lw9XpEvXlO+Yl_eO7ywbvHF~)6PdE^p%e|;O20+*81`XZlS zbulV_Gyunrg@!oUo(}m6irkcn1g_XIxJfRpqB;3N?w`PSA6b-%*VmA(UtPw3J;RpIs_D5XWMe-4x(N@P zE^q(FqK%Dh=J^|w#H=DQC?efi^Rcm?S`TMO#3+GQUd-VT^%Rzig>ATW)^46N`&)!c zd+5tMpZHk*oljf``FZU-fKQC;Jc`$Z+G3z0^rl{kFFR_{T3!(w?>*4pNJ>7eOa z`-ymALo!j1(^I)7(RVjp)^sf$!T9r|j_%K|gIM*7$c`{o=RgS(hyGn{Ar!M36C=)W;S??x-$N1NBprWHp!i0vC_8 zByYeO^5+pYw`5$1QCXDqr#%Z(<|L7Q&RexpmR}vO2>-cRy|p7#QV$3SasUCr|53Xt z(?8+B|Ed*29#GYE23xYU5!(FkwL+x^APTa4Jj^ew(pQf&WduHY$20N_U2!jl2Thq_ zG&0AO3xQMY7ap^h%N}>jVa&vy3FQHhVIl!Evj{?SX-i=!_g3B33;^u0d}Jf$)8vVk zQ_I3hP?izUZ0nTI;%k3&L(y!SvGKTRTu;j813<5;&bBvub#--gh2K^~^SVFcK7#+i z4gB1j?N=q~HYW>$VWgK})-#Y0Qnq254CcqByA-_!{GJT3H1LcatEF!%0XZ9(Ji+XC z?SsAE3;H&FF&=NET^80ybPU@uI_VvOLC1-u+D3{z-;@l4u2f{*g_4}jK(IeDV8vZy_N)$l4-eo$ zd=AQ4kuZezY#86hHmx)5WXn~5GHk@fD7Ku%=y9-mgA7Ah@Yjs6K0H6XoL@gmzHJ>H zZ?#^N0Q5t3q52F9k+ssWnR?^=0am;A451CZV})}O{8B$%WNW&X2Ob#ats=hUri5d8 zhg$h`?1CUS5}@lyS^m&6MfWSM!H~5y?J#*pN_Kb`5D|6ZX7~9IM5HiqARqQ3?rTH4KE zBZX-MUsxcvDhLHiXrTsRJdF^$`T+wRFVt@ENVPDh&^09SH5s?lvqaPlAN>63pB6ZW@Wd5`X5FqrppK@Gs za+umL#~O1BQG9>j*8*6`K|P2S=nGLnt_0n?0M%;((%px!Cs&hJ+1qy(^3lXh1kqm> za&wg?g-pPQcNVhhZx(W-r^eN97V?3xJ@Nc8eYMBOKuq2>NIDI{X@qQCpFXP%#`tME z*Ll;m6=?5UTKHw@?w}0%s!NXUuY3dYW?#*F(K{5IcBe;S@SmOwiN`5B1H zdp8iZ$tBt233Ao&^z-_mh}#Nt1H}x5OSU(9t7Gx>pW6VDEo}5Jv-6dEL z(%i|;j}J%j$$~TRGz$k|JVl+Vk1$OgB|*S6HL475%rilAH#nWRMIj0I-b@={f)xy; zRu_AAzd8ixm_~ZR`Xi?40P{`b^ip}FQ^mFV9)CQ{s?v2)(Q10&>JVPxJ2%NZw#h!R z`Cn+r-a}E21Jj)PRLH9tp876j6oqU#%qrPhW5dYLrsjus-C|A0w*9q5a6Hp zgdtKMgFa^U+x`MCZh~wrjJgm+g~^&FXv30|J0^WXS<`4t1igFLs76{98vsH0+d+?Z*{^ivSPE4_JA9;Jb>0AU+HrTMN#g(Wcn9A>yJ9 zJQ?JJKCsY&n$lbSI}e!^JcX49+qz{Lwv4UF5(dy&yEIv?k_ za13r*k=*EiZv82*sBXT51Y47^=@c6oCT?q5>5a+dE*gf<=@Zw}`U z&R=yG%pPbXB0D%=iQNozPmDS`pjE)+H@fXiT$0F|pBxG>z{vi@2P&2>FV;*(1RoDH z&PnHtn8kk%CcN(3aH3a20|U7mc$%HNHD$BohxF8A^mD2IB7=0-N-Xl%5^2qWE!6e# zlrw<(MCiZsI@TphNeH{E-rxQ(Pq1d8ifIQPXE9Tn@*pE=$%r|9#)6o3WlJonjIA|O z+mf_kzNAiLZnRzT(V-EIDaabjP*Zf^6wB}~I@-%7(rXp^$YT0TWVB}}~ zh}#pm>i&Qu02tXK43HkY{E-no2m@q9Ps40J$I7|DvqtQPGJMN#tU+vN;=&`NzM)>B zRh;CP%!Fjskh8HN8*g>I+vNm;7o*1gt)3?R9u99uPUr5V_mZ5kwb{b(_|xEL0_*M> zq&)q5YT8tW7;W_riesL7AyC>*+w*{ zd#wqu5n)@-{D+MQ>fJ`P3$PLCBoDQf2kic_5v~1WBij0R81W#9jYjc8H;U?bv{_0C$2bO!%W?M4tAyAoOUIoQijfP-hKQfK?3 zS<*t}P?Z6IMs9saBexH3F@J~WIFk5snpREUZ%W0wU4FEA#etT?0Pqp@A#FNtK%S3n zL!QfQnnpV_27ruQ_AfGW zJ=jF0>W5q{hFTtXuJ%LAPqZrujop{NRZprk)-PeKyj!Wzy}|6zl2luR$u&8VMghqH zGO~rzI~kdY>Qap^f;(9}Zooo)yILxoTV<)Es-X0NdYKA-Eczsz*-kgEQt4yEEo+KD;4b5ximAw0=3sw0@0NCB6LWjz{pH z_~3hTfz&Vnj9mY3VC2FOj6PhKzwrS}nZtpmf z;p3A+Eeg}hvmH3bcJSjmhVXa0b5AG+fRTG-OC14Vp1L+} z#k;<2t_U|JK#20PX3?p#M<_G22P)*Hr~@!4(HMoe8`lcDil2$M)IsfEhG4_e?WR4p zGV^}opx{1{ll62o7^&^v+bi6W;n)f1n&2LNX;?45U2r&`zS}eEx{_cZ@xp6wWw1SK zmGtrK65gvj;dB|9(s8#L?;76a^EEiKQdyU;8ZVsu65768sis>OWP_D#5&nFR!M3C= zdHlMk{PA^cWFUp&_z4bQ|GPZ;HrXS{XV(srN3*vP`p!B_+)9Zhty{+!DnNXIpC$I6 z;)B$G;scbw@j>%{#0Q7XDvO{I$Ivl{4{~rppG{`=Zg6*2dx$$P6$9LV!bKD`|0ONA zt=-T?0Z7Y`@1*5PK_s5YNrxmeO7L01X;vCQT>;o*p4!CgJwJf82>zQNSk5J;6U$ep znEX*3nXCO#9GOs~sx=a&g2a^LD7Yn$twQocN0t*P=(X=ADDuZY(1W|LI$RxcK~Nd> zQAPm)NXyA(UDl;y*ubB3KUsnS@&h5jt93KLtBf#ecS~yvL46>NyE$&B>!0dJ@He%g&4`Qg@PDy{TMWhb~2dW z(tV+MBk8a7LK(1h>QE#zYaxsUU-iDYFnB4qA#^G1lUGVJ2NZHY6P6qtIAy+%M_wgqF{lum0=%!SDPaYU_)%BE?4Q0TNtv_RUK+w3dOCqM9`WWmGBlBw<(V zldyRHER={>1|^GRUoq%QK%rM1v=$K$qTG}OHOCzQFzlP&pkSbxfgfLjRjMf!cJ9oN zBz1XF>Y_L_tO|($ol@GM2wiSH^sVD15s3T)3&UR7lROl=5EtojXW{3hZpBCo?!L#> z8SHD4L{!U14NEY__W)rO5Fh|{&%XnNKb+NHHQa|>)Ymf^uwIQ?X|49&T0SSV} zhyb08|V({@aQH z-v1{m1}R%UEnSOItOH|VTSjLTaRYmsFLs~y*;RdCFE3TrYhhlurQJue?>_;8gsdOo zd*>w?fxP8@QMoJx(WeZLY_w29J}q|bU%|^2R)b9I&J7x1O)d4RHj&QN`uC90cn7Qo zQIcuduRs_sv~u8V>7Z;qkGDi!1`M+!D_8V(ul5HS>+6{DNeLrUc|3;%+jbZfI|Mlf z%K6$1Pp!}|*j1{IgSwVIwM4a~vK}|Cxgyx?yHj9i<1ZxLP}h@BTR;&9IK}QGyVBxl zYf(779)9rwY6jjW3BRIzSYM}}NfZAfxjl5>kj9AQ^V^@TII~5iN$qY`J9oQz zbe1GO921~F=qdoxPdrZn9MCmC6H)5Hih@0Yp67k;UBR+IPKj|rbJyP{!^v-tYNM#C z6y@bw4EITGvLioNSP!)FU3@G`Ys?@eM2l^`=fOJ;0+hgc=#g(N9@9A}PVU_LS3f~F zBcx*n`LRVYKR9{iKrN>F&0g$>jcb6bbmwl`WplTFbvVa5j)N#hJJS0Aa3#@iY@^$N zOd_05?|rqceTL<`^GwkVPJzvm`^o5u6r|s6qC*O6*wf7si5^$D;ehs`s@5v)g#)G= znTvEmU0(kb=?Ynk3imL9Eg;DyWZ*?#UonI)xbdEuB~qmg3i%GacWab~7e#1l1{)wt zvUaBy*=6)U@=CAlJsUD;&wRe`iQ%imf3X889L66gb3Z5SMZpMWxL?+O(i{j-TBDl zbPi>O>&Y%1psru0AHKO*v*NJxmFwwh*?zmwS!T0|eAvxjM!mlO@!4&R0UchbNyCT@ zb+rv4gstO?_=hhGlFyyYb3QI?`u22u}ObK6_7s;{*e^# zfdeGPd(XQ%?~>wMq{#@P{PP11vk6>5hx=pjm=Uz!lH!OJuvd|DM+*D>N)-BKCjhe# z>B9@hyQG+;?q8B(GJ>R=@(Z|sB*lLJNQ!CL98w~^fGOhPe@6s+3v$$~Mhicq;YJY! zP0Ij}$j-cucU*>-ZZ+x`Kkt#A+&kb40lp;LG5LS_k{<1$K$g{MNY$+HgCtq+R^0pm z5y8dph@c1%5qR~!I{0_WVm{#p(-?UG|FIOeiupZb<-5r5g?cS(*z2FWJ|oq?{pey} zfX}vq5ZGW=1NKVyY@>DoJ`&awmm_f8T4r*NRtpa_oZ6wrISf6KE{aTIOSy6YdlOHm zHa2Lw{PM=f4ehwpJ&sBLh3I@*ET~O0jUNVO3}*9Wdy@{b=OM4<;&6Kf-|?#OPEiAp z5ZE;IDu_VL>NspPThvd6GW+>fU7;H&bI?>Rfidk-ktT`Pq01ZL6zVOy!8Xr0MRKya zkLuT&{R{xv2sRGm>KiPL;|Hzql2ear&=ZA`iYBN~NM8 zL&wL&m8{e0ayM;`Y}E40+hnIV@racTz+}JL;E(ZbAN2pxm83@O;6h2ccg zFA6GN0psmctRC4OP*|*;AOkx+3A`&blrZF4B$+<`x^LS z#br1>e)V6RNvrsr|2UJ}C1V4f&Kzr}GvPStVin^{gj^mGSzSEvNNRUDWf*U?9!@{C zAN=DfR{qCR?9sR0IAeek5dPG9G>hYM=>Q@t`TS#TV@*HjIuR!1xNm}eg%{WQz^HMf zAQe*335wz^Xgr9Sw$m0b1!aJnt}myLZO>e9mnLp;JM{QrPF>QOg>nWZ!Kh);Wzvj=$zch*c?B}9+oil3P%dySujYan z;H~fHwGMRtxZg0)L%MmY@V^ZS?*0`Lc>E0sNd5q}VCw@07Fk;q65jp|Oc(Caewy4(eZ@$I!s8I#>=UlXl zjdQ)&xAdcG{L_dqSz96hRxv=>JA0ik5r!+5_xXkI)AD2uOTZf&nwkNO^n|MKEVXUQ zFJXXGPK40&HuV@=+o2m)iN?Hog2FYM*Qz_vp5eF7aKJz2f$HuikJ0A2;m|BIY5663 zCYi~lOEZISr_J+}x=WMdTzkV6%Tru8huBE%@c2jfqkac3#vuQ+xi4NQ@4hLaQd{GP z1FrVl`%3|zPh!3F)hgC7xm_)_UE#U0i*|Ih117p-`nNmt$HNPjy2^DM--+HtK9MS1 z*2=-8+BOiAT7Wq49j`{!c>>2K788ZKFmQxgFf9w) zaosyf&_=BV*pn_?z1TDktIqowLg&jW&R=tMP?F$5>LQ()ADzFjOrv22p7RnBwPLG8 zz_x+}IC#eE@(gb|W=uy;S7s+|IeHcmv=DkE|Km?ut~S(;99OU!RL|JFqC(3Vx7xf~ z00x8v(B~1O0CDmER1E&7V(>o|ga4@*{7=Q;|Hl=B6#dAjbij^e5^hp%J!%qhs)YNB8YIx^uUM??w4oQ4C+M9cG>0TCZ zsQhj?Oufc{5>xT;^kBeQMbFNRHN`bvK-HXQ^I;^d7K~@^e2FpQiylP;Y0*{RsGGy* z8p_L+sI4F#1-)6`h^Ul!LX90p?m{R+u!A(hKHkcqOcT;2xy>M*T@K!~aaeFulFL_~ z=0d8`V@V3Fhff@nu+}3H!C06?WOq6Z8@2}ll7=R0iBh|Bz3ShQ(+iOY5yDVfa4@q! zlLFEBYTz0Pe*yGO>W3npqV{Yc+d*@eFJ9=vg+pP^6rwLScZRbGKWUkMqAFBJ6c!gD z(2fnTSy)nLq3CdS*O#+Lt?}Y$uf<8ifZ5H zMoOzmda;4{F~n2_otplp&5ir{g7w0N4ar{y=o%{=GZ847&{ zvKmSH@`Q5bhu;XdT2G2^RtiBEDR4Y()q`-78$B}Pa5AKa^pc{HzsQI5ZoZ5!4D`P6$*3eQ$JcYRDV zxYc-lZlBf9W@D1=NQb`TRrZW8bDN)Bq*i1tui+`OZjY9A-zg77wx%s!+`g(dwQvoL zcj+xpCtm-k~U5n-UQd= zZev!mD@&1W&(jR9i>BqSTXWOSH4aUtS+qjXXZRx182iCpq&cBNASiKy(RNIvdP`lH z`IMvCkUo=pU>;&WnU}*8^bms=zYVe&&7o6iBtlfKO6ZtWhJTR4j;Jpn(4^{ZNd2Lh z5hvg{X}BMr$ZOCeigIv#m&dsSiI{i1;iEMVAF+?--ZxFkRX0Z!Hwd4;npgnF?aW%E zocpcH3&?~jyBA4!Z)MTJXADjeKWGWas)KJewlUTj8QkcE>mWENlVgb>NEJG_H8D2d zNBGra8SaT^|06}VsRO0QK04c(yqfvN=NK_hvad;8b`8@AS3tXC`Jgl$P2*>p)M z*G1zk?o!K6(`p0zBUk0~9Ym_D!hC*8_beK`+?n%HK2Mx$fK-5oE8-iWq&a&McRs?$ zd!W;*jd?P6*fMQ$ULC{$-MnKCf`cGSlMfPK)P9lp?opxK_k18Vq{j$KYY=-r2taYu zul_VlcR!A%z1!IM=>Up8B5|m9)%GO2W^ZP)PFt0Rjs0=R{r+IzR?mN_Af;>7ygfvk zovO&N_QhQ#JEFgbxL^ZjCOD)3xh9THHcPAeO^=Qec*z}DO^~uUlPQK`N&w+FF=^?W zmRBg#lUEi~6`?G1a#4TBR(HCnejE>A&fmr=`*XuiknmR#X$;genr#D>mA#MdP#f_8 z!oc~#1;MfH{asy-L6T*}aY2~26hU%Bbxo_8(l|B|=I7zJ?z4IptB$jF8;hAj6BImo^DW}QEyyt_0gmU`y43j(fnyeBO&PG)CJ0e-*9vcNrVo&$w zi@S$CB!4CoQ)lcTY=5ldvW z&DoAw^|>*>Zkrw2N&tB6#oV9z;MPNAm7&1S`NNJKWbojri!EZW=_Q=o`U1BL`tb2T{>3nt}3EBfN;Y995 zHn!8h>3qQ*V@R3>QlbxBfT}&cG0ShHha5T=7A}0LmKj*V#={}LjY4_~4o&`;YaGhX zD1wVgoQ+A6jY$|?)YHK;j(i9f4-O(sE(}dXOdAa%U&Bu)tZ$DR8V_zk1RasbpGYeQ zBd>-Fo@?Z%5!$^;iMWPM)N$hLW)bLCDuf#i#|;iC00+)TcgnhvB0&8a7mn}dq)!!` zdU!=3l(xg*3v%yKCG?#lk-r>Ghk7p+#Ogk%v^yeSoqS>oOyq=zG7o(*@GizHp40|n6dP&2oI0!?N!=hC%@aRzR z=nV1pn598_5z`PaMZ$~MVx$H!FHCsbbSUe=dIgJNautT5VxyOeD))bTKocOjG z(Xa~ieWz4Jxvex-h}F=BRv6AFtZzZhPZk%jaHbNYOYomQ1pEg%c!{xA>}H?*OOLm&2373&_Amr_ye52TVWq@f9N-}2N~J;V0ek)>)C z9nGCAM5e-6JD7;J;iB(J+%6&(q69QJTjQ8tLu-R06@6y91M?&Kw#!4v=P-NV=P>!Y z%R3|R;OK3G@#t;6$FtC^*qpT}gGLZV_de{9Ly9X4kBzuF01qWHU2O=)N?{S{NSXF| z5l3X#h=C%H5zFO}ekeDDF;{DzcQ`5X)@)A|ADk^v;x9~+lNYL~1p_{)i6!oI9f+!l8lw9>| zBB$9?d+35l?~=x0YHlEY{mhy|NLl;jmLA?m=c-#zp4@qE#R1C>meito`>9mRD`%X_ z1Kz5e*}LsJDoqkQ30_F>QY>imRiu%b*e=$pc)_KgQ@cVC#pX+ykEi&77+BL$%8M^k zCKfOj*5T4f&12{$)3F?ZpBHJT3oT&qC4zTzFx5Lr(gG1irxVPVveoHMCCfvFrgTHAkMM6i5>cT1D)xv5UF@PF3XZBfM{_uuE{f%!_(^0}}--Aj0;y*$#(zGs;jtpXYWqmz! z>lrcH#v+haM@l=DOb zcjn2X_@00sRX1ERChK-(!*f)R2bo{pDeIk{lYiQ^c5$kHuyNLWa z#DXJE7Obp&HMy1nPBgDKBAu0nU?-WmYwhs;7g0~KM!T{DT`QE$%`B3(!dj$@mHSZm z&qWWY;NAz!i19J->N z%7gG*ZUl<@bVc7sRw4HU3gkBUre|dCwsHui^9#DJ0RMt=9#j&~W95JjM^qw_56+$a zDXuBRPQgWp953m?ijlHRrB|poqb1n46ipJ-*EJTXjIz<+u&QT z#b5>_rH5;rMV{v6*Zo+us*vpw=mFVO83EWnW0o_28_K zzdyJ+xPE-@jwd|NEI4_@OLm}dBbQ_|Dbwo+J|K$m?V;vPDL%hRk8)S${fB=iU+I*bHwX_}1hA;lPi z568rva7m_SgIR$q_!>izgYGuhLK*?wN%Y#LL-(LS->t`&Vly!v*VO?#dbfuf5~Ldp zsF+FXLLh;}^P;&t6m$__ToqUx5OdIHBP@H*XotNT!tOyhVzvds6X|VUU;5Rn2PDug zsD`ax7w`4oJ^1Y79201lcwZ&{=}k{gcF1n&?NtVp+iv%v@~u-Ui{c|;;JfwZ+#jx4 z>S-~m_eiuLVe7m&%j1=u9q z>}}I~bM~fZ?hYffDyp7i0aP%kjMg~0JUAG1Mh#&He`U=3_ak=?_*KCBk^4XkaO8GG zc|URoaD^n@4pfG0br-_>z}lW?K^>j+;_y}H@N=Jb?>K(k4zyJJF4r&sf@rciJ7^i3h; zPS4X4F%^-;6z|-IwYWH7{MW_EL-$QHJIDBq&yR(EneE`PdF{QAp}UdNh8RWWj5Jm( zQu11w4Vo3WPNqKDT+wYdS+(pogG|}qU=+XqQ-fE_lP7AuAeXtffDB=4{~{ssg+;8* zhjGcX4shoFvH9g!;LE?S=@T z3~!|?=<$)=>9jluosRGecua-Q_&;TMjI|}m_cDB&^S_nh)d6LAZj^t@@U8sX>f_is zKQ0v+5WK;XcVNa7PbGWhVuj2^Z^Ns{*M%qjLMilskGXLq`hsb>7OKBtT^8jlh6i+W z5;VUAyszm4+nBt2Ut83kWLnNA6RxKD+#E+lHqS%7QZKK!FM=$96vQFA`Ejpq&4Pq5 z9ENB&yupdr7TEF`tdPKI8qSa1!akZt9>y(V1~A?tGNU`k%!6do&L^oDCk3lovG)=pDqs_Jj|Cb@0hXO!AL~kiVy55i zF3{Gl)dsGw=A*=>lhw9lc#63HlBkk)7??#jaRKrxP0bDN8iA}RhsKa1N}d^#i0h45 zC8-u>BonuLdC)UOsd1>>1bk4MIGTTy*K=bK)Zxedtgjyl`r1@ zUZN#ZoF9uTjfAr1& zHKiUr!k~hh;^XckRbjZJH1#4&3Xj2qf6g#@dmhqh_V)Nx3)l3EBj@|snfr8H8~QL) zc-GNk^roBlC*?C`al~lvh8%C+N1D)e?_F}h{d@0gV2>4-;y?Fq9TND`pZL)d65^}4 zoITxd>$L2k3(Yiu`*&GQtxoZh_zbP?3de0b`uT!+=()# z?Z(7*A2PR=AXXEs3m2AD=Zi;CAhI4m7|2Uk7kDaRaa9HH&A^-n2S_rZ0@Tmv=X@{t z4>uH$!WQ1rRb~5>C0i|7w$8gvNG*}mEFy=jg1J?+hO}iYD&v@CbJ$0{m`C|&vwg*D zSPm_GbNEJXc4I?t zgXprTmzm6PjGjrlGy)vH&$injTvFFRBisky2lVJn&J_V+p`*R9s3C{)-U80u^R^(l z2#;8hXlGFZ!Lwhv+Mi4Lut^P4)Z|#fC-hd*^*+nY}+h%W|`fA5K_rYBA)0tAkOGW3Dn^eLCCv!JK)z)J^Jd&}ku7V|Z=6@O6+L!hxA#9Sv`%9L%V>9$<7o zg#xDaTJ869x{t=4fE)K7eF;{HE)UJX-l+_qlfX4#YG22>T~2e+Y}(&~nNu(yTU!w^ zP5~I!GyiK?&y_&)gDWhDV|He6og4`8X9MWP8{8KFdhw$2Fo=j9^zOzFP~s^yB3#WS zC1yr4oysbX5HeK_$wZ+V{`)&gev~`LF62d15gj6Zlgu1w$q<1no$BU3GIh6D14@Lf zy?~tsmS{ubiU}!BosL{bBpI;aFahFHtzZ;!XNg-byE71g7Nj-#4yI-9Daz?C+qu%{wy zuG1*#B)e0O!Yq<4NnsZBkZEUWP;1OnN!@sb9W~*?)WN6&k55?0)j7Qp+h1?GI6@T3 z0y@OC5kr+=d8H4%*+D;uDPaomCUS#Saw5>WDRWo(6ZErt4M?IxGK3l@;QF*4>H4zY z(2Rsi^pv7STWUqAZK$1CG(>fspRKQWxVNrKKh9xDUCS(GTMlraB=0qV(sRFo5;cr8 z0G~qRSW=G$&X2x?-+a#43)aUg25j$l0o!}~m6r#3t4j8(ixZ?Lw*UxskKfyS?_9n$ zG_PtOlR2G5w&+R;3awiR0!6C_dT!2m4XP;Z|^OtWSb%0xA$AroizyG z##%chtD)7?1cbuHN%Q=_hO&MZ*CNA~@T*6x9}QFHcJRk<2v=Xr6I(}4NdHFNidH73 z+^vzOph@ZtAM2u&y8!WdA^5#Le+naFBKEgEPb=}S_B^f3dwV_u(4IH{1nxe0d49Nr z3~0~Oj)Ht@NJSW=4n1oP`T{JXlZOf5D&|J6~f2{5NMv;4{9ttihcu(GV>+|2Hv+?GUn9oaFx+d@;yTxllp161&`w*+y$4C7&|Y>76t z$;ko1w04Q|GSg1BUHYriP<@K{9oY1BDRRi-wS&}&+)ASaSS3%mZhVO9O_c<1hhURx zmC{X(f}XV`+zronFvgE1?pV4j+Y&#pG>G(HSiCCV2l!ibvuwSyUkSb@s!h>q)&gB^ zi-E3`hl-6Z;%H1=fAgzg(W9c8a$b-)m=}IigzM9KTS5tv%K$^VA#SctE=Ew7KD6H! zq)GKm+$&9huMX|sX+F%qjhN5VP|cdQKnmB<{+zzTSv>1{qOc#XPPbxM%f!V}wgZw* zRsXaKGxX{daME{U!|&hnG!lXhSH8bbo><-_*uVMbJ#GGan#2NB0a z@sUvSY47hDzRc7$nW8IYJ4QiMSxW-dscBS`C1+At*>_$=GPjJ?DVltdHsz0r>)&I@ zkZqmwYI|FC6$vUYXRrBH-Brcl+-W>>#cx?YhDs1BX-_IG$}PF6g8yQZRwXjB2%w`} zDlUMFJYs*lp1Lx%YD54|Zh!d~{vHUZ+Ra1_K)nCg7Zc!>qLMT-lgKAVHeERfTMJ`D zCnaNRJ1c!BV+Jd80|$Kvb7MyaA!$W%MFw#jLn~(^V}}2j`VS^^Dves4LK{K=0V(4G z0e$|z_4D){taS}-t*vcsbe;4Ktc)G$&Fa;y9T!CqUo%Ix`Hu5n5Q{KLet>c11hQvj z0EdZnM-Mw;s&jVN6E??JCHSnZBvfS)`q@nyk;^xky5@L!!uL^}ZQQ3kdt5#8U{0(w zs(GvDpO3Non+RFrZV_1jIzfWnktifC4(QPG2O&d@5bnLZC&Es6IrCyb+lzgh96MyZ zH1H9~mYHd$J2fWGJIB@0o~id}^-kA}-rBd_D7xoR$0iBk`sLb>dBb|UX$xj=+=9Ay zxE!I%%%|}^*Dl$kQ8I2CqdBKT>{)HK0Cg*=H5O`QN8v}eB>xxb&$xnw&jlEsfxhmj zLc0(EVMyW|9c|o)Rb=7Ao*qF1UL9J!tWY3szUX)`5RRM(wLq$o zxo@%+37IiReY(OD2M@&Jx%ar1xJ8>s7sXyR?iM?0nqW-ghVHE@+ii?r2?>S7a-EN1 zZic?YR^#`6Nt#|4D1`Yzx_@St6`!IUXq8`yTuxQ!O58uIe+GoooC3_755v&M2ll8= zp9g{E-NhN`w=AdXLKBxg#r)#}VHr7e7e~PxmCz|GU#)ansAhY%HR|+$lAve=h99$F zav-;GI+cu*luy=A*?+CJyLg_y8QH!)5<2*cN+KMZ6pI>3`&$^C$VwBD7~;bb+U?qs z($@ST56O={I+{BIOaMz*KCmI_a)eKcPmZRwiu{uoAX#d{U}>2Zw@g;t}i?o@YL=Ac<9fpcWMz_y)o_^m}g;0PGt zRimyfO_vF>uksLC-4Z1g>GNnAzXVUvhJPSqh7&15=V;l5=jz_I4*^;xr9gew7#KuJ z;vI!{7{@iLS#XRGr@zNb&P z%P8cWiZyFyl*XLWKad7@jv8Y`DIqh&d7WaJc;4t#lB-5{7}4kytD90xNf~L0Rj6T_ zJUJTCNTRbvzmlT(eZuPP<^tlpbJ0Aw?%-7EhwS1(ouaRmx#nPUGKs7VbXE0vvIyxe z=LYM9E3xNz+}g(O@SvoobZ;R76J)agI`emCYZe*<&C%TQ@an8vB}x4WmiP)`7FA+L-<^n z*4j~F=a6Dl7t@T0L-;tV<1uvJBY41!%Qc*hDSKQozTqcRF|6DgwdFS^!l<%}(4T>U z6)m*XCXK?eO&xR%oe1c5QF(l3X6>s5|3V&ya8Lo{TJGSDfAtSzm!E7^6o#R zcjiyFcgjn&&3Z1^FQ9p|8Rg83^5)?UX9th8IYFGCuIz&FS+D{{-=>l*FkQL0c5>Jl zq&=9MR&tz}a6FvyI%>=+T%PpvIxYfckX{ortSM=hD5cIw7MzJJxa{q2pc6IX;a# zE+O1vB#Z!PlL&?xr9_@d5+_2s4ViV43Z`YIjJ!w+CWd(qDYTIar%k6=jYL2z6F(b2 zUFS+9X@MFq-Ns`YrwA_4^RB|#xPbpc2&U(bWVxIKXRlkho&q9~*pH(Rjjz0S%f9;2 z-uw&Cm34AO0DpMHhv^=)F237XpPimX`XjG}I`yKrFl22`UQC%1q@Cj>?*)Jt}rk=&> z86?5tQgEiy3uGUsFglNs+)#>aoU?oYl9d19ss&=LP92C<;B7dGD7j6_xiI1X;_Mv4 zb77)o9ozO7+qP}n*|BZgwr$%x+_7!jcJ6nTCCWigR{fZe|_94t8W=W^+hgbYvlZdc%(wi z3}5aazT$0ZwEve?S(DeB{ZHYKWs9uRAMmIL#MmBlk0ThU?yRW8G@p&3OSBM#9b-58 zmlfV1XNHHYq=OG){zu_nF(q6GX%?RZvB&Hv-Y>@5YNnyGFkyg#Icl6wh9IZkSmqV* z>$cR9<8Kw@7_c7_%D8wJ00~h?2o>rLRzEih|NefhoaeX*U=ewotjxvmBqE`E zei)fCdYCo=u0kMQ#{J-q>hVJp^aR{(`U~l3EmM}VoG(A02f@yVydr${dN9JMbjD(E zl6o^S&K0ujFgFEX0?Ub$c0)Z}w$rd}ePQZVJrsu#60iA%u2K9a!v&H8 z$sDe$gQOklT8fo~)F0L)BE;f^0W~BKb+_?hHuuag<5c*PW%{I=a8KcXWfB-@@_vQS zlu0?H!%ZUOqO7o6OwxL_X(A)i zs#A6rznw@erP({R{=MdE=zinANlF}~dHD1zpzwcWwtM`EiVwJuED~+L4=^ij`h88# zv+|g4WSl!}z%} zaxlK?vCJKQ(u^E_XhuB&+smA{#oajNr4M!gop#naZ-;nr%S+#8MlCD*njLrk3E-ZR z{G2SW-^}>`Z<~}i?*lsU9|{e59TbT7|7??Nja)3~Ev|d5-8aP-7~j^NXTHLBrt-9u z%jiq~&_tTtUR>OXCh-;J3@aq1Ly`(YD@X=GNM>ebe!bRS;CA80;zCO|$<7QD2i{!V zbZI=>dI#I6KfHhLvX3b-cEWyNW>Zz-FH2dMcQ!-+_7Fm*pB_yC-c@F|i6MuG3PXue zyb>{Y21P1jo_}vm%rATu-pb#%F}U3SL+J^73GEtqwfh}G9^Q^O=eK9+c6PdzNn#{mXrwvtn==mo7tYIYr}26!t8JW;5CeP4ao za6Ek;jXLWxkb?T3B?=*F2P${SdtA#kLi#d91>JcIif}%kWS@R+9&F})wbArn-+iR# zT}mv@-A*@n9{l%-AI*CZFNHQW*e8+y^u^Q?@r@-0|FE9FgLH=S18=4h!VIJ9zxRqC zG9Li!_2(coz)_GZGi0Flb};=smL=5Rfp^I0ZXIBd?8oTlTZ2Y~R>Sd7wtMI<%pTh( zMv4_7{|t&5HB&@|FKiSBFbNFA;_Mh|&b%b+{l}P@;;O_CY~sLZ z%yLmgd@#&NJRwc4d$~qGo^Bq}+t1I#_UyF@*57>z4^QE^o!(!Mb-&L;^!NMi_5W~2 z;dr`uLyOVXlP~+>)$Zx|V2{&6kktMnyZE|3q!j&q{k-QcW8E?f{Qmwc5FT@Xj|WE7 zK1&t}ucM2b5&vCBx5I-lj*WEFfDtRYKi3Im%de2$%8$Q~AJ50%J?=I5uJnCKX7kz_ z=m|PQ9ie6M65b-x*KbGwW)SGdKM~V!cU|S7;%+;(xwv^O^7HZRg#ZP5P7jacBk1Q} z9u96{w#vtp5??pz(aAD+!Q8q|9w2;toV+|nwgVRNo9Pr18l1F0@B@FbfaB+8n<377 z1h}jY(~}Jp3>6{M0l0WJr$+{W0;C?&e~_n;_C_(SSUgbSB$7i2Natrm$KzZt_=*ef z4r`rO2EHBKME1MAJY^QQIl4bv{M_d~MH#-Ug&m)BT$X}78jvlX0U!~VJ%hL50B&1R zBA5Se@8MzSv-+hwntSdG^Y0v)*d*{0f7zLzyHGg%o0t1L@;)&?B^%CBIzVCXovbL` z_!z<5oa=Kj(YD=8k?b$)6;v!&)dn-CCGl4sK8(&H<=r$etQ7q8Wt=l_SXrB z&c9$tLO-ytu^xtpgVI&%GX)RtcWZQ}d2k5*I&&aFH@`~f50+}a$Y`??Vi=HbMD_!o1MP<)k?>UzYBhU9 z;f^cPjxU3Q2tqDYUhxppYC3}gegh%ZZCud&pR;L|>JJe{l>1v}$dvM0$^aFeDFA#JFnAjm^d4QOYZyy1G{2&qaNp7z ze{?r`9kzsuIp-6WvQWvKlXoxnTm(?E=-_YW1b3fAFOtt4XqSk6!7`xjoWq4c_oBz4 zrRd*!Ii7Ey0A2^`i601_G7l&&3_UrP#jerKt|JgZ1tbBP18JL#{QKItH}?yo$=`5d z;!js=9=_gOkzX(HSU51A|Y~8Ijni~u&msNd^ekJdbT;bT81lyl)pVLl!c|S-SLE0)R^=b=4J;b2I z1RRbkZ*p4QQb+1V5l0W2rTJ4_Kn*_D==j|EKQ*oUmkxoP&OAL=S06^B3Vcg!4A%Lw zgygWFHw6qUxxdmPvH{|R>JSCfx6i1A|vm)!V2hYI0pk=hvLLNd#+ zp;WJ*zQeh(s07D7sHf1lULbzfWDIRkyrR;b{Ty805ls4S-UpWBw~HTr;Wkosz29_v z8({^41o+9PMe&f7LNII(&~4gP!cB;?>- zldiJREwbxO+mHmIim;e&Vi~}|6Cxol`S(wWP~}Mx9PAvh9QJ|*IniK-25<;MVkskP z=_0&ts$6N%A|j|t5sC}XK!O;OyvxsMCwTTABE+6eyi%N62MLUZy=Ssd2WNo8+rd%C z=KI|b-|)otp&KL%;;uD#XIl~D!X>L@HrGfZ;s?muAbbG9p&>OI$C-#Z6cb?22uv73 z&;4VKuUJJ{1;1_AO@Tgc6A}}9yD>#v+*G%U3O)wc+f$DrJKu=UjJ2RBN zOAIM>!3*wJx6S{W;M>FLNhOiL`q8@K+qyeOF{FJF$T9lV*!FZRp7*=83?WVkOq zs%O$2K+kxrRDxSXdo7GLRiYJfHE-0^TKwpl7&iAuiMygp+EC9Gq_n_tRIb{pvTd?D zG6u9jjwRUh+1+NE**a6_xw8s4iQPlMdCPY{IU{HJI_Pt5MD=uhBsFfIofDIPY_T6a zt+nZh%`!*`+?#xJ*zoKdQb+}9kcJ3^!o*6w;@YU8;eXnKc*cKF{_85C3T%bgziCt* zaWH{`X`_k%e819CJnfwSTF#qCA~Fb(llpSe5$tnb|N z5!cjniwVUtxkQ&fKdncXj+VFltLfFJoskHNyc^wHO#2mr=N_N>Voo9?g#4&Jaf%RCB%53mG{3N-`oN6&{KKa`R!r z|4JE4KH!hO=bV8y3pxH$l?Hqv?2gUHvh=;o1YO=7X|M9$fBh%mNhh5p(=u*HK3HSv zP}XseenEqM;N2{Q&-za@SWPQ6KAu$@#jPNCm5^DQY9PwYl3lT1C3aL5pdLNBpZp;; z6U8l@{fCD^6Cm%)SAj~We~O}F_@@&phX^y8o_>I5MqJ)bmV5Ec53cod)MRqubsLd*_NTn91Zm>rbK~ z-dF9C;m0MLg+mS$IXxu>Ks>WmbfZh$jfNkI#HL7_Cf4Xhbt~Er9UIE=9E(VCX~Og= zv1renMp=XLKwcL;?E`!{WfzXS8=@ zdptqHj;*f;=q8Tx~e)9u&ODCfSAqtv?+rJHmZVAAik^ZWl|7wQerT} zkl`>h8j@5p1A`X%JKb#5IkdHl3)TSw4SdMU%GBgJ;wkbW+14?=Nt3nrDzfJgX8yZ*N4I|OHc!T z922gMe9Mf=21GM)LaYgkkz?e8?t}qRtF>*c<-`S) ziBwVzSmF-BMe{qQ2=D&6QI3Jl5%b5g^ny9W*n4f1OPH(y>H0HJUiv1;!L+CtO zaknV<|AlOQ)K@oO?lBYAEfCmp=3rSfR90jn;X-p$T~N-bE{N?`J}iGuA2>4!p)s~^ z#vTW6ZcLg?k0m2Q9GJ&eDVZoO%wj_@uaG&%L5JF?$iIU%HV8lZKpv`?0hzgD31Qe8 zkg(e$wsQhXf6<*4(5FVL$DzLY0yI90a^jcx(COl1;)~rc6jLg()DkFgM)!x}E@{x5 z_oL9O9BHv?J0~l*ww{0N4T#yW|62uuMob>$0%dm*E(YT`Semu4O30u-fm?kH_iWXP z+~`D0k7O`4#-RBc0uTl#*Zm=zlhKWO4xc!rpO$dh&C|`%ZHxb7Y~?L-$I$uKIc>(u z<1Tq9fS%K2C)_QpYi&iHQ)mAct|@sZ2lzU)^Ka>QeS}{ECQ5FN(6*h`w`C~bsO#OZ zlW)cMZpBxRC6S`r{m&`c=lhnlE)*W<3ga`G4Cca_BZtB-Hy40jjhV!T5H*Z*_!Nzt zgOYN{TM7@^Sb>~kuxfs8T#e@OkNg+lGp-;g*2L=h3sT9lQH&p8l*K(}kcmUpg+Mlo z&eH;#)bO6>fpC0Qu3wOi-gb9?Po|j;2zT)YK7T8EMOY(S8wqK9=feA%pw$%{^UeIm zOyM!3_f@H&aK2Xap&jv(VdvnME?vjhJtd^nVTkebbM)|Cm_j^WuC#2;ceaFPn0A6p zpzYmH7!EkDqYsk}fGczJ*Q)V9*7;&fpM81gzx%%71iE#mdrzWowHXYq`rcl;zi%Nf zEMVi%HH=h*@p_954%Mo)vsjv9o}UVwN8a{ePQ5G3MaH7dCe^_d7p}k7_DPQLF-oj^c5`!cb*l)mhi_AytkSg^^vU&m1URh>dc?3g?#<2nB#`s8 zYut)E{>M+i<3heSvN9QUT!9HJGRVFw?9s&hm*`` zM?mkOzJ3g&5?_bUozqLj_m?tbq*lCt_oZV}n0NOlbBEHWYXTSceG?X6H$HGi221MT z3&>2S!$MzFP0P+?lrPz$7$4L7Kb*Ks&V zbsg4r%{OspognXHB7?ytC{!^;@VIiJ4G6>+x=r*wiI-=;^<5uGsNznl-eKkkY(#J58?fEK@B-agmRLEd;qnGEavW zU`to$LZ4Sd$IvgwrR(uDh)cgzIyuAD&1j4!CmK|6vl#b?!sP;LTRK^4U)tV>{fAe~h=4;yPoaIZWGtig&nXUyT-FRU=v=lkzSQnhwivwMXst^~5o)sOuk zJ6;yJNt+mbRvh&0{9Ct82?>@*=~jf=}(4NZ#Wf27tf zy_)nfUlsJnH_VQ^YARHZ$#!z{+~n&Pa7V+_Hd^K;`AYK?LB%y(spdfSA9jB?iWLaN zR$wKGA8gCuCJ6d}&;Je4Se)3R2LEfP`?#ey_^Se1v&?CG*`k>HbqC71;=*_U4(l(! z59&+N&w{IdW+G^>bXMaF&p$ZIUZCSz{HPH=>BbMyXLGvS)9A`Cj$o9sO1veUf(O=| z;FDb@SGj4eC0X4}4hARSyHUS=!)liuyQzMN@ljcP=0=g*#R(=j*9-!+An26iZ#@D% z!WHB*${)EALzKmU+DbOkWOci+QQHgFyB@&F!Zf0aqSC!=Qq_u9mL+3kRSs3=xtO6PHRA`*eEe)KDIhyoDk-3_x8FjjB&87`& z!7LHE2|oO7P=8o{Wz?)s@mpUYSlh<3D_{zE@RtQ*a3^}HNxqE?xr_Rk4;6>bvk6ox zqNt8b;^%RPUakFL<~zFw!R^U zkPPo+Af%`g=h)AP{5~g*nusWm)OdEL$ctJGN{vQb#4Py2=^b*~yuXwW=ZNCgF6I}i z7!a0QWAcQpoje!q5Qi|Bxw3L2Pn^?u5ZH7DRdwBVvUf>ovlY?kXg&e~2Q9Ne^qmal zJ3d9il8CFQa`)-17i`t)iA<}n(eZZczqup-SX1&V`tv^95dbFyrRJo_mnY2i33zK4 z_~P)Tb=`eo2fNvMy|>}mZASAd2GXEfF#Y5VrE8BIkHvy3>xy-x*hXFY(5W6Lb_7$w zjN+0i)xsMROoquehSTvUbMff3f{`*E@M8>4cwk%iH0{CSn$Lgp`Jtm=jwgb)L&Ni8 zB#bHhm6}{0x27CN4f{p@V_uNoPd>d)a~~s8>aXZAoZS!RFks!{l-vHEZr4kDKunH( zegeiH2~@PW1#z)_03GI)b0Bu?NQ(lpPE6t$l!*;P%kGTU{iBJT3x6Q4a{YRQa;dv7 z8&eP%cxA|Ln^4J-^>qa&C;YYtn86+9$Ul6?5C36Ja=C{z{2b3FB@&eqdBbLW^(D2h$BrcK|WTHU4IX7&_*c+QoNu=%Bu;1Dp3BH zE=1)_MyMFT49V}ccW|)<7@-cH(eMf8_lP_hu+qbe!ZI{)5g7^6-<-h1rlF4r~c0yQ^C*hostQyz=Ex#kn( z0wxD9x{JE3CZt$IkFc=j3{gz$em67)JsUzvbEK+8lWO-xf1Z{nnx^4%#%n?8WbHW}GSK>xdfCLnJZd#+gCHi{{m6%6hYv8DT3$n{jFPn?80;mm zZCCE>P&%rmx+y7E0FHC8PZ}|Uf9E;6^V}&Qe})k$p^nh_JTYU~%9HZkl{)>$^v5)~ zMK&o&IBWAMu}1rFm)%5~@_B8t%Y(Wa6@`PQ^Rb>+Z8RZpF`}t#We2fGRNEVedHMy+ ze)@1t*s*I}nm9c_&~m}Rj*xc1ANqx7*EBo#5v#$csaLW7$JN2-%hpd~p)&_WvY``M zmPNNYeBNf*QmC2UD0t5;4I)#jD@+xWY8}af&(Ebi_0X8yw-zZyMAbgQ{!&^_N%DT| zg!p;vAn9`a&n!7qkU z+cc|LF)8JUV>T7uzXHs|Zn@-JES*w^UD|P5mE`Wf>N@X~>Qm8vPS}lLxIrgYeN(4H z(t)Nl3n!DNof~`qku9jPviO>vSeNrW*v;5QCQBOTH1F`aAOX;QDw+}w!Q4ib7U)@m zdivEae!5v;c*CIcK+n(zNkweN25Q`-P!07+h5+X)#4vBwF&QU;(7U;xpz7%LyFqxX|xkI zDuah*Nu17TZjBGk}5rCgttNBsDZ_wJ}T!2Qqz&^yJ~U4c9)d`!hR0 zrn6F6S8|$d>b=7yz@rIsjwYzRn|fP-aV0A`Ex}Gv>RgoScqIK)eOEaBqD+!KpP7gi|>S0 z*rTMsL7vV!z5&HTS#w*yAhS3AO!N0W-51sEU`HLXD)^Z}XITG{4GMokWXSv~K#KwHRLp-R7$ItfS9Im7rR; zcLFuW=*_0i**a!bhIfy;=uq`8k(*@IW~g7)tfN`=D(s+VTGoyIhEwRp`#t{iPl%0M zu=ZkPE$0=uRIIMg53v%?avAIk1c?%CTR>Uei3IIV$r`YUQj0IP)K=@Wn^nftNhNK{ z;g9{~#kTq**4W2@WnJxR54xKwdD>mQcAk%64d%c-^>5Q$#@T3Vt*3F_M8O z$^6P1FL4y>gALXcT`rZv4g%!=o9E>vd%v#db`JOJVN3oLOS8 zrX=^vMr*=)k=X(10=<78a4E0Q44VNvTAdGxxL`quV@m)}a+699=CRzqNYt^U@C^Ua z?tJqn=Jo-b3VdwK9KNtm3d`gNPCwFk&Vj7_<73Kn)p>lVkDIYK59%R1$FkW!?%l^I zwDno^RG6J@)iuXW;DMz}SrB`diq^*c)>-19DUz||ZoSg6XrfRkZWX=9x9b_CSr7-l0-gANq_@Rkvgu zYPGkI50a*6LEtN^g}81yT2{dJD9C6UP3nzSa|Ct5d}tI-Omc}Z_O(0@E|5Mj7Kj5% znLU4&32+#wa74{}Mwkh>9(lw0!3aEFte5`L49JuezgJc>BAl(art`x}}WK8hqw=wrkl=|>4tMi8^n#8CM=~L#L15G+P5sX#qⅅ?-^5z{NXla2ag@q2 zduEq?0~jN9V%`>3V+B&3Kn~Oy`F@pTHP(!z>NRdH9B0#kjb`e>CF3Bcs2xB91lBMs zwjNc*00tiaDO0yQe(&d>{NWUz;dq25M)K3?!J5pm<`burDHq;JQeC;?jD5~UZyPVd zUcy)p*v8d=IxpnW6%9#TJ*{3e7sMb@P6`8m@|MBv*V3<&WdEZ;kjo-2ijh%qI%lP7{n|?#-Af zNjC^J|83(MSh$dpBT=W2)?wH1lae(?EY0@4KTc7tZ#u1TwunlFa=^9Hj~OPHg>(G zRWbmoeYh>rHIElLEC*`UPVo5)Q;c&u(p?i8?2JeeC^)2&pwH%790=Z6?T93oWcCuC zwlLfm7piC=7Q1Se9}6jn3y0K;H|z`1qg4U{)5bPJHI#GC4qC#D7>(iphTl?i>)`se z{`(LAgXt5TOB@+3BU(Me*pbKP44|6>eAcKmUYiJVl?fm}m0Urw&f3gVC6@oDDy@`; z!80l7GiP{vWXT_gxqYU2oh?0-n&L%qBwrVzloXp znon!QC)Ixl)_Y=(KS{!852{#~eLQ4b?8D_TF{~rzTK3kAm+fM*t%EMTG%)_1=gJXh$5jZr1fQ`dP-gub4h92;rI7ZLtp{r!x^1rzZ&CX&GR$?NpuxutSr{o;9b z_4t-kj>fa%9(G@lHWsiz4K;oEix40XJU0kyx>#aB0J`@!slYcJ9ZeNbMJvZ0XmYP! zktkyHQTWXx1}+Mr3(qAI^pA(w^G*Ao3%w%Hd@kR8kqj>oD9=D12^vOC^3Jxf^s%Lb z@_8jPM&dtJlLw8b7H2-9=#jOWt0{zjEE^(r8WhjUoHBrd&Yw%A&S?p9 zsYQ1D{i4SXaFc1SU8`ZkQX$R**hx7k;{i`(LYwvX=3&mmD4TVz?#_Y1JW}f+Y?BjL=o-waVJ8iOM7>PHHHTeh9U>% z2L47A%8vo9N?kZXViV$6m(BEsMbZ0~U zg(OcC)NZCZ8xY&7ADcITdRY&f_DWvs7yx;jH9_Uu;_ybc6qbWI>=yl%a#5arZMd_| zs*yH6hwl+#bbFq9v~6_On;kmOwDcnk$+G-I$m9WUviO54C(b-7qjsoaO9R6=0hWz& zkc@?Eu1r)TboJRLP1!wk^^qCe@}Cq|^~!^%p(b6_YK~ZEj6Ga%By>78pUP zySStn#rJZ~*I^(y1nMzSXKNtoo*X^aQ5m$wo!YETj70D*`ESBW+5yA}Kd~gt5 zd+GB3%2zXN#G{20#dD|k<6t^q?~Zta!)Gz|$hA3rW4dNqL#2{@X_@4054m-GeQEL*}(UTe4s)+ z;K26i#=kz&x3=I5zJJ;c#Il;1O2*C?aFRVJV1iU z3C}W~59g*uIF#eI#sZ9a0w}Jh;A^WmS$Hs4OAjY0!i+XM$<+)w<0hodz4LIw=uYod zgN!nX-!GVY?76barDbo;uRymb+6m-k)Y}j<0w-(oI(h%83p4`lcHxn9AJ;6F268^# zz~Bch0~WVX+8#2t)oZpCeGT=sd^Im-E>h4@thwo=C~ml_{&@gM5nlLpKVCpunhXeQ z3D7G&N-FXaeG)j?-W}e9+g)#+`_<*jd=0VVMAs|meeI*|_gs@!_KSN)%^t&7 zo_imlyRdAl8c$MOX6Z2=Lh>SR{w`n^Lnp&KaD<(#=_>5#_NNbVVj6f4r<=U-LO1z_ z1hDJEneyi)eQCNfH=@ocruN_}+{P)Vz}70Ssj7)0#TDucWhl|l z&O8<3AJG+6tx;ZA)K=G0zStL*^%-7GpOn}^{Tixwm=BvZ6O5(f(kc7OsJk>vs_17` z;fw0874=KwA85I1y&`J8GhQLumw8WV(u0Oq&o|7r9D3_PK66`U$1on|#@i#rJDFV> z%g*=kC5bAk=z8JVFMw;!58<2lnl&ZX*$>G|K32{Seil#CPQoV(j?tPMw$^+vkA5hB1 z?P-k)d-(~V{%6#R7uZBCTy;=xI2g>Pj3}tB5!#8|KAgvoM~V5WyAm#_(ezX5>J~l= zXOt)~4(Yj3T>u*uPQFi+tP3Q|QiuhqF6HbZG;}rTPZ-Qk%EwvIdJ1wZYQ@<{^i?j~ zB~y!})VuL^(y~gWuOhkG(lz|`gpeO&ODPBafSuNb=M?aQL2Bz|jn<1~y>5wTbLb&u zwLRmD*#+S$7+u+K)6-{{Z;il@=-_tM=khX9)YQ_A@kt3cCRu~dBH7WLb3XRu;+1KF zYK@G_iv_9l$}9v;$8&={N5 zQwE2T$T6kTa!_doqop8xFvOdGGW9+mir8!I=0%ey@m%SB@$)h? z({Je;sd)x?+yKMt+dw9G0qd9qrKh7at&)GNKNc97a_-^tDTolVW=)&>W!eNgo~tM0u_Zt9Iaqg3*=(TQ^O3^$!v- zWOSPwxv;r?9d{x04M*LHaTOmqP*nURxwFn~ig>a(Q;tkpFQdtk^0U1EqF|oa1%hQ9 z6a2RYMtOq|NpMj&7_ES83pDLoJJh@2WS-gqk$EPJ&gHK$8Gqoww;CsixH$i*ayjwn z?%H)CsH5#2D#UM*7f*ee8>&yP(dqjph?{;2t=%bnYkNZMY+{WVTsP2r%asRnbKVSu zqnX}@!@Gs$=eE!N(-lW9n%;^ZCTDta&-aO-hDHB5?}zkNJF|#E=(l`7M8RBU+wz)y z?k7#-?#D+Sb&>nwUbO4j4<&6!lLP6%x)w%GFWrBNY#aqcSHmY->&|9fdo0K~L18M0 zV&%G|S*XX3qHXU$i3rwCAa>eO&)*k8N2mz6N!=e#=Y*-q+9{QEl@9>uDpSz<*!pcO zw8lv-oe$2#tkSjbE7Jsy+K)X%v@Tgeqfuz|Zd0*Fp%X0ngoJT-WAmjoLO*h=-R9RrzLnL7WAW+Qii9ItqR0U}Wl3@Pl@)Xcn@;UG=$B z^f6>=h+>;I4JEUwn}KZv)_)unxepqNq9Nx=$4q0ql5VTT1Rq*YIrImHFtpqUZ?LQG zI1uc|G^IYE7Wt@$uLtMLIc|?jxN>3DvrdN>av|V0)KNs&{B( z2sINXkXew?j$#{_K&cVEVTd(jaK|jnY!SE4N-foj6y0-TCBcW|C63~>Ka1rRB{dY9 zrWeBEy8q~K-C{Fl!_~u#pt8Jkj%YNHrtA=dVwO5m_|~~uXuw3q_Ua&=B{I3)km`f~ zui1Z|7V8l`99s>A-I#AVAB}@c?3D&@$sAGZabRs#pS5Ax*Ppv10|tf-rXd{4HlQJQ z*RnS(e@8});k4J40a-Hnki)dGFLWe#z98!TrHmZ=U-Ed^+M$-S?5OvdGec5{d}%W; z3rV9V^+A%Xx$sp7Jq(?adZ1F#6yrNZ8o`=q9R(HjhoVunh}LA7xsv#LEsHvcdcBe{ zm3mS$3$|q}Z@OJGG1pVIqwGg=9~>yPxI_5z4r^Zf+eRLPo<{X59woCn!)k2MJe2xf z>A-os5(1Y!J}A;4l-@L>#Pm9u<3GBX=ZaJ38YqbD8b+1uQYBd z&nyVl1PxY7vx?*h9+=Vgj-#;p0M?~k&dJo1rPjt{`M{{E$SmX~p2yKqF7VK*6NMbJ zR<8^jwtjk^w84XMQ1$h3h$6b`i7AYCGyfq*bptkUaF&z_S`%1xf@#Lcii44xRGV&?ku18A2{v`) zz1I1#YneQ|wI*JR-_1g~gy`bjQ9Og7<_Mn8oJ{rSi|4yrcRiu{W3v5uYThTkJ09N?-gVO>byrq3Ta~g&LDGz*|I$A2Zqk0 za2W5ojPe}RnjAV=9%_UE({Rnh%D>-)aJ@e+9_h|~j68+FinvC#7AuD`6!$4cePiS< zqpJk(wiHD6wE`~t%riJ;#Oy{nezVZty?GBk`cu^_IU-R!7 zaq6gV??Y5)_{_|ssj@sBqm0`c0buKkGll;6#S}ak$W`s}LA$f(`&FqnCrxC3HC3vQ4D%knJa) z{qOk=@DymDS~)`>Whd3tHfd+y)iU&v%bWT0GW5@1m_(}pEPR>3iVrM z7Hq0%i2T4}zA67>B{i$ll;mgnXO`^C&KYG63%G~V?XpR(a9Ppd3Gxv z+n`T}NEV7Qu$|Z3{kb+D&1A~sH|S7JV@nb~JCf`)pdJ&wP0gPUY#M=pgS+|V``_tO zH>xrVM&g<%rVhmfV`^fp-yBV}l-S=4VkuEdD0S=knI6>{+ooA!6PZ%!3`Bm7Djj?$ zj;#~_Pwr)*XVGSUVZc;a)~&Cb(>=xy)ND4#yNG~8FGtg=fX(9WAgKFT#I}M2)yzcR zBXee7I}x~_kDxOXHj`Y8kEE@JvN2XB-9hLQwRePknwgyQz+}ZDSWLZ6c+~q6FFwpM zslTe1tS*&T^f?CW&!Ods%VZW?8hib{a?$5OyjZPupE0GG@}%S6jW|DBH&sayCN4@t ziPArm?5r616W8X_H$^E)tVTZD(#o>oCl?Ze*-P@53NwJ}lNj)8 zvpQi)3l142KU5BFw7ol)+?c4$S=T`}>q-DMnqwOYbx`VAkwAuF)l* z+oRD)-Zo%?#NYUG`SafBxqcpPUbB~Zu#^=KZ65@SO5NM_u!YS(*_P)!rp>)c6SJu& zw#hY&T5d=svpvr<+GS7O%+T_GlQg?v?h<5 zn6-qvj%kcwzjCAom{X&Bdt5Hit+aKobx#Qd7My2Yw-d8tpIc$}RB07Y1Y){%EyYXS{Ni3ZU>Y^eH+4)+2(`sxN+>m$L&am>045QM~Y1F#$ zYV%e#7b)+|w9PA**1h_v`W%?P#}mfDy?tG-2H2i0xW69|lsC`5TYuzoOGSPcryK*H zly)8A^XRh_gB^tw>iIIenbYLjN9hxGo)wK7Gdf+edb*#5_x?kOM{I5+Fs3e@OzL^h zOe8fJTT*QuNF0l17ZY1XR`Xd`TWW39s7JTH4zA=0UXVtV<>LA?E+<@c)Wz3a!%2lO z;6_a53B=+IXUc~4of;chd?;-?n$|7fC^fkUUg^2dUEQ>uFuW$Dn+B~I(z(`~G9Bxs ztTwfJsHOQg;@ghcebE?Q)> zWGmAxe3CeZohxel*TU8-6?tqmcC*EXu~3Z1;MNG^r$~xxh(){}-SJ|cJzLeJm#tXl zv$?K*kRbh!A8SF-s{l4w7V(rzp&1To*>A6?*Tfd{{d}u*J{>H zZVoCB+1&XoZx-aV*prX5dfDo0J!><_57U}bVyE`#jY#Egk}%Yc>zauAHA&fB%2fLM z1t}TGZ>BW)@0o(UGe6kPk{{ykqyuzsrt*eu)OP|+xvtZ>OUE$!55K4=#MN-c3E*uX z+w^O)+B`qy2*TRbuHQ8AGouq<`{LHA6C-_roT9F(Q*%aE4t1bA$L@(i6lXBBjOrID zZO#LHhpJ8I<*h(iMl0ccDC}iypgTs?Ge$yMXvx~C{upnHR?U1J)8iX3Hog$rI3aqU z!P3*wX0J;YHv7iQlNZwP#a5gx+#Xlj0C^=%7`ATw)oin2+3(ySbkBS!+9;sRPuV6? z3^B;lK2T9XT7f6dY%%Z|K_>AuI#wL}q$wq1CbWWU2QaV-#I-V z_oYQ>WOy!l1|OE!!DzIv$Z|7!ZM==eU1x1mK^cX5s0h-(v9wft*o|^tx%_~CJ0|jo ze>+NY+)ce;79R@^TRL|W489z9)VL3$rFbn)fV(3AYgY0h?O{~O+Y$1))q?Z~I1${=dm^6N*o|UX7db0-^fPF_k(v4`{ePUDLwjgpdq!j1wr$(CZRfPDOz(u~%ui_bW?6FF-L1XSYVJ~`ma?+l(Dc_x zYUp+DyM@vdHTOjSQ9@@>wIR;U4_Xx8NJSTK2XB4wb~zN6lKid&qHRv@C&}`9P%(cc##4(>t#vF^ZR-`WYaU zy}Hu6hU7!1MCByRjAgzl;zIx@$?$=?6W{?6RgbO5Zx5|B9J4w{|D9eTiJojkwf_n;9a{X2Oa8HN-mLYv=j|c#=6e%(^|}|# zsZn1ayk^6n9b8||t6UyjXA@PmF|tICn;tC2Tzd>5Ez1}iW-0<&LMpe!%~nIpCNuAo zk)vSvAZ1N*C;0so99S|YY(>om@p|LElo-uP;dBUZWYc@3j;2lJhSAsCh;FLf#oVIF zU4f#2bIR*ll1<(43A#Rd-?oI%*ulvYGtw`KTqdN>HR6*h_hB3Q)@U$5DXoo;*%VSjZhNx2WzJn8~h14H)jZC7sVAfX_n^6UZlT+mG2ZSXO%sMgPC%sJ-cN{t~{hwa= z&@z#2SmJ^ho}WN6CfK~hXdby{rGZMZM9?4Lp-`BwhAgO5x$4b}F?q-7>}X~he-Y223VIty0&Ag-0=aV88*QvpizrS_!!n$TJHy0~g-2!Hor}M)RWTpPWpI^oBd8YOUN|jn zqd)7KhSb=?wBDH01~U|z7BD}{&?a`L2KgFV@v!Yf0cZA?njF1Y#%-UXl^2n$aD=RY z!4;e?Lfkzpv)g?Xe9x!YXWaVYoQ`U`SebdT%!D!=Vm+TPG2sQ83*jgUeN}m! z)!ia7cfJfNG@`fhH1())!CR1Jmbuo4c6DdEPv$IAGiEm9HO|wzSfSg%(vrY0(%djx zuF{jhe1w=7@^6r^|8}#a{|=iLdBmRDwbZn15VO)bz@kO*cwfEGn(X%*dNVj6|H{cX zj#RVznF6Sg(*eLFtr87KTQN9yNyr#R7C$E1M`mkga`8@Q&g4{rk#T{6wNf|ykt{0hRI8?o(0~If6 zXReN9H~T#3sK6LO>ujfTqO}0K;di*6;bZYm-puvM+{*ZvaQra>k6ajBTABDtS7)tE z`e42}({b{%yw<fE)J zlHMt4+>Mc9`kKY7ASO|^V}TSR?_@TIu8##*L*p-_?pl0GE)zFLi)KXiWw5)ge;q0O z%m(z749Kj9{+ZY&|2q>CA-${K7Z+_~Q1r{ad`sDGn4h^PosBtk zE>)E>4_^&e@;#a%*&jDsc3Dv_Qim2{mI!I~zLj(yX|It2wjVh#^KCETne!KZc8r3s zF-KO!k#x{=PB$e@r7lV_BVsk-v=$U=Vq9fg6nM$X8F*hSrba3zbEQcOh*#-TDX4XD zT*Zx1kGiC0!hS#T}_$L z&Q4IjIvZi(A)CZqCeGy8Kr^Q%J))|wyllR(7BxF4sfL#=R8Afx1tH$V<-7-m^52{Q zokgU}8rZ&6D~RU?OdozW;EzyLhLz+?bwgmZdH_+3_Ci34={f7KACM=1UrYUA2`CI9{g$yp;i5zt09{mNepG zV3rF9S(}vuals^2{07W};083*#$pXq8r_xUa;pFEs7JwL2qv`3B9 zQ-_{DwTR{*c3+31g6YP3Jg6oRm8Y!l7{H?5dEQdKn|%&tx0_=5bcrtnH^!|zq8s02 z_ogbgmJ^1FJ>>p?8syv*U6E%LK`K7!@_=|JSTN7yz>8bUtR$c&C&>~I+KV+k%Ecn)wgMU{$2KsT5n6z)^%?K|I} z(q(uOW2WHF`d-8kMTiNCBwtWqK)XAqLW`w~$%is29WvDX0e}c~)JW^-74RB-4;Sk= zmI%q5m=U(h3$>iR@)*{FY-a`fAWWee+69KVVQ>z4-4R58^*nWGKInC*LRJ&6UFf z85Lvonf%Amq9-UTA!yG9;e8=KOl!lXErT#K{|CC-aiq zZ(+Yj%WrTg|JC|_0YvZT@PNPiz8tc~D)Sb}t!lCMS)Q(p8dOVT1=Pf5#7F6Uy2rQs zPAKkkd&JC}hgc4g!t*AaIfw1k3x7u%6ZwYX?5-)Q26YS>bRO$_3%u$eKJ&~Xd~mb< z8T>F)$0PP>gx%7=#`zkfK1tUv6x)T!q{!~n&}!$lb=FX4?;Y5oReL7W_qmf1TpV=8 ziD;Kby%sn&ozg)ujAS#ZR!v07x?ei_}Yb zH6BW*00}$vLbeMb&nupRUgkNtEF*-ly1G!7Eh+yEXl%{E6HdyycO`Rv5DCwkLQo8- zSRe*_p%TQT+?HX^`5=fX!oe9>F-m$^I!Ro>UZyCZ4LGZ{ z(Y9Q$?u~c>Vi!Xw?uit*^x`S(HNlDzGTwS}ivzIq{F8);p0|;?LU^d zAI0ehTp+Y1EUmhXcFL4};B#0GvY3=yQdMiyoYI6)>RD87eD5-Mk(7!SErY*;!{9p) zKmtgvqD;EsARgpU59Uj{lY8J1m>~lY>&EMtU0!?V@QZf+`;R-}MBm)F%~h>SfLq3P zLuJqn_kn}JnhlflI|`?BeXuUY(CV@=u&BpvNw_kCwY_3z-Nf`BFnb6!6m=-gAotTr zPKV@5Rig0CaNARnxaT27CBMrzNCX%#OQ=}zJ@)MQB=ep)j7a%ZoG3Bdsx}fZ$a?O3 z>BRt8!wvxOXZDQDHf}G}g>T%8w7={7*BXQ@2oF*$-VxdueJ}tllp+fZFXp_dyswU&e76WI#g|#sxK#(;S)P7!H2I%IwJdNBZ#5=2((1s) zM-Lo+s@hYv0F(yNHJeIq0_nx4eue!I^kT_Tq zh!#$R5%*`zfhe@M4J;L;t&a+p8>5s$gn?r^zD_?gR79a0S@2KAMYqz#ZAeg3mZKMb zn->ufL-!^m+-{^dL2DVW`GCN<5Wc;ME?FLx-`PxgopLg+ry884ZI=yUf;gPhA8~`s z;zeIrGlW^$Tab%zd_jWFVf({23r9g_xDsC(dwZ~5z*lP+;+DJ}fgs~S>Vuw(bmVsT zOY6-F%|!xVC3I#3r5JIG0=_Vgp9_DX;G94{@i-eOU&2=OZ;?7s!BeKL%UNe}m>^Sy zVvI#n zTYFj>tb~tsW}w0ABh5x3;v0@M&k(sc*MumtwnO<_90d9JcdS<4hx3^~m-39f{(sIu zMuTG8C3r|+)k5ncHKw6&k+z57d@B2kT*0|LF6vN%^Sc^Q*kKrknKTerz#D$?XKFa0 zox&AF8N5#a&TglnRF$6tSvJ|u2PYMOSitwopRypti&J_}i;b;A7RBMHmi{vRZlgz66df{2>Ib z`ctEsU@5pLYQWBJaMf1*vuyf{*oANP-$P&`eux4k2ml$t3`9G@$*jlsf~3KGa*9Sw zL)~&j^)!jIwA2mBz|@D0PZ^UY9lv-9WVRA>#a$fhj4hN0X{9~q^&h8sUOTtlk-0dg zYI`3AN}BvbFc4&8VjWUyVlbCVAX`LOO@>?%t3Un^wF)uoK0MW^VHM1pjc1p#}`xSedaZ{aQgXDG#(yi$y zQB`ec6}!c$zt+x2NBX!-3rO}SovTk%05Q-u1b`Ek@5j*@XG>sCqn>IZbDaE%fv8-t zJ#!hV+ZE+IEfL%Je!5#f_?tc<8-T&F800w}?hT1s&ecnBKu^oX!`*SqUgYH-RCh0LE`W|v z0ImN^#N=~c%V5R; zU%(U~fAZWK2RfDwbnnk}s2&cbcSBp|-G*6i=);MCm^0?3c7*~83s%u?@19WOO#?*7 zicsIJjD6A>**G7)oSmX&M#n4%-PeLz3z@xQ!jT4sC-9ZVV2mORVU#jc4WZ$nc4Nd6 zJcOX1L;&QdW#=Kd6)C9&gGk~vR@X$7Q+nz7dqNz9Qz?GDH8g0zW42Qgs73w%@Gf+{qz=Jbj<_beGh-V_1O6cwO zawqM3E?}E@TOSH|bj!@2`GK!9^&&(bL=C)6-E~c5XdIf1Q4Li!Z{bPSt;w z|J55QYI=}qr0;InqGs<#mE13`LGgUVno@Z%A=v4ZhDHX#Yw`mVC-G%59 z#jg{vJ9lj^CLE&;9XM}bE@{fgR)U6@xXpIr0q(ikO zV8ao9$tJklHR(G1wv8C+hO2T$X_t&hJ z9JBY}<~$;lO**!a6eoIx5;BZv4J5^5G~BWK90KV!3s*$WM)A<3jiFw`(*Re5PXYlG zx}5j#iEi(k3a&}Ba2Em1(q7}+$f69{=IT9O=QVC>nAQ6|rGrT^ zKRWUBYVh_qUmsei@ zMo2x4s5bpZ8jzq(^8GkV-X;1zDFjg~)kc7ajZ}I!E&69ySHkYXrHB0yl^`{aSe>Y` zd87JR!Uf||i)G;AOLZJEDytC~(ijUyHFhZxOR>Z_nxsmJ8dP{vZR{wJMAl`J=ravg*r;cGq8cRELwkM|mv%r*NHs!~oohG>F+AQ2I63vm9zJW$$~0Y#|faMuFF`+S3^!?_x47x$yF z#^RH-3#!PEB!H1L*>fAf_ndIntM_nwMXxKyjCZnbrBWEM-7te~q1*R)U?+W)LmUQk z?Mx+8Y&}%Of5ZDY=6eG+^-70_M%8UPoXg&vIDMw|7&Fh=`1by$bunPAxM}#YT7rw% zZ8y3^T>AILDlrX(TE^Gd+e${uQ?U$tLJCNMx<+duDTu&>GkcP0BxTEpIRU*dPhpHLX|Ln~_Sj(=j83B_l{;0FHw2XTz_c=%BXQN9%-$hCn20MEx@DUGQSn_IM zz*A`VDR;8N~W%)8!cNq(GcS%21b( z>Q4qs5oIQ{F#k(9l+Ncx`IGf4Ah~WZ)pvxZ?>-0&jAo|Ht@KFkthX8;x{fKraDF|} zj6a;v>d*ZbT$9MQWOqVQ%oHOMlMy_}#Gt9owH%QFip*MvM4wgYP$4xtNLFC)daUeH zhRNRb)YurUttxe_%(c95&zL(-VtfcxySkY&J_3PVQz905XfhbNLIis=ANoQwtUCjW zNtvEi7+rh4d^kyThS~OU9C2*^ccl>|#^Xt<3`W+|Hxz1w#K79nQJKZuU?Q8L`rwXy z5GYjr7}UE7paan4Fu<;#&0?xwo2S7@N|yX!p0EO3^?JB(^fyt0Y0DO#8+1DpUR{j? zbIWn1&7-*pn>};+*$u%X_495f)fWjWtpYWS$8!Tpn1cKm8Rv$0FBI3B87!khk;pmV z-|d7UV>?NyPE)#S92I6GEZL>9=TA~s#li6o3VmLL+0@}Fobw>T*~5n3qGB<+tXPhV zI>=1?kPVj3ZVeLUML{q=(XOLi#D*8&f&0E+t%=;!`0_O9?o{*WKZA?+))_>7eS&a0 zd3I;rw62TnyLq+PV*PMT##3qSqJb3!8$cE);3uxMo!g8-xZ`M0SLjRgy8rnlnay?xir zCQ5G&mTD~IKI?5iB#$ERzK}sOZrUoz2#M|(jA6bM|^$H z%o?~oAyP5Y)BN1OPJRofnnsD-$ApjcO3bIrNH@JX&=I{#Ws%Y} z5@ne73{bSk2^L{=M94J)Lyhg@eS55b36B>W`BetV-f*4Bj-rd= z#w+*9sSWHv;>lcF3?QR37D#d6LWgC(o-&^$-~0 zD0To(*;(#g+^=|Li+O;6j>>}`<{2%HiHpue_RcCK#hAR%=h zg+#%ZZY_X{AWLyMcmw90oGNVYo19dDU#2*uv8h?4V==QQMzLJ=1Dq|HCYos&P0u$g ztH1B5C?!p*$-#czuF@Ej!qZ7@1U+c^Q*Ls5{?;6;KGW<5gC%O`8`jJ&BSa#LlRyuj zz~W$oAD@|Tlr)LaU1y(k3Yaw4D#_K+E~z|8O%>ezFJ!-N_hV&o`z!HsQeIwu?ORAD zqsi6TOMIeRaneLq@!n-&9HMLB>7Nz+xhwE6RxO4q@M0{if91bZUDe9c%nTvLMrpgU zMxhNkHtG$c8hk@|iV6maW@}<+a5Ks^tn6p@8q>S64+hlTQN0XWO&lNNi8U~j)80Qx zKK|P{L}rHCk$}{*5hol8u%Wv|xSrKd60VT&wlkL?Jza;>ovkFHv@sM#=QM_)Q#jU! z1?%35F^aN54Q%D`CMriRNTG_XH-GhdOXsP{(AdixkD3&H7z(&PkgCc>yeTusWzD(f z7p6{_LLUgDO`P1UUqs837h?+kU^d7aO<5sJrsMIbclak;FNc1#W7=pL44Emkhh-V2 zumpW9Y4o8mSQEDr5vTq6e!g0^)7M`1{Q*4kby#roYqnDxe&u!DU>A_>_HT+8bDDO6 zW(5!G6VR;tmp*Y`c{rbc0G!U5WEWO#59HFN|Iz3-qevvVnv3@M&-4n6HHh+=o}4V{ z7|vF|7;xGG&oTIEf>0<_K0$7H4N;#Of^D$pumMk`(A0lkxR5q@AU>OW0efJlu`2N5^Wr|znQv;AL=UV_ z#i=5^k?OfQ67u4K70phc zJti9r9WYoiD%!L_EzQZ6_3x$uJ;H9oPnJWkD*qId=}jlm(ikA*KCjJKycq(AgkuMaChNF zNS_Y2EOb`3Bm1-%m~U03h{0)F1D~!yN+>_q$7NiLHpvz6{=owBT6LdY)VIO~(Rt=Z zYg%Ebe@=mb?SiDfVk+I`ej)6zpT?+BBCzQlf>fY;R*T-~YM;6AU)wP{XDt3mqgp*_ z4iE4eS&s%)D%Y*uu!4d_Iq)DDSz=Ld^wX-%Ii%raIJzBQ4*s^*^Bf($?hX>i7n%bU zzev>I9YL5=6l zpq!o`Td&N!X?_6Kt?RQ7_$~PCL}SlAhV4%(yuT|o4w!@dKafnUw|9@-SSb8lKqT41 zSMByLm|OO?oX@D(qOw&w1K8+u(52{`!*~sny`Lfl{;>z%$xw3SRVgv!>x-dmofNrF zV(OYHwCg6;#tBgl@o~Pubzm&OnX?jczOw`)3r1{)dqLkB!K4mPWT>!PS9?Z;>V%z9 z^q_K9%+6*~39gds!_HHAXBnlTC*tyRsjduCsRR?WQZPIC% z`_ORaU}}i3U2gu;1B>d{;);ngN^oQy1BwLdPWss?SWt1RmFYkOp%+=Dzjw!YE^o!& zRMfwVj4-_^ayx_96xF{zjCxLZ{;?9ZFa@y*5RqeF*f$*8_OUD67nY>HnVy^ey~Z$5 zHNn2$8HtM$L3ht#ZYIM3cf$gbUx6=_3((t&NJXawtyoAn?4nh-g|lyo{LxX3@+?dp46WtXeRx;n@{;wU}tlfB3anG>T7S06KZie-44 zCl%pnwI6Njhv0D*N}%Y^&VtA9%$70x4;4G^O!3@1O&t%KIkITVR?_MVvB&dptoeOh zn<&Jnd0(&M3EA8J5aai0t(E`PIaHdbhiZtZihr4EzITi$37qx0AVsn~MOi0;&pydv zj@3;o32sJ=uB2IhMi*H}r|p8wN=DUH{Jo>qp(FaAo&rcU~qT^0lm(lPk-$LA{isz&g$pv()NGA5A1R|pE=uAK=~ z0V7vl98|%(S_%}yYu8@>cs4UJ-ii0Qgn7l$8Ae>s+lVVWZ};hS8Ya@6o9h+{y6ev= zr*H(ewCp;?Zr1=JUZOxFmBe1$k}Wk>sW;0D;BY52@QfPNT8qx$*5qm_@W1Y1=3P!z z$x-mAJ#-Pj82v%JjQPLtDZ@3`qu3Sm4BiHL5xVSuV|QDR^A(xz-}_dlDzs1roGTo_ zLgKS@+?2=X8|+%EAcvetLQjygqML#GI@E#z{cFC{wsW-+loYjq5!)p|sQcitjuQu1 z60Gad;q|?6;7ij2wV6i?j1Z!Rc`ef99WjDuc++9}@zD+cqLdgzq!9$CuB-q|}?tv|hI)S@D>$x@FD zvhGL#S<|DD-?#A>lNa#ynofOa{f85L5Z6kHYgw=e#MB&HJGl?pe4#ot2t;~m>A4`BJN&-NtF%oXeQX*t3Mg)u@78D;m^ziA|bZT{T~ z%zil|%RkVp4FQIUG~#eFRSTe%#FPcOiA*+urGi-ww6tKYh}9)wQ8Qa|yhN^?RSTI) zu+)n|7_?r^(X(7Z#5+z>-o_9 zN_NP!tabFUcix)()g?sHs1LpKB+-M7{l`%Sg$@tVm4`+SpB{GzvdYl1Z}Zye64oRiP%9PF;O=O-g7m2il|3OR$wOsxT|&@6 z;FK~_WFmIyT(mYl5}=Dcddw24> zDKB_p)GXOyQd+f*R^ImA>=g?4Ww_7BeiyAF-~dn`Ub7`TPIrHItZavK7xKC6I1NI? zG9wDY^%yCzf?r4FJ|T13ac(QzP_#Lv2nC)E+ej_%!C!wRX`cRz98z-Brz%aSCHZB_UVtEV<;~6L;5QZV!6@iKk zi|I3OcASZX`ESAa?wZawbtl9Cz=WV7T+c&P-N?hJ^U;;8(~-HKx^9*GDzv2FL9RnM zmis1ur0Z|B6m*dGj%d;U@Xb^}Yv*a$RZeTEM4R4oBobrBeD=RN zmaHeiLmswiJZ>AxmMDf;-_sWZ7RhI0-T`P~P$4 z+@TIK6Z#ByAHQ9%;&Pb$=v}=?m9+%_z@X8fU#nKb+$tPIdK6%RF4Wn?lYxQl|KbOGUbxdFrDhmc9cK|Bsa-7b9v~q4JNgcm)n6T2~ zzZffeqY3*~18^B-V0LL6Vn9$g)v>bk4GW9f{Td~{177ksgK6IgJ|@AL57c67tQC!# z!tW?rxgJ3E)h3t`X;}dnZ-lr_#ma~em-p$6siBP>Bfh+(HSyL#wQM!iGyKCdHllOdevrYP1`0f?5n zgA~njyO_`;cBK5Z)}437wx;0t#(IARXQwYqdAuh9wX_Sqpn?qBt5Wa`5>QWlrYH!U z@$YP~0{Z4V=Aq46*KVuh&Dd$tLC)TkKS*8B*rk%*Kutbe>BvZc9v{ShI-5YbsvhLKz9zT|!pcQ2sNaq(XK{j~? zzDzg49vkhn{W{Z1(ADLGb4y5?*p06Y`PVr84zxI8R^yhxq3&BbcmecjZW9e^9 z6xFc#?vyn_WAu)3&$)-YJe#@O*B)7hf*d_K(V1q`dIFL0Jbk{3-97fWFA%Suos>G1 zegFJzO=OB}*h$LS!muaQbIs`l!{t!+3rNlTxwE><_od-o1P!yah7h4KO`Dn@7;K$( z@`?V#85XJL2?5P8Zup}0XpU@`7=wSkKX4rTZ6Bvv2ygjDrsqHIETkomk}2NuMi64E zUOEdrs}G1F{D)HlpR|x0?u=NVeIjV_fgSmn%(VbSV)3vBQF{ha9J{k&29X`Rv+E=r z`OZw3ihhj_U8qqRnNt`W|9nD}CERZ2gL=ZuDD)~GQ;I~Wp=oJ7A03T*fhm-^>W`vu z21~)+(?)Rs%2}t(0c1$wok^arYPYpmBCk-8 zU&%kf;lyv*5TGSL(6Dus!qH%`VOO}}XSna}rusZx`(G#m6e6WnVs6>ipTEA`<~F4? zgwZ0oSs~q}E??c|u78a0=N{RVddH00irUP~)=o`%T;yfXtW{GtdSllt3t7hFaJk;g zWtHn#$SW9|&&61@3Hp^&m?E>Cix-lOCTD9^jeJBsB$wvIyi`7tKmTVIa)#UFa(@hK zc{SN6+=!=ILr&yLU^ z9l^`+-rM<~Q3y+m06S*z0Vv>6H09V%f^M!z)`jj=n`qKRTee zzGI^t`q<2D90Id&Loo`-BS;8dK8d?dsWA(YA0ag%iRkWE3lqW{i6I#yn9V@df|sJN`yRx0vVE$}X@)QqWN ze!kR<9(NMBC*#MGm22mel~LTHQ?fKz-A)zQ%M`Gt3biqMgMUleyN%?inKi7Y{ zX8Xg^f-?S%qOEc&Bt3;1pdp7qFonDHUoT%nN6DQ!p@(*flbfLnqlcRb{f>{vfp8xi zW!yE!?K_lo-7|l>*`-@=LKpscUXt=Wk?qs3$jUsonA&l!?VOCk&CqU5K8>PZp6VJ7 zYH?W&m=~XPS&*xyMY++6($w<*x%HS7cAx>3>G(*H`HDAsM5V{w$kX#=CWI&tiuL`T z&;j@HyUI0xKl!k{e)9#q@&1W&ny#2~yFq_>yy4&J(%)p)=RSGaE@^V=cAZ|Cev`_6 zNY(cGu++R{iCcMeamwCe+NPT=Rwba!INl=ju16VZ&NA1oRkqBr(JQHRAAdB8axFCt zq>sTKrv@v)xTb0?_u^g!Mf6h~Vd+x~)o*VxevzJ2|A^XEo#>rtjv;ZjC7~W8SXhv6 z<~}(w2T%3;+2CK@H)uEg$=kX4%`q87IS@gA>n!8kikvDf?Qk+VyXo%_<}+({(6&QK z4y&{RfaYFK_G}sEHZT*-pE>YziSctaY~O#a(rm@Sn~U*FxeD3R`ptr`wYIQ4^E9zS zOEoZB1$1lTyoWWw@Fe#qKw%lY1GhO9fB_E8DZcF9<3QQk{T#jtFMmV2P=>Yk`T^bL z{Mgl*y<+{?B#g}l>_%3ZU~eOqpl^EK<&Z*cr)rl$uta!ax7 z`b+hr^NSx`{mKn}D>14fQJRtK{j3{4`yyW0YDdOwZi?OItzYj{_W}EQ>~jEHOs@}2 z6xMzm90%3OPYVbcSOjMUWr^r;8OEJDF#y62SF0RDa%sE;4(wN@wqu;rs4xXL6j&3Kq@-{QF?$)=q_~h?7)4ug>!Vz`b z)AMshUjXqHE9a{oc@@V4I3$le_%jM=?(Ro1Gx6~Q_V zCpHP^&C|p0V?)=UL?RG{bi=LdB{qAQ4f5L8H9(gJjlll#u&=tHfLy-&JCfIsU$(Ps z;uee6+l?V($(sFFto5=9$u~@Qjbn!0jDgmLf&}m|OFkkz$yrK{2Hk`3QSx^u7u+{ryx8)Fn zmv+4ht=7%1Q=`CV&S!SfYr35U8r8(_cs4zo$^DI+N%N^`-^=G!f!%z2c4E{;#MCgf zn(0mq9)ZIEuF~QBmENM&X59RU-m;D1tGUHN{W=0Fv~afHz}^#jo)O3EO_`T!c6}av zid*atYQqSL7=va^(FUhRFg^}gC^3&o_vbEN0TR&=#;O;)4P2ogdKKlA5HtP6I|~Rz zMqGI$v(1+l9D*U~5fKQGaKswmg+l`)RY?JhUhE>BTc6V~8CTGjX18s|Y?jPtCLOG9 zxvc$fEsYq3&dAd#uQ#8Y8J$u8GPC~Ri^L0FBM!g>B+VxP$5vf_RE#N&K^59$cHCZi zR2A^+Ox_oBHHJGj%y^L52-&SaHKB%#T5jF?QOcl3t+V)Q+O8^mW_sL|#Wc1Gg2-;} zY|k^OM$-~+%MPn-cHa$egO_RJBO13CJiJS>i`R|p!Bof;UHetaAFawY%f78xTP$;* z4rumnTdmvUmQ96U#M490SqTg`-t@*>G1@^PozQ>Pp6hq6aVu!L8D}Nvk<}az6)yZ~?<_*(A-h;+Rc8s zUu+6C$^z-O0}^D4S@)jM$_h6K>+=7#AA6BRzvrEE7~Ie~x5A_DK$132k(Cbu(ONa@ zpu7eu*-Gjy&+RnEuzQLx+*zVib}`d*QCZE_*8c5V>#+v9;VbuFr^-9%k+OaFKTpLx zsa$JkLg1s9Im|QF2(=Kk-#E8M{|6Nuz`q%i4fp+$%?_xXk6dk9|C&H)~f7ksbQ8F^JjC8JQSw~ zIBs7SWQX$>G*)Y65q#a$$DR>@^+JL4Hc5EgL(1+URea)%tM>=6ssqrR(|pHjr+&v& z4MDY5KXtlkA}ACv0P8d}zT>buV}NH-E^omH?CaKs^C^qd{ihYCJU0xdW!nf!k5hv4 z1q9NM*ChyfPW^}LDR1FzWBoyJh>XXO-f9MZ)#!ES+QNlJb4L8|MbhY;yVk9B4-uNG z-j(Z7A6nlthZeUm@*xNPi^J0%{H_ka^9?0(rpB-IC@`?}WDRgOgl_zV7ttB{g7dq+ zU0VsimyrA>w-(>GX30w5_pjmei6Vr6KrLl!B4j6wF4$8wLSry4o=Ya*c6TTqED$rM zv6J@&DD-I-=WuEhKfZ_*N0w(Ufup_HH<3+0m9FHFN_#q?9l%KpkH5$q1eUf1zBoMg z`JDoj&s_@X(%C_9ngQ4>*yoTZCD2J9>2UXD$qsQqU;V%=R-jc|a{Sw{86?_R6(mj_ zsGf)Y8VLC))syU(CM&VQGneQ66y?Wjqr?2`9eW?5Cr>Gv#gw9RcQU0jQ#5l`s`TX6xp3{*?fz4m zeO~kT#4gj6GkZ}8FfHG-l8&QaKN4?bF)RZ}5gc>qQX^707%+KS@?3InP!WHdTP`}^ z3*9InE;~oB1}cb@nU(W8g0h6n7(LaIA|q;1%dISP(*AL0$b);7hyESFPBnck~x zNlgUb>zy;0jO&V~Wz5lqOkYdZbR1*G^}Ajl&5{J{|oQ0CjZ+otp33nC)1dLJE(57u6j=aKaHX z+wm0(W|$!7>%GF{7OCz)U6*xV`f+BSxe@mv<_~gw#RH!B{g(O2NIVEkgHV-DhtmqV zBE%1m#@huVJeFbvoI>Z5n4%Vih|b=C5FAniv*$>)(y|y9DcVc)eFLBoh*pqbvd<6i zhZv9l2ghUahaU{260fSz!7V@$#wX+7VjaJFTMV5&wVstA2q%Wu0e?BpPY|oQB;v~I z8(@Dw#QE8Y?=$(NFL<+E&S1ZQ1f_@@O`ivtKo<&kk(}iz2D=JcO$w{0ZJ4diHKdonBSTljp9aWexx%% zD*Uf+QqY=EmZ&kKX#KggP{<=TlfqGl5tU(oG+5-AjRsrl^1PR4$bt z{2X#jm@@poF|yYUO?h=9)4#R+S3)b>K-QB$za_xrZ6p{zq&j}ud$Pq$gd)eL+!=aU z?UU#F&0tYoE=;=D142y_jTflDrB$f#H<@VzQ!ShUm^MRu5c5Fu{A+@|aqx(yec3IDf^Q;Af~!tsAE1DO`0V(fcBRB-GR_J62%kpEaU^``%` zS7RSXR7;nzbXe>G!i`@gI%v(I3k7aP5BDC!e#O?ayGxW3TOhupkivlCQ-(*pqpafQ;~o_xci86Y4ij$3L+cTTbL-NYq!2;L(IgQ-B?`0( zy|7kbl#}K%N|4u3Syn568jg<^l)XWFSlr|Byc{H$N3}BGe^szXfRexQ{abucj~8Qp zT@ug{G6$ijx0M@jL5YZexJXNlBuC%Ap*d#AbYkG_rnrtcW!w(R)9-yQuWyfqO3j(< z5u;@GQ%KT)$yRxcfYl=WEV_WTS|$qbptO2-%wp@8=1sOGgkRilXK6mZu^BWPho`p7 z(3R~7yjUO(wv_NrS^uI&v-o5YLUjri=yLI=~3FYOnw4Brw82e;nJ4ij8d z?06krW>AEyp#jlhHB5t{P|XPdTXKQEAQ2%sS!ShEBvNX6|0(~E{o{@VemWAu53IVX zO-F8s2x0jFeWjZj8c;NvYAVN6Z2%LQByc+7IIQ~{>WvXEX3wt2Y0x?xDHji3%?6=b zw=5T@$35Am%EU?7&IRcAD8}{E+@`0~zSxl5macE_yzq{yrgjjp`T#xJ#ZK2R&`D^H z39g&Nl*y&~fy3g6vol!A(fg;`zcX?mY#t|P8S`WJJ<1476E6E62P@iT(>m<Y+u4yU zQlf`^jq&$xC0~la_re~O{Fg*WVLFseLX>ljFNsRjf0d}|i<+a7w5pTThm^Wk)yFG< zC~L;0J({AD)a#Q-xp|D?#I9;mD?YEMS9>~`0hT9l#FHc;|M$cGFTZsl%2Zk^gMFOhV8HlRiiWST3uue`4aKz>1 zo;eH@9p*b#3Y}qaCIw+59+2fGe>>~S*W#4K& z8iZFn$KW&npHHDvkg=|HNi)yM^K^gb>FA5PqLN&zli=|$Y$J`k!mZad3URbEsW8WwZf)3UE zhW|dMFlQTKL^1$^0lImAoFyQv|^^NmcyN9N_bY0${N=tz*m`H6(Ia zSKeT}f>Pk1GDI@h+^c`=sTlqVECPhyiGWIEx5eipNk&EVS?%}KdIPuFZX4$Ms8?Pd zs!zEm)fA-oUQS2ERYQ-gLM1-lSB41lsc#+yIu#2hw*CIh8XyUJKd5`q9Mnz+B|D8= zs$5VELoC?;4o%q>cMQj5j0vd4a(}Rx`*9zM;n^0WporSqoG={GG(kQL6Ry8y2`FRR zLA^%%=^d8K9W;xwuh%{R)M+t0j38mTvxvrI*dOFJ7_Y`Cq`sGrE?H-jm5ZVSmxT)& zN$F;mgot3Cq(P%Qv>8yYpJZ_mb5FH~C9e=4(50Q=`-9rKZAGtsk~*NMN{%27(8TIU z7@~Pf1}yK81>QI}=i9yDjEoLGpRunt z$CiaZ5c%$z0Q%><{b_?DU|0Z+rRd%2hP?8mfIGpj@LW#iACs+K{aZ<%qR`%u&j`cZ zMoAz9q!t{_k77_Pwm^t*5&G>k)ZA+8c2_~#ZP(@z#ukeRSyK=kgnq*cU<;PC{iz0| zA4zu7hrgX*@jto8$N+6`rKi+lr9Qc08|N2F$XHd9pLoT(c1cV9hNjc4Y>utXK#TA0 zDHyljVx?f--`O=yY=Nnpy~OT_i@Nzqpow$VkraSd<;X4#Zw_<9nGF*Ealtw3*86Fakws}&Q;^^0UThx8gBpY*n7 znT3w3%D1DZ^iI=_wS%+GP2lB)otuNE`PBTwn10EvlYc#ZmosU$d&U+q& zVfK3g)jJUb{nw4(!I7)XFe6B6lHj1Wh(Bn7%tZgPKr?!+4e3MhRV5X))BW zV`0mpZ_;lFUo345)b*}0!?Xs^h1~cOe%%`9k=u?+7{1G0Vf2fsj&vjW7A^EVgID7d z*|`xuR0O}Eirq<~%@xk_d?f)E1ZBexHxd-xQ~AfDu0j^5B30MJX0L6s-Kk(H+uu@3 zjC1m~H8vtq$)=!KNM*|kAhB&DI5aoO3@Qn;9K3B=HGxMHu|1wH2~fepY%c zy>l+6dYJ#hg`oy;Sp7V+@^9IqNZSjnOx;wQyp$16@e0l+-y^qNI8~Ed$5QYYM%|Sa zM~;`IN6b0O+eO`&Wb-IN?G}YkbJ3Tvsf4~ymdtq096fOdh~hR2hNg?2Ii%2{Y?JIy zbcz;~sE?)a}hP52jY92*3BdXdmNP~_m)7EEu97ZL%`)0XpPmTUPe)DneAkVhTJe31#KHkcl z8QXe2`x5QE6ms(7pMTynQ?09OH|%IA_u(i8_O1p?;Vj0hb53|zyUL8+7F6K?W)CE! z3#(5~HuxAdk>8aSAhK_j@3A~7THGoQRBciB#pM}{2jnR(CDaduW~upS6cFr{cR`C6 z9_M%NteKcAHe6U>V0Dyqzq9u!=CM=lNwBJW<@OB~A2?v@E}GSw9jwdOhXs%Tpqs3OuC^~< zkdldHuD{v;fQsX~@J0 z^1S>QK1C4|>S+;^7m)csu>Znl+kzP^3m)WDG%9Dmy^(=*njED%m9#iQT6#dC3ReI~ zViB!cS5u=(ufOZ`N!II2$hcyJ=J!xR+NLwE2$qQTUQzoeBmg6jgj0;Is`>Tb`SOu~ zePq2vn^`~QXX~A-bQ$-ZE9|EZu=!!qjN+d+BjtE2+6K$63y4`2`44R~dKeJ1LAu=z zpLiWd#sW+`!a>H>pOIUMT_-Ry)R0W&A&o3oO@@vbc7yKS5tdMF=$5%U=Iq*FIC?D! ztHDiGB{MM*6>C_{$KTaU-bhb?e-AmHGCi(q?BxOsE~Z#-%&MjiHW@CeY`g> z%8_~k;-t*|qaVnm%Io01al&Da2H&4!^Stsi3(|2|Cu$aakHYv2RGFQPuq|mJj;dwY zymc}j;S%QKIR~g%BO$T1(hPV3vJq_LP*;oFl~yNp;e{(_Os9QcZx|+M zi}c>Wyw(JgS?PXKx$mj)$8f^zOHs6r_rV4fZ`L6x!HZPa2BIL|`iHkC)t<+lSsp)s}hlp;nylxJ+3*Xo%oCdoi zpykF%eK{uF;5_O>BIQH$@Qh3$2lt`crU@0F&3*Zd`>{~&?)GtLoS3CoJ+LH~522zw zQ!i#iQJ%MPiCQG)(NtG4I5uC}tGU-C>w8kI51)khG1S98avxv{$Q!z>3r;gA56x_` zCVveZ9r!Weu$4097ftX4;{z&4MzAREVA$X<oaEF#dn=YA#iC?rDxi&=9@`=68SC<>W~P5mVUDcqiv$O)|&he26`YK>Qo+Cooj&{GJ%D8O~wc zj~5FKJF&zQN{9!o+@8+$IZFVs>TB?`mkd9KI8OPhJ^ZivPtE!TjRrjr?IC)`W$_Uc z{r4@!F_Gyi>qP?b35VhFC49!V{2b5kt46V>uEHov~U&n-~N`_ zHa#BMpK%SVMYlO7z42$xFM&tb{QgZ5-Kt{&t%d$t-b!laH;dw$wFTOREAMRwl?SJL zGniRw38!!0p~v(ZE1UsF=#QU(9Usbj3HbvZAT1$JlB}Dt#oqV;$77w+xo+IkUxJFz zlPs zA-4B3u3)Sjq`7L6a@7ImTi!>)J-IngFa+U!0#y;j1Q9BM&Hx-X3~Ktc!19-X1BrAk>Ps|6}Eb>p@VB!J{I_eOg zvr!4A;rMbA#3E=?+NAJUOM>Y_?HvJMDH7Gl$O1Ptl|vxQU*j|7`xPy0gmNcjjZ|F%ta}5%sjylC`3I>w54F=9|L?WMIR|K|!mp*nWX59ly#ubBeZO@XLNrC+4wS%&Eg z!%^VB!wdcyN*RpBwsyPZ$e*d0m!E$V1Ovy{=Wx0kFCv;ng}k~0=T_D+vub{6ah84b zT}d=W_E{L1`R}#;^%V4h3Ic^XITSODE#INNT*oRf%&6k*G4UuJAKTBJC|PGpV^dXm zHvQgI)js);skNMRt+>}H58atyY`^zeB}llHk&fZ5SGzi^{PGGqXZju^udmjKc)y5N$`ao?hC{rIUp zbpk=fCydE2?-_}gtK5J+h7%)%?7{ z`IQ^9*O->8wJ)ZjdGjUZlvvagHay4VLwK8@#a<(#aVHA~9ky2rlvNy4HGc{xU{}j;C*3IQV zB+%!Z1U7y7@XlQYHnCQvK8QNcayYfO%BZ-Gm(!J#9k5C9;(mt~ZVo4>rQ&)0Yt8@2 z0}mt<0wW{m{kP$ho;%M0lXu4p#f8KNjVIvMaCUt?lET0&cCI$G{(S9fsMQRb*_C40e~O4UPipJ_t>= z*ApX5;|yc;Xo}JlABrp|#j`ek5VXSuWAfuTPZn#&u3bVPyy9nFWg!%@8UE1qAq}8a>p~z)Hj(F$7QA`x91rerVd3REX$V~WC z@7ElWh-^ZEg#`%^(9qmk;4M=jVNBHAz!Bs2PJ}~R!SXuMvbZ073B&XaBUJYmP9<*I zdXk#xq$t%`q4(cJ@W}zZKeWoCbNEteBVyVagpTxYr17?^LN%Bz9U7udBT?h1e zmj|Nx#p6^vXSfNQ!1Q{)EgzrOelpALyY=#z(z z{_V)6Ez!YL?HjdOK~k(Vlf1tC!Sap9j^@;(%!`M_EgUAc;ciF1H9U8O2>9^Hf-4qh zD&rydiE1MQ&0KIH(3~hYs|UW_yq_EP_*M!yRn>Mm?(~C5`xndcX5LhqkJ&KZ5UCsd zyNGmig9eobbjTx)o0mc6RQLrK+JZ=hMCe5Ld%d0r${aN45RImY_-9~APg7LH9-gP( zO`P|1w{2TjiVOeJT&%Lw-jZG47#23B8y^E>EQmnJz@tNkuHR0k8L{4^Y@s#{($p-O}eJdeZKE^wEk15cq(IIl8+I>*RR+vDoHtI$Yl7dfmO4LN&ov6=u4Z1zA90v@ z(mB3U@Ts{iajGYDP}bce4!LW zycm0b2^fI?_uNRVC$4gWOOqviV*4_C2-!DZn6FcBQX~LTiHJ62q1!p(pCdE)72Z)! zyBLY~RPb}g(7AyHF+_e>RUfqKMK{{*`}P}uUCZm0VLMMw^^wWxSNS|!xM6CGQ6?PC z{q{bM_kiE2R;_Ce?Ia1)tIPeqz%J=l*c}dfzCnOT!H*v+Q}z4>aD_C+C@{SP-tk?P zm+5SnOvASyCbt_`P*70$ooGggM^-dKL53;NB`TgcB2aO4iS1-T3E@-F4hEv8ArNx? zma><(=#xt-X90?`z-*m;gza7@=tN8P;9u#>BRhK~ zzI4EGgGw_Pw^uJ^IVNyR@EPL{bQa6`MS}nZa!53VWLqY_@?0g+$=H-N@_K5=F^1>k znJ`d>+L_gcJa#zc!|FatgWSX?g|(pzLjOHF;zwa|VITRsdu>_bedN&wwG^wjx4lIN zF+<#%8i+i%3>N3OU*#n7@{(^66faOOfaa0Y3b8>|E*ddN0Z;*hE&U)gNe1=&WX^|5 zgI`$RAzkR{bq5F$Ztdvl*oKkl#RV&fA; zQ1{#0Fsy2diX{i9b`1?=miO{f``J?^-MZ*1=YFes2 zEA(!mXM#5OP5g-~|9M;237R;~J99LKr#@96pSVs5_6OD;irl}t5uuiL+G>f9MYPh(03NhfMMp^ zri$T*tv`Z$(YgOE9ClGgW>Qxg*88#!nsXYN_u>IrBlB%fEd0bczE%=FwXL>@sX$qe zdBL8y`38npOfg3x&DcMFe*;5|?Q6&P=c7g>Cq{@{%7}L*9^A2)aS^fpLxigpbUJYQ zz4p5zyQrr;Jk#=Sb_h$_&}U(>0JR`gNp7p|~H;qC;I; zgxP6p&w99)KkQQ7B`ISa9uy`@3CvUc%YCE3?QrXR&Y=e|F6u|%7NtM=pZ(gp$*_N8Swrh0&Jru37uU@FNC zgS`V>#i+h?W@6lmMI{=eLGk4Pr)ROhZVA^5>3r!uKef)V_#)A*k8L_;3=6NK3u&5L z%HSm*Gwz|M&7w7~+am=nqu5sa7$zaiucay1$nvoK--$VsBu3h4)9V^5Qm>?oeKib5 zJ=P>&9={rvM(&W)?AN$ zcX|nVgOF%i)>wSq9Jy?&>F=EOQ8fqLxWy7bcgR7f=ly-L;FoSlG&WE4PO7dt$_xu-D7~v zi>(HA2P$>PtFrf+tSN4EbRU+}dES$wtD{ zNmm(8LdCGP3ub2oC43S-R(b9vf(dkK;NPXBTOnA>Iz(hljS$qQ6>{)rHqL&cVyOs~KeEv*!YZUF z7P%KDc|j?pu#~utnVDBUu&8LLbeG?9(kup#M`zaB`inZt{F_Lb#-SOmHhE`yX2Gt( ze8yMeNbbwUsphjbTq)tR3)V2|v>5GD1DJR1CR3-5vtV4h!r6K~WwofDDxRzZr!|^# zo-VecIpofY1ak*LpGn&uL)mirI2E06OgJ@BY~-=5OChuLqOM4T@45k)lfVV5jsRF$ z49D>-$2{8YjQZ|``@mFB?3^aVc;2!frB!p2Af=^8OKX3QBrEc=Jnv6uNND=**anLH zKhHmqrcynjuJUQ8F|P&GP8#1JTZqPI=i^%>s8 z*rXifE#QX1aIal|<`WRXas9$_UTbGjju{qrZ|T?F z?oZN(-!p%QxwJav{ggl-nCeWfj(PrlDxmV6pap0$U1a>}Aj4Bz;*m1h6ub<|~{GG=_Oy!A-ic4D!}*nZJG zuL-Z|m)!)G`oe(XA=Mfz<#8U;CSiHIA!tVC+$gtdFFddO4-IU>#HXsQ>zL@!`fBM( zc1VDQ|Gn%)d$kg?2YmIf(XAN^mLtW?p1q2OV`$FO0$wJ~R{48|B5>+p6Ow5)i$-f` zWp}t-%hd=0?iq0V#gKyGW7g#KaFd_>1BN3rh&UY}fpb;Kf<^|z=SrXL&tQwb`ZXp7 zH2-!oj+!hoH>YdKel!GlCZ3aQ(EO0Z7NajiPlVE)1tEh6YIj$ud;6(1UmB@*AFGc{ zwPN|W&x63?4tI0dI57g&YZ>fbqdbKlBN{(K?E&Z1U+wqpmsX|f2pXp=)-N(2+Sc73oO10O!2$N88xTzHKI1CgsJWV6bY z347*^%dt3DX~WpHc!#T^VC;lwWJ3LYU_jroLLbkww|^lD{B9d4miS}`9x0wlCA`xD zpHkhrO!|>qeAv%6D-51CIoz%m{`e?pJ#7iLCS7@SQcTsC_&1S3DLv0!VV7vz02NX?GawM19@&OG;M~bKvPEoU|LhP zK`)?27^kZg10#hNg?RQTXo#US0gUJyE6lRa3_Lap$V7iSIF6Zp#)F^#^Y^E=S z67I!1D*mvAT(N}!!Jzd@@IqCn<4*YXca|-%Ro)T`JR#|3X>gptNz5fhx9o+zi(5o685ZatM9l5T7)L6dV~l~MDwW^NfZV6c;=>q=x1KjkW-w=_ikKftarYZv zHZs(M6j)MVurdQ(AS3(VMvhl&05<*}n)uQvO4B*^Bawx}dd%81WpqfY&4<;)dYsy@ z5E1;prd*;I>rB4VZ!wS4;26QEtQcV{Ut5FuK&o`Am?hLsEuEZg_w}=WHOI)0BzIg? zbHkFuEl^I=*S3;CTD1u`aFgr0{r=OdXu^%r`8sWe`o8Da?#VvW#qX^z6e753R0Tnr zI1wn|m?VZcg=teFJ9Vvti(?{APEdb>!toWIwIPWXhP!4bn=Bt#g)j;wAYfBkcs z*`-hJpQ$-ZaHu^#eKGc*Mxx%Td6DQsX}CPQPg5+)V~>#;GKd^|1bi}RXOnmud}u?! zUA;7f8tz|jPsO34SZ?WeoDE#qZ4gy0sGkn1MF0)LGtm7y#FeT=cf8{siFokDE=sT#fg{JK>?u$MQpaqXjd8z0gytBiChqDt!>W?~OY__Y z1qyYD{YLe9?~26!WWFfHW^N|W_K7~8#mnmsWs(TBpm2{R`JP^h zHc$_WD;Ep`#$*7nhH8C^+>5w6g{B1(b`>RqBl7ioI407~B9?$VYqpNW6vFpD>53zrRSP@X9ox6{b#A zrE8G$LaMH_xj)TjEBL_xpD5ZL=Ebtx)obbH)5m}`gMkiN=Z{OP3;a%m(YwX-LJG$k zdaoA&Yurn-ri%o0AfD@z0usk|1|bFvEXpG5a0TxZuGCA(Kx1w5+Q?I+ARGF9R*sSzJBki%q{MsyxE@zDCEeEK>RP#rz zgmMDE5BD*GE|2FO>6HeyaVpg-!oI>cPOGS0XeT#-f{6P&5DU6_!wpHlpILd`tE)`t zCf20*ie*eCpKL~>GAx!CrKNFZCvxuBo#CAhOof5m;knM?qjmsT8h|DyG`r)^5~U_q z60hFpk?SmK86xI1O!4}(5;SE^S87M}v|boIAk7q)Gb*|6-GgQ-^G2LZvQqV3Dk-@V zgXuz!y?ZydKx##+;s~QOtrlw(jlQk3+_q+-U?y0~ndV^Hs6k56b1s4BSU>TnOFXDd zN2((%_Q~th_}XY`_^bnD>9PHDxnZp*9d^}4v27*Sh0FsTZ)og1Frbr3(Omc6p4fUa}`R~C>1*PLl&rGp_ z=;S^Vb!WG|8ltudzqUq(FT>PwGD&&0NGp~k+mI0?uGBtLqp>dJ1dWi@fH@By<-B08 zG4J^D&>h|N562{js&(T)ieftCe-`xv60z-A;V1Wc&Z2@?!}ukU)3bdWn6}v*soSUi z7=eyAP~3*Q%sHe_>jHPUO?P*Eca#VXU%yB*-5fY(4J=zLiM}p$PE+%K%Xo|A^&tgC z_y}OH=+*fWD&0j?E+5SfoFrOS^088*PK%aeya) z6=tDY89TpE0Pl?SJD*}M>Im*n%Wp}fE5?btuGfIJbg!{_qH}JBrljj-W)1>fK#u`e zweW33z+4Rw_t3Tb`1L6Qfqw@I3f$B}Fq$xis$KDwn$ny+<2u=ySG^6z_~M*r!D>*R zIJ8i@voTUxaz@zW*t7LoOiowmh%M7_Wmf{>k8IV&_O6PxtaFTALgJT5zpI+<%GL1E z&T~pVZy`@hSUEy5l6`Z-n+y6pXnHl<5my76TND@$d>cT_AKb&7n7?Y)jGordu`3`uq+ zqFX({oaV>J?~myrc2HiSd{~7$53S-2!(U zC9QN#RH{mqTQ}}5FyPVao;K9Xtugh8@ns1MG=M$UrhC$aqr`vpxl4j z{)$6(!`x)B=&=L2Qivw)9Rbi_>bmE+HrV$$H6)@AXGMK01TsGszZC+T1?(EfGw9x4 zrp5!lM+x#P$D@D7C0|*?IQk)*j+A#P(o-`WLk?VU=HehIAKbsJDF`A&< zL;S-G5p7y5q{HiMw>QjR$wh|v?by!nj8)nTx*R4<-nqcEskJIK5`*eochV4QYndSu zNplh`&ZM;Js{-_@N>z9^Zcwz%g`nsL;TquiO7@~B(;YAVI*G1s9yc+MPc?CD<>LT( z6+c8lRsPi~+#QgfCc*VaNRrVzTM2B2))&k`!u6>y5fV))=rFw=i&8Y_)%0c-6f3+$ zabFOrO%$>lMbhJ2$Yy&~DK!ld+U;?%Xr+P|08Q*i3cQGHEfeztq#sAXEBiI7Bh_ZV8~xJBRN92efKVSz+NAP|Q(* zd}{@c=F@J58Lqi}pAp|6kTEEBBgHG_1&Dq9BBkmUu|-ijoG>Z{AVKd31Q}AvZkg)= z3*b>phVY=CsCt2RaABna%cErJ+ItU&6o#Up9{%XFJJ~4}8mBzG-0j|B+J&3$!mB>d z1b&%FXk_DoBCoZ%_Y{YhQD3})$4FPb8?}T`shGLB1I-G(8gx$F-0%kY>)U6s0~b8{ z*3?1O@U@xd;&ONuKLR;C|Ai}H=*me9;q36VzTMnGDdguVaSZ?{2 zXF_g(?P>w6y_mo7=1##N+)8lrZ1m3FOcYsxOH)(E*Mu*23YC>$)$C~XbnZF(u4h}G z*$x9|hX%ZFm}k;}!0EwF#pH}-drpu^5uf&rGZ;VUOeZNeO&7PRQOp zY|nn=80F8Js=R~il$1}b|JD=?a=jrO3xa^O0zm(7&SKVYJ%OK{#~N4id`fa<@GM3s-W`EI01TOY#wLz+PIBw^KAMT zO}%niv*>G%Q`R2B|I}qFmk>F7x4uIQ!lW<}hfbpoo1d`0iZxNV&>-~>XT;FPA^*so zC|%KOTdhYf3{2*CCQ%)!peKJaYeB9CCb~A}*j>#Im}gZM0I8fv+D@6YhS}Q z>SOJ98GQ+I7gg~PxTknrI7uFF72RBuoQC2%zvg{nCmV8k3&wBeknh_rpM~yaG(h3M zUJ&6(lpc*F`riz>%Wl1sI#AsYJ#O>E1mMQ?aZ&U!N4*y5i~Udzb@E9RGkT8|3n}o} zjDmE?L!k+U50~29mSpjT?3T@Xp}}#N62ybDxEEY2RbrIhWF5Cpg$JpT0bMhlC!kbv z+_Xs;Irinl9n{4uTaMZ-Sc-o&vPh^a7$$3nhJuNjTJ6Y7Xe!lJXSB|L6p5F3xDeZ8 zk`$`FtqELBsypZZc8kH2Jd?gt7t=HjUF9o{F>$N9<9&L{6BZ*S%KzK)7j0ZGXF{e2 zevf^RK`(#DAO?;~olwb-q$D@tBk;{%x$q3cgs}q@y!$d%F8L7il~RilAcWxA@jfy? z{k#bz3`Ojpg;C>&j*7@|5#7t_H(%niHu z(Y_AR?K546OzEGG7A6stb}CmwlQLj|-n#$IxkCiKvqUWEjWw`SP1Qpc9zlZmRV`OL z)dNvkt?d4;P%bZMav<}Y!ODYyq+p8BeAjX!l2j??cdmO=?xF@iZ0S@F8!ZQ=gVUV1TqDf`|&ncn=4-fc1TQ9WBtx^L~YE37m-pBz{Q=d$Qscgd0dl|e4z2j z5#Z%6xK+IqkZSiTlzR~T&iqXJk_|6j1bdtQb|N<#5)MPk4nt^u!tb$=b9lEM>fR>N zK-l>&|J&E{@Oi*$=uhD6JD%op3Ruc=(GaU_x^wj-c|GkKXI(vcU*gbFLQ6Pd-1odX zV6AI^pK@*Ta_Z0<&)BlSt?vZ)j?f{f4J3ZjH>mbU?rg9T=vX8;`VOLTy53gVmiSDi zKfJ#gn8<&uEVi6?xsM$M>di+#i8W*|Gi)bJ9QiClIgXw_QSK`QtgWrRT_~_j+=-)r zF_9=@%%0i2vRtreUP*_fwfC899Kv>X7V_gFjGM+^R3xl;OYvGv-u&y(n1Utc%eUy7 z9X8_8p}(VvU6J;Nub;p-RB>LRD@xU51B;_~AY{zrnBOZb{@h`gp_yYuGoCdUI_tJ> z?Z67UD-M7jd`;-WfSpUrjaXzWOS8eT=`^b^rcZ9BIE^$p1yFu)xCNV9d>MUNE-6mG zw?7{u)r>^+ElQoO89>JklF3jtKSRqrv5R^C|rB(PQ0@?HYUw z28OhTB`y^rXNw?uAVd@wjnW!cYkMtOGOMqAZONaz=ekPr1?e@`|AByU*`I>Qs4ywB zSh5|@WQc&7`J*gAfnz9WY@Zf5&6e~S1a&|*bJG6JoS1E0gzLh|f%=W~>C90?^k8>r z$NX;sSywQ-m9C_p-eA%k1!3n4g(Jo3Y1onZOSXitbj8=3+oI@=m4}5~2Df6}EZ|^+ z2EVs7z!R*G;^X;v;S-C~7Bz_|GQU%w?Bba|Zn}#vAijwD`hXTP_|3EEhZCWb;M3en zjjwyR{lE|oGxp#I)w42(?+t=%7=Ks3-xGczg6W_Vv=2UK^+;)_-GS1u=`4P(!g2w7 z(bm*5*Y2F%=%H;1oJauqN)}WZx_|BZwG*L~p?{e8h=$B7>_-qJ{nJx}%A`S22s7@~ z=ckADwQ~2(lmN%B%B#f*rzP(mr%`XHuB$}Oh(>-1EwR*oJsM<^6CA_%22@lfGLx(k^wB|(a7Bv0|hR?Hqz^A}UCbvvtCJ+)gf z((2OeYw63l{_BkQ^xLCcs35K2EB8nke+(TV@Ep7ob;G*nDyUaAx3Hx{=tUwS``WJW zP+d1*e)R~I{r2Ojr6o)G2$mJf#>_LyKZBKaKc=w&xv(czTpRWIesCwOY-*G$$G>VN z9nlEs@yV@AMF8Q$6fuw9xpUTZwizZf>0)2 zzHQ0H9ha<0S@x-o%Etm@oghFy1lN?q7A07dV*61-Sobq{Y!P)5!{2-|t;yhuE`a+n6=JNsWMuj<-+VK#FX&25u|7De&vg-DoOV5nS zQTGaPReNdpPiwOlME(A!u{WktQr4lfkEk4cOo>V@1oi5_6RBvha3}TtKbsO6;!_$g zGFUQujz*BTr5N<=xMfp3lrhb?@*_Bb{7!$cMj!(w1My5`WIxoR{oWVBmLEB$K4v5uW%2#rR( zv*+9T`z5M?a{}1At6!xWEo*~dQ?Ev_p4d7U;M>b zKLK+w^7x3@8TL9!$blQY`U@kJP(gcZjUWyA_-Gr0okLCT`I>}2On0i36EPGnAk;)8 zoN#V|y|NH+tHqK4VN3+^3B5IA&7@Z)z}s&EE$BmvcZqiE(x%-8D*GJ-A`+7*?9FO+ zmZzrv8mFs0a0<;_5w7DE1PD%U@BB#^uV{Ha0@IJ2v1XVL7BmslitJB1?N4!i`a}{P z%sBc;{z3&zF{weIC<6L%{V1utG2#haMq?pTW#HrsUNQKx#;BX)x$3djmzrudEHQj6 zJu_$=;G#IRXij^RYkXfRJec~_{?wHi%dgUgl&3GW;+$h~w8VL~!I__7`D^X9vv}K5 zo`!`;&-mWhURHDvrZz^nq1|cy=O6)*KHz@oc8Ev&lgj10x;LCE|f`vZ1!WpjW$O+0%;q z3tWPrmPYzu7okX~kuxs$BSO7d=I2n1gMOE~rT-n66$!5OM+r)wYM<+;Z-d?j<5GE5 zQ02&E-&Z2$toMm6F;v8a$Wy=IIe+khfOKv%vQo9JCgTwo4z!Z9vtbAo3Znk)&X6}O ztQd?=t?UQ#C;R*J()C{cdcNTC=X=jszMyaB&QOTW^Ub#4JJpF=1UEMY>Nx*@ZN6AX zAqo<7j$iNfu)lj=6Z)s#`!p3=X*vHl=kk_{@s@l!N~gV>4+dm@E$=( z&Tl{;&|r;2&cKeO&#{o~e&fzgT_!q}D=H;7IRz|*wVsQ zEYAAg*7k(>*eVvh#v_U4qFgZRaPCipC zzo|VkXP0u)DRH!#1u>WoWhJTcMfc?qio{fzkNf`s4s=TGlfOw8xjDBu5L)5A2XJ9x z0YqW8`aKp6^B_7tEfq{x_D^!|1MS5N_A zZMDzkZqTzhw1&^i=;|pT&rJfHI_oJp$xJL#t|T+#(^eTpyovLy(HWWOa^F$r;Ox&| zbl3kobtdArcszh7S{ z8RZq?$&k$~6G*1|ifoHw=W_`P5o?)oa;Az&DKev8F=iSldCPqG4algv7s}%O%@YeD zJ1xMMj=KyU!c|>|Ip2)9K)Km&Pw=4RVVf;1o1yJhJ5{BdCfI;+S@87OoyokGAR2=f zVBSK@kLW4ABag%MIIeMfMN}OwdPC)H{8KHOCyk#gfnOQErw3(gY*v#vcY=GtWJ|dD z?rMPT)5x$K=kO|0$hl8EVEef?2?^dM8J@R2#LacpB-Q&$@fjKc!*uP=hN$QY&Ntk1 zFkU(fTfh&`#4#v2fk?17P2pMLSf{ObN9O_0cMZunnq%?f=nT0NkIiwhqu-(ksR}${ zxY(`I%KsMvf5cAB%*Zs#&CH#~)bP!n`WcQDKA%I!`oM(0dHE&Ja}NsQrOts;y$65x zYEP|^d)bBFa6L!bIRDuD_|NvT3yZl00A~qW`yQOX=Dd3zlQtFs_|?-tyBZcjy3zLh z&4*GruH#TNO9Q>C?t|~zrR`EoTeNnnySa-t#6RHe7j}=ceRhO(UXT%<3(S6?3=h^t zm(Spf;|SM9zcqehSk-U1j<)F%E-+uqFU|Gg;~#DR?p*+B3To!<+!jV;$oxpknp+k4 zbll(3H^4M6ZNx_mKVhtyZ50%NBpA53iAX2d-oo6zrC`NAY2sEQ(PMNiJ>0t{F^<5-X%nozJaVpZWxRH~5MQaMhRCUAVYeI5 zFh^ZRJKR=|sngR(gRD;x77RxCAJX0_NR(iW)@<80cH6eS+qP}nwr$(CwcECB+uhUW z+?gBqPRzW_JY^*+vMQ=7^3SZbzHGNQdyOJ3CyP?-QxJe^cWFEWVeUMdKu4=l$<;@w zTf`zwofMZPa_^&aKXX4>U}E9>5bFO_YK!w z`$nx$zUm#SrTlS;6Gkt2hb|70ZcB< z=sG^hX{tL!WX}x7E%CJ5VO$J$judxT7rM}BY*H(MM)ed7((0^7bu!ZWv&52JM#D2D z+`8DLwOh9#vciJ>PYskcS+knm?|>>ZbgPDubm8<`B@o>sGLilpoMPwv-BP!_%gG0t zTgCHefsdZZ#e=T5jNPh=`+-P+Jzjz;F4WU-`UWPzl`HvY+ zHzxdymo@=- zXfr6rQEmO!Q;FOe=xG@ooWMvWUH5JAgt$Vi0q7e7r`D%!y`f$zV1vneqV) zDVp$ch_2!a`tWXg9Ou)Yy1WmDjuQteC%WBA=hSqSbDcibGhUn^K0@p)td2;etcj;t z9Rxe4GzeA8P;&(OOmUI@-~G)|(}-<1x=&#{NSgP^Y4nPMwML*KqOS3Z&xExLnNhb| zJcL1WTxL1~d22id0Rr{W9kwb`Z>L)f=$)HTVYl-=$vV<5WfK^V$uep%f!qjJsy!if z%R2{}BwmoV^FQAFR*0lNLLT~Hv=T0sbx3z_ks(w+GTLSOihXfn%wso3Iz~f$5(fXr zdpUb7;0$bLRBibW3^)`NY!FatkJ$7;hTW`^)vUt?=Cwkr6_y!JV%rZ%aW5zu#|awT zQtc?d<_xBZKsG65I@9K(D-}b5;3;C%Us9%?P_2e}Awg_b;lxl9x zkPAq#fiTsA@9KhvdksP2tNM`9!3#+3R4g=ePJb&p%=jeDsI^k)A-SmY>+L?mUhI)T zZ8!XR1+6LqY%j@)pFO~6zrzeHQB6bcAC<3Ds(f;@>yiP?HDV&Y1>#Vw7RT~JYW$q zwTo%fi8Av$_ETZ59kX{RREtc9T5xuby=Ex@NnaA(^uJqcGO11&TUs?+ z8kAj){uolYu)=|@N+_i9q7&kFAtjKkFhLybshaui0JUZWShA+T^1nT}Zj+3)MbmV# zXy>2I3fctkb98k2p9*Wk3X8a!`@Ao2x)bukY6FjewWC@vnVtB%gGr9~yJIy;o;149 z^>_N0*n@!|J5V*D?Y3y>3?X7EKFo6CY#t;LxrOrGg$c!=)yKmQ(UnZ2MJ>Yl9wLU~ z_V1^5-DyFX%7T^3Iz7i@54qzYeGq)SY7X=IyhZsFlsoDn_QO#JBny~uKjh)Hi0Fl? zHdo&FD7m1vG&%2v@;v~rxwys~vIP{KxYo_qyI+QULFDgSh;C}p*wk=4V#^TtSrqDw z%UeTumQEM>KatI=>q#usdX`~AJg_fLg3+8%Qhvl&OQ|ok@>kZ!7VvDA&QhA6yX9?RwBFX;o?zs6 zn$l@**sS(@o^8kPg8y@67tv9j2ZA>L=`@}1oPEUVcZaf-3%XvpP+0Rt;lXRKN$w@A zJMhglcD=j$_s%iUCKj3;?7oJJ)|-<(S~i+VzdZKr%~|=L&~_5SV>^QT8psK^g3YQ> z3_`<01k)mGI(31{fg#&A+R&H2ERwY*snC`KS!+*cSsKELGQ zQo$(NAhhW_g|9qkzA*hK_$N>GZy;kX$l!y({8jT(bX#F*&Ls4tsX4F0;}mjS|k<%(PpHFP>-Crv~0CJZm)D+Lnuq;nkc&GvUZg zu_jkBJU;1PziL~|{g$Wdoh@wEzU5Z-0>DvG(#IL0!<1Q0zff@6z8wfm*b&G#yD+?h z4Ujsm^?xkHr^J_ct*6DP;-{{o*5q4A0+@Fmro9(M8S)oG&^$XVnC?iNf)LRWnbmeO zw1VKQf;pvCp(7Ca6^lg+ zUMqkjA=;c<<`)xqwo$N(7J^4a41coU8|43IJT&v6 z?{LSE=O2S#lnwt2K++fp0oBf?wHH>9;R2;*L+40}^3K318cze^cHVX%PY;ON;mVXn zJ|(_m#)H93Cm0Q85X!b$8PztHUZ#fHbaB8^C&fiHJB+$h)mFAlCT~y_2y{99Bn|I8 zUQ^UMDX9kZ+nG#FUF2EtSMAuAy15>EqWr40?nv`?!Txg+Xv~CLp%Pc7>GcsbC}0Onw(_k*_XP93h*g{|a|?;3{NT>H2LR*QSx@*lsfg%6bgy zgfBNQ+zk+MHQVtpy}6s?i+AwSrq#L(v>|qpP!jr^DlgxF`%7PeQ6(35w{J!apzX#8 zYX_M+7tZu&(`;(2N-vWZqp6g$gu0YeVo~FsRbVvp zT_=QJ-l%awSU$#Ct!>pV2z}pcg;w!{JGe?Ib;}C@7C!TC>)w5PvWC+Ub5(H8YKmfq z;trIe$`$j6jva^ob4+z`-(cxhKV`eIg!MD6#)h!0Zr9N7GD-6^D=gp!wvVA-y+oYMG;GjX2QuOa$^KQUt}jRo{tMOeXTcziMjV#}6&C)4(Kk7*-B=R^J}mOe7!GJD!_jk*$ zg|?>KC;DDEMNZ1h$V*`yi}XP65v?<){hzxjXB~n@u~SU6_TIvLa!OdnL^wo?=EZO1 zgemq%CxU<%j01ckKziev=3`m%dB`EXrs1Cvfz3i zZPlh)?0~k$IeLizI32orQA6*;TpP*RlBP~uLvb(&{WL-@`+}L}P|z%Rouo|+S2d0E z+zs-29vkdW+djCnD^u!h@hsFZiPIsRh_roj1utxPK__!5FuP{>%GQFG0lFX+3SB?X zulD_%{0?cemjk!6adrjz%Uc55)#s=8|$^99R|uu1R% zX|r$=wIqg-u0MO*8fER#2Co%Gu(C@N@cLlOsD$=L#ZNVfE!tMDJ5!7{c=r4rZP({W zo6$M76~Oh32WsENcTotX)={DrOdG0NPD`-%`J7U@Q#Exqd;5w9mp32WVQI{9ehV61 z<7f?pnUj)ZkwqsM&H+@g2c^qiXL7)<|Ee}gGF8j$7gKQ4qcMy&{ zj(4YRs&F}3JyovoxJn7@FjxfYl(<0janyTIt42A`e}U-z4Qo4#&drucJVani0l71# z=DU>91uLoA0a{<}TNuL}mu%kt^(`ekJO{OF9Ari7UkJSMnM9fy5t3dCe_qhX1w`x8 zR;m3xiNO3j%zCBR-FC=`t~)jUeh3II$TGBpS%#a#67yCq8L;w;VB z_J>7$@IQTkoH3@VJy3sp4;_C7G{iY4{OGf##awg7Yz(lnrQ_n>9UYwqcF^uNpzLrM ztaZ)LDiB-;t-98fwYharUR|SLQ*g&W7&2>>I!}tgm}(OJ(*upi8;*yen_52dVfa&i zc?P!97-`KKZE6lc=i{xP-0EEE?w?!zaCE7zy+jADWKJ4cl-z8{YPT}TS@MUJv~u$7}_+Z5lkznDk3J4gS4S zNg$1lkww*2&UGL0Jc*zE*b#VHiPuj$_@{{&ZTuW^e_~Np-rcc)n@l>GT0TZyc1)3| zj#Vqz(v!Nz##;3Ny02!LiaO1|iPZW^2I&Ma1(w7RBX!c9S#6UWBH!%ai)t;5O>awtmW-6^~`RGhqD~}A?wG;K= zJlXGgimCW$tKsS9fCKmA$PA1FsVYU0ME)ZkECSOD@MtB-@lH8wH%sED1Xl@4K zYju1=)v@laxAjiU%##N0R}t@^YV;Rz-w!`R=JWr|UsuzgJzRmOU6PxVl?pJ{NO-~= zJqQg^$sFLQ+qfgpsTL!J-kam?qgL8`DL5WAmJuHahu9w)mLg5yK})xIT_#y?WKF2h z@!|M{9{WA7%k#lexq>@w7{i@gCP{MTM=-2H_Nbn=^_~tV@AefI#s21kxgo9S5;B z1ES&?;6le-dtQm##-IYohb96sT*wN7qd6WweKd47E{_dXBV*T(jLMTTp)t!RlaTv9 z7~`Jiq-g0si98UzE=@voAlVt(kj-3h3?~n~)|4oldd{ely5-Y~NsWGI;%>WM`7ay} z^oX{Xgbv-JH5JTe=D9B&YoP>#oe_<)h{WIdz-TMI4ygk{Bi|MBI=^*b@jvN&XD8so ztl!RJ=e0+hl>=c@Lzkmn?R`ob=L8qH>p4#>S{=s)WJ(sX8DW#e70yOVzGfR}V1-X6 zMZnbwM%N3a9o8jr@g=E7o=wxW6{hJF+^(LW_A_OCHYOv4G_}w_{+4A#N=hxKeyLM` z*=QCtK`N!`{5fuNZR2pV1aM=)Ocr8%BDW>5JG;9Z!xaJ&ATm(oN_QtGZmt?L0f@B% z*tI!n==?#vMJ+BXxn|20Dlb^Bg$HCYr9s@qY#Y-fD8@B$+IBgyZpPauidLa=9epFj z6~p}vEG5F*`v=nOem%A2-sfd}*lvXLLfqo(aB3nx9#XZ)fyO7N?tg_=}`offa>s{px!@{*T#p$!W@O|ImH#S9jtg;|Ee{ zOMFT|)w2!3Cu=ljl)98;XV|uw9vVLHIZ$VjS>77k!ny{(=Bh%=K3eaIJO#oCcot*5 zA|~qNvo4^J{kuDu2?iTdHGMEzxnDs0n^<}W`qv4Qhjd}T5-`caLE9VRm~ zZ~xycmDwz&Qc|z#tR8)t1)wYr^XO`)yv zY#gxa*~gFoaA-9I7D%1ztQ=A^I4nmUkJ)N1I`gHkf1ZA?=xm)Xo!ROOB-XQcV2H3Fl^VW5fz@+F{J4My;`_cZbc$Y3Bs^tQh-%P1l^wdS}+eMW|Xg}hy1%aOZu!K zqwHVWMH?*GO`bJtMiH`3XS>M2z4`Ym0Y6F|t}*2R+8`AQodV6)28~~A=K#N}1+PQ_ zpw6MRpsBw$MD=`^@XM@L{`qW|uxqM&3;UMNh%d_)e_|eC>+kEWe#pV@A`&Qnh@_~h zP1pCkCnA<7{ST^oMOo$|g~0D{i9$E`8$IOzCwkZ_f7AOF7ZwbEsc1I22~(v8t9Y=d z`{hhm1R=BQFGI3J=6M51cHCZp?(T{EzUNM$5}TSi7mfJ|j{X{Z(a)I^Lt=}&Q&<_t zG6pF?c621u`rJIjPq*7r?3@UjG+uCUcK~Qs5VEVMa>)RsA&=g%pYf44o~UDRYhL9%N*5dMxoz2WSDIdQi)D_sgo7ldK|cj z(uw1e5L3Wl2lUF7vQQ!L8K%eH-1hD{yQf|M5QoXn-F97N3!IGT^MJ4}N3o;mj&SH~ z7ZoSGbpVtE~6*p?D#(wx|`iFbmvTO6m!9U}cO*x6k0IGNI+AxK|y%JD_Y ziR6zmw%sfD6q;M&D}vpC;%Q0+b<^uUhOJaPpxA!2REA{3rIQ7zZ)$M!HCQI45Z z>BAEUs}nsv$E!;APqqV73_ZIpGKXk&l6K!HOR#2(krR-I+B%s9XwRY=1?<-%qsREW z{_PXA!?d(pkbuPdyU6Da7`pg`71}J*(x%RZAt1rcp!1 z&^Pr=;E~+_e66qpO`KRbw?A}Ef~^@6!9%F5qcBjTg-PG8p&cA$-3+}wf(@h2J$FX1 zfxlY%k2`iC?za)aihdT*x=Y7MCGAJjm8iZYlMJM_Ih7O?Z~Pc9ENwcqKdxgsR?CGT zQDVs%q17sFH7;zvIhWpOGOPg52s-nkOP)hB8wlp+I#R{HOfY$*Q=$tPGOf2b?lU^nx>O4bH)-IFpCZ1!ZGeC}OM+EdnK zbR(+Il8~EUMKXlc2U*#Zeekv0gK5V_GM@FD@+s{UaOW}0{6DKzf#75R-eUppDd5uM zQkNi->BdgJ?tiFou%86E*nGNHYBRXGN(S*aFDknYVQJ2rkkt5vAwU!TJRm zwElz*Mk*{agJ)Ulv|vN3{dy(o2RYIw*cLkmDN(`i>oL{}(>Cx&Oi%&!KmP2(14b6; z^KaYl#qIRLQ)P;iG5E*z6{Qj7CjFB5C`^|Jp>?Y(z3e9LeGF>Ny+z9572(rj-=Yx) zsyC1Kw8ZV%sSRq~X-+abU9d}+!=zt!YZYm$$OA|FJ^uy-B*)0X^Xz-q*0f%UTl8u_sN=84-sxAUJ$Y#Ump=+ocQb zU)EqSBGP$2hV*YZx~HuhIfcybI(SDDswG_w*+eDO<+K@_?ioY6w6t8(W<)I_z)98A z60$?Omj*5&fa(%C&qxeRz?oj9=>Pz+sk#8EWvPSKZHPGgUj;WnN%J2 z@QLrlPdvFIMFq=tl0$knLH7>~BJ~sFHHq2JUq3+^a*O;Bjy*AjNEHnjT4ZhEDU$9R z!?VM2V-e58$VLNu;4nM1_Z*YEDLs`^9z}dB?eD2_CCFtSTGcs3p-SvuFoS~Q+se;B z-J%5qrlP{+t{G*;(%-(M`}fYkoWD-?ZJ2^3%D8!alO~;fU`O2`f(icKhXYnH&G=q- zVxxmdKwyXqs^7}#^Z*7};%?Lq%|BTVIly|W^2qV(ri{t_f_F2g>?N_i-5TEZRrbsB z=u`WpQa%174^2RJHKx<6ENf@6JwN3vtU==-7MOXmQ5yePoJBu1_M{OX`Mh8uk*~Q^ z&WqTAer?~h)o(lgi32ebKi^Hc5T@U!F&UR=2Y$<`s|rw?aN88POu^?spr~+ro}`R6 zJ-bA338Bq`mXm@J4D4>cA1{=i06hBC3Szit8lF{`N`e6`D;X46dZ{k~hxgSm**_wb z{|tFWXM*x!JizUjsAA;ftE^&MxR0!r1cE=JvJ`Ec)KqaB)53%%K0s z16ycTZjfaYgXBQl7R#rFohMdVlRJ2Z`p{!TaQ3!dWNdX1Eg&S9=2TCu8bkJ1n%lnp zZ`9qb2`SvcnQF}aRh@|4vvN7A^foJ4%hnJAi#*?K}R9Fi`bKoO_!8wjpF{|vm@ zQTpA*BkrjXLmNyWBhvCz_(Nni*bfou;_9zB!wxkRC$+hAxOC`*6=Vn^*8x(ooIG%j znebj3l3(svv5qS~dW@+xL{|QkQcgaLu_8Q zAE#}g*9?tn&#S8_%EtYsk!;r^=Ez(3aAlcH=Ot=Zv-#TsQ0+tmd+nz-Fcwxy{s&cH zuck4xnms1GlOj`Fq~9{EKooKjN50&&Ax0_)Sh<#~B&JF)#V9@d} zdmjRlzjtKSoBLB8s*Ui+l(GVE;1+&|<16sU3G!{wv71&Z%?{$_#Fh#V;bMEn$_2Z z<|~d1;gU^zJG6nq)kO-qF8HYu=M}OdOn7q3or_r`{X{8f`r0)+` zJHnXiGW;HIoEEwuF1%zdYF4wbT2>`j%>kP{w9_dlnKouzV=0wZ59wWiDN0OkVI54A1g-F!_ru7>HxHq< zLxTpbOD?d!gUFSSy)A2$#kw?V7?2TT=;R z`wiwhAD^MW`lEk`LY6;=ujs21Unbn#_;=uGhkFL!>0VjWtrWQWRVl7UzP2~0{%9@Q zrJwO;0wxHlvjT%j?*H6HyZ4Mc-jYh7g_-Jp+3w7lLfgy`c2_|5K_zlB!U2V#ZNk@el+%w`ib>)Q+ zC1{>=1jP8MYp6GS=6jR{rLfRg6euZ+lazj7MnT~P^NS+<@OuuvjF!<&Aj$8R3SA^9#d)*m{r)L;vmyRzH7N^9{qz_c^g^Vpo%&Mbs@sd&!OrL8H=k6i)+Jb0!hAJX$0XqU^!Ws2)J1CY9BxPqfLjy|JLzap zwZ<8E_CN-ExH=^JOq!fMJb80Y)HJHE1^1U#*LlBP!PIwO(-hvtHW5Qn9!)^I)C}OY z>qVQeYWJPqGLl3-hO|7#nl}R4 zegjQ6c!^4dac+NP+%m&!5*}iEa7*q*@O|^uVFVQ@9uyxGuhepZUZ8G(35ALPz zK0Ud6eRv)?nT=T37{fjutrhf=wone#z7OR?W9)uS?zR5VsKI4rdBD& zTQpN?o_IsNqI)I}&Or0sC&j2s8=sk^{`TM$@T)KGj==5D16YF%ZXK&rf~9a;3J(0XW*!>jGof(JfX$j{sH@;%dTC> ziY#;P8x}l5FYw7ph#X#VTjnv!D^=xv7F2nsj_bFCRN^gjf3ed4A=)6B4y>AyxTzZ? zI^_n)47a`ro-_?o+1T8&6kHXOf>=D&u9h%NUe_)}G&Rnkyou^Fo_a&saQc<8%Lg=` zd3|%_+D%+vpPXq+?DR600^G-P!irWy+in{-E-7G=FJjLX$kaD19r89-Nj+^KKINon zSeWCHntg#C07k@gnqID>ssjIAW70qdV54jWyrx+o206DQLVm1w5mTP}XZgzSVvWEc=yntEYs<`C0( zIBlLTK_u$z?BB!ecjL^^_+8SnxU+^<0i{n+Zv2Yh30&60)25uisJ(+%j8pp0^=CGi z?feWHjHsqz=F848$W5;@f(OmlcZ67c!kjuc1$bk~=SfhvGT?)E4^kf)Te1ygP(}2e zB`70&NPI!wXRgpJv`5#nb-|3^%_aF&qK_TUP!q{?4e>l{ajMG4OJ&lB>u|Q^b%6T| z#rcN0tnS{{&)oEvIocfY5A6@dd#!Bi+9j)NV3URXgKrUD-YF`g?W^cZi0oV;b!(>X z=oj)cxfDU8Ln21JG5l-o1dj54zv9v6k)t1Q=zE1xj^$ZXWF>d=E-KsKgfBVQG zDDogd^3&j05pwSJsbs4&Z&P`2BuiGkXg6DaPZ%dA@36;+W5a8_rBb>TL#A!5R^enu z?!*;~5ukQBsEOHbBT1CWnOq9zn`Ii$z6+yD`cnE__W6;0Kuw(_ey_1=E6iE*tM}ym zXR&sd0)>2Guk?avcVH1}*b$l*s#rOX_8HWK;8&5qpF#^zv`gKCQ>h5}IsFiB48Ut^ zhgojPTF80**s;RgSBb4dU5TW>KQ_n|W z2+8^ZN>n$IK{f#GSjZ8uTY3l`h4tFTa6mgIL~glQmpD2F378~zld{&B<)$UK$)+62 zdEKxv41M`<&nVHxR4ECiAinQS>Jh)8+4`S(s(9}Z?#%?eo)QK|PlX(e(3#GSq}boZ zQdLaNTVL-tU>%cMU9E2dAVYe=Na@77)Zq?$I8l;A^^@~VZvULl<6jF0TkE4{*lTWh z5O>TE=ZC+ne~(Z6SDh<#tz%f{l}BP}`8?hQks*aK*5O0s!lpaDUlxYy4#!m9J*}af ziq?@7SG2Vo;Qe$en8sUVw|*xRX6PmUambHK6pcFD)E3GU#(`5$mQJ``I?@dIA9tG! zgx61SgktAEj4fLS3JBYYOnJ%`TA9VN{c#2#0Jd)u`xL zyTkkvnd*V(q{~6ZqtStB#ctDSzD4uB!Hct|HL{ZM)+-IGzFFYpJyX+lyND=HK8o`| zA6;=WbK)+gHJ@G%PUG{(r8)>zL{nb3<)c>lfj*fWxKoD`a>eo$F!AlsxKWqX*?!OW z#R$%ond#iJOtSXWHp$2GjBP#3=Xax?uMh^KEBV_R#V> zH!oF#+FgFjuBQoJy@&~7TRneU#$2~c>pQ~%ywOP6sWu6HE|+i%=h1Y(q^-%+DX$LE zlBfw-(`E(fj-{DUXdimkynI*mI-^-Uca4T(Y6xw9NYW!I?{c`Yd++)yPbpt(*V-J& z#HI4ls}Azw4IUEPtL{t92}a-tHIy*9@>|zeyA7Y5DyK9(7JWBS5=sE+k?p)RX~=a4 zB|&szDa5O}Rvcx*)XI#%?QqU6%WL(=*w)jn4@f4CBo0GXak&%-h=6kwHty^?!btR&czRmCzVOLgF8NQ@b zg<}@!tFciyvTuaw(q5HJ!)X+WE86~xxN+S$*(#f<4=9?^&S21x{mPdyeQT!G@)aLh zS=8{8PLEzcltC)sd+*R{9&!(%>X~3HbnV^{=1rO%Vnn{r=co67CkXsJ2hi;Z0{|TK z{Qo2fF#ivN05;n%K_J`lm`~4SdhD;dCK?HcJqj6@QX|C^%g%t!m_0WKH_B3ihfq9L z&+7f;@%M8i(Cn5QMcy2ZyNRo9o9Qytn)Zw$Xr3GZR9_@r?&ZV&aH{UF5%N&-KJ~&X z2kCV(rP7J9lWV>6h)=7g;StLR;@uu4QLlZy2!7^6>{eCcf69E!XH3pKq&*g7&myvl z7pUH4QzecJc#A5XTeJ`y?3-5BPjD=4EMgx^E7xc^R&Be3@ZW$Vk4UF}F2woh ze11C7broQ*`KlW-H(=M&uM|$dY)2jc`8ADr&quz?Bf0qea7D=c_2ebHTw_r$zHoXX z>|QtIi(06(>Q*;S-GDu1)7FZ=;v`uMs7l>fqBh>qGKoApM{d`txn7qC=u5%J)GC}oz=+d2EVO5eu5tgMx%hxA6Kr978*aXs`{vO2} zUp?&;g_J`E1B;i_sOO41IY&Coyl4jrNZSP?Yk?gMpw&*pTByPAw2rd zn=N2mP-`MLr6L!N)+JcI0{TX`_9HuORv8nzb!hF0gY^Dl#@!XhsUMovRmc}Yj1jXP zUAWK~lm+XVZHJTioF~+aOMGy8$c;Hq_q`f(mg##48~nYB*G04!TWF6lV#H1=@4FaT z#veg%1D`-1^}7=*!s9g8-0mZ0zTl`{+97NV@t`TdWKnu;f`01bpuL^wPop=|Q^6tb z;HBsoz-*CGK zbHMni;930FX|A**!weS)fjoA#7C}cdc2Y>P? z@D6a+^l_zFaU>J$Z$<%na!?098LCZ6&dV2`NX{WE=)j5Nl6H1r=Y z!0sg~pTLR$z_4idX!`y#=8oeJ*}exZ&W@KGn_$MiTHN9$8O=;8klC}XPl^ebw%(K% za^OmUaoHbnfa&guHh*K@5AOi`yE-X_q(}u8{z*PuEGkXxJx0KNB~to-0R*uB7l1&^ z{|A6T>177%(S?;j<~>}xQ~^OAoFOA&-fr%->Oy8Gg}SeX?R=+rOWIWHqB`=rrnL&i z(|1*FPR%edv9F)E^cKaL*j<~nN$c4qI#8Hz0Uk*wS{rnPBx2wmdltx7;n-SG21k*I zpzl!y`pi zyanCS%I?&e(ffP8g|*}1Cl>}opIr0Fceqnr8}}igkWEkT_II7v`I@&!4bQBXuHBLT zKv{qMH^-K=g%NZ%-|fbP0{NLaCdyP7d8%#XIU9pcKR(vnYjylSipm}QM7|$GTicrz zz6s_TbP8kpZD)WYE*4F@;2@@um#X|*%W>)SWZg)-jc<>}o@U`j+={`9K ziLAgH;3^YW-4I!1UqtlFy5I8TQkpJ!8Vh+EHO5tMDN_k8f44Krh+@iBa~?MqArpRG zmtTe2LIMvD`xAU!q&M)IBh|G&Xkkqwg~P&@j)>W+0rN5;cC+5Tv&$0)U%BBR9osq* zY07zm%hNGSP_?>=%c`A+y`#D!%2ltcEXcWA3EpFzrd_Ms+Vd^BzHS_paLkatS&z=M z9wf=|O|R_GZ=+w3@*YV9Y5Wl5oRbMETq+pSqzg~kvDF~>Zttm&3nNDnp6L7lBht8f z=1`&%V9{VaSc-r1Cg}>^_44-5ptNwAW!9Nrsp?jCpG`nn8`U{iJoXm)-3i`zXH1!( z6n0Fu(Hb{k`kxxpCk!Mu@87J@<`BMh^_ehTV`0!AWR2eSGp0&Y9a%g03W*dOit5L; zpIx`B=Lx;uL&@l^=3`@fwtp@|r2im++%2p`7UA~hBfg)U%-A!7^7;<*+u_?b5nK~p zpZIWo1kb>&R==_nfep6dgXT_z(DekB*PXmH+V&7O`A@P#>DM0oV|iO_t>%VGm+B~d zfW&SxdHle{7W3+oUdx(t5;(0T)_ed+9-vFX=DjA;X7x?1&V@vzPX{!-(&T(Dh`%%* zA5pV%fg@Evb#-0P)zbo^T!6qPMn`54DVicJzej`^+M<4(qYB*gmFyMRz{>qaYBiw%-kKrPwLO>yJ%(2 zl&Ro>-=NL_o~-E{8Y_Tm(CJ%6+?<=ZUtBiZ*h8$7_^;#oTl?D@D5VI9EK&P@82u1_ zAN-w1ilFYsx3RG|ySa?Ny!#Qn?&*-t^L;}R8cfL+p}qq0c8;C z=iQz97d)^i^|NuA4o?5`Y-^=&?JefXGv^%mG)~q-@BuIO@o~EgT@sd-VKBZetNJ?_ zXD%^RPB66_EWbQ?I40AudbaK$KMF+#{1c0;q=>H3JGZNzq|3+0i#@y_Hn0OZ7LZeu zuT?-wKAuSRx5iiEmBKNQIJ}P(UxnIZeY1CQHBP3Z6h^EZmhTl}S+6oH9yQ@iOS=>> z8T3_-2>SvBSPk-^Ajyq4Ws*O4>f})0ffU=zTfieuIrBJsSx0_07~@~`p!L?SGFkY^ zu{ptJAS-_z-=&7xmNQc`Dfn^HhZJZ25Nt0TWAB=^?0nT|q?4k)KA9>$^%^fV57O~7 zjm)ZL#{QupnOyeaIO6-1f6`)PD2FwaW_aO*;z>;ZJXLJC*jRh|T6^L{?gXTWQAkO?kqDEg?i=IaD{AVEXI5%>qtfBWS9DkTj z;^JE8QP3rRC*_>%qEobq&_AL@ynxMm(k;iSKkvhtnDTPx$ls|RHhQM`vVHdmZFQ)B z1@0cRXm5MVx&N#8bryP+^n8zr`tu(ATCO&Q$o>F>VZZVgUTR}EPdNj>pbYk4a?yRy zvpiwLHo?W}gT7U-mMy4MRMNh=Er%>LJ*s4+2VraU-d^CRpFv@ud;?7V=U80E82mPL zr5$rLSG8$z)PdpW(Ud}U;L`fFq2ja`m!IkV{`ii+pag~8kNHs<(t&T@g4`W2gh+Uh zQ`ECRK}rE!v}g4xRhMuC6zVrFrCMhC7N_z%=rU-gGe62{cphHPBHShS35v=#Z_(pW zo>|%{s_hHa-x=wLd}nzfSe3<9nTW?P!yoCnuF&PH-nu7|n#!!pt1wH&rBKqdDJ-O} zn4i&gha&utcd@$_#WSmG@AVqK@M#7i6YTBC8W_THt$4FaZ>f>^B^0~_{t^mk5Rq(4 zGHJ*V_$8JdbTH(Ps+K~cO9pc4Q$CFEj@{ei;Hh>7XcXYrdU|ssh4~mYXnv<@omp~# zO$&I#2U}jsI6;1~h8zIBKe)Sycy@!jKf6(_P6T#t^lNeAIk|1VoA2kE&GU^Vp6S*x z=HRWZD;|(jetcF<@XcqG5T$!}bFC?%l0nO=D0|p~GK99l#-no#C^QSVwoST(D-UN= z>k)FNvz*@=Vw8w*WpLoSEDL*~2Px8^YZ8x+w=C84znYF0C1M;#R2&HOZ-`n5OrO81 zD{;8;_dt|mjgWiHZ5~`AHe&O`DVrGbpe{D;s3ya4k zdJ`lo)o=+-q|K>Hr{&}lTGbB*5usptIsGw!9KA0U3F=Vc(FbZly!t?NzEnWMZbi+w2~j4$oxUPd zO!|jD50@Q!%TxF`nm)&LCvwlt-V&83`pQX|uS_(+;Ant-X#zPlz*K1HHvbDS2o{=v z_NAdaH*?otx(9Df(PjHhLR0u&E#HK2X?%a-2Us18R^CfW6AQEXq@d2H?TtUP$tXuK zR~Z#~2{}0eI!$@B9?ji5t3q96?qTTiIy-6|xGY0NOvdpargvag#nv;LQ2l@N|1s_acOMD^tU{ijxDt+2+lkuE-&j+gJ zKHj>AM8MbN?+5|bex!u;3B-e*GmWuLzyUH&j zJvo_I1Z_S$Q%VHon|gFAKU-9wnUbJUmdZ?#<-7H@gZp%ptM%_4sx#Qt_0zDtN{l_g z+dOCkT5`o9TWE?skXU>_U^hI9x~z-d9@H6R*f3y@v5K$5+VS@v40ZY!yV<5|{Obw# z7;HHrZl%r(?PfOt!HnInI|-dNs0?b<6>i{z{x=!xKZ^@$t(jIqh=cIXJTa608e=tv3)(-=JW{BuLg$>;8N?JpKeK8KDuf+Rx1AHGgeTJR4SXhpDYyp?K<} zj!(Xf((Nh+RRtP33kia532(9!KO%d17IsLD>*DBv;QF|MkMa3N%SU#bcMqP0JU(+W zCJCC~v(jK?y&H{`o-oNmB<`ZILAYp(a@1pqA;ayoxB8_O!C5=4lj%6Y(O)#V`vGWM z{|BM)eWZ$&t@>z+6iq(!Wx*MWk&SriImwz^L{hCvmb5W)Nx9`b@Ba2(SvbHg#K9|B zP|w3o^%m3@O3!QW1ESLK%k(1;PslSM#v`QfEf@m-#oVQq!C+ytxi7yIpC1Gtr z#{SBj4cUDmS=;^vKJad5pU(abEr@|Ys8J|2@P9s)Nvr(Vi5xo}#0M0fa2x(sF8VgR zZ`4zS_zL$c^4;-=a(B`-C{06* z_>Aa{COBTa_(gKb8z##mP6UJLvhcc7u# zMOqI)sznEP&G1#m8TxE0w%8w1Fv35=DIfh&5#o1nr&e8uPM8U`Re?k;uo-h6v zh{DG&L_rsI_nub&zYqob&Ho!jK{erphAlfx`X3$-KEBc{h8(WKtX_(kb@BnYTQU!) zf1u5pc};#x!>o~cnVy{#ar-MfP-$KisUD{L9nB|r$ML_?>}sm#>Kp2$#4KC_dr*4E5#wa)Iv zdSrvCBE&D8$znaCc9OV`Y_h)?&A79R6vl)s&GEM4v612dlkT?yg=NCiZ6K=bRrR^PDQJ@9VuzV-Y)_$tre{iN0Y0h4^B zBaxnRkZ|;g)+Q2B%Sd}N*BD<*_@SnVmk?wO<F)KUKVQL-ROn8~}c+ zlUxtz0R4vuP^baMeSikjPL9Kn@u@W(Zl~CjqC3k<9=X{cC3b^n&}-3Jy(iReRj+WH z)JqEB(L2yOsfj2oFLVD(o1g@7&K8Tvo=!T4_7zw85X(|_9sZbv}-U?nka z%I0^#rW^uYD=x1xB_>?skF#S}M7Tv3xba0+NfGMh5G2Zneg4+v{2lsqV&buy#$fq^ zekfeM--zaLig@<}-9u1_R(24eGLEUhJs6xb%K!&rHRo00ZkW|B!nRyxk1BT*UOwMEHfdU4dB&DqUr=O>qt1t^q|2+ZJ(5sr80zK(+k{Hz1ONFcJky zh{clXN+%#XmR|`~ZcbRINUKTbx!(!9&1N$4A#p(TvDrNr_3c3w328DWD zD|g9D#aUik_sO7Uqbbdx!Z2$Dj6-qjvXQov(Tnor&Fy^8C;n$Sw1Fkr3LS~iwt`}+QJ2}aJpwvdl zo1mO3jO9(exRFHf{X;0FjMBD&cgGxRs;8EOKw!yjG5GCAHjN5&;b28_)WVT95IsKP!y zTDWBCq62bnu{m%&sDAu^*FI~pBLkzK!PLMr@Hr)$uMcBxX4THPSpy%4H~1SH!tRB& zP=&xao{*1O>2$1;*ivtUh-3IF!m7_{X5XyKX(rUg>`V2A+_huA&9A=T_I0=#$hMj^ zESIq1dHxp!=qK(O zT|&91n@xz!**vS3;~1RKza{aOO(CDp<7nfU4_65~gd^Sh21<2xvVIeFc6x#0UcNvq zsWJpnom|>{Vzn_Yj&{FHniV}GB!=wgNBYqyGC>m#9Ce{nTNGuOv5neg_6QFLE{Dad z!jJD6zga11iCi=mCK3phe8`>{W0zexNP}Aufy;PWp`o&DQ_L|ufm`{3po+evq<2oQ zim)WLW-@*J%T}C(mp1jVf??a&mW~?G45|OkfzRaWVyqoNQ6jltPylBW2zNAN{aT-T z;0W0qIrXt^fNUehKmXuFQUBwx%nhmLjNXqct}IH3e#TG*`a&;{^d5N$YCy{U@VqDa z90|z?U5G1+ukE`j<&Z~JjZ#>_O@&J%?S+7EU_*$%IxbsCE;so%{|4>?pn?E>qtlQ2 z-xY)bw|^@LWaKpeO+k1G0V)W)K{EvZRuGCWOr>%@vw#YM$G;SW>d+rh7J{%5N1?@Q zc2#S@m|f0MSoyM<>S#+F%rEe)O4E|qKTvwy#-A!EYkp|orbmKXtD45R^(}r(JT!>* z6|BOsZphN1<5yOLz(4t7iDbo(VF1f@BN1Jp(xQ4rF%5o5;;8Eo<2Nh$DmAre^&Pni zAP~bWb1iM#H%xM1gF39LdQ@#Dfb&0_<2MH7&ZrZAdo&s7aa0?FxaQ!r34owt7{R0l zU03({z3o7^3aJoscf&2Nxa1pFQ?9+**slM(#vH7>bynJ}RTW0tKK#KhH3#*+D7nuW zAD3?!uLk2lUzna;LaiNRQkm3v0=}<(H`xLkG#$^Bb&qRD&rPY{Y#ligx?S*;&HwBL zj#^{FQ469+^^F|=KE7)z(X}5xXY4^G5AE840oSIwg&M*iigC9~DnYNXc)I-Vj_9g< zZ?}d;N5P8bfF(2;>&UH9jHsH;_a<%0oL-GWA25=#HVJ`PevKh<)H8b7Fg5|V4+tm2{cdkA z`o%APX;TC4?Y#~5p85kgqx|D3@>r!=0c2twOkXTyDx~KXuIrTq_9Gz%v7`f&n#}O( zoGU_|&9=*_psbjZOi5Gddql8MchdM z*28El6($YbQGD>mGgW5_aU|mE?=n_BcK6x$J@teF72y}z@7+U(xW-yFDXhf5DB|?C zEN+XQq#`rM{LM8fGo;5C zA_boOo+@i%y2B}{I{)M}P>76y|7p=Hz{<)xXW5*n+@4&wjfuXWW*vUPP(Emhq+ zt+}(j?Q@DxLCXOrvTKM{ep4#EUb`$rc{j^0HJ$JWB<=0Mah9yd*sAQ}Er>Qn$YSI% z4_p(hjyOdQ8@|2I5xcbsAGvO1!Q20VKNid{j`jsbUn}r9s`2R;{`864+H>8|g|{cF zk;@_kZnboJ@E|x_@T%3*9)Y+GoZfdn))JK5g?K?|uU2O}6E2s4=A8M*_mZuMvOUibeXO~8VC(4O(3QY)4u@C=wPXbuaOlCp4L;|7 zT%0|jE3hnlW0Tx!)l_y~=WAaFnQq6Gf?)X9$c8`XBNfc?W`j6!I%2oG!z5@Ze~7+H z%^}zTBd45w<8O4_#SCuYf_sBcB>^KOu+ydq3{74-1JgsEZP?qZNf+r%$8O62hR)|v z4n16GR??gkOW93DuBNp&i`H$b(L0+Ef>-IB1>J8l3X3)urV|*tKfZjLls}wKhcrz> zyhNC#{TG4DT=@!39?p2!V`+Gi7JV-oMXT>5c0u>)+xfne*o}+1lpOJ`={}dEWhc_z z170K?k_g;9a^Ca@Z@&A*^c0~+tGvjM%K`wQ!q;({pxse;|TlMR9HxcJ3clc2DvzO(Pps(hUtd9&NLI;Bl| z>w-`)bA^H54<7oqlj!pCExZL`h!y z_4YPtY9q=Y+O3rywr~NT2XWV4htmBSZqmdJfGfJ=aRoXF<_`aH64*NaA17f}9_S>b z7q|;D1#Mvo>*D1!wWv;WK=Y`|T|+?L)TR(joy zmLTgIY=W)Vb;^}q0xbl_E-8`q%S7L(U5^BrrF^*pj2OA&1w(@p+ow}hz+6XH(E!!G zcr&k$BEWA)w2D9byQCCFB*2Q!hgXV%$6ew)q)PwGo`Ax?TvLZw&vBRo9828{zOgCr z+a5VCu~!qyEI;dXxaPtoK3>;^X59v=idLMiv6hWMf1RT}VO6TAz&+v46X&jPx;jA( zK)kMehyA-$lTOy}Q&DRV3ao8Rp(#x$m)cc>73?;E>QpYXmff!=7JC8euMvBcc>2LG zg4iGeDAoF#wHyri6MYu&isjOPO00DK!`&(!pkH9d$at>(ZpW1#W8lCTN@vQ5xW~J?p{}A^q*55&B~on^j~29IBI(ysCKzSJ&DV|jFd4O6Yhl0q2~S?92Mv-A5u0Ik#%?K z2PiK=>Zk4UNzrF(;p)N-5}>_JVPIe>X_ai`n39E4xdz5XoHZx3N9|P0nWlynQuSrJ zP&*c7j_Xs_TZj^*%0zlinj7o?%tS!jL`A{4<-I5l_XJh{1{G{Ac&Yxt|0%fkfu(65t)aZ#vxf*l7CC^lDx;Sk5>sGnveEDG~8dciV{Qx|d{<-_5 z|N52eE<9Ofusn8h(b*S?591??;(6BStQf8%oP7*ck|GVZpBNw+;*6hotuD_FEj7UH-mLEzssJ-Jp-<9DnoRcze@=txDCUn`fX>u@N=b}=qu6~! zsN)h7%VT{t(#FB5BLGx>cZ9+a$!#<8UfLNaYmNKup_-YphWkB}_NHPJ% z#Xh<8u!c=yfq!6>_mIsmvI!2n-GfT?U1h;Zu})Kt1SQ*Af6P?#U!%+k{^#nZD`o{_ zX^AKJS!JjA(#C764n)o$#34>i5H$4UyTO=5cgIxkD9GZK~RA~ ze)k1iD@K$KyR-tU5)kRY%JQOEL|VtL`c4!}8n&x~2bREaAbsSz>wZv<2(CrdwjCWq zIAOtXOhh%7_+c`_FAu0_5k6$u5xpo)`gv2bA-1B3tKt?}9&EolRwn0xQw2wZ$x2(y5|F-hmmXEhlL%_#@$Cyp(1-LX`%4@>{Bjhu{$L@@t z$tiH_b+WPX-Nw4t>D0hWK%cW6m>}QeY18tNlg~NG3FUjpm4aXX^#CEKh}sNPay%0p zCT1AcLqs%s6fyfA-4HhYFt`ytlT7%!u{Q zU@$Nk0mhW~y=B9=@C6vOz;8mrl-kBYw6Rduf=S$@M3he3Q17% zytxEg&BS5$eON;>CT7P@Y^A+2QUg_K)VnSJ+b%~qP zf;K3mV1@3PzUmcUB6AOjUekj9fe~USaRFX0ksjk)`F1p4^_nk4`2p4!6jm5ty<#`u z@BFAgTMFy~x6j2WfQo=#dG};U1lVF@V=d^?-`@viOo04anAMR72Xsx$`ZN!B#N`qv z9Ccdpn}Sk=IQNJl{v54dW&T_u;)l^8%5YJa`IHS|O2O87?PchaDkVMQ=gWMON+eue z@0pob1QD?+$(fl-GF<={m{TSg_4wNX?89M@$B0PTpa32bL^C<)( zl#bnt9~5HEG%|a$EhHjuXw2;s94-Qs2E%rAD3swBZ3q}iTEZcGSKZbqkQEp zKNaebAB>e}KNLE_e`t>nMfdYU%_FG~z0f;e^@oDm4Fx|_N4*qP=#7#zldMn;C7Q4N zAA@L z=5$h>!KnW5f>MDte>0ZB>h1#J=RZ;Ua%&ISN2p0)$5DpKZ1z1A&9R)lZfIVbm88^h z;|||mvx7y$c49)=z*|C106Gq5xkY<;`3Ja#$sAaY2<}^9M&3M1&mU^QOg3fm=kYI# z%3g`_tpF+Aj(D};3UbM&yiEqJJneDW@h6L%xfmJG<13G(;Hp7(8EDV3>T&S2Ih4Qb z6`f%-{Km{kYAvtD#?SdamYXAJ=|`{$Q+D_&afJ!cfluVJQc&Qu`F#nUeb1^>H@A`k z4eQW0`A{&YW9~Ugj|&UqE)3)`tB(RFoLvPX zclH2E2BI7Xz-vLbYd*le_3YGz$eE5=(M6s>A)Wa8WcGzQI* zn2|wHczO!I(p=w|0Er*&Yl}60F6oli4@<0a7Ue}WxOQ(L`~1DKpcrC^y_noNr$RCm zX_6YVh0ZYv6AI4}xjRLMNxsc2FMjsK0TsV>#d`gDC@r>>W#C}i0=zfdRdq&|Nc-s$ z+w%6pG5&>{hv|E9wu}2;*p6eKkjZmW#bKKLRfZz8nSohN9WvzFMcIFFYk11LYQAHs zX8|=tMp~L3w|0zGtZVPCA1&#br+~E`1Hjytl5gVF6lWjsG?S2RcL3C|3gDv4;Oq9^ z3bkD6&=_6T?AQ+I?E5i zAPjM>q@{?2-2ob*y^%zE`#B_H6-mAJF@iW$Pft{1y#m?dr(;swo)i-*o%q@htpr!V z)NDINyAheW2Z=123VQwPqO54EF2rt7bK9)1)J3*C_C*(w!Gm<~-V%G&WSMzPD*<$; zoYzEOTCpKqIO4ize+h!qT$eWDOxy128jwez+DXJbIKyAC2QQnYOM&*EfZQm(4Y3d3 zn!h$!-6IUP`GRN>teqin`jq$Tnk{1Jf!iqYF<$DFT+Kk_E1%)NUg9sW^Vyz%AFO>T z@&!u>P%U_g?m47-;1F_IdTgNJwdHT>ZP>dwaQl1U-pJ9x^1E<1@kV(p!~BPhSz0;e zZgXT{sm6;9ckMnq1SDpvyMQR@o;BSHKEnY1>WZd^cU$$%J()tdgsw|Y(^Qe`OvO)6 z1YQUJAG}~yrpqDNQ6}~$PAe^q%!>hy;SIIg*k?c!6)_+O7tXPIUruSmx5`uzMnujh!Nsfq9!%k<}pBr){J?Z>R3-cNZUUowTT1bAV zJFXA=dki zM2)TU(uQA8Qf({lj$V+t5+tj(Mo#mdN>oBN65c(LJo&|_Na=>c>2^YF5lZf&;5>+w zZ;Yzpbfs5luBb3urUviRyT|3r>H6JVyAXa{JiXqd4Kg3BHDi;kO|X4?u%QZo+$I)D zeP6al34mF0W(Q$gO$uCz#Gd zuqn+g6bBhJ;81PK>hr+=P;bgA@Zi@kkp!O8VcawS9$nEv@z8p{(XmJ8y^wIFGe%gg zX2s4HL zV#OZ!%R1Q-`g`pSkfF(Qu>c0f>lQGW{R9aq&^o`F&8!^T@MFHszLi|C4iGX*mB z4bi_XYZ#4i3R&qGsQZenCfpB(Xi{z+F*@heHADb1I1!M^k2r!N23CG%GC1O@Q&vT^ zZWzl84l1Q5wz0IWEugF}1QRjhIk74p`-&FkIbwTrETyvqBeoDw7mMw0$r4ABUChvz zpZg_j;g1WMP4_c8!W|xjdYonp?dTfNmaJX#z=rt+KCUg6_(fM;LT!zaW?Ys>jJ>hq zU#hADPZx=eQ3$}Dhhvo_yc_W?_O)9ky|^~`TFZtuCuP5*g=rwVigLCrfAL%?FE}*1@e-wG2&t#ufqwkIVE09_CC4 z^Vb!TUE`Hn6AF8Kt40@R-2yQ)zWH!=-I*PPHhCs+81E&88*HtC*yZgUz?@}Tzkx;a zq^)nzw|Iq&f+<9bLF;52moFX0r6nh?8!xiM?4S#m*1=+T@5N}R(09wmZ1c5T z$wSS7#-6!@voGb2(H~CIA`+`G*GjS?H&Y1rs`VXgfYC{3JYRk#9vXoQO`MWmRFxkbrw(iQ#mZa zlGBtwCBRaDKH)N5>eh;xH%;6?u6;r8rpnlcbTIc8+VG{p@*fbT;!e(Og0i(!frXD_ zX^}<#!Jqpi)HEVs+B`&fh`#OTxXpgt!&onpCWuCc>9X&}zo*fjvLPiC~qL{kjiKVFBJ4wi}USBu|izd>@GWf<7# z0|)qCzPCaZjw`@Y*>-RHgi3LN;)Cjh&$aziaaY}7%Zn#k%`KoOBs`KLM26owakqHm z3}e_k=2I-`%nBh>I(%fFyF;K= zc_D#(9_j{>Qn5i)#y_WYdwY*T7C^Wu>U`Z8vcr~L>`#pF9$>kB#TLpd$aejh*;kB~ z`zwz&Gaga$76xccFCp{9_hVXkMkc!nme&;)D1yJnU(&~!FvCtgUzon9fMXy}a0aWk zr)nnisH+pj*EYRU

g6tx9k!M)2Pfjz(b4rDDVQIp=kg&tKaYf}L{9qJ6~S}fL{xj(Zp!+mL9W>>k` zKR~q#Js5B^qMx87?*Boj@k$@8B|On9k8sv@Havy%LabNFdx$mSFb;{E7U+!Q?Q`bL z+|q4$iqC-NpsP5(*rtx_Y%u>Iw`!RzVlz23gd`*4oAHg8vsi}8(g>LZO+W4s z%KRrYspn)G0?kGG>TS(sGO#Rl#-=nfQ^~Nx5n#);$XCVZyMv9b_Vse~=)Pg&_<+8I z#R?zPbDPZb{k6V&p|~8zV<9fPhUE|`IX*#mVW!HXK0{s!x~5fW>qiP%_EQ?O6&~<1 z+7uu#!BvzFmFd20Y(opY#(l&jr)C_pLxOc`};t1q<88<696p^Z<^tVd;VPQm5`(5);(dUr&9T2vi7X##{Q80Zx

a*3H4kN5`;P)V;tSeUoYk-LLnloo>jFz4)YOh2 zB8V8)bpNI@2=dv{euVkQ{g>r;29&f;9so!w_s0PBr~Vm#PuR#!D;iIzO2D>^4!x)k z>>YFY5opIDoG(e$%*V~298Ue8IyceFD;(n(?G)AtW%EDG70Oo*K0;rS+!FaEL%IJT zL8(gb85t*fa;9f>|L)U!ds*Xt8d|~X*Kz}UcNT6Z?a+X6Gwp_dnALxF^<#)u;Z2R7 zbOvCws($e;^L(9v8x=#`3pEiY9AVJcYKs*Y49mWi@%dP)>+YJ_o1M?co<)4a7AnS? zpG0*)jWRfvax-i*zuah87QaI%Cz98E1+;)1h)c?eH5l<&p%}89-4KSW^0cM7;EJLNwfIDw+ZCVPf zN=t#eJ=Pr0rzv)DV?wBul;0173oK{B)l0W#9^nwPWlo>uJ^;2}Ui;*17eBsHI)dZ> zlnv-Dw%;CVvuIK$#|U)cQez@hT1w+GN}5*a#+p4gxs?}tq~$$PMuCy7-{jOAs%oL& z8^4$-1N4_^fsK}0IZoKL<>OYs`S2VV+^Cv+xXx((`!^k8Fvt;oRs7y~J1Pp-_}vAn z(QLo$i0-dMtXB={9hGkUw;30eGae^{ylOQB(Cask31zhZ=eYqH{UW6qs$aC=9_}So zfs&jwm~LcPOL(U77LVe7-Rh7lw2VzJKiv4=TRK-k6}n0))Dd<)}G4gbkR{US25pOd)90Nh&V%u}LW zPELuhB0Ov`dh75;%J3$bv*M+@FN&i(ZHN<%fB!?^@6V9Elp_>9mfB`UO8V)NZ z>Jg*GsNJtAl>Et^UZy0qnopYJZ<=Enrf=Lrb4jxq^Xi8>J%Nva*}#VvdeC$N+&G#q z9dWf6=@BRCU~HW0^@g*vu<4De*J+xz^yO*@)HFd&clSRr9BEmb3*zVTkqHcWhd|lWY~T|AGC|sL?l{o;`ZPQ3uwGgf=hR zZ6tdzx6(*~c(uXe+jnO+PhXCo&ptnM3Yw{tA?UTzXoWkgfAO12d6jXvlP(sG`C^y5 zd4x#dM$*x7RI@F9axJEzh5eF31unJ)$FVa!Ig= z20|DQI|KDhD`B9jUf&oF3dNSpwG!=;!lWXDP~mM-*By7+wBfbbR7At68#aPtEF1P8 zW7(K4C8HL;3Ajl;5_GZDCRw1Ve}ijpC)@Isb1`)<F$}@LB{xC@cpczHOOI(}S1SAif8b@k5o+jdFYXl{`Ie;}J9w#WBzQqO zy}(>Y^l8223~$@0;do_M`)llHN?V)^@%pmQiuenTkYZ%n1A(QiYZ5OBU4v^u-UV0x zch_BUr23bk!`ij%2+{lC!0k>{51CDgS6TtGN!Cp2B27HK%D$HbsX-<=82>l0s8viv zv|Vf)T1e|5oMkfgsQH-)W09xdZv~b^sql34<2qqqA|MFhe0d>1>hK6Lmoyre`DONJS(PXc+arVbPJOLI!#a{jz~>}&EJ>D_ ze7`6?Hr+6yHTRQjgzaWH-qF5~nP?5lMz<_>wARpDR0>DD{kpSLr?XpBw`^acp9;)3 zAY(8MP=C?s!?oga>NiJV1l(Z6b?c6;CB5}!61TJ{*t`_k`R$d{l&GhOoXZjBF6OV_ zWrY=SWnvoNfo*GI3uHA^E%?6~F})jrS)}}#RX*)l{D4(|Dy@9XX+AvC5O_c=yj?u= zYQ_CSVHA+m6>ebV{nx%X#iAO6FfO|R-E4?Q;p1#on7dG#wJn0|q4-J-gavdv5Ui=zqkHS3$gvKT`~ zUzH<^!A=C@3@*V#y{uK`F9t(uZwYT7Z93pO`5&=2c1mXOm+U55>Ql5k8oRN52)p6r zl{Rrt3A?GJF99`54@7iAa0mLM9gVOY8%-uv87$KA&vq2M`w0_TWwaV6i(niPPfB|A+;q`5c=P{Wc)%%K?#m3c9A~ZC)||NB*@k2b;YtC zIvL|CJqpJ-5*B9=cLIPx`N~1FEa6V2sZA|2%aT=L6zfFwk@^}iH;6Iq8TFRCfXhoj z*{h5xX4x|a`)K+Wko78W=Ic(3odPkvLv+ z(#{j#-AVdvUW)<{(v3^GYI04F_0-2#m_TXgDN!j__`>1{VDvd_uc!yF#141^`7RMKRg2eyZk`) zfmBrGSeV6G8959TogJ*rOk7pX>>O>4T+JA4t&E+GoUP1U82;Zro}LCOuBM7+&Q^|= z2BOYZ?q<#m|L4I){_h93vN!qP6F>nSh483454H)zLI45LVFLk4{nt!jXXRq@!;YYN zs!D4JGl1whlqiwu3Fh)!4gWxzDsYgBGXkF4aGtebAQY!Z@K0B^VfzH6q03X z%gzjn;pNHEbJxpVqAoj5DFqapzN=*9X|MuFv>~n3B|GL>LE58un&VU93Tw_+jL{&>7J03N<;R}e z;DkqLXC#wN>^hIfmF>%Wc;Uj4AGH{6IDCx%?E00at4XSt{Q*_$5pB`?K%H6hac%WM zA>O-4Qn(~xCR6HbHW;E(m?KLk3+8De5sp|Uh-CTU{d#G1CXN|{@fRVM2sy=d!IG4G zT&!*;w%E*2(uN)Vlt*JEaJ!0*#E(YJW#h$@5n+Z}FpCdLlC49~C=u%!x5Ml=T*SJB zp?x(Gkdi(tp;qY8-mi?hIXPK5y6lPs@1#S-z{Fu1zkm6jlgIVa-0Gb|L{1$7O5up^ zJ@$hW{Y*DV78kA*>h`JNGts4rBQ~MXA`lG+o{`d#vd=6|dE$2GNc>?I&;)rMw-OzB zfr}EtXN-F;E&ZRrdfGWvIz;`wf0gcF$q~l~I1*~qM+^m_hKX4G`aP^z&5JVG zK6P#I>z|_pf=dck0~t@>ZOou)WICvXO4bx2oGb`dJ|F12BAHsc=w97l!s^ETILJJ0 zGl;AlbhK1W?JRDpnj%_4CIJb;zmfS1h6YPiQ7~szu#$Z6fBT{2utz2(1#_5%vG)*H zi;;sG{o_#vbd`=hq=jmStV;1A*Eu+Q&w`~Z)wpB)<#SYC$ABXN1 z7m|iKG0%!YD0T!l0NDpAjdy&5deZ(5ZqjlF0RXP;N7ddIc(D2&L0pJjICRe&XnDAj zqjgYElM$A7tkvpy--1DE z55?bDve&j=H>cn{f=&e+&Az!tw7WHr+G?LmZeqXLu5^|c_qrKwPVMyWh-gX(_~!-W zB*01>O4dDgxEh>iVUMJ#RJQ{~qEFy*Hf4wzbh&%*w&&YB1@fSxJ|UPD`r zb$*YBGFwVmvrj&`;*r!+gVC{+Z}ax2vk|9WF7b8c7yz^uU49~(*r%HKXPVgek{`>H zO=)u-b8wkou`$^sGkQ!gdALkvuMTb2gtY7YX-_n{?jb*3F`9Z;v-Gx+x1V0uct5y0 zoNOZRHB*wd(27~(s#EBNROY}#U-j2=`a2nQ(N)z}Ls@4Q$QV8EYA!$GC2PH2L?2@R zCCI0`y4r(wF*)tBMiCrnHf4P-(O{<14@Ng6813zi%lmkpgZyl;0Z-{W%4&37pF&Bp z8lFohWfKrozC}?ulwqt>B<}HU-_oPaqVi2ky0&sSS#7_x6w8ag zjwY;AbDrvQq!hXEWRmKu;x;)aFI>(Us#P7OCMZn78#b-pZ>;hW2DUrLZCk>MQ_b;*tv3p47Kvlqd)*~BlP3E%KT6}zYC$#`at|&ChdP(9P={o)LmpC zAjAM5Am#rWi{s*I$HHvR`eROwOn*$zboO^_A!kZo073aT*1q|@V-ThBt!TLBG4EGQq ze8`_iBr52&*PRu*jokM$*n!*LruFIW_&Zc~J=$bxI1u z&P0W08$5$A;Jk8rT8mHFi+W8m7ldD!d{tTE(wwX_82gpi6E9z7#g zDLby*TkIs*{=7W{&EUjc^-#nUJf4A-MC8`P?*?_i&jiKFd;~|RPORb#m+T;2KL^s<7l>Q%3hwwfAA3MBFR+I;YS4*G{e%W+fiRPn zA}4Ym5D_S;ezATwNx*Dbd*nuFF>>V1OS}YlelA0A4bEhQql1&}4!nDiHLUzh$F@R<@aot z!@7(Q)5&$uewp8?CwCHU42b|ASj%;?PtKp^T)XKfUM3+Nf(>lg6Wmil2MIg`b`@#+ zc9}gJBCO&U1dIMu{LKbxB=l~iTEGT-LV_t_#!pu42kus7I}2Tz@il&DKQM%I#t8cs zz@Yhg02hwS_<680!>IVCW{lv;I|VW2sJs-kA?KEkk$Ztb0A~VD&ql3-F`GwjiWT)V z^9xbTE{vTKqSUpV?~2OF;|I zQ@9o+Fp?lw;AINVtKX{xR3Bg#Nb*GrSinlt!%m|g0|z!?Z|upqKU-zUKCA?AXS?1r z1oUfG1HK*^9t4zeXiJtEBsXr{k@qoKFKB20W88?RZSr4T)HdeRTiZIZ{v8j7Ih=t^ zZ22?UR|CVf`QoN*6FnVUWjwLbE_eZ}cb%89r;uBx!B4)n#R&`mXaRhC=%a zMPB&jLVH+BN#9#MBYbB??RtpzvW5^|)p`h)vJURU{3y1uL}_`ApLQ2zwN)ZSwW@x& ziW&s3GFy1%(Z^d>CY~1pC(Uv3eRgR({Q+=vs7JdlWc`XDSWEax*Lc!3c6uP)JOm{d z`-rvZkeErgeAW{++*&G+&Z5GS?z@|xZFv{M2U^~$`_7paQdZ9?+x}h04bGAvPI08- z>H?)+2#!?Y8#tOe*3wc^~Nob z_tV>JMAz$0%qypN^iK$7yLZ7AYF-M{uS|fL-p2q3MzOl$xy3#E0-?;b$5P{4o0YVY zs&<{_hyI2mV3nqgP-kWn-JeW0Mct^6J({y(iIKG_O=gnVls3#r=g`0n&N&7W=JBqf zispovF7R%klncR8ON9CPTpcOmk1~{hzx!{$t)4EN-yYVu>=FO7+>T#0TkBfX@> z?daHScvmLOR5&id)H*Eb4>n%Q{Q078HYO?cXw}wRH44F$;n5U}J3+jb6mgofb_A9S zYRHuQ>X|kr3qzD+NR>eAYwXFCM4W)(!IS!G_-XRM+}Tn@V}`)9embyOPUIVgv*}rD zoF+AG*n+MP;@4YqBHtf(UJLpSy<5QvAZ;lhyce77kayW>6 zVhrK2)=nGUlM%2xqz@j`xh(niOH6BUxs+QAnH|rEzP*oLN+CoT-UW9iJ4X!;p<0LK z&c#W@cxLwxY2u_XWo`?&j|D7X&(XQZGB9*TtyBtXIkt_bwO%` zA!c01JFNK+K`UDMK=B`4Dn25~e_FxbQU7)PK3u2c1rOs-*lC3LyRm_Lcl3b8Q*`F= zy!n$ZH1C-R-k`3yQGgatVBqGa43oBYjowEKIHxHw6#+ILnfg6(LU;$ik0#&W1pbZV zl{g1sd!TvaJ$i@xR|PkW|ZXuW`*8Lr|_uRhBdA)T*IPeuR28w9AjskaJpa z;TB_de=fjII1FoV3_+#4Mq?+}nU0_e-c{hFA&I(^gUG+PU`#<8o>zuoI#igZC5kdB zhBF?@4$%-tlaSWZyDi21x$C5i!BmD;=$@1$1Sh^ZZb>HEf;c-P%2Ivw(0{obP&6yY zUKW@VBXRUk5MA1@K#omDBd1n*8i#szsoXp!>4b9mRL0L+9o}{>&$RrGYNxU~&2M-A zr1lnd0duRIOu>nb6_RMSB0WMdS1iF|c}hGFk)(WLI6FZwSG=N4h1Kt47>`CymXb!p zX$H0;8@7)|1AtvNW!P2(mCgnK&x>;QtUL#J-f>X+dgzFLH*2eovC{EG^_Z#`CPlw1 zpXNTzfJ}x^kqwtlrv9Ajtw=^sPhPWI5$dJZ8DpBt}&;$h#}q0$!|x zLsb)`oqw`XoOmmCS+lt#_ve8}GwH@tzAhuS3;B}5i#~I1CgQD{`-7#8a(5IM*XH-^ zC{MjBglgt)wY_(1j{e!aR*l+Vb#wtsH5Sn3bdZS$^%(Ot>t=)vbpIvm?mybqt4f(s z7GDN-bz0HB)e&7f3RutbR^0Qxftz&g`$q-DMd!yh2+CckdLgP?zSBZct@ePpip*NA zh?z4PDS-}F3S|ykX>MMNtRMb?R&?w#XVmyWgeBV5FbpKyY7HL!tCcz;t2PL!CtR82 zt|hN)+v!8G(bp(>lTzfHGZ*@(Bx*>SJctF#xO1whJD9S1u!-9)=d(6&TF4AD)pplS zkcm9O3g$XpK_cn^;7a9+3h4fkLMES%R)3b11BS%XcZ3Z>x~GTWzqZ|vS&P(%4P#~H z-Lg?nE8_B6F1C^1;YoR)zGKZI!##NWLARa}B!IOxn)w(8x_c{HB077SzidA0=4*64 znka%J4ya;rE1k!I{_#juh&T`So_VDXE^LtxIp&9gRXPUlC6lJ2UA&J5q8>%(fOjEu zkRK0rpV_suq+*D@#+mTRNMq|i2uBWNPHuOC6v^K@-8ph^3~Xe-W? zK?+Ay;6H?j>}6KHgZKSOO5Bp61vNm2ZOWa+{t4 z*Y=uZaB;aivSL3g(rJTX5%`L}_`1Hn?jka(Ti*qj7B%MG+M=5>qj((vsjHrJe#Q&H zy$NYAC8>GT943;W*0Fs5j!U(*=l!Y<{w71rjE~8Z z9j|dAHIBWOrna%){^kaCaQ;)%H=RwEkyMjrNL|6Lk=Kk{y%6e`&`Pur%3@laC5vft zakm;id)$@ii|n*+E^pY97(tscKD3_e_x!f4AKE_*@HdMrZT_C2Xjsk4O>vN3?IpUv zoj0RXe;|7suLyJP2A`{q*|~{MJsF&|+ZAINTW|?^Lus>7c0+~iP3j2_@CcB{bPv8A zdD{Gz`Q6ehzq6Qo$(1bEHn&wOt4~U?ub=3#8_?&o<1Za+=8=dG+wcaNLSshSshnWj zu=xJW^P1Z}RJxTMA^c?#_+*oV5k=$5$6aemQk`Oo7QDt-qId=4rd*ctaatzK&Axw9 zG=@$eV43dT9to@#e@6)H=hWKC+OKeSt#zAmT|G{XZMjIJ|JWX5$#gni9&}ga-Ng;3 zpG=;v`;BVMvg$}`KQSpa)e9x$vBc&pd^jxFju3SJ78+8|WBw`#9) z@ccyU@pj1pLE+o=AVLL(DR=RcAOC#^aGzz}uL1@=F3|R5JodycqGV^UN1eH()E8bu zx68Ukv8_M_Hdwn}Pxfy)T_uAT*ik#VCT!Ze)pCbz0s0#)y0vecc>hm+C=&ZR60T9y z7;_@yEI#4ED_5yYBmyRcZ3N6 z=4{4ZDS9!lbuvo*;?a7VYEgBa%@jp84iMQeFKVZvCq1M-9{G60uzG71TQ+xyB3DE5 zfX6d*W~L&a`r5Vb5NVvul0)CSUyAp6W$_ge4C*j2y*?HgC1A!thk~qHiBpH#Q zC&KUk-x0t8+1qOlKwLnOx(7qjwqWaL%b?)S!*E+zsPnb5W8Uf%H0SCW_LezK4fjDC zO>$@)Fb&u|ASH|Sum2+-OZ(-xXMwit|NLel@b_)}z^2n;r_2(0XBy3#}@jk z6-F|E^O?zqHP*` ztBr*|%K5Fi=l%W$=1z}Sz^woD}-I!ZG~Iwen~3*dG9LiI^cvu0>?-X!%8SWjt_)S{HR?^WO}X*1S31( z3EN>U*cR+xZ}Lt1g&Q|mbo=!HF^nD3JNICi?UVI=6pFp$6&@Ku9q8xl-qdB9Rd6e{ z&^gQ2$V9lQ8Jx5GP%Yw;3$gG<8+;#%r#t&qx~bi%@~8L2NDr-Jk@1L54R!L0 zTZ{T72(Q^VVWE3C1ADyWxSK{P+sHn*99We&tEj;}rTe?T*K0VoMcRNYl*`>1Tc@nm zDp9$ofFqWJ?zwuj68T5DtuYF~v*HpR5AMYGLgOK|pOnQX8(9nf&LXj;4)RyE%Nnm0 zA9EkK=k#V+kUEgM>3MMa&4OWzeX*Gm>}J3+^0t$KC^0ch7TG(3$iuadd*dFRSxu@} zVUP`D55yhDnbL?C-hUY~6EDqXakcYV?{*2a0nNx&i74aO2L9xEaadfvbB4a+`R8!U zJ=@bmyrW%H%intZ*55l=OGK2XZGW(45WIK)HO0n)H#~n4bOvTI=TLOPDEE9DS3B@# z%WF0F2nU%~RA*x08%XZt2>I)4_HgZ!xrfzdDmjxWg+mI9!szLx`Sml~`9v^iUsxR^ zIPm#x2qKIT>*8mr;|xnnL%xF zlhmKlL&JPp4xy?YZ7_J4K*&u+pqqv#N8inclFHjJhTPzaCY}Jyse#aoxk)M`Eg`Ap zdK?}6M&=mtV0;QM^k*lWR=C2OWA#Ts{+=*ffq?rZGvZMBM(ru@Q>9cQ8i?dFe1ow~ z3~|p|%xba1R#J8Cx-Tf1#ZPtrTCC1^U>OxPUfDAB5ZD?h(7hG`HZqO7xY+)0B6E* zsJGTl%aUu-NQ3MF6jw1ZN4((S5S9e)sg^}oWG>3+}z98Gy@y8=Cm9=6J7esa=CF6gtiA74Oi z?RXDp%V@E5UQ3ifHz%&!7-EO_to_=Xk5)fj%AH!WOG~Fh#k6Sv@mbXVm_A4`>VV!| zS2s(7Zk25npo@|0dhAL8AA&kGiJx##JzH=6YZm?w{ou3)mIEC91aA@s^{c{kFg?9Q zW6woa0PAall)%uyRZD~_U9~debF+hWYCZjO=!jHAwa#lq>O!5ybCUO9%_DYm8JPib zQ?SZG$V^ItYmONxaARx`cvfq znd;tl0{anV|0Ovi^4*nr-NBFi7n|8HpV23}Bv2l_{Fj2zeV4#4@qxnuNH?FgXJzNN zdq#nK_d-1eg6KlnZU-Rk`A=GxDPt?b2^rX>p}ue*!tu|AmcBChdk^#_Ddc+(_N5)_ z+B4VMhIyTboS}nDoyW9cshr`BbKRnO9YIE)yvtABU!{*P2l6h&X;%xLQ2;M#=@+n)`?5~}W$diB*FTODpSRYpbp^?K9>WyqGLz(Sg~Go~N#NZntSU*ze(i)3qGBZ*2P`K} zQ%^^g4tu{@l6U2xTWmOc`$8gYMayI8w*7M_Cr-(UC?+;;CMMR2P`!*JSmM7FU!Y8O z&xOeEuZ!T*mSsyFFUa`oCRVMjRN4G^lAde2-Au4`^arTpejzy^HnJpx_%<)#D>8g% zKgGK7!=l`UQoww#y}PudliYn%>)V&#ZPRKe9ge=ol{x@*#5(pjKw4b&`acn>!kZtb(vY&0#IiLf`66XvM?80&(!T$}ujN?*r#0quw&u7xAv}y)!qhN>F;@BmRhUOb<>M$bP6=MTx@}h&hChLiLi~c0cFi*Cd@s^k6$1E|?XM_W?MzWlBSxrpu`k+h zetfWGsqQwwv%;-Z8=y01)Jk+L6>4J5No7$XD!Eoscq(@Te+wl_FB0g`B{82Tltd~! zyUOR#8Co{UY6Dh`WCBGhd0`~bG$3skeUB68PnDbUDnuU(3dWP#ZL78ZnH9C#Rc_Ew zetM}ukH@^}8A-NhK1}8xja4l(g>H%rqf}RZmCjpe4NLcHD~ckqhQ6t zjTZ^$ZPygR$X3&9H7Cu*(Pa#F%lGotmjcb>ga89S#K5u6woIBqSHhVd2{tLRtZ>S& zn6*r3y8jV_VH0@_&m{$(R2=0}6=(zOL)NjphjbykBAFjvtR&&h3(rmFQE*YdQtBmH zhk9Yu4no<=W7C`X8;nfJu!$g8h*V!Xh&5)xb0y4oe57S@)wn#%YjOyLLrN#N+wgES z{&P6*KZfTU3Ac9)c|M$iWZcAbpBM32S&Mx!63*vTh3tlC)e zR#TQS-y5pH7`VJciBR!IB!Syb~ z{$8;Uqg8M{IN}d^VBzD)--YuoIDI~1{ILgG` z?n|B~fd>RrOK2?Dr(cG4J8?xYwb2MfhTL0yn7F>m!0PG@bU$ce+700AM(gYzi`?|H z`}qM!%DdQPMTd!}7PJ)vXTKm}GMRCY`Kj@Ny>mKK1tPrmhZ#MP6WBTZ)f);oZcZg+ zOb@W*a?z|s44VrMe#`|&fLB74-?wAkvP(IF9B(wtff&XiC=2lmygtt zTfS43$P0@N*34NJrm0Wms{T%nQZh?1FRh?Rh52{nw16(qKShdKD&Xi@EhsZn3GOns{mo(=N?mgJZi|WcZsUn;UbqXx-J_Dxxb0e>mPcOwn zb;NcB3v#EjXgo2e{isuC=&hzT$25&@~mfN!APvxv)gAwl#}+DI`?=LIEy$_CdzTK-R% zoSnUTW)IQ+&W5C1S&=yc3JK@$oTeqM;|SVgIauQizgB?hm`$un6phcH~Y z3Oy7_lN7q;QoSfQ6S1$QM~73W1DUUJZbbS{V~Ky{udvEelSj!iE-78{U-TtQ5~sm| z)rF8aqot2cM@hEexNZx1lC_Im((~bXy5x!jVN%MCX#!^<2u7htdX3O^mJ>&2?m)YV zUO@WY!tXLnHwPb$4Uo=niuhv2?W2pUTt;VdaQ5V$CoXjzd{Q!Ab%K>5Dz3& za2tp+W6?8knUUyA2? z`@x6N2XR8cg}vMsaKe004QQBtMX)dvqu9((ZwkX-D|RiUM4M|bXHG$Sbz0U;@<=c# z6XTQU4EYy;Ovnv5X%SSiF!1RE&{@NqjOV#98=By@z~oDxiq?oyCO6dGbkn`RJYf6J zlkihp#{>Bt)qwOVzb!I%43fS$G7D@fK4&?P50&n21AzatXKyTa8wv&*2&kL>zr(X< z_7f@AtZn0P(1P;$i|{*e3s!fn-=5t`AG`(pJUr`sr5;qObu1hfDoT_K#C9U@w8~}U z^9Db`Tao>-?f^>C7~paYXTix*Fi>k@@e`+N3u_)d|qg`S$fs--hEQZ+g1!`4}a!iS6+_ z(|hnfJ7tM+geshoNg_1*O@MkVMk=&z9JmH6zL)WmMI}Uo)0oy>%@`3x_*UN185yu`4K>`Bd?Pz8s;DJ`?levqF-KQ{ zm=rR9^`VH2V=Y&;^&Dq}rtJ-xZ=PMLiwot8r?f~<-vs(aK;`O9d}$yNqW7pf;@0NQ zO0jJ$%j8}__C+o|v)Y*JFZ2ZSu7tHmTC1px=A<J<-L_?i)gLapw1K$hTpq~s83 z6k{5BnXlncKf=oqQ0VMjZbWb40-otAHtuP2Fa#^hw_lo~f$LyIP-|K~OE}u1Subu; zHNCH9KisNq(r#&VH_r$AcWZzEM+FkOv4E7=C3qoig&qb;Oc?{(h;%+G;FceZdukt8F|gHE-dmZCw2b zF1`Bdv6el7^Ni4caN4UBXiOfRQ>%}Wx-Fgyez&K1?tdrLeh}F!aktsd-gkFeO@&*C(P?fr_cT5nwnZSI1m8EvMoV&h>RT1gTVcG8n`wKiSu z+s0i~Hr$wtkD5b}9c`A~$lC4ls z@buuYDgKc1xS%W4zFb3`Ud?i#$n&*S4|xFUnFu+WNo&vRq%uNx=;BcWq+c%z+{Xmi z-Aw6g+CEN~+yc}48Rd^yK3D9K=oEOpv`v}RJCyHljGXv(;wN~ z$1R_&Q|LC{3|&D250B5t#8+V$$1+TfQtzqYBMSZDajWa@Lqjw5e)i`@v@@?iUjr$y{H6w;93NZ z&=dmWm`8G{6C8Q9v|IEW!iueZxx)Fv^tNmeU6MYpe_f7KC-%o^Lcutgc2`;9@yX{E-;83elT{<-?HSBU!3XG?+2a*m$40q!gtlX zz^K7sTwv~sbDqwZ^Xsx3&Qv)P(5zS-x}Nt%W-8bUZ_jFWWGb}b&75{BRE~^Qp;kK5 zz`;g*nKdX>wu|u?CDkI}ws|C#mgLyd2sV!B)ue-3YBg1sq}YEDZ4}Y%NJZAYRmD)p z6&b6t(^>-2P=k%=s@N^n#pb9pB!CZuHp=e?Bj;N~f)KvRbRs^MY9b}qOW2jk;|La} z)E3H*4yyHqDqED{9hUX2*EUqEtUWW`RYL7I+$(PFHWbi%^l&SLTWuuNPSx$oz4xpC zs<3_N2{~A6bYu<(45sEN9C#2IDYIcv5Fx5+YDSKf(>EQTfN4deO#MTJC_a$#jYAY1 zzg>YPmnZx;sPds(%Bcs*ZE!$|(O`*?3@TCx1l5Yol4CIvQL&^Y~M`r zs!HFV{xie}rw*)|+A2K;YjyKay9)b#ovMoZcYS^y@2bP(!Sk?^m5pw_UyW4^6U z8IK6>FBfm}BCM(b+Byl3Y`*>P-)2iBQV~`QE6tBHElkjD+na)4p^X&~_s<{mG#Jk5 zYEjR86XtuMYgf~E*KI;UTS{iY#SYjg^`1kEghg1udt?HG>+T7~;D?m*y{A zP`>4O?LXA5P1SZCpp^nkA{AUx{@ZSi@h5sJ@ZUiHdF9pm`kn9x1PCY|^1ox{<@_Hj zFI72(4MC)CiHQKLV$29hAeCmxZZzA!5JGBX5i)98liql>=a8TQ7&PNaf_Gx`kEm)EaU=pJQhVCxaMQmw>q&7_nW^&LoZ6X9ZLBl9lD2Yz66E?~jNxm*0QyGQy zOo7rAW1oe3NmW6Fal(W6GG=R_(mqx-!BLW5Vm+LSV2E&wM;H?WG7bK$*eF! z=Qp)PToQuVc^v6O!X0ZVH>UZ3#QsnzSeK)id$Z%pnOB!=`@@BQ>i2qZhCrzlBab;c z=`#DQsH*!CrB-F9cpcRqpOTFl^{7w*vV`&OU*v-r?D1b3hIiJImx{S{`D^79!BbrY z%p+-XlEZ{Je?uY&WtTPO^EoY{VBCvM=?iv_1oyiGM%VLdj_hp{;?i|g&~JzQ#K#ev zD#rH58nj#5w-D{TJY3p0Y6#mj(MM2XyY&|W>`G$BazhhBN>&S7wD+Lxa3eX$_8nCU zRDO@VtZm&2--h*C4Jzbzuabap=ExMH?3^VDFr&#mXBmB~^lDJaQ3%OyV@K)!``%u` zf=0SYOw2m|WI$ zX8-*@9k-MzGSP4V;=u`8Z5Drjn~wP>tmt3IviECH+=`F@Ui=61b81o_g?VKQSHS%d z;6N<)A~Dp~9km6DL^w=6)^+uw_@;dd5tO<3TH4(!Pbs?9J|=M{lE`63cf@GA7ytVl zA`+MHS7vDmmCg-u?o7U0$F0c#wx>~_u0TX&r!GoMo@ox)uRmysZfFg0d^J?A;M8lD zz+xEN64%~)J|Habf*!FWPFQSJcj1}jeG-+k_M+npy@21N;~p%43~c(88jpKA=uR=1HJW z99uaPFl$zffHI^qp0dDWd7zJJJ>2 zkc}?3K1dLr(;3WrLG)Z;*scEE)u10QkOvEI{-ul38ovoQr3KJ|-v^29nlOJE-%rMZ zHF0Mjj6@^1Nl47CTZfPNcpNwrGpv;yc_t78O*K>6a%Lc2J`2zaM+RL5V1MYk4b9R>W5#lDUV;>J% zCjZj-AGEzwm?lr~CET{B=WW}zjcMDqZQHgvZQHi3Y1_87{rhgd-M!xbO+;2yX4O-5 z6>;L^$&5d9o>B|?wO)gTumEBzrNr$QE`~`2vzx?luPMA4_Tx(<--1{p@j%b!Sx6%h zFD|WWOgq=OPEc7*$X3oQ()I%^+mY~)451L7nv6KVg|JM>v;-h0k3YxMkK7-mC1BS` z#)W#{3_s`kMt;8HX!{!e+6G!z*}=+u5n<_W3%6C-&&+%=Ve#?&)uSD~y)|fycGFYT zHJ(!~(b?Vc&=WC!ld_D=V7}54YS-S2Wx% zy=Yl`K6(o+Y{z~6VSnN)9Z=y}<9gJ)UNr1tTI`Z`wpHBhsJhxzd1@xTISC>=dNDjs ztX6Lh2dWF&b~j71Bo7NqYXe^IiJ?rgMWS@SJt{QZIWd5fUQz`pD$`{Kn0sqg)?_tS z@8ybsS{r0>RJy+%qVh^dCsFq;D%ip(JP9Z5Y*s{`=kVB!UXwx{F7tg?9xM|3eu;l| zea45wHL4|;H&DQnMc>h6RvAU|xDyoK`B#2Ixr8l243k1~amc+N7We;6g!qTSks72R zN49EiB6WsDaU<7<;Xw$FD=`KVZv#)bX+c<=Bi51;wpx~w72}+6dB$)%SD9Fe`)k5E z*{EdxKFd0|kiOL-0lvobQ^X@)n(4NHolPQ7-M2XY(rqXANPh=ml9t33zx7Ig)fsUH zVed1}jvg8T8j@-M?>LB-V)kA##+S+N@Y`VbU!!Oog8)t2TA%yFcH|b`-xGG-aY_f= zyfC`u$xdars7MK^i$gp^4@74P3~LC#yW5;(k`36d_8FZ_Js5;2SZ_dG#UBdF5~in& zUFU6YzTMm7Rm)->K$(&2V|rN7`%$M%^~E|CBe~!q*b=&PJ|AvbpjT&y=EyQtM@YgX`6BUCQunJYb!IBc^@6&%(>uXv6fF<(<$!<-bC;ZT%*jD&ah(8ZGWy)T+u9j*xo7k-0k${dzCW@ zWWBUY6x7eXQl>L&FCvJk=B}H=7c%OJ;)&gR13IDL58@kOZ zJZUnuh^2~P>0cCmW;a|Akts)Hi0j-?KlAH!Y&Yh`$vX?lJ+BRtE>nLwzL9lB^kJX= z;;ghmYMk)2rUo-bfB%0j;As?ne>Hz=VAlV8G}8+tD2DeOCra`CPDaIt1hioOLzxAU z?wmlpi`ny!UBHJNtXVwi2XwM}&HH(nOE_-&SjO=p%~uI_9#ph(ZuNneE#MI>HjZ;( zp>%x#!WXiWPT)HbA~*1J7DmHQuA!sVJB`a2E@DovJ28Xf%7(lY5ekIx1R_X)!k)fY zk#q@V=Fe&B5?rVTBVA65Ix}rIYqaQKazEdMkQsc1&e}qO!EiM}B8lDPrf%j21~XOe z@XPJ2z^Yb2L|hU{_G>7^MPU!G?}3hlPG$<1$*X&@+zKdS+mk{=S_|ZPv&Ne$JPu2k z(eW(q!`hQuq+i<5??#OWyS#}HU(JN<)z&Bry|T4~aO}-hiPV zRNk<~ygn5DDjh`ywz9^Zz7mCDe=H!6BF$(1#c;|i2fa;>3nei!s=IP-CV5(`suxWV zKEPig(jAszn9ga^94AbwtY+XX1Oq!9Fx-a!o`j+=TEv`C{jk8Vf2cIU1hhs zK82YXbiLK&*pz~e&%UiMS<1RFpIbspDq>^Rue~RgqXhjICupvRz+VNw^Pz%~k(yBE zO#Ar`-j9b})>u4Y@6?cC>1svGfYmgW7H`vc&7`Ko;PW2P*9+sfaScPH#I7vOuf1=iNe zRl8JV)($aClbyx68#G*kHjR?Qackg@`O2QHmi&2YvWmR0RTnGboB%|9v!)LylmW6D zoqx0iVT1E_(KIBJk6t^7LZ|Of{e3Pk;vj#w9v8eGEu^p|aupmW{R`X7}V>HY6*5VvM)!<>rJ@-L*eH z%&6VL;~!SX865BP{r@@e@eixkhQAbq`3HLsWd9$i0FCtjs{nse;DT1b7w`NBwuO`{i^@BQqV2%ffVNUIW#pXRww5N+Yze-kMU!{r2-p8W;%hF?eAy*o|Y(J$9}k z==9^z(7P*?c9!#g*oo@8Iue*Bf2#D7P1W)ds-~)=Js{NS>J@798B$EM3J?=qw%<02 z??yrE{*yBzc&k=>s7A1}4+5duxX)hA%Fj?1wGcY}8*YEC)-4Jc%|2fsc~~+3SfrRR)Q$L~&z1 zobKZ_liBc-l0T7wev$n!2BOr9puWgAjT;YS8ntg@Htgc_N`q@FNB+yc>xuhEaRibx z=R1TOD~6OteaqpnZ72P2+4|_Cg53oQRDXrg@o97FXkHYB@Yzs0h@$nKd@gYor!RW- zc8}-x)f)(W*kvo2JYrNLnjT_?27%Kk+U#@_fZ#d<&zLpj6>kJ0-r6Vwsk@ld;1no( z>I0;tIKC`Pu~U0-Qo~>T36gpY)8H^4@e}dHwl%0#aRkulEMg5~Ai2-+E`{tXiWdgu6RyP^;4M!`^V*#$OLTouVR2Tasz>4+?h7SQ~ z1p4l86^OJ9cL4zy=_WW_4xS?;d^fOdM6|c=Wn0e9BO}Wkz_uTSXmQUn{IgWOU}5g( zTr1f$gYkx1Mvuk-2Eql&5RA-VlmR*Q#}zHPx`@dfj`fqonq4<$cQ1!j_LoR!jH~YE zpxs!(6z}nKvPxis<$HvBWh4@6_b-MVh6fTIt_izvyGeblBrqQbw1VA%G?(u5hbrc z_d(c~7ESE4kHhT*%^s)IsL?z%aREJ54rbrPX7t8!HYM&n`9(AH3Tu4+QMK0bd zGeVGD>RRu1VAfJpWV0dev=~M~{APAyhWLwxy2+BIc`ELusXSelOA{~G|LO-kWbWvz zGN?Bpkb9GfvM=A$fyMi8@S78T>&o{ltL(`6VTSL-7iGzXFKV>i5&v;IWRV9;;oVB? zY&A~fSP%un38Judd->d8oWKN?FXD)xgXwNhUF_|NlnG-jH#mvEcGZJGxB`r@Tb$hQ zgoHpiXA2%LBsPPA`Fpk-(efg&#G;X?aOzf-Q!Y!K0khSIw^a=S;4`*^wkd$>8Z^kW zRwaa`Ui@BCAm5;bbI4{l184dTzhToP%LIkmAm7g)uYaR^cs%?aYnqo*FIS{iN>*o< zQg0?vXO=UVuRNYlGL-L(66rz_*^Cp)M9rx{%}G{wl2U&nQFrn)Np(D*Y$)Fq zB{EY1z@|WLBV&-qJkMND&D>VL#2y`@AhNF#Gwi>_bniB!6k%>98V}uLu7`Ns9J}8v z+ry1Tf$}e-o=BvusW_;q`eIbhqKc}(NYep~T(zEts7S%A+SxCOG5(wxcB<)c%GpS; zq;!+eF&lJH$vB{-dHv5*``r_|LR(jJKI-cE*t($@iU;eWiGNon=!20MN&u_ICP?5K zZ~$YWLtxdgbVu(_Ri{8q(tDx*lJ@=Su1@C1bPlH(qU(NM*`_bn`S60C+Iw|$ZoVgG z9oZF@%h6TnhQCpZfgLMN4XSPxdXGATPldsU%g{@9#BIm#{b$PIo-*`YY5WQnyC=A5 z4ES=^*~&Hk7KiY)WJ@J?RLYG;(F@z^P~ix2<#? zHo1==rZ$y+>^l+!bDP81c15H>Gjn0+pbT%B&&RQsC!@3$*@C&7xh(VyhRR!6-lkuk zf_d2UqCtO=lwa)q&OT2V{2vrTUp$QQIvfrSp_DNN$J~Wxzw>#x;YL_)bI-e0(blX+ zac@9O@j^WON)@H*!qKKDNhF_8n$#4cwV@7gSG~AZ=4l4i0Qt$VbL&EcX!)tp5v>2N zaVMqbJn9yh=wzb`8ubiRx!aR^16S2q zC)zTpOCpbxiNiGuQ8C1ea(ehqohhxujTWJwn_>x(%i)j@dWuD;D2% z9>CtPlnwlV8-=O4Bg-M*54Kr!3Y?h!g5G7_dE^}T29LT6Za{NWIS?-7pO2nX>!7j| zUV{%&G{oCTHWOt}q?fNL@bZO0uu=V@sXO!}tBH~!wDHBW=Qg-N79{cy5quH?JjaQ5w|-0h@*zxTIj+w^p`=d&24jhy z4y}gLJgqgf8_M~2W?z-g3?hKQzxi5CKX{4U904k~E6n`ob6N%FSfW`RsFYj|S&KWe zSUUX5>m@}BsF$aDJ8Zjf&=6V|djj^Zj#<&%{J}k9!ii{;oRkwp;X)F9u-`Uzbm#so zXM7F3k9UB*u*s&7V{rSBdva|#+V)~Z;OfG~7I>m>^m}P8_JA%rpU25N{&h~_wl~@F zM)&{B(JBlhrPD!yfKCyBfRz7V&$8jeSitlmptPJ@?`*QAwwYH9v7X& zPaTYM##_AdyT~YdzacW*Il545>ouW2U{ee`|9QsiE;*k&G4Y$0k_LHO(uGTP7P_7P zZP?S!^cO%(0F7Br!45ziOpLCt;=T<=EM2NKSE~x0{2mu3cDTC3^d{vlC?w`C#$ZaB z3T<*l1?7dnW)|BE(Bp2|&oo?3tErg)3x76IF-6Do|!P@HATqG0WvdiiWPTng@y_{`5sWE&ydm0QUc2!X1{Y0sBwyE z8Z{8_4AxT%dq@x|aVtYgFD$8fYDv%?1}TcD*~-R8IXwQ)8lBRf>JR3CN_Ry+MKX1c zr(t-`m_zh;c}C|10Q&kVkdeR>2e!-(7*+G34O*FKFE5Tfx1vO}sxYuYNqTraYEL~= z-s08zsGE4hwwWh*q-a4LLltzd%*J<zqEkb zRRq?in+}&7IoKXsa4c_{kG$Vf54G|wnxL7UJMEj8Zmp2j>)N5w-4NXw>KX8Iq0%@X z_s1{!(fUF-7mb1PO$ekZyKRXLmTZ#SUp_nwy~KE0u!$lo8;FRQySun6nA(`q9BAc_ zcKbf8mN!qO7}7IQ#rsDE_BM$ZN$&IZ3u)`yF`2uLF`2PbwRx^AiJP_?JVtz4vTqDl zU)B<0_k6ubd@7L?9Nw*{-&>BzYHx0kK68=1PsTf^$nr-wDw1n)j86ak_a&G%^()hf2Tor@QATFG5-+VdSByY^{b0|%26;KVZsr9CTOKN7r= zWWDb5o6#+7;+Gb4OJDyRSL(ldtxPvP?B%Cko2UOD=vf#UTAS0F4QY7BuCtYdPf4-d*evPNo7*BBGyFLy`D1({)nfLtLxZaff-ea z4Wz$LMPf%(MMk#RLbbUqNjebowM`a)Rm)xQy8N6{xG-Mldf|Z8(@aL*5!TwBz+zLS2p1#Aq>=i3TlSP+C&7^2U(kK>lqI>jOa{z@XB@+5U*XY;s4I- zGLi<2u2TWs>6k>lz{Q~e-}sD=`t6_d0Nr_*=o;vHAd8>ZJ+Ps6OF?<;$6r#)}Q8#jcnzHbSYl`A;|8U)bQ!Ta-c_tJMx^X4vH7^r!`cGIE2Y#4N}YR zT-hQA783lpJaF=^3^5)6gS$!?kd}c;K}9r3yK_i!g5Q-fBw=cPRwYuh$Di<)Ytl;X^p-H$aAsnu;Ug z=QEZAqv16Hj%+W7v^Uh#gN__oTu;J02A=+(c=fSmeDMrY$dlXn862>?SDAWknO~eQ z#zoH50`@(l{`7gRC0f0Wr}6a1*{Jhiq>zJ-INUzJ=$|9EZ6HQ^rOy1)!LmO69Us4c zO&20$v6mdxB2mQBr!H(0ovk~#ILWg@rR?+WR(|Fd1b-7mqHaE~=8z4m0CP=f;`CYzc0Iw?;9a8q* zkYgm(U$kSF-(^V`Y2B=92RpBu@gN*oH8*=boVmsvxtL%-S;dVF*zw&y2^S)0=x8t_~ts{ zJ0)6yp_BsgWzLFumiqBxn7o{MP}4KoW2s+eP&> z(JmTj>3l%S{F=irV$aPLAJXVVMPpDU2ljrHPCKk!CQNxC)~OC&1>*uuv-;*&!Pb2k zJVZZDC~cBJI3FXDF{?z#a^^%j-N|3sNRX$I>oy}>zU$Ffz~DCrNPM*xzsTs+p>wEU zH;>FlZ*2SO;M8I2fTrr=k#jOYsb2L4SC1p7b${SLvod3lt0!D+24x64QHczL1Q45j z|BYKe|MF`8sLHdQl^ydo&nNgdC8Q0B03Sd{O2Ly^#C zDLXG8J8!peNU1lG|SIrPdQ*T~LtmN`vmv+aizap*_ zMMPDJPYKl(l6ws7YT8HfFh*$)57N|i3@)oFu}3F4Shl_Ya#-x;litDIKKQ2@s=`eI zRgPZVEEH2SK+n1qZg0F&TM<+J!Fq6Jp^c%rVDwYx5i4OOS_Ffn0j)brh8t9c*gHR+8Xd&YAQ3w3>cWui>8%}hqKK^i_{=d1jTtFu zb_%K{+8*!}f7ZU6?0uUsOW%#;TT5N5bbL>A232sf7oD|^hzVeknA2*P4g14tWy_P(M&7(dYu^;?>>N(|bdA!j6-&19! zG4vpS1oB5Mi3_lS=Hyxb#>JI|Pg4F)P(bK43;UCX(l9C3un@&eWwBUBKR+4Nrl?<7 z5Byt%u|mnFFuhL<$MLZrC2$|}MKlG&xge1q{;U00LA=l+fw_9+74aLYq*7*d71>aW?02%!ohm1<)555 zNX1*pGVU-CG)8Zzv;r;m!k6r7f5eP8CLCV0PahSyXJ4jL5 zc~{uiY`~+~NU13uM)-C{@)rC;%W>oY-Fy+Yi;R$_E-oi9)7Gr0d*VV8Ocx2RZQ{iB zU-*48c^Yj#*6{CFn}@?Rx5L_t+hoN~$4ULizH?ASQ3yQ=-;1-EX-A7OA8I@w`^?|t zvyO)eE~c-3_Ms&KvVE@TJ`?QN2s0K^sn_Dk)2+qB-@$Ea8iX|0}dxU60^6Axd}*@j?or;$+v%KofY# z$f1=B=_j@!Rv1%={qAz)+v9V)Y8x?r0aAhAEal>>>+GuRtlS{}^|Ci~Zwl0D_85rV zr@P$u5Ar6lu%o*Pmz%e}!nuB}tGnd5OUMIn2xuc_Sg&>4Hn1oaLLLfxdwq@&(I@M# zP_9Q!jn4B)UvjE}*7@BMosQehUWuy8a{b9Fo&8SDuKF>r7!W`oBe)DL2>Pa3Gj8i$ z&l@T=i~{(bU83N@{CXf?4%NwlTRX}YTIEX}^7bkd?OhMcE1Y0^tbI~akxw{(w`Z(R zzR@=#aLOBobAn0F*%M7~cLQRA{jTMUF}i?WjkHF5mB5OCHq&oK_T!~bw~JO_msdRB zIRXo`XMp#4U{KdzsP#_&{nIVASLa5d_CfFl+(j8|#t(l`+mQ)N`U>!CqXH~0C#--R zyaGRDPx$s%*uNXIbaRZ$CwVAMk)f#l=mZ~3dlaUlISYNb9| zjsJQ7?z!ed-|-Bs3hOftcN?M6Mq(>%S^I{N#si+j8DIY`OdnzaUhlR(GM^T>r3N}u zt8!@mW97&>)6Kf=cd=CmDuJO{*^w=c-~HnC;Z3g)%J zIeo-Z=2;=?`6Wm`gs0~#_K;6(#f}$GcfE3F$tMjO2-4Vha+$nwBv8I)j-d84V|ord z13IY`-UKvCh{a{%XvB#JAQrr5*Emh)Ac6kBb;QOwd;^Sl0rZ!eHWEOa>QJICmo%Tb z{Ga#xk-qO3)U}6XD^GuuA-4c`^OUVky#p#8eEdRNA`>-wzSktY&6uBvPXJH4Cl}tq zY3=|>+|J8BQIW4@^yUK6I!Pm;6amg?^9?BILDovMjV)b>^IozkqCK)X0-d+ESd(?F zs9tESa1vEEyO1~S4*yo>l|L1Ho$hKV&i7WiZXRldTcaBH0W28(o^)`ZG)p5u($ZkS z8AqHkF7EypuE(d_o~C40W@X@KM?NN{*--mV1R>_Uj zHXzT-*Y=*`)#Dlwd;%~1Zc|0`;cmb=xRh#^OuTLvY`gISXk83HbHpBAJ+fcCBnxa3 z-bRZ;LD@Fok*l2q-8*6xKak&gGM@+N!trQ78Nh^)6}LdBABi8jt@J~M4%NY-Ut=)+ zyAb~>3#dFFT*aWYW8`HPl79i1ZGeg1oKOcRgyQ~XkXd6_Lz)d;&#_CLC zKv^+NT!J`!&6Z(BHQgMc{mhcD$|HrON-kE-`ZJ6U`T_-3Y&Tm@xZ>z`r7$Pkb;){s zJomi#U>Tr4>3beL;mPOk`xFLo^HPQBD-Rt*A(3ET`dB{?X$$lq(ud-tt71G6^UOR{ zKWOk6i&Q~|R3Qn^_{*yKulw!Abo$D|uG#!pPd0MjIOJBRJURMw#P@nHrSpy?%p#|c zxPYCfY^ZJauCc$B_1Uuqf)3NGh66F1tAbkq8oi#dda|tb6)}aD2v;F3d+-etdBnGm z%d_w=1Y|CodW3iWG29@Qr&m!(;ZUVeA8c+l+HqPBkhhA06IEb!*7rLw>VY=V4}k{w z-=M`-Se;2wLKt{5uCl++WBzfcC+GzhE?r?r&N3DF*5{P5vl}nld2OAT@Oo_b@y(1^ z&K}PNwh5@xR4T2lXy3#)2vAPUF*@mEz-N_`Hm1i`RK=AFVk))n?RN*-5>*b|mTq9M z{L4Y8NS7sQ{GB>Jt1&X)Y*BalO0Q!V(6R5rD>6408au7din5wp6y8!v5}gl@i?0MU zzKWt}b4~ixuWgp7Dcv@nR*6*UFh~4P=)qiA73uyr8@UI_EJ^9&JIpVVN&`b*&*b2DvZkSwCY$*Y-V^mVv=~J13D+2s&}Yam3b9Bp z7bC91w-~rADx_8DYX_J>Mrx;n7f$qg3@+T~K%dx2t(L!wKBb;jy$i29dn0e(IQUrCfInWI_0ha;K0Wv$dJQX5{T_%v z4YA90L*1D%j~ zDxg#rRp6>6O@ayuU;t6zZK{*(FZfwvvqF&9L)0NZ)6~F?ved$tesS6?k(PqH2Lt7x zn$1pND99t$o1iFo?{nq${6Uk`hTDHx71SwV#(!rFDAeBwQ((PQx)Y4?4cg{SG04@Y z|4<8gr#R+yO?jhLIx84sZ?e>TmD%4EG%XFCqp9k190~8SiesLF3pC;9h7o&zl@iakY zfm0I-*5Dvh{|p=B!}OYn1a)aZ$m9tLAK?G&OdlIQSMgwUhvpo;*|;s#g}PohOn4l4 z=2f-bF{gD6nT-}TLYX$fF0(O?@75Szs)3|bd0dq9pV{R@;hb3I@5DhM3ol^AfGy9B zpoJg`N4LGC0C&^dow$e+e)wSgupiuJ-R`MPV~ioH(woKgPq{r|{`;gO5k?QT&W_9t za+;v(<9{U;?d}ikLWq`p0aL&ksK9r$Ik9L@>;xX^Tiv|?w8 z64?h5u|a71XvCl#;<2VN*eE)F+HqME;?&X!jud0TSwZLM9K>h}36dPp%Ulj(w8lD7 z8p@$x(^+a?rmF!=6BY?Xqd-`0v>bY%xg?MmE%5ASST~*4y^+npbkW@1j(G3%w42pV zbgaLB+vM9u>5bY|mu@anL;RL)7+2VF?K{!|(b@(Jid2o~5J?+w&2s%y9TSa&H|kkG z-%A=u6d>e)IWtTiXFulAv-Q#|QHr2$M+eB2+$=?IKWee!XKs9IrL5tJc$JX6pw87x zj+i(OoiCDEWVkp)*#iG1W6O-808OdQ%+gcIFp^2O0p6W0>D#cQszz6FpA>fv4l&R{ zeuZ1m!8SUKxN5fZA5luTTvtCQ~Q1b8Y<$Hwia4JTNGJ`zN6 zW%xFWCB+d-nW}lQG~fSK@{BpOiL#N;Hkm{SbBeRIvT%!Dkq}DXJ3`!5qrwItTlaI?~dcd?5aB=vkj6oH!9`` zm%KHdygn^C=7?9-PLuHJe!qZWhU`&Gjr3D^%-#~jkK*Z7ky_Y$gxlHJyzB5RAZx!7|N6_gLKJ|iEh!A zc&Vp?g^34KQ8V#kN>WDprc~KG%31f%XhW(D66MVQXS6O=Hbb&_{4>vjsi-?nPFJif zJ$)+aO+nC`qR51l6_@22;qTbvNM>FYN8OT^K!GyxZ;OU15XwapE^wt%_#+nhMTq+h z2#Y{>Y0##=&SL*HdV9w`y@p%ER4XDyt%L&O>{aU-=ZkZ9b>8e`4UbH73A@(wV7O3{ zT|HHD41_HZ{qTK>RRkCDgx#GgC`Rmhmxm?nPLf^}QQcJpc!aGC-EhOd2YSm2KXVCn z-6!cbUQ1nxA#Igw2JQ2#M%ps=6{hW1Ax4se4DVLcAC2a4-n4E2WRKQJj-&Z74{b`0 z4`58@XhmVQ1t!bOzd8ba&|K#ddLk;;om*!07P2uL|n&{WPm+Z zImzelir-&{5}su9OIG-rw?4L3F+9j|E%SNe!zHX%j8x@F2QBtH!jFdW6(Cj1c&hlR z;PM_%A2A--`Nygg88O`bl-nd(Xx-f>&J5>VwtjYA;7+o9J@1fFtX20sA`nm?1{Wna zeGt|OlD;ic)k$?)8i*B-JKAdi&a9KR3h2VcN?}#Vl^|gg^~|M$cdZ8rIZtJVmlF}* zd~QlQ!vfMBwODWjbfW^Xwyw zt)#)CT&}SA&S77x=s#uGaVfWI{~Mza+R2UDjCdy1C1DJ&LRwu8WdPZ5X#tiXXy5hXM=Wt=eHARu5gTLK)+TJWgF zg!%pNI;L9EHo7+)mZ9ASG|1UsJg-!cO=ynv3hnCOqG}k3cVaF5$#?9!y~*|7qeR+p zExUG&>o)8GR$prPjw6cPS;L1~&_~<7rO?D};i+4N|9Q>St+4+*P3o4_kM}YX^%2S= zjk_tsew7Z);72p~>yJEJgnmK^io)$+{^CO5-~<9WGS{5~A5oA(W@_djKOdDh1}?!A zLW)K;g`T0+%4}%nfV>dZcM(A95fR)LD$?}QB7`LFzHY3=Z3hDLEO_~LrZ!|dr61UgTzpU-2%`4C?v$yr z%Gi=Xn{|v-=O?FG>yGVuom_-=>rl;q-UFp8&jw7oTd1oWB~*gs_d$Q4oQ=i>?J)LH)|SK*0d*NZkTHN`i8=${A8#sKN8$C~wPM{Zv)$2> zC^FmaNkE|pU8X+6Ag@-^Xf3+IG0nKX8eH8npooq-WL6uN2@N20QW7i<8%f|a+wT=T zgydo3TrT*Gau0%+XUZ#G-!I>y7|?PZB%4@o$NZeMbNRl$Kun8G#BLzKw_U7PFPRr@ zmkw))OX;XTIbcK^g0gtV>Qh%!=k^JZS#OV6$&%Y>4so-Wf)4A)Tq6f(COJG)8%XIXBrT9 zwoFc(k6%3+p+4^z_>N#+o4K+jk>LvjJu65=Tru>FHRACBEckjA)BSCinhOFo*9etg z`}-K7rf!Y{p0o7VU&lI*`w4k09z0b@QyW=EW=AfA0u36MY!ypB|G9JKPm?RRpD?ay zh{=_Ok=e=!RHYMVhdrrF=m%$k+-q*|8S5M)peWpBNxo9Ws7@oHC_JQr+`A8o=Ih>O z5F_6=Iu2MOlIVfVH}mB?;|gw0c>GheHP;uLY2XaCT2Je7A65>w%nVHIt8RYpdDg2Q ztp(3U%kyON2=K6!* zVDCbl2)F^scxc(l+6F?$bK*{^j?(`y!QA74@%*zUM5o0P3|2HyWq>tORE2OxwQpYw zD5$Q%Ay|IJm2nY^4(v8yg*~ux>85HL7nV}Go5Kjl}ee!~I&fXMzO>5fB;p5aCNm;zv zgVGJ=CGz)AFfg>{Tb?|(G{>AjeWGc6;m!3{T*!x!QleOUJWlU?u&ujWfDUEIw<4C* z!mtA*RV>aZZOf1N(XN^Ib0(Y;XJBUxQ$paWdc+jnP=ZsoYyEWm3%QCSFG zO>%z_rsc%2+heFQUabtA@Gb5XRpaR`;ca0peOB*l`*qQ!Qg%6`D+5g3>Auko^-OQaGROFmK&vtoit z$+QC>c+;j;P-~z`re2S8>siBcLEHTTv}&v(jwN=xBWClyNppgn(8Y&tCW~% zzk$pxC7^a_bgC46&SDaCONy;~Q?p1`N;ff>P1=}rc2 zROCJrrM$&4hCFLTuM+4SorihIIGhwJtjxeGuuv>`*Xoh692y?^V&U`*)?(F@-W??t$ zbxwW1BoO${<$LE5D%)wJ{qyp{(Lt+l@p51TYK-{xe=+F6Dfhu$k$`}1Z2l)0^w#=6 zn@F?Oe_(PHzirS1z6T?Je{A9yajF=AIDlwEp)xqOvT#xl0E^TprVd7|AgK_;Gvd3= z>#o8UnGof!2Hb2O|DmR>tgWrxxz*+Kc?V8VgZQ>9e78WT_8R1q;N)#V*B%=i)8Z1F z>QL1oohmOi`nVJDz?P{@@4A2wGdAhE?2rh_C$pl;r#aGPDCu+BMp3ecxAnCE-(vIe z@Q=67y6uS;;R9ToOA`Wm7i6-4-Z_w-;L769e32|*-EKN2DNY)@NdB$y_Ow_DwfSzZ zUDh>nd3$q(EFj%mrB7Q5(e=X$#&Ka0G2QIL_x2EfjeDr?laVC*6}e8fl8G@}8}gq0 zPW6lX2O>`+6C|E5p*dJ5C4TzF=X2Aw4-#=s91ftc#nvw7{6WZ{M_C`d)_nMM$dq7h zB#vyvu1d=Z+e5$zRHv5Q=sVL9+El>hs(%1-5*;K(`}~)1Vc0k8Td{kyu5iIMMv5ah zf&S7U!%R6MFT{Cc_iZ*}vGl@41w?;Ql1tg`n37--oGrL(oo=_+y-iDpUAll-GIL?X zD?Yi?GMQt|vp7U0*Ilos!|GSSz5ZkmIBfX=xIMN-x1#4@JE$}3aYFUoV4k0{7hm1F zmk{EZPifK@QIoQm4!lnM_9>~)2{K{mM0|kri@jJE zwfO!e_ojmH;Sp55�>r2t8L=l}`7LgH0ekPg8c1Kvv&8ypZo>JSy+C&i75Y6x$cK z8kkQ%*MydpNOR?OS!v>^H1}}H?R6S#`1_4cm%X9urDBO3&oT+(mBo3(^oyd@p$SU4 zPy--7ck~TBYqeYnV;e)T*@65H@0YxQnc-9nOP+3 zAk?p^@hCGsvDmOtDRB^D4}US|$|bqnw(U*MX3P=5ENl^HrFcj&&Fhl-lWeX9GZ0AGpiytWuRo5$OK4~@gJZp zG3v_GJ2&6Ga9}60%*#hR4vO^$P?dH#+9aFbWad^N-Qb&d2H8A^z$y-)tv#l2n$dyzmqZfdmi!>rdul2D4=`Z}`*Rmx51FFcziYOlGFa=Y>NG$9{D{DZGBfO6`c-CQq87So@Z4qgv#{w18G02vDv|v;>!G0?DSvBn@5mTb z?vqI0ALZvU_QRcL>`P6sNHK(CE-sxqlI+fCowysYbFuv(>+I^ICP+si(t9iMkyzu# zyPaDWCf)L8q79;)8S+(sscN$P3y$pj;`C?WgnM`g>EuMbLtDzRBux_Qgev=twhH$A zj+kaAUKvf2C{*P{!wk?i=116Ta{!(Kg;~W(#3iXQ@50__*6H{~*<-K$$nS>8g-D*m z!9c5gV(7FT`Bo1FgldO`Itl3dsVT+Ser7tRi)s-X8Kf^dI88C5*6=Thb(FOYzI3@t z4+hV*7qqWE!zLTS%alT!v@0Dh3RJ5TFAl1opMW&YkCU&{Cm&pOo3z~Urm8xD%@=5R6&M}wNpA)6 z2Js!}OCPV7?*jBC)Enr#7I6pf3HW1R`eR@07Y{@WTf^Ap(vsc$7@9jO#TQjqRWNaz zuyYJeVVNkuvJA}#PXeq?DGV1`#(r7d>&d~buuqI$KrsG_NI*2cQ*@9b*zTm*2_X~@ z(JoKGEE~!+QjmZA4X^;ZNl*qABJDdH+dxIk2Nkv&4Q$N>4&>#q2Shj33C0V5iRlh# zc8))ylLrLv?CJj(xZ!`M<@$U#1qkf;6;LH&fzA%ODU80F##3h-*Rw$4iy(PUT8PcspSQCUh8{%ph)RXhcnd8a z30Encqbj5xZ;KS{4yMO^^IX*GYQ-Du;^mHw5k+J0eTglq=B}`9uxYqgmhsv?tj&u< zn~s|DkcQS->S&T`g*n8J9q!1{FedF5`W{BvLQFgT%l$b=Ygtza_W`Ett6@^etxLn=%xTg<3WECCrauW>4E8 zT>omavw2y{@kepd5AtX4Sc<4&YHsPkab2Lbt*Plym$B_i>?-zr8ckYrgf<&M3$Fy?%&$;0MrWPTP9 z>dBioDmGJoo9PSsURsE2pfB|G5i3eqpN1|e=9$PUk$Lx3LNAvwfhD#3htVE@!wq=4 z2<<5+wt5o>yEDeF3#>0WW<_JpOwV)v>uI*hdb>62&^TqWA*==db6G{C7B}TEScXa% zj}4`d6-*BE_t&11<>Tt15qno>SNn;PqX%h7aC|=}6S9Z2p?G}Olzt!n`^&lb@T9#6FBFfxyr15Drf|Xh# zkf@xLxjz!}cEd2caEcO)Ttt;EPepJ{O-+V`d6(Fz(AMXr+`wWAY@4JzC%SknB?kLc zeBzV^d?%#`3uF#3aNQ`1()i5i6~Kx=Ty1nsJwGc!hw`$Z5XUwAX}d1*-125nlrab? z7MeM|Eh@OIoLaBj^+uvEBMb^nYPdGeisr~G4?B|I`ndysk@L;dj#4`kHjeCef8aww z9c!43B>As(+n&P{w}*|dK2$&Hrp?%K{Yy?HW6Z;iM#|e+iL|sVk&yCWkxj%fUP>U5 zX-(Y%lrwwmFd*Cl;8D^@`y_t@38E3(NehN?_La}{Cy~Z8F3MsXX9%O5k?}A}6GHQ( z^)f^2)XS5o%~~-p5C@f_v~%{uQ3=V4>SYWfQQOH>F^3bZXn-sbyPZk|1DW`?krD`} z1IZfwEH?71*%@OF$M03WG0G4|+BvsnlnzL}NrI|Jeq)Cwzz<-R$v2)I7N-`#BdY`R z&H|$|27wCsxpM|4lqEc_7nUd%Kp;a1{S(reS0+i@|L^rt_9!HQ3^E2#N9^GQKOr}B z&EQ!ivY(g!SY$@#L2?&%Gq@c+8WQ}@D{rLcyBrWBcB7Ny?{Re4B8 z)daLW5;DL4Bg`Q`|X!=n&70d~W@k)fdz0?cFD@XU-a_iOP^KuwPGi$!r z^U6(4zx86R_ks0F)Ux>>1b*d9%PshS5z*u3d#PywW-r{FhqnEK1=I|A@tAYvy)cVw zmh~+Y@TA(an+TT3^khTzs0Eym#UPc-ticx=j*=KHiGaO0KK5QrSbhb~v+CKS2Ywop zEQfhaRhf)o zt056QpCG%INxZ?)iYGRMbu5q^kkQwSeFkY+A`$|u8hH)UGKY~m|BFeTuaa9YAv@q& zu*?i5yOK-_&)P`m(Cpj6YJN=O z6;4JxX_GyoePW4q^!LlHzfTL~J9`A_*%66%nWaop>922N<^T8&A%1n@^g|NwF#;1upG;U3a2twaK$u9Is+kD<^mJe3yIdbFCq8~FO%gTtZO{vOC-uY=#g|{f-}L1 z7eK|!J<2p6u7ZE$DwC_xQ`*@c)IR@Wyy(qP^vFo#vP~=))tk>N)fDVs6Xk)P0I7@|zBetOfSp z=w8(Ye$2l_gXokJFqC@vLKhy=jRzBgT4?D~c1QMdUEv}+G;21DS?W(&5qBOD#Hh)B z1)zzGm<7KpvFHcFQh7SNd_*y&%hYmSrMaiW=*hdBH0G0UXeIbDpt_+~Md z#%n$RkS6E;_S&{`PSnkpm-X(EB^}H}@5nC}@Ey{sJ-0dAg%mZ?>!*~grQd9QD)?Ht z;fZjgJ*DMUz!B9Y||W{Q3`oLDVo$~PG?w>uH(C9?xqxo! z@qolbnN|x2mLJ1OJ)D8z>G;DcnCKmw`e%ed3a|Dm%C)PQpBy^l$j+Vcm98pq)#Pya zBYWQ|F=|)xZgwC+^A%*!a5!%TMN3Y2L5=EN*eW26QV7>RUX{Vr9K(&8w|b&dU(WSW zh9N0VMdi!rNGdl2Mbo{16_#F>yNdsGqaFr{yWMQ<8cG7G>#s_8o-VM1(8WO`hA!qTHQ`3=I=dZyt%hpM#jO?u(Y^q9pkJ^oa3Z14VzdGlyc1f79{OS z2!!R%_n^ZU+8og>i&RD`6V>uKIDt#nTLM3L3CVZGnPU&1U=nlL-$@O)A9pbv zUCUt2xki~CWo+n;H8~!w{9MN=*}b|yt8}~k{f%@0b*Jq^*P6p6_bp4(B)HXC-HuJ} zk*Un)H0$+x|NH-hInI6?Pgb}n>j81T?6Sn4UnIZqPdxkf z&9lg4m#%Hw78zNe-)CcqvutI{l4uM^AvLjS`Yk%UzV>cs!0G#8^bd1K^1+9~eRVyo0{6oYXEfZNp1*w$Y_n^HA!Iy#jBVSj z?9PXE_ldLEu^Ilx1|#-7U7r8@I8t(0axn~T`}n%_WB;Co?CZYCb?z#B;d~s2^1Rlf z6O0Zq*&mBN6&u&6Q}C9Ww>+hzEP=2YB7i%j(*hC-K;7KPOW)xI2+f+46-OA$#Iw5P z1PL6AD`h5+jgZSQTKhDmTla`X;V!m)42h~Vg+hHqn%z8TH3A^9| z5vsNGL3@8WyAN-Mv;fX7l#NcW+xy=M#M8v&17svHf$WXH*ZjF7IIRbG=R?{huG8$A z3|!>H?JiVuw_p@#`fW8=zEWVv)*;v?tBAn4m2BbsL4zFK$;li8C8J^e+TvG${BV zAyo&w)QK$o&|vP>FIEVndfvPm_!Mx5!?*N-vhQ(lzoC8YzX4&^Z=P% z?p;9{-43?7{H3~7$%4g{MxemSnzSk6YssRL6(k6r?ZR0)Ab_L)?8f8%#P^6+(XZzx zeIy}c)yv+11OKgw=fFOEv4=>K4=WsCE{q6j4=Wm);KoZ?3Z8uHdKfDebaD0c{SJ4Q zRphigkY5s5+2w+P{Fic5b-#{Um;Mr@sA2G1>FqRjrh^n5-(V8Z0MS#|zJ zdzgca5P}4{oB)!x&b{(5KP|A%pJtbF{9EECw_2ZROL&|bSoo*eGT6u4Vh+io531oz zb1SsOIj@>m{*qNk6FwBVX=f2@wK&+8_0`sa6;J%phpcFEIq0BSve~o|)H;y2R2sJQ zM1MVtdtFjdnO9h`dV@8e=5j>iaWwBLM7CV?P#z{xT8>C@&^3uaDLOaq+r|P|hM17} z_61n&@Hn#A5laWo6WYo9Eoy?bJ#vs4DR|97&a|9+%#&|=^vg1q4^>3zuT_kGcGOS` zu18Zj@gPtd$8MC11@TP;2mUP0Wuaw)=1@mBjne z!>_Eh|NM+nwA9@1H7YlM^H1QyWfZQT?O#=Ri_~QDiV}3`G)P2Ix`M@bvyh7djq}RB zaim^eVlbDomCoiE5dmBoy_`@a&=9UN3E7qj`wcD&cA>>p!i-yT*-QZ>LQI)-j9-|K z%YYOMudfV8EkWO($Q7LBWa_7Wmfot6)6Ds!u#GO95g(*<2R=0qLAi^F_nK09$=t(` z!%5wxm1ScUP>??IZSaYt3qN3whyY0Y@Kv1LtIKgV$)1fq+cJpmR>!B6c~2J_lnI_OM0>2CNZ$CrIAQ6DA5t~hFFX(7t(*U+Elrqa>0ix0R5z;pP{cL zLuq2h=<%ZdvGd`nK$N1z+z_3??qwz48|n~cbjOL^gtq&-|DX6sAO+PhH7_>aFy zr}dM>I}m17@y|jlkG@4$0C}i^OsK(9#ot0l_tcnO`2)SI85pg#7vi>rEBJ+pWR22gLcxCTU|wcWx$ zh}L@84k(Yt#`1}XuZG@UV8-2!<)}N;L1Jcv>j{aBYZokaIr>H3sq>$;zQ&9@K1&p? zKCqePD5~YEEX9)()R%B)`XXRaKy`EIfvu@d>`ZQne|4RA88QrXR%!lDCgm8bhNGIq zc=9d3wPIw~nCNfINAdzSvm^UosGM`)&SG@!MQC5`p5z65c{-E7nmx?2oWy)&2JKs; z3fH>*5QR)sSZE*PwG%3+N4Eb2E}KAxd4q{cFLfjMYp{x!MUTJqS_ zvxc$ovS%`prC&;c8fx) zsKb0i1|j{J9MzJ&55Vf<%SzzkHmg&39Cz8L=-uzqKz|4Lg^6ksO}7gJ2S8t+t#KX# zEco?L{El9>d$^M;=V!YHy5{V1neGJ~?VaL@XDxFqwHs>Q7wZHoNOvTrIBuX=aVV@gYJpw?Dh@z>1 zFLfXuGr!{g&UYv&pF;RgH+RybZx~kL)CdO4tV4lbCX2;@l-V@YMJ&W&^L;)_hXf#$WcCKNp}{&uP0UUvJ6`Z?H1>+<`>$+<8tP4gj|89g z(VqStJ!$a!C7a$c-R>P45Hdw?UQ&&G@>J^m%n#82+pF`Ry}9m94ILCV004OY|3(VZ z>9;3*MaRqTh&}Pg&;JdsTVsD8WQV6=DMz-*EkK2Y<2lCgjbucE4h{iDD>lZJB#*=` zaUjBc*E!sfz}oKXQ(RUk~9L}AM!7kPkHFp zsku*|q`aMPFc|q4lQEatr3cD8wqLHWL4EF+GHJ0jYxw*q#k~>V`vD!VeRcKH}_ zG+xiR*y|4l17G+T=q9MX<)IingQTi%;EAsPjdwGQ1EePSYe8IeL#3Q`4uK$MV;}_# zaYzG|Pm#{TaBT%=vG1KTLaooi!;r=lmoq}to%hMaH%JeFXC<6mkZ1d_b@!_b{DoW}P`^As z@%?6|7H}Zu!Ibvp2}t_OpTdNnSEIVY@wr5?dUWrieciKgC-nT{yc37FrOT^qd%N#S0W3w`WFu>A+YhVSC{MwHRY1EYzvg?ZIVNHS~Mn zemdFv5*a}<48wDGqj!(CSB;+VV{1lQ1+x^`+ApBG0PTf0%A)TViKE70bhk#_c57+! z`~HS=Qv)V&9!z}2%jCv|4FACXW0$Nt?$A8tpY zN$4r-4KY_NLW>PnKvZ$7^C@rW3Ax2qgHPeI^#iAN58)_L8HMJe4J5M%ggJ0b(e>Lo zz~DIP`y02KRgh-v_6&+Rx)dL=#YU*3_y|~i@XC@vy*YSf6hKaYNg1fgKcl8ws40pv zV|X@H3FYmjJpdHASWzgICWo?;xaoOsSh1S0sWw2Qr^G{c7MSa4K2fRm{&5EUHS6^Z zqV2dh)C7|yio3%=+tdfUi?(x9W!h=PSh4X^jB>9hLS&fXrLp|N-!W=;8_+BVw|=p} z$%d5avS!Dwwe910sQhF!@L+lCoghQ1h0O{gnhr-K!w-INET*shWhzEQe13=4H}9%& zzXv^Ghn24G4lEV6A(ECZu`RkrVs;hU#bd9Vq=KgV&((M_aZH+Sws(Qb#B)?4T_={u zD`T;|1CWcyN-%}*F;5M?t9xt1z!12)O|S|wJ%AJ$EB7H}Z5-Yw_PzutL zdL@5AG@Iqw^!5=dy4E5`cO}iNFt5@3;dI_Oy(g-^BG(F}bi(Q!TJ#P*Gg@kf&|8Af z4ryJWyp}@Xh0r^-7Wwu&297Lw^cIK-Nl-`4k8SJ^{cwj1%It#NTkCAzrpDvcyvq{o zn#G#qA7$za?KEI3dSho{VQGH++}t%^T9S9nKZ#-y7$i^l>XNvf+bT63#PfNZv5|^} z0!Z!yUkz}Rbe4O@Kt~@J;jOt_ByICAGlQ2<>ZRB*{Ik+fh!i8g55x>?9iwq%!&2K_ zaEMi(lBzvX#;5!9d{eRlqBu}@w;|?hLl9?;)XhL>zm>9pmaEzZ?|VR9C=yWR-^(~r zl;BxrO58m!)D@k+xyK|^E)8K^=qnif3WG{ECyaI=g1inxz4MZ>07ER2yJJ=}IFm!< zt!(h1k!wmf{X7%@T&|9S&`zYvxPP#ho2%OKbFdtPeOg#l6l=zyL;B#;xEuAIsua)! zV;xB_tqZH2^_^gqC0PWr{}G|T^hMr*mYi@-iz9=_<8{UQQ5B2r9`uthx_fOHVHjIr z`&*5F$Ioud?Wu)HZ7OCf_S~Ot$od8((YkftkHs=j^0>_)MO*JP1V{e_+bi5mFfT&mQOQu0r>t-iB2yN zExaMg-s`9)i71nlfql(CT}&FhdW{efsUi5J0Fhr`jqolto`B&yhaNP=9`7O1N47!E&~Vc*&Ju;r)PigLtViGms6$QJP`GOIpcOBELuCGm)L&{RQYwS+J}VshAF6;aQQv~qznpt;gT zr+7tEjQp51z~u7mTUaX~=CCvY->xHQ+|WTQ|Du(9oOfrndq+B_(-rYBxowJX2R{tQ9?+SOZcqW=a?pS?ODFjT^?E7AEma??O`VjH=u4*QR-RuBG#+2qmsjcW@-N~T$OWV zsYa&_`rlk_<#XC-s~r`wN#jCn%pH#uS#0Vw-pt~^(zS{uQeTrKTAR@~-J!OLmu#ck31vb5XhEe4mYoC!*2Oxso)<#Yw@?XA{Oz-wzUHff0GWTZ~LGEaC5h{_b&dZ$!=N^UBtmP>!l(SG|*E!nv24QgG&(D*@|?5`v~ zM3jS+6rclm9Gk^~fjpg~=eyk*kBSMXFc454luWc~vsYR$CJ^jUo}C~H=skn-7)mO21PN+qCbxgWKLeO$nHIj>BrBW2MZa{Oj{c0 zk;ew5k)WB7pqon7(@}AK$ihJZCv>0LMhB}|(M%83(WgR_~(yh7;48qF#Xrs8wDye+()Y(szig1PTWdU}DNKh(m@^UD&x>61Sf+_is&(b|SrrA=QJV zqPU9)4iS@9@c8sB;>28>8sfp!;s#nBD6p`k=+n8s=v%fuE?y+56h(XR92pAaNM(P% zHrGjt;F?HSs%@O7$(tBR=!KH0NiC32VQizoM&(3#h{pYRYqt5OEuq${9PADlT>4oq_LF0&h=)fUuQ9mfw;zEeBi=~+IQB2waGxry;JZ@yx&#e~ww5C39X!_*U zqlY-y@^tn)4aVIpV$LrR_eDJ#R46dzq~t;B$Q`VlgLn}4XVn1ES&fmzoG>h? zsB)FkmrS9^^{Ln~!sFWdWs^Z?<#mQ7IpU@=)#yl z1gV@_MOH|?(xqxm zd49zZ^s}cID7z;_P7~0t?%0k~2_gQU8`dMBXIPn=iO z;8E72Q*z%<;`g$k=BgRnzxq00N9UcbVZv;^y@A`I{u+ThMMPwJay25AItK(wXIED; z<+J8$`P%+5O;G;=<$!y!{Q0-H4*3E(6}o)zXk{gAIa;r6Tm@1(isa8HyECOS7qM@+ zr_FyM7Mq>_W^$-5>^%R?#{{5~ZdH2PpbF@v!LdOF_XNs{Wp|}PEgl4mH#wgzl!|W7 zxD3>|TgiXvgHW6cK)W&b;xKqo4I#zCgi+-&!-z)_duam3S|r@i#{_S!Vzet5kard$ z0#}7XQ7@ZR)v&NPx$aMA_Gdu$XP^!s-kvA*u^hCw{5+nQ)qwHzN{vs(se{nQZe4i71pIea)FW4ROD;5jt7ZK;MvaH2~ z;|`}e;dDo>Evp-RI;yh&dZf~x(+#;ijb*T99czay%QO-2C9?Na6~H+ztnQ}@A5u+5 zQwROGf1`|}w!WCVfuLpzxwQNUoFzHCaC)Z5;~cD z2Jv<3H>jPf+%NYLB$sn?wd-?TI5IC!s}t6}2CQc{%9{O!0S~I&sgl3=hj3-2Pm!i}c5nFgyJ&^Hx{pa_w^O3n|)oi2*<*?`{Pb?7fS z))Lb3(o-mEkb zEWVCF;EKME_Tb3|!+FDig*@%!FRUV666O8W5}h`^-G1f3*wqPNLK~YCjyI(T=a|a= zdbb5*9~!5tLQfr!w^drv%4S;#8<`-n+I4Dhl~-+@LaOAm@n= zm2kG}Ww7&Pr*b&^`6{HvY)5j_GUaithVso5Bc#>v8rofCM?8ye*z4l&FpbTS6k83l zZ3^ZJ9IbrPc9Ri>RWnnP}ysB&NlIBMwgqx z6`No)WGSi9`|O74TQll^NsY@YD&viLw&g$q8~dKAm87N|;u=5#Dt((L4K9RJag%B2=6%(%+^gn3d^-MP<=OTvM} z%hWiClP!`j#&3%~u@n6*&|UgGlE)|dktj7PebQ9d zMa##?%A%0^3$ur-C#_>NnO1xi4iDe+{$EP=q|zF)80ypInbu zp|GPC3aKcOLzUXDQ+rNe5NRiZlZGqaCR6W$@y=r1p8 zh{(C`+d%$2*@jkF7*y6a;!T6_cSjb^61Z{7HX*o4)Xga*lblA_gwC*oa^bkwNsrlA z7u}kIl1+B=1uBtEln($R`Fhcx%T3j=Beb>AN2u&F!o|ljm&H_OldVJ(rN%pCuOmK9 z-9zeu!0Jr)E`YdkEW_NIdiy#3#3{G9yG;oV<>x4jwxK67#4_(2vE2itO#N?d1$E@- zX`xl`-BGf>XTk4UbN`m?+MsrN?#eb6Ez$~%ElHxA-t}ASmB<2Sq}-NvxFPc!uD1AR z>?9Yh9!R-MR-3x7eKP4qe7wl90GBSeCKO7uHJnpGMuo0C2~hH`k`9gSk1ruY^WAC`TQ#i}Q$H zz!CLN{Qo=ic4*9vT>u6Eu#Ee^K*wz2?);m2>(S7X!{$Ko6+7h1Zd{}i&}K{m5TH@C z5I0wyCrY$=F(?_IW{+q=mizn9exvorC+>Q}Bs`}Rwu=}rh;Hv~c4q7u=jO)N4)Ch? zq6qQeI-V5eZsKn-9vrru9Pm5I#z6ZSSqDxT(0-{4B>IxYAQ6$qWP#j7F~&W=NNFZ7 zDELfJzIk-Sa{a-?_iga0F!ya(3q6hJEohO@)peW(Sf)U-qXfpBKMCYGLx{mFF)3wG zg}4b-UKvUl5$ejuchla8hvB_A2uu0{xxow22=1pD8nL2cZTb0+j1hGXFElHbRJpJU zgw+7U<2xG-5~YkeiO8fzGNz<`0MHQcAHI zsLUP0yJnEG(0pXP44kyn8^EMUO3#ack@3gEw!P~=l)p60?AyDWyPVr0Qk=%wfzk@> zKK#$-OB7@N-uzqtC?;IYZ$7x89?)5ZiQx_C`CnFsVkf~-t%F|H(XlmJd3lzkqf052 zzX;@{NvYVcnqBvy;R?7-hXUQz5~3Eeb+@_0vANeX$nOW-$Ho;Iu*Vp2Bbf6B1HI)& z+m!3i-R&vobqm99>88MF=Tt5>MFl=AGNB@J**rQcSVbK@8s<6pBost`tMX7yaRWhN zNi{q8UF_^Ed^dU6*v;mT&ma@zNVA2mD^$0r-P&Bv&T2=WSJ_qywm!lm2wh8gv|szS zm~8vr+&5~=^;F80Bhwz7vZkrLzo1qLHEmluMUQxCQHiBL@Rd8$S=)^;kBEyjoa{=v zf~Ky!`&!K6{{WN(2-MIoSWk0OKizh!sawH`Nb zr3ez2_{yr3|^heOQG*tvQXS)Qc&czE9mL^;3D%uF<8eKpqGMEY5M#I>AR5Y7} z-+n7_By6plrC8a_Yx)OS=`3VkaC~^im-4S4!`2xyxe-MU; z9+=DYY|z?WKh$-)6T0aow6(?O_2Dr&!jN4H^ls8?>b=nBrbO`)mJ=Wu}-}+rY zcby^2bvpkfXrtLEcauSgZdyrfdaXJgmTtN~MLYnt`5gRWyqKUlpirQPAGZQ!*(Se$ zyqq{KFch}=0P;e-bblOd^AW_wSm`(Lp+fcq#50=2bz0hKfT_50^SngrJ$=la1{Xk% z7En;vpQIAt_JyWRA}rmHqkpZKg;oKpS23ef;rF;ZF!qh=?0J{*DbwHyE5aE7Ggs>_ zoudR8HzxYBEZBA~_2Qgjt96aSeuD|sXeEuhxdx1jEcyBFsp6D%;R8?AzK79>XnXS% zB2}jL2icLnk&dhYzo;LN(T6eP@FXI?>D^lJ-+BOSsOZUg`x7rrO;w662)BBe>nh$& zQ>~e2#vOu|9;%m5RM(fv0AGDj$coXm%ZpG~q3=1c&A(@A8mAj))9ksK9ALP9#F2Hj zQ&W3;Z3=T+z|_CmEg!5JCnm1KE7%iS9dMe#Z*mAliNq_^f}c!+d#5|sALJw%;OUbGx0u8!nOTX9Q|Qw){w8w-GOo9t*mJxpKt%{>`B zXDyV8u<19?rf;dtZOruiN$0ye^l;((8uc7o#S>RIKfdp#^)bEckUJ)u!RnrQb4yE0 zNx3v1JC|#8dH{Ft#rUBRzM7s^FyrKrY-pOB@bFE?n=z_p)CxB@hbjm_cNJT}*VnGs zGdt_h-t;3kqRJg(2EueYLrkYIkx|fWrtRf#&w90ePD5jD<)QHuJ+M68Bqd8J=zyhz z+;>K655)VmYXrIm_1kYwlPCc;7{dae?IXoh3L$8@@S90-{z2D#QgqwiEC${25A^+3+;KzwFDHm(WvoA`)||iK~uIr zmWyVt$Nq%`Fo75}-SOqf!EprYiB%S*9`zewycQYq4~~$Z1i)fd@wTrQBURN`*!v^O zN{ebQyMgALx!pb4#aJ%Cly@)xnWlWJ8-%Cp$qVMdKmLzrA$Q%mmzdT=&iZt2jq4=a zF3OwYWUrf);T~z)wD^O@SvCyBscl0{v3=ioQIKp(IYfoAMiOHe)mN$P+tPo zx}LjK!8@snodArcco$Hm6Zf4ZU*?=@9XtBd<_Hno&7gi8DEKw`Kf_=lyROV9LBj@l z_g6a$WHS>Ducj4$bGaV_>|lm-A70J8ExgHWNDS|FIYYKx5rC@>O6(S{XEzeEuTd!X zI%i(FUVnIiUJmVxxUr#s*4td2%$@1twJ{`Xn__FWqlunJ2P5rY=V$Ns%lK_&X+u@Y z5^k>+%x7{Rbb6lyba$-Z@om%*i3(Tm|CVgBE|d%#mE&fS5;fQeCtMig#TPpaSqU0; z^Y{XZ%fv&W$q`meS>ivGskr9iax}DSc$UY@p!&Pk_P!`OKhSX!2}meT;+%N(9Bz}5 z`GEnakzgSGLG*GC`VL()4^-&FJ3gnU3!GO4=?D4JyHISD59L@9%*Jmci-y zlAS=Vv$G^&i%G}fk8uRZ%?ew(k(oi>3bKjMPQ(~>r*Kq+;_)Xr0(E^!yhy73J!?4%9d=s{EHSe~c0!iyY|RY^ZV<#xRmvA1nfQDgtLJf=gxo=L-Le6)LUi zNR~_d4B-=Z2XEYJqZhcj(OSQ-6=)rWm=#VMp(a2k$TS{rxkXO|YlpMZTt9F@swcdD zrqfK*rZX5_vq48N9EpLXlp3fk1IDXTu&qQxVq(`M11&RH*w#NIt&{pcL4SpqOI+9X zJ-bkmr7Sf&@Zd_Xp%aaDbRMa%%u=K&KcSz3t;tcHDM#y^) z9ng;}b0Rgk)jXMvR0sYR@* z0t;j$2r(1FMMwnTfQpHS8&3qJWNvikZv`nYnIB&TTruH?in-v-4+SZ&nJ+H@ww&}w z!D4aYj|C|&njc>PY%%`zYj#3VK3vrj30`nxPjGipuR)yuS16koKiv>N+29EgMPt{+ zf@t=2;|3oJD#w#W?}Wms&M3e z%|pD)Zv{Ygpo3>IYhCen*WVacFo;5FMG1jbTrUnul;5~{8vU9mCh~34_jokgn0ar4A#4I(_5=%t z_c`xx#NM06ndzIyY3`xS%dc71D0`lX2KbRAUN)}TW!uc$7=Jezj_)Og`iWMIa2! z`7xV)=vQ5BI*c~qZ_7hAYi|bY`Tiec%;_*DZH<5(FZry!1#IWT|5$7OYt6_?Hfj;i z76@&K{Qnmu<@~1>&L?GKWaY-9u-(VHva*Rbc*={PStf|+Murk4Tf0B|(UM!HEtwMD zXqCviM%=qsi92gL8Y@_KuaxThE4N~VPZzwoab`Sq|L!(6rM+z(f7)`;=>n*Jz~0%3 z8o_USI)J!78gu(F`eW0yw3GZ0^-^9S^he(OW}zly#S+r?AuAtfsBZ=zmh{GNE0b7C60C|WSkBhAu|Ha#4dL6eVjEOdOA zSuDuPjRZq7@-raM)2{}l$ES_Y)3XPqQ!^%3>90>!n38NvE3MMy9ZEYhDhdo5qnKEx zrDb4~l(H)mq9{Y)+f*-n|J zj5o2K?%9oM9PF5}_r1DJrH-5#7i`r~Sqy4TduEwaR)6=AJGLn_^B$RJp}nVjJ>YEA zSHRLqK(3Cd6nQrw@8;831oCI00yjq^esO0-{aFMgxY)u8VoQbW0B(ToE~kBqbvXEe z{<$DLvtHs#R6*Y^e*Jm3`+M%JNsT%y_F_VmkX0*gb$L|Ll`Dm8OeDIF9!H}OD@5%} zrE+O(Jy9EfMGMvoj26DVUr9V@vLX|U6UkOdE~h#0hQ7>4d9t~F&O)JqX>S>8@9!Sk zx9aZnKC6>oCu=A+NgI_VHpa3X$C8*@pT?5Ttr>A+n_EjzP1OJ^s@ev8Q@f$oon9E) zhj@7`WHWzK;Bzs;obTLu^{Y9In20E24A%^`Gefd+5i_Ly%v+b=BN{Cq&~N>9PooOJ z#bHIz#obgRpZGr_k?>uBjuT%7mADSlDbB$sO>V+{E>U?1nN_7l9`_@w$vGbdTq?Qa zl-}^hT>)#R53@>G!yst7u3f(%Zr+$cJ`tlJXomEK@|wycPH8OnIqly5Gs7r8g%6DQ~R222MFb^I$&6c(*x>;BUprG4|kKITSPZ9`sGC>F%`;9 zTn;wbabR~=XO2?0++oCv7T=%KiUy5S1M}bQG zlIe*{p%5QV*I7+a8kg7(FI3aQ#wxOiFXfg&0LzyXDS&LQ40`exfLHgqO;P|sQ!3Kc zLLfyFT=G~aFMyyf7At5YOPL!Eyo}QpMW~1;nW`Mrz(DYB$>~E@H6!a3AD!Qk^~7+& z2O)PC-1)n^8=Nm8Rsdp9>7g`aTb$2sTq>mP?$A!)JS&Urrb;|^!*`E-D>SNigP7R$ zTy-f_@)=*m33d8*7uTVh)Px-YPnIm3J4~i_g+?MQi3@>&pL?fk=*D+i&KFJMA}9nOegjo)%?$ zMA!4z?@@@+^7XpeoBY1Y&VLauOy>ay*sF5B#~ZJWDn+qR9V|ICS)nfp06``r(zGX z?q?9{;7-gQF$HVq8z#~;?mu#1gSi5tZf12Eep5RCQ3eXW>Y_o)L|k*?-Sc6oy)OR2SH!ej z`jWZhE5N2p#6JhfW-KVyZO*nM^C*kGt=dgbQdklcLH*v{xWFm+i% zygR}!GS5G(m!ZeKdqUh+#m?;+*;Vx?;v0UwV!baP_e!NZ>e~U=5FV-|ozMR(mVWvZ zeVJMi`d#Bf_i5vM`IWGP3I{INDkMF?Lq@V`Fb^==_Jl+QP`u(9z};a&$I-&xTwlb|!u5|MgN3azgOjrj3$rQf&*lG;8}uCwZA@Kk|I=iz zwr;!6hU9}-`^`ARH^_$lXP<5j#HTE8FdF0B`4@!`nz@6?uOGFo5Em!%^BI9b@uJZo zTDF`pOauXOdSmLqo7K||gwb<;n55sXsPxwfQ}Zhaz2AoQUA<}X*l(*bIdluOOARxc zBH*J{GMTkzbnpft$yVVdk;LDY`zc?Y5`K~ld&Fi-`>}p}?}H}84^P$~hCDGH(sZ?j zn^q>czulS3gHDe}_pog#?oU5uA#`8^HC7YKV-(^JK7WtE&d$SJ9=84EGnDutwR*Qr3p#6$miCl zLO1KohqM&5Y*lR=c=(Vt2Lu^%D{{-`LeSYIU|xvQ(o;JI=Mp!WnmGDKYpjI}tk2eK zhd>m1|8AzYr_01nwSad=pV-HSgQ@x`y&sZG$;PfQVjtTP>GAFaqBJuG7GLq# zrx!9QD;4~KC*YBSsK8jV=!NHdN!_hsz|&s{yUfIX?}_PQJ?_4oYQBLuc>f#z%Br7_ z>bIUj{N3z%$Nqnm$^RS`#b!fLTUbCqSylf7DLGS{p95l1_uFZmt^U7sN&BvJZq7uG zl#7FnJ#;$8UP4?nn0GH)&~ zC}bh%G;zZ-a6_Ta#fU;gK26&J&Zqyzb#~t7QN;xi=;?6UYj^tI8Raled^Eva8J%3& z+riz>Eg;6TzOj4FhqFyP*nh_*Onvx2#I#?JI=iAx?2qWb-m}K^8)P#kNDzog{5P%h z0V5Oy^-vO-PMM3N6(alH@CQo6rt`x1A6jQGI0Kmz1F2hYITRm}poFFqr(?+SJkcRF z=mEi?Vp4)A5-6wQhfF?MC(RRU>{140P`m@PxHPgD8HY89kUPv==v`NhWE^o3VcD<& zaMDwWotUzr!e!*{Wy`kr`{cU1$qqx{53Ca`>pfP0_r|#!JlGp-EBJmfrThpd5yR+< zQv)P1b?8aR_0FC6`t8i2xU*t;A>yFDrtVe{rz(5X<|c>!*c&qElTr zEkSWn^o3yH35B<=*}m`aWbQaYrw-Gy4urOTbwKCR#lG#EK+S$bo5SnsesA2%3(k$SnfRdmEu7;Xg`GgiNeb?X5Kcz> zh{Nf{yuA}IZrAj<%j|Ra8Hf7|(OdL+Gmq>o)({M#YYy@Q*e;Qdi{cC|;n@BQXo`M~ zoD$oy?k)kc{%QFa6cgtGHA(8=uz3>__${RL9`J}^z)B=;dpfQ)U?YOC&=J$UOq~Vt zPJ9#?1WKMYlvgV6x%#(LE^;p=c$U)LKbawQ=*s~Vvihy+IfI6~9sy%x7S3(*1{>Tb zp2B=;)=OscqjMaL(StY#lo)aqq(@2J||Ur!tS+#^852Mveb>d9ofyih>nYip4rO__&?p=5Q3erxWiR@ zOmBJ85(NFP4cWus)1?d9oEfmehzTZERTsYiM`3P!aAOqDzWL%HEyWFT-*NUuK2eFj}}qQ8j`Te&zX)u zR0;gPnOj}KhJ=3R=q%e0k6O6asT54Wi_on$!m~gp{}9qQ`a+uoKH0ba3wbRp*U#au@k=LfQgW~9_j&fo#I3E?wh8I1hVU)kLeTCbKS->l|L)C zSXB1#7}6xxu!l&vY6mrbx1LQ;rex^t!_I)jo|1jIr8Fq+8r6plJ4K{2h8u2Jh!e90 z?u#+E4f8Qn4144<6QM&5v(yZ?l%}&Nc<7ocJk@wYF+Jj&kz_;580l3}8M|Na0dqYT ziqKR6Ce)@#oExZ10K}!F{)&PwZbb~n$e?^5u@8sxZT?tb@Hgg!kAg?5#dNzInM|3o zXx`4Rimw<1LkT?6#a_|4S}Sy_d_*)Iyl50K_0NwrQwagjT7$gIeqD8tw$Gc$ySzOu zS+Dro$3%=mWo(Qs5gG=Bxnq_xQyvdNbb$nTyVv%?M94G@tOmhT8#=Kh7`bx5M+*hp zUaKyfJv&aD&MhBctC(%T5)JX%-$SCrUrjFcwEW*H8sMGlBajK5r9-Uh?Vi=$WTK)} zwYJg%{Q==us=Sq_+q97ZcCZ>sGE$sbp7X4FgftjsqfI7Y2>{9c9#k)Z+P^aYAkmbL zL5(JbTlj_PI6&($eVC`TN6{H5vP!4P#Gf|~Lx~?H+ZvS{+7%5qYVS0b(OAW`NF%OJ zDTI{YPxNHGGmB^~mTl4~>a)V2#~>flvP-I+|gzdT`JEbSlYQ4rA9} zetIY(o@V2a2|wR+qTHICdY8lc)NgV+JQ_*tk9?q>{!w8~xLO}Pv0+hYV2!k}k)CiQ z*3;4kYV$846f{n?BcBo8J`UmSb`B=o5-5!_rCisd5XwxSG_&&GaJ{1hf&ljVduSBc z^G3R}BmBJfnY~i}X3Sb;n+WxL)*AyL$3-Ng2A>KOg zBZDIWf6D-?m5e)Yv0S;oL^M%IW-u#TteQB|acirHHq(LN2Tk>U)nR0S15Axr9^0tf z91xblC=l!H=`?9t%X_I|A)Rkiaq@_EvpS2_A9W!IwTnA}(!$+-`XFT&YC&0|OGnp` zHYG?*>e<}zFR|;3gur@Iyz7&NZe|`&iPHErFvZjoz~B7t*{Mtk1VVD*;$Hmia%q@? z4dDAS2Dba+ z$7~cH2`FQ4@ohUw4g+9TSh1NAeb5G=a#Tm1mYNLVeeA%Uar(=^{zV)M564r*Ng>Q+ zUX5)Or|@2-SLtl(U495V9 zzc7n%EeS72T&ekL`Sbl=_f^CBv`OdZ)?qjBghSi&dw{*x+laGxR)alzwlySYaTN1{ z{!cv_L!vC?>(={37olfEU|UotfYvB70aS%hHB51dK6WR%@`-&{bS3`?{QHtk(W6x* zjC3a2@(X$HGZeSFkxIF~Z^rRCXK`!dIkX%tZ5M-9vMMEWEz=EVh;H9p*2wSBOR{WS6!%}dH%R#Udi<@QCaUe(3jB=C+-`D;DE;3l zviTH{&}cTO`tYt1*D9Cc<>?~Y*0Qcd=hxv=y5aoWN>0@eSxH5v%libyJwpty?fZi{ z;<3ITmD(Y>@VDWdYsh$A-*!fw9f-b;%BpIBoeJe~_?z9nNTMPauw-ygl6F6qd1Gn* z*PJO?Gr~V5e?dp!y9VU~DiZC|_bv~BzxFw#jOnnc($(l#LefQbOsVjOlkDAb$Ir~G99uiDWIKwr6|`n_5!i(@sxNy-LMF=J8kN>hjc`}EDeH(THjXY< z-cPW)=%RXhWJ&l?^pqnl^rF!z6cKG}z$2pIm(aEQ>$d=nk;z*A>+yGc>RpBKA0zeY zf_gQa731MpM3cUI#P86z905G~l%2B0U(v}V5bILA5^p+?@k=L~HGV&3?Tu!Wj^QX( z&F42f5{U_`Cl^Nu*evgT+6_hfyzLQDLaFg9a;5qNcX9<=>$RNWm(ddsx8{TL^P{!7vqTp!{-uu ziuNj=8}b+>zw8Kk+SIXEaL6>2;`6tUa9OP@18sP%oW^r)MOZ0qCYyG*yAU;-gDV+S zJ~VnO8RJWCiMK%mZWBLO4tp?srH>dUjCf$5jz^*Wu5KP(C*x#C<%as8N=bAiBl zmf_P=`WU1a zk)YjWLUxuXKdD&P=eo&(N&7nLk4M>{w4{S7SnU4*G*CQz&>`f~#$2A~%^BZU^7zXvZ)oUYe}^K3c?6LnSwJAd zH9+-N?*8>dw^Zd{6sb{7o;N6*(yEqS3@Zd7yYag+vd7j|Py;7zX8Z@gc{^!8mlHj- z{KNeolloadSggjmq9~DgnzBnp>5?M~2P#RAPvtHcmG3^putNMkKwmWMS;?Gau+r+z z&~f%(qObIpi;p?pA?JA#?eCz0o~*wBH4)8=jzmXrsGB7rjW=% zKt0CmQW%HDHKya|RkGxC5oM)1naQaX8Lk$ARLtK9*~M-Q5fK==K0D?2%;vV1b%Qay z!IT$Cm|vc70uCKofZ*69A)C&+eYE~Tzh<>h9j?5V?a$~Z-L8@ys|NdO$JPuK?8nu2 zza+#roq|xqU!I2M~E@UB?wXk1VJO94eLByqc|9mEpc+P6`8mH_< zk*S1w;poOqdOybamK6~3dzB6*bc!$!AI&5R{HkOy4EdL~#f@WGn---XxKq!7Z{NTm zWKL}5%H4MLV_#hkL=QU9`8qJw2c219vf+Mf1O28VIJpjhf0)h^>2HBf9~tNhN_t&; z-PrAkkNcQY6Z{RxQ_{_&40%`_vQo&Qw4aK$Z;wDu1UkS3e#C}m*5=`+w?A7t=P>X5 zXCQD;AWNhK?_}GwQz7J_B{*Ac|4%lxAEmx|T%~AuB%|MLOAc!_E#w+2hPs|fFE;=5 z22hJwZL_l5Q}%VREYzx-x8?Y6(O7HvW^q8txw6CtM~yBDoz{dSc@bt&DA*g;f3-Xy z^8+u!2BNh!#UNgiGltL45!c3|FX=w4pn{6hUhd!(#eWv2wtkQ{uFH$JCwDa_uYZ;m zzH)ME$-(RA(}=&sx1PkxDbsB;`Bw4b5x_?y)$#3_z+)E|h zM}L;TEkUWU-DI6Qz_c>hvGH{hzUEFIzJD!ZJX(Az^xmtSEw}RMSDVfflI5e{i+;(& zZq6O7b*_6_b{V(y)v$HN_->XdYZe(Vcj>09j*hD&o6R(`=vBFJhOm??EE0Cx1)Q)6 zImcc-AT9EaAcxt44%S(-ISi$?s4pKEtS)qQcX1KOab4i4k?f~x%1ZZl;;|KB?)dgl z=omD7YQ;d?riyi@|Ts* zZfEv906(CkOo76_j1p2>b-34FH2vVg+2b(B#nH88BfaCD*U_n2z4fl-%lZ3T7#KE-Qkvj7FKUx54Sx0^ikV<~)*gxZ@%bUrAg1hY7m4p>#BgyC3H zq!J}TrA$xB?$)UzZij^wnqDqi?%y-Uc-rlIX9eAB^;ShTMYw-DlW2vKXcUj$&rgW& zCV%n(T+YI{(xoj$5q1n-m9T^ zv?n8py|<})jgk+1`Co6Rq2h3mAM#?jcvhj8E|_a^Cu(cF)*X}6W6*6DVC$Odpc9ri z6nL|zq36#^sAgm+D6kh~of!+_ zr3{Y^hRfF;iH-!Y&igR9%8VoMCp$Q8nH|@|GnIpyqC=RNdHr*U0MIAqv3z+z zy>5@EC2PkdSg{v>v|C6Q6`F8>iiIBix{pG#wv-M}UKk97e^i~z&%zPAUDIBbgCv96 z@Mb;Gk1q`=RhI-0%lJC{GvG{El>md(&l!XrW{d~+rrLfeAuZbEtQH^uiNdaQD>oi_ zG8zjxt6W+ntcV%P z0>ItSrs;QQ$Z=k)Z#}o4iiRJFr)6d_nf8>P1DrL6lw4Xu(wA9?rZ9@T+LIOCU@ooe zNn1RAfw$>h#xW|u0gq;SQ{)a)#-$kGDOzhug;TAS)C|= zeOZR>9ctF_%=VmtkLUaz)M22|+P%YDUO3PsiG|dJ#*goO6 zL|bn`^o}v6woCm1_u!=%{ZD?>U49CIkdQRaOw^q=k{sk(>RlNTgDVK-ZmFIfI<`tX3^#v6Z#mbu&G94hOW=v)JLnvE-v5w`A@W}D6P;zm@ zgcZe1h@Y|fzef&J=I-L;L_~ICd57W0EO(}Nc?KLAdyXB-Yk^a8#B6A(X@kWZ#;;>M<$~wGenZk!J zdr_;egG1R&5pF~oyHfj{sSo0|&k>$_p;Yb`Hf#CI(nx#ChY@eMl7|s5Vzj^vn@|Vm zDm@zElgr$?z5DNI%)GsL&u4OI1KWO&=%d=D#OCXI-E*wHVy<0KYW;F(gFkhAkVa@Z z%wuiCm*1L8JP5)o1OK9_z=(Ur1cyz@sBNf&;LD!RfaPCq3T*JyUaP-zJ6$l`^>IC` zg$wqXLr7`RTafgVrRVVLMB`RCT=O%ch|T;X0}z(iHYgoY@m8Dz>WHr}+7CcGtZDL5 zwNx|=fKoU-iDBesYzSd;&crj2n&f|>${q0#4<3#+w-NQu7iH9;=kjhTbO1aDxQ_Xy ztmt&oDQZ0#ifVO$5*6V5&dNF1Ca+=kP&PM~ot_4}PWmd((W;(Rdh-bOV-Ns=;Ckrr zfz7>J28Gu62n4AvZ_wZ}Oim2I0@QW6fP5rP2O!7={DGKjF=<(_N;wXT1 z)e)-r`#k~6bwNXz!m0`S<^KGI-QzYYHY(Dzx4p?-fvnydf0x=a@z7|5JX+zcBL(1& z-eH~KtoU_Y>CGU9Y3x5sTf^!|UGD}5QJQbS+HpGoPD*vme4f}ZV2(yh)Jj~HXTD-9bb<#N^oyvHj`y|8A3vW!Mt);DCUH zB!Pfb|GzJuZR{vVc zS(Jph8f~~jLYOY|SXtIbmH<;pf6nPW2b4?7Y3KWs5=_xu8<@nNFH`gf=sqU2q^{#Y z)B4YUA#TrL@M^-Wd^laA(r)P0b711`qI0AO>R1@iSh)-ZlL`?mnS47tO@k4dl+sH< z7N9kKpd3^7{;m%Geb^kECI%=uxyb|t+Kf6N>I#@F!n*6lzxA~yhBEV7{)E0wua8)CAsS z5_l?-KA*p1c++FI2nr;0u&&xDQhg3ArEGb0{LoDDyW+aOZ9_NmK@B}wzwc@JGv5_JF4swFrh;9qYL1cVc!k2gP24SAf zdZE2idADqAcR%UKV=;$ME>17tCQxTE=Ece^mOpCwg^iK&;p6;RxRsBh1L*OMNuYW| zR!fuAiOl^8a_RC9n8f%>#0&UHeV@orm-eCvXNl9)BdaBm3fn_X-AwJIvi3 z1iL%ice;sA_E@>VOnRi^?^-(t$}8Cr;PArqfbUSQzZ71Fc7g)uO|altYG4E+esrGT zmA_f`h7VqR`>H6~i59%uFg#y*veT!P?FwGk`t**ZA@<+aI_hxWkM{lf;e&M{0Pi`z z$jVV6r4CP)o0i#{ivGO#g~8$wfjnFxjny~93e!gYf!t<95;A57Sofz!Ts8{6wmJ;e zon=0kT2nvIXoCWD2zez>SSR1)faX^v*C?29BrSva9lM(FVDk`q2G|Q?Y|CHJtpBb) ze@j*RdO@M~W>g(tAVi?4t#T014nQigEtfOw<)Af7?Xd2zsC$U(2cjfj(h2-Z>+MGP zUBIu@I2O?W7{s3O8=%gF_(edkOZS6rI-zWnEPozLSSuic!QtsvKVP@%JsbBulTL7{ z0PZzncs#$t@p2mYXvzag>p|GD+jg1ou-1{97uq1XsN5-^Ad(NnMj%l6_ zgwr)<;@aoA6HNpTuV)lvEyRxI)%WghCRa}}lOd03(m@!!kHg~e(`8ChdI;1d+?cU} zC{CYanuJF}|Jx=krW@RanapNH z&RKS>^gvG9STSD4>8UND5}Sg2wS!j7?YRog{1MQ%I5}D;v#d7(38*m4PM?!Fl_;7J zFSLZc*C`mdb7f|c5-)s-#hWs~Te%8N-`(Nod6pz9Tgcwn{;M#%3ASPJmzz`P6f$n3 z?(4UIk7Y6#|4pBtnvpXMBGfEZ13o+wArOq*TNWnQh^yuS|IU+|h`IA>z(Y4l>#K5WJ?IXnm_^Mds~ zfLTk|%ao3<4fJ-R!sOPpM?wyfKH>Fv4Nt3kIcGis7du7i1hLz*M%3a ztKS~X(t-iN4M=t+UQU0Px&*pnep!#pi&(vm%g07JcJb89c(Iq+wQ?RqO+l+tPQL~G zy*n?TdnviAFlYUMVNCw2Fpt^gP=GHVxv`d~n9xdduJ#*($17F2aFpF(oVnDlJ5IN& zfz``Q(y7ian^oNF8Trs-#uVZXyX4eXnz`nKxupwswc3m`rYcEsZB!9k8r)U(cXNFt z>*7jLN2_A~A)*9TG_owemz6LJHrYRV&Gnfmv2a&kyJc+i1@v=&7c4c^%t?T^r9N=Z z-%GXTN#|vm(6fxA(^gl=th@=ZI`GzT;?veY5|H0O^Z_eq}*SY4BEL* z^}y#JeCiW4hE#%}DG>hX($LtotPjOpv?S(0^QFrHSb~X7mfP+Z+T+$D)C*O_84F!O zFnPgB0pu*)%dlPPe{+F5UaCY*2+jS47!;uB1UUs0tK10|S0YeYPrYq8-*?KVl5$5^ za#FsRaB!fo&xV`+a72y!f6+)oRS|d>>Iu@Hgw}bX1jH^xpdLaJ@|G6HI z1hXoNPQ5&2(vL28pY2?p6m{yTY161aCpUiGShlV%YuZ($Ata;uH?M^vwDt5GZ+EWt>1=V|w)VT4Lg`&NM%KlyJk|Mk6)-~$#-IvQAs#1>fDdl68vWwy8Wp7tr zV8I|_C5J)FJMKafN75!mBZF=o6TVlBOBW-#OJf}gv`j^SwE2EwN9_^J3$tb-g!{Y? zt<6%^0UO48U>lm73zhA0Le%U)mwLT}rvU{{g>pPMX+X-L{AdE{`T&V}c9MB8_S<^A zBe^=qP?>yf$sTbqGM$DND-?+B1E^$>P=H`?Jh07qjZ~a`=k$~g1MZ)1PIzcFShE|x zq7-@CUBL&!>UajzhrU>0?-7`lw+h=6Us}; z6)NIWYk1z$_#Bj7l0)k%$Zh{~VPuH5aEdhMX%^9qw=X3fA8g-JrE~M1)bJTCsZ}2793Qq31W({R_w>wC9K7>0=(;Ol&^1iYGyQhnb9iGKI9J$3jSw?NB%xafW zTL&jDc1}3{{yCtMu2!*j@s7zDu9UWUm_;W=GrlCr%Br>ZFW_35t7AHy#iq04-dN(Y zm@-et9ZB8%`i8_In)65E(OE~=R}0DMv9~?%EvC~d8AsQU!7%%BtI$mn|3}8uZGk0N z;q&kvj$Xm*s7u2BE*7-Ts3}zuAnX^N?6KjASf_1`qtmt74qlODo+XXPg(V5KL4Lp3 zu?}GQ@gQ~`1dlecXYtof;>*oKAO``W<3S3(u~@`R%0u65A#{bO%YH@b;4***6ke=S zZ2D{}c9YM@#0-S|B^WO^_N*b13C8wTtq)2^)t<(z;1Si%DOiV0#G+$u2gn6%xmNO^ zuT(nT)R3!{(xGsuwOkVN>J|KFU;N9JQp>wC%eY@9*k78$oQK>Tc!{0^q8>E<9U}PI z?Mnggz)csYnzvucJ%F48x61a6*T%s&f%X6NETHg22ZH3;`@5eNI%Sw zc2rM62Cg%Y|8PCZSoNS?9^3u;inPOA-#&{(TAfyQo5JesH@_|B=JoKbFWxnBWQ>$w zuP{G?jM9C4o6w*?z8Z|t*)}F`!MG(u^(2qrwLyXx+#N#Gjxq7bow(_Fk*66vy zcj>rY?dUyJ=CGRDh>Hh9*^abchE3@x@jm}kZ#{uHMX?J8%x@&<=yf9?z7!GXL1 zU2NAymx*6L*@n}G1?>w`u#>+W*(xd+hWo`Iu0%vr27ty%Lk!C6^WPq=dYKo8gN?gh z-Kk1nAaC$GzwdO4R(FPSnvMwg>=a+5zlQ)3pK3Ov1EWU9&EWIRh9bNbScJxq3y}W4 z$H^0W9_H$mw#!d^<`juw$6VfiN)6e3jP1Bqn&rqX=c=%WTDalAuNW~Njanca{E?s| zyI(E*L%wKp6Sr!S+-dHN##_(yeujyUCNXB-QCiB+zGyQd^X^2Y4KN~%jG242Et9UDL6(JD-o`wovs~(OHnh(~O2wW||(am;G7{nMF?YL_bxoMtw(vf+4arX)+XQtEVg~@g#~?|%F_&?sg~U0 z80z~saz3U$R2y|fX`Qcmy}n?^g2;w&JerDbkI^QfA&w1|7`>PU z0altr=FZSvLF}6B4ViUfA=<+tW^&gdyHe}BKK(Jjt~tyBtGuzqv?8U_4uOpMghh6Q z*#&ZGfL-ZQq*>nk0V6U{oqGEt{(Q9Kul=6ikj6Euj3E4wntiZ@nfa#TC)Oz32NM4# zJq?nh4f-x(u0LTreqE?{Mrfn((-_tb>9B|^+U+ToC-I~^DgY&exPCuQ9~Ae znsFjQ*+3v)N$s;>`t;xzR%8x1QJom)I)PX1ZWD){jQd58? zB=-SCs{1w*73j{%zLq=>rAw#M91nkRTW~JY(7?quM$7Thmt}wB-D;sem*^r{xfX!B zXT*6De*+4Wc;FX<6Je~#YDD_ems5`62<-JKC60x(<|3k~j?ySiwi%N~OiX>Nnn36X z;@h}c8eAv7E-NKU+cRqc>p=oz&5(IV=#6dxKEg1do(`ES?SqR|2gOXDZ~NJX*E;(q z!xeoOMZZs@kA|5pC`$B!a1cXob#&A zlEjX;u7t{I&RrF8rp#X9phk^WGLF$*L_L_jO|Z)%>G;+2_lipsNRm$JcqG;x@;*^J z0g{A>H(wCcP!U5LI&>w=kuofKZ0pSN5V=gPZvsaLu?wM(Kqo`)HOV14vxIQVrL%{4uBenEnFT4pdr z^ygkT2k&09Fnc8I(86;T^yHqVPX_OZAS8;XAqr}5S6O6u+!!)FmP5L>MSp^zE^W93 z)o!#=lf+L$ZjF-o=9ct0fps{-dg~PmMN3yU(^+Jw4z{d|2a&!{v_@qcMOWDfM}!=? zXC*+W(v89pYLwJPgp`OR^+gr%488S?5KRfQ(UC0SJ1~$z$`>q+)1DurAuntTkP6Db z0FRTvgdFPJU+r&eDB;>~%n@Kc2*_lj2?3+p1XwECDHuX`swv(L2El|V+x0)fmk`zc z+f}(&$vQL&QJ&|;`?FLLe)po$FzflJB6+F$l+%O<1Fh(~a9r|`vU&Kz0=0&hjLr4s z+_{(L!Es!RkrY(44=Zwju(Zpl z(nNe_2)NUPjk0aQ9kniQ6)Ir4gd0SXr7l8BG{I9)ry#7Q`cgEZPBqohtvRNG%=4W2 zDt9^2Lm>-m$8n9hHG-8JiLT5cNz1|R(u>dayOhp0)gE7Km7kei@|~~M%MDqZGA%e^ zam4nCUK}vz9XN@Dtw^xPm$QD(8udsIX??}7M2a)J+b~+nV1CZQD23{6h!BNmuP}-J zYNB|ejDtMn>n$5we~fvr-S&s9oH8&h5>pp2_sG1NHwQ6qVJ%r28;eSvbZoU`eB)@QFv!=nnpvLx=ykw6Bn~nfo4+po2H;DWzK!(g{Ga14j ztp#sKEnG-r4bp~fU%z>>gF7?rK6}JH=k&fq1ofw5r^*D5QIJoXS_<&<>Z98nwPcFhXptQ^z@=kHc2Xcj9-Rw-!LCW)N!+LtXk*Ckg3 zZNa-r(CJTn8AX?PqAux}eNAB4gi*CBXng!J!O|6ZJD+yuRv&GPDuAA5k$!q9z$MAK!c{q~7&H1pN*D7y1QZsJc(f;3i zR0^4(?N!1`QXQOx8-!J~vt<)XffX6EB{A+OPZ5YH)zWVjVu50WbAEQP0=Ydgt4@(- zQfl(4-<9(nW}3X9T)x_(mNe24L-l+J??>+lpQMohaZ%5^{Bsfer3gsu6MMZ)*;OGQ z3xaai%F(hKR5>zIO_hp@gRzYqKg{UKij1#Z7B+Y%fx%&Mi{d!g>M36uBja3QurhG! zcNU!Y$1@$pLX1mQT9qfX<*Rn+1IJA0w@60|rBfjwdIOoIx-+Fy;dz|3wziNY1Grl{ZgV8{>Q^ljO@Fv- zOiNu~OuiNZtdnF^DAc+DtUo_x)B>9YZ{feg%+$m?!+G!t)Ute7)>(RmgmAGB{hW5Z|KHg~>Zi*Jpszra(41$eL+eSm9QW&X3=`APO(8 zOAddW>1m}lCo}SO?PM`9v-yPWN0!=jncXE66$%ePh%D}19VLG}dib%UhL_w8d|R6) zb{BI4`4yCJzxL%{8m&Qz>??}0;jZoI-?e}JMTcgUIKe3iIp&w%(>ZaO z$qUv;GYV%ou1#QowMd@$U~Fd-V<)I?5tg~W!=QPsj#{ca-P^6fdkGbuTQ@BZ>tPof zMOY$hv|sL$&w9ZNl|y{YsxzF;UpX_SYggpgRP{W9JJEqYX|=s130+VYI%|$Be0n&Q zMWf8B=)#v&>)-EN;O|^PQilp+8;VM~NmNI^(mav^KP$BiV3m=OTs^{=uUX~C+Z7pE*+Arp4g=)4ZnK+yIFIrkVHY* zPZiXeIHNgCG}8ES+>Wy?r*119x=J-4quH`~HsgY=seQYPS6`fGBWVluq+`DtS)m2~ zPMD+kpcy<)h1N=e3aoq~{l zrsA0wJn17)&$9IP%?>t4`eqw`Vgqwv!$|V4dNQGUTh_|P$rP@SR)rCU(|b2S*W6Dd za$scRu+{nxh@}H&(PuH(!XBd(jy~AT&e_sJf`rz5zCNKIq+b|900J^evboCk6Y*cg zr$nuw&K@3E$k9Z*!E;>%!eBJ2@K}??yFC>?Dga)xMcLZzl5d&~g#Jomuiuk;;_KDYOW7&}uEz2K@Ji9Vqr2fr+?EbD%cL7z7*?b%;X7$^VVeiQo z;r6z{Iiu)e5Z5T+HfgOHS&2SevtPgP@bX z!1}HlT)?b~!@MNX!+<>=Z6F{C?_cF2;ZxDr}nk6;*T&Le0z*+zkV}{ z;MNU%p84_hi>N7$h9y~jA^xAW?tdfu*d3H2Q`c7OlaTN$o zTD+pGudcd0n>y04T%-Tfa{VaD5BBTxerdfG%I|4cc)rtymv_~Td)m*90F68JW(yJN zA415;+9li87&Nb6WJ>itlB$PuAn(T8qWiL!nF#x`oP@#T)w=xD(+=47)<5|9D5)N> zY_CY^)aNbyUkGYnY|fpR_?#K=FxR@yUMtnPMZ9a^z9*sEuJqLrnt%Ia??>V0!4dVd zdW+IV&Gvnu?VYZX-fX#?`e!yloDR6VIB(pxL9Va(M4D9b(%}mN(Z|bLV7%S-tNVMm zJu5!BwU+yt6WYB{TfNxbotLjMDf5%N{BQ!Cq4bTbI@Y^7#6mCE0ND0{p}b3hDEY|^ zqWZP<-Z}w49)zhw6UKI}s4zV$0~Mqf->@Y;|JB<-yOAD%+iHs1*TB@a(I_z+MT_~l z*-kFZRY;AVdrpy0U?&m>z~}L#im7C2@6x0X>IY)R;q|(A7}>CFezN7MjSK!2FZgNJ`-WIr$N_nLRa^)xC=C@?jE%|1ClLL-r96u)D5Vfr z^y7+nJND#tjkne#Ikniav+L>*7PvoL7|uSmMMSi9CUL|cQQBcd;>>+HjO3U2Rp(Av zPodsA2f5&G$-0%>u+0A2;8FvU{D{253vl9dh{VWSBeIAMBmWBbmu zg!1mz#3|nA)*l^72Mn#!P$?QFxUJh5UEW+cF_t$3x3-?YPPv!F@dRreVCzn}bjOOC zhFpGCx{zI-Ni@vFZt$fz-@>sPP9HlU9>bUpl#-Af&UP4GPNsbSi?uxP%kMd%Mklwe zl0zGz1N;peDNk@c=Sg{pM_4Uu>z**MHN$1WW<2Ko99~G4gzL2C*|bo)8e3 zREGvF6h#1WQCU7|Y>7+`lv4i;CFpNvXvL8;exv@8kf@1k|4B!Cn^!HH?{9HxFcl{9 z-f}mpEkxz|W+0<3_SbCNGCpEu-B{tkYjx!!%qY&Dq2JG%Ymj`S zR76%Abw~|{PtdDRIM!gq!XlLk?DPZfRDwM5EQT*$4IA249%d#IBnauZQJhCwr$(CZQHg^+dV!1Jj}iC_eNAi=0jG#RK$v`+-rZ! zlC`(Ji-w);Hzlt$#O`P!q;Xb4oQ0U07}RhzcXuk3JaQh1!#x9Nb(Q$Fq*`9uPzk9jp6ws*CvGK}o(2hvgR>*A#>R?1N4n1P z8Gb?LD^g?}fSBbts(?Q|#)t<-WFvgwAQkr>2g>1vNW3`<&2QIYm(3dUHN9eCt52>9 zb2!_YsoGBU>CK|WEu87Nd&@(xbVhi)=%QFPe7g2cR-cExgKaE%+{`n!r!y-!x@qta z41H}7wfSU>vn2SjvL$P1sl|PFnB8A7PY6hqqF|A3GziN!&>{vM(kHtv`)ja^lx?`J2Ji>0ZH@OpxR>*w5$xV0 zh~u^>k1CY{Ta28p>Y+(1^cQnR5Ne{)P4H_9vOuO3{ZlAY@_y-(b*fONRDBteb-GZ$ z{=jBseNkdiE6TnND*8k~t6xVbRUI1eih`euiarlmRVBbBW#64UGwAQ|4n>~`dRZCO zvInG5hX!p*p_8`N2U z8_RoYFsI`4J9dNI!1zmnrA#td4Woeo=c(&$%c0>}K@5_gYq?^3D{Dp|-_ ztdZXE`>3Qh=%hC&r8j7$H>jmI=xrm#&=*{&8Y{CA7k1!cF2jzS4<6mqtgC)TVshT#Fda2okLr^AMo0QnbR;t6BclwFQyS?_@|Xn7GOqLXcA?_ryRu6{mG*tU}RAlmj`pveu&ucjX#r>yJ7@Y5XT;N&KZ~^k2?nVB=>0 zg}y;cXnbj)hNy&yahby452mpjke+@g#roJn#*El%gJ=O3%lm4HjfmbvYwPQ$1R=^& z87(io1Xpg#%IH0#j#glN6Rf5X=;ii;45FJ(BphBdr<~jyiA^;2vm+zRF{~h{iq}yX zs)E1rt75j{iB`UjDwb< zu6c9=EbfE`Q3FmPitsDve#( z8lXIcHi<2Dsv=F7SBNG~jB!MmTWOdb_9kkWb!EO8V3{F1DQJo}6pW8AnIq#*ZC+y4 zXH%Jz@k`0DvT51&ChkP5kBKft#MC<(?3?p>RK4l>gQT3KuVky)Cv#2{2`Qq%8k}OP zagX@R!<)mUHIIjMb(WDwapffCOeFqw&+P!2mm8qV6y?*0%C6jjMoY@%Y@T6S6-t6> zQh^nfjJd&>6xyg1DoXLlT6!5k5^GHPk=|P6SMrBB<_bbOD-Y_z6eGQRKsxNqhp}Y| zmq@B-!4U}&3K0n_=Q|q$5rQ=4D-O2D7_+Z(Y}?DCRCj33Uzi%`(19`(OQlCujL}4! znFL8Au&W!FzZx0~^ccq%|4R4o^}t%fGoL3%JA z4s)N7)0sNOR2HDnVl}kK!(%n7N+?b`56Gxl*d$^|CD5X8e+-PBU+h-Y)+9RafMLI= za=%$!6q-!1Ofi&5jwVV6hfVMXslL!()YG>OvU?HUBiD6nx| zDrH{$0TBkmk?LRFkYNQu#0aeATChI*hw`7k3bkbLzSp3B$ZdQ6C+4AvnF-nE*A-Q= z-@IevH%uYN303sWZ{$HPEExAnv!TCxKlSd;u_Jq2ix`zMMxu(&pTn)&$7|Kr+0|7# zwiSd}!=cX~NBb4|ePyMTt$WRPmXrG<=t!J$Ch9Qm@@42S&Pucj8Cr>N%s|V*NH2oXm6!9PLI(>g658*7kG<8I>t8f}>~_>PChOb}DI4GV zn9#}ya9{MY1e z2q+AYRxx$-qEpCq>gi$DgWf;GAYFoJ(iC&?8H!`#J|vCLW7BVfsB{3+kD#(C~b6%&+{MOv%bjK=FkQZ1SV5g5lMW5id84z+xUv zS8Z83z5mJJJZ63=9XD#Xp_i3(nZ8zp9~&kiMi!t>u->48Fe~#Hj|Tbn7s9ygaj%z{69~XLuJd zRuuA(mqF@U3`r#KjJ85+0_d&wi+p`#bfRbXJyEJjtJ;~<6RUueLO1`_&CgEBKg=9i zTD2hEzv>7D3vNd32#d5zI+s|Uj+Po?JCUy?#@~88*IhAZPb3Wl3+*7rKZycVN?0K{ zm=D%27-cE~?Vn8p>a3EQ@73&r$h>V|eZuHmDGUR9_*tPnD9)RI+`3gh!csLQwp;3H5@+f zJ|j7+an3=_V^-X-f0efMkLR$HTXDcc)VGM)*Z_(3gL&XcZmbXM?cZqGHa;)G>$d5M z7t>4jEG)+m#Yss%Y7+xnw5KTaV`|(dZ1!P_ZjREJ6O@N6;Vk8mhaqvWZ_b*s_$q4t zz8Z+5*sXFfnHW3i2sk+d^~RGsr+!ELU<>MK>B3yy`{eY`6`8OBx*#`{zfNglR5*wc z!5T4AtFE@~pMHVF-2z8!Dz}cqBSxlDswY-Fb{rCzGFK!?Zsb57<(V#G&?%bM6xm%& ze%&pEziA(80bf*sJST~;DO>MkUf$%`2Ov+NuOuXnDunInyvNV|8ld0vw_XN_i*9_l zA6wcmbKF)A!bQ>ZSo}aR<_3ds<66usiOK zcCp%Ha(+HClDL--PXUBLXV=|(m7LkJ(|!89sY>sY#nM|uXnQ3hnLv+b0=T_#(xm*) zx>00v9dB&tzLxEj@p$R}5wjo%2r~#jt=2S>alYZW=WB_gdkhPIC^zB$%CRUWXTH;) z1?1G$t7(|HvRr7H#Z;rLf@>6sCHBQw+px^dRCBuGZZPUvX&FvAy(KmZ4{bi}uM2B- zd#EZ7I3&=4;=gXK4pI^ESVsRu*gmwa#dZA(uZ!Cdt+Xcu&I&Wk1q@Z#le^Kob+2mK zyW^o83aEQ>q?0e$-F~3|`+dRaNi7HpBmh7#>Horgf%$)E=gpeGmWLL!?>DrwpS~xc zKwJ`wD>99`Ds(67()sLbwD{HhGh7hO5^IA7b9rUFwfEj#C-I2_JYUjszm)`W-_t|4 znSCh_FZ;W9R6=k%PfFo?D+JM~zT~mtPFMT)yS-@(M!uX(!;A?I^dOi{o&}9Rg>$8h zM+}%u9rP+UY2tUwrz`)49VWZ76wCED`Eb8dM<`Ka#jX=wH9#^0b*;U`1;eHLRowPb(p>zZs`Hyfe$?Pdfcw9q#>eM zZ^0%?HdJ-eEz7arrRXDm{K&lk?1qnIUSQv_E9%^_z(U#rk4gwmWw%@jYW|I7s*vH& z?wV_1G%l7OG4(H!j*oXbzK4g~bG�JtC3y{Ir1nX&JsjvqD_V{vJ$#hOAjlf8V+> zUo74iEbc}Ysv=b^>X9b2{PpasuoB@L`_;@P>-H*2FVd&nZsaHv=#pnRsF{#4cahk^ z`@ROZv1J#oP4-dDcj<&yRu@e+mvov3z?fD>9PbJb9_{ zVFrZn2jPd8xZLt=Q{N{3*>00*Y8-TLsjlT-gJrm-YIuqBwb_;5-CZ+U;i=~7BK{*C zmhd@@$3zzg7;6S{(c>LO&=q=zxAx$U!{bR0ez6)kMZK%6G6hWn4SZnY^IbOP56GR* zG?r;Uf`mhp$Xqc?F6cT%vGnh9IM)>c#;W>L`VSrf?_BAN_SyNC@%p~4rb=z@1tOt; zZiKrjp{&ywTH8l?T&apUhT~ zj8?L1u|oR-g%*f%DI$D9QSryNxp4!t9G>i+rKXWvOT#c|qD2AOU34G99EA1J3uhoa zK97wxEj{ZxAckohQk}z&r@nausJaMSIX&+>fOUp>sOelxrJDNM#x?x=cKw6H5(PJl z!1aCR%kAo0sl@kN=%?K-_s%vz*!Q+fR`y>tk* z%@ip}qmntO+@g_|&5)?4$5#`E_OJD;t&e2_!>X6W2%BsTnJQc7;98R^z0dy^P3Z|* zVwLWTW!7O$h8sw;z>$+=e$$m2(cDIjhaNo2ZYrV>skN$|CRIA z+%vg`^vA?e~@@8|DtY@9d>$l z{i>6wti*)%bj?J_I*F*Es~j2P%g;nhB1|+RH)_&vQNo~0nl!yg0Kn@MtjSgt7+%J8 z5{))dr>RWlVj4<4@{@VNY{1o$5cn$I%qn&+&n|u&RT0%>@^PYdw2Px9f{Lf`Y~`Zy%mBZ+YRZh`SpbRee(t zAls66a~!h>e)<&Le}W=w#<#ez$?S8^9U`n8xH@-P^lR?b`Ak<;`GwHT*#@Cy&d_DG zGcy{}tZi+yxNdE{GjpG5%IIDjdtuhX-oyq2U%^NVxI)KOF2?!r zg`q}KDjg&52X;-Vi208Z+ZFEe6d%(*cb1r~1JymXkH&PHs@yTvcWN{U$ zcss;r^ZV-0#af-dAL6?&ab|>}a#VIo!|B@(V&ytOdVo@kSB3LeJMk;pJ#jYDpr9(g zl!LViA9Wwk18^%|H9M;<; z|4Y;jgktL#DPITP?6(J*zamqX32AMma-@<1J3EkDs99|d&{1kx{ouI_CH@iiOfr2T zvHa6N%=QsW^N361Q~9?p{&w3{cl^Jmu>Ien4S@^|2@)0nz_#cA0@?9Djd;^MR*4&J zDZ8bX-+?#Q%YTYGB!phb(vM87AYy~MzcdNbrI%F|z=RL6jT&3dWp}wAc3-lH$5Uu9 zrG;kysN~~rp5_-mBsi1k_PGB$gpcZGzX+vo&_na>!}LyYcG=O?_Wt4hr`0&3$os^4 z&KQB&dEu<#)eZNVp8BpZHnOEPu6E;*wO36yJ(4M^w3FpUX<*aM`z1%W^}C(LWz}+m zTxtC*`kiyvBeE#WQ~~|dC%u6#LY?#Yx*_sRoZ`TWLz3wEVa8x(9~3W66DI&#EnZg| zlRwi3$Tu^XW3(A^T51Wm@XFcGfhoBr-^lkiqe-(ycJoX|?V7pw@$5kuxOd8k!r3fR zKa!OY^!awsF!%mHo?JF&Ws*b^&7!4WqGS34{k~HR8>J%@kIU_>|KjtRGyMXV%crgT+aWyP_uW0{<$W-|V~Qw$)-Lc1!Qwg?$~~Sj z`b+?9`H4j`{J|&sUqC_Kx^a+>+pc9XCjgU7?*K6;fr)=%dmwApuq6NR?Zfa>h`6Dx@7S8BmnJkkY_{9%ecpsO? zMc9E&hUMEoOT$(Jf>t_o^*b*vD5Z1P1LE*DQ3TeWP|U9a5Sl4P|4dVC`Sr@Vyd6bp z%)mAJau9C6UV$At{tZ5Mu}C0J7a}RsNB%B42$gof9^Q!v1gl#nlbDx9&M7GHyxM_g%>tbV&UiqIdOf(h+ARG$Mh4-V zSxeHZHlNi?t!RH2Nu=4|2~JP-6>f;2Jw(SahSbhKW&7Qc`B?wJ4h=&l^{VAg04c}< zPQfZvce;=MPY&W|2%cQrO$yl-Z{XP*Zie0BB-)-CP!R5p@APFaUgHsgQH~$C5VBUT zG;arCH^a=iSiY0PcD6@@laT!;c!wFl7jSV)ZiwanX1XVMUa0TX&AT}3bG}%YKyjke z)8fzYcMXNjUj;IRC?>4*w?;N&UWKH3mcM&SkHSXw%n05)s6GTFj1m{Y=Zjx?2pP`3 zdy|Z(TnfTuxFSVou_|#`Q53ArbacNixc$9nC7I9iMorpI?;pH+*2}Ax-Sxj}NJfY) zE&x{^-8Ys-tGy3ObZL)Y1TLV(g3z6Tv4IXBjtltOFO7w@&V>+3H}|IVQ^ zkgoALG|{P#=v(XwvYGDpZR-?2I`Z_~`eJH$trKeQD75qi=Bi-cl|W=IsE=K@6E>G+ zTGa;W79bo5-$|{Mf_q#9ENMAGfLkhbSF~L9lHWeAw^N5}AR#VKX$8CbZjfasqKu5f z4(R%8w`kYBR=l6?%@$!`v8u1B?(=tVZ%gJK*F9byURxzjTW3saMR%9V?27dPN+$^7Ef>72L z0XUveLC*&Z-nWHDl-8q@LF35{5x^nuIxr2@gdMID~y z5ePx9HG!_-!gyu>+dJt<(TPWB{-Km{bZ8ah7tn1nP^r2lG&Eb=Ew3E5HoeDsNG|Bn zSwrjt-Q-5@1G6rbR;#u1?Y?s1dnUWKbz8%Zw!Ehc=kAn-MVV_=Lb>&2>1=F{{9v$p2Q-fP`Jo~A8aiAZllGBM>IsJ+EEU%o|WaiYo6cw|=DLad&kDs|g)U9FYR2K{HC3dfLvpcR#wEE^@ zabI{yV@ru;(&x%#AE|GHZu#lhZM}|I>*~gYrHHDG)1{rs%BrzkvjiFe_(d8xdt>)tHw;bvJ2rzO8bwGpY!nY3EmDe~tl`tB}2OD{Q9~8FNz$W_hpiOi&q_JZ70=kiSrdUCTutI4ci?;?!3BpjBA!ogC4CRCjsrCAi#Pbdy^XA)7^f#^X)3G z4)hiS4}kkDQELp%dlB;QgNYTq#T}dw$g69(A;(_!#xkDnj&hKjG*3Y}kW^8}p?*TwQtlce65%U2fagN3X_awd6P3}qvJ6LXc-^1#h{vf&- zFpw{*d-OY6u@Ansajty_*8XSY)b3~d&P?;{C2|#*@B`96valvGACvL&|EALVH6Hm%muNZeC*e z&toxY{%)@%uLcv19ck?S1{Pjs93@h& zWg_itA5Qytc98%wP)wX%r=)QK*6-n-gZHPB5TJDte-XSUfD8q=72$*ECHSq~xxN$b zZ9|5^+Lhu98c`MLO*5Ij6CT~l@>{!e{lB$WGy=}7R8qjXAv&ayq;2r=QfQ@o#HxnMy8rdAUID4ZbCOu!E+a_5ryDL&wv`BQi# z!OFI>8%geNJZQ@!iJn7?`LqnL-vjYMGK^7K71I#+22>o^QDjWYuC}2QAl|_%?*-NZ z%ysh!$FWo&R1H%_Q!R@z^Ncl?1p}i~xtE$1SH%>$${?$`i>SJ;=EsQn_eSDBq~I`CayyXY{@A=(@w6_q(N6naXPW}qzK=n zPBiKm**;5p;3qwBMTtqs$`umY^!A2ECtbS zok;OkuF6mfnkh{B>-0Rk4z79X>9REcssT51Y_4@}+i*0Ya%iqKAXuhq+dvL^8-pC| zC!qqC4Gb#}ydILevgpjELn4o0hMAO@82QmAof%^!JY{Z){LVyr_aiXtL$sQDETodA!zhFqIIbIaRXA<+P*>*gUp#Wa z6=UMv1($yGdTca5u~TT)0Tjx}TDVwESced-V4G#h8bD`<*b)s^KaGnJuH<%w zVk44}luPJD(AlZ(n1oLKCr&08B=w2H#MCTrmu9(y4U>0gwqR*2&ku#;_>Mp+aH!il zr1$2J-n&fmk+k<4TaPi3wI&p01F;;!NlC_$9Ex>7jwJ}jzt%gxpqB?FlG&s{z-D1X z-loe-mIn^lF^vNqAJA*nwlr=b%hC&rXc7FhkC8$!0u3KdI}FjHLGzg&+n|I^-R&J& z8gkSa02D&_lR<8XtwiKXpZ?AXTH~I!2Uo2Eq8C^HrW}-$t;Ab*VLYB@>D#5!h%WE=$9%hpyYPFfd!ZQ8IVbmLhNa91~NsJkX zGD6(U;fN<-3QAYs84Yf%G^3JRP6)WJEC9$qDg@6BoJgZUML~^K63dU6jE5Ugb;X02 zAycHbV|2rg(CUw&0#Ld_@s`q&=uSt2j**+*7$DBtGk$;!xofySW1iD^-9c{Dtevf( zX*8{QBoMTG|7iAZPB!V(-YsU#Z~zLjXl@)hTkoMqC}S_aaq~$l<*AMH8hNlI(z1tV z^CQwL)k$w(1d#31I+f^~e%Bn8@hFS(=d)9@TNWzwSg@^^mrz5RSo+qmUT#&grH?Q~ zp(_9_PO3_TP}t;(EE&PH=bK?R<%0Z5;5f+iU~GtAyoV;Z^Ip;Z%@9stQ@4UsE78zK zv>H$VK_D18v&zQQ1UeU-h;DhS@2uggnCepUgdgy-kIZqx=A;Vw>bBf)-^{BWz;D%q3Z&mB+=y*46Dhg zA(n|hq$P4xZRe=r-AIj4rXXtlo%|_BixbCzDRs+}DoIhB{MM$sVfWAzY{LD}CKwb& zJSK-F>Lf3cBJ zLSBRO<>-4={e@YZg9;I8#2%HIlu-^MmZmU3JEnvIBYoAaSF1FFmZ#A9@b5h%8qW6E zIT&~Iagd@pN;%WAXHHIGHw93f_o$9XCUP^GjRB8{laTa#ETKs`8NZB-g0t z&y&KdDn|L^Mr{V9_*Q-~B{*CDXZRDtt<&mt#*|s3+?ieUsSI|uPSurcQ}yk6`KI&o z0;pA@1WdWYM|?$CNnhAd*I5Fb12_`A*K3|5lnE<@N+cN_yqhrL@m=iNhbxdF-i}4i z-nW*4mxp7*kK>4|U120X{Vj{4D%s9nhXqD>;@8TDCJIHtqt7}1LlP=Xt* z;0IHAR}u&>pJE~nDyDy%j*PWb3p90j--t2#vVFdu_wFC+jP-&F1OF(u%>Q|u$))ct z^zj@(9DB?DBWFra5XmkVt^LE!DhhEacJWZq>8 zo0ipLcif(u{m}AgWaoUHQo=Rzz5ln!FrhOS^|Z`P3!7U$M>L%hwDj1HQNLH_B5_*b znMqLG82+zIg(kGf$<2TIV=Omv-66(|Ai*seoN&Q&@}+|l9ufaTckgF#vP6;-thp|?pGXfA&VhPR85PE?1ve=(O)7tEWxWf_DM!M$O?g1lMzN)2`(3R;(b6U6Ta^6E_RYit{KVtKEk+M?ee zfhFKgHxF>jA69d%t#Mv+*F6{Xh%DHqgiHkxbuLg zFgnmdgcLK1n)zuqn|)APj@}Vfz!Z77jXlp@IwusJ(*hfE_PiBziB3r0M{LR=a0-YS z)a#+&3#EDXwLzR!4Kp>&VrJEmhqxj2>CWC4;+JD*Ef5d!c;Q|s_5NoX>|>Ag zd#Yf>vS23J8Y>mmyh5SYE(HT_?8zwyjPmOMY-mq7*`+u$==fA`<*o=|!zh@1cmK99 zudD3t8P1q$)y^r1#Ura-J0k5pzqEy5-qV&Q!g@UC0yYp4Vm}iD#`3X!(ceFV3QFOU zK7mE=%M_FsnFiu;%7L&GO2dx53zLW{lCv6cfe}Mo3r#7r3F~0Z{fQ&_(iSns5URqL z>aVb9v{PA)#tI@`7|l)nxC>Yr`4ynrDR;iRvK)A!%w!NZzx!=zEX-?`L-zp4o1V3O zxTEaioKnu$Cltjy4j3E(sNx-F>%W@27keO8Y~AeaFK<;kJpI2BJOvj8(ItBY=zoU9 zXpRi&$wPbj*J8^JrRmMXZx=$%&ndm=tl10W^!DdTMNh%jtP*nI!mxnE27fA?1CY(>S1WX`r-Q4N@pM8*~ zfv+5$NGG@;9*aMKEX$omm|l}Fj(dm$1OYSTdVT1TwG=X#AMNTz3l-d&&>Smx%@4x5 zpy)|~V0ZAM8Z#S8gzq7vL^S&IYj|r!Pi)1sK4x75B{9ugP|^R^3D&JcwxJUjazr{? z(f6SC-v;JJYz(K~*R%LlqQ5Qc&WN5_G=-qM=$eU(UZT}&#&l*E$XI*TZuLW7=j-@X z>8GZ{v+?iu-pf`35+8Y84R}}}v|KRcPts2&{W*fjXa6v_sS?(Du843lKA^6Xi)vb= z(5Y}wFPskSh;`u!r(pH=lhuE-qz3T@EJc!EN#K(XAe6EFfqW%eMv%kTctFj3_jnHM zOcknF5Ba7fvR;YBP;c~vVro-FWw8aiR}vE!K^M_Q-HG^jIwXvP*jpNMJqd&=xoFbw zS`-hn;eb*ZDNF}wN;pyVta_qLLU!C^qL2wufijQFtM{d^Lo#KSSTrw5Ajc?vh8DH_ zEVq~>mDF`;iCpx}Nxx7;Gcl2KQx9zPMw-aQh~Ad8bv>JWE;?c%Y!cSJd`3ezJ!!S zWVsSfAz4%;>CWhWa0l(<15)HInG;w7{|N2mI9GLQRa}TD!*`6x@^(6k{~c@DB6+Hr zQ*Bxq+9P!#-v5*;y=}q=L#aBu`}L-{kpj<`nHN=p4O!y^^gf$1{!H*-tvFs7NUVFM zNWckxmAwX#Q441*)LF4-X>1v->_&(YHSGdv1)>4#|FLTQGxxV&Rl7cwt_pvUmO4}a z*zE`X|J#5re=AT>s9H^HzcGX$zpX<`|I;)`3pZo4-}FH>1-k=w1mD`FANq^#xC=?b zI+_LBVj;k1c9&bKh3%d!l=g7olmJ`~xZ;iNAKycEe-QDS?S>T1sB62E%vmF^ww^9- zKHxTPi%FURe8NZyeW|4iv(T^U5hJ<&g6^qOiHa0KAaBH&8kk_diU${@;@ z=28$t$|U(&hT&py5xE(>k=(wujh49aW#o7iqGyVEy^mB0(WC-xr^%j70kNUk1lklR z%^pzKQZ9g(Z>ERhJjADDl&rV#d=O$72CYoLBFJPbtR|@vMg=6q3L31d!m}iDX1^qG z6wo}!ryU0#zV0zkkx1o9Rq%o7u(rbRn7Gvz7q;niP z#9m8Faty?)WwxH|Gb9Q$pfPPtMTSk@o4dKDcZ4W1TJuDdwB3)QWB5m&;mBs4zk*@LX!SJ(` z-dEt@_9(9e=>^2QrQ?7FV+mg_J3)zJPOE~I$&57}z;YVd(_Gf7z_wEfKxQx$4UBJ&(Y{xtswzs{z2S01 zUHe$1-P9=_UsSlX)AVYldb7CZ>d+S}fp@I6fa_0rIXd7M%Yk5DobtW?IXqQ>xFjoZ z#=Y1}eqdq^7q+|(+4I-NI~&gpRa8FI3wccfXkCoOSktg_RyADiHUn%Km+Ry#Y-hPk zI3-~&f=+4NwHzCZVKf$SZbOl?FOGP(D<8_BCy-m1E37y|Wh zPW4#B?LxhqI9f#uU&gB~mQ*)$Ct7v;yAt+F{mx48#FbFSiDJvivbObS#a96O(s%+= z_!BRebj-;?t8)h)y9ti3#2|gYOUoucr4LmUdON3O4c8piphQre^Mse^nI;Z3#ALFO zWAX}DA+HQGv3((({*OZKqYONP-NA@}k>Z}9&vBwMcXXG6bPrU^m-0LuT`;fS9QjyV-{7w+np4S9c!CvnD-)cWWGB?Z@82?XVgHswJzK=a(nmM5~+vqC>{C zJ^h!?t|Jk}=Tge*Y6S28?r@(YG;}H0uBJw}2Vn1_3SSTepS1=Y@O^0fyQLSCn z+S7Nt_xwfU`eiH_TiNPr3j+c5s!xt)HP-*wgJ4~tPQnNK1tpLkDuKWQju1(tVs9ed zR{At4`7f(&(~p4&g8R)2#FHCCqJ{*JPZic%CR$9u9fxCUCy4XapR?V^o4$#(PFECu z_zek^*BV?srFB9q!uV(b5F-p8!PAZ)BG&Lg89}f>U*b$5z7RNZAMk>IgXZ|e)asCR zwD{g)B~bFP_CA&w=i(n-3t=jhaVo+BaR8&yahw8=FafYsv@gcsAM|(gV`&+Suy=t_ zaFGP$pZ1A5&DV5&GIb?mO0hM8%(ykWa%#l_*}JfIzgB>^gK1QZ!RSk&IFK@@*RUor z)@CJ?xY#k*p6g-~X1z*p`iI&ZFia0%Y2^0X7Cubx57PvFCcb>hP}h-a5*rI8F5&Hi zpZJnH$hS%GTG84*d~uNXm`;NVxq44H#ZaJ3zOz#*|$dIx~n&<;2*@7imMU->lU&eO-ULZaRJvQ_TNN0RRueShL zdWWy$CL8hulbEjlj}>ZBJnSwiZsWMK=Lw`QSOI?c+`*%%cm;RORdt z3chd}nUm&nT#QV^Vefnvs5zKm5$;K%yY)>;vl2}tqv6Noqq9=1z%0vwlOEVO?o zZGX?5*iUUNKC95_*mey0*3dF)+o5C>UKjANFv6|CU_)mbU8LiQxuL?V;D3jT^TjsK z1Hfz&xIrawvq5N*unFF36|lt?wGa%kiR%ne$cR(8w10Q0WG2)ERm|jjSJa9QVX|2t z|LgMak@71!)T8;d&@>jP?Jwosp5oqzl)sl-D$%a))Px&46H~;~pNTtglBEr_kdwtK zgg8MD&S}7RwWi{`{2WgP8tUom=njYH9E2u`rcDV{J*@wi=ZHXz$I|*1uXx}mK1@w30de+BggNw*@ zdk&WG`Eg(8a-|49Cu~PgUe|%9fqI*mb${jVK~@6E8NvpSA1OB1uj&(PgZ$=uG=@@X zn%PQ2_atBFW23k$dZHB33H}DfdvBWihB>&?hvqf$)C*#^eF28z_)dWoGpzW|?E+=p z_Rld(z)Do@aAlrIEX+ypmi->eSOL-ws%o!T?x%tO|9PKrWKHI)eqCOusEGt%*k`1R$&8Bk3Ci5qc&(Bf>OLzK-)sRRywP~ z9o-<$E!o=W_e+to(d(kkGP_^iUvqFvJoNI4c167VeD!R74+(Vy`ZlLYo}dLyhs#8^ zxl!`;%SFZJG{t%@ORIg9ebcU%Ck5u2q7F{$PJ@^C3h!f{Mcc`!|8a}Eqq!lP^5`VXA^vyE=%R%?PCHtybMmSUx+*kD9 zhDbk0f$Nm~p)N5n)N{r1(FpuMJDYpG8(PDK;L|zYi5qErZ(u4eVEbVAkVWi)mIN~( z2mWBy{~2zy1hOE9fTP>e@oH-mAW5Ne^&u9K{`551DUp>o05K{|G7I464 zeWvTFLfGef&*(#b2El}v3Sd2q67*Wr`Ky*G)%y0zKwUf#Irm^#;eNuOo@0a7Z*1i? z8)O~OsrgwvIKvEf!bd7#}gL6RdEe|3dK5d#M4#NKzRxE+b%w#!d1fp}ICG z=+lbKnVkp=cr)6~=_4R$G(?XK_*giVgyQ1vz=wHiW`Prf2Pn(SX0$F(ix5|Hk;M=8 zviQ+Z%*tI)!ZaPWeGYDZbe!!=G9Q!D0<&kGMSXarkE4rv;Ob0_#T*A*= z3o4P&3G|Yo`ZP~jQ)?weoQOtA$JB}f_>bB^-aM5N(z48P5{io$W7^FzBmrp1#i`R4 z`+w|P^_qy_JGMT=LK*Nq1ReK*8>g2NRJka4XxqSRe_{H3E%(3hwZgT9i|O6{#o1N2qnJju@6tqYXNgzH0b3>HPV+ z=E-AIAv<%DCxd;?N9~WOsFGHgoj0t3Pt^?dSyg+NRd8rZh(tKO`-D?rI#u%jR84j~ z&^s&P#mO8Dr=d^M#V#c9S@X{4_@M76{k|1l`aaxE+IV5V{^*@lwNjo(A4)N6kj5qji`ei(ky z__>1|cvd%gb(tL5jLAGWR0Ijt7QOO-E2;l++^}xEYLg|>`pG^5j@7^{iapGcK%Gi)<8F^q8fzw6LNe<{ZN$VKj0}a%6iP+?1Yz&TY%nKR=(p)iSxIF<3bi} z9nDd5x;-tew$acjcnyP!%kiZ+tU5djC7~N!@A=pt@k7Hbk#s}yBQO!0fqg9~j3TVL zM@1lk5>cJs{40;KCD_M0ZvGvLY|2qJuI9p{JkQ5Y8@ExelAlIzX1-fCzSEz_r0fT? zs2_m;eri_T>^cjE1pqja|6ln1wstoD1&>Z^d)aM_q5bqK_6}OtI-3-*!ah=7t7_)> zcQOm`ixcZWa= z*1)MZ>mhIi+B{Y@yL)@}IP)!VYTs;p&}(>d<7&6@EbLliY|iqp+l_6{v1J{t-T-wq znPd6z+1^By;3=&y7c+m(Ze(BZcba51X?s#p}oIPWM60p_zwr`YklI}K8^n@4$e6$u)SyNTzPJS z@Ahbf3Nv99xh#B&n?BUG?0cmcVdmeqw;<9di(^X{H39ys?z^|6eNgu+kcI405swaZ zvhO$sOObG`vG50``HSp_{TPSQAyw0_hPOr7GU?59@jPqlbD;`0X7`$djj|^ zGexM)j8UV)D=CoyOA8@_Zf>z7)V%#j;?G%!USwSbmw`bSxtG7M6+|!rcg22TtbK8svd#Cpotyy@&$Esr9 z6`TR%(hum3E3rREnh5V)#9IO@3u$Xjazx=fWgwz~^WEM8$=mC;uQkmukkA{}2OJ%C zq42%PZ|+`?oA_&_)mPYYh;t{v+j(EWUX-CA@HO=#WM6?UAzE<4$UP?lS|6$}Ptl;| zNX_Qvp+~B2u4t@_d_Hx;3+bDb*v(}YC?GsRf4(qfG?UVoE?1c#Me(x#4{h%homtSe z?LM(>+qP}nw$Z^8+wQPqt7F?XI<{?e((#}7AA5}b?eAcpy$5U6s#_*^e7vkaRzuPan@D-F8O$&Y(_9^UE^U!VT;I-@k)OTHN3p6anB6ssXs;x@J%4zC>pEy z69}`+aITB>>>cc|`B%w2JKa!qSG-)5ZG)Mpr9Z6x7uuEPqaU|M04Xz_+rGS z(oT^ije8E`WZhjJ$qqUhAx>$I#Q26_n2ZTO>b$JSqMhbQPQ6zoJcLFm{i*%jLpY9i z-RQvW&^h;O{Bf9L7(WfZF8y6V_lY`<(Ch<5Ibe954Cg|03rS5Op0_*;I9GC&xt+u9 zSLkcL525~!_9C0h8Fe`<>7_RusoziS^mfQeAvvsxArHm2N7F=+tIaRx89ntAOw~R- zclGWIH4&yJ95T0e{>al=%~Ef&P77#z*HrjeA%Vsi^u%0dyc7zW(Uol+SR113G1$^* za8Z#ht7q)&Qb;DSwg*Xk9WcQov#+Yu?J%;+^BN|uymb>0{b)J?@koA*GM&&H1gtP<$DbvOKuWloo0 zZi(m>U#R-xySGMJ^arRLH4)*c*-UZhmczqYAct}T^(MXCEvifqNCZ2 zBpY-L_xl{d+Y|We?LrMqUFHTd4jMo62FXL?<_A0ZWp+eXZN+s zAGs`UID7)lz#1#Mo2@Y2_=VeryQuV7+%flr%pI;y?ysK0EtJ`1rJ{!FYn% z+;Q8m?D{j`xU;mYA6_l}^U6S){g!rhPrwIQfcm+o$LKIE zyoK{Jlt-Dgd#*}d53Jprr5`=VX7P9+bX<=ad0``y5qgd7&wx*oFNO;yIF|4@+&g{s z*pq#%VKzpx-+0p!CDx3xMLHruh1#kh>!k5Vqy!Peg7x%$f!g;XMXKy!`&9$hlx_(z zmPj#kuT9Wb?l#~O1urPz6-m&?&SU2&;oYQ#RB9vW9_KSrRib9VVtn9D$Ta z?}1_zH7nk4n*iVKYn#iE5nA53j)pOWrNYo3NhqWn=itzjtg9}a%#tt}s>$-M6B)>4 z@?C~Yyg7Fgz5U4lyx0$94{46=JlS+mZF3fEdIKcO+UIR7(ycQ}-Ag|V$yg)&R00>V z4fh2m_Z`oDTP_Wc#M7(iDH~~i0t%x4>hWA~O=NO>H3><%!{fnpS8Dj1vFuW`p8uUjjcNeg``48;Tc z;?d6SFFk?))YL~#@3JACZAm*&@&0O;cl~XCnJ2ELx9|pn%JoOw0+wKTbT2MlgbylZ zbUdz`gs!YTRV#@)gIwocK-43)XTYr6aCg7N@SWax+{mHXU^g$DMZs&iC%i25ud6eg z6E=KWKMmJoQ0nkvP64d_J28!NO%!z8)%RNwkkVjpEy%xw@wUo0G5I61LPsKg z)Qh%Nf2fhp%~(=+{cX#YCUEis%V19IM@ak=SPfF+x@1!Ru(@Q9U~u)@D*trBuPCfY z*RrVYB}G5h(5M{ED=N7-kVsIW|Lw?OF5N96$tX{2=w2N4YwP>Z$wjbd7O2R&UhG#3 zIaTOaY#mJ@j;os7vp_$qAA_IK952D#obhsQdJWJPmtp3lQZgaoov;T<=Bi zkWJZVQYY3gD-Uvso93YeXH&wW)oVLd&3nuwP(c7}BO7Pb5Asmp1>ype+$!g*Y^tX` zG%HmLe!v}OXlj^IRljL{*}4HM?v!j5-EcFKQ8cXVAmqRnkH@Ojn;YYzyaA>@xeRg= znnWT4GR403!HJy&Hez)N(j2Tk3s5v1b}{rk3a#8a>_#LgFJ(=&&c1#ZhpMRD;nZUA z$X-ud3t*fl-qzW@IRm*$F<;_7*J1IUEw|>A*)3)vBVH^X?cW4yd=HV#tB@JzMJHCH zV3;?P{we|DO*8e;Mv7n_y3!b7WuK(IeB|XyvYurndusDAgC+W+f~zRGtI4{7U%LMa zBgI?{Y+$!ja}t9{m+G1IOJIMEu>JmwJAnDMDp^OG|7f@#4!%cSn#ewiz|zx-4|Dd^ z2LIc>j_Sx+wRh}5he49ZJwa+Mk#fFiRZlj@+~|@_6EvddWj;}1a7o&sJ^o6%BfIR! z2$IjPvP7Y!K@HQf!UNgi^ouP7!F%geDjfv>hr2q*^sr5R6+?$WA|#>i5^$ zF#9OlkfNR3WL{y{ZJjsmn#>RJ$ePha3X4^j)>-NSM(+TaFHwHF6kzkD_KwE}lZ`d$@f2?|qYD*16HY{Qi7GRX)T0UPc79 zXQ9xIR59&Q-}rp?0cQV1<^w-vRJFN%IPnX3YV->5|9nCa zJ*juyfFlsM8g? z{SaH2Swzyk-6necZ`)Ng*za=gCwMN}Fl_;+_SlIe^$-f8)@t`u-M(PdSc=QRE`e`+ z2y~}4P8;^+=pH{P(<(X-Ft8`65?c8umh;M^55Yk{dz+S7crY@mXyQd!J|c_}a>jtQ zW|G)39BQD2==3%^1o>#ZLJ)D40Pm#P4oL#*x2rSVEQG?wvBc~Y_TN_%&#$NH4X&G6 z6)dH00GX^Xw_(tCpl1aG(+;`=5#M|G+e_uhg#YWdboY>^fgajOt=HlRFmCAwl7ttN z^pl%0oCgkh{8L!2D@YsSw8}NyzYiV1ZCky3%dDb(cS<%>Lz(Y5V&)HRPj=35gZ4-V zBgHI<4&$7rM{N0i~1PslPK+PYu>T#D)calP& zaKcGuJ%nhAt|sN3ULkP_jn2s+o)4P~mw^4g8V9wTB8R3Y@CGU6Zp z>?S5mvv?SJ@|er4I-&lKuCQ&RPnD+T3WOaa<$UJ?xKQDAWlJK7eB6;%&j?$MgVkcdW$3Nq%#|Ln|MRXkNZ0@QgXF%Fh#nnvQ zC`t>uYtCp9GG!6m7;J1&stj>nR{D`jqz*&8mGG z6)TR6YOtve3$L_k_=i4Yr^Y?}(5=wmo)0fAC6TdCw^P|Pxa45enZ?`erZ4fvX4% zDnBt<@Xe9k{r-q$Sg8NFcaRFQk;Y8-?pCwcK=(9={?f+TN!i!)@--3j#(x~W;wz&3 zbUi7%8EB^sNmvc1WvkVX8)bGP{7KT<^P!)K*!uC5^Orr*c8CuQ4Kr%I8r*z4C3p%C z2YUTc1ST?(qC9K9Tps-=MgC|I&$+)wuxSH0*Xe{YO?+|*^MefN<^Z=2Xm-kE7I|OO zmKAmJ^)rteH424Rvj_R~P7cd)Anx1lUyR;Jbc{1H&1TZ^uHV`)tjv>;6jso$FjZy` zsZ(A*m5iARs}E<*2)W825DTy3axIaP;cagBOgm7K*Lvr*b}tL%nz>wg z(s>q8bP|+-OQe?yA#szZd(TcXf3|~0#sc>0e+eEvU!&hO=C);9%4-d|wm)>VVR<%< z^ww`Qw^Nj>SYU!@t$%%3dmgsVsBQ#vuXs^fvQ5b5hCIy>e-FOiA#ydCAt0&N?sf zNk*}f3!Uos$jBV4Vq{!Mi%%XM>_@XQ?}9K@hh;=)bOuSOP74ZDnE$AZwm)m~M$Tkv zN`qGfqRZGF6yk1w4b4x2Hkp!Ah7}YZDw?^JtsdsGw$1Kwf$uQbUBepQl^&Ar2Z*YU zbu@Dxty#-6{ad9@lG!Ncs-x)9yM{p-`VQ3v*=`tlm1amrQH?#1YBfQHi@Dvzk5*2X z=O89=L4u>6^V|KxmPYQS7(0!n3zC-M=Z#}5bR%Vtab9kVw=oQk?9xJ9vFV2rWk90?=d&yf(u1f3CQQ(;6G4h>S{yfw+;N7uj6K{KOYrvL6HkbS6MUpZ zP8{_&Er)>egWLDvb6T04F(skUSo89BJTt;3b0h)N zD$3}yOjoISDmbI;dZGjRh{=0hiSoBLJ4G~Q7vfy?sOvR<+=!;K@56;M=JPNte>}v3 zpv(oFMWfn#BDr^5VVU0q!686Uin5s&;DY_Fw8aezHoNsBbqqUmY~os4+=IQNXp)PE z+A_tUEn3HJmk&D!lCOhYrmol+fa?G>hNPmbLHmhUrvc3~1efl>7(4#>C!4j=MK}>9 z%tSuT5d1uJ9t=k7XXdZN@GJ*x;mOdgB0#)la7 z4$eDw*1-D(r6;7k5nk|YKg2aT#v013rIV#ChR6{lYq^_#D-bUhFA@I;Qg&@`x`Lh{ zTE_nJ9QMn6!BH}%KcDZGAHkCYW8Z+lTTa+y29#H^0Iq{0j<~L?^<}a;UGl>B=dO$x z_xiU~Igvpat{GLd)xr6XQIMB|1liYmKUUtJUag~??1}}Y-e#q3KRB-`+l4m=>|tc9 zY)nEsj_m6xt1{)tWnQhzIOl&I&%-5d4{WBM*FLK_&RWUAPN5>j#rQ+J^8nFpB-C$opi zNfb~gx0Y5joSY5RSDU)Q+`Ze2G#b)qH^~i2SBTw_r_NO*!6WjjOCIG^34U z3CbpJ^6D~WHiGyBd;gI)CPpnpMOaegd{%M%bas^!0kOF-ge!es4s2NCXU4jov0dzu z=j0;B5w9QMANl9IKVJ>a{e%!Fq=x&m=&gusUl<*K3&{%H$LCs9vC?VmU&z^qrn7Jf zi5XFZ=;bXDp{evBtkEXMZ)Hj}3DL&&Ox5_3Quc&1`xfSL6N+{Dg+YA$Wy?C-69cipj(DY_#tK!v461xI zeVu`Oo3p(?40?v0{->XRcn2Pd)Gh6mRl+xW7iLuFy@S`?qU!~JgyjRph?r*?oCet| zXq%plQHC*}5AiV{z~u;4x%y6SBja~tPgB{2Cfm9@bZ>LEGJkl#*^_|1jUxYgaBBvA zsiO>~AvT3LqaQ*E^*N|lh&4iE+E*cGTg5~~>n_Mrz8q;~hLe7(0mXTZ@{{eSsVj#% z?zudI`^gfTcBKnPeIp86ILwquvlt2|TF}HDO93ycIUbZFG+7kd(3=zCVT+`3!p@kizLNX$*vG1K-e)xbpxt?k{imS3qqg_K_ z$H~al1PN{_gD{I2+6yXa_t!O_2HR>W(r*ThMd!ZOAjZ?`1Hnj!K7)B>3xO*#^`fLH zeUhq=vL?MyHbED|i`lVErEm-%oWf{_*Pky0cyL~Fw7AqqR)ZR@zPCS8 zF!;~$klQ;(r&01l5DFes1vNqevvb_Kn4tHDyj-<3aDgMFqZ}g@KeXJz9a!*)uC7R8 z8n?sInxzn$;Yvg9feaHrh*C@lCS;fl#)yjf9=ZJTrQE5@x|P*omvwKqiVEyDK6{{= zDx8EHSR!WnzmUv#ezw{iV(lloCw#f<8*}8xAw~mzm79`73jJJ_n-)R}yZNYbk;eQl z$Btz=Xa4F*HD=hndsNi-hGg@yhQ*l=b|hZXH9y+3uE|fB?%N^3rJeSTHtb6quyCQI zXDq-;a1EO~09n#LlKoQCl$KD7(pX&=C&|~~Th>T@3mq;9jT#==W6A{(WK-?zi)N2u z7lduAEnq>_mub#->^{|=r7O&tWB-xE{1XLlaQ1tQWjjp@)#5+K!yMu8i9<najbV>9UKk2 zr3UBzQx(16eoGfM?^3s>mo0h^-91Chj$_Dc$x26pg>{pKQ`a!gWcu^Oh6 z-}?F-^@aQ6&QT_jw-eH?yu}b1nlJX9)JGm@)NI*KAkbb-<{8rY&-Lgyo-DW2B%}S=BKw>sw5ES*R%7+XsjIErvDO-sdT@bMUSUkwMth56xUml}=ds@|(mKe4 z|2(KH(k8bc$~P);TgxD;(Q($=X4t$%ke!3bLx$V8IUl-HLGT^eSMKOp zMGp6CkXMm5gPY+iZ@Sit?luFbBVadH>xKJfjjQ8|+-A*6Lsk!0Ypcoi@RdWp&krBG z(}OkvzN=+{Vv3T;L1NkfkC<~_-dcogO;WAd0X-5tv(ESdJd)JC>G4ih5~7tExyhF6 zZlGP*wbE9O@msP7)vEXF@yV-hVYeH5gWV9`0L;t7&kE{O)JMq$^is;g*p@o3%u=Sf ze1sq;b_Ih>VT^*=KO9B)|0HudF)(jrvKZ#xrnGg5pEGKkggK`*J0iR<(1Z{EG-2jZ zru}gLebj>#U2)8Ic!ybd9>vjt12QFCWR7?9c**W)hQv<4(NTfTfWXi2Og`DcTH0Rr zPFXrNQIFtx+=Z9R!*r10im^R)9?sP`;mIZ!W~IQ};-PADBOb+d70Fe-t6)_TZ*K$1 z_gG@`9Oh)yD4b5X7XiWg{_$!z!1fj1TET{jwQyI6c>ylOp)HQ_LqVzEiBD?d()3*g z#iVDkJ+-)SJ;=&;aE}h)sDus(^aiUzCEVh)!5RGDeG!39hn5YKOOVNf% zCDsV)Wd6$&!bzb#Lhop6!31W`OBGz6Bv$jDCFgPcD~BISI#Ma|Hw$IyY*?;q(~bCS z_^3lq6Eu>aeyD^qpxZp6Y$MThhD%TkDYzQrtR{o@D96ck!ID1w&$h4_EuACtKc+&Xr>w6!(5EB^)cv$Lr%wp244Lwj%w&ciPw#3apt4qJEF3hk- zXE#xGTGX(FQqZwGzu%#YQDc%d+Fe|Y$|RU`W8=gU-_b|C2V`4&&IqkT?XNWd&RG2C zowaSy(G9Ra;`zrRcqc|2&`-KBm-7}Ch>%9TE6{l6!%X8-;iswP=s5w4sH7)Hn83<4 zo}>!N)Sl1y_nI1uNg=iHS4`lcZ^qO|J1enT+Fof^f@|6acaW9=RCGn-Kq|d2d0-7cHmj;TU`~MZDwTw)xIN$&Pjl=&1 zA=Sm~J9}o!;Om=V+w$et_X)KvU@RS76K75J6yWc3b}0FqV|KFc zlD66Tag$I?o@F#cLbG;_=NMQWRs68G_cAgl7VZ79Kis;5e7~PB1e*B%yk$>__SC3& zP4`&y`pB-UKv~;k?lGEmIO!rW=3XQ-5E1cW&#GuS34t?m@OGIv>e+n!OAx%)wl?^3 z-z^(j-TP&5XEbKo^Y1&DKoNWAn+-?I&Fa?PueD5QNXkhG)?9{VbN;;KLpk|t&KMXc z8wEnmN%IVTp`lBa5!l`}CwA<$^UvoyTFQsDGK|3hcXpV#WO74i!=atC;gS12FOIi& z3KFVhHPP8%I96=KS;|Ta{sgLV+xB#YWg0nha|6`bnsHjg(aKTJSJ_}xQEjFh)Ooxo zJ~Wpu?NPM`9eK0mJx}*u%Pm4Gb5_HjO7fg?z=$bKQOvFK`3{_>P;9ln%Msgl`7yT^ z(@T1-S#z(^nh6Glv}dGAhzp$&OE)P@If!_nf#T0M`j^5#J>-p{t`q7H+*z!OgZ)VJ z!sm;7OSi8ZPCXyTf8qYb-dM(@lgll8zK?w;&E(jpLkP02F;G6l)eRH*`g0!#Okbz} zycx3|TGT3VaQvF;kR$-wWpYAnqPo$n9R_iXf0^lzD9LNV-5VV6-8(%=ccsrxI@4 zhXOk94q1(IaPIiz)hHW*mBaWv{C>6p%nB5uqSDW7R&nuuasvWkmACssX)OTC%Xvg2 z7tJyE`h~HOMX~=vKRhM~<-a~&tlG)S4iki+olhh;{~0lYrdZ@qAKg8wOY@-Z=SAO~ zH{7sR99!}e88DUISrbdv`j(5K_sMj$68W?e>3z)qb!a@I3s78*s^OjXe=I0bDcqk8 z9kbyXhWXn0{l^qYgBH@CqZV7LjUb$Ar`%KL>9ciB9GlrV`dKb;3|6mD_h;}j0KJ8c zkS5f5Ax{lYd8Nkww{R4m|;LC9DCpn$c(N z{MNH$om2b;eRR?*i@N5b+qY3IJTR`{SmQ1?<^OVK<)Q*Ye=>t)s zTi`q?5Q8*l55H#c8&``lmX4#Xz{6Wi1FyHgT{vSa5#8E5$s)UdZ6VoOwO28(rtczE zB~{Zn^BltWV}H8b`z3rU-9JU4 zKuN~Sof5=ME%j?pP)s;HVNPxBe7 z+&PZJq9LzEQ(+vHQA!Vd=&tT4#4 z703BM`E&WpfShPcI6Uyd&>2AIrHybxX4CAriheZvyGIxGYJJjY?ZcX`pqm^B>ELLJ zntruO*SS|a@0?3E#oD(7VCGaG0^U@WJnpOO_bIRiCxyX&Dfuj1lMWagK6e(e#7JVD znieF=#-V^39uumX@_9&VgO+}RK5OH=z0G}=$ zH5c6#nZd*$a0Bh4<*op}U%}Z_>2T8+Oo6bF%6H)9rT`74Kv($PO|)H5u(n(9wjltc z0EjKN@HE;k0_5!o8ZoyRK-4G@08;)2stlgL2d69o$m{`Vfaf2qZq2&`q4H~&~e4*Hh3LMNa*e@?J^+(6YsnkF+`Xz+Vb<|>$Y#4m&W(qZJK>&DFE~lB5SQs$GmhJ-&iuk zJEe1y#d{wW(ZUmnZ%eM1qQ}UE zOAjgYsI}h*ffq_zBj6G0gC>$Sg~iWt0RgtcTdOI5KS9LNT9h_6u=fQ%ofw+>2tS!C zh(<&&ju@KawXM6m!j@6ss(-c4@mdzRXN4{MF`z4h*;15NJ-5zvl!axYiqkip7SG%? zKlctz>Rtb8ddlTcO?XG1U9uSza7cl?^DEVZEIM73vZ&B^bn7ZuOYHN3pSnKt+l8#3 zz2||R7D41A#^jqFLCByug$hBZR2v|F!iJN}3`H4tARZ}Tr;OYnx8+Qx76QGh6%xyZ z3TsLqn&0jaH);%>cEL6czKuJC+_B{MG*g1 zM1Tx{>{lpVaYDc~X*6-*2&r* zm(jMjio__^$6^HwJWx#oWP&b|EXt8^K>Pdt1+2;i9eB4)d!Y-Ud}JKn z8Yj>(UpRf&&{U_X5tob9$qg$J($;&HMz`Fx=&E6UZe#q36`7fRZmK5lOLqdJdF@C;=hD51q>EcMYAG?VaBob;-s>ZuFTh-})+% zUsa^(rWMn^ge3k)V~q(-9e85U7Yh-yuM8!t3vbDxjRd!didQWObHz+s!aww!wqi@$ z$+_c1qjw(%Ca|T8Vvn^5J@rVEqkW+X!V#L|-4b+Zn>~e@r?F?}r2i06Vl_Nq>&KDh zAJ6f!mhcE-Tn-icS=foV&{o5Fp%uuff&EeKL0~xt_vSedge&R=b?SQ@w3}-|$3F1$ zBq-gA3wNM`cki#Wt1F>n)^Lu_%Y<%ysdUEP($9I+{U~3NF$$aw_{z-|XdX^@f%N^1 zeZ=(bhiEpyM7r=I?LQLQIaNDs1h1~ zPCzqC*(L+hS+^WHF|jiygfh8KB^~~#f2ifzO%CVOC2*rftyDFzJxBui(p(st6#oW< zZ^^GMV z^N?yW%uZ44=X&Ohapn1zQs;K4PYl@vV`t}(d?+?(?C}la@?m0YkPu;Ba~9~(y8}ik zJ+!}%3sQHs{6=V2rMZ4oXBAjm;j5lb)AJMn>p5qu6I9_r7{JjHs_+5~z~T@!@ZnU2 z8S58doe{tc_Y08iigu7si;#Z+%8XdI2+*I5dw0X{r1;nhGA2wY0uk1*$LZsLQ3SPq z{A&|CyXJ!$$dkhgu+;}Lq8iy1EQOQ~$K%nw90nST$V0DrynPB-Gm$9qL382c({Oll-gH+i0 z=WugU0NWlww+Rv`^e%}3Xd8iHeFhq>_&E%-_s*3BvaklIun~w@{u`HV(^9@2Dm(We zSVN})fq9B1`bUf&sGsIbGMUdZy?(umjGc2SgLLICL0R>JP(Ky6~Mm9Ux~ zty#POV8B@FKWyNqy z7OLUC*HO!q;6o=Rom>^Ro_ zDXh>Btxz~e3g>?dB;qexi6xEOyLi*yVdu!*4w9U)HCH@*^ac?5s`5>g!b=FoizMiQ zu3UjC5y}9@Y=Gr!0YIM@WQsQw6nV8Q&q|p<6rygH@b4WKpqv)~YWK&euh(PRQmRlp zt0WBuWS>{sj!1~J`EuO8+EOtN2%t}D>neerszwL=YCTLvG#76Wj@cr@Jas?-*O?zK z8hR61B~r!PF!mA$D_;fl-A97=onAe`q)DjAzJIx|Vrs(5>G8gkMQ(jaxVG8F(XKi|2~*7G_`lz7y= z=1NyFl1_DguA?u1)MPpN5Js5$uRDH9I5rB0?FffZQ72vFr20IzUrRwk+8@DFvy zE?UkoRYAM%kyF~#aBn;8epNx3{9{OfsvvCwWV{NId>eWo926kM`3PXL&~6Umn<5P1 z3_B08E8i7lfd|o-;R!a$$p`3p-hlvEin;xoYBL8^zfl8f7W39Y{0Z3CwKM_TM3W%8 zz3^m@DNMdcGIwEI-^_y={@>f4mJq_KbU1xIPhrKHNtl-pRP<~~fdAX9gPu~Q?qE3cD!BGEPiN-wx{vmkWe?VY7P~B zKzkoM1}nQxCPE)}$fsT$KW>w+sN9%<63Ngw3x46}cSN=b8#+w=-l9>Hb=QAwYHoz1 zr`GMv;`7fx1q^;(r=$~pfPxV>TEX<8ga@uQjt5o4A>bSDFpGZ-AgczCfoz&Y4)6uI z06efOR(YHw3ZlpRXApiXVHY0D5w(oASh{y;aTgNqMH15DtH^N|ra6m0LrX29#-DzV z9q)}Xf`2J5LH<5)9m**-C;HoIoyqv_VU`$`^1`<0PIq zHG6<1)u0xs_I)g{57IsJ1LvzyZcz$?!K4z}`$D^;{GbRRa6FOQ43TgSB)t9Puan6R zAjOtox)m{tTc%Xmei)#K^VbNX6*53^3(=rZ?lOl$f@2mEEAPjN%kQgvRp_ehlG zJ`k*K#-HaW%k#>d>$LB{)+YcRDFhS}7^e`*MGAd%+}{~yLYBe0ROPx#dZ|O(A>SV_ zPCm7xZ{DcfK;Gc%zdaP{&88e@8h_&L1Xh1~6@9L$efgGsuAPu_&vmX!D5k%xNA&m` z;Dm?@9Eybh)(>L5Thqk}X+0Gi!*GyCGx63yLn4~wmmuYhVL;B0rXPs>afAyD(x0+u z)xmoD2b$w~LbJo_1cm>I$1l<0<={4P=~>%E4Vyy+Qa9a;y5~&)R!9_V6CG@@#5+^- z7)y5(OXoalus+NY*5Kj5el^TImV32<7!V~=7?|X%;qsm+j9vtFXWp1eF&lE?j=F=T zFyqOBk4x-92c_y%a?TShfkGc`G7m3zxNL)Em{g~RCBrUcakyaF9lxTJbfx&)q1{~< zA&gu8rkLNw@m`#xtScJr1%-Y3TKkR!_A^IR8H4~1gxVrD@Q(4)eCu0OOvz?b zLU8WuEj*HZOnxsl{__qB=K72(LD*;0Z$QdU;Zt69Pnz-S3c1TX@NE8zn{MMRbNgt+ z9m;EK=5N4ED?=SkH9z13!JlsWtOk&}H=aN(;vnuzpSsmiou=fIrkW1}$rszzL$H*}6Jn#Y_D^3W z5b@4VIv{>uSlt#3qN(snNDgR2=T{Osj<5&Q&!V;_a>wByJ({o$*RcXERYZXZd~bi3 zIvdBVQhaS!>g(K0u^-Qi_`#j6$I6@C98~s&8=Z!V2WDP`@&3?XgY!sxVc4%Gz9>@9 zi*!ax(WB$x656c(__N0cN)PGuf0HkCChom|)!GM~!0g-k#pXCFH9~1gfDax|K=Od7i0nmOyd;U4oJnna_BzhL`&VaF$>MZT+@ zkHG!&hjE1635Gcp`6&rC2zyNLPEj;L{Rq9eB=wyiT5bmu*(oh zL>KU|7L{COCf7gu8hf$jV&L+$i>dI@F9p17aJ8)%46{mRmZ0DNHItq&r}*Vq>y?eq znuUj!5`qMdcofAY@S(a z)AaZk`?hkI_3FWZfp5($YM>-Gk{S+993|4jbmrId6<5G9Eeeu-DjTlFtEV?=XEkqH zk$+v~*Z&|2{U-;n`oS#J92@{xL;PZILy>wgL@78 zE15t`3Rl(~HVmvjQS-^=zDBzmKceO9!_tUeuKxZHI~8<25SZt6oUu0ln2>;k1c*2K z%My8OHNgt|58amI{?DBynoQ3rLr!XnEe&~}Q~>CSS8jbeH6`~HjZQm*9W7k z3SP%>D0RqrPVT#cr_AA26xS`kRd-@+sdWyM4oJ8#eH&>kmT&|7Vv?xty|xc6@h?#r z_g`w8(dtcinYZFqeT5pc8tokgsFo>eGATcEE-H1f_Kwceq+xM76UU04due3;11jUZ z0nTH+YeS^w|!%DzUushcD0*fJ1?J^&2l_jf0izmcG zdRcH%u-Jo=sIXfLT{QCf#YN<~H}k_m8T#7hFIjKPwDuOq96)kJU<-&%P|u*fph$<8 zI?A-GT>4p9rP!o{Vj#1(gV)+EY}feT@R&<7Okr2(MM_WhWRRDGy+7C=k&qCPUPqY= zXb#X*giqY!E>#xVhGY$jfc!JEYK>I0UhKzA^b(0`k)-lFW1Vx);FEN(fu%zowk#R0 zPukf2)@|{5etF#V_5%NcFq%m#8oA z169;@B3lGW11=8yp8)GKB{(|hi725NpNMZT?iMwzM*6w4h2wt@;n?#O%gpt=W7IwB zaNr>a86OjN-a*g`p$&zSHgRBmq(2vth@|fElk%ee8Re_)M*y4}7oTwt)Gg-Y@dcy! zfny}YQ~c0fA&8=`?N$rzcXMkU=cLY8M;~vc%B8!X^QM9?{NP0z-VoRfGOe9hKLdCK zdi{aYLSsiVtRLrOuidn5Exf~1Ch-&c95H|Wo44s!jN?N?I5j&}Zy^~dG}|{S8AIXo zg7J}_>?)($euWut!yHR`JbY=D_vaX3U%4$6LMT{H;T@$w{{;^-6BS9#VW_q25G%7+k>$H6RKZg= zP_>+xvTWf|=IgVbYc`HTaTEosnuzzm`Ml14L1=TpX3Fw^(W6huKy43;XiBI*6*5F6l?(CE9bwlrn&tG_h8`Tx-OgcC8Y6!DBw|Xy{nE&hO^hrr^R{qpr@l>Uww+vR4A z9-%YxAGN%==d0&%?sjL=aNFFTx3Ys_#oK=~_L-$^-gs@EGBq=rj*-}4t~)XKD{zU8 zhDFw4^Q=$DO~uF#phEXWqX?9(sG6t4XH{}z!Ea8Afjs7~I-RW`G*=&uXOmH+mnt)> zJMZQzJN%H>TePBaFCeU0BQOn?WFCb7JmXGOc73k-59tdKQGRaW6#^o-J^Nywai~j^ z=8PoOImP3nChD>FA)>n>DEAL`1<7TdN!dO4-Q?JhlIh0&rd!s8Z+$i|S;-y+?u+ie zq3E`On2aJ3CiaqBHBwA}yv5z1jDu$lQr!E(#BYn*-%iJAvR>&ON~WlpmP2`na9?TP zglkHce`M|5{;gc8Mcm0JH0&UhOjLp$MGEyPT=0^AzY98@$*MIw&bX=Yr9RHvqENX< zUE^fgN#x0&7xta*A^(NhMZJq!bYT8~K$G-IrN4hOq)GT%@&@|y{?*A8#DaQNK6y?Puh{$O!&4W%?-g(zi6Uaoo4jbz6#aC&VktR*I z6B^3?af2rm8M)>4Q&0ofupyhqx(`WU-_itq=z*FtF(h3?KP^sq0@)%cGkE9u6~l}J z*nK+IL^cF}Jlfxfbe(ewCW95>^!dnT?r^(l(7`RA4A%{F*O^ZA%U8S4F}tsQbZA>f znfJ6`XEc3eO$c;ANwr~GM6A?orgg}G%J=cOQYH}VdJqc3h;ekH#U2jV zo4e&!zzXeM6>y|p^jwWrpicDEfI?I&S?loem~T)#=wQo)BfnFAV%D=q;nW(`su>MN zU$vTZCqoJ!Zl1j)7_4qe6Z4{bjIhB`vIa|vTm21sA+F6X;G9SB;Q!F}PEn!+O}Aj% zwr$(C-F@1&?e25hwr$(CZQHhe`}^*{*38`Jxi6I&sh3(=l^L;PZ=$Z5H@p7iAjuA+ zx(Hf_6{kAYTjGJwUIW!Vey+?&467v#DoN?AI9|-PuEnDPo7-8Y_+7#C)3dqZZRCOz z=;5BHOmUNGBa_gKXQJj_DhS=jctnegYAGt{VXO{F*3hUKNo9{Qp#y#TNG9V9G^JhE z8Op9R;k1ic?B}DA;SS;gp3ZJV^3^f8e77t5=IO%KcjCG6YpUD^SN{(#-Arf{JY|%~ zY#P)Y^fAXt-tJ#59STljYc0^n;W*^)XTpj!B^6IMjq&ocNJ?@ky~MQQcJw&Yy(X?X z$6`oyk*!H;iKIsE^&BFR;07p80{MDkVP=cdtB`ad7!Q{&(9z{8JC7dfq&gzgBZlgM zf>?O{2BP(Z_$T}g{RANI4RS(NHw;c)l^(tLGuXIQ`41sirNAxOaDaAkguF#~idhoe zDMM=McNQ$kT3nVM_MsC2NjWUPW?>M zk-s0K?`VPOg@)jUqvazp{#iu)z~hQ8U$f(4;rTj|3h)e*U|*cEvSia=xU9bn*gg4& zcKzrM0INxpXdsF6X}=u%bGPrN%Pm;@FZ$BS*@THBW};FRJGgo;mBFu53dLqfQm{W% zEXfnVs|=7~{U@Sd{Xh)(ZGpD+8E`NfhE-#y|FA;8NdSj13>-8#W0#?X;EN}++)ix7UCq!Jf2`Qk{tl%U~g>{2og_a zVr>sW9#qTRaQvLJWOu8j&osmD@g7t-+l^wcbLv7S&g4*>FAV*VwkT=zyv4EUNS$qB zr~5NPn~Ia1%?P&K@!mM8(xyknDN8z@@u7ysoNId?Z@s~PJ@2a5^4s5_f@(6{*!t@#fv@Jq``P%D+BG5u2C{6ZKKvXrWfwpJ| z4C3lop^#hXowtsOMSiKtE#U#$e!rDjSfCb_Zf^oI=VambQqrR%V8)_|i6;+D=XmzGH+d zPZJ|AGwzRaX56~T1a~zySQ}>f_0mbw>@EA5(^}2*#U}$=d!Lr&1D%zHrdif3J!ma% zyvNxEggH2*C3|Iy7eEXlqpPjJnJr-e1R*Bl1YvU<#PY$kr5+;OGHNuv%Ri@5Lr%C6 zmttrkO)^Rt!<#nHVvbkn*!@X1eb8G_fW(b%gtcSCj(F=w5QgII^aW*{Pa%lstu|%b>f##p&_4N?z{rY$t@I(QCp+7C@C>Kmz65Rw|7C z%~%J$h11WNRn%qn!urI>g$CZyLW$O1RdKW@M^7Z-g8?R*XoyX)apYCf2rDIN*l>{T@dN=Ar@SqID%$8k)^%B^uEPG%tcgxXWqR8A;X|3D)nR!zD-VYrk`107qTn#-5d`5DPT)IFJ#lp&?%av`EUVpR`DZ5ec;5kzNSLmTe zu*&&2&6}`D*5=?essZ&Iy#b?Jb}wSCv&_5KbKISA7kC`;PxVuU(~`A5=4+E&oaoSi zC5*r}1Ou#RT4p6H+2dQW)4>NC@~vtH=7jh?)gG4{^6~kp-^UvAbNHw|KQ!iMvf0zq zXP|#N=gNDm<>0?H4xZX-Ev^chzH1m1UeoBvK$k(T%BlF=s%_t4pJm0lezVwI#I1O* zlHBw%cYgIppl|)pg~t=mO&4@N9(E`)wkqUZXM7msnz1%{Zvc!M6*0vOOh7~DsD>yi z>j4-il_LAYBVfc{5^Q9PeKt7STnZGT6xDqI4KkCBG6ATGxpLmwkvqItuYE0R?bwLu zqT|zqgT9>ii?E8-_N&3lP?wennjEz;3#~u93Ygpgjs=hkV(hBTzAS$CCT8hl>QN}* z47}!rW7TNe&g$0?F5H#q5{w`vCSg%SiS6m{&&0s(1RT>~w{k@T0wPaGWzw4CT&rQ) z-0;N<{R`~NaIY6Wu$)l0$ue4rr>{-Ug)zE77H92q3^f1ZJWNC3d2_Z+=Kv?6!-Z~C z!)0k~f+8-XV{}G(OpEkz^Few{9_fBxDf@29+L77n7T@&ZP(fW>O;MD)LZP+z8PM@t z1fiO>OEuQtc^?^UQ^E)of?Vc|ZmT0{&`?!g8nOD*j`W!A9wNT#YV5UK@cUut=%6Cg zl!UG#*o6|oK+TRry=SfYqt}Xz+nm- zL+tcYEQ@dm`U>p((4W;>;JhND0<4K26bZkseZ`~OgpuX6%2nZVvl2$cGNrX{D7XR3??t6H@BBAI>q*0rni^=W+quH>tm zNz^)IDi6o1=iGTZP!KuJTPG?P zn{YMXyH)NGe)h0&G}bH=W#H|FEoK{t?u9_7dK9OjKsrw4X!fYPrT+UWh*NL@w&^_* zTIJkQq zqt?rS8ixi-?n6_YW(8n5+d&}5#OX^9{~)U-s5^bZC=)TE~u>JSN} zQZxU7K}so6z&#*<1PdCK8N93ZvG6?Oen8!!z$lP#&ua-I{{Do1N%L_gYsOzTbDUL@_>k~I z&PR8m03+TFRf4d{#A(vXjU9%T(x4+d(U6{Ob`Ue0+Z!41mC|yIZVI$!osknDjPX?? zlfEwdmjuA$HR=xTpg0`+uQj6+Bd<>=|Mx$$ z&dH)geXE04(4Y0!e`>(K_OGy9Z|{tnESuDR+8q%q{oS{T%sqX#k<4wqe;_m)Arqt{@m6thFfi}a0x_(0KuUuq8%#dNH(h< zLK0|eAg{P18o64Xk7H%LrilurbeNB9@zzX#GZVJ4GZ`Y{)2PNKbHtdG<10A|N|CCH zkgA>*LYK=aHML0B$K;7Mu@PidyJU;Mu1(B5=UTkj4FNbgcRT2}4u{>{2G16n*UGfh z--M;DzGmkGL;MPWivoa2K&{}xR>6J>m`~->69)=N8axLj z9aib`ocZw)sbyHzax-l;R?a&vDOeR3k?bXBUvuLqEekSg$hJL~fKPr2^Edo@W$U#C ztx*_ZMcX#+JZkTgSTu$QB$wp^7M(k7vY&sQlola2g@r|vr?dgb6}c|fnFxUXDy&T) zgcHC5hb6qwR=LUrCs$c!ssr055(BPPPo>Ta&Uc3sucm4yq*MhMcC{c&-FhL`fP|)#j|~{f*hx+z~-Gp(AmZlJy%tM^zD( zNga_8!3HKL8Prp3c9gV3Jgl`d>P$1b_5UVmC{FX3kK`DSM=8<(7gioeFTik^k9ZrG=dre%Nd>yYp7Y46o zGo+%fnpwpeSPCpgDXPOc&lK$5B6c6m{^FVrYsIu7!@GShx z@$AR_X}ZxOz-+g7`?4zt!EAS@=8fMCQ?AcjQyu*X+qARhl`z+fS;@_3{ac25IsX-n zE|d#jXYd=a=J;DVgWu^hl`w!6jT8M4RX2jwL>UHvvi8mMV|zkClT!)fHGAv1_UeLf zixVs6WilIoViHkpoe+QkV^*F312y5T1~5cF*56=V^^VInls|C<|Z--#iEf+%?2i**f6?xX0XLvJs#w`0Fs%)xP(K(-Sgag<~vbKEJP{u z<4bt}v+8OQGuuy)$Fibf)9O2x>6xBHs^SL{@9emw*WcLYUl@G4K4XYkRV?q>f&D*U z(%3J#k}>A?u$__T*~b>T$cXWuc%MIkbe>2}N0bv#O!Gwi zP)EXY#iv1ph8*&Zb@NU;4lep)jgvHtMl+lr#jlzlEzcVR`r5`V{Jd$=3H!r2b0N&% z9?{=Ff2IYdl@;ZI_DTa5dyT|^0MqW1#&U!CX40K+b@FD;Ed*r#Ci9<-w!j#~1i1Rx zoo(MyPFCN55Kd>(5q9V?1RafCqZdv3o3+@{b-Nw=>3viUjb%hMgifqxJcy{{Ga4Yn zf?$MOY$n8-)uf=&_hvIkg^|KN5_Q!gFy8`Z3_}sOyIo+v6Iwq9^up6PQo*%(-o=t! z4F}xN!Nt3AEilt5Uf$p&+0t$#jjxTrn67|R#G|I-gsw>TNYhc;9EcVE zP;SdscG`reSZg)v&=d#d@Y`lGG^$Pa|1?L0rX@}rG7HzYXii;dDw`-li#G-S{-Y9)SkjfV_UaMHu%-!`*63(U*-iq@D@Zbxddweil(PiA065xES zxA-*l;TCAG48;~<3+ih*Zac}JIk8g9+e`%B@-f(T%d3BrcqUEeDm)Jp`dKYo3!wRQmxYhb^WoN{V(m7Q8(a)^ z{|vN-?K4%rEE+;-ue~hW$35)AwMIYY<;qbXdd$}tn4*qhJN|AAmlgIEx~ZD8GBC8A z#mXa7#tbDR|6#+=cf9>MGB3ZZ^3z5g7%a2YC(r@t%6LIp3n__XAjHt3cf z?L$`AAoMP0J)lYq@^6r@YgmnnmlEbaH?)s#u56JE(S)!;*IS6l=PRlsr&7_dMjL!G zEVd*;tX9evaC1O~QxZyT6V2bEdsqGQ^k}J;;!Rs2yNCq(y$)w_vi`Ce%YS^=2&MD5 zr~#?}l}uMK)slY-8vhEWW{N?IiEWmwGyi7neB(Zi+dZONXfjlp6wDmjuvf{$I(K#% znMTiZf_d70_F{jWo>=e?mrdzZBS z>MfWB^z>(?=9{2|axH$VH+uG03%%L2fcQ5F;yVjAOxJb={tq7N=l_v0*Vc^mK#c?d z;AH)OApqfI@XKrRp8&*0E8-77^Bdf$OL5X>rqNvV!KRL>Tr!1t6kfGNNtYEjj%L2K z9HkN|CI7YOPFDxOE7)uOq8M{C1=7cWpVK%A>5QN*zrt6$RTPJer+ z^2(X)?8x56n433cC-iMEKEj2**vA&F5#97(&S{aBNm%-O{Wrkv_j&Gaj_bP&YUaYy z@ejKn>vryizu#({iYVWY%Pm!`JWDsfoYP>*+1TmL*a!;_67F_!Pt!VvvVd#vx~D-i zTF~J@)UOH`F^~b_dR7}dJn7w{I3LR)=h2XysiTt&joQZ1zNYNp+s|t)H`l`R8m?iE z^W5a=d`&6cW}M4RkGw0oU?Y{*`0ElAV1q3{6Mt*fMkpz$l6tj58hPzum0C7?HRG~6 z>IHz3dmshiOeKI~6`m*M_)drMd%{Wyt3W#KMnu29l>CSq3cUxWW zCGn1NJov(z#;L9Eqo4d?=&~UJpPfkbftB-{^voMyfZn*Hh@(Vs0oR}m{M78?r5=+K z-3ca`WCDnQqeO8WE$|x=EY;iGlm2HhUG`pokk5%HpZfPf*HQfUZVdi5GDdXM#h&}% zuz4&@Z%H#`Sq zotm3^2=+fakJ^C~VWZi6RZ5mmFmbg zYenv*66Ze%jR~TN#loFBty@8FXgzy*si^%Bu;>T{HdteT1(xgme2j#Vg()fE$;2$} z7U=JA!1G%0Lh=c4@+}Z(1ik>Q%8~|VYl69xqVcyNI@NL2r_e&CC^6s~3w^AFb`DrAcqvI=tW`E_5QHvjYxepG|NM+pKXon`!rA71&wPQWMLzx zw#QG@(oK(OPdO)@8s3pRygA$6aJGLk-NXxhhYfckeDwzKbUUua0W$-4DLpy9Zuc|9 zMH{ok2Nf9Ek>XBYc*jRC*$w;kN#SVF39XNWw1&ntyu{UzCAuNrzgrYrEeaU{_ZXdF z7PCFL>Kf;!Z%f@rFv84F1F{$mW{1oK7o+UZQ2l*Ao9mV+cT@$ zEzp#$tKg{01ZGE5zc_T~7bvbxlG}-Fug0H1Kl_C1uudau8}yF-aZN5VvGd*NzRFeg zeq&*5VH~QeVI5E!JMdy~n=@_(%wEab6c%W2z(9)B;5)puS5z4uKXQS;S8;zemYeIa z0RYSer4a3InODPHz)Qo56#H_S2-8OCtftqqCAn?@v+WQXe)-bn*5)T(nN zyd>z%LCB*P^`YRC2VnE-;`Bzu@Qf{u?MpjFgiDdwZcg=EK9SE{upu){sjFxwMr1vx7x$G^(`VUu#Tdm-|Nn~7) zlc;5ZArCf=9cl`bg2R3V3Tr)k%NY{l3t|>HJ42Tb`3dbn#@X$z?RlACpV+esiCqgd9Av0YZZ_bBXjSvKOh7Lm~avwT>;QCJnJ zgCejN;4)i>q`J!oX_;6GuxQ-U$8uwWkum3fOzru8%B{nK%#Y@UFhSc+gJ`eCEWoiI zb|*c1mc>AhhcUi;LK)JXi10;k(r7wqdD$Uk*{yqClQlO${$SNuV=1Bz6O`w-5~XWi zO;*y8RSXzK(Lw1|MBF`GaN5AQ#VjvJv5W!LS_yH1rSa7f!gCi7^XSDnDnb}yi8864 z5EhZsP~ks3^{{^`UGt$WhsMBd2`RUl>I^vX%d|K>h)?fZd3a9ewb z5Nxa{?~i-ff?9~;sCC?97%2H6c--=%)cZ)}}4>=6j%R>Nf zvbaXI@$w%LO<$Tai4_NUfvarhsr(t#2n@n41Pmm?^Im=olIaG1$A_AvA8Dw7`;r)% ztZ5A_^k!#s9yi8xpD!FPA0;=LaG8rii|W)NIII^tRSG9q41Qj)&Ygy;lZJvcJvRU* zvAFf0;io;u{oam>jmK83ja%H3%kt=LG=2$4MV5DR8+9|8>ukij;)wVI8{qDgW&J&P z7DbrY^yXNKPWZ?s?q!b&mPBi0d?;s4SPen1DpDMbutq5E)$Acp`}J|py_AmY z4mHX5T$#lRy>2@{N7ZQL9TmQ@kf*m$Ay@`?e^FX*VJQevl87|q^*$t~@TEHAHzZ+C zau7l%gJoSK!D}lP@vXv2c77@KvuI#9Iu3e|;By_%{|R_4D!&(Yf89xaQWGiM{29Cb zp&B#uEfCT@xGH!Nzq{?MGl5xi z%N=rY3Z2@|$EMjU!8RX!F2SV*aJ@9=&bB=Aph4bd>`V8=2=%!@YtEeLpqC;_XQgqF z%GRTtuYx<-PqtkUI)Sy&0F=a`@geDeyN%mxD2NJB*m~k!;o~2)fvF*~=f(a2N zMH^WY`u_2IJ*GwpVHfT4sFFjO$EQ!uV<>%HJ!?njpz9BrYZM32jzDsm;lydg*Y9u+ zCuQL;59Dyh^7xcRfW|THkX^iQD}Hn{NJJG?usR6R9I{@gfMcWs9z!xSRRlrii1@s@ zNPM3w;HZ;@bTaf=kX5ia&1DHu){Zn?!%^{_c)^Un#{sU7DBxH1tNH%y$JgaBC`9Jn z4h2az_ZY{8i;Z5Yhh0jJqAVVAp-D>n4UYQ@O8XIx`wdL{+4j>p2tCxqYE+>!6QMIy zp*tyvdMXHdi3l%)9?^lX!jN@JqMO`t$T_M=FNcHZNrT~ut>j}@g`x6AgHo(_X^F3u z>91Ldulez<{Ar`1;IU$(D~%bo#Uxm1Bi(dv9~zvS}?0**!yn=Xi5) zKOg}irYz~)n;PA`z2ii&JaRk2v79o?)FhGMcf)})oWk!-a#Aw&KxTBl?Ov-$utZV9WV;*T(9t00i=JQD7DX;@w1E% zhL*1X>>xc{K|lycO&f&80*poSUmPd(1O}O2-zuAj431DWOc!)QM2E$4W16B-s~rTL6V|Gx1Gqjub)oA~%ErkrraF zgiZiJ@J0lH=s7wF#iB6?hEfSZuRa?wK%6HCAVdomVE7^~gaR32_#m=&85ii)F8?{y zswfMf1WkV47n*@)TOg4Pb&Eov#SvCGL)E4*VsTOgML&scKG;9!lk#;voPIJAo)!jZ zNG0frSb`=7xZldhe=3NON@w~??S?UBtdmaHKt@6{N|ait1BZb0nevr!?`=)3?F6Hw zD}xnAN`c;%a{mZ438V=Rm7RXQ#^D5`(+;7(jR1t2=Ks^^RxcW);tS_g&8`{JHT0&_ zDO2QYTyNK4rwErL9lvLlbK9n})4k`^*5Wg80@7gTo@{$H{(O;aeJIh9@l~h7*Z*7bYG)SHSr;)|`e+P+$a}w~)$BURZK@Q0M$w0P+ap0pfFe ziJG(@o4q`rM``VP+KagT_gu^je%ENjdB31x6BX0ATsmFD!}V)JWyqmvlCp&Qq$PWM z5R_T|4vd=yEG-i7puo&B?-;(Eb9@_hSKN$w(SHW_&_1z^5~!rb@Kwxadal_@1Fn$l zhcdR$RF(4gLn0eO#~h#bBtg%#DI%RaIZnmcU=}b;J?MPI42xZ5)9e>z&iqeuzk#+z zBd`*|HBZ#wg-jKoP;x-cFe(%}cCpf(u8x+8d1M+^#wjsavxfCnbf7#)sZF&I29MUDWXkH>&l z=dgKZidRXJz%M+>=h1gC;Q;+w33z2J7MQ*ZE%aouIO9nh16taTzH&d5n7;!S{7d<= zos9Xi2lEH`yWNdW4|kkWxeIk3QEm0j)~3T|U9x}iE{rVXcbwb7(4-Lm`r%WPc(fd1BVb@t7N3)1n| zwm%fWh}ILT$| z^ctX<2a?n4qE2*^=|;v2N%MNrNpPihVa_;8;r3u|cYEL64{azL&K8|0BY`V$`hcAI zErMhNrKnKDU|%oiV3H5JPz4!FOFPBZVFT{4H{yL1U0!ul5{iCWhYA zb@H$_a7wF;RF8>%YHRVsvs>mtyQ|AQ4o)Rkz1q9IqVeBo)O3R#r1N{WlO ziUK10A+QqV(dN>dFs)%fSDKi%^k#Bp_TR374!z;ZP8wMCF&_~hs60z1XN(3kb?9gu z0?8el!L)ga0x_%75n?9yw1>Yj(u~euy8-?8_0n4ZqzjVv5H?@EN^!&cNJNy+F{gti zH)QO?Iz@t@R{X5lp;rb?aCu>fTZ39(J-aDt#c-ND3~UU6Hp2+tzsRzpEsCyM5PAv^ z<@)8pFX}r~n~1c+?>m9-(1-y+%R)1(urXx|nZxoZm#?31pP9deHynTQqNY>vV9$R= zqOt$DTzb`kW@F}Gd&$!CLg2^44jx$!oT%(rE3ku)7AzeT6#(Tza%FJH0@6e`{+fz#t0@GA$e$p+AxP16|URqgOXjJKk!3}iJ9#?j>Q|RSr~Gc>f6C` zNZb2J5rJhT!iJ;3Mu7D}fVRD4;*)~<5{J5}+`1r*FT@S;2WtumVsOpF^@H((9YU+QzYO$u}wkfsI3 zRClz5etSV5*g}WM%JLY#J#>MeEIP`+{$W4e3kE0ApE6!DD*?gs44Xoxl{$OuTg9~e z7PPe9zQPzWxh&YRbZ6vKc^gE0@O%dL?fO9Y2ty5v0L^H7QR$mZ*D*T{rwcZ!~X2po^PU` zWkwLzc!amZKt#&b_u{_l)cEt;i3a}={bDbIKA^!zY7C@UzJL1R;YSyLeX%A@aliXg z<$l#eP(fEpGR7L=j*=$d+{%c{iy`XNs>`6C+5$JGlRh772QU&#er#Dj8{87&;%poxT6! zR`}T_;kxUV_t7b9xLq`$%i=$rw!l;fwWsQu9yg@B2^1IH<3UrsOXe(jFvY4DR2beJ z_xa(9hrjeK*9$Vnx_C1;H5SHX#l7o;N2`^~pCxu0KQ1+eE0T}5BwrcWW`9Kyx2+gU zcrl|`JOc_9?=jr4x&U?2QD=Ui|d60dcy=eay=4}H^7sM*c@)Ii33Mw;|#nrVa1T)%hE=6OTh&z zx@0m%R`@td5K>|2r2R}C&JLVXGPL3-aZzD>bvd3IXj2|BfaMfr*ZR*T4HJ`vu!+eB z`Q;e#YTZ;Y1Q)kIq%c&EV_0b8Xl2z684`Z{!k1I9qeNtePk%i*fR449{GUSMsw^3B zcTd_Gv}Y9s`fR{$te1?hU-Y=ozDkQKn;&UaSL_&LC}^8jLJr9|ox=b;WBq0p7Sq4gFgb)gLV2ny{dnap5ve{2IW9jCMmlCseQ%cb~6@;EMoKc!> zhTULZXaEX5_d$lb8E^R1@wq>NQRQlUO%KAaL%Y()V>j9>>U#R&j9vWXC%(fmcwr;Y z4;w-iHAoiIz0nw{A_9>jBd{W`k2=u`xR59fwG$!Z^gAp1T4|7p`dTX&ivAdi_}>}n zY;<>24wcFcM_}BvcWFlEoI7*gpkl`9!~CbBw`8EbvUc_+pW=csz{P#_y;w28V0rbp zUoH>|GLT3Y)Bqc~_Nr$JzVkYd-yxBuzb44Cma!4C$c+{M&E<_dzcd%y>wp7&zV9xh zgBL^fNG8r49lPt5{6-=g)u>tk-Soca$km2eG&d z@U78gTGX)9@xHG*8)+YBL)>&)RDb4b>0}z|*~jrDRJoYdN#1ko)T!yM!Ax|{vM>IC z!p*D2)r$jXVuy>SvJIU$apbs4hC!*@XJfH8jBwXM3G30mH^qNUY06;35qYcdK2BA- zcdM%xMwqAnE|DVKc2Lr^lX9Q8YPqm}gZ!MgUiH7rD8h{!WXDq1&&KDEK%8=1{;IF; zOq}{HuK$)?81w(9$wwGs*&=7vBR`rKM!0ix;3N0nrAIy@97p8cdf*MXUWX0wdq(}W z2)|FOn8pzzmmw@JEeM6J0$Hwcq6zZlpt0OXEkOU>6@x}?Zo`2~5X(X%x@TI50=d7i z1<#hhHtO85R5l|115avZY6M7a21V#AtOB70aL2G97U;O=@oqc?C33!PXk8-SKGxTS zg4-|mCOI@@X)niv-18_35h`!;`MneOA%Bh=}Nj(J$Q0P?oHXDzCR{ommK%@K1h0@yH2tn-sTxN2oPbRXEWD7;>E}E56kk{0Id&8E;D-JY0&ttM8vEE4UY6W z4H3}~TW1vy3mZ^Sd*9e(ZmS0MJ%Dp(Juo=Zb2ynWZ zymkpo)$1+5vfGj$O=~=WesaGL(n+DtxxWOYOm2Iu(*aJPEbyU>qlQ-cBm#RsWr2@p z$0!M(Z{$~YQ}=RG51r7(E_}*TvSYW%SR?KyjuJw_j{z%VQ^~Fgya7lxE5YN_0K+1K}yVAL#yF%nqobd;R0 zPoO=LlkJe&8H&(AvZ+H}ZbiQan`B2w)x4)E&~oN`U9F}RI`iUY`^40e-6U2C3~E$i zvjtyMJS#1lAIkQwAQy0@;W50k8ha*zPb|O~pxKiM4`yrDP4E%gE2i+3%-1=Yv`wmA z1rnxAR3sn#49_&G2+Z0pm7wgy)pGaUe88{HI~cp4$O(9({kfF(75(>m9>DSf-$TOw z|4wrM&!yKhap1uZ0sw%43IIS2;P>LIBFoGq#=^j^r{HL3X=3E8Vq#-&ZQyJ|Z*5`d zXy9mJ;za*HW8B^Kl%0(gOdKuj&GkeaEnH0;=`C!H=$)Kxn3+sje!HFQjV(+a-G39^ zHLZT{y=Y&XKwt2i*XZ2lo2!&uz|P&MLaMh$)ej%dMEdUcL!r*9W4-9ou}di`Fa5iL=b$G8=3O{@*P>epzLdw1urabQ+EYo)HsgQ?b@+CjR4#8&!XNT5I zV_J3=59v8pwvf)C%I*a|ybZ?{JA#R} zcnqWx`^h;Jokh8hkCuJ|k#VURZzW(PB)u4sAU$ViAWb0lzG zD(QhRw@Qz)h@_NxFN651xgy&0B>MfFt--Ac9He~XhB*Q-5L<-^kdv_?M$XWCQn{c( zbr3T}tgI=`ltk2k4`AseFmHsQPDt;e@c`FqtR7>g8H2kTw#BHq9A$lXbg`i!u~irK z_zI(~MX^;Mv*6OOAB*+Wa$Vk7eBE9j*H86DALtV6`$A9%{*94~xAAR5PzCd*( zU`&!T>>QANAS}tDxl`%yW>;uHl}J8&zNodv1~GEyv{nK*R=H;|YAw=B{9TJ-I6WBS{|>sOz3V3+v9M8r zYD18Mrc?y};>-VTN!^D9Tt{Jzp5u*X>YsT2168~d=`2nC5J}mofe7Xx)zgSd)v2+o z(>liHEg*+SV3wE(WpQZ65_zNWj^Sm+SNbJC4Y9#0H&*chrG{#I`t=zt%qCw7xYr85 zW;CQ1lmkDjAw$D)6WyCel*AM^n8NAfa?`p;r+$rA9P=nAx55!ESx8_uFc!iJ$bU3A zR-%zELh&!NpJ4h#^OHPI76~2-r~#%}Gu?XJ3(WsjyR-eHOE=x!rPGqLKVt-NI;$< z`qdd0IzT1&7RC-K^@<(f<$NwSxnt9r)9!N>-jvWu-#S?G3wp-KXCL4jh~Mb>ajbwT ztM67XV{%g{iko(kg}mSJzU9(!x`*x0@>7f7Csux6Zs+Gw3Xlhfh-cN*o)>@Eokd}1 z4RaBk5$z0C7$ywVHq4Bx*_&Bu3O;@uKD5WQ1aAK!ME_wZ=!y8@4EBAJvHHZt4$cZ2 z{Ztt<0)Mb}ck8B^@y#{D*BAS{9eh8&P(~-kIw!`DzrC4o9Srp|13y+p2O49AlZ~KM zYe=})$ZxhMM(r^}R+7m&EptcQy)t}gU3AL9jAkO*sEEyoSr;K~s1q$WH3sl29+ZWL zs^lM5Yu>X(u#d-h{U(9uBU9{Zw8iXA>#9Vl;CnO>+EQ~)v4vsFxh^Q6pu4Tt_5N^G zKZ?5XpqcS6KK8}JH(T{+?w((a=VF~L%}GpO)bG(p;JzMdzWI9_SjqN4@sQv&t^U}* zX;OWA)~7rHcj732j$R!0EJ9c#%{QP;BrD~N-KdR)9{kNsck-x4>NNfMxq1LD7o9i3 z0g-e&r+RC302LFls&vkihPw9G6*Q3)?JPaJ4=G@TI{S9m?|2EU4wV~bdYO$G-8W%x zzybWGx~P9w5ufQvk*(k_wK!Cf+w5OxJn#2(;ft3sM=7 z@c=Bixb{!aMzqJ0M3YhVB(<9ZD>L|KjyBhLh2>F`>~(6yfPUNA*T4*Z(+x3vPc+yT zBhEsTX^LqL1vKSH%#jK?>#|f;F*|rXA>C9_`z=VXz$ZNw-H#%y(V1dS{VcHqy&f1O z&kD?x-6OUT0q9gSjf>d_dCG^4!Cd%rl{k9{9D}cgWtE-DkY;6Iph-EKWi)rwA1)5q z^w`Pj7az5x;fKdv9QS5>LqV!TJ^NE`dh) z(w7@Ad3iju4~>L#X4Sspdg8gto@$5I0Bsdy)wg}o2AvO50yKR}R+hz9SxMc2y~L~c zfEv-(dgC^6=*9xno?8+Xx?kwCr^8x$0OFs8+WdH43B4{WzJ3uYO81HIf5Rpyq8I+n zHp)Aqo`LyN%89#^bdqb!XPGwyDJpjMF?JJU`%a!hvay6UuLE+;xSo{C+Hp%9f+}63 zcsPI^QD_hI>(U zEOF7Cq~|P$-*8B?Dh-9vfhg8wdJ4T!k{$`KJCaz~`$a`_l8$V;Q}IZfpLYG)l^t1zCkb-l)`xu`5`f)4_BCQI{;{CR z=4Z9Ei{$L6L(dek>40Qks6+oGrd$c5YG~xRFP3a0>tvIOFe-Vwq1K-FGRDf`=Fp8z zYbX)?^TftCX8^8ez`Y01ZnF1c1Tv)vcMa?amRgqstqPe=bA@|Hzs@Z`tv)k$PadH(3 zb~fQm1fioSk=N(7Z(sEj=L2+`?%!tI@zy&EVEQqs`ge%R2xH#e%r^WDux+Y6P(=Et zsCCdDr+L+1>JymyjJYvMcpG**t|u45C3%^O#mm2#)^AcOS(PDUg7_xi*1O$z#3gTp zF2(QTw5@|yautu}rp(M{Wq202xpTJTM`}K!Z(DvoNJ2eh?qT@}$lPsP7QPC0B{Ldz z^@tpKUdZQHhO+qP{dCw5M3+sTP-+qP|MGXFfx z+?0(0`6Pk~2T zT@C7}cg3VN&SfPOc3Ysk6GB&@{VYkg>jWnA+E+tfA8W7U(7>Q@J(~pbg>A*lG=5J7 zKo-;??D+1w(Dd`ofai&-$gJ~L?Q=l@cf2?YW+^pouHg04wD24p}J{p)m7rrBW2{b zG9xA*WHHSnNUUF26sDJ{Qfa?pu%538hTd~gifznMn z3&3Xy2?uqL*N($L=Qj(6%Kh%f!Jr!!#SVN7FTJptMlqw1En(Oe8S!m)@y~%6_nNwZT`)KQB^}w)Hg@)CYhAAv`s*BX zj6v00l{Ew?#>dG2fr=jv1NwPU>EA2gvbn({&PwOT;C&F4~sg*q1)eg zK->Zr6_8&(bygU_RUulZ5IRED;@)^NiQ}mHL9vo;D^Pk6JnRZ2#*O!fnOFEp09zdh z@VTl8&mQ|U8DO234Vf#?O39bq%d(GlZ|2>!wS9+)93oib@#hPZZvf%;?smRRojoOK zRt~TwM9Uk4BCqQr>cZik8GxH#oz)FXT(e-v-Q2=rcOOs${;BUBgKy16y;GX-93ONV z*Ap)?xMwY%%AH%9F5r!>O{cLRf6)M=_YWjUh#iL2hNPB}e3!ZCTu?F4%n(+M@zICf z=*nwCR#PRA2Q@QW%A=YlMtdMt$`z~pP|!Ka*^~!qCKs%{{SBA@ct7kZ4COHB9O4fi zA)%>aZ9J4d=cPy|v7%yTJ~rZWEU}l_qPI$nJir~$(~i4<(vUqy-h=%d@i+uGoC;A* z&XN}^kY)9uPZy&#zG$~^6iYkY3Zm_`TB@T()n54m`-WcY4=S7PuZZ+9t)HyG3O*`U ziyG@#$|t*~qHt%GC4#SCN!uygwTi5Pc90QgK3{d$@HSMUv}b~;E?=NNI<$h+RT5jD zrTWN-zB)AWE?(8cYgVmkS(+M1xv;h7)Tq|6Z%GWJUD=rTva;#Wsdby1>U%b6={)zx zn|^zC6#sTa6O?q7QJ{Bc{&g~i?vXw&&5w&96b(y|`(aax*5wJHcE|Smpb|sN}njL_n0UMa(AGrulA{0rkvZD9%*hux(vB&PIF}#c5lf1 z?(FMH+ld^ggPl*VOs%FxA@%U0jThLl{*5oVi0zAr*-OahSl{>!sjTE`nL`maipJIQ z!_xVO78~=))APe)e@nl-yZ`&U(FDGz&!DGeX(MY`)4ecqEBtaVd=mW7WsZRI|6Q?G4@C-tm)GG7=+h1Xv6~ z$~YD;^^=T8JDXOfEYRkhv&1$WJH*;Fg`5zpp)FJ{C@Zo>CH)A+P3#LIyFXU^pq{D0 zM#k=>aLv|#9RWPL^;JBJby`c)d#6iEMVx9lYI-U53ysAgQrZ^WXxM_p;6CU zcQHgbK-QNRHF09E-LkUqt_2(QGKFk7z@ujwfMjp8)`1UGPE5maNdWH>uDDH7dk3yO z-=Du?Y3VYDsK#KGEnQLoOrB{Vc`UxA3j6C@^rkNE4OLT&1MGCAA3|V40Se9bSgT{j z-dyK1POE7B$?jos|wNPX!CHEgE)l{@g&YzFG$#|y3C|(*DxM_{P~^Ci!cn- z8$MN-+QSRqoYo5j!=vjtVW1%vU&Boo_+w__)Qm?L=Y~=i@ zH}YdH)m-jjniHeC=KZPro}KC=M=LV0&>me;7JB`81c%`UyJaV>lzHoi@$?A@G>7Vl z%WI=z)mSsBGBKYX1Gz4X3C}V#K`~Qzew|PG)FqN2^1-dju>&2}(>;1C4DxZNtYJ0u zzTLdtng5`Q_=NK%d_ED=RcJjK?IrPLgp4t@=^MuJQx4u3Myl2%BDtP5J^B4k|!gr{A{7m zN8BlpG7RXQ*AyV8CvacUC+3=|-d~v~fK{Yy9ue`O^OxdpXvl;vCZ$0HkmVscR!1OujU?z?GcL{Wq3Qn4rKXa`gatH+UtggNl^yjw70Ko$}|7Q>}Xz z?)-)@`#Cx?VIH~Cgm}-zYZ9*b_`Y^RZdA#N3NFCPLfC?Uaf7-3lIn)$_G0~2L8+r| z4Yd6Jj(?sD<%1MEOYsSgrmzR@xx3Dwsv(dnQd(r-;cW|%_e`TM*5^JW*9bMo$erq@ z@Q@MBk@zf%s!&oq3nzIAh4(Kw#kt3|b4MuI4A?+}9Lf?rXadekwDFjBPz9q+9(`bZ zwfy0^D?6oBV-!RpiZV^tTf2tmDwM(%EYTXAmJ7M^&Xr)HX}5>Gez*082=S zvau)+`BqP=*a=zas;Py3iEAr|8xyaHoZRtx!D#g7Nz}Y=hd+S-8;f5567U8QmbIb3 z1Uxqz0D$U$I~MhHHa7b;n!VDtwci&*|LUIq4x4+1u4>ohaU)PvEjN(amkoeuSZYur zov;oypj{nh(=7NknoVcN?wQ1pku6qhLK!kU&hoxV=XSQ``4!oHUtt4mvwJCs-A>GF z69>dmY?nEdU%j|JVzo`2RHEMOUj7cA0WmCx<@IdU@UBF3^@2Me+IXa*qlg_A>L*ub zQiu4rIv7d8c;oYNeosT{^Y_99cRpF4=9AiG*LFfE;BWTE;m*VbH0T9+g!DR{bPOti zG#es--(8^X)vTh=y3y7mfolnD! z<3*q*a*GlRaEG={+NYuZ99~=+{Px*R?@cT8J^FS6w>=U#y2gCsCwHIcF!**c^Sjkk z>>810hsI!^Gsa~z!GT|=hfsct?%Du?HQGJS4==S7pfvFG3os9XaSv=i201`xy+3On z4Y3|^!RpcF?)s4&6N5WE*QP=2v|+ zzuXfz0GNlDhGV$;uUQ=M3w91i$E+wpL6q>n1QQi`r0QN1c=2Tim@}>sU;K-gff4%m zNj#1BAXA?4dS_>t(srS`>gTC1^PN3#*ualF^L=oDq1Ci55(YO=7c7+f?Aoym zWjIpk$zjFV;A{b7B~Uf0J}AJ{eLw+}U!myY@nCaFu6g^Ph_ewMrUh^`Y{rY#@cL1k z@ux+6yz>MR7eu&?DV!k)O?fU*XM-b|!tpUNRIA4#ma%ZIFCO$tEp4U#q=_tKQqoq& zOWfo~!;DOUa;|dS;{I!M$lF#!Qbrx&HADYxcJl0kI#J0!h#ls;ZY57n)Kuz3e(}Sp zgVkc9RQJ`f%FGaI^9} zrLu0NvJj-g1h6S!lBJxg-gsiqeUMkpirdWu-)?GNq%V8Bb@|uwQL{BNFQR?AQeDlN4sz#pc{B>F zOW3$3-3ZKZ1}RoCbVCDHGm8GQB@E%XYziRO2!u=nOZF4NCx($GhA{vVpj7Pi*|_*-nrDdae14RCbBCHj7@ zPKZiJ#N|0rjT^dtFMmX}2coK6y8icByA^|^Eq=8W%o+ZsaSy(W)iH5JO;e<3qM@Wp znZQ3vGHv4|7^;z!>ggbbl8i@Gi3T;rX->(K47!vhI;Kc6^8aZ$6aVLUTe8u(DjDuV zEX+cxF$$&`!H58+SgNrKrWwVE1yeNPh|UBuu2y~iBfIsMQyE$ zvm~=Kg9aC?1{bXcmzAk`*UaJzR%!PInl0M_%gu64hqzhFsrf#$vqiJBMzgb;jjN0n zJmW^les%9qw&|44S8cDE`;IuAP(d+ka;@TN$!h@+jtkbvxzPM#cS54gDt<5`?{mb> zTL79Z&BJZ$z{4T4k>#W>KY8)8*Job89Pl{K@<~H1=)0r}y1QNrRxRK%4)=UCp zx(NwNL8@!}7Py#Bdc$ z0%k>PevNE10QpIhfG7-tg_x=+^mGke(S&L#@#VbBn4fuptY3Co>0WqoOy7tVTj%8) zJEq4{Y2M36GD0jt(!Yp~RWbRSP;!vU^y8Q8q1B|4B7U`tW{Fx%K^hw&i&URpQa=Xw7UckqPwkP#q-f|Q}eyw3m!~6oz==r?N(>-73^rSwL z)Hv+mp>L-?~2=wjSi2sTs*varAu1{r14dpiuDr)I8{vglK@v2)R z;xFKzoSpNkwnsyqGlJ4d$r)RslcKm*&@nN@omaGS)1(I%Oy!P1YK-B!Lr3d9zuH(N zY(6sE9YWkHmwhR_e^EM9%M5b10e9yb^;t!FRp4Y?ce!=16o$-T>qbSbN2m{&L1jfBXwiRZc zAr=N6bc1G0J?U~xyeF;JUO#g!tdgL(sw-3d2U8@Bz|(KZd*i}%$4^qIad^ioZf`pe zh~|I-w%@`YBr_(SkI2|JJcXpRt6qAaMK0GJf_$jpFFmh$pyAlF_FsY^N3>emSJJ+< zF22nEKo(I%#F+0HzQ+A6XCywJlHsBI`O_}e+L#b_$W+N_Hj8vJM-;jj84}}gX^DmF z7?3N)d(>(@^|CU#=R2H~yo1Ui1HX78#H0@f5k6Q90{$UAm148^5r z+=(1In+jF2G~f6^N2{uSkSJvG8L`gcTs3E{;SF7!y#!MuE^FdQYZns8nqYgwca4#5 zmi{D(Nb7U!*8T)I^x7=ZVujM$PpHADyG z7vu-}9FUP}dtAsHgay@gOo9o3gJwR%@}ks!U$4j$Q5u(4$;0rHKC76;mr*XP;*zc2 zkK&NaY6+SzJr(EG#*UU35z$pF&kJ;NN;)@H$>%AdM>_7PMMK_uXqfncy#40`U@h{A z15CUI3&pI+NeeJqI{A@~0rr2d(dN7Krc&{HmeJxlpZ)}>G@y^2IMXq!*lTOR=unw^vMo(1C^QXW^*zFCg)Y zXws>a-50`B2u=uifCDaz8)}(J9I>nB)n>@HW1eqsHy2B2m4hAg~~8n(sWf z5LuS0I=1!cE;01fUM>i|-b~rX87@|ex+b56+5H9T*--`CVBod?s#_F{J{`GTsMJJTYRY#Ay{$`f5N2RvB8nv zb6XXN7E84Wjhx&^K)rIr!N}55tMKJt=fhLg`4Opi);GYt!m-CsN zB*E%HDc#S7fHeGTI)S4I=4mcNX3!#tMW>mya($h_st9nO<`NUQiJRM_70SHvgHW=n zT+|))Oi}H^T7+%s&UTbA&JB z)po`85Qly_Q|#!d*!lI4YiaIg`T6UztWUtoR?iD-qYunI+pA}3P|I4!j;Z!N4}4JJ#J)5 z{SVweS#;uJjxS*$&+Erd0qF7P0Bou9^|pIcD{`)LRN(!G4FOPVMPQr@>r*FJ6LD#1 zchXfc`3!2;wC3yvyLeOmrS{CwcvsSM_1>5q-eeiaDT2`-Nu3-lX`R>Nj%U8Y%hWKOwVagxEUZnFcYX1 z8B`|_tdl&z`)*)BEZbWjV5EZSZN0XycIXxlz)v~EoQ$pEbIis>|F8Zcay@%h`-LiS z112AEB`$7gXP^s*2CXihyui7nIDnF3YNu3MRteB!Qf;LNZSe(#PJvDImoECHZWhg) z)o2Q6tcp&|Km-%oy5ONWq93&`;Yg}j_*H`;w*~69vmA6s?=zr-fW3VtUU1(7Zk8-K zg>!e?-88upx>7Ry>eVf!6lPmH%j@`LYSWR{q|%!Xebsf46UPd4%N{UbCwvh51w$CT zfde$tu$^kdlOsp=`a#qsef8H{uiYKjsP@U|{GTp>?>W|-xO`Y_(AA97Q)j65zkQGV8(!AFAQkhs zyyl77!A(0Z(9zAwumE?U!q6>e_6LKHrjiDA6_UaD}>IrKyr2;1oxkm($;d^Gny}UE5 zTxCX@kZYP{Js_V@T*6m~lP*)9LOQEz+LhYOu8=Me%UfSlST2ffHa37lU^|Gi8D4Gb3#J z`3KJmWn*cg_6FQ&Id>x_)dZVLnKn$pZO#8M9-nh;1C1w6->0Z?CdJ@Vwyn=PlOzWK zV|&R>Qp;^;(#LE|7s^lj!H#M&xN)RxjXs0+)q*5+r8uIX7R81%xK!c2i8i=a^+`Lq zF2c=y;bxw!`^}gUW?L-Lm~AL@px)z{77Z1G;?^-eUzqyP(iWX)$$py=e&|~NBO{p3 zqZ3>sLVsRu<}qjMqS$6!(fn4&@Y#57kF8PZG(~Hhwb9cBu65PO?hN$ zJzP7jm)?6$*nE|~zDhmnYS5Y*3=hBh0JvN2i;6J~Hy`BG zb0qQ{>%QmFm_FCz&r!n$pkj&r7c^VeBv0nk) z2$>rS)N;ud#Ux4(8`ScFcG1QOgsLHf`0t`YyGP=j$!X#S>6bxM|5xL9`tBi1(~(dt zTq9T|DUOp%-cgj(tC3L~fX4#*(QUl3@UE}oHBa4o@{z+wPLzFrtw==!8P68`-U1go3<8{z?gBjeZ8$$Rp8mMD@28^N3ml6sC!c6&Eool7hv7VmOf_pR*{21TU2!)pfKA<9*Y`R9#Z3yz8da1Q zsYqZeKwoHLC3~i*ndTI0rkh);A8TTzc&4PNo}snN z{p&}wmXI2=f+a9Xu3iS{S6%xpr;~n5A?DvQ4?MMcdGxvL#9_=T#%92+_(6Y?uOr2` z@4GHJ_0!k)>FAku&38k`cWi-8%^=UsY(ZQCEVGkfx7Z!#ant)Bmgi#g8Pc>agZh#V z>~@X6>eSNi73mdL=S(%{hrM1H=y}G!Sk80;LmsnyE!j2Crr*VKY&`E$5|EIyGIVJA0Te z-9kGt%z*98Q7aN%mb-Y`3D?U@^M+xRsu|61+703Zt~+`}+D&Vw#GubsjhxD@DVV#} z_?u+%=;eJ<^q>kS`YOkvQskM#XSS^(>D8PVBmv)Z4i2efX#;1@gUT?|<#iS)Y_957 z$V1XV)g5`FVL0gVJf%+#!1h7^2A_Nq_roqvST*wcT}v1C<|@UG^_7S|qOV+VALV>C zL*w|~0!IZS037=4EL5|-EEa3rD+3@I0S)67!)N0SMEZr)8#m}d02}w?scyNr;ash;H7GTHfEWXgb=(K30>)jz- zfOl8{0^e@h#}-W7j@b9#C!~RYQ5ehF`-<#*%TYweN!vdZ_Y8ALD~PAfl{AzcmJ61m zX%)6Qt{&9=Dz*n!hueb_&5lQMmR3_@_a7x#={Wu$N`-Z$MC0^nCrh*~Ze!Or8uU_$ zW?ks!bW)lfs2u;J^jjH-NofRtx^--tS zIAK;9Y<`U7d0$D;{Gl1mk)(}|V$c~STW5@pA(^dH*pz3!$i9(mOj6?U>Bm|Rnj8&m z2`BMAW$aa%jc|U$LGD`E!z_ljvk${nCUeA^#Vw^`vGyhL$RGVuIq#pP(wwMBMK?uI6de%|<%eCXg5JGaveFHJkLtFZyeL-%UKK19l7VPl zV_?SLCmYq)JTd`P!Cfflsxy=vFy&0`k)-v*SX^z^+ zB;+g7td`gEEDQQQ=IQ-Xr(fXXKDLlSdiyNmjk>Mew~;8P>Y)#6FVCgA2aKA|P)Xe0FLcY$EPSOQ`)~35~e{<3a%|6>@RxV$+rQ?@4}Ktg0@mN9(TuGSig+vYEW8 z#Rr9{yH5X2&^S&R#5PZWYJb}XhzfX}lm}n3_4qFPRcJc~ynnr^GaBrdiwE4FfY5Wv zTrj^ZML`vdnkY|M2N~g%tbDcMd3C1b&CQVr){NV0_7_<+WYMfX^!gybBbUgu!fGRQ z+n{WnYF?#A?Q;qcCQ0Jx9D8s4uQqmcG|6_>@)LhOpH}T%yVxF*>eUR9J^Xx!=DBt; zhoj#aLcc!3;-32vXz^&Z5DE~xfj!y8?t9%h@9PBk7Oi4-S@p7|& zOdOY(tXG8OLD0Y5&@2?XZMq69W~J6wCwSH9cy*jIZY%qTDQY+n`~SIJw{|y{aX@Sy zf=L{LA@w^6`pw;jca5nFO{f9>D&@!mwj_we24-^ZXK$TLd00LtDZyde>qUaE(as+* zR$q&|`QOh0K}9toL?4qE-(# zGskILVg+%!X2~S)WR;q<8NTEC?c{lOY=u8pMc-K&)^-gvM+5(bWkECMGsS5MtCo+w z2yDMfD{+bhz_nm6FJLP?;0x$3AP7&{pEW-hn`VI-rLCT6((~-dGJmRqKXi!8vGbN} zHr9G>97|xnSQ+1z7GS0MjAM2z4B(QRi;;AK`l$wa;sPxJ_0_}x9I{gbFD!SyvY)#e zJeK%t<+QD|rU7Jgjm!%w0!!S|-TbHVZ`a z#_&jE_>p<+c2#0tv7}K!S#A^u;X;_DnBcB}zr3a6AS$?tbxcHBGl$||5?1od_@d)M z&VJ}GAypPbrm~9649aIX!Ip`PB!Uot2CdW{gC{;x_Ofz z*<9Fz=Zr!P>tS4x01TSS=z{R&III}1w+5kS`j|Nr32JLub~Kk4byoZ%K;QNQz$ot- zI3_}`P+3WB&NDHMQ9Vc@&()Kuj!zNX>_pO5wM8L_UWJj$lbj!T1$l1sk<3C1R55t` z*RFtQfEC6%qkj{=oVh6r-LzH$BN2)9UT4b+G|}AS{bw{YjK@{~ZZF4wf3WkGT`f0xoXFNo+N4}{%k+h#6(U`piGxqv*eVI=3Si0-5ZRIzk`T#($^iA@i_z#abN7r9g}1qn45cZ&J(jGs6%l9a z#%%mzAL10Io;(4uBQZ-`lDb+so*lKB_cuFCIxYa?$!vY5}g0bhx zAto!39Gr}egGaO=TU!xhmT;GucbNKyFP+|YNdp2$1yzd_l;CuGsBy)R8AWyjurl5E9JrezH>~0@L*hhU( zXq&M5L0A9Jp`n!sew7R1x6l_D0DyWC005Q$?x7)9XG15K|69VcYfw5hAjfv0(=Lko zD`9ap%B{Bb>IDomnrl|jbfTn;v;L2SWzFmFKND{A%i%~7KODb@T^Q1%$J5g;Sv3}!!69BGTB&us`pu^K-n3S)w5u7 zM7f7WPK!L|w8#_;r{(SJHMayi!FQM}oZCBy{Jlt7txDcp!R@Y-7C~$m% z5FarI*m3!Va#V1Q=pWGW6g~$-FcYixLqv#&U8s6px!Js(>uve=ENwsxU4tBSgb6c( z*b%)5_MnEb_>yg>qc(;HiOKKiRy`=V%mAvKD}(s!58!&>B$US|6K#TWHqL8#q(rVx zEV-Q?@1N_(aF^3bH%dqzj4ZxCkG*FsAPqi1*PG?YPQbi$4}z0DYs>_mVlcpq?%S97 z+75}#c6$Y+V2OH%zM?Bd{8S0S{}K?D>;W%Do&t$g&g9`Lxqh$ARYg z?$v)xg$)Lk9)vplbVEP0L27Wo3f1YS42>Wn91z+9|484W#_QR`qRr~ zH#v(XJlakcF>^NO&JQK7Gk-+PfeTWe&KuVEDS`szt`Ta7gN_dv&LFVwrvF|DyxC68 zh4>o-%o2Fk?u>}|Ykr+`#|{xRG0XU)XbIs26AkJjr#T|_V{*t`z9e?lx01@mN!o;l zpo9I*Waqn6c92g1CW(fF|C3Zwp;xPp+cP4Aw;)SSDI`{5%z>K2et~IuL7}2F%=MO& zmF+{49PFW?zoMn6nlS+eX+z6FyL9l)(X$WnOYYe+94v4~-Yh z1Z6j7+#zW;siVe57d=kq1~VHuW=1i!cmvzV?kQ-bCcPG+AAI<1}n0Tu)q@>3@nD4d3n&aUl^^c#*C>5Ru&^&Tg1e$m2JhT5OB1FPalAx|IF06%es6()w zL-(o*!>;T+)D+E`uW6>bY6t|qpx%Dk`v|PDc5j!?0M8hudivT5$1tjvU(n!zc6J8_ z7eE61vMf1>7{6!$Sr&Bg0Rj4O+YgX}Sp?}w{#QBy)r9hP#^1FRn!=-NmcGqT%@E46 z7nSd*Ijg(##*PXJLeU`7uFhLEp)9mF8M)~%B77jAC`0eJt;R6zFZz!g8L#{2G4RHA^U4+DE{N+(#Pfdb+pJ&IO`1vS zLnSWM`QfbytXNQE&6Gy44rV@^V6zk;7Ivw5nh>+AbbX#!2GxfVd^lT=Pm;8JyIk9! z|CT4r>LT~*AfU^*3AC0%DjZS>G)WJTlRYpekZEJQ?9=jL`K|5?|raGx|1KlU(O@L^o-b@AcBSKfGDG8;Nsznl!Z2cLV+Ln5TGvrIzZ~n`8o0I&{))W=c?&_@o zrZ*&T39)?_A_kfhx44QX7!gyaS9BX;FqPUQrjZwB)FZ3_r#%&j^8mRS zxkUh1|B!Up=uH6*^ly@hiU9f8_{RZ4>q6uFX@MQ!0D}4Z1xs4Ztw%Z!o^P|-QS6Vk z2hp&1C^UMg?MR|JWIsJ)E^oi4^NK#vr+mPm0D>~*B*C=NmB5h87tjJKrDefpapRAtsa+%Nzuux!wk!Ei|skjtv8P4^f^zL$Y91K(1e?zqj>o!;UoSoZC zo@+C_lewtvA;EZx%OEZ<)#a7o#^0!dJhm%!wSeo|>g2r%V{~g_J2jiWg;24$Ub7g> z_`{dyZj?-sJIrFNQ?ZLOO$busD-r`NHOqkQ3T5;XioNKw-jP15?jKxEk9*R0G$6Gk zU016}PT)=MoVFy_7xncweA*6*R)3@jgEw~wA7cYrqzska?4)0|00D?@urw+ zZ}$-1>?EaPQv9@5`m%EAc5N&-u-lD$_hOz@Q$OECFhrI3SGfEj}tt81gqv)4PK~9JDLz+P5IlZ1-t4z z`SyIeiEW_|b^mq6U5X>1>u9snaRhK);rQ`R0Fb0=Joo+=KtVl5v?dckA=MT$AQVU- zdlY?(O#&c^*4uQt4{$L=8ZD0!T;T@K1Q3hqMkpHVdpDL8Zh0C37NMBoU)0fqk>!mW zpi9W7#xid_@dRD!OrmKQd)vQDt2ZCb<&SO&oA@oXg7It4$V>L>i&KiksHR${wls^< z(LpESEsGs4W7(VKePF)ToV#_RFo&z$f2F2;;hX_)MQ9u#zhyVKJ-#N5wBb8SaefjhyTQ{3cJ&mLmOt71I<*DzU|h58?A zFb3VIMrC0;vyLa%hK0r3^FDuxMhShXPN^Uyvf05g5VPdzi&DI(qcJ`l&m`Vju$hP! z;^ldz2#k%0Gnv-zn=@wq(R+~~#I&JB7Yb!TLmdlSy~prO^S`0;NwNj*ep(;UY%XUp zxSMzVcH%5|Sj2qh*t0I2g%D2|9oh~*9G8w=GM4;Ruu~TN7C8!O6ip)q>XKtjQeor+6Ml-C?1(u{xh&* zx&VNh!r&)r0ek~68BuuA`nVA6zfVP&b@7&*;5=@BGb<0(dQsr}t62fqmM}JA>TZ^T zW1hR}S4t}MG4C?Psk@(f&Mm{iD=a{VK*P*kpRFad{UmFWOD@OUom*G9iWzgd^q7w> z9mS3NDt$V#EE+V`mJoE?Pn7wgkVvQ?8s43gOvb0|)z2jP{vLkc;$gQ~o`WLsO%C}j z^^FPS82qA0>c42v5T@QP_J;pohZNDe^0Nwo0RUd0|37#FyStnGYBQSDY^^sK5We+J z{W-WW95o;IQ)ug4X*euT=3I-XGw6W}*PUn_NQfsS$D4n;6RY2gWt;0v1KIu+d0$_* zac6stjD&#$jCkXM68VH{2my+hpq0A0H0ym-s&d>6n`ItSp&{)yFo!B;kkJrCLc%Fa zp&gGVjLXn(!L|=v_tJ!lpw>NSCdvn&i11~t`fjjwyd=y)xR)|c+0e zEAPQ3)5Lt$i*y%_-Q36qZv0!{dZuK!mRT5%~0)#7cXcMs-#AEwCe>EjQiD)#PjXwBpNLRs9>+p1x;q zGR-yt<5z0lDq2!J@-!aZ)0XWqeQM>jQEr9?#ojYLlj~{U7l(f<%iK8e3Y^iU-q_Gp z09y^4HMMzhmzwU+-u}*YhVsK|YIc8(^M1jOjy;$~uU}g#(fCGdQFDCLw5quim`a~t z{~2zU-pEe*-k|y~Q~lzfHo~QzH|=42@ej0-=3fAGFj%K8?0P^Gm8Ce~P8K4z8Phkd zKHaXM#RMKj(GAtt{W*J-Ek!RZXG#qXFee$^X%%sL4SQHxRR{e(+L&A7VZKq}dZ56r zl|Hy=_Alh>rk*RXWoxR3vWmLObMFL&^~jXLDg|Hhge){BVOpiyrWtvTHu*B{Y8)#; z%mr$U2VG9RI?35M(~a^T%k!=iGux$$bNcjBk1OlY!r)2fNlCe5m;8-SHm8=;E&)$? z;2iVfXX%RbV%SLz$X|)IMNwY~+E2sU@&sny)65QptN2zMmjC~u*zyHsR>`2F7S;V# zY=!>D*h&4rlP@xo!lH7@qI51EE-@M#P6wl~zUs-}fKBvwDvVg(%$dLT4Uq*TYKlcd zO3$y9qRO-#?i9@_=+;>?68C+a0Q3p8wpRLPBLA>Cd;@~OvN}&AsTwNdEXygFKY}P# z6p^>_q#i0-tfZUr*%uTd)h#s>*A%_h{|9UD7$r*7Yzda_x@Ft8ZCkf&+qSE2*|u%l zwr$&0UEiD6)7`V?-%S3cWbct?o?g&<8NfP$lVLsGs)mx2I;Wb z!nEtr;x4K;@%N4v#O?#w>%4cMQGZFw-W7Z%`$K!-uhO_zV-AKHd=$|YQmMC2`vUW# zJ0+8KxY;pcYy07F&8@{C?|fHcT$83ilM$A6^PxeINE4 zqY_EnUd@uv3nUk=7>oK6l+OVGfEIEurFakQvUie;kgk9w?i5u^g;9l*DtcT+HKlk~ z5d!MxOmlKd#T*3#sYC<3#6T$5Axs~-xLg}+nlGLQvOfzx9~@Cx&0^SQZWAXQWAUWd@PXgs8b28JeetODemaiCpHP@OX5j zIx{H-B^3g)O9IA~WSq&BdHE_zDo-OHjCqGR*-T0E_=?&_?hV0{+hYyq?kIY0Pf$Ry z#h=UOKa*A|FF0j)$N{eZ&_?8le=lbn*9vWo-=2J{)zlWYDn2Ww%xH} zE66&luaJGLFmw5?OK@D{k%afWG1BPqlxQ+b#m71F`dC{u9$@F?koYL^(&YML3x`?| z=VxfUuX+e$y%Ph#0jN@4{V2WK13}-8&+&&_z8%^6HS^1ndnnpz7j)kTks%IJPnHEz zM&wc@wuQ9NMzQ%djVB}tXm*I`s`iv{q=mdh_V44gjO^zT1^!cKmgSDuk<@Q)pkyDy z7Ho1VS*SQ=n{G##rJiNk$bn`zP6R3ia&EGW=p4AQ$S!jpsj2sE)}^U=vRR&X_}1$z z`69J>!GZ|(&ea)Yl_Wh{z76Uhr|6s1E8yHdpXcLhSXYEA>3K{S z-CE4irh%6K8t&u273Lpi5-gohNRHNpz^b#glJK3|=a-GKcb-Kw?fR9TNI7-nJ+ndT~ z`B=u4RDBXd`YM3Mt)Kf+thNgd1i$e?3Y7u#=>hy$|7{-n%%79Wh6t2>)0{sjjZLISF`N?WbLGOn4!2ZW%}`EYLsMH2lgD zwJ3clfuiZm$}GLXwlR-w)vRA=&U~T;{nVvvFYNB?Aa`2n%((VB+#gUeK3xsU{tmEx zz~s}7-p-Dv7+MPB!f?|#n!FiE;BP zYK;G8a$qxo-hGQMdlOq2#_AP)?YA!DHS{A%jF8Ktk+Y!gBNlc>fqi{aN1r|7?3fYg zV9p()*S{egta^Wnc^JRBZ?FSmAgwog>lF7u>C^RoKs}%#Tzj(7#h~Hj4uTZ{$7^Jt zBDM~j41={`sy$00We+$EP!h}2IOu>QP7d0F!?K^_05kuq*2#U-ST>j@12ViXJz;i@ zksTy_Y>k1!4z0Vz4!9&MJM`@xdH;MY?5ZgS&&qAf38Vj@WrJiwf+krwfm^S^^aYpb zMwRHmphjeFKBUu}!`3;pZv5-K^&$vATlV+4)R@1ej+I!7rj||j;l2XQF)qBN$8~0P z6Cp#7L{37j#8^ev+S-94<^xw!Q}W@q;DLCpkXRo!k&nT?_}_GRp+lsUNn?ivg_!^V z`Y!Iu_yb}T% z1(E$;?6}_k_Hh)YwW*;Uo1)91`_NYWeW~n}Z#lHNZXCc{6h-jc$Vjv(Yq2;s@c`4C!#LJ>u;yn zf*7C!%`B z)9@T%{eht1&u4Ce(VNbR81hvcIh3<|%6S!;@R=w7bbF0`-Wm1XnhSr-#WeA>vB3MT zoULPCx#autaDKZR`SEnqv$~x&2y~TP7EYgYw#`c1YR~#S+bOFqJ@}zUm6Nkt3dw*Y zf-nRD6h#O{jEyxilWHeSgW9{yEiTkJRP16Rc?h@LRwpx-9XT55l7XxZYW#k91PKDf zBOw#*FdcoMI312QpDZ=6SnLOXEo5pT3vq|S6B!B~A8j^2Er$u}3Z1Sbjw*y-)A zT2M{k*+a9*>P;nH1FOzizGyO3h5bqXh-b)>cwc~uX_wowsNnQ!UDiV}>ggI!oA08S zB1N?eQ=99kQ_iq0=fRjJ#)x1$PZI9}g3k)*>DNvS#!se1@mlNhZ&%dGqb4(6EY1b; ztUcUlhea39F+Yw1YjE^r^p5fiw=xUi5H2lJo3|=Hf0=njA{w^C`j>%taGPW#30;gx z8_F(*cIC?ybykKCz?8K!?R`3Oc%wE9Y-b14EOqC;t8-iBIFKpX44XvW@#34rjDjw} z^%7qmcz=&O>=`w_iTC5;yteZDE%<{hC6|fx<+(+Fmh>);QgU)TG05#G>D(CnXaq|( zye|sOl8&A(IHh%J@Y!FXYj5@l^AGxT;ZNbii(?IBO1VSiWe-?hMv19zWDiW--&dEz zt(YRo_cPm}nibud0J?{dxRkj~=6Ci)fp-__yx;U4`UVB9E+v+wNH71pP(S_;$0osttD2w7B)aLPU-|#0^95GE%4ZCUb5AnS6SC8XQ zIq$ha#j;loBN(X^ESBoLkCarr)`4r%Hqs{tpZC}nvb`vY0F3SPkJHK|4xlg4#y3q| z4X4n5)jlBIgL2zwMiJbAU8yrbHPrk=@9lzLq|i;8|3b<)QqC8>&8BWb^6oj^ko`{_ zwcC8?p{pmkzX?BxR$Dg7h=opyf?64cO-BiPGo^&SWl?S&tlrCddkg(qeCNo@1$$&l z;Yjma$^O{yH3vl?G>hSV4mbI_vn3z zUAv=i43O#KhH#@YRn6)~P2O!JR)RWEf087<{u3kMX$pZ7E9knaQ(TCc+C`bRVzjruoexyrHf zg2z@0d7{{9k4@&HqxcyurBn9*bubjSHp_84#>_)=-KTCub!F*+xjCfp=2mTO2`ytE zKCg;WP8+v2PPh-7>15<|+=Ad0Rb(qiJ$%?g);#~*Le_@#%gcrl3#PRYdF7Bv*P4)R zZmw!M=R-OhTKDd8EvPwfU@3z3{L-dh;$m2y6cn-ls@+1q7I6>NxTSM>SKGnU<@ULi zt;3CAD?|+gNQC5x`uxSBVD{}ozqFUrC<$kZZ zBn5_!?r6zcjt)adXMAQOT?eSMu%ro9XFfqXB<1ljevhP!{dd>&lLbO|7EaPD)`B+WI)QpW9;{o4r6EMpqqoI=6@L(xk>!T@q8o^h7N0H7a$7{$Y0ZC&0h?RzZm{2z`l4$3ar{XTi`DSq+Jr8y8jI0@c%IR z&yfEM!+($~F8l{>+eNs6Sd*_@?;%n(=Fc;-kTdl0FA;$<31M1BA%cnMHRf32|8iHUGQ2DhGtVv z*Mmz?gD!b%W}uQx-%37iM%;}E-)2#PVAR>fNbe6K>@Jiatd)PI;`DCZ`1=721115=OsgtO z5M3>*BSV1iCLHOSx}cai%*wJcADBmZmyb-uib&TEw;LJ)l;Bj6+O*gSMd-Rw4%?M6 zDXifwp`hw$rMndNue``Z=Ss?gNGmoBR2%CV2u+U3V!sMRqi%5EIg8a4=Z}dc8VV&A zsp-sLHFVIQJl7Iy|HE7@!=0gB#tce^99}l&DRp_{5tY;`g%LI7vP({$V>BnD2np$G z!(DC8Y=6hDxF-jqFKT}fedYj#b3iU{{m@&oGNErZiCi1VFtLHyS=RPLB1#~R+_Ugqp@;KgWv~~*I@j7@gD%;IeyyrNdG@X z7yuMrw)-ud-6o&Ghv{#V8frAp$4CsF7eZ4x718hR6IgupEpN!-Q-?u0>d25rbd6qO zR6rd9Uq~xwYLzSZ)L%$y=V~kxJ>{NX>uEkq)3L!bT}EG;B@#={>B`>rGUe5a#0(M% z`<_i*q+RW#96W3;n-z)XA}8P6-cU%|MT#Skm`U4c>Z+8!`;p}Tx0q=ESO%rPDp zOK(_hLw!w}HPu#M?aH_YMAD2<%V8Zn%LrGrP7Y7xmp5V=6wOsG$8NNQ0QHY}H`P{GFCjpi+w5OLUwhH0Zby*>CsO%H z)qzC;V&TL0ZAE&tl=2jqV)+`sBny^!nF%n(k`;bYI&7hGga04hA#8E;=JXL1g;G*j zuOL+=1OWAN0r@gx#>X;a!;>bf%g*HJtd;t@2TfKNor&RT%e7T^8Z53Fv8zrMb5*J) zs8>*`tG{L}05CxwEbPx^rUt)MaFdO@!&mPWw((N_4Caj-!w_5QV@ ztO&=B6Iu~v%bHUWv*pzx^mU3gExlP~AlgaCA40XqT*9>`tPsnSV14Op`07kpAeJV9 zdQ(;im1(d6Z&P-Nm#xdCjly+FwbRO0tTBN7yHof@>L3kPV~vq|XZy6b=4TfjxIs9k zhCd@~t3URv&%T+_UwHrPa7VNGN3}{J)Hi`tD@e7%`7aL~4Redm(zn*ysxKARhpn;U zPnFeWPg3+(OMTssD(mykdfgWmcLQhQgYsVNaRpx86!PW+TS2H2WYTP39^}{#D`~<9 z$M$6|b4y;|sLitRu#p1)$c1H zWbFu56p1P|s5kzKp0!Pt2_s$bk5b+UrBZ{H#tWZ3)ApLQYwR8z>29=^P|n z>o5;i^SR8=bR0E|MJcK5G3;aSw*c1sOqSI#%yK?~p+%_h4V6d~>ujbUZ-|KYP8`D& z>mNe&Lh4P*nt3moYskGYvqaC2vfc>^D#Y-QFQp!(sXsRe?Q1hZ#5=!{Ons$XupWKu zgVQnZgHwl{M}Rv_5W}ky0XfqBitjY+hgdS!lrQdG&*ve4&leE_!+OI)&$;XJrI^(Q z%z3QQUQL=V9V9%eQ*4u?#h|oxnd)RMluZ$T%B4gGb9ySuUwqeDT8sTQcj4mnWAY|f z>$?K?RTiqZve|OwR5MvCqm#36>-IvN@U;lffxKnW3O`#Oc4shYN8PFVek0=~HPv;7 zqttStxT(XL$wX{ml=>`Qgls+`^=<|)0S7p1nxyet-P6-$q--s1_AlzOop5V}7dN9x z6Lt!zY|N_C0zdJ6Gu^1|I@T2HA${XDm)Pjds0<(}p_lDch-)l;1Y(qJOT^^_hUykb zH3tMC;WM=+;mS(AmWGUR6BxFe8{WlWqTNV0;X#itqD7wsb zb6mRa@PD}tHaOV>cKRwsN@r}PG|ah{liBJ%Ts8ITh?vCJ+^5F0q7Ye=pu-^FYVoQ) zfYq6$3!eFuIZy>+cF2@OD2?@iP0YqAvd4fF&ncM`}?%ETBcAPVFjcWJjKqD&vm$iAdyIdJzw*NN)OAK@4CFXzjF1J+@rKQ? zGt{1%C?fzg1s`b^iH9x*mMMc*(Mh#GT4V<;y|KEj!+xrh0+77$p}^>!+rVA{*QK1F zBou?_4d5xppAUo@eB+MMGQv|$0Z90i*1jqH9v`u8Ld2mlrn1H9+MMm7Uh0;`f{naUvP#ITRp0rZA?Vf7sGi(tJ(ol*QS2|Yob=-WCwnF(A=!!5?qf* z4pt<~($Sh@qClQ(E)3Yg3U-ye``Tt%1iqniXNFHc)2?ZU7WNBWgi1nrrHHfkq!mIo zN4zb1pE~KEfF!eOG*|M|toZ?__K0;4{*ATF~@km!AU- zK50^ScW8SHe#u2!7n<@k=u(1JS&iDWg9ow$(#wDLE6BIiRNCAeMHwCnj zBCF68x`Ie*5EMvEL!d`Lb!cl;avSLm%=}J#H811+eQTPY`obnw8r`NPHy}oLxvr6y zBq?NLuFB^>lFHet|qs`a9Z3s^XR;jc5xO`FaR|7yu4xflkK}7VP4!V!hlF zu+fpwWeZ)O?l+*vn(F?keRW0BQuo`b4kS6PerY@#uG21Lf{~%d!Gt8e6eFYhQMAo& zy2Q2rsAJqbe+c9hqYgnX^JvuO*MzjXb76U`(bnnb8{5GfxW{M^Oeo4c=_k^hp7oy7 z^-%d4P+o)=NTNB6d)0mPdCu-ZTx~wkVH^)^?5S9IN=U zpJL-WL9)mUG=_1kl!}1lDf1BqsF&CAVO`FUeriy$q@_Ud1x1{ketNqt@Nsh6Iq-W9 zeE&WW{e`m)1fCzLzT|mdxN0R{*Uk(~5VubjIh8%M8a-pKOO=0W3dyod@WiKgN{)Nh zqMij>F6ctsB(A1a6_u9i?SNy_%vZshvwDATO62=98o>eC=e+V!v znI|}_Tz{Wl^!nY>P>*^sYHUC(4(zq@1E+#T*Y}eSbK9S(w^c)22flSpzV-g9IpMn1w6yZ%M!I#M)1(3I zxxo>-8wWIIw)Ty*p$CJGu}QAo!>vZ=tr*)0t**W4N3WWeozSfZI$NU-w&IHA>lTj< z*SQ*wsFsv_&=;EpDx0fjY!If_t9UJQD1J!;!T6Veakcs@9nzY%urQ&wjEM>Tk{j3^ z;1j&stGl+eyA&G;+$^4=)*`1<@u04(BmQE4!`Nabm&>W`MF;%kuldJ|NyYiHJATNV zQfyfLPfug=MlO}VQGo=5g72~?OpL726kPiwPc3)SXj`@6kN9PnT=mPdIFg0F4V3Bo zSu(@yYzjOZ6DK&zZyZ$_u;eLXGItJ}e~Hx61S;Xcs-lO61~F7S0f#9M1y!PgL8ZeM zI<=(@SlmYaDr+$r%f?y1_AZ~ zvsjOF$U&Fvt+n0i&Q#*@9kK3jk>WBZqP-Pckj)WupMPIk-lgQRnRHyad?k1Tb>;i-apovDZocHt^|md*_UurJP`G&{dt{RO`bP5D%mumzRS#*D-=6qxF>Jt+sX0xO~n zEqnBsBaD}|Ro*%WBNNHT>uGz%VFvFu1(nLdDwekObp$8R6TDp8Wor?X8nOeH`)piV z0q>#lwy8GfF$7%FlcMk^lb6D3S1&b)UH6)qxwvE3<2qYe+YY+Zd!P#`$f%fGTbVwY zV9K9mh)EKX{FY7M%n6X#)4vV{--Y!~Stb9+zE^BSm^KddiF-R)Tt3y7bbja1{EZ=H%!H}m0BvDdnNZDkPMT|EcMly?>Bnj zQ5MWQy@NpMAK!FKIWCO5D_}Giv{rd{FK&Z4=nPssHqCDd{jimcWJ|E|FTi|aT3eeB zZWeL`N_~+KOxvz4b0X4vWU61ynA(a~Xc%*E+QJ*hqWKqpXWl!C_BO>2T6$OQ+&~pN zBX?@RMGXs%{eMe5js|@;9$ycAwpv~kDxN^$TJ;QBWmb1$otEo4%~|#qj~vl>1=(qd4k`w3d#+ zlww9UeSTPE4n|}7RvjE}7|;PF!?xGp6IxtQmmrT|>`=wrYaLK+PAIA|$z8J7@brFL zy#s6TRtqpz68z!&z{fA>?T8`E>>8Kw%i zM`ozkI@C2eBKtuDFGG1~aCkj+1shMj89w4(8MpOnAO4QGM(1xjR&gnK_%0mWL`p*b zbh)K_7EbP8SI6%gYkE%3TU>_MAs>hNKS%j&r#~LUxL3yMWNE`%NAXS?gD>M(JTHoq ze3&?aB1D63Qvn{0xyT+Xn%!ZP}Bo4`aTk{Z182Zp8rj0$|h2{ehQ^l1L}CBIIc*4#0~re^k+5{ zz=fGgzV^qx2URlwyFQRIyrc3RjlXWFp;4vFtC#Oda*p2VXKqhBo1nuAo>#Wy9^#Fk z9=*A?@jjcMfFQ`dwzvFaTS61}VEFmC+KN)wvQX)q=QnZj(P?HB$M>0L$Gqz!{!z{( zxIa5)4`XF@eAo^5F<5J)a!^XD(RwOO-3h!A$ket`!sD1JBBmz2EB7zsw2jO5^kK_59CMXnOMB z+{ZAFmzZu1_<+EP#ppDZvqxj@3NMrL*0b)--0$+aRW`{CGy{wFn_YmI4($RB!#*eP3(GW1OKN?2G54Eux#|k$=g^eqjDjE_#P$1UUU+wmFo9=Q)twNJ7q4Xsl9>$q?fAxx4DT3K}8gxc4Qwu8g^c7K+-%hm!Lr-{Ei=GaH?Sx?gZn zaPpHVxgguiUBrCumMi#=H;L2g$2CS3uI0t+a(`c$kpIETEe|;*^?nF%=_>-LG4WGGVPddKw0}n5v*V@Wb&-C#BxE{i7fc29|5Qt zsWV$jE5I3;fZ3haes-;APw7V6Qf8@FIky@xZebh1SbnOG*%4cP7Xi=w6%3sWwjGPP zxG2PF!1~8jm$&X`z=-gIdW-=n3J6*I^ww6sp<)k`jn#cb^MQ-#Wyf8=7C_$(3o=;} zTa7iu`kkt^d+2XE68{YNH;W;5m3pQ8wr4ez z<0o()*+AGX^#JFh)74zvfORuM1w`!DQpafyo{lv)is)oeeLa%b#gc%Ij%BD<#F-z`HoRzisWWD~Jkui89y3UtAm`al?qaq)~$u zW{Eo~qmIa6N6&~DF7IN8#ayl3{ySX)ClP1TH|0dniZ-paN^Kpv{nCM+NY}-X=wK0B zXL|yA6A+|l)~*NlNxOFpY9&WI|FD18oEpTtqhJuTiQq#%+EmFqD#vY{u_%g1(>=80eJQDoLFZj{*=yOeHnr2bZSUwPVLr;*mpv1VU%juzMZU;#3;%Y9-hZ*g5+2`OPV)ziCL*MO zYLLmm8)7GY$0iHBT@h4dI0rZLOOvd(N{uMrX(%=4m3&O${S_6%xHMpmW}7AG)EV0_ zxe77n7umo^88%+@_&Vx1iJq3`&y6XD%^M2|KOy9(f-=yxBjSkwj)J=cG>|Rxwws8BgC}Csn9mk8 zK993U&iR{G=6j%8SY3)wt5VSJRMPBJqNAy>WNMdvRIac9k_F)Z0Phg>97xKVmP*&k z$$|bCUNlgLpsl>d!esUtR`__)>#GcEgIst}zH0S~q`A0zU%uN9!~wwNA_GyBBSa2& zu?;4Ym8I%R)*ld#HsHHKL&V>!^_2L07Io|$!jmgQ_VAs=wM`m6bEsfjh^?|<&@ei^jz+%)^&csaMO zD=6Di3q7zlK}BF6g1V{YQ~gL;3*VW@GiiB<0!H2VJqQ&y!6eetkRf&p!TLpoiOB9s zkhP)++bEVnruU?!tT$qo-SSx06un7+*>iqGg$PV~=w~r;=yL3A+bDRc$%71ps$BUn z`pFMI(!)n$l_pk$|DG`GkCu_lHL)8!wRJ`SuG`!T^1b5kEu0 zWvAUNgJ_Nif*XBtalKx52SI%*xm7i%$B+v@*`|kMM)n<3hLp@%2i!+`k{UEIJuNZY zw_^-N)VG2mDl)?9Ri;IXrH-zBAk&X;08V6c@NiotfQnEy(2w-qyeeoXc-ZtSaH%f% zX?&%mlOoAjRV%tE8NIfcr=Z{22V`~G2~%3SXmO<$qjNBc-P5w1+d1gId>WQ^j{xwEQrhv?IrMl3X~VbL2sy`@I^C9eh0IA=m61 z-5%UQXpNnG^oqR3`hS@AY(0yy-H!k3+KUP`y#B@xBcE3DI-Rf1!D?lVVkw~FWSK14 z3-Ekx1^7b`1Z|VRWkE;&g!;BA4o-Ny;5{uMNu;cY=lkv=L{ZXORV!#Mu|!>b&7HF; zMK9K}j;FZ~or=!h5a6$oHb`eOosFO^hsG%jvA#OXZ0P?0!s}`UJhItGynF#}fvOP? zXNWUnezcMr0OFVVM-E-$P#qJh`;A^fx>*FZ4qN*=t_Hfs3pU%R+Jm4QrYE>%YTNwZ zEgaUNsUe*$@VAYNq+@)}5Y$FL9W9>+PJ+LV2!sex9RfHn+M8&W;Z?Y>UgkJW2z zS|U!<0YZ8|4((8Ix1}MfSe~Lr>f&!YUoxyL=T8mI0X`7g{y%HfnxK^``Knvitn49Kqlua7A$w!=Hh&T20_$1lfXF-pQLuSX zUz0;(50S;Y6)D4)P|k=tRK8Q>d^owqbG`=|ND(e)IG0Upq=Imm_l<9o^O<#fBXn3n zsPQmkeFRP4Ud3x_;H&d(b1?=oe6ApVDjWE)#12!YcbnZo0{ZYq!rzp#r5!*tu!j5w zL;Vg1%e`eXsY%L@C6L)-ggg09-vqC+p@6qu^@M+^U%2(?Ufy-5Lt2d7H{QMWZcwG@ zD&4c%tZN^yA;cWkrNw3|&()TBYM3DpIl&xELeaAF$(Q;6oyOKzcmx(LP!o8`YL0j| zI*nhx2I@e`Og}A}XBtbFap9+Gv1`Cj+mNG6&C~0Bgg=c>%L|C?!{H~9R(PIeGB1J4 zsYJm>PJp}6j-Um56ryBV!BKW^^S>LoF3yomweqRW$w3CABI2s+s47QVYxXke8q^p< zP+mLu6|8~S-cHd2+9B28&{j@U?sLn(ZeTI$zo5Q+V$2^6+22nt-8m=J(Q(ye0Jpdp z(`bMC-Av8p4W&gOKQT8(-i)p_m@+4lM61e;pPT#NZo_d}om|b%HMT-rP?bj<4Da^R zdt3`WVuLSRyG`ucm(U)Ya~>WMRz2iVb-*;h#UTB%hO*xg+c5c~#rC*lGVv12VE(&i zr@hb)H3$^$(!0#`sNF`b$zZr|_Fd}wd>bxYmNdb|Z7kTbjKG(B?OpTR1xL_|3r^0^ z)0GVSGo#RggS9gz8#sLxkmng;px4+IBvt(#&&DT|balDd@MvNqQT)}+9O_Il9bi_f zJErS*ll+eK`s4x}wl5gcNrZwqg~p|rr-*b{I^=OD$#?__1|R-$@aNurT)UT|7w1hq zh<5{f&e>ETw$vuC!cc%`i6RwJcG>;nOz(kx3r6z=2NAF%h&E3aL(#7hM$mvx{Ou0RYb*SxCzw9V{TE+004 z(N+a&*aZZ9(b}S%^2j0ZJsebmT#ooro#I{hFaM~lVi?1AcKR&?r{dTz0jX8QF%1=> ztjXr*dPgC=awPlLH#L}(hm!@je7A0~Cvm3dZ3YjZuaAM5B!0;78cUMo{oyUZsiA{k z!&z)djsc}95;<$A1L<^FYi>UnNHG*J$Y~K7J!YbSh=82RnnTZ|>Oj`1FqyG*J&C1Y zS+p|gJn)mDhtbEa-;$?D`;*HetbUGPk3<0|tW5_iyGQbs^}K zg31#bZl8^7%>x@|HxuyJ+-c*S%Dn{b7TX*`y&V7M)!D&A0H8NN9h!uFkOZ{q zkadFaxEldhtK-G>Vi>dzB6rrQlfRIpJ@NauWJdEgbF9t(mZodI_1!m|v`O_ut$3Dh z1C)bnXBMDhc{WZ*X1Tvr<^JYXegUT}iZR;xbwIlm$ zjD>!}9XG9?FZNz+*PA}ipYd<_@|}Dk>Qd-%4l=4W;7og5OfnmlPrm7iWy`;D*|WI- zyY@4mw7Ww5i%tP3Vj3rl(l2#5ob10B^goIgA=i0N)ERr9Yan)0+{o)`FCzx=|=AO75=V79o z+?5?-VYH;qYAj2)CUmww1zplT(_57+U6iu(+LoUZt1#U#gI15;Nl1oUOLN|M97(o# z9Q>sbP-5T}PqKR+^aHVluP;PbGii1I${ZVY9MB*m9|5VG4fDs=0*)bUQERiA^( ziqAe-b~L5UZfJ*X>?xs*z@Wh9rF^CB3Wih7RJY4#$$>D?PSvn0JD8$fxYOoYh8#f_ zLT@nNeF}5o3*|rbZ5}w6T+|B-Lz``0edWFvA z*11G?oR5Lh;YM9?9s^8t%EJ!yAD zOegqpGNsHqfVg@~1hkHrTE2UV6D(vV#W1}NUX($gmJT`4JjJ)jm-Y$l(sWNt#{+ri z7d45>iuYJzXDpZDSI2?FDSv?v=>qf@(^2Xsjdk7-lBMEKX}lHaOG(gNu$lqU)?x1# z`kZ+@#7VVLub5s}!nkmWksK)GjqIk0qag!@`b#9{wo1-3u%j|=x`+3a;B@)-P!`}^ z00zYmC4CT;xgIoG;3K!H2}N|DWDJz0ht=pJZJY*_Z)BgeOSI2crbIHgvEfo|AG#;h zS&1BHzH={!w?Ma8s;}~`lDKlNm4P1m$Yd%mVX|jsuCJf}$wlx>^yX%w{#&Kw*iU~TSbNNc#H>1m58f%L(s>xoi4)tyF_TNxGd^q5y)^vu*-&Of+{wRJO5~!kK}vz4dX@x`pamP zCRNi>Iv9bhw#$0xRZO~5r8vSxx8>Kuy#ZCLrE`;wTGceLC|WJ2R{cMSZlB(oG$A2_ zHrnuHWpM%Rm3#77d%4>7Iv`2ZI@1CG0(144h5hWp)R-{juSs-_i|8pA{mAzShZ%vi zB@c@O@=K0&Z{_)^*w{}nmHM_8JvD|?zI#GUkUG3zVz@L{kxV~-!X1tF_^5t+0u)qP zuarAj_PCu~Cyuqbs*@C=tlB1|=($H-5_ke{Nhe(4$7W|2{?jTMZxM{sO6r;Re7Lk7 z6mJ^Hq*CW~{z~E@Vm)rXIh;3=-MZL$$;kcuH0lTz_tv>eCzbw8_2wyHG4trZsN5`p zEUpw#zp}6%1~HQqRs?Fh1M-=O$-rCHG;ARh-3Sdn{8~;&RF+hAG&2PH+`7JUuT-Rx z5%uZeVuv!%=C!+hlIsn!FUk{(AaV%$JM4@)UYt4mLa+t7bp4Nncu7(c_j?u0u=H4;#KeVoiJwJEws*MexsTn7NHUa_uuWf!Dgr z;2%l6Zfcp7-9kf4UnegDCv+Eqf#)r!*7}q;f%SlJ**oBxMer8QKL8XSG-6|%TdWvv zK=%YT69aR~44^N9=Rl2M!eFmK0aRI#Bjf=mLH&5}tAh zGn}ZXJhH0TLHF+Hj6s#|hq1LwCE2~L_l@x%Ap%RRx&JC$7KCvWUi}l!VJvgOO^E zn9L0^ynqeFphq6xo{49we-!9~3mp_szO@0GBg6-6;;Wb6z!^+TC*fLeU3z&;D)z%3 z`&528Y=JQ6chfmFdPc`%=m_)Jyh7r0JP2Nio@cq_+p21n>j(|Ba5=sE^g%5+_pa{5 z@iMW16&9reEC_bF3E`mmv2jbqXB_I^#!qm~iU+Z2=rJ1(?VuBd*{C&-XRZ-Z^9sx1 zoW*y{qNAQ)oCY#d=ybZ>fE7KOu?#m1UQBV!zq2Gf4$0<%G`@+~a#wK3_SN$H0cWmV zL%~~GiV-=Gp+LvyxlyzMPzZcYLgloe(hht=& zPL%LlBHP88gb+&^Vy}((^f^RI_|ngn9vpIKcwxI!O}!70bxuWzOmrG|SPF_=D!Oo< zSft{lZ; zj-UD;w4GD4=+K%)w{6?DZQHibwr$(CZQHibwr!hzZrzvu0o_%3NUGLLUXq!W@r}81 zE`jsbQuGYxm!voG974^NdQhOyi187&(lBm#R8Ez)t&RY|*{jA^qCv_qW%{dXmwo2> z3B)iDV69`RK`vjI^lCF|M1w3Ou@fG+CP$!+WYJ{3#J_YYZw$0X1m}GFVhPmPxt~kc zXFp-QI#Aw7yE>v2Aaqv7nBn!jsw8x>CxoT4s#P~j5S1I)Bh(lpbU(U=+C*4n_aYCXMcRO zYRKk|@4y|JH}|}LcF@hw7NhCMW{xs!iHpv4`7x>JR&r7Z3-$-OIDMz1hGYuXXOAGI z;>ghZ=g$5hLmw!4E0IY%KI}~D$5lj5TiatR0btU_`FDg4y5&TLOrTiy}vWt>$py zXw?SjE0sJwf&>w^5;J(fK&90SFSdu-2s7whZ6N&VM;n1bkxm`YMd7vPMRxE)0p|jy z#HR1SkAQb3?1vIMPiQl+@#B$NJI5Umc0AgPwiEZFOfRjfFQ;GY*r)-*LPfPyXD}m! zbq@@#{L>6)pK|p zbr-J(Q5;YFy@JS_hcRa0c;wy0-giToGXf#GpJbj0x!jUU7<(=TJZOUQYbtl>)+hkv z3Elw9hR4T&?`_UJ_3%>Zg7|cRmbwSwX*9eVf+m~|`kwfLE4O-ksg_MT4rUfHdC#ff zZeqwb*nY%4v7!~h#%#MoJP|DJ80uV!(T$>iG)XK~d?tsYXd&3ikyYue6wUH3qn!sV zS=XPb(c7v?%X9Cq;)xRLPustpXFsPw3YMP!6K1fLMncmsIUzi7*L$uC+ETtBlkjIF zVJqMm@^%i=mlN?f^W4VEA-r?HulzMG8MdQ>9e$nPO4E?6lFe~q>7M`;E8y^wE*i3O@5>$|-~a1=^Z~q9QD-BO#3&bKJ|ObBx3G4+$TU)7idC zZu)E;<9DWUE@Nj+um1s#;yVbGNz|C7MVe5*qfDM7dK?69#XLK;%g7~&v*|0$lKq!mYVGvtY60?QWVSY z=aUBZ9FK*vnGe^VS-+lWAU~MCm%5;I1rXb!J35T_H+5&HTTwpDxl-Y5Dl$n4+wKat z4PJHB*1L@*iOVE{WM5ngApn8M2A~TfxM; zB1n+e^4^i=e{*AqKNqA!SBc-o6mlkgyKi>^9`u-iJ)gfUV5C2Czi{3U4Km{==k`ei zD_y=D@ZXmTwRhTJXfJMDxOh^MtZ$(wvU#d3tnVYF`& zc)mM0<2ix2kP?vi&K2~EJpRPDqB}ZX1rDws02Sa6wAw&Tpl)ablC8*6_JE6FYYm?#ONs07VL6Z5iPgDBYH*lP3Bl>Yj z`6YHOaE-qIpo( z*Qyj{XNCQ?+ezRzbZ|(^s3Ke;4hse)LY_zqE(9cD$^yI&23u*E3{aYH?BK16`gM0g zmW}lhWRyWC7#6ez@u#Ek9RY3x?j6$i^5Yk1M?G(vqU?n}7w4XJouUS2}dTV%Ng_R)FBVyWPg zxwP}4j8C6fW0}KYxRp)KdG84M9wY2yDS-{YZIHYl$k~4IU0@X}iZQywsr9NEFI&Rue{Y- zTQIAMQ(B0#u7~0Ij|#lUzXAx28xxg3ODPLHKfd6OC2zEskf838KxQR(jcaK&cQ48) zI=VspoYjdRuGgsN&+ecQh_2pKOH#a%KhMf zb3ugdwE}dS&LQA+`8xsaez904=Ccx|mu>H$wKgP%l8V$$t5*x|fxzN_5kd@w!~{Xk zf)~h39hNgf_h)Q4LQ))9;zmudEcfmZ=g(dR9c$vY2?PVvAMQYKHhX4@avRJ4+6_h7 z{XER*>*X_H%b8&yuIqdRG4w%W@I3reMs@tGd~36q^byjHV-+bPF@1w>?v~^4G544Z zf0wg8n{r}*YwLoK27WPOM=%wN`rkp{fCahFlKEB#5oDvGBcfl(xA6&RhmwS+{gWLw zAo)>Zm6;znZix4+tcNK(9**=W5qXc5nY&m4{~YFTp1XV~ZBeISwjacN5LDRm&iWZ`etyxN98kpt%f9}Eco>5}@Z4wcMV_e!)p9OrGRY9bp##ex4mIv|K0FJBgz zV4e@cD8bI@GGLSAoVh(<(e&z;*b$6YD?l!FivK;E0loC$|C21Aj8+6?RN2on3+QLn<7R&)#0V^mS{Ou#(Vg^8ZL1Kj zY6Rb+o;FZ$QJbgN-unFnbnfSASa7JZ^QN z4`)r~aMp$5?xPO8Y3Zh%(eczz7eowOove|D3$Sh777*Ffjk^|bUCrL=2Ai^B>Ed+E zBuqo=V8_~8(a9#)hYep{dpr$z_|)}S2+;C_Bo+#&Cr)|<- zhJh1KnY|Lmd4ce&nw5uvMXivRz;do?M4}~afI1lsTJY6+Qw=Jup4{(vO$n1r8SOKn z&7(=7cqhU~0BK4Fpv%$$wHy9NlhEA-1@(l5U{@CSAw}z(Nusq?Z@{nWA|9`kW)g!X zMIwX@sN*+ofx}){gd@Ll#FoN~Qvt!Z5mfUXw*SfCd^rYDp7HEr)@*j!!$49n8ct6) z;N&8@7Nh0B9u3yVxx9G*TLgC}QI1|#rFcDJau}aH9LEKc)#y3kZE1amR0b^;b(PcX zUGE9t7TBI_02GICVi7~1CJ-;<5_!3GWx}Y8g*OT%*+SzvgYB7UBE~N$x0oI00I+~x zj=Xol&;rEb6ZsZ7KX>c%CwW=&YI{o#;dj%D!_`PBqhJcUw+dq6p`1o`OxF807M$8B z#)O9#EG{lkL;8@i14m>y5+xljBR9zIGXMpVN{nVY6DTHShy&7Lg+Qon0vJhweRmqA zX$}0fWp~>%0o?NvrZvG2`5lrc(HGc#I|NW(;*A9=#&76?a>pL!u0{H2t=b`Q3>c1G zIYswtJEu~{$%m-*0Z3U};6)?D04IcfY6d7bH~qwod^--M@-fF-p$*BMK3Ytsh;g>> zIc$If;3S{q`8@P2`Sczk;qroX!I~lv@3xe%X54@j{U8~R!55AInc3fi6_Oqh8uJQm z1f|~&)p(^gx7NA{%^ZqWVVhuezsD~OP#>%6{!j#9iqcjgH5?JA_oX0TRP3h?sR+q6 zS@*7-K&HuXl&fWzMs=K(pjJBUEGTwM!8tv#7gdpxJyt0|)#HgN1<@pc*Af2nHVGUN zsLIA43b4X%Z{v^!xmfxq6;yKHpVtvv={S%8pz^H+enk`8ov~EDA!lq28(|zen305U zC3JvG5P8R4iTpz5Vw7I~rQ+z2pF?lC)OU?x!N;sx?hMjUDCy_~&0L@O)8sSe%~0J} zKW(>&*ykGFuOyrrX3S(e%J^UP%G2khqMZQnC^>mhl-%pt0q?=Pf~nN-GYJR6DLMX! z_~{>1+|8Lbnr9l3(n)DD83J(pSuKuk$Q^^e^;?dC{F#6;dMyylag@NM4J0TQa;-P# zf6o@dJ}+mEvu611yI_oG!AJxmEEG`!G$6GSQ>={ojTv8Lwu`fQS&wBo70%=RrE45t z4nXniVkg%%zuRCZSInF^<)Z4!Tyl?Eh^0pil%*JpvN<7-r+N8BU?A|t#}p@v$;-FL z6YV!$-Zd@zT2YYn1j~B8Di5)K+nAVv-CJx24%lEGv~W>Js#=2H2KBRkBI2Ab@#^`eB51YJVJQvaX+EYlx_kD06xo^9pKH0qS_YC3l){P6@j$WrFTY9q6rrCNN8x1 zK5P$dCvJ9i^l+Vj`jIbD6czyuH~>-;IxHuV4M9|dD=hWJ8~M=c6P)r+2JP*_09G zS_I_&*3~vvefeDjDFc_VbMy2KeeiRnZ5@L^Y>P;@H1B8Z(5^a@!@Iq5ytjqaEp3Fs4Z%Pl|F?+)e z(RU+-D*awT&U|K&7nn>~RyVTib00)1NpgFdfr5ooxkC(PYo=2V7B{Zb@^2Y`;H?KG z^JH;C;}1dn=x;Szw})lCbZ)DUvtB;u`H_CR8J*Gnh)>y|E_JsuDPNwS$N=|P%x9-a=4&aNEhZgQEw zDZur9_%H51{wJuFe*?|PWyRUNgE=VAaWaM*d_+6bVT#zORSM|-Vv%T0 zvmzln!7sT_aH34)Fs>bCEi)eX%C%ah(^@+5c5xE5?z!h6L=Ds*m1k2+lnCWYsX$G7 zL6Vt`c!&JWA^R{a#Hc)$Rc4Da%unSZo5ZN%S+a^~2%`J0QCfAzjvdvh{t%#$uL5&^3n#a$Z7$6bO*Yv60N7V@_8t56zrDG9Y)f&37==gE=Pdou<9_*3Ag_vC z_f^;YaBIlQAT@mc+WcI9HUJIdj2!6Ibfd+f2BnVN%e?3p@qn!Xp;m-2Q}a5nQc%;f z@U>PKb(g)rOa5ecz9G{SfDpLHMqxM)O8acErtB%1y@?%*@WW1O=DY5yOpdS0K#y7M zGD>NWRG`v3Qdh2Z)pscdl4nGKsJE=Ij+)WF`1(#}cp&Q!hN9A%S>5X|a&dq?-FD%? zM0CvwRaO->hZFMwB&3Ujn-AEQ#W*MRW>KotQNbyU-6C+8PdL}R7gXktHrdDRNhQ5+ zb!e#-J5g2HAB4{H%57j0U@g^t2BMA=iB4Q?sUQSDB--zcmCQo(a*U7YA_LUs8k}WL zTH$*TW=DllqcMBdCA{rEn+%xqZ*X1hGh*3kY6k`0&8{?CZaX4*YSc@xnEs~hOMfiC zGl5E@;jwdK$`BR|!9@q)b7KVXl{|u;B|_U@unLxAq+%e&a`G}*ENLmx(bo5MoM^Fu z`~jb%D<93TamFbvfGJrgW-7FaQ`%Vu$-4itziU{x>#@sg>cj=+radP+kaiCqhemRZ zr|gRcg*%^J2jeXLodc4=-|P_@@~w36~t7fq7!c zwzAeb#>?IT7svXE_qg^$bj^!KW$I@u-DmnUp2^mzW@Ms^tx3<= zSP)~KjL}gPvqj1HP{Q_L8j(=foKPnf?OhY&t!s2t`%jBJJl`YdfazGRm zGkK>d`=?k7Q?By7T7`N@nl&fG(zLyzv`M)JhX1c~Xl2TNdFHHA3lop(QbwhjqiV$A z3hMDVhl5)O=nTHE)KbTDuZQajXGQs0^^Texjze;DW*i=uhgy?4UI& z=A>z01FX2+a*R=pqNY3Bcm96NjM9?g9XQWdMWw6sOytc;0U=@69*<>v+K31G*t1jA z7nAr+h^xBNRXtWE$dJXw<9%bb02f+yQ&JSwTaOebD9JaZYjhg*a`7* ztE+77&B6rxeI8*Y84ncs#57+Xs#!OVKb&Gp7 zxB1)et!o_TNV8G&?2QyMd2)5;W74%HhSK^=0xV@5@L3ofls?LUp|>C<96N9NQVRhY zgdb=xO8*bxHTnyTpHrKQR(w1hcCfcN);EWvT~PPHg-bK6bX-uGoS=O_w&Z}+C1X9( zaYPzb={jZ4;8I!|hP;BO@@6VBVvfT4;G@8~cwjEURFr8qCD)T~MZ%>D3a+bjDKRMH zcCk4_!CgU*Rfwx)edEiAc&wT~*Mb&dirrnHM!MwpS4z{MsVIox?F`h;Qu#^_ohr4n zvtHhWP0|f$DR0M>hC0_nufY!o_@A&4BoC#1nQfKPQz|GfTF;fiBTa;sq+3p7RD@2) znd*7^h)#&K;6Mn}{m8{mI|pg8^xsyubO019J{+jQFMOcKaM-k~Bq@LXZUK6NA1ONs z$NI7D_H2@%R};=?rr(v~cuMH)fH=4QvVkx)nT2T%doI25`ZyoIce$x1?i@+qo_6F; z_0E8^c&NF+PW+pZJJalbJ@vHD$nx*(%DsWGrbR& z(|a5bcPU~Iw?MW=LlzX|N_THImkv3dNkpJ03z*`17YW5EItn@Ast8!gI_kHqAMszp zdzk57rJ#@uxT->L^0%$y9Fx-YCUq`s& z$5H=F0b=7uj=pgtM`_-o#hYiHuPrsOIUx@3OAl)I$Bi2u@2hrbDkg^W5qty+a*yKT`|)PPj>l4a@aiC_o6UXuWPO*qz25_UgFEPFfwBv)u3E3k7GiW%Q?j+S73NvW zygKv}uhkj`jS4=Y?L*TB1okvlfdh-uu+7VtTw~C}BZ;sc%x%*m%)42_A|wP3qD|f| z{dWkycoAS_X?};K#b!N(Dn~5UnqaWfjIH6@H}7kJoF=r&Jg3gMQe0}OhAOC;0=$6m z8YkHgnH2|Z6qHIZypvn(looT5ls>m&OJI1)ItFaNpt#C<7RolJH-{DNgcpLAgfei50)Gt*PLM{|c&u@94;#$dy24o*i z6<_k|MLLP!H|b*(@H_cQ+IwWlKsH^7q1pi96c+L1R1!^rwf6+g!QfAX$FO1Mk-CV6 zq4s<2Ajf^7$PB!_{DzEnH6LEqW<-3^s_+#`B2Oz}oN`oS=Ptnyh@IYYb`o~KdeKnP$SmGQXstN$%HQ>&Gu0=M8mc!4Xb2EK!WJ% zDwV=TL}{m#Zn=h;m_-C&NRP}gC^_lc?WAQF%ja-%CQwA2k-bK!Q~;TKhX^ei*_FSn z`RMjEZi#iXqgk##W{D)O5$9;L5z4R{oK;DP62sDaGw?D)p^(1XDIOtY$wd`SB(o8^ zL0n;tH-Ncafg0bGQPRRS_`PO*XhNQ#=FDlHmO-PUcF|RHHG0Tzg^1Zr7sSaV_{+P# z1fP^_4j~N3JB}g4jYwQId&lW23B#exAAz117g!)+>3|oLsScTG8y}`DGR|vY_n3s7 zfT4qkZK4CBT?=|7c!vG2D`0Jff;2oz{^Iixm&x=@mVWhr)Ei&+&)T^f$8402Q}&}J zHsC-*!G{>v#~fDOq3gB_4Jew$v|6Oz1-47?@`AWdC22?qOF3ZS< zv#(q4=4Ayu$E&0Ba88u=pOl{DGycs5a*FFU)W@%ij#xgj$efW6p47}OkGF{PQyf3t zl4PZ2BEE8Px++E!($Lt+t(H-cvn;+)F^AHpSJTz>($9?z;}9p5Ha6<)A}YR{eKn8| z)!w9Q+tME=8>NCkMMZ+jOYqLL^}mI&ZP}Bac}7{pbsV_&=!5_C5z$DEa4Brq%z7Ay zBNj0+1#4%;ztufkn?E7*lap(I8Wewk0BNf!E&>uXN<&Tjv08dIs`MuTDmS5z>^gm# zNj;IZ7;{0~evXt+0@*Q??QhD{^!y4mFPu{|j|ON>fmEeT+uFLdj1IrsBUMVOIps@p zRl$Oa9+wro)ktex(M8%}PZa93dXERCKNsQI+VttElfJpG??be?YIqLj?1pGCQ%qkp9xV zj4^BVf&L~!TvWtkn^Ai;k5vr|08&Y#Qd;n!p!lK%H&~~S?UIMDqVbiqPdcdqilep( zI7gYgp&q3`h@?nmFIKb`>Nf?5KSkaAg*}K_*c&!TjqGdHnImC}E?g4T`1ks6)O}a( zUZbv4Rv0y3;(O!K3zhJWDiUFb`PMy=TJ`Sq)|qS*OM(d*x=wMyWRlgHgT(3h9?u#z z=5JK1?mtq`G|+0Ge5x0tLFV%g>fJj;d!cQIArnNhKPi;Cj$1?novT{QLjDE~ViCld z)5tPtkS%W{=8*NjLtVJd$m+a)@!uV~zn(OXZ5eaja1P%7Zi1X} zjR3DteyT3rX{_J2jfmD{bDj|O@EMIJiDH+(d`ouKP|ueM@0i~3NU5@$pVB9X$m>^8 zbxTey+%yKOzTW?y^smLs>Q)wgK7S;ZWz}D-ycoK1iH;>T?u z&>_5#FUBph-tuAkPOQrmG&ArtPFS6z zw*y=qDRz4Yf?^k8i`g^iIZmSLAgP_lj%{U)AawOEq({O9nWK>E92V|)lbCT!ej)ru zx8W|L%R6sx;y zLSGASFkL!0Ik;|G-*R58Hgvu5Xy{euw)Zq$(!+`0P-+_$1o$%{*r;EA76uKyE2w$M z$R?C>ruB}HmivPO-+m*^WYVNEt^1HZ7RlGTZtkuQ$eI-+bai_)dz-%=T$GL{6 z;N@B_X`>9#{1!Z>2l91^R*}a= zJ%t~^vlBKxz)6L2A>?$o?LARMY^w4yGj|zw+6|{@eXUJ$UXoe@(JH3qHGf0c?grC~VUp4yWHJpd*wTp_NRefRz?4a*O#;^& z2GSA98`MvekF32g{$)s%$Q<;)2`!!#>V&V0>Nt#FCmxw#fXV8_P4`0TNQJ8vK@z;R zYAV~3z~|Zfr{LiE{7QwChKlnGGySxFJ7eNHEd` zC0AM!Lm&d#5q70R*{=SDV=I|fh!dRNh#;i+dKnCL-$W<@w1Z_cN=nJHGHD8C!}k*_ zpmImx-y8XVfm;0aWK@DQ?JQuSOUru3bq z{83FVs{~sC$5%MVLnEwxB>TBF{nOSPaYMSfIgecY&@yXtS+|)$g!*G>`eQsUHB9(I zyj<0WcT&(h`QH2ZoiA?VXE~niif3G zIh?JU6;J*_+Zx0l<3bl~l-{(zPC!%$ z?E7`2@^o5Pp#yvD&yumuH-5PuRKP5?T}v}`q^;M>EyE?{L+Q5t~;oLjb)098`-8j}2Z0Q-kl^!J|; zQ1xEJuPX6C_fO7e&Q0v&=+eE^$1GR!`{}&4t~smmtJxDNOA#;KLd;9MJNL%n z-=`wh0Tf$_s#kPQy4{%8w;9Wn{bOumS<0n2tB{4YWBdgMz~sp!{qdLPD%cFyRjS*v z0~;t|*B_oVC1ww@GEQqT{>H6rp()5IJG{kBJa4vSgd!^R5xhisg-E}jls_EeUuaUQ}F zi-#}0B(tdQKdO;hs8bKSLqM66S)S@YF?BkN&355w7_TU@_fW)d z!K*`2&%;)WpZkuilSU4PcW)^ay#~JUzEhRO>xK7rrrqY>A#e++2CA_ny@r7m9szr? zT*xZq4ym2L>b`?d^Y@(ykI7xrePQK`d??x^j2QSP|Ld8TS|<4@IuJ zU{Uok8puCcq3%zwXHaPC`+idu@NH0F7JwEpvsJ__f!V!vL2gdK{@f;<2_`-+##2>b zF<3-~6E*&seZjGdFXR1fhf}?GiH!%1t7l_;srUNX7rM0TN|CM6>)ULr7!l$k3u*RY zoOd9Q2?%FPB(tJ`IX{Ri;yZ=o9Y`Y6d6)GuG0O^o*)nIcmF`-un;v>A>F0qRdW5MWzRN9 ztz!KOaBGzHr#8k8b`x!e=)R%EMg(996Rpp<>aW391pfK5ZVx;eGSAu{#!FG@uGO6# zxp=AeYXRmEqN^{-PpM*A7D~8#ybcIWrbJQ6Lg#ghO-IlnVze#PAai9@G_n^lH^FHw zS0i=3ZN_A=l$EHIE*1+3Jh%Z~OB=;HVAt#nX&6-`xG-j4e4P*hWKRfSvBN*~JxO8- z3IgL~BQKGQru2QKMSSv8YRa>P8V$L9QeQI@Oxkc*xX+{^DDH`JlrPB=4WNNY=jDC_ z*2(x5T`WNglrV-9{l=-SF1}P+VW^clmF+dqdy6uKCSqzR_;rY-%p|U{ZvLv5BYAPh40Q$BRNh2#_8{I&MwxO z9`tHMGh*nwVI4Rb=r0e_xnH2MIiZ)AY_wPG%8E)T!{^Ovtm!tqL~u@{rWEr)#M_Z` zliR2P!`>)b3%?JzGQ1M}}qc z2^A96A_Ck+3?#zYHAo41Y3kt$`Hf5_>_rSBNM84a2<>poB=nfg=RV!LrhEznP=5 z6%oJAmT>n})4~W(5IIGlK?I zdy+Ft%A*n~B}m+m)JHwjLNzzs6o~>wSC1cb_9$jZCazZDD_2o$&Mo3j=Qb#cP^<+d z84~X6dL63#A?%d6WEB*}E7|?|Uqza>VG=49P2i~&{}9AIp#KL1(b&-TzX&2Wd*W{0 z#m~@@(lIe^#EL@fVajTS0@C?i;cB8xc9l*fD_Pj0ibSldnfXN9{rAhIZ8u{&xTs=k zQoSWR8l*EjmO$UUIgi)J)9&xgWA4sn7=h>ROrgiw0Qn5s=k@yI=H@+#Ml0FZszHkG zNW^Il9)N<2}sNL%#9!Dlxn>9n$2y? z=GUs5B+BgG>Vj&rr%1mGQeRvt;ZF*UZ6L{$S=BL!Vu>D_SCj#!PN<$M=Pup|xX*-Ks27I_YSMX#2E|@x&mBrtTlg7-KegI%Uh}+uu;;H@Nz};NIR{cq4ni z-r=}cAMc>0E-43FLt2?6h;T!G+o()^tr~q$-5B~TJvYqmtfrQbBqqg6QlZ?LK*=-N zllvof0%aQRdrTbM7;f~iA5hvNVr!S?bhhcbF@Tlb`_4Z(LrJ!esMUKQjPGD1*~uI8 z8y@C1fYz^Fy6M(-NC5Ku!_+!Y+4k1QBUA5TxF7pe?)XHH!p2{G*jCburA<)pPPhZ9 z*=L&qutoQO)xr2NH{*o{w%O6YACs4iZ_FBe;Hz1Mi+*=zP~M+0_IE6G?s=l9*4n4+ z6A>59-}!R;;L9v|`a|Vz?Mj?I&~(Ecyb)=+dC8EmvO(^@8T3e#6ucMC_q(@&Og%co zlZNYAR7gY#>`&@{QYj=!5h=jB-S7=OPo45-3nM7dWigGC4P#EI7ZmbjDR+dle2{aH z3We#g;X*RcDelYkf>j>Cl+4?rG2`)ZdDG&or3BhVA@dS2BSm35%*zMtFzaJTJy8b} zh2t~G{1h=kO8Ubz<7*bhl))w$oIWri>rgM(vU531GwZ=un4H35$^P@9IO#$ zhX_oYa_!4|eC2JGGfm#I+Ngui1G8%qNdfh0(QX9_fy8Tvj!_02Rg}fNE)Z(N-&kan z=Pl5ylVUeRnuAjnX-K#kX}saJm`FJxPT(l>-7%rE1h0MTQM*MU*ydSy>)q&TSklch z0hY@$zXUdRgEirM(Ws|*n?Nqad+&)$ikqrP^mO$yv@=@|!l$s;Vl#Lj#+x;2>+Fpt zYz?2D#5pYyEV9FfAn*MnX|zH~h{#zE!tcX5Af!NGY9>rl_D(=K`=Xh>RGrNLqMk)> z@(D$+h)&AX?=9gP!Bf%BHf45+-%uasw(xR$g}E3S3E+Jz7Uss66*T)J8D7P`XK*tE z$8_`!cm%0ue3{U9)nHx-rVJzobxic}Mpp3?&mO2Av64zxcOLcKhZZbYB#qXZku{#D z%oAHRHfOzW6gN>`46w-R!L_j{8YhS9)d^0xKD9! z(B43wQR$+ReiUD=*GQ{!0gw1e9I`!>5gw9g@8%|VQ)07ED5(ROG=9kbBe;nw7 zXa|}F81wLAMaRK=ZIs%ws1azrY#vs3xOKI)oeurJWa0s&Ub+wDAFfRDK-;nSq3==+ z{XzI~LM_b*aB|+@@5PN4=ZF7M^hf6B+fVjK!*MJGOg7I5AQRK&+1NP;c>2=xQ{m7G z$ruuG8In%m3?HXy0F3qJyMB^~oAblFmGr0Q>^4(W-nG3z zXS3Oq-Hhhzc|L!4aP!{4{4s!^O!_p|r(q%NK?5}3pIHtfh2I6245oVllNt-8uo0Zk z*NjH;wpjy3U@v9_wPMY5AG9`QYhy72{p^@>>NuRR`&h?-VSn<%y|9_CzAPk;Xc`5ScSZ>BTPC0jF16*RzKN#*k`a zWe-ul#z|2h2T>D&*xsEEuqU!Ch`vFCcEkZ}kks8HOb#6y&!WF9)CC4as!m(D3N33n z;YfJsRx!|%PGg4Imb4fC#Guuo@3iZZ01^%5yPfyW7C_`|8%lj@*W!@i6;Y}3&6)_s zzaM>!8RN}CpB(%}`3`RdNYsK6XWE+jg#PXG@bvn7Q#=2T_svI$fy@w0#PiQyehUcm z&KP18HBK1HH?hm)3NB`DTRvojlX=)=IZg~6i7i7c80B03dU~(jQy2yruA7|PDEhYG z@4+V+VBs4nTdbM0trIj+Sm0k2tT%LRNdM5Vf7IrTMidmuQTmnrH-NTE=q0H=B02F{ z6N#R6^g%nn3I|_d82jPuY_s7EI4nyx@P~P+Q~nGGfouLi(2E&J>y*cQFF0QFBaZ=b zK?2jSY2U1+X}T`7p&v8U>r_U)AH2-kYWiM8ia!iOGzHeiAI?5~BNdy_b{(g;ge<+% z;On%hRRgAoB+52GiEEv(By+S7*=zNMKd(GwT_K$wE>rf-Qli*-bnlYJW_?OW^5Lh*C5Z%k&M0GiTO} z;C+;IOxfD*EOS0_y-Z^z9idI%EnqDTiS-Y|@cKoSO2V6l3ggObyp4v8ujNdnf^raw zkQuM*(#sTcx!F-!1k*zRlr5`c@SC1a@xN(S>!0^m=F9y2m)X%_MYH9b4B*Y5w2X$% z&YhCKv-|I6-@8BUioZ>>2F;Scg108bUqyLd=%C-C4E^i3DA5y%zC*vBmseoBX-`}@ zAG3OQJ{EPZf_1Kvby0$D?#rC#aM?a3hs!26tV>dDd%f|45~qglHGzRLu{XY6o-B8{ z-7i?bWr1YFRYe2t?u*xY=Jg^PDi8@Q@qmQ58@JYWM8QAnd-%CPcWirQllA2PCVj6~ zr3GOm2;%Kx#Daz}fmC6p5eA%n%{}$ITYKFfhONeF;rcEBr%P=EBE|H5NSkvAfghIh zIlI6}u_`l(E{a%6Wr&S1n7|VFGZ{}QvbnN}DjqwIuThxHqa2k3S%1>*X0n??blWHH z6TZbYIA?R~EpehoK@zbw>L(9CM`Cws7PsBmmJ*Ao#)1RwW*80AV#Z8>C^460@3h;y zI&0a5DMD9qVV&2#S-|4A%u^fK2WAShRd5k&AH!DMf ze%P}BSX2VA%iz%Q-hO}I?)>O2eQtl^3zmMUJb{PAZEw!quHdrpyT0mgwRmOKqa)}q zXk!8H)Sg0b+nC$glkA4s;_C6Hl+T0CJBHX|>=sJH(*An-(9)|HmYl}?U9oJT$e3Mu zQ#RhL7EEt}w50lJ^icr|^it1-6Io}>i6+-G*?)$EvPsxUVY0uUe)(F<_xSfq9o6l5 zide5hKp@8dIdlOaWu{$BW={?g5Ic#OE8Tbq&%O8i-2N*sB{~Assh7T97EN?lAdwtIK_==VziE+Vg#EN%*E_jfBBrq?ebtnKTw2 zoSe6d$pBRk4_wq&g|wP5a?#SDJe1ndum~<)F-^MJW%b@~D&Lh16E9;B=m6o~PqeAx z9Ih`ys&r?V0=(AF64v8Fcp~09>vG57HaQwHqrVW~o+ssyA^s_gm%FznFgs{cuo!cx zyIqT!#-!`z@0uSVMYS=^?+6_hb+N(rVd@k7YGGa+0pRnrgNX7pDad*HykXJ(CXs|+ z(p&zahth@{M&Nt~moJN?-1?a)-Xi_;%4l89PJdVl>2$b;DyS|>47vKry=2IE}4V4ii>SI4ooi0;s=JB@337icO_k;e{(U-S}boI7GSv3H~ zBl}7Np&V8DnHbTy-RMu{VPm?FpC?S;bETG*ME;r@ho`$k=C%NhsEs5FR7UO?y$*(x zHz(dsztx^krAFCae5HS2RK(+`x|Q1vst#Sl|{ee=bye} za+mse7kQh)J}f^Ket&+Kf2Y5de;*&^zvb;5eks3}V&1;eY2U<;@;J(7RU z@m*c`UH>hW`L`7QBJU%w#_xh(?|0b`;&++;UVaLx9XFO5#yZ#2U|&zuqHTw$*h|s5 z0N;){N}JIc|HL=3TyvCBoLnJQ;l(qe_B!02dk@mnty*n~>P6$9Upz*IL7ODVOg(5P6Q=wn0PcM}i= z8KWxD$bT;HAF%{BUHn@~=U?3Wkjf|BD?w^9dtbh|OFOGQq8zCyslxmdF-yTcJTZKO zsAPU$v}<12TZ*Y)@QEly4y9NY>|807?$mk_TCGM8;JE+rn+I^fnknaf(NU((I3bYq zGwpB^4SLpquq?#Ac=Ab)GbvbjM6Q_s{Jf@dd71%k8S+?(l(B2p!gtQ{<%u4{;ncR3 ze|bht`h|1+#cZnkPFNnTAWeKENf)s&3(B$7g)7IRcx_ zEs8~Sm2_0eG?2#L#(iL<1`3F&qJ+g<)!MnGLyPR&u5OUDZk&7Da7b>wo)PsM{r57c zM?Y&iV7O*vbZXB26wscrD?&DWi2xd7EI8b=Bg!ujQ@Vr|o+t1N7C=m(vEwzc@Ez!S zN}pB^+osRMfD(Ytwp$?eu;+130->4|B%bZzIEGs!6oCLGQH zS$LznJF#}8gM1X?$BuWUgM0NTr>kkCJFXMrm%>$1(xZwkf?FK$^Po~K1(#2jky>%K zGP8S3e}u}I)!Xz)qV9dVqyR998XEpr;s~&LzfH+m*+fx&S1`y%Co`RZ|M0hQEZH!KD3eak3b)tqe%q z43@D{ZWPK_DJC8QTHct@#<@HC<1nJ4QBq>-AxrNMBRXYnuVZRMhhw%Wo5{Xo*hz>e zkd7>U9@WXlG3&5O+z7=@uCA&)wQ}^0`_nG^b|{JE>*kL`Tk*F6%RKf_9%+mrvBUc$Dxhcs?CflFa|8Re0Ya2!dcliuLrGyZ-K?IkZ_#2H^(xqQ zt6&?oKpS*QZ&8C6<7QcSN31@|bF(!=bG`ucfz*|J6f7V%pZO^t<)4~Zdi7(8*p4p{ zua6~0g{Ew#6)pT^&+PQ|{H?qmU*-;42rb(C`X z|Do-iVnu1fF1>9VXWO=I+qP}nwsE#?+qP}n=A3VCX6F8%q*LjvC>fR^qyX*(BB6=mc& znBt}q)Lxd)45dkEcf7S_+e^&~tty$)%MYh__wfYJ1%3`(VcM)895Dw@$k4QssIy{3 z)eLmKO-hy&kKv0%CE2L7_9)1!WC7InwUT;nEa#cf(r?7tn4LO{q-XVYFK6AF08^=X zA!F;kia@VNeo15o+WH_-W#ph&fKG?IxWXu&c;1EBulFzTL%XKXVuL$c$e>+aRHK*G zp)0L)ALK?oJSQ)iDH~{~&7mz;F8R0Fe}*)+5;Ri3V`*z zexQH=&iMy$mu%;(Iy37qi8)Ro9VwtRe!zu+dd~cll2_fllad=adDx#j&rHrJO7^1- zW^h@;8NW)+1((*5&^s!&KFzz~k+#X$y$%h{br{il%Mx~t3y5SJDR`-Gs@!w~&bI(~ zlPa}qN#~s6LtMoaOiCCA@Y{nSiv>uIwoqB61?^!T&afcAtLoyvk$G=c=b41$*P5P# zYk*dGL|2yvZYhcKr!f8VAM=0k+swVDO2IE;#w4=$2CXO?Y*~#&dVyVZ)~5Vznmkw` zd+bO=L>Ghi-7gYa8o##+i35ZuK1RX3<;$&@FS(}LD2-Z-$7Jo_=01vk3k=AS7CBi^~UDfI9;GtW}kE&el>49c!GvY@d9nE8 z#W~J703YWarhz?qQup_f-yNCQrW_aK1!*(S2Gk;LLt@9kPPqYAlKu#j?S!uHfRy|W zz&iUO=Ut!L=FQ#?P26r*eSO%X`09;Jpl9__8y>S|0iaeb<$~r{2YAL+t6ig)d@XU5 z0Fm3BtfxU@Vm<{DSOxqB|8nsy%hJ)H@QM-KSa-~atD+I=5jNVQulz?*1Wmr*Zj}VEM%J&MCOh(Ohwxc{r)R{`51y@~t|esoHeY z{^JRLKxmGb6fI0d6>8Tl(7R%Y-fRD66np#pf~>oxm4A}iI=0*_E_5A67AnzUhnY^& z_T}R6j@l;KZ?Tyy_E5!IdxLP`F6$+5+`hOOeT*18F!GnO&j5@ga@@fn{XK2)8)c;|M zzhV59AGS=;(Su-&UpCeyN;U_-v2qTj9SuFtLpsoav3%WR07(;5;2F5(?L9#@+yFjP z)I?EcNjjPTFy$OmEA&gCp3***m`%N3?y=G~7t6=GKKH`p$w|nM1Z|Y*CBFThn)8b- zy|n(m&SPRFiTiQdo$Qe%P;KW$&VM#v!)%Gqt59+}BO2j7rl2h3zB2y#WZ@Efb8@1U z%I8T!?t%^POn#TIeC*k*R+{CVAkp1;VC;v^%e3G~2J)WVy?;@`5NUt3yCi3K)NgB> zMX7JgP8fx#A#X)J)r7)BWcwX$>66N)cSchG84OC*|8XB7+R~CPYJRury_-oUT}=;= zL3QwUM6&I*xXx_q7rpk@>E)HTl>+bJ2zBah&X@6q_k}A<$)*!~c53_6R}8Ud_?>mm z`=fmIq#n#QH*Pw{?(&Zg57=RwjpPT6SvXAs*qZ;2i+2$E%Qov$p%)`|yWr5{6%*-@ zxO2!AA>^+Hw|nHfF`I$_CngJxuZ317$=Xyp22Pl5>Q)pWK|ZRTxe=e$W?Oqduc|wX zxA#&zHmbD|%ahMjXTD%eTG|n-(tzY3V5RU>9tt|?WQ+w{fv`7n5h%*3qYQIf$mfyG z9rl|fck71sT00vDUlL7_(8v51lkg9Bwh5PKl;&n=GtDmB1<9^6?w*xl8(7hJ^(`&6 zX)|MMn!wb{3wlAn$BAr)LS6A21Iq?IXcksq^(Nb+FjOvswb5sB9_@$uT zK7}sA+9C$>8&^hdl=+li1yqedqK6Y{{usnQ3kjXDzuUL2-9J-7c=BVqqz3#M#A^7R zn|glTLaick>iwza6jYz}4Je#22vz*VP@W(m;ocA&@ z8uy)CDCSWzD_>ryk@Hhi*7X{^)w*_u6e28@8?0Ai#q5%0*)foUl7gF%Fd$AO-CqMz zM1y~OK#Y{LF^5ke_NCB*B}G8RuJDKaAsLRxwP|XZgq{e*Yv8F3_+-o~+a=7(k}QBS zLnF-vOa+f6_>tbPd6L`Rts<6zIsi9n3MQ#Y9P~DtN6VVxV-ufY>=+Vr88K-_h@pc? zrsfTjOa_d$+D`_u(|9^w1*Nnc=(eb8RGLOTta_$1bZfTGvnMxqPiN}s(+x|WiIzjR z?zWyrY+|)!q~6EvUXX~rcb&9rBcsC3KYwgl=MHt%YZy>r%I(VmVdf7LXj_}jX0)7W zV%IcLIBedV-PNG9p_kA5QQz$7_`mr_ja_o;Gg-`GOI^0wnm;mnwqA5NPR5o=9kPD@ zklEOz$#VZ8tz@|zoFA1+2{pWBOb$_+-!28;JT-{FGdSGE0x&?`1GJH%mbgdUNiCZ5 zt9g|ws$l051nGk~da%VJn4rj{n&r`~IuAG? zY|n92LqHO7Kcu2Q3qEHj%VE3f*o#$rY1I31+I)mFese>jt2rgWqUG*I!2sCvIRI*E zGXJNWUi%PPqdn{juSu!8^)6QhyMlr(bRy&hRE@eF4_HhZrbufTEtTV4-@nKP zXpr!I;4%tvCkG(kMsPFd3XPO@C7Rn_&j+D8xrXQx-zOx|sFKnFP#`H$?N3ZCFThi` zCpQMw&7?DY5QL?s(CZG#by*0vBqZs+WEcB6M==Bv$ph3szP+_d%zbrV7;Lf!A&z^3sf@{ zKA}lvghE+~f~IO=#TOtde8iF+&VN`qR@cKm8Yu-AKa@oX@GXZgkOgG$pmyE%_zb$w zYW5x*bZ;n2dQbxeKAPu0^7WhP`Y(;-)sQp#_`=|GUbAztu3M`FkwOOsMq|K{Bk3ON zLt%Q{C(VfS6t&|LP5<*ESAneChsj5-Ye3G&?y_EHqA?RyB$cHOT?oIpAdvhuFOdvYx>7ng`2ly7 zTZ?SMp#-2k)INtA+!=}=J5!a%E}`kSPvfaxt2J<8DjI7r<#Vu7V9Q>k!Kx<(^^lEr zQ4f2mndVwtr~whbsx~TGZRuZUd41wU(+BbC(6huiOOdw{PYu)naO%ht)R$52_wWDNEw@%|3pBF*u_~YhzZ6)1?28pC=c^9|*zW;-c%$)itf@iR4#ar2 zY$NA@FY@$tq?N?!?3=FLABPXr^VmI3a;%vEL@J!<-DyUGq9iK0f#iw@mV{v zW(C__<2O831EO(`&{cD)h+3DxAru*NApei^zS_Ijh-16r*l@FL_T92z$^=?^RyZ+Ht?VR_gT-sUKJD zTL|sbE=H0f$!{b)d;Z5Jmvm56yO^Z`|o)~98t#xb_45i%h?h{aj)~1t*MJR;>sg_&{mY^ zc45gRm2X5oFV1Mjai{Sb-`m2%SkX-2NcA0} zxo)>>LhjnsmPJu&Gb{mz-pMnT#~!<&$mr|n+_)VB$9!#{V8vmsfXA?PORwQY;Y9$r zB3nzSY_`{2bLzk@pHC1zObq3U_a`72JHpy&EUT>MdPYi`i0QcPq*#OY zlXik_|DzDP#mp!MU9?k>Tr+$Yl0O$hrIm19YezTeN;+VeBbW_aCTG_;7y4_kV*QDBY5D}IU zP#|;6Nh`4&!E@_j{c`+SJkFte62y!aDl+FTw?J7pjUWq?M1T_OXeSU|Z#Q2!IdT58SS)Koyx=TgG7HW(jCVA`Ri@@qx(A{b_gS^n}Qb{n6$g z=8WDnqg3JhK6F6MdomO8eg>~Gh)Ar?a#B^{LF9h<)#qldy%txmA%up~+;3KZGMb=Y z^Q$1|8}{VO*bP+vhWt*IJ8=2p@D80nL7j>8APvzUWzOMkM2~+gqy1ZE|kS1o4)^WqG0*? zmOtDDXECo@AsFd0NGmjDu9Aac5{vv!;O0Qekxh{Nt2K7X&e0)zIj5rT&_h{Q2L3P2 z7Y|2Hmd1h{I7i|+dPg5+OL$A(JLDiwkCskX!Q|zXM-md`Q@Y^PaHl&6ahozm>;M@~ zs@J?zSf+p9%t(}ZD_&9nkwA_=@QP6x^7=uzqLKQN$C_Gvm%e`HFp_i|1*m`R{7JL> zTDI+3cTAuj5@O8QLI0Vg)Cs@>4tLj<>pvV#|>7pv z;(JpoHB*iN4#cmcDc_nl7pVJXI)o71v6NRX&kwsY9q`xd5@`{22m+wl0`RghIyLGq zYY`~GQZXoOCX(jf>9n~3fQy9yS9vg+H0f?I3gxJpQ)u56rAFsnqk6~A_6n__c@JgL zu&=@fJy9R|p~o@zj})31qSn({Lrhs2txv}Ez=fMr=dgsou&sXDZN>@kroJxc;D(iG zbG>r;XW;2z$CNA$bq3zu%eIno}BAW2)bIF9aCuxyJY9)<ZuNpMO^eREpkNW^;Wt zv6i*-O>O!t`KFEpLU!*V5y)-%GY(G&$OTZ%9%Ud z)N$K@+3z3&me6~}$uPLjzo;&7E9wVdlGbFW3LayS;wqT!ZYo2CSemwjF{=eOf zc&40EXvhEn2f6_N^WBU_CjWIaYG2wNjwSr!;{OWifvt%*8r`ljt%2mSV`wDubTrch z{j0aKXNO>3Z-__`4}s@P-2S>&Q`x=(*DEmgYJkq>#XuUbsHv&>P;qgY-|hDO9_6Ed z`Ox4SO7PJRmYUg1GOctAi+Y8Jcl!JJ+0%7-yl#_C|BqB%-|yKC<3k617(U(Bni#ir zPdqHehjaDo^2@Ia(-qx@`(tw3+fDwOINCkf8W#3&ee zTgCE1)VKyHQ12ra?P{xdf3({-4ZgAZ_eUr`n5Aj7t;q)vv~b$)>_5May}!K!14En^ z*iwh6YKDI_9A9;xGqP$|9e_H%nLE<2^2g3IKlcmjzJtDBKc|J)ePDo(AYsnvjDDpy zK96L3xV(RJ1MqS>4}DW!PTAiR8|Z=XqF1d^!T&i819y)xv9)s`SnbwWzJ?}?ggZud zaDML2|B{5hWf)Jr61ol&(FuqJ-x?S&vctWH93Tx*#nF0Zv^hN!Rn~RA_V}MXuxJtA zN8$q08DGBPazm5U%t)?tb;M!s_!~7W20O7r3w*D7BL<}vCKZg=4kYsvPj?Y-hM63y zAQpJLz!m~ZpwtQ)qvuU(hhciy|0%*ZNx#q2w{;K=(SC$lB-SJBC;B`h0R)7nPQs>R z{OU1KRD)t$!-wcgRb0_Jo}}J-9Fh~J*meHQ999c$gjtLh6U<<0=SS}Y$;R5!rUy{~ zgblI>L;#G1OU*IOivUunic6=LYMUM8!l#ywqy{`wU^kIlmJsb2`%NmxN6FYj$%>rZ&kcG@2f$w9+KR@>IuRJ2HQW|5I(1!%dbr|3yD71?m zJcrbFtFxzN);eYq--C2Owq}_o&S3W2l?r(d=qvytPK5>*UKTeK=b=~alWGc~g?NSR z0!k&9W6&gcAC-^z{~;PRj04Ns(h+s3{R z0mogbEf^Ga4euTT?^#mE(O@qZC0U8JWVgZeeAagf}zzz z`xwJr4OisefJTBbFkb?2u;S-{SjS)2IfG1H#N^d92nTWAEgn_-LnOVy>|xiww7^C= z87z`t>Uie`EIy8+*keE&>N8{!(2BKm0m=&rP0f^x@^8bo>+pZ&ZC0o-lB;q6kaW;Z zp&EgO1_R;3^zvszF2XVdP))q?QW9c>Y8vZ`caAl~EPjfQ%n#sJPL*0E9Ma+K){U~0 zwcS?(PD7M58_KA12bzY`YNH2%VBzl{%Ow$%=M;!$`@3JVL&ew5lv|FJmt{9`E9Iim zivNU1rN;saJyx13v;2{?B1yu9S`MYbm|WqM^Il>lT#(61*cF6G%W9wp)DY%;Nxvr? zo8gW7Lw|*>>_*s5WQLvyxOJ1=*NDAjcWmz{6=wXlO_Z-jD8{&M1oM~H_+g0(6gpBf zkg5-4u1}oU!!>K@ecC3cn=L~3HZNAZT{!hB!0?EeaY9DHeOiupQvq9?Ar{EVHt&KR zlD}JDm|(3q4xmc3C$(Y#T2bNCbVeWkrGA$5K!XUA<)N3g%u=`{G7_p2bi6;qJ(NRD zb*8zQ`~)kgv=krH=Eg$Im!HX7$;ClSDu!{bN6Czv7=7L^xR|YVmQF3{zE6=*g%klj z?EZrR($1D?yP#hNs$kt zE$u@%bp%33na&D0(20&IIM~ zzX>bc-a{RU>?F0WKo`&l{ei%2S-`V|h#J3S9k2u%_Y;cDzB-r~!%>p5+=3J@*^Dzi z7TnglH$4`I(Q1nM;v~UK4_CI?cPqTzzSG7k^WY+r880^;eD?cr-?sokvcw~L5oWK? zW*9a;PvTjd+kUZL69+1jmd9R)Tw{4+%}p1vaJp|`aVk5dFlg(fq4svQ2b;ZjK{N{( zPnyt_+%f{rmcDQ3E*$HMRkb7aib539i)*moR}f{NqP)kBA%7{7wOfEnz)MKc5=&Gv z6%!RYO;^E&+<6R2PMT{9&sNU*Crp6;ve<-I{YUB4w+1ktbZ|ByVuc^rA^};Ea$Kb5 zvs})oJsw_n0b$9vc~q?aD4q~hmG=_m?b7wSvcqjbL+4t-jCwUy>SU;a<*7HL$CkQ3 zNCG8=>blo8a1r7vX~N2Md*7aNs*E5twIZlQNv_)tJ%oMnYDUJEg{%vRvds%DP#2Ft;FT^MYU zkV1e`wv9d}xY?|N)(c=FFFpMPYsf@FI^0KOVDm}7lC=)xRh!5%l|h`x&_2%R8$KNROFN@{_`MPNkJedX#om-hLj%#gFv$UYc_i`rOS+k@l zhgn?5+uJ9EeY^p@0zJJoJsh^vM{iahJg%Tg10J$d0RdxZY&X{KOs>QIH%rzG-IXX1 z`HJ|akmYe>RyWd{qX%nV*X(koNf>`+e%gL>=+;MyJAqU+BQr*v<~m`2uoj?Pwt5~+ zj>pOKFKh30(jumg=vntojND9JNY8c|G)El^zhP5LI1 zS0n*P9Mf`{`)LObP*#XdpxEK#G^3S%+;uwZpz?Y>Nr@TJC_`9j8>#c5R!d0Os^bq= zWL28tmCIR)@Xc~{y5b#Kh~^5FU{q8}+h~Z=ea8&OoA=h@dy{T05CiR3Le|7>YrtU| zac@8DfwotC!E(JID1MPLsE)k~3=eGQYkm9CDo+R9Y#m>7Lqn{hJ$>zUY1_?Gl>RQ( zzqDvEOC*D+M=!&w9~G!lxXakrjwq_MB=LM&7RmMKjkLZ}6`s&&sBI=`{fUTJdB+9jU|sjUB!e1olQq`O&2&}*Vd#UOrf<+$ix zy4F~hPg-BDdJ3no)b}W@HKK1bg?dHm24`Xv!9&I^)eNq^x@j~_a1fd9`-Kp1^=PCO zHX2bQ_^#0iq_K?ZT3{rAAUV1A{k*g;_`J|?z4hq9oMUn1dQ@r7K>6l3H zrV9W@y$#ySxwy-|n6Z;koTbyU0mT_r4M251)Wu?$bYzofL2w?qrBLS3QwGiYGO!`< z$rw=p$~oBENlUB4QaR7x&P&hJXGz&R2S=v{b3}Mt^teRSJ7egKNHD;$4qXILCo?N` zuA8}e-UqNiR?F1r3vUY2zurFqO#*dJ_i={Njq_2#BzK^g$GJ~en?@u;&^QH=xkiB8 zvOX`cg@w{U{66LvG}d(}J&P1=eN2^l7Uh>3N^3XeMUKBGrwE|kDrrP%3YquVTTF{w zqNTLkcgCY{`zkU9JBG8I+ho%Lg9VCcw7Dmnz;N!6Uonp=CDI$RW6rv>h<4W)hLc6k zRI1>Pm&UHCP-pH5m%0>`7H9Rs^pob12kph!?xWv}M`NJ$mFp$uXRP9-P0P)Ko9%H1 z?ZX?n8b8B(L~GX6!EXE_4Zlj^ZiUy-HsVy4NL3GcUa?nAaVF9T*597SH-m8CfY=yn z|Mov4sT4^+N0&aC3btuJ`d=`Oe8T1R!UFxWS3tmE)5m9U8YOlSdxOU?L)$7`kWw|V zw4W>HFtx^~3peHZd#ux91(y$pChQ{h=5x$MN;fYsR5BGdj#9cc@4Sy} zEFhbMz8O$EDC#!q1Vm02f?A5GIul^*4qd65KHccGQf|qaWVA3t#-&sX@WjOC&F?_BHgBB zSlDoq(s41tQqnGZY=<>PJ-HJ<1YfKIRTghF)d>-D{zU4awt25PtQsZp%iTrCIc1`v zS65~}L*siF3$OcVL{>3&?JA$ORUxN|1_mFSz|*sZ+VkCD4E%1t8<|n(rEm&}H6h?H zZoi@YP<94G%_;&Pv`v{>+ecO?dqQCTF6S3sUVBxJaPTP6CC$52czCsN>{9Dvo!XgK z-t)F(Bm)$rNath6(#4ke37RpjNal<)f>d}_4QQu{Cjw!(^}lqY0Zw-vK&vX9JM=VU zjC@rxz>1MC&7h_DI0_I$OW?jqm^|8 zLhJf{Z_FuW43bXRX9>6VcRkDyI&7Ev6iej_tNLMRBV0`cl+?L8I-7JcZu&j5lNUX! z)wffzUd^XB*|LMBBXtrmhi5`#LGo3`PNP7K_Fa8(8TgV=jY#$jde>wpLetjmt zo}4C8!-24w9~QziB)bJsQF8$@L3L^C!6;UWG>fHqib{S2PbMI3vrFG zs9mpeeG|XpvZem9ADA=c61VChixJELvdL3h0VGFmkrZH(_%A#9G3y|jdkXMll2Z8;&K37qe3Yw zS+GrE4r0a1(9E(hr0m7}N48i%X4yzNnX6wliqqHyYu8f;!IT_~_^~HdGbQB0;=l0l zO1p}n=8lSzs-~<|K&_ccWcTJ#odjVvJwPN0IXK!DEs4GQfqIq$Z14Bav;` zm_hty@XM zKZD_35>OIa=ng9FTnYzhn1F(^!_b2BBf4Z%**aF;vRXMGyLP5s5?2Vc%79Wbnd|Fz zCs}r`E2Cm!+i-pJbUqk}x@MGV{&MGNW&$q|Gb)kT0|qjSB~2g+ zXZxo~q7M*j)`qL=kQyY(P+I={v@k-P7L{Opb+X1vJJ>B--{hq|5wLUkKptknQ`U=~ zFgmQ5r~DK1kseKVk*cVRbtatG{0&Qr$NxO`|JElerZI*{mM#P)xhfDk?BgS1m5iw@W$4*sj}qh)s3)=rwltscY`P8H)B#TL=Bi5pDac*&Xs_Q(W<{{9iLox z&kAr%EJ-B|9J?dLU>Esz!;EgrwmL;?ToBimVS|D51;2+?-0xX*j-Se1x)b|laxyiR zP>LTk?qzz9(0&tFQ=TNvQCd6gQvR|!73-#HbSHVXEbkkOdr(nJYaTajfdc-W3z>=P zq$3W*8OWr^4i7JB;x3EU3WpB3_DiSL3YRiSNk0iI>ketdLSO2bkypWs`34>WcG{Y! zN5(UB?1rjuoZJXv8i72Vc+Q3iL1uR`tr%he>ZZT>T>R-kP^AXoJ%G4FquN$H!iEM@ z$4YUegux!+VSMVunE{CEGlgSL($ow{3Vj7!2m6gS{Fl~^JCN{Z>FMxTzUID?_6i;> zb8L|PqQ;O`fsIm<>Vt`k2u&{A!peHNc(x%Gem?M`vkw)+DL7oBglwL6L$(?2P~6A? zMOG`NeE{k8vLYJRNb%PQ9ZIaK9TWBo*VcgL>D}TBercLuOopTRgp%(vScN8sIgw-w zGtiEU$G8q&kepqcFh65RseCB1X~VkiUSeYF_0R6T)G~%$-}wp76){P+uFjaMc)Jt{c|F3hv~NJeXKHD!_YCXRB;WbC()i0tudg(#f^_wi5`c$GVlx%n z+#q2>quWGHlUkhU1;3v=(47)1xxyX8m$QZePth&Y&k?rAdshpCm`FqHd)6`SrLd+a z7gwEKc*n%hen&4o$tEm;xI#y+(1yv+rD=THhAD*}QolQ#;}ARLGq$oHrB2iPpk&Bw zZb$Orcl8RnQWeNYEOQ`(I?G1LD*husXa z%AG{xvx49K*Q#Ev>G*dGmr`7iPD?a0!Auz0fqSQpNF#pKK}>pRza~pNY!Zs!$J(Xu z;&nORseq{dCms9`)7n+w(NCV=+HGa&zjPPv-nlboaUl5`>Aejz{C%yl4?1za`V}ja za7rXK+ND17RxqK~!0o*y>aIu@HbFo}+zmoi0X2~Lec(nEK{Q#EU7~(xv}w3GS_wsT zIm@5lw;q}n10kqM3>yG6fG<6c3wVqzaFnQF%ZC%-1g0^u;68_ zjY9`yjhbSHJm?Ti+h2cGz>Rgv+;5;E^XGzDclIvMpBtH99*YTtESS~D)XzuMz>Dz3 zs6)0}+0EK$=?;jIJl2n)IVtP6XDGbZ4V?GU*ZuCVEMqj9AySyr{jCL(PVeNHjsXGZ zmW^Vm0fvsepESIZ18Zm3jL1u`SR}u~5&zQk6DU^+_K$H?#}EMr3M?9Br=@MsDZWg+ zdDG6x@ILpn{Z(p6)^kE>PC@|kR&!B=9xSexW=F{1cIbb}ebztbdx{A}fhDq(tPY`) zY-EZjjunrVvn`?Yqo>5clzy}5ktNb^RP~_~-ED{u z9KEotz@%)$S^*ePU+-n70$~%->;!GLsu-qj`Xod3t4`1RCxM zc9FL>>A8Y-$u#1x6~%%FLY@U2M6vKJ6dFvBZf%PiFl(f?vn7opV5Yc{5!zE-I$;2q z*VRPk%rl9=>qpRG3ScpQ%nPfz;S%xPG?WG}Bj(oBYXC9Kk!wbnUGs<#9_PMj((b}C zL}GTdPAd4VtTZhbuRJ&A8W@;V=}Wy$R4Z$To~7LB6ot1go_jgY!gqE*!N$mju8Uv1=avynvT8IrW(~jqU9!>}56D@XPxN7>D%Z2BZx2Z%)2tSu zH<|#50+re9HzqBPH&T4TYd~Fji+T@%(*}&nMwtzsucftP z0el$C&H8TxrL#+jK-U4AqOjqUVHPXCX4cH++R$p|WjyD-f0Bv|IPGc`hM9|4L01O- zRLa2C59*2rdScv;zk-{RfHf*lUTKQuQM2`5hn?HU^r%#rRX@R+e_KD#)B6(L92n=e z_<&DqRY}Fi4AQ(E>@;K)z}ExfX;QMlQtH~N{p&st?blxdgbr_m8-x`q3&olNM+;j< z%qA{-X67nF*v0AX?%?iZN4>Xh5n?f*eo)g>D||NJD7wK;x9rb81Bv0lKe2xubtltS zxhh>w;ud{wA|fTHHyM0pHS*lh7cXp#Vqz(pA&ZuXJ)1EPa82t%=s@|x< z`Xhx3F@Kyao9u$dX>GpJvn^7IO773-$gaTwx$4lO%!E$EaW6lTnkiCxI+3|?JaZwG z%sB@E&i=?p>1T&qY}&%YaHx5DTw&|Yyvt0kC2t4tWXZQNb_e6-#?B72K1a|kB$4@y z$dUhTp$&|Gve)AI_7enP7xsZo*nK`R1>?k;qUXWVfx&QU;0c;!aP)>f^4zpVQx6?y zJ}ZiC)ry+1qNM}Wjlm2%M5(HzuE}m=HrDx^+9b*}PysD)bExf3YeT}h0|*Y`zypDR zC9i~(n!}2fmC2!VAC!7Q3Gf(=V6b3sJ_*DmL4W|U9W54c&Au^}F@&$_+YB{qac#hI zD?t#MZg*7*#m@4MlH?(@80FX;(R@X=wt?R)4hM7K)a{)hEswC~|KaXv55pLz19fDu z7VFR1cRBxlISAKoRts+t>y8!~@Cjm642u$^Xj~~dBu}UWHWi+Bx62oZIppu>_u1OJ zuM`0)Ntt&*^>{jEp2%dm!NkI{vd<}d!=vJ=qZ~ZxNXu((Aq1np>n{$%`dmQBKqpnm ziy)=GS84AA9En`4xPPQ)Ij)>Ea_*g-+1>+eyn0a0%JRmGl zJn7z=Ni@PgK-i(=75 zxbY~HT@|!^p{wCE%SYpA-i&Ex{f_o!kot=L*KUwvj4^wXkx_vU?(o_NX`9+0AiY`S zx9(L?y5w}8I${uYXj!5w!gPVpTe6|B#Svkg=8O$kL`%}5Ys?%OvZuB{qfH>IYjaBB ze$Y5a68CVxF{XbH?(x!5uooLvj*hgniGl>M0$c(nRN54JE_Y$;C|#br?vFL2$cZ^% zpu@kulK3Z`WSZ?B9Ke256KV5*2$Wbd@Ir}Kr^x;FB)VMhdl;eMb;~f!$RKb(gcCg? zNV%`!OF+II-o06g9{+UNSs^b=0p2lSil{jw!mbDZ~z)0v;BS;ReN*6zj$&zX{6Q7 zz*!H|Dl5ES&3A{`)!;~tr0xklP+FSdS0K`ynLvxdOmTvMDnSMtrx46Q*2d?zL5RF*`X)$wUsg$DhARwlHX;dY)Y8|=oYN+md#;_l< zzMe*bkS|T8KqTA6Xwm5^>sFdv2_A6#0C)--2j;7F z;Y$+7G7AmH`Fvl*GVs<`-|#oeaLrA-ZCn2VMaBTUPpmpB_1e1qsywla~Azh!Plm z73pgiLrPp$dFWXE?2PxVK0FBP*cCQS<9(D0957Jjc#uCg7(phSrnX;_J`~Hp+aw-Y;V;Fa#vWJAhNOv9a25ZXjAU_@e~;ih zR{ueu1ayc5BAOS=GG1zalmooF8lAr6x6+;h*3J@-`1MDjIcYeulB+xm-qP2O(GB3% zLh&KBX0;+BSYt6fK+;gUN-+nLNx4Qs#Bf~mzamPtuA*sWH_SHEW)#jeC8J%Ei|%S~ zf#>3rOw#}qO_HEttJ2ey2kvUrNXfamEvxXbja1AWOXU$*JO7C$pX--y&I`TXh4p@< znevErkQm#KjdPFXOFyUXzoo!Di>ADAb)>g8ckFpv(+*fD=dG6VS66N7&8LlVjX^=y z%&^YFO8iTUf%$bA{-MfD>?$IDvsD@IKX=>dkd@-OVYdS!FOhDTtFD+v8>z47%LV7} z=AO;wo*c~In#?|UGQDUrd|@YLXwwOC|9cf(oGRmze`&q^Tk}z~p{4apae{LlWVWAW zXlBy)~MU2wkybFtPg2h$(js-1u8_{D|a9ZS+!`Sphm z#?+uO{!uS1S2z4ky|6w0Qd;QtOo2=t7Q}~`L*+O~-b@89j2lJVhZ?3=;0Eo~tw!6< z3{tV~F=kf<$j;|&EE#1C0b(8X`X;@Sq<+IPRI)%-p#v_Ff~lG!|DY>+tQEZyFd!vJ z0?*ei7doNvx9Qq-sssSP)4HaqGI<2P!kDyLS3my)u9#KSqG)brKWLlKHs;{vf!!DKf*98pn8;={ON(*SIH-& z>*MgIVqHTGW;Su^s48^`FcL49*Q>#UPI*eQ7COb|D24Q=7uAl4dsxV;{xa)+&PJ5{ z6N+0^ixzP6t$>%6V^G0-L1^b6&qFSCM3K-YxykOoK5ZDXVrl53xBr|nhvycP{)>y~ zN$nqEQ%)DKsHtmBT!KUKiAbyx{PlBpyNgk3l-*>)ZHb}tgzWoSwlWNNOMjyV?t6ac zvPG+Dsc_GvBo;BXRK-*^>E(AnW@`}T@iZvqWp;X%JOFTL7*2oZ=<5#sJ;NEM`uK6} zjG|38~k^fM9`gYBMGw$cxTr9OsYV%0vF?SX7$W;~nJ2^QGC(gb@3RD`~ zcV?>5#J~C=L^nJz)cVsi)kR1c4yX2ZZH3(eE9ri;JE)_D!a0-`6J&u99NL}GD;(GU zFxF}U>|O(cjU0ZMYude0W+23Pis#w+qU9&xa8lSs!|FUfn`zJ)^-j>ey|Fdu z)QdkSxVzxvPS+IVtf+Yq3#wL*=!aOu9Ev^UFkQ~3UwesiS+VVlYVg{O#mG3r^^E4Z zLAE}lY=Ig=I*{;$(-(E#jzwOrt*Aa;SPQ9`TXq_>;y3LJIu1PO)7~5l9L?tA%kabvYAA z4ANEic8LWBOC;YUg4B8_pfp0$Zdt)(GZjLG_h1JE!eL3^N}ij57uY__EA2MhiYq&~ zL=DWL-c;<9g8HZ0T%_*kg+;0FRO@>b2#k}A>Tnh5sR+P{d?fVD`uerk5eAP#?7}E`^BeeLudx zPjc%O7FpP1mN*c`rJkW;Fk4*wBgbW;s_FBxW!ct&rPELa(ne6HocWaQLH`K~l+BU} z;w}stPoYpNXchjj7Jfuz?!k$x7ppM^r+H28LTR{4*VTjGsDgpf%!8SuE8k2aS8zC= zUXL6%p-2C6mk9Q>2bEu@2`d8G2^=Vkh6eWgLf*u?8Y%{@_iEhO7`3<>2B(9Z6>0uC zYE7Qkn`%aE9_(Hq@sV5QDHbZv9aCULp)+XwGCO=*@P@hEr@v;N|0j|)I>RUx#$~Ng94GBg_SBmvl+#`(491ZMIaWlN^(jv zuJ>aC$+vark*YdX)nN~TOVhtttiUAy@_|sKivk=ew@dr#TANSQ(^mB@feqXJ*_t6> zmZkIL*uTq@$$@rx2(Zvio!(1Yec)p;grqF1q(0aHwfWq;llgI40>(YYBeE~HL%-jQ z6kUYa(~k`LN$K`D@AbgUgBQb1-uL4(@3)a@jo@!0w?;n=<$@ba@|p36YTXn0%&0c4 z(wDALNab`R4FNKISP>N*9-IVr;%I;~BUWp>v4AvA2N3Pd(lhG?f5Q`Zlx@Me>V)() zLQG8ES*@B2&WLQ7gH2d&P`+AR{;B?1%xE_BQJ0KLLN4`hC8p7#AesVjiG_m{Y<3AK zor``ZTK`g?g(ij)c!@>5^nXL<|Ax!qf}0TlY$z+!>Ps_%Em%3&vVBVd#n`{jZ~xjj zFGdG5G4;7#A9B26xLzM~K4ZA>j=AtyZoas8-#rdz^iH|_w%Z<~yid_%xO%7Dd^t>g z?O4LQ%CN^d{ugcU6f8>Aq}wjrwr$(CZQHhOTYK5I_Ofl;wsH60rz39kc|QG6Gos#S zRE@~YF9-dR7}891TcXWlkS)n_w*>Y$GyRlU(o}RqBFy7I)n&LLw3*5gYawnnSOGP5 zvGY2Uw>w6BV}#hYeBwrt^9x!OiB6UFMeQxK4U$w`|%(2RP1+SP55Rz{%T&g8t1;Kiv>=e2}&7&>4KR4qGIu*ZBvBRODBw zJGjG6IAcGHAaC8_>lWk6&DH+fj=N9SyHC0=Kiscg=-+alyykj;>uRlG9^L)(iZp1;>BLAZ^M1@b1M|kBt8esC($~mi2y(@_NmFxj}#C zv)cG9FMoY3?a4=f{^_*5t&8^hYq9Yus(70&>;3m@UB#6XPS^L9$dVn=H8Cd}qC;Xp zc1W9KlPrif$qG3UZM-RxA(~`eBqk1K+bO>hyJ~{E`A%P|3DsUN-Cmc!?ABkpC!G~V z-|>EEbJA|7X%8r#+<)d9_Y>jWzGaeka=UJHr=!5s=~7DMtM3-5xQgoz zNqm7%+2epDIaeEf12#JV5jS+ywPGI(QO{Aytt^IU<=ZVefVw?_Sf{0|ziroTy9Jnyi=m+)4Q3tUN;`&H@P@K-lg`A{ ztX5p*Np>eyG<+*DUYpEv0N-~Vny|7{>YzD=)wHvgb(OXY)obCC5qX7;)=DQnobFy+ zddhbdz-DjsMyDs1d^cI1qIIr;pVr4C@#GJ#Q~n1s4}t4NbLcfKs?TzJE`v?e6_sv-4Z8D4Yf#5`XLaVtA@dVKAY2^7Dm z@;3(2@ic{dOwviHFnrl&@7SCu6PzDxXO`&WmikH&BiCD<&#GFxHY5Fvu8W|pPj@Y7 z&k2RQ)#0lu@uvZLDxCgT)DDvioW>Ul*-AL;URVh+{+02|M%B*ecgY)B1k#oGY=QJY z7g2skC(ULn2N5Oiz|B^zP1vUm6gHu%?dwQ9oVO#k&>Hu1;MlW7TyTlQaseZ;7_}+7 zJr&eL{cYf&1NTqwzkwk}VCiZ1HW`MVmOsBs=nfU#Pma;E)+U0hu4`zm zYB|npt&}RZcA0(T7hR4y!+-e#U4RCwy8U??%x%OS)7t%~6ToCJb*z&cRwfg{k1Ye< zBv3K&>f52P-hHsr8B($WKj8IlLA^+5aCnIFFYUPKA?O6wttPRS41TvQ)>|Ra=btFL zSwNptggEHgwh-v02aRATDgImgCPgoP0VRGcaeA~?TKUXF_P+nq%%@xH!m!-c{%XSi zJljD%v4Am~E!kq2957aYYT4CnaI$Xv{z?I3bo+1fKHw(C3mvJc9w_JSwozEqtDu!f z*kPL2J6)w6XV-dHh{azoWbVW;e#}h9F?}fYaVPJ$cCJv;mkGmlZKdLM_9DveCnK$l zkq68jp3vuYCXI!0435OO(#B3~Itk#_9ye|_NtslJ7EQ2Qm?_`h3 zW0D{*JnBLNvy{^$HfezK^s9juQh9%u>}8`mUre%>#o6MgrOh=+W3y&$KL^&$PX3VI zw?SWnAbxw+alhxZ3dl<6z~N9A5JapTxkNQ$=MSW}a$Z-i=6x9*P3!Us%Yyrz1O@bd z3_*UqxLnNc;E<@tN}(=yy}azb{ey)V7 zd{}^;pP;e1{Hzxk_;|~pHi;FA`y)4k z7Dj!-^9Ks1Dhy_lKE9H5@(On(kM;x&fp|~|TVi{1YP(2_JK4YuW``0tSGnIxcQ=~3 z>=twg(VQEi70Y#$W1%H;%^&_N4Gti?+I{ToIU}yM*j4Zq1DyV=VFBPal zj}bv@JqX*g$88)yb-)BR6z$LvTkq5rta zjzi>92){|<5(5@pGAT5vAf*;n)ryom{>r!F)#v5^J=ziZZLU9p1OU*n2LPb{ztPFn zH#Bwrm$JhBR^A+Wc%6CjZ*P5kpdlDxgOnvSff^z4qbI?Xc`QwqYnMvfU$Vq<%AbMxP`jGJw3z3VSNwxL8XmiWcxpd+;hRWz?=e0O#6 zPij^>s+%3QoCnZAK0gN!!D)w=^nJhP>g9IyhR0d*A`zf7M=&Igf4Pjl-088_Ml9BO z|G4~-%2@>}<=ckWf~#bYrs`PLkiDesU~j`%+LDrqS7}dzk}BVu9!VTR7?{18l}a z0(euF9c+r1_9$izkn|<=y8Q)n48nv)YyIOr3TFYjEdBTgLQGmhBfYC=Kx(vR-b=gbmuLdLJEO%3~?ziI{mMX)@FX?@@!1#gglz1r%X;6 zgB6Eb@u|1sUKd^ShV%DMzK}i1B>A+N`|q^iAu#q3nGlQkchpaNbPAiq<@QhiW?BpO zB^`3vf|FY0qLfsep~8?d$-kDJu7_TOoivIVcRB@+egH+eJl*^va;}AEQo&~j$-ZaS ztS1I-!N$~|C>Q?{J^guKC-o~2Qva%&Ir^0V$Bpx3u+=n@4@3tA=eM&=5exAF zK+G)6KW6}Sh;qfTphgKy-=7I3nJ}Ta^l8ESU4HHG+TyqE{JKS%X;sMJ&~I3|5JxZ7 zTD555{w!Ck%!;wCO&bAcU95-Va&UOk6p&FyEdc(R5$B5=-fD)Xpc^yJD|8jb-X>lT ztJN$9xMuz7l-)6~c}*L3JIeuwLX0ptD6fZrS=Nb_d1I*$0U$)BInpQ6qCBvTypNiZ zn~6zr1NTzV|t>1=(byos0n7iJ~!THN?7r zm>BT9<2L&ZP@1dA3XIF;FZio_kvmvT@)kadZNdUce3dSH5sQvp{38u4y6DlHTR1<` zG75+JxtHnS^^6Jml9D3}28>mV=wW;=rV7*YJU&~o z=m7&P^dg8J)CbR%h$}0E@i`8$LSfUs?okqcNqPRYV$;f%i~Hb5L-@(CgW0|^KK_Y} zY6UO}y^*d})mk~+ezvUdLR@N#EwWW}@7UM%!Pbou+@fevNz!jJaMaGBEs;sx+;L=Z zVZb)rZs{%O0+siMFcldZ^Cs|L}0I>k&MS@8dh@T5bo61=NH4aiH{3$a8qa11+G@XbF zV@HpG9k6=00^!1)D?sf1M(EwZ zPG8_1psV{~`9=kzg&SAEm}A7jXfO~o9~SUJ?qfO@2CT741}%~N-h0L=brgK2U;xR( z+gt0(-Y_JPBt;cU93c>(o6m`SKcRWo)@Wz1-1mtOg@EXyPaLL{=n#t4P7tu61h|%X z1aMd*TfFIG10wCF8je6x{t@f59*ENg=$vK9Ry~4{R|*uQog>0+*2n_$SeD$;LYxh( zIw_?4)^2#wET%HVsKXH>8GWLxM%1k{BeXFU;u3>1u>ie@pctBH)xro)uXGc2OB#Cw z=D=#y6uJNyqGY_UWtOqVW8tD%&X~$K|MyF~mbke-`;^wg1*Dzlrq&_Wv+K7r`kcZN zL}cXt^73GO`WPWOCp8M@&VNn%w4UbS2(p3#76{^SMvChY=7Df+GvnNZwQofy3G^qp zlTg-`NxaLMHFM}WKD6as>@AQ|k3jPg-3#z4y4izN8d3Y}dYP6MJ~VSv!%Yh#DCYv! z-gdWMY$sQ=V6Jnxu(a7y{xKhP$GP+#ErYJz!_whSX)QYx@3(&2FrZUE-r8N#RCVd5 zZ;F>62v(5pBcno)ea_refx#2Y>o=^eh}i=@TOmcbhRKa`B&dfFv=S?-ab;Lu7A?-pGL@EPeu-@TRmHP+E4x5%bm_1#vM(6E^wdItvC{NgYV zaZlFL@3`3L8*In1%{)HO(aUd-kGOo2{eCMW@}z}aeziiKs8E1=!M-`TamCAI&!e=PjtqVwW;ZArr!r?fWQ|H=3kCE1D+t(u)KGv}H6i1>^QtP1n5;zLUk@H(E7HIwpfC zzl^A`@z~6$Fv%%CvSVgc*#BJYG@bc9PU4P%H)(ytJAnddGQoEksE~_{w5lGL}McKNgb`ZK|!Gv_!N9+y4-uCoREDK562q zVBu3kWFDnNM$wA3URH7A-^+;Uo($RkzYpq6L47x}pQ_{i(a$OUdP4! zhyrb_J5Jq23W-jQNTK+^V3m2)urN+BXXHB4EoH1^y#)5w`aEJY>}bh4im57|`@1z^ zOf&b8ml<oIh#YIH^J(^#{oaVz8h(+7iF$D##qMFgt0hqORhGkProc} z&L3yMmGUic;HZ?zR{zL(;>D{PL3_KdFS-K^~)|9ZE zAYE+|kKorKz24Z=h80cYeWEweoy%@r7N#g;v;&d_f7b=Awte-kHyanQ58+|t51>Nh zC+$-=w&-M~__AD8BgO+O1D*?1x@2LFph93=-m$f5i>s|SV5Ekr?e6#%<{PaaX=bv}`s#R+D!G}}eBGAW>RVg^nB3$`!MPAF zHhN?uJL4ubv(j#oT*JDq_1}l?@Kxpb3Z4106;lhDvNcl+JlLo8O`KiU_B`cTW>?W} z;A_AS0Xp7~R&z&YGcgjJ?W*VsdETR`5GG2CxA1wxA7Hb|ryiS3xkJ4ARWENBmKR{| z_Ox~zh`mr=JmtDNgwx~|Oi)f!XKCux9M$46B*rKV50b>1y_o7Xm=fmDaQ?>$q2 z&`wHOXiz5a(ec$a?%t!GJ*eq~TMM+T5@8c}E9(J~VdoF^4eBMl))?NZ{duUno7)Z8 z8yJ3r=rCYSlH~dx3WYt5epQx?4c0h4tj?G7OsMR3yOWVQ*OL2!z!;7_%}V+fn3yw= z;KM+z`J}rscriB=LxsW_;p)GOYGL&_%3%aE0OX`Er5f<-i0;qz3zwWW_Y2`;Nh$_f zry$iHqrMQv|9(@02ts8e_|LX?4YB-s0<*38{JTc(vu*3ThoVY#OPrqLyQS#C1B*UU zqrSf1O(_^L#iCSHiRyJ@(9t}EEmcKDCaQesu{51R{=V@nPc8aC`A><|JUK0144Qo; z=s?T;0bh^sKgDm4%0h3CYR17Fs#@Ctnh#NLJrQDm8sBKn03SH3(g7B;K#QL4AdQ~3vtfteMD(V>gP_W zeKGyWO7m?w)4D@wRZSX4VKJ1($Gl5w$2MZghl_28Q= zt)Rls386%hnGDoQ6<}sVpG>$#k!iq{S1(OZ1DiYsvhxUX_+ZC6nn!rYnzGWk`bgx) z(6|bTq2Blb_z8al#;8z-2ctOP%z>h94*aLW{K?Qf-;-?m;ROh(#7cf}3JyKigR(n^ zq}<>SlU&nGM_3+~D3=XU3*vIk$26V+jJg{0hSyD;AV3vudTvAJ$fx{`O%DaE;m4Ley+ct*z;58zEC zFkVt!hC;>onMXMh8dLIT6xrvqYNyfN+nxfv*HHV4#0ok0RxYEmc2+$marinLEg189 z59VZ;!1*zflVu_&$Lv=p?Qh*iN~Yr6h>%SqT}5ts%FAl;9e?EB>(I|K;{!SeEEH`- zHWdS>WSNo6nUT-L#CTs&tK3(9;Rnsxrm~xn`n8mDUx&wHP9754>vkr~N_%=Xh1mykI88VkT^bBABXBsmg=aU#L(aL$`Co zatDb+nl}(&DhMHM+3-}8m{e6wF+aH)F4pFsT`8*GZn#hRa;%eKR{EA~HG+m-^FF&y zzsF`qMn16mMuPc}5cR?prvUP0Wc1hu)%APZ`Tpj00#07^lHEHo%5nBtb^+I%v&8wx zi&z2)pUAR|$K1!H(YalEKkN2jcnArx`|tcLOFPBu+p}X&m+tf&AwoO4bHp(v=*W0- zMc)}=h!-&q*^C%LJPwsjG9ggbhj<|GkphBD`GA9J@F+4(gUV>6c@l$pqLC7xxq!FB zZNJRReU`%}ryNz~TtbqJYz}9rHY>imUl>Dph!`Oe=iL%_7vsRl>$AltB5i!b-%=$g zj})C}IMS=7*VHAJ(kc2XIlj5Ke+Wzb3rh0dvGowyDN>oBwp5cSWW&3?j(UA3vjB3; zTF=RLOS2p!unK$yQ%L3f(h z6eZhT7dS+9sugy8w7RR*z?WHg_DB`b*>$wvEcK$MY*`{w)b4`$PAB!b1&l&l%R{8i zO+Q)}d?I_=A3dfFPl+>=CfXMkqK*<+GVjqC`-}v2f|3TaNeeq3 zJA%F8CId+`p$X)HSXlSJg&Yhb?-_^aF+nJA5r!(xjNAd0&w z`N3M2@DK zp2eH@PeM}C(SOdfZkx_Ruvq$7F=O;!td=MfWO!n8)?_u3Y)_uTr;eZ^6$IHI!a8)y z^#gljdO@AU(c#*EpZ_gmXX*7egYgFTCs+6#rCkT2Pq2xZKcGRP9cLVAiHSvB zLh4i}2jb~hrro>-^K?zlRb;A*f*tx@?y1Y8rFgFj$<2-SSR76gHWbf}UPaed{H0Mb zJhLFr@RbP$AL_1wR#G@+>MpNS(avet>WB=`4~RK=?wxk8F+8U2_8<%;j*PBlRTbRT zGPXzWvAVa5{8qIVkbZEJIGDkduJCorKn68kt&BUja_z?0(m>abD z2I$nXq^i2hPi!zdZJXQu2KX~&VN3$b+l7}epQparR8RF*;3J1u+S0ICrboQ$67uUn zk6~zU?XQ+Uy@aR@pwdM!eZ_9ZD3|q0s3)G701qE}NRfo4({LZXHkVTe0(V>DsExrv zXqlQ4wX2ilI&JQJr^BN+5i!mXupQbqIw$L{rAvk{HmIoDTHnWm`RlB1fH}o{A)d0r zeiJTEMoKAcxl5**OsQB&#cU-?I-n}dGSM3R8z^FwOx39g`!$IX-5e9e_zCx?UMihL zHJtQm7Y%OExvi!QGr>7j`8X>}po(YZZr^wHDd+`a3@C$YaZ2L7R_0nZKb<;OhI{Tr z75tyu%RUm*TXXzq<}mb~!(nn93WG#tm<W+I$-P*-O*W@~@qy9`j$6};F5Jsr>m zMv?JCg8>6sZxH}%F%o3+wD#J8(&^6C``;A=N;^*FFYckPyNaEV&7 zj>P}k;`MU1lRM>`6?+qGGR#CDkEQjEI_Aaxac>pYJ$Jl)!>Pvj<1V?ULH=}C6D-Kh zCl>4)7iP^YUgdliRT*vs#ICB>KaPsqw1_PsL=EA_c2e~HH44kSVca6;;A5N=9YDo{ zniVkZz&2#m*LWnpm8)}*Cxi@LfK%M&Z-`nry-qIb4JPY zH$8>7SfXn~{ETuX2A&Tlh&CXc6RAoTMLNy0Fb*@8`2)PEA>9ytAZjRbC2LZtM)?V( z;$7_wdct+`ZPoEAwmF!RoX@hy(ef?JSzo82L$i8YC)Tpw9mknFtBR?G(poE>Nb)cD z8652}3KSH&GF^gEpuc3;6#Aigs_~%AwP?a z0dGeFe}U=ea#Y1?eks~J&&`t1Uw~bEs|FgeOLrLhmz>937-pz5BgUWMU&pu1%r5GJ z&_BPVgA0Y4=lD3OccoOwT-ra!1y8v#5*dJbV#T94i81y5DOK8{XHsC5m%}4YiK=f_ zy-Sm{f$4wf(Az?+4A;_nJOV5gSk2@g_YS9n<(>ByaUk4h1LYTY+2#D%D;vVXHNTPn ze+an$mxM&WS^#eR2LVj~?9CegEB!N<|3d+q|0qBL;rFl7-$5PfXB<4jkc+6j1h}NR zlQ{9z;+)FL#+V*5HC%43I^m9}TR-N{`c*Q^KY_~2gG!M-+@G77>z;P(YHE3WfEpdE z;zR@ZhA7N^sxkq7yW(6NL}An-}3b1ynZb^b}gG;FFE2gL+kS#69SEl$LBNyv4%LhF@$E! zXu=ufe70$U5`m;cIRNyK1O_L#C_d=eu5fHz;J6vZ z&GJpHjr0jPqr(}?C<{;QS^pt{ASCL%+e5Gne*<;bsq~}h6-a+o6V!VQV zG40)=$Q?^uA~3()xBN#p6en12T-WbO!MEB)gD^?1CoZG?0Wxt5(-(7tSR94UUCp=i&H1;v*JbS zxEu1md+a$o+aIwP+;<*R#>e~eq_NrN-K$YXi47QzNsRo40!u;3fALlY9j_d~UgJFj z$q}HjWPn+120lXg2avb3;Zv9a6mtpVBQ^1Fxm%O9VJ}z-(#tZQLk3n-pqN{B$5M zoJ2-ZW12mu8a)Z_&?G6uBdREc+f7BtWuOt~3qxp2q$@;Yg?GH}?A~^8pX0sDZpBbC zameG58kXHefwl6rYgWj9tXZuJWqDk3k7t_6Hl_{{hv!IXO2RCF5Hfot&KYiEdH@_H z@lH3hs@xsnr|DD=gFq+s7B8tigolR{Y3NJ>;Al}~wnTLs6XI;PXATLH`@c`8>yGb2 zyLmOR@{=-G)q=HXD;LKsxccwv|3kG^LKd&p?Iza!@|vlH0B>Ah-IAr|PliMpV+(&w{}>0|NtO9QT2 zLbbY|NWW-w$ita##j1oB=4}C*1pJ!>i8v--*9AazKXd-iUPru@Nf#*N19QHfyh?hz z-EZ^J$f#7LoCUm=Q)>ptY*UrY`Owt57ggyKrV6^hk-7$=!@m^z#8cRp%DG8+356|J z#SE1xl`Dy)tyD=TR=HUQ7-Oo-Sf-MR1~uWJE-|8~V~V6P0W<|_g^Q?`vmT9_$srhz ztaLt&Z*F73)%6mb;@Q}SuYDa7E*1z8?s}Ap)iAoPJTy!JW%$edcNe1N@Q({Cwi5H| zQ~2;&nQiq_$DCqW;QGv+;qch;`&|Fjogn{ih$4*8ao64Ww!M%G?|vdZ2E^mFUH+{a z&J^Fi=&1C4t9}D|P0H}dJWElwI1S2J=p~$&`HYld3pK1bw?q*k=YsyfEvoMJ(7Xk1 z=Yj>B@T0Du`|Uek9JOtBlP$1^-EUCMruyOk!2yqSm*FRD}Oet7E&Q|R2a7`6;RGz!jtBlT%bTsv`V_&7FMY=@JZL$n8!s0 zSW!)10;cQ9N3SLukJNK=a}INakev%~Xjph+#DD&q3*r?{=azs3Gp$Up>cm*0tzmlQ znpZc5{ir^4$=AXD4;P3M?^y~qceZUST*|l*H~fwWMXe9VB5^i^RWlcsMKF99TVaV> zEshAvGn!T3`XSf=^2i8h%ok}i%CKWF7TqZ78^!g&O!BH7k@1u$rFqc`$R}jA3CSze z{8M-1j_ic8(U^9Nf7a<K1dvt>ea5?2uL&H@k^u3EHn=Yi3ch zpv;uz5Rc#tCgEhF8ymEk9%EDa^mPkVYN--!7zyRcUCn3B8?0O6yJ&8*T;+sX<7&H; zX8OLp{s#;AMH$YFPMU<`5{n>M$wE?UE1-O9_H;!$e`aQ8wmkUU+)~|Wkjx(zm^LfW z$-TZ-B;0MT{^@bQFug=N-T#`#Ti|YlU&mYTTA^OIK7?E1qAsil;m-WT_nb^!=>pTj zeV*RP-qx_{A~mg;(Jh-4D${S8@U>>f+n&VFn^iK&{j?P{*7{ev3T;nVDRx(YYeyfe z5h^^E^4UrCK)5wbp=v-E9mtwTANL3w>sEI-Ti2-Zv8~2WKN~yiA|Ez%{Lp7#Hn#Mt z;X#qENt=|!g7b-@Hv>|bLQUc$cTr6)7l z!%)EHqFN-`8f*CNOt{Q#=0It7pY<4yED#8|48BB`5t)7wpQxg0;O^B>0AYAI+dbQg(t%bq_UtVyTD>caWGgIUzGS zLQXA(r11q1c6u%47X;F8TmbR#4%IUg<{g&9~|-MHsaBz%Q|4mY0N4xn-f;EaN7h#Z`M*34k{Lv5t_ zQ1l{cXEsfAC#Kb`oDRXb?92ajNrybIlv!3OF{JOPS`}Nt?t5bIytG#sKLg|G$(Uuy@2g~E5 zHvNY1Yqu^-IKuv3%~c(C61}jB+rlr#=W`mx5uopZnEfJWv%VnDB1<@Pq#0y1J~mWJ zeN@a}L}0s8LP(>{F9C4mbvb5Cp|Ba7iqB#=Dg&mDgharI5I6?baR@TT-1|N9i0_=K%zqa3$3sd|Fb7O8!$JXP`WQoUt&5aML~ z^jhn)!vIpC0E)>Ffx-?54Y+j4ok8=(;HvXA0u;&+`BT*p+)FDjEt!rQc@o@o>&Q)Z zj4@XT$T1*d5s=IcuAwWF5gQfa8p9G*vTWt*LE_Rol6BrGe%61s7t9c^J1wjl0)ft` z+2!2C&qe<-B5-wEkyZ!ju?IsQ9zQt9=RF^o{h#HZY=KF_lnpt*xSKQEWpNuoNXq+=T14zn^nL_$%IYQu;CPc8S5O z;L~kfs`PP-sKM?qlsd@aN2Z_0;c6?#gqD5Ca|lV$sQtny#)}~aJxGDQmN3?d*LJOd zdKZH5nyw`D=RZjG0M6+wW1_@~N{J(=7Q7IujnX(slN|ILERr1AB?)65k2>@L-*XY- zw1Etq!GW#cshbuj#WPwq4qBYn5f~Yg)Y>eBMCsk`q@ZiuhhT_^D>J(jXuJL8ybi#b zZJ3j^qv0zzxoI=0?q;d3FJ5IcCPf#adtG;6*BHqGAn4CD_>p|uTnf_gdCoOYba7)- z@aFuL`%=^ficE&m5CUcEF(cI@03sh4$5BLV)nI&wd>s43is5xWpKFj=8ll~*oH_<6En z)j`9UQRs>oWJI5EMcjIk3*K3w)DYbaOoS&EaCd3O;j#v~eTAxVt)c|z0k?$)CrLXd z_AK*Y&u@!&2UYxg{`3Mf1}9}2C7YY?!8(6mIQSpRe4ZWO%MRSO3rvvpIAGm*vV?b%kyAM!vGxi|va)=y+^ z0UiKt$92we0I^rYT~+FiH1W?!5#Q#%iI)b~iNb&1H~Vv4#g^TAC;vTG?3tG^?D$y7 zBAfo+^!>uYCyrq(EiVLAt5s>SeVE6Kmm~NZ;veat1558&r1a;`g}J_U1}T?H+u`Num`lcR!3{y^)!XkB7~K3gxoMDpr$Sn5lwY5R_H2){i~a z$rk3z`LdW973G|2GS0Vk}z3P1)E#|%JtNkY)Q+3A+%xS=ox z%#jgAUo>79g@wt=+q2J&+6E&CL(SUYT6fe2VuYX5-R1KrWTD-pSQFhMmm+}_cIM5c z%&F1|AOOA)6g%!$`r>C%>rifuF8%|rkLZPH)S3JNIVptHi;>Pb0dGz2WB_E63Y;gx z5=gd=oN&nXl+`UkRj8F zkKTs))!cs70cG1>gVv%Gc4gdOn;kiTq@!v;UV7Juw)Nt{$)4L!<47A{fYt~c!2_2~ zqL(`uf4Q)-JNTJl+D#A-_>V49bv-2PtzJ%&U)!Um)4yM$ZE~Om>mNEFLWu1y$7E3P z0W~xvQNx`LO>;(>FVNyMXvTIod=$?z0=zahKG5(Z6Qe1?%F_nUP$*A2l*1;T*tCT! zC>?^jrlC>j|FV;u!e-gsPS`S0X{+Q+@pVpW56tT~VMpdg7;gHvL3%%$!J;$4DWaS| zG|!Ab7uMW-8h#r9s6nWGQ#i1X-|q^R#P+R?@$uCxBdJl_4o>@mB1-O3hi?t1!dc{( zpBwFCQMI)KI%=x|&Iz7~$$tsx_zAS`u})zl3_`A`Y4#>T25XRgJ!WaZmZR9P-^4Wd zhL$39t(C0iL(9Ok1x_ADNZ5poiCbvLGNO>wKYuwLd5hSQb(~!! z1?-0&g!68@ZWX$W5`(GGsgWvH2~0-O_z%QVG?BsOtbh$GUUDUHO6OykRs_f7aRb=Y z|4fqA!Hw-%Rd5XQs*z)@@1>$OyXvPku1KkW-g=pv4=#q~Ric=Cji#IXdb{|Av2vsx zRLo=(8NQr|@RIoRs8n(LyduZjtq(NQJR&xl^&guf<`Z^d<+(yFR_fn@Kfjwew*sqS%m>P3{*Sv~M`x!Z$raO_$0U zufv!ew7;Q5`tC%`lq7_1r+{lF&gUxI;qcbsR(dGbp3qZ4?35qqNyeekNSA0NC6E_^ z<>1nv(L*+f+4 zw%8)Qi|0w{1}+$uo zz_awsi)Gr}$+FlaVP+mmYlp^PY7)~Uoy`)WLTPDkZb_Ebia$(RK~Mjp?JQQ^C9T4F zU_Xw--m%zT#jXkWI!xvu?#iYjW|im&7EY`GI7oTUSwPaGY>=&S!n-NOdX-~*m4m%0 zxe_JxML}>K>=4CC0{fS?&%(^+@VOnnN(x24AAJ8Z;B$$HHW#kzC}}2^!I}!&CasAS z)R;jCt_BxQyYFdoYz?s##-n+ES{EvlBbEkk*y3Z#gX+_jVp9e7G^_@}Y~N~^Q$$J{ z6drthdX7?v)e9CjWa#3zIB?^hn03x9bQJ^jJarYT8@mOc57t7cL1{wf=~BJpDV4+m z#S!o&M?)jMono9;r&;9x8x-eo-`Hd2Cg<_;M6I+{Xfz&!5FM&zjRbaZ=Y2yU=YHzy3%%lZ zVQ@C>Jzeo+x4o$HbW1S)p!fOW!8d4S($>Gc ziY010`UW|i6>rK)`i(p0pNVJ^h)3RsqbM_dyD%vtO(e#o9B#2LWe*0zjT4#e%p2*D8#O553^6K4~C@Euqf zRgIpF#dHrufmtwqmFX14or`2}8)E%Zwf~ZFbPXSenEeo4p?*ulyJ;v_b}exiQQn`; zp9#d8jL)%?(RSNj!7lH$NwZRljmT)Qm!hGLs9FyXW$3?2dTm$vjgdw>K)T|fY7uww zE3v6W^)z>#vsj$*^4{cRZcM0vDl-b{E#eousW2@@#cSS-B84!2)eV-SxHu(Jh{<59 zodnpgd{mTEUE&O<&iXBBqPfnBNz zsbJ8iz?z6`g9C>^1cE3^vBv`XMxR^&?)qJ=3zCXae&`V;R_9ukov@(&BHJS*Z}zg) zDwN!rF`(yp)DtJxQdTt9Q~$*Vr4wq1-?fVI~FsTSXFXNsc0%5&x6Jk;RE|n8A zNQ;tm(tCY-?G4o~+L_S$Oqc88=foU?P7#q%xo_L9OSUp;9O!e3c}KiS9XrdbT+rU% zWViZg&Mi-A6Cl!$Yl*q>nJ4aE*8D9VrKTG;R8hQd>9V?K=~CN7(}kjI#{MiPbUgZ) zkbY>`M(F&b#$zg7MMjCIt~!#kUXaF?>8Y%!?!Ux-`gW9L-#ZSen;;HYw%tfEV-Su5 zg~8(nmU^ymqBM2|eWSKlTUt)j_3>Qa#-UDl)Fjg*_5zxpTeR?(PZ?-5A4zt+^{Q%( zI(o5TfGIT)=>0lD7w-rDe^$1P_+3wtKmh=G< zcZu(DPhN^uqtg~jY3g|cTS;iswY3l^qi=Rp><(I2N*#|lXwTw4uh`v?J_MSYn{hk? zgN%Q94&P^E_6_Xq-N6m)tK!K9R{0(&_mIaGm(TEbcHMh+430)f*>eSqIFEn|Otlo? zh4VW^nD7L`lN7m3Wkid^dex=KOQg8Y5G(pe?tkz}A|gH3*eAjg{jMR!KHplHO%N@x zh5ARQiVzWY!8wZ!a`l_1w7)3CkclXs4*OKO#Y@<^VTed!m+(GbP3DgFgAIcJgam1W z6zOmRl`R_8?k$zoqVO2lSs^XWyYR9D2@+F{EKyGvG&dpMN?*hG9vUtX6ygm9ii1i} zi6MT-k+hQp;C)QpL)Q!7kCoW6ZO94Zs{_gKL(GtR$P{qu@BrK%o?Xe&;fL}F%qlTo z^MUxlm6h(z%V*%s)O~}1z%I z!_OA;eI?jbpzL`j!GpvLqaIhzt1RN2>nisT7_K704ChrI-)cIi9$4~gW>UG!U7Tl> z0WuuuUHzLA0jW4#dW$jcu?6P&$c0J9W zcoiZv3#`V{)uh=?UtY9fi-xX^g*cft3)FS6l>s5<^+)cYL1^+SYNqdi8ritQIS6B; zOV?)KF4>%N)2yuRc?a?lHl+!YNJos1Yrr!+#$wi;Vcc!Nc)>)q+4&qiRSNRKmI;tpHM5aS+6JG0BO1%4gz1v_@t50?6a+*qWpk37z9X`i@#W& zrU-CZhG7E6ksdqZ3frrQWu!5;7D)6+P#~%0*`NT!OY7)YN+qP}nwr!rWZQHi3J~v__X6C71y7M73f5DE(+}~bH+qByz=eHe7 zRW6%|ZY)X`J3>M|$Y1tOwxp4lr-d4B$1px^n30T-#k~3QG!2$tLcO&}SL)HycYzH` z{haxcVP4%pVKG9SS3s31yl&d>fhdUsmBC4T8*d|ttctK379is8Upe>e(&yTS+4Yul&1+3soRVUgIoNTYP64^wN6ZV$O-L{BkLbiluA8H(pQb-K>!@{m zQysOmRxJKcZv<>bXLyB1&(}7=IwiSkk+aK5Ngq?SDGR%Ve#Q`QE$l&^#M|0a6KX*n zfVCN@meyCL6_EAZ%HTG^F0Vn;-~^`$h#E1%>9G0WBhZpvjL|(hEpXdYvpJag3f|)O zSoeI3aNZGfgE*44OBBu4DRz|hm|@wYi|h^P%?O%jy#&=OEug2`OuxJN5Z!qkW6>1$ zTDiFSwVfp2aH3BKTJM=X zWU|Rsu}8bxo6_7)l(5>54Gpp=dPD2A^Trp;W9U^0Vf1=Pw^Yjs*f>LM&wsv!pZXFo z9x{SfF+YyCamW=}XFvO=i!*T_t|*Ya!M3E3a14w3$N{WK*PKiB8td_(V2C|G^EnK0 zEzQVW?rZRnKYl$U@LbS#^Ea31F>qN&B0x)tdc57N3!2g2k9T)^BRlkth%<&iw=D45 zGp5+BxdB;!6Vm%p=^|T#3Azb@+Qc3+#r6|9?zWM*189WoU~^AH1^Tvwy~I;FVXl|A z9NrB|At1zA?gbI>f+3}{;qgfTG)G+qUE&eoSDi7hBhE9aL0{Id1^+^$(haoS_9OL^ zaBE+1gM2$sM52+^?FTSDF8(R`I7!3CJ8@P2-FWL5_Z$+Uya>Ai53e9M3Q^2vhtt{5 zSCOp)OJhh!C$eSwdFV&O%PK08HQV6za&s2hUlq{EDOs%#D$BmeHH#;zqwy9{v6gPHeM%1__$i^p^lA_Igt4$1?AXstlnQ{Cfz-GlGR z+a*0`I9EoBPG23nvdxI?r@bM*@%#lo<% zwCaTX6LMSDV?JxbCQCf#WGB*?F9Bx@c(oXFSm$B=pvaI`IiBjxahL!F?UX=q@<193V*SBT5{*oz7+_-Z zPi1nnq*jO`GZBp`N|=>c-qWd{`?0T|j>58Dd%6}H~@ zoe2(b5FQUerGMx0H}?B8jleW4bX1M|&fcXSlHabe=q)(;___#>d?M|zPeTAoJac8F z$QRMAouB?;4w`=XD4A;QUdRT4=Xq}wcm&MJ6|YvK&!lm269MdpryBl7J3-q<0 z@T?FQJojjo4<4=QTVlwitd8uIpd5P_yogJY0ZiK@oNh~>(UGJA`=a>IJ#+r7BM$HCSqe%3bDyUi+rxz45+ox(4I&z2E-P2+yPrrWK@t;pY_Z8)p9$CN_& z_3<8@+r^=;*e88EEMrvGDG6cZ&92Fkm5@{xsK|dEj`=l4)EUOej_^J$saj62u1;>7SkO2fNwmEvgiELRO&fzJ-%dX`sj|LPYt*y`3G2p0 z(Tj0didZ~StHZ^&&qC+fOUI(E*8;7_s}$^~4++*h{=PLTsvLeo0Wd%-67e?F-R>I)0xEUu(Eh^x#*47;jT8tf^0dF6mDus?Y{PTx(D^M#e1@O1(s+ zh7fk8{fX6Zsx!^%R8#i)DfO~r9zRP@^;vKuPUb1y zGQ_p!G5I>;u=j#Kl6|FHmZAGKTarpueGx${P=SKDe0Wvc+B&3c_oMq&Gm*~~=<(PM8y=~h$VurKatg~4c z4Pk{$iY;O-0%4;{IPxjD?T>Du&ZpQasDP!sYlWb28DgrcgLt^}<4#s%pB<8;)l<<9 zXkfF|SCpen%#IUWqvmhd%3^G&QsucXC~c{L3R<#4vFuFJ4AoXv9~Qw5HCUji%GZ)* zUs_*+MD~}(6BWviAjF@3o*+A1gXW$W*?WYVWtUvaBeG9!;&-$$5^IeP-9N8TDU3&tWEdl$7r82A>e=)7l z=XLvfxVz8XU@YB1x_VnSFe$LelL*wv4~MDohOKynbsdzqfbtf1r0VJ|+9+3ZH!T|5 z75>Co>V**gnbh@|(W!f&Ns?E5+8~V7F&@H^;{@gDi9|ljS_q@uR`3*&x0e~eswpP( zK3C%5WM1OR+R;t0Bu66CN=xfA#sRgI*q+b&s5pDBJw4T;9krVCIdLwr8=B-GJcMFAjZWNn)==otE zh4~tbsBNiT{3++T!eOGkTO0t|wRy*%obx;%!fSQv@ZRM!P1C>O_>thpnbbq){MmTX> zGuFY-sbh~oJj?yS9#}qhCZ~?H<#A>jbyw`S!#hm`rEt)sgQ7S-jDFG!jt?T4hR%SQ zTsSn=o0P>J%uMmZL4ynW`5>_E`nOLL}wo&O4F-!ci$oCJZ|Dn1oJca7R0DnF^{pOgm zbsE89E4LIC%B)eWt!}iHrN0*Ec_;KJU*v^{PC#92q(b>Xj5Pts^DyskJ13xoI+-U+ z>^4x@Tsqt~D*tk`Si}A0U)R)lnc1PS-^@n9gP9?UF$LVKWUFmZyxa=G?OV1+>2rtQ znm}MP65H)FsVU}qBW`hKvR+l{%Osro$GMIJGrGx^KSEK1pGLd4t3Shaggo9snb;^T z_{m{5)L%w-Fz2ImD>QXrgA|tMI%FRwU7M*Wk&T{dGP9?Ur-a-A^>c}=Wt?aorbKPL znVLnfR=7n9BX42x5Du5YIOH*pAgzLLtAMu9HB#7hS@8%NWy!C25=nnImDVl0W)F<8 z!v?T7Ou6Z_`^B8fF=1~i&Ghw(70G$6R2J(_!V$BchDS0E;ZTL#M^%VPE2M${@KQ+W zQ^%=N&_msNC8@o~ai9P6qT`Z0@!D8|N27u7oBQ|}57xW{%-M>CAw78+DM+F=aSj*@ zwg|2`*-#AD!27e@ZCjnknmIXnjuB8}W-$X6lN-e~!jGgqIi!#tE_=>T9v*$BFow~1 z!i9;7HIJRDGWa##JFVS+#(V5opuw8{?Q8rlZm$-3ORI5L-;w0?K1Wf&+C{3M= zZT>xu|JjN*TT^$r7JvO^%sL!bU1{27xNLJO1SMLLMrXt&w{p0+utf{4cO;8biw(`} zJpDco_Cx?c^gJ~z&c}_dk=RcGxb3h3cKu$rSM>;GQFJ#A#l6xaDTnGjN!>-rT1EW zIX#cxq{zOUmpCn2);8e_PG#>m=eyAe1P2IVcs-HPexOd_WzP!F7w~{9A%+1nxq6&V z3*T`0;7yzM`X6t}sqY6jxtQo)==1d>Id^i2#)YZM}Hrm)%fS_YWWnvdSLJE571}1avdysYV_|Zo^Ec8meBF?S0o-eFk^Sz z59#gAZrI^~cd;JhHgl&DEU*gZVz%yzxDxnq_J7IKM}iOUZ`FIW`5ej2&*kp84Qxc6{b&~Htz91a71d~rN~E&UX@e7w2$nKpcew?kP; zJk3M$oDN#Yyn{&654EK$%fH^2g+wLPJ$f*QJCj@a*mIul%8QS6G<%`}clvGPt*@xG z@zn1&ht;txuc&+adT%ry0y{sfT|Re^b)Q5Cu5R@&^x)!I66yRJoguW>07%3Dzpqv=%xm*UR7ge?eP zhv(d!<-??w0!ld@s%wH#*Tficu;_Dav!~+0sQa${J7Cp)x7brp!Ki21VvosyQ}a~& z3NJ`x++YvwIbvt$2=DNZ0W8NE+OQ2q8-o7W3VTuuso?;}$N=-Xa_3oal5Fn3r!R0g zSzk}2^Wj?*^Fnf*#_~Cc^GA*6xFcr30>xJ-X-q~YgS=YB!jfuXSqaVW zvtoU?Wm@u0<&@t(kY;~^Lfj(&4?lvs%4MEm=X@D@FB{gKNm&!sc)5LnW3(BUmvaT! zXa~#aTPLx_{KRW&b^5rNXr*0WUf!f|j*JEc={<11)QN2i)Y-UTaTIZS_G1E5$>cO> zfh_4!8+}g8lo2a$bpRanm5jrEWnAx<^H74SUnm3o*lc?0WbU-hyun)+?1Cf}deqn2 zRHjdM&kre@9Iwd?SIk4Nm&nDTBF=M&tk*mxsRYG@Iwzd3GDLp{!+{ zqjdU(Am44=IE(36IWv*}Zrj(rgpECqs&5%4?o;wJHLLb9cEJyyu0=gO%xKPA1XF7k=Aw&3>#3yHkK)Exi9u77sdcU#H9rY^mv=z+;uYV z&jdKC1c-K7@0}qMLHaTb8# zbGjwkdwD|HsiryeG8&97Ot?Ye(ooTgM&9c8q!v2Fcri9F;UgJ{V{FN_SuK^nYNehZ z!o(A{z8rEY9Uq}<1nLFj`{R;=liop|!hDL_h@7t|NQO~PiXPtE&}pLdblMcrG3VX~ zx3j37>(^fhsqqO!X;R6>m@q~HjVT*em<|3Fm-Gd25jG;7c$R%UQk`)SS~3a6xcUzd z09nuVA_Y`8#M(^GR>EwU7?QrGL;ewd;)zK?LXtGGRHBDqMO9vFF$w!B4+vJ0@oV-v zOw!`;Qh6a9m_GJYz>)>}6ospLsNvVs$H_JX=p=fw5AU`SP!-TL%6t1&xO^ppXU5p2 zzbux{*07-u3L;IsKx~5zXd|;uP*K+?a!j^=WjqYf+9nivhNNUcA=A(l3X&_-Vad7G zGn4rHr3%fSN9m!FQgnvoQ2MLS5ee>PsXIlwF$Aeg(!}*b2{cVhRhcPU&SpwdhxOe% z$F^yQkS=YT$s~nJtbx;dttsXQ7*j)<6l>wCPHn&!tAIk+C`Mk(^i^1LKnPNTgMknUJ>3Lsa7}*QLFCTXNSs{F{af!6MwSd9;oQg2&0me-o4{-W= z0a!rdADnPHO$6g7kaaM8481x4V?KD}nKa5N0u;wO0$Ypfk^HlANCg;6UN%snDkq}8 z>4+$DG0L8}J$@2zS`5H*lv;!@>lNE-jC**%uF#wm{08Vx|e6RN3|IY}3> zD2#h;G@*yhimzh|zU-n?K4Z>3q*r`Hb*Y7f;U$!;h;V64?*7TDq$DzUbeGJW-=jR< zGV-bvmDjHp&7_pY3k%7{M#v2)&_9(8!SJJ3L^U&lV$_nKJ%eAglrD;(O9Zp0*o=P9 z{;$m-!kEAd5ZvFbx4%jCJFmd6wj6^iD#>g9ui={wIsoUn#g4^AXoe|QO=BQ);7k2iy2!6deEG~Q(GQibeMm}`z{pwj_?ye{+QJ=SChcQG{g(` zi8A5C{GgtcJrh3~jc6MB%IEIHN2yC)hW-nrf-2OQ`&38CGI6bll)21X=s0)aiIj!> zgp{t#xo*Qmf_A|k3%G`yn(AB;b7X4;zbogq7a$Rv*w;+D_&5Ti1_gj}H?s9~93NQ) zJ|pRN2d9Ph?2~k1`;h&OC@jMAY^%IEbN}b!Y;kO*Au-bg^rGArZF)?tUO3xL-*I8l z1k%zGIG9u6Q6-QeaWqus*q*CIFZnV#5XhY?-?FxP0l!)3r@q0CQJA(1rqI} z&*x-b++fVnwr){hCkN?9N#q)_p-odPdb zlLzFcm>N(vq0J%fJjVK6vF5nU>=x9F-fIf%`oHKyu6H&$Vl?{7wJOEWp8(?lF^g#*Ncst{w_2dX_i>#0g zwsn8B#cyS&NQXyy`*Tzi*j!>_!(LCUWK^yoKLp*DYR(LuhGBScAO$STpOTdO(3q5? zT9>Y@x6W=$QbYT_RO$|0%C3PzZj!^)rlJ_f$TiyQ(mBmxY}KkIQ19?r!@t`Bt5$Eb z7MrF%_vV=1|JPoDN$93gb^vDKVj4`R(`GGW!-M*i8#O&@;pd1|Mx>|hz1UUo8AZw~ zkK{=J^@y783Azn{>tm#<{I_?2jaKn0LU;GA@@sO=<)@wp#ltO@Ps)aAVTJSJ_+u*e z+0mz4TaRw_cGQt)SxTsCuz3^1^RL^!u;KO}Vl6j0exaPi>5+(_Dhu(sINuaOO_vPm zLX%07mOa@X?5@(`(KdOnEy$aRR7i7KQ^BWPWdw-EtF$27&la95J?%D+-QW$Jn)z<; z7=@p~PrMc&IUIMRa?_e76kkB+zFw<1r`QPQB` zA_`bC_BuyBhn97OR~3%e*mv0 zm<0@hQL*OMl*@-POpjsWldW^Zjh$9#VW;=Royn5Of#%fHrseyM>pMyQ0lBpV#X<`i}cg>LCbN#EHFq;EtXB&SUa^?JGV#KolmXQb)^!59Q=O) zM3uz`QrpNG*^nx#977ZSN&Ti4D`6a1pex|qq_V^+*E?@+iv(U{Odpsz+e~^oded5T z=Nx$sOW-VcK2@;gVYl2d8W(MZe5o_oBcgL>r;}MibT79wPi^H+89~7vz>fv@ux8Tw zqO-q;Ua-y~jJM($n}kva?d8sgx|4)c`enCSn+$6L1MuqKff(!h6ULV6-@$#!GA~6q&t4>Jj+@ z0somI{nbhXSr;wgEy=Mes0;Ch=Lz9%>ZN0}EA5p(>c^QA>G88k`jv|6I-(!i*%E=B z6|2dM)7QZLftz1=Jpg_Xu&k&p@f1_EsnDhn_Q*&)E@1|&tNdU#C5c0M`0@EW@C zUcpwfl%;qfL-AaiOlPSi`PoWz6IeVv*hpK_LGLFg*&&UNzXoEc+Ri8t!E%YfTqR|z zT|9=d)4W2{$rOqU?72~?oaVh*;I6g>Lo{n}BIVNj*=`o<&HZg_>fucCkyR@;lODwA zWj7?6By-(E(1r{g_cWm$P2IZRY?m^bkaFsgMu28J$1ue>vM`pzagMqNe7vz#{mpHN z%GOvUra>D}13I;Qkn*h^xd`1%EC57lsr@P0Qm6c%t@*SkG1(vpGk0l2QC1nwWU#QM zYe;oZ*ZO`BTBzD~gNj3@!cGaqj*+0P>n036_FyoCuDjEV*tIk=|C7=^{zcRb^ywsr z%*D2LX1b)n&LjxZzOK0_kKSpZRhiG&KEZ;Eug;U{Ls*@dSh>=_Iz|F2v3Vn~CvIQ3 zwi!DVl-&8t{K_*Qdyf0An;k*`0Ux+hOI0vfc-_A)+X&UzA(Na zXLC{`F};z@Yt7|A&q;9sKp^RAmZ?(5d=ZYkaLyRQKRgvxu5qmIYpDOIq6KSXq&)s(HUzh@rY% z%dcU1sjIFYhY0Za13+q016P$epHkwA;8zlIiGEl5=w!OWtQThrB@RHH=H2SJhX0`P47xk29+>>F2 zhe#Tc%3J%Me1WNbEIz0W!#gXGSz$oanaqv0WMH_r1SB}26-*)a9iR~1vPGCz}xZ33Wt?4uw?6sB=gXuL1`TA>uRbGu|{urkTPgumd z#T~@;{tj$u%&dmG3!z?zL9iQ81-}>bnVxnyp*U+eu*0gzg)S^nxhaPHIEo5z}~qA@|I1VjjK&ln^_Z+Qp~4eYG{PGfFtX?DXR@sn=lttoFBF(3~%SeGL<)$iS)BqL}&BTCuxzw(2;{#8IL~LR~Fc%g- z$uao+X2(zCl%eH*cgk^XO)*q3jm3_3+(Mefi51yd62?EJ430!l8oxi$;*%itjmnR% zl?d#MFrrh8 zhA+1D-?$rhNHTk3g9yp$BMp!W+|p#ob>Muo0SL#ZYcOHY5}RXMG}>9buv%bSvm?W~ z`iX;n6I_14Gf;CmV!5m%A19-C9RWYK&P6Nus!W_S#gz+`AU1TIvwy*Xsg}zH!QAy5 za|( zHDGHcRk~#)AsMV*p5;5u=k9bm^l?g&H*Zwef>(^4OEuP)(cQ^c49jM0bhVOD)lW{k zTLbmPKw7I>D2wBV?2(D{t>UX( z4~A}Ow(H=bWLvSZPUW(Lry0pi!u<9X`dZ<=W`ZmX&`O>SMVPj=>a(hSHg|nJKb6W? zr28A%PpxHOFmWy*SYu_j;!(1d8Z}E~UK{eEtzb?oI4}<4L|82-6h#YswKk|DCo;tatG!_8+5s2?^5vK5FWI<$MQO4NC8O<|Lu6?=W0 zmM2^L5R>;gTy8fX4G3^+r9l{3SkB5dhpT$up%I^ZLp#{N9zE-LoHiG7e=b`2;pV9j zY21XO=-8NYo?>{}6OI839Oq;Z9viaTYQ-0G|KNXFf~+a6(|$ z?#3Zu_Y>q<0Q(S6LIRycz+zi6XF#9u`pJYKC6#VUb(aPS!}5&s5{D5P``#^SQ@?v8 z)AqyeORyP&^8|3Yh!%JT=;QVb$5LVMoHn9fMXpBJ`z1uFoaZ$ru)tr}kl@~56KELXr$6gfk%BEo|E>j(`a z(SUqOAt{W=2a52@np>dU8*v?xz=2?oBl%}V%!xb$V?z)xdMk^ulN&6;o$xB%9?Ah* zzcd^*fDdq5)Z7Mw5k5TdWBQpakpMvMN^c8i0v?OZajhJO@jHD=R2e+L1tC4OC#QH@ z{FEwkKq^aP!a{jej@XsfO}6aNFAzAF*S$vwI}+w+(uhyG`n%H0DCbyxCi$DrpDlhL z1L}e@(97k~*WR>sB87q|U;5vCZ}E!_cvGzJST2TmM!Kp|d=09eJzjw!m~%1~ccBi6 zuoyQqrzVSFH7;Q(wmuCxmuLS?k=#RGN!q03U@Bv)k4?=L7B`_M)K+mni^}EwL4M#l z@eY9D4Zq-$g9YkKGp*L4&T@i{bvl__AI}B&2%LX}kM*U?=W!)>a*TihVPKJWN!$P( zbEUxy!2!b{FO#fj^kbSye!=oO>#sfvvlcT5B>n!O38jGKy0vYhCFF?+N|Z zo;0uZh!K3i?HGh)gBG&5InJUN*K1^+iwOA@3*Pt0wF|Emun`-(?V7+^G6!eexk%AM zw4SOPeZ)HuNm0`{ds7hT>SCCc_@yF9;l^meR?*LZTEvSj z-JH!$Z`<38>#-Z17CJ?5&@1#NlZ2d-YyZT9A)Ml4=mM0IOG&_SsfCmxLM|4yO25xm zr%*-6cE@I|?>40Cg*l!^aWAwEg`w1_$WZ}*4Ax(he#Z45V~KFOiAgKP(KXf;H zR;I=#=|8TqVA}?6%}tBs0okF#8Q3Un#nEbh?EJeELI7D3;v$Vf1n|LdgV=YOU{jin zRGPw3dX;3$jy0*6jStT|j;hfQ$u7^CF1!8@47$SN=FJ#LSnAU^eRDjI?c5&Tmb%0? z=zkS4S5+}kiW)ZQ!ZAvKtYN^UAG*52#g7#1!mqhVpG=}yliMy$s>u}+ITl4?zR z_dGn8G54))X!P)5tcjP;qNwXEXcd=#RB~SqR@ZhV+g8&s`=@^0QBt|+uW72<)fF6X zSb~;VdUQ^bB3F6&L$^W?3Iw)!G9k4#xf$pT>e#ZB$n5j9Jv+|P`Y{~q74Nw~*RWLQ zKGo;2IbSQA5So+GW4ViDvm@>%K&RWM@-&W{6AaS~P61keof@f%_lx{kl%;IDI?=8= z!=*U$pBCcTdDn18g0|D7EB}@Ca!6uw=bAv<9$F0-JwHbjE@yTi5@5q%Q6^ZK^OgNA z*Xq~Y>AIQ(wE;Wp zEM!U?f(zV2lcXmu3rmlSdRQ4d`J5;!7?ItRSo;+LVIOmlc)nU=;Du{XBesD!q;<+4 zh!obSN3~OM9OD{`^tRTagI@v5>V zEf0>WM9!K@RjP~>+PHQVIHp+=8-=PHRnZ?u%T94Y*V1t*so@Jkg?hk3>PYS#a1^9P zwds@-h+y4uRg47}#^MennLPXY?kn@0uPI4iRrw|C_GK(_HT{%<++OfR z-^{Merz7lSuXF5VPk}1c)lQYw5HY#CX&j6a2&kCnbp$SUtUwGx_B^R|osoh9uw?GR z2zz0sNFktMPfQzfoJQqm^{~W0`h|H)+};-5P=5AZd{~`Ink2s z#|oIC*$SzV^dA)^5_XmSBNyp-I|BugDTat{2DjH=%*)sio9eD+MQMb>ky<}Cbqu}jCNy4im8aeo@AjSJ7g9%WI0&mB7 zcpB^bCJdN+R1Ub054zLNHe9MtuQv*tzhlp?G} zGo&rm9JZqW$_PtQc`ebHIjSv}C{u=mNsKXjFe2jq>}bc>od^Kz0?s%zJwXeWN9rbI zIQbanMcJ06-Mvvsv8yoA^YVxFipse5kN5nIQ2&6C#dET%d}*W8cDKIz#6?AOsiJJL zcsqJV6pj_lq;g)*qQSVC%9AjqX`*}T!=4*?`BfD^v&{px6P(J zO~vwlwq(S#)oe^`eG1P29lu+u4)bpkbisYWI@Zru``uoFcfFq9^Zx^j{!a*n3pmdR z{vRlMaq54A|72tEe2^Hs{mk8Ns)iCErDgw?-s0lp!*CQ`?_C#~+y_DU&TExDj{BWN z({$C&#q;;Kcl$jT^v}|+Nt?rg2U?KQt#PML7&IUB;aC>vPiXH0gSg_?#i;G+E~n1V z@xm;G!dfMzc6=o#!jbX0c{&1&{vet zjcc2434X}#>oneYb*uL}=-civ>0jYsKb%v7{wQ^4-;4B+s2OgE)(1!ZTpHAY%+II} z$s_>e;$17}!xEi!eQWyNe4d98_&{sDjSZjk3s^(*lwIp2Pcl8j6?yM>Gqe+dL-))( zI)mxE*Q!+f`p9&^!s7i!xTyE0L3}xH0Bgo=(~6!>EiZP8vV}4TCa%C=SZ3##{&q)d zqjH}LIvjj@`=eY@xAv@V6tX1J-;9uebT4=33Wj4}a%GQxNOdb}Hg@Rm;@=n#Bf}9h zP*E;jZy5DLCz&u{k4a5#+g13GZEZ>Tu#Nqu>x{j*!2UM@Y+c+QZoJl)L11R3V&k$7cA%a~;-*oZ%Avhnp zvGilZi=6zC4oL6Wf=!XWOu#2SEoic?SR>rn+A_n}KIVu4q8EFHa~9pxsL>N-gP5U- zdLB|ILFS+rfbCM>6e6LMB@o;zebPexVBsSD&%UV@kO1~seZlC#4I0;KzCqgek$SZk zANcl)o@x^j&eD0@FZYb7b%XjmG9PEKNldC}JerGubBA+(8Q{{$?^f5$(Ij;J zZ~wJ$Af6CzyF&2#e=k`CKnAW*GeFhAvn*iH#A_ugFc^Py(ziV)^^b2?GG6EPZuwc7 zk+faD=<F|`C0fL?2Gogx@4_o3OUhV1cZM-xTO?aRQ_Qgjmk>YVw&e{h z4}yF`YeU5h5dR!A6UC9 z*)MT}r7O;-bfw5r_u7^)Bx36(n>3cJBLa_8pe2H@qaKDE3Uuf zLio<_X5*bgPU>eDPkzQoO8_7-ymb=1l-Wb9tdBK3B19y44mSW0>6~Vfhr1(dnIaB5 z!?=RPIpsnDI|+^&*Pl9U(%`pE0`f($YqhFpD86}TVI;W2qPaqIg8WUrfSuJg3;0Yw0B z15AInwg=KW5&AO)h@cNLyDWG|9nN=zQm*w!!*XqwT5Fwf^aWK7YaJRU>Rx&;Utciq zpAaBOw;u!$i>$ezK&U+`7+9{JD>JHiG3PCE%`2c;urU9Ngc9+*KXEI7qFo(4|3|2R zSR8m?O}r*`(drzb_rqf?ffX#%s2dMQQ6cYeU4=h%o@)`LWi;iKezKWi8ne)MM{g8D zWM*qTE1vz6@B#m-pODt*cKQoMwV_dh_A5_-jUMpC?705@fs|QLIaHcrKkBb2{|qs| zI=!V(t9>7sl2l*wvI0O6C@PXCJ3Ekchp=P}p#)&gSx^Ir>N|+`yZ<_Y`*3HB1@$|8 zIFNV1jB@?erm5i07ov@;_MeAVP@VLV1vzO|Xo-m8=%OriQ6K)E2xcK;vpK+3cww}` z)g|Wj0W{Hu;AvBvD0u#soIR;fSDC;pdJ()807~n9K@GWW0)6G?aj{^TBBZlVwsJ)$ zOHDj^By7u*`g#VKBM~~t1mvr7;+>E-Jk$FE z`mdJpgiy3Q=JY=q`f~dm_TTjeGzzAe-}_BeCM}YYNz+2c2EHyh>-qqq906AG)@l|b z=YxVfByK#?7-a{62#(8_h|T zxCFc|;P*4}a}ZL<#JORA9m>sfox2D&%*_!HBHaM!QoOT>@Yxh^66q&_z$S$(!Vp>D zP~uJ1LlRbexK3O4pB564AE{u(w@vo41LRX0DoMxsW;1Erjs)(hF)mlAJN6|U-_Q@u z*0e|0Z4A)fO(Yde=lTfezO1oOd1s=1GrTCBU^-%#@5OP=-ih8jy~bIU6F%FEgVwr z)F*)5Z|7{~G|dqJG1s2F=GAA`Lh^pH2Ml!+E&)Ar&t|;RWn^i~iuOUek~ucL()F^X ze;2K;`AvE*rkh-&vKK!4jd`)6!*=L$zdo%+{eJECapNzG@?mAn%h2vbupChT-kZ~> z{oFGvdLH77@Y4_VC+3$v8cge@}ry6m3KA0A!-U)M>GDX94+rB)yhi z2QFAalw5*6RuZJ^&O)BJAk+7n(_wGF#;%P*zGhke-5%}pQG#uIMgP02I_RTYs`z3vovS*`1+>R##kU=0N1DM zPH9l2F-X@tw+NSO6{PoD&m8oj&Z~A2a0f`=IO1z$dVIqPOPq8cj202Ku}j~|T=Umb z5|sm3k_+U9XLN20wUjLc9yG4xwo5r{6NYs6+7N3C`sTJLddZZ9-Nb6%n8?TRMk9;P z9ZDwlTh-cramR{Gj^vb=G48T75!KWm#Jn9q4I}jCodU@?A$YYJV`(Jr$dANE?qxfw%+ff2WIs2VETO7L|R{_LMk zsO-RCHL)*a!(tz~-xWlqxxzdOCpF{RZQZc1-mL#^vS}4KufU6DYba50K-f0#a`R+M z<~>)DdaTi759+FCR)`0FK&bF44L6Dx-)hW5c;+vf9gdF$F>U|mE@!6syyO`VBqRT5 zC&;V>Ou8eCIUXy%CdD*oUVuFKDo`Jfm1Z&x?)**#0 z){NZD?5Wz|_}fLb34nF4NF(x)5)JVf7!tLNBh#Jd=in_E^6jP3?JZ4-R*4RG*HXUH zLp-GHRmvE>B%t^08kZ;4mn&Pj6ov-(v6q&1);K4ttfD?sk+9~xy!DnD!e7Q$z-dbykiNYBB zK#G|?UAds7Iniu|aB~pc2oY2KHu6TEAJm)0A^M`}DPZPM}t}@~C^kKZ` zzpEWod}DIt`3gLkXEnelipP@&|AIv{JTP9?& z5&pC^SpH}{%c7&_Q=c(Ac`ixzaVhi3K;B{imAz#P+Lb~&8+2n1rnR$`Mcl6ozUWN_ z3mZT_DqaeS!cCTLiXeqFl$^rJjukft-wmC)1^8C-Yv?u(dtdG45NHMdOW+r71leT( zYzT1iO|(`waIlEGq_^_g_Ck8M-emh?S1a6hf;D`3lazUA31FnR3=|sNjJf5fL|`?D zWT=RsSz2*{towGHB6}c-@c@AZ7CI!{$*V+;-j;_p z(T&ryNWzXN9X)9#Mv5RUV17B{WICGFrmKyfHY0?}kZeRSfx!kd}%iQ~GmeN+XDSo;CS@*+-Q*9ChwJFeV%f77~#Kh~JJKjJZkzR;h) z_y78hf|lZE_jI$6_!A<^a~?t|5MG8Qp^P)L47vANE&Xa@ni6acD@w5|_nsXrKfBlg zE*|DUG=gAhy_=HlJ(DoTQ_Y!UGn!qHd;`_du(H~c5B4rhT&c?3(TdIiIVi!q)gaut z=+AXbX4Jqlr}62nG<}<{tBe?OgJz0aP3{k^^KJLW&-b=91g_FX)A_b8_}_<-h8f;x zWnBB(^TbW2G8c?;TUeQCnp4wVXjA#&{3UyX8Yd2cV_`H4QzG^~fV9(bi?tY5m2Guu z={z9TpA@t*(1k=O#EokOBmVIX#wD8UTXJnz@%ySZgq)jqjuFK z8`XxP8!|P`7a`(t2U%4uJ$KIN2~|TVl_7d}R$UG3D2b!%f0PIOCrCy0JuKtcA)-+0>CsfcfhXW-h5D;2jOqW;F`uo; zBX$;IASNRm7jwH-}8X`Jd z%O~c5(TE^#?Ln(m&pyC>*Xs|DYGv%I)w+cuQfmh@A!1!3k&&z^YGBN5&QCS*;mseL zsYcF;lgs=~P^>)iX(mn^-LOiTwEB&P%ys{omGe+@XasbzQ{h&sl_DO|jtmOIdqex3 zdf$>&1wcRSg`R&weV${BfU^@(M8%D)Nz~9<%!`4EX()h>NFv#KD!Uim75zdQ=0Yv8 z*Sqyka<3(n1=~< zfD;axZw11rWm_i1@|bQ8&tHg2Kqp43vkOSD{-{)|c&Xyv9TA3aiyklLc-P6ekaXR&&N6zz8c`Dq`{vh|W5mDnm*s*Aot4`m z+6koA*hIp|)?j+b64c4-AH?!@yq!t2%aqFqSH4ct>#x&Nr@*re&|s2?1!j;TiME#{ z;mW7z^v;q;7y3>z@OJvyFMZcz)u-@63S_LeNnA@h1`3KhK~q~sI3p51H3#MN_qtq0 zJw*!aA=e&yAHef4oTovY7j8w`>V;~dSOt6f4&V1TBR~-7RQC4aVOZ=9+d3FHPl6R)`2z zxNf@Up00ihECLV{1mU?|o2idT!@x*XjUWE`>ucp{vCFKR+LXh8)dT21mf5rmwWeNe zX_Y#gtcEIng^Vvh?0hB0SQ10hOq5n@bvhYLz$bl-Tpm8b&dEDSekZ&z@(;5%)*P!(-8iPJ zwG@I1()1;TW*xlB8`7VxfP>Ty12$b;KuHXaTZr$HC&Z95ap8FGAD%7&>3-`EL3ekd z1vYE1KP6Tu1e~NI7Gu%DzLuJWkr89tz?zQI2ZbO-jirZ9tNO<&dZ++~Z5i|5VN!Zf zfvP{w4&xj*n27)wBAAjoZ?NiLd0H3B2(qwpG09+*GtUpoV2LGK_PmA_?u+G9Z~|h+ zvzmUtSWeYXE$??h2!rc0sBD+fwW>>|ve1+oN1Xs!7KL6_8BG~~(qp$~?!tV@c;UZo z?ec~#%7a)4NwtZ8r$o|j2&dA=A6>Fs?{d7EYU3*h&zD!B(39ZGL<-I!a=YG7GSzmQ ztPOVpfI&9*7WxnMDUi>yNL%C$O5Go1L(hwVB0I4Or4DQObV?7fplsabyA~Z31a5{f zy{fUa`R0f>g=Y0v02nBKBjOwH66)78*4*j3cX%;Uh}0z8|BiL9{Hu&Wpbz17tE<0<>2&!k~W z_%5K|*&sIn(1h~X^e`pD!|JrG+kUZt&Ur;r`x9cr<+?E$_o>}>Q;-1Pj%39QQ|99u zXCP4s({_x;egn2NC3RenzTLA_9uO>23d(LW2YpV4nE^wjqMZ4?0%M+wZe<8MTL0Ek zVQ#&1fl{T_As=?C)btjNG=)5$O~k)fteU`E2n}fzO)e?? zr;dVq{God4wevb=gwi6YOSY5x7-vwjLxc=KWI(Z3ID+w?06~bxE-tVVA49&|$Q`iU zKf*#k?6QzvQ<8%T_4r^bJ}H2zzCxwFr^2`_UB*_8SV>dB>@WZV)th3}v{xB*JzQok zp}uu|!JvpGg$wCL5Cx>O1p4nAD^9NHDXwu;EDW!!Q8@#x(bQBP>RZWIO#|WIX6uu^ zEqpE;wncPnsbjl^i9X&tcEHJlIgn5vQ*A_Fhx%a#bzb2gQZ0EN2vZDyGOhY0I#=<8 z=YiT$3rklkf2)&Cg{(RBFJ4KRk)d!&I>RTnQ?OD^t+)Zs0soHG$is>h6U*Ut11Pkp zo%D8{s8y&NopNMuavhu+F7v8zl}7%2OK*X`th;PMl0^k%^~54`YF?5#K^jEhqOp=h z*DZuX#~EexExY5%=B;NTS~BFrsQrn4L#U8^G)#VNIu{Kyg)KjUh;-xu(g0qa3TX(! z14D=h{94(UVnu~um8XFMP>no7vDTGut_}kk=2c=4vsZ)jw8?&F4fz==@>tG4QamCH zeT=@ah3DO4pA7At_48s6>2I=Ko>FWt*^wc~5DTDbUUM}4PS#=`{^g3#GCnO~>>NW2 z`Vry4E~I)G*gG#gZj8AqMTnY9ZWB>}tOf51y4ARNndnN>AqoxMvjR?^7TX;HX$n+K zRfhQRhXR(?5@pD)F2?xNP>o7(Qjx2?E5uaHgIjoMO8Cdu%y#w0^UJ4nACH4Zj9pp! z%ZaLZs64l9ugXTC5Hs})fF+VJt_*G_5-{~(m)5_Q&HN_T-m}}ypL{GR{Es=)u)hN} z(`BjNSgo2)SgFZX&Fm%j;rO9>Gs`(V$!e>AoyVqzG#5w88s)wrCqj5e*9pPrU$||S z1z#lRL^YeFP!G zMWn*haNv(CM6!%!NSEiW6}AF7yv(>-xQZ(^sjs$9#C~dy546p0cztXX`<|{oj*i-< zc$nsf!qVBEoGN?ZBky(^oSQr6tp7Z4o2*N75T+0|hMzExM`XHcI4X(UJ>guga8G{< zb52gm8*={|cj%09yciK`D?<=O@s3=^Qql>RnYWw&VN{;dX!S$;j3=xkk3z_)KsI@K z-bWMW9dkvyB&T2PoU&gpT$ut&19wQ8{EqI) zFEy9jy@JA!D(~RYMceg=1-%;$20J?Rz zPFtz>PP8c^=#%(!y9aF(w-qm<_hvTL*A*i01D0F2Lzko7IwqCjRsUtH*Gwyh$jQEo zgSYo9W^7mgaDDwDT^cm4cP}Qg;(_&>)w3MTmw@;jb9YGq=|bdAgQ)q);35Hj>Z5y5 zQNha=vqBTj%Q{2t3+qIG?VlKL_-B6%woX0~XHZUB;%e()VFTm$hF5>JoAS^bHPyla!u{ zRb39*O`X0QJRU(Q0tIc^B+e1L`H_6+m$x70FnPVR<-oOeAw_FRg`^`q4(un%u!#FiolvQW@%DDV6 zDIllU>FU>ve3Q9S=iBFJl4+*Z4Ycsn!pFo{C$)!eaM&p!a9;NHC{qY$_vcM|2?JR; zI-NO5RZ~@%KBv=vN0WCH+Fb8ubB#z@_<(S9j z&+5oF>sZbQJZ50McI_vz+Pu>b%C7BGc&defa#jlHh&#f`yC(sw@7jPN=6> z-K(V(oTh-@Ar+2timo#O;#@+-$)`C=y|Y8Wv8)6kF(&a{?6m!EaQ~uLuPOWPhmMk_D9msf=J4c8{^gUTKLI!IxMzxV zFihDOg|1L&wj4Tm@MBo{IsIVzQ`gELs#6If#thXz){M0Ry0y6iHK%e&tP%54C<+Gi zc8={~q^6L7+|yWlACHxCK@}p*=6{nkSdbYhU~O4`z(&)=l7- z%hJvIDc6RsXt}Y|E#%D>Ir_H>>eb*!sA6O<0G=fG5?4T2g^|>oNE?(}oTQOlG@2F{ zh#eF?Bz7B#PwdhR5`)2nBPZ=GBjRaH#|PtEb_G{Uq?_TET);X>iU=Y>M@9Opu2{(% zPsxpFh)LXW}5qgx*9N z6LUBth^9zE(a~8xuhX7oEm5#B_;=By@=p;2YtU{(nXrVVVnjEQd53>k^@|KTA23#& z>%bbhmc9NkkqDv&d?K?_cbIIsDGd}AfgS?c`iKd>(#UxrgruoqYs~`Iysk_D;GMC+ z1-}8uURrTy6Od&e$~n?y)o-lcO?)b7ntEf9I#`2R9ag=*5-Xa zl5Xd+-Ru;iKBK&Xm&;_#O4-&$L#YKDd#XvG;3A1(Ewx?Zm2BzO&f#G|%xcI2l3TIq zu_X(#2ktMdWD3PH12ADk@&f5i$H;`1B)5u~U>nvwwhqQ6Xz96Bi?USyRzQyTY-<4$u zcHN1V5O~+bFL-#oBo4`lFiMnrk}_1vmo{@ZdGt|cHF@w?d^dU6Noq9%0m$Kt29u~D z2zw8JVAOb$4Dke(f^Uf?(epa9FE3pE-udLG6OY8|-dWrG=q0^JhcF#8Dmd-$5KLVN z>tUDv>6Kyr#=IYM)#)M%J@b0aUcGLaRE{C50u7Ho;LC=&>7k)zP0r3H>_?z+)r{nH zjqCQgwGc{Jr%HhCa$ub^OwU4`agY0+LNqEp|5g6ua?4?Gg;Peh3jWWs+tVunqI2;1pUuL{G(m2oI{&yo-U0JzKm{uexeto0d<{t2+OJZ(2c|6`Cl*aGU|kip)Pc?8r6 zN4Sts$u-VMT+Fit3`C-ch8T__P8m}x%lCPG6}Y8+;~+6E8zBTq95=q5zP|4MExN?( z`*3twi{SB)hn^p{Lpz}2cb9B(i7$sn$Lo{zVR<{mm(_T>!>Ty~DG2-u)XbKt!v5Mo zA2UaMw_-IGN+7YnLN^*(3m>~KvpWf~o!HC!nTc-QeRQ)vK0glW$tg9U=btN^q8||k zkxBf6@B#RhTxHu$%pYmZ46aHsVbJtKcuUH^j^U?R%R12UOk?B3hxOBy#0);b$0rO_S7LGQ0|8OMLhJ6 z*BeVR*$W5%t0cbsaRcB?XxlQ;YKA(yYZ(5vg0?#5TzYMJdX#asMlK#WrTt0s{*ol` z9>J+*UAoILHoY%jLIS3o zpn?IqXx5nnIJ| zUtEgbKd@QDXw^)0)muGZ>_|W{P!?*F1;QrLHOz`bHrtSTpon-V31sA>`C1@R^1j}o44-ZdtkG?Z&E z4OhT?hqyyvRmKigZ9k>up`NP~WP-q;&omfzR=(@VrFIAx-jPJ$88>7f@Z!~B*crDVv|9n`_+I^E&X}8MN&t%ydTYwSz6b`hH=0Nrg=xwgt4|EW zB=jMp1$nfjCt#|mnd(5%JzT&Zqq3GxYML+4= zjd2<-hS#N2yVY^Y86IKaK|awz%xtgtHXP7CU{!lnT#3*vC>$5JU5v2*h9q65#ADuE zHw{E(_{v}cH=a_OR@?&DWCDfz+5vR+q4Au=i+4pOs74(T?K5P2Uy_c_;ZhDHb!7jt zI<5q-7~v3|1{8bj_3ZdhAc%R~CyEegI|N?sPvcusZAtKCxEHFwauxKjKYPX!!t7=v z#xLJa3APq?9wgQClX5N;u|MDvtzdakZK7WgceDyMy8o%%fO8%`1n6Nc9Kgbe2Ah6_J7QL_SdfHHtiXFd0J`Gjz2x!rh!i)BPR&8s zGLmf~!JtqCmv9xl{TY*K2LyjHOTFpNY)^kdba2_Pv%1RJGZQt#fT9IYrlINguS(}6INfySca)F zmI@I)hUvJ=Ol5tmf;0e|$PzbMJ&+yrvOZ4r&D=F3!Wh5INhrnHj#`Vdv10_QJp=?g z$V<>Da@IZlO5a70{?dNl(@=05y66O!Un5B2eFeE2p*0M#SM6ydh9pFJ&g)0%}zs7}P? zx0U2gtB0Y5{bK)J!J=ZY?@I{JP}`H=-%g(vO^)s68GM}>&TJ|o|33oxsd-HnjD<77 z!DHlil@jdVt|!UzSa5K1%fcJqm${p0l-6sr7L2!~tGA?!`mJ0y($q^KAm^$Hm#;Nb zRGoyl!TSZV*5wHk&bRp4J@Hd4%*1x&ljC-t)OEgyms--y9XJe+xmHj0N5r@bE01gDlN}BpYDN8N!d>yAi@Da#PB0_NushB-va4 za*{%$CY-S0WTB&Zv>6%Pm-2Kt=^REj8Tu5uYeR6ce8GG_A$xeI%m&pNWrk`)o8b0R zmfWYQ3?l1Yj6*X%BY&Y+E##RkGOKfGb6N_2k3{BftMxv9kid?G1?yOCk+F8EKhs+J zyk8vuSo*YIX2fRJy2l;|xa0SFrPH;Uop_Is;Gd^xEzZU2raZ?TO85NLucx~kHdvV1 z`7$80_33V8!q1gAEy)}dD&)F~?PLDy1qgnI*IXujWEj0PY2xM%R1H($@Tnet704Q2 zl5y@QZ}!;}gHFRP0V(QOH=u7Ojx#vl#K)~9s#**~F?$ID$Z>`a9JdfA><4zf3jXgy zMpKznhb6;RY3hi&DjeH=+4R!jSjac%cR!lqr|Skkivn5C{h1PB&483>b06vFJfu=3 z0?4+9x*G5WXNkXKNI&I7FOgs}ROnCZB!Xk_aKIP>$Y4GY(kH6lL1GXE`LD@Xz?$D& zDgaSjube>#Le+vi_3;QjJ0{9Y@mvZevcHdozI=?id@jcNoI3DHq*z0UUvMDC4L#b& zm_syA&JsQkp?%}Y9_y&3lUp(8G{Xd5l0`$9RR1`Vp_LO$zGzQ1EVpx4Z%j<_T~h3C zQ8Y>sBH13?4ZZ_G*}4|tkQ=t#1p^|9f(|1-b7!Ec4p?>CeGyMap2nD~pa_#>M&DY% z6n#x}6S}o!WjnLrr6XQ+qtsY^t`UP|+Bkt?&L zH{Qz3#3pf7uJeS4S6>dx;RQ>GdTHzO^e)ODpyLEc{Z4_zlFyro?57a5Yu>fNqQ!~v zdqsc=Qy*k+#~fFL;0(liHaAi96Q*r;+)YTftb z%Xw>JyNwJR-CLD38J2x3n8#jCs1mOa3Y`VAKRiM_jkh|A-mP!B9S6bNEH0wxY>V#} znehh(GMAvmo8zKIaY0V-65I4FGbFJREcs-xQLx<_KWPSJIcU#34L8Si#TpE=+Hdy8 zk+7Ez@;tk^>JZY~Kb_-Cq9L&rB34_UrloKk7^XzxAB6_9>-_f}mr#b63g5-rPIlEs z<9eGW(zsM2oFkIrR*u*d@dB!fB9)us5b))GquY~`W?S7!b@l$^dD`Q7T24Uvz{DZo zP^6@Wx7LC%&y3U&VR98B;(+Ws{c-T><@N;=$*u0t;}NY0Vd@zGDwF*YKan_n79C3S zVG2T8z_*AVi5A3G2h@VOstQ@oxpjCqlayVlP7bj@)0-9#B(+~UI)Tdo5waZwtmh(- zGB6&YZVo%+dawUlVe9XGkU>=v!v#-$Q68gq$wgyT)QRv0e%mnezZF5OssO2M5{63+ zfs15l5))Ncy12emGz*=PJ*2d_t%*@aOYY=swj^2$vh`84XQL?$hAlV4!zgTly0NUA zXGV~|cLTo=6eO!6oY$kc|KgE&o(IvZN)@)MQs-*IFD^;CLwMD_f8V>MBV5_?4NS)(Tz-82Tu#fV;9 zOkeD2|GnD{h^=*8f3}(;JS2ZEED)Ve-inH%V48CBg6Q~8n||85c>+5n=^g(LK%~q< z2_}%5zjjP6p9FTvj*$MFO#F`4SO{+2TJ=Q#W*nW+ScXQ)y9X>p7bgmf zJf6QAX~>DR6+{=I)2i?3@TLg^z%<9-VZ8qBt6+!$+|Rt!UcrY^k8(ltqJ`WeY~4zJ z-Iwl&j0@ErTZA4?#0>obDZY_b%85*q0veU2UbVXSUKV2VvZ9DR=rkmn3%untoaMBv zP$p6u?$7Q3nQB*uvyxB$(?V*k%Sf>ws+Gkq9#xiAJvs)_-<jnF^`U(6{Iw7DXjr3CRB<7C^L6IMl#PK7WMtJfQ zwesj~bL&sPWNRy9GD9;^g5vWqr$fg6gP7{pE4GGb>jI?{keJ!T{mZhnz#19mE}f2& zQb8|XaCrs&TjRB*%-od-s2I<~6pUU_vZTQTgZl3JDp&|2dblUdJ-=$XV; zJmK>Pjl8tsc`wow8xi%XN|^doE0mh@viF%b( zt{v1Z3R(%Y32$IzAuKR6<-v9XX>7U&nI3;QOHZ`vp!p+qFJ0T@yQy;b$tI8o(Wmpm zyR>?=2j2DZzKLo}k$1wmX(M!rRH)&1qB1c|B1(#GL}?OgQ($fmvc-5HdjoD|uJv!w4%^Z3l^Z^|>tW1OaqKG;s(#nHwfU*=_(NY*MUP){ zg79c+0wiS#`i*Wioj&gMfk5KKV=)3Vg&j!$c979RE+L4N2x>!mz1*OX%MM(ycuoOQ zJo%_5F+5+SQBtm?8UB$cI$0xEH;jqqcb-Btal8$6(1v0KWm&><6?b)5>c@wJizEO9 z{YV1>3jqtPYAYRq&Ko`qphxxt{&te(5ZB#fg~dzFhSXm|a>F~LV5|x0lcdgZ2+$kw zasIuMvE}CE-;IyktHU4a$?3!7Yxl^OAr%iktxdE z1w>@^PY^$g%ZjxqaWZ@Ma9kLfPa+)!DJY;)=C(#I zKLoh2omV{y;<-p#qN?@abMvaLw#pB@U}9RHm<&Bk!-Erj@<`*JSVAbkCWH{1(C`Za zsf$3Irr2V4cQlmLfjlPB{A z5zIB7uL}$}?1G!EgUstXB$Fe#dzueFp1Ko5iAe~ZfoC@J?qU``kuOur?DQ|-|8#<8 zVX#@{pacM*y8GWq!gKsDNRqdu;~{&(-fQ&Quith|TAUW0l#80$rb;)FR8lq7g+0o( z!|hg3Kni*0WdDo7DM)L`Af^jNw1 z>umIQqaF>}`f`?VA%{zvZp+*uwmV)e>VZx@cNq-&cVyHq5d?4mimb(lY`yNkZtzA| zV*afJ-Nsj9jM?YhIyGOeOx&^?J`x{f{I zn)b$aJ|@}EgOR(%Crv;cGZaNpj}@A<3< zzdr$ek6=6iy4I`W8T!UFQ276CCMGt2r?%SuMrgk`_GX3GAgAo$pL#6gReWxT_)1U>VXeW;8e$K1;zNi9<6#L-L z7*d|zu|-k(w!fGfHD&<<`X9FvJhSOYm+T~H zg=+bNtJ9W7!dir|#s2)6!UqD2{pzf_v-!zx4!z2qKDgtAVxuy;7if$$9=W#y!7_4Y zI+tfSEqHMCx9lJ#N0(XeZ^R&I-M4DITQ!H^194=0Jndh|U3Tld_07Tgd3yZz&R#SC z0g$gBfv+4z3fias(-49W$`lHPyfXxnbjJCTV&8IDW&d~W`nh_)ovYn!{S>WynYEvh z*G%@n!_e2aR~8~~OWko_{!$}`$%(Z3*g^b2B_e(ZuG~{P(2_Js% z{x?lo=Rrvl|03CU34ix8mQMxfTcGyKu>$#AmW2|~w#Z|fU7V+sbLFkxhVb?5YL&TN zjPw6pEB-%jW>zEJM%7^n(cxU&*qx~*4KevuJPuLD)h?Q1z5ccQs6Vnx=-!iIDx3Sw z#u{#hnB&YXiX{8di23=Mln}Q6672^gZ7RxmJ`OMkP2UZVV3SUoc`*8)g; zoinLama&5@@wh=%avSGkdj~$K^A`8!{iG%GmjUU)Q$2C0~Bq46otpHS$6rncreM5AujrGE`SrgN z2tv@4|V9iEo)kN?Pq3L7-p z_g`&AjWW!>(A!|+eM0t^Z@(*-XCU9f@>+Eh++FoBBz`P1-qb7Q=$_YzZisQFPFp0y z7+7<{)&0(nhFKbtiXd}Injq~z7mbTY0I#ZBIV&3Pq5_v{vNdJ-W@-7(P!C)Qx2`9p zFasA})nrQIhOPN25N~cbaVG3L{KWul+KohyT)$^f&gH z*|>dnybrXUjn2W|8h{~aS1g*Cinwx)i1Vaq=rxh-Z&5M0y*FJ7Sc_?jWxY!n`2~pl z6nY51!nfQt{B>ErbUFsN<|j+hPgj5?mj=t;5s5woikNP>2gToYcg}OKhT^s@XOLdT zKwB}(?i`fZ{IO~UTPfnfX`7j=IcN5Ml(Iw)9a}ZWR%yAW@vdV&AlE_xz{`4-qrNNX zKnCHN>BF(Isr@oz7c;x;sOVPWtC>orV2OGR>0LS@s5nyUb%olkGNy3;;Zmu0-}s6| z&)Xa7Cj=$$lP_ZP+(Wpv2?&<+^u8F~4tC`MOK#U#O*4+Y?R2?xI$%HKq;wv|(xlb* z_=YcTub*8)d9g#uH*ACh zu)tjZdaIuw^TBMOyJg|6{2I$GWU(bA^Ti+xw@;9H7L;n-2ZwGp8l|K z5UK+p3{X68#ER;mtct@9PTY1-C%8YdmC3w9zfya1u6<^H(SwH;c{C_kRBO;SfDTkCqoxN`Zf8Zi`)vF^GYWEd1&<~&Z}E$QzRR@3sr<5 zenQer-@adDpUJ;f&I{^~IGXyh&J%S+E`4=ED(w9OeB$X2ELtSXefPPHR+NI+`||t1gdR?Cv?Y@g?+AZWs-j!s*K7-Poda^A| zZq~#6^1FkU=Yp#4KTQkf?KB%X`H=bbG=(Fqt%c`06k7&;$Bm>WF$(5r$MqqTpq9Ks zh>d3eD;6~VPH1nKA2H{ymU(aU`m* z4G4+xlcuwQ0hS2m9~xkgC0=;GmweXb`n|dTOaEVHG(RT5QbE82nHF*JZO3lOaNtfICD4c8)NZs@{2+p$s+wt(NL0W%LJ zsEKgQ2}ts^1%BGU)~&Ak6n?aM>h#ZOG#4|e0r}2iOSLQMk;uqV7TTD5rc#*Pl$6fxTSaZ#=BVD!eX21A!ui{`Pvr|Cq#tLQmot{S;nRJ) z$ka8QyVp169X?QUVU~P+N5y-HR3;4DA!W^8`K;0Kcd?#XAF`(v!q--oDYlS*3pom# zi)n2RfWHDaqhpjrl1|oQQW*FdhuKTmGLLO75qAU6Pb6K~Mxu%DWl(HtY>$W=AX0kI zG0FuPy!wnoUhFIU0%GqzH=2x*Wt&#H&APVyEN9E}S-9rN{pAt`LQnz~I_1?vi7lX8$s9EYu$e;f^yM*L-lc>3BeU zGp}t-0Q36KVBPD{dxInw@&=$O1dg|;n~hnpl_jfaPDqL1A0xO$M1cMjXNbtNHEQ;U zVCw2KcnUM|qtfb#=NA_=GmH6B0iE!mYg7Z$yv))uRRq^eq+KP%;$w%9q_{E}lMM!# zi;|v(r-aOpp*ERk=T(%@7F6&w#K0D#G+0b*=5=7|BR>Z1d3gnbgS?rLv$7>_thcF* zmWS5(YViyaMlgA&(JDqlqRXq|9z7uvH#=uh6zXN{#ifCe(iHARfI;M=LF~CQQpWCv zmjs;=VOfo)Gm3r{Z5s;G!67z++Au`-Q-BU#?eu+sYbTWIHN9%HA}%W zoxngKH%hb0%@{)Rx54tSiQ!NEXMKx!c0v%Rz8Q>R_tDr4-R+$HmGr@R?`W1=?8$Y^ zrPM3Vmdtobtf2%+iX{V~)S@`Cuedo{Xhh|a1Y?qEiEk3iT{w7Q!x>WS={e+vaQDpzk`$yqyfFer{&yw8O zl;#gTin)dH-SQ^f`B72hQk3BK!S{l6>X1vf$v%e?{4#{yTh=Sn|sI=&>nl`mO_Ej~8(X+(F z?Q>Uej&Vbo0|**u@z6MZg#**ketdXAPF26&HqqNf&?$^1IIKNVU@stH+CZL=2g|^o z1vaF0rCbdebGkfnQ1*;HuN4+))WF`Yjxt8N7u~eA z(W10My6YWVj)36bYcX&u1|@|Aa_)60iGCtpt=4j5&*QOYFYrC-h+q(Jb+%>jm6;mj zK0cV$%=d$tg*>CUI?dJSO|$~TJ2NmNB;LJ|*6FM?jrP%Eo9SACN0_Nt7oJZNSL9O~ zSUkAC>-fuN5?M~N-^XvHQ3f4`CI~SRt19^pM70lg=eD)mQsxxwRIcsZWw^AostX;MKJNkRZRy#HGPpP)IEeb9w zv=XTR6>&B5EnF)l;;R*vDDhs(t)`oDw(CtuYKl;-Sgc&HN^1-rVXwWUVseh?(;PKn zY#Z0JE4!s^YO@3B$g&@8k=m|+z`m4+;$vpEUgt8ZsxQ3`VVF{e*O3onOOE2c5ysr4 zF4A;BrA%Z3JORLnr*l~qHs~D7g5%}NmD>!}C|=Xrj92k|;>D6x(ncIr#IKm5+S?l$trDXY8ubf$Np*$SKUiP;x$ohF{J$#W&7Q0AF*(E{P^2xE;lE zT_d8A6K+x%o_e*DKvdm*B*CV6*5N4?Ayg+et6gJrheo`=Qo1U}Bl7r${E0o6xc?z1 zdl4328|@eI_BTI#F?uII#DnXU#+!i>jG%sZu0$`d>lh!m%tk?ENB)_m2#%L-H*;zQG{n znD7BVtz+B_jvo1iwvVD8HT z4&a8@F-9O#B|+Ofj`?6jh_m!@rm9iTlj8HS!e4^EEM})>!G$moNS8I%+b}UCP5^J? z)-<8;7<4dZr{eqOfAh^G724Z_UNi6ydqLwI!aqYL;^qVtYz;li?i%$BB96mr-BZlk z4YWK|l}dX#VG_4SZkF<*_II7n20i5b3)Wy+SJ#K+*KziGX0q(^mE|%Qqhi5&;sUA$ z#2+&*F)0y#n=5iHhmSuX$nk`;Mj4_ET;+DDgr(4;o?PP;Bi+sWVe!Q6J0kaidy`Rum$!Lb$;~8Qm+=v4cQ8NAZV4 z*2k^ig*z{?$mG^GA7Vm_N4;>gaT`pEOI*YN(Ams#5ChjuTT~#Y*+WlO8iR za{#u&+vbn4Gz(pUnr{VJOK8gEanf7kN(33)P>m~n^*ls`mGi;e=C1)GWZNnWrIGvB zAekFDvzh&ip=>Cl&OCf+srVCyKiODAg)-6~66lf9axs7Hfh-g*?y=$S&75fbOEC?> z^yS;sm^bWfXYEC;jF>iwMJ*k?8^cZaw;wXYC)0@RgnvDR?91;pU3Or=$r&HYH>XoG zCxz1sFVJwhVSoIM>p+$_nPF%n=G!UH|3kVD!_TI~T@yu{m#!A{Pg>S9A5n0gX7Vl)|F! z_+W*LX{r(O&bY(+6gy6w{ts>E5F|?2X6dqV%eHOXwr$(IV8rcI!|p~x)gmrA_?}SGdeEG!;U4fO4p>_O^V8|0 z5Rua<^>4pnt9Hk*BcWHZEeL}9E~X_Bgv0qt!_?TD0^`#3e}t)2B7gQi{suQt6L|YA zD2%)*8^LV*%w#xjsoK;e8{Si`8E4T3b7QosMYU_oc@u_CwYNWx3aiatERi|(>izV6 zAJ8rP06v9F+zlGLOSZG-WLAT}Isbh+lP|IaWeS#!EJt~`x=PZNf#KR6&#`xR>3G_Q zD#P5Og&EWHd6S=Ev#_@ie{LIw#pWGZ(%a6&&=vt5qw!c%MfQL%BO+A8vJPToh9gNx z<1H-dI1|L0I>G?zW4tZQlpYQ2NYbvq!%ce-=L#3 zYB13P`ECMx8%G3lyI2v);xk_5a2%(Yka&VUOAR7fBCsYR#0k19N980F`{Ip+z@gr53qKrNlI;IxzUBw=DKbX(KO z@Qgn~dJcKKi)H5#2GFvvITqOq6-nwTv7}LtBaakYc27NyYn5of^yh|)8;@m}h!?IO ztPBfgP$=c*IzFrQ3$u?`K=)kropp}uf7rmDCzfTHwIDA}r3uzQZt?ZYbg-lNjmcf! zNi>TKQO&1_z>rSLx`ErlE5_;wEe_g)J3Lu_a4lMp=UJLO(Q$2?d%KoF}Zm5k_-^+E}`hW*n}4S-I(OE&(Urwn7K`DN*udoZqH~1 zesR9BnYhaJla>#i_+XIMjS$NORV1Q(C=^}aQa{x(*&M9(iEAI5}=tV z%>8BJqLO=@WPtDY&W=B;_%p7UR&1qkPrW)}F<+(0d=o!OWIs7-BMz^X#spO6QGLjg zx=us(DAvV_y#A3#!TkHHhoxV z|dR6g>PG5qnYN95tRiI4rn)<&Pp7|9D}^2;J-`hQQn)Dhg=pP}?=$1%ut7Gn@k>(} z9Tc?8CNHOrGf5D>*ySa2BH!1TI=XMKb!~FMicp?w2M3>%YN$LUZa1fk`7N?$u?Iv6 z2Zj!X*C2#Z6Mncl~URWbu$-j8r9Ps04((VGC z13_gCQ|_IF(=#n z3!Uyvo8e%_24{Lh)L*#{Ny@#0^)6|KycNW_Pq?M z5?vN}@EYezE!Gn1pcB-h{1-d%`u5z+r=@ID44z!y0;8L!=1Z*MO4$2|we962wDOsC z>w#2x&u|H#GS)T&fcvlYs!-w4S9Bb$u)jsIq2@zX9YKsIxYm9yrFHLD-7$UriY|O4 z9mHyhcGHt_YF8gq6314*+X4?6;CkOyah}gUHKo$G4c}Iv#;tMO`US)>ncN}tG>MLl zB0U4|;7li9r?u+#5NVe}3+8}US4OURneCd@o}GqoKHB@dCGx1IQYW7WnA^(}Q-)fM zZqx)`$&mUjyebSDTO8$Wl=+(!K$qa3s*Y{#>KMgIrzi06VG1<&1pY04aytDzOzZsUQ^#;;1B&U|nG*WYz{JozS7Z zAR}8xrp9RhxfLFZ(V~P^Fs|KQj$(`$PH4CA2%}c;w@63%feiGe4k^n1t(2ZVd^xev*R>|<#S9v;IC)O+-T;L6CJ3V_($6os1uaz@`l*weuOP`y~@7|p;@h*f{rtl zv*@DlIvSjTmWF|k;4|!f5X!Sy$C;>}HhgKIi;u5%((!zXsQi9%f{*8CtCqj@K~}uw zA3YB!G$z~{cpemJG2ed46S0{Uh2Tgs|MhxVXe7>qa3_Cm@8d;UccGlWwI>y-b8CR<^~2meHVDtTzd%kY-YsVWne6y`IPb;{;gsW4HO z9TEW1i3o^A$ImZ(9(EcsJnj^w>!;)Kddig1=WFQd@7f z4C}y$^-k!Vcb=vF)u-R#HTInM=rr$~{4(GD#`{}gAfX7`lqwut_O6~mb7#K6FTFHF z0r&W(1;@I2>~PZFlRp|D$1DQVK_g#H*~?}ms!nr);IZQ?N3b$saWbpqQmN%FO+mM} zGK@K0H@Qv1{Zvf8t2esJ(I<#-U2j9a$l93+Po|~+Crwcoyfh@Dtksc_YmZZ*Q5!vk z+(6qsO)?<7Ddx1_{LLXEvU%8WO_McoBdzJ^9v>H7xkkV$k*Gj)^FR`KBk(k8*`Qua zy!t4INX&hRj*;Y{C$}t>q##QrF?d1Jon9Nn82vb z(tJc6V-{paEQn(gRI&?2;ZrN1s{?)s{0rSsH}a)qH6lS><0}YlG^ydrUl@4%{6I(r z;hR@z%Qw$9Xwee1T*o0-6S%;}1Tpgh3l^FeatLLm^4T@*zO9~Wn`(m@9fVn;q&&k& zy?Ge)KnOY+@}XuCvVh59vf}!_p|jihPHGdhqD816|HPcU^~0Y!1hth9h$Mpx-<^t0 zvpPtW4dZP{kf}^iqFiuaOzz;1+Ev9=RVBiSo;m)7K26XL>Yc zAo9Z&zxxD?3HP7R6Jx&)7y{a2%k;7T9)#OF#;8lfW&5XaE;*SREzjCtaL}fXkBCf& zPx2wO(@8SVu?-xC@^6h<=4gG=TXJt(u_AVJqAc%sOLj12*RMZPfZ)<)#kZKo5Lkk& z6M>D8g6B|s?Bwi^6m;ioR2+W9k76b9fENB?-K@;Pf%g+0lE``i?gZ$mjwrcHz=Ea2 z;aaS?GBT`bSwy4G-{z$I>D@-I(C08L=KevZdx#;*Om+l3a#@vU-&_fovwckgCIw$b z_=j%%)o&Z?e5xCa+#TNp->-~G#qqKBR^mz}i`Yyqtz9Zd6y*W*NqULjuQyFB>W^x? zIfNKWKLxD6l;ivgO}(^ATCTrt1mvT8qfRcoIKGwR6@D-=WmpcgioLKgpV;RUWOp)U z(=+gi@eB-0`RJe4LA%ZMqPua6-*t9YwMQNt~7@8}xGg>|amJ@hAit;2Gwwr(} zskT7DP$3dZj(zBa!J5&Fu+K%Owk~QK|tmO8N$NEAjF)TKx3$cR6#280G*()i2j;m?0v*|Ny z))pUMCk*C2rTRS*C5hZ_JfGKG6Qe0Kn2mu7dK2hCb1h}G)e(i@CUgY{^3*0^ zg_n(CEcP6><0YYqgZeDB&e;Zfkbm z35S`gyS*73@W}TFPi8J8B1Ou>noTo`mf8y=DinqrjeBXP9eP5eCr;z1^pX4Ae^eR0 ztijCWYZl58+b*#vq|6hLE*XZ2u_ov}wc~00p58JR&^R^X+AlqJGAWP-cbV zBn%1W&@jp}8`O0+^wQUo0uJY$#@;E2N#TD}_Q$oZx&zL4S5lFU%F+wvi^>mC-eGa< zWQw573t5}B6FrmhPpaetI$l|#Udq+_pR$1wkPuT?=sx5*9mC6Xs<4Z_U{?HdX`Vkj?1->j8 zoNcsi8{)e=fcc%c$@L!o3n`1TV0<~AG^I` ze;J{*6aX?07c{_y^jfD&2d*=m&FZRo6n8P?7s_Cvu{ zsP<2FdFjHVev92EDll1S!?R_Pc}uoE)Zw%GD%cy-&<7B(smA!u7ELkO6a;Rj_b?i$#4s(dIT{jh##DSWvij3p=8o8JNrUa#LLV|#LZJ39j_ z`4ySmpXyDefQ+GI5Z0sx?e7yv*C;P+CNVPX_zrf1WWceJxKF>+Qmv9Y%{ za5kZ{wlH)waI`RSqWeGZxV!5qIUCEHI9k}7>j^trxSBZ9IXN29IXT-fF`6>}J~nZ8 z{!da>L&J_}1i^=G_hn63m+o%SUSPl9WK8_Ol&!0 zC%c^YcpgSXg31h!5gu`E!NpnSuM0E$^K0qJ9+fsSA0lhZ^HPgjPKjX#s)`6 zQs+s=3Uk7R@E=D8?6`y}(nH=P?y#^CbK_=hrnvq2kb-UaE}{l>`LfmLo$DXrgUIlX zuWy4MyKPz!Gb#6rDi6s-FswN32fsZwgf02LQO1bB$VrH4v7y7xL!sIOo`}I?urX@F zOcQug{6e%G_L9k#Kd(30LafraQ|XYH-4zOPH(^M?fbw5jcu~WE7^HXcHH>+x>Ey&n zgd3yESGvK@Ntif9s8S-gPip3Ap!T5gFQgS0=N&IDaP%A%#Rp_UO;#@jvGks2vEFmj7Ir#0K|Ak*0N~Tuo*DXEERSdwg zu~>>2Fm?jx)s`A%(is(v4b!;^_#jk>MwXcTYAks%Op^CfV)q#zWP$c1Q7x|$PbgB3 z0`U%R{x?LC${K+Zni|?$Xhj(YzpA0H1ZYQptYT^(d{D-v8Wm=0t{X}mN4yKPC^492 zOFtg}NxV+XkU3d;MlF%4yt;>4D$1r^UC~$rnNnJI76|0Hf6ZlkL$YP>$IAymW5hRE z`?T)+9LTNbFcssiWJR&EWA1O zNKi8`UyhQHK;U3ZAeE6COSKyCRn`fN54^=Br@arcNsq$4609#WAaPXeWX74TD?0-5 zB1;zN{94SHvNfTxB*W7gb<$hycSV zK*p2q20dbSzKZPcL}bKU$LJci@rL2U?P>o=&J1o#A9$Fsa2*5@cTO*;>y0|MHBaR1 z-Pd-gt5VTX%$X34-eTF%XyHeVqP+!V?_XP@L9W6O?-xq{i|*^%kr(JYRU(Hm6`_aJ z3P+JY$%aKzA98wa`U$fT87+Y+IaBy}NqwFGbQWrM^W zNB_qk4a}3)-Us!2Vtm+IP9_=(2=|o>%AK9fps4cIq^Bn#5)*fwe$&?@NFxQKQ`*GFGR~Y*gicJhK(yDx@_}hmzmVs?#?ujrKj${!jm4*Y#1h?@QW1q2F zfZRJCw34dQm4LQ&44KonfCJ0@VD5O6vTtQR9v;@b{uzSY(vf~c%acn^lXpZtm+(eO zb2!_cK`Nr?my3=bVx2i)T|qIIt*O!ioOkiPi0v{q$c`V}l4Nu51)5fPU{-iM>R0Rh zqAjzdc9sg*)y7<&E0<69$;z2lsH48BgT-z0zgg2~?z)y|MlBtWbyVU(ViLFKLRXwjYONXzAhX9YGK4?2B2CUfr)G+1cd zi_c7I=pkDHPGJ8QSErNOm5Y~-4&g|a*bk}eI_^4TMC(fKJUt3eum!^1>3j;%wgW;u z%+h7=x3j&vil5mVHm%}noU`u~p_OV%9}cDzs03tSB;ShCXh@R7U5(plm;_4Y4|WS| zsOAE>J3r!!f>F#=&Dlk$EYU-Ed|FfYt!OlOlf$@Zu4nnXHFREQuVs8B`LTan8kP#A z5k)kwlyfw>>!)%f=^wjy0Nhw!@P22V+Ug|wn+lpCp-_R|| z)Y*_6>IzuGDzcky-`&cdxxO8P|EBd16bz8Eu=n>0e0P9OOBETo2tR(`qqb}}=w)t#Wv}nE`DV?(*xpB5z5%S0< z`*#btTyNFbyPAYTq>sNLGQ!2NW6Q2KR^Y0<@ z*7|l~(>U_DIvfNyHde|J?wNc~7GtvP4P&qwp+3XBc;GGcoObx!iUr)|JPqt|))y#p zjoq8L3LZH-V*rcx)hs^tyivslpGQE@9dPcl<#70pS$5&$KcVb140&F^ESvDGM?c>X z_zq?4Be>JVM*ryVvO5D3JlpH6epbxAy5Xt@CHVUUBZ`*EkJS^WUdU6zXgP#9=s_V6WcSSYh z;d&|hn$pb`O!&FIj74^`rW9OASN%UCbQ7CHZVxEgJvS}1S^OmP58Wfqo> z6KC=$y!;-`mwsFfg-(PA)fK4>iS_P zjww9QUJ4%|wLV_FVyc76?Fnje3bn1S3$hKi{|@ylXP+7Fc$D-rtH?0BUK0?71eUhN z@Xxea8TDqct+b8MWn>T~tGMG%-N?Mw;pE$?JI4*K>&GAy_l-m+=oBiY`Z-KRMii`+&*-K@x90SXEHe8GHu+-OD}FIZ#4R}qF%_^-RTlT`w* zKKVEn1ivbi_DP8SelSoDz#O2@NNW_+9c*7}>CJU+JT9=OlvOuXcjU=yp_g}3(k6wh z#`I;l^S^G$V9~!G1Xwp$IOgRR@Gi(-Ho{!vtlI)6Tk+gdobUh%=`4&_xax!hvEG(8 zctJrwSS95XR~X7EGPTmSJ;-#p!{xOzg_EmXp)4Y>SU!kAd{QH}!t~v2i@$9}3iMf^ zypNFu9-IU|xqbs`{PDJ1ucB2QBD2mS{npWAeY*{V?gYL|U+Wn?^{5H}!w2m8LNpB5DS_^r1=agU3{M2DwV$*`5!Y2r1}tfxl(sZf z`?RCX=rcU5s%L4)Rh{&5xs6Z0oi!*GG` z6FD%4Z<5#@-U~AuBG*}Wt-NlPp9kG@h%p*esKbH}A`S9qmsR@a_ZO3?IB0)(i=@RH zf4Q%z$YJ{p+5kwsG1!k}TJ3gaGPv=BkgSkIsl!RM^--&!xWEW zn?>aB&6KF+mi5MO=39ssz(Oof!v$xxh~b@w<1uChPIWsH-)@p+2ej3S$#V~X`}K%% zp>zJQiCqpJ9+tjDN0!P_16Or%aDFspx4zAJvjX?x0n>@b#HpDyR0s27A=}IL=Iv^B zzI|R_YdE2qT0+F3X{wuF6)&)rzCO$k)So^u@%!Ls(sYKvr_U3w8p(zwiZ?y5{ghqU zN#=kg|VXFT6LRqsFd~g(~_>B{W>dtHPO{4B^ z#@lZvBdl7)gZDDgnBNEpNYVD{HXd?b9j`ms0#0urPIEba&;gk7GtsQt2>5S?W#RPJ zRy{dwvD*Pp+d!V6Iew^Cywy@AJPpBl05C5Ebn*1cpPg*KJJZ+Y@FFZooVo#6C(sP(6n zb+&+q-2*c>$y!g$8}is0wH(Gjw>xZuX1;{mPrL57aYIL)_|QTCcv9p2C2z>Uq`PU z)*zhl^u7%l+KyKf?yW{-6(6@&E>Zo-mcWFI2S!;QW?}ftS}pPWp_M}_dzt6;ogl0D zxqxu1fGl~PglDzg^u!9sE`BE&bGqd+5$MO(rJ%IpSKBQYR>`f~HS#AI7Tl7>DxUn5 z%SyZx!=i0gau=!P)D5o1rbH>t9KEs$a?F#A4aVS^xcl&d?d^~LhpA$N?y}aC4sn$t zEv_rNn#H9z(_$p@dnh~JK!W*`3=UT^nlXDpCSf|)B(|v1dcEn<33Al+S}= zCmx$bqgv99f}~Pav#8`So1OE`A=%RnTo1ksgxIc^&Zws`J%TKYj+1Acv$eb{kLVLo zrR^WC#fNhG`xzV-EzGFb0-i1qXoUoe8{e_-XRwl=%g>2*yKk-GMN3TilAPkAf}GBI zX4QH|lw~&62)-~Z>CpvWZW0~6HOD#D>o)U=4BF?Uzj)Ssr&m!22`^iKqc?I>Iivc< zUi8uS2bm2+Zkju73vY?uja?jDaEy7L5u!i6SvHBijUdt$h?7}eFw*Ul#At;$Gqj9X zCq@H7ARQhn(zWZfBjZu@p<(7K0X8&(B0(}^;+v3XKF)&eS8>jAvgBkK9F1mnRQq)h zM+oprT0k*f#gH*D8I#)aKsFZ!Gt=*_4J*q64JvX@au3D%R_Cr@EiA5HE{@BGo0544 z#y*%qtrOJEI&_3gGkr{G?zjJNi7;ox7#d@_JBEumy14FxZnXu#%N;8;WB$%B< zuLqB?_}6qNnLvBt&)fLh-4gp9dzX;JK!J9~vS0F_3NG)4eOLFI!beP;a$3IR$Y2mb zPMz~5U8Iz6fN-H#Y{S+Ew5qO3C7-Se-(^nOr2x#K0m%Be7tb%uB%=Vb$pB_yXaM!a z0MJ|Aq@4BH%C5aZY+6BpynqBla9uU9|Dgf(YN?_5OFmTz1BFaG>eM0eF%y4rLyq4@vLf-EN-lBMB%I~>w4KS{H=41Ee!^Qu#Fzq? z7tJ&PYrSTzjd8F_kigZ_)!#;3P39|VM{XGnlr|R3eO`sMT>ZDlP_T*eL|kn)8}q%R zw;&l<>md!fwSfZa=8_!ETm#wR>F}PI1kxsvXw&xFq~ydpZ%fifC7Ey!)U#o*&V6X+7MN#z#$Re1QT)H@<>?ICKwF zE52Y4cY8dC+DqF~iAPHY%W}x0JJeFbU_x1>h5~e7(+>?jL=O<=Nme75l8qU8ZhMH` z7TT>$t(L;()JA3wj$S>qr{y@!CNN3@N*5I)VCW5XsiRY-?lPTsy*-J4Exm5VbHQQrpg_|T6v>BB%UB(z&^=GoOHN~RJn`nPd2ygnrO>DaB;%VRTv zd%4H3nP@6*+hS76!KEW=wN};?0 zb|GbgYF@LevYs5yDiK$KXN>6c(-DFXz0v&kskw^NahX zg0aBW0m7510nVeYWT1LAxFY<8!1=%zv*E(R5*54$jVV+V67tJb3nCE$N?a1Ne0pRxNmQYn2C3VYb&_~QjNdDYy;ZZj-B`72FYDb=S$z~;4If4=6AEvH7qYz z?wTs83DL1RS8Ri1Au}Q+2n;Y7VeHuw5qk?I!qt6pHI-BDh8uP`Vhi)C4B4lNqsK%T zlF~I#BLmJB?-(6TbU*xB%j<{@J5V$;D*V_wo0xGBTl zkw}-6Q}~|Xsz+tWJSM+J=rhfHl-V ziLg#1RN7`5-Z=4RHelRJpx@IL)2E)SFBoq?U<1U}>mb_J9jaIy^Si-WO<70{kxJ_{ z!C~-UyD_4LFiOe*me-AfLnG$$2h9SZ|5+e_l8x&{03YCLG{RPeSNh-B#pi6@HU}Ov z0@2?;2B3^^OkUfEj}?hJ=^BE>)Oud4D!)qyVtEJh($(;ExV(wFZA-b~n(iN|`-b`? zdl5tYqIBY>ELSj(rHI|)wDu=!`@TSr(?EY?B8|bbRem0Cw%1yc%^#nhh`Yn zXu9Jqg8;D^ftdsc)dZ+YnB{wza#xY5^nM}*ffS-;x%f%>&9Kq$k2%mC)hAsf>gHK9 z91iQ@kxOiu{h?1q8=!&wvDRlHNWU`>y>mK0ube;B4}UDB${=K163Y5=fqRl1)IZ;A z`MfDevoe7q7z`0qV`0)@nLxsZ@4d0Pf|baKY(xsP5ps1!`3WaS9fP*v&rE@G`@RCq;UWp;etf+|87MV^kdUh&fCV+C7uQ z{7LdL^wxY2+p{<;30*1{85N=RRECB+Xr3Me-_G)r8W?1h5n8liho*IqnjTrT+0Rh1+;Jt3|o_yUlKm6>{a}ysEjAHn6N2HIVGE@@jy% zsbDi-H5i@Lwam(8s`xdlRW{WNeX0CZu8wft@@A>X?U_}EMDmj7^Q4<|et%cM>A8={X#LMJq` zu%cX>ym6yqoOs{pdgC%LLwJ(Qzsy_aBnX@rJ0bYv3kjQ}Kn}{;{n8#Ee$#b)QUg1# zqiyuf{#4EW`Oouj)40yuiTB!m$L#99QFidg_g|piCnVg51?QiHs6sma&n?|7S3L^fdNucY_+kCS0NyHK z{833XmY}h9SX8&-RJqjo)Cg;FD@V80K=Sey-%yso`ES<8TNTClh~riTFKnK^8eMuc z8&jf3zABV_8m=138#jN|#(h}MyCv6~ZRWESJ{{OalIEL})cAe8>pE>vX0^1oS%VkC z7n)t*D~xReTPDXg7Tx$EA0nU-m&POoSm;u(bCw!V!AeYRl>nck-?z4V@350A7(ly5 z@TF#;XY=haZu5_%ToRX=U7BEw1@t~fx~#$TY5}6$^nL1GWa*;yN`m2`z=Q@RDA;*F zdZS~{1Z z!hZo;|I}$W4Q3!|?2BOK8O68^dP*oA!ib-su)eYvnHG$|V4(=cl8{MwelG?oFlgm|w*e~ZB*sQ>FoK3acps$OJqXlhM_W782O9lHlRg*J zj<)&tC<9MqRSwHmh^@OaU=DO6d$ofeVa`Rbk|Ql|%Uf?@dv{xtI9vaIN+)eyHmgY7 ztZbg1bI7QvlPncIjBpc`Evzt;q016tG(7N`HA5#dJYj1`PSRD_bNgdiMn{wtKyhRu zv3M*7pgZOa*#kR9@3gJSPImkbp_Pc2kU&o+QY>A!@0=FN179QkImRcNmJqGShH7Zl zYN^!QbHHX37ltKThY3ek-)WQY+N? zic)v}j%vt;n&M9~pisZyXPe$;E?Bq!JU3+VrSNBXddovA20uEh;;pGQ4S&CU{RKl% z{tarAz*P*r@oJN!fP>fmZ$KS`ARP_RDX+RKTHLbg0$gdc)J=`i&7O(_#PpMZ&Y+=5 z)O-9d1B@J^(bQ)4BF8OejH+TAAIMEbJ54Wd1Y&`@e-fL*+e|0pV{FD{OP$o7YZj5C z-Z6VVtjJb5yndx9e$elziEy45*FBpxJ8OgdBp?i0GHEfVOgO}{McUq&3Dc;Jf>Y{D zg<(F;8eIo}dCb1Fj*sK*V7$6s|B4pTxgve6ayKB-naSPtEwoHBQnESTE7Dv&+AYE8 zE9?t_s~YX!Yj2HcKifG>J&gMvmJ+J!ocy2H14~X$rc_l=!ioS;h~v7=mZ)z%;h!G` z8Na3Rb-!g-5gR*Jl(YzyZdR&VcXJmbFkAz$%B2lJoWozTsYvILVC-z9`$aAK&r>kx zHC{nOk?`T!Rg8u4Y_3TVV@B>H6N|_alF5EDV*=n4D3p03b^6%4W{+;26Pu&@QdyJ$ zxb0MR*Y5bR1SWa}Ejn}l*s~%Lt^)Xen&~jJ$=_dvFmj0rnsL6VtXwArW5d}@x(Hy}N$F$bj#;CM)#_Nw zUQZ_LowKdjRTGJI=OHP)nw)^EImn;FPRJJ%%QF0r=1!^JNh_>hYNXSaunsi+iD=6? zuf|R#h#J2MrfWY%u{bM!Yr$V%UEpSrOKUT<`088+hyI!)9zf~%7l2iKi|GM}RMnza z>U{=r`t$~&p5wcSMZncsdikJ0W|;251azxv2B&6x#vbOpBVzZjZh8>{N5^-9S*0MT zJcUgImzqlFTLh*oMJS9WyB6P$J8O<;nv860I<{yNi}oX{;n(6!W-i}s^RyM~86yqs zi=Pv}>91O1bUP__8noHNTpZh(r=058N_dx=TkTjwAJSsY=Wx5n+#PSZC;ioQ6xE$s zpYj&l#LN|zEC#V5os>?;e+Z|=;gc{dM3vQcH_>UEmuoBBr$|n6NPAe2P_#WoM^2LvYrznA zNAN6E)M5l0-wvjoXiM57ps>>nSObU#wGm$M^qb2sQ9c^zA|L45}VHK+~; zIrQ`*#qP}_x-e~Epq2;X`*ZYy2LMwbW93Xu0aFzhJdSFX&mKX9iZA9> zcCGfmPzZg*o&5lG8|BJ*loc=Fr|s1}_L}TP4q`w!+DNy3PR+^v@Y^9s1UX5xQQ0PTmN#f=8&uPJB4!LLZ-gaCkn-(Uh+~O7j`HSencn<#J~jymmiE$pipYj zy@@lH`e`X?VVD@Z_>F$LR03OQwkO?e7xnbIfrJ56=&SIlFsY!|bPfXEi^Gkc zU7_|$qL}>1*v!(4e3OKKQfhx^Kz~8Z;wL}u^r|h}5+&vMGn-(RAGnLB)HwcYf|zwx zB>yZfo2Ls}K)G~c60>ecoaB?3<1!N7s@X_A3|_AO4vMJL~BUiO(X>6xGb_jfkFc zprUeP++3K~-rv7_OOQhIbC+5cLcuS6b|>!jjFHLmvGdE+tOW ztWo~iOFBg#BDd=SelblTLWNCWesVETY(6v6IhM+-^7tNI(mJum@-|fJ4kW(9nDG+Y zP8qOF>a~0jUQ*H5AgQGWtIz?e@N!gy7`41?bWgSeEDJb1$>Gsfz5ZZ<6HM@Ynw>5P z%2sfNY`Z}V{nGGsCli0dzXS4uF;w@2*vptYon3K;x%A)1qNFF>1p9u183Q6KjaA__%Yg?{CzFOKzgiu zZfLEU-wmp*1bb!1B**+J0=|N7Lc|098qIL2g?{lgUarR7foeu*pnbjDpj zAI->E$sGHDW)YGeuB)RPt&naAn|9MjzdxvVgc#Rd4>01eFCR5AV2uN8rp9FF-JZ{J zuz)g!mLusT@~ZK-J@uNIe9S$*0vXZpgd-HArAL*Z-raZ>N(IrXX^etaBj`b6lKKE7 zSVp+G8QwT`e_Te_r|RGN-)m|u>Je2FpzWcezB2%hsnf}RG`iM@)uS4^GAO#A4YT3!Rpd9D^KegiSYN`lmdKx15 z%&a-n4lL;7(F8(?C(fle$cRTnT>ntve;`^}?nHz~(KbE@q}8uUvzW(3$fj5mQT(ij zdx(qe)9rcy$}`7HpwvB6I&*Dw>c!dFUXPSiim647mKUS|_@?!spL4j9 zTa@O|BQ^3BhuzPHXbAQwaPbMY=FC*uCF-EK??g9i6(v`+{!54kS)>=iG{*pSa$e>* z#Zr-OPr=$i)nKn~(pC**PD5MP)(@C=K4PntT;|gqE5|@bv=w$#n=(&MsNZ^ev&5q@ z=Q)Z^>Q$5@QV19d-h{p(&BD{cIx{KAEQc-K&#i~2_`n~m#RDZN@$L~c`RuxIL zE$E<-R@lc;WJ*AW0!#vjh?QChDA81GQBaY|zSxV~Y3~h|jj8!pdkNs2G(p>w7Pfet zFv&8+%!koGbF~`HrtXUz62_r{V?%1Hrmd(NAf&YO-%Tyt_I7J_!kTo1y$M=ZER3kX z+*}lDkFy_lJ2LeDpHn^Jb}-=q1pqKX0szqdpU$cNcV0u!(ZI&k#n$LIx1qLUx54_y zhi>*~@0fRR8newI#O8E1uiD5Bcb~d8{>lIyL^GezFrGX%5vgGG=XYwYXuP7EH9Vv% ziXSH(=Z1IF{n7V*clTfhFanOFO4u18G7cERx^^M(xwWP9r$m~}-%vyQI1jDerII;J z8K7Yf115qHg@8%$*nUXkIGMU_p84sc?4`i%oRrA4^0N<~tf#)y*wTg3odvzM2Aae@ zQjhFJ=m#wo-YnrF0>PM(5<#U9B>b_wXsT5*2rQyq-jRZ^+Q03qPJWF>2^)eVZ^1qz zlpZi^lrc)b&p-&h=fJ?i9i%QEBXrX~sR7wrxV{c?SL-&4`n}s=+)qLt8l!w2xgj=z zR`{rSatI>iFL0U@}?stax-45Ni>Mi2%SkjElAh+7=o2>lQXV>~H_xi0;`OS`f8dS&s% z@Eu%jwm;E670g1B46J=fxB|rLly>?gQV<$&n#LmSK!a&JjUww?L}8L2=2_YqL;<7x z!w`L-@o|sSOl7LM(D{@=)bUBf_|3A9nm{2^q>2-=ErEke#n4LL>q1&xYSLTwi{`5V z$n)A#iXYNX;Czs0I^bz7I=P$_UN@oMSG_x8AL-yxcR* zga*Upb>u7L0j23@_@}NcEsPyFcGHaeh9xT(E|mkPH#jo|oGji=nErn5vgDUHmX5>` zNr-G={b9wXZTy6KRx4`_k!FV_69|%F2;<9h;oH{uwnv zE^`0A-z28#W5Q1309r%2;Totptvn)?psZz#(R&o???VTpja+!AY;jQlve42?3Pb~; zgWO@r4Kbt@{Mye55ekE?DPjSI(!0sva&_BL!BfwOtnM)AF>U?Lfe6AFU|(w!y*zIWM58u=Qhps1>!kedXlNxmpa? z<`duQ*juZ^Nbt13e?bgm4!oTF797Zu^YwbdNr}uP6Q2ebuGT|W%!By1!Hzun&I;Bu z(e-6Iko+=qvk;CqZ!8y%$RaH{LH66rR^E?Szr`>owLW&PXzAD4xCs$Y`aaIoUhd=G z#%2oNWO@OHtcc_)JGn1@1*R{Laitmde>ak>RB!RdzV4O?)~{RcKBDMze;z)1_FEM6 z)AOeX?mCQn&G~lXy(!kratoikNjE5B&3^hXKWxuFqsad^2m3$v0wtix@-$)~py2!e z2M)HG?SBqyJ#Xg?_U0dNce5VQW}c)b<&g*iIq!p3mGngAE$wD;72fXLe)GkB$(*m>wF)llrqt) zF`)C;-`>ak8Jau9TwaPEDi@4;^u+`G!F$>{grcE9Ta;eeHQ!!!8a-RWeO#J0=p8kf zq=g%`Y%o{&rS0-~b!!IP`<`)>jL!(|Yc(OIfRg)Zl>J#9XR8RoTR8k0HG4+SE3W1M z7M*gRr&e{3a~(u&LJwO0PT?hwxerm;+BO=e#uvFSGmsVs_QF`=y3)nkSI-X=0HMGV z1SgC+7`lNey2)2ES!4>Mz84_Q>2pj(w)HJ?ChVmpFGu_a%k9?<(S_q}w_ReXJPA#% z`)myEy(>L5-5t_X!!_Y-^Q#k!YxzJ^w0CR&bkRL_&0&c~JO3{6BD-i}f#<@O?{i5a zF?KCHeKHfBKJ(SVZ}w*mix#~%v~n2rV~o|)DYUa zAz$j|*1Mo>E>)ioolrVit23etv^uq2EifPZHbew09~`AQ!Dq*673%u|Z-m+bQBk~M)!(>1}B|$UQ*nMsD2|) zuB6VP0VEUUI+oEvv)14bD-5bp1aqW(_L?_qA6+;HzS=kL|h85t8lA|ob=qFF^_fr>>_fC2`T|2>zf*#o0O16lOA{dx8xxuZ`n*<(I2_3S-+CS- z+aVzzpngkym^kO*#&GE7lIY)o9$jq|6%Pli-6wD`Z&B@Wg&^QVsrI&bJ(& zfKZ_!+C;A@mXPqW0)IUGFBtkREXd*SpX*-jcgk*P_Y3r=-MhG5PLWF}yA?HuuBcB| zyx{&n60$y(?|%@54XCy|1{Rz1G$<`)8TD!whMsd7{@~?%+_qrg*wuB$OHa7Aeo{D~ z7xV6N=?*%!!eOMXR-C;Oi+5nfNyIuWMEL%qpO^$j{r<89aQ7pS-`J=_I@Lkq;}`6C z{yf^Oaxb&mUt~5IBeFc{lg1;&fGq*jvghian-uHe`MjCJ-XQR*neg^K+qQ=G(pp0= ztPnQw3^S2eZ#V zEI@cm0&1_Lp14huzsmLycpe~UDNb4UqVJO1=WwD3%9nT~rK1W<8 z(|rD&WIrbp^TcHcQEO_id>*Q-K=qrJCwUajqcekwiE0&G!^%Q|Fc!1NA=$Fz@vC|Q zMn*n?NowwUv7~6k{&il`e1HndOSMC`d_VlwB`Uyko5;xHq4N29nlra7RD<~%bWBi+Y=Qn@F|}5WBiR}J-v%+ z+l!oP*SHfpVu65k!4pOapQWA9KIzSJ&|FD~7x)E&UKUaw@J-T_VMv-_3eHR)oX-HV z`@%tzA;^O^irFXmj}w6+=Gg+bVB|>#ph8UDV!B?$*+uI;?H;9k8GqmVtMZG<@4lX& zNO>gJrH&bh(sKDP%|)*8Vl%Z`_?a2@g9U>T6JdXurzUik?1Si}0*F(YMY9<3#~aPR z{K4<`o4Syl^v5TK>dhlZfnA#P0~TUv)N21C1JI>pTZAT)GPJw?B7f@QKZ0z94p#L0 zrs{B}BWL)6C)E;F13#ycju5W~R&USF6kw*r>W~8v0MjGL^FM2_n811+V4&FTEC` z8oq5Val*dLfOmo}u8jHM`;g%hc~FQ^Bt zE~^q4;oML4WWyS|dAd0{8lbmlhN={b+k)4A9W2Mnf!6IQT;KXI;w4Y--}-`Fr}R*# zk9~ihI8Ww9s0ws%(AyU{;9eU~nw)(mbZK(C|Ero*0GZW*gW|U*Tc=(8F5CYY^M}-rK z3+mq3@eZDk2+e1CdAjTr=|Od=BEk`q6CQ*sClw!Rcz?56}9o8c3Ej zD$g&=Gw65=L4|6yu#MEjjdFQSlWRs(O9Bv=V1+O`=4jgDZkaK3^XD^5|7Eka@=Yv! z2(^zCFh};&Dxk2}V|a*w%xAn##j@ct$I7&vEb<$$vf0qVqWZx`Z{H2>1rP8RD05!BN?(D6vd7fGt1d?M{< zfzY7hN`5#TD%Ml9QBxc4%CmZ{B#T<;ttor12>XQwWG8Cc#Sp&`Mmp1G81i<6&ZY)#K8Ar53Z zSTV|At?^X(4XZqb!ezvboVL>_8+ z__GFz9C1Fdxom+9mMVFYBPEwNe0X|a2s`y0bxGA4J@s0XHs4}{RT-}Z)3|(lI!zRC zl-RadI%H~2`Z7g%Rs{2iy#FQ_%<=`+Thx(UUmuBBj$$uNDi4AYQAY3aY5o3KvD5PF zH964owvovc*)Z4Lz#96^`o2fPz0yrQQ`0>Q$daTjUo{yc9Udt&slqWvW&xRAt&8rw z;uv~%o=-lOg(gIcl}*&eM$-(lxH4n$_jyyUK`OFpgTy5nEP}>@B)kd5blDVTJ|SRFPw#td&=*E5PWGddZ=M25{k*Cl1Q9w^gVys4 zrNtsQHv`5+a{c>0k5~cq+Bq!f4A2$)0wu4DG>4S>kvjpk1lP9rni+h!n$uiQ=aw4; z#CZf}QUb7ZOD1{y`o4%dwpU0HJU()O#Soo5`^6FdXCf(HxC}jJ0;~=ko_Mu!aRNr1 z{k-YquVbRT_-jk__xN6X6&JEgI!DrFEdMz9#R@=XHDJX zRzL@y_rHmiOuXSJybN!=+TYZ=`?G8bFt*ipWoo!xE%_bI`DLMrmS~Z1N4Z2Lfpj9B8M zK-gg*Ap@JNs-! zE8LW%xJ=N{TTfeF@V>d7Pja6fMVZg6@8F&Moh-)bGJnHa_@__5h{k&tkjw7Apmu%a zkUw=YB1NC)X*h4~NEz88JGjmm-WvMv{-4t9-?;cd{e0F)qcbQG+VSoS^v@3u3A;d`=Mx*JSmghX~wlWdpDomV=OpR8vY`VjbwR?uC16u`gH*HbSY7X(JW(L zEK#y}vxZt7V|ariu{oZrsoh=Jjxsvb_vOh(QxcTo1S@{j#T@J*v4^oB-`rmZtdbD6 zE6T#C!OlkDs;9pN$B!v7Ezp@6GJ-jOB)cKq!KETU$Xau6_QN#zUEO6d$r_%FV$-Jo z>JtN`;qzCD9HEK-;!R+YD_y%1!e@nB&)})E-1T zBwKo&)e%H9H!xnqvgP2F1$JP~q?fVkuz$XBa74-(>1=E@REwvfoFJbd8;X@8<|zJc ze3088r*j}b(2d7$B>!F~83CiK?;J^iZ|3i#F6y6F)GCnPpgYPr`MbyG9spwZ|3ika;|JO=G6Y!+mJiPvP%cFrj!Jq2)ut~C!bE@(1<6S~gZ2006 zokc})ZIGwr1a7iKGp}$iPnUx3oBV1sYNETkQSgj_7BnW=P=#KX2{_r7K|^k?hbO|K z+_W5rDMk@TZ9^JK?I59d7~tP$h~G|90e?W$Ns~Oi@v#2wPEA99k;Qs?Evyu1W)@|& zW*YpI(zWtz#j)?F&gC1-+#C^ezt_+_F}3NEN#JWQ!TLkEjt*?Ub7o1yXbuWR_t zji!J^jyp@DejDn=4bYbt;_$8;MBY*Gz#01>!D0Z^>2kS84AG7xRdcI!Ub)W>0Qw$h zV4quPn4(KDZ*Rk+STI2@gns+##m!mpG-DIr;@lPiWGkcA6VLjTm8U+iYW^Gh9S;EW z#~B@Xt3gz-^eN(FHR*0fvYZJ({m1^EB4yBo^XzDD#yF!%qnM(9L`I2_#5Mcet+ZA>$g(4+35} z9j`l(A!V^05tLINxGML?irH)NzAA#qddrlQcyywq@_I~>{yI6Q2lzi#+rli(*>YCi z_K6I7LO(@hj~^!?w{Bid-E@1c>YzS0kL0!RA$x5c%x>gphj*N>U5+>Qy#jLDS;`d* zn*Z4m?VD~leDTt>y-T^k>`3UN&i#u$=>HpjcwWf-C=FD4^uCU z=<2baR^)>M)#E8w<6ys_U{PIRT)0m9)xjAmz@DW#uAVrx)}ug-s&jY>Da}e)sdv*R z_}-m#>to!flN?j^Jv^VZN4L9tTf4^675{#`o3byS6Z>S=Udt&~^833wbelzDxb=lH z$?()-mY*+}mTqtrTNzrE~umN0Z)gBWwabOJ4k35p=;4FHPf6&-e6GeyO}G^)4YH z`^LuCo}1(OO0lV7Pt|(Q)}QvRh4i`p@R^y3d->Gh-%heghv~)hC23m(0VLIQaL`iV zQWKVgOpcX9N1Y{m6whYyUV!XQ^3JRZgp}82pZABh5!#sRR&DndJqSG*$$a1(Z>B@l zFi3lAy*VPifw_faqa4s1sSQ@ENR2`?XffS+t8xm0Zl5WxqRI9_FaZl}B^+tm+}x6a zQ6-_hE}?Z&Eo=>!29Dcp5bk5=+qR?aFI=A)PEB!JHN-AXo(3dF#t2X*E7JKWQ!>1d zdw(D5te)%_uBfc4o5zEn2%BPKQM*_aiFB3!B2bedqC2X?t^G`F1?o4JW`q>i*pAu$|m2=x}Y!8}HC zuZ`F}*J%KM4OugG{z2!KO&~TET{{4R1A;o)zkE9Ubh(`FdRR$X*sDxSM6Gtuyt0fR zJmIm)*PgtYPsrBmtSjJx-H`%|lF0C8FHI#_Z1CefdELaHCgLA{&=^1Ukog>D%bC94 z&rwi zKZpvjWR@EJGZ5@xn#Y0r3`yX*(`l67_nL%>nlhUnTPkAD$a{fHj_9f;+FFTnvZ)#PJCoZ0y0F0l)Y2aAWPp z8@aUBcpY9+>}`AucaGu?5eOB|{3p)7JcKUr8|k36dE64j9ui#C_{V1ckW(UIDfeY#6CohS8e(w0i*j)*bzE z@l`g@B_6;xTgrgq(J?brL@)oWd=afRxx0r+U{9q?DwM3Lm?SysRQTl8KXBj}!VrUs{Pa(LNDf~oweM65Qy2_qC& zJ}ttlN=3z!wxyH;$ZSTbGjAeLfs_DIb&2RPoX={)(r>T`Z0GLF7~Sp%;nxuHeNW!F z@XIIj8v%ozrAOW`$FZp2((Lq8QJF7`_MOg!p&JTARMK_~bSqt-Nu>YF?Zmnq<_^yPqg2mh~0ddLC+lhGk!yTz`@4zfc81< z#NVh8^C%|zzj-cFA>n`WJIS(b+!TR%#lxD3g3vbeR$Wm(ZkHX>f`=>NQWnf9!M_WE z_6;XBzg_Jx`c4gEwvycMKMr@O48SfYy}_S1c_kjeE-Q2__(;6%2D+=?*FS3)W=J2L z@pgpKdldD3oHnsei#}_pSu$p?&UJw26@k_CZd1KhZt~N#{NNp#&2uG&{iY)95`JUk znR+5Cc(Er#?&=ivX@{V(7qL2Zk4f6(v0G=<6mD1|ss1}^Q|w!e%6z10&0zR1F}}}q zBinqh{GDzJO4)=x28kJp>qHP{exuwhykA_GZK#kXuE{~Lnf-VeE~n)kXD(3 zWIgWF*r9GDA7{q(7%ZX?GmKa&QHa!#Cl(5%7`S8SgGOG)7agcv0<0ZypZ=>O+&Ffz zBYq+}WKgd&(E3r-kXkCi;l@rDi{TYx;~1C7h5k+gKSdHItY1#$P)v6f&~eIWQdK!H1R5Wp~}0as+|uN22m`oJD#?xetvCzZFRASqPgSGdP*WS6YDg-^A` z;h7s>TNWHS>AQIPbB_t8y6{b=fl{FbdqER@j*$IDQus)-U0EWS4qG&hkp?Zm{i_v> zjSqN_MM&jG{E}2jZus(+%{-f%=v~t+6*)I%fI5O_TwU? z=rLPf3`YTL^hl@o$% z{JQ688Ov6y03lo~IXk28_71r9_f!Wo3inIHO8JZ_9I?*!`JC>@2q!{RJr>)f&1TIN zMSNBkEshKZw=qy5^*hkMpMjZj!7x1$O1xvXtNB+ARpiT*j?SBhya!(eCHv2zH~D1a z5eC?FYmq}Z#ubF?wzKM$ii*N$)EJ9g8+`DX4}8lm{YV0pYi0t;9X@+YC*r>^Gl6IH%H-*6 z5L*RuOwn~4jIFytnxS7$%?#m^o% zt7n=uRS}2O>7Y?W>v2i%?$F)O@(N2zt&Tuu5OTL0fCXmktkQ6v+3yd~QEO+ylsn>? zg`eI1v?2|xC!!4!7%Ihvz+}+4@p2<$K4yea)W)q97$m~Nc-Yr6l5M~n*Y?k+!(iV( zU%j#y%>g0dn+l1;{92I5mWau#Tr(J=B~=4~;sYT*o3yk-6LV{J%tiq|CT=mN5Qg7k#vKUals#%_ zxgEL3XsmeMW!f@d5#mN-hlPOe@qzlP2Y@$2itFeEL) z^4;%3{N%>;xx-^ri2h3u6iS_pf$=TyKe#E+7D-iV)2(`J5+IyAF{uZM4tyXbz0&43OwHaa{2qZ zbEGq9=sSCHq7!mnypls3-7aZgb~P99#QGmJwq>+MK;k zH%;v0dJxcJ^i`c0upr2OjY3TKNAdkZn>_o-A?(@(WGDL#;Oe85=;V* z&-!w3alAi}bg@5scYKDG$AI0kW(dp?Ehco&S~YS!eVyyPUx-RQ0?OJX`KRNe;)ClzJBcO37i7f8@Mmt zr_t|gaJ?#UIb1Mo+M!B*z^vlM!mgf+Ts`Moi&kuX7WAjBjt`(GZ?=Fho^>crw%X7C z9-8mIDmn=T9y7}Il`U`^7Cv(oN`Z7+)vaH}TpYAco?l+pbL)l$p16A$c79`cWclLdU^i6DymSX_$}esnlsGMT?$#m zw$1YNQRHg1kKYEncK7OcL{Qr|{=}1i;CO{xrAu^Bcv6dJ1Gt!21O9Pk3>{t!{Kivi zDDLP4Nsx10)S^W(W&ss;#)QZN28g1e`1THOqlBTBb%3{)sgpvn)6b?-2X1f*iuoMv8FcY!h(? z^&|V|lv2R_(s$b!&0ly5oJj{(>~`3zFt#Yo0~0C_$QR${lZQs|F*Ytz(1GQMmRg@8 zD0BCGw5CP}e)2zWlESkv2}Ck8Lw{ufJCW)ri)jxo9!;v`P`BBil0qQOELf8!`Xxc? z@;Uj`0v1c2sVOczGw1jUZx7sa1Y2yg8fZ@FNka;uN8+IBV9KQ5 zuW0%@TVN^N{z|hHzC}Ke9||%x9%IIuEaO~e(`14Y`vCb{6TGdA1kOD^Q@Oq<8>3F~ z!D7vLfsOGGp))2ZsojyT=dRs0&Eo`{V4G7&Xl8(rQ3CEry~-+rzk)W1!kZ%&?J9a} z(I2zN7Nw6zS|h*j3B+oF1>K4-Fi?3sk)0xe3Bu-}CEruMoxw`>ssSw4?b^B5{>)Hd ztyV@L3IO7hGvgkt_>Op92?@vN=`;eH;^C!4A20a}fnS(m|5G2Ak+na>H%@pjO4b)H z1v#!`2nO)>C^r91Q^%JQpdTDTu@fo?h#U;=gB79Q`}+AJt)vfy6vK;r^m1xW`gHde z6|jNRa0NUd6=C86V&?Ezz%kF=^kM1o_M~Cp|AbQZSQ^C!Aj?BiR?rF&H|g24g)K|B@n5l7*4P%_>`2WSWhL%9Hg>&q zt5D@OZ*Ahl|1Aj5#sYSE+f^7{zaEz2or2H`yvGvw=jx2=6A-df87y$E_xNtEg$D7d zlJ~_5o7++)I){${DZYM;uLyDOcCKlO5uJDjct54nK-kN7l|>Bx;N&NfE9)4} z`(P^l#O?Xnp?uNY5%?3KR?(M9sGPyD$LzCQLL}1p-$>WiP=#0~uqvTg^7}5pIq|nd zEOJk}<<|%Uc|5x*ZCJw+U|BF{#Ph10H`)(oM$y0r;bj1R;xNC;vGx`$Yl zLCDt55p4ofbHFcqBpy=&J+!%Mg2m2#0R zD9{$EMWS$CN1O~+YokC0?(468kzotLgWdHcUdkKo1 zfUMjd6Ja6)7p9jO*8AVLIJyr?mhQqa*UrWas5$|EPYxPb60Yd3p0-Ae&kcRZ&!AFZ z`wq1k>SjF=FLP-^Xb31O%UYFp{4OFad6yrSh7U#|vmE&hX6l9B!UAgG4;HP5Bm}iD z;T#~NBm3_E{5_H_0I=xeDe((3vfF8;bV*y6n|FnRUsM8XKv6jLtm4QR&02eVJFMrq z)blHoa(Hsr)d!nl%-!H}@ou>m~kU82&iIqOu00&EP@-J0{ zGXlz{>|;Ug_d}YJ*mrDWJZf@K6pzQ?LT9mf0&cyvML_L ziiM04N=L#wRQ%!H_)SGK|6zXT1kOCO-9Xa!)RA1UfAdlG(6@Hj=+1wQV2w>};KR@Z znu)KQo0v@a}c`TheR!WoHe0~t7m}wC2 zy4E9YA%=MiExFi>darxtuM=Ay$Ro#Er5bTnXr?k*WiA>!eQGBBT^=|QHKZn?F$!&; zEz&5E67yS9>I8`j7POi)jGDq}@pMO|fh^P%^M9Jw@~m+tgj7>ujYgE1dXh6l6~ubF z@!s^`Jzi``#-Yhl>@*)=fD2Pa#+5AS$KW>)dVU!pZhSkuj|M3TYw_EHjeLxuyE8XR zL7gxqrhNa~E5+x+=`+WHU&cgCtH6X98VpVYPdn$C%SV0qu}F((?t+z3gc8lY2@GVH z;E$hI8VCg8pqaJ*;VKQ8$t!)p%K02hJKHbEuG_6n(ykY{h zwIO~jd30!TWWX;noOErt!6d@UKPujy*m{=PL$&7%YQ__6G62M-+h$rLT-)svp$vyE zt=RR)9a_iC80roQ=}DBvGVg_NlskDYm@RT`EVtHIvVnjuw*1aD0}XF7z=bCC6+zP5i&ww&QLz zOqio_V#Ej?WXz_iUeL~VLs~d$Nb;~5V)`s2J$7K=B z(E6i0>~y0Xt?QZ|n^w>w4VR}$nj&OY0Vce$^uo?j&9D30PKK;On8Mpaah<;n;yVKnrD6qb z%1za#hNm?wmGyUCHGgrWMxlZXMv}resr#q77^&w6_k|4_4<4nQJQxaDJQUGpc9^Vx zrx9k|a{qFi$4BrUNe{%48 z@nJbbZP&ikjes}%Mq6-f`iP_}bD!gU(r$7uosS&RjqW38&SMq7Mc{VG6?S@NxA`s? zJ>wrRN|If>?pVdqogN+6p}EmKrI^$#VGhv0K74AX6{XG{edvz*ZK-_Uk?3k`r~xe( z$fUHa>*VyRMP>@mer&2r&Qxz^qo7NNMRf(~EKQ2O`J#6h6FWiLL1k#j*M!h}3Djl< zjuh!*w)+YHWrFo8C9s?P8o+PtX|V4u5%ZgN{KNZzP_r}?-oY0ZPzU;>(5gZ1QbEMZ z6@1Lp+gp1fB&hF5RMQM{p8@LGg&u#y8GrNdBNWuL0X@D2Z&U}DNbQ_iM?mYGg=72A z%w}Sy+ud019yEiC59An1tDIo~B^%<|FB^PQtCig78d#|{(BCIZ5B^k}+4$zT&ji_x zwyhf&t?=Ie^p+-a<1aJLO_nWR^HEG;hm#53e_r}E!~a=L?$Sd*{RG2Q?y@uGjZAG+o4ULpPHr^)Y$NcQ0MI%WpbakE?eq^Z;8?5AHnTQisGpXW#U zh~q8=W=R^HN6~6HC|1Aob2RD>QXoA+N2qiJf(u*9BP{W{@^H!)^O>C}z`#fady}-X zea;E8WPNS=Z1J)^9P1BMuE9T*ZM1;xkJ7SAjAk;*C~+j%F>F!M*c0W$VY`|Qjz|Ia zCw3UwI~uJ~9rquP$5%Bk9nLzRxA2=wgIAV2&2=jaUMK8V*QCUIU9%*^1V(k~szF=Y zBfxgRnII?AgKdHd+MpbW*MSOqg^$qgjmTc7^dROX@FqBk%|WUD6Max=Ci!-F+`*IC zGkSGx@+{HE%`4wHG@}sCkI99TsaoA6=ycG&p}&J;bN4)_wisQ^-^ty$yN5T40H-6^ zB{VcmBzEYBWMS+AkgEL<;>~j96&D@P0gC=-e z7(RcN?JOAMnP|_D&&!dI@C&*|tRUK!4?YNdmp`w0nC7yEI8n)y!biByQ3;^5q{g83 ziy9j-`?0F*95iSU5(K?^-|?hCG%x=w8-h}WRf^el3DF8f{%Ij>33DMX+Z2hRVznd` z%S063TRg|PG=9i_q;vtqo-BB3aoyXqjsBe-Bb_$YY%UOjM3_!hZ zaAfnxLu~(wjcKq1-WVS_#A=y@hk1iSCGhkqrz|o$aix#wcobu*uLh>|@Lc_uA$Y0P zhSCnt;hdFO3?ieeoCD`WH9`3@v>@6W%zNU3z?j==gHap!`=Rq;z7n6l=iG(Q?%0mO zlVgu05_~?)WcwAE2fU2~c-wAEg-}~}#HQ28l?4+p)Fj3pE928dxx41p{u|!nb*(Kf zF#xseW>k=z?w<`dF}}2R-qgI9K9c&HI>`(wu1@sVGNqGfJf&1sAlqRE86wh7JyC}Z z#W7wu=j|#tS8hq<#CxI1K2MhsfL4u8Bv^@(X_yJxr_Na<(-r9!;Ijjsodf&(IdKLk zl8b_kE0!uCCu<^EppJ@$Q&z5q`rf}a|6JCOfSjh@bJ@|NUYKh-`HbvTTSzzHH8(<$ zPFZ`Bw+A6BY)?~$O+c+Eseq(|xWyS$Ar{W)`{(9(>>8w@cw{|rt1QAc-S1A9UpE8F z%op>Mzx9)LRgdC8sm<5nErh9qXbO91TUMS#^@)UaC%?mw+m@rs~ zD@+3TT(qvT#BopDEtrNGX9Aw;+rgmtPSRwQt*-Q_P7HM^2HbA9@{Cw6v1Dh`&D@?+_}$7TWj8y<}_ z^ezH+_f?yi$`>kSSMZc%Zz#StmS)1iL7gvqtHo z%KEX3HJF`4zjNI4gthp?$qu6iY$eu6&V~OaTD_Z^Brgs=iw}?{f%zMvOL@>x;~F9`v+?IPTIOI4A`QuM_eA1BW0fSq666{0m2ukEgTIo`c)#sRVd7294|A8!}R zv&ZQ`2Xpu~oSME?d7vnu2Hy1xyNBL>#j*ghD2Pi8RX(n^?HxwFPoJj_!mimGz2+dZ z>aH_K_Cl$hl9bI&HRuB2JUWg`mBrslHo{aJj=f%4Mk#x% z;Xs)Z+0!z8c!IL@JcRjpI6ZmN>R821oAnVGLl@fLz^v7(D#y+JebdRes^;G;JoHaS z^YScAhYH?yx9TZIzF;$Y;Zj1L0u;Zt!Wpm?+P@G4TDDHDfr(Kt#)od%k2yzUzzPPO z&=)wx7OzQ_fsOtWy3n%TCS$_bHD{|}yisg$B^8T5U=yN0q*J0x`AW*bAG1`;D91qn zN@g1L=bFv~A0h29)jBYMHiDKloSW0Bi6AJ5K%R!PZnE@`vam9HIHTZMEO{r!uQk$P zS72q@qXc|1wCz6ko;Jynud3p`KcwyaJZtvAt+tAA-MWf#E6?yYH7ANo9HKgWwZiO# zmCcW(S1R3HmMrk_>k13S^%%Cg+e?*YtMULl!^LxXe_uyaBXx9+nCsl6tr%B?pmdZf zE-=%uOdD~a{9YI-y7Hpg&i2BHnBQH&d;|UPeVf080})kx$1eza0G^T@R1($PJaTSz z3FpRZM^ju|v^Xn*x9FMG02gF7&PR{28crxl8t+m^Wezd?U8A3^zPJO_DcE@jix;D% zTR(U1nDxGn6~oq7S!qyFT>}mt)?;1&0(PLoDc$J3M2p$3s6KmFa~HE@i|lqvuA0xZ zxDtpg7*OTJR038!!cH@paB{UeWz;^;f{RsrHp$|yiHj`#f;iE+?W6JFGpS3046TeId{*=$UGFM zVnX5-_H!p=Zz0V|Q{Sj!{{s$Q$Dyb3*3&qTiy=2jlroV}j5Sg>Z%3?1TeQ80x9JZO zxK22vr#aP};Kb3M^A?+oQ{-z@jA?nrlLL@ExE)uTSOy0P-LeJf^ z5NUQA1;$E@mLy`tE6c%S6P-G)H-A!gZ_MlX1VlG$ZXbvm{3M)F7X+6Lpn=)_ULpV!G`cn^bcs#mBJAW={9Qieo(Ad-p;#GiQ z=?E(}(INAT+}cFPzTIF_8=l4~O(KLwdTw*QmcJwaLbbIi*xb^T#dy$#87QNzB}-{G zc}7M;>(dxXY^&t>1E>KG4s>WQnqv!~Xl=ds+6)W$ESL@xE2s$)EXJ3UF!XIIaFG!K zis3vM%IF3voee?op&;(ugG#IsphwS&mE*{H3J$U_PBO{hDUsSi$8}1Rs!KpM0s_Y` zRra&N)sL${upSp(-)pyNcLwa168hgvD&O6<3)@iIMtohaLG0`n8ytd5?vs-E>+IOy z^Vs_--uNHnzpa?3EtTux2hxlAF(9OS&JjZ7jm!CU$i-4w4UgHp2QEX zYg5S;hwHLRE}ydRw_0u%d>4LS4JMAOd^im#TXHnKgc8SEZD{@%ZRgZ1O0aF|W!tuG z+qP}n+{?CY+qP}nd)fBgeY>OM{DJe5QBN5&Dykwf=Nw~vHt2oExI9C0b`tfCk!ZBJ zvt*kHZS+y;jNzBmSyDpcRJNNO(N7nx3d|JDMfRkmZX^Y>E|I(Gh-9)bI|Q^4xH*&5 zSx$&kJxm;}UZkmZ%rW1Z5%(zk{6zyUM6L#r`7x7OiP$#@tu&H{*AUfw!iEYjArG+;axSrnzqUVfj@Ms}-Gttj$P;ll zSN~nwtCz>#R`iM>Hm?bUL379}oZ>Ke_qmzAIFho3#XR$Z5hbcu=tfD=a){DC90#k7 z^zbd&s9)KLI7Jon=)&Z2J|HJ1W%U2#mzBaj&vhLlxmRi2z+UP!v$1HVz~=TFK?bSH zZZ3&B+}p;-9x#EM0w5dUH#0Y%M2x(p-y$rE3~p0V=HJ^XC)gxqw%FtBxubXTB1Pci zEr;iAHg%f7TClqOvSRL;szu+duXx3F(LNWjIfaDGhhka?V_P@@l)I%>&ht{yyP4tl zgsamGy_E>Dan6eU_O4J;&2W`|+wTS?+8lRTS--^_r#fn!Ri1P(?>Ga@bZIzv`|LjP ztbE^N*#oivRaD!A>u}Imo&D?ev~0T`vi+&UxEI@W%5AtC8Y++HN~nzKN5RVLvDOVJ&E*)th%sTRyL$w-F1+XP3~%^tyVDw{zi~ zWiP*XG*W4~l!u>J`7O{{xzbtW$_}-9uzbRso#-DpiJ+~n=&Dq9umBZ}AXN5URo=8J zW)YRkWEwrvi%&2c*Tac7eZ&JuUcD!e72fRv!|dyexG-8sw!{Yee`T_)!C&B3ZR=-OJ@CUU7-#MK0fl&<>13HA|N-_K#cu5jo zAQ4iT2`z)Z0-*h!GNo=%-1x)K6#h5nw-P9vG|QxSwP8VDKt)rGI3<( zodA|jS(6$0CX(u8PV;-@ZFEiMDZaR0Rpx1xYq5zpIAB@<8{N2M>*O?gQO=c~^=VzUt?t)Y=fm5t#hRwgZbW0<|G^3V=K4YLHZhRn__ z2ivVyqOJHc+g|0%C^Evb9@mEqv6}dad&qd?+B*?|z?iLfx>QDM2~$mITbrg{`MG193D0G0#9^jfkD?U; zd($~-Dr(lo{t^qwVpL(#xvw>rm923w&&C`4MpDf4Im(9~UHI7$C3urT11V^TzFG=6 zc?Mb_i4@f``mNNhqcCTv$R$`@!FOFJ<`Lp)GtUWY5yW`p&)R_U7?vdzP+~L*BXbLCt z$;-{=rD{Yn?6+D9rDyzFr4nJ5buG!7VO3jVbZE;el4lgSXB87;Lq=UC6FjPxQVH6X zOYt=Bx}^jyXMMz<<)Ys(i!qYXJq`AkQPIqQNg}QxT@~}k-mI0F^kYi;JQqK3E+XC+ zLgHu2yfHgjr&YMuFzU4spoU*)F)FS4JJ|`&5bV=S>@XPC48t3}7BN3sYq)dEXJ@B` z5?zco^GYJ<@In%FpZ;U6*FuVNYwbCNP`b-VlcU$P<5+FfeRe#Sf|IJx(Kc6JOH@dl(etrJWl-1Pd{sZr54)mDqS>yENB(x-SSsAQ6aiBG;y9j)e&_%juB~4)-TtkI(z%Sv{Di>RFgF@wT=n zM0y`tY)b91^ZR`1iA!e|&g`q9DZ=jCKfcK>&Smv7gx#5FPCp^ylEyQIn;oLzY-}iq z9Xzbt;YK9c=8<3TE3IjhV_+!iZ27KE@*c&(4Wby5b$a{^9F)uI|(3mmmqHUKLiPd z)?`n0#GO+6+|`oqsGZJ@nln58{TwugGuvE<8JyHkA=F^G2==0BL+ANh{P?fumBt|N zLH)19Os_x)WAJ$E7YUpPB5%}ZnCQ+9vTD6Ta8>hyw>D>e;+JzfpZ;Ff=m7`={fGke;9$aMIkH5Db7PAPn4`wIA1*QV_$3>}K|2k{j9jwQ&S(l$L&L+|Fi=pj(MtR2I$dSPDk~_I=1Rcq8Y=BhB`Ah9= zflTAB%$0e62+wsr4(=$7DRPB`v}f`z3+2e(*nl~E|DD^hB+s~SuZI)Mi$h@rLVZxX zQEMe_RT(XlX###7g&wF41K~Ydg!G#*mE@lMl#lHyl0SyYQurJp4P89nxQG9KJa6Zh z>}+dmyH``J;*7y!(7$qCXJEyCE(!H&LVkN{F(c2hQ#Ur>U;VSPKO`7}j};QOcs?)p z<~Fokt?*`CqsdR|U3zzJCb}If-)v_7-4wMTpOhE+O$nRB^zl+!fcabkd_U|K8(W7X zcs~ot11?lYyIm%x2vUIoEyCAXu-ME@VMkdsF(JnpcOJ2Cc$8Uodw)qdIz_)gDsOSYsXUCzfBJbtGBoE$(S{2e}^povw^he^$aa)u`TrD z>Tt(A-1D$Y?(%C6ygNjCP}8S5t(hJLPuLm!jRZorwmU=SkVK1+>}6C&$Ys5I-2X>@ zPErp+D zJWTKwkHPd}g71F(d3yuMT`?AkcFNI7qUaFzCe>l0Jumyj>ws!0Z-wRAfW~5^NuGTK z?}}zbiA60Aws(Cvp#Pr+BYPy23>8Gw2V*Ka(&+>Y{LpaQp5&Gj`qocZ)t-dfh;gv9 z-&>x!OTe7h3|`DwbX$ZJwWkH!LInZMQ#eUjaZ~0gXdH$caqmMcz0UKF-31x1efI0b zcmLo5>gz<>PPDpu3J_bS{`ba;PRD-%o>E&#!;!w*<8EjegmPGzvejg|2cSr6yZRq; zcUnlq2k>s@*WH@jA=M|p9G2u@Gskl+cNz+xK$BrMYd*&s6C-mx-$iGiJ`t4i;M>JPcrnTOjqM=s?O@0Sjv`86Nh05Jr`ObGuhDLgt<^qC)^A^of#?`# zREox*doPQ6s`XS!6w%Ol5TsD7(}p1UVz+ZY-=RFo(jbfEPSFlQ*7APWfG34gK92j8 zpM+|`fG#wNMFx!gT$kLIK#pO>#-K+(gNQ6n-^ZKhJoX0_{Yz#S5e=kG?>W}k`;$`{ zXkK**ry!3Vh8KNJH`v9&FJ`8rL}aE&B>Rf&n3MB(MsEF7!gf9kEiH)!SrNPB!$##R zAY_%hDFc7HV#1V6+@h|u_`VZDG;`j@L)MH?HKLo;I&aiqd}R>1vavpy>yY?rO61H639M{ocNr4F>O2)TlCp4ja!Nqz{@zNg4m~v6vewZAWg?h@EV?nQ{IZKvh z+?Zb)BFt#bz<>w3e70xqeqM}Maa>6QBc2KM2;sWbx@PQ=A~((%wjnb`Yrm((e!G{i zG-A!alz|>|Iq0!e*POaVXg#G-%>zcO)gv31F&{^aW?g(RWk~~?0r|w?wv@J<9rUU7 zsS9(eP_wU}QA>KfHlnHgan^Or=gSMqq}O?44iAPdyO_E@9DA)vqe1>WvpY-pr9A_2 zE1Xi|K%&B2yx09ww`l2wg@7mIARSeuTO*>%)$$#eqOF@GZnd|%sYCtaw7cXDJrJ)A z4OML5UY@v&qIIr8Yxuaap>IJ%2h0_de}ezD{*1)E)Ex5rP9w>*)zv2YuT z01t055+UmWDuga!^@G2&oWTiL0&|cH6ZHx6Q1A8YOMi#T5)O* z+7+!@KL2p&c#$bq*>LTXtfvL4qPa9~R1=D^aa0eqD>86ylTlLUXlTDly;d73G@ktp%;J`irM-UC*_4!u@~=#ld6K{U`AI*eS3L< z(glLcAh^pIL)Z>92$V2?is1*L!K-Irx>;0F%8>J1}V9FQ)1j{vyKz7kG)#QPg=)VZQ`eF zVlUV6)Hkr~yW*NRg_*>zejELIvrXR26HVNaag}2MB3}}rgr(VSU#1#p%;tP79cI$N z_IxbQvysicEFb36GNWWaCQ6#!Q&e|~TW08vXeEp6=+NYxt?^8K%&h{es*;&*RZ)UJ z^FIk9a*lv|Ys#%o-Se8@PUN~rh)8OgyJom>j3J=Fx&=&8%I=nBG;-=vc=eWMhi>e7 z<8SZ;iPRys5zE4z2e$u0L`y2Y6Ud0n5<_u@9|2dBPSEDKI%+^Q>4Y$gMUTyjhuF5r zjBy)LoD>K%GJ0O7Z*m$zYa>bGi4-8C%kSx+CM_-z83ivNTFyaVd!IiD>L5c`R5xsD7`A=vKDKE4vfL1DPg7NtRq@C-5MaH66u-F zf>Ek4Vn-C1p!pw+!q6Q-D@oh;85g7Be>uPAR{m-?I^7~-V{|+`Pg4%PV}`xcj$s~N zy@DBkX^r9&dojiUZjqDUn<`Ri&=d%SrGWdFX!&s59%}lWx^U&XkbU>0ivnQ;UHjfWX{@7S*?`r}vWC)p{&}N@%1GoLTnW~? zB_r8)>_qhtwigb1c=TR)UqiYp@F6uUV@LW20jT1JgbJZ*L$aYGz4|LR*s6}?=1ola zDinCm2Sk&Nl!h2>yR1}24dJz;b&H=~i*KP;Xh4BVIFbXb`xk@JsN0?ZrO^N-jJ8Kp+D;9jM`%QM+W??(V-20jo}wObzHpIIKSh#uNoUGA z8}2fbz8BX`eCF+=ze+vKK6cS{R4V0#S~%rE^EX%8$-CWR|0LXGn11|*AH1Psx6 zI_tu>%I8+Q`L$+yx2^tvSB+ckjvo7lUF#H$(KZWNNC$nrrnojd|4te@h&3?GbV=QD%en@v}X`~>k?hsObt*~3j?8Kf_gy$QjWvC` z?-dW&ES@3DG*tXft5zdnHIH4(F{?XAX}R68kJ1Wc(E#_Bi0zy?6~Zzt z@~U|4oJZAZ8eUT;m{dy@XJBSXYr&mWR5pvh0(7fXUU_52m=k=&&#Anwc()K2gWn3( zqYC{`VOLoF@rS=*D8GB=cYZ83cfWAn=-`>t4Pa$D<^|6U%1Z?T1NbSnCt1|6JSASdSFct`ZGlJY2o_bMC784N#wlX5AMgv3ADs0tvHv}Yu z3LFu%u}1?Sh%>e^FY*GUKbzz96}mRqUBL3n6Z-kV@cGZpfI8BzLEOwI%h`~H38fN5 znN=gNGDQ*SYbN%Mmq5}>xn@A8mCm9i1cpM&b6S?|rT}U%R9j3n%%FESnMjV>Yjo=q zvbn`6qG-;KtZBD?N*)MUt!hREkFgq?(Q+AULg;m@53~zg-ogZ}6QVS&8@QFlR2Q`r zE3IlMXbV~#kqcTVeMJ}kaSynWrd2da%qtpS2E15Zsn84Ui`q{HA8lRQRBY&$+j0SP zXP6qxln&=zh)2`uOck}|@RGHEvPmfPEj-N#7S0j_$ueY{@|7l;gcT_DD1J97Zrq)4pCBt63yrxePQuW*c01ekr3k0G4t)& zJ^``k%~wkW`rkTrrT;#p5?Inimd^P3`F{>DToO=VJ5hU)ep&K9QNb8V%4;Ia4k_?W@NqWw+Z1wsB<-_a@&c-He~23pa~>A* z8JPU-cpxq!8d)$QByzGC#@@{KA7jD*VusjENppTI|I7R-4x&K@MPxKtqyY7YGERi= z$%$R~{we2Y@ctnvL0(wg3rz#BGT23f0bsvi486#hh3ni=ig3}IT>=O9`FEXc;T}an zY(}8LIcSVY!S_TJOBE(LL5LN&1U|~B2G3F_w|B{}KEJVLGC#qS*$G5ZwV#lZZUk!< zsrmq>A=K*cHNAOb`$_t-G2_WVfM`J`VyxG6=;Da{_C|C8DQSCj?gwRB3Fv6i^q0-F zoL)k6h^!YHwHcY&Qn7Zl3pJsvGjRKtlUkk(YktZrhUFi_s%6zEv~r0y=EhE&1m#Eg zKDz|+En}Vb^&Q`+z`Q)>{EBytvo$)mH)(_|{cex!EOh-paDz85pxT0_xBA7}=O=9L z3@|P3zR<+BJT^CmB!LfE7+@35w?-CTmCBbNd@F? z4tit&V;9B^!L#xK!&|8Y_r-uQv|Cgn*=MT%WaQx*xy9kx&vToW{_RR7%o!-Em^#J( zbkVU>&Ml-)I{Kfb`5JY`B5|kbcq!f|ZMW3Yep{}o*?=V=er7i<8nIkn-MD=!_;Gv1 zec2R=KM!9oZuZ;qN8PTF*YUfU2xl-xAp{o8U|dmJP@p-I^5W}e3f1^fx)F-1KDMN0 zs0S@89vKTQTQVDR1`Dd5D?E-}fnw@r>WFi>1NIL05YDMH#eXLz%~Wn_PVN}3(dT3w z!qU9XTVMF}Zi1c^#7jr_jSPH2-?RnV8KcYQFHwHFav%Zhl^t4wYwe&d+>{8;v*0i&Ow`^{`a|$2Xx-JsdzBw+0H>L4!DPt44lp zy3uFIY{L9YFIS`6qD7(Gf|58!qW17+aQbMT}oEXkm^68>5qZO`b z$1^q5Q05Beo+kd*y+|48*Tf3e;lOII$q(29g58!&NnOZqm(2xRm~klpQyl_JQz+Eh zA9%N}H4DB=oxWHumEt%cHw!tOKxGUPpNzYb5Q^{cJ|(4_YzJA-)sde*iv&Hurs(JU zl1}6K_YvZ>K=lq?tfW9eX1PM0$zu+P6lr8s%2!WIWhH}oRt8I!3CS{nRAo>F?=-Ix zMD+--0E{_}89-L<*|ix&l-^kP{IcR!?CQg^U}{p$!X~Qtcf!gy3$u#rio~LbL2=Gjze(7Q2j_0tVv2{)s#O`S-jOON~YhtA*+QuuaqmyaQEVyG2|D; z3OW8+1+4%|x*l=>^#ep)!ZDar>qP{A8JR=>cu!iI_4W-v+b8nDDI1uLQOChKwmayS z7s%&Hlb-m8WH!VFle(=&`<}mI-@+if^_(T!pdy=yu5}t9D@n9*V1Z999G3a#9l)}8d=0B4&ttnk zsxz^VTkxcsVGm_>vBl{Hqn0^M8~2Sj=eJ+8(<2SF7O|XIZz%{CGAj+s)geXu*y|td zAC2D)?$0?#ztrn<9YgeMmfg%-UOcsrIV&95JfXQOTA#hK>|>VFlpj3mO9Wd+c>BRq zPT3{Z-;KozREu!(w6=l}S$e7z%aMFJT7`_@FXEqK{6+HT6DmA+JY3-SrkbFd#gS<& zoE{K~ViXNfy%8TyV?_NtbIOxYec$`~!Qy^U)g#qhbW4?@GaRoVN&m?_C}qKw(wRVp zsFvapE{w!rd$?{37Iw3=z*7Fq%0@GYii<4-GnNmaiB%4GRwVy(}rEO|6E^@QE5{D zV#rFSn4$Ul52y571Gft7M2Qjs0sug*!GB>oWA0#S|Ia6_l*~>o|*ZX!>g>==p^K^}O zhj)iL5$@$Bm!H_=R?jb**pr>{Z*u>fBRZ@Q!?|Ai0A(12fJb z0*&qECWbOk6FPgR?1YJFY&~^YJDTQMDPPHO&VZ{mUz;6_vlIvO?%n5M z*h+`AE%Gx`I9nu>-wzDy2V^Y`#^BQDw;{P>AO5|#)+%hJ_ep-Oq0MM3puyYB=NJ;q zkp0NvEffwI^Q&<#i_G^@HW;y{ZBD|%HkL0~yah<5q(|m+$<>OLFaf1|2Hho1$f*0%%$a(xI85DaTCA)Al76vLos3g(Us zKxbTVxDpWb50Ql^0xFJTt-6E-8FpDN@!n@ET96>>xYwgBtu=T}xCP<@ViP>s{iq!S z7@!|e{kd%g!g{817`#wclmOsUx2nVYn)chxs)Vjz<}Qbb8Tkl5o@%`i9?*OU8nh=X zX~i|d4#Cex0lt^29>E5U>AYdZK=%xnW2SKk)aCMg`1Nnq#*pCfzZnn{s#%fVZm><8 z$FbQ{;>4km=0Qlr#zd4XfXZ4UY)A7?=iAD$-d!N<+D=Wp8Xsy=L-afepL;C@tX+a59MJca#)2tV zp^0sfjJ_P*Oz-PzyFN0Iw25;#mU-(dl1iy5O&WTAN_GBR2&v1_`4KR1?1o_Yen4DM zV_(Cxyv?N?A^8G{31JZ6p%tke)l2p_Zv*(lvDdz9j4#31W0uuLq@%SnaCYJ?lt}Nw zSDy087oQf;D4^fa1@_g|!^OtScsbsDf3^I~H#$VT~*Z#FLqu**g>UTqf?Bq^Wh^_{PI4L7{@BDKz>Vn|VY)4kL5(sS4V8 zskAgF`96}_(%lksK26%8m}^n;z<3T%7n5My&~Kt$%IFmN4_s^nY<0mybRTX&JZ>0vW8t60qQ=#pK;!79Yd`^t_GJ~&~B)`FJ>IR zNQ@Dxtp_;H8&f^9$Rx-F*u*=asb>}@oA1`nxSb)TO%NI-AzHvhw(|3*OaCi($l>m5 z&sikA;K(LAd;H);EIR5?;(YFGx@;BVO0)a;us&&Tr)EFq^MC zjng?7HD)mGHz9PODPfL-l-Z*c>v(Or7x3V^l^kvgB;v)H5H?Ic2P9Bmmj!5oBu+q< z;Uaeh=dfczkoUIjwh&I8>sJ5qJKQS5;aM5I!DelU*32|_z!5Iv=*G0d6XVljmj`h~ ze9n;}r>rl0N>?9WLTQIm9ly-Lto5_)ey{#YELZAjv4**Nn%9NP-rb$jSl-L3k`g@g z$g%^$6F1R4yUmk?FRQyJ7-%cMzM_4kCpaZC9b?XpR}GX+ZjW>;iK*oLfKuBts66-@ zImZTYUkf|oN#)347!Q$aU^h?m>M)cSBC)ji<@12y`H9zzn3N7}Q!=>pWqz7brybOBwLpGmHS=^0&0%WEYLpP}C~9H&`` z_NJZwoNKrn8s7FzyM3#!psEsZ^*vY}Uw4P+r+uuh0P8Eb+5|iuXLg5~odMRRAnrZb z?f0Ag*`*-sYp~iD?shd49j5LVySvSAo;}>{PZ9^Dc!+6uBg`{+dS28|c&8fM+L+I6ZH=~SNyL3WTLIPLxNe00AKzw4B6&RuY9>Klz zDN<9X5Qx7$_0f8bZ9sz5oAV>tK9-!v$;qoFN&z5a#R6i~TcxE@QC(k|<2N_d$}$#P zw)!WBYY$za9T9hp%Jw7*hm*gfeEe>gk~y`V#{3PS3&>R$^Rc6gjk66DiHPLl*Z_oG*|*{R=4==8_yvstH3yBwzhjoIY(dy%U|-2oh@My&k) z&~31x0mKBAxHcGA56B1ALG^S=xraLrCg!X4zszvDaq)R_6MfD<8ZU3Zq`}wc25}be z1kKdT`ilDkhp?dtWAnxl=xTAgKu<(6A#3XjM7)20ib&-a4B0ZM*BsH$Z zGo>_EmoPuOvXK}zV|1GZ+bM-@94&<2bCu45arrF+^}`{?krenrMD6MCJP`{x=E0GV zS*Ik6vPdLPhwcxw2ngty@3rKg((AQlvbaM7zG)zqpdv8&jREz}KYo;GLfz!fY!y5i zBPS$HTiI=_G4I<4@Ik>IQM{VHqK56UePW|(V@66$8En2lj?B#Yx7hvxm~!=Q>~gHX zk2ird1T(?###2oCd=QM_pSRalur;14Tq$l7 zVVkCxQ(#cNO@F9to8Y^4V6PW!e4ZS5x-VS#^>n%=8&jaIpEeG(F0l^6CIeMh<~u2C zQx1<52xRK-BBe{GXWzTk5XiT?zM1hzp{=wgZW(Xyu+*}8pnoHP+%_Wt3kFf;uOUr% zUQL7qD{ZwLcCrJX10{ugjNdCFjZ8a7vmF`EwW_iCQz&0`ONT))>${QrEF1!Tu94dr z{cs}TEiov!pk8{mf-1Ax+L1pe7<{Ylay)S{JCzzV`2JBcW%>bjM0tLYwF^9&{N?vS z%MTEikJ3nQj3^g(lrVpIT}}>AvDT3ad|(H6umg(V8=eYZ4uG+P2y_N019Dh5k3{I;+HvB8CJnT|PeNBFkbg9S8pWYQoV0g# zIpNvdmocs*gnoD87^z@O#{h7=M^Qv;v;ZK%d&m4SCa4P=A3P2Yt|o1k)=85iF}ea~ z!YE0x1)D*3p5S0dd*^_=!5EE-xl3a9BR5C;K`DF0h=bY|cB}~76hSvbt$gfwKV{xX z_rPF}N0oV=82w2`9_5|IFk1c>;pAg_>1RKCM-~I;G4s1xjp%ksp7zJzk{C(4Z3a6) zpZ8;UVS~j{V1TkZni48nCWF3^TIbEJ;+N)PvLIF?g6s0t>!%W38)^g{BH~61+IZM# z7f@TT6Sjw_GEU$WuCmAWVQk3$N&CeJ+%I}3*x!;PZ{uHxh~?{#ST*7e{lUuz`NggR zmRC?RZ}SbRs|Qi%2`;ba)RCP3Zj=wZf^FBb&v6O$ZA`Jvq%fX8*J&$){q4-0A^t$A zztDfugh2$o3$nr!&4|D9~BlMAS4A!R2Qos`u zD|oQTpU#vr9r{;ameAWlB}r;0!NcJrSZ#s!nqCYvYG5~Ws<3)6tVI842<{h;!!;5QaiSlB|ilcDxtY%(eTroCPeGg5K1#+Hs~V9RYnDI zVMeJxB(vqfS6#Tu8mQ^t=0)x&*zm2;uB)2L4ZSE!r$Q-ql$Cur@EMU|F!%Y{Q0*yS zwy1ULwE2BV{kTl%yV3JvJ_KLSOLE?yD1KGCURpBjsAK(3tg!2^J3Q}j+hQy` z{8_JHt%iz}E~g@X4=8RU!)i8Z60%=?s-I|ceU6v>s7|M}$PJ*#qxIq7CT*4v1g7>v ze)GK`8`#eR^BygU$K*r1sU4l#Za(^Y;XeYA7ZiWh?S|j}djHTZK2^4alECDCC>szh z(eiAinMROiOX5svTe60zO^IkLT2Ld^w5Gf$6!1=qco)y(nHKt%%=ac*P-|Q2Q#aQ! zFQiIe5TrCJhK06g=XTbtkQnhKS-`g~T0zyMMzj{rt1T|QblE~O=Snt<|L>;U7S_JB z$U(v(0XEs=Qs!}%TNQ}|SA(;w0uiy@P zG;G3;e{}YAqqjAmhhnraHJrz22D0L?e5%C)&iEt!XW>eJ6$s3O4B1*cP*s@_Zpkht z)Y1icl^*cMW-F_Xv;b+hg|O zg4iU!MVnYEvVlEK@gR+*>|l?Qq4NrEi3k7Z_K)ql!G zpZ_5YdDNp&1JD5gNX`BW4G9ZFXA3&x9iIOe+;;NIaH_JC2q!9?d~I^BOoc+a(Jj#^ zZIUSau0s`%kysuNfDS-Pops!1?>^_vu`itH+;N0H)h{D2FW=V%K9|Sq{Qzn_hxaUw zu;G4WGK%>X>GWqEtMBdU+zShJ>90g@Z0ZTi6lT|1ZvCtgqqLY}h6yG1odsRk_FZ?s zI6odspC#USn4=2P`s$kZFK)>cMc^z^C9;2VjOEvs+%K*7?5>_m=ap}6 zjE7=>sMTBhEEX-6F@Ev!@Sv`o^@sWjzM4K5m1B*W0WMC^(u4t0b zqQ~qK6UXfYy2qk$KMwrQ*#Uo3`0FQ<-<7Rf6nP)b-FkrRAy2^b$kdo%zb@7fxDw$y zsdhQB)zT2_WsL#6F+WQdKBUL>)IURC(Lpq}+HlfLK$szYktW**s9Sk@#vk>a8`slo z$4lM@GxRW*Q^y%!pO}2CtEWb1pFdh_;JZ)d6$$fS)`Uc>Bm8yut}{T$T&S>@k?7ql z254HPVw$tq)#LlRCa~?YX3T8IG^dI_<^)3#cxU(I+k_t&CT%Bvi!lTzJYp z0UDSmCG-3K(>{>iK&g15{i=+Mc4z~4l(Hx~vKPX_Dcbnt200{g?7+n>?vHf1lo~vC z^DdM)#OqPX4U=*aoqIJEqcF@R(H69lPOdgKY-coNo}0 z3#-!0y&q8R#*=~_k{^=DM-li2K45bJttX8R4Q__t1RI*`9ERO~uV|Em3pvGA*6Z^9ohKZ{k(^%FxnWa^95aYA1s|1Kzo#cUK&m zCskCYrtOvZI}i_l|It|S!i8cd5bR>jfkVazwrf4&$SY>gqy(7ko6S{1lG)&Hm>XZt zP;U&bOB}(+QldH*Y!Xi-Idh6~7dAC22%d5SZWb-=@==w;NjzsKobhIF1i%qvaGzO^ zhb045geF9;(Eos&XQOVPIr>K|8C-8;)H4eN-ch6ZBuA41<)1piy#N~Wj;z^&j34oi zw6WblCHIB3$-emF?Zp1+`79Zr%e+dTGegAssUo`+qokiI9+-V&5HHKa{rbMu=htn( z7a2M#mrw}Ug*^G2fXq=O5vkOEpKl^CC;$)jvjA@90ykSLxqNvQ-V@@8Z^c@?W^aQy z;`$Qju5Reb%%B}umk=EQsED2r3j*}lV&bPm#tCnWF&);|9UhGm*F3N+8d1%rXZDBXZS^ z60}c2rg(soQZ~5hFfzmpaghV{4}n9-$xFO>U?Ikx8tsxVYe*ZT@rn+&pmE-c}kDNB32${16m4crYs`Jc-W4OV;Xsq<%Crcm-RJ% zx6${2C=*Z>;}Nk#?~;iM%g8#M$P5dbJa+UaY+M!^#Ui;V8y%%4nBQC?qWpdMcqqWq z>7!76bTsj@#vnB~ z4jiCmkL);vrZaY;r)e#{S_)aOZ1;X&oOYSU_%i>QI z5IDKQ7>@G{aSmtB2TPac7kHLiMSIXC>!7m&mxks!R|Zs=dNcMwfcXj5bXee0e6%2 zM%^vNo`?M}vr(M3+RmJfgakQ0A`+0h$PVc6DHM|Jt~v`C7F-Ts8I%c>W|Kh)Ec}&3 zHwL3hVa7b4ESf~cI(QO57wy3b9LXJ+GIbUYrWTo`z8VXo&uB$ci;bUtOa(H-X8$>@ z{DH9el3?N8kd0cDUiaBxo$UsJ4&)+Y`1;!-ztDi<`t1 z;1poY?{`ZPRF$TjCCny}g$KR@KpRRecMi>K)tonk)uz&Y1G{@v7y`S7S)<#42TNAH zdOBNqB9TaSI)_T$-^c&2R?Kv(`b66j$f_8YN2UF^EGJZ;_l^T$3hjj!cu^n*e9&F% z3613{3APEW??XK+N(tIY59E%X!3G7r=!Y$}E6sRwlM>up zZ7x}SnAw|Q(gg>UK!;dl_bQBT3)RGRDzu&i`WmX^+unz1bLXZJChyC5jyG&s>mSrD z1^b47Q)3IzL05cFz#rvvio`&Qn<_${wiCXe^au4$LHBqyWKwzA0zQpuySh0m^2%{O zY+Cb#*;K4xge*+;5JOFU+Hwn>F)WxHM4m;_R4R21wGu}__*B6B%PjNL9CjeoYB+Y@ zF^4S$k@ieIl14Rq`^9>f)xX7lYY7^zwfQZkw^>Of>rRt-xj6lK5(qW{2l|xE0AscV z5I{$f3R}Tfw`mBPBZXBFee=0v5@|@!E$vB^OFDrekbefX00|(6t)vFoqEPY- z^Wv^<88s;ISWAGb3M6V9RHxzt!bL%sc#T1}Hqw-zv^KJNY(%@I)ogjfzphkk460}K_;HO_|-vDjQ4rV#}-kE|mX zJ;#AWnGv1n`s)pSk|w*0cg{O!+k`v|=B>r!>w!rI*aZThg4zx<4#*(l_2AzG>JtgV zEf5V_G9#{9fvV$sk!htab1%20D=Z;~roeLg!|M2nG7# zz|M_wCE#sYR}i#TNwB(WWSTT}d~dWZ4UP`mr}&}wt?yeNawY0T57#5Pb2JIABn;|p z#FgIm^ag(Q>TrGcqxseuI!~hiwVZv=qWQKNK0=s3MnV_p`7bbfU;j4q=S$MF%Xpz? zK3NSF*9j-}{%BN?k3+k)3=>6CCYI>oPI};&aYQ55;4nmOY zioaDI#n)MPwA_C7jeBxg7lCV{0Wld?JcCZOVxby(yj!0o?o25nDhuk;M2&>_<)J-c8o+ zoTvB~kSv6R7TmgX5Taw$p(6pLOy}K^RM&s{ zc56ZFBKpm{W1>hrr<+)+(*Okga^{i`?b#73Q?RdlO~-w4y1Biwy`E4>nvB!yku-lU zgbcUP@AVYkjh3I9sieZFKqnH(-TzP~W!XZc^K%G2=o>}b&}Eps{90E=Sy6??-ycbIDzCzGPz*!s9E(ecfBJw7o0pwAgMR<84R#&p z+e$ohFXftoY100N{I2M_>;=xqop+yy^xttsubNam%8Y36=<=}D-Xc)Ayxc^F zkX?S^Xhs~VI?*Z6X&2J94MQ!eEI{b9)R~e|)krn8BPqSKR6;cxh6`gI1^S9&rx@Cu zZ+qcScIP^P>#+`@nQ0=T*_`;TK4{Az!KS*6?R5}Ijr_6m9c9t(8Zva31P%FIZc-hLF zJ65GcI3uccN#-rQZoLL69}B<9nf*+=R(MiO=uDTwxZzBp@{URrdO5TEqR!6WS}Hx! zZOmmAwtW%URHJJll~2JlS4hu5AN*D;lM9r82t|=G&=hC08@$*PU-N(@Cd?}*A3Ulh z#T0Jvv0-rnC-UiJlMYqeo)E`}c<+2%U1yw7QKWELV>axL?XBd0k=?Szfl@HuEl>sZ5#;Ehf=o&z31X7Z_ z@l)?wqu=}p^MHx`+_x@YyZ>1V52T&zTJO*PI%j+nC~>Y*d274| zDPBDi^XpSCGGSbC2+A+{J6wGE{VGHBIT8MJEcVDEYCTF>Z{7HkK6a02KIft-eip8! zdIm|WqEwczxrH8kkSXkwDc}V^_YIWHI=BN~ro6rJHl&;>&D@^TM>{YfIbm8jzwjOu z13L5$g4~VB@AOj#D{=wSP1a1&cq_J^@)S;GDvz{f8%$yYE74%hBu#obsOAwFAq(b7 zsE7!J_^zEKMh+}0K>+hOB{Y4VBU-T-O0sfHv=(EZ(Vil1Wywp4*7e9>ehI0X)>;4~ z+?mvHXFBdy=?3l9$hE{aNbIbHpMf`o8rK32)AdfC%Z^rL&E{>v%r#vjO1Dd&4IU3$x!f#vu+*@EGxEdXC(is`pa6$>ya&z_( zD4%7U#)dS+QcEw$g&rh96l=gaQquCP(X>utH9%qJuIcFHfejZoew+mpl-WC%e(d*e z9*mQg8SKt7jjuPTbLZlM0zT&NB)=T^7?fJ+otO?}SN#Qn(Cq|ofC8h<^dP7_0P64YK9F$~P|yTzEE*tEe> ze9K_gWU(n%hwjxG$dK7y!MvV8A&{!xpe8|Lk=+_`T$3i2vR(CcFzZRVXnsY|guKTD zuacy>Btt>s(RqCy7t(^4<~aeva`(gA zS2QXt`Nx#2iW@2%`0)PzE~}59{YGVSKMzQUr_V+^RCrT6cHWoHYFY$+|GDarAE>jbbKEegu{yCezYq30#4WFtgYgYHn>am@i{DaXCc;yN>&pl`x{*80V9u5 zV!u1F=izG+VRUz<=JPghbXxUI^FoaVZ$7rB8YZ?p|Cdg2bNm#%@)poQ%3rRsCO|=P z6HiP}=UKci*&nqihpZn?IO7LjT;B0P09aKiCF84g# zb{q}$=;;2^ht~HjjBSCa6~txeBU5X^!+SZ92b!=jwH{zZlQVwkh3gwk1nwMA-c;U;uGO z1f!^N>qAbxI)Nc}8X^W+TqQPwBmwA6{h`=UW&#`ix@XA3^?}#LMvr{^oioQfQw#N) zKmsKcCfH-R7|0?CXEV9Zm=G7p$TMruo)+Hp-N+HZ=dg|sxbwoZHXpw~KG%JLAaQ19 zNrWbSGaM=UgJA~WLN0|YjYDGX`xRQXk{kN3ufDBB++GZw)O1zYR@Y|gWz*#&8?N7d zEx_PPrY;~=!@vuXilP9b`#t_{*NB=sM-ca6Sby(17QUnRoETQzm>xdsqCu)8r|+)H z*N)NZ$$|RJ>!b!;_oy^pEi|~g`(CP&wuZBMIcf>OIC}4IW4szQoMdzG$EB(q1zO_i z04&VVfvDjqx!ot46IbUfWZG70fXLJ+K_tLf%%*G!@2vERO^q4rd zrMQZNa7?YCHYThS@*s8Psd$LzQx>(xiW}s;2*Tz;BEN4pGiIAzGmISGHIKR{l)|Vl z@?!Vq#%Cc`JO?BAo@$xA_0|!BWj=_cG|70{i2cJD6@9D|dA5$>3B6-|3+%=@^9$T^ zX@hRV(jjdSi=hNkqC2dJGtzbqdgj)dk#W;;Ld`=4EviJ$&=t6r^Zv_wyqn`QC%5nS z1ksqoB5qYr9ku4X$Na_ftAkzH%9h6VQ13=v0ZXpV2jbHGHZbYGXpQGWX=(v~?aelG z>)K4CWcVGc;a|uf6-3ay1h38BZ{h8vmG^{|05Qi5#vyW=Il{}raf~(*80Ztb)^IG6 zXAI`Z`oLlaH|E!zh-=aIz+%t-O8+xEPpg;>qh!KjuCM0L4Rew1)pT1Jq>c&G><$X< z11nS#G{@_#JWDF9NSBq8uM0(TZ9^S8+4XJRD`Q%pF$mUf~lQfA^+8r_h zwSSt3%)=X$mn0aSP_h7`mOT|8bvoUDZqVH;B z?=?q(=izP+pzc0qcVHBJJPWSW*Rp+vG=7vI8~Q9-HSM)^&FvjDD26Vfi88FAt$%^9 zS2drW{xd3B!dnvjF0nnHTvh?Jpob|;xBp||0!*1hm*uRoM6&YL`>O;%Gy@l4uczM)7$ zf0h{#V5Ym#iMO8}(bA)oUyGy$$vv&Wk|2;0#u=?FYA!DGPZ&ffCD?9%qbl7?zE(*a zNS=EQ`^C4#ox#-k1vVpPrqU`-82izpa>{Wg^!AF>mpSD~#zXukFEt&~g-2x?2dcP` zB-&Z4>TA_A0co&&x`kQq_Mb#u(2kixQ>J2SV@P@;a@}Ur;=dM;MkTWHC$1>&LK)y? zZmjXL)k!3yy;3%(IXFV^P)6-nXD~6MVy7!YveBPN2>C>Aa^7`&r{F(gxkG7Ew`ZkB)T`qAboC6KZ&hM%R+L7v90w z!VpAvlE@#2e;bCHSb-EG+81h0m`yJrnx%U=JxoFlDD#2u%A7p#O!P(F#8bhCNfXqhb?-`6Jn(?{W{n)?RWkEk5QNs>PKdq> zC#<*)tIm90eGhS%z|1fc-P9G(*dmXHpy4kA5vxp93D`_=zgqQi1#q1K#L4+2iE97( zwR|^~W+s5vfR%HlC4MVl7gpfyDS-C25K)99c51x#vey0}ze1Ku58Rm=*kX(2e**np3gkUxUd(JtWj-da3(M8Lfd4o8sqIH^-oNM@5(5CJ z|9?T>(cFOHSAC6N^+l1saq)i)Huiuf!ciqy9R#%T2qzt?xq4Aj5(^-p0tizV3Q*M4 zX|G?QeqJ)yb$TLXjiowpYfKP^cCuTu-A$hf9!*d})$;vB^DlxU|C(xNnd&Jv6e_|Y41dJCp;ne)ZEpI#q z;IgB(qLAZ46b}8%*qc5X(e|}z^<73}r_-d5>V{0YeBtM#7i^F73EVC|{-TI>XC`)dJ^0cj9zh1*Usg9Mc;3mET@^l9q<6 zdU z_NO1sW^=py$&L6VEzGZLzT&3;Y^?>}S_+vzciW3U!2^+$C>BK;ezzH+u9a}COxx5y zcyg#`j8ijbbjVQ_s@JYbF#Hj~tS=ge_zWWKkhwvFnXY!UYtU#2TXCCOnJAjcZx-_Q z_-Fqa>B+;1r|Z*I(tgNJ5xcBAt3q?;b?(He^SNoU9K-rjXTMTuer?W{bHq%r+9xq> z$m#>}Pg0%%*ZKo6(sE=ihy3M2Wcn?mD~P_b^)zx zM7GdpU)1A)SCMK*w16HkRvW4%oAKdtmth!IS7oKbd~R`P1uuC8w)NatCy+P8hQXJ? zz63ln2Vu+;E*em0)D2XA@;^%H1$t&nH#72a1b6`*9>aUjBA%dJ4PrX8$PWo?lbePe@mzAvJ z98r=!%fAu^ZqCl`%jCEoZmysjK9lw+RY4^STx$I>yw{dvB}p@3Z^r zGGqo6DIo#&U5Cm`>kA!OXl!b!ad+D_F%ZftI~9KIH(g*dAYJ&rBA6<9iWytUjQo)) z!i#X4NVzLbyi|2I;V_q^^>7xB=u6Vb{rU_@R+KFDzu<@G0`K$1$KUI%g?rIzdhBdR zd|-|;G$RW=mZbuBx$OII__t5*^-IN7qKu3I{)tB1o*gSCM4ewSX4&u*O{}H;!Y{TK z`5*Yt9+!XNZ~1Td>rV_#FF=~5Cx78Ts`@FE@}lDM!vUz(O+T|W6W+%m%Y@#=p=D@7 z>+*t>9mkqD%hOzkbX)7vgK9y?_xK%#2i8{@kaS3kqB;TPgncgLXYH1O!sn}yIh;K9 zPtR`FmMBf*rpZvO@nrctqP}c_1kJTi(!vVXRK0h;a%nYgZ6)dS)N1Ioz5WYi|k>S~7)D ze>L^f-`BE|+#hez=e#9bh-$vHmS6dsR4lMo_I~_!s;>e)yvEzgV_K~7-^}o1*Rn1X z#c)kAKES)G`N7I+ z5A#u(h@!VKo(e8TVqrDW%EsQjk7oe+xYQeR(;9jWFVo1#m-9UIxZ+w}-RX!}to=S& zzPm{dv_ehefoR(5tI!WT;JjI5hxwKq^}qzXB;P`T>x~&wT!YnbvZDqFKZyIu-6suM zH$u?BG?$92(wrKTL2fM1ceJ=uacFn|utE<&jj9P*sD&94J8S|h2UVpK^P<#EMeO95 z@_}wn24*H?8@0jcMr}szVLKwxIL`#;$$Y)xms{j|@p$gkYT4av`0A$F+@)J@ooi?<$O>M<#tysZ~r>qAFfG3{5`Dv`nfxiqVw3Y#b(7k zIF~_rMRwzCgEka}pf0#mqJO@xHFvoc;mxEzCAy+Cl^8SK+3I}KZ~*TOU9@n+o3h0K zFX3(QXM;@uzz;_D=;f08H0Sg4wI$;JJ0&W>tO*8L>4a5X0UYQJcPr%RcMs1iZ_8_1 zZO02~lZyD2U}Jwlf-6O6i!0}ca(=pcor2ysl}mpWwQ`|*cNMzy{7@l?FrJ~>;* zwU#}lo`3Nw(eA_UKwn#>Z7FT@vKf<$eg?(OBF2z%mya<|jrXT3!i(=k3^IJ4FzpcL zKn-CLA4p&!De5Pi1(iJ%o-=_l*|d~W)c+7u7yQvQG&05C2@@2FXZHpp&i|)4w9f`N zHtV~b4&}lJiAHSvo9*AA2>bIogVJv3bj+gTZtg@qSuC_~EKSPd`L}~T{|`>+i#A)( zq;b8pde-3QDj9m+q+B=UTvH9+zqGy3rc6Z?7NbhXD6!z-8=MK(-S;1cOp$(-!SI{Q*DZ zPj)bo8A^WmI^e}~B2TT42ya(sw#pSZPvop&HwB0dSJ5S5huivlMt9@FQA7wp{GcK1 zSfVriSQat9KxqV>IO)4n?ylVTLoHvc0NaNbP_g(D+a_(v;-j0t{W2hX-{`dK5a3b; zZuAZ8GFs`u;9(z-6(=76QTxAfxM5!OG%5XMAS^(Detw^i2oT^zfb#+o47X@yIl&fB zW9i=c1PB;%iGDI(bOOY0b%=2Sc`6IWeb{sc9-z~R3oxL9z&ydD0Rt_HF$gRM^fJrYik}B{vAcX$8nkhAlMWprOr^|lN=*Pr!K%Xjt~wZDdG6&*(A&s zf(!0jX>9g>58lV{#$_9P4&r2^VlmGFC~t`{zj3T^{)gUaChE<-`4-x zw0)VjA7_Y9EP@Q+y&~$oAOA4GW$R%u*8`KK`b6d=_nVL<+#}-EXafwIcw+QqeGC@Flf^rwvj_P8>@CWq@{o>Dvlf z;lAYXj$3Nj581WS~3?n-t}K6CF5HCM~4^BOmB4)Gfe zkm{A}>&s>red)P$e{a_J{V^8~VDinpV+h^d_Yi*I)3R^Be)eka=ce(>Y(9)nNIQ;Y z`N$w9_@sVQ?F;D%GCHWbL0Gq4|FWh#pl(Ft!e)b0 z{w;)27(|Q++7QN+7^$)4JDA>OwUb8X9e^vA#qstBScM<~mGrk_ozhe{O$%5Q*QCFO zMRC%WSsW}bJC93h422I&xKl$(DZV)lkc7%oI}RCf7&830C3|I%mrpdoWk>Nm*!gOJ zXg30wQ}4Ki)Js?(sFzt_5sfzrf&qO{{EbrdF-Sjh2J|O0IdV26KEv1}<$UfkI)Yxp zfuIWJ+iwU>3LWBN(-1)nbYPFUFy}9lt$f73Kc8N1zm43re992=Pdo{c`M(KpeZ~s3 z(S&ur4q$$|K{x$m0oe8dKx15nvXr%@KXNlxl)?33Ct+OBc z18SeBKli2RP;0=}M{rH`7--Q4{;VzZb0JLfu4N-*Sqi;~fX{rzL0UwM$Ip0Eyd z1d73Apu1y8`+3*>ggFMhf%W>ee^>1hG((^jRl>KrKhAYSuppEKF)=orU;_gb zLhu_o)XVb`_howdS@E=8=euo_t9rG6>nk*i2s=UX2cW%;)7q?Mgjr3Xb1^m$FSHu3 ze{|NW`XL+?zs9Exn^jKE^V+932lD8`hnCUe35Z^Xcp#5sOtc6RNqz14;Ue_$`CLP* zAOT$D_z+Zbzz(mA_QAT{!SV?+CQ|hX8hJ76EnGEbEhh`FpEV-={`{NmPW>K}{B>+j zF11kVO1Pm#CWaN<6Hgk=LoDlVEA|d*D<<0!9xaVZEDT(SsQE`v8z!3wNcPZRBUN z-iCzhn*fTw2aaW%!%f5-U^X)~_fyq&dz=r}Fj@X^gQu9w!diqx2)x^-_c~8gkEP#P zp6Rd0_?Xm0T9AtLGRIk9^Y1}L6svqu>du)~*RGrxfs*LageXDXihf&*9N~T&&4hX> z;}5N`jU8s@gfrR&8ui2&&+2*jn`An>7n986J6!}+fD4{R3l?Snm!mpBo%j|GZ)XD6 zUc6wnc09+p&1>w8DJ;@-664YC9(Gj;_ChNyQKrF*8dRuiNKuNpQ-hclBX`j2#}+9A zz;T}kfwCI_yAZG>_tD>;_b|&$9O)x#dDoJSJrnrfK$2m@bl2}B2~rW&buc9Jm>Hj& zP5|PrgXqz;6+GWA3e@j~MQ>$XCoDEUVsK2v3IN7|z6ILq%6~747Rl}3uGh#G(F&>r z$yvpLe)epOR9p&E_I=#H+rnBh@<)a0pTG_2G3W*5_Bfq}(L6H+*{ieCUGY)x0W^6v z?ssp5FxQqe?580T2vct86A~w&3M-|X{DCkailrKa%$NS0_H!lJ!Z}t2y`E)J|0d?( zS%KpG#bNXP9xSOLd=%bAQpVTTXYso(==M4*cF6=|)LpB=;B;T-*j7i2iXBXAfhBvu z6D&@@M?H~xD~^Dj?TcNv+ufmarW?S|>)Naf*mY7jP*D?GtgwYBVp2U{V9PE=R6NNP zZ!~T7oGutfO{f30Js#kLMFk-Hfd)#QhN{`WM)TTYErIRgAN3oHdikQAm_}z4QSL+`BqlJ=+|-40kVT6rFI%V6K7`D!*91b>LwC{C z6T4`T;2qwi8TqYU(7Ah_J-=riv-D9DB$zIyWK;EYCGpwDyX?-UGCX21L(#5T$JO$4 z)yJ%v=*(wnd4*}4_-igxy|I5FG`S^vNI$hf6rJNFho1fFgs1Ye=o0de|v)nJC-BuC-1w13}c+Z zSLM(!#m%G}?{B+L^xVxgs=12`f!5>f1=FwSh1(+-wa06ptG(+VnE!gw`+#nKgTI*o?UJBx(~%o$^W{El`nwz0@lXO2)7h+ zeEMRm!#t#c2wZ6G*4dn7C9xp?;>#UL5em*ZOJbKlC`Fh0JTrq&Y6t+y=Xu^?=hhbh2WJ`PM~>^GymrSx;g?e&LHOH^ z0S_~(RC*}M>4{IONc|KplcVpn!Sr1HXM4j99#%U>dWgJP56n;aWsG-4O*HM}+bgP_ zih;_VcbCiVEaSnv>a$L25&mjAyk~=`*7@<2$?=bE8~1 zR%INAYUBEQP1U?MtZQ+3(2lCQB$toy0agNW_R z_HG<1St_pk#ZLBsw43r{=gO%%$_KF(QA|>nYnqAdl3Ya51|JXqez$T)Nzy`lH@DsM z=C;9@I5w+%90v15F#)IQI5a9P9mP&euPmXxqg+oms$#(D0@@d|`F~jjTdME?K*?tn z15&CP^!jUIyEo_E=NPu$s7$?LITctl%+Ur=oGiXZD;);FNp}O2p^_AaNOTyr7iU`ljAHcB_)*JlJ0EPpp81UWugxsZaabxGpr z4E4ydQ2ZP&{{m7b=~nTT>pRZrydP$admV#Squ*p67{wGULYM}5Y(yK)ne#U&O_NMGS7PrU!RWlk|mF^i*PLB#6uc-dn@HL zQm0_F&4E0lb9H-PtBS}DOV^xSB>2(OY)tqyHQ_xd^+QlTfkPG)39GOQ7*$`T(RI3y z_TYvB%GOg6w!Bt4O!9R@2qpH7?y6s!SDukS*K#Vy?>;TY8)wr~r1U{=WN3dnkQ0mP z$lIwLLK?2^ZO$-r0xb%fLC>Nf#-GPPEAdgljWJ8eL+oWQN0ZxMtCXh;d$y438;Y^dVqRrB$ahAasiz%&)%}oM4!{1g#Kq$4DEax%Nn6jvO-hu;=c{MZSWbhg%kn z`e#6V^xKLkmad1QEn(I(q;gAYck8?IlLftFr{fg|D|WW%BUPIz&uh>N<_GxNm9)qe z+j3SSoAL1UQ6l;trCYc#U(Zx`Ra>lsl=KDQfIf0qi?BvTsSxiJKz#n3291wxc9>6+*McD;K#7QsIrWl`FT8 zjl*lb6K~gyuPlsWHV5+q2C4P6{zB8K2@dWlsGj>bJ7aA^zbBBnA$|<$CQsONTw9PdqqC`fWn1A#QFQev5cNDn zrpm^ijYJW?a=HdX&jQS&WT+8Qw!DX_u#|~!vwqWhFDV1wF}E!$lhRA@y<0Td`w`YN zRe{XPdG8C)a(Qp9g1}L)a>7XF6hdTJbyke2L9MD*IjHS;-;%esy9#?(%Fa~ zs_YW^$Y@gAq;5%!g=A}fb@7jx%5KWeg5F7;e49jtaI{jW?98DR`X^cF@s1l-of(-7 zJ6^b}B$*0}n9>_QL^lUi%t&;@&>_Rk4$a+khxxLf^iXG6JQ)#q=CVb;aGO2*cjiw1 zYfKoff8mDHvo7wXw=tsYisJe4sdh+h*SgMK44C9oI0mW@Z;1V)^1RT?^ zMP1U+1-Un2L0LCYQw>BecEy<`d)!~kb12Ch5bGhiMWR{g<&Yy4!n}v%gE$jN9ED&! znj_SDEXy8q?w&l{X<^#=PAbmQKCW|QJQH@xdMc^Uo(yihr`>Oo<*C<=Q?)Slt?6%C*H$VSjL z-h*0E!qf*;_ik3n{8XkNeW9%oS3CAf<8aM)+V5RLQWnE>19APAhVJM zI$j*a_bawqwR2aDiCT!HYx*`+)*2=zRX`ATA;<$f(SV*mN@Cm-@75&t_zO+}NRyX@1$QSM zn>ZF`4#)mM(j*L6^C0-4e7mi$)u`$dyL`KuqK&C%yJex1o%?e$pMz*5uOkWWsl?tK z9y}RVReRobDzcIXxq}fwuF8?Pk=z}33LvRNX5rn5Ox-kNrl{Tyq!B0z-A{18_w0Od zP>juI%7h7JvVj=xAcXO9FkLn~Ycd6~14uJyF##Fy6KFL_2|;NietTcRMR|*WLIjTk z@l2{fQwq3_&FL}IyZgQre`VGAkpat9xiI1+a7r|cjb550D8}ffV3yeIjH|D+`v-+i zm__X{EVA*w#~DsJa}(S6`U%to8dgX3?Q_$%QrPD(#bHvg0w}bH0o&-ai~Us}qQLs0 z66g~^E`+`c-b)!EXOoYR={i`A>mFwze$Vlfspf=V>;*AkAlqn3-{YNt>y_<{X}v#c7gFQ1x1yUFHf~r$-T4N0eZAH&w*n6O{M`QQKy!0Tz@Q*vl{ReT<|uSu|r4w z3=rty^&OD858vP6XK!_AZYiZ&miPRtS+80EtF-$l=77{Rwq(Y60L2^@TcoMx*L6z#zn955I7a}o0E<8@*G_t~W zT<{E^^j=)nE7myC37x(|B5*773nhJ>1oG{wf-0l^Rt(-v%q?^CeK$yiV3>kTiT8w~ zs0J=GnP!7KzB(=A0(MV9oz+%JH6kAkCj0>IOX^YeG_i+zsiw8=2(C!%hW)ZOjr*oUskc9UZQs)}& z)irhWdksArqe>{CQGDgmAw9Phjp?_j&Jq3ZT!FDi)X?X~ zzggT2Y|v!ML)A&?kY%cZgS@ zBM2{@UbPTayTA$8($5Y7#cJuUe{5KD$aAqGNS&08cwWjJ8*|Ruuk$RXo0T<y?i#2@Ci<$_8YyYKR^q5*5!TsT*Hje_(#`GMA+z*vxRiuQ7|I68hs*lbx*bEEI}Q13V-n}V!KzIX|w z`{`)V`20dY!TNHsYQ78%Xw3zQy2nFMZ4x4Y2|FUGiF<(wNe`>a5e#-SAv z27SG8*~BT!C9uh;tClQHu0$`EB4WFq!a9r4oL#Z<{Bk{+QQCnjPcMkAgIFi6?$Kc` zZoASyXr9SaVa?A3o&r1z8X7FXIeqgss+*|^D}@AdJA|Io0)Cy6H?pa6O`CC607q9N zoA3OAjcM3OC&|hrG7QlF@tuH~5>y020$V~HgyQJiEGxv4aC3~o>hn@G(sk%sSvpDF z8F%_l(DIdOL*dlIe%Y8U92ETr_wX0TE>?L2Tph<59NBpBhttXQuHIl~Z^`-FNs=R? z5NJM5XX|u9kz^;wjh;Q$l@GZxFH1}ibPHrTGP>+TcSXChy|m!HbI1+H82_$S8J+=R zjP09FF+HpcSY*ifJI)g!kC3y(ko>144Hw)%3vb0?nWOue8Z3K(z*naEauv z2WTa^Z#7;*ah0A7l22U@WF+6xZ(LuMBS4X|DKk+$H41^dAD=IlO5gHue5n^X7R!i5 z%&|lVKIM!WQoL~g&jHV}fv_>%Fs@q~Fp2gQY%m+~-+!)F(EbWY6$KxjCU&jdTBPpV z9rGd)SIk<*+cs$@*7Hr|=!i%>Gzn(`xJCcYxU_`@g}V%nd0%aB^~iNCmY~p<7jsXe z)u$3gWy>0#$`08qCc#qh(>cUUAgZpRC@Skgq3d~&>+%g}l~Q|QVb$^Xp;n|I-!e7# zE3Tv>-9-%tes8GBw5Hh1m2UxF*9@n=b(v%pQIsRfciBc*&K531w?7f;c{huoUTr3u zJP@}n*LqoAZ5Qw{Zt2V}p;Fzh_>O*S9`drA*(alppypR{UB~|@>V&P_jkh}p_N%zK zA&jalU*VJi^@5rT?#D;JW7EE3?s8c?}kveeMu#5&Y;Z z<&==uS}k_S!Cjm%k_&VjU41~KiR?N=_E<%5Pte0S2TkPJ2?VpK4JP0!zdNWV<}4o1}tmcra*I zi)6--OlR!e0$*GT49c%A-Mhb^V6C{B3Gzqz74Wf~HMm)HA{I~zjB538ws`Tk2dN@@ ze}a}}cC@XbSGDsDV3aeg%mPjbeOW8yZ4k_w)8@1Od)70mjw-ZLtT9Z;`zFclrDnz| zp7$!9PijYWRLMoZcUEDoh~Upv2O2N7KNK{ASIVc#;tvlT|4Mjyw55~Bzk;@J5IIwe ztY2~g10|iDU(Iu1qn$(ZPKI=UeNo3jEz+@~J6$Ezoo)HuLzZ2%8=Po-D&$7mB)D2g zMOXBN3D$ri1vM@9ljtOT>r${}A16w#M}0%$io(16xXa9_Kr(Wg>3==m?>0Go z8j~-ygX$-K^Ls#TvRgB|VaV2;TiY&F)v(XG$;FgAb7D@z+bSR3R%R$R?T_7+O|8?A z_8z;FRnj@S%Wr2Qm)(a?#TSa%bpC1&F$|eWtU80sIT+`yi`u|6?T&@}KVx;$0~}hw z!LV*^dG~i$S(>=TootTX0%XycxW>7&PG93Qv?im?iKoIiTCa z1eTpB8!*i}Woi#VvXpVb0tTS2nK;B0xba~=k^=w?X*PFj>{WPKmL#k-Hm(Qzz)IfEhvB|O!=E`hq zSu~A+X$Tv&->_O_uG>Zn93IFc*&wA1$4rPg#BlQY$Z`}PPoS$#WacUa7dkoSdVwxK z_4Jg>rEhuB!4ottMaF;xi><#m@O(IUb|F69Z$f;v$XQQci0Zz~sh7|8e3z z)vS|90TG{|uT-Bx=0%;F(bpD<&zLlxz*fIM!g3?71|eq2fBGXqt_a8%ZsKSYs8Lo@ z<#K<1<(yqCIO#;n92=9$UfFh~cclr9d?#)`k{IW#lA`Vgugn;~D4i&}!bSi&;$NIe z13g2;`;;);heOkcC(4O4ShLpX_~4BvX8iaFgE#siY?tYOWOG%&_G(*r&sXXwic5ff z??+}u-AB{jLTG#lii|W>p00o_1qWoqamZQpqG=FmPwYU=wMdyclO{QCG73#~5v{Vm z3K1v<77xYCRj?31G>wcFfuMs2*8c`4O}Q7HQonJ$R}kYDu5qggj@`q_xT-xjp&p_9{CrlSYR9)H?ACZ5kaz| zN6r(G`7TB}De5EAAGKfzx!SNLNrL_k#9$pZmeId{xr>L7&$dpEDQS9u8s2n|stu_C zRt+I%SKe}mHFMe{W;9&`oyrg%DnUjB$R6T>bw!83%(0|_T-d!S3`GJwZBemotiolankg%) zK#_9-(O_Kv^*dvU58b6^#^*bDm=c8+%UvaJclOQ9KCXBM#K)w&e&*o9H|QKb#3~>h zwCt&KTfucs3{^r1V-i%wbPQD=@>OZ-#9UCe(~)>I5-LDCvzp*hmK2K`NL}bB`~T2(4qJjiOBPMr zwr$(CZCjPL?MheLwr$(CZL{;u`pvrscXWRs)`>WKTijWbB^U&JXS7o-0Qhur+vEu6 zjn@hNAqKwX(HF`ze@KcWMF|8|h3|tUsV9n0>7|onz;a@dAc=s;%o8*<=niKHMZeLj zzs^8s$TYJkMsXt602RFh5h@7;Dlfmn3{wFRMr}KZUv!8E50Ib*qwE&KgGP%HnmdU< zHv$FX2vX!+Gv7_vG@y~`t@n?cM;$lx!9hz?HmdAVTng7V>LvYQw~BS|Wj6@q55r1G z^Zle!AgM8TS(cVSccP`W6v2qJUfeoumnRgt`I;#5!ZyI1SJ!0IdVmz<3Z9D@SU+DK zohwI2>=5KMU2gAQOsaR$dITQ~Am&DBKE<}$nCk(|BIiffQGMkr>O*oRRViz8+&E5) z??v@lex$4nj62Kdtk=ODcK}E!(WR0kg$XPnsxJ#&4UDV$2V#o*k;_Y| zVJV1ng4uW-tVWLlul74A=ld`F;)7V4pGbv%r; zLH6*EWk_8g>J`fnu2kOX_UCC;BOVXJ@@V63ffCG7r*}VGMd|7S&aqx zF@iVzLnP{zzydkr5nu0$8p1mF_iZ z$|UeEp7wUvrpL_!`H^+RNKdlE)M?hLcO~BMQiNiqKSr&5+pev7XqPvH-!FsvxuM%E zvlxdvyvght11p{LSvLjl@TI@nHA+MxNiI^M{obqbs0;ha@!0)I2->kVyPEN=qvhbk z<&k@y!|9#Z?E6ShMXsrq0ILHiUX0@IF17Kw?B6SOeyS_ULX(k(;}Hjil- zwvobBl*yr94D-0h##w}e5F_lXn&>e@I$|6P&rv|U#))i>--KgZMrrFl7Y2kT!uKBB~APWF) zW8?R61LD}K_RiU1Sv0kr0~EUkTJ&s|gQcyL22!0EM(3z|yrK-iLu6n0+Rt9;Jij-g zjyi7Yp#M>xyg^{SUTtJF*<2h}SgW5XQNpWk+`O=Qy}uHx?s~5(_109mUTdZ`_7n9x&YpkCmyQ0y z#bz>k{<)I+M!LA*JCrkexz8I|nu$<7(cqd}HuY;mwmrJMITT6ah1C<7Uy+c}^tgxr zGFN_oH!9^4y2+vFD4XHxx$M-d!fr&?VHCiMTh}IhntK|7A1R8xCN4UFr}SwDuaZyh z5&pyy!)Np^`+yR_!+xzRbhMz1*RY+%&hO5ReF^0o?*%zU0oKUEyt(YB3sYNn7#s_# zXtbxP`eRQH_f_JhCNx+>OWCGGL0+lml*e=0;FrQ-_`_j1xM%2Pav?{zdDj6Q$fV7w zjB-lEWHixE`k~(m<73F2MYAX2xBQ= zP?E^ij`^cy$E&8Nw1YH&A=Jb=w0sO>@#}15>&DA(t^%Fj_cNdlUH+X=_RK5}N%}r{8mZZJr)C;~d$Pyf9f( znwZs1*e&jyBIQ@!^r`$0g3betbK;4P1_D?Bigbm$iPP+-0xy0uIfgJl>r|f;f7(wD z4VkaiELIwfXY*xPKtO}@sPdHk(V z#a+|B5t`iN(1sZHsLmfl$;RJZQoOI`pznSgGyk#v&DP8}N#qI5zjkPR@-ZwN8Wh@v zAtuu(i{oLz_mC}L!RIVM_W1+zUY)H9M5g!$)4iOJL~{boyLsuq(L5w9@-7Wl;%emW znNjwo!2~&dHYDGZFG_xsn}g@+=FVO?o1kUf4eMP1n0LhzTnwbHM0X1+u0%T1_Iv8_ z`2JGf_W$|^8wRuJ&3ujGBnR#C5c!V=0p^*;xCYI0Lk{oIxEFJ`#L1Di4Cx+?5)xj? z%dkrZeQ>NLNJIDU5OS(}A^-gV&;~I5cI-E|1pN%`%DiwiEWqit@^!2V)ELf;78PxP zQS{@$2JwT0<}n3jia~SZM6_oQ9TH+`(0EUrOsC*xbp;Z)x=dCYC@l0?Vx=Dmfx5404a@F#Ml1A9rC-SZbri^W3tEJjLV(ISC$qD;yR{)umGX#g7K zZ_tD2N)xk0j0udNH-n})B-xbziXZB}kR>Jd2aVGk{-$vpxoqIpet&M+Y5aVXYk2j>K6$rShE|aAQ=w=Uy7wFIn7yiQVsKV@(dd$@l&{10*pi;I~V z%E;Ka%Z~{q;L^H^PTnK~pQluk)QpW(U{sPiWgdhyZ3rk0xDB7mv;*T<;R5;s>!=X$ zkDl$%C#w%rss~UBm?V#H0t{hHoJ!$rub`9&&-Gs|!GREN^XEy2)ZO^F^f8il5eDKa zsNHZY%9kA>1;o6qk2@II(kwO z?=ycK{Z^>6v;zz2s)IK~{i%-*lBf4_f4Nxbgs{aC@rczF~lgEUfe#bL-4m>Y2 za<<}`T2UKhO#>def({NXI)`+5c`gmRwAc?5V(}A{dnnhp5;=M^j!(!MNgZ1fHuqXG zATxzI={?5_ikTot_sv9t#}U>!*RR*TJ%69C^p7v+$M-{&>^X@s0-#2BoLp7E&on|@ z|5b3Ixi~38laS(;e?ZWG-ApPZkBGlBiR;u(j2O=K+_Dre>bG#BtJ4SKCchW0q-VuS z$O|6*arvFOs^m(xE%7xdrgOa*t@Lu@-n%ARIX1agGc-8K(p0Y^D4v*UnN@+ z%O1t@1&9-O<4dGLT1%Rwg1;6fi+^KOkb34ozjf(lx5k{)Wq7J-UJl?r*RRHqbvb>P z_^BZ_00}q6-Xi%$pwy;nsFkV=%GyTm6S6)6Najwa$z%YySzV%Jd3g~*PPD6VuHC$L72N?!W1_aQmj*^dXnWF;(R<#VVf5_F+0*pg_n`eDI zlUe*uXsyrAuhYy)nz77#1J^L#^YuDlACkDG%e_>6B6^n=1tJee=S`mmvP)xXY;E>a zBy4_n7P^^>zMz0*gZTF%=20M72S{sz-$|btN|_yk7R$rEu*MXGaJ*nvh{>h=eVjMb zMn~)$Lop2{y{17LjZhk+l3-m!q(R7A@&Wg4Ae z(#3T+)+N-B36P3ztNpTxFE+F*L$E@(!P5JU9g{793^#$O3Sb$(F|6v?)Jq|<yiyTtDxw`2*&IqNqrzL>j@T>LDaZ$nV*jF)`e6TwQ57h!Yh z9GvJeL^MXDT(UAs5)n+Lq*?QbDb~hfO{bvjgql(bLuA@l@taRFZLfF)xO48g{3WT(n$MQ*;;=XD zL*|hwv=6{L6c)t#68UTDu3dTO1e4HW|F#ts4I~FON;G1##jE_5{>*t1E%lt@Eb>rLmXC+iR5&jhj+) zOF!I^8tMnzUmZ?S?mUAag6VY}gR2-sNlRlwb@WlLcdiU9S}#~JLkD8iyU~6vi9*W>da`+>0yd}wpC?nb5c(|Iw#p*mR%ox=%3ZFE6bM1)0RC=So{05(_E-1XvakjmY3Af`)X< zA%i9o$FtHZ8F{t|@tIsxQCPWd6kx^-`=qAc(`oSYCPr|JQrlK4w<|xY4Gt?H-#VR%nd8hF1G7|d z(VML3A@*+yVyg|TS6su)6P<1c9Zhx!?y;w79-E98*m(a)3Xy2^ne0Y=ELn?|gAj0X zfT3+}ECFr%vXOPjEU9j1MpnJzo90jX@h`9mY5tT!F+m$4>jE)27WIP{0bXcz)_~%< zTCNt@(4vzcNkS{;%VK(utRbljk5Oyh5Bbtsnq7L4RL|=!SBWaTABPB8q+Oz056z?? z9=$xsQrccR2>(;6)*JMXw6D?V0@4Yyw=N5IQv$pZPLe~U(TsY2&lqPk2MT(YJ=7F^ z+flBckqY@2d`)sQ6w=8vWJ(D`(W+%=0a>myUXrWaAz7!<9{Nxb8Pqa|1XZXZtRZWY zOEgLG^*6E)fYYOpjX^+9T@|Q8V7m&`L)}njyAnT%{lZXg1%ARZ2err|VYPF-7-@lLJ^3J95PTHIYB=yfSv#wR_mFFmPL@7QH zI&tQ#yV&l7Peu23=5N6(b^3vKF|>ZJUX?ky(`d!}TkeOsjUNXwfn?02i>*?Xjr+T* z?CVLaz2V_!R!Z|v<=`jNsCCi}0`>J$D_Rrjp7+r*QB7+OSL;bfaA@dd$mY#|O%DvK z93QPOy!vfxC72^m<~n-g@D3rBDBxVBSep?AmBT`bxAJy9vu8u@c)`>&{OO!ze=wA? ztH#x^%)ZTY%);;^f~P$caTea?FGD5crxp&paaD4Jt#HuYvCz5_Xu5oSjmTHt!G>pT zoSfyrA#i|XERJgX)}1ZD;AzJba~t7dl5B=xn;1ngQFJorV~1)!uQcQ07jIsA5V~oJ`b^gKaU9Ph2@NA1qUYf zqvC=(+4Lam`@YiJGVz*DqC9gYG+;~Y| zp<4Xp`+yat0Q5D;-_^Z-X#;g<*PAOFu)Z%g_lEAoG1h8t#j)0Ee+}RqP6}SX$Hgog z^{`tLpjkT|_ZI&yR5?(m08w>XjyuLNG<3Dv#uHID{@|c%WwbOacB`Ln!zMe=6R<0k zLa@v?$FdIUDt|I?;sMk>Cnpz#S6LttazDy3>|27>*?ri36D3E^hl#$lfbN&O(Sb%_ zO|PQ;B!-2b{^OD`iSrx-D_m}3b_SEX<^pBKXKAl^Ceyr1<4(#g`@H7<<3cppYOnXigw$r!GV^QXIfO3=1?DnPLE?87?HKQGt z39VcDna=B}CSYJUur&-PK{A21iOyOZph~d`1E0RNNsoha)k!TBpm`C32Q>OM^wz#( zp(!x0G1pv5Z0yxQzf8$?F{w2@qI6PBWm~0vVW!Fzs@i!mP1b7FXk!aGV-J4vB4v9e zbcfxFd$hQ@#3R9$CIn+ri@`AA! z|3cb4?5Di8zg0@1*?IeYcwX!mYc^`pDN_9Y+k~v~&{M4xxoh$wMKKGoiMZHPlS(0I zSE;55M#R?q1Jh`{eQ(f0X06oSj93O!ZK#i2f)7XYr_`kMIuhVvS^ma{-{d!Mxg|6e zNd4zbH4Oh8;*W~SSkc69X0y$~JB`qUg9yqg)d3@C-lw8|J^Fq^Id1v9j3l^(EYKk+QX>;i8JR-Su(m;XtABiq&=kb)IeO;X+as3 zG-Ubi6DWR(ynSx@6a73~a(*D}`^ zu)U^hjsWoVG4I9FS}w9*BTOmMZ8VXr;Xh}e5ubt^05L@=xg3}|#bV=jVbOS$zR>s% z%%C6C1MqmzhcxJk=veT$F}mCc%y}j0J+^Kj)7uhjx~Q6n^S-z`bzG$df4xmjD8BPM znMx@?6Lp$|nYDfAX?hUr9xn*Znu~esBbzMKR88l~ZYaaJ+tu;0mP@8tpXk>jx%lJO zoT=tF5tGK@5;YOZ`r=zRL3ViMpGkY|j`%K`;1`bWO8o0;yw&bJvqKnPyz||Q1^Dx~ zt$;wK!d^2>%8=Gp;}tV6cu5W<@=k}3%x-yS1c1x*85A|jLbR;`Ve|WjiNK>oyWSb| zs3k^ThpRX)zJh`%q{TJ(LVP@FYHKkg!IhVjs7A2+iO9>rGihtUW|LE1ULW6bI<)2} zfkIoB-Fe2_Bl7E{z?(0xbTfl^nB9sH+FhBwGbk;P1q*@@40O(C^t-|`mYRy)%fONY zG!8px+`jzV-utn+kNdnJr=ZuW`{Dwgus)%iL%&-mw=Cj% zxm(3!Ju31z;Ij{Zim%ElAD zdhftFD^y7C(6b@5N(HgUROoP&Wq()|$knq6Bz)Hv;XbNUWVdFUpWNoSu4OKOSAW}7l$ zE?Mawx2UO5u=Lc&Eh`z4uDL`tyqeg4+1WJ%azPI;`C;6VveHg_BGN_u`kiydtO~0( z1?!@E>oKT6zJ?X}b6>l3%>S>K%)~&i{sudv>{FOi%MZ z`|>Nn$GUYf)aPzwIaZiDnbcxM34_FuUsj!<*Q#qU(`MIrw*|L|l5ByT@(^p$MQHBD zBVDdzHDVQbyW_G~|A%6wO_V2%RAg`gm14I%Ob{?{zz06VfG--PP16T}e4Lxj5#`*U zB9ZP}YkRJwL>0lP`xvQ^{}``V7}Li4D8;vCQQr!0w1^ zU8j!OV8oc}dpf=ZjS4^b^N2 zO*YfWuRd>ufm^w)AZ3H_CVqoo9+Uk0-}$Zj7GN?}*xzY`My$10jSI;-pr{vAE99w- zl{oim_xX*&DeDUdVaDG4g`@NHFI^rwuJJTl$<#V)9Ohk2YHf{nD4gb7nKu;GIaB@( zU9M0{F~Nu%>+z=u<;OoHU~m3kkH{625Kj-=T|!Q(Gv9ZdR8Nq$1!LO^5%i^vdNP`^ z3ik)_Kk)w@V$<$C`Nd-b07U-#e>fMgaW*mj&9HetoHp3zdv+$j;9Dvtr0X);Zm?l#712r(N{P!jx}C1=dvtli!2ywyuJo?+{uPr!T+*R^0M!EI zT;2S9y9HnJpT-H1*dNa^k=#l*EVYO~py%+(rmWd`G91+e**1qG3;Ei)NjNoViY*XC z?XzNr^+l?`VUSUx>EhsZ@^Bo6G!PUR#QD0vpBQw(CTx_5&&0*PZd8y!o!q*1hARnC zu9Do1SfK4I*SA9^#80+dQ07ZXq9v-Oi)AtDDjj$ zfgi|a$Q-z&2n;X~!qTh~XD~#tMKM68jDX?X!=BXug7m&&U)a=U69#)Ycgb2rREeUI zjkzWkH9mV|>Xc-jtF}&0f_-9oxPc;2Qt$Pwz<&srHt(pv5|`Y;*1Kj9=^NshNrD{K zrpAd*{CXw7^_7-ht>T9Yyq z$qT)fZD8BI+IVnIAvU}T1chq5BTMe4*vGx7cqLy~Y?FeSnWFhZq~-EZ1S{(ymv6y9 z_$1H`(^LU)wyH~_Nc2Xu5iTu21?G(%8Q&eil5*;Qbb}?qJevy>Ok(#eGe!J>Ekjq- z0cU|CnRR&x0iB!&ump~m%E7bteM&zj^QvbpE+yqxugW8HwO?mL&x?Sh<7cJDuqhZ(I~JB#Ef}?K63&<=t=nFi{k>_ zGB{#N?;YzYFoWb%ON0rAhBed!r0qCpxk9q3sBn!T#bKnG15L;d=nT$*!n z)jXUS-i!&e=3`Bq6dH|Tr2u>z8fV~?#U<~OH^!aujOJfuhoe{2WQR7bx>B!EA z1XxpLK=8+sdBEcXI5+h&z*tAvxYTPc!S>EFN($R_9HWS?GIz(RvPB;tJP9!c`sEiK z5|6&PC>)}!)Z7cgC`=F)=Kr9aaR3Xhiu>bMsqN7O0!%Tb5dbyNCP!>0=+Oo})o26~ zD)SJlw{Vi}0ZDtwR(S(tOk(wi(IT zAZgb#DP-It7N3FdAuqU_nPZ6TG9IslmoX#Z^w`L+#PxJLa0?Umg{jb%P1nMK z>+X4j-~UNvbUTV4V>!Ja_nbPG)Fo`Bz-HD!(+!rjv-|4jwK%|4U^9F$4HuKyhV!L+ z1u-4m&uJ}5s*?dQhlJ-EbZnn$Xay`3ssMVTymkd9v-!y+@D2paYtV z`-05|ye|$xKPR&(i~$pFWagicH8i@kUWqZ1JM zpu@QLVjrFk#3q};Z5VY(2F7eNVJ$j zS6HA*{a^uw<3}!amP13Qa^ak&Fuzuvrhd1YB}YV5_nyaQbO#3QqC}dV9}9Mnyw6gT ztWby|X z`q}q~TZ#h%&ILDge{hXdgUzOE;eCP{4nydIL4xzp1F7a3vU>p^@-?UG@>-pNJ5BCa zL%J9$`pM8@sMtdHH{sx11*k8s-h>+!aVf(^W`%3bsMvv)Cw!xrB`r+i!wgZ10z>W3 zSvn@LB>^W`Ou@P63E}+}MkiV+X)U5PW5CENVyaMnlOX>B=u)hxbu)~htyU(6H-m=j zF1dzEr3}!^6ddF~WI7qmzP=E$`*a?^qOP#J_3CEn_>?tEYmN8psRgj4;Vu7KQd`SDEU7&LKE0uh^QNoy6e^$mG1Az zUa8Cg=-@AD#~OJ$Ndkx!p{fk&y&~Y@#lvSx1n7JMbX5K<@)d?GXYtu718t8XPMTom zpLUx#trA!TAX%XdeH9>k`JsWWB7`)+f4H!^v0F(@Sq>|zj+FL89ri%;7F>k=-S7}X zZP`KGPXO~k+gE_Z-2%3!0n0>H(ND%arl{h{OV4~6OqZx~PY5pb2t-Ap;(uKwy7S)J z0wURz!~B!k1mPw8F=7adeqZUIL3_R87?aA5;)f4srwNE!3}t#LVV|$WoS)f(3h~>5 zPQbfamW#G*qo;ZKQH7#zbo(alv+t`|Rz8E`R+b=qYW~F$uwiEyos(L1sVKD1^8lyk zMTUD)?_<$$d0aJ5jUHuBDEMPn$!OF%wGUt6)6>MxmLt# z9sNK-@1NI<({cZy2vvvEiwqKHCvv17I+1nG?i*2pO|Zg{!^udsu`r=IvL!tlr5ayf zwguto=dbGfu(Ko8m>ctG@iI%wa^p_lZ)wYfSies4ZBMg!;GAxgpx2^PMglW9g|RR} zo$q4c!j3h77z~bc{K`89VUL1P*a1L&5B9&-kF=bhWbQT}y%2qyd5$rq6Eb)6Mgmzv zHA-Rm*;(jf-kl{t3LX3jm zUjIiq!z-JGQ+>~`N5g5HYQW_+zBVi7#gq8oaC;e(L(Nw8c5N3M@ju$<*Z zRBRw&>u=pL-Y89W3miA?lr^Dhe+ZBke4*5XmW9)c?O7$b)|yVARUD9w^!S^Uf%ewJ zvYPWi24eMJyoDjhW}Wh57PRG)S0s~bu{W$kM*Y7<(w{bWiwk=PST^+ftR;hoDwNVA zHiFSb{i>BAPun?7BVTUjQ+*~ZcCj5XIGN%1`J7|WWB7U}6J4*@H#9VCY85qhjG9e`F%-_g#3koBo&7vUnXG|~&QZ_6iRYE89bT;zC z`a+HG@N^h3@96Y+(K4z6TnFj<0kGb|!ujJv1t6)y94aQRa~zPGM6=O(10-x*T}@Ny zyQV{#fL4p!Vy7Go+N8sS{hnB63L?CD&5)*5m2UlBq1FA$ZZ>JK;03gwtxPWV61Dta zB6^p9Yx-zE2~MKaG#1}ffV|GYVK&W4O9zNS(S(49?Gu}Vw0#?tESfJ0oy7^gW<4zB zx--+I3P0GmWdAktH1IN9OOFXRSJjlTMRCcy(N7%Z9eG%FZvbDvH z0bn1MpoY6&jam7R036+0jx=Pvq33SLV7ZnarxVA7Ji;BxD6J6uy>wDyxFz#0>0gvE zC14}Xn~HmYRTJYl#@$n3+C8dH?{yD1Of7+5rHXL$J(7*rd1!qx4|vRvAF(7*$S zY3PQ>6HPON_}K|{FBd(qxCF#6kyt=l2YLd$#@*;)F8obun^e>$&QapZ>B8HHef^L zgxR=n(54A8gud{$L?-XEDyV(-mvZFXv;bT;Q5n>4oY_#>-j90`972Gqbs`P&qw#TM!eUyhQ?W+(!fE4Db-hyZM&*mfeI~072oe=) z@g-dBCm3hsz;DOo1+tzGp2xpBEp*?WSW~4$DieQ&892h|0(7))msh;*L&g*tu5~tF zy;9r5lcJL?xx8OcQZ}3JtCd2W9Ed;ka_X@$!|^sG8RrmOpprr_D+PgR%xIN?02E3~ zMks<&9|+E+h0O&)mEK$*8+op#l-V9jxu~#Kai~FG;SzTOaKAJhZDTV}(lE@9V{f+N zKjk?pct!2@2{|R}pa9a-l=Q4vTNaC;^1aih(jhCQ&L#@8lSV^450?z{*$0iSiKYxl zWvV@3hE_3k@RP~CiMc80Fgt>!#!&!30^%<_GK;N}3B6B}HlNm83->&9^An;~2LzvE zS=KlaiZ);BO0v#(=qj>ctc4?RT^m)i%VQ7?SwX6--IPMmIhP17O2M}=&X3|MBxJe* z)g;a4a9&~BZb_XI&Cb77Iv~e;nzHwgwIhifwB8jYvQbH$kjg;WJOL7PATsGEc5p7mOklB^=U>4jgJmwedE*X-sNwL3S%ZtOJ_h3v@`dBR_ zq73O&F@B3M_jq0#m(oCwI_I%fwWba;Z+@vx^?r!TpRjD<%#R08mXx;{s8n*sw&n2& zC0z_Cw|?lV2T~ff3lr7Dy<0tAUpBa*AWrmghqaZ=p3_2@5Ob^JSW7fxzMc_n=#_h5R4zw+#wnY5V3z5BWR*O5Jza&9&D+-NM=10It z2bC5}M&*IZsu!V&MGJWGa}X$e@+?8+F9xPdg-gjo9q@u9&j!g0`#$G!Jobq2s zagi`>RA~U7k{13l@sRBiNxc=@sBhtUW9#qbU#iutup3nGNVh6jl;OHkW}sFv)fkaZYT5}V86u5 z^X|rV*!P-bL80~AWzL@>E8teX!SSt~cY>qk8@auPYE&tdEnjx`4sC)dt!^V*$4n2g z4~h6eYS!fu#PG_QBH9n<}gVLD{`DfsAhgPkR! z6nm<%gQCU(uWfSpNyZs-M!cZw^ihg}Z%ql}j(YHiljsZv+cIaAq*2yKxQMIIa(t|v z9YkKG&dOZogJa#wmdut7G-=&*O=XrTh0ai{n?)7viOPmd5qiNVt^B&h&%pj*aV@fb zxu1_3q&e&rl^L)ZZcn!L`H@Me%=vmXVizqn;0t0+HC_j|G42#~ObNxJXD;NUbw3Rg zINkEUTh{k>JL4``78ie;iKm;*&g4=zXwt6md{0Pp?@hRacnq`hl1fODL_3om8lz%e zL-*Z)m058fTuXKEpAONf#*IoKPKMq{?=s6gbG1bqkhaV7Y&i!O{ncXIcH%jat6!6! zAS8M_8=%U@YQ{S(!VSi8_vR|~AuM*Q@ISU@ig|4s!QG(@vs+{xKwa$&7lAsZ{xJkK zlq0@W=<_t_&-Hd{_ToN}=3Otn>b^b0Cb>Ou21E2%Oyn@q8oR~ZZ|S?jqjx}#L+u6C z16|nk^g^T70~_&<--~*3;MqF}gvet%{6WfLfxHElHz*6_Oc*L%DH~4=JtCl_+i5nW zlv`E(P;zz&+X<>TFxH}YBUlu5iq>ph7l_NA<#*1ZG&K?$sXMf_VL|OTurBR9n1TX( z*{kor`74t(lBsN--T6F*^XppI<1nX>lUOtLKxrS-ai+^>+6W`wi5Gs2gD1BwY*4jL zxaqX4;=5e^Yvjw_i0)N?PtC#-;3)jS#;_EzMDwgA{koiTb?-^~PwpH9`~r9u{oT0` z2_?t`@UaS1fmD%xw?+K=`tgQOb@%7`*kLAHWY!$BO15SH;>#YS#K%X{?cfTaW zW`RTRDE>}3UV|x#MYf4zl!d-}Zg%iKKJrNU{%V__04?Ut?nf}_ORi~_Ha=MeP4hSSmZ5yv__hDV>r>f*0Gh1DHmAkq4 z%coCy4E(XtW5#7117AiyqsO&fXI!4&?*nP`pDzPJPElYV3vnIpG(+cdANL736%|`L z&m${I?wC|u7hl9Psq_pnxRufVE^f)6;r9qw*dTXk)3(~(TsMBZJ1u{|BXbK3_}gU@ zp4WNJS>vQC}hPwTU_qXTEfQ z&+%#gu8@KP-$=si6hV^ZPLJ@R=D^nK^f>AXptEUX-who(&8YcnJlw$$I|CvGsd4Ip zRp1wAiO&GZQ+({+d{QFENQj1=(V}t?Cg(OPgz#hy*^DMvD!dPx%i~@`}EIS z9sN)oBj3&S*kqlJMrCFKUX2QhAD{8_6{;e*F87q%Pe2Wjy8W$BxD$jwIH4Tjt>6Vx z@OU#k!eT4B%*`1=NTG&K;amB<^GImf zx506civw;ogY4E9;RM#zH)u}XW8w8(x6#;W{!U%x9j5d|3)Rvzg-=nAeB2nT{=!Mw zEz3XL1vmGcJ59@;J#ZaH=5GNCDY>Fnb!~-LA=~uf4U=(xw4XpcLWz*ky`B#O!^Zeq zc}!#@1`z@zpI&--CCN+Jbn-;OAB^$n4w^c6@aOlgUpV*5O&9Ua-N)RR>(z?G=5JMs z?0`h0q||AP1d#R7D&h))f@wx`A5q!Fo~kYXc6K_Q>icmdi5tvbps;$tC2jVGX6^z3 z7^lsefubTFzh_BR_?t)v9lAKm!Brq^t5t&a7f!X)jYiNX)($YVXzOmHR9!tS-XvexP-X5uKW?y5I!JOu}eoerHAW+KCKArv4f>7^}xyOc6@x@_V$Nio%gv-@$qlZ(U>Bsjl(ePGFx_DP*aut zqk-)uu7CEmDF0w%~ME$$ds zKHl>TwmTs-`RZJ>$}ES6ZmcWgWGxybe>TC|F&qi)HoD>9RUKWhgFix- zQg0003P_PN-;U~*+w7LwR*sqJ5(1mVGcC7k zD0~#B^#}9FlZF$=p<$Yxi_3zU@D6szOO!uElAYrP&+P?g25=H9?aVJz1-q=fRe7^>m-{o4E6P@{5)HNzCu%@p>4n;5(ivF(l zXeI~v#TTh=zIO5)yy>NKh2JeKV5Y$I`o@^ z=s4)6_k0ujEu6L!5rJaA4@Tq9zKG4K`z0JEqOT!?>ZqxCN!7GyjqoH5z&Jk8PTcA! zEC4RQJDN<{3(KRq(@xM|Nf!B$$p=`6Rghz|Gcn|cEhs1AL6!08a8@s`5?)({j-1dh z{?Bjto*i(Su07`foQ9YEUjq3s>g{Td3@yu>^0R%PgG3J@-6&Rp;^7WB-zb!fUx9C+ zt>@fnq>1+|oX)IbLdeiXYPHG?qkUJzneU(PRHDkkt;Z_HNM5m9Dp2c+(Pe>d+ZQEk7*IeU$;s{ z`UB#IRJY4o9X(Dy4Gyj{!2JOk9l#}FVAZ+#;U4yd#( z154*c0J<~u4G>ZC54BfmNvN_dBvnf@p5A$1qENctX+gGEy-DC!ZMgMn^r8+|TV_U4 zam=@%Hr8m(`A2tZt6E)yuf7MdMZ-ABhfE4T3>-Gz?w(W)`o5B1&%B?{KF{`HH+yeT zP?>Hu%pw8VX0boJs~9~tty8yGe9JS-YpQ6~k1W_L#Q_yIt+3Uu_(&`Et?YqiK*3d- z{Smcf;$Fc{MCjMi|M*HxXH2dLPCTy465l$%A2}a9j2$%WD-R+YGGv;2M}}U78aHDZ zEA=8B#K^k$|1fT^;_ax=du#?USJVN@m41^?7JQS-^IY8)| zU&PWrjaRom@;=_}eJpLRwslQ2WO-J=ux~kYEy|FCB)3@kvIImGkFedch(FHL7`h}* zAQ-64~-8j0XakGE!l4P-J#~qv0 zdwgQ-vY%chpUJ!>bfeFXZcpw^?KHF1H{9d4fA*~(YHoDsDpkZ6ISML4{$!EUGCdfo zXsBdgpwC{En?$##gYH`O_cNWSVRQ-&_+b){J6dsf23l#$=pOVj5mf2ce+&`j^E6@$ z%>up);V^Um2UZ`|7jd5NZ*6sp*|Ws7H8*xzB+T|)Q)4$(Sc1U&>LzzMjluigxB>5K zTHAQ0wRq%pLD9?01H^PFQ|_B(1znF z4BiIO2nB4Lsibwo3bwZEw!693(wdDb`Jk-I>^VCcVlK5Xu7dy*0frcZ6cp(dW0`(v z{2!62SkC(9)8?p4@io6k>HF-y(7HDiQwJaxz_bw-q#htIo9^x-Loty!|72D#AZPn6 zFDBS4;VxpMbT$A}TsL<hHXxS~+OzFj`O|$E{@eFa~vsP=QImpaJ3pMp(Q* zQ?A}B@Cy$k6s20bn_ZLee^j*Ax0nB8WyMKm{iuxG-V@9|3Qp@Hb(Z2S&X%0bt3d;0e_4L zUPyW)V%(%8G1B&^tL^&|JcF7_^COXFJ-coC9x>YV+bnK}6=6sK#OUayvW=1mKGUqL zR129Uo>4Nd6e;%SF31ZQT2K&>trh6{B6OoAiiML#?vxwodMEwtaZsDP>l;QQ8VG!p z2?RnmCAOUZF~c5UZ7z2q>{~;Rz`*ew=m4DhsY8EXGv-IY+QlS10}*b3NT9*?TNFiD zQK&C~{s~_=^}3xwJ=Z`)6OQ(zqREmnF)9r%J>#&w)ligQw3!nEyG8=sev@^>l7bL^ zri&eyIcY(S31_rdz|PC}@;R1|Y#TCzia&mAcOsO6GwIIz1G$fJP0xCeC4)Xl&;UG& zri)2%e44-Cn+XdefjGxM34lh+N4Fyg0~(-lF|mC!D3cIF&?;JBtJG&?fgjd?vQ(ix z)E#AiGpthV`KtU5qBIrzgQ@&?v9*=3#L^j?f=d`MN167REAN@v;6DGg#Y&r@(Vr88 zWpSfibYDyf_DrKMP+pQ>^6=I3&T<6?@bBl331k!~?G|`t*HekGVOLj%-)#pf@J0T# z25wtH9F%MFa`>nEiP!XZkQ1o3>$4MSq&1+?`rLJ6__+rwAQ1%P^OP+lsx>V$6fc3r z>K*?NZRgY^iV|e&wr$(CZF{$E+qP}nwr%aUZQJhI=jq-bF!PWR6%|#_6}2+g`h5P5 zblZKVwZs}E>{oTxo_&+0vn(ZTSVCVwivu!lv;|bA;Dj@mpZ4;huQpi`bca5m>IlWr zD-Q@!u`3UHP^m*}om}pzK?@sh-P;63cbU)|Ddk<|2mlqwiyKej`k$HjR|2qX%CD-i z3eyMa{)yzQiHQ=Zfi8dE7P5gTk2z3~?gjT+YN+6*7W0N<&8-pGG~Nn3-i_8}i2e-j zpt`a_6?<{rYkgM+Zys4b582+pO_K>8Kx=q!issOqEtY(zZ;+`~P;5cvifr&Zt%|o{ zfk2Fw7uGe_j)`_)g^H_caMjKzuwbnUHm>~i+`qZJ?3^9Zzua?oaQdmg^N9C;^mT%; zv%7)j_Jfw`^9Ns!_G`aj7$*EYzu`m@k8AD^jYd`|m#45-xhl;{Y+6}%2@$J3K4ib} zs=uwP-|+h4w_J*Q6166lBPNm}=}G762l!?oSUx&j!i@kpIB8!ehp^_{ALNF*takpC zY6cc{#ii(!F$o9xP^D(mN9ZK3pQA)5>dwzE&?s|S?%_f2Q7A)8oN+$qG15;CbN>nX zzM_Yqs18ycr#}H=z6isn!zGYENPj0L!n)M)K0*A~>JQKh=HgKDBscpz8+2&f7M%lY zVFSoY0Jj6Og^4K1%U{W4pijlt@u#`PofIY4MXgAlDx;rkg?6&(%4vY{{18N+{ACWnXSt$I`XxH(7$9` z>4$x*%?xHxrF@sFX_xvXyR(^PZ#DAOs-FuoMZ`{bp)f-$22S<4EHP{fwvK$sEZHj``wbKW^t$uwSl^6pf3$meuyTbbeBN@UW<53H_3{QY6 zfieg?q@VUmLWjtXz!9(LcnqV6J2VH1M7m^fhTK7X(Wr4Xi4UB8vj6H^eL-tWl_5Fn zU4e=O0v5uy5@PUfG-ha$-4_hqY>Qi^gvQB94i}S1XjVyVtR$e4WK5xHrq#c079r0u zS~4J#pu?3QR{BU!Yhv{>z++9uhNMleONb$mTe?Hinx8DSKY$ws%wVYf8RA(V#+c%c zO__<%;)cPSE1Oqu7dZMRT3a(;pxynkyv9lIK*Wj{L6J(_)7*C<|;7^3sAcBXV=>R;E~P`=h5 zn3h!njewaCb<5@rF zysUrLq-tr=jA>{kxWQpVMNeYLT@oq2;kd&R*17nlFl6?S+5tyBX#H>}*B}#ih0@wx zQ{B8n!f!HMZs-YP>==n#IT<9%88;LG&F${A!1OY{c^xHNze2|8WHc=$C}>somFdui zA`4#JWhq`gH&c{Y*`{)q)Y!%RLWI4qr59!Q&3YHpMt$C?Y^7*hE!y!9!xO~|D?LKU zifm*IhOI{V&&$+`_#=&|?~=HC%cf?wBz^k$tkL8bL4G{*@pm>y$#qw1pho_^==;P? zyk+RCnBRqBR_>!oPqyT{EW+RTabbgoHQrm6tUPkTZgM(R(;TtO*k-5j z7A(kQq_Ax(Ypn|r`2o6>EW-)~son&f4M63{QlMS5Ur=LqVRQq}wFnZB->*BR|Hd-5&1 z{#Cbrw`~t=CKmnrm9~F<)2}F@g(J2FazRaioGgPX)Z!!J_$xMDSiD=7$6irXEDG1) zWfJYP3^j8@Kjd2gxM6;f1#bGlK4fma3iB+CU@#hh&m|X>b~qZrAZ-TtAi4OLa?A1h zZLl-^&btV7`f0km1aSU- zYil9}&SfuK@3*l`m3+*#$aB%$cJb&v7m(?h@0t3`=jP&fCB+$BvL9Nxj@9ojO`R$1 z2`#3o9%AI_j>I#OiAOP|rhn!S+zKe#$c2-|dZ1{@=QBnF z_{77K-tG4n+r= za$cgGSM(D<|Dh3JYxps?a_n)Yg$FQg=zZCMP)6jW;|iwX_+;?MQC#cH^z>Y$C4qkE~}g(Gs{jX z)7rEYHic{RJx8##i5vjfS}0R89?oG>q&yU`R(h!x4H5XTKJmPn{w7zOXm%*gkfb(%pO|66 z3*#T7D1#zu$T#G*nUII`j)chJpcE~!PVhPSoEFI!4N*l=0Z#w3?2>{?{P-Cap#-Cs zMAB3R$2TI1n-n8eA^W=bK;$w<%y|XeRCtPNG&c9xfeF$S%Ms2N5j$($F6CNbxQB^$ zPd5SsVds`R{MtCfUQ3>iLh9NlY(@oZIxj-6=u54l@sAHDWK~yXoy8%p1PaLchof}? ze>q}~o6Ebxf0Ed3Vv-Rk1aVZesPLwD3Mo%Szy+lSfWlCqgBQ_y+Xa+Id5hA!m|1seQ@nFBS%H(GMzZq;;f%@m*8{r=wV|c~Zr76DC>{NNnssPG(WVl!bupH+kmh!H-mom<{gN4so+a}7mL9qc^aZ8SHlaAF*9h74l6qDHk+d@KJe%OvGtW8Y_8=Ojb zeH3bt#PMjUwqe<4nhJIr?;c!ctSd+0{9V6vxf)Y_VghAtl2p`)PB3;TbY)fXuA@Mg ze@TM}LlLf}vJJfYl0d1qPSXs2P-g}ugD8I2t$H6RJT;xV7v$bpY@M#VeR#FK>aeLK``5sG2)y)bN}q zY3B%sAbh6rU-gc1EjmtoBg^2g#lBq{eNs=aJLWd^V zFZW$2<{x{GMn@qP#gV*HAWcnEBBdCz;oAdbrui|xs*cwCj8~ozdNDJrj9f{Qzkf3G zf-a+6%QkOvcbt1Q3s)mZJ-?TczAYnsEu>XW$c)#u%T7kJQX#`MaLkbz+}KWush(4g z9M+^<t|0S1BHDXOotGCSz#t%1f!*u1F_vSOJ!KD6HIyG>ylG z!T!-b(fd*Oa1W((2aPR0wkgrHfOq;|qLE|}tAtDX*>Ma6Q!oG|I!x!tHjMElCL z&@Y1%XmW^I(R3fcxt^fS@tB~#Ix1m`Z7UA-ZxTB}q(X~1O*m!s9@tA=WjJrZs;%bL zAw_WLQEzjHq7xD^Va|3s0Rf>TUq&F))W25GazrkzvoU`F|2BUjKo<_`8i!_5{LV?) zPSGd*((*ktOYzy(rN8yOy9}B`gqZ&-g;HGy7sE;uA?s~LQ_Z5k8Wz*)cPkC;0MAEV zgvPA0*qrmlZCW`15_O?fimmV?u1#5$3KQa;*mBin;-L{izQuRNT@b;EP^HUVe!)@-ARWW;d_pyOe%0PSYEig(o-jy$_v@Z}KyK~m$M74**k zTL~iZd^H|9nZ#$sA4`L42}c~m!-repgkn?;0&VjLMbg->7IXQpN!{kpyE&_PX_c$# zYi%UtWM=LlH+h-^(GnMyUh68c5$fdBC`s>Gd2yH4U&FjhiJ+2B*I+p%0&Dbe9rXM} zon6W_8L8IigNv$oW}CU*t?tn=NYq4t!bS4sodEjAe0rL>iJCv>Uez-E5JHNfRWE2a z10!wnKrhhQczN7D7i7IGQ(W0PNNf)9u8xpW?n>P26A}9so3gn4Av!CqEM7PhFU*=C zx`rm>rG^v%Z;YYwdZAdacm+x`zo0MS)7E0?`=zRIKweJNW+ zFl1T{9+&@WnIzRf0Dz(>4W!LOa=9{-C*f<~c^WdH4-i;vtcSFclLl0Zzqq))$h*kw z{quC5_bW2K2>z`QeRSH<_XOd6VC=Gx+xPb6@#59}5{L7%A(teIf#^7YnRMgX^MuQN zKjbgN>otHe4PjPy9}qq-N|o_-?sU6?Q-Phke>aqV7wuV%$#>B=H>d`GFj|h9FKT-PEPQor#Q1nCF8-U)u>4ja2^QcJvynxa)&!HY>rab=EJW6` zQ~kMrWh{gJbf;r?%=QpxRvrQ#G;MuM5=f}5_WqAe1Rwz@x^xu z2aBV=qcl#`q2~o|oI{rucK*TnU5CBH_={RP!6hrv{o>!JwaXR}UA3 zf4nl7M-C2fI1=0QL}V`ZHyVm!H%`kd!&8V8krOK|A@9nlnI;(7RmQyOSe+DTx5@;STRmYv4TFdt4uFw*X|2AI)EC=5*RpDKuuo53h8ut*r7 zsF^`9@#bL2Pd5dwdA*IYR#xC@vK&fOi&A?fyEf4Tmx$jI3tE`o%2c36e6SPNYyBUIc8AlD!=N=v`kY~9x-Ri?Pz%3YpJK$Lx`^lP@(^uJt zW9j|(i7V01qervFE_C|8vwFR`J#Xi%-9>@8z|0hQFx9jOdu1g~4Al{WL>yC?W0RqrM*L=_8Jjh@ z?;P_t`$VkKj;dgOdBJA{t)n`D4)S=%*$O>Sh4Gsl>loUvoA>Ttwxb$(u%xxJba?|k zW4ARlL5F^N8`Rmg4go^dOcP}6)sg_R49foiRR$Az$hAJ{Hm8c?NQoh4M#270F39Tv z6-sn&a}wu@spxN$qgu>EDKbETQw;Z9!?1*F66SkfBvVy+@eF}|V~6BNbkWA)%(L?b z#ybgPTEYni)O5uH{B@&e7+t3!(e0O=bG&$^bwc6QKH(LG!=oUi>0$Gc=lI1CeW3fe z4RwTFB{AYgOs`iULSO3Q7r_j{1pSv@XwD6C!f&b>3k|afN9em_5p6(F_keL5JY>A& zFi4x=BRb|*O3^}YJPQwh-6)_~7iO$@O5{`c`m{G*y$#}ZX`Db@?kOK^z4e(Q-y_5E z4dV67q-|>8hmM2GCV8a3J#37);4D$@>|amErSm0UKxFROo^<$Ty;uwe!Sj8Ro$fF! zZ>GbCAwNiim(_;I-g>QBqsylZ{M~`}`*5A6mq1>GckwlVe$|TV!+snwk!M3yG-?Uz zM=*N<1_#~n6XEF$$>e3Tv8=u3SD}IK zJh6atT0P(3*7s8p32R$a2?w%nkt7r9`B#U;v-18GoY72q`?U6`2lM>zYS#02`bY6b z>JGFT&E)#jiLAQJN}k>8oG-yptrrOKcG+>ankOV=eO#XaGAL?2N^unn0(Pt%-CebC z!2-02&ebb9shAB?5JNA}n+2rqpWh4n$9-WtGgXAvad4jPL`W-VmzFpg67K-adsFGq z&`*12mL?(m+2PjfXq%N4oZ=poQV|^r?li(}*76ClPR(s)H~ib_=s?56Bl3byGg4*= z+Dx2I0>BsVmy3}Rb2*EF>NCEF;W2q~Q{N_v4+ z{8++v(8Z2mH@JZw?r6Es*hOwJV>Sk~97i4akbZl zk~;i^+WWaH1W6UW&9-3cHK9)B(atuHO8Ntxt)jEzW&QW8F0a2&35FJp+tDRKY7`si zUlwj~)Hy9LH<9Dr`3A)ziDS&WAly*gpjX8v6jIVw(upybMh>uW)sn!`y)P#ztO3$r zF{2`|-hVl6^Gj*1jk9T%#Quz1aB?ueEB=mGB_>U0Fy0z$s)HV8M!>`)Aj;Ba9ECqW zoZ;sLL0pV}cP}=V z$8eP--t%zrgV6tk7?{9PM4vyT2-Z=YUEuYfax10r2aIV@Y;woP@6AjNW8SPjY3n?* z`+U%_CQdybrL**?0Fxw8X{@Kege^QTj1Jl!xAjvq9Z@ZPZ>!(f4R3z_ zshnYRZz5@g;y!ZQdukn>Ss1h&&fsYk>XyXY6L&pm?@KuRvBj~&8JM@tWZVd6uQFPL zvO`b<_4|%6cEfftg0}h-?m%b_&I?wb30M{`ghz0;g~9U#H2|D~mD5LU__uSwv;p2z zAzuu1vuk{z;%AC32u?WHr&T0i=#ybfg8W+`$4fwaONS4IX;K5S(uN;?SoxQb`z^i@ zpO=L0F8eqgi+ko@pjKZYp|gjfNqCXhJ4dEqmXSs4FTPPn#FXmWVWWW361KY=+ReV3 z#NPJ(wYRUMH2Bi2;5?8X=FvUT4qP3M0NNXwU(cM&FGsm#7?e`wByQvF$JQ z&mpZ5eVpo5|Iz?-(xhJ|W7aZ(o|!x)ihOlJOZq|qG`9m9?gMlViXd~HhGa`j3wO6M z*3{?0?w;LJ8cV7R{n{58nL73kaH1y`Fy}pQUSM6%(aa-|hO)c246>-+e2CKRN%_bgi?elQo~?wRc>sU% z%v|R544+0H+r&9#22Axp^ThdUkJfI%m|Q*HBTdXL=kqkM77uDZ%7n;UeIPKN7W#I? z8lX|kZn)tj4pzJ@X=)r4n)y^*CK|%TesOWKi%_zNpac@m(gwhNn1WnN{|M-^;C!hi zQc!F5Y~2;VAz2Z|JfJnfHhCD+l+}a_q;`#voX&JUj<@)YFlIzVTCv1FIeDn$D@L`P` ztd(bE!q(-XGv2!V+$BIcP#l>kFg+cHeiJ)V=Bc!$_iXFGK(D)UZ9vW z&~Z7`aoXZnx^cVviQ-C)ww)t3cNVQ8741*JCv1Bz>_u9iok7Z9)yj_h7hDI`HFJ!G5BESPGo#yU&KM!|TvLOmtDBawneV^K5Hbq{_i651^o>3Yl1O{&UoM#> z55v{vo+7D_Yj?(+8li5wN5O*GwJY6Za2!jrpIREN`&3bys(<$|(iyDyfHMC)mci2$1RRm}w5ROlK@6_?Aqrs2WPNwKkx6Xvp{o1FqlcTDlJ8L3Q~2?eZ|68{Ef4aHm#tXOhqkM8YZL%4DRx!2UB!Ex)Y**Q?fg7` znuk&$==`ND3h|vpqj>;1T2X=mLR2hi#7_8nxUB2vg9JO4AkeJBN8Y&EGi zVR%SU3xOJ2WrbZB;qUDuHeI}IP=H21vDQ7 zrVItc6BVHQ&QW8HC%*gw+zRghQJ#){T&uSog;$CbKX*nNpiVyF@#g@*MQ`KV^H9>9 zc~(ab`!J9-dy@}qE+3yGMi1?SYFs9?xmmjFOsvu0#KjoKHIU~rjK3Vj!^O=&C^R>{ z`{g6xG4JzrxcfMkf74rVzyGP<-b&>Uu#FdgrAN`RGIJi16TBYZC)7zc#enWinR>&@ z2t}=cNU>6F_=9DC2YgV=X;*QX-e@9Il@F=Gwr^lXKP_W$K2=D_8Uyl`96$POtiXbSu1wkw^cU* z2{rO8|6fat4vAfao_S{f@2#1}t+JSPYiCiA^D^xV;1C?a#APRi%fbwfo}BXL7g>9r zWpr6mG7(1-E@G9m7qh`k1}~*;oV&2M*&bR);-nK6o zw3aS_3?JTDfTnH*M1u5WDuEr|k^Ci#+M|~b9WtIr7PH921S&e-m0LsZRWYE4?H+h>wCX|L7dG%L20S<78n9 zkHN>ewS`wA8SRb+ov$WPX%~*mQ7AOU2#nsA5*`HISI)}Z_P-DTzY{*~7UEar8*LepE&n;myrURDM zM{Jd*49;CiS^Vm;ZJOk-o>40b7J|^#!N+I^@vqj*PdMw#i%+kX0obDAUM0CrhXYb0 zSby)l@22*;-*0d?e>Q29q-a0iiJnz|zNmuHLK*3pIXX=pSxW9P49D<4@)b2h%IG`Y zh2T zfhhEWBm$%C)%u=0OOH9gVG}W_Vncd=wm8~@h@?NUgk+`r$c4RNXq)thUMdtipv1c^pToG;v-fOJX=kNQn|fTPS_I zFjIqzr-i4V-!Q=}Q3vTSSA@}iV0|>`GZs4;)BVjD?m{=yV5$(u3WOHazB}>$Abh?x zf7wL^sa$p8q9YzD|BnP#Ao2SWOAnBpms~B(5T7!&K7(wv)@+qu1nPNp&z1HqnyxJ1 zrx@}LyQ?|;VZNn&Rnd96E7@;PQuDii%U@T8h?JDZx z`+MD*V+-@4ZN|`-HAiE`p~zy{)^>DfF2idvg4I69O800b=l$(0?P2CeE`uM3(<#uh z&-b3*tkK>Sp8iT_^Tck}EY}Or4qPqQ4iSjG>AZ&B@qYE{VU1^63-gwcR07fxdfcB)S|q zWXbRD^u}eP5_h>msz$4A2E7;FoGIP{pc60`lN#ZsY2@!#85sTOOv&to`?cJO3gFMc zJU2K3NBZr`=Kz^Zp546>;4|&-D6S{^&RnN`&buMlaK2lX&~aN%&MvKV{+})YAPweB zTn>4$n;Ld!+VuFQ5#zweOGCCExD$VuBOP6hZ|qfE4Q0Qxn6Vig3}FFkoaaqdkK4C1 zzo?ZQ_P$2Au~#d`@_D-qhUFkzY>6&zznxt*UF(m>;b>F zXioYGlng-nL*mjvp(0JTJn^D#YCCsQ=d}Lz-n(7d07wKCGdfoLLwVu1n(R^Q zf0x|cjwC7gfELb;&nBA?6w?19Ldgkc7Lj_w<_Ewe;`BNy@ZpVbTiFlv12A2@FOI-y zLEH!Ni!A>oHCJ$(;;QSn+GF>v~JUD^auj8h#>#GuhnUl1--5q{F?Nw^ZBfEd&G%+Pvk@g zccV3#5wis_=LN+gc!uy=%h=(WGF&)SG0=0BDopW7_ zT^8>W4Fv!m(VH%w;}jpm%w^2rr2`VQv1IG+%8<`7$C`cuh2+A(MfE!qLDnwOY7mU_ z>a9^SynoPd_*5ug;)kZ~eqCqv^?=Zj58VUF7NJx7A)K_~1(|*8w7k{+%xnzpkCOgSL+5*ehgl;dS2fkep5loRExn^Yp?X89;g?o-j+5g z`or6UoUJb+3n|%l&qrBgvCiy%>tFBO-k=Rxf?QSK{FO&rJ)LuZ8wiAQ*KMv1LdUIa z!u!!j71Hi)qjE*WKfm_2`x7-1EEi~EdqKh%GtjE7Sbr>JZWnf#9qrO*n)!YZf_NDk%Szvgv*O9k zv@$#zcI(8zG?%|?B|^>#!1(AGob*a6XF4ad2s?hK2}}=FmMAz#N+429ngjD}isu0) zrcBLM2|O1#C%OA*N&_JZV`wfFegK+uar+iK)o zz!2k{P}z{La3OFI+R(tK;$5LPZv-3`9Uv`HjDsOTy0HgY7B^;>WZ>in+Dc*dO?iLK z!o$tC57HtIyWAAmzW?5ORgeg74*g0{o1D3 z)oyx2o7(6Oo8d1ljf8=EKJ-GkIv6(Ryk@WK7r$YQBVY_!QaQS6R5{=9bM=5QV9^zYSw4pdP>m4&aLR>*8R4=qj{>=_o`r(qpB4f;Ct^5l6X&NmzCO! z+jagx>rUZcEt)>AHF@j$znaa&v{JC4(rAWzV4qazhgq{b`>xt?%A0LLFB78>h~ZXI zDh9#zP|yu*Bsm&OsST?$_G~&f*R`}pb~zbgu{EeXKoE%A**kMw+*VrNQib9*t}6fF z0XF{tbzs5F3`$B8Cs)lw6cm43G=)vKgdea1cSmo;KQ4a`A1N$)7D&mD@Z z5(u_%H6lPkvj@@a4z3iL44#xvnz#3Lj_q3hKNHzqVg_aTCAT&9Y1X^~^O%p{?0%n; zjs&%SMIm;r^|W}Px2OoabEODl%Z7X&`_(4BlI-bqXV*#g4#Ovh-dKB6Jj1$MrUm{m z-_Of%hp|8%2*7=hZK4|xl=)uYpqplh_EG(|UMu(WznbW9@9cWhW;@TU$^L%`I-W94 zoxb!F(y+;nN*a{|B!J-1(y<~RGdNq^>~+J`oe`kVEKwpNZF~So_HdE<^|W^pDnO6` zdcG^(@jl;>?)+V1qlJZ{#0eyheW96zlKvF8{^jD&2D}l_wt$zr?cT5`6xKYg0efU_ zqKp2fL<8AMl3YrZB-x*mEG{w!lGLUU7A1jJ0kO>HpK}HP5WoePev!2J*p@ArYWF*n zJ6UmN9K)qy+lL$cLHFJBGDqK;hL0QoLDv#UyBW?&XhMb33BmU5ZR7@If}2czeQ^MZ z1iR~}S59A~yj$i?w~rg5Qo%e*%e@&oP%SS?3!$ zMe}PwF0kIb8AE0dWR`(6iGggsJ0sW!tJAf&aVVN6&D#H{ggyY-cICY2bZ| ztV0tW=kKRu-Ku9L4c{HXD#9%S22%xKtG;P>qo+!3ck>QbK+nd~0!JiK;TJ;66;5D` zBLrjd+cw_}76yzc8lW{YQ*#(&QDnmf_%n2mDzUpuyz*q{0{^@174+L1>X#Bb-Xj30 zVa|Z(0LWQPnH4)1LbQilvl~i8pv{PC&Ad%XUQ`9f}bhzzXsX>9vwJ9~*rsV2-S4bS3+v&w!XV>dfYL ztB0djlVpUjK)yHut?h>(8(1D!2ory8T$J2fQqxerG|&?Fr+svr$HEws5JOG+F|3L6 zsV-QkUIZ9m34}__#7A&$4f6Su6ZGp2ca!Krysb5E!=5}aB?rF>jh*(R?*%&t9*0rC zx5UA!d%v9$yMFYWp0zhZD9#%#WC_mxZ zasmYVG}G;}&=8mvHNvh@cMgS@w?Ko6B^m!1&`4Cwq;e9Jn#K=?)PPrU&_z_kdVNzV z8FFOD-*lZ(1%y+<@G&t<+Ep9+&|#d;7lF1Y37+`xFqbil%l8ETNjv-~7#I;JwFv}h@(2@jU7#4*gyLS!#ZpF9xGTiIj_k(JAGyuLieJk?;?#o#1&5f$- zR5d?X*ujlP3ye8h&1~MY+RJ5=<+00j7rR+`R?MyI)XC}bgU{3x4x}-S9%t1C>SGtL z`7dh=J|T3p1d_?H710bGQWzNb!Rle~Kr5@~cpL|2vG|(TIk~ImM}$wx?gO1voXBi@ zuunE&6n0?zG*^m2Bee=0qcTNvv?G@21_k8ZK8o%wg~ee$f=-rF|NFCE7g$EoJypF$ z&LdUbuCZfA;2Vhpt+2(IB(9>{o=(wXI%OHd3G~x=dd(U##r8bnjN{R!*`>~!Z`XM6p z=*ZlPZ`JBoN?@VK6aI`1{27BWVLpl%S~ayw{uzEIICXr%5r;q?f|eMh9k5g2I9tk! zm30uNBLoB*pL{!IHKe=Y8Ob zcP7~aT)j}k_SF*LDz`8)hFaitmD@KbFThg%hD{K>OYrsv%L z_G*vJSbgzGu6+;4dIt1bd>!zwqiH(eQ6TKk{!DsPjs|-Vj94B1P8bD6Zp8E)38ET$cAXy*%Py;?zx-1`$?fA)F`p8EOnx#A--sK^I&^WVrluuR`91nd)E~{ z*cYE(da+l;-3etPk>c47=uX7ERoNt|Nl zRYLv*s00rt((-ZyfCo58ImMhej9o`9U{MOaL80CE^;`h5SOSQ-ojoITBRl2SynfiI*TcO?Y?)T1ItJ_B->39T&k znssZg%b;wnHv$#(Rk}QxC3zj~9)v^0eUm@*zyad$9Qpp5ARsYPAOJ|81368VfvYA* z_IL-{+}ShvmiVXZW7sAJcrvCeLF+QwTQFtNDi-E$34oMAPwT7Pp-4TW;XpqxlWsvk zC>eLDPK1VlkAN~3wXzy+9nvU&jis~9Z+!F{<4WId^QQ4jSpu*#Zg@oeNf1Yv80aV; zg7_@QeBT1_enY|tMr{l7T|WDEGEVg8KW@0I2wG;mFd%r(#0hZ;gJ&)zeW198%byLx2F&Ie>S%a$-+sO0423=$5kQA-PT0Jd>gr@w)fHse+6+whZqAbDuUD$X!*? zLc?MZhV;V4S-V7U0Bw}OR>Dg6Sr3n~!Xtpz8pvoWueNe_JM@uml=vC+O~q62#A>F+ zM*Pk4OJHw7z`>`v`@lYLne;clGP@Non=gAd0E)o;DqQ$lp-N3hoZ&MMp)V8;*+y%F zGHZCxTH^ew@UDL7J}2FI)qQ{QS)~$Q)R`(9iwLs!?YXe;udRVywU;SqDQ85LbMXC| zsgw>MDR&9PqXa|AdBATuj@0Rl#@fBLU++>xU1OPR`8TL*_?IZR;Ly!M8>Hd|(2Tq< zyj%K3OIj8BnGJbe&u(Ylhjg~;#l^g(B+we%AYi83`lGEl4)HK*J>ThZmjk=al?Y!( zpdxRh_iJ-bqg<36#2G)HN$s?BuOb~3(7Q}4Eu=M2OO{-0zLd}$5NMDz^ssP|uftCX z2iE7nWJ_QjGEW2S4#_yMacn#+NYZS5JKV~}1@*C0Q?F&Dr+}+ml&aj!hw9dE4)d_$ ze1sxrh@({xf*ELWEHu_)b*3q;hV$hopqpF|Jykehlz=haB#}622Tt!;$&b%j%kQ4>zzRYVwZ^+e;5Xo4nf{jK>|1drs z-I>^s%t3J#3sEzOVI?dYA&sjJ)}@E!a1YL|DSk!gqdbJ@Tf%X_B6N*h%ty7U{;1$Lr#)x4WmX(Emf*IW~z7 zwB34a+qP}nwr$(CZSJvc+qP}b9&4X@pQlcpIzQn3lCGq?Qe8<`Dp|SLwIpMWCEBeh2_ySX{`7$!v#eQ}nQ1~YV9b+kAHWH5W z@C_7qVdn`Nqq7i+T$`rFvi2*_qCw%&oslGu3IFs*@Y_1l!DX%gqsH#&bUYTiiFe#) zD0~xyk=73#C0~!q73Mc5gy$|%G&-ZE`15?s8*icOgro{7^PZZ6A~jf<4oWSRxl-3c zIqyBs6?SLW}2P)>^20=cmEi&6&ILjPbyJLqD$4!%@mcQ!tropTJ9N8PAM zJEzRTy|VB+8~i9S$$)!IFg#_`1S_Ns+i0y7xB=uqm#;Ul?k0S@vg2Ah770k3b&@Q_ z4BHQb)@DjZDN%-+Ax~MjoI`##SO0!*`e7_NG4l{j>}Fz4G_mxbjIQEKm$;-K_(*%a}27i&{n*xTB| z9`=Uk>AyQOVK1w0zIv@!{_PDPAYc|TBOS9xwv6V1M=u;9v+{f62&CydGXg{0zU;&- zR!p~M!y=dGs|hxTS?tV8MgB+vQf$|afV!A3(m@TAJ+et;zewgIB08lKYNUzN?G_0Q z`Grmj-|r!K_@;x|-b+ayD3WlQ^9o8g{e#RY-Tix|{+_4u7@4{aapurH(Zi_v)_E&q zm!tKGdYZWz)C*z{@@51w^wBGyVP0j4q|=7T#*bz!rT4=fX7Ue=%CW>EZls?Of?;Uj zKT>S+^@1fn^hU)YWhbEH^J0ikvQIXmH!w*Q4Stm|vqfWQc_wE*xkmHD6PmcRLZ>4i zT8&Q64eXrOT+ZNRSjP9pXL>y2mjQy^eFXS0i*jy5Hmvh%z`Ve)zlzA$I@g5;WqzZL zeid9WdG|uQZcq`f zUCWep!a!iU`ac`jAu^YtIr%=lcTLKCB*1#KodVnAvO15(cf}?5Yf1=%3V?O)mDw>c10*?on)_oX5(CMN<(Zu-G2gTkM_0z{zx0 z?wm57bMYQFv8qn!r}rIGC1^bTR>NsHYdYCPQ#U-_cAYt+gscS{w>zY>J^(xIUYOL~ z9WQ}KPKw#CkB{$>1)x1^szF#W*|JhDMg8-UQi|H#$F^ieIz?r)n4zFMF{!mP&QzE( z(R&G#70ZgHp;?0{ql()i<}g{|1}Yaco}5oCuhzs{zoFoMRA-_aFF|>tYy&CsdwGnc z4Z>3%6}5?Eo@o_UVIYR7W&;FZRDglDB-jWRb?G;HDB{bF4s$8=gS{9Vebw-z=4s{z z!-G8h1^G~lb^pMdR-HB7`SW0l;&Z3S7j3IA7mp#*W=gizR!YXB&ZIU*`4i1puNDiz z_|BFo7fG>-g-TIh(;rqJ99dm9>;A11(l5)rzFNi9k6n}?+fwdo?>k&sW7e?FTorm> z)6!Izm#&S^ySG3XvKQAyswVJ9zRgZDuUNRKn%I=(_N~~ncKbLy_TZD#?>CDqu6I-p z)wM1nHI2jja0$XzqFlJj!8J|4b)KK=I?`m`9*B}$JiU0$2m4F>eyFTKwhMAM7K=v; zJKM;4<`E2d0=CbA9@7JJ$5R3gxg~l-Vd-Ja9>8ViGd%i!)15)&)*j&LK2(=;zafeZ zA=cxr3Mz>*=LTJMaJe$=lfY8W_+dhdSNJ00T-|au$l#K$Y-e|o3>~m1Nw5`o;M%~z z;4*d|%TDQH{prOg*`1z-U&#aS{D%p80aMv+vV(e~ir^Av!lMDy`2~hqEqgi-@erwW zE~2!RAZvL0#|lXFA}p9^lsXW~$-Wv6iuPqTJXpdhl_cS#owY~XcYZwtk^R}$s~#Y* ziAf^d(!yeKL!T@I0zJ9VGQbEwgh0T5Yih8f+=1$MTj@|aHRxF~=$Q&at_WacxMcXx zK}u4rDMWB{hj0pWW!cJOlwX8sK!Ge|vk%4OILdy+c5f4x*nsk?Eyf^sZ_pTz|TFm%b_6rF|p91e6^&Ol99z+sUbU+de9@ zU&7vB#>$;I<(n5W)vlUKH|}VwHqsS4<`p^zhRPQN-okC$!nGS4uN}FCs~04%oz>^g zZwRj)J-xbrq-4mv&3-{?bmmJVuw8VB{~ANts&H2#!CLHgxb*u8K8$`U*NVZ`5`ZiW z01UYt7)nm|eg3xP+wE*{c6XR{9`1PYOMrd(MCYFN4gJC&BX5`*|6z^mC~$Fe`?Y zBXZ}rb9y8E(Rn*4BeJ>#zKHa!AhuVedlO}!uHMh;E}vIBHAwVU4U^2hfyJtBx)=8{Zy?yg7e?ou z5o*#JLYXN;+(K*ekO3Is46Sx^I`nTumNnHCYS89DK7&%Oi=|>L!gl>T&OBPy3*ARmo@? z4!izv`vPV-!W5H6ljOGUlR~s4IaI{cQpG!1MPYZOHo$~uOesgFvJcc#Zawy!e|*U_G}Q)P&e5 zbwUF#BOjA+le@M`zY1N|*aW`!R3HVv4(+9I3V#pEM|pSsm)!IPgz)M+!iDBJ@B&h3 z_j{Q>Mew1?Ix{NYy#{}y{QGUT@>=NcBXCzGe?9H@#Oxh_k4ef&JPCj7J!} zz>6;!PYL)sw05oX&JM>c+rCbs!*24HKQISy)_R=2F9Yp9Y)56pq??C0zkUxB`{+Ftf!KDmtMF zf|^QrBV$5JmG-V}an4lG1whQHH=}ub(6e>3CKrUulDidQ!L1nN4#M%Hu5<3_%Y3hL zpW}D@%Qv$`ErV7Z1a(RFU@d=47*13eygv~cFb>LiAiC1KcN`JoVYr`yaJ%+o1)*#S zyw!^tBtX^W2vLKKnOwfoO;MW-Dj5Q(In0 z+{Kf?IBh4dA2BidlY^1E^1aN*;@B@b(xJIpeR*&@90i^KZn(&NMI`QnJdoF~h*CVT z(?Dbe?HfO$TU?mNymDjT0`nS$S5x9N5gdM&bOViKSPRgC--&&Tajx#q&Zh5wF2vB*1bBV9OMe+ zKW*<*a%B#xDt^0O_+x~ChbBzZvLunBD*%WavS%1}1MWVH{U^f4Eg+(S?`}7j9nU&A z;2V7LrIznI>qBUb?8xqcGF|=*7!_P+D zj^zO%5Av35PIMw7bgcixS+`;B&J18|F24pmha)&lnI4p=3s$QxHZG!lI`O0BFQmj1 z5RF%bhe+JR#_QdXwV7y?-Na9l;|JL{1M<*}OOE6y*ZcV*yELwj(fvu)SSp$*Tj4Q)iu#7_adJI-r8_a_Om&j8V5!D|iAT$`X46!a5k_@bvDkWZsRFhGv&zPbZ zBUE`bjh*Y9DM2=n^9n6iwHmXEPW$T4{E9N~(aw_|n$*{6jyqGK zPMhq7u(M2x@5vZWo;js&)eRn%d!FC}hZGAoo6~CMR!U7MPMZ*7o+6zI15yLQ6}kD! zQ4OdHw!y3#VA&*hgPnyw!NN!;84KQRc519gPaIKDRJ1s=JGucmRQ(14$)#miyM)SXo61&h=xEVp3leE z5gP^V%z{>sWg7!S%Y1Yj5^J>FBY1D*Vk38P`V!|a9z@3kVE*#jqDTTD50_0I99%{Z zhU1^FP9uGlyF2&VYG@t~{eW~hmYI6?c4mgokf88c^u=l;7?&HKe*GqJ3qkGMA>}zl zPD3IBK*R%xg3Kd58E1|EDS+0 zp|vn(16=})k3hF-{D~hS}KA_+xiQr}r#fR>C&@^dc{itJJ*o-6k>h$Hd^PGbu^*OJIplM)wX!Y=Xrf ze>aRGfaluyEQC+2xbQ4@V0bcnX*@`c&QT(!q-Q;&#Bz{g9;)CikdsWPdepP|-O-9L zO@DtIU{EbxU5$t=rzW=;OkNTQf^8u{KUcGLX~R8v-0F5^#X&R=N^f8P$q>sUK8~uz zTO^B*sv19u&#c!B%N&^*KiGj9|AsHW?J#zg;z|yW@JZLvNRmsapnmD^hRl~cC^uoS zSmt3(gnaB_F_$@o-DD$8(+dB`iMIz=Hn6ABU)tCHghpTcFtW8Sy_?>7lzA{=}|6b#b51I>8pm#471~>N4kGhvd%S z2IU-4^Gch(VcK!wPa}CX5&pirpexm~DLo}Kj=f;s;>zcglglqkhV9-x|f?h*0Y{ zTe&ywC|~R9gLa27gEzEc@;^|U;bf5SiC&^3BGOA0NRv<=D#TM#!q8@l;-}M)k4E+5 z^Y4+~ZAR$4c|@x-(efT1p+Y*id8qT)ZZ(PEWl;%_izRrqjiAyIj}jT8QRGWq@F0=W!$3p|rnV0nY zEQcfICIHjF@{GR5uKvR&1m+QhxK=rjXImJ5V1A&DHA}?PKIPxyZlzweBXnHoC?(W$y4(qi^;VS8q2w zyUejW)hE_?xs6}1NjuZIYivg@#TsSJri`;Y@EWIzNNZ8?)B4%CA0>z&I2Zb-@fX6N?K+Wzq%hq%)(G@}z$>?CQh@iWsgKd{m$&MB6b^ut$%TDC{DY z?xv(Y!w2o?kI_8I{G2Qem=^r%+;sj^A}PA~@jq3KxK+1$2~D1pLh2pnBZ*C=lLGj~ zD7iErt3qY$tWF0ox`+m(hmzvTtw81mrV``K;~UFx4Me7YX&TUXI&1nMo%|2w43AA2 z?v(=AV@b>sP}^81QIyN<4Eat9`KJ-b>{5*wdw6gn`cYhs#s!-M-7T(Tb|CjCE)s!* zKy;I#CUv8yanAQfjKq4gGr6?@^4L>2P`=}$t=;0&*c(1_)vBZsw;4GdO=U#9)E${O zW~Q@~)Tevg!=pReF|U^lvCq!RhR~Y(yIHS=7%d>n2qe6kCg|H*})}}1;C^tz4KaVqBJ8ohA^#?pqp4g1sZqIagoPxN839r3o zLS)^0gGJ>0$x6V-7_r}9@JO)Xxqku{E*6U~S-va$d(DG@8pxw6Sh<6SII4h0j%?d3 zH>?RVE6Z)f6@JV;!bC+fr(Wxlc@**i?u?U^>}WzuW_%5!wzOSHs|g6) zwV)X8JTrB!p=(sP1c^Q$dTUvS@jxUsYsw}$jd;V=z}8_(dxWURM>b{(zHS1x$X9UP zUj;BgYO>VT!_ROoKcD#ucn{It93KNys^?~SyNmy2mQHoD$I0M&+CtwhNA9|tIJ-Gs z5X5Z}1ehZyKtgv;1&=Bz^)F^{&7;pe5^v(i&mxT4`^beOC==YN3MKCjLNX0h85N5q zW{c|2jRp%W4Oaq?T92f|UZY9S(Jt^|;8^XwjjrHkOJU5{rdoEKbH8Hu0ZCnV5}{5c za{~D$*&!^34`;K!r6LGH!5!%%nwrpga+tiSdmBVp;}^2^cO=9>iindWc)&C<4pzIy zwo8wbhByb9(GgMcI7E4z7zP=qIdLWnb3T!CX_MCa%)vFN;rVYpfDs3TmY>4tDM`fsBOM)v z0}>)1jdYTkM84!hOC+CF&LNhjy9xX25=k}tmyh6PNwS+H4eNC>N$op{HXx_qJY5PT z-h7)RRUh+wdRz-uqEjj$I3ZEY`toO((1Ph6JC36!2(#?wyuzA~!7^2{9Yu=21>%T& zG@DTLHvfa4*x6LW z5IwQ8{@mucWOu+4PtV;ErNGImG%#A72j{Mb`{dRiaT!{X)S@Q_j9x0AHP+3k2k2-js z3=~jcqL{QlOae#cw#d(Cqpl)nh^0n6DN!KhuElJU1b#b>8-y683@F}9N{N)pbRtO_ zy!(`AuZW}g{5ef#`qzhA{ue*`>GRSuB@_Ug>4`d}!)5^o{=}x;BGYX4Pk>=>dyO25s_7qAu;bg{^$ooJi z@Vvw%k^g2SmG}K!06=cINoBoy6UzQT6Uy?5JkK-Id0sKc75tgU739CenSOieCXit< z(HI9cTvG##nrd1;pW=>L$R8W^7FoF^t#z?XvPMxDXNLjtP%`LF59B&g00T?@fKwU= zw*Gi03@K&-GbEFdSnFYd%BJb2i`*R{aobn@I;affje=s-R+aW>U z=BZA-p4#GlK5Mo-a-HsAd%TW*!QB}%*-@t6X_uaP13)v2^S6-9TliLwOxyso387bX$lyr+n^#N+IyDi`Q6?FGKFBP2W5jfOUuIAye)1l} zlXJ^zsG8ia8RxykEJIdStd8+llO{f|&sYp1y(vEy46NI-)&D&+R*X*5K-0%karGk; znE#;0zNl|ChM?P%3Ity;L9AiRE3{Rwu*T#Y2}eGjT=Pm3MEx6*)LIV&U%heFS$g#! zM4kHg)w36^b%u4Rd)PP%pJz6WJ*kJ!ouWrwdzc!68lNKL3}}w~ zXA@ms$2oiGmo)Y!<)D_ql}7T&Gbay+`|4kQjPRI@Tds zX1c5x14irvKENmm*&rLm#v&L9$Q|mWeO|V_HG7#2#Ix%0a5xDfRHFn$6^d#F!3AHQ zwE{X2R^zY8rL$e`m>Q{B*l)~K#j~fjzm9N)!6wRTZ>C&4&TORIs6xVa5^)7)!pAo< zoxUY6ob%5d^{PgjR@qHBmY`cS(HY@`>nv7w(EnjU}ZNn%S= z&&ZrZ_3155IV!#y-4mg8eXk`J%@Ij@oYa z;z5IoK4d!=v0}oPoMFS6n>Ou&eaZpcMLS_VY+?Fo@bA@yjM*7Okx5owu@F5a%@$XS zigS=?h?gwb%vh5BX1%7hssiQ^ zW`LCof3f=Su33&vq3tg7#_3c9iy8OpB3(*E#z7ATHIG_nMTXt*y&SiC4&7x|`1ff8 z+O6Q+D&qY>0C}iSMCo)FgyJz1p(@sv}@92ahxN5Z%MC-`C9@s~m}A0|d- z7R4CHjH(Fx&=eq08ed75$U}g4A&m2I>?>TSpC9*~@y*=PFxy2B`QFhu{Jj|ahC~(zOaqQTa>LzEoq(l5rxy9WQgZ33 zkb;Z16JxBga0>>c4M_7B`^+~a4;JS$=R*t5c0-SuYw@+bPuS&T4iOsoI>sWrL~k&T4-2>VE$+Qn#E=+-4{LB~kyA zb}(H|+gB5Qf?C!X$2S?rXA+nN>s){~L&s3>;c1E{KQmbgmdU+@h23zlz+txz#!|7* z)wmzR;&dLhGDU z#b?q5wnlFS?9Vp%5;e3%6zfvFO2rJ1Ii`kWVqj|QWPcPHFm)h|iS#d+c_4}klp3?d zKr}fhH3DVYL4=+cQ?*stC#8|TFWALj#oyUe`ZcdyeO z2pD&MNlFgrSC(Zd)dE$gHlbcKS*7|{)qA9>XHwlZUVUpy{f4#fg-gGMDJiMfd9~`^ zi_=oG_R-5TV&lRn7C741+75RzgY*U#><>wFJiX1)QW+WMzqedq*7+nB%m;4$-_xdr z2YlN##oFn9w0ixkNel`x?6vd1Uh@LRMyLNBiCU>}fcp38fH-ALQecnss^{?ev0i1% zE`cAZ@2_f;XA6%>;329WExaOJd{+qhzgfj5Mef31yh^VXTU}b2cP!f9ph5S=?J1C| z&kFJSeQt0t+1qeiv-{r4X5ATR%!>3mXwP3?pyg=s@8U=n(_V~gA4*+88pnjkIf6P?F@-eb8cR3=Mr*rjupaYmY~Jv#e@@dJ)T_IHej_K z<8a6RA3)Cy`k5UCjNL^-kE!rIT3oL-m-U@RLU-x#Em~ZwHkXXw9k*=AI%&8X=-^hT zu+9nt574ay)BYuHXDkqOg`>YWhpAHlWLk9A3kKdMY) zRHm7C*6|8dqTS$0;)bz?QrIxkUND@Bl8MOjsA4P>RVy=Ho_jQggjdadE#&f@A1+5o z^x^>VR^O&E`-~a76$9LmZt5@n>0_;3tp{|LD?h=5x=63^s|fdvvDzD>HN`>OqcuJc zj@0pnV5D7B?D%a+JMP-FUZnchQD!ivaC!@|g)$4&9ZbfWMI$h=@J~vvW$p}%p+D=c z_ED?PF2`04GrB#Gq!~;Y0zChfL0nU40t|?BY0TQ~VVi84=j(*~3em!sBKz8V6O&*n z2bSGu@ox{qcA61dk&$&{JJ!i~6h0OoTq2&qUG}-7AG%FAj~t78?Kz1?Cv8kCiRv(HboAcJ>zCLSv&7FvBr{m?MRjBDKuUCEo#uHNB$Rs^ZMdD4N zbC*VsPY)O)BECQWM(jy#wCIl6D|Ol@2a}2&_yQWWB}rcUaSnLA3q80rWOJg?6S?&j z8+2;`Ztidiu@efkZHysR*$Sh#6-GO*bqolg9N7|kqQUhW3&a)l=WoRShpBmZ5qlX>5nEeEL67l zr*Ap>$P!Kg@U1jE|9@UcmEp8#wH4|I6lPmH3NYS?sW~?-%-UTlVl-y>IljaP&}cat*C!yS3FD43jw^0ubgx)c@T& z*A9$LIfD|#SfBwZ9QfYsirz1Kz0#HXKe~)5Tzh#d6l`e!${(baA^wWsa@iy6n0x2V zRz1}%M{c2xL}Yf~rH@gE!X|4y;+%(ruBQsbxs=n%xZa{p2?OympBgA^Lx9UTdUpOF z4Qm#;t_Sin=~B?VPA^T+YdeZa&=&V`<9rc=!DmweSHl5UG|;uEz_lg8(x>uZ>^Q1R zq&tgOs2pipMs1RfawsnAL{;EG_+7IyH~I3R9(Ni^j$RINRR*hc4Fr7?TX4)~a_~1Rsp~wNbtUy)FmTuh z&KA&Rye-bFydTd1+Wvt43}XpL$ZTiu^PdgOjw^yRG+&@tQE~Vh5Er&CTs^?hKfG6_ z7Jr5(1Kfti$_Z3RjrI2<;|eZ7HFPVv=*$k}ho{GLKCg~tEl5)tQFo|%P^j31hBRQO zHXKoE;Rj6=QYr2`JI>tsTzH_`{42Z;1 zNjeoVO&tkC{2rb)r0HStrgel^;R<8NRcvT-)>vlXQ5y0Dp(+{XL*u7t{te`Jt(j3o zIwkbm>cJQ>S4j@AIFE^>`xqe*R?~pG5===(b3~hclgwxOOA-|aP7nzhso7OD6iz7S zhe?h|X5JZeH`2!?NjwL&b^SoS7{)Ls>$J>s#6EjlZF)rLjNUNL#YlT7A_)7Q#?lE6 zBPso*bbc?$tbNfvf!kTZ{3$ zS`0MgqU6buJ7q4Qg%jW-2+w`lzwhV5;r>zW1s-EU@o)>E?~SP^LiIcnRJ`~em5Wa5 z^wP&}mfuB(xdGd4kiB_TIQkfnhYUQH%`a$m*1Y<1>zHyN7tev9>fNSH+Qa%BF>x<)TTaD5l{- z606{Y^&f8TL);B$9R%dQY|GxYb@l%zFeqp<-5qk4sl&}AvMIG-aIzyN7?6DiWMOIw zH{X@#y|QOjZ9G#a#E5yw!g`e3?8sd@MenM_As4CdPgE=2Z%CXowgpWNqqPo>h1KDv zNsJIGJ^;}458=vq93;!l0oDPQyFGH67Jz?{jMAQJkFH{KWTj1#lV^ypqM@Y4F2zjS z*EpH5>xWc~Mo;Nj!x#V8JiOV-VK_mQx;uUda&Q!7(qkR>6wTU8pYyA0)fj~N>ze>a z@sST#xH_rTY2Q@`fJXrhZ*`AB0_5aI@4tjW+VKkqZCQf+etb9}ZG1qkA3Cw=ZX>L} zzNxQR9Rc~bwgXNCV6UPZpDnii2Qi`7mE7Sv5E+ne4%jmyVOAGD3Lz8xpTe(dU_*S21`(Jj$0X9zANcUgF(7ML9RP4=-^} zt>IT5)$TVQ$eSaxnwV;3D*4};ZEk(5Xf2Lw+Euow<6@~aOU1zeRXR?lIgQwfdpCiG z&ntK~gVtlK9QQ390yYAbSF;8IwKZH}_?*HR07g1Wa5ua5Czk_1chl{`WijcP4;`V@ z3%ReNifo@UYXId#Yw4KN&uH-J$m@fp0CZXja%0T!y)1{ z!d_TCo8;A0F-oP6TFRQ2Pw?O>W&AxEdk1N%X;L@xGp{ODyqF#A1~`SZFB6&Ybz)0X zG6;N-5c%B`7GCLfPGz5wt}HwiG^)s*rU2Cy=gf+GR8QK#laZmA+nzAw5VgVyKok?` ze9ZMbo^K)xq7WkIIsKdY`g;MkeV=Nc=gKFU-k9AVZZ@?swHr3rhR|?gh}YC|wNF*gf@_s{raO zOoZ!Z%JQmGPSI|R%Elf%#MaIlYS!~#l9xLC-gh5@)|(Ot``HzDi9NPBA$K%cCu1!? z;RZBNhRAyZbq1iCt$tsKSLo3eej#%k%V`QJEE!<~rZXD8Cg$f#^JH!M5R#DqN~4A;QAJZUcP>WwZJYD$HdM%5^Y(j^hq3ovGe zt)(`U2KmZD8DIRVZ!ZAt2IWqA(c&)()5?0KD*W=icI?M?=X zTsU-Q%&i_Q+AZFJ|zo`Jxq;9pqK+ zZUl3j?BP{b==`jsWd@1`AD$^MUTXqdcVqewXi4jOJdul0GaM{l1t=Zb<7>b;R%D|H z+Q{C*>7S8iq*5RuNRkzp)L@IRR`Fj#CCZDlIoZw;rR`YzJfhekHiPN1^Ih%nh<(!{ zs0(<#i##M9@7I5={d(sIkg|#8{^5~eq0F384?lTQ`*(>sidhW%UH+?Hc|ZRDKV)AQ zDuI~^_Ls@S@xKsT?__6AXS||iYri#)_=89A&oCQ+ccB4Onk^~Ehw^Z|v1s)HG^tip z5oIt-OHzbXNjIr=rEA;%Zo1c5R4eJGm;%0ie0#_I%-78P-OK*&omuE5?+G#Dc!(sA z8Av{jK29t7sH+Q6zSOW-%rbFKNpAdX7L!w#?#xl-FNf@S!a``4(~w74-Onb>Ua0J| zlZ_BBOb647vkSf7R)keCsmqSOmcJ@!<^H8g(81f#01i# z2Pd$)Q`_ic;$-#WbN~v1U!oLzMsYG(vWJ$#yP5CAujs89tuxk9N|?y9Y?sJ98*Q2g z`8JUw$2{^DMCwUuIhS8}Ul#~c7!3+C0xVl-!vDWXK7lv|kQQ-&5@&9OliP7>dZM1xqwP>Kv- z78zy1U#T}=CfURx8gpqUluiiO7r5TBq=qX$?~;u@6162B@OLV;l_|MSod*xDDM?}| ziL3heFqp9Xqlhw_S)%&@lDI~NS>D{a$c*ejHRe(Kbq<#T5rNr7Njf2huP}$Xq?p(N zurUkZ7D>?#OGvmf0foNUznY#me1N)xdsM+O6Bqjh><$@TUaZ}IKiBU~YXYW7Gte?x z;PHM4e@$r~#-p9c@_NcKqlp;9nhPvr#yq)BEE`0g@mppcX9@7D7~IGX>zRu5b@>=H zn<8~04=PjsJcL3WEG9QGfe3Dr?e8XY7#@XfzB{;VcXxF`kK6aX3)i$29Tl~$7|#r4 zz1DO^Priy59jz+P@bM4w@vFu61U9r8#XyMq9Z(t6rNNZ)iRDwMfGgU4Q2;+6prhb? zI-;Es?keCJ@A`z`dPi{K6)B%mO1YX}V-1ThY8c)Uw~UA3WnSZ99CwR-1ytV+zi{Dh+Khy!UW=o9M-G$5pvAvyj?TN=o4(- z23*`Ci{w@{zDoX8>3WK2C>&6a10VFq#+Dk85H>2^0oq;2F(;cXxL^!{>|1)gliAo| zU1V{(H#3QGrr>;5{Lr_E9V7Rj(+cK`UoTe=4s2N2klj$f$ggRaF;tugmF7 zuC14!#Iu&QDU9rN3XzZAWm4I6?8 zHmJVUK(hI!py{}X#A|>}lDcHF3<}XmD=f75Qr5s;Gzl6PAE+q83Du#vnf1wPrHMI! z#-LAI*;8kSe;mmq=410F(;~%lH!0WG?CdWXikFDw(Fxp9CZa?V`Z z<__?4%BNQ;Oaf8}2%dw1nk#l{1bhQgX`w+W%qx!KxOfLqihJYcM7bH!f@s3?^pKW% zJ!6Dd=903S)>xCCq?r^zTSgCO(wc$NpdfOdbd2tpz&1i(WdJV%{gG7Ka7RI9xqm{yF_Huno zq*6Ip30|Ht2MiHv%(|u6N%~CPLY%B|R78sUX(g62kcnW>qp?g$R*~|Z*pSUZ!&Iml z;p|n<`wUu#8beqFSekX2gU21BZeq)oy9}lWxdrd0>K;9N4Y zjV_`CZVWqcs-Q5L{UER8*{QMN-1LxDcHiH#)a?j)w+sKKrTj`$ofek+9Hox^yRxm! zK`KwCRC|=4r2Dm{**)9@YXjs)CcmG?gDSylN;)*Y7$h$92N%)hwz@{`E>JfTy;#>2waj`Pd{bJ(VMn*wWGQnGU-)7ZErSIp&Th$>g3pq^b(A48B>|s(P*fPeaitF zIpp#9P%&N+_7`_5(vMAky6PRG5^1Oad>keceT;r31s>N*wX$ykR0);IH-OaUXpYXNXa4U;QET!&l1;UN7X zLM^4Pb~q574a77BnOA(pL4VOM>n9h(b8Xst?onfK*aw|fa7S=shCL9nOo`n_OI)W1 zdfY^@VqTERK1QJcfhCG3Tq#~gN>yX-0Hc1)4wtxUrVtKfIU-unZH6RXkJ#GD=;;?IjLJ^(biC zowt~V(4n4DqGw4{6|5Ey=vU7UU8q1Ueb+Z&3Bfj>QkfNa1}Q|c@=cGp-cDpQdVp&~ zMJ=Eou-Us3O$J_6glt-_)Re>~ga<)C|skIq-%O7;L;YB(eGwi3t`N3pssO}b_7<0*`)kKj$ zlvq0h&3R=?_lN2ObFwXRFi$RfE3fsikQ`3yQtsMW}Zw|!;%`!Wb z%_CxjOUTX?Izf@D(%2Jx`vo`Kr@%)`&e+!Jmm)&{2g>g5?vj4cSW_D`q80)n7YK+t z@3l>X7okd&r&6~%7K7MqLYoCDtdS)bQlxmDk#gK>0<S&R0h9!SojWeZkTH`^tmp=%f=g=r;8dc7A zyS(ks8of8`?)4*0qh@7%Xs+6;Mwe@$I7nK6b&aoJTPiXy zl)>sF zPq|Mr?GHt^#C8@3$~Fnz+TN_J>*6|6tu&$sMw|W9`^i`I@hZdwRzAah*TeB!I{aI2 z>9+Y-!q2&VAT>m_cDByuexU!~7uwq|JT+h@_t1q806;1c@P7fG>hgc#shmmsXIl~P z@atOy`_W`e#mef+1EttIzz247H*B%|&Jo)!+hu$v9w2+)u?vhrG znIp-LsANt|(L-ALM^de__lxqer{Z(iUk9u@ij}i$^FP$N^~1+s&8LRV6MOn}M;B0g zarXagen8QtkED5G@7A8)=yb$Rt$Fedl_@nyPS|t9*AX>#2cAsXr0x&jSquh`#8e^8 z9;m=2CsAqmVuv@I6n(K0-f1#^gsq1ay5!LonDll+IA>A^HglpriBa)uUdbXb(9pPttA44w+&mSo-7D4q+}4^qQMRY(d*3n!7ei z$lf?LL))T;f)v0t8Y(v=Ip0ls2LYi2*z1m6REm@xk@adC7OgU7B)$3ac4?D5a+>f5 z$+bW>V~Rz`HC>Dmf#ty#Xo_~F^dAs0cj$=tK|~>+&H~<@dNoQ=2Uci$dJW^;f4pIS^ zP+FZm>At16qY8L=p#gJH_g&--3XKW50Sv2X%7oDf9Y(fCormQ0ISke^EA|#$c z8CWSPOo0Ds!+t8N<057({!TOw@F`-IuWdO*ekUkx%31v>mhS*jVD!re(@8E#@??ir zn^^WNLDV&j)Gds)AZjglMVPU`)0^YSgD_jL>lwu#{);d9JHiQbWYjJPYaFA+No z(;xB(L%r5eRJd!lNMdI(Wro&T1P21|0#o)&(@B1&)04HE2^0mwyPzqWC`MD)u_8qp z=X$NDC|7*u+^$guz!6e6<~sNX{^NWCSV9aVV&%45g*Qsa{Wc zrAmUyBuh8j5Kypb$^r=p&sZEVFDM_Wlu@TMaT8S#6hx9af9E`Dp%{0PI44VcYb@j@Pz*oGj-}p-(B9VG!ssdFTUaeof&kw+;9p zcg~DId4ClZ%hfOn^`f8^jG8(Okl%fe7s~7_t=^gnX$_h+@c9|WcQ-rq95&LyrXQLN zAxK}`4+KVCSbsz=V(UJd{)Z_sgqgV$;*8MjQfO&F4wny&)S3el6joo%nOdq$R+!{T zf`&MnMqw71G-=YLXSKv2QKzOdSvC-mp8oK{s#^hIT%4b4$Uv0N$TDG;Zi0ycG)RKO zScp5xSQ%+p#ZS&pZatO9kqZz9XErmSfM>lgXZ>=HB%kBK@RV6mp2VJspYR@~Q^Yh$ z?j~h7L~kJ|qJLzPJGA78Df%?CB)wkhbhDQwQ^c|h-rrvLUy#=o=2<=FjbDK^u=0w! zDEtg&A+4Ir;K@#?&;eFK89{3jOROMH;>$N(j&hpj7&U7a;Vpw4itVi#G?xE3IofE1 zGGun!eP|jvA~IhLIOsfYZ89BjxB!?7#deIo*#u?q{4kd#tQ^+Xi6PZ4*J+PM0}L9j z0&*OdYl>|NjGtY5Wmmwvla}-V2-Z2z1lS&U?Bz`o3=DtSi^T#0ug5Om&jiZ{&j^Cd z_Dz`{f3&z-*tO0#plfZ&93z+9G{*CvZ$qQC0_&2K*ZR_bI(3TN0S-mYaZ?E@n*8Y# z=w)vT8bfa?2jC2f;wq2C6Z<4dhoz$@hB^V+I!ntI`5IMNc)D4wfN`GJ%SCBJV&?bS51++o($vQ1`CB5m(70`El`N5}?*|A?!oq!5kt~@c?DM z{Ck)tQPWQb`#h$)T*ktx;6=`8KIZcpcNvS#nSl3)hU@T_9|K=Zk%jR}>?EJtLwAr6 zyV4gUVzYS%FE=3P3tMF+Dw#~>=tze-F{@Xzh=VYH!24v@I;=I1fdQxYo7TA^J;*V_ ztOO1WV++U!xVX?%4SeQc6XWwcE_|9ZBB|>5lsYSAOvq?w)DcdQt?l@Vk>2Ifi)OazRs(Bg_R z6abIui9}t)+t9@e)o#}<{>kU7aj~c2`lbg`OP}{uG3DCj$(<46U{b!4J=wTIXV`H- z+G|AG{$~vQJx^gGGx7yaieJXp?qh*ta+bW3Sysuk1|0f@Quh8dmW&IFeffoCcq>gN z($@6Z=YoeU+BI>@-MpNZw-#2;h|X{QwU-{k&M3)I#0n{b6YA=JFiD$lJEh~xJ@{3^ zN|s!4!`XUqR-qzA%YoR*DReVo33U*)p1_`hwT(XimIrM$s{yjMvehr9pgN^v`!PE! zxUv{Xg7?zgNzGyfR~4^q7I4`N48bFuZvt`n?p8Zt(V-DicHYKpFiYHFcSWk`2?j#u z%h@jQR|Ns}MN&u=-3ZfG$b;&DY?>GUP+a6gL+xD*R<11Z(qbUzp%-!E1bNc2vC7CQ z&H|b8V*ZN{dg?@34U*pMlT<}({aDTt!l~l4-S`i1&%~Jn)EVWF2*9P;!O03*DW?C~ zlF92DIgEx}$sHn!{#Csq0xG7`REly0%}Q63WoWT_K#lzE0>g~7BLO4H8q82+aOL}! zBRYXL;ulnUXD-%LxVp`fzhgFm^hm@@si?VnFhiTRa6+cTR4j9x@|Rf;<6-gCXfWqO zNagPFNL)CLgpNz6Mp|TT8vb#Q8@4~I8fjzRS7wGnZjYf)vDfDr~evaIxpTdz^ zSqUkXyY<;6!zgJi&kbmP4Lw-yK1qkrFdfu6DhvhOb~{OHFmPRj?ez{jP0mHNX&+;# z;yuI!N8;HvFLk4Rny=eXF+57FaMyAw}W?wSs@eg@9@ZWw9jCD%vGkRF8U&>9k`c1C;2{ zBb~=cr9dgzKkeX;taosKNU$4=koA2Bm15VtxAlH4RdeXi=ye>)&_KIL zzROJv5=;~%mqIv{x-YxiWcNL2tg2#g7Xw9!feW7jyhM%H)ca>=GOk<;b2(+@4J)(E@`g$8!BCl7F8T!t0tqxC zhfz6VR@}%pxEx5Fjx3+gdtzRB>x`XCronEK@T;urQ`Yq^`wH%lZvE1}3oh<{Bugrg zu;3|r@#0(%-7ku5Ruv}Cg}+r!t{eBd`a$<6Ab)6Ofbgfxp^!h4O-n1AWkez?x#zrQ zdai!V{gXM>C+1&^{z*2XGuhV6!ngL~y181e{T}{iz7tPohq&eWKOH;%!)3{{zs{t8 zBlR+hn`Cdyx$Z0xu%D@`xdT|GzM)84@Opv%=dGjki)V$KXZ-lK;K99%Z4bB$YVJ^k zzWDKN;g8hC(`PNK(|lC>PLsIv=+>gSRV}RkD9f)_X$=TcbooQp5{`^>hf zqfpc{au(M=ncR7#7S!ZkX>DA)xGki24?EWU_@+Fo4op{fLU5?h$o*I&v)J;+GcgY= zrwW4}d{DNTy@+(>G69xz9?BJyvV<g^#= zw^)~kTj(#&HtD@ul<+3;H|viZ^?Z%&vxM^E3;VW(#5d~L8{1v^?L%LCsyc^n-D&^a zSNHyX>X?zvm4D??CO4n?wO3y&3#H5TdHvq)|NbY(xI)3;uV{;RF7Y6@Oilv`*%-#ADM-HgG|cPy0`X;Spjtv{Qre#7^8o6Fs8u7g;vXs_PP&O?Kv z%ZPPReQvsec!;GUBb0HUZ25&oN|#^)AgTbaqf1`|z$ROdSO%6zAo_e!%_K!5FZ7b0 z@{&NrjVdWAtzCd!IQ-a<{Q}Pa%5BWN_JDZqK+6_)UY$PsSoP=r`tUFt?^m7u+BNF> z<>09)T>Hyw^tb$1V(kFG*eKrrYNU!2#>-7qeHPzV#k;)rEl^dtS{>QcVgIWfFGB7% z@Zsrc6vF>cfBmfVkGQ&BE}R^U$76vBkHEIg(h$RB08|Z}&we|2K9ep(zGAOWmKdVI zG62VIyLLJ7f#RLvV)c6B#HggP+59}0j+JPDBO#!*kZd9?9QOTB;W+W&T>ch*_(^8e zX0}Wljqkf^h%zsk&#Ey=e`z!Z%tvsv3^TA1LAD`6+uW9@5e=m z9Nd>b@OQpE283)p!+AIuJkrx}MW=a5l#nKqHSw?sfOc=LU@d(O$T|R!$!h$nkDcgiM+es~+nbY|K zoD+w`VvdG*>>rDtJWfFNy)qNWx;iAR+z4X)AdHF2=~_-mhn|5QAxUyXLnE2$l#xPZ zV#L}u%vty<1$XN(s-S zd69R40s^Q8yyXe*WoSze zw4ogVrkPLDfuOTj2nHCyi9w0DYnU?PG;1P`lRL7!-GnX5Tqmg=qAo&6-g;Sh3+pHS zB1r!3a62fObpp=}46&zFBl8S`#;pHg*&ht=C8;#s@r%O}#>ZhAUX=L3GelKUs0l8q zVuDpn7z*%rXi|rq=8#*RiH-Jf2I#Upt%{|aUG)iQfk(*o=9G-lfZ;51mS%M69MWzU znPLD2k_nj5eTIG1i4=Vavn`F>Vb%s^O7!I;7q|; zts+jXJ#ihmLdxxo*1UwnqMdv2!3H5{IhJi%X4LNCz0XBeSSC)BYT!4QS&BW8*W;Ts zlDuGGc`*y#+kE80{p79}smUUD)ouSM)8}<}b;{uK-u3K6JIZ#u5hhq^T6pAgU}v)n zXqU5z8_Yww*hVvdP(;~mtF}G!yr0iU+9at3VSwR3^HgX!s=lI1&@tT`JT&fLcLv%$ zM;%L>`#**<_va(_HAEiK0@M&SO}&K0`v8{>m{qu#2s?)o@rdTjWP|*6t-`o!g=WVM z4{O#)YRVSZ$Z3&hS0q}s`=|NYyofq(2MHO&=j z%No!7`=&8BTpx$vO3YX$FG7;VOj9VQ^*%GSgW;p9PdC1#{MAY7Ne&Mku-E( zZD?F}L1v=DuJ3CU;1*pSAic6?gM$s(wC`o%qO(CPGR*fBi7Vpmb{S`5sp>FaeGKDE9Jd~zv{4*1UE@oU z$u}loiEHk5!cD50t5eIhf|i3*aYAq|w9s}6+7)k0KgS-_aa$!1nUo1Rut!5Uo9`5= z4&W-ldD0f4lmw)?F+Jng%5DKzcSZ@6WWO&})8Y_D34;QXWIA_bYT|7LJ3ghFA$4Rk zanv?27PnL`^j=a*9$S!CEXf?$hCZZaM|bf+gL1RknUyHOSUMCONC0thdrHSu*Fw!3Ac7}kvUt$&Fy|<=>P})DEy`Bv~u>n$N&#InsE69 z^rL0YuF%%@Y<-aF*_ehlM-hyyWXq+ZfbWf#zg7JER=#$@iP0*ylMPyywba2Fg=U%X zgnxc<5U#vjT1lmtt1HE>gs>wetR}OV4zTz7FVw@#X1wv+W5s-3D0MY|_M7VL+0h{g z1N5*N?8j$JXEkeBg)C>g*dI9ym=*u)zX#lMgD1}l^tbBOGQ2Z)izB4ddkZv+EwPuH z{$!0Vj~TOmbCN|Zb*Yl+OOaxm3cAXWPA7g!IQS0jZh`hmE|f5@jO0V`>5iZG06{~# zEwd$s)%A;Tav0x-G*!m(fK!0_-N81XI8cuNW!?1bgF#D3W@;rXmP+8S={jxG) z(Z-!KKip8@<&_jEE~t9DYD%5gn?*;mkkUtE$GF*4YhhZ4Es!CUL~LCHz<)Yf$0LT! zw!$6{2ob*d9wQM-o;c^=Qs)jQ^jnIWx-szR+s4*9G| z`ft)=wZ>-80@XF}yAD4+JIgh!i9Iiu=8sZypG~ z7A_Xk3gcio9LUNi&GBgOR6tBbC6F(0*w_7?0e6mdCgm&kMkmktR2FA?{0Cf0O4V~l zx#WZJTnftYqdd6eh~x#;_~d(K*zcCmV=B}|-RsvhS)(9eT0QswkZfwq`=;Yg7 z-021^$8*Bnqhq8vuw!gM_EHs*qdvYEQ9N_I2~vNk^mQz$MCJOG!^QxHz02L>ZO)`oA@{ba{#>|u-LrGf}N@4V}Ws)*d3t31>2 z;jO3^XRLrx;Oyhz;q8w(zoEkncMY9v4cu=StW;X*h{dHV&gkD|%QE4t98>Ln0{yYu z=k~myix$%U1KJ?wXopFuXpdh6`rI|fif3t!#|-|MVnZ!uI9b+d&c>Q0d3VJPx2Ea3 zHzwEqy_xynEp?nU?48pY)6q)M*z}3YcpU+9O);av6M}qH?)pF9H-mvEkz$MlmOjsVu z>9rQh(nLA&Q)uWDfu|Q8-~d0G$#iIqDbjD9-oz0!rfHItcQb^V5#WBc`X^+1hTO6h_8HWzRe$m$09@`#k2nIlj^MLfp$?{mu z91taFzDodOBo0h5MBBkUS`FRBbB>YpN;h{n?5Zn;}oLWPi!J->O9nqxu&lcHCoSM*fZk;Nu7^eSNq-W|#}= zKZx!N`n>KX?j(2x&Wow?h~k??d&*SVhSpv2=-kfgV)WpQLg$Q|Y<`|EhX0K_QM)|| z>!rRL2ZiGF(c$cEKwEVO2U+uovv>E4k~H+_rfwPN)*Yb-_Py_8^V_-ovtjvjV{_(= z^0Nf_&(+s&KhAI&@d76qC*54pmyOBqpP8Vm)T`_kYDh^%Kg~7foO`ocxh$#$Dy1qw ztn4x@#T+F0<(OtB^D%$mb^EdNkK3b8znj>#f2ZFr@xA-aXKj}EnA1;Hq}t>Qw2>j! z9)7|f)VZ}vCp`8EwOBoOOc*T7Iqs*Q>h;o_w$R`R&C?y8l^=0_jFB|XFA#t+*m-R| z(rVFuVpw~C!pF%Q$5bw%kF zVM?F);{xw2VEA>mx@?fenfsx1Rnk|?_B*jGv8{z9)S-=Nfz)^_`Y;v7y-p>1=`e2e zff_6zeSo=`2=#J%Y3Dox#&PO0|I`C)@TckCSRovnPp+{(lkBeLexqi1uap9m_1kZg zL3bWl_QLpCwo@|m*0eU>ECshazKxUGxzx{?NnE*nm;|0Gu8aH&_~`rubg(F@WvoO) z@$F7vHXc4DE3}kt%<7@*Quc8vrZ+f+WjHAtI9YQPkTsuHPjcE_TVoEL@}0r9OSsHZ zuIH&5Wmum($?V=nB}<-u|1qzDTvKM!u2V>Aw;@oc=(r8^3BZ$FNC^7fLvC;uRXmi)vN~D0 z{^KKgX}7<&d2hitu35FwG4s({Iau({b%GNah zW%=Qh#NM&Nbf=>hDb$~f7!x}&&?youRHuxx1hlrt%xZ76gSyoN?lG{f8!Z=D`>_Q~ zvatr}v5C+PXNa+XjE{PiwWeWc^HMDNOJd8g#Zk#GQ!Ds?kU3o!kALQ_=VTyRinc)#$_ls#V?Ae5cQPzWzwuquLSR*@ji zMR;$V+j(=0>7KTw6-Xd+Sv}A>mbENbW&6JoWxlIZ3bT?iGO8qys$3j)$yGGf${kK7>zc>Bm1FP!S+6v+w@TPRu-ENs;P}^7&D|>NhF!(-l+{*` z!mmku9)%k`-0OaWahujqeb-VRDtGUkzODII+eow5ko6*aZj8yb;MB;s++ohQY zO)!W2MbTVL`biofZXu8#bCj&4Bq6q*86b-`VT*&Fnl^}Zoj$ zCz=lrIg98JA<;nHwEyhITMw*h5Ww}uI5`LajY6oPdCeecP7n+RfW}$&#?HhACb-6K zM-3sGzbM-hvr#4UFAOT(F{)!O)&-iQRV(c`G28}$MK2aRzy{&F^Wm!F0X^!FCG+nb zszR9F=FC^YR&Def=Nxu`|2w*4or(o+2K{I~<(>5{QvdipA#fjHG#zO){Y#{=6Ev!x zB&z;3@@Se?;ajoj{g_YDr}e){(y02k$fJ1ef_Jf^ce8wozCEB(;>e@L|CXCUqx#b+ ze*N+(@N5H(juobEhkcLUzib_BByirkIsj&&mt{*{5QJBTHY{9Bovv! z>RS5;IS8AMu`{d$vBi)f8o>U&8%E7NS8yM!?fM;LQ?{RNmy<&Q5=hjnmot}q!>kNA zPb)a=`r1&fHb+P#9Tyypj5o*iTj}am2=0KLTM0D5rDo{zad*37%y$wbK_!nZM`XIq;n>9yh4N#eoE!C3A(~iRuJU>uohN13F^)XdzkLX3x|S{rM~u#nHgi33O4fwHXs*}FPMul;^9DgkLUHb5;QEry)eTk{05+X2&9=oo3h?ffJt%7=0&7`2O z8oEUT+^Pv@^>xgF0n>dvc0KKpdIoeRNG@?m8}`|N9r_65BF90e?7A2*BKkzzEqK14XAM7|Prrp9d{=3&yks#1lD_G*GEq$b z$Gv4lwIMSlrTzq`AlpF2NeOjI9<))YGn-fggRK3*@<4-`YiP5wz>C$Uy*!+ol@tj8 zQ~fb0W?LJ6k!1DH`r=sH>EGIT$<}M7S!b9Ibt+3IpYuzL?C4 zQUkd(r{<;sMb>;_Il=m}KM?$;Kr!!@LsLqt-1|WNtNcd({i-WzlU(%eI}oS!kz9Af zJ8+kQL&{JEdazTg?s>?5|9MyC^e+3d`OO=$oYHNtksUhr{JP6YbIz(uDXxnrtH_ii z##a5t+pas0M2kHaGC$C*D>|RC!=y4u6#?dhz1+5EHR=px&NBBLHj4q929?doP>IDn z{Hp?!x!Jp1Wz!USmwJR3{JVd#m)Ove68A-0t zAeH7-2_y_|4q_x{K&a!ua&BG={}Rd~=E+UGX-456+O`RKugLJ%b76)q4m`02bsXg{ zc>w>9W|vceI;_ZOP|fHkMyHHhb4aVY8Bs&$?4sq5&zAq6Aq$)q{|kR_y(#wG<~o$v z`S9Jl&jN0n!geJmf;UM$K>cHwr+jt zDGU)$R-v>J+gDj;WqN<05?a(Z&y!p)6DVUV>DT)WU2~A32jsLA96zIYPgC1NR?ZXg zG{tldbW^E0N}B)9ZKTn2pZiPDn*i5=dn0?|1%qVmD!2L9M;#7gjjwN~iRaz&I~I&a z<_lnlIcPITmjPRoI%)7B+nLfkhFQxE)-K0vPVMBHso~{#5qAKvw~*cNXpn0}APx8> z3GihJ7s(mr0->XND7KPY3m9YzPW_!Nsrg{O_6MW}w|0!mAp&H`7`{Lgp7Nh^kr^3_ zGw^&WbDP3)QU2Ox!>TvnU*5A`K;uTTgVnMHVq;7n!{OY6h@~Znd@?t>-@^P)aeB25 zBaf~Ws<$zvvRONudf7k%zD@)17mP{V-N;lN_<1=iIF!G;6>=Pmy2Anb^HjA6rV#j7 zz%M4}W|RsQ-C=*{nC*U*N~6?0nAkO!9-wyHu%^#s`n;1|gc}mwa)r$3__J`zzdgUy z(Azavx$DTaXqi1s-_n9zSb@jwZp98P2uS`(AXa(AQ#w@ax+|pS2Lj1s)o)TGq|D3< z6keOy{%J{@VgTQ$I$`_*PJi>Hi2SmoK4fsxqIzfoKd2>;wTRK9v=y?+lss8tex*ib zb(5okmtb4l>xc-%d*a6`gv4E(TDN%d38t4;=C!;nk0Y(%f(EynTLy%bq&ieB zrlK~9<_g6=I&|E$J)2v*cDXO|YoDdLtwBK~ z&GmK6lhD+hM7i5@8z)O#Z$nqH{a%k9J11Q~S6Ibf$yDpe`!$&MaSBC`i%?px)+FOarsW1NYG+)`96W)kw? z388%?i|7|0^H}nEELk>^g@PzMc(P8EjRH(8U4|}IOugA9Th9_0$VtFQeXX&UrP#3% zu3}CN1;Di+oecX3+^33$!=yA@h@arU3S~bXD*sWQX!*uvSv+30>YC-TA=Q-<4sU`B zP0xRM2u?KaLB!Y>NN*J&?Jxy(c61aamTKol!OzXji{rm9{r64&b)K7*Y~^_<02Z?x zO#m#2R7-=>QzjMkfOH!;djUyGYq3;F2x&RT+ND}~W2s(q*AR_VCr&S;yx1l6(Kqa2 zhB5Dvwg~KrRfQRIrcyD<(uYw$M7fF*%gojh)>kxY!q8-!cYT`Aw;HR53P}?wlp8z- zG}vbEx}$i|Ttvm1QFj*wfTsdIyjerSyWe?fS;Z~r1}Qxn3e|SKl~-(Q9=`19E)Q=J;U~bAo1)WnOT+i^m@;bd z8?SBRSuUm$Z)cJo;!bV4qXgJs)y1 zFhc{L9d^?Ml}}Yev@$eu;!F4qD+-}u-YhPzI$d2 zg!+!b3Kw=vckUZaYeL{G+hx`Z4RKdseD`v)5+VPdHn+ul&G0enAYf7=(~>Ys##)I}A|oxBrqs0*Vva(}9akbN{#@0Xbj za?rOhS#*kw{sDjTYp^&@G=Pjgt0O%cwcp|%z+ZMV)Tz4m$r6t)Uu-lBGt zM{GI$rAQ#3AHQ$_)is>oMH7pg99Jd1S%s_EdR#HZn1;^hcq(#_GS8=b^hj>av)M{C zmMSlPG>5k(ndjs;QtyqlkE_ncNvMs^`eD#4oplm_BPuO-u=XM){=J3=?N$)TRww=+ zB&i#9BJAc+#w9P|W^+Lsi5(xCg$q-duL!(Y@9dJsRqW2N6``zm909DJ3n_Kr4j*ef zfE%j|8c5rK3u{9zY=B+hDw+bnK7YhlF*e<0{i@z2%Kc_WRwfYu+Tk=yQwy4K?UTy9 zRmD_)U+6j>-(TbxsIWPy+6FjoD`i@)u}RiqosbjKRwhX*gx=H-FKIpsgBnF9sCn_; zjnH8%loD#c2c#;tFQPbRvsKiRc9$IU8Tp{Y5hon(l&M-tsEesjaJV2~F zz&$diHX6E2+dO7uHYPjA@S7I{Kx|V`GX7s{B=OfaRKizYkL_9=+q~|S7s0L$-5Uli z;VbasFj;j{2!UDzH_mukFTsYD@_ZkHw}(B6tWqV2A|;F=WtgIfh%9- zdt&a*Bi6f9JdQI-)4!7Hk1CcB@Bzs6-Sx#VtT3NCK4``Cs0ZlG9m zXil5&F2H*q^X$D0YxXqMhPgw`R<`(kL4U0I{4s*2j_;nKg5THues(HImJ6biYrQe+ z!k`a~cuJEkQ~k|@Y{lyHUg4PDufb;67j{_u$8i1xFoLiCrn$OXEO(Fb7O?#&=$5IS z6^k2c2a4s0uY5eUjaXX4^yA#Rjf!dBTLdejQztvh37gk5MAOvzm#OYuT1{@M zMgVf?YXy#qI*1Ww2uEQ3Ab_r?U^tNV2s+5E%nE+%cgGQZ@=}2181MnP#R|ks#nEbr zYV}c#UaihGQ3+gBVpkUWB~*ki7-_$u*}eN}OEKO*%ZY>z96Mc}N%3}ShN*j(5xZ_= zPG4tq#(SGO$*N;GR(38nhz{`rM!uBT>r^5CeRt=y^_o7fyRzi(c!P#fM3MR$4MW?N z6N!wANRRzAeVn}@)`TCPjA_YKrbmaqGWyMu;ZwffD>thbX?vhWw#w)sY&odfVAt#8 z^?JeBSPrW;@>+fOePB!&b*no1y1sv{#|KikX``;69af7QYTC3jjpMQ5hZ`2|R(1St zc%Zn2nnmgh-#-k*#}Cyl*noBmjPLdq|?ZnJ~oU(HSCDwy=g|#&Fxl*BXA?bvzf6rn<78Gbe`$yM^~=KtZ_SE0HZT zHjOjNo@2qhOq>BNb_p?$b#ZO4b^8~-l@xU;hvER}<$*a;AdUP%bc?|gv#CkOyvnQm zyU=oF+2TdF*&SmqYm_kKi)V9`Y_JU$lsAuAN>YgTyWtKhj!9PSwj}MP;K^Z6nVxxa znfONo$YRB9Imr^K3f%J17@^D6B+VRT#FjPqjU(ahZ~Zd(NVGKaArQvqfHL-!zAi7Pc2 z0sn{XOPj_L?&kOC$Z&U`T2*;$qub0+`EH3yRwRtGu`cAdt=t|Q5;Qie`&|;F? zd7kJl_w2Y4w|T(n{E}V}-h7FK6sMFgh!VntDj^19`-i^hvVYke)H>QF&|2gK8M~@d z%%qeCSVpf^aLY4F@hyxvCzaPntVMcpPc8dW{L>s^QRyphWyYSjqUkL~WtiTZwZ{Ne zP6W8sKQE zsW2{VP;z_fY0ZF=r!7p1K0u3YxNvf=h%Pq{j%8?l=x5Q{9=i6hX>n_cyBrtKgapH+ z)p_XL01v=veKuVVJO3qtGM0Nmr8BQ4GuP?`+hVnz(aI(ReeW2AO=2lLVAb?B(eaoS zs_tZ(Izaly!OQ#r=fmhb{DCyzx)Ilem;6hf=T)I1f!Ox2hOd@rNbSpYic9*+m|pzr z_bx4L!t);$gNOXRK8fJT;VJkU4`B3HfnlIYwp{S_E<@b}T0QwxpS11Lfr?2-F>B{V z%!zZ}0T&W&Ss{VUt#y7*VX1+Laza;k3}7_@=xWug#NlniA3Fc;gE-4Qjc_iEmd>#n z4>11p$Vd*6rqD4r*Wrj+vyA;5h?AUq6l4H7bb72DcZ{m{t4(}=+m~84+jEd znP;2kS~=ToQa*M(_cx!B;kR+y%AeH zsX@`nd1{faM}f}St*Um+Y%ZqFS)lk%N?E>a%2}mAPNgPhYS1jnnOMvoaiBe%GbWPy zK+SD=12HeXCRa>q9a>9FYnbw5OvLG1OkF``XUK$QD|$I-S+wo~N7Y)dVZwBmKX1b3 z%_WO;rbxw(YlSyfq~gq}aIt~0A?B|s2f~B}z^^ObFgHuVoYN)&xj}maJI?K`Gm~}a z0q*L||2oo8rFY_TJ7vE9F%xFX-+D`aX1p4A>KV*n*Qn9JKG<@=*Aw?3Z&tsj*1b_^ zYwNsG$DiP}^1GdzM(^w5TT?Wmy3Nh=GV+#w`HT4$hR$Y8=e^dxw#bP=_9F{pWj%|D zf<6r_WhTFC>JB|%CM!t#iouzx_zGWQmrZYso@m$QB{T2vYHphSAKh5LQgTeEk9Btwfb8j*6_)Tt;Y46{MEwRy^ z>$KP6L*O0!Q&5gf!=k@GPr;OlAk`GcVcBA~X6d8%6!48+8P=G=?KXrf%daHYQqZPT z?ue7AK2$dsl%58nr9C^2`v8s(rV{QW4m61G%r#_o-+Adtc|EYp8(!_G9EZVCunHS? zUBvIqS+jE3>QNFN9i$>eLlRZAzLA{8dfFFUHx^ZvS#;C<9 ziMckJ-c0yZ$|Sa^z7yj$EZBbCX^a+1yca9G%YxtoajIx|tFCciE5+yw)uRa)5zx-C zhjwW1rMAAdy!ItCr&bF|4diNg%_>C2LXZ55AN>Kw&)VL@pYg|aJ2!+N`L59}p#G=(KRxK0zQ^r?x z)=k$adPRUN3QAh#(_o?9_9y_hsJ=ZzT3z(_&UyHT3U|ar3vv9gfro*nrsd?xZ+)m# zYJAbeF5|8)(ind5NGN27fG9z85obw zPZ?r!H;*y7&JMHe`xj^N#2Oin=oo4F`5%j$@&OF}SU{c62L#;`(t&f7z-d|;VVaBF z1V>uhCOVLtFt%Z}aI*^M|D7zji@ycyE6DBc$D*n5fp|WVmZ4rl;xZ zyza@Mz*Eh0Av1wxAKo+XPu>CIZ9 zuUO;q-YtN6@QT+cT+l5h1+(Z-CMrj<79k3(8<)}jwLp)8tmKOTMn;D5*Ldgu)^%4F zE>x{E@7kEc`dV13o);$LD#2QPDFTLwvxN`~pt!qCT3-C@Ud%H}hh%>gwJLs5m|Eoz zxgQ&1pQ&In#qhHj5PK)t^9Z@Ft0ywbLZGan#jIArEr*z>1n<%pk%BZ>s`+1j51b0E zx?qxjM;XEdk>gY~{gf7;M zW_fKM@^l3agP=!>JcK;w{8vE3SfrUAdZh>C<1WpIdncyeL7RoH)LG$23(v=K_Yy}7 z2_-dQu+>JR`G$<7)T|y7R#)yYi(7bqfV=?41b00zc;f|bG>eLA0tzKXz3Kx(5)?zh zCeupKbeeL{6%}@j6D4JSwW;~vsySw%pMpCvj_)n*67*mT`2ZSu5K>VebY4y=ofmj- zSN{_9%FpLN;Q!0GBX3;w1`q=P6!iZ;Sje0WE$NJJd99tX*^~C`t^R=Rlv7E2Q)m`9 zITY0>m3=07lvC15db4+Q8^ul(vZfM>Phm){j(6<)@5YP)V9o@2ZT{^xDKWBwV8x2{ zF9P@YJRG_Ijcr7e{~(CGnjwbp1>G{@NmcgFkIrn~QLnMcoBg$0k&L~bl;d#dwE*ByGIge~eebRi9_h`Zen5kLYc zwG_M>`{Q~LTHBrpj(k>+=+pOP&RZR;_4}Cw8u*8xEno|L2hXo)&uVgO(FRq|X62c9 zyY!40Pi|?CLKlcewHKdiN?T8yw>+yyLPHNY_jXDe4H+PMse6HYUp=$ajglTjP&qGVS?I?jx}H zuQPD_uLIhvpwn~xY9f#lB6;iZ3DLC?a1v!7(vIVe}A-xV{6C8;k+i z&5HI4_UFq3;=PphkE^&^G|&&Scbp%99daeWnTaX&aoD|X_y);m@t0{%1VNI>Vz=Z& zQb<_hnzay1zT_OM{;CxqOB!8UpvZ2L8B-oqmawJ3G>KbwFstxyh^+gYz>*|u3mvjE zha$o+^pc&Q1o5yRF$?4&xIbwC>`%_LXpB$4!K)cCD>`E#JEnORJpfd;l+Or-WHu)T z4oXm-Nyo3{&50ko(KUU_q2)e>A-))MT9CZP&T~_#~ z{7EI}bqE@nf+`@a&oxMgTxQ`Nvdj0@HBk~VgTa+HkAb6-U(Zs{tP^TE+&Lw`ETiVk7cSvZ6bxut=cI{rIr~0lyAY)4=fa`q)~}Kb!zwtES;GM& zzS}Pn^&!MBjs}Krp-JZ6NOhMG!f~W>S#s2Hg%lVljBEbQdh|{e5;`fNM4mxcL~P`D zT5pjHDy&kYq3ZUmU8>fjo_(D}194w)<_6M3i1nFTKF1~zj>n(g2NT~=;M|L4)Mh-K zLKK-qO7|HEFt3~?u86+s*=vT9*kYNqfW=S|SQLr=hkdBIATg$;?C`EDAhue?`g)pZ zx$*Yc`W5lvnJkISC-HMx#o_bFk0;-Bqcc?QtpHYOS`W%E9fS~D^h`YDa>igVbS-Je z>qurGIsT#kD6H`c)?i5c9>*ga!86-lEz)K3Lt}({;4Nu>H@PCvRuwSZRaKTHAjZKm zrY*c6)qnI3(U1)(7uZ56KD;+SFJ^F1TxbRa1z_&fvdVsyzj}B&-h?3wt3veZBW0de z84r6gkSkIt6=<>lWZyeblEbZdARqYv)7a)voe@p+dbjM4Q(VFC;hv{12;g22vrInqtF8)8S{X^00&MiG%Q^u)+}zc7`zNk zE`X@yTu$8gISSttNk$wR@k!*~#^Lf6zq+k{Gr4a8hTs7&7|k}=KTXD;z%gAsOp7_s ziRg$H-$T}Zzm6s?O5_g1`?ZbfBfzqWg3%lOp#%CaT2CT`c{t!$g~`;(F?7dm-5Bt% zK!-FtK^26h=ZuN{iV(p?+BXbw`}nXeip|HRG`^#(GD(~`g@FTw(nJT0(K-B=3fB^- z1VOTgLM$Vr-67TwlkLU62#D%rM(R!4uLXs>f9)3z=U4jVbCUpJ)262*e<0WAkcH1S z`N*A{hQ}Y;7nL1d`VPpzE3uhYD;vksb^){`(&I~BrA$%lIL#?(q_M>L177bV`8LWo z;84pg+!hJlPm~kH2c_MB--#DWfEU|0S47)>>66H}A$M1oK7`s@RQ0SCt*8Ba9gf^= z@Fq7=3V6V~;V5VtW;J?P%;xAg%=bG6TrNZu%BfScB$XJ#-jLyG9aB-07P89g6?tP# zx};1OkO@<|D$euP&Oy6OAPFRupQc29`zi2f>3Br(!*inIUXZ3R(^%IZOsX61U$!79 zBC{O}ZNSXr#xyLS`B`H=Ukw};Wd>pC?fs0vQ!8}a`=x`sMFLPyRRKdLeViULwf=YC zc6?b24iT`8qk!B10RlUF$2S9ZpLO%>X)*B*5i6Gg@xIHaet2|$V(*}Q+$^eBLDOxa z5j$Z44k4ytJ7N}C7bGwK=Yi*}p&NG{3qk>NKbziMzo$#L-T1ws_`PVtpJ*8kh*u-| zv!NlowYMS8z0>Dcj4&TPmhFS83(gshd2zZA@C4AMq>TE|)_5&nT@d)f@j2eKM5xn$ z$DbB|^!(5$=GJfWQt}_^m_-77`K@4k8#X?h*gfpd#@4`uQ#F^&WyIE=-GQr@fde7F zn@I2Zot4XtkK3+b&>qT5YY&YgN>}c4d^SYeC`LX->-c1j=)*Q7%%ZKoP}r?RG#0re zu*ZoxMrVQmvN!~#yeQ&QJ{Oe+MFClbhb^NE`O*fJx1f@)#uc7I8j#cv3ig`o4o`k{w03X%e14uZHAAihFAU8@LVXIB{W=xPS^cjaAy=Nyt$@OsKhezIV#ApJnfC4 z3`#pubw%aFMTJ`ctKqQ}IjP55;>Lu2eSZy~BYSO;Bg2y#YfcJ0!Ai!Q<*bdOUM`dh zE?sQBCzKR!CQH=LS|OG^qrsFc2a6T`b#}60RHy+SZ6R_6Qe_}%ktceg6CDlE&nMlC zwe$UX;gf)ki@-w=Q<@*(`YH#RzPSJiExWWu;X{da*^4&9#-^w#IQS0n()h31 zU(Os7n{`L1&!+DB6^{lLo`E*wVD?QC2ULn<3JP9C;+%2Lj7EKBb6cNbip24pb|TLC zys!zol0He~%1t|1OHyNs@_Y@v3}pD2ju%wHAou~f6xNdakVh?m9`z!4=+*-!BNTEy zp(uu8>5UB`RU&!s_k4RXRe;^G1##xs~{PU{hM z(p%~kB9<^2(mkdS`)nTo&F9QNgnrWf-xA_}2|?rOJXF`sCcrgP&UZ$##x>OdxTTOX-V3~*eLZPaBFKmSY(zuul>O|6#+x%km3a!ot1o2PH0K9QuMll zy!9KoSROh@O$X;DZe30k8ZhZuP8do695yJ%=^BY9i-oHBXzynvoZrZtp13v2VJEF`^`MLvaF4}P72PgT;^^~hV0bF3OF?aC%+ z4YV?@g#WqWRi?vg(e#(}TW%MQo5Q#r1Ww{C`RV1YA6mRqq(qUsM#^UUXCoG_Q@Q<1 z4W?v`FqU#D`Fj{TtkH&2NEs%~;V_=E=qdU8ei=HtHTcBdk-GmuVd!ORp#wF^5rKB# z{CkFv6&Umid$K>fFHg5SPnM_X8(?)>fM-bjex$<7GPRWYdafwD&^p4$m^ zQMTeSMhwoH1gI|^f#KzhWml7YE|loGmHPLvL6qoz0qc=^PD*Eae=duju7xhv*$e8H zWaj!E9R?cm5musN^F=|do=D_vJ$SL=cibMXpZ2b3auz2}Z`fKFk92|4#ca)$9gT{J z&s}a0i+5b@0djA`c&$uC+E!<_XNgnmBCKFvS6j0Og~SD8@cNa`p}X6p7~b>K#;$^? zmL2>~-Bpt9rIW2#hKicQ`WEua{LhWNpXp4B(Kb|nwFb8r!YXeOr^!Onlo9$ymYR>c>X9|$@dJ}z_a z9=L_8z_X+8zn=Fz7Y<$?w-hu@!^AiXS)=6tsDdo2wWI~U>s7~jD<75rP#D|o83aS< z4neefP1LbONl{ z#E>1NX^RP@WMCRfC-&WRLYQKO+B$}Cb-str9UdAq+#dXj1cVbPAdTBd3nykWYIM9o zaW?j1T~#41&*tdVS5+42eU|Uli%AV1{vc;M>%Bss7Me&DGs8b8c=ZD?R$%~eaJah{Myk0^i<;M%3_1r!;pXYC zOru$~Dq_~emXj6nFYNBzo-VYyn|UTuA}i}Vt`34DL~hLQ%5aspRw?Ui>T;yLx$TII zb`GR{qK+byW%D5dW5z@XyxHeRo2qceCAj5u9B}@H@ENW=SAZE}R4uPG-zaft=cVrw z6HO;$Y$=pyuJXID#TAlD6XIua?XvAyM#@Y)wx6a+-DoeJhB~26QRToB$2#-R{)zzg z-?G`X$Jj+cbG~*b(OZR0?fbbSST1djt^YWoa7mMlgd%->X!`ZXrPcrt&7B^1fVG#c zYqp<<7Lb0)w9G(N+L-v*#l~wfQ15R|M*Lx0zie>k8!zJC=^#cpOgLJXKP8}(VSsY= z>|V$0G_I4Ov1*@xg!xUwC7iz;k5CM{6!=mCE@X+xco+bvmt1n>k8^_80M*5+$i*+K zrK9W8g%k}9Kx-8%sh05 z8hlmCPAJ}(1!2T~lHG2?H?R^aZ|RjL6$sX3{3AlH8ov_mVX6>FGpmG(jVfroN*UXl z_R-A{rIR4%=-rRWvXt9ImL0~kBjO22olEEPw02;egd4uqiG|4LEB`bsXnFCGgF;L6 zJt`LZHi+5~OPTc-`f|fEH5?L;yxJr0hjEM+Z)9)%ZI@<0dpbJ``^N8C@*P(H&Y=RN z)g{>+BodFjjD!}IPFt0!x=sT>7w3%ePz*psO)SG&>9Qe{X)(*I_{$W+8@0y&>O*@~ZP0Mdl8(OD)BuL!Nli^`iS@ArE2Z z(B0x?3eHnVhZ=iPfim{#mwyZBF^TcF;mav)NOEdMSfE06Nd-;!Raxf$U0kMjKaWfo zahqF4e&j4{#hg}ciJz+i!d3=0l|pS>14J~Ugh*;xitchM`0i<|$gu|8WU8EdRFJm< zBb-L?_MlssIT_$pk8>MmMY#)b{+$Xok*)>`w+E=H_||Akaj@XJxr8+ z-mOghAe}1)veTsF!?7=1Zu4exW9NT&_C7?u%gty`8JX@Y5L|sUZ@E@xQDbz~?6Zph zm_rx3h)H_)c%LAxEYPIyyQ4Nf@>}p5BY)m#^L%R3ByQF76s7m5d-MtNJ|JF@hftz3 z6~dr&u!O1nLK~=m>Z$1ROZaP6$?3 zEA=d?CuUZs_{85*4_K+qrB6upIj&{U2dtL!FK-)SHtQFN3Mvj0!jp>yIA&7t)>{i{ z7`EDOhriUt^EUTknypo=)ldg?4QLpX6y^qL)vBj!pDJ#Jv?Q*r-WNkMjDsN`4oaY2 z8yPVAtFZ{aLNqXoN5=O>BTPU*d!OuKLv z9#mp`+`ZMgzY~cq?-|eZ+qMGdvK=Icp>bIzwj^8R=Je#bMjEE`6RHY?Up}44wHo*2 zv1%0NLA?F&T96!Ck4SS}#FVD}vXW19BS_)IjxQO@=83B)bS$paLd|8{AXB#Rg`OnS z(Zuv_s4gi`A^USAY6b47i9?6Kg%TR{3EwWf{j-E{G@MDK^dQONk4^T7#JA<_U&tHJ zOWQ)UP?Yw-g+G}0tpx|7gU%;zK35aST7V}Zh_`vS3j4Ox^;gHneLey-Tj(4lR zwyz-EcylrJ4OqIT`}j+8P^8FAOX-D{F=^{|1`Y}Iy5Y$Lu72H2m6AJVVARR(TkVG( zX?eReQTEH^6&U3bLs5Z-)+=BI_@czY;9;^ds&N0;x2HuU(vCp7Z1db6B4uHSy2Kgv zNg-c0uPlRYbv@I)TMlf*kziq|TSPIyo{-^pF8%MNU0GCy_Sb4(%p*A%Q$uE@7iQiRk zWu_Q6iO0x(2q9Myy=OQ~zQx1iM!OO(Mp>?xq4leaC|hwI8#HO9PBjCWCiXKrJCp;9 z3Y>1DX`4|Cz|zH|_J*%B!S-13Z<;n+iYqQgXp}5lf3%Vv#F1DpOj!Inv?gecXdPyG znJCv_IUm@StA>mGDf;vR$S5?4Xvh~x1uRQAJq7%-VhR0|o2K}BI<#D?u3>MgPYccS zUJT7|hW;IIMQ&jE6Sca`v3>*Wrwt7t_Y4*=F5v}?18@!@YSz_rrg&=9iG-2shW6|B zlivGrg(H%0YadR*fECD~t=cp|ClDoQ!CWpx=mIcT$4&FyQ#O00&_oxqj;^u{}rwfgDyz9I@>-PQrp9oEYZ$cbmYAj%cPZ2HE~i<+ni zgIKdGLV1d|V|GNx!5fJ*6!w+vYipxdZ{KWdI~J*bhX}_*S4wT%9`9>UOAWKtKhw+*V+Q)!!@>n-xT_Ork`l?3=uc!b|D}6>OK2h zQ8#OOiVGgy3#L|*#kD6STYz#f zGhX(ljYyDu$_HaU{&*=_Lg&!I8EJsb? z{5-fI_&ylQ+woT~43^hf3Fkt9}R|K-!43*S5V z@hqXjFzLu|xp(A*_BC8!pr%;}u;yee^(f?tn= zv4OXIGNk_TvBm&`b^hJ*RlCD8lkWrB+>VkSw2m9_{^wdO!#XBSN^kz+-wG1moAVim z;9otATXe}v+Deh+yHyCz+!W}e@W1nl72LO6B)H3y&5&HRYolq<2KeFfmkldwX_t(! z>CN4D#Ntad;$W`?Yf-Tx*21v&Jz5T{8Hblp0hO9!_tO54DVL1komnp~LZ0paZXYbo zd9Y24LLXea74`L>&MkYrusaH6U&SdUAbb=JbO~%t^%H3pmA&&~wVK^DKwE12GyyTn z(A!ujnp8gMKtB6c#d>o-&gBiM?26}NY!1B&x3gd^_T`U_TkJ4R zp2{EubRnfC1D*3KdKvF-k0}s6EF71yu_{st3y+G9G9JfEFdER1E_+Oc}t%9WIoS9vyjiI%6cl*XNQqw0cMZEA%DT&w}3kAbx1lQZoL_hj5KVib= z?b^cJsjbZM?-Jfcy3dQNfj)fw14SuQUCGnBqJYFwkJhUzD3rSK$(_j>hq!mb(dnpl z+7nP1)yQZ9Nel)Wb26X_*6LwUX!_uc6Mtc(Z%a7gDXKS+1aHDoqG8`#lgo`VLe4aX z%(AOt4I*_-%PwAIeoCI4=h_4|>m9kiLv0Izh*%jDL6fRxcgw2rE!c-tC8__GA3Nz( z=p!Gv39G8)KZ3o7XRYNs-BfMV=;J-1WgZmZXBnD7<8qwyr@p2K9FpGNaqHGQBW;88 zC*9u2oNV0!1^aYKoa9!A8ABKrREhmU>oKeWY!`w2tVk6|N2DYL=x!7NI9u?7p0%Sv zIFfN*nYnr`QD>1Pmcr>x?jY?u`GWi2yZk@?c*&>lxsleMmpmHP`E#dwWXY?JY#qJa z(1Bm>%3tMGbY6cS3w^kyhAVZsFCNVKTcBY^UE`j5;7wCqi8^)(chf~?LnuF2RD+pw zJ?-_9bQc%BR6_{e%xF>oGp{o$`@g@)jN+(X<=8-#`$(NRpO7a=3XmhYpwU38EdC{a zDW9bCXk@|>?1`IJoJL`(itR!*-B-fwT~-s@Ky`qNpn-s=DV=$1GvROjsEj@HRl95E zA^x<6S;)o}0IQUb78jmO6cN*5MO(#sR+ENM?Y$WI%04djR=px=PFxP+?jUP$W~)Xp zzBvPyvii=-s8O#e6C7U`saup8I3_F$qfQ4{0Bq{df9TOa7}ees%4o<-gWQIvNMbmU ztUKAOX(a+Dh0k4o!DjJQ$1(8m3YV}#{pz732$PMU#!oqe6pvt;!tpyAnQsnPw%`q> zDstmJ1#<8?DapjvEIh5KXbk00dMYDUz?+&D>Ul~s%Yz~KFyV+47Ox87VXpn%9!sQJYR~ZBS{ZI)37GJsfidWWoO13|B7>Jjng+ua8DR4|+U(u7nnL8;qcWHj6$vCZqwxe=z5fZrV zciyJ(a;7_$@pNrLNvog@my^#;?ioL+Vrp&{XBPoO!zCVbavWawY;EucM~|o3A9JDf z!{~Cg0`neJE8cV25!FMLdYDH(D{}%m0<|wdr2C;pOTZYccu)dfP-U?nA($I4PfDZS zDfS$eu_zvyYHvmjMLxU9is$TqA!2#;dYhjulF%-2B4YbRlXtY|1&wnnTopy^Hi)=J4h z|Fr~=bj4dsA+)%SnjLN4VlHJBfMdHCZl2M}c`}G(CuA9OQi5D^KxjKfR;nx8P$?>X zQBr~oKV?=5->UT$O*zu701Q9oelz}G-sgiY4`~kz2uMB+2uS6hd{9MIj+I56jfvAh z(b>V;%*0jI>|gub$kmL|*2>t~$l1!wh4Fvh@$@uMaWz#mbGCA{G!S*RayN5kba6Ie zbaAy~Wie;__t?eM%Hh9(pQHA~ynmk^V!Q2%_~YwMhn|GWCXQ4JZ)XDmxz%V^u`-Qz zq3x=4v9R)sXVb=>-;O6T(LlJV&!~rm8VhZ*pa{zT17gTE-$l4E*&XKX zBJn+R(aOff;Y~W@lH=`rIP3T3u4tQ|pk$p{;;46ztA+dVJHhW?FHxKwEn*^%*9!Fr3gssMCRD9c2CCM|ZhGqw4{O?ytv=W;Po&-8iW&cme z0}B4VgK)t8ol-Ri@g&;#KCdG%r_Y;d`H!FHE26Z}Nf%8-=g>Nn&U=$VMt2K?KoYl? zkGwabUkwV8$!VQpJ!W7Z2?zAr?6h7x>tG2wn75~w)Nww|{o0lbkTM^coW((K%20;j zub_zSj{!!g%Uy7<0#6gIu*jbgVq$ACR~w0Pauf;@AmQ7b6O?kJ#p`Lr6CW-(aJ*>} zs*9evaEwmQ{9q&c(x;g$nk&<}8+It+Q@nFMoS{?dj@^*LH>AznQM=>x;JP`*;3 zum$ougkE)G`=2gHo~+GKRdQH~{R3XHD6L?l+#X6cHks3|o_COO*`KPEsjSYTvlEyn z=S+I=m_|#c~l?5;d!662FS;bY4qaGBuvZR6@EHHowH58uj>=`#H^7 z1u{sf_PxnogQU9@@WOEN^x;D1L-CsMh)4bucqI`P(8yg7FJSHQfk?JW)Z!lo9~?la zXAQ4^l7sIb?{CJArsFFXon??-)XapxPr)7;XXClkXN6i5yWSv{DSELo^Pk%Pcq zN{C%5xMJtFO;l=68JufYmw-*_|5-dvz6#Hbi#Hw|vBLw;(sI2=^_?FY$(KL=YgLr2 z=x9M5hR;_m1hJNN@@Uw^U-*;r@z*x;xE0P7sl3z0j=z4!vDbmfgb7%&nefX+)~6~LWzu1J&=RnFwMe)*Ubp}d%j$-Dp# zcaqJ3Uei{pZy)Y++Q(v}MFEQL%ATZiS$C4?`|mS*8F}aoTDD$GE8tvOT@dhIG-)Y< ztlG#FFApJtPxuE#gjWy(P~k0)@~YdFnj>ncd6NQrx!hSp(pB)@-^0|m>j4%X)tE_O zqBHh(^FQR+2b)My0}Dn#Y`&X~=JXT+KkO?XH_0EKn#PimfeHZXBvrft2{6iJo_vvK zlHYWHGBCADbYbvcCE^@MwZjKPW&{sArpUPc@9=%H`NOI~sS$bWJ%LF{{->r_jNi(r^zoMq>LB|Kuua+vCr>c@)UiJA#8+ zoCf3v$0FeQ)UF5RvRlW8XR{ zQ?VOzDZ6KsQDdy2;n<#3Od#had6HB_Bfm*3`*2>t3Zs|W8YqwF+A9K(Cs-Mk4i;IuJc^h!eokY zk5$epn$gy<)oDLz)+j{?VL+Eyv5T)R(aKrHLWMdyqY~)d>|%b{+<5&0v(`VE(CBNAxtijIKEf?M$58Cn4`7{eh=z8sVo zz#TRZ!6(+-2Xx2W6qG`Z1dMa~M#wXOR{E}}$$emCk_%^!%tnfqWW%VJ#dUy`Ql&>d z_RGliH;ya!(F>WCUB=R`Z2%Twf|1WMzF)q-nu)XI)uV|G*c4wp&fxB3uCy}K$}HN8s>*uz*&t~HEK~T% zHWwq!?bs)16v9GGiE~s-jnHuuk(p zs4dv!)x-+s8)HVbQ1~76Oxf6sk44Fp(3|XC*>l;%la~$OTtGKEOH5qHS7-1e;Vb(IET&yp zrJ5{zmUzn)$z8YZnZ0Oec|OUPC`q<)j^8n_LuEB))8g=%>aFGq-8SrFN_$3MO?dYw zAwWu-maJ6yz83@M-Xs#V8PPx75n|A4sdqAiex%Pw-R<|3z2U;bBn_)?A zq!(K=a={Jg7xqI3C;HADZ5q)L=Bq(+LwgsdB#gDs@+*SU_Vw8naIS^8$T z){s$-#^L6quSlelQk*XmdAs{*W8}@x(*uN{)IL< z=MQ`fw%VrrdI6W7|}jo`(vh(AjXzXq9Va>(J>_Uhvm;oDc8;#ku62(k2^5Nrx{ugRoOHEDz5?rycq?^W>acWt+Lo~kuXL<)=@uZos%;yrtCZs{Im zwaE8?)QK77Zf=MTTWH!t0AB&qQew0khnQ~%-l~c={|RoP7?ANrT^5`iG?Vb^Rc1p* zuI|}0^MyN~$_+ZnwDDAHpvX34Zc}NLjyPn>vp|lI_O}XYuFG7!UW5s`Q(g$(qMqo5 z$9>Kqjt9#H0h-G2&eKnC(LaF32hQ7j?N+0_L!h7u0h38^MGcAg)8iT4& z>IK>;RZdNhwKFD|Y$aR~c);`oq{^(hk6g6YhI(U$oPI!yD@bx=M3okN43@N`d=jd; zdWOxK)@LI3smSiufLs!ctksGqOt{*qJ2yGc%OAflWeDl2yVOs~{#`jFETmIQWg$u7 z*pt8-q~;pM!FD~0Ek<`^AMX2q)1^x;#@BNdhp zR+jdT>d`Xo;Qns>`j))vpjsSMr`-`3Ke?)Y3a3z2VNB0^BX227HS#59r|RyYkEu^| zbVH4#6>}+e#B4^>a%$(}WCZFiRO@!cmHRj~Z^RIIA#`Ia;-Nrtq&(ZiZ6?!3P`2@M zhW9jfx55)Bt|ed_%>?H?vK{a}?>s^>*W$O?yYs*llJrccP7~dc%RSFf(TfCK6nx&R z&0B4o0vd}{p;zH^r?ctZ!$75LkY7$bxKZW(v%$_Q=kkrjhLJw@y3WmK*Wr4i%q*1&`G&sC+2xX zYY9KsI&A_*2KDtOdAY*l({Ywt{C6o*X#K1z;JRe77tr$Z>IPmJBt?vH0h>h3VRXN! z;wZ2#Bj8g^#H_{5g*z8QE2)fsc*T|)p}B4@emU=wj#P$9nIa0>Hg5xe_PCu2a-Qf= zA~xTSehN*b29Tq<%Mk-5nPLcyby*N`{+3~q6O-pAo&yxKz;vLfl{Tp6bk<5Q_2%s* zPHOV4W(^{!%3U^0qKW?@y(9{M_)X4Db^n^~jx|x%4q&B-9uo8R0_a~8Gg(p=fnfm3 zjV1%;^uAq2juZ&OSvtPD6;eNbEO!ML8r!nLYN%F9n@pSxOLx@yl~OfO$l=P&7~l(ltI$(2{t<_62n6j|TMIu)W} ze!(jfg-9rD2S}av9>(R81jWVgDQQI287$(B<3w{lfOfb-X>pjQ071+sIuN$!ruHF` zvs&*U4{B7y84_P1xb{AKvJ)f`YqsRFY39hN#=~ojXjNbHdGv%bbI9SHd%ySmwHs7A z5v`1D=UXbzr6y>>NgjP}-08~zlw;L9{{L7+TZr3AA}?207Ji)FyUFc6$!TJgG<3 z&K@K}(f)zIQ1-?Q=gg|aGP+B3ZZ)i0ky~^+N?DN}E%r?m0h*6ErP}dKPU7)rZ@%wn z?IsrdbLD8hZic?Cs;Hx$DT6GqPl4RHon^!P4puws!~$71{|2|G0-d{##GSXl$*aD5 z13>pPPBRJklY{mk@xjgs&cO7?(sFjHo98a7%Lz3N?py}SdM6)za~F^Z1q(Gz z3n??Wk11P{D@V>d*H;S7E0CNW^AA(O^!QTY#(l#`I!aa~@D(D%E}!l!uN9cW~Uaj}%1_@WCA5=ryXRE_xZB-|EUj9WNbFI;$M zYNJC7-z%$0_j2tLVZkqRFA=p45cSH_hd+x35>wcDWF?H!Q;CiE*4k6`6x;oxJ`ZZ< zn)_hNy>cZ^6!k+EC+VDHj3!}?ont67eVvrFIU6LG z`kk0l7h~{OdVqDhKWLQ^f9>h|b=O$A)_All2F=&U?glJG{Quk=B(p0N7rE7Pa9gS&7(;4XXA?RI|b$Ow%{P)}7 z(@tVFdve!yfb@iJyXkg^+er8}GXIF2-qo9~@ughe->lXczw7T$j=ZR&P3AdIB=v*3 z*8#l#D(Pco0v~!U$M3oQkjU4N*B*GYjC?elTf{oslTdHO1D3KRCsE$2J71e=&|Wh^VYk3(svZ&^3v^JpcOW~>|8jx;jn4)0gtZZZ$fJN*3|xw1^vkaS`;CG^ z?lQHToG0+7=EYLgJ9~(EvN` z+oPG0KJGvRoLA4qYx(o*#xJmKu;+Vcvw4Qj@q<*UDe^wuoG&D7_4}Q!C({wZ7f65S zn6POxiEUe7RdL;XvaP4`1z`*+f{Cqmz4$kR>)zd@!r4G4G33Wy(DFnC=}+r^dC`I( zfF>D)f*%y~Z z`NanGn29;{qbD=D`^{cZ5e0|ku|v(+=0#C6P&ieVsZH=#hjeMuxwKK4*5!dlm^BOt zI^>JeMZU=en7rJmj{~yE;uwDhnS>dHf4dL|1=7Q3Q*qmd9jq^W$n}^e6|S0H>ObvM zrNqf?u-A6=klr#rE%fyJ!tTCD0GdQ{Z}>ICA-?&!W-!x5t4PN!sUL7)fT&zoNZUpV*@FQy!UM%M2;!8o`zy3Cs@g?hd6efPGUS zsdlw?qh&OWon_jCMp!h@K`>wq6R$L6MH8nqWJP+bG~z&-qBRiO7FuY-IfhDT z!`H4S(McID2GLQKX5DC2hmF%~6p0CrDlhaGL%xG73PppAiP5`z@VsL;?@MTG7xX+Ckan&}s1Mm3-b2?D&o#i+R2iWvI&dvo}NtARALah_@G5kjrBYAbt7ESQE zniJ5XGPn7FlJ;je|KtCAk>$m$eI+_H2_)hAc~EK%cz7g1^^62ByN5lunx<32cQS4! zKc9wi?T4+EI%XC4Ap?8Rp^-d`Q=M${ni!BH{Zu-=R_*=0{QFh+`~k7_qmsKPqvb9g ze!Vl1pjB6jYsN^<19@AKI*8Zo0gHGdaC-0q^uKw^+kYJ48ohcd@IXNDqCi0E|L=K< zqp6j-v**7^Mc2+@OC05U8{`Yog7*%s|Cj43M&R6kA}pkXvXV2_e%h!t z#`yHTogMnZ*em+Coqi?0Ycl;%Jj2RZ!}g8WT$3?~>n+XnL87Il3v;YfHy2j27r1AwoM3&a$eqogXB6O;{4 zeI52Ntu3OjK=+>@n*_s+RD^n8#up@N-KcMhquiSzCZ`^xXCiZe6%U;EDWF&(=I>WB z4BRKS4>8E#r_SsOg6{mF;e{ThZu7E4%=LO$#+FdCsLgRF=W{j!EdELNDqTcYv!I?= zVInB-gs-l!12SW8NKLx|`GlrUYhbr|(i#|Q#2 zlS?OM^sq9+JGC;Fml%hh>Uuvfr_RdF_FtjFM-O%}jr@+JcwajSo~r7y?p(%@|4I@% zBd)~`*$`0RItQkYpHz~^&C3BW zQVRlHbwNP9fL(l~gYSC#x~^b-W}N7p6aalj>sEwKiM!yU)XsHoNVNHmY$gRc@!_M! z+-!UO3pwY!{zei(Z0iGv!M@s0!DK}KShY4^$hSwOwd~UW*ouMdA z87WrYWo-=lO9qVYr{Oq17SMGcl8VQ|7k^;xYMj_Oa` zK?eKJ_pun%Pmh@97@DZalI7W$l!XFg!0B^CYq1qilT-m|8wRinxPC(~&5L=b-?%&) zP(CA?^2a+q184jVY%2ULy>=Qo)ES*;Fdjz_#DnrJa}TM2#RKMfl$7%WLiKeHq%kDX z4egEgckz*nEH#`5jR45%op3O_+=?|A0v8mALBnYTn@hqQo0Ud(@{PwrELv|=V>TD| zd<(s_%?okBBsA}cva7n-t7-k~Yp}vBC8i|JHvd9!L6tYd!-$Fn*I(gGnJdi!LfvK2`AU+ z5X5LTH?~uK({OcXJ&jCW^|~l&h8AvMl`5HX6btJx2d+daA~QnbLBA2q7|tS-|BL$c z^yEtSZeO4yHnd6gwO)*jg8w!oaTBck-QBsju0&?e7!DLiJy&>b{f8^BpW@l_ND!h~ z2A@uLnp8JJ(sfu6mEB#-D#jvaN{~U3tGx%v#I1%UAZBy$G9{y+zA)I>FEGxCIH*wQ zj|Duc{1L@~Rv)kaFj5^SR+}S?L>(C`RN0z3+#i}wy@BB3p`r`yc+A3{vMkso9NeSm zk!NGJ+m#c7?~DctMcq)9}tiBeE(^o*XmJaeCAigm)T-xRrgyoC-uR$!G zFn*4&)R<;uNvYC9(?;Ys*|TkM}z;O?Hqyx0k$k!wr$(CtuEWPZQHhOv&*(^+jiCT zU;T(#&*VDS8IkYZb1rE47Lg0sbomm;0%`rIRq=4)roLSNN2U0Q&Bf1tTxJ4NO(@T# z;OO@8J78B947|RpDQ5bp9~v#O5mSqZA~UW=#;j9b;8y2 zNZLDI47Dk8gu8nWoP!%}BCqWRlUEUIh~Sa2wDa!O_rykg9fUzXYXc->K4#HDI;8|; z5SkHoC{(%(pi2tFkfLq>zg6M58%pR?kgL~GkCtLdaDtaSv)GIRECy)U=QWBaWzq|N zpF;Sv7BFWU6X-MjEiaTBINBt)9lBN%|4W!SBwe)-dVfd1R!K_u8Sd*@fvEZsW(OCj zpq{*C2vk+|VVl<4-rlo=OMX>ykE%m>38)L#dapq|Uo(W$%)jp{Q>%+Ju8BiKi zYc-NyqsS0zH5+1;IdL?SP+A}niAKh0?sG|?MV@bdg{^hP$s0y+f0@9dPP5movcVgM zFquY4yu?YCrl08K|FJ1+9m45dIR+`-jM%w{rUvFQUYOc5*E>j!rf-WDt#YMay%SsU zcJFPQ(iRG`kiEy$F(n6EnUz%cz~5o-h}6(n<1RkYBs5~bi&YaBWdnTZah_3h0)p8O z&{U}+XPWcB-F6ms{5f`z8hJT(I)+&GjIe%iGA{4u+2;>VPbD4G{K#^degnyEz2x)n z@bvs4hF!O}`|`tsBz^0>_O}o7K9lXj6;EV)uV-q;3?^meK~|Wz4t?$~=C>P^wHNwQ zdy60GXkd)+J{;1iXXL%?ev7qy_a@}|O%IU)KFabllub|dr&-LMIg|3mH*S1~p0s#1wF9BMQ-#)6ox|6&wvo506Mf_s0j_a^!7>_I} z1GiSKluPBLwM(_)YC&BgC==*sY`s7UtnvDHF?LLik0Bk^<5Cz3^CMojgUxNV#_&}RbHKZ9{bHe)Hvy|DyRmKGnnp|(!xJ3z$= zl5JGSmtt%gP&gh-hESwzeO&+;<;J)^6c1eki9M~!#O9o`B9avxMmHb8H$_nXv&izp z3?gBqwwZ<*AgzLzSxfB56YUd0p=BFI0gYfB!ng1a#^(^kdUs{J_)Q;lwanxPr>?k$ z%q#nk>y;^rJ@%K+fD%NUrx?FvA*L*?6cZcjOb{tvn}C=Q@u!%Hie%-<#HUgv8H^W4 zhA5s;YZB!6L6@l-9QBWpe9FHOOsk#~7xDfE>SA_Y&%aw=O@P(huyUNoPX{0e)1 z2en@esVLQ4hQ_R99k~8e9@3c~6E?QaO$Vu2?_fbgS=0$lojeZ}cL5Xcxz^n%N*xVP zPKW_HWCuHSm{`_P{j7z5Hy~Pp{TyL8U~ym5fH+sxz|7TnBF49}+7v2gj*YOMR$CWq zo>WgJY@F~Unr^ttVh$?9EiFuyfF01vP^zf1OkM&v1W?XkW+v~b_$s?e6oOe$3Q33w zLjvvkLU$)-!sci~p=Q7Rm_&lCH%SP_mm(btqDpO-W0Uo&RQ58nhIx{=(h-Dbh7|LP zPB&&TmD<(Zn@3YEz}thqj>QoyjFR9A#AEEn*84(|GV-D4u_Ft&@>y3HbuI3gBUhi; zCbZTrk5Vn)GC8JHHaCH)XJHoU$s$ae#ID6UCI~~Ba}$OlE3J*e8P49bU2I}{=4tY3 z?HKpv+?_)0pzn@3kJO;(TsYyUV;uGh%6Z3_jj@w_Uj>BN(`Y-;@5#0O8>y3rCh8`oBz z^H@8VcumN+*nKLyf9Mu)#eETq>imW!H~(c#ODb4|&|+FiLTwERbJ>*M zFs)oy*uGF5WVgj%IA>>BAio6ZMH$NRtM4iC)4KEn{O>moE{tCps1-Xan*sm;bo&28 zgJu6ugLV8*gS9E)xT}=%%Mek8vmmX6Wa5SU-rRyBx-oTu8t>JXHHivMBnYjMs1G0? z$G!Xg;{4hL4vgUGVMkv{TL+@=`R{!2GIQ7Ien0XvzFbK9K@ffV;?Wa<@oV&K-A?Up z?Z`H|Y~@C_?UVINDUQf`jaGN+(jQo)kB&#i6xmbqb;K^f;D7tpefM;eF>gP zq-^b>*fD4Dr(S7d3Y>l(#y@_HI={(<3hoQXKdSDKJf!5_ofBmI08!#?tjQLvOT`eL zJdh`OxOwqm_jmWtveSR9Sq$;%Lr=YDm>JKPM#~1A zSx{{g;Wz5j*Xo%KCymis)Oo=3Y5s;hwxj`5DokA!=up(q-GI?=+yJA=pA^;i_DYl<#r{~evtFW9g9 zS37|szbH-c$-bg82L^;?c+Hj(tb& z^`px_GmS1F<~pMV80#m7D-Zh)d|>KJ@jo~UO(y>uKM}8Bc(iF)ZoqtQh6U)ZbzBv- zNz}pHL)*=$#`%P~E;Cy8DU<2g)|ahFqKlCXR$KX2ani~17VRZDv`L~EVjeruI@_U` zF=h#5o3fX5qHsg9Frn)=qgWjKe&Wp7l+k(Qra z+Sf!f2rCS(p@GoTDm@JqylwLRq~ydnpFk|zhL@iRB-04 zcw&CskZVfaf{Tj-`=CD@$-86ZVM$W==@BRGH7MfWRnnU%z?v6;vr_8UhsPlwf*9*U zTd6K6J_HNEYz#0A6C%NJ-I<8cvH;ZG=d9=3zTlI+6#pLVMKbVNBW&!F)5p)#1#4gM)nAHxF_;j|qevK{#g?Q-%i(=Kv=_mw0qVA|$|I z5SE=^{<7SFn{6ja-X3+m4j#R3BWsJlwX_ByKE9x?m;IZMU4ZlRe}31CzwO}%i?+(D zG7nLvs%jkfMf8tKO$2teOS4&rIEt(P!HU&whDzbjZ=SoGHyx^rv>b?Ectf-U>g~w3 zX1^L}vf6=C04gq3BP`Dbg|-hccC==J%BKb(>9!1dM1<4inB1}rr$IZPb%>ce^_&-W zTPoJs2*WFXo4h_0Q<77hDY$*l{6v992;g8;Nc zal-13wb?C1Y^(5*iZV$l&&VtEh2#(GOVtFUn#ziWAY^NgHe;*>5=w6Z^yEk~dUtMg z1EMzg*A-!_g1QrJm-X@im>tZc1Egs%LRx+y7Pm~@7$q|ta3Uf$XL3n0X_#3PY$8y7 zj>QI{YA(3gowl*JbrDvwVMSSYFuZbf~pU6Esk(6smpE*q|uX#rk z(`S`>Qg7gHz6Nn1#d!!8ZtavIiq;YQFM^f?8$mzCDV!~zIlKjxQIx^DS&cql(+sG# z^_Y_giW<^){MIcp4D-i-+RjM`&A}v)3T%xtvhJRqQDJf#h($Bmx^Xxsm`uVu=`Ief z?_DG7*`!R&On**t(>WyZJCTKb0{0DA%n{m-WJwGr5RsLUN6D9p5ETA3ChYUiu#r(d z4`A6HLYOQQof%;n5)n(6`MzfSjB+CoE?hVvDYK@%2NB?iGyxSYXWEF3of!bbAs6mS znMpc@7M^FMQ*?@Pz2gSmBBL>9x5(DIsE_@y0#Ch%DzHG$@&-DXH}!k)q*)y8x=3|j zQfBErsZ{Rd(FWtP&RaQEaAGzLK)=yIUAyM<197DBkv*aACBtO&GEq$ zDhzCZLRO9#h`O#Z-jDz)NQSutNtW{v6!c3lR^I~nKE@b0784fLA51GsFRFY}`~mhYXP8O#Kfl8{G@D)|gwsMPbDQa@neV^;W_GtvvWqbZu>1!dVnb^BMbJwxMHh zf)cI?IBhIoGm9k1rnrawWHd_b-PYu}h!Rye+pH4ldRGeBupB;&>4=?XMRUro;9i&J z!uS3+8GhTSJJ8mWGtf~V@6Y}LnHu^X570BBBz(iCHVrekTU_iIxkHQ0c&7xiD)-Em_ck2@6rZesk;%d*O^|3% z3aJ8YAF|s+FnRyS^{(W*pw}9)`g&kzhUd+o_U3l@4{9IowSBB{pVD;M4DA-a= zJ^l}HgPw3so|ih;m!}K8@7sm*=;;#7_VD052sgGzt?G7rM3Zr!#$%t z3yT)4JJn!_bZCrXQoa6uKs@B;s3>G`SU8(r;klmeWBxyOlTDGSYZse>afd{kieofq zGGP6E2_`ETu5PbWc;mNl0t-S-zM@s#I;@VIHIoP+ONXklgA}Umo!U0I>8M=dRKgl>J z4IEu<$3bSCYq9dK^}YK5b_aMsU|v+y&B3kfhWo03M$i64br1WGa*xKwv?RpTalg&> zU}{)0uRfu+*C16+Dc(0?!oS?-i<^RfOugax?G|ffWPoI?Z*NJUlg2RQdQK0Tx<)VB z&SG^$z_>iwVZO3uD@<0ByIp6Q70fhcr`%sdhhz>o#{enX#Hor$8g_hI)NV9Z8}h}*^_YDpc|D17AmgZIT6kmb)V8o!^> z#fA}YgL|yc12Lz)5O9|ST`3#Xck7lb@s7=`2(DZd?hw36gLnLLz(6VBc*TFpF^qlx z4f0mv8e@+;EMZ>`@_q!l`Y632*iD6dxIScX*Ww*(`**3WB#33?DEc)ABKcd?Qq5}W zwhLk#xWsLkposUz?f9@qk9}oqcx^wg*E6NJk+o>5>SOSnMbd1bx=4SGD|6(LBa`!E zSst7yl;{ryBJv9+c`nKB4Ua?Rr9ra|I6~n?B;pR61jmA;!`C&>+ zU8x{6n4?A{QONj_f2f*ugXHh*tuHs ztxk5H`{qH^glpbk(rZ2!>Wu)SLmRMJYE4`hKOVThhd)O|XK|j}Nxplafw_oWViWY0 z0Gt?LMfXSM94|sdYEV4?CKe#wkaK6JO^=HPZNZ^}a$b4^G+Q1jsA7AC73f!-GxjQL z0UWPJ#Xj(svq7I<-I^S4FVAjwA3?_MQl)sXaba8H!@Dz|v}jwoc{yJ&($3D2zc5-? z#?B%l0d|3C+_*9OdPj&i9fQS9(oRx_dOt_SkWtevtznaHaGhe~QTw0U{aYG?`s{MjjQ@ao*OXv}hN$fqJtnyWt; z)X+j+A-f&C#LcDx$6g0d`2nJd&dJmlh>`Rj2^(*#9cHhdt<7FD>47Q^ha(%LPZu?g)FAiY;=2XZBzAz zq|!W2cGcJ(FWYrg7s1@<4p%~D>{Zq`J^PoV=WQMyWcP979ExBM9d?#HDE~K47o+*m z0zg{_Fpx(;&uAZzN%g$d{<~}n;0qSz3N5Dwh3%EUT}QyGWEZJk^QzE|>*Kvz9A3=G zeftxT!IClmNAfos`zh~^eej+FgLIh6AAag1z8X-f*KJC||EWy-vTULbX*W|p)G4lO zxbQ05HEgH&Y{7puNleUDipC3vK<~M$&0Uvw6yu-?PbSu*%`{pm0}F-Ui>PJ>NR3 z$FmR@6JWbhgmnEWX?&+sS}yx3u();z9PIDwj4`k6!g}C)4rcCB&^C};ZxiT^ulQgM zPD!%Km0Q@?CZR69VQ%(ivXS}sdnD=|Ds{ByAy)gT`Q8Sp zArvU6hq)H%2FM~bJZy3*N0mSNv^h4A4#9N`BsBs|<8Op^5RA=jC2dF`U%uxgYh4VN z=VB};DVvnK7aglp6WGXTf8G89y3z5%G8QN=Rs6P#nI?O@Eyw$gtX7r_EsV{eYPt&C zMrywC2HL%npnEAjg-=5eX`E+Ub~*tI{^u~K3k4Cw(Wg4TWT#(6F)l?~uMKG~SwfiJIB<86=8ZRXuiua6-3m&KdbLnu>*VxXnG2&)f4 zC1AmZ$1i|3@O&fG`XW)OG`3PiSxoWOiL&XPWWDXXI$hJj;dq(CF0l#h;(#l^b#V-< zQ38hlLF9YGtgE?x{#UqF=GSerMx|43@uR`_j1?Eu2+j+PG-0@YPLLpyQG`=}U1`ks z!yfn)ajQG3`w?pCT*+x2{GcHkV&Z+az9Sapod{CYhnvyEo!V zZpFU)elNE`61?WSr}Y3Uf3cwZZ6YrW?V)BHZ188|`f+2Y7mybHDWvckt4cSTW6)kN z8ZU7L7oB;>QGLAzsNjrQ@|gUm4qYIB&##hFCnhSfA?*E~Td&cr%7q@rnbB4q{^pXP z66&86oiFjwFbaZZFK!Hma~%dlFr2+xeT1t?bh6){SUzj67NiBF`s}P~iRu|}Gm1{Q z8P}!MPvb}go?wY2=BD7}>;8^)kPnsoe_iI(^$dB-_dO-Ome(a>gj6ql?I{3ktP@Rm zq>PT(r;P~U-p9+iTA5UJ`c~wjY0WKF4+w$91Z({R=~=8(gl^)8`dj=~P~>e`W|XBV z)IkP;RV34#qdT3~l0ZL2gX^H7B-6i^;&hhW6ZYk$X&z#v9^WC!8(RBm0;>sajZ;Ge zx-?8JuUp1qzJC!SNIzLn$=KBxpQw$-#Lmrfpb(92O==3`g;*l*r#H1f6* zt&XZs`PqWf^Etm*r_OilnrU@5PRG{jWCCu_eY;N0g=w?no`*r7e@2MwNNXu!$1U95 z$UvNa1%GUFR!JT*am_gEiy!(~p2*po;}}(D;)Rb)1|e0WPB{&Q_GgWQsgmz& z;(%zr$}u=EG^zqfUtN*%@c3Lah2slAl8a;HL?#-#ogA-Yn=kt|FY-F2QT3E%0z%)4m`V zA-HA7#dif1e;d-&qCNXHE4i|gFpcNMJjo@hah$=?0_t*vN@;)Os@liWUBh%b==SUjBHt4e=n zBC7ddP4F)x!N!~_slW>$Wf0WZ5>+#^p9AEV4g^5xCjeCF{yrpGwb62y9j~f;V?1N$ z-aESth6Qy)<+PdWrXtNZQA9m8zjZlBc$)sTEJ^*dlRBfT3UgvWm&Ql+wyM#(xkVAO z+av}*6_oJ1D}wm6)ET|fkW{qQa7&PacfzIe+)SF?=jEf%V^BQf+y7{_%&IJP08L@( zC6%4=sWhcz`c66SlmVPZ==NBRS8dj;@q`qoatg2^tLOaE!I3@B^U_7?c79~hxEE69 zxmwokvTy@^47&Ug+ABgLe@3$lBMtYIA^U|R*iryu9K#d02^Q)`CE|<-7_F&{B4yk_ zh5`e=1)tfH6GQQeg4{wHFf3!l17^{&ReiK<-jgFPM~U-9n9++le@C!SV768UQ7IIN zi|bfCcz+QY9`>r{ES*zp1*)_Kk=H>!u^}=hcOTkf&YZ#5t0{&^?TU@|ioVfzH6*~; z8G2`B%Ym~Y&hj3+{?oZ(W`3w8bl6I29t|5Jwh${%-f&{f)Iu;9avTiI)ACu=?T94W zexz?CI9x#CM#So7YZ{oIemCE2*wGy7;djHLieoYevb1 z5lSBlfB&1niK`-JS3L;D|9A9}+r`xmht`yfb-ZISbRvi?nL;G{Ers-AmNB<*_L8q4 zEu``td9bx~b1k33FLII1Ire2$n+mnAWsqgjY^{Kbt#gg2KaAAOLvBj@o)*_khdN5T zkz4-i@i9-2sk&)hHu+d;oxc7Sbri-? zL$Da2rN?~WY5w;^WUml1p+dC~e~<5#T;PNLs?R<2O^hDF9rMLsAC5@>Y`&+9Jip@y zWs!$Al?crusHXb9Xkiu{t=l@qkF?z5&5FM~Zz&FrcFSgZ@9DbF|BUIhgIARF@2r09 zEWShcT_dboRC491DLCL6s^-8o@8`l#D(O_6=45il0A2)g?IwNK%Bb@x4E^36Tls&6 z>>BsPvJy@i{2!TPCIABWi4CCq(-6o0)He`eW%5B)*d#(Yz?q#Ph-jFCG?R^na-gTq zz!*)=Y@6Vol3_&zMY7#pR`lJVg0*4Q(@fbJMFYn7Rdf^#lg1;~MhJ)j(H#)o&#CRM zbt4bEpBkRBlu;(g2jWUMhjYF1kZ~}Kh=cnP;8#0N!!6};q^pj4My8fQg9Okp2 z^Po*aXQWSdQOED))lHavwXyAox{=tAIN*iPC;qDvPS+fz%4+*gK5@DWGBXCNo#&;= zUp#=^-S2LMhL2U~CU%5ZxcU4@72>hm?lP^HnO?QJqo(k#y=*Ib)tdiU0gczZFGoDz z5kt3)PrD=u*4F{E2nRmoQ}-z5?Jbz_8__%nA8Z=!Z42>RN@9P?_ec*rNjB zzqYXO*~v=x(DG^NvOBT0(W-`Y%VEQePnA-9DJLw-`Uv~u*exMEq_zq^>50Hj-}Pi@ zgz*@vkCC$eM~_|pz3{Z?^1x*amL;S#X`UPM`P4C-!*s~$Xc2s&JP18NnF)|Mhy6;-xr`zA z+cl+X?m5M4peJmpjISK5ku)s1v9=83foaT28$x^ANMQ7@YsJIR!2V_*raL3h=2S^H zE!EvZRpOf2P&pnvMxGK|71h}iPEjTT7zdcm@buN=(l@0al`T%X-g!-mBbgn$ zG7VEkmuK3xwOfheXzM|dXRU5cE@pTxJte8KA4Yg=o?@}J)xAtSLuL`Co`GsAPBxgK zq@CI@dG##q7NKn=HB%x|s7aK0Bp8@xo9}v#}vL7{E47K-kmh$`y8THpC-=dHI)L`)00qsRp zpI#V#?aGeSmZMdWoHS#L{9bN4n9AnyRB4$@c_^2VEmxnQ&Dpzz>AskBHDeSH$}mZ1}eDl6XUNwhxB^Vc~&t_h=i&yn7I|5~pJd%VE~ z4m3xsPe9E`jdG+4I)4(BnM;!o#{dog+|(HFG#1Es8KbQC7faFVIOVzOX&sM6?O7SV zWmAo|qkRKPo>r*1M#vb#NX2I4wN8PL-&TWQ793i6Z{11YIm-<9P!zIdL<$$swvIoQ z24YAb9=_*rEX#nndYJH&vI{J0kH=Ss$6Szf1ZzsT$u(_ogQDd-$= z>FcaVKg`vI_kUXpG~?A)gHic}N3KGiLE##2!Tj828y4F#)KRHnmEeu?Kd%QQ&BcH) z<{XL9wS=7~p#p&M=h%c%@Sbr2#EJ2z^(kSEm-Z2L9ZFIQ7PmsKOto#uQ}W%WI>-}6 zkh({u*nFev=jP(Wdm~r`f;+S20Zwr*JnnwlYc@Pu9aW^%b?1)m6JR`DuMlF-MNk%E zt(oVxKm+*lz-6yczZ_bso~HxPIK|gjA_C>le9`HPK;E@XJyR(kQ8Ov?V`> zmd@#eX$He_FM&IiI|eSvY$(iV(oIZKpx?tnqGe>(mWk*d9SH5rmQ1Q2$r5JfFOX!h zZ6pgIhfwdbtOE$daTrZTfSAeh*O(L%Kn@G8K`b^po6~~~bfS|G8aC5x5E)BsN@T9p zIL8dLQ8w8vVM74YkwcUnXi010GqCPJ-@ifNQ`fAz8_>k=zs(y?KtDAUP5^TG=4)F7 zuNrhgh@NPB304j3ETVFT(A|=|QhidDEb<;Fh7xWBnHwB8me`GOvA9oJ!p|=SaITmZvAb92XvQu~%xHiL+XHoo*g%X5w1b!IRc) zO33U1suDUO>aXK!((k5`-OIG%4(0A2@K--T}7&;KfD}>F`yp{wZO>j|~~( ze%K8>11A^Z!b(CN*vfDGYU}~HmB+4VE7>irV&Qdw%))OKr}VZD1j@ECh#Y-Tgrw#b zR2HPgPpZkK5i=8Q8vm!bn#!B~xdy!mHPVZ(B{0Xs&i7KcoJ4u4MOmew8@x)ZVUQ2R z=SX}P^cSGRhk(7X(jd5)e&MRYn7h{F>wa4g{L29qze}8 zlS8sx@;;AYc2veg(W?%$21mb^m4YJ>Y#oy)5E9S*DnQ6JO>h;We#IAgDWttl>RI3~ zlh|s4R>w@{nrop;%@?(XV$bjrfPl2(w$q$i0d->ec=yM(Y5bt=)8LZNolg~`vUmQs zG=B8nd8L-8Ei?lWO6W#QSghd z#(mmPE1f9h*Lf4AKm;ZbqkOXq>)I4Y_qATcvxN9&BwVg%u>N38$E~V&;iT0*9D<<3 z5qBpF1H}^ko0^h6(hAZ_COpPR>G(%Tk|`y}|H8lEn_X8R^B`9W2|C)`aGBCvzNCfZ zDDr%%tsxf6+k*8E*l!s6wFGRh`KtJhL*#rcj#2LdFldUGKs<*x1o0nOl-vLqYSxs2 zl#<;O!feOWQ9$VTR8sIPV_Lbj!!R{8ZcccdnXE*(aSg81h%0;kg>Z#{crvA&s zk4@QPPm!Z<>SQE}tFx^_Cfb7M;E4>h3uE4a8LBkgbv4nS>8n!h$`$5!3E)N6sKHG2J ztlhk&t>6Qy*cjfgNYHPPhRZ^hloGzo)m&W*NCT>@Tg!mqb%yk-kU0{H9|Po_ZJj(n z2LG<+!BrZhh^XLU#Uz-Q+lzY43U%s?bl3oKBhNDs5dm2zy_1zqB-kI)9Q{eZ0ZEv@ z6t7RCr%jf^fzD19??lBJBhG;WIB=rO9V(i0W^vsA)qBceG`@CRgRphs_yRFbDQwR@ ztFssW*kXE(D;|<{y`yZWgny96$;V?aY2B}J9zv@-!ZY$KE;BY%PLC^0a;#gIKXQw2 z@=g!a*W@LIch$ftj|Eqnb@33$>|jZHSQgUTs;Q`&nsg*=N%rtr9hAbrBPiT|L{k6&D*xw5n}?H;sTrNowC1JV!3f%~ZpH85R&Dcu zg;2dgl1*y`8jQ6!G9Hkti<*iFCj$btKJg~Wk!zdZC$Aaah#djR^>Y}A=}b1~W7Z>E znYcLrkHFY`6kjy)J4efDa^E3%R3%$Y&1&iIQCwNmgF1qG)!xiA#QE7DMLoLHmo+Hs zRYGD*T99$zXK$R3!qnX~6-JH*pb>R${`a=yYMR?~kt*}d^zLVCu8{TloNHvV!38J$ zE68EHorC!Yij3N9M%&}0K2qq(2Ge8^w`7=JxaSx0#^T)WuA*F4dgjtQaMBLY`*i)_ zzTL?*ACBFnM=*THW4^*-YW(3~qdz>@NBc>2q!a%TF?<}6hE1>$gzkz&#Z&IyozqH)*n`{!pcOvR^&2^UWy8)%9}qOMc>@DI0LrxPO^G7|AZ}?5`zuPhT9+ z;$FZ9YluXGInIB>{ODTEf0be&^>Wrx#7r$C$;n{2gB-XRp^0ne&i|UpY6vBZv_dzt zy?GK$6>r(c+;3uU#|@9ck5Z8?)cyBB;+Ts7J)W%Vm3{X)$W}a@O+V|y{BXEo(oFL& z$rx5Xrodc`>*&c!-s;CWag$WrcG@i{@tJDCr&GC*EjqBfbceS!1O;%rWX_rN<=xWc za(O$UB`m5DY6^1;nAVMEP0)`!VtHRW;s~GLvl%q;0Ujz|1;~#fs7)h!xM9W zDh`3ysLg;@Al>Nzj<~4_j3)ah)BiFM+gy#zX>A)saf-~y%edEK$46WTaG2-ZBx{Mc zFRtm(=zzrga(jlH|oV7kj8&jnmCf=|ygrTH0 z1wd3rrq^=EdmB1$M85Z5>TsMIxCkb=vSAUb)N~LdV|zA7%nG6Q`ZaW9?964F{uz6m zd`qfYiK!SuBXo_ix(drb$0QE&To{E}#E64T`*R?0>!3bA&Hfrb)yzoIO@QK$eeyBz z31~o6zq#EGCk}ivBllLOA$k+7+jw-Xctbf%O2GA604(4|?~++VC7&59WH>ex5h;8X zwrWQGU;Qbjo0QQD{SYUT1cb3kkj+7VtC|zQNfhArqW8!No`=JQ2O0_2&iIxH#5gd4 zM$CXFzV;Upyn0F4_?BSddU9@6B3S%Aw$9T1Pg)x+;f@zCvc!*^<0+8P#%yB^D$<|C z*y{?|4AN+_SbSHPOWCYzCvLTaRS7Jc%zoWGA9pW%-7d-MmF z`|su+8Yb22BaTl(2re{ZhHK%;5XS+70#I?j>HLL;>mi?akj=(~FME2ekGncA2I6Uj z$X`IR5zEUZws!U#_;44v15ws@>KWwy1DYhgDQ@c0YBQ^sMx4csgs7ny$efz2R+=tK zj%jXTMYsuR&G1R=I-j?M5>~hZxunJc^j)m;lXu}?Sxpg z;e*IDV;B&mD$6(6>ljxvy_oC%0l0X{e<+VMFvN4Wy*2(?kSJ!s0G(eEB%ZlBd(TF5 zvv}v-lMOu-V8F|;=`w|u9xYxxf$2>PRw>+@e8dU-cXUXHh^efi_#KAfp#fKTIW8JKd|SW0;tIRQcAy$Q7mQ4QW2H9@er)}#FJ$0cXN@Ry=phLU(RQlBILU85i3<{@f0r8J)VG6l|)ah(V?AX6*DM7 z6#%Ox!`BWem@}}zakWaefQZBXS&I&{ox)z)Zu{rJ0`e4;B>hCPs<}QVlzNT@c>>vj zlz&GdF0rLKN3mPGM>VqMJzW8lGG{h=p&`Bta;Xs>PFm{OXn})_%h);kO=|p5tE!w4 zJ&!4Z=Eyn>xUC1GiI0Cr4!wLFMblM|*t_XlCeRORLaL*>hnviqw{((V90@+fp+(HF zyV7_t(->WlGq76()69vj3k|z;9)&2|Zay?x*--pawktn=pG|r{PSTqVL?_e7Jg?sn zQY@lJ4CBrhE}-caR_vty)g!-6N@IbdOLtt?%K1>5y-+G`K$OM?2V7!Pb*!!zXy;N2 zHeQ;J)K0Q_UJ(^&Yzm;_x&L-twD&ud!`v^vE$xVY&AELynH{?cpzdU9bEeof%ip4vd>wG)vC~p-f(5RUUD&LK1NC&XP@TV164}cU z-BbKPwjE}<-W$O0XwnyNU+7?5IkP7IaL7io?6C_m0dzSe!ohoW`0ckOKb9TY{KF}G z{W;)o6RU^QQ5C0j;i|O;@s+8wV`+{|Q^!a1n?w8p?@>u-)-*@ZJG36wGZ!VF65UA= zpJ(>nyNm-Ov$5i%whO<4Kp9stw<#h_`|3MjK%VcbGCY=la_`(=n7vaXxB2F5=hkbs z`IOJLl_~#JT&za=G4`cqgzX6<$r4>vxPPTI{)C^atn{GbN5RWRV#PH24b9iiD>;OCt?pzg%P z#l)xWjrKp(xih{^`*3%S6aXWNpDbfBI(>-v>@XX19Zj=s_g?M`Nqa=o1G%*UzGAHo zc8JJ&vnO8kQXhkTk5*jYz&3p}Se}?Xrhn4@z2y8n(D$m+FGa!W@tkY9J@n{|J&j$G z*wW9?j=%)9sY5!Th8=K{XgY3|UUn_hn2j|~1H4((FaE=SYO->Dr?WH+=%XHGTpRXg z1&r2B%wre{+t<4aWg+ro$bKa_Q+<;zS5F12n&yTHO4(9k(_8HG5p_Kvv64A=gqRVs` zeJ#;uctNH}Iz1H5P_U`ZolI8~xPP)%stwkWxX-;8E>7(Cvy=8a?%tANWjdDDYIwP7f<1K|6E0qkS87m_X`MRo*c)iW%pzNvH{ zo2IR6nnQ~0s1CoHcZI+Y*l3Saye~nT_iFstNJL8RMBa#$e#Ve z%I?Y-`dA4E7hOvN09qvtFr?U$eQqi)iAjQ(n^+tjSr=SD%hnMRgmoNWA&24C(YNbA z|MRgF)OCmnwfxCL#j=KBAkMv8s!GW35@i|km0O~1zoE8N3-rCQmr`YPU_3k5c!>vg z42()UbA;+#V*#4FulzFK`cZD{Ons0J>Ps#=+FR*Cg-)vKW?X5TUYfhj1nK*x=3;|+ zkp?6$NufvP_*tdjTJkrgk&1HBt!H$(YV8^`(ss5xU&GK8brboTiv)u5Xd#?mx*;1|!bwx@-V>3e$HF>!v`If{)5Vlm*wpG&{J@CQW zY@#xsrk+61gN_oOk>DDiDgQ|2blIap%U8BRt)c|BT%u53A(8~j<%koh;#Mev!+keH zMpP&yQk6ux+-Me2iko|F79j27-RWEABSicuWn=`}CylCWcJF_yR7wH%i`%&X0Q8Ol z0TlnQ|DDbjHvcp#J~mE=Y>9WLo0Z@2?VFX=toQC>C`lYIWT>#ToSuf`RFbkc7Z*~Z z(#q+i!7khs#$#<^w&jt5uyQ(emsZ!qZ`4@774Qrj!2$HT%3)4}6ixZ)d9? z^Y;olJ{+)WAeFD%m%r$AD+XWpEw3w&Yi+CdG=KYdV{c3$i6D4}CSRK@K>UVZ@dr4B z*e{1cLZ#*`BW?yo-LVUnaeury^XU1f(AvU*komiWIr3^uF%}*|oAF)#o)Jcx!MiEo z%*Zv%LiogpHGQ7xq>ET5f0{QiHUHJF!&{+7p}EBe=-z700ky#5t6mZPlePG|Z;13q zPcAh|r7N4b>%(1e9&n^Hc3>EV%wAh~T$m+edy4Fg3<}UP@acUqKurOs4qtVgkn567 z@;A%FJ?n@VaVjlo7kUGRpN`D!-jVT>yu|-&1ZNYI;2#tKr7GAQSM+(e59rEnBZqC` zIUnc$Rm&*$`gDum`Uy;I?E3@85Aogg1yI}}>rcmsD|d)F65`uQE%WnvcIJ0xM{F^c z>|vbS58}ey2?_*4)n{XSc&A$r5)$Y^lKnrdol}!2!Ip*Fwr$(yY1_7K+qP}nwtd>R zZTD&1zB4cL112IfGAb%6>LoLBXYRGWJ^OpWwQ;wZ{%4NWlP6Pn6b_F>%0v#dPp%G8 zeb-xfJ8#pi%}+uOgZ2ZD`&lCz%5b*~sYA7ZIFvrU>d%&6A6{s|k}{f@rkeqq0T|*7 zJGUCOenDd6bN9T;$`Y+=_qPc3!bmhD_>rR3dsn+I)qzDXR4KTbY`_t=IqD|Op9nv9 z&KC{in1JQCJ{_V)IWV^9qj@7yxgH(SlHRO=27__U_A)TyFAK_VRRL&ll#j~FlTB*S zibmiubC5>wb)6?Alqt|oy(5JhUgkW35y_ItXVV7Bw7XSy7*Nwt204| zA#P9|-xy(A*df@(2u^b#f7!GrX`NQ}Yvie#UP}O-t6{+{b0!9LU*BdD_}=O>{CjaCu~QJ!z6H*=7`S;6eu{q;JuM zYd8`SnX#W&7@gqablwXAIT$Kz=x;$N**|apQ0n*ve_-#WZfjiqBu|gHb^XB*Vd3y* zRq4)3%BaqQcuCH!*wrWBoCn-u_8(<={#YuWRcpSfgd zJ_XnUX{q&8AnPOgpP#eNPTpImDS$8-Yk&PD4JG3!<7oPj|4N_5{R(=ngV8Ck(_d_2 zz`%7rwZ33KFPGu&LGTe@7`TfDiW-qVh)7g_jI<2ZUhN&xf+E`#c)EH(7st24&zk~O zx8o_U_j$bW3u*;n4@noBPs6&*1)l}ei>JB|4vPVptkO?YaW&Hvbo*ceAkir#2cS#C z2%ku;Y02DE8J|@k;XGQYwMz0LvXE#KOPB_>B(QuW7#RiJ2{g-J3cJ_V2#^snbQSza zZcoW+G)eqWu4&AXYgOHutXtN?1|If_$pX4ixzd;7Ut7Ov-&~p`x=ExUf_V#Kx2czg zt0Xqa+*1-MeDP)CNaTk*q*K|cks=2AW*d~+0Rpw?^)K&6w}+rY^#y3=ScOgQ*!6My z8+DxnRqfV@5^$m7eGuu>sIN#yFmg;j6GY9A68g1u>F%a6GIOw-)v5OKA$Pjro0fAn z(6i2{`;*@Xm6mXNZ(vF!Z2YiyKA-9RzNWCFNy#f#v3~%j`xuc#ehNa5ZoY>;b$Bx3 zZvoH=V$Pjgilu3`KJM*VuaSogyhZXaxV9C zL0HpG?*#QUeZ2XP49}2J12K?>V{E{9{mr7I3$XakoKE0YfJ_Hhw>$qHXSLY4xM-mN@$&5-7EKrX@FNN%V; zKxuA(^^g)dkBj%c|C}EJ$f4=aHgSuQcsFl*9$quGvauVAzJn$ z##DNe2spR@kV^OHH#jrL0Gveq7njId9Q-YDJxXkJ6GXqkd;qTeQ!f*|B6IeyII{P! z4CjFbGE6=W@+dqd%l0acO4Zx<8G8UK4Te>T)9BQ_ zdvt?WaKOb|BP)c`^=X}0Nwe@=LVJ%6j|YZZcCcJud64@{mSy#6b6B_F?+{T!7)7#% zRX>GZLm;7IpkNW+l8(bt$KpEU35yTBvs^+ODGRH4N4pTRUo2ZZl6yai;t7D&Sz{Gt zhwf-FIi653l)kDU*v|Kp2P@^#T0^+(eOR`>CR^TaTfG$}|1{AC?5K#}Vz>i$SL7u< zNyFY-nF4n^iQl%tsNZxD1-?$#pp8=^UCX>?*?7e*ovUa|Avd`wXKX7kg-jJ~eH z#8-Az(HHHes*QVWQcQf@T=%Y%vH|M^Jc&lsx3io{LINcTihi&r7gh}j3px*paa8^sG5 z_A4I39eLh&@M+>dG}KFFVo(wYotK>(N_58ppqgeeWFvPKDqv(AdBz;n7nVay2sNg{)((M5_Xp{)frXf5 z{unqOBlrHNJm$g2Tv3<_*2M9n)&nh^N@HP6>a58kmvL zBV-RLsiZ9EsmIGPxZ)F7d%zlW(q5LEGRKdUs0^B<#)(*ZLn@C{vX()lH&A(AGvzM} z@d3dUY-@WftB)e0!w6vzQKG-ej+EMA{WA7`mWLo1;$u26C0c4kgzSs*xSec80?vkb zB%8-@%Rj<2lh85X#)W~Q3nB^(IGrhRmSvU?&KNWcw#X2ZUkn1pnx59ZdZ&!GgLU)| zO_AHP4GM-lYTrYPS8Pc<+z}4N?HEL38imtE(xS_z65z;|ifr9TC=NVi8>(qd{Svgo zV4<%U@>E)ht)W(pYnagO=@PqRkT)ubt)5|9u5?*sS#F?eC)#n2|j+f@*Ou||8mzGLOBn$DP29JUWFgL^0Sn|65FckO_wp%Fx zLG;$bnYT?>Xpu8mm`C_R2&h^IFw^wskxIZyy?_-5#2;jZkyY@e!F3N!*EzH(w1{B* zEu{0u?0y}@R?*PYOQK42$cM1+xrQ`+NOaRr&-&7guj(IrLwcK2XCk^vVLacvc0 z)z0|7h?5X41Gxs~pj2SS)>V0IufD-LP(<1S(MO(klP7Xy(Ez}@7^)T*e^>^elbU4e zq%x|)R>3Z~jl#uJ`$hZ#@3leZ-2OvWB3yZ=8b$QRw`8W(=FghWW428ZpXbI(r_-tE zP2-z|7AL^$zCI6NLw-HMDQ9=%wh5YTC$Q0;NA;n|Bz~+_RfavcrcM^IBME)Id?<#{ zyuqxLwa`-Y_!>tG9n(yeM8BsodQvfK-()A{W-4FL8F0t2>mL%SKQ~P!EvO7oW;uj? z=&HtUx%I>dOqiaz`$Q#YH0xK_rt(_K{`qY;94B2b9vf;s`b!;Gtn{Np3QkL02*6H_ z{up>a2tXB|G-Ei;i?yz0d@Q4rP4v|;55z9*M)qb zU1M#;i82A+oWL=kG`nK=uy`-9 z9Ra|7guXDSHQ|@R`v%|`%m;+t#Dn#w_B3O0B$L}CQ_r+AWYXibERJ>DJ*er(-|{D6 zBU_$$qbHCLOhD@%?a%l(VKjQcxqqF)Bg_lkCzGZcVYtrXrP|x*ViK>w5^E@ z8Jy#xfz=xHLrfDugMbtW&Z{X`HHc}Y8tSlX)6p7KUWGMjz#DL>*m(5VHcso7`wdT} zw8T4S1pAIfyGDLVS~PL`kMI7?iY70w!c;pz`~JVmm8o9JgE0P2p-hiteec!^jsNg-8h^@)Bt3-}kIIF3z9xVF?nTglwM zHFaDhBgn{LE0Bon;i#h8g}>@g91-;)FSHSDK5ptb{a6*hAM{dQf!aVnWzrdb4>k=uxldQi^VMz?I-NWd zDw3XB^PpWhJH;p!?UcT7uN17!d7nrn1)W>HTQ@ohCG_&oP|BKcv_BgvOc7?Q2^74J%t3#o-67QqJ0WPb9Lm#{C2p_gQJ$UI z#T8Y$b;r~AU@K(EsrZeVpgjI0vDN0D^*{PIn>xNrY@J*Lh|1q3p2MnG$;ntJDkQI} zbliAiw(B^Xv^X(9c}nCVZaM-Z=G7Cv4fJkNUk|WQSV-~_;$v(mokn5#v(y;P40mDH zmm7`RUK0P-RP2{_{d~AFxhvn@Oi`P%H%g<=>VD|H(5>L^!t`eAxt{b}e_>S%)2h`V z0wLjo<}v-FDI_CE_h4#)s|A6BWsLjB+lgraIh8B!HO-g#M2(KgWCcaq*0GK@h>}dj z8rbuoFsL}vU=f_uZR**(l3`SCJ!=J=#x!bR`DjvuxI_}qf($*c3YU;uAA1EWKJ)yg zrIn)I`DAKM@J^i=Vc!lW1v|SM^c{q~f>7DLV*R-ks*bBdS9+o&vM_U%?7UTsUL9{G z{#>f>uePMZZGka)^QIJKnjr5jUu588)ih1aglN*gH$>$v!mp^4o&|oxxMM=X1fY7* zwiQpYW2SgRu7KP;DO6=$=`+ivJ}gGFQ6S=FZ4duIho6T+&a>$6sYqxwSq6MxKaoeR z-@WG};wlyVS(S|dwHb^|EL1hTvh4^5#@AH_6M<{AwCU2Bevwc%h5#%V7l;sG-`a!I z-TC;l5{4*wn1gIv@OLg1gkHk1^`%OQ`e&e3K?8Q@@9?@RhyNvple<}%YkkcpjN`s zhb?(R)vVv8RLnrmr1nB!8qW|wi?@?6+UHsW6$$+-57WnnJv8LBj8yVCocbF-H8|+X zd)W(MQr}+6X8E@j!f|r_M$+Gl>WDwXdH&IXm$vxoo<&<^#=IvyS3$*0jpQ!SnQel( z$Iw-`l2QhoO)iF`(PP}eBwOK<-+r(ubmCFkYIeR^^;-V?ubaiD<}W8RJQjZbbx(Vl zH^`+1?gMjUV~5<#%1f`k=DMP_Rc&SEWpZPq`TEqrCP{#-ob{_AEO>Q_#v;n=Z)-cd zGN_w`mp0ejG_moosH!UJ5SV}7hHOD>os?9>($>Yd)fzH)yG|P zdu_I84|nY)rf2;}fWt=%Awr0GGa--4}XfL-WfKS?l zbC-CZk}miH9uM%N{Ij;Vj$JQoXIT#|d(ht#>EflI2~FEx>)*1ZP|}+5Nk@he z;QDE@BHw+UPN@JxU<`eAj<^Pg97KLQ4^_a`2P$${Kuw&w*HV@38n!XXFQ+lYI2eztLn#^t##wN~@M*N-V<(s;tL`n*+Sub%I)F z^0Rq4FV+aJcT1QZQd=w2oU7*cj3kv}UA=}=qH5!KP;2*0U5sGXv)|>(mHGySS<=Ro zJCaOR@CS5*5|$g9qf=TV&VW%{I|1OfQ;)b<{%Q_s3tU4WI$zb*iLGwrN=Nm;?2K-m zivvMH?xmG0Jj-or#-zA!ZeTUEo6g)S|M;wDnT~$qB=FAKhg6LSWWgd&n2L)UzRs4) zlOMxJ#ltrweiY_$g*TuVZ=ImfFX-0$7>@s2{q(YU^C&$xpCQAY9wPNzp)Ng2;$ENU zM!Qt`u~KyO{TJ@;@xbz8P+8KrZtgeErf6Acr2_KysZx|jzio96-S=`Bw~+UYOONQ6 zs1p}v=M}?r6MMpbs;r`Dxm+GA*5k>$4V%n^&!YscA!ZvCIF9m1P{eq{eA7ku!H3sp zLI(4)+aeY>v#CNiL}uH!kVC9gKdC2%ecfr@*se)tg}EV$O=A~Gi4Vz6(5StM>~0G9o_2c%znjm>}u1oeU)_VdaZ8fwTirn*z9TCy0IC( z&K#pQqW|3SY4S4?yV9d{I%Ph38g=FDQAk|G);e;wGm>@ld7cVbB;9#nqNJ$J+)jt3 zG>cL@aH*>{eZ8ut#qHkQwuH9&M_=8ewDQt6wc#tV^1`pSLN~T1N}4;i_H7#7lYq3F zyl6vOH30xhZzMqCT6cW;@j23w)19X94x_f@LSl8kkeE}#c}KRw98%|CUY6tYEYV%& zRLV&8)SyG^6I)bvuFY=ONuS4_b>V7QWltfF`D241L zbn}$EF!B9oec8+P>f!>{E>EXt;p*Z#P>1<+uzTvS&JpZ;TLZb$2eirZXsU*bADbPe zstc1RHksnq(7S!}evL{RtiCqTjysK!&fy-zT?$jOCQG(rQc3Ar+y% z*bRfmgSFdb@{j=7=?X&eIV0`>cBeA>BgAA3qXlhqG{1BPV_SfX@^}YG3{hrRjzy+g z8h_^#3-eE$>@`=X@*Pyta7^7*wv3oi=vdoa+paZdRordYDw0{`OqOWEB?gx9wpeP+ z5xCE*l#|nKj|O@e-NAPsQJ9;X7e2@!FF2Um_tEPGOWv>%=8x=Vm%DJck;fQVkKRI` zufZKsoRgXcH%&T2d@>IYuvvPAy%U8j44zkScPXqbr`5d<7c;iT@h@~+-~?Mn=Tk~>sq(J7yGqE#;#ou60v|M(PxPC zG@qC~acEUOo;x5jhNk2*FQeDSEFs&NT*!f{IeFNpPR>SEI6CtSz6QGFCpOjr9nh-IrVH+OEb0(7bP)(i}ivH_J`;3v6ogH|_K9m!~PJ4xJC=n$%r@6c@H zE4wD`1IOOes*_$DJ~A;M6^eR{QiF#`Ymd8Du9&BL|+O9aWhp zm&f)>cKlaMn^64Et&{RS3pmS8#ub$?$K1@yCnM3*|1g%@E7itTOVx^)wU@n+S`WCU zsK->er#{;pb6!I(7;fLs8D7KxzPO~T$%c7o;HJ)qE#+Bk^(j8)YFBvZ)ha%^mM!Im zXjYAy9XDsDEn8ypP4$L#`mwH-*Pc|C?rUk(-iKH=k3KG%-xMTWTQ!SPidvyOYMfX! zeqA<=CjIubs#z><=Y`ymKUL)mSjWnmMb(m<%ykYaC;Y@ICw>J~GkyvdlmCoLFlOk> z7S6b3y7rs0r*bmPLfUJ+yghn~%Eunvdx#h3sP{RI^>VaE)^9*AAa(qWlK` zHpj*XAsE~aqe#F#N};wlNyJ-!H4lE&8g`&l2JZ30b8K8Vp?oYNA@MBU7aeXQ{(#Rh zBT=&j2x8&T#4y1VgT!H3wp>Fc@7!3Q&};jfALOeMz_Ml zSx$hbZGVeYZC=D=2K`Xc6MBLhqKRV8QxlSS{-vKjl8VsfWSnQ7icpsPoOsRl4)@Iz zWpBH8{1V{G8M1?2(m)tWhK%}WkGLcHI&YZ5haVcCUwA|W&iMrJ#0baV6L)ZF&pLzy znD<$~jek*D!S5G@j}9U+bbUCCpFqe@6^Ozb4`9aF`gMrx-1Z6Z;F2Q@VfSHOurE{j za19|Bx#5S8`z0577GC)0Xz7YCvI%2At2HcBd9?ISDDY3`-$nbDX#U*rh(|rRZ`H#J zj(UKkcO+=ghkRTtkb(Afzt=T#OHzM30kR7GxC&*<=geC=O;!_w_f)JgW&8)i4XaT0 zpN}GU*hKzic8$?=Wc*aqCt3k_0f`L=cM0T?OHiM7WIlF2%ZyrXuD6d%EX&$^+c`~) zCtt*F*!59<%`U#&carQVEAdZAi5iW1?W9xw+w;S8HF$UDPe?BUSzGbeSL+wwRDlZd z7nT)zv%{vpbuJ#G4~2tGCEjVHxbO3d77G(Js=0<^&^#G+22)QRQkgHpXbGXFR5ASF zd%u)FIF2J%lv~cnT%m741GNS~L;2rvHEUga3;(cZ^N5-GJk&j95tT3B`#Giegf(6Y zIb{0%;ITfwJI*jnnNCqp8#E3@s3&d^M4t}*G46~k_S+4YmJA=&UVpl_ftl}}BLkY- zUbIxkNfq89X~>!GYqv9pg~2d44yMoCHexf_IDX>@Vlk>Cf!-i}OJW_Ps0G0zsz;9- zuo~{ucg1Ef+yO;#&-%=Q>ju#gph7mj`xg5*3w{QmNOq3^qW%Z+PxMH*T_ucw_+7k& zOC!MNzH%cru}RpO*s!3IKMsQy8a%IQDW#PRAD|!HI%HN9{Mm#{NdF&S)szZCs=3%` zfI1|oOCHUJb3VnOCuNODNWI7>2VBsl%RJp8GEtid?6JhJ0UX?F`!aP$e_<_=bVC2o z)W!9gF(C&3j4+e+OvpN}!|tYSxHVbYl01q!kj;OqL^BMnh)~x=+XNCnnE~J}nm1W<+g${U@vX*tk?PXoFr)S@lZGJS_QI7$o|EtDBaYYa@KZc0txiJs|1uT)a{ zq-Zdw2fiWLhnGIVm}xLpN!$2y0;rQEdG@o%wSv)7?&7-EzLMn^ej(SpD*D#rXQZn` zG72biHx2q%zRo_fTD}*ay#(-^ed;(iTiZSF_N@JR!u)(q_SL;;duIC!)0(+~keLJ9 z{JSp(QN{%d%Ul!%)XRz>-^Oo8zg%wMWw(s}RNT&B==&6d4~@ri_|G zaCA@hC#fy*p3bC%M}(%ee^Q|^Ny~w5l*U~igiReLJB=m#jhff?e5X?;3wfk!pRO^%7VMF|SalvMU+OmLE^n(#7NmiRyG9GJm; z@+quuB#^}yo+-z9tAs^DaDfF49DwPuDJ9$NAkdcaqkFXm+8RY$Mbilsm2LBbMan zS%pTH>nL6+5#2Ht%3CO}-HcNo?2@&9Mw^#)V;u1=z|P9F*mLF0fZs|s{(6qUpE`E_ zE?+Lvw3oM9tA6QKSa|J$>z4y6ei&ySK~RQBx+E_0rHM;a>xQ}}SdAQlQ6^lSLh!f2 zdGSQzo`i?=WQfWck^F}5B9$_vaQ>g#0=?Y%huQ*TQ2E;EJNi{erV2-UQ4C=Q1pG8p>tK>V8yA=hx|U2uATp++m|OUYFx5zMo}?a*>@Fmc9!p;P^JYUu zJGvfAE$$+mc+XV#eFH*%HaiFv<=a*T=;G>z{{$5e$v^jpgu1=M&E%ams$>9O zxn-XuruaXrrdwj%%!&dIM__%!W$%*43Zv3;$E77oS#4dy>Gm`yaHN_zdxD)gaa?!y z{J_k`BgGzheoIq4Ho73xs!4Hl<=v%4nB%!$Q!tBpm>zfnPE&dH2;@}l4+@)_GTBoC z_hBE<8fXb5okj?2jy!(b>3n$nS?l-ykqGsKRK(ZUO%eg=h)YeH;F5(?O8(BhGs(}u zetJOrjJYRhLo~UoreW`ZK`Y!vpMr;eSr;Vh5thklhcAm)A^~1hWtRCHRzs1~T1(nT zp>0-z9b>9|JqcMJZw`g5W9_QA!l8IR9^W^JozASj1bOF-)=AKAgoUrdK9)Y0h)u$V z1w&<(zM$@WrHAQmM(nlIaRa~OR6)`a3B;=qOcqS_FyI{d+xoS&!TO@i23ji?^fv++Ir*DTxq^Hqm64H=r@N7f1nT*bXU;EyBO%4pqcQ#MSrn;B z=$^s?ZdoS<{md&X;>8{FbN49|r7CL$&Ve=osfzbtR5mTDE-OhVEZIcXS=M2PsU=cW zj;TAswfI!fM&}YuS`73s<7?s>vgF*Wkyw7RRwFrR&$j11-L|~SjwHOI`o_|(U2WwA zn~8v1!*$Ogj@-z%l&MlZr$V|M3C&Sv^v&}m+mq?{iAWzMO${3*zEZ`!s!P#*2(+x+ z<4Z6yl7D7Iq{^=)bq~&9_SMiwCo~5-W9CiKj5*4bCr|6WiVA&}iC(KVI?QhFd_!QaveET)~T%C~7U$pWuD*-RQME(zuV%D?p!AY;va6J#km$&Sj|DC^TWO~7wlQJ`|6ikbaNj&Dt?N^h+2=!c6f_$#nWYli= z&y;*!Z310xMvXlZJ**0&Oo;M7$o$Mr1QcRv^Fz2>@XO%2Otj}=#;K#p4#ku$qQTjP z8KZ|hZJgQ@XH%erC~|l8nz}$Cd=cY>7#=D7s@OF>pAq+H7#8-I&sqt2PsIoI5xWGZ zKKefTzSP&-7e~nCZ9+IO9IF(H^RN3AsSbxbUwW2iaBS(%P`aMlj>Zyxb+kw zxZozPBs3P)`U6oE`NS$05lT$(B1fqwWKRT`k>IUfMz)mlz`|U}sQ0GK;&zlM{64l- z1k_blxWCxlZqNG_Smclvtf#OhRGtBIdVJqGH&a1lT<|K7 znPoygq*3pWIWYRF&O)27&9mtLCcnZ=nShG1hy4FFJeXEY$ksdpLQ6<7T$PaMi$aF? zp(WfC-Z)H!j*}S3IMXoHs@3KjOO;-a{9|EgZ08F<7 zKGE_=jd<<4^GWW+i^lfHl_|_w42nNL4@HG`N{@|3LOvp%?vE_%-!B9%pN9+BLHjNt zv!xnb>R-?ymp-Xmkb^Se13(+>Wj3_0HLD8#egVe4c7ApJ@vsuE=R`2Scjs+8gDATeICA&NjlJ7CQo>G z1XPaLZ>={_gP!tGsHm$vnN*I#$PT{iFHW5v)D^o{35U=R08iMU+~iB~Ftcz5p|3RB zs1|7LPLGsHhO;>SV=MD75E=3Y{B~&0kJE8H;IRak6Gegsafcv~EXDz1l6Mk{PV22( zSiYzq;Y5v|i#Upu=1R>J{IL(WaEFJ!WDZ0&3bJ&!&&S&<{KwRy^XPWbCw>; zQa7__`e3p-LBN$Hr102u_yDaRMwRX3g4&q?027M`pPMJ8eTxX3!VC3tq2H@*TxDI) z5AmCR@aG-U&n&Bj`9ew8)67?3kZ8S)IGS11%8W!^tB>BGQ8&Wgg>U5_w~Pl7wI8yq zs|LOllCJx>n?Ya*Xf$kJfj!rVc}I@CTC?1G{-M77EH}Dj)-jLv1U78fKz=)FIiFRP zC)6~c^5s?mA|>y^%Ctf3opGU1)eb}l4fWQstHmk~2Mm|Jh7U#Y+0vv1Ef_5M0VJ5O z1GPA$TRtA2L{89(Lt|$+T3Z$OsQ4XVW|Ca2qk5QqB-f2g^9O>+RRb&POFLiWkceZD zf&G3JJI4tvQkpd4)+VD$aE<@|qVv<&5`DmH;|^=s6GB2k%IhFgbD#P1Uon1s40$%~ zDJf9GE~YeFitFNWA8Dj3hQ$5Bo3x5U_>Rj(D?;N@f&FoQ-z9d2w`^`0gnO>LFH%5-dS zq}hEFbHN|(E{waFOX&OhHN}nKe(O9;r}N&E<4MS+Gh-ab6R17YrsD;|H3(VsHoV81 zv0{#7zl)+~Ygz}9(aCV`_7&8J#bS4V4qs z>9(hRgEnpkP?@}&>j#|S++|X9r9s;JiG3XcricgEHMYu*ETtYy!zT}iD9XN~!fWk# zawm=lk~p&@_0z;S0;=74F?Dxoh+br9$t>ysl&djd_;YEHyhFcGlRs49b#e9bgCH$< zdG^f5^^7P`#_kSASw$LLQJu}KyjZcns?g1(E2JLU3uSiaNry`d^4U4cv8l2gtWa54 z^i~X5ymz+K#!x(gY3qqx%aa$;8o;y8`Ftne9jvpsanpGwex?+S>gGT&8&aV}e8LGh z{a||autwTDZ{DeH=>j-GI%kI@##>WA;i2I!Ez@-&kkz=o8wFfH6*~m9muCn?34V_y ziSw(2H1a(|lTWVMg4-o6v%QRE1uM@e83~>_OW|Fa#Z{!JWDWCm2Q))v1UO zi2bt+kcwXtyiPQzhnXaV2y%>>Uex608K{Z~EcJbeyT*Bh?whOEY*tThO?T2v!_11v z(Xn5Icd=Coub-Kw?6+!mikorW=)*_a_lnxfeWy@yuZfAHBaPjx3P`Obyb4X{1=*tK zvTW1bYe`nK1Aw^CYXGnSRvZsjb`;epIf;cRkH(~0+pq9oC&Jsf90s`D%_UH?NKnu7 z2ga`y-u6l=N;c^)JL50_dQ#k)hC6?jA+Ez0qDQU#Cl5t0b@Cw(#n=lhV&`NxzL&fj z713Ju(Dw~gtw>n9M1xc4FKm8W{wtV>0qRU`#A+zOFy)tj&fe7n+|M|l0M_o^LP1jt zq4j|^PhV*zSPQn>in~OxV?>k-dCGMm5c3SRlviP;`ZZyd=<)38@)N%$H_kng*t@=6 zp?S$KritokGb!R@vRo)z5wJ|owERQtYFDB&6X4KpR$9t&N$D zeZ=g0jP1bJsesNef$as0rHZyO6FFpyHs6#*p|gvYf1qU{skI0$4DPJVXBT_%)?qPj zsFREEoz<8{Dv1!SIM-MykghSw>Z_AfF4F2e|Ev^eQ+kMA(}&`Lx)=+hk%d7XmpMDor*|I zCh2ZC51uD#JC4JI-)l%W1VrGaPDBUC;H^A@>;Oli(NwhTSR_s2WEfQQGwT{)+uadL zvuGIV(FPm1Uni6DER5#r!>A>3zc}kfh>Rj*3A2+!eA~6G|MS(_9GvPmn(N6Cuwyuj z$q{(Pbng2#2IQ!(7i>|am+mIiQ+Gc~y~hT#^xmUx*LtEcQ;BcixQ2y#17naNqe>}F zwuIQL(JkRulq)$pDLKuU?=u>+KsNL;sYm45Y|Nb(pekViQ|8X}Ll#U{WG?W?yOf14 zi+==byf~JBffLB3rxLt=Q``x6BF&DTMpB&uUOHo)5=Ja6x=4!UJIHj~erf;_1};kw zvQcj#5q;7TM|x>ogilaKGp2-4)1)0<6+RdkaHJ^=XB0MyM7YGQ@hlwKho&_FR33cX zkh-|J&wsYC-st8k%qPX#Ci4g-9qnV@n!p7r`O^G#m`va;9Sg?OAb6NTmLQ@vHBS|z zQSHQUC^jIGmg4<013w56AhgU_zVKI1$`wWU3fvfB4zfc#AwLKe&&6JDDxo6~kt{#LiWj{8dTw*G=5J>{o9i*_erD4@M38;z-0r4VlSDg`Jn z!dQS{?Y`tBjVA23ZQG7Xr3P804xuH%=s7~SC137gO$HaSJJBSW;`J*P&g|2#Ba}K9 zg8H?V{KLyg>uD;OQAW*Bh50hDAi%3j?Mpk2`@V-iuR6@ECZP_NnmW?LDI#n+BC|-K zZcB!4vz3c?8DOHrx%awR&DM&7Y?W8X?UW=PZ*}8N-8Xy!FxGan`6uN*_s^auRhmcr zijNk7_pz;*XO%29Mk$rI7mxAq2@Hg7KB3&{B+%Hoe3EA5dIq)=0Vp zmpP`Ise}$;Ada3V4+MV#GwunP%jPowX9_|Z_tx!|OD{4Hi=|Yn^j|Ks8`#9Zis8c? zX0v=|x6GMNwJE}o%HnuxNt7j*4{Au4U_%m{@j#mrUxrK_ahIufh0RjSlNTnR2deb# zJXWv^?a9sZB{$+LxHL7^^m6ATrClk+rl1g%wdNs%Z9yT&1vRL$Q?W3c+;AnVlc z#Zi-6x8vC+QeDQ;A0|<$4nj;?Q8d!!$;;><3=8m_`ZoD28}*^RjlP$#R%K8mx*TFp zczq@#w+nQKZR^K@(nzuFs!ZC0GljxhF2t4TmG|mC%%w+Cb@YT-8PygMwN0tb!o8IZ zS9XTf*j)-hs58ANQ~58}iq`ifFGCoMo9o>`LB`tp~f?5_U-FB}<9UVH>$26ugON5_g6g&Y$N0 z=7czGH+uT@_ZV`Mi(p{SY!}ELOU4YD;}NL21ad_i^%I2@`R zwjmDkkX~2j95sD8ak_-*;GQcDJH#4$@}Eh-aNLJWlnd_8UUyrSDyF&8P7|< zdE|rK7W<}94a}_s>1mXltEvP+9GayYXsEomIsRQ7X}YzYPufc+m57(Rl-H47IBAO6 zx|}2D7Lkk06tbB7YYVB+jit%v3MU7$6O5a_vzN<6HJAloF>cxWL3uZW;0Hnn&Zo`X`nF00?d5C@Ag=s9l$|2jn( z8g{0p_0hj1PR)jdI#gctnzItk`Au!g4|+)lG0FQRmGJMErxXoBE||Sa2i6dEh<9YA z@bA-N1RoW`4-?eFKBW+GorWCqVMRKl1kt0;uKb`IBd$x)zHHkk*6lO3m6-2dXW~gJ zu|r7X`LLh=!)N;V+@Qf%-c=gs@db-E(}2t*<6OUzMm z;YNbQ!NCDIy&t+femwR21U8zzeHKDluR|Z0HoKEpc;C4hsmjW_XSzRd_9EKxntGy& z#N@VcQ@3hJ2SuibEsT%xwxdh*em(@j|7z*z>DxwuFVmHDcJtf#;MZ+`I@qk)&e_(v zf8l}qgm&ldghCRfp*c9SVtBq+kA)g5>=XN#&0x=VC0 zydY+FZz6#8S9BIU=MMpNJeyH>#Fni+pomU|e0;)h;J;@~5MhYvVaNctxEQN`u~@^3 zz5rj>>T-VxeEvg$8TsRiazdZs*#-szYb`Eh8AYkF()(FtQl<+S9&B<-W{mVUmJi z!}>b3L`sNY+O1s-DRF9eqH}@i$TYIMHt@G#@bPNB>))3?<;`r~-4LJf>KbGk^Fz{_6MW0zeyS_@385E1^RF>tj9>Zds3;8$e`h4i9e7?K4ISzuPe-t@a_>a`t9WkQSINTJNv_`cP5P1*Wd1&Db=8p_?gm*{Jk0z3*@M3iM=R%p@?(fhtLw!X0&jb zaT17}VuuFP-Rtv)U3-Ursw1CHaAyruuQ2=?R22Bevs;0s5&xs{g(-BPu> zl{Le3lY`WV#U4v%WG735?>R+@?Qe{A#r!1idKH#-j%rnJfJM7z5YMK*8x{1_3P{D7 zn^>}VuG^1bnnWReXfAqH7;gz|kgprdl%%{G%J=L$P%9|&V${WtH!!|Ht8cq!e;f!y z)4V}jh-s!vZ|rbPs@=>?FR|_sf5K5zU?Rahro>MD^;Flxra+=v$nlaSg0kQaUkp0W zns*h9rS*q|czHGm+7+8tBOI1K*+UfiG7rBcukKTx8f*rK%o#@2rd*#Y7rYnMjc{^3 zFig*b?Kk4e()M6@FtgtK@i`}NOzdV7m{pb&t`P{k*U>ZE2z>>E0Cb|R~mRb1*~h5CrR`qn5Dfhfo8T1iQjH|&U?BD16An)v`LsA zm9~si+KaIKl+ujorDp=Q3yMzA=g;cG7Nskk5jqYlzXikDkp3yULLvxBTsZOqn7FX) zF%FMm`S&~R=BdumJY~nxEWww2@h-W9<2f|GI+<*3;jwjOswt2q1Xr+IzzsR7HA@Lb z!NT92H8$xpKpf%IZ_r36NHm5quk+T5Kks#VU-p)q`d0&mi0~*{<=R@`^|-XQM&`B2 z%VaLCU5nmBp+!mhNMgnm0s){&##v=H0Vk!+XN%;%pUZi+R>k5=63z*U8zHv{f8Pv% z6m>(Fct73Y_D56FB%S;a2e6ynDVh&;yS%ur6#EAuBhejDO01#491}(FY2kUE67#bH zJ_0i#*}TwcqG242Ta*BX&H*Q zx}3r zTDdE#MY7cRo5?^C{}SwDv|i`i1>N^k#Zl_$#{wi2v~w1F1g5hTl4|biGM|qJT1QHm zurU93UO`r}i=d?GWh}c|TXC=%zpG4hW>4bh>W$7t2nt^lY~pa}rJ<dIC;-6eNQl0HeG)Z=-r>~Ltjt5X?U#E8oMq2$Vgfr=w|7-I z&=&;NOhMHJ{lOC>pHMB+<$r+d;e0XCKw<1%3=BoReEG)fYgZdQ1e1NhIi){vfvJ!b zw7fuA7#14FLDCEs1rLIJep7oQ5jaMJa{{CEtbR~-mTD~RfkX|I_M4`jCkB^AGV%dt zJKl-MeIb46@ExYuBPY7?30dh^Lp}Ptu z=;@iGbdkhdi2bx|zntVms15LVFA7Al(uOl_d}tK|LsQu&0Q{K2Tst{eF^op-osr-Bg=DX0)3emsUWs&+n8=*6x8846Dlh$7QG`O7yOhSHxI|>HowfPYw((jer2H^jIE1%ATn8e{ zC9AqEuno&PRoLf_{%vM{G6Atwv2_Ws6UXv?XvdTrBnkC;(#WVUWH-H1`P1L@+30}s zK|yaslpp_9pOIcS+SkB7KM)WdhmY~l7PJ(V7ErXTRAQg3m^1fkwnHYRgXO!swjG?u zcRY&#wJ(~Rz5d`dkRCue*~#!fqtEc$hsVO}0Ksa^y~|1uziAp{8)vYMlf4Icz9D8V zIsMw;fikWH!@^rOfPp9vDyDX}LSQe~eY-hRd5e3rr1qE&z_<(>A=LL(OTuA}g_-s* z9*);KCr7HwgSM>L#J1P;;@edOeYvbiyKxetpip}2dE1iEhii(jV*|M$Xn?JA>F%@0tzlw}reSh4jbu#<9`Tq`;Jb>m zmxPEfO)CRR^+5@Dze2Y*0CaQEf|j5NxnGOkZTN@rm@nT3iZ=85>I+GzSo5MecPH%? zl9rLDo7>muLF~GIuKn8#L1&ngnpuuv$$V~>MIsp5@3XK7WntM8_?Ji%9oXe{r3nW~ z;{7IaA?2yGNc!D3Grx=p-mCA67)_#E88ms-y23!V93sD4z_)YPB@b^_vlw`;ayzlS z$O(d*f&XxesbR%Tzy58TsfmLNBnW{(jh8)Y{u(ttD04gE;-rBw^-?wJw!VDkm(bUN`+ZD6nW1P%-bG8Es;Cl8~CaXI6)F95&nuWY$;{6D)B|EKl-iQccC4T?@)exvl zrxu+ORFMyJjz8+c319m9F7ouoOAZ=Ku0};7)|t=f(Py?C2Nsm-fZE2q65*0lAUPL4 zQ(7;U+w~t;%2z&K((IhOIa`4C$8i%ly;Vzh&lRp+@M6{}Q>=QHT;tA7ZBoUZTz#0L z`9)*T4l*sSrKDWgFw1l3p!13gi~(Ga-P=MC0@o|@mp|RllP)7p%p~xob+$X$cZK>; zOt$l+-CMSJzMD9P?NWSMn;G#tn9Lcpn1V1kPFN@GiqQrL*HoNI<;M_rucJkixW0d6TI`fk#_s8rCl?!T=4! z&d&);eecL0lVP9hn78s<`_J|-+oGHg}s9F=CGb);$wP@6!=IEGYZK`%nM zVglBv^_!ZQLuGH3kG-t%GLXU>6T92^u=n06{pM@^{~!sozcfRBo3n`fq16BaCnNZ! zzNtEdcdMIgFOwV~VeX!=5zf}`@^nwQ`yYHg{L)En_>N41ADEc)?nRGjeUb@VS23rq zzQ=u`!`mcHi1muG6@zHWj#SVm=m{w{#OeGaryaa5Q^k%p z+vBA$pH_*vwQ8wHerp7M+@#rbfVsUY0nj2C*prp5WU!P4J3=TJITC({(xNN?q)>@_ zoz)Q87phDew6|pEyo??%he#4a@K72RgI~1Mw#4=4u)?cFYd%t4SXLH@SuMnVwGW|3 z-kzh>(!$;kJ8$b*kV%>hrgDyC+~YFE-7Tkw?{YkhS8zOvSFQ|UN_zUS3bwHa4`n7@ z&I5!a$@V}omxo-d%Oo;H*`nWgth$NZnuG`7yb)ylKj3=8dVTGz#o_mc^1eFmd%z&*$cd*iJ8$G+fglyMGw z(A4tEu4vZr@~*s%jppG*+?@?H2E{jM`YhLkFekw7?=%L4Z@MxRBF#C&e9c|wg~?_? zvFaRwS7T$)v&qkDUv&l^=T3KH;`4d$CluruoAt+B3s=LU(6O6tEl#a&zqL>|@iT?> zyPXqIEj6*rJh)w{1U>YrP@}?>0D7;p3;+(_dJ$*j=BFW6RA8KX{gC(d+X_P((!CYq z1a#0T1%hP3R=QeNSxx$xf!ye2XuX}kHtv*v%5GQ1txleFIo8;)Xe`@W&(D79qgbL$?kJnrdzFnMxg)y$RFpPL* zpq_e%QKo0bW>I+tJ8Jg_^1Bv^GDf*ws5E;AhUsva#p5urRb2M*Ep>6jRmE?ji&#)XS#OcLpf1;S-;YAzB)08`_sRbpQ?`pooQKz@ z2ed}k3fZL#%-Ayp&<3#&&_G!KQMjHKMg`NoMgA2IOA40l*cF2}ZUn`#mbC#=_P2FP z$sL(aMRQA#ww}dU1nqa^>wX^ckqI!i(|OdgQaXAlXqvMaUsFzUY%VVJ;cho%k_f`f z_2|tFoN_UmPN3bO6IeB$4coq!E$jm7hPM1tGZ@_zLsz9?Qs`{K_MTk&*%u(7rcKi3zKL#}DdS|gk0y$WGFDhaDL#ItrFmWYDgsBv1A zgggB{*aQ8dUg7Y1&`zJViG9)fcZn&+abk^cGczh>x$PoF^zoW2gR#+a7zLVR;^cNJlv;$9@J3XOXJRouq z;>d$?(>Y^5fCU=MY?ssB0jb=u!uE+aid`XyF-H$>tr%lO=GeZ4C@mNKpmoL?m31!o z!Kg-H22+Q6I2_ctut0`4Rd>eYaQD#ycSI&TiJPPRDPpLX6u6$yHT&Dj_DE`1!h*7p z43}lsRnG^bl9(^Azfu+*Q+luohiX#2f+=WkkVY#gKei{yn}hcc2JQX1mi5X zJKJH2+z!vd#A7(ODc0sVQ;DxxJ-fmMB4wQnBxQ9DcPGOWDeg=PF08paruy9_kyU#j zAS^=l;~hP(KVpv2>^Pzn??D7Rkhs_y=1kseO~Fq_ZgO!Z${w#TUg+cP~k34oH2IXo#YEg`}NS3fcT!tkULV>1+H)yAP#P zC!qL_%0ctT|3b)DjtU2y0OA(wB|_mwwyQVnw)uLn`gB{@pSzgI!dk4_)xb|ya5g8k z58&qfMF0db=~%PDkNmL3^|KFRxKaBIS%pT7pn^F{*s}+jONR=`SdOuElri^1Y#X8C zW*fP4B;GgQSHBk7J~?QnwHqCY>fbfF3Nf>@K279rsGPOM^@B3yZj1Q4U@UR0zTEy$ zs{|w#*_Cj+Tm@Im!-|f4+7E`)ah+I7WrX?Cwz&*F)c*7oQDNO4(rCy?+S3(J_PG&9 z{JBHkFV)I7{cIA&4;hQ`ibWk(d_s#Pmu-9icaQe?qK5L4FO?=k_Qaf6gE!pyfHevR ztZKcT4ou&?lA4SQ^p!P-K_TMP$N?VC@Fa%L`JRXWV&{r&Y=3B2Gg`BZ&f-E{MqdV= zb~ZGSy@!jx>p?;PS9sj+<0woDf6n=Wg`*l7eS=C>(Pcrrv9>1y2^v&H!C<=vsWh9Z z_jIKWbZ%vwZ(MVfyo>t>O1-cjuV@UfaE|8jA7+9AYK#rP%xZp+mue~qtJC*QbFKuY zn|pA++Z0%7N(SBCI8yG{F`dHo+4%^m}#njYZv=urwC)Tm2eS-E^ze{>O>h<+gT~1?UtG(mNCjj+a$^uNa zRAqQm#!!>W>oiGVc?Q`P;jNnwOA;?Hwv#5_NcMHv25x#NF^9Wj`&Kf2&cVOw`YRVp zfSAgthGb&THW5>_joEi81@>SpN%H zcs?62oUW1&;pPkBC(s*CKRsP83$3MRVfKKwg~qr>Jb207!$-{ILdZ2Qjc+xJyqRv? z!vItcYi;oQTHS?VI=Xaz?tU>XFtVtg+rq>i1kusbx}%1!HEULVZG;eg*tAM8cyu2W zIsOZVl;=+;YgOXE+6nTMGdy4>km=lsj?5!lh=lmUR4A^5&>E(57{$VPs8GrXDyXtFr z>9SxcB%cQz2|H93NB3jT7mZLfuI7!*$4=UANtreMT~&2MHknUKx zhQdBc+vp%w%Sfoy99wJ!l#Z|ImXV={VI)@vb;lwwl&bS)s=o3J)6vGYRYT?pYs)U0 zJZIR1#N4KrwqvXMV+npJ+hQ5(O1k~{dV0pzY@#`N*xf$yalE986&Vp=%c7f zvv=)~G9oVw=hVT%0f*vlHC7N|vCd!^CmGl6NAll&Y@1b2`LBAaO}3cZMq?D?n@MN6 zD5e}bAsSmd-27NFk7?SFvpWlaDfaCW`y00T z<7?Iw;ZaY9#9nwc92{CkU`bZpHubJ64u;1f7y_1$iw7VCGh8|94#=){8wNDjA1Hbv zm-=aYe3V`z&l?QP=}84vR@2fM?$E;RtS3BY#MU=a4|#M+TVd@YY|WJ!N~vma$nG6< zajHL6Pf~S4yvJtAb-WQE{}c_(=JSmJ z)5Wo)gxv%Y^Xh^!=|*P6+5E${Uk~mt!}1R*#Tn~|cb+i$5T4|XcfXBeg&4$XOnF;& z-*qk+(llxQO%RpH@*Sku&y-Q-eRcSo@XOBNDyjvpSa$hV9brl`6&(DALanz208lh< z9K6ScGwh44{ZeSz)3fa198q~~O019_nstfqZG&bL4-yVe7Tj=Du3(m@+O}!plrfI- z3JU?L=cqf}GxBomK~QZS(kmVx$8$gIv*pt*c0&(qkppucb6^31*#VMxYZFlYe(Cm}IZL zG}o3@EFadati@whxrgKHF9pL2da{;_jAfD@^?HSt`shLR;1w(<&4Gg4n12_R8n_gt zM^$&f{f>@(W&2h`ShRf7O*K=haQMa3VRWjr_`y9eZOW=$yD%z-+Fl+=2^%yxgX@yr ztX@9^@XB%id>$p3LPe1ON0sCJJRHxVOZGJ(6?cEVLP#kGoH>gvJO+76rm>IzM1~|R z)g#Us^R}a3x&M#r1~*ZqQ>8(I3ezllw4jwUZqO#y=AfFR$}l;Y4#5)ets8s4EGQ6g zpkGu-^e4(A=P}ML_bw{kL3r*aD0OYoVg4i{j;%XlSBqTbJCkh3Pisk|vYYjL1TYJ0 z19C@6Ub}{KVSw4=AS*$fVUX}vow;THth313P)+FSU!BcrErLSyM zH$H~R*6wd3lwgTC!7NeYta5=^%E|y~23}XYNdB?DFPuNiq3m-Sk)I2%7NWYq9O@Q2 z!3p1>`l{d@uzjkNlpyoK+oTXP(^*E6xyo}&l6hznF;?OrHf5BksmQXnwz4SW^6Z?P znC(k*Rpk0*)dy=nTXp$u@@W;z;T(5yD*CMA+vCT%Ive^XZ`1ci=Fhb60VscQ0{NFz%hZE$#*sI>Z*oC1HY#AgX@U z6D#!1xWM^6O?zbVV5SUO8RI4?gf+#RQEmoYFn23NmM;)9n+KHN`O;c&?b55Zzu~z_ zZC%@~O7uh#3&mhsEq0x#?O4;K7DL!{l<0Q3}*0+ydHCDU3n3ZZi1#~}w_ zDGA7(18kzb$rz_sc*IggxWua$fvk&Az#Uk@JPXQ6e?ufcOV+`0VITB82>60DS?EZm zcv|Q*s6n^Pa&;6@rN>NAn_TLW)II^b^<*>aoHHI|_Bok}(JN2BXy zu8GTw1u^C^WCzAsavR#vvphm_Y4;m@<$bo+VO)N6ORM1Ke27}v>OT)cL!%Jc=0WS8 zpTl*3WYQzxhKVA?gM44%&^^aW1n`hnw0I8)?i4>T@N-v*MgH_9h! zZ0;wP?uD}BbLun}s{3l7T`)t49c2SNJrI82O|4-hXfSZ{3su?A0GdKmu}?n~MY@k|!EEr}w1&kU zC%hniOSg{48x&`93>>xV!=?hS?=o0u=j6pvS>0P|Ye zz3{c)4;=~b4+56E?1LI+{*=8O1MBhBc2`!~SIytRsVcEVG;T?089P4ctw3=O_Im*@ zsf7Ujt%T&iYNm90Y>C3zC1|C-4GnlKP zx-$T#Io7KOBCg~gqN+ELPvRzt+`+CR)#^f|b3tj)gutjBjM6@QW^{P{afgdPiEjE? zcFRnq^DQo&kHCOi{KLZXJ4OSy=PJ?$PMvKgfISd`2)a`HegqA=X0#@+RGq}c9hSZD zpMF_I6ggARKMqBDGcC`&KV;TbmQF9BN`+8VI$oiaj}Pj zDV~_?lf4cgMV0Y994jdR$OI(gcT`*JzN!C1%3JCHgzF3>000gd0D$8E+bM6Zu13Ft zgi9Klwpgu*KJalreG35o%k{?UE=U{x@Prc%g$skM)FeI-Q2yJ+#Dt!I+O#HYGQXdv zZwp9NQ^|X>78>EpQ>A>Euzei&$~LgDW^(^D+?B-&65oVyn}FnKk#s*+f*?pCJZc- z#|1FD{m?H7cIlHUM|3Sox*TRio|Uk7%RZ^ekGTV0a>ug=AiVBsg2D!X&eQtR`2(r$?+qw#O0lxs2WF$7;zv%C_!6LV zE(40J4v=7qu^WdmM4)vh3BQ3$mw_Q1#!x~cu>exYNJ(LOR>jG&0vUxOh6zVdt7D)z z1Bivfd;&4p)r5@HzPXzWSSEbVSxtJ(7>NUym!!?vHoc&V7nzof&3a zXk#ou@3)|-3#8C16UHM@u9Tt{ z8la~Z*4dJLThFDimHxLNK_G!{x~IyW4KeBtJg_)-AghTsa%?%sFd#|`c!Ql&2)H{W z+{t06(#oUAABYzp`5db2I_iQ!PxUb8%J}z5Tujf`8(^>cSe`}=({~&m&%Gmgb_1j7 z__VW|^zHTgB}0Lno!A$rtNaH>44~ty+4V0UzC;gWOFQDH*spW$(`A=pSEQ%Uz^0+i z;r&#vwx9!=m)Bwi&xgw!WgsC0+#7VIRdTUBNOeJ6`rHGg-5}0xT)qpHrJu;0*aSan zmhmwxewi#Y5I)$=8#%oEw4BIKUG)qvlDxbfI(z)akn;)VR|TSWFz`d$rhhq3fC>wp zPcEFg+V#A)HzsNj1QBhEA4ZFdZ6u7LCti&Z00%>h$!I4E%WXp}(C3WY*L%Vuhp@^L zh25hXVIHbKoS(BGh}6c)l5;9X-ihz5`l~NVRqb^B7Z9)Hk&22GK~LHoNIz02<(`mL zJwDAu-MV%!y%I4Buol^VC$7sZ*1Hnk`CKKlTv@b!FvAdd$hMHMWB{dLF{lwRl@3IM zH&{>BFhM4b_Hz@sK-OhzQR|-F@YE7YJXM2}DkV=+IT(F!spiQ3Zgv`1aG%ryvJG)Ym6A2SwLtwilld?=wI z19b7I0`9p|hk%B?^x~!#PPiYox@%t2*n<`M(h~61h){~bGVMGB?3l2@Ibz~`sGhxY zNS-^N(?)iqj+nMFbKV<1qn_g+Xj$UffPzQD0Cl<%#pPt#8V*o7H+vQk$z0MzeXk3W zA#zt{rlRm~$&by<+TsD;zvlzoqFA@B| zx4X@7geO};fSW>50cmiAd3Q-XqvK38*$kP=&e0i(miUOPe|N2iZ&9yjEBx^E0US~* z9vD5!A?$rT)-N7q{{Btg+HC{f+#*EFp12y;_jM zTgA_;SB+D`^c3L0qX!$&%0U@p!A9k!-|HJubc``|Q|UCUzNS)e46=#aGVwFyy#-r? z4siFZX|WP~sFjM1OG5%*J1W+1sjxrpjm_(74Mw#hrw(ueRbN-0!v0| zT#HoAx@OBl8QJP#+o@Sqg+^{0nF$iC@>WAAqyG+piZTBI%r6cwTc8}4NY9V`rhi5p z1V3*h2Y`)=>Mu{OmtDpD4Dh|)ELB#v0Ryp$YhZf8r;aL&W7q^+Qq+!mOup1#=bf8^ zWrGzhQxRMG_o!Jw7FDX{5Z2q9Nt@7PHPw+U>*Q~NL~7^n9)McUOar34xz_Q!zy|G7 z(|P0cL;(_M3Ne0!Y#6c3$+Bu_hbwjfUE1d7y0~=m!!OrKw!ThV60N3aKAL7|4&h<|0>;r|_ zh+AGT!D|DrvX{`Ooar+v8J?H>S2d&Sd*Oz^IS21Kfmvad2i1qCcqc$=6p7+i{zeT5 zbC~4$owu(eO(YYyv7P)~nefM~b@l{~_Fg+{*2LpXZH_3@3qfb143n(Zb%Dd`)qih} zV|r_IyVyx9)>UDw5ALrKLu%^S5>_jzirW!t%lSS1aSzcGi(@JBCY=R_J2F`D$Na2(blY>boq2WAJ z*)67MWH;qHmg8|Ar>IgA9CG5U57#cETo(fGS6JfUOqOc<$`jJI@VL>0$c_#{EQZIq zLv!J%3s*)&SFvF7E%R&6VQ!tHw*gl~qT+^XMOqevX-cRns4k4GIoMh_l4C~(W;BD= z+*5rSXR4Fsg2$`c`}?d4zJ7ynO6yY6uAK1ijy<9qZ1;7&X|v2_Rgtt<1vyhU-Dh~T zsHR=-$-mBOih&-ISG*;4l8O_kjHbn6>hWDIzj(vXQx3@YFd8P^4xQ(z;-S_X)w`*4 z+aW2c$Kr?Y$R*b&dmmJtyfwax*%ksRD(Id+rcMGQJ-oeRKSVRyd?38-3!E_prsaec zBHvAjzglITJ0Cx!DV#Iw7vJF1McHQFus;$y#cc@(a>#vXd!K1aG@z4m#~ku}9?(%0 zJ2HE}BD05x7&f$~mAjU!6To(Dz)tV}${)zQPXGm@u*qrEpEV!~Kh8ya+vh_6 zeBa_0Ei!hxC;UDqsu3jTd{04Xm$z&*f3?e~}Qzg`5tcZy0fOpKz;^lZ9+9c(R( z4V{#Xt?jJzos8+MZH=6*jOqTfIRwCTql6MuRLzPYC;-4aG5`R>|4MU5Cu=4~6J|Fz zT|-+N6I!z)H7UmpR)ii?(jWa19;Nx!24PPFG9G4Jk(eb)SyCnLZhL$n=D9ckV84XT zvDljc5EAu2r-Ksk*3R)kpwD+#fuDAp7d+lTvmg1nl0;q7Zo>e4H%Xs~L&xk{-5ij# za;lZ&%#S#VUE+lp6OmEqC9%z8ash*qh7<`tP`it9^F<1PT^QW~kp-h}(lDt&CQ*kr z69E*~sWu^B58tyi3QCq!;HF}|f8-IJU6Ek|`Xo*w8bOK`c~!}QER%LpDweIaZ+;B> z5De4mTq=H^_Qg?MBX&x_IPK8_`foAtb+}a$j3IIo0!BJqAZZ(5D!MU|7o=&>uWZXR zinRh$!qpLn0DOszq|HS0k&`IsrH?SBC1D1I`?3TG<$<(z2?NiJn0w$xP{5i6$^I%} z=4s_~A^u5(tg+FIFxCjmDsVWUlfR>$Gh`cpJv;loO zSg`wi99tk8;c**6q(w&$A6^6M7Lz_eyfF7)4QHpS9Orz`h+TR^l0!HIDKJyKE^J*% zokJNnv$o8wx;Hksk{3R$oa8x$w)n(HxZe~tW=d1Pa7-C1j!uPS9LYjfCSw#~6vwCs zRVcPV^2AZO!o;?EPn!J|u(?bf8mB9K*x;u9+Rt(`wlZ#0O*0ZM)j6~7FIF7|?(OuF zu26R!GVYo`N<}!-+JFGCyo3__W35$@Dp@mh%S6w$5A=g<@|6EwsG1OhSrpu$`}T6&CO*)$3X{ zGd<;daWLH|fbcMF2&ajrOcUSs%eu~bY!&02{lmBL27J~3Ak-Ei8&35H^bv6jpb0tv zdM>u#ZWlCSWKDRg+Q<6b>>F>z&snb zcd~XBUbtueW;)!}+((X4nQHYX$rv|WlcpDdY6VZ74@pdpx@Hw#&5oLT|M?Tqc~`YI zUvoEM6UA231@9)JjQ1Y{7@9vh!lnIV2g7SF7~hqD9MG-QM%J}_U0+PjD0{EgQW1|#HaT9qg-ye(~c8C4cH=hvJ+!Trnq zEyP!eAqwyC8t*<;#)Jz@L!EM{Ic+WPv2Znl*2HJgyr2@^-ZUgL6tXk-1Lmp{AfR9l<)@Zo!<00 zqiF~1K7CAX_(D7@YFJ;pm4AzO%dczZ*41vlMJ8Z~HsCtK+ov@}&@dTq8$&FhnUs?# zBKbP7f>WR5p^H8AD;K`&I1v?ALc8Zi8Mo9VAsE#=RJ5o7)k?T!EoEY~ zy;X@<6H=!%9DBwq$safzj9o`Fs%w=jGQG`MZQae4)Va#jC{PlJsgEmOGjHv1e*QHh zSG5=VIa{>OU8p5%pSIoT<~PP=xq#p9`uz0t zRjk&vilGKStiCrKggO?g_Ip4)-$?k`sFQd0uEvK$deN_Qj$S_pZPB>BU~5eDc3IkM zeuMotgPas@qUN@ma~BQ_0I&oP06_P@XOPW*tJ|hj$DuB$81IVjQdZNiW(&%HyiLjY^_&o46OYN*xpI4NuDy6)WMwm8{Sph|VjF_Q@7U7103vm zq8q6b3Yr8b(2Jy`NTHTRGi_x#@3_oJ5|K%_y8g(VFeP#4 zOGIj%qz6Nu2Sfa+QML&dUZ6>-9brZV>#C5h4Bj>COZg-qOre$lxDlGf76E2RK-7`9jduKn;3VLmhA!oY;U2=RE@lUXPS zpJ*U;?)Kio;fzNcAO%T-0$R(gpzsk~tlo~oCKbbhlZ^#Z1pzYpzANPxXD~^AVEN$?Za=`h|5zgX^%7sS z9me}lp;6m78MMi37#9Mh;8W=7X=zcwi z$K+LIKKWB6KT7gu-;!Gs#jSCC`)Ha8MIVZC&V0cfty)9-~Hh7-risCQCwC4B$CE!mvLjU&ZP8iW>5_Rp78JF+ZO)3&hzPPN?&_C zPHhw!ug^jS2-QuT?r9pMHXm;{05;5H<}0;l_k$C zkJeL%;#T9m&opE{U8jEy4wWKHL^1E+&X((rch5!L4j(tb>CF>!)GfmT=r3PFR^tM>(R!5>S?z((4Zpt#)R+vpQ3~mGv1#~rhqm(}_dG`Ag zZcgrrI;<(pK{&frB!AcIu`iaZ?K6{$Xs9gP8fA~!ferCygApF>N-2EPJ}{X6O3&snf~K}8;o}QrgZG5jJKXtudYPTOdspHl`VI1*UnBqkwcCFmHxT|${fymzi6j1N z-~a%yrtJ9N#T}IYOYLQZrN~uSDE=?~V0--c<6!;Y>POhvz}ZyjHwZB|{jYsO091t- zsYz0FfEE3sjR^YxZcqI`=k}jt`|tYvFZ0&@uMw4sh>{zvk%8%d1U}6v*8kyWM|R}a zUE5N(u%}OPuH1Ft}x&{2P5nvIM*lDgxcSy`}@rwwh8;zp8-+%TWvK`G? z_oml&S)ztZ2(LA&cr5MDrHkV`@@j+&MGKefPAY>>X!(3CSog@@{SVq#`mn0{_lv>h z5XVPI-toJ$)`(4570pXZm;{(ea?P0+5CJ-%gQ|~0mceR5NDVPR5c!DBi$gCLe7)dX zNUHUs$phh$2^GmhBh(fyp7ap$(GP1Hp}eIMYU!P~sdvCeqL)doNzzV3@-93mH81G< z+}nT_()#xKFAv5ciLdr7W`AUl(;1|B&fQ`2foI>Xn0wsOAAS1;E;uM$h-p@GdIQeZ z(jwhSeY^q=RFFM8iAbc9`D|>Z<^vo8)#9ErEbraubxCac*z`P8n4d1j3ftVz9o62$ zY}I(fM%g<*w4-jsXx5hzfFE<`LfVOdS3~@RI0o=GCF+QI2>2mqmPx7GC^!VX!F*8E7z$cCH}q){52tJixtw_}cnGqM~tO%g@1 zeB=^2t(YsBQG~~Y%d~>b5DDX)K$D|EG5B&(h?1j0JJ@PPC<0qO!abr2!!d_Qia;)& zMQGaL@T}F$h#kxQuXqCEtx6SXRYOKtY(@C%&r*=<6ZMl63%-oE4wII}w2`v3O5)mB znuc;$Q)FX>X7Hs>mU1byg;5)OrLeKeoGLB~!flG!js+m?etgg6H_(3q{(l6;|D0Rl ze+CLAeFsxxCtZgB9~J*UD*nHYimoUVwcWbW%=Q0pJAeQH{Qq0-N5sY0#!120(AL4o z*g?_B*?`v3(8WkQuHR;W9wy{Qyelx(Gr^@(S{XVt9P5&vxM?G)I7FpD7A3SKws$r{ z@*mm8-OG>5_|>YmKL1R0q2wVYlAn?G)_gHyt6j>CL8p4{a^-wSjcX9HPY5cJhu(&s zsVqFJV!L0Fs8*C#IB8JNEa!09ex}2Bfo>!9%1-E){l1YDHjKJ70@@+3Oz0+73?QCBBfpYyxJ8 z$f~3AMzZ0xS=E*&ZCzMo!R*=Xb@<|QA*T95;teAc9ThTUgU2ikGc-OVx?QR}AHMqV%EbpXm z?-qBjKF+OPpSK^iKaVwU*3VB%4<6rcY`wZXv_3yi2j>@+KV4tv#~-CjJ7_m6zHaI| zkWjHRy&q5RZy&Y3>a~2|*YEEOrE)u7ggaF^yjlmu0xQ06*Bh-jzUthQzMWo4gWGgH zJ%~rXFKzD!pZa&7_TN7F553ymxwR-{cr0H(Z?_GfPno*8H$6RH=arR}SlX9jQ#V(( zZ)~T>9lkOsAGJfDHg`@RnLD4y=SL&OT|UO>-@d9p^540YKfP+(y4~7e)?en|O>OP0 zLrc{=d|%qk=T`>ZsM@z)RJ7rdJJY!N$ypIdUi9;hha%$=TUytKJ1 zat}}EXQdW*pRrHp2XeMM-ePt_iI2Y0)iM-!~|?B?}H{|4h^lgzG_|wFwn=g zH5-;Kvz>1zz<1- z$LH1EnGYyc-J$p!>^=>NE!H=ucIU?-c=$|0IP4Q`(xf9)#tXxW@ntb*XGhAb=VxT; zr#s=^D{77}!C;VCku)voC!sPcT*5hch;E1%dXV-Ac){}No>+}8 zMe$70R8&(Ck4J1gjPCe7WAp`B&hRM$v@ z??;ted#X?{9m`JBH~bnNx^3=l8XuHyBFvpmgLjikZHq~dD>m=@tIvmXW9<#DT+^GC z318ZZp&2?nCGZ`sUuydC0fE^MpQkP@Dxnd2w_dkTd};{Fq^vh{$8Q%tv?r+WeBafH znFb-;pn^Xv>A9>Iokv7PbT!|UHCx{)5Xg}}3S^mGGh1CV*2Vc|TUyD5-jVhJkA1EVK59O%#xzlAr0+66+lMHXPaaQp znfh}o51qyqXuznzyXUS;nfE>vkFS^J47L;yotH8sfR(;YJSyFP8s#ZJMPh$OG$+Fk zdp6W4{@DcA7r|R7G?6ufgPp`UuwRtQdK_mVN{&V)M->M(B9{gwBioNt5YSy2NhN6hqo2(F-^C%WrlOPC6jh3DWNBt6W*XW z-8Hb#9`2#6PKH!4NcsC+k~RdH|G87 zJ`EmCUi)j)_6CVEs2`t@-b^)WO+Zc&x36Y7K{LNpwj;N82zxHm5NiB9?8~Cj_jayH zK1WP5kg%3!3hsQ}k`<%dLdv!y&|JBfVoZo_4F!mQbZ&gV6m({i%}F$R=J(+auF=Ri z&~h1xp>{olE|FDxBYFyX7OOf{GgU5q_&RCofrKfU@Vx1hh#L}vvxp~iT@MtE!-gO7>{I45EUz~uh&jc&RBTN%SIYr z58o(hd5y6Z8?vCUpjL3MDkEFmo}4%sErH8`!N9>ox`L% zRW=(AmPmeErw?ZzJ2m!m5N*PmqjjJrmv@l;o8z;VO|%bIJnm(k*M%*xR)h(PkVvva zSMZ$;S`5|6#UP=xH=wC7K?|IeTHZ~DkYvQ~Svk1^Ha_tusTM5}n94R83`lh_rN=7;1lJd;E(7{hQ>=9n@;OH$Nwn z!TqMqm?~-q!D4rZy!)T{xs)vQc$=Z>dqP4Y!cvhUAIK8uL{7E>#sUWg%Y-_Z&M$t_ z|AV%>fQ{Sv7eyb&hM5~?=7!TGO*Witn3=g@W@cu_hMAd}nVFf>v^V|1|C}q`cl30h zo;31)$M&peXV)wFa^0X&Sjzo~w}2x_lPdAblR1zbbDJL>zDe{#${ti;{mTz>U5(qO-TAK|;d_lKA!Gu$?{R zdAD>W_+c0O?)+Rt@;LIYU_j%M7^tNdl*A)1lR;Yd#H#)cLCbGPog6^z*>D;JWWZhJ zeElqAnPDB{t7zi)?LFsvcCR-EVS6MpSqAEp?xri#pZ6Q&pKoh7ogMAN;}AWJA_k)) zL`7tx#V@sYO4^r#hD#cs1aI%n(~(r;c-7-j;^w}x5KOO`&9B`^t0*!yr52rb7yM~g z!aIoyi50P@U!UXgJ}Sq}O|$XlFZIs{`(D){{cm`M#PU&Nl*IV_*$#o>e;OIk^keql z(0P6B-|(q!>+dhh9@v`w&hb|{#e7tRK_|J03lU%zc%pv|0lERtM+*oZ=vqP#EX#-- zaQ|s`A?8Ljc~?Xr;{T^zoFYmq)T>&>2>J)NJ&4O#k*7WwLx7HVW4BsH2kh zv7tSzA1z(iPp}e%UFptczzAfL0m*0#U3Dy2F59be-{914rTjVGnGI8&@@c~10`v_3 zzBuWK94Z8XajKfx?mZQc2^!nvTA3lgE2!c^7$v8iStm1(Dgpl7jRS-l*X=}HQg^eb<-$+N8 zC7F-fQGTn0xeGy40)Gj|DSwG4rxRT>*^{sDxXMeJuir=lO9}Y?yh>Fh+LYaY*_!^PcriJM) zlLbLzqyeD=ye2-$1?magQOeEe59KV0mL7~hfqd6grEM}6xXA2zy;H!dcF;4n?&eMb zK8`y)8uSI@Go&Wfi9A48vIGihrq|COE*P>E8BREZV|#du?i3F$AaW_q);1&I-torWjxLcSllGX+ls?XB_xk^mN?gnb4f1PBu{mgxYS~KU`TaM9`BHx zY?s8`B$vF3+k7VbD-~=$f28`^seH0qhR_a4)T_ApHnKa0kq*hCO>)+&xEAM;ROgZ2 zHp3IG+FJ%S_hd^CNqZZQztb(>^LnSj6zFmDy}3KV=J7T-X>w@IN;2_NG(-MvWe`?xC$o`dTgKCVLU^J?hg!PjWrOEVXL4zS zc-pnXifFk5+OU&Q_`gifV5|gnOGeRM~T4*Lv>u z%Z*}-ehR0K*A-qxsqs8^)fub1aF}{i=fA+_Rym6p<)-L>)(?%Y0|KB<6mv56H18p? zOz5QB2tjx@!P^VWJK^TADKi@>p*NaJkuJ=>&T4$EVTo%f!pDpS&&rIt5_UD3 zzv}#1?LrvC*L$4DU13ISq%z9!w938R&Y7Qho5r3u*uLiOwCJ+6@|c}zvgvHCu8!|w z@+0|N^YLTsgorkgG(vB7^Q2iZ-1DOOTYaSDdw=bmadBi)>QRMaIR#5sM?}8yce&P9 zGMIMjt2KNt^{;S@it3UEm&NS1bHF$m`TG;fpy*jultR}7JH7K@IJ_-K1CIr>rP>wx z0ctb$yo0u-u_O}>ueDkfKVg8~+BfpVI65qQ%}E_*cf~Y7&8$MhI+BYKIiiK5Hv?bk zY5RUAx24AA(C8RpXwzE~DV4duE;d_;N)KkAYADoFs`dFgRveGOz>AYDJ| z6j&cnvj59;?OH)=C=WfJ0bF4!H|TOkNNU`JXT2oNOq=X{a#b=9K>n5>jfB)9KhQ!vs%=CJ&` zx(o)!%u2M`qvW&l{ZL83$IfP^#r6_~fJXwJl8^zF>}1@{{jZRRfe)3{BOC=KwVYrs zX6AzA;w&Kp->P)vQu^sY6F;j#-+{SvGQaDy4}1Lpl{0IgQf?!{-dhY(L~+81KRccI zayQND&whvrs`~5VlOg$cmk}0{q?Z6R5h{y>_du=*P;+2*viZYAV3CP_CKVw3Az>5k zGsAQolW@UXmXV)~4VHg3iV?h`St?8UBU{01n0oBU2G;8Ck9%{D(#B(>-lDMtE8gyg zVae3$05eh-i~clvELwGnmRQLXX~KBKkbp7FdEntFhAlPS4uNyHvQ1^$W0;P92OYgh z4_;vl7o(DUiYn;REnG!E`$=%lyQ3?K%K0p3AH+c;87U7SsqGoV1tqR3-ax(5Nx7uK zKXMcEDdZMNAR>_-Lte#Um$$;!_PLQQvja`}>u@ut2usTLzES z(6R~++&6#MoECnu1~jBg7jrG#YPlKXU7X0k$}~Sdl*BG%p*FZn@5IyMoNTbD@V{{G zaWXsj`?lzbPVTIe5I`oZ%BV|sVDGE0+jm#=pj#szHqLV3OxZ0QDW&2oxMK;UlD%ss z4P6UN(j|8YPC!`{VihRYSj>sBxwO%bDko`o=4-^By#9dGU0*~Zof=w9PI(+_U;%;9KMuwU{o(1?0W|LvvjrOH2f zwN;LVw1((XGfjdB{qqL#NhbILT+7+cM=V!(Fb9m_(zo4*RM%cO*qw=yFW8+6gJTri zm$X_ZOkN$REfemB_@t}-XF+ofV}bI$IrwJQp&457gnQk;^dA4R2e^&0*!EHGufj}; zS$%vN0B$%8TZl(%7O}4R2kbP6FE?OsMj!Km!*6IE?L&TX?{%TRlP@XAmm3jFo!f>v z(`p{(JIi2*%8XnqYU-O-hI&Q{KN@)bgxNggtBc#z-drLG?-4-Hc>7%2*gm}X{1G)L zd@Q)U#=?0!%m0m{wr)wHC0B0qh6Ap_=xveYJAa6FgCTvoPfA8P-Z1hFw%YZ@bXlgz zs$g^^WCJGUEIwkkkNmiVH|!QlxZBDtYc`$ zXpG*g8gbdm*G6NNb4eHPZM*T2fRPF4z7n2%@Sge9`N&(CwYDm6UlOUqk#poHRs)E- z@GkWCjSWIv?6F!yS{+s_@?1+_Ybm{Aj_zOSMnC-doD;K}!BE({&raEDJo@Iu-V|4G zx>(-0*8tiwb1L)Z*yPZ8+^}jny!W8pn)Pt#xaB8?Sr=KMa&K$g$Tw2q0$X`N1pUx= znp_9rXbk(H)|(}xKU=$n#Wh~Zla}l>csPl(wjws3&UQAruHS{Zq3GSloZ>UluUiMP zE?9o)Y*iBTs5i3|^&Ej|16#m~SnCpA@Ov2Y81ba{!6t{n zx{1cXQOn=l{27xh$&6Pnd_;$gfo}W}aPxP1z#KLtOO)1(6yAi9qkT~-VXQ=O7hi?z z40=BWrikP$^iM@#g}T@nRFL2rK%%iR)0uEZINsc%V5NIbiUJJr( z9c`iqny8#bun#KZ12EP3spO~=w&?*cmw@X z&zplz+;3kM-bTkg*`tE;Gp;J-y#@}hmmCPk5UAhC=Qz68UdUi#85?*oM!CShd|Z)> z-3Jd9tN5MCj<++sDI+i|BgFL#g9}hN&@r+vH|TZIC(Y+EK6(irF0YP_=CY?-(Paob zv&=F|oHqkEmV%=qgbh!N+Sa1vt`-UhlX#@x21ZM_yjW{P9t0NW62Xg4k<__f{Sj|i zoT?(~z!aQtz>v7s7TP?-H< zU-)Ua1KGD}we;1%V1O_)S<~St`3f;I(%AJ74g>#U0WLhhn^afI*`=Y^#aH{I%abVw zAUuq@M6gQvGvmR*J;S|uW<1vM0^A;?TLaiPw*-@g92MFKxO?+Jd0($QK^m7&G`8fp zVvv<=y(I~zpJ*KU#JajkZDsNej_yrSUKGpJqQP+;Dd7pZ5z_Q%1Sf(99`v+z!+p{a z)(AirESE1qN{stU>4531RaA;j#@c z=kL-_{eMxVUHEtIhqm;UjiTACHL&;S!6qJUukgmEHjfX%PocYWh<`eK89KPTJ#rry zI4sZ*^sMlDc@}!qIx5%L-}rfyjpf|x^Rh9K)uF@qn_FiMHGNJx_sZ*eE<4%zOvf5l z#?{SXBg;9h#>1lxvq^&F;>!AMi;-|?BL28w<^8sA&!4NUP-4<3_w3#Q(NiX3H>=T8HvXGhD!~Zs_`ftm%op~@Bd147 zF>{wa5u=;q%?o^E9%-C8wb5}saWfy z;|SnTIP(gw3bPQ27^0%QydtaN&J|EUI-mrJk3ts|j7BKjYNiyFijlKs8%Wbuv`8Yc zWgy14&ugy098xol1T&4~XMA`dVf+a)#oQk+JYh~n&|?YzgM_&8bU4!+G01m$j;YKq)(X}fbT4=aP zny(o7+_E%0LHNaeGPU_2P(fF2zuO0Wd)70iMus7m1+*Ll%r5-{&>L zh#H4g&@?fVfb09nox%2&7x>|r?tdKf>)(!9FB@c+-#K+>xQv4=0gWu7lTGf*&2pP) z4b{7RL80;ilShlIl?HjmCKvgy6bFt11Vpi4-&}5ftPi$;GknhckXlmC zcynvvjURZ4SSUDFBcUiK%Ih?YBrGKM>LM&`)d>IKm$@`*l3o+hKRG(uy73OIKbgVA zr}d1OH!&#`;gu$WdM#;llBMtn%wGK;pj=hs2QfuPY*h{sF^3 z{ASP87(etMFbkD+`v%N{`~bDg=Xz(61GRtf(&JyebSHd``ruPugg=t$p7r)u29oB^ zkg75NA7ed`v;21OkDBH#M~(hllbTGAsXvtYmzCx&%MfmDqsqHt{-MuXzOD4=KW__4 zQ)ejdf408#_^V+|=z!KU{vXX0Q**TjcGf1p%=*f1&G6}ThKG0rhVZsz6o31gMl)dZ(xW4>cN4LHdKEhm6%ni8t5`e)cOr{+`q1wE5Gm+-C)@@nkFkY$ z3#+2iFHB}1_0DhdP|#3loax~Frxl|BPn-W`n6x(k;Y|1c;>;_A|Fr%^DcirCN$~Ku zP=3hf`+C!Vu=%L-Z~L4t5&8dDEB~8;?w5>@baM_%T^@AFQYA<0MFos}Iw9m1pg^+) ziVF+`0zCNsgp(UA-y5&b>$3pN;ElIChl+gHdyuy08}+l;ds3?#u0)ht z823@+bC<$8{1>j=TdcVH*;G0`?rKjCLeaH1hA;_f$<6D8qm1U#|5OyF_P&AytUz_qs)R%Qq?CF}J)4=)>}o-zOiO8Y`s-f{v;=Zn zOZYUZ&5CujGKr3I?n1Zw^X1i=Ni;qV+w#(5$QywsgOmdMM=GKg@Ez&G1l*<%xm&jzP^OnXW@pd6V4YDlXDS;xbb9@6-vMz2PeV}io zV6#Y(?rx>id}U-#ANO%f*9qlpUGiy@cB!jW%{k;Dycw&9|Km0WC(aWQvVWA9WmVHR zj&&%9<(qm7+cXeMH#dUE8yg+vl|`GSUy<6}hy4Zf1>*(l1)&nLGVn#zSZZf!Di@6Q zk^TC{v%Lj{YS0*qrxT5@Ax5jt@i@@RXH861UWM}o5?xc~rzvPf{{vg%wc36jbtajt9c4W=aMc;?YgVw*9Hrb7hLH1P=81~`Kf5J-_*PQg^L4w8BGKwx zP(f3Wz8QsgXp*G_e)urxl+2KGZad3qQ!G&upfMQ0Fql{Hw_L8qYB(WsT}_x4wi`#5 zFkd}pWwLKNH@=%3r9Ne*Ct*Twt^j0slKFE(ZP1QA6Ld*iQHK?`YI)mzY*Ep6DU>=bTtK)VXqX9JJY7G0$8D091MQn-s zg#;KZyVc51N3-!|lafa6%P100(<$=*QOkaN-M2CN|Cudo^3wQ#E=^AEOU8x- z&XB7_k6s_6lGzsd=M#ycn!ImMPqZzZcBTltTn4>;bn3BNqr1Z5Tsl3XD0We+Qi-0@ z0A(T&`5qATc7uh(UgH_KPeum(EIVLb5J+!JM@F1viV0JsPPpj%-YOwl2qU*5>wtv; zR&xKoodq1Fxv2W><9I#-KkRQm9SwKc7(&56>xG5!spMR!+#e3Sqpc9sqoljN+lv~6 z(X94rS+o%1J+3GH&$?>N!aB=E+W6q>I7}bF@9}uJad-=PQ9(fq+RlTokTrP%V&v^3 z!GNzkiIOx*A7zC^={jE9=dUSGuaJQf*}^Nos}f^T72pzgl@*wgX<(9V_oUKBBfC| ztQbd!kQM>TjAk7c#52*A)d@IaZnx-Lsb&j6muh4X$J6~B0rn*$n#OI0{B2q}6=@b*u!CF*T;fH6?yTug{bg}_dIC*&$@mhZwlDIaVi>t|l=D z@u|xBrH(EsZjWoS> z(nv_8=#c!@L^AiFg3;YvK_tc-UBSrwkf>%;A!_N#LsB@js6;B4%!e0JO{hhAxwPW6 zE@=3;{6#+LVV}8%R-CcxxTfI=@e3EyXHlJT5CSnvi>KGh%mmMG@jf&4FQP+7eD)or zmFVG}O~?e72i4FG{O@sXgu3hYH=947=5G6L?Yw>)cepG&y_1B6_C2__|7e=idlOvJ z!q1T}iTSvGR3c%K zukQ&mMW)kh0&^hwdyU~;`zJ6*7~pxW8^y&eXJ9!rK8$bz^MeQL0(lvX>HterW%;G_1_!m5JwOa;i^nn#J zt>cn)H1$>p&AQWi;E*}%Y3CsN=oS4fhSoR!j@{Pq9&59mEl_wR(44?47rU%gQLT2m ztE+Zr;8DcIn%sujxE_bsicc0i?f?yUH|&#ge$lPiKxFS|2T)S9hwr%9v6 zl^D6yNWLNHQMJR{S%RvbKHgk8|6qAvT;2${ggIY&;bb(c;MvEFb{LGKJbMsEIk>Dk zQ8~Dvn|~;AXO@B-`-(a^U~l z{~^F&3i|B8{8TVk-A`!(hmsEP<}xURhN(nAbNfzVl2L66rH;;~Cl6WzA-$aD%Wm)? zh2+}@5m~0hzuowJr;bA_OINh534e79Wlaylxk!?m(rcN#4~0ogfBGEAUDpmFN(ztH z!2#sWQilYpyE?_#aF)KUH!%|bXsuc~b4}Lyykla^Qd(su*+JTKPR+_>WasCK7&oy&?^1**IBdJiH`Zlj9YNuXTP8+ zQr=WL)XP_tIA`Yb-WHr1ekdVoXpCcCfqyR9O8Y(iS*N(I6huQ6zm$yjhdma293d#{ z(J}nZ93O#)drK?-C)n^#l@o6gp2DMKQH9;+O9n(NqX?eX9d?4pl2M8vzFq2Nt7QY`+MB!ZLn@|7HU!*O^A5fOLeW3B!1kTD*7@pN3oy(B6R zgVNJNJZV01YU{~mBk8>RMPbdV%$!$-|6_WrX!-BlVSXvF+&MPa)+A-nSuXDnD0kVq2Xn02K zN9(p*96Z{`?DOOb`zLq6;oOJ6Lo#cVtxNT>ikOY^gCHqUn4lozy;?X;3K$J050Fu&XaUm^p_f5y*$< zy@BMUA%t&#{eyb&AE;*n@kaw;J~U7d#p8nvNuK2c^o?MXI#z~BWd*R5vQO125`^8ph!bvo(!EC@lRfph6kS7P&rk?#+o*EUDlDvTDc zLfS8tZg;`O3uE8ZM;yukB9_*-81R%d);|iy(h!1tYl#@{XWTAn6~h~aeL!WrswUnf(*{$-KD)g z(jJIy!z$ikk$$^1MTBKTvx0D_@}xoFMAx>_%8h2&iQ2?h@vGCN>sQ~{?cw%-Y7XI==#W|@gQ1Qt7&Tp;Xr zgL;C&FU0vweYz0|I8{Bkn%Sq)i=iVS)O`(H^+5RXA$ElJqJJ@VoN@hxU%saCLzw>> z)2>5#8SD=Ylm8S}t6mYMe38$jO+~M?kkA%ty^Pe|lxFS2Q`aK|e$s{1E1QHAH(U#v zc$RA=v@0R<)`djc%&$&4DfBy82RD*X=}qeWg4Ed^kR@8r4>ksB_j^gl+lo%0EoDph z7a_;yCvTgdu$onR0S?Wz`qPRjUziE1h+(QlXTM4JSECgFejL7}4#<-VXNhn6ZI-jN zJZQ7HmZfh*L#zaA;;pB*tk^4cD4%*X=@yn;Lu}N?-cNz_Jb)m+)j6lATZAn?Fns3@ zNT>;x{~oLrNn&Y$Ch6XBNi8Di=oi`+LJ#vwWltSRSsB7Q6cPIXBbA-XP0Obl8B=-k z+Rrhy4ItVW_^M4iM7($HW!G1~3%Pwc2Q?YO|Mf>P3~v#7khUL}q<7F~#U+A*c!Pt5 z>YZ)lS^S6yDf#2b@6mB71v2?UeI>s`=ihJvT0fBjqgk4Np02V+tiXbHY7I71>uN#JU%Vy{`9Zx`EYD_>+>aB9I^f2rXNB zO0M)yy&%aT*K%s4<{0zb7i0W|(m~i@Zz?4whI>cr(_yo-3>@LLOmHBB{2FoiCvphT z#|xIvSYiNpeU>jt80*s;+q5BeCcWRs#?gD|V|Lox<_7pFl>;&yNRPGf=wR0A#6Eobe}!m*;9OeyO40!W&{D zBFv#+4-Zv*fwUaYiIs!m6I*>v+$aC=nS#6y0%PPVQ;XCdd|#`E1XntB)%mZ@`COAEs_M?-0LN#vn- z!x_B2;tiSB@y_h2V!&gNfDew6$6j{ENUY_@9g{@3{ z!XK-8KOAQHd9AYX%|&i2%PSh-+Euct()N$fcQrtM;?;C|ep#&I_iz&BP4sn!_Sbco zHr>o?61yuaB;-tk8XK}me79f|C_POFXNw(VitzPqysp;sFpH{0^0Hz3CcgLuuSET5 zAA;R+9yrtH8aRoufk+ahz8Y-?ckc+_6&0bFpq0WT;ZTy9-!yi^{T7V3G@O4&TM@4P zt)kxFVV2qLcR_Bl!vYiK#iFZ8N9UD!MZSZlUvrRKTG?5G*nGq5Vbhk__Dn;MyK!Nb z2VwfzmUw^BJ{24N!_zCZ`;Vre_(wEd`JMElTze0vkRj*jfib@xq!(F+x(?QM?+{^5 z!2jl=<7=aK=d-b1HK{`P?tya-rz^icq*@W2aQ4 zEe>fG?9bt^Lpz3PmZ&g4-ymKu7V*tIy4ccX)TmKkigL2&`2w4Z<(|;{fC^9Or&)2W z#R(hfaZ+v!{%Xtiv^rPt{EVJ<;FOwXek;jJ)^HqMfD480SSu%DLj?H))D{ar_Vb}e z&yvao&@Yk>N!w-|6nRa}3#>PxKbmdRiN1B$aqO!b7&=i>;Y_2s{9-wsiO1)M#fZgm%KidYK4-pHhA1MwKi&fv8Lk>4x3Q^|}9RCfg+(W_W znEK-^G*D*E4d5CbEcV|YWlRc1YE7{@lx_F#=U`Kp=o8VN-t|)!nm+V%((|+87m^2= zW*3^wNkHC{G^x~hu{EV56!re%u`Hvvj7X%6j(z=uFb)hPKOiH_D#4wskcu2Xtj8Ri zeq;|3V3bF0pRGxjFq{oOkkI!85~31L-v7fbdmTa~sD$&Ae@h#evm&2w&x3J_fNF0{ z#{Qfb&0qyQazqH1RYCrC%}G9#rqP(XCUIJ`gk=qQz_j?mh(NrH1isV=(73rr|Ck3B zv*`Qc-K@W6+U$W{{(85(*}gdT7n*2-Q2%cSGo*IUQZhbxzWq@fCD(NRo6&VV4iX|9 zHBiqyiW1zSN_=FF!{xEm+ahom(`We`h5(b@8B6AS;WvxyY&*GHJ7xZNK;8D*{<$8; z(eyVnEW2jI*c>*`M@P>M#aaps8`^q)4a18S)Qwk$IhO0`JHfGrN`~lI+a~Nfn$Loou7Mj8rQUXVE^B^) zJE(CcVq2@5A#Ux_7dhJ}xJb&M@YS^n$i^x@Rnsgt7!FQ`|8= z*-yXnOQSt)2DVXp_dF-c>H7X!R5wrY$GdwRc>unnoSB`iK%98+2&oHfxtR~}1E^_( z#zLw>Y1Glg<%j*Js8(_wzCUwtr*_tUrIr%Kh|pvys=?ge+`OLD=rKPN)W??MfWJQ334c z(ga*Ty2ES}2*750FzM+*{1^o;;!~ZoM2UKdAyh|l@W+(Zr zSG@rc8iD5vjCKkr<0$S0~E z?gGIs4JTuSqHq^6;cg=Z)+V8rCCxh~@a5E2Y(!s?TX5&bwRYAb0dq!`2Fect0H?2` z{Bi?{Ibq~MfK&4^Z8@tvfU3L$cTZgFWi6%Z6XtRUdR+%Rw@`d5Y8|7gjN>$Z>PIZ| z5nuD6vd#5uZ6PTr<<1KKjpr^;KlaRAN=kzIG? zjWRr4gde&C69*7Ktd%0Ue>H5wnHE0U_bN5HLBT$GTE0B|ugVU2-^db8g%Tb4KY7K7HX3)BrnD$%OivEn zXkB34<@0*!F#PMo8~0bwDnXKWmYpj1iI>xG(i;D@T7yic@RW!1ufs9K4ci^v5bA8U zS3q+U|Im2PTkX_3v~q8-qRWg8tc{ZX|cus@r7!5N=dE)kI`dlZ;l` zs>GzcKp0!D{e&_C-$`m>&)&K)^!wF$zkPqry)sC_Gj(p{PUq%bYNq(@Yu%eMFShjH zx6V3)MmVRctfKv^>+P;>r@-IUSHD62_v<*#kRt(HWDpP{8xRog|I6#RKLaVaTxe-H ztTm!~O;t@ddx{(DZ+J-T_LYz-+UJ#`n~AJEoR|)NjgRRMYWnJzw65cAOAd;BTjN<0 zfOJv+sP7Ew0Z*3%k6a$P<>b5N0wQrLx^t8-Q|CDkl8e@&-Tcerdq?w^UoP|Fxdg3^ zM1k9P^4J9IUS}Q5#uE2fwz}X-NOR#@r=I+)g4jCs>T4H`EqrETBdrToO*|EABg^(2 zpR1!gkel{>@}XwCVDfF8KxUVnKoX-#hk_u)r0}}>x|}DpP6;12+s)WMl{tT%d2F4C znu${rIis!Cin;fCIY<_B+SBv$&-L7LvFNn;iOAcfCrbO#pH{a% zWGkoRD;t9Qy)v!w0kz_AF3cvp83O>R`J&g`S=Br=1KHH`LWU}-g@hnoVPl%g-bkDC zcqf?7%7Pff<9Y@r#-Z*-Au?J2F&~KO+({f*E)9$Xs4+Jjfq+8~OJI+L^GC1r$eFk_ z%(o1m&j7;U9dO(`zod5Bkl0VZ(Ocfx1T}vu?niZ8^T5%Hg`?zIzApH|h8>8f#pijT zSGG^@g`*>7&CuMDMdKh%O-+O*>kpyAk!N<6%q^YC_2=bv$JSRt$x0(%dX1qD$r=7Qo@IHwfmfrJK0`0diLWTA%H9_3bFg29V1&!CLeo*F^vq1%h* zlKt=u-^N1rgWwApju8L2az*D~?mUWH*gV_b!5GbRtnfU?HX%n(6PLZV#!I&Dn2ei4nW=?u~O8_ku{1x=Zj zD7%dx7c4BLuv*oc()TvmV<#y2RqpJZhatbj(T%ylMs;T$_FD5Qo+ef9Vn-S+p+a}s zs^Jd*sUjnN@82de+FX>$y&0OPNBasX@sjTuC8Rd@D#xWaQy%Re{I9(p_YZe7Scmyl zlfh2g2)OvZ;lkvh7RfF@g79YG3(7c)*zNB=$j{FD>P*Pk@D zl%}-I5Q$1ySWkh^piYrb5#B{Z{i^it(C>&`2v=#g zXJ+3dFAiNBe`J$EN{{MoAyD+986qklSHbka;_& zKRh26@uc};waU1(DilCczt9c?=A@5)dLU*n3tmsn6bVyFB0&$hB+VxeB4*#ZOe-c~ zu8@=>nW2|E$aa6FOq49^BXHviY>Y;tdRbI8OhomOKla1UAtE-U_8FF6rG$=!AeRP& z*jfC{=}IyiDEj-%_eKPMB^kSAj}t{qG!n`CFIFujl0 zB@``3(T-u#y-eY6aZtY&i`=Ri_WAx+c^;KeNO%hqE!kO!PL#+kTd7~HQ~IVLjIrCt zLIRYT2(i`YX#xVMlq~t6s4>t07&~mrLL@6u?rB)tB1Ul(>P;v7j{6GN#Y$ zBQ{Fk(|s^7PyyU=H;a8S`?L{p1Ew;s%{;)&cq2$wH9JVDB#h1(a3Yygblu#X6Maox zYzyWHaGpcB6gpb2vjAG%+VU8FC{56K+`z65P0&~)NbCc+k7p%g0$t%#U+H?+p<`%y zK{AC~H4f;{=X0|JxTf#bXeLf(&C@1Q05Zv~%zKtM*#249oxb-YF9+5qD0FN7)SuLN zQq-FreoA5*# zWc29{nzJMIq16QfMhR1v5G0cTkc1&s{}$Q;M^EKGIM$Dti7@IqLKY@k(WBL)@0dR! zRyJl?R9~*&LnnsRz4@&jFQ%(3J5WB%MKXoz%rGGif7`%3EHWNIgV{$bh?L7sP3sZ<>;B7q1TLD9 zUNZcG??5{m1MdusY|Ax}ly|SUZr11f_=NMWV1mNHhUWT0sI2{sgc>hEJl+K_!xWc@ zyxmTWI&zJhO#^yjGIwQl^-n}UoD2EIR0xrNnvEY}A`&b9$r_L)H6SxBpURcmQ-jQ| z78NQYrJZ@W=C76BA+>P%$rSR+rW>8PFwgWvSJ!gGO_#Q(ds*hxw*ms(fTsew5%p8V zMLFRzfQhN`?$1W1QP~F--MwVYEclwSga#(ZkO+Gxh3<1+tiz$?+@H^Eqb#5EGe9w@ zythTpbg>m3yn>NjpTrJKkPINRnvo=ld1s654ob0VawkQ4;<^Fm5iL-iW+cIm#&NN4D6FkMgOPM%eT1x7fNX@$RGp z@{i`2{m=;rZaU(Qtr%L-^Lml}c9gYQqHx@zi!uavVu%sUU<|QDr&>bpt-Jub2uy9k z!C2H$Siy65TPZ{={n5j06nh&Wl`T@+$_M zQfm!^Xlr$Yhh?iyqdY5#dIEpw`n@Y$da;pR%bF1|d(d$Cu;tM>7xXV8zH?z=FDGc+ zSUp`BGs#S(BtJD!3b&mA>f`}*9$Z9gJGj}-OaRI(4Eu*qr#-78u=sI`gBgpZKX)wQ z2sEi2AxJ;Pp_W}EaTN$lmGp845GJAmFt?UNv5ZP_0+~YRNxzc~NfKk>(wCN;B6g3$ z3tg?^ZmNa%SaK0fbZ#OX=BMxcek!WCQQLQe@UMp ze_e{&^Ois5uSH9qqdt1wPvi_kJpaXHp%;B0x;9XVJ78oA-^v=}a&s8fIjHWI+cyt> zTh<}iFfR9u62`e#7jO60IIi|Z9xNb8ME-mYc?)5kbdWu}q~Xb!F3L}q3(~8&xD()J zXX~N$(}$N|P}=1=TYhd;{hEg-e$-6uK;u3*GvK};T8=SVP<8-y?i*-cb{;gCE4z9E zVkZf$hE>%Q?t(%>uo4~zy7H^_3`_tmV7n_`H{!>;8b>aB1Lk~Pc?q5ExDK8Fl2tGCFh zgxgp2HO0GQu;GdaHT&iS4YX z!8b}+-Pkd#wYS+Zh}VYL?2^(De{cjmQ^5^$#lG%{oqVa<6r8`2 zt(H1&u#ZQrFBUAli*5p(G~4$n+=fcO?jb0CspMF8%=E`iAfgWam`G6B{L|I>kVe7d zPtrJk4>~oy)!_6WUfZ@mBug)dnAq;?>sxDJ+v{JIZp*=S&JFahFs`_*o+wuf1LbRc zKgOWmy@msa#8$$CF=zG%izq{oI@Qy)=K?3%b5m8_=JE-3<|yHJbSq3HN&1>{x;PAc zsxIpNvI2)>Qf{$C@(GryjN{sifJ=?uG9dJft-CXQ&A zJl9POY!HX2_bKD}5`tvM`;2QrPNtNe3iZIG&@EpRdbS*Xs+$**uaCyb9x9yP2T8ns zueF`EFd&68Ml2=G=~T?o7^Yj+`Jx#8*}WO&%xdFw3%YYq81&l!#p`o=#Fu3%(9%_L z)#xWklBh80h$aaFI&@v2<+k@MxF)h|VBnv%QW@$lr6Bp{;7GO|yX;WP9xKA8IEw~Q zJGsV84Hh*pe_HN%(O`&pw`8?{`9XPvxN1&d3xEUo827SI4e7C4oJi3`DLjUTv~+nq z&9EeROt$VG`Dsx{FAt(XpR|d6Me3smXlh=D%GSyM>g`P6YD(WYenMm)Yj#<(CaGlK zTF_2il{L59tuEbL?m`kmsmPveS<+&RB^9#8*!Qx{l-(btp|OrV{GaolIo;m(91S|I z`I!0S^Z$Fl&+mEO=Y8JwtaYlE_b#oi?5R5YxibIS_NRXNVfn3{=3o4MW=>ebfY}4% zrfzHE?eTDS)g7ZsT3Whn`6oB!qM=QyZdyFqQ8w>AA! z^q_rX)9ap-?SE&rxS@XZuTG~-zP#$1&}Qp}wJY~4A_F(9sy+X4sb)v18= zfuTX4YqARt6xEM-khNX83l45}Lu{SxOy$1pUtmBzSUtnj%+(`tF#I0_;dgJ!xtuRS zoIRZR>BN!r$2lhseeQJi_|+S`U+yYN-vaSvzFVz)Ys_W6I)45y+ zXVaJ$niqc>So{(D;;f13*$a-{3%eXkIX0;JiEf1s_80ZG4qi3? zA1un~Rcc7V$0^{Kp}jx$>})ftJ^FKsf^{17>+8fdC?oX0(4(4AYffiTCc!uKo?Wk# zy=D3hy&Tic=;yL+9fGZV=I>H@9iz(?rXVXc0IKP|si)pV6_JrG$t5DPy1B&Wc+9EA(@;9`I+Qs!LHT6IG&YWhxfD(G8%vvCj&qBYfk zN`i*-a%@^1)}yFN@E|eXu&CC5o60ndX>1oV%z$qARh4@@t0w)x3vOPYWkAFHH6Ev9qgFCR)|qo(H0z%c@=zLMvGLezrZRE{CQp zO4~JpcAGT$)^=&j|7F0nUlUd3EZw16wYKn~#YYdz>Mz3Wlb5R5DgzWMs~F&6qrcebCRDB+Mn z=Z~!YasdYT7clzSVo1fKD}O7E3kc6hGCNNt45En^M$+u@n*JZDc=8ouleVa<~;TqZ>&xI-qNx!>uW5>{2p)7hJ3e z4VJ#KDH2QedkRBlabX5;52 z6`Q`xrK-A!343i|{Z~H=H2qd8`V*RdK}tDRCOyfYhh!+!Fm)PRK9>ietyJkEasT%N zkhR+KopTXH)*no*mUWY<;k6J3)LK~0m}FOS=XxawVDQgiEKAqu{@p5+twUty5_}+A zc4k*Mx^|vz%|uJD7U8_nlG!=$*iax!fU(04BN}2}AtKgUI2PO6S**OSb9k|048vkB z0#XRf;OsH1$CiR%c?Sl4r95KMo|kaZ+JF!H_*Gl870?<$9chiBwd!9XH1+ggDN!8F zt~W0w8NBE$W4y@5nKrJty$cWSjxelzTW!latUEc9CH)eK1vlH{v=9bVA_$W^FaK;L zRI)`de&E3!@?#KeN~D7uOFCo5*RiC7o0Wy?7{MDwPy5Yyeg_hCx5i{}k9GVZSy&=g zD;$drZWfCbuB=d(LKk{=>9}Q2OAyKu)(0%H2ug7MRxFl;o)+O0@y3;MD#7}}sHIHI znCS;`#L1t&&{ID}lbr<1Cc{A>oT8@Z4^d!+^pKHj_UVK z{1HP4Y}gYu$yP@rPg(vaf;Jh@=D+(91a}cevD$~BV9O(xsyrbEVnR5`zs>cG6aEzf zDE=M#LP9W}gsZ)f3M>!HS02w$j3>3iJoXAnpvD*X*7#mH*Dfb3!dnKE)f_*s(+UUY zm(%p9)3Av!vXsjRyj4R{QJq+>(r?V;1>Df7eN)y$45zs>8z1kFauJQw9Yjt8`c(0S zx-t(cB`*wda$%)%DiUok{<lV5o&8evL4=hVKH$3BNyVm)7&0E|- zgtv@IH*-^$cKSf)jR^h96?C(EkVZ+Qv!la%qYiPjgqdft9a$?J7t6I&I2!AbP*@_V zoUQ_i;pVohBL=v&4Fg;rpgRUAsw$9fT0k)|WuAO}0D^38To3ImRIk;ClV<3iA(7NO za}Pe>>La13fKo^!Q1Rr?fmEr*N;vw!_Gq&nAt9!!vSE2Pa6anOb(gO|VJUyZPafs* zyH7h`y1M2|IL;kyozC=*HT#7IBrMA%X%|ifcG#X$(=68B67pei;?6> z)%x*DZZ2!lt{5U+>O+!e_R|S@j}R#y>7kAb5qa{4MTq?9D1P#N9)Iqh2(yL*E+n}z zOzgfs^Z%A{_TL1IClVskdzgp#_SA|^e{iUvu)6r`7rD23Zgf#S%Bz=)#}e1F%1hJzugI)G#dh=f1mKME8 z`mx5B5xv>AC`8{mm!CfEfLT-eY(^f?<0-~nsT+DCH};%$1c4Vkj7H!!=J12JycIR_ zG=O&uA!Xk_M!+o< zptrOl$^X3dJ0h=sG6IpO#PXBFwd~j>pt~0*+}$_mg4_yp@5Rympuu89?=PK)=-I+X zt2?(G99^1f=yEV{hv4-75{b7`<}2-mO*svF3`Ti`t+^sQ4&==%#T)bwjfN08?LtwC zQdBxCKKPlaL{{fkUZQrLk<=6Cu0v8sB=GYO@#vnE3xTqE92`i)_|F{piBgmNeD&96 zzYfTR0gqQB6F&DI#Ong5nI@sBV8Q?}L5`Ww;hYXlAiL`6^&JuZ9s9KiKmRem2VNJu z){($Tykw|llo-C}b=~3fk53cAOpp!T+~Sc9Y1jE(u+hYK*&MLp1K5DOz~L`l+CYp_ z1#`L}{QK#v5WZ0qKmPTjE-m?8;PGCE_`GA4%P3=HLvWLo$Obksm6tQ|8LEBtDnb{Q zGO-fNmbDw%p{{w|k(r@hNMy377LplIue`i6YZlb)OWnu;^}x@8B=ZbshI(r7HYD%Z zTl|ja+6jfRWoAn;w|vk-XGh5X@q3!23sSM&RQo@q^E8J4;>}!1o7`vfql-2{`Ylf8=EnqBl6RkqP*-s=Ts~1k)Wj^&2+EUvw_bd{+Z3aL7OOG$DPeGU{ zAWVX>*-_DvpC>el&sTh1p8pnEkbL|UvS7AmC~p_N72R`H0a$RH6X^YOb!P!tfvp-? zg6NCw&mj7sj{NlXS{peeLmlJqM263{J36E1mSMMdd`9@K7M?`-9ZUG}({lR!xf7zl z39R7Z6Vn@yb%)QX#ftBKU}DGZ1j1kGHH z8n2EaeCJet{0O~>wYwnnD~%@?m-MUZ3q2<-&5}gt?ZI1>1r@wQ9fmk#F*BH0P)h3#NMJeYv@fzie~ zG=a=ODX}#We!Thb2>-e@KfbbipoHH8OMB`LpSMbL=~D}t5UtKeCiqrm#$<8~j-IQx zW-0UoGq?+ddmzP5XC`nK@()ei!KspTAyn zds7XW;I`-hGJ&m%%6i~kjGveBhHr?;0 z!ig+)cmD6}|2}f!S&B@Tn0+G!M-~lnceHmIhEB}cjRLITFqo`ml(UNnk_%WEo*B1yc zu~H*-7mc#Dcg0lRQ)dKH`TQEDj%QCKX<3;%e%vo5Pp3g8^V)@?f=XG9ARI<6{F$u8 zXv*DbdS*EdiGBalO(eF>N#;luX@FJq*}9h?M5aL0~t{Ch~I!0N{9X#&;_bM zO|Qc8kmLV!X#j6kAJagAjQDWyDl)=mf(x$~DsP`LYAJ-#5GaXpBNji`p%MIbeTe@O zWJK&Amzcirf!~M+1uk3nfDs$P2t1V1sH#HGu0-0=ix?5iIj5Rh4-Q2J_>H@Q3=nVU zH$a-2R)yaSFMiRb0lc;S<=Qf2gxmUDWQ3)oD{m;R632dA3;m%F)b_X+>bKFM5!~ut zybsNpH2-Cy=~r>R=+Pn^ZqvFXK@&bSk{$AwO2}tH_U^p*;5kA8U{N z(}m;2;Xfh`gQZZZ;n=rQBT*AqU>6$uA*_Ru%@Nk_xt6?YZMYm(`DhSD)q_JW_%k?1 zoqrTdE>;KN*I%M{OhPoLKQJ^4TlVCox##*+Z+mm_-6Ha}l3Uq7LPI}1<1LY!;WVtv z7Sw2ov`O2~Pctn2u@rghZVp2eIJg%t&6hWGyWh2iBX;mc93DF%eXD)P$jA2ff4yai z)3A|zD3rN6wZC$2UYclmUUBRQirUb!5(bLs767&SilCep&@f$YoMeLuRLQ~cboe++`X?NCxhAcb_Ia! zAp6Jbf$RK4B1K?*70iN?;L#>rq9xBNK;$ly`{F>XM7^YpMCaG_<&|h- zLT1S*$jDuGP?Yu_C7q(ZKmIU~N@8Y4e17$~_+MdW}<;f=?PZji4hud@u@+1x$Eo)^vU*U(k>AP3Z)4TtGV z^`Zm(p^qSXmEI}!7W)#6s!SimSTcV;Vl27MWh?~wp412%J_%mqDw;$xT51Gll!%Ep z@%*E+5o5903d9&T!-1nC&3Is~18wgS!-W>~>fR9HOD zUnw}_^k95cSoLNDf;5@Obed-_P8=a0fwL8Zf30K*&YlM^C*wjc*d#Edub2>W&+LbY zv0Ew=kmu?<^D=IeEOcH|nWFxJ88H5go#}5vGy3?;B^q4Ho5#D2qy4?PknwlyPJYa- z-fN=Yfs|LwNPqX;DKw@;PCUi=A#^f=%(9L{L3z*7g;&cuvv*z1YD`hDGAK%f1!dAc zp&|WLzH(g36_MK!<%(5X(WOyET~}U8{Vosmr@=_~TtPGu! zQZi#3m$3+X&R)k=3%Wpo*VvI%GV`ABjOIkuXSsObcseMZ>=`8k6eBoF(v%aP?&w|v z=A6|wkxIH23r(paVsi5JXpFJ_1AfN)zWtjgLQQe4CE0P#R;&I^m0&rQ7hULR2X1MI znt=Sr;4*?d_LgzCBzz>Vkn66@aQy_U8|@~N?!H+^U`W3}v5Ht?Sm@q*0`2ZTaWN<; zJ(|05DE|U?=UlVynGUJ)35+}AuwQ-2g`!+y#8?UZwNB5`U2F2(p*RJDtWpvtx7`}#v_eM z$a9kgh792J^G?V9L6G6Cmm^5)zxg4JoK4!-heu#;hmt+V6<$jImK*-xoH98fY21Fu zL^>oVq%cC7#&~dqd;%d^qtV#i`H+jMfXDHWyu3tc#%aF9!;OnG7a_qUZ!9%jGs?T5lF7Fl1n`T1M1E^={=M$`=!u-u>uzeoBv z&0#Etm<;oL-`)y@Z0<}7S+rYV#wjZDx%}yg`w`@WUW~URv-u(So;sH&hhZ`EBq`*Q zV**1eCB(3pZ&HF7$D72We&aZ246l$oUP&T+VZ-M-%*pVfJMfm!jO3g3>5+~;bU+?H z$Rx>XEynUP-rl-1wjO-;;>&uHaq$0yW>gb8-deR9G1?_EI*z}`&$xeY{a0P~pPPA-on~CE8o~}XDqnKg zuI$r6LOWX}U4#Pis^NHE$k4dsujas;+h$$h^;@j+9obxH$Y5WYpE3k5FRTu!5$A?= zjF{%P_&FDzAC%hy#LS0Oj(41)?FHu~9G=(s3S#WoX))4r?}iB+EuVtJC&tLq=7W~~ zVC4#5aJgbGG~;xY#E%%eYZP_$rCn}(g2CL`z?&EI(Y!;;FF+Ag;|wX~`F;Xpaz^e} z<1~nIYo8@ZO8B51hcPc^km!lc`}uES`j8GgiTHX;HBW&VH7YTDEeU&GHF{oD$=t^I zdW9tnc2h4l=)R15YMm~tAYR2$x|nUr>S4dqfKCA$@&-48LK zX6jpr)|z&;8xK)AAJU}**25#f=nB@nUwM?V;7Q&11-0_^WLAXDRvUJZq2 zgzY4Zv1v{U##p?}m!l)iIKX;l@6oVAdNP{K(K2`gLV&JPMn@%VCt;8#zrR3`CJPuL zx0*_MA!9!Id!K^*y#F42YXr;D7FIt2(pwA%)-ce|wnP1CkF%iJFZe+}9>3|b6eg>K zV3h|4RoMRwP+tr4>!D@5-~{o1GbaskUSj1KvuU1SNTQmEbVt;8v2KZCM#D-ol0FS>_l z(?&9yeu|LuYC4iyuyr*gqllMeaCWj1nijUdFvdmGtR~Zb&wbqiZ6zLTrQk45&l)c3 zBE6l_6c)$n;s_sn%;0rTK`S^vIoe9ZF!RUWh$w-6p4^3z^7H?=n8ObC7bRC2b(}ul zr_3Px(4jD)G3l*D4D#i&jXq-=Y9V801#z@|m)=iQ`)rDv(Jyerb|MKmCSG7jw3UcK z&a&7$F&Z2mUzt&ovJU1zzJ_en-*aK3IffKv3>6W+tnwsPV8{S^D-nadW*r$wMq2`!>l}tt_a|9;kduu(1DbD7&V)BQgImHKx|HW8`*y{ddUxq&ACozk&uy#8ORe) z_#vBQtxj-<(`r{E$dOX~{C{?4^(}7px(rv}jaY z*t{M{@6KY7X)d7%(!-yTa&tQkFXW-Tbmje4Fgx2q#-wF;fg$PLS&T8&`VYitH<)33 zQOIR{3o*H9WB;PjkS`Tsq>%Gn1ZG6Lvl!&OjDbP4w^_*6^QLlyq#-L`2)F49^Rl;% zDiLc%Bm4x0q<3dAMz=4k5M!67jF8WVPUB@9Ut_6-Ic#%NoKw9|b_mS~yR#VMf&E2@ z(dcCoO6RZca~a=(j^P*A-&YTWrF^*mfv>qOIw&+F?9O70f1B6^)4paI`_B&H=twg* z$bXz24&&mcBV?zU@J(Z?{bU9*B8v<8o_4n9;qmSekhNhO4Bwqi?T3?HAqxxZ}W8tu+pY~k#u;7o#32=!#^wyRfNN4U2zzrrGw!N4kN8)^=Si?`mi{( zeF!;?h)@X4$n4HyQYKuktfXE3U=)M7Dw7{GmHJ=uzP@m~tbpv_C1C<%(z~-5<2FqI z#<;~bj3ea-kg{OWj^%SYP}B^Vk>R_u?e_`H$n4Hyl(C(UAj&^X86{gcWH!ypZj#ZI ztBx5=%Y{v{mL16+Zg^KW#IpNKRm3vdxM=)bLQid`j&%7yduIKZcu z-wS{p9oQG!6)C_1bS)$SD9VKRPHEdx1!%u7d0ierurg?pRHDY7soG|Lr78U_)bkw~ z#|LkI)DCw%95@@L@`As-^cVhJ*4%Gu)7jRslSj|aSldl4F7Mg`pIu~cWyZ}7MJ!su zDXK*%9_Ln=y@qeT#a^~;Td9x6-v$Ct=8tjQT{p!x9yDNg&Ldu>Twe)4YdH+4?el%T z96BGUnhcI_$2qbw`G+}1Fh21v?X4bmq7YMGAAbpOmVK=vGkK}3p5lhyz-RAsQb9Bp zx;#iczlOj6QL#i~rN30|-Q(LSH*D&H*5$r5N##g+DAv#G-mWw2Za_e}>yeko<4eAW z(r&6$p>~tPMSowZ(p|0bF;z*X!uc5^6s&qw6YA2Mn{T&*Gj9#F7(sulT%lxsE~{G< z1h^>mmGdD}ifVMIQkl!+;qdq5eEJ@ue;sP7nd+~Rg_ycY)f%OuEYRMq(e8BAht-Nf z|Gj3id%JTV3SP5&~2-{Nu`J$pFw(}^SLk8@5O`rPU2@vAp>zuZ-lzAx)`XHy?B_90qI z7Id>sn;UwLU1p}!vC(ezv6b`}t2M#)l-|SYA3v3*2k(E~$$kv5dqMQ3zt$u_TDP-s zQ&eGm)Wd^&J3Wf~_2GfVg)u7%Vj~NZ;g7OWgCiXEVZ?%qO7PF1IEu1$f)SMZKfDJH Al>h($ literal 0 HcmV?d00001 -- Gitee

pRhbK%cF+dQP_MXr&;t``b#6Ef-nB0Cg2?gwUU+aU%+l8029YTFIpwjV4rG3a(p*DEBFGbj97{0mW7RU^gn%+jTZU ztlj$LnP+`#EAlJnsk+PsJ(c)VT){;vE@PlES;71=K-L+}QB8VX0lgq&Ke!t&A?2>V{y$(Lru#ucWRTs{ep zSFe6lL|xAP&cp98>A9@C+oW*rO{Y-|RUSA%jfA;sl~?hP>pU`_qj-(SuRrM#{gqV- zp^)Jk6c^{$PCDa|WMiNUiyc)aQ};L(L#|?tkk%!3HqOw4sEU&OA}AFwa9%kZ_Cpd9 z>k2F9v~Y%E=p3^7hf%Tu$sXpU_~pJEEFR_@mFlX*l@Haz=A`Sgwt+|uwBABB$Fnt+0B4X)yH*4_>|X&qX_8n4i(ZLI2rrgD$+mq?UF@v#UG@Lkrn~y9HELV;dJCL5NF(HMJzq zU?W14m}h3*$2>uCK6URaE%#!V(hXbQbbWy|uPL0~5_{LP^7T^i# zH4`v96`GiaPdos!SWWj&J<0Gt-^X4_I+=)HSAdLCX7&nqq49H_Lytl)eLN|I)>!b${Dk>_ehe-y&OSA6;8@a+~CI zvEuu>pm~m?cmH+3=XJcd_OB6u!NAt_AnnH*r(Vf@6(oH0;(bqn^P_9Q(;RTgx^UVw zGB)ER6@kUGb4!t}4f;%a#_VC@=^iJkJ!ARJ-;aq#9|(~(c?pq6WS=0({Q7@{etw&K z;VdDmS-4F&zq$xe$Pe$6gn5*1CT5G8KHjz&_l@$A^b4PGzhhCrin26bIEl33j7(k- z7QTUzqb|!$hD1;Kr9Ebx@i@g z=i^dkNi!kE;gg#!V4`M?BH!>>C?YLL-$X}vGSjai{#VN@=9lR~y1~y`gLm1HJ~Yce zPN{XN=}8@aw*>#NDI))3Q~VYDpg3GITPI4?)n#caK5>4)6NZV(V1V}Ij(il1R=N91 zq&3SP?D;b&6Z;sc?*`rwy!8CTrubU^n@xco`jYrBHf0)Ex;kWsTyxO0cCt&kka3DH z{6ugfL?`s6@k>j~-*ey9XT{;phei#LlO(*$DMcXQBh}%$q5{!ZEj_1}bDu2rXOhvZ zQngP*nhHBY?eF>Z9x_>lca5wb6r}U{xnPm84gqX8-1epY07mX5|Lr~gkj zMdaUX$`uUW-6wSLQ^HD+wyo5;0pB=w2fY(!mFhQJ_Nvu`_ozoKzZ6l0SRofQ1a0{P zD@)8Eft&)N*b%eW=T-jarDgne!|c4O!?TA$7W>9IF#z2ulF3K>0!7$3`>a-c`WwaT>MeNhgDv5>K<%O@@aFM zxCU^=bh0|oX@WM`^Y#L;_}%?y{1eu%ffqi+&Eh-;?6}rp&a0kD*v+6i;(OiK4?98$ zSxKv#V*Ee2w|Qufnvj2fzsQ2*t*ZklkSjTdnb1f1u_a?dZiA3Sn2v9Be@6>~cQ+L^ zE4}u)AkU?7cO*%#r5Ng7Y}Kh=Zee)Uw!?6NnsWZ%)D#Y>|EMW0gq+g~ds5RX7L7yp z-CeHntagEnzn6YMx>I0g6a-JFF=v&C>74G@nLI|VjcHqGT1k3UrjNh^`WXY>(+oCP ziDx=dWh|vy~LFk1u+9}J9a<|jkp~90~XL@2kdys5|>SJ`!Dgobz~$^Z+6RR(X&Dj z(I{ly7%;Qb|0OIlJ|{pqgP6DoVIb5+d}(;wMsb>z0GKZI7XME(1=^nw znX+XW%g4OqrA=Joc<<_?5#Jg?K~LP5qH+31q~7en61$|O(m2}QwU1x+Ey`=;39T9Y zXB|_|$i(?W?8KFXF@mIZgAM9qqc+!6UwIh+n_)n*6Zv+n&$p0|Nrn$h(oZW=lEl59 zsqQ1S{5m7^t*edxGyGl0j?I0W%I1;RUTxV-sF(L$b}vE%VyfW4 zile9>g(L6>Ih|7>C^U-gl=Fx0GioyZc1zMZe_~eqCGNn6_=KJ8_l#ezto0Zl6qHrgjR>XK5dhw|FBnf;XV2C0|1yIo~1N zT`E?z$KxU6*2*~e4tu_iBlN4j9F;-6bs=B-gXtF={D>6|!iLQ|Wah_-ZI=~;j}Ls@ zrwMu>KhKrtzzz9%Vv^T21ESK}Mf$anq6q!DzDik^K~RX|k4c@;_r9h90Jaw>eA`a- zc59hqECwg!z>xA}$U9GS=vH-U>;u95?wqRW&%h~9p1;`cKc~h7&o(6bCfRO-^7BTQ z-i1V&TC{Hq0XzOSM2*r`$em51T{*Me-tF%c2S}D0@CN zvPDU2=+^aGid{Qfv4}ye{5jRW_;n7uWWgpq)vRcS;^_2yYLS&>YrlbwH<1d__TIHw zh(G6=Cojfqt9MsuoX^H@v&YyWpL9s!v|1lM&xOuH%9{L2Y(z}GRO#p;WsX$c#Sh_*7RrQopn@Ayk(}+_~*)oS(Wds#c^r%*fWsZ*?gRngF&6z&ndYBo}UG{G$?1+6AGSCpn zxYRummb>S(ipC61lv>`aRct=~LE(wJ_bOxAGC{k-YxNxx*J67xV#N8Z&z!X*&uQse zh*EY{cBn<8^Q@os-3#5Y<5 z24yqM;n*sbt=NY9o|v_YTj}_Qe;u1v$p4A7Zy(2U3u8p`((^m-sB)iV)|2We&tok6 zZ5>qi5c57tn8CEDb5m#a(fPhdWEdFD(H5kC$o1Qu}nBw+quZp!B~ zbXeJ<=O0EpJ=IQg z9G^W1@L7|XM0YQUjI}QsiiWy>(=QtzSW0AG@a=dabxF2}6LxJyJ&*Q`B*0tRL-! zWTffOE|>z^Cl1e=sT2(N$;USxMX~tt z57vU${3A~-PX;|2@H#Nhk^%lmTeR;sFT$rx)?GW{R1jc)AuRy&rKD8g*kZ&G8X-Hhs9Y8G8|b=a4ov2`#r^9dB1iv3BGlVtvzy!KVKEy zT$7%L5xCzXePI_GbNg~7C{ClgbDn$jyTq-AB7J)Ph$~9IGmq+dcHd~H zMhX{77&gH#+QF9iP+{r^W9e@bkS=5n3@#Lz;kyzKox_5G7YQ{{W#>*oFhVw_RS3dB z>?kKn2xWVpew3MyP4Yr-!lM8WSsME8z;2tEOwE1OGGgs6NQh`gnNYqQy_>(3@M>a( z)zmvm-3bE?8#BGym7CZ~C9lb3n|Ci75&3W-zQ-&bWxB8hW-s-p@d<3Gh&gK12neTC z{{yE$wj!j4{tHfd7I_Cb{Rd8|K1dr7Zc7Qdb6KVW!YQ=>1*f_#LF0j)yqhhhslBL-A2@+O!uD=nsG}o79qeO&FH4)DH{YBQ*e30KuZ)Mc z9$7BeJq@FMh@FwBKdjG z88hHu7@{Ii7=!)3#yKoVMVaq`(PS2cae5E0+f991=y^m+dcQKDj$e!8GH8eL$t(D6 z${Xbx>eHWS_Ts;m5E`e{P4Vwi!VL)ak zh>a)Pm@TqR`noPIX-Dgo)6d6OXsvoQD8u3Ld(Hv=2hTGb5R(rtg1i6yc28+0G7y%O z74~iJJh$Ce(v6CHIOme&GVYk(nEJBq}sr(HjAB)~>1 z$hU-l%GYprBpO-?SU$1jFF24m?eqz-BM&di9l+9Nyev$srt04qv{d|T4D2im04bsm z3X1!Do!;2kPzu7Z$(^1+{*FqbLDJDZ%(TZC`dG_tO~cE->cBX*#MLG>5S%&M5b!`^ z#Nd4NhdZ$4?NGudEJx=PJ^_FB#8pMzWK^@??1#f83@2r}lACL*jU4$=v zin>s>C9K7(kEr}Qf-`|OBj*#pbME~Xvf0OzkX*RS1f!@OzItp+9OqW0&MxMdE}G{c z%j0-*AReDcbIVh`S6dBDc@Xd^UFJ0N7P{zi_Arf)^5or?;q1Uz4p$ZKnJvZzwbDIeoQ2%@yLm;g1>Tq( zQ1i@?zq`z8iA4Y1^v0{fwr+62yheFLBY&V4VJ0D=zF?-)z0fvg&n&LuBhqsb+&?jD z97&9&xMPF}=5{;>p;J>GO-}z7m0z6}g zyycIEM+QQ_9qC6_Gc$T#J}F9_YcH=8CUbpJ^@tGL%KJHc-rDbC;830^b;H9k6~XTL5O!&*yfpteP}51>ac=l1$(U=P)Fk zlP8-fTJSg)fiF5o>;PR;n$jndyfioEaE;%~*y^OMA68TqT_Nan64ALg6rWkli!D!A zyH04PGW5=@E0RY3!JmUcy<5q!5U(Fso{ztqP%)%iu)c)t1zt9CKOfaYKv(d@n=glt zickn$-yN59Jv9o^$LiO60tsU+Cnz}QzU&_9!7{!cdXD>7Pm!K{JI^Q=t8$;gE(Gu| zFMdKBsY*Q0qiZ}08q_u(TxmvDGfwT_>TEe_o>lpGZ+3kk1rzC`a|>n}m2d+{)gtL^ z0%70ly^DWLV}+8L5`u(dKCp_ZSah4>EZ>73Bu9%$M~epXz@8yHCJ`NZX-U3xil#K^ z;y>_d7d@bA#rRi-+>8+#bG|35i{CpzfMhAx6{EA=x>L&LIxbP2@$FFKyRU{0G8-_x z8~XLWJ=6cB@}bn&TUmx8wxX zET;nj6^zM}bN|XRmoUSSqq~qgX1p&BO8KQgoCBc`okx9AmI6dEg@$WhRDqn#=VQ0V zv+Vy3s8Cz)C2^so1ht^569yn$~8dMWScr2bOm6yB+sgRp7m{>)g_lZh>xbzY~j_x~bta|;o>?Rf8kv+wCuO{We zfg88q;M+HeMfju^6?5&>CYZG-CMK4}paIusQnU*xN6Xj=*iXlyB}T=Y9^h-}aQ;P? z2$nD{_GQv5LrOFaFKD@#yL_VI*~#!WZ+wU^fo%eoY*9_HQJz3j_wa?p;LtqFy+yA} zDztLa*F~z#&ij4{iwqQ_!G@8GYk81dg8BfKtMl$}M@!@Pv1(KCs!ixdOa1+33?g30 z;mPlxfWeXo%)6C6qwslbfi~l+V}AW65QUqGvoi3TEY)4);(|I^@&zh4vFI}g1QOgu zmQ}edwG%E z0BkaYfsXa+{gEXb|CPF0uc@AYDX$CoYV^PB9A6`jMp|bu{gEU z*j~;Z9W`3TIQ5Y&k0e|MusiJhg72%>&fzn@@hIJ*$0@}$f5W8t&4(>;KM9`bj(yWM ztK(owkZSh0XjQ}O6FruLHsm9T67(oB#OZdXKk@WUoNul#EB-K*&}t(yzM~`{;|7kV zEs^7tCMf~y6Oj=~uBCbpkc%e{iX`~Mu9La?`v^saEGEJUgr%^b$(oUI&ADh4j9qn3 z&;aZ)8Yrf#DV(OI=ui?8*$aXQ1@qfQ7*V9kOHx7tj<(DI{IMt2}T{Z(FI z`le++xB?uQaTxy0kq!c-6?JIRM{Gpovrfy7Ern$W`ETdJb8U=6w1=4=}r?Pi4c7KBr49PF0PdOM$a^$Gac zG^|fu!}-6r{pAPWJQ=pwfznFse@QFMKxt)l-oDGR^1#Mg1uazfetp&N7%ql2!cxIP zSwv}?m?_H)t80C|Zj!`so_{cwxvmajBLRPxWZiKb-IhbC;WY!izH9FT+zt6<;ga#> zU(yN|;6VB!jjYZwvpWKQYLOM!T^psQNSkq;RaV_?u9u-`fx=<$Abrc9?C<+6#f&ie z{Hp>PWs}5-y;ZZ$CX;4nMR4`Z;($|exON0}arirBgbr>J>mOe0e@iRk)a^ruRyDr@ zT940@GPG++fYM6$n(SNMva(AmDr8|;X|zQkOwTurAR^k&@wZ~=7A4>7(`3Sb*(jX< zvQaee*GX)GVZ(~QfdCN5mj{kBq?(FkbixmuIEUVf7Gx#gi1L&*xBECaLBm@V++E%wr z3nuv01AP_sEtg-?bNmTa%4dmt&8ck75>F4`{18X%@BVVLO7y$>OCjJ3nyY#CkAJX! z{g`gV1HjX@mw*ba_?AfhxS>Y!3xr_+$Z~&#UtQ$)Wqkfc1{CExz^P$`1%&05!g{*_ zqS-C|wOd*Fb|!SlXC%@}Vv z`;$M(tM*iL6Xwqi!ElT~zNXHDoK)qMCMVKlc+Kr6kx&d6Ej@$e87s_sIV6A>E7>HS zcATid*e^N=)4x+oDvrxarI;+dl@P|#2+dx#z}P^)D7NNJVg8MsutoGy?Z=`^IB<5R z5h1`lsVAwom+s`!r_t-uD!KFP5{J=1^?{~S0Ck;WYzN;cET`+~Em9~5aR!$E1RvBr zL??|gK1`T5PGMq@lF+BYCNqwW6xQhuua}o|?;J0FPiDj(AB_Yr2OKTuF&Zl;V3gMZ zllVt%tK|ZZ|JP}Y=n>3UTp`L~`%$SI$X}eF4z(|@D%!KWynX9}hgvJGsZ&)?b>HOf z5Qd)VqlXW-t9Q{*1*2}GW6`FQECSs^Wz-=k$QodRUomI|mABG6!`Q6zcVW(C*rf}R zmJ8;O6}8>NhX|7QT1Nv9y@A=F4m1qhW95Am&|ZyWb%Yth4Oou_XRqDAne|fAh2$@T z=g3v2)-J4i+c5s{U%F*iAmRM&Oe|_{9t6AW@5lV7!W{UQyrUIt_ZaR;wY^9K_a>7{ z58(}3XQU%mC*42J6oAqSz|+(c{NK__5!f$}HR^%@G{61<2xM)!MBzUr>swYzKes;;i8{oS7jyS$}u(W?b9>+`SDmio=7D9&cv zWU%?Q7iY^S+4MzmtNVloDudZ@)8E8IfhktOwd%8co&Jq&^E$rGBhtLXgQYFr zQl^0s3J(G~m$B=|u-YKv)SmTnx!Y@VnoDP2HLd{n&V(zx7iG{HIz2=qc#jQaKI(qR zCPDps0nYb=#fv(brhn@S3eFcywT&5qy`X$i8~>i`)Lbw>TwxjQ;i$-Zo-%WMv$g4R ze5E#N!#PZnm!o+N?04n0DS}+0esvo>fo?#C>rQ3z*TUp_JheN3;bxCE<@QV5kc6p+ zAA`}}aDPimVAO5l3@b3j4dr5cVA`ndI&n^EZQazx|9C0C#NH=_<+pE{kH{n2MZH`N z|1>1zGt=vGAOZ~jTi`uF+G#Tot|{@KC%pF5vj0|cB-8Yi`BxZyCG|`ehRUR749nfF zR~Sg_6@+hIEx&7Yl@8_iK(OoB&|T@1u4VSanb+fblVA0rvYK@s$wp!RLzH*wR3Gl( z4;WtzA;XNZ36gzX?B*M`9kIP6mVH_~ai^v3DP|~TkUO=X}dP^k{E zpQynA1~t9+N{`vyLuDDaul-g))LA1y1Z&(kemTqxv(ip@`pbw96<|dRX%Z z)B3-1eh{>SC;aMRc!+krv@gi+)&Lc=xIn$-M-TLF_2(yU?&v?vQZr-DXL?C`JfM2X z=d1z4!p&f&ASv}FU{VCt8YF4=2w`()Yl}LdN#_fBMd$FA&7hW8<>U6=1-cx>;n=7> zwnB@aR<3;s=Like8qohlMhsD?U1#fm33GLr|L(>8xNsweV^6MtXsE8XMD zyU{5rfNt?CO>$((Q{=DKjO(yEa=anL1{AC)WjtiS3w=s-Tx0ss01Es<>z47GU|AZWv|3k>Bzrer1P@3nT61Zi0 zFIHHis{Mb29E}%KZ}Z=mbR9^KkYJ2`RKHzc_yYrE{cWk8WtuAega7K`=1x4$0cWw# z_wAn*2vQj>euIsv)Pw3ME*K`9GY5l<`$^^dHq`qX@>y>oz;b}6XZVb-axo;~ow5Twdq@uyk-+ut6AGY#?JF`o%# z8jUGEIZw`WirA&k%u;9EEHq3+MhUQGLfuTy1f+yv!|m8nwcA&%Ys+%J&sWpvgzSW0 zyTEf27N|5-|83A~f;97RbYaX;Eb6)hcd&H$!|Xg1Q~iB^qHy4Krbu(r#3u0xKe-`* zQO!wW&>?RhsBR-vWjs6ro9wKQRSu)|rWa7vFuM$+^}mIjVy^#$93;bW*9yaZ8~z!5 zb>GCwjxpuin)R`36V~(07*W@s&O;HwMexr0P$)Fx3_^7Np_i>(kY(8Y1w3>2oH0Bh zlvcV1FFf19dJs3XucBQqF&YOMu)#m>q!Dr?@L-z@G3|(qIBs zoJNaj!?1@yVXXq^iuQ`lygX#G%5sU*TBNdKW z%9LllMBRp*>>gF~pv)z96(ExMx{JLmlK8osh8IJRb+$^cMrV-r3ei%%aN8zR7N^dR zg(W*Y@eEWY;D|1kc46}Wh>`;A1JMYzlvL?S&^QQ{3yO5v1^-9l(RvKqI2em;5a_XR5TH%J z*m>~X2Lqi0Bo|9uf|#aSHiY&_N>rrCFw*N=@d5n<+)}rz?dF873537fT@<=5?+psI z8w?02#o~b@*P017utpqkqo{)8E6n@Q)afD~v_OrA6R7cIvrv(YyRHcp@74znuGoVo z1}#H<);rV-4|OOi2qm0121*SWgNN2^LH&TNLfnte-#SMHpikPjoNiK4kxaVc3h(E4 zU`)W!>U)3@?C&n)vHxt&R4^S^pPxm7i=IR~f&$eU92l&UKS{O3F{Q>_m_>tw&!TV{ z#FC|^uTG`btFVtOMdxdbergIC95jc`sUHEZ&=v22O{IL}`%~%IJF`{_`?4wd`~d|M z{P!+oA_t@aFL)KC*8U%RkR@vz52p{6+9?oB(2bC^nPtAc60~~n&^;2FuwVTkiqYw` z9SZSEERM?{8P!ElFbI5a()}RvfYlO#$uihvh-?m_{j*9?Oi(6=a@}34&ma;20MnY2 zxl3dYiWAO28Eh9O&lFs^)*)i|zc0b?@5K{DH}taI4Z9-s_#+~c5q>h6QbJw3jCqk! z#upcnL1SYbs7t6e0)QL7La?beHN`DrTuDrf z6g)LE=R%u`b&vqwM%lCX%43;Q`hEwT+Owpaou>;{4ToQeV3JxbhhB|9(n@o3u#ezL z73+S3Jsu{TW@_0EYAN&2pm&F}1r!Fa66Oxp46jTqWPW;{{hpjuc+$i(ZJpJD*4BbT zieQD=D2o;p3%h%nvp7YEs|ErBcdDgIE&y>&VsiU4s$>W{wI9oOs6l(Dl#Br^`f&Y` zqJR6%IaS~d%_zDz$B&(a$^=}7D>s9rKBvoPn@mWfMAqdc08HB|vC4kJV<| zLr%WFsB2vGe!Rky!&YOQ_A>{R(AjxiI>M_In&+3(-3rPxJ0TQX!`Mm9W&aoMcPOJ|$zWdW#{e=9j<|=I9ciZSfI0-5 z^;hMFF`sg))`SQo2*|>Cr3jsHezeXCFXlkh_9A$WIwFFfnHy-fbheHjWK?M~Vu9X6 zLbfCoOXm6|@_ELx}yB!pV z)Omt=oJn6c_YjO{JMrKSRv@&PyLE#iEMq(IAp$=A4Mpg0k&pJcuyKaSn>U8<;?pfW zwuA3t?GYTef$t&^&voMA0qo^4cl!iIn8X!;?5m;Ouvk1@(|byTu2$W%tT{I$+%~+x za)OmFPbI@_HLDK`XQWF}p3hGkIJ~F>3t`!TmX5r$GWg-vpTxC0F%njr5OL^9v@#)% zy4B#WNoq}~Cw)>nfQgC&6<8s_PN<<`OA9FA8gla#$teAGDb?R6D4=R zn_N0a6f3lEWd{M)d<6T8{SdLgJ!D)VZH$bSzz}h^g=`?}s@%wA0wr#$g%>&l)N!)l z2%Vz$Mwkr`yvdOKWx|qRpsHN42_*4cEjMVRHYufrsXcRc18v~a3p#S|$J@~-Xy~Z3 zYzv|ex@G+*F~}$Au~n8HYC%ftuG49N#Gg$&W~*}<0+<3UDd3d!Azg>O+3b;evT#;C1y^l#mbW}SeL>)HrX$o&sU_$gUOc;jw2Ze|oS?giq}t3BD7#-=Ky{^KH>_3` zD9dhLB~xtY&)FuXFco#&djL9N8H~U>L0Z?EWyCwt!eonw+07^|_;YI|C6jiT2LXuI ze9zN6cAL-d`ahBMq)hwhBl{ESBBV}b+E6@iILhi(tx%^+aLHY)oE#b3X7Q%~(Bd|P zWXWXGyoD5u{AMhPAtqB@7eSmWWv(7|a>YnXJugNdQC@JMqT1T_)T8VHtbHq3sTd!m zlPPB|%aHK3sU0@d$h8sPUOY$JKNGO&Buvz(8|2BQ0M?jyjgKm`lcSZfd zg0p{Y7JJ?b9j7aEKi4keW=)?M!cm*RKiU5C!fL90`kX8ANOKSa(40hAT8`L-3ADxD z2f9d9C<*aW9Vn(1_rP@c0h$kPD2hb!IQcz=D4PHQN$R_HnL8S?*`Mxj*W`UeUoO$# zn9PgFuLs)Z)q~SPr5OGrD;CM-bYu{vJ zCj?G`?dAI}c;_BS!RAdoGJ{YV34jur!&69#KqT{Vuhn?{MA{#q`j_x^8&mq@PD%mv zb=Gui$r1>!IgC!5XZ(XRbM$5Z9g>^@@rJolSbajE5jV z>mM_J*z44}4)X@o0GJD*q$DX{>Y(2h!TDC(K>b84fx)Vi&w;Pm8^Jjw#2Tt{=;h>l`j{xJ%)&}AMPa;a z)d7g@@+)!A}!DTq(I#XhS=;@f2(f|2j%MRsc|M_7MFD|X^!&kV--Hpq< zJzbK3sf+6@TLBINv;4cjKjp}#bTCV?_>(>_tJY$Cz~qw^?^G^@L%XT!gsWOK+)gq# zf@&z$UlO0_r`wGJw@~?8s|0SnLbeXKX`WVw7L_t9g&MU61|9e9Gwf%Kys{U5NT{iqT~HBpa5Lh%5FK zk!2HF*e!cnkE_4djRITnX(2#33=OfRCR<*9#p36&Ob1p|1wsIQT)IL zn435itGu_%4-?&H%6V%}!(eMJTYQWR;K{IlfG%1M=MHc1iVEmGH&11rnY0e6Lt4;yMouC6&rOji-n@|-q z@LvLlT;ROVjM4grJ14RB7nwQeD|p-w#eP;Y%)Wg{Xz(z>H)|Y>fW0C1t}=PM7gF8r zKly_J$e^P=%ml&-v_@5vRzQ2;5_J0c^>YCy1YvvlM{Bc75VI5$G>xSJ_bzx0~ zt)TWhLoGW989~+z&xptOrw*fI`R_5M`WNn=uJE*m0Uh3p_ z-mZa5(EwAOCFFW~(X&53ZiBDA8Uj1HbsqRrFPh#o@sp^Sb9#iO^+l5N)3178MVz~TyAzqjn=wdUuq0-v9m zrz;X=75-O^6apt?At4F+68Se-MmCn*Q*E9kFnY{7Lo-q1J>1gy5Y0AHe$WyXqB_3!FUkfQQ5ZdD)k7i1LI7o3k=AL zp{dFe*7e(YB{kqwzxZukzG1phEETi|)H+}(VWw47vNe!&%KzpI<4Ez?vfILRqgg8O zfV@)P2lk89+~w>!{QxWXtQyUsfNLgMD(HZz%gZgZtaaRa3T!(i`m(e>tT|$l1$OcT zb~*xf%Fx`^xaN$K^Wuuvl__An)(Cp{;7Y8R?n>E>yBoblEdLJ`!#HDfK)TZ0##Ht8 z{0+RaEh4dhmgE<@U5B1in@dp&-v{g5sG3rnHqaMp^J;VVfPmd@(RpXa8t4J4I%E6UQKml66#DX7+0^BGF+yI?l9FnU6H9iX3A|$X12jgDzu)w8PjiOIvuv9uk zp#C(tzPAGawnrxLUL(Y_zZfYm(!Z@Z(_$_;(?&6w(}HTU;PnWbwac{vtG|Be0!cAA z<*~yZU>U4i3Rx=+uvb>uwHsGi(5Xz$pADgl`|-yW(sHXT-;1_nxEuOO?6pGjD)qpR z&@{F?+Mnt@%v0pf%P;q~75E5Wb=u0@JllCHlDxnzEq_p*S!Lqb5L3&lCAa$~M zaKoIHq_$r!49OuPLdG-4ZK2oFo%dgAxnEJD9i##5qmrRfe%?rBCDY>8lku)yApZoI z{AfGKmjNOC#d1S`ZW-j$2YtT2)VgJL)h>ELFVq|(d5UB=vu@3IAWZwiHDa#==)WM! zf7@`m@Q-u70ngUoV461XOuIdkxxDbwpOkDFQKuD3JA)Po2kXccOpC5dexvFcP#Z@Hmr2%RP&M5BJ7bwRGZKQ7%J40<~o3IV%Y~xky28siH*)0beFfCxRJ83p4c|veJ^TuIgQXVshxFR@ z3}=;YU2qnV6eEj9s*C~=4#bAEwjSx#lI+xBVY>eyw&ECnX1ET1b};aT)XqHE$QF@| zq)8q;JHY&ct2SODd@JS)AMBtVglc6zZ6d@;xS+P8q7r6xGxH1EN2UG1ta3s^?e)bqkJP?qdip~ zaAFOm770oPoZjl=D+ss&l*yz;r1(ouBR*aJWZz+m(g(hAv@1YyX5?uuSu9u6CYA`LNfk15&4K70T8({mb zC_hca_n{7F9Q`W)3r)XeKLDW`3nuo^(0xL=ANg}iuv+!2z~VK$_mCKGs_)9ADdXZ2z%G}#tu%Rt<=ZWf^0n01j$5F^DSWn2F}!Hm)*nROpZmfHRrakk}Fdy zZm{A@jfJP;$-W1;EL*{Y>=3bwUF8=*LjT_=7zAPsuW+yg))l+Xwy@|q8*o`iIC!#u z-3r8|Ktc4EQA__la9ungJ*F_1pU9EgXYqeaWEyk%td7ZjnsfOqjx7NeNO)SGzabC_ zR-4dkEZ2GG!B$JI*`N^-R#4d;ft$`79QOZiF}lt#_+gEN2WRwqu3nSLa`hcSc*r0& z-?+|TuKpOE{o)l0@lgTBjPC>r?{2@T#)COyEGBlu2(!_%Qh_;L45L;Vtf>F68*&`JA#`VS8 ze)AuGMf5s+1u4-YIYbKN`K3)Vdk}KzZeSWwUf{;skG&mO~&W30}cJyS+`#pZco@}?LGP^J?)p!RYIRs$YM963uw$IP` zqWeuui4R^I-T^0ZWIRY7v#W+~QhZ*vmA7nhW8%mbvcIownY>D=YOuC4ofBxvHHZ4w zB_Uj(Es_(iQZA-I)0dJ3S*eJ_272}nbE~O88&4d7A7yyv&FK+VaP!tV$*@K661@=8 zQfFt%DZ%2cC34{yM)4SIms5oep>r&O2=Pm6;#wQ(GcX)e2bJ6H4Ea5SEIoPk{AJ=g zk2%6Wf!*fRr?MkCR1r;?Y~i0;#I$}rv0Ye3ejE?7URLB8i*CbZU*F*Mk{S-6!bI0cjP4yJ=V6{*u{_h5(eE^)JOEfNMAva+v z^xYVdP~bBOniK_KC+I=~MpNP%lgZUVS2K9!VYOXR;yI>!9~XY)#BCkF0h=7XzUvkR z*OhRt)Dr@@pP8({O{nq`4TUv`n;8($q!?A`#FfO(sfW)cTm8%UVVbQ{yT(cj%0X|Z z&H=V-U5$YUD%z9JI@<}X2V>Z>yjzhnDw@t1WK*p-CZdPY<~b+mpn3F<*ZwAK)}gR=qEtjm!QuE;B_&i~q23DO=~?v@J-PBGKV8MQ zdJXUGWmO&?sj@(B#6fPCcI_F-sxgHQLfG@}sf2Ky8q@+SR2W~%-*9dv-AD%CxyD&@ z2L3ulI)v@ri*wfZR9M;L!t}{{s+Y`P7Zk0DC+r-W&O58s@Tx!TnzPGWJR3F3P`H`NmG5$%>Z^77OHL3Ig1kQ!L|B&5;gmt9bcrS3JHF zONW2_-n6W_b423BTu2ozi-cB^9IwP_CXpCcYJF+@(9yv;7uXooN@I#~wTO0!H5?23 zk>=J|QfA+y&QcXaDQhATxbn#ScH3iA_Y-axUHmV+CS(=iXw=^_Gh`cp4i-Cc+`wK5 z`Tbi8X!k&niu+O^vMLMHFPhz)3*N22D)az~M{P7CNjw&`sm-mtsv;&IQ(tKWG^^x(Uw5@b%goNnF&I*zM;&ng~& zIWn)P_?(sr?~WE^$fYe1;A$Z)B-cu1ilF1JRXhTzW0xEZe#opz7n0_wH*3h1J0m!ZAm5zgxg$&T2t^#a8RO}QR>HkE<5+U5@VmVe`{W?hY@ZvzO zr9|4p@sH_!blk;P=Q}a6PF-^R$2WnfSiybfc$ufWTi;*7gQg2g(WVPg&ie+K6635< z0B%-U5k0#e5EToEdv{<(qw~sqAdcteR0QB2CDk+@LbryCP!qdfb68>D+SiEg|e`p1FDxXr&P2`7lXj~JnH2&^>D#y9J+REN}Xd-TqaHBSgrB~ zn*O;yX=o%zO8tGcJz&+0ytI%0A+M{O+z^YH5Ot1|Dtfj#S^2{~JJA&saTfAa#+_c4 z6s1}J_(~C&R(u>pXn#*io55Mvv>06wwLr21c-pSQY8*>wV5Uz#sCe71BDT8bSLma0 zJonOeHhP@lG*)4pR)a|7(PL-5V!Dx`FXYt0>2l~`lK+T@^&?FRgP|LAGviE+gl*Gp zq3aj+-bjlqm}H*6y)@~_1!5)VBhC~n*%CIPG0-WIKo!hpoW9?Nls>u5S9_J=_E}!$ zh#ec=?5BLrl$|<~8s!hx&kGVq<_k;~w3R273~sHOxq$}46A`=`N){-&(lk)+?#oQC zh^ixTxf_iwC$_0^ajT?9)}B79*x0OsnMZ0Vn!jc@{2HTux*338Lljj@IxFXUn-tq^ob ze@T6}5^lUfV+e3q?q$O*2FC+bKv~xE11maY@gR~Y&0U!-AduW|J(U>Mfu83H{fCMb zL#znC>gJP!*ct-}!vAUt{skjf8Z*B5xpLjr|K>ZS{stnrFab>K>w(@m4EN%s5jj-( zRL&IglUJU4@sr4!s{iB6n$cD|=EQI0o_3sFz@5gSF3q&8taaY!t<*3N-zNkgSp62k zCpS`Qkv+Yz{Rr)Cz|aX9OV7!~1wkqGiORVFWf|(Vm=q=XrGbrsUiF0CPHW6DAl;)_ zPVZ**y4IH!8@>QAu{e-xsVlY$mh8+{?3y#gK9ehVKM3mj9}qt z9*CKzC{nclfyI3M8Aom88>>L^Pvv_<~c){Fb~(`{jbpitm2Gf3C1{-s9ykR+PO_ckc3q zEi1&4!98C}4WD};X=BJLAm7ae2*3Id-!ckFjFETMds{&aDEF+OOH}>#g-Q!|muaTx zs|%_mR?#|X>G>E~;Gj(y&(XtKF`<6|cF>YT^C;j34N~)gFBRCzdzc`rI^CS4i6aRR z6&9ZFk#a*L)9EE>nQy|5sT=AZY;h3zt@JDRTE^%|(rsul z11+#!_5(*mPKgnZjjXUd1_h~wX3OZ~n~V}Y2VF-zf!1;y@6{k6IR;6DFopS#r`wzY zh><}e$7}pha%=k&6rRTs)O3BAc}tKB%;nf2C=8XEtHtnJLzV4WL=Q0INRN7~t0_qb zO+9i-3=9FmvE(g|qTM}O(LblmW0UvkLBu4E7XQNKa4c8Nr472jE`*C^fsw~ zW|%OMREQHqBKOFK+MmIDZZNk)&OH!f)B7VGCygU!_9b7r5$bM5ueOCz>Hw?otH5QX zxkRB!$yQP9dQt3VQS8=WDibqkJYKAM(pcoYN6~%m6d~NE7AB`lIc=xM1xYNgh0M*Z zziWU4)~-Vi*xrbLiubQ)>3q#YL`B@BfI0Ma2AB{7}x}=YV%f@9J-KCbXqt!g#XS zf~g>S7NnR&JTa8{J9^~-9w^L;4y>Ddzp@XH{HEnpu7q?7kUeFZydyXDDQA)ivTGXp z#<8b-J|h%hWvg*LVY*!D^Xrjy%xqGbeGK`0hKP^KM(s5Yt`8#3o}T4<|K4c+#zU*Q z>66~Oz!JG$H1kSJq}3o%HA?=)uTk}39=D^6Eo-vTc!ghOb8A;Z?wr z#~69qG&3KikVg#KKEBV>cA7G;n3Ux7Ow8gh0McR^CYR#DD85<;n)C|;p>&bJ$`&a+ zBMVF$d?j5UnDN0>OX-HPhO$f)?$0N>%@j?aU@0gY?G7Hn-cUSFxNTFRN@^-J6JHr5 zX?!SQXtZEHkqMu{iD^Ir0jpgG^Pdlel90He+MeGn!`pW&ZI0!G9E}{~APEgx)OTp* zb@ZgP-|9+B-b|y*gf&X-;o^piUlNU+I+EBk!(QIZY~Q5n|J?HB zlQ9Y_sv;Ex*8gDy|6i@F0=WVtln*7N0fA>!xeC+ zFEwG*uKw#AFxidbog#giO$K)r#{Ee=XaEs}zCWAxnPBO$kE5-dN<8Wdg|2e}@eeZM z=gh)pEm+i&bHi&h|LrU0##L}Iwn{+uV(sf8)<@$_VcyuU*(~@xVOa%-D$8`TKDb-R zN_E86`Mh3nm%s0QsGis9UqebiO|I9KM^@E67qu|Gm1?w?8IP%&`&NrEtaUyzvW$d& z(F(FHzMQ`zd}{L%Esp_?2K+~lhA&&zKy7;s;`0EMy!>-}>c^d*U7NU~)z{ON&)wO$ zO`5)vD*~^s+>MhE;v{D`rs86Mb+G5k>u=dO>6G|%TCnNE++5efZ6o`rnp71}kDJS6 z$7!8``6N#EXJQ??lGj4oM-e~e{@2G;HH;Jd=C;@u*b{c8_}L4)3=Be=j+~);gSGs4 zOLdwQ(op{pw*=r&Mh(KuL@&UOxA$A@iz%z7F$kf~t>{^TR*>xQKHC&wd$j2ZRFuEv zZ65n>(gqc`Iyd1=@@$)5-swf?d8&!|T=|T+RSQ8s#7MO_urK))Y%fZe+eaM6Hv*2- z)l0WxNvWk3VAZdGT1wkVw%=@S`-fqx8rwa6mpx~iD4M42PTg`WEhlW|@ zW44^gBwBtPc%Q^HD;h6KaLybS5>~1UN7S^8Lok>Xa(zcN#Av12bkOcZ`To$EY)J}A zDw?2Vnf~i;Q?;PhLCf~6=Zp$VzY6+L%ssr5iZ*NMO|%iJU0CO>TJtvqJF7F_fU8O_ zE_V4H@x*MuO~^4;N29HzDk!wGNd(eE#`nhC&$ykCJVc!2*1^`3{zsneZ)cP@iI-1A zcyh?1#RQcY3y#;H5xs{2ubo;5M)z4NePSV#vA6KBjS=C2h5aAyQk$|5FA^=0ys*73 z6fKG$fleTc8r&N}Qj66FM^D$9xcAq8erj$)K3>tBY&dCN-&}oL9e?qiTL$@Ke^0*G z#kajav^oa2TN~f|_Y>t`V1hb$RC)~^pD1HxJG(0x92&3&;VYgjz4XMOeI-OyVL%is`9%d+_c<1zwBmj=&c9CyTuH)}}h zqePebtFSK8#K+TlXh15t`=jgTR@bv-3dJCLXT)VJxV}J}n!@(sy6M8;lEewJ@Dx(> zu)=v(vvaet7UhKnrEc2YX}nKquE^!C1?u`wiC{=ish3*yY>${q^!P)nr)ai9Cru-dCEoRr zwJFr0t?=_hqHCFx9VgK;#3X%-aq~2|E?c_>$zG!|wW~|lwXZ0Lz7fNV>%~6VdqK*`Z#&KFeKL-%%m{zygnZ3#X4W^KI6$$?K*9V@1gyQF?9^2}eJ`2;@Ja zO~Ip@w$PnZG{h8fzcZu8F@{#xFgZ-K{we;ITJ_ zebk2O|1vpSc8e=j8xG7*8MDw!sL`OKT()B5$D=4c0w%~$ zKAXiu;4)xJ<}25SzIXA;J+Tqn@{msc30Z$xF1R@Fz~_7)Ypw}}jn+K(J(nW@r=fM2A{(L*FH zpS__BI8CGm(;cpNIz{%gr{}A6qpAq`3dFZwC7w^0FHwl~^(cL*uJu$E$Ik2y-`kRHphE_A*P`n7v z4>R@*e#aoDjk#60+b>*V-tT((Ypk{B8#d8&D^;pD1uH&gZ|C67Nkl~u8%sVL#H1HhU%vz9J>YGcGzFT(v>c8*}5nxQ! zY)3$PlKnkk_eVpjS>5tBCt+M)-1#%wEg;fKe-cjr;crHo$}-RN`Mq4Wuy@`Xdq=RvpXb-4s` zT#8a75?>NUWpU)4<*>EszZ9<9k5}|;$r5;v(sTBUQ#!NJ}BZ z;x*=tuw-c&3KYegh6BYJN9j5Uw3o{+TWLasiN(KFIo=n{+b$g%L}Nw|gt>R9MiwIO zEJ# zc%_g|XiG&YOkKOuMf$G&a3fIUwvg~T)lIazX4uS53%X2)2HvpzW!(t7caMWuJ{<0@R|Wn$ z7#!_fZvO$`4sV&aFe*%m(!2?2!$Id_WDzX>2uuXS7*2nCI$(=*Kb*C4Qpfk3=#R%D zkp&set?_8!vUR5frcQ;EJioNB911E1>DAG^W1Kj3i#7Soh|!riMKL5zodSREpej$! zX%BN+_?n=k%F6|&?sG^=Z9s)hF6yn>AOE=3o|R)V>UdEBS&NWb$FNdV?(hvQJHYyn zID}biWTu~dh`{SUbjBXgq1|{bC4ro1mn@TxLL2$ch3L8dxA)3z^eXL`TKfQ2OLkBw zkUMj5E5dD=_b_M@x>63W7)#AQz-i&mbnnkbtdWg9S~;8BQcu{L)H7=B+LNJ9(>58I z;Wb(iYzq19t(6mjHB}44&SXXha$}6y!>Uy_=sZPg4 zvdoxZM=xnMr}u*H9B}ip7h>KT94e#8$AC;qlf$-!#yma#RB&o1gM>4kTBZMMBAO=h zEL`Q~_Mm$MaV)7`P-Z*P;hD&wWutD~KL%_^-!C-B+V4|}SGdzb=0K6}=UVoxUOz#V zp3_E(;_)#jMOd^n2Yl4=u1l~Pui;jr0bdPyYMIf(P^!b?D_>Rt|9aPbP}bqecYNv3&k%abK$BJdkQ9<22$|(yeL^?E2gn@DC-#0{fAA=zB#W}P>!1CK)ucNT z+Cm5ZK4_f1j%Td?+@Wv*hu|m5GTo!__2bfaeHq6#Ouh74E^NhBcO+XibL-vpB)j> z;wU(${`;m5l(aXk*1YKSl7FN2Y)b1u2^H5$+d~1Mwk%S>Wuj<0mK$B@P!mGx=p-na zMr~H9Jo_43fXpFoq*C>=kxXvE7i`*xN+r^Aq;)b9sl-<uo3mkLim+UJT+q1o;~)Th;|B;$X>8dHj_HTn`0qrS3A`O1(AE*>#m<`;3L&rQ=& zACls*$L))Ks8Hx$Tr=b+eHq#EyrdmT_54y%#;q?n;sS`!d)#m**WZHwU*&K-bX-pf z0R$vT5(Gr>|BrGg;cEX22p#I#{oa>A`|_!n^gsD^-dZ2svSxby#E4Io7+S9$9w0T? zrQ4>NOb?}t*@GheQo{Ip4d7=(10zQXBj4^EQt$F8?J9de&Ar0qczJj+s#{$A_m8PB z;Ma@s*(<`yp#%$lm#{lgCsmut74Oq(@{!um0)tW!w;6IBg4a+0j4BhHu#x)A zTEIJ|Cu;*E^9q%5>kGPjA1}ZJZ*CEBYlYX)FR%)nx)(W{GccWkzV}xWx`1(GWLj~9 zJOA<1&pn7ESYUZj^2{;De`ElIli_&g*nJYKfu6K&5sdrqBG1VYi230xuUb(Non4Y* zHY{j^%tqM1`zJG5yIBt_(znE6K|X?=&x80bYTUOGG<$NOvVD7Z1~t^FLhRG*&PA{) zGf5co(u7ONV!VKPLV0Pab`+3@fa69i6%W`K>iA&{00I>q++JbrwFhXlA}z)MB)o@d zRDNO-5AE~D3D}?vjTKtQeL!eMQpW{G59*!|0_dpe1&?2&P)=7g1orfJ%sE^9{k+c! zM2t(}32e~_&e-Uj2Bb^AQJaxPRh#H> z()00$a^t|9AXQH{I?Y>zuB&>KC9e&eK|+Q6jV$nyE`+18juuw5jpram*_LHL)Oi5j zou7$yYs;4cHGmOFOdQ(MnyR8)lfnOsv~vg&Em+cU+qP}nwr$(CZQHi3+qP}rwr%&^ ziI~mX&RbSgRMev4oT|(}zds#J;K0)m#L3)Tq^~JE3tiWrvK z03rqV@3Zvs<7;vWQUu&?Wm(3Bweg+d6QbQBk|3*qZgAry3Fc?V#$jdPOET;a>?{Pm zrennwAAV+rwpAjKpcPeYiYn=#3${YP2>tdDyi}}0K~Chz{}q1mQ8^s4$kgr+BpW1v ztBl1Pv~=i7A$#(sj@LCN8ia|*c;L!Efh5nA!{M+as+4mQMYn1fXUVFA9K1ak5pKUP z+x6YvZtpqYW8fI$*~0jgnS2*Bb9@rLrFhiUt|D>ou*4_GHu;xNHHqI?$tO^9CtHf# zO9gNcS)y~gb;Lsvh} z%*RKyW7NxbgUht?P{A4rGNN@9#InpJ<@|w0o6L()x~5q3e$@Wx0{4J46k9Y5%e{45 zB$|X~YhuyI1c(B=Mu4y(zUt+S!A#CNvG9e>XD(FlhE6-*SMiLJs!%=l`x=PGtYGvvGo3t5eMXH01#36UUKVs#S ztVZUfl|X0q(vk&RCQ|-RC1Ra+47rXoWC|Jwz-TJ27icHS#Iq+Rn;(5ibAEj9p`o{5Tr#cO+n{2MkP_>~Ewbuz&xI;UN37RBBVYAA>?X>A8*!JUT zr`*hj={D`-DT1kmL?w8@zeuEInKJw78KPxNof1)XqPw`91Pw;XhGoeFcasv?$fQ%g zOqP)=O?VJp=|Mg7vFDgs8cfIuYa01GjK8lA+v^H^JPV#-j|wNQ90?Vd9|;c< z=}Pl)r>UhRO$Z9?!6^<`PITu~#d*4~CWC8KDq4|*^4+NB$vLLNNA|+D(mD3SHk=UU z(7;eST_bxyjW{_vSB7{0JbVFk&c2ZzOyl)VGos9w9lW}iCP1NhW0QjCFwOm&2lHb4 zbh+Q|U>RCe9xEGf#o_qL?y7-wZ5KVAvUulex^S%^H!Q;wBtv%yvEg?1{~_Z_7kh+6 z_3?YhQ#Lv78*h7I1{t$R?0U7NJ`E<=_l{V8179L8&POiVF;RG;D`3?xlWje%#qw%x z*$j@&3Apa~ucJn%jyit&eJB+c)^t3|cY^O>+ik^Y*h%l>x;7QMPvRFIItvQGIXm+* z)GW&pcV^1mwMS&d+5ACy`KO`PQ}rw&fA*z{)A7FDdEes4`9t+|8`mAtiDTmhqfXecZ)ooC8kPd=-{gr61X1|esHimD7&qaR{e-o~ zDm{chiVdmQsM-%$Dr1+JuWWB(6k=b@<&c^|qF=ZR_psc;EC=*AYilIMG1z7gz*s=B z>GWyE?uP83|psT%0l0w=4}w_FwJ`eeDP`*d=H&#y*rH^9>6Z}65o9` zD?f?;tUB%>N}d8p@WrED^-9#aTDpro?Ef2nwq5rU*xz2Q0(+-T^M%5$H*@&b!S4D} zsmJ0uSl$Z_S2`eGc%Ew+mK$!Ee13IyeTu!jfI0Mx!-<&OqOa#`l6&NP)Gg4^#hw;W z<)L3~9lkqXg52izN@tC9nb~c8ZgacxSC8K7VR}m2|KY)f#!$aO!Zd%^HFCy&&uou= z_3KP>H@xIA&b)bxIsU_v|LWh-1T2%h$-w)o_R^c#ShLY%Y&N~w>TNc9y8X6GE?f6J z`VNJiTq5E^DhbtlE%^E6_1FJn2s%1%fm<`;yR6kwERFIo={MT>K9k6Yd@7D40C-hDkDD!l-98yFyt}igo zP4Qbf$XI{iaF1#7ANdzOZpKc+6SUM}h21e-%)ZH2n%ft(t2HV|>(4j;64gF+C=MO= z-&aV4NxqUJtCRhxC42X!%zvJ$?0%nfkY`m@8Dh`mpbmbAybFR4@6(1G- z&^*ZRkC4IkI|TRh`*J=`pSr19ZH7IbTXhQ1Hn=J)n_ zHs|2_?+fqlrM=x@5*Ux%+_^LKA9k%K{Ob0i6Ww7%r;q53Ct_VHd=eXI1psB`XHlj%?IU;cpq8LVjG z(*|850sw&60ssj7H^GXeowJM6zi37GpDlYw-ESZBHyp>!l^*vYiQH!M*3z2pm>SYd z_DeNiv&K73dR4}HhM4=B}?J0~y6kuWe?PtsGHIR-MqlTutx|43eA zghI-=m|SGZ4lG?IWuOQWpa85xcxod!`W_)K5i@7m?JPq`Fjw9TIL-EiAqaR*Kd~uD zsEe`5jh_b~sj1KeY>r3&*SMT&Tl6MG18)f6rpdUie2ilH1<_!#QOO`HX8N3Bmpwej zy~yez_@OtFcU)TVG!>8_g+mGU850v4yCF4Hz&l+VV-p;Xf4~bo6owBLIf{65@IMF| zL1aF5cJe}q4w1TbW3;w4+QILBn3oT=8 zB{^BOgjbD zC7;c07*3&{txBB2)DcpkqEu^Z9&6b1QUQr+3%smU+g3WbSgo3_ke&5Vrrz?zn!_>^ zsjICr)e)sy3I+ia1TOpjqrmn8q!6gr(lTs;uk}f-IYc9eSORRh>diw}XwgclQBjfh z5Ezk+r-WwPvD@gD%KQb{tyv`b>m>F^e@;OIzezhrLy) zNN}e_t`qC0JIc5n63DW8JhwBa;k;>?{w!RfHvfFM_kw1k&@{u#NYrD?W-SgGl?3_g zhOgypKHt3iw5ub-jjJ`S(A5gIC$hmMt`XGUIp4Hp9$%*+@7RyPopjb8VwtG}6yI?> znjs?G%JmkZau$SgM?8PMd4V%t?f1M;3>Tu=M90PKjK@+`IDKR+7xel4dTEIq3SJ}_ zrwL^{lxRZlG69%&;AWL40<5`*dA2Sgd;lRh+Cfiv;y{k&%3+Vg*nK_PcLXSAjLz*J z6plQzC88b9epjUQe!Qk%`iIxpFaoc|;et_HLZ9|L4y-+>-}$2@#7IMVV_0R<5y3)HtV81BvQWsyn5w~G{OK2$IP#$;C!}W|flW!-dO_A?NgU`vei^KtO51kS9i|?o=DVvlS3C zzDy&nFgijJy_Y&bmzi8`5jk}|z5_gvUR@sh%VS>D;XX^Zh^NDcOAf~@!r8Ba9`Uql z3_YS4@tsrgXh+njVq9kY8CTt$$zAK(@>vW4g%z6tYy%HWogyNFVtz+Q!nQKOMo$7c zFb~bahg_RO2acG9wuLIH6h)f^RVzzisfjmA0GQJCx`lVHqB57(P^DqYQ;Zxp(({n} zo8j(V-wF?BozM+R8B*;GikBYEH;p13K2v;}l<`JF(^OO*M5>St>@}IriYTOH%;ix4 zY>gL<^P2_0*`|ARqmBZ0odCj~!Qu9wbi-lE>Z?rK-^`DAgoZk$_()T-f?yOtVl*XZP%@z;=5D}TRAzH88^l%=}06L({3neE`X9SJVDP7xrxX1SkY_1kS-^I-uw_=RzSaCi74UBX))t`$YIK4#pwuQkHR&=Q4^?+svg= zDjE_4M&ooH1mrkUQgj#Sw|bj|?OkV`qm3jF4IeE@EoiQ`ac6kr9_}ZZHn!wACmqDw z3-pfSf*kQbg5y{G;ehzy%}W5}iq>udaIUMd^eQNM!>AW>Azkc*?8+^T$%?@_0O>L! zUqLKnb_macNc~f9#%wLcXNU;h5!{XD;RaoH5?lImo<>lJJERu{3de(E&uUbzQbD=X zuClj;$G_2>e1Z35cDafuS{h269Wa}sB8do2#L2~MBkd`+vP^lpTJ5Fz7=YY;8u(wI z%T!gC$`PAm)J9h{5A&6A3G=1K|?3B!UbKH zsr6{RrJkp>fc85ew|0=L>|exHm3sF%n^WE(V)1Uz3aj89%Ab0qe7S1rdhoEjlvM>X&|3t}BXUfW zgS_F7i_PQ9=(o=lztK|e2 z(hW?qhcc<%v+X&@x7Os}ldZlSpt#pH3dYU_pX|}661xDmYmY_&dBBl$=rq&R&>|af zy)yav$7HxX7)2z_E0-`u2nVUSgo)H}mPGhNkIFtwCQecP1DD}Hs@p^*1ipi9)?xte{X#o4I}Pe5aM38+_@+?gSZzADTgoT=4oQoGYaFOjt;v(J-$b>t1-$|S0g&kOr?bSXH>Y`fNa|hF(B|rB{QE8JLzt& zuXz5_AA_S)etLR4EY;AhCrhjxcs!o9ETxQ1zD<`&;=vR_3AMOGM{G(HMllm+Nj;5& zWQ+Y_b&m{IG?PCEYTYkY$YVoGl&P*pVrB90a*t?tS3-h${WA0jwzI&Pa`$qIC(>^Z z&JBC!{bMNIK1W=IO&X~t|7Mf416{v1(S>#U*i^Uwtd+^@LX5Wg!f=#+21#E5WjIn{ zc0nk4V!h3Qqw${jcX?DW)NdhZ+ykv#RXF)r!1oU$Epk%$8sNl$vlm>0ElVl0fk$PU z4}6M9#mPWX8so~YHkB|~@tE-O?tDV4tJth-_55gg6R?f0qB*;wwKxtvn(DeiUN@4j z0e2D|>0yW<#$*E^%qNhhF%EpErz8fO{`Hs|QZuPEYx3bc3|%MoZ#e4Eq}!WyWe!}e z8D!R-lgBC77YRceAyPTZ|BwhNAn@?9jFQtUbj_htG=(@QQhI^*F1W~GUinoD=1d{!}o1)Q~BYys6^eO+9L+Rt+sA>XsQBmzM zs43y&!bvjr#;EuDQo%4$878LLGn34mQ0tJf1I91sl`Ce~RnUw_$od zn4Y$u=e=EAue02eoAgkT`GE{sX8WBiVcJLRi*5g_W*TIMx7AQ z5@lG*8F5HhJ4@9wU&1Xm*ok)iy9IOGn-aIPW>!+e19r+k)Rec_wedU4+|(;Rwzq-1 zbDjW1BNZ)25es;CMiC=^(49f~FSOYGXB?r?mzhT4C@_?)jK6ICb;@dF;JEv{+?zmu z)b#&$Cw6Y6u{(c_#8++HpH^38#M^xl(`eVThs{iM!W5HPgP8#Ru!c+it6Dj&Ju} zG4oV^Fwphh1zEH-C<9q!hFA&L0fJi{z^4Vw_U;_D6vzJX#;3WhUOI+PE%RFig--Yj z5vMkbEdTZ2{3KpOr`EiePJ#-Y2tXfYRM9$92wL_fDNxaM&p}CIJ6b;r`GCPiU`*dP z?#;!zfGrCxVXpd$TNY_TQ((Oz@jJCS9R)@%~u#xkN>Ib#{N!a)>bLOrDe~0Lck5Z7ymu&fhMv< z-}vVqn>)(2n&+tT8MTz~^Y6^n+27}@jvK)o9 zxj)b9eY-~6+wJt3TnfYIHsH8AB~G+dGlj5ydvOx+Je-jD7t zl4!@tVUjBSVtwNhxv^3cX{4CCLTPyMO5316Z}TQ>Zmi9XdkXforfg5C(=})jfOEXd z+~x9&5>K3-c~9+g+FdMxN&gD8`%FpRuW^bu*groNOu~P`|1*`OVrPTo3=IHKtodK+ z-pZD?CUh1%I=0GNTxdVLnLpvoE}g>bC`e~bJJMT~jxZi}di_n5(`|>0ae#BK2L_s; zWm~_!;!Tfc$kAO9xXv>GaixzBIJ`-5xD(pglX11Rv9W9Q2Ee^KVTu4>cZVbn--wXn zLo=5(S45D((t2gD5t0J&$t)e-YrsY?Tn;E6Lj-}qDRWl85J*^~#sN#O+1F}rwr8c8 zFE8P;XP%M%uv@h+{2qpChB)N|PsxkMm(SI;ur8iX`623Slr^8QEIS|Q-G_MH;4>G3 zYgd_V3!dLlwZImNAVqYcBn5&G#29u_K-3svEV6^pX-+=79uP5L2yuaKtFr9v|lcwy;T z6j29T4nCo<%y?ls5m1GS2|r{{J=7dxguOXlM`OY@6BbblO7OhLR6Wse;PjKiL@59U z&>?>F!&ro&5YLXR(QIQwLBbZx@!bw6B-zwBg2B-D8C*dG;V`-0c=`mwnbugNeAu9e z%h_xjXl-IK$B;1z$&zQHE_kjBIy(16F_ayC2vD4Qd@o{vuaV8>ICJ%p>*3=#E^NvO z<3R$4Q%`B^pG3(3XC!x= znF=gNEYcjYqnL#hxtx83Kbzv~o)dfhKUJDwd+&{`9IV`8;4gEH^8mgMK6aVm;%qpu zow!3p1<%|bt@hd{y~gl&gIQt8A} z>)mtXHu!CTr~-fb^V~QZz-8?;EU2Rg_W-=YO7Zu_ZU0_nz5HqLG}!dDy9I!?a;VX4 ztK`<52{Inz!b_0B4PR%B++CT@Ti6hxpJ&1-7yAq5RN~qdFW8lTev!55w>Ex7xEp7Q z**Oz9Gv^XR?6qMF#L4E8oR47+CbU@dNG2wBCb%=q;n+Z=77(|(1c!LsNg}W=)oF~$ zd-J|0KtVLi*C@Ny2+M&3!$tHo+#n~rL*PA+i-5=-jv?D(WW5bo2L>EI;?aAHkQ~kc z?emw7W{R_IMzAli@hwWQNnlN(n^=hH40?TC0r)b9`s5yAW+9|r987O4>{cFeGi_8@ zh#{)8M+5cRNZ}f^d!8Mx>!fgD4OWk9FRM3e*y4!R0!eRTdfIZCe zF6ssJ5ujzZa$;wW3fgrX#^{7*aB6rV{()?qyQ4E$p6lyW)+18)oe9TST@QSX)fE>U zW(^eXZieK(P7H6}I}41M9p@8qXaLKhO)42c+@F!yo24FL3F?3eu6&+3vNX^i_st)m z{S8b!<&LSHTdd1M5nm&0%KTbyjCU|-I@>8QVM63fa+u;*6hD|7hiI&!tbSll6xc^j z)jNWwzyZf|LLtU;6Eto#k3Q_K&K;j*E|JuvVo&y6Kx?cRGK@DfzMTwzcZ}tUl81x| zdFCM=_AP9nN6Lt8!ihp1gfEABf{8j&VMf(i&#D(+VUipsr@&)1KnH21K`M&@5k>JH zx=kT0cnK~oqWqFBzYJQ7V(gaVN#0#7sj{#4sxg<)0G?U1QQUh`7t70!6n* z9G1#)S;Y_>)v3DzR8yQvOf{s$j?rMXq{PlqsXE89R(I-sgPg4{(JIxc?GzJ`HL4J& zI$CH>CE*$x;(I!CZ9$0(Tx##JcQQy^u`UFz%4u0iF$OuL&ZGol*5OGeq+6$1RAF*d zDsOQXr?$=Z7}qDeOlPLZ>>v=PIwcVXJI&!lEJIPqNc|vNP{d08nlp65EE=6GdkXS1o!2VJeJRCA9x^&RS4rTTU1(lCn&ghZ?&c#Mnv@!m~1bgcbxJ*3J#LAoZH zb3Jt{GODa|sTmRYjB~a1e>iedu3czhrOZHraEW2@NCTqfx&>tXvWyDLQfgKt9s@Bf zHf?CE#E@9DA#*3HMTi0d>SMMQV4fgKxoafIY~aC-5t;MX=R$8!oo4to+0Vv_zZ;fw zqN~PO@V@NqY+E*)$jGRWC-4tgZ5J9IxCh4$*cbSo_K(4(qxeKW8`j$!;%X>$CSY9- z_CDBKtUF*}&#wwdG}to1+m|QgfKfyggarJjA!$&i6VIK`>o*MKuA@Bd&$oPMPl$oy zWn9GXteY_w;c!qs);n+_0TmAt=M^`XKf%LZE~SCxi0=7dE@iz(>qqahYY&Sz4t59K zC`k9&YFD`jFy1`_+a0*DrFC0nmsy|n3v344GQ8nS$-g$sdTa2-#b`v;ghC@CrmQAa#Tk`Xni(HQ zKjZjM6jyOyl?pwZ_ad}|*&l?{cqCOg%9r5_iqMHG2!%#PO;}7Tiqk4DG%~7*aTuygsVj-~aaO%eTo0-K`E^XrrS8vz?nNknWv}ldTcMHFVUCxK|QFsQ}~?Xk$00uS_;XRx;>1PLUjOVrek1J%F-uM#zwlF|L^1 ze`|hysT<pv_+`w7bMnl)~+=O=54FB zfc+~!X-BO!)i$M0K`lC}PPUG?mth^vG9})?x;xFP9x=Kz&#OY+tG78S2j8p9L)@#j zGHm0~#{yK`dHmJ{8TA>mK_MMTof=LJt=PV?`St$%-2JLb=-u(9r~5uII)M4LKTw^f zRCwHdxG|c!!2GO>hH7goz%HW{OSwgS8KoA+ttHED2+?cpee9sqweq*GIdk{erJ86< z7ZqLVh9ts5aiVzg;_p`4bLzTsx@@Ftm!@ksqmzHtp7Tg;4^uMYEwb-{F{`~9c`i-c zK20C3eczT*ImK`Bdk0s{^`FN&!9UV`gxC7~5?&mahZnehgnvMv;6Iz1;>SCDkj^Gf zi+Ele=Rbp<=EpmJls;T_SwHbML!F%#RH?Vjtfx`!g6TASi)gNQBP_D=X^NeP!rMDV zZ+nE^8X^Bk=C7k)EX9lQ^{Pat=ULbH$mn~s&^JMR7xwRUeM8h&Y0RAl)$&!87s&qMjNUSaYyFK;!zLD&#E}M{<7(FUo}lLTXahLP&oB8DC*}{ z)eOpd#`g^Bv^tgcG=KXt^@P8L9ebGkXJ|j`pxjLGtng`G~+DGFiV}+kHT+`{1i}oFwMQ{uy2^oT{#Iyt-W4t)^Pju*o5} z&nFSsG!fDV;Q`UShMUH-Bw26d-p5D4`=}UOG3J6&=Xa^YsO6F(Zk=apW9#!i(oFc{ zw_5djN88=m_{24=FMX?lV*X_t8=6iDh58HnpYQqnoaQf80ssK2S^xmP|GzZsY|OyG z@V~_-W-ew@B+jW+Nd+CYYkT6RL!K4>B*q&MU@M;I2& z$Ss1Xp^=<~NAp^_?49g4>Cwi=B2l?-3m?&!t=!YM1k?=rG{J|pU_Ebr|JGL!l8!&o zgHzR{mND7=o!?1UN+81ya*}g=t-RHr&+7fT2*zy0EjBVm1aL)L28%`TIR;3hQxx4A zw2FNGe1z2;1p7I|(W)$PXSvZ1H{$Lloe_11xDT834kq5Hn`cbNgRNRMvcu_oW%VF1R%C6g@jQ4H-0L zkVW@KK&0yTNFtga0Vt9m=+W9f!>U4&2tcd|alyD0h@&Q8PYE&O&U_Pq|IDH@@%6wJ zrGY^(pgtr50uqu@1H5r)LL?_BWzh~-Tp9E~BvY>iZE5yAMd}J=#R~bOnQNCWga(T+ zA|1X7N^bWb|M=q)klFA)in_&L@P(uS8(;>Cq5zk3J0ThvXF6z1fkK`jd!QLy0{pDa z|3E6kbi;z73N;fed-SIu(3efkXiZAUZSn+^*Zp@i;M^xzdi2iuFOef94tE=XwHn+}G|8 zX8&ap4h$Fja6lPP4X4PWp+v{iU7U&b7FE2bd5569ET%j9-2(Cz};QWpBOaoUg^5KwPBvPb%Q zpCrA}=>yLcIq~My4yzzVD@;)RpGy?iW8DCfQ1e@Raub!;Tws{`poj7xoPOYVq&ZH# z&U?@}Gl9mj76|ycF#-!{Do{M;1ub)wpkf9-%-SPw@Ce}64jIl5wePg=!Y1IJpzqhC zeJ~n}3`PB7t6n(U4DK@pH(B5a9{GYay}g;CKR84JYGBm?r8w>TMqqiIvz#80A}v{< z_ki(heKSH3JpQ_&h!q=wN-4S}u z{$4sXxTjIgXVJYlJst6HBl>;vA{4* zKEDB9cjDD69}mG0k2ZN_fG7}b;Ralx>4Y}(5YUm*NKY1LF?TPdBCHa#A~B;!Y%%Bv z1(>7hwfSyJq*t?p@(H|ehZcz}#;J87MpQdG#P$H_al!#2%t$O9!(uOZY&*v1CO<~B z(iKZ%lFS1z1+XH~E3nczii-a4#HeUA+EUdcY+|q+tkPzQ(^>tPU3;10*)J`Hb$(Jor?0Fspsh#Y+EkR zX;*NcTG9rxh6g-QL8om-q+w`8plHiD2X#`!W??e-^Cr3O4liNn4bJ5Uc1}fybzqzX zZejHpCZmWb5-WFZ1)T^PN@p1r7!;X~OR3*ZGCT7CH4P@Y#s0F(c`E0EHtTTsE%7sZ zGWhZ20w&M6s%aa0Jt9 znst^#y*eMp^EVm-^`PCBi#YG)ZJrpPJKRFXMPBd5==YKs5Eze!&abUZ(jIK+v>U0L zuyEn!#ai65hI|@tX1@8L&JSSw%k5D@8mE;4eZCt_a0Ltx1)^a&lS6xe;t8BMIRg`N zdct~{CM^4Xr{)ZmT&=IDxqg?t(eMawIqquUkvjSDm`L<~UWu>g2K1^GrA`^(iKw7N z`Qy_)rLL8+;3cA%$Dk^sbc*u?x93@-RisiA5k<#EQv2e7_!H z{{Seno&_&``olpwB}y%F@CZaqSV#5(m;Kcs06gb1_3(aIZMX^Q@ z0o=(8WqEA;zQJ?BBIpO7?)`vDL6P>7Uq3TTtQGFz9glG@pe)7Wj|e`+r-|b%>=*Ng z-#a1Arq@=lalJ<0IP%>O{5iN2q1|Vl0!6P9xl3>(GiAap=}LKW zyb~Z55#q;CN}6~ApB6PjqKXqES4gT+PnG;RDW`0DujH1X#xc{SGWY14Sox1q?mC-F!rQN=p1AmI`X5*>JFxnqikb#|H3h z3fp+OZZJ}wB*48sp8-$(8WY0|4&2pG@YpbJ$zmqD0>jVcwzDs2u-zxZS%c60oI1w! z)O^VHdH>3ru9L(Ewnw}w@x7{%E%@qi6A!*qObe!@O$~L3x@Az8Qb^zqKjSImGvNiz zeQZgKGF>gMm@e-q=8rRkz17h8Z`l(9W4rD@oWMdV4G(;@lp&a4gmh1#>M#M3(r{?a zDv?YlI@fg0L@iLxsPc>Kb4`*|IV<~gaNW6%&di6LoV6~LP}&B}x$o&*aAv-6^o2=Z6rI$B^#^x_ zY~kg$LVO?#MLB|r!hL+Y`H#y+DKg=YmD<`oysb>b#aLTGnz8jTz#4$iu^trpdjbkS82>wpnzpKtG#z_Nh8GhXZE? z3XJ=H&>ItGAC;gt{5y3g&sXFj^7nI41kBL}FH>JQMpQ|?FuA}ziP1T(_fHm zmQIl1wmi37cem=SJ-40@OJ**cT0C|6ZT0LE*y^7xA3q!yPh2%OyX*4V>e(f-*FIW2 zzd0-)J85k7*5tF-uuEpFeK))Pa{et!W2?U`pSgtnw}8<$jl=6$iEm3ys$N8@zBgr; zOvy`&5}$8PJN?v)a;@`E9)xoKrKt}4+%pt$Y>6QM7sk^K|GYXxrc;RssC{x{hw$2k z<$+_IaClr*9Dm{bS9L8H&Tvh2?HtbQFaArd$6*2xU!OYeBpfA&q_$BJJ7C1MI*#t*n) zfg5DI1Oi)fc;6O0Fpb(ZkgVp^0m@-pyOH_@K!k-r!{s59aX3ql=;)b7@KSusSqh&O|dh=BFz zjFeYE`qLgiFI?>ec>pkUH+{2O!E%FicS!I7#ra@dN<6PyGjgomae1bUnE1{t3VrHy zm_r{|ms+UE$o~q)n%O6j!R#)>bK$HJiAANr$Zj*H;zZBDj(l=J<6H)sf|p!jN{GF} z?7mVHJ>vwGfjB{a$y+8 z8xVvat$k$t>8@j$&+zXJ5IKtVF#VcenYq>)!8GE+=axsE+vQzT*^blsovxWZQ2(lc zIu;nuM^mTjI=vK(p1f${GB$myLN@tEMawlL38pc@d%sD=3vy zSTEI86&~)@KjVdfqWctc^k;uvOrMdgu}>6T7oh)KZ6d#c-UUnHr~3_P)u&x>tXIWt zh*92Vj;V)vED2@){a&vr+NBzWz!0IeKuG}4K@vEDA;k)i9qb%lg?IE*6R=pDl>b!k zibV;S!h!&Jt7fD}#c7PI{rq$WbmMmI1-VnTsr>74@v*afNX4pSF(5UqZ`rhrH0oTD z4k5);R%T4>TNzvZyi0As+=jVSfHBi0g1@v{T^mn8&VGU*7_55L90kBa3$|2pDu;Ub zuT=n-asFa00{@}D1*_*hX+>xt8tt#u`HY^U1Ny1NEj90aEh+CqJtc3rmb}-IK4njN z%_l8!SpQD7=BwU!=PO&KcfHz<_hhHPpZ~e_YL9x~O^@uwZgrLSmTOp?X)YXeYCJVg zTRLB{HeoM7!Q}0P2K84SK!KE>0*c>EM!NrR?*nru>(ME|#dyA9Eg?U+0@*L;k&+dt z%MEFtK)Vni5s)VE`EXiA2#$ejuY!m|Dd5o4m2>qTK-+XW(@%^YET{v(I~u{vl_i2X zXEI(tu(=FJ7|TPPSMZ_namsWWBk}|uf|zFsPZW*T#BzWF6~EV>=tKKFPOMwuA_P`)8CyVS>LX}Ox5{sy}X486QixA2kuC#b)~iAO z&@1gMSmV6;+5}!xecG;w7NwUI-_)z%-sfuFt4cddI!tG=_OK@$fygNpgO$!{pn#%G zm1*EqIS2xz+uDWZzZ7dTc8!BcL`4OhJ4yQjiCsn%Dhir-6?QvXiCuOSC=hwin7nh8 zT2pDc+LPJ^+H~Cz1tmQc4Hx7<4*)H8t)ovGmBk~Te-gdzuzK*gNTpxewoWKgXjJkA z+J{e~FiQS_ES#h`tVC8p3CEghyj}F9t4~J<#$U6d%~H03Q9H$(qG`+>gby{bOeCvZPq&|*laQ)5)SazNiN1AZ?8P&|k)eDiuumG3>Se#)ZaD-ChPe6^A#oF6vf}zwXr3*%_c;@YPKL*~&{$)FuJ{UXfbHc3(d%wq z=;QUO5f0|x9b~`=v@smyl_dx_4|a_xJN>s^4AdTZe5YiwjSPfqu`C~z_Ezh#hfO+4> z8_(jwRZtg)N>SdLbySH04!T9ShUqM6z_q4nQvjB$qy~j-bp;`?GR@gt>dR6COZEL=*XtWyOc56>$29cl)@X4I;6k!U1d0u(w?%_sooU1L@> zR&b3`1DM!FEIaLM-A5b)KRXCV@y=Hf^B>k`->D0&PQFmTs7qgKek=`7_Vwg49LrrU zBjx~>ThnkXQd=beE?jipymh2I@Ef{K&*u1(<(w~nU~VkJ*DM`k$**9FN0f#)A4ruwIs+a3K z;>!~+7M(Bm4g`u%G;aJ5h_uuU4A% zS&S$fPx^+}8q=k(G)k+ zSDEQIf#d0X+se~dsR$P1p7floX8<&>y3@QR1KX|E0*0l_IujeMbVJ9rtI=I+=m|o6 zj7(g*I%j0sVu=2oHNg(jaY@YzHx&eKfCw*<#tMT1`!vhrEDDxbG=H=Jp)zhJ zo;k{wi2F^pe32$_E14yR3|T3bbil<dt>n8tA$CYPS zh2GjU`ccf`RH#G5f2}N1hnyNv|1+QT&wR3q7bx`)P^-tJMDDnJ`KDs=Dm_+rq)*oA zFO+} z%_AzK+eo@gTCa-bS*RtpZL&D@ZXQqZSNYgc;0eiGr~IoM|Df5<13;<_+i+B7%8`k* zSR*P;WVSWPG7uNn*s@LTfKZo6xbsm{Zuoyl`=%gKmSEe#9^3XF+qP}nwr$(C z?U_BcZQHhW=e+xMzu#9yp`)rgDyus(SFXi15Tl|n9%mC-a*|>gHt`pVVv7DUg;B{y zPDRe#hqzR#Yz`i^Od%>NSL8me%o0YsF_bSOQde9u0ZBM=t-38V`GCj{V}Sml+(Yok0)oI#? z$y}z{Z>(q|m!35--~6M7fX~*Oaz&2_nllJ@K;A#N*JE}@uD=*nKHO*rT(?OVtai#N z?IJOq1){tc#a7b$x+N+(SOrN~A9A-tw6WVOCu$GqM&1buE_R%hWtDvqwHJID+2?Iz z(cX}Qs%YY!{@Id@Eu7L!^j5_2o~>6mnduR`Z_dC_fjDT1X9mupk|DH-*e`a_7pT#K zw=sgTfb2PNUhYsolNV2y9m3W~yM97!BqVe>>3TLk=V8?+z5J~er`E&gn?qB=(=<3P zvZrYaa7$Fqf~jLlk4G1s5pmgyk_6JK*PgtTw!CBu7Chl8+aQ?q3FatLh`=~;r5$k%dNuB}lwN^)LMadrr z(XU_X&soa(u}3J<(C(uLJgY)TOSf8+E3bm8=P5QrsSLD z8ZU6d;PXMfgPAw|#{zjPt>~9J+}4l;<6xdTz%kCSR7?9PV?3GI*!`F?E@x#6o(PG0 zb<|d_TC>!#kbbFjNSpu?pmzriCPlbovD4Im4Zj>{RFD@3iQswi39AD`E=V4=Wy{^q zY%T3eqi>S@TqRjH>%)0$hp^J#J2;Dc#_kVHSNjwsMvZuZYV$~M*>6#F``Q_NR<;L{v}d9*?4z51{p2LhDc1DCb(MHNqv$~DQ77MaYV z_mU532V(!4n!rT}qOh)(k!YZt2eJ2uwnXI5V*1K+SL(BigV%NMGj(3R|ie0f{q9*CmPN{ksa2SFzlL#*N{lB54kCiSoNMZ!liFobVHj4By=B=0yGCIF^4V( z5wtjE(OYjfi>%@LG({hb8p*@@rNp!m2Oj&^*$enIM8aj{29lu3_a|LB2Nj-Nl?>zj z#XB@DyeIC~NByRjyWIB6)_8muC^KYq^l6$zk#))2^&i)&I&O-LqD?eM_JgTDcC?sq z)1h?3=J5*k1`2~jvL7T=A0qXwgW#K$1ApbG86*Q zgpc5>Ox7b&T7~{+CEyh9rhls*4=f2a8*;c6ZeWGVo_!Nax3%Whd3fIgg*GwYI}E%P zxtPu-$q1x>mV!>qkN!@wuq%oa#<8lsK?}!=w6a(GvO(~1!CMh#I$Ra%xgn#ryJ$Pq zm)d7yKHGBia21@9F?&(Y5qz^q^dB%2@>j# z%Xng}^iLgY2utvD60r-{?ce?^Ebf5*rWq#9h$Qd@LHd9H@x4(c7e}$nyv74MP^@7K zplpVH26QG0M58qXQx>BPj1(e?^PO11F#cq|(UHi{`>YoyYv*&WSq|PgF;Dbs+j!KX zze3&-MtUz!9IO-;&b^wnMBL#KXCfH)5JVtwpV|qna7M|9XhXFg_bq~f%p((fxzddCoj7S*|}AO8oFyC zg9Y~ZcZXPIpWW~FGi`l-IPYQJVlS+65ML)#DxDf~aISA|w(ccUE2+9dB>8z`3=qK{ zF(FQ^jgo2_J~o_~vlE}KQfgL;SiiDrM%6jG3Vhp@NYL)+wW}MC0^%YIf0LSjt}NR3 z!m1Cr=W}aJS`YPlo)Bs7u}~+ZGkz|_d1-xqI?#6HV6J&<8!|Uw*3z#OPQPwO9f$pz zM!e@E-{lcqepeMCBj(9Ndb!Q4UVP#7MBlY;h&Ftt+_GKOFmVO?m`PJJ>XMyc#lJjp zWs%aLOVc>y^pvhetLl1TdZ^gaMm&M?(XnZhmez5k?2 zF>WG}9x!@#bWfy(NTM$Qo=+S%HE;SDVY+&wgl*0 zK)OT|9*Gd`dAN~2j4#s&u)JWIQ^!=GsCFlHBzCSaq@)BPp zzM2;P^Y}I;h5Z!8hNvUt8#5Eg_>0*O;N1el#ChFOU1P2uUs(%KIl^H`7vkpw9ySu- z>#Mz1UC8VpSNGMio$nBDNtSsTqR#+vEQwH9&qQdiPJ-r1k7l z6(~%1E-XPCY7=CrIIPbOTSkqDhdonHFtkbT)LCZSBU^kI$mHeW3iG=#Y5@$B4(%|u z4{vP8h%G}ku4hx$Rw0K;3cX(Zl}_@;{ok=tE*NRk9(RHD-PRXZCXE@C+%~XquVPH> znu83{g9g-XMA(u`PK~UP=U1w`2v*L|x(TJlF@2Xn%!>{W(Zs}$lxZf~%EnOCkWUGt zC2wBvzaw=hbjO>gqjN9>*^c8a%PW`dcLAzUG9D10L)kS08C%`WPxBdx2ooOBnKG?) zscJV%q0ERYpl&OkokkZwMHOFO0^j$I?d@$_-vsj<+6X2;1VC4@+S;>$rZqikDrv2I zkyz$z%GbA$77Hf!MD~_i9+L}V>pb?6n`a$v%BWkfoG*#S&@-#%$u0E8WG5_>OwQht z!v=K`^7^Ph6k0l>I$YN6BMahR1Kg4n3$%$Q^A>#Gdd-{L4}%y9y7zd#lugCTnq!s5 zq=wA@%2GQe?$3n^?WF`Cigrrk<1R0GFY&H0F*9<}c0Tu*-|SX7%)LJ%`HH7-sY%bL z-6M2hBs4Mm`Cq>HHECs^eF+dxJv`O*R01K@IXPiDJAI@zcCHhCNPH2t)!yvSNO?Ni zK#3o+o(w!)#eo5SZs(N>%n-kYj{BbH-}#o$tU4sztCM*hIs}qZh`~wX zA{s&(50_#-DnLpuIC%}}S?peF&rW0~P-5x)0QxdP`;^@&;}ZA_`D2e!5y>K>$$Ij}@qO4AuoM~A`??6uj&!PIVXUfODvplqsKEh{*XWN8-O|*C7!|{h_@DC3} zcRYl)+n=ER6zqSNH@1>-`}t6h3+b;^nV zR5_vAJwaj*Z35=zC;rc{x>}}Zb5ZOp6q9XRPpP!SH~Ll5T-NhTk0N6lP>k<$eNOH? zkK{_;b<|D}1d_uXjy;L4cScPfD}RSZo3hQkaJxYT-FM`ZNptqyBtjHhF(R)?qk$Wl zY3D#kXx87T`Jh0f)aY%oE@9URGTlr7Q3^|jHDX;~>2G`*z5M%ml10ej&*Ob1T9+SLn7JDPaze4^0bojSHP4MQe3&tRIb!MFeZ zWz6qF7J^w8$AV491pDrmI~MMp@&r@$U@Gh zH|jlS9SXX{0@y9oDbDgbje0^_qNle~sz!?G=P%_Jt2(fl$7vQ_9(>KQBcSosmg1iC zm2G{9M(38Z(6>VcwIyeYf>_|yM!!L^p>5iI9Nr7QwXBwup*2eh;RoO;ArQrX^D$#| zgj^#urH0AzmNjoY!<6}i)A&k0dz!GwM@ph8|08X4UoAUk!*?YCB04Z;o;1k8|70P4 zJNmb5>pcmZb`^Qy?{}w6!&+^hgMIeasZ_luRf&+TH@5E3LSa5)l}kzI`2t<1x-ns% zO$uFW@{AxFQAURlbg%ugZ@$AT9d_*?>%-Ae(029W@=Nm;y-4Vs%9WyAd>{Ru zkv{Tw##r3dV%P_}L!jur`x#lwJg;3HC=4oDatd8h3s-fkQ!+(}#|N}-yAbW9LUgY9 z*7d5^2@$v47yTMMLXfXB2S{ysT=ta$70X75AibtXz0{pQV_*dIS0uLV{s5>%R42g* z%F`P4woE9`QQ}dy5u`H{XOw9-2=%ccea~NCT2%G~g-iD)%v}=@D14k(@?6_fCjorm ze;8OEo<4Q}arf9sygsl@JB!Dbx3~LRcW*vT z3JJ@e6!~B8ik`ZzOd$MyV0GjT6_nZN1tB2?WZ@;D_|~gMJ``TX{_e-(vZ{Gy046pkW|?$}Q89i;%-$ds@+9 zP+x6P&>2U=EdUPY!~y0zwCy2Ge!r_$#$_+N!<9Tqcua>gf;94K|5Qwk)6?^IG;i8g z9L>N|`#!JSpKxe=TP-ozSwJXvq^I}`PW0+da-f+3rk1@#u5s*yG?NAT~?ICmsp)NJ`cUEy&mal z$NM?F`{a*3fz!GB+?#OX#nsx11^c-c6|d!(8l#Uly8b_nGpdqJA9uIL?RaoC*CTno{J7iQ`64@evv@01o*=U?cfV~Y zPiYEotrX|S@wmp8uyF99;Z~N*%#mSMzh97&P0f&@UYf63R2XVXIZk|m!QJ!@1X^mf z#b0Q8fst5z_Xai$%Dt>ptqOuDG8Rs#1cnqOVleSSW zfT}c_nxw!T(w~9LA2MMy=?R$M=ax7m@RTidcKBy|V~+jlyNZT3onK_T-+B&B9=TVlM)N<($@E~%KvGm& zIx}%o#}thWRi%D~#y4>mW2p}bOSgkB!ffl5+XOB4d(r@ms_G4YPuHb0iC6T8s+E0W zD`O6itF(41OAuOI!tYKI04UqWWaJ&%IZ)Mw!NYbRFGVMacsRD$fHeKlx_(H~jYRHBuQ**JO*CdCJB<45;Ak zI#_a(gB=$Z^jBeq$3MK&eeR9Yh|4T@oLo|V{;h@feg#;&{IE2&UcZSE>w;j0hL4Mv zyY#Tu0j&}Em2VlQZHBx4tZwqhUcz=faC;N{z@}4@UM%mk9JixV8Y3CUri-(Vr{9>- z&{qg}+`dmy*u1vQIq}PV56ctUo0q1jt}A_TF?M#ksiITcPgNFRBOz;j8y$7S>uC%x zR1b`{xBVM4C6$!6QlxGpXrFbrF5P-fG+dzDH?A8x#y)CE?z~+WvS@W@5Tvu+?Hc@} zu8h6Cvec_2ze_6JaK=#rbKBUsG!EL}F?xVzd8#mc2hy@w64|-~tIELI6&0>zp-7o> zSs=G`@Kze><LW1l<9$EaA}%P(h{A*b|Yy(Q~#2Fh%& z&z=ylj_Mve6ztm#5_7oIftBGuyO`C1y*TXju_o=j5Cz1bqY~C>8j<((n;gPsLZ?dt z2X9k;Ke-j*g?n6CO8s{}5W?bCdVOVYhf1s;mlZ2G1W;{@SKL9>It~B{wg#C7=+qAj zCdbBB4WNk(8=^+~W8dsIQ9ZAlm-*$T0tgM2WaQd4o1GCm5E*vWXmt9`wlj02a;CF; zu^!oA3XILBZM?e~Q5)r0$2nP3y9{P0EPZMr3;G4FgB~MDWWuD5KEMWIl`lcCV#AW{ zXVU8BFx0<<$p{UETC2~n#*G&C9-X3|bQ`=0`6THzVCnRPQZXzPiPEF-k!LDn!K&_) zU#Qrovku%{`W#S^`|PJ%?j4ZgJ%B1GAj>tub4UA8B(p}UW1O33yrU-{5p%8n9PYbD z>O9U}4h2N>MQcVAjFtC9_C?%=0vd-=hDuf@Z+WNPnN+AT?4%=wKW!DcQSOnwMess z1Pb1yfJ*vUs2A|PyQQoL)#WIS>De@A}*^?zlB)2PoPE?n@n8H zg|1rfcI$~m-W<%NzI43fFQimWEDReU6(TY_TEB|+wgstPOIb@ZVoeAms46sV2(Z|3 z{9@sroy}w?OR6Pn3ZyMdR>A{EjVUh!eIEHjQHklkRd)@x#~;%mqSiY>|C-V@+!(X?lnPf7q}WP+Mb}<6#c|hNd2>p!1pJ!5o}{&W>u7a>0PYLP3WBqj!l-4`i>kp|60E`a`@c(W_ zx`w}RU6g-Ka6=Cl9$C#o3&`uo7iBM_Y0U*m9w`zl$` zUCfxTJj!cMO~Imt%^^I4`Kaal`YUD9Qq0nf%wW$ivH&>w<>+afr4@#F0C#!93ua&o1?Kc%j;o5ekg-WIO2^S_UVKcAEfn zjSMjTnlMRpfO_IIjr|h*DkE(inqB9dfv(Hwu!Y9#qR@BkF%-#L83>c0E4cWGHTM7! zfn!||>G>Aa`HQ3P%Yi`rCE(=#skrlr_fleJpt@;w;Ez4Q1c$&}=EFDpM+T^-`2Fb@ zUE@o*$Ru?8@AafIs)_>51!S2NQuyHm-`h;wo5x4!-R&lQyaEu+rGC>6iC&f~CWh#PFNIZ13wy8Mv~+3OMbAk!(n$ z>}uHr9|K`)eid2j+z+P$JLFZ7qm%$gemhMA)dnuW(M+ zKmye&{(58+?6}Mfmo3<|=JlN%+gvQmZ>J#*=$w_{eh2#iAwV_0uoL)oznwBy=%2x5)ndZX~;GH=-CL7CW zwOl4Yr)wdj8iz~aLY_89ZnG!EHZ;=|BO6_+W_~k3tGj!=sF~Ch&Y7KEEOpQ>hR+C* z3%thQum!%)yJL%9k;^M}?5a38NzdU+NwA%ZsolE}7E~L5mM2U-+`UK#S5Rb&uj!vjF1{)DM-0SRh00pMeMd z`K#t7v<1v)kfWfoRV0Pc<{ai)H8#EU5WR+?RM9VcMZrUt zf9w>GrUF{4&5)QNrbiCo*GNwgS_%xzr;Z)AS`r{$*CmLe*CYt^>QR*UT;%Pk;>c^Y6I1-pKQ(6*9K*oI3(_HwzO*FQEqe$&Ltfy^Q)uCOu*}ch79% zz-V={kW`*g6?2)?4QzPHxSU2id(dv*XFM8L1WBG4DF6Xn8hiS&!a1o<(t=CAz*t^)9zU+i$!t+m?D^>0M}I&jA>5 zBfUStvoF-b?(X?R-LeXZ4A=|sU>9iWumDn>jN8FLa8x*cQnwFzA--FSV@PES57P{sH zwU0C)_1UdOkFsr7GfaFBs=aVyegL6vx#HMmjk7aBlG$=^zid1-RB{wUgL|gzFT19H zo({|rnB38Q8`%;mukCEYl1CW99j5wu02TVBqc( zm3JGjDv#5tZT|`{&a&2OhWOiJ{HERl?Hi-Nrs%)?qruntuc@Ls6K*#jy`bc!l2NrL zXov;8Hz;bg1|RLqMR*cO9m}RvjW6Fy19ZQ4a3AK@B(c(X#^s%G6$8mqyb0M#b_dfsTa~Xc z1U5_HAB=Si^VXu$2L2MFn|EpH~zv0*Jhk?|hQ|Hf;6nF12~!u%!WI zg;y<^f%{vks`udiVQI#iR7!b1cA$jR^y5_dCg7^1^oG5z+FS0oVPGZy<#?%PZ*u&~ z?3=Iumj2y>)Q?88kJMx+t$`Sn$Ya(x6s(FYZ6kg#odZo}VqiK9dx*UjhWw)qmpLig zmCoWBul}*vkO0xt@5iSkPg5lv6?LH;lch1Q!@4+zk6oG>^wWOzy3>W@u2elic73pv{w1ngW%u8GIcN|MLV1q;f6PCaV*DIi@ zUIr|VlcRbi7*qhS?fkRVbJCS^Y&FiY!&OK^ALTk_bZKLkLN9ea*5Tcp9G45LRV{iG zy0LQwbzNlxQgR6=XM8=5hG0tu4U25EK?fhI!mUe zS9C(^bc4az3z6x75iJeXd6yunGb>2F&_(%<&@)XL|KB1b?(Kgvp|4;W!b zZ5xavFR${6gP{skCQaAZGxBS+&m+n^av=1%SmJyq{XH0EbFW;kcLZ&K*C=;^jhReK zw~&;IUcsQVYu)B*6_w~1Zb<-TLenU3>3ycWN+|1S0%_5_nEMxLscpzI%6BY4*^IjC zqme4~pCP3#FVgLSa1be-xUs{u!E5BZKwR$~Kq`jDrtZ>o5Cz66|-OUu1R!Wb50Sv5HtzgA#N59qLjoS(*FK*HBK{ExK|FR17kM* zZ4z+A*ya+JThKaazW~0O=l&d1nYggZsP;z_pk$)$;~v-2KPP)Y+{D-tiI=`Pc9$e* zqG(6i<(ZQ^@gxrQFrswl@FZq;621d~`;D5tw6k%$BM{*(j=728JJ19-2K%H+h09B}${!o&oX`37}ZM^4| zHKd`r6#8t=lpLyIN$o?SPYtoofXc>nR42>zq3kJBu`tNjS`@#VvLQy=;Q~@=K^#xj z91phDfJ|R-TnnGUJoe2QPW)GgbhlzdgwnB|2wf9KYQ9?HT~Ug!eT?XsGqfYxnWZa- z+8}dJ>k@c&TJz;iZRMD_HW#m^GtE=>07N5s$0|xiTg%jh9L7oT%&MxS<<&-!^+2;B zwikYhSGdPfZTQO>>McH*Aouu}jgiIOib)}T;!lfI*+9CJ+lmz6b)RHD?ztrNWb~WUlX80p4|FGWU9DQ4I38NxPOYK;7YFL18utIw0lu7f@SGv7S8fp4K2V0q&-my{_|~ z!6o${N4MIB8!S$CR*bPlshw8a11rNk58je)iPrv)kCv`1l=vnz<8$2$I;=muXy^I9 z{n4uUB772$0%f7^#DLY;hUb)4ILz=78kgRX)pu+>X`*|owF|nowP)G@AS_q9o@_i-uha}} z)$I6ihZYm*$qg$|TXos8J`ZuQEJX;XoBC#_WP9!0^L*Z(AGxL#>vv6IS>aJfE2!CU z65{qTN3{#)K6U3em4`h(tE4@?U4W%sl9`j1@-x(EJfn|)gocS`4YM~`VbS8&Xh>j> zcesa%Rt?{&XHeb<6JwAvL=o9?CaZ1N&l*i^$gJsPICz@H-SvDXVEeHT^12mk4-C9Z>6_Y*SnA)(tqYVyo?e^$L3jIM`# zZ6W);mzxQ8SCwL#Xh~&Mr`PH1oc*A#%gpMvmII#c6FwL5TqdWAGBu!#a^PteZ747> za@V<&u8I(tci@@hq&eT1%4rOp*X%Vi`y3E#Q(j8CEG|#w z4OfwYMc)O2oBq~yv#GoOtqS_RGETJvJWs3XoPW!X$7`EjCZ;{sry5Q?noKS5YN{LT z&B{*VlIi>DzHE<~LXgg^r$34^h)wVs#V#?{n)#YRAb}M=T!aBvXy~0g%DYUfG7@Xj zO?(4pTXPK48P>ghLG72ygq*6Q_)PUE44@55qGe@vb0CcQSUk+jYT(s!?4cqn{AU!B zT=C9wBu!@o?s$C@Sc6kTJ0sKl5`SbMNmL$APhZdf6@U^LMRFL4vQh`Rc*;3m)yXW? zsMp*wcBbdtuoYll=Uv-zQmV#{xj2jkb9|2Xu7qyF68H3v66TK#wknqi>>iy+a|BM; zRry}2`ZE36SL`=2uygNk(o%jUC+v8yx&N%jw{s~r@#k#M=K#kMo=1xBspfZn^XG*O zi{XA@{PrKub81))Pg%P^w8BCs6uR( zl>!;Ert}(&(Y~Q#bg;Kv`+FToz>N%M!Ff@BFeywmZ5&gR#b20e4)H*KR9hyEZE?X1 zsNcGVc;IyJni;-Ry~u#xZd32V?^sN6!AhBVy}0I-9@F{Rcc9;@%6uMU8JTZwQJ{QNAJ?^6%!%7_){9vSPo78WU!dd)1mj7_7tD zPSS60{{4#Ik3z>YzVeSYc(p>OP;2+NMSjFvkpK0fSCSBL=V)fpG*HLyL39tl&TkV~ z%Kt5C9<1!!yJCJULi|a@1#O%Oni@tO?JmPW3rC4dXmn|Nvpoi|J?VZ>(kse3$`k{B z&p)|NfoIY`fhGBU;&#P{zKH7kNYoci>-l|zW-U|=j6I`YptuTgb}vMuNUu16HSp@M zaJLG8P0nNKPn%ZXKJ=7mh7(zk)Ok*uTxmL!m(`l3IZ!)dF;39JtSE@uU`LP$j-V)_c$cN%!bf*7NcsE-_$cJ~`Rai=?L7 z8kHDB0{O+38=2M*a0|~yb>q|x>G5T(G^kGPcA53j1W90J@|9<<%o_0tQPa#CpRy5H zrPOH`ZSHAc8xWH7z5}NxKJHc5JeCENHNZta;qj+i`}X%d!XuB<$_v}uxQ6KkXgdeV z(d!TwYRpjExC2VDM&LzsGE0bHtxg=4*}E-XVZ;D?;g>Vkxp?TJxaE3_?Zdn}#Eyev z_tKPO9NQ^Q+>DXEGHx5vRgFbZQO2azwoS+-C^yF~b$X^ihoxB4y1vRa_VwfQ!B-j9 zgVO>empSi0nQOwAQHrC@nj)lmrN!0rMDR5#rF7tGp8;cBzfNZapJ}DQKnaQ0U+>*B z2-h`Q!!v`Twkv0+q^rkQ)64178VTF4d#nw>6<0NYt{Gd^z%TQOzlkF7YODC0CQd5G zBofIp$;t|Y;yFl3SRA6m!KC-l0tSVlWr@ZO%a+dQO{g@m^ShUadDtB}MClR&unqPA zdA4PXTgQ2=w2Bo{Gt*weOj284;nrX3+1zf_2;vfbVzEve3^Sc+3S57{#r&!aT>1h~ zu%-$ek&P!me;GKrvWswZcR52Y*_A>_y(IJR!RuV&AmkiN6{RS$b07&ixz*yGn8@Q?jt`NMR)!dLK}-$nyb68-X>q5 z+E_}bkxJeLZC8(`W7Yf)Cb-Lt6*U%<0aywqxKC!db4y${X5MDY@3Is>!(0_JpYz%` zbMGnHt!`5Fvg0sK2?V@T zr$aYC{%5-I7P8)oPHb4-{XEPMMv%sL#+0b@sXSUd&D(99^b38H0CR zUr`!SUK5bYLuRr%!m3|C<7+?Z5NKFu;VZ5kUJ)K6`YjS+pgQw-PxH4eC$%9>SBj(5 zc01(!e2C=APQ5a16{-Jdzkax%Uo%18rT;R^)te1pUNse6_EqNCzRlD+8#u2DTB6M- zCC=?|dGrC1_2^f$DrZ@&z@99LalUr%mezzfbLTF*2b} zv z68h87M2^%1beoJO(n%SW#Qarg+H+7UjBd&bd9dzwe5tZI$h^Jo(iAT9Gc#p{p7IyNdGk zD$BaN(5@G|RKyiSA13<|!a-t}h?5x~mF1`&57}%_ZjTpJyYz<)d-Ho>@HrG%1DBTq z;`5-LAgn}O@k1d%NR=0;npnG7?ua2py&dD;13uar4}Cz<8{zM zLv{57W=S$X`N|9;BAn=Xj9g2}H7Fdfj(}7BURaRe{;tMvyD$%9uN3`NpIR>!_?yQR;Xy)s=*-&|Kz# z#?}f`F5yF}Lk}#$+1tCQg!)iZa7>>Tbm+i%gQyW05R|_`zw;b&ad8P2XkB5j|1RP2 zqr#9$9Xg_3&!Nk@PhH6rjbU&6vOsT7T{PrCj(zhbe0@ov#+R8q%`P&}+c(MO4Y4UR ze5A;S9N%|EIeY#kV^P(nJqTp|vX3~Eo3`Y1O5E#>+bXTcG*;$q{o3g($_mZy4CBJK z<{|w3DTh8gx2MvBwW}x8U9G|p0Bnql>jp2O@$CG3AxR-Vk_dKx>^Go%R8ahNV(06N z_sw~uzJiS+1Mgc>@{jVp=Z+gYwXjM?6<(i~7HYry*M#6ofza_V5M+cK@LRYL_GSw) z!)_H=V%!cZi8`INf$OWtiEVUZvTM)^>=es@SoDS*d1@1_o+}GZWcFl!L{b}>mo3F8y2J&ma~e&81S=C?UEb=h zB|wQJ09Q1-st#nG5h+9-g&0B2O03N9!iEuNMY%-~Dj*Cm?Kng9*KnjucR~Mn4z*h=9GFDd%4+0?wE!I)|AxAd~`SnVOW{J8p{HM0mc`44WE*sfj`+0J62s;{PGkHc)Th_ z1wwxq+z$Ieps_2&+rWy4cv#5L!%Ky7WaTF07dOJhQZ$wEcq3s78uuC4J=zwNaLs&o zQ8B|2ljp(=*O39S8uqSM&Kww^Z3gu+sojF34_0OKTbJdT04`shT-N|cPlqQX-E*aSl1{h*VYyK8pM{1DaG*Uh28UtM+HpbFFBh>s1?o?MBn^LTdPnr@|a_dvFX$#MuJreN;@l58oH0iYpmAH