bootstrap(); self::$cookieJar = new CookieJar; self::$client = new Goutte\Client(array(), null, self::$cookieJar); // Reset the curl handle because it is 0 at this point and not a valid // resource self::$client->getClient()->getCurlMulti()->reset(true); // Clear the language array so that things // that were added in other tests are gone $this->lang = array(); $this->add_lang('common'); $this->purge_cache(); } /** * Perform a request to page * * @param string $method HTTP Method * @param string $path Page path, relative from phpBB root path * @param array $form_data An array of form field values * @param bool $assert_response_html Should we perform standard assertions for a normal html page * @return Symfony\Component\DomCrawler\Crawler */ static public function request($method, $path, $form_data = array(), $assert_response_html = true) { $crawler = self::$client->request($method, self::$root_url . $path, $form_data); if ($assert_response_html) { self::assert_response_html(); } return $crawler; } /** * Submits a form * * @param Symfony\Component\DomCrawler\Form $form A Form instance * @param array $values An array of form field values * @param bool $assert_response_html Should we perform standard assertions for a normal html page * @return Symfony\Component\DomCrawler\Crawler */ static public function submit(Symfony\Component\DomCrawler\Form $form, array $values = array(), $assert_response_html = true) { $crawler = self::$client->submit($form, $values); if ($assert_response_html) { self::assert_response_html(); } return $crawler; } /** * Get Client Content * * @return string HTML page */ static public function get_content() { return self::$client->getResponse()->getContent(); } // bootstrap, called after board is set up // once per test case class // test cases can override this protected function bootstrap() { } public function __construct($name = NULL, array $data = array(), $dataName = '') { parent::__construct($name, $data, $dataName); $this->backupStaticAttributesBlacklist += array( 'phpbb_functional_test_case' => array('config', 'already_installed'), ); } protected function get_db() { global $phpbb_root_path, $phpEx; // so we don't reopen an open connection if (!($this->db instanceof phpbb_db_driver)) { $dbms = self::$config['dbms']; $this->db = new $dbms(); $this->db->sql_connect(self::$config['dbhost'], self::$config['dbuser'], self::$config['dbpasswd'], self::$config['dbname'], self::$config['dbport']); } return $this->db; } protected function get_cache_driver() { if (!$this->cache) { $this->cache = new phpbb_cache_driver_file; } return $this->cache; } protected function purge_cache() { $cache = $this->get_cache_driver(); $cache->purge(); $cache->unload(); $cache->load(); } protected function get_extension_manager() { global $phpbb_root_path, $phpEx; $config = new phpbb_config(array()); $db = $this->get_db(); $db_tools = new phpbb_db_tools($db); $migrator = new phpbb_db_migrator( $config, $db, $db_tools, self::$config['table_prefix'] . 'migrations', $phpbb_root_path, $php_ext, self::$config['table_prefix'], array() ); $container = new phpbb_mock_container_builder(); $container->set('migrator', $migrator); $extension_manager = new phpbb_extension_manager( $container, $db, $config, new phpbb_filesystem(), self::$config['table_prefix'] . 'ext', dirname(__FILE__) . '/', $php_ext, $this->get_cache_driver() ); return $extension_manager; } static protected function install_board() { global $phpbb_root_path, $phpEx; self::recreate_database(self::$config); $config_file = $phpbb_root_path . "config.$phpEx"; $config_file_dev = $phpbb_root_path . "config_dev.$phpEx"; $config_file_test = $phpbb_root_path . "config_test.$phpEx"; if (file_exists($config_file)) { if (!file_exists($config_file_dev)) { rename($config_file, $config_file_dev); } else { unlink($config_file); } } self::$cookieJar = new CookieJar; self::$client = new Goutte\Client(array(), null, self::$cookieJar); // Set client manually so we can increase the cURL timeout self::$client->setClient(new Guzzle\Http\Client('', array( Guzzle\Http\Client::DISABLE_REDIRECTS => true, 'curl.options' => array( CURLOPT_TIMEOUT => 120, ), ))); // Reset the curl handle because it is 0 at this point and not a valid // resource self::$client->getClient()->getCurlMulti()->reset(true); $parseURL = parse_url(self::$config['phpbb_functional_url']); $crawler = self::request('GET', 'install/index.php?mode=install'); self::assertContains('Welcome to Installation', $crawler->filter('#main')->text()); $form = $crawler->selectButton('submit')->form(); // install/index.php?mode=install&sub=requirements $crawler = self::submit($form); self::assertContains('Installation compatibility', $crawler->filter('#main')->text()); $form = $crawler->selectButton('submit')->form(); // install/index.php?mode=install&sub=database $crawler = self::submit($form); self::assertContains('Database configuration', $crawler->filter('#main')->text()); $form = $crawler->selectButton('submit')->form(array( // Installer uses 3.0-style dbms name 'dbms' => str_replace('phpbb_db_driver_', '', self::$config['dbms']), 'dbhost' => self::$config['dbhost'], 'dbport' => self::$config['dbport'], 'dbname' => self::$config['dbname'], 'dbuser' => self::$config['dbuser'], 'dbpasswd' => self::$config['dbpasswd'], 'table_prefix' => self::$config['table_prefix'], )); // install/index.php?mode=install&sub=database $crawler = self::submit($form); self::assertContains('Successful connection', $crawler->filter('#main')->text()); $form = $crawler->selectButton('submit')->form(); // install/index.php?mode=install&sub=administrator $crawler = self::submit($form); self::assertContains('Administrator configuration', $crawler->filter('#main')->text()); $form = $crawler->selectButton('submit')->form(array( 'default_lang' => 'en', 'admin_name' => 'admin', 'admin_pass1' => 'adminadmin', 'admin_pass2' => 'adminadmin', 'board_email' => 'nobody@example.com', )); // install/index.php?mode=install&sub=administrator $crawler = self::submit($form); self::assertContains('Tests passed', $crawler->filter('#main')->text()); $form = $crawler->selectButton('submit')->form(); // We have to skip install/index.php?mode=install&sub=config_file // because that step will create a config.php file if phpBB has the // permission to do so. We have to create the config file on our own // in order to get the DEBUG constants defined. $config_php_data = phpbb_create_config_file_data(self::$config, self::$config['dbms'], true, true); $config_created = file_put_contents($config_file, $config_php_data) !== false; if (!$config_created) { self::markTestSkipped("Could not write $config_file file."); } // We also have to create a install lock that is normally created by // the installer. The file will be removed by the final step of the // installer. $install_lock_file = $phpbb_root_path . 'cache/install_lock'; $lock_created = file_put_contents($install_lock_file, '') !== false; if (!$lock_created) { self::markTestSkipped("Could not create $lock_created file."); } @chmod($install_lock_file, 0666); // install/index.php?mode=install&sub=advanced $form_data = $form->getValues(); unset($form_data['submit']); $crawler = self::request('POST', 'install/index.php?mode=install&sub=advanced', $form_data); self::assertContains('The settings on this page are only necessary to set if you know that you require something different from the default.', $crawler->filter('#main')->text()); $form = $crawler->selectButton('submit')->form(array( 'email_enable' => true, 'smtp_delivery' => true, 'smtp_host' => 'nxdomain.phpbb.com', 'smtp_auth' => 'PLAIN', 'smtp_user' => 'nxuser', 'smtp_pass' => 'nxpass', 'cookie_secure' => false, 'force_server_vars' => false, 'server_protocol' => $parseURL['scheme'] . '://', 'server_name' => 'localhost', 'server_port' => isset($parseURL['port']) ? (int) $parseURL['port'] : 80, 'script_path' => $parseURL['path'], )); // install/index.php?mode=install&sub=create_table $crawler = self::submit($form); self::assertContains('The database tables used by phpBB', $crawler->filter('#main')->text()); self::assertContains('have been created and populated with some initial data.', $crawler->filter('#main')->text()); $form = $crawler->selectButton('submit')->form(); // install/index.php?mode=install&sub=final $crawler = self::submit($form); self::assertContains('You have successfully installed', $crawler->text()); copy($config_file, $config_file_test); } static private function recreate_database($config) { $db_conn_mgr = new phpbb_database_test_connection_manager($config); $db_conn_mgr->recreate_db(); } /** * Creates a new style * * @param string $style_id Style ID * @param string $style_path Style directory * @param string $parent_style_id Parent style id. Default = 1 * @param string $parent_style_path Parent style directory. Default = 'prosilver' */ protected function add_style($style_id, $style_path, $parent_style_id = 1, $parent_style_path = 'prosilver') { global $phpbb_root_path; $db = $this->get_db(); if (version_compare(PHPBB_VERSION, '3.1.0-dev', '<')) { $sql = 'INSERT INTO ' . STYLES_TABLE . ' ' . $db->sql_build_array('INSERT', array( 'style_id' => $style_id, 'style_name' => $style_path, 'style_copyright' => '', 'style_active' => 1, 'template_id' => $style_id, 'theme_id' => $style_id, 'imageset_id' => $style_id, )); $db->sql_query($sql); $sql = 'INSERT INTO ' . STYLES_IMAGESET_TABLE . ' ' . $db->sql_build_array('INSERT', array( 'imageset_id' => $style_id, 'imageset_name' => $style_path, 'imageset_copyright' => '', 'imageset_path' => $style_path, )); $db->sql_query($sql); $sql = 'INSERT INTO ' . STYLES_TEMPLATE_TABLE . ' ' . $db->sql_build_array('INSERT', array( 'template_id' => $style_id, 'template_name' => $style_path, 'template_copyright' => '', 'template_path' => $style_path, 'bbcode_bitfield' => 'kNg=', 'template_inherits_id' => $parent_style_id, 'template_inherit_path' => $parent_style_path, )); $db->sql_query($sql); $sql = 'INSERT INTO ' . STYLES_THEME_TABLE . ' ' . $db->sql_build_array('INSERT', array( 'theme_id' => $style_id, 'theme_name' => $style_path, 'theme_copyright' => '', 'theme_path' => $style_path, 'theme_storedb' => 0, 'theme_mtime' => 0, 'theme_data' => '', )); $db->sql_query($sql); if ($style_path != 'prosilver' && $style_path != 'subsilver2') { @mkdir($phpbb_root_path . 'styles/' . $style_path, 0777); @mkdir($phpbb_root_path . 'styles/' . $style_path . '/template', 0777); } } else { $db->sql_multi_insert(STYLES_TABLE, array( 'style_id' => $style_id, 'style_name' => $style_path, 'style_copyright' => '', 'style_active' => 1, 'style_path' => $style_path, 'bbcode_bitfield' => 'kNg=', 'style_parent_id' => $parent_style_id, 'style_parent_tree' => $parent_style_path, )); } } /** * Remove temporary style created by add_style() * * @param string $style_id Style ID * @param string $style_path Style directory */ protected function delete_style($style_id, $style_path) { global $phpbb_root_path; $db = $this->get_db(); $db->sql_query('DELETE FROM ' . STYLES_TABLE . ' WHERE style_id = ' . $style_id); if (version_compare(PHPBB_VERSION, '3.1.0-dev', '<')) { $db->sql_query('DELETE FROM ' . STYLES_IMAGESET_TABLE . ' WHERE imageset_id = ' . $style_id); $db->sql_query('DELETE FROM ' . STYLES_TEMPLATE_TABLE . ' WHERE template_id = ' . $style_id); $db->sql_query('DELETE FROM ' . STYLES_THEME_TABLE . ' WHERE theme_id = ' . $style_id); if ($style_path != 'prosilver' && $style_path != 'subsilver2') { @rmdir($phpbb_root_path . 'styles/' . $style_path . '/template'); @rmdir($phpbb_root_path . 'styles/' . $style_path); } } } /** * Creates a new user with limited permissions * * @param string $username Also doubles up as the user's password * @return int ID of created user */ protected function create_user($username) { // Required by unique_id global $config; $config = new phpbb_config(array()); $config['rand_seed'] = ''; $config['rand_seed_last_update'] = time() + 600; // Required by user_add global $db, $cache, $phpbb_dispatcher, $phpbb_container; $db = $this->get_db(); if (!function_exists('phpbb_mock_null_cache')) { require_once(__DIR__ . '/../mock/null_cache.php'); } $cache = new phpbb_mock_null_cache; $cache_driver = new phpbb_cache_driver_null(); $phpbb_container = $this->getMock('Symfony\Component\DependencyInjection\ContainerInterface'); $phpbb_container ->expects($this->any()) ->method('get') ->with('cache.driver') ->will($this->returnValue($cache_driver)); if (!function_exists('utf_clean_string')) { require_once(__DIR__ . '/../../phpBB/includes/utf/utf_tools.php'); } if (!function_exists('user_add')) { require_once(__DIR__ . '/../../phpBB/includes/functions_user.php'); } set_config(null, null, null, $config); set_config_count(null, null, null, $config); $phpbb_dispatcher = new phpbb_mock_event_dispatcher(); $user_row = array( 'username' => $username, 'group_id' => 2, 'user_email' => 'nobody@example.com', 'user_type' => 0, 'user_lang' => 'en', 'user_timezone' => 0, 'user_dateformat' => '', 'user_password' => phpbb_hash($username . $username), ); return user_add($user_row); } protected function remove_user_group($group_name, $usernames) { global $db, $cache, $auth, $config, $phpbb_dispatcher, $phpbb_log, $phpbb_container, $phpbb_root_path, $phpEx; $config = new phpbb_config(array()); $config['coppa_enable'] = 0; $db = $this->get_db(); $phpbb_dispatcher = new phpbb_mock_event_dispatcher(); $user = $this->getMock('phpbb_user'); $auth = $this->getMock('phpbb_auth'); $phpbb_log = new phpbb_log($db, $user, $auth, $phpbb_dispatcher, $phpbb_root_path, 'adm/', $phpEx, LOG_TABLE); $cache = new phpbb_mock_null_cache; $cache_driver = new phpbb_cache_driver_null(); $phpbb_container = $this->getMock('Symfony\Component\DependencyInjection\ContainerInterface'); $phpbb_container ->expects($this->any()) ->method('get') ->with('cache.driver') ->will($this->returnValue($cache_driver)); if (!function_exists('utf_clean_string')) { require_once(__DIR__ . '/../../phpBB/includes/utf/utf_tools.php'); } if (!function_exists('group_user_del')) { require_once(__DIR__ . '/../../phpBB/includes/functions_user.php'); } $sql = 'SELECT group_id FROM ' . GROUPS_TABLE . " WHERE group_name = '" . $db->sql_escape($group_name) . "'"; $result = $db->sql_query($sql); $group_id = (int) $db->sql_fetchfield('group_id'); $db->sql_freeresult($result); return group_user_del($group_id, false, $usernames, $group_name); } protected function add_user_group($group_name, $usernames, $default = false, $leader = false) { global $db, $cache, $auth, $config, $phpbb_dispatcher, $phpbb_log, $phpbb_container, $phpbb_root_path, $phpEx; $config = new phpbb_config(array()); $config['coppa_enable'] = 0; $db = $this->get_db(); $phpbb_dispatcher = new phpbb_mock_event_dispatcher(); $user = $this->getMock('phpbb_user'); $auth = $this->getMock('phpbb_auth'); $phpbb_log = new phpbb_log($db, $user, $auth, $phpbb_dispatcher, $phpbb_root_path, 'adm/', $phpEx, LOG_TABLE); $cache = new phpbb_mock_null_cache; $cache_driver = new phpbb_cache_driver_null(); $phpbb_container = $this->getMock('Symfony\Component\DependencyInjection\ContainerInterface'); $phpbb_container ->expects($this->any()) ->method('get') ->with('cache.driver') ->will($this->returnValue($cache_driver)); if (!function_exists('utf_clean_string')) { require_once(__DIR__ . '/../../phpBB/includes/utf/utf_tools.php'); } if (!function_exists('group_user_del')) { require_once(__DIR__ . '/../../phpBB/includes/functions_user.php'); } $sql = 'SELECT group_id FROM ' . GROUPS_TABLE . " WHERE group_name = '" . $db->sql_escape($group_name) . "'"; $result = $db->sql_query($sql); $group_id = (int) $db->sql_fetchfield('group_id'); $db->sql_freeresult($result); return group_user_add($group_id, false, $usernames, $group_name, $default, $leader); } protected function login($username = 'admin') { $this->add_lang('ucp'); $crawler = self::request('GET', 'ucp.php'); $this->assertContains($this->lang('LOGIN_EXPLAIN_UCP'), $crawler->filter('html')->text()); $form = $crawler->selectButton($this->lang('LOGIN'))->form(); $crawler = self::submit($form, array('username' => $username, 'password' => $username . $username)); $this->assertNotContains($this->lang('LOGIN'), $crawler->filter('.navbar')->text()); $cookies = self::$cookieJar->all(); // The session id is stored in a cookie that ends with _sid - we assume there is only one such cookie foreach ($cookies as $cookie); { if (substr($cookie->getName(), -4) == '_sid') { $this->sid = $cookie->getValue(); } } } protected function logout() { $this->add_lang('ucp'); $crawler = self::request('GET', 'ucp.php?sid=' . $this->sid . '&mode=logout'); $this->assertContains($this->lang('REGISTER'), $crawler->filter('.navbar')->text()); unset($this->sid); } /** * Login to the ACP * You must run login() before calling this. */ protected function admin_login($username = 'admin') { $this->add_lang('acp/common'); // Requires login first! if (empty($this->sid)) { $this->fail('$this->sid is empty. Make sure you call login() before admin_login()'); return; } $crawler = self::request('GET', 'adm/index.php?sid=' . $this->sid); $this->assertContains($this->lang('LOGIN_ADMIN_CONFIRM'), $crawler->filter('html')->text()); $form = $crawler->selectButton($this->lang('LOGIN'))->form(); foreach ($form->getValues() as $field => $value) { if (strpos($field, 'password_') === 0) { $crawler = self::submit($form, array('username' => $username, $field => $username . $username)); $this->assertContains($this->lang('ADMIN_PANEL'), $crawler->filter('h1')->text()); $cookies = self::$cookieJar->all(); // The session id is stored in a cookie that ends with _sid - we assume there is only one such cookie foreach ($cookies as $cookie); { if (substr($cookie->getName(), -4) == '_sid') { $this->sid = $cookie->getValue(); } } break; } } } protected function add_lang($lang_file) { if (is_array($lang_file)) { foreach ($lang_file as $file) { $this->add_lang($file); } } $lang_path = __DIR__ . "/../../phpBB/language/en/$lang_file.php"; $lang = array(); if (file_exists($lang_path)) { include($lang_path); } $this->lang = array_merge($this->lang, $lang); } protected function lang() { $args = func_get_args(); $key = $args[0]; if (empty($this->lang[$key])) { throw new RuntimeException('Language key "' . $key . '" could not be found.'); } $args[0] = $this->lang[$key]; return call_user_func_array('sprintf', $args); } /** * assertContains for language strings * * @param string $needle Search string * @param string $haystack Search this * @param string $message Optional failure message */ public function assertContainsLang($needle, $haystack, $message = null) { $this->assertContains(html_entity_decode($this->lang($needle), ENT_QUOTES), $haystack, $message); } /* * Perform some basic assertions for the page * * Checks for debug/error output before the actual page content and the status code * * @param mixed $status_code Expected status code, false to disable check * @return null */ static public function assert_response_html($status_code = 200) { if ($status_code !== false) { self::assert_response_status_code($status_code); } // Any output before the doc type means there was an error $content = self::$client->getResponse()->getContent(); self::assertNotContains('[phpBB Debug]', $content); self::assertStringStartsWith('getResponse()->getContent(); self::assertNotContains('[phpBB Debug]', $content); self::assertStringStartsWith('getResponse()->getStatus()); } public function assert_filter($crawler, $expr, $msg = null) { $nodes = $crawler->filter($expr); if ($msg) { $msg .= "\n"; } else { $msg = ''; } $msg .= "`$expr` not found in DOM."; $this->assertGreaterThan(0, count($nodes), $msg); return $nodes; } /** * Asserts that exactly one checkbox with name $name exists within the scope * of $crawler and that the checkbox is checked. * * @param Symfony\Component\DomCrawler\Crawler $crawler * @param string $name * @param string $message * * @return null */ public function assert_checkbox_is_checked($crawler, $name, $message = '') { $this->assertSame( 'checked', $this->assert_find_one_checkbox($crawler, $name)->attr('checked'), $message ?: "Failed asserting that checkbox $name is checked." ); } /** * Asserts that exactly one checkbox with name $name exists within the scope * of $crawler and that the checkbox is unchecked. * * @param Symfony\Component\DomCrawler\Crawler $crawler * @param string $name * @param string $message * * @return null */ public function assert_checkbox_is_unchecked($crawler, $name, $message = '') { $this->assertSame( '', $this->assert_find_one_checkbox($crawler, $name)->attr('checked'), $message ?: "Failed asserting that checkbox $name is unchecked." ); } /** * Searches for an input element of type checkbox with the name $name using * $crawler. Contains an assertion that only one such checkbox exists within * the scope of $crawler. * * @param Symfony\Component\DomCrawler\Crawler $crawler * @param string $name * @param string $message * * @return Symfony\Component\DomCrawler\Crawler */ public function assert_find_one_checkbox($crawler, $name, $message = '') { $query = sprintf('//input[@type="checkbox" and @name="%s"]', $name); $result = $crawler->filterXPath($query); $this->assertEquals( 1, sizeof($result), $message ?: 'Failed asserting that exactly one checkbox with name' . " $name exists in crawler scope." ); return $result; } /** * Creates a topic * * Be sure to login before creating * * @param int $forum_id * @param string $subject * @param string $message * @param array $additional_form_data Any additional form data to be sent in the request * @return array post_id, topic_id */ public function create_topic($forum_id, $subject, $message, $additional_form_data = array()) { $posting_url = "posting.php?mode=post&f={$forum_id}&sid={$this->sid}"; $form_data = array_merge(array( 'subject' => $subject, 'message' => $message, 'post' => true, ), $additional_form_data); return self::submit_post($posting_url, 'POST_TOPIC', $form_data); } /** * Creates a post * * Be sure to login before creating * * @param int $forum_id * @param int $topic_id * @param string $subject * @param string $message * @param array $additional_form_data Any additional form data to be sent in the request * @return array post_id, topic_id */ public function create_post($forum_id, $topic_id, $subject, $message, $additional_form_data = array()) { $posting_url = "posting.php?mode=reply&f={$forum_id}&t={$topic_id}&sid={$this->sid}"; $form_data = array_merge(array( 'subject' => $subject, 'message' => $message, 'post' => true, ), $additional_form_data); return self::submit_post($posting_url, 'POST_REPLY', $form_data); } /** * Helper for submitting posts * * @param string $posting_url * @param string $posting_contains * @param array $form_data * @return array post_id, topic_id */ protected function submit_post($posting_url, $posting_contains, $form_data) { $this->add_lang('posting'); $crawler = self::request('GET', $posting_url); $this->assertContains($this->lang($posting_contains), $crawler->filter('html')->text()); $hidden_fields = array( $crawler->filter('[type="hidden"]')->each(function ($node, $i) { return array('name' => $node->getAttribute('name'), 'value' => $node->getAttribute('value')); }), ); foreach ($hidden_fields as $fields) { foreach($fields as $field) { $form_data[$field['name']] = $field['value']; } } // Bypass time restriction that said that if the lastclick time (i.e. time when the form was opened) // is not at least 2 seconds before submission, cancel the form $form_data['lastclick'] = 0; // I use a request because the form submission method does not allow you to send data that is not // contained in one of the actual form fields that the browser sees (i.e. it ignores "hidden" inputs) // Instead, I send it as a request with the submit button "post" set to true. $crawler = self::request('POST', $posting_url, $form_data); $this->assertContains($this->lang('POST_STORED'), $crawler->filter('html')->text()); $url = $crawler->selectLink($this->lang('VIEW_MESSAGE', '', ''))->link()->getUri(); return array( 'topic_id' => $this->get_parameter_from_link($url, 't'), 'post_id' => $this->get_parameter_from_link($url, 'p'), ); } /* * Returns the requested parameter from a URL * * @param string $url * @param string $parameter * @return string Value of the parameter in the URL, null if not set */ public function get_parameter_from_link($url, $parameter) { if (strpos($url, '?') === false) { return null; } $url_parts = explode('?', $url); if (isset($url_parts[1])) { $url_parameters = $url_parts[1]; if (strpos($url_parameters, '#') !== false) { $url_parameters = explode('#', $url_parameters); $url_parameters = $url_parameters[0]; } foreach (explode('&', $url_parameters) as $url_param) { list($param, $value) = explode('=', $url_param); if ($param == $parameter) { return $value; } } } return null; } } 1 0@~v7 SCNPMN4|Dՙg*LX+ 8dbi6Xʠٴa%=OU<H?)"d!̠5VCxPh@U|t(WVFOϔXƞ=A?]}'>@qJė*z"H 'r̕=Toh!r+Ui?6뚚jYt&"O(hn&w+q}jxIN \7f,b#LTWhT$H^pʞ#Fa~b;P$,.;|%Km쓓hH+zAS(kzg}Q[4NrWr/J)wW6uP!fT6B7@_t-Q:UhHd7PP `hͤ6l^YnĠPRRA lu 7tmӏL>3{| XjʎsC^+HL|5 ]:n;KNr3$'GVŃ/dQ2FJ-{%d')$$ pS,$}_iI{}zRN4.DIM4M8!`pݮL2$,mY7F;q'^=ly )hPf6K SQʓ C/zFLAړ[0夯pՀf%Tpif zPH{˜TzE$]pn!Yߏ;IMx4Ott3)[ֈN"QX#nTیkDF\dj-pyѵ0 u0A3dIE£EG!xlsVr0y+Y&mVJ7yݒ:شMnA^+a:]%ӕ6,$,CO %XVOKo >M(B? eď\hjaa\WHBOAwpΒ/||pMצ[:kܥryW .M AadIN ?DMT*̓R*EO-/rmf1bq:uQo*E.2HKb B%&Uv? \pI`CUSWLAʆkf̍7G{.)|ěIb <, m$) >giegw|bYPqb|i T*J@OFWF.m3P\)&%b-ߋos+]Fp'iuS|&.}Ng܋@Cߪx <{n{NA#.0MCj !)VUo-pf#lCg8nEp)V嶁b\C[8w"dgi <Ⰾ11gӵBP-?ZKFtymRlS3J :M98:5D!HÇ80uq1`C_}Rġ(H*RvY7 @s{Xk^B1ut30Q 3DxWg9p+ #ȒE#z5[,~=O}ǵ@zfeoa{:1WJnxPtn7ãhpzfPA3c-ՆWlsqP$͑ctT84}9,QX=Ԧ3`rÕV(t35 1Ccy&{wgbm] e ^&O1WADp&(NZ%qnsRKElY޹l'! ԫ $[ײs|iHnfdK+'5>/jȆ 3ryp2:;U$N\`(#D/֪/_kgj7*:o1gm`=^TLXi W&籴is/FG]F׷Wy{[ϵDx_|`EQL^ݩ:8.\t_@1=M2D2hb(,=gxa q"RI LQA$tZ3ܫH9+:*d|@4r٘Oq.XwD\D7{9Q.a L <q6r; ! t"a kG"=e0!Sp3YKÀuT*ou9m$j4gYbeB->h}cHd9Gn|i.m?.''u˕gYT -;1f&\FqÚ~; 5. I5uӱ-Ұ&%8?ϚW^;/> p X59yЭNo)#ʛMiwR"N!@hPn)ؿU0_<ҩG Rl0:m9f1ێ5]û=6zןH WyXt*GB})CN*ޟKMWeqbL Soc;ʕ imEI5"$o0Ԫ)F"w_#حs17L %~BY|Y 5.wvAS9cW5*A:5N7HB9Ni.Ե1*⻦$pYIzHuqЀ")~ǒZa6wwvY~SY?XbNH 1a1pE4Űpn45,HbgCgeh]4y-FRDF*ZӪ Úm 86إF͵A!Ǜn4O:P=2m/N'XJa}u`e%'\e]P.6hR%Ri@cH$*fIw[o, ߥ.K PU6O]e|{v #W/X=GDIpMJjwlRȪMA4*Pܐn{^frLi3{Z{(zރ GOws*+&2G=d$e۵42t9DP r^8d;פ<,e(پ'Ú,cUuQ~lv١LjMcUQAk&S!Nr$Gϕ }IW\0̰P&;HGRW2-YPf0?O*J\"3VsQ*H*5mZ"M#c5Uv`[Em9"{ 혥uNOQ!ʰS9괝 ̣2Hki;ܤ^! k tB U/:z&tXqp^ gxoS2odf+5f}o蟞B5 `,DSg YU2uխB8?Awz',y`,LS|Νcu'aTS%pex[剬(%Y\;~~E^nʦD,VR/Sf,bSLY6y`wlcBhs{$A)¸&J&s'O2>m?Up_K8g"Yq񴿐Tm5.B6SueX@29KSC>Z?LУp>ct۰YLeНI@7dܰ8?JM`+]6jQ>US_$H`ntWGL6Sރ=; X˿0tQ `t9 B٤sj᱁q?Ǯ ҄By4{bx!zD?u  ,p)G}l;9=Nn;kXj>|zGJ<8sA|\"1=YV ehKf k@%Y #lҷ7aʄUMK.ֆAY84M· 㗖{Olݚl7&KɡK#oA,B6GfzXMqjVH߄lj},yyF;";>iLם.Y%@^o7Am3 -v'AXFGYC4헞H)*:Lie!ե7_9U`-wy^G7i- =Gx|^-ʈ7ulaR9'5!#`C צE  WE[=u @kŋ% o.>*k z§a?CB^rXsF-4KFw¡k=N emt"=i8kkupkO+_Pv(!ޢ1?UMK|zhFHSK\#[t57G߉ʏVQ+Ow=g+}[LCbdas\[5UA<\Af#JʼG[4CC 5U|~ISsiuJdc3Y66߸ /|9)eDt^̊sCs)Q|}2!DWKu8Ee&RF h[.?lC(Imk;ЗD a 8 DҩfОa2ZA/RM+ }8T@0ColQGցOpiEK!"Ӏt25CK M]?AUKBUF9L<@d#kWxj&h{y*y^N~OL>bƐE #W.|\j1F3'I|piGbD;ݏoc]o^u1m(nm/rRC,DcR [V:Y k m"Bo@{7љ`+3Fp LZu%ɇ7;=yE\6IT,tLey(|$KY!Z:G1h+y'oxJ p $c#Sx9B#8hlc7_ӠYqWʞlm& Abm{㷪p2*t†T:ͅT(ߥ:J`rCCz3\ŕĿ$ZВ&jol"(۔9A)uM*w5sYj]V SJV,Qqwb;vT(l?$Sv!RԀ\d̅o pmtbzzGv8ݼ.M^TA/RvЀ,>&~xy9=sr3nR @ Q cV0ckhxb.TbWg6| (/+ZA6 YYMCVD{^ ެ$Z`|[H?qm·5-ŭeWzPh~uZ\!evߓFZ7zoDŽEO $x4R;!vNozR|"%ϫ5=N⠵!X!- %@ڷ;qޜ{L|1az 8WE^4 AVU.JH@ݥN4+x-pB}s~}4-{fs<o(#_t,_4TGNѓWVvZ.1YMIU !R§@qM EG8 |1B޴Ul\3~Z(N>(Eu2wX6}3MB 7pj-`^a,`!_( Gש{#+4uTlW%6ۦ# fo(qp#iu6|.7{pbF@V~sRCLoM~:|9¼ ;{wY%+1>hQzݶɶ)^ϐ"DbOt jrrc@q%)yJ-=̪v @(YT;8VMHa!i>ltW?kT^ظ5| >Eh_OeC,IVTF>N+5gۼAkSD73#jN@-*K$BRO]$eW?bcBWe;E eVh]Ki\6[؈`k& 2j}&K6$!=oF~:HfS:hthwmCEVևh>dy'H͠pP1~ڍV oGu:Y`]9?.WhD ]wk@#Fdqey=@H{A՜JX~J0K @uKNՊgqrؤ?sx Xi?v6m=(^<oOc/D,TpnqDc6a@_tǘ+a~Ӱi?`e9^GH5r̯[ђ"TKvɺ. a/M6Ak YYesRC#>xigRtXNhwk}榱J2B+<@ O+ᯥ@;L}L\3^x]`1Ax˂Cn PzN%)* F5aW_n6v{k8q4jl\|L*r" mՁ$[r"-PUquj+INps}|m#͝hfn1A^`pP(6B1 OٳWz&֙WKA=u R?"Xol5eO' Ȼ& 5P^ss@ ޞ8`z f5h}f:F$# XGڝ3f+=+u2IR`x]JCx~2ڋls -gƓ[5`p}a&vaW!πckæ OKvr%:in_TfLb~|WbEs#D`fUG֮64G"&j%gOrLI>r84@9RX"nd0$ɡ͑^vb!v  /AߏߖM!UȺ2PL#;q~ .^ up}}vH6Rp'XQ`щ I(WHA- )ǃ[ʒrl9\Q( >H7Ђri m#^JJ.5,hePAzk-aNyQ'ΥjȮ&\'9Kbjtwul"~U‹^}3SOs.TRZ`X"8 :>vgO}AI/<儌5 U]?_펕MԕC_(pB 6Z uvmL0>6qk!KdO[E-I'c&tjō#,. UU('?^=]u S(\E oՊNϵkC{C,iD`ѻxL1h䛤KH %/xt&0txTN)uxCbPX<'v,p{JlNqg3bb$eCGH6( Isr31JYcdO ='s)P_#ES,9S iʝy'h,cTa67ʑ%),ea3Hӂ|}kRojk]0OuUxCShϕOq7Da\srb]CǨS77a:q-Sn0C m4a +TʡЁSRZ !`<)ACIWޠ ;(1otևߏ L޻"習e;.s|J;X7K;3R1%8w5֥VJA5{6 ߯ZeZ,oMn#Wb}ҙ%nO:ƋwmB|vڋjIJm~3Mg -^Bw Ca1J'ZƂIgUBӃ,kjU=B$~2tZcYZ׽*ܷF %,SBىW֋h9DF3-U.|+[PxSS>U;nt)fC&ح1$58ͫqʆS1_qšDJYĊ}Gzݴߌ=iG2w>hi8O<1 Wʩ)WrEoH'*KaM%'Z'F 7;囃,g-55O64^AIdW,RQSG?O]L 0rc;|Ma⤡kׁ6+XB81/7*-p-p}H#7s} |Xqua%OA"T_e;wW@a:q_r7r5lI/B5,۝|a2.^vH7!탂%nɃ X  _9j lGN^*/ɢc>,':AcXuR!)*BEI;1Z7iRq[C#GEOʓ.o6){3DlewV]W!{+h7}p#o{7dFZ_LMQ݁™IJ_-L2P|a#;_r|IwȰ9Qю,JFƇ#A^muYU+S eGVb J5Й2R.ZgC.X}A^b vjr"kA .2kd6B j'잭IWm3KAȻaqɷ5 wۺtz6?FƤ$Cd U5!KihIo^CzRo3 HBjPLY@V|14F,GsAҸJD՚ ^J->rXGrY`!j|{<2犷WeQlZAQgŲ-dڻߗ?d6$,sΒ2O~E'H7o#%37{ 9e^~#AO>0 `Xث hyvȓ~f?~WTHfa2ر,zc[NND)>.؉Qݮ+x;L|ؐ KVR@gp>/G QUH:RX I xIJ-i 3Q*) 9\q]0K RӸd> J#OԠvJ籲1oX,cG`=i?%u|t>rRnu,^\cI td'; 5:>\#J"B,K^ffut^0zoIR|U`(H,z)BК%OL / )3d]g@52ha,/=dXԧD[+ړ+r,qVsd?\b-^a+D|׍p +y]8ڨCUufv8Nf%?M)A|e|1Fk[pq7ާUTبMu08H)6-Fʰ};ATue=:6)5z_m]).7 "UD_a+g HHs͵ķ, ;0[qp\7#!PlY˒р5Ϡx󏷬_pt*CA>f(9 D/ LN߲GLB ҃9 le-Wqtl.U,ab㊗(̻&C%2]?d͓f0"&ښl Qۗ \II^x c1-n6nRեHw豳@SyI角`Fo&:'g#iP#"Σ ~?CkNeD0;0-%5of`+c߲> lEћǢrVJ}֛W6μW)Ֆ2&iT9:>ZDVgw&T*i/`1X&o7]RT$4?MFSjVHS]iWО=:d .GXjՑҋ7'˗j߹" IP`ݳXXI5)=<B%s oڀ1U:J7iCM /Z\ᗲR^%.l$ mE}EBL h A87> <,{T r/V(wii{|=1:3eG}d2!0u]gNd`PG'(s#[ÍQ#]a EL[!h<3aKߚ2lc86X t^f7N)Y8rV*:ݵ'Cmu7O쎵m[VMSpɒհX>X;vO?]ۙHRLxjKJQNFhTg F\fvwq)#ҭc#?ϧ;#wp+9qP NzcK:{ MyVf?f,' -/a:YWGt<;[npAcp_^;NFAXkF\ Hܼ?tOAs 4#ByM1 9*J|7S^^xY[ {ב m^EcUK$~ь^Ca[ m X[6dԳ2GOɇ\bqFߡg8puԑxh,E*Ƒ1}Tn ll&H̽ xVqB^9z=i·H܃3uv]`eÐ[V2<e W*фn7i-eF,rUN -x]QHZ+/TsVo֤="g/o4aGqmN9ViAi7,ZI6txt-gзb=gH2}@%Mx{!$˦Ϫ C_褓Iӵ5=Ti8K:M]V5>4;uuR^_ AD7YPmoԚZ߁p:r\\Uٔ[/ .uƶ1V=*5ZD%l8iXF\q+sWƠ}LW=b]6 kh9l6>'2D~(3([D7M07/)gR߽%~G6ºh^H>f,]QϞ-7Do/RY4Qli @×47(/Y{2ovɌp<*//EݺI!ju%;+FP!u۰àM"X۬4Iؒȩ[rC1Pi4us߯(O6$y ځ)^S;g‹1-adU,v Sqjjz%%Ɋ^GAA5+ٿ{Ε:7|K$[kvl2 ~'Jhch EF8lZ@Ur]RFHjM^a翊mR xJPX=+*!j59- YRB)b\g hV]"9a& I)ѯЩBc9,͕:M:'XޒR76;h2̺^?/J|oy- asLC~(/NK؝1=F |:n@CshaHX'uWVBJvzWI(d_̍Rń,Tpx/KY6}#hY#.?5{=ZcI&n5%Ȱ3#XU:ĦgUvJ'x|)ڧ@m.̌897Ph&q[9>l,Bm?X"m\5 \S0Nπ򺞉&{JY0A[WnFWM uAWF]b]^Wb[^sK'hH7cdzN:cx82vcќ/J+ q#^ =9{`2!$ʘ'+re}V9nYʌ G>@#y9 ;Q*I8 =c8Oˁu;1kA#z] 2-7LnR=]R%'Kb1Σ>~1NP_,jE%Ur=ʽ%GV[6Lߏ ^4!Re}D-̻^t$BSw|FVgZ"O3GWaf.Z͓K !Gn{sۛCf#S2gN[G*759X;yY6Qr#tE(/ڞF!ʏԙnřr8zQsKAGA߁yI6d(-N:M+#@ຫ"LWwc=|(X}tW² G2ٌT_^%:[5Ws*KbneȟSsUabhdLМzLڷlʖ'H);Od$G?Bs* W le"hXDuAn)֪!jlAR;z>-'W|7ݟuj߾ *C0srs7SfP<2x8|p brEQfC> *d/G cE$հ_ʢfय़>"խ;B&R(Bm@%UU<5.[UDO> *Ae744L_߰%[ , j d唥2!4+ sKU3N어@I4&̎ CЦyU[,n܂gXڨrξ?Yn{HĤ130hVxrua5)7PKL?R0V',&$Пw^ҙ;Z1 xO/p2ǀLplo 1ohtã̕%{D?M;Qt36XϤؽWiXzpOTӥ+ !9M)qzƼć tN bb]$HRox~9M:4S֥ZEqmw̻T_'.UŗjpA%{Rhᬁqc:vmQ|A)BGi܌ پͦK}O9pd.. |hp"py$G BZ" YM]{}SR|oUkW`ozޟe jLlztqmKDQ:tBW?_o$n-ߪ,CϾoDqLM)U"8UR_ 6HT AУ@ {){Ԍ6V]H ^[ z|bGotϜPw{Y#PQ3weY|.5'PqG՜R2#B۳Iۚs썏XbB2d7~Q/DJ4`}#zi Jn[m;53(yh:+oJE]^8x@\HC}t9 o/r~8N!]|8[ 2dž{XY-U]+:bǃ͸$[p2ܲ=9si"(oEQDP ׍Qk/wQFruPgP6[ ]:E G˳Гۢy +ܓf}bj^(`6|֮ ;&zѮ7lfFI-wr$_Aj Qף2ZTe1IF%4E)PѶS˯og ;CCD04lO*N9" [Vnm呿*) u6x^ȳC{$7p@s{rkkRv48'sWgc3tM&<41({6?L7.\Z]9qpQ:t",":ŤCd6l(7?uɾœ5Q4WߚXJt ڏ5}Д $(cA1KF5N O۱;}!w0]2ENߪfV{NIz@i|uaq9ف^V=!iX3[f&=XÝmfVbn$Oe'|i CQmx5)y5hq6"`!* 9 < \G_)LCm|Xs{P bKR+K]$ƧdI YD'N\uV^*-P}dQ8,\{)+趩A|}JAO[a˾"oK\CNjC:Jj_NvSw!\8U)@#\2c"yJC_ wp61UwQἀ'Ydے\s 6]|7p-"*pcm[.NIvh[' 9pop>cIF 7C7 '@ U'Ihq;ixGx`Uu5yt> zoDyiEuIA_qs6CgKѼl1L6~Bϟ$c'ѵ p<$Ɣ3hhUB%\dk"J`RU8rQpGm_eM.\'PGPâ#a>cs1yׯזN}:0Rs~rii1oo]t!nY%ӊF,q~˷NMI{88eDd?iG@97IkK@p)߼AV>Xifi(3F n~u"lQTF7/6]Ea +*_)ip}5Ck [eoB~o3[gg9 bb׺DgA5Vl "t^ D(s:KI';e[Bم^5t ŸT6+i<oxBQ⪢RbCs/;庀k0&b4w +쩵HELS0B`VxK0 M$Qau7>W`V_&.3M+&X_96Aq_j 7:ac-qpg)``Ɛg=ϕPLL|B)C=镍k5sGg@p:w/ \TƔ6Z}/*sDsLVEfd9BnvLO_9j:HYv /5I,hl>*H-2LxulGl]- 0r{P* Y։FI v 3 $=  NT9dzY%RSE֕#xn㸧uA>ڪDz[ })0>T5u?hLOx1amkYF4Jbّ F:L 5&mrxo篝 Gc^3 GqMԳKlhTl[I؁ aKfjLOllcAmꢶcYw )wggu UڂVBuFKUm 'vh2[){a1Ȫh)Un*+;c\"Bynbƅ^ˌS}iGDW@*,K@X0T9yM׎2SB~Pg=H3/ƅ|#56/[VŏYRVahX}nbߛXw<1ǿtfÌuc[ w#u(M~aH`1d~eg*18asxν`^99jQB38m[K zqݑ[yUe:7fvC9+7Τ|TPZ( Kpnk0ZeСsmꙐMzIKĘ={\٤Y!3o$Ŏ 3J }Jéklbx}stF XWF Ĭ!I:{tRL]7˒qErt#Nq":!Ӌs+\:U3[r&({U3+f@(DdϧW'z8bPh9X/P,!KD@=9AzRm<4RDFn3n lvԆpkz!q!" FqaF4v>JU1XlIcLa>+D#TNT,j ",o7=L%VY)g'E{p ]P 4gzXܷ1Y4ߤ5X\u>MoEaP88sW#9cL}Nf?ȇ`NAE}]Ǔwc[GB a \ #6K88HR*T;mk"#(p^x{r*LP,~+4~e{$uWzG{P2S]E*>& =ԦI>ONjw1#)/ Qa.(YoAQzn}.e&z(nX4|qEZ_`6v]O<Эw-/2@ab9S_ v X_R0Qrb@/.*Y+d4^Bߘu:TqUo;Ov}[BE4ƑCLX]ITAoϓ\JyYgaohBml!Ɔ`̆hjtqNȏHo*ڼ@V j]6/se>M 5,NO[+T`+q-$=ROAodt_j̄rd'~_%eϔ&a+ :e!d0Qy/NݠR7#4.`rZee~6>!'!Rڑ@s}0=H.tiZKic`Ai+QA Ժa[3$"ݰ) YgnU] tjyRt\3Lj*A-; R`Il~9 ukPVgMqQ$[i篸˸ߌh_݂[yis~ IF(3!#$3;\{׊;8sS)ΊxcU[kisx|I' TҭꭒjƃuOuP#iD;?..x)`XoKW}ѧ#g]VzV'1=[.\QJ[q[*{Ћ4fLW,: DOk6txw/-.hI vW1P䞙O-&c0)GBŘ*;傦[UC0SPqeݫ_+P[}!#@'] l;8# N9/ԼDm'H|ڽmd\}^n^f#u^S}qkeVOH!&/\ť){x\wgDIi1dj߇Fcs34myHqL<=8:|גdQ&.Mg׏fլ].ׅtՔy;8S-<̷>I>uAcON|0Dcx6}Y˿@ +P(| Uj!"_gZļ&,+hTʙ$bL&KO`Y$4ibMg]20te9r%`@~/²{ϫ2s n="-_,WIV L.9nfu9rM@ )rPf0G&{uyLC;]# pT'̿9$$u25 4Uc!.f5lЬpY%e ; !~hH?" PZ?M b:1:|M[w# hK-?KVսGsML>ݑt欜tH' yQLG̬wg9M wFlW2)u)4Y :Յc Zj)TMx]r3!+.D~?U۵w b,.~oa&NOm3/I"#m$uBByգEP$%̎i~qWBH]}S֙gھ:B)nrĤ zrr74p7fjGy筝54/1Fbwu?p\;ҏJNP}p UZAMWJUֆ6M[RhOqR.48@)S[tV,[!#Y@vײq,2|RCpZ_Ӓ`:s[F9 ـ&&?+w~ ?(5f_n ?/M`0"vl'e^_i~a-i}#dCk>$'[mZm^.7dF5ԣJ/R>OnmzdJ溋kO9Rc ,yܯcvIqϊuEBն)&.b[+|#J"IPu^:!0"Lp&$ZiIؐaǽ8Zof2坑-Pij:<(F^*L ShVv3f+iyI%]}.2(s~+imJvFH!`[n}X dc\ȹu=#.b?bvc`h;݈xMu;Q>-b~C=b˺,7{caF2%;{ZaBg#|*> N"v&W ~+3eO]{ȣݎu :<uPEvkЅ =1X^G\٠3'E#+4Kadtd܎}FPfV)4|\VAq7Ro f9(a2E Ӡ٩{,]Ti(ϒC_DuߨzҬ lkjsѳgpIWy[+?w-_HJLa38Hx%cQUiTKu8J1kӶfPSN5j9$B5ٖ Q42%ufBQ[sR,|:ju_s=*; i1A1ݠ1dHVE"xrS5쫲D zan^^Ex/F3h} e/ERx!64soa=ec3ǔmMz?0سS^9&, ˕f:~Ǫ i{X:ى:51oiJj>-d[1OGB) Bj,q@kiRbD8\<}ͦu;v}m8QvbA]J+dgR3~{\ѻ Py>=庨=3AVV?ރ_TѬޗ3Q݂nGHt^w5 9LCVb5j[i;c J>pr$ZUXr@YT FH6V_rЇQУܥ+{Ӛ>2nzԇץgY( @FXyEŊ0a3-q">$tnA@NX v Tڎ Pn|Lhx]*| arZϱ\aFիŠ n楙"6uFRk!?>Q۠'b{E]\@54GIzaUw@%GbqY J&E^-l;& Gm'd _Npg zEfsDf.HiB~xCՐT14JB~g&_kplA< M]/ZafپlLzɽ_6Zq! 5ɏă,7ۨ7D;\t#P*RVX΢HWvL-7{9ԧ,wjZv@$t+pfXn?o:`0A!/~SgSlxt2So ^vU5{~Dȳ es24 P@CF;Wɸ0M4nr;H3dFΫuwٽp1ed  7 :^9-؃l%a^ #K'DC"22[C$8̌uBw6qqv` sܟܾ0TJ}#؍B3Y@ ,c5"'8C5fg+QOt():W|"x O*nWsT0Ƀ+*M?tw M2~A:z-GWw>{:~U^.VPloCbmcFR^Bg W7~BYF !E"CH8tdxd2ݪ@2¿`dH">Hׄ]58ҦUKg[Ht6ᔗjV[Qis7hfg:YWsW>a-"I %D_o 4h\וCצbNh#!SN$A{2 #;xXiۅ L[pGc8\OGgfS\ϰC| > tt6' L{b^;N5ҿ\!LGebOx.T3_ʰ]2)*T+qɍ&8yg߀; (~[4S?waXi eǬJdބk2+|4.2-G*N| O91F WJeZbE07;עKfn`5ք S c\=u-e.R#}A&M׀W5ņ()!(<nRG<ڿJ|T't]Jq" 2 y4ī|桙uW9ۇ3hˁ /D ?MȾ[zΉ=pyʻzVt(@쀉$_cὼcE:,*<6@9?vs(,Bc[Y1A_c)(?@FA8/PSnwE6P#52&G2_$8t2d rScn O^ϙz>mjzceQdF~6 -*RD05şhp&"\!):0hsYx|1iuT5@?^~}m2Qs[|>q),\b;HWS=Q1'UlЏ/,T+%9&S w_JT)AݚqگlR"n]L*$/9YwJz|3nDݨEIK Ϫp(EhAp5B /HSWxDA"UŻERm}͏0C4j"բw32!&KvMؖ%{ Hsh*!]eoC"!o0DD>!8q(tQŹcZghNs>^jh3w $- T\\\I,_\}ƶNu^mrj>53,S/ҙ@ZO^F1JD@7w(FA_ R۩c{B6"}o^~8kvO=GOe uwQVz)p`< HOv$Ӎ(%wK 1%luFtHpt k!"x+/ ?Ov+X8콚g,X iì@d +&n]aV+m/^7k {^,ykxT# A ,'gdhn 7~iUó.)m o}eGP(uN ~I,f=! /kr\^RܲZ@CmC}(_$n2֚Nbb/0Tr9T\Mj:qgZ\DnѐM9: YHnzAu[^;? IBR/^F>Pdms_ςq\-:Cfd9y7ȓ{[,5f<̉w"!bEipi5ï.z .+e:@4z!7`Yg灤4ɧeyq/_E&*bCx޶0J}3arK,jͨצ[YB@g>E:'ЦW+UWZZC+͆0@vb>?9e\ H8+mŴp\TlQ1OdHX*ˊ W:wGMQ07hl2!4ZL$? %CKc7aAw) z.d7V%Չ"blBfAQ5&)g"l) sZۣjKeNT?W` JٷqJM("ʚDĔmyuzFzAEF~׊2 O["Eeq"Z*GeͱșeGÈw.ၔm0? ȕG>6WJS`&9o)G*SzK\G7w>TF\JǏkJY=-PvJShNYu-V.yl#% e5 `w_֙&G n `y}Pί3y'A]\ %Wɬ Z-`0+,C(+coWD l#_>2m8+Vl7&=g>Zwo.,ҿFCzo8r "ᐻ;Ty9ciff شF$&ۦ@V֧S'AƄYx2o1G5^P.͎%U]JHBTDݎ%n76 & DZsKB ~)EgzD p 0$w׽{ɻM'~` R8' C vK?A28BI^{a*x7BR֡]$U N!Mu3~0䉡 ߦ{M~bDꄣ:P;-ef`Ro vDs2T\sc (X1[9h(X&wurgR8tPQ#Nˮ6~nd=\[>p?F\ΆTq #'ɷ=AT~LEGσlq"ȃa9-[tUk;QxY(4F56 q%V,0W R,bЅ\)bY$Co[2i4'Mg_ٺt2KEłi"+ELb Wsy[ ["!/>Lo"ˁA`oegVGwr;ol9}7kwB4o`ƒLO0zʭ mȇG;…0RpJ,=<Ɩ@+Ӎ8Wtsd*t6zjH^p.rE\w۝H `T::Zr^L|=l<)+ ZqrUZC\T֨p mLDҊn!:7s5?:饈t;ۓx-k"_C ۔ Ȧ~cS+. V0b:Y4= @Él#hȠ!wTH⊠GzȈB XZ L::"OR)dxΏ 3n !(]G\ŭW:B7]5CoZI]Pxip0SE %47tAJJS{yD.rK̞4˛&jMx^x/}8a t?UvWiP\џ> 􋤨SspX>p|g‹ f0)v!3|elؼMemI\lO=:4[mI ߿Dn~- (Csr 04t/}ׁءP8 $$Sd&P+ N[gy1J|mzEM$u7䳉 AT ROA`]c]͔37 Ӑ.6(♄7x!e-ې ڪ"74T/:O^rN8 t*E߸-/6~"3[zY}?E}nyr/,f)bz_WˍA5֌X5; 6qwh&3P%r̉(:m2Kk%q(N+o1uh8i#/p}B5ݲU{Wvs#ꜴD:-ZU2;6zH"cM-ģ:"eSleh<\^6~έA@Eq2< ]@1UoIxֳ$|CTQ"|8ȨMɷM.cCu&c>,%p\uCfڤД7`׬I$5[.7V;.I%ޠޠ4HXՇшFׅ.e}Ża*އȥ>#+~UoqQwXXM q_ۗѱ.ѐ!>D* 8Qds]tzQ2.iS5p8ސN(7+;$Vp .80Sӌ yI&V)FVH[yR" OO)Dgob獖;р/33miYw8i+ nK93rhߘ֩0~xZf6*:k?WA'LqRuaMuX;J>ëu;kh %)6q{WҮ^|4#V.uE_/6;o4; ՙET>ta|j ڇ&>kt'}4g`E=9'lKKW^QKA\ҊJQ0{%`zӏqi6䡡#lNa?EN6Fov߼ح^x0^h*ڠE/F,LVةoB+W<4Q٣ў" ~Jn* X&p7KP}g.bW6vx@ףSO5]U醙)dͮU5槭fSI;`lF.'Ʀ#sl+'ggb1x)VT*ѱMhy 8qfK£in;דlʀPa nѨ3+,vzĤSv|;sgVX(D0-O r_nJ L!n)عvЋ].KⓇnr_biH$9O5f8{vr%kտGpnioNˀMZH}rk[[Q?Hb, _б~gF/xF8nE%祐jP3`*;&ow~atd Z 9= /TTu"H_=c/D &1佱jx-q@͙% : I6 J>S03%n-$Oj٧ NԊ҈9_j#bk(AuK*/1ع8xN%M"SM8>g;X!b_qkxW5aQ1! 3a[heD*E`'V3kh  †eVp77, fv?*oIl6OmL3HR|HŤѢ"dz3%уD3M?N~&p- r,wd öuG@?1}vrc{QX-B\V59׶N5xأ1.ȋPTe5 F{91RBa.13/:]r5Z'՗Y˨vNYsWM ewX\)&iNf./Ճɚ[lo n5ۤ$b $tQ1hC[/[~!?.S+tVq<'y(kqE{O(knڞzFc 5-SS 3zHeцA -x{E=E?!R_Zyh7Dx83ɫ|E0ߪ*Pvۃ{-j+s_1{F^U/E B褽 y{O@n)NPSF}7j?Uͪa# _/.޳+!EpT2&Dघ !]' ZC GM]$e4v3|wzZxY3a|Ԇ &6Vu,|N$`%%ek0^> 5$=S 3XI ǎNʚwx Pn Y \kr& +2qzohm[ye"P\|Is^qكg[%-h g ikdGlq[gS(80dth(hɃmY1F <߱8QRI8EÝ;Nft-j_KA!V T 6ӜnHmq̺sCÉW0\7-7-zcףyF5zȧRRLIoFJ)au7̨HS,yiFm}yX_yM|DBr0706r|ȂnS靰[%ݨ4>sS͛gZ4f IwŒ"\I[):N֦J}άtJhQ>Ї96L pMqcpK(tREՐuduݹh[ d fFV`ބ=kSu;vGv GnRXA:+t /^9G-*=S0 K I;;hG{?bhɒp.!Oޖvpb.-y{øߙ`*U:Hgr9Ǩ-8 Ǫ[cѵZbYdP5̚W7X ӾlN0`-s/K{ \r֜8]+w ;t!.j=RPtݾVt+v}owfjNOSgꉝq7I H/(eLKP&NԠҸ&{cC>zIVj{*Q#YClJzL}[\Mg'ɞ|0YOK ݩj+mg`Lp*iP 0xƼ:7 (5WiJaK[bc?$#0PHfm~<ކetqNg{;Za莀8g'p{3WC2[ \#DHm$|]N%wGSѷ5 ZqG0`6÷$Z=sϿFv#sO(PEtcwR8d/j*'Jv_ E\Q|sJ9SvUs|CfR]ZJssT_+w(QGkl̿S Ʋ `$MbzTN!n%[>}l==ZlFhw2(m!8$V#af%;;g,,>D =*% ^9hq2OJ O4H#2aA ZUdž 1&o؍&EC|2n:=:SʣmIFw!bzİ|xk/b\,<8vh8\Y:^]e]RۏCglJ8-RqnEj@T(b 8["xy zm"$q ᨎ^m W =]?S'6[ၳjf,;e˓#8n3`bObOrtDYV`yeoH?{(R,^H`jXlP J+-~^쥤ȩ,1CϫWg4 :q q30 )k/UR%=_a`n|2_AKqۙZOWx$>E9L %ЎuM GogІhpy43s`V@xF!Kh@RFn{:oՇKXOԝ|ȗʲ_ a13cvDS.۩pG )5$݆J(~;y)_-w 7%"~X'G0\y.5k|cd֩cH![Czl(Xqb<ʱzyu2(rWL̻dߚq/N, +SJ|+Ŗ jD\1OQ(?w`.U$r(b$#*ژJ$V] ]E$yA-r{kw?AiM*ܚ7z<\#˴c.(\:e`1 Ŷ!w|D0&d߰AN~Ւt7V s;tO%-4H]1@S :W!K6PIu)hvY ºk|9 Y{/|[x Hܸl0{,vNG)Xvя!|[Mo`M>gaK13^~!wM x 3] *l/Jc8Iu@ %Fe0t|kY|ذRtPA銊ߨoS(am>B=)wħ87z 3"ދ1E"I zY؇aK"i,/1kaL\I!4KZIS*pA((t}Ƴ=m촉>ܖ^2P{kVPi<]t'O3lVbUjM{?m3(s*LoYjv Ʊ2wJ=F,?n8X&\H"uְAeoWIM6y;؎*<V rg0$9<f'+#6H/:xo2@a~{D,ƆGx[caiz}|GF29 D\+tϺ"6T-8p)~I l)+{!ݣ-]O'CgU][ c< {z5;'*\C Ė0-Eefh(%Q<LYiή]LsrirŅdE휁i?6&xeP~RB9Hӻ! \n 9|Ө 6S3}$UEy~#s"VBLZP֧D_8\Zt ZO jjlq7'~LHZYF -Ias {{]4[癐&HLR7[dT]ێ[@^ؐ Oq&XE_\8=q)01Ɖ&\$b_[1SII0l c02D0+T'DFJ3!YdK;ej1sidՂGlEuST<tČ* ސ_o[8tUYw5NV+b6[p>ϝ.+OꅺdS>) Sy -8ʙСZ{dY)x=g$H:Н߹DF7>pe!Z/RXK؄c-͍{XuzZ½8pvgeG0qo(#YDakEna8Whɼ8VwXJE8a#gbrr͎/tTvhˁ΍.{` oD#UzU;@{AToN1Gjm-EOU)Jn g= P/FcW=چew9s٩Ԝ-&3R7%ەРF7_+cՂ-Qv e<I=>7:Aly]^{ gVmƈ iȱoYcyxWoY:]4SJ+FdׂM \;\V8XU.JM4ƺxps-簈CJ+& ȔnĂ#A5Æ*`|2< Hm&ߦuҕ~͙N&Vsli} Z7 $K$S )sGWQh]CcQ3. 9EV}{…ik+ϹytjPmŬ s F. Y 2nr<"dHq+'1庮 G*YhRmy^}D @S˞ @2\2]v ,pl".g'GYlIܟ@<>!B&eGl}E9{bR5BSjyxZڄ6r\yGÈN .k׌.9 t([76 . ^taOYQ)P77_Ωk67j6i`AXIgŦfI@ x1YbvmWOWEhB{Tϩ]9ljl;;5ad'g.A^1]Z`18kX)* fv*&tABCfx7Fϼ~  b(ҿEN$`DV?UMh/}C<$[_CEt3luvZ Wrmߠ \܉6Aklj i4R;0^6AiЉ#ݭ"+]M FUI%ÐU劵 '*Uz?j孧=R;p&:[jΌe<b ƺDDMge응`&oqaxyĘР MCj|ß$|2ٗ`hZ`Wn S SY ^̈|F![iud[:86=ǎe;>߶ {*p?0L$8]o/K ﺘYpo9QUM Lxٵ@)~ i凜>LBcV$E3(sy[:k(ᶍpЈ)w.7fBI'nq[B.&_4j3G'u-.Cb<FpCiCG)hgҙ[j2Z69sq;oٶoZEQYs;| EM5V5z4 Q]I?]8m $Qʥo)Gi*†<߹Rp?ÿZh.\e|ܩ'H`)>>E}>qu. JMi4`75Iȩ=tfdO@O'dRWOycvs iF2J!* ޠZuז0O|x-`;Ч?Ll:zN!\qHjߌE( pUҫ0v`N٠@; Xfa6YkP&,y5ø>>M̚")#:LעÔqǫ~(^e(1S&prQT1Th[ᜳ Z>̹SVM`}9gtq%2J?E !898؄3 Vk@Q"nYEҙsb^A=Ti.yOƠfƞ_훥r0HsMEQfD(eS;nZX wBi%KJ Wa-?}R?ZW~x]9Ý]|QIqxs%].2`rYL ^oB\Z)]}e; # Hܮ:EG8eUH7^hH# 0T|= i/& pr/"o C@=5z!D(g"'gWQ1 .ߵA{3͡{(ʆa4Sm8 #$1Gjm {кHse/ACzl./gaDB"ChUQ@>✡4sوVy⹊ QI!v~~r ʿи>?־=LN1sZkџqqUnlY#a:$h}N7=R+}1w\+SCR2O3m{{(?Mt?ƶ)'+v9h<:sJe}E@y;PGgFxJ;iat5(+SЛqM 林 &#ں!v!`vU~WT"[1gG3Xۣ8 -(u]Ƨc$иV,M |unkqπʰ_@0nY4S{s)pܱJH1zA} %ЀaDg6\@R$dC1oB$ %]9;I4564ؤ.lSl"SO9q6KR.بpVK`*_9̙k3s P 0 ḭȦ,|1%@7*ZJ\!ʻF{QR`?Z$u1nc޾:υ]2jk$ߺ5|9}0r_:*&33ICJ>=S{/(xҌDR-{6`o퇧.Ew9B_Y FxM#߇-5 &i }XJ8Bw/o# )O,SH럈Ten8̃S~ ( i4O ]Vkx<]\|"Zica\ (I=6weq|vNbᘰM+Gϵ8hֱ, )ټb&\HeṀ,ӽ߱`ZcN&EaM)f ۪24rꐮtbwN,[߇_!g'n J  y= 2ql7+2㮣ԇ)0>V^wb6񋭟u }TTDXK l$>;F E$H ՝1e2e !ُiQ("||s91=ñm6D9wibE~(^)5~9?csߣ@sT;[؃34]*p¢!$iSDgaM%|?6|mx1c-Yul dD޶J3Ru.09Kۢ@d=n@uGwH3X%po͒fveaDR&b$`,ƣ3W# 0:7.ښy~em㿛xaB_TϞ8ٞW4g5GA{ *n9/zA!D_<ֻ3tbQIkqK:`p*TWKJhKRmȏO(lոn&9X9UZaƐ19xd3`%~JIfU&kC HxXHO c@SNtCI]nteyWl8%:^@ǗI =DE-W d[EiL (y|y<[,:("J'Lo'9$STPJZS,3YІ.q7eh`qy/PuQQVڋENh4׶KU#QUzuB<%(_?g)q}dGjc_꜄ (Zkb!l@} #t!SE3^s/^|07WDjrq^[]K?:鰍 qMUP @=S1G*gfʶ`6†զ9t] i~5(mrWܴ@(&)z_}=?W0SF_ V"tM UՏ O:RuTƷ-˿A8f/4h}9D:oyR7VY'#MjBf~h#=׾bJf+ 6!@7V2;.M܂[dٟ{V|N!O=Szu!qiq%;)TBcf%|g[XV  >nvbDB G2p0CRт}\2$B@lCY<,͵\]RJgHpCIfjZ|hq"z 3?:Y/CGF%"a[g²H'eo6b^1f]Q3dgjR5Ldq̃3SGT6 ;q*$n]T9Dud./VzQJSEf}n&Ъ>g([33_N˒CCv7t2FUk Z+!{|1?!+Fty"2JK4l—{WP .& B1dC@RgM^&Ew> 3ח7H:4?7cM$emabݭ w\ `R(>o -9E>Nq앑+S\I3h][H*g 1g$G66@|QAV͝|cDKx#27 غOt͵g&:}Bh3W+}[ E$F%5IIl%} "@ڝn|v/@|\ʾ# ,Z &Etsd=j#.]>rߑ _V?]GdJ,ՃcOX8D)S$A5KhҴrmVO*p6#:COVYר.+ POuePA 'ުBj +G\^hi-j}Ep+AVFrS UtHCf+_2tsMфi|л u[q9eqa$5YCnlWu_Á\#P_t?,ڥR@8C-٩;)BYhǻ+^+;{% q/c ye/SiblWa]-C`;EO"@s9s0=lg,|u\ /yfrhohg$"g B rY>G.vevS gMJ2Tn\j#D$o*| F0a ];4s'-Otz}ios J9\]V)܂#gЉLN{拔XpNQ0 ˍG䋎b[#[2Rj17&ui@t2VWmפ6Oc0=u!w^{s?K"OnTn/êҗ(^Ok˯N1 /4uVIwn/PkcTV.pxGhlp[T"%?xkuCA{}X +E?|sB"fnS;8WNdSe"pGZnVQ^cM_-f|L=ۮVVQ>XY^V=fH*nD.CЛ X8Os;J>A1o*j\`kw/;HyAx5*ɂyiE>L{'@TfUr0hJi&LPIXSQM= aԭy =!ٓ,Ӊu"0W CDZ96 1?S/Dm"MJNnޥu4G+]5%` G\m4Ho(ْJܜЅ#0k~'A+`O"&P_Nj&RVyީ˓Ɉ”ާQ<lPeuxŞ ݅ȫJ-Ao\:Xf5s-}G bervD,ǵ-0A~aBE&>=%8fȻ5}6,* ,/ǎ 丩\s+cpaH_FMPC9hi*&J.uR'EeKÂaJnppUM~{(vJ|cLQ3j("V('TnKH7>CH A+fr<,΋t^ILWטSE;i%1- -RB4nŜI;'a /__k8h}֙;b&scd8P+/d-V!f |3LWr A]T9l6H &|IVW|:t^|>fhbii)G(-y}rHIƒ.!gk[5MSym*Hlhg 5[F|ZO~\ή@df?t, π8nly) ȭL4zIu"@j!DFf#+#} Tu}NfAC_\#b^`*6Rm㖝60>j9Ll8Vq WZi @>ͦs#8΃hfkt,(#χX-H|FeE A*\дjzmKiߍq|/8[EhJA/(l@$Jg^:#a +PL*6RsǛ@>gxUJMQ&ƴϔ` N$*x$#|wD)`}K!!Nݕ47I:-tG?/ѬH0=W4vJ3:SQ>Y͓8$q|*)XlVC\Zfpr‘N&!y+w,9CG(cB#' 4ia^-1ŧvr=_GB@(ut*5scEϡtBp7 >AS1}k䕵%ߺNJ,nX98(XIߙ6o +j)0(D#XT$.K'ña-fy/zN`<3!3OE YV5QI`򎶓*#hc:#݄ B]CG Tv{ aqprOP@WxysŹ*Hd9uks)bSYFl [U#ʕld#MES 靤KjagęlF<˭H(8[PLA> 2^lX"Xm?C`Jܶvs+k (p~gm fWh1NC͇Bs nj9z))J!0?gmqA_ӹ)HYszu>0%{g)XIٵ\ fj1b`rL*wٍ (9*TNSӇRlGeky{d;%”bU \o%l`OHZ:o6NES‘D8чY3= iΧr n*mI5ֹFf|$l/@ƪ8n<|Q8=~'IQ?uk{s':iU0H7]fD"'Ll#? _Ih3D,~}NsW"AﲬT3@(Kz rRM1}7"0zL]Pxʍ:f`73Ip%]>HSrl̅@C谫̄Ɋ=$l5=ra>$8S_|9|ⳐQBr"2>-ntft _>XѨn]!Ս@6<>3T>+U*^ʇ0RbL=RNAy\2[xR!]XJC#O.[ bA_[޺u^r:}l(/8z~o I90>VIiMXRZ}wyxڋ{t-+bᓦJmЯc6sߪ#RKV[MZ ~LYt*S}só4Wx1βޔ/]+sђf h#q ˊk]QF;2؆ ϳ&DklHv~9EV`v=:!y֔*N7uI>IŁ&1 MybS͉ef̐FDSx?YI=e5efmXFbkljKdvwvZ^$6-9?2Uy.`]8fw2rr=R 7K͡ H@vʾrʽ'/ K1 =bzq>`D gGjx|+Lg voșa,;Ui.8EF"anҴhJ qb0 w8^*0u4{w*TN!`h$[`E8,!DQV|j(p~[RnUs>aTqgfvuTc]{X?Nq]1y^hb~̼Ҙ{'n?KXӂ{{3bA} ?c o,2%H?Cl-kO4 VS ǽO=y?*gT<FFgf7$$ۭvJ*Pߡ -uPD5`Ey96bQ TT*#NwBlzkϔR3,TF{W'rU1,1{^sl*/9U;nS#eu?n/%!{ _FH~s֙ 4W9SQ`Hnx[L#! gBZUR7ǒ>1-pǡœ(R,@A(X2V\E{_zytW;cjZ LG ]eo}'a= `Z_KI a Y$X.ʖ"a~H. 6lA9$e}n_\< N5A:G)&"biNd=/7 L-Ș΅ف`H8gX]]/8 g?Dtqf>xB@Ϳ$^4Sd3+uKDgi#'u!,H- z;(ES-_@Ԯ<s -ū<5|9<T\<\oXbq %ߛ*"k y|N`ib{NlSdz% lU8_"Z`FGo&|M(¯yr=ki6S ٦\P:gvyAN@{ nhtYB6B#lKS#U(^<[+/ rWͫRErVu鍏h+kΘ=L 5 c了%{k XsZ}R,)Os>F-w6 &%T6꒖>4&x10=軄9|N>j f0l@?6k A+TwXYIx_i4ҡO]W{tKͧhacFwaaКB=w7{*4 5d[Re}unYm2= IVja Ez.dOgE d֞Z/ :C.C'M=ַ< MZia+l 7"~^O5v!TW!DO]3Ki?e)SJ'Bt|##-Lg!,Zb Nm\Jß[>\\EY@\&u=@̹'P8)N9__U4{kP]ri$ғXײ.vńn'zMG86`OrcjV)wgO“]w!}qANrH4/=EIPZ)b >[/ Tk$9/|ڠamv1n;KmV,0W3l fr߸ zxABPr?jNM%OEsc 2'i+#\dGJK޾dP7-=67ެUt aFԃ3G}$=nAB/~*7{W01aGc蘭')} qvV}Q_wK[9JX ~ ZxiMAoF:Yם>wo6eydjz[M i;fOJڈ$R;"V3PGdyCUF [ۘ} 44<̅ z:f 6 6Ep.M$BkjEoCH[!; 0B/i77!|g}!0>RAy,C#|8 pXU([~v& 6:=SeM 7ODο6R.G-K+cr:7=4" +%I,=@xg_ǃ%ҁ&fA+=n.֛$ʨ~pֶ\:af lDP+d~q%>` 3e+BB%OH_O S$Hj/xoF]=5P(|E6dƌ '# ײT~mOc+9^.KV@OU<ڹa~|ϟ 󄙿t?/?!>=UДbpG=@>z@:my~䮯JVg8[aDx%1{CGb./W\񍨸O*ח=RÀ)AXd}>lh^-kE{Y̪TMl?'f*ZG9㫴ϵ'7`SWg?XH&е թ%lE$\WM^>Pd5D%B Ia'D#u^g}__^؂Yg;mrnvmN-k׉m/'(ƛvM 6mdHn,fveQ3 "]Վ c p,-(|{^6Rh3y4M&`NҔDe AnAD6C&H4dZ%٥9sD֍ŧp@wz:FUl,$x8vS0:gZֵNzy x"* 3o:hNDJTqʟ{[lŵgNPsˣ3pb˝%DzR=y!ayX_ڴ_.R|; !N@=ƭʭE圊P`I':ZtU[4F@3Һ VaHf,ﯖ}c q@SMyEJ@m% yu,JZ@n#=؜l~}RVE4FhKf7#4u5҆] ٰ$:kr-=߿!y$?z<*PKkA > fKW!]^'*8?ba!~;KO!Z=H?ɖ-NR9AKUgҊ.f*0@ 7h2V=a1~|ig!aЄO?\ IDFK#=1y&x(=.nPZy8 E/p)JDDw!y<$f߶6#)S_ Xio\s4Z=D 8ݳxbWsw1l7. zO]<>MnKP'/--Xy#΁DVAB\+DzVA/*@%F,:(-^yWQyJo*XDcblըQ%xImP8zI[K@tK.7u0R%0*Be:d>=#q6^f2 v& R~`TZ[Xhx~ 8SU ƓȎ34_x!eL|U'l?^p|H;{f|r/x4T󗙲LRUٖ; P_ h9UcuL̉0لQNpӕ4:F.ݲX{96prwl77ιJ#zLg$QKfw0D%Ap;t:Qvf!+;ǽA*]U8dh1t4>6jBh~%F8%V@;9ep-i5jГKgKij).ӲEQVx7OBkSm܌zHTɞT͝ocl/%SPJH "?l=]^K{J:MDRtu50}OYfÄՐLc_{X :p/orm한JT Vf›_&N "]r-c}Ql_|HO#]&-6n :ą-$Y"E88nm$:Ē-õ w *ƧO z.]fXRX8R/BfDaH||ޡHhDzPޕHИLV"4"ҁmJC}ÓY-R3uKeV& 2CLQIkt,,ɫNa.ZWsKUWIBMHLhկM .LW#l 60}N>Y|$Ia5|R3e3wR͔bFn2`{M$J{zVl€LB~zSppYs'{{|e6@.ZWȾlk,$6IF2\\kw]n:927HOўlTX6=5 9gINcb;L !5sMO$5㛷wA{mhyRuOsdZp&\`n#ZKa(-_Ii 1!طAdF#ur&5*p (*KO礹tFdeMFEJcUW_~߾`´^2HxY@oz1P mg>BQޢ@ɻOK|? (@*s੎ ܨ x\:JDͩ`B.OKZ[Ɣv`]/nP G&a h۴s;|SwI%>tRiJkd&P@w. qTkz{);o3 {tx4$ޝ4k]5+U򎵎1Xf3A1vxYUkiYt<#9jp ֿnB Km W$W{[H=cF {X7~ǘ-LC(YZr-۟.B˫ Z!84PA/2e!\Dp +6!E;Tn!+.*ݰ\L޳I֤Hǔ!gAЍmJأrt]<{_r#Rx0ip~ N3r(*K̀ckEEwWx zii|BW޸^0ЭIO+Kp┇CtIȘ;~'[jshz5Mw#P'WoX?y0!23(U1]6e>h25)Ezd@;(z$]& (2|R(bi231S-)5N2a;f*)]Rf\w}iWX >aonPqM'rJ1śfL9P.U]xyH:ͪ=iz}̏9r"q7fF_+UdgxtFH֢dP0./+VEѶfu4Ks,3Q2!l4eMrZ2.}CfUtx]dZ{X_,`5 &\t=!鷕 8b1DÈ^F"kTs3T 9{^=3'앢`jxDF;lebQc2vo0~TQ}mJ7j輚.x *s Z9Q-;(0EA8{]{Bm9`77} 6 J 29 ds2_[RC1!VϻWXO.쭧LXԜtڪZע~X϶ݖ"xǕ< GdaF=~aKMa/oM;,Z.HnW,r) sY%j3ɚ毁BohHk,17++0Mh' OT0: L1Gqq(>5o1CDz:%8K}^$ QYMoYtK9g#-G-u>\IPP3f+ѪSͦ*DJ^֍,v@#}i^*<'LON <}/I#8}o:SJNě{p<(+Cmv&;H% Iw7%I* kQ.k \to"``.N#*^h \nXJj1U *]<}Mx/]u=W]/4S"kOJMĴIH^ {XI1raҊ%m%^gfJ#*^GqhnTPvNglՎ~ٕ}VoZDcsVӛ-!U^"^.Gg]ǥ vm?L":^1P"Jo#ݳPbTUѺ+l7)6ͮxk&zc1ŷ2-=6-24 $v 78:ӓҎ y\;Q~d̘8 __"pPǽFufܲxȵ U9kw8K7+t|_ r/g 0yF^'"zWo :"[_8"z])g s=Hvߺ{qPE[Wf?XOJh7}62'}\6ֆ?{+'z޷:3І*.-vd41&\DB_)#)$q1 =dvt ȞHS Ȗd9K2djyk0yq]<ƴzs14Z@) FEKTcz/.KS$h+ݶ6ÚݚxJA즴 )na.LOs__ҷ#LA,9xmG P8U|c:> +u}?~=S3Xs߂P}=mtT!Òw )s)B>(Ouc !pի'I,;-oܕ*<= BZz`' . ,x2Y {Ls#)(#U\ćb:BmM!Fmő ]hp*5k.qFBջs Wp靧f vX2\Y`Kؾ7.MVo&u}6# ;#) 4JV,K=\4+8}&|]m?I+0©;ށM lʙ6xh"C@UX>).[O#$E]dMH+tJ)x^ꑕ^,fOT% nZ2̓U 252S.AU8 ۫l!vjjG3O F {UI QE88&.2LBpއ c^~)7u#LP) )  z@I-AZٴKn#xGOg؝'L11J-\,ReC$#$=Y2ȫ)`B٩$kURkW?A5 Pʼn91aA/ D+@5jn?3RIrT2XݤQ`W-2Ԝaa?mniB̤PJ}Gt\rPKx1#_ Iq\?tQŲKެT'&Crx~3xVbAXŊFTd߶`R7#: pVa"gФ_fLiB^ZqI1y0݀)t]E,E : S#jEf(a'q#m=zXvx=>d_dԒ@Wc f:D\4S)~(\d*+)V^ 2qm*uͳ\ҥ 1ܯ'KF"wQZ$i-@еvEA[li:n}ܵy\87;YzBU2pydsxeeqz# iԦ%z;*)b헎Xc^Ͻ|2sI%p(=Top72}ȸVlҩᘿM\M-UAwCNpx.ǧ8êN֜k2ze[C XA ZQ+<~_oS+ xșS4;qjHUId9 \n@N5j 3/A|h^YUOoesbPc2+g3^K:X9Jkd'lD8X.q+wA(,){5 %m^uź')wG~= 5,La1 B6ʛo܉PhJk:aW؎B1Tv ?8[ }[gE]6w^8M]uMgOtJlN^ͦݲegs\`N[vY 9?pB5`[7$j a]7pF;8VYDEgu_b#'L*Z 1VEO{uXz %$Ը'Z/W gB JPE; ]7L6ޏHgW҈O+0R9-e8dMhc/.N3 eYRs$K3Ȱ;uCF\},8ٍS- ܝ 7m o:1; 뭣 9,  , ;vm @OSUG K ;p8wh4{d5̀M Ƕ[sl߲[^sσ3QFb(l[c`C^`S.„Uɪ)M0#</)NTqR':@#=okH7Ps;QJ܇ĺENs}(8b#. cm1 c 3G:,>$qiTo9b 8 x=H՘2r npd=%& ҵ22nA0g vX'E2OdVv;clBLHR7daWdwaRzC{ol˶Kʫ;bSzC(h=w.^6!7~rQ ث1™}kZ*#ނE$:ELw3AIQ (̀kDTRj 95/083KT21p4-vfIu+Ȼqcm$Lz0Hoa<5wՀpL3ôu2RKb@Fد@^Vw;{`mA@ĝG0۬\;7&I&i7 84)foTK?*F/ |RJHUgeFl4R-%© 4[yop$~/eR_/gф0?v'zˁTQJ>>&H~;DN|j>^ e$ߥ[^gT6+uty>ee>;bKpߩa7(7@B\L0hϙ$g b_x#Qߔ=QX+.SXʎmSZ wjl=Ftr"kbu\(9G0\SmWF8H~RA2KC5P^OI I0E@R~*sRd^2B]ͮAR3lLpz!^8VpҖk:8r笕ۚPotGcmp#r  &]rW m$r‹B-TYuGި9IAz/v8SB˾Ε9h8aXI!9`KwKrh+WT2[sYgZa_%XɖCIX L=߶ZB<[ţ4\`t;ZLoJ+|PmtϦfj3)MA0|N'L7K@4 #(O?[=>FHV'XwX.HlE"T}sufSpOGGS*_ykMDXaWFcj,FOfV.kE<45ʷvF:#;H#nP'.LeܹX|L܋^\w^)60%tZM ODxƑR㉁<3b?_c!("jȘ@V/a+p:N.xԲtQ.)Hc0%[bL?ѕXɁy} ly\t _*:[;da3=>PiQh˕=I 8Jk],KPUQ7`-)OO"%kSE}UrB)X ! DH22~T:'Dd8z$鈙t>6@h uC3D *n D8ȆjaPhC#0߉ٺLwF!Sw0;a~AZfa5)>2VD'#(5Rwx5†̲FZJ ;TdYYm /H:ڌ,1Qgھx9p+6F@I- zsE>.?ّQdrj'9Hگx!B*hv0x :BÃM&Qʺ?iNX1!}_|/QQJ=b|+Fd[}NڇMa@{^# ])@!n!B?tD뷜^ 7de *{JYnxu.5XOX"/ e0.\%@#eif t]<`Ug|VPȉ̬GYlL.uIoy~)H?D8g70i+괃A=\s8ig-v" {_7egEHɎ%L^ulجCʍWx{דt >>xF(tK2֢Uq4M#O:> CD/6ݜft8)ތpK=4z~A牂ٺkpQp0<'Ryu v2b2r_Yai ( ufCA}`eo*f"P8Qȃtk'2M$&~)$C! cp"f}sD3 IL7E/:#hu\/?\42n?C -d\Us+ytFl* ǽ?%%r eР B ! l1 d$IØ&TR=dvnh3c܂:%=zu0b:c:,wOrfžm'[Is[֝TJgT.T.~7/I ,لӲHʯNV(V 2HWl$kP7"6w,V̆ugQ e[ɠat@Kɮx/ȴ2SN?r B2 hKNcnǑYj 5Y0ޖCVp1w^E+d;bِAr?<2\~ڈkInu-]U7_ܭ:-%BboG:7~u;tn$ZD[ oLy7 :`[HgNpu/)?[kK9+{'|W}Ƹ] ]ťM|9Z3gGPn22U ~\TD=ecEX@-U0'A W "գۉ jGG[~G rx_/jJy\.f+Œ>G|MDALHoW!ȃGrL<+tD LYfo,CJ,/}L[D4p鞧8 `oVF˞y p bcY wŝ-bH 2%ݽ|cM1@g)o臹w_C׿գV@ۀ,tllc"DxKDǫ{uԥhBˤ rIm["RUi%.s¹[SkM}Q^tΖ{PH"R:<#̎6 jEA4Gȷ*%τ!frdf :?>5&X r#"x6alOF`prԝ8*SF6"S@, ]^8ǫn0:~HKn}ZTW.P2';>]FWPtW4~ 6M-򘪄!?EF-`vDUlb90Es`e:`uKPb{ lͽXB:P?`i xe35OojTZc~\\<5j켥´BPC)s+fNx<v9 s ^jI:nW,>q2 =k6Y@w|{=k\@bpK%QzmDWΓ,XX/;wWP07.N[ Ckx]j'|̍gUMѸd/w4@} ,e9>=3 5%G\, m+ Hɏ&P;Io7c@(*vbXTl,Ņ{LŽ湍2wiM.m3 -J]nlce7cwsv mq!eE6p @׽t^F$boM~|U}IJOcSmE +# пª0^_=(rϕ6"߷ICUX$Z8+=LDG]Mi5xlnCӧ#t['V\q`<gC0nF,eA^!,Y!XtYCA)g r]ʰR)#qY"\z孿|#: -Eh`In^ e׺}!?|Tj{eyTjt›B!9,y{..u҃/=(]ǖ4&VCfCNV}x&sT^囹|=FY XN4-$ [HwǪM_ͯ-.Bl!k~c 4fquJʮ耴î]5.U TzqnB` U ŅdCJa9 }e#cTx%Q+cgM49`hHtཞ |O@zJ@O)m[PfT1u#>RebSzqßY9ǩy1] 7XuNc%D!J[֒bK "a]RI| ,Tng |eBC)4gGåS JgYp9pF+' iԅN-9I3ɬG'!Z~m&gWmv}4YA0w'x)@5Rmf4f-Ϙ-kJҕPTTDQ/0 /8 qb?X箆x|4o,SJIIA~v XoDVh'i+^b޾@U?w!*Mͬ_U"_:;U؏ViaSHFDk CLVya",5&:v(J{IL]L"qebt 6CHfJ|^%d]' :>uD&cGKҒNmMb4FpPv9VHM.:4패$C׃d k"S\bN $2q7vu^ C73t-qŖq0nW0)@995$vG2,7_8.FUOIʛ[4`{FYaG,]/S_{N>KAv &o(B9Ъޮ.!c`K{UN:]kΩ2&Kvfٰ֧VKI=°Z林6+pM¨+(oױκqE j_EJ (m;;H:j[7m|Nv'kĂ^͛g +5夲60c0q񈐂+[V[Nu2Om(e0n=tWvElr\tQuEVhUɾ+R+IQ9*pK %һ[l97w,-!nξ+='2(>B/*Rp,FAV3:i!g@X:Al,셅a6]>,}O2YKKr #ħēvpg1XF_cCnL?CB>)kMYޮoa*΃ p2kZP ,q!YY6Ҟ%ȣp6ERo{ϦԿb~+UҀ񜴣2Y-qd"%T0].NsE1e Ls#Q>n mxnuzu*+VB 5h3_JNI7gGP h,N(4%s<˴P|ZdP35RksV+Q.] ꅲ,ΧPNt۝ev6sRȂC3o媠P(N~Fk(GKzGB }8;⹏8+l NhV8l2n5lN RSKrm2\_ːP-QI5CrItf̖3U@ ;nA5]\YUt+=& UAˡQ$Lѷ2sfMTN=<@z;ɠgĝ'AD) Ai~GF5nՀ`}ՇЊb{X J̖|}STPª @8IV>LT}95d݃#wf55\H/egܒHjxXٹODl2ü"[Td /^tZgHx}Ĥ'8t/ ͿFfK\kfҲWt^Q1T(=F+C# ~5]]X[єXxy*lbsGʈ7dDuC0k{w33cC'U{#|h1cM)?> WI}FBe)cbB[k[38 >h9ԑN_#ȾfM F͒}Xv~cހ ͮpƜ|Is' U R~jKR'<*t>=\G3@j-C͛`"(1.!ewyM*2k=-!ȖSDW&caAɑÁ-L ^04aR<pqX' bI!w@r]Zf˩Om?p/TnvҡN'˶ddd)>҆  n!>\Vi4I8if^ o7Fq4 Vl3%K Ux+FDCelˏH=c^;SK5"I')G#Ze%,YؚYlT:m\}Qxe5cH'Z1 |׭zƀ!,`ހG I)t ,2S~=l!cՊ^_hv/? |<S8 ., {6_2}#1h& !2p"^ΜhaF([BLZQy06P$6;8+Fխy"2d4[i՗jZT OZBX; X6FD><l2#Z9 }; 'YKf)^MoTBdU>M{59j}(q,9ɡ Q @Ϧ5=с-I B5 i9lpW1b(h`D9`o8֨~/ulE$X';?jxBG K_L}? Eݜ^j#qgG=pTWp#]h_;I/ tDSyx5ʫ5F+, 䂳>F+y\6~) HpS.+lV=?OKX[}x jİ.%<,o7&}FIfߕ>(W 1&6z \鍡n.悵{.( m055Ho-pPzKK{Ƽ [08', M@Tt1cʁ nz s#^U$Tԕ/=7}_#Klױ RQgS$Z; 0.Ɯ_5'śF2]Cߟl)簎 ȍ..SMO1~+Bnp]=5Wۯ^:[\Åy茏 ~vhF`Q xИTd$i;N}L.Cyķ.伪/}sz7eO0ب't/چ] >([ޣܲJ>#Ƕ׊ohI:1mid`q"``ZTB͑=b?g]ibpAɭlϸ$L!Khz,}VRҋ]?jZTG:iTW.y6 t뤬YM&M\}\ړ˛= ]y C66VƯ9y c4Wϓ9`Vv7̐ i%`|lƗ1d z|ƒpj׾jұ.l"Q<룥5N!x"t)  Xѿ74LA]3G$ #IVyMB_X ͛C-_Ģ"J2(r3i@ZP\;㾢1uט\ 4\h!@F}k~?yAu P}a=egQ9 4 l!?+Ss(țGye=({(#HdRb:љ?+iO{uPew½\@L&W@plKCfb(JˬdRj3<ќ"ׅe9zڰ7M2Y Ij+=9մvP um, _("u0p6D`VZdz;c<.p7)2w {/^_E]~n_]ǔ-WNN: +ըFЛ\mmz[6! ɨ;,*{8?Q30;Jsui5 A* @-&S|5S S\XLâmED9F;EmBuFMt髀Ȅn#pX5eoPʓi_B-kk/Sr,BXGZ$pվiJ^$me< / 0,@;϶ũE>;q\t\yð җv)3mjMRA׾ư6}#_guE&KgP`\0W9!x}SFʎI*4y9_GA>%.b4Eod/n d(V4qF&,|9‹ 0|{E[;Pzr@ü ~ >3T.Xu`@ƙ{6ϱ}kI˟&;'ʘV$^ xrvp犣4prE8zRxކ)1NVV]ZAq ]֠f-f9RLBU-~=ې9%ܰ^^~zl5߈nB{*˲a"%PwK (6JQ d~661h,YW7rMdߤ!]v߯EMX7?^'*Ցf[D@m)UW%q<ލy ?O .^L!GSJ$ujvBK-F^amҢ.$Kځ+w`54ir? AL:J.\ozo4b*T ?`@12/I|SCUa ZC0f 2_N?/ݴO2eh*D0E{{8B lrp2s7[#65ShQtٸRE/+|::Ͻmlu qmer{ܥ4 5$1BkxqӚjDgAKf:cEx捣7D蝗Q.nG@W 9QOPm& s| BljCTi$'g?kzQ*WGo]G-E} Y0XF -ze\^0\Z w!Z^7]5㭠gJ F7+W]ukq iCJ0׷UySma3 Gx1rwy `U$>;d-p`>ZH ej9 Wp{Վzq NR8$!gXi,,`>/(Ȟ@&i(Fpd3|[ guZ3;Yi7VK*QyGiT1Ŋ<*)*S?aѵUFPZP/\W-Ⱦ`h6wڊzz]lHȀ*oO09{3" b9=OȅHѾ潑!A?UJagpǧT?ر#-ZY_W2#p$}X?SIB}3Ta2 u 鷵\*#_emA밥{ dR.C ']lfL+겈4V^JQs+(Ж?)SI76E+0lH|k$cA3"\{[+4d() Z_)4IVE5 jH|Lx,@k|TĤI~ { 炪.. h_byBsXu"'sW 1iI%, ;tz' ڛ@d &|E%HpT{#?k,DŽK"rj\onp>-qp1@UG|ذT Q{iX,Sm\4OMjހd dd }jq*wP614ps{Ė3(P _8oP>C>32/hSlH}}mnbB@wikX*4j36~L]J׳_Kdͤ 9mkVS+9؀ ylk+5!;cLj,<qU=Ǩb bCMAT"kBr.u ?f!< o03c~`A>o/ےVJvm/M$^b͌{@NcҨ?,n8XOlo>j`7H#҄R…wY8Hw^n\9B {IbWK̋J/?P֕?ldQVkUEl @['vsPb>8+x"]- 0_aٝѧmQbAYju$qͅW?lSαO#SRe14ULtswe*A;YTmt K|Zl22;vc^$S4ZRYWJ\ܵSdAMefNXʯCHj}ѱ6%K]psV~t:/ Xj#ulɚughp/F}oأ['[է4#綉kbj (J+kI63@->k:.ݩ25ɭiqmx[k<ցpdED s*Ϟh'Ko7~wh&T̡ߗx bi vxV 6sp}" M X^)^\u_`pq($b\ljg&Z> y $>Gn$ChܡBHqy Q/o $ٲMɅEWH=%G\eqy*,]J+!F3^P픫ճ#t:YZT5}[MJqP 5E-U&H -PA[6 &B]Zuef`Ah:LA)諧&S}xwt} R:.݌Fi_֘tĂheV-ܾ G\쑭zo86eL6R%b%ˈ"16PŊQ4xT@Ru`G;`d(_0FӨ] ?e,BMB\XyJ2T(@ ϾqCB({^kN{Ce3ٕ ͸MrmԪe |iBŹRj=,iUd7[%}qTXY:nGŦ}xX)t.Y>G`t Dej dRB=rှl%OU|L=%tP h':&bqzYq(z3߳v~iw삁a{B?X#{-qEH$Q;d4@Ԓ-Z[@l?0+Zen}>/r&c 8J~=D{ʨO_tBmӫG:+7?;"CYzi2!Fitmߞ#!ҸPX]f5:8*3Y!kRkzM~lX+;}-߰P'Z^3<0n.6`x4X榪*.\f]Uuȿ@<F8APT6 Trؓç,ª"hޭ EG b$F km`j wnS=DŽxw#zySv2xW&j#1 =?±W1? ֝X\%א(kKAZ=+'L^UH\dtE>׍xUr -'XGJoYg!ooJ;Ɍ#vlr6 m1>* k[P yj,p*2G>$ߤ`ۘQLU1;7;DrFb,_/[׺h@[GPv$f-׭8yM~˫.'Bg&S>ͨIyû|q4|$ cNx*(Ւ/i?XW7tpv]qZD$\idjy;:* %!z?U |ʯ OyhqӮF #/9mKS1 KR':6>/<$ǝKWE+~ ˎoS7rll讍(x}ϱ(Ý ܪ vN3`[I^n^*4DWlO`5N&aۢ_N~ૃ ƿe5|!1#R|q__=V>Ig&pkuI'ed~ }NWaGd"] TRWVl&ͷ mx5 A TEɱAϰݼ?$ZQi黒n 0NXx/|LɐyxŚ4\jU%[:`ՙF6Òx^Gz6|خdO2a2Lve4U"O2i agXM~39eݟ!C!4N[R}!&RQ}I}T㡊O{t825M}"da LJIqU~y愿585yP=;qE +ȍoź%Wxr-3s8,||~hy' ~KIm }y%ctIHmyP4;NF&G1\¬@ ikFK4CDH| V(UF$ʱM=`2' ؞j^ I Ps Ź9W ӏ@sGNG6'=i啽@--+q@t7t4}8͟ZyŁ>Fnw/ŝt$2pjƲoRג!b}gR⽗a@*(f<~"SOO/vΎE$ _Q| o68 +.?K-|id 5;meѼ*r"VťH8wڄ c};'i ^ԛ&(,q1Kpv d<%C'ƓBgm]:+BxY==deI\ q]dhoV8h%S^ޝ&)("UcW7}H?5L1`QЊ滷Fsntг\a܀^ 2˛3C]A$yv)R}V l=wm4`(Z;VVX"Ph*#`HF&R1|e'P+!1lY $lc;i'LB7.lպn%oO9L9&/H4w8TͩsNDi)HZ8䀐)0Bx]|ʓ EQ _K5l8(LfTڕZD'L_e!(CC:MqVͭ/5#cb}ɦQ`~yu_ 4s@mW)C/TBfilųеXwP!ϯ'!),omh;眧W@5.}b\ȜNZ ͔GO8&=vj>~:VܖiV"6+z#t/~ @(,S-GXV+RZt=r4@7 [{d"zhyϵ=*'A WF^/US Fa:jl#W?Qw 5A/J\+XO +(<_0/uU_xBk؅Q\"yBAmѨiqX.[bm>m8[{łH01~t0)}AUS-P̃gl\D`*У"Tqvv3E112 ;xڸ[,Ri"E&\/5-_K\P"L+yi ѱB-H($u%nMb@lc\SMsJn1f9ZJA{04?0 Rx%<ljX1_rv K*~CP/Ls7s,hZOyJ[F"5r*(AE|]Jgr 6SgE"Hd_U!ۭASv'8GjP N&|TCJXMKRP A=ŶʔG˿&H/HX`#+~3<gppBʊ,}ȹJ>!4ÎF`'\:>Wj|PG` ]5D@j"`7(VRknz1CSgH( Pa\.{:n*#ƨD=\ DzYK+2%y Q[A+i)p3K 8Eln-%ƍD϶;\89l -=ckB[[`La\[6ʲPMp*s[Fg(KR ,G0vB* /mh6v? da?"es(gC 2-*Y;&ĥ`'VL=XHH+tƪV1ԆtQ6nsѫ 7$rSS~xFU$Y,JG ǞۊȻ%6 ڴV@TP؇|+GMYΆbOϏע1yD֟ @R7K>Sy&byjCio1`.i #~~҄:<_ӽ#ۇso.K#2բҳt5co~ܕwDco+z/ӃGJ i _(O•5\Ah--@O1U(f$9[0-@/0X-9zT oVINk. cܘ'~exQ B+@>d^(ڢC QCCQDSU%UQ ϢJyGyF|"̱k*!fOx5PI1]&_R2]sZݍXJisM/DӆdHz3=6_ПQC#1T٨g,7 :Qk ^~$Y6|z.2Cp׭\RfUlQt~