From a272e7204d7004e0bb95e508496206652b0aa422 Mon Sep 17 00:00:00 2001 From: qiyuexia Date: Tue, 16 Apr 2019 18:13:13 +0800 Subject: [PATCH 1/2] mesh: use new event library --- components/esp_event/event_send.c | 7 - components/esp_wifi/include/esp_mesh.h | 34 +-- components/esp_wifi/lib_esp32 | 2 +- components/esp_wifi/src/mesh_event.c | 20 +- .../internal_communication/main/mesh_main.c | 255 ++++++++++-------- .../mesh/manual_networking/main/mesh_main.c | 164 ++++++----- 6 files changed, 237 insertions(+), 245 deletions(-) diff --git a/components/esp_event/event_send.c b/components/esp_event/event_send.c index 4472bb474..2c31ee0f6 100644 --- a/components/esp_event/event_send.c +++ b/components/esp_event/event_send.c @@ -20,7 +20,6 @@ esp_err_t esp_event_send_noop(system_event_t *event); extern esp_err_t esp_event_send_legacy(system_event_t *event) __attribute__((weak, alias("esp_event_send_noop"))); extern esp_err_t esp_event_send_to_default_loop(system_event_t *event) __attribute((weak, alias("esp_event_send_noop"))); -extern esp_err_t esp_event_mesh_hook(system_event_t* event) __attribute__((weak, alias("esp_event_send_noop"))); esp_err_t esp_event_send_noop(system_event_t *event) @@ -42,11 +41,5 @@ esp_err_t esp_event_send(system_event_t *event) return err; } - // send the event to mesh hook - err = esp_event_mesh_hook(event); - if (err != ESP_OK) { - return err; - } - return ESP_OK; } diff --git a/components/esp_wifi/include/esp_mesh.h b/components/esp_wifi/include/esp_mesh.h index e52e541ff..0666b182e 100644 --- a/components/esp_wifi/include/esp_mesh.h +++ b/components/esp_wifi/include/esp_mesh.h @@ -174,8 +174,6 @@ typedef enum { MESH_EVENT_ROOT_ADDRESS, /**< the root address is obtained. It is posted by mesh stack automatically. */ MESH_EVENT_ROOT_SWITCH_REQ, /**< root switch request sent from a new voted root candidate */ MESH_EVENT_ROOT_SWITCH_ACK, /**< root switch acknowledgment responds the above request sent from current root */ - MESH_EVENT_ROOT_GOT_IP, /**< the root obtains the IP address. It is posted by LwIP stack automatically */ - MESH_EVENT_ROOT_LOST_IP, /**< the root loses the IP address. It is posted by LwIP stack automatically */ MESH_EVENT_ROOT_ASKED_YIELD, /**< the root is asked yield by a more powerful existing root. If self organized is disabled and this device is specified to be a root by users, users should set a new parent for this device. if self organized is enabled, this device will find a new parent @@ -195,6 +193,9 @@ typedef enum { MESH_EVENT_MAX, } mesh_event_id_t; +/** @brief ESP-MESH event base declaration */ +ESP_EVENT_DECLARE_BASE(MESH_EVENT); + /** * @brief Device type */ @@ -427,21 +428,6 @@ typedef union { mesh_event_router_switch_t router_switch; /**< new router information */ } mesh_event_info_t; -/** - * @brief Mesh event - */ -typedef struct { - mesh_event_id_t id; /**< mesh event id */ - mesh_event_info_t info; /**< mesh event info */ -} mesh_event_t; - -/** - * @brief Mesh event callback handler prototype definition - * - * @param event mesh_event_t - */ -typedef void (*mesh_event_cb_t)(mesh_event_t event); - /** * @brief Mesh option */ @@ -492,7 +478,6 @@ typedef struct { uint8_t channel; /**< channel, the mesh network on */ bool allow_channel_switch; /**< if this value is set, when "fail" (mesh_attempts_t) times is reached, device will change to a full channel scan for a network that could join. The default value is false. */ - mesh_event_cb_t event_cb; /**< mesh event callback */ mesh_addr_t mesh_id; /**< mesh network identification */ mesh_router_t router; /**< router configuration */ mesh_ap_cfg_t mesh_ap; /**< mesh softAP configuration */ @@ -543,9 +528,6 @@ typedef struct { /* mesh IE crypto callback function */ extern const mesh_crypto_funcs_t g_wifi_default_mesh_crypto_funcs; -/* mesh event callback handler */ -extern mesh_event_cb_t g_mesh_event_cb; - #define MESH_INIT_CONFIG_DEFAULT() { \ .crypto_funcs = &g_wifi_default_mesh_crypto_funcs, \ } @@ -1303,16 +1285,6 @@ esp_err_t esp_mesh_set_root_healing_delay(int delay_ms); */ int esp_mesh_get_root_healing_delay(void); -/** - * @brief Set mesh event callback - * - * @param[in] event_cb mesh event call back - * - * @return - * - ESP_OK - */ -esp_err_t esp_mesh_set_event_cb(const mesh_event_cb_t event_cb); - /** * @brief Enable network Fixed Root Setting * - Enabling fixed root disables automatic election of the root node via voting. diff --git a/components/esp_wifi/lib_esp32 b/components/esp_wifi/lib_esp32 index b7bfeeccd..414f9b279 160000 --- a/components/esp_wifi/lib_esp32 +++ b/components/esp_wifi/lib_esp32 @@ -1 +1 @@ -Subproject commit b7bfeeccdb63fd20cf6b4abc52d9185934af4cb8 +Subproject commit 414f9b279e772196e8f6cf343d19f2882a2e8741 diff --git a/components/esp_wifi/src/mesh_event.c b/components/esp_wifi/src/mesh_event.c index f0b90ae42..52c6cf56f 100644 --- a/components/esp_wifi/src/mesh_event.c +++ b/components/esp_wifi/src/mesh_event.c @@ -14,24 +14,10 @@ #include #include "esp_event.h" -#include "esp_mesh.h" -/* mesh event callback handler */ -mesh_event_cb_t g_mesh_event_cb = NULL; +ESP_EVENT_DEFINE_BASE(MESH_EVENT); -esp_err_t esp_event_mesh_hook(system_event_t *event) +esp_err_t esp_mesh_send_event_internal(int32_t event_id, void* event_data, size_t event_data_size) { - if (event->event_id == SYSTEM_EVENT_STA_GOT_IP || event->event_id == SYSTEM_EVENT_STA_LOST_IP) { - if (g_mesh_event_cb) { - mesh_event_t mevent; - if (event->event_id == SYSTEM_EVENT_STA_GOT_IP) { - mevent.id = MESH_EVENT_ROOT_GOT_IP; - memcpy(&mevent.info.got_ip, &event->event_info.got_ip, sizeof(system_event_sta_got_ip_t)); - } else { - mevent.id = MESH_EVENT_ROOT_LOST_IP; - } - g_mesh_event_cb(mevent); - } - } - return ESP_OK; + return esp_event_post(MESH_EVENT, event_id, event_data, event_data_size, 0); } diff --git a/examples/mesh/internal_communication/main/mesh_main.c b/examples/mesh/internal_communication/main/mesh_main.c index e6ce6255c..5b1c7d7e7 100644 --- a/examples/mesh/internal_communication/main/mesh_main.c +++ b/examples/mesh/internal_communication/main/mesh_main.c @@ -9,7 +9,7 @@ #include #include "esp_wifi.h" #include "esp_system.h" -#include "esp_event_loop.h" +#include "esp_event.h" #include "esp_log.h" #include "esp_mesh.h" #include "esp_mesh_internal.h" @@ -19,7 +19,6 @@ /******************************************************* * Macros *******************************************************/ -//#define MESH_P2P_TOS_OFF /******************************************************* * Constants @@ -71,11 +70,9 @@ void esp_mesh_p2p_tx_main(void *arg) data.data = tx_buf; data.size = sizeof(tx_buf); data.proto = MESH_PROTO_BIN; -#ifdef MESH_P2P_TOS_OFF - data.tos = MESH_TOS_DEF; -#endif /* MESH_P2P_TOS_OFF */ - + data.tos = MESH_TOS_P2P; is_running = true; + while (is_running) { /* non-root do nothing but print */ if (!esp_mesh_is_root()) { @@ -138,8 +135,8 @@ void esp_mesh_p2p_rx_main(void *arg) int flag = 0; data.data = rx_buf; data.size = RX_SIZE; - is_running = true; + while (is_running) { data.size = RX_SIZE; err = esp_mesh_recv(&from, &data, portMAX_DELAY, &flag, NULL, 0); @@ -178,53 +175,66 @@ esp_err_t esp_mesh_comm_p2p_start(void) return ESP_OK; } -void mesh_event_handler(mesh_event_t event) +void mesh_event_handler(void *arg, esp_event_base_t event_base, + int32_t event_id, void *event_data) { mesh_addr_t id = {0,}; static uint8_t last_layer = 0; - ESP_LOGD(MESH_TAG, "esp_event_handler:%d", event.id); - switch (event.id) { - case MESH_EVENT_STARTED: + switch (event_id) { + case MESH_EVENT_STARTED: { esp_mesh_get_id(&id); - ESP_LOGI(MESH_TAG, "ID:"MACSTR"", MAC2STR(id.addr)); + ESP_LOGI(MESH_TAG, "ID:"MACSTR"", MAC2STR(id.addr)); is_mesh_connected = false; mesh_layer = esp_mesh_get_layer(); - break; - case MESH_EVENT_STOPPED: + } + break; + case MESH_EVENT_STOPPED: { ESP_LOGI(MESH_TAG, ""); is_mesh_connected = false; mesh_layer = esp_mesh_get_layer(); - break; - case MESH_EVENT_CHILD_CONNECTED: + } + break; + case MESH_EVENT_CHILD_CONNECTED: { + mesh_event_child_connected_t *child_connected = (mesh_event_child_connected_t *)event_data; ESP_LOGI(MESH_TAG, "aid:%d, "MACSTR"", - event.info.child_connected.aid, - MAC2STR(event.info.child_connected.mac)); - break; - case MESH_EVENT_CHILD_DISCONNECTED: + child_connected->aid, + MAC2STR(child_connected->mac)); + } + break; + case MESH_EVENT_CHILD_DISCONNECTED: { + mesh_event_child_disconnected_t *child_disconnected = (mesh_event_child_disconnected_t *)event_data; ESP_LOGI(MESH_TAG, "aid:%d, "MACSTR"", - event.info.child_disconnected.aid, - MAC2STR(event.info.child_disconnected.mac)); - break; - case MESH_EVENT_ROUTING_TABLE_ADD: + child_disconnected->aid, + MAC2STR(child_disconnected->mac)); + } + break; + case MESH_EVENT_ROUTING_TABLE_ADD: { + mesh_event_routing_table_change_t *routing_table = (mesh_event_routing_table_change_t *)event_data; ESP_LOGW(MESH_TAG, "add %d, new:%d", - event.info.routing_table.rt_size_change, - event.info.routing_table.rt_size_new); - break; - case MESH_EVENT_ROUTING_TABLE_REMOVE: + routing_table->rt_size_change, + routing_table->rt_size_new); + } + break; + case MESH_EVENT_ROUTING_TABLE_REMOVE: { + mesh_event_routing_table_change_t *routing_table = (mesh_event_routing_table_change_t *)event_data; ESP_LOGW(MESH_TAG, "remove %d, new:%d", - event.info.routing_table.rt_size_change, - event.info.routing_table.rt_size_new); - break; - case MESH_EVENT_NO_PARENT_FOUND: + routing_table->rt_size_change, + routing_table->rt_size_new); + } + break; + case MESH_EVENT_NO_PARENT_FOUND: { + mesh_event_no_parent_found_t *no_parent = (mesh_event_no_parent_found_t *)event_data; ESP_LOGI(MESH_TAG, "scan times:%d", - event.info.no_parent.scan_times); - /* TODO handler for the failure */ - break; - case MESH_EVENT_PARENT_CONNECTED: + no_parent->scan_times); + } + /* TODO handler for the failure */ + break; + case MESH_EVENT_PARENT_CONNECTED: { + mesh_event_connected_t *connected = (mesh_event_connected_t *)event_data; esp_mesh_get_id(&id); - mesh_layer = event.info.connected.self_layer; - memcpy(&mesh_parent_addr.addr, event.info.connected.connected.bssid, 6); + mesh_layer = connected->self_layer; + memcpy(&mesh_parent_addr.addr, connected->connected.bssid, 6); ESP_LOGI(MESH_TAG, "layer:%d-->%d, parent:"MACSTR"%s, ID:"MACSTR"", last_layer, mesh_layer, MAC2STR(mesh_parent_addr.addr), @@ -237,104 +247,129 @@ void mesh_event_handler(mesh_event_t event) tcpip_adapter_dhcpc_start(TCPIP_ADAPTER_IF_STA); } esp_mesh_comm_p2p_start(); - break; - case MESH_EVENT_PARENT_DISCONNECTED: + } + break; + case MESH_EVENT_PARENT_DISCONNECTED: { + mesh_event_disconnected_t *disconnected = (mesh_event_disconnected_t *)event_data; ESP_LOGI(MESH_TAG, "reason:%d", - event.info.disconnected.reason); + disconnected->reason); is_mesh_connected = false; mesh_disconnected_indicator(); mesh_layer = esp_mesh_get_layer(); - break; - case MESH_EVENT_LAYER_CHANGE: - mesh_layer = event.info.layer_change.new_layer; + } + break; + case MESH_EVENT_LAYER_CHANGE: { + mesh_event_layer_change_t *layer_change = (mesh_event_layer_change_t *)event_data; + mesh_layer = layer_change->new_layer; ESP_LOGI(MESH_TAG, "layer:%d-->%d%s", last_layer, mesh_layer, esp_mesh_is_root() ? "" : (mesh_layer == 2) ? "" : ""); last_layer = mesh_layer; mesh_connected_indicator(mesh_layer); - break; - case MESH_EVENT_ROOT_ADDRESS: + } + break; + case MESH_EVENT_ROOT_ADDRESS: { + mesh_event_root_address_t *root_addr = (mesh_event_root_address_t *)event_data; ESP_LOGI(MESH_TAG, "root address:"MACSTR"", - MAC2STR(event.info.root_addr.addr)); - break; - case MESH_EVENT_ROOT_GOT_IP: - /* root starts to connect to server */ - ESP_LOGI(MESH_TAG, - "sta ip: " IPSTR ", mask: " IPSTR ", gw: " IPSTR, - IP2STR(&event.info.got_ip.ip_info.ip), - IP2STR(&event.info.got_ip.ip_info.netmask), - IP2STR(&event.info.got_ip.ip_info.gw)); - break; - case MESH_EVENT_ROOT_LOST_IP: - ESP_LOGI(MESH_TAG, ""); - break; - case MESH_EVENT_VOTE_STARTED: + MAC2STR(root_addr->addr)); + } + break; + case MESH_EVENT_VOTE_STARTED: { + mesh_event_vote_started_t *vote_started = (mesh_event_vote_started_t *)event_data; ESP_LOGI(MESH_TAG, "attempts:%d, reason:%d, rc_addr:"MACSTR"", - event.info.vote_started.attempts, - event.info.vote_started.reason, - MAC2STR(event.info.vote_started.rc_addr.addr)); - break; - case MESH_EVENT_VOTE_STOPPED: + vote_started->attempts, + vote_started->reason, + MAC2STR(vote_started->rc_addr.addr)); + } + break; + case MESH_EVENT_VOTE_STOPPED: { ESP_LOGI(MESH_TAG, ""); break; - case MESH_EVENT_ROOT_SWITCH_REQ: + } + case MESH_EVENT_ROOT_SWITCH_REQ: { + mesh_event_root_switch_req_t *switch_req = (mesh_event_root_switch_req_t *)event_data; ESP_LOGI(MESH_TAG, "reason:%d, rc_addr:"MACSTR"", - event.info.switch_req.reason, - MAC2STR( event.info.switch_req.rc_addr.addr)); - break; - case MESH_EVENT_ROOT_SWITCH_ACK: + switch_req->reason, + MAC2STR( switch_req->rc_addr.addr)); + } + break; + case MESH_EVENT_ROOT_SWITCH_ACK: { /* new root */ mesh_layer = esp_mesh_get_layer(); esp_mesh_get_parent_bssid(&mesh_parent_addr); ESP_LOGI(MESH_TAG, "layer:%d, parent:"MACSTR"", mesh_layer, MAC2STR(mesh_parent_addr.addr)); - break; - case MESH_EVENT_TODS_STATE: - ESP_LOGI(MESH_TAG, "state:%d", - event.info.toDS_state); - break; - case MESH_EVENT_ROOT_FIXED: + } + break; + case MESH_EVENT_TODS_STATE: { + mesh_event_toDS_state_t *toDs_state = (mesh_event_toDS_state_t *)event_data; + ESP_LOGI(MESH_TAG, "state:%d", *toDs_state); + } + break; + case MESH_EVENT_ROOT_FIXED: { + mesh_event_root_fixed_t *root_fixed = (mesh_event_root_fixed_t *)event_data; ESP_LOGI(MESH_TAG, "%s", - event.info.root_fixed.is_fixed ? "fixed" : "not fixed"); - break; - case MESH_EVENT_ROOT_ASKED_YIELD: + root_fixed->is_fixed ? "fixed" : "not fixed"); + } + break; + case MESH_EVENT_ROOT_ASKED_YIELD: { + mesh_event_root_conflict_t *root_conflict = (mesh_event_root_conflict_t *)event_data; ESP_LOGI(MESH_TAG, ""MACSTR", rssi:%d, capacity:%d", - MAC2STR(event.info.root_conflict.addr), - event.info.root_conflict.rssi, - event.info.root_conflict.capacity); - break; - case MESH_EVENT_CHANNEL_SWITCH: - ESP_LOGI(MESH_TAG, "new channel:%d", event.info.channel_switch.channel); - break; - case MESH_EVENT_SCAN_DONE: + MAC2STR(root_conflict->addr), + root_conflict->rssi, + root_conflict->capacity); + } + break; + case MESH_EVENT_CHANNEL_SWITCH: { + mesh_event_channel_switch_t *channel_switch = (mesh_event_channel_switch_t *)event_data; + ESP_LOGI(MESH_TAG, "new channel:%d", channel_switch->channel); + } + break; + case MESH_EVENT_SCAN_DONE: { + mesh_event_scan_done_t *scan_done = (mesh_event_scan_done_t *)event_data; ESP_LOGI(MESH_TAG, "number:%d", - event.info.scan_done.number); - break; - case MESH_EVENT_NETWORK_STATE: + scan_done->number); + } + break; + case MESH_EVENT_NETWORK_STATE: { + mesh_event_network_state_t *network_state = (mesh_event_network_state_t *)event_data; ESP_LOGI(MESH_TAG, "is_rootless:%d", - event.info.network_state.is_rootless); - break; - case MESH_EVENT_STOP_RECONNECTION: + network_state->is_rootless); + } + break; + case MESH_EVENT_STOP_RECONNECTION: { ESP_LOGI(MESH_TAG, ""); - break; - case MESH_EVENT_FIND_NETWORK: + } + break; + case MESH_EVENT_FIND_NETWORK: { + mesh_event_find_network_t *find_network = (mesh_event_find_network_t *)event_data; ESP_LOGI(MESH_TAG, "new channel:%d, router BSSID:"MACSTR"", - event.info.find_network.channel, MAC2STR(event.info.find_network.router_bssid)); - break; - case MESH_EVENT_ROUTER_SWITCH: + find_network->channel, MAC2STR(find_network->router_bssid)); + } + break; + case MESH_EVENT_ROUTER_SWITCH: { + mesh_event_router_switch_t *router_switch = (mesh_event_router_switch_t *)event_data; ESP_LOGI(MESH_TAG, "new router:%s, channel:%d, "MACSTR"", - event.info.router_switch.ssid, event.info.router_switch.channel, MAC2STR(event.info.router_switch.bssid)); - break; + router_switch->ssid, router_switch->channel, MAC2STR(router_switch->bssid)); + } + break; default: - ESP_LOGI(MESH_TAG, "unknown id:%d", event.id); + ESP_LOGI(MESH_TAG, "unknown id:%d", event_id); break; } } +void ip_event_handler(void *arg, esp_event_base_t event_base, + int32_t event_id, void *event_data) +{ + ip_event_got_ip_t *event = (ip_event_got_ip_t *) event_data; + ESP_LOGI(MESH_TAG, "IP:%s", ip4addr_ntoa(&event->ip_info.ip)); +} + void app_main(void) { ESP_ERROR_CHECK(mesh_light_init()); @@ -347,33 +382,23 @@ void app_main(void) * */ ESP_ERROR_CHECK(tcpip_adapter_dhcps_stop(TCPIP_ADAPTER_IF_AP)); ESP_ERROR_CHECK(tcpip_adapter_dhcpc_stop(TCPIP_ADAPTER_IF_STA)); -#if 0 - /* static ip settings */ - tcpip_adapter_ip_info_t sta_ip; - sta_ip.ip.addr = ipaddr_addr("192.168.1.102"); - sta_ip.gw.addr = ipaddr_addr("192.168.1.1"); - sta_ip.netmask.addr = ipaddr_addr("255.255.255.0"); - tcpip_adapter_set_ip_info(WIFI_IF_STA, &sta_ip); -#endif + /* event initialization */ + ESP_ERROR_CHECK(esp_event_loop_create_default()); /* wifi initialization */ - ESP_ERROR_CHECK(esp_event_loop_init(NULL, NULL)); wifi_init_config_t config = WIFI_INIT_CONFIG_DEFAULT(); ESP_ERROR_CHECK(esp_wifi_init(&config)); + ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &ip_event_handler, NULL)); ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_FLASH)); ESP_ERROR_CHECK(esp_wifi_start()); /* mesh initialization */ ESP_ERROR_CHECK(esp_mesh_init()); + ESP_ERROR_CHECK(esp_event_handler_register(MESH_EVENT, ESP_EVENT_ANY_ID, &mesh_event_handler, NULL)); ESP_ERROR_CHECK(esp_mesh_set_max_layer(CONFIG_MESH_MAX_LAYER)); ESP_ERROR_CHECK(esp_mesh_set_vote_percentage(1)); ESP_ERROR_CHECK(esp_mesh_set_ap_assoc_expire(10)); -#ifdef MESH_FIX_ROOT - ESP_ERROR_CHECK(esp_mesh_fix_root(1)); -#endif mesh_cfg_t cfg = MESH_INIT_CONFIG_DEFAULT(); /* mesh ID */ memcpy((uint8_t *) &cfg.mesh_id, MESH_ID, 6); - /* mesh event callback */ - cfg.event_cb = &mesh_event_handler; /* router */ cfg.channel = CONFIG_MESH_CHANNEL; cfg.router.ssid_len = strlen(CONFIG_MESH_ROUTER_SSID); diff --git a/examples/mesh/manual_networking/main/mesh_main.c b/examples/mesh/manual_networking/main/mesh_main.c index 56df30ab6..57629abe8 100644 --- a/examples/mesh/manual_networking/main/mesh_main.c +++ b/examples/mesh/manual_networking/main/mesh_main.c @@ -9,7 +9,7 @@ #include #include "esp_wifi.h" #include "esp_system.h" -#include "esp_event_loop.h" +#include "esp_event.h" #include "esp_log.h" #include "esp_mesh.h" #include "esp_mesh_internal.h" @@ -40,7 +40,6 @@ static int mesh_layer = -1; /******************************************************* * Function Declarations *******************************************************/ -void mesh_event_handler(mesh_event_t event); void mesh_scan_done_handler(int num); /******************************************************* @@ -156,58 +155,70 @@ void mesh_scan_done_handler(int num) } } -void mesh_event_handler(mesh_event_t event) +void mesh_event_handler(void *arg, esp_event_base_t event_base, + int32_t event_id, void *event_data) { mesh_addr_t id = {0,}; static uint8_t last_layer = 0; - ESP_LOGD(MESH_TAG, "esp_event_handler:%d", event.id); + wifi_scan_config_t scan_config = { 0 }; - switch (event.id) { - case MESH_EVENT_STARTED: + switch (event_id) { + case MESH_EVENT_STARTED: { esp_mesh_get_id(&id); ESP_LOGI(MESH_TAG, "ID:"MACSTR"", MAC2STR(id.addr)); mesh_layer = esp_mesh_get_layer(); ESP_ERROR_CHECK(esp_mesh_set_self_organized(0, 0)); esp_wifi_scan_stop(); - wifi_scan_config_t scan_config = { 0 }; /* mesh softAP is hidden */ scan_config.show_hidden = 1; scan_config.scan_type = WIFI_SCAN_TYPE_PASSIVE; ESP_ERROR_CHECK(esp_wifi_scan_start(&scan_config, 0)); - break; - case MESH_EVENT_STOPPED: + } + break; + case MESH_EVENT_STOPPED: { ESP_LOGI(MESH_TAG, ""); mesh_layer = esp_mesh_get_layer(); - break; - case MESH_EVENT_CHILD_CONNECTED: + } + break; + case MESH_EVENT_CHILD_CONNECTED: { + mesh_event_child_connected_t *child_connected = (mesh_event_child_connected_t *)event_data; ESP_LOGI(MESH_TAG, "aid:%d, "MACSTR"", - event.info.child_connected.aid, - MAC2STR(event.info.child_connected.mac)); - break; - case MESH_EVENT_CHILD_DISCONNECTED: + child_connected->aid, + MAC2STR(child_connected->mac)); + } + break; + case MESH_EVENT_CHILD_DISCONNECTED: { + mesh_event_child_disconnected_t *child_disconnected = (mesh_event_child_disconnected_t *)event_data; ESP_LOGI(MESH_TAG, "aid:%d, "MACSTR"", - event.info.child_disconnected.aid, - MAC2STR(event.info.child_disconnected.mac)); - break; - case MESH_EVENT_ROUTING_TABLE_ADD: + child_disconnected->aid, + MAC2STR(child_disconnected->mac)); + } + case MESH_EVENT_ROUTING_TABLE_ADD: { + mesh_event_routing_table_change_t *routing_table = (mesh_event_routing_table_change_t *)event_data; ESP_LOGW(MESH_TAG, "add %d, new:%d", - event.info.routing_table.rt_size_change, - event.info.routing_table.rt_size_new); - break; - case MESH_EVENT_ROUTING_TABLE_REMOVE: + routing_table->rt_size_change, + routing_table->rt_size_new); + } + break; + case MESH_EVENT_ROUTING_TABLE_REMOVE: { + mesh_event_routing_table_change_t *routing_table = (mesh_event_routing_table_change_t *)event_data; ESP_LOGW(MESH_TAG, "remove %d, new:%d", - event.info.routing_table.rt_size_change, - event.info.routing_table.rt_size_new); - break; - case MESH_EVENT_NO_PARENT_FOUND: + routing_table->rt_size_change, + routing_table->rt_size_new); + } + break; + case MESH_EVENT_NO_PARENT_FOUND: { + mesh_event_no_parent_found_t *no_parent = (mesh_event_no_parent_found_t *)event_data; ESP_LOGI(MESH_TAG, "scan times:%d", - event.info.no_parent.scan_times); - /* TODO handler for the failure */ - break; - case MESH_EVENT_PARENT_CONNECTED: + no_parent->scan_times); + } + /* TODO handler for the failure */ + break; + case MESH_EVENT_PARENT_CONNECTED: { + mesh_event_connected_t *connected = (mesh_event_connected_t *)event_data; esp_mesh_get_id(&id); - mesh_layer = event.info.connected.self_layer; - memcpy(&mesh_parent_addr.addr, event.info.connected.connected.bssid, 6); + mesh_layer = connected->self_layer; + memcpy(&mesh_parent_addr.addr, connected->connected.bssid, 6); ESP_LOGI(MESH_TAG, "layer:%d-->%d, parent:"MACSTR"%s, ID:"MACSTR"", last_layer, mesh_layer, MAC2STR(mesh_parent_addr.addr), @@ -218,59 +229,71 @@ void mesh_event_handler(mesh_event_t event) if (esp_mesh_is_root()) { tcpip_adapter_dhcpc_start(TCPIP_ADAPTER_IF_STA); } - break; - case MESH_EVENT_PARENT_DISCONNECTED: + } + break; + case MESH_EVENT_PARENT_DISCONNECTED: { + mesh_event_disconnected_t *disconnected = (mesh_event_disconnected_t *)event_data; ESP_LOGI(MESH_TAG, "reason:%d", - event.info.disconnected.reason); + disconnected->reason); mesh_disconnected_indicator(); mesh_layer = esp_mesh_get_layer(); - if (event.info.disconnected.reason == WIFI_REASON_ASSOC_TOOMANY) { + if (disconnected->reason == WIFI_REASON_ASSOC_TOOMANY) { esp_wifi_scan_stop(); scan_config.show_hidden = 1; scan_config.scan_type = WIFI_SCAN_TYPE_PASSIVE; ESP_ERROR_CHECK(esp_wifi_scan_start(&scan_config, 0)); } - break; - case MESH_EVENT_LAYER_CHANGE: - mesh_layer = event.info.layer_change.new_layer; + } + break; + case MESH_EVENT_LAYER_CHANGE: { + mesh_event_layer_change_t *layer_change = (mesh_event_layer_change_t *)event_data; + mesh_layer = layer_change->new_layer; ESP_LOGI(MESH_TAG, "layer:%d-->%d%s", last_layer, mesh_layer, esp_mesh_is_root() ? "" : (mesh_layer == 2) ? "" : ""); last_layer = mesh_layer; mesh_connected_indicator(mesh_layer); - break; - case MESH_EVENT_ROOT_ADDRESS: + } + break; + case MESH_EVENT_ROOT_ADDRESS: { + mesh_event_root_address_t *root_addr = (mesh_event_root_address_t *)event_data; ESP_LOGI(MESH_TAG, "root address:"MACSTR"", - MAC2STR(event.info.root_addr.addr)); - break; - case MESH_EVENT_ROOT_GOT_IP: - /* root starts to connect to server */ - ESP_LOGI(MESH_TAG, - "sta ip: " IPSTR ", mask: " IPSTR ", gw: " IPSTR, - IP2STR(&event.info.got_ip.ip_info.ip), - IP2STR(&event.info.got_ip.ip_info.netmask), - IP2STR(&event.info.got_ip.ip_info.gw)); - break; - case MESH_EVENT_ROOT_LOST_IP: - ESP_LOGI(MESH_TAG, ""); - break; - case MESH_EVENT_ROOT_FIXED: + MAC2STR(root_addr->addr)); + } + break; + case MESH_EVENT_TODS_STATE: { + mesh_event_toDS_state_t *toDs_state = (mesh_event_toDS_state_t *)event_data; + ESP_LOGI(MESH_TAG, "state:%d", *toDs_state); + } + break; + case MESH_EVENT_ROOT_FIXED: { + mesh_event_root_fixed_t *root_fixed = (mesh_event_root_fixed_t *)event_data; ESP_LOGI(MESH_TAG, "%s", - event.info.root_fixed.is_fixed ? "fixed" : "not fixed"); - break; - case MESH_EVENT_SCAN_DONE: + root_fixed->is_fixed ? "fixed" : "not fixed"); + } + break; + case MESH_EVENT_SCAN_DONE: { + mesh_event_scan_done_t *scan_done = (mesh_event_scan_done_t *)event_data; ESP_LOGI(MESH_TAG, "number:%d", - event.info.scan_done.number); - mesh_scan_done_handler(event.info.scan_done.number); - break; + scan_done->number); + mesh_scan_done_handler(scan_done->number); + } + break; default: - ESP_LOGI(MESH_TAG, "unknown id:%d", event.id); + ESP_LOGI(MESH_TAG, "unknown id:%d", event_id); break; } } +void ip_event_handler(void *arg, esp_event_base_t event_base, + int32_t event_id, void *event_data) +{ + ip_event_got_ip_t *event = (ip_event_got_ip_t *) event_data; + ESP_LOGI(MESH_TAG, "IP:%s", ip4addr_ntoa(&event->ip_info.ip)); +} + void app_main(void) { ESP_ERROR_CHECK(mesh_light_init()); @@ -283,28 +306,21 @@ void app_main(void) * */ ESP_ERROR_CHECK(tcpip_adapter_dhcps_stop(TCPIP_ADAPTER_IF_AP)); ESP_ERROR_CHECK(tcpip_adapter_dhcpc_stop(TCPIP_ADAPTER_IF_STA)); -#if 0 - /* static ip settings */ - tcpip_adapter_ip_info_t sta_ip; - sta_ip.ip.addr = ipaddr_addr("192.168.1.102"); - sta_ip.gw.addr = ipaddr_addr("192.168.1.1"); - sta_ip.netmask.addr = ipaddr_addr("255.255.255.0"); - tcpip_adapter_set_ip_info(WIFI_IF_STA, &sta_ip); -#endif + /* event initialization */ + ESP_ERROR_CHECK(esp_event_loop_create_default()); /* wifi initialization */ - ESP_ERROR_CHECK(esp_event_loop_init(NULL, NULL)); wifi_init_config_t config = WIFI_INIT_CONFIG_DEFAULT(); ESP_ERROR_CHECK(esp_wifi_init(&config)); + ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &ip_event_handler, NULL)); ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_FLASH)); ESP_ERROR_CHECK(esp_wifi_start()); /* mesh initialization */ ESP_ERROR_CHECK(esp_mesh_init()); + ESP_ERROR_CHECK(esp_event_handler_register(MESH_EVENT, ESP_EVENT_ANY_ID, &mesh_event_handler, NULL)); /* mesh enable IE crypto */ mesh_cfg_t cfg = MESH_INIT_CONFIG_DEFAULT(); /* mesh ID */ memcpy((uint8_t *) &cfg.mesh_id, MESH_ID, 6); - /* mesh event callback */ - cfg.event_cb = &mesh_event_handler; /* router */ cfg.channel = CONFIG_MESH_CHANNEL; cfg.router.ssid_len = strlen(CONFIG_MESH_ROUTER_SSID); From 068a2dcb3248d99497a9ba7a1eecf26463bc0015 Mon Sep 17 00:00:00 2001 From: qiyuexia Date: Thu, 18 Apr 2019 22:38:43 +0800 Subject: [PATCH 2/2] mesh: update mesh events demonstration --- docs/_static/mesh-events-delivery.png | Bin 16574 -> 62433 bytes docs/en/api-reference/network/esp_mesh.rst | 20 ++++++++---------- .../mesh/manual_networking/main/mesh_main.c | 1 + 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/docs/_static/mesh-events-delivery.png b/docs/_static/mesh-events-delivery.png index 40341bb1dd687eb0775a371a0cde9bf29cc4b3ef..ceedadf829f30ab0f66ade7a30c71d3d4cf7a352 100644 GIT binary patch literal 62433 zcmd43hd6qWtg*Aq^oO9^MssIcYUKJcKeH-Z^pPdH53! zyCNd^4d3+9LutIzvwz;#<;KIGTym7talykQ{(koFISd;yEgl{UPhMI=-SgewaUDn6 zVL$Xg`}cwNe~;>4BdQ#jZpD(z*wD(~%S!5GiV>a0L#xz2|7BpUm`NM0WJu!-`ShOca|b=)IZ}O3^X0?8f^~j>@gwIS0FE8&{K&25rw>nX?z`KVvQEwGl zv@|uf6EIjDU&_kFgjI5M+pKbKSxt>@R^Phk*N0x!M~OZ2H)G}4DQ340qN1YoIr-tx zpFX|8nkOk*lnqzuuf|hfLP+%b1!WM!Z(B{vJIYE*U7ekFHE(5AzZ4a9+gFa-@g*s; zkP|Y_j8v+izt3)@@H;3gD()Yj7}UD&?Cgk4sN5z+z7zGUsjjZBt24;z`^=uwGk-1o zg*4MuBw{owDQD4+Pl%WI%jeI}O@xlqZ^g=`nSPA#vbYDwjqh9DQOny_t$|C|DmKiv zuBoV~sHr)eP{~z6SLqk^h#vhdA2N)WW2OqtKp&!uJ=05v|9<=S?eE`DiYx^M1+&i8 zCE9k5j-R#JN9-!{^I55u#7Vb51^#zIF3-(}#ZlZmJkE#P*5$e!q)0wdZ}>4!edPCV z&&@yWbv}DEQLO|k0bX7Q%_L&)-o1O(Vk!`AS*8<_$uPNo6(PYC`(v;`>rr-`ZsF?R zzwo5)-Mh!=yWX@h+a@F^sK_#q(8Eejn4z-Jfnlq3nA9v76xt5>`@5t~Xo`S`kB{%} z-I9um-PAST+=7B-xXiZMO8aqm!r5wzUHp?@D3vp`gp+A$jIpF z)2BEAY$<0Vc76+<^E(lr3KjI%qt#lH5ig#kcS%VSs$c5r{MIJw@Pnr}lowG*HFgU4 zNS63J6p_dvGoB(928M%C?QDEy--PaOQSx_Fuidy+cELtF>#Jo?km^^3?L) z^vqL--butFgOG^xqUjAz9Mnn!QyEcg%i0O%Ite+}06ojhMw>OXbpwF48aEqJUF@t1= zH$&ye{8p1U$7dPX3Z8X_2#L)D-#qp6Tur6y&Ddt9LzAG1eDc~>6b;xC!9ENiE;AX~L{HF|s(YrnaZBwp$DTq5s@pRYWbZ*C6 z?09=1>tT$hmX_AYXLcce{(0wWxIy}y#d&$dWtNX|een6=(v3aL@-_OL@$Jm9a*eTa z%+B-Osb)Nv627dAlo#aWSj_5{!VQoBK!*yq>HZJzP@AgTQ`uUmOTu$*{*^j zLPE=12b%|9;RyNpBefoDH|IEh2lmWg$bG_@n5|~5p@A860zo_1O7MG>!JR=W|k*KP|2F#zP``S zlcboZ{>{nP*_nqS#=!FZEqJGM=#4G1+!Ctqo6pEGm z%#NLQ9zFZy$&+i>t})Ad3o|5`Kgs)9^0dvy#zs4#&TaYE_V$<2 z6?~7GtB9oJrRUa@mlAjj(7x!d_^j1c zI(=y|y((Pu<;(Zdzy1Aj`kZ?QzF{Pc6I5v;FMLHAk%;b8p)ix*@YdV0a;#7Epv1vR zmS}gvb0)$kml^u?tH_{sZo`u)R*o+Px8Z48;_2%8rM9-Vq~z+CjRW7)9i!91-rnc4 z`yCw$C{k#HA(AFuUe$$#&rVN{1yeaGA_M(PhuMQrP&ZkSGrvoolFN7rr)6Yh$T7z$ z=Qe$h)#qfSr4@3V68G~vc4ymQi0+xMbzeyyT_Fx@HfElB#ZK|a)^<5VDvX=xa){*V z@#HB7M!`$ikQD>_Z^QGeHajs1NlMpTqM>(QUfw0&99ZAutMCDXgM-@anw*JE(Wuvc zO~%}I{I3*Q$|@@O9z0ld6@->qqW#BF0BXN|Wo3E!%4j9Y*DrAIs`bOA&o_UD%BRTk zlrLq{|LEC&?Z#8Y@#BS@S@}3cs7BJJU9}Z+8{bV!6#3%2bDqX(=cym^;1h~8RM8Pf zUt@`vXT`v-N$IlZN&0D1uFeX}J7!PJ2YJ}>%}GC7El-^_)C3CBz#?xDiX96l92gjA zbb2@h`w1Eca~zy$O^qNg?{{t@2~vv4TcpV6)?sqYk^{Uls)dDxOtEN+$m8A0hScDlCv9z?5 zk_uMHKL6~W|7jazz^hCvEiFoHX}g)Tv-75<*b#MDGk^h}q)#enKn~DiU^OO~?|6$u zWcoLpLhH4&u_23WX);z}#blzB+s!x)zgAUMy`0^z_dAk{)7RC7TV`z9w&I?mm{U~5 z8Pj%8Soq&Y8zU_d{%ZnZj6zpWPr9HRVKaBR?v>2EmF`M?PUzyrLq2Pp4aVGXqWnd- zuoh*+VY9hn$9IBIuxeT2Gth)H?aM>Od)wQ8$7{9NDZ(T(p5!WDLY(JJOp#;$5+=7~>qGG%eZ3 zB^s?RFWcJM`i#s5zo#Uq^4#&Rn<{!ztzYkq>-hd%`pJ`l+O_)8{{C+`XX;RDdivwV z#{q)e+>NDw(@z%D>ksBqBr|&Fx8OQ=x3}qp+!YHoxi~rNPfw1j^;cnEP99C{u?lI6 zp6t)Y#>T=GcuaWBPvgszzA!8f*csGvsUBNcSeR}OJ6(u5`Iw)dPnKW@h~mnXD_z~) z6Sdihza@(+EB9%ly1KeFG&BH0r3aiGFrIEOY8`f(@c`x}AYu4aP#~qcy@|tW73o9U zo;=yD^zrs?{06YHnnZNp*v2NJXP!~e^8D;9DtMPJP57*dtmCJN`guD$mlhSR(oXKnK72?JggWr`_w?LnJeg+H z)YME!OqAd)A3vCLt_}|mZ#YP4sP<6RDbe2cuA?1N8LM`gKipZ~@cc(0w%_!Ks}7-j znC-3QlY@Bx^9y}h1jKZW-0Ue`MTLca zo9(w@-Tusb@-T+sVv`;>Ri{N+TMXmc%1XIzA+Hh?IC{Y_X#7YLiUiNPiGzcKq@*M> z9!?D5-i~|T8^S`_n{h7@h#TZcX0=O{!PYw&VvPwpHR=(qGu8TOtST8Q0!eanE)R-_ z{H7&aryX5AJZPg@mD*iyAiY)oYw>~NurIX}F4k)1ucHB^YzqOQo-&QGGjYK4jWRvOR zpbZpD)JwHI-XukeNb`A1D1F1j!wNjlqmV)Haj;f23jk5_^YS8so8Y-<8Tno3UH7g7 z)XywGva*|#!$K~Tn2;dM5ChPnxY)tQ<~-#jLgLTX0g2eZ-WB(r&Q5jH3qWzL&U5$DT>i84_L2>>3yS)^3~qnYX?WTG=vthlKf=Z<_u9V$mX zv@hUu6E$-ynvYL)y9$o4j@Lqe0jQ00WhRpcWb9lGP`2_wV>cp?m*!CkJ;HR zvl~_8s|uk`#Y40)XGCFSWQ2x>1^|F{vdP1HesDF7!xA52e z*2-rQjY7>w%yF=!OG@qriud;Q1)987XFZRAqvZ=Q18Xd#i6^*NJsQk5-nwgie9z(qnN&+RS; z&k97tr8|`XQ3opI-w+UXZf|GjdSnam{zytLVq#)lc8WZ8n-Xn7K|yaHpC;T1@e4^4 zK-PK=b#7~h^bM0ntQfwF+|2TVsofzV7aJxY$CdnE9E82&Ge4m(AlINnknGDPyVR8r5pLydsFy*)ndUgg&e1|&lK-8CZo zs|ZzA3{xz!nLDNpP-4YK=yCiFQY73JP)ms2-0(08=6os8--eb`Q&M2Nil)b8euNdp z9nezBp5CLCr#`jK?>Dbqs2L?&W;?`Ltxp_8t@6_1DJ@ZR{pa(qhV53@*5)@nITP9F zh@qw^vfP7SA|}Qd({^-p1jWnaZ5uQvcxnZM6Gw~Bt>dE}Lep}XtoPgft3%X`3<8d0 zQ%=*&otz`F8kQPZBRFNr?E#1ei{pu&rJaA%_`1ftSmItVUF|%VQrsz2$gn>TL}aMPvwHhGt=nqyN-cH5T?j+Xk$% zs7OZ?vWD^fi_1SIMt}WciEoEh2{lw98?=R$%E<&Q4s-Dls!O*-8&T`JdhC*A?d{~W zaa-&_UNoIQr3-cC%dp)qoAN|XgBn0hl%awcnpmTb;Z->lDfEWg@w1z6`Wz%DoU@OQ z&wZLJRfdUJoMu5ePz=zSiiaHNT;ODo2zZz=o=-?*RLh3#%5~-Ah(aVI|9g3?P0-WO zoOj`YRuW^|4z=5(=iLLBjhU8fx0U~nlw*y#)wQ&sya1aN6H8ZQS!-Y;YG$pzTQy(@8rZEqi~CyaCvFTDjDDF^`MPgww1g9U0Qm&N436gA;p_t!$0+SlJpG>=ouNs zyf*(76xVw%^xmLr18pUy?ZPFJdPm{+>`eo@pFgOeYieqW4C@3RJjm;_`ZY8p;milr zZQ2oPUrZYtMP#g;G%H54pXB*<@2sq>Y&Bq^A~UP88yilQqac&*{v96Z?KLjfh1Cbx ze$b}8ZC1z7u)fFn-QH6Z6IlCjD*{$*jYb;+#Llz|VL&R-fnRB?5=74e>jmIlHvt@j zmMFBt9Yll&JUmc=*_x(VXrg2bHK8+uD3jG!vJ5if7Lf6*04 zE=xQtui1@PQBgM~&(xOH#Ca}1sXUG&X|(c3#a8aa2wJ3e^| z`yXtYt4L%6?IsI{Yr8^3^!(FzV+8{B=}-E;kC@4_`n2`*QWRMv3@s26nSBc&`z|f9 zYLfyejBH^_?*a8HFF$|NQy2&YO%%{VDBSkm-h!k^fPgE?2)jEskl*IFfP*k0)r^c9 z46Ny2-=%&dTgT6FuD8G66kr~Uf3^O^@NnM1BESXlUyE?nQ5iCNdZX}c2pD}Gj}P5G z-^|u#2U*;2ci3{#RkvU;Up+rnDphIiEl7ZJ%+RwIT{*e9Kqm;aNfAwVu(wx+VrW+C zD!Ae*c1H0x<#! z7t|_tir^4S<4&PHB3^!eunDk&V8Bcfd7WC{mYbUk%WrRWeDG)gkLiu6iAxKQLT3Nf`3M1e zFSq3nF22ZNak_K1x;?~g~K$5kp!4m+e-gOMyo%34_j!~`9f9?`t&3K5zp4!>HLLnnE zzngCKWj$TlO|LkRk>8Z(<~72T%Q7H zl|5)9k$D*j)zWzM%qW4*i@82O-CRczd8ze5Z(>w4z)QkZ<=od;SffqGAJsWtppY_s zfQX61%I?PHp^%cf1H&u3$;mX_K2N+7lyjF?SMhP|=eV2k+{>)Wb$dbOuLt9R6_X!_ z(8(R37xN!8<^~uEdT>O^!Wq{Cad&BXd2}>DOIImR-QC^Ye_m+vQivqL@EkB(p7GLv zE}LIaz}6QzZhzVr%If7;{Wf`<<{@?o>M zUYr~qEl@#&00;69Yx|pXuuDfq4!a!u2bOmL<*T!X%vQ-UtD(t3@vInK!Cc-GJ1P@9 z`@rJj$^C8ECZg$+P}{v~p@crH@Qwrf!=W@W}$VTJlX1h#I>-s z?5wOl78g?zhM-vasEFS0$Msnu=!0fH2s1c%dBIi=$`^&IZ^t(@I2bqtCg1ot_(p`^ z4TJ(dor(SD$2mo!C)ZB*0#5e|w75>!PLKJ^uei}wJ*4wyVrgA7toFSkQ!+7eT-5mV6gesZk<1*2ohj6iNM=#8H zsEdc#V&y)lEfUK-W!SjoE1KSC^)K$Q7+Tt}9fbsGx$be5jc;(jqIaGDQ}W{w(DVQ+ zfN)`^_+|SR?!NK8{Lw^D~LJ+K^?QM`I zCX23wn$XkJ8yFY>(erzCdq-S6oP?Xo^TPhs@Rph6-^dw4Qbw4Xcy6_^1{(iB`T4GsL-{>6lLGh?oSr^1vVk!Wb_yidOaP%MvSN{J8| zl$QCdfe_gA6N_zp`j{T6sYLSa4?oP+%GyaIA7=Lb7+}EO3p5}06>TUjbv{1aIX>D8 z#)u(|ACEY^5_w^E+!MrN)cI!T{%L$IrEX~>g($b?p*&bTJV0wj&|w$tW%-p zop^=m5SDG`40J~ewmdvuC1^3K@+19i>6IC$Yf#Z=;1q4zxq#w0^%t_TCH!-mtt#U z!zwfa1O^zJ8PEAZalptuJs?NxbKX8n2e?Q{f$@Znpdh@Mh%E;(0!=<nwwu+f>#!c7IodGe~`znFygFSx1?1J(!=aD2ipyO4=LCXYb*GBC>Y z0-@wgOy6}(6N8^}2jsKWl5?aoNPh?)p~ZDx0RlIn`ZYP(;3Pw*{m=uj5b#`H8aQFj z#7NmJ=x(#KvtVT*gQ%iffffV0`}ylvkk#!ZML{}ZAQG{1AbJ760}w+Q(*~9|h)dWNW|V379N|NG`f>Qg+zb_r^!wM)&#Z` zC@)Ys5Q^8Qn>jc*EXt@QNTD7lVpEmpQ-wT0fdnQ2PNx}2LYrwnUqh$3VdCVt4 zM*^k#w(>hjQ6MDLH8iM+@ByWiXoEhtz0X8X7So87mF&r4s58z=%#TSwpQ1PQ= z8P`(4hdPUoT(-~(em{R5X(!Ck^XCt<0Bmv;DLBi3X`$)C{|zlnNb4Br=dd00`Z7J1 z`0GdnI5C`wkFxvc<}8YbE-$UWQMknr)5hI-cqsUrSY1!=(ZDvC3*WyZlm`lN4K_mHzsr zTL@Unwrm)xX~EF)<5a=xgdxZv_<-M)4xqN&M1C{l3EVXLybggFxTx!pHG)f08UTs` z*xuOqz4Pl#bf}3V-RT^EgBRdGxQ|@yFPm`AQ0@55KjAyl4K43TW{@_2PD@KO<`w`) zal`Ykdu@wpc-w5AI$`tY)z#JAU3Zm_x5)`%!>Jh3zhLB53Z_mGM*#^-U0t!UL4=m-U7vg90~lw$wZrNFhW92F80dd4>j{qGq< z!u`j6&~)H&Xk7v3w&2xr<|jvWSrh=S@_g4e3q39&fg+`AH-s7#8weV#EiUGf-yVO7 z#Q|WZYkNRPEawDk9XJV~saLYI&^9|dfY;tl>7t1WHGv!kMNHdWB3e2+#DhzC$vGDS z#o_s}#KSd^0*48gW=c}TA9?O5#}qpyP;W3I0{6RebnovlM0Ni82MDI7rKY+G(1B6} z=>Vu?-v8|nmsBDAOdypPvOQ-0=RyFfU4xcn7~-l(bKye z)(m9}9YGlK?aamkzz?P=$MLH^jp&|BG)( zWFDM(`9bfyj6YtG=soVY;sq=*RAc}x@XTDcCzl~%5dNr^_j>X%78K^-ruA;2wcjhd zN{>O-Lr72&g>pPWjfus#Z;#j(uS_(x^fZ^!^AA z31&S%56{eoCzP-YfzO+a1stcItK~_PB4kvdcjkCNH2_@=7YK+iW+hpP0-QCgA(F%{U`p}R!Q?^8% ztv1MYG*6R9wrI2O_B~_-RT#QC#}=dAS<(SC?L<8^dH>=UZFUAmMn-!2i{;WFNg&Qk zC@Ecu$OQRu(KW~>SD1k$RFL*Ak(8=BGg(r4dV`mXmFr(+VFs-q*l>>0R0KVyL+{0 z&ThB8qa&$$^)TG}AQVto_qB;D(NGu*25UZlb_6{Vyq4f56>HFVh#5uSfvIC@dAcQb z3Q97AsP9|UOMrU?TE$>F!q(-!_y&|pOFLs3c%xduAaPhQ5F!l?aIG0)JV4a}VGG0- zu-wq(s}ps=s&wL*L3q&T40Gycfv_Bav(BV@(~du_J{=zNHx%;I{87u3L!Z~n-}j}P z-Iy}GydZj)Xkcutv(zrhB%(!4G(GY**_pC2xBC0Hwp;me6u;rx!f&^=P?0kZN)#$c zx~(XsO5O~KBMV*{0M9rk&<$R@6E!nz7E{TnLZB*E4y?g{|GrMHO_oMMc|;;GDq)aZ z!OlT&$Ig`$_xi{Q142>aBx+h10QS zJbk01dIx%;Ace6Sf82WUnO%=FQ6~ZCD6szPj_YaTSD-SBOG_Zv?XPh?2AK5dQDnQ> z;WyX*QHb1FlvRVpMH9tC1pZKkUGw}_WQ!>d8EOK;^!tc~ljEba=0U81CUjyjw9AuV!3EeMrp-+-Rhu2Z3_K)OI%0_MK=Z&TFlIuj{90e1)^4Vd-S7TPg&fjFuzs`p z)LY|w=AY!L^CYR~sgs49JqcI)%)v|(1>BqTrU_N(Y?W?d5fQ^Scp3_%HSbu^@< zg?L$%EC@2#Qi14YS3#oY(qTK07I4leE%4N?5rzn+68q~s`vbKyG?Xs-L7t-1{sO3) zY!uOnfdnhY4_a&2y@O)H3d5sT?f93J9s+?aZP7a*3|Bo-!r?r z4agRyCR!(=pIX?vyLa31Xb!0-b+RBNG_^G6=O}onHz&>m_GTdqXV)xiH&eI$DYQpN z7&2C1pU(9bf?$yGNu>z?P7|febam8ja95X>v5hTW*fmf6$9#PI7Zqmp{5LUsbn-kN z$0JG!9D3|5DdYH&9b#PKSEvg$YpwYk6j^+}zok~cI9@e8C)#!s`X)pU9|PTojE7D6 zYHzqW>Nhz`W6Z}8O!^5Ut!%YR{q+)hraGX)c6Rkl(op9W6+N@It{h!X+kOAO7{L%z zte(F_OM}G$4o`OK1hc~LXt&7<>UZwU0n)8MuQTaXv~q5PhUjoD2_oshHU5 zU{i2i@jC%xN&2?Vv10!N+jOoU+~%UEB=zqv1r=+ud91B2j5id!ILy0SKhsIbM%$R! zPyZXfJTL&afk7fxo4s{@11gu~4I$@0&tErQvAB0*fBcgSYtp8VUq)}uu#MN>3}u$o zgQ?@m1nR@}SkWli3qT&di%QtBrR*Q4t8iy|>L&vO8IFItDkoR|j&1#Ui1fqU!F06d zu;eICR=MAziTd*8i(Gbp*n~C`ys+N1n6*?e;Nr{#QxoKFDJFTHF9yU@rcYM5 z_q4?=uARm(YG{n6bs#f}1t7FMF){r%N!N(vRZL7}Wu=2|At9VGLYOgwIPx=ZSMS-c z(yqD8HVBm_Vu_-+Xla&>{BhY)B-aVw^iZxJT~MB1S}*LYFj&zG6Fm6#{rjJeh|6so zes$xuf}p&Oh=NHp7SwwaUQo@~->R0SR)7_!7O> zc70z6?gg7r@jNPJkKEt}-DDUqz6W$L;no&My7}3EQBixk;zko>JZ0lo!mWtdC`>xqZt03iKw~pif%+^M9XB07&-z<%lWoT=bEM+S+QDB z$1}vQ--)=BsEWWjsxYKKCKYf$dvJ(r=}>KVl~Vrw*16+kmY>s;;vYZbSU`%nQMG zv!yH&u{+lz?^op4pNLk^c-%Q{Yg;8UVC13NNv#zc5gKV~Qs>#}a{!pwLSGAkPz{j< z+YL|Q$l)1-%PO>S>!Q5_AT2yj^DWEDDlE@ab>Pi;vKS-!@6Tq-xdt(AL2v$8x#CY% z^(Rrq)JmbgqGGO37rOWV%w%2@rf=p>RW7Tv^>8qXQOodqGxvT#PH0f?i|dMCqtla*wKSX=i@?iBc*9l}0H*<$; zf1B0OBMBMxSczl%!>iObyOGzv7)e?Dwo5io5nnP@kp=!frRv`B&#})XEVIXKWpLps*HbO%W*S){5Z0gqtOc`wD53*upZzW_^tW7;N%ZGdDHe=$%t%FvhOMv=8SDb}_K#X<+>6A%}gmV@~T@bN(-I6U-u=1%)*_ku(ZWr8_%D0t3> zdV0-HAg4h_6C$uP>{6wtZ%QT66c@?o|1dy-@xs=glSu#Gak@t{9^waHXx-VxH(;Oke z+Q2MCvNOB^n-dXOS;1fY=@U!N{13a(j`>J+Cohw1X-s}WVTfd&_WK{My6D(_KZ&-V z@1)t|+TB^d{@}*h@y)+Y5^^~t5>VrWmH<+a-diJA0lHfEa(cnv4F$oX z6l@cWepG-sK-^t$0rU86-o%ZO>Hk9F*=luEeZ>3hMEK1K{1<_`uv27NC-=-3sOR5K zY7~iYKa(gW02ZS4(;(tJ{He*_IR)b>>JZHZhyPP1SKyfv7}m^gh5$xVRzKrWw_yahASbwS0)=V+EbbYSt{ zzpWnNuX`(_x8vIxtnAz7x4^F7*x2y(UnW;U2B9$>pl51hL%JjduBv;G_d(7MK9Sy`xL)O>-=8-u-vIJiNWE&29SciZ#4InG-dO`}%UF)U}%NUEd6G^c*7?f| zt~C=AtB0Y2sS+MWYisc>+~8n43DEH*{iSZu!;^U2GBab!PQi8}dJmj{M~@yc#N-wi z_vmV5sejz}^^C#uW-%5{Q_Mj3Dc(p7%jmuq4_tqu?&$I9_G6&#VBrI0L`aO$E=e=R zo(;z>4Hjgme5|jZFyv7yfz=%RJk%jB(>H@hq*qSFGAb>YO5`oAqjjmkR`Yvto$@73N zwri1b?J#d*ZfAmQ?d_6eKne`Pl;!F(x zE@bYMZ7oPe1odQRO)EO^yRA)mO@WVtV3MHE+_$8Al=uWiY=0s`TSGa7F72Ox5NsSh~fGqS^rw$!vb0JZO0Pzj&Ucx_{<1&$KuimZOm zRZItS&&Y)N=bnz*IWeDIb_r6h);GKe5krWp&Tc@v?zp-h20W3OEU&9*Ms)S!9<=9N z2*$!Jz#9c~T+j!mL@Wmv*8p#!IxFK5XKGte&%AB<$jQmcnI1*^vc(hxzb`X%|Bdp2 z+HS_9 znTs$3MYuG~47ne}tS8%rA>aDvx>-eqWtR{yV4Tk6_slmY`ME7Gpb^miaLz6V`h4+S zxGh?j4zLel)~hSd`Cv`W0qpT)n&l=b0t(8+BBR>7PL>c}5w^`Bj(D%n34?o}TEHb% zgEW)I&x`)nnijaPD?VQ5$Ajsx?op%s7l_p z0dnQjw&-WWc+HWc|A6JgAw0{@wC(|^$>wqbfc5w=w2 zdqfw0t@-9v+Oy?eP`e1kYh|u!)x|hvBAtMSNIves_e3--aCYB4MS>xclH=#yWFn42 zrAqq=cR>Sz=zByrNiX48%?+ehI`Vz|?Nzhi%x`&>%ihAs9~h0WkbZXD%9`}eAG8rb zd$0dEcg1LnAm9MqF$<~`IF_S+H@S(*N@r*o7{<#Bc4AHz28Skv&qe2|-AU#wDm)PX zD1}5ONy@5*KyH}`zfhCyH<(E9bCO$UXmd$xj;x;2{UDTgU4`Xj+HCPxGalN^*dKp8 z-}M>)uCuHZUnf#Zdyfv9^>leMzE{5|0=hsm<0XWjdDN>{(ph~fX!4l0tB7;9-(wg= z6i5*f&eZr5IuH<%ApKBNGXkDPYPTHoH}1~X(`E2eAz=RB2;N>OA+Hh`EKqpB3ts%9 zf`&X32uSP{S~O7qu{d~Oko-S$^C60sstjXed>kEUjKZ)TC=2j^c?x&WZoo)|WZJ)V7O6td<${7KK?)2D_#le(xdn#!9t<0jGs(w6 z>QqBx<+DM4Q07O;47^{I07N;$VteL6QwnP~p<+qt0_7ic^b&1I^d!38ILr(Ygyc-C zMf0VxSsgY^gk}NkrYV7m{;`F(Y4p|i1@GQ{R#3jOxJ2%sboGNAGY<_BpHI0*7pUas z@h#G%(&qBFlm;?X&{RY?=YxD!Y{GDlxa#|z9Y?`bz9b@=LhoiNMbu}8nA?qF<~&K| z9r*)`r8@n0aVmE-Fe;W_*0|2aEz=U|;-Q=O19}5oTxQ$j9sd2BUwf=9_%pYg{(-w( zLCB8OjfLtLnN|=<0i&}1Xnf7E*1c=R&}ZZ(I0-tcU|?qr2?zdP7C=j@vZ4ZnJD3$~ zRWt{S4rJMi3JBwv@l-E{LzaCAax)zrgmMQhIA=Jiar*%9almK0JOX0eW3gjbdwb9& z`*@?y!X*mXn;0#_#pPv?^Dq;j_s*vWtU6c2JfJ*ebV^}n8lqK`hrcQrhC<`P%O9(9 zk^%(zZxaj1ftK;`Z&{B$q@NdhGemrL!Bv595@eoWItlz`7}Na>LMKT5jcJS#nJ}}J zbk7pX#O~VUnycXa+#EC%!BogoudJ-xew-%kxsD1#w-{0JH&QLMdNobxXMf430mIs`kfEm$NRR-BWknZ6HW;slKn3f<7iG8)< zs36DUyYN_czoVw3`@6DY05c;n#3q}?tF+}Q3_+MBi0^LqKOzf%fyD(80}SGWITyk2 z+%PlKW?I5U*ZK43&vM%#7z700*<27N5gU$oNBL5&5IwcBLi#E~8Xsapq)6?;U(jP5 z{Fe1}3wNFBIA}#4gFh|}{4fw3OcV8VKaN?XK(@Aj+1{!kj-E7X9xPRK06}D5;)gZ!Jo?l&FT~h62;=l3l zAkv~B7PU^0`u+uKArI~YMI>%#$S457BzSrfp>$xZLsCMI9l9J8O7QDzYHQgtlm+M@ zRK!)c-T&v$pBxp-|D{pD^dk((%+9{p<`l;a38IAs80v-*EHDrHtXxe^XIi6ZVOa7D z%${v{`ntPQe0kvfM=rZr9QD4>3d)u^3WmJl1#(M^X$g3SAg|}CuliCj%gZvwaxj8z z2yS<^esa#!lHU+vfVA7KpO6$_h?xg1AEaIQ9)oL01dNe^`vR|FyNc>+>b4DE(Y3uJ zNN6@se}r9Oq$Fxu+NV@G0O#gaV7v%a08(jOO^NBV zXIG@JVs7TCF9Cjp>EcD#nv#-Oux!MAA)^n`9r#WL7(zo0zL;EtITHvz0AI^i(_v45 z(co}t*h^3X6v=In#}Xo9jhL%YQ(}lF7$Th0>#5(!V{2Uq)gvS-HBGk$sowJgI!(3%RsOO8J4& z1_ILI+|&7h?ta)lV17azMn)z?90eTBz1Gjn>;>v2s5<>uONW+WI)L?YEwmWuRuqwp zhW354SC@d+^3gt2T@VUG`jCb=QsCKk~3@m7F_?tdjnnlh}&coDe~E>ndlDS zw!RFB*le^y?!Zq?E$0UTNH=bxSw|#Y8`g+7^-%s48yuB{o!zAueXU^mmEjck=y<4j z{12&J9P^?MR-F|)>y)4WtSw!{qQqZtnu&D%15f)>KKPv%&j&W_V~0LzK9UJ>Gcf@N z2k}po-2BkjKM@;cLM8F}?ki0D2bW>?#OC4300(Z;e+yaI5MR~Y0Y`zVwpkKEu|Ppo3uuz-9f#HO2!KRfEPCc^08=E3m=egY_lyfpV;2;vFLf?FLu%M!l`^PXG{ z|D2yby~)dQ4$rP}+7TGATApjQKIAw+dDCK%Vt%DM?tFiJ{&M*~W%#roCG zbDh-q!5ff{OcnN0Vi(%Yfb60h_ng^1z>k zeD(2mu9#c3K5SDF5fPjTK=>fk*{mdtA}X@DY|V8A91jJgzI#VUMFr~JXc$Z>x5JlD zC@b67z>pX?)Uk4Ad?}E?0isd|oeGO{q_gCvD$#~X4_o_6C=xJQ2RRckp!p{}rI=zN ziSD=NGYOX5wBtVHUru3))E}D2$cQeOoxC(x5fINXEKaO%D)!$gV2ZVZjA1ZLqMi-U z^6^1T7v>aV=pH~~es!!GQok|uLc4J3FdhY7tv?JWLtN$LS7klS7(hG(b}z()uzh`f zVDrP+?{N&|tD*LI38&ST5rSQfBGo>!U z5x!J)K6E!4dV0Ub?8JJAsX~tisT3yK0}gWolHa`pt^%`J@Qn;Gg9QnjX~!z)q!4|} zIP=of(tS6>d**3rX-D&~JQZeWa9!+&=K?&2A56jMXyR1m#4d|T&)F!rL9;OS3N{>+ zsAld%N-mlxn5#XTzRk#hfw(QtuVH)0L(dnG^XlvUi6XlM>oC;BV_ra4QMS(#n-AZS zF*HFe8k3^Ptf!lNJ>v0JDZA!YNikiAW!d1MhHwU{0VNosBWY>T$%i&c{|4GMqm&1# zE3ZkA20LM$`$u8qvS6@&yPR@lRPUi|t7dAEiX#Ud@jz0fU}{c9QBHkH{n!Qs4nlK6 zwNAH3f%^?B%4Vp4cKYh$kSlp(?eq@}N4!l=hWRn?;3CUYLl`!(GctT@WIXMeq5Wrb zKT0Wz>Tj+d@UY^INjaK!A*_E+zaN%9x;$V2f|;&YytE1 zlj7~TO|VCWV4fS6w@1&Q-Rmw3h_6EOYSn)%I}xvtBoG_|AD>!97D)QMpCyIwo*^e( zJl_k^0Y5XD;!cPUajw}m?6B&E;MlInGYqCeEu(6Y7}m?z_YtVy<>mLCli1U-K;*?bV|BV7ra#c{ zoWCM_VYf}Dj$QL|sEKp7e$l?G{Hs1I0Y^u%Ge)-C)C&2Xu;#l|+W<0Agvu=;V<}_igp?r(A@e*Wgd&8H zgpf*-%poL62$?fa$vn^Vdu-49{sF&V>sj}@pL>OE@9X+r=XspR@j0h=bujEEatgY@ z{_evEn2EkdN2_sLT3Z{y+vg{Z46KR<8d6#6*GWk}_gnd<(ThP9Y8$5{ z_1$s48CqF|^uT(8kMfJYH7CvN`lg3uFY*8+KJYGKxB(9s!cs6F&^*QyL!MLDOINfY zsAj0~&h62bF$cTmH@hw!(QBzS%ESR@UFch74F5iC+I)25i*9J>m)B36I02PY9k`fe z6mXV8)9u;FwTD(-lC#C9jL&zx9_R~2)xqDn`ew{jZ($@#(P*eJ1la;AW0f%;aQcVs zmt6pk!T>9_7EK9iEnZ$;w5j-CipJXbT9?rkoW95kHPI!(;{@KoP>A`$Q}ii_1FF%+ zy?CMMWnyFmRqJ;*SB+S<4qveBrM6&DiYjfPzzH%A&Wfs%;#{>8P$f zcOVaKApXEJr`$w_AtBiYB1!9#o0}g9p7WTBXND=Q z-*Tnw5J^K%Lr+iU?6!?>l_CFT!;=V1mVzo;T4M7@j*=yL)^m9&F+B0#8(%<7G(m?H zMR&Jysd(pPCJ|9dGtP`M!_V-Tc65NLf*N`U*U@Om57wBai)uox3EF>jV;o_hohCc{ zU0_zu?@ZT7-MC*`VFYeaJ;G|;RzS4C(TTnpw;ir7{F5n=^3i1u;3w`&kY1$5HE3@U zhAuf$(ZHqOkC0AIaDR*TpWx;Dh)V}*A0ORrZw!$?>88Vz4^s^?P0)DC`;mJBh~lFZ zJU)%1r^avZE=;Rmdn2L56`}t)r-fm}jR>^@Y<;fd>G|*(8w)bt6S{Hd&K;N|FI_4h z?#a^Olf1v-g88gsZf4c`2I0?_&dJkW($tqx6n0xBynKo23@$n-khJ7DkoWkOQLdUS zL|0wU_t{+uC-}I-ecfMN)MO%YD$r`xxP`v#(&nbsN^@-5;)b#jCja}C8oG(b#>O>n z;W(A1JIlo0L=vg;!UnDn*7^?on2iWmQ!Syl@^trpK#6SBpFx+eY7B=Vd!jLzt+CrM6c$ zHaz&~5RO6OE-5J~Ki?U}zl)1Y>{H9Vhl6Aatw?t4s#kd;$1{*ze-RsdPbd}-VZp(6 zB54*PB9{%gLV3MRiHKOmkOtUyMj*!0(h?8*##<;V)l)T@cnshd6TJvy0%APq?n0bK zPKzQ{bea>79CANm#E0O8#eJ0#U3az6emJCN2;(eB37wMX?^Pm~gBOi%Tp3EZs%mI( zFg{fTG;tT#AN}3!jmiYIk$?PaeBv=mG$e^yY55|X5;(aQx?~(35vX&5xu8^vnhcXBn0x67I1zawd17mU zdb!MzS#q7H`=VJB8+XW{L;mqhotxLMwQu`=V~Q;vO?W>36$vc@Pmf#p6+| zn~um?iS3|&nIY`&=)tC9Zo!A0tBV(vsP@}T5Q2qhTu5C(5|bpU??vXy(f74@vf)){ zX4(R(v>>UUvAh8tzAnyQG!C6f`Ll*{6fdY9YKD+oC@u8@#fpKVWMv>|C}kHMurRjG zsv;!g8Y8R_j>`&WLVb$`L+!WGQ@>qr!m^EO60I)kR0`5#aVnjYO9WgAPGT^dP+^PF zjNu+eO^XX=INp5UIvofqXno&k40uvrT!qt@Ur{kB~^w&nS%yH|VX-NCiO74cX_n+Y~fCMJX> zI&$oe#n!@=@4yrz-0NX)WaOj&DTG~~pTPr1!Tt5lUj0G`v`nBZCSc%%21E*BdA*(h zPH+SCxM}$*Am=9(k!;`Mht(=Q5AV#~yD(^@fqgdJY?7UupMQwNcJN0qo@1f`)FZ4C0Tv=F#-if&xl(TMbr>5PI1zOCNIcb3RNk~XI zlYjTc^XD#`i)|Q@)mBwiAwtSTu^=&c&&~yiAMF3iu57)B7>F8-VE5$D%NQbu{<*FJ1hv%^On%kjb#kc9{VEXBOw((Z^ zafupMWeQ447=*LiHwreDgkJ@f;u2b1UPg8fO%pX4KSgYOJlK9YRmMiy?T`;3WYGoT z%D@+VJtW73ur-ijaVltdq<|c%sE`qgg}yvuEFC8Qtk$G$nQ8N;NJv`C7-m?iDk}QL zZeT{mD9MJut{lXy4V7V25<)3B2r(FdzaI@3fG{?wU*hu$am+P0L+HixxpHam?`Ok7=!_Ba`y+rJm%M&l157nsooBucI>p1PVJd*w0msaK;qf$|ae4UT(6x2?Mi zD~9J$u1Y4D3d9(!R%?f_N>umTFfzeT%*4V%=vEmSp^Ialt;vIi83!{QlQtqRk;J1W zDHb;=PlEKg;vpGb)BPrqJOqVatkqpnNy(BHD?CWYYjPm(L2c>XoN``Z_Pfk+l71aD z6+?bzsrwsf&~PI{GVZr45D95Y)P;~+bEXvb2;|_qRsT)xb)c0&%aKrjg3PC`eb7ea z@ZrOFSQdZ^_3PI!0|46CBs~bZUgSo=UZg7S^3(rk%+COl2cCOxf<+JmVKKEjbolpT zFMLaSUr>}eIyp_@(GN)tj0dP^s5Yk5F=>G+hKFv=p5BoJus!q=WMsFEejoog!W&pI zfRo{Lq+;B8dlM%o92$*@FH}IoOv6>@V68<_-g*FmZmI2!c^p{4UgDl$@Nei&im9sB_X7Ebc;sC{M$uoWs4|L|bb;iVbrFsG zxbdODx>vHWUjb&M)tR0ieV8Y|e3@_%^^{Dw%mM1CL!|=PE|n)_lV>ZXwm`IigpN|c zA;KZK!7Ni}WFArhCR7OqVu=mLe&6=_WV{XjpP}CoyfEbQ071jG6~BOLBv}>Rg}5$F}j(%}Hyv z^LDROQ}23~#Au{?K-t8Bs+<01z2}|gd&03L6i&$NUVa7q!|g9LD-P%4={_UUB7;P>Yifnx^u~V9D*#5AMY#F+}-_y zvU1i@{m#1qL&>xHEyBsijCli*VS1C#U3(}jE9t8pWzg40_6g3NSNL&L@C(rfn5 zSStUR^O)liRlHsl;yI*-`lDOo36YD7k9XhpX4`gXt?sI}*P^y!ik-HA=PnoKFwWI= z1ib6wMl~M0^;cYtY&nEfBAN=)Yi0ySqX3ll{&u0A8{CsGJ}pB?&RELc|~-?d0mh zhZxUZJv_f~b=sfJQy}K`Z6fAMVWpL4&~q$>Kyk`9u>WR~J*wL{qzbwqH*M05gl!ag zDvWOu>JJg1kRu9t_pFT5f~-EfrD_^w>Oi^ks6kZ<) z^$~wbG>(qk&r+z!!!9rh&E`(`geCjy(CGteT|8Et#+S zUw7G;_wUV{(j6kImCqDz-aSZ?nEjKLUHpfwM^n;%IH;&eY@I{v7OT&mVDitoJDXGF z{6_A6sh*oq@yM{g-s$Mx?zDgkqjZCi+|igL6hE}m_oE^Mp{|?F%1e4Jsgri%zVSho zBbtW)tBZ)lz1f?0?cDYM|Nk|Q!V$5d-M9VK8jh~o_ z^m}Was& zT6mxHRzpFeM_&MI6Fcx+Z6y$BM<+1q6bP&R#~p6> zv9M`$;oCQ95Emh7)C?KS@Z9hhUErgMt)*JoU<_7F)w*BCyKAOEKAeKIEh>unOvxXU zW~TprbYG*9*5Oq6VU#&K8e_1z)^@+tfG>(w+~ajhO1GIHw1AOzB362Q*rN_1RFvI} zpQo0KR3+W#ekV$@hSr;SCAxjVPb2dIG*X76-`o2ZUF@DjDwjVva$x{l-5hnOGs^t- zfeOFlr{W#T7qS<^=Ok`iYg+ha8>F8RQT#M~TAvtq5f4}37Otuobz0xw5b(ZEa4u^Le`&nr)2p?Ve-6zixH8wGUdLKxE z{Jn$^(ZltQz>&92u0z#_Go;>WTHMg>OxKFNdAf7bcGnF1j&wjnMgl}=+SykW--mQ< z`NXWdJ~#aNV<;5MHj&d=yEnCE4Ei|p31aWul;iFMgyvY;>D^zK$Poc&D6|`8lu7Dc zt#j7oX|W0=!%tk9L*AO2432g5sz>~Em*?{J@AhWz9bldzG0fzTRJ5I2rC(Z_GPOT% z3VqVdg+P1OVVFCgYK^!cLAjRac3m&+xsfR*klMUE_{f9$O#V`bt&QWsvTa>mmi!E4 zK7S?;5>5yMOsG!AsTh2=N!(rwrZ3$(5vS)~A$^p5)Vz;ye-stD4Jj^$ciSRx1%4gT ziPe{CkWmm$ZfiS7=8}|H)*$AL;T?lR$1X9yq<1&D#Lk_Ua5P0$Ls&Q;Vk(Y(`A8D{ zq&%9?%DsC7;?j`Z?riLM(>B^JLd9$U^$;xKjLQF7^FnTZw3+NUm){Ax!Spg`XL<|H zMHzLf0F1vdGT9n3*gDP}Z0o`d2F&0r|Ac+W9z%D$`h;3P9}9Y^!k6-|gJtbiRS#$$ z!;d4%yBPkue%Ncd`z&$TyW-?4DQeUQ5-Y`t3`oIf=qtN)dU&p)EEZZQvG;?Tp`NxQ zQzvgit3{naAg9R626%0+bzZv`g=aO0JfyVCLON*z)eR(M-e|mMG zr3vrkgA<6&Wpzf=(V3Lm4Xn1d3NZ(W>=jlQ^!c@hk*BXecZwreDmX<$$p}l-!Z@b>4-1= z7%zSQ&IS`ADEHHqJr*>K5mnI2QR<lQZ!b^bu*6TUMDB89ASu~V^{v+4lf8YZ zuQXCEwJgNL0G~vIo%m2xkh$_2PfK>aWM@~`m%=fJqVD^p)5)P9zZ*56^r;`7w*T8V zirg9uW11Yun_-fCgaEo2Z8ksGe1q_0n?gs9jJjuK$dx<%DZAt8NCK|j=+#Mj3eg1` zqPx`0mNW~k3`{SONmDh2Vr%1!4pdMg2(cQgi z2tkJMXZfQVH|!dgLcxR2H97siS@ey14}R9qIIy-E6tuK1I%B`~zjo=t8DA8$K^4!H zxDx73U#St(i_1J$QsRqJr#(#OGCh7_NB4rt13=DEW~#FcO5PV93G^MLBK);C7q~f2 zaxzo(wt3HN6J9XU*V_+N3@@p_xxjAnYKClYJO^?adx*(zeK)FF7n?asNjOW0h$h&> zIbpgXl&}2q2D|(8FZ@qFnQ>uP2rs*!Mk~YKx~q@%|Nd7zw1_YMUw!5OJ{sN9fhQZy!)UhVt}Un3?;F0qJyvlWelrVaKqO~{X=$H0%vb6%}l zC}-esA?8<;6@2-v9ayluGpDZHF@n~Fp){$lZhFsT!%i*q;Kc9E9ZYkiB5a2Vu)u6C z*Q3?*)4VPChlDunqG@CE7;7VU*&v_eJ!7!Q!8?~f0m4y`b{ zsEEBE`19xbGW{41X@g=nM>jV*)47nvVs4tM74d`7>y%^DQB!FPq03vVrRKri>s z_xZGY>SXiDzxz)|ueX(Mgj&8a7HV^vJkL)1bw7wm{LJ)MhV;igj#=#=2wL&;xzEJPlyN3kBc-Vpv%ZFu@zWWwzyI)|hJN0{ zxs{X@GjxAA=WLl}5=&3*e6@>Br=KXTj7)L^L69wCY)-9hxuz_g_%|$=Li{*ke(!ww*V~pw^uw^H*xKIp*bwrEtm7`iymgF;&ZXni zK54G2nlCJx9#7!Chw0wQ{qoKi_08sWf2gajt{xfTzV_{}MzG=@3Hz^?z8f2Plze(q zc-P8ypd)u2;xf(%_V{;mLol!;H((f`#PuH`pn4-+5k95+rKLK22ui|)2DaTNeinsr z$g*@n$Ozz}HQd|FOA*c~K_LCY;&)@R+>jr~2FxGieg-aIc3#H;vm!N9%*=JS7uTv) zBFdJ2l9I#&7^<(`mNj-g{)PNh?eGNJb|Yy-(5OTKIsJ1_t^bQaYmUU0s>i|KR;JY$$K9O&kK}oJ-zPJ{-Qe; zPzYg${IA}y;nmDIbO;bo`vCj3jJmyd|Zm+bf&jJ zbF20qYwS}Gdo;x5Sy7$Ubk`Pte`3kTiAEtDS?C?AF_bOHP?3>H;aBzBRIdYMbAjCu ztvnh6ItZH$W^iXt^zrYYBJP*=PCCK2xmU#F-o4u4dBVu|pGmrw`?4g~ml$O}swism z3`%+jNFyxWpcR0=>09=Rx18`He*M@f(0qiA?abdRCJ~h6x4h*PIK%JeM5XfHCSV;Z z=hSdA1t!50h{*~RF?h;9OE!c34SiVu=FQji^KjM{)nD-Rm+XAAPj@-1esih-!~o#M zq}Ccj!Dr0x&Gz``-tG{ZFKc~VA$+Tz(p`hF@nOPg9bt1p#uQbZ9$m??k|}z^>j_Oh zb%`avQ;++pwD+^e0_f$wUJWVl$93n{y_{%3L_gH zrvgMD3{${r2ntePyp&oKc({Dn@inX5Lb0&2@bd6L5)7*7NWDS0 zK)yy-MkNCEbtY0ROs&rNzDle*krOqj-}9?D@*}Ef$@fr{$A5~RV(@MB^@&c%-FuhQ*$u3xcx;asqsD zgat$iZ@zKS>`SNzg#zw)Sd9bOfp$es6kmjgAHImNnZ*Zo9GECTx=wC*#7-umJ?K<~ z+)zS&LR{RUTXCvpAg4lhI}*|`JpkMQQ$TF&jqBGDxwf?h2~3V746v7Q&bM#gzz#Y| zSO@|XDegNI!x&n~Cfn}SzT_Q%kqq92`=@E~cK)f3x&n!oV+Kdt(^EXRMRa|BJr?Qg8z3mC*+G+YR|~zlK)Y z1EP%E0}cmTnb9jaKHwBQ9W5pxFbC4(=lAcc#}{F5t*ftZvPbUN{QiCYL^V7hyf!Mm zkY{nodCV@4--|0EqhxLDY`ysI#5#Ha)G?jp6P^hrv}F7v32nPe3s9ADDg-9A`doZi zhVj+HzS6!=HQa$5SB{fk9C`0KbRg_hlXUDq`JUwObW{BADpoic$cq&g$F{c&H#W=4NMK#UL%W83PRb!IBAibxnZW2>k**Jv_q+UR$mx zYX~s-vFT}KK_X~Xgs_NVZP5kO1=Mf{ zC@6qHMPfE4-USJ3P6d>YgDx-)s*vWLIGDxXcl zEhi%b#(SJH@bv&X>dUtADlyT!PA3+#qvdXA$Od>ZH*R#+Z9Pj63JSu2u$Z3Q|Lo{5 ze`V&=a&Mjroy*0je{^weuh=$DaVym)=cA%F?k8xZh%QAADl4BdU#z3Os|33Jg}!gA z2NWv?&Q>N|OVxBZxa8*tO)V`gKWL+}QtkxT57W1ALoS%a0KO{cVgekS#Wkp!9w ztcoz;XJvslhw3|1=Yv)nd>SB=z@j|sf@9H4FzT(tj^z>KVKj~oGZ?cTr>TN;gb8bf z5wW*ntlHb1p$(wOqV1Nu-HzbSF0=iDZ`yC8w6g&X+#%}Ak_iR?bnEJNWSfSzTVksX z{Ip<}!jn=^unJBDaJUzr;(S9`^V6qKsEWC*7ZI zPxVo<({dO@pFqyd*P9UU!4lU&#(?tl_wP;k^C;9|S!w<|iP*2=9f2M?z4zgxpLLVl zE2L^$eae{HG7eWI$tItRJw-;GNJZ3lclLGhnZ13sN5kY1GQ*h-Z2hJJJN5IIFD>uh z&1@GEn#33wyd5}?HF#6;-_o@p)X$~ES%=LNxWJG+ zNQMjYA~kZCVe;^u*RXi2(WZ1p;)_UqGw1Cw%*4sYnpNr*ttH1T5_?M4nTl4euR%PLXB)9mVJI%KJ zvNG5hmD-$!$WtyCDiJmvNmDhDrhFc1-myY0L;i0|3k&%;~`>8!l}0s*!4lrvQ;4cSxN*roP_KDWt1 zqL5Oi^N*#F#C{BW_$ktM=H0Y1Am}2#os|_{j}vwn9{#3L!QzskpaVeHfb@(xT>T{B zo%u!JH~Kb>-qg|gg9rrnNp)N0!`q+MLhQ{RsffEB*A^`~YRk2vWbVLtMl>2YfXbaU z{0CQ-T9S@X_+$Ox$OwQ}&Rs|a0C&ERt-x)`O9K^LS-NOwD}4~)G> z>rLtlw~%6rGz?un>Nz`+oFCtwW22)M_cJ(IQZ%g3o=w(B6)v7#)Y6WFEm@Q2 zMJ=#DdH0*5m+7xibtc>`>5c01V7Yw6aW7MpME>Xiwr_}*RS zfU5}m#~$=f!zK9zXAc4;Sd@j!1pZMieQK@%R~b zY=~46j%^^?T3X^nY>mpFU^yZt+j}VBPhxeUpq06%srkn;PlqoL+bhnWNB1RxSO}&i z*v~iX!rtuq2PX)zcy*mKG?@Asv&xL+`#P{x%haIc@J16Bf zl@Jrdc!agkb@D~;v~9u5Os_|d4i3|u&KFWOJK4@XZm`;4Qm)YZ z2at-V#nUL5=XAt-7N1ZpVW$=1XLxcYTGDMeZhLN3V%6hxPM(vg`9N;l77Yw$U#}A5 zpH7q!Rrqxf_yBqBA~ka*5Q(GonM|0FAOvq$FtU#v0gWntRLQ8S;6lMoWS;A0Xvoe? z1#>$d$#_r~>-TnciiwEGo0dej?U7JKd3Mj?jIi6Lqd% z2ZIe*D$jSY?$;$qB~%&1CQu^(pIKpYNYf~m1;XQ$tDBCe4wm4#y1H6gPM|TsEsarC z<>19L4FPg|bZMIADH@SVufaL+~=slRCA)`8qg;-NRg2!1y(~{F}BscW)X>l?-rHh)r zd0QXvDohuIu|0%>%ij*Jf0O29?)enLOGCbQ^J38P8$9=JMj`ZAZq$!Kpvf2@2Ckz+ z)_*Jy%MMcU<^9K?#9LD{cT6%#A73VuMqf3%>Vxsur_O056_;*(-v*nNpJz#8#m=6+lYb`O zbD5<;=_qX=_Ul}^;?Do+pQCH7mWAG>+t^y7Z@u9ojG1lde(1}8&N293)7HkSiNwUC zKJ3s$P+SR7I^s}=7Y0;$y{CofMibRA$F>oH`2+cM*qO1;fi4J>7#JcDSOr$>+BMkL zr4uh`vqBeu+WMAMRUMEqzB7Uy52}m@L{#WK&~(ue9Bs(PhDvRTL{$C0olO4+-xoR? z=#A)~3a7GL%w?#dYQrT573nsEiBPOmzS1}Uv}A5Y!Wvch8+Wi{!J(mm`&tMBC2S%P zL*O^ORAG6&|LB7NkjXLF4XX}My)42kP5r(9Qz*p&N=hnm`+@diiDDE6pl6KUlx1j+ z6U&#A^Ix7A)kr&s_q*2QK+hLg?id+gEV$vIMQwsz4f+|KW`d4RldyDsvlVBgJV4cj z`xY0sCih`XJ+OucR>g1qa3>}1)x^{KZDWN|Sd!3|`AJ&EKn_aTPyw zcJefzj0#NEw6k;|=}zK)c{5QhwM91_yFSudUO?#1$uUcNhk6Q>q&SuH%vU5c0=(IC za|vmb_FJVMqefhDSj!YZ#THrhms4SF6Pbm)v6}@Rv$rD^_0-j2Cqs%^m;If(9HoCx zYo1f4&ikhEkNUTiLqgl5vE?ftyI*uHb8{U%N-m^opkJA6Z#o`5eSwY_PjfoB1Pt3? z$N-NOk^=bIFm7QQ)X{^T$=qi>|6+c76%Mv3~cYj}aR zpAd2<_d>?Wiaz)o302F7!6suK&FbdSFyk-u7(oc4uI@?P#N%T!{GX>}#0Pu!hFg+-Wh7 zD>DQ`q}>vm&Wd|%{{DQ7?0sR6e}kD4=Kyggd*s#v%>jRaqDeq!6!`B+P5%p}H| zDg4D#jP-H$`5So;-56|M!n9>@-Zm@GYW}c+RxBbKjs1mcoK|=5;kaC?ka3ID6U52E z`gh+-D>;*|_Yb50N_*)k*2Jyanw#TnM0}DG>bTCw@y@#NF)Sd{;9XyR*rq@{EmxX- zrJR>W^tEw6bv?8%c%M z@h@;qgvmGm`2+kW9vb*Lqjgfm-mmcdhj3X?5X1UbhtJB)?1H+(X1^eMlY#I1(pnTv zk3a;*eu%l6Gk}Y`sVHQ?)3OGEIVXpfj3k`k$O>0Xfemwr>wVv?V+sNZwQ0@fh2L}p z4ytm|koo+oQwcbhxaj_4@IMk6Z2i^>4u?@E`>`3PsE`2j&HV@(Yl?caKeA|vtof%i zA-DD{^uHLaaV{uu?Dej_Z32&ZofkZT66;G|D_iRpWriGKUv0almsPt9imeR{9F1gF`?NGQ^=WyACEgX4qh zJ@MCy*c-cRtV-*nL8HR;P39y1#mEd=jHQs5l`!k4?0>_iCr(uE-UYaQzAi5{N&k$9 zh99=?if@0r($aEn+*u{1k-;C$rYLs@2>NgbK&Nr(PD4FyVQG%ZKg0gPS(39&&QVeS zMk`Jks6aJ>ZK6Ut-+6Ik^?(TT$I4>!EZs%Y-Ngec8Nv*~CZxW$eP8=`dj??e-rYj| zMD}c~^6&Ws+`DI%-dj)kNMspUX85~iO3Jz3y=(G{Uxksx1leEP z4P91?9g`Vqm%2Ko{T0$XkHmu{VZ124fd?O1^pA>i5>Ur(C@&5ecKTQ3Upf7 zbtn?mWknzHcyXe$w>3{Lt)-z-HreZ$_TwaOPk&4BX-rx}Pp}3J*|pm_*U4ch@58=8 zS{`Wc>S9J+X-jdtwM7^cEK#p(>8%XGT#^Pqhi1<)>Or=JMF`ZTr{>%9;Z(q zB>DOg3|Q!Nnmllg3#})fd78}qUXus#k4y5tL z5J)3vO_wzuJY#=kN4yaNnOo)ADf+9P9ulOX9YdvodE2))S)JE?%2zl}yrm{jeCoh; zI8@FS$JmO}n+IhVsQ;>OJ1$mC!;_Vlb@V>^dI(+7XY}nv=x%g&*3#{d6UL*8j&^?j ztbN^K(>r&*S_++IfH;aSyT@&QnU}X_or+n+b#8TW|J2wdSks!tWb zSlE>6!11DQpX&mEbAx;@%M33kV@P)S065GLWD2{|GF=vWru>t*&10qbQ|q@fmHTq~ zXF59EGCDV>Mw=jz8Vj+x{yP#g(M0?kDYXn??#Qv#)dKW&SOiZfq1kEu(AX8&Y?ZIJ zw{I^kZ%>zOF6&+KU0b+6wJbs;gaZYkW=NEy4&)V=G7MG1jX}gC-M#AJ9UoIaWQSwa z!4{6Fd9rwOsBV08czz=)cJPZp&9FTNzxsujQOm?p%EQ#i5e6?DT3`Kr8!KxX0ivT0 z<|ZbVx9+x%1H@#idP7xi{l{_2oQB8V-icc`xso;B@mQYA%{}F@#dX-74eo>Zm?JlI zUMj!2S}(Qkn4&RHbRx#!Ib#9?1<7XOC#jex`}fcY#rD~J#wz%dyn@2_w>IlCbwn5` z?M1{TRlg3+I*&+7M#_J$`?Ad?6Up=8T5fK-^wAI3i25=wt2h7riN&C(2H{=yWO>w$ z6Gk>5V0(CbV|rX_Ux4)KHXh%qk&&^rj?|3kG|v3oNd>Nf{1cT@1s)9rSvPzC{4_b# z|GVSw_lNe573SG-;;Y0G+u7ciIqq3cGc&PX&pNX;VY>Y`DJk${lBB08hA~lR2I%MZ zxE%(RtMSM}Yjt%&dwY|0@sNY){HpZV>Dbsf%JlTdd0S1P^~0T(*ESPwvN9GfmTt9e zBLn&|H5CDl_J!*}MeOn267E^49a;JP#`G8&R?^kZ4%SB+h-+(V7V4d*^~~4gsX823 z9uUY_qcea?@b)T&#=d8yk$G*!#O<|Ru|g;dGRMLtH)rN0Wk{abDij2O76_eZfT z*_+mX`0yve^&bSi+MtSEHq#$H>_(I4*hz`V%B$mQy>atJfya>VO|GkY z*Fh8D;TdysVAzx442O(3a}e{Cm@UTslYpm>Al`Z_Po-&qKcoDyRl`#V>VI{IIhX5XiFAtu^*;yzm$^=A+X zb#)Q&2YM#$-Mc>(j@Ox~wBI(pr8ya%gyx|-!L%_(BNOMA#h7_fp}Uyqmf94^*n;^v ztP)GVvOHZKTVm?o{ITSSP;oDgM~-HySOSc`p}0Hbd+JOOxe&b$13+F*UgXd4@=U1G z5WhkzLuHatp{9(^e(nYnX~*{wRI&6;+raJ*i}!==wME$ELj=@z85rhjk;&i$M^c5N z91OrJ<2w2|1Rl%5yg*0R&cmBsFwxk^k#MGYlp?ln68CM2#vQ>JnyT+>OxuHJ0;tIz zjt_gh)`)2^%j&T7lP)t)|D@4ri!=EywB3Pn)+IkquoukoS)Pevu#Dr#_IRGVs74lS7h2U zr1fTyNH5DBr&I-(NS8eaAKYqrMZo!m&jl;7h(7yA>lf;!5h2B5(YqS+DEd}gC?hvE(3znuv{&ZjF zxIg!|hAQ@IT`ImT!`huMmXAYI61AA_v{wh_lS8mS}8>sDP~99GxFw&RqNn_`y4 zJczz#^G4Sox04UH_4GWft`&61&-x6u&)e)N1pd7W9Y%d2!cb9kWp$<%6;iCav z_?l7X!#8(ffSLFXTkyNKaWs5*fWMvJsL9Z|w`3_~k$sIfa*So~A;#d3aNBZ3N_upL zYNd5L6)L7nI{s5i)y&fQ&`FwQS1>TsuU~Kz+AWw5Uq10`^BiUg>Av4sW& zEvTWsar~;_kn-{IL7|i7)*L@4S!!xC<77P@CJ}!Fogt)@s4807rk!WGx{gj z_CwYmAd-UB&n+f3#_o7IiWM96v5M(i|JXd-Ep&&R(l<)CXQh5V3#`Kmohki>O6T%L zx6Qm4DTYnEnJIrQEs}r zyPIa}(2`$&d|6{up`+dP-Oa7IXfsR8kMFbQJfJh9BV)PBf{0|K;>)_ifVZMXnJzaZ zfpY;1<0|$sGkstam&s^DPyV(EMv&?u%x3PcwGc_57O^u-(D#ZudR)+V{-AS(ijzbn2lI*(zP-z z-n++AbLC18rL_q2LGt$QtgIb39+2|L`Y1Yg8^QC-W6wo$QQYnYmL)AOmtIyU#suwN zKb9HoCn1hZ?e6|KFH&iF)u7i<@C8bD-{t*0oi04;*R+ZxHYl~+?n!OP>>>7UFzeEd zdZqI-g7)Mq?$l>zVT&2vq<5Ryzhpb$`s?|D!rf2D)HsjRAtiDhnah}1v%6CRpH;&F ztPvKIy2eLq&b+wa{w(dP0-fgdPCD|vK1U5s#}2u&mfOC#)vOq-o07~;UOu($i0tdu z1L62bQIaKWC+QUa+NJ2GcXmVrk4buI%P5s0NbZUsvHzf8?Yl_EkgJcJ3{12JR*eNh zZaqgd)|?{NT{T5Rg(vb(Hey`N6njXXz0%?SJ9n~e%!qx0mv(>Jcn!^C!LTQclyv?F z>Bv_XDV+uB>h5=4*;Q#9b=X2sGSma> z5M#dFHTBWt!a;qms5|Mcy#)dUPmGp%m$xqmfg3mlQS$B0(^m?b-FazA#J2 zq(R-hWAnLiY-#lifjH-9EYRORW88S;CA*+`Zi8_n6NNyGN2Rbl_4m9S=v93pNKlmj z);PIrXdzPCJKX*Uh>0@8zWa>FB6zRyz$Y)H1wW1MiH*q*kj`eac?7 zTlW0oSkmK)xc(v`<74{d)YRmpgs7;vfT*b5;@I&5>5?PHoHQjavzsw7;JxtCD0K7k z#xE{bUqz^PzrmKBLGR=0`(IL1tMDYodcyG6ub!UyRr~9&lzx`u`_k>M8hSUkkg4bY z(hK#xmc2HtNh4-8w_~*RSA8x^<6Xs(S+e;r)_E@}PvukElaUGru8UWO>-63=-^0;p zUA!3EDQtcE%xSA)UA;?}dS?$AY_AD7j{X`M`MJC`RLb|O-Z(pkZL6=8QR&CWsY~1c zdN&rutV3hAT4sILoe_3X>u_o+QiUWLz^mlD+ z8`iApVa;7=rH6j~+L+r>gLllXOI-!pB{K-w4>wicuKXd}yEbVp>+i2|gXainPI(_c zw&|~j>w41QW+Z_zak1EItA1Ch*F3{x&5n|x=X+&1!T^@o9!}UQeip$h;j}Ssu+8;a zR5b!f9*gripG3}zi5&@&ZG2B#6G$zMeTs~f(TXyW8dvW*_Y}Ii&Oh^z9G`dXah;AX z`RXs5I%zp|$LyA9Z2U`>BS+Yn zA6myAr@Cufe~DG9_z=aI{=@M13u6J9AwA8gevN0?hMC^_yQAyKV-k%jm)m-2*>4&w zKPi51Ol@!I+}%c}{cpjossE#7IIXc=j1A}KECH|KsYU6dz1@yVr?pM8M#CD4jwL%s z(G9fWVaL_}2Z208$QQM$ceinY>hSdiBv?Au{tW#wdJgA=o* zwG|Z_h|LY=hZTo@H9y;y@6GcShGV!@iz)Vo!Rj{)r&yMwf>OfypZJ|8s}C0_VXY?b zr43DG@GxPgE$?_RK-nF?l zebhAI-_VkGuZ(o8{4wK-+=`Ie%)Tt}pP-11wausZ)pOv+F+GtDXf`MRB*7y|R2 z3JoCL3mcxK%Q6e`iSvY2d-C(e+^$YHjmcZ_S9-yMjRjmeQ|J zq~dA&A|c_(7xxo=^Q9YO7I6A&ynxB}mXXm!Pv3(UqkEQ?|3s`@%w`7Gr;osVOs}7s zVf{zk#Kq>T#vM>UI)tu6c*4@UlpwaQ&-ax-sx7dHITdbC?CO|v=GS1^b^M(`r_t=l zudeT7Yk|^Q0qvbpCe!~W_Tp>pUh6y;?gSE_#!5`5r&b4T4$kGb4#UfPsK1)uLG z|F~o;_l}##?jbJJ$c3XF-%xcB} zKlcSo@M1d2(Wku6{EY4!4a9dAV<43Oai%BGO>851w})l_Lt|B-Qr+nTiIZ;54uVd)_lG5Ppiix zc9Qm+Zry`eQ*mAIMk4q7%tSq&q438me^&ZB3UBcB>%I`Hm1R0*=uy%V>->=-v|CUA z`foFe*ov$xDH`0&WF(u*{??TdnYwb9EbOCYlilgGG9uMoD{|+shE(x>eik*6;njkh z*vPK4y&`+}&hc0vQ=(DbD!*k@e@RPZ0~SIILJ9-`7ayIov$JXT`tLQTw3HOTsw&$+ zx)DnM>MYfu7ISA!ubHXN(`}0EecIg5V#|^7s)=?fDlXiqRC%S}RU4%oS(B4m*;;7U zbW~19hK4K>d%8GIMpxa??NEsy!|W|nM>DNyYrxd{my#+HB)@a|!fr%rY3r3Q`_s|? zTd$87vtLU2_fO0J7N|}oY7DH56n;K%spA`IoWvE7W<4S`k4@LFxd{uuuJ?CMa%d-s60w6Lqbj?^k!!wlz>XUGCT7#e_K~;Yjc;|So7V7Piw8BtBgmD zH8^_WzZz#>hjn^*DgE(mriY~S$V~rKd2vfis802Q(s_nds*pn*S{zX}4Bo1>Atxh| zNeracUH+h48&dO^JW}yW*uuXariZ_)t2gBGGdRO%ljYXWyxcY)Dzl5p*ZolHI)7sN z%l3F!W|8#KGyG3-w77OKf*D%&^UPPi?9H{u-JKtbBuwc47%^M z#y)6O&X%05T(8rh#U`eU)OM+gzZA({KDFnG)ZmS%+V96_z(andzrU`;%`~XNEcNE~ z)7m}EpBbG`Jxoe8BHUi6$OZO@K{bPS?l;$-)}JeIP&1YL9d~)NIV#C#1AiTQqd9BXWc7h$4Xr4 znb58xrl8A9yqrW|n<9ZA)7JLd7-R$IWoa2atBvIP)vnJsd4sOZE9Oe`6_l>0m6ROq zTi%`YioF7Wp6qDg z>t~9N&dXtd0bZ*c61k3IrOey=@$9Tc+edC%^0bzvnXd>_{P;0_ccJi7cfbJ_(VMPV zi}_M)IZH7GfI+fLe7srh7AtlI#l_|3xmqE&7?2#VF}BOEf!~ys?^r>y4j|6)XU}; z{obk|W#{U)b@agZ57UNl4Fz{3cEL!i`yjgq_PUpVOMJbtK&;oS?&RoMQv=tbbAHmZ?aAF&_8x1wNOqLsZnLPxwc51~oCfLQ=%8BL z^jPi%EOtyX315wI5Mktr3QU_y8E@-N7uPu*?Hcc#ae8>ZV7208EKp?pH=BNZvvXX{iFpCT+vUZA_eaHsc| z$$I-)gNZTGC?zhMsy}!VROYi%?cLZlT~Rar;R9cZ$5xG7oNK^x@GVXS;d2gSIVO=B zzPCTSJ06dJ^yccU;a8>^E6dY&5o7`;9Qw3KL5rp7i0a(O7h`TJJjcj1j+Sm8Vh;4L zH2q;TOXht@=!UZWZMoyM?sSG^{bW+M8{Z4&hhJ-q4(q;Ud*F*rX}uWzVJg3yEkjX` ztU)kcm?2hIcWCcq#z7Zkw%TK=W(i1_PG8pf`T&gj5eG?MUI(1u`}fO2vDoyeTzk)~ z-g-CEI0Onvx{I**dz0F(E|0_+E@|$BdgN&ok7pTji<~{%((Y<@wk6R|@X}d<0?YA| z|HIgMhg04Ek6)!IGRn#hA)CapBO|i2H`&>HD>H=9A%qY*2_ZWxNr;o|O~=Syp=17@ zr~CW8uHRq3>*xAh*WLZO;~ekve!pI?=XyLy!q~pNLS#RMVK=?)OJQvC+JYR5Y*#vm z!XiFCzs@4pu$(vV{i7)h5XK3KdJ}vm=$3jJX0Mn22^a$Yu0UZc|NZHLCXEO9bKH|S?p%`sq%NReYH}E>bY^|K(~qOw?_aTqcnzNe`anDBK7d{$}h4U*1OW&d;%Uv+tStiBr}#}NaDPrk*~g=XJAXfK5$#{}s) z?9bdy3ah%U&qkXdFNbof(BZLu0J-NT!`sjn0HFw^d8}?YB3*8&M?BZg)eA8(zfQBw z8ljD{ZhDTMuO#l7t9$i0?`>9WAHQt7a zszKWtqcxrv<7d&y9_eV?TYzjGVv{KZDin+{s*giU81$-b`4L)$MrA_(pNGfi%GpjE z&$=L&kPx5XNmG9=#<;jIzx;R>j11LpJjk?hP)>ext^Oy;qaATX0+GF}BzauNL*&KF z^c@b0Edqb4lZ2u16lNOwy3`hH+?9(pC1#RQ4=L0r^V_||b@_IXO86fs-^zyl zZ!dtwiU>g%GeZ5VfJVv2Ei{xH_-F`uc)r(70LmQ3N1^FUl?z;M)#~(O?}`r-a^5;= zXS|~4xMzaWxkk($-B?&&XUI&Z^VL++T*dBZjI{|1Qh?_H=Um&Y=KNi00}}0b`FakH ztG&g}MZ7bEi$ z67n6ZT5Y{a;-}5L`T2RjhtLoaIt&@PzL zuG3T%sUV$mpB)3Z73SCNzf9wX^eMLe>Dw}w$3>xcvs{9~dD0`@!_$EtZ>A;J!6?5E zh^Tb&wo#UZ_CL>O-=I)P?^)mvUb;Wt6%;-R^MhJA(_w?R6`1Z-L@DVza_letLO}yq z8XwNKCI22l^C!BkwdeTOyhpn2k`Bwf;eHe=`T7%m38T$nOJ>>H#*UU*J5;_L;W22>13cNxm>5tg#Ft*-wd^U`zJ3k_8BgZ#0L6? z8g@}Z(!lDrc_mkNizPyUIHen@7GI)EWh|c6`{qHen}w~5RePh~&N^jm;h2xI3}ZBU zBP*SODW`Vvy@O=PDsh{WNB~qwlGq9cml5iFTLFg*w)t`GVbdGea_DJuXx~*2>Psy1 z>iQ(JT~mbl0oL*l=w>Z3ZRXdJ?>W;GqFJBVv+<A*DaF?Z&&)iAmL8B&O#l5V3hksq>2mfPO0sy8#8Fr2If~0% z$>J=Vw#uR2gWEa!&jYR#wgiA*P>khd`N6r@!7@AVZFYXJU2pcJxW6_RC5XxbH$Kf9 z8RGi90cWf~dNrqe?t@TuNu?XgK;>(SwxFGG26v?tQfa$xtzpMAoyUBJ*XM93DwY(C zTDG=@;^Nh$<1SO5);&t-rGx%VHMZvFo{3Qnn)_W28Gq+AHKA7}8{s}S`!?is z(ih&~wEtlZpf84pMb~>W1GwO^25ewAH2kKZYXpUSsIPxf7HepXD)g;YU?W!+=5iL# z)V?Wvxt9u{Ll}AJEukXf+y8Y?fBzfd`4xaocNii+#g28`iu3@x z${wR|vMX_4*zY3S%(`RS%jLa%d^~(Ye!4({;qrI&91gshQTb#T!;tp+{R0LFK&6KC zoeuU52`SeJkd5<~XPIqpj|92VPC+!2L-~jf*X{!oCOX2uu=KHz*NoDu6fE~~e1b9i z{*RjZS~4Rul&eq+fNsaGj~BZuAmjFDsUN06;Nql>TUs3Z$0_DNDt4)PR8ZQKyZ@~Z z)1l$)tYUoAr&&O>p;kZ!;Z~HJTb{i9rXM9Qx$eOWMnA53GT532FovWA;k^eJiU;+s zy#=DFJzITw)B2Xv+dTQ|p?-dC%F~KV_wUfo8s(Y=EwrzlUxNZQG(628mw!Ir~ zY^nwT@fRy)8yT3I-f?n@xO+WD$5BLoZ8QX^h__@!=`_A%@bF4WH5#oQ-wp)322Azo z9L#Y;iUNj>>YE@bQl+bFNG6933JGvrUaOe`xM)aoS#sShqW6*^QpLGO;-gVkV0+c4 zk6yc7H z+mS-ZhIuY@vr9w1Kyw)JYB*x`^H1T#9gn&&%Gi6`C&Hl1hA7FzBt7m1>)GqwguZWa zgn!t+at*Y(y{i%eCR4ThuqNzTDlVxvpyA^}qjJH3tv0F->t51ZTW2sdZ&vSt39iz9 zDCATYH1k3HJlnjP*{jSfYx`MjrTI?>+zQq5+QF!J5Z8Dt9eVP~s6?7mYEqg58pOdW zcM21W^U^0)6Fq?Xf`V>4FO81Zyvl0 z5|$bR9^91jpNl!+NMu1$()BXCwWDro5~lUZJ>9#>Y#r{7C5k+h4XJ7Qvu^WSklx?- z2g}WOfzQxDgo}c=H#eVmREE^+7K?n9O!H=5J$Q_|8rx zHmKLoxJcW%Z1?E(@^VJ?P{N>1%`gTuI?$2NOeUY76h|#X)8w1j;tn<88F}&a)Xq@5 zi+U{N&B2GP`|nm-A(_=~Aej+p!Gte&kJEZ(nfA!+^k6yTQTq*~2Qq8`=&Lg`S=jXS zemgTq=QY3B26x6%onI+i1L3zGc6Z15Zjk6y*Xk2b(;W@+hlcza+45X8pVE^zhQs>2 zN7&!2)yK?);Aj3ZFlS_n?Idk3(?+eVWI~RCq|0g`Jaw7SKDxxm!QD2`M3K<_)o1&U zE_x&*T~0n;zSJgk>+SRD=10qcgM+)TUT{+qc@p)PR@tP>jrRF}u|j>lSkY99U7u0% zT{p`=|54V}3g3$bNzcG!Vv_CbEM_efRCwDI>S((4>vw}ODf_9^i=lror->;yUnYhk zJnDdC=@&*;%>?0q}-r2GyZu{URWY{@;?fUp=-z_1L&8dQE#jEb&z4Ao(t@ie|E_phf)iqxF z<136$pX+f|@$yD1c5F;B)>_r*5ph0|J5$4U27&iR+ria!1NEQ?nmw%#KO#=jfemY@ z<8RCDP6h12#H>7XHkAi7$2X2AO56^k+iHM z#$v+CW@@u)y=JH^ zd+4dZTl4of?jvr>eOuf;e|)mnd$&<3Q7p?_xKZgg8zMnsa60sOY<@+*>;?2mM-|1$ z1H38H1X3i!LlcVmt%mx;eWPL$QULnqGe04_{zBRAbFLd-j|&OS@eAU9WFd3H#7q){+0#CaqccjQJi?yW|BojBF=#3tkL+ zanFXA*A!n}RV^{9?Mzu{e#BphyIuny-IQm}Idyqx;jYM|c%9GJBjj1iN9|GN!}A{3 z5`A^=5G}75InsMGqK#mtCYxc$Z-R%lYoS8Y+-Kxfj6Cs{WWvLFAq}G63x&Np;^c`+ zLn0=#Zg_2)T$x|VhJFt8jr=Gaqy?p&b}rWraJp5<*kqqyxj6iDf-+9&>sNx$vv*j? zBXtNK+c8C1;-)D3fmNIUN7fLoo@*q+btZkIqd@l(Rf^#5zQ1mhc8{Zal)Pc&xThf%Paslp_nf- z<~uR_)^e1ADwjEehiWBvJ-Z!ih!KY6KJgN9ETCB<$#m4lf zf7JSiU%-{WA!dw`U*3AZxN|<@`BTa&XpCl97NJ!Gd!Nv?6x6$>@{1h;XKvgfgrSwf z1*&-U;$gab$uI7`sjBM5aH#jFYXnNs!K!DY^VMArrCD9$>*MWv>)D6Gul`4W0r`~8 zKexDOM=p0I2Kukz{uEMA?XfmUZ5Mbiq&ztA^VhCF5s)U`ApBFzM-^1{tiN4AfJDZp zA^*^g)SQo>pXWl@nX+j(EVzsOTlxJP(z}G$8>dFb#uCVW+JDT<(Y1N^#l=^E z`1o(-mRu^-9+Gd)T?ltD-i6Gk$Hy}M6lK!OBu?+kFcILjN>?q_d*m%1{wyWE_?;WQ z5}~KgFl5Cu|Hj+%z*y2t^y0;5WI~_sMhDi{ljt5$L&LO^w;D_Kk6@Eepp6v~7TL`a zTl8tjo}ykf^DBJ7ko?9=+*3NI+xqAG=L&?g2)--It3Gz6&(oBxNe(&U(`hms+(aP4 z7}nQ~rS#Co>No!_SsLBSO&Y(?T{(5H>|pJ(6VL{Hr%i7?XTVCD6xpyb%=bQBJ{lShT^?)1{ao6n%d7e@>MNcF_z zWTRcfxNrZ+NM8RnZf;v&3CLOER5iqkVa$*U`ubH|?p~QF?(E^u{M+2*6*PqG?#8Rz zHJb2+x|#j{5(Cz3sCL#-$1577uKh;5>9YsU&%8bo1NK@BOo_o+fQ^bZLfB|>BlM6| zECGxJNO5S1KiC}(<)AbeLZ4%nHK&x=Yd_|%L3m>L*s?(AFCud)cWD9zFM~fPhUmclKWeoW!Ixtm!9la?O{2QkrJ`f;QBl^Aoj<@O2!Nyud z^T&^5B+)&#as7s_RYsy^OKv)kgva*w_<%Qoy#g(2yTi@k?gqcl!u!6;jdXQyP8ADb zqd5=2yI+ZsMm@6>(ow!aub^es$HDYb^P7(kW4pjBoA%86V{Y`Kbi6Ej6H@_ib-1n| zZc^Q+6q+9@BPMQ}^Fa3B{6Y6ld&ycl=b>S_JWtY7u_$sY8bz%atrkh0FMuq^bCSiR zl>6M-Rpzq*u|gjywm8O;rj776ZCmc$j%C_0p;1+o0R^EwId`fGqTHZjjawBpAbh*8 z&LsHS_1L_2mWv6qiVrDSDXOb{7PrNcG}+R)ZG_IFcb+{jsX)wmTuw+q4kvfMsOn{J z%;ic~(IEkjr7-XN7k6JfSOy02%RPl!86|@N@vZb#mhu;Qzt8=_5Va7ITv!>mps98~ z(!u()LnEbN7&9Y1e_{U;q({oj$;*bpxD2s=Nv}(pi;D|@s4`8ZfsxVG^>bq4Sx043 zk1ayoMc^e2_Fle_uT#I`3xn%Wb-?(W75oJ3>&BryB|Quc76@g7odEq=BLS?laqZB$ z_2#9L%}2P$1c+fs9%&A@dBpn<&H}i+m+cQ=8olN_gFWY8RmOkquG=jL!w`bsh_-Tr$2)?Bi6DLl&eX@M3?oF zCMP{Bw&P))3DxzF6&0WA>uHJc8yZM6zuQJ=GS7f#fv(o`(Zh#Qv~hDg{;8CpyhQh^ z<{;ebOPkDCMsroy;K*rZbp-8|J-Vq<;~B)+bWqUbOOu(jNzIAW50@V*;Z&GpM(#3MW`}2xR5niZ1g~1==_X3kv$IEzkP`8zU5Je!8#n?v|KX z$Wj}r^wCUs;Q|0dyDFSGDKav%uqVw&i$DTPy|=tvtsf*yXxiX2AHF}GnVEgkCUbH% zt9SDmu|ccsR+#<+{27NQI^dpYiGvauG}k6@SV6*X8rl-rt~l6ic{)2!D&caBDNHa( z2e2%pO4SE}=B9ENPlS4o*!aKz$T9fRK#icz{!mWuCEBir($m<~8?ck}3-OQeqe2%G zPj+Xg%;FW#p-B941)lw|DzB>UP!1!L{CEif`R|G!!R&TGzB~H!IewCRIJM5Frvk(r z$`$1(!{Wi+y}elkKy7|5dGV#Ca8m%|?938u2ntXB9P?Qy0DlU}fo&M|j8oH+8{_BP9I}vqK?%CYgUF!$=JjsZtqT?&YJ_?*aoU~JgYYeEE3Ck zj7?3~+z>xH24#KnK}hcCeg8i9QQ>3sxi{kQ+Gg@d4`+~tWYI9~JH5{r>Z0C8S-<;6 zJv207Jp6`1CL}EPyxjE^Wjp8-S&Q3fek7bxC7xw+Q^s?_L@mD3!+(^XL{#JWsY{sLdfHkfV9>uPk7PZsN`n|_I}y$ zZQ+Se{>OGQ*xB7;{d!U+XjYjRiz0=)IQxHZ=Jcm%Rke$T)up-R`S}l6W_YPchbS zpT!fC(p~;4#I@q3n1jA0DGam22Gax9o;n*Z+vueNKE33hI{7^mzXFn~gGc6pSF_}}ED)Y&t<)-<6lr{mKnpi~p;eMso-?VE$}uFuaW>Tr+EW7CeA zdSf?wc;oUHD|h6eM{SKLV`BXzpfXgUNr9qjF$YMvpK6&0;UAk5z=`2d&k~|h70+@R zpNP{&iF?e!Gd_>tqaeH<0hHuc`}L(I-ZcN*dvCQJ3{n*cAyvq!^4QYe#-?*)$4=V; z{(}w*Y*V1Q?zC1Ubf_AG2VI@Lf7uJU0xj10eO~pa-?z8(R0}!Nx{dcw;ewAqw>132 z&t-INF!W^c^kIQAaE!j21uT6|zqKf>F84vDk|9F#?%k_VmWYt%hPUcP4Q{i#*=29I z=Mw{;Ovun&hY4d7IA-#ti89H;YvLA>$i;3Xt7RGP))D-7>qyqP(TDmG`Ghf7vvU}0 zOdK@RM3Ljy^*yKmN%y+YCXj&nA9Dm=ka$Dy^4md`S9i8_ z-hZLq7h>KF>t3wrv^HV0QeYvU6Z`LFAB^7~EFa~eh$J{SWks&d@WB^qsho5A;H4<= zXny#Qa*RhXQi@U!43ywy);GP64RYZ>cb32Q9?$BOfnd5Cdy2#V{r3{oi!gKa>a(-B zdA=Zx1F5e12~yr~AKWdt$HR<_ zeOJr?_gpjUe?K4Iaiuun^_0$mpJSf|tl54U8;7e&%y{Z7V4b+c!~>$)?t`T!1JX5H z(Z_E8eb1&FDV>@JybAZxIux77Fru{H2t)<5Xf|7 z72pHdzZcy{iwsPDW|VP}NM!py-|<58@sW(f<=8ZHsr|7ubCAX#GW-L=;`ymdTIm(# z3Dx9la)S96cKlSTR4UV}4^zS&3-t1Ta#Pa&E8HN|x5Si)NVp(*zhxkvqGIzPq&A<_R4zO$JUk;|`nxkvv5Oo9Ur`gos?o#6+#!HobXyCJ9K%BjU)iM{ zYTjIgVNibqLHsJf@eYqMn5!vQuX^t60ObS3g~86pp0QWxz3`PC2OOcPU56_(gBDFM zHZ?I}C3Nk^m5a*Bn$iD$7@nlJM(XnG#3J7}+Ngg#S(0ceU?~fw<7P+XZaRLrMc)CF zO;8GLj^tfgaspN@Qg@JKK}0q!;K#vdH26RKVBsJ zcglc&`~Uf)SVqL;|Mmj>KfjLvPdOQ=emV;&OV;W98@>p<)hv&?@6>TLauf-~acoy+Ydx>QG%u=MX2i#hn15+4r%^y9Wzc$W`;Ty(jT| z0*i>BWP+w4cryB8{w>mYc=UJ_3OA8m+DVCu7)jDf@tN~bXbP8=iLzA8Uy4yb`a?7V z?Nsv~a0fwE7W&xufGr`tJJ=HUxX=Nv5e&ZLS{SA_+~5TthXbM$#(~HP!KxyZ1j#et zwKa#IwE*>sf1({j2Q)#Q$a91o=m00;AgBpyze`IFHGz|hJ72AmG=gt$vH*xxy{Hmc z|G-4Z&9!W9!>xHF00K5h)h$L^39guV$9=Ja1N5})nGe+4b)OzN7_!)|&@N~H{=%W| zy^TEr)D7I0ib_gg9*Vk3(esq;CvE!K4ofk5zn4~mOqUcsg`Ad1oI9Hg!K#z9GpekN zL-|VEhvNj;TOfO5Nn z#|CUv2uU3Rn$O|xxNL8q2KeZ1@A>dtVZ&U$gvA6G zyu=wuI#OKrLf-3u+!K_Kz-bR{Td5p*7nqp+aTNSedgTVHWM7J6uYG#Ce)>s}nAq~4_aT=?BS`#-*-9g|`5wZ*rIhmjh_`y@ zn*f#Ppzq0Vb7QAL*XG0ZA3vUVU`97y!|Ob@%P`@S@!x)9Rz?(g)V9BV5Hxk1K=`-_ zsB`Dfo|u2yV%6aTV52#3Lk}pfzD#^M7}Nes)Fo)nqfFOuO)b8MJ^vzCZFmukuO_n< zXqT4P@#^!CkdROkov$+Lso;4ZkGo5JB5=75m`HhX$8CQd7<*{jN)n~p3R;H@w0Ih4 z&}lo^&zqYw-@chvX-`2)=Eskgiq#^{k;4x4*-Qc#uV=QiQ{9cfz4-?S zndJuOiErH!l!m&6nAqr#A295i6$o54hysK1Z+oxuDLT|2py< z;u}Pf!dFa<%`;!oTs~-23JA>1%m8^%zhUebjX0aB{o%Am4CX_oDP~FBYUhEX={)9Pv>POn>=Bo-hL0#Ugz z>-dRoie!QlfZgOPGz;5z#Fgg6HIIa+<}GO-b$g-6%S^~$Ad z$r0ygXVUd}sDLOtykcnT&CAcncJ(5ChenR{=)?pLeB(~9EG^6W!`Vj)yhpt~J&Dhr zg&b#2SC1FV>=NN^z68q=%`+I))%gWhuTJYQTv`Cn4*(g2VbJ3WP#!Miau<>tFzYBB zG6f2G#e;lNlV{K$|7FF(S|6ip%A1yxRoK9Mz~AUKWK}NdK%GSZ=TS^0bhbp5eOX+Uw-a=D;K_Ma72pC8j2oEB{ zq}~ic2QDqa`h-ATPOTU2Ah>Du+5J_aLo9@0;O$knGc`9CAS0xLk!#e)>Ao|Y0zkNK zw}Spm80-#^>TuU6*BB^8^@23A&ZOGVSy(6SLg2kpO(Um0(a__a#r#%vSn{leTx#fW z1l4x;i6M_Q$XtW1i!m{U4c-|f$QCX?^QePR3CNejD}yV$Y|401 zdAhlfUGhTd_t^F%Qj3_g)FDN7+9q>!PC<*B&*b;o+N2S$V7lrFM&<+qi-tT4HnSNE zmQTi*xezJeY!IDoj=MG==Yxk(Vj4@*;SRS2a3%X-6!v7#_0*>(4dXwxvfBiB-s#hm zeW(U7lR^CX2lU;r7RVegX@DEtF!dP62!d^ofRvBo67KuwyVC%|4ZmUn2D0j(BZ+W` z@*@MLu0`kyg65VKy2 zv;vov18oQCW{3(zYYA{{1GLS&2k4AkrID)a(1uP;MFqVzdd1*F1dbidxFhX=*b4l= zpFiOSg3kbif8ZF+d#hAx%!`DsCwq7I^13?1{65JM^@Kdm@K()E6x=Gf{;Nxp=nbFN ze_lbz=|D?ZhdU|bV~n3o!f!#D6m%Py&ww@tu+^H7&$u`4*DB?tr}P=RozL2Ox0rnv zc*b@wHV^hn@ho=b?K?%{XP?|*PjRP*YRIIEFJN?oxWK^1$5*I*GnozYg};7T;gY*L zb`B1mE4xC(@S-1$N~SlI2zB*k>glbdbD+Kg(iLb;Bei8lBxLr$Jcbfk#H34yz%$F2 zJ)>_XpR)m3e#s5t6O?NC60N;+0<2||=9Aqr7?jopGGn48?v2i*Z$CF=NE}>$-c6~Q z0wFAM2aV!mOJL_o5*+fu((vvboO*%0X#60{LI835c7Y}*6dzRz0M8BB^h`9gY5+Iw z4zuQH%R`Y&D9Dr>1i7W!DzPbxh=^p1d49DPTKfy#HTbeYvqa{&OiYxN$0?J7mQo@k zpqD4N3_*sVl8z(&gG0)GxKFvjj3D7EsO~H!@t7kt=Zg{+vD>H9Q&}Q4-dX-PIr#l$3*w=*zl~T`PN1FOJRGv*G+d*8`={2`A8UBL^@@9#n56$O48lD z1pf}(vj~^N0P(EstSo?mf?^J(1C0YVLg{Nt^QNMR1eoD@R5b=;W}>11(E*DubWSvF zf_$ie6LLtX!R5(y)bI*mOTo@dp^zmVJmylfA;qlLANY)&^lzUM6RxkVXJ~TLSt#8{ z+6%jFlWKGB$>ZS_8=5FgElf8+Lqlh!E`@?1F@Vy*V8!EGQ#R;0>a+*obT;McswyCJ z!}eyv7tQ<>@E{k$p}P@IIE&as>4V=OWP$RjmDO2=J}+@8A)&nfrC(dnsk09=39kg^ zoh?8D0ndgxA`TbyJZ8mfdU}3lJQ7ojUW9!FDBIBEW>nJkfD@*IXyc`KzTXOI&dGaw zxWBRJQRh*o+W+yBAM}zXvyBc9!|^4#bME)Qug%R(jC@u{>&{V$aSiN;Ko|=;ni!_n zB#YSE+5$*CP`kavYx32rj36}t60qyCWZM%!wS?ms{F^1PuJnp&qHx34;KQ^ugt|)- zTW1Ai0zUa|vB1g9D*$9+&sb$H)xH0c>G3*1_XLqo3 z4E#LZsogd?=;8kU@I1~o0hoEAjR$a{EE(|LzJ84wUn7Z>BX0YG*|I9H1(K!b!s4Uk z%uf*dMOhl89v_^8N`WvfIL8Nz^_%w_H=NC!C%Wbj z#dgE=OMc(Tz5Dz9oKkFhoCoPZ?^aYKue1k|> zy+kkkpLR>~GV?Ot=9-+APEo%gaof%jm_Fc#-o4xQ>(?(3UWYLQI1#f2QnW@h7`%rw zu(vqFzrBGo7DPeOZLn0%DU-s8kUg>*`jpf7OpT0;0xSxk#S^?*@VdTrCLnswPx*o^=JIENoUbc7@7EZX#KYsj33m^(()+rtw9X0ef?>RTe zPM}_Nwe5q2!0#QbU$(h{0qj1=d>ADGV>tw9Yd&##wY9Z0G4ckuu8ThbjoX$$ljWiz z7N<{$iHX520e`nJ5MwY-yVT@J2LojNeuA9{PX7V|@LUrZ6Y>{R?utoZQ;xEnyDYiw z!|#97LOg58UKl(mb&J_h&VUn*`SRMoEATuFu0Y6#Q72PVQ=tFD77)e^Fh;1(!2aDY z9L7u&RX4c~soWTOxYq0`>6w{OT1=dfVO35JvRZ)2_n`9%TCk=JuK=ntNMT)AKvMFk zg^)tQK{$iIfmaEo6Cjz5(;p{F+ER45*Nnr40ySY8VzaUu&@KaoIV2>+!U9kBxkufn z^75_KO0r&^*n&S+jdC?YDlvHJ9m7MO;|OBU&( zEJ06AA_)haJ@7}-(b57F@ougrGa15X_2p6ezhCql?xPNYv;YGG1F+9vG$27-5)Jve zZ~f%kA&maIne^VUkd{B}08Dq=-OlTlPEJk$(QgW~d^zgGNKY>b3 zB%>AuOd2mN6mrJGtq%=Df%IAw^M?O{X$~+7-AU)CYXQ6 zc&t>HmkYu|yBpBZ&;Xo_<^c}4jqx705$2KL9kyBv!EwpF-V5$~4zQ@OK&{%>w}#%^ zjeh^|*rx$nH$XfLjXCJWd0tLZ(i^dG76QCJcvrS5v7693_9>V&%F?I=!T@M(a(xrx zpEZJcw%`V}Lurs_K(QLuNTBDZrKQ1Y46uC~V%P@E$~@^g2;QveIueH6Oa21Q23n9C z4h&f4hWQiMPg_y_ORuuC&CJdDkt*;~aPkD-Ipo$#O4JIpr53I$;C=Jm}gilgVasVDK=;0m1z@j)J=*@=0(J^WPaIDn)?op^?4r>I49)8d4U@^Yzz{+mNstqn8eB4HayEo*gs^HRX zOf>>97=FUJKwE&3ydsm=f)xhj>Wit!b6<9XfVwZwlITPb%?#j?3*nZ5cH{}5pHTyw zv6t6J10Ek=-~GKk7xZ%Nqzg`v^B3MX+yTt+xVzIs5E^oNI1R)0&FFkE;zV(H-dm#*Mqmv?fI@`5 zlz@RIARue(Z%n&7ISHq$!ul|!8G-S;d-pD6YG7H8rxOJhF9bCudXM#~zelo`)v$VPjCzW4;8;zp3Z{HA20FWni#6pIb;t~YU zt%|t%>j;!qg+qjc~2sBdV zJAWZ&=pPt>rcwZpGV)&+CAD{T4L!jw9)~o4BDaSFsi>$ZQP^u8F5kn%t8D@elT(wE zre(wNikNdnf1H{*m6IiyJ`21rFL!rybAylvj_*Z9c8e63l#_Ecf0vysmq}yiQs7yD zq##Z)2-PT|mStQsQ-r~ouDSYE(pCz3hO4SzxAWGfNe8Zfm6 zTMkMGzAN;wCR9RH6bAeXi;9wD{)E5=1_%G(IXc|AtA*V2WuCf+Cx|S#bXD@VS}&-j zf7cVwdROUPl_5xTnK*wGTSVDi(KkqW5w{(WI`!ICqO9RzS-yOsD#Oyy2gt&e$f-4N zclu%bs(?mWlnwwxQ%jQA=G_qB?DKsx>{z9Zg2ACtTH_ME;h{XoDEAQt#FIx=;{Kf2 z`!4CsgxDYm_oDp2Og$?LU#yd7(JIzePX0KarSYwIx9F-Y8N6NS=8^=sAxX{nam!`J z{Bl@NwNVgaO-(i33IUw}92cT28Asn*(8cD#fup#XNTKfz^M@Ut45gv|L1=&HTBgBWCOVet(9PYtEydilofc?82eR{IMpOFC`t=R@vR`hz1z1N>TSPF-1 zgKiD<`Jap?H8q_n*-Om4RQ+=)=Xn2={izisF1z_dH&PP$PY+5&6E9!Rk_s#ZTpVL! z=;o9wf5_&POIfkrt#fzp+U1B1kBt0T$ULoRYJy4!IMkZm8yXv=Zlq7p&^4THbufJ$ z8X~GYvK7jGqiY+7>=O(R=jhD}++BlEOGyXZG2^bJm!Lfn9qx1A$ zGTWPA+>^fK{xXjwjK#Z&F}~DV2t~lCTvSc9uyDUUSx(l_DRpS*htB|%GGN1tBl7eq z>b5FRW{Y|KG~%9Q2Uu2=ub_82=N7uUv>!ccP%jJpixw(Su@N$Up@L*n=IPcg=II_% z&8pUJ*2|GLqHQq4^>-c9tC)2S#^oc21g!eeTUMMRjdOU{??t?HUZUj)y6>T?kh?Nk|gA4bVtXNoIH>$(x% zN=Eqchwz%0_+i2>P!^qQQmhP9G0RVe^qQNovul@e)@8GlPF1ZJ=wYa>0UXaIRAx)E zxjgA*c1A|_D{=q5?=3BE#>Nt1%=8`eJ9QGiE(ue0o@>iRCkuG_mIKR*_%NN&4*fmH zApau#7*v@<69(pDXyt*`zKYgs_&g-A7kA)122N-vkv8c&xKA_*eiL^Dcvf<&ketR3 zYxuV%;n3w-_g)*dy0)R=;=+D4(+hko;ct^m#I(vn!n(O=m# z+__dV26z24d3#P~IOgV^L>ii!T&j$2;t1fCl|Ui>X)m(7%LHJeSFdOwl@CNPvjbo) z>glI_6pwGUfBry;tpY~lZK}pHGmi9D7F#d0Yo0IBEFKILz5ua~@5WT`qNn5STLJuC;lzfCyP*JzaYzsebsfY|3(eF+11{kI~gz=x3S~k$Lvev`K`9b}3#-YCfviWagn2Z&>T& zORwNVS>Wi7KYa%@v3165!Ow|awC&B7va6I8<-#Mmp+x~UT-GE)wSNA_KiZrWV-1Z6 zxE7lq#ZM!!>H;Z0plC?*oArzHBVk zN+j!Yq?>x2maaPJLj3$2tm!K%4S8#(j}F}Sg83!N~&>ZcGFJO^(5!? zxcR8(NkVDq(2%A8&5KMT*!KM8pfM$T5nK;2TQ>Ai3tu+i@W9+}3uz%>z^DJUWBs%r zeOd-cPxob2<{zKm-kw*%4wbAVwYL*JaupRhxNXEMOSZE!3sahlzSPq)fi81%owxXk zB+@5pMFaNx6ZzA+=k1zzUVVCCZ=9=1i0(c4WqvAV{!Nr1oJ0Lp2!iAc9!XMUWF!tj zm1aB#SuqALT>DGQ)j0tLkh@cU{JiATakU(Yypd`HbCbE6-)t(>(VyWH)#&%3EHpGO`9!zfD7!<1 zZ)Czpt;T&Z%uPH?G5=zlAinH(oV(V7MokEgWFqml_l=DYzkTynWhYVqwTf=?7gcd7 zX&-)|_Bh_A?*JJFoRpVH@zJlOhKH!2U45QS@_ZW}-c?>@d0Cwb^X#=w+y2qjAs7!#H9`ylUDu)SmJ0;LdZq3eWUmTwjF#oV{OjE&zG6sWBW z=@;u>zQC#s*@z|+zQGl5`VQN|BL8eU8p)|?nHitJId??DRe8ZAgX#4w=2)u&lk|*N zCWdD9!7B^jcF;Lufi8Z3l_$G+t|zlWyDH!f-RbF_NL$*VVY@(k7K=`+fjn{NY30C* zx0XENS#eF=0vye|{NrOqaWMxRO9ZH?@CBhZqd;X?U1&>#y(e2dNJaQ@s=+h5q+(Z` zE`|qqmvMtGm7}*aOb;(J6Xw|t*!4>FPfa<1L(okB$E7T=`GnRTH^E_i!xc=U^c}jz zgTI%-mGd2(g{y!5^sEeTOg3Ik?8pf`X@BxWsZ7Mdesk1`M3xM4QY=XphCa@`v@zdZ zUD#QZBG<;{wRqCH9Fb!i`>wt>?~uJgb#8do`(@`l0LJS&p?29I(dg&0siX4%?$7u4 znX6mR&gS1u*h_(93R;OJ2_C&P%a@JlR{WVI3J}WZ!8+HqN9ljVn3G}~OUppAe`W}$ zNS3@#GRl+$Hr@@_>X*FG_XzBcwC?Zx5xa`veb&jR%p%Z^!7ihq1?mL{2L~6IR7~9k z^L&+(uL4eqNy=ef4UN1d&ZNRz&ovA}k7CZ(HNzPfexaiNd`@WCQOvJ0C}~Yiom=V& z%=i7;v7w=%E+R_c8z(Nw4~w^iue5QT;?5{NKOwz2wLD`R;S#A7>bxwOg6s^`wjb6= z+}lnx|FteDtDPV|=vZLD89*20R08Z)YN`cZy+;pHP6ek2PEsD40jU=M41~+1AUuR8 z!7k+h+)ka=kokfV`QlE)8V9~bPE4LbnVvgw`^~?WBzPmP(W{Ga_4SH%U4O(Se+2qV z6QilAp?m#=ZJa`rEF^H(M2t}1tsxri-`Vlx3==sxHh-xr0MU&%)QKFcLb5Kw33p(Q zEdk?Uj-OHJPA>{x)bQMb0!mr3xIv>*ok9+d2c2^+;V>#*ULLs79C|&c2c=6(+~yTf z(rKlKqUmAkz4U@jnF3!PbS13HmlXQeisJIVx$i;>`?yp=8IBhlBjr|20)o;a;sHu! z!wn`b$!z=Tj|m`m2bs#6@!PbQm6HifN$@o26EFi{o8>hqu>yJx(0N46$*_N;;mNF-%c zJoq4e*euXASMxdkO%*H2>=9KqxDGg37k!5yMH>v(E-zOAU*9ZOzjzSF*Crckq!<%} zR8UhE;HP6{odzDx6&7$;jXUjSPld#_Z{x2=$ZEaF<18!Mnuk75A#VJc7U(Mz1F=*ND8khRouqKG;p!Akw(TC8DjLGr%MPpflVQm!d2uTu9NLkNO59BkT63n>V|- z%f#qOqslqX#O6Vh6og-1^}%r{JbD&DbfCNPILAgu{lP;$Y#wS_q6cCbj%r4@?ZcR7 z5FtO1VMWm30cd}1)C-V7bebqZjQN?wWW4HBtt!4mzQ@sonYQ4$jR1J zdBf_R$`W@equQVZ)Uq`F-IPNao!Vt*dM>Y;x0_Yi{R-9OSq8y?pn(HE`$CA_*ax(~|~jn71Ph*<^a* zh?F6#^~Stw8RkY-z_5i57uepsy~T3SE8bs&r1d%Hz{-lD=<;yhllUwrgA*T)Z^-F_PvDrP3@XpFlf}#IioH0YmC$Wp@qqbS8glr2@-5 zQ|?lzajUWK^e*&DSkgc%1?0t*Xa4>jIflGmaXD5_UD~z7v4(+;-tl6!&;Fk=r<|IA zM=m6v{!Hp?;@{No0?S>2c2!m63l$?}?(N7Rwu(E+Z}f^Q$JZb%&!nS+7O~>~JWkN8 zj<1OYFF?emYNrhq#o%DmCWNHd(MZed4vd1<_YGHeWo?{Gg$ok$VVePs3|XdhbQdWU zV87Kr6+MH8K+r@1mJ~|A&7g#Dwa`3Kewz2TZ5H9Xp6=zyN}s)Vm@}amH{(E-$N>dc z6_nS=8cZ7F+93bkCynUj}y1MH2&WMt?P%UB72c|oS+ zE*Om=3o*O-Ot1JMP1TWlV8Ef|RMghip{M7q@{#&cr?u79^$jM0bX8EIav^(r8EeL& zTV=lK{B|WkR+mk(Y(^Us>CWOwrrZCY!md0Xu5%3!S%@TPOwm*j(MJ8ma-&RSlBqQz ziXjn8$9ky{TP(4gOjOcokxZ&dt4N3>idbV0qoSl@OC*?D#uYV!G6WYD_c^2YcmKTK z-`_dscYf!5-}`>=^SsZ4B=0;*s{o6TVfU|G8wyhS-~))sG%~)pg-ysRZx2tAb-4^} zk@5^6lfo$K+|+hb$%dUJM|p)i`Qmt3v!D~k*1_LNHs-+v1)FdCoU=D z(9n*~nvmUkz0Tx?{(8tMy_K1^1MNO1Iat)rmD;qMAPLz+S!aRT4(Xl1MjawM2k1WE zL9ywsFwwRhR(;#{8k;2s!w4m_N?6u^pa65pk5)Yk4<8U2tZn4E;i z5fNbd`C%GgB9(5^JwN-Y09aww$1O6{q#RVX(-xLtf2Wzgx-)pKx#X68{$OC{@688j zbCGuBGx@zTjf0(I##OWGk{r*r6A8+7FaMgOkeH@s1us!0#O{72vHR%>#q1+tzHf)u zWrpKj??jn)AYcSatU>QTC1q%$CMMvNE?Ejj^Oqk=lIHY{3hBTIvV3C`jW2ul^ZBan zWqrjA#x0qE3f`~VRg7gz9K@&7(Cc1Z9Wuj9zqj4iJ-DiQlzHYm5_5}K;}QX(dMVy3 zD43$XTXgU0u&!V0EWYu>F4tm}a612-o>9yM_GD^%WJCm*hJVKU!-^{|mVY0;KT5{% zq3ieq?z0#2D-@kqTWA~gRaM1#c`s*{l*7;Q+ceJ>l=k!1dyYP@_kWF$c zKAV3U2zgjtW{WjxreZguitb~icCF~5TMxYk*`B*Ul`>n-m1l^jTbO0g-?Uj0+T zw@XVvdLP%_6(@1uF$oy|1X4243I8nw7IsKEZKQr>V13OS{;4cg_@MVSH>L6m;G!X7 zod8_~M3uyIg$KnS3o9NydtrShCi=+oyPEY440tn33T{zZJ^?Fn`=R|8m?u-K9ijp3 zE7JxI5aYR}C@rKY1k=J1w=ub8N5wtKN3V@P*{NWHV0a4H+wrkOd%jk(cpuXM4Y5B zD6Gg7BXZtnvS6WFa+XS!N#Gg1-VlIvtb9*2gI_T4=^Lja>0QVG4;k~9%T-D0J4U08 zId&}7zaPUa_U(J%ZSbKT8L!1so&M68|H(nNT34u6yO-k6J$`Uk7qCS)f+Z5V@k;W2LYMAL{y%`$DVcx}>e`>fZX}*|WC; zh*LREpZyO5cbw$lyfAbu;KmK_Z<9-1iq@RvqojmH@zP-ufw$fbqP<7{`^x((rwXM- zrlzp<^YID&qzslhX78=aF@wJ$O3yYnHm}2KKu?IQd*m`>tgzWSAzk`7Cv_-D=22C~ z?&NU)unQLo;fU_)%s+R44Y0U6VZ4l6PA~^Otq9N&tNim=^L^}`>BzNjbQ&JmKQ}CP zPqD~_tNV!N7Tffb{}j%TkNjYr{IE0CL-&DwzI3gc=(3RNnfI|dLb?&a$ZoeTi@5m6 z82`XSF8PjT^ug?Zaj%0y-x`W|cKC%H{G=F+Oz@p7azQ1!tSy2NNlHO=l^iC3!_XBi0V&*}x6|7UBXzFP6l151$9cs>OQs?dWY@KrakquE9fQXsalG+g7v$D z^%?!`@7jBnw26>+y0|YoOToOhM+9xq{$4;5;gQKUbn;Xs|3@4|;UQMbFTTP9v z#=0%ZQj-kVBDs@V^^{D>WXO8m0r1{1#D>KkGg6OAmV zZrbLzCWQd%-dqU?D8xQ48Yg4{&5H&XexQF}_W!58-4Ju8pV4TT_NNjTTbkRLJv8xP F{Rc45t*QV3 literal 16574 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, MAC2STR(child_disconnected->mac)); } + break; case MESH_EVENT_ROUTING_TABLE_ADD: { mesh_event_routing_table_change_t *routing_table = (mesh_event_routing_table_change_t *)event_data; ESP_LOGW(MESH_TAG, "add %d, new:%d",