From 19c078e4e898e6fcc915400d66702f4ff5af2c15 Mon Sep 17 00:00:00 2001
From: John This setting depends on your device - but in most cases you will want to use DIO.
@@ -345,7 +345,7 @@ def on_select_firmware(event):
serial_boxsizer = wx.BoxSizer(wx.HORIZONTAL)
serial_boxsizer.Add(self.choice, 1, wx.EXPAND)
serial_boxsizer.AddStretchSpacer(0)
- serial_boxsizer.Add(reload_button, 0, wx.ALIGN_RIGHT, 20)
+ serial_boxsizer.Add(reload_button, 0, 0, 20)
project_boxsizer = wx.BoxSizer(wx.HORIZONTAL)
project_boxsizer.Add(self.project_choice, 1, wx.EXPAND)
@@ -435,7 +435,7 @@ def on_info_hover(event):
flashmode_label_boxsizer = wx.BoxSizer(wx.HORIZONTAL)
flashmode_label_boxsizer.Add(flashmode_label, 1, wx.EXPAND)
flashmode_label_boxsizer.AddStretchSpacer(0)
- flashmode_label_boxsizer.Add(icon, 0, wx.ALIGN_RIGHT, 20)
+ flashmode_label_boxsizer.Add(icon, 0, 0, 20)
erase_label = wx.StaticText(panel, label="Erase flash")
console_label = wx.StaticText(panel, label="Console")
From e993393d245a337b55ec48540d68b3f447f66afc Mon Sep 17 00:00:00 2001
From: John Version {1} BrewFlasher - © 2019 John Beeler. Licensed under MIT. BrewFlasher - © 2019-2021 John Beeler. Licensed under MIT. Based on NodeMCU PyFlasher
- © 2019 Marcel Stör. Licensed under MIT. This setting depends on your device - but in most cases you will want to use DIO.
-
-
- For more information, details are found at at http://bit.ly/2v5Rd32
- and in the esptool
- documentation
-
- This setting depends on your device - but in most cases you will want to use DIO.
+#
+#
-
-
+#
+#
+# For more information, details are found at at http://bit.ly/2v5Rd32 +# and in the esptool +# documentation +# +#
+# ''' __auto_select__ = "Auto-select" __auto_select_explanation__ = "(first port with Espressif device)" __supported_baud_rates__ = [9600, 57600, 74880, 115200, 230400, 460800, 921600] @@ -68,6 +68,9 @@ def flush(self): # noinspection PyStatementEffect None + def isatty(self): + return False + # --------------------------------------------------------------------------- @@ -130,7 +133,8 @@ def run(self): else: command_extension = ["--chip", "esp8266", "write_flash", - "--flash_mode", self._config.mode, "0x00000", + # "--flash_mode", self._config.mode, + "0x00000", self._config.firmware_obj.full_filepath("firmware")] # For both ESP32 and ESP8266 we can directly flash an image to SPIFFS. @@ -165,9 +169,19 @@ def run(self): if self._config.erase_before_flash: command.append("--erase-all") + # There is a breaking change in esptool 3.0 that changes the flash size from detect to keep. We want to + # support "detect" by default. + command.append("-fs") + command.append("detect") + print("Command: esptool.py %s\n" % " ".join(command)) + # try: esptool.main(command) + # except: + # print("esptool.py FAILED. Firmware flashing was unsuccessful.") + # print("Try flashing again, but with a slower speed.") + # return # The last line printed by esptool is "Staying in bootloader." -> some indication that the process is # done is needed @@ -187,7 +201,7 @@ class FlashConfig: def __init__(self): self.baud = 115200 self.erase_before_flash = False - self.mode = "dio" + # self.mode = "dio" self.firmware_path = None # self.port = None self.port = __auto_select__ @@ -208,7 +222,7 @@ def load(cls, file_path): data = json.load(f) conf.port = data['port'] conf.baud = data['baud'] - conf.mode = data['mode'] + # conf.mode = data['mode'] conf.erase_before_flash = data['erase'] return conf @@ -216,7 +230,7 @@ def safe(self, file_path): data = { 'port': self.port, 'baud': self.baud, - 'mode': self.mode, + # 'mode': self.mode, 'erase': self.erase_before_flash, } with open(file_path, 'w') as f: @@ -259,11 +273,11 @@ def on_baud_changed(event): if radio_button.GetValue(): self._config.baud = radio_button.rate - def on_mode_changed(event): - radio_button = event.GetEventObject() - - if radio_button.GetValue(): - self._config.mode = radio_button.mode + # def on_mode_changed(event): + # radio_button = event.GetEventObject() + # + # if radio_button.GetValue(): + # self._config.mode = radio_button.mode def on_erase_changed(event): radio_button = event.GetEventObject() @@ -378,20 +392,21 @@ def add_baud_radio_button(sizer, index, baud_rate): for idx, rate in enumerate(__supported_baud_rates__): add_baud_radio_button(baud_boxsizer, idx, rate) - flashmode_boxsizer = wx.BoxSizer(wx.HORIZONTAL) - - def add_flash_mode_radio_button(sizer, index, mode, label): - style = wx.RB_GROUP if index == 0 else 0 - radio_button = wx.RadioButton(panel, name="mode-%s" % mode, label="%s" % label, style=style) - radio_button.Bind(wx.EVT_RADIOBUTTON, on_mode_changed) - radio_button.mode = mode - radio_button.SetValue(mode == self._config.mode) - sizer.Add(radio_button) - sizer.AddSpacer(10) - - add_flash_mode_radio_button(flashmode_boxsizer, 0, "qio", "Quad I/O (QIO)") - add_flash_mode_radio_button(flashmode_boxsizer, 1, "dio", "Dual I/O (DIO)") - add_flash_mode_radio_button(flashmode_boxsizer, 2, "dout", "Dual Output (DOUT)") + # As of esptool 2.0 flash_mode is autodetected from the firmware. We've also always ignored it for ESP32. + # flashmode_boxsizer = wx.BoxSizer(wx.HORIZONTAL) + # + # def add_flash_mode_radio_button(sizer, index, mode, label): + # style = wx.RB_GROUP if index == 0 else 0 + # radio_button = wx.RadioButton(panel, name="mode-%s" % mode, label="%s" % label, style=style) + # radio_button.Bind(wx.EVT_RADIOBUTTON, on_mode_changed) + # radio_button.mode = mode + # radio_button.SetValue(mode == self._config.mode) + # sizer.Add(radio_button) + # sizer.AddSpacer(10) + # + # add_flash_mode_radio_button(flashmode_boxsizer, 0, "qio", "Quad I/O (QIO)") + # add_flash_mode_radio_button(flashmode_boxsizer, 1, "dio", "Dual I/O (DIO)") + # add_flash_mode_radio_button(flashmode_boxsizer, 2, "dout", "Dual Output (DOUT)") erase_boxsizer = wx.BoxSizer(wx.HORIZONTAL) @@ -423,26 +438,26 @@ def add_erase_radio_button(sizer, index, erase_before_flash, label, value): device_family_label = wx.StaticText(panel, label="Device Family ") firmware_label = wx.StaticText(panel, label="Firmware ") baud_label = wx.StaticText(panel, label="Baud rate ") - flashmode_label = wx.StaticText(panel, label="Flash mode ") - - def on_info_hover(event): - from HtmlPopupTransientWindow import HtmlPopupTransientWindow - win = HtmlPopupTransientWindow(self, wx.SIMPLE_BORDER, __flash_help__, "#FFB6C1", (410, 140)) - - image = event.GetEventObject() - image_position = image.ClientToScreen((0, 0)) - image_size = image.GetSize() - win.Position(image_position, (0, image_size[1])) - - win.Popup() - - icon = wx.StaticBitmap(panel, wx.ID_ANY, images.Info.GetBitmap()) - icon.Bind(wx.EVT_MOTION, on_info_hover) - - flashmode_label_boxsizer = wx.BoxSizer(wx.HORIZONTAL) - flashmode_label_boxsizer.Add(flashmode_label, 1, wx.EXPAND) - flashmode_label_boxsizer.AddStretchSpacer(0) - flashmode_label_boxsizer.Add(icon, 0, 0, 20) + # flashmode_label = wx.StaticText(panel, label="Flash mode ") + + # def on_info_hover(event): + # from HtmlPopupTransientWindow import HtmlPopupTransientWindow + # win = HtmlPopupTransientWindow(self, wx.SIMPLE_BORDER, __flash_help__, "#FFB6C1", (410, 140)) + # + # image = event.GetEventObject() + # image_position = image.ClientToScreen((0, 0)) + # image_size = image.GetSize() + # win.Position(image_position, (0, image_size[1])) + # + # win.Popup() + # + # icon = wx.StaticBitmap(panel, wx.ID_ANY, images.Info.GetBitmap()) + # icon.Bind(wx.EVT_MOTION, on_info_hover) + + # flashmode_label_boxsizer = wx.BoxSizer(wx.HORIZONTAL) + # flashmode_label_boxsizer.Add(flashmode_label, 1, wx.EXPAND) + # flashmode_label_boxsizer.AddStretchSpacer(0) + # flashmode_label_boxsizer.Add(icon, 0, 0, 20) erase_label = wx.StaticText(panel, label="Erase flash") console_label = wx.StaticText(panel, label="Console") @@ -453,11 +468,11 @@ def on_info_hover(event): device_family_label, (device_family_boxsizer, 1, wx.EXPAND), firmware_label, (firmware_boxsizer, 1, wx.EXPAND), baud_label, baud_boxsizer, - flashmode_label_boxsizer, flashmode_boxsizer, + # flashmode_label_boxsizer, flashmode_boxsizer, erase_label, erase_boxsizer, (wx.StaticText(panel, label="")), (button, 1, wx.EXPAND), (console_label, 1, wx.EXPAND), (self.console_ctrl, 1, wx.EXPAND)]) - fgs.AddGrowableRow(8, 1) + fgs.AddGrowableRow(7, 1) fgs.AddGrowableCol(1, 1) hbox.Add(fgs, proportion=2, flag=wx.ALL | wx.EXPAND, border=15) panel.SetSizer(hbox) diff --git a/esptool.py b/esptool.py index 39de031..d2b1f3f 100755 --- a/esptool.py +++ b/esptool.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -# ESP8266 & ESP32 ROM Bootloader Utility -# Copyright (C) 2014-2016 Fredrik Ahlberg, Angus Gratton, Espressif Systems (Shanghai) PTE LTD, other contributors as noted. +# ESP8266 & ESP32 family & ESP8684 ROM Bootloader Utility +# Copyright (C) 2014-2021 Fredrik Ahlberg, Angus Gratton, Espressif Systems (Shanghai) CO LTD, other contributors as noted. # https://github.com/espressif/esptool # # This program is free software; you can redistribute it and/or modify it under @@ -25,13 +25,15 @@ import hashlib import inspect import io +import itertools import os +import re import shlex +import string import struct import sys import time import zlib -import string try: import serial @@ -59,8 +61,15 @@ print("The installed version (%s) of pyserial appears to be too old for esptool.py (Python interpreter %s). " "Check the README for installation instructions." % (sys.VERSION, sys.executable)) raise +except Exception: + if sys.platform == "darwin": + # swallow the exception, this is a known issue in pyserial+macOS Big Sur preview ref https://github.com/espressif/esptool/issues/540 + list_ports = None + else: + raise + -__version__ = "2.8" +__version__ = "3.2" MAX_UINT32 = 0xffffffff MAX_UINT24 = 0xffffff @@ -72,8 +81,12 @@ SYNC_TIMEOUT = 0.1 # timeout for syncing with bootloader MD5_TIMEOUT_PER_MB = 8 # timeout (per megabyte) for calculating md5sum ERASE_REGION_TIMEOUT_PER_MB = 30 # timeout (per megabyte) for erasing a region +ERASE_WRITE_TIMEOUT_PER_MB = 40 # timeout (per megabyte) for erasing and writing data MEM_END_ROM_TIMEOUT = 0.05 # special short timeout for ESP_MEM_END, as it may never respond DEFAULT_SERIAL_WRITE_TIMEOUT = 10 # timeout for serial port write +DEFAULT_CONNECT_ATTEMPTS = 7 # default number of times to try connection + +SUPPORTED_CHIPS = ['esp8266', 'esp32', 'esp32s2', 'esp32s3beta2', 'esp32s3', 'esp32c3', 'esp32c6beta', 'esp32h2', 'esp8684'] def timeout_per_mb(seconds_per_mb, size_bytes): @@ -84,8 +97,45 @@ def timeout_per_mb(seconds_per_mb, size_bytes): return result +def _chip_to_rom_loader(chip): + return { + 'esp8266': ESP8266ROM, + 'esp32': ESP32ROM, + 'esp32s2': ESP32S2ROM, + 'esp32s3beta2': ESP32S3BETA2ROM, + 'esp32s3': ESP32S3ROM, + 'esp32c3': ESP32C3ROM, + 'esp32c6beta': ESP32C6BETAROM, + 'esp32h2': ESP32H2ROM, + 'esp8684': ESP8684ROM, + }[chip] + + +def get_default_connected_device(serial_list, port, connect_attempts, initial_baud, chip='auto', trace=False, + before='default_reset'): + _esp = None + for each_port in reversed(serial_list): + print("Serial port %s" % each_port) + try: + if chip == 'auto': + _esp = ESPLoader.detect_chip(each_port, initial_baud, before, trace, + connect_attempts) + else: + chip_class = _chip_to_rom_loader(chip) + _esp = chip_class(each_port, initial_baud, trace) + _esp.connect(before, connect_attempts) + break + except (FatalError, OSError) as err: + if port is not None: + raise + print("%s failed to connect: %s" % (each_port, err)) + _esp = None + return _esp + + DETECTED_FLASH_SIZES = {0x12: '256KB', 0x13: '512KB', 0x14: '1MB', - 0x15: '2MB', 0x16: '4MB', 0x17: '8MB', 0x18: '16MB'} + 0x15: '2MB', 0x16: '4MB', 0x17: '8MB', + 0x18: '16MB', 0x19: '32MB', 0x1a: '64MB'} def check_supported_function(func, check_func): @@ -94,7 +144,7 @@ def check_supported_function(func, check_func): bootloader function to check if it's supported. This is used to capture the multidimensional differences in - functionality between the ESP8266 & ESP32 ROM loaders, and the + functionality between the ESP8266 & ESP32/32S2/32S3/32C3 & ESP8684 ROM loaders, and the software stub that runs on both. Not possible to do this cleanly via inheritance alone. """ @@ -113,8 +163,13 @@ def stub_function_only(func): def stub_and_esp32_function_only(func): - """ Attribute for a function only supported by software stubs or ESP32 ROM """ - return check_supported_function(func, lambda o: o.IS_STUB or o.CHIP_NAME == "ESP32") + """ Attribute for a function only supported by software stubs or ESP32/32S2/32S3/32C3 ROM """ + return check_supported_function(func, lambda o: o.IS_STUB or isinstance(o, ESP32ROM)) + + +def esp32s3_or_newer_function_only(func): + """ Attribute for a function only supported by ESP32S3/32C3 & ESP8684 ROM """ + return check_supported_function(func, lambda o: isinstance(o, ESP32S3ROM) or isinstance(o, ESP32C3ROM)) PYTHON2 = sys.version_info[0] < 3 # True if on pre-Python 3 @@ -135,6 +190,21 @@ def byte(bitstr, index): basestring = str +def print_overwrite(message, last_line=False): + """ Print a message, overwriting the currently printed line. + + If last_line is False, don't append a newline at the end (expecting another subsequent call will overwrite this one.) + + After a sequence of calls with last_line=False, call once with last_line=True. + + If output is not a TTY (for example redirected a pipe), no overwriting happens and this function is the same as print(). + """ + if sys.stdout.isatty(): + print("\r%s" % message, end='\n' if last_line else '') + else: + print(message) + + def _mask_to_shift(mask): """ Return the index of the least significant bit in the mask """ shift = 0 @@ -151,7 +221,7 @@ def esp8266_function_only(func): class ESPLoader(object): """ Base class providing access to ESP ROM & software stub bootloaders. - Subclasses provide ESP8266 & ESP32 specific functionality. + Subclasses provide ESP8266 & ESP32 Family & ESP8684 specific functionality. Don't instantiate this base class directly, either instantiate a subclass or call ESPLoader.detect_chip() which will interrogate the chip and return the @@ -161,6 +231,8 @@ class ESPLoader(object): CHIP_NAME = "Espressif device" IS_STUB = False + FPGA_SLOW_BOOT = False + DEFAULT_PORT = "/dev/ttyUSB0" # Commands supported by ESP8266 ROM bootloader @@ -174,24 +246,31 @@ class ESPLoader(object): ESP_WRITE_REG = 0x09 ESP_READ_REG = 0x0a - # Some comands supported by ESP32 ROM bootloader (or -8266 w/ stub) + # Some comands supported by ESP32 & ESP8684 ROM bootloader (or -8266 w/ stub) ESP_SPI_SET_PARAMS = 0x0B ESP_SPI_ATTACH = 0x0D + ESP_READ_FLASH_SLOW = 0x0e # ROM only, much slower than the stub flash read ESP_CHANGE_BAUDRATE = 0x0F ESP_FLASH_DEFL_BEGIN = 0x10 ESP_FLASH_DEFL_DATA = 0x11 ESP_FLASH_DEFL_END = 0x12 ESP_SPI_FLASH_MD5 = 0x13 + # Commands supported by ESP32-S2/S3/C3/C6 & ESP8684 ROM bootloader only + ESP_GET_SECURITY_INFO = 0x14 + # Some commands supported by stub only ESP_ERASE_FLASH = 0xD0 ESP_ERASE_REGION = 0xD1 ESP_READ_FLASH = 0xD2 ESP_RUN_USER_CODE = 0xD3 - # Flash encryption debug more command + # Flash encryption encrypted data command ESP_FLASH_ENCRYPT_DATA = 0xD4 + # Response code(s) sent by ROM + ROM_INVALID_RECV_MSG = 0x05 # response if an invalid message is received + # Maximum block sized for RAM and Flash writes, respectively. ESP_RAM_BLOCK = 0x1800 @@ -209,8 +288,9 @@ class ESPLoader(object): # Flash sector size, minimum unit of erase. FLASH_SECTOR_SIZE = 0x1000 - # This register happens to exist on both ESP8266 & ESP32 - UART_DATA_REG_ADDR = 0x60000078 + UART_DATE_REG_ADDR = 0x60000078 + + CHIP_DETECT_MAGIC_REG_ADDR = 0x40001000 # This ROM address has a different value on each chip model UART_CLKDIV_MASK = 0xFFFFF @@ -221,6 +301,15 @@ class ESPLoader(object): # The number of bytes in the UART response that signify command status STATUS_BYTES_LENGTH = 2 + # Response to ESP_SYNC might indicate that flasher stub is running instead of the ROM bootloader + sync_stub_detected = False + + # Device PIDs + USB_JTAG_SERIAL_PID = 0x1001 + + # Chip IDs that are no longer supported by esptool + UNSUPPORTED_CHIPS = {6: "ESP32-S3(beta 3)"} + def __init__(self, port=DEFAULT_PORT, baud=ESP_ROM_BAUD, trace_enabled=False): """Base constructor for ESPLoader bootloader interaction @@ -233,6 +322,9 @@ def __init__(self, port=DEFAULT_PORT, baud=ESP_ROM_BAUD, trace_enabled=False): with ones which throw NotImplementedInROMError(). """ + self.secure_download_mode = False # flag is set to True if esptool detects the ROM is in Secure Download Mode + self.stub_is_disabled = False # flag is set to True if esptool detects conditions which require the stub to be disabled + if isinstance(port, basestring): self._port = serial.serial_for_url(port) else: @@ -252,6 +344,10 @@ def __init__(self, port=DEFAULT_PORT, baud=ESP_ROM_BAUD, trace_enabled=False): # need to set the property back to None or it will continue to fail self._port.write_timeout = None + @property + def serial_port(self): + return self._port.port + def _set_port_baudrate(self, baud): try: self._port.baudrate = baud @@ -259,33 +355,58 @@ def _set_port_baudrate(self, baud): raise FatalError("Failed to set baud rate %d. The driver may not support this rate." % baud) @staticmethod - def detect_chip(port=DEFAULT_PORT, baud=ESP_ROM_BAUD, connect_mode='default_reset', trace_enabled=False): + def detect_chip(port=DEFAULT_PORT, baud=ESP_ROM_BAUD, connect_mode='default_reset', trace_enabled=False, + connect_attempts=DEFAULT_CONNECT_ATTEMPTS): """ Use serial access to detect the chip type. - We use the UART's datecode register for this, it's mapped at - the same address on ESP8266 & ESP32 so we can use one - memory read and compare to the datecode register for each chip - type. + First, get_security_info command is sent to detect the ID of the chip + (supported only by ESP32-C3 and later, works even in the Secure Download Mode). + If this fails, we reconnect and fall-back to reading the magic number. + It's mapped at a specific ROM address and has a different value on each chip model. + This way we can use one memory read and compare it to the magic number for each chip type. This routine automatically performs ESPLoader.connect() (passing connect_mode parameter) as part of querying the chip. """ + inst = None detect_port = ESPLoader(port, baud, trace_enabled=trace_enabled) - detect_port.connect(connect_mode) + detect_port.connect(connect_mode, connect_attempts, detecting=True) try: print('Detecting chip type...', end='') - sys.stdout.flush() - date_reg = detect_port.read_reg(ESPLoader.UART_DATA_REG_ADDR) + res = detect_port.check_command('get security info', ESPLoader.ESP_GET_SECURITY_INFO, b'') + res = struct.unpack("zPs|EPZjZoIeK@_z#E8bLE#7#LAcW_prbL3xxo&+8iWr4P<|O0E7!00F4yihmk0<+h zdlSRU>*~{j@Zbz~cSNthH!+)xp%AFV!vqw{zpgbCPxfXqw$4=eAQ8AQBycgxN%;g{ zd>#>lBjXSV43U&mk%lKAkyuhtQ1oqzCn_Q&UOA8%50--9ST2IX!a zXj|K#3JFvVqDgpC6bgg)C8v&DyEL%ya`^r8ID&WiWDA~5_1*58LWn8>j3sTZBqEl8 z!60y`u9a6GUrdk8eg9mE4{jffBKY`_NvQY$N(KP>WjGPAXbc9Kd$GL#=eO_Qel0$@ z_o)#Z-P7;m?c?oFr(#eMOh#;|6CxlEiAaBbW-33UysD 8TP>Ko7{E!~f)76`l+>}HjgXa(4-tGhn5qNYY9&J)l;OTuM z4Czg ?c9Pr!L(qA&ZSjuiPuPIgolltt*wno&xk7ppPZjh^7irc^usut ClQ1TBHs-c=mIlou&c67-q*9VU-qhL?<80*yHs}O&P?|^l9Y3_Wy^T55 z_K;O5-5Ho(a1+MC)ym4kSVzw{0G#wwJ=2K L`K(pm^*0aJ8yF%=o z9Z(pAy@_9hdLkr+K)G1quznt1Sg)=tL{k%8J6mg83q+cufiW6em;xrj1yAv=wsZCb zPTem6?dIs}U~6gbib46#bo+Q}+5*33jjD9EGIvFXCnUL<*$~00DV`Pzo@=9AJUpCS z+#Qi#Xe1hkh`Il`UC+eE($?C}$<5Ws0)>xA^TCq565OG@3@R1k_i}Txw+kdYxFTXb z{QRB0V$P*#>ss3ah0HCnG|VnE3XjLwHuxt&+es)}J4c!Wx0Ags#>p1p=A7)Qq@<#% ztf~|0gTYa;J27q!ZZ4JJVZJ0f+1K6C!O_ma(aF`>-qGFBDs;9zJvxG3HF!V9)!fwB z!py+L!@sctIP0o&c>zc_2YWj^CkJN-7dLz2^xF>~KfZZ>uY;hkVT6tgu&@q0*XswM zq`K>uYf=J9UQYHl_Vx})1d@_cQdOEo3-GYBw! 9hf+*hka;vMe~*OWz{_uv?4l Oh f4$qcLb4 z1}t39w!z@RHc!wLkb$R4Xbj;LbOcDjV@M1di@F-=9C;N9fIuNo1$cIE0&{NB$lA%I z$yx*!gU6!?m@?=96$L8bFy%w#pmP`;%BdRK6NtuQy*#}Dd0;)niojs07*-tCow-vd zV}rqw>-NKGw$>*5_wX`bF57QrY6!L&&_U*hjro?B^Nnm5@WT>pZ=w%%-r!#X88y7C z8Ntd5ItJ2g5KAf X7r`WwSNFOnPs^|&iIJ&)1GlhY5qp51oP zQCOH~ZVx+K?laapd-t?^QZ0RcmiK!=IZFUGMvUK97yqr6Ea~Ro=BZMv5c9DUU}$ zi~-#oo{%3a^Do0 U4C?6}Y-ak7*%3NET E$18m#jD`xjs8n@qC*;8!ku7aU7} zczSX5-TwHKu3!DM7ZdzYhDkXXhAA(*O-`+I?~Y>usECwPZl|BKJ-D>@tAVY{plPJ= zJ|Sw{#coj_J2ze-3qztZe?g<1?r#k`#}&iOJ(q Y(EclF-vxR=_+}UJat8L4&J6^EdRooZz z6K&K=TzH EiJvr5UysVNg!&0H{4vf~V{CFA7u!Ut5*ZhgJJ+n%%isj$WA zJ9j<>aZKBnHs0A3eg0)Y(?CX5><}xqz~e^Yr@0ka1jluVG;rV(JLx3r`Lx^p Qvm5u(RPWgaqrjLkH^Es?icV@1AEDVIlTY1UYY2F3Wa*-Ycdb>^K?8* $R|%oyhTUu0Z%iKWZ kYLtdSELD1QKh5-r#f5D?v)Q^uXXPl >#ALh?DUoAjyAIFYuu6@uMvB Mvxh~C&tPMN$Q3+(Mf+_@sK>r)B zKm{=BmRA_lM$drE|JW-~|II5fSs@=|xD|MN9AbKf2$q%MT@_w;L**|1(0= RMt9b(RhDWDECm0ETR15yB62{EWlCP>1ZjGhX#F7iz0<|-9ieGYg+AWAw5I%N zbKeD>ZT}}p#&x3Z`pEYfp=)iYXMRLd3?3p16*E!q#?#`nHdlz}CTtos4F$W3ljL1d zWjpkcQ76$hnORy~YY*ZX3qR>dEQ{;=o4e;uym__5g+Ppy3th{E&&(zV_mZpe`K@Li z`ip%BCTlt-e7Z~eHA*d)WJX@!VBZl6JJs#$Arl%o{-z>#0H&(*Y )^{_4SFXxx9PE&MFs~6J;vtQwP(oSjwm$%{FX?6HF$JiK{zPn@*af zj&?|ueSk$#4(OlSjJH#Wlie`iXBw|NPUO;v)Q$zBA`rTH7^UtgWxzzJIGgOZ!AK zk>D^&+2f;E+OQgAaIe_H&0RQoq2B10MAA*s7NX%Di_|CH$2t3aynF5zy2yrgAfCvu z^PjYSbhgUAQerhkNvT;nBk76bYo(sv28HfhA|sRhY?as8%%3lWIHoU^SV&M*Pc8At z<=C8yVOiq9*$GRVs^?y8mpO8fa_855uJ7NiGJk%z*;n;JQ0r(F{RcdM>E6 XMOO>R+q)%LnZPG*(`0?E3V($OH0 2 zt2ymFgu5b74spL@>3AAvo>m|pa@_i4)vTDpA$2!>o+NsDP|~&C-lB!~3X*=9HE>-w zHoG~=Wp&+bkI57FA^o-*HRRm >EJ&g->aCoo~^Fy_3q_0~&!@6Rz7x^S=w)1A`!BD)t-uDc{ zbi+wlp{b9QX-hlR@%!u1Yc~(e9n!z8>b;bT=<%(u(f5iU(-%E*JnP|(y)7**j*Q=o z7}M_q{SSoBKNLM}Zl#x=v{(OC;yqN>^U>eRN6X*5c`**3wAUvV=pB7@YgWN2@FMz? z;%%`9STtq6Aa@48=XoHfQQg^%^$!gjE6e7uxbZV@CMNoDZs%PuoHKTGE=r?a7AdQ& zY`pzkJ?eL(!@I@jx9fw0)BG)y26VRRVBXD}?c0>zuFLf%=2eD^pZmIM{BIYb{o4)f z<6k1H&W8J`cb@2SbhLk_G!|U;Vz-aGTu0x=0p+)}ce6ldKRU#R)7N0w>82Y=%GB zFQ1TYayo5cHPe&K(yCxowEENE|4!+Wh+V _-u(OFq3BSTsRp^-;&X+?^U+^se3lGN&MiMXb-A)* zYHc7V^Bcd|!>8cQrm@dR)wl`PfNB|8&F}N!Pl6|^H@>@Qi|kBInX6vEo!IvJQ;n~m z+->dZ@|`9xTt)Q|)v0H$_v<`sa*ZhPJ1-{7YjH=3r8$NnRXY&QMLgm4$Z&7@9xJKj zD|;fxyT=UPndoR5tG3_%#y20~7R{Cwz+!;13YF30%9i9Un;Rq=-hP%eYYQFGFMhSR zKZGXYe1f-5EN9>N0oZPuMe`lHs{Nc+Ne@zMH~DHuoph%simP}#4&lcxi|8wvHn)%z z%$dF6^79dg);Ws-{-aHePA6nLRKA&(%z5S+1_oYn?K|_hrCqMkb=s(-^7g08^`a*1 zLQB5`k;t_f!>+JR7y9KcM`%y*$JP9WUyCUt8>x)1k?&SkX5-gWIovnrj$~ao2k*jv z&zYFT@7)*iIB7@nb=9ly!^nraAL^`cIQ+=D$T+k*DTJGO`J^b$w`(3T*mJNJ;jSOM z+&D8m{>so&bN!iK CS^x@^7 z9~?&7dE_*Xan7nV>OToO?{Tll;?QPF)N9-6hY#Oz7JEIADejOw;X7Vi$ju#c_2FG# zp2fLV>y5?wuKPBcVV1w7%&UK+Y`eUJj>5}xlX`v*oDMM=F$xaMc Y& &+{wLnxN!ZVmcJ>DqC>92~VwGyzbr*kDCVu%cVIR9BiYOAIsRYeMXc~D3Ig{@P zsvLHXigC`^4x83gi&hc0cjh`;CsS=$gw*#SWm(wI=guap+wZziCK#iLm(UXb(!?Qm z>i2KN?%MjvlqmQ9Aob)ihi?x*jQ!xa_;w|#J2J~+;mp01-qr>VyKUwCVW{UCw-yWR zC88*Yja9gBN1eo&g{k>J&Bb?mc~Qi)Lgy4;G-<8viblpQEplj_oD$4xOs(bqq3=H& z{?Y{o8AXPBJ(_d -w$5#XcxP)Ng3iC+iy9Fy;>L?Z=*^CiLSceu>s+b6Qg`hMRKXrH2P^ zpXo`kf4g&chPSC_UHCGKM8W F&6<&ZQ(fpvNk!br`uYk1 znLR=gdduR=hmS7HNvqzsAG=v&bluAKcjMgcyLv<6{cbtyQ+7Rv6bFAE7NWQ>jRxvB zbVPpNcDZ*zpvPC }U z9jL5|^Iifk-|gbyudA7=Tl?^RNk-^u+R@oVcg|L&=f1f5Ju>;n;Evz5n~8`LmTE4+ zfg<|$XSahtH47*!C^b5Lq~D{fQ8n(D{@~0BeBUAM_5FLKg0ii|k(pv}j&0_x6KenQ z;RCV`!&1X*)^v5cP>!$2;!-3xi)X!>jrlJw*xn;M)(<>2&nSq1ap_U5AtG`lWaZ z@}5t|>M1YDuGyD%a@OuWZBBmvLaDy( 9v+}j z!>9(TOR%Bt*$@{V(HLP0?$<{uUxV`Yf*eOBvob~K0zpFA+$4WRBu{3aS$&Uby7=Ct z+bSrxg}BSF2cM6f&f1}(e&a>2!o4|12QGG!zkk=$iye=i_J42qwJz&79C&^vY2^8f zWy2TlS^BxFQw5=Y4xBz!J*;SjfY3+A#b~`FJK+T vrnrMOIL`T}W)q6YD z?+X#WO0XQiI=HIe)^hD`^AKFtkT>LOheg}qQ1j^@BTu8JP9+)$^t`&mVOaNVnDi~0 zA*J`MH0tK0<>!Y(KFePiU%E!3a*puvaSkCU-PN(H4Hw?Jb95jUcd`@nrm(ZO&dqAD zOT13mpW$d^MDzClsA~E3amVHDwq~t*J0?=D+>}N+b;hs%QVeaw&Yt^vtZOi~e&*T) zEM;AP^5t&MjK-RGoWEY`6kF`+n!4mypd?{2t;z3_D{4vAA|OnU2#)`d;j(>*!ML~j zYniMLKAN8%9Mnt ;|Ng;Kk+`+69Jw9N)MOsDB-e7Nu)yei z`@8*EbfL)Jp2keLX{B1n%FA02|5Mhq l%JYkw?0Tc=<_%`7NJC#5Nkl{q~dZ@GY3^jh0z<6!PQGM-)iou#F TapRzQxt@GB4kU?m6ra zpw_; b{$Z(3`LN zEW*2XI!~wEnXexh(fm+CC$F@0X%+Q!uW^Mbqeol&E?J33?x;JLRAbHU7_qZW dp_!*k@ZulF?1`>9l?1KuTCn|Hh%`l2Y}0ujRt zahngqUSj8?=3ZM^DW_FDqqv;&`m92iBNS+BH8?Gk%g+kTa(z1GYJ1Gcp-|*YPZCCG zJA12J3FXQP)fpK*dqz7X2aCycoYt?KZmLUQowBGbEp2);As#e;LvUkyAbgq68Bd}( zq>o`0mG@tkovwF<8>D(n;>b>g{cUFHPFXaLSRI`YahT<)kMPxr*+(C i2g%*+&9Tn+W>?{iMSs7SeHtnxkQQAop~R*h$?g2i(ak@`;D7UdhXrnVZpgli%n zN2xBm&CJCPmP8!EBPuBLuXkuc=YQk{UH$Y)c0fLmOk%%hSiSkU(Kvj*VdGm)j %yapLQbo5)DA?1mVwkOwxi*$uCnigT)T)r zO7Fc7@5)nQdOqovu4Jn$M<+Y$UF-r$Kg{1XSE*H%9_2e!eZiS;f~H<-9@$c(Fn=54 zek2MLVSf#7Ijni})~6i9K YVm5eRg)yOZP-`Q`qB-}hCR>u4?mdvos>Ox`Q@wq!g%W!q#TPoMX^Ws z-lkDwo3f;Z;iHLSIh2oT&+9m1+ixrWkV!v#Xp$4ldHlr5=D2S{CWd>K^nb}6aMDZF zDA>O%(>}ly?W7ih`+f~ACSoO9ta_xc?W%%(z`kaJS&r!3ia_^@|FGX8pU#EZ@e4=D zD=}em#d2=1*e-q0if(Ph>rx`ms^l+cFD bMm)<>=7VLL%!W>&6WI`}dMXS}fLYxF?1yjam)9JT~Ct?Y!)IQ0@pq znX`K2SJXp4_wFl_GT%hi8!B$)^Q6@0;zoPoe| NHi@{*I2Fi^`$FKEiB$Y z<&gTIWO4h;CuhHnCjZ>|C5fk1+g^(0F=D)4v26EEwVM4!oEa-HorJH@zFv+RC}zhm zK^Z^8m*__ys%|uC_;<1j(gd>90x?0XM@QMh1S+~kgXf+IoLD~Q^}{~~$`$q7x4L(? zluYlbQTuK7eP=8-zMk8zQPMQk{E}Q;WpN~IN*He*wEx|T&Cw;>4#Z&J{RwuV@~Rzd z(nqa)bskvX-1wHO6?DOBA++&;(RoC87)o0yGA7#my&A?$a__b@NpC(`ThUX#cRhI( zogHu3*UHPB)OhyNP*!6grrGYoH}}DJ=|5D~Y(k!@2{uXGy#8z=K5Bjk3Qj@xoD&(? zX Xz_wq}K7{%WYi>+yP H&`t8h(k% zhHM)(fr)~gdm>rB6RK~^o!EXn*;X<6qZwLXZ93?&lB&Gvtq^aQ)P;-7`TdtzxHgUL z;t+xzUcF_;lg5h^#XnAe*d{SIJik|28oGIegX7Yb&9@Q`yin=YC8D9~jZ4*gR9z_& zlNsL(HRsQTeO9F%~0bygOX;>P_Fv{6Z+YuYRQ+isvftFhoDbuaj`zIi^f z*I(dcJ2kdLMyywi +{J!p+^__u?8p7d>EY`};if(g(+-nYJ+EI+bF@sJoyCOM(+!%B zw_u7SleR^?K6VEhlx%w2aAPN%ZPB(^j@P5#l+Vdz2WVc@s&{Gk*iQQ_4C~J2Q6S6a znLZPmJ^OxbuF56*;ZI-NTdccs^=kBuF|?z;FjqId`Nbfhaj z_Uj9!W4f+)!s<*o*ssxRknbi`4nB8f9TIzKnT@{o$cN)nltRz});)XhyN*DCVV9E! zuG_O5gEUSBTzoU8Z{qN5FYapKWXa;?+Q#jtsDUh-e7|;`++lpPReR=xz@0r%F1 bg1*nMZ<{lww^1~v11a0Fpz$$z~ie)7dYl`}!lIfXYJ=9pL6P ^CDEAA^77 z9^89jJsbb!LG{YLV#GZeo$sZmueV-xd-C)|OIg{mXS(LAsUy+$90_7)0%~tkTXT`? zLId8fVB@Rb_xJRDn`!HaHPrg?%;uXGUsG1oG1b(r6`AzY&gUL~6&wi*U_6m6a!R}M ztWZ?ncd+A>&@NPA-G#@V-o{F;&CRLo0v{ajT{~Cy#eDdJ-MQy+E%8yXj_eTEH(%P0 zP`s-eA45UB!R~8bN1v-G>+*AF-Td7Wd`0$z9FMU> 8!T0?94>vFJWroB5;=dgt-14}Yf_Kq75JIe4m+)86Yjkn5@l^Z zdyFI>Ngx-ZXU#?8VqU+lZ@U0nV532U5oV2?Hez&^+GH#4o=9|Ig`VKg+Y*8UUBh!2 zrQH!}IOq$vy55gf@ogTyPZqDf->osw=IrEzFF&dlr&%QDmvV`)7_nw{^1;I{rPc;N z-+*!z@tqqlbL_)hkfZDOolZ~?eA}0$s-ukYgvma(TRonJoWX~sKG&WpuTpono?46j zGRy6@^MeTw*Xy>c0gs=pv{o%QuX3Mm>5~j!y4{=qlYL>qiRIF<6La@q*OSx0zWFYl z^?rmpo0r%5<86u@_GPxomS+uLaPdA9_B}SLl=|!Uoww{Ih-)oaQ~7h`?3=Xb+XV0S zv>BFtT0W3&wjNAds{h`7r$|M>E(-P{Z+CCS=BvH)ypiYKlz21l+!k$CwkW#Gc0Vrg zLchy%Vj9UH_Vq=R_dZ=7QrZ!Z@If2g8P`;N_`aR(FrkdE4~Bai?mBg2n}yl6YvXg- zl&Ow#f48?6-=FQb ?>CHAh8S ztR{?1KR7zxsufMu6F%ykzcCi()+r+IfjQ#A?t1T5!Qr2=({n1X_3j^^>`UX7zWT)W zIoz06W2e6JqX=&CI?mwOjqRbCLx#^2`U~DZk&w=KJYA`nwQb5P q=4l!q3*xS{cNylr)XxrkVLqYA&a8t&7jtE`-(a}TbBJP3Gj zsAdfwXt{5kV|>~g-cozf(*OQB%aKoa5;J4G&TVG%ET}f&giy|E2^GX}1h$J$Sh$Ww zZ=2}uNQP>4ay)c*AN|J1pZ8f%BiCLsa#F)^#wJZWOvP3?;u$Qb`x{fWgMJ!M)lye) z=jUJhUjS4 MYO!Q!p7NEqwaY73Go (r<>vVz0BMRu5|m8ZP7HgzJE>85 6P{Gc!D;m_dZe zwv^$?mjCj9eiH=DY%$P3siV<^Uf5iL)GLR6$hZN>XY8DRK76QK{o6O6S2x~ri4Fh2 zxclynW(-_0#-VXMh#2*B_2%WmMm$%5ERG9+61YCJd_}GN gM%6 zBLR#8=pZtUCXLRxwa6-mrtnIR`+0E0({}O{jf{>{f7gggL@fQmja~ymlEqvFm`4C( zgrXJg;!qG#gsZU W&lk*S>zQ0bmCqWLg&&=P*x$N)W;n7Kfl=prLrBSoJ^>fiOD%OsVL( zeU_?fMq2W`F^3YvSS*S;N$ZnsqxObHros7xf8Lo=x2$)YoDk!~+0WsG6XO~kNG5^M zssMOt@CZ1fMZ!snn=W%3={Z~O+@FAkO^KP9%R16!Wu{`%90_Hq;hD6|a;GE!B z>S%!siSIn05`X$JuU%0HatCmB26>#2=`=DvxE#ma^$n%Q!bKItNf-D40;n9I zV#~=1aM(CC8ByylZ#Fkvxx{?_*#p+!|LqeQjxa17EAl22N9j45%=I(p-EFY1xY%SvfraDciyhwL~w z;u}^3i~}cao3$Zo6C`T^9!wrV;z)t3h VE_sLcqe!fc$j(FzsM=y?q$^E^$gm^KR%kav3pQ2 zXo{*5mrUE>`T0F?_@n@-#M!+`=uT(=Bzm$%8CasI+k>-+tRjN$_O=0Q#i}|$H!gAG zO{-m3Zd#&-hQj)X|FHx6PwUBvSq*N2FikLYFzYOQC?2Arp-ELzl4E3L`3zhYu(j6_ zKmdFwYg5YbqXZ3-&Vs>$Q(sq0g#bQ!`}%Zi>o~!tyI}9dzBWsJXrtR?#E{R8NG1af zsgNL(>lPa> =r(f#>KaPr4L7YZ zqHytxu_dp%dbx|k+^U))`{^kYd_w@nQ>1|c(=iZ23X226 LV?M9V544{OUA7U~x<(qCvaobd(mLJW3K$ zWYFqN=}sff>UCMNxB!r5*w({S$euxM^8_;{fL(i5R^IkIFFsHD|M jGJU0vt#m#-!uskHmWK0VmmstVm<-CP?2#~_K&5<0ZnFHqLz zIJ!X)1SUFPr>;~B62^SycOJjM9(?B$ojCDWrmp(l7`IfIL}JB4!6i&DiY~!`gN;L$ zjB;`Ubfm+fY)eFA6a@XN2!#Hw&JoPj#f5;q_CNWvyXfA}T?a=h;?& QtY8-1 zc;hNoi{@AU>S2vI*d803MPwjEQ!^gVw2=<>3$T)bFGy!6vf2#<+yeI_ffG1`r-~g2 z-hCWm27%~c*Qy(DT4UDNm#Xi6=Vet_S7jeLd{WgnRG{ed5M8m5)ieoK+1*3R*x9L& z^nrcGeZfUPGhr-Xf=;xK5m?7g9s^g>KsChxRKCNE0tEtd#9Rr7Jp_i4!9}c-b`?F- z3Od>YdzG2&SC=$tx_Z3}HIJszJrYzc9YX-0KqEAL&_wf#otxu_Uyu-~7#_mGfzI5< zMZUdj0)U6aUcVRR6m0vz%1OnrJ0z-Y!OBS+6b1ha;4iCw=T=g1$Zq|>3cDIA{qO(o zF{m!~&fhvXbi3~QHT3CwuR;2Bl)}@~G&M1&Iy**D8kQ23)rH8jSIfqxLe?nyJAZp0 z!bC~K(L%lFl}g8R8fWr>85GS+nq=#db~`^uYmYArO(k*>F+_AZDtZ~tnM7GoIx(k< z@?GTe`e}STB9dvho*Eyej+1@ji@Oeh%%3G!udcOoGpA^Aokwz*#%tY+A`^5mkpaZ~ ztYzk(a^3_057DFGIoy7ui?ex(>jR#8m3@6CjtZp2!FtYT&LAKy2qMD=?R`3Z{B%Ej zs7`VBrG~621+^LPvS#3GMq;ErG6NUeBNEXV;BXgm4FM_xL=HE_o{nnNS*X}sXY|dl zyo& ~ n_!I-*XvIF|U1TQ%rpFj R9?3v4iy2;R4i)U8nQ91?vK zQrE5|nfDPxAMZ8vAN-4 N?T!2T#LJUK&eE|~@h=4d~=iXrdkxUXO zaf>OxnM5xGk8$XfooTExj15cC;m9ut;Ff~VC<7=W;d#UVJWxC$J V5n78e0pq?W;bpR1Nj_8I+nq9{?19dfCsLABBZv zT(TT9iHQM>hm -5+q9 zTyTnLQ%!=r0hdC6iEdiB+~bd&)W7+=g(@f4C!c<@#V#oWZh%Z>W0^)p5~%ISS6s2o zFo#h lIBwv3af6 z1iMK^;q@-5HO=xOLq4}VgJu>qdggQ&{r0X30PwiuyaOi2ESZz1k$n?ztbo`}2dEO!w_aJyz)FaaYz?3nEp0{kGuA|)zBsuWnd(?ywJ*ync?+;CWFDYoc)Yj z*Guuj{toep&tB&`GypVa-qXk8o_A7bf-exXGuzEsbR4RH87R!Uf&K$XHWO9chOIYE zG`1D1;CAX4*tbB&&jbcBe{!Kg5l68nI*8 rj(uQqafHrBcoB>SmA;* zjCAps*3a$6x`TeWqQNv5)$kI}o00hwzWFPn(abQwvkCAGI8VT}2G^_wc$6Je`;K`4 zdAm4Y0M?Q)P^g0PG>1b%D0Q2Pr9|(W&-T{e-c })`Qzsw@$>(j>YpY%nj&v)KAG8=n(U>JGMG^o03PrXp;mP~k%4wIoXCXjJ%?<} zLaxc>baR8j_sB5t#!dAmn8mvN#9?dUb&cpv(5<2N CcA8=R+y1D&2Q1f&;q{oqti~ud{9QCWK)&|AotgRTiKG>cbq?CK$ozBhgy{iJy z)%Bgh#@f#wiOlL!DJ}A$Cl6b-6fmEzz~29VxzpAH5O z5?*Op4zTbDv1dOqK6^o~Kya23JOEP!WR#xy@qYVvH^bv};D9rybev
^A3#`8`#GQ*72^%G8AKB>Mt@`R3^I*j=Wl(WC?RY__y%)?<>V-XZST3q z(MWt{pu%0~R8}mG?LK8AizyLc2(B0Sc?PoM5|zuKijjJ8|9slH rbV-fu{%4u=?Cw0onLaVT>O;S-Y@b5%+8>E+XGfE z<`SVg4ZsYHN4+$Of8e$;FVIoS06uWbZyhWE6(Ik4kYKS9S_}?MIg@$*(fo&C7DIDu zyEIRU>46jGy2UWyP9KK(bJ`J5Z9qfg-S);f|L3zW;+|c_S ^m618r(>z0eB%d zvZ~OmoXH0BNL4Q=(-l=E4!M*S_%x{I5-DsBWqF74fd8T=#$p!y733qb9VizKBAgn+ za{}TVdeJX@Zcdaj@%8IZB<=2jsJ3F0sCGsx8%yfdwMlcsqPQ!^Z|U_*EMW oW|U^N(|W=9M}75A0$xAq24f>=f%GSLcf85X@#0Ul@$s=Ax0VQ)leF5J9y`wMMn7+`1eRm+lM>t^fCMc%ijK- z58C?nby3Rlp~867L>~g-K<&Fv`t54?BoF@kJ>s?A2K~c5Mee`-cK?&9nELkHUhKRV z-!xh0z5Yx8c>47BJ24NhqPZKQ0kAO`#luy`=e!h2Aif5#jmKHm2k`E<6#zbl{e)Bs z+KUm(i_8Doky-bEF{k=7DgdSm4vO=>_J{^ zuuJaB#wwh#kiK#p=>SA*A)Fi_|0$a;{)cKK&9rs&mUJ)>-nl?1HKULW0W8t#78ynYnZU{_{*}YF^@A7F8Ln1#&H<~#wUZlH7@kkx jyApDwK|WtG)03k@+iK{Oh|e0M4ZZeGe1k zFj@F_j`@?QqM3vca7{c |P&yTy*9iEhLfgBL#4 z+x`Ad+u-ev|G8dkX?Z9HJNP|khR*zjz~l|h1P~Fx%f=f(@|<_7stVt-{;XD60Q@kR zoCm-F){XDypAauPc5*HzA~2SYPk}sODt*C0&Q&h>@^*{QTkcI;`#ckYiX+wrs4x>q z5lRMW&JNrvhjN;$m)YELgGiRH=p5W~{LXv?q;9eDi1* U*fCvF_d5f!S8EL5@sCP1k>(zxg=peO}XV45kgibh#DMJBDF zwG9PwDhn}dEF6cXl~4v;RKkNvAApms@BcI*{{CZ==rWR) DzGu1Mtw0P5I!YJ*Lz%U`+#%upX1AWCIEbG zm+kqgZKN-Q5Uggd;Mu_o4tpto|4a9SM3NF*3vl7!W6mRp!uxhuRu>#L?-j6A@I-P# z66t|AgoG#EnnV^7JKM~@Nc_bMgZJGPIdBlM(|IsWDFaom5I!2HWVI2AK(X*(S~`l1 z<)zJr!A+(i7-}2bm^4hl#6$-0uZM<)hv5Aqr5wmo5MqT~fPtPU5EcMKTn}-cGs7C> zAn0KMPg px@lk%^gD73jy5dEw |(-)kkr ^*iph?If zsB%20{O0FJ4DNLMmk$@(%NC^cwJTy!iJI gqmzGlH+b#>{>aD~*+ex +Cdm83oFM#* zrVKQqko4%Q*><+y)*rtzVwC4uCgc$ L79A-?A=5$~on1Y~4* znkuTR9091T%zN84 n5vaL^DHS-1-b@qmtf#mV$(VzXe*x7?)y0rdb@Z3^RMCjTGZ1QJ&g-KvmB9BE!KIyKR0&NU_UB5KzU^h{lc|i zaHp-U4^XQQ>uJ%dH46kd`N$B@+v2mg#_FGk-wksDm&-= 0iWMcl{^S(M}07;+I_v1LMFN6kZUjwHVN00RzhYp-Xo#AQf=^iE|qL2uhKO2&S z#6ocLcoOX6jPUsl5K~e*SWrp1K`j^87;1M{G4)KKgh;0`C23Kb9T!J>y>#``7 zzz08(z@#fAfJ6v8(G9zQzG}xc&^3aRy~y#i3tt62fl8(~9dqG{(+~oV1TauritHnB zemH+zPnbciBRa}ZEbTVDt{U+D;Ces~*uKNthY3I_6CA!yRFAH>p&o7R4RHlB%&)ad z{qo6Dv9#PvW!VV|cx-yT+bfUtdC@E)BJl`%cbkt^H@fJC%fKS;^{Ib)4ixv`d?57O z_xr7;QWV=XfD)IlVCldjhB;uUVPR~$_L~85#qGD!M_>DD85*tMgIoVA=K M}OlIgqa1@R5>XD0@(xO!rb4BMhOr~zISLZ@%88P%pbiL zvLkUpD;N6c^S8JRjvstzT31o%VNL)#n+f≧D1fv*>HjXT-pm{W9>fX{48NIk{-l zqR`rZ{PZh2sAJ-W%LDX-S5h0t$M3^k-FHSM&fnkJufMDSfKmH9RrxuYO)kT}K0jn_ zXezhL7gwezJQ=5xc8UF(Z<~Jg$X+e> J=6P`Uz^QM7MiX!iVJV1BsBw}ZuZyxyI^96!cf7zXYE#U;FyRgGu3gNpk z2Z9S9=v)XlivE@aHI8N!2pP{CTp2t&lav`0N%r(is^W$<(mMQ8 fn#S~WM6`8A^ztP|=HdlFf}mcW-;=g#OAMn7pMCh!{>%^C zy40tMzRz(gxCx)n-qIR+s yLPk#N5CgJKm-<+%+ji=F!|sF_M(N#<;_ae1fx)g*j1opy Cha6q1UEn}g$MlP>+n_qu2adg|h=*Ng2X6)G+$>gC_e$J}v&_!)& zDl%n_4GgGkzsxx{ k(iGKE2e5bp%=5t>_GGveP>hCSDN?qSjlgXaM zr+0F3Q_u?}4LYcO(4!JpXUMlOWy-#Q_N`2rDV5TZ<{^qK8?rs02$Q=8m~P0{>D|CF zJ=*kcM$Xuc89smKow*}s*!1>{iXT0?T@@D 5cxk2l*rzt2^9X!${Lut5jEwyR zT=2pf3*eQ2q@ZmWb~$UkH XKlFh{20G&TgBwkvLmCJnK6&i;fI7V8DSRLm6dq3YiR)ZO zRgtj#?i65N@clsWIMA--H-4Nn9{gzxL>EDqttu1?3KPcZ?jim1zId9;;5ICCng9NL zVtB{F^k<14y@2(5pR6oM7q4rIp)0E`in3DTnk8X0)U<9Q`U3zRZyi5F1Jq{MSKqU$ z(vaWG&a%EFiZc1RC02SM$F_SzS_crXuFFxzSj3=LTKwX~bdF66Y<&7bT3W-VlG#e? zS$KR{AS}Ez@_=-peVc1h%1}up$PS^y-;Alv+O)QNk)m_<_?vGMXrO3o>jyV*fx-t# za_?W!yr=@r8WXCmwO>S1Ucr1rq*`fkCZMmq#G*=XRM=4QMhIU<9>M?sGh#_ZK~x_g z;KL&Fg8v)?7M2V&w|qlnczYLLhvmZe$(=M8llt);+#XKDft#grsQpqnarj^;s?3c$ zegHRe;=|7le71qe0SZ~ZphR^YZKcHv45_4-{AOA%D08X)p#;_Dg+)b9MCN&CWqsi^ z)fdGazal(2jmDU9gp`G zD_41CUU8B1Rb55T?a{icr~472_BXV}*}u7n0NmhNy=?R6fA`CGeaGciUm72dH@gBp zwYV^$?x;<;P}HkKvxZoO&3s}|ikFUt **$e;>l0B!#)cPwI!pWL 060W+*693|I(xx4gat=vIDZ9~ z;~l&>u?^Kbf*#xM#z)DSPBhSu#qOEPa IQM_ zWYn(AP0O`6eH^`tlN8XSvaZr62B%E^gc5W(O+k=Q@c~5wSXW1^TzkoqN?ldzH<)z# z&8O0| 8tb?HU2d8ERppx~7z+>UrcF_M{S^z%?Js6Td0tGXV}^>y4O*EWHbd?iGi{k7 zg<@b)VB6j>m^p1esir}7p9XrFrwvyFKH?WzfEQjxfaynpp#a%5t1anSo-*tiLs?yJ zE)aQJlf)t6(BL#j3-+2z>X1;ec=6H1p+;W5zDX}!REoAQP5OqLmaCWcB&fm|lr;qz zVWB~V5yFmUy?tiz;wQQ$m__2)`U{2Q>~Ztou@b3C*na>)$zgzjlAe0it0yCdV3O;) z+DR(ON;p)v0uWwn@}rI>I6aw#$Z}o?SO7o_#e!$((v3~@>aJe3vR2FbjrXu4LNeY* zD;nKYSLsK`@F10-|3Ds!7RoA1^|FPz=p1SoD5bX_-4aVLDxCwFR5Zrbx>M2Uq0Tqo z>-=x^g;$?G)ZW+j!V4`&UV8b+t{pEQxqmDi{%SP(6dvTQ xRZPVVUVb@UHC=1QW#=?k>d3;s`>vwzQkdYk( zA^l{wv! a1bu4HeStSRZygcQ{9%L7C EVHpOY@&qSwRCx7)`3I4>!oMikLTtNy+x&u&b*$C##&mU@s?MkvDO{Q zOj|2<{zdx+pEm>Z&s<)ybW>hs`V-L!mt9bk*3*Od+`cInE!;GxQVBzr!u4KRh0Imh z)LluB?M~#-P@>d6HY`**yr?qlgark&C<;-!f0{d9A(1;}3hZ(a*+I3>7AhSUDmjPG zfDfapbpl%%rs90%&qNA#_>|*ipW8{89C7%-X+rZRdmY+q733FiG=O3gAbSvoy?ggT zAVT8!p>BO`{Wxn0B=jHvz!5N;XBHKiBA5kd@!wGQXWoL-CNJz##zJsLHt`{HVsEP( zolTe nzYe9tmX2WG&PrJ%nUX|CK;o;HE>EZbF_U|w<|n*#}9~h zT;ypk`V?<^ 15y9VAlNSE`)7g$dR3t->zjVKLs_O{c;2V)*C z3=w%X89D~KxNrftp?3~|tN?i8<9~tSu$ x;j55&m%(>>7%knnBGr~mSewl!} z@03@rtxwxtw{75aWI#HJQ8{W7&^5h2udJ^;j2_p&z~$d^=vxH9mz}vRQ~=fAV;D30 z4KoWx2p-gU&vlueb!A~A6lCfV=}tIwp{kU&<^smyffuaK) 4kF2E)h9v4&(g$3Yu71A@ZkVtfv!=Pu35 z$0vnk>F})M6Tb21zswJgZ~A5(eBKSsLmD$NLySkHT2Kh61Wu?i-{cB+Wq= A(~bX%74fVmO}^A-&{W%bG! z?fGsYcDEMExv2JK8zP9J(4)`h(#l(=ZRW#8#!V3m<8KoXX+Y^oB*4FW|8`4zLjXmD z&M9UZHHoU_aXr;hWKB#D>&~trJ>FH|T5%J|9B!p1Pvf&Q;72$&4Q1gDSa$PzOI^0U zR`!gvS^IWv5i`9ZxpBiXtFRy_y$Xz6>`rzpc%$R0xI9NsDeBpie z7kEha1;7ntf4~MOfvbz$0C|{v^22Q=K5znJ#Guo=H26#mX0cx3yXNnXc7dnC%rSI8 zM-BoBv|t{E3W|^=-9r9sbj42T5A^;g1>lUBpL-I7Yjf~8sC^<=t!Y9V)NrXarwi<> z*5I>h<~%m1B*BfNB$z8ht$tB=X;ek=fqmH}@D3r(?c1|#w^ykF07J9G9 rb;L_KLD)a4dA(b=|FN+|N$msDE+<6m$Vb z5m2@>(80Nfgp;XIEtDRfrBrX2GKkZeJv6@pj3A<$SQsB@G%`&tw3>CJn5A{dMZfn% zx$X(xqOZJqsp6I_|JlI{%|gX&rjR#76~F+ROJ-JxbT!csaVKyNmv__wW`C0C%iV;KLV2(g7pfCe^a?I2flsdjc&`H!MzwT_?OY z*jZGHHaPvj`0Ce3^=l6n2zLO!JL*}QH${N{V1EGRkA_X7pem(G8k5v}C}4K&2`Vf! zHD4KVL!G0XIxXD5jZSRIF=j?hx$L@#jz?T<^TnDwr^M0ca_qzm)B`ZWRku#lV2fY- zbHK?$q;}x3e7$IML^fR!6Yy7b*^;F0K5$&0I94Y=`h^b}Pd#2_zy9(zv8ke8uBc3M zE*=>-Oy|5Fapuk0aoBnM8iNqL>)6yIb-~0Ez|1C{7 QSw(_>h^b7$jUoXq6em-vOVgSCZ&3qTn0Gw*V~ju#;5n#xHBKj2UjnLp=!-j!^@ z#sG6qCww4;B0mg4$<8aF@Bh=cbU2A7*w?I}r+>Wr{HvV3+As9|Edl_BZD!S)8tU#E zLIOd%_K$dEo`_p$Pl$$$L^rHLSL$g~ ;JZQ9?*4FSKdGO-q-Ysy49`TY=bLc zFg-vBUl_oES0 )VH@AunRmJ4 l?^@Dpx1PPvKD++65d$5=lR~5BRMXn`a++cI63O4K zuk*~lWUBVjyRJ0$x148f+q} @s@xxg3X%ppR!w2wF#bh8=7par#KfTR!gK zvC=n`L&SFq@re+G6`qK2{_Ze!gm?>G>?;nWDFywGFF`zi!W2HKHI!z@4o}jwk|dKU zg+pdxUdSU53U9vlqW#1=zxKs%eirZOApI94q3qplr!hb@9Bb@ojR2Kiq8jSmqiENz zm@m~`-#2O<9gbM%Goz~tNJZ^)X#>q(D?V&lRda?_$IgHzVm!ApPVEHCQ-pfR1P;MY zG%x&aY557Oa8gWf*%~l9b_H}4#nD6*#wI^Ly%6z>1@_j9Y4)sJ2ehn`-lSL`{ba&0 z^Ucc3hxJ#NQz;xUlfykOqjOilHR;-+q?o3naQ1e3G+Aakwguh(0u)gE0+|_EYR>Fz zedhEMaD^_j4^v*=-y60E0e>6-U@;aQ(Hn+hw3C(jPS?-epq4Q?RhyCSr!PT(sAHN| zn4hghN5ayJ2tR}6 y4O2MVZOA)*darbi{}yysqCi z$L%dGF{>6dqM4*64To6!fhzH5ke!EQ>)P)#X5P}Tt$#Gf#*3%|8A)sM)k8*4n>V@l z scW!m0s~d(HP=#~|4+H`#+%bHd@G{l{K}%JW zMRzlCO*<~%OUk>AvTPVdpk>~+N%o5D2e70=U`Z;Z{|qLCp;CgR6ccYCN77*skpqHd z+0pGv CN3<9gIbdo`q_p z(Py=`d5r?hwZp^#@+Xau3vZiwH8CwZ;8wfWrK|kfn4UK|W=BvSQ_?MKpvwcEozIwY z(_oUB?TE6xs<_&+CQHvQjcKD%O{=~vteQ6mb)*Z-WF`l@+`5 &_2?b zqQ}FAit!gk{qW<5xOmQF@Q1xlh0Xw7ONRlN5-@5RXt$fRZC?ta)=z$a3SC3RX+s+t zM!p{;64_s>e23{iCQKyxh%)Pih~lXm8jhK(mc2r!k%QutP-(b;XP5Pk`>~kpV={n4 zC=#JNDKk4G!_PITI)Xn!>6xl*>ZNM>weytbO|={9TP3cYL|JvDhj;~Z=?9ogl(m0g zR6Y9GCTraradrO#_h}#f=;g+XFTS4q!S{b-*6-~x$dY=be{lEicTDw@4mgbg$l)Eq z1yq$1uxHP_ph#VJ-5jm6ZCKm7rNshh*{-OXsHKHM)T9BLM8ksv1BTJZzz_8q>cBpq zYlLO7AM+9W-afbwt`As%Hsa{>+D89Y55IXdPoJp|?Q$FLiMBa$X4Li*Huk2F77zlR zYs63{x&>mMOlmX=%)si)hONPFx8Bw0GmsEk`;LH7aY@7qWhL#@{Df9^0nU-hBf2E+ z_O!SRNg*#OEf9h^jw3-Qqp38-8p96UjLh(UO1K=zIgrN$eQXf?LFo=6n>d?<;F6CZ zy?lv4I*6hhUa3ny^u6cQ&K>QB4sd~32Uk^hsoc<5DVQYqI6aB+(xj#NDG3uuSC2}| zqFF@kOf~t+TUF7ln^bQi%YGhI>75%lkEZ%*B@+aa7|*J>9waM>=%&4~-eqq;lxJV? zf$QzBesht2;f3Y;>ec@}`sk0JQ|C`DboKX*^tHG2ePbk1cg7&kNi_b0Z)F)eZOhKS zW7g!FoDFx*pA{@C&r?$-Pa(xwR~y#vv9@ljBj&6?$Vk;gbgk^`@1^A$^~guUs{3#P z@hA--lJ>=S_9okQ`LvM%mz8DFek}qIuvAF4Z(cB>(t{w1<1Zh!JQkr;TUBb73$R6* zKUE(YHY43`tN#!YLgrLTnrU^DG>OuuV;+jt;m$6JTfQKHS6Emi116(|m7vFw%+eE} zq9WItKC8?=Z|Xz>NLd2lsEPQNh0|G GHvI4nSiH8*mBdr;n(MOM9GGI+u{C>lPqP6QCyH4F@YY3w*hZvWwNIw@@{=58L&1 z%~s1>JI$ckW>296EQj)MlAN`{ux1}7dfM7eGpdo0onKy~uDs?VCf^J_Ej6GvZQPq& zyXIxPy`xK;Ije*YC wd1k7-x0OXu=5!iK=!MySTZ-6NPa&p&6l|LL$#GtXXH8^II}aeR7H82(-y9? zqffp5TAj6XXCo >mTuIL!$v@l3u2JSsK!U zN|;fInn8R$EzJwAVbDy(Jl3|Y%|=H@r^Z++np09KWLdpEQA;w6CzfOw!H~yTy?mSC zA1~P7wrcgUTl-(XIKy?Oqbn;v#R?kx`Dh~f3S)G6X?f;tGcK5D(4j)5XW)>bLQ;AI z=H tzQen<$xDRN#BvqCsgHL=-`>uG0rZU<$H<)1k!Y39V}vBk0N zr8}7Irw%{lx9lJaXvpU@q=rpoS(EG0s1ma@W=gr2OA9C5Bs+Oj#)M3*qOuTN#8fR5 za%*L!MRXvmL_Y|S>3rCJ;f2@DhJ9To%MMFbI{J&B{)s87qpjbh=c4ElT6tx*QCO6& zN5KDm^6{;0`|6I2q 6z4r)_V2a_)evjkOfX@;JY z8`Px}m&{6;eWGw3=om2DJGyCqmO=xkF(!%ASLoouA-lCXY8Bz;^#+qxcdJhy?lDw( zK?*HZao5t3ln0 qqF$@#2q|;SQ@ZMAyvt6H%YWmSbh!cne;6QO$ zIP)Be%jdCgVG`UEWU`S{3b-S-yOirw+K?5Z?L0LBh %%v4wfc}W-POl)EMo>L01*4;OX>pnDar>=ZJDaV2`&yAWrd~KPP0!2%MXf7r zVtRAmCKgw!QC^W{0BTKUbVTjg+8$=zU)|Pv^qFA5`wy;^;XCW<*1l^$z#n7)rDnNn zD`z|n^vY9>&CC8%2B~nu9n(>_@AUfI^NLF{N@mX~RW*~cF?T#N@~p+IgT!KeVCGAo z9qHUPNJns=C&N0>ISAZamljIbttsc{g1F`&YFa=1{;PI-+kp0k2d=e>CZ@V%{TAXx zFvZ^7Qx8OJpWWJy48&N<$~N@#W~2fkm+t^jOY;Zm5Hi-3877cG4^tS`LT%qXX!ji* z{S7qghv?8D`4W{{DLN(lu#Ss3#YN~3eQrZ 3k`#by49*}1qgks8j@ zfpb<+NyReoh%Q4ANz6j@3H9nL-8|!{x@*Byq+=?Ous-M6g}GsLyScf?q+UYG;DCFP zm |&o?lS-EU z+y46Q8(LfXuFuU2TvAyzVPegsJj$a1sAK(eI)`C;F?brdx!M#kQ9ttc(ofh_uf4WY zJ9xOw76xF`ue`d-?CuGhEE`U1^>G;;01AHQtn*nbJ6K8%doT%EZX|=ornlrKN!5-*0c-)Tu|pNfnD)hY1KhZ0PP^BBs0um7nfuS^XP%#>$eVGcg;# z1cBD?Z(Y7Xsd+|KS?X8$sV5vW=Vperr}FYcrBM>{E30$7RW;c>%b1QJ*(*4ZkY3Du zEDOy(VljJFad9yTk0*2udit<-C+!djA+*%fd2g|#B4-F+p@_PG43kWz{DM?(aVf nrJb60W(>+s zil3rMdI;0dNj8z;dv+a44h_cai!LcKU &JNS zhyC`KG$OO#t+Z)$ZKKPDpdcH{(l2SoR~OZVeHQ?)XD5}f$Q;`e!MzSTY>7^K@?ma9 zE(t?f)%XH@v vhuy^;icYL%x*c;uX`aQ{8d0^*vYmuF zG~w{LUbBtt`k2AFpTP0o@R4LVt)maAaNGBu*q?9Cd8iE57J4u5RhqJ!gTCYAZThL} zVJ}ayv6Wf}Sxbkqep2?y)eqB^YKq^qe}H#PVPn3S3rIiVpwkte48`=!WY@jB_V`UN z{o2-gz2V`Rx^jG-q$8{(! xntADo%HbZ82n|H5|dybFEU^{P`C}-%BpA;lgwWbo #Wi zpSPupz0W9{Kjv1CbL(x-@+*VMo(QA(zWpn|@(csG_v8i$WtKpH7TeEm4Yk>I^9)Rg z+?(8Z)}I-ix9$}GOdg&wX7c^y#{aUTonA0*Qz6cGKlSJ2WO6^>JG~X(22nbfBmW)f znYG{UL5vl;sG-w;4>3Efr2hHc7kYV}&M9oJVIOIj#2YJhQ+>P3hwe>l2@3(IL#N!m z!lbRlU?8M;@wu1?$_|=p`G%!#b`><`CXWEQiQl*_Av}0$crgl|cxdN93g#j=l)f8| zj5z0QRMy$+ZxZpnB3>-)S0@GBIFJ7&rC7xcMtt|O+Lkw*<0F(9>MaZVN?SL?*MlCK ze$90pWnXzKXetk(KC^eqk{Z3pKiyzO)zb3y(HP?Mar3Y-5!6{2;&4M*)EE9iciGOK z@jEJ)R7RN;^&X$>_W8qQcp&qLRwt+n$uP~G^=|b22A$(di#FTGDSr;JE*;^7NX4F+Zleh7pw8>)jtJ9x85WL`O)%uZ#)P zM?k8GHT?VA?qF~QOl(gn-^RiUjwJzcj6F%z5T``Agc~HQ%AO_I_MefIpS|jl^o-pw zSpBX%jlP0xc?q)OqAbQ+oe!_sk)&5qU !>>AxL zf{66M=e!JzKYP1kQCF-k&+&~YR4>8Np>S5;u>Au}_azGKH;^|;*b8BAF7TRRK$#^g zR~#FY5yA+FC(hhK`l5QkQ~43Q$WGr}N$6zfRds^(l Gpw$5zM^Dp)T%673BqM z4tw`$sfW0p0T|N=``5~K9(HxP#xs!H%}?_DK6oy_I=}oFuKcHYF1eYRvi|n3>@4-q zIQs^(UoVt-rs9xB8PPducM1ULW;fo09Y0E3mjV%a>%}WHVaNBJ$G%TtEJJ2<}X` zrERWErWrdPg6C~Tb XjHh`VI3Vub6!BX Z2;dmzDXh?xYG=5Mtx^BVBUq@9(}SR5xZ(?VpOilMP&lf5}ZfmNS2bafQ@? zmz{|W=uV*e4%j}I1;$}E5KN9o#`f*;4`QXsvm9hi>_M@w*6AN<;m#}v_n~jD&(*yv zdA cy-a~J`Hf ?De^sZKH}m61BIx!-xo~$8zEN$xcl=u*wyr zpDAz1klvP;;^{~t8OVz@i*T(p!&rSwF=1zC`WmU >B}Vhb=g%aB{}$%1j5Y{gKrYQ;<2rWyg*w1kS Y968Iiv&VX)jk@~qWAOyB+$3-(el#cKuv z@_-7$oM3w({DH;_RY$u43jB9!+AYsuBUhQ+2Kr{#bY?Bmn5vFuHi#4zHT9-1bUV=G zMl20E`H)wSA8)BwNymqm7x~SE>M$22Y<0{5dV$CMcTis;_IMtK@bC~9*{HXsg9<&! zt52e_cr~)J-WbrlLzCQgITkhoKhb}tey^rtbznq1NHw8Agm)T^5y?6Gp62K*Iyo_^ z*wYnYXR YNve?+srQXInt#c>1ajYkaZzv4djpFErV&7VT1G*x`uS6&uW{Oj#DdD-}g zQu9l6;W6NKT&SRlj}`6LO;YwLpv^GKCv|A5Z{ z%hev=Y2Jdo(WFCPhQ;+Qtk+5DqZ{Svx?#>ye0e6N5PBu&*xK@hW$E(zXxWc!I=$Z9 z1^Ie k4y8JKjX8BBcE)7mIu9D;h34rfOj^r&Tn`(eJlc`7 z$=dTP;2rHMuJVi-2!Xj9do1ENENKA~qT|F43~WCDQnlyS`LsNDG$Zm63W}ceti}~s z*={+U-)yHND4q!jej40yZf+_{K-WiOWFp224B_P*66pl@3Uvu}2-_@-9A$Qy=dzD- zx9AqvI1$y9J*(69;Lt^cI-XJ^ZZEg+s_AyKXAW7*=M)!MC{vxDSI0~yZ?M@GG;`$q z?$;k<)zGf@;81_#$eAov6j< 6Dd-O z7-E17M#G~AvhJe}o^n%04aH!1daA7?y`cKDUgzt`p7M%)I@WdGm8CbnI`Xx-W=>L@ zUl$?KnOsrN(V~N=f;CffV{&tC`u^l|AHYjcewRZrM0s+Dl>GD2d?-6xnovo}A?m$r z!iF1tY^C=6bA!5RMB4Ohqp$~}c{jbJB$@B9L-iZ>&m@-mgrl)o?ZRBtlEka++Ss!$ z;QH^|c&uO8j%?<=kt`CBr)M`7AIKhct;mGW?!PlUCB((8G`%|J{ccIeH+Qttgvv~D z_O*qe8JmF>sdy?#Slr1r1?6xQ+yn<`c$YpBnQj}4$?xDj1d=<&(j}$o*(g53R2A?@ z>gKh{ExR1+&O3RwC8ZU+JUEq!ci(h*t3h|YZ*@c)?U`9Q#z_G#;AxgXno<_R8M6|> zQcMX^99LWs!O2`^;&M_q8o5ZUg6)DcyW4yWu1kAOPkskg-IinW >|K3b?`&CD z8#cEiQHNwO{byF4#8>WuXk_M)A{wT+2DtSqtGM*K7sv2nMqKTl*`+7?(dDrIO%+p? zho$0*BE>$9f3N EZp_~JfZE=Q`41}D@(v?Vwr00j?KyduLYuxa)7xRMNo zE;_&RIedFn&1G{1#}bcRAg9Amr2iF_P0Pd#-}~Xf+U8jqU4_I`&Kyvr8;vU{ZJ1)+ z54&gZ!;7n93*Rp%TEibLMW#-H6zO_*Jhuw9#g~yO`G9X*CU-GY82-)tKBe17f0oUj zbirn@XF2&oXMeV*{j*D5$C{I)yj#baX}&c!CH ^ZfrdTD_qJE#u)^JtC zPPcK9W2AI PoQEz7GXaDmEYtDFH*bhZ#h?_NvQj92~@5`KH+pc z;m!38! Z!e)#(mQa*v+i?6JqN~!aVv2v0JFsJ;Z$}R@MiiJx9<7*CROJLY9OL;(R5VcG0 zY>fUf)5EK|SpY`7XUu*)ijeYr!8(LpbwvL=q_?hA*|VkEny?moBs~oID%*1=!XN|3 zUSaptUO1_<2PyiO%?eARrglB)R1+k#KD~GmuTXu9NmPVQUYG1Wm?q0sPbB|}gac1q zV)5Sj0M7wN-k=rAif?((MLo`;`&z}f6d!o|T_oneT!{K#sYy5YKYwueq0=>kja*a2 z^f5ICiZs^le6poo
my1Mq+@MW6+R=J9dszA(An2q`X z5B(_uQi3BM_JLK7kg83{6w{flwb$ITc-cr*h4X?LBau~A_4&DvVsI(}up1YpLlq#Y z*q1In4i*z6pckTI`$MJa;PZr0TXZ)vDNCq5u;3a6vl^Q>OGAZhZES<#jLhP|BwalK zaE~6xR*d@|W_^9$K4Dlw&RvbFsXT_Z@Z1@5G>`vRUC3vRxak0I%l^XeT+9FcOJ5E= z>tvaiH|MyvOygQO{?EcA2c!3y+}oJ@;&e~Gc4T;-#@&5OKi4pBEu+2 MW~xV z1ALAykHpIJplck|4 J=VLcvmq_?QkP3rdIWA(fjUA3ic&&uHSX8LiC=REMY zbli{c5;e)D)OG4ozn=wb>U`}OPam&!ZS+c&+*|Kz2k?iK|8sNg)@zwr=qDbaEbNJ{ zD?&RxIYLz#H4@!QLQtVp0O>8&*IearFZ$)t4>5v(6tGE*HfFQ;Nz`^aVKTed8Ax}N zuwtt@vJ+tYqQXx9i} &`IO_p zAV?NZb78_W$+But92e&HQ;Y$Sm=grG<8RGWk-p9u47OQtugxDqhs3D%xUaaDK3gM- zfm$dE6eM*J$ujxlg&1R^u*{AE1vo$}<2KtcDVi>vaI$r<9OsQAQ&*~{(feo4RqxY$ z(0e;CO9imSYRkVQl_o%&ilMc#Sl0KDl70U{e98;*J#B-;{Wl1kF{7cgZ2|Ywt`O9L z_+Wpgh?E}stWO8_0BesiPCY5*xw`tPWrFpl^yw0d2u6R&D*pYd@_th q@GptV!ZmZD=?szgDQzqY^hlljtX4~9E_ z7owzAl*kZ1HY%b1>UkHFn5XBxk*Ou9!9SF-JvZ+r4x`9-?(|s6A7d!hoVOBh2U2-t z>)(6fzSjqM;^%1obv)^wuM#m(a036+CxS7F9CEr)BWlqUqG$5`$Qvv#gnm)juW+es zVz9V#CZWT0{gd24k9lAl HmtEd0=3%sYnygH~YaqS @TF6^ zK&L?Eb0^NE#|?p8f+=fBa7!r!uquoc#|~U@*Y{^*{e}R{%haoZI=o`=3O^$xJ#w zH+=^;#(B(RCGZa!$iz_bAh0 1VwE ylki$Old(THnK>;a5Zm1qYoWZW6{ufY|s`i&pvtCn7#d+;r2D!FP0RxYycYRLXx zPSz?XEdC)zmko~gE6BK*bw*Un8O9kcrB9Rba-S@04lE{ZDX%DJS9}0e`E=l#$82YWwINNtXcK^AAJPq3M}kN6i7mB z_+1(sHacGc9<)&km~812nz8B|OgSsR<9k$W4|R9h;>V7fr=rJ$h`OpDc6WJm0}ZzC zkVM#ZX+L6y+l-z$fh3aMN;10n>@c}(*dsiuszfOn#6NcPD6&Z@73b;+M^#iT{aq;k zVO0{tLm?yqbA}#?GjUf|B>M5YwQyaWP=+G$7->hCf~dm>B~8nPS>=M`YozKvi$;&k z?)Q*AT&AHzCaa1h@fJ*4zFSi7`QgM#F1q74Go?aC;yrgqFEF`=SWVS~Yfj8tP!mrp z*2AZH!p;=s!YRK9%tD7x^wiW=X|{4QTpm^}e%wDOMC9j}9llL~jT%|l!a;)$zVXr9 z3{vgvIz+G-igHr=_4&xX)-4FUx78S`Pzfw=ub0x4NCyQV^|u*VnDND6VV4ZkS2mcM zx+2qmmu{s<%nP{Q4GfSUo%`s<=y*8*03D4YT-{=BZ*I6{k&JGaPTso^)FLK$k{PHt zl6hJ}*Q7z6NyCnp8dJuO?{bQxYtO6f1O&NeqN4jY9v(rl@e1|h<+RcAqg@&s@g0ut zyqB*FJy(jNN^%BPg+VvM8id_)8rdy{yo`44k$FqGykxKVoxQ*hnBM$xINbj{?OIJ( zS6BA~5#L&M75ku(9zd5S8a#}Ko*sN<)kM-^@|qsAMS0>bt+hSLu7Ixb ;wZD}lw$)88ltG)8xm%r!Nq>n8^ZL&pIT}J_jWm)ez!-WO_~5_M z=T6{v-(w*ZdwT+`o3_OlO_61F4Vx3f%%x<6#N3OB#d|rs@P%{?8AIdwgmo6oYnn~e z_=<#qqVw}AOxSX{NXf*UoPvb~a6~yq_L;pGt+pJq`LxLqX>LS?y1-AC<@nsdPvzwm zt`RS9$<>`cTmqu(0Mf`|0rj|nOT4-ei?C4VG3>`rg8(9|U5~f^;HQM z5z1(ba}I&!p^svF4sREG@~@l+)qDCZ8&;o% MQ+W{s)#zGBqK(7#<8Spp* zjGF+T3zM*|hV51b!mB-0{+lo;sLKYdVl_|G5><@^YaAS$o0>~KPFB_l@N1Na8+SW< z)lT=8XkiWF6S@I?j_tTwZ3}JJ;*{j 3z^EnJqJcPVNq)_V{&t;9d@~(XAVuEs z!*v?EC AgxfTnAQ`h8>7szT$0Z0@aTg`9J<(rZzF6r@-duFKdytK$ZSvocfdaE44GiKc@l ztk$=mW4Zi(@1q!S MUn z+`Kc4EL>~B8uGxX0X??3A6-yKK@7;1{%2r{f}d78O%ERYTwKGt^%eX*POk0Ask!(K zwv#!ks*|AQ=|D}v8Mn)|=~pkwgB+rZ*CpF(LTuPt+NSs4b#uRztJx?-f^lrKWJ^Lk z06ypIK`$P5rV`v$=ret- cH?h^;4+f?I`MMfIJql+tmGMO2FpC5&~t+K zGqW(hxagc%$lY->fDQ2oAxyRr@BRiT4vK>giyIpnbU4iw>T7b mwzKrK%yJ~K)KTxW|lsN_P!~=r&P`oe~)Au%bp =n_wllEIn``+{b4Ca&B bi7ef3GWt7(n&|gNKrNHQsxd{vedER^|I*2+&XsX$UJUQ9ZlMIc-hl* z2cZlcb3-8a7g!h_Z3LkWS$OjoSAS#Ik=~PT;JjZe!^X6YqFuo@B<&&kpA7gk`?=C- zw-jwulzqoi W>f8zx?s9bKZ z9}3*8qFH-b$W&$Fr1ASF8e<&_dr}}OsCAk;f`Q1W=Mzc8v1tke3U2Xv+-r1m=?1y4 z=M(7?4!9^rBtF@4*ph$E5Wzy;93U$SzN<{#7Ey8OXdLP}C|74E;=z*!jP<`)<&oxA zYc``Rf5P%@EDq^;7^Z$57)xrXF65Qb9(+C!h&Vm?OoGL)5hp-nIuEfU-pv{BVHrE5 z>DRrZO^U&ifE!p4PVpA}V?Osp_q75Ip^W@7<0%b?Z&`UL47qAWxbe`Cg`t%>@1lt@ zR%DqH5R8eB-~T?f=fqhH#1VpPqR{aA_%_Mkwh-$N?M0cEI{*Ahm~dyc@OyGWQ?(MY zr3FzV=ZH>&ucC@y_HgiaVgmWDDJJ2f9lk!yayit%%o<@2;p11G{QaF +9Kj|JU%adr@C@x4@;BK74p~RAsH^LG`*4)o&+8*74oRvlP|f z%SOdqgX&V~p)3_yvS*Me0y@O6u-3fTknjV6_BjJLl?1{PPDRB-2Kt}J8*=X^7RqV{ zH-B^tf5|Z~X6AE4ok^XwJkfp4l hWyFaTI_GdqP8O{^97Dk-=9hv@**S@Q_UHV2|iQhKZO_6%I4- zt1drXQEq6dp2D}v(LHr(iD$w`kvOp4!CYv l!IIXnTgSCGD z5^B`rtR>U;eVOHY!O?BnSZl9Lba!zh|DgIv<;=Zq?b)z0FZuRzf)cWL+m3w;(iwcE zx+KljrTpVcNCuHMBsgV&6Gxw<%^YdE0YR{L*YwOrhH51%4v8I%_Fc?|f-!+cC}6ht zs=ZA}EmqgT(Dc25{>)bF9^yB6k#MQ3c+};eSR62IRD)UDt#4mfTse#K;V@!9>m&S6 zZ&5S#slZuqB7NjSdPK?KuGtuHOKu|iC~rtZu`x#3Ui{yMbBT$BW$bOxMWB_1eZY62 zpf>;rb0{H50{E&hFb&eL>3|ZRq!+>I_?qH&S#fvv7e6z6oFk@&;0W*41PF8J`Tjuh z(5ts_t)jOLg?O&!wzx9{;S6FH>{t@$R9S8?ur_ifxn0Z@l*-bgwlq_7)B5~f!^er1 z3%EdVGC*KIDhk*PIp}g@>wB&@NJGXYLyp81Jb&6AR`R`pgAR6PBe>P;wg(;HY;FHV zvHj4y3t9b6AlNbRvCm}J0DpT|Z9J-2M =2X*72Ly!W#epkT`_F>x6_ A?%6ou zxBE&li-7{k0 -<|DQ%I!b;{@0TvXGpK3e(u-mcoH|j yeBz& z6g#o)n_oPS#_b9L?R5_-07viHwX?GNj=tyUOWx74 ^q`H${;cc&j2#9 z#cit{&xNgT{aPf&k?Y}Kq5G(0uu^+5EgHV&O9JJCQTXdHmS{4>G4!SD@Ruy~e6*o` zD$k%`vf-13ZX5IxAxQrs^P+~|Qt)Xofna4uqkpQ5g*>HB8YxNztk oe|;*FtTO7TM{yv4!)uTT@RnPA=WKvRcZ5b~bz_KY3z~)0 zTYz15yyldqXY0e`71E4^RqrDyzxBzVgok9BZp3Bv;OCQfxaO$Bw8KT48r(yL1iT0d z4QXNugLxHsgv94bh`fn110K?nG6w#r4%VruXau~IvhtDM+GwBcU+_L&Pu6U?Zy;&F zelh8)o#(dpB&DjEkY!Fl>2eV<(bEr_aDJPdl%F7Hu^!>&?M$!}m?|lu#stsay38gz zwNTCFU}hHQ!E7nmO7E~JH)Sf5MVZpA-;$xvnH|~0Y%$lz@xFNxwONUyUfvW~g%e(h zu zZt=~1I~EOJx+(M(w!o2@9`8cLfNi8HFlk9@2oH_ iw=p-ylp_*=j5ca_In~}+cQfz&%$vyxw$?zb$QSllqL&~!8}>z zVskqQMv>C{{vsSIM2X!wT+_?E 11BZC&u2nQ$|aoWR?=6CnXDc$!6tV2 z(3fWRL6Px jCBAF{pUc4}KlBrTc?#!QthC_rmvG*gUQ9`& AOG5Y3Mbo~o7-d^^d2@0*C|oRaY*#-)m_$Nz`|_w^KP*JlG1_$+=C z?vM)F2Av7cxn?mDDRVP6HPy1!_rI9S%)JrnOG}Y4N$oxk-$IG_IVap~fc=l0oQ)|U zWOpA{FL>qn)NE3J^tD;_r`D~|-}`UQU8PV$mM2I7qow``Q~qZ^SElZIUROw3WujzJ z&sERob_dT7QwcU $LWcQW8OIC;m>Jc72Ud$nk*_~A%4 z({_~f{(u3Ps0f>O=_|XvwNXRvUXm+=Z$~DBLeNkh)8;85N5B>>?J}29E@t+Xfy3Jl z!iO$?h8Y62`J{3^=R#j0x!FYhj*QGroS(M#Pa$7BzOj(o%^ZF1>NSpCnYD=A2{c(7 zX!r-(v&eUty~l}qrKE+PBs~IM=&|gCc|&9S@m8^Yg@Q}f8dnKmA9eH6BZdNLfE-)L zWMabxhS^)3CHUs9nT833of8d0Jb3gUE W*HZ}rr-1QdbkyT z%vOgommMvT$3GxCwirvYdE2hDwD@m3cFanWZW4!6-Qgy2dZTegbQ`i>-2l =j-<60!%Q&QOBlN7xPq`hFB~f1gmZ);X}}CGD&B z>s3m~GE-P~lHj|O4eK=A5)Aa+*U6UU^54p5Nx>G{j^6rp!M0xd>tQB)hyM4y-CQD6 zl9y){{|nEbw1@^(jlM&@Pc+`Nho%%;W6Ml+U9 4-=Il24n)1xR*lNbvsR}ePx8C5;~1T(60Hn{;dt@ zHHfTEovP20O5>w05vJj`hTJ(D%y=U96(8|$=YTG^h@SkO3sJ2P2NsD5&n}3B-Xrv0 zFOGnXI}N0lJMJDYr(1?ht?KR;C0<=WwDWrmIljt-6#^th@98y<+;DwwB@$7>usz|W z9bslK*{9(vlH`_@Y2 9Vfl`E`6-bY!ell zsmJ4Ych?~^pVzYsA=vyN>Gm(MQBR|njPmZQ@B-?D>uw&<^2Q@@pXKXnC0qZ(cmK;T zEXY@?Qo7};53I$08||v*>PpS_!nprI7W`6@3HjK+ivZUT&tTT(6Gm4h3Bva7ab)Z| zq|0XiYw!(*dML_M;hmlYg=fx{9Axzp3$tgX-`HgLJQl=V2R)+;+&J-$*x2-#{AT@D zS-MoIt sAs_jl^nk%rz59uBUNuV+(WQ zkP!~S4+~P#gncCw1j8hq^DWPk3=*OqASVkH!uNUPF6urBj}x5=d4dxt>wrlY{6p=! zU^%YfPLFT{?UO1C2 w z!9C#*7k;jp!j$6W-02d%CS8zEV=(Kt>T26_+$KNs(Y(%=^nE9NW1JAWMvEDQ%Ia03 zl`u4O!-U0<(zFjVqfb=mTbI<^r|jPq=2G=4LtNNDlpTMWb;il`bW8tLRb~YJcI 2I&+K!}^oPQJm(Gl;ER zUj|Bp?$h3PyB|+T9W%Kf!zIVLK9(367G2#pcanOpy^rd^`cmT_jn2NvuQkb_Ih82? ztJIvQcjA=}P)2*bY;6^aF)=rZjUhNnUlsKjBe>l+Mh=6AC;15yfB$e|kpNlYVs#w2 zD<(lSOwIBQa_0H=;I#O6KMNu02%v?dxEgd`rw_RmZZ;$g{nSB6ja=QUO!QAo4RSWD z{x`fpArK!Nq*sw}Pyhpb112rn9Pr!2iCuLjUu^pHXle8NFBB-KylGBLd!MkH*^f2Z z8aAx`N2=82=Tsfe6_Jvl3Q`Q1VS6LL3F53)w^%Ta=^hqV-YCQ=<>jTNYUInSNZ{K6 zi?xFTI+hByEFAn-5R_v}g;$Iud0cX4u5|<2(5g8~0fY{w6hyT*O!J1*Tx#s7FQg@u zsFn&2L{#h#D({OrCIg~X%u*fRQ56DgM>YMKDhEpOBGAwJcb>^P;ryg#x6bqQ(x>{P zoGqjwQ^nf*d)2_aw%)D|+sR3$Uc~kNZZ@Ijr{%KBcHdw3OAzhtWN)3o*C4%ywyl!k zm9{H@wI$EAThB7K@BOZ*u)*Wn_7>se8NFD5ipBOz=vhzO3X)j~)Zxn4F7;JGG|rl) zrX_4o_d`I-t@|bSx7L5zDaYHa774g2!Wr$m!$0~q#X)wKbF}yAJ3DfI$5a;O_goka zyAe#wmw$+ElB+w034==#J>Kcpr0Uuf8{o>ImcsN7{L)CkA;p!{cx%OXp&e{8062l6 zHvI^h4`0uJ4GT=aNIv%n- u3DF1d;~>o*ycY0>N>WM9ivh&pJrOLA#mUN%oVX-iJ}Tc; z7Y757X;w!Dvwsj{y0p)rx~kWH(KoK?Gp7d76FMPLa-{zE2H3H<`|m$o=Lpd N9_0YY3cKYLK&$x7n5vyEz4i-?Jrs+aCZ?i2!8@D9SiXx+ur2%anJA=!TtF zK-usM4JU6`iPTyfkRdH&+=(8iE~vc{t!dh9-My)BGoxpu;sYpW7Zc*4>c*bM}Ri&w%?f zliQwt7x6q_^*nua{g&ay$G!jyC;PV(zKSAt?U`~$FiZ~FzVKuzO*-&V6Z29iR2(H3 zl$N>@(dvR;l5Q3U6`AlvfmrUGuV%$C%qg=^rYDJN&%3*QuFZ}=5?y^{!Y-Gj!kF2Q z2fo0yYQ-Gfyjhkuq}Nvj@Ojx3KDBQu(E)f64v5ekXfI-