From ba81c87e91570f9f1234d909aa1f20b07dd10df8 Mon Sep 17 00:00:00 2001 From: Joo-Chul Kevin Lee Date: Tue, 24 Aug 2021 23:24:27 +0900 Subject: [PATCH] Add Push Notification support (CR2483) --- .github/workflows/CLA.yml | 12 +- .github/workflows/android.yml | 6 +- .github/workflows/check-format.yml | 7 +- .github/workflows/cmake-linux.yml | 2 + .github/workflows/ctt-bot.yml | 2 +- .github/workflows/doxygen-publish.yml | 4 +- .github/workflows/doxygen.yml | 5 +- .github/workflows/sonar-cloud-analysis.yml | 2 +- .github/workflows/static-analysis.yml | 2 +- .gitignore | 4 + CMakeLists.txt | 10 + api/oc_core_res.c | 12 + api/oc_events.h | 4 + api/oc_helpers.c | 7 + api/oc_main.c | 10 +- api/oc_push.c | 2703 +++++++++++++++++ api/oc_rep.c | 9 + api/oc_ri.c | 48 + api/oc_server_api.c | 12 + apps/CMakeLists.txt | 20 + apps/Readme.md | 240 +- apps/docs/push.md | 222 ++ apps/docs/resources/newpush1.png | Bin 0 -> 19691 bytes apps/docs/resources/newpush2.png | Bin 0 -> 19073 bytes apps/docs/resources/push_arch.png | Bin 0 -> 22850 bytes apps/docs/resources/push_config_c_ns.png | Bin 0 -> 85459 bytes .../resources/push_config_d_resources.png | Bin 0 -> 63297 bytes .../push_config_r_origin_resource.png | Bin 0 -> 29077 bytes .../docs/resources/push_config_r_pushconf.png | Bin 0 -> 56417 bytes .../docs/resources/push_config_r_pushrecv.png | Bin 0 -> 36011 bytes apps/docs/resources/push_configurator.png | Bin 0 -> 45740 bytes apps/docs/resources/push_originserver.png | Bin 0 -> 58757 bytes apps/docs/resources/push_targetserver.png | Bin 0 -> 15723 bytes apps/push_configurator_multithread_linux.c | 538 ++++ apps/push_originserver_multithread_linux.c | 370 +++ apps/push_targetserver_multithread_linux.c | 212 ++ include/oc_api.h | 16 +- include/oc_helpers.h | 11 + include/oc_push.h | 100 + include/oc_rep.h | 5 + include/oc_ri.h | 33 +- port/linux/Makefile | 24 + port/linux/readme.md | 12 +- port/oc_log.h | 14 +- swig/swig_interfaces/oc_ri.i | 1 + util/oc_features.h | 5 + 46 files changed, 4515 insertions(+), 169 deletions(-) create mode 100644 api/oc_push.c create mode 100644 apps/docs/push.md create mode 100644 apps/docs/resources/newpush1.png create mode 100644 apps/docs/resources/newpush2.png create mode 100644 apps/docs/resources/push_arch.png create mode 100644 apps/docs/resources/push_config_c_ns.png create mode 100644 apps/docs/resources/push_config_d_resources.png create mode 100644 apps/docs/resources/push_config_r_origin_resource.png create mode 100644 apps/docs/resources/push_config_r_pushconf.png create mode 100644 apps/docs/resources/push_config_r_pushrecv.png create mode 100644 apps/docs/resources/push_configurator.png create mode 100644 apps/docs/resources/push_originserver.png create mode 100644 apps/docs/resources/push_targetserver.png create mode 100644 apps/push_configurator_multithread_linux.c create mode 100644 apps/push_originserver_multithread_linux.c create mode 100644 apps/push_targetserver_multithread_linux.c create mode 100644 include/oc_push.h diff --git a/.github/workflows/CLA.yml b/.github/workflows/CLA.yml index a5c6adcf5d..8908887ea7 100644 --- a/.github/workflows/CLA.yml +++ b/.github/workflows/CLA.yml @@ -3,7 +3,7 @@ on: issue_comment: types: [created] pull_request_target: - types: [opened,closed,synchronize] + types: [opened, closed, synchronize] jobs: CLAssistant: @@ -16,15 +16,15 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # the below token should have repo scope and must be manually added by you in the repository's secret - PERSONAL_ACCESS_TOKEN : ${{ secrets.PERSONAL_ACCESS_TOKEN }} + PERSONAL_ACCESS_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} with: - path-to-signatures: 'signatures/version1/cla.json' + path-to-signatures: "signatures/version1/cla.json" #path-to-document: 'https://github.com/cla-assistant/github-action/blob/master/SAPCLA.md' # e.g. a CLA or a DCO document - path-to-document: 'https://github.com/iotivity/iotivity-lite/blob/master/LICENSE.md' # branch should not be protected - branch: 'main' + path-to-document: "https://github.com/iotivity/iotivity-lite/blob/master/LICENSE.md" # branch should not be protected + branch: "main" allowlist: user1,bot* - #below are the optional inputs - If the optional inputs are not given, then default values will be taken + #below are the optional inputs - If the optional inputs are not given, then default values will be taken #remote-organization-name: enter the remote organization name where the signatures should be stored (Default is storing the signatures in the same repository) #remote-repository-name: enter the remote repository name where the signatures should be stored (Default is storing the signatures in the same repository) #create-file-commit-message: 'For example: Creating file for storing CLA Signatures' diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index a5f757c8b3..41182429e1 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -6,16 +6,16 @@ name: CI building android on: # Triggers the workflow on push or pull request events but only for the master branch push: - branches: [ master ] + branches: [master] pull_request: - branches: [ master ] + branches: [master] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: - make_android: + make_android: # The type of runner that the job will run on runs-on: ubuntu-latest diff --git a/.github/workflows/check-format.yml b/.github/workflows/check-format.yml index 554a517a9f..d09da37945 100644 --- a/.github/workflows/check-format.yml +++ b/.github/workflows/check-format.yml @@ -6,16 +6,16 @@ name: Check formatting on: # Triggers the workflow on push or pull request events but only for the master branch push: - branches: [ master ] + branches: [master] pull_request: - branches: [ master ] + branches: [master] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: - # This workflow contains a single job called "check-formatting" + # This workflow contains a single job called "check-formatting" check-formatting: # The type of runner that the job will run on runs-on: ubuntu-latest @@ -39,4 +39,3 @@ jobs: cmake ../. make format git diff --exit-code --ignore-submodules=all - diff --git a/.github/workflows/cmake-linux.yml b/.github/workflows/cmake-linux.yml index de38db7646..7e54f586da 100644 --- a/.github/workflows/cmake-linux.yml +++ b/.github/workflows/cmake-linux.yml @@ -43,6 +43,8 @@ jobs: - args: "-DOC_SECURITY_ENABLED=OFF -DOC_TCP_ENABLED=ON" # secure off, ipv4 on, tcp on - args: "-DOC_SECURITY_ENABLED=OFF -DOC_TCP_ENABLED=ON -DOC_IPV4_ENABLED=ON" + # collection create if on, push notification on, tcp off + - args: "-DOC_COLLECTIONS_IF_CREATE_ENABLED=ON -DOC_PUSH_ENABLED=ON" steps: - name: Checkout repository diff --git a/.github/workflows/ctt-bot.yml b/.github/workflows/ctt-bot.yml index a654b1ccf6..8e2e760c62 100644 --- a/.github/workflows/ctt-bot.yml +++ b/.github/workflows/ctt-bot.yml @@ -24,7 +24,7 @@ jobs: issue-number: ${{ github.event.pull_request.number }} body: | :tada: Thank you for your code contribution! To guarantee the change/addition is conformant to the [OCF Specification](https://openconnectivity.org), we would like to ask you to execute OCF Conformance Testing of your change :point_up: **when your work is ready to be reviewed**. - + --- :information_source: To verify your latest change (${{ github.event.pull_request.head.sha }}), label this PR with `OCF Conformance Testing`. diff --git a/.github/workflows/doxygen-publish.yml b/.github/workflows/doxygen-publish.yml index fa2b075ae0..8e945981a8 100644 --- a/.github/workflows/doxygen-publish.yml +++ b/.github/workflows/doxygen-publish.yml @@ -2,9 +2,9 @@ name: CI-doxygen-publish on: push: - branches: [ master ] + branches: [master] pull_request: - branches: [ master ] + branches: [master] types: [closed] # Allows you to run this workflow manually from the Actions tab diff --git a/.github/workflows/doxygen.yml b/.github/workflows/doxygen.yml index 81acc54ba3..c55383af9e 100644 --- a/.github/workflows/doxygen.yml +++ b/.github/workflows/doxygen.yml @@ -2,9 +2,9 @@ name: doxygen documentation on: push: - branches: [ master ] + branches: [master] pull_request: - branches: [ master ] + branches: [master] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: @@ -25,4 +25,3 @@ jobs: doxygen --version cd ${{ github.workspace }}/iotivity-lite/tools ./build_doc.sh - diff --git a/.github/workflows/sonar-cloud-analysis.yml b/.github/workflows/sonar-cloud-analysis.yml index d92165c209..be1d79b085 100644 --- a/.github/workflows/sonar-cloud-analysis.yml +++ b/.github/workflows/sonar-cloud-analysis.yml @@ -55,7 +55,7 @@ jobs: mkdir build && cd build # sonar-scanner currently cannot handle multi configuration configuration (ie. compilation of the same file with different defines), # so we enable as many features as possible so we get max. amount of code analysis - cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_VERBOSE_MAKEFILE=ON -DOC_CLOUD_ENABLED=ON -DOC_COLLECTIONS_IF_CREATE_ENABLED=ON -DOC_MNT_ENABLED=ON -DOC_WKCORE_ENABLED=ON -DOC_SOFTWARE_UPDATE_ENABLED=ON -DBUILD_TESTING=ON .. + cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_VERBOSE_MAKEFILE=ON -DOC_CLOUD_ENABLED=ON -DOC_COLLECTIONS_IF_CREATE_ENABLED=ON -DOC_MNT_ENABLED=ON -DOC_WKCORE_ENABLED=ON -DOC_SOFTWARE_UPDATE_ENABLED=ON -DOC_PUSH_ENABLED=ON -DBUILD_TESTING=ON .. cd .. # for files defined in multiple cmake targets, sonar-scanner seems to take the configuration from the first compilation of the file, # so we force client-server target to be compiled first so we get analysis of code with both OC_CLIENT and OC_SERVER enabled diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml index 8e5fc6a953..4649671aab 100644 --- a/.github/workflows/static-analysis.yml +++ b/.github/workflows/static-analysis.yml @@ -29,5 +29,5 @@ jobs: - name: Build with clang-tidy run: | mkdir linuxbuild && cd linuxbuild - cmake -DCMAKE_VERBOSE_MAKEFILE=ON -DOC_CLANG_TIDY_ENABLED=ON -DOC_CLOUD_ENABLED=ON -DOC_COLLECTIONS_IF_CREATE_ENABLED=ON -DOC_MNT_ENABLED=ON -DOC_WKCORE_ENABLED=ON -DOC_SOFTWARE_UPDATE_ENABLED=ON -DBUILD_TESTING=OFF .. + cmake -DCMAKE_VERBOSE_MAKEFILE=ON -DOC_CLANG_TIDY_ENABLED=ON -DOC_CLOUD_ENABLED=ON -DOC_COLLECTIONS_IF_CREATE_ENABLED=ON -DOC_MNT_ENABLED=ON -DOC_WKCORE_ENABLED=ON -DOC_SOFTWARE_UPDATE_ENABLED=ON -DOC_PUSH_ENABLED=ON -DBUILD_TESTING=OFF .. make all diff --git a/.gitignore b/.gitignore index cf0e12fd84..47f827f16e 100644 --- a/.gitignore +++ b/.gitignore @@ -111,3 +111,7 @@ service/resource-directory/client/unittest/obj build python/plgd_headers.config + +# eclipse config file +.cproject +.project diff --git a/CMakeLists.txt b/CMakeLists.txt index 6a557d84ca..2e4d207303 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,6 +21,8 @@ set(OC_WKCORE_ENABLED OFF CACHE BOOL "Enable well-known core resource.") set(OC_OSCORE_ENABLED ON CACHE BOOL "Enable oscore support.") set(OC_IPV4_ENABLED OFF CACHE BOOL "Enable IPv4 support.") set(OC_DNS_LOOKUP_IPV6_ENABLED OFF CACHE BOOL "Enable IPv6 DNS lookup.") +set(OC_PUSH_ENABLED OFF CACHE BOOL "Enable Push Notification.") +set(OC_PUSHDEBUG_ENABLED OFF CACHE BOOL "Enable debug messages for Push Notification.") set(CMAKE_POSITION_INDEPENDENT_CODE ON) @@ -88,6 +90,14 @@ set(PRIVATE_COMPILE_DEFINITIONS "") set(PUBLIC_COMPILE_DEFINITIONS "") set(MBEDTLS_COMPILE_DEFINITIONS "__OC_PLATFORM" "__OC_RANDOM") +if(OC_PUSH_ENABLED) + list(APPEND PUBLIC_COMPILE_DEFINITIONS "OC_PUSH") + if(OC_PUSHDEBUG_ENABLED) + list(APPEND PUBLIC_COMPILE_DEFINITIONS "OC_PUSHDEBUG") + endif() + set(OC_DYNAMIC_ALLOCATION_ENABLED ON) + set(OC_COLLECTIONS_IF_CREATE_ENABLED ON) +endif() if(OC_DYNAMIC_ALLOCATION_ENABLED) list(APPEND PUBLIC_COMPILE_DEFINITIONS "OC_DYNAMIC_ALLOCATION") list(APPEND MBEDTLS_COMPILE_DEFINITIONS "OC_DYNAMIC_ALLOCATION") diff --git a/api/oc_core_res.c b/api/oc_core_res.c index 60412e875b..93fb7f93c7 100644 --- a/api/oc_core_res.c +++ b/api/oc_core_res.c @@ -14,6 +14,7 @@ // limitations under the License. */ +#include "util/oc_features.h" #include "oc_core_res.h" #include "api/cloud/oc_cloud_internal.h" #include "oc_api.h" @@ -51,6 +52,12 @@ static bool announce_con_res = false; static int res_latency = 0; static OC_ATOMIC_UINT32_T g_device_count = 0; +/*todo4me <2022/9/5> remove later*/ +#ifdef OC_HAS_FEATURE_PUSH +void oc_create_pushconf_resource(size_t device_index); +void oc_create_pushreceiver_resource(size_t device_index); +#endif + /* Although used several times in the OCF spec, "/oic/con" is not accepted by the spec. Use a private prefix instead. Update OC_NAMELEN_CON_RES if changing the value. @@ -422,6 +429,11 @@ oc_core_add_new_device(const char *uri, const char *rt, const char *name, oc_create_cloudconf_resource(device_count); #endif /* OC_CLIENT && OC_SERVER && OC_CLOUD */ +#ifdef OC_HAS_FEATURE_PUSH + oc_create_pushconf_resource(device_count); + oc_create_pushreceiver_resource(device_count); +#endif + oc_device_info[device_count].data = data; if (oc_connectivity_init(device_count) < 0) { diff --git a/api/oc_events.h b/api/oc_events.h index 1c45fcdbdd..9fe6974031 100644 --- a/api/oc_events.h +++ b/api/oc_events.h @@ -52,6 +52,10 @@ typedef enum { SW_UPDATE_UPGRADING, SW_UPDATE_DONE, #endif /* OC_SOFTWARE_UPDATE */ + +#ifdef OC_HAS_FEATURE_PUSH + PUSH_RSC_STATE_CHANGED, +#endif /* OC_HAS_FEATURE_PUSH */ __NUM_OC_EVENT_TYPES__ } oc_events_t; diff --git a/api/oc_helpers.c b/api/oc_helpers.c index 47faacd117..22ec2c8655 100644 --- a/api/oc_helpers.c +++ b/api/oc_helpers.c @@ -105,6 +105,13 @@ _oc_free_string( } } +void +oc_set_string(oc_string_t *ocstring, const char *str, size_t str_len) +{ + oc_free_string(ocstring); + oc_new_string(ocstring, str, str_len); +} + void oc_concat_strings(oc_string_t *concat, const char *str1, const char *str2) { diff --git a/api/oc_main.c b/api/oc_main.c index 873deda754..c91daef7b8 100644 --- a/api/oc_main.c +++ b/api/oc_main.c @@ -70,6 +70,10 @@ static bool *drop_commands; static bool drop_commands[OC_MAX_NUM_DEVICES]; #endif /* !OC_DYNAMIC_ALLOCATION */ +#ifdef OC_HAS_FEATURE_PUSH +void oc_push_free(); +#endif + static bool initialized = false; static const oc_handler_t *app_callbacks; static oc_factory_presets_t factory_presets; @@ -374,6 +378,10 @@ oc_main_shutdown(void) oc_collections_free_rt_factories(); #endif /* OC_COLLECTIONS && OC_SERVER && OC_COLLECTIONS_IF_CREATE */ +#ifdef OC_HAS_FEATURE_PUSH + oc_push_free(); +#endif + oc_ri_shutdown(); #ifdef OC_SECURITY @@ -434,4 +442,4 @@ bool oc_drop_command(size_t device) { return drop_commands[device]; -} \ No newline at end of file +} diff --git a/api/oc_push.c b/api/oc_push.c new file mode 100644 index 0000000000..23fa9f9fd8 --- /dev/null +++ b/api/oc_push.c @@ -0,0 +1,2703 @@ +/**************************************************************************** + * + * Copyright 2021 ETRI All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"), + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created on: Aug 23, 2021, + * Author: Joo-Chul Kevin Lee (rune@etri.re.kr) + * + * + ****************************************************************************/ + +#include "util/oc_features.h" +#include "oc_push.h" + +#ifdef OC_HAS_FEATURE_PUSH + +#include "oc_api.h" +#include "oc_events.h" +#include "oc_rep.h" +#include "oc_endpoint.h" +#include "oc_ri.h" +#include "oc_core_res.h" +#include "oc_signal_event_loop.h" +#include "util/oc_process.h" +#include "util/oc_list.h" +#include "util/oc_mmem.h" +#include "util/oc_compiler.h" +#include + +#if defined(OC_PUSHDEBUG) || defined(OC_DEBUG) +#define OC_PUSH_DBG(...) OC_LOG("D", __VA_ARGS__) +#define OC_PUSH_WRN(...) OC_LOG("W", __VA_ARGS__) +#define OC_PUSH_ERR(...) OC_LOG("E", __VA_ARGS__) +#else +#define OC_PUSH_DBG(...) +#define OC_PUSH_WRN(...) +#define OC_PUSH_ERR(...) +#endif + +/* + * @brief Push Proxy state + */ +typedef enum { + OC_PP_WFP, ///< Wait For Provisioning + OC_PP_WFU, ///< Wait For Update + OC_PP_WFR, ///< Wait For Response + OC_PP_WFUM, ///< Wait For Update Mitigation + OC_PP_WFRM, ///< Wait For Response Mitigation + OC_PP_ERR, ///< Error + OC_PP_TOUT ///< Timeout +} oc_pp_state_t; + +/* + * @brief structure for handling "rt": ["oic.r.notificationselector", + * "oic.r.pushproxy"] Resource + */ +typedef struct oc_ns +{ + struct oc_ns *next; + oc_resource_t + *resource; ///< used to point ["oic.r.notificationselector", + ///< "oic.r.pushproxy"] Resource managed by iotivity-lite + /* notificaiton selector */ + oc_string_t phref; ///< oic.r.notificationselector:phref (optional) + oc_string_array_t prt; ///< oic.r.notificationselector:prt (optional) + oc_string_array_t pif; ///< oic.r.notificationselector:pif (optional) + /* push proxy */ + oc_string_t pushtarget_di; ///< device id of target (e.g. + ///< ocf://17087f8c-13e3-4849-4258-65af2a47df63) + oc_endpoint_t + pushtarget_ep; ///< endpoint of pushtarget (e.g. coaps://[fe80::b1d6]:1122) + oc_string_t targetpath; ///< path in pushtarget (e.g. /pushedLightSwitch) + oc_string_t pushqif; ///< oic.r.pushproxy:pushqif (deprecated) + oc_string_array_t sourcert; ///< oic.r.pushproxy:sourcert + oc_string_t state; ///< oic.r.pushproxy:state + void *user_data; ///< used to point updated pushable Resource +} oc_ns_t; + +/* + * @brief structure for member of "oic.r.pushreceiver:receivers" object array + */ +typedef struct oc_recv +{ + struct oc_recv *next; + oc_string_t receiveruri; ///< oic.r.pushreceiver:receivers:receiveruri + oc_string_array_t rts; ///< oic.r.pushreceiver:receivers:rts +} oc_recv_t; + +/* + * @brief structure for handling for Push Receiver Resource + */ +typedef struct oc_recvs +{ + struct oc_recvs *next; + oc_resource_t *resource; ///< used to point ["oic.r.pushreceiver"] Resource + ///< managed by iotivity-lite + OC_LIST_STRUCT(receivers); ///< oic.r.pushreceiver:receivers object array +} oc_recvs_t; + +/* + * @brief memory block for storing new collection member of Push Configuration + * Resource + */ +OC_MEMB(ns_instance_memb, oc_ns_t, 1); + +/* + * @brief `ns_col_list` keeps real data of all Notification Selector Resources + * (it includes all Resources of all Devices) + * + * each list member is instance of `oc_ns_t` + */ +OC_LIST(ns_list); + +/* + * @brief memory block definition for storing new Receiver object array of Push + * Receiver Resource + */ +OC_MEMB(recvs_instance_memb, oc_recvs_t, 1); + +/* + * @brief memory block definition for storing new Receiver object of Receiver + * object array + */ +OC_MEMB(recv_instance_memb, oc_recv_t, 1); + +/* + * @brief `recvs_list` keeps real data of all Receiver object in Push Receiver + * Resource (it includes all Receiver objects of Resource of all Devices) + * + * each list member is instance of `oc_recvs_t` + */ +OC_LIST(recvs_list); + +/* + * @brief memory block definition for storing properties representation of + * pushed resource + */ +OC_MEMB(rep_instance_memb, oc_rep_t, 1); + +/* + * @brief memory block definition for storing pushed resource representation + * list + */ +OC_MEMB(pushd_rsc_rep_instance_memb, oc_pushd_rsc_rep_t, 1); + +/* + * @brief `pushed_rsc_list` keeps Resource representation of Pushed Resources + */ +OC_LIST(pushd_rsc_rep_list); + +/* + * @brief process which handles push notification + */ +OC_PROCESS(oc_push_process, "Push Notification handler"); + +const char *pp_state_strs[] = { + "waitingforprovisioning", /*OC_PP_WFP*/ + "waitingforupdate", /*OC_PP_WFU*/ + "waitingforresponse", /*OC_PP_WFR*/ + "waitingforupdatemitigation", /*OC_PP_WFUM*/ + "waitingforresponsemitigation", /*OC_PP_WFRM*/ + "error", /*OC_PP_ERR*/ + "timeout" /*OC_PP_TOUT*/ +}; + +/* + * mandatory property of oic.r.pushporxy, oic.r.pushreceivers + */ +enum { + PP_PUSHTARGET = 0x01, + PP_SOURCERT = 0x02, + PR_RECEIVERS = 0x01, + PR_RECEIVERURI = 0x02, + PR_RTS = 0x04 +}; + +/* + * if this callback function is provided by user, it will called whenever new + * push is arrived... + */ +static void (*oc_push_arrived)(oc_pushd_rsc_rep_t *) = NULL; + +#define pp_statestr(i) (pp_state_strs[(i)]) + +/* + * @brief update Push Proxy state from state to new_state + * + * @param state oc_string_t + * @param new_state char * + */ +#define pp_update_state(state, new_state) \ + (oc_set_string(&(state), (new_state), strlen((new_state)))) + +/* + * @brief initialize oc_string_t object + */ +#define oc_init_string(str) \ + do { \ + (str).size = 0; \ + (str).ptr = NULL; \ + (str).next = NULL; \ + } while (0) + +/* + * @brief initialize oc_string_array_t object + */ +#define oc_init_string_array(str_array) oc_init_string((str_array)) + +void +oc_set_on_push_arrived(oc_on_push_arrived_t func) +{ + oc_push_arrived = func; +} + +/* + * @brief callback to be called to set existing (or just created by + * `get_ns_instance()`) data structure for `notification selector` + * with received Resource representation + * + * @param resource not used + * @param rep Resource representation structure + * @param data internal structure for storing `notification selector` + * resource (oc_memb struct for ["oic.r.notificationselector", + * "oic.r.pushproxy"] Resource) + * + * @return true:success, false:fail + */ +static bool +set_ns_properties(oc_resource_t *resource, oc_rep_t *rep, void *data) +{ + (void)resource; + bool result = false; + bool pushtarget_is_updated = false; + + /* + * `data` is set when new Notification Selector Resource is created + * by calling `oc_resource_set_properties_cbs()` in `get_ns_instance()` + */ + oc_ns_t *ns_instance = (oc_ns_t *)data; + while (rep != NULL) { + switch (rep->type) { + case OC_REP_STRING: + /* + * oic.r.notificationselector:phref (optional) + */ + if (oc_string_len(rep->name) == 5 && + memcmp(oc_string(rep->name), "phref", 5) == 0) { + if (!strcmp(oc_string(rep->value.string), "")) { + oc_free_string(&ns_instance->phref); + } else { + oc_set_string(&ns_instance->phref, oc_string(rep->value.string), + oc_string_len(rep->value.string)); + } + OC_PUSH_DBG("oic.r.pushproxy:phref (%s)", oc_string(rep->value.string)); + } + /* + * oic.r.pushproxy:pushtarget (mandatory) + */ + else if (oc_string_len(rep->name) == 10 && + memcmp(oc_string(rep->name), "pushtarget", 10) == 0) { + if (!strcmp(oc_string(rep->value.string), "")) { + /* NULL pushtarget ("") is still acceptable... */ + OC_PUSH_DBG("NULL \"pushtarget\" is received, still stay in " + "\"waitforprovisioning\" state..."); + + /* clear endpoint */ + memset((void *)(&ns_instance->pushtarget_ep), 0, + sizeof(ns_instance->pushtarget_ep)); + + /* clear target path */ + oc_set_string(&ns_instance->targetpath, "", 0); + + } else { + /* if non-NULL pushtarget.. */ + oc_endpoint_t *new_ep; + oc_string_t new_targetpath; + + new_ep = oc_new_endpoint(); + oc_init_string(new_targetpath); + + OC_PUSH_DBG("oic.r.pushproxy:pushtarget (%s)", + oc_string(rep->value.string)); + + if (oc_string_to_endpoint(&rep->value.string, new_ep, + &new_targetpath) < 0) { + OC_PUSH_ERR("oic.r.pushproxy:pushtarget (%s) parsing failed!", + oc_string(rep->value.string)); + + oc_free_endpoint(new_ep); + oc_free_string(&new_targetpath); + + goto exit; + } else { + oc_free_string(&ns_instance->targetpath); + + /* update with new values... */ + oc_endpoint_copy(&ns_instance->pushtarget_ep, new_ep); + oc_new_string(&ns_instance->targetpath, oc_string(new_targetpath), + oc_string_len(new_targetpath)); + + OC_PUSH_DBG("oic.r.pushproxy:pushtarget (%s)", + oc_string(rep->value.string)); + + /* return memory */ + oc_free_endpoint(new_ep); + oc_free_string(&new_targetpath); + + if (oc_string_len(ns_instance->targetpath)) { + OC_PUSH_DBG("oic.r.pushproxy:pushtarget parsing is successful! " + "targetpath (\"%s\")", + oc_string(ns_instance->targetpath)); + pushtarget_is_updated = true; + } else { + OC_PUSH_ERR("path part of \"pushtarget\" should not be NULL!!"); + goto exit; + } + } + } + } + /* + * TODO4ME <2022/04/17> deprecated property, remove later... + * oic.r.pushproxy:pushqif (optional) + */ + else if (oc_string_len(rep->name) == 7 && + memcmp(oc_string(rep->name), "pushqif", 7) == 0) { + oc_set_string(&ns_instance->pushqif, oc_string(rep->value.string), + oc_string_len(rep->value.string)); + } + /* + * oic.r.pushproxy:state (RETRIEVE:mandatory, UPDATE:optional) + */ + else if (oc_string_len(rep->name) == 5 && + memcmp(oc_string(rep->name), "state", 5) == 0) { + /* state can be modified only if Push Proxy is in "tout" or "err" state + */ + if (strcmp(oc_string(ns_instance->state), pp_statestr(OC_PP_ERR)) && + strcmp(oc_string(ns_instance->state), pp_statestr(OC_PP_TOUT))) { + OC_PUSH_ERR("state can be modified only if Push Proxy is in \"tout\" " + "or \"err\" state"); + goto exit; + } + + /* "waitingforupdate" is only acceptable value */ + if (strcmp(oc_string(rep->value.string), pp_statestr(OC_PP_WFU))) { + OC_PUSH_ERR( + "only \"waitingforupdate\" is allowed to reset \"state\""); + goto exit; + } + + OC_PUSH_DBG("state of Push Proxy (\"%s\") is reset (%s => %s)", + oc_string(ns_instance->resource->uri), + oc_string(ns_instance->state), + oc_string(rep->value.string)); + pp_update_state(ns_instance->state, oc_string(rep->value.string)); + } + break; + + case OC_REP_STRING_ARRAY: + /* + * oic.r.notificationselector:prt (optional) + */ + if (oc_string_len(rep->name) == 3 && + memcmp(oc_string(rep->name), "prt", 3) == 0) { + oc_free_string_array(&ns_instance->prt); + + oc_new_string_array( + &ns_instance->prt, + oc_string_array_get_allocated_size(rep->value.array)); + + for (int i = 0; + i < (int)oc_string_array_get_allocated_size(rep->value.array); + i++) { + OC_PUSH_DBG("oic.r.pushproxy:prt (%s)", + oc_string_array_get_item(rep->value.array, i)); + oc_string_array_add_item( + ns_instance->prt, oc_string_array_get_item(rep->value.array, i)); + } + } + /* + * oic.r.notificationselector:pif (optional) + */ + else if (oc_string_len(rep->name) == 3 && + memcmp(oc_string(rep->name), "pif", 3) == 0) { + oc_free_string_array(&ns_instance->pif); + + oc_new_string_array( + &ns_instance->pif, + oc_string_array_get_allocated_size(rep->value.array)); + + for (int i = 0; + i < (int)oc_string_array_get_allocated_size(rep->value.array); + i++) { + OC_PUSH_DBG("oic.r.pushproxy:pif (%s)", + oc_string_array_get_item(rep->value.array, i)); + oc_string_array_add_item( + ns_instance->pif, oc_string_array_get_item(rep->value.array, i)); + } + } + /* + * oic.r.pushproxy:sourcert (mandatory) + */ + else if (oc_string_len(rep->name) == 8 && + memcmp(oc_string(rep->name), "sourcert", 8) == 0) { + for (int i = 0; + i < (int)oc_string_array_get_allocated_size(rep->value.array); + i++) { + if (strcmp(oc_string_array_get_item(rep->value.array, i), + "oic.r.pushpayload")) { + OC_PUSH_ERR("illegal oic.r.pushproxy:sourcert value (%s)!", + oc_string_array_get_item(rep->value.array, i)); + goto exit; + } + } + + oc_free_string_array(&ns_instance->sourcert); + oc_new_string_array( + &ns_instance->sourcert, + oc_string_array_get_allocated_size(rep->value.array)); + for (int i = 0; + i < (int)oc_string_array_get_allocated_size(rep->value.array); + i++) { + OC_PUSH_DBG("oic.r.pushproxy:sourcert (%s)", + oc_string_array_get_item(rep->value.array, i)); + oc_string_array_add_item( + ns_instance->sourcert, + oc_string_array_get_item(rep->value.array, i)); + } + } + break; + + default: + OC_PUSH_ERR("not supported Property (\"%s\")", oc_string(rep->name)); + break; + } + rep = rep->next; + } + + /* + * re-check condition which lets state move from "err"/"tout" to "wfu" + * - only configurator can change "state" when it is in "err"/"tout" state + */ + if (pushtarget_is_updated && + strcmp(oc_string(ns_instance->state), pp_statestr(OC_PP_ERR)) && + strcmp(oc_string(ns_instance->state), pp_statestr(OC_PP_TOUT)) && + strcmp(oc_string(ns_instance->state), pp_statestr(OC_PP_WFU))) { + OC_PUSH_DBG("state of Push Proxy (\"%s\") is changed (%s => %s)", + oc_string(ns_instance->resource->uri), + oc_string(ns_instance->state), pp_statestr(OC_PP_WFU)); + pp_update_state(ns_instance->state, pp_statestr(OC_PP_WFU)); + } else { + OC_PUSH_DBG("pushtarget of Push Proxy (\"%s\") is still NULL, or Push " + "Proxy is already in (\"%s\")", + oc_string(ns_instance->resource->uri), + oc_string(ns_instance->state)); + } + + result = true; + +exit: + return result; +} + +/* + * + * @brief callback to be called to fill the contents of `notification + * selector` from existing data structure (`oc_ns_t`) + * + * @param resource + * @param iface_mask interface to be used to send response + * @param data internal structure for storing `notification selector` + * resource (oc_memb struct for ["oic.r.notificationselector", + * "oic.r.pushproxy"] Resource) + */ +static void +get_ns_properties(oc_resource_t *resource, oc_interface_mask_t iface_mask, + void *data) +{ + /* + * `data` is set when new Notification Selector Resource is created + * by calling `oc_resource_set_properties_cbs()` in `get_ns_instance()` + */ + oc_ns_t *ns_instance = (oc_ns_t *)data; + + oc_rep_begin_root_object(); + switch (iface_mask) { + case OC_IF_BASELINE: + oc_process_baseline_interface(resource); + OC_FALLTHROUGH; + case OC_IF_RW: + /* phref (optional) */ + // if (oc_string_len(ns_instance->phref)) { + if (oc_string(ns_instance->phref)) { + oc_rep_set_text_string(root, phref, oc_string(ns_instance->phref)); + } + + /* + * prt (optional) + */ + if (oc_string_array_get_allocated_size(ns_instance->prt)) { + oc_rep_open_array(root, prt); + for (int i = 0; + i < (int)oc_string_array_get_allocated_size(ns_instance->prt); i++) { + oc_rep_add_text_string(prt, + oc_string_array_get_item(ns_instance->prt, i)); + } + oc_rep_close_array(root, prt); + } + + /* + * pif (optional) + */ + if (oc_string_array_get_allocated_size(ns_instance->pif)) { + oc_rep_open_array(root, pif); + for (int i = 0; + i < (int)oc_string_array_get_allocated_size(ns_instance->pif); i++) { + oc_rep_add_text_string(pif, + oc_string_array_get_item(ns_instance->pif, i)); + } + oc_rep_close_array(root, pif); + } + + /* + * pushtarget + */ + + oc_string_t ep; + oc_string_t full_uri; + + if (oc_endpoint_to_string(&ns_instance->pushtarget_ep, &ep) < 0) { + /* handle NULL pushtarget... */ +#if 0 + char ipv6addrstr[50], ipv4addrstr[50]; + inet_ntop(AF_INET6, ns_instance->pushtarget_ep.addr.ipv6.address, ipv6addrstr, 50); + inet_ntop(AF_INET, ns_instance->pushtarget_ep.addr.ipv4.address, ipv4addrstr, 50); + + if (!strcmp(ipv6addrstr, "::") && !strcmp(ipv4addrstr, "0.0.0.0")) + { + oc_new_string(&full_uri, "", strlen("")); + } +#endif + /* if pushtarget endpoint is NULL or illegal value.. just return NULL */ + oc_new_string(&full_uri, "", strlen("")); + } else { + if (oc_string_len(ns_instance->targetpath)) + oc_concat_strings(&full_uri, oc_string(ep), + oc_string(ns_instance->targetpath)); + else + oc_new_string(&full_uri, oc_string(ep), oc_string_len(ep)); + + oc_free_string(&ep); + } + + oc_rep_set_text_string(root, pushtarget, oc_string(full_uri)); + oc_free_string(&full_uri); + + /* + * pushqif + */ + oc_rep_set_text_string(root, pushqif, oc_string(ns_instance->pushqif)); + + /* + * sourcert + */ + if (oc_string_array_get_allocated_size(ns_instance->sourcert)) { + oc_rep_open_array(root, sourcert); + for (int i = 0; + i < (int)oc_string_array_get_allocated_size(ns_instance->sourcert); + i++) { + oc_rep_add_text_string( + sourcert, oc_string_array_get_item(ns_instance->sourcert, i)); + } + oc_rep_close_array(root, sourcert); + } + + /* + * state + */ + oc_rep_set_text_string(root, state, oc_string(ns_instance->state)); + + break; + default: + break; + } + oc_rep_end_root_object(); +} + +/* + * @brief callback function used to RETRIEVE `Notification Selector + Push Proxy + * Resource which is autogenerated through `oic.if.crete` interface + * + * @param request request delivered from stack + * @param iface_mask OCF interface delivered from stack + * @param user_data oc_ns_t object + */ +static void +get_ns(oc_request_t *request, oc_interface_mask_t iface_mask, void *user_data) +{ + get_ns_properties(request->resource, iface_mask, user_data); + oc_send_response(request, OC_STATUS_OK); +} + +/* + * @brief callback function used to UPDATE `Notification Selector + Push Proxy + * Resource which is autogenerated through `oic.if.crete` interface + * + * @param request request delivered from stack + * @param iface_mask OCF interface delivered from stack + * @param user_data oc_ns_t object + */ +static void +post_ns(oc_request_t *request, oc_interface_mask_t iface_mask, void *user_data) +{ + (void)iface_mask; + + OC_PUSH_DBG("trying to update notification selector (\"%s\")... ", + oc_string(request->resource->uri)); + + if (set_ns_properties(request->resource, request->request_payload, user_data)) + oc_send_response(request, OC_STATUS_CHANGED); + else + oc_send_response(request, OC_STATUS_BAD_REQUEST); +} + +/* + * @brief callback function used to DELETE `Notification Selector + Push Proxy + * Resource which is autogenerated through `oic.if.crete` interface + * + * @param request request delivered from stack + * @param iface_mask OCF interface delivered from stack + * @param user_data oc_ns_t object + */ +static void +delete_ns(oc_request_t *request, oc_interface_mask_t iface_mask, + void *user_data) +{ + (void)iface_mask; + (void)user_data; + + OC_PUSH_DBG("trying to delete notification selector (\"%s\")... ", + oc_string(request->resource->uri)); + + if (oc_delete_resource(request->resource)) + oc_send_response(request, OC_STATUS_DELETED); + else + oc_send_response(request, OC_STATUS_BAD_REQUEST); +} + +/* + * @brief callback callback for getting & creating new `Notification Selector + * + Push Proxy` Resource instance + * + * @param href href delivered from stack + * @param types Resource types delivered from stack + * @param bm operation bitmask deliverd from stack + * @param iface_mask OCF interface delivered froms stack + * @param device device index + * @return oc_resource_t for new `Notification Selector + Push Proxy` + */ +static oc_resource_t * +get_ns_instance(const char *href, oc_string_array_t *types, + oc_resource_properties_t bm, oc_interface_mask_t iface_mask, + size_t device) +{ + oc_ns_t *ns_instance = (oc_ns_t *)oc_memb_alloc(&ns_instance_memb); + + if (ns_instance) { + ns_instance->resource = oc_new_resource( + NULL, href, (uint8_t)oc_string_array_get_allocated_size(*types), device); + if (ns_instance->resource) { + for (int i = 0; i < (int)oc_string_array_get_allocated_size(*types); + i++) { + const char *rt = oc_string_array_get_item(*types, i); + oc_resource_bind_resource_type(ns_instance->resource, rt); + } + oc_resource_bind_resource_interface(ns_instance->resource, iface_mask); + ns_instance->resource->properties = bm; + oc_resource_set_default_interface(ns_instance->resource, OC_IF_RW); + oc_resource_set_request_handler(ns_instance->resource, OC_GET, get_ns, + ns_instance); + oc_resource_set_request_handler(ns_instance->resource, OC_POST, post_ns, + ns_instance); + oc_resource_set_request_handler(ns_instance->resource, OC_DELETE, + delete_ns, ns_instance); + oc_resource_set_properties_cbs(ns_instance->resource, get_ns_properties, + ns_instance, set_ns_properties, + ns_instance); + oc_add_resource(ns_instance->resource); + + OC_PUSH_DBG("new link (\"%s\") and corresponding resource for \"%s\" " + "collection is created", + oc_string(ns_instance->resource->uri), PUSHCONF_RSC_PATH); + + /* initialize properties */ + oc_init_string(ns_instance->phref); + oc_init_string_array(ns_instance->prt); + oc_init_string_array(ns_instance->pif); + oc_init_string(ns_instance->pushtarget_di); + oc_init_string(ns_instance->targetpath); + oc_init_string_array(ns_instance->sourcert); + oc_new_string(&ns_instance->state, pp_statestr(OC_PP_WFP), + strlen(pp_statestr(OC_PP_WFP))); + ns_instance->user_data = NULL; + + OC_PUSH_DBG("state of Push Proxy (\"%s\") is initialized (%s)", + oc_string(ns_instance->resource->uri), + pp_statestr(OC_PP_WFP)); + + /* + * add this new Notification Selector Resource to the list + * which keeps all Notification Selectors of all Devices + */ + oc_list_add(ns_list, ns_instance); + return ns_instance->resource; + } else { + OC_PUSH_ERR("oc_new_resource() error!"); + oc_memb_free(&ns_instance_memb, ns_instance); + } + } else { + OC_PUSH_ERR("oc_memb_alloc() error!"); + } + + return NULL; +} + +/* + * @brief callback for freeing existing notification selector + * (this callback is called when target resource pointed by `link` is deleted + * by calling `oc_delete_resource()`) + * + */ +static void +free_ns_instance(oc_resource_t *resource) +{ + oc_ns_t *ns_instance = (oc_ns_t *)oc_list_head(ns_list); + oc_endpoint_t *ep; + + OC_PUSH_DBG("delete ns_instance for resource (\"%s\")...", + oc_string(resource->uri)); + + while (ns_instance) { + if (ns_instance->resource == resource) { + /* remove link target resource itself here... */ + oc_delete_resource(resource); + + /* remove oc_ns_t instance from list */ + oc_list_remove(ns_list, ns_instance); + + /* free each field of ns_instance */ + oc_free_string(&ns_instance->phref); + oc_free_string_array(&ns_instance->prt); + oc_free_string_array(&ns_instance->pif); + + ep = ns_instance->pushtarget_ep.next; + oc_endpoint_t *next; + while (ep) { + next = ep->next; + oc_free_endpoint(ep); + ep = next; + } + + oc_free_string(&ns_instance->targetpath); + oc_free_string(&ns_instance->pushqif); + oc_free_string_array(&ns_instance->sourcert); + + oc_free_string(&ns_instance->state); + + oc_memb_free(&ns_instance_memb, ns_instance); + return; + } + ns_instance = ns_instance->next; + } +} + +/* + * + * @brief initialize Push Configuration Resource + * + * @details + * for Origin Server: \n + * - Push Configuration ("oic.r.pushconfiguration") \n + * - Notification Selector + Push Proxy ("oic.r.notificationselector" + + * "oic.r.pushproxy") \n + * + * @param device_index device index + */ +void +oc_create_pushconf_resource(size_t device_index) +{ + /* create Push Configuration Resource */ + oc_resource_t *push_conf = + oc_new_collection("Push Configuration", PUSHCONF_RSC_PATH, 1, device_index); + + if (push_conf) { + oc_resource_bind_resource_type(push_conf, "oic.r.pushconfiguration"); + oc_resource_bind_resource_interface(push_conf, OC_IF_LL | OC_IF_CREATE | + OC_IF_BASELINE); + oc_resource_set_default_interface(push_conf, OC_IF_LL); + oc_resource_set_discoverable(push_conf, true); + + /* set "rts" Property */ + oc_collection_add_supported_rt(push_conf, "oic.r.notificationselector"); + oc_collection_add_supported_rt(push_conf, "oic.r.pushproxy"); + + /* LINK creation, deletion handler */ + oc_collections_add_rt_factory("oic.r.notificationselector", get_ns_instance, + free_ns_instance); + + oc_add_collection(push_conf); + } else { + OC_PUSH_ERR("oc_new_collection() error!"); + } +} + +/* + * @brief build response payload of pushed Resource + */ +static void +_build_rep_payload(CborEncoder *parent, oc_rep_t *rep) +{ + CborEncoder child; + oc_rep_t *obj; + + if (!rep) + return; + + switch (rep->type) { + case OC_REP_NIL: + break; + + case OC_REP_INT: + /* oc_rep_set_int(object, key, value) */ + g_err |= oc_rep_encode_text_string(parent, oc_string(rep->name), + oc_string_len(rep->name)); + g_err |= oc_rep_encode_int(parent, rep->value.integer); + + break; + + case OC_REP_DOUBLE: + /* oc_rep_set_double(object, key, value) */ + g_err |= oc_rep_encode_text_string(parent, oc_string(rep->name), + oc_string_len(rep->name)); + g_err |= oc_rep_encode_double(parent, rep->value.double_p); + + break; + + case OC_REP_BOOL: + /* oc_rep_set_boolean(object, key, value) */ + g_err |= oc_rep_encode_text_string(parent, oc_string(rep->name), + oc_string_len(rep->name)); + g_err |= oc_rep_encode_boolean(parent, rep->value.boolean); + + break; + + case OC_REP_BYTE_STRING_ARRAY: + /* oc_rep_open_array(root, xxxx) */ + g_err |= oc_rep_encode_text_string(parent, oc_string(rep->name), + oc_string_len(rep->name)); + memset(&child, 0, sizeof(child)); + g_err |= oc_rep_encoder_create_array(parent, &child, CborIndefiniteLength); + + /* oc_rep_add_byte_string(xxxx, str) */ + for (int i = 0; + i < (int)oc_string_array_get_allocated_size(rep->value.array); i++) { + g_err |= oc_rep_encode_byte_string( + &child, (const uint8_t *)oc_string_array_get_item(rep->value.array, i), + oc_string_array_get_item_size(rep->value.array, i)); + } + + /* oc_rep_close_array(root, xxxx) */ + g_err |= oc_rep_encoder_close_container(parent, &child); + break; + + case OC_REP_STRING_ARRAY: + /* oc_rep_open_array(root, xxxx) */ + g_err |= oc_rep_encode_text_string(parent, oc_string(rep->name), + oc_string_len(rep->name)); + memset(&child, 0, sizeof(child)); + g_err |= oc_rep_encoder_create_array(parent, &child, CborIndefiniteLength); + + /* oc_rep_add_text_string(xxxx, str) */ + for (int i = 0; + i < (int)oc_string_array_get_allocated_size(rep->value.array); i++) { + if ((const char *)oc_string_array_get_item(rep->value.array, i) != NULL) { + g_err |= oc_rep_encode_text_string( + &child, oc_string_array_get_item(rep->value.array, i), + oc_string_array_get_item_size(rep->value.array, i)); + } else { + g_err |= oc_rep_encode_text_string(&child, "", 0); + } + } + + /* oc_rep_close_array(root, xxxx) */ + g_err |= oc_rep_encoder_close_container(parent, &child); + break; + + case OC_REP_BOOL_ARRAY: + /* oc_rep_open_array(root, xxxx) */ + g_err |= oc_rep_encode_text_string(parent, oc_string(rep->name), + oc_string_len(rep->name)); + memset(&child, 0, sizeof(child)); + g_err |= oc_rep_encoder_create_array(parent, &child, CborIndefiniteLength); + + /* oc_rep_add_boolean(xxxx, value) */ + for (int i = 0; i < (int)rep->value.array.size; i++) { + g_err |= + oc_rep_encode_boolean(&child, ((char *)(rep->value.array.ptr))[i]); + } + + /* oc_rep_close_array(root, xxxx) */ + g_err |= oc_rep_encoder_close_container(parent, &child); + break; + + case OC_REP_DOUBLE_ARRAY: + /* oc_rep_open_array(root, xxxx) */ + g_err |= oc_rep_encode_text_string(parent, oc_string(rep->name), + oc_string_len(rep->name)); + memset(&child, 0, sizeof(child)); + g_err |= oc_rep_encoder_create_array(parent, &child, CborIndefiniteLength); + + /* oc_rep_add_double(xxxx, value) */ + for (int i = 0; i < (int)rep->value.array.size; i++) { + g_err |= + oc_rep_encode_double(&child, ((double *)(rep->value.array.ptr))[i]); + } + + /* oc_rep_close_array(root, xxxx) */ + g_err |= oc_rep_encoder_close_container(parent, &child); + break; + + case OC_REP_INT_ARRAY: + /* oc_rep_open_array(root, xxxx) */ + g_err |= oc_rep_encode_text_string(parent, oc_string(rep->name), + oc_string_len(rep->name)); + memset(&child, 0, sizeof(child)); + g_err |= oc_rep_encoder_create_array(parent, &child, CborIndefiniteLength); + + /* oc_rep_add_int(xxxx, value) */ + for (int i = 0; i < (int)rep->value.array.size; i++) { + g_err |= + oc_rep_encode_int(&child, ((int64_t *)(rep->value.array.ptr))[i]); + } + + /* oc_rep_close_array(root, xxxx) */ + g_err |= oc_rep_encoder_close_container(parent, &child); + break; + + case OC_REP_BYTE_STRING: + /* oc_rep_set_byte_string(object, key, value, length) */ + g_err |= oc_rep_encode_text_string(parent, oc_string(rep->name), + oc_string_len(rep->name)); + g_err |= oc_rep_encode_byte_string( + parent, (const uint8_t *)oc_string(rep->value.string), + oc_string_len(rep->value.string)); + break; + + case OC_REP_STRING: + /* oc_rep_set_text_string(object, key, value) */ + g_err |= oc_rep_encode_text_string(parent, oc_string(rep->name), + oc_string_len(rep->name)); + + if ((const char *)oc_string(rep->value.string) != NULL) { + g_err |= oc_rep_encode_text_string(parent, oc_string(rep->value.string), + oc_string_len(rep->value.string)); + } else { + g_err |= oc_rep_encode_text_string(parent, "", 0); + } + break; + + case OC_REP_OBJECT: + + /* oc_rep_open_object(parent, key) */ + g_err |= oc_rep_encode_text_string(parent, oc_string(rep->name), + oc_string_len(rep->name)); + memset(&child, 0, sizeof(child)); + g_err |= oc_rep_encoder_create_map(parent, &child, CborIndefiniteLength); + + _build_rep_payload(&child, rep->value.object); + + /* oc_rep_close_object(parent, key) */ + g_err |= oc_rep_encoder_close_container(parent, &child); + break; + + case OC_REP_OBJECT_ARRAY: + + /* oc_rep_open_array(root, xxxx) */ + g_err |= oc_rep_encode_text_string(parent, oc_string(rep->name), + oc_string_len(rep->name)); + memset(&child, 0, sizeof(child)); + g_err |= oc_rep_encoder_create_array(parent, &child, CborIndefiniteLength); + + /* recurse remaining objects... */ + obj = rep->value.object_array; + while (obj) { + /* oc_rep_object_array_begin_item(key) */ + CborEncoder obj_map; + memset(&obj_map, 0, sizeof(obj_map)); + g_err |= + oc_rep_encoder_create_map(&child, &obj_map, CborIndefiniteLength); + + _build_rep_payload(&obj_map, obj->value.object); + + /* oc_rep_object_array_end_item(key) */ + g_err |= oc_rep_encoder_close_container(&child, &obj_map); + obj = obj->next; + } + + /* oc_rep_close_array(root, xxxx) */ + g_err |= oc_rep_encoder_close_container(parent, &child); + break; + + default: + break; + } + + _build_rep_payload(parent, rep->next); +} + +/* + * @brief find Resource representation for pushed Resource + * + * @param uri uri for pushed Resource + * @param device_index device index which pushed Resource belongs to + * @return `oc_pushd_rsc_rep_t` instance + */ +static oc_pushd_rsc_rep_t * +_find_pushd_rsc_rep_by_uri(oc_string_t *uri, size_t device_index) +{ + oc_pushd_rsc_rep_t *pushd_rsc_rep = + (oc_pushd_rsc_rep_t *)(oc_list_head(pushd_rsc_rep_list)); + + while (pushd_rsc_rep) { + if (!strcmp(oc_string(pushd_rsc_rep->resource->uri), oc_string(*uri)) && + (pushd_rsc_rep->resource->device == device_index)) { + break; + } else { + pushd_rsc_rep = pushd_rsc_rep->next; + } + } + + return pushd_rsc_rep; +} + +/* + * @brief callback for RETRIEVE of pushed Resource + * + * @param request request delivered from stack + * @param iface_mask OCF interface delivered from stack + * @param user_data not used + */ +static void +get_pushd_rsc(oc_request_t *request, oc_interface_mask_t iface_mask, + void *user_data) +{ + (void)user_data; + + int result = OC_STATUS_OK; + oc_pushd_rsc_rep_t *pushd_rsc_rep = _find_pushd_rsc_rep_by_uri( + &request->resource->uri, request->resource->device); + + if (!pushd_rsc_rep) { + OC_PUSH_ERR("something wrong, can't find resource representation for " + "pushed resource (%s)...", + oc_string(request->resource->uri)); + return; + } + + if (pushd_rsc_rep->rep) { + oc_rep_begin_root_object(); + switch (iface_mask) { + case OC_IF_BASELINE: + oc_process_baseline_interface(request->resource); + OC_FALLTHROUGH; + case OC_IF_R: + case OC_IF_RW: + _build_rep_payload(&root_map, pushd_rsc_rep->rep); + break; + default: + break; + } + oc_rep_end_root_object(); + + oc_send_response(request, result); + } else { + OC_PUSH_ERR("resource representation for pushed resource (%s) is found, " + "but no resource representation for it is built yet!", + oc_string(request->resource->uri)); + + oc_send_response(request, OC_STATUS_NOT_FOUND); + } +} + +/* + * @brief check if "rt" of pushed resource is part of "rts" (all value of + * "rt" should be part of "rts") + * + * @param recv_obj receiver object + * @param rep payload representation of pushed Resource + * @return not 0: found, 0: not found + */ +static bool +_check_pushd_rsc_rt(oc_recv_t *recv_obj, oc_rep_t *rep) +{ + bool result = 0; + size_t rt_len; + size_t rts_len; + size_t i; + size_t j; + + if (!recv_obj || !rep) + return result; + + rts_len = oc_string_array_get_allocated_size(recv_obj->rts); + + /* if "rts" is not configured (""), any pushed resource can be accepted... */ + if ((rts_len == 1) && !strcmp(oc_string_array_get_item(recv_obj->rts, 0), "")) + return 1; + + while (rep) { + if ((rep->type == OC_REP_STRING_ARRAY) && + !strcmp(oc_string(rep->name), "rt")) { + rt_len = oc_string_array_get_allocated_size(rep->value.array); + for (i = 0; i < rt_len; i++) { + for (j = 0; j < rts_len; j++) { + if (!strcmp(oc_string_array_get_item(rep->value.array, i), + oc_string_array_get_item(recv_obj->rts, j))) + break; + } + if (j == rts_len) { + break; + } + } + if (i == rt_len) + result = 1; + + break; + } + rep = rep->next; + } + + return result; +} + +/* + * @brief find Resource representation of Push Receiver Resource + * which belongs to `device_index` + * + * @param device_index device index + * @return `oc_recvs_t` instance + */ +static oc_recvs_t * +_find_recvs_by_device(size_t device_index) +{ + oc_recvs_t *recvs_instance = (oc_recvs_t *)oc_list_head(recvs_list); + + while (recvs_instance) { + if (recvs_instance->resource->device == device_index) { + break; + } else { + recvs_instance = recvs_instance->next; + } + } + + return recvs_instance; +} + +/* + * @brief build Resource representation for pushed Resource + * + * @details `oc_rep_set_pool()` should be called before calling this func + * + * @param org_rep Resource representation delivered from stack + * @return duplication of `org_rep` + */ +static oc_rep_t * +_create_pushd_rsc_rep(oc_rep_t *org_rep) +{ + if (!org_rep) + return org_rep; + + oc_rep_t *new_rep; + + new_rep = oc_alloc_rep(); + + new_rep->next = _create_pushd_rsc_rep(org_rep->next); + + new_rep->type = org_rep->type; + oc_new_string(&((new_rep)->name), oc_string(org_rep->name), + oc_string_len(org_rep->name)); + + switch (org_rep->type) { + case OC_REP_NIL: + break; + case OC_REP_INT: + new_rep->value.integer = org_rep->value.integer; + break; + case OC_REP_DOUBLE: + new_rep->value.double_p = org_rep->value.double_p; + break; + case OC_REP_BOOL: + new_rep->value.boolean = org_rep->value.boolean; + break; + case OC_REP_BYTE_STRING_ARRAY: + case OC_REP_STRING_ARRAY: + oc_new_string_array( + &(new_rep->value.array), + oc_string_array_get_allocated_size(org_rep->value.array)); + for (int i = 0; + i < (int)oc_string_array_get_allocated_size(org_rep->value.array); + i++) { + oc_string_array_add_item( + new_rep->value.array, + oc_string_array_get_item(org_rep->value.array, i)); + } + break; + case OC_REP_BOOL_ARRAY: + oc_new_bool_array(&(new_rep->value.array), + oc_bool_array_size(org_rep->value.array)); + memcpy(new_rep->value.array.ptr, org_rep->value.array.ptr, + org_rep->value.array.size * sizeof(uint8_t)); + break; + case OC_REP_DOUBLE_ARRAY: + oc_new_double_array(&(new_rep->value.array), + oc_double_array_size(org_rep->value.array)); + memcpy(new_rep->value.array.ptr, org_rep->value.array.ptr, + org_rep->value.array.size * sizeof(double)); + break; + case OC_REP_INT_ARRAY: + oc_new_int_array(&(new_rep->value.array), + oc_int_array_size(org_rep->value.array)); + memcpy(new_rep->value.array.ptr, org_rep->value.array.ptr, + org_rep->value.array.size * sizeof(int64_t)); + break; + case OC_REP_BYTE_STRING: + case OC_REP_STRING: + oc_new_string(&(new_rep->value.string), oc_string(org_rep->value.string), + oc_string_len(org_rep->value.string)); + break; + case OC_REP_OBJECT: + new_rep->value.object = _create_pushd_rsc_rep(org_rep->value.object); + break; + case OC_REP_OBJECT_ARRAY: + new_rep->value.object_array = + _create_pushd_rsc_rep(org_rep->value.object_array); + break; + default: + break; + } + + return new_rep; +} + +/* + * @brief print Resource representation + */ +void +oc_print_pushd_rsc(const oc_rep_t *payload) +{ + static int depth = 0; + char prefix_width = 3; + const char *prefix_str = " "; + char depth_prefix[1024]; + const oc_rep_t *rep = payload; + const oc_rep_t *obj; + int i; + + /* check buffer overflow */ + if ((size_t)(prefix_width * (depth + 1) + 1) > sizeof(depth_prefix)) { + return; + } + +#if 0 + depth_prefix[sizeof(depth_prefix) - 1] = '\0'; + depth++; + for (i = 0; i < depth; i++) { + strncpy(depth_prefix + (i * prefix_width), prefix_str, sizeof(depth_prefix)-(i * prefix_width)); + } + if (depth_prefix[sizeof(depth_prefix) - 1] != '\0') { + return; + } +#endif + depth++; + for (i = 0; i < depth; i++) { + strcpy(depth_prefix + (i * prefix_width), prefix_str); + } + + depth_prefix[i * prefix_width] = '\0'; + + if (!rep) { + OC_PUSH_DBG("no data!"); + depth--; + return; + } + + if (depth == 1) + PRINT("\n\n"); + + while (rep != NULL) { + switch (rep->type) { + case OC_REP_BOOL: + PRINT("%s%s: %d\n", depth_prefix, oc_string(rep->name), + rep->value.boolean); + break; + + case OC_REP_BOOL_ARRAY: + PRINT("%s%s: \n%s[\n", depth_prefix, oc_string(rep->name), depth_prefix); + for (i = 0; i < (int)oc_bool_array_size(rep->value.array); i++) { + PRINT("%s%s\"%d\"\n", depth_prefix, prefix_str, + oc_bool_array(rep->value.array)[i]); + } + PRINT("%s]\n", depth_prefix); + break; + + case OC_REP_INT: + PRINT("%s%s: %ld\n", depth_prefix, oc_string(rep->name), + rep->value.integer); + break; + + case OC_REP_INT_ARRAY: + PRINT("%s%s: \n%s[\n", depth_prefix, oc_string(rep->name), depth_prefix); + for (i = 0; i < (int)oc_int_array_size(rep->value.array); i++) { + PRINT("%s%s\"%ld\"\n", depth_prefix, prefix_str, + oc_int_array(rep->value.array)[i]); + } + PRINT("%s]\n", depth_prefix); + break; + + case OC_REP_DOUBLE: + PRINT("%s%s: %f\n", depth_prefix, oc_string(rep->name), + rep->value.double_p); + break; + + case OC_REP_DOUBLE_ARRAY: + PRINT("%s%s: \n%s[\n", depth_prefix, oc_string(rep->name), depth_prefix); + for (i = 0; i < (int)oc_double_array_size(rep->value.array); i++) { + PRINT("%s%s\"%f\"\n", depth_prefix, prefix_str, + oc_double_array(rep->value.array)[i]); + } + PRINT("%s]\n", depth_prefix); + break; + + case OC_REP_STRING: + PRINT("%s%s: \"%s\"\n", depth_prefix, oc_string(rep->name), + oc_string(rep->value.string)); + break; + + case OC_REP_STRING_ARRAY: + PRINT("%s%s: \n%s[\n", depth_prefix, oc_string(rep->name), depth_prefix); + for (i = 0; i < (int)oc_string_array_get_allocated_size(rep->value.array); + i++) { + PRINT("%s%s\"%s\"\n", depth_prefix, prefix_str, + oc_string_array_get_item(rep->value.array, i)); + } + PRINT("%s]\n", depth_prefix); + break; + + case OC_REP_OBJECT: + PRINT("%s%s: \n%s{ \n", depth_prefix, oc_string(rep->name), depth_prefix); + oc_print_pushd_rsc(rep->value.object); + PRINT("%s}\n", depth_prefix); + break; + + case OC_REP_OBJECT_ARRAY: + case OC_REP_NIL: + PRINT("%s%s: \n%s[\n", depth_prefix, oc_string(rep->name), depth_prefix); + depth++; + obj = rep->value.object_array; + while (obj) { + PRINT("%s%s{\n", depth_prefix, prefix_str); + oc_print_pushd_rsc(obj->value.object); + obj = obj->next; + PRINT("%s%s}", depth_prefix, prefix_str); + if (obj) + PRINT(",\n"); + else + PRINT("\n"); + } + depth--; + PRINT("%s]\n", depth_prefix); + break; + + default: + PRINT("%s%s: unknown type: %d ???\n", depth_prefix, oc_string(rep->name), + rep->type); + break; + } + rep = rep->next; + } + depth--; +} + +/* + * @brief try to find `receiver` object which has `uri` as its `uri` + * Property + * + * @param recvs_instance Resource representation of Push Receiver Resource + * @param uri uri string + * @param uri_len length of uri string + * @return NULL: not found, not NULL: found `receiver` object + */ +static oc_recv_t * +_find_recv_obj_by_uri(oc_recvs_t *recvs_instance, const char *uri, int uri_len) +{ + oc_recv_t *recv = (oc_recv_t *)oc_list_head(recvs_instance->receivers); + + while (recv) { + if (!strncmp(oc_string(recv->receiveruri), uri, uri_len)) { + break; + } else { + recv = recv->next; + } + } + + return recv; +} + +/* + * @brief try to find `receiver` object which has `uri_string` as its `uri` + * Property + */ +#define _find_recv_obj_by_uri2(recvs_instance, uri_string) \ + (_find_recv_obj_by_uri((recvs_instance), oc_string(uri_string), \ + oc_string_len(uri_string))) + +static oc_rep_t * +_rep_list_remove(oc_rep_t **rep_list, oc_rep_t **item) +{ + oc_rep_t *removed_item; + + for (oc_rep_t **l = rep_list; *l != NULL; l = &(*l)->next) { + if (*l == *item) { + *l = (*l)->next; + + removed_item = *item; + *item = (*item)->next; + removed_item->next = NULL; + return removed_item; + } + } + + return NULL; +} + +/* + * @brief callback for UPDATE of pushed Resource + * + * @param request request delivered from stack + * @param iface_mask OCF interface delivered from stack + * @param user_data not used + */ +static void +post_pushd_rsc(oc_request_t *request, oc_interface_mask_t iface_mask, + void *user_data) +{ + (void)iface_mask; + (void)user_data; + + int result = OC_STATUS_CHANGED; + oc_rep_t *rep = request->request_payload; + oc_rep_t *common_property; + oc_pushd_rsc_rep_t *pushd_rsc_rep; + oc_recvs_t *recvs_instance; + oc_recv_t *recv_obj; + + recvs_instance = _find_recvs_by_device(request->resource->device); + if (recvs_instance) { + recv_obj = _find_recv_obj_by_uri2(recvs_instance, request->resource->uri); + if (!recv_obj) { + OC_PUSH_ERR("can't find receiver object for (%s)", + oc_string(request->resource->uri)); + return; + } + } else { + OC_PUSH_ERR("can't find push receiver properties for (%s) in device (%ld), " + "the target resource may not be a \"push receiver resource\"", + oc_string(request->resource->uri), request->resource->device); + return; + } + + /* check if rt of pushed resource is part of configured rts */ + if (!_check_pushd_rsc_rt(recv_obj, rep)) { + OC_PUSH_ERR( + "pushed resource type(s) is not in \"rts\" of push recerver object"); + result = OC_STATUS_FORBIDDEN; + } else { + while (rep) { + /* + * <2022/4/20> skip "rt" (array), "if" (array), "n" (optional), "id" + * (optional) common property in the payload ("oic.r.pushpayload") because + * "rt" and "if" are already processed here... + */ + switch (rep->type) { + case OC_REP_STRING_ARRAY: + if (!strcmp(oc_string(rep->name), "rt")) { + /* update rt */ + oc_free_string_array(&request->resource->types); + oc_new_string_array( + &request->resource->types, + oc_string_array_get_allocated_size(rep->value.array)); + for (int i = 0; + i < (int)oc_string_array_get_allocated_size(rep->value.array); + i++) { + oc_string_array_add_item( + request->resource->types, + oc_string_array_get_item(rep->value.array, i)); + } + + /* + * remove rep from list.. + * - remove rep from list and move pointer to the next rep... + * - removed rep is handed over as return value + */ + common_property = _rep_list_remove(&request->request_payload, &rep); + oc_free_rep(common_property); + continue; + + } else if (!strcmp(oc_string(rep->name), "if")) { + /* update if */ + request->resource->interfaces = 0; + for (int i = 0; + i < (int)oc_string_array_get_allocated_size(rep->value.array); + i++) { + request->resource->interfaces |= oc_ri_get_interface_mask( + oc_string_array_get_item(rep->value.array, i), + oc_string_array_get_item_size(rep->value.array, i)); + } + + common_property = _rep_list_remove(&request->request_payload, &rep); + oc_free_rep(common_property); + continue; + } + break; + case OC_REP_STRING: + if (!strcmp(oc_string(rep->name), "n")) { + /* update name */ + oc_set_string(&request->resource->name, oc_string(rep->value.string), + oc_string_len(rep->value.string)); + + common_property = _rep_list_remove(&request->request_payload, &rep); + oc_free_rep(common_property); + continue; + } + break; + + default: + break; + } + rep = rep->next; + } + + /* + * + * store received "oic.r.pushpayload" resource contents + * + */ + pushd_rsc_rep = _find_pushd_rsc_rep_by_uri(&request->resource->uri, + request->resource->device); + if (pushd_rsc_rep) { + oc_rep_set_pool(&rep_instance_memb); + oc_free_rep(pushd_rsc_rep->rep); + + if (!(pushd_rsc_rep->rep = + _create_pushd_rsc_rep(request->request_payload))) { + OC_PUSH_ERR("something wrong!, creating corresponding pushed resource " + "representation faild (%s) ! ", + oc_string(request->resource->uri)); + result = OC_STATUS_INTERNAL_SERVER_ERROR; + } else { +#ifdef OC_PUSHDEBUG +// PRINT("\npushed target resource: %s\n", +// oc_string(pushd_rsc_rep->resource->uri)); +// oc_print_pushd_rsc(pushd_rsc_rep->rep); +#endif + if (oc_push_arrived) + oc_push_arrived(pushd_rsc_rep); + } + } else { + OC_PUSH_ERR("something wrong!, can't find corresponding pushed resource " + "representation instance for (%s) ", + oc_string(request->resource->uri)); + result = OC_STATUS_NOT_FOUND; + } + } + + if (result == OC_STATUS_CHANGED && + !(pushd_rsc_rep->resource->properties & OC_DISCOVERABLE)) { + /* + * if this is the first push to this target Resource... make it discoverable + */ + OC_PUSH_DBG("this is the first push to (%s), from now on it will be " + "discoverable...", + oc_string(pushd_rsc_rep->resource->uri)); + oc_resource_set_discoverable(pushd_rsc_rep->resource, true); + } + + oc_send_response(request, result); +} + +/* + * @brief callback for GET of Push Receiver Resource + */ +static void +get_pushrecv(oc_request_t *request, oc_interface_mask_t iface_mask, + void *user_data) +{ + (void)user_data; + + int result = OC_STATUS_OK; + + oc_rep_begin_root_object(); + switch (iface_mask) { + case OC_IF_BASELINE: + oc_process_baseline_interface(request->resource); + /* fall through */ + OC_FALLTHROUGH; + case OC_IF_RW: + /* + * `receivers` object array + */ + oc_rep_open_array(root, receivers); + oc_recvs_t *recvs_instance = (oc_recvs_t *)oc_list_head(recvs_list); + while (recvs_instance) { + if (recvs_instance->resource == request->resource) { + oc_recv_t *recv_obj = + (oc_recv_t *)oc_list_head(recvs_instance->receivers); + while (recv_obj) { + /* == open new receiver object == */ + oc_rep_object_array_begin_item(receivers); + /* receiver:receiveruri */ + oc_rep_set_text_string(receivers, receiveruri, + oc_string(recv_obj->receiveruri)); + + /* receiver:rts[] */ + oc_rep_open_array(receivers, rts); + for (int j = 0; + j < (int)oc_string_array_get_allocated_size(recv_obj->rts); + j++) { + oc_rep_add_text_string(rts, + oc_string_array_get_item(recv_obj->rts, j)); + } + oc_rep_close_array(receivers, rts); + + /* == close object == */ + oc_rep_object_array_end_item(receivers); + + recv_obj = recv_obj->next; + } + + break; + } + + recvs_instance = recvs_instance->next; + } + oc_rep_close_array(root, receivers); + break; + default: + break; + } + oc_rep_end_root_object(); + + oc_send_response(request, result); +} + +/* + * @brief purge app resource (`oc_resource_t`) and resource representation + * instance (`oc_pushd_rsc_rep_t`) accessed through `uri` in device whose + * index is `device_index` + * + * @param uri URI of app resource to be purged + * @param device_index index of device where the target resource resides + */ +static void +_purge_pushd_rsc(oc_string_t *uri, size_t device_index) +{ + oc_resource_t *pushd_rsc = oc_ri_get_app_resource_by_uri( + oc_string(*uri), oc_string_len(*uri), device_index); + oc_pushd_rsc_rep_t *pushd_rsc_rep = + _find_pushd_rsc_rep_by_uri(uri, device_index); + + if (pushd_rsc_rep) { + /* step 1. purge `rep` */ + oc_rep_set_pool(&rep_instance_memb); + oc_free_rep(pushd_rsc_rep->rep); + + /* step 2. remove pushed resource representation from `pushed_rsc_rep_list` + */ + oc_list_remove(pushd_rsc_rep_list, pushd_rsc_rep); + oc_memb_free(&pushd_rsc_rep_instance_memb, pushd_rsc_rep); + } else { + OC_PUSH_ERR( + "can't find resource representation for pushed resource (%s)...", + oc_string(*uri)); + return; + } + + if (pushd_rsc) { + /* step 3. remove pushed Resource from `app_resources` */ + OC_PUSH_DBG("purge pushed resource (%s)...", oc_string(*uri)); + oc_delete_resource(pushd_rsc); + return; + } + OC_PUSH_ERR("can't find pushed resource (%s)...", oc_string(*uri)); +} + +/* + * @brief create app Resource (`oc_resource_t`) and Resource representation + * (`oc_pushd_rsc_rep_t`) instance for the pushed Resource + * + * @param recv_obj receiver object that points pushed resource + * @param resource Push Receiver resource + * @return true:success, false:fail + */ +static bool +_create_pushd_rsc(oc_recv_t *recv_obj, const oc_resource_t *resource) +{ + bool result = true; + + /* create Push Receiver Resource */ + oc_resource_t *pushd_rsc = oc_new_resource( + "Pushed Resource", oc_string(recv_obj->receiveruri), 1, resource->device); + + if (pushd_rsc) { + /* + * XXX, if a resource binds empty resource type (""), when a client retrieve + * this it may receive weird value... + */ + oc_resource_bind_resource_type(pushd_rsc, " "); + oc_resource_bind_resource_interface(pushd_rsc, OC_IF_RW | OC_IF_BASELINE); + oc_resource_set_default_interface(pushd_rsc, OC_IF_RW); + /* + * initially this resource should not be discoverable... + * once any resource is pushed to this resource, it will be discoverable... + */ + oc_resource_set_discoverable(pushd_rsc, false); + + oc_resource_set_request_handler(pushd_rsc, OC_GET, get_pushd_rsc, NULL); + oc_resource_set_request_handler(pushd_rsc, OC_POST, post_pushd_rsc, NULL); + /* + * when this pushed resource is deleted.. delete corresponding "receiver" + * object from receivers array of push receiver resource + * => this is done in delete_pushrecv() (delete handler of pushreceiver + * resource) + */ + + if (!oc_add_resource(pushd_rsc)) + result = false; + + /* create resource representation container for this resource */ + oc_pushd_rsc_rep_t *pushd_rsc_rep_instance = + (oc_pushd_rsc_rep_t *)oc_memb_alloc(&pushd_rsc_rep_instance_memb); + if (pushd_rsc_rep_instance) { + pushd_rsc_rep_instance->resource = pushd_rsc; + pushd_rsc_rep_instance->rep = NULL; + oc_list_add(pushd_rsc_rep_list, pushd_rsc_rep_instance); + } else { + OC_PUSH_ERR("oc_memb_alloc() error!"); + result = false; + } + } else { + OC_PUSH_ERR("oc_new_resource() error!"); + result = false; + } + + return result; +} + +/* + * @brief remove receiver object array from `recv_obj_list`, + * and app Resource pointed by `receiveruri` of each receiver + * object in the array + * + * @param recvs_instance Resource representation of Push Receiver Resource + */ +static void +_purge_recv_obj_list(oc_recvs_t *recvs_instance) +{ + oc_recv_t *recv_obj = (oc_recv_t *)oc_list_pop(recvs_instance->receivers); + + while (recv_obj) { + OC_PUSH_DBG("purge receiver obj for ( %s (device: %ld) )... ", + oc_string(recv_obj->receiveruri), + recvs_instance->resource->device); + + /* delete app resource pointed by `receiveruri` first.. */ + _purge_pushd_rsc(&recv_obj->receiveruri, recvs_instance->resource->device); + + oc_free_string(&recv_obj->receiveruri); + oc_free_string_array(&recv_obj->rts); + oc_memb_free(&recv_instance_memb, recv_obj); + + recv_obj = (oc_recv_t *)oc_list_pop(recvs_instance->receivers); + } +} + +/* + * @brief update existing receiver object with new contents + * + * @param recv_obj existing receiver object + * @param resource app Resource pointed by `recv_obj->receiveruri` + * @param rep payload representation of new receiver object + */ +static void +_update_recv_obj(oc_recv_t *recv_obj, const oc_recvs_t *recvs_instance, + oc_rep_t *rep) +{ + oc_pushd_rsc_rep_t *pushd_rsc_rep; + + while (rep) { + switch (rep->type) { + case OC_REP_STRING: + if (!strcmp(oc_string(rep->name), "receiveruri")) { + OC_PUSH_DBG("target receiveruri: \"%s\", new receiveruri: \"%s\"", + oc_string(recv_obj->receiveruri), + oc_string(rep->value.string)); + /* if `receiveruri' is different from existing `receiveruri`, + * update URI of Resource pointed by previous `receiveruri` */ + if (strcmp(oc_string(recv_obj->receiveruri), + oc_string(rep->value.string))) { + pushd_rsc_rep = _find_pushd_rsc_rep_by_uri( + &recv_obj->receiveruri, recvs_instance->resource->device); + + if (pushd_rsc_rep) { + OC_PUSH_DBG("pushed resource representation (\"%s\") is found", + oc_string(pushd_rsc_rep->resource->uri)); + + oc_free_string(&pushd_rsc_rep->resource->uri); + oc_store_uri(oc_string(rep->value.string), + &pushd_rsc_rep->resource->uri); + } + } + + oc_set_string(&recv_obj->receiveruri, oc_string(rep->value.string), + oc_string_len(rep->value.string)); + } + break; + + case OC_REP_STRING_ARRAY: + if (!strcmp(oc_string(rep->name), "rts")) { + oc_free_string_array(&recv_obj->rts); + size_t len = oc_string_array_get_allocated_size(rep->value.array); + oc_new_string_array(&recv_obj->rts, len); + + for (size_t i = 0; i < len; i++) { + oc_string_array_add_item( + recv_obj->rts, oc_string_array_get_item(rep->value.array, i)); + } + } + break; + + default: + OC_PUSH_ERR("something wrong, unexpected Property type: %d", rep->type); + return; + } + rep = rep->next; + } +} + +/* + * @brief create & add new receiver object + * + * @param recvs_instance Resource representation of Push Receiver Resource + * @param rep received new receiver object object + * @return true:success, false:fail + */ +static bool +_create_recv_obj(oc_recvs_t *recvs_instance, oc_rep_t *rep) +{ + bool result = false; + char mandatory_property_check = 0; + oc_recv_t *recv_obj = (oc_recv_t *)oc_memb_alloc(&recv_instance_memb); + + if (!recv_obj) { + OC_PUSH_ERR("oc_memb_alloc() error!"); + return result; + } + + while (rep) { + switch (rep->type) { + case OC_REP_STRING: + if (!strcmp(oc_string(rep->name), "receiveruri")) { + oc_new_string(&recv_obj->receiveruri, oc_string(rep->value.string), + oc_string_len(rep->value.string)); + mandatory_property_check |= 0x1; + } + break; + + case OC_REP_STRING_ARRAY: + if (!strcmp(oc_string(rep->name), "rts")) { + size_t len = oc_string_array_get_allocated_size(rep->value.array); + oc_new_string_array(&recv_obj->rts, len); + + for (size_t i = 0; i < len; i++) { + oc_string_array_add_item( + recv_obj->rts, oc_string_array_get_item(rep->value.array, i)); + } + + mandatory_property_check |= 0x2; + } + break; + + default: + OC_PUSH_ERR("something wrong, unexpected Property type: %d", rep->type); + break; + } + rep = rep->next; + } + + if (mandatory_property_check != 0x3) { + oc_memb_free(&recv_instance_memb, recv_obj); + return result; + } + + oc_list_add(recvs_instance->receivers, recv_obj); + + /* create app resource corresponding to receiver object */ + OC_PUSH_DBG("new app resource for new receiver obj (\"%s\") is created...", + oc_string(recv_obj->receiveruri)); + if (_create_pushd_rsc(recv_obj, recvs_instance->resource)) + result = true; + + return result; +} + +/* + * @brief validate if receiver object array has any problem or not + * + * @param obj_list receiver object array + * @return true:success, false:fail + */ +static bool +_validate_recv_obj_list(oc_rep_t *obj_list) +{ + oc_rep_t *rep; + bool result = false; + char mandatory_property_check; + + if (!obj_list) { + OC_PUSH_ERR("empty object array!"); + return result; + } + + for (oc_rep_t *recv_obj = obj_list; recv_obj != NULL; + recv_obj = recv_obj->next) { + + mandatory_property_check = 0; + rep = recv_obj->value.object; + + for (; rep != NULL; rep = rep->next) { + switch (rep->type) { + case OC_REP_STRING: + if (!strcmp(oc_string(rep->name), "receiveruri")) { + mandatory_property_check |= 0x1; + } + break; + + case OC_REP_STRING_ARRAY: + if (!strcmp(oc_string(rep->name), "rts")) { + mandatory_property_check |= 0x2; + } + break; + + default: + OC_PUSH_ERR("something wrong, unexpected Property type: %d", rep->type); + goto exit; + } + } + + if (mandatory_property_check != 0x3) { + OC_PUSH_ERR("mandatory Property is missing (%#x)", + 0x3 - mandatory_property_check); + goto exit; + } + } /* for */ + + result = true; + +exit: + return result; +} + +/* + * @brief replace existing receiver object array with new one + * + * @param recvs_instance Resource representation of Push Receiver Resource + * @param rep payload representation of new receiver object array + * @return true:success, false:fail + */ +static bool +_replace_recv_obj_array(oc_recvs_t *recvs_instance, oc_rep_t *rep) +{ + bool result = false; + + if (rep && (rep->type == OC_REP_OBJECT_ARRAY)) { + /* check if received new receiver object array is ok */ + if (!_validate_recv_obj_list(rep->value.object_array)) + goto exit; + + /* if received new receiver object array is ok, do the job... */ + /* remove existing receivers object array */ + _purge_recv_obj_list(recvs_instance); + + /* replace `receivers` obj array with new one */ + for (oc_rep_t *rep_obj = rep->value.object_array; rep_obj != NULL; + rep_obj = rep_obj->next) { + _create_recv_obj(recvs_instance, rep_obj->value.object); + } + + result = true; + } else { + OC_PUSH_ERR("something wrong, unexpected Property type: %d", rep->type); + } + +exit: + return result; +} + +/* + * @brief POST callback for Push Receiver Resource + */ +static void +post_pushrecv(oc_request_t *request, oc_interface_mask_t iface_mask, + void *user_data) +{ + (void)iface_mask; + (void)user_data; + + const char *uri_param = NULL; + int uri_param_len = -1; + oc_recv_t *recv_obj; + oc_recvs_t *recvs_instance; + oc_rep_t *rep = request->request_payload; + int result = OC_STATUS_CHANGED; + + /* try to get "receiveruri" parameter */ + if (request->query) { + uri_param_len = oc_ri_get_query_value(request->query, request->query_len, + "receiveruri", &uri_param); + if (uri_param_len != -1) { + OC_PUSH_DBG( + "received query string: \"%.*s\", found \"receiveruri\": \"%.*s\" ", + (int)request->query_len, request->query, uri_param_len, uri_param); + } + } else { + OC_PUSH_DBG("request->query is NULL"); + } + + /* look up target receivers of target Push Receiver Resource */ + recvs_instance = (oc_recvs_t *)oc_list_head(recvs_list); + while (recvs_instance) { + if (recvs_instance->resource == request->resource) { + OC_PUSH_DBG("receivers obj array instance \"%s\"@Device(%ld) is found!", + oc_string(request->resource->uri), request->resource->device); + + if (uri_param_len != -1) { + recv_obj = + _find_recv_obj_by_uri(recvs_instance, uri_param, uri_param_len); + if (recv_obj) { + + /* if the given `receiveruri` parameter is in existing receivers + * array, just update existing receiver object */ + OC_PUSH_DBG("existing receiver obj (\"%.*s\") is found, update it...", + uri_param_len, uri_param); + _update_recv_obj(recv_obj, recvs_instance, rep); + } else { + /* if the given `receiveruri` parameter is not in existing receivers + * array, add new receiver object to the receivers array */ + OC_PUSH_DBG("can't find receiver obj which has uri \"%.*s\", " + "creating new receiver obj...", + uri_param_len, uri_param); + + /* + * if there is already NORMAL resource whose path is same as requested + * target uri, just ignore this request and return error! + */ + if (oc_ri_get_app_resource_by_uri(uri_param, uri_param_len, + recvs_instance->resource->device)) { + OC_PUSH_ERR("can't create receiver obj because its receiveruri is " + "same as existing app resource (\"%.*s\")...", + uri_param_len, uri_param); + result = OC_STATUS_FORBIDDEN; + goto exit; + } + + /* create corresponding receiver object */ + if (!_create_recv_obj(recvs_instance, rep)) { + OC_PUSH_ERR("failed to create receiver obj whose receiveruri is " + "(\"%.*s\")...", + uri_param_len, uri_param); + result = OC_STATUS_BAD_REQUEST; + goto exit; + } + } + } else { + /* if `receiveruri` param is not provided.. + * replace whole existing `receivers` object array with new one.. */ + OC_PUSH_DBG("replace existing receiver obj array with new ones..."); + if (!_replace_recv_obj_array(recvs_instance, rep)) { + OC_PUSH_ERR("failed to replace existing whole receiver objs..."); + result = OC_STATUS_BAD_REQUEST; + goto exit; + } + } + + break; + } + + recvs_instance = recvs_instance->next; + } + +exit: + oc_send_response(request, result); +} + +/* + * @brief DELETE callback for Push Receiver Resource + */ +static void +delete_pushrecv(oc_request_t *request, oc_interface_mask_t iface_mask, + void *user_data) +{ + (void)iface_mask; + (void)user_data; + + const char *uri_param; + int uri_param_len = -1; + oc_recv_t *recv_obj; + oc_recvs_t *recvs_instance; + int result = OC_STATUS_DELETED; + + /* try to get "receiveruri" parameter */ + if (request->query) { + uri_param_len = oc_ri_get_query_value(request->query, request->query_len, + "receiveruri", &uri_param); + if (uri_param_len != -1) { + OC_PUSH_DBG( + "received query string: \"%.*s\", found \"receiveruri\": \"%.*s\" ", + (int)request->query_len, request->query, uri_param_len, uri_param); + } + } else { + OC_PUSH_DBG("request->query is NULL"); + } + + /* look up target receivers of target Push Receiver Resource */ + recvs_instance = (oc_recvs_t *)oc_list_head(recvs_list); + while (recvs_instance) { + if (recvs_instance->resource == request->resource) { + OC_PUSH_DBG("receivers obj array instance of push receiver resource " + "(\"%s\") is found!", + oc_string(request->resource->uri)); + + if (uri_param_len != -1) { + recv_obj = + _find_recv_obj_by_uri(recvs_instance, uri_param, uri_param_len); + if (recv_obj) { + /* remove receiver obj from array */ + oc_list_remove(recvs_instance->receivers, recv_obj); + OC_PUSH_DBG("receiver obj is removed from array"); + + /* delete associated resource... */ + _purge_pushd_rsc(&recv_obj->receiveruri, + recvs_instance->resource->device); + OC_PUSH_DBG( + "app resource corresponding to the receiver obj is removed"); + + /* free memory */ + oc_free_string(&recv_obj->receiveruri); + oc_free_string_array(&recv_obj->rts); + oc_memb_free(&recv_instance_memb, recv_obj); + } else { + /* if the given `receiveruri` parameter is not in existing receivers + * array, add new receiver object to the receivers array */ +#ifdef OC_PUSHDEBUG + // oc_string_t uri; + // oc_new_string(&uri, uri_param, uri_param_len); + OC_PUSH_DBG( + "can't find receiver object which has uri(\"%.*s\"), ignore it...", + uri_param_len, uri_param); +// oc_free_string(&uri); +#endif + result = OC_STATUS_NOT_FOUND; + } + } else { + /* if `receiveruri` param is not provided.. + * remove whole existing `receivers` object array */ + _purge_recv_obj_list(recvs_instance); + } + + break; + } + + recvs_instance = recvs_instance->next; + } + + oc_send_response(request, result); +} + +/* + * @brief initiate Push Receiver Resource + * + * @details + * for Target Server \n + * - Push Receiver ("oic.r.pushreceiver") \n + * + * @param device_index device index + */ +void +oc_create_pushreceiver_resource(size_t device_index) +{ + /* create Push Receiver Resource */ + oc_resource_t *push_recv = + oc_new_resource("Push Receiver", PUSHRECVS_RSC_PATH, 1, device_index); + + if (push_recv) { + oc_resource_bind_resource_type(push_recv, "oic.r.pushreceiver"); + oc_resource_bind_resource_interface(push_recv, OC_IF_RW | OC_IF_BASELINE); + oc_resource_set_default_interface(push_recv, OC_IF_RW); + oc_resource_set_discoverable(push_recv, true); + + oc_resource_set_request_handler(push_recv, OC_GET, get_pushrecv, NULL); + oc_resource_set_request_handler(push_recv, OC_POST, post_pushrecv, NULL); + oc_resource_set_request_handler(push_recv, OC_DELETE, delete_pushrecv, + NULL); + + /* + * add struct for `receivers` object list for this Resource to the list + */ + oc_recvs_t *recvs_instance = + (oc_recvs_t *)oc_memb_alloc(&recvs_instance_memb); + if (recvs_instance) { + oc_add_resource(push_recv); + recvs_instance->resource = push_recv; + OC_LIST_STRUCT_INIT(recvs_instance, receivers); + oc_list_add(recvs_list, recvs_instance); + } else { + OC_PUSH_ERR("oc_memb_alloc() error!"); + oc_delete_resource(push_recv); + } + } else { + OC_PUSH_ERR("oc_new_resource() error!"); + } +} + +void +oc_push_list_init() +{ + oc_list_init(ns_list); + oc_list_init(recvs_list); + oc_list_init(pushd_rsc_rep_list); +} + +/* + * clean up push related data structure + * - for push configuration Resource: they are cleaned when all app Resources + * are removed (see oc_main_shutdown()) + * - for push receivers Resource: free in this function + */ +void +oc_push_free() +{ + oc_recvs_t *recvs_instance; + + OC_PUSH_DBG("begin to free push receiver list!!!"); + + oc_recvs_t *next; + recvs_instance = (oc_recvs_t *)oc_list_head(recvs_list); + while (recvs_instance) { + next = recvs_instance->next; + _purge_recv_obj_list(recvs_instance); + OC_PUSH_DBG("free push receiver Resource (device: %ld)... ", + recvs_instance->resource->device); + oc_memb_free(&recvs_instance_memb, recvs_instance); + recvs_instance = next; + } +} + +/* + * @brief Response callback for PUSH Update request + * + * @param data response payload + */ +static void +response_to_push_rsc(oc_client_response_t *data) +{ + oc_ns_t *ns_instance = (oc_ns_t *)data->user_data; + + OC_PUSH_DBG("\n => return status code: [ %s ]", + oc_status_to_str(data->code)); + + if (data->code == OC_STATUS_SERVICE_UNAVAILABLE) { + /* + * TODO4ME <2022/4/17> if update request fails... retry to resolve endpoint + * of target device ID... + */ + OC_PUSH_DBG("state of Push Proxy (\"%s\") is changed (%s => %s)", + oc_string(ns_instance->resource->uri), + oc_string(ns_instance->state), pp_statestr(OC_PP_TOUT)); + pp_update_state(ns_instance->state, pp_statestr(OC_PP_TOUT)); + } else if (data->code == OC_STATUS_CHANGED) { + OC_PUSH_DBG("state of Push Proxy (\"%s\") is changed (%s => %s)", + oc_string(ns_instance->resource->uri), + oc_string(ns_instance->state), pp_statestr(OC_PP_WFU)); + pp_update_state(ns_instance->state, pp_statestr(OC_PP_WFU)); + } else { + /* + * <2022/4/17> check condition to enter ERR + */ + OC_PUSH_DBG("state of Push Proxy (\"%s\") is changed (%s => %s)", + oc_string(ns_instance->resource->uri), + oc_string(ns_instance->state), pp_statestr(OC_PP_ERR)); + pp_update_state(ns_instance->state, pp_statestr(OC_PP_ERR)); + } +} + +/* + * @brief send PUSH update request + * + * @param ns_instance composition of `oic.r.notificationselector` + + * `oic.r.pushproxy` + * @return true:success, false:fail + */ +static bool +push_update(oc_ns_t *ns_instance) +{ + bool result = false; + oc_resource_t *src_rsc; + char di[OC_UUID_LEN + 10]; + + src_rsc = (oc_resource_t *)ns_instance->user_data; + + if (!ns_instance || !src_rsc) { + OC_PUSH_ERR("something wrong! corresponding notification selector source " + "resource is NULL, or updated resource is NULL!"); + goto exit; + } + + if (!src_rsc->payload_builder) { + OC_PUSH_ERR("payload_builder() of source resource is NULL!"); + goto exit; + } + + /* + * 1. find `notification selector` which monitors `src_rsc` from `ns_col_list` + * 2. post UPDATE by using URI, endpoint (use oc_sting_to_endpoint()) + */ + if (oc_init_post(oc_string(ns_instance->targetpath), + &ns_instance->pushtarget_ep, "if=oic.if.rw", + &response_to_push_rsc, HIGH_QOS, ns_instance)) { + /* + * add other properties than "rep" object of "oic.r.pushpayload" Resource + * here. payload_builder() only "rep" object. + * + * payload_builder() doesn't need to have "oc_rep_start_root_object()" and + * "oc_rep_end_root_object()" they should be added here... + */ + oc_rep_begin_root_object(); + + /* anchor */ + snprintf(di, sizeof(di), "ocf://"); + oc_uuid_to_str(oc_core_get_device_id(ns_instance->resource->device), di + 6, + OC_UUID_LEN); + oc_rep_set_text_string(root, anchor, di); + + /* href (option) */ + if (oc_string(ns_instance->phref) && + strcmp(oc_string(ns_instance->phref), "")) { + oc_rep_set_text_string(root, href, oc_string(ns_instance->phref)); + } + + /* rt (array) */ + oc_rep_open_array(root, rt); + for (size_t i = 0; i < oc_string_array_get_allocated_size(src_rsc->types); + i++) { + oc_rep_add_text_string(rt, oc_string_array_get_item(src_rsc->types, i)); + } + oc_rep_close_array(root, rt); + + /* if (array) */ + oc_core_encode_interfaces_mask(oc_rep_object(root), src_rsc->interfaces); + + /* build rep object */ + src_rsc->payload_builder(); + + oc_rep_end_root_object(); + + if (oc_do_post()) { +#if OC_PUSHDEBUG + oc_string_t ep, full_uri; + + oc_endpoint_to_string(&ns_instance->pushtarget_ep, &ep); + if (oc_string_len(ns_instance->targetpath)) + oc_concat_strings(&full_uri, oc_string(ep), + oc_string(ns_instance->targetpath)); + else + oc_new_string(&full_uri, oc_string(ep), oc_string_len(ep)); + + OC_PUSH_DBG("push \"%s\" ====> \"%s\"", oc_string(src_rsc->uri), + oc_string(full_uri)); + oc_free_string(&ep); + oc_free_string(&full_uri); +#endif + OC_PUSH_DBG("state of Push Proxy (\"%s\") is changed (%s => %s)", + oc_string(ns_instance->resource->uri), + oc_string(ns_instance->state), pp_statestr(OC_PP_WFR)); + pp_update_state(ns_instance->state, pp_statestr(OC_PP_WFR)); + } else { + OC_PUSH_ERR("Could not send POST"); + goto exit; + } + } else { + OC_PUSH_ERR("Could not init POST"); + goto exit; + } + + result = true; + +exit: + return result; +} + +OC_PROCESS_THREAD(oc_push_process, ev, data) +{ + oc_resource_t *src_rsc; + oc_ns_t *ns_instance; + char di[OC_UUID_LEN]; + + OC_PROCESS_BEGIN(); + + while (1) { + +#if 0 + int device_count = oc_core_get_num_devices(); + /* create Push Notification Resource per each Device */ + for (int i=0; iuser_data; + + if (!ns_instance || !src_rsc /*|| !ns_instance->user_data*/) { + OC_PUSH_ERR("something wrong! corresponding notification selector " + "source resource is NULL, or updated resource is NULL!"); + break; + } + + /* + * client에서 POST 하는 루틴 참조할 것 (client_multithread_linux.c 참고) + */ + /* + * 1. find `notification selector` which monitors `src_rsc` from + * `ns_col_list` + * 2. post UPDATE by using URI, endpoint (use oc_sting_to_endpoint()) + */ + if (oc_init_post(oc_string(ns_instance->targetpath), + &ns_instance->pushtarget_ep, "if=oic.if.rw", + &response_to_push_rsc, LOW_QOS, NULL)) { + /* + * add other properties than "rep" object of "oic.r.pushpayload" + * Resource here. payload_builder() only adds "rep" object. + * + * payload_builder() doesn't need to have "oc_rep_start_root_object()" + * and "oc_rep_end_root_object()" they should be added here... + */ + + oc_rep_begin_root_object(); + + /* anchor */ + oc_uuid_to_str(oc_core_get_device_id(ns_instance->resource->device), di, + OC_UUID_LEN); + oc_rep_set_text_string(root, anchor, di); + + /* href (option) */ + if (oc_string(ns_instance->phref) && + strcmp(oc_string(ns_instance->phref), "")) { + oc_rep_set_text_string(root, href, oc_string(ns_instance->phref)); + } + + /* rt (array) */ + oc_rep_open_array(root, rt); + for (size_t i = 0; + i < oc_string_array_get_allocated_size(src_rsc->types); i++) { + oc_rep_add_text_string(rt, + oc_string_array_get_item(src_rsc->types, i)); + } + oc_rep_close_array(root, rt); + + /* if (array) */ + oc_core_encode_interfaces_mask(oc_rep_object(root), + src_rsc->interfaces); + + src_rsc->payload_builder(); + + oc_rep_end_root_object(); + + if (oc_do_post()) { + OC_PUSH_DBG("Sent POST request"); + } else { + OC_PUSH_ERR("Could not send POST"); + } + } else { + OC_PUSH_ERR("Could not init POST"); + } + } + } + + OC_PROCESS_END() +} + +/* + * @brief check if any of source array is part of target array + * @param target + * @param source + * @return + * false: any of source is not part of target + * true: any of source is part of target + */ +static bool +_check_string_array_inclusion(oc_string_array_t *target, + oc_string_array_t *source) +{ + size_t src_len; + size_t tgt_len; + + tgt_len = oc_string_array_get_allocated_size(*target); + src_len = oc_string_array_get_allocated_size(*source); + + if (!tgt_len || !src_len) { + OC_PUSH_DBG("source or target string array is empty!"); + return false; + } + + for (size_t i = 0; i < src_len; i++) { + for (size_t j = 0; j < tgt_len; j++) { + if (!strcmp(oc_string_array_get_item(*source, i), + oc_string_array_get_item(*target, j))) { + return true; + } + } + } + + return false; +} + +/* + * @brief trigger PUSH procedure + * + * @param uri path of updated Resource + * @param device_index device index which the updated Resource belongs to + */ +void +oc_resource_state_changed(const char *uri, size_t uri_len, size_t device_index) +{ + oc_resource_t *resource = + oc_ri_get_app_resource_by_uri(uri, uri_len, device_index); + oc_ns_t *ns_instance = (oc_ns_t *)oc_list_head(ns_list); + char all_matched = 0x7; + + OC_PUSH_DBG("resource \"%s\"@device(%ld) is updated!", uri, device_index); + + if (!resource) { + OC_PUSH_ERR("there is no resource for \"%s\"@device(%ld)", uri, + device_index); + return; + } + if (!(resource->properties & OC_PUSHABLE)) { + OC_PUSH_ERR("resource \"%s\"@device (%ld) is not pushable!", uri, + device_index); + return; + } + + for (; ns_instance; ns_instance = ns_instance->next) { + if (ns_instance->resource->device != device_index) + continue; + + /* if push proxy is not in "wait for update" state, just skip it... */ + if (strcmp(oc_string(ns_instance->state), pp_statestr(OC_PP_WFU))) + continue; + + if (oc_string(ns_instance->phref)) { + if (strcmp(oc_string(ns_instance->phref), uri)) { + OC_PUSH_DBG("%s:phref exists, but mismatches (phref:%s - uri:%s)", + oc_string(ns_instance->resource->uri), + oc_string(ns_instance->phref), uri); + all_matched = 0; + } else { + OC_PUSH_DBG("%s:phref matches (phref:%s - uri:%s)", + oc_string(ns_instance->resource->uri), + oc_string(ns_instance->phref), uri); + } + } else { + OC_PUSH_DBG("%s:phref does not exist", + oc_string(ns_instance->resource->uri)); + all_matched &= 0x6; + } + + if (oc_string_array_get_allocated_size(ns_instance->prt) > 0) { + if (!_check_string_array_inclusion(&ns_instance->prt, &resource->types)) { +#ifdef OC_PUSHDEBUG + PRINT("%s:prt exists, but mismatches (prt: [", + oc_string(ns_instance->resource->uri)); + for (size_t i = 0; + i < oc_string_array_get_allocated_size(ns_instance->prt); i++) { + PRINT("%s ", oc_string_array_get_item(ns_instance->prt, i)); + } + PRINT("] - rt of updated rsc: ["); + for (size_t i = 0; + i < oc_string_array_get_allocated_size(resource->types); i++) { + PRINT("%s ", oc_string_array_get_item(resource->types, i)); + } + PRINT("])\n"); +#endif + all_matched = 0; + } else { +#ifdef OC_PUSHDEBUG + PRINT("%s:prt matches (prt: [", oc_string(ns_instance->resource->uri)); + for (size_t i = 0; + i < oc_string_array_get_allocated_size(ns_instance->prt); i++) { + PRINT("%s ", oc_string_array_get_item(ns_instance->prt, i)); + } + PRINT("] - rt of updated rsc: ["); + for (size_t i = 0; + i < oc_string_array_get_allocated_size(resource->types); i++) { + PRINT("%s ", oc_string_array_get_item(resource->types, i)); + } + PRINT("])\n"); +#endif + } + } else { + OC_PUSH_DBG("%s:prt does not exist", + oc_string(ns_instance->resource->uri)); + all_matched &= 0x5; + } + + if (oc_string_array_get_allocated_size(ns_instance->pif) > 0) { + oc_interface_mask_t pif = 0; + for (int i = 0; + i < (int)oc_string_array_get_allocated_size(ns_instance->pif); i++) { + pif |= oc_ri_get_interface_mask( + oc_string_array_get_item(ns_instance->pif, i), + oc_byte_string_array_get_item_size(ns_instance->pif, i)); + } + + if (!(pif & resource->interfaces)) { + OC_PUSH_DBG( + "%s:pif exists, but mismatches (pif:%#x - if of updated rsc:%#x)", + oc_string(ns_instance->resource->uri), pif, resource->interfaces); + all_matched = 0; + } else { + OC_PUSH_DBG("%s:pif matches (pif:%#x - if of updated rsc:%#x)", + oc_string(ns_instance->resource->uri), pif, + resource->interfaces); + } + } else { + OC_PUSH_DBG("%s:pif does not exist", + oc_string(ns_instance->resource->uri)); + all_matched &= 0x3; + } + + if (all_matched) { + if (!oc_process_is_running(&oc_push_process)) { + OC_PUSH_DBG("oc_push_process is not running!"); + return; + } + + OC_PUSH_DBG("resource \"%s\" matches notification selector \"%s\"!", + oc_string(resource->uri), + oc_string(ns_instance->resource->uri)); + + /* resource is necessary to identify which resource is being pushed.., + * before sending update to target server */ + ns_instance->user_data = resource; + + /* post "event" for Resource which has just been updated */ + if (!push_update(ns_instance)) { + OC_PUSH_ERR("sensing PUSH Update of \"%s\" failed!", + oc_string(resource->uri)); + } +#if 0 + oc_process_post(&oc_push_process, + oc_events[PUSH_RSC_STATE_CHANGED], ns_instance); +#endif + } + all_matched = 0x7; + } +} + +#endif /* OC_HAS_FEATURE_PUSH */ diff --git a/api/oc_rep.c b/api/oc_rep.c index 579981e5aa..a4912c1a2a 100644 --- a/api/oc_rep.c +++ b/api/oc_rep.c @@ -21,6 +21,7 @@ #include "port/oc_assert.h" #include "port/oc_log.h" #include "util/oc_memb.h" +#include "util/oc_features.h" #include @@ -242,6 +243,14 @@ _alloc_rep(void) return rep; } +#ifdef OC_HAS_FEATURE_PUSH +oc_rep_t * +oc_alloc_rep() +{ + return _alloc_rep(); +} +#endif + static void _free_rep(oc_rep_t *rep_value) { diff --git a/api/oc_ri.c b/api/oc_ri.c index dd15d887f9..03f6c138b8 100644 --- a/api/oc_ri.c +++ b/api/oc_ri.c @@ -30,6 +30,7 @@ #include "util/oc_list.h" #include "util/oc_memb.h" #include "util/oc_process.h" +#include "util/oc_features.h" #include "oc_buffer.h" #include "oc_core_res.h" @@ -67,6 +68,11 @@ #endif /* OC_OSCORE */ #endif /* OC_SECURITY */ +#ifdef OC_HAS_FEATURE_PUSH +OC_PROCESS_NAME(oc_push_process); +void oc_push_list_init(); +#endif + #ifdef OC_SERVER OC_LIST(g_app_resources); OC_LIST(g_observe_callbacks); @@ -100,6 +106,29 @@ static unsigned int oc_coap_status_codes[__NUM_OC_STATUS_CODES__]; oc_process_event_t oc_events[__NUM_OC_EVENT_TYPES__]; +const char *cli_status_strs[] = { + "OC_STATUS_OK", /* 0 */ + "OC_STATUS_CREATED", /* 1 */ + "OC_STATUS_CHANGED", /* 2 */ + "OC_STATUS_DELETED", /* 3 */ + "OC_STATUS_NOT_MODIFIED", /* 4 */ + "OC_STATUS_BAD_REQUEST", /* 5 */ + "OC_STATUS_UNAUTHORIZED", /* 6 */ + "OC_STATUS_BAD_OPTION", /* 7 */ + "OC_STATUS_FORBIDDEN", /* 8 */ + "OC_STATUS_NOT_FOUND", /* 9 */ + "OC_STATUS_METHOD_NOT_ALLOWED", /* 10 */ + "OC_STATUS_NOT_ACCEPTABLE", /* 11 */ + "OC_STATUS_REQUEST_ENTITY_TOO_LARGE", /* 12 */ + "OC_STATUS_UNSUPPORTED_MEDIA_TYPE", /* 13 */ + "OC_STATUS_INTERNAL_SERVER_ERROR", /* 14 */ + "OC_STATUS_NOT_IMPLEMENTED", /* 15 */ + "OC_STATUS_BAD_GATEWAY", /* 16 */ + "OC_STATUS_SERVICE_UNAVAILABLE", /* 17 */ + "OC_STATUS_GATEWAY_TIMEOUT", /* 18 */ + "OC_STATUS_PROXYING_NOT_SUPPORTED" /* 19 */ +}; + static void set_mpro_status_codes(void) { @@ -178,6 +207,13 @@ oc_status_code(oc_status_t key) return (int)oc_coap_status_codes[key]; } +OC_API +const char * +oc_status_to_str(oc_status_t key) +{ + return cli_status_strs[key]; +} + int oc_ri_get_query_nth_key_value(const char *query, size_t query_len, const char **key, size_t *key_len, @@ -376,6 +412,10 @@ start_processes(void) #ifdef OC_TCP oc_process_start(&oc_session_events, NULL); #endif /* OC_TCP */ + +#ifdef OC_HAS_FEATURE_PUSH + oc_process_start(&oc_push_process, NULL); +#endif } static void @@ -397,6 +437,10 @@ stop_processes(void) #endif /* OC_SECURITY */ oc_process_exit(&message_buffer_handler); + +#ifdef OC_HAS_FEATURE_PUSH + oc_process_exit(&oc_push_process); +#endif } #ifdef OC_SERVER @@ -455,6 +499,10 @@ oc_ri_init(void) oc_list_init(g_timed_callbacks); +#ifdef OC_HAS_FEATURE_PUSH + oc_push_list_init(); +#endif + oc_process_init(); start_processes(); } diff --git a/api/oc_server_api.c b/api/oc_server_api.c index 18b3527c94..877f75f0d5 100644 --- a/api/oc_server_api.c +++ b/api/oc_server_api.c @@ -16,6 +16,7 @@ * ****************************************************************************/ +#include "util/oc_features.h" #include "messaging/coap/engine.h" #include "messaging/coap/oc_coap.h" #include "messaging/coap/separate.h" @@ -421,6 +422,17 @@ oc_resource_set_discoverable(oc_resource_t *resource, bool state) resource->properties &= ~OC_DISCOVERABLE; } +#ifdef OC_HAS_FEATURE_PUSH +void +oc_resource_set_pushable(oc_resource_t *resource, bool state) +{ + if (state) + resource->properties |= OC_PUSHABLE; + else + resource->properties &= ~OC_PUSHABLE; +} +#endif + void oc_resource_set_observable(oc_resource_t *resource, bool state) { diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt index 6c65ffdc1f..402255a7d9 100644 --- a/apps/CMakeLists.txt +++ b/apps/CMakeLists.txt @@ -150,6 +150,26 @@ if(UNIX) target_link_libraries(device_builder_server client-server-static) file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/device_builder_server_creds) endif() + + if(OC_PUSH_ENABLED AND OC_COLLECTIONS_IF_CREATE_ENABLED AND OC_DYNAMIC_ALLOCATION_ENABLED) + add_executable(push_originserver_multithread_linux + ${PROJECT_SOURCE_DIR}/push_originserver_multithread_linux.c + ) + target_link_libraries(push_originserver_multithread_linux client-server-static) + file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/push_originserver_multithread_linux_creds) + + add_executable(push_targetserver_multithread_linux + ${PROJECT_SOURCE_DIR}/push_targetserver_multithread_linux.c + ) + target_link_libraries(push_targetserver_multithread_linux client-server-static) + file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/push_targetserver_multithread_linux_creds) + + add_executable(push_configurator_multithread_linux + ${PROJECT_SOURCE_DIR}/push_configurator_multithread_linux.c + ) + target_link_libraries(push_configurator_multithread_linux client-server-static) + file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/push_configurator_multithread_linux_creds) + endif() elseif(WIN32) add_executable(simpleserver ${PROJECT_SOURCE_DIR}/simpleserver_windows.c diff --git a/apps/Readme.md b/apps/Readme.md index 7836fb901f..a83a8d8f11 100644 --- a/apps/Readme.md +++ b/apps/Readme.md @@ -17,183 +17,143 @@ naming convention: ## Example applications -### Arduino.cpp +- ### Arduino.cpp: + Server example application explaining how to use IoTivity on an Arduino. + e.g. how to use IoTivity code in conjunction with the Arduino main loop. -Server example application explaining how to use IoTivity on an Arduino. -e.g. how to use IoTivity code in conjunction with the Arduino main loop. +- ### client_block_linux.c: + Client and Server example with linux main loop. -### client_block_linux.c +- ### client_certification_tests.c: + Client Certification test example + - runs on Linux only. + - uses client_certification_tests_IDD.cbor as introspection data. -Client and Server example with linux main loop. +- ### client_collections_linux.c: + Client example with collections. -### client_certification_tests.c +- ### client_linux.c: + Client example with Linux main loop. -Client Certification test example +- ### client_multithread_linux.c: + Client example on linux implementing multiple threads. -- runs on Linux only. -- uses client_certification_tests_IDD.cbor as introspection data. +- ### client_openthread.c: + Client example on openthread. -### client_collections_linux.c +- ### client_zephyr.c: + Client example on zypher. -Client example with collections. +- ### cloud_certification_tests.c: + Cloud certification example. -### client_linux.c +- ### cloud_client.c: + Client example with cloud API. -Client example with Linux main loop. +- ### cloud_proxy.c: + Cloud proxy example. + - uses cloud_proxy_IDD.cbor as introspection data. + works on Windows & Linux. -### client_multithread_linux.c +- ### cloud_server.c: + Server example with Cloud API. -Client example on linux implementing multiple threads. +- ### introspectionclient.c: + Client example of retrieving introspection device data. -### client_openthread.c +- ### multi_device_client_linux.c: + Client example on linux talking to multiple devices. -Client example on openthread. +- ### multi_device_server_linux.c: + Server example on linux, implementing more than 1 device. -### client_zephyr.c +- ### secure_mcast_client.c: + Client example with simple secure multicast. + Works on Linux only. -Client example on zypher. +- ### secure_mcast_server1.c: + Server example implementing simple secure multicast. + Works on Linux only. use in combination with secure_mcast_client.c. -### cloud_certification_tests.c +- ### secure_mcast_server2.c: + Server example implementing simple secure multicast. + Works on Linux only. use in combination with secure_mcast_client.c. -Cloud certification example. +- ### sensor_interrupt_server_zephyr.c: + Server example implementing a sensor on zypher, showing how to use interupts. -### cloud_client.c +- ### server_arduino.cpp: + Server example on Arduino. -Client example with cloud API. +- ### server_block_linux.c: + Client and server example on linux. -### cloud_proxy.c +- ### server_certification_tests.c: + Server example for certification tests. + - runs on Linux only. + - uses server_certification_tests_IDD.cbor as introspection data. -Cloud proxy example. +- ### server_collections_linux.c: + Server example implementing collections. -- uses cloud_proxy_IDD.cbor as introspection data. +- ### server_linux.c: + Server example on Linux. -works on Windows & Linux. +- ### server_multithread_linux.c: + Server example on Linux, multi threaded. -### cloud_server.c +- ### server_openthread.c: + Server example on openthread. -Server example with Cloud API. +- ### server_rules.c: + Server example implementing rules. + - runs on Linux only. + - uses server_certification_tests_IDD.cbor as introspection data. -### introspectionclient.c +- ### server_zephyr.c: + Client example on zypher. -Client example of retrieving introspection device data. +- ### simpleclient.c: + Client example on Linux. -### multi_device_client_linux.c +- ### simpleclient_windows.c: + Client example on windows. -Client example on linux talking to multiple devices. +- ### simpleserver.c: + Server example on Linux. -### multi_device_server_linux.c +- ### simpleserver_pki.c: + Server example implementing PKI using test certificates. + - runs on Linux only. -Server example on linux, implementing more than 1 device. +- ### simpleserver_windows.c: + Server example on Windows. -### secure_mcast_client.c +- ### smart_home_server_linux.c: + Server example on Linux. + - uses smart_home_server_linux_IDD.cbor as introspection data. -Client example with simple secure multicast. +- ### smart_home_server_with_mock_swupdate.cpp: + Server example implementing a mockup of software update. -Works on Linux only. +- ### smart_lock_linux.c: + Server example of a smart lock on Linux. + - includes commandline controller. -### secure_mcast_server1.c +- ### temp_sensor_client_linux.c: + Client example of temperature sensor. -Server example implementing simple secure multicast. +- ### push_configurator_multithread_linux.c: + PUSH configuration client which configures origin server and target server. -Works on Linux only. -use in combination with secure_mcast_client.c. +- ### push_originserver_multithread_linux.c: + PUSH origin server which has pushable Resource. -### secure_mcast_server2.c +- ### push_targetserver_multithread_linux.c: + PUSH target server which receives PUSH update request from PUSH origin server. + It plays the role of PUSH configurator at the same time. + - for more detail see [OCF Push Notification](./docs/push.md) -Server example implementing simple secure multicast. - -Works on Linux only. -use in combination with secure_mcast_client.c. - -### sensor_interrupt_server_zephyr.c - -Server example implementing a sensor on zypher, showing how to use interupts. - -### server_arduino.cpp - -Server example on Arduino. - -### server_block_linux.c - -Client and server example on linux. - -### server_certification_tests.c - -Server example for certification tests. - -- runs on Linux only. -- uses server_certification_tests_IDD.cbor as introspection data. - -### server_collections_linux.c - -Server example implementing collections. - -### server_linux.c - -Server example on Linux. - -### server_multithread_linux.c - -Server example on Linux, multi threaded. - -### server_openthread.c - -Server example on openthread. - -### server_rules.c - -Server example implementing rules. - -- runs on Linux only. -- uses server_certification_tests_IDD.cbor as introspection data. - -### server_zephyr.c - -Client example on zypher. - -### simpleclient.c - -Client example on Linux. - -### simpleclient_windows.c - -Client example on windows. - -### simpleserver.c - -Server example on Linux. - -### simpleserver_pki.c - -Server example implementing PKI using test certificates. - -- runs on Linux only. - -### simpleserver_windows.c - -Server example on Windows. - -### smart_home_server_linux.c - -Server example on Linux. - -- uses smart_home_server_linux_IDD.cbor as introspection data. - -### smart_home_server_with_mock_swupdate.cpp - -Server example implementing a mockup of software update. - -### smart_lock_linux.c - -Server example of a smart lock on Linux. - -- includes commandline controller. - -### temp_sensor_client_linux.c - -Client example of temperature sensor. - -### Other files - -The JSON files are the introspection files in JSON. -The CBOR files are the introspection files in CBOR. +- ### Other files: + The JSON files are the introspection files in JSON. + The CBOR files are the introspection files in CBOR. diff --git a/apps/docs/push.md b/apps/docs/push.md new file mode 100644 index 0000000000..d24dfb0d49 --- /dev/null +++ b/apps/docs/push.md @@ -0,0 +1,222 @@ +# OCF Push Notification + +## Introduction +OCF Push Notification lets devices send notifications to other devices without any initial request such as what observation does. +OCF Push Notification is composed of 3 players: **Origin Server**, **Target Server**, **Configuration Client**. + +![push_arch.png](./resources/push_arch.png) +- **Origin Server**: + - An origin Server hosts pushable Resources (3rd LSB of "bm:p" of pushable Resource is 1) and sends push update requests to target Servers. + - An origin Server maintains "Push Configuration Resource" (`"oic.r.pushconfiguration"`) which keeps following information: + - Resources to be pushed. + - A Target to which the contents of a Resource will be pushed. + - A push configuration Resource is a collection Resource. + - An OCF Device which plays origin Server role does play Client role too, because it sends push updates to target servers. +- **Target Server**: + - A target Server receives push update requests from a origin Server. + - A target Server maintains "Push receiver Resource" (`"oic.r.pushreceiver"`) which keeps filtering information for incoming push update requests. It filters Resource type of Resource included in the incoming push update requests and filters target path to which pushed Resource will be stored. +- **Configuration Client**: + - A configuration client updates push configuration Resource in origin Servers and push receiver Resource in target Servers. +
+ +## How to enable PUSH Notification +### build configuration +- makefile + ```bash + # - if PUSH_DEBUG=1 and DEBUG=0, only push notification debug messages are printed + # - if DEBUG=1, push notification debug messages and all other debug messages are printed + # - DYNAMIC=1 is default, so you can omit it + $ make PUSH=1 (PUSH_DEBUG=1) CREATE=1 DYNAMIC=1 + $ sudo make PUSH=1 (PUSH_DEBUG=1) CREATE=1 DYNAMIC=1 install + ``` +- cmake + ```text + OC_COLLECTIONS_IF_CREATE_ENABLED = ON + OC_DYNAMIC_ALLOCATION_ENABLED = ON + OC_PUSH_ENABLED = ON + ``` +
+ +## How to run samples +### 3 Examples +- `push_configurator_multithread_linux`: **Configuration Client** + + ![push_configurator.png](./resources/push_configurator.png) + +- `push_originserver_multithread_linux`: **Origin Server** + + ![push_originserver.png](./resources/push_originserver.png) + +- `push_targetserver_multithread_linux`: **Target Server** + + ![push_targetserver.png](./resources/push_targetserver.png) + +### Onboarding +- If you want quick test, build iotivity-lite without security (`OC_SECURITY_ENABLED=OFF` or `SECURE=0`). +- If iotivity-lite is built with security, refer to following steps: + 1. add ACE to eath of them (use wildcard provisioning) + - allow all ACE permissions (CRUDN) + 3. pair `Configuration Client` and `Origin Server` and `Target Server` + - pair `Configuration Client` and `Origin Server`: let **Configuration Client** updates **push configuration Resource** + - pair `Configuration Client` and `Target Server`: let **Configuration Client** updates **push receiver Resource** + - pair `Origin Server` and `Target Server`: let **Origin Server** send push update request to **Target Server** +- please refer to [README.rst](../../README.rst) for detaild onboarding procedure. + +### Run examples +- **Configuration Client** + 1. Discovery: + find pushable Resource of "oic.r.custom.light" type. + ![push_config_d_resources.png](./resources/push_config_d_resources.png) + 2. Create new PUSH notification selector on origin server, and add new Receiver configuration object to target server: + create / update related configuration Resources. + ![push_config_c_ns.png](./resources/push_config_c_ns.png) + 3. Retrieve PUSH configuration Resource of origin server + ![push_config_r_pushconf.png](./resources/push_config_r_pushconf.png) + 4. Retrieve PUSH receivers Resource of target server + ![push_config_r_pushrecv.png](./resources/push_config_r_pushrecv.png) + 6. Retrieve PUSH origin Resource of origin-server + ![push_config_r_origin_resource.png](./resources/push_config_r_origin_resource.png) + +- **Origin Server** + Change Contents of pushable Resource: press `1` or `2`. + +- **Target Server** + - Whenever press `1` or `2` at Origin Server, you can see following screen. + ![newpush1.png](./resources/newpush1.png) + ![newpush2.png](./resources/newpush2.png) + - press `3` or `4` at Origin Server, you can see nothing changed. +
+ +## API +### Origin Server + +- `oc_resource_set_pushable()` + ```c + /** + * Specify if a resource can be pushable. + * + * @param[in] resource to specify as pushable or non-pushable + * @param[in] state if true the resource will be pushable if false the + * resource will be non-pushable + */ + void oc_resource_set_pushable(oc_resource_t *resource, bool state); + ``` + - Call this function once when you create new pushable Resource. +- `oc_resource_t.payload_builder` + ```c + struct oc_resource_s + { + ... + + #ifdef OC_COLLECTIONS + uint8_t num_links; ///< number of links in the collection + #ifdef OC_HAS_FEATURE_PUSH + oc_payload_callback_t + payload_builder; ///< callback to build contents of PUSH Notification + #endif + #endif /* OC_COLLECTIONS */ + + ... + }; + ``` + - Callback function pointer. This function is necessary to build contents of push update request. + - When iotivity-lite builds contents of push update request, it calls this function. + - Example: + ```c + /* PUSH payload builder example */ + void build_light_payload() + { + oc_rep_open_object(root, rep); + oc_rep_set_int(rep, power, power); + oc_rep_set_int(rep, brightness, brightness); + oc_rep_close_object(root, rep); + } + ``` +- `oc_resource_state_changed()` + ```c + /** + * @brief application should call this function whenever the contents of + * pushable Resource is updated, or Push Notification will not work. + * + * @param[in] uri path of pushable Resource whose contents is just + * updated + * @param[in] device_index index of Device that updated pushable Resource + * belongs to + */ + OC_API + void oc_resource_state_changed(const char *uri, size_t uri_len, size_t device_index); + ``` + - User apps should call this function whenever contents of pushable Resource is changed. + - Example: + ```c + /* example */ + static void change_brightness(void) + { + brightness = (brightness+1)%100; + /* notify PUSH origin Resource is changed */ + oc_resource_state_changed(resource_uri, resource_uri_len, res->device); + } + ``` + +### Target Server +- `oc_set_on_push_arrived()` + ```c + /** + * @brief object used to store Resource pushed to + * "oic.r.pshreceiver:receivers[i].receiveruri" + */ + typedef struct oc_pushd_rsc_rep + { + struct oc_pushd_rsc_rep *next; + oc_resource_t + *resource; ///< used to point any pushed Resource managed by iotivity-lite + oc_rep_t *rep; ///< payload of pushed Resource + } oc_pushd_rsc_rep_t; + + /** + * @brief callback function called whenever new push arrives + */ + typedef void (*oc_on_push_arrived_t)(oc_pushd_rsc_rep_t *); + + /** + * @brief set callback function called whenever new push arrives + * + * @param[in] func function name + */ + OC_API + void oc_set_on_push_arrived(oc_on_push_arrived_t func); + ``` + - Use this function to set callback function which will be called whenever new push update request arrives. + - Example: + ```c + /* callback function example */ + void push_arrived(oc_pushd_rsc_rep_t *push_payload) + { + printf("new push arrives (path: %s, rt: ", oc_string(push_payload->resource->uri)); + for (size_t i=0; iresource->types); i++) + { + printf("%s ", oc_string_array_get_item(push_payload->resource->types, i)); + } + printf(")\n"); + + oc_print_pushd_rsc(push_payload->rep); + } + ``` + +### Common +- Header file + ```c + #include "oc_push.h" + ``` +- `oc_print_pushd_rsc()` + ```c + /** + * @brief print payload of Resource in user friendly format + * + * @param[in] payload pointer to the payload to be printed + */ + OC_API + void oc_print_pushd_rsc(const oc_rep_t *payload); + ``` + - print out payload contents. +
\ No newline at end of file diff --git a/apps/docs/resources/newpush1.png b/apps/docs/resources/newpush1.png new file mode 100644 index 0000000000000000000000000000000000000000..0950a5d6fd50f8e3aef30a66460a5d8b19f47e82 GIT binary patch literal 19691 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 Kbt|;p?*9v8wx@9b literal 0 HcmV?d00001 diff --git a/apps/docs/resources/newpush2.png b/apps/docs/resources/newpush2.png new file mode 100644 index 0000000000000000000000000000000000000000..7258ea2cdab3e85727760135f613e4422f78601a GIT binary patch literal 19073 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 A^(L?`7QQ?Vuo^zhN?W@Ji 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 literal 0 HcmV?d00001 diff --git a/apps/docs/resources/push_config_c_ns.png b/apps/docs/resources/push_config_c_ns.png new file mode 100644 index 0000000000000000000000000000000000000000..96065ef937327874df7f1c2b49da31c48298b9c0 GIT binary patch literal 85459 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 literal 0 HcmV?d00001 diff --git a/apps/docs/resources/push_config_d_resources.png b/apps/docs/resources/push_config_d_resources.png new file mode 100644 index 0000000000000000000000000000000000000000..7150a5363a404492d926f921323d570470c64efa GIT binary patch literal 63297 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 literal 0 HcmV?d00001 diff --git a/apps/docs/resources/push_config_r_origin_resource.png b/apps/docs/resources/push_config_r_origin_resource.png new file mode 100644 index 0000000000000000000000000000000000000000..2909cd91ece2b05d150f13fcaa124f0a78cc9f5c GIT binary patch literal 29077 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 Z!6fgqyed;eZnt<(PDV+(MA9hWzW_SCk$nIF literal 0 HcmV?d00001 diff --git a/apps/docs/resources/push_config_r_pushconf.png b/apps/docs/resources/push_config_r_pushconf.png new file mode 100644 index 0000000000000000000000000000000000000000..43d7db784118ac545b68c9037a18ae1acfdea4ae GIT binary patch literal 56417 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 z z=pSSL7fCIPK(w~~7k-+SW2(l==_2O*F6pOxkGia*&CPqPMPN*wZ1-D0F3nUVOJ-!H zD~f0#{L_^`FKFQLBF%s4`6L_5!R7b3$g`3j+bbEYf4p^kz1uh>scVhbxdsFdhRsi|djLLi($T{k{~Haxw64GtoMOUsEmzk#G8>tmUliOun(eR?O#d)Dp&b(`{I5 zKkVNZe~+`92T#;mF-pctim4y2sy8z#x#@&azRa76}ML}xgNKSo5hRWl$-uSCKoL! zIbA5yTr>7=bOVqFkxxEw%-o@GBdtf3;N&Tj~58M2ex_xdaM#DoQGP-J$E>YuQlKWwa z9rQSqWpkbp2zoAD1MM8`RBg&?Y|@ect=dp~iZ7|S%Yu<&9`6VsY>T)z4%qiih=~KG z=`{hKVq;?>(&I9mDXSlc<+Xzjj{7|P!sl4b{wC8e2NUGtU^vMlcAnq#;564~AFH4k z6Yh8Auv(#H{NFSH|57iQgzcddpB?y8=9;Um==ZGy?rZMN9PN=Cs{%^s=|+&Q2d_z? zY*fB(&9x!x`bZb$9xBO_Dk_KVTx?vJ_ljiz!`JF|`sqdug|+A-^Kd2uPV5KV>NU?K zNmdKZHb(~jBjqYhtX+Q*lg9gyGXT=~;#Tj(ovsl5BPFT3>=+0#5yLh7Ds0r_J{uUv zGJrxXsi<~9i(!zozEb^!)#bI$;+n8}0I8fe=xA8o8`_HytEvti`i@BJpyB1mkP7|a zL(`r110Xca3VUf=GNniMr4~mJ&Fn0~_|o}$Wi?es zIb67Xc>kuS_@;RMT+dxk z%%l5<4OW&lJft_&mqm)x0gF4d zhNG8u6J~owo8B>4z5&kfK%e0Cs_P@y z&xb1_sgKUzBy|+(g-Vs*61onVwawIq#rAw@E!?EVi|!BAbo(+P$O3DC0&b++P}}1+ zJ1i8eaPjzjhZ?9av zyYj-w`Y>ZVaTffKHPFz0aIk#s8wZVsYUf)x7!mZD>m!NqVs4~#N*EqRO`jn=$(DFB zcAjbgX5 z_GnnnT7q2QzkH9XSx>vxjIF6}Do5sgMf{GLFNG$)ePw)Q;6ZPy(eP039H%YlM@Xh` z%MfKlMcE4`i1LiBO7B2k$856YkN%p->c*Dr&?_wI(i-4P{;1nJ%h2V4Lla%`&&fz((c9quR7HAX$+Me|^8i;!k zWV}Bd_dB9cQM+R{t@897kb`HI{p#1>vD=cOuk+;@(9H_jrKTSXt;H?jg0f(Tp#J+N zzi97(>B)o{42B6GDshRPfqsU(gZPa+g0;(($lk^Hs8Vu3YzF~@Yj|qd;%u~@u1zUQ zT^PP!Ni`i|5iLaZW`5crFP9xeO`D#sO_`@4hlqoJ7>^`GnmZ*FLy<4H(Ouyt3V^$U zJDchA25_^5w3vz%GZ2t-?Pg}FFVW%$UOYbUQV>6nX>&(KzzWR9YzT&A=u~;8->6(U z-FAY-CCH#En1e&lJL-5o_~C|1>Pnmzmx)Lg6LPY)6zw`)HsO2!_w5XS44x? z4H!CCLYBqX-PQR~U3Iz!G2vB4FL|7SJzm;9{!rFA;5F+BSv&qm%7UppPXjM^>pe3|Mahk>TGfm|*`B9` z0ZQbIXFc2($A3^WvHMNtQ!+ThrrCWf5=%1?3v0|8A{lp? zL}pI7_L)%?#qGWhJD2g>=e)eq;b#f6T53STrd_PFXqmC}%djUNrYMQxWFgQx*6mnY z14^X`;)#(_%U?S<40c8s8pspO%Zx<~!sB~2{F5I;4YZ!FIIvF)EQ(W94UmsI4eagI zG~Ftt0EzWD7DjE0{fZi2(-kk!(i|ZsS~3s@j{T(1`)qZZKAlSyWTx5r2*NG~6qp|L zR+6JIcHs+g>7Ar3lT{s@w(ViqnFi=i1Tba`C$7(D8q57Rngh1L*~FC_SD(X2GNFx& zA3zR^!aZ+Lx-F1xhGHi@sGGT+E{3Q*WQd+4lDKR51$5j?TNvLD`aeMXH)XRtMbW%0 zCIbH=o!(0C0j9$h8@_AAxbE|0`A#sN>K%r1R}!kV{s=kH=lj5W>OzU@bNv3uB?TGw z92uB7Vyr1ON3ou3CLO@Aq-I~nFp-_5cT(Dg6v|+w+m;z9ZgJ0uoIsi+hrxnj*v45i7TrrrpVZ2TSiBcQs!($7i*YyecPHsF6PLAdPZS8 zUcke913OlD!9h{P7TmG#YTUxj_L$vn#&dyie}>wUMqV~y$a zGfLipadW9eRQ_w{Wk?2+q+xSm-Xk+=-J?t5k!tHiohUBIf`TC{^-@+*oq0iko38lm zVo_><=5G;vM1EG1{OP4zH{20Q>AMY*Kor_h)OS~zBsb} zZMxI~VQM~E=tf5ZrxSMqvugLZi1Uz?seyg=0Qq31>}|l5{?_jqgRA@k)V80ofO{|U-e2A3;nJI(r&kL*L!Ol+~R18JnyxS1^5b)BM8 zHao5pZs?6jOv%frf6c|wsV7zWLLG)8_!iM%tCZfMZbq9e;im+5?=2h9GF^^-9>dJ9 zGyj*96-XeB(f*@fdmGH^N*wuX_phr!3Ml_hw7$TFa{cZ6{ku|@XauIr$`ubz373xR zage?2&A9XZ@FgoPHrE48OFMhO>VFoD5h4UBI_ zo3+S@MW6EN<5(!T`Gx>SK^Oo?Vv5^a-(cUr;vVb)!f5`t|@TPRmzv0b3RjC*AI93;X?xMz=7GQMos8MeT z`(VAtdrTW!aNu-}fw5T6$E)2?$n~ozQdN!=O8@?R(Q=hB&xLWq`oqv9c%X)&X|43Iv*MSDxDx&f&k~){FB_C=4<3FD&oOM~ zxhE*P{~hWSuU``>8JQhG+La8ID9+7hl{lUqm~M#pApaahOr&ywh~8vu(UM$!N|^mT zRR#@0!~n(;MM|wb*E$%m3fdVD9@03ft(yTA(UNG-<1H;EdF|OT47XJOcy3E4okL&|YZ(qd$+HLW z$BErI7_)>c-1ha`L4n55;!05KLDvB8mTzbd4ZR&!K*f-i<$R54Fm*2P`osrz?v@jF z*=M;VR_n%3{uib4vf=OHYknF+1@vCHTiqcA=t3lkJ1F^_I~D#_e^{YHRe9 zutUF_*OK6B*x6HWYuaJ^BT4@Mse{RFpd41wa4_=7tc7EyuwmTu5C>OXyr-zZs)&*2NOV5?yGnxldMBPy`?hfaq0Z_~G!i%_YXxY`ZLJ6h-siD6 zo#bL!akofuJu^VTF%Mz{u4E?<)uEU#{>(XgW8%XitD73M7yzCl!NV@ZRj zY=MT;^^&i!`#FmCj15oc*)f$=T@H4Uq(h8#Hw{_&6E)J2st;jqz~@GnhdN6@P^U zW-d=6nw=Y$Q8|rYYi%u4Fnd4zp)g;og;V!w?|#k)86+FyD4h>8b+^nmQx3P2WMxcq za#x$cL}hfIw+}ZoV5`hZyR?|UR1HWKQ1uR`6{_Q6(ME1=|44Fa5|qZomGoLHF+J3)rfX(U#{1a@=(8}$joK&%YznLa6GO$8pb10f{{o!M-I~R||5bFd zcSc{^nz!SS?@^0L`9hISORB~0ppWj8Ait^M!PPFPsdo+nyf-lrIz(Z#D-J3P>Ed@D z#5a78{G7I~lW@4{JcVla@*GJ;B;}c8WG3KYFH4nYKA(Jj(LKSL=R+U`$q@is#AH7S zXZf8i{$7?i`a>3ZvMt_m{GQ%8cxJ4TwK7y=U6h|Y2HDK2(AbYD;r9IYFk|o0WprTS zcWGIITA8xK9FmT!63SYOW73X7o#NydsP|L(1IbIF49_ga=wsk@B(JT(vnMe5Z>15$ zEI3RXj$<0DKI~B(YASS_Wzkj?r?i_b_Eij|1)2{?FX~oiPVQht$eO1UgDN+?cpqQxPnpey5{ z#}hi?WU%|TBFekf^EV+x{$$J)zVMSiPP^x&pP$Tp*kM|(Bpyp)Cwjy7tb01RD?b`% z+z44w6?*r};@{4xmnqxfF$Sbw9^u3k>vxXTyRqUhQL{MSxH&^^`j0Clr*raDzT7{W zO{Em3TkoJnqtKDFRGgoB3O(vIX>1AM5 zJWN0Z0zEwIz1hdV0nTh?{|20Gl>P#oeLwsG&f)tu30aIGGh$I~NsVQcbzORma>?m( zGGeeoNW`878zk_>Wg`{3nc)iPVp^IOh}h)}i#^i}BZ2Yfa?Iv^yNeXJ5B~J7ajV`3?V@g9v*+PW+9V!deLwZ33O#e) zR=-C}`sCmB{D}bXOTVEGrxbcuVw73MDvY%I`c9h=O1u zA^x7HCW&Mx49;PdO4F4O98wsLhd4xJLl)(dQ(hJy0s(b8B&Re-3Kw*6g%_=01Crt% z9S@wh1rA>**SwfC%3nSUDcc?(iyqSG>zE=;9AFtMyW)L?vpSYxJ@Fr*G?v?xsSGo1 zP^~lk`Zy`4rjq~KQ+eQ>2|+&jRzlFW>d4TAxkKapQx(#STg5K)lw?WeVBW)*^`lEl z{1QfodIkB>PHD1kMgayc-3`@FyZl#;D%{PLnHjQ+Rb8>k)(-PGzh_HlRPkN%roJ)* z8g_*E&oACPK37#$9|adAO(k)9U968+W1#cG$tt}!bS4fJmax{{5?WS%JR$jU?FX;y zl0$1xZGPO)CIIhXu1ZH~9gUd->fARTG_7`YDK^=Q$O|(c@7d<>iFL=k`f=6O1w=Yy z1d{vG7ko~0y@hA3bm8rTi?z0gSkxSCbCE8LsjB?E_NUj%wUF0|odR%&s4-!T1kBX> zIeY{6hFIr8W!z)-_YY#Hc0IFF{6-qo1~tWcvWxpxDh_4F9WTP%90*IIfD@Tv*2oqt%hyio%x2Zzki?U&i~e#UW^KVK%2;cP9e8 zj2~7Q~KjMhkPek0_%K=g?)snS5 z-}_z@NHduPD9s4Ah{yPUTS!zA9QKHyxjLJSTIfobXhWkl9j49F5sSM32SkCR)$`WX z;1s-8ROM1m)j42GnQS5c3E@yYGyC=+-wd|@qXk%7{ut`WP{#Zro zG}!IS>&wD{`&g6InBKR|$1+US9R*(KyF5#J9eE-Iy!DK_rvzBQY1E6!Dglgz0Ku4m z-4n`twhYqf0~?!rqZJCKwY|ybF%yVV`G&_6OSS1$26R{y4N8`ln zkT=xA)#fV+nePh^!Mm6{0!FhX+7Rc43+J=Bt?PPgs((l4)zCb_U*`DP@+nt^KrcZJ zgNyxTc*5QbOos^*mzfono}FdM*Wr;|(2g^^9Q6{Fyb9m8D@r4+A`X8ng(yi)THGjc zsUoh#o>DshMK>Ryau1inX>!Sx*KCtV?B&NSvNc|fYuaeMk5;>FGjZ!UqdE9VO$%1m zWj!j&pWCb18k>0FCJ!}|-ONZ{?x|$ncJ=`7R^Q~87^h_S|F67n{NLt%DH#51-d9=d zA9>&Wy5>^P?n|b%S%!0{!ST>~Mn1{|v}H)_lK121cZJW}v09%6e0G0VaDWLy^RGXAXy?|A(|Xs| zm=fw6Ds04OJ!HUTK(x)9GR);mweItFoIFvBAtK;CzV8(MMsUga!d%E|cP+jQd`t@xQ~!Brn&V z#V!=%R_8^Iz7)GzwD1F7VzoSc@TPtiszeme5x7Eb?Rb-*CT1TREQDiUGdWEkbDUx) z+1$?gET8jq_N?(dYOqNeY~RxJ0#tW3UBmnV@LIFLYb_CUpmxR;$etrR>JCB_eeKdM zZs4Rw%?BUWWvh2RkezSfVk^-N+AWv!&s=YQ+Z0j@>*--2|*uGg_#ii^`%&lirakA)BCtP>sVi(j@!>XiJ`kVVow<1l!10i z^xOB}3i$ZW6PbLutdOf29)6JH!V;P{dK-lfkgQAsA-$ij&|M!M#=oo|DVQx7DiSUO zqr8zgLl^IfSVYHXs!u`HTbR=3*Wu5dPjbfy3J7fEtcI7GzBy@+GsxKE3<72^@)QjWZiS!wu8LPGC;YrAVKz*uLocx+=)RDdk@`a+ zd1S48${3j)nIg0EM<6$?B>Cim3Qo1)-1i z$lgMIfwLQL_rAV$6P5)40a3f?usI`@+lI3O3a+`XK!>i+P>>I|qvg57F zvF+k*$9)L|g#r&!pg-mrw6})KU~A@m!`SS6OzU0pcF`UEb!=Ba7nX=$o1S-He{m7d zg;jK^#lEWube$X4R_UuTwE!}nfbOU{pD1n1`@>TlOX89yM`9ms_a^s_1mIfHW=~%G zgS}VWW*+!%DbVyyp#I5-cF=8TPMp&>q~m)tHs7J8nuCG$JGcAbs+=L<3eC3(Q&*xx zSM|kJ3FwBe9SL=3Zy1ApglhkVW5z{=BU{hJ(4!lJ{(Oi1$@Q5FSET{ve2tmjz6Wg| z9=MRB`{rp<7KSD5?1T+(MG_1ld9(O#csYvUkNJPur+}xYC=Y9=DB6L#{I!?yC#6_NlfGJt_#(Ib^TPrEq0K#H+W-8yXtr{a7Mx@)l< zR_pTHp#hxUV)7cEY7hzn6<{Ygdy1f%$c0-m;ix%dKW{)+PUzmekAd*bSV+k80_l&{ z>P7lIb*^fZCfwAP>M3oxC?c0@N-jqyN4>Wf8{J^l$jm}ExpY2~grY#T*Yvexf~IF& z$)-fW@vq*+Mss!bMw;C?x7n$kjrYfgd-K7bX*36|RDU|XW8xcDY38Ty%zKGSFFy95(qR{J*>Y{;HWb{> zYaK98d^U2gYR>p&7G_i)JQ7e~v$|6CQ2grAjFfHsvz-XI)m_~ZrC$Yd8=GRs9$f_& zZrxj$Qr^Dn6U3xuZjJW#`}u=Z)amq%3*h5?f6Jcpt}A3`=NwpHW%apFiplftkaekz zv$<9$qfex8Hco7=)Bt(t(D?nZ-F*}D*&Lmm|I8X(#VuQ&oXNx`7NDZ^lkiy7XXjR2 zNjCuT9Hvym3zC60;n0tG91`9vl6f-MH7M<|5H(u_Z_zHU3WAdY`z@@vN9 zFEc%Y47d~A_63G@M~c2nNmI-}QIIhx3$anh6%sTw9kM*NE6M7$t}2KgKjSyGlCK#` z&-STGix)Ijp6qVV(B?%!?2p`)DIaJRbwcUnO4ouM{d}|7zLkd~G{IzD>-n#P)CvgV>|mNAJVdITBB17y~rnL6)8JfC8y<*5{B-aDF>X)IH-Pdx{uFiWc-u! z_ z3MQ@rzs`1ohox%KMXu;x&T3MRvBW|_O}~*JoSchTa$UJ+gj`4fzKB@q6>?T=;wQ!$P!-?DH5FQVmh!(H#a5TGZ# zl6ykgeHQqVv<9(MX?qNaP7XKR`ZgQar;W_RcK$0vlH|_Sy?V08-Pk5X7rti3DYsd~ z-R@-g1q&mOAb#=w0dwpGb9?PK3m6l(POhd~1e7Sl78L#??)qqy;IR3dV%q+!ACQP} zyqU12V?)9xds_|=S>&yelycZ{qmeHHg$E5a-upyG(AC^J&iiP*TzUt}<==b2=?RAC z7u_A%#(nW%35>TX(U0G`>l?C+K{Lj1X%boqyg0pkVbZHtwmp0{$FWBVy4i8JG<_bN z2rebmG7@Q-(38>MK^Ij*NAY5=gI#s^%23;=k`e6hy@2D9u_nmNomN7XFc*M;8 zi;dEGS)k~qNeM4{YT+`b`LBLZCgP$`3u9@Eza$ZK90jx?sT)r zSC}u)UJfSpedqP*6xE9@Z;ai&+qJ^B;`TDloyH6vOHI$R2FR$t1SQafTIKKRopWSl zxQ!1)Y4gp#gU+nve!}xcbu92|nMmzgdh|0lA(Q9`h?W50CS67f-~RR|_dcNh_+xnf zaztl)hAz1&OKv<#`V@69uh{XA=X5jc)|cO>O@MmV<9U8@VBL+g7`!>2b?fzK!Uoq* zR6%tCj9`9**^cUE*md~%*6>aQxobuRv5bL?jLe??gE}_4xnwv@ zn+LM7qNRuCmD>^>f;@qN9kC22W(j=`n)}vIP|1zyfEeQB5flEFZ}9d3FX_O z0YcVKazYAUsuN2D?!s*%<3~5al2rl20O6-Ks0Y%V7$lUw<2?y?uedei!3_gV>q>h!1D=roH<#NatZ`{#CY2BV@Vf}#NGjuas zpz}){SX;BPC$)VW)$EGn1+MG>o$wQT0I1H9Tuk>`fes`ljs@E)8<^?t@dz+USXQ2~ zRD$n+EL1;^>;;3t^ow1o3)@(73)E$tij!1UKzB)t=5-O1MsdiO!So%)OY%<{ztqY!7lMj zN1;uSJyBo@2?m}j;UO?@f&gn>ZN$UO=wPB{tRIQcd6!{%wo*+o5JxxN-LUFW7Hkn= zZRHy3?@0xo!Fw2SN%w-`k$wF9o4$Sjk}2*1N|ZDaqi}UywhBbD!L4?8gGf@u$5ZOB zu(cW%otY@$Sd9UvvEOEfY#DxWTTO!M*^6!B z?n>(R5Y&&GbfuC)at!eaOf%J>Qbg=FvbIv?sU8}pR=V8MsSZxM@M{-?ymAa=y=Die z=E~1RybG7tA15>)7tu$TBNj^l55WW_>-Ih#-xm{uy$_qt4o_hv4VQD3a0C%%XW|hm z_Vu-K=Qd-9NU({lhW*QbL=wNQV@VK#ovqkb);xnwFMKfxu8`O@!LrsI`H%)foT^8k$daWhE9Pi5^VfD5`BKTbl2Y5iZVTRJBP6 zozH{O1Yk->;A8g;G#hP`p1M1$*&Y1Y;}PxKM_3-d5DsJt7@9yFXcAHv?k^bCuJr&qU9PG!XhXx!u+F~{hvdirDP6*`_^x=r7nW? z$f@t!Y6-S5*WVaDsDd;>F%kJW^)>2`GmsLVb5ExBMWgR1BFxRI6^?}n^%(8IP`=*p zk9A`!l1?z-e7>=jMc9LCdbm1U=XHy6dM*XHY2}-jpnKF8*-Z09gNE|!v1)0xw!QAD z49!eD(?`2xjzN5eQx{4|VN5hFuc|aD^7vfM%G@TvA5)r*rwBF4znk5+(m!3U2>%yL zixg<`cpW+pBGlUdZVU|W;PRY)w)J~cIxCCM!*a8njkg0EgnQpvXtI8N7zIzbgNYLF zWq&={8$UcL33tr2Vwr>xQCCPb0Djs0r^2YNsI%&mSLu&8(8K~&-UVv3FaEk=m1=pV zG~BmSaV(znQ^=V4kMO?l(9b{}%de*&E3K6yd;B1f##9kEQU3MmFa4!9-ZPcRTEBl- zx9>Nz|MjA)RQ)D+f9%%h&G8S9qbFm)N_f;WQSG;MVUJ6>R^k675A9TBlKL)L$o?gR zdTRZn%{Y$DD)pqm{TA+RNX$6DfKpJ!>vC^L{P2pz&kis3_+Ji6`EBE8#t$Om=s5E~ zl8HL7{XFECTJzFP7HCggPZ+@`b3TKH#;aGFy0J#v^P%6py|xGyZa#R9&y0WGNc=Uz z_f~ui*NO6i`*-v6b5k>Dj0GW0m7l`1Jg%&-nx~UAgAhImncZeJURIbTqNQRL`T!Tb zOm8hOfZDnQTIcX|7#9*DxMAtQ?rp+6f-`QphntOK zg+$rL(_I`wr*uYx5ZvyA2d0Fyi~E*YUfLZiwfNb2O)-=BkoFIO=6>_mE8p#F@3u~m z8?~w^1{h&HX7%~Fdew<-v1n7yxI)&U*&E>Kt0R(+QO%`l0v8?-LO31 zZ41+IAJ-9LSP_JwR-qH&fJ?<()#IS~v% z4+=6`c#hMnBI$X3yzxf&%WEQvx^bKyNoiN_eJSJ?KnoEccd!0cqx_T(Ty8};A3W~D z{%-#po3R_d#Ld71vDq@EF9)k+RTJGq-&T#3QFf)2zqgLeoqX#Q{6Vlc2q_fQ-qLND zGf`DgUH_V0i&d(i3H{DaOCb~IC&<+AzqyrnCm>8VS7y6Bv9H3jA~Qb#cAu;0mEFCU zl^B$Fk|{B4z~8&Y__bj2ffBM00F4D|xpcZNJ~zMiEnP=oYRj3|(@Srokt-y{inKW; zyzEJ~dChciz7hS6K|K*!mUz_&7riHy1EN-rD+!T;6jnU4bWo49g1`!iz@;G9(MZ zsJ;qc5_*D6^h#N_*yLJX5cWYB7sM7>$&DAUh@+Y+FmEVs$}wgv-Y9jUkmgErwdzv7 z65~KE(&-`4%Uf>D_8dfRW(ZHh0)Hh2noZJtekUlO_DYOU^B%v%Gj?sk8QJGr4%k`b z&x=949hImNx_9Y4L9f>};~zLaTUrU|JMb2{Evp#xK&V@&SvUtBeO8YBe3`O;8b6idCznf=ax0>vnEL`wgN z1Y^j!+zdxBv;Px}Y@j<+j3D3C_Y6iRlmpZoOY&yf>|KMmqads`P!C2N=FaCFx1xk| z>i)jKv$p2F?{9}Yr)s1QdN0PkMtSM_Q}0xwLHLH{1amqzr6n6Qe>78{=RVQT8k&@@ zo9*TBsZqSy&)L>+uz~JJVI%MrzB1O}c)ljb=LySP?l6x! zw zpsqOhroX@AnW}XM`~L1u=|TMy4m!X4NRA<_kB5t3r}#^LaXFLY-J7@W_bL9P<^lte7GiP>SKgJuA)s5rV@BhTX9_HLrFELpgwTA!4uheQg4JI*u7 zsB;{JS5c%QZJOG0I##)<1lh+O43v9FzxS-k#~q8fx3i!d+NV9hZNOA2h3(xE5CsE; znsx6zfl2`(z|1r{sat8=rLS)|!vB@tuv2PC&hlS?6$-2X#>~oA;V7 zGD5!t5d7?*Qp+5$4)|mOh+U`(E8&enyZ#Vs-e8F0QB=RRVzxL$*tcVvV-V~`r>nG*oD7ycxP zBO5b%LKdsG40-Owp0M)gSaQ96$_tkI-5=lkjD73{Vy!o2vYlAjixQgRfOikN1J%I? zOGg_w_GVzYYMa@<30RG|@gv$$4dZrIgO_-#Q9{hMBZAfuVkp%8bbXzws6@AS%w~;i zO%pu~j>lYs6RQIS82kT(_I^d59ml$}RCINPl}3Bm-2N4IyhlDm(#x_U|6Y)Z7C8pnTTx4vtncKt^D^q?azcu#w>)?7y+!GllS*D?dSJuDNjGHxK6%DPcn>o>mQ=%Ree|XlT))5(g zP)g0BuB4RgMIr1`$1+Sim&e0Z{4NP*9%gvIyWR&PqmO0!oxbfKCN-9HNhbQu{sEHx zVOMgNpQV$y*L_;?%YFB(6&$^)`i-~dR-BxmX()LTv0`2?`2;ekmdt?CxOZtCsu=V$A&wVVD_r11vIlpn7-^vJz5Hrg6k|CN-Hco~j2l$#Eyac1cPG!}3S^)V` zPI|x^S}<31`p^+MRd3TNwY`3gQ8$6!V!gAvL_F#>@~>&3_(BvXA^0G^vh9(8ltR*vSm$(fDptUjZsNaGX#FP~qK z_3vUC&%OoOp4Ti~bM-DY;xKAjsaYmdTzk`!Y>JgGg6id*bamzi~ z8&cZ1&`@hg$^3gZu=5wX>wisr*XUel~W^8`msBxTy*q20d1$Sg`N%wdc=+>{&I?w-hIcYtaz*^PlBf99SkAe zmh(WNeDjzFlP8SWovd!VFRkkUZ-jIeG>jpa3E*iERjdPT0&w~bNza>ocmIyKwEm0_ zE&yIslKKU{*bhZb-%E)M#ssmCrxz+pc3H}-EV_6VF{ zv9}Y11q(Kb4;ahP3i6dH#khp7svxOX7Li^Q)sG3H;DvQ5PA2{TA;9sda{F{GxqWex zdX)%5kWMK~Gae?c!$JGp{)TT>W_XOB^7)3c_8fTa=4!?N;Dr=!SD{`+=UXu3GDv=^ zaR)1B194)!m~wNYi)a0}ClzD)5Ad+qN&IbAhHKDlDE7p$oLL>Ac!6uWr!`9;Qo89q zTH;x)+wbJk{AjYBzsmi788>MAuetF5>+qLo{tx-H*awB8Y9UN@UGL_auOn%2^nq}?%7g9O#7g7nA@T3Jp^oH2K*2>*R zv*`{lEGCqos`xR#A3ZHxUS0+#BqXe?L1sl&N{2b_1uxHBeX5&p@JV**&2A4h;`_e= zXQyfnI4OW|V@;lDv_3s8)59z0-g10$j#ENRYP8UGz9k}!#k4=K$D#)X-q z#b_BU7opPwMUhsBGqYK87F6i0e~o~-e%NI;)w3zRyHmTewTVu!cmy}J$y1z7r$AB%4U{@>KdOX^j>D0xXsXc)RvHuy)_s*Q1R% z0ESBv1@$)Ajx4QAc)D4U4avw$V_fVA2)otKqQsO>gR-5ve*jt^ftb~l;Yx$)F#?hT zNezv<*>98o3b0m6EfYRyny&2aD79N;%OIlJ=x;4ke*X=MeExjN>|P;-Zw)} zWI@An#nI0|`_KlHPIc#1z9A5q#M29zrhgvo=8taNvRkP;o5my{?D4v^?AX^BU@NIx zt`K00D>Q{Pg#MsmYHT{nuPTI2_akJr{j>6gO)Q3zKLCBsr zD7hIACU8;}zun@t0Msp_So22z|MdWA^#s-~In6{jCpna~b#hjyt z{p726Ak=Z0UBSuxFq&*)p+-4S?@t|Ty@3O17=3oK@c1D6lnzEU z3W<2eE`2cRM0mX1*!}khmkVcAA7Fmh;S@Df#0;fS+2dY5DynJUzhRlm&ylPkKAi_P zXjDgcYL~O;bL%8@5wEWo&n$=|2iG7EKyZDUsh-i}3O4^_dU&lzrLlA0y2ug7x&)G_ zgO-qBiOM6sMRDY2Z>^lNdh|jeNzi z0khrFAp5pX?=CEdy3-x;5y|V3S725Dt55{pIO1>e2SFzrgrf1kY!S5mo24d})p-IF zRXur9;X%n#D{XPhpZ3Pz{hophzsVobw*dy&6`_nK&}HIQ+5W7qU0oM zrfE3a+Ft2hL2hk&Eji;Z%`$QeLLYDKd7c9OUqek?iIrYEQ}!&M7QAMRtor&M|M)p= zWc7m1-=7BF)!p5Y%}M34M^Q8EzYyMRH*@GKhm0Yp7GN7Znu+%(!>0z*bQHXK&ocI5 zafby0mcG8b<*R!A$B(8&vh(rXPLGZ%HhOxden*r$9<@J=B<_ndk4@(D#?m?FETgE( z4A~}slngx(9TU@N#**XKU*s>ml#Fapc#N_A5Atko`Y+#E8D466Im~X2@6zoe1fH`t z#7FwARCRD{{_vhU&&6N+TR(7PK1D0v4n|H>Gs%NOs8JgmXmjoSHS$I?wads`ljs{E zUTJSx2y8fi2OZJy&~vh8<0fu*10TAdb*plaFqSl#qC;G-bKp0+V73RS4^ThO~M;~3$zxTl}~%9WOCVUKM9K&!gEbQ;$`=R zFOReJ8wd-F%}@dEYiJ)0W^fkb*t3TDjt?qoo8>Rj38aHZ@96lyQ$=Q|Jhl!#ScWFNTb6 zew0jkuObHFR``{(z*BVQd2Q*SVrt-d6xD>>nF?f;&l(bx1ebRMGekmA>@OXO$NC{xKvlJN+d<`*4FysYgIQ1u% zo$DJoHPG)RA2%$%^x38NzWIQt0z+KJ$7X}wD!qPu%vqQ8X?e`IHsD!Tmop__3#^12 z!gCGY%guO--DdqjTQ8$0s=^)-#(lM<9gYZ8Q~lYQJzd|bklY|Um8?#P-wrOH<)R&k z1iyRxUfQ_5oKZd5@p?f0YRsjtNhTuV4Idi}lzAP92R~iu$=rXwt^)p9&#e0lb?pe} zAoC!(qVum%MVf~*Kmd}<%3q8|B+|r88`?9-*BkkY1WIu1r7+ThsOyv3ugX~O#do?K zG|3-^Yjkk5)jo!>?Umn4clm$=Kh_$0%WlT_z44Vy7e!j*F=kQ< zwqcSNTzYRoNtGIM3XXg=@;;xZ*BFntFRqdzA%#g7Pj`4D)<^VC-cYq>>OrldtwHtePP!gnsNpN zbNBpctTmoDGWcg+Dw@|Ow-Ktt3ZbRmHK{ZUGS8eV(im~FNK1jwO056d_}=zN7{e=q z%h`q-Y7W0mW_y}gz@o&+Nl7_JH^P3n+P~9inZ9*Zdtd?&UqnT+O;xQJB@i?EwRp=k z`#ftR^Hg{K+A&yWYk%C|eAwWVnv@_n$CFhJvhMja2O?F4rD?#n1b)dW-?)DV(k}g8 zYDr!%4DP;fWOKz8f=%YDXAdFa?{2OJUJV>6xjK4BPK#V))|(T#<^CtAHlS&G`|nW@ z!ws>zhXJY^;NC?;7uBTdRi(4BttA2Cg=gP4>0Gha0eKU><8Rydl9IuT0=<_Auo@>_ zrik-DLIPV}`@EH0RX8??e5F=%^S&>KVuuhZ>TMSlavSHGQo4r&d9}m5i?@jQ;cLpS zDpIR8>Ba|HO1Y(XQgFmp8HS^mzJ)xMA$}D%eg7qL!!lUua^>#t0n@-{`3WZu`xFZZ z!Pc3G;^GxNL^YR4mJmxv!36P2ywo0p-^NE8bF>KborOHs#ZV?P+l~VV$Ox(t{d->f zAcxK)Qcd&}JD#6Y9D<;PP!Q6+ewkreAco;PUH^#>saV7dEu-xy1vhKu&Y>pyslv{C zeC}HqhH5IwyYfSTQ50ZErFB=+E0FW~g9r00G049=63c-&VjxG6SnN3H$?68w3%N*%iHZDqiVyA%7E6xZui_#glU!Hp$_3=8BgKf@KP$ zrsFt5LCRYA!4t||=fa=Sbb*uZZ9tvJ69t+0W@TFwxW1(}+m9-xQ zfPLE%Y9n#nQ44=1zgTj`zzie{#%W#t7PmX!0tzZ>g?kKk?F?+Q$$&2^+VytxIYaXbl?oN);Fk!)1wqKIIDhOK|? zMEP^ck4oKR)L|F-S~>SiOoFszJQe8&;EOWVXccYUeq9TN|A~YB2li$6zk+Mq8v*PL z|CPr8C-)CP)=qh{dv_b_m%~yRK66n81=j9)2lpDFzIy=uN~_WsJY zu3Hwj)IMZN5_1Dhc0#VHYpVca!@=bUlqRU={f!GD9W+@vrk~>e%vhQu+U5EnLFjTh ze72q({&7z%aPLLxec2cAdAiqHbcj_u`~X_LKc1b-@sz0iK%b%0Lv z{UB*xYc%6_yE8H{#{sA1b&cKc#<`_>xS4*IY`va@9$WDk_ZGh;r=;wvoVL7#59V;v zS(Q549rSV_$?i^QJ{-WwPYkjrj~kKaYqt_ZvhemP)yB?J;gc8OOm2HF&-xI|D){y% zC-!4_LuY1M_xvz4(&XKzhzQ;>tf69Dd7ee4w8(ShawJ-&+Zhap6ZQJ|{S9E;$wBI< z`tMLrn*b}p=eTi`{X5CM2ElZ6uB&tBKf+A{4KO-Jq`#hKUo_0}nChdW zEf4t@d*WYF?|-8oj2J?BK$lJi9oepMXPcr8szT4M-Bt?Ut_&Yfx~`?tr9n%L^Wt&_ zn%X4wl_)KAT)pWw%}Zl8k&2d2g9N?uhE^t8i4f4vy8G!mojnD25*Us4T7?JK4h&qI(IEei%?AFDn+={o3D;T0|6T|RQ~^BbKh|gTuIm4!L=Z)Ffqt0w zRU1=B(5jZU8e8j48`opnX1wLjY^5oZ4bVDu@e3$*_`qnyUsMbNA=*P}+2OD-qY zZbZ|<|LcA`?)dC$^LcSp?Cm4nN6}9r2ClIV_>rg|?Y&ROy?Fhwb;G_$k*lyWr%a|(PEU^bowsR7<@XI=K5R(C?|lhge%Vhbg;_kYA&gpHX{ z!2R9+Q(hjGxRTnVPKl-zVPpTrRN9_wYb%G==L%Kn+x`f91{#`LCd2@h{Nyj5Ae)g0 z+bX>FPS^bM2Xnxw2nr4s)Y8-pO^mWpnp~r?jY&-KcR5wal}Q~~J<8gQX%3;!e5?-)8mim=GdAOe;YQ=f6b_Zx;0`Dnhqq_&czewRNETeobB5B*FENJ zi2br{iQh@HK8IO5y@GEMwmm@LyZl)(;9){+bHC=6ep8|m9&Wjc|KDg+!a88W8qshF zT1j)y-Cbh=CpuT$gXf*oJxB9(bB#CmOR%QE&KRpN;Qp3OUUu^`t4+wrDv!dJsAN5t zv|HYx030QVN^m&8@`psVv_SBL!DEgQ!Yc$7bvE~***0R&xWRwVN9fS3o@jv6Lw9Pk-87dp4s2=M=^oURhQ>~&>MI^nVN-z zv`TKzDDB}}@Y1*DK*r~4eQw!muC?bO!=u(*6(oc$#ex)enYEw;-}>%(R!^pj+ieDS zN>J-qSY++bhHr}qztnNizs(-WpfV)8$%S}U&8zdAT0{ zp9nQj?+*sRvtg@MtlZACZ_=|c1Aei)SLa9qck6FEDfR!R9E&CIrF#b2!6@6UR&2O! z(av6lsgi%X7xW09o+PmJc~B9U({jYasYI3A*oaNl`ZQ+Vnvf{}?pwvgXhM%VTotVW zI7UR7L!VK6NrBksh~YY&+i#C|5mM&jY}ouY{Gdheuo=y9{YDVH7V9ARQvGwfVT09B6z|mFQnCb49GAoIe z!Q%`_Vpx9Wk*th0%~k14YU2r9R|U@hkcS;Ax#q3kcj$hB*W+`0E>KT-2Nb+_AQ7X) z^}V~gI`9_ySn&<3zua%SKuBi}o5I(cEIoJzUB1!l!UlCCZs;TYDLpF(t{d&5Qib1637Mk< zBsN~2_GM^zUfxzhk85WsNI0PE-j~0)G?z*CLVNB2<$26)OY8pkovr)H3QJ-?S0!8x zjbAM?-X-Nw^&^BvZk%tSF*n?b>D~#DjQuwnkh~i9x*lN=-SX)+rf)Mz$0>4qdCewE zf-etO*}4w4imKlF!T&@he(!}Y_`VO#QP&rCX%QsV+wfl(WV=brS0MT+zm(K>}Aj=0D_skz_WZ862>;&r`z^3bUi^@@-rM@>`8C@efrOZ$m5V2HG0QJMICvGH<2Ner((&BYu?nry>{{V`dC zcq+qRT!4VCnf|Y054^6PGb*mmCHhCf8L>**5qhF@t&x890_$1Fu7y!0xf-~<5}YRs zya;>(UNmEV1NriQn02-?Hh%t#2$NJFRp@RJ@Lwn-kyPu0<=|oR7-iMrcqY;)e3}MZ+6^l{;^)Uv1e$#~-K>;{gbajw)wwk{R zWbR;%>w%jsyMo8q1Qd9*M#HPAyed{o$qsRj+6C9H;+A6z^z-)HAHg(0fpv>BE{FtG znHd;giY!GQ@{CEkhuihb-jihIH^E;Td`JkU`-@<;&~adHwmEf;_SO4*o=_~!>3&AveLAabR@sM0s|Rh0ysED+c_JX`F=aHV|G%}KIQFC zI;W-YET5xZbbcKeefE=hF*(w=HDK`!pxacifM)4z8TnQdR{?q&5MyjiQ$bSAWa=Wf z!#V2R`%r3wlia&J2F|nRW4-5Ryl)?RRZeYcz6{8GK3L4S9Hk$a)^Kx9WuR~QfUqYl z!u+-qdocvnTS6lvWp+Rej(0xy)>ki2bR1MPrPQMaeh7KkE%P>SBVP19_ZBOZ?H4TD zor;zJ=uR37=k$631eX`cwneq~1p!xI0S5+e$`bD9PDn&mBKmkp05CxcznE0O%B?Vx2q!pUz))_*NJiFNx~mbO5i`%^Utyy}yPI$`)jPC0Wv>X@ za8LVHkI~M?qRYTB-CJ$8-uH1Qp0j2`W)%2t_-UD1|4gf-V%66FZBB0ENXy!aexAca zfti~lEy0D>XKVcNQ(#f3&dz1=DgYUGD*8FMGaOndxzF8AHjrhf#yPmq+dT?Ck~48I zh=|kL#X;-H)@(ZU)@!UR3cl`bU;PXGzSE_nBsN_H*-Ewfd9kt6Wp6gE^jHinTs;(5 zW@pO}I-9Q!B*X%PFSC6eH9?>5sEW?dO;R~V(C9D9g75{a*_tWzB9wj^e(5N`wUbse z$w`KhS~Nf`q&-!3f7jo50-5Yvli>4I7BAb$?$?<+`o#z4r5>FhM~eyp{7T+HTw4{S z&}z%|cUcaH(EnQ1@&fry56q-_7$mbEKYZz>Ff!MgwEDP*dKqQZYO6oq7YO+4XJn8% z&@F}6VbC%UZ=bwwH5vB(CShRohhfo|hKk;A{42>9tRAu(%UQXVSwDB|mrbFr68m5` zNEouQYa|;t6y@ZXm`?h*uHsbr2<{1e3prSC8v!>ID656la}^wLeg#wXH? zxFG2_>TV`7%AFUkDU^3RC&%G@0PoGYoam}DP1vZp0YL7bG%2M#9@c8#2+@jTZ%b$rirnuu;g{d z22?u|2WflpHxu$kcxWSCaZJAU9#-$FaVWK4&z*tk7sj`N^NHP4sfeOLs%Bj()^a=D zDAK5B0H%%NTee1beCh3@uXFX(PN(diJPQ4o`Jj%^>+6{6ii4Tya##XTb*O!IfA<0H z-eqR*R=-;>xoZBJU?`Oye8eVuDnfF>EH8vT9l!i00#BlzK0;CJjn!?1259T>=$MUH z?yfx~45fV$TckF_m!B@E+N$4<8>xr3cw*z*uNjER)xXlVgCDsHnym$yz^Fue6}q`# zJ5;-I*IBE+^4MtVaS(&l+HIoDB@+sL)sXzKPn@u;v$qG^zr-!PU924gkH1^^V3`lT z8Y}YABSYdSKhjrPu1&pr01mEPYT@#ng4V_d2KL6(vws8<`{y7*2rQu|_HqZNO30YFbHy1S7%tN~T(LBbhOw!#PwG-W-&t5s9>t;zC+wKw z4MInU8P7pwnegfhDyrj>)k}a6gB0Z7kKIlk9q^^(Pr_F$XE;o0*Yst&j%lxJ-|_B) zOxP?&1x%ti7kPPi?sp*qs&)S0g`1Smz5aDK8|2J1NWJQ3=oXwL#kBG#ke?Hjfm=~g zxkW|$f`v^q#-YqU+94>jEwPlJ0~MZVe{^9oUv7FZ*?MZ}DWtMODz;5xqWXMjEp7W}`An zM`rI=A;A90=1_T>%af41T9$#dvH&U9RA_YRw;YX+rPF8nZL`3JZ2}4 zTi{$69E6?0#Caw4Nh6Zn2%Z+Yi_zR2p&O+BF~HGq^AhXYW#?V$=8HCw+au-pazJZX zV<{b4R1<+<+R@AQECO9H6SdAAVic$*H3i}pG;(nsTxavOHOR&E_`X_^VU6+TvGT8N z=8aPilb8Xc=_30Ev}>{8>O&>xfi)i-X>=?y7UH^m;8|XS2t!U5P1=5K=zT&>GAJl) zmjmCtWE)QYyy{66uRl1$CncUJ=w!HQe){el$_6h+sp4M~tK9*Zhh<5WOauhI%Ya(l z>iG0q2dHa+wxdwLHHQwmK4Xt5RqlzRSY|{Sd4bP zsq1OUHa?(Pr&kwq55d-dgksX@pZ9MBBIF{#rSvfgJX&t$B&(Mr?8%at!C!E{$;&(4ic5s_LnLyK$M2Z`uq1+@5B3qSya6`W(I?) z1*@6C=!!0DF?_@N08N32MmU*Y3Ad;y-Ka}~*WhQvOLBQz=`A{9ZzIfNBpu>Ef=@~R z3otW(*ZPNF@*ei@ozkP9_W#<##`g8U>GdXW|3*MWB!^9V@CW7%feUqYscZ}C%-?ST{Ill-(4=bd_%I;sDQ`7M;FTO?tuLGTA8^nocISU zqf;pLM4g_ETp9sLz)%iVl^pH3xMbS?nVJ>A>DE}cBNt(SxVX;dUvwaCtkZ$NW%r-s zh+y^GOydj5rv{el{kc9(0=np(ejC7afY0#rh9+9U+y0YVc`2lD)+uF$i(bB?3xKPq zjK_2FJWO2KwpUGCxXzSSJG|nTPPf}RiIb*T7$>?PT$#_C= zY^yKEh~0#o>fl3oU_;c(H)o9l#*8cU zrX6>Gi!m*}+b&A&yj2sbAKgrpk@%t+a(1F{Ny_m&Qx%Tbj6U&!8*!(3fPXfI;A7_$ z`lup$OrIM9MbySVBa-ZKZ^%pu2^yadXS4(0aMI*?(kJwvk*mG2c+(~1b_U+Hv_Py4 zt5tuT_3|u?QWr=tE3u)gK^`%F7Tq!J;TP) z@g;@aN^i4Vj>%_94PBlB!JDM3*|3kZeIM`Cw+enc3>*aLr1EjXC*HI=njM_1 zpl3<9wtG$ouzZsKm${%rDX+p5%YOU?ndXgv1#2XkOAC(Dir1?n?EymW)HfNq`-h{1$J|l@;RD zo`}Dq7|-j4X<_soiM_#0<4DcZ)rf$&DyKRJMalwR5-Ma;G4G{m% zg(YPNJ5!~xP4i(T;)PsAzb_d7#{CoN=QR@C2f7j&Q>z472g6<~!iB9dA0_EmaC(V- zrL^I<8Jg;iS&-D`*N1`ZlMF@Rg}L3G1!i;07o%tVf24h7SR7l{E>RMk2rdck?izx- zySuwW|oSFH~d}rp~=ehl-t7>cQ+Ex2qYrSjj#*im* zl4o8g6O%dh$CJ=mQ}g3!*~v#Y8H-}iQ1fw;+tm%HZ1g2_az^np%Mv+-bB|0{tGE#f z$w$SAo{QFe&{RmDtm&hpib|OjIzVrT@>R*_P!34|^#r`y}2lIy&KH zSLdh&{k$R0Y;`2N^_|ZWFL!twuCVQ?BR%O7yJMXVs>qS46{oxMkW9rMFV{&htBUf@ zUDMPY95b`d%h&J5x9^!3bDreL5h91MlL6dSl3n4)rEOgB%MwHACv5l#`pDmyblm+ z_muGNT+L&P#YuB3U#r^?(HoT8i5~`Tbp1O%(4s!&F3vwtArDvWJS@7&tFt6>4s$MN zYQ$j7B9wg%(IVQEzKD?DR!k96Q+hUt1yCb$`1PaFuc17OQ1$O+Bsx5J$o_;*g`7V$ zDvo`ap173J?XP!E3ce_9pOvhNrqCp-^7RS(YQlA9+f5}PR7MqTQW8_Z7kp&^Yk?(v{ODzGd$|zv=7G>~&o|YLV zB06TA!G>NnSlq4`r5Kd)VkO)Cie}o9m}npyeA|qf%n( z=0)Q`jcIkrW)K^xdXw5}?L(Axk4J;tfAtAI$Mw?#~_WGtrwZhUux6Ma2dV0N!fq8HdpnBlZ1{AvhTAhuPTd4h`>; z7BBP<9GPz3JWDAiVmEvEX0EWz$6g9V3pJ0;)9Tc>kG;T|Q zY4$oF390EXp*)3?xblL+qZ3a6aRx_I+X)Yb4y=PKDoURF))l}>P8XHm(~A6QUB?mr@{rv>rv z5#HY-)xQOePqGdvXY0!6ml&^wRA8LezQ#Sh+X4a&>Che@?X@0A^Rz4v*OSdex$E}* zNj}!1|BE>L=it!5xf%Vv=ogL2=OC5ZJ{~PKP3!QOg+^%WM8niv@Zl{hV~#S0TU>58 z@z+!1V{fe^M^X4EKo^IncRqz#nm;d=%(cbW>RmFX zA)L}*wN+$#6W#jepex*qE6n#!`=r%)=Y!kxz!12c+UekPNI0?StpSNvlt>aC_QuuC zbnQALk7k_YM%e(yXQHh6eoMmQEdG}tj4juiE4H8<+PZLQt=FG%i*;9h(}^4{C9|}d z1!q92S2MX(VwCI=aYcyly>8f8t4aWfa~-iYcw5=lKo4~zO4o@PZn|Q0e!1doK#5el z@cPkCn%2smo271cqsM3t&%D$r=2c#5(OFxf0*}XuvxgZ5hNb`M-cIAtuNEi0VvG(+ zLfB!TzWCP=F*pY2^3{sETW9N;KnB?Am03}F3|6}D)4#BS7-}jk4mD!&#Pz|Q$i`gl zN89q~(XKdsmwWHi$}cW;OA?w!G_-O{?JQ7DCD!h?8gN-@_@7Wd&zGOn$={v1y0^u1 zxL$uBDGES*+crV*j(3nqrMmd4E^qT^98^6*VD$0hN2_GRjc=hRaI8|s8yDc9Uq#G! zQM1eQ)!!YNs6F?J(l%0 z2G%6>Z@iYpNxeQ%oIf8Hu#^TgMYTp`!`P$;yTsg6Jd>`SI0x2OGu^63k)O>gM90cK znw)LS%~T@AwXPqPl(~YwOv| zzFF{>UfG1rl|7A%Q%MCslO}oagy0vJI8UG|Ey#vyEV}@^>#6x!=^XE0}S{@u&^~RTD@^9EDS2_PLY9Blp zb#;>abJi>zmzXXd5n$uZ=2SRrYI9O|9pmL*`E!YuH)g^o>pda+QxUavyz?3UvaST;&F!LGS5x_w2=wHA;>HkTd`5t~tfdy>AxVg<2Z=t+KQ%>IEpNbGDb2MB z_qM1n=N6(j@O8!_rLSBpSrofAMLwrsaPa)NU*H%f;qX2}0dOg1@2egW&{FjQ=W5W- zupHmB5?^F^Dtt0hB!5-sKYe-S-oLa_$nAom>ww7;A==ZpJx+m8afzZH2k6{4ydh^S zic6@sgf!mi9%7r6uB0S1G#8yAAjw#Tp?#ERm~j+EQs%x-{4%sL3<@)zU#1A`VBx zH>o?k9OXC_3sCvd^eQGp2C0Qt9Kfq7f#JQAQLX9SxMm2>d~8*kF@A}#IAlx#OPZ%o z>-K%$!ePDTAxRNc*kbdp@DvNnWX!naVhGAtZwa^xMOu_Y_yTM# z4l=<`s^CT$kJ^j;-Fc{!nT9SNTYg?8=xwo4&!-F=Q$QPAEx3XK@{#sGirW6K*8`NNGO_eH5 z9o;qB#OiESt~R99Yq6nWYD&dA2B5-YEgV!&EWlUy$96eNT_Ngxy<)eoFRsR%66uDr z#?fBz&@e#CDb^70oP4M8Th5hgkeJFer!fRg^me@rwB2wcd4B>vh)&e;z1T=yS``1i zseIW->YjHbyKdr|Uma6N)|9}jp2XjqEzw#&^lG@?oZ#3{`?T|h({?seReMU6?NdIsXZcBM^Cc}j(&y03bZ-9tF zcWG1nl1H!bX}FBWPAe@N&YB3{!gto6?LEjR!*o6aX@KsA5V<$a-bp!#*}{9DHo4x-ysHpN@2|?|w*{3U4^M~;T92($~oxNk?Qn3BqK3N{;_UjSP zUWXh~&DKYW?5j5KC)VINUg7F!X9sFq7;^}-vB$5pyuesV*}*a{x9-9F z8i~Ig82F6p9$;Ou_D!^zCglxlIeXLBA+b9qeGW#oe{cb!pn+5OB%=|$)db${+x}FS z0UPY#3kk@4jHwnO@PQ}Kw@G8FJ26d2>VYTp1qu<3%^v71OW$|RuJml-87G8f5z0AP;2+6C8a^% z1gX{&c0Dx1a&AXtnorc!*m&;IBl?jlCnsuRRF$VhT1T9+e5L9`S9xMaua&%PDSr%9xi#2jjqN# zTbSyJ1$6gIoc#mL%4>=Y*9PU0UkVAl)A#R;thlsps3QWMe_2KEL>ZDH*vn3!Yar(2 zbqRX#P`~g{@6^5J;OX%6xqeq=^y)`W2g8ehV@W7!{EH=V&3h)UbGCl}GIwAzUs-95 zO)L6+sII`dv4$OjDty{Tiea70H%(La%PP0z`A*-z^fP~Je6YPlcdAr6fEl&X`R8K$vg^&0q2>4dY zLR280m)Zw7qpI-=m+&ns8!C!wK0fVry!QU5!{pJVj1Ag~SzEpF>EF+fKGbh}-GDFW z8eebJnHJvPzJL7K_H`Lr(a`SWZqHEv%!I8znK)6f>$PatVov4Exew9V(sr>A9$U3- zQ(hYv_H0|cWvjX>NTojGFHzan7wVqiy6nf*z|{FNgSXjG>3iq6HcU03V~rOg(e(Y0 z6Fov{pX8Syj%@4e=$jSemL6r}3=F1oH8lf|9`7R3!*Z2f?8VKAe%m!Yc4fWv@Q;EJ z;qmc96(}$F+AkI@jGY63PVK)dKIVFRdw@IFz}(E|+RGoT<>_r@z+FotZ3h{=lXQk*)ON!G#sF|G+% zxqY_s_Puiq*Hu;yI)kYU?COCzSuuN?o7FVHtYHUxa<^+S9bc55*kZA=d4yG0P1K&H z5Q6B_(ygNB9W>o!_u}RtCE(=ch;9q>nO0h>UldmNKQ#w#DdIc4TlbOYWeu) zju;rczG+-8?=44pm#m31tLNL*^#kB33)h;#5YmC(AO3e@s zaU@nY_3`L5yXSReNJ=?@Z{s&r2gwF&Q?bv}7!R;R%f{*+6f3#vV?uARIo+W%BDU}h z@xf}|Vd%|%U)lzw!_`G)pgeo87Q%{roEbPbb3W))ATCDsIiS1y3xYJepx`%DF$057 z(XleSr&5L}^QJ_|JZwRwlHikh;W;w1N?^RgN5j(dHEENj8+3%-rND5xF`Kj~hBTfM zEN4Wku}=h4FMaBb^|^(~xy)A4(WFYhOUDgd`NlNq>Lw>PLErMb;Vs$}dP*{`WYLus ziSsOuH*R(uZBg%4uG1XMz7_PxG~DM}zX`M8i(mM`r~`xipi5AE=Pz~Tq3-|v&UA0S zGdYE{`PqEsG;873#)0kH^HfUel%!qnh_PgCY^$5$a@MOGl81T#h^+VI~#1E}wF9ijc z0BJ0d+zt3?!07j3*tLwsCZ_s6rOk|7$JeLES6XZk?02i~LgMvKft{XgNjR)Jv9fYT z?{Kii1?+{XoH6~Yiwp+UAC@nqht_PmWam9JLm)2}=xNYtp1(!n8L*z68_mw-oiRr% zJpys#^beBgFMWn<@T7u>(6|~gy-mr)qE6$y`INv+En)(e=Ci`9gFLW_NjKTeDhAf*^`}hQ>Qn4aMS{s@u0l zVT5;X&ZO(pTx>)UJShlv7q})UD5^WWlDYH*H?~`M`T^6oEJJ{4g}s2M)RqeDBzwIku=?cv5y6f)y1oUT3Kr(@>rpnr6cE!?wWIX;1lR^I9*IbRs9>q&C6GAp4@p=_KkIkj6Xli`Jo z?_VQ_->xD~rktAw=gch_+rRDGF#T0l_mX*h{2MBUh>Xv9&AitA0S4m%TD_rXZ^h7{ zk#g|LytDn#T9+#Hvyjb2TANq=nvgAv4{vfaL#vDlJ*F?=kSdMv+}D64_lsGR|Flo(Yk)!^#DzOsWrZteD&4sEH| z=QMmS`SdZD23va*lFZV4&N5Py4tcfC5TOfu+)sgKv>z7p4oA^o0{5s*3)LNLqaLqO zyITy#V#e{ucxD*-oLc0)FRfQtd9q zh&n0{eI#`(FC;34?^Z<;3{AakRYlb2h(K3Wb}J34Eiv(~v{kT5?e1$Y=4;a1ewFqh z?jPeX9f@XJwzhE1w|X}(7Aozm$`yvtR5+B?(q1H|ol2cT)+z$aq2OmRI(O&TvG5%Q zTeAHJbvuSN*qG8x0$&WIGCSbJIb7CUJ18Ed(Fed?k=RCj1P*sQY96!Ng5|vLEj*9{ zANI2-rmmS%^bGcPVWjql`UKC&VM&A>pir`GEtk=uL;SMq@-!x)EKthBPaI1&*i$tK zzk18UnZbj4gVp-52=BWJE?lTrm2#lF?)Z0I=_|$AGda^@hmRMj(myY|`Z21%Z5a}P z)QXQj_`5BO#w{tlncHWGQ1L&pNiNnaZVzhSCNTJ+I^T!j`(CaT7qqA*_k`V2?71d% z6sAEa_-Z6{&$3Jrj!W8YOV49qQ`h>!3Z^;1f~k~PU7`He%Y*B0o)3rx*>Fx*Ou)kf9dk?8>b9<2 zvs>_tcvwoU1l-i1p3(9LEBq^dJggVQ{?#YPefBD2N8ep2?{f2*gy1=x!+w_tQeE6T zwTLz=Rjhg5Z$X(zr~)#<)d(1D@!0Bqt6NTTHe{hcN&tfyYeSSbdHsGd4P5KgfME2y z96I6+E4(zF+*=V2%6kY>8ZH}YdO31ue$1L*jO{K|@i>m`slY4r=`%HFL~`WUq-~V_ zV!0E>v8z?ckgCURW(CWt_2t{}9A7y*qTt54&6Apqy%~9rU6-n^s+<_v-<=IXV>oj~ zXODB2%SwZ3ON`R9FsM>md;LeG=scSN19Avr=V1Z$P>rkckzP#&b$GUCjg3{g+)%6v zr?Ohoi{$2~sY}U|DDINkbL_~4dh@`U)Nx!x=dde{xyjMnI)Q(3P_5BRT^R@18j)z^ ziAQ`$ZriM<{LzuL$*{G%WP3rKsTy@o?%r@cX&}GB9^1*kIXXjS;*3pbbwls7H(Iz9 z$zKPZwdjTYf*a*Vf1%B2;DwO+@t(Y_i5}#*t66F?4%z;I=V|tw*!m%LstL557S?>3 z0={2ciUJwUOV>C)EC-Hx;7{0LJ=rn1ygEoyy^KB^-(o~|8}?3GaREFE@zo#B(Kn5} zkY9_~cOj-wW|PMba*mRPmPDD*P#E(&$9DMN?zliuWQXxwu0Berm6t-G#N$WUzK=zJ$3V4bQW)ZNRH^ zSK!R_c99OHsZ?nVZfoXH7>q=+x%S!=_>jwZC^1mu?AFcZCJLF3t&&FUd|hk$B$;&) zmsLP2=bq4*&tCSJp8B5wZlK)2e*~WUALK14yU0)oB_)a!ii_W$!)yNO&({~gO+$0o zb8=$$+}j&!g=$w9V!H#_AnX4gQ$5ohRBfhb$h$G{dH{jyCSwO@8;L_b(nf_0hM)ng z*Enm}V58!h%-;AEn}lyIJ0ZnhA9cKaqA>a0%pDlIs)<_xt^t^9T0^r4;ATb>%Vv+Y zi~@d250#-OJ6+uSMnv^pjF&<+1S~`d%0Q7@Hs2eE{I561nfT#^x({(4N2(k@Qoj&n zdXv+fJN{Jui`9o+GcZyAu}VE4v`WQ4t3-d*C)btbvcP#u&iUHe3N6&Ld?6q(*HY&* zHribr;?1D0jG>aO>`JGq64EqTiOrgWQfjNFuKCRdHo7XV+De7n)5z2{ko`ARyXb+O z>0fp2cSuFrym&76Rs>sv%O!nqbk7L$aC@Ri8OybWSAXByD07ex&UM4m_8ST}DwcZ% zM!B4n$eUv7$;HME?hf%7-JfT??<==NJ;UG$#P&bSk?+$9*=4|iD#&Y>m!JxA-=n?D z4MyG!XH9DxOSfSErD7Au=|;T71n65(~3-TRg~f> zul~wmrVC74uh+yOjx4tyz3up?Ylk30hL)^?@z&Jr3YRM&m3ZGA^~Q!IE=!!Y2&rF~ zbUL60sWLF^6IVOFv?94XT0=K{AI@3Ro~hTO9#6BYEh1^rK9a<$G2rgm;M7A)p{5np z#2*1%FMfI(rosPmoDx{=YuXIGa9*tx9`W2}BjIIA2|&LeBy}%ZoU4qYTj`n~p-rPT zZf>n6jG6W(3=DRRQueg_Py8Pe6p@;qv8xWq_s8wcl*i!n-|qHg;Y0T$o#cZKXuE^e zW(wxb8>Ziw4i^rc$;E7k2t0s$Qza*iLH-LTnMmy*N-FO+nel~d;!R0F z<0rlam=sD}4N#5lIUnb){Z?6N;j%9)6fUaQ(`QazR{08h1vPznz9)6O5r+(jSa6=5 zk~nHl6zZt%Jhd6~KUqaS-9(*;mV$??&Bwdmh4rB6&j`m~#*Y#IMTxR%jtw5Y&6wic!t(^L$AoKdlB@)_%@^zNR;-wzFGOhro1fJSjYg-N!<0b>PU4_ zH8vP_Iwsaf8`y=(%MmE(J}F~i*nImAgS(Em)wIHOH)et@3_NN|QBU4f%r9QhvsfJ) z%85N$$`_IOh9D!L5;L0UE`WCdwLh8EsGNWyNTlND?eF(jEPs9imXxm@#;;_e`ohKu zZfBi|7Ef4HHTEx8-#0NAufzfF3BwoN3CSDPQ7xG6)c-+cB73b94i*q@CU64x=OacB z!T;esr1Noycx!V<+1&$n_U2U|)?@SS#;WBb^<5l=|WzP9S#DW6kvIDasZqluDW!uagL+S6x_#zh!YB zL)DaAbX!b5e#y9~*6Ec=xpw$~EB#=Gv%sGe6wh6|po7shit!CLJUf1(K|*_fyxl7S zO0$yG7VJeA#&tWf>t@UhFrP|#rioN;bIiw~>G%qFO-*lo zBOA3(Kyi;mBAai!k@Hc1Z3Wb2=Dnca#q|3d!{F>c9cI!h8S0Mj{_v3zip!!5G^_S5 z+@I=@^*2(b@$bvnX1Gm;lJuY8F^x1YqX#BLlxQ5B1U#_ zS)1+w2ds&KDdICnvm{}OFoye!_2G$gLUvm&q~c@2^!yy}3}wIrefJLd>_4<7OtTC> zE*Bo>3VwxEn>O#J1X?gH`SoWeU4s2&x!4YQ4vSU$J3V~j+xNCNk;CNQDgT|*OWB#w z_Iu8ye-pB{mRMMVSx+{0_pUakP3PCtx@+oQANzDNG^O~&FtXZ?k_IQumLz&osg|ZZ zb6)7pE-iFBf(bO)uv0UPc}EDM83l|zmVD_ zRmSwFAs7Pv!5j8KCjWcR_h3D7JxQ1%_*kvINJ8}fGjjN8S0T-o$)OetUcS3}HEO^B zZ8RRgwZ4GEoBLWDG&~Z=kvWgsBJ?yph7^mtBg4hQ_}{)|&bE>=AFp6>LSJhA#RFyk z3F?)51;;rPa0`np#E74K@kxQCk)P-P2k^avNK3+0rTt%ld-wq;`>tMOcewBqBO$VL zQe)w~>N64x&8mb<&sn=qr}JKxPrDba+v)rZ7c!@*B^nFR-$szuW;-YmE}b>LN#0Bv ze1Z=IcHaM=Jas7hX9+%pWF=_P0fCXmLG%yG&R~GI;W4{<(&u^ShYzni|D*^-h)4a4 zH-5I0XaAp#>8f$vlirJ&r1oP!wJPELR|``L6CW_)o$)(f=$QAlFWvh^zbHAGhBY0B zxrD5J-vX1^9U|P<7s9-!`^rJ@-~o3Ba{MLf@N(tzy-R`EOvSRGmP)KLh$5#Z9@Y&LRUilJ9y_?YQBrO;_8*Psd*{HqhW&-hl@NanyoDpI5Ye4oWtX$Yg{m9b zIPIl5{LQBCudx>sdT!>#=!Xn5|6o|Tw1U5)FQ4d>>i!O|%hcx49`y3D6s9P9CHxM3 zkEG;UCGo#{1GB`miiQLT_#x~CUk&7XFg?8Kh{3z{Zle$TF#f9dKk|&nU*-LG3upmi ze^OsxO6%4T??5k7o9i}os}-*sW;Ele*x&M6z96qw%fFgOqX2)z2D5txWlpgFbp=Gb z$W9UYua+dl4y_H0&cV4hb4tG_=`VqAy;RVG&!yB-=S6k_|)$FM@Q-%lCe;fO!uj!Tx+0G-i z_ot{22a2^ezbzqsPEAOj6j9|-DY%dN15>%AyN5By>(}qSrqWy?#csT%GiB@~I+<_k7 zpP7I|RXswyBbI?>YUzB=$6&7Zb9gb$d!EZ~@4+^D^@K$}4j%pcOITJ#n}04w6*GKK z9f+`R`77}>?k%7`ydft2;I8cI70NqQ{+sruGcYdyh_m*wr4qBz1ZvRl8+x-##rC>h zn;(_gOTOv}(~aIS`28y&Z>$zUR~cnLq{c`mp|^&<@35Cbf!EHz=NlufkrZHb{wLjZ zY<>vxAwqsJtd&r{Hb?%A%l=D$;jscwbhj#}s04LCRmYdYGTK5R^?@0{KSA6gYuh*@r_E+$930nHCT(Hq9RMpzG{;y z&)u~bYQeJ{G7x`n0vW-4hCT#_C={cohy&}JM)hr1cc=!nUus)@vAb`o(9BzVdw7=Y z2aSqu>fFHU|@z#=nz3om;(lH-^lCDE@0td7kpvgAmd06p9Pre{@FiwXPfyN( zk-UmRNVECVegBfx8TjA*h|_-wwBHq2NLmzC0!)o!sHo*H)%IXbFlzYyQ4Z^k?v1HL;=L%@B<(Cg4|GE9 zme*Inl3jdzv-{h-^d`85#8)b_W-Z-J5UYj#;kwXkX(QE)Hiyd4{b;bi0I7z-C+K)2~^ekpF2lGyh zdgiXn4pc6ZYF$P|N?p9(s;)U3W3BFSZLKQ|62&PzuE`~YpKR5gpOD;zPRUZ4rnM5@7-@V z6ShBDKpYI2xF1bqp|WJYXKj|dUTNN&!Z(=Qx5XV6MsDWPl!Z6mrR{?^6l3t7BX=An z3f&%)rEYt%UhI%Z1PJDduaW^#4y7`D(#`OCh;yId8dp%g_bR$`XhH*16tlaBGGD{burqW_YtY`nAdteP9NFY#;H9sI(g|7i5aygg1(Mz zx%Hn|SgLVIV+ZdSF#R51i9N2rS%g(cxM)DbvFoE68XkOM1rd{wnUB=(y$~sHr%V?Q z5M#Wc?ApS1xY{}t=VtirIK~~mbHC{1S#gOwP@y_e(DfzsaMiP^55f-}x#iifDosdi z;_wO%*WizWuL{_rL}rr`fZvp)&G);Tt_jRj#JE0E43_*1 zp@>n^UVj<+VOWrm6e2IODSW+VZf?l=ewLx6bk}TSU!#QDy-E8QLvXmMvQTVtBm<*; zmNsv8MCP^G%+e%qJQs~BC;%Y}$2~g6_KSa?8O{E(AWfe=gFLp=K9F76D&8vI)!%9# zH791TchEys#+*Bc$oV@%HCnRisfp7sx3gyL1yFl8n?aOmtm)LbkKIFQoLh%ikw+4_ z_-V12iB@)@r?8n&m*?`B{Y5%n$JyA?{R+p~4%MA`wq#BgH)hVeQ4mG%UUJnRBcaBx z(ln^L#+m2&rEJm|Eg828@_|er5J8gTAk*NOBIY5YBP2oU70z({!izHq+%8CeFKn)(*O2IsRZyu+PS!1>tMd&(G)E%FVkyJZ`CjJEjdf~D8=ZnH z-G8?3d~feA?wVxnYZK2!--Ny?Zi$O{SrfZL`?WswQ8JPH8YZ_jIDBF-_cBThWhNJo zBu~gO*glID%;Cy0D4T3Tjim%+-m}|>#}Y#(2JUXm`=$L%e@DA{ut-6U~oagl`X`-BcN@sL!S-(-3mWzQ@NZ>9z;-mC5fpNsaQqxGtCoVm4c< zsNhn?H@9}>?ov#HzHq%ivnTgnLVHxq8>%~}!t}{`kRI2$gDhQme#YN2P+sqAp~g&C zwEZHLNp1mq}D!cH=a@`kX!w901J9Mi63|#w6^*qsjoc_P`K%@z3$@d^I0}9gQPKw$_^~l zxZTwU>L(asl_^L;Uph+_Br#Mn4$e`kN^zzNtnD{!amUMvLE{fiptJGJBFKc_U2hf0 z;BBBBJnq=;fva)ujT)!<_!-E-J=sCrCM-1pu-$uZah{HA9;YBF7RLa`6|~1Fx5hbF zaFB<=zttc@CBrQwAv?4yVQ7Tjy8@@+5Qh|0 zT_3HjlwV&^g(saFwplv?-kf75axX&qpxpDuv?RU-e$Ez8Ei*<~p4n=as3$TVaNwlD zwrj1lEpSM#Dksm(lC1!u{5tWqtIAC{m8*%%8Gn~vyxMFhG5z|g8-EXV4Zf(CB9gK; zQxCBWnf3A6oBM9;X~i(`dMTE0{ z=FR&)D9=&vl*(c?q*!NKVAD3|)|y&uODM#khmI(8_OS3 znAt01cq7PPp(|d&&&>6BCv=4r08O~0dDCGJG!wvthLBL{hCA=j-S`U<)PD{{!be=RxMmdS76I62=YdFA-P@Q9mgl`#GSr97Un z(9o{b&Aj;jThD_jeN$$Q=KBMf1J4~=HHQ#e4QQcdGd%-L6M>LrwB2D26(JE=#6&JR zS@o^my|tH*Xmr_(km^NfKvml(?#peR4p*t2qseec@2w`fYZ*E;{hMDWlLho2idst@ zKRg}$Z}5oj!R-5u=s>mJ^86j7ZHc$=yKb(0Iq6XIpDFDkQc^6IEJ?pJ^lmlb zpK^yjH~-(z{ma6?plSmM37T<=@^?8ebFgBZmgp|VJvX7SXO%pD2nM42iDBcVPjR^# zXeX7ou~0ilm{lbY?vP$|sOii*6>maoQXF@^?d~`~#Z6y!95M4ODi=@^XWUpgb$`Kr zcN{my%yy4;1vW7SJ|i3(2RT;MKUjI5O#tV+pp6bQX%eOlmPp64_?)#!=a_s624B!O zH_hhb(K14ca^$6Q$!q!+zHBj!Q&q>Ter=m5P#h=LKJdD_SyShPbiCQi#OG!c zTG+=vYhBVF5w~BQ$~AW)2en%)Gu~+5L0g)6YDuBY@xyMMYIYD@4UXYPBo#%8P2WnM zLR`cLiSr*FCP1^g+0ob>$j!ud<7|_lpQv9}iLHD15 zBC#rHFEt_DT*YFbU7(%sHw=2?+78w4drG%mj=h>1^-)bETYE^#xAU<)SD*yPAvSHl* z+E@uv4|e6oYE)@KfBA@Y@4LxqU(YB8}Iw{@D(H>JffK#UhiA(Nq=J8Y$ekI)TbKx7J?SXKjF~ z65j5@9oT1{XGeWwAFFI~?#mlwa!_-!-i|TX0oGkJ~4a!_ylEm-}FHS3uxBx#>aVHUEgN1R-PJU zQ+<{-!`xExg6#0m3!j1G(x!Hi+RiQk7sE|8TibofiO4spC##GrP((VJlYLrQ)?F+{ zD1mE*Spoukeu;4%GH?A{6MpbAzpu9IY+Wa=NtH=DI82#>;j<=h?V2vP%$2thK;DA| zMO}@e%-H`Q; zfJH$~CytRzE<&g$A-_8gv=p7n;=6@gHUW zU0B_^Mb!_em?Z4yWRz>)km4p@dix}7;jKkCe$o!3^PjitlZ`KFXb2X-`2#CoZH?@I zfoubs>zxB5Y`aOu{GCF&o3L05>&`ungzuUq4ViVg%?=5ZWCq(Lb7*ZH#!wKP>5C*NuLUmTIqQGK{lPe1J5EGx@_AL(jm3tf z4MK{V8x#$_;@sRd;L=yt&e>Te5NdSjHan3KRpD#VuJlBM;EL$5@(W zziHlPtJGuDoddHn_s4c zRIDGI6T-k6MQfbO=C;7}>ltfOlM~A%$SMGC(C<~QycDy%NVlMOKvhw_6N17ZAl77O zaz0VE^Bdhq4o6*>{A^t3L0Me;>^$+CFCVQqo$iByG&*GEb6*haT8Eny&8wO#?|sr# zV{_jd((iKYD^>B7^MOms3&t30OcZ3`KjIH6){&F{LYkuahq&VBFtQM51{!iS%|$zm za_wck0g7*7U<$*PxUA2m*h_S2l8bGllJ>16nogIulhc1zD&E)cJ$9U){fFoxIB6&_ zX;N&ZslUM!k*RSpb00NbQS}^YV>`oV)@$bu~Bgrs`l2*Xb60n?UzTh6R#AvuRL#3mlm*j9kTUB47f|S$u5Z(Ml zx>A9;gU@EV?8S;po2dz%8hdy7{G3(vmg<#yQ#K2{_g)KoS8_|Ug=QlMN{(e>KOAeh zje5{Lo16ktF+7{^`|1>uP7peBLnf!4Sc*~`2QE;oV@;RBeC!suzm9csoK4)nOGwB4 zsK4#KSLP%-k>x<1*^*hyL&)4zp_#O0F-9)W@E-(|lmqPh?Wd7_QBiF%b8@kl8% zbnHw$1xu(v{r;NF(I(Lk8MpB4`(5<-Y!N>Y&1A7)|8$BP1n01CP|9&pr^pYBtRQCR z{v#G=xLP79*{CkeF!g7)r*$@>=v2Vx{Q4?s*dNiG6y`T*2W+xC>YR2!GJDW@j9`KK zl6o|c%TKu*(tP>C^oGWz-6Pk`E-6)Y;(TRs|7t+vSI$$~(@r4eYV6Dj38Gn(`spTE zA$^WqT@Zd@a%i}^!yL*Ykkc&I%n_?NHK=Zu&EN5HP%l9WD#ah3M3|e2=urcQ(;oQd z^%d>xsy43ecjpsJHTpx8&myYS?0-q*6hv3Bil0vlEF|&>?2reV={xpez5m>m8l&dC zZZRO_km0vDsph(;WDX_=!)z<*c1q#WbC4N!%OK)Uiyx=9U0*lWsYS~=8MV*80T=L@ zrYP1M)>Wfxa0$fXFO}#EaY7^|r;b`{D6*9)ch*r4X6hAhq?E*k1{{fDmAm(uz7W2? zke~YLVW~o=jBj;gB~DcX$LO^E3m6k=Ek1Vi`GwbFMd^9j8V4Zwi~{taD5JDGB%HC?yLKWnyD+z1LQogr=3@Sl+;aD z& z>0uaG3h`*?ZS?`q4Ms~!{cAdCE}J4Q zPg&rZBTT1rk~f@UqEqD#7d1Il@bb2|Wian)o&=R)GUkX<51Mc;yuhqK1hD8F^jOIr zCSsq;KhAxj=iDqQY^DX0Us(lN8-cKo^RC_n0G zU`z}WJ11qg7`{d`F-aa@QJ&3$fDX%9b4wo|rBfKJ1Zb7imeJGP3Nw_-=E73x5`d}4 z!GkezNL*yHApG+ES>)Kpi8JxzwQoWNJ3sy~htOoc^)mz(D)pSX+-kmgO#BsLMqnO` z_{z_ZlBuPjw77ACI!hzr)kdN6lf6VkVeCyG6v=zqqM2yM)D%?0dQziLRHbXc5 z%RKm_we+{ee^_IFIsLm8X0;jJ1FF|`zdaML>4kT6>Dx-=1XP^3g3%s}whY}~dY4qp zvHx(wO83Xd`n6`wlL^?*YwC4;Oop-H;gxD**`TTcW}QXbT^x?Ko_rA$_U}E?=6gyP zF=H~104m-mxw z8TqPN%I4mY5Gmi=9x z9r_OBPvO2{cF;{8y#sc8to8ql!8hvhjJ8}B4FllSrZNB4fups-O$gGb&2W+OjMxSo zF8Ap_e!ms0{=s?E(``)7hef3lLL;u8YRpQy*&nnvi*BBgnm;u6{1-oD!M8By?X8a4(8<( znG)jASFb+368Xj_4@@~&c5;(}X{_7f{@ZU$GEdzgEWU+QO%m4?|IjtD*ic+zNvbT@kHWZJzSDj1fkNGW? zCaDK-D|O}s{qgbdv+4nW-#4^zjTtQ8!usRKlwM=8H~cXrn?+Mw?ApI(O|&^J^OrTg zq5l78nx&7)26-N9%@^B6#VIR@8^biAf8H{1F>Sf#N&6UgD3gpZTWg3Hc)I_En!~8L z9$}kxG=MQv4t5E@Bo<<1d!_#cY{e@Ypkm?nC443I)W#+&w~EX$dtVdduO-N=pkf(> zse9!^Ca!nYMRdbXiPp39GbQZk=GHX^^Avd{jCFO{;**XX;rb|4VeHwf`-9vz3nQT;i&uup42pNg> z=Ugv{<~s;0YWUdzvP%Au)A>>nGDCT5EORgKdLnYT+~gPZZVIol6YE@rWACzLd<;AG z+@&nHtC_kKdR9Dxt|Ct?yW9Y}{5;w;Bua&x+b>VmX`TlI?Qq&V?d>LOLxh}Oubk)% zy2`Eg4L`33SG*Y^_80_%uCh7iatFOZTuo5x;X z92^9gibAH2hTSgh7z{4kUX#;sW3!rZ5#KxJh19_w(OfAPiHa=M2Gn_s2s+?*$COe3 zvbs)gt|lodb(>?<@26C}SQ>q z)SHT|cv)jQo1YbF@B^4FkvUs$!p-HF9SL~YAehp1o(`GdUwJ^vsb5h5+#41(BJB%= z?GhkdT^)FJu*z`geO^!*PER}E6IS#dYdH*I0K#b&hb5Vf!Yib=BbptAzf9-bw%}{C zlTY8_jJBK;8YSK;tgLAH!I2a2g(BkmGStM~lC zvpCUL^9IJ#=S?bw2%A{0dF-FgU_GGWEX_bcuw}s8A}avCL6Dpe|CHscq6LXyL)=e! z8Cmy|Q7r3gYyUH>j~k;lt;Lp@iLqllADX`A`bTuJuTg1wutq#x7RXF6ly_GK)~fdG#)v3;FeY@Y zH1!QD(c2$LNcU2H+>p(0c@p}|^NstM@vQD|%b0Vu1~7s>JJ-mLHX5d(M7SJMh<{`S z1`p?~)f#mdk$K}6e|fZy_AyI|V!m_AOV&VvMLnwr1~Nz7RQV6V?}oRXzRF#&l@w0R zSa<5g!v4UgigOcz7v#As!qStlKe;Q2ENrwys5$J4%sSAn-4%H(2NLYQy`}ZTpS!aV}CXZY(xHp`ptH=W}astCnjTWFE{E z5IAAOS4UR04S86C8YnoGn^=7OY%ka6Z51pYYX;*gey}N?z3s?yDF-a}C4A62%Vdch zvnH;26I|of7co=GSR~?6gFd@dtQDq8Fzmf!O@PnrGtzWDZt<12I0!eWq~00w^w;vw z{zN}kQ9Ri}9cX6Pdw*7bX@0^CH)(>V2Rj$zu*bw6Z$W96UkcMb4;^o2U_e34?Lv#o zd#9!8W&p3kom;tjBuVb2nj%!#|MeI};IvUF43KD&J?nxpH42f+CrgnXsJ7Y-u=PAT(q$=3~6ad5bFwTfc_>uI_sI}fhcXxO9Vfu| zYGWUSkPg0$S7_jkL zHjr<#J8&|8O`oSl;>x?&SK$-zrXY5k58NM=ECX( z{2I3IC7f4!fjvi97R^K>KQjw1Vb$xs%-q}=O&Mx(98?K8r$NE*+vkxC)xJtRaSTvSCiLvUN?Vr))Zw+2Fu!}F%bDvqstLUG0B z5@ZmN_k6^h;mA*@k<`OABmsBFLI~~RTWVzK;G!N?63u* zrV|csP)0zZ{^{*Ahz-Vm@|k*g@RX)$vNln#;~=Dxo#$Z+q1^s(Ssu(~+)25thL}$07PFH|Z+r7)y+*!lZNe!WDJxD*_A>`_*5P zhhH?CA+^2V_dYd@7gUd@TB&*{g6v4FdVS@hJfok#+B3GHnjAZpeEj8n>QAy{z&6-n zN231dYzD)1oX|r&h*`0-;yjeh0gCKcF3(LPt&y)G!cW~%EK~cj?!nsj4CbwHI}+a> zN$U?SWk28oE$`r;vU&~SmgFkotyrE?C(*&sTXl1}=pPt8-wq_FE2)7XN!R| zZx0dl2J(0S7Zl`Tv3pmBljqW`^?b%lH(uoqrTt3aTi)G~7U=g!lYBaZQbWp?u|drQ zj~P%865tL5v95oAtl{!dwbAJkc<#v5wpzkFY}f6HP3E`Pf1B(nk}D4_&`$kSc}DYb zwz(_7FTmSOzulMiT)gbNVjB)$0DAd;*NMv75ZrD^TOJhX>~rNv`j_>=k`!`z`YX-$ zJuve69B$DqX^zeS-I(1|NHIeATG&gTdqmnyRJ7%xWPNcI8WDoaoXTB6oLYn~XM;cD zJ81MV;Q=b$f=4W48bylMNSt&!*M32*#gfGIR%E8lmVnHcGYg|cTNQWnwkUgg(je?RX0?YNDcZ49jN*klMt`46e&9bEz7Q(U16a z+EN-gkCiKOk!emjX0%*$PX32pPg zfraR9mby2dk6+)#;TzreM6hY;c1^a?KB^xUG;l9Ar82B3xw^lpTU_dKfn=Lm{GfO&jXs$XacgEsM$L{b zudzX%6T_>456@otC>;Jp!{TlRB)Mo}wKeWttr>AcB@kDf zzHxndJSY_ZxO`0?Jv>bVo5O%6B>m9uZb0=jyj2eurCtL`-OBGRX4ZluZ~G84t6U?u z#_!^M&tvvPWpisdpVT{Q_B3D_lJmsi&GvD?4g2PP?P6DVRXQlVZJFHi?T=9->tVi` zhhxkXlR5EjA-nQZoqtXmOQ`bJg^tVFhv4zQj*eL7=h{mit_&&hl4-fIR;=@+bdS<# zXP3c_2*DdTL)csGP_+n$vPGdo-JP|kC&kZ7o5Ec02I>-#yhKelo4B4$@M>_*O&g9% z5mKrW8af|OFKs)!NBBjqRFKT?14_pI<2{JXSZIlT2|fJDIL)^r%#frP*sOX{xK8g{ zV#^+-W_nGJ8EZ1VE-o5_$N(gWZxk!IfaDrZh8ZSJ#lR19y_jYPE-VKe3cTJq(Lf

S?6A_Rdd$+&9u<6Ft+-S9(0gB6&3Q&38ZOjZEM9y4=zqVLsw17s=o5~B_uk>V7MRQxnWa~iB$C( ze<$b?FKnji5}TJ=`kE5H>bn%JfP~bRdM;FpqCcal7w$c=*gnRA%TOZDgbY)t0mPA= zhG|M8;#Ot!QV9OM&~#@Yh4(q?6awCmN++3ePoGDGoVL++oG&UgKiR!5>|trvm<6b| z!oCjWCOtb4yZ*Sd@lCCU>D}t|KtTglZ}$^*7ljvfaY#kDn>esSM?m`8>cxFw(j}J6u{UL@ljmFM z!@e;pTSeBXIRKwQt4$08--ba}ZX>FO9w@DjY5Ae2f)S8}-T35nC=9#fjt`gUD{6q(KWvbvk*znqB)om{=@Y6-{Lhp}fE`h{# zK5%)%kmeO#P7!!JkEB?k7zBM(NjrRNPb!^4QHd*^O=QAG)7Ar;@-~)KgQ1 zKe4KLtG@xrIGf&Xlxy=pjFhuNgjSk=<{+l-)SXbI!PQvn55lw#E55_x_I0L8`*nE8 zdUIB+BG*>5MRo&J_!u6{NhFq5n2wNSOq#kEeOEsgjRc1;M5DVkp`*NURlX5&+{dDz z2U+vA^XTZlnIKMMo)#0sHQj>;gucM2k<2ychm&d8Z(4ME)>mD#z5GYr(i2t)wJG5N ztz%49#wG#)yHpH|c`c4}Vm@1X0D1p;nl@atmgDId=!zxQ2G$7FhIEA+#~mC!^0Z`VeK;pY|Ch?LbIz|AKSyoh_ymk`bUPO6t= zvGpK=hlpB}Ei!ZY`4fW{82&Yy6`|X~Pj2(kI z7IQN?Mz5u{nW+*Z4WcjphWV>oE-GIU219)tRnwVhMtAd-Y^>H>0!<(eny3(0pB5&2 z)oD)M{Kl?-p6YkawM&2}nk#D~LdsAm5t8~Grah&~COQC8|ilCZz|r;&pBxJ7n=~zr2${X zEZDZ`m1L9GeT=0PEp2$7rNI9mfLG*;xkr$Fo?zcdud|p7z;H*y=y(cGeXcQ zgiT9PX(d}oVb%=6RJ1oghn8swH)*|mZO3f%#Sa>I?kds(YaMCqubzxl^M>Db-XnfBOZo>Y14TNn-H`@Am(4FrP*j| z6J9uZfOo_k-QQvP#mXZ@%A??3T)bIy>}DnYP9yKkxL<6%iVHCPm|OB1?O^Evi^cWL zqgl*6mR=!PdXLe_RP^^obK2nVbgJ_>uaX2Gt8ObKSC0kMtu=OonyLHmZ?EF-s#a}O z<{X@(Zc&BHZ!dU)<-an^rKq(z%NJ6Z*z%gHm8w;byFO07sqs6Ql9%MnmcicRm$dyT z%--vs#j&yfs{iWlXdI_$+i-r|le$ffKApyhcjH(sdaU-k&bu(P(6p$moAvHG^G6or z5pvmf%MaYgj(>q^XgCGB`fJ1WX6(@2V<}-wXgd>hBqTWKD@XF51$e6GjRdA9uWt?C zSvv@3pb3OH7i42>%55*aw<0rI3b^Pnreo0e;)ET>KPB%c9_>MGaugsm9Bx9+B8Qtw zU~@WQTv-J10~Wyaxk;0AkK;vnXYW7X9MOy4EQbt9fcs$yk3Lnb!M!mfx_^Eo;x*84 zX^(&QGvNBDujX9VcOT4hAj#VF8HsdLvx9_dk9=hDQ>Rdhr<%QdATBFHSG{_esZjBou zn2O|m*VC#_QCjTQQM*!FoGBt(J`4^D9vy$=qdDYOlo@2lcL)duBkJjYeQRQ}%4_@O zDTnN3S!Y;j@ij*A9J=w2AQ5dDfsg(EC25nYlo6ojP!3RDL2?@m9m8tJbn~^>>nxcL zS+riKW6xhlcZ}vP!-;kK^Y4{y|(8VthM4@7ng(%R`cBE=75bT ziYsAu)?h_1LXQnFOJm+N7#=27It;OD|N7vP_pze0&rip9H);umU27Z+m526{mRMSG+c#^-rzJpAeX&58DVo?m6B4LPLBfHSgb`;PAJGRe5zZHnFH zcB}7>5ReSF^!J))eYJBJ1Ar*m3T@_6DAV$Yg82*1H-OI_5ZG zF-?v*2#yJOiP_6P`*=n7G03#h51?~f&QMu7KodsNvMrvhTXS2nRNCVo2F7F|T?xKz zs5vhTRw&Whuj#R9wrt=L6#%igXSbB9E!aP1saB{?Q!%!9Z#)JMSFW?CbVo?^ZgjN) z&qERnB_pVS7ucPCoM`J;-)v`k$P9|M-hU%g0e)f%^@zd^Dr;`dt<}$sR>bAkW_5)N z&(qk_5%H>^YH^*5x!qv-jI&~62odE&R6?3a!ZEe(n!gmt<% z-xe!iKBt!r@eDU?6d(&8FJ}NyIHLeR{@{&zO zM-LLxOwR0SMpsy@Cos`5)(H6E)0+)p4QjC2+RNq;%^ozjqjq3st)MM;qGIUJ$p^G0GgTObn+gfE z+##QI(y+@d3K*4EajBk7lyKoJg))Ct5Fub^H_*3QXdmGjwe`HA|Hu=Rp+0RjQVmd4 z!x}s^RyV#qYNY_@m82?7Gl&kzr?|VF7!N1jEZQ&IE<0npH)N%=*6bD}4NijgF_NoK z@A6o#?4C}{m!GYggIc0CTKWy=zprkxhe~JO>U$DdYBa7YK4ZQZUs7i)hcU26Q(ViI zP|jVuT8{Mj)}hiO-X>r0;Moy2%ab>m?0NOq2zQMH#a;k@Af%!aknMtOSMDLBI z6P9Pf9afvuN;fTiVyr6O$;D+RmkVJYyh8bQWRi)_W~y9bBualnCM6og5;(7wm{#-2 zSGh&McP8+owK>B#G{IJhnTuqablWX5%20D944x?nJ5quPZV{nLDxPXZ36& zeyB&{V23lU{s1VE$j{As_`vQBF{Iv#N_vL`A;0-Cq^Gxms(WEuaq<*v?+0)HLt0_9Eq~_Y#RA|QO8(`|a zLo`tQ{@#dEW9J)(tJIb;?x5-&zZmD@haV+56x$Aav}!%^wQrMyIv=tQc(@aD>_BIc z4zOfrVfK4=nBGF<aR7ZASQ^}{^CHO+e^ORX>I^exAI{DE{ zHnFxOwDJHUIy0v%y<#t9FWkjKxhFllH)-2=Z@}sL5x&4-&%4gYVjuA(@I=R3ZjG9;f=1h~f;giZ-i`6CO-4nZ#R}P`13cv5`pHTLFRdE>$_p3JtnaMKiCS zD5%pEMx=}+@@cqFWXl1qmXi)40B}RF5;Dv+ZO*S&;z#~G`VupOw&L+8jeYP+& zW8VFAT-Fs@Ff|qa&h#LB6B5tE)o4fjW5LxB%oCUwNz>(`_VUeX1-oCkY@mr7pb^n@ z!eg_9H8_FU=#3sGf>9}|JchwXCpvuLpZs!^3Mq?~0j$A>3{FemFn+kK<|k1Mi0DHa z`Wn+aik%NM>yYC8Cli}*-XA$sbjm7-G*E;wIxECKCmHf|ZcBM~5W69WrKR}j(tI%h z$K!ED3Hlcj(JmYJiIsc-kYI|%+Z}`zyhWEhc{^-pN)J0z)@`t+PRe!i zg)vou5`Hphr5;pSzt0DtYP0XfC8zTB_bImxv z2<>W0PCNA3umzrfmZMG8NR&P~p=wz*W-JEo>WA#&m%!bB)m#^c)p?}wsEb+QsxklT#lA|4H z&z|U0J@L@UC0~oXADCd+b9I5A?g0H3r*A)PL%Uf2r3E1Bk{~%Z<jW{GP2>ia~OR|B{Q75v3b7NM;+TeJ5-)y_hpNq zCX7|3Kwjio8;O1nX=oo4FeZVQHoc^BdI&4o@v9LTEg0ED0aQVcva_Wi!&zYdN0 z|IT6yX=#C%1D}EuW@D6dQ1^dgu}W&YcI@8+|+Qozr2XEVr*%p$%#5Xd&skydJ`-r z)iaDU+Sj_gyME~16v91IDEqOlWUVCKPGn=ENVz{mOrvXf7YBbW*bLTz|t z?djICWL;4u9qkT+T5Q!Zv(Fedx>ChI_gY8$Y7AtP3%G8d9YzXiz>_ zIN|ouQ+1Tr(O?QcOKGT1zKqn4KOO?srF>QM#X^1fCGR!k4SA*tSCF93B~er}CKSep zh+9-p{(jUm!j@~E_1njrSamY^u&S~G8^&M;Ln#>z(Nhj^g15e|9-u!E6@wntTD8R* zu_Jz-E^$8FfD*N~4j%>cL1?Y__f!XmJVAM$ixKq>$5mM#a#khejrDBuTs~O1EN>m2 zNn4j(UdPM_r&e(e`1>?M%iq4|(TwxUT9@pL&f8;MlBiK9_;;pFBIv)Fwy?{_BcW<( zxgsCkuj6+pH7N%NA45BR-k)-IuB0d~T`Yely92ld=kWvZ<}1Ces?gsEjcTt1=UKbn zBers>)xpi?wc)*o)9RSifg@|Z_W@Aktnwt>iuI0zM}tZ#w(@cAm&>d?T@(*DIz7`e z#7}=(&8ZvGx+Y9aTb;{kQuXv)c5w;4F`_jZKjHGY*@McYO`vCUUEkLuy4IaFF*5?F z9>Ak=}(+po&Yga0LK;Zi&@FLo?DrhIB~=6K%ZhtSz-NIc*;a8ANq3)080#*_LUW5~5Tb zhqk5YBP-a?d=;EDAotIz4b^=I{1W41p?L3@MEWjo_i^R7)ZTwKJiQj{ZxR*UINEy zIOoisZU~v_u6Q;5po;B{#PSS3H*mmDjU6L*034djIVbPJ{}2Ao#;M?|OLueaO@)D^ zv4tkiLSAZ5VaE!Ja8m%`bn%qDf{a~7B2!m_guBb(m5f6=*4oqph!zNL#)x05xbkGMx_ zwHTGpV8S!GnH*TRTPfupV!nkz(~IN32rG_ByM^-$Kb)Gae?#M2=UUply;QTpt%6<6Ef>Z~N z>0IFDmvY~@Y(hy{>oBIv;M>};^hI{XunUcw^oL$xStI)|)xOfU=eSW+T-(`?dK|-g zri-JAf0Vyf)gKwmYodP@Gr?6&d=DM%-EB+Pl{Nmv>+XT!UN?vl-Rc^0NmjV~vDR;^ zbD(d)^kT{a8qMr=6k&;hkz$Mj(4re1-p+kSbgyP|TsduEP5_U}*=JRTdk$owFCIwi zEQ9+!zXE_?Lj7Ltc2UVFznET+k}|i_hO9tQ9sw))APG^3IDdvTp0rSYo21-I><#Rd z|H;k(th2rvY4P`(ol(4mtH60^ia@SHUez68FpU?J>$^zx-J7r_Un$ko0n#A^L_H8SPLkh)` z?B@sC6)sDyXD~CGf%?jOKu4I&V;)9clqmz9OP6$WCXy^LE-XZozRdHX+CcNgiVBo8*^$;6{+&r-^!ShpmNdpc za@Xp5x2j?wo$>mzJ*6aBUNug4fAUIJ9z&@B(S3MY+e2|>1?FV@Qm;HA)?sYFr$_2i z;~=cr{{X+z{~OJLTXIwajjf-wj7{%OYJ~Vc7KdwBH@*L8L#38`PLMe!G3o~cMQnqf zcnY;cZVXW>H(6zcDNRINXrKERan-){d-Os{_n{6SF@u^M&5|5Yw=G*~63HZ?eyIs; z9$dTAj=kYUA?a02ePdo9B|&HkXG|${#TP?#ITMFpb|v&3PvzyH0X>cZ zi{IO9>AD1#R6^U8sW?7XSW8I2e1VjZ;{v!oSvizYsVtr3v) zi;X-1qkfu_?$rYkvWYoYhTedRNv`FMJivKlj;?}O=q`IiO**^W?<_HsFJ`!smtsFvT=%kXEuyK?zTb%Se9a92L~`pd4}w7*2ok5x&6!aj`>ptA8J8rDX?x z4uMOak@=6X+E7kM!1;fm*fxfl0GAq&>X7%PnT-lt{Ci}sesQC?fnWBStfgD~0^OHJ zNrx56_`9rYnxyx@RrCBDYThtLwb{yoCkLvMX6d>p%8x9qot#_nDs;C*X|_M2hm=3B zJc0<#f&Awr!(Oh56DAI+WrvNrn*WI4r3yig ziv8egieuNM-d|&|K*L;aQwQj7b_knG2Z;5i@PA_nEU*WMCpbM87|PVh6`6Yy($1Be z694tY>{0l_Aj+PfpW9qsG|n5KtOv+7_ntotR#B*2e?BIxG7upDwix{67Ktaqodyt%^fC|=Vz zb*$(#Wr>P$^SLx@g#Z)PYbh2`f)suS*+55On$Ew(oJ2{+cRb{O!p#rsN>YCZoPU>e z*Siy(Z0$&BOJh<)^h7MWp=?s_{Lk}*kF)oBoo>?)ca`m_GwW3lfGhNI;2~UzXPPuN z)q(y|QTKe-i6rf}BN+!JEmJQ#;SX+%E)D*S zKE6Gkb&M>5;0&73g*-oe$l`2V)s`by8>U@sC1WW0s8-kX->`G`g>U!Cax!vL zU&`M-2*N*fqtC6UThDmbmMLeo40qI~*Bg)^;$ZL@Zu=rv=tHE9;i=+`8DyrZE5I*c z5sCmjF-Y4*@844*?kj)en2N+t&exwxt6|xHG)-hb&%a*bp_h&8dtp=sdqo`$^3Q|nkxS3g>8?%X<&?6F?hcQ z@BA=dlOw`uycwj|Dj}97hgX{g{JjcYWxtqN2Zg{*z=PdHdpR?!K7Pgj1K!M({2Sg> zV9j`2OaFhVGMWMRkf%QE?kV?09ln&gc1;KO)k?rMro5M?=^Kw%)3!r(BrWUZk6l&2 zaG5ETqUo6LY)$g|5@=Pm;0utm8*Qugw%O<*@N4C zYf&8bYYx+yM%pt|xawD%-Tr!&4ea?kPK{=6Yp04{RRz)YTIS|UJDS4#Wv=TzUxZ?- zsJ}!u4VgAcv=Qh3CTjW4{O_U`=BYs#Q^D7}yAC0})v-+Pl)KMXGwhcW{c{g1*ZH&w zwTdhD=garyA3rn2bure)32+i?K6WNBGW+pyyPw)i7f=q9o#tIW=qbS{z7l|ik%TvT zntT1W-j{+nz+H_M6-7z?+NnFv+YW=#sh+o0)3Sa}g}k3<(AxrB&fHjj6e<@pw{!NO zCJy}*lpR*&eAw$Yws8D{Y!f)rZ!@5FwzmRb=Ex_>A>4K!`x_7iln&jV6JmQlaX($C zys3HR*y;RmEOzqXh+g)r?j<^CV+@UUy+-Zf_?p@p~-O-p9`EZYp#>0MWiod zZvvf7jPWEvrZIZrb8QOsicN#*0Tm1U_iTGN?im2Z-w&%!2o>vKFf1`4Fk$t;3TPpW zlX`5`IU%1&U$m+}D^2~st7B^Z-wK$^>rEA^U>cf8w1`hV0f>CdZ9%kkn(g|vx{!l# z+l-%0V`Ro!ytda zs)IJNzbRslb3<$sNUww6nU98@eO47mJ_g%8GK*e`y;u9cR2>ycQ}SuSY~ejhRpvX| zZ)$U*4559&bUsi+->f2X_@`CN_KgMqE-%sR!LGc%ZadR-UOVpvNPfe&oji{&Q!Wqv6csD?Lb$@;)0^&1`d&;rfU6XyJ#7 z=8)&aBps=?)tn2&3x1K2*)q+>nyM02#udbW6Qmqx`w0~+O4C}r02sh&@g#6oo;G>A zb7ngy!~FtB3umGMXk4VHAP_n~l{afisBnE8g7N3VY*xM$j5!jZ*SJM)?wEBKHZ>K9 zp$ODp8XvIeaL}m*ZQQP($PP+*p|mfK|JD?7m(USN1P(!ho2@BmKAJG4h^R@KlrhS` zS*8<$`4$O+c_J2G*K&ytqu<7rrESVUuG(JyA%g~ODxSi5gMDlvmVt423?nyea`3dH zfOPv7#qAo4^x;TwJNJ0g7uhLt?gRV`|JC!ofX6`Ng%|Df`$6EB@2)E7Wod66%cCzk zMc_&+0$Bg6wSy)VrD7Y!vo_M1X!(?tpxr*M=BKLa*H-K|>KZcjX%b5{1CudFj@{q7 zA=Uj*FRRd!$YuqjcXvNIF4&>2>hJ5z@7;nAx1(HEYiY#Y#R0hG*k;S6o5oh<>EGaY&2-UI>kp!|X^>@5 z5=t0#sRL?bVmee^^*I8DSjYf__R-3U$90$cYVVFo0bT^$(tU?IZU0{F*O`uizCoOZ z>KOS?W%$4cV*qDWQt>x4s#4{YJvoNUgbGO)HKwM$NO^LZ@X4 z^aprsKAgV3iMMlKwsQ}(4;S8jWP0w)lk+qQGD_{eFDa^ceKc;yVb?~I5#5kc6ZRA!J9DMBPFPv(a1oh)@D7uREEo>~p8I(ImX z#UcCVz)U_uQ%^p2Q}_BGAoEPu-yrj(&c8$E%*{U`vuN441t=4^UMc@lT<%DVRg6E? zbq=2V&Ww%4txK*c15437z&{$DDCA=Cj_=WpE@iXLr(F_W@O@0jC+?8@M|B-B-L(Ac=xAS>M&muw(G4_4=@bLZS=SpgVi z3m=obwDG8MN^Q<#Zojnf5Wk3i(|TNXC$$#VRnkvaK#w_|nk9HI4q;rQiavJ(Z>0x} z`P#aK3T#2c|3CyXgCbJ*ccyhTGAy7&WK&8WNP8 zEQ0hdf^3YRN6#c|5noEr;6tPhWI4i(>yf4#64Dsi5U8|P%~;{%4f`zg(*LXr7_9w~ zoNvg$cqUEi&)^gq6q7Sz&yZaO`NpC+yj2m6(h%V%0<7qlubNpsr$F$`Z+&E5hC>9z|K! zJQ>6VLX4T{|Gm=BjKB4x?>!f*9!12|H)}TG4qknjsyAoz_gANl(3O_Zg|q5y5JH3N z-G1uSs@NaJoNQ56*>dSk@0j>Ix<~&rhQ6u#k6MW>X#hRgoD1ydXlcE?vHa40gu(EW z!`mRu_J=OU$Z zarF8RK7__;_?o(|&&B&@4v$}$qKm1utOT8M!&BdNo%|@#3A611ta&y~IbxyGi7UvM z$Z7dGM1b2`ei&`*OXa!x=2o8XkkQ=3E-lb6LZ?4QPI|~c``|v>m#i|s+ytOQa+p^( zhhfbdbF4LzkfbY1-1cctp9P&IRv5tXE4)+gg#{tubV}PkD-y8CS28Q;##3&?i1)Wk zJZX;^vR5pi7AJGrP;KRrSNF`FCkUC2@<2T@sEmLe2~Zt4n`EnU03`2eu}=(yDBxlS z`Uva;YwWqI^8D!ZWUvU3q&1SH1~Me@*y98mR0V(aI05tAh~Pfymn zox8=-QN^#`fP7`c`DtrDw%9f5I%2-E;Uj$BR-@)lH_Rmi1-`JZ;$N2Wce}V8>!T+xyTtMeP zfNAG?;R-u5L$ z`*pxurtiV3m*rW!wkb^I3@HykZnDQ2TIc2M+6kv&!%{G%6xSycJ|C<-4iYcwnjwkL z7*qyvv&5oWb=By0tqIh5V%j$eZ_LkC;7Y=QF6?>?^D`57LwXkbiqwBVTR#k?m-3HrN@{UR z1Tfx{kfK0KzDOQp_r6uEdnedQn2f=(xicU}fz8FyU?;YL+M^bAkIF2Fx*0o!=5KvE zJ2#W1t^qw%1thEG_Syb! zWsS!j{LODFw`Dq~u0@xwgA0(GMt6$8!*bAbf#4q*jrH_!B|MEJrGFx%zi-0H*Nr*O zUnM&)J|j2JmS)mhv*;H#b9>lhRE`6#LwDGUj$HyKhgVwavb4l*%0f$GnTKSq_}@Be z9$o%NM~&C|M2t;U4`Zd3QzOuI^+-43rG=!+!VI_%QJ24Naz2`d#a0G?{;OTxPVk;d z>wgq{$Ibt#;LGCtPX*uS=imSFpm@3bd^+1udLZKEhhpee{ux(~1i>H}0VPgViRwym zKfkV|1pj(;C3Cu|Ze~$NNlm6mkxwvy;TzgJ*N8|zIstx1{;PUh4al`HzgI{oYW=6s z>+{o-)3NPMS03>3b;{)Vh>F|8a_K@jFgCVjxTv!*cl#GKMsKgAa{9P<>IX6Lx_A8U z;*=qFA}Y5;p7%7vvYY|_&exkMs=G~VvqAOPj99$&R49C!Y*eBYLkk0BWi;AWg6BPV z&DXR=mvgG)p6dvf*z*yR9nuM)_60$$3Z~OY!VbWkll z@_|+>rn43X3QE-A;=Im0XW)l6QA+a+zdMMW{82No&RkJZTE{1Sw!hLXFzM`_RCuZ3 z@-HbBV6ji+4*inHpukWm(0g_UU7I7Kd@~NBGHE~^@mS0nWCu2MK4kPMt@LSJGzp6| z778cuYB&<(QHzz(@rS2<)($;rPKrsIz;EV-d}eK=`J1{NNoE*5{tyx z>6o}7s3Nu`=N%LJQQ0sL@@nu4>7Z*8t=&Mjr^D0z9jS+!$RO3bt&2fPXRn-)N7j;^ zk1IKw-XwdHqpV3*jyS1~7(7?XM-a9c@eE|yNY+w6BtT=sq?R@X?M85kj+xP(&U@^? zZ`(aR9cxxA?BQ?2VSkcGXV&Ab1>!LdPRuo5$gyl;%IUnF*lH{oYBXa(PaHkJCCclj zzaVkxA?9LP(C&?Xv0yfqPuUviUU)pOg)rnQP8C-mgqd}CfMq-Jaew`2@bl--whf$A z)QdiD)?1uAj~n3gHeN>ZL2*)#ehBpv$nHu(F@pXC&UExA1?yPe-3P5NXftV{2s#6E zEMMHtsGnEVW$o6TH`z2b(hVFBUj3RWBL&+_r^E=FXj4e0#BLizCC-l(h@$T{v6eGu zq)oCZu|unDY0Jw_eI>7ums0tx7E_qOeS*UQkR+LguD$Zbnkn#E9=wt4zA|=|S@8=FBB?gY%(sg45)N-9n#ZVAyKpS8|C@B)hMEh?#OY z(lw+B0yxtji*{W?$1=pj&BPWaFr7UWNNKdSY+*DH)3&#R1e8IQX}=7o7yE92&c-W% z11-?qbn%9i9(C=;5Rr+R9GTwj^Vul+E_22V zRbW)9j9*%9s8K{qSVei5v+;9d{e5L%V4(WZ2;5+43h?PloJ)HZcP5Sq^>~$x*Yz!U z0`rEge^SbBVfQ))0^FCxb!_sk`V>WC^&E0+XIfSv=$Kbj#@lht)2nu!c4fxGS-V81 zik%{t&jm3pncAQ<7|m^oeRTUEzzHB>M*sW+iKG%pru9W$J<`J&u{nMg+>F^t*DllN zjhKEivra6p_qeESC`buzyMBY)nT756_|Ed?mN3E59Qyc4kDY=nUCnW;>d4o#{OqOx z(@k)NE;(IDt!x^OYD4bBOjy1m4U$JyOf$^LC^yTW~gb>^zxP@TB6A13^GPt`1*TEsUySuvu zcXx)tUEe^m_c{CCz0Z61{(k*u4NJPKt7=tOeO2^ozZxF7C!F03hb(hP7W%#Z=!G zspKlfQK^?GCMPdz$!o$mpEADy|MLv_pw#c7D6!IFr;KW&f#JhB+R>} zIn%mTp4%36DnHXXNn-<@3I2eaboKN zoOVqtaE_M}RCia)9<;DA?ryMDLw)S}AdmO+5Zc_&$+rM&&g+0duvJbenQwppONPdq z7<4Yzo_ws?&v$ar86>QuA>oR6qTlq)jw-X5U2v+~+@Gr5+*0#E&?vrdGVaR+AKjj0 zxn6cyaLJJ8t0oJ~`Jo~89gr}u!K-y;O{jDj$Tm^YQA(KK*y%Qy0hj}xlQTTkUnG1@ zMBjAQ!KGoPzwfK?jUVuIbc5>iyTj@pH=AWU%Qff)54EA%g218g--6%FRGW5xY-Kii z+tkP*8_zU|Jj7u>y!l!Wq06Rdd1{Y|%Fvdm>E`x>X@d(QtxNo9zWPeZZC;o|!gdaB zUNCX3Eo)_4to4xl*>_WMYekA}3AdO2B4RgfZ3t{3l$M!Yn+;(!N;}cMOg6Y>w&_B0 zW+P21{Uat=Os94*;hR4cG^S${g@J5=*?St8LPtCENs4Pzvs=s?Ew>=e{YN`HT`I)S zf0L7+k3_)Z+8mHw-Gj8h6=3#}%!DYd#$|>&5G32PQ3NceJTEWfb9_CT95b-Sd;7hT z__(ccqam{QV4HvU0yD57Z^|nFxw1FzfJw&|77@JIOmibN#y8yv5Q`h&RbiGHJS!5x zrx}}cy?bsi^o(#7mt3yVWyzwiJeukp9Hjn)<<764vbPKe##P;6^KxOb<#Grp$(1l> zm53xxv7=~={T#f&z|i!uPIDE)$cZJ60fOks2i;XyJ1zLc9CK}5JA6Tml8IJKX=*{J zskACuW^34+ra%)e)qCowV9nk6!p%+%mEv`bFWa*|Tf>Yo^i+P4I*5KevQGrz`Lc%8 z<*Sk7qiNk!zW}Na2H;uB-}9xe zLyfH|%VQD9J;BmR#H4pYnzTlQipINNnkWa&dAfiT2NG!Ytrnh04j7Eirm!@0Ew*G2 zE=<)s!NVJfZf-q60xtqROcqPn24<8RIjdZmR6-PD#d#0ZNdocsz0#fueH4O~tntig z=u02=A%h`MXb^b?$%RG(wG(=a`7vl%Bt2?^Idz z{ptTQffsMvc0R-pJnnPk%w##7KySP=HT%J6Hb(D^w%YEGC8565_+oi7m#EDrL|rld zV|_x#8lI@`HixME#$A0WWqi7GY&$Z`XV%-;#^WzZC)9mXK9;j51cz<+1%#9NYt5~b z_BrYdqk{9@TmZt0IP}-rnZ+v~Z(^gfD9()#MZu;1-&2>GZ+tA~%|_ z4-6QKI+mX^c(ba@)ePT-5Zvk7o0*6e$&`j)rjFRhBKc$A&q6kTsx8(wk2y_kvyZdo z3U!fCedB{^^)ZIn84LLkPv;)(g2r9vs|vZe20*RTwsRXe5D~RyQC3{ol)@3Cp)I;1 z`6Jsef%YI4p1CO31I7?_+bwRwbcu^kXVIfN(qYCg-77u*; z&H;IOqXo|ZZ^=6^HMF0P`|H;`3+u1)5Fh-Z z0n&=8ew|&}@JHx#Y0x|9@1s39NgqUZeKl3Z^mXzi%P15;FZ$~7_OQPGX|pzFXg_RA z%Cb)6bW!-%nc$6Cd$r;nb1ZyU$=m|;TatmLiLl%6NDSl>i(Nb3i1KlE&~jzi3!WG6M=ml5E02S>kT%dKkkhb%dMexIMtwU+XN2XtE`u|O6_mJ zFHSHW5p6jwP|=5)`f8yiVa3c+Gr8N-w8WTcV*2!AnQL$KpI33;&~e|NGa#ZcZ8|2C zc;hT?HjU1%^oym9c*^|hx_f-Hzt}iHd#$>$c=hRBqc$8d$$MPD$lbIf7EdY>4lteN z*x#%z@JEYSV+vkZqkUM&g!VGD6w2Dt?6LugBzAvq74uhPEA5?qm$sNTv%^`*@Eq6! z?0&wYIiW2Nwi_K8{AX%IuV`<)?kczd#;zeS6yk0^t3k@)ZYrYL`MS<>ogiTb(jzJ@!$OlZ>o$5*zu?#k$)l3(1x*)QDoHuJH?yTTBy#qUQn>g%X_<8;e7I_H&|5@_@qH> zg-krv%%?H^_Cq}~_aJBKv1F4h_#G_=YL=u?D<5)q+0V$l1dn_RItp^bgFzFx4mO2I zSl~*#uz~8E*x006L7HD$B^Otwb^zlRkrr^@J8FdF|2%iwu^~&&XbHUfR00mA>cE6O zH@g##z^tJ}5u&ee`^~@Smzi*ws8e=92Um)mdUa0nt1&J`b^GO5zDyeYPxuj(@$e_EiTlOC^3(v>0uH8&^q(M!}mThWK?< z%!RM-=m`bxqX+Xv?s__a)qE+Ssi{yg;Fs364b~&iMh(tH3D22Nis5&cmK?n}sRqFE zeO_xj?HY1=RoTE1u~+Abuxy^F#_pQnnyoHL*r0bFd%r288QwFrmz5?&^w%fWaj!FU zG;Q!d&c%c&yNY9Y1fUjElb?_2rRQ3H9ym+8ULpXjZlSezT9N!XfSQf41neh1GSyGH zAuuKelaYlby7_1E8+k{lc|kGVPA||F#@;)veUe6%`pAnh1}>%F_KUi6;^ZAhs6uDh z#gM)8o+3k{#B-Egb-7xPhnNb|%Ja)i+e{G(U-?c&-6+|Xl8ni2{@P28yg^ba(9`M1~ zLK+S4^9L92p_#t^0(5tKQz;9#d0O^UTM`T@oHl^yz?kM`7fvn2ju9 z)Pka5pZ>#RrDe}^K7cM`9|%xJ8${~EoH9O5#Db2gR?Y+tGd$cDTdVWfp~$)o&e;dV zDiXur;|>2>J>;0@eF`4NA7wQTkaY*Z8Das-avM_7G^+dOrE^cg6BR>0K`Wr z*@NWv%jWxLYFoQ_dJ5lJDp7&WQzu94Hb-Ug?_)>LRf00$hy2f7NRdD;v z<-Y51t^QnSVOn)uyD66%)rd)EoJ2y8DH8$3_j}ol!DW>s{a;qY%@KcP5t<6N)3Hj5 z2i>vIVI#u8KKrOxbx34#iQ`mX_HyxOFcL0LkfY1=o8wDczabV$YURZ4`X(pgRs)0) zg*Z9OmE>x-%?+v!s2kXY7HJk7DwlOe8=&Vl1?eJ!Pf?V0>{^j)vfeAF1D-TIIByu5 z!Jq0}C{p1l(p>2rUo~KTk0j1o-qPj5;SCVwvwhJiP?L>~ij3wUrzU@D92o^U7Bm|l zVGJ4iwFd1UFK(LvbThwB?=D7*4iPhF;m^uGimi}J_4GDm{j!VACjZ&-)K`@B>z~ep zNIvI?nkr6*IT8A09`&nO>65lKknN6EyPhCH*UCb}k}@y~({foqcR5P6lm=M`;|>~m8)uXJJ~Uctbut)s74Om`2^ zzRm8Yo}2w!?DH8-Gkjwbsp*nk%1OdcYhqVEgbrJ%ghn8=QzNwN(=6$(g< zU;Zt(E>?}uS*gR}JJ~(jT!XfWu$-oAWG$2?>m9>}Np*aOb?#3X{mZm@M|4lxie3R2 zb?IEp<=%PJo6AN@#Z*K|s;V?E_)F)V_$Lh}-&tUoK#Pf#p1ryscX|UR&(52aY6^Vo z5SY|^Qte`8gyE%N7pSu6+EFj#OO`V`MiprJ3M?NheNV`<>WaVBTN}N3Fx?X2np%R! zcFA%xSxt3!cU@zgS1emr!B$aRFmYzm973RXX6{M7-_+Sv7l5AqAigz!Su=TVJ{=fz zk_&sLhAsQLk01ubms3&fp7Gb`?Rukyae4L&U)xX42u;ShkGNbW_Sd%jn;4sNNnpX3 zH~a4~l3h$@LKYYa)`wY1mEO4YdmwpAOwPBT2;mcNRYYGHyTbg%PtlQT0MY9+otP#y zy1poEAE&yvLcsEtvGev?O^%<;r_=J{XS6th>bF)qnoc!-PN{5n38$sKsem%K#CM%E z%n!V2t|K7*Vu+e{p54=LxBK;zsxzckNWLN1kkqjE=^PiUuh~XJ-`?(Xes4q^NZVikqXI`nJ#Bhamw<3KEX6? zS|`+%t8X>}J*T4%Dto|m4Frzx!zti~c}QN)wv5g2(0Tm}HLlRjvz!^LRP1}ho9qHc zKyr&&Se~-M0EIz4*ut7rrf?DDdXE`K{a)mg9PV}u1aCbb+Wi*Jn@*gpyV;TmTi07u z=HyZ54DtLv|IQuyIA{v9? z=<}sv>Y~AE{pHn#wSz2NSwSXw)(O4}XDvMk1-2}bEB;LC?3fn`Tpl_0%@3D7vU?@bDeTMgv^7(J zFl4hmD$b>Cn@6ilBYx_oLkbsN-|NefyG3`!jgR@Q^>Fp{8ERR=T=|FK#Lcn>;DnCA ztJ7+WvtpuKT|wln*7~O?uqvZ*t4cQE%lIywBeaqXIQWplEWJ$o91`)m^gTqO34VM-%#$JlDi!!S`P#H}K_(W3+>j2t9De~D_{IaMgf;`Y#J6MBhb z;Wd7kV_n6~Vy2R`k^_c-e-EMl&x`nSTp@+Kb&^6yZCI9${mo;(tVACim-6i?_wLcc z=D0$OqcVvv0GenY9QkOjVr1|q=L55KM9gx-#iVWvIPdA2$OMf3Y@f&1L!07GGSV`nSENoZ_3&1iu-aJ zW*O&D^ni1^-31Q29SpES4S)x$V|?m{&p?#I$VNBmO3UrPgfm-nNgNeFgSjYzv9#Wj zcL`i9eHR0(_5-V`EL)$E5dtQ8bM=BYlj21cYMNd!{-D%=&AMG~jbB*R8!4iQT`T7l z$!jn`ANQ6$Gb|OMICx)Xjw9MgFc9$ye~st1Y1P-u%0H3YOVI0Uts}MLk$5q~pzKVJ zk^zzBbGLxR;^H@Eonq3+Y)1u^GEp-h|njoTd=I(?}ef`lA+L1$luiv8P~lZ)I4W zOk}ZZgazYZz~!87>z(yF=NsF&j%o!|x>kTk+F^33fgY?*rtm^%P5l>6AM#bLn(e(| zuZxc|02(1?mmZ)>?AUzCZZC;}8VR5c`DM7};H`gclud$*RTJP1OZj06!}(hf&qXM$ zP4bO)^glsb6=q)|qo0#7nv4a_ zy~6M)QsCv)eNKteKFNJ!qyw=<(ky;K{RRUsbz9y5&5}MYqOIr4m-sU7bD9m-a<)s) zhCIBu-8!v)-@nsaT3R9?AscNgu36}L(Vz9`RTo^e!8RgLKbY!w7WVo_!g3FCfk-Cr z-y(&1pI#X4;Jy71 zN|0(&n;u+Z#eH5-cTdxDQ>V`1`Qng{l6OU1!O8pqh<`2+E0AC=%I__00(!=4U6b_) zIgH|}l@oU)&AE_ANuig)sq$rYU`kFO}~l+iO;Nw$0`KkN!WiGtI)2G_*^ z?zUL4*CX%AaG>}F^Q?V>j8n>ZOO`WU!f$;>V&=GmMLU~o`7SEWo4F8&A+%T=r@M$W zP|+|e*fW=c?&c{x-H)GK5waP@4$f}?M1piwZShl~L{50ginbuj;|U%2GB2&VNps_K z>^Bv4VQP0S*j1`c-WW{-Y}8{oUMILM$j-2hmy4$B<`yQt~4D`fRKFVHp)G)kLqXeHkEbQ7wEK#q3w(?V#5UUquT z8_Yt`8z>r%yOsij$r`xZ84lqAs+RH*2|UuuU_MNya>lz3?--5wt;J!PQ4}bW4z{00 zbMmHs29l?HMHlAI8#!N$0V?8WcxDbEO`cy98%pdiU%VIr4h}!XoN1zlnQhdvoH0O^ zolT3mYd0oA-H|M(jwLul-})n;vAG=HSc(*dD}TXGi!P=+lZ{hDO7l#u%)_JqwJfe* zk@Lmmd$Uz#RWkgx$itF3t8@KNPCs&4qls{uwEGIhM8qM!+S)&?$rS;yFiP@`_R!8k zk!6}4_=ELCwQL|mujPON%24h!UHU?6s0CKC0Un8w(whFo-7^C+IcDK&hVMA0p`i(U zjC&`)@n;82dU|?YQ&SrE6b)*X-ymQ&am&OA%)_b)Y08HGbC^&Z(N%9+a1ye!7it8@ zSf)+H2(sC69_q_%)9Ka+-xA_oQcSdJ)c71)R&{-C2Ib4gk;C$) zAmo7Yx(>$zR-yiw$rt6{3`t2pWi+;vc_D9z0@7C>j(G?gqj0m~9<(rGW z9wg9&&qrE}@5whjstQV8(<9#BA6ef`yh?%C$K5X0m{{FRU4MF0g-dR^LPq=b%kRM% zl~pvR53*#kS#*5Q!b9ypC1?F6+CfEUhzbW2Hikw{6yrDFqKosWs3y&0YY%@XGO%rA zymgfFR8RJxYNjt)m1;46@w!G^g?I=Ov$}33+i7c4_K%re^u;MRjEVk|9kx}JvVu*i z>*4+3W>phuS=(vg_cNnyk6%~UUfM)?>6k~Zg;nY?;e@~pSE&i@QmceM&d5)>v@ot% zxlOp@ReeJPy<+X_KS$L017uD&kW-MiS+;PWFN`mK3?BK@HRR;vnftm2$vcWRKf>A= z3+R8Qd$LeV_&aehs15P)E~FI{u()0Bs8#v|mfrDD!!2%sV%eRaOOq^otnxTD7Ar8` z{zLm-{=L+^@<7bSzx56AFKVy+9f_y5OMJ7Ce*WO1ZqWpc$-XX2a*8-|-YYPSdw&O#x9GX|SgHHE?TkJZ%}=C8)nB%z1H=Y_~ox zXLnpQbhulzuVs~vvMK)HQSdCRj>cV%R2sc}E~Vx5E58&(qn25b5^%d>@+i@@?Ynq= zj~3^`IL9;v(S=W=qG)%Ce#fQGF{?A&JN)txTBa8}$z>s`I;L zpd_cYl~R;~og$-z92I#z58Ee_Qux@v)H>4l$PK#nb&PbMX_W`1r^iAf7e7o1v#F3g<_-+<6?A zmH!plw2W}Bvi?um*-UR6F~nPTCPH4Mi^J7^eAD9f+sO+%+e5a5F*dfZUp}g;64FEm z&D}tI_$wpRm;~VV|3t~yRSf+kqk{L(P;abc-sO2+Yw^M)Sl}Tn$BpZ64LFKYtbXeA3m=vDI#bXjEMdR47 zWodm!Id2Pd3{C8jvBDYgtqj)6zdcvxUQ`+jbnb4wuuH|KypEO;$CFb+UfyhKh~E2t zzczF~!&ibJcmU;cRhNubu_}IdWB+^|UnE#Ico_;(T5Q%zJ@;}lWKg3qCaPmi2VV;m z9wJ{}RBqac%|%jeq7{+k5+n>2^SZ04N1A|mVwZA&6CaY0Q7(K9q=h2-dyo0dYrr>~ zJmg?)%W#7FCepi$0{%OG8@P(Ieb*nu&P3%232cGS!ocV`YHL(=+)M-1bR$lCwr3BT1*hZ+~%_&(@d{o;;nAj;i)(7s+E%+OG5M{Q0SA zXX@S7Xc3qDlNX~LxU+jJmet zm^lw5DP4nGxMg*ha>Q&964&k23VC_7)92*UymR{Q?|pIE@mSGXiT5SOhY}XJ?kBj6 zi8*EandXByPRV+j1`Ru38|n&!LS#xgQdzXsrI^iU3!W%kMAUn`is z+-w{;I*Fsm^_Qp^wi*x*38DTFu8L-#?*vAaf?Mq11E5nmgQyvN=Q||zf^-~Lpz~G6 zDjB%(bGz1aZu?rD5~o^(_Js~l(rf|u%hC2kjs7V-Ngc)EQT63NEqSqut&rf;g{|ESZr}P?=c=EVI!DI7nUt~hm@;4F zV)BvSlEd5706Nnp_cn%BUmdXVfHui`37gIq`;INi%=CF3^?Z;`MTZOR)5k1xW~n~w zNJ>3NdCSIz=W_k}6)Cbt$0G9=?VOi5Erjl0;y#LuJVA*bGscCB7*ZYiTM*pMn~fSC zr?*;z7x!vM=I)elAga&neZ&?$7rb>*?<|HItrA$&MVXa?5|D6;5q>;J+n;%D>V=|X zp{z6lZ0x?yV*ot44re?tJpaHViQ8HldHPxrdo$ChvkxNf?d9ASa2GE?;!TEo1}i`+ zE?PiWm(SJ1P&px7I_T7%%7@ zQF7yYx#@orr>B@(Oi%Mx!m}W=TF1PhpT_pNhDqJOvG~Y~`Ub28$?asfZ&On92Qo zb!95o_2}pn-w=SqQPo&?{L^OZ@V2~Wc1S?I*1Se+XK^?##+Gt*b=YB0 zamwVr^as|l4kC!R=`(F_p9((;mPFM)WYhe>x(2RdwS*4Ra&iB zMh}36_xhV9F&+^^Ybr>f*fX1?ct4)@DhHRk955g1?qxFb(S>VM4mgvu`Xl!_(mfP3 z5-W(3@ox)^GxQf~u{D5SzGoXMuG(+8J|3ju zsra?n63(|k8!ru+%dx!Eo-+}N^dn2X6M&y^7dt3Q{#tJ6h30F}*zviFF1&f$UroR$6Z@tk!I9NI~-D?MPc9 zF}%kMvPLy(|1G)T;hZ)`3Hd^i(t4To^)Rew#^2`|iW#^UPVjjmTx5FQXRUu#1dHco z)0CIWMaXF0uFJ@7j6r5OQo(YR{K|C@@=ZM1tTk!yWYh#KJ^`Q6to*1m%YR6gG%#!1 z>2sVMxEShOv#CK0r`CO!x`7j?lH}_3WDhUdrd=n3F#s@!tJJ=51T|w3$W)g<7){%d zxzHCm;dt4Fc!*2u;p#l$dtZCsHP?7f>r|apZtq@E;;;iWSd)*gi`qXAT)oRVw~RJo zvpI2>{by=8zW|T+Ok8wC+lL`W$=*Th-|e8$o{A5 zUMH{)O+)$Gtj} zcc6%-_Zc}DsEUP~YYahnpy$&k%SspX%n{#5_w~|kVQL`XqH0=ak5*cu{D*RC$vjBr zZ>?AFuZTu8%YNe=$0o0X$qnU@Q-h3Juq_!!ge zHnw)T74a{e!~z>)&9xr`*FkMNrQa!=FwyV-DjaiW-+`usuBG4Ephp6ad!rQa!J`~> z$|#8Su1wln%eXT1|ox*`iRZ2k`rJ~}M@QdbD0V|5D`5Q2eKzr-RO4#eexvYd~0sw9hVeU71e*Md21Uk&v)MYQuUZh84oq);}g znVik@o|YH73w67Lh0PlTBK*}6`4m;?Gk*;#W|)7oNtx_lUhkD=p65yemB>?3z)JcD z+JJts=vfA44?gIW5AKoaPjP8-E-zcw9O5kTb*JHub9NEG=b=)P{eln^NWIrZf&Wx% zFjU($lfKog_y%A9JNqw$r;rn3t|TItll{DZ{`MucF!$-+&!+To)| zWCdrLGT$&1r}KI!a#+g<9c@YGZQ)+EF0(gT-Lc+>CMo>_;n+|il;>#DsyUxLC1eyd zU!?8S`nG1N4c0TB0wgf}Lt=BD8+rZT@}}mlGBLjZvJWAR|3VIj{vXRS{}%GR8a#s0 zNCTBG9{Tp+8Qx=SNYyTzxSaArk5el@)>``ceGu2Ugtov}>**^hcsHuEViEa=0F_A~ zk??yx;tTTJiAYE~`v(Sy=|1FV82v`@YTj?f{(XgKx`q$I z{A#A9lHyr$|n1=kj=E zQjaV(*@)*pMvz=<(4==r4Eu&Bpyf&rbCUuJ3d%eK4Orx04&8YK1@S0_`FX#&SYK1a zK)WaaCApI`+<45fz?j&Hk(sY;14l+y*hp?);%YrVsW6+%n(j#nvISOs10~xFE|M$e zQD?zngLuF(C<{DoOma`4pxh`!#H=dHYR87rLaPc?!uh~>PwX2KOMMnX<9M9J@0BC+ zKdMyJ`ZP%)VU($eSAfHZQ~LMZ1s%MCwu=X3Ak;1O5>ct0LbJQ>CB((W>BOPf4<<>A z1x%m66!IwDS1#0nk!GTiH7w-LJ!iR>oefTo&Pg(9kaW7IjdIptz7TOKY;vjLZ-i`% znA4trsp!y!yDlasb3-PoQh=X0SEG7=X>ag(Y$1GMke%GnuRfua*>nQCGfy>v0<6tAXLfN}5jSe%45mXzdo^WmcVClP~ zb;U>y-W+-w81@FkLfQ#hmwI6#c49VC5Uszgk%rWeU|@%2(YU5?c*cY??N-iY$ay)} zXC96bjIBeVHx!J-Qrwc>B7JpC06}25v);)a?WDnK7*GQ-m^UPch*x@FK2zsXnu!}w zo?j@-G@khN5I9+J8FQ}5RoL%Xu>ps=g=i{ja!OjhUuC9$ylly(g>HQRjPX$zXdcB* zX6`SnVPa_d9)&EV^Kf?K;=L_My%-*#lD22z*V-B=qJaqLGF< zHUpmWnC-~LPL$+Jy1RIV)(bm~1(!tqw8JW+%EjllU zf6S=7*}?*gt7VUeNDLoZ(;7I6OJ?X^vz?xtE#2<=5#;sch|koVvE=qTf22I-r~r3h z$gqH(a2>6CQ?NA(qqmh)vQ^XL74)x%7@a!t!BranREjE)+WkPSL@%i@DPVX^zu!SQ zaIAARKbv8AB48x7+@N?>0XMFEQg6eez7>#?Zv)RF_ zJd7)PJ9{_UGG>mlMc~{B@@;wh0%Ze9qn<>@le!3k?CIT~HCHG-TT-Iu#HMeB3z6n) zoHA2;T?_UbizSl+aw=~a^7dp0Qto9Ahx?F3+hjxdN&v&*=h+g##F6dFBp-^a53ABf zS`GEXsxYrZt8!GWt(~=;>27zU-scHa5V+>IrR9!=?aR&!p;Jtd&+~AI=cJ|kqaZ`} z{2TL&PpR9;$hNsgJuSmy;!2r7PlL8hS^*C*MS|KqyVfJVsp1sG`vbQ($cG*FJ((4F zPlgDPKRjwhnAg+BLcn0jHugSy)~ofPs^3IzevfR4@u5#G~Q3 zgYK?GOGWoQxA|MyHrhi!G4uvT<`?C&9Vx0nSv>QZ7G{h1Se0$rRMMFS$XcGa3)%Nd zthg2wKR&8w3&cEs_P*`H_}fM?4Mdd6l=2FVoiK*ER-MV&{p94yD3wG43bDdRa&kGD zL*c2C^Yh_o>%du{Xa2FwRrPcVj-Hs@%8#zM z?8w*1ih@7H^-#d$W-fR8R}+k8+Yt!1TSI2zdvz8&$30oY{m&zL^n|ullqvD-h!UaD@=-mWNE)H_4h;Bfq~} zCoVZx@hRk@a{Jucr*p7IRJ7B++}7lKoFgraVq$KNX=DkV+W8t&UOAIUPcY+*4Qi6N)~=aFlEJNAI}G+w&4h<8*3B$%eladA7g%pfl_oH=|N`v_oQlizd?j zS} zli_UC>?6yvrGxtWEvj1dKVuyHE3OZ~iX~Rw_;ghux2~KuVaurH$T%M7a$w^Q_Df2W7R@Jx3 z9&FdLBSb_iP`On{WzxtULx@v2doF5D`bZY7*r3cpJ@mj(e8F5ly@eyCjN-x+sDhuH zZM2k$dOUB$))w@|dGS?dU<{57-9Bu^>wPJM)sHx~aHga&4l_duU!v$G7>^LGuWxGN z7^%e#v&V*SudVA-lo;kj2Kr?n>4sY87AN$Lfp2HlPn^s3(wKL1WQ8Cf0tw1B^czF2 zv8+&cN!nNojIO(k6zSzUf*BqPF5j-T%oO#ti9As-ut^siO`Q&7Z!DA7qp?|OPQDFU zwQkJhO(T(zbJ1|$kPwwKR_f?D#I_PEpc%*I$eBo|8lbKh_qHtk(1{hwNH4pPw!iJ! zE79X8)j9V`9L$|iy9Ywjd2cJVJ=3kZvd(6Z;m7w97OseJ=Q zsQVs$CuiS9m>SfW5q)OsU5g8mz+3GpA7rlrc<~EO_s(m>@t-5aZHbu)FacIt*JusO z3yU1>4~l#6Q69E63N3A{hq3(qxdU;H3Ij*H%=z$>g8LrXsB%Cd6XdQ|oY~?BsX`Sm zkAHnQLQTB@{yITO_4MIy^|mK!avqdQA>36`_QQfh=emiN+}B(txeR0-Tfl>?BOCNbn6j1+7}_CJofi&E4AoL)SM5e&1IHjbsl~| z8N>HI9{=00eDV-`1hGgy#YhiFH)IX0ha(hDE5qZF+3R-)$|*EUGi%?zZ48tjP*O?vHMQuTTu2}7*w??sasAT3Gv@vHuwW`3+fv^bFAhP|Xz9K00p&-a zGV6^fGtju_d^S{{C6TPDABPBp*SP5aCFZ9@zt!*$eIO}^bE+vl-Lj;N!Z0~;GMg{} zl`W2DQmBF+6%Ib}r;mkgRF0gy%W1}@=bdOsfijbr z?a;qzC9-7QBXv$F&ayyHgcd%8anB=y@mf+jqxpjh_=juFo1KjR+xO%i^~tQ5G3(y9 QmWQ5%1tj%Njpk+){0Y`xoaOqYDJQ1hR*Rt!0uqUSvjPza${4Eoi@B(_N=j} zeq6lj@#LH@GixzcVw*;%wW0&{tPlkMqWa8&iHGZ!>FVYED;Qx|6f9D6`*?o`H<0W; z%D1~@f9g8u8Q0%0fz_eQw05-PV+6Flyc9Gktv!2HF_)@{(bS?HOAsNAmiUSu^7oB^ z9B|Isj11BaG*CfwP1|;a1qQ*3( z%4_X$Sbgh;vGg{VdE0-BvLkXWdJ=DOet)HZ{_h8?jb3!g`x7zej*h<*Mg7d1I5fqx zl1@(8WpdsJK+bx2M7dwAr%m$OaQbTb9pn2ee7EglRpRmPkQHFZO3*fc_BqVeysB%x z^ilpw^y!Lq%LJ^Q;GL3lPB4n-O)PqIk$A_J{ZMc8HO3u3BJ!6N^Kkk+%;+{r6-Tl3 zPN$RIW0R=x+12j-q~U8|3p34j&};9h8ik_sW~J>RbA~JHhwm43$wgJm88;lnBS0=aw9B8~RvxT?^OEy2o(uTYf+ByS=-5q#iGW~gUY%HFFK)QM) zvhDE>I6xPyBR zmE8!<&ca}7sHJ>buFG1;fPaB!-z)*6ylH*kNO$zc2FKP=yKu+O-25TrrHkpb2>m2|4{VXopjMLdN1828@_*p5~!Yo1Q)Ng5f6<&?=Q@T@> zAnQ%H`g}I^RQ4BXPcL{@9<$V^`UKWYhV^HI>6vNuyvh&D$DVF1z%5;Uw?NdQA-(4z zk_%xBK=9oV4S$_JPXbSMOuFbs6+^NLV{3<-s31IU_bHC}Qec_Wzm|_ z({YJ$@=INgDEY#l-`xZduHNwVF)l+YmLkuR+gD z1s>1bvsFrJkr#desMdt{Umah*rJXWS|;jW(FEu5*z|)m2J%3^tD4H z0xmU2nf?Fc_84eBs8)YIl)+_xpd88G+{u`KGXVhdN``G^Ng`d#b5JhTW7~SuuEr2rWg07VTQpQeRNNLPL#W2kq z$MQ0r+t9TdOdOUH-^C5*k`QBN|(gS4Jpk(zjNTjNx|)DH3W*qW`5zptEEe2WMt?9ikU6)nW`J| zwkM;N0Pm0OeAbs61;c@Nb@{ismDN;RpRNDkix+H0QQ9{RyjP@E3JH_aUCYhI-S7-N zRPuf@R0Usr{D4UAiEUBUXa?^2>&I&fY=gy2Ov}wjZ`#1A_VTnX;-*tO+#*kc0I+BT(iwQMPYAo7$Vv!vEKCpbQ$hz#>)tsIutVgdV!P-aFvqaH>CbAO$we7p4 zHq$fChp};`ZnIWALN}(b3jyKuLvs!+Bv_4QYVaP{Kg3Xu`&S~aU8izZMHduGnY9Kw z#zbz5`T{5F97wDyrM4>EKA)KgvBEYaj1|kB$t&}(mfr{8m8zH$E}xxqM9=Q2@dy<% zY&er0a5b7?rB*0sBN7ZS8uR!1mTW}!{TbtX9Lm;lCbGhBJo@9pX5gz&2}eMwNP)i?M&#K7Hw2oB~2cYZA9N*YY#roJSj> zN)ZvyQ?nywo|^#4>m#92XrvWc0jpytSzOx<1JC8iOifM4T&W_uM8%1eh~eiHDP#hY z2+mgbM}^p0zdZB9Yw}Qy=w48HDVN4i$@mTFu`IKt*EQ%8JHYND8wM4_)$=y#&Mo!! z+74D3i|IKs$za|XMMQA_$9*~$Cp7PnekgoKx9f{S(l3!c#?Hsk518pYLs;2#>QA39 zCs%i#Vc2_yTQa?jcw8-F>%uHyZWaaUa81n9kD-3=5Uz_cCO|P$EptIpK01SZxQhH2TwMBhtvI_8Vr#@_uLRh z%P*s5dzeH405fO{#njfNiJb7?tL5ZmzovE>rV8V^lxbr^+D&uRZkhgUvJ9}oq_3tBZ-&dQM3*948lA2+aT&#)%#o2#T>Mr}U)y`n3>58pAZf%0N%gz@`hctKf4k5h79-vn`|M zs!q=f0jOlJhzP)dQUk6nm*!u>z`+Lx2)zs+=>t<+-K%i~s zC>EIHj`>=cNI8%!AqwaO3=A|*pSaAkbN*~Jn~q>jTr)9^k-)JOqn@?M^KhCOt~x^7 z8(_+MRHuijNSr{8U@qZnIYQ(!B+M^FCx#AS))faG;YD#qrkHiUdOaho5?Z*Bd?q7E zT~qtXRK-agbfZ`_qnMH@-ek{BAsvUa741$iN=0SGEFF3LeP$-VY%Vr%G*ith9x-IP5!-M#bh-^-=N`$F}g{KaYs(vyPrSD`i2^X*;AQDk>mXI_5FEJQ`DvWcWzHN z{9tzro_)(^qc6W?s4$Fs*OICO)%bZku4id0QKVfmG|nFDP?aK*zkV%LM9j;pdVLkq43e_I?j`ME>F_y${rEN;n|?UCY_Jt^a*7#7lvQin}Ec`?iICF!*j+ zgN0PW^W>YSMwoD2xIb$m)5xJHUIiQzNrzNGTaQFPN-QVt8=P#2?;-W32|ysU+AvobvBxKh%e3C-G^=x+Cm6`B_E`hMK3^YEN0RUij$gV)sEyb8q{G)c_gqKM-tCgfc$JLjFuSZ(jOB4z zkSuh3{x*-xofhN$Y#z&V*z5_PV|(1ShZl>xz=z668Bj7| zesqM10JM~ciU54}!6$>8M9@ro(s+l5)&sVh2awvsL20@Z*3!hstBf4bpM+^t9Nnck z>UnQGo_S{~7QI6;D?FYC^^oQhdZy*AKh*o}#h#zU3Px?wUR zD!jaSjqFu}$;zTS8*YI)XrY_yUe#In)n95rx@n$}dPQx<)+9O5`wVQJdl;<~R1k5d zTE8l;-2qTmQITypTMPt$zHVx{GNb>b5;~gp+3bW@|G@=hq4thJZ{4A+rK19oUBG8} z`;FH+!<$=Tc^+s*6{iH!b2;SMb2sOnct?$k{$X z1|lA5>()+mj+4`oF%%bJgL$|%xaeY*9-V_+Y-|3YRug>JtJUEnmsmsgNO3x)vc&S^ zq@tAEeCWZH&6HUW{To_#ypzUn&Qw9O>aeQ%bj{q0Cp6gvUYYin&Yo>kyl-PcPq~0- zJImfWeE_z?A6(Fy*^X1=_oYBN?nF(Wjfr%;_LRU11qo46!Q9##BULm!G|#sVH4gA) znNn3yDO_9M@)vSsJxvLD6xtjQ$nfD%R!xBqKauOt;F>7&>`2fcIV@R#d`7)+uR-{= zz(fL7?u@;2T7(NFZbwnd%eQH>xSzly=;C zhLdXE559*1Ofv)Y$6|)h)yLrBK5))*P2Be4C6oQHWu7RTRg#Q#A2ax#N{Ot3Jb!dT z8~Yk@W;IBXO7OS0^3%^O2tlESFy6hXGOy$YR!l?m$aqUTVP3QOva=um@H z1uB)x^O$&IyN;w4W0AT3)Fv^5vX7p2pdG(E?(iqHd!UMQI&0O|#VuZM&I`!pavUQ# z{-W7)mO9oF7nXm;g&y2gPc%KAd?lA@y5_yJNE&QJZ;x`!d`TB*Z3{VCJ0B*Vcn8b0 z&lsz|D{D%riC}lxZ}~7P@3yHjxu9VV>Ki}52_=o?kEL}a_789esHtws+%m}>RI`jX z+^ag!v$JP$eOq^kl`JT2+A7ZQce+8HlW16yO|42ur&ov_ToHD4xh9cpf9b|88qz)W z83yy*s~!)bFF-ZFU(6A}?3;-#)|xpSXmkkhrAVJT+!Vac@S-QqXCx&PN(HZkw)-0m zHyLgVeYX)mTF8yE6sLe>N;Q;S(`h#cUY;2IWNHy-Juk{S#2*Sb>;5=d$M8E()6^aEur0%)N$6$KiM*gj!QB626F@oRJ64)9KSZELPG87UmY)Q@Wbn=9ll~ zTO`r8@cZ`9-aqSWWIjGWG#l{Rr(7l6v?LgcJXz7>Mce-HJfZiTl0?5D%B|Y`uHWrG zMu`+7m)3IrJB>tX=Yu9J>QQA(Z2au7lCeMy@623rN6Ll4Ha6|&YAILj}afO!)<%1!~0PKmZbJMu~bMw-7R@9)fu*lxlOKF6f|Lo{fxGsjdyT`hGc6VMQlBpmnhmBCLru=@2>W@MSJgE zG~CW4^oeTu`S}^&DJv`M?yh~DL+3x?4|J{;H82Q@t$<1Ia>KwFf44cHO*m8{Sl$-e znayd?hmsxi$sCKvfe3mJf1D^PM!JH-HBz+PF>mp#^XhzBQ5nI?EBor?W1{_gIo!8D zjkAZI8$4_%X^NFAK`AJm8fdtXKep-g4fsB&2;1&=RjsE}bAwV@@5}3eLKvtcXGyYL z3D~)A{-|iW6s!$Mb=AL{W&Ln@@_4LNjFPmV_qa`&U|L)iT)jx(CTV*Y6bRvocw;iy zP3GNL3eSI6^BX*@XW0IF#u<_?H#Gr)O5=8f8$brQSo`AIPh$K6aqg`yHRgZ>`SVc1 z!Cw#tW$XmKdV6p;WgI_Dm#u_FmE5&TID2>sZ2vfXB&! zsoXV8?r2w-VM3jTpsCc;vzMd4m2zLWZfRogKH&)Weg`fKQ zYNIYiIpIUf0PGZh9>C~}%dw$PLM4_C??q*dZ;B!@N#?sCQ;N!UaZd}VVzRg*MT*kN zGEjcTqsIP^MS#*|jtz%$|9tE$56Y=>*3mXKVu}0V5YN{Sva^0h1 z1W=nu&`gfAyP=YaBazhu-hatJXxf#FU15`&-Hvsg_JJt);qmEH!I1H+D|yK7y=8=i+i#@w{kYXrQPKVtB8~i^c!s`G~osT3d5AS9(EpPS`*8o3stk z*=?g0q#mq(>nmpb}~6H3)~i+;*%-?#bv&hw49=#9g4 zrUCA)>y2h82M(4TB>lvg9e=@42gOhU|AZ-q&2aka@NcKh*9F~aMt0Om8>#XZvY4MA zVE2x#cjGeG3MlBkaK)S0P>^S8M7z>#+y+LN=LwUWOL&7Lg0sU6h{fBU)20g%teXz= zXH*sAoC9j<$VP~5^}oFSBv#YB0vVcUcJ;0HecYWaTTTG@zxy#18C&AfgsWO($( z<*$EcuVJgpO)E~s*j2%Y7!UWrOXKq;wWY6JywsH~IfYovYS7d`?6bRq_M#2&NEQ)S z2Sqki%k%+|krwgjIa5)w^RLDi@7>@WzM9Y3h($EMSSMNYyGNQR4r8 z`WbkI+*?BvK{DepP|!00=E+kXS1)3WzX-q7D!I-*4YrlWV-2<`)VlG$=efz(cuPhhF8}4w$!z;eG_^>)|(1O3&+D6TH{YYFOoJGO<|n(cuA3C ze=qYw@7>rgke%_{+X@9xsnsXwISHiNaE^950KpUYhYMP1%{7(wB08cUW{HT2l|X&) zduPHKm8p^0@~PMU>u4)We9Y)ePrIzfv*o7&Z+d(W@s|`FuXW*#P$LhIKbDy)kMlV$ zOgqkuEDcwen(fx!m4^n4e&RaX5)EYDyS)*~BafOQVx%Bw{8iA?dB97W_v7na+Y}vzM`&_Dbl=w?jdS6+BCfj>C?+o%*+4F}~&4K2=<Jxy0!aj1GlGY z9>a#`p1Y+Y$%`e~P0%@q_>Nr;smNee98h(t!&vVPU6!F)d&70;(3q?;To)gwx{{64 zMjqo1{WkQ=&QT+Th7m0|WlYlEpNe2F$tY-@?PHI`6+!W)1DVvYVpE+`MpqwE3N?7Q zMM;}vrWDat+lN{L4B-1|V|#B#@p+p2uDZBSp(r)}SbilXi(cYi$kO9IKSXm$4U-UP zioBhnShD*yA4LuGOG8l42|ac7F@p%lh#1H-GfKbk3&h*tK$oTHbq9FzGSa_Xl}VI% zA*kAi{7KBvFR~ZTw}d>KT}Lm)_KOda|06j3+olPocH4mKUmBt%-bceW{A<4G40VXL zgb&a!fEeq`;b`#6eSf>L|BN4FGT+Vcu*v*;x1oigM%^o_Ot5k4~Ld-k%32!aabQi~Uh14j`$^Qza)cQs)q4`_b)pS-% ztDIb51fjI_C@QogcbWISu$SouBAT~)Z=ou%&rbaBSm-XBJjy0>1kU3jMShNX3H1CfvZZ0DIG zdNoW%))TaQT;qXVRvx~`&sU|sy4&*Mq`rF8{B<`6_@d|<$s3};QAwuWgPWTYW}ub& z&juw0fAah{u&vgpiJ;-D7`N`~Pr1GJot(Cv{6{@f0N0$=me)ZZZYrJaugYHcV@jrB zfX%SW>0iFPYeB9~R;Y;$S>vIwX$3HTCUT@@cc`gqzygU) znX5drVGYx;^ZY1o#fh;*{is~OWjNNA+7ugmt*%c)v0-X095@QitBID8sB~a z*WhP@n`jfd4fA`M{N!Kl3#Uql^#<8Ew0|oF-bpJbBq+k0I0@_c_}2nW z)R&BJTIoP$wZs_wTjC+7UA+%)@jHt?KC8Yv`o^KJhDSh+J4dy#v&N<~A68Ig44}%cnJk~alL~v- z)F>4*u>WqpwCA6TR}o-{;6cMMX14z+_pMpTR+aRT)7sEN5pDJ+3)?fB3xoMt!T9#j zKPrgT$s9H?-2NzHaTtO~KD*ciV=(((3~dttnMW?3sueD9yQYo+TA1ZVbtlnd```+8!CPq8NHMEFHvbfPAVGv!h}iQNZ@U=c>Pa%)vnR;fTp zKM=lMjaYAK4C<5hIOl>wKY#f^(&hZ~%Fq#WGX8=zY5s6f@M}m;X?q|UIdVYmhJUP| zWHx_#*^x1wiA*~EHSC;IMo$+W@S`^am~69j7V9zg@Kc9tXx;R619kUnhBsc3Q1$5UWtBp5F1Xs5Zy|^ z${cp5okvuM-yM&HB;yd}2BgxKx;?*X?%8P{q5Es(yI{?p_th-#-Lp$ta46~h2XE}mpkH}>)N#N2x_Qyv>V zme6lu&g$k~g2&~@s+gTVdqDKD`%<{t_Gvk`s2m8{Lh!<{H!n^!%i840cMy-x4)Miw z=TSVaR7kfqP`ZNTjAvNG#_8Qttr=BUvq2XB8J$>YR`~@>BPOxTT|f?x5b?WNqk>|u z=G*61&UCEa@{i6yXizq`?X+%Jt~;X;;Y5>izW(NNGNjp#!338HCe*^D`JqT_Av#p) zNa+vPNaXSBUAX-|je@q2jmi}pe?FZ)2_j3$z*HWWqK%Dn_c-u#L)MQ0qeEXvb_z`d zfmLKcoN|g4RZMwFO+cG`+8z%Fwm_`Ui`+{<@rlzE9xHdN1=%5rkwP)T!&`C-{Y{gW zY zDToaIymNZT5^exSCU93D>mP3-0gDvxyrnp~i-9Mw0Het~`ieFGvJjvA1kxH>_na3) zo~0HTM__7IMp9Z8o?srfA#jxnnq{_FkiT`*{yQcN9FI!LV2nPav z0eYPsD=vf!QrRV)D!WMAA$b&ludQWXO0LxTW>Taqv*1ifeY{2S$-5u!lZ!urFdW&^ zNmzacgZMi4XHbFQ<*RE5W&F+(0MT8D5D(q=x=l{#k6rm$Bmb zTE&0@exP^?nwr|}Zqr^m33ntC<&zSrVJ1hU_CK=)3p2E2?BaYjfhfCOJLx1U#(uKf z0u#Aj{oJH(3pI?JD_*bHM0r_C+_R%e7{|xHGONbA%Dw+KAka|`nJYv-H`wI+9keT= zyL9;u4rx|OHX@8@r%R)2x3y!HSgojEX1yc9dftI0Q-k&pSj<=}c(rFNr|_Webo_&& zP}pPyzOdd_#$uK;!@UfPgkL>hoVuyxr|Mu(SOC8qO~l6Y*T4;#qI9&8_qsXDLL@C!$no!AYOL?v^wEG&)DpF zv_4yP7p4uBf4AL-gac%RXQ}dXaXfsMukltcMa#Vz9iwX5m!>-;AREsn5dYb@mH_Rk@Fd+K7%nx{SuC*QG zDE*2K)AyJrOG`)Dwf>5wtAYP3bXq8TU0cr{EkKlpgQ0?phRuF`hf?h8-^RK(5dyJC zPiptm3Wqs)zR6#QO;)-8q zrd9-_EZDATzWWW|_n{9}o_Mrb#3J*B@gL8Fv)!SyM(sNX_pImrKYmkSlfLB zSQ#sYl&i#nvdb)YxpwR*Zk%Ye>^352A)a}~->KqOliq<71gB{!{}tcPFK40JYX-9z zEHHIBShnkCVH?>s{S;2z<9AsyUk|i3vdf3~RoR>#%8t2A@(sr}mq}ky_N=+-pU4qt4^01_0WFT^S$AdCj-Sa?b2_ z=-D$QUQ_6Q2scrldB=cXszAuIuIH{TLeD=i^PGF12`_h1TOH9_95BWGezSP&jv+fZ z{G<8#kNP9L&QmbsmN%jExo}Q~Vl0srKXF{&DP^`iED)ZAGbn?dI?oVGUdJTN-4yj? z;oHSv1z!;@>Ey3^Rt%EXsPh%3e!@-H;qqpcl>Sj%%UgM{}E6NYA@W^8vBFc^Kk8s;GEbxT6~ zJEbuo+D%AL_&=s*+7hg=&iwBDk4S~w7-LX zo335f<=!LSwvl+_f``dTv$^*QT)y_6lA%EvI;8(6jL#g?;e7KGYpp#c zv(ftNMOM0`kpjm+3%}7wqy=oO#WzOOYn1y35C!=d`;Q2E>RGIb&0=-el9y+ zZ#pEMugdmz=Y02Z`K+ed9&p}HLRf$VN4NyDH|tF`*_sAoj#siF4=5jMs472ywxr!J z3%)XyA<6}v+INZxZb{WW!b#s3$X`&{Xe%#1b^&cN%I)Lu$pcRosX`JP9-p3h}#I>3SF z!dVA+r+R8RkoCpo;gW9OF?4oyNiu==`w!BlcmD$i`};7wrIW{3sV4P;2to|Yi3;<9 zDXiA`LrY0I89YO5lKzRaCbX$OW@3=%8md{ujxnoud>WodRL~YAya-{X{0|T$KwrI< zQ2Xv*2oyOzsXdWp$IlGSZ`ktG0#A%y?JVb!t(WxCOV@J_CM!~M%u`L-6CArQwGaOx zqAvt^?8;GCv?}r~BIaqH2|2{M>^rs83jjY6uF?mbx?>1@8L{?U6 zl%|u!x-0Cq;K@KeQzG?QcI(t)bN#6n7#7Rh|fs;|!c)Xr{Kfd@_Fm zUv_1RN4Gwa^UD;qS-t_m46$6YEKMYPlba6vd$=+gnpoGW^d&E=;#aNROo~U&r3kZq zCM9GmJ}|2__;d4Pi=H)2-|zIn3hOrAN*%ARv;Toz89%(SEBo}AdfPrktB6-7Y`UZF z{f3x@y7f9$9s!Em97qfaB61rU@pecy2jR0R9)LWqUuK7B?Ihg~|0ySD@272~42}j( zo~YrQ98Xx|)1BEGW!!1)V)!Dw^>j^kL$D=wb7SUh^-uoQ1W9ct%;6G0@4$$KmwAk= zH{sXrdh9DHFRhUPAU7{QUK!5y zclKN%eUVS>en=G93ZiI3Jx^5eFz@TzjKoBF8=2H-Fe~!A~Rwi%H3-V(>E4FRj6WB}SY1%7O zqk#yq_2&SD)b^upPIYaZ1V6)-i;~&A5 zi00>5kdyiTlx4HH;w3vQEXrrHTkHK!*QIVSVQfe~*d$PFNh>?Au6t+h|_BI!s-~|CR*~Zo**J!)6V-&da66 zG$F6{z7(scz+wjnh_=&0M5Mjr=AXZkMG5#+IPw-8=QL&ndMhhV+9@Q?A zqqQyKy4{_v6!2foXmGVvG8TSXn0OplQ^&OX&8ZVXHhJC`+q7f|T^wKB(@V~DHm-nl z&fk4g$~khwF*XLdqrvpG&`SuXA(%!A2+K`XG`%+#CN^~-Yi2VL6wFv=;N zk%>JE=?nUGF?o797QuBy9sfUciA`^# z086}<9?~}{Rzs+ezf)M@-lJiMY@<>&+t#7GZ&5@icl79EdUNng5~+e!*m!j`u{k*T62?tM(@BRU#h@Qz~l z*9n)&mIe~`A3PEz^*Vr@pI3<+LaP7IckjFH0T==K&M%TEV*&BHZ8Qlm|heXfoIDV0eRu!Kacxr^|1{c>Me7sHc_s@ zDVL{=b=L-w*6@4kjfDORxrd0Bqx>?zk(q z$y>?qWIpRhx zk&4i|))n;3C9%?10L;7m(lLp1-@g=YIG_njT+1+D(33t z?+u$gntO>FD;o|N^!6Yj$O~rW5!VgC%aGei0F>tID z)esUiOeW@evMJeE*i3T^yOI_U;QU}LMe&!So+ZcpH+-r7`tSHsL(0sHcpI{v#H66} zTioj8Sc?%2*!N%1(iE-i+z*~lda_?vz9GLI^S_Y0Q>Xi^=y^1W6E&iHLbmX+ul7az z8l_oAvd#~s+9OqZta;=D%v;<1L2Hb>`nZdu0ksiBcN;-&ujCY^{t-uZ%Q$b`)ol4R zq3>_jEPpx9Wnr#>A;~!BV_Z-YKMfXj>fNok?_Kv&pDR^X8b2R$PitNJ6~}TlY6nFe ze2u=1w0bu!3Gv#)Vf-vyL1QlycRh@{W@5FzGlTJ(hvX-YHmM|*FDaJAK?gYBJ6%ig zS${~#=3`6z81E*@H0bIvb@H%DiXm`xc;| z=gF&RM5Lz+`IIB)*ybW5ed#X<&K+o?r!Y8-cozSkINXDq=-n~xY+gR^&BF<$X@TR; z|FpIFVLN7s;mReAj8tme!X9%HXnFWewC6}%Z49CCQWL6$8Lx80Qsw^z{#Jdm_$T}= z?fQ54yS&5uZ|Jvd(?RED6?A6~g^3B9;p+U|GZEJPZc&N=)zwkjP;104mY+O=LXEnq zF;fOd^R^G0*O`b%{<9ANvFYnEkJWs~>I+89fO~UAOOw&P5 zmlo-WGv}DSL;1T&y;YKiM&*czDCJ%xY3|89q=h~zehR(<#}e25(O&8iO|u>IX!+0n zn(kMyZrbKmk0a>jMk zzSu(&?Y5X!?A89=WR}l_L9B&EK+mEE!N;8}2_WubEknaB#4(KtVGXr= z>0^5|yevROy=cQ(Q3llzKe%KfVGqNI88*}BByE8?+ z-u|)Va+8(bOt#z_fuF9vyzZ&xX=&P)&n1fbKjr^LvRO)l!-M(XR-)`N3gVfU7L_QS z+1LqXHzzxf^mt~U?+J~5C!nDnc`tTLX(&f%Hp8zgrK0do#nJ?I>4sND&@u_-mwJ29 z?J8F!au#wb#C}p`rWHfH1YTK*`@nO1EsMojaqi}9VqFvglOp%=rm~ezdnC3_$fN&s=vpO+M=d}>-;Z}kZ zS+&=^lfjOG!T5>#;Ki|P5_iW*x_IL$%IH}~?fVV2ukuQYLhzp&o91(qXqoWe_2O}I zx>M0N!2}&pa|MPQjOUy;rfCdlmTofFPfgONT}J}1bcwd?6he=LnvVp>K^PdzP# zCDlFGbh1dM#crtZ-uK}bg1^;&xB!3g@g4#>V>MU< z;XjNa?2Xr2_x}qPHz-|H!Q$8yW)B@0_99QHDOX^pUP-w*frYT};5IR>b)hUL#N%Gu z7+wD`_vQ{uP32YJ$`k862TfGIGJQB;nREYKb1vJa@>uQvtNq~m{4WSU@iz!BV_@A2 z=wjK?sSfU>j@oB-#GIA^=R2y zOGSL;?tHWl%Vs%6ZS2WlBfRdF4qq zu$6vD>#gsE2GjIxBaFQAV3S>E%<1Fx#kHivNisLxJb9G`@2VD_h@hy$F=ffCvAp?mD)J%aIcUg+t&zkK22{)+@|J zpBm@SeoyOK^=3Tb^`3QAkB?9Dj& zK@E1il>tko2*s!TX?u$g>ss28ot=p<-QuX@4FoE-JoEPTgW7TEpg@tj}>`Yr()UWEW?^4@+G}^e+yQ(cJ&@d6_Ty66Ygv$a0fMGWi zrZhDL_SWsKwfXO+%uCYXn7tZVlig*1JKl@PD7lvH^F00_K8hVyBdOSS(4zvlL6?M`ts%dKKeYdn&E=3IUQ-sL}oMwn2ERJQ@9(DX!-15CG}67B0|d0a7v&ZUn8^GpP)s1&w7?fn(v z%w&N|s9qob+?1%A0I^_-4eS^nVb*FZX0Dxtt4m9y-X519#rDi;VjT1#qn)uUiC0Uk zO&61DNu`ZQxQw}2`nheUO9v5O^@heEb=x#@4Fn_*f2}!L$T!Q<<H!4V9<_Ivw**9(dt}N(q3McVr+d={;D01c{+rwQ?UT zVbYMJT`?n_FYMT|S0B>{mq0IZM}WSaJQn4;@ITE^U}=2WEJdNF0LJcJ2>Bp+a{Q__ zW%>Q{gob|Z2%DRmoOk%*vuuriFE!0Ep{*V8Zqw8(E2o4Q3lW;EkY#ul--5?v>Djl@ zatD|LW6srRPDFWutXt1wF;JRD>WP}08@Oi8HF}Q^=bN+3TB;P>5dRbcQ{z@xcr!Z-<w`k00r}$u zqo%DzIC8lw{AHtEXZhSZ9;T$>lxa?%D6_F4*O!$KicU{GF+>qOB>GuQ=UnI8vRCi~ zkfb67kx$59I%K|3p5U6KMonD1=A}1etL=RRi$;9a|L%Mw39(^gUac)Hup|;M|4Pq{ zsD0ZRPRtVsZ$O5Jwg9s@0gQfY70YwcBY z&NWv#F$pNbSo*7g*CpI#MU--%jj63g{oUAV#8sL5d+l_oVy!nMufy)H4&&3>jH(zN zb*(37bm0&`$o|lVPPS!HbUqhS5;*tnJ7rlSerYe=bP%iNP}#;xeO+P!J1i8>*OTi? zGV8G#t715*8TDh0>#vz-#adgAZK{0f4Xz9Bt|s55HRb~`KdIt>xB)4-ZBR=RdQ`rH z^H8<(8fG`BSb%BtR>5T=kSWjAT9+4%A`+Py&<}*W`=<7D=)8~jfKmR(JK>V4fbZ4d z??hbh1i%^%Uad*92$89|X684b(1Slxsb_rkrN1K#t^ zkmY{IYUDIGeKdb*lctjMyt0xw>*EQn5dhV&o!9Xen)5^^xG)^*XRvB+iVZm$#_z(^ zhm|p-iAJ9UZ2Uq5aK^Z9V{TVSzy7uuP>eR7t#+V^bvk0Tp*ogoMKJy7oxQ!n!{5Nl z*z2z~d{e9`D(S_J^-4b?lQ)zKEXtV2leSzRQOQ9%eW@j-B1%w5!-s&6KH4|n=cWRz zxh^F;8tL%5E+S)J63=aV&+q&p!0QQtkS(QJ0sAH5V#shg8yQ+*;{~@0YATwHz{el7 z7KX7emDPWUUa#S9IO@Svtc}x9(xt{MwkMr;XCbwKnFgUzEYOGO2+*3SD3w`QFdUoL z%{Yb_zNUMck-jQpLS^9UY`|Kv-p+UY{B6%VA~MY2aY0-Z`6S3v1#ubhn80Q)V_lNl zKeKxW*6D?J3TRVWzI{I2J{oLuV6EH3?JnCGOIvHp4kGba3v{P^4TmiM>H-3( zc6Di=+ipIgv@vu$zuJ!j+)=;qfA*ss5eb=3DsAky_@a`nttKZOcZS>N6tn+i(LJInrNPpC1e5 zWgkyps+eWCzfV+$os?E{66+Ciub!?g)7S)`Bx4*jN6FuKkQgFiw=khe-BBteW2f~@? zB*XntAJbFjHs^IllR7rQX~qqSrt?@g)Ai!PlP_Mlv3)*sE<4hs1+>!M+u!JAe9Q9& zOD-olS`U-hh&xC%zY~K06bRi+B1pUAM*Xw*i8Thc@t>VZgptNybMEi?z3F2gcqR@2 zFwpV*c@lKP@d~PDEPxm<b~g;cDX;3EquiBJU3MNN-)?AE9(!EZOfS-H#%$-Pi1rGXFmtW1c) z5j+7)Vr$OZ>0Sg$W`oOlMmUqR5wX!g1mZ)aEdlLwjP*pNr_hQ=O(9M{yR2QwEFG z7G$05>#$2pA@6Hs{Iv~7lcbP+cOz$l&oLun}Ce=_P4w2j{{;< z6P}M&C)#cTv$lYtjL$6e2u>#vNjyPWG3{k{7AQb&w4Q>IZ)4yDjHhju>qPdQe04)h z!>yzH=(~IQX{frpq-fv!%!Jml)%}(FrsJ|VZQ67|8;R#)y#qzF2r#X(iIte{c=nu~ z?bLp05D1NUWT>x@mE+?TVE582n6y>)aElx3vZ(c0*2@^O=H^1G5T=`+>L4} zd=18bv|?XO_-fBF-2E^Vad{J+*}oDLE&n1wTthbw4`Ky8%?of&9BB#JHwAH_$@I|i z|4c*jZb)C4h)MkY4D`vA0AU+9afY78N6A*8B8hgti?&*V)jEIU2j*h)ls`1x(U~lX zrfrV{LS#^2cM&HJvy1NhSo0K)U~u@XkvF_Oe}Q)bbJNK{Da633-kN%hZ6C6o-xWjIc<7pN>0>pXw+wP_b}IXebByMs7~ax0LIzSy^{D z_D)PS7^OER)J`Ef(u*qEL6hJmhA>=o5}bFxLTlqCWiuk%-URay9B!WC->{4o#`lSZ*yv>9#I0q?Fkdw$(<6+~a=z-$X&(r7>S;cF z6hgQu{?#``YQgiPVEdr;@*rhA{FLdvuSZN`XZLdF4o6&R`@+N>IdIvd}%G$BWD3y6xW!}NFT2pmQ!R0vs>ygHpH{?;R|cU?Z*CLf)0P*~0i z;%xw&sWsptNA^chRIkMTSPz-%7wdnX0tMw7grrAG>hEYU*Ju`TIVLo>xBW4!tK{aD zz_FwTu&D5u`w&7m=S8z*r4+xJYk7Cl^O8wk-9gby zbOT(M>93Y1Sy<_@)!yLE2pvbc9;0Fq3; zn_WLVu`ULFF<+P6g^}HPwE2rMlT|H#smptXQTS0*1Vw1I)<55JOi9tYuV?Q4w$~Rh z=}1`DK9c*Vk_^7m#47G~yuvJ|6{ZISEagt%gJ+ohBs%Al!cNG}`EYdR2geS)^m3LA zA~*+zk(atW^E^nNo{#O(@i)P$w=GG`(yf4kUmy506NzyBnE-F`6U#_i^RSR8(5xUx zcoZP^H{+fug(N5hnooo@wV00~a{6;Uh4yYQgb5iHb8}eg8>ipUa^TCg)<>s;g4i(~v70LSwqe-|Lq#2$t1L1Z8sy@#huzepBc=>fB2@C{VV~OS z^X8SMsT>gZ%sYGwrd1=h@2EyhsR}Kx$K-Iazhm(o&MROwwl}Xz3MLYddA;X1m0ignM&}NDD?*Edr{ACQd`k5sJdB#hTu!R}`suCC+1< z%UFt<#!W^)t>%~;W3j^sg>y*G*|%7Zss&h9fnoPKtWnk)z_4~)LDWy~k%GzcF zVPOF_Ek4Wd!m&vca^H{11Or@8UZsmRVKJ3LA@T1M}+l(?$c~1&FQ0b1!O0 zG;WgnjyDiP1l9+V3yAkw`#`f>WPdJ4wPtq-4#GqTVi)v}r_IPx{vrHA>w;==ab9*P z6dpydsY=(tsmCa4u?FbM{-8@x^EpdcFe~C=rOfXO#d)I{00qYDlrL}IWtK{U` z_{ug&R=)t}+&kDEW7AOImoOtJXG(xcPhV0u6OC|gxbeRG2_i(fbp5^+!a&dEjH-%* zbO_(^fcbo*A2gKq)ur+w6#ASNu{b6#4FZyznZwj zxHxSv2;nCfK5A9aAoLXtww$&#W>H<2ke`&#hCP|V5WKdckN$CJn29UC*>@Br$X`oo zXkF8|~B;B?SP*q&b|fPw7lxKSkB zSu3-*IPi19>JqxZ6Tjr)sL#ngQFdT+qQj9HVtGX)Ti!mrHB{++eB{?E^Pa+$=(7m1 zZ|P((k#GpQ!^e2xMAjdEj+QUoQaqTF;Rnsz4G9jjiULaq6HB%j(R68%5o>WmmVS>uKT}Dd^ z4+TR$0`};66P?{yhn=dtvW-!pVw|sQH{4(m;{&K%IE4A?{Cq@ub$}wXjH22eLPTdi zBJ>+3KmHXPnzEDwgz+t5pV0xYC*7=ET_O?-HEyC4$ToZF*(*&s{YY4-IvPF-$(gkE zOqFBbF)-rL;yB$M6X5S{XOaB?nU%1RlA;2_nVMQ+7?O#I_!>ml*0ROLE1F!x`uSUT zy}_bS``$ZQ>27L{EK(jECMlyp{gCkV_2$R!cX+gK=0cx?WvLv8-DmL+n2Hc(QC%om z`Dv_Z3#!zCJ>BoMf(~sb^T^m)FO_DsugX55YAw5-l@zOBnB*%Y#fvHm@w5B5r=0)v zvwGfOy%LmJlI6cUB(h4^v74Az&}WM?eer~IrrK9)OR4Oyvh$)bP$%--A3G`mElgzm zl^>0658brydGD`I$BeXFYWR?bIwmLQkrygW9DT_D1R*fLs<=EnT|Hpm)toY$v?IWV zY1LBv5i2DN5x6r>)a7D}izTX!-PU^yP+QlQQ5_E*X&)s7&ahH)UWFRXMJT-CN`4OT z(@X<3e;{n{g#&vSqi|%X;q6~lyn*%9wtAEP_Q`*xXk46R+P9#=?B`S@fBPz?p8QD|_;`P(@PpdTSnNA?^wWa3<>p^L zKAqz4i@-r4%qmj19^U(T@|YwAL6LScdOtq9$@y5VHK*K)1lGvQ_N2#O>C%_J8|=xC zH#Hd38Q=;zlj)^cWba?Hx?V%6qYrYiI;zoQbGWWk3+}vc4F~lBi+l;Yg}gn&&WBt{ zxxcWPg3O=qj=WyXdL6UzmNtccz9va#f%|X~;T9-sAX>?c`t(2vEV&zB{md94pD2V% z%r}29OGRhSEh%MHlut!!qQ&SAN{=XBlr?zYbRB81BgmJGA48?`iY-`LEqVEh7f_5mz^1R=7E6&Vkx7+mv37}_cNI! zxm9?x1^C`#(jSNFzw?PH;vY<#RWMr)TdtpAQ>l!0hG&F(|~?v~0&9OHo*c1q4N|^-?e|<^RwL8Q0y5RvlZr^=R6d zB}qCPSjO2*>%EstbbP!}Yv+19H7`ZxEOiiXUCzW_xAS*CVXohu-rvB`*=Mt6lymA6 z!vhuJ%qS};#DI$1Qb48e*+?sHeQzX9nH*;bGLj6!J1Sx}(^v>btTnsLC2~bjOjUil zctn(vxjYDN#JKg#Rh8mm`wCcEp{jl$UV0GUljyogT`FP1jDkXvNKY_>hD+5syBM80 z{Y5l@YIf2DOY0llVXRQ$cd=YW$aKycBOLe@%oEP|x6fNc0&9 z!Gt8?dlSp?2$`D@917?TGDPykSz3mR!r^;FwuV=)mK6=knVimtYY-_-BJA2ote<`1 z#3tA|Yo1FG)SOBR2wq?`sd&dN zdaPo;g||mJj0UXd7P&l(1vx4d&ofhZ+#(dn_GHttk3%*HlEA?nd-`I zyPNZ1-V$jO(iYkkh!l9CibH>S5Ga$5Mg0pIAvqWT&u(%IP*cWrquw3yr%WEGa6xbE z#QzIGwVU@R($mxc6<u`5l?tIul|KgAynw-tL$jrs6AO570@uM-Zm zO%xG0c^*cOsI%2J$9Jr-cK@9UfBG6SK)3zph5p{5Fxxif{AVw44_?C#=^xA}9jfa7 z=aa7#KmHYIf)3%&?}BceVE(_ILQDUGq|-%<^<)pDOGgWgywkdSu%r>+r#B~!%=^h2 zvvXQm{wrc*$Orw;--HpwW&Gxg_#-njy1kZ0oonNGKQMnv=%9spY&SvPkm{eaylfEI zERbHv{~XR6I=Uu>iG9r!9hf4V$dcb*D>@~ff@J>JV9hj;8so-i>{9dp{sgZ%U;9sp ztWLy+D)Fy_qw;=+|8?0pm~<-tas*Wn*=;g^=h;XkL{?|~;Ng(KOd2M7rF%NpD_eR0#G!2r1^o_L70 zJ*^CAy}T!;*t0t%5}N6IaBJ>Fd$}2}CskpiYf+KB_5td#tTJsG$xllF-~TfwM)HGT z8&NxpT9cL;5|8z~f*@^g5sqg*7b)-L+p{+Z*A9jfgwy@HQ`@n-S?F!Mlfo(iTl2om zwFj~$)Sc{ML(yl21A3k?1F+my8kaQuacE%xZ14f1qyrk{$&-dlWi?JR+Om_&!<0|^Gb5HvjGL%SA4AnAth>dBZ7PUGRneVAfmg zYQ}G9FSTZLyAkONtpEH&6`Dv$HYEF!1fgzc=H!jHRD6EZ#Kr(KqRz)#DyH4i$whAPzW&F?2C7JZsar2y4KqnghsP!3UOMnk|_E0<=&zpxv_l8eKB!% z!L{2cG?QC>CK9wT$*dFv%YDS|PvF%pJ@qnO={(L57PhJMh$~yj>>NRaptb=!mM#O6 zwIU9F%(bE-?)XNaCKfW$_m?Hssfa8HQIGtKg#mk?Lb3lQ2I%s9_50JaGk{ZlO+K+$ zL;cb#9rk^I-D+z<4-%%fl*tG`YJbC-a*O8JAb1exglIspk#1|Jbg$)#yhsa0;=Fi9 z&ztO@ptxsbZIj}1Oi5l)37#1jus<8*aet0{7b8osJ<8cs`VndfjqkTPc~}iZI{_uo!E(NV1?%~w&=qPuU48i* z?eBB`#jS0pwYk3yBNBw6Tf=DcP~z!*@`_&%W4Pc4qYWW z>2=A{`9oFd=Cxzqr9?35;oy=L9|;NXAkP_Ls0>;HO%@K)!V{3fYN&;_^L|Jb`;kt8 z#$W-TC1f21sn>FuzUAgLh{>GGK7Rg$=*>Sd^7!zVXA@@H{a0p75T$>bbUXE`q~A&i zQ%NV828C>l<6uu+)RLyW)p3<29gQ&8J`<0|Gf=?oYIN4{Pu){V`Ko?k*rfXe!$9PH1S@mu$$f>4LI0X|3kv?=gnsUKJ4xgIlRBhI zY8ImmlJd2nu9F0et*w~pM>)VECVoe~MET~{SOCVo*gIS=q=0~r8)wBx_?7=e_9p&) zK0dw|7{sKz**!=SJy{eLv@SrDTtwS zRZ?C>w8KTrLj`1(J~Wcv}HFBGmopkfL6}FG9%0l4zenQ6wH)f{ziV zixol=fid2l^-5EWch>_o_o%R0Y)m$);`L74=>%Sx`hxPQ)WgDSY=ohtXB3ntOE>|0~8!7HoT0Ow5E)!|4FGhpc$23|Nr6}GAI(2MU7z1>YSE77tLU0-Np6JGoZPg?#Pqihes2 zX<`|5V%s!23#y?A)7=tGEAgW=--f-pOoV9)Mh8K(7L8d25B_-YvXB1N8Y^|>7qqFn z2!n2L0N1rF?=FC5*`LNGaP{Wx4w`ds_Yw^9Y}{7Chgwg*(uP9$0{<}|JRgAh8wuhz zkZY(+x}MyNr{3?l0kFeaTtQo@GryY-l9&2Y8?mYu7ZWvgvxRgPI>!?;LO=EX^2-jp}| z-0@v;dbfaCbHvCw&ekPG#hetUw8P^z8&V6PJyxeX7JfQO?+$~JBKFo@DgnpHkhZ-W z1X%kneaz(JO{W)eZ|kCdzFKi9?I#|x;A2Z4s29;Jo92kPp3V3b`#NLd`exg$?+I-PR`N^T=@4w=So(X%!gtCwiEMi1+3LGr7UFP6+*e|9I=w*8 ziV)SjF~c`aE zR=Q?P3YZ5sg9xn=S1nmqRR3LZ?)+x>CG&FObfizQJB*&nK97Xiq$CMCma5hK9ZjEH zpz)#moIS(mP*(`gQ+joh!R>lFcZQ8&+_?YT{hW^+MqcjXg2U}$-fO}kEjVD~-*ceI z5lIvoZ0U&!+%rp9nklo;N;59Uq<2f`a&M84XEEcph;|-sR2@oMsD9$!XYGLNrm-~p zBd-tMMH;4K=`85(a5BsWavllTvqPP>r&nk3>I)+L)0|K%AE2Td%%%HzXPnaG*=Xm5 z-pAv~j3al~_fibfCC;}pPb4o4+=(x37i3~3qp^ux#I0to5mQT8s%u|IQu;5o9)9U7 z33oTcTzXJ4ySmry7)M=b7drZu^w3UC4=YTM+mla+>4xtxmUX`NbV+2Bz8_^WvEYo# z$!1vAO?(pSZB8}xV&C=3O}AH>y<-M%3o!2-b>2?jgrcmQVrBE5kH59oZT{YAOD8z1 z9>Q_hCNg~U(YIrlGsE*36^73W3e4>My5FW1_%RyPT4fz_ez{I;^xb$`uV{wgIc=Ap zXHEWeq8^fPon-$!ZG(A()87*ULf_IC)&Vg0qgx`tABK49aJK?(V=`sqQy4{^+p%n@ z-p+nAyS5DTj|^vN0C_nejy$}{GnmiR61Ec8>x^$=uK-a0`>Y=nT=UuPUP$+QiRt(O zS($7lh{_Dvbp+rKJ8OIXobg#%uzcj#uX{2AO4?k_>cajr+!g0_m=edetwM~~IEorK z;~a~NhP>mv1k#U*FD8a2!l;o-a+`C~)jW__(lX1Yu)EJ4K^p}p5(|*+c(HM7 zney@>Z|TC5L9V*5qjR(ASR?VFhYqV3il{XtCXY!e5on^bntmGpN=2a67&u#O{EPF) zVsu17W}{4RpZv6aMW?!TCE#CQ+@|p;j){=*wq&dy$u})W5)--Vc|^_4k$`@mZfLiD zb{ijQKrp2)uH0awjU>NO#ED7in$V1+FupA+F3^O<4=*UrNd`&N^-oSDR(1lQ;<-^) z{#5IZ$>*k$yCb%ljZrS!$!k7%-;Urq!r=wCHD9p>(jDGg40aV;h>A2=<>(;R>jCr` zp!f$c`8^sv>3vLFi^E!uAMUQe@gO_k4db`0 zoR5iV1mM~2{GZilwEc$Y#jigwTf=LzM*BS-Eyk$99q-h~<~)A3a{y`-%Hz2(_@vto zU(BzWhSbuGS$uL2QsW3xq$NCqddLoaq!~L6Bh!NDABbyT;YuCtI6lx+GI8(x!Q*ng zA!zU_k+$7AV-$d3sY-lTO`cdk%I$<|YLUl-d$_(+TF!;z*VJc4+oo%pa|3fq0}lbTNclu;iiHmMjQ6JnW5SLcjG7$tix|6WQF>Xw(l z5y#QISe#mlX2Bh$E2U+I!@&yFS2~#M=ca3^X&-UX)!dw*ilEBn8(6#T^y;9h-3VXl z@lyaza;Dm)AxTuWs#~`MW`^8QDQ0TEoe4h97yLANlYa9q_+AaY_EVJPte1PTN~@uA z0DHgPyj@NR_m7$bzK+GUv*d+0@mWmm3=OTxL%C!Oz_e}i)0N6a0>SQ{?$l4y{Zp0v zLEF`2k>QGvh~$*0+-wFtS7;P;ZM*}SvUqn|;;P9^$r7#wLa>xBnDdVGx358^=jR&g zw{1g5_WEVq&EcOh*I88`6l1tX za8C$!f(kM7)Kgp|O=PX9G_L9cy#Js)-?dn z{WxytUynY2DHKaQ4GV_}qTVC$WU-mU5WR-vrlt!yYoMsABElwMQDzkrXhK@>EHqx- z&Hl2rjTXXfae*jusr`^^Zs)OKZ{S2e2+%DwmG=?5R&nhuW{u`WXJFJq2Kb`!1O5C$R0^{;bQr8#r z?(7F>Mk(c0(=Cmc9&T3AESFl2)A$l$0SUwhm>zaG=RM1ERP8RhsHlnYg_>SGrlz_W zcnLadz_iij?6$flPHcuVn1)UNFz7CB(w3FHnio^4)x3$V*N%ViJ)L?7_^jp%SE?~$ z0BcXy*P-?;l9|n*k<@xUv%8a%rPJwa=bfgdm{j{UhkEyHEIab%cTaXuowR)3Mr#et zF5S))737TyEC!yxD73Rhp;E>0X*YQ}Z4;)|Yw{|)jjsezfKeVPL&}3dQ7EKI#k%wh zd>H&8)%A){<`q!A>x6+{Uun)5w!G2`o--d`0V!k4cL{1bzr4STbN9`BRz*@<`575-HOA@h$6s#SRhxu2E>?#Q8*x69Fm zMJ1&Lc|}PjJL!UKIXS{Ui$hw4^8prZNA$4qC2e0_%4LmCE8qb)Q|-L0RDJ@L;?~@+ zh8$SL6MzO`%H#gEQc_`MgMAu^I9s_s62zj$Ye_Y((%RBc^q<*mAvQhY z83zJ7>&cPG_G*d#`>5uj2@Aplr#+@`jAkjJsS8;1?qx74_77Z&_oTuhS4P$i89(1= zY!Ti@^%cCu=DBL!r%vJ&)p2syVwEl6#!E{1{S33j7seavEpz$$Z8@J-->TE`E1+HM z{cxzM8Dh95bBs(T2U;w9-?bcIlLPdU+|E!V#t8}4R3a?E+La_Wo9@H23MnolCiK?!W=1Y1o&|a4KpDpF$?VUS2UbgxPuE?7@Mv~J9VKv zNu`*feWdtJ6wG12R)-~uT3U9Pf5SHX{=Z=x0vSvF*VKZiQl}XSM$at?S2CwvwN-^# zQ8YXrI)u(peWIsv^mJTeve{56Z%CPgnnyITpX&jjV>z4RS7!*z;!t`{?IL-ns!TaO zISoxAkdSzG>Vu>TPn&m|!Y01Ys+#usdBYbvx^}1Dgq>Z5I6<$3p^pq`v=YZN+^wHa zM_8v0N#GH$1zp*9dsuY;rmt)7Dx<9HJZrzs%=sHwhNSynFMpHfjQWfC?)^=Ce)P}ahVyfGK+SE)~%a=_F=Lrdd!2s$HA zZ`5|y^^mhcaLMI=O53?`+HM1q>hQi4M?d&sXIS2z?jS85p8US)SSud?gU)@#u5U?7 z>nRCWW4`*IJhhF4Lij?h14*xsKzgBWmEm+$Y#x@f;r3j>w-Cp&wYaSPVIe4O-eRrL z#&~WIux$-Gu1=1_Ewj6J%KvPFO@XAs_;1Pf3pbEIGIJ>*LMm_kbj#Nvr?FdglbT~Q zEKxf5I()%kEtxM@nck8nL$YeyW2JXXdl1mSh-|w0#fI`GeZ3qW9Jdk zFhq%HBfI5_U_{|8JgJBE#ml9`=Q8G1%cx7IU6%zj%Y{5hjM>o$p?}!Qem=hztlnVm zygFxp5W84+O)5;>6pNjCVFG!cHcFh$t#t;av$_zCcbirGo>O$rW(}hC|3MF67oJrB zu-|Aa85p7$#l{`1`>rUfvbZ73%_FyEb~voLBqYU``YwbppK51xMz`RS!TPNg2`U7w z_SlFudc-a8Ap)N(p|Zby93JLM{@alKh~q&LpX#zPso@R%hyHQ!b1R00tQWAuKRlDe zRu`oVrtqu>9c;%{o96mbo5>p+R_YyL5w7VFc-0Cze~^ei&#Unxln9!E_EDDUuDc5k zzAzgcw%VTjl`{6~V6566_$rtotv7D9@Qx~9R?EFEBAGmLjS z7hIw#`xt6;aGKKfG)=wW)$(Sxf}#Sk05~thZOgRHqh^0R*aa|F)^s7^bodbK1zC9Z zyFQhyz51ebpb>Cr`aB)F#_dmP~M5=P=}$0atYoAGd_xYu}WV4j=>pM@7Myh{6=4eAqLvnwpB{}#J85)I^^Htn#p}oZ@MVXlw z-PgCalFSMyp~C`Oye@pIxoxTC7;n3 zqng{JJ=*8Er_WhEs>+KB>!JO??lo8wATzF%JoOeO@9~}l|H;Pm(z}zS&2%KG z?YDTC$q}~V<@~87s#hZP`%P{Sjri*JkG>`!H=oN6Ji zeg5h+e#~H}h>MpAh~=$A2IMm3OtKV;FsF`AXd6)`irfXz?f#*H&{^}z9H(&{ulxFC zS)yYRB&}pn|8%-iag1#}>2jjO!OyY3*HjYId8qY#>_h?ie7dn%oKRGc!sK(?hQQ=f zJEq0zjW!pP>J@yXMWTLosZKjfeKDSHa1~;CdsRpER0mCL$T1GNQ(l~Od^jSRzjghA z`B6ZC*wb|0QuQ5_H0i+zTgK7#^5)Lh>lo^cPP%(5>Sq8R@9WRhw`qKOJg%gX*bmc* z4}3Qt7g0Kokj^o!>k)cxo_Qu#ehS2zFL(J12G;gWxNLLASUs%a($fqu*aiC9qwnds zhsmMKco7DeB?gJXgZrb6tps5`J6C!%G^~*9(PQkd?xC$SxPz)!5yc1T`?!x-^EamPIt2+-hbR z&kA&I32FjSI$n3a%MoF&&=tGnY;k+f%N@g1(IEe`e;-Bfym!L^*T)v-zZJGP9aH=l zwH#RdpA`nD`}=p;zC%NjWmZ;|&hFfxrO2*lKTee$r76ErOl$w$vjZA5W+B%UZ&OL* zTK~he<|V16CzHJY1X|Bs(a}~@|EBrRm#2E@w>?(g${JkV2!r%g!6; zjN|%Ljx|lW;P+K_6i!P71tOQg@kK;ok@p&=(Y1hmyeQ0)Jtp?SKzSqR|0b97j`gkQ?LbnSOH1}cBD98TI$ ziv8c05P;)}_p|;JQm1{c^lw4gAP3Beo9zsdamF=Ec+0bYv;gHBKQ9Lv+Q+v*j#SG} zObh^gIlim~SVoT}oSuj4uKrO3F&?Q1He=HAC*PZfogD5p5X5#>O5Ct~hVaSXRDe%% zbsN^Ekheh}4bmv)S+lz;Lfg(b_&>x6b9TDq@_!<;NnVBd1%5A|i3quI)@3xzG#zMU z-&~*f;WQ?lHl&%Q^<|Rm$C+_KU2S<;K33 zOB+2Jcy@BF7cHmC{Ya7Cd)Q$tqYZ1u6=m?B;A7T1M8gn6B6+LF&@`41glxWZr>ZV_ zoi7q6`W-&DWQ8ScbG2iMxC}2pnM_}RnH_R@L|vcbD4y>=j?rMB-;~1^K?8gC=w;J& zxB;jS9`23Xrd7V8Qi9yn4$!NPEca7nvq48Yq{T}5?7!o~$FAs)!GX^SL<{lm$ZBy#B{_$LD(ZI*c#kb%2)?t<6Q!GkUs;bSXQ!xFeu`h&_`8-t_ z^qoD}WWN|T8D68)76HO7OG!dH=rN|L92ZQaJd-hId#x7oi(`htB^6LE0n@rWUrBA*9s)FwMb;D%a{cm|?af z7&sCWogQBfh630{c+0D;wgNB~F6WCrvI-TPlN=W0)7ZR%i}kf3F;T!Gy|oRN zCYI{F$4KZ;V3p12N#gIouU_vQLwk##`AKfHCujGN_B&4C;Tj=EiF4fcwxYhC->cV{ zu+3Xrb?o&ef5CoQO=E^-Ih2ivad?ti8nzbHa>l$N=oT7`ZXcg5Uwk}WiS$IA`2mkC zHzs-#9}(Wo{h=SvhDWNeXVmX2spE@P_Am#~YnTD})MI*?Ydu)&P#cu1W0d9$6!?Ar z{4Sv?V3A%QLBsZXrHrGw*%jbJD(L%Tge>-t`?eP)au!qfu`OOM7E|T{JKt=G-RBk! zu4cMqY8A`&id;+`?>%NWM3&%|pPdw;+M_Je_yv)t=b`h$E0CV>2%hAw3O-K>MofDR zB^-ZzzAtv6xr`E?xKCnCEG_67)s+|Bt|kP6HB{J%Kek6&EJ>HAuI=|Rm*;NgBkaFy z*}TxaL=9KGfWyPl3<<$!uA98rXmtGj=cMTDAK8`z&M=XhtbIAwvEualiN!V1A#h$# zP)IbiZe}{IwCHq?r9jklerilMzA?GO4gp+|q~Mmq56*7{Q?=o^CL-pkjaY^go1P$) zwb0Cz#o2#c78h^5zjN18o_$ul`hiRE`VPBx9n!2|{Ng4-4&l!IvuD7QxWWPHp5s93x%v=xdAYtK{GP1%{eq4|V7LS?qy8O1i7CD*sOA zxNJHm^TR}V6)NhOmv>r@WtviDlI{BK9aDeFPXN+$;!E;7d7o%I49M~NOP|j)y|#{2 z#J&@;((+3N)$iP5lBnWI9BRF6FAE3c!p+Oa+C1+sOd=ozMZIJQt;a2oC6`y$UaQmT zfEYG5HZZrgSeH!~@*|BEC`{Jy9o|G@?>=(+H zDt)w!K1ec5{A<@W{~`os9~)83T^B1kIq`#yVe*|B-OGe*R zj4}CGwj>+Oe%Wz-*|8PV!GB&Bm6+R3pD>8nUno5G9>@3{;my#X<*ciM&RHej7`2;K zOMcCBgoVDwRCED4mK@zrt)|q#jO-vfaFmf$oYvAtaQW}|l2WTwnPyVt(#KStRA3N} zHhIKmgRI!Cn!x+}PH;}!p+)7ez-c4~SUjIE;*RbX(+l+s(R)RdpB;2UFQs-%ZzIBK z)MRI+Ue9Vu%0@L05{Az*BN>-qr?=kb=3#JH4Pgo^6#2fx{n z^e7#6J8xUWHJTIouqFWC%LM`6u)Pg@tC$%7rD1y5bM#WJBbk@YziRCj<-Q0VDb+lG z^qNz+yC-Zig=?(414pVb`S}r&W3s@`yGnpkR&_cJWvTo*GGb39CQTr;@AWPnoM<$G zs9+BuEL9wE83vWX74lU&vj9sZRRG)tk65Ud>>#JM=z0jB((e=~hfh1*js}37%o;44 zpPV#oslW@f&*Fgx=EkVqJ!>9TYm979?%3ilfbBMmwt9AbTAbrUH0K$=MnQ-GFbCtF z7v4UWq0Bl2mh<#O4$Y%4XvS^t_^DDITJfK|Unys-^rA&FzY$ZwT2$2&mCYQa3J7%w z5YW-CU36#dZyt3}hT3hzQpV;c;~Q_dHB+P`Cm(SqgbO>m6Bq$cyII{|g=10Aq}}>H zi6jmkNVjWBm5c9ulcbX>5a`k#c9F&Sa#poJvZo_;5khs<`alhcNa2aC5E;zdj#E57 z`{>riS#afS2QY-I&+>lVkT7J(H8OvW?rsB81lWXcXK8$5b%3jF!K`_R%pIdZ8@*E7 z(06%e49a&*xX3c(=|_xoI`E{>7o~LA;pLuvqMj#&R9t4Z_(cJe@|I%RaazNJ)dWG={K{wn&!`LEf%n%-Qt&^2O`-;iup`3hr8P7nQ^C zA*0*ffT%h&+vAT5Xy)Vy@AAk~LpyXn6`%7&mCL8!qbyI^>_R=?E}jHjl#1r;Jf>6I zRGDL&!Q|DHOK7gMlA&CYP1EOz41*fzi?@?Ex4^H}TcO32a|Tm4UPI4@T*_Q**p5G{ z!7L3lNKPnw|?Q zJRX~qA$2Wd^Da6}l}(0r=O$fELDC49J(&3MK(0I+t={_p?6t|+sWIvxPyS89PN*!` zTVQ;|Nu<0yXT~d~_ioHaq!%japE?k5g%S3x)4*a^UCY@X#lGT0#l6u)m?G}?E@XDI}nlmB8uTZ^%Cv>J>WT2b=kxkf=e zW;1G!0!){w@tCETxb5ngzX*z-J;ElKn4`;o*^@M$ErZ5ehn}+tXTUVP{Cu#KQ-dTt zEhsUdv*72*=nN0z{Zn0D_=;}tb=@C z%Z})$hsf=lu@g~TPQzDf!sp)(a#){CS;kL0(q`1kqgvi+%CtrDJUHiwVv|X8igPfi03dq38iQWREhBeY{1$%6IwU`<%FB*p9&xu5k;!=a z@$MgK2s*3ri{K)6@)%l#<q$H^`?-l+uwtG2EUD2gFWbLO zsT{jp`wB1)?}3&od0z)k>CCt8BvzGU9X{hdI+AJ!dJgvB%gXQD^zgSn58e<=nm2$f zrftNv1ny>^e8e5J;M$z4X65c$k;WSOxd~ysWKFce_c>f2$u%9-F1Cp5Ei*W!D9c1p zpIb73(e6B?f%(I(77pJW;@QSTC+<=}V0zF-E5a>R!*eHl95#-$$3Ujl=hM$hL)4%Z zfIy8*ToSk*CNF5DgYzAJsa5~TMNF`Vn-k$5qY|ciWG0J(Lpgv80Yz1!L z(TS!wp}FRj;rN`K?HY|13&)f3y-k8cejU0Vceha*H0zX)_v-55)da+v)tT5hU0}Dx zRD=7tK9%g3YHgB&VEZ2fMFNAoLpvWhTuTF1&ffy|Lm5hCPqB%wLsB~$x8I&3f!|ge z*%@q!0&YOG*wlLaJrJ4{6FWT!&CVDsV}Qd0rM|VL&8u*QJUFaU9awTLZ+VF8F!?aL zE`uro+eVh9OXO5bzt9$0CpIiW|Y=^|gyK|!}!Gj9s1S6eDEsCTiYczG=N zxi(xni&w{8Vnk1ij#|gFLO)lox5d=2St>mrC45VHxS(=m)5%!hy^%(>p>q3l4?l#| zg>J8zZ-nt1pR7iP{l+lxUF#?CKs-+GSDm)YhWzm;+=%anba%Jx$Oxa(;d~B*RzT%G z+ndNSMP%n67T@jrgQ(6euaX8SgZEUMO9DdahgyKF z4|X|Ex+HWUIT%&v4X`WaEDSD;_-qp`hiNFveB+Aj(BwC;w<9k|r?L0Ez^6#k?6T%( zmq%D;{@ep?etgHEdIa+!%b9VZ5q?_b`7AO7G*v1iP7&q7ezL{+vc~)DrZRs7@5G66 zcVgGcNwBboC+(vHDK~{*KB+6_{@UjSjX?54M&cGId7w(@*=TtSYgeVtT2r>GS%Ax6 zti_JT%UQ7#k7{3Vwpr3HUSWcPlw{HOVE~95+C2R0yym^EH068{aVAJtN*J`&SkLG4 z)%QRx<0Xv>Hm?>v)?jGajO_6q*l~a16fu#x_|jK)d9i`mF#ZgCaa!}Uxvc5llCFt! zcrPy`7@Ae&;(vg8_=dYcf?lQqtHq`}j5w&?87|cd*kjZ)u3>HqMsBYx%S&G*I@LYG zk`3!1M0d4K z%f5R<-&62$%{fbk*T0 zEeuujn)fu&3^NO`x#vBJ`S+6B5lV@2mDn&w=|$viz&is+GtXbhIma+W(4syM_%@I- z|1B$AceMq9W|uN}hpYC~J<#}@5aM)Au)&0=%Uh!8#pvmBMfE8E8TVqC!8t>DVb7T# zSdAveM(#3^HZJEB>aM8hQlP+@q|slYUo&DU3I76((Sb-tn1hD0hFme*ym-p7Dx(lx z8(vnwTaM%Sf{Y6cY(gFDzPRk%BLTUrh;%1Q=}o0Hk;Mho7Ez(Jg{mkr*kVzbF=R>N zId_G$kDb0?Xd;wd>0(ZxpXl(yV#(zBhJ8a#>~7lqkSx*87Ev8o)F4_xXGt7`JVpOc zV4Imi!p?er^H&-s4f{pIQ#vQ234uZn+#cqOA<;v(u4q-S#b~p2)gJWC2tszVHF@wwfh_ zeW9VUPzcvV?vxd=^2HJ^-5)(uQX)}{eK;3KJcc}WttxIF>+Bqg;;Khp2;$IVrJj~l zn7#)3?|)DWWb`}F$!(x)4pyx&x6LGG!DGULAAY-1k2$tSUmSDHNqt2^@~uD@%~YvI zjhXqC!}uG)eptEoh-&HG4dxF_*3C_LBJ!;!E2q$K^=k5D?kcYv>1va*6NoA&29``` z+#3q$@x{Pk$lAii_edua9D=TW$dKFqkGd)|jqOh3TV5?U_2^GJUmR_0Huu)Bv`Nun zElO*UM7)uH602fD@FXjR+C;|)T`=^fjFl->sXzEll^}<;HC74bvqlvc*IyiL-|%77 z=;)v$%Y`N2C5D6;!xIY^R4XeakrMhhX@*U+4asMChwPXw*GWF%OFi~92$4>!Z~W0H zzJ5&-tKJoEa?m&)!x_2`ah5(SurT(u`cXY=<*uz;WFE+r3|cY2xoiGu>$qm-I*~OD4Bp)@6J}%a8=7Sr?jmOl4h>CEy5>8jc+lDh;-h{$aH0k ze|r>^8E|=_`aIUY>%;ew-2%iC0J&nR2T|xoz6_xCTSZS`Z4;%YU8t}KyyDj~w8+7_ zllR6PmYYMV&L|Z8`xzooRH)IKga_;bqhu^p^*<2=KSQSh6oSF`b zhCY_|OD-?bLJzY5zDUU0z=ByeNW}?+JB4fyo z&pr=6Z7lgv2>uhA?>yfAGc*@+`~{k|-Tn^EQoo@&N;h+EpFBTnJr4yHu|4`!B^GSp zBEiCG&BW-s&iDxPTyehBXe1^1t%)|-3dDyoiAC4F)K=i*D@XMgMm4?6_AHPTYYN%W zS4GYbBwXdko_kh*u0X;bN_%yyQMqcgFOiy3V&qlnJ55@5=I9L0`O!UrSd$ZHO`kH? zlI)0oc#gy@3!*q#w_^8~TAjh&WcC^$fo=5yhE1nC43=P6e^?JeNAEO>33OiqGaF0{ zrFz^x^8976suX9h$K&4-lR}l9@(QyUTfP)@M~WL-=P=ZTo4sY6B~853_WJG^4mS&| z^bmTKnHr)mdP@b{HH4}O^!I?^Ti4ml+rAUcX4$@+d61u%&4XylizA^-^@_|l!5<14 zNOOnQquPY)+EVFDX7+g#*5>_~3ZnOm9!2%S^gR_ejq{N*eo{_^{jkV&UbKqU3%!KK zPa??JFyDJCG(*zZF$czNDrEMI*)il}#Cj#hJd{DNKEiy^rzPZ99Z}bWR@nToym;bM z8AhXa68TOaF?jU|#;&b0zPYnsOMoTAs%un;PYNguRs?qlj*;x^^#apdG{Nk!g0mc{A`N#c6lLfCBScX23a z_zojHBF~fC`_<-4a{>g-Ihf#2ws!OUU$M31zq2*5?SIYI4*&mbEt3NDVcr7 zgQU&t1;O@N<&X1~pBgsljEf4R+fTaA_#MIW2GQ+&#NeIOAH)*SS=iiQ!x4)?1P#7L7C@JgvqT zj8-IykD6?{M2&6H^5-VYpv%6_4lrXV7dnau+Y>I%_ZgZ>CuYIfE4;-e_Hdz0Ia_?U zIaeO{jH^v0e2!i_vhi#+CjIXi{#g3y2<8jjpKNx?^nL-U27~`a$!Vh@ z?Sf_9dhA5nM_)#xQKf4o^5c?xx)yc%PFe2|hM(8ImqB?pwG*`&aUQh4^QxMR-rG z#GE<=Oq|6hH+4q98iP#2a46I5`8S@tt4&L2J>Bz$FcB;ch8^b-ZunaSnKjcBQI@n| ze$crDlKtrAc?)p`%}t-RIEPT~jaoxJc0cXCRfv`#Q;Vt{2Wi-tUs#yl_L}8{LhTm0 z^VTlp_^b>^4vCB$#2Ds7sJ~Mq*O|&5Lt;t;hVr^+%o5Z4)nfR#Lkvr^s|-eSmx=HM zzs90}$MDjs?S0PB75ohyijFSwcy$f*$cZMV(LtuWrviLa8C9sa%^u88+Y(vDp=*@9 zBWM|d;<`+pvO_r3r)tn^_kcbbkBP<)7Ps>B%(+8HT@YBe*6CRvZ`eiM4LDK1DkLFr zu_RB;)qVF0<+T3hf;Rl!YBes0&2^4d(IyPGOMHQAlB}{|qBc16A+r7bDfdP&Ru`J{ zEgWyTT9SpC2gvYXPldMf-a>GD&%L4o+lOpy=+7;o_IXA61|>KFn9>rvNJ$dPppyI;Hv+c z%sf=*3kpHc?Un540>rwpo=$Ad1?4me{4`uffveVqaBnDP^#~-DYJ*Nq?S=GwTeEmc z)5$)pl$aq~@s0LEFjv(9K3a0!#+?@F{kU+j3H>sM%zz%fx^Hi^v7Knd0Xr@89~eLy zA2>+@I%Qr2;aL%{cPw5WUmNLy(}ym(27-x%OEHL*Bq=DJtkx?JfePu5x;^JxR?R37 zCR-u^9#{BM2m;x>P|K9NH@@5g;N7lT_2+mKr3l)OAV)B@lDwkKYz&7Bq=8pyiHY~3 z4-UoZJ@(wlh0Eqb=5&d9>Lx66|1s|E)k?}fWDW_?#0h4{;6CBFZJ~0x-ScH5C^yfG zeLi0Bnwe$qc~{6O%J%oq{-k~*Z1f1yR5hz&YD;h2Z4THPI%1%fzd*RG1u)6 zU(WUX8+uEQxnQ9}N=#GD^BY!2Lbv1aa>BO7%fgYJEXZRTJKS%tW63msfrH~gj6?gK^#(?H9sD#(rl`*@HU69=VlTsGcPuxKF@(9%ys_}DH@5!6E!>2fWJgM?+uw%&sC9I^i z_w(?RheJ8tfp{Im-fzc1o1pEt4(K*w#Z0UktHQg}9sOzqTHj(F@JA8*ijGZpx2F6;pW&0AGVfE92S(ydvtC?*< zx}1hR=pqXZ-m)B9hUMHg;8T%ahJsW)Wui47Y*QOm_dr-tfR0Y^KQJ}>f63IAcf+Fw zy6?@2|DCHLtVv=*EqgP$bW;oe%(GLoR&^=h?0nw;D}f()k-x9=aM*R0&K{8~H39Kg z8_R?khF&mLQwRH$r+$^w3R4E>^lWp{y4$=^Iq7%zoGd9vT|f+XiOB7tA(*>HOdRcR zyI=?DaECoi=9^B^$}dJ`i>Wh)xt>$O6EIEOecw1rQ_RB?a}ac~U*GLNfnFo~Qdb6E z7N=J3yla~%Y^whsz?|@RU@rZC0kh0+V9rm=Oo(VSmotCUAZn1A&#O#DAX98SQ#QB# zo!kcn0goGPNm#K8D60 zwULPXvz4)r6`#ej`I6L*P*0MFwUccj&q@949>c$5bA3V*Pq?3_s^j69$tnh1v*)5* zys*Zu8Blp#bw4COP>9W9@Y1}FH|Xw-iKz2ynsa5qB`^f;9s9;AW<`>^bEuK#EP(c> z|M%Q>B!7u5ghBeuZWlU65V}>4`_(mTdDSar$S&KfQ{me8Nm`O+W5VL?Wdaj@!2E&N z#**#KSz!4u*0y#CX}(z8d>_D++^u>OW_-Vwj8F82WODr5LVa`i)GPAxHwS@n`$JN850P=@T zPxqFW2c~+c>bnVaYn)W(DrGInJkPigh+D$9RM036I_1#_rCyP6g`4LZYKMa->|8?9 z`L;m{?VgHl+0lGr5A$<_;&Equk&)hO$aDCeXZTA}A?9ydlnB-wHmOR6ECl@?)^zSTQrS6V$&fw%+?!?7 zK!S;2Sw-oDrQWgb|KSN%(n?^ZPU8#;@bY4_5oQKQPR9H8X^y+e0s)m)5t&%x7RL4S8%ttB}&jT5{Tf+o1y;KEGG)>mb4Z=AwrTj zd1sKUfwy<#9=~oieH5Y+09| za6Dh_2ZDH>)SW|eN!McefPBd^pf{{mX{*P`&vPhqG&wDu~9%p)B2(0m2(I8>NTLh zJ&rUEAeEu;#O>ULdG|Hq9!O$jBxIA=tY)TcB`i00lOwj&@wK_dTkvVSq<6RO*@#xk zEUVK&KPfkLP=J=|YslyoHDGPkJVNnoRG>O0BGS;x&e^hhKrnt+WQ!j9hN=rSk>ts6 zb|r$j`iqUJZFVqw zEO|Q}D(+(&rOZoj_AY!ti|?#t7%+y$2{m3zdn@*aTCEkvA5T}Z{3r@0YxKhKv)>Fp z>_U5r4y(uF^MOa;i7_^H%G)ds$D6HQBr`4u^?J4JOjapg1~uJsX+K^%kd^~uG%OyJ-&RNx^LAt1F;lVGUJ6;q7J#H>tt4ysYY`v zNjb#m)zOCgY<}X;_!zNb<<=Iz9f6rTg)hH;KagByDNeg&GS@+Q_7)z69`y0X9|Pb@ zQ7Pv9+G}ZQAD|hC$@x{>89uVXnxi)xcUCsN6ug_Z<3zo6ZX=QkT?%w`)k$8n>7Yb1to;(yyNZu zTHB88oG5v3j<@L$JU{`id7ssJO5x-rp#H**g>|AZy@>}!Z!``V$AC`^w15I~Ms43= zIiH@V*VjJsPvm&mrjOE)$xmduHe+8eIM-BCA6E~`jAu4^0G&kI2WY=wy_R`>po3sq~e(RsNY$XCzbY&xBGcj<`B=LAkqXwEoo z+{}f!D?|j^!L5Ulvlq@)#cBFM^;(O<9Bh|1D{2R=( zJCj7`cP{&5dy4`;+-|$w8f2&)cPe37FzvVjjPJ?`3X&3#xqeK8Uuf3T8TGaM2UbMe z0ie$@!?qMQgk8oXgg)?dhI-3Sbap{nH)I#NK9#M7kcMDe*f&8k!>cSFHXg$uszZho079 zF~4SX=BH$f$>nN2ZbckEV3Q90v_(OFmC;u@Mx<5q~C^vlPJmdFOl5&Op7*!?c0{bmL`>sv4l_rn=?D0nxi@OP`&c%qr87KYk{7 z+sWD_S+^=O{pE@_i8+MGQ?Hl1mm}4q&3UU}*yBz^2mxL?Tpv2!_T@S+%9OIwVl1{Z zCu-GZR~QN8P4d{~N)H*_<14iGYt_WRJ~ zmiji!l@-X%?%8DQlCgDQig*EyzCF=eJ|Z|LghSt$L!UY!-XSMi`De08dSa6#W6&*kx$M}=Ij#K9PN=-KhbzVPy(hhq1E zmgv#+Qta~G1`_mG``KmKN}Vc^o{f;@2eGBCc;|2f3wI_%evmGhH4<(wH6yk87BvSh zO@Zi+eaI_H!RtToUl2i+d_Kt9`Wn74DNwS5=9)<-X|4O*tB3@g)E59~I#RAE->&*` zFl+j1g`TT38zm zu`>&X%(8bG{8Sc;`fg4TWkO|gX@KW{vg&D-7CyJ)=f5qp>sAOh{U~Zq(r~T7E4sU$;{_yRaz_+`%!_Pnt%dnks}3iTN2Rmo`5mYnsx#uh zk^#cB8O1vVUo`1xGEvZPAq(;Z%281df;ga1kerTaot0Zo{`lnh=U{x0==J*a&nbRq=oy(Txkjte@C+NfLelrSS(_+pE&Axok`?>; zYM}0?W}>BeWFV0x#)jWiHB*`PiOBfN&rf%zYw_Seb0g^IQIQR0eAalY?i*w(he4;? zE^0~lCPfFg-}8**UhPIzxb??*70E1cB0P$xVy2QbIuMMrxiZz%oan1N5Cs4uXhl^if_6ShhtI+&NKFo+MpavCC-+ zq%eQYA0yo{D|&l&Aimz{7C%XsT6{MnWvA|eq!sNFgp!R3EDloUZXSu&n+O^D*Bx->M8nX!vWpcg~Hpxm@Pd z>wUAo6M|t(Nxon<3P6%mQwyl^YDInHjoXxAg2`gZ>hqakor2(Y54{Jb=mz_mC@hMI>}ak-;!juRe5QJ{WPH`Xi17ZD^O`({*utk z#TL%Ap`Xbvgn+c?2h-25xd*CuiN7A=LEl#rA*E04?ShRExYogNV4G(xwKRbx4JH4O zU})j}Uts@?Of^jxwOn2L^$cnGU+|y!r036&e+ueI@B4je-0)ukLK$Y#yb1u-4#Su~ z?r9hDd(%lE4UhVxDOHg&H+J~iA)`k$1iU*6MQ(Z>B=9Y)~)_ISpLIZYQp%>=Kb zm7bK*CdS_#)*0TV+z@3Uo|P;<@OvZ&q`r2^`n_a)c@Oumuld$Xe6)jMwB^kA0qi3# MA|qTPsQ3B*01J}w5&!@I literal 0 HcmV?d00001 diff --git a/apps/docs/resources/push_originserver.png b/apps/docs/resources/push_originserver.png new file mode 100644 index 0000000000000000000000000000000000000000..3032ad49bc827b091c59c6dd52d9e433c4ca3a42 GIT binary patch literal 58757 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 Jmtcp8e*$w+>sbH* literal 0 HcmV?d00001 diff --git a/apps/docs/resources/push_targetserver.png b/apps/docs/resources/push_targetserver.png new file mode 100644 index 0000000000000000000000000000000000000000..aaf3d3f9dd297c3e9d4b7d21448b68dd7b5e214d GIT binary patch literal 15723 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 literal 0 HcmV?d00001 diff --git a/apps/push_configurator_multithread_linux.c b/apps/push_configurator_multithread_linux.c new file mode 100644 index 0000000000..c687b2d5f7 --- /dev/null +++ b/apps/push_configurator_multithread_linux.c @@ -0,0 +1,538 @@ +/**************************************************************************** + * + * Copyright 2021 ETRI All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License") + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created on: Aug 2, 2022, + * Author: Joo-Chul Kevin Lee (rune@etri.re.kr) + * + * + ****************************************************************************/ + +#include "oc_api.h" +#include "port/oc_clock.h" +#include "oc_push.h" +#include +#include +#include +#include + +// define application specific values. +static const char *spec_version = "ocf.1.0.0"; +static const char *data_model_version = "ocf.res.1.0.0"; +static const char *resource_rt = "oic.r.custom.light"; +static const char *device_rt = "oic.d.push"; +static const char *device_name = "push-configurator"; +static const char *manufacturer = "ETRI"; +static const char *recv_path = "/pushed-resource/from-complex-light"; + +pthread_mutex_t mutex; +pthread_cond_t cv; +struct timespec ts; + +pthread_mutex_t app_mutex; +int quit = 0; + +#define MAX_URI_LENGTH (30) +static char rsc_uri[MAX_URI_LENGTH]; +static char push_rsc_uri[MAX_URI_LENGTH]; +static bool resource_found = false; + +#define OC_IPV6_ADDRSTRLEN (59) +static char address[OC_IPV6_ADDRSTRLEN + 1]; +static oc_endpoint_t originserver_ep; +static oc_endpoint_t targetserver_ep; + +#define PING_RETRY_COUNT (4) + +typedef void (*custom_func_t)(oc_endpoint_t *, char *, + oc_resource_properties_t); + +typedef struct +{ + custom_func_t func; +} custom_func_s; + +void +push_arrived(oc_pushd_rsc_rep_t *push_payload) +{ + PRINT("new push arrives (path: %s, rt: ", + oc_string(push_payload->resource->uri)); + for (size_t i = 0; + i < oc_string_array_get_allocated_size(push_payload->resource->types); + i++) { + PRINT("%s ", oc_string_array_get_item(push_payload->resource->types, i)); + } + PRINT(")\n"); + + oc_print_pushd_rsc(push_payload->rep); +} + +static int +app_init(void) +{ + int ret = oc_init_platform(manufacturer, NULL, NULL); + ret |= oc_add_device("/oic/d", device_rt, device_name, spec_version, + data_model_version, NULL, NULL); + + /* set push callback function which will be called when new PUSH arrives */ + oc_set_on_push_arrived(push_arrived); + + return ret; +} + +static bool +is_resource_found(void) +{ + if (!resource_found) { + printf("Please discovery resource first!\n"); + return false; + } + + return true; +} + +static void +cb_create_notification_selector_response(oc_client_response_t *data) +{ + oc_rep_t *rep = data->payload; + + if (!rep) { + printf("\n => return status: [ %s ] \n\n", oc_status_to_str(data->code)); + return; + } + + printf("\n => return status: [ %s ] \n\n", oc_status_to_str(data->code)); + oc_print_pushd_rsc(data->payload); + + return; +} + +static void +create_notification_selector(void) +{ + if (!is_resource_found()) + return; + + if (oc_init_post(PUSHCONF_RSC_PATH, &originserver_ep, "if=oic.if.create", + &cb_create_notification_selector_response, LOW_QOS, NULL)) { + oc_string_t pushtarget_ep_str; + oc_string_t pushtarget_str; + + oc_rep_begin_root_object(); + + oc_rep_open_array(root, rt); + oc_rep_add_text_string(rt, "oic.r.notificationselector"); + oc_rep_add_text_string(rt, "oic.r.pushproxy"); + oc_rep_close_array(root, rt); + + oc_rep_open_array(root, if); + oc_rep_add_text_string(if, "oic.if.rw"); + oc_rep_add_text_string(if, "oic.if.baseline"); + oc_rep_close_array(root, if); + + oc_rep_open_object(root, p); + oc_rep_set_uint(p, bm, 3); + oc_rep_close_object(root, p); + + /* ----- begin of "rep" ----- */ + oc_rep_open_object(root, rep); + + /* phref (optinal) */ + oc_rep_set_text_string(rep, phref, push_rsc_uri); + + /* prt (optinal) */ + oc_rep_open_array(rep, prt); + oc_rep_add_text_string(prt, resource_rt); + oc_rep_close_array(rep, prt); + + /* pushtarget */ + oc_endpoint_to_string(&targetserver_ep, &pushtarget_ep_str); + printf("target server's ep: %s \n", oc_string(pushtarget_ep_str)); + oc_concat_strings(&pushtarget_str, oc_string(pushtarget_ep_str), recv_path); + printf("targetpath: %s \n", oc_string(pushtarget_str)); + oc_rep_set_text_string(rep, pushtarget, oc_string(pushtarget_str)); + + /* pushqif */ + oc_rep_set_text_string(rep, pushqif, "oic.if.rw"); + + /* sourcert */ + oc_rep_open_array(rep, sourcert); + oc_rep_add_text_string(sourcert, "oic.r.pushpayload"); + oc_rep_close_array(rep, sourcert); + + /* state */ + /* ----- end of "rep" ----- */ + oc_rep_close_object(root, rep); + + oc_rep_end_root_object(); + + oc_free_string(&pushtarget_ep_str); + oc_free_string(&pushtarget_str); + } else { + printf("could not initiate oc_init_post()\n"); + return; + } + + if (!oc_do_post()) { + printf("oc_do_post() failed\n"); + } +} + +static void +cb_update_push_receiver_response(oc_client_response_t *data) +{ + (void)data; + + oc_rep_t *rep = data->payload; + + if (!rep) { + printf("\n => return status: [ %s ] \n\n", oc_status_to_str(data->code)); + return; + } + + printf("\n => return status: [ %s ] \n\n", oc_status_to_str(data->code)); + oc_print_pushd_rsc(data->payload); + + return; +} + +static void +update_push_receiver(void) +{ + if (!is_resource_found()) + return; + + char query[2048]; + sprintf(query, "receiveruri=%s&if=oic.if.rw", recv_path); + + if (oc_init_post(PUSHRECVS_RSC_PATH, &targetserver_ep, query, + &cb_update_push_receiver_response, LOW_QOS, NULL)) { + /* create a "receiver" object in pushreceiver Resource */ + oc_rep_begin_root_object(); + oc_rep_set_text_string(root, receiveruri, recv_path); + oc_rep_open_array(root, rts); + oc_rep_add_text_string(rts, resource_rt); + oc_rep_close_array(root, rts); + oc_rep_end_root_object(); + } else { + printf("could not initiate oc_init_post()\n"); + return; + } + + if (!oc_do_post()) { + printf("oc_do_post() failed\n"); + } +} + +static void +cb_retrieve_push_origin_rsc_response(oc_client_response_t *data) +{ + printf("RETRIEVE \"%s\":\n", resource_rt); + oc_print_pushd_rsc(data->payload); +} + +static void +retrieve_push_origin_rsc(void) +{ + if (!is_resource_found()) + return; + + oc_do_get(push_rsc_uri, &originserver_ep, NULL, + cb_retrieve_push_origin_rsc_response, LOW_QOS, NULL); +} + +static oc_discovery_flags_t +cb_discovery(const char *anchor, const char *uri, oc_string_array_t types, + oc_interface_mask_t iface_mask, oc_endpoint_t *endpoint, + oc_resource_properties_t bm, void *user_data) +{ + oc_discovery_flags_t ret = OC_CONTINUE_DISCOVERY; + + (void)anchor; + (void)iface_mask; + int i; + int uri_len = strlen(uri); + uri_len = (uri_len >= MAX_URI_LENGTH) ? MAX_URI_LENGTH - 1 : uri_len; + + for (i = 0; i < (int)oc_string_array_get_allocated_size(types); i++) { + char *t = oc_string_array_get_item(types, i); + if (strlen(t) == strlen(resource_rt) && + strncmp(t, resource_rt, strlen(t)) == 0) { + strncpy(rsc_uri, uri, uri_len); + rsc_uri[uri_len] = '\0'; + + printf("\nResource %s hosted at endpoints:\n", rsc_uri); + + if (user_data) { + custom_func_s *custom = (custom_func_s *)user_data; + custom->func(endpoint, rsc_uri, bm); + } else { + printf("custom function is not set!"); + goto exit; + } + } + } + +exit: + return ret; +} + +static void +cb_retrieve_pushconf_rsc_response(oc_client_response_t *data) +{ + printf("RETRIEVE \"%s\":\n", PUSHCONF_RSC_TYPE); + oc_print_pushd_rsc(data->payload); +} + +static void +retrieve_pushconf_rsc(void) +{ + if (!is_resource_found()) + return; + oc_do_get(PUSHCONF_RSC_PATH, &originserver_ep, "if=oic.if.b", + cb_retrieve_pushconf_rsc_response, LOW_QOS, NULL); +} + +static void +cb_retrieve_pushreceiver_rsc_response(oc_client_response_t *data) +{ + printf("RETRIEVE \"%s\":\n", PUSHRECVS_RSC_TYPE); + oc_print_pushd_rsc(data->payload); +} + +static void +retrieve_pushreceiver_rsc(void) +{ + oc_do_get(PUSHRECVS_RSC_PATH, &targetserver_ep, "if=oic.if.rw", + cb_retrieve_pushreceiver_rsc_response, LOW_QOS, NULL); +} + +static void +find_same_endpoint(oc_endpoint_t *endpoint, char *uri, + oc_resource_properties_t bm) +{ + oc_endpoint_t *ep = endpoint; + while (ep != NULL) { + printf(" |__"); + PRINTipaddr(*ep); + printf("\n"); + + if (oc_endpoint_compare(&originserver_ep, ep) == 0) { + printf(" ===> matched originserver ep is found!\n"); + if (bm & OC_PUSHABLE) { + printf(" ===> Resource %s is PUSHABLE Resource!\n", uri); + strcpy(push_rsc_uri, uri); + resource_found = true; + } + } + + ep = ep->next; + } +} + +static void +signal_event_loop(void) +{ + pthread_cond_signal(&cv); +} + +void +handle_signal(int signal) +{ + (void)signal; + signal_event_loop(); + quit = 1; +} + +static void * +process_func(void *data) +{ + (void)data; + oc_clock_time_t next_event; + + while (quit != 1) { + pthread_mutex_lock(&app_mutex); + next_event = oc_main_poll(); + pthread_mutex_unlock(&app_mutex); + pthread_mutex_lock(&mutex); + if (next_event == 0) { + pthread_cond_wait(&cv, &mutex); + } else { + ts.tv_sec = (next_event / OC_CLOCK_SECOND); + ts.tv_nsec = (next_event % OC_CLOCK_SECOND) * 1.e09 / OC_CLOCK_SECOND; + pthread_cond_timedwait(&cv, &mutex, &ts); + } + pthread_mutex_unlock(&mutex); + } + + pthread_exit(0); +} + +void +print_menu(void) +{ + pthread_mutex_lock(&app_mutex); + printf("=====================================\n"); + printf("1. Discovery\n"); + printf("2. Create new PUSH notification selector on origin server, and add " + "new Receiver configuration object to target server\n"); + printf("3. Retrieve PUSH origin Resource of origin-server\n"); + printf("4. Retrieve PUSH configuration Resource of origin server\n"); + printf("5. Retrieve PUSH receivers Resource of target server\n"); + printf("0. Quit\n"); + printf("=====================================\n"); + pthread_mutex_unlock(&app_mutex); +} + +int +main(void) +{ + int init = 0; + struct sigaction sa; + sigfillset(&sa.sa_mask); + sa.sa_flags = 0; + sa.sa_handler = handle_signal; + sigaction(SIGINT, &sa, NULL); + oc_string_t address_str; + + /* get originserver ep */ + printf("set originserver address(ex. coap+tcp://xxx.xxx.xxx.xxx:yyyy): "); + if (scanf("%59s", address) > 0) { + printf("address: %s\n", address); + } else { + printf("error reading remote address\n"); + return -1; + } + + oc_new_string(&address_str, address, strlen(address)); + + if (oc_string_to_endpoint(&address_str, &originserver_ep, NULL) < 0) { + printf("error parsing originserver endpoint address\n"); + return -1; + } + originserver_ep.version = OCF_VER_1_0_0; + oc_free_string(&address_str); + + /* get targetserver ep */ + printf("set targetserver address(ex. coap+tcp://xxx.xxx.xxx.xxx:yyyy): "); + if (scanf("%59s", address) > 0) { + printf("address: %s\n", address); + } else { + printf("error reading remote address\n"); + return -1; + } + + oc_new_string(&address_str, address, strlen(address)); + + if (oc_string_to_endpoint(&address_str, &targetserver_ep, NULL) < 0) { + printf("error parsing originserver endpoint address\n"); + return -1; + } + originserver_ep.version = OCF_VER_1_0_0; + oc_free_string(&address_str); + + static const oc_handler_t handler = { .init = app_init, + .signal_event_loop = + signal_event_loop }; + +#ifdef OC_STORAGE + oc_storage_config("./push_targetserver_multithread_linux_creds"); +#endif /* OC_STORAGE */ + + if (pthread_mutex_init(&mutex, NULL)) { + printf("pthread_mutex_init failed!\n"); + return -1; + } + + if (pthread_mutex_init(&app_mutex, NULL)) { + printf("pthread_mutex_init failed!\n"); + pthread_mutex_destroy(&mutex); + return -1; + } + + init = oc_main_init(&handler); + if (init < 0) { + printf("oc_main_init failed!(%d)\n", init); + goto exit; + } + + pthread_t thread; + if (pthread_create(&thread, NULL, process_func, NULL) != 0) { + printf("Failed to create main thread\n"); + init = -1; + goto exit; + } + + custom_func_s same_func = { .func = find_same_endpoint }; + + int key; + while (quit != 1) { + print_menu(); + fflush(stdin); + if (!scanf("%d", &key)) { + printf("scanf failed!!!!\n"); + quit = 1; + handle_signal(0); + break; + } + + pthread_mutex_lock(&app_mutex); + switch (key) { + case 1: + /* discover all Resources whose rt is `resource_rt`, and save uri of + * pushable one */ + resource_found = false; + oc_do_ip_discovery(resource_rt, cb_discovery, &same_func); + break; + + case 2: + /* create PUSH notification selector for PUSH origin Resource */ + create_notification_selector(); + /* update PUSH receiver Resource for PUSH origin Resource */ + update_push_receiver(); + break; + case 3: + /* retrieve PUSH origin Resource */ + retrieve_push_origin_rsc(); + break; + case 4: + /* retrieve PUSH configuration Resource */ + retrieve_pushconf_rsc(); + break; + case 5: + /* retrieve PUSH receiver Resource */ + retrieve_pushreceiver_rsc(); + break; + case 0: + quit = 1; + handle_signal(0); + break; + default: + printf("unsupported command.\n"); + break; + } + pthread_mutex_unlock(&app_mutex); + } + + pthread_join(thread, NULL); + printf("pthread_join finish!\n"); + +exit: + oc_main_shutdown(); + + pthread_mutex_destroy(&mutex); + pthread_mutex_destroy(&app_mutex); + return 0; +} diff --git a/apps/push_originserver_multithread_linux.c b/apps/push_originserver_multithread_linux.c new file mode 100644 index 0000000000..af25f572f6 --- /dev/null +++ b/apps/push_originserver_multithread_linux.c @@ -0,0 +1,370 @@ +/**************************************************************************** + * + * Copyright 2021 ETRI All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License") + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created on: Aug 2, 2022, + * Author: Joo-Chul Kevin Lee (rune@etri.re.kr) + * + * + ****************************************************************************/ + +#include "oc_api.h" +#include "oc_core_res.h" +#include "oc_push.h" +#include "port/oc_clock.h" +#include "port/oc_connectivity.h" + +#include +#include +#include + +// define application specific values. +static const char *spec_version = "ocf.1.0.0"; +static const char *data_model_version = "ocf.res.1.0.0"; + +static const char *resource_rt = "oic.r.custom.light"; +static const char *resource_uri = "/living-room/complex-light/1"; +static const char *resource_uri2 = "/living-room/complex-light/2"; + +static const char *device_rt = "oic.d.push"; +static const char *device_rt2 = "oic.d.custom.light"; +static const char *device_name = "push-originserver-Complex_Light"; +static const char *manufacturer = "ETRI"; + +static bool discoverable = true; +static bool observable = true; +static bool pushable = true; + +pthread_mutex_t mutex; +pthread_cond_t cv; +struct timespec ts; + +pthread_mutex_t app_mutex; +oc_resource_t *res; +oc_resource_t *res2; + +int quit = 0; + +static int power; +static int brightness; + +static int power2; +static int brightness2; + +/* + * callback function to be called whenever new PUSH arrives + */ +void +push_arrived(oc_pushd_rsc_rep_t *push_payload) +{ + printf("new push arrives (path: %s, rt: ", + oc_string(push_payload->resource->uri)); + for (size_t i = 0; + i < oc_string_array_get_allocated_size(push_payload->resource->types); + i++) { + printf("%s ", oc_string_array_get_item(push_payload->resource->types, i)); + } + printf(")\n"); + + oc_print_pushd_rsc(push_payload->rep); +} + +static int +app_init(void) +{ + int ret = oc_init_platform(manufacturer, NULL, NULL); + ret |= oc_add_device("/oic/d", device_rt, device_name, spec_version, + data_model_version, NULL, NULL); + + /* add additional device type */ + oc_device_bind_resource_type(0, device_rt2); + + /* set push callback function which will be called when new PUSH arrives */ + oc_set_on_push_arrived(push_arrived); + + return ret; +} + +static void +cb_retrieve_light1(oc_request_t *request, oc_interface_mask_t iface_mask, + void *user_data) +{ + (void)user_data; + + printf("cb_retrieve_light1() is called\n"); + oc_rep_start_root_object(); + switch (iface_mask) { + case OC_IF_BASELINE: + oc_process_baseline_interface(request->resource); + /* fall through */ + case OC_IF_RW: + oc_rep_set_int(root, brightness, brightness); + oc_rep_set_int(root, power, power); + break; + default: + break; + } + oc_rep_end_root_object(); + oc_send_response(request, OC_STATUS_OK); +} + +static void +cb_retrieve_light2(oc_request_t *request, oc_interface_mask_t iface_mask, + void *user_data) +{ + (void)user_data; + + printf("cb_retrieve_light2() is called\n"); + oc_rep_start_root_object(); + switch (iface_mask) { + case OC_IF_BASELINE: + oc_process_baseline_interface(request->resource); + /* fall through */ + case OC_IF_RW: + oc_rep_set_int(root, brightness, brightness2); + oc_rep_set_int(root, power, power2); + break; + default: + break; + } + oc_rep_end_root_object(); + oc_send_response(request, OC_STATUS_OK); +} + +/* ======== for light #1 ======== */ +static void +change_brightness(void) +{ + brightness = (brightness + 1) % 100; + /* notify PUSH origin Resource is changed */ + oc_resource_state_changed(resource_uri, strlen(resource_uri), res->device); +} + +static void +change_power(void) +{ + power += 5; + oc_resource_state_changed(resource_uri, strlen(resource_uri), res->device); +} + +/* ======== for light #2 ======== */ +static void +change_brightness2(void) +{ + brightness2 = (brightness2 + 1) % 100; + oc_resource_state_changed(resource_uri2, strlen(resource_uri2), res2->device); +} + +static void +change_power2(void) +{ + power2 += 5; + oc_resource_state_changed(resource_uri2, strlen(resource_uri2), res2->device); +} + +/* PUSH payload builder */ +void +build_light_payload() +{ + oc_rep_open_object(root, rep); + oc_rep_set_int(rep, power, power); + oc_rep_set_int(rep, brightness, brightness); + oc_rep_close_object(root, rep); +} + +static void +register_resources(void) +{ + /* light2 is not pushable */ + res2 = oc_new_resource(NULL, resource_uri2, 1, 0); + oc_resource_bind_resource_type(res2, resource_rt); + oc_resource_bind_resource_interface(res2, OC_IF_RW); + oc_resource_set_default_interface(res2, OC_IF_RW); + oc_resource_set_discoverable(res2, discoverable); + oc_resource_set_observable(res2, observable); + oc_resource_set_request_handler(res2, OC_GET, cb_retrieve_light2, NULL); + oc_add_resource(res2); + + /* light1 is pushable */ + res = oc_new_resource(NULL, resource_uri, 1, 0); + oc_resource_bind_resource_type(res, resource_rt); + oc_resource_bind_resource_interface(res, OC_IF_RW); + oc_resource_set_default_interface(res, OC_IF_RW); + oc_resource_set_discoverable(res, discoverable); + oc_resource_set_observable(res, observable); + /* make a Resource pushable */ + oc_resource_set_pushable(res, pushable); + oc_resource_set_request_handler(res, OC_GET, cb_retrieve_light1, NULL); + /* set PUSH payload builder */ + res->payload_builder = build_light_payload; + oc_add_resource(res); +} + +static void +signal_event_loop(void) +{ + pthread_cond_signal(&cv); +} + +void +handle_signal(int signal) +{ + (void)signal; + signal_event_loop(); + quit = 1; +} + +static void * +process_func(void *data) +{ + (void)data; + oc_clock_time_t next_event; + + while (quit != 1) { + pthread_mutex_lock(&app_mutex); + next_event = oc_main_poll(); + pthread_mutex_unlock(&app_mutex); + pthread_mutex_lock(&mutex); + if (next_event == 0) { + pthread_cond_wait(&cv, &mutex); + } else { + ts.tv_sec = (next_event / OC_CLOCK_SECOND); + ts.tv_nsec = (next_event % OC_CLOCK_SECOND) * 1.e09 / OC_CLOCK_SECOND; + pthread_cond_timedwait(&cv, &mutex, &ts); + } + pthread_mutex_unlock(&mutex); + } + + pthread_exit(0); +} + +void +print_menu(void) +{ + pthread_mutex_lock(&app_mutex); + printf("=============== Light A =============\n"); + printf("1. Change brightness(%d) of light #1\n", brightness); + printf("2. Change power(%d) of light #1\n", power); + printf("3. Change brightness(%d) of light #2\n", brightness2); + printf("4. Change power(%d) of light #2\n", power2); + printf("0. Quit\n"); + printf("=====================================\n"); + pthread_mutex_unlock(&app_mutex); +} + +int +main(void) +{ + int init = 0; + struct sigaction sa; + sigfillset(&sa.sa_mask); + sa.sa_flags = 0; + sa.sa_handler = handle_signal; + sigaction(SIGINT, &sa, NULL); + + static const oc_handler_t handler = { .init = app_init, + .signal_event_loop = signal_event_loop, + .register_resources = + register_resources }; + +#ifdef OC_STORAGE + oc_storage_config("./push_originserver_multithread_linux_creds"); +#endif /* OC_STORAGE */ + + if (pthread_mutex_init(&mutex, NULL)) { + printf("pthread_mutex_init failed!\n"); + return -1; + } + + if (pthread_mutex_init(&app_mutex, NULL)) { + printf("pthread_mutex_init failed!\n"); + pthread_mutex_destroy(&mutex); + return -1; + } + + init = oc_main_init(&handler); + if (init < 0) { + printf("oc_main_init failed!(%d)\n", init); + goto exit; + } + + size_t device_num = oc_core_get_num_devices(); + size_t i; + for (i = 0; i < device_num; i++) { + oc_endpoint_t *ep = oc_connectivity_get_endpoints(i); + printf("=== device(%zd) endpoint info. ===\n", i); + while (ep) { + oc_string_t ep_str; + if (oc_endpoint_to_string(ep, &ep_str) == 0) { + printf("%s\n", oc_string(ep_str)); + oc_free_string(&ep_str); + } + ep = ep->next; + } + } + + pthread_t thread; + if (pthread_create(&thread, NULL, process_func, NULL) != 0) { + printf("Failed to create main thread\n"); + init = -1; + goto exit; + } + + int key; + while (quit != 1) { + print_menu(); + fflush(stdin); + if (!scanf("%d", &key)) { + printf("scanf failed!!!!\n"); + quit = 1; + handle_signal(0); + break; + } + + pthread_mutex_lock(&app_mutex); + switch (key) { + case 1: + change_brightness(); + break; + case 2: + change_power(); + break; + case 3: + change_brightness2(); + break; + case 4: + change_power2(); + break; + case 0: + quit = 1; + handle_signal(0); + break; + default: + printf("unsupported command.\n"); + break; + } + pthread_mutex_unlock(&app_mutex); + } + + pthread_join(thread, NULL); + printf("pthread_join finish!\n"); + +exit: + oc_main_shutdown(); + + pthread_mutex_destroy(&mutex); + pthread_mutex_destroy(&app_mutex); + return 0; +} diff --git a/apps/push_targetserver_multithread_linux.c b/apps/push_targetserver_multithread_linux.c new file mode 100644 index 0000000000..30a95e5cde --- /dev/null +++ b/apps/push_targetserver_multithread_linux.c @@ -0,0 +1,212 @@ +/**************************************************************************** + * + * Copyright 2021 ETRI All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License") + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created on: Aug 2, 2022, + * Author: Joo-Chul Kevin Lee (rune@etri.re.kr) + * + * + ****************************************************************************/ + +#include "oc_api.h" +#include "oc_core_res.h" +#include "port/oc_clock.h" +#include "oc_push.h" +#include +#include +#include +#include + +// define application specific values. +static const char *spec_version = "ocf.1.0.0"; +static const char *data_model_version = "ocf.res.1.0.0"; +static const char *device_rt = "oic.d.push"; +static const char *device_name = "push-targetserver"; +static const char *manufacturer = "ETRI"; + +pthread_mutex_t mutex; +pthread_cond_t cv; +struct timespec ts; + +pthread_mutex_t app_mutex; +int quit = 0; + +void +push_arrived(oc_pushd_rsc_rep_t *push_payload) +{ + printf("new push arrives (path: %s, rt: ", + oc_string(push_payload->resource->uri)); + for (size_t i = 0; + i < oc_string_array_get_allocated_size(push_payload->resource->types); + i++) { + printf("%s ", oc_string_array_get_item(push_payload->resource->types, i)); + } + printf(")\n"); + + oc_print_pushd_rsc(push_payload->rep); +} + +static int +app_init(void) +{ + int ret = oc_init_platform(manufacturer, NULL, NULL); + ret |= oc_add_device("/oic/d", device_rt, device_name, spec_version, + data_model_version, NULL, NULL); + + /* set push callback function which will be called when new PUSH arrives */ + oc_set_on_push_arrived(push_arrived); + + return ret; +} + +static void +signal_event_loop(void) +{ + pthread_cond_signal(&cv); +} + +void +handle_signal(int signal) +{ + (void)signal; + signal_event_loop(); + quit = 1; +} + +static void * +process_func(void *data) +{ + (void)data; + oc_clock_time_t next_event; + + while (quit != 1) { + pthread_mutex_lock(&app_mutex); + next_event = oc_main_poll(); + pthread_mutex_unlock(&app_mutex); + pthread_mutex_lock(&mutex); + if (next_event == 0) { + pthread_cond_wait(&cv, &mutex); + } else { + ts.tv_sec = (next_event / OC_CLOCK_SECOND); + ts.tv_nsec = (next_event % OC_CLOCK_SECOND) * 1.e09 / OC_CLOCK_SECOND; + pthread_cond_timedwait(&cv, &mutex, &ts); + } + pthread_mutex_unlock(&mutex); + } + + pthread_exit(0); +} + +void +print_menu(void) +{ + pthread_mutex_lock(&app_mutex); + printf("=====================================\n"); + printf("0. Quit\n"); + printf("=====================================\n"); + pthread_mutex_unlock(&app_mutex); +} + +int +main(void) +{ + int init = 0; + struct sigaction sa; + sigfillset(&sa.sa_mask); + sa.sa_flags = 0; + sa.sa_handler = handle_signal; + sigaction(SIGINT, &sa, NULL); + + static const oc_handler_t handler = { .init = app_init, + .signal_event_loop = + signal_event_loop }; + +#ifdef OC_STORAGE + oc_storage_config("./push_targetserver_multithread_linux_creds"); +#endif /* OC_STORAGE */ + + if (pthread_mutex_init(&mutex, NULL)) { + printf("pthread_mutex_init failed!\n"); + return -1; + } + + if (pthread_mutex_init(&app_mutex, NULL)) { + printf("pthread_mutex_init failed!\n"); + pthread_mutex_destroy(&mutex); + return -1; + } + + init = oc_main_init(&handler); + if (init < 0) { + printf("oc_main_init failed!(%d)\n", init); + goto exit; + } + + size_t device_num = oc_core_get_num_devices(); + size_t i; + for (i = 0; i < device_num; i++) { + oc_endpoint_t *ep = oc_connectivity_get_endpoints(i); + printf("=== device(%zd) endpoint info. ===\n", i); + while (ep) { + oc_string_t ep_str; + if (oc_endpoint_to_string(ep, &ep_str) == 0) { + printf("%s\n", oc_string(ep_str)); + oc_free_string(&ep_str); + } + ep = ep->next; + } + } + + pthread_t thread; + if (pthread_create(&thread, NULL, process_func, NULL) != 0) { + printf("Failed to create main thread\n"); + init = -1; + goto exit; + } + + int key; + while (quit != 1) { + print_menu(); + fflush(stdin); + if (!scanf("%d", &key)) { + printf("scanf failed!!!!\n"); + quit = 1; + handle_signal(0); + break; + } + + pthread_mutex_lock(&app_mutex); + switch (key) { + case 0: + quit = 1; + handle_signal(0); + break; + default: + printf("unsupported command.\n"); + break; + } + pthread_mutex_unlock(&app_mutex); + } + + pthread_join(thread, NULL); + printf("pthread_join finish!\n"); + +exit: + oc_main_shutdown(); + + pthread_mutex_destroy(&mutex); + pthread_mutex_destroy(&app_mutex); + return 0; +} diff --git a/include/oc_api.h b/include/oc_api.h index 13cd722816..7477fd219d 100644 --- a/include/oc_api.h +++ b/include/oc_api.h @@ -29,14 +29,16 @@ #ifndef OC_API_H #define OC_API_H +#include "util/oc_features.h" #include "messaging/coap/oc_coap.h" +#include "port/oc_storage.h" #include "oc_buffer_settings.h" #include "oc_cloud.h" #include "oc_config.h" +#include "oc_export.h" #include "oc_rep.h" #include "oc_ri.h" #include "oc_signal_event_loop.h" -#include "port/oc_storage.h" #ifdef __cplusplus extern "C" { @@ -1137,6 +1139,18 @@ void oc_resource_make_public(oc_resource_t *resource); */ void oc_resource_set_discoverable(oc_resource_t *resource, bool state); +#ifdef OC_HAS_FEATURE_PUSH +/** + * Specify if a resource can be pushable. + * + * @param[in] resource to specify as pushable or non-pushable + * @param[in] state if true the resource will be pushable if false the + * resource will be non-pushable + */ +OC_API +void oc_resource_set_pushable(oc_resource_t *resource, bool state); +#endif + /** * Specify that a resource should notify clients when a property has been * modified. diff --git a/include/oc_helpers.h b/include/oc_helpers.h index 80ec26b0fa..1fc46b7542 100644 --- a/include/oc_helpers.h +++ b/include/oc_helpers.h @@ -21,6 +21,7 @@ #include "util/oc_list.h" #include "util/oc_mmem.h" +#include "oc_export.h" #include #include #include @@ -261,6 +262,16 @@ void _oc_free_array( #endif oc_array_t *ocarray, pool type); +/** + * @brief reset ocstring contents + * + * @param ocstring ocstring to be reset + * @param str not terminated string which will replace current str + * @param str_len size of the string + */ +OC_API +void oc_set_string(oc_string_t *ocstring, const char *str, size_t str_len); + /** * @brief new array * diff --git a/include/oc_push.h b/include/oc_push.h new file mode 100644 index 0000000000..91bb3a8a00 --- /dev/null +++ b/include/oc_push.h @@ -0,0 +1,100 @@ +/**************************************************************************** + * + * Copyright 2021 ETRI All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License") + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created on: Aug 23, 2021, + * Author: Joo-Chul Kevin Lee (rune@etri.re.kr) + * + * + ****************************************************************************/ + +#ifndef OC_PUSH_H +#define OC_PUSH_H + +#include + +#include "oc_config.h" +#include "oc_helpers.h" +#include "oc_rep.h" +#include "oc_ri.h" +#include "oc_endpoint.h" +#include "port/oc_log.h" +#include "util/oc_memb.h" +#include "util/oc_process.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define PUSHCONF_RSC_PATH "/pushconfig" +#define PUSHCONF_RSC_TYPE "oic.r.pushconfiguration" +#define PUSHCONF_RSC_NAME "Push Configuration" + +#define PUSHRECVS_RSC_PATH "/pushreceivers" +#define PUSHRECVS_RSC_TYPE "oic.r.pushreceiver" +#define PUSHRECVS_RSC_NAME "Push Receiver Configuration" + +/** + * @brief object used to store Resource pushed to + * "oic.r.pshreceiver:receivers[i].receiveruri" + */ +typedef struct oc_pushd_rsc_rep +{ + struct oc_pushd_rsc_rep *next; + oc_resource_t + *resource; ///< used to point any pushed Resource managed by iotivity-lite + oc_rep_t *rep; ///< payload of pushed Resource +} oc_pushd_rsc_rep_t; + +/** + * @brief callback function called whenever new push arrives + */ +typedef void (*oc_on_push_arrived_t)(oc_pushd_rsc_rep_t *); + +/** + * @brief print payload of Resource in user friendly format + * + * @param[in] payload pointer to the payload to be printed + */ +OC_API +void oc_print_pushd_rsc(const oc_rep_t *payload); + +/** + * @brief set callback function called whenever new push arrives + * + * @param[in] func function name + */ +OC_API +void oc_set_on_push_arrived(oc_on_push_arrived_t func); + +/** + * @brief application should call this function whenever the contents of + * pushable Resource is updated, or Push Notification will not work. + * + * @param[in] uri path of pushable Resource whose contents is just + * updated + * @param[in] uri_len length of uri + * @param[in] device_index index of Device that updated pushable Resource + * belongs to + */ +OC_API +void oc_resource_state_changed(const char *uri, size_t uri_len, + size_t device_index); + +#ifdef __cplusplus +} +#endif + +#endif /*OC_PUSH_H*/ diff --git a/include/oc_rep.h b/include/oc_rep.h index 18bb048927..d7c4863d65 100644 --- a/include/oc_rep.h +++ b/include/oc_rep.h @@ -23,6 +23,7 @@ #include "deps/tinycbor/src/cbor.h" #include "oc_helpers.h" #include "util/oc_memb.h" +#include "util/oc_features.h" #include #include #include @@ -1073,6 +1074,10 @@ int oc_parse_rep(const uint8_t *payload, size_t payload_size, void oc_free_rep(oc_rep_t *rep); +#ifdef OC_HAS_FEATURE_PUSH +oc_rep_t *oc_alloc_rep(); +#endif + /** * Check for a null value from an `oc_rep_t` * diff --git a/include/oc_ri.h b/include/oc_ri.h index b72b2f0a5b..cff9a4fdcd 100644 --- a/include/oc_ri.h +++ b/include/oc_ri.h @@ -25,6 +25,7 @@ #include "oc_rep.h" #include "oc_uuid.h" #include "util/oc_etimer.h" +#include "util/oc_features.h" #include #ifdef __cplusplus @@ -50,9 +51,12 @@ typedef enum { typedef enum { OC_DISCOVERABLE = (1 << 0), ///< discoverable OC_OBSERVABLE = (1 << 1), ///< observable - OC_SECURE = (1 << 4), ///< secure - OC_PERIODIC = (1 << 6), ///< periodiacal update - OC_SECURE_MCAST = (1 << 8) ///< secure multicast (oscore) +#ifdef OC_HAS_FEATURE_PUSH + OC_PUSHABLE = (1 << 2), ///< pushable +#endif + OC_SECURE = (1 << 4), ///< secure + OC_PERIODIC = (1 << 6), ///< periodiacal update + OC_SECURE_MCAST = (1 << 8) ///< secure multicast (oscore) } oc_resource_properties_t; /** @@ -270,6 +274,14 @@ typedef bool (*oc_set_properties_cb_t)(oc_resource_t *, oc_rep_t *, void *); typedef void (*oc_get_properties_cb_t)(oc_resource_t *, oc_interface_mask_t, void *); +#ifdef OC_HAS_FEATURE_PUSH +/** + * @brief application should define this callback which builds updated contents + * of pushable Resource + */ +typedef void (*oc_payload_callback_t)(); +#endif + /** * @brief properties callback structure * @@ -315,7 +327,11 @@ struct oc_resource_s oc_locn_t tag_locn; ///< tag (value) for location description uint8_t num_observers; ///< amount of observers #ifdef OC_COLLECTIONS - uint8_t num_links; ///< number of links in the collection + uint8_t num_links; ///< number of links in the collection +#ifdef OC_HAS_FEATURE_PUSH + oc_payload_callback_t + payload_builder; ///< callback to build contents of PUSH Notification +#endif #endif /* OC_COLLECTIONS */ uint16_t observe_period_seconds; ///< observe period in seconds }; @@ -414,6 +430,15 @@ void oc_ri_remove_timed_event_callback(void *cb_data, */ int oc_status_code(oc_status_t key); +/** + * @brief convert the status code to string + * + * @param[in] key key the application level key of the code + * @return char* CoAP status code string + */ +OC_API +const char *oc_status_to_str(oc_status_t key); + /** * @brief retrieve the resource by uri and device indes * diff --git a/port/linux/Makefile b/port/linux/Makefile index b42d63ef58..b228f009be 100644 --- a/port/linux/Makefile +++ b/port/linux/Makefile @@ -195,6 +195,17 @@ ifeq ($(SWUPDATE),1) export SWUPDATE endif + +# for PUSH NOTIFICATION +ifeq ($(PUSH), 1) + EXTRA_CFLAGS += -DOC_PUSH + SAMPLES += push_originserver_multithread_linux push_targetserver_multithread_linux push_configurator_multithread_linux +ifeq ($(PUSH_DEBUG), 1) + EXTRA_CFLAGS += -DOC_PUSHDEBUG +endif +endif + + ifneq ($(SECURE),0) SRC += $(addprefix ../../security/,oc_acl.c oc_cred.c oc_doxm.c oc_pstat.c oc_tls.c oc_svr.c oc_store.c oc_pki.c oc_certs.c oc_sp.c oc_keypair.c oc_csr.c oc_roles.c oc_ael.c oc_audit.c oc_sdi.c oc_oscore_engine.c oc_oscore_crypto.c oc_oscore_context.c) SRC_COMMON += $(addprefix $(MBEDTLS_DIR)/library/,${DTLS}) @@ -503,6 +514,19 @@ client_multithread_linux: libiotivity-lite-client.a $(ROOT_DIR)/apps/client_mult @mkdir -p $@_creds ${CC} -o $@ ../../apps/client_multithread_linux.c libiotivity-lite-client.a -DOC_CLIENT ${CFLAGS} ${LIBS} +# push notification samples +push_originserver_multithread_linux: libiotivity-lite-client-server.a $(ROOT_DIR)/apps/push_originserver_multithread_linux.c + @mkdir -p $@_creds + ${CC} -o $@ ../../apps/$@.c libiotivity-lite-client-server.a -DOC_CLIENT -DOC_SERVER ${CFLAGS} ${LIBS} + +push_targetserver_multithread_linux: libiotivity-lite-client-server.a $(ROOT_DIR)/apps/push_targetserver_multithread_linux.c + @mkdir -p $@_creds + ${CC} -o $@ ../../apps/$@.c libiotivity-lite-client-server.a -DOC_CLIENT -DOC_SERVER ${CFLAGS} ${LIBS} + +push_configurator_multithread_linux: libiotivity-lite-client-server.a $(ROOT_DIR)/apps/push_configurator_multithread_linux.c + @mkdir -p $@_creds + ${CC} -o $@ ../../apps/$@.c libiotivity-lite-client-server.a -DOC_CLIENT -DOC_SERVER ${CFLAGS} ${LIBS} + $(SO_DPP_OBJ): $(ROOT_DIR)/apps/streamlined_onboarding/ocf_dpp.c ${CC} -o $@ -c $^ ${CFLAGS} ${SECURITY_HEADERS} ${LIBS} diff --git a/port/linux/readme.md b/port/linux/readme.md index 30c3fdc540..8f30c89b0a 100644 --- a/port/linux/readme.md +++ b/port/linux/readme.md @@ -70,4 +70,14 @@ Option and default setting in the Linux Makefile - WKCORE - enable discovery through IETF /.well-known/core on IETFs multicast ALL COAP NODES \ No newline at end of file + enable discovery through IETF /.well-known/core on IETFs multicast ALL COAP NODES + +- PUSH 0 + + disable push notification + +- PUSH_DEBUG 0 + + disable push notification debug message + (if `DEBUG`=0 and `PUSH_DEBUG`=1, only push notification debug messages are activated. + if `DEBUG`=1, push notification debug messages are activated too regardless of `PUSH_DEBUG`) \ No newline at end of file diff --git a/port/oc_log.h b/port/oc_log.h index c4760813eb..ca6c4d0781 100644 --- a/port/oc_log.h +++ b/port/oc_log.h @@ -192,7 +192,7 @@ extern "C" { } \ } while (0) -#ifdef OC_DEBUG +#if defined(OC_DEBUG) || defined(OC_PUSHDEBUG) #ifdef __ANDROID__ #define OC_LOG(level, ...) \ android_log(level, __FILE__, __func__, __LINE__, __VA_ARGS__) @@ -208,6 +208,7 @@ extern "C" { PRINT("\n"); \ } while (0) +#if defined(OC_DEBUG) #define OC_LOGipaddr(endpoint) \ do { \ PRINT("DEBUG: %s <%s:%d>: ", __FILENAME__, __func__, __LINE__); \ @@ -225,11 +226,22 @@ extern "C" { } while (0) #else #endif /* NO_LOG_BYTES */ +#else +#define OC_LOGipaddr(endpoint) +#define OC_LOGbytes(bytes, length) +#endif /* OC_DEBUG */ #endif /* __ANDROID__ */ +#if defined(OC_DEBUG) #define OC_DBG(...) OC_LOG("D", __VA_ARGS__) #define OC_WRN(...) OC_LOG("W", __VA_ARGS__) #define OC_ERR(...) OC_LOG("E", __VA_ARGS__) +#else +#define OC_DBG(...) +#define OC_WRN(...) +#define OC_ERR(...) +#endif + #else #define OC_LOG(...) #define OC_DBG(...) diff --git a/swig/swig_interfaces/oc_ri.i b/swig/swig_interfaces/oc_ri.i index d732e2b9e9..ceff56e6de 100644 --- a/swig/swig_interfaces/oc_ri.i +++ b/swig/swig_interfaces/oc_ri.i @@ -126,4 +126,5 @@ typedef struct oc_response_buffer_s int code; } oc_response_buffer_t; +#define OC_API %include "oc_ri.h" \ No newline at end of file diff --git a/util/oc_features.h b/util/oc_features.h index 9450430c32..3022819ff1 100644 --- a/util/oc_features.h +++ b/util/oc_features.h @@ -26,4 +26,9 @@ #define OC_HAS_FEATURE_TCP_ASYNC_CONNECT #endif /* __linux__ && OC_CLIENT && OC_TCP */ +#if defined(OC_PUSH) && defined(OC_SERVER) && defined(OC_CLIENT) && \ + defined(OC_DYNAMIC_ALLOCATION) && defined(OC_COLLECTIONS_IF_CREATE) +#define OC_HAS_FEATURE_PUSH +#endif + #endif /* OC_FEATURES_H */