From 53a2dab63aeed5d3db5a7b5feb99971b785da5ae Mon Sep 17 00:00:00 2001 From: "snickersun@163.com" Date: Tue, 2 Jul 2024 12:37:39 +0000 Subject: [PATCH] Merge #434 into sdk602patch0626 from sdk602patch0521 MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 0521分支截止7月2日 代码合并到本分支 * sdk602patch0521: (77 commits squashed) - 修复表盘协议BUG - Merge branch 'sdk602patch0521' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - 闹钟添加切换睡眠与小睡模式 - Merge branch 'sdk602patch0521' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into remotes/origin/sdk602patch0521 - 重构心率血氧存储内容 - 低电量修改 - Merge branch 'sdk602patch0521' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - Merge branch 'sdk602patch0521' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - 优化低电量关机 - 重构心率血氧存储 - Merge branch 'sdk602patch0521' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into remotes/origin/sdk602patch0521 - Merge branch 'sdk602patch0521' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into remotes/origin/sdk602patch0521 - 补交 - Merge branch 'sdk602patch0521' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - 更改低电量报警 - 卡片设置增加按键监控 - Merge branch 'sdk602patch0521' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - 下拉试图修改,图片采用直接读取内存取消采用Imagecach - Merge branch 'sdk602patch0521' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - 同步表盘资源 - 勿扰模式视图修改,注释开机加载CLOCK_IAMGES - 血氧增加按键控制 - 增加心率按键控制 - ble扫描过滤去除,ble read属性更新 - Merge #416 into sdk602patch0521 from refs/changes/416/head Code review from 胡传军 * refs/changes/416/head: (8 commits squashed) - 修复表盘协议BUG - Merge branch &#39;sdk602patch0521&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - 低电量修改 - Merge branch &#39;sdk602patch0521&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - 优化低电量关机 - Merge branch &#39;sdk602patch0521&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - 更改低电量报警 - ble扫描过滤去除,ble read属性更新 Signed-off-by: aliyun8003852482 <1224667075@qq.com> Reviewed-by: snickersun@163.com Merged-by: snickersun@163.com CR-link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/416 - Merge branches 'sdk602patch0521' and 'sdk602patch0521' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - 部分训练界面增加按键 - 其他卡片取消进入卡片设置 - 回退设置 - 支持res_only,ota_all flag制作 ota包 - update to V1.0.9 - Merge branch 'sdk602patch0521' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - 修改步数等数据存储,从记录一小时内的增值,改为记录当前时间点总值 - 修改下拉图片显示错误问题 - Merge branch 'sdk602patch0521' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - 补交 - 筛选表盘数据刷新 - LCD - LCD补交 - Merge #420 into sdk602patch0521 from refs/changes/420/head Code review from 胡传军 * refs/changes/420/head: (13 commits squashed) - 修复表盘协议BUG - Merge branch &#39;sdk602patch0521&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - 低电量修改 - Merge branch &#39;sdk602patch0521&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - 优化低电量关机 - Merge branch &#39;sdk602patch0521&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - 更改低电量报警 - ble扫描过滤去除,ble read属性更新 - Merge branch &#39;sdk602patch0521&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - 修改步数等数据存储,从记录一小时内的增值,改为记录当前时间点总值 - 补交 - LCD - LCD补交 Signed-off-by: aliyun8003852482 <1224667075@qq.com> Reviewed-by: snickersun@163.com Merged-by: snickersun@163.com CR-link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/420 - Merge #422 into sdk602patch0521 from refs/changes/422/head 筛选表盘数据刷新 * refs/changes/422/head: (1 commits squashed) - 筛选表盘数据刷新 Signed-off-by: Caisking <3449750381@qq.com> Reviewed-by: snickersun@163.com Merged-by: snickersun@163.com CR-link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/422 - Merge branch 'sdk602patch0521' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - Merge branch 'sdk602patch0521' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - 表盘BUG修复 - 优化时间戳获取时间字符串函数 - 增加睡眠数据 - AI语音ble协议更新,协议已测试,UI还需要修改 - 优化蓝牙产测lcd测试 - 表盘map增加误判断,避免错误id因为不当操作注册进来 - 增加设置心率周期检测AT - 设置心率检测优先级控制 - 增加心率检测 睡眠提醒 - Merge #423 into sdk602patch0521 from refs/changes/423/head Code review from 胡传军 * refs/changes/423/head: (17 commits squashed) - 修复表盘协议BUG - Merge branch &#39;sdk602patch0521&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - 低电量修改 - Merge branch &#39;sdk602patch0521&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - 优化低电量关机 - Merge branch &#39;sdk602patch0521&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - 更改低电量报警 - ble扫描过滤去除,ble read属性更新 - Merge branch &#39;sdk602patch0521&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - 修改步数等数据存储,从记录一小时内的增值,改为记录当前时间点总值 - 补交 - LCD - LCD补交 - Merge branch &#39;sdk602patch0521&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - 表盘BUG修复 - AI语音ble协议更新,协议已测试,UI还需要修改 - 表盘map增加误判断,避免错误id因为不当操作注册进来 Signed-off-by: aliyun8003852482 <1224667075@qq.com> Reviewed-by: snickersun@163.com Merged-by: snickersun@163.com CR-link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/423 - Merge #425 into sdk602patch0521 from refs/changes/425/head Code review from 袁清梦 * refs/changes/425/head: (7 commits squashed) - 筛选表盘数据刷新 - Merge branch &#39;sdk602patch0521&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - 优化时间戳获取时间字符串函数 - 增加睡眠数据 - 增加设置心率周期检测AT - 设置心率检测优先级控制 - 增加心率检测 睡眠提醒 Signed-off-by: Caisking <3449750381@qq.com> Reviewed-by: snickersun@163.com Merged-by: snickersun@163.com CR-link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/425 - 补交 - Merge branch 'sdk602patch0521' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - Merge branch 'sdk602patch0521' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - 修复睡眠闹钟bug - bt测试修改 - 修复视频表盘电量配置 - 增加睡眠前20分钟弹窗提醒 - 增加睡眠弹窗 睡眠开启勿扰模式 - 兼容PY25Q128LA NORFLASH - Merge #428 into sdk602patch0521 from refs/changes/428/head bt测试修改 * refs/changes/428/head: (1 commits squashed) - bt测试修改 Signed-off-by: aliyun8003852482 <1224667075@qq.com> Reviewed-by: snickersun@163.com Merged-by: snickersun@163.com CR-link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/428 - 增加资源文件 - 同步原文件更新 - 协议bug修复,增加MP3目录获取(解析MP3还有问题) - Merge branch 'sdk602patch0521' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - 放大设置卡片下方按键为400宽 - 增加早起弹窗 - Merge branch 'sdk602patch0521' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - Merge branch 'sdk602patch0521' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - 时间戳打印测试接口 - Merge #430 into sdk602patch0521 from refs/changes/430/head 优化蓝牙产测LCD测试,TP测试 * refs/changes/430/head: (1 commits squashed) - 优化蓝牙产测LCD测试,TP测试 Signed-off-by: aliyun6865282430 <1624952103@qq.com> Reviewed-by: snickersun@163.com Merged-by: snickersun@163.com CR-link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/430 - 优化早安弹窗 - Merge branch 'sdk602patch0521' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - 心率周期检测 Signed-off-by: snickersun@163.com Reviewed-by: snickersun@163.com Merged-by: snickersun@163.com CR-link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/434 --- autobuild.sh | 2 +- .../battery/service/battery_driver.cpp | 29 +- .../add_card/include/AddCardPresenter.h | 68 +- .../nativeui/add_card/src/AddCardItem.cpp | 10 +- .../add_card/src/AddCardPresenter.cpp | 17 + .../include/AlarmClockTimerConfig.h | 13 +- .../src/AlarmClockTimerConfig.cpp | 485 +++++--- .../bloodoxygen/include/BloodOxygenModel.h | 15 + .../bloodoxygen/src/BloodOxygenModel.cpp | 23 +- .../bloodoxygen/src/BloodOxygenPresenter.cpp | 51 +- .../bloodoxygen/src/BloodOxygenView.cpp | 4 + .../nativeui/bluetooth/src/BluetoothModel.cpp | 30 +- .../dnotdisturb/include/DnotDisturbView.h | 5 +- .../dnotdisturb/src/DnotDisturbView.cpp | 36 +- .../health_service/health_service.cpp | 396 +++--- .../health_service/health_service.h | 23 +- .../nativeui/heartrate/include/HeartModel.h | 12 +- .../nativeui/heartrate/src/HeartModel.cpp | 17 +- .../nativeui/heartrate/src/HeartPresenter.cpp | 59 +- .../nativeui/heartrate/src/HeartView.cpp | 3 + .../main/include/MainPresenterSample.h | 4 +- .../nativeui/main/include/PullUpDownView.h | 137 +++ .../nativeui/main/src/MainPresenterSample.cpp | 23 +- .../nativeui/main/src/PullUpDownView.cpp | 1085 ++++++++++++++++- .../main/src/dial/DialModelHeartRate.cpp | 9 + .../nativeui/message/src/MessageModel.cpp | 4 +- .../nativeui/phone/src/PhoneDirView.cpp | 6 +- .../nativeui/producttest/include/testLCD.h | 3 +- .../nativeui/producttest/include/testLCDC.h | 28 + .../producttest/include/testPresenterC.h | 28 + .../nativeui/producttest/include/testTP.h | 1 + .../nativeui/producttest/include/testTPC.h | 28 + .../nativeui/producttest/src/testLCD.cpp | 59 +- .../producttest/src/testPresenter.cpp | 24 +- .../nativeui/producttest/src/testTP.cpp | 25 + .../nativeui/producttest/src/testbt.cpp | 2 +- .../src/RespiratoryTrainingModel.cpp | 6 +- .../nativeui/rtcservice/src/rtc_at_cmd.cpp | 12 - .../screensetting/src/ScreenModels.cpp | 2 +- .../nativeui/set_dial/src/SetDialModel.cpp | 46 +- .../nativeui/sleep/include/SleepModel.h | 104 +- .../nativeui/sleep/include/SleepTimeView.h | 8 +- .../nativeui/sleep/src/SleepModel.cpp | 299 ++++- .../nativeui/sleep/src/SleepTimeView.cpp | 22 +- .../fd230app/nativeui/sleep/src/SleepView.cpp | 26 +- .../system/include/SystemPresenterC.h | 27 + .../nativeui/system/src/SystemPresenter.cpp | 21 + .../traing/include/TraingEnddataPresenter.h | 15 +- .../traing/include/TraingNomalPresenter.h | 4 +- .../nativeui/traing/include/TraingPresenter.h | 10 +- .../traing/include/TraingSetPresenter.h | 4 +- .../traing/src/TraingEnddataPresenter.cpp | 15 + .../nativeui/traing/src/TraingEnddataView.cpp | 6 +- .../traing/src/TraingNomalPresenter.cpp | 16 + .../nativeui/traing/src/TraingNomalView.cpp | 4 + .../nativeui/traing/src/TraingPresenter.cpp | 17 + .../traing/src/TraingSetPresenter.cpp | 25 +- .../nativeui/traing/src/TraingView.cpp | 6 +- .../ble_service/blemoder/CMakeLists.txt | 5 +- .../service/ble_service/blemoder/bletest.cpp | 184 ++- .../service/ble_service/blemoder/bletest.h | 22 + .../service/ble_service/bleservice/bleEvent.c | 70 +- .../ble_service/bleservice/bleService.c | 108 +- .../broadcast/include/broadcast_feature.h | 1 + .../broadcast/src/broadcast_implement.c | 1 + .../factorytest_protocol.c | 70 +- .../service/msg_center/CMakeLists.txt | 2 + .../include/notify/sleep_notification.h | 47 + .../msg_center/src/msg_center_customer.cpp | 60 +- .../src/notify/charge_notification.cpp | 57 +- .../src/notify/sleep_notification.cpp | 277 +++++ code/sdk/bootloader/flashboot/brandy/main.c | 2 +- .../nandflash/include/nandflash_ds35x1g.h | 12 +- .../brandy/build_brandy_update.py | 9 +- .../fd230/fs/user/res/Sleep/alarmicon.bin | 3 + .../fd230/fs/user/res/Sleep/goodmorning.bin | 3 + .../fd230/fs/user/res/Sleep/sunny.bin | 3 + .../user/res/dropdown/DROPDOWN_BLUETOOTH.bin | 3 + .../dropdown/DROPDOWN_BLUETOOTHCONNECTED.bin | 3 + .../DROPDOWN_BLUETOOTHDISCONNECTED.bin | 3 + .../res/dropdown/DROPDOWN_DNOTDISTURB.bin | 3 + .../dropdown/DROPDOWN_EARPHONESCONNECTED.bin | 3 + .../DROPDOWN_EARPHONESDISCONNECTED.bin | 3 + .../user/res/dropdown/DROPDOWN_FINDPHONE.bin | 3 + .../fs/user/res/dropdown/DROPDOWN_LINE.bin | 3 + .../user/res/dropdown/DROPDOWN_NOSIGNAL.bin | 3 + .../res/dropdown/DROPDOWN_PHONECONNECTED.bin | 3 + .../dropdown/DROPDOWN_PHONEDISCONNECTED.bin | 3 + .../user/res/dropdown/DROPDOWN_SAVEPOWER.bin | 3 + .../fs/user/res/dropdown/DROPDOWN_SETTING.bin | 3 + .../nand/include/nandflash_ds35x1g.h | 12 +- .../peripheral/config/include/ConfigModelC.h | 8 +- .../peripheral/config/src/ConfigModel.cpp | 20 + .../peripheral/cywee/Inc/cywee_service.h | 5 +- .../peripheral/cywee/service/cywee_service.c | 5 +- .../peripheral/cywee/src/board_yh601s.c | 54 +- .../drivers/peripheral/cywee/src/main_dml.c | 21 +- .../drivers/peripheral/ppg/hx3695/hx3695.c | 18 - .../drivers/peripheral/ppg/hx3695/hx3695.h | 3 - .../drivers/peripheral/utils/custom_utils.c | 101 +- .../drivers/peripheral/utils/custom_utils.h | 17 +- .../peripheral/utils/custom_utils_at_cmd.c | 51 +- .../driver/flash/flash_common_config.h | 3 + .../include/driver/flash/flash_config_info.h | 22 + .../driver/flash/flash_others_config.h | 45 + .../chips/brandy/nv/nv_porting/nv_flash.c | 4 +- .../brandy/update/common/upg_common_porting.c | 8 +- ...r_execute_command_flash_writing_commands.c | 4 +- .../instance/asteroid/asteroid.xml | 4 +- .../instance/asteroid/preview_asteroid.png | Bin 0 -> 227666 bytes .../instance/satellite/preview_satellite.png | Bin 0 -> 213396 bytes .../instance/satellite/satellite.xml | 4 +- .../test/hert/Sleep/alarmicon.png | Bin 0 -> 511 bytes .../test/hert/Sleep/goodmorning.png | Bin 0 -> 133331 bytes .../test/hert/Sleep/sunny.png | Bin 0 -> 6724 bytes 115 files changed, 3903 insertions(+), 940 deletions(-) create mode 100644 code/sdk/application/wearable/fd230app/nativeui/producttest/include/testLCDC.h create mode 100644 code/sdk/application/wearable/fd230app/nativeui/producttest/include/testPresenterC.h create mode 100644 code/sdk/application/wearable/fd230app/nativeui/producttest/include/testTPC.h create mode 100644 code/sdk/application/wearable/fd230app/nativeui/system/include/SystemPresenterC.h create mode 100644 code/sdk/application/wearable/service/msg_center/include/notify/sleep_notification.h create mode 100644 code/sdk/application/wearable/service/msg_center/src/notify/sleep_notification.cpp create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/Sleep/alarmicon.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/Sleep/goodmorning.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/Sleep/sunny.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_BLUETOOTH.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_BLUETOOTHCONNECTED.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_BLUETOOTHDISCONNECTED.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_DNOTDISTURB.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_EARPHONESCONNECTED.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_EARPHONESDISCONNECTED.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_FINDPHONE.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_LINE.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_NOSIGNAL.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_PHONECONNECTED.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_PHONEDISCONNECTED.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_SAVEPOWER.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_SETTING.bin create mode 100644 tools/dial_converter_tool/instance/asteroid/preview_asteroid.png create mode 100644 tools/dial_converter_tool/instance/satellite/preview_satellite.png create mode 100644 tools/image_converter_tool/test/hert/Sleep/alarmicon.png create mode 100644 tools/image_converter_tool/test/hert/Sleep/goodmorning.png create mode 100644 tools/image_converter_tool/test/hert/Sleep/sunny.png diff --git a/autobuild.sh b/autobuild.sh index c4813733a..6aef2a623 100755 --- a/autobuild.sh +++ b/autobuild.sh @@ -5,7 +5,7 @@ DATE=$(date +%Y%m%d_%H%M%S) HOMEDIR=$PWD DEFAULT_BUILD_TYPE=release DEFAULT_TARGET_PACK_NAME=pack_brandy_native_js -DEFAULT_CUSTOM_FW_VERSION=1.0.8 +DEFAULT_CUSTOM_FW_VERSION=1.0.9 TARGET_PACK_NAME=$DEFAULT_TARGET_PACK_NAME RELEASE_BUILD=$DEFAULT_BUILD_TYPE diff --git a/code/sdk/application/battery/service/battery_driver.cpp b/code/sdk/application/battery/service/battery_driver.cpp index cd83fd74b..25b050acf 100644 --- a/code/sdk/application/battery/service/battery_driver.cpp +++ b/code/sdk/application/battery/service/battery_driver.cpp @@ -450,6 +450,8 @@ static int battery_get_power_percentage(float voltage) static void get_avg_voltage(float *vol) { uint32_t current_time = 0; + float max_vol = 0; + float min_vol = 0; uapi_get_timestampe_ss(¤t_time); if(history_time == 0) history_time = current_time; @@ -459,24 +461,39 @@ static void get_avg_voltage(float *vol) if(sample_time >= 10) { sample_time = 0; - if(vol_num == 5) + if(vol_num == 7) { sum_vol -= history_data[left]; history_data[left] = 0; left++; - left = left % 5; + left = left % 7; vol_num--; } vol_num++; right++; - right = right % 5; + right = right % 7; history_data[right] = *vol; sum_vol += history_data[right]; } - if(vol_num != 0) - *vol = sum_vol / vol_num; - + if(vol_num > 0) + { + if(vol_num > 2) + { + min_vol = history_data[0]; + max_vol = history_data[0]; + for (int i = 0;i < vol_num; i++) + { + if (history_data[i] < min_vol) + min_vol = history_data[i]; + if (history_data[i] > max_vol) + max_vol = history_data[i]; + } + *vol = (sum_vol - max_vol - min_vol) / (vol_num - 2); + } + else + *vol = sum_vol / vol_num; + } } diff --git a/code/sdk/application/wearable/fd230app/nativeui/add_card/include/AddCardPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/add_card/include/AddCardPresenter.h index ffaebdf7c..09ce84860 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/add_card/include/AddCardPresenter.h +++ b/code/sdk/application/wearable/fd230app/nativeui/add_card/include/AddCardPresenter.h @@ -1,3 +1,9 @@ +/*** + * @Date: 2024-05-30 15:59:37 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-06-29 14:46:02 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/add_card/include/AddCardPresenter.h + */ /* * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved. * Description: AddCardPresenter.h @@ -14,36 +20,38 @@ #include "KeyInputListener.h" #include "ModelListenerSample.h" -#define TOAST_KEEP_TIME 1000 - -namespace OHOS { -static const char *ADD_CARD_ADD = "addcardadd"; - -class AddCardView; -class AddCardModel; -class AddCardPresenter : public Presenter, public ModelListenerSample, - public UIView::OnClickListener, public UIView::OnDragListener, - public ListScrollListener { -public: - AddCardPresenter(); - ~AddCardPresenter() override; - - void OnStart() override; - void OnResume() override; - void OnStop() override; - void OnTickEvent() override; - void Notify() override {} - bool OnClick(UIView &view, const ClickEvent &event) override; - void OnScrollStart(int16_t index, UIView *view) override; - void OnScrollEnd(int16_t index, UIView *view) override; - void OnItemSelected(int16_t index, UIView* view) override; - bool OnDrag(UIView& view, const DragEvent& event) override; -private: - void ResetTickTimer(void); - AddCardModel *model{nullptr}; - uint64_t startTime{0}; - bool cardCountEvent{false}; -}; +#define TOAST_KEEP_TIME 1000 + +namespace OHOS +{ + static const char *ADD_CARD_ADD = "addcardadd"; + + class AddCardView; + class AddCardModel; + class AddCardPresenter : public Presenter, public ModelListenerSample, public UIView::OnClickListener, public UIView::OnDragListener, public ListScrollListener + { + public: + AddCardPresenter(); + ~AddCardPresenter() override; + + void OnStart() override; + void OnResume() override; + void OnStop() override; + void OnTickEvent() override; + void Notify() override {} + bool OnClick(UIView &view, const ClickEvent &event) override; + void OnScrollStart(int16_t index, UIView *view) override; + void OnScrollEnd(int16_t index, UIView *view) override; + void OnItemSelected(int16_t index, UIView *view) override; + bool OnDrag(UIView &view, const DragEvent &event) override; + + private: + void ResetTickTimer(void); + AddCardModel *model{nullptr}; + uint64_t startTime{0}; + bool cardCountEvent{false}; + KeyInputListener *keyActListenr{nullptr}; + }; } #endif // ADD_CARD_PRESENTER_H \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/add_card/src/AddCardItem.cpp b/code/sdk/application/wearable/fd230app/nativeui/add_card/src/AddCardItem.cpp index 5da769a44..2a2864bed 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/add_card/src/AddCardItem.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/add_card/src/AddCardItem.cpp @@ -1,3 +1,9 @@ +/*** + * @Date: 2024-04-15 10:55:58 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-07-02 16:12:03 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/add_card/src/AddCardItem.cpp + */ /*** * @Date: 2024-04-15 10:55:58 * @LastEditors: Caisking 3449750381@qq.com @@ -35,8 +41,8 @@ namespace OHOS cardImg_.SetResizeMode(UIImageView::FILL); cardImg_.SetStyle(STYLE_IMAGE_OPA, OPA_OPAQUE); - cardToggleButton_.SetPosition(133, 366); - cardToggleButton_.Resize(200, 100); + cardToggleButton_.SetPosition(33, 366); + cardToggleButton_.Resize(400, 100); cardToggleButton_.SetViewId("toggleButton1"); cardToggleButton_.SetStyle(STYLE_BACKGROUND_OPA, 0x00); diff --git a/code/sdk/application/wearable/fd230app/nativeui/add_card/src/AddCardPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/add_card/src/AddCardPresenter.cpp index b92ffb584..a803d3560 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/add_card/src/AddCardPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/add_card/src/AddCardPresenter.cpp @@ -19,11 +19,28 @@ namespace OHOS AddCardPresenter::~AddCardPresenter() { + if (keyActListenr != nullptr) + { + delete keyActListenr; + keyActListenr = nullptr; + } } void AddCardPresenter::OnStart() { Presenter::OnStart(); + if (keyActListenr == nullptr) + { + keyActListenr = new KeyInputListener(); + if (keyActListenr != nullptr) + { + RootView::GetInstance()->SetOnKeyActListener(keyActListenr); + } + else + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ApplistPresenter::OnStart: new KeyInputListener fail"); + } + } } void AddCardPresenter::OnResume(void) diff --git a/code/sdk/application/wearable/fd230app/nativeui/alarmclocktimerconfig/include/AlarmClockTimerConfig.h b/code/sdk/application/wearable/fd230app/nativeui/alarmclocktimerconfig/include/AlarmClockTimerConfig.h index 5c6376744..978755cbc 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/alarmclocktimerconfig/include/AlarmClockTimerConfig.h +++ b/code/sdk/application/wearable/fd230app/nativeui/alarmclocktimerconfig/include/AlarmClockTimerConfig.h @@ -1,3 +1,13 @@ +/* + * @Author: penglei 1624952103@qq.com + * @Date: 2024-06-07 11:18:25 + * @LastEditors: penglei 1624952103@qq.com + * @LastEditTime: 2024-06-29 14:34:23 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/alarmclocktimerconfig/include/AlarmClockTimerConfig.h + * @Description: + * + * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. + */ /* * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved. * Description: AlarmClockTimer @@ -56,7 +66,8 @@ int32_t AlarmTimerInit(void); int32_t SetZeroAlarm(void); int32_t SetAlarm(AlarmType type, uint8_t week, uint8_t hour, uint8_t minute); int32_t AlarmGetCurrentTimeInfo(struct tm *timeInfo); - +void set_sleep_and_wake_time(void); +void get_sleep_time_notify(void); #ifdef __cplusplus } #endif diff --git a/code/sdk/application/wearable/fd230app/nativeui/alarmclocktimerconfig/src/AlarmClockTimerConfig.cpp b/code/sdk/application/wearable/fd230app/nativeui/alarmclocktimerconfig/src/AlarmClockTimerConfig.cpp index 0b2fd5c7d..9e3af5bac 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/alarmclocktimerconfig/src/AlarmClockTimerConfig.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/alarmclocktimerconfig/src/AlarmClockTimerConfig.cpp @@ -1,3 +1,9 @@ +/*** + * @Date: 2024-06-29 15:06:13 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-07-01 17:31:58 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/alarmclocktimerconfig/src/AlarmClockTimerConfig.cpp + */ /* * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved. * Description: AlarmClockTimer @@ -17,197 +23,362 @@ #include "graphic_service.h" #include "AlarmClockTimerConfig.h" +#include "cywee_service.h" +#include "ConfigModelC.h" +#include "ConfigModel.h" +#include "heartrate/include/HeartModel.h" +#include "sleep/include/SleepModel.h" +#include "cat1_server_hal.h" #ifdef __cplusplus -extern "C" { +extern "C" +{ #endif -static AlarmCtrl g_alarmCtrA; -static AlarmCtrl g_alarmCtrB; -static osTimerId_t g_AlarmHandle = nullptr; + static AlarmCtrl g_alarmCtrA; + static AlarmCtrl g_alarmCtrB; + static osTimerId_t g_AlarmHandle = nullptr; -void AlarmTimerEventPublish(uint16 topic, AlarmClockEventData data) -{ - int32 ret; - uint32 size = sizeof(AlarmClockEventData); - Request *request = nullptr; - BroadcastApi *broadcastApi = nullptr; - IUnknown *api = nullptr; - - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmTimerEventPublish topic=%u!!", topic); - - /* alloc request */ - request = SAMGR_AllocRequestMsg(0, PLATFORM_CORE, BROADCAST_SVR_ID, size); - if (request == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SAMGR_AllocRequestMsg failed"); - return; - } - request->msgId = topic; - ret = memcpy_s(request->data, size, (const void *)&data, size); - if (ret != EOK) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AlarmTimerEventPublish memcpy_s rateDataTmp fail! ret = %d", ret); - return; - } - request->len = size; - request->msgValue = 0; - - /* public request */ - api = SAMGR_GetInstance()->GetFeatureApi(BROADCAST_SERVICE_NAME, BROADCAST_FEATURE_NAME); - if (api == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetFeatureApi failed"); - SAMGR_FreeRequestMsg(request); - return; - } - ret = api->QueryInterface(api, DEFAULT_VERSION, (void **)&broadcastApi); - if (ret != 0 || broadcastApi == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "QueryInterface failed"); - SAMGR_FreeRequestMsg(request); - return; +#define SLEPPNOTIFY 20 + + static int sleep_time = 0; + static int wake_up_time = 0; + static int sleep_notify_time = 0; + static int sleep_time_hour = 0; + static int sleep_time_min = 0; + + // 设置目标睡眠时间 + void set_sleep_and_wake_time(void) + { + sleep_time = get_sleep_time_from_config_model(); + wake_up_time = get_wake_up_time_from_config_model(); } - broadcastApi->PublishTopic((IUnknown *)broadcastApi, request); - broadcastApi->Release((IUnknown *)broadcastApi); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmTimerEventPublish end!!"); + // 设置睡眠提醒时间 + void get_sleep_time_notify(void) + { + int goal_hour = sleep_time >> 16; + int goal_min = (sleep_time & 0X00FF); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "goal_hour:%d goal_min:%d", goal_hour, goal_min); - return; -} + sleep_time_min = (goal_min >= SLEPPNOTIFY) ? goal_min - SLEPPNOTIFY : ((goal_min + 60) - SLEPPNOTIFY); // 避免分钟数为负 + sleep_time_hour = goal_hour; + if (goal_min < SLEPPNOTIFY) + { // 如果需要借位 + sleep_time_hour -= 1; // 小时减1 + } + // 确保小时数正确 + sleep_time_hour = (sleep_time_hour < 0) ? 23 : sleep_time_hour; // 处理从0点前20分钟的情况,变为前一天的23点40分 -static void AlarmCallBackProcA(void) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmCallBackProcA"); - AlarmClockEventData unuse; - GraphicService::GetInstance()->PostGraphicEvent( - std::bind(AlarmTimerEventPublish, TOPIC_EVENT_ALARM_RING, unuse)); -} + sleep_notify_time = (sleep_time_hour << 16) | sleep_time_min; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sleep_time_hour:%d sleep_time_min:%d sleep_notify_time:%d", sleep_time_hour, sleep_time_min, sleep_notify_time); + } + void AlarmEventPublish(uint16_t topic, uint8_t *data, uint32_t size) + { + int32 ret; -static void AlarmCallBackProcB(void) -{ - AlarmClockEventData unuse; - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmCallBackProcB"); - GraphicService::GetInstance()->PostGraphicEvent( - std::bind(AlarmTimerEventPublish, TOPIC_EVENT_NEXTDAY_UPDATE, unuse)); - GraphicService::GetInstance()->PostGraphicEvent(SetZeroAlarm); -} + Request *request = NULL; + BroadcastApi *broadcastApi = NULL; + IUnknown *api = NULL; + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChargerEventPublish topic=%u!!", topic); -static void on_time_CallBackProc(void) -{ - AlarmClockEventData unuse; - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "on_time_CallBackProc"); - GraphicService::GetInstance()->PostGraphicEvent( - std::bind(AlarmTimerEventPublish, TOPIC_EVENT_ON_TIME, unuse)); -} + /* alloc request */ + request = SAMGR_AllocRequestMsg(0, PLATFORM_CORE, BROADCAST_SVR_ID, size); + if (request == NULL) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SAMGR_AllocRequestMsg failed"); + return; + } + request->msgId = topic; + if (size > 0) + { + ret = memcpy_s(request->data, size, (const void *)data, size); + if (ret != EOK) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ChargerEventPublish memcpy_s rateDataTmp fail! ret = %d", ret); + return; + } + } + request->len = size; + request->msgValue = 0; + + /* public request */ + api = SAMGR_GetInstance()->GetFeatureApi(BROADCAST_SERVICE_NAME, BROADCAST_FEATURE_NAME); + if (api == NULL) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetFeatureApi failed"); + SAMGR_FreeRequestMsg(request); + return; + } + ret = api->QueryInterface(api, DEFAULT_VERSION, (void **)&broadcastApi); + if (ret != 0 || broadcastApi == NULL) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "QueryInterface failed"); + SAMGR_FreeRequestMsg(request); + return; + } + broadcastApi->PublishTopic((IUnknown *)broadcastApi, request); + broadcastApi->Release((IUnknown *)broadcastApi); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChargerEventPublish end!!"); -void AlarmScan(void *arg) -{ - struct tm curTime; - int32_t ret = AlarmGetCurrentTimeInfo(&curTime); - if (ret != ERRCODE_SUCC) { return; } + void AlarmTimerEventPublish(uint16 topic, AlarmClockEventData data) + { + int32 ret; + uint32 size = sizeof(AlarmClockEventData); + Request *request = nullptr; + BroadcastApi *broadcastApi = nullptr; + IUnknown *api = nullptr; - if (g_alarmCtrA.state == ALARM_STATUS_RUNNING) { - if ((g_alarmCtrA.callback != nullptr) && - (g_alarmCtrA.info.hour == curTime.tm_hour) && - (g_alarmCtrA.info.minute == curTime.tm_min)) { - g_alarmCtrA.callback(); - g_alarmCtrA.state = ALARM_STATUS_CREATED; + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmTimerEventPublish topic=%u!!", topic); + + /* alloc request */ + request = SAMGR_AllocRequestMsg(0, PLATFORM_CORE, BROADCAST_SVR_ID, size); + if (request == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SAMGR_AllocRequestMsg failed"); + return; } - } + request->msgId = topic; + ret = memcpy_s(request->data, size, (const void *)&data, size); + if (ret != EOK) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AlarmTimerEventPublish memcpy_s rateDataTmp fail! ret = %d", ret); + return; + } + request->len = size; + request->msgValue = 0; - if (g_alarmCtrB.state == ALARM_STATUS_RUNNING) { - if ((g_alarmCtrB.callback != NULL) && - //(g_alarmCtrB.info.week == curTime.tm_wday) && - (g_alarmCtrB.info.hour == curTime.tm_hour) && - (g_alarmCtrB.info.minute == curTime.tm_min) && - (g_alarmCtrB.info.second == curTime.tm_sec)) { - g_alarmCtrB.callback(); - g_alarmCtrB.state = ALARM_STATUS_CREATED; + /* public request */ + api = SAMGR_GetInstance()->GetFeatureApi(BROADCAST_SERVICE_NAME, BROADCAST_FEATURE_NAME); + if (api == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetFeatureApi failed"); + SAMGR_FreeRequestMsg(request); + return; } + ret = api->QueryInterface(api, DEFAULT_VERSION, (void **)&broadcastApi); + if (ret != 0 || broadcastApi == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "QueryInterface failed"); + SAMGR_FreeRequestMsg(request); + return; + } + broadcastApi->PublishTopic((IUnknown *)broadcastApi, request); + broadcastApi->Release((IUnknown *)broadcastApi); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmTimerEventPublish end!!"); + + return; } - if(curTime.tm_min==0 && curTime.tm_sec==0) + /*闹钟*/ + static void AlarmCallBackProcA(void) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "time: %d : %d",curTime.tm_hour,curTime.tm_min); - on_time_CallBackProc(); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmCallBackProcA"); + AlarmClockEventData unuse; + GraphicService::GetInstance()->PostGraphicEvent( + std::bind(AlarmTimerEventPublish, TOPIC_EVENT_ALARM_RING, unuse)); } -} -static int32_t AlarmCreate(AlarmCtrl *alarmCtrl, AlarmCallBack callback) -{ - if (alarmCtrl == nullptr) { - return ERRCODE_FAIL; - } - if (alarmCtrl->state == ALARM_STATUS_UNUSED) { - alarmCtrl->state = ALARM_STATUS_CREATED; - alarmCtrl->callback = callback; + /*NextDay*/ + static void AlarmCallBackProcB(void) + { + AlarmClockEventData unuse; + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmCallBackProcB"); + GraphicService::GetInstance()->PostGraphicEvent( + std::bind(AlarmTimerEventPublish, TOPIC_EVENT_NEXTDAY_UPDATE, unuse)); + GraphicService::GetInstance()->PostGraphicEvent(SetZeroAlarm); } - return ERRCODE_SUCC; -} -int32_t AlarmTimerInit(void) -{ - int32_t timerStatus; - int32_t ret; - - g_alarmCtrA.state = ALARM_STATUS_UNUSED; - g_alarmCtrB.state = ALARM_STATUS_UNUSED; - g_AlarmHandle = osTimerNew(AlarmScan, osTimerPeriodic, nullptr, nullptr); - if (g_AlarmHandle == nullptr) { - return ERRCODE_FAIL; + static void on_time_CallBackProc(void) + { + AlarmClockEventData unuse; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "on_time_CallBackProc"); + GraphicService::GetInstance()->PostGraphicEvent( + std::bind(AlarmTimerEventPublish, TOPIC_EVENT_ON_TIME, unuse)); } - timerStatus = osTimerStart(g_AlarmHandle, ALARM_INTERVAL_MS); - if (timerStatus != osOK) { - return ERRCODE_FAIL; + + void AlarmScan(void *arg) + { + struct tm curTime; + int32_t ret = AlarmGetCurrentTimeInfo(&curTime); + if (ret != ERRCODE_SUCC) + { + return; + } + + if (g_alarmCtrA.state == ALARM_STATUS_RUNNING) + { + if ((g_alarmCtrA.callback != nullptr) && + (g_alarmCtrA.info.hour == curTime.tm_hour) && + (g_alarmCtrA.info.minute == curTime.tm_min)) + { + g_alarmCtrA.callback(); + g_alarmCtrA.state = ALARM_STATUS_CREATED; + } + } + + if (g_alarmCtrB.state == ALARM_STATUS_RUNNING) + { + if ((g_alarmCtrB.callback != NULL) && + //(g_alarmCtrB.info.week == curTime.tm_wday) && + (g_alarmCtrB.info.hour == curTime.tm_hour) && + (g_alarmCtrB.info.minute == curTime.tm_min) && + (g_alarmCtrB.info.second == curTime.tm_sec)) + { + g_alarmCtrB.callback(); + g_alarmCtrB.state = ALARM_STATUS_CREATED; + } + } + // 整点回调 + if (curTime.tm_min == 0 && curTime.tm_sec == 0) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "time: %d : %d", curTime.tm_hour, curTime.tm_min); + on_time_CallBackProc(); + } + // 睡眠总开关 + if (OHOS::ConfigModel::GetInstance()->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_SLEEP)) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CONFIGMODEL_ITEM_SLEEP is OK"); + // 睡眠提醒[前提开启睡眠提醒] + if (OHOS::ConfigModel::GetInstance()->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_SLEEP_REMIND)) + { + // 提醒一次 + if ((curTime.tm_hour == sleep_time_hour) && (curTime.tm_min == sleep_time_min) && (curTime.tm_sec == 0)) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "It's bedtime in 20 minutes"); + printf("20分钟后要睡觉啦!\r\n"); + AlarmEventPublish(TOPIC_EVENT_SLEEPNOTE, (uint8_t *)sleep_notify_time, 4); + // 设置状态为睡眠提醒 + OHOS::SleepModel::GetInstance().set_sleep_state(OHOS::SLEEPSTATE::SLEEPNOTIFY); + } + } + // 进入睡眠模式 + if ((curTime.tm_hour == (sleep_time >> 16)) && (curTime.tm_min == (sleep_time & 0X00FF)) && (curTime.tm_sec == 0)) + { + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_SLEEPING_MODE, NULL); + // 睡眠弹窗 + printf("要睡觉啦!\r\n"); + AlarmEventPublish(TOPIC_EVENT_SLEEPNOTE, (uint8_t *)sleep_notify_time, 4); + // 设置状态为睡眠 + OHOS::SleepModel::GetInstance().set_sleep_state(OHOS::SLEEPSTATE::SLEPP); + } + // 退出睡眠模式 + if ((curTime.tm_hour == (wake_up_time >> 16)) && (curTime.tm_min == (wake_up_time & 0X00FF)) && (curTime.tm_sec == 0)) + { + printf("起床啦!\r\n"); + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NAP_SEDENTARY_MODE, NULL); + // 早安提醒 + AlarmEventPublish(TOPIC_EVENT_SLEEPNOTE, (uint8_t *)sleep_notify_time, 4); + // 设置状态为睡眠 + OHOS::SleepModel::GetInstance().set_sleep_state(OHOS::SLEEPSTATE::WALK); + } + } + + // 心率周期检测 [0 1 5 10] + if (OHOS::ConfigModel::GetInstance()->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_DETECTED)) + { + if (curTime.tm_min % (OHOS::ConfigModel::GetInstance()->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_DETECTED)) == 0 && curTime.tm_sec == 0) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Automatic heart rate detection starts"); + // 开启心率检测 如果有其他心率检测在进行,则不会进行检测[低优先级] + OHOS::HeartModel::GetInstance()->Heart_Control(OHOS::HeartState::Start, OHOS::HeartCheck::PASSIVITY); + } + } } - ret = AlarmCreate(&g_alarmCtrA, AlarmCallBackProcA); - if (ret != ERRCODE_SUCC) { - return ERRCODE_FAIL; + + static int32_t AlarmCreate(AlarmCtrl *alarmCtrl, AlarmCallBack callback) + { + if (alarmCtrl == nullptr) + { + return ERRCODE_FAIL; + } + if (alarmCtrl->state == ALARM_STATUS_UNUSED) + { + alarmCtrl->state = ALARM_STATUS_CREATED; + alarmCtrl->callback = callback; + } + return ERRCODE_SUCC; } - ret = AlarmCreate(&g_alarmCtrB, AlarmCallBackProcB); - if (ret != ERRCODE_SUCC) { - return ERRCODE_FAIL; + + int32_t AlarmTimerInit(void) + { + int32_t timerStatus; + int32_t ret; + + g_alarmCtrA.state = ALARM_STATUS_UNUSED; + g_alarmCtrB.state = ALARM_STATUS_UNUSED; + g_AlarmHandle = osTimerNew(AlarmScan, osTimerPeriodic, nullptr, nullptr); + if (g_AlarmHandle == nullptr) + { + return ERRCODE_FAIL; + } + timerStatus = osTimerStart(g_AlarmHandle, ALARM_INTERVAL_MS); + if (timerStatus != osOK) + { + return ERRCODE_FAIL; + } + ret = AlarmCreate(&g_alarmCtrA, AlarmCallBackProcA); + if (ret != ERRCODE_SUCC) + { + return ERRCODE_FAIL; + } + ret = AlarmCreate(&g_alarmCtrB, AlarmCallBackProcB); + if (ret != ERRCODE_SUCC) + { + return ERRCODE_FAIL; + } + set_sleep_and_wake_time(); + get_sleep_time_notify(); + return ERRCODE_SUCC; } - return ERRCODE_SUCC; -} -int32_t SetAlarm(AlarmType type, uint8_t week, uint8_t hour, uint8_t minute) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetAlarm %d %d %d %d", type, week, hour, minute); - if (type == ALARM_A) { - g_alarmCtrA.state = ALARM_STATUS_RUNNING; - g_alarmCtrA.info.hour = hour; - g_alarmCtrA.info.minute = minute; - } else if (type == ALARM_B) { - g_alarmCtrB.state = ALARM_STATUS_RUNNING; - g_alarmCtrB.info.week = week; - g_alarmCtrB.info.hour = hour; - g_alarmCtrB.info.minute = minute; - g_alarmCtrB.info.second = 1; - } else { - return ERRCODE_FAIL; + int32_t SetAlarm(AlarmType type, uint8_t week, uint8_t hour, uint8_t minute) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetAlarm %d %d %d %d", type, week, hour, minute); + if (type == ALARM_A) + { + g_alarmCtrA.state = ALARM_STATUS_RUNNING; + g_alarmCtrA.info.hour = hour; + g_alarmCtrA.info.minute = minute; + } + else if (type == ALARM_B) + { + g_alarmCtrB.state = ALARM_STATUS_RUNNING; + g_alarmCtrB.info.week = week; + g_alarmCtrB.info.hour = hour; + g_alarmCtrB.info.minute = minute; + g_alarmCtrB.info.second = 1; + } + else + { + return ERRCODE_FAIL; + } + return ERRCODE_SUCC; } - return ERRCODE_SUCC; -} -int32_t SetZeroAlarm(void) -{ - struct tm curTime; - int32_t ret = AlarmGetCurrentTimeInfo(&curTime); - if (ret != ERRCODE_SUCC) { - return ERRCODE_FAIL; + int32_t SetZeroAlarm(void) + { + struct tm curTime; + int32_t ret = AlarmGetCurrentTimeInfo(&curTime); + if (ret != ERRCODE_SUCC) + { + return ERRCODE_FAIL; + } + int32_t weekday = (++curTime.tm_wday) % 7; + return SetAlarm(ALARM_B, weekday, 0, 0); } - int32_t weekday = (++curTime.tm_wday) % 7; - return SetAlarm(ALARM_B, weekday, 0, 0); -} -int32_t AlarmGetCurrentTimeInfo(struct tm *timeInfo) -{ - if (timeInfo == nullptr) { - return ERRCODE_FAIL; + int32_t AlarmGetCurrentTimeInfo(struct tm *timeInfo) + { + if (timeInfo == nullptr) + { + return ERRCODE_FAIL; + } + time_t sec = time(nullptr); + localtime_r(&sec, timeInfo); + return ERRCODE_SUCC; } - time_t sec = time(nullptr); - localtime_r(&sec, timeInfo); - return ERRCODE_SUCC; -} #ifdef __cplusplus } diff --git a/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/include/BloodOxygenModel.h b/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/include/BloodOxygenModel.h index 10522899e..01228ae73 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/include/BloodOxygenModel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/include/BloodOxygenModel.h @@ -1,3 +1,9 @@ +/*** + * @Date: 2024-04-15 10:55:58 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-06-29 16:47:41 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/include/BloodOxygenModel.h + */ #ifndef BLOOD_OXYGEN_MODEL_H #define BLOOD_OXYGEN_MODEL_H @@ -6,6 +12,12 @@ namespace OHOS { + // 血氧检测状态 + enum class BloodState + { + End = 0, + Start, + }; class BloodOxygenModel { public: @@ -43,6 +55,8 @@ namespace OHOS void Blood_Stop(); void Blood_Start(); + void Blood_Control(BloodState state); + private: bool OxygenView; bool BandoffView; @@ -54,6 +68,7 @@ namespace OHOS uint16_t SPO2_; uint64_t timestamp_ms; int32_t wear_; + bool startspo2{false}; uint8_t unwear_counter_; uint8_t valid_counter_; diff --git a/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenModel.cpp index 1dcf25f05..f02ca0f2e 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenModel.cpp @@ -6,6 +6,8 @@ #include "heart_blood/health_service/health_service.h" #include "custom_utils.h" extern "C" errcode_t uapi_get_timestamp_ms(uint64_t *tm); +#include "custom_utils.h" +#include "ppg_service.h" #define MAX_UNWARE_COUNT 30 #define MAX_VALID_HRS_COUNT 30 @@ -38,6 +40,24 @@ namespace OHOS } /* ---------------------------------- 状态检测 ---------------------------------- */ + // 血氧监控 + void BloodOxygenModel::Blood_Control(BloodState state) + { + if (state == BloodState::End && startspo2 == true) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "startspo2 End"); + uint8_t md = PPG_SERVICE_CMD_TYPE_STOP_SPO2_TEST; + send_ppg_cmd_msg(md); + startspo2 = false; + } + else if (state == BloodState::Start && startspo2 == false) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "startspo2 Start"); + uint8_t md = PPG_SERVICE_CMD_TYPE_DO_SPO2_TEST; + send_ppg_cmd_msg(md); + startspo2 = true; + } + } void BloodOxygenModel::Blood_Start() { // 进行初始化操作 @@ -175,9 +195,10 @@ namespace OHOS data->timestamp = BloodOxygenPresenter::GetInstance()->GetCurrentTime(); WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%d %d", spo2, data->timestamp); SetCheckTime(data->timestamp); - HealthService::GetInstance()->UpdateBloodOxygenData(*data); + HealthService::GetInstance()->UpdateHealthData(*data); delete data; /* -------------------------------------------------------------------------- */ } } + } diff --git a/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenPresenter.cpp index 8847d7653..ad78066ad 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenPresenter.cpp @@ -36,7 +36,7 @@ #include "custom_utils.h" #include "cywee_service.h" -#define BLOODKEYABLE 0 +#define BLOODKEYABLE 1 namespace OHOS { static constexpr uint16_t PROGRESS_VALUE_MIN = 0; @@ -77,13 +77,6 @@ namespace OHOS BloodOxygenPresenter::~BloodOxygenPresenter() { -#if BLOODKEYABLE - if (keyActListenr != nullptr) - { - delete keyActListenr; - keyActListenr = nullptr; - } -#endif g_pMainView = nullptr; } BloodOxygenPresenter *BloodOxygenPresenter::GetInstance() @@ -95,20 +88,6 @@ namespace OHOS { Presenter::OnStart(); WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenPresenter::On Start "); -#if BLOODKEYABLE - if (keyActListenr == nullptr) - { - keyActListenr = new KeyInputListener(); - if (keyActListenr != nullptr) - { - RootView::GetInstance()->SetOnKeyActListener(keyActListenr); - } - else - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenPresenter::OnStart: new KeyInputListener fail"); - } - } -#endif } void BloodOxygenPresenter::OnPause(void) {} @@ -151,17 +130,18 @@ namespace OHOS bool BloodOxygenPresenter::OnKeyAct(UIView &view, const KeyEvent &event) { #if BLOODKEYABLE - WEARABLE_LOGD("", "into the view is: %s\n", typeid(view).name()); - uint16 keyID = event.GetKeyId(); - WEARABLE_LOGD("", "into key! keyID %u\n", keyID); - // 如果是power键就返回上一级 - if (keyID == static_cast(ZliteKeyCode::ZLITE_KEY_POWER)) + unsigned short keyID = event.GetKeyId(); + unsigned short keyState = event.GetState(); + // 如果是power键,且是亮屏状态,按键释放就返回上一级 + if (keyID == static_cast(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 0 && uapi_get_screen_state() == 0) { - // uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId(); - NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST); + // 关闭血氧检测 + BloodOxygenModel::GetInstance()->Blood_Control(BloodState::End); + // 回退 + NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST, TransitionType::TRANSITION_ZOOM); } -#endif return true; +#endif } /* ---------------------------------- 状态监听 ---------------------------------- */ bool BloodOxygenPresenter::OnClick(UIView &view, const ClickEvent &event) @@ -219,8 +199,9 @@ namespace OHOS { BloodCheckView::GetInstance()->GetImageAnimator()->Stop(); WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCheckStatus : false"); - uint8_t md = PPG_SERVICE_CMD_TYPE_STOP_SPO2_TEST; - send_ppg_cmd_msg(md); + // 关闭血氧检测 + BloodOxygenModel::GetInstance()->Blood_Control(BloodState::End); + startspo2 = true; } } @@ -236,8 +217,9 @@ namespace OHOS if (startspo2 == true) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCheckStatus : true"); - uint8_t md = PPG_SERVICE_CMD_TYPE_DO_SPO2_TEST; - send_ppg_cmd_msg(md); + // 开启血氧检测 + BloodOxygenModel::GetInstance()->Blood_Control(BloodState::Start); + startspo2 = false; } } @@ -300,6 +282,7 @@ namespace OHOS BloodOxygenModel::GetInstance()->Blood_Stop(); } } + void BloodOxygenPresenter::Notify(void) { ProgressNotify(); diff --git a/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenView.cpp b/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenView.cpp index d75edf6c0..5e8b9f4c0 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenView.cpp @@ -397,11 +397,15 @@ namespace OHOS WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::OnStart"); display_time = DisplayBrightnessModel::GetInstance()->GetScreenDurationTime(); display_api->set_screen_auto_off_timeout(300 * 1000); // 设置常亮 + View::OnStart(); if (!InitBloodView()) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::InitBloodView fail"); } + // 增加按键监听 + RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::BloodOxygenPresenter::GetInstance(); + RootView::GetInstance()->SetOnKeyActListener(keyactListener); } void BloodOxygenView::OnSetUpView() diff --git a/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp index 2dd3fc9d7..df0c44139 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp @@ -601,8 +601,8 @@ void BtGapPairConfirmedCallback(const bd_addr_t *bdAddr, int req_type, int numbe void BtGapDiscoveryResultCallback(const bd_addr_t *bdAddr) { if ((gap_get_device_class(bdAddr) & 0x200) != 0) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtGapDiscoveryResultCallback: Mobile Phone Device"); - return; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BtGapDiscoveryResultCallback: Mobile Phone Device"); + //return; } if (bdAddr == nullptr) { @@ -795,12 +795,12 @@ void BluetoothModel::BtGapAclStateChangedHandle(gap_acl_state_t state, unsigned // 回调:ACL连接状态上报 void GapAclStateChangedCallback(const bd_addr_t *bdAddr, gap_acl_state_t state, unsigned int reason) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "bt GapAclStateChangedCallback state %d, reason %x succ or err", state, reason); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "addr: %02x%02x%02x%02x%02x%02x", + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bt GapAclStateChangedCallback state %d, reason %x succ or err", state, reason); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "addr: %02x%02x%02x%02x%02x%02x", bdAddr->addr[5], bdAddr->addr[4], bdAddr->addr[3], /* mac下标 0 1 2 3 4 5 */ bdAddr->addr[2], bdAddr->addr[1], bdAddr->addr[0]); /* mac下标 0 1 2 3 4 5 */ if ((gap_get_device_class(bdAddr) & 0x200) != 0) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GapAclStateChangedCallback: Mobile Phone Device"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GapAclStateChangedCallback: Mobile Phone Device"); return; } GraphicService::GetInstance()->PostGraphicEvent( @@ -971,6 +971,22 @@ static void BtGattsRequestWriteCallback(uint8_t serverId, uint16_t connId, gatts WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BtGattsRequestWriteCallback"); } +/* 与设备建立A2DP连接 */ +static int wstp_a2dp_snk_connect(const bd_addr_t *bd_addr) +{ + int ret = a2dp_snk_connect(bd_addr); + WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP,"a2dp_snk_connect ret(int): %x\n", ret); + return ret; +} + +/* 与设备断开A2DP连接 */ +static int wstp_a2dp_snk_disconnect(const bd_addr_t *bd_addr) +{ + int ret = a2dp_snk_disconnect(bd_addr); + WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP,"a2dp_snk_disconnect ret(int): %x\n", ret); + return ret; +} + static void BtA2dpSnkAcceptTimerStop(void) { WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "stop timer\n"); @@ -1045,6 +1061,7 @@ static void BtA2dpSnkConnectStateChangedCb(bd_addr_t *bd_addr, int conn_state) { WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "addr: ****%02x%02x%02x%02x conn_state: %x\n", bd_addr->addr[3], bd_addr->addr[2], bd_addr->addr[1], bd_addr->addr[0], conn_state); /* 3 2 1 0 idx */ + } static void BtA2dpSnkStartStreamReqCb(bd_addr_t *bd_addr) @@ -1129,9 +1146,6 @@ void BtA2dpInit(void) void BtA2dpDeInit(void) { - - - a2dp_src_deregister_callbacks(&g_a2dpSrcCallbacks); a2dp_snk_deregister_callbacks(&g_a2dp_snk_callbacks); diff --git a/code/sdk/application/wearable/fd230app/nativeui/dnotdisturb/include/DnotDisturbView.h b/code/sdk/application/wearable/fd230app/nativeui/dnotdisturb/include/DnotDisturbView.h index 2fdaf4be4..80db09b20 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/dnotdisturb/include/DnotDisturbView.h +++ b/code/sdk/application/wearable/fd230app/nativeui/dnotdisturb/include/DnotDisturbView.h @@ -2,7 +2,7 @@ * @Author: luozheng 1732036298@qq.com * @Date: 2024-04-10 11:58:15 * @LastEditors: luozheng 1732036298@qq.com - * @LastEditTime: 2024-06-07 18:46:54 + * @LastEditTime: 2024-06-29 16:04:53 * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/dnotdisturb/include/DnotDisturbView.h */ #ifndef DNOTDISTURB_VIEW_H @@ -41,9 +41,8 @@ namespace OHOS void ClearAll(void); UIScrollView *scrollView = nullptr; UILabelExt *showTitleLabel{nullptr}; - UIImageView *background{nullptr}; UIImageView *DnotDisturbImage{nullptr}; - UILabel *AttentionLabel{nullptr}; + UILabelExt *AttentionLabel{nullptr}; UILabelButtonExt *ButtonOn; UILabelButtonExt *ButtonOff; }; diff --git a/code/sdk/application/wearable/fd230app/nativeui/dnotdisturb/src/DnotDisturbView.cpp b/code/sdk/application/wearable/fd230app/nativeui/dnotdisturb/src/DnotDisturbView.cpp index 0599c1525..03ce7a72b 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/dnotdisturb/src/DnotDisturbView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/dnotdisturb/src/DnotDisturbView.cpp @@ -2,7 +2,7 @@ * @Author: luozheng 1732036298@qq.com * @Date: 2024-04-10 11:58:21 * @LastEditors: luozheng 1732036298@qq.com - * @LastEditTime: 2024-06-07 18:51:22 + * @LastEditTime: 2024-06-29 16:30:35 * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/dnotdisturb/src/DnotDisturbView.cpp */ #include "dnotdisturb/include/DnotDisturbView.h" @@ -16,6 +16,7 @@ namespace OHOS { + static constexpr const char *DROPDOWN_DNOTDISTURB_IMAGE = "/user/res/dropdown/DROPDOWN_DNOTDISTURB.bin"; static DnotDisturbView *g_pDnotDisturbView{nullptr}; DnotDisturbView::DnotDisturbView() @@ -27,7 +28,6 @@ namespace OHOS DnotDisturbView::~DnotDisturbView() { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DnotDisturbView::~DnotDisturbView"); - ClearAll(); g_pDnotDisturbView = nullptr; } @@ -48,12 +48,6 @@ namespace OHOS showTitleLabel = nullptr; } - if (background != nullptr) - { - delete background; - background = nullptr; - } - if (DnotDisturbImage != nullptr) { delete DnotDisturbImage; @@ -82,7 +76,7 @@ namespace OHOS void DnotDisturbView::DnotDisturbViewInit(void) { - + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DnotDisturbView::DnotDisturbViewInit"); if (scrollView == nullptr) { scrollView = new UIScrollView(); @@ -117,27 +111,22 @@ namespace OHOS showTitleLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); showTitleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); /* -------------------------------------------------------------------------- */ - background = new UIImageView(); - if (background == nullptr) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DnotDisturbView::background new fail!!"); - return; - } - background->SetPosition(186, 116); - ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, background, DROPDOWN_ICONELLIPSEPURPLE); - /* -------------------------------------------------------------------------- */ DnotDisturbImage = new UIImageView(); if (DnotDisturbImage == nullptr) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DnotDisturbView::DnotDisturbImage new fail!!"); return; } - DnotDisturbImage->SetPosition(186, 116, 94, 94); + DnotDisturbImage->SetPosition(186, 110); + DnotDisturbImage->Resize(94, 94); + DnotDisturbImage->SetStyle(STYLE_BACKGROUND_COLOR, 0xff8120e2); + DnotDisturbImage->SetStyle(STYLE_BACKGROUND_OPA, 0xff); + DnotDisturbImage->SetStyle(STYLE_BORDER_RADIUS, 100); DnotDisturbImage->SetAutoEnable(false); DnotDisturbImage->SetResizeMode(UIImageView::CENTER); - ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, DnotDisturbImage, DROPDOWN_DNOTDISTURB); + DnotDisturbImage->SetSrc(DROPDOWN_DNOTDISTURB_IMAGE); /* -------------------------------------------------------------------------- */ - AttentionLabel = new UILabel(); + AttentionLabel = new UILabelExt(); if (AttentionLabel == nullptr) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DnotDisturbView::AttentionLabel new fail!!"); @@ -146,8 +135,7 @@ namespace OHOS AttentionLabel->SetPosition(33, 228, 400, 70); AttentionLabel->SetStyle(STYLE_TEXT_FONT, 30); AttentionLabel->SetStyle(STYLE_LINE_HEIGHT, 35); - // AttentionLabel->SetText("开启勿扰模式,手表将不会发出震动与铃声,是否开启"); - SetLabelId(AttentionLabel, STR_DO_NOT_DISTURB_MODE); + AttentionLabel->SetTextId(STR_DO_NOT_DISTURB_MODE); // 开启勿扰模式,手表将不会发出震动与铃声,是否开启 AttentionLabel->SetLineBreakMode(UILabelExt::LINE_BREAK_WRAP); AttentionLabel->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff)); AttentionLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); @@ -233,7 +221,6 @@ namespace OHOS { View::OnSetUpView(); scrollView->Add(showTitleLabel); - scrollView->Add(background); scrollView->Add(DnotDisturbImage); scrollView->Add(AttentionLabel); scrollView->Add(ButtonOn); @@ -256,6 +243,7 @@ namespace OHOS View::OnStop(); RootView::GetInstance()->RemoveAll(); RootView::GetInstance()->ClearOnKeyActListener(); + ClearAll(); return; } } \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.cpp b/code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.cpp index 6e8abc5c9..4b09d1c5e 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.cpp @@ -29,8 +29,7 @@ namespace OHOS #endif } // static char *JSON_F_buf=NULL; - cJSON *heart_root = NULL; - cJSON *oxygen_root = NULL; + HealthService::HealthService() { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HealthService::HealthService"); @@ -67,7 +66,7 @@ namespace OHOS if (mkdir(HEALTH_JSON_PATH, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mkdir HEALTH_JSON_PATH is error"); - return false; // Failed to create folder + return false; } } if (stat(HEALTH_JSON_PATH_HEART, &info) != 0) @@ -75,7 +74,7 @@ namespace OHOS if (mkdir(HEALTH_JSON_PATH_HEART, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mkdir HEALTH_JSON_PATH_HEART is error"); - return false; // Failed to create folder + return false; } } if (stat(HEALTH_JSON_PATH_OXYGEN, &info) != 0) @@ -83,20 +82,13 @@ namespace OHOS if (mkdir(HEALTH_JSON_PATH_OXYGEN, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mkdir HEALTH_JSON_PATH_OXYGEN is error"); - return false; // Failed to create folder + return false; } } return true; } - /*生成文件*/ - std::string GetJsonFilePath(uint8_t type) - { - std::string currentDate = GetCurrentDate(); - const char *healthTypePath = (type == HEALTH_TYPE_HEART) ? HEALTH_JSON_PATH_HEART : HEALTH_JSON_PATH_OXYGEN; - return healthTypePath + currentDate + ".json"; - } /*生成bin*/ std::string GetBinFilePath(uint8_t type) { @@ -105,22 +97,27 @@ namespace OHOS return healthTypePath + currentDate + ".bin"; } - // 加载 JSON 数据 - bool HealthService::LoadJsonData(uint8_t type) + + /* --------------------------------- json操作 --------------------------------- */ + static constexpr const char *HEART_JSON_PATH = "/user/userdata/health/heart.json"; + static constexpr const char *BLOOD_JSON_PATH = "/user/userdata/health/blood.json"; + + // 读取血氧数据 + BloodOxygenData *HealthService::ReadBloodOxygenData() { + // 判断文件夹是否存在 if (!CreateHealthFolder()) { - return false; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateHealthFolder file"); + return nullptr; } - std::string jsonFilePath = GetJsonFilePath(type); - printf("GetJsonFilePath:%s\r\n", jsonFilePath.c_str()); - - std::ifstream inFile(jsonFilePath); + // 读取文件 + std::ifstream inFile(BLOOD_JSON_PATH); if (!inFile.is_open()) { - printf("Failed to open JSON file.\r\n"); - return false; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to open JSON file"); + return nullptr; } // 读取文件内容到字符串 @@ -128,316 +125,229 @@ namespace OHOS buffer << inFile.rdbuf(); std::string jsonDataString = buffer.str(); const char *jsonData = jsonDataString.c_str(); - printf("jsonData:%s\r\n", jsonData); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jsonData: %s", jsonData); + + // 关闭文件 + inFile.close(); if (jsonDataString.empty()) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jsonDataString is empty"); - inFile.close(); - return false; + return nullptr; } - cJSON *root = cJSON_Parse(jsonData); - if (root == NULL) + cJSON *oxygen_root = cJSON_Parse(jsonData); + if (oxygen_root == NULL) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to parse JSON data"); - inFile.close(); - return false; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "oxygen_root is empty"); + return nullptr; } - if (type == HEALTH_TYPE_HEART) - { - heart_root = root; - } - else if (type == HEALTH_TYPE_OXYGEN) - { - oxygen_root = root; - } + BloodOxygenData *data = new BloodOxygenData(); - // 释放 cJSON 对象内存 - cJSON_Delete(root); - // 关闭文件 - inFile.close(); - return true; - } - // 释放 JSON 数据 - void HealthService::ReleaseJsonData(uint8_t type) - { - if (type == HEALTH_TYPE_HEART) + cJSON *value_item = cJSON_GetObjectItem(oxygen_root, "value"); + cJSON *timestamp_item = cJSON_GetObjectItem(oxygen_root, "timestamp"); + + if (value_item && timestamp_item) { - cJSON_Delete(heart_root); + data->SPO2 = value_item->valueint; + data->timestamp = timestamp_item->valuedouble; } - if (type == HEALTH_TYPE_OXYGEN) + else { + // 读取的数据异常 cJSON_Delete(oxygen_root); - } - } - - // 读取血氧数据 - BloodOxygenData *HealthService::ReadBloodOxygenData() - { - if (!LoadJsonData(HEALTH_TYPE_OXYGEN)) - { + delete data; return nullptr; } - - BloodOxygenData *data = new BloodOxygenData(); - cJSON *latestData = cJSON_GetObjectItem(oxygen_root, "spo2_latest_data"); - if (latestData != NULL) - { - data->SPO2 = cJSON_GetObjectItem(latestData, "value")->valueint; - data->timestamp = cJSON_GetObjectItem(latestData, "timestamp")->valuedouble; - } - - ReleaseJsonData(HEALTH_TYPE_OXYGEN); + cJSON_Delete(oxygen_root); return data; } + // 读取心率数据 HeartRateData *HealthService::ReadHeartRateData() { - if (!LoadJsonData(HEALTH_TYPE_HEART)) + // 判断文件夹是否存在 + if (!CreateHealthFolder()) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadJsonData is error "); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateHealthFolder file"); return nullptr; } - HeartRateData *data = new HeartRateData(); - cJSON *latestData = cJSON_GetObjectItem(heart_root, "heart_latest_data"); - if (latestData != NULL) + // 读取文件 + std::ifstream inFile(HEART_JSON_PATH); + if (!inFile.is_open()) { - // 读取心率值 - data->Heart = cJSON_GetObjectItem(latestData, "value")->valueint; - data->timestamp = static_cast(cJSON_GetObjectItem(latestData, "timestamp")->valueint); - - char *jsonStr = cJSON_Print(heart_root); - if (jsonStr != NULL) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartRootJSONData: %s", jsonStr); - cJSON_free(jsonStr); - } - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ReadHeartRateData: value %d timestamp %d", data->Heart, data->timestamp); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to open JSON file"); + // 创建一个默认值为 0的数据 存储到json里面 ? + return nullptr; } - ReleaseJsonData(HEALTH_TYPE_HEART); - return data; - } + // 读取文件内容到字符串 + std::stringstream buffer; + buffer << inFile.rdbuf(); + std::string jsonDataString = buffer.str(); + const char *jsonData = jsonDataString.c_str(); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jsonData: %s", jsonData); - bool HealthService::UpdateBloodOxygenData(const BloodOxygenData &data) - { - if (!LoadJsonData(HEALTH_TYPE_OXYGEN)) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadJsonData is error"); - // return false; - } + // 关闭文件 + inFile.close(); - if (oxygen_root == nullptr) + if (jsonDataString.empty()) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "oxygen_root is first"); - oxygen_root = cJSON_CreateObject(); - if (oxygen_root == nullptr) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to create cJSON object for oxygen_root"); - return false; - } - cJSON_AddItemToObject(oxygen_root, "spo2_latest_data", cJSON_CreateObject()); - cJSON_AddItemToObject(oxygen_root, "spo2_data_list", cJSON_CreateArray()); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jsonDataString is empty"); + return nullptr; } - cJSON *latestData = cJSON_GetObjectItemCaseSensitive(oxygen_root, "spo2_latest_data"); - if (latestData == NULL || !cJSON_IsObject(latestData)) + cJSON *heart_root = cJSON_Parse(jsonData); + if (heart_root == NULL) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get spo2_latest_data object"); - cJSON_Delete(oxygen_root); - oxygen_root = nullptr; - return false; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "heart_root is empty"); + return nullptr; } - cJSON *SPO2 = cJSON_GetObjectItemCaseSensitive(latestData, "value"); - if (SPO2 == nullptr && !cJSON_IsNumber(SPO2)) - { - // Add spo2_latest_data - cJSON_AddItemToObject(latestData, "value", cJSON_CreateNumber(data.SPO2)); - cJSON_AddItemToObject(latestData, "timestamp", cJSON_CreateNumber(data.timestamp)); - } - else - { - cJSON_ReplaceItemInObject(latestData, "value", cJSON_CreateNumber(data.SPO2)); - cJSON_ReplaceItemInObject(latestData, "timestamp", cJSON_CreateNumber(data.timestamp)); - } + HeartRateData *data = new HeartRateData(); - // Update or add to spo2_data_list - cJSON *dataList = cJSON_GetObjectItem(oxygen_root, "spo2_data_list"); - if (dataList != NULL && cJSON_IsArray(dataList)) - { - // Check if data already exists in the list - bool dataExists = false; - cJSON *dataItem = NULL; - cJSON_ArrayForEach(dataItem, dataList) - { - cJSON *timestampItem = cJSON_GetObjectItemCaseSensitive(dataItem, "timestamp"); - if (timestampItem != NULL && cJSON_IsNumber(timestampItem) && timestampItem->valuedouble == data.timestamp) - { - cJSON_ReplaceItemInObject(dataItem, "value", cJSON_CreateNumber(data.SPO2)); - dataExists = true; - break; - } - } + cJSON *value_item = cJSON_GetObjectItem(heart_root, "value"); + cJSON *timestamp_item = cJSON_GetObjectItem(heart_root, "timestamp"); - if (!dataExists) - { - cJSON *newData = cJSON_CreateObject(); - cJSON_AddItemToObject(newData, "value", cJSON_CreateNumber(data.SPO2)); - cJSON_AddItemToObject(newData, "timestamp", cJSON_CreateNumber(data.timestamp)); - cJSON_AddItemToArray(dataList, newData); - } + if (value_item && timestamp_item) + { + data->Heart = value_item->valueint; + data->timestamp = timestamp_item->valuedouble; } - - if (!UpdateJsonData(HEALTH_TYPE_OXYGEN)) + else { - printf("UpdateJsonData failed.\r\n"); - ReleaseJsonData(HEALTH_TYPE_OXYGEN); - return false; + // 读取的数据异常 + cJSON_Delete(heart_root); + delete data; + return nullptr; } - /*存储bin*/ - std::string binFilePath = GetBinFilePath(HEALTH_TYPE_HEART); - FILE *fp = fopen(binFilePath.c_str(), "ab+"); - if (fp == NULL) - return false; - fwrite(&data.timestamp, 1, 4, fp); - fwrite(&data.SPO2, 1, 1, fp); - fclose(fp); - - ReleaseJsonData(HEALTH_TYPE_OXYGEN); - - return true; + cJSON_Delete(heart_root); + return data; } - - bool HealthService::UpdateHeartRateData(const HeartRateData &data) + // 保存血氧数据 + bool HealthService::UpdateHealthData(const BloodOxygenData &data) { - if (!LoadJsonData(HEALTH_TYPE_HEART)) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadJsonData is error"); - // return false; - } - - if (heart_root == nullptr) + // 判断文件夹是否存在 + if (!CreateHealthFolder()) { - heart_root = cJSON_CreateObject(); - if (heart_root == nullptr) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to create cJSON object for heart_root"); - return false; - } - - cJSON_AddItemToObject(heart_root, "heart_latest_data", cJSON_CreateObject()); - cJSON_AddItemToObject(heart_root, "heart_data_list", cJSON_CreateArray()); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateHealthFolder file"); + return false; } - cJSON *latestData = cJSON_GetObjectItemCaseSensitive(heart_root, "heart_latest_data"); - if (latestData == NULL || !cJSON_IsObject(latestData)) + // 判断文件是否存在 不存在即创建 并打开以输出模式 + std::ofstream outFile(BLOOD_JSON_PATH, std::ios::app); + if (!outFile.is_open()) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get heart_latest_data object"); - cJSON_Delete(heart_root); - heart_root = nullptr; + // 文件创建失败 + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to create or open JSON file for writing"); return false; } - cJSON *Heart = cJSON_GetObjectItemCaseSensitive(latestData, "value"); - if (Heart == nullptr && !cJSON_IsNumber(Heart)) - { - // Add heart_latest_data - cJSON_AddItemToObject(latestData, "value", cJSON_CreateNumber(data.Heart)); - cJSON_AddItemToObject(latestData, "timestamp", cJSON_CreateNumber(data.timestamp)); - } - else + // 创建一个 JSON 对象 + cJSON *oxygen_root = cJSON_CreateObject(); + if (oxygen_root == NULL) { - cJSON_ReplaceItemInObject(latestData, "value", cJSON_CreateNumber(data.Heart)); - cJSON_ReplaceItemInObject(latestData, "timestamp", cJSON_CreateNumber(data.timestamp)); + outFile.close(); + return false; } - // // 更新heart_latest_data中的value和timestamp值 - // cJSON_AddItemToObject(latestData, "value", cJSON_CreateNumber(data.Heart)); - // cJSON_AddItemToObject(latestData, "timestamp", cJSON_CreateNumber(data.timestamp)); + cJSON_AddItemToObject(oxygen_root, "value", cJSON_CreateNumber(data.SPO2)); + cJSON_AddItemToObject(oxygen_root, "timestamp", cJSON_CreateNumber(data.timestamp)); - cJSON *dataList = cJSON_GetObjectItem(heart_root, "heart_data_list"); - if (dataList == NULL || !cJSON_IsArray(dataList)) + char *jsonData = cJSON_Print(oxygen_root); + if (jsonData == NULL) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "heart_data_list is null or not an array"); - cJSON_Delete(heart_root); - heart_root = nullptr; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to generate JSON data"); + cJSON_free(oxygen_root); + outFile.close(); return false; } - int numData = cJSON_GetArraySize(dataList); - if (numData >= 360) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Data list is full (360 items)"); - return false; - } + // 写入 JSON 数据到文件 + outFile << jsonData; - // 添加新数据到dataList中 - cJSON *newData = cJSON_CreateObject(); - cJSON_AddItemToObject(newData, "value", cJSON_CreateNumber(data.Heart)); - cJSON_AddItemToObject(newData, "timestamp", cJSON_CreateNumber(data.timestamp)); - cJSON_AddItemToArray(dataList, newData); + cJSON_free(oxygen_root); + free(jsonData); + outFile.close(); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateHealthData JSON is ok"); - if (UpdateJsonData(HEALTH_TYPE_HEART) == false) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to update JSON data for heart rate"); - cJSON_Delete(heart_root); - heart_root = nullptr; - return false; - } - /*存储bin*/ - std::string binFilePath = GetBinFilePath(HEALTH_TYPE_HEART); + /* 存储bin文件[协议使用] */ + std::string binFilePath = GetBinFilePath(HEALTH_TYPE_OXYGEN); FILE *fp = fopen(binFilePath.c_str(), "ab+"); if (fp == NULL) + { return false; - fwrite(&data.timestamp, 1, 4, fp); - fwrite(&data.Heart, 1, 1, fp); + } + + fwrite(&data.timestamp, 4, 1, fp); + fwrite(&data.SPO2, 1, 1, fp); + fclose(fp); return true; } - bool HealthService::UpdateJsonData(uint8_t type) + // 存储心率 + bool HealthService::UpdateHealthData(const HeartRateData &data) { - std::string jsonFilePath = GetJsonFilePath(type); - std::ofstream outFile(jsonFilePath); + // 判断文件夹是否存在 + if (!CreateHealthFolder()) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateHealthFolder file"); + return false; + } + // 判断文件是否存在 不存在即创建 并打开以输出模式 + std::ofstream outFile(HEART_JSON_PATH, std::ios::app); if (!outFile.is_open()) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to open file %s", jsonFilePath.c_str()); - // 创建新文件 - outFile.open(jsonFilePath); - if (!outFile.is_open()) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to create file %s", jsonFilePath.c_str()); - return false; - } + // 文件创建失败 + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to create or open JSON file for writing"); + return false; } - char *jsonData = NULL; - cJSON *root = (type == HEALTH_TYPE_HEART) ? heart_root : oxygen_root; - if (root == NULL) + // 创建一个 JSON 对象 + cJSON *heart_root = cJSON_CreateObject(); + if (heart_root == NULL) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "JSON root is NULL"); outFile.close(); return false; } - jsonData = cJSON_Print(root); - printf("jsonData:%s\r\n", jsonData); + cJSON_AddItemToObject(heart_root, "value", cJSON_CreateNumber(data.Heart)); + cJSON_AddItemToObject(heart_root, "timestamp", cJSON_CreateNumber(data.timestamp)); + + char *jsonData = cJSON_Print(heart_root); if (jsonData == NULL) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to generate JSON data"); + cJSON_free(heart_root); outFile.close(); return false; } + // 写入 JSON 数据到文件 outFile << jsonData; + + cJSON_free(heart_root); + free(jsonData); outFile.close(); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateHealthData JSON is ok"); + + /* 存储bin文件[协议使用] */ + std::string binFilePath = GetBinFilePath(HEALTH_TYPE_HEART); + FILE *fp = fopen(binFilePath.c_str(), "ab+"); + if (fp == NULL) + { + return false; + } + + fwrite(&data.timestamp, 4, 1, fp); + fwrite(&data.Heart, 1, 1, fp); + + fclose(fp); - cJSON_free(jsonData); return true; } diff --git a/code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.h b/code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.h index a83c82ad4..5d1b797b8 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.h +++ b/code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.h @@ -1,4 +1,10 @@ -/*** +/*** + * @Date: 2024-06-14 11:34:19 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-06-28 19:49:27 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.h + */ +/*** * @Date: 2024-06-14 11:34:19 * @LastEditors: Caisking 3449750381@qq.com * @LastEditTime: 2024-06-24 16:08:36 @@ -59,14 +65,13 @@ namespace OHOS ~HealthService(); static HealthService *GetInstance(void); bool CreateHealthFolder(); - bool LoadJsonData(uint8_t type); // 加载json - BloodOxygenData *ReadBloodOxygenData(); // 读取血氧数据 - bool UpdateBloodOxygenData(const BloodOxygenData &data); // 更新血氧数据 - HeartRateData *ReadHeartRateData(); // 读取心率数据 - HeartPoints *ReadHeartRateDataList(); // 读取心率列表 - bool UpdateHeartRateData(const HeartRateData &data); // 更新心率数据 - void ReleaseJsonData(uint8_t type); // 释放json - bool UpdateJsonData(uint8_t type); // 更新json + bool LoadJsonData(uint8_t type); // 加载json + BloodOxygenData *ReadBloodOxygenData(); // 读取血氧数据 + HeartRateData *ReadHeartRateData(); // 读取心率数据 + bool UpdateHealthData(const HeartRateData &data); // 更新心率数据 + bool UpdateHealthData(const BloodOxygenData &data); + void ReleaseJsonData(uint8_t type); // 释放json + bool UpdateJsonData(uint8_t type); // 更新json }; } #endif // HEALTH_MODEL_H \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/heartrate/include/HeartModel.h b/code/sdk/application/wearable/fd230app/nativeui/heartrate/include/HeartModel.h index 028337283..91cf57ae7 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/heartrate/include/HeartModel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/heartrate/include/HeartModel.h @@ -81,6 +81,14 @@ extern "C" End = 0, Start, }; + enum class HeartCheck + { + RESTSTSTE = 0, // 未检测状态 + PASSIVITY, // 被动检测心率 + INITIATIVE, // 主动检测心率 + EXERCISE, // 运动心率 + }; + // 控制心率检测 typedef struct { uint32_t heartRatePerSec; @@ -137,7 +145,7 @@ extern "C" void SetCheckTime(uint64_t time); // 设置本次测试完的时间 uint16_t GetIndex(); // 测试点位 void SetIndex(uint16_t index); - void Heart_Control(HeartState state); + void Heart_Control(HeartState state, HeartCheck check); private: HealthAllDatas healthDatas; @@ -168,6 +176,8 @@ extern "C" uint8_t valid_counter_ = 0; // 有效数计数器 uint8_t disvalid_counter_ = 0; // 无效数计数器 uint8_t unwear_counter_ = 0; // 佩戴错误计数器 + + HeartCheck checkstate = HeartCheck::RESTSTSTE; // 目前检测状态 }; } diff --git a/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartModel.cpp index a19f7a4f3..13976a20a 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartModel.cpp @@ -474,14 +474,21 @@ namespace OHOS /* ---------------------------------- 状态检测 ---------------------------------- */ // 控制心率检测 - void HeartModel::Heart_Control(HeartState state) + void HeartModel::Heart_Control(HeartState state, HeartCheck check) { + if (check < checkstate) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Higher execution instruction exists"); + return; + } if (state == HeartState::End && heartstate == true) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartState End"); uint8_t md = PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST; send_ppg_cmd_msg(md); heartstate = false; + // 复原检测状态 + checkstate = HeartCheck::RESTSTSTE; } else if (state == HeartState::Start && heartstate == false) { @@ -626,6 +633,8 @@ namespace OHOS // 结束本次测试 PRINT("MAX_DISVALID_HRS_COUNT\r\n"); Heart_Stop(); + // 关闭自动检测心率 如果有其他高级心率检测在进行,则不会进行关闭[低优先级] + HeartModel::GetInstance()->Heart_Control(HeartState::End, HeartCheck::PASSIVITY); return; } #if HEARTTEST @@ -639,9 +648,9 @@ namespace OHOS data->timestamp = HeartPresenter::GetInstance()->GetCurrentTime(); WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " Save %d %d", data->Heart, data->timestamp); SetCheckTime(data->timestamp); - HealthService::GetInstance()->UpdateHeartRateData(*data); - // 更新卡片心率值 - // SetHeartRatePerSec(heart); + HealthService::GetInstance()->UpdateHealthData(*data); + // 关闭自动检测心率 如果有其他高级心率检测在进行,则不会进行关闭[低优先级] + HeartModel::GetInstance()->Heart_Control(HeartState::End, HeartCheck::PASSIVITY); } #endif } diff --git a/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartPresenter.cpp index 0239388a6..180bc2550 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartPresenter.cpp @@ -35,7 +35,7 @@ #include "cywee_service.h" #include "custom_utils.h" -#define HEARTKEYABLE 0 +#define HEARTKEYABLE 1 namespace OHOS { @@ -63,7 +63,7 @@ namespace OHOS WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get timestamp"); return 0; } - + return time; } @@ -77,7 +77,7 @@ namespace OHOS // 秒级时间戳的差 int time_diff_seconds = new_time - old_time; // 转换为分钟的差值 - int time_diff_minutes = time_diff_seconds / 60; + int time_diff_minutes = time_diff_seconds / 60; WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "time_diff_seconds is %d time_diff_minute is %d", time_diff_seconds, time_diff_minutes); return time_diff_minutes; } @@ -90,13 +90,6 @@ namespace OHOS HeartPresenter::~HeartPresenter() { -#if HEARTKEYABLE - if (keyActListenr != nullptr) - { - delete keyActListenr; - keyActListenr = nullptr; - } -#endif g_pMainView = nullptr; } @@ -109,20 +102,6 @@ namespace OHOS { Presenter::OnStart(); WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HeartPresenter::On Start "); -#if HEARTKEYABLE - if (keyActListenr == nullptr) - { - keyActListenr = new KeyInputListener(); - if (keyActListenr != nullptr) - { - RootView::GetInstance()->SetOnKeyActListener(keyActListenr); - } - else - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartPresenter::OnStart: new KeyInputListener fail"); - } - } -#endif } void HeartPresenter::OnPause(void) {} @@ -158,17 +137,18 @@ namespace OHOS bool HeartPresenter::OnKeyAct(UIView &view, const KeyEvent &event) { #if HEARTKEYABLE - WEARABLE_LOGD("", "into the view is: %s\n", typeid(view).name()); - uint16 keyID = event.GetKeyId(); - WEARABLE_LOGD("", "into key! keyID %u\n", keyID); - // 如果是power键就返回上一级 - if (keyID == static_cast(ZliteKeyCode::ZLITE_KEY_POWER)) + unsigned short keyID = event.GetKeyId(); + unsigned short keyState = event.GetState(); + // 如果是power键,且是亮屏状态,按键释放就返回上一级 + if (keyID == static_cast(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 0 && uapi_get_screen_state() == 0) { - // uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId(); - NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST); + // 关闭心率检测 + HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::INITIATIVE); + // 回退 + NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST, TransitionType::TRANSITION_ZOOM); } -#endif return true; +#endif } bool HeartPresenter::OnClick(UIView &view, const ClickEvent &event) @@ -226,9 +206,9 @@ namespace OHOS if (startheart == false) { HeartCheckView::GetInstance()->GetImageAnimator()->Stop(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCheckStatus : false"); - uint8_t md = PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST; - send_ppg_cmd_msg(md); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCheckStatus false"); + // 关闭心率检测 + HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::INITIATIVE); startheart = true; } } @@ -244,9 +224,10 @@ namespace OHOS HeartCheckView::GetInstance()->UpShowHeartText(); // 更新检测界面 if (startheart == true) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCheckStatus : true"); - uint8_t md = PPG_SERVICE_CMD_TYPE_DO_PPG_TEST; - send_ppg_cmd_msg(md); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCheckStatus true"); + // 开启心率检测 [UI优先级最高直接打断正在检测 重新检测] + HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::INITIATIVE); + HeartModel::GetInstance()->Heart_Control(HeartState::Start,HeartCheck::INITIATIVE); startheart = false; } } @@ -256,7 +237,7 @@ namespace OHOS { if (HeartModel::GetInstance()->GetHeartCheckViewStatus() == true) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetWearStatus : false"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetWearStatus false"); HeartCheckView::GetInstance()->GetImageAnimator()->Stop(); // 跳转到异常检测界面 HeartView::GetInstance()->ChangeView(HEARTCHECKVIEW, HEARTRESULT); diff --git a/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartView.cpp b/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartView.cpp index d0398a93b..a94b2753b 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartView.cpp @@ -417,6 +417,9 @@ namespace OHOS { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartView::InitHeartView fail"); } + // 增加按键监听 + RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::HeartPresenter::GetInstance(); + RootView::GetInstance()->SetOnKeyActListener(keyactListener); } void HeartView::OnSetUpView() diff --git a/code/sdk/application/wearable/fd230app/nativeui/main/include/MainPresenterSample.h b/code/sdk/application/wearable/fd230app/nativeui/main/include/MainPresenterSample.h index e71f14310..7f3bb11d2 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/main/include/MainPresenterSample.h +++ b/code/sdk/application/wearable/fd230app/nativeui/main/include/MainPresenterSample.h @@ -2,7 +2,7 @@ * @Author: luozheng 1732036298@qq.com * @Date: 2024-03-01 15:10:34 * @LastEditors: luozheng 1732036298@qq.com - * @LastEditTime: 2024-05-09 10:00:40 + * @LastEditTime: 2024-06-29 11:19:40 * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/include/MainPresenterSample.h */ @@ -35,7 +35,7 @@ namespace OHOS static constexpr const char *DROPDOWN_CLICK_BRIGHTENSCREEN = "dropdownclickbrightscreen"; static constexpr const char *DROPDOWN_CLICK_SETTING = "dropdownclicksetting"; // 设置 - static constexpr const char *DROPDOWN_CLICK_LIGHTING = "dropdownclicklighting"; // 手电筒 + static constexpr const char *DROPDOWN_CLICK_BLUETOOTH = "dropdownclickbluetooth"; // 蓝牙 static constexpr const char *DROPDOWN_CLICK_DNOTDISTURB = "dropdownclickdnotdisturb"; // 勿扰 static constexpr const char *DROPDOWN_CLICK_SAVEELE = "dropdownclicksaveele"; // 省电 static constexpr const char *DROPDOWN_CLICK_FINDMYPHONE = "dropdownclickfindmyphone"; // 找手机 diff --git a/code/sdk/application/wearable/fd230app/nativeui/main/include/PullUpDownView.h b/code/sdk/application/wearable/fd230app/nativeui/main/include/PullUpDownView.h index 905d4e8d3..378d4450b 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/main/include/PullUpDownView.h +++ b/code/sdk/application/wearable/fd230app/nativeui/main/include/PullUpDownView.h @@ -1,3 +1,139 @@ +/* + * @Author: luozheng 1732036298@qq.com + * @Date: 2024-04-17 15:26:49 + * @LastEditors: luozheng 1732036298@qq.com + * @LastEditTime: 2024-06-29 15:08:34 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/include/PullUpDownView.h + */ + +#if 1 +#ifndef PULL_UP_DOWN_VIEW_H +#define PULL_UP_DOWN_VIEW_H + +#include "graphic_types.h" +#include "wearable_log.h" +#include "components/ui_card_page.h" +#include "components/ui_view_group.h" +#include "components/ui_image_view.h" +#include "components/ui_label.h" +#include "components/ui_label_ext.h" +#include "components/ui_label_button.h" +#include "components/ui_box_progress.h" +#include "components/ui_image_animator.h" +#include "battery_hal.h" +#include "main/include/ConnectedStatusView.h" + +extern uint8_t battery_get_voltage(float *voltage); + +namespace OHOS +{ + static constexpr int16_t SETTING_INDEX = 0; + static constexpr int16_t LIGHTING_INDEX = 1; + static constexpr int16_t DNOTDISTURB_INDEX = 2; + static constexpr int16_t SAVEPOWER_INDEX = 3; + static constexpr int16_t FINDPHONE_INDEX = 4; + static constexpr int16_t MAX_INDEX = 5; + + typedef enum : uint8_t + { + DROPDOWNVIEW = 0, + CONNECTEDSTATUSVIEW, + MAX_DROPDOWNVIEWID, + } DROPDOWNVIEWID; + + class PullUpDownView : public UICardPage + { + public: + PullUpDownView(); + ~PullUpDownView() override; + static PullUpDownView *GetInstance(void); + void PreLoad(void) override; + void UnLoad(void) override; + void UpdatePhoneStatus(int status); + void UpdateEarPhoneStatus(int status); + void UpdateBlueToothStatus(int status); + void UpdateDnotDisturbStatus(int status); + void UpdateSignalStrengthStatusAndBatteryPosition(); + bool ChangeDropDownView(int16_t thisView); // 切换到"下拉控制中心"视图 + bool ChangeConnectedStatusView(int16_t thisView); // 切换到"连接状态"视图 + bool ClickFunc(int16_t interface); + void ChangeView(int16_t hideView, int16_t showView); + ConnectedStatusView *GetConnectedStatusView(void); + + UILabel *GetTimeLabel(); + UILabel *GetDateLabel(); + UILabel *GetWeekLabel(); + UIBoxProgress *GetProgress(); + + bool GetPhoneConnectedStatus(void); + bool GetEarPhoneConnectedStatus(void); + bool GetBlueToothConnectedStatus(void); + struct ImageConfig + { + int16_t x; + int16_t y; + int16_t w; + int16_t h; + const char *viewid; + const char *src; + UIView::OnClickListener *clicklistener; + }; + + private: + bool PullUpDownViewInit(); + bool InitBaseData(); // 初始化基础数据组件 + UIImageView *dropDownIconImageViweInit(ImageConfig &imageconfig); + void createDropDownIconImageViwe(void); + UIImageView *dropDownConnectedStatusImageViweInit(int16_t x, int16_t y, int16_t w, int16_t h); + void createDropDownConnectedStatusImageViwe(void); + + bool InitSingalComponentsView(); + void ClearAllConnectedStatusComponentsView(); + void ClearAllSingalComponentsView(); + void ClearAll(); + + int GetSignalStrength(void); + int CalculateSignalBars(int signalStrength); + void UpdateSignalBarDisplay(int signalBars, bool state); + void UpdateBatteryPosition(int signalBars); + void updateSignalDisplay(); + void UpdateCat1NoSignalisplay(bool state); + void UpdateCat14GDisplay(bool state); + + void PreLoadPullUpDownImageRes(void); + void UnLoadPullUpDownImageRes(void); + + private: + ConnectedStatusView *connectedStatusView{nullptr}; + + private: + UIViewGroup *group[MAX_DROPDOWNVIEWID]{nullptr}; + UIImageView *dropSetting{nullptr}; // 设置 + UIImageView *dropBluetooth{nullptr}; // 蓝牙 + UIImageView *dropDnotDisturb{nullptr}; // 勿扰模式 + UIImageView *dropSavePower{nullptr}; // 省电 + UIImageView *drofindPhone{nullptr}; // 找手机 + UIImageView *dropLine{nullptr}; // 线 + UIButton *connectedStatusBackgroundButton{nullptr}; // 放置连接状态icon的背景按钮 + UIImageView *showPhoneConnectedStatus{nullptr}; // 显示手机连接状态 + UIImageView *showEarPhoneConnectedStatus{nullptr}; // 显示耳机连接状态 + UIImageView *showBluetoothConnectedStatus{nullptr}; // 显示蓝牙连接状态 + UILabel *showTimeLabel{nullptr}; // 显示时间 + UILabel *showDateLabel{nullptr}; // 显示日期 + UILabel *showWeekLabel{nullptr}; // 显示星期 + UIImageView *showSignalStrength[4]{nullptr}; // 信号强度 + UILabel *Singal_4{nullptr}; // 4G图标 + UIImageView *NoSignal{nullptr}; // 无信号 + + UIImageView *batteryimage = nullptr; + UIBoxProgress *progress = nullptr; + + bool viewiInitStatus{false}; + }; +} +#endif + +#else /* * @Author: luozheng 1732036298@qq.com * @Date: 2024-04-17 15:26:49 @@ -129,3 +265,4 @@ namespace OHOS }; } #endif +#endif \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/main/src/MainPresenterSample.cpp b/code/sdk/application/wearable/fd230app/nativeui/main/src/MainPresenterSample.cpp index 1d62bc5b7..993177c91 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/main/src/MainPresenterSample.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/main/src/MainPresenterSample.cpp @@ -38,11 +38,11 @@ namespace OHOS { std::map g_jumpView = { - {DROPDOWN_CLICK_SETTING, VIEW_SETTING}, // 设置 - {DROPDOWN_CLICK_LIGHTING, VIEW_CLASSIC_BLUETOOTH}, // 蓝牙 - {DROPDOWN_CLICK_DNOTDISTURB, VIEW_DNOTDISTURB}, // 勿扰 - {DROPDOWN_CLICK_SAVEELE, VIEW_SAVEELE}, // 省电模式 - {DROPDOWN_CLICK_FINDMYPHONE, VIEW_FIND_PHONE}, // 查找手机 + {DROPDOWN_CLICK_SETTING, VIEW_SETTING}, // 设置 + {DROPDOWN_CLICK_BLUETOOTH, VIEW_CLASSIC_BLUETOOTH}, // 蓝牙 + {DROPDOWN_CLICK_DNOTDISTURB, VIEW_DNOTDISTURB}, // 勿扰 + {DROPDOWN_CLICK_SAVEELE, VIEW_SAVEELE}, // 省电模式 + {DROPDOWN_CLICK_FINDMYPHONE, VIEW_FIND_PHONE}, // 查找手机 }; static MainPresenterSample *g_pMainPresenterSample = nullptr; @@ -144,13 +144,13 @@ namespace OHOS if (curViewId == CONNECTEDSTATUSBACKGROUNDBUTTON) { PullUpDownView::GetInstance()->ChangeView(DROPDOWNVIEW, CONNECTEDSTATUSVIEW); - PullUpDown_StopTimer(); //切换到连接状态视图时停止定时器 + PullUpDown_StopTimer(); // 切换到连接状态视图时停止定时器 return true; } else if (curViewId == CONNECTEDSTATUSVIEWCLOSEBUTTON) { PullUpDownView::GetInstance()->ChangeView(CONNECTEDSTATUSVIEW, DROPDOWNVIEW); - PullUpDown_StartTimer(1000);//切回下拉控制中心视图开启定时器 + PullUpDown_StartTimer(1000); // 切回下拉控制中心视图开启定时器 return true; } // if(&view == PullUpDownView::GetInstance()->GetConnectedStatusView()->GetCloseButton()) @@ -184,7 +184,7 @@ namespace OHOS if (cardId != WATCH_FACE) { SetCardModel::GetInstance().SetSelectedCard(cardId); - NativeAbility::GetInstance().ChangeSlice(VIEW_SET_CARD); + // NativeAbility::GetInstance().ChangeSlice(VIEW_ADD_CARD); } else { @@ -352,7 +352,7 @@ namespace OHOS if (previousCardId == HEART_RATE && cardId != HEART_RATE) { // 从心率卡片变为其他卡片时调用关闭心率检测的函数 - HeartModel::GetInstance()->Heart_Control(HeartState::End); + HeartModel::GetInstance()->Heart_Control(HeartState::End, HeartCheck::INITIATIVE); } // 更新上一个卡片的值 @@ -361,8 +361,9 @@ namespace OHOS switch (cardId) { case HEART_RATE: - // 开启心率检测 - HeartModel::GetInstance()->Heart_Control(HeartState::Start); + // 开启心率检测 [UI优先级最高直接打断正在检测 重新检测] + HeartModel::GetInstance()->Heart_Control(HeartState::End, HeartCheck::INITIATIVE); + HeartModel::GetInstance()->Heart_Control(HeartState::Start, HeartCheck::INITIATIVE); break; case COMPASS: diff --git a/code/sdk/application/wearable/fd230app/nativeui/main/src/PullUpDownView.cpp b/code/sdk/application/wearable/fd230app/nativeui/main/src/PullUpDownView.cpp index b9bb68b9d..92d983fe3 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/main/src/PullUpDownView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/main/src/PullUpDownView.cpp @@ -1,3 +1,1083 @@ +/* + * @Author: luozheng 1732036298@qq.com + * @Date: 2024-06-26 18:14:24 + * @LastEditors: luozheng 1732036298@qq.com + * @LastEditTime: 2024-07-01 09:30:03 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/src/PullUpDownView.cpp + */ + +#if 1 +#include "PullUpDownView.h" +#include "wearable_log.h" +#include "UiConfig.h" +#include "common/screen.h" +#include "main/include/MainPresenterSample.h" +#include "screensetting/include/ScreenModels.h" +#include "settings/include/SettingModel.h" +#include "ui_resource_image.h" +#include "dnotdisturb/include/DnotDisturbModel.h" +#include "custom_utils.h" +#include "custom_runtime.h" +namespace OHOS +{ + + /* ---------------------------------- 坐标位置 ---------------------------------- */ + // 设置 + static constexpr uint16_t SETTING_IMG_X = 30; + static constexpr uint16_t SETTING_IMG_Y = 186; + static constexpr const char *DROPDOWN_SETTING_IMAGE = "/user/res/dropdown/DROPDOWN_SETTING.bin"; + + // 蓝牙 + static constexpr uint16_t BLUETOOTH_IMG_X = 76; + static constexpr uint16_t BLUETOOTH_IMG_Y = 76; + static constexpr const char *DROPDOWN_BLUETOOTH_IMAGE = "/user/res/dropdown/DROPDOWN_BLUETOOTH.bin"; + + // 勿扰 + static constexpr uint16_t DNOTDISTURB_IMG_X = 186; + static constexpr uint16_t DNOTDISTURB_IMG_Y = 30; + static constexpr const char *DROPDOWN_DNOTDISTURB_IMAGE = "/user/res/dropdown/DROPDOWN_DNOTDISTURB.bin"; + + // 省电 + static constexpr uint16_t SAVEPOWER_IMG_X = 296; + static constexpr uint16_t SAVEPOWER_IMG_Y = 76; + static constexpr const char *DROPDOWN_SAVEPOWER_IMAGE = "/user/res/dropdown/DROPDOWN_SAVEPOWER.bin"; + + // 找手机 + static constexpr uint16_t FINDPHONE_IMG_X = 342; + static constexpr uint16_t FINDPHONE_IMG_Y = 186; + static constexpr const char *DROPDOWN_FINDPHONE_IMAGE = "/user/res/dropdown/DROPDOWN_FINDPHONE.bin"; + + // line + static constexpr uint16_t LINE_IMG_X = 193; + static constexpr uint16_t LINE_IMG_Y = 430; + static constexpr const char *DROPDOWN_LINE_IMAGE = "/user/res/dropdown/DROPDOWN_LINE.bin"; + + // icon图片大小 + static constexpr uint16_t ICON_IMG_SIZE_W = 94; + static constexpr uint16_t ICON_IMG_SIZE_H = 94; + + // 电池 + static constexpr uint16_t BATTERY_X = 209; + static constexpr uint16_t BATTERY_Y = 180; + + // 时间 + static constexpr uint16_t TIME_LABEL_X = 172; + static constexpr uint16_t TIME_LABEL_Y = 230; + + // 日期 + static constexpr uint16_t DATE_LABEL_X = 110; + static constexpr uint16_t DATE_LABEL_Y = 300; + + // 星期 + static constexpr uint16_t WEEK_LABEL_X = 295; + static constexpr uint16_t WEEK_LABEL_Y = 300; + + // 手机连接状态 + static constexpr uint16_t PHONECONNECTSTATUS_IMG_X = 123; + static constexpr uint16_t PHONECONNECTSTATUS_IMG_Y = 350; + static constexpr const char *DROPDOWN_PHONECONNECTED_IMAGE = "/user/res/dropdown/DROPDOWN_PHONECONNECTED.bin"; + static constexpr const char *DROPDOWN_PHONEDISCONNECTED_IMAGE = "/user/res/dropdown/DROPDOWN_PHONEDISCONNECTED.bin"; + + // 耳机连接状态 + static constexpr uint16_t EARPHONESCONNECTSTATUS_IMG_X = 203; + static constexpr uint16_t EARPHONESCONNECTSTATUS_IMG_Y = 350; + static constexpr const char *DROPDOWN_EARPHONESCONNECTED_IMAGE = "/user/res/dropdown/DROPDOWN_EARPHONESCONNECTED.bin"; + static constexpr const char *DROPDOWN_EARPHONESDISCONNECTED_IMAGE = "/user/res/dropdown/DROPDOWN_EARPHONESDISCONNECTED.bin"; + + // 蓝牙连接状态 + static constexpr uint16_t BLUETOOTHCONNECTSTATUS_IMG_X = 283; + static constexpr uint16_t BLUETOOTHCONNECTSTATUS_IMG_Y = 350; + static constexpr const char *DROPDOWN_BLUETOOTHCONNECTED_IMAGE = "/user/res/dropdown/DROPDOWN_BLUETOOTHCONNECTED.bin"; + static constexpr const char *DROPDOWN_BLUETOOTHDISCONNECTED_IMAGE = "/user/res/dropdown/DROPDOWN_BLUETOOTHDISCONNECTED.bin"; + + static constexpr uint16_t CONNECTSTATUS_IMG_W = 60; + static constexpr uint16_t CONNECTSTATUS_IMG_H = 60; + + static constexpr const char *DROPDOWN_NOSIGNAL_IMAGE = "/user/res/dropdown/DROPDOWN_NOSIGNAL.bin"; + static const int64_t COLOR_SIGNAL_ON = 0xffffffff; + static const int64_t COLOR_SIGNAL_OFF = 0xff383838; + static const int BATTERY_IMAGE_WIDTH = 48; + static const int BATTERY_IMAGE_HEIGHT = 30; + static const int PROGRESS_WIDTH = 30; + static const int PROGRESS_HEIGHT = 18; + /* -------------------------------------------------------------------------- */ + std::string getWeekString(int wday) + { + std::string weekDays[] = {"星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; + return weekDays[wday]; + } + /* -------------------------------------------------------------------------- */ + static PullUpDownView *g_pPullUpDownView = nullptr; + PullUpDownView::PullUpDownView() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::PullUpDownView"); + g_pPullUpDownView = this; + } + + PullUpDownView::~PullUpDownView() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::~PullUpDownView"); + ClearAll(); + g_pPullUpDownView = nullptr; + } + + PullUpDownView *PullUpDownView::GetInstance(void) + { + return g_pPullUpDownView; + } + + // 清除信号强度相关组件 + void PullUpDownView::ClearAllSingalComponentsView() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ClearAllSingalComponentsView"); + if (NoSignal != nullptr) + { + delete NoSignal; + NoSignal = nullptr; + } + + for (int i = 0; i < 4; i++) + { + if (showSignalStrength[i] != nullptr) + { + delete showSignalStrength[i]; + showSignalStrength[i] = nullptr; + } + } + + if (Singal_4 != nullptr) + { + delete Singal_4; + Singal_4 = nullptr; + } + } + + // 清除所有与连接状态相关的视图组件 + void PullUpDownView::ClearAllConnectedStatusComponentsView() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ClearAllConnectedStatusComponentsView"); + if (connectedStatusBackgroundButton != nullptr) + { + delete connectedStatusBackgroundButton; + connectedStatusBackgroundButton = nullptr; + } + + if (showPhoneConnectedStatus != nullptr) + { + delete showPhoneConnectedStatus; + showPhoneConnectedStatus = nullptr; + } + + if (showEarPhoneConnectedStatus != nullptr) + { + delete showEarPhoneConnectedStatus; + showEarPhoneConnectedStatus = nullptr; + } + + if (showBluetoothConnectedStatus != nullptr) + { + delete showBluetoothConnectedStatus; + showBluetoothConnectedStatus = nullptr; + } + } + + void PullUpDownView::ClearAll() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ClearAll"); + RemoveAll(); + if (group[DROPDOWNVIEW] != nullptr) + { + group[DROPDOWNVIEW]->RemoveAll(); + group[DROPDOWNVIEW]->ClearBackgroundBlur(); + delete group[DROPDOWNVIEW]; + group[DROPDOWNVIEW] = nullptr; + } + + if (dropSetting != nullptr) + { + delete dropSetting; + dropSetting = nullptr; + } + + if (dropBluetooth != nullptr) + { + delete dropBluetooth; + dropBluetooth = nullptr; + } + + if (dropDnotDisturb != nullptr) + { + delete dropDnotDisturb; + dropDnotDisturb = nullptr; + } + + if (dropSavePower != nullptr) + { + delete dropSavePower; + dropSavePower = nullptr; + } + + if (drofindPhone != nullptr) + { + delete drofindPhone; + drofindPhone = nullptr; + } + + if (dropLine != nullptr) + { + delete dropLine; + dropLine = nullptr; + } + + if (showTimeLabel != nullptr) + { + delete showTimeLabel; + showTimeLabel = nullptr; + } + + if (showDateLabel != nullptr) + { + delete showDateLabel; + showDateLabel = nullptr; + } + + if (showWeekLabel != nullptr) + { + delete showWeekLabel; + showWeekLabel = nullptr; + } + /* -------------------------------------------------------------------------- */ + ClearAllSingalComponentsView(); + ClearAllConnectedStatusComponentsView(); + /* -------------------------------------------------------------------------- */ + if (batteryimage != nullptr) + { + delete batteryimage; + batteryimage = nullptr; + } + + if (progress != nullptr) + { + delete progress; + progress = nullptr; + } + + if (connectedStatusView != nullptr) + { + delete connectedStatusView; + connectedStatusView = nullptr; + group[CONNECTEDSTATUSVIEW] = nullptr; + } + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ClearAll end!!"); + } + + UIImageView *PullUpDownView::dropDownIconImageViweInit(ImageConfig &imageconfig) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::dropDownIconImageViweInit"); + UIImageView *Image = new UIImageView(); + if (Image == nullptr) + { + return nullptr; + } + Image->SetPosition(imageconfig.x, imageconfig.y, imageconfig.w, imageconfig.h); + Image->SetViewId(imageconfig.viewid); + Image->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919); + Image->SetStyle(STYLE_BACKGROUND_OPA, 0xff); + Image->SetStyle(STYLE_BORDER_RADIUS, 100); + Image->SetAutoEnable(false); + Image->SetResizeMode(UIImageView::CENTER); + Image->SetSrc(imageconfig.src); + Image->SetTouchable(true); + Image->SetOnClickListener(imageconfig.clicklistener); + + return Image; + } + + /// @brief 创建icon图标 + void PullUpDownView::createDropDownIconImageViwe(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::InitViewImg"); + UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::MainPresenterSample::GetInstance(); + if (clickListener == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainPresenterSample::GetInstance fail!!"); + return; + } + /* ---------------------------------- 下拉设置图片 ---------------------------------- */ + ImageConfig imageconfig = { + .x = SETTING_IMG_X, + .y = SETTING_IMG_Y, + .w = ICON_IMG_SIZE_W, + .h = ICON_IMG_SIZE_H, + .viewid = DROPDOWN_CLICK_SETTING, + .src = DROPDOWN_SETTING_IMAGE, + .clicklistener = clickListener, + }; + dropSetting = dropDownIconImageViweInit(imageconfig); + if (dropSetting == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView::dropSetting new fail"); + return; + } + /* ----------------------------------- 蓝牙 ----------------------------------- */ + imageconfig = { + .x = BLUETOOTH_IMG_X, + .y = BLUETOOTH_IMG_Y, + .w = ICON_IMG_SIZE_W, + .h = ICON_IMG_SIZE_H, + .viewid = DROPDOWN_CLICK_BLUETOOTH, + .src = DROPDOWN_BLUETOOTH_IMAGE, + .clicklistener = clickListener, + }; + dropBluetooth = dropDownIconImageViweInit(imageconfig); + if (dropBluetooth == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView::dropBluetooth new fail"); + return; + } + /* ----------------------------------- 勿扰模式 ----------------------------------- */ + imageconfig = { + .x = DNOTDISTURB_IMG_X, + .y = DNOTDISTURB_IMG_Y, + .w = ICON_IMG_SIZE_W, + .h = ICON_IMG_SIZE_H, + .viewid = DROPDOWN_CLICK_DNOTDISTURB, + .src = DROPDOWN_DNOTDISTURB_IMAGE, + .clicklistener = clickListener, + }; + dropDnotDisturb = dropDownIconImageViweInit(imageconfig); + if (dropDnotDisturb == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView::dropDnotDisturb new fail"); + return; + } + UpdateDnotDisturbStatus(DnotDisturbModel::GetInstance().GetDoNotDisturbModeEnabled()); + /* ----------------------------------- 省电 ----------------------------------- */ + imageconfig = { + .x = SAVEPOWER_IMG_X, + .y = SAVEPOWER_IMG_Y, + .w = ICON_IMG_SIZE_W, + .h = ICON_IMG_SIZE_H, + .viewid = DROPDOWN_CLICK_SAVEELE, + .src = DROPDOWN_SAVEPOWER_IMAGE, + .clicklistener = clickListener, + }; + dropSavePower = dropDownIconImageViweInit(imageconfig); + if (dropSavePower == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView::dropSavePower new fail"); + return; + } + /* ----------------------------------- 找手机 ---------------------------------- */ + imageconfig = { + .x = FINDPHONE_IMG_X, + .y = FINDPHONE_IMG_Y, + .w = ICON_IMG_SIZE_W, + .h = ICON_IMG_SIZE_H, + .viewid = DROPDOWN_CLICK_FINDMYPHONE, + .src = DROPDOWN_FINDPHONE_IMAGE, + .clicklistener = clickListener, + }; + drofindPhone = dropDownIconImageViweInit(imageconfig); + if (drofindPhone == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView::drofindPhone new fail"); + return; + } + /* -------------------------------- dropLine -------------------------------- */ + dropLine = new UIImageView(); + if (dropLine == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dropLine new fail"); + return; + } + dropLine->SetPosition(LINE_IMG_X, LINE_IMG_Y, ICON_IMG_SIZE_W, ICON_IMG_SIZE_H); + dropLine->SetSrc(DROPDOWN_LINE_IMAGE); + /* -------------------------------- 添加组件到视图上 -------------------------------- */ + group[DROPDOWNVIEW]->Add(dropSetting); + group[DROPDOWNVIEW]->Add(dropBluetooth); + group[DROPDOWNVIEW]->Add(dropDnotDisturb); + group[DROPDOWNVIEW]->Add(dropSavePower); + group[DROPDOWNVIEW]->Add(drofindPhone); + group[DROPDOWNVIEW]->Add(dropLine); + } + + // 获取手机连接状态 + bool PullUpDownView::GetPhoneConnectedStatus(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::GetPhoneConnectedStatus"); + // uint8_t ret = uapi_dev_runtime_get_ble_connect_stat(); + // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "ble phone connect stat = %d", ret); + // if (ret == 1) + // return true; + // else + // return false; + + return SettingModel::GetInstance().GetPhoneConnectStatus(); + } + + // 获取蓝牙耳机连接状态 + bool PullUpDownView::GetEarPhoneConnectedStatus(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::GetEarPhoneConnectedStatus"); + // uint8_t ret = uapi_dev_runtime_get_earphone_connect_stat(); + // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "earphone connect stat = %d", ret); + // if (ret == 1) + // return true; + // else + // return false; + + return SettingModel::GetInstance().GetEarPhoneConnectStatus(); + } + + // 获取蓝牙连接状态 + bool PullUpDownView::GetBlueToothConnectedStatus(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::GetBlueToothConnectedStatus"); + // uint8_t ret = uapi_dev_runtime_get_br_connect_stat(); + // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "br connect stat = %d [0 no connect, 1 a2dp, 2 hfp, 3 both]", ret); + // if (ret != 0) + // return true; + // else + // return false; + + return SettingModel::GetInstance().GetBlueToothConnectStatus(); + } + + UIImageView *PullUpDownView::dropDownConnectedStatusImageViweInit(int16_t x, int16_t y, int16_t w, int16_t h) + { + UIImageView *img = new UIImageView(); + if (img == nullptr) + { + return nullptr; + } + img->SetPosition(x, y, w, h); + img->SetAutoEnable(false); + img->SetResizeMode(UIImageView::CENTER); + img->SetStyle(STYLE_BORDER_RADIUS, 100); + + return img; + } + + /// @brief 创建与连接状态相关组件 + void PullUpDownView::createDropDownConnectedStatusImageViwe(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::InitConnectedStatusImage"); + connectedStatusBackgroundButton = new UIButton(); + if (connectedStatusBackgroundButton == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "connectedStatusBackgroundButton new fail"); + return; + } + connectedStatusBackgroundButton->SetPosition(113, 348, 240, 64); + connectedStatusBackgroundButton->SetViewId(CONNECTEDSTATUSBACKGROUNDBUTTON); + connectedStatusBackgroundButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff); + connectedStatusBackgroundButton->SetStyle(STYLE_BACKGROUND_OPA, 0x00); + connectedStatusBackgroundButton->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xffffffff, UIButton::PRESSED); + connectedStatusBackgroundButton->SetStyleForState(STYLE_BACKGROUND_OPA, 0x00, UIButton::PRESSED); + connectedStatusBackgroundButton->SetStyleForState(STYLE_BORDER_COLOR, 0xffffffff, UIButton::PRESSED); + connectedStatusBackgroundButton->SetStyleForState(STYLE_BORDER_OPA, 0x00, UIButton::PRESSED); + UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::MainPresenterSample::GetInstance(); + if (clickListener == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainPresenterSample::GetInstance fail!!"); + return; + } + connectedStatusBackgroundButton->SetOnClickListener(clickListener); + /* -------------------------------- 显示手机连接状态 -------------------------------- */ + + showPhoneConnectedStatus = dropDownConnectedStatusImageViweInit(PHONECONNECTSTATUS_IMG_X, PHONECONNECTSTATUS_IMG_Y, CONNECTSTATUS_IMG_W, CONNECTSTATUS_IMG_H); + if (showPhoneConnectedStatus == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showPhoneConnectedStatus new fail"); + return; + } + /* -------------------------------- 显示耳机连接状态 -------------------------------- */ + showEarPhoneConnectedStatus = dropDownConnectedStatusImageViweInit(EARPHONESCONNECTSTATUS_IMG_X, EARPHONESCONNECTSTATUS_IMG_Y, CONNECTSTATUS_IMG_W, CONNECTSTATUS_IMG_H); + if (showEarPhoneConnectedStatus == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showEarPhoneConnectedStatus new fail"); + return; + } + /* -------------------------------- 显示蓝牙连接状态 -------------------------------- */ + showBluetoothConnectedStatus = dropDownConnectedStatusImageViweInit(BLUETOOTHCONNECTSTATUS_IMG_X, BLUETOOTHCONNECTSTATUS_IMG_Y, CONNECTSTATUS_IMG_W, CONNECTSTATUS_IMG_H); + if (showBluetoothConnectedStatus == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showBluetoothConnectedStatus new fail"); + return; + } + /* -------------------------------------------------------------------------- */ + UpdatePhoneStatus(GetPhoneConnectedStatus()); + UpdateEarPhoneStatus(GetEarPhoneConnectedStatus()); + UpdateBlueToothStatus(GetBlueToothConnectedStatus()); + /* -------------------------------------------------------------------------- */ + group[DROPDOWNVIEW]->Add(connectedStatusBackgroundButton); + group[DROPDOWNVIEW]->Add(showPhoneConnectedStatus); + group[DROPDOWNVIEW]->Add(showEarPhoneConnectedStatus); + group[DROPDOWNVIEW]->Add(showBluetoothConnectedStatus); + } + + /*** + * @brief 初始化时间,日期,星期,电池,信号强度 + */ + bool PullUpDownView::InitBaseData() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::InitBaseData"); + if (!InitSingalComponentsView()) + { + return false; + } + + /* ---------------------------------- 时间显示 ---------------------------------- */ + showTimeLabel = new UILabel(); + if (showTimeLabel == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showTimeLabel new fail"); + return false; + } + showTimeLabel->SetPosition(TIME_LABEL_X, TIME_LABEL_Y); + showTimeLabel->SetStyle(STYLE_TEXT_FONT, 50); + showTimeLabel->SetStyle(STYLE_LINE_HEIGHT, 59); + showTimeLabel->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); + showTimeLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + showTimeLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 50); + /* ---------------------------------- 日期显示 ---------------------------------- */ + showDateLabel = new UILabel(); + if (showDateLabel == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showDateLabel new fail"); + return false; + } + showDateLabel->SetPosition(DATE_LABEL_X, DATE_LABEL_Y); + showDateLabel->SetStyle(STYLE_TEXT_FONT, 30); + showDateLabel->SetStyle(STYLE_LINE_HEIGHT, 35); + showDateLabel->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); + showDateLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + showDateLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); + /* ---------------------------------- 星期显示 ---------------------------------- */ + showWeekLabel = new UILabel(); + if (showWeekLabel == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showWeekLabel new fail"); + return false; + } + showWeekLabel->SetPosition(WEEK_LABEL_X, WEEK_LABEL_Y); + showWeekLabel->SetStyle(STYLE_TEXT_FONT, 30); + showWeekLabel->SetStyle(STYLE_LINE_HEIGHT, 35); + showWeekLabel->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); + showWeekLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + showWeekLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 28); + /* ----------------------------------- 电池 ----------------------------------- */ + batteryimage = new UIImageView(); + if (batteryimage == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "batteryimage new fail"); + return false; + } + batteryimage->SetPosition(258, 180, BATTERY_IMAGE_WIDTH, BATTERY_IMAGE_HEIGHT); + std::string batteryimagesPath = "/user/res/Battery/Battery-E.bin"; + batteryimage->SetSrc(batteryimagesPath.c_str()); + /* -------------------------------------------------------------------------- */ + progress = new UIBoxProgress(); + if (progress == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "progress new fail"); + return false; + } + progress->SetPosition(206, 180, PROGRESS_WIDTH, PROGRESS_HEIGHT); + progress->SetValidHeight(PROGRESS_HEIGHT); + progress->SetValidWidth(PROGRESS_WIDTH); + + // progress->SetValue(value); + const char *progressImageSrc = "/user/res/Battery/Battery_Normal.bin"; + progress->SetImage(progressImageSrc, nullptr); + progress->SetBackgroundStyle(STYLE_BACKGROUND_OPA, 0x00); + progress->SetBackgroundStyle(STYLE_TEXT_COLOR, 0xff000000); + progress->SetForegroundStyle(STYLE_BACKGROUND_COLOR, 0xffffffff); + progress->SetForegroundStyle(STYLE_TEXT_COLOR, 0xff000000); + progress->SetForegroundStyle(STYLE_LINE_COLOR, 0xff45A5FF); + + group[DROPDOWNVIEW]->Add(progress); + group[DROPDOWNVIEW]->Add(batteryimage); + group[DROPDOWNVIEW]->Add(showTimeLabel); + group[DROPDOWNVIEW]->Add(showDateLabel); + group[DROPDOWNVIEW]->Add(showWeekLabel); + + /* -------------------------------------------------------------------------- */ + UpdateSignalStrengthStatusAndBatteryPosition(); + /* -------------------------------------------------------------------------- */ + + return true; + } + + // 初始化信号强度相关组件 + bool PullUpDownView::InitSingalComponentsView() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::InitSingalComponentsView"); + /* -------------------------------------------------------------------------- */ + NoSignal = new UIImageView(); + if (NoSignal == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "NoSignal new fail"); + return false; + } + NoSignal->SetPosition(160, 176, 36, 38); + NoSignal->SetAutoEnable(false); + NoSignal->SetResizeMode(UIImageView::CENTER); + NoSignal->SetSrc(DROPDOWN_NOSIGNAL_IMAGE); + NoSignal->SetVisible(false); + group[DROPDOWNVIEW]->Add(NoSignal); + /* -------------------------------------------------------------------------- */ + // 定义一个结构体,用于存储 ImageView 的信息 + struct ImageViewInfo + { + int posX; + int posY; + int width; + int height; + }; + // 待添加的 ImageView 信息列表 + std::vector imageViewList = { + {160, 204, 6, 6}, + {170, 196, 6, 14}, + {180, 188, 6, 22}, + {190, 180, 6, 30}, + }; + + // 循环添加 ImageView 到相应的容器中 + for (int i = 0; i < 4; i++) + { + if (showSignalStrength[i] == nullptr) + { + showSignalStrength[i] = new UIImageView(); + if (showSignalStrength[i] == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showSignalStrength[%d] new fail", i); + return false; + } + } + showSignalStrength[i]->SetPosition(imageViewList[i].posX, imageViewList[i].posY, imageViewList[i].width, imageViewList[i].height); + showSignalStrength[i]->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff); + showSignalStrength[i]->SetStyle(STYLE_BACKGROUND_OPA, 0xff); + showSignalStrength[i]->SetStyle(STYLE_BORDER_RADIUS, 10); + group[DROPDOWNVIEW]->Add(showSignalStrength[i]); + showSignalStrength[i]->SetVisible(false); + } + /* -------------------------------------------------------------------------- */ + if (Singal_4 == nullptr) + { + Singal_4 = new UILabel(); + } + Singal_4->SetPosition(201, 176, 40, 47); + Singal_4->SetStyle(STYLE_TEXT_FONT, 34); + Singal_4->SetStyle(STYLE_LINE_HEIGHT, 40); + Singal_4->SetText("4G"); + Singal_4->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); + Singal_4->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + Singal_4->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 34); + Singal_4->SetVisible(false); + group[DROPDOWNVIEW]->Add(Singal_4); + + return true; + } + + // 获取信号强度 + int PullUpDownView::GetSignalStrength(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::GetSignalStrength"); + int SignalStrength = uapi_dev_runtime_get_cat1_signal(); // 信号强度 + return CalculateSignalBars(SignalStrength); + } + + // 计算信号格 + int PullUpDownView::CalculateSignalBars(int signalStrength) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::CalculateSignalBars"); + if (signalStrength < 0 || signalStrength > 32 || signalStrength == 0) + return 99; // 无信号 or Invalid signal strength + + // if (signalStrength == 32) + // return 4; // Edge case where signalStrength is exactly at the upper boundary + + return (signalStrength / 8) + 1; + } + +#if 0 + // 函数用于更新信号显示的UI + void PullUpDownView::updateSignalDisplay() + { + int sim = uapi_dev_runtime_get_cat1_simstat(); + int cat1_powerOn = uapi_dev_runtime_get_cat1_powerstat(); + int signal = uapi_dev_runtime_get_cat1_signal(); + int network_on = uapi_dev_runtime_get_cat1_networkstat(); + int cat1_network_type = uapi_dev_runtime_get_cat1_networtype(); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sim = %d", sim); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "cat1_powerOn = %d", cat1_powerOn); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "signal = %d", signal); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "network_on = %d", network_on); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "cat1_network_type = %d", cat1_network_type); + + const int SIGNAL_NO_SIGNAL = 99; + const int NETWORK_TYPE_NO_NETWORK = 0; + const int NETWORK_TYPE_4G = 4; + + if (sim == 0 || cat1_powerOn == 0) + { + // 无信号,无4G图标 + UpdateCat1NoSignalisplay(true); + UpdateCat14GDisplay(false); + UpdateSignalBarDisplay(CalculateSignalBars(signal), false); + } + else if (cat1_powerOn == 1 && sim == 1) + { + if (signal == SIGNAL_NO_SIGNAL) + { + // 无信号UI显示 + UpdateCat1NoSignalisplay(true); + UpdateCat14GDisplay(false); + UpdateSignalBarDisplay(CalculateSignalBars(signal), false); + } + else + { + // 信号强度显示 + UpdateCat1NoSignalisplay(false); + UpdateCat14GDisplay(true); + UpdateSignalBarDisplay(CalculateSignalBars(signal), true); + } + if (network_on == 0) + { + // 无信号,无4G图标 显示 + UpdateCat1NoSignalisplay(true); + UpdateCat14GDisplay(false); + UpdateSignalBarDisplay(CalculateSignalBars(signal), false); + } + else + { + if (cat1_network_type == NETWORK_TYPE_NO_NETWORK) + { + // 无信号,无4G图标 显示 + UpdateCat1NoSignalisplay(true); + UpdateCat14GDisplay(false); + UpdateSignalBarDisplay(CalculateSignalBars(signal), false); + } + else if (cat1_network_type == NETWORK_TYPE_4G) + { + // 有4G图标,正常显示信号 + UpdateCat1NoSignalisplay(false); + UpdateCat14GDisplay(true); + UpdateSignalBarDisplay(CalculateSignalBars(signal), true); + } + else + { + // 无4G图标,正常显示信号 + UpdateCat1NoSignalisplay(false); + UpdateCat14GDisplay(false); + UpdateSignalBarDisplay(CalculateSignalBars(signal), true); + } + } + } + } +#else + // 函数用于更新信号显示的UI + void PullUpDownView::updateSignalDisplay() + { + int sim = uapi_dev_runtime_get_cat1_simstat(); + int cat1_powerOn = uapi_dev_runtime_get_cat1_powerstat(); + int signal = uapi_dev_runtime_get_cat1_signal(); + int network_on = uapi_dev_runtime_get_cat1_networkstat(); + int cat1_network_type = uapi_dev_runtime_get_cat1_networtype(); + + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sim = %d", sim); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "cat1_powerOn = %d", cat1_powerOn); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "signal = %d", signal); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "network_on = %d", network_on); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "cat1_network_type = %d", cat1_network_type); + + const int SIGNAL_NO_SIGNAL = 99; + const int NETWORK_TYPE_NO_NETWORK = 0; + const int NETWORK_TYPE_4G = 4; + + bool showNoSignalUI = (sim == 0 || cat1_powerOn == 0 || signal == SIGNAL_NO_SIGNAL); + bool showNoNetworkUI = (network_on == 0 || cat1_network_type == NETWORK_TYPE_NO_NETWORK); + + bool show4GIcon = (cat1_network_type == NETWORK_TYPE_4G); + + UpdateCat1NoSignalisplay(showNoSignalUI); + UpdateCat14GDisplay(show4GIcon); + UpdateSignalBarDisplay(CalculateSignalBars(signal), !(showNoSignalUI || showNoNetworkUI)); + } +#endif + + // 更新信号强度显示 + void PullUpDownView::UpdateSignalBarDisplay(int signalBars, bool state) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdateSignalBarDisplay"); + for (int i = 0; i < 4; i++) + { + showSignalStrength[i]->SetStyle(STYLE_BACKGROUND_COLOR, (i < signalBars) ? COLOR_SIGNAL_ON : COLOR_SIGNAL_OFF); + showSignalStrength[i]->Invalidate(); + showSignalStrength[i]->SetVisible(state); + } + } + + // 更新无信号图标显示 + void PullUpDownView::UpdateCat1NoSignalisplay(bool state) + { + if (NoSignal != nullptr) + { + NoSignal->SetVisible(state); + } + } + + // 更新4G图标显示 + void PullUpDownView::UpdateCat14GDisplay(bool state) + { + if (Singal_4 != nullptr) + { + Singal_4->SetVisible(state); + } + } + + // 更新电池位置 + void PullUpDownView::UpdateBatteryPosition(int signalBars) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdateBatteryPosition"); + if (signalBars == 99) + { + batteryimage->SetPosition(209, 180, BATTERY_IMAGE_WIDTH, BATTERY_IMAGE_HEIGHT); + progress->SetPosition(215, 186, PROGRESS_WIDTH, PROGRESS_HEIGHT); + } + else + { + batteryimage->SetPosition(258, 180, BATTERY_IMAGE_WIDTH, BATTERY_IMAGE_HEIGHT); + progress->SetPosition(264, 186, PROGRESS_WIDTH, PROGRESS_HEIGHT); + } + batteryimage->Invalidate(); + progress->Invalidate(); + } + + // 更新信号强度和电池位置 + void PullUpDownView::UpdateSignalStrengthStatusAndBatteryPosition() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdateSignalStrengthStatusAndBatteryPosition"); + updateSignalDisplay(); + UpdateBatteryPosition(GetSignalStrength()); + } + + // 下拉视图初始化 + bool PullUpDownView::PullUpDownViewInit() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::InitView"); + + group[DROPDOWNVIEW] = new UIViewGroup(); + if (group[DROPDOWNVIEW] == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group[DROPDOWNVIEW] new fail!!"); + return false; + } + group[DROPDOWNVIEW]->SetPosition(0, 0, 466, 466); + group[DROPDOWNVIEW]->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT); + group[DROPDOWNVIEW]->SetViewIndex(0); + group[DROPDOWNVIEW]->SetFullScreenBlur(true); + createDropDownIconImageViwe(); + createDropDownConnectedStatusImageViwe(); + + if (InitBaseData()) + { + MainPresenterSample::GetInstance()->UpdataBaseData(); + } + else + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::InitBaseData Error!"); + return false; + } + SetTouchable(true); + SetIntercept(true); + Add(group[DROPDOWNVIEW]); + return true; + } + + void PullUpDownView::PreLoad(void) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView::PreLoad"); + if (!viewiInitStatus) + { + PullUpDownViewInit(); + viewiInitStatus = true; + } + } + + void PullUpDownView::UnLoad(void) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UnLoad"); + } + + // 更新手机连接状态 + void PullUpDownView::UpdatePhoneStatus(int status) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdatePhoneStatus"); + if (showPhoneConnectedStatus == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showPhoneConnectedStatus nullptr"); + return; + } + showPhoneConnectedStatus->SetSrc(status ? DROPDOWN_PHONECONNECTED_IMAGE : DROPDOWN_PHONEDISCONNECTED_IMAGE); + showPhoneConnectedStatus->Invalidate(); + + if (GetConnectedStatusView() != nullptr) + GetConnectedStatusView()->UpdatePhoneConnectedStatus(status); + + return; + } + + // 更新蓝牙耳机连接状态 + void PullUpDownView::UpdateEarPhoneStatus(int status) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdateEarPhoneStatus"); + if (showEarPhoneConnectedStatus == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showEarPhoneConnectedStatus nullptr"); + return; + } + showEarPhoneConnectedStatus->SetSrc(status ? DROPDOWN_EARPHONESCONNECTED_IMAGE : DROPDOWN_EARPHONESDISCONNECTED_IMAGE); + showEarPhoneConnectedStatus->Invalidate(); + + if (GetConnectedStatusView() != nullptr) + GetConnectedStatusView()->UpdateEarPhoneConnectedStatus(status); + + return; + } + + // 更新蓝牙连接状态 + void PullUpDownView::UpdateBlueToothStatus(int status) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdateBlueToothStatus"); + if (showBluetoothConnectedStatus == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showBluetoothConnectedStatus nullptr"); + return; + } + showBluetoothConnectedStatus->SetSrc(status ? DROPDOWN_BLUETOOTHCONNECTED_IMAGE : DROPDOWN_BLUETOOTHDISCONNECTED_IMAGE); + showBluetoothConnectedStatus->Invalidate(); + + if (GetConnectedStatusView() != nullptr) + GetConnectedStatusView()->UpdateBlueToothConnectedStatus(status); + + return; + } + + /*更新勿扰模式状态*/ + void PullUpDownView::UpdateDnotDisturbStatus(int status) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdateDnotDisturbStatus"); + if (dropDnotDisturb != nullptr) + { + dropDnotDisturb->SetStyle(STYLE_BACKGROUND_COLOR, status ? 0xff8e20e2 : 0xff191919); + dropDnotDisturb->Invalidate(); + } + else + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dropIconBackground[DNOTDISTURB_INDEX] is nullptr"); + return; + } + } + + UILabel *PullUpDownView::GetTimeLabel() + { + return showTimeLabel; + } + UILabel *PullUpDownView::GetDateLabel() + { + return showDateLabel; + } + UILabel *PullUpDownView::GetWeekLabel() + { + return showWeekLabel; + } + UIBoxProgress *PullUpDownView::GetProgress() + { + return progress; + } + /* ------------------------------ 下拉界面切换到连接状态视图 ----------------------------- */ + // 切换到"下拉控制中心"视图 + bool PullUpDownView::ChangeDropDownView(int16_t thisView) + { + if (group[thisView] == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ChangeDropDownView"); + Add(group[thisView]); + } + return true; + } + + // 切换到"连接状态"视图 + bool PullUpDownView::ChangeConnectedStatusView(int16_t thisView) + { + if (group[thisView] == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ChangeConnectedStatusView"); + connectedStatusView = new ConnectedStatusView(); + if (connectedStatusView == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView:: new scrollView[%d] fail", thisView); + return false; + } + group[thisView] = connectedStatusView->ConnectedStatusViewInit(); + Add(group[thisView]); + } + return true; + } + + struct PullUpDownViewMapper + { + const int16_t viewId; + bool (PullUpDownView::*func)(int16_t thisView); + }; + + static const PullUpDownViewMapper ViewMapper[] = { + {DROPDOWNVIEW, &PullUpDownView::ChangeDropDownView}, + {CONNECTEDSTATUSVIEW, &PullUpDownView::ChangeConnectedStatusView}, + }; + + bool PullUpDownView::ClickFunc(int16_t interface) + { + int funcSize = sizeof(ViewMapper) / sizeof(ViewMapper[0]); + for (int i = 0; i < funcSize; i++) + { + if (interface == ViewMapper[i].viewId) + { + bool jug = (this->*(ViewMapper[i].func))(interface); + if (jug == false) + { + return false; + } + return true; + } + } + return false; + } + + void PullUpDownView::ChangeView(int16_t hideView, int16_t showView) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ChangeView"); + if (hideView > MAX_DROPDOWNVIEWID) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView:: SystemViewId Overstep ones bounds"); + return; + } + group[hideView]->SetVisible(false); + ClickFunc(showView); + group[showView]->SetVisible(true); + Invalidate(); + } + + ConnectedStatusView *PullUpDownView::GetConnectedStatusView(void) + { + return connectedStatusView; + } + /* -------------------------------------------------------------------------- */ +} +#else /* * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved. * Description: WeekStep @@ -173,7 +1253,7 @@ namespace OHOS { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ClearAll"); RemoveAll(); - UnLoadPullUpDownImageRes(); //切换slice的时候也要卸载资源放在ImageCach空间不够 + UnLoadPullUpDownImageRes(); // 切换slice的时候也要卸载资源放在ImageCach空间不够 if (group[DROPDOWNVIEW] != nullptr) { group[DROPDOWNVIEW]->RemoveAll(); @@ -348,7 +1428,7 @@ namespace OHOS dropLighting->SetAutoEnable(false); dropLighting->SetResizeMode(UIImageView::CENTER); // ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, dropLighting, DROPDOWN_BLUETOOTH); - dropLighting->SetViewId(DROPDOWN_CLICK_LIGHTING); // 进入亮屏界面 + dropLighting->SetViewId(DROPDOWN_CLICK_BLUETOOTH); // 进入亮屏界面 dropLighting->SetTouchable(true); dropLighting->SetOnClickListener(clickListener); /* ----------------------------------- 勿扰模式 ----------------------------------- */ @@ -1206,3 +2286,4 @@ namespace OHOS } /* -------------------------------------------------------------------------- */ } +#endif diff --git a/code/sdk/application/wearable/fd230app/nativeui/main/src/dial/DialModelHeartRate.cpp b/code/sdk/application/wearable/fd230app/nativeui/main/src/dial/DialModelHeartRate.cpp index 184cd2c8d..89fed7267 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/main/src/dial/DialModelHeartRate.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/main/src/dial/DialModelHeartRate.cpp @@ -1,3 +1,9 @@ +/*** + * @Date: 2024-04-15 10:55:58 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-07-01 09:48:06 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/src/dial/DialModelHeartRate.cpp + */ /* * Copyright (c) CompanyNameMagicTag 2023. All rights reserved. * Description: DialModelHeartRate @@ -23,6 +29,9 @@ namespace OHOS void DialModelHeartRate::UpdateHeartRate(int16_t heartRate) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateHeartRate = %d", heartRate); + // 筛选表盘心率数据 + if (heartRate == 0) + return; heartRate_ = static_cast(heartRate); if (onChangeListener_ != nullptr) { diff --git a/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageModel.cpp index 0e6db03e1..7e8eff98f 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageModel.cpp @@ -31,7 +31,7 @@ #define MESSAGE_JSON_FILE "user/userdata/message/ancs.json" #define PRINTFDATA 1 -extern "C" errcode_t uapi_get_TIME_STR(uint32_t time, char *p_time, char separator, bool include_seconds); +extern "C" errcode_t uapi_get_TIME_STR(uint32_t time, char *p_time, char separator, bool include_seconds, bool include_year); namespace OHOS { MessageData message_; @@ -120,7 +120,7 @@ namespace OHOS uint32 timestamp = cJSON_GetObjectItem(item, "time")->valueint; messagedata.timestamp = timestamp; char labelTime[20]; - if (uapi_get_TIME_STR(timestamp, labelTime, '.', false) != ERRCODE_SUCC) + if (uapi_get_TIME_STR(timestamp, labelTime, '.', false, false) != ERRCODE_SUCC) { messagedata.labelTime = std::string("2024.1.1 00:00"); } diff --git a/code/sdk/application/wearable/fd230app/nativeui/phone/src/PhoneDirView.cpp b/code/sdk/application/wearable/fd230app/nativeui/phone/src/PhoneDirView.cpp index 454b38ee8..5ab5893cb 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/phone/src/PhoneDirView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/phone/src/PhoneDirView.cpp @@ -106,7 +106,7 @@ namespace OHOS label1_phone_name = new UILabel(); } label1_phone_name->SetPosition(173, 53); // widget's left position and top position - label1_phone_name->Resize(120, 35); // widget's width and height + label1_phone_name->Resize(120, 55); // widget's width and height label1_phone_name->SetViewId("label1");// Set style label1_phone_name->SetStyle(STYLE_TEXT_FONT, 50); @@ -185,8 +185,8 @@ namespace OHOS { if(strcmp("container_one_page",idstr)==0) { - // container_->SetVisible(true); - // container_one_page->SetVisible(false); + container_->SetVisible(true); + container_one_page->SetVisible(false); return; } diff --git a/code/sdk/application/wearable/fd230app/nativeui/producttest/include/testLCD.h b/code/sdk/application/wearable/fd230app/nativeui/producttest/include/testLCD.h index 3c9024ae9..79114e1f0 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/producttest/include/testLCD.h +++ b/code/sdk/application/wearable/fd230app/nativeui/producttest/include/testLCD.h @@ -23,7 +23,8 @@ namespace OHOS UIScrollView *testLCDInitIView(void); void ClearAll(void); - void set_LCD_color(); + void set_LCD_color(int); + void LCDHideNextButton(void); private: bool testLCDScrollViewcrollViewinit(void); UIScrollView *testLCDScrollView{nullptr}; diff --git a/code/sdk/application/wearable/fd230app/nativeui/producttest/include/testLCDC.h b/code/sdk/application/wearable/fd230app/nativeui/producttest/include/testLCDC.h new file mode 100644 index 000000000..5f3a1d52d --- /dev/null +++ b/code/sdk/application/wearable/fd230app/nativeui/producttest/include/testLCDC.h @@ -0,0 +1,28 @@ +/* + * @Author: penglei 1624952103@qq.com + * @Date: 2024-06-07 11:18:25 + * @LastEditors: penglei 1624952103@qq.com + * @LastEditTime: 2024-07-02 18:04:42 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/producttest/include/testLCDC.h + * @Description: + * + * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. + */ +#ifndef TEST_LCD_H +#define TEST_LCD_H + +#ifdef __cplusplus +#if __cplusplus +extern "C" +{ +#endif +#endif + void factorytest_set_LCD_color(int color); + void factorytest_hide_test_lcd_button(void); + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif +#endif diff --git a/code/sdk/application/wearable/fd230app/nativeui/producttest/include/testPresenterC.h b/code/sdk/application/wearable/fd230app/nativeui/producttest/include/testPresenterC.h new file mode 100644 index 000000000..a68360d76 --- /dev/null +++ b/code/sdk/application/wearable/fd230app/nativeui/producttest/include/testPresenterC.h @@ -0,0 +1,28 @@ +/* + * @Author: penglei 1624952103@qq.com + * @Date: 2024-06-07 11:18:25 + * @LastEditors: penglei 1624952103@qq.com + * @LastEditTime: 2024-07-02 18:04:51 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/producttest/include/testPresenterC.h + * @Description: + * + * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. + */ +#ifndef TEST_PRESENTER_H +#define TEST_PRESENTER_H + +#ifdef __cplusplus +#if __cplusplus +extern "C" +{ +#endif +#endif + void factorytest_enter_test_tp_view(void); + void factorytest_enter_test_lcd_view(void); + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif +#endif diff --git a/code/sdk/application/wearable/fd230app/nativeui/producttest/include/testTP.h b/code/sdk/application/wearable/fd230app/nativeui/producttest/include/testTP.h index dd71274f0..ea7d1c464 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/producttest/include/testTP.h +++ b/code/sdk/application/wearable/fd230app/nativeui/producttest/include/testTP.h @@ -35,6 +35,7 @@ namespace OHOS UIScrollView *testTPInitIView(void); void ClearAll(void); + void TPHideNextButton(void); private: UIButton *SetTheButton_ext(ButtonConfig_ext_t &buttonconfig, UIView::OnTouchListener *clickListener); bool testTPScrollViewcrollViewinit(void); diff --git a/code/sdk/application/wearable/fd230app/nativeui/producttest/include/testTPC.h b/code/sdk/application/wearable/fd230app/nativeui/producttest/include/testTPC.h new file mode 100644 index 000000000..f043693dc --- /dev/null +++ b/code/sdk/application/wearable/fd230app/nativeui/producttest/include/testTPC.h @@ -0,0 +1,28 @@ +/* + * @Author: penglei 1624952103@qq.com + * @Date: 2024-06-07 11:18:25 + * @LastEditors: penglei 1624952103@qq.com + * @LastEditTime: 2024-07-02 18:05:11 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/producttest/include/testTPC.h + * @Description: + * + * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. + */ +#ifndef TEST_TP_H +#define TEST_TP_H + +#ifdef __cplusplus +#if __cplusplus +extern "C" +{ +#endif +#endif + + void factorytest_hide_test_tp_button(void); + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif +#endif diff --git a/code/sdk/application/wearable/fd230app/nativeui/producttest/src/testLCD.cpp b/code/sdk/application/wearable/fd230app/nativeui/producttest/src/testLCD.cpp index f6b885d97..753eced0d 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/producttest/src/testLCD.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/producttest/src/testLCD.cpp @@ -76,17 +76,18 @@ namespace OHOS testLCDScrollView=nullptr; } } - - void colorTimerCallBack(int data) + uint8_t LCD_TEST_FALG=0; + void colorTimerCallBack(int data) { testLCDView* t= testLCDView::GetInstance(); if(t!=NULL) - t->set_LCD_color(); + t->set_LCD_color(LCD_TEST_FALG); + LCD_TEST_FALG++; } - uint8_t LCD_TEST_FALG=0; - void testLCDView :: set_LCD_color(void) + + void testLCDView :: set_LCD_color(int color) { - switch (LCD_TEST_FALG) + switch (color) { case 0: testLCDScrollView->SetStyle(STYLE_BACKGROUND_COLOR, Color::Green().full); @@ -97,11 +98,20 @@ namespace OHOS case 2: testLCDScrollView->SetStyle(STYLE_BACKGROUND_COLOR, Color::Yellow().full); break; + case 3: + testLCDScrollView->SetStyle(STYLE_BACKGROUND_COLOR, Color::Red().full); + break; + case 4: + testLCDScrollView->SetStyle(STYLE_BACKGROUND_COLOR, Color::White().full); + break; + case 5: + testLCDScrollView->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full); + break; default: break; } RootView::GetInstance()->Invalidate(); - LCD_TEST_FALG++; + //LCD_TEST_FALG++; } @@ -147,7 +157,7 @@ namespace OHOS WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::draglistener can not be nullptr!"); return false; } - testLCDScrollView->SetOnDragListener(draglistener); + testLCDScrollView->SetOnDragListener(draglistener); testLCDScrollView->SetTouchable(true); testLCDScrollView->SetDraggable(true); @@ -174,4 +184,37 @@ namespace OHOS } return testLCDScrollView; } + + void testLCDView::LCDHideNextButton(void) + { + labelButton_next->SetVisible(false); + testLCDScrollView->Remove(Title); + } + +#ifdef __cplusplus +#if __cplusplus +extern "C" +{ +#endif /* __cplusplus */ +#endif /* __cplusplus */ + + void factorytest_set_LCD_color(int color) + { + testLCDView* t= testLCDView::GetInstance(); + + if(t!=NULL) + t->set_LCD_color(color); + } + + void factorytest_hide_test_lcd_button(void) + { + testLCDView::GetInstance()->LCDHideNextButton(); + osTimerStop(MG_TEST_timer); + } + +#ifdef __cplusplus +#if __cplusplus +} +#endif /* __cplusplus */ +#endif /* __cplusplus */ } \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/producttest/src/testPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/producttest/src/testPresenter.cpp index 109707d6f..561fb714d 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/producttest/src/testPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/producttest/src/testPresenter.cpp @@ -358,5 +358,27 @@ namespace OHOS //language *g_planguage = new language; /* -------------------------------------------------------------------------- */ // 用来监听语言切换 - + +#ifdef __cplusplus +#if __cplusplus +extern "C" +{ +#endif /* __cplusplus */ +#endif /* __cplusplus */ + + void factorytest_enter_test_tp_view(void) + { + testView::GetInstance()->ChangeView(TESTVIEW,TP); + } + + void factorytest_enter_test_lcd_view(void) + { + testView::GetInstance()->ChangeView(TESTVIEW,LCD); + } + +#ifdef __cplusplus +#if __cplusplus +} +#endif /* __cplusplus */ +#endif /* __cplusplus */ } \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/producttest/src/testTP.cpp b/code/sdk/application/wearable/fd230app/nativeui/producttest/src/testTP.cpp index f3beb206f..5c57c070d 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/producttest/src/testTP.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/producttest/src/testTP.cpp @@ -203,4 +203,29 @@ namespace OHOS } return testTPScrollView; } + + void testTPView::TPHideNextButton(void) + { + labelButton_next->SetVisible(false); + testTPScrollView->Remove(Title); + } + +#ifdef __cplusplus +#if __cplusplus +extern "C" +{ +#endif /* __cplusplus */ +#endif /* __cplusplus */ + + void factorytest_hide_test_tp_button(void) + { + testTPView::GetInstance()->TPHideNextButton(); + } + + +#ifdef __cplusplus +#if __cplusplus +} +#endif /* __cplusplus */ +#endif /* __cplusplus */ } \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/producttest/src/testbt.cpp b/code/sdk/application/wearable/fd230app/nativeui/producttest/src/testbt.cpp index da73e93f7..478c164f0 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/producttest/src/testbt.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/producttest/src/testbt.cpp @@ -277,7 +277,7 @@ namespace OHOS char buf[128]={0}; WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "rssi %d",rssi); - sprintf_s(buf,128,"addr:%02X%02X%02X%02X%02X%02X\nRssi:%d",name,addr[0],addr[1],addr[2],addr[3],addr[4],addr[5],rssi); + sprintf_s(buf,128,"addr:%02X %02X %02X %02X %02X %02X\nRssi:%d",addr[0],addr[1],addr[2],addr[3],addr[4],addr[5],rssi); label_BR_SCAN[i]->SetText(buf); RootView::GetInstance()->Invalidate(); diff --git a/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingModel.cpp index 6d67e862c..0b30109f0 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingModel.cpp @@ -57,7 +57,7 @@ namespace OHOS { Time = 5; START_FLAG = false; - HeartModel::GetInstance()->Heart_Control(HeartState::End); // 关闭心率检测 + HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::INITIATIVE); // 关闭心率检测 } /* -------------------------------------------------------------------------- */ /*定时器到期时的处理*/ @@ -78,7 +78,7 @@ namespace OHOS RespiratoryTrainingModel::GetInstance().RT_StopTimer(); // 停止定时器 RespiratoryTrainingModel::GetInstance().AddRespiratoryTrainingTimes(); // 呼吸训练次数加1 p_RespiratoryTrainingView->GetRespiratoryTrainingAnimator_()->Stop(); // 关闭呼吸动画 - HeartModel::GetInstance()->Heart_Control(HeartState::End); // 关闭心率检测 + HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::INITIATIVE); // 关闭心率检测 p_RespiratoryTrainingView->ChangeView(RESPIRATORYTRAINING, RESPIRATORYTRAININGCOMPLETED); } else @@ -86,7 +86,7 @@ namespace OHOS Time = ONE_MINUTE; p_RespiratoryTrainingView->StartRespiratoryTraining(); // 开始呼吸训练 START_FLAG = true; - HeartModel::GetInstance()->Heart_Control(HeartState::Start); // 开启心率检测 + HeartModel::GetInstance()->Heart_Control(HeartState::Start,HeartCheck::INITIATIVE); // 开启心率检测 } } diff --git a/code/sdk/application/wearable/fd230app/nativeui/rtcservice/src/rtc_at_cmd.cpp b/code/sdk/application/wearable/fd230app/nativeui/rtcservice/src/rtc_at_cmd.cpp index 1ae2202be..c38fb8d93 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/rtcservice/src/rtc_at_cmd.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/rtcservice/src/rtc_at_cmd.cpp @@ -97,22 +97,10 @@ extern "C" } return ERRCODE_SUCC; } - static uint32_t rtc_restore_factory_settings(uint8_t *para, uint32_t paraLen, char *strCommonCmd) - { - UNUSED(para); - UNUSED(paraLen); - UNUSED(strCommonCmd); - - // 执行恢复出厂设置的操作 - uapi_restore_factory_setting(); - PRINT("Restoring Factory Settings...\n"); - return ERRCODE_SUCC; - } static const at_cmd_table_t g_rtc_cmd[] = { {(char *)"AT^RTCTEST", rtc_do_test, (char *)"enable"}, - {(char *)"AT^RESTORE", rtc_restore_factory_settings, NULL}, }; at_cmd_table_t *get_rtc_cmd_table(uint32_t *cmd_count) diff --git a/code/sdk/application/wearable/fd230app/nativeui/screensetting/src/ScreenModels.cpp b/code/sdk/application/wearable/fd230app/nativeui/screensetting/src/ScreenModels.cpp index 6b26e3841..5887f6d2d 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/screensetting/src/ScreenModels.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/screensetting/src/ScreenModels.cpp @@ -73,7 +73,7 @@ bool ScreenModels::LoadAppImages(std::string file, UIImageView *view, uint32_t r void ScreenModels::PreLoadAppimages(void) { LoadAppMultiImages(PLAYER_IAMGES, PLAYER_BACKGROUND, PLAYER_PLAYING); - LoadAppMultiImages(CLOCK_IAMGES, CLOCK_CLOCK0, CLOCK_SECOND); + //LoadAppMultiImages(CLOCK_IAMGES, CLOCK_CLOCK0, CLOCK_SECOND); LoadAppMultiImages(COMPASS_IAMGES, COMPASS_COMPASS0, COMPASS_COMPASS2); LoadAppMultiImages(DROPDOWN_IAMGES, DROPDOWN_BLUETOOTHCONNECTED, DROPDOWN_SETTING); LoadAppMultiImages(HEART_IAMGES, HEART_HEARTRATECOOR, HEART_HEARTRATE_TOP); diff --git a/code/sdk/application/wearable/fd230app/nativeui/set_dial/src/SetDialModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/set_dial/src/SetDialModel.cpp index b9d56647b..f2e4e1af0 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/set_dial/src/SetDialModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/set_dial/src/SetDialModel.cpp @@ -136,11 +136,13 @@ namespace OHOS /* 注册表盘map */ void SetDialModel::RegisterDial(uint16_t ID, const char *dialname) { + if(ID==0 || strlen(dialname)==0) + return; registeredDials[ID] = std::string(dialname); // 唯一性 - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RegisterDial %s is ok!", dialname); - + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RegisterDial %d %s is ok!",ID, dialname); + LoadAllDial(); saveDialfile(); @@ -170,7 +172,10 @@ namespace OHOS /* 获取当前表盘Id */ uint16_t SetDialModel::GetCurrentDialID() { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "currentDialID is %d,name is %s", currentDialID, registeredDials[currentDialID].c_str()); + if (registeredDials.find(currentDialID) != registeredDials.end()) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "currentDialID is %d,name is %s", currentDialID, registeredDials[currentDialID].c_str()); + } return currentDialID; } /* 获取所有表盘Id 每个表盘Id 2个字节 拼接为字符串 */ @@ -224,6 +229,8 @@ namespace OHOS WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UninstallDial the dial %d is ok", ID); registeredDials.erase(ID); + LoadAllDial(); + return true; } @@ -236,25 +243,28 @@ namespace OHOS /*更新表盘*/ void SetDialModel::UpdateDialSetting(uint16_t ID) { - std::string dialname = registeredDials[ID]; // 根据ID找到对应的表盘名称 - // 在dialInfoList中查找同名表盘 - for (size_t i = 0; i < dialInfoList.size(); i++) + if (registeredDials.find(ID) != registeredDials.end()) { - if (dialInfoList[i].dialName == dialname) + std::string dialname = registeredDials[ID]; // 根据ID找到对应的表盘名称 + // 在dialInfoList中查找同名表盘 + for (size_t i = 0; i < dialInfoList.size(); i++) { - DialSetting diagSetting; - SetDialInfo &info = dialInfoList[i]; - diagSetting.dialFlag = info.dialFlag; - diagSetting.dialId = info.id; - diagSetting.dialFullName = info.dialFullName; - MainModel::GetInstance().AddDialSetting(diagSetting); // 更新表盘设置 - currentDialID = ID; // 更新当前表盘Id - NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN); - return; // 更新成功后直接返回 + if (dialInfoList[i].dialName == dialname) + { + DialSetting diagSetting; + SetDialInfo &info = dialInfoList[i]; + diagSetting.dialFlag = info.dialFlag; + diagSetting.dialId = info.id; + diagSetting.dialFullName = info.dialFullName; + MainModel::GetInstance().AddDialSetting(diagSetting); // 更新表盘设置 + currentDialID = ID; // 更新当前表盘Id + NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN); + return; // 更新成功后直接返回 + } } + NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetDialModel UpdateDialSetting: Cannot find dial with name %s", dialname.c_str()); } - NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetDialModel UpdateDialSetting: Cannot find dial with name %s", dialname.c_str()); } /*加载所有表盘*/ diff --git a/code/sdk/application/wearable/fd230app/nativeui/sleep/include/SleepModel.h b/code/sdk/application/wearable/fd230app/nativeui/sleep/include/SleepModel.h index a596d09b1..9784305f7 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/sleep/include/SleepModel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/sleep/include/SleepModel.h @@ -4,9 +4,9 @@ * @LastEditors: penglei 1624952103@qq.com * @LastEditTime: 2024-06-28 15:51:01 * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/sleep/include/SleepModel.h - * @Description: - * - * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. + * @Description: + * + * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. */ /*** * @Date: 2024-06-25 10:34:10 @@ -20,72 +20,85 @@ #include #include -//#include "AppViewIDs.h" -//#include "UiConfig.h" -//#include "sleep/include/SleepView.h" -//#include "sleep/include/SleepControlPresenter.h" +// #include "AppViewIDs.h" +// #include "UiConfig.h" +// #include "sleep/include/SleepView.h" +// #include "sleep/include/SleepControlPresenter.h" #include "string" - #define SLEEP_PATH "user/userdata/sleep/%s/sleep_%d.bin" #define SLEEP_DIR_PATH "user/userdata/sleep/%s" - namespace OHOS { - #pragma pack(1) +#pragma pack(1) typedef struct { - uint32_t fall_asleep_timestamp; //入睡 - uint32_t wake_up_timestamp; //出睡 - uint16_t total_time; //总时长 + uint32_t fall_asleep_timestamp; // 入睡 + uint32_t wake_up_timestamp; // 出睡 + uint16_t total_time; // 总时长 } NAP_T; typedef struct { uint32_t timestamp; // - uint8_t stat; //状态 - + uint8_t stat; // 状态 + } SLEEP_STATE_T; typedef struct { SLEEP_STATE_T sleep_status[20]; uint8_t status_num; - uint32_t fall_asleep_timestamp; //入睡 - uint32_t wake_up_timestamp; //出睡 - uint16_t total_time; //总时长 - uint16_t total_deep_sleep_time;//深睡 - uint16_t total_mild_sleep_time;//浅睡 - uint16_t total_rem_sleep_time;//清醒 - uint16_t total_wake_time;//动眼 + uint32_t fall_asleep_timestamp; // 入睡 + uint32_t wake_up_timestamp; // 出睡 + uint16_t total_time; // 总时长 + uint16_t total_deep_sleep_time; // 深睡 + uint16_t total_mild_sleep_time; // 浅睡 + uint16_t total_rem_sleep_time; // 清醒 + uint16_t total_wake_time; // 动眼 } SLEEP_T; - - #pragma pack() - bool save_nap_data(NAP_T *data); +#pragma pack() - uint32_t read_sleep_nap_data(char *data,uint32_t size,FILE *fp); - + bool save_nap_data(NAP_T *data); + uint32_t read_sleep_nap_data(char *data, uint32_t size, FILE *fp); void set_nap_data(NAP_T *data); - void set_sleep_data(SLEEP_T *data); - bool save_sleep_data(SLEEP_T *data); + // 睡眠状态 + enum class SLEEPSTATE + { + NOSLEEP = 0, + SLEEPNOTIFY, + SLEPP, + WALK, + }; + class SleepModel { public: static SleepModel &GetInstance(void); - void GetSleepTime(); // 获取睡眠时间 - std::string GetSleepStr(); // 解析睡眠时间 - void GetRestTime(); // 获取入睡时间 - std::string GetRestStr(); // 解析入睡时间 - void GetWalkTime(); // 获取醒来时间 - std::string GetWalkStr(); // 解析醒来时间 - void GetGoalTime(); // 获取目标休息时间(xx-xx) - std::string GetGoalStr(); // 解析目标休息时间 + void update_time_info(uint32_t timestamp, std::string &timeStr); + void update_sleep(SLEEP_T *data); + void set_sleep_goal(); + + int get_sleep_hour(); + int get_sleep_min(); + int get_sleep_goal(); + int get_sleep_total(); + + std::string get_rest_str(); // 解析入睡时间 + std::string get_walk_str(); // 解析醒来时间 + std::string get_goal_str(); // 解析目标休息时间 + std::string get_notifiy(); // 获取提醒时间 + std::string get_sleep_notifiy(); // 获取睡眠时间 + std::string get_walk_notifiy(); // 获取起床时间 + + void set_sleep_state(SLEEPSTATE state); + SLEEPSTATE get_sleep_state(); private: SleepModel(); @@ -93,11 +106,18 @@ namespace OHOS SleepModel &operator=(const SleepModel &); virtual ~SleepModel(); - std::string sleepStr; - std::string restStr; - std::string walkStr; - std::string goalsleepStr; - std::string goalwalkStr; + std::string sleepStr{"--"}; + std::string walkStr{"--"}; + std::string goalStr{"--"}; + + std::string goalnotifyStr{"--"}; + std::string goalsleepStr{"--"}; + std::string goalwalkStr{"--"}; + + uint8_t sleep_total_time = 0; + uint8_t goal_total_time = 0; + + SLEEPSTATE sleepstate_ = SLEEPSTATE::NOSLEEP; }; } diff --git a/code/sdk/application/wearable/fd230app/nativeui/sleep/include/SleepTimeView.h b/code/sdk/application/wearable/fd230app/nativeui/sleep/include/SleepTimeView.h index 254087266..867cd550f 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/sleep/include/SleepTimeView.h +++ b/code/sdk/application/wearable/fd230app/nativeui/sleep/include/SleepTimeView.h @@ -1,3 +1,9 @@ +/*** + * @Date: 2024-06-25 14:50:26 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-07-01 15:10:12 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/sleep/include/SleepTimeView.h + */ /*** * @Date: 2024-06-25 14:50:26 * @LastEditors: Caisking 3449750381@qq.com @@ -54,7 +60,7 @@ namespace OHOS UILabelExt *sleeptitle{nullptr}; // 入睡时间标题 UILabelExt *walktitle{nullptr}; // 醒来标题 UILabelExt *apptitle{nullptr}; // 详情 - UILabelExt *rest{nullptr}; // 作息时间 + UILabelExt *goal{nullptr}; // 作息时间 UILabelExt *sleep{nullptr}; // 入睡时间 UILabelExt *walk{nullptr}; // 醒来时间 UIImageView *transverseline_1{nullptr}; // 横线1 diff --git a/code/sdk/application/wearable/fd230app/nativeui/sleep/src/SleepModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/sleep/src/SleepModel.cpp index 2a430e086..843d782e9 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/sleep/src/SleepModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/sleep/src/SleepModel.cpp @@ -1,12 +1,12 @@ /* * @Author: penglei 1624952103@qq.com - * @Date: 2024-06-26 19:36:48 + * @Date: SLEPPNOTIFY24-06-26 19:36:48 * @LastEditors: penglei 1624952103@qq.com - * @LastEditTime: 2024-06-28 16:52:58 + * @LastEditTime: SLEPPNOTIFY24-06-28 16:52:58 * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/sleep/src/SleepModel.cpp - * @Description: - * - * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. + * @Description: + * + * Copyright (c) SLEPPNOTIFY24 by ${git_name_email}, All Rights Reserved. */ #include "sleep/include/SleepModel.h" @@ -15,23 +15,39 @@ #include "sleep/include/SleepControlPresenter.h" #include "custom_utils.h" #include - - +#include "UiConfig.h" +#include "ui_resource_image.h" +#include "samgr_lite.h" +#include +#include +#include +#include +#include +#include +#include "wearable_log.h" +#include "ConfigModel.h" + +extern "C" errcode_t uapi_get_TIME_STR(uint32_t time, char *p_time, char separator, bool include_seconds, bool include_year); +extern "C" int get_sleep_time_from_config_model(void); +extern "C" int get_wake_up_time_from_config_model(); namespace OHOS { - static NAP_T nap_data = {0}; - static SLEEP_T sleep_data = {0}; - static SLEEP_STATE_T sleep_status = {0}; +#define SLEPPNOTIFY 20 + + static NAP_T nap_data = {0}; + static SLEEP_T sleep_data = {0}; + static SLEEP_STATE_T sleep_status = {0}; + bool save_nap_data(NAP_T *data) { struct stat info; - char dir_path[64]={0}; - char file_path[64]={0}; - char day[12]={0}; - uapi_get_YYMMDD_Time(day,'\0'); + char dir_path[64] = {0}; + char file_path[64] = {0}; + char day[12] = {0}; + uapi_get_YYMMDD_Time(day, '\0'); - sprintf_s(dir_path,64,SLEEP_DIR_PATH,day); + sprintf_s(dir_path, 64, SLEEP_DIR_PATH, day); if (stat("user/userdata/sleep", &info) != 0) { if (mkdir("user/userdata/sleep", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0) @@ -44,64 +60,62 @@ namespace OHOS { if (mkdir(dir_path, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mkdir fail %s",dir_path); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mkdir fail %s", dir_path); return false; // Failed to create folder } } uint32_t creationTime; - int ret =uapi_get_timestampe_ss(&creationTime); + int ret = uapi_get_timestampe_ss(&creationTime); - sprintf_s(file_path,64,SLEEP_PATH,day,creationTime); + sprintf_s(file_path, 64, SLEEP_PATH, day, creationTime); FILE *fp; - fp=fopen(file_path,"wb+"); - if(fp==NULL) + fp = fopen(file_path, "wb+"); + if (fp == NULL) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "save_nap_sleep_data fopen fail"); return false; } - uint8_t sleep_type=0; - fwrite(&sleep_type,1,1,fp); + uint8_t sleep_type = 0; + fwrite(&sleep_type, 1, 1, fp); uint32_t fall_asleep_timestamp = data->fall_asleep_timestamp; - fwrite(&fall_asleep_timestamp,1,4,fp); + fwrite(&fall_asleep_timestamp, 1, 4, fp); uint32_t wake_up_timestamp = data->wake_up_timestamp; - fwrite(&wake_up_timestamp,1,4,fp); - - uint16_t total_time=data->total_time; - fwrite(&total_time,1,2,fp); + fwrite(&wake_up_timestamp, 1, 4, fp); + uint16_t total_time = data->total_time; + fwrite(&total_time, 1, 2, fp); WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "save_nap_sleep_data succ"); fclose(fp); return true; - } void set_nap_data(NAP_T *data) - { - memset(&nap_data,0,sizeof(NAP_T)); - memcpy_s(&nap_data,sizeof(NAP_T),data,sizeof(NAP_T)); + { + memset(&nap_data, 0, sizeof(NAP_T)); + memcpy_s(&nap_data, sizeof(NAP_T), data, sizeof(NAP_T)); save_nap_data(&nap_data); } - uint32_t read_sleep_nap_data(char *data,uint32_t size,FILE *fp) + uint32_t read_sleep_nap_data(char *data, uint32_t size, FILE *fp) { - return fread(data,1,size,fp); + return fread(data, 1, size, fp); } - + bool save_sleep_data(SLEEP_T *data) { struct stat info; - char dir_path[64]={0}; - char file_path[64]={0}; - char day[12]={0}; - uapi_get_YYMMDD_Time(day,'\0'); + char dir_path[64] = {0}; + char file_path[64] = {0}; + char day[12] = {0}; + uapi_get_YYMMDD_Time(day, '\0'); - sprintf_s(dir_path,64,SLEEP_DIR_PATH,day); + sprintf_s(dir_path, 64, SLEEP_DIR_PATH, day); if (stat("user/userdata/sleep", &info) != 0) { if (mkdir("user/userdata/sleep", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0) @@ -114,66 +128,223 @@ namespace OHOS { if (mkdir(dir_path, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mkdir fail %s",dir_path); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mkdir fail %s", dir_path); return false; // Failed to create folder } } - + uint32_t creationTime; - int ret =uapi_get_timestampe_ss(&creationTime); + int ret = uapi_get_timestampe_ss(&creationTime); - sprintf_s(file_path,64,SLEEP_PATH,day,creationTime); + sprintf_s(file_path, 64, SLEEP_PATH, day, creationTime); FILE *fp; - fp=fopen(file_path,"wb+"); - if(fp==NULL) + fp = fopen(file_path, "wb+"); + if (fp == NULL) { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "save_nap_sleep_data fopen fail"); return false; } uint8_t sleep_type = 1; - fwrite(&sleep_type,1,1,fp); + fwrite(&sleep_type, 1, 1, fp); uint32_t fall_asleep_timestamp = data->fall_asleep_timestamp; - fwrite(&fall_asleep_timestamp,1,4,fp); + fwrite(&fall_asleep_timestamp, 1, 4, fp); uint32_t wake_up_timestamp = data->wake_up_timestamp; - fwrite(&wake_up_timestamp,1,4,fp); + fwrite(&wake_up_timestamp, 1, 4, fp); - uint16_t total_time=data->total_time; - fwrite(&total_time,1,2,fp); + uint16_t total_time = data->total_time; + fwrite(&total_time, 1, 2, fp); - uint16_t total_deep_sleep_time=data->total_deep_sleep_time; - fwrite(&total_deep_sleep_time,1,2,fp); + uint16_t total_deep_sleep_time = data->total_deep_sleep_time; + fwrite(&total_deep_sleep_time, 1, 2, fp); - uint16_t total_mild_sleep_time=data->total_mild_sleep_time; - fwrite(&total_mild_sleep_time,1,2,fp); + uint16_t total_mild_sleep_time = data->total_mild_sleep_time; + fwrite(&total_mild_sleep_time, 1, 2, fp); - uint16_t total_rem_sleep_time=data->total_rem_sleep_time; - fwrite(&total_rem_sleep_time,1,2,fp); + uint16_t total_rem_sleep_time = data->total_rem_sleep_time; + fwrite(&total_rem_sleep_time, 1, 2, fp); - uint16_t total_wake_time=data->total_wake_time; - fwrite(&total_wake_time,1,2,fp); + uint16_t total_wake_time = data->total_wake_time; + fwrite(&total_wake_time, 1, 2, fp); - fwrite(data->sleep_status,sizeof(SLEEP_STATE_T),data->status_num,fp); + fwrite(data->sleep_status, sizeof(SLEEP_STATE_T), data->status_num, fp); fclose(fp); return true; } void set_sleep_data(SLEEP_T *data) - { - memset(&sleep_data,0,sizeof(SLEEP_T)); - memcpy_s(&sleep_data,sizeof(SLEEP_T),data,sizeof(SLEEP_T)); + { + memset(&sleep_data, 0, sizeof(SLEEP_T)); + memcpy_s(&sleep_data, sizeof(SLEEP_T), data, sizeof(SLEEP_T)); save_sleep_data(&sleep_data); + // 刷新model里面的数据 + SleepModel::GetInstance().update_sleep(&sleep_data); + } + SleepModel::SleepModel() + { + set_sleep_goal(); } - - SleepModel::SleepModel() {} SleepModel::~SleepModel() {} SleepModel &SleepModel::GetInstance() { static SleepModel instance; return instance; } + + void SleepModel::update_sleep(SLEEP_T *data) + { + if (data == NULL) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Invalid input data"); + return; + } + + // 打印数据 + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "fall_asleep_timestamp:%d wake_up_timestamp:%d total_time:%d", + data->fall_asleep_timestamp, data->wake_up_timestamp, data->total_time); + + update_time_info(data->fall_asleep_timestamp, sleepStr); + update_time_info(data->wake_up_timestamp, walkStr); + + // 更新睡眠总时间 + sleep_total_time = data->total_time; + + // 更新一下配置 + set_sleep_goal(); + } + + void SleepModel::update_time_info(uint32_t timestamp, std::string &timeStr) + { + char labelTime[20]; + if (uapi_get_TIME_STR(timestamp, labelTime, '.', false, false) == ERRCODE_SUCC) + { + timeStr = std::string(labelTime); + } + else + { + timeStr = "--"; + } + } + + /* + 设置睡眠目标 + 前2个字节是显示睡眠小时 + 后2个字节显示睡眠分钟 + 需要单独解析出来。 + */ + void SleepModel::set_sleep_goal() + { + // 将原3个字符串清空 + goalnotifyStr.clear(); + goalsleepStr.clear(); + goalwalkStr.clear(); + + int goal_sleep = get_sleep_time_from_config_model(); + int goal_walk = get_wake_up_time_from_config_model(); + + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "goal_sleep:%d goal_walk:%d", goal_sleep, goal_walk); + /* -------------------------------------------------------------------------- */ + // 提取小时部分(前2字节) + int goal_sleep_hour = goal_sleep >> 16; + // 提取分钟部分(后2字节) + int goal_sleep_min = goal_sleep & 0x00FF; + std::ostringstream sleeposs; + sleeposs << std::setfill('0') << std::setw(2) << goal_sleep_hour << ":" << std::setw(2) << goal_sleep_min; + // 睡眠时间点字符串 + goalsleepStr = sleeposs.str(); + + /* -------------------------------------------------------------------------- */ + // 需要配置提醒字符串 减去SLEPPNOTIFY分钟的计算 + int notify_min = (goal_sleep_min >= SLEPPNOTIFY) ? goal_sleep_min - SLEPPNOTIFY : ((goal_sleep_min + 60) - SLEPPNOTIFY); // 避免分钟数为负 + int notify_hour = goal_sleep_hour; + if (goal_sleep_min < SLEPPNOTIFY) + { // 如果需要借位 + notify_hour -= 1; // 小时减1 + } + // 确保小时数正确 + notify_hour = (notify_hour < 0) ? 23 : notify_hour; // 处理从0点前SLEPPNOTIFY分钟的情况,变为前一天的23点40分 + // 格式化提醒时间字符串 + std::ostringstream notifyoss; + notifyoss << std::setfill('0') << std::setw(2) << notify_hour << ":" << std::setw(2) << notify_min; + // 设置提醒字符串 + goalnotifyStr = notifyoss.str(); + /* -------------------------------------------------------------------------- */ + + int goal_walk_hour = goal_walk >> 16; + int goal_walk_min = goal_walk & 0x00FF; + std::ostringstream walkoss; + walkoss << std::setfill('0') << std::setw(2) << goal_walk_hour << ":" << std::setw(2) << goal_walk_min; + // 起床时间点字符串 + goalwalkStr = walkoss.str(); + /* -------------------------------------------------------------------------- */ + + // 睡眠字符串 以及总时长 + goalStr = goalsleepStr + "-" + goalwalkStr; + goal_total_time = goal_walk_hour * 60 + goal_walk_min; + } + // 获取睡眠总时长(小时) + int SleepModel::get_sleep_hour() + { + return sleep_total_time / 60; + } + // 获取睡眠总时长(分钟) + int SleepModel::get_sleep_min() + { + return sleep_total_time % 60; + } + // 获取睡眠总时长(目标) + int SleepModel::get_sleep_goal() + { + return goal_total_time; + } + // 获取睡眠总时长(实际) + int SleepModel::get_sleep_total() + { + return sleep_total_time; + } + // 获取实际入睡时间str + std::string SleepModel::get_rest_str() + { + return sleepStr; + } + // 获取实际醒来时间str + std::string SleepModel::get_walk_str() + { + return walkStr; + } + // 获取目标休息时间str + std::string SleepModel::get_goal_str() + { + return goalStr; + } + // 获取 目标睡眠提醒 时间点str + std::string SleepModel::get_notifiy() + { + return goalnotifyStr; + } + // 获取 目标睡眠 时间点str + std::string SleepModel::get_sleep_notifiy() + { + return goalsleepStr; + } + + // 获取 目标起床 时间点str + std::string SleepModel::get_walk_notifiy() + { + return goalwalkStr; + } + // 设置睡眠状态 + void SleepModel::set_sleep_state(SLEEPSTATE state) + { + sleepstate_ = state; + } + // 获取睡眠状态 + SLEEPSTATE SleepModel::get_sleep_state() + { + return sleepstate_; + } } \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/sleep/src/SleepTimeView.cpp b/code/sdk/application/wearable/fd230app/nativeui/sleep/src/SleepTimeView.cpp index 7f234e0e1..24765744a 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/sleep/src/SleepTimeView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/sleep/src/SleepTimeView.cpp @@ -29,11 +29,9 @@ namespace OHOS void SleepTimeView::SleepDataRefresh() { -#if 0 - rest->SetText(); - sleep->SetText(); - walk->SetText(); -#endif + sleep->SetText((SleepModel::GetInstance().get_rest_str()).c_str()); + walk->SetText((SleepModel::GetInstance().get_walk_str()).c_str()); + goal->SetText((SleepModel::GetInstance().get_goal_str()).c_str()); } void SleepTimeView::ClearAll() @@ -59,10 +57,10 @@ namespace OHOS delete apptitle; apptitle = nullptr; } - if (rest != nullptr) + if (goal != nullptr) { - delete rest; - rest = nullptr; + delete goal; + goal = nullptr; } if (sleep != nullptr) @@ -141,8 +139,9 @@ namespace OHOS apptitle->SetTextColor(Color::Gray()); /* ------------------------------- 数据label初始化 ------------------------------- */ restStr = "--"; - InitLabelAdapt(rest, 211, 95, 230, 47, "restlabel", restStr.c_str(), DEFAULT_VECTOR_FONT_FILENAME, 30); - rest->SetTextColor(Color::Gray()); + InitLabelAdapt(goal, 117, 95, 300, 50, "restlabel", restStr.c_str(), DEFAULT_VECTOR_FONT_FILENAME, 40); + // goal->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS); + goal->SetTextColor(Color::Gray()); sleepStr = "--"; InitLabelAdapt(sleep, 99, 238, 230, 47, "sleeplabel", sleepStr.c_str(), DEFAULT_VECTOR_FONT_FILENAME, 30); sleep->SetTextColor(Color::Purple()); @@ -154,7 +153,7 @@ namespace OHOS Add(sleeptitle); Add(walktitle); Add(apptitle); - Add(rest); + Add(goal); Add(sleep); Add(walk); Add(transverseline_1); @@ -173,6 +172,7 @@ namespace OHOS } SetDraggable(true); SetTouchable(true); + SleepDataRefresh(); return true; } diff --git a/code/sdk/application/wearable/fd230app/nativeui/sleep/src/SleepView.cpp b/code/sdk/application/wearable/fd230app/nativeui/sleep/src/SleepView.cpp index b959a4441..d0541a906 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/sleep/src/SleepView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/sleep/src/SleepView.cpp @@ -26,16 +26,23 @@ namespace OHOS g_pSleepView = nullptr; } + // 刷新UI数据 void SleepView::SleepDataRefresh() { -#if 0 - time_minute->SetText(SleepModel::GetInstance().getstepnew()); - time_hour->SetText(SleepModel::GetInstance().getstepSleep()); - circleProgress_->SetValue(SleepModel::GetInstance().getstepvalue()); -#endif - Invalidate(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Updata SleppTime!"); - RootView::GetInstance()->Invalidate(); + int sleep_hour = SleepModel::GetInstance().get_sleep_hour(); + int sleep_min = SleepModel::GetInstance().get_sleep_min(); + // 有数据则刷新 + if (sleep_hour != 0 || sleep_min != 0) + { + time_hour->SetText(std::to_string(sleep_hour).c_str()); + time_minute->SetText(std::to_string(sleep_min).c_str()); + + int value = (float(SleepModel::GetInstance().get_sleep_total()) / float(SleepModel::GetInstance().get_sleep_goal())) * 100; + circleProgress_->SetValue(value); + Invalidate(); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Updata SleppTime!"); + RootView::GetInstance()->Invalidate(); + } } void SleepView::ClearAll() @@ -145,7 +152,7 @@ namespace OHOS circleProgress_->SetRadius(205); circleProgress_->SetStartAngle(320); circleProgress_->SetEndAngle(40); - circleProgress_->SetValue(50); + circleProgress_->SetValue(0); circleProgress_->SetBackgroundImagePosition(36, 26); /* -------------------------------- 将组件添加到根视图 ------------------------------- */ Add(progress_image); @@ -171,6 +178,7 @@ namespace OHOS WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SleepView::InitPage fail"); return false; } + SleepDataRefresh(); // 刷新数据 SetDraggable(true); SetTouchable(true); return true; diff --git a/code/sdk/application/wearable/fd230app/nativeui/system/include/SystemPresenterC.h b/code/sdk/application/wearable/fd230app/nativeui/system/include/SystemPresenterC.h new file mode 100644 index 000000000..d48a446f0 --- /dev/null +++ b/code/sdk/application/wearable/fd230app/nativeui/system/include/SystemPresenterC.h @@ -0,0 +1,27 @@ +/* + * @Author: penglei 1624952103@qq.com + * @Date: 2024-06-07 11:18:25 + * @LastEditors: penglei 1624952103@qq.com + * @LastEditTime: 2024-07-02 11:07:00 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/system/include/SystemPresenterC.h + * @Description: + * + * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. + */ +#ifndef SYSTEM_PRESENTER_H +#define SYSTEM_PRESENTER_H + +#ifdef __cplusplus +#if __cplusplus +extern "C" +{ +#endif +#endif + void factorytest_enter_test_view(int cmd); + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif +#endif diff --git a/code/sdk/application/wearable/fd230app/nativeui/system/src/SystemPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/system/src/SystemPresenter.cpp index 88991f015..f79265764 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/system/src/SystemPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/system/src/SystemPresenter.cpp @@ -225,4 +225,25 @@ namespace OHOS // { // isSystemUpgradeState = falg; // } +#ifdef __cplusplus +#if __cplusplus +extern "C" +{ +#endif /* __cplusplus */ +#endif /* __cplusplus */ + + void factorytest_enter_test_view(int cmd) + { + if(cmd == 1) + NativeAbility::GetInstance().ChangeSlice(VIEW_TEST); + else + NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN); + } + + +#ifdef __cplusplus +#if __cplusplus +} +#endif /* __cplusplus */ +#endif /* __cplusplus */ } \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEnddataPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEnddataPresenter.h index 2a0257af8..197d95d94 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEnddataPresenter.h +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEnddataPresenter.h @@ -1,4 +1,9 @@ - +/*** + * @Date: 2024-04-15 10:55:58 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-06-29 17:46:18 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEnddataPresenter.h + */ #ifndef _TraingEnddata_PRESENTER_H #define _TraingEnddata_PRESENTER_H @@ -11,8 +16,9 @@ namespace OHOS class TraingEnddataView; class TraingEnddataPresenter : public Presenter, - public UIView::OnClickListener, - public UIView::OnDragListener + public UIView::OnClickListener, + public RootView::OnKeyActListener, + public UIView::OnDragListener { public: TraingEnddataPresenter(); @@ -28,7 +34,8 @@ namespace OHOS // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承; bool OnClick(UIView &view, const ClickEvent &event) override; bool OnDrag(UIView &view, const DragEvent &event) override; - //bool OnDragEnd(UIView& view, const DragEvent& event) override; + bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件 + // bool OnDragEnd(UIView& view, const DragEvent& event) override; }; } // namespace OHOS diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingNomalPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingNomalPresenter.h index d2e6356b1..cb7e898a1 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingNomalPresenter.h +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingNomalPresenter.h @@ -1,4 +1,4 @@ -/*** +/*** * @Date: 2024-04-15 10:55:58 * @LastEditors: Caisking 3449750381@qq.com * @LastEditTime: 2024-04-17 14:18:05 @@ -17,6 +17,7 @@ namespace OHOS class TraingNomalPresenter : public Presenter, public UIView::OnClickListener, + public RootView::OnKeyActListener, public UIView::OnDragListener { public: @@ -34,6 +35,7 @@ namespace OHOS // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承; bool OnClick(UIView &view, const ClickEvent &event) override; bool OnDrag(UIView &view, const DragEvent &event) override; + bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件 // bool OnDragEnd(UIView& view, const DragEvent& event) override; }; } // namespace OHOS diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingPresenter.h index 7bf2b69c0..50dc63765 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingPresenter.h +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingPresenter.h @@ -1,3 +1,9 @@ +/*** + * @Date: 2024-04-15 10:55:58 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-06-29 17:42:47 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingPresenter.h + */ #ifndef _Traing_PRESENTER_H #define _Traing_PRESENTER_H @@ -11,7 +17,8 @@ namespace OHOS class TraingPresenter : public Presenter, public UIView::OnClickListener, - public UIView::OnDragListener + public UIView::OnDragListener, + public RootView::OnKeyActListener { public: TraingPresenter(); @@ -29,6 +36,7 @@ namespace OHOS bool OnClick(UIView &view, const ClickEvent &event) override; bool OnDrag(UIView &view, const DragEvent &event) override; bool OnDragEnd(UIView &view, const DragEvent &event) override; + bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件 }; } // namespace OHOS diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetPresenter.h index 114d088b1..9d43f684d 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetPresenter.h +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetPresenter.h @@ -25,6 +25,7 @@ namespace OHOS class TraingSetView; class TraingSetPresenter : public Presenter, public UIView::OnClickListener, + public RootView::OnKeyActListener, public UIView::OnDragListener { public: @@ -37,7 +38,7 @@ namespace OHOS void OnStop() override; static TraingSetPresenter *GetInstance(); - + const char *GetButtonIdFromCard(int cardID); int GetTagFromCard(int cardID); ExerciseTag GetExerciseTagFromCard(int cardID); @@ -47,6 +48,7 @@ namespace OHOS bool OnClick(UIView &view, const ClickEvent &event) override; bool OnDrag(UIView &view, const DragEvent &event) override; bool OnDragEnd(UIView &view, const DragEvent &event) override; + bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件 }; } // namespace OHOS diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataPresenter.cpp index 6d2b73031..b6c37c085 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataPresenter.cpp @@ -20,6 +20,9 @@ #include "components/ui_label_ext.h" #include "language/font/ui_resource_string.h" #include "NativeAbility.h" +#include "KeyInputListener.h" +#include "custom_utils.h" +#include "common/key_code.h" #include #include @@ -94,4 +97,16 @@ namespace OHOS } return true; } + bool TraingEnddataPresenter::OnKeyAct(UIView &view, const KeyEvent &event) + { + unsigned short keyID = event.GetKeyId(); + unsigned short keyState = event.GetState(); + // 如果是power键,且是亮屏状态,按键释放就返回上一级 + if (keyID == static_cast(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 0 && uapi_get_screen_state() == 0) + { + // 回退 + NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST, TransitionType::TRANSITION_ZOOM); + } + return true; + } } diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataView.cpp index 932b8838f..ee598e08f 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataView.cpp @@ -277,7 +277,7 @@ namespace OHOS delete scrollView_; scrollView_ = nullptr; } - + delete container_; container_ = nullptr; } @@ -383,6 +383,10 @@ namespace OHOS PreLoad(); InitData(); RootView::GetInstance()->Add(container_); + + // 增加按键监听 + RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::TraingEnddataPresenter::GetInstance(); + RootView::GetInstance()->SetOnKeyActListener(keyactListener); } void TraingEnddataView::OnSetUpView() diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingNomalPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingNomalPresenter.cpp index 978d9ef7b..342df0129 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingNomalPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingNomalPresenter.cpp @@ -4,6 +4,10 @@ #include "components/ui_label_ext.h" #include "language/font/ui_resource_string.h" #include "NativeAbility.h" +#include "KeyInputListener.h" +#include "custom_utils.h" +#include "common/key_code.h" + #include #include @@ -89,4 +93,16 @@ namespace OHOS } return true; } + bool TraingNomalPresenter::OnKeyAct(UIView &view, const KeyEvent &event) + { + unsigned short keyID = event.GetKeyId(); + unsigned short keyState = event.GetState(); + // 如果是power键,且是亮屏状态,按键释放就返回上一级 + if (keyID == static_cast(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 0 && uapi_get_screen_state() == 0) + { + // 回退 + NativeAbility::GetInstance().Back(); + } + return true; + } } diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingNomalView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingNomalView.cpp index 2adc8a910..3ee8f3b3c 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingNomalView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingNomalView.cpp @@ -122,6 +122,10 @@ namespace OHOS PreLoad(); RootView::GetInstance()->Add(container_); + + // 增加按键监听 + RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::TraingNomalPresenter::GetInstance(); + RootView::GetInstance()->SetOnKeyActListener(keyactListener); } void TraingNomalView::OnSetUpView() diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingPresenter.cpp index 70a09ba3d..9e7155735 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingPresenter.cpp @@ -9,6 +9,9 @@ #include "components/ui_label_ext.h" #include "language/font/ui_resource_string.h" #include "NativeAbility.h" +#include "KeyInputListener.h" +#include "custom_utils.h" +#include "common/key_code.h" #include #include @@ -98,4 +101,18 @@ namespace OHOS TraingModel::GetInstance()->SetSportType(Exercisetype::FITNESS); return true; } + + // 增加按键事件 + bool TraingPresenter::OnKeyAct(UIView &view, const KeyEvent &event) + { + unsigned short keyID = event.GetKeyId(); + unsigned short keyState = event.GetState(); + // 如果是power键,且是亮屏状态,按键释放就返回上一级 + if (keyID == static_cast(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 0 && uapi_get_screen_state() == 0) + { + // 回退 + NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST, TransitionType::TRANSITION_ZOOM); + } + return true; + } } diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetPresenter.cpp index 054c1048f..b47137d1d 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetPresenter.cpp @@ -8,6 +8,9 @@ #include "components/ui_label_ext.h" #include "language/font/ui_resource_string.h" #include "NativeAbility.h" +#include "KeyInputListener.h" +#include "custom_utils.h" +#include "common/key_code.h" #include #include @@ -71,7 +74,27 @@ namespace OHOS { return true; } - + // 增加按键事件 + bool TraingSetPresenter::OnKeyAct(UIView &view, const KeyEvent &event) + { + int CardID = TraingSetView::GetInstance()->GetCurrentViewId(); + unsigned short keyID = event.GetKeyId(); + unsigned short keyState = event.GetState(); + // 如果是power键,且是亮屏状态,按键释放就返回上一级 + if (keyID == static_cast(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 0 && uapi_get_screen_state() == 0) + { + // 不在设置页面 + if (CardID != SET_VIEW) + { + TraingSetView::GetInstance()->ChangeView(CardID, SET_VIEW); + } + else + { + NativeAbility::GetInstance().Back(); + } + } + return true; + } bool TraingSetPresenter::OnDragEnd(UIView &view, const DragEvent &event) { int CardID = TraingSetView::GetInstance()->GetCurrentViewId(); diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingView.cpp index 00f35bffe..9f6440d2c 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingView.cpp @@ -70,7 +70,7 @@ namespace OHOS bool TraingView::AddLabel() { // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingModel::AddLabel"); - // 初始化标签 + // 初始化标签 InitLabelExt(title_label, TITLE_LABEL_X, TITLE_LABEL_Y, LABEL_X_SIZE, LABEL_Y_SIZE, "title_label", STR_RAPID_TRAINING, DEFAULT_VECTOR_FONT_FILENAME, LABEL_FONT_SIZE); InitLabelExt(btn1_label, BTN1_LABEL_X, BTN1_LABEL_Y, LABEL_X_SIZE, LABEL_Y_SIZE, "btu1_label", STR_EXERCISE_OUTDOORWALKING, DEFAULT_VECTOR_FONT_FILENAME, LABEL_FONT_SIZE); @@ -261,7 +261,6 @@ namespace OHOS return; } container_->SetOnDragListener(draglistener); - container_->SetTouchable(true); container_->SetDraggable(true); @@ -269,6 +268,9 @@ namespace OHOS RootView::GetInstance()->Add(container_); SetContainerView(container_); + // 增加按键监听 + RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::TraingPresenter::GetInstance(); + RootView::GetInstance()->SetOnKeyActListener(keyactListener); } void TraingView::OnSetUpView() diff --git a/code/sdk/application/wearable/service/ble_service/blemoder/CMakeLists.txt b/code/sdk/application/wearable/service/ble_service/blemoder/CMakeLists.txt index 8636427bb..2f92ec084 100644 --- a/code/sdk/application/wearable/service/ble_service/blemoder/CMakeLists.txt +++ b/code/sdk/application/wearable/service/ble_service/blemoder/CMakeLists.txt @@ -14,6 +14,7 @@ ${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/kits ${ROOT_DIR}/application/wearable/nativeapp/nativeui/heartrate/include ${ROOT_DIR}/application/wearable/fd230app/nativeui/weather/include ${ROOT_DIR}/application/wearable/fd230app/nativeui/heart_blood/health_service +${ROOT_DIR}/application/wearable/fd230app/nativeui/sleep/include/ ${ROOT_DIR}/application/wearable/fd230app/nativeui/phone/include ${ROOT_DIR}/application/wearable/fd230app/nativeui/language/include ${ROOT_DIR}/application/wearable/fd230app/nativeui/language @@ -33,7 +34,9 @@ ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/src/utils/innerkits ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/include ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/include/common ${ROOT_DIR}/application/wearable/fd230app/nativeui/set_dial/include -#/home/hcj/FD230/code/sdk/middleware/services/gui/uikit/proprietary/include/common/image_cache_manager.h +${ROOT_DIR}/application/wearable/fd230app/nativeui/aivoice/include + + ) diff --git a/code/sdk/application/wearable/service/ble_service/blemoder/bletest.cpp b/code/sdk/application/wearable/service/ble_service/blemoder/bletest.cpp index b98539d94..c3842503d 100644 --- a/code/sdk/application/wearable/service/ble_service/blemoder/bletest.cpp +++ b/code/sdk/application/wearable/service/ble_service/blemoder/bletest.cpp @@ -28,13 +28,16 @@ #include "uiservice/include/ui_service.h" #include "TraingModel.h" #include "WeatherModel.h" +#include "SleepModel.h" #endif #include "AlmmgrAlarmClockManage.h" +#include "AlarmClockTimerConfig.h" #include "AlarmClockManage.h" #include "SetDialModel.h" +#include "AiVoiceModel.h" #include "SleepModel.h" //#include "AlarmClockModel.h" #ifdef __cplusplus @@ -70,6 +73,171 @@ extern "C" { #include +void ble_set_ai_Question_str(char *buf) +{ + OHOS::AiVoiceModel::GetInstance().SetUserQuestionStr(std::string(buf)); +} + +void ble_set_ai_Answer_str(char *buf) +{ + OHOS::AiVoiceModel::GetInstance().SetaiAnswerStrStr(std::string(buf)); +} + +// { +// "type":3, +// "list":[ +// { +// "uid":3758, +// "name":"plate_3758.bin", +// "size":129600 +// }, +// { +// "uid":3759, +// "name":"plate_3759.bin", +// "size":129600 +// } +// ] +// } +// 注:MP3文件目录格式 +// { +// "type":2, +// "list": [ +// { +// "uid":2461, //指定唯一编号,便于APP发送编号删除文件 +// "name":"夜曲.mp3", +// "size":3894464, +// "artist":"周杰伦", +// "dur":223000 //歌曲时长,单位毫秒 +// }, +// { +// "uid":2465, //指定唯一编号,便于APP发送编号删除文件 +// "name":"告白气球.mp3", +// "size":3894464, +// "artist":"周杰伦", +// "dur":223000 //歌曲时长,单位毫秒 +// } +// ] +// } +// Tag_Trailer_t Mp3Trailer; + +// void Tag_GetTrailer( FILE *fp) +// { +// // Get Header +// fseek(fp,-128,SEEK_END); +// fread(Mp3Trailer.Header,3,1,fp); +// // Get Title +// fseek(fp,-125,SEEK_END); +// fread(Mp3Trailer.Title,30,1,fp); +// // Get Artist +// fseek(fp,-95,SEEK_END); +// fread(Mp3Trailer.Artist,30,1,fp); +// // Get Album +// fseek(fp,-65,SEEK_END); +// fread(Mp3Trailer.Album,30,1,fp); +// // Get Year +// fseek(fp,-35,SEEK_END); +// fread(Mp3Trailer.Year,4,1,fp); +// // Get Comment +// fseek(fp,-31,SEEK_END); +// fread(Mp3Trailer.Comment,30,1,fp); +// // Get Cenre +// fseek(fp,-1,SEEK_END); +// fread(Mp3Trailer.Cenre,1,1,fp); +// } + + + +char * dir_to_json_buf_malloc_(uint8_t type) +{ + char dir_path[128]={0}; + type=2; + switch (type) + { + case 2: // + sprintf_s(dir_path,64,"%s","user/music"); + break; + case 3: // + sprintf_s(dir_path,64,"%s","user/userdata/dial"); + break; + default: + break; + } + cJSON *dataJSON = cJSON_CreateObject(); + cJSON* data_arryJSON = cJSON_CreateArray(); + + struct DIR *dir; + struct dirent *ent; + uint32_t file_size=0; + uint8_t file_index=1; + if ((dir = opendir(dir_path)) != NULL) + { + while ((ent = readdir(dir)) != NULL) + { + std::string fileName = ent->d_name; + + if (fileName != "." && fileName != "..") + { + //std::string filePath = directory + fileName; + + + if (ent->d_type == DT_REG || ent->d_type == DT_UNKNOWN ) // 普通文件 + { + char file_path[128]={0}; + sprintf_s(file_path,128,"%s/%s","user/music",ent->d_name); + + FILE * fp = fopen(file_path,"rb+"); + if(fp==NULL) + { + printf(" fopen fail %s\r\n",file_path); + return NULL; + } + if (fp != NULL) + { + fseek(fp, 0, SEEK_END); // 将文件指针移动到文件末尾 + file_size = ftell(fp); // 获取当前文件指针位置,即文件大小 + fseek(fp, 0, SEEK_SET); // 将文件指针移回文件开头 + } + //Tag_GetTrailer(fp); + + fclose(fp); + + cJSON* itemJSON = cJSON_CreateObject(); + cJSON_AddNumberToObject(itemJSON,"uid",file_index); + cJSON_AddStringToObject(itemJSON,"name",fileName.c_str()); + cJSON_AddNumberToObject(itemJSON,"size",file_size); + cJSON_AddStringToObject(itemJSON,"artist", "未知"); + cJSON_AddStringToObject(itemJSON,"dur", "未知"); + cJSON_AddItemReferenceToArray(data_arryJSON,itemJSON); + file_index++; + + } + else if (ent->d_type == DT_DIR) // 目录 + { + continue; + } + } + } + closedir(dir); + } + else + { + printf("opendir fail\r\n"); + } + cJSON_AddNumberToObject(dataJSON,"type",2); + + cJSON_AddItemToObject(dataJSON,"list",data_arryJSON); + + char *json_format = cJSON_PrintUnformatted(dataJSON); + + int pSize = cJSON_GetArraySize(dataJSON); + cJSON_Delete(dataJSON); + printf("mp3 :%s\r\n",json_format); + return json_format; +} + + + + uint8_t ble_AT_add_nap_data(uint16_t time) { OHOS::NAP_T data; @@ -418,6 +586,11 @@ void ble_set_sleep_remind(msg_get_sleep_param_info_t data) printf("睡前提醒 %d\r\n",data.bedtime_alarm); p_ConfigModel->set_condigData_Int(OHOS::ConfigModel::CONFIGMODEL_ITEM_SLEEP_REMIND,data.bedtime_alarm); + + //更新睡眠配置 + OHOS::SleepModel::GetInstance().set_sleep_goal(); + set_sleep_and_wake_time(); + get_sleep_time_notify(); } return; } @@ -437,8 +610,8 @@ void ble_get_sleep_remind(msg_get_sleep_param_info_t *data) printf("开始时间:%d\r\n",data->bedtime_min); uint32_t wakettime= p_ConfigModel->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_SLEEP_GET_UP); - data->waketime_hour=bedtime>>16; - data->waketime_min=bedtime&0x00ff; + data->waketime_hour=wakettime>>16; + data->waketime_min=wakettime&0x00ff; printf("结束时间:%d\r\n",data->waketime_hour); printf("结束时间:%d\r\n",data->waketime_min); @@ -658,6 +831,13 @@ char * struct_to_json_buf_malloc_(uint8_t day) cJSON_AddNumberToObject(itemJSON,"di",data->di); cJSON_AddNumberToObject(itemJSON,"hr",data->hr); cJSON_AddNumberToObject(itemJSON,"stp",data->stp); + cJSON_AddNumberToObject(itemJSON,"ti",data->ti); + cJSON_AddNumberToObject(itemJSON,"cir",data->cir); + cJSON_AddNumberToObject(itemJSON,"alt",data->alt); + cJSON_AddNumberToObject(itemJSON,"fpc",data->fpc); + cJSON_AddNumberToObject(itemJSON,"spc",data->spc); + cJSON_AddNumberToObject(itemJSON,"std",data->std); + cJSON_AddNumberToObject(itemJSON,"cdc",data->cdc); cJSON_AddItemReferenceToArray(data_arryJSON,itemJSON); free(data); diff --git a/code/sdk/application/wearable/service/ble_service/blemoder/bletest.h b/code/sdk/application/wearable/service/ble_service/blemoder/bletest.h index b87b1dedc..e8ca3112a 100644 --- a/code/sdk/application/wearable/service/ble_service/blemoder/bletest.h +++ b/code/sdk/application/wearable/service/ble_service/blemoder/bletest.h @@ -256,6 +256,28 @@ uint8_t ble_get_sleep_data(uint32_t file_size,uint8_t day_,uint8_t *data); uint8_t ble_AT_add_nap_data(uint16_t time); +/////////////////////////////AI相关///////////////////////// +void ble_set_ai_Question_str(char *buf); + +void ble_set_ai_Answer_str(char *buf); + +/////////////////////////////MP3相关///////////////////////// + +typedef struct Tag_Trailer +{ +char Header[3]; +char Title[30]; +char Artist[30]; +char Album[30]; +char Year[4]; +char Comment[30]; +char Cenre[1]; +}Tag_Trailer_t; + +char * dir_to_json_buf_malloc_(uint8_t type); + +char * dir_to_json_buf_malloc_(uint8_t type); + #ifdef __cplusplus #if __cplusplus } diff --git a/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c b/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c index ff7c50de0..413982566 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c @@ -2078,13 +2078,13 @@ uint8_t binCheck_AI(uint8_t *buf,uint8_t *check,uint16_t len)//json 格式解析 uint8_t flag = 0; // printf("jsonCheck_weather:len: json:%f jsonlen:%d\r\n",0.011,strlen((char *)json)); #if 0 - FILE *fp=fopen("user/weather.json","wb+"); - printf("jsonCheck_weather len %d",strlen((char *)buf)+1); - //fwrite((void*)buf,1,strlen((char *)buf)+1,fp); - fputs((char *)buf,fp); + FILE *fp=fopen("user/AI.txt","wb+"); + printf("binCheck_AI len %d\r\n",len); + fwrite((void*)buf,1,len,fp); + //fputs((char *)buf,fp); fclose(fp); - 1+1+2 #endif + uint16_t offset=0; while (len>offset) @@ -2092,22 +2092,27 @@ uint8_t binCheck_AI(uint8_t *buf,uint8_t *check,uint16_t len)//json 格式解析 if(buf[offset]==1) { offset++; - uint16_t txt_len=buf[offset]; - offset++; - char buf[128]={0}; - memcpy_s(buf,128,buf[offset],txt_len); - printf("%s\r\n",buf); + uint16_t txt_len; + memcpy_s(&txt_len,2,&buf[offset],2); + + offset+=2; + char txt_buf[128]={0}; + memcpy_s(txt_buf,128,&buf[offset],txt_len); + printf("binCheck_AI txtbuf:%s %d\r\n",txt_buf,txt_len); + ble_set_ai_Question_str(txt_buf); offset+=txt_len; offset+=1; } else if(buf[offset]==2) { offset++; - uint16_t txt_len=buf[offset]; - offset++; - char buf[128]={0}; - memcpy_s(buf,128,buf[offset],txt_len); - printf("%s\r\n",buf); + uint16_t txt_len=buf[offset]+buf[offset+1]*256; + offset+=2; + + char txt_buf[128]={0}; + memcpy_s(txt_buf,128,&buf[offset],txt_len); + printf("%s %d\r\n",txt_buf,txt_len); + ble_set_ai_Answer_str(txt_buf); offset+=txt_len; offset+=1; } @@ -2138,6 +2143,9 @@ void GetWeatherCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,ui // printf("GetWeatherCmd:len:%d data:%s\r\n",len,data); if(Check_CRC(data,len,crcvalue)) { + // uint32_t y=(0xff00); + // uint32_t x =(0xff00& 0Xff00)>>16; + // printf("GetWeatherCmd %u\r\n",x); uint8_t check = 1; jsonCheck_weather(data,&check); sendBuf[17] = check; @@ -2153,7 +2161,7 @@ void GetWeatherCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,ui } -void GetAiResultCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取天气数据 +void GetAiResultCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue) { uint32_t tmp = 1; uint16_t tmp_data = 1; @@ -2161,7 +2169,7 @@ void GetAiResultCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,u memset(sendBuf,0,19); sendBuf[0] = 0x72; sendBuf[1] = 0x02; - sendBuf[2] = 0x20; + sendBuf[2] = 0x1f; memcpy(sendBuf+3,&tmp,4); memcpy(sendBuf+7,&tmp,4); memcpy(sendBuf+11,&tmp,4); @@ -2390,9 +2398,8 @@ void getAPPaddressbook(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalDat void type2AE4Data(ble_read_data *buffer_handle,uint8_t *buf_cmd,uint8_t *data,uint16_t datalen,uint8_t *totalData,uint8_t crcvalue) { uint16_t typeID = buf_cmd[1]*256+buf_cmd[2]; - #ifdef BLE_LOG + printf("type2AE4Data typeID:0x%04X\r\n",typeID); - #endif switch (typeID) //ID { case USER_INFOR_CMD://app下发的获取用户信息 @@ -3993,13 +4000,14 @@ static void GetAiRecordCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *tota FILE *fp=fopen(file_name,"rb+"); printf("GetAiRecordCmd size %d\r\n",file_size); - uint16_t pack=file_size/num+1; - uint8_t pack_id=1; + uint32_t pack=file_size/num+1; + uint32_t pack_id=1; if(fp==NULL) { printf("fopen fail %s\r\n",file_name); goto GetAiRecordFail; } + do { memset_s(data,num+1,0,num+1); @@ -4007,7 +4015,7 @@ static void GetAiRecordCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *tota send_big_data(1,data,read_size,file_size,pack_id,pack,0x34,1); pack_id++; - msleep(50); + msleep(10); } while (read_size==num); free(data); @@ -4234,7 +4242,7 @@ static void Send_json_Data_Cmd(uint8_t day,uint16_t pack_size,uint8_t id) json_format=struct_to_json_buf_malloc_Alarm(); break; case 0x21: - json_format=NULL; + json_format=dir_to_json_buf_malloc_(day); break; default: @@ -4561,9 +4569,6 @@ void type2AE3Data(ble_read_data *buffer_handle,uint8_t *cmd_buf ,uint8_t *data,u case REVOKE_CURR_FILE_TRANS_CMD://撤销文件传输 RemoveFileCmd(buffer_handle,cmd,data,datalen,totaldata,crcvalue); break; - case GET_SPECIF_TYPE_FILE_CMD://获取指定类型文件目录 - GetFileTypeCmd(data,datalen); // - break; case DELETE_SPECIF_TYPE_FILE_CMD://删除指定类型的所有文件 DeleteFileTypeCmd(cmd,data,datalen,totaldata,crcvalue); break; @@ -4658,10 +4663,11 @@ void type2AE3Data(ble_read_data *buffer_handle,uint8_t *cmd_buf ,uint8_t *data,u case GET_PASSWORD_CMD: //获取手表密码 GetPasswordCmd(cmd,data,datalen,totaldata,crcvalue); break; - case AI_IS_READ_DATA_CMD: + case APP_GET_AI_PCM_DATA_CMD: GetAiRecordCmd(cmd,data,datalen,totaldata,crcvalue); break; - case APP_GET_AI_PCM_DATA_CMD://获取手表闹钟//同步闹钟 + case GET_SPECIF_TYPE_FILE_CMD://获取指定类型文件目录 + case AI_IS_READ_DATA_CMD: case SYN_HEART_HISTORY_DATA_CMD://同步心率历史数据 //heartDataCmd(cmd,data,datalen,totaldata,crcvalue); case SYN_SPO2_HISTORY_DATA_CMD://同步血氧历史数据 @@ -4829,12 +4835,12 @@ bool Read_Health_BIN_file_buf_send_bin_Data(uint8_t day, uint16_t num,uint16_t i buf = (char *)ym_malloc(sizeof(char)*num+1); if(buf==NULL)return false; - uint16_t pack=1; + uint32_t pack=1; if(file_size%num==0) pack=data_len/num; else pack=data_len/num+1; - uint8_t pack_id=1; + uint32_t pack_id=1; uint32_t read_size=0; do { @@ -5837,8 +5843,8 @@ bool Read_tar_file_buf_send_Data(uint16_t pack_size,uint8_t id) printf("Read_tar_file_buf_send_Data size %d\r\n",file_size); - uint16_t pack=file_size/pack_size+1; - uint8_t pack_id=1; + uint32_t pack=file_size/pack_size+1; + uint32_t pack_id=1; if(fp==NULL) { printf("fopen fail %s\r\n",file_name); diff --git a/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c b/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c index 402d075cb..25ed5dd10 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c @@ -38,7 +38,7 @@ extern "C" { #include "build_version.h" #include "custom_runtime.h" #include "custom_utils.h" - +#include "bletest.h" // extern void bts_data_to_uuid_len2(uint16_t uuid_data, bt_uuid_t *out_uuid); @@ -108,6 +108,7 @@ uint16_t ble_nus_max_data_len = SDK_BLE_MTU_MIN - 3; uint16_t data2ae3Cmd = 0;//2ae3短指令特征值 uint16_t data2ae4Cmd = 0; uint16_t data2ae5Cmd = 0; +uint16_t data2ae2Cmd = 0;//read uint16_t data2ae1Cmd = 0;//安卓消息来电 uint16_t data2ae0Cmd = 0;//OTA @@ -122,7 +123,7 @@ enum{ BLE_CHARACTERISTIC_SNED_LONG_ID_PROPERTIES = GATT_CHARACTER_PROPERTY_BIT_WRITE|GATT_CHARACTER_PROPERTY_BIT_WRITE_NO_RSP, BLE_CHARACTERISTIC_SNED_OTA_ID_PROPERTIES = GATT_CHARACTER_PROPERTY_BIT_WRITE|GATT_CHARACTER_PROPERTY_BIT_WRITE_NO_RSP, BLE_CHARACTERISTIC_SNED_ANDRIOD_ID_PROPERTIES = GATT_CHARACTER_PROPERTY_BIT_WRITE|GATT_CHARACTER_PROPERTY_BIT_WRITE_NO_RSP, - BLE_CHARACTERISTIC_READ_BATTERY_ID_PROPERTIES = GATT_CHARACTER_PROPERTY_BIT_READ, + BLE_CHARACTERISTIC_READ_BATTERY_ID_PROPERTIES = GATT_CHARACTER_PROPERTY_BIT_READ|GATT_CHARACTER_PROPERTY_BIT_NOTIFY, }; static uint8_t ble_adv_falg = 0; void svr_ble_adv_stop(void) @@ -876,6 +877,9 @@ static void svr_ble_bt_gatts_characteristic_add_cb(uint8_t server_id, bt_uuid_t { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "2ae2 result->value_handle6 %d\r\n",result->value_handle); // shortCmdChara = result->value_handle; + if(data2ae2Cmd == 0){ + data2ae2Cmd = result->value_handle; + } } if(ble_gatts_cmp_uuid(uuid, &chara_uuid_data_2ae4)) { @@ -984,13 +988,111 @@ errcode_t svr_ble_bt_gatts_noyify(uint8_t *data, uint16_t data_len)//这里是 WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "gatts_notify_indicate ret:0x%x. serverid:%u,conn_id:%u,handle:%u.data_len:%d", ret, g_ble_server_id, g_ble_conn_id, g_ble_server_handle,data_len); - return ret; + return ret; +} + +errcode_t svr_ble_read_data_value_updata_noyify(void)//2ae2 +{ + gatts_ntf_ind_t data_info; + data_info.attr_handle = data2ae2Cmd; + static uint8_t battery_point_val[20] = {0}; + // 获取电池电压值 + float voltage = 0.0F; + uint8_t power = 0; + power =battery_get_voltage(&voltage); + battery_point_val[0] +=1;//power ;//power;//电量90 + uint16_t dial = ble_get_dial_id(); + memcpy_s(&battery_point_val[1],2,&dial,2); + + uint8_t _major,_mid,_minor; + uapi_get_fw_version(&_major,&_mid,&_minor); + + battery_point_val[3] = _major;//固件版本号 + battery_point_val[4] = _mid; + battery_point_val[5] = _minor; + + bd_addr_t addr_info; + errcode_t ret = gap_ble_get_local_addr(&addr_info); + battery_point_val[6] = addr_info.addr[5]; + battery_point_val[7] = addr_info.addr[4]; + battery_point_val[8] = addr_info.addr[3]; + battery_point_val[9] = addr_info.addr[2]; + battery_point_val[10] = addr_info.addr[1]; + battery_point_val[11] = addr_info.addr[0]; + + battery_point_val[12] = 0;//消息推送开关 默认是关闭 0 + battery_point_val[13] = 0;//多媒体开关 + battery_point_val[14] = 5;//客户编号 + battery_point_val[15] = 5;//产品编号 + + battery_point_val[16] = 0;//硬件版本号 + battery_point_val[17] = 1; + + battery_point_val[18] = 0;//ble版本号 + battery_point_val[19] = 1; + + + data_info.value = battery_point_val; + data_info.value_len = 20; + ret = gatts_notify_indicate(g_ble_server_id, g_ble_conn_id, &data_info); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "gatts_notify_indicate ret:0x%x. serverid:%u,conn_id:%u,handle:%u.data_len:%d", ret, g_ble_server_id, + g_ble_conn_id, g_ble_server_handle,20); + return ret; } + + static void svr_ble_bt_gatts_req_read_cb(uint8_t server_id, uint16_t conn_id, gatts_req_read_cb_t *read_cb_para, errcode_t status) { WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "svr_ble_bt_gatts_req_read_cb ret:is_long:%d",read_cb_para->is_long); + + //WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_ble_bt_gatts_req_read_cb ret:is_long:%d 2ae2 %d read_cb_para->handle :%d",read_cb_para->is_long,data2ae2Cmd,read_cb_para->handle); + if(read_cb_para->handle!=data2ae2Cmd) + return; + + static uint8_t battery_point_val[20] = {0}; + // 获取电池电压值 + float voltage = 0.0F; + uint8_t power = 0; + power =battery_get_voltage(&voltage); + battery_point_val[0] =power;//power ;//power;//电量90 + uint16_t dial = ble_get_dial_id(); + memcpy_s(&battery_point_val[1],2,&dial,2); + + uint8_t _major,_mid,_minor; + uapi_get_fw_version(&_major,&_mid,&_minor); + + battery_point_val[3] = _major;//固件版本号 + battery_point_val[4] = _mid; + battery_point_val[5] = _minor; + + bd_addr_t addr_info; + errcode_t ret = gap_ble_get_local_addr(&addr_info); + battery_point_val[6] = addr_info.addr[5]; + battery_point_val[7] = addr_info.addr[4]; + battery_point_val[8] = addr_info.addr[3]; + battery_point_val[9] = addr_info.addr[2]; + battery_point_val[10] = addr_info.addr[1]; + battery_point_val[11] = addr_info.addr[0]; + + battery_point_val[12] = 0;//消息推送开关 默认是关闭 0 + battery_point_val[13] = 0;//多媒体开关 + battery_point_val[14] = 5;//客户编号 + battery_point_val[15] = 5;//产品编号 + + battery_point_val[16] = 0;//硬件版本号 + battery_point_val[17] = 1; + + battery_point_val[18] = 0;//ble版本号 + battery_point_val[19] = 1; + + static gatts_ntf_ind_t gatts_ntf_ind; + gatts_ntf_ind.attr_handle=read_cb_para->handle; + gatts_ntf_ind.value=battery_point_val; + gatts_ntf_ind.value_len=20; + //read_cb_para->need_rsp=0; + gatts_notify_indicate(server_id,conn_id,&gatts_ntf_ind); } diff --git a/code/sdk/application/wearable/service/broadcast/include/broadcast_feature.h b/code/sdk/application/wearable/service/broadcast/include/broadcast_feature.h index 69c556481..9a0fc1015 100644 --- a/code/sdk/application/wearable/service/broadcast/include/broadcast_feature.h +++ b/code/sdk/application/wearable/service/broadcast/include/broadcast_feature.h @@ -90,6 +90,7 @@ typedef enum { TOPIC_EVENT_CANCEL_FIND_WATCH,//取消查找 TOPIC_EVENT_DRINKREMINDER,//喝水提醒 TOPIC_EVENT_MESSAGENOTE, //消息通知 + TOPIC_EVENT_SLEEPNOTE, //睡眠通知 TOPIC_END_NUM = 20000, } TopicNum; diff --git a/code/sdk/application/wearable/service/broadcast/src/broadcast_implement.c b/code/sdk/application/wearable/service/broadcast/src/broadcast_implement.c index 537e7ba72..56f2665c6 100644 --- a/code/sdk/application/wearable/service/broadcast/src/broadcast_implement.c +++ b/code/sdk/application/wearable/service/broadcast/src/broadcast_implement.c @@ -68,6 +68,7 @@ static const TopicToCore topicToCoreArray[] = { {TOPIC_EVENT_CANCEL_FIND_WATCH,A_CORE_MASK, 1}, {TOPIC_EVENT_DRINKREMINDER,A_CORE_MASK, 1}, {TOPIC_EVENT_MESSAGENOTE,A_CORE_MASK, 1}, + {TOPIC_EVENT_SLEEPNOTE,A_CORE_MASK, 1}, #ifdef SUPPORT_CAT1_MODEM {TOPIC_EVENT_CAT1_INCOMMING, A_CORE_MASK, 1}, {TOPIC_EVENT_CAT1_CALLCONNTED, A_CORE_MASK, 1}, diff --git a/code/sdk/application/wearable/service/factorytest_service/factorytest_protocol.c b/code/sdk/application/wearable/service/factorytest_service/factorytest_protocol.c index 206377026..1cd748dfa 100644 --- a/code/sdk/application/wearable/service/factorytest_service/factorytest_protocol.c +++ b/code/sdk/application/wearable/service/factorytest_service/factorytest_protocol.c @@ -2,7 +2,7 @@ * @Author: penglei 1624952103@qq.com * @Date: 2024-06-17 14:31:08 * @LastEditors: penglei 1624952103@qq.com - * @LastEditTime: 2024-06-22 15:27:12 + * @LastEditTime: 2024-07-02 17:31:37 * @FilePath: /FD230/code/sdk/application/wearable/service/factorytest_service/factorytest_protocol.c * @Description: * @@ -934,24 +934,23 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint { //LCD显示颜色 uint8_t send_data = 0x00; - char *color_buf[5] ={"0Xffff0000","0xff00ff00","0xff0000ff","0xffffffff","0xff000000"}; - ScreenAlwaysOnCtr(1); + switch (*data) { case 1: - lcd_fill((uint8_t *)color_buf[0], 11); + uapi_factorytest_set_lcd_color(3); break; case 2: - lcd_fill((uint8_t *)color_buf[1], 11); + uapi_factorytest_set_lcd_color(0); break; case 3: - lcd_fill((uint8_t *)color_buf[2], 11); + uapi_factorytest_set_lcd_color(1); break; case 4: - lcd_fill((uint8_t *)color_buf[3], 11); + uapi_factorytest_set_lcd_color(4); break; case 5: - lcd_fill((uint8_t *)color_buf[4], 11); + uapi_factorytest_set_lcd_color(5); break; default: @@ -975,6 +974,33 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint 0x05, &send_data, 1); + } else if(testitem == 0x06) + { + //进入lcd测试 + uint8_t send_data = 0; + + mcu_pm_lcd_on(0,0); + uapi_factorytest_enter_test_view(1); + uapi_factorytest_enter_test_lcd_view(); + uapi_factorytest_hide_test_lcd_button(); + + factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST, + BLE_TEST_CMD_SOFT_TEST_SUB_MODE_LCD, + 0x06, + &send_data, + 1); + } else if(testitem == 0x07) + { + //退出lcd测试 + uint8_t send_data = 0; + + uapi_factorytest_enter_test_view(0); + + factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST, + BLE_TEST_CMD_SOFT_TEST_SUB_MODE_LCD, + 0x07, + &send_data, + 1); } break; @@ -1013,18 +1039,28 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint } else if(testitem == 0x03) { //触摸测试 - uint8_t send_data = 0x01; - + uint8_t send_data = 0; + mcu_pm_lcd_on(0,0); + uapi_factorytest_enter_test_view(1); + uapi_factorytest_enter_test_tp_view(); + uapi_factorytest_hide_test_tp_button(); factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST, BLE_TEST_CMD_SOFT_TEST_SUB_MODE_TP, 0x03, &send_data, 1); - send_data = 0x00; + + } else if(testitem == 0x04) + { + //退出触摸测试 + uint8_t send_data = 0; + + uapi_factorytest_enter_test_view(0); + factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST, BLE_TEST_CMD_SOFT_TEST_SUB_MODE_TP, - 0x03, + 0x04, &send_data, 1); @@ -1112,15 +1148,15 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint case BLE_TEST_CMD_SOFT_TEST_SUB_MODE_HRS: if(testitem == 0x01) { - //获取 hx3695 chip_id - uint8_t chip_id; - chip_id = hx3695_get_chip_id(); + //获取 ppg_id + uint8_t ppg_id; + uapi_ppg_get_id(&ppg_id); factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST, BLE_TEST_CMD_SOFT_TEST_SUB_MODE_HRS, 0x01, - &chip_id, - sizeof(chip_id)); + &ppg_id, + sizeof(ppg_id)); } else if(testitem == 0x02) { diff --git a/code/sdk/application/wearable/service/msg_center/CMakeLists.txt b/code/sdk/application/wearable/service/msg_center/CMakeLists.txt index de7150f53..08f6efb7c 100644 --- a/code/sdk/application/wearable/service/msg_center/CMakeLists.txt +++ b/code/sdk/application/wearable/service/msg_center/CMakeLists.txt @@ -170,6 +170,7 @@ set(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/notify/sedentaryReminder_notification.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/notify/transmitting.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/notify/message_notification.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/notify/sleep_notification.cpp ) else() set(SOURCES @@ -185,6 +186,7 @@ set(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/notify/sedentaryReminder_notification.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/notify/transmitting.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/notify/message_notification.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/notify/sleep_notification.cpp ) endif() diff --git a/code/sdk/application/wearable/service/msg_center/include/notify/sleep_notification.h b/code/sdk/application/wearable/service/msg_center/include/notify/sleep_notification.h new file mode 100644 index 000000000..0dac41be3 --- /dev/null +++ b/code/sdk/application/wearable/service/msg_center/include/notify/sleep_notification.h @@ -0,0 +1,47 @@ +/*** + * @Date: 2024-07-02 10:15:59 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-07-02 17:27:39 + * @FilePath: /FD230/code/sdk/application/wearable/service/msg_center/include/notify/sleep_notification.h + */ +/*** + * @Date: 2024-07-02 10:15:59 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-07-02 11:27:01 + * @FilePath: /FD230/code/sdk/application/wearable/service/msg_center/include/notify/sleep_notification.h + */ +/*** + * @Date: 2024-06-20 09:43:23 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-06-20 09:47:45 + * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/service/msg_center/include/notify/message_notification.h + */ +#ifndef SLEEP_NOTIFICATION +#define SLEEP_NOTIFICATION + +#include "BaseView.h" +namespace OHOS +{ + UIViewGroup *CreateSleepNotifyView(void); + void FreeSleepView(void); + void SetAlarmClockView(); + + class SleepViewEventListener : public UIView::OnTouchListener, public UIView::OnDragListener + { + public: + static SleepViewEventListener &GetInstance(); + bool OnRelease(UIView &view, const ReleaseEvent &event) override; + bool OnDrag(UIView &view, const DragEvent &event) override; + bool OnDragEnd(UIView &view, const DragEvent &event) override; + + private: + SleepViewEventListener(); + ~SleepViewEventListener(); + SleepViewEventListener(const SleepViewEventListener &) = delete; + const SleepViewEventListener &operator=(const SleepViewEventListener &) = delete; + bool X_DRAG_FLAG{false}; + }; + +} + +#endif \ No newline at end of file diff --git a/code/sdk/application/wearable/service/msg_center/src/msg_center_customer.cpp b/code/sdk/application/wearable/service/msg_center/src/msg_center_customer.cpp index 730004bfb..5d0943264 100644 --- a/code/sdk/application/wearable/service/msg_center/src/msg_center_customer.cpp +++ b/code/sdk/application/wearable/service/msg_center/src/msg_center_customer.cpp @@ -29,7 +29,10 @@ #include "power_display_service.h" #include "cat1_server.h" #include "testchanging.h" + #include "message_notification.h" +#include "sleep_notification.h" + #include "testcat1.h" #include "testold.h" #include "testhrsenson.h" @@ -110,6 +113,7 @@ const PriorityMapper PRI_MAPPER[] = { {TOPIC_EVENT_CANCEL_FIND_WATCH,PRIORITY_TWO}, {TOPIC_EVENT_DRINKREMINDER,PRIORITY_TWO}, {TOPIC_EVENT_MESSAGENOTE,PRIORITY_TWO}, + {TOPIC_EVENT_SLEEPNOTE,PRIORITY_TWO}, }; static bool CheckPriority(const Topic topic) @@ -185,6 +189,7 @@ void MsgCenterSubscribe() MsgCenterSubscribeTopic(TOPIC_EVENT_CANCEL_FIND_WATCH); MsgCenterSubscribeTopic(TOPIC_EVENT_DRINKREMINDER); MsgCenterSubscribeTopic(TOPIC_EVENT_MESSAGENOTE); + MsgCenterSubscribeTopic(TOPIC_EVENT_SLEEPNOTE); } static OHOS::UIViewGroup* ShowAlarmNotify(void) @@ -265,7 +270,11 @@ static OHOS::UIViewGroup* showMessageNotify(void) { return OHOS::CreateMessageView(); } - +/*显示睡眠提醒*/ +static OHOS::UIViewGroup* showSleepNotify(void) +{ + return OHOS::CreateSleepNotifyView(); +} void MsgCenterNotifyAlarmProc(const Topic topic, Request* req) { unused(req); @@ -365,31 +374,43 @@ void MsgCenterNotifyLowPowerAlarmProc(const Topic topic, Request* req) //if(req->data); uint8 *x= (uint8 *)(req->data); const power_display_svr_api_t *display_api = power_display_svr_get_api(); - if (display_api->get_screen_state() != SCREEN_ON) - { - display_api->turn_on_screen(); - } - display_api->set_screen_set_keepon_timeout(1000*5); + if(*x==3) { + if (display_api->get_screen_state() != SCREEN_ON) + { + display_api->turn_on_screen(); + } + display_api->set_screen_set_keepon_timeout(1000*5); //倒计时结束后,直接执行关机动画 low_power_play(); } else if(*x==0) { //提醒低电充电 + if (display_api->get_screen_state() != SCREEN_ON) + { + display_api->turn_on_screen(); + } + display_api->set_screen_set_keepon_timeout(1000*5); + set_lowpower_falg(0); - // if (NotificationManager::GetInstance()->HasNotifyShowing()) - // NotificationManager::GetInstance()->StopNotify(); - NotificationManager::GetInstance()->SetNotifyPriority(PRIORITY_ONE); + NotificationManager::GetInstance()->SetNotifyPriority(PRIORITY_TWO); NotificationManager::GetInstance()->ShowNotify(showlowpowerNotify, (uint16_t)topic, true); } else { //电量过低,直接提醒关机 + if (display_api->get_screen_state() != SCREEN_ON) + { + display_api->turn_on_screen(); + } + display_api->set_screen_set_keepon_timeout(1000*10); + set_lowpower_falg(1); - // if (NotificationManager::GetInstance()->HasNotifyShowing()) - // NotificationManager::GetInstance()->StopNotify(); + if (NotificationManager::GetInstance()->HasNotifyShowing()) + NotificationManager::GetInstance()->StopNotify(); + NotificationManager::GetInstance()->SetNotifyPriority(PRIORITY_ONE); NotificationManager::GetInstance()->ShowNotify(showlowpowerNotify, (uint16_t)topic, true); @@ -652,6 +673,22 @@ void MsgCenterNotifyMessageProc(const Topic topic, Request* req) NotificationManager::GetInstance()->ShowNotify(showMessageNotify, (uint16_t)topic, true); } +//睡眠提醒通知 +void MsgCenterNotifySleepProc(const Topic topic, Request* req) +{ + unused(topic); + unused(req); + WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "MsgCenterNotifySleepProc !"); + //亮屏显示新信息弹窗 + const power_display_svr_api_t *display_api = power_display_svr_get_api(); + if (display_api->get_screen_state() != SCREEN_ON) + { + display_api->turn_on_screen(); + } + display_api->set_screen_set_keepon_timeout(1000*5); + NotificationManager::GetInstance()->SetNotifyPriority(PRIORITY_TWO); + NotificationManager::GetInstance()->ShowNotify(showSleepNotify, (uint16_t)topic, true); +} #endif #ifdef SUPPORT_CAT1_MODEM @@ -1232,6 +1269,7 @@ static MsgCenterNotifyTable g_msgCenterNotifyTable[] = { {TOPIC_EVENT_CANCEL_FIND_WATCH,MsgCenterNotifyCanCelFindWatchProc}, {TOPIC_EVENT_DRINKREMINDER,MsgCenterNotifyDrinkReminderProc}, {TOPIC_EVENT_MESSAGENOTE,MsgCenterNotifyMessageProc}, + {TOPIC_EVENT_SLEEPNOTE,MsgCenterNotifySleepProc}, }; static MsgCenterNotifyTable *MsgCenterGetNotifyTblCb(uint8_t idx) diff --git a/code/sdk/application/wearable/service/msg_center/src/notify/charge_notification.cpp b/code/sdk/application/wearable/service/msg_center/src/notify/charge_notification.cpp index 5fe43358b..5bb1d33ca 100644 --- a/code/sdk/application/wearable/service/msg_center/src/notify/charge_notification.cpp +++ b/code/sdk/application/wearable/service/msg_center/src/notify/charge_notification.cpp @@ -9,6 +9,8 @@ #include "battery_service.h" #include "NativeAbility.h" #include "custom_utils.h" +#include "cmsis_os2.h" +#include "linux/delay.h" namespace OHOS { UIImageView *imageCharge = nullptr; @@ -19,15 +21,15 @@ namespace OHOS UIViewGroup *group=nullptr; UIImageAnimatorView *ShutDownImageAnimatorView=nullptr; static constexpr char *ShutDownPaths = "/user/res/RebootAndShutDown/ShutDown/"; //关机图片路径 - static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES = 30; // 图片帧数 - static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_TIME = 150; // 图片更新间隔 - ImageAnimatorInfo ShutDownImageInfo[SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES]; // 关机图像的信息 + #define SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES 30 // 图片帧数 + static int16_t SHUTDOWN_IMAGE_ANIMATOR_TIME = 130; // 图片更新间隔 + static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_VIEW_X = 0; static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_VIEW_Y = 0; static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_VIEW_W = 466; static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_VIEW_H = 466; const char **ShutDownPathsArray{nullptr}; // 关机图片路径数组 - + ImageAnimatorInfo ShutDownImageInfo[SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES]; // 关机图像的信息 #define LOW_POWER_BUTTON "LOW_POWER_BUTTON" // UIViewGroup *ChargingStatuShow() // { @@ -52,6 +54,17 @@ namespace OHOS // imageCharge->SetVisible(true); // } // } + + static void FreeImagePathsArray(const char **imagePaths, const int numImages) + { + for (int i = 0; i < numImages; i++) + { + // ImageCacheManager::GetInstance().UnloadSingleRes(imagePaths[i]); + delete imagePaths[i]; + imagePaths[i] = nullptr; + } + } + static const char ** CreateImagePathsArray(const char *basePath, const char *fileExtension, int numImages) { const char **imagePaths = new const char *[numImages]; @@ -65,15 +78,15 @@ namespace OHOS return imagePaths; } - UIViewGroup * ShowUpShutDownAnimatorView() + void ShowUpShutDownAnimatorView() { group = new UIViewGroup(); if (group == nullptr) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail"); - return nullptr; + return ; } - group->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); + group->SetPosition(0, 0, 466, 466); WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ShutDownAnimatorView::ShowUpShutDownAnimatorView"); ShutDownPathsArray = CreateImagePathsArray(ShutDownPaths, "bin", SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES); @@ -84,8 +97,9 @@ namespace OHOS if (ShutDownImageAnimatorView == nullptr) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothEarPhoneView new ShutDownImageAnimatorView fail"); - return NULL; + return ; } + for (uint8_t i = 0; i < SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES; i++) { ShutDownImageInfo[i].imagePath = (ShutDownPathsArray[i]); @@ -98,16 +112,24 @@ namespace OHOS ShutDownImageAnimatorView->SetPosition(SHUTDOWN_IMAGE_ANIMATOR_VIEW_X, SHUTDOWN_IMAGE_ANIMATOR_VIEW_Y, SHUTDOWN_IMAGE_ANIMATOR_VIEW_W, SHUTDOWN_IMAGE_ANIMATOR_VIEW_H); ShutDownImageAnimatorView->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff); ShutDownImageAnimatorView->SetStyle(STYLE_BACKGROUND_OPA, 0xff); - ShutDownImageAnimatorView->SetImageAnimatorSrc(ShutDownImageInfo, SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES, 100); + ShutDownImageAnimatorView->SetImageAnimatorSrc(ShutDownImageInfo, SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES, SHUTDOWN_IMAGE_ANIMATOR_TIME); ShutDownImageAnimatorView->SetRepeat(false); ShutDownImageAnimatorView->SetRepeatTimes(1); } + UIImageAnimatorView::AnimatorStopListener *stoplistener = static_cast(lowppowrAnimatorStopListener::GetInstance()); + ShutDownImageAnimatorView->SetAnimatorStopListener(stoplistener); + if (stoplistener == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to Create stoplistener!!"); + return; + } + ShutDownImageAnimatorView->SetVisible(true); //ShutDownImageAnimatorView->Start(); group->SetVisible(false); group->Add(ShutDownImageAnimatorView); - return group; + return ; } static uint8_t battery_falg=0; @@ -140,6 +162,7 @@ namespace OHOS if(group) { group->RemoveAll(); + ShutDownImageAnimatorView->Stop(); if(ShutDownImageAnimatorView) { delete ShutDownImageAnimatorView; @@ -149,6 +172,7 @@ namespace OHOS group = nullptr; } + FreeImagePathsArray(ShutDownPathsArray,SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES); RootView::GetInstance()->Remove(UIViewGroup_lowpower); delete UIViewGroup_lowpower; @@ -292,13 +316,6 @@ namespace OHOS if(battery_falg>=3) { group->SetVisible(true); - UIImageAnimatorView::AnimatorStopListener *stoplistener = static_cast(lowppowrAnimatorStopListener::GetInstance()); - ShutDownImageAnimatorView->SetAnimatorStopListener(stoplistener); - if (stoplistener == nullptr) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to Create stoplistener!!"); - return NULL; - } ShutDownImageAnimatorView->Start(); } return UIViewGroup_lowpower; @@ -344,11 +361,17 @@ namespace OHOS void lowppowrAnimatorStopListener::OnAnimatorStop(UIView &view) { //UNUSED(view); + NotificationManager::GetInstance()->StopNotify(); + msleep(500); WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "xxxxxxxxxxxxxxxxxxxxOnAnimatorStop"); + if(battery_falg==4) uapi_reboot_device(); else uapi_poweroff_device(); // 关机 + + + //NotificationManager::GetInstance()->StopNotify(); // // if(strcmp(view.GetViewId(),LOW_POWER_BUTTON)!=0) diff --git a/code/sdk/application/wearable/service/msg_center/src/notify/sleep_notification.cpp b/code/sdk/application/wearable/service/msg_center/src/notify/sleep_notification.cpp new file mode 100644 index 000000000..72a69cdee --- /dev/null +++ b/code/sdk/application/wearable/service/msg_center/src/notify/sleep_notification.cpp @@ -0,0 +1,277 @@ +#include "notification_manager.h" +#include "wearable_log.h" +#include "components/ui_button.h" +#include +#include "ui_service.h" +#include +#include "bleEvent.h" +#include "components/ui_label_ext.h" +#include "uicomponents/UIComponents.h" +#include "sleep/include/SleepModel.h" +#include "sleep_notification.h" +#include "string" +#include "vibrator_service.h" +#include "UiConfig.h" +#include "ConfigModel.h" +extern "C" void custom_VibratorFunc(OHOS::VibratorType vibratorType); + +namespace OHOS +{ + + UIViewGroup *SleepGroupView{nullptr}; + + UILabel *sleeptitle{nullptr}; // 标题 + UIImageView *sleepicon{nullptr}; // 睡眠图标 + UILabelExt *sleepnotifylabel{nullptr}; // 详细label + UILabelButtonExt *sleepbutton{nullptr}; // 删除按键 + + UILabelExt *alarmtitle{nullptr}; // 标题 + UIImageView *backimage{nullptr}; + UIImageView *sunnyicon{nullptr}; + UIImageView *alarmicon{nullptr}; + UILabelExt *nowlabel{nullptr}; + UILabelExt *walklabel{nullptr}; // 早安时间 + UILabelButtonExt *closebutton{nullptr}; // 关闭按键 + UILabelButtonExt *nopbutton{nullptr}; // 小睡按键 + + static std::string titleStr; + static constexpr const char *PNG_SLEEP_SUUNY_IMAGE = "/user/res/Sleep/sunny.bin"; + static constexpr const char *PNG_SLEEP_ALARM_IMAGE = "/user/res/Sleep/alarmicon.bin"; + static constexpr const char *PNG_SLEEP_BACK_IMAGE = "/user/res/Sleep/goodmorning.bin"; + +#define DELETEBUTTON "delete_button" +#define NOPBUTTON "nop_button" + + SleepViewEventListener::SleepViewEventListener() + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SleepViewEventListener::SleepViewEventListener"); + } + + SleepViewEventListener::~SleepViewEventListener() + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SleepViewEventListener::~SleepViewEventListener"); + } + + SleepViewEventListener &SleepViewEventListener::GetInstance() + { + static SleepViewEventListener instance; + return instance; + } + bool SleepViewEventListener::OnRelease(UIView &view, const ReleaseEvent &event) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SleepViewEventListener::OnRelease"); + UNUSED(event); + if (strcmp(view.GetViewId(), DELETEBUTTON) == 0) + { + NotificationManager::GetInstance()->StopNotify(); + } + return true; + } + bool SleepViewEventListener::OnDrag(UIView &view, const DragEvent &event) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SleepViewEventListener::OnDrag"); + UNUSED(view); + return true; + } + + bool SleepViewEventListener::OnDragEnd(UIView &view, const DragEvent &event) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SleepViewEventListener::OnDragEnd"); + if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) + { + NotificationManager::GetInstance()->StopNotify(); + } + return true; + } + + /*创建信息弹窗*/ + UIViewGroup *CreateSleepNotifyView(void) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateSleepNotifyView"); + SleepGroupView = new UIViewGroup(); + if (SleepGroupView == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[CreateSleepNotifyView] SleepGroupView new fail!!"); + return nullptr; + } + SleepGroupView->SetPosition(0, 0, 466, 466); + SleepGroupView->SetViewId("sleepnotify"); + SleepGroupView->SetTouchable(true); + SleepGroupView->SetDraggable(true); + UIView::OnDragListener *dragListener = static_cast(&SleepViewEventListener::GetInstance()); + if (dragListener == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[CreateSleepNotifyView] dragListener new fail!!"); + return nullptr; + } + SleepGroupView->SetOnDragListener(dragListener); + /*获取最新sleep*/ + SLEEPSTATE sleepsate = SleepModel::GetInstance().get_sleep_state(); + UIResourceTextId textId = STR_MORNNING; + switch (sleepsate) + { + case SLEEPSTATE::SLEEPNOTIFY: + titleStr = SleepModel::GetInstance().get_notifiy(); + textId = STR_DISTURB; // 即将开启勿扰 + break; + case SLEEPSTATE::SLEPP: + titleStr = SleepModel::GetInstance().get_sleep_notifiy(); + textId = STR_DISTURBNOTE; // 开启勿扰 + ConfigModel::GetInstance()->SetDnotdisturb(true); + break; + case SLEEPSTATE::WALK: + titleStr = SleepModel::GetInstance().get_walk_notifiy(); + textId = STR_MORNNING; + ConfigModel::GetInstance()->SetDnotdisturb(false); // 关闭勿扰 + SetAlarmClockView(); // 设置为早安视图 + return SleepGroupView; + break; + default: + break; + } + + /*初始化label*/ + /* -------------------------------------------------------------------------- */ + sleeptitle = new UILabel(); + if (sleeptitle == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sleeptitle:: new UILabel fail"); + return nullptr; // 内存分配失败,返回 + } + sleeptitle->SetPosition(83, 60, 300, 35); + sleeptitle->SetText(titleStr.c_str()); + sleeptitle->SetStyle(STYLE_TEXT_FONT, 30); + sleeptitle->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS); + sleeptitle->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + sleeptitle->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 40); + sleeptitle->SetVisible(true); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sleeptitle is ok!"); + /* -------------------------------------------------------------------------- */ + /*初始化图片*/ + InitImageView(sleepicon, 193, 130, 80, 80, "image", PNG_APPLIST_SLEEP_IMAGE); + sleepicon->SetResizeMode(UIImageView::ImageResizeMode::SCALE_DOWN); + /* -------------------------------------------------------------------------- */ + /*初始化消息内容*/ + sleepnotifylabel = new UILabelExt(); + if (sleepnotifylabel == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sleepnotifylabel:: new UILabel fail"); + return nullptr; // 内存分配失败,返回 + } + sleepnotifylabel->SetPosition(53, 220, 360, 144); + sleepnotifylabel->SetViewId("sleepnotifylabel"); + sleepnotifylabel->SetTextId(textId); + sleepnotifylabel->SetTextColor(Color::Gray()); + sleepnotifylabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); + sleepnotifylabel->SetLineBreakMode(UILabel::LINE_BREAK_CLIP); // 换行裁剪 + sleepnotifylabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); // 居中显示 + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sleepnotifylabel is ok"); + + /*加载清除按键*/ + InitButtonExt(sleepbutton, 0, 366, 466, 100, DELETEBUTTON, STR_KONW, 30); + const char *buttonImgSrc = "/user/res/466x100button.bin"; + sleepbutton->SetImageSrc(buttonImgSrc, buttonImgSrc); + UIView::OnTouchListener *TouchListener = static_cast(&SleepViewEventListener::GetInstance()); + if (TouchListener == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[CreateSleepView] TouchListener new fail!!"); + return nullptr; + } + sleepbutton->SetOnTouchListener(TouchListener); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sleepbutton"); + /* -------------------------------------------------------------------------- */ + SleepGroupView->Add(sleeptitle); + SleepGroupView->Add(sleepicon); + SleepGroupView->Add(sleepnotifylabel); + SleepGroupView->Add(sleepbutton); + + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Create SleepGroupView succeed!!"); + custom_VibratorFunc(VibratorType::VIBRATOR_TYPE_TWO); // 震动提醒 + return SleepGroupView; + } + void SetAlarmClockView() + { + /*初始化图片*/ + InitImageView(backimage, 0, 0, 466, 466, "image", PNG_SLEEP_BACK_IMAGE); + InitImageView(sunnyicon, 153, 95, 160, 160, "image", PNG_SLEEP_SUUNY_IMAGE); + InitImageView(alarmicon, 149, 260, 29, 29, "image", PNG_SLEEP_ALARM_IMAGE); + /*初始化固定label*/ + InitLabelExt(alarmtitle, 83, 50, 300, 35, "labletitle", STR_MORNNING, DEFAULT_VECTOR_FONT_FILENAME, 30); + InitLabelExt(nowlabel, 110, 243, 200, 60, "labletitle", STR_NOW, DEFAULT_VECTOR_FONT_FILENAME, 30); + /*获取起床时间labe*/ + std::string walkStr = SleepModel::GetInstance().get_walk_notifiy(); + InitLabel(walklabel, 190, 245, 200, 60, "labletitle", walkStr.c_str(), DEFAULT_VECTOR_FONT_FILENAME, 30); + /*设置按键*/ + InitButtonExt(nopbutton, 58, 320, 170, 90, NOPBUTTON, STR_NAP, 30); + nopbutton->SetOnTouchListener(static_cast(&SleepViewEventListener::GetInstance())); + nopbutton->SetStyle(STYLE_BACKGROUND_COLOR, 0xff4fc34c); + nopbutton->SetStyle(STYLE_BORDER_RADIUS, 100); + + InitButtonExt(closebutton, 238, 320, 170, 90, DELETEBUTTON, STR_CLOSE, 30); + closebutton->SetOnTouchListener(static_cast(&SleepViewEventListener::GetInstance())); + closebutton->SetStyle(STYLE_BORDER_RADIUS, 100); + + /* -------------------------------------------------------------------------- */ + SleepGroupView->Add(backimage); + SleepGroupView->Add(sunnyicon); + SleepGroupView->Add(alarmicon); + SleepGroupView->Add(nowlabel); + SleepGroupView->Add(walklabel); + SleepGroupView->Add(nopbutton); + SleepGroupView->Add(closebutton); + + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Create SleepGroupView succeed!!"); + custom_VibratorFunc(VibratorType::VIBRATOR_TYPE_TWO); // 震动提醒 + } + /*释放消息弹窗视图*/ + void FreeSleepView(void) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FreeSleepView(void)"); + if (SleepGroupView != nullptr) + { + SleepGroupView->RemoveAll(); + + delete sleeptitle; + sleeptitle = nullptr; + + delete sleepicon; + sleepicon = nullptr; + + delete sleepnotifylabel; + sleepnotifylabel = nullptr; + + delete sleepbutton; + sleepbutton = nullptr; + + delete alarmtitle; + alarmtitle = nullptr; + + delete backimage; + backimage = nullptr; + + delete sunnyicon; + sunnyicon = nullptr; + + delete alarmicon; + alarmicon = nullptr; + + delete nowlabel; + nowlabel = nullptr; + + delete walklabel; + walklabel = nullptr; + + delete closebutton; + closebutton = nullptr; + + delete nopbutton; + nopbutton = nullptr; + + RootView::GetInstance()->Remove(SleepGroupView); + delete SleepGroupView; + SleepGroupView = nullptr; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Free SleepView succeed!!"); + } + return; + } +} \ No newline at end of file diff --git a/code/sdk/bootloader/flashboot/brandy/main.c b/code/sdk/bootloader/flashboot/brandy/main.c index 3a6c4dcea..ff509faac 100755 --- a/code/sdk/bootloader/flashboot/brandy/main.c +++ b/code/sdk/bootloader/flashboot/brandy/main.c @@ -408,7 +408,7 @@ static bool upg_need_upgrade(fota_upgrade_flag_area_t *upg_flag_info) if ((errcode_t)uapi_flash_exit_from_xip_mode(0) != ERRCODE_SUCC) { goto end; } - if (flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL) { + if (flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL || flash_info.flash_id == FLASH_MANUFACTURER_PUYA_PY25Q128LA) { real_read = uapi_flash_read_data_without_align(0, fota_address, (uint8_t *)(upg_flag_info), sizeof(fota_upgrade_flag_area_t)); } else { diff --git a/code/sdk/bootloader/flashboot/brandy/nandflash/include/nandflash_ds35x1g.h b/code/sdk/bootloader/flashboot/brandy/nandflash/include/nandflash_ds35x1g.h index 8a37759b0..75956dbb4 100755 --- a/code/sdk/bootloader/flashboot/brandy/nandflash/include/nandflash_ds35x1g.h +++ b/code/sdk/bootloader/flashboot/brandy/nandflash/include/nandflash_ds35x1g.h @@ -1,3 +1,13 @@ +/* + * @Author: penglei 1624952103@qq.com + * @Date: 2024-06-29 17:26:01 + * @LastEditors: penglei 1624952103@qq.com + * @LastEditTime: 2024-07-02 16:41:57 + * @FilePath: /FD230/code/sdk/bootloader/flashboot/brandy/nandflash/include/nandflash_ds35x1g.h + * @Description: + * + * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. + */ /* * Copyright (c) @CompanyNameMagicTag 2018-2020. All rights reserved. * Description: NON-OS NANDFLASH DRIVER @@ -12,7 +22,7 @@ #define DS35X1G_BYTES_PER_OOB 64 #define DS35X1G_PAGES_PER_BLOCK 64 #define DS35X1G_TOTAL_BLOCKS 1024 -#define DS35X1G_CHIP_ID 0xE521 +#define DS35X1G_CHIP_ID 0xE521//0xE521,6161 id 没有check #define DS35X1G_OOB_TOTAL_LEN 4 #define DS35X1G_OOB_PER_SIZE 8 #define DS35X1G_OOB_1_OFFSET 0 diff --git a/code/sdk/build/config/target_config/brandy/build_brandy_update.py b/code/sdk/build/config/target_config/brandy/build_brandy_update.py index 55388e64e..26c4ccc58 100755 --- a/code/sdk/build/config/target_config/brandy/build_brandy_update.py +++ b/code/sdk/build/config/target_config/brandy/build_brandy_update.py @@ -109,6 +109,7 @@ def get_new_image(info): # 要升级的image列表,需根据升级的实际情况进行增删 image_list = [] if os.path.exists(os.path.join(info.root_path,"output","ota_all")) : + print( os.path.join(info.root_path,"output","ota_all")+" exist ") image_list.append("=".join([info.ssb_bin, "ssb"])) image_list.append("=".join([info.recovery_bin, "recovery"])) image_list.append("=".join([info.app_bin, "application"])) @@ -116,7 +117,11 @@ def get_new_image(info): image_list.append("=".join([info.dsp_main_bin, "dsp_main"])) image_list.append("=".join([info.dsp_overlay_bin, "dsp_overlay"])) image_list.append("=".join([info.nv_bin, "nv"])) + elif os.path.exists(os.path.join(info.root_path,"output","res_only")) : + print( os.path.join(info.root_path,"output","res_only")+" exist ") + print("update resource only") else: + print( "ota_all or res_only not exist in folder "+os.path.join(info.root_path,"output")+",application only!") image_list.append("=".join([info.app_bin, "application"])) if os.path.exists(info.res_dir) : @@ -157,8 +162,10 @@ def get_old_image(info): image_list.append("=".join([info.bt_old_bin, "bt"])) image_list.append("=".join([info.dsp_main_old_bin, "dsp_main"])) image_list.append("=".join([info.dsp_overlay_old_bin, "dsp_overlay"])) + elif os.path.exists(os.path.join(info.root_path,"output","res_only")) : + print("update resource only") else: - print( os.path.join(info.root_path,"output","ota_all")+" not exist ") + print( " ota_all or res_only not exist in folder "+os.path.join(info.root_path,"output")+",application only!") image_list.append("=".join([info.app_old_bin, "application"])) # image_list.append("=".join([info.app_old_sign, "application_sign"])) # image_list.append("=".join([info.bt_old_sign, "bt_sign"])) diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/Sleep/alarmicon.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/Sleep/alarmicon.bin new file mode 100644 index 000000000..79d1ccae1 --- /dev/null +++ b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/Sleep/alarmicon.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a69a4de1b30054eaf54864f8e8cd63ccb22149252ce50dc9ead369b6dd97aa14 +size 664 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/Sleep/goodmorning.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/Sleep/goodmorning.bin new file mode 100644 index 000000000..a7be2ae9f --- /dev/null +++ b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/Sleep/goodmorning.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b010e39f71b93cd8b2d0341e0fed8ecdb098481384e574d199ff88557a5084fe +size 146040 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/Sleep/sunny.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/Sleep/sunny.bin new file mode 100644 index 000000000..3f4034e9b --- /dev/null +++ b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/Sleep/sunny.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a5a92b58e1e19d6430fae58dd7d4497b441ef72903038f9563152dd94e0a25d +size 17304 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_BLUETOOTH.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_BLUETOOTH.bin new file mode 100644 index 000000000..f85034587 --- /dev/null +++ b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_BLUETOOTH.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6db591e3eb1bb54b9010e4c57c5b0f40d28a1290e95f28a9c0920ba7369e0171 +size 792 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_BLUETOOTHCONNECTED.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_BLUETOOTHCONNECTED.bin new file mode 100644 index 000000000..1e71c6442 --- /dev/null +++ b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_BLUETOOTHCONNECTED.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b21cd7b0da5006062af8f7efe3e791ee290322f31cde7581eed65bcc9ebf9df7 +size 2424 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_BLUETOOTHDISCONNECTED.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_BLUETOOTHDISCONNECTED.bin new file mode 100644 index 000000000..f6c06917e --- /dev/null +++ b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_BLUETOOTHDISCONNECTED.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78a4a48c22d14d85354d1fe4d84b0c13244c47d9b1f5858227b63403fbad404d +size 2424 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_DNOTDISTURB.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_DNOTDISTURB.bin new file mode 100644 index 000000000..776256e8e --- /dev/null +++ b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_DNOTDISTURB.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:50053d273b582b274ff2e748de6940cc52312ee25adff7bf2bbd2a9e9e27960f +size 1560 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_EARPHONESCONNECTED.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_EARPHONESCONNECTED.bin new file mode 100644 index 000000000..4d3430d5c --- /dev/null +++ b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_EARPHONESCONNECTED.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:34a4e1b063eda3fcb6ca9c2e223173e4550620182ecec675ddf8b4971bb6b1af +size 2424 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_EARPHONESDISCONNECTED.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_EARPHONESDISCONNECTED.bin new file mode 100644 index 000000000..5e3af0c6c --- /dev/null +++ b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_EARPHONESDISCONNECTED.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9fce27e93e1538cccc7da3120837858f59f48a9df2cedfc07992cacff34ae507 +size 2424 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_FINDPHONE.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_FINDPHONE.bin new file mode 100644 index 000000000..7343389b7 --- /dev/null +++ b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_FINDPHONE.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5be34fcd358e742d3a3cab6986d844cb5ccfc33f9c422b7c0ff22f35d63c3ea0 +size 1560 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_LINE.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_LINE.bin new file mode 100644 index 000000000..0704bbcdf --- /dev/null +++ b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_LINE.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:492d2eb4af52cf3ef0ddb43cb09a8af13629ec7d5b8d5f723358771f3441e65c +size 472 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_NOSIGNAL.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_NOSIGNAL.bin new file mode 100644 index 000000000..33ed4e860 --- /dev/null +++ b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_NOSIGNAL.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:905a252082ea4a712d68b34df64ce107350ba8def9e77b31e93d468d0cd6fe63 +size 984 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_PHONECONNECTED.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_PHONECONNECTED.bin new file mode 100644 index 000000000..ef27e321c --- /dev/null +++ b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_PHONECONNECTED.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:52855c1d10dc754e635bc180a5ea72459697a83de535633b6fafd5bc8be26836 +size 2424 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_PHONEDISCONNECTED.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_PHONEDISCONNECTED.bin new file mode 100644 index 000000000..85a601ff2 --- /dev/null +++ b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_PHONEDISCONNECTED.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:923ae93925394df078d1451f332acf9e74c49a23f881ae222c30b790d217fe24 +size 2424 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_SAVEPOWER.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_SAVEPOWER.bin new file mode 100644 index 000000000..c403103de --- /dev/null +++ b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_SAVEPOWER.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08218c18c5b6abb4d2427c0e9694e0d97f0046f30ce7f7f3e291f322bc10542d +size 1560 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_SETTING.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_SETTING.bin new file mode 100644 index 000000000..cbd0a861f --- /dev/null +++ b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dropdown/DROPDOWN_SETTING.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:167523518e00aceaa0522319bbb7320b209c46a822635ddf99a1ac1041b967a1 +size 1560 diff --git a/code/sdk/drivers/drivers/driver/nand_flash/nand/include/nandflash_ds35x1g.h b/code/sdk/drivers/drivers/driver/nand_flash/nand/include/nandflash_ds35x1g.h index f7e0dfcd5..2b5c20fc7 100755 --- a/code/sdk/drivers/drivers/driver/nand_flash/nand/include/nandflash_ds35x1g.h +++ b/code/sdk/drivers/drivers/driver/nand_flash/nand/include/nandflash_ds35x1g.h @@ -1,3 +1,13 @@ +/* + * @Author: penglei 1624952103@qq.com + * @Date: 2024-06-07 11:18:26 + * @LastEditors: penglei 1624952103@qq.com + * @LastEditTime: 2024-07-02 16:42:22 + * @FilePath: /FD230/code/sdk/drivers/drivers/driver/nand_flash/nand/include/nandflash_ds35x1g.h + * @Description: + * + * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. + */ /* * Copyright (c) @CompanyNameMagicTag 2018-2020. All rights reserved. * Description: NON-OS NANDFLASH DRIVER @@ -12,7 +22,7 @@ #define DS35X1G_BYTES_PER_OOB 64 #define DS35X1G_PAGES_PER_BLOCK 64 #define DS35X1G_TOTAL_BLOCKS 1024 -#define DS35X1G_CHIP_ID 0xE521 +#define DS35X1G_CHIP_ID 0xE521//0xE521,6161 id 没有check #define DS35X1G_OOB_TOTAL_LEN 4 #define DS35X1G_OOB_PER_SIZE 8 #define DS35X1G_OOB_1_OFFSET 0 diff --git a/code/sdk/drivers/peripheral/config/include/ConfigModelC.h b/code/sdk/drivers/peripheral/config/include/ConfigModelC.h index 8a5a2ef68..dbcd21222 100644 --- a/code/sdk/drivers/peripheral/config/include/ConfigModelC.h +++ b/code/sdk/drivers/peripheral/config/include/ConfigModelC.h @@ -2,7 +2,7 @@ * @Author: luozheng 1732036298@qq.com * @Date: 2024-04-17 09:32:03 * @LastEditors: penglei 1624952103@qq.com - * @LastEditTime: 2024-06-21 20:17:12 + * @LastEditTime: 2024-06-28 18:27:45 * @FilePath: /FD230/code/sdk/drivers/peripheral/config/include/ConfigModelC.h */ #ifndef _CONFIG_MODEL_C_H_ @@ -95,6 +95,12 @@ uint8_t cm_get_vibmod(void); //cywee 获取用户信息 void get_user_info_from_config_model(int user_info[5]); +int get_sleep_time_from_config_model(void); +int get_wake_up_time_from_config_model(void); + +//设置睡眠频率 +void set_config_heart(int heartRateDetectionFreq); + #ifdef __cplusplus #if __cplusplus } diff --git a/code/sdk/drivers/peripheral/config/src/ConfigModel.cpp b/code/sdk/drivers/peripheral/config/src/ConfigModel.cpp index ba11493f7..ace4e6b72 100644 --- a/code/sdk/drivers/peripheral/config/src/ConfigModel.cpp +++ b/code/sdk/drivers/peripheral/config/src/ConfigModel.cpp @@ -1445,6 +1445,26 @@ void get_user_info_from_config_model(int user_info[5]) user_info[3] = OHOS::ConfigModel::GetInstance()->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_CUSTOM_DATA_HEIGHT); user_info[4] = OHOS::ConfigModel::GetInstance()->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_CUSTOM_DATA_WEARING_MODE); } + +//获取睡眠目标[入睡时间] +int get_sleep_time_from_config_model(void) +{ + int sleep_time = 0; + sleep_time = OHOS::ConfigModel::GetInstance()->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_SLEEP_BEDTIME); + return sleep_time; +} +//获取睡眠目标[醒来时间] +int get_wake_up_time_from_config_model(void) +{ + int wake_up_time = 0; + wake_up_time = OHOS::ConfigModel::GetInstance()->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_SLEEP_GET_UP); + return wake_up_time; +} +void set_config_heart(int heartRateDetectionFreq) +{ + // 设置心率检测频率 + OHOS::ConfigModel::GetInstance()->set_condigData_Int(OHOS::ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_DETECTED, heartRateDetectionFreq); +} #ifdef __cplusplus #if __cplusplus } diff --git a/code/sdk/drivers/peripheral/cywee/Inc/cywee_service.h b/code/sdk/drivers/peripheral/cywee/Inc/cywee_service.h index b6c303e24..121a9736a 100644 --- a/code/sdk/drivers/peripheral/cywee/Inc/cywee_service.h +++ b/code/sdk/drivers/peripheral/cywee/Inc/cywee_service.h @@ -2,7 +2,7 @@ * @Author: penglei 1624952103@qq.com * @Date: 2024-03-26 20:29:58 * @LastEditors: penglei 1624952103@qq.com - * @LastEditTime: 2024-06-22 15:03:56 + * @LastEditTime: 2024-06-28 18:00:01 * @FilePath: /FD230/code/sdk/drivers/peripheral/cywee/Inc/cywee_service.h * @Description: * @@ -61,7 +61,8 @@ extern "C" { #define CYWEE_SERVICE_CMD_HRS_WEARSTATUS_CHANGE 0x21 #define CYWEE_SERVICE_CMD_SEDENTARY_MODE 0x22 -#define CYWEE_SERVICE_CMD_NAP_MODE 0x23 +#define CYWEE_SERVICE_CMD_NAP_MODE 0x32 +#define CYWEE_SERVICE_CMD_NAP_SEDENTARY_MODE 0x23 #define CYWEE_SERVICE_CMD_SLEEPING_MODE 0x24 #define CYWEE_SERVICE_CMD_OPEN_HAND_UPDOWN 0x25 diff --git a/code/sdk/drivers/peripheral/cywee/service/cywee_service.c b/code/sdk/drivers/peripheral/cywee/service/cywee_service.c index 0c117f868..0d8b92707 100644 --- a/code/sdk/drivers/peripheral/cywee/service/cywee_service.c +++ b/code/sdk/drivers/peripheral/cywee/service/cywee_service.c @@ -341,8 +341,11 @@ static void cywee_service_check_task(void const *arg) case CYWEE_SERVICE_CMD_NAP_MODE: cywee_inactivity_mode_change(INACTIVITY_MODE_NAP); + + case CYWEE_SERVICE_CMD_NAP_SEDENTARY_MODE: + cywee_inactivity_mode_change(INACTIVITY_MODE_SEDENTARY_AND_NAP); break; - + case CYWEE_SERVICE_CMD_SLEEPING_MODE: cywee_inactivity_mode_change(INACTIVITY_MODE_SLEEPING); break; diff --git a/code/sdk/drivers/peripheral/cywee/src/board_yh601s.c b/code/sdk/drivers/peripheral/cywee/src/board_yh601s.c index 5acf5a5cd..3b337282f 100644 --- a/code/sdk/drivers/peripheral/cywee/src/board_yh601s.c +++ b/code/sdk/drivers/peripheral/cywee/src/board_yh601s.c @@ -263,10 +263,10 @@ int CWM_OS_dbgPrintf(const char * format,...) return 0; } typedef enum { - CYWEE_SAVE_DATA_STEP, - CYWEE_SAVE_DATA_DISTANCE, - CYWEE_SAVE_DATA_CALORIES, - CYWEE_SAVE_DATA_FAT, + CYWEE_DATA_STEP, + CYWEE_DATA_DISTANCE, + CYWEE_DATA_CALORIES, + CYWEE_DATA_FAT, } CYWEE_SAVE_DATA_TYPE; #define CWM_STEP_DATA_PATH "/user/userdata/sport/stepcount.bin" @@ -290,16 +290,16 @@ void CWM_OS_saveData(int* data, uint32_t len,uint8_t type){ FILE * fp=NULL; switch (type) { - case CYWEE_SAVE_DATA_CALORIES: + case CYWEE_DATA_CALORIES: fp = fopen(CWM_CALORIES_DATA_PATH,"wb"); break; - case CYWEE_SAVE_DATA_STEP: + case CYWEE_DATA_STEP: fp = fopen(CWM_STEP_DATA_PATH,"wb"); break; - case CYWEE_SAVE_DATA_DISTANCE: + case CYWEE_DATA_DISTANCE: fp = fopen(CWM_DISTANCE_DATA_PATH,"wb"); break; - case CYWEE_SAVE_DATA_FAT: + case CYWEE_DATA_FAT: fp = fopen(CWM_FAT_DATA_PATH,"wb"); break; @@ -354,16 +354,16 @@ void CWM_OS_saveData_history(int* new_data,int *history ,uint32_t len,uint8_t ty switch (type) { - case CYWEE_SAVE_DATA_CALORIES: + case CYWEE_DATA_CALORIES: sprintf_s(path_,64,"%s%s.bin",CWM_HISTORY_DATA_CALORIES_PATH,timeday); break; - case CYWEE_SAVE_DATA_STEP: + case CYWEE_DATA_STEP: sprintf_s(path_,64,"%s%s.bin",CWM_HISTORY_DATA_PATH,timeday); break; - case CYWEE_SAVE_DATA_DISTANCE: + case CYWEE_DATA_DISTANCE: sprintf_s(path_,64,"%s%s.bin",CWM_HISTORY_DATA_DISTANCE_PATH,timeday); break; - case CYWEE_SAVE_DATA_FAT: + case CYWEE_DATA_FAT: sprintf_s(path_,64,"%s%s.bin",CWM_HISTORY_DATA_FAT_PATH,timeday); break; @@ -373,15 +373,15 @@ void CWM_OS_saveData_history(int* new_data,int *history ,uint32_t len,uint8_t ty CWM_OS_dbgPrintf(" save path %s \n",path_); - int data= *new_data-*history;//新数据减去旧数据,作为这一个小时的步数值 - if(data<=0) - { - data=0; - *history=0; - CWM_OS_dbgPrintf("异常 清除步数数据\n"); - return; + // int data= *new_data-*history;//新数据减去旧数据,作为这一个小时的步数值 + // if(data<=0) + // { + // data=0; + // *history=0; + // CWM_OS_dbgPrintf("异常 清除步数数据\n"); + // return; - } + // } FILE * fp = fopen(path_,"ab+"); if(fp==NULL) @@ -401,14 +401,14 @@ void CWM_OS_saveData_history(int* new_data,int *history ,uint32_t len,uint8_t ty } - ret =fwrite(&data,1,len,fp); + ret =fwrite(new_data,1,len,fp); if(ret==0) { CWM_OS_dbgPrintf("fwrite failed %d\n",ret); } - CWM_OS_dbgPrintf("fwrite data %d\n",data); + CWM_OS_dbgPrintf("fwrite data %d\n",*new_data); - *history=*new_data; + //*history=*new_data; fclose(fp); } @@ -476,16 +476,16 @@ void CWM_OS_restoreData(int* data, uint32_t len,uint8_t type){ FILE * fp=NULL; switch (type) { - case CYWEE_SAVE_DATA_CALORIES: + case CYWEE_DATA_CALORIES: fp = fopen(CWM_CALORIES_DATA_PATH,"rb"); break; - case CYWEE_SAVE_DATA_STEP: + case CYWEE_DATA_STEP: fp = fopen(CWM_STEP_DATA_PATH,"rb"); break; - case CYWEE_SAVE_DATA_DISTANCE: + case CYWEE_DATA_DISTANCE: fp = fopen(CWM_DISTANCE_DATA_PATH,"rb"); break; - case CYWEE_SAVE_DATA_FAT: + case CYWEE_DATA_FAT: fp = fopen(CWM_FAT_DATA_PATH,"rb"); break; default: diff --git a/code/sdk/drivers/peripheral/cywee/src/main_dml.c b/code/sdk/drivers/peripheral/cywee/src/main_dml.c index 1123001bc..de3bc37c6 100644 --- a/code/sdk/drivers/peripheral/cywee/src/main_dml.c +++ b/code/sdk/drivers/peripheral/cywee/src/main_dml.c @@ -138,7 +138,7 @@ void set_calories_data(uint32_t data) void set_distance_data(uint32_t data) { - new_fat++; + new_distance=data; } int get_distance_data(void ) @@ -148,7 +148,12 @@ int get_distance_data(void ) void set_fat_time_data(void) { - new_calories++; + new_fat++; +} + +int get_fat_time_data(void) +{ + return new_fat+history_fat; } @@ -164,17 +169,21 @@ void stand_history_save(void) void calories_history_save(void) { - CWM_OS_saveData_history(&new_calories,&history_calories_,sizeof(int),CYWEE_SAVE_DATA_CALORIES); + + int data= get_calories_data(); + CWM_OS_saveData_history(&data,&history_calories_,sizeof(int),CYWEE_SAVE_DATA_CALORIES); } void distances_history_save(void) { - CWM_OS_saveData_history(&new_distance,&history_calories_,sizeof(int),CYWEE_SAVE_DATA_DISTANCE); + int data= get_distance_data(); + CWM_OS_saveData_history(&data,&history_calories_,sizeof(int),CYWEE_SAVE_DATA_DISTANCE); } void fat_history_save(void) { - CWM_OS_saveData_history(&new_fat,&history_fat_,sizeof(int),CYWEE_SAVE_DATA_FAT); + int data= get_fat_time_data(); + CWM_OS_saveData_history(&data,&history_fat_,sizeof(int),CYWEE_SAVE_DATA_FAT); } void cywee_goal_history_save(void) @@ -251,7 +260,7 @@ void cywee_time_sync(void) struct tm* timeinfo; time(&rawtime); timeinfo = localtime(&rawtime); - CWM_OS_dbgPrintf("cywee_time_sync : year[%d], mon[%d], day[%d], hour[%d], min[%d], msc[%d] \r\n", + CWM_OS_dbgPrintf("cywee_time_sync : year[%d], mon[%d], day[%d], hour[%d], min[%d], sec[%d] \r\n", timeinfo->tm_year+1900,timeinfo->tm_mon+1,timeinfo->tm_mday, timeinfo->tm_hour,timeinfo->tm_min,timeinfo->tm_sec); diff --git a/code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c b/code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c index da23b2020..6fbff27ca 100644 --- a/code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c +++ b/code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c @@ -381,24 +381,6 @@ bool hx3695_chip_check(void) return false; } -uint8_t hx3695_get_chip_id(void) -{ - uint8_t i = 0; - uint8_t chip_id = 0; - for(i=0; i<5; i++) - { - hx3695_ppg_on(); - chip_id = hx3695_read_reg(0x00); - - if (chip_id == 0x65) - { - return chip_id; - } - } - - return chip_id; -} - uint8_t hx3695_read_fifo_size(void) { uint8_t data_len_h,data_len_l; diff --git a/code/sdk/drivers/peripheral/ppg/hx3695/hx3695.h b/code/sdk/drivers/peripheral/ppg/hx3695/hx3695.h index 326b3997b..8eb2b292d 100644 --- a/code/sdk/drivers/peripheral/ppg/hx3695/hx3695.h +++ b/code/sdk/drivers/peripheral/ppg/hx3695/hx3695.h @@ -297,9 +297,6 @@ void heart_rate_meas_timeout_handler(void * p_context); void wear_mode_timeout_handler(void * p_context); void Efuse_Mode_Check(void); -uint8_t hx3695_get_chip_id(void); - - #include "hx3695_hal.h" #endif diff --git a/code/sdk/drivers/peripheral/utils/custom_utils.c b/code/sdk/drivers/peripheral/utils/custom_utils.c index 235d8789a..247fcee9d 100644 --- a/code/sdk/drivers/peripheral/utils/custom_utils.c +++ b/code/sdk/drivers/peripheral/utils/custom_utils.c @@ -28,6 +28,10 @@ #include "soundandvibration/include/SoundAndVibrationVolumeSettingC.h" #include "networkandcall/include/NetworkAndCallC.h" #include "producttest/include/testmicrophoneC.h" +#include "producttest/include/testLCDC.h" +#include "producttest/include/testTPC.h" +#include "system/include/SystemPresenterC.h" +#include "producttest/include/testPresenterC.h" #endif #include #include @@ -790,11 +794,12 @@ errcode_t uapi_get_yyyymmddhhmmss_Date(char *date) /** * @param {uint32_t} time 时间戳 * @param {char} *p_time 字符串 - * @param {bool} *include_seconds 是否包含秒 - * @param {char} 隔断符 + * @param {bool} include_seconds 是否包含秒 + * @param {bool} include_year 是否包含年份 + * * @param {char} 隔断符 * @brief 通过时间戳获取日期 */ -errcode_t uapi_get_TIME_STR(uint32_t time,char *p_time, char separator, bool include_seconds) +errcode_t uapi_get_TIME_STR(uint32_t time, char *p_time, char separator, bool include_seconds, bool include_year) { if (p_time == NULL) { @@ -812,18 +817,35 @@ errcode_t uapi_get_TIME_STR(uint32_t time,char *p_time, char separator, bool inc // 根据需要格式化日期时间字符串,包括时分秒和分隔符 if (include_seconds) { - sprintf(p_time, "%04d%c%02d%c%02d %02d%c%02d", timeinfo->tm_year + 1900, separator, timeinfo->tm_mon + 1, separator, - timeinfo->tm_mday, timeinfo->tm_hour, separator, timeinfo->tm_min); + if (include_year) + { + sprintf(p_time, "%04d%c%02d%c%02d %02d%c%02d", timeinfo->tm_year + 1900, separator, timeinfo->tm_mon + 1, separator, + timeinfo->tm_mday, timeinfo->tm_hour, separator, timeinfo->tm_min); + } + else + { + sprintf(p_time, "%02d%c%02d %02d%c%02d", timeinfo->tm_mon + 1, separator, + timeinfo->tm_mday, timeinfo->tm_hour, separator, timeinfo->tm_min); + } } else { - sprintf(p_time, "%04d%c%02d%c%02d %02d%c%02d", timeinfo->tm_year + 1900, separator, timeinfo->tm_mon + 1, separator, - timeinfo->tm_mday, timeinfo->tm_hour, separator, timeinfo->tm_min); + if (include_year) + { + sprintf(p_time, "%04d%c%02d%c%02d %02d%c%02d", timeinfo->tm_year + 1900, separator, timeinfo->tm_mon + 1, separator, + timeinfo->tm_mday, timeinfo->tm_hour, separator, timeinfo->tm_min); + } + else + { + sprintf(p_time, "%02d%c%02d %02d%c%02d", timeinfo->tm_mon + 1, separator, + timeinfo->tm_mday, timeinfo->tm_hour, separator, timeinfo->tm_min); + } } return ERRCODE_SUCC; } + /** * @param {char} *p_time * @param {char} 隔断符 @@ -913,7 +935,23 @@ errcode_t uapi_get_HHMMSS_Time(char *p_time, char separator, bool include_second return ERRCODE_SUCC; } +/*打印时间戳*/ +void print_current_time(void) +{ + char current_time[9]; // 分配内存给current_time + if (uapi_get_HHMMSS_Time(current_time, ':', true) != ERRCODE_SUCC) + { + return; + } + printf("Current_time: %s\n", current_time); + uint32_t tm; + if(uapi_get_timestampe_ms(&tm) != ERRCODE_SUCC) + { + return; + } + printf("Current timestamp in milliseconds: %u\n", tm); +} const char *weekDays[] = {"星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; errcode_t uapi_get_WeekStr(char *p_week) { @@ -2216,6 +2254,48 @@ void uapi_check_spk(bool isopen) #endif } +void uapi_factorytest_set_lcd_color(int color) +{ + #ifdef FD230 + factorytest_set_LCD_color(color); + #endif +} + +void uapi_factorytest_enter_test_view(int cmd) +{ + #ifdef FD230 + factorytest_enter_test_view(cmd); + #endif +} + +void uapi_factorytest_enter_test_tp_view(void) +{ + #ifdef FD230 + factorytest_enter_test_tp_view(); + #endif +} + +void uapi_factorytest_enter_test_lcd_view(void) +{ + #ifdef FD230 + factorytest_enter_test_lcd_view(); + #endif +} + +void uapi_factorytest_hide_test_lcd_button(void) +{ + #ifdef FD230 + factorytest_hide_test_lcd_button(); + #endif +} + +void uapi_factorytest_hide_test_tp_button(void) +{ + #ifdef FD230 + factorytest_hide_test_tp_button(); + #endif +} + void uapi_efuse_test_write(uint8_t *data,uint32_t byte_number,uint8_t len) { uint8_t readdata[10] = {0}; @@ -2261,14 +2341,15 @@ errcode_t custom_i2c_test(void) uapi_ppg_get_id(&ppg_id); if(ppg_id != 0x65) return ERRCODE_FAIL; - + PRINT("ppg_id[%x] \n",ppg_id); mmc5603_getid(&mmc_id); if(mmc_id != 0X10) return ERRCODE_FAIL; - + PRINT("mmc_id[%x] \n",mmc_id); uapi_cywee_get_id(&cywee_id); if(cywee_id != 0X44) return ERRCODE_FAIL; + PRINT("cywee_id[%x] \n",cywee_id); return ERRCODE_SUCC; -} \ No newline at end of file +} diff --git a/code/sdk/drivers/peripheral/utils/custom_utils.h b/code/sdk/drivers/peripheral/utils/custom_utils.h index 10b0903a2..9fbd97a54 100644 --- a/code/sdk/drivers/peripheral/utils/custom_utils.h +++ b/code/sdk/drivers/peripheral/utils/custom_utils.h @@ -67,22 +67,21 @@ errcode_t uapi_set_time_from_cat1(char* cat1time); /**获取日期*/ errcode_t uapi_get_yyyymmddhhmmss_Date(char *date); - -/*获取日期*/ -errcode_t uapi_get_YYMMDD_Time(char *p_time, char separator); - /*获取日期扩展版*/ errcode_t uapi_get_YYMMDD_Time_extend(char *p_time, char separator,uint8_t day); - +/*获取日期*/ +errcode_t uapi_get_YYMMDD_Time(char *p_time, char separator); /*获取时间*/ errcode_t uapi_get_HHMMSS_Time(char *p_time, char separator, bool include_seconds); +/*打印时间戳*/ +void print_current_time(void); /*获取星期*/ errcode_t uapi_get_WeekStr(char *p_week); /*设置屏幕亮屏*/ void uapi_set_screen_on_api(void); /*通过时间戳解析时间字符串*/ -errcode_t uapi_get_TIME_STR(uint32_t time,char *p_time, char separator, bool include_seconds); +errcode_t uapi_get_TIME_STR(uint32_t time, char *p_time, char separator, bool include_seconds, bool include_year); char *uapi_get_local_yyyymmdd_date(void); @@ -205,6 +204,12 @@ void uapi_ppg_get_id(uint8_t *chip_id); void uapi_microhone_switch(bool isopen); void uapi_check_spk(bool isopen); +void uapi_factorytest_set_lcd_color(int color); +void uapi_factorytest_enter_test_view(int cmd); +void uapi_factorytest_enter_test_tp_view(void); +void uapi_factorytest_enter_test_lcd_view(void); +void uapi_factorytest_hide_test_lcd_button(void); +void uapi_factorytest_hide_test_tp_button(void); void uapi_efuse_test_write(uint8_t *data,uint32_t byte_number,uint8_t len); void uapi_efuse_test_read(uint32_t byte_number,uint8_t len); diff --git a/code/sdk/drivers/peripheral/utils/custom_utils_at_cmd.c b/code/sdk/drivers/peripheral/utils/custom_utils_at_cmd.c index 01f3818cc..03f5954a4 100644 --- a/code/sdk/drivers/peripheral/utils/custom_utils_at_cmd.c +++ b/code/sdk/drivers/peripheral/utils/custom_utils_at_cmd.c @@ -8,6 +8,7 @@ #include "debug_print.h" #include "custom_runtime.h" #include "lwip/altcp_tls.h" +#include "ConfigModelC.h" #define ARRAY_COUNT(array) (sizeof(array) / sizeof(array[0])) #define CUSTOM_UTILS_MAX_ARGC 8 @@ -690,6 +691,52 @@ static uint32_t custom_mem_debug(uint8_t *para, uint32_t paraLen, char *strCommo return ERRCODE_SUCC; } + /*恢复出厂设置*/ + static uint32_t custom_restore_factory_settings(uint8_t *para, uint32_t paraLen, char *strCommonCmd) + { + UNUSED(para); + UNUSED(paraLen); + UNUSED(strCommonCmd); + + // 执行恢复出厂设置的操作 + uapi_restore_factory_setting(); + + PRINT("Restoring Factory Settings...\n"); + return ERRCODE_SUCC; + } + +#if 1 + /*设置心率检测频率*/ + static uint32_t custom_set_heart(uint8_t *para, uint32_t paraLen, char *strCommonCmd) + { + UNUSED(strCommonCmd); + + uint8_t argv[CUSTOM_UTILS_MAX_ARGC][CUSTOM_UTILS_MAX_ARGV_LEN] = {0}; + uint32_t argc = 0; + + int ret = ConvertCmdToParam(para, paraLen, argv, &argc); + if (ret != CUSTOM_UTILS_SUCCESS) + { + PRINT("CUSTOM_UTILSTEST ATCMD Convert Command Failed\n"); + return ERRCODE_FAIL; + } + + if (argc != 1) + { + PRINT("CUSTOM_UTILSTEST power_test ATCMD Set Parameter Failed argc %d\r\n"); + return ERRCODE_FAIL; + } + int heartRateDetectionFreq = atol((char *)argv[0]); + + // 设置心率检测频率 + set_config_heart(heartRateDetectionFreq); + + PRINT("heartRateDetectionFreq is %d\n", heartRateDetectionFreq); + return ERRCODE_SUCC; + } +#endif + + static const at_cmd_table_t g_custom_utils_cmd[] = { { (char *)"AT^CUSTOM_SN", custom_utils_setsn, (char *)"123456789ABCDEF2345678" }, { (char *)"AT^CUSTOM_SN_REQ", custom_utils_getsn, (char *)" " }, @@ -740,7 +787,9 @@ static const at_cmd_table_t g_custom_utils_cmd[] = { { (char *)"AT^EFUSEWRITE", custom_uapi_efuse_test_write, (char *)" " }, { (char *)"AT^SCHEDDEBUG", custom_task_sched_debug, (char *)" " }, { (char *)"AT^MEMDEBUG", custom_mem_debug, (char *)" " }, - + + {(char *)"AT^RESTORE", custom_restore_factory_settings, (char *)" "}, + {(char *)"AT^SETHEART", custom_set_heart, (char *)" "}, }; diff --git a/code/sdk/include/driver/flash/flash_common_config.h b/code/sdk/include/driver/flash/flash_common_config.h index a9c5b9602..d541fa469 100755 --- a/code/sdk/include/driver/flash/flash_common_config.h +++ b/code/sdk/include/driver/flash/flash_common_config.h @@ -115,6 +115,8 @@ #define FLASH_MANUFACTURER_XTX_XT25Q64D 0x17600B #define FLASH_MANUFACTURER_XTX_XT25Q128D 0x18600B +#define FLASH_MANUFACTURER_PUYA_PY25Q128LA 0x186585 + #define FLASH_CMD_LEN_MAX 4 #define addr_unalign(Addr, Boundary) ((Addr) & ((Boundary) - 1)) @@ -180,6 +182,7 @@ typedef enum flash_support_manufacturer { FLASH_XTX_XT25Q128D, FLASH_PUYA_P25Q64SL, FLASH_MXIC_MX25U256, + FLASH_PUYA_PY25Q128LA, FLASH_MANUFACTURER_MAX } flash_support_manufacturer_t; diff --git a/code/sdk/include/driver/flash/flash_config_info.h b/code/sdk/include/driver/flash/flash_config_info.h index 157fb76e9..51b64218e 100755 --- a/code/sdk/include/driver/flash/flash_config_info.h +++ b/code/sdk/include/driver/flash/flash_config_info.h @@ -125,6 +125,10 @@ static const flash_device_parameter_t g_flash_device_parameter[FLASH_MANUFACTURE g_puya_p25q32lc_enter_qspi_mode_cmd, NULL, &g_puya_p25q32lc_config }, { FLASH_MANUFACTURER_MXIC_MX25U256, FLASH_SIZE_32MB, 0xA5, 0xAA, WAIT_CYCLES_4, 0x2B, 0xB0, 0x30, g_mxic_mx25uxx_enter_qspi_mode_cmd, NULL, &g_mxic_mx25uxx_config }, + // { FLASH_MANUFACTURER_PUYA_PY25Q128LA, FLASH_SIZE_16MB, 0x38, 0xFF, WAIT_CYCLES_6, 0x48, 0x75, 0x7A, + // g_puya_py25q128la_enter_qspi_mode_cmd, NULL, &g_puya_py25q128la_config }, + { FLASH_MANUFACTURER_PUYA_PY25Q128LA, FLASH_SIZE_16MB, 0x20, 0xFF, WAIT_CYCLES_4, 0x05, 0x75, 0x7A, + g_puya_py25q128la_enter_qspi_mode_cmd, NULL, &g_puya_py25q128la_config }, }; static const uint32_t g_xip_use_cmd_mode[] = { @@ -142,6 +146,7 @@ static const uint32_t g_xip_use_cmd_mode[] = { FLASH_MANUFACTURER_ELITE_EN25S32A, FLASH_MANUFACTURER_DOSILICON_DS25M4AB, FLASH_MANUFACTURER_PUYA_P25Q64SL, + FLASH_MANUFACTURER_PUYA_PY25Q128LA, }; static flash_cmd_exe_t g_winbond_w25qxx_set_qe_cmd[] = { @@ -204,6 +209,22 @@ static flash_cmd_exe_t g_xtx_xt25q128d_set_qe_cmd[] = { { FLASH_CMD_TYPE_END, HAL_SPI_FRAME_FORMAT_MAX_NUM, 0, { 0 } } }; +static flash_cmd_exe_t g_puya_py25q128la_set_qe_cmd[] = { + /* Check QE bit. */ + { FLASH_CMD_TYPE_CHECK, HAL_SPI_FRAME_FORMAT_STANDARD, 3, { FLASH_RDSR2_CMD, 0x1, 0x2 } }, + /* Write enable. */ + { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 1, { FLASH_WREN_CMD } }, + /* Write status register-2 to 0x2, set QE bit. */ + { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 2, { 0x31, 0x02 } }, + /* Waite config done. */ + { FLASH_CMD_TYPE_PROCESSING, HAL_SPI_FRAME_FORMAT_STANDARD, 3, { FLASH_RDSR1_CMD, 0, 0 } }, + /* Check QE bit. */ + { FLASH_CMD_TYPE_PROCESSING, HAL_SPI_FRAME_FORMAT_STANDARD, 3, { FLASH_RDSR2_CMD, 0x1, 0x2 } }, + /* End cmd, will not execute and need return. */ + { FLASH_CMD_TYPE_END, HAL_SPI_FRAME_FORMAT_MAX_NUM, 0, { 0 } } +}; + + static const flash_qe_config_t g_flash_need_set_qe[] = { {FLASH_MANUFACTURER_WINBOND_W25Q32, g_winbond_w25qxx_set_qe_cmd}, {FLASH_MANUFACTURER_WINBOND_W25Q64, g_winbond_w25qxx_set_qe_cmd}, @@ -214,6 +235,7 @@ static const flash_qe_config_t g_flash_need_set_qe[] = { {FLASH_MANUFACTURER_DOSILICON_DS25M4AB, g_winbond_w25qxx_set_qe_cmd}, {FLASH_MANUFACTURER_ELITE_EN25SX128A, g_winbond_en25sx128a_set_qe_cmd}, {FLASH_MANUFACTURER_XTX_XT25Q128D, g_xtx_xt25q128d_set_qe_cmd}, + {FLASH_MANUFACTURER_PUYA_PY25Q128LA, g_puya_py25q128la_set_qe_cmd} }; #define FLASH_WIP (bit(0)) diff --git a/code/sdk/include/driver/flash/flash_others_config.h b/code/sdk/include/driver/flash/flash_others_config.h index c6e19d0eb..a95513dab 100755 --- a/code/sdk/include/driver/flash/flash_others_config.h +++ b/code/sdk/include/driver/flash/flash_others_config.h @@ -141,6 +141,33 @@ static flash_cmd_exe_t g_xtx_xt25qxxd_enter_qspi_mode_cmd[] = { { FLASH_CMD_TYPE_END, HAL_SPI_FRAME_FORMAT_MAX_NUM, 0, { 0 } } }; +/* PUYA config. */ +/* PY25Q128LA PUYA flash config. */ +static flash_cmd_exe_t g_puya_py25q128la_enter_qspi_mode_cmd[] = { + // /* Write enable for Volatils status register. */ + // { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 1, { 0x50 } }, + // /* Write status register-2 to 0x2, enable QPI write bit. */ + // { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 2, { 0x01, 0x02 } }, + // /* Enable QPI. */ + // { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 1, { 0x38 } }, + // /* Set dummy 6, maxinum read freq 70MHZ. */ + // { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_QUAD, 2, { 0xC0, 0x20} }, + // /* End cmd, will not execute and need return. */ + // { FLASH_CMD_TYPE_END, HAL_SPI_FRAME_FORMAT_MAX_NUM, 0, { 0 } } + /* Write enable for Volatils status register. */ + { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 1, { 0x50 } }, + /* Write status register-2 to 0x2, enable QPI write bit. */ + { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 2, { 0x31, 0x02 } }, + /* Waite config done. */ + { FLASH_CMD_TYPE_PROCESSING, HAL_SPI_FRAME_FORMAT_STANDARD, 3, { FLASH_RDSR1_CMD, 0, 0 } }, + /* Enable QPI. */ + { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 1, { 0x38 } }, + /* Set dummy 6, maxinum read freq 70MHZ. */ + { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_QUAD, 2, { 0xC0, 0x20} }, + /* End cmd, will not execute and need return. */ + { FLASH_CMD_TYPE_END, HAL_SPI_FRAME_FORMAT_MAX_NUM, 0, { 0 } } +}; + /* OTHERS enter xip mode config. */ /* Micro config. */ /* MT25QU128 Micro flash config. */ @@ -248,6 +275,24 @@ static flash_qspi_xip_config_t g_xtx_xt25qxxd_config = { false, false, }; + +/* PUYA config. */ +/* PY25Q128LA PUYA flash config. */ +static flash_qspi_xip_config_t g_puya_py25q128la_config = { + /* The config that before enter XIP mode. */ + WAIT_CYCLES_6, + HAL_SPI_INST_LEN_8, + HAL_SPI_ADDR_LEN_24, + HAL_SPI_TRANS_TYPE_INST_Q_ADDR_Q, + /* The config that after enter XIP mode. */ + WAIT_CYCLES_6, + HAL_SPI_INST_LEN_8, + HAL_SPI_ADDR_LEN_24, + HAL_SPI_TRANS_TYPE_INST_Q_ADDR_Q, + /* XIP 32bit addr & wrap config. */ + false, + false, +}; /** * @} */ diff --git a/code/sdk/middleware/chips/brandy/nv/nv_porting/nv_flash.c b/code/sdk/middleware/chips/brandy/nv/nv_porting/nv_flash.c index 0a8d37d33..8b340840a 100644 --- a/code/sdk/middleware/chips/brandy/nv/nv_porting/nv_flash.c +++ b/code/sdk/middleware/chips/brandy/nv/nv_porting/nv_flash.c @@ -34,7 +34,7 @@ errcode_t kv_flash_read(const uint32_t flash_offset, const uint32_t size, uint8_ } uint32_t read_len = 0; - if (flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL) { + if (flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL || flash_info.flash_id == FLASH_MANUFACTURER_PUYA_PY25Q128LA) { read_len = uapi_flash_read_data_without_align(0, flash_offset, tmp_ram_data, size); } else { read_len = uapi_flash_read_data(0, flash_offset, tmp_ram_data, size); @@ -72,7 +72,7 @@ errcode_t kv_flash_write(const uint32_t flash_offset, uint32_t size, const uint8 goto end; } - if (flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL) { + if (flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL || flash_info.flash_id == FLASH_MANUFACTURER_PUYA_PY25Q128LA) { write_len = uapi_flash_write_data_without_align(0, flash_offset, ram_data, size); } else { write_len = uapi_flash_write_data(0, flash_offset, ram_data, size); diff --git a/code/sdk/middleware/chips/brandy/update/common/upg_common_porting.c b/code/sdk/middleware/chips/brandy/update/common/upg_common_porting.c index b414a90f0..a102468a4 100755 --- a/code/sdk/middleware/chips/brandy/update/common/upg_common_porting.c +++ b/code/sdk/middleware/chips/brandy/update/common/upg_common_porting.c @@ -228,7 +228,7 @@ errcode_t upg_flash_read(const uint32_t flash_offset, const uint32_t size, uint8 uint32_t tail_size = UPG_FLASH_PAGE_SIZE - (flash_offset + UPG_FLASH_PAGE_SIZE) % UPG_FLASH_PAGE_SIZE; if (tail_size < size) { /* 跨页时,按页读取 */ - if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL) && (flash_offset >= status_flag_offset) && + if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL || flash_info.flash_id == FLASH_MANUFACTURER_PUYA_PY25Q128LA) && (flash_offset >= status_flag_offset) && (flash_offset < status_flag_offset + status_flag_size)) { read_len = uapi_flash_read_data_without_align(0, flash_offset, ram_data, tail_size); } else { @@ -240,7 +240,7 @@ errcode_t upg_flash_read(const uint32_t flash_offset, const uint32_t size, uint8 } uint32_t remain_size = size - read_len; - if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL) && (flash_offset >= status_flag_offset) && + if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL || flash_info.flash_id == FLASH_MANUFACTURER_PUYA_PY25Q128LA) && (flash_offset >= status_flag_offset) && (flash_offset < status_flag_offset + status_flag_size)) { read_len = uapi_flash_read_data_without_align(0, flash_offset, ram_data + read_len, remain_size); } else { @@ -309,7 +309,7 @@ errcode_t upg_flash_write(const uint32_t flash_offset, uint32_t size, const uint } uint32_t write_len = 0; - if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL) && (flash_offset >= status_flag_offset) && + if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL || flash_info.flash_id == FLASH_MANUFACTURER_PUYA_PY25Q128LA) && (flash_offset >= status_flag_offset) && (flash_offset < status_flag_offset + status_flag_size)) { write_len = uapi_flash_write_data_without_align(0, flash_offset, ram_data, size); } else { @@ -320,7 +320,7 @@ errcode_t upg_flash_write(const uint32_t flash_offset, uint32_t size, const uint } uint32_t read_len = 0; - if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL) && (flash_offset >= status_flag_offset) && + if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL || flash_info.flash_id == FLASH_MANUFACTURER_PUYA_PY25Q128LA) && (flash_offset >= status_flag_offset) && (flash_offset < status_flag_offset + status_flag_size)) { read_len = uapi_flash_read_data_without_align(0, flash_offset, cmp_data, size); } else { diff --git a/code/sdk/middleware/utils/codeloader/private/codeloader_execute_command_flash_writing_commands.c b/code/sdk/middleware/utils/codeloader/private/codeloader_execute_command_flash_writing_commands.c index 9ab9b48a5..2d7f92deb 100755 --- a/code/sdk/middleware/utils/codeloader/private/codeloader_execute_command_flash_writing_commands.c +++ b/code/sdk/middleware/utils/codeloader/private/codeloader_execute_command_flash_writing_commands.c @@ -526,7 +526,7 @@ static void extract_flash_write(const uint8_t *input_buffer_to_write, uint32_t b { flash_info_t flash_info; uapi_flash_get_info(0, &flash_info); - if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL) && + if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL || flash_info.flash_id == FLASH_MANUFACTURER_PUYA_PY25Q128LA) && ((g_codeloader_flash_writing_commands_location >= NV_FLASH_REGION_START) && (g_codeloader_flash_writing_commands_location < (NV_FLASH_REGION_START + NV_FLASH_REGION_LENGTH)))) { uapi_flash_write_data_without_align(CHIP_FLASH_ID, @@ -873,7 +873,7 @@ int8_t codeloader_command_processor_set_bin_sha_data(const codeloader_rx_buffer_ /* puya flash do not verification */ flash_info_t flash_info; uapi_flash_get_info(0, &flash_info); - if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL) && + if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL || flash_info.flash_id == FLASH_MANUFACTURER_PUYA_PY25Q128LA) && ((g_codeloader_data_save_position.load_start_addr >= NV_FLASH_REGION_START) && (g_codeloader_data_save_position.load_length <= NV_FLASH_REGION_LENGTH))) { (void)uapi_flash_exit_from_xip_mode(0); diff --git a/tools/dial_converter_tool/instance/asteroid/asteroid.xml b/tools/dial_converter_tool/instance/asteroid/asteroid.xml index 32cef6199..5fbe3dc48 100644 --- a/tools/dial_converter_tool/instance/asteroid/asteroid.xml +++ b/tools/dial_converter_tool/instance/asteroid/asteroid.xml @@ -1,13 +1,13 @@ - + - + diff --git a/tools/dial_converter_tool/instance/asteroid/preview_asteroid.png b/tools/dial_converter_tool/instance/asteroid/preview_asteroid.png new file mode 100644 index 0000000000000000000000000000000000000000..09d024ae3dee92ec814203792887323ab2232c34 GIT binary patch literal 227666 zcmV*jKuo`hP)a(vKhr5JZxLWRi?yapDOkwiA;R zz#e0afjCHPj75z|i4w(bcHhT&)pPG1thM*9+UId^-zJ-6ldMHnpL0*usZ&*_&i?jV z>s#Lv=&ZBO9*X^YU;5>nQi?4R2}sCW^e7?;NO9Q+>=l z&-N$145Y$&rzUuZ+sy)y+Ay?fLDe+gYwHc$C$GYQyjKbzze0ffoxlCce)qfT?2}|2 zkaqU5w$ER?vK2{jOA6c+0$;FzDYv8$43beK5j((SAeA;m8$}U^UwM5*>xBbR52SVx zvIRHIpa~n&4MMpMzy?5SJyALL6Ev%UGytyo(5{$sDTN6=(sui!fHeH^F9E6l*AS5U zV+-#T(f-{WbF-22VDUQ!c-6qX@;`j<|LMTBvyZKHK-$^I%5Gl0aZAA5gfL%-gt;jN zcD#c~3x{V3D1`&jC}Ng{CZm;o!{PKav0j3-*@vaF@G$^KXX7DzTY$-E}9iu z8x9$V-gBFwrMxfRAaGR#u3EqPzx}-U2aXA-*7lxaA|L z1T|6^5Qs96O1oIk(uHgpBqJnogxG~`Dc@;9GqylVj}AyV7b-L$G=!wbc_1}DJlkMQ zNcssqQnb0zW}9{&#{$xYU#{@0=C;QIkS_06G{@NndQAwXX8za?15%^S93jdCIaY%f z(E0ihp~`OaiV@~_l+myJ?ce&n4p=+;$XW-aoqeS2=5+#2+=9Uu_|XmM!i74e11uY1 zHP#CiHVjLZD6tFYdT*3KG))LdBUt8b*rUvddEfHg1F3(92U4FG^*|aPpPt)q3#LB)dx%FGf+}yL*&8>u z5{SKcO|NPFiV^yEwAQb@^jp8*0c&R;8S8+wvq#!Ke`9Bd0MkHx2@nLLTYS7hDM=IO zBsQ!EQU{_8qz(iLAQJ-8*n6S$D3K1wal?i~9fUp5l(*lNf z)Z8I111W-h1M^x*^Pe6H3LjIeNgm;+MN0`QSQy6lYZmq#T$cHe?CSl^gL}JHn-xIrbH0wz+t#MG%wpYK zj+XVy-lqsWZXX_YgenmM$|z`EGoWfk&lT@qdO{X4gMn8J@ZJCY@4njAws!VNSqG$@ zJrefIpT7L85%Nm_o;48cbuK{7++l`5Dx5d!8LJGWk!R(?GIAqwvVg55@l6FJ9YH$~>!#{!*pQEe&iL7wT;Cb2N-nh!$`_ z3HNFX0Kzd~Z8+C~k|PvRxHgW$oM?<5foPg=Xg6}XPbu1ZQ2u+a3A;5QBM(*N;)f4?iU z>Ffiy4oExuK*$joXbES8%TXk=?4p> zI1~Vv_t-w?GM3;<%y>&SRgFjL)-jOQ9MXlU?KuR5CNy5I1LEfU za1$o?D4q9hY>m-(1mti2*5CiV&QtB|1G5fDJA2>lFaPVGxuv!KiZIc$Qp8)*L_8R3 zrBNz{LK)-)sI@{-X;igl!U+wV1e__8f)WNo20-CGQ3s^51ybP%EX25tPD^SIUjt)G7v2Q&wM`7`>KZn>Ef;$(fSVzNas)EaPpFy6f7}@=ZA-uyo9-J7)arO zREIu%OTc1^mNs*f2^-#3hX83y#?nqYQ8%G%yH1)mB4Gt8q>Ee-w90)6@lqtC@BXdd zex+joclN$o2c(_7FZQ4P)nD0}O{QO+&1TP5WxYedC=nqN2`|z}9&{^hP-=r*YZSFc zUe?G3~I1tZ}+P@k`B zG14rFyRZJ4d<1|rP&7IWL+vKI0lj(idDeD62!Xk|N)p;wFl$8{OmlT;Q6|ihwjXXd zFY19*%^fpc6C3Vtfz*C&9xUlH$X5Jc%I27j1KG9y5a-T5_Qus~Prh{h#*^Rrb6@^T z9s9Slhi)B^cJ|Qht$+5?*1fy8pWVHC`z!bE-o3SVZx?%eyBHsgkxO)Gq0>;QUM5d_~Ty|G0mJ zz#MS$JLa6tE`p_e3g21O0HEP=4B0Cl_<*`)A0zqckki$TW{g^ z&wq~FZ@-QG-92Q}3`Q9q42_JSWdtQ7)FQIEHf=o|twqD6jbz)IjBUx&L>r719vt0( zA2?guF<}k|Qt5#7(1hZgEqkQ+7y#+K4B-8NR5&1QOJw|ZMmP;(qnjLQpsCmpjx2N6 ziCxep+FcXJ_HFW`P7B!ssT46p6f>ZLk3%3$2RL==G_GB{hEIR`DfUFqoIQ*FaKIqS z1h=Y2URS6qg}Sa^)w=%Hlb3INXXSDz@Yjvw^m5&(YE`3_fYcL> zd_LSpGi*Os+lGgyWimpqKfu{@kKyXoC-Lb|e;SuBU%}}!XVB~QU?fm!#m7_;(XFab zmKCb1L|v8ixL;T0x9YO^&M$rbPj|W0&W>#zkal(~%YXXvEeL$YNco&EI}yHbr?9>N z*dNdqki7dyIjcOwXm1~Hzx@{8dh<=Z{npR1zq^mgXpFKfx!grC6k8C5AvHi$H2W z%LA#qfBZyAx8Ge$G_s^J+ejeh+$fBj_PSo9s#G7U?Z#X{Esl~%Ul?CTW_wL^1oGC37>fPJjwV~cx zyAUOL7uF-y6zUa%!*NRZJefg|F`ENQ(TFyP=I{I8;>$oN9tcPSI|@iWVa8+I+-HcT z-lVt>kcLgl?6!Jti}0;tQJ6Ob_5}d-`*;u_4Z+j{DakC-F%pQ@wbjw}P~U`{VVaVc zCamiejhe}fCn>q_lhvvu0d>mv76mmZijfWmc>MeY2GP$v{Tb|BCJ^0*j1ybKNZ`u)7dH;zxrQ2C*$6W zCg0r=+&U!&q+LWrAeulJT4F~iX^AF6`H-p&%~66gN>glZZ*%BvZDSLgnns2VP!w6d8-lY@H5UfIFBO>&9iatw5*x1;_rAwD_Pl%I9ERswa3f>3!?#UNjyDhjBwgsDpiF4HpbDGMRwEhFWvfAqWm@Wm?W zfBg%e|KlB?cD7_4kapJCAO5Ysu$A=sFZ2iNUn$0K?{UY~Jjrz2tMAb>JcMbjU~tqV_$qDR&Z0HyOGw*VZ?2{=!9Exq1y3FI~dsi7lS& zDH8T@B&XVF2F|kZq1*y>RYBDil&UzNFSO!Vh;U8VrTbu-7goaTlrZ1^-(LNL7w^jG zyYC3`&HwnBr@Qi*&e%F2?F_&7-~0*ExqV@@`_@KrNNS4Z5==S1bd16>{*#k}SBgnLe_03J&WLrc?B|)jg z9lXsor&MpsUW-?$F(IMI5511%8Zb)zkUnpgj=i5O^QDd1#o+?uPkT?>Qek zv@2Sz-^1mKg7^54^{Q)N4h7TY*~Sq-x+-+seo&(vWxV%__PcA;l8kBD$Hs2Os#fu~ZnD~BO+QO#axSriPU6vm~nuBolg zuQ23^+K34EuXQO3EetAXR8W|i8V8U&_Y7XVqs&+T(m(kp-@1J;{^ra7%D>zJ>L=Wy zPx=M;B-_h>;}^ER@@G%~M@3%zdRAn=lIOENkuK`0fYy~&n*j+Ul+Y@N(FKgLuXDE! zE?cN<`zuw#sLBbCD=QV}bEfVZ^FU6oE6u>_wQu`riim(%)hLRR*_6!m^dVh`ase#} zzAPWjvsT$?$@yGSGqb9FSn!VHhis3rnF$_Se|r8L9ymn2a`XFzNbh%)i@Dmx>u|J3 z>Q$oJHD+P!CA4*u0UzvjWHnx_hOV7#36^@KyepxbAyJPc#pc#FF7I5$Q@`*uuHX1H z&Ye5QA`HwBc5LCQcHmiL7Ceg#RhctO*XKf|u>yyY>s=dDE>_s^E`1)=H)jAw5V$9R zw~fKiRo%Z`6t~{q-~Uzo3tt%Ev!8#p`iH-hzsrl?*+<+ukMt90-}|+TTOyJ#jK-6% z0%nWGx0+d%ng^_+7(mq}jILmG&Us93dL1W-sy?D*02vP;$UCJ)rZA*dL^XXffsm

@{!H6mP4{o>*XD>n}yfK3S!m~9;x%9`52nHi*_vG z;A9u;PZv(o1Z6J_y28_yWTRcg&DEJ5PNcTjcC-@_hQoDSIDZMhKp^_5Pvh*_$617d zCUCX3!Va4Cn_VcEyij6@Qy5p(tojkTiJm8z+eYvbv2*w-2dgwZZ!5yiFbs+ z+e+b1nd9zsyfqr_zlibVs~4aDtKa%`H2miO_22!corn4fv(6*^gxRQiBQRn_bTRy5Gm6}Pq`az`XscgT98Du>cJKa%&U**hgKv;fE(t=*$80rpy* zN9z=8gkxv&V5@1r%F<3qY$1-(OJbG)Bo9QhCt=y145lrQDDXjj(00XuA9$dw!MXw% z@9&Ww(;mPho!hhV=dp-*W)X2$AL0Ct0=BMM!s^4$Yax&vfahUe@*%H_`QsKV&ZF&@ zs$D-AdQ?pvX&AX+81+pEq?G^^CfQ&#fumW*KA3PQcOUi zur3ja%8Ej{8GEF4N%wBWq9OAhsP#f)DUe8sgnHCcNEs0nt8T>@8-d$OYfr zs>Ho4!}RVh)a|<%?$7!c(7W}i6DNQ5-~NmLZt?g2?r;3#Bfr4TK33Lwq@NJ`8-HQ# zxj2bloJ{mi6j4_dTkk2P;V>2rYCissbouB41EBK!iA-4M16j4WFJNjAY>1aJ@#5{zEmS4k-GDi$^2T$?VS9DM?To&!?bU)64134tjTc42VG z)ObhN80Rz8`}dIS?qYp9!{a8wrQQIiH`WoY_b};+oqKip?O*zh-+u9*-uv0}(_j5} zI$?*8v2{TDF}1()#f_U1_{KEHEiPggE|=&PWQa^54bm7G^aXl7OYfkeqZS&KP{=uS z3)BgD0s=`Tp=t@GBE)rsxJtQ{MW;Q)Ne@wEL6y8v$zE#D0%uGBx(*SSkfsF4J2gEn zp@E2lB|_9ov2}8bh3d(upr3k{s)G@S?KqDXIgf=sqn7NVSHMH7k?wpWw~1cL*S)*@ zU=<|Iug84e(k%MT^K9hR$<5WDA)4H%ZW?HZ`&&GURm9xTW4BJKX-iB9=VSo8VKW`N z_QDG&v~H_d0QM#o?8Wc3p3~IzM`xNtwBIKI8G$IPTRHDJP5UhOckRjRxV&=(>l>R~ zCrX4O0#7EtaY)wzsRL0iYaxkAY3Be$E{YnawwpCDz6(}V62u{=n(2u2p9L~wFcup7 z0yu!itjtgy>;doGL45BXHu4(h;y%u-^)XoQq3i>@qQX6uV^ZcjRiR$SfAQB}iHgbB z)PM5zP9XndXdRG#%2uYeENqa~V5?B}_iu;J79s{X~3V;~Eam^(LoS%wn z&Y=p?2dEZRI3f}gk`jo1iVeAi$CYLlZ^i}mB@V_DW@2(-ek7X#c+OE;^4LN!UAE(t zk9;5|TEtlj_%hzNTGk( zfNA5cdRDIeQsxwx=4yvUQ&vOwAT?y)*f@a;7cb$;m8&>+?lF#v*c`vD1!eJj3h(;b zP$J72Thby$o4@71jXhr$)350>NQH^+e+d)yA$uuwlAsh4Q>`!(3KLTLB9I=9fIGK= z+ixR17-6$YusM+E4`N^_ktIY*%CTF{Frj+YvIa_XOP1#Q+yBA8|DDtCy#2L5{Po}H z2uU9!>&QkQBl|Z$zx_g`#rG;L|3s|?Dq564MZe?PfPT;XTv3}ca8qp__M{d6w!-7C ziLy2gpf(J7M8tFjXmb=*FqI;NH z`(;^%Dyv{h#Wm0(?ITZnxF-bOG8%8z6@FS3xHCP#_|DIv-})Kkox9kc6?j}Gcx-bM zYp1p#POo7+jBy(ZKb=f*dw-1SWCj!^;gz~arpjr= z`XyEz^#YNWRAo?C8da%KB_)zFN0Lyew~sg-B2L$ks2Y)~VPXxPXeOz|kwz42ATn*v zjU5(c=XVt5O(afkZ=xt3LpIBiWiuWy^V0XORDlB0(YEAyen_5Zn5}JTHVfM?Gk*}xfykznUCom-AW8cyv~YRnGA=!F3G18dE@D!1DGLiPR25I;xE-6e z-DZr|K{JJ>M-9QJJzs582eUj!KFuLZ!DU;$cnGSXo(f=3)wolYxKkC_r|m`)sJr)o zckW>@o#2Ftu#prE+a9O2aVCi3&=kmoZF+1=egaHTPII{<$~Z8e-9 zR(5i@Ez+r0y(84CkO(CA9M4I*=G?XitX%efwUz!OPmn#nCO@j1b=F&L8+Z!`u+{@M z4vd{&8Z;TOA0-*EAPZ!8vnnY>AWyRomNCH^*d| z!P*IhSk^8**G?OxtSiil99dDKrz1;*lM|}X%K&Je{GOxRs8mJajiHw`13TaQHS4yJbd;kC- z07*naRB5DD#eYX}#Xw5WlU@y#me9Q#sn&?Kfz+-sxa&vCMF~v!NYL*mIDL8xd2tS9 zoug6}_D568#uTpR&@?6d?rbp!CyRh(4tf3ku;#M@&QI%6wssh|cAgA{Lmt!sQC3U0e%1Vn|CTy~kaBD4ZTy#xyt379zZbtoNr>6FOz}pt3-oWl*JN zkkk!{N!nwPE(aR{nw(7?mgtBeylX?c5Qd9%K2x#~weA;c&}vOcLdXd;1B0xGg&5w9j7RX~{lDFJC@O9-S};2sHF zlN9Kc1~rp}h^$14Nfl&LAx#UURe`#nTMvQ;<=O(RkbP!M`mz|RNwsxiuZ&~3w%t!~K^QACH*@pq7@Z_klMCAdGqTvwDg@4;zrH}G9+qm$r^$=}C z>@-Q40h{(xuE9)u^t{KUF%rk17G-e~bGTp5F?)sc{w#=U)~_uwos4m?zmM5u%wifm z@lqDxJm_kp=T6hsaJI==+kQ0SaIbMu5b6|k`qWwMT)oOby0yK{KwH)|3w9`NT*GkJ z>r`8^oV{sl`y4I>09*bdxSgFnwvzgh)&(l^YALmmB+&gnW@&;uTI2PCfOLx2^Bi}k zGi1955WD->&I?=`q`0xQiPOUvlRU$IRHBF~jcGx7{TjN|HjG0*9%YY-jwUw( z`!%IeY9s{k8e6rJ-+2C4ZhoaK%jf^cfAG&bcJD{XIw1Xs*q?gp+?Eh{u?Ai^^oRrR z!HniK5+) zX#r1qO?$p@KIbWsL@@@v0oK+wu)e;5wY7B&*48mxU&s3TI{JeFH{_0z#CoGqAin61 z-5|)55|EY!#-ju5-@AwLc*MC%BA(?%jy%gbM>xwe*T7w&)inb5nr$X~!j`;P;RX90 zu5WDM!o>^Nxw69zyL4rltmZk3d=BkRwYbA1O zp+@%*&Hnl+ie7?D3cOX<_(@sfXH|uJWraMifJugAl4GmZcsv>4@j-&M#2_PPE_t`6 z#7rqnYlT^^P!-Dd+2tIG;!a2`VFX3Sa;2 z-~BDkEri%Pa@_XC?ZRo<2Gx3=d%`&|Hz;ba@oLy%<@FrO zrPfhWKq(vArG@km%Gj_c>X%5iK*}KM!n@RQEy=<4biE4b^)=$8fQ)M-u9SsK6sU9| zt&k)$#L*COyoMwpg3&XqYc^ zK)?zWK{=miN;V2_E~jQgj*>}7iWX_d0Mhu5BZF9K%hr{~=13QSG!B527UEd+YoK3I zxYr;iGEz)AHCvxbBqR#;CdnEDDFJGlt|P72kfar2T_aAl?Gedj5rH(3*gCO}GpDwZ z=Q)%*Kvvq^s&E6czfR^@y+YqhaQA%#>M#`=q!Y!$ItUlk_T?qcTP5O95~t|*hge^? zjnubJY-4--Bm?P*6Wa`;NTG2IwGc3P9Wa`{RE@&2-8|4T9ZiQ2s%wMkr8g^ zHQvk$+|EmkOAV5bMy`43)xc&NVUsj@sVu7^qEd#bG?-MheT8XNqbNzH(1mf_LdRDb zjVTlN=st}QnV4I&mD+L^lG-4y4I*O9E3;E+{qpBO`{XxkW4`|C|NBRsclwB02c(av z{juw3Z)xD$fY`Bv)*=sgl{LkH?YgGc&kx9^f!kKm#iFckbWSA?YBoPAP*X>Y+R6%2 zcq}47B~g3XO07jK`fVCEF99ht{)wDa*}Q2&o@!#8M`{POG|d@6lX!?U9ipytUXrRn zQWxmynu$wNDi$m!M)BtQ5a&*Bb2$tR%2ho>%>$hQ z8HQ=i>e*6z3PDY$Xc^T_8I7<#UVCYuL%1imPvOj&$8h%SIh;Is8YfO{F-Y|XYuqh` zz*9=!qRcUD4dv~O%{@99MkVa$=q7v)*L=Wmqk))|J>nR;mol&o27O-Aeh&m=mxo&4eZj{uV;upf>nG(RO=eZP@Erl^y|E zv*ob1y0q;gtXHa~6(SdC1jD%~h4n^lqhsZ3Pl>Q0Tz43WMrw_KmAh!T`ckSj^?6n0 zfi$s8uQE2YOM(t*g*qvDvBC}|>aswbWL%TVEw8jjl+;%6-b5JoV{C72U^?64@EjH8 zPx6`pfSI4oM8RhjAJq`=T#zGz>~S)Po_!3D zojs2;XV3C$)UQ)Uv3e|#2T!(NZ#$* zaKIsuUcZOUY=cQ+0ajL#P&9aIm*1`u(4$e z+vD|;fYb+<7jhj5NR`Wt8cRg7;a;>dpfjts3Q$xd{_;~#UHzsq`1%k2@JF3@`UqJEq>qsO;_G`wG<+^ zpNMi#Ea*UCDMwCnB?ejvB#OdTKw39d3AXl-z%y;xoyuvYMpc2dc6EOSNc$QxQQSc$ zk|~D$1lyY%Ogx&-W+>_jipmw+Gsei~e9Xd?_^`|pY)ufR6%C=NVcyOODKuI{_R)wY zd`*A@rxvALXPiNQh*PJ}a7gs*V~^w1$urpAKE>f&(xvV7238Hqm5T86$N{7FvVFz@ zsaFaju%fl9ZbQ9Z@IcwwlF;5GHcj}~3o{6%(4!PUKjA#!pqF4UNHHAru(q~_?a2i9 z_Q$|GcVQ+I#JvH|ojHSx7cbz<*)z;6CT1&pqdcjywU`{<)$`scHLf=-x<~?`kKOE^@0VY zBp2?KOwkaHXUj8UA=&F>X+B|lMH=61Texx>9@Gh773Vc;Vn=!r2OFY-_PJXB$R!N5 z8)K};Kr(<)T-q?6u?76JF6mn}BuQOrD33Pm;nYbBq&cs8YdX64RQMHSzNljgNqk0hn+^N-67-`DtPgs~ zPg3r7jHnl5Z8SkTT*DKW&g0zKQ~dpEr=6?o+T}u(15=y#GvZh_Po?Is|W z)f=%OgyM(?F=mM`+@lh#zS#Gt~sr7<7zgKFylJ=hwRR_ z)X*>i#}|i)Mq$P@v?M)8RI>YvXggx@8Z_Fhu@79qg;!TSEO?6f*~kOhQR4Tj*DZXpE7u=#91f)D9Md@EGLf_A&f(JK%eZv; z3eKE+48!#kNYfri5s0}floukP5T_&LP$-l-5KzN*VxJldLIk2U)%sE{TLqfQ!J~FM z%cRz0L;E(Q&Z=4=RMMemvlHJ`w6mGwLWZu6?lxk`LWXtvOsF{bi$F7 z*yp1`iv~(#%TTCKBr$!t4wYMnJ5rPJAz#BKb~TIW8zg0oI8s(>FjlC0hBbe=1jk18 zIHZ;msVJgcZHly)U}Iwqo0A#FQ(}TD?pkAEdof#jKMQ%X$FYYe=WzI*=8xaX-r0O= ze~@q<^umRUEa-mWiA&f%eHMeY4fe438>7Lw3MBHh?YskB04fJ{a5r@hRZ|&90Y%R% zs{71Pl{tr1mGeTiQ|F*Z&Tm&W11j89ivF`es(Iq$%ab`0;hVD4amg4WN+4res1;v? zQ(K!ju^pkmPLC(hk0nf1LQ7>s+1iqe1Os8sz^PT>i3VX^%iyi}zO!DbM$AfHlD83c z2}xu&Nc6Nq3XRfeWJX~WMVO{3R8L#QF9KbuxQ=;aIKZhBDYi}+q)CP{Q_y)0sW{t- zh`_UMy-(+6wu@^!M7m__ zojs6sK>8urGgmJVaDKxWJZC?>{i!s1;d7zCg_TPdZiAIV=!^T(@Oe5f=50Y#Hv5>D zHlWa)Z-8usB|vyx02>OnLq3D3wB9Zelay1QQN}pphvAt#wppRKzLFF~){Cq(rhaLj~_Hd$M%!22) z(4+Id7Jes-Jx-7M-hz5e6HH+I8{76~Vs1Zl{iq`jDG{AMbsA4Rv4gAEu5){_t&^t^ zrG2LkWH?43wRS|C3W5OCI1jX*!qhXUB8Ms~)MaIXvz(wT#>mSt$}&f(T+OexB}>%x zhdji(wqhEJyR!)Hn8G3 zIcy%NEV&%BGS+)nG|e=XB^zV_qS-sp%( zAFy>m`T^TBS1+){AFwF#XKiuFT_g=1hk-g5N^C;K{zuo=mwNA32ELnF@L;9!ib$@s z#J}cCB^qzF72J{9Qjmz$M1W=oHOKtqG6u!8|1vU2ViIehvC3E>hsZK})5IXvHEJ5j z^^C>zYhpCIM&JVxbB{_2U8X5X2oABazK*OQQc8}ZwkkSIIPv+r@PaniA+(@t&i$|Q z!t)gqo>e6`Vdy@1w-3iJAB|}1H$ACnIK-(_r?7MR3ZA@v0~aq}!RFR!L}_X@WR;cV z<4`Dhp{leVsL2^bp{6j^2&$N%%5xSDsB*=?SrrE;^8?I^5%O}1qP9&3D1=#6wg%XT zG`U|bV+OHKBN!zaRGq*sTnBciSj2R03!+hsNG6cvl@gft2Ivjfu&xzr{8Ib8*s!23 z%N0tV7-%QrQQC5r+IpVChbo+aKKsEe%uu;|$Mz%T95Detg?;Iq#}jTNSP#}=@*JjL zq0$L5RbxiyLN|0Gd9p^cNZUiVWY2Y6D8$(qdwU~H52i3_f^-O^)OMFOt831G+UxEX zQ#G}%?0FiSd#>3Ft(!#z9_f5|f0;73nDzm9Vt(`T^_}N`{Ms8G5$OZ84oE*h`^?qz z&l#9+v_kW%?1)?&mIvEaTP^;%#Nchla^o_HZH?+8gm{o7&nI^P_5^1 z*vGlEXK?w6CvffB4P1O;2b(8PL6D@POKKBWRMHbRkS z+>f)$tw&1UXhA@lkC7EqE=j4lRUXMcYUHIxSu5LOPg$0>qKJW}u&(6t4O{E#I=M(& zMrFOx$cg3K+Eu~5M`QM)2Wx96GXnAgip1X63-(Y+RDv1GJSS3ZhZ&B0w&Ww2R`QaF zQQTgQa=oN*Bz;Fx3&sW2kdDVZAy^x3aOsWem#B4&k`%de7oz1dnw-=aU`&QgO>lQs z;?1hS!Q>vMyCaMy1=L!EsI>QSBq|8no~{GsY^w~Ya|mVgw+*?=d(Cuz3+t6C*Mz*C z@Vcmk3A!UK-XczbB#1)M1pVd9H+H`E;~%{7o%eQAcXnLsfb;{hr>{Q#4Re%EE}J>B zPSmXUEiG>`ADT1^-jVR6BiD=>O?b0~laO+=7z&MoM?cIjs@igR*LkE&xp28%@?2^o z5ix^OGhvBpQCY~rd7})dl`WH@db^TXymf^>586aJayd2;@n9~aKD6kuC;(~kZkFrZ zuat-*bx~V}B*dJky}tqvo)bOV7D+`%5|En37ml>YAP_Y1c85vf+~Ht|vu93mJF#om zuHxdwC$LFE?&QL2U(;zU=bF7A3!*|zfSN#b3{y{_%Mq&V0LAnG*=)>mc_r0V76hs@ z;0t#H(M4TFB``5Cxq>_#t767T!&$ZorY_}QTxZ7_- zy2`WR8aE-Rs4RuT^Q2$9wuUt6LB_Fb!{!q7URI=0H>w-9Fz4Vol0i#F@Wen|3k8C> zOjnqcIVMHMVQSI?rdDTFKSymMsGI~CgiGAl76>szEpp8C40nqR{cMKK@d4^-#^MXA zM3$4Nos&v!ljw5QLw;1~cE~$)0c&y2Uld zPSn4>^QkMJd*h$K{* zU4D&#U~MqK+0&KrTGyses1 z1WY24JOQEbEVTukP*~Pf*h7T_${#Dk=a|n56#b0VhESytm0&^>C?8vrH$Q_C88T5| zUze=7mDe@j#|rj(DC+bgGnklaLEW&*-$~{2w=N9LjCR*2)fKo{Ff~@cAxJP_K0`id z;m`L7e)kJIpSnU#|G)UgKYzW;o4$|M0qOf_PhYus6UMyUgmRCi{rWzcC)b0*CMs!~V0(KT7cX7F&gC6Ee*ST6p4fz>i^n-Qr*eTHFG|;mfV3t6-AA46qs;b^ zX9t)$5S>m&m`?VQ=OdKmj6sZ;s9COAbiF9F?c!4_l$GRAxm_r-;Ji>@-lDW)W1F^w zN=OHG?R_I$?@`0e!v*KKW2%ECP21X*&r~F{H=SZI7@|LPTEHYV*iX?Lq&D0er+oj= zXHw}Dhe#=UL0&njZV~YIhmZ+*qu`u*URAg&HQtE~4kCaYNm4T!(8Pg=LlhR_q=dAR zlXYP|(kg>C1xi$yLZjz;tfnlhsBHc?qYf}Lsug4PEg?i(P(~sqEV!WCG9K9QdsCX@ zx-n_Tc$dK}OSt^_QVzg{vPDBqTet@;JD(=-uV22g^Ti+kpv#-SU)BNX`(#gFx%iwV z6)lqmK5C|e=Fw;h@8`>B;7CYp%_$qlowb95p#ep=GK4%3I=MRnQqpsk6e@HYzQiXf zSuM$izaT0ug4c#}Rxv6qk=7CCw)#|?2-~@&pT-!Z39>lmmRn5W@HAz!Jm4(lkUs!h znHv?0$7GNsF^j&Rd;Bq6eBuc_Mj*Pm$#Q^A&W+1iTzQMB8)hzhQpEwPY!~@t4^vvk z`xq05j>nizC%ly96cv}gXq34?mP_P$gtAOfSAv<-Wi3#0v{NwgOBpL=r(A%;v$Fm7 zZG!vWc;zE)@03PZUkVmUu#st-XQgmGwKwZcXAGo7tRh*%UOz$FPcU5TVK`W0U1lOJ zar-qGSI#BaL#GKNiK=CK+3!;Ix6XOstHUzXgVN` z+_b|9Fa;i|1ITc4YF3XXijP~~s^tZ9$&4Fd$h+Y_ zjRg&qn#(zA8t`=ltrI9sMeq?bMlC}$W)>)gcn9RYWC==YfmK`2$ar zJ+7WH76z@O7}xfN!-+;7TpAyr!rn5%aD5G@&z`~g3+GvMVPkWXJE2%%g3{*Tv|k*6 zYRdmjp^FJh@<1nhn2dKZCJ-HsFdC0B9?dYDW!#Fcq+Fu1;n}i~$cqR?5u>VN=sL1` z1e~wdPJdl6=&?uYN?eq?h*sRgWk2elN05n{I2@bCW}l%6gutEuqK|BbUfT1rdtIOeV4bdVqt;1P2FG9E@ie zjj01l#obL99Er%KBh+<_g7TqN%(+npOqO{xtxA=0eQS;VPPueP2p@-Rdc(H)U)|*9 zMOY?fETx8knFKp322;%hr(Q*Ms)oa+X^)hy1eZw_MGrL{GlAfmMsH|C-$Y7^sWEx4 zhnhT20qoT|-YF~Gu4}vv0#Swiy26;+5!D(eC^bMV;H*TIl*nl^QVYbC|0N)u&Y)*A zn2dxga>|B62q&mOvV|O4i8%d{3ZSobqxi*TU&1urvTy<>aMwedfM**Bq=W*OQE;(r zR42HD?vs{3yp|l#J#pj8O=HX#-|Xs5ADVSQ`jG6IYdbdq^F617Ip@K7JAxF@Zgao( zUdI^oS39=z!?-yneuUB5#SoHlvtb|7ZD6WJhsFa%C~xKmUD%wEX~M@2WVJmBAzgM> z*-%&`wlC><1&D&TXK#oIC{fB_8pR2FZ6uIRWD+7RmBIz4gQl*cA-v3Ah$dfo)CCH? z$2m|m&HEPzGZQ4Hn``C03inakiTOu9q??DlcJXGaxIOcqFQt+nuqFG(9TiqA3yLNI1a<&8^Th-;=_6 zqYaR{=Dl7z(Y2&&THu-X3Yl=+a5~p;`&s?_G!3KQ_{pjJ4i1^r(OC8UOV=-d`OVjU z+~rLlf^|Up5bT+2JH(9p-qH1;$FZZQnaB2GvW-d)?7S;qB!2aKG-e3dY zjqHOX&Is2UO`~!wUjkS`YB5YclI)cVk+4Q@9NX7u?#&?iU z?padNY>MeL!+4TmJT7rCEwMMQF`5F?49F_VeM%c5HwlbRVNA+pAXKJQapM6CaP&QB zI}@-BY-3rb6lH1Eo5Snix|a}?3N*wU1mNi^PPv1S)nhiy-maw;?jW$C(0o!>45U0E!iv=0=JdMo2tg^O5x{5V-E&Xr7@Z1n2jb-(g(S_h=>(Vn@s<48r;jvAhiH+0`;tM?QYUht3>yx#|s#yjpOIpnn7msxOY#gf;i zUC58?PCeU}JW(1@SQW{*nYPWDY7QgD-1s}`QJbrZOJkVA(d1u=A!?;gg)t2gW+mb0 zJ)H02{+59B$Y_HXk1!mn+&Zy|vu94@%;{6uSQ{dt8AR;_+Eu~weiX(vO{M=2{Ok;hkS z?Rwvm_emed$_x;70jX*R(U?lKXfZT!T7eSTR4ChXVWE9Tt}=}m=_4PJ(?9lkV#l-= zflQ>ZG-$pmIc!*&%gQF>m3Q{Jy-{%@4-HM?eaGOGcU4m zBpBV#8+w1d#MOs!_?&g|2t;sNM@|&Pe5kWw$Oa`h!YQ%9)uPS;X+v1C&s%|h*TLF{ zgW{#9DZkbLc^G0B9@JJ5rQV$#3rJU8GasCDgDbIgNulY? znNxV|>{*=LI>8}oX{;WrAaaqiWTLtlqoNS*^d7S5F0%1HW}^|Z$po|M1P5d5iDsF? zG&h)J7DQ(RqBXHrV+*7vVxbG?XIUUMa9v5jUa9e&f?PBBc23}DM*ci}xsxB{h3|CQ z0%>!BSpAj(lz~*(2Jw*t@ru@K#oiz_i%&=hqND}}0=hRvIhmqAogx|zQS}Gd6%s#_ z5^tyqcQ_YXqRLC?$pm8m0OIZ#gHeTkA#p;dSQjZ0kuZ=d_V#U$BI<=3)fp4HG%;~i ziHN||XqGOFj1x{kdwa9F8ZTBYGR_m1-fOqLMtz%H&w>}hWwhR?W%~-BFKrZ#+%@;n zi{PFzO&)bc$Ef4kw=Z44^0_x(>%<%0t#v^9F730|F0WwbF56M6o! z$4LsWFh5=x=b8Fr^UPm^Hn$|Hw19z>!haP=tF5PP!M@VQsW!>>d_SoAmIpC6u^?}3 z&`WXh#0i``eG;d)x3D(oA*Nxzw&WsH&7jH&6N=aio$O*dAt2pDHXdU(nqo4}FdAhz zI4Cfl)I>lvtbp6WKo3C|@-gjdikUpS&_SzF$fS`Qnt&h%8oB3oU+cKi~5{zY!bY8GG^ibQ^ z#8PNj1f>pQfzXe+P?R4W+Ud3*4w|7sTkl2~>z(p@YQx&ET<|W5e3Y|iMNCub#i^aL z4iP=Ly_>W|nWY)~2NVccw5H5~>IJkb#*qbUv!X4u~^FdEg!awnhwiK32B);^?b+0Hd&OO8RS ziEPP5%IPDUxsnPU#u4VOn`k{((UN97*~sVkOt8In`BmZCt7$-!8 z0a6I6hlN08tPZr~P;$*4sM4*ZU(d~4jWtmm=dkaJ%OXN&Oa9X5#z!8ypmn$|<5_IqUhv1#C%)O&Oz4>~0aG78XQHZM(6Mj34D?IiyU| zhfWlKzIHk|Z@Ny(Pd4=GJa`jgX?L&^=R|nj?BqiW&vdrsVZxXu4FJyq*FIM4cdi#c z^nr{VgqJTqx%0&iOpk9JkRH>Xxq69aYTtWM5Ph`5xi|zG{H)l`azoMkh0ZWu;!QZ^ z6*xyytcc_`9#`-g&3;1<*Rv7>y$U<)4oN{aqH)qgl=P8s z%QY*M9><0U<(daZpT9lY4Lv$C?T;-yKQkBl^R4OvA11htru8y}u-@p}8cuC*;q>+i zY_9c@N(EC+x#4z|O_0w>k!TN-11qpF8tq|paKHi!BWi3u$uODZOf1SWu&f`cJ}H;` zBsMMqC@r=2{X*@4t6lg}n-(~Yhf&dmH;@%%1h;txhk8 zZ?)}f$_tlvxza0lpEg7(2WHKAdkyL^^cuu#n+aSKi3w2ENe(tYq>v2fJbKSF@}J+v z2&`C%=N5=iRjRr19(WYG>A;jc(>EUU&7VZ;fb9>66&r+QcA{oD(f8=ZTU& zE(A}5e`NcL`P!+&Q?lX(C8Y;nEUmNl*wpP#1qA{)|cW}*@cAQUiSihiZAC1WJS(#;B_d5ujiu_0ru z#}PJUgf$Z*=JS^*Ih?Gm!jJ<^F1gaW^^qOOMFuXHYs+_3M+eDSA0e7&nRy^nQ3dLKJ3h`#rs*@!c>H0Fb5-`x` zDC@>X73EEd!As<$)XM2`F?_^Yzg*nz#2Jnn*$ zV!@Ne6*OFZBZ6-?@c4uC4j|th@8V=?wfXyWevm#4D%@iuYH#1?#RP@%-<2nx2`7?I zDRRwnd`4C2 zPFT9qpjn!Gy(v+#fZuqfE2a%5$Y(ac7vCpWw0HK>eb;CR`|_=Y-{QjdbKjXTL0QZ~ zIK8=#aEl-G#4qh(i zIp6E~m_;x(ErhSk#0D;IbL>vx$gArx`N&u@OGG^;3x!@$Bk3u~ga$*oP_nUbQV>gI ztOq&I`SA7P)in!)qnN**LZFw#SReMWzBWKVO_*#`6S;^y(eWN;2lp@??Qt&jVE+Jn z2P2F|4nSuW#xsRk4&)_;ZEYx5IW{hZaJi_%xa&osQAY}D{6x`)q36D<`}}?Qmdi1a z`+KAF{%aTo34y?C(Na#bB2ZC=Rfou{PZfoGrOm4vpl4zX==xHQTttYRPssuk%6gjw zj8xJ>dDvJu7Pt#4bMIYgBOffjpp8>w@`r629bwauuvSHG#KJQlQ3-13$qwu2y0P;;}OC7rMq0TM;3gC4ot6o@y#FpQ3s}nSO=tsSm=o^^9PRa z6|Qp54i!FlegC?9?q?a{9KPL3r|F-HLw3y*VW9!yN! zAW95X?pD*oTEEYLO2iiG3tCk(l(P|L2M3t!Q*QJC%(dW*RI=8*ha!OqBrb`M#8eh zy|R#W0A^(Yt>C-~fK(eZ2WBE@gV#(37lbJgoKKi^2*EA{NfG?MTHk#kmUY+x^wYe_}+@aBV2D*&bW5x1;Y z|D%Q*Xch+mx8uO>KT8OQ@}^J7innonsTK{fg$EYyYijEuZDh{^YE)TrQLS{77c?P| zHYmL+6n8(*)J-4`33(dR3i3Dm^Wk16WS$T?rq{!u-$NWpsH#LhE1`-hG6K)NJxuoZ zG2yN)Q|uqml4Fw9m=y+DEs$4K8w#t9>q5E&oV6RAS=2x9PK*hF)DOn1<~0jBx49_6 z(s$>+FVWsl@6N>hXDxlW^-7idyhypAG==Ty93vZpwY^U5Iwnw2zfxG)zM8KMERgz= z6Bnyx5T${UfLGeKY+&!S6=9IB1jV=u=QVRzT^w89ZLi!zs`;@ zv0OWPKWo7I0ms?7d{7Y5;xQDC_2{5aJMC6(xLhmtTvU^%{BVQq4NTBrEG=7?h(>9W z^17nPxwM14(dqs!M!WkM?;o)6{CMn1MFgT6Sw%IWM4Ise^VSPhfhYR^v-hUUk{#E% z*vi~hb%s9OeR@P=?rwktNs$sLc~FEXUO);_j2n))v>o@ipeG>p1d^YC`f2~d^{*TL zMe7M-I3fQ)+ttlYo$zKnOTndLge3f}StW=FQ`y0CS6>Myn6jZaspL zM_NpbIOG{O5&xFH^Yh}(y$xxjiILg>n1O+z#vs|2pLad6K^t>B=OktbDIKZl8%$!D zCOto9;F4gjPp*!Y0-$W`PZ}}PzyA48KKLD^plH8iq@w-)ombz(&oL8~Br$7bSzIMh zZ7VFgAkG4113~0R0U150-E+#Q->e z=yO6nxO@mGvVoDtz@joQlZbCoSwuE0J*1UGw2fW=X3ArZHpc4-WE!l%CM;iXvR{TA zP8-Yd`D7mx8D9WW2te|&DvM`Ui;$n`ouZ9bVS^PT;tHE^Y(OwVDn1`jA;P_4s&Z>tFl={QSp1`5iM&?RShcwLiG?>N}rjCR%Hy&xTCAR&3*;*6(u78@5W*kJ3Yt z59(6DhewzRelX8OmoDbn*-Ajh6Kti6$^@`>8yM(hG=j$GHTvS&(-|E2yim_T?>~UO zhkLNUcL4kQb2vO`15(j+nKV&13XGIeTUvs;t7=O6$)yLgZyt`@q}Ell8rsvjO+>o# zrdo)IRjscTYJ$x+fpkQ{g0$D5ncJ9)>hq8Z$iSO^eH8DKv_go?H1sniNH-V*j(k9p z396tCIxKeLllz*onfJOf^NWJPl0amUg-8FH^H(80LwI+o!cp?|5@-YYYpF@w!3pO5 z{nx(u=FfiduvQ2( zvM}~#-kMQJvGDz!PUrAA_(Jz!|M4Ll9Lz&*XwX9Eo{3tRd#v0Pl^b$GA!(yYTX&*g zpfpgeJy9vI{_!ySI+gJ;#1V?IMZO#4-?*@K9v3-=<#)BF7_%XhW)z?TxKArJYZJg5 zAVCazCK@n>Z9>Yz2rwTj-I&No6H_usj41g=LsYK~*uUQP%e7WT)UHwKQ!E}wNwaQc+Yd{?bpuxmy44sc%?F#w9t6zBI-CzFX zchS6`dq(PB~xa%AY9SQ^dE^T-fY-3Q6u&BEPbD6(>l0+Apfl&##Q~LoC=- z&zAk6k3GLqC|8uvXf~cRUU(XR%1h0#fgbAG=xoJDbiE6it$R0I3ylrLAcLWp^xo5 zA_-!AfImI5^2Km z$s5iTS!G6UMo|BE1zQnbLH7_W3WWc#_nA%kcOnC5vNlB5NucHtoF+0;|MF$HqCpxJ zv3H8-R7O9Pzv^kEK}itt3Y9c!l=3qK6L}MHfIah{&1SHe&EVm~J$U%&Ak+|@O&!b< z6P*X3c@yFNJQH<^i8>igTo~(W)9|agxMl8(}ind>PCvpZMo!` z5D<(}-2y=d`wg_K9~4*47K-~w7L$jkRxwDQ+5Js?(LGMAsq%R}p$`l-p$_@LqmT=V zskk=hK10d_P3B(~OAN1+fJ~KyGyiTpBlSS`ooX&!O-~9eteFdlOGBU0Fj^O|V3dof zJ5$c1*AO>ic!M7SK(g@3Hp}gtm)S`%i zyw3n~?kK9E&{4{CFFAJswlI|mkGic>0&HzO)>`rv3&M&<%=GKO`sniqbpN?yr2p03 zS9b9^23t5@(}o|aEovbny40BIstp-UWTZ7n(Y7=z_3zlKu?z)4k*5;)fe$zeX5CoT z!=;>W7^$w}BS*ZZJr`zM8BBFrV}<2POT9T0cSU?o0*DA&XVNA| zJ_4z2gSj`FQL`yJ|4Y?WWK|c>IKBV1ZR3k;f*QS2QGT1gDkL`s91#gpmI~RM{F@Yx zYQj%u`-(;LQ8h-|+j@k6Bk)sCQ-ARC-P`Z}>ZhNt5^SdxiT+Hq|N8DL&q+Pevv0&q z*`JqS(oTy9oyK))44wR3tdX)mOKJg6r!gswB}D=QTr7QF=nVGv4`6TKN9oSs@NfZ# z(e8bhP26qID}{o1dD{kbr%fS|BwYHh9|Ys3UyBJ_Kmhm+s#F zTq!D_FO3x82gXmdkzf6;slgD%MK$1pNg&^-q9liRozQ+rNi*ut0V8jZ)}*umQ3o|u zSs|ns(oEY#2pfnA_F#?h-if{$=n&rG$DTgwekyH&fe`e7MWXHk6ZJ>k?M>0YiaEfD$Lx zC?+!GSzea`U}feAj*qX4q?tyI(wk>}L2x5g2^1BEFj+E^9~9eIItTf??Dx!lH|mou z`=9D>OTdP}zeR~OnvEP)ZuoeVdk6D#@qO}sc9j4CAOJ~3K~zanEHq1LgOL5{v!+|I z6wuVy#4zDBp2m8s-@8LcJx}d(qmlkMcVB%!Re%3oD_SqHda6>!I@(H~BP|9WIT3Ue zh?w_Hh9Doyd9j0Sg?869v1NajQ@{vi;7v3;&lf(uWex|2z6{zF_77&Ea?N}RLHk^$ z0^F^$fuVYQVM1`yd^6t}K}3@xa;diUp5k;G>7N$UEB&J+62ol9(vekN^(d`0eIkf_ zTKOA+%#()cG9#4QV~XO68fidl2vKaQ=ywiarn;#H8z3H(`*wV_rB2m{ljS1J)Fa0;TgXHsxQqT6PPqngn}{Wj&|uAs{5DU%jY<8ON=1< z38gthGe!g1@=?=}SjP$lnbT6gA z35ku5Ak1p<+-2q$k~PMd_g;A8?t|Za_|v~x*@{w-RY;Rw&JI@I9!=J(^~MsUml#k zO_qWvcnQC0lxCtZCMH_Olo`p820Q`mK|quXvUnh5$b}FW1+o}>X2>p;d!r6CqC_E@ zEYNjE-Dr)uHilU?)wxBwx5!27No(eXnO!B{yZOc&|NO~^A3oQ(yw5cw{pOpmy@QCs zynqR6D>k`YqQS}4qCk((vLxO;N6~MnYd8S4l1HL(zT^;$+KP<~S&}a6qlV~QBmGyX zjc~#|B{$3vv(f#hZWSz84tgaLNIz>9ee(B$k|YfQk!oj36DKm-jWc|e%uJJ(K+?2P z)1@Dhp1_Hz#NOk?--rws=uNKPv^$;7!fQTX1b;3NN-CxDAabe;NbQBzG?p55F;puB zv{F1Oby~e5Slbx5Vtngro7!?P&|y8(J@=7|FPjA1z~W~iG39L{l4YX-(=;KVDEdL; zD{G-H=8q_LvOxo>BTzZ>j! zR~y#73wg7Sa%d}zl>R0Sntv}2RC`ac?y=4Lw7IdY?x=i(K^dY(j>J4D|=szwp*`n=SENGSYXx`1&pv=H@8W-!akL z^7g1QD`sMSXLb#N>%QtukkcYHfcselq2R#1>5Qxc3n{vD6~!L;T;zZu?0Gg#Y*5^C zh@n!;5Qc3Ecp;#2VwePBm~m@RXoWJE>1njSt<=XjYs`_4EpTdw#VyfLa)(l6uKxo9 z_V=aN{Htw)zdFtXX``N*a>*D{{Sy-v%%il1tkLVvdZ0fXD9x^B8&EHKk)Cx|JG1^p zUuQc}ZS@DLeIb0S=@s(#uYU1M&t+Q7b7|T&Cgh6VPJanAQA&?E&NX43o!#G_7QyQ@ zlWTnv5mSCqX09bO(>s?jR+*q^EiisC$plrqg7{nz*&GBV2y9^%)ZbxO6M7qO&u z(BA4kmkrgL&Pgv?>n%mN^5Hm5M)GtyOGjJ}YCV4<+WP<)O$eu~fp!f@>q*XQN!L%Q9dGleGdi$zYn<~09`h{kv5JYUYRqE^ z%Fw^o#6+zzv$I}X9qqDD>pX5h484_x{iDCuZYeFO^(EATFtdPmxd7LutEWO!$dJY8kl_T)>)wjO%+@-}l zR~qTNUw-vHaG26u`nR?=_)((@5_Oa2I)q|~$Qn_k;VdB0j@@LM%gTo=DteS7*cFud zkhR=igRTDpSiI|BazF;6kk)IHCDIU1s|9@{UDuebH3YOJjI~oyq!i?Vi_FF20~?pW zb@b`DfaJZ+&=9cNWkgR@1aFU-w*L#{=gEI}Ek){-wWHYTtvbE(+hoD;$XD$$*HaCq z-4wAa{g#G-NCdN&;Pdi6mE}WG>xRadtt2UE&*sOr$zsva*cf1D&ibgy$I}awd!QR_ zeS)!E$Gp4Vg>ruo-n;VFm;TTDKlblpkV^J7=f?^~m1)z;BChcwf5U-`VFnck1qkR>V7Fp<2> zK`Zr;fs63&DEg?8t`1AaB>6|~b7Ia{BZzF9dJ z?fu=izVzG#A3YZu>APQfB@~$L{!-ZRDS0{m#rg^*apMZfV%_Tf{XIxpZ#8N{a9-w!BB%=e*=y5B4P;o(svcKPFV5-vd+>a|vC;)nN&$VAAmlYdO|}V5#$^?d zleNM>T;$wg^=Z3)r_y?&qR;!fc;sb5y8?C9{Xk6|joDJbebJ zHMgFKb^QL-u3Hy5^zWz97b)DWrw5*(F<^oe4w9DYOb{lKbCF5f(QXe)qXEfCMXlAC zqpBZ}n5GlJ3d~RwgA6EJLeO_o$;CX{2pamZGg2vdkm|4w4PPJXQAwZjPLT2M>6uS9 zJ-g3K@X<5RNZ9#x zhDe_~sxxC)|Ngkm812E#SJzr;pGYa8B-d>euwyC~nsuJ*I4e*pzNLb#@`KajFeH$P zG&(dk041=tr9cWy@@+~j78yI&<>_aQ6o^?SKWAGV0Hw)wgg?`>w(A0qsa#dxiPx({ zOA-n}xmwh9D5cJn;bZzHNsE1Z_ls|R|G|%c^i0DDKGTf!-QRoVJrMAJv57@O(q3t^ zM7ih;Bi-;ZJ?%KSq-x2oqkd+daH>u5rjCWq6a?JlXJy>YBqgIfO1E;;BIcl#e0`E; zPeWW0hD91T0#cy5q*C)U!2QwJI6X~!RYNk{$$LvXyX5##0{7C21r|j5EdA>~i4np} z$u3dZFY*!|+%A18ZgH>?_ar#VqiWvR^SRzgyX3ofU7^ZyA;pQr5PU?CwP2bU?SPhq zHRO~Kn?N0SMG?S)$VryWG(_Lp_y^S^jUY#vLDj4h!4*Tm2mC}eY0h+^s0xjI?Iujj zAm$L%-WNbB#-w`0mD!Zzi}1ZGZ+!8e?|=B?XEylgnPsGZ_O(~vMu*>D@907kEap|q z(sc?@k-I9_=x^)t#j_{nwKmL1q-jSJbA1f8qx^Py{TFw^tO@2EIAO?Doc(Niw7Sc> z-fL8LBo1ToFlW^b_1>p%*3Ua`uX=QpHLWhOAwV@Jyee3*03e^X_*~KO1-nSdUn2n9 z1ZEoSuq~eL>oaJNWiOUiNr`vQjN*iX**hS_ZhiDO##uFO9^7ZJWp|r_e^~6 z9SQ)n&hdGGzJK-Z7yjwqPk-`Hr`Oph*Pcm6`saV}`Yt;6e%CK5n-ni~)0+*|Vyu}$ z@F*naBx_c3`7@;NB_Tt_7$t!zt3ROH+RTcEHkL@rHsx=p`b5Cm0paH6CbZJJt?N`< zp>O7Z8Z^0Lh%wL@3r*92^<~{m8|H!NGnxLNqiGlpIO%(gqdXqR1{9VMxgJUaSQA0I z-wBR@{cKEfjBdY6HqyO%f76>f+&$GOMNxUC8}Mp)&X7-uc)ZqYqP79FHoWp4vBCS9 zQIEW)+HxfqD74U;0K)PUug?t5A;IU-WJZcrMp_^VR!58WFRD4IQp{3&l{BhHk_xvb zA2MV{s`}B@gm(?V``7M%;oZ-E`jcla_~=>HNLTtrV>?|*erWSP9ZmA-wGRC`PdyXd z;A!_uraWmBoUDxod}Etn=~9y-%b+Q>r>*(7Cs;q7u_-yaG(uGF zUjD@bGv)lIIkR>Y1fIY|y)D*APpC_^+c2>w2QF!)n1U`C-*=7Yp_dhmR~OlbZr<&w zH`5)&La?EyEsx-H6Oxw&!aAm{8Kbk<|D2&D-o{AV|N2ZH?F`y8$4LL;5AS}*wQT@h zC`|Ur1S1aCN>#mKX(FmmdVa`x)n^op*IUgF~PTS5-?=hsU zU?>iejz9+8Fv1Z{bt1XD;(zTIPFubVkP(Z6j<+i1DEp4Q<`PQQc}>*&+-ypx@I>01 z<}8`{bkYueb}OvC+!Y#YLmGR*N^0w|tCI4)OJYvrU_{@#SFG4N#D#L*(6SCq?E!~b zc6ILA$8R$DyFA`VTVl6^#|99PRG6I^UWz&J=pd|kyEK0VW$@2!ta!dO zPL^XYVr~vn&_%c`FQoUbzWLTa-2321|NG!%pR@K%G17nk-@bKwxm>W0NpwLa91Sh+nBtryQ+)D=p@@$Ia&vq~bevIEC#r!_oMBMqj) zhH9s|P&%ux<3sna8}aJD^&MYodFyMpXR&UF#Mkao`tQihV(_WS)j8+7-`TAgBEHOb7P?@-%U^(8%mnR0t6`l&ImKJ8m)|vgu(@41%v7oi?8IonbO=-l+7pUAJ+W??BKNgE zeWT9iN`29mQNhJtkvm9TZNP%kVb(p$rXtCFQpwhL+n7udofkSV|D7zElN$n=Zk zT(Wk^A&KyUCjN$c2NGX|)oxgttUA<1OoU@FH;GOb|!tN|&w%IZ-0THVT< zrnq)@9UDQSvD*nD7-GjZCH|DcgZPZaI4M*k#mwTpt?B7^Wn{Bt+=o&u`v(H)M2E?P z)Cz?EupES3$CA#i43&t6wYCZVt!6Y1FWWSMSmhd`nBR@q{6*ifcy$Op=CSN$S;~|b zab2CS{?g_WT~y+W()Tpe(fW@j%emNEIX|kPb#>n5Z-zCra{g;`&yO@H|J8PcyrNwH z;uJZ)suz|0in&9U{mwQqR4X=YW|q+!5Y6fU**efb3wwl59&8fjjAQ64QQqb#c%5vuZT$H)l?(4;`?EqG8;OqK;weu&|_nn7iS->Hf%ndOaI4 zKUSvW@HI^Lekl8*?^fGArt@9jDiUL~#`-rB2!YpBWT51Gj#44*JDW|7iK&t%NFV|h zh!JN-DhG-gjNl3sP-D^#qT=BWGsQtsD<(3@Mr)$MPi~p9GlQ3F)#akumd&`x=G+Ep z|K?SuX@L>zTsl-WhchgASTzqQ7%4)I%q51&k-Fl0DR;2M)7fiLh307V998|!_SI|u zaB%Olk5{jTr`yiGY4<<=`5)~9;19@jf;QUS(Kw#4@Qyjkj%Qz(6^HA+iy)OApnze4 z8$~Ql?Z|>E6jE3>!C?4)eSTkMEMa1|nj&SBZjm%H2%2CrlwK(ql-4=EPw{0kb4smC zCV10-^jww+83+a}Lij5*T56|sOR55cWsn&Yh_qHzR1b=N3O2Kjz@r8Mn7LRR(_g%4 z*I1M8QQC+l+b&o((wotT>zj3Xl0+yWW}rkX;8dZ($HNs?X1><&?=|y2FBb7YouMhO z11ZJRTaLn*HaQ~Lm8Mk?3|464oGMc~A@jMmxU<4fW;|W5soAKRrh@IjmlWJZN$FB# zF`av(ydfQ3G4U!BlmLXF{w0oIwNxl!)rfl=Na;A)jw6|BIiExqvS@|+IZ)D#l0F-u z$KwxfzWL_YKl$K;bDa`%?incp{;lC6-AZtR{GI7;5_OHLs!<+MB^sr6GSt)Fi|`Lb z0FjqU@6pAN)gE?MaQ*wE(E7n)Qom)Hl1h7J?@sLm)W23?_)3H&9ZY6Sm&h2kCK4%N zI%NV;ZAJ!~#w2D%f=1;@SsLorDo`q6p0Dy6Qc}pl*LX=xY387pbF74A?T%d2v^D}0-(PVsI?oSGU zl7gI&q**>F#wy1qNadvz1TynAfVU0c-vYq7h7dg0jP!r_^FMqCz$6I3E=#Kt{Z$<5 zteV(h-6ol6@euqRC9CWa2r5jr{|qS+n$F@rSrffZ|6$=*tF_^PCjBh@B6AN)?bGl( zF;b~$0cN5a{iF>v)^P1h*4lYmP*n+`vD2EU?D_FVP!cke`qtQn&5;zsL4p7(^CjwW zt4S;+Vmb#_N#ZHi+JO9L#G01GTiq{d*r&DSq~#zM)~;W~wJBN`iCH6SfxNyF!Gv5=w=I*OH?-yjvk?BmvhT2VAj$Vf`m91lm*pJyw)L6~IPT z7fJ(T-!EH=vL!_H?|Zl2y!#IyfAG_D>n}aG^+^B2pS``iPJPky-%8naRg;AC6xu2k zliMkfLXWoZ0g%TRAVZSc>dy~Ibnv@Y_pD+RAGn8mRYQxO;a1$?oa4^Q(~}{4E0B#v<;3OnkB)pj%1% zL}=kL_CAUaY)0&9cED-YfeXN5I|*N9>3dqO>kXUW>Zans-VKhZ@@ZiHPTq^mPJKkT zdUcb**p=6=mJ`$0H=)X^;1f=!m*ngTaLuxRfSj5Ww34QQQ8Qu_ukrqW8~t@8Y=G1t z(+3OM)RwQWTN#zjrf)IA5=Y+@nmON_aRgDVmy?d3OxKeB`oVLAHNvLd#grL*(j8S!SVB?ztvc1y2LsxQW{knZ>~d1Bclauo_EyP#0K*< zz~F5}IJYL=bIC~myLbNJ9e}c`%hPM?kZ)7G4QfM%j=i!bI%6Xi~8sK`R}NU=&_UXnh24&@xiat2kB(mZ%48)l>D4ZNEcd z=$fZuF*!kFG$1ySTApjeRa#J(3>_0|%F&HqWdcrY!!bd3%uKT2K{FEBic229mX)Xi zkU)UnqSy~kQG_0oJ?3(Az>JI5g-|#y1x23-^``{^boYAi1dtNb`B1x{FeHXdjhHIJ0#ljWlg5wU zi7}CXG34-?WvL=gl=t61}U8jSRWHPc5 zuPnh;jPR%C^_zo@`UbOLVcp?WRsb7^N?H0Unr%%2V18NJzh%}o-&FTTJ%hFwnZ#w& z%)I~No!ejk^+!KDS5ds@j*%jG^&M~PF%`3D@~)@NOKWQNemxzgTifGCt*mZCeej^A zx!y|@zZ8q`C~atvj9$V=F(#YhoFT>n)D2E&F~vNWLI^0PRqcg1m7+FBBZ`PMYnjHM zWTW6I8YiFMIv$T5duz!(8w_;^%5gqmGy#hD|Nv%hP0fzHRWV`YrXZR z@5#EE0`JhhU?vb0L#u#WsN5KX2v}fqYxWaHp^G%sfDvm^fe&!br4Vf#ffYcL(oRwy zC~KwBpGl%4!vPxkbQz}?n338j1elzA)E9hMDkH0AM>07MG9myK!#{!eQ%C9-aS_^l z>%;WIL@7k_gpd3Z-4WvZ%dOd4s0-$A1IJHs(hmKw;iEL@-U>V_8Z5b ze+f$kv=GH9*_`iPKm*phGO$n!B3wOR^`$`gE)G(fJ8d#qA-$l)g>qLAdSP4;-*t#N z&$B={(wAYMs5g~*#xxqI@>e~YF+yd{RAnN$60p<9?g*_ZhzRII&-BOR5wxQg+GQJZ zrS-U^HBn=zLO3&JU_nn$$|vAyr|a~b!B&z^3e(92RXy~zzY_aYZpG|dq+LUPILC~D zELgf$Cs|$z_mz=)5~FL8y?u!}#$y#DO@T$6hl&)OW55N-8=LBwVnnk_epnxHMr+wI z>X%;s96*G5>`8ba0d!D=FZ{Bgw@X^dMxDS>x{A5i@8QVriCI|4nPo8$3NUMx`I^iv z^LMPd=PwP-mtG^^d-3+`|Ld=R_VaU7yY#$iq${Fy#a2>`6qu26t6JLh>ahRjG4HLC2eP zJ>wiRBOQgmCAdUMSb+aNxwT^5hDdcQ$v5pA6Nv1Km_tG$4?-l9YBn)87iCgc%z=8k(AOJ~3K~%-wD?{oucJjb%i5>GF&Z1wVF_Y>Mm)x> z@j8oZtaHrgrQsSRAP$-d5u4sr+KeoxlYn{Bta5b|BrqHs!6Qb{j6IxT)TE8EN@!G2 zeznJ6cb%yM+V}zw+QF|T zyc!QL*~Ik})|8K~0E|F$zxLS8l>1x2T;@~}p$6^Bx2?#|nNX9v}4Dl)ZYS^5Y0mSKdATyh-xU~ zVWb$8)Q7HVNt;R2m#ar}V7+7}W7IqUhL}mI5kjG_0^{O~rSYEo$j4a4jPf}Wk6IKD z;3FuRUSCrIx2LtJFla!2w|-ODz7lAoFylj~FDXCNGdfBgvZN)F_9!(wWM<0gFOaoP zR7^Et;-*xZ2svmuFEv(`$<<}Dy(ne-c4NJmZbg4aJpmBHeGdL|QId_d zUELzMykn5yV7LikkX~I(Ma!iVe>I{_E}oqn6{zrU*Bp<=l}7} z)hqwo-h&5EJ@Dwfn09?t^dlwP%5~yWqCE!>@RBg)w4a-1iXQbb(eu^obKK-Wv8gZP z1y`~n&qqr{A5wm!7XrOm+HH(OT~hyd&@Nmm8jaDc%ejoDO|A2Mb$flyUzUZr;q)vc z7zdfOT+gw`U%!1<$!6Wi8Dwfd5Vrv5P2b+<*?O(bCG1<^h+1UpVj+nz0!Gv}5p0^5 z`?^|(g(sm&{M`E@{`h^6j zq3}ym%tZz8x|18)8TBgeo@#>fo|OYbc)Nw46jH$riwQ^9guom!$NH>3upX2`1*Y)opqsjGnSOR5Url3 zK4OH_X4Uekci9!+QQ+ZG?suGDhi-Eg<5$<464NB^j6Fw_$%=wcnppjViAHgsp=U5F zp8Ytj#)NBH0L^a*mV!}Yq^X(-0L&A`^JUjkJ_nbAqC7 zU8ZlywJq5y_FT1kbzCe#dfCL&mouQSVpp%FA;iy0h3LiNc3W3xI7mFWa4Dj1PQ(Wa7RqGNqS zjg?=!aRy27nWR&kM?fRyI9W+3%RH8ZOfm)6(6ss|YsDW$v0O)> z=_W3h5u<2V62viK<8qDBh{O|8Tx=^q)ETpg?v&#QQksSn)*?*i*=%)BnxRRq2QM&T z!p|kYC{n6RD)5f6KzNJ7BrOXrr2R#?o_VaWV_M2%%pK;=(KapTxjt8V!81^fK!O6G z`l67F0>p(A3y_n5Tv##)`Y`vkPrMe7A0OrRtvh$W_wh$R{rldIpK*I?!A9Ty)315^ z_78l35fH%_1-Y#Xch?eQN5UslPHoE)9;GB+05Nf-ImX({mc8;K<%}T zt|w0JF`=q!7r|SqZ>GPGD|(>js``87TXlDn&3Jr-$=|EKQ{irdDJUtYxx9AzYD;q}3sUL}YE85wdKn{Dk(NYQC^y>d%J&i1abh)=>pfFdt&C`zAr0E1 zV7|d@?q)i#gUD)PWfl+Ccp3A@7p`3WU-lo|pTbjUPfa7mo&Y1B6k70#*k->{Xf}a= zGk3~NCU3Y*6Z#p1CYP(2$vVGv=yl~dxu|K;yK%2 zn2xIUR=*H-w~*<+fb&OV-BD|)6qU39re4<^prWH#d@i-RUhsyV=U3nJGDgivX{3++tWkZBvxr(-KWFOo&iN}^$tQYmQ~G^ zxDo%E8Jp?ZD`51N2PiBXMTr*n?S+fE#FPm&%86%BCP+s{O2Gh?re{)Wl~v3*TFWpC zDPqp!`bA|5&l%I0>XwS@fP91=FFh|dt$-bQ^$02mVR z-{g7E$7wV6Fs;pkQSZHTqrjuT?!DX@wx^b5RYHFJev~xQsEvxW7paMwE+bW#rb1({iB>47 zIR7Te&iYN6+B*KeG$H{LHffm2?B%tqmQrJA)T~tjRuV4Hhy~7pG|DU|*QQZj(n3hd zOi&#cHAoWm3hh%^8cHTef9LTq3_#x)DjsI^ni06VR_2d#AQ@&zK3722B?e-WnURQl z=G3UuR4_4KY{B|>A3dE>G*WdExkjXjl=dc7`JogqvZ@F%L9n%WE)p9TCgZM@r?N}< znP^RR%(bYV4Obs1xc~7Hx8sT1)6z)4e;OCz{4;A36cwaO_>tmT638J(HL7d@zED;d>LhKAzH~lx zeT?;MWvR;)GCk#t#Y*(?I4jm!mhd$(KPpjwQf)|+HHA44OyyW9pxB&e>O=ESAF?oIRiz+KEwNO0)MO#U2oj$Tj%Y>EC)|kgBC%|n(2tG4&dvOk z(QxCKwn;lhEtL6dCE+fl#0a58(-EWAIE|AAS%4%2=-h%tffJ$o0};yR>q1-<3J3kaEvQGx;%evOx#-QKkD!P21+w2W#nN1KJGL z^t8sPP<=>aNorJSLRS*GP*6Iv-2*SFJa6Qy6F9o-H*tMZ8C^76kD!4uj={M$yn@E! zV(n5EOdd0J1ju1+OUXW%))=DiHF3jDew3G0U zwZwQ=3K-%vCu8$HMc3Jfnd)I86^u^lP?0`RP)y}XNakYD42E&wK%*2Pl)iIpL6J!` z>EQ}S8bxNG4=h3SWj9bn?q)q&o2x0Rn>1JQuhaNuldzMUAP4`5xrCw%(jQx+Tguo} z)M?Ihp4Puqq6K~~2hXh&HMxF!=Y>0Oyz`rnK769-Fi%4xU4f@N+-kCJ%pbKJ;Y~Bf zQXdljN0MICDv<=Xyl%-*`&(UqscE*gYij0M^b2T{$bR)lKn_X#=c&mtrgsh?s+!ij zOp_QX`9yuBZiEDkf6MWUoIvYXwXv(cKhP$+wnsQ#-uA z^b4=~a9UFuUZ+FXkgdDFGC~kBQfr!IZAcnviWDN|&E>|#T9JKq#eSmzH2`h0M-e`+ zQqdBzH(c_C3#0K<$ueeSHYaXkQ-BSa9BJzhZwigHn>MpvBf6H=3#4S8^o%w?NTuaD z&`yjpT%C=4RS%6;Ji4lhzIPwZIwN}Z#M5D(C?oy$H-G=VR0gNou)5K@S{4+W#S*ba z$xNv#fm0?y8Dj64F_{d5mF`FoX>{}MBFI~}yO7F4yz+UvMiqH=D~un~xRf;q6lY*@ z9n}SOmjRsqYO5B05!YU415||zqvw|WY0|eX<`fD|RcoX+GSc85wc(utjj*_pgtAK) z<;UUIF?RLQ8E&Dm@z>q&N$_)|&3PZ#xPg(Gzy#wnnz@1H(gn?wjV+~btW3Ks6PQ^G z*9Ny717G${2y@ADz^23E8L8i-x#TAUwz?p5#0bIX6D@k3j4@W5=W&Dy1iVwQW$u^&|LxU8uH13WmvNP*DS2nC6J{UR8rY%I)` z(X~QhvydyPNKi%|b;?pOP^DVT;;Qi|I=~FUuvTkp*XU{7kMy%sBZ}&w5cAkFg`_Pi zG}%>+M>OuE+c)mM`QE2L{op^Xaq6kGC#{kG?P*;|4m~qq8?&xc>04Ft19+P9GLZh4 zx<n1hOC$D{WN3YWdBWE?TiCFT>1dVNCHbO8}$eEqbVYyg_T#Xh4 z^+9nlc~>Q&lG@Q1rQ7Xw0Z29YWJY*BZ1O9bl=jg;6ozE_hR>V!%ruzkO=LzPm(nOM>(p5lWwr@9MdI?PR;9x)BGCEk7HfAt`O4h?<6C4x;rwn|0ND zVx|F1+~fePyotNA`4A)R>Q(DLAJ! zItO#(UtUm18JdZaYEyO^LrNtpuytdHq6GsOBtESfk7=CXI;n=H_W>EY5F`y)*fu74(E)Fn|33vL;Vd2DmrKrb?v0$#sUXjT&rim`=(MgkTwO@)n8NCuj*GXzC zHBhO!m1UCpG~CXD)iSs3A%qfR|< zXp^Zo0ynsYMLPYH|r!jGWP)62B&uYVwjcH(P8yNc% zX2wEmJrF`0ifsEd6xK>X#`~n2qFE-17`6gzKJwlac-TbE*E3QwVMZjR2zZa_b7(dX zRt)e#HdBWnCNI38<8@1QLQCF3L&j@T!55TkmPn0A4M{;%NGNTYPv`z9p~!SZ94G!R z*BPhRDBVG%7K%BRyt|NN(z{@yLQyV-0OVem>nqbNNlE2aR05I&>dBY;+v|7U{7=9A z=z}w_4)dfm((fI$x(jqRy8ganjS!P>vKXHtb_s2&aL}m>=$6TV8W3>AVuUKb3}^!flD8$U0XZ9+hDfNgw*Y9lN& zrj=#nx+&HYma8$(P}Fdf=*YgsoOUBUlf)|OO1@^n{NzllbQe(o+zEz~qs>wBQLQi(MXy0HP(;0t^z3ziD3|xp z9?zt32;@?)aKn_WUx*)~8FGHtIZ)hX*F@g)cLQggN;`8#`mJxQuZ=3^ScZzpBdWz( zFz1ayW}u9%iAAWp>)sOuzO0e=RDnmjzotC4=b7ri(#y31Z7C|CrxCYHoZ*BE!0qGhKVWRb`CMp zzNWOrQj@Gb;W5%*%5#7Txzv~iBTbThu!b~{3R^==0~!k`!Q~R##S+}IjZD>Fqb*Q( zOirI6YeU0CsTL_f__JDT&dfe(o@g=*USdAcB%l0~HWr_@8=G+9<_);=;!Ch~=@LvA zEj+k?AEu8ULOYv-UA6%Tff-8Mf(aF?9eZ(T8Rc}zJWQm)6i|t(a^fLIR)3tJ@e* zCVeBi&2p8}4&$8U>*N78`8H|;)fgeuQ+Y%AqwIuS_MFS^Iq=u1j@E27lDd*jX< zfB)%6AD*dJ`Xn^cV`-!7HmR#ADU7vNPe_{}iDKJEcZWdo=+0x7pMdFvG%f%y!J{yh zTFdv&8m`{1nEjz#X`)|?tG6l{TzQSt*1^hq4UV1iml_T(GKmNiGc}TtHWYXww2@;n z&S#-vp=%Qp4ca?I1SHQ4+BODZE$55CTmwS|00G<65wj$NjDser7iyDGhp=UnuMr0k z?R2TuXVePEp$Pld)hn=j`!>Az)?0A#g&VLxodNvvm+;BYe*x3a?g1Pe2BBa{w0)65 z3_~e0$V8u5kTm@UF5aXCl^7{BqgcW$6yZk3vt=63zMyVM3>ME_H=6(#X+WN5~M^BPWdR*r?xomr~)*N8jv{}vKB9oF(80-_yT%y zaa4Cf@5=|tDubLa+=VBgm7XahJ&HDZ+Kr^(FkLo=poaqBE~>2*ctlbxn`%Tw2PhYh zkiJ2YiPfwOgd&NZ)yx;lz7M23#ba#3Rk3VF115l0vEmiI5GK3hqch)n~| z`##5Gu$$Ykd0_`Gzx)zhxqBBbfALMYbn6A!oXudiwE_FCg@fe+4ws8iTXf+AhtLAW z<%cq4sm@qTb8|^ZPNrIhzau6Ztr(ava%CVA$7czk_ly=nHP}cs6NCc`XiEu!DebZ% zeTIFY!UaKyLo5ag7(eofas)K_Nl{P%p<3qaP_UUy76dVOT@?W!E75ty4K!YVnn^Pa zWi30cT@;$L=#|d>Hbji$-y$`sH10_72dSCIdl61DeD~JfH~;?QpPrqs^sF_~Gu1}d zX(V08;EWjH;8J~Cv^pV`_6`aYjlhD*)&*v=>v5v>`IYvEmJ7JX!e||9a#p|glWOvL z%g<60&E_JbaY&7R5BZ|jDnBV$s=Hhu+w=_fGpUId3|Lu8=zq?yz|LS(T8F_=Vk8c5 zgu%qyE+WLBXHY?ZbD0PS&DFUK$;W^L8LL&AI+b0=uvs8P!A1t0fcM7}Fp~+G@dVn* z7~Ix2Y+kzx8?U?wqnB@id*Ld~uU!JyE@A9uFy4Cr%f}DkV0Hj*ngXCa+#g}^8eirt z`hc1EqZTql->KA!wNaS18H&J(g4rNxzXUfDF#Z|%AP=+^+LB2jQwqESGk3}iI^T=g z9=o4FXjMWb<*!sUQq_Sf&o1+@e;%?khK7@8NzSupEdbAlt&03T&K!MIW~|9o#+Ir1N8Bo zXEOu86?ZqC{}VkkMqMYEYK`!L8p6*t!6G*b)lV7*ruWh-5;tZaQWA_%M0tzNC&-c3 z-q)JEv=$N1%tudJHsJZXWR_F`MHmBpvRfpl8%3Br%d{Os{$~vIv6Bhdtt}XBZG)L?z-%;v#nxtE zoXZ=RVR2;}_9qtRumm?km|fZgcXJo;vn#MTcm(r@(ce391{$=`I1><^d;n4t&<|;E zxHJYC=)>8_OkME9Tjjh7CS4r?r2LY3Pnx`Sc;e|hlPzEgb;)v(0PNY9Limt#D*7PP zUJPoDG?#J901etwfcZ9<0WYLN%^)a(4$$>jfgtUU_B`s|*Xcm_H!R+P=ZE^yWuzSW z+Y@wJyKfc@WRO_+{N0zo@Ydh|>L))s6Rq?tHPYj0qj}xNKc%2u8@ZZ#Ccj9k59fCU zD8ZDMxfIehtE1x5<+avmeOhDLUENhIJ6=6WrrVU)q7NO`KX6$(fWC7B$7Kn!K#D1@ z1s&9k& zxYKMUiPgG9F?swzl}WXxGyVXXenNuVvnkp(n8lYirfnnw9WI~1@R^aaHjvDvfswW% zpd;SP@qEYTFj`%M<;O=AZ*0P3+cVNlz{w;qG`BqlcX0!7XA|7U*t1Y@%UNK2Zrs3l z_abcEyb9*g16a&wfcq_s9E9|kiH&)%-axzbeNu_Y0Is2}A5jtf(paWvaj{u8cB(BgAMZd@`+_LBJRJ(6(Gc!^fxkt<@EugyLG=%O4meI_4>5#vS;OQ{qSN?Y&Ik2Lo?A_F3nQOtn@yz3AMvh^HNsca!gMSa6FLU;krU3f>EFc!oSD6_Z zGlR*(5ut5uP~&M%h={wSrLv~aX%*zRb5%x)AW|?AE=uq{dX02E4ls^hC0@EYxRAy) z3G+K1H?UyI(2S1>PcZNv2XRoH*<0H%-kV0t(ObS;d~!loI8yN+-Pi^Q~p z&(mw27E|PDX0EDL=MyJStC0+H)vkL4Y+k`6MLRLWS%n$N~d@^-M9+Z++vdgP6Lq=_=`2gJGd+XvJ19sQ(m}nM}Yf zrsBS7x5WAZI03ZNKL_t)^=dj#=AtkCsEz^55GYx6@6iC!W{M=E{L>p*4w(Mw> zOu7UoS8ObW4ucFR;8g9N?lZxW7^(Ipt+yE0ZS@{??@)wTcG+u{*-N4(J#fa#IU>Rq zO{c(P3CVw&m}rrlPgiegR%9@j*n6Itwz!1(Yyne)u$+uw12$o6WMHc?uw@Xo+7_Bc z8%AJh5GIpNFjua^^u}Y@zyAAe-KaNg`>-rkF=X9Lm%itvP3nR8USqYw}gJ zKnswgX;EA|gpJs)_T6cv{8w9p29yA=U+QZ;s1N;(1B;AkscpY_b3X&iu1{At0X%=xg!Ik(F8_Yo>-5-I0K9M0%p@0 zw0JFZc{( zV}%4BqH(!!w+Y(lWYoZ9Jch|+6tq#B{G#4`*P@;cBkm{}Dar_5@t9b4_6TEul0%$Q zTYtHi68lja!P3R&#e%4*yD0y)h`givmmTdPj}3w_(in}t<-z@y?E)6<0_Hxrso8|a zwy-e*m^1(*gD`RqM!|3E0VV)8{rvA-hUv|l@bJ-NcsMHr10z5NP3N9iBm*WM9Y&(G-RAUyUr31?&h^diQNrPhKitVo6G9!S~j4DE} z0pT+hd$Nq}&{|to01U{9s)%cOlXPaggo~^;)J$9+E(^`m4;?0KGGmoY9?Ijyr_M_h zCn=QQGr{0Jbw+v=ZFE&DP3>Ac6_Zs7=3ts9v`NY?^V-h#<|bUZd>O9pUI~Q!{%`NW zCm(+T)Ale&t9ks*lw&400wD_JeldyaF3TFfD!WVYR)vN~hxs5W$6e@O$bFhgx!LOl zfa_Z$->u+Arpt@6c_rh*TK?Oxsik2})UxS?nCZA_U~@8o3tOA8xw!%3$(WPb=j{?^ zi$y4I4T9+BO^1?}C8kk(o;qn*zlk$WD)QpT2z#xAJve~rasiV7>d=5QEo+aYF*YX0Js1&S=+eK;NKFyY6VoP;^K3I; zqaYwB{F1f(&a2Vr9}vZO7E-91KjH5UwiN<~Fxm8M5k&x!fRJQ*qx0NLw#0v$?piMM zJw@0-y_xQ1QLUv)po__?rF?!i=~7A%K_V8^FA5YgXi3l?iPEjn1Vtr(_to{~i5dIIVGm;n6AQ+xqLT)kkJfE`te69fZOHZZMa)g>z-~6M zdGRvrym$*nivu{APr=O{Y#c7YO#w!Yw^B6m+P=U)Ca`%TtR=#y;o@f^&_x_jVT~wNWLL2g`C!az)KY%@KVLtboPlO$eQEUk*L{DA)183h( zj3-=ZUu8^yqy0iT-QHY38H3pv1CB?qu-?z@?c;~= zVDAvj-T^FU7A|80BZn|%^O$Y>g63+&K7Xv>ScKC)myMR2KenKzlF~}y9bXR?FST? zkWk(-cfj-{fhr{U9l~hQ z!Uh6dnE`Bjs6Y!aHz|@kQF`mLX4;5#+g%f=%%RepsX(5N^yvEfS*whdWso5+#662~ zFR_lLM%rPd#ohDwQd}%qRCivT+~*a!L4qT=HC!XLdkl@E2KE#hd{GUner_5Y8&l{2 zvI~fnsz{$auR4E>^jqKfs`rb&cUsq5*(g*T3Nu9?pu35TbYnb%-AmhWXippG-GK-0uYPR2x1^J!=xEEUDKpI(Ix~ICGZ6gwlHd7 zV-iieS9W*d+SRM!HQAVe-QR=7Vh$UVjc|;Q;$5H%nyNA)3dpsHor+vaQfdU9XFC>P z!s)b?M5qP;(W^byLxH4ewp@qhwL3&pewORAw+F?s#gA;e@P!A)BY<%OZ7K;z(X)Q; zmd3#hT+*UEu)_#;wl2Z-t2bcz!XeBKme4v2*gk^s5@2(Q&{~8gHk`U<9flHT79!Mc zlim@O`;*^kZ4i_5bC6i>z#!P{(#8BY%1vmRm*B?Dt1uc{aLYOT`d6RA!NHUx;zF@tQU0jb z(>}=%m{@gn+N>Pap4n)7#}W8xNhtd6(AQtttIR0ncGQfs;}Z?UOQa%Lkt>=CJNwA# zjm-_Xu)PfzFI<4ljg6377%+7igBL;`>0~m2@puf=nS`Jn?OVdT5{>Sy+q= z%#4q=b%9xpJOp5Z*lUAUim+TR;c(=UnI^D%`6{>l(nRgZXp;^W`$4FnEpD zuPYZBr@vp5YLku-V8VFSWV4dOg@CW*2h2j_@QC+N1HmCwlr1w-`FrY<1vdZIXi4pr z@7gJQkr|bd-}W~urD_E}X|ez_)CcT828|ZhC0$Eq+$Pm8W{s3_ zj3EWRagEjYPAjkU6d5UgcRgvXJT1N*BO9S}c-XcqwaHL|=o9nhrna{xaP`Vg&`Ku( zcho0&PXqDZ-Q9+*?F)g~E@uZY-`@jVwD8Gq?!kQCM&Aps3;`%FG}X-SvU9-bA9CM2 zqW!?=iCi-Z>0igKrL{=xymxP(*kwVejkq@_caxSW7B!X4BF0K4T${8{lNf1ZV_xWJ zG=|O1Ex34bCzy0ET-XlU>0&mAgZ=#wwY!*mpJ*G-^^DZNn%QB9;*E_ezoRjTJfUJgr(OO37!{8b)P(=7PAz9eE*vamj2m_VgsJS^=AeN&fwm%(Hk z1X6^##mGdB3ygH+BkFy?S%|Q;A?DkkbGU5b01YgBZt3PWT)lP^E;?V)1_Ae{@aXUW z7VR81mKMyy!YBdtV`89~7_%pK8(`w~YbDHBDkG~A@>AysbYS+|84VKX1R<1+lk(&Z z9fYpDLK-Z}{}$NW=|VYIl1kKNKnA_HD_xVtuX`H>SsLi+T}LDA{9b5_Rn?%xk(TRT z-bekN|5>VaOTUpenuK#p0B9hheuaNLS!cd`t{CaJzVVg!4B&1i@?~31Z2I&t{dYw? zsw@pOnY715-8TH?(dE2<^y1DYT-YALWE3$v?REp3o8CX?b4**<*|c!;$__ky!K11? zg89J=9zHsN`65D*86-oEQ{|9I!nZ8VC+24)+ZBYVs@4_~Wu|m2RT_Q5F#jd#&g9Kz z1cB&`w*h5VF0qoBQ3?&ZWTX@XV3QWaI1Zj?U{SRaqfQ33E{> zPf834I#jo~Nwmk(IyVV`Cp>?850znX_e;O`rT2dLFF!nS1n+5Sq)(+(TG>i%MCK+1 z)1U>IOe}0|G_W}~urb1rx7d!x5wr8~A((?l&`y^yax=KNHG<1K6WG}r!{LGVnWnNy zA@8vXliGS_nsV&I3o}#UO;uq?9kNtNWY{q}b&oqL4exG%?r)GH1^GLp`<(-bbmk)E zi?V+rEox$& z`!HU%(0Jdd#UMDlWG)6WS*Dz9s`!G5vAU$KkqH_h1Nj5{N&7V{e)96ilNdg7P4eU# z$!ebI_(=0qsqc!Lb3Nm-*tfiG;?5m@#$t2c^Q6&(I;PNC6^Ko7%}N1}?shdyi%1jA z1>jqPGp7#|;Lp)K|fn9UQ{JY#yR?ePs!pEny4`*zi%l6MtRSo0;5 z7DJSUj%eU(BMA&<{}T#lxi;&$B<+i3n6yQMrXcD4O=@MNJ4zE34;zJs6RJp2Hxzh7 z7+$1CeHSHX4=COQ4b%q^nNV~)_$&ewjX_18Df(#K-AlW0>(-0#@~f}Hjq5i;V3F5C zA3S^jdwYAZY?CHBp1{WDCTw`I1zXrV*oV!7eK?%Wpv46cQ~>MRBJrI-8suPM3f3rw zpwr4MLmH>Doi;;NCS9x$sxu0XLQP*Q1h&g1sz#NETOWKh*|`W?FTVskZVvmtXuq#$GhGB`>ern|M~Z20o{7fd z24wPWNrO)2UzY$AS|EUVWP~FWj1&q1Qa2H(BldjW`^Ys=4H{*&0ySKc7#Ja-(jIj{ zAonEL@}RC@q;jtNes^0$|!z?SNU0REzl~dp%r_Yh)%VtQ(5X5Nm z9K@K37_?>*KDSHbi=ilkd;7~@dgJYX{o#lIR3EAJ+G%K{=RzAT8*SLQDB2*QPBzA{ zwY3qU=K`_!1KPr3b^wnb+=s)xgRsCinlZSA|7j6m%C23#0@hxD@ni;%ANxGUWVo^o zj00?)iD)NDvW_dkkqpGGBsxwmMbo9os|a-El;MMwZ>4)SN8eK7@&F^Xl98HNTO`&D zZ2~xXFugW0+Sy0vHluMc<9gHV=41mdT-bqYSFXaXn=imCFTD&`uU!j^{GqWho6Q1b zqg~h}Jtm2BG=>YCTOlaP=bHL^K)XlOPI07LMd2A7G840su$zDF>=bOkQFyaear zJs#I=X2O_1~$A;-5`t|!omaDTLQO-5Yf9#J{VOXTgyA##uC}Y=p8;ZV7e* zu({<4_=TX|cmm(HOK2A}*nhkS`;Q*OY&wTYGlKEh1gJ7!zU%6hYjE-M3$TA^;FC`u z!>@jQ5ANOHgXw$`{cwJweA%fKsvjoa08gdm9b=N_lqF$+ES2hwg=y1 z+zII|KDcOWa|?DaUWUt;FTwWqb}-epi)A=|G8)77<~A%xOPDX`fpGeOqsDmf`caDN z9mPCUMxqgOu6$d_8hKPGT>gy0;Zxb!>)?uJOUUuG#G??H^W0DfE~Z#rhHF|PuRd?m zU3%ZA*B;ww;`MuF9<)*j8fxPrV7}iq%j8q_QM{q{YEWqnn9&66&Se`r6Hm59JNI{XijV7rz@3*;`|{tC%R177NiG z6ryghGubTsliMf=6X_KK7nvSKbSp?2Xte5O=7|F0vAFGbzWml3fAg8eh ze&<*IO8E9aywuc|Xy3{Nk6tflq&XFZlB2^J$!*)+IA9Ez=|u$!Zvk;gh$eVZtvr zLPjLPvf6&JK{OALTQGj2MVS|4_GfmPX8{n>7h33TqK~Q%av??6PCOYE@5k90y`Hj!q#LH#&!c5 zI|9TJIG6yKt?<6JvkMzLmtp79Rrtj({|!F*^fz$tv(G|6OsMNPhSff!*TBA;eQ(li9FptVrCPY7^GK^%>c z!^vFVPs+H+TdgL;0zOAUM&=Achti;a;Z-|9#ZyTIwQ8!3Ay1( zPA|8&1mjr4ja&3W{H4^U8X?tZ)$#@NC3x*pb|lkIAZ)bM-W!{x|Is}X1x zRA^Bqxt5|q@z_A#G?JP70#r~7e&#8mf_>-^PuHx#}_wOmS_2p)S z92V{g{O0Buc6K&ldwU~jPt(KwP%yZi9t6LeH#=Uwd>KY&4DH;(VzCTm)efhR;Be~m z-Zo%!dlz;tUV%5hco{D4UWTm?Cc)%5n@+<7PR31`WG@Z1%QpCasCcl?gY*)%Bb1Ir z)Ct6(M&O)?PD9?<*_cvFSW3b*`h$${lUSXowyQKEr#mqIs0)lVFj4CRwQ}Nf=vT-e zSVGf`;NqnVaO3)Qc;V&?aP#KP5LC3iwG9_`cVYMXP1xMM1~AzSRhDsd2+PA+5Juc| z8Z;C?R^uT2Y{1sWCQLRqq9i(Q0(iamLqFPo43G96!NGJID#DPD)ELu=7Oe4<=ocH% zIC(_!?}I@;c${3C%B|~S^BNba6TJSLb@ics(pcl@6wzA0gYHWrri3z-EH!3{&@7`L z)bF1;ECUnWOBlNwK36no7unZsVlDDeuXGWZsfz(g%?L)9E<(|n<<<%W5Jc+4Gzz8082Jk?^KrKISpN?h}Zc&$sQAHEW{eX&2Y70i1XDav6==mm~ z6Js><#(GaVa(ZBqNo!S^Pg?Gn+M3CGPxhxfELpzI`zvC$Z46YjWYUF%>_jGc z)NkQuygq)ymseH@XG6Nz-zZ(4gK@crH6-mu)mK1JRq1|QluC?t&aqr z&*rdLEMVETYQqsz#e$h?4K!<8u86rM&y#%e?&3CV{vbbss?1{Y%z4Q!hLk5`U6GjH zK=Mo26#YE$i##SLc!A~8#S3uj)-8DT_1EB~mtTe}*RH{2ybpn$3)YMx*uvIkV5IZI!@!vRea4ds81HkP_`0Mvro32ynTK!O+k;1YK6-Z=g%+{A z43eNgz!fyAr5c`(@3bK-MMk{oO58_kSUY=|lcGX4$|Ry@zSY;v-B~o6Rrd=-(H9@nmzV@iYkYn1W>v}K; zpR(qE-wc682DW_=+m)+u;e`XZaDN8l`%`H5=P+6>U|}GJuLt6jUC}ZWkQw1NT5f+`6CfPnv zhJ3y9NwWp4jNK^LD4)a8xG5qxX`hDQZAzcZ#RP0Z!iv$kUK4F&BpOyUP&E#y#Z{gjKKGFWHcx}tGZIy@t_u(dS~+Njq|ecFph6Wg3Lu-Q!D z(#6O`y&b{(JwN&M6ZqxNe+9q(^(S!u!9G0No5IqKU}NiJIGiJF?OcM_JTra$Re1dP z5j=YQAV|JcFxi_WJpALVAI@R_(HnCT5!JC|8&9(WiSbdw2lL=@cgDU}RjVDzixGFT_Y)$Ong%51uQ*b>|`n;>q#J zPb{BWx8S}pxpov+E&{oqYvPS&uC(V_IH7z`0gxh#L{LY|{>Xlo%wIo4m#%h6fo~uH z03ZNKL_t)JsmK*|hz6ZPMJXyF;#L5*ccLy{mIw91BjpY#x88`)SS*yn;y8WVsSoPXb#z}9#Yf{*;> znI0U#XTQA%zxvg$;pe~jFYxhiK7;+k19&7m1>gvhqKXYcH8WT)+Ynsg^CVlBpqY(ejLCrO1R0{G zA)WiK^YjQ>-qczFy&AdMD8evlp%JsmYo*KJ_cSR;1ZXh_Xh0W`Xgpr72e!C;c?({A z;U>KD^2_k@OE1E;>(^oH$`y~t2qCF!;cd8cnC(A;Pd~l~zxw6J@bSNW29F->17ZW) z7carfuK<%kY`?q;uid!|yH~EjcxNY!BT1uvWBG_)AHnMZ8A6i18Ns$U$!~4L#&{CO zf2l!0wK#Wdm9es>j$vIn?N+xW*T^D>6*9=8)nBeyRr<*Kb^6Sa+1#1mjTb1}7I3iu z^nUUAOa%IPIKU>DdTk<g z$8az^gmK%#2-~39j+l|g?)WI)h1d_K!c4jhvK!bZN5FL6rD-?+CV?tyGf|sS9GFRk zL7Uar&iVCoyMNi@NnLSl`L4CkOrJVA$ONd6@;^rjtR*l}FGwei)TE$79t$K(nHR8P zUO5ORDuu*jC~>!c@5^tz^DqDU;gPGt9E*`6;(zFF*Q^PVghVEYj*|Ms8u=rWIWqXq zTnKc)#WFo9$YX zWLIL_%-zp?=NK}xrYshRE|P%qsnKi#Vv+iQE&+PdFEk)P4|W4iO1d@>XEWM=Ni&mAHoG9n3i;^e(??m0f1+1kU}Yu~_^Uw#QE zr%zz=Cu2B0J%*ot{!_T7eBBy0ZYv%p6DW|hgbF^{p(T>crdU&%O<7e?RoH{Ej$ujZ zc^V4Ey-C0{f?ot()-3fV1<<4sbCRvl+*EE78hu)uWg%*J8U(RgfYeecOOE89OoxkO zxy4Bihx0K!IX-|-pPs^xoafPv62nefbT% zet8YsEqc8LT%2FRcD-Ti^cTN?qr)S*7bFqbHpKA7ZXu>cKy9I{N@DWj=dmUgfs|Oh zzNIn>Ez^0-G#dKsLx${k*V?^*pF_vkIkzFS+THQsm$gKIqah}~x9|8#w$|QVmIkc;aNHtif zjDcocfIT{Z@!1K$I}3ld6fJ%^jAB+Yo~V<}A7o;8+s#q0+& zcSD!)-zL;wr}vG`RwPb2*%01wO{ZQ<*0zJbNTe}aR=`8m9J^$IrI63PmX zu_n)Rf*xR-%%~Rh z_+SCXHE?rv32=4Eo@AbJ$-%aQ>#J*c@%1bC=Iht+>cu6jmZ*49&~;SJ1{$g%<$HuR zrTE30+Z$+|hl8UdSR5U}csd7XEajgw>`{uLWn%9Zdx{DE|LtwI`)v99gUEMnvUein z)zFk%$hTX_$_cUQEfR<|$7wGlyKF6bc?Z_7McJY-SA>Hid<9K887V zczSvYC)f!7#saJ?v?Y!=CbU_vEL;igCg5WvH=s@9&5q}|TdA3ffAsH-Ng_hg)G^6V zA33*4qYINZf!O0UYO{2#ueHQ+@SV^4UX@q)n-G2@5bi$LT_*GJ*7xFf%sHdRfKa!L zdc0cN!n_Lw(-^9jpQJ>@xlosebDc}>wlAHTb)0M_HE51PkT< z2AJ=5^T~r%78t(SHV(>74cn%K<<%0F*Vj;?B1*%pn3gM4F519qU4io%N!DefIb_8Q zZCI$V?(KF3*Q*tL_02c%^x5y>$fl)H+a(g)^d0nWRUt;YuuxdrD3AgT zOzO~*85k7+qr#A=0_G>Otbk%{VKSM(e0~gz`3X!X3j(wG;t&pw4oPGI_v>0*5KDOT zf(;1_S)&(=AcxnA_xSSS5?;PKhwIA~)TJi_!)8+|F)~#{&*0+X0$#m*3CE|WFqzHi zKHi{M#%2r8vkaa*e-4MU35Cs(*wwT(T;5!=Hy!5ydXE`^Z%Diz^Qsg{$#Z(%&T_dyG{K$V{!^?qI4@VMXU81E-!B2;>|hSUf)ug zOSx^x<8;&va0GcVg~|MYN?xY(LonF{%DM$pT)^wsui@33OZe?S{v(_|eFmTZ{O6S0 z`|QU*qFmjZ*Kc6E-9TB^&{QbCUcx9VC|8@Cj7n_sQBDH^)sqL`4btk#gF#;(zU71faI6RoZ z!Qlv|vkXSFf=F1i`7z99$1oWkz+^Oo+5CtISNUiPo7EcLeDe*w`sNk9e)Srzu5X~K z8}h)X(+R0bVZIX?w#!=#-{LV&;pF%!-P@)$aJyW=)zuXl9_Q!h^m@@#bgAvYvA?eIUOr)x*lfgPU>nGT>rVi?L)l8eGALJ{M>un^zmS7 zrK|w9CFFGrdFx52q4mV>!IN$tp(C^nBC&I$oFH{dXmGM~X@ zaR4K%SH*Ne=3#9ZNSn5z1=^a7jMh4Yx!bUeWJ%5)k~9lwS%~l6yH1KO>57wvG(-4Y zHDP-JW9O5yGt0HF#%mXt*m)_cjByP+fvIMRd;~-?I!ss0&uZ9u0D#O+U^x2XcX^}` zLgE^lwVgHDn;0@rzZtZ1ZOQ>j;E-;G)`+r3E|=R4k5>QPJygWF_XnhZ{g;1!tPQ;1 zX1gn&^!DTpxuK!Qn2|`nN<=vsd^vfUsHU>nRB*Fg!{zl7t}kv0@LY=)9cu6*$c-Tz zPobDB2rv$gPGLMbz|0`z<2i**ak2mA+ZXVke*0UP%%-Fj`_rHOG<3AMJinm&(pCr+ zSbUE1dE;yhw#Zn-01L?x;k=ZOV7y9_=G^$2hZO>8g=HVUA((W+5T>xMSJt7SJQ1^a zt(2bgPwKdmVaJ<{MEeVhX|-Ili5kSC9A@(zjt>iX{>c$M|MUb7kLOU#awsMfC?+!~ z@;MZK0@meV%>=-XN#bq0t|+&Bb+Ll$D=ZaS!**MdSB+g>(5q)TM$EewaCCGEKl=1% z@Y!cSgT?U~Y^xS7UZ2D7zy3X3TwYLK^!&|hI6OS$Fz;jx=U12T>ctCK92~&(U;(pd zPho72VZK_D$Bf6ZCek7}logXTcaE$({`f-(6z>4&9dqn1AdRoY`+5)gUnQ83NCL5Z zYJjqWtilj3D;6PdfpVWXd$FaS<#TDRqsRrWTCK~VrVud8bGC9J2z*-)P+AWS_EH;< zARmv3P1;98j(&ikWO`Y_0NILo0iS= z!mOPtZNA&KCvOlU1YX=#jzM$F$D~QV3G$o*q8f;GCILtRYP-v{4rr_q;sIyGgp1oh znT+XuPk@v|xzX(nGNh(^3XpookTC1@t|an)DGf8-x?@!%cyB#^fBk2_{KbF&x4(I~ zWZ+{x(!IISw>@PYqxZt-PL}xYkNY(1AV7*Z^4&yX1oY^LZHxOF6>zwi!_m>4NJ3S$g)0ng*Bh80OyJ4W1w4Ir2%r4u6wW?5 zfyvpOSrtegsZC?^7N~+ zl&&uYdF{`hAv^aE;nUB4LPpAZy`?f5WaQ%FwOp;>;`|MqoSedE^Eutu^Q$XZt=AOx zJvuvu>B%ve(HM#;YV?jNSDLAmq1HHdJk&h{WN2JHa{EvoZJ*fjHZw3?uG~A$G4IwNyr4?GbrbdZP>OWN+B*La-ctZ&j69SEZa)1jbxl-e$cG3ieG6ou{13LsgjM}M*^a=Jz6sG zQ9x>ZH>}%9DeT+Qe4ueE###;pp%X&dyHZ z_I3$1bulSv0#Ognf;*PDs;2Myw&AcVb)(6s1sTGq z94xXP5m=q8SsBQ;Eck%>qgcl}8Iza+vTbLJ89aG*24|n5Jl_beZ!Y1RZ~h53>uWfB zdH_HA*>iY?p6HVU7#~bfDh7fYG^#XJC5b20B|x*uVYBpbbFqf1@^F0i6n^ycWBTys zW({v%zJ%ZZ)7S9g#Y-X?HK>bfr*L%q96tTg&*3?N=z_xFNGRHD*W{f~rW0zBc5`zL zZ_Z!C@sl%{FBWk2^a;Fv^$MhBOa?@LWe~w_7mlHQ33F=A$OI4K(gJ~QBJ33(d!CNmK_Kq6X$(t_5*YHZxn*g+ZXxVy)N@t?+-|aBmsL%$xfaseRt12Fgu^` zZ*M=oE*ZlpL_-}M1q}Nwh@aFYvIKf&|Y@t@y zRG1xFDk+eLkXknmin)G z=|*D(ToW)%?qLl6CgS(sW-3c{9Kvc@*eCpvTC`!W#21@OVngS_^ z7c36O(6Z}Ox{(U9+%+artImM-H1?35o9^1|d^IXG%XxYSDUe2wEvc$E&>3XkH4V`R zSpP`&?t_8!Z~pb4f83p31~jJ+SXNoVjfyc;g0gDZ z+?sN*wJ_a0vx28%k=HXMy@y`h*^^V49W9`CNPhCLK-t8D12}tr3I}J0kj+L6oYdp9 z4RIzah{u{f5|M79sY__;mg-{{$A>VT&*qe$8-XpZaG3<;AQwOJKTV!dz@i#HLy1;V94H$#@3EXbM$60f)?d z=jhc|1}bdC;614*HNuPMD6gS_vlC21t^zl!5RY_+p_>FP6EIEj$AFT5B4p@iT-dh{ z>RwJ%si>Wr?m(0aypj!JC~T-2z54GRjn`lh@B-kwM&b})b*aBen8ZYYOm;uK@y%od zai8b;-b1?ScKoNm{G(t0-EaQ$gGfh@@kl>1wytjdn;VC(CggFzBak8pVx3i4Hf&+q zg2+Bb$T{3x*b-}&>y?);b_Gr8VLF+?B+sF_S;EcB8(7^`RLeHXM&z;P z78`lbVLE9Eun&%op%_nKxm>|lUwsAt_~n=I;@fWsJg2i6_ZY=)FIi4{$H~cIchKYW@1@liIJ2VB?%Sb7<2{a_f5d>3cwE`_q>m(Z-!jvx7nhr@y^aI%>$Ys zFA2fp2vs8JWeULvOP~-;O??vcqOD zPikR>E!T1nW|~29FoyNAgxRKse9J-)Q}5vz(;#TTVY$rQlcBqAT0os8tQpUIODbN} zD#7^R5H|7?Jz$j=Bu|+g*Wj_H3T4)?#&1YG==ziZsZa9WF45p-JmX4NN5o~rf)s`Y zJ2MrnH|()fpjdb2liXuZ&o|9W27v7Z5PKx02LP$UIeWwg0+l%ZivA2hpO&+@j-io^ zERjU?opAMIHlMJcyJNPyGr5Kbvv(f@q#s=a@9s8~?27+Jq5`r>ea+okuqYd?Hda!x zvB|TKlfg+S!e%)QTm;kAY6&l10xkO9d_pyh^TPwUU9Cx!0duXW8GCem45v?@5O7qj zBTZNgPp&o_Dnz$Ng%do}{Y9w*2|@_0Cs9TiaL88l@< z;a~((ZmOLT*dT#t+icmBM5`G?!0Q&a%PXiiYZ#9TSR5U~cs65cBUe*PIa&rhci$%o zBhz8C$;D)&=^tf|k`WoiV zxT!0tPy9X&)(^XBXty`aKf?3e{oMyWRLhGj0x7b0w+&FiV8{M z*%&sHIZUQCY#hM4t{_7}2-6UOsg>GIioRf}j^P(I3pb9K^BOia0;X2h5>`87;3N}O z`jlA(VRZ=--EB}I{iKPump+?Lc_AoNk;x7P&#bnmFeWr851Y|r@*8$265-Q<<%4m` zK>GlXRK#AWy`kw=;`YBC3S_juYVzrKDzor*+k?Zq4+7G^{?~v0s~=ieH>|1BV-vkh zR2)LkLOD7NCt^to^$`^%AlB@(Y*DH(f|Dk(z~admM#S*q8wAbV!Z8BGY)-(5Y}NCN zOZf74zoW(8W(5Iw+0<~mTG0!o0nzHh0&%izn}$NY%WMS(^F>%Lf|7(8=2H!|kwPg! ztOG;u8RZHsk!*6v3Iy0GDk)Hy*AkHO!h$(Rw<$SvMxmY>e2au34^6qEQ0;g=fyu#w z_Q^6^qFITH8_^@ZxXhL&EIRQO-b0jEY#gj_ZsDd{!};qayn1m3%VkA5uG!)QPEMW@ z0~+rw5v@>s-g#JFUBT;bzol?EhQ$%|S)kgIVdJEsGmzo4f%A(CQZ;(^{5j=Dr;{m> zlJFdsH#e|eFDX}RrCbQh7s5nL!&mQV`%oU~&h~-VoY0YEr!KL}k4WiFfjrZ2J!zY5 z7z~XOxk{iMIQ88G7h3w@bIm<-8@$W7$+JgQAEwY^&(bB9z!-pA=U|D8`4}KO$e`Kg zuxN6y>zW8l)7rxb`w63A>I{r53Xx1<86{LDe;<~{OcbR|{EVK%yD8ZU`#^DqFaGv7 zfBzru`^G~((vLK(n{ET-Cb_{>c49JUYEO*U^=b{}dPBIuiW<3CfefO-E}}`nOjzed zu_MdrZ&;>b-Y^(qFH@8YM9@T*>et`CfGjWImPj@uc=h@uqQ)uZEo>k#wA&4AZf;<^Ttd0#oak!V zz{RU2+}@z4oe>+7IZBR+Kw@>GH^07FQbYCi?UL5Sq8O2(LZv^_^&eD7!U6S!y}7<7 zRU{-FVQBa0@RSGUQAIG5O_D&p8624?Bw<>AuhV&cAm+G5KAu1A_EJG$VX+ zS{z``(6^lkQ_QA*`U`2o*XYu>)s_B!enO+f7Yh%7_VQq)VqK z2MoQVys$7L=`kP$ltz?MSR~p&-L?djn9spH1$KH_92}Cq?rOP$FTeT<&M&ViB#BJh z>*Xy}7`_z?mKe8=rTefkbv0_qGDXlw%~{H2R$D5w!E%@uS-*Heqmk5^0)Yov<46j~ zc(nVrg1SVH`v$6N$$>5k2_q?IOWx|_0K3x^kk1ORS;Oiwwxtpj7C=cjiFhyT3jDT) z^_z3Je)S4&ueJc~gfN#`vzRX(!+3NE2Zv`cn;nua?-oP52%=2`%j+9vH6PAkGM>OG zGI2K>xVgRMe6=zK(JO7a9U2zjuU8w&K`(EYq?iN*$_;Fmx3FEUPO3y1001BWNkl$O`)tYCwNcw@*Iv{V`3i7`ycBAm0HJIkntsoTwwnwdylB7wf}>RL9pBUB zy!7~tF?}!n>TD=q1}cRy62`UM1;+4%(D*+(U!$Uc>0|;^tp6Ns0L&7a^#(wvs^h?W4aXgdW%fq&sllLrV?arOTHtuqxC(c<6*U6ks#lYkZi@MVWranWNe3;sdfVA=s zwx~3Qq_`%7CTnTF+tv|~67XS|8C96j2=}Ug?WCiVaQTPUGPA_UfGLkb2QHEVhO z%))(EfO6Ws$D7y%Cau>@N}G&$^d1soQx~to80gV)2HqPUXbQmHkp-RkXgYGI{V}hD z(De4|drj?!x1Di21RpvE?=%=G$Na^g{)<2S{O|tX-+p=5G4BOZWBfZH8NCCSe9!fE zA5+(oG9e7)Ip--XT$HLqGK zLpe|Ms?ak;mM%7;K0G?6$+B85i75=cF3|BolIp|&G|bK=j}#S(FwZh7U^JV;NL!jA z5Rs>9Wpa2HVc3*JS_03x9K7glwSn7PQ~|mL=NlN$M-*xuPckAe<qMd^C>Ksw=hFxqGCjOVxNS2D9G;F>p*!$REolS zT@=*E#dAI$bAHuYs;|W+1g5l6qAiRDAE(toWXOC6IztaG?i;2L+~4qfckMIOlRf}Q zhrb_R;Xds%UWd+5HC?rKW9ZKK26J2>!9<*=Bz18-s`@|U@5Zd*B^}(17y>QdRKJLSV*EcET(qLgV z5TSqrDmjZ&Q%=qVFB8EPbwBH>h0z3s4Q6nJm5umtc&%q6s7~ZCs=2TyR+g& zW75ZP^vy{ovh$Ra@{-iUG(LS4sWFtaGn0tlULZ|O*U*s#v=ft$B{&@c5g)?3A*Iln z2EO|v2@!|0cn=NslS(>0?!S2lK>9J{M<2GOK&l(w49vk*wWHzXS_V@d%woZLX{aq) zwd>86NCQ}yJ)W^T&;fNE8I#9}M5FCyLu43S?2*YzY*woA%;~d81VTXsEHcN=Ev(*^ z2v$q4QJhIt>tWNhaI@Wly*P)fn=6>0HH>v|H~^8AS~rwyq(O?RMcBX?$v>DY+$^Ci zH>AgF3j?G11jgeWMiUgB&p8)5MG!UMt2L}IzlH0s{}GlKuYlI1MF#C^3N41$wgoYp z(M!bMt*&gKT9uHs4i2VM>d!hJO$kKLFTRC~iw(5x7#8yk>S_ZwH&?LURB(k#P}m%O zy`~Zx6qdk{Ig-4V+YP*a`I?AAD8%4k!HPx{{&rz5Qz-*3m=f--tD1VsA_(KXz>i^X zR8%!$wj@trUFyF7vG;Lr!&rHLhB5mR0mvX<+&nRKOH zQy9ja=3K>-&4{qXVPsE=OP1Ov#?%@!qgxTKR{*nqmjuu?_iQ3!-z5(XKT!2@m9?BW zgK6&5EBiM|znCF2@Sef*p0^%e-;05F0_lJC7ysf{)O+*;Ii!!@((nL;5C?*z0;z9W zssU3COHCHAoD~CVMY4c5u-a~5I-gP<;}~<7^98B-OeRy((p{}qu-R;&Y+7mohI3*x zz9B0W^On+mm`^8IpqhM#z;(p@&AM*jVzq?Z)h(E&hB0`U7X=((18rlVa31DaMrAWI zBGzQ2)P(17bA17=t6(xi!q1$Pl17Ck@=!L;A)AiCOpr8DLcP3z?fFaCUcUiXu8=Pa zo7FWeFANDaVCNguH^u9!w>44vjn5(T1`cL(@DmKJiSoO#olNe_Vq?Bz$O>5)Gn9Q7|kZp#Y8X<(BHy=6Oy)ioiL;91VhaUch3~QmF@qgRyjGU6z22Ua%_- zhLw^0q&XH0bJ-CK(7S2_<;^8*t}me8uE~N&P+DDIfh$XxWB=93l*3}kkZnD6<3RBT zQXDD@l2N<4-oSEs17)>=$$Sn^e)Jrk|K!IovU7O(?FDShHQe4_LtUeHnTLCWIb&QP zRyViAyu~o@(a{lw!4W`7`V8+U=9?Ty2YgRD#7|Gp;1q@G0jMMf`$mAbIz zbjx+vIM=Wim4MU|38~GDrVklNt+aA;7{+zPhR6Ao<*49g!HifXDU<$~mVnd?nBb)6 zh;t@-C7FaUsTMkC5JiPE?4{a}cWNmWqk;oYL>ahdT7-Wb_Y|e{u!-kSL_!o@Fx;d+ z^UUhC2-L<%lM5g*2#|VLj)qGpJLu&a;x1@7HPoMij5}$XO(aS$pLc40!9d1-=x6jY z*)TNSkNzMcH+#?U*LRh{+y|t8^_|Y?18>>{7l9K)mB_looQ0u0gbmdZ-kDA~!dS8F zfT`|FtUJY$i|rO>i#dr4;P;V{i%L9}!c7@Hf(iixg%|RYqg6sm@@k2Sv=~hkk`3b= z4Jr!NZPdBV5X@1Vx2j-bEgWP8z|6yx)Q(DUSwkv8rDK_}Y*avw-kP;gA^Wk-s2z0)9U&l(sJsVFT&%&xkP#Xf=&fR2^YrN% zoP6>#`0VF@3TMxL2BxyGL4)JPggj!rnME@Z9`rgf+u>e00O*OF4BUmpoDBbV^q~6M3B4PNU*d-|LM5n zC|Q`4cQG8gsT=ZGamJ6c0&X{361qqFJ?iD6V1pTtA)}UQ1=NnuH*WzZLD!TUD7V`! z2_j$^nrh$h)LI8k)sT7JkZMs2W@Jd`w-}8nC*@j}$-ceaz~%Ld3=0&hKYIQXc>ehx z!_l)JLpD1C*kDVwBRG3{3d@@%Y&H$d=7(^2bOsrE=on&e8Zr_v2Ta~`mQk)5g);DN zp_l5ZbhV+0joofIt7p>V@EXEG9Q7;tIC!)2XcDMv9r)Q$$Mb?i-( zN|B2lRlH3i?Lsh$5efd!P%c(D7P4MslxxkXJ5G=_6;HSIT80D3Q{ij2){9aS1a&2f z&S4q_J%4Yc{44^T{y(N4VkEB{zKz~*c&kqw(y`tT=ce1oISKB>!o5KHH-GWR?+irm zyf3|o!DA<5Cuyzk`52au4Pmtgi7Dk6%Aph{<|(KPg(I)6by5T^fmbU7oCYX{Qn8-2 zuBn6uCmn_%RgX93=Zp-ZxI*%nRv~>3qks?&nqBEa71=256}(OGQMVa#Iq>d$nLq4r45h!CKfn=gH+IB1E}l zwouU%MLpr`n;Y<^pdO)5fBYF7A>$Y0P301x$zVDg!PBQ_P;Dy8kr8P)f^W*aZef5iB&BrO>S*K;;@z^43T&0U5QqNL(6W087g? z^4d^>lYvz8k7!WWjVFmf4#RS-C+0zslY~Gzk_-YG!8Jha1fwBRF~D6MYQX)IM4-V$ z!36~yj_8`efaW|XH!XLnC!7?apfHRTaTu+UZj3 z*VyQ?#r$PLYD$1K1m=5b1JgO92&Q*MG~VaJLU;OGf|MBntpP|3q<&pmC z;qjUW`_J8f4t%wfvh;UP&>@?~NSH|-u>huyp%JKWCFlHdBOzQ$Ow=USkf+`8d^|}n zQeicDrwxFqX<^1(2s=JDuEo;Omcz%~CsXx$6+XdtE2~Iv zNtw&5TOt!7Al@u**&@z(AwX{*J<-FXLkg4C%_XyNr6d9yFSkP7ClLlDUlo>^(~WOn zgSD#atw6MfRj-udCxQMd|+qSX;jMh-->^G3m_G* z^wB_?#DwoU$it`L&|bcSVceg7JMXJw<$~oe3!j8FFcg$q9*_u#*ySOUUVp75>^1b3 zE<|j3auP=z%g7X!{08lt6pso9TohdJ+~d@V)g7WFUUfB6iaeyta+2t zfDw`;jHMbi>d4|yl)r`oMr2Vp5=wRJ8p`sP6oNKe6zlga@Q&p*qcI8W<4-3f3G~WK ztfg%@XL%(GL|8U-aC8D^XQwcqPXX!@%54QLD$6)53Yb7<7cf7V!E}B|x!2XEf;X?P zssAXxF0QU9@2hhkiBTv*k05$_b_Qix!<&l>YLVt-Q7N%D)p5BCwTeRmiEE)Ox1^6+ zx>`c>rZW~a7mm*YyW+5z1un=f8&>W+48G228~PoBe;lciyWcP-?Ugk=o$i}q@6&UA z%=TT5AHFM6kzrkR5QCf&<>9`gEMP+3tJYll3>>uz6tYgMQ6L)(T~8`WHby9L{;+~C z$9|IN1&307$kA>Hmr<))CN7CYM5QwZ92X`v3+)q8f`uhagcl9ly0qI1#86tRU0&47 z42zwV>6n&{fzWwHMeu#7QH6BuNE^0>_US|vLITiEfBH~b<2(MVUK_+kEBQ;3%#?$6 z!8WZg4rdmEb-N7V{$}o&W4qsaud`rpp7d^y^c`&vf#EyWk;iRXTH+&!l82>T+r`|s zB$S>JfrWHDZPV#CAI~e*-Y_9_q35h#M8rSN(WqF!m{_!&PsI?X$97?;qYF_$z)Sf} zw_`pp0N#oc3KeHt`X1&*iAjqD9wZkb@MFnNwISbinga=Pqog5$R*l-iD_CP#x@tur z!jSifA!=miVy7BMLJTdDp4K;O*lf0>8;s0gBvTz69Kq4iA?XU^$v0I+P12jzQj=|C z9kog;ux8bdV7)Ej_4#Y~$KU-PzIpK)E^k(pKXy`2hh7-=8GZiAGkEs=6S`NgUcDjU zM1zBLhc(=s+M|XS8YER^4QimaEQpbmyO0Hsy;-qjs9;hU*6Ot(q}~fzedl3!&wjL= zC4_Rh<(;)Qd_NZD4=Kfbx6Sl-^RXmkO&_dzW^_2^un-!dP^7*;aE@#_dg z8A#QskE9?C7RfJCUV_YWWX5{S?FT)5HZ~ZGW~~s|EW4~mdZj54Ink)5uX|}Ep`c3K z2YyjxMAJo}5`U1uE9(z~fE`GbiWi7hQcmHFf`#9KxHL@=+CoMpBqtijUi*N86JsEH z;UPul<9P*2l#PYvF;jAnfQ+g?l@1k!hzA5FJid;R@yUQ~3*k|pg} zAA0g-l9w>vhB~d(llA?&+u1VCb|hG@JVTk6ckOO1Ia7RDD@1ZEtIUanCQc`GVM+A~+SPzD20znH5B z+E8PuU>>+Xs{ECL=#B$u0+6Z!rTvvPWXxV`1k#Sf5W30e<`dI1RZB`(yn|k2e;@tr zhk>5ywl7b*&m;Zfy`05;_w`+GJ`P2vc~YHyol{Aw){@W%hdR2opCDB9zVc+>8uQxE zl=L@AQz_&hG`Vk*{70a?ClpSepsJk0@?Qj^l-IS;AafWkXlG&T9FdXo+=uCmVO@_p zxb22ifiR@&JojD1-%+rk6%e)Am}rIdrh@D16})bhdzEJfrU;Xrp0( zqzse@T&^qFmgw!}kmc6^W&*2q3m0#0;QagsHdO_-!2D~$9WfkR?Feq@b#KcG+{Goy zFQRG`DneoJQS|6%3+$I_VN-757WzSH!zZ77Lf45MZeG8BP4%%267|Jr9$Omi#hLRQ+kG0sK7`PL+`spl66 zK)Rkpk3DE3`6TC*3JHi)5cGSK){s=z0xpJi6L5?`s=M*>Xi`F_0_c$Ux$AB2`}I*y zm6jo;M@k*x@Lm+P4=Iy(4>ey5Y~7OhPr_wXPqd=6ko45CO5sMbsCkB7vL&Gh%~RuDz%VX?2!?PmJc~7@ z&*lrtEn~edN;G1V@{7w$s$T^JQpuH}_9?S}Jq*KPI+0As-3(jN-_J%sDiI3|gQLMP znM~+?1W_70SU(%cYagde+V@%B>5f6W!X%<8Mi+L?HAei^h0_Kw;xn@lYe9P)8J^Wn zJT37m$rDu2={2-b?OP4WhT2O7Q4$Yvp+U8k+>(|0R4eRz-kl3A#x(uZhOWTJDM zy67F7L;s#Q4Ir|FF8Lgl`Gs#w>oWC3)%c7%90dYM81@V7)X&JviQBs z6~xB>t^ejQkb3yyha6H0k6acaub~acp;86RMwq;fv_PUfn|{{E7Du6!MnEl1?#JWp zGWD9aB;k6^y#|ZW#SZsL_Jt>*iI!{#%LuEt^&HM@ML!fRSqT&qs5mK|A?Y*(Qe+fk zXPLStL3#3mF#v_-KDl_NJ_9Txtyf4Yx`kJ7ZsGEJL*ZIH-?Bmhh8C(Cmx2*^Goo7B z>zg&adUX!3-(11f%?hx>#+xy{T368LvU~zX*ReAp001BWNkl=$!Vk3u;{ln$gO&&IAGAkuj03nkD$A-ni4Tu9wPh&J;hMh=##l@1@t&t71AmR zkkWgW!@ew}5*u9T3-qPu?=;8BA}1jKwqdp4)g?r`!a|dJm3l?}GM3%Q1SHS91A|7_ zkm&X9Y3#e~9B<^pM7RQHofnL4mld#7#?HLZC+j@EpJ^z`{YcN{7 z1Ehcbum1QL06xF-O1`IUPoQ9U>lsB}>LE4P*h)SEJvSuX)nW=_Uqb{^0@JV=l=GE0Tmto}vwTfFVmz*E%hmBJ&Dhd7X_IteN zTz4*W_npUm|GRBN`wCaHv-oMO+lR6j* zy}Q=|mk4_aeaa{x?R(PcuKIiUexo^T5XAI|{u9ZT8Ir_|m?XYyNDd9yj-7JHXjT$v zy2^{U|M@Tf=nsy6^Pm6WD*gPBNBXO{fOmtB`)}O?Z))#3r*91&QuE>Zew>7NS z6@_doRw?8*Y=H89m>V5qBO3}6-`s5B`lf{Cx&h=eA>qh*z8)*N$(BOP==Ims8?~lF zcgGTB*s9Jt64%F47R;YgK|O+E+Y-|lYgb>qdI4|F&*5gdgw|7?NUkAcd)#h(!#fEqQ`ILHk32%+Uxu;W$7YdUSD6qX0xK}!Dkdw0oG`m zYkyflr+wOPd#StTO!!5^rHMz`Ux#FX@4VM_0-}HSHk(iOvFrK7{HgB&he)E5S`~|g8dQ7hdSf(o=o=+GdC@W85k#T{p^RgFrJiU zt;Q%ykD>ha@C^N5Qv ziBCei>AjTqJ$qkS09z$PagS95D$F0ExIXqpH4@T7jHoDH+frEyF4`<-D3pAeKPW7L z9%4z0cnb}_C|Sc^QZb&wban(;aR}SeLUoQI-v(C84cxAffs7*d6Vl@)1vg(nOZitv zs!JJajT&yA&LksGLzeXtvS|CB}HP?8QjfREdY7J51vJ z>7&qGu$HH2uTAwfear<3kn(z9_1~?0MxsaY_oTE$#ZOdISbnOwOo&S>pV#=vQ16Kj z`Q&FW0^9{t@9zbfp{T#DPus#ODSQX)1DVRr%we{1~1-eFitTxA6DB z{VlAvYl?Q^8kmdNOK?m&JMLX*=T{R1G)xjc_7DNZfcfGfK>An7F5l7iT^6MWo<(9( z=+Sghb#gzsnth*7S_Hyl^PZrs!=9gYd8!@|0XZT1c7X?Mao{4kmS2*t0A?B6FuE{;Hc37 z9sd+U2v?^nhWEmYCO@BOh~MigabRsSd0PTkVF+>oB@`KpyCczv!l>khA;>l&_s0W) zX!pQ%pH*#$MAUG{G!m#llFw|ufCH%+MKaROs)p^hA~6M&{X-H{OQB&rmmF+fK!(B& z#RzOMrtmU;Zd=u&kks?1naGY zp;T**ir@-tyF^*aM~ z&D`Yt^@F1NW0J+ew@NbVdZgeIk5ouV#MDoL)I?zRzRR#R!TU8LNbkcM=uN8OEm0R| zgn_GJNE1W90T>cPLWyjB3rp6!P=eEWrXqGfG??!N;YW_KfYoN_eIgBdbQDTBzqp_? z)B0;%zg!;gsh;}ayq9qlB7tdtYT$a`Otb)07zRDzj5W!32uB?t{V)I3A0g4`BWdJq zq(^&<`}FJR8G0G|^Y< z61MFU8edc2R4?TmRwe>IQf!Wl?cb)01%c+(>K1O-D`N6;FV!OSm(+rJj&sK_u1lk| zgHP$>-3S0|0%kH6-i06hL%ADDqegwn7rg?qI*w~z1hPZ!0%14u$x#6>P5kqeA>AQ*z4 z71~@{Lb}Hr<*Q5r=2S8(^C$tz9i3g55(nPLNPN33CH3LCqHg$Cbqz0Hy`*zSFs0U( zp)BTcr=LbKXg@ZS61)+W;h}?pJ*M*lBV+mTfBWD3*T?_o|Mh`e31g4m5pxPq4^C%<((XAW<*Sq@j*J^DEg*ATmM6o-xoJ#4cFc-Q`Q` z-ALXK!PMB`of)yjjU>}~?%N>F5(>pZgwBPHis9VRNIJM+SqPSPV9PYe`Oel^(4eX| zJVZ8H?JR|d8vZuHXn1| z(lp#Qjfh-MCbG7Bk~U9a&Qd!yZ?EP-AR>sTl!weJi zeGlkIY|&#M{!ZsgRD(4bmm-qT@w80mGefprbO>c^zh%DbtvB_^`=QL>>FR8YHIhAF zH7o}z$>)TUN6KX+<;Tq<(1JG7w=A`Heb|ANmFhi9EaupOrVFOV2OqhEKPK@uhZmHA z_e{+HhA<|?-lb|p$EFq<>W$s4l=q>cBzmMQi%M%b8r<4OjX<>Fe0^CGp|2YO^!v~E zJ#G8OU>FPDlLxxpZacckiW%LJGko85Mp!G34cb_lg~GDuNzMTp`O_)CCKCculJ(^9 zZbz7*52PPm|50MzQJXRwb!~NGNtlE?Xm|n<`QzTlu3)5ngY6wdWoN=ZWZQ99ySW4{ zezD@60kv;xqa~Yo&{jjbN&YMadVHX0DPile@tFJ8V0RSEk$S@-`K{yzZHOC53n{0< z6AXxXjss-|c`+3b1?neCAX*_HGVrzngz*e>sIk5d0k&$Ou{C+06_TNpyp>q|#zYSi z!_TYjmY;{?mTF7@$wD_}WB}(jmkDD7+c_F7aer?Eig$)xAMyR~1CTq%=!CELhp#%{ z?S;y|chG#uw%_*I*`g8PLpLR@4>nQ;Wu2AA`{JJkgfPJkG3w=}A;qLtm9|)n9st$! z+`v1>faw`XJtlPDn~VW2AH38MF#}FtV9NFS4! zc;eNBct_{KFsL}Of?cpqe8_>u(7Fk`@X5$djkJD9D%v`}`+5C{hL}w9?~YX*_h6K` zuif#9m?WeCK_+b|o}+S5UeE+5=Pzr(*p?Zyp!wf$60+cA!ej*AM=^ygAJdRP!Y>Ze z&6YjU3PZpS<@mCMTVdpWTWG0>wFFx^7&V?kBA7>I5&4V=Nh*x$l~F6KUAJ11wyzgp zZM7FHdfPbpaX@39)I^PA?Khg18v&>iPT!V^o>u31-MdgcHa0Z0huAo|GX~yryZgJl zf3y8R-SPbow{GsPF($A<&44wK8p`qi8rJ1G%z2U!X`-HJywp)+YZ-{_r6$it!^IGr zA9$nkd#>{eHH*r*kPvgvt>)E5ug%6zKdGM`48o*FJp^S#+BJ4%QJKF0wvxhedj8Z! zoLk3PiELp=63fl7(-O8#jO!@3E6ik$QT~yb^e$QZKFoF(m@6)%5zJ7RtDK4ez$qX{ z=5?MGFrQB0@bC~0=5sh$Ea>0U(KzHoDK}aa^6!lMMKkvNEIpq+q21lEhS5}mUuEzZRFi-rn89Ov)4}OC$#O2_*eLW%bvBMvhO0#NLK0tOX`oT1uNY-hGDu`~vWOF+s*Z7@dU zOi`Uk#KI}#Y&|r_!icMXy5ptlq57$ghnRcmS_Wi$Km^^edSO*YfJ z%E4`Cq1930g!d4ML7e}z{KC+t2sIe>dH@n4kQdTT@*EPeg}#ktl2`YPhXahh_q!VG zdicnB@gc;Urk%X$1hBfLEFPrhRLE8o&Erl(2&UM8Vl*zuOJ}kd$8@X!5!HE9nnh~Q zHEHsQNWuHsQok-@gGrp9)FJ853|Wzp;Y-d(4vX0WPLEIF^z;-?jG!h*{Y>pADXx3!!gFn8%pVd7#S0JJ?-{Vc zqcOoFP0|U`TkKtBI(P0HPbS*bdp;`#;eq?^!-O`;K#3(B>3*4@!q*B^$iIa$6!Np+ zzShRskZ*B)MvfG$Q*Jb89bGI_*;cFvtPEYsvuYh^=E_kTwG2<7qI<#v7X{;Tt zSqHR&su<}}w3|aN=!woIQy3QoU0Yo{0a6KLnNH3NQU<3 z!ytUzEK0ra-e2~-H+*qXnzB#Cdq0Gx`?mfyr5;D>-Nnu9{1yT$$^X-ssPE5u^3oiS zU7RDheo)R(I0zb(O$}O^geEooQYwG=sUMHBo{DIlD@_)U{cBPLPZzvhBc3LR7wlxN zm}Cw@#}JPPR;6MeylaZ^r7w`qSGb%A(4zOH?fqzdRRYIHvH5Vh{jhI37D5S2i2Q-n z#&b)>>3Bk|Ade1@;Pm8_UdM+=T?|UP^XN>mtFZ<{f ztEb6u+w(AeLP*&4K)dLkTE6O0qbd<9_uwLd-X%z5^5{AGsO6b#WR&Cu2GH1P>OmtuaYgZRrozorTyJsULPc^A=7CAwAGz_A# z4mEWI;uDtI1Ys&i16sW`myCkG?WKlxR2_@YD?~x##0}TnA1wos5p&1**&&zRv4u#= z?#dhA@?q@z^c~M^W%NL2(-|!02h>yf`0x;pj*baHu^x3Xo5O56hskI}RS-TzJ6n$U zks_LtHjbt$;0lg)I*>eJ=#<)x3_SH$r%Bn|C!FJ?jf=p(PCc-pb(1sKg{={oa;)m}2g-aS6#mOHEWjKY>x5*eW%LAtB$ocwbDE zXVYs;L$3W$Hl7^=W_5QN7fGrZa}w%pQ3CM20@HcB`uFf+?6jI_*4jVx_`_S{Y*W3sZ=>VZCN;aoKv&zfL>q z@WC;>+XqtfD}8V#J=+hsbv!w1J5*;7uPVgJ9XI5Kjz_usFgz#|&L^HD4@^zWM<>ZA zrjtx?B{ld+R?_EZAOaqXlm&>4b23=iE=&;b1Lr-44eA|s?t^fdx!*oc8n#J~q$hW4=4ay9m^;N;E%ONb38AUoW4m;6C0<3Sg)+O})$`Pc>w@DPxqm#_ zxg!OIBZM?Sm1kH6fc2c}*%K)VVjot|>Q7w9ne<9bLb`1NlxfZbL3>$Om;YLzsBd@$| z!{=QZ!t8jWAKwVLZ+xbT<@g%{BdW7u1O4aEp24S|d;(9;PANZ%KdV^S-2t(qZ zCZ3^B_sPF`<+<7<#~VP-=mHt(`B)oFCSjfES+~wdiNvJ5r1hzi5e(b4DsShzl5OD{gVo%fo+lJ8Gid zgJVPba8$On|w9d-e>TJ$V9$ z2L~`Jl$Fbb%M7$rkclN%-p44zj&TzVrhu6#kVaLbkHs5>2%-v{eZoSpsGM~8xT~wd z&i;2_kam0+_&k?G8c}kvfh6#_>)Kt)O?V}2)}9Pl$mh!8+J5NHyY3=I_rZoxmBA7s zDkI7Qp#@cqsO-f1&daHX>ckrzxF3B3*r$<<0T6>^AL(~hk}Z=7(77Lp$4yIE(kIgI z?CFs={kv}OXrCGZG17w03bQg&?!}-$u7I`O(5~DC3#N1L(>m)`jWVZfb`$b?PBdgw zrLf_^>ASdH(Wn|?68Ay|oo~F8gzF=MB`N`Nw8t|)!ep#~CShH5O46|L4{1x!85P&C z@y6-#2|RuBlwL?KqH?-4Kou16yY0)p_Gx!@&f{@0+d=) zUfN;p0I4n*t&nS4_n?80`Zfx@ZCKRP4|aVaNIa-6*rtSueg0^&T&O3T)Nl_0drIg@ zJxBl*EK;w&nlwMgM zNSSD76CjN#)?Fawo|rBDY(+esMG8!Kkz^#LpnWe`f0skv_a5&KyhXO~u16Yn7rZYs z@ZI>i{`}~lRRp`;U zUO<*~7Lxn1Yf9Wb;)jg-paQgw&Ii@y<2pcdz6q@s(=e~v#oY$i?|%!=C5^J|Y`c+) zl$?qRPFUV@cJ_o`M+e6+8BZa@?o`^xS?|3U$z|i?^K}fCF+#84iT6^&(fAKGW z(b3p7drtj(-NMOZd$UIBByHymyiZyJNgUg|q!F5lKOmiaiPI!DSZ7H{h3><^Oi6*A zo1-37f{bBNNRBl$AbRV@koOthOB!CJ>rPzyOr%c{Q#PX?R&oWjC`&=Q3*kQyAY~A( zWx=Jka-qb;cTd%rE>@sPDQc$(tfXNmr>hBc|ngM`YRVg z*(GzsgLF%Qzz!Y0mcAwO$dw`xp!WV5y3n!*EQf&9@BA{j|2`~23Zy>%OXt0IQ4xvW zwCW`RQV2i_zURS&2yLGPl>#Yzx%iU!x#VV|M*}3LoTOsELYG~)p>un>h4W%lvC-yXi248 z3Z%)1?M<`p)JaK!O4mX?NFP&Kt&np0@PbS`wmlVYF zm0|>mFC7`er01(1p5+j41IYv@uS0|A7ytku07*naRMSztXf5hUAy=xb-Q@bz2nlzh zx2~GOWvaWSthflG9J0(5BrJ!{Tf<#$DD-T)wWBVv)#LH*8nIo^X7DThmHEz)ed+_g=<^QrSCd{&+KGH%9t?Pvee_FFA{o=rd#VtG1(J`$(BtWc{RgiiG;B^Sj}8v| zbYBtpJai9g`rpyWkcUvisU)~KpQE8O6gl%d|KB}-UHEsee&}w*jq18F^3*gTuj{?8 zb!mhk=C5~pxCXhs-Ld{KgLZi9-`nm#@7{A*hDcU)1amBPIXZ>2(PZnXSt3^*8%K;k(&^OD7eQtq-EtF`tUzTLe-TvG=566lz72@)V=(>N@5` z7tqt&ntnD-n`)O2>WBs=z9f%JAd?wkCAOSPGSOhrh6C}aUC$+1lXvcO93zn(ZNVn^ z+FvAx26b=evDRll;YbNsR>)MDdY*i(%+j@@?O6mM4MP11@bbAwuRXQMT}m*M0svmP zg`P%pp$%mn6t!>+qS1&pBAUq$t8+!&)-oMYfH*E}|LW7*e+Q8E-uC^ko9@&Ycs}X; zi(%X3G5GFiNy|otfU0v^VGO4y+CS;|VV8KN00|I7YRK*fd=I`ej{9Ef(8%nhDUzF& z8YfN%Y+|e@U!wnoCm7CeXk72kkX_M}2LRw+v4!saiib4`(5G*U=)!ysN5{wT1Vg&y zjUK^xG@+Ho%L1rv;N+*OTxleHlT7#_Fzx-@^%r^hfG#0JTgr2cQQOG6-Q7C9^?Qy_^zM?;8YZ+J%aI!H zUH9K416|mhMnO!$N450i-3P|IzAyy#W{v<-(yRg;t9u=jp-{EGmhcLj#;8~17dV*}|88i-C9 z&T+;r`_cOjUaHMQ_?>_=%gMqXjkzg7mTBl)zsvn4HN=aP9w&O!Fbfkq0aZ;!Kb5_! z+M(1i-Lpl*r0-~;K)Mi%IJ)t>W=8jB-5YD{Je=SW-SM>U`uEOe?s;GdYWeiN^qpiX zrbNHaN0J49*em3P-uYc{?j0%`$pd&Cj-42xyT{^f=gtotIL%M%&$NEGvy%=Jw!iI; z?cQBX@5H^^{`tCR>)A01!g+3CG#bOf0p>-|2uQK)WjdWfW^)ntN6~PX+fgUL3L>mW9-9U{%x-E&gMFJLe9X(PH@Lzza%A^V@;cSPt{`={IvUBg> z&L{2D=6i<8PN1FmE_!81pP(betL@Zpr;u=FNDai<8Ui%I!=Kig>!0bHohelEczn&Nt zI;R8xQ4qrrkmex=sv;RS%R;|ZB!v~D2`m|FDnHtVU;+u2E& zk;%sfaM=$WslO^jTHes{{SIypG0W3G?OWuBS^6e`XnLtWtYOKqje7GsTatsBef!^k z4m(%TL*|Y*J3xBsg&josZC8P8-)53)h|j1$UixRbyT_fmsLP~DR_gu`iXVb80_kD_ zrza5Md^L)g~}dj zSyhCc3Z#2I(%~WVVYbIuE?p0B_?r5Q<^BN1kVkgcV!Q9t_iws@L}sqEd^3qBEx_#3 zLi7Hflg<%DAP5#|4@i?fh7OWC(t$JX2l3P+HK|7mOc2sf+4wQ;uWGmfIjV^inir); zH0)h5p$Ng#5rFC|dZN&oa_@62KIDnTC`B|Lx*bwAVQmALGKfYXC5AOI!!qi`gB~bq zf*zu%_Sq9!80L$4XzfHmDxl2aVJ>OH=ZM~CU01N#tl{?d8m_J`;rjYoz;q4k?FKfR z4V0Twa%C*wj*LWYj7=jz8>h>i*x_!6htah@RjgppgX)Q?q-JC{h4HZG@~G$Yko~3~ zddq?3!*zma;tuS)2hzU(hwowQR6h&_7&@l?2i%4|vv8K2<^ZZ0MW!x-=X}0^$!tdN zQF#|eXiz^KbDC8JZCmpL(K;Ai*(^Iu3Zxj_shXPFL?S_}PJy)ALb=`G?}M4fOYqtyol3aV|C8f8Sc%lV`Em@X} z8M>Z8l#~DJfeP8kM>Qp%98d4m{WkM^*zRDUnj~3o?C2I%T~(<< zxYN!#?jG(Tva-6XXJ!}hne3{{j11xGsPBB|>>QU@SNQ1pM|l3?1p_9|NxNPwI@d0< zusFA_5)0Q`vg}qgl6+6X^#1Oat6-WQj9Pq8AVeS2!o7T;^FKDX zJ^ilyJhdBw^&WkpTa{ht?a_CnqIDi!q_d455? zO^>xHxAMC*o-oFvR^Wh2FrPBI$F@2A}eoLom_gBZ>d_EL!6zT;p+KE%m@0( zr=Kzt%hlyGtk&yLoj(nAc-5{;jZs>M&R-j;(_1}1pgQc?3cb6#!JC^mc=_@t{Pfe0 zc>VGv-n@E^`}$50omTisz5CZ3+35WkJhWlQhHL-OzSrnCyYKu*dyn?Cs)F?(NEa3( z<#Mr*^>cQ%WCvD*HoHF`++d~#Dz!{dEZ5rBCDkJwqI zBSz?$i?sjVsO{?hFcBKr6OJoSvd}Y22S9=zK+9X5NR)ey@m# zPk-^KX>D^R&VKg%BYgJ7=lJ}K-{aFyKgElWK4Ih`@r1Gk8q7BD8jZ3oZD$>OCLZa3 zN~VWgZYkKRyN{V)s87kxik*tiv`%; z{CXeDXXNj(HS|6$PU$#y&at_3EIf4T(@h0<9y?b*X!{^H63^53JWcP6p@>7K*%~GM z0F^=`VM;=ktW*LE)rS`QeU1HQkNr-BC>6pWLWVBWA(L~5`D_@mD^;^ZkW!8hAmfW`Tz01|KT6TpWyhjdBNn-eABT)y!%LvrM!%sZtD7{ST3=v@aV0K zJw;!N+i9U_(RG?20@KXmvF~vLLtqx_Elk@9()7D2MPUCXVwYS0_O-jgp{*I)KhCXe zRp6dby<>q0SQH6U2?gp1P$YLi@z7eC04%BU0*5o0>k=Y1lj6 z-yyeCb>O{@gu%tEnOTKUh6S#!p5qT+{}EsR=}-9Vv(Irx<()~YqKw3CExubmuAfC_W_)a}7~;L(T__aw_{Ogr7+hDptR!J97fK%AdY zP$2vjK1pJwL$`N7J_=u`+QkH0=JypEG8UvxfcoD<>9&UkF;-GeY7kV*}-!U;MuLvUBhXgzcdFe(!2q z$sb~3dsp0mR2y<77Z*8`cbBsnTfVEs3g3M5Z+QLcB{ugPM}Csl&s8cd4*sYve1zrt zo3hqiJ4K+LV!{6Pxvzi8Cyk4;E4D@%V6>oWE=!cC)&}A( z?`eUrxD$C>=-8HN0Bc72GIF=6#Fbmuf!n=x^^#j_E>l68%mf?V{*gA|oJ}8mc;d%( zT%zR#db;5i-cfHI{rvr>K*HXcT&K%VOKBKvBzR(nh?(eJ8#K=$+`k(-mDEg);oN>^lgVqP#jonXojkxSx>TZ|nD~*hmlByKXo?qdQfBXaf{_p<| zfBc(2VSV)iIxk$FoAirl#X_ziAt4=<62I;eVcKKp@or!){_g!6PNS#T&~mlLr+JRW ze2(+=Ip^H{%RlG%{@d@c-EF0~v~$G=W-<0AbV>33o*e@SK2|8&-WqtP=J%yjz=$LM z~Nvb7E zLUgrUVKHBFD5Gr^8ba23EA&7fod`*75SWdah`~{!`p=jimB<(>5ujv=R&~XKwBeGJ ztz&<4{NyB1t>GAH=h}UQuWRUn`Ri$qwQhZ1=t$l~YXcH0TTW9$sebNj01Pk9=V@HR2!Zv!u^mwc=iP6(65KF~i zh)+NHgazoAU;Yl~=PR~W+e3xjzD9L$uzO=d+5nL+(8fW0q4d+&*@*9RC7K zZ;dOh|2~@PKm160%xpi!3Vyd1<-;3!WehSZ7|p&|%utp&?;0fZD9xolG-zuJ+bYMQ z)_G{Gj}?WgVJ1`$Bb0A&-;yw8KvB)#SfuI3?Jn{gtdQjj=iMAMICa6CsUL z+xw4S>RLXH9Pshy_bXnzylWyZ;hfQ2vqIUp9M6V?C~-*JjOTr4O(^zo8Ry5fuIf$0 z>_x;@bl~sTj{Qg~B{fcf3QCuL7wm>{O27CQNsxYpk&QhyyZf%dU#Fc?@u1({*Co{r z;j}d~OeR;o+5PYgPwCdsn>_KaLt4DS#8sWLkqXqvJdFcv%Ev}ymu@=dU3^+a|04Y5 z5vrWZZ~gBQi(?_03D0Z`nY^_T_hkz|Asr&sA)2SvfwWgo=-H@mBS-gRA-+di-~H8D z1>H$_id&1>keXI%l0tDB z!53fr4)>c4w%d)s{p%_etd7ScQJN;`Jb$&;Cp8bV;ej=M%6R*A|G=CWKPEB)-ouKY z+}D1w?pKp5@ad$5N9so&5r-zH{e%@p^3cF}Xnb`e1{IMzSMm_FV?Xk12fk#StJBIZ z+`SMikTu#E=e}h@D^@7~^uJpvq+vo$S^E{)#9xm;!Vy2`uiWD0JT-4V)NM~$jH%9) z3dASdv!DE-Qii1A>C+xoqc7(M_DEHi@)D|@Fa@B*MyVetKwlfFeah)B3IU-zqB;yz zl3%Z#()ryE8#X#C`EHjN7x?PSFIkA5t(UlY^BRBt^S8KubA#QXh9b9ZImc|i#@d`? zJ}Uss8F4Gz^umkVjg|N(h@gJ6Az^%n!(k^tFQqv4xmus$;{1})z~^TdESQUO#^XU6 zJGsAV7O1V%sMO*{raaRxfB$=2U%$rno7dRh-=ku}2K1Dzv03uVw%9}U+qI0ljWq42 z_vksd*2cg7m+7RozJig@6V)l}kPjnirjzMyrbJZ#JKBVNWQSs`K z^+_yXU`T%9sl6q zoTwo`WVxmmQuvm?NI1xZ0i1S&sS`Dn0bxM2cph@&4zC-r;Kcc$5$Sv%YLsr64y@!X z%`P`mIUtPcVrV`khf%r;ZRYEVT2$8Hz%T2_7dp=15bsp+efyZ4OC5UZjQyi6nC@Xg zhk64^Wt;e3(|D0)=9L*f{p4f(?suPKwOr!n`VGGQ_FH`O%{SO=cg&T$Sgx@mL52ki zO|Bw?jM2|6lxO$!6p35+7W>1FHEe2Sxxo4PIWr_ZfAJBXJ$r`p z^GnPZbB>F01c}DT0hijwFwBeGWmi|1%(C>uv+tR!w|-lP)EYGgK1#TTA8VP~;aVCT zVh7&{7F{pLHR}HEJ|;o~$-#-zc8u03eb#tY!=}Z*`@hLo`zv+0yL4xsUe!JgZJ0^^ z!2SQ`TW5*(=UGg%$tf&^vaJP_M|q>BrnE8X1*>BRp09po1XM&Z(7I+J%CGt$fFjcg zQby#Gm227%hBD4DGEf2QVui8I7p{zxlKqZ$T+AEeJ-gZ3*Rp~ z-A{*bOhdB6r_~g~)Q*J9l)#G@wCcT|92;3VV~(kGQy+2nqDvha-bj>E5rKv}!O;=u zd%8a<8t!Xls&H_~m(`wl!D)cjpfVyzYgZD@IC2Kj4<5GOkB<3=Y8Ds*+(zv8sNl9| zFCzC738l|I`xMWvF0tEg@#Bx*DgPmn8@grbH)kz14*EzA~ZE3}ms9$eO< zbB_7Yf~L66VRw(}ut8H1f9L^CeZYRV;cF1$mTvp?%Mw2J+!+ zQ!GbO>V!I!^UZA+dN9d+@weryP**O{G*%Grjb%i;%p~DQv#NCk9a;e-9i*^B)ucj{ zVxSGhLroh5X^5x73(c;^Q0#royB)SSG5jEf&iu=2kGEXiZ;tbkzIYoA9e=`PgP z>m^&G&z@Z}r2f^*pYiRV{|#?%Z`f7D<NPspqQ(MwwwzXl)v}Hl+vRsWgaEy|C?EOIiMS{$& z(6kjJbLsb*@9@R|pm;p-Giulw85+P|?FU?nx8dS8egurR}KxB;U#tP9sTgiMzRb zelLuDQ8E=QT|}GNI7z~AE{s_QNq>xgt=pi&JvqT0etH0eAd~4$M#Y+znS-8PUEtGC zKgO&m@apAD{QT1oc>Ve%3nf-U2s+Tcx&b#DXOxBb8J;RE)fR^X3{q{rDrk|Mpva_uaSn^7mhI+?IqTZC+pv zpEePNJkwaOS6ssF{QQiWnC>}$)db{lf81haJ9-R)&@ANzYE3!1!JM6f`f67t^A!9V`^qp$hN^Nx_| z{B$m6Nprob_7qrUOOyp^>nu{6!>9(WZg}S+Ym|iOZofxG7AU2-H~{tqWo1WsvSAJ$TR)Y*R_qd5_5aUD<b+pdVeU!AJ@jz zy(3PU6I+C7(5}#cdcUFq$J-O0*YOsRmy1%w)~hwYMX`GAm3o4|YaJv%?=9p(A@(7% zzFpyM0?m;imDHCUigqL`VGFTF52(oc^eHX@kxPUy;?niirzZE?k-Z|1^n>mzYGfkE zr|3+f!DW(yu}?IJN6%wVIOddVxSwIej5WCanhrmQ+Es|{L>jroymio0Rk90p=_bm@ zrjzTXzRhlUhd>}4S&(7RkCN&;68e;k!MjjADT8*$3KLGw#OGv9QCwl)R*dMZTN0#Q zA#NY<^v@hC9K67LH{>_iq<=@`WHR-hq8+1;~KZSEMTMECQ>XJ0TFN*5)M zmn6NhZ;r$$o$8d5JN|er?D`H}Rhtz{3 zYR?#DVRW{~3fI9pN+e&Z4fK@?gz4=Wb-I-~rtGG1%&w}>@f&ss4W*;_y!#{+9MFz8 z**(I0R_y7{C-;-?s<9megQN$Y|FtF9g-Z17A>MJ!LvPG2g zBUkC~_`TZogi)4BGpV-+Oi@+>!oo>-NqBnTW^h~Xxw*gL6CY_wo*21+7Gp`|3__X zz}_cT`j7_oR1;(j0Czx$zqbF7b$#sf@L5DskAZ;e5yQKZW23zl;;hq)qAy7MR;um^ z#+ZoS-Ly9u(+hh$SZkhe2eyD3Y!8%wRWX=|K5LcZ$PLdN?L0m{rPbj6evKCS0lKSC z`5PmcyASeqz$;nUnbW9=K>Mq&zrz3cpZ_yH`Sc^a{P`!my}8ECn>P#`vQ`Ri8)r>Y zk5%kWZ2_+4UoZg47wWdIhyeY~bbr>>Ze_4VE3|181JhlJI+=UMQK}gyd|Td>$a$Q)*K5y(oh>zK|-OfuxwXNpH-qj}Optp63YRA=f|leOc5 zJCw8Qy_Zg=_iJPO%xF5&Z>ptx-(Z zR|##@uIO{%5=KAP+5MZi0pDZHy(jRg=4K54O5a0wry)%&?+r8mlF; zJmbz~R~Y5eIct{yRi1A&>L|qB^uXJH)$MW5`gj}sn048`f1G#vw`!qs{NL38^_7dd z`o6ly_w9=@IJU1=cynzlyw<{{D~f#(r0)E!qXtaCX}xM(+(HGRhwnX4{nQ_%e}2<$ z1>gFf-63V)*moXhDTi}LE|^##Xcq@l7(w4U^FI-mNnUBH5KUQpW49a&i+J<%sXd;6 zfi{0-WulWsT9I|73B{-#3O5zPU0^mAoHkM$#_r?cHs&6-y=VWBO}Q~t&V}YXm5{j? z=jZt7#S4xpzP)+Fmgr%(<5*>usX$9cLQphgDceMXjw)9)%$M76stZ(SVN#7!Xz6F- z#}%R2hO~gp0?W$VOu@<-<=}8 z#=LrwJ1g2t*m3Ggo(W4)S69>;U;9@D8b1-9oPE2vh4Ouj8PkI2#Mmj@~bzZUbgYb(oAPHnXwtW2DtQIJ|18 z*Y`K+{`&~;tI6@2YW;I4=h~zvpU+Abq~{ms9QPrB5xI5AiYEkOUT7Q+Mt~8VJT7Hf z$eLxhIBCmmi##*P@+P=ek;qURBJ>sb!ZSU(PdDnJ)?x`Rcr`ovE9vAl?|NLq0{n6iWPc*%c zsovP9sbzq6ni_^O(tYr@AmWf@VCoO z=*&PwgbbYWQnCA%1u5s*wd@jR7jR?PrAtZZH3ORrTdT1<3my&Wya{y9>$h+5-S^*P zHlOoNk!4E5K=(kgTR~!5R;UumV~0Yq?>R_&@btcZw-I``z2QT9Glo|?@h*=L+z$}V zL5PkE;HS4vPZ{NRy`~LDUhLL|e@?C^8bgP>=VmmnaVdJOtM6-#144SXB3T!sBX5)G zoj!q0ejFF1$6A;I1I|tV%V|^cVQp;s&y(-=5ff+Z$Z1=0>{3%_h=-(iL5p6xc0axu zPVT@bsTCED?F*VCPa-F9_oe)Kyr}IQ%f2+4Qig$0{xrMJ0G(|7Df%H@SBmENPj z#N>u+ZSuVRu9|$5=)L4xF?ejOOL~^fNKXFX#A(V9T)YLC%@;UZubJj-b9aYVuU=tu zf6oN;tM!sK;>~6!?p=;kI*UQskeUjoMH7No3x}uV@MdC>h6?`9BBi(w$55%>scv~w zF;2MiF-_yFP)Wf^EERg`jwFPR+w69D`T8{$%Oz%uC7wNh#)#d^%PUSxxW2h@?ldEu zr%F*Q812;TyiRjpExW+Phswy631rpaDE(Hq0`D-|GXcf+2JIekfUkWrTl?o z`-?GVC}6DZJWUUL|NYxz&UuOpabzS%);7CnNeSe+Ei{@!=jX~Zx-x-n1iCYfGLSXr z2BWbFG+ILsrN5jq@gC}uhuXUg!T7uHVf7wsy-s+)g=T~E;4$A&y_ji# zT*k&}Y)W{yMJK9EGHF$EoV2*ksMX!sS>y9(h}^d6PZNdkSyeCTReY36HD?E zX+h)ZC4+ayzWCuDK`t;^N#S%vZ*QX+F-jk5CbHB5=YvZB9$t0)J=^Lu_vcD21=>as-3zQ>z^RKoxU>CS5kt79-V_; zl;^fuE-;^$sP;R&dHE7=-@IWCTq>}=SS4u{^W%;X-HT`RD^`{yNPkBB24p+5q{rB5+eBWF8AHH`_CuBfy(aJ}| zFD1&aqr*hB2WU>SvtbUlOjoG_PJuy1R&WMwV^tTajm?%Nw+u z>av)Z{Bygx4|P20v$DvUZjU%|{eox3$aeW~%Eh3WA<19Ez`0}z>P1ywv>*{%A5Ybe zLeOy%TkCR1JLDoEADCnNUhgv&W$D4vgGzPAu0Z^ zea-zx`wcbgJvTO3qh6uoipY-EuQl<@I7_t4Z||CSCyj>*9@~0^45tHX;>*6za(ax` z^llo~3D$7*`)_e;h~1?_o9zQ!CxmmnD_GvNCZ2z`Cvt}^#Kih{8`lU-EaCUNZ>^+q zeo5dQ;v1zHNi8{){W#L8jlU6G0UZsSx9mg+8m{Y^b2+jWo888-vQ#K%xgd6_m^L#C zHR5t@CAO(Oxq~Nb_a>^V>Dsmmb)%qbalzKL<@d-cWx?uVlAT2w!S_9(k?E4x`*9xY z+_P|TRWPTr0GtRkMg2*@sq5<-rfiD^sqY7bwfWnvf%$7YI%PdYUGx``j`Gy)_%jEF zx5;Vbkhor$lG3N8kcJOgvCtHb26+V`s#4Ib+vGStAA>gDaabZj>P_k+M~_Nd`{+&m z$)w#IM~09xEEOdUZ2r;udC94Ps@rdF^A!z2#i zv=)P^0t-`X9MHm7>}M-nNif^H$xPU}qj6QkhmF`=8018}%2eIQ7~I{y#hcf!alg4| ztF&W~G>@8v<1miLoZ;POU0ilB>{d@m<`K7(p6B0(6YYUEfp{5p`sZ}f9 z6wNkiS}#=jDm*G0bqA-kHjx{Bi}YP)S>9QBUA$_lRx+Ex;N(trM!YR1dTx zw-YU@ICs~23)_!-jIuIZf{fy$o4Z?VH+TFu(dtqBl-PkNr*pgCbF~)YC-(6j%M3?(Nf{`kp(+dARGeF?RVKJ1ihXkFH7zK`D2{9+so||tpC{fuWXF)a zD^}4x?>0E>4_vi|sM{DOW+Riq9%s>suGo!ZS2^too9fNNZv489RfT!3FoAM^4Lb^Vcj3J?WQG z-OKT%s@^BjzGR|aN=LOjW9*_;z7zVrZc|8;_3S`y997i6{;88E_4BQx@a;B6bag?g zBol)X1`5xF<}qcW#4!|4G7%B|i)0lyCo?`BDs1jI*lxD$!u3@v$R&Ex zDC{XY%Eu`Or%ae`?;O9ckyEJnn@*6@fo&`Ce=Svy7+^>9Q;U4k5nG%! z=yomS()t;!M5{s1G6DM52?A$FdXLkK{^= zgT-*tfnG>OqBr7W7}=*2t0-tL1TY{j;DZ$JrHT+p7OomyEXk%naqC_=_GQyVS+h)n zpgBDyV=J&a)STlXwfM(*g?jIH#w0V+mMDTVK}t+3UbFQ-|@CO zHl5!~&K%<(>)*2-Tx>Yk?Wjj-(#vEgg!3=fPTi-5Pn16R^d9Qd@2r*Zig-%=@QS-v z`LR9P72_XH%``P}Kt8US*idZCnHIfks*(4`Ze~nNiPHwUs|EK{q$8%AK9a3AIj8L` z9RY5@)nnAILWf^OE|#UbZGf@|jNb`jvh`?_?l>P)?OFF8Z+z}X7F(=3PnkcV8@vSZ z+mI76_JqDa9_T(QNW=3@E=1Km$KWZQ$W(Ob5@uw{3D9Z&4RO8_J+R^(F`_Q4T zaKG7Nzpof5WGyies4v#I*==z{0=TR&LykpW^0oI>1GTG=Z5!mR zvq~A!Yn&QM3F;>Biw0r@+aYXK&%4kGQelG8ZfprC_4e&G$7bK&-Qw>4E%zzY|9WPa zh>9%;uAU$bMB@X&n$CsExiS!>V`A4P^UpfpP#eD1Q6UCaC&)gaBT#p8Uq|<~k=ulG z8TJLU?f()pkfe%ja^6Vq;I%ShsSozo1jzKu3esUXC)zKMTL``Lbic>*soNX7krw2; zOJ}h@Uhgzr?bBiedvMD22EspteQY8IlW({_KOz0)krvQkck9}Kh&?&Kd->dHE zf_;m^fr+dQVwT)szO+@&o0*b2$u4N5v}F=;KPcV>W@9QT(?+f_e_8hg(ct=gzff;9 zGG`vEk97~3Mq}gtiKj$g98L?Mc$+!(zQ$(%DSGz!d;a&%J23L$DW*Y^1lFC)3(}^p zv3KtaIeg<5#9Q20&UdZQ=wny1U=t{+{BEl_NCL zXst%2GHkTQeXh~2=4da^v02Tq&vML=;r#3h&(>!!`wE-yf5iTWmne1{%nVSt+D}}k z)U!=NIV7(Q`)NQX1`}V!E6l|?CD%r|y0uj5jQ~?bSbx9UprS(L$~Z)^4U8}`Lc-$2 zP1A1;59{KOXsM;=IiQW_j`o{!&my(}9ydE4XeT{P6asp1WsVEQ@%uflApfPd^r=kv z-Ops9FE!Cop-|+LKk<~MnvXlMkXV2H^n|`B8^2(u^?R|97Nzp5sAp-h_H3h$P(k2z zf>wtGubhPdN3+H$5F|tic%n7RJQKhN5v*G&Sp_Z$<;p_klF%;HYf`h3UQJUm#TwUq zv^FFM!)czpiL?>vv2r0ZsP1Rd)hD(i)?8xHMt#^vy9QV1leg1EaZKPp-~sIp>Yiet zhxvHqbnhirL}V@cGE8vf1OpnyiSvyqc`CX_w`d)!Q!6Y&lqPabUMLurU^Qt<)){dadpH9EP9mb^qz~_X$+leu*XQE`uwOL?1F&PX&&2PZSX@Cx{dnxiW9NCQ+NSUBUGD9j!HAFlb?eb7 zw23#*@qQau5Z|f?Hj^i4`IMcAX%GB+b&Lg)scWNGdb|#~bRED$OXQO*PO;t@T}XdZ zE>TYJXI_wM6iTBgGEP6p$vU8=Mf6dSl2(-8SI$e`3?*l;;Yt^Ku9zWJFNpZt3)IG! z=kdS}V}i#?>1Zh?R=G`giig?>Lhx~xWW-M2_5KB*y0VxQKX)*1woaHd!eDgqADogtB+mG35M3 z^^XAlVR#FXa7%w6{p;9+q~9<;25D148jg)z zw-PVY{x?Z@M~+MjsDlNk)+``%oukNe6qyK6FKAiFYRQSq*lICsEzsi9xd>7s=U&Vg z$cvmeVG^Lb{SJp9Oe+?wQq$23RD;^IXoyhFL+inD5C8Jt zasAWJQ1@FFZd|As5~eU(erNE1?9R0|2o2?^jJix%KWkN3W3tX@O=ZZKEk=pEx0M`O zxe2`EBrh%C#Ss&cHFY;e|Hck9C|x!Na*RTRjOc9%xA3ZG9kvHLR+`|b>0_F zpp<;d<~=oIRa?TNh5FE`CF&{pVz1A?k2Y@M1LLw%rCY;?ZvQyq+C^Aq!{+0KNA50h z9i<<26Fd^6K4CVveUuZR0v2M*H?k~MhB7Nr=7lT_$6!-t1zVi_$}^!Zv({AsaIsD* zN^D#zf)*p3;-+T(nqH&AESP&_iVpu@f&Z(WBnBRa2Q+|A#8<9fq` za%hgt=QDi#@yGc6mtW!I&p$^&vA8S?u{aWrBuHs4Y&RQ@-->kyRx2|Y6i^_#hKwxf zLj~;in6;K)hqw2*{`qJ8^xys)uK(qqQNMbHInfNZvI#f*Y?3?2Afr&x!grr_!cIj3 zv@4S5HyRJX(n^GALCi+Xx&$dxMR_Jj1mHU6H zW_xk?G1()EU~IIcxuDZM^>l5*wVN&n+xzJ)=5Y&kILWT%aDV)3^LCfhDjmu5zHky8L{J|kq zYV@Eqc>eCr-LZ}Ax8frnBZN5KPK(u!HI+z!iSLiNhCJM!6sF~Jfvc-aoL`=^a%TvT z!yqFa6gncUCq;{h;G0l`RF-*0R;^N4S%sa;8P#_?WG`>9&%VR1wRrXYw|M)_H>iL7 z5sEC<)`TSV)=Iu7D~;MXFNlAv$hwKq?p{Yxt`4fxSLk;Vo+ag}>VmyJ%9X03dshDC z*_XT&_15W;NtMPQVHkMek_PVAzbD~_*ui&`9(}L&7;ATWjZKKJfmJba z-tey-0cVX}t#h0Dj1v{1?!~wt&p3FBmXB$WDqL%1lX1axL}1pm-$sJv!4>J<6zQ>E zh>`&1c&8@oGiU3wEJ_x9w798?25HL$vDcI(mh%PH%N6Fc8C#pJvmmLA4!fzck^|1P zph(EkhNDR!mva`x3`nB*X;uhU@R+;gT2WMzR_0hooWgGXQy(_mj!xZiFW zmATn$u&;J(sS2eVq&$_fPFwG*B;!*e{Zma&%6>Zr^67TaDIY|C)W*bqJP}X1FEvmg zdqdwlMeo|9-Qz<7(UGSz$t0KZRc{{i&8}uI%^j+SLbW8p1;m}<`@)JRDq4@rI4 zvlU8S3yP1Dg&OJ}x;mqUwOFhg z>soOQlV!}&Q6;F`(521=%L393c&Ex*=U%oPsr3j25+ntK^9m+@ASIS*3!QtIz&ZTW z;RLi3q(L9?Zb;RiKO>fv?T>RR^oRcYfp5n>r+?RW-&Ba6vFm4IyjnlI0-m4awykh? zcaM{p*m(c|AOJ~3K~$=`Mpd;aU7B1__?0*OhI3;|M0(xD_MRu@B7Ug3^=rFx4!7Vg z-EUfiIqUj8<;DBOk;lJ#>M4`?8j=237t6Qa&F#?H9Z3!xU7(8gx^AyZ>$aLCO$&YE zmguJaJ~P$GwfnDA4>A1O@FL?1M!FFuV#B8ENTN2GOIgXpwUiZ@7X@pQv{{ubK)c0F z3z{_Nc`jBdeNI*=#iI7xEkpLRJjZfA$1I;gFC}hD5dMreiy2mn700;pvIyEOSq`nO zIVFk9@U#+d(GCU7RYkN=zLCXBz$RkYAeS#8GvD66#r4e_T;E<}bJ(D1tDZ^}_s^-C zT>tNPncPpUfjzAW` zNtdf74*MOdeZ@#!u|{pEa4lyu$V|(^F>4zvYlXVLN45I_hvGHIV)NYw#eRppF_;;P zIi=gM5NuXH51&$@ELxO7>Y#LymaaN3-atG3NG;=p zC-_&gNWU3*6!&io0P5Q)v6SpPZ=8ncT{zL9sW(Q6V1l@Db7zH;3wKe>u^^3qzF_My zR|Rhp9Pex_FLe4IFK{Yw%tCaB?cF_UA`35Pm=`6=#hf>_*{tlUSAfb|&9GXXNsUFN zc%!2-S9DfpX|QA&TUY5K=Q@%cyCp$i7Mw3w6a@pH=$QzBba#J`m#=<8_CtyG)sMKN zsv|I=G*(Pc)}eX(1A0u59` zWu=zuh|)eWR0EnpcQ@K8J5;#f^-n*cUCwaceu`2lJiEAnIlIMfb6@~cZLCxg={$t* z(B5r54pUn?WnkDM5{E~wy|so?!uV*j!T ze0@^ySvo%652*rC?|+j|55?%~$e$sEY`TA?c{Hy4mj_pF$!=P*M3)r% zB=Yf6s%Mb6r5H`!5E` zT1+n6`Fw?JlmrrgeApkixOHFJbj6wh6aETzGW_gG-qnK94gDPTArgU z=4cv=?QYMMa80vk9tW~sL-Okb8~Cr;ylZM2{d&5q`9n0@o0;~6s`hE?&(i+yIP$&< zxs(KAyS=-`ci;V4$nl#RWudSrGF)C>;@Q;|-d?}K^|g|mQ{n|}J%N_u#qUi<9l7%| z>q9~W#21yp4k2iWuZxyFmcbXU;m#}@7Aui+-cF=HN=Bjb5o)+S9mPF6xo-(FvXvSAOK z4HoM))S<#mXQ(N*-HIT!&JFyb+lML#IXLv!Tc+>X;x+2(0J_$35+KR#m&k&%Qnhj^ z)Xv*!wVSb$vKYHW^$8BYQ>^?ELF%$kYQ-LQL@1iz=PVlzXhefoIK?fr!CaaX9@Y_(1_Wl5pv#~2>C z&b#Jw_G!V6-hW@4k3Q+uAB_AgeLkK^?SJf?EJ&@vcDu#v*RMH^>gw_g`~5R4iWOF? z6)rC>akgIbXIiPQoEf7-TdDYBW${?2T=|%0VHFmvVnPI|YS?+omMGtnpmgaxvch!m z{&<&h=ttYRyx85zX=93iW=<>D?4!{vNJ}L|Ce~HhpsF>5NN>1Evh^$2ozXN@=%GlVV9>iKs5=IQ(QHeEC41kRYWz(*JAxbSf0o&4$ZP0i(gQj@?5hU ziohJSp-`?V2~7egaeOt)(ddSM(u)MRe#__FQXGaEZye7=(3Zw@ov{IX#Kb(| zm`PWK1K^Mwo8!k+jl{7%k$du8+SBK|Jz%l?Ld`nnBtmc#kd3%$$t%(k<# zd4cownt?6*T_vT~9Ph2Qo*&nPcCt`WCgYSC5rP?~w-BJHak-pcst77wy2M0EYc!`+ zCrCLAqJ=V(=6vQXSLGDiGRrs@n?n_B30qX;7Bv=o%AIb73?GhyQ#pu-za1|&#<#_Z zG4r?i9>Y0xT@|rak!z3cu_cewc8^VV2VLZhqwp1^SfS|yDF15OF~{X^w*~iW9P)AD zF%uZ81Q$T^g!U~$X}6i+ZJ2AF44p>kVYPMzCi((gomL9)Nc+cpv_pHKxlR)t#>>)t zCKUGePkZp?F&xG)2p9-PxRo z$V+5s(AGeewW#-v5O_n#@h!i|&{k|+WGHZPc7?->n(yV!ZH~?M9u-;9E`372pdx35 zO}aJe(*7?Gw|CeHIv!H66-9AAiXRg_9FYl7ElN+lhyFx7_54pDP=}X2@jiMLN8ac9 zQV2ouVr3*bGh=CvvlEwYsV$1K#M#+7uCA_df4>8PxQSe$sRgLR<W^vvl2~_v2}JZ z7F$^Cl)`}s^i_t|s8E+yiy19cnVvQf$2O$tagshwmG$v7iC(-tuEPo!|BZH`PACc& zF|AWWx#a}>as(6f{5n`QDf-|;3Di^R{@$;-CzzP`AD-Chc&drN{?SrzK^<~FB;~>) zZr&NkIl%Hn2~ZV90Xr+83BN*E+7_sH4JuP}8ds*fl85jFCSex6`-qbuy?LlZ(%%$@ zJHG!Uu;0o?6F#$H^I?mT02XA4k`SHEamMc41p|yoh_cqqN$Rc}l|v7D7qSs+kikFH zfdncl@=*Jc1ma@0=hQ2cWNqTnTq zj07x^I2dM7B7vH-HA=#itI3et*|`(osDkP4&*taQFEWnv(*3=I1XE)Oq>iNj9u=% z7wd<#4Nf?>cZ;eB4C6=+v=^ps6XrM!3CD&kxrS4xNRhiZyTtB!#q(&lr|<*iBa5rF zaY*r|HO}=bF&huAfCCP3Y{$0F@^s8So~=k3mr^50+!(E^oQFZ2O0BFZR%C(Ph?|$z zVKy(IXEW5Z0*6d6wy@a&@I@r>kQ?#D(HcF@ z3sR*lZu_}suQG+7Sk}5rGP*)$1{*G7RXi$;!KvRp!E3(V;|XJ=ThR>;c|jmfav5qGK)B6^!k2`oi=MkXK;;~Zov zXDe2t;z}``QL%3J8EQ{$HgzA9*7RfBFD*dF+>U8~`i&_j zG4Na2FcDUPYm9c`yzm6NKL>0V4<<{OF$18vsW4L+<~gmOInNd?jA0~bXS{h;+pVPWuy$`9i`Q|csMI$#-r{eJ3#xJYL7RTqS*F8p2Vq%gLF6l+ z4n=)r($bDzw@vOVv5sCsi=&-KwQ|Q zt|j)*Y+d5!Bv7ia5T!g9wMx6iM&+23__GDR{q~>#DWB}rpmC%_Z%3Df4abMV#}SXG zrypbLF|9GrGI8ma3oI#DGzd}Wc5*00DQ)ITHW{h5!sp3L*qP=y=wh+NaM~YQJZ)2R0sp)j|U;ZnM11`1mXrnM*Z$Jp+vQI zgC2k+@#y%?OGlq{`G#H-QpuE6Lhr4N>yHYX`+G_2arHd~?dFrjWs%MXqC)B{ObmafNzil0peY2=e^u8Nbe!Yi2Sc^!H}7Wm-uR zh{deLic(JUoCRumXhcw2L4p(TjRX|OAsZ?M=VFrla;{*v;JLDh1J=lhYCjvCW$Mye zln^L*g^J^@N@LFX*EyCH=AgB=SguPw5sMpgrJ+MH$uigHe7HJV&wS09+%#7I?h zXF2zKxU+zVC4G(zwh{#9n2j@PAtr*e2WoSl49?>Y_JBEFE5;_u$XFW@>Al~M38@ib zHbLzdKiBc=A=>3#3|ysa!a7aL9=XS)uzBy60w&uFmjP-&RU{_KU&7hC>y4@Q-Hw28 z|Nh>YY03eFtgGt7f;3ZTD4w4cg1ny3(JohLug+jD&w=%dSU8}zrl5j8Tob#5E~xWiel3MzK{Qp3fD7 zdfMi|#0rhAacB-uO~L40O^hx14CQ>qucBN?`Lvogv|1QmsA^2E#AWM+kw+^MAcK&_ zmf}hUs(j7~_XNc8Y)3?iubjJp+`YQgSS>Etnx)N3DLQr0-(w zXWT07gsBREE(x-;y~JN{0*j9g(FGeNENHIJ%0@Sp&DtOE=FJ=2-rezY5b%oP(xdto zhVMPBm;ZKJEKt+6p#sOJffPWX7`WC#J#fiXl}kB76V?mN*}^WzD*^ zkudOiq^d(QdUSm51Sk~=Ulax3E2ox~GmgTRb%nB`xtXC{E>WJXq33h#U~p6KaiCDf zp=RWxgjBrQ<~GPjF+`2GDKTOmas097Wly}0rX7@HSDQL=YR1Q+;^C{jdk>DUG?Uyx z?;gjL+#sLbu{yq~hb__ZPf`Io3FxKoo`(+)wDa@cI4}ex~`CTk^qP18EL{LYr_i?g1W#=3o4h26n8Nk zG1IuVB1%qA@a%yg8GQ(>eerlHRwSS{=%>I&II_kkk zQ;<4A3YWZ0mH`2&noSc~JMLOG7BTMpYDlZ~u%#J4+lYVTNQ@|imQNyJ7^nP-7quE# z2%S10tSPojqu^#7P(?F?(Py82%7XN>&%R&_uqE%t<_z1-9rlME_JrhRUgpZpk1n0q zIMyuf$Pg^&QX2-)wWj1WE$cX=;cB2-S9qQX9$3)2vVPo~#=D=TGLoEEIm*p~71%iy zXvi~;Cy_^o<|ZN1DV2=YU^!o6eQ|~P#W`xF@p^NI+ieANzk}V^P)$TV==`6?2~y=0 zweh^;W8uEZN*BKY!ku7IqYq47q;RqE~!AZW|e@b)+ z(PL6G5Vwq2qZUEI^T#4eeS*((R#B~3xWesGT2W#l_M8Vk&K?|C(G!fh*!yeDqyJ+Y zZm6M2ws89S{prlLC&yLB1<= z$DY#jfOi^)N)`?OM;4|sObShj-V1gq75t(_y&$VnWzJ$%&_+v)REvGZ=`N-fMinP~ zm`acc>X{H>#v6g;g*HNZrd_OwEy$cq04M?sWizO34rHW(7o=Qsj+|HlR?-sq)^ql$ zlSK-LQ4EO+jLtQjt3(CCGhMQUn`Z|o0_6}Gr)l|Hw88lz)4cKK8P;=hJIH3pMB_KW zW_OFmR%~&=>peR1-nhZ*%ANZOs-nJkMa|JA^lC@k<^`y-HRl}~N^Bs(&BC;GlRW3= zCdWDl@!93*;&N83Fk*Ll8re5^&or!X_Gg)t$tEeOvv5+m$=+2ibET28Y;_8b0(5SXMw3|aDL|cg`22&>zTygig zO?wPuajcD5pF@Fnn%#D6rcMcMOp3tMzL^*u0|)2h+oLVio{KlVFWE`F3*FyT{~E~} z?`J>0a~rqV$GiciXOUV55Tke~0pCc7QYgaAN~rY;*~JC))fM!`1?+kWGcVE3GZvy0 zVzU%cD>B%+K)Ed0GwD5mwW*n+Gs`S2)eWv1Rup-^6mv1@6>nDbMw(@3?z;NF0{B0t zyD47KZcs)Ctpj0rcOxSMwZbCLu%vXCtmL0;jk+>sTtAex{!EAtAoOUIH)m@RL`*pE zGTel+Q=PjjE)PkC=ogfqe4W61rHxDk5RaVNDLIh|GvBNPSYvCDz0V zO#)SlBYT}dJC~?+1(Q9ef@145=lhV<0QTM~vGOPeMpT6qqcvR9Q6VcbtY>F17cE;Z z6q_XiiEZsPMr%V+X1`GdBQuz#j?Krp+~sZKgsE5sw0HYr=PXD`pi(jw69Eu%jVx0q zP#F!^^6uDr?p2BnbM+4`3opreeHc7&ibd(C&M#e4)%L6s>E?Lz@E#TAY(^z%C&q@{ zPuAE8jK$>inP{qY!G`y)11!8|*gsT#TXF(}rV_6DpbJr-8F@QbF30t;d80`azLkk;cWkafs$p{Nd#3VvOhb zb;jpJWEPz6!R&oMj<>1=oRXYq_`&#%s_2|i>%tH*8b*H6h)DZYx8*BqJBr9YASxWE z2DcC&7QUXyf<8fue5O6&LG=Crhow5xD;}{RK(&vH%BywmToR&K&Y@QesPl8+@)GLu zoP{dAZz&c^p}AZVOv#F^N-JK?Qh-UBbnihmISKL*B0-JiEdk~ zZU|K;JAI5)B^K$F%k7lrJ4d^?QlS*)Bt(l6D*`wWTM!G;f?c!(QPz%cm)Ud48YK53 z`K*b`uWGoGiglW`rj3g!`7(abmo=jSCPA9da?F+`=H(LQe2rqZW~6RyGZ4X$=KMX1 z$I1ptLX^5HXR8YiF)0PXv*6L`4EwNcIFfzZJn8SE7VDOfzcg5M9!&rZLTA={hF=p4 z66GA8FV0b)SM2)ZBz{x##_HqFr#LNTR<}+7H-gH{EWb)BT3%#Q=v+&R1iNun=kt~4 zRP1IZw>DYj73JvKoaq2ERkEc@fT(eR*m*Kcm{_WG77BrP*>X(5nzvCps}X*bVEvD7}@ z#Cv8Oph!DGn`xK+kNm?U_)TI zYR9GFnCOJ8a1O5sS81Rcnle{{nH)LoMh@+S=&wD)hQcKMY~toWKf@M)+$#!>?$3iU3k@|d zq0g4k=PTgi4EB5lvs$2?t*LSGycW4g{(_{L|U7@_Rib06%v5PHI^-p6D+Zml>g=B}F}EHUC3E60#aei^&YMF-~jh zCKz9rOy110;HNYkj&YH;o(uRX&n1tQEIA@$FbuUO0tZ)Gt;{&Rgj|7_>r3o*M6$m} zv#)rPYi|wPD5=d^qsmwJ;LVga${O0%$W@J5X0V)DjtMO18CDBmUV?#BTpLq67p)Yt zWPppLUbNUB8r*FR?g%P=AYlqeduSYLd7?B%&uTcWe&O`#e$i&9H}`aoJ8NG_sWG~5 zvP4(Q1hf42z%Z@6+g(6QaokeEAraxc6PfxF)9e62sw^!(@rfw*WYoV(Id4MVU?MW)R*ErA_`X-63It4HoBSRFlQMFPkNP@q2z}l z!O4t5Bvf+|s`MW-7;(H)@uos(QDOulCKV~R-DxZ2jI7&+k-1d!F{g9e6+nzdg=i5=#Sp2!VL0ZQ zp+=e2SmrI(bAz)LaK6$wU(*X%Efi*jb}nxh*UcR{95H@07Q0=A+q(l^UGI=z*SI0X z@u6j)Rw&V>B0$9>1?OnoP;V$}zi`b9}Vj?_g(?ujgXyhAh%9f)zGubY%9NSfBx&g{L}yRKmX~;rWbr|7p84;LX&JbXh2hEuwUdW*)=he-aG)~aN;`I9D!Jq+*?419&OMz8RUDUB)8cLegN_=` z6RZ!C4v~?do>3zI92cug91dF?nmy_*rAiz^CQ+9pZad-6n_7bm70Rr|de-7{30$rf zc{=zfg$^#(7VCw@tgtBPRcg+mC31eH3XZW+7my&me!IuTn&Nvq+wQz3*`=rNoq=`3!qmat>7x zw7xxT@%pFl`0wV~j=c-gbj-R{DP&u@&WiL+6v5DLxf*t;Vg{h0P0DnM$ze+64G9d&>?v?-? zR2<@LfyMI+#vtq|2X>aRrY|MioI(}H1KntdL1P`^O7|Xu1>`s2cmzkrBKB6qaZ7ug z3pH_q9ubxk4%+A}?>4La6?^vOgWsFd6P4<`=A9*M9ok!jpAVhs=tRbE?%wKTaHQ;4 z0mVyU0jG$0VdXIpiNX?vHoV%@jgd;8HjJ;oe;fS~JQRtqA}L<(ZHDf1fB%Ywo+gff zOA?|N$X{FnS7&IJbJSGzizqB9b&t^Qlv_%!Tmn@x)0j|MF06JSyNo#uW?XMqk6}ra|SKh)dI!OuVHWQknadgS~I`<{!p>8LkcUc#sBx;{##;^!da!4@^s@a zhj{ZF-%5Sg`C`~PGKSdaQjcGNi;~oxWxS!wt8^s8%B5xqI+BlPL1Z~bl#x4<^Xa7K zT-_c}wL8uiWsch-W2Pd?7j0UFs%@}2wAgHc{Z6x+wa^v2;7G|gbA?68^o;x@#*h%3w4S|O{5{3{jHKCBKatutAr$;%il$^i8h6lq|lxmP8pKB}^ zD`vjg)>~}q4R-ZTtWpmqQk@XhL^J_$=dvYQ8eE=*VAVmXg?V6hks4SPB5;(e0A?hfl#BcD% zrdZ1~K|VN#f@>;lXh+i+#y;-mU4ZXTTE!}TMd#|YVAI`~OA+wE3r+-w0C8l47W6r} z-g7F?*H+NvO}M|to1ZnR`?pLiLJN~>;AV>%=33*$dc{9!0n&Wo5P+7sWJseX2>)S* zgEeRv;;;B;tp$DCC@BZXSykL8ZD*Y(OiPj$qlxR%af;^d<;P69xyfrU69us`7AsP( z37b&Pu~@B8Wf>|aVvwpRxkCZR6;?W)TbIc0TwSpM^=TYI;5#W9D=T5!oR|uHj8%z} zqsHcqcS{}>qz?e)Vy|Y94afbrHWGFNYdHR%9jVvaPcO02FWhlm2{9E|-CO|zC7~%# z(-`MGcT7O8ID+o1RY|9cgdz}?BkNqa)+cTF$9DycLhfB`g~!T71aK4MR$(ycW6$o6 z_1r?_o^2>JwwOU*tXYWK=a*qkkFZr{a1*|F*Fq^accrnYFbDH+`y_FnRLo7*U0b3Sa{D3@2XuE8eSdfxr z{fFr()Ad6qMEm}3)e&K5Lg?*Ltu$C9L`g*C%sQmq+8c#h(rz zlqb{Qag);Q$q5C_9Xt)XsP+|@*eSnz@*g{WlO zxRQsyW({r60(E-6Ol^A8!t}`s#Q>w5V1G@=4l$mE*3*z#n9SuLDz~wj2BmFqmTNp; z&2YZRVRmov<4@nA+3rzh8q4(=mgg5JmuFD3In(j!R=g{0J!;7(B{chLK4-y96nzw5 zt!aMKye4cwU9p>2EX|gGXQX%QxNhOOc_rVP<{_t!5e6X3q@qhvgz6{Uv=q~)bSzd} zNr=`4i>l=m7icS6i|>}d(-0VtE7=%_V5b~d>s*Fv(8qR=*5XYU z_hUrKd2kT>pFf?y_MO`B^2csyAaawxI?h)U5d6%K%%QT3sqZ{p3_NL#Q)vB;=>?&I zfWwprh*{flF-HcHjVymLVk`@@PT-2rwuzRII%sWg+;z|CYg{fbqR(va1@E$^@IzVP zuwKAku8}{#;Mk~H%~9nV6?t)3(QIApLird5D~c@%L5K7p!k-z*9ZJI_N>8m^xxkDS z$QqjIF&iy$)XL0JZI`GQbH)#B$lpofykZ8mTEJ3>ZnuZs9s;%~7Nr0B@C1rnGm&pT zJiKQyV&Rc-bGIo_*D}?$aTP7d{Y>*SYONm-d5V@tLOO@?c}?+X*q1noW)}5wg)CP1$P# zWTjAB(n6dYgM|Suh=}3E3w-tYCzzkj@#f`Ay!`3UxcT`dk6B5)yUQ~avla5i3I(}* zb8&r8X})4M<8?vvZ9#oXu>E<#?joAERYhe2MTnXpNE?2SJ|h83?h^sHk)`&~Bv79AlQIc{>EQ?UfT^;05nDJT12Hb;j64f;}~IwyO)c-vgd?M zZvyA7=cq3hsLvMAiy7)7L#2d4PRM0iiTWCMHtqc+84KFIHP};4UG9^X_dF$a*O;%D zLV4r^-CK*jGT2cF##A`ed+e$m?)E#}?Y7(p%hepqvols`)NYUZ`t7J7{pPeO74(_J zgxBa8T8Kr60=YBd&?V9WiiL6!?3{Ie5~lLXMX)mYK`xd6`}ti=&c9swBd(1}8+;~t zkYtH6TMQv-b<3K*u??!a!oF&;Jt%hR?spCLJH^(ZRu#vE=uRjvPPG|RO^NlKvm2CL zo|JcKn+grZ7IS(gR&*rAL<^G4yE%mDUZ$xaj)jRy+}nzukzCk$He)uVEF;4E3U$>W z-xC@QjBH-bguwrB$T+2?WBD~a+#aDj&s&_Y6kc3p_~?qPQH6`8WdWOI4T`)aa4<@C z%ZW81ztbeG#s6Vd>0ULWG&Ns(|kc6@B#A+Ai@>jFc)0#Idj8h2-O$h z1W3w7GGUn;oUdy z@b>j{^xXmb<_LFpjsC;80^7GX!yzpJ_M(YI9Z)w7S|>6eI$CC?GdYh;hVd4+ zAW6lm^!TzYKlcH`o@Yt_b3zqA^7#L$!j;}917;Y%V*unc2}qy(8+~b=>csNec{hQ# zI`<481S3Ll%lv_jjKFlTG{-3r}0hbKGNxL`ks#oiJBpwsNZX+Vu_C*p&>p+&w8deJE- z5iuk{4Ufum+{@wU2ONhM$7+xE{s!IsE$aO}s>4Bug5&NS`2_{>cd%`TAx-b&`(6gp zj~aZ(Eiu**CZd>&jA^ox5@GBFxygi;%5jwxajYdl1hKtTrgK0Y&8!Tn*Car`RNFBj zka|@)8Ux9Qw=O^CiP9n29-}8&r$IlaXxapALt*&@!;nDP`=jX2j+P8skB%E9Lp1pr zd5R+ELMz~WhH=a>u%hJI_B!3J;tf_dD<%faY&>R*HxZ?mJ;_O5*Gj-w;d=&By3ef3 zomAItcf{ygsg4<-n1E13oI?IJVb`J4%`(v-%D$!bWG44mr4UH*oCKpaur3CaX)l2^ zm8X{*F*gA`w+M*{b>R8;h%*!S&W+b+AZVon_<=(n_yS7inEr z8001n&M}`-vRMo;PYYc%*U5I-5gE?`wb?@%V2)W zwI;W(NOAe%5^rC=#GCC7FS7z)oL%7U>sQz$9ykB=9mf3~(ze2Cpy9jf;ZjIs@CiC! zqZ{whu&2);#!W4!_H%)(Tp`ahsq|zHG$dX&QFX5*2|dmz#1KdZ$*8KIHo(nMd_6M? zvC3h&fRs3$v6gB@gz}*TzCqQ%$dIR_pD$$LmndK{~?JPwK*A`o7fz%|3)Hs9~87c|6nZq!0yk}-h z+(i#{kvLDu?&EuS{ylA_sE#g4ZsR70Kckz=8g^4kB`R)6-pzei#2#CCIy1Q*(ZrjW z=E^%1ev~3Y5J<)!JHTZFNd4Oz;Kq0y;AFC*89N+~2Q>G$=1wk|<=SiaBBwJjS7O8)W&6 zzAXu&@tJ6l5`hW{r9vN{uaJzLurA8UL46uW! z6A?LIBe84oC*|iPNzpMz;AaN=&}|p8NAxcYOb-+KRjLB##cxsy-jnM8YGuRf1Fm_7@PN`PO~nl^`3$eh6<#pmDGOkKi?KQY^#SELgbg7C07G9=0wwIlJD6UDu?dB?K?ab0 z>O_KQA_#{G!7~Y}NfJmy6(Q1?2o*v|Tq3(upuix&Ae*gI#-a)`1=ugN^oQW+(+7ck zeoR7BHzue}uj5!mQMw*!)x#5FCY((4pJ-fv1)Ql!RAq@sAOmMDQaU6KEZCE@Z){+D@tyqoEN;44ob%f4hpf|j(+MUHuL zJT3@fU=cWppcTSb&?n_6O_Zdx0li^0nkQJVH!}0QUay4|**1*?i>j$4F(v`B3ljw` zeTTlc5btS7GMUDj`4>n1*9Pm&M3mh;3bN*{#}*zN66!EwYkTCWmzcva+Z7gf8St&~ zxHAp|iLQio>l)3&1BQnO_`2qtAckx}Jr1}haC*K%Ru=S@o?_+{NdN9{|Nb|B_UG?@ zaH)D#2MvUqd9xA-4BAV|ZD2#O5)E{*i2)W?3M(`Q(Lp8)j66p(|B&+ zY}J2LM_2^z2s3>oI60?%3BoHfUSQ4C+ZlQ%0tXDF&ISKf8-fOBW(oI|8ij|kL)AVA zsf2a*iX!~f<6RXv78$x0(l1MFC!;PL%&}&`Dsk9kREipr*-(wJk48w(#*J0Q|83OV z4d;2r)%??o8@w?2b}8aemWc>Etk@%DmDDT4lcEx1(0FyuKk7Z6K8#re&NyQjv@_@S ziCO5yPQ2(vuk2|+owv>9&wQkR`q*A7X2vJ46vKHGxu9WtFK7ZS&x&n<_2mwmXXjX7 zp3B%tf@c8xHT$KxI)uJHWq99O#nmuDq5n^cHu=?(Bezg3QVh2v7%T@uFG%!E3G zM#zjaEQl@3e%pVI#}7$bMppOf8+sI07wi910X0fKE=R{s{hDJTr{jJ)+a9bZvrO6G zX^OHa#JPtM`;JelXRTMVE-6T3<4iHHHc_cO!*;jDZnu>gW*#f6(W~Vd2kL=+dM+RArB2o>@tC#0wwBa=#L`R^g&31}po}N!Ek^~>%O;Iq) zEQVEzepjGpAl;Q1R~d#(XY~=*xgGr^IFbyC(4?FP^@@s83bV8ZTbp2uMBKVK00u;oB;xx(-N+yC)tAPo;T zPycdp)E`+mW@-qBkg7IK6vQUENcu9VWIoZ_+lR)p;L`%8CKxEN5Q3<6VNl#?16eX= zX42sV%Lt0mSvUkJHCD%jSFP1s);n67)v_4Jk^R?9f~-#4C|i+48=8XCaG6dQv{NhS zXIgHN7i;l4RmGwt%z%>E(F!C?vX2QHq`)bu_D^Lf+G!B&di9W${ulyb%Bg;?$oQq| z=0Q6){vEk-dJf|!$b>EPH{!gQ5~q90pVdQIeIC*!v0u2j}Mw=%?h%VsL#BI! zlpJKkbqs;jyGfsUX)-PWSJt_vyb^Mq592%Y0p=Ce7b}{(y%;%YWf1#jGUQIw zkQGtaNCj^C8k^L~n9pvLikjA{;M&db;r0P{hl6a!4K+EXkYXCI_=vE6WgnQ2a}vJs zbAR=8`#EVWEf9%EFt2&MLQWqaGo}C7&&+@G(~3qgAOB0UIK(NM7pu=$mD0ziv068b%!37Kf@rb*yyq z!Kqwj67--=Fum|TCLnVYaH>)l4mPsB8AOFro4{@g>5GEZ=sMR5)dY69GomAqQdp<+ zBFkC~9m<~LXkP9sW!o4b2d)9E!62HT^pxvS!xOX4F|xI1fHo`9Qj8?rM1<0lu7{~R znH{Aok{tuOL+IBJ=o5!xm7b^p{%{~YX$>#G7L_VAR8n+7f+(%bL|h@6M6}~g5EV=Y zhuKjjluy+0bdiO|H`=#ohYmdlUzv%dYT=bQ^);0(Ls-2UNQDfPLFPD(?FCjvq(#dk z3A3ss6|w5vVpVKV7V2e6Yc;AM!A5H}?FX_Fb%T-3P6qizXljt^CFQVvK~hvE#<53pw$P?%HaY5}4z^Mtfq|5;YnDJ@ z-GaqBdw89}(6XmtUGX639MhaIa#f+Lbfww4|c{zeQ$R zF`Nq>d*sH6oZs%n1va0(!S4BU>{x|zv#Dw{S&CJnk{}7?7c)Jn)GO|WUb1D@k36Xa z#FU{PP3jeTO~Sj=S-@p5ISr%{5YzTZOonC~EO%;rgm6MrBiu7h=*u=0zN>zJ@%ii?Y#1k(36H~4USjhlyi?Au0^ z#Z1^(^_XM8oUi%g5a%9UwI@lFdHTu6u!=wUF`s08O*1EcACnUNsSmSIB%1o80p${V zMc&5+XU|JqUR~n#tJiq@`Db|Z@-?o`&!o?}V$YM6X_<@YhZqbo027%S0(nflm34+Z z=j249Yp|CdEMegULy@EHb98+qXyz!}4kiCx<#IhGxHhfGhu&2c?hglC-`(NX0!OG8 zy5I~fXcC=am936QM?fLs%9LR0=aC*0`}}w`$Gho~G*mMJO2G`L|=Qs0Yq_aQD-e!uztFAlUV}@;xp&9g^B-ER)VDm&3ze0j9 zlL&EK&Ci?z(N5=Dw&v4;)O-K`o~ZdxAI`NwtS%AhK_L@KMcGHyBQ!fP3%p-v&bV8v zN9Z6Ddol!W6^3#~-}pGTXnRWLHR#y~Cw#n zA_tv&q$5mHtdXzIk+05><#dKAMR&BfxsaTO(F#l;0|L&?o{%C0LAGrp6-Yi39ws!* zY(LStE3vlnQX0mJVCd*h(@XXz>Mx0&Lub^dlvZ4pTEuJmTk`#v7{>xlox$}=dP)2s z8(L~K`x8MLqSz@}X9mfjNroL|CCk_jGdvj#iko-lMO%^!DLF&dc^D< zGoW@}SkA2SC$$luoMe*`lRK##7X8mTeuf!aqsMJxyL_rxLq!%#6BjqEY3G`%mKb!G zu;3!EKiO!_vg!;OF>U?i3AL6pj%Yv)OJi#bTyC~_{qhA~efbu<&t4(Bx|9SfZ%2XH zsfK0fB9SSCDmH#5z@;RZjbYRED(c{t^wmk{-A|(jlVoW;W;6RSnh9H2`lf~?Rz6Pz zMxFsROr=sJ^^9TTcZ+IodP~yhw~|w(PSFkCw_^;X?6-q#a3he|W|d5En~uUq0LUFIZ6TFL;@ zsKJ#9xcshFad&>1^Y&s~5me&%ySr71O9nM#W$$`8RzfVh-IP?y=cAY&~Qal4Ff* z-w6?vTJ;^kdHlNPYkRbflSEykaou8tTimkyP2Tf+qHsJf0in?#sb@kHaI zIrS`w7ukQ#PcIgcv+4ECC-=12|D27G*jP|Qy&lFlup{SSYpgTi+4&j1eESApefc$> zzj=dnvqqby)bR)E0p&>K!yy|J5!6WNiXwBKY)AMINcA{*d@{fyOzvoiJa6*TKzclm z1#~@a{7ZKHiDFF94-ElX_M0e#5QI$lH^=EL%)ua@v?#}iV7JCo6u=*4*P2KmR2fZ* zJ8U*N&e#)OXCm~Wp0-{!gv(sUd3JV(s}~zwUUJ?zMP4SzzrVrFp}~>F7ABj}5d^D4 zXfdCY$M|UPIenahz7xy)QoqPm8?4Jx=9v#giYq(fKxd%RpgPNNyxL-aJmTS4 z)>s-xdBQXScg`}Jfp9?;x!9ypRY+SP4mlJ2(F>#2 zRvmT^Ew1(*F6$9jwZmBjsZ3L`q|{`M0a#|{ofZxJo2l3pCg@X(W0fMQdK?DwOa_r_ zl@W(^F_D0!uroHaRYC&9*BV4_kDvc~d2JsBQvVSbm?fFSOqrhxH?a?@_>p`viq@e9 zBNsEn=ole0a!St{L%Ggz43nzr5Y37S=@P^5T?e1^(o;-wh}eSkE>jZ*%tJOs4clQ1 zmE#b|9jR8UvQdxWZPR13fJ;^w>W3;;R^ejHg%+Yt$mD`&DKjIgGG#d> z_gDpc^&g!?L$vwMpY2>Pu*mJr18!~~WTV}koe6}%AWZF5_A7W?+g*vv%TfXzH^86tZqXgDr2y9DHRq9nL(I-={)5qD)SXRcV?KmIh&HS;AmPlc723DsMq!en7 zffNCqP_|-NnX!+#DDYxXeLTcJFV|VINQ+>tL^G-IDI{MbMTfE&@#^vnKl|b{{Nmj^ zeD?M$WUCDhZHqfH7a8O!azRp3`Rn@RlQjdv3TJRBj6jX+Z zhv7Ok7G-X*UZwJH#zd8YR1#Ri+r2c_lRU+Ss89Anf-T{1wm^#SZ}H*oL7D1<4%BPk z7E;X&fyp0d$(Is@^C^hgd;BO$Jw&+G%vI~-$D^eW@jnu1BT5r1fLHd%Uo8=yeEB8!EbF68D>YDpcDv^zGP767No@PbYn*5%t)k9a|Y^p`s9b zP@LsU3*CScxjD5eqVNF|gr@7nC59V>O_Zgpl37+2Fyt3A38Vwhn4=t9A`TsD_ZCdZ z!^jB9H3Geg)u%QO6A>X#v00^9uOxX=XLZhks`fW{t-Frm_`L|#AFBbk_Yb(+A0*Hb zu2}bl=m|53^1U(BFGV)C#&In|ZKEdJEg?9n?D& zVc@y%*-&qkOv9UGwKf9bip}1r*N(48p(h5?x?vFY;*`^}|0=!WxylauI44H8Pxp`@ z+^~FxAd2Xu6PmSVQr(`dzao(=%4A1fSGZFs_hW1E$!hgc7ukh1IS5Ri_*R~oYp^Q} zUSFQ$o3GwV5dGq-FR{CLhPD|{9q!TH-AkfDxT!E}Y>Gq_j#$z9<2_K_!F06*8!wP=g|efTMB>k9!R~IC5X)7R9+3bz!)J-PWS`aw!m{d)82oPNkz5F6TH8< z!~Q^KZ!hUl)Z z;z0>BwZ z4Df3zoaGsAtD_V|w+}bCsVrK;rTiJ^QMeJU3#7VHhl!KG6A+d$d%R-Cov1Tas@9Yu zoja)OifKA*t6BnSd1$b!dI_E-1AK3>8gy)p35N^w^0`<1OfZje(4b0nJlPGXUZhf= z6vvTCiYySdx>44#8E0Q$ECgu8n$X~G_;3EZ6UVg2&@M0Z-vH*XPP$JE@##o*Fw)j2B{}DlgU==#ukkT(RY&3GhpT=MZm38qO52|rivp0 z^!yyG6riK)Wl;#Ti*6Ocz?Gu~qbvfd!(?zt&Uyrn{Y_`5{u6sasXS*=fk>edQtf)V zNL2pWP~ql`8TlZv;J`kv$hq|rK>Jp!xN%5jezl?F3@=tHSf4=718;yZ9)L+`Kb0pf z-Z&QILk%VM0Q;|I$-1;c{TV#Bavh84S;Y+_6@f5 zI%Ko7889|SH1{7+H9c&%L7HD;m6j;jo)V_e zSLV1?W(GNb(hN?mmd8d3Te5h3*x0iS$tuOg)tPLnB)zb=%KIoWx7b&$__dnAbx;+M<+Od6__fW&)(i9H2dRA6P4b4`zCFUeb=l*a4Hy*de*)`+Pu zEkPps!Vm?bV94=+!~5@X`%nLfyXy})J3mME;u703#copw>PFPTlA+F)7Q;{y#!d*! zGGMJT*mRATmpi<=+To^ekc}3#PjIYyR8^1KsknR}82|E?xJPFxe3`}Se|OiIZBcrutt&>M75VRAtq>S**W zv1)V}>jCbj1qyWnQyxt&0bE8UtqH;+j}7b}Bex$9qja)U+tI0o<2?=f zwiaQ6rg=bhtVM>g2 zQ3hT<`|xB^5LyB{+v^tra+>ut^YZw}R;EbqT#d#+Joh%^I29)2Y8l`bqF5Blj%=eJ z>t4mate^Tp2)?tKaVQgrjS^)TcSV6`+YFz-xWF&I`V61HdLbhPvO_St+Hfvms!wXPMww`+%}yzGZTxR9P&gW zniYTi+*epsp8+0q%gS!?A}3J(25 zGc|!smX#^a$-)%&udY>jb06;TP^leN61t^>%IME^X&~U}$%xG3`Mu8Bllj;({KFn* zK287Jmx+WT5oU495#fElJKN%mH=p6_FTTXPpM8TbzWf3&UOvZqwUVS+W|T#Z2SP4l zH`#{SbtY__T{dDUFiiT%lj5fdmAjt_eR3Z`IVhuK%MHe3hwA!0?!WsEx4-)qcQ@Ba z*kf!zN0}#B(H4tAr)|*J4;b5{RKJAlrRwEt4GqRlk8e|?cy_VFXV&99ElDZB{$`K+ z>jUOwKbCPd{!;!=l}Zg^?nja0sA+LrEsz^@C1BWy!@gMs-F5b$T>Nw2uK)G2ANf6sSjYU z34|e$sG@~fE3grRPRfkP>R3rP)ad(~d@y8#AOKR`aSlp68@&s9o}tmM62(#p$vA=x zsgvcKh0c#X8PGRgGh!F|Owh&y-(5fx#|}CA*eff*#ie@4QK#mMcVLw>y^c; zRdNu?2x1(@FD=c?qjeBgN+85cvSuGuB%iBX3943KLyX*QZ1gWH+&S%^HL(5S)gp0c z_7N5PIf^EvkZk+K#SU+tt?=gA2Cpu+c>U}`HUiO#>>3FW(zRoso}w8K*XU5g)hig6 z3F-mYsvtvK%gNK;lfDN*L&Hoo=P-Q`iI24Zd2V*@^Db|t___6`E!4Re=q7H0S!krr zJG$f6_ZbtC4QBKnp^^MoYOEroD2s+=Vkkcs3wo}XTOr-as0gUz~t zHRoZ*Tgh_<2l#pr$d9{5>UERVZGWyt?Fr53)C=>!)Z+)M&UiXM_A?O;3?v!>@kdp) zBHQ+Ax5LlA{1Sik%U|K=@803ftJe}(IZo$Ug^I@ZDD&IgFSVK-WY6(ZEQIQRszjA- z=7aXPT0RFfW@?A%6osSULbXSK_kiZE!p(QLINaW#dU(L`{vcyc`&%ZCd-T;&_K)Up zKzo0Op{ga>$r7Eipq*t`9Yr*T60f!&u+4Kk+ikHfS7@9?nedsSSl7t*4eYTIxk=$Z zP;id0F=t219NDT+9#kx$TT2wdV+1Tqj$J*1Ktk~xBVz{v+ll?rAk{v^V|rb$fw$`)obcbZzlH>DpFTT#kB@gr!3kyuNTQVQIaqkjjMKV5@1s^9fL}#d2Qh{;L+!_ zJIc&lvQ9*Ym%-cn4qacNW+hth(bQBYqUNkanOjkLxxCt9wZ1@JoXO}!-3-zvt*9h2 z1k+|wwdti&1i zn!Bk&*PXLCwif=Vws0~l8to3r@T3WPZ%{RqF7!Ck481kdi-nKAJ~q0fE~Mz~q9YTl zNzCgfG~~RWq1O3(3ptxfz}W;EYOqF%%n5hueYhm=#D|$&Gh&1arqn#oBm^0tOm}$o zY=>{YdV$Yhp5ZL0H;I`4AQVaH&=%(NUbCU|0Np* z-+!VCFfI(s#Xu_gV46Duh4pf{mS@j(lpFEr?C=+=}H{s9>V| zA7V=*j3F&ydt;QzOXW4fMw_GntB> zuc=2FkRQezCN9R?6@ev*D50pI@a_xSC9 z{EcvLR#}FDMZ$isPC+G|i&Pk7=mt?|bEXlmPTTb|x0&`rafeNEY&IowYW#KsihT`p zeUIVx09SVy5_Red%?3%L7(__|vSRHwz%Z$8b!|n-L&CPBrAUKCOQt-O9Xys9hBAlC zw76hT^gK7{QY|=Cw$&HvtNg(~(zxfY$fAN>Up!Ct#A6r9yy2Y1^Ho#0iDz1!S24}XdVHRu2z_ltlhEWMe zDq%KAP#mF^nz;A70To^PS#>rCG~H2x7^T}J(KTAx(VJ0bRD&Z+9L4cbk`9>P8{s$J z{NjM3`iurqk)W5wJV-yGgW;fNe?XcHB4iJ!z;olNHTxi<^G$mQ;`6;E3ad58SU3l^ z5q--vFNGLHLH)cL1hN@T3y&7**ir&ndL8?RBlZs!hT#C1PG)J@D_}#P0o6+-ZPlPx z;BX3{TVaUGy(Rqz^&U;FlBH-IK8hQMmH9x^stjY*YE=>LJl$A@0d1wvdZ<12d^QHh zElwbtC=gvvr2gUR~hx&tBl=)fy?+!$9PrRTV5QF0ojt;d(+>o!FN( zX(D}iZXQG#NU}&MC7Drvl6@lOo=SiVq9f8L4GCs^U*0bgh!E_YS@cCCTxm`r*=2Z` z>i-y2!*?SiS4l%=3WW31&R+}XZE0PF__f9RutxoZ^IUtJ?6-3a3?y3B3bC0mqb;f^ zHp03gIf{RTmUP~V*u~Y^4qc}P5bQ~reT`w?O3&U#Ci23II3@*gWaw!?{fSWQkEtja z^V44E@vkkOaeiLyF-HlcWt!r0yTLDh_6~pXXMciU{ru;6`RthpDj>kK((UuX50`hC zTg(;_yp9|XVTJkO{dc(j?p6>Z@>Ei~U}Qkm z4fy@9@ z$(}i+m*+^|-{X!IF#{wl3JNFm1G2V7I)u1DXqTg9eW#;7P}{TKS{aSu2n)HDN9S?y z2DLFla2kmIh^(wdi3F8X@f)UQTZ-b04#&aby7Rd6Jr11}-D}DPnzk1!L9>2i$0pE!jJ_9LXy$rnwZcs43ZyWJ8&2t9iT7vp8w9?mg zLPjc3lvYIEi-P@72K-hQhWAInJcv@gF*S^-V3P)kVK1bXgrRNs7{()t!svb^iASi; zrl)R9B!vu71;{HKjw44@+~A-*Gqy>$$1B9%4-}l|*g_PyP@hWG$F%Zu&1g_}z_A4$ zI1ba%CsxOqbE^gfytb5h6Pie@Gy|OL0t9VL)UgUGJ8`v`05jRsK>FD1W$v`&r2iB5 zO&0{NBjgu1*k$irNJd`aLbCSQzG~X|1;1sya=&DEIuyACjM^k{3ltcAJ&7JV*fa*%9ryN8KHjH7VyKIq9d{kRXTJ zei2NUf9T_JaCr`&eC-JnB)(2qM~`1{A+RtjbIpl~4c~WRwv#3v7w6~r=IgKU=YR6Y z_|?z9!K>%bgstzn-hw(?685SHS=dSaXGRF(5)x?Ksfw|HIjKtYndu_ytO~|{qC}Wc8_~iVT&!{- z!nkNY8#;HgFbC1s@UFt(?#13}^aoJ-#{{NmBCJF9I9oU~h?qkma(o^Im5Zn`dC&{8 z-R8(r&6T;R2G@q6_&mVPt@KS?4X~IkvgqRBf{rV*&>)&GI>;o7Bnr)?!RIgu%1S=W@ev~F zypGhcGCg(%%|P~CDi9oHAcH_$fO(BnyqYDOK(396SNzwVFl!^L*GJ9YX&s$1JWfY4 z9(ClS_)#*?LMCCubKXqXJ{8dqW{`sjSU=nC@a~H@_~vI{;N|O=D5#(7n?Nk$Ce!MG zuCGMls<}U+y1PSDwbDoK1}9lGt5dn5*dic-O%Q`*3R>~$f^Aq#3XC~*J9$Fv@%|*x zEwy>#*BzG0!y>U*o-<=kg0Vj#;^-^dM^b_AQ6F-8X(l2h&1Fmu6KNd`^%32n5$HDG zt&pZW6=u!@90E;5=E^$;Ks)IK^H_^C!TD~3Y_mhQK9d&0!?6+5mnPRs zDEvv6{8L5cN!)!B9iM*aKlu|+9?L+gEqo;@GF9JgH~8wa&+x~;{3U+%?q_&)bt%2W zap+`iM3H$rG0OtG_GICQELDU*dKr-$Ld$^bFg5B`YC~eI5m*gFoCLTI#*um6$$if~ zg+|xn?QA`opzS+Yk7Ms}vwy&Caf7DZBDo@aH1vW-UYkCO($1jGe5BEEN8Xl}Ax zl3XSV+!^a`gv%U~b&Ab~dgfd4WG=E2$Nd4Wn|)DTfSD*D#6ajcOYcJ5NQ?x~y0EDE z+TP>AIo!Ds_ap5n2Y_D8yeFxno>=kAs;$R9CCO+M$wI=xjfon+>ai-w9TSbFhQAN% zb+y)s3aTx&JzS#}hB($wh(`ESAoT`+^H}Q=apc9%*(xSD$uFL2^eo>FR$@cQtR!Qw z>6BfH@`evi5jJQrMiXKNSRdUn<}GEp?JhwTC0zvJ1Xi4)T*GH8RUgKKR?38MhfL?z zypFx7u3IntSMIPApV8xLeLe2w8MWZZ$^=d0n3NucDl?fM14{VU?^ibW2ZlxtV zIQC-&hV3<&_XqSt4U>$bt*eXCNZ%LH>7mR;^S-E+$>wUcS~Jo%w8FyEs#1sXg#aRg z%_G};=%jd6>O3>jNInu4pbdS!K#uVuS}tcxpx-eV3bZslC%v4$t9&yi6OB$|v{IlT zzz|*ZIqL=!SlXdqJ_Sk_k^dl?zYw%uZi15o%;TUC(1i%|E@9*8!zGLyQ4$SKtVp*- zhA&<}$FIKm3SWKo7Q4%>`m*xolS;IMXNKNUSV5)!s+%JYA&_>xmwC3j;h0q~BSm`S zFwsyE3>VaZ0vAj7Jw#T03ZNKL_t&vCxps;hNxp_bS@*KZIuf_ z*DiNjkEwSZ*j6WZN7TiR9N5KOv-BUCf>Z=~rJ^VER$8JCeOn3B(GLysb%Aw$hIF@s z-EJT-jPy;1paSOPJV|Sdta(Yqtoo@kkg|2L&T+QdVznJn*8|?azsL1`r9CmL;vaED zEq06J|4;XT6cEwyR1?JF@^Wq`Ff47-n_;iee({#`0@+9 zygZkrj>#R9{3$oa!qYe=JST~Who=l5HONJ*X3!wY_5za_CUc3MdZe;T5*}?^@zb<@ zqqF67NePZx-8hP?%V0)SeJ_5wT?k@j?@_e_`fgBtTL#BOlXVKaT zShP*m+n7!@O`1!u^ngSH-N?c!$z%^5&$)(kv<+RbT2WP^Eu-|5lSC6`JDZe`1dmc9 zEZxe?YDYDVLYhtu>NBInQ_N$QBue%{EH`@bigCU}FqBA?-!LkP)SCvLkYLJUrhv~g zjH$|ia_zc9_0ucTzx&_+-LL=jU;gSRETynj`UqfY5EaX=uz3ve_6>v{l?DrTS|X^f z`n!{eefateiOm5UC;O&3-9*E@9$h$`(~At>s_TS1s?>tCLkYJk-mkuqfmumNm!l)Z z*Ru__YeEDx23OLN`adQTq*-wj))jd!9rTf)-!zrL2XOl^+LeldGhJl_nE16g2rbKJm_?OV>!5}M!UB%&Jk!dU z;Yf3`kv(2PabzPpLo9czI5snz9K;>dPW+15L1UJlRn&k*(r#Vg4b8bu$34TaK=?GdOeQG;sQ0rkE{dpyc!(zA!ssZa$)E<~NnYLA+|zRB@txf&PqoIav} z_R;r4(lDxV=t)0ty2uN90C_-$zm{DD!N<_#$^CHxbk3W+okQ>R@yAf7__HEX62wzz zZd^aK$cWN#JYu~H;v8nT5fO%XV7~7$)M{FfU|Wdj?@I>{-b(@lQ@CM;yaYa6 zY_VMz(%;w8M2)Jo#;x%@lWSxqdpnrw~?xQByy zYNq6HknClw>_=&y3wPp3=NCWX(D%gbAQ&2THG;59KPWStc7l14$k-rBdu??@cWh+s zX7oapD%1*uoDtfM9v_SY)FRCa?1{`(HB9QHYTRsgQf%DY0}d32;E!7+quMlsr^=C4 zyG#a0#)!svRB&hr96R-VMo0d~C`cp3P(jfsN(5#`eI+}oM!n9C4r*r4WKHZQt(xc) zF%{#0ev}H-mxHuzWWS4U9}M#U_J4gsG{O%+yIi=xHZo6&xduEDb)J514yIlu?wkmM ztICA(_c-Thw0yTNn0V_ZBArpO&k8*>Kf_(J$fjV8DLC7uB1C*MMlU*9ZzAa?gd(f( zU9h-TGC;3F`GM&um7C06s^*0;!P8G(mmkzfvr*s;!dvXm3cSKuFJUoiZgryqZ3b7XT5n<2&dbm= zlFGRgazohl6Oj*eGudGw$K%5WxD*pO*>s|?K$Lp(r^_s6`gW>Dg9&&L&KJ>c8^o~V zFB&~Y)uDALGm9O?*2@ezVg7m_gk*a`Aw&{{s0hug893Ws^o_f!SJMEmYEmurjT@&L z#H~Y4NQ~-7Rfn1^#BrP>rtyIxYNr`e`P`WadYuF5+#Z=($MfhA5cRD6lswFM`OH|D zlgrbn5X11v&pg3&g5bs?H#LZa8HceQ&>ly$jBV$%PTS(_@(THG2Se@2B2#Er1g5oJ zLFkg3xw2j;13HTPl0uQGm`pIsAwoiK*DAAEQNhg44k4$I?qeDHg{g)=4X~ezi~iBS z=F#_lG@eeL3}#xNi0{q0Nym1#Ug4{^Z}4Zo_$B`6XYcU&tCu1IpH3RnF(=Tm7$Il6 zARI9DF0>aq_M=FRwiJG0wNJP+FOZZaT%M_83DlXy#-m_st!~gg9K@KKql9|@T4bxW z*hktdM>{$^v>XBHMJ!f^ZUli#J2l;4++<63#Tim(M690Nn~H@GiJn6%)|7S}CIgkwM2PsFBBku{ z4m#s35AhL{2GU1^D1IoA!r-sr&0qcG9B@H~@S(!=p>HJ_H&rSqCNHBLcFHkj>eRT& z@jq^;J_J;l8Jddy9uIRO@;%=PVeCK%PF7(%$+H@rBPE5whVLc1li8r!Vi#VL41^7{ z63)ADGhQV!2gg}bRh~<( z`XZPvHuxw=FfmJK*+CPozYxsAaYlkigok4QW(B^YtRpvQ-=p2%;K3YGQcQiD!;-C- zD4;5pXw?XmEAogP!q`uu2t?~q9eW%e8a&)rlF;1W9&vwv#Gz`GIOAtHT8Lae3BY9N z-1-Hv=d|pe+7=(ZwH{TNOW=0)e*M_*E&=o>m*(^*qn7UpfyM{pgHgsET%X9sNsr88 zwT28;r(s>dPlQ8B?qpL;1!A<5;JypaP!Vy`8C0?+#Y}*v%dz2&WeecbkB#L| zD^Kg&|CF+HL8uD|{HBHTCAuuTdkz!&Ix3{2?jS|wPCe3dH+rs=9j zR&J!)Y6mYy>{T-e;l_pgNyv>>*t1a?vf&Q4n-`(Qa^*9`kTIGtNcq)6u zz)=&EqO+OKm(umB*XAe1AO?;$uGZMBN$4rwf}#!`hRRBk zAX);fO39x=B=dQ;MUn9fy`pgxVW2*5IjYrU*Y~K#231!}vP>p$?nZg~#krSz$$M+TE||Yt$57=ygW4$V=I9*6X#r@48V( zdXlQ>m&b=?o)QQd0R0GDli+D43ahRtOxEWSNRk8xy%bI4$A)0=m|rq?XqO=CMr2&CyEkYaXed9*Rd z-sxPCF21{ngnkiL&Ek5TT!47K%_*tKKYGU3HZi?fpax11_mdoXs3zF-f4Ex|T5cBr?>A1D3j!7`qTU@QbQ*K2uNO?FGT; zhr;2A~&$1x$p{PvofzWHky`-+?$zFAmrAW&aOtI3` zl0miD$iJ;ia9|sQq@%#5R~51ps$rF&p@>1xzNv$42i(;iZmJfy6%D{Uflo8B&m5&S z=EUaGp-<`cnZZ;IhV&>ZL?ms}f-n_%L5p*np)6MD@)a79L>$ESjD7iBDqJ5(j_L_5 zs&C$*g%Xr>yhsSe(%fYr&6^QL$Cl0@$zRh|IF1b-xYu?%PO}p2Ulp?-Mm5JkC@khc zI>6Vh1W-cFX~|K;@zp`04F7`whgXOeLGr?z62Dgn;keo}UOdkT#XPVLTQ3*z?uu0j)$H3bKgKrn^ zmN+yXoGwf(PP_z4D%WsqhSGq9Z~0!jVH5_gG~p>WU#!GboOE)AG4{*)(yL|JdW(yz zE37v=9N1IndVvf?1}n`3wrM#K?R(iQsDvc*vxCRs(7>h#83CfR4Feika!J;!_%q_H zVz|}gxikR)Gnm9C6!z8YBNY~JRujB5O}M$k!CO1umBLD0Sf=@)m>h`^Q2}ZUa*&e) z&~oE83mD7J^NUkx^z#g;Uwk}mU<)Cm*nVAZpwpHX*JaoU8Au7{7sg|g8mu`=#4)Oe z5%pkDmP8TG)d7JwYQ7P@P|934wZr{k#6xRws9BlntPLxx!$XhX{r(>Pu>mJ%2988M zw5VvVP9p)j8hHfGT8rqyI5ChGO!s9)G;icHLlptu#o~NDZS4g&ofz;Ik;N|%oZ0mB zQIa#6fzQ>j38Oe-cjf$)tjHcMgez`N12&xbY+7_pg#)<(6k*@)u)4fNzS#+gK~f#Z z$%FtX?GwlbHi|NslZ~28t!7B%9vYkrHhWgJQbW=>;Vz5fJD!<&y_v=TC-8Uvnpw0H z{u$lY(~=>oRcSR&qyEc_3w-waHC{e@j@@b{sFhsTBy6?foUh^wgYZLiy&woHh>KVslWD-Hu@~D1fn+~S#q`gPzxvdXE0;NevF9s=Itkn`4f%mHM zK2@Zl9VW5@ohojnB~4RGq)Cp4|M`FU1E5`9B>cs{dSaTqSW@OBM>HolvBz>yKYl0P zxB==2L?xk&2lH8h4mqwtOrOKNGW2dkkZVx!#%+DD2ntPm?2v$IAJK=6;!q{vE@CjLY=3*TM#>jFM&>|A9n zw)p_bnyE5c)=x89>1T_tB^VdK=EHc2uynojLUS{qG)~+q3f^pFjB_?kd{0O55f!gE zqoM%WYKNrQVssAz)!rRE4qb}AJn!!u7x;jF6bfCXPr& zF1_=v=`ntPi$k@?v9DpbD0DlXsXh=&tLr%~W?LpHCd;?T_~mkR9I8ax~i zsOnmR={$G3OuO(TSWahX84;(Faz<;W^@ztm{Lg#DN|aSKE2yjUbA0~hH9mX&3g^2m zk~Eb7s+Fip1#-d2s2aylxH;V7p(bInmOkS;&9IXGXer0Zwa-er8FW&EkbU&;WHFK_xdbGV*XsKN z?mHl9dZZ@7*=C13j<*awK6JJ4NO}?G;rSrJNCPwri*D=#sWb8Zw>Dnay^}`RWmLChG#DxFqB#jQe z%c*)W3z6(7Yld0 ze%_Q3GS#WaI{6z$)un!F>`$%<-UhO;4cT|_CY1`1aBeZpgA!`#1VTt;^QD9zvz4r% z7Vj3@?HJ_Y6sl?477zFLxZCe#Y(fo~Ar)^kHnM<=b&f(@@vlVWp1snFg7||%$Rg5D zsEpQBVnt+?S>^*Q6x`;e;)~~Z$!Az>%Td85!nAgRcr~%H3&h|tU?0``qGXnfTFG(r z$@tmiJzn1k(;3X+Vc}pBi7@fn&42Ht$vTPI$5A^IHbjZh0m4t9qfGP~&0L3qYEn@q zk=2qlL9jkU!DFsl;Py7iN9wiC*IVfw4dX$^F$nEC38I-mysV~bszecr%)HF1$@*fZ z?}CZ*&z7LJYDLSBhN#d?eN#TAP68LDH8`@0()n+GIkCC*+wNBR62(u*@0g)x1Pl-j3# zhTb(8DvFLYI;KFVmjOBTa!=jw2i#oW<@bWO=SNx>%U9JxbP(L(e0zp3KYN33zWf4jU%kZHZi}qQWkf|7+0=9;a>YRE zN1c^q5GDKDCNh3jk4~zxT1GZV*hvIOqXwEtiV|>5fWlf7sl}R(RHEYJf_i%rU zBVCF5PRzN*nv8@d22svJb{<*2L2>y4=JI>=H+SMG8rK93uo=jyombf$>2?pr3DOoyL1FfGD)PaX#{?#kc~io zwnKSwhMnEw`}%+nLxr2M7KJ4Cf5p(iKlU}D zI?U8n)6ZtpZ%pR1QejygE~cdpDfZjl4qLKVndOFYn1|{hfiI31n3D~~gb;n2&C0?L zN;4WjM@+IHVLLTJ9fW~0&r1{q2Z%RFvXxY;qf1aA69@Tny+u~C*H$P@EtRZd_tgHa zt4j2BZ*T8Jxk%vS)CA&6Cw6gM4NMkze3yj8%0d!^;eM2Pv0+e8JVGKV$7py=q&O1% z2{TdAOdJssn?l)XJ+jQ=;{d+JTzObYWEM7QAq2;ta|@t1y8A?3s>ryukM{c0<>9BQ z(=IB|<=R@VA}q4Q>ElPs%>;*`RQy3lP>w&N-P2H^K!;UfK@*EyHXnmB&#)m(~lN^&oBS>tbEV=;q2lH+w%)K zp1bP@S=(ln;OhAc?7sX0t5>gK*X!v8(#=X)_Esf0>82wqNA$1Q3p1HQYi@csJ( z_79EB@Dfw-2Ep`V0r-F7JkBmTv%}7kEk0SHeX1~jRGBX^0C7_RCWf>@)E4)XvlV$1 zuV22vH(!5=pMCxo&n_;oUYF925pkKCqf`eBbc3LMn9ND0LdF@{k4!SuR23RW+;t8I z_KjJACI*dns7b^TA$#DQBJi0NxyE&31RhQ4e|$XRaC?i}>+jJV_gLi_Y_?M|cCvEm zG2C)=Iz^YQG3>6;US8q2{SHS8#tgduuISsG=jhWMch2MXaKyJaxA<^-kE*Gqf4NIj ztYojrkeCwIl&Yjg$kmTBw%15S>ZB!-(2>jLVr9uzM^ksWyS>B1`)k>Io~IV)ubyMO zTcfNq^oJ3*M=d4_&b2z7PaeHGe-Rq?F81ynqFJGMFq4$T{%6ksp3O-*p>QU_!PD2c z)5dzVMUGT@QQ%4n6lpHKZ~qZ}-R0v41L^<$cmMv^zx=bG-x=T{7z)f4MO=PPhvk=T z)KddtKjr5!V>Urv&IFqzAK7a%vXBV&&j7aGcVboS z;=*5+XJIqh|m_)uSlr)Wr9@R^VUDwL zOs_iq#p#s$Ss5%QIV6;11y-xA;QaSD_qe;h$7mB=zJ85o@7`hk+2^9Isx%C zk*T5(gN%ZyTid`j73$k-+<*Hm?ytWW5t+@^g|MJ`4DHa1t=YjRxU~ts%~E_dsd9pz4aq1 z=Wt{t$bR~`-lJO-~Qo&G%R1b!ThU_e{X(%EZLhOU4H_XXds<8gxSj!lCh{BXC`dfjL?Xs z_Acl38tJ33-#7$(na0pdIV4Gyt?Ly!Va6qGxH0P6nimi2bCj=kqPnu#?vND+_+zVts)dalZ@6*N8pfnItidvzMKjm*<0AA=@BIhwIP=8Q zWVQ~Q@$YD3=NFsHTs6&qfByZ2+0OJ_biJp_|M7xRc$(FC*RXdpQ?5{WBmF{Wb0MhFa_nYw`27HUKX?hGGBZhS z*ilV9&eI(0yo4>+l7N>qS?_C^6Q#}Bp1z{L|1FNkJFGV<>&HM!1gxRNsm*X(WcaPm z@SD-%H+hL~i#2YG4Z6G(4^TF-$nNFrr%N*In_dKA?wej1=@ftvGACPXK0%EPt<7L< zhL$EO@M`GotoV;|Pc-`jj!A~CNw8wiF-dSZ);LyFfvW|bTi@Q}@_vtt%L`oPIbLTg z9Fl@7MD|Qk0I(KqnxLltgwy$3!n*(8gug%5#r7NHi_ zWnzPx1jGeqs0XR^jz`Yz-Agc)AQLz2#6(8RMEQ472#3sH_Qg0t!hEG4WPVBwpREKi zo2YCS8|GXr8ay+B>IgN7ES3*WDNe~i^abQdgwA|vAmv8GK*B7X0hARr#qH_lGSIM` ziTao!_c@ZnNF~aOltG@y`|H#X001BWNkl8pQw{6jq5M^Dfwh#W_%!$8tJc zE&(o4#gGVxO<-q`x0`1R&0H-{2%MiPkQmUX(WgZhOhOxz3eEu2y``^_XAaLUHu&oE zSNQ7H16s|I08R{I8<4abuTN#)39%CQ~2OOh@tfCR^IS%=gFgn$1wq@*a#tnmC8Oq%1|Nv^XyH zIFLs5CBJ|_C-^>|c%vy)+qAfOe=URaZfvpH6u7uJ$L8!DhR*wANcrQ4M|}I-bxFEm z-<0cEWY-4SRM+~ zY2o_#Fvq#%YM8hmD0ziu+S2Bk%%e>30>-3m&0}Hv>FnYRuU@^x%U3U?FIq^#PEwB! z|F?C8V|~Q^@d0;LBQPt42#Rbifs{J8hr!{xclfS1c<(LtR2!lM9*H(?6eTH|Vo?7z zU$0RXDGIhQ*!Se?Uw^>ux4*;Phwnx1balDGI?si5-4Csdw;b{eAMy62)@+y?w3O8rTuXch~9u`vL%OTSwJDB&Q4_U={qz}G6fcjN^*9&kJy1*;d$ z)6vaU?n1|Oesj9ug|xI@3pJ*~yI!eho8IK_>!!gowljHpSOx_#kOYa}< z@c#SnaeH%vV|7&F!Bm5$3Dk5G#HkYr{wXYPTJa|w6&fF7Bnl$d$qDu6>9q@Ax0uUN zYvxK~IfrN_ZCDqJ&x!Uwie#dyg%Cm5tk-hB*<0wyqN^+P9ByW?wF`#JGUI>p?tc6c z;ayLaseuyNJ$Bm_zWD4VzIpd0zPQ>UtM=G;!8`WYpg)j&l*oJF+;1eM)rST*-`}7| zf#X9hWP~7xuUg4I$Rb8BU4*HYa1%`WsPkaeRM(uOFyViX^%Eut)-PKi^Y6xr(k)0v z#y=*~EYQdBx21O#1L~sIpKC5ZLB`AaRneR|G36S)yKS*bMyyMN;$nkUQOKAPXGv9; zEm5h!B$?z5!*C*921M{fTLu}5Gmoq1v`TbnIMSBVZAX=B*e^_@NQarBX-txncHx4v zK$c9H*9_xrLVgKE#+aB%qB0TlX15fC9};{D;BeABO=q6mhqzTtW1wnF&!&%faS{2E zE4_}OAgBW|aPr0)WLSC(rrU`Gw=ypzfDrB}gk?NRRytRai8S0*Epj~gtqEN{#LJUzj$7LeAQg^9+ls8D%f zx4Gz^6ML=yA8T*UV_TMHhpjW-d59b1n_s@ltn6;G2tpDBnIt4bkQ_m#92R8BY*%s! zP@Wv3AxLUV>^5Y{U{RiAQP3YKfD)VCRnvM7*r-tgMbg)EhD) z-W|@_-}kL=4Nd2}-GNkFf)&N+VSw>)jMLKv7AGed4hMSQR%FKBnyJ0AxqfD+?RQ(A z@A>E+pr6)QbN*RbQ&lM4WMYJ5bSCyOxb z%RGTQyWQaqN$F#q)UpI@bntsP#&@?Uq5V9T$Zmp7Wp7#+EZ=S}y$6rK^E+3_n$B?A zZ3`RE6vU>b?70;~_xV_PJMcyDa2j`zAP3mLB(=iy2PlGjsp?hQGlA zx=&K9*T%b+up<3uhZAbW=a^2X==EYNF{`yVZ)8iycrQkG74o&+WSJ6`5FX%#drjbs z_u3G4Z9Lo+C6;A{bzR|Lvyu5a4}D|NDP%1S(eo=6(I!ifY&TflU1PmjY4YyVtGnMv zSk}mrJrWuxWQH9n*TzDY}bb13m~pD2Hnddolo8=CY6uBui- zW11Z2Tk4GQ4g5-dD4mS@yojUF>S7ChzXv-ZTBw$~(UX%oMw1ct=?=Ty7MsmRVq|GX z8Bs*KyVbe6ka9DT24d|Q?^bh=@NqPb#towdt2=Pr_g^s%!nKy~jXN+K8$IWyQon@? z4XfFmwnq0$h?`LD>EaZxUcSVOXHPL4^aa7(-rnG_-|6+>0ms8kX$wKnAw#(4}Wm7N5e&R)-Zh{@i6CytIn zor3F%uY+i-Hmenub6}xHpaWSQo1VIzj=lR6Y3Fe9ZS-8=YL<6|cO74+Zb@YpsU?d% zFnU~S7isoSdl_W}E7fFRjuuuiibwf1S!#5<((n0_6va_2*+_Z<1uoy^K(se0Oo1I{ zolwy2^sUldP+nQProy-;5t5A}W>6Z^Ang5H*`g~(XJO8e#*z;8G=0O2?~nR8zdXm& zCy#|F=`bw|?Qxf@weG83x|fWEWTKG@=?TV@u{a&R^_tdR&Nl-=UX`-b+hhfnNsb+T zY_Ug;f!wpUVTH9HV~qf7W^9tE(^SZ;kN1eMxRs4CT)Rj9h_XdfWZN~i%Ns10x4Nze z3;-DPfua|YSo=p1h*3UoK9zm2C*R(5gsW@by}iq*IuiC zs-0G}-Q)TOcJj>*CyGo~AUk|^ZIr}NZbR0uT$qZog|_bROWkYawa?K_DGow2HLdA5 zQg!^&8xu#w27$YwFTVI3|G~fi@5$9=wY2^RmpHAmB#1iK&iCdqrS>haI* ze%P}`v^f^j&TVvW+v9G{8jeYfjyur(I_~OJWTy<*4jkSR4t=Dqdp@6?fVTqWu`{5QzmbH(KMVk#X_oEX|ue3w-e6*2BwkhNz_NI9dxyD@ zMdNy!_47U_Be<-MJ!~a16FqZ%xg&8>59LZ!Yfy5{U*$qo+<@gj2+#12YYr#QJl>o7 z-ar4I+xL@?A5=(x{cpbcf9~})C~9pPxrX)3qE82x=g*(wAN=fR`edhmbNvzT-o3+j z-+hPuerMqFmPBT*liIog`@Yxd7&}G5JIZMI)uyR{p|k6~vCvIj%iU!<9!h$!Se)o} z5T%dAlDH?Qok8Pae78mX`VQs$t#Z7>eXXzKkJ+a{l6wj@uPnX3sLjDpcdDAZ{99)! z&zWHyO-Q;_Iz#qpI?$@u-ZypUdUk)?{?`r`T-%>xw7bXMHt=bIbmXF{lalkWfpvcj zy<;wtn@R&4xn}|(nl_2WU8~CCl~E2oi4O?V9{NQeAqLvn3;QLUM~TcguW|G3TO2k! z3}PQAlYucRpqy+(gYsDWQl=z@QDki??T59@D}^Mv+)j61nES*`qSls?hj(FE}fdnZIRe)Ux?86#| z5XgExF;h#I^GWSEq1wR!<6ej{(@lyTH5=4-?{V|>*Le5l4L18N2D34Svnd9nq23>w zxo8;iB4en;cedYG@(WY%f;dCY;C>pD&>Y@l;B^Y0jYW|mt_y?sxFjBT-ZsX2n{pTB zf}+Nu%n_xOs^ogzaw2~$q@IZkDVn37?NOd(>>o?+OnHA3u~;uLAxUU7H0TD037(sr zO2M6RWu32#ezZ~|j*nqTB%-eX`if1QuG`W&)HN+fpeqeL-VR6P$lV%7E+qtJwfwh# z@xA$@KdO-0fASabnxD6mP2K69t%lI=91mUMk$GUB8kIG6vg!UsW63LCS+ua4a|^ov zaa<;Kiz$3pNNrKHMTyg>Bg$ynw1gc_p~T${_HK)(ceKjm&mxqiulEA8cd-*BC#^X4 zH5K;zu`)&3p_PP>7}p~YOivSV&Md(qQ#>Cp4t9T)XSzT~iZT#%sRVpN(Cn6_ttIIw zvYJop3*7I;(xwiEL$QBnCnqw8*pjGJH`*!hg6&Zo=i%NCx%CzDLy@D@^;(mCYGnCu zy0L&oj0eefyTxw1MV_T108B&W1^2?ZU>fh7NBAJ1v4&769BJWu~V5e<~3``awg1cS)$yt zD7ah1kPv=vi1FealhaegZa_<&f4$8D`#?{SKQC9un%N9SheLuf|$A zc958(mby7Ysg|Hs2@bPxQ)kcF^0gkY*d46uems9h*|OU^Q<~>uEWLJ0tvk@N>uuf7 z?8<5!9^g`f0-HtY1Y{0|X*xPtqcAXV<&N2{+Yih4ED{<61Q(Y zAl>d!Plp)OmpTlQF&$}NqBm*K8_vzyz;J5rz8Z^2Rj`vxV{$6}?&;y0baPKatWsas z8n0CrSIWv>e)bt&ef|Yzr)T>5B+s-$S#H<(?#&yF{%Rr!_T9U;A_dX;wWgwM89okvfNkwz zMc-zSgj3)Ul}PJSHh4rpDp!cP3b8ml_oQROymW(34#;k9u>AHl-hcBAuCG5L^9uCi zInWDrou#xRRrFdeX-yHAh)!ah&K7t^(q$bY+2ly#84g~kNwpA%fwxPege)ptz1r@3 zThz#FuQ3G>dL})~qx7sU;1`AnNtTu%UArWzY}{(g;dcyddm$DU-Dq}uRJ0xBe~q zzxbim@dp=D&%?j+JpA0Z=^A21xrW@gCiHDst)uB518SY8?!%A9d8#_?ePakcOo2b{ zr`)dQ2%EV5otdEQzi;jCJl`bp^DvIcO7m^>7|k03lLj65vG$tI%a?`Jc)ps0zP3s0 zp=aP!xs>n%qD^3yB4xq?O}&G_Mj=&-UsC{YnuvBD*@=(VXuL_ueB|Dawt+O7W>MJh zcBZJ(puQ-qHDE5%5j#rQ-IQk`QDx-OQ#J@N><^5g!+4Alb599LH;Jy?+U}B_?V{({ zlWzBE4`7D!&Q2D%yt>52`8gJgQ%oik#B^-3(gW_O*Xu3bzI}^#Z(d`)TA~+)xHw(l z^UpuWmp}ayr;7zP>otD$t6$-(zy1yGmUo&uIcabTkK>*oY2&_xwqvj4d2Gm322wW@ za-SMvL2`{`Pa=!dN$XGrH8?&ZKE^6TvfE<2Tw=f7Vm$5Z#?J1Rf){x`#PoG78cjp- zXpCx;m4jK^(ft@6a72Y1DalEpT)$}*u2y^McjQi{hCxR%r4&xlW)}pqfCg zj{=FWq(}E_`bPILU`5*OkX(Pn=EHleuCLYHR>J`MGRJbaLq7;Hr+%I41V*IgCGud5 zK^@@9V1jZq!L$xF-4*o!+Y)%Y+v8@vRfcJxTw+f}QfG7BSQ(txI-R*zu(lx>4UU73 z)?}gidPnZk(A5&)j)m-qqOduuk>mw}G&K=%b%>%icb^EBl>Bf7Fq>)}5YQlEOLwva z#WqDs(}=sJ1_*P%y1)Zd9+malv`eaEUGeVUKRDJ{e*CSn7x(dl3+Z3}n{R*dhd+C< zg6GYB3jxAKb@_hl*@`w-)P1<_wgq$VeKgi}#Ot&KDi)5u+=hU6d^cIl1B3PWf!`j$ ztpNbTX00nlFOCgFL)i-5{)G_>^Ftt<1cMR&8Vp7l4hE9P$XueT)Wz?1I}w2-Q=((bppQX+pr6af#;%^z0K0tJ zig8j8Y^n{X;-S~agx~A)fZpKx&0F|Y2EWJzf9H8x z!o#BpVS8~IaEoNoN=J_35vOOY?RK=?DSDRJW4rOnXv8&Dl^wE>NzUoGf!Qgyd&_vu z(Q>i20SetlwB6TsIZUng*K_oNb_L`9-`eQw#t-3HXx9|csO2U%_CB^wU@qy0FehDi zD)W3JT1E9^_@jZ?mL6HVeG~E=U7TXZ+{gJCUYeO;hRIY@M*jW=yEoTJ_d7JbEqdIS zlCaY6VLTpTTGR+qvR%oZu59py*Wpq$o%POBd29;>SKojBX{8%h7yaY-_t$1 zJM6GO>;z-d=zX`{;l{rf%b)k;VYgSYV&hDtX*`^YZBJ$|(ICFaye26#;qH-fXLS{u z>%%rnl}zV-B)*Sb(_mdU*wUb0*GYidLE>!Y`Pt(b+9(1zq>U(T2nn`v3Smhdqh~xsb;SCOw4?m{EZb`;HF$rCa$91X z?Nmq=`fZtntw92x1LK$Kz#Q7__PGo4%(PCZ(LU%|<~D$omJoc4!!I_u$bM8ZLh+c)oVAf%im*j(RWd$&f(_sWYD zKtL%3Ey}bDRa6sNJIUJ0T#R$kec6agjMrYw>UKT2AZ!(Q1mnubRCJU^Nj8Cf z1yt@^2Clg;b!4(u^?-O1VYujHa(RNulS>TFPZ5qxQPEzF7Mdp{)Adnbp29oq%~VWc z3w%tNLD>XYzh5Jl)my3k;-DAd^86IT`H38Cc1e!S)(ZFSdPjTH()d{$tIb9YY^+f5 zP!EAnXkF$=4?85>9}WkC8*8J5Q=?4{?D_dQzWnJIBD>If@9mp6LNs_i67k`^#zIQ% zI*EfkTZZH#3`df>`C2urDHC6HqxL$5i?{iGAd`#&P&UBQl zM6lT-{IJ9@zE)yPZ<``J6bjtvk(gAls1xE1m14xbW8U~86xG(hyBl|SKsGeTZ_oM4lXsJkg;>_nAcPjplWTf$f9zemJa)-?fm|b^U+Wz|R}YNE5_s zAxGc$AJoqW9!w8J=FR;c1&Z*1jQ5Q{R`)EZEG z#cb5l7ojE)#7r2~6e||dG~FXBQe&)46q2USoE8hqMD;r{J}h3`t9r2xH!jwhflAhz zgKBmC(Q`QQbvV-$LezW4F3}Dw%k=mMWED=QnzUI+NwQcj*VrEt<5|pum9}Gp0Zva( zb*Rv(#uT}-z2e-xPAEF2QFgzF>2xgEi^U_+guYSC9kp~Pi&ISoWJb!jm5D3Ep?)@v z`PtkM3E&QyvH=!qPNAF{Sx6U)g&?yN$_mC49cWW}5i^{auv6n<$ylVi)ZaaRbc(Ip7KG4i|jxc>S#cz^u?$?BjzU6tjEI#bw>?wUxGX+h#t8++y}-NktsS5~0y5^dZh z)a}WSgWl2U$uR(35p@NXPDrJNdE4D+$1k>fZ##~Wch6$e?zfvG7a(w)gN|9japlor z;I?~D$IdmPb^bo)p=5ZSGW}=!z@68T?^w00b7nh4BOlYV5zZdZaq{>SqpMR4FHX># zjrEwz-4tD-4asjAe3NGr|FZZ9$t;#^~6=kvEQyF59#+JM0`w~`c&XT zG-A*9@$&gI4C4snUaSN9H^2V18p2Yn{XhgeR!F{ny(rQ;rQhpo3T~`TW&pIie?_E` z^(w-VHH`6%;wSTJF;6oX==7*J@|=^p$ZwLp^a3nK5zhKP7X1*@utxuo!%O!lwi{$@ zS{a&MR7i4Qz2`15#h{7sbU4S81x*=ZjCsB=nfu)>nmocJ=wV7YG|Au(2M7m!EC>Tv z9(uKpedQ^ArV&>lXba7KAL!0K&{a}c=BVKnRmW-cfw!?+J9MW~&-yFV>B!@mOQbOh z6fN1<1$~tj*seGD!24;NVi@$)NbHsy95#Es$Cr;EqhW)O2D>sB3TUR$pk*C*>VIeE ze(>RWe`DIq!;jyokcMIKi(VA}3tmvpE#Gs+v@6CrR>R{9{@|fLeCTaiZSDiWUi-|= zuSSb`ETU!_^^eXbE>E-ZTIq~u1?9EXkIB0>GE*yerB!MCYgu5b!h8UmKxDt2yC}rH zl~&T6So8o50^_S1vU7|*L_HsIFOZJSXwVHqSMmU_L=zZ2BN}V=ZvT5@LzCrDWKF%L zx#U5>PBG81BcycLiwsbdmGvIwb!DblcA|05xEujS_r=$S>^<%~S(Nzo*EiRA{pPLM zik#{y=~PX$8_80F=_Fz=)qN`rfKW9VePtn{#oKqUCHyA5%$89 z(-WCzX!pynjbar|PM9p*+M`5aOJbp?G7ki?A*WM8!fb*#74z!})ARkM1c4CqZnK8h zlwwL>UR>bitDoTUe1z@$5z^aRTz~ThtJ|IN-gLIFLK~oixShKi6LxN(te`bsFh$h6 zclCaHr5>AGM=Emc+Oj45SZARQ^Y&Os?|(i7ay(lEJ$pzSf|cJEQAZL&+oIl2(eW$; zH)xCJkxazQR$eW!iYZMID}-JFXW!6Hd5-hvmzX^{N5n!o z>Y<^%-*$t1yVGG9v00kW5z%mjf?X5ZYB~!U*!MJbHkpUr@_=-g3sz;^)@*Tt^OvtM zTwEZpfZLlpEbmsj7kEAJKEAoV#kb#li?{DTV7uST8=H`@+_c!xi8$C`zg^?*_Py>? zS{VktzVS+i;Ysis)UN;R1o`1HmN(b9yZ(rhd7EA!=}gaRH@T~%D;Wbccy90vAt@^G z9OK>>v8@ziKa!S{*B@h&fkC zbQ{~pDyGA-z?|o#)sFH4r7d9Y8GU+JN&VaIitb-DpL~J$yzqD;)<11}402UMrH1A>heAMdSszy0}oYK080dEIr_Mzr&6@*RpP9Q=zLqT@}dp zR44onL?isJh4kP4n{QYD$$$JG{@I}4`#Jwih7^lWSyjgeVByymH+Q>?&aMV%KCwtc zxBhmXqLV;)w&)llk!SKkLnmMHtcikE!C8owtk|Z$ThK($>)ZIq`2K^YrQLJfAkAt%(A&tT;>czXNED1#}A2t~u z){%vepM@-rwU->Qi1cF>S{@P%v-Q)Yl>(qWEUng*&O)?UCWK*)!edT({k|@$Cr_S8 zYIA;ms=^bo%VQKBnUo|PuuvAM_PTY=!>T8I})r&nrgI9i|k{rl{CTkh3+tu>C`0qFt3$JLKx~0XAv%= zNR)m4%;{vJrhuOtx+VF*n2co-twv)JN_zC8zr96rbBA)B;IKXDMhxw1%tJ4uQ%!jc zlJgo{YDn}Tl<)fwro`s{X2r#7-D5v{pA^O;gyp`*@5FB%=TEmA^(<8Ew?)usC4I}R zZPR)@v+D`&HKTT?*@>p}?c^zVueo1H14eJbgrG-_nMPSi9k*Ejvoy>85I8#@;mM0L zJbrbBix(Gybfd)-pjMZ%nAJhL#?9Mz$o2;XJoHZ%7+#)ZJe?S#o|3#hQ&c0fC+GW` z_=yc(F45}^bWO3Dnq6K1Q6DFZ1-6^5_ye)kgObQL8V}*e0p7p=h{g{vn{#h@BD90A z6W{YJJ79TtEskB9n@PE{@qr_31PF?H|8WA?3&CKmFog4g39{vmlVkMu=rA|HJy;tJ>|n z(V^fs_l}weOXzz~t=<0EKN}&qpj_YnKJeP&aXdndPj4{6vPVmB{qX~S z^P6Ae_3Q5h$r7IB&*32?LQx!>37?{9?x$fyYE=r<3hPRkxNB%m5y zs(`!7eb+472~zt^-xN*X7EY}#98}wpnzn`BGsV-lu1lec=&_Ins*NTsC$Mt0z(Tr| z4jHwc`3DAlAERlEv#U8Ce|Cu{pFhUp`2|L2Q}{!>&*S(~8sBQ6fOMa!3Z%QOOvtzI zKVmze5$u|;RZ#45Em;c-nghNwp5n>$vwb-#yE6v+WhYnj;Gdy|u?{A+L4 zOB`gB5aR6o92Xatg8Q{|EzE??Msdxs>+GO?9}nSDO=ln;f~)}PwM?UyqR=%ararBM zML=XTIn)Y+?tVmisD92Sq^S@lIl==AUXE!{qBn}+O$MmTOlJ6cqe*HaA&Sq{x5+kqeq;n6 znCDsJa?FN$jA-0LQ0|qqBEANLK)7yd0zvjh_sWor5{+*pX09I^n)>|X4l>{a5qaBV^YT!~AXhMyxS1-`F8_Lp<8N zQ2Td|Hf_iY)q{i!uYC?qh~FAaw;Iu)_0lvf-44X&rr(a1m4!VQ6w5MGfpJ)2 z-qhO7ot~fJ^88XS=z6)t&Gj|jzx^P6)@rpva!8O@xia`Dp@{mSDb`hKT|YRHOZccT z-No4q=jUe#;sAHcTU6iHSRU32@@5pAn@H+bl3=D&$G+6GN}IYoGX*6x0pHF#(6O6c zCM)|FPS2hnSVIc8Z>}{FZZ<2#y+};lv$Io8usnTPEXkPV1hC(2HF0thUz{#P_?cLu z4_|}p>koMQ_Koy*{JV6LSWC9RKxty)21b$~I4eTPrl79TlV9>mBrVEgWM0p`9A!7N znbq*p64B(%9`<`t*m=X4op7U~%=euW^^51vFdGiAdjAeJ57NT{@4o#G;bDWviz!Av zaCLr;=GhZ?S&onOMr~pf~HIoDOh6g^D_E zHupqs`mtUrio#O)gOel_8ONl|lkMV+u1n)s){IG+VVUi)%yTFfgBhWIEmx%6E0B5> zQm;lX69ZdJTXLKmR37?tSwj{3`{OwCefaN#`tYDIw_X7@_`j*Fw|Qyui--Lo=4Yqc zh4MXIZ8qpFmxu?3=%y+3WRAhf97P+Ar?7`ay#?Zxih&ux+G;PX{xu5m_tM~uz zSHBaiiyu=+`SJMiqhDNKU;q5(_S!7cWzbx73Y^zQqjh~h&0h8Ud5YZw%9=X4A>Tr7 zXsP}1&{E>Ps&1zRnL^l(+>q%^L9HFU>^ygwB}#(?3W)>AV{^n1asE2)Yl>qAPhO?S z%2b4dhPuz7l8HhiCZ-`Al{qU%iJ?D0*bmU34$z+sO$6Mw!M;ebVT@9;6U^!PUR&%W z`LKy7Ivgms(1BKqy|%Sd7BY@Gg_Dx++viV+#~psWNCIUBh4wYBQ05tSo0VW`P6?-H zXM#Y_PZuI*%x4p<*BkSgyjl|}Nkeyc*P2TC$yc9WLrC}T?nYC(etd1=a>hh4L?BJo z$@386o|A>Ir>R!iAlPi6oK~V2iDeY?z;iKgwD6;Zh(rQrv9ge|xF(0ah#%w8Sg^53 zQI8+t*`rIW&rfml%~#mH{SNQnzC-@u4bs^NSF^E%>&$MPPbS6;pgJHgjC80eo7Pv@ zIOJH$eq+L%EBcgn;*{Ep_mf$)D?u@gz@~eh^!};keXGSDat0)*cH;y!nz@vb`mwg?Ph~ZJ+p6v3HZ9m1f2Pr(->DzPw?XNr+E6) z=UBYB!tnA0AZbVm$eDp>>3n08hqwog$0NkUJ_eJi^nRQk^35A8->-4F-s5ny$852} z$zq4`Y=Iye(n%0iT4`U#&|M}v1kg6 zHcRyO8R8^ENFC&Ehh)3f`P3Unh_fl0Y$zl9tPj;Ma$LfBbXP zLZ{#Nb;s16?}3P$PSmFOEhVZ$tpHO`}06H1Fi< z67xroFc^12XvZ`iwphl|o6LO~mwaeqVV|Bky+_wl0&X&488UR3$d>C__= zV#0+bj^a0Wa%czG?NY3XL*3kCbsd3&uH~S6g*3|YA(6HUgGcA6y- zjJqXHzTB-c<%Ux-ClF2yd>8XPlkP7|5}8)>>-e1c+VW>J5Se>yTL1C6ElwznIl-Ko zL$ATxbcYWg-{H;eJM3PUSWiY+a8JVGz}Pyb?RcT$uNY%j7S^-3Io?L1-Z#d|Pk-*1 zSF|6^1Gx!2YjEJaoz34nXCdSJ;dG{5vW9haaT%svNlUBgG{uzJoUWLLwum~CpDUzl z9IbF((e+hD+_XCGf16v4f!*EgyH-Y(UTB<;-fhLx9`{Z_}vm3e@1Se-H2IDz5 zv+{t==_19ZhCiCmJi0;YhiKLt?3nx{UA4KF_i2ioyCuGT{T3f@Zs2>NzMpz+SvuCv zZ#$4<6`i{R%M9mRI%>>4OK)nLKvZ@gpE3<)yB9i>kzt&dN}JJu3=<*76qKe6H1Q(J zgaV}`&BcZl+;2ieNrr|&*aaEmeQcTn#r6)-dV{m9z**G8(|!+M1R*YX?Qb_|ZnwaC ziy)=`nT7g*Vz&_t+%Kny#-3zHd7fZ>b1SmdE$^wE#neQhG5(qe3uRsVq{Q83k9YAB zH8r^;A?^0K-K?-q4$3&?lpnGIx6M$+Nu6hjwE%6Q)vjU4rzDmKhjnxBui8x5dz0s< zOT6P3**c)03ePlnLIeT?jgPb0DPBE)B@OUC$;4^7xxK?KPcfzBg=Z&!rBsj-EXwIl zPlZVECl?zw)MY#I2JJ)Y+{4}v^VWU%@uLdqfA*jLSO5Bd{Gb2X*YNO?J2FnAJS;^l zsZGIS0aZeT7uem8VM~l4`%*=sEIm=3cKq>}vw! zWJSi{SRR)(-rc;%l8N}66>gVzGDzU`OD!20GL<#o*8otv^a*pgl9em(P+K6`{qoOb z53n8}n@GmO>6^jh z)W#kTJ3ZdyklGz|C|xKaUp^ks>W7sQK}k@asZjEh)2d#F@f4GZ(Tx&{=8lv*)|;Da z6-gFhPa^irgsdkAqsjA(Z?Ps-G!n_LD4|&`u^KG3=StIqcB%Q(r#KytR8VpC2+5o8 z@b>jrI4rMm2s|vQ^`m#IqNFmExpkegLzI{wc5ZY!NtasWj0g<=^I-qecNi?#o+VH_dde7$1?m}IfqTt%5Zi}oL_>WxT z#xsRftX#`B=4BZVJPfBpTs=F-i!Yz!*&n{b?D-Xf#h6L-W`9;@=GVqTx-bW@^_4r4 zi70;ec@IsrO2}_^NbVBsRtfg23fcA!`*n%Ylu=@RWmgiG%)9_q%#;{?G?Nj>fXYW1)zbYq8j6(n6$xJP8#C=0f*{mWZj#gr>M> zc8b)7?+@5e+exw^-Hq;+sMAcZx!QCZh%k{UjL?LEBpS7ib`yDz1Syg)qdxW(Cs01N z6ipgoQxz!p8w~b4T$KfeeuU>`gJ=5#M)@Aa$0gGDw_QqT(EB#jnJWXBs#d{#zg(KI4!Q=V#;BjMZk+BFAjJa1 z3A;AddQ4ks#NKV%e9!yrxi&?hdtiUUbU~-y)}4ZS{QAxxyT5Th0c}`<4J^s12~MzG zZE*YHT3TRQk-mQY2Cv_|QKPkE;}Qhe6@_dYl{X!RxOnnds(^O@Zju!Fo`K+@4ZwKF z*2ULv{@t&CP}8H;ms2jqkh&mq$C)#3FGryt1#|0J#Oqo8MilydrXZz z$sOC2#fe3fMW4TNr|RP5j6EX#P1jg&);R1Fy-tFKdE*u)oQbB~G+^NKBm;Q8UTIf- zb9*DX3oQw^%w1e9@!|b@e0cK)KY8*9pPeo+84R$PO>rAV*pdLZPmyo7*fJuI5H2Sb zrcRYc?qcRQzje&=tVz3PWmT3Qjy7V(9i|QhYL2W}5qik`XpF&uLsVG0N+$xhzqSWZ zeLQ@+I#E~Jea|L`*Uetw1LU%tfSpFF|r*(JQ`K<+vQ!X=z*CsAHcP2DM^HqT7IHYO&Gm)t(nR7Z0J zF;{6;lR<}nl5EglW$>Al6h_Dc27AY-dIK~`iF%hJdv}8^uZ1+lj*T24R(>`nR9zYN za@}ggW1vhX%Sw@&c<#uXm-|~;jW!5-0s4a;`n{p}0yHDw-nGy*7@$lGY~r3t7L;3Ers zxpjqvt0Tzbl6uwK?0_8^`JA{jL-L~4^?D%)vV>8n9px~#dDrP~b+ zv48$Pn78@k)|b(hBi=xYoA~J$pMQND|Vo5fPk`r_A9IPE#AL>C$oqoDcTq{K7Za& zENo;cDqnH8H8K@WmZ_O8d5}N_CeTgS=DK#$K-}M%JyULsEd<*dQdD4V+W52B6`NQ& zhZT|3V~Qx|Q<>d={*zalV2C!X)=Rv9`(7;JH?Q9aTHZ1CYQGax{IFV~T-_ml_6%pS zuYh3YA%?!OB|Fej3Z;r1AtAC8%i5%bSU~jHs5zL{=Ds$atT?axe-`6vi>RFtSwuBC z9>e%`7KAMV;2G3iLYKh#%F);b3Fd(3yja_@TNUewFzo+3S}{+?IqC!Iw;i5k!IOg zKSUl-ETY_b9&)6sJ@(ft>^F=mtE5Y&^o+$cO-t+#6}&jpgjYr}DzaST5@k{%^LO&1 z-IWy*USG}8vzTx#)aV)_PsPyf%})Ew?Rt0b-sSovvINGsA7VTmBaT>1>ChC)dgm>LcUXv*|9fNmRsFjb_+K)$8fKksH{s zk38+8JQx-*r8IGtVVo6+Np#E`)VmDpyhg<^>&;e@A?7c$0B<56`%#E`GKPP7g7R#F zWDp|c9+QwfS7mHW=xa>GEsPYbEyANL3O)Tf4Gi|dqMI>~w@B3NdX0&m>lMr_&BSD< zp(!W7rgFZx_wl|@uS>79jJr>8`QF0W-2dL=h5Z2Iy_X$|)<>B`S(>DH{oQxc!8g4S zMQBop;{E^$b7qr7+F0Bgo7man6m&ZnQffuT1zFl;y?aNFekUTr)s;W_o?Gw-ef;P` z`rrSv|LN=h?!WzS{&gJp{}B&!78puAij>5d1A6fQ^VwWR=!D>?`QsbONrR7?T@tO^ z%EGgZs=AeJ_`cu5uwj*EM5%7bEQA%Ui&WpywCtS(9{K(TsFW*?zU{u^W;-`<)$ zQE57RJ>8Hj1k1ZyESGnh*7)BIxyQt(@v-rHH%x{=gUhQcxdbiFPH}R&z-T&>UQ*@? zyS*l=ufP5ZUq@fz!-o$h@6h+HgODdZrmPL+IomgpYs@6<^~8>K+D=ElVnFz#t1CQz z`Aj>?QW>bFrfuml*>MxXDyXY1P*mJ$9?Wj2ER8Ama;Zs@&@~tQ+Oq~mi%PjqV>NRk zS~ydS)=39~QOdHu=R5`5k%}?HO9sH8D748A#(*H2Q2RAi!+?jPHDWmK z-@TR;1>g8D9}B6eH?-G_tlqP>X4zHehc~S;L(}^0!a-;Exa%%p{pgqLG7_uic=kLz z*p9{3okG^p*R$`D-w5&_O$L}PCPHEM$yRXb>E!}1{^)Z&{)1PTJUW9s<4AZAp~y_3 zjMZw0u%xM`7|#YOw+`f%D8w-7W}hKjAF#gJ;O=^jyPFMG%UmQ}H@G&|vzIG^Dy%i= zmWrGtna4v451X=9-eu(*M!d3uxi{7OYlt;G^f?_S&0elISuYjz&um~Za@jERwd0B; z@Q|kkB0okLup#ZsHqu;^p=tbwrt#m8*U0w=tsWGrP?{hw&&Ib=lPGx|S0_Y}3Okug zTOP|TNTembRwbgcLZ6<_+Cx@YWrZ35S?RH<90VvvArelr;~3>)g5Y!p?_`Q%Ji;Lg z5ETZ8=f0OZ$(Zg*MP+vG_MhkPxgVqpTgr8jZ?04FAv4C6dFGt->4D6Ysw_j_rpy#o z)AmPb;}d)-N3{??Bl zT}b(H*e8FU9+H2gCt7>x+l!G<38yLwnhBN8CQ}9N)}q`)B$C6<=roNlqcKb{*qPTF ztCOsv)Dn9E3!1BsFxh==Q`7#P4)pqHDJVZqy(xj%bbVuUiK8Q| z%Kb@WtR9gnV=+~6qER=$hhD^dj|eG?ecK<%!cQz^?nv#hW{RS_++EXR+;AM3s&49b zU+&&7--ZncF7r(MoKiY$d>b1F{yitlIEa*_F&)ovb#aNi-8;-VF0Bw1%vbhzfCpbz1k2e<#ov- z%Em9vvFF#Z;UvqQtD)Hh;dp@FAVNJIz&{xSG>Qm)WIUUy8hw%m-I}V?ycku2xyE>j zv+>9*>>rV+V`Bg_&lFi$ZD?-IBX|aLf+MV~Jk`cOUT-$#%ftOV=(g?a+GloP+=rHc z_W;Cpl0Dvc55HCn^v*!#&TsNA=BK9^pDz$jM@YFA+U*cAgkagnX1i7Zh73MDAN$P~ zAM*k1Mt8MHI&W{BTI-q>huM;^~48RfKq9 z6XVveq1nywz@+02M|Hh8y8XjmYU{a%udcY}dmpH|Fm3l&|GSdBRW13>qu(gY94ceybN%f=Sc z#yDeJ`1Zb8$Z?Kyzt-)<=$blutVT?Tp{q)o!=wB`1=VH29BKdVb>Wn%qU}Ghz2sEW zm_6!!nAdB=z}-Y!ckBgAYx!rQ&l=0}g`K;dm3WsO;?jP6O{LtE(^w!LhL|m;SUf(% z`KzaxK0bvv#~J(y^O?}10fvlKu{+cs-%$KnMiMzR@iS+>^2FKJtOUM z?DxDcNaU%wD!rfd;oIYBKBsoy|&S{i#CFuv4ioEf6Wr zje04Q{v+dWaT54isIk$S+wUX|xok_^I}4B7#qJ36fOqsGKaPY^%Z(wT#lkumio^2q z)k`cMU!sfxtdc~*2!y%=5-EoRp@w{4IsJn^yxRi~B*JleuPVJJXpX$8+U!nNXuKc2 zAI0xmNdMPA|Cg)(`k(xlzu4|}KPSGP=c&eT9-d737}-x25zi8aI2E!;@WQ6;o03)< zqh%9;CNGVRoQhm2;j_^@mUbs}pZw9j?l_V|d|fcmbTb`K@Z|Ah?GafNcxb1vY=ZE^=D`&YoRia%GDsb8L&9Vdt_sGANxo zYaU1}rgYRHtCQ&*hdr_lJx&WGy9&Eqfz67#Wx7&TN4RLaMj_LWOyk4W*TS1Oxv9Ygd)5()`>l%|uD{>=8nn7%B&kSk~)!veR7uG@Bgwk5s9?mY;Yk zmE~@*xn+>LSo&qA*G(>0wYfjNHWh^87-C9KJr(R&kL}rYo7T^`dS)Hz|FPK9MZV%?6tdr5IaDJhTU} z0KP)Rt(!(&JCXYlE-)8~O&#g?arNjCe){E?c>46Iir3d)eJwb(Z8L2rRUOfccB*Qj zi+ejkv(r`XCu5ot6C6$0!6dI(@XhUYJQJtHn~e-se&$ZIRo5aSF`S#bP>GN$1ECUf zy<07Hvl2??#LfaVv6g(ik#EZz+}+%0^5yHt!=z!-KI7s_XW|fQ5?{>c60D14Ld~ zCV>g9bCKn}+PE^$?L4g`nCE|A8+|+i^c-tdD>X@i=`pGFcFDS3`g&$hGOrG3Y$M+V~1e>lwyGjixwRoMCZsg^DYdxTpJ)uQSO# zWW`ed*~p~bx`WXSA~qUp7EoSaY`V%YmylnXtNno@1*hYw_NSaSN&ZWB3D$Qj++JVH z_=821?+zW2>bw#QmcH7?huL~S5uG9Jr!i*qidZa5O{C&Zlm&vaLa#2-BVr*oJZVCe zyorNBjA$`K|H&ny=jW)eW=JP7mVSlx;h@Lit#;^b67&<=gjQ&1PQNcu?ou?n3_(_- z*DzX*uWz8j$z~+CM_OeIsBfD~6Ypm+4BxbBL<9JJRpl@kmwePIG`9QmEs@V?*!`AZ zr~s%3ya;#yxVh$`hX03sm_lmeEsgmL_uM=?Ik@nws-r;dS1d=l7{fTmf#*bR+>pH5 zHVuurR=m2lgvp0cvhJK8O)_#Hzjq=1-~Z+R^~?X_KmW(SEX(2_vXClJJMQEB>>SUY zJ;TMtg`i4e@npt|HKs1!6d86Gly0z)uyeb;yOj?tJEfh~R_Q_{m0kO@!0bvI6L?&; zM#tuZhcsU-9=_bY%}(Z6oStf;U~zKLkejA(&*JL)Kf0`90mmd8@McRZQ^bN$L?WhC z+}*8kK^is_O_Z==x+=od#$>+MS)lyL7X&`*^%1e-wNfso2^Auw zlsZ&p=HZOM-KXcZTGYBTjdnHfPU2;(FI~F7aVn}|Qb&&YrZ78FziIWV2F|TfWwqet z-pI$v*$kJ@uP}dnif~L6f;nafQ$+LB7SgqG-b$d0nVs54nEg5TWF#0)CkzEUWfj7gf*q#F!pXyE^Kl zVc7Y2fHLwF@V{Q|ag!w)B8t@x{dJ0X&-cZ_xDBeLLU1TlSfk3rz>87%bXYTcR29X> zYbVL7xeuqerUSa-%r#Ti-m&r0zOX)`Hts6)?Ria-6YV_d@k_&)^vL3OaKpVFY0D+D zNYVElvJdy8?wdLf+_NYEn|w;(NYE_VJdH+ZLbK3dvl4K!&I;uaH@a>MIb$^~_rWtp zKscV|n#$q-a{Zfce);>>!QZ=(!r<6{Qe@e`V6lvqaXG}<>6vz0-1G5;VR29_S!NDb zK848cXGb!P53E+!s928ReTT0P8SPVx16$=eJIG2DJOIrY8o8) zS`zXoD+@Cj_A95k@nmFJx4v(8mr!AqPSmE_P^Q9(O5VkB4*|`@?J=#%Ke5LD)^LGD zBx5{pSi6S7YnZq!G^Zygc>equo<4daNSJzBz78~9U}M04m(2j3mqcJ9vyegK+;bB4 z;@&99)zvdZnG>DN?EO%N3d3IC*byd)*@0bNV!>u)zr*(3Yt(dD+8xk%nI=ASBl~v$ z*{HicN?FWg7utxZ5~Yn)YT6vn#_mS>+@`ZRPRYVPJymgK!xXbg%2KhqC!;Z@{ecQ5 zCpXEjf(AiRTGCacWS*ciJ^C&_4_&$H5n`@8j}@J(vb6=Y6D;4e$ZHU}pKK3HU1wI8 zkSQsnL4U*)mpNX3@dD4jc!A0JT+@jPWuBPnvrLcEXlCF=kf_5Q9q-$HhTWQ0jtTZ# z>V|6^_O)uR*!M1bwJ}AM+D1Z+bt|+-ha~7}i`+19J?tUwQ`#u>#iAoNcw*s2No# zbZtT{*a>hNr94KbK^VbfV@m&LGGNOLNs*xtA*&JsL}P=12}YH12Vz0z&Bww&oQyCS z4@C;(wZU{1rY$kQb)WCBE>di1matENZ3=92cn6!0=9#J8uY5Ul@y)Ly&qT6$HR1}0 z>dHpu9gRL7uD;rfsFi?OvYTbTbqPc6Yg=x+%eS?JO;~$H6HQ6vrfh>AOrw4D*8K4+ zQx^hZ9yE8%Y|iOcez)6Vd@{#qK1EE1G_M7sf#kh#hc6C8ZSDaEDexLBKYcwcx$pO$ zM)7x5NdJ%j^Z)s?fBYZ)gMXgq`P>^%R2YqfW1tR(Q;3UFFpng97{SxWI0O>NYNwy=mb?uO+vbg34)@x=l`Z{66kmH>;H-KEq*`V!NRSbbG>sNESH{VK+FhD!U~NmlIh`pUjcgn%EZ1vzS%zpd#O2i^EY8j`Uj!I# z)=E<%nxgBMg~R3%lk0Fu_9_hY$JV6E!ss!qfYW7xQrATylt5EuUSdz5XtI%61Ysa# zV`9NQt6@9q^(LelLi&Wwa}eG6nQEi9vhnmS}d| zAb-!c;@%&-dVCjMR<~bkE=u3+6zgMPdDw=A*Z>g{*=ql9K=r=2q#qx|CsV0=2*))H zADwp0+buT90oQkT7|&-|T%Kcga-w@M-R{KPFX&aA=hjWELmuruhT}iEy8ZRnfA-rR z`S0@acT!0CaX1|Qq%5m{stL?u>5kEwWr;jnc^DhbX+{0`%6r+rPj)M@B{s8Pg~TZSggS zN$pXN=yp&DcfMnk&(gve;;mL}Sd z5?Z2Rfwa+-LsUk?TT~`k;6bZ)+}Cz(${w6IztujoanHePpI2ke=Xs4zXJb5jdV%4% zkD|&IurR%t;Q1fE#QCc$M5CUOxMT;QO6(+>n8`GEux_G*o+k3yA;n>vV!t5^lEj(@ zyFHNbN7(ggp#o|ME|tx(tX(0s54v`Hw~oP+*wqcpOVnH81sU{yGGjo3EK z#j1Y zK68heQ(6~@Y9nLeJ`{%nL0TK1a?0o8A>!c_eZPk$t&n+J-9I$MPr2qHliyo>9a@iMHuQAN+pjk|E6LJEXx_ipiuRLwtyk;sWE#caWg#7mhJThO z**}G4wXU~oynX*(7aI$yU>P1f+l{Q>IHpt5L5Cg^URd0yndDBj!3*t0xWnTvQ9;+W znJS#MnPa!s*2M+Z;?4I>Q82~VGE?pTf_D6poj~_jf^oUx+i<5ICYihd)Q{}o@ zD=!oyk!co@A6g(zP*-jg$QZ)~1nDCZ~?Hsg>k0_g!v*OaK5N07*naRL|59 z^1Tph?OSbTWAw7VON4U403`NFe;QgRr$7&Y*Rig7nC70$c1|#USioBejgNoLniVmc0ARh^l8e7C-auS%I>nj6X0S@!o0{=g8ZxSn6dS-{6 zJHrDt41>v1NPbh14AV{lj!0?uC8-@TIHqC_>-dH3ot;Mzh?L4g9 z24p~lHwFweBp7y6>MD|1IlMXM>Bb$6bN>I{xG$?Hu)C{@K|E$w=F9iuMcn&;-*>(< z^jbYZlkM2SAavlY69sLD-p;J6JRtTQ#57Kc%)U8`P4h*s2hLZtP)z)$$$Ry7*yTAk zl-;Dp`6(kx_pf2f9tPAZ=22m?S3Wa$4xf`1US0*elhZrbA~5`vw8EG*l%S*im$Se z{`CL)e_sE=zxR7TaUAClSDQ7iudfBA@)ime+8nE6rpImJ%PT{7?a31T@SHw*2=V42 zO`Yi^oC1sv&e2YCAEQj-FviBIk+J0FAoQ(-gN03JTa?>9sL}jsvb9DA;y=nbATN^# z%0gNif#=r1-P%hDKDOUO3Hv6Do3akVIUD6^ZVWY%%-nE~{c4TLCe+V!dwqk+-Mz%a zWawr)A2<65tH}(FMos%wX*PL-Xg|Ey@A)%u(uu^Di{+}qEJiYGF5GKJJjJ^=pX1HzH<;W_#c*x)8rpFZYMbBBG);%AEqcw4iYW;d z>wGPEmT4Cm^?Ly{@t)E8@PtL0*F}gcTF#LelSUZSYB(Mqqdz!;-ydO=WEfxG;P&l% z?3Qa2T3*PR?BNSb!jT~WS+xb67fo#6_3A}F)&@Xun@od_+TuYVKulRli|zKKHP1j?+-?aCBT%3TQUGU_YbtB`WX zL^wCz(SV(+m=wD$b>exkHZ_xIS`<;*(m65%kPM@2Q1Wu(DVWM>en`kEnqOtVD%;nQ ziOFC*!pZrWoWU4!ucRZJD;isqb?(vg*cxnDGEKFRiYZN>89S5-SbJq$DWQvnei)*WHgasyW3;2-okV1NNSGc zFC_78I9>C4%MLMqu2VeULkDw^r&RHf3c;u(2oi{q2P zqNI?OrYkw`#D+-336J}``DzJVz84N2ix99DJeFCfkj%n%o`qTt{;#Hg@=`KQ10<Qb`%M}$P#jD+iA!;MZPJp=DKfHPGy-{^+8v@X8IXh2 z0nIaHlOWJ8S{|V?oJce;n@OBZ+1v`<>6UbadcBEWzmKzvbM*TIO~eW0<)24c0?V0u5r7Z*SjAOZxQaSTR`b z!4Q7Ci8@)$Bq5E*Sl`~s*VxUBla_fc?adF9r>aicBy(1n6{e7K8fE^e2qJvnVdYE8 zu#NTaoO(?OB0;^b*Ow!jWJQG9bikQI*HJ2mFZdkAHC91r@x?~GbTU1}j@twn$9%9w z^mDQjW5r-`Ds8$cT6G_zP7TAF1CI$LGycmRvPOoW&4b-~=V}j1cyTSGg)B1r&|G6? zgd~h)^%;exh;BC2iZYQ$pQb_@TXt?zi23aVQS5806MoevxNyYMp~(Fv$vb4gGMTK_ zR-rq8@)&1N9-}iFs9BLLE6YmaA)84~q8=xI#Tpu4T*8ke7G)mg}6@HZ90=t8q6!prR8C7fKH$*-uk!P)C!@R!(G; zY%pA6F|w2t1z3)-&eD&oeJnI!V}3(w%DoxigK%oO{`AVJ!o9< zB|olt{I#5nK74$oh4jDqZ~yzB{_wy0Pk;LQm%scyI`i{T_5xoW7k?G|DmEk*cK6(S z(0n@33*^ZxV4udA%x8czS28+XJy;w(&jeB-H67*w!9O^in7wIk(>5}L<)=oA#7?t8 z0uUK^grOp%N!n)yqA2$Q#Nw@=EZ;O1QD$MXizO7z-7c&{Myp8z66*YZp!Qpb0 zVmiNs%${H^`s}h(r?COq!ZfFN{N%BW4+x#J;B8s(xy)ZLRZuxealaH7mWy!F=GX80 zn)dm+bm~piW!Mmzi7Ep+%?<{S+r~(OCjEE!nBC7%V@~D8BMkdPb-0V!4EKbFA_H6V zP~zdr$&FJoo0LAS5(gc0dkrjh3AV`|SF;J?{Z7K{$8jhIrBC)G$xk9_b@jf)+|wtS zp}^a2IW4EW!dlKuL*<=Jm{9EEIvVY!h(*-i5+UKWB~qNchmACb2Of!3HOC0vImOXc zhHxQws$^MnPpp3%8Lg`<@5-W6S=(BOvrKcbCru%FQ9db)sB0tEI6bAY(JeX|+N}WR zM?E|`9pZSq0`SKM` z&(C#j^4{dV7Fk_4-y<{ey2HBoxjgv2+`w?J76o7ddN z$2d;0E3Jg&m*<%+>j&X}#iG;Rqm`ft$A;^dYXjIRxnfJ|STxcps&!Re?L3g+{B-i! zyT4Lg+OK+irG=D_-}>#}{*!$a{@ym+V7*(z$(Y?&Q?RryTtYOdan|GkC9|r+IYT3P zhW&o4PJ@M%lVqFul7qe`T%&E|gk%aKC%Y zJ6&Bt+||yeGpw>DVkfo?&rF_^GF2e^u~x&V-^b(gbHhfxzelt)u|)K_BpImg_~?#o5ajnXhO)<)PoqlPcb^p>~{#c zk7bc`9YL*R9#b^0TvQn67eQ=kF8ei_Z}4@fGh8>0aP|H@W;gfJ>#c$YoRbR-y8|(W zxlz8qxitwMk$L@i!6~D#63-(hVF{kv9Ql!BU(ZJ!#q4(F2u5u-Qa+&_}n|)1g6INkY4=$rSa; zOxJ>w8NoMwOzHhenAdGIaCCBlM;DK@OJjP?<@K#dCPG(yue@KX#3LMfr_zX_h*t}8 zqe*N4nmjw)fpZMptWcv%*r1I^ub$$?t0(9*J!GpHcAF`->m`=+J1p*R5ZxO$qgJmC zCw1i6obOVkbk8BQ9!9!eY3?5FDe20z6WtKf4UJ0?xnTvQ8!Il(6^xegT5zq4lye~G zXmpd#vpCSrLCB&=t*!RR+%E<`8r_ZxDUHb8dL5aK&>~}&U&lyTwz9P3SMw|hsE~*l zGNNJ86R8R6hA%Pb57F)R#Ym?#h7v2TSjf{L8Lx0x^IZ$@+rt|V$Y8dpl65cn9<;9F zBu1H5t=14aLDFH8?+nR_M7=msp{vs`TlSTKR1GZ_ZCVj}D{S|X2t)i{v9+4y`=bOz zH4;3NV(dLb`r#R;0ic-Z_;oX5R`Vc7)X5K(vfNpk>;0ij=D-L?<?U3qAEr70ZS@B_@+Bnt7>kM!VI%wNvf)Crg+yn zi+w;XI6N8i_)4cyd>w`K@BH2W@F)M{|L~7~;JA2xb$z9Sm{$fn7r~BX-!a^}l0hfx zwIzf|yq=m1n@fG#2%aAwLyyaDLcr;SUc)SkIt*C|lk`Af%8R{2VdH5o4O-p#g;6sKL()vIO9{%jmI0X; zZY2)(+dU>X6Vz&Nu-!yxcYB6V5%@O2#>jq{bi-ol(JWw}Al!yndux479WFF>*oP|c zJd|jEI9V<*U$2a&)34*iuL&BKM{X1=M43!gGL<>?(=dWR1C7F`clX$>w>p@0K(9Ay zFw&zK?ZF7n=m__Nkvep;rwa!YkxvM_a@yRl5hq)?-Vn`h4M%5VJWXGSFm^r~quJ@0 zh`ZGm>ziB5?ryX;kk4q~Ax~TjrJC%_+-lq$$E_F~*bd$?;%y4g>&+GdD+^*sFr_av zUf`5LLk4*edo{UAtru%esytlR3~}~cjCy@sJb#XlKKfXP?s72^2uvFsKp-|*7_S?nXCwcjQeD>vLQyVh9zRd=G+veYnid7!J1 zdZvh4DNA04RJlT#B&{NJX;?+3h}!fg?mk%zY2(>HJ;l+J#~7ZRsG#~Zxu`ePtR-aP zdV!$Ka2H84%qG;ZXagZx{ClD~m^M4I|hDD6o0uvBdX&&9#WXN3O!# zM7vLdUlWaetSB&#f&Nh>M!MXwY%Bj*}Kg=Y+v2?ZY|OO4AJimI@+Dq8d4|DYs1B5D zR%#+|Zm#j!XKnoav!6?sn5LnHSv+a!I7M;iMu?9)ITp@dtD`iUVXrTv0uqSmw@HYl zVDu%4A^B*sWoS2{6v1Js_1APoVu-dOR(r#dh5rA+~D;^RCrlnbeT%plvMK zWHyZ1CW?5u4T5%UT#(x3PiL znXLToZf-S^t`|!|Q=HJJcN2`d103}SXw{oS2gu5GQ?ongYsBZAyD3(S1k?K_Zf|;M z_I(6{KE|T~{7ze^N7wbxAUwN^Wyp|HAYbk?Hu8HicZ@{>tq1`s0*jt zfY$(;jU3%*hxKfR&D{#K$rR}_Mmk$#bTmMVE0@%VpVc+xMARHFGOSmbnLc9+-2HkUD{WHF6iv@HTVv;o5`Uec+Ir+jNv%uji=O!|~&%IDPp7!zYi?J~~3H zKSYPfMXPO+N_IODf=J%s{heCZC|O8S3YD4HPp_~&^GU*^ew!vGM7Ee7G<*A2>kIl& zuc#+qFVz6^+Attaez-sR2eiiXymD(@1Q;OCtRah;ip7BExxqjTrZ4fmW?{6&mmj>o zcD&Yjtt1)R46)$!++x~{gMh@S{a%J2PPR2MlZAwViVXVRLV)A|$h9t^DH z(XH^9fJHlEy4$`aZXlWPxq-ky(>)-ULih`5WK)F242ZW1JnG=nbO~nR`lV zOplL`)D`76wuph@I*hH6coCbHrI92gOm`sspaZ{pO^~ ze{+{!tJ~$o#`cnLskDJfqBuAfQkp1)n~u?_Z9}Cqu#@%jLf>U>QtfOr+ijJHC@Ot? zF`=00)3FB8B6+&z?-Vo)6GNrl>wYh|OYkJ-SaJH>Z3UfE%X)TxilgHrX)(#lNRGB5esT$U22#yNut$Fvn7I3yVEjdM?98O39Ui+~Hy1QVW^t|E zL6-!qMoX-SXrExc++x{WtALWok`ofmnQX*j+Y~dJhg(RdF5zk4L+X22Ff9H3TioB? zA~;t?)7OV7sBXC@MPb;Vn&PA;CN)ir*tyzk(eR>+$4{Q)#dp4qi;q4+ z_w)o_rwflsJ3>B8S`(iD%}Xe;IyyR11I(!`vq>ym^C$#@Hik*6hLNZRkta4pTiNi< zrKe_~Lmci@sJIK}&872#NiI&YN-@ooXews;1vDP_~L&Xp9oJdqW~p z`VV*7(w4fqkGUsjjM~EU(cu}?Y^ibMxtIHlkqeZYs|;NmIVa+jHogYYNGe6Nc$AvW z>Mk@tXiC2*MLB3Ti_gjO2lHFm=!=h0awUwsap&&zx+QgLk~1|FgnJ9QVd3tO|5|0e zN(#y~+|=xA4II4Hi%*kNT)QQdGu-dA;!Csi;G11e;&!4h*!yr^-+lV_E1yR3brn)R zhQq<1)SI;*a3@EW+I*NvgQE<2}ikM(?kdqSwKmGQD=c4=q=kX;olk+nZDtzchC+-jpbdBDAp?`a=H0Lim(FnK`n};mH@aW1_czzLy}ZQj)fHBAGnJ+yZX|kcc~VT>EFQ6%j>+Avqyc>YXY;A_V6aF;l0@)w z?kHUqSMHeaFW(~$7x3P;(HM;|K7WLxqhkczVRAyKd*=7t({`Hh0#C)2*8=5EuHAnM zva_i$(i}R*^qS39lLd6d2I2?-8#B7>&;csh!*RE0H)(uf0vv5Im}{&SDbb)tm&WoFdgiWX*bG9nJ59ltjMZB# zLM&IQEOwO@YEwWG>)|S55sQXYtNieh5PEfNA$1PE)kXSE>4NUqJYCDMr~4Km^YbT9 z@bvi$oIibv8dITy8WOUg-9XKbTGsiWO3VoW{xIkC;Yf_>Hu1pnV6_|UvK4k?+qZis` zCaIa|xgz1$=fp~PHA-)s6e;iT%xF?GS_$Sc!iY@y4E07Lc$~V>Et$xM=~%q^CGjRL zT-?lG=z1#Go<&kie)w>$b{AjD)y>OkwD^DL11PlYL5pN1TckM*ZF3XL7ex&b?$~Ve zo-V>3#Q*r!#zp0KDfgJxs*vYXv(^-GkP|K?WKwu2Px&x>5S<{GLPSR!@?P29hw~euQqXWBnOpNkwG#-8V+^bUUJLATMHiwVt0} z;G>T|!Y3bpj7R4eatPU4n>$WYgiZKj(glehvCPq9bwae3lL7l`B{B%LUM>S&3Cocl z?|9m2@+RQtaKFmW7m2sbiCsEpbR}I?E&$oag!n$EM1zK)R_SqRWb{$=20Ah_Hs|p-Y(1vYolp<3UEK zmbQbGr<|Xi;-i-@@X@Q6Dx!S-390k-;&eE@yHkq1$QzD}aBD~$OzXKgJw~tIK)qQ< z$hbJZ{(PU7E6gVolc)Ob9qzBLv7FDa->uc`O5@^|KL;0BGsE z+vb$%x4OCxB?!<6jIdJQ5d z1vLjTGpb`kbeYEYymUA^XzbWLwAx*qJbi{oAAbvji^noeSS(oZC%UF;^)7179-8fe zVDV(P#BLR0HC^jhHw(~eb}ihQBaF7VykQM9@vzxuxa&bYJS)ZuNMowhJ(=MMz*q>)S9yx4g>GM#55LcX470S zE{iuA$g$mnXEu3+;pI`1E6-M|9`}$1N`0xLbQlxJy&(b1gff?~fAyMhoPvnvlx7s# zUSyeNVjH>llcUchc)IPA zwaA8{r}gSpZ## zcCMr&?C4&;dVv=&pKBWB#dm#mkGF3=*8#I$u5ovHr5z{XSIKLTVLhp1d3T2`T|-7g z)VcTMzDF60#?XAXSYUp0gZuZFDysW%i#&~WFp(S!QqTYZAOJ~3K~&&Hc5jcY+AP&R zir>r5%yMPgFv&jL%hW!V;fAMV8aXlPz)jHW)^U2&$JtR6G!C3hud&*$fyF(rXv6I{ z5VQk1x*{h*V~M~G(QW~qo{xOzNrpl~3sZu`F4ked*f-05rk1tS#l`a%_~dv0CI-)6 z3dWq>&Ct8NRx{OVc5r-hit+eZyY_gKD$ttgC*gW8xGwNXZpq~~MKkm5erMpz)Jj?$ zv+IV{`DHfH8s%+XXk05yMz?SQks+=W$x4nbrp1SA9GXy>NF8HLpO(3z z6*nWxs6?3#lG#HvQ)9?|F}0AllL@ldzr@XahJe|{tu7kfE*i~_ULC#%yhmveGCn@R z==4kku-$xNWIB|waF5TlA}hrp`GwG6Y7Oi)wG`x`BG*)?kB>BUB*Wu;N+Kg0m3F%& zk6ac~TG7pzSITpOD;1$;=CvWjDma;*zL~YK%OtufB`A($LdK4itl+>ks|7<4Hu`B6 zR8FDXKg;f~41~1TfHk;wE0U3dH0M}Zhl*#Km(1D%ibcu3HS43y!3V{y3Vq2&P4Ko;G$Mh09~_&KTdCSr`cKIQuKYdEKo(M-?F>6%wzIe!o?F7sd@gKW z*!&m2H<_iCAHzAY;155c^W&RO|9Y9D|GLN5R!AYowD?DH8h?MeSPYiyg-0k_@A|_}`xGNQuV>juH5By3CYoX##uMy#}_J!7^qGvA2OB8fZ3JihSY) zN_u{prS>8;Fs+KD)d+ev@guMTePh$-nTf<&AS$SslP|x1)8r@;0xxusiDj75fPv6< zZ#2^Pp08GLrmha#p^c7v_38yKIJvc&(rpq}ef^7HD1VWpDEd@VoNp;2%K6OqA;QHB zv+HZzHfnPCF_@P%;^u|R&U>}OZnZ>2ORm&pjVidCX*J!R{6+b5&fE96^KVtG^)pC7 zz1Q^1Lymh~q7#GRP%;w}Q?dUX0er#J9n~7gURYZgGJOg9-z8;t;!|M4eV6Fa)ry!peOzBE;(M4&8bK-JpRD zL$_&%mwBdWu(6}TJR#dSm*gUW*>M&PU9s;hKGL#aIyN57Jrq(I)4QfYP?KPYI9!jo z(sf%?5!dhm$lzsjL)*pp-FsY3?xi1Qlv;0ijFXFVjE+xr-4oj5b*HfTc3Wh+bic>l z)ivI{{#>km64eyuO-*kt5buGeBU};jK9Ye0&m$II?bXd>S;T9}Xh96)8XCHPZUrM!Xx6TKX%_<-Y_K>F_VUlKLI%yOP((zQqHDY<;f$!PU&P#hj!wvmgeH?lx*SR zmmDmhU)wZ_ue*@`_P77-`JessfBNIueENgyn`;#r?m3Q+#$wa8Bv=nbf9Hj%-AS#k z{R#hjD`xNB*l=+fPnd+p?>tbJCOeY_R+fZUSE9EQ3Zlnl_q2oYV5o_d%u%}TFvvHt z&P3WvipuIh1kKcRjh-|Op!i*jRXU?e12Sx8;q zm@lv(d)A1-4{Cx!*k$u#Sa1)NDto*B0s&rH}2K2P4v+b!m|H#$1&jI-m{ zl+lB4cF&u&fxVe{L6}`e7^V~Cj+7tVX)}DFVRyL;!M}SQqP{&)U3;j|7nsdY(@xio zJiyWM2xpI;;PlZDPB;U$a|GKpJU79>2bwvvK0_eiE6U1qLUg(r+>-|Uyp1fWD>HEy z(a@YsLdUu=q_TT+tW1homOMzAR?{NP*65(#?!mA1RM`05Q! z38+8tYd!+kG*Wfn5RiP2={kFp@NWqs`u3IuDTvcnN!NxA3z{nQtyVf!pwO8JUPU2g z&^hH&Ht2j~GJAQ5ou7=c=l(VZX3G$(bcb%xltFr&`I4)ocJj@0gAj2t6cg7P%@+*L z%*sHD=bhSpn+hp+e-7-gwvbY{?3hBZw`4Ew%Gsm^u7NcJr;x;$iJPV@+xZmnG?Ols zWUmn`KAYEiQwd0FTyv9M8#DQ3HpOx_$K~gr>wce!aUYv#JkM2=emp*w>BwMYl0o?1 zl3d8RG`?npCku(2iGE83x5|)SdC9(rO-vT)^!q9foIIz~dws9MLs|P(nsr2m#cDD@ z9lfpveYkLYDpm`TNJIwWRXdeg_oS-XKz<wOdX>227*xwEgf2T*q zZW3Q8reBChc<@OF5zYttPZ&s<-T*Yp;OobNntfodP=#(k5TqP{SIe^Jxqm;Ms$t~U z=1Py+VTHKcVEf!c*+rnZW4R-TN&DeX<2cTbFF$?#wN0b=x(g|cTgi`-IQsr(vmV6i z40BCLWX$IEx_)@F>m1)O+9-IZr>hy?%|4WHA(@Bl?lyAEVfgorn7^EA__16p#0KUk zot&KFTOWTS*$fNm)%#2Q?Em{2-v06p*1M&dzWhKUa4)la61m_MR&0gN(CGYl2xo=v zBsZN?!>gg&>dKUz=H_$*nm9AvP{l+d?_bZC3s0|aGDX=b_mpbW) z>NPP;bu99=FY-4%;}e?i_gGD*2C|ilk`aQ-jVa4j_$jGiQRftoB8@-Fuw5)Mfr}y8 zqMWE34atx;jKPXR6>lB}japzlkEOX~u@40~Q-ag#G%*~GF+MtxO<%HKqXrKhK0hDm zk|9XUERXC}mca2N)Z27`tij7$$f6F?eG5ppSYeNluzhSu4f05>`S3d}HEmo2T)use zP3ogHJVm=ZLZi`x=hl$Y>-2Vt)zvLlS9ge(5!$sLjt6JD$x}Dc>Op?UbbEs@FV@5{ zrXxvih((Em3iMggP-j-?pILH_YpyTP`aAPlY+U~5JPR;XADjzDGj`{a# zZgzWwCTRe#APSme(EHcT(PTsEniYn^$6eW;TV`r**s-pG1T!lc%kB3iPhqi`t0Ck4 z#Ovhd>Qeju+fTSrzN%ni} zmRl_R1=jR$9v$Oo)RXiHFbyBi8BV6PAVXHGNt&}w)zfp=NGQu*QACTK^MP-e zm)8Ie0K`G-S^X&fqvS3gs#6gHROa0l(`;o+h!2YAuauwsnvde^s!>dgYnSI4l3!K` z!gJ%jTrF(*2ftRIQ!$N(@j_oSmOs1652j<)LpHHfYOsCFF*yX891>p$)_vX6D87k8 z`ZvD&`}6=5nd3Kt8i-Ni_SuO zdwZ+mIGxT^M0F8rNuMeLj8iX-+&}*06Lgy`oE#mS<^Ddw`#n2bBgv@IWLo~U{4h>M zg|x)%Q!H$g+ZzCd;k{>euhOR0#SF|+LzgeI`$SD=adM0?0w>p#lVf@Fj*gE-dFMpU zXtYMNsT-YyAm)2=G9$T1OhcOox{?|GRueC8coPw~k?xV7UvCleGEC(#+^V2n+aPqw zMYv~(V+=YS?L0TjwO}sgHd@O&5iSJ3#@Maa3K)oOI=wn^e$a>^+>8CliPX)~GV!5! zUsw5DI#N>mITiEuW3izvo7j?suL+wIGPgS(62H>r8Z~xp1PPEC}2 zIM!VyEm*JR#Al5ka44dNGqLq{UIs7=YN z-rPyY$u@d9UP*u2?HFtCMVAfsG3a(}!%{YSAq$baaP#)eM#Xi1`gQiw$Q+HH){5)7Q%+T7_AGQ_$ee=`X+q~ zmQ5T+#T;C|Xg|LE?CYII@l6y`J{tAdkOyE_tF*SczO&noH5VrA?KqrJ3~EKX6p*Ma2c zK59u|4%H;p9+-MIK{GzP+d1x-KCxb#AZ;4MTUMbZeTx^cenJ{5+yZe2too zriu=CnXBCftMyWzz+^&GwnBKB`p;gct*M^BcRHzZ4=D>GtYi-G!0b0v^kOk7g}r)? zVBJ=`F4D(ry;W3PA|bnhW(y(*8w^6aO5RB_5y<%Ggw#l=D5#8-02QVPxy&6h8FjEw zkj3fRq#YXh&-Qc7uP(7?hXy%xo-dkwpn9 zIt3(IvWo3Qsv>IO;Ixor1fF;Tt$tS;yB$;)4L+wlbW=&!4oqktmk2$mU zSWKp1dtGh?nIo!kC{|fFtWJJqY#RlEyX+@G!{l<1=EK-pQ25(ks zzMayq*Zf>Y#lZDnyV(}UhIXa=OWrGF_(pMj*bV2H=T82$Powyz3hD3v{@72IKYfU(U2llZF2n(u=q-lQOI9NJ|B$vX3UV9-PqP{V+&aF6` zq!t>+fBF}HAxEN@PoCrP#f5H&?|l0^f(SqJYgpXgqv87K(s-Rkgy|`EKOu8&#Y3|u8)49ndhoAk8@g+MJl{3%!EdG2a%SaS%Ym^ z9qwskmYBo~LbiTQ-y{BF*4HoeP zDcRlgHLl)WVS00moReUuYa+5-6Ij4&lWs%&{WfkOaw0^zXD!S=SOk3t)6vMhS+ha* zBdrLI6m8ek=T7dYxV*fS)|bZW1+*H=9xk;`Sjzv=p+lH7+h>w01vazPFMLSL;%y89 z3h3*Av*k8Tqbhwk+`k1A_W-W6tS>ep+1oo2g@!El7$ za42ScX60)nE>X*yoSx}5;grm9{@MM#_zVTApx}l4p@9GnGm^QtZ0uNO=R*evLzeRK zD;Pl!zH9{^Higt`Lajuv8jEq*ahj{4C^oKrgNr%t@QmfKpnE+W)9&?XtU-c#*EhE}Vpx~o%lz(# zS3iIAwNIn?rV1$^fA8=8CqMc}|M0)~ev-t`g@beYTCI&pnoc0{uFOE(rD<#1_m=HKN>BYFEK)o_W@Ne_C*v>at+|4vKK7aB|jNliqUP+jK*S&-jWpWp3 z)f&j<*}69NVaos;cdNrZ(IjPA z%643BOflsJ$D6Xn_^)PDP*a$PDySr2@Pg5BWi9@OmNelvYFO{K2<201ri;aPjqOb= z;*x0Ro?~|fNvSO(OO+@9Ct^auM)tGUYuc|MZbI1YUP}jf zNDtjjh+VoVJvPahB=h!@Pd>rv*_m`^w>Q`Fqov^mS;8jck&+*CXczv*a)5FSlbJLx zLTwxFs**j@#C{a$DEyovtOq+|-V28Vzg~J#2;p^t&BFS8<*w z_O0c%WcE()V?Xos!HBa|jhKmZGt5ex+eo*l!2r)+JjX{bUP;2m1A?yr_f41YE=$fp zW;=c6WG1$mWaGz!(i2kR>2;)?BYzg3&6>zJj!Y1WN!YQnn#@*4C$s*~g-)=TLhU5w zqF@c1dpIvsdW-wbk<9Ai(FH#G*0=Edqn9{(e1YDWDKkB|jT*M|IR>3J+%(2p7Pa|3 zI5V&b;P+QC3qvdw4HhHwjBhT3(79_3?G8R8$`J%et@}M?D}SmDaBt(*91-T&fO3LbuQs@!+~a;?-My%XY&Vtj%lq*5{#K?Ook0(SUROUW zn{Jwvv{xH!XDhU7E%?kQRqK+Mc8J9UU+z2$bfU2L%d_%zbqg1>(j4JKCxiTf5AI>g zJ>;cUcdMF;t+k}gno67Z!>+d2Z{~SLih{y|v?!-e2?ZD5!znYFy+hDQmX+im&ok(N z=bOL*B8IUW9~Qt>z}b$@Wdl(f)uXihGNJ0mxQ1s;x7$-}C4)pxPfk>{=ZhKU%cU{R zC|)E7uP=Y`<{Ozt@l6&|KDL|952I-Rj|n@*m_7%Kp-GA)eET<3( z+!b47x)aa3f8_S66_%bka-ZP=7_N3$&)3#nW+~rZGHu6ar@9DeI$vk@CZV7x2H|yT zB^{b6M5g17iZqxa^Hh6))Eq)QAZ3=2$!LPkJp5dC+}xKsipa>cn&m-yJ zShyv-vGNH~(-ZT$@tPz_g15TQ9i$fsBB3b(4;Yd|vWnoD&@r1F=84{Uw@8Nr?Eq;A zPWKTOJnniJ`NZ85!@{`(ri~kshC2?9)B$pbw2Sl_YQN!FIgt-5hW90}h%)nr?{~3$ zfSaigXUmZ3*!Ym9WCH_!&4nA}dd~1t8xDDJUV(*7g>e!p?KM!HU_BTVS(eWSEJ$QZu4!k8I@}+tm!~)dam>N4sa4iTk;lre>`r>$I9S zsf1chL*rRkRU&pfJxDt{9LRX&cYpVHae8tpYdh|W=d(GQowA zaUpy9>V?vI#Ja835VVb#@@~1n&F7!v>dhNO6Vr_HHF0=tMmy}CIh?C&bWX0(Jz+Y{ z03HLr8BJ)7Qutb{C=hkBtA{;vaxKv%CgDs{GsFDk{gWnUb(ExLkI(Bx1S3ZO(W-Q@ zRH75P2z*5)Wvd4WlL(jBm$;qZYcI;{`QrQn$44W54!_TyiAK{ocB`!#O%_wVuUSz< zt)z)(LvBL4<3cK83u$4}p1baY_n}%uA4)qOf*e`pukvyqYaU)%6pKCgVMkj?V~W2k z1EVb zVa_0@H%V&(PZK5?g{0-5K6!+rM;B=Kx?<7!kxmi#GU?|{&JK;wl}&&w61N+5o^(Fy^@k!oaZk$PC0JL)pTMO2!vvr^ ziik=@yjaW_HMPe3%{wfnbD3!{1C>6gl=Kq%%ROA3@tw448p9t-*f@ z6FHVOXbWtkj-b;YcjaWPZIMt)Z6G;HNbOZYPO3Tsh@ep)JXcnoUV8#>Yo0szhVr z#T*M=hikoW?Ot0tRi*84H_n~5+c45C;xEx&I#RJ*(@d{Nv4=AO2nW(+G4GUNsCf}` zfB4%RmA#a6m>-I-P&n-uxju1IHHr$`5IU1ZUbE|6fj9QrvN<^O2 zTrdtSjj&5y1id8|%auZ_>%D;>*yk@^V0<(daz#{wWHnyX3{F=FJ&_d>T{!u3XTE{f z4g6f`HfhE{(_lEIHd`_@Yt}#m6B@$sefG)V4-B%Qdu}y1lWwi1pnjrSi<1+Plvt!` z2=V^STijpY3T^UuExE?pQVd=g7PE>c4n!`UX}SAASImZ@$ZkE9uj1YK;Li@j+u@Oy zRqpT}m!ST^D$ps5Wp2Uo1MvH>kbbbUt^R>6pst-H%YAL33(X%;sLZ~UnX%T8q(D7T zDZ&S+y6|bvOW2wEh-?~f@ld(Tg0~&__4}Xy@@w(b{Z)@|w2<<# zTrU4;yIKD;!i;2q@~&s{i>UE7HNvr}`>>R5lMdtS5G^_y$Lj9@kbaV=Pq+Gl{{s`%q1VTMy9cbkH3dR$;&2MVsag+}E&ck0ONv&no)eomu4RJ;k(jK)XkGRxI8&rYL4N=9_k!Xb(Er?OixqzH2q)v2R?r_9=o4=yONgZpi|Y zQCK`&d6=3;%jlZvE|j_%66Ovxz#;$uAOJ~3K~&i4P%){YOdsL?GSSAeV8}iUiZ08U zC28=mrliSVEp-^&+~4B;^%d@C_Y{YS;6h0SA>KHR(W&)tG#<(Ii)RsYHQ&B|joJO3 zGB769^I(2kQ?oGxPvl>wWo zF{0L)*90fO71ubMtyuPqwG-nvO|efBg}%e?zzBIWgn&&J^F!;6n!caT3tKcJ`)iVA zW%`MBamsm15D{)9nndme^FWyv(x_{K_VxRQvD$P@n0THC#)7dPsG!pPLWD)`+#J{t zhBa<4uSHU71vSLm9VWN8m``R3s9;0w-QTCSGZY|S;rnd zQgQlgJihTl`s082KmYV^|NH;ePosVOdnV}G6~rjNR98T9T(Q4=mxBER@ zJbNNomrg3{onhwEZjQ`U`F*Aa&XQh_xs>fbjvt-k$%_}Vu~&O%Cw%X)|1YNNbRP6&(uqX9K_r#z5W?HOuhr|c8d5a=Ky%-kLI z(H#!Z9Stxz8ew=e6g>a_?HkZ|gDD#s8f_2tZWB(UiNx~|*&Cejs%I_K3~M&C<_ozYCJFKYyoQf@ zw~qRTq%0n`COkRMjQwK`CdRGNY9eTNjN47k>~86v(^v*(ib?i}iE#(Yrjte7o|9_4 zMaZNfK99hIoAJ6$Z8VxwG8!FQ=eZNVn@sTb-8)RXZ85Z27;o-wgiiRrD`}M=^tG{J z8y_9vd*AyWzWtr=Xaf3+KmVCf9R@*!@k;U_I(ij*Q5lR_CTV8byJaX&UhoPW5zWkC zT1gSXG<)QNYi~LCz8aAn%G)V@cJ5X*lp=6|!eNJK?iF7hg@U0CYO%}JLZ{Jr4|SUN@lld9;rm3HRPj8#2&zZ@jB z0Es|$zp$+RQ};ow%I$=DVBBl!-Ncq@oH-DTb**|yXNofLFIa;uwx+<)`5<*g&6`5NsNt*<(+$7kHK$r`|rZyA| zUQ=j2167fvk!6@uKC+Jt;lMFQ1L~S1V@h2xE8Jqrg=2k7-1 zXtmZ&O(KF5)Rpv5N(B;2&xle%K%9bS_ftgFY|4ndhIYFlg2s!FKgO0tJxy?Tdxvef zmE1>6+{EPbsm}Wzy3GcTA3w%N-}#Q@J#ds6F9+MKA(mCqG2D}1E{3zSEDd^0_SjQG`Od9B9jKz_YK*J15K1A*l$ht zY&}olGSwnA7LL+AM_cUDEn+rVHBa)5C{M5ncUVOmO{APWM!h2pSVZU$wOmTJ#0E}= z5V>KRvXLQOpCJppj_L7AHa2BlEIhodX@|+ljZG9A%2ua^lk*cie*P5CUcJpo+m(%n5i`}8xsee+htKe`i*ha<7W*_aYJVzSPXMiUgJQtq(6r;x$yG`I3A5< z_|N8)!3(gAQ+8d7S`3T?Nd_&_Hs>~UAuA2o**E#Tgfd4^JvHcVtqrG@>(2}~W38r# zjChiw>TMdyG%*~HaDH)y$4{TgLzdGq-{bf1-pi1k1~e?fvI?{iK361Zn%MKKT5Rmh zn3wpAu_3IIuq!BV@$umAKWLC1&Zq^A-Tr;CDX~SlEUE=l*qZtC^ORmCq{Vn!OIw@S zMzS)7Iye;4qQL&DiMy~F=htE5nb|5Urz^tyT4C*_H%?7s_{U#CiTX=Fej|nSPygx9 z{>9(=cfa)$*Kz*PI0t2dV0baI7zsM9)zyvg0#kHayf1HJl%WJRdoD9mU}EX;25vh< zkvYl~G=aF(LT1*q+Oy`$l+eJMbr-?1Hjzhfjt&yLPx7q=7WaaTw4#J&!JEhGo(LUj zrzcN#EbzA*AEW=PYUs^v467Jw8*$WUJf7#p6d7hT|V>Vmjb~43wZ&D_XPZQ;* za<4HJoLSR~6e-Ox7+8KY#qw@}WD}w3HP9ONF}yg%(c?$xoQ&YNYML$yq0Lq+ zP5q3W%ku+tSr8Bje=4NBu*FMrxiw|CcbKygaU8`@?c@x@DJnzD;pBgWvvC{ekH+XS zv^t<^`xHrZhYTxZPAoXB5W?&K>@;MP#%%>pfL#Q~Gey+%ImITZ)eJPn#(A^P#nvR* z$W8Xf_KxstYHnB-O@fky|7Zp1q%Jl|i1~JfeIB9F@8ImwxkzLzBFohpH+Oeph0f+P z6;>ta6bHaQ#MSjBcHvejJNz>?6+ARpGz4Q&YaQ>!4DOM<({9VW{}-RX7KC)B6sEBy(J4Gj-yX3=lAkc2zj zynlzqW=*UVO-39ZAEP@QDN>MWOEFCmXdY5;DQ}bTD(|0XFJ9u~-~KH;die^yPG2O$ zFb?%^*l<$E`~J;4H3MfSr_%5~e)LG|39e%9Z|>0Y8%TJ_h7mSgLBu9pnx_4aPtWl5 z$rIUl&X;q&AAApVUyI!BNsCK(n($+$13Hqqf=`sD){7L&eqk#MhYn(Nt*m|5CnfvtJMdd^8HX|%F(TYF<|w2Q;-qipiO276^{Hc50r9I z@vVmGz#OwlDbC@eOkO7(WnHF8gc59)jRx)RPEXN4JAvD*>Cn4+_g+#Nzgfrlbc~4l(>Re7Mv@cD zKFkZ2oQ1GBagy0tZ*`RX!aXf7V>Tf)gD0JTw_fQ$;2xOHAJnlx#o-Z-Kxx@78TDhZ~V|t@8&dx3{W)VF;LSFN1?5?(zB^NZdM4#O>nz1A3d{kdbDiLX| z9bi}=pv`I64de(!Jt7ZZ76?v-+-LiBlfF}U#qww8RYC&UqgOBR>RTV< z{J($x=R#As$G*O~!Hx|SHP!aIacvQGgshl3)Ghp0D@>9qt24I|T}8olD;qN>FGLuQ zCb#iuD26s+{U$jFoUjSMl94-^Vlkb`yn+Own|GJ8sAN$lRL#b=-Rj|Fc#J3Kk8nIZ zlD*{R>v!0*0j11^%`pjPOsCmKYKm!~GV1p6=;T5vQC!V*{3eF&E^zp&n%?VkdL| zn@m?rl^YY}2ikqvbXLJ}>p6cAj`Zc>NIeJ!pX|T(b{9s(=Vh^ViovBAZ1TJkZI&OP+8mYn_+d#u>`Nc=2w?pK*xXb#sRut|rzqUi zi~dHYQT!$g>HqP6{(Sx){H=fUhuv=fA8_wLd%k$P7u8*zFd<%=5cnol0GWXcydsv$ zT1rWmmDzL;6+~FOJ5Pso5jP~?S}#|^iEFzg!HbM{aw`~qC9T0#h_+$qDuHHij3Z;AFst!EpnTrQdvi)Wu<+8YY^)wY zfq7XzO+n@d4Jq1+Ubn3B*Y>^Mp^c(07266)PCV2sa-vpkAjR;$e$h( zdGZH^Dzm=NX&FXP6iv5u+R7_U6&$DBq*jac!SK&18~q}QrgZeOB&4E<7FnSm^1!Q4 zu-X7rA7&qKtw74%YW{!?4?iq7K;x;bEZrLR}w#&(tXrEc~k+JbJf?*>Z7TLu;@Hi98 zD3dR4o*xM2Ijq%JF4iFTRNS>lIKEseh?kW4+xt7bzkDyxU4B(gmrf%iVVJbL~N?a=_YvxyE;`sL~-;?FmYu~;qe?($L-2`6TX!?)YDo`)}2qd;&FEzsJ% z9(qS(jD{l>cpg-tV-i+&Bz8<^ikHjvnq}CoNots2Ghb99u#}i6g@-?TSL|AnBM5)5nDfdwDdrOGR+z2l60G|*51mE>C*vaw32C-km;^Pf z?k9*hTVsPuU(|-7uQQyPZc3{){e(?7E=?l+R!3tvwT2OP)BdpAL#^2n^tD+t!RHR~ zZU!gaAaG(Op^y+{c3ZY$vNK|b&n}i)(2$mhshS0T4wFT4ADX7;iyc!^F=UcYJ3wpH z0cuUuNFo{b;CGtRM)DADka^i|>QI|ZCs>CYv}@d3p5w(wukh^EDH9U$)9W}iM3^`rcKR*W>2L$1o+l}i%u2lXVm$aQ>Q*E3#c5fIdnd4UY; zw`8Nz1c4s8ggL_q*?tE<+M%AOLYtZ_h9urmuEss*<_hnwZt(i@N~RKCoZ-d!V-?d; ztB;=FRJs%IM~6u(j7&^(d0l($uEO6}=@KC)Hih`tr0I=TTih=0ad&;EW{`!DrYw}} zjK?Q(E+P*h-bUDGp{|j16H5xkdnF4pxnbpz;W&gzs784tkP5*V@FpCsjLUCjn+|cum#tR zeU%|K6rGZ5mFX3(nxUOr_L>0YpN6NTl1XsV;lEjDi z(ei$Ro6FZ&PA-w`r)c_n3_A`Qy*dJ~4kvNdOvH)tXeJcP_lqpflrkDZ*RcaH^^t^3 zM`6R0V#{49t^Tq-wpoZE-iQ$8`AyW@Ee!k-+`2DVjZtruNN}3i?6;_I8fZ6sLAjI_ z^=L*wqk#3=NPw7S>G^0;?BD4~H`?fR&~pcpLrLgPllN9#4C~y!86K)Ii$5nyZ> zJ(#&?-EB68{Nk9RtNXw)dAkKp-NgZB$mlk)ej-C?nK1`gelavd01 z6k<8O!+x`nzK>a=L;?~{f$GIl<-qRgLPaajG(`g$YBVZw>bj;IgsjsXyX9K@_4)M; zcC$I%HsHpItUQO^0fxO1=o{4Z>mn?%LFE2)+urK>q_=KOFycb!%=~^PCoJX;OZt}wUg{crYcz`7X0<~ zwHg_+i|M@2pSe{8PHgg%F6#%PajX-1~CZOu`je%NL#} zT{*A$Hadci_e3yu8!Xl=zrofiDGFoM-#mg3-IJTR3lvkq{HU|CoE21CfK zHcT<-GW z<2PPN|Nejdqo4li|MZjpwN-EbLA}wzhOR_mg!SZJqzdJfrZ$xwPMJwpn#o&QewsU_ zD4%;c?m#r9RCRDwR}St_GZU;^8g<(uYMhg7HYhE_2&)x)6vwy)N$a`a@3D4;) zNmgIbs-xF5+BY<6xSrqR{?AvMLZJ5=nDce#lSD(!V;GCD z!Mzn?lfD730l$%$o0w1ToFh{XBRks{1n~eW0NM5r)V`i*|L#sIlH^Z)$2F7 zyL^p!H^s08)XsVs`$upaj=Xobt2yS=iKclzZ%%(~q*57kM2JJe`2n1a#2ybhn~)YE zt{M_I!(zKcH1mn`qSox9t#02#tzAbusOz=nu|mDCOgUNz=IP}gS^Fp`_IX} zo;UY>)Dmv?J0*y;qOAx^-E9krpr*XmsOh?)@dvLZ z8k*#(O&4-L^yvLiZ|aoqE6p>A>gj#8l!D@CR6cHj6PNj(PFYC*f9~EaR<_<7qcmKP+ zf`9$u{SW`d3YpW1m+DX4-yaC z!gWQbTip*J(WEM6S`;#^ zuE_2i_Ih#(hnJHRYD>YW1WWVz<+-x&0OwYP9`K!1QrGbpT|`DJ4Jk~sTj=9CBJ!)& z{V#Tl=w7iKW!Nx+ydn5T7&S;xK8ze@40yc&Es`wJ@5%Au5qCM9V3}A_Q$M;{7ZQUB z-04aU*$$@T`GT+&em;y7ccp7_2Q*8 z`Bcm}k%u7t9E_!MMi#RhxjKI-v)PS6%hNwRl;QD!5na%HR%OmamptDRiHM@EG++{E zYVn>|g{*F_#4K`&yF(ctpNgZ`@jz`Ljbk%}UFl@8kQJip)OLle;e0t4_p)N#-RrAM zGLhpfl>rDsm{MmqoYHVm-h1#s&K^FH;dn?k=jF|n+)S?do@2KS$dEft%7Lu1*1^eX}B zp#B;x@5XxxM5^begAg3HqPS&%8mDO>XkK7;Q6SeA&8dlG4V^6IFawFQjFPYC&tFJh zRMPDayx*$T__HAb5%8WQdeAfdC*kkG`mZ*XY?nF0oTNJ#%Hd!rXJ_~2==78f7wSSv@Sg zE2cVRXoJe|0kbQPE|{Qr9k;W#z1nsU_eY#c_x_#x#LxYi5{&jAZ$u&e*Z=C@_~5_) zwZHoENeL@1PeO@05ry5x_yAxsYenDO5UUo& zEt5ryI)M5l9F&^M(PL3cr!Y&INnfzN{zqBjQ6v}{s~{F2C|VQgmXKi zks2!G3z_5#Ccn_17uI-iZNVX9A}=6zD!8XHvxiyyMUA@x`!7g=aERzfS2}4b8^|

wD&k;^-UjD@Z03ZNKL_t(VU`PUr?hF&Mj6n`DjmlaIK$y#1mXkSMm%4FB zWH^!nv2Jq@YWpWg^QH8# zZ>^NPl+{jbWeM*^NhwLuNQ4|s9KM^HB6=_&@EUB_8vKokIqAf*UTtLtNcY2Ma)qRg ziyJBCxx^sZ0KQt4Qr@iO`r?L6=&S1saY-Ymk5AW#NVS0t^cP%%#IVb2D*yrasjI=_c4sgCwTON5P6xqv>Lg z;3bi_M&HvC(qc~3c`Ir^e4Lk2qk0$eAp?l#A}<--5sH-Mt9w!XKy)44hn)1W3-4(l zep4lq=T7p)R?4mJ-k>7O634s%nia*GTUs{aWof?Qg{v5@(;6_N8qbq3Xw>9k!RdQV z<9=wLVPcO!{HJd}mBHCi#@L&~oyf#&8o>-+%~w)_-CH3MF_NfqV%N3QNhxmFNK`@x z-LMhb%yZdHb1CL)speZL=NmG2T^vc>ZzLUdxuW2j*(amG;toFo)(F|CPn{?lq*Yn4 zD8Z^xHcpc5QYOVpF7v4jCS%D)J&C&+WoPiT9v{_wO(;iv7OQ()rh!&Iii=tjeoX-VfZNsZcxF=vvtWDUJ}>%>S6U)F6St7egoQ`xK!%tY=7n4ruO(m1ll0{y>KBr;AdYemGZJA>lZ1A&T$0ra z%SS|ap|}9DrIQm1ccSiBI7q3BtJS8G8H|vGh|#d@)~L<2b0lrppkFjf{9q#~JI%FP z6^885ec&t-w`Uxu@oO*~K*XF8fZ5n@_7W$fZXzd#J>3P1llg2RlV~Q(*@le~R=fRf z!fO`SIZQS%d1A6$7YL&$$>c8MgnCg-rxm71=kG!98;t^A)tbNRmS{k+iWG}NR_RiDNl&UyB_;0Z75Eng_0ct& zu|=W53dRwo=@b>^NFWdaLbu)}EzY_m0Uh5vlWaVYwX5X(=2~7~yq4+ohR7AJje5Hj zvz$n8F_PiYfgGG2GkgGYAY2#XKay^TXBN!)5nj<540xUa@tH0cay6OA`PG$NUR~4V z1d}kcOpV^JEz;J;sO_)?=ToZi#M7oj6~poIvAp~4yL3SVR|Edu6085UnM|bN^;r=* zZwfshBhNJ<`5jyea5WAO3Ay9vMT{fXQbA8Da(g)W=tLSGds0PzCGP*apPKrS@~Mv> zTs(X6GbI@9Ki-%^ipPil&mX*ZcJKc8JCC2p!Re_Cy9d%gvLf?bn#o*lHVq3K_AKZW zSq$+8LU-Ej$?@qiNgvpQ;LW|BOys7TC@kW3lHWHk=aEcc!v(^AmO14?GkpC z-ju<52AlzLB1<{BmNdt1Bri9d6cIoT(*<;_70jz6UEl*c0t*jQC4Num4|Hve{`59j z@F8tfoQ>y|dh4D~j@WPqIzfd+>ZSRlqrG24m~8BpwD ztd0qh1sD^1q$UqAe!wA*-veR-3mH2`q4~o=jvt)KgC~#V=;Vk~OP()jX76B!h$5P1 zv`?%7Q`2rQk}f9jq$3FZOj1X^-|4}T9F7iUQC4zkXHu^#SxYI>T}afO5Kg_BO~{a( zUcQpa>t`~5{Zh*5M7p--p7N-d$}p}uRjjsiS+C}_m^^!YDvuvMmeKfFHrq-j*HgJ# zp?`i3jR8=^HViu)sVG5v9gpz5uup?_ z6fZbXu=RE+HsZbJCJ$NSrNq)1VIzYCSJ(mawfCWsU#+0AUJFpuP!g;`3KMB z_4^-6eX|rOqmMdcNwb)QBNUWo-NN_Eefd?rPRwx8WhyL zD@V@C=x{`-5Q3l(FESfTSjb;<3 z(NMJfUNXS*y24V{cT$y{IH6;P{3fE;Z^`%Y=;)A|R@~=|`b85+;*?5S82B$5mBs`X zoU_NrTv@>H79O{HjyjKusJ&~uKD$#$KcXAmFQBHSM(Lk?EWfDz!=E|9X#ep>71F=+ zzx|It_{LxSYv0c6vV#^_O5y{v0sQDYTLO9uJ?{Von=5_;bb#DOWf*_LhZ#3XbQ3 zJq~ULFa#lm0Z{>vAiDDcrui^8@JTkDOhG8Z?i2eYDub-L3)T8MzEp(!$AwxIg{b{+w z>ckOu#|MLXo>vp&Qcz1Sjich2lD&vhmoIIU~!;#Y7}uNW87diUjEjPD~hq z0R3)POEIpbVF5(?@NS(<7V>&ImzUFtTrO6!Mw}U}C!#K=%_!+{(kUt{%Su_uD>M@D zRwew{$Shw-^ZF&5jMJkNF^%Ca4TTX#5GdT7@ERZIY zcde@F!cy~KrU&g@Ed*Iet;(_R-yj%G0lCfR3LDzsuoXUbmh!Z+bc#ywe=Zc#9X}wX zxQ8i(qXy=)`h3?8xcCfcv(ygMl3MQkjl>+?k?~ z_7Sny9a7$eWR}TtC0P<{=B$*IF$sbfpapg?o={|fS)FCf0vlu9fRawh8w^uYY4Sqm z7ZZ8ie<9n|Mv`tK>msMF_Uimn@`@H+}MFauMC(J2K(R} zT%2DJ+CIO$A`H$*zuF@Q9%?nt>=n|T23TZY>!}{VKtSIAKvB@c!vpd^3c8?KIXXUM zlV5s|U=(=VPlMrzUjv3NSoc`Uvr=`mIyhi+mL%#l6f$#n=jz^M>UJK0pJ)Z>8Rxec zy5waWML%#~W2h@#w6IZ&l~lzp^Ttr`dc>X6qQY)96?ZqEsg9rOdz_ zEjO~L3(6M&g;53q<9cs5*i=eakM<&e7~w@Wp_(68w3lE1NSlEea5(MqU zvP?$3J~fljmxA&+%mP!rJ|4In-oy!g6sC4zt)9WpL*m?WS}#YDA+8_~^;6zesiW@2rzinp;R1v!O@ zG?2c4l;tq(_IV)U>tujsu_v4toQ7bQf6&iJegM1l$>-md(a9liJixl}hBfY(QB||a zM7H@#7Ne24!BS$kp;><$6BTYS{5*}N#&FFL^QtwsE?|qc-AHvMbnn4|dY;ZZ!#?dW8Lk^U2e$- z!sp(W#G4jG(+M}E$LOwgw=ZQO&0-m3k@UdU?xqs;Ix_5Ja{u^{UxmBgB$G7mk(G<& zrS7c5eWPPS&RX&uUbJfIsXT?KeHKk=If=#*P@m%*+ML{h&XTgEKfi9kUp}IDaMS54#K*zn)Fl zEW?lk1rxD&K%?lJZI!Tvl?YK`@r5iZpkqL;46oeyC=JDXP zfTej{uq%v8<3o~t@&ak!!Y&Jw9uBDWCic!rmR}b|kWeZn(N#|97dsrr1Yv4~AiXH~ z@7cK>9TH}N8<0AHXx9s$QB1TTIAGb2sg%1|_`$G{?(zzmLec040Dx*LEK0v5J-hwmW5m_W)h?L zB3lx0*|0C;ERh_k4zL_VB2BgB{xylg5Hutf1-d`>Y1>9k1YqSSX-}%e$-J~Ozn;so zF6DB)l1nfp!JM{2+quS;l-xjh0mM2^D-v+<{&61(q=DuWeMupu2r+YDXV0eGKhpsz zO{Lq-xL#;TUTgTl1H`BEptv`Yp)--axseKb;Mf6h+^X6H-pGbj~Q4pIgbY^>MH z5>a)v^qiGW63d{25PZWwb5$WRq*a4~fYTs8B}f04aOCYGARqp}*vnT`M{#XOjetPtmjJ> z?8DJ9wW-i*V^0nOAN_YR_9LtUOmQ@~SfQ-fM1Iu5RCw*+8k{9l22~?}6{NE)>k*mK zko}qsXh7BWAUhaA3c<( zpZlC-Syz7eqaQNO3C|hNWlIagCD9nD5zxrv8>maCqZWFnA>Av7Kc$d<^5FTgkM}N~ zz5JOu7=6;?jVq*h{H@>mpT75B|I2^<+Z*S;A=`p(D1=CRnwBy~)Dd)5=yW5I`PUr!t@*TgbQ_dZPmDE^#me%EN8}-v_^kew2m`w&wRY9`?b5 zzwS}YafLG6cr&HO79BC1UO<9^^&x)6z8J77audPk9YAXe$~va3&6b4)2UA^c2u%X+ zji7Ic9f?NE?TYe{0>RWUK#IUlT#K;*E=hPE^@$+Ah zx8Hg~l2N`|NS-ek(*|-5%qsvBqfj8Oudchy*95}AW2yE3^N-eCVYiRE^*guQf!<<5 z>c!-BrXErQ(M?ma9kbfw+r? zVO-X-%xlRJUsoW_rsNt#O$)u{r*~nZ&7%t(21SY@({K_3#BEnjq9P&t9T}oPZ(tyg zqPAL9Qo+%ve<1y&!vfjK3W;Og-CD3=C1OernA(7w6Mo-VqQo&_2Sl66WF{ZJ|BQhS z_ny4Pa|1;U4r}Y{iPW=+kqEW8OIS!CE6 z_)0fY0m0J1R~m=lwV;!iB=YFtV|nuUEl#Y4k%DWQ+G{X;v_nCHobO}Y_S)b0D&@SK z4?fKJ*}*99K<|x)e6y8onaeOv*z_aH4k)SxE8Nl;yXIy84w(nLb56CKK#! zS0f+?U78O-bJr_7QpC#4t-S<>aZQbyzlZ$1nArY+zv2PdEbrF02trLr;z^j3R=HgYd%u>oY_;n+F{(wV3l|R3{4WkrG{iCN;okfHx=m> zaD|!Kslc2JH!sLSlj)5(c*i0t34UxNr(*2ek}dYhnzn*OoPKXWLy4s7NR${_V?sj%MRq?5S)pVpxK2R}+ElWQjBLFQS&}YUw^7oixdM=iG7z#V<*zd1 z7BVBk>Iu_&a6{uD!Gwv|1wj-rR<(A1XIQP-iVb8>3${bzcZjdfFeTDgE z*Ow${6x1az_&S1YgvN-F8A;5JJAD@TSf39vU0LoSGl1ta@0zwRpBB1jeNq@cN3k4T2)&N{*kvG{>mSA1>INSe5n73@)Tb})XcI@p`=qP_PS zco+88cuo!yIh=zBJ3_Kk#e!{d!Dq<`xl|NYs2{0sladr=&J7sZ99 z=S?9!SdBp(0waJ%&CSzT4bf3><8De95bQ&(k7%?0pa6RkkZZwdR*Nj_6()gL6?wS8 z0ZU>Z5D}`?d{AamqKktFyV&qxM1g^Y7fiVEp3{~NEY!`Kq=66zhv!H3Afzrhz^_3x znGr(6{sU}TT=6McvJne1$Vc4mrW!7->GQ6Q+yu^uf=V+67(4(r22=$NCT#WKdX%Jc zG#ts<(XsTho@`e+1Gf#Czoo2JrO0(G6-4%!*3(E1PLCuSb)`g6@1~5eTW(fj@zMz$XQ;;Dc}sMFzuSvtHIk!)(mj~u@uTNLsUN~AiH^~Ta4A4v}hA>Oi0 zb-inbhtqG_sm{_G)3(IcYmad_;97xsIU2EUUvnz)UgO%pAqayFFt|Z31EZNf$|%rT z%%*EN8Zv}t2}b8^D$nrm0sm(iHIq1q*dyW3F}V<-s92B**`bNDW;gAbU<~fa@NEwu z(cPxmgLlJ>YTMuK9y{i)*+b#flqB|h*v6oc8i{&ciF!RkxUgQVOQ1k2GKzD={?(0~ zSR*M53(c$vW#XF55+j2i>?t!@brV^p5tD$xB-d-YJ@yH-8VzyN!fI5~LneK!R+$G! zN8}%%c?3rx+B#WA9kEfNL_)~Ol9bXn>0Qy93 z@kXsClQfp$7#Y4plJZPh5Ee!Q6$_Z{%I0@qdzWh5UvEl&4pNnX5E<@!4S!xH5McsF zOk^7K{K(5K&m0i<5P%MEZ1`K#WWP~gTdEVR+fQP?^*)N+E~KHH+P%+Fa|Pujl)059 zO#SC`uD%W@8l(Zc#?c2OUQdN*@#A&C^9k@S*vV~!=GR{B_2%|Q;r4m#7t=eN)H_Kv zdg(@c&$|8fy^Cir-Z)4%Jl@zsipPKYJO9V`{)2zvtKSx5zJXm)r^(2w1SQ`<^AIEVe__G zlhTe(5_`nF*s|cMi;Kdqjo%rPMAPVgBaT8cf`*TSdYskw6_X5ZG#bRmDLZ>idVsWgfML-j0B(gzH>~V%^P)S= zVu`o#22CX!cI5=wi?)^}bfRg*bd*)GmaZMJxp?vVr96B81KH#o`u4u_Sa*In2q61F z(JNp!!<|{I&kF|%oM22OLxhLZEJHN!lZg(s#14cOL)l0dLVJ*I>WIVzxB%ZnH`{F7V&4dLn-1klfQUgL zy1u?BIR+lq5LFEzoemGBVh$?N1q^?p+xEOtfq1>CsFGa2LoN{-te=7hHSL zI%8VWl--+b8tRITvWRgr0P%=>k|sR{ty7{^HDb4glt4wcPO_*cowzH5QBBLpU6^yk zbUU!Nu@lBe2ANA~X*mdj5#ItEbMH*IGG49ftsQ(^V>$<=axfmtqx%nJe0aor4X8|~ zL6aTJX0)O|F7|%V2hUfzT-;1J#X`pP@a!G~DByUMuGV5UC5d^Bf2vKS&^+$>rYs~v ze(CkKoJ^lG^Crgm}M-3O-TaLFzd_1)B9`+Ay0!-RTs9KkO6t+F796x z(_z}-)(H@ViwX44kH0+#>%pSsP zOl!o!MwY0DYX?WzejnKG?qdZbtiI-M5}hbgPi= z5^79aKzE|VfKKc_-|YU`w=bSOe@#?(p6teOsdMV z%}7YGnA|d*NWs=42_zDB`Ai7G;hsi3z?EI;|2q z0Ug@_03ZNKL_t&+%tnRv8=8<|uOk_lxr+tKKiK(T0yA8H|tR;ON*-pAj=|5yuABuB)^` zq0JopYrQE3_uKS1PFVoe|JG_yb+O?`?%tMNJNp=*OY%O5woGPHaRQINXcVMf1RNpcijW`gF_1%bTm?M`na zW-b^s?CGc*@59Q8lo5Tg#APN)nMqn@5(5dTQ*jPxOQe#b+DZX44eXsesTROQ?Tw%Z z#f}gN1nue|tFo!s#FANFm1u0xXeRu8Z`8?q8`gipUz<~D;#Vf3I&#=49zHshw;w+x z?20h@>D5H0%N1=J;bMj9Uv4IBL5>d(NxDlrJxRNznjC-`4}=E|w6TP?QBYT4U0+>F z{G%Vqyx5W$2WS)A2;2vN^TC;bzWVgxi5w0O*d#-%4Wd#^W0IJSgz>IYfNmcg9?Ls# zKb7N$_xL^VGr^n%E@%ksKz6P8RS}4VwcQzJ1U^|i7~GlL+A_5JzuPSBFnxQcw?GVn z9Br}8Te6y=fm}xp4i8D11j`)ka;!!|q*;*XwL+{thOXOzJ0J7-n7{d0(I`LfjfQl? zPRfi4ajbix^GD^yuE9MkwQ+kw9V+m47B&rL{oEFj~ zK)N6lfqjUBzovmG1=aAe1!;nY@pZ#JWU|$N!;2$UTS5{YGNtARb{r-b_}M~+L#HE5 ze{@CC7&x+pjZR`pzf^*S^JEW9Zy87pSt1)-iCe-QsZxmuRxGi;RVYk`FqgurAUrHL z3+`7y_`$vuT2{cg(00x-1tQ}Tg{vrJg`}CXl-g<&(0J4IiZl$%=ZEKmzlU}XM3Zfy zzMt6hvS85Bi53LZpF-M!W&^M*?C?^jL=Mc8APAwzR<7obFO6!w0h5Gg?r2C17`~Rv zZ3Uw|ZQpn(3kNC+1_)=6t(dIC&#RM;6iLQnx`v-^Z1}vOB~3d6N%~_+`vbUqKu$3%4m$~dD`c+i^IM0g_Mp~e*F+~Aj3!K+8fWprCu*lGyezoAIQn^F<(#Y z*{?6JxmVkzC5e)D+{XdC`Uq~Qc27dlMr|=>&`GlqDHkGT&$0R79&_7~uEXn_QaTZ# zfkGg1taNJ$Y*b4v#F%mSYJ?mhAcqd*k^S5WDzux zV2WN{Udt?*v(Svk2Xgr6n6YRGN=TxN?nLWt#piXHW^8^C*8S@0iguCX!H`UHa1Q_j zTT_yVLqh^K))Dus8(TB_a8YjM{Z}tYIq)B6bR8VwZn+kH!o!8~Ir32)4PMT>< zs1oi$*iRW0P*~jA%ul0<{@d8^9?>~By4!-A&*_7E4Ex2!f;}3FN4Cib-8Hr9Lvh&R zFdS@49#?%#SLJgR>m{cGhN0Du~PwzxH| z?u6sA;1qAGh=mal7P@4cMBJ4y86(TcT!!DSz$gGl?sX-L&4y4B1l@2*!J!(d)RVH3 zR$GZZGA-yJzp&g5VRDB46BdF*-eYYl@cyE>9v&U@wb$_HHNAFG z2nX@dA9SkKLqmtW(wOk2`XejJOi=}}OtEL;1O!B*sQA8e59`xX!amc-7;6Y~D55y* za7{)XCdj<~^r?L5OJCw-dj9%ce)tDJqS-srNgCUDMU3-@V{;4YlYQt+_Q*#8?rTZn zhD_V#tdbj3NR&6yi*Qdt4T2cCv5bbtOg&1raQlM$~!!1Cf9svvv8`GLTRQy4cK9nug1@crfarA+e$ zCq0_|vuQAFI0)xPva2@E?B2UJfIC2?`*fY~3483L{r9|m?>*6y=JV=Fo+Lm;Qg5T$ z_=&jUG#a8QcV8tpY-@t6jD6? z+u#4~zy0t3*oZ76hQiO$>q@p&)9jE8j~hOSn*l{FZ>EGlF+tJd4(mGV$I>P2!y;848Y1n8+dIN4Wx2oHViS6@9=l zg9!XS3tuZvwJ7qfi?pbr*y0+ag(3F8 z2-%uV5@2r-SKvlO0vQfp9AeJ;pI@O~9+r_d88O-8135XnC+|G{9QTHU!ARDdf^vq^ zXZYfMs2e4Bv5@)$^w!aJXAo#fBp#c?6jWLxi*+LxZY|rTk$!AhOb>=#>5aM~@rY&@ zDh1Mbu*7!6nJy3CB*o8ONmfPNLqd)cBfvTxO4@B0wr(8Af~90>&1Mgln=TXsFhLv3 z1HG))eiettG9mH<3C8PJuVm00QHzQD;iS{!HG6(>DalpJ0*5991Tm~DY*Lb_*TCwr ztFk)jz@oF1s>o%#ZCHqbaKtp~$S489^+4l&@)9a3ms6Q<=5jH+kb{#$86AzJauwfO z)fg+=7O?Q~=?U4d`14m6=Q4%#socuOdcW-;*W0=B}J+|6L4k@?J6B z|5_op**EB&OwYMaCtSB1nm6Qxb8AHfT4~G2ptJ6y#roFcu1x37Wco4B|9j^jJpbDt z_od#%$ET){;!%iwFS6zLn{soQ7$^y$56v`88aF{FV=-m?SFF2A{#_hMXjo;7Wdjd}3bcw07RF6>X?{H{LCQ}wnFf@k`9!UTASP2!I z4JYK<>TVU@p#b?HYL5Xi$40esh(wDub%W*#fEdw5d$JN56vRpOFgqDGwJ*UnU$Y5FcnzivteURR_SyzIXF7t^Tpv3c~}>d`q9a$JpJ6~&t+5*LN2V(n>WHtyftM(u zi>AN0&cPDz^%*^e#u0m1Wv%a#iS}mF{TaaeKM9{3e0h~45X%}hZBt3UuB2xg8Ky>T z(vfkKNWrjlC(CuggBM?MRD&>vEKMLUnREtY24=%fa=opkf&8p%q^wn|4Fsv8z}o7PFSi$+gUpE`F^_G$eN8j_m*DC?T*}& z+9hGg^MO)&VUk;JWK=AlX(8ny4AvzQCSo6n{{b8Tor5Y%d{2t;bC+zxi6fzhKh)!0RN}4d;VW((yvJ5aSb)nYyb(nUeoJz?Q z?XYMw6BW8c1P{ll3bY~LC@UH-xO?|G2?OSZz6(1IXhgvVgys^32W6=+8dW7Mq#_j( zTrk05GHYrEa>w3l6Nfb>PwYEgqR$gIf4Ar>a}oi`2V*IxGp6>h0UvG)?ypeD0oNvg zyOAA>1Q9SX8MYpC>P1^qYp@I_g2pt=VvTrc8*XcPyt=?z&;$_3FieJ@37W!4OfQwB z>_`fIv1w==5r{oTBT{$`K*+zC&uF^_LvVbbewKMjh3>v7R{~OzYPKcc!$fW7Kx{+G z4T|Vv`-IX9G+~fPz`z2GU9cM;JbWMzA3l`v;Q=KzVD^gBzykOHN8W-Gu-@^}v5ZFt za&>hnlbah^El}iP2UmL+C8s%`Ru4RCol!XXytK(e69niI*BIEHYZOj21YQ>LPA{q;j1u;=wTwGAs*+9b#hB~2pCC;gv6}va)-x|6$#cWv61;(A2 zrtV+*`7g=8_^1Cg5vv!l*~=H=t{gLY@o(UD9do6WP#a6nUT`Kx177o}d3c{Lt}fYh z(UfJq;!1_hEq3M}O0|9pHz7?Wa45`Pek^z8dppQGwvV^iKE9C`?=!9mQ}HeUA)u>1 zXO!OCK;Edg-+gb{OUDxL@hcxIa{0p^0rvH=eQlV?9z1Q#d#~Sr_C~~`{ZSvEszQp# z-~G-1^Vi?|>RS+< z3YfS85yxtXvx`$j0U&k2*32r}=c*x1^;W`extcVb)*GukUc}%5eod2%g%l{m@zDvr zOaVo{?!S`PuU>NsTZ5=lbGhs#E0KqEeVmoGt#p6}ARwm{g-oFDg%`6=Dq`q67~^1; zGkR-Je&B3-)`p_$Jl?irefkVaDm&F5A$2Mh>oANzkv!?h9Au)c8iZWk%w#s35&`I> zs!v3^2?`LhS$o5wlqQmG<7A$r@U3a!09(dxcf^LpM2Wf`RcZ~{C>>5ENly98fol*) zDv?36$Lk>i5oj&f2uT;Uuv_K}PM}&O^=oR=tkW1!2SBkfz{ibRvf-`BxJF3#qbCn( zRB&{9M5G29XEot)vb>~5!J3D zN)YU8{n^y#xDCqFod>gT@q66Ig_lQJxBI+yzr9CNlQt$Yl76o*10QsO>tw?flxnGA zKCxJ?G;7&JGM~@dzY9fIA4W5v!``PwijCZr<^iB%$J|5V z1Cy5av4)eTQ$tKn&?q-`q!&3v;Su(vC=O+ZA>MGK$@)D%ZCCsrIH=VDM*WEK#jpz| z%uL(0((nB$ejnJ85#lA(TT5!_kjwopU|qasVDn;HkG0-Q9Vz_89U;$vm=X)2ot#c4 zme5=&o2HbC`EZIxq;*WqDgM4NWo~RVbrn7{DiAss*qr0Nr%%# zzS_$5)l?d{;%<&kK8h>rbD{Bjq}ME*oUoH#EacVsIbrC_iz|A_0u{mY!|oZM*Z8Ct z*B-RqoWYZqb_b-&bRr`=!jn;Qh;ce8Wn@H0Je${1Ec2$3*UMbeHA3u{GM~<6waoe2 z!=N7TBg{gMRvUS25;+4&47>(}Jv1N!ZFz0>NK41HoAKH}V}+)u66_&Wre#}*+QXGJ zY}aWorUpFL_e&~SZkIlbxZw2?rQW2%swrV(z3oI`>0-SAxVcj90N8MtM8`*CIXOL+ zvfRqEXYbRi_QlH=GF#4AEQg%|ITeo{-Is??9ufMb796NgUCDet#xh;6vG zQQ)6GeOEsJg)flbadCMmAAa~Db9}Kk28j#7^~>d&=LGKSEu;PXZd7ECTWi{7KzQu3 zad&_6)8|zE^C+ankl^7!Ec)gjPnGzSeS9hl>3{bd-<|#SuYL8s+E(9{syK|c8%hFb z%VsM{8_n*leX@vfe`&S_ZgQwIjg!p7PVCMg*a^R8kabTN|_`52d{U%C#6Ky`#Q-s+Ja>27bfebmYdZ| zHa^*?hFv1vfGqE`+M_&CSxc4Xl0jn%H=-;BK%)gL)~Ops6O$eihX6A3eQpZb)LVYw zeeux9Zr^6LsbUH%izr?qT@zRkhInn&^gxc36R7Dap8RHf9-Z-0D_pnuHz443vc9rw zk#^*qFQU0D@|^b=t_8rjGZp7*p(|0F~;%i;+)g?)zyW( zc==MT_wto;CXC9pkXu~v`Ffd%(`n9n4_mCKjt&py-KXzz{|*Tj(V%?INs>kno(!}z zU{KTs_aAH;hy9^^;d5V*KmUt=p5(cI`n&(HOs8|1FIGgP@Up;>3G8a1INYV;Or-QE zK)I$xFd%`tWlI#wtdaITa$XPoakbRknPi>F%!$1B>L(w(@luzMdwePjDIWjBcYost zU;j&A{idt7zvkA4lTEiqx_u@cZ)WXi+ZT3}psL1vbKwtJm%58W5dp}vYoQ9SC*myJb zkYuBJ+{i#VKlE51No{U!$q}WF-7E>^MZHBNnIU& zke~ujTjQZTLR1M&aa%bBY2Ch%;2Ob%92F(WSK@;UP!KoyR#y3z5Gwb|B#@{lFB!dQ zNmvXqY)5fQZDU4~mP#OSCZW?`uC|^?qPsaXB9_|7ttPxgDNzcH=8ZpSBBRZp9VNF-ot%D7IRx(Zr=|BO%w>EIn`W$d z;*cz)O&uC1yuS&EYm{D<%=pFh2k0DjnS9^VjN#m)QD5#qIFonZeMcTVexU0eTywGE zy^Dk=K)$E(X!Eb!$ul}Wf?H4NBd}C8?7^?=FdZ(Mx zrp)*oTCYi?>_#SlG)zrVzu1U2diPH6$-{dO1zkJcxrBMFx;>$Gfl4=FPKt#Y2TW(CG#ftH#hXY?ZvS=8cvzZ6YQt2!GeKalDa6 z{Q-^VQ)gs_2@`_pZNUI($WShBu6Wafj6`Axaj!^k5_a2G^HMz}Kk_<3vPm1Y|6=Gg zC(MdB3akhdA7i!3S4u*F_20Ij#0C3BOc=&TQqe3!l;!G}pBTK3qjm}h2`i4(RKszi zEtw2sQ82A(517X1#Nt4!3YCjQXcCN-RlSu}Q+j79Z|^ATB!C73KL@7hDA66XPS~k$ ze#8g0M{Ur%^Da~foz`<&n-0FG`G$oQ-9IL^V9L=2d5G^b!U(p~D=Hqc_i!B@AF*fw zEg%VtUt>*2C@`A=Gbhvz#(b`Tf>~rE-Q!#DTW9@q1wn=^XrBNA*bQ=*+BbtFGJ(14 zp?AKQHt0}|pCgq>WZN{DI|L*fT0g5XYfitfz7{&MsrdkknIl?|wvr*EnWJ7}LEmBo zbmRIkMke`6)<6XkwI+mH&dKo!n~o&yvJ~d)t>n|0%+@QJuNE{W0J|Ga1Pl~leVN4> zjq>BYNk`2mVhs&Q#IxkZ$E*cJD&R1d&mC|uByyZcQMf8KD8c7ozqyzL@?3M(1M_zH zK9hV#EpW_WcNAztX1C?FHfKoxoQ)Rt)5C)?M?=89!xH<`0arK9M(c%4gb92q>aSmb`n&(CfVSDZGJpx&Ys|0xDHjP|gUCAH(-tQBcdiml7 zV<0tQM->guCksU;_DDoXox1b&TPr`2J0s~Wxy^1Xx-Yr9^Y8SB{`QL>{rEe7JXPUm z^Y~O3Qat|tKlq2={44*;FaENK`$`n6OH8Mea4MzqkkPJ~;me73{4}61w$ygwFhhYl zJw&G93EhcsVB^=a4=>TJmq7WVD7O+C2vIjfa3m3;b|AUcYCxis+Zj2u#_ZnU;UkY$ zu@EfeL_gE0^A+8voQ5|bZLrP)PDLZ1y@OJMQMvN8~qc*K_j zZ?)4{I_Fm*A?Zfhx@rqa!wl;uIfnUHvOwBVK4(EJ{qz`t@B{nDRCo4RGfbybd3}D) zl}f(JWsY27*T{Uiq=XC{1`xvV=PzEoU|@Ugb>VDetn=#?y$^AJ93CFZ+1Wid8@Q%s z(>eE{ATA-U5l!vVr%VMqOEG&pNFqVUr6yNtKw@--Mnv|J=B7wUZfQN zCmKVB9aNH8-Z(ZeXsw4KVLGraWigv`uNDdkt-a!eS)Lt`A!3EOz?BF2o#rErrf_fy zf+6{4%SnsH2L+p2I0eLX3X4b{V4Ry#V*=i&m6beS@n%W<4wUIGqC3$}w?{`MFeJ&s z#T1JP4tuG&%1K~X2G|UYVo=#(I?+vg>`ZxBgvGum%5l>1Vl?aZdO8UOXh{!xq`QEy z1&cuxf}lCX4jRr$;92sJ1EdZjQCZ5?AZD(hM1WI}i@fAOJ#675g=V89n{lJ|Y&5qp z{#Wru)$%`FXgDx2ga2z3x;EavQNn@by=t*D6-b*P>*;tFHadG0MZ}glwX!4Oi_Mkl z{EUY&0rOG6tJPC23NgjUY7a@RFtomYH>Kh2CDUy4%D`K&SnRgcBU7 z^i77oHc>Nt6zwL+A0l%ndvxcwtG*s8^GUr-LA*?%HB`8jOL{x6ROHU-80>PqVMv%C z!q*YMFTqs*XQaYlrwqu}=i^#$FyQ=juMoFmq+NG3l%um#IeYX#9z1-^ zdoy1bvMMWyE-$4vhJgwN_t*L|ph<$&Bn&waNR1|pL_a1xDKy`3@9vcSN(Nx0D+Slw zmi%xZ?+JMc%rp{7`?Ki$Blh<%{Q%=SxnqEL`xX1@wr#&m`q!W*YSxtpj}Nqo%@xB5}H&l+CwkE57ZiW)Nd11B#jR=W-FPrl;-v0L zoWxqvf-k1xr&8)3yWC}>xhUd|PED0}@Wc|y|a>;S`R zl$lP!oUWI-oZEAmPUf2alBg{pUMmz=kkr(&Pn$XXOk`F%{rApl@o0l2CE63)Yavh) zitL2@A)C|}3mfDudu}%S(umveoBwa)S_OjH{bl=asBt#Zx<6?HSZnA#f+NtldKnjA z6SSH}2~NBwjcSO;2Zs!e#@=uQL-gT*%}E9SdZsAFY`j7v<%e)y8>J_lq0q5F_~R?M zgIS;8!l@g92$0Vhp8&<5!zv3IK^9J#B)Q|&2k}4r8&cBz|;gI zQ$7QD1azmW?(;@P>v)5I!W%S-(bb+K`Kt4v0ku zhw||L14^$jjbd-P-6+8kXh@bhq%C@)RJ3cg_FRj?dmn5T@wI?z9UmPrXaeU8_P&@@ z0ihRuGWBnv?>qKQ7xt&hou%cjkh)e6ABaiLlavBmJm_Ns$5)Je?fDOX_^Bip-F;F}8;WW?p66!}_SZ=W-a7Y73L zR^!n~#>0_1(14;3Qi&gxa1)h#hY=yZSgpOd2lbIw5<a(>{(qL*o5cnDAe6Z_q(x0mBVl*Il}S9moz zpM*f@gz!)5AwAFDj5Wea_okI@*l;+2aI@KR>c{utuP`(~F^#QcsUa)XHXYe+5~)kW z0PUKg!iB7gSi0*aov6}s!{z}^!4^AOQGyE#sTEI-@yFKi7Lig=mVED5e zwI`%`26n!fZepjbZR#w2N{G9dAJb3g_&hFjg{@;2V#p!%5llhD+WK5&b8(SZ3S9`h3mf52lUIQD%&qc8> z7y+y{O2!g3xM!{{3TYHf({=ibe1Qd80+Wxy;YjX3dBW`2`En-JD=SqZ(lb`ALk|!6 zD_%=*7@)BPG!LG|rmkc)z1~?nh82mAR0OKgG-@#d^b4U9D1bbpLMAU8M=v0$9aC&> zF0ZH?zPz~Px`^_lPKPT6o+t4x@WL5$XNq*~rDc7rBZdP&#*ZF7l6&{>DYH0^frbe&39Zs^lV2m%Oq0tMggtox%wS;2Kd(VILqfafl=ZA)2%%;EdCF;&(hG5|W~|%maF4fy0X+1g^F^!4 zVw9M_5gPBu3B6gtuDqiDGfb2)JV;VC6NsCHMcVnM(s+^&P1@7A4N`U_B+5T<(ZL@HaHQNe+={_Hrh0}FsZ`5uZt|+o^*zNiK{h(+K~nYXQKO$9?63T52QQjQ=5y3 zv*bMGb%+92tvBic3`pB5SHiXO4-E?s;pAkw05n*q}y;Wuc_I{I}v z?Zv4YA6QMlVCT6USgD;x+zVIV$TT35Y&L}yTQ5UN_#fa?U;b5eDE=06Wg`lzO(Ho#AmbOSgjF;aOw2)i!5CTC5gd#rbB9Ox1af%4C$~#sy{%gds9(2Oj zqVZqR`CX}(`~Tx+5TY^8(KXW#%tfu95RaRrvda z)0KXG?xU%xP9$&?5|?m0E}p3lBL}A6WZLZEwZMLEx!TCf*RSP+XV2xsmoHgVA*rE- zBz4L=n>uR4jj-^Trt-ux+cI9;xy)nKs_}Pzmxy~yuN4xYP()qD>u|c9OL~1F*(#Ii zd@A$xigtx3567O_7ojF*QTW z2?i~QkZA0&c1;w;C}E@zvL1+ukpEbb>CIHmudi6RYpa@Sh1U~hUbmKycXp6r$9;=P z>lk{m+2phkolYmJiLYx$@4+Pv{0C^)lX|D84#XqVewA={?a!jS7`FX5Htpq_HfTfK zexoBlc=3~;e5!nO|0s{oTp`6HP13JL#(Y0XlBZzDg5lRqGwF7EekxEVUPZVJy1aED7)40;OLJAaxgxi zl^7QLC{8e#$Aw7WU(c)!jNXHT0~TMk0<65DgR=U>Gw~4pB$eK**5`pX{>)@9W}DvO z+UG(;e5b@6oFg`F*bEE@1L^epETn*$F?pk5z=4ipk1R*PZw>ch!pYkBqD>Yph&FIF zf~Y=L83sPL_IgzuT&`VHS;~lv?}({djFoj80-g7#rIvMSce}ow>|r-~?%(PmF@ui1 z2uF7{b(Q>?{r;DwiP;7_3eLXkCz-p{*Xp^9;F-v4Y9o5J8h=vj@l6+*MyDj}B~F|~ zSV(lo7;*on(=#V29JC;_WgX^JVyc;<&;ZWd_h0tKs5Xjb=xd?Rl+PzpO)B$sgM$$X zHrCq#D#&L1GQK4J~5QS69#5P23Ip%p-0X(qj{3feIt;-aR}LCfq@;sQ0Pe&@-Z zXsmnShESUpl`tXgYSOOwkf7nL_w*DsZKwP~;U0X=*iY@ysnJh17Lu{h(Q;SnpFeX$ zqsZ?Y8^*TPjanAsHFP`-8kxt&SKLW-LYka(n&eethOXl89onAtx%_L!(U z?oE4`iibT3?^$2;oY}7*Ez5VGkRxH&Xgw^*-4|&`+_Ud@-~LC~Nh_@GbSVeo6jy$6~_J>l~kM4d}aiLgSe^?nh)}ZNurDeZ2kbZxtQkte_BFc(d z%-qX6tS@u>qnq2AnukZ2_@kW%v}xB`43gC>&Loz8H_%*3ygc=-_m#v7dktv4F6vfpI* zro#Fn8o3>1i_Z_Fvr?+nLZ+*En+tq=??if|Aqy$sUaTRmW;gQe)pPma<#V~Xx*{td z*D5&=c;8Y-jd!^A+6xfQO85Y?JxWN(8+ZFM!pZ;*c+xA1d>*Bb+aZFbG8PM=Ym6&!hvKzKW% z5JDf+5T4|;Gko9!q@u4s|H=EG33Ach$7iyT;_O{XL*X@BX_g`+0IG>Z z7_d4I0oKL$D<}~tJb_2}yl7qKbZP^61BDAyaaAbOFQRGuRI-Q%CDpGrRw;%yRCsN}JsdmYYbFGybeSGm6 zthfHPZFb)?Fb|B|9m)ZE3t+C<)5Pr+D+$Fayt!^yM)x240uSSY`;D})YUr8+EN$Bf z)wRV__6n)>jSJv8zL$hDRg7;v%bB}4Kluf{E)V~f5GC#YHhk?Ce)R_s_E(TcXk4DY z#=*Qpd^Re-kC*@81M38!2|zkdPfz9a^q!oap0TI`HMzKWEzh5SC>Q6IzXLN+`+ga_~p2FV99E;t?GK!sHyG@QnHUVy^vBo@IV z7WY9}$@R@tCKD~9O%tGNv)7>LpI8^7#QgV9eL|0|k#XRq!AAXeGc803HNTqC3sRxM zp1Ae~Dqeppk+l2+5Y)1)E5q?fj!ur5as=K1bfA}4SMu`JYq@~o$!f(lQHllvvMOlR zVL1xJj!Ma3G$SFwNRbE>eZaciB%|5Fu+!6gU@uF9)#3_fAlCUvzX0RvzR~$cf>Y++ zeX#%7XIt;?c4;Ho$RhUW5~pVIq25u{TJ;jjM}r(izA4pW7y=w%5(8Nm-hXP-YmNV_ zeFkp0z5`o0T=OWRAO7Ui>s<7QJwCIA6p#P?x4-|rfAg1q@x7ufe~lJ@FknCkbbBCa zfmNA@UPS2Vu`j?K9OFPs>iYVc+CZ2xv@(s- zv54YA1}(maG#A`3@F-;}J|sFBZOD)Rq48d{MqP5+$Bv)L-20Hi;Qk(tM!d&Rcz`%TBfR!`t0*R5 z_74YrUiY>rr9g6z6eNvlPv+Wd6s}Y$=>vvqBf3=i%w7Yc@V!EvB;?g6lCnAh8Gu zP*_o6%Ej5V@*jlDt>*5A^TAsC-UmPW@%R3ij`cV4@tH29c>FKF`P<+5xBk^%`i1p& z^Nk+%k~B=$4iwWPbW~vy2}^wxNEEV8SxUOfq*qlkJ{ZfBx89P+Z$05|6o<@Wv6AcS z8#zCJEmv39I#rMz=e+eD5=Pea=|zBZ$^+H4#T%0^yF*U~QLDHO#q3$p@#H9#6Xbrv zK_|$m#dobX(P@Y~D&NKH4HUd?8}4uSCqUWTB|>Xy3rBfMioIo#uz*4Hi5)GAnV*0o zPkez>Pwhz_VFyA6Ck{L`D7FcX=vqjd9RXtB&|db7tJ`(YD!nmkSnr`Z>yv8&gnO$i zZz12^UM!SrGPk|6Rr@XX{zD-w`w?h2O!>y|%)#D;h#iej zFR_?DeDsK0EIar~wSI&*3ZzZAOSjgrNI&XKQy%>=xE;JeNTa zc-=n>L&I^;A{gNC@Q6|m_+&FE4-&WaT9&i9Twh-KM!Mqk*CH5ujS^6)lu)Mz+QV{l zxmc(zADe(w#>0V}ou10!c+C55vs%ki=8}7>J+;TwMlIUo{n5`DjfN|DO|l_v>>XF4 zJ9vvn1ft!>M)q%^k3M$q>%Lb)i!KDD!SBEofoWPoU%U6Ty8ZzQ2Qu7SZ@(>%9zB+O z_s)p0!B-f0x)( zBAp(lG}x&`%2-sgSq zty{0IuI?t;O_P)?+lfiTj^rSA)IkCR2@;1NK_32y`YQIoDd}Ry7|INjJOh zCQsMv-gD2{d!IGe9CJLPj>>e2^P*#pGK8r+E24PV-+O_-=n9%=jotxTIu6`oykk?l zJJlv;hJJn{q3VnsqqHs;i)?DLm7kl}I|0XacK)by7adkqd61fhgJ1^s?#eb`V%=+Y zh>~PEqN=%#HqX@eSG1-si3u=ucBO@rsQe3Ihl&G3bUSnT|2#LhACO$4}sr&z{kd zi*CTS2IDU`TbZLX!|V;$a8TUE)afT`*KH6p7x3OT2-rMDu>ga@M=d#_z}&) z=NQtUph5lUAki%WHA3Di11E3|wmrM$hm#3Aey~^Lx#W3j3WX#^&+N^HNYe4qF|8sI z$bDqpC^pKx4&#Yjzj{?}-F%8&<;n0w62k+wgm*Ke-ZyBtm$AOU?F<1GWX-okJm`V# z`e)Bw4L0xfYvPEzofU4(vdM;jn4FMph19NC=Gl7epX22}^`B&Xn9hgaVG+G{`d_J7~Y@kA6-9RJJTfAyum z{FnZN7p@#$`C07Rv1l@cc&h=-xO;Fjpc7l0*}Rxp0Y0Rdi^37)Di@_8Z+2S!+3?+W z&HllOQ9E2N+SKwX_?gIdQhe5uX_3Nxc>vRn& z|DXfcA9F{*czb&XTxfcOW_51)=&V-fuVJT1Ye!XNGY+{W(-dRSr`qHJH%MYgL}Omg z_>O_00$`uxUc7eW8X4YzfzQrQc|Q||JUx~B@82g90#>=+%YlwO8?&zq)_FGKQGdn6 zz9zE7RKLHJyCKi1ML>6FrtfF-xttb~%G091X}O{613_b#C%*v{hDjFmhO^ zSWr&p@?dWiQO+p`>evOS5te%Jr{!2=pcZ;D+a-#)P{>`qdMlrvbD9`Dv7r?o;?8Ij z*mWcq-G_&@71FU8F5oi^dq>De*5eiZvqNx}pPwr=OTh*V=L6Q3@Ri=APDj%)q)1Ut zksO22aBMatX1hM$xcI%@Q~}vdzU|BXr#t}P2tB@E6(?JD8r=rnr$Vt#`_~zHn{>p0 z`yV5N{rwrcQ%B0gX13IpV;yB-b{%v0>TAFC+aEcZVx{Px001BWNklKlj{oug<2^&*EnL*0+9N=S~pDH<}NL-6#am!7TYeD4C=wnTA-P_K%O)kz#j` zxu-6|TDBa1>Z6O}lg-0a*Ht}gmqjgcht z4AkM*Viubh0he|89d>_;mKp^$wt$enXJ z3&BaL{Vg{(fcmj3r`yyv%A#H7>s1qC@{2K)faDk}pjjGFLE=s%il&v-PHSM22Q$<+ z(vdDu8t{#xF_}$GHWisVGGEN;iUr~h&=M43Y(`*hH{KvR>(opwV%FmNEY8VLUQqJA zV1eM#$z9IQq)Sqg1&le6c(Pb<6Gqd1bi{2i;|!BB^@ga#a;|j~qVqqF1gxlpY9{T7 zM`^p1earbMnC9al*`^LxGAs7%j0OJam=R%&AO3 zm%jC_dvbhw#xQ<#UP$igTq*^-!u6VvFXphY8N{3rgg}f@sKZpe*qo}=5Cx&;8;}xv z-E_h#b7MKgD|GZQSrOkn7v5K>=AupGWV)2ERdv%B*7paLQAdXA@r7?r6<%-c5j5-7 zAX==E^b0;Y()?e_XU=J+k2xu>y)t&WNxBn)eEtuyRR7o=PgEiO(l7qk$AABS{<|+W zZFu#;g9o3bZJG_=H94d==;xHawfT6jDHhJ;uHHT76hTsO*nM9jA!k7zW zsCK>1FJU1v=$7Uay&4c~mRnuGV$86d8=QM#-t9hP`Gg0_2KmKWEMG^+J9D^{?fK>nAnx-T+j(bAa&3ZkA=L=tY%LHiAGWqlhGuz&O^5Zzts2dKVU=_%<@5c z!@YQLa7CWFd5gMaK*vi$t{c5S#dHf&t<>K3q-t(jIR!<76_d?Jw@G9U^N7yO=_Oih znpp!TUSA_M7-?FCMwz?=GU54I*&I5h&CN%k z2}hppVnIzMr8$7h+eW7Q%EYHUtqEl5!!+e&es0;Sk>?xh0LDFl$x$%hfB${zFadLJ zmuopcJ!gnJHkKM9t`Bwk5rccxlw{ehWxiF5!QL3;$)NIR=iN;;yeN8iT2O<+()Tme zRQGUwFG~F!nF}B$8FD*Q>t=lu(CQ`&Ya-AN{25#iG!l{ahif%?c=&)aD+K6wU3Vv? z_~L87_1Z^L=JG+u6IDoY{Hy=YzkB@m{?6a}{9-Zxjm>&})m>+_JJ6XaI|$J6&Bt}T zT=4Ia;xPNYe@dtZHz3%NrzhuR^l?Yl_d9co+WEtuzwb?1K=iK3J4n&5$g&G|pvES) z;h8auHO+x>Pgn{$*5bPj-vn4js4c8*a1zMCz7KQfV9AyEy!_wL=3Z++`qa&~&AdeszUGMaKm zd31ClXJ>O+K~B||O^zbPAGq_7Ej4Ml?K@oI!vE-XABfa_W=?84m928`P zaDzk$LJc~vZ{L4U-oJmJh*LWr)3hEoj)2kqK!Jp*#M#M-eqJ{kgph1D5B)OXP9yrc zUOOX1d9AXf#tGKUaSf|gbk`&*;eG~`zgW19=yBimpMT?PZ#+>&RG!2_isLW*dw=Qf zfA*LEqZgOU<*PCFNb*)jrHP3_I*OR9J2Xh?s&WDI z;>Pw!1Jt-!f_>j`#IJ9R?aQvKg63isd*wyT9foVy5r=gP zJQ*_Nnio8?Si|B4E7;U^mT=R_dI?xpKQ2uDYeO4%Mne*)EgV3PF<{eXUQ7u#=>ohF^SQ3EBXgRd$~+YIeK`+nJ9dk zQBa^U1*(#4V}en|x#idDp2bO3jT^m5G1&`wQ{W_*Xd2UK-DvM)f+~v7O+YfqEpO=j z{FndcOb4fEA2hlfO$#0>s%zTx16x!~UZp6o;BZf!STp&{ z=6SbkEzycTJuXHVimEVq1{u0!Ygm zZ?K3iz^Y&>YbVgrfFk9>>D_EKhp|0C40RJ++=OZeoyKj|q_8{1BH#QyYC;RnX;g-; zyA^qpY03@lW~&}6Rmeatq{%!7f<5&4JzrD>lvF(iU>S;E~k&NEtABpl2bfagJbK(?B#&mT?m>ckYgLR5P za$Gy6-?-hJ7s}j08+4oMBI**D0{UV{h5kC@$O8nW{T!gn%rHf3LDS&OfbfC zE&lMiwX;a|mE&BHCC?bHO z{>GfYW=O5MeqEk|;l*sqYY5o~o(Zo5R(p`s4H^x7NM?9Jh5fiHaLjRXRv!Mif^zo&$tXKtjJ~ZV-jQhKZb&r*MJ%oDBZ2I z|LufTaeKDzFjg;ngdg{PL=pYS8ZLad*flrv!>~)}b80Q+u|@>jwk@M5yz{Ip@7w(;G+G z^_up=>QFyB!o1%x8^6ZxtKR0VmGo^#FP-P41%dKSwqwb4kC^h}#n=DI z>rZSEl_$NB;&}DWKe_X-{pmmXV$(G2Onp%dp1bECh+tl*($X7OlX6RPBl-$*H&A5aQS zJ|sSO7a}dWIEV7ycka0iL;CkAL93Bc=z6BK*k|R+)U<~bu1}C z;>4vYr9>=EC{^#0y4JHZS*+J25e3`0A=+?6naz-COms?`jF?Z1*S$BJP!>W7j`{6E z#|nKZ)&+EHaiAX7Fmr)7H`WbhFeiTP)6YC32ZvV)Nxy&peVM#}Pwqb)(61X~B)%sr zq?8z$-*z+>c-aWrxwp+C--G2L%Z^N@zMLs{qxIZcs(GqZMKs@&VdwjgQ<4|oeC^5Y zME!W;3n`BO>(_tt&cFU=|McfW2(PLu$3VN6#+RN(^Cp?Z67r(zTRNADu($-*HKt-R zkSuvaG~1C@crj2f$A__Pxsdegw$q!WhBNi>PLS`m$WZ$G*B{^MX(eAsT6Nb>ytH zZL%9q%uHz8Jh+omCNfzeWZ?>`4QwRa#)&bNvmIJ;hH4OX4zwU>&8jw3Qx_wD&$#Zf zQy;@<3tBQKBGopAlKA0Wmy>xcB!KUubLC=5%gFOZ@y@~J3r@HSG(3+k35j~0feb8U zWl>!g@#k(jse%He67lE1tBdxo=->3R@; zA<_iC?xE`_Cu126Tiu9(OF`{-BBOk4x=Pp!qOdk$D-jUB1)?Ji19MW6jfTSSxq9`A z+`MsJu3W#Sa-0xl({E%6N3pJ_B!;nUE_12$} zsXaRlYyq!!%As=Wu?j8urByS` zVvS_x^QN_hVLujeChCdGQAnhUO6p*om7Qm9Dz>(A*%|Xy><^9pthH`mr-Z+eJUHBik)5G5Wd$d|GC(gmR{ATqk}fc zcsO9On2v|k_ai8tr)f{tT(-rfNKbv(Hra_GkP(F63sjlI|CX~h2rklzI0hc%W+vqtK)zFe}DCr zpZkmdhJ5T}&wcs!GtaVEz4!ioN(+vTkH`${s~D`{j8iFQ@xC|})}k&;jC>NC$Dxqo zX7BYw7cE{Z_ju7Ym15O3kW9oPZoBW+e0Md4Li0m?{#GP74jopIXAZ!x!otmoDLTFu zEQC8%i?Byq#q#~$fhaUwLD9$<0(SAlwq_Msu6^5&iuqi}B zXVe>n=VM~u=v0w${>qErvBT}vI6!pqZtC%XS@|Iq2to5OXuo#ts$4z1!fS=(kHun1 zLkQ>#8H{hDem*@mkxeW6SFXr&&poH%<=d_N{_p>uEGZ3H>$wk2p4)OZ9d?cD^T5Em z-e_#(%tf`%m7Qlat?&+8*xig$;VO91v2(8^A&VlkZni;@9JMl@3@L@eCEHSZv?4kL ztIz3VOqlnKqL;oI?QO4`e5lL z4QcibF~fl^@JMr@pDw8QSPaYuG&UV~*8`iEa&e_0OHb&xC8TMID76mEwR=Xc$qqTC z{d@dzQLtST52QE^MyViK>)?_RIeJ^LU?5Pl`y5sbRYNFNfF=8Y!m(&1`?GzydR?s- z_Yd}1SaF_EoZuvd-TEpB-C$_S8XD`yY?fv}H02U#DKcIvs)AoSyi!OVcJ_|fQ(_@A z8pI*HlswOKC^wY^m(swiIX=3y*>om@!H5zS6ydGu3wM90cVKEmPFY9O=0#B#xIRl4 za=5v5wIO*Y5-X&kK&o?tuCE>Ea=N!KH*Y;H&prDr8M0@KxwQB0vEv8Vc+jYe zRL;2!O@>{QMI0)$m?{XmeuLHDHFjg{d|lWn7P7PXGV8^G5{6pKh8>NOZZqK68QtZ2 zy^t8UTnknV8Q2m*xqkhSUo$*9W|GYYOzEh$UfldrG6iXlx?v&jcf6R89ei|pLIh?5 zzwY&lq2i0pN|TouFrcMB1Nne( z22yv?gGT3PSP&uN$6RGP8Z&tWFcF}j)oMXg>lPg)3#mvlgKug?(WMQBvJ5RDIxu53 z1*$Rs(V`=P))h8o%cha783s^82fxc0GdSnovX2svZ0?l7F4xYM&P_a;P3;=^U4%lT z8m&hwT$=8tX%VG445heLh6Ihd(u@Z1Mm>-l*KW#Fx1J(&hS?Ol9LO5*D_}5E?2`%q zef}q9c;k~+%7fY_&nk(OVX^T*>l8BN70b7)3J;Bm?bNY}8CqNyA@>lAB*|WbqXoDJ z=sO=I%X0?I37xVmFP0l=n|U#XH^!^)Pbxl#T@o+y$>z2t`9^26=2M(>UYUXPY@SeK z0XDz(Wzjb`HR|uzstMVwUOZ_8`pUMI$!I9E=~yuCxbf6YdFuAlyk4035wUpKn021o z7dDN@#_8+9-%*DPD7x$Df`wlR=$eJ0vR%h4V$m{sGc(${?i8!Jo}0H<_gj8bl^n{C zTs$+lV&jjXwv^C#GI$@UPmrTwBQ*%>3bk3w(Zl<)-7I;1Ju?-E%5*v=?0fzCRXM(X zO&&aWD96VqvRba~Jw)wbR~vp-sWo3Oq*)H+y&&K@K@ALbf*VG82bUOo%MTr2b%_XTfDEY3Cy1yoA}&}1E6+=3Y-U{?yLOwH?qy0sVqCRDSk z;&$SlYk|!&02WGNjj2c_yx{l(MtxqddQwU|8W_7L&IKEX%~G-E3k3@{Z&Pjk(0NbC z8Vr5)%2k=}P5Iif+2|P)*J#IP0o~HaGBc_U0$xc2Pg7guN;>DYK~rW??{;Tp4UXoG zYL=1qpfQ5Dq$gDbGX2Ij8z&e=!x+78uFtV*DomPO_^g{(;#IVSpB!pt*P`%)JddF4 z075PpJGI!x3KdOcw@z1ouEysV{zeaM5>ZI@rnp9Xa_#ChYAKP^3EyE5WRQY$j-Y6K zF0hy&tJRsKt~G2Mel3Er(aoVFeem!hiwcV9bUI_cFPN?PUUX{A^^5w6M zb;`yh=RMMg+)Wn8qf%VOB~*F)8+IV_@9%Iaj2wr6BKnQXBKiTxWg-0z$6x*H|J9wp z^cVlai}U&N)%jw1b!#EnI+E%$EEjDif_t?cwOnjI`N>bpXFm05Ihao6?BrO!F?dJj zXQy(0dS<&?FE+q%dyDx>7ZzhH0wGoVQDe56**^S3LuDkON6KA=Sf^BfP5$uh(B3at z+~wyA`9oRAw`Q$ZZC6vQ=uD|RvN$IAYtr33ZT|*C8MGt*8L}cRcIF@4n|#CwSgDsH zxyj5{TR@UBbwf&d&PIzp!+=@PV=XPIP3x;)qr$?in=|Ay;J*pEu!d~-E*U<9sQx_6 z=^zBhrxiQven%oxPOx_nmhIW3opr8~bLLQVr*`FclIr(VvuGv1u3fmd%t`%v*Fc36 zegXrik!&)QDWxAX*`Mvn-gJ+1V7T?1ot)7iA4w^YZ-_ZB-HdD3|jpj&}oM?t58#tHASi>3s15d{0 zt|i<|ESi;$U6>`j&1p*I)~R%$AJln%Uq`Y|^qZGO^gA4vh4i}|f9se2-kpEtXFm60 zO7g0RT=ltwN>CVC!iAjS#7Mgz3|L4%@$rw#r$6;6nTk_$q*UFj z22T&O#hlJn=_X-vA9a)A4&E|Y)c{93SadodU1;JC3Q$MM05=x!C`DR_xhR3GlR)_C zn_M`Gz}y&|Qanz@7CgRkytmHgt9_XyHai6W0*P|Y36q1-gbQkGGj7i52oE>R#7tQ# zRL&W7#c?HTTEeY(ot8^AFjv`5*#P*C#0h4Gg6r3~CNp2pnn@c>cGBoM$r@3~rWU4J zVquQa?~~*M>{2cBhNN^xUU)Gp9)?Cn7*h;}ES>`*4uRw^6o;dS59RdegdVGofJilW zc4Blg6AEZO)p=;kA3x#D^_qO*6Q7Vze(I0N^&8h^v06xLKGw_WRN1fFUY3g`yD*sU z=h1~rFx&(rl!(0AxyWyHCE&#Dc*G6epe395>W%C2^zGYn?dnx_qw~`fN#`kZBNmHu zJ_qhAbeY)X;j@fFicJEe)yCSbqUh1cBUF0WnjB|50^gXb!GfA_(6|E|%n)b{kBtV5 z959Q;8iV_3fMlx7ijIWUofx*mN*9rfJGfolaJ|{s`J(#F9S0QAH!h3lcRMZ%>GyE_ z-@p1BcYgL~{?zBBk*`RS&pL!s99#4`P^`e91v~`E5~0c?OWpVRU1q_7uoJBKXhq{p zloA_Tn6fRN>sbv`EVH#@Vw0pw*T64~{UT@jm z!AJ@)ZID_bQgTk~j+uqP2wS~k=Y-Fxx6Hg0_x}w>R@Gtzi?`8mBD2{($u&?Rz(W;t zE}zk|n2PFdJG*u&nD0mqk+dS&22b3XL4AxD7OV^NYG;x*uGF#VvMYG9J58g}1!SxS zG4`fy4uTqdG=5K5iik^^LN!;r_;WLpH7IEc*LZ>rMLS?Y#Sek``f9P_egXyU;ll?s z%ZD+$-!7i)Lp`x=TwL3%2#e)-V)i;7%atn!a`Wa5xpCtfncE%b;scr*v?g!C7yyB!1`^Mb-9}5TF(xBj#}cva>)pl5rlgQZ~y=x07*naRDs>2Ap78FU%7Hc4h{~a zL!wFS$}Thl$t86$tCEWBo&mg z-8dC5l#Oe&f{5adG#W6RZ$16A9A3RjIT&E!#e5-?=~SK2EUhZriB?y27iG}v-FW_5 z^2C^!|E+whextdv-H{}p|N86Scp|-Xzu)7skbaNHSAX>%-~E?=`g1SB3`rz?wl~{6 z7uGkXBODmH0x@fZ_S%+SpuI1|zO2E)N9lNZ=jz=kB?nA+sXTu(g5{F_dOkSfN>u}Z{F~L9V~IIuqHE@T zF3Dc)bKy?0Y-sWzIZD1aeRhg@BV_q*8^@-pV zg!$5n9KZZ)zj6HM|Ao)J7(~7zl77|~#U^Ob@Ss&A0W3E6?>~^kgKtxRhnO`Q zi=)uQ0`){^Wr}ukWc3+rrMurppa+l%JzCS`F+ z8AVaLGf+`J67x|=VHUpHtf;BWbI`ogpUT12ec35yz|7L-G2Sx7^& z;v9{{WI9RcCrML_W{4iuTe&p}*1&sG>sECV-xrxqE^2l!gd!PgO_l}AO3X&bNWL+M z9L`rvSAj*PBu40Y25<50HGN{#pY2kiU^3U5&C4{Dwqb{PetIhJ4~B$nAKbq$M@L88 zfPy)T^DvtYc&|Z<0?Ez6`GL&O&Z%7uPRfJHd+O~z*qs*o{Myer(Vd`X^g3ct+rJ?b zm=cR93Mjft6vc%V^~q#NlGU|qH{_{XPs`1lPssrYQlX(~{X=x35099#)4BC!64QTX z*L^LfHu}J8)0n_U24F{{h~9cip843vae(kb|em}=$A^kp&fAIhP28Zu|{?B~w z%SqDDc_?^m!aH=8AYuIO@BJPZp@Z2>7UyRwyhehE&sJ?kRc}!Xe2%US3%O(Qk4Mab zzXgF61BnzOilrNnB3og{(iBIW+A$|d3F785(->LDx>J1$r??~|*Elo{$aQ03z8lWK zxNtURT{s?+C;`VJ6jk3HZ!35kyJ|2ov2%~+(1SucplgoGjcP)Wl5>hB9L*`L1F zQiMS4%4F?We4BZHv}%5U=R`3;{2OMV*pQ((;_uL*!uk^L1+o~hWYxH1kHzFTk^4weN3Kv?pZR8kqX1Eke}V8Gkxy%TFPqFve7nt&blY0TV2D!KnCLxi!$Uz zx1W7hZr;8v`-fM!@z`3lBRhF+Vkaa#p`en4B=v}?kjYZjm4;B_6ZIVFCaGzgY=9rt zApe!ue*5j0J{&9UkJoWoNdJJxKln$#@zS6F(|_u?kNp?Ki9^`wadCK`WFc6C9q#Wl zq2eKS+Us?m5e74t_NFB>@v>p}F7c<OkLp4BCa!Q{K z%_W(op%+qY9~#%%p|A|{1A5LO+=hm0X`7Aop)08{PWbRn+?;_z2fx!!wyVwxo{IHR zjIlXr%)__0f|1+{Hn!Y^w8p$G<`boON>x;AyT3uuj7-iXQAm?QuyhR$8p(yzKNRo6 zl{kfhJHosg1z5BYGXSC0a0PUmzEL50Em(A1ve0dGDvhwi#O9zA+YsXWhbqB9*V`M) zpmSig!6V_vg5aC1KW#PjmLm(XS$@oO`|Pko26eCS{bIpQ=X^eAA;qs4i4eM;L=tYW zS%OzB*{gA+5~=lyGj@yu01t0a5ZcCyWn1hQy^vaGHn4;rJfK|#x#;GN8*=0N4bDdq z)Q#743J80?;6{!co#9Akvje$tEs12ruvCPJ zk#`$459vKXpg5kTnp1JGFE?-AB%FKux##4{wQD^8=*$-@kH}LZV>BjktO6W9a1pq0 zXy$IKo0Gjg&Rg+~3`Jk9U;dR}`SmaU;8)5g^ksjR zji~q<47>Bw6KYD~4zo7TUa^2~ClQGmraSW1XIlIP2CbA3<3@X`)y_a z7E8Ey>9)hjKUz@1S z9mYn+#^@$$5j%BBio&8WZQ-CamN90#bj8vja+;$zftwI^OdDlHH`c)dhNo9<8)VgQ zWxiUSOztp=eJDo#35pri_{a&t#Y=B70;sM-tZ zcs!wg`C$JFWh*dJ!RP@6bh%vf`^YRuAsvlLutPCDJiI1Xuiucv!z-NE!o_N}LJZnc z=8LU#sUbYvcWV~W&RFQBm`d(W0qbHmd$4~%>qW5r(IsOugZFk0B#ZF!f}2Vm_Xsz# zr>7^pwy9=jSH<+=w%I$=fz4r6yL-rMIG@j7`n!MUE0>mke~9Cc7e6vP z*suN3sSOr*?D?bKRd7aFOC$>0G3>y($`I7~=0?JxFp8tWhqd_w77WY{v6zTSchs1_ z7#w(E0qjwy`CQXCS)*%m+o^BETxT3ub*R|3ebF(V84T=X8yLr4CIDX}~e)Fq8{m1^qixT5kQj9P7 z-P{veTXFFMd4rlfWA#3+{#`r@k>f&5t&hwcc^n43`+@T08isQB)^&OIX5$6C1a#-M zF}O^`Y!Jm9etL5Rs-R@oCE|}*kk+d$q1C}4N{@Lc2t=NmV#Uq-&8B+I1AOp@Dr3O{ z2KFdSz*pOr@ZtuRjd&jVs6m;1*L z3XNrnijl;$8@2nV?+HiaOm(!l?AeW?@B{f!?WT6B=tg0VkB$s;RWM~?AxMX*R>^+Q z07E`QJtt?CEjJk2Jr2wxTQ`5O@H;*_k;QVwjUDX$P_%H5V@8_>x{<*5;B~E7)K@Z} zuUG)_p3l#hBpA&XD_JbpvRtf)M!_hB`N5d~cQNa=>#osBZbUN>)PT6YlM|V*R`T%p zSnj>|9^I1Q^t9TV>4l}@P@4+|d>410wEDb1t}Au&(RRDJyIQS2|KI)1S1vW8KY-)1 zkp6&Z#*_+NVZ7S z7*Az3naOlC=;DF?>X4uNQ-^$7Sj6|B*-T^z) z2WQ8!IgZp%B85Z?sb{Au)T%RTyJ(hV%Yr0=y#^HR?G^;5 zGrgCwNrR=|`CN6s91o-{?8WB>>|7MKz5N4zhEU{D+|k8?=?hpGT{Ame3*o2Mm62(M zt*^I3lNtEitwPH9r>#UeK0THD4}QhoLG3U2!^zf&1%cV65RuIdi{2zIju3(F)kSr)r~_#dBSWul|yt=vl;)4 z`aeg4$k~}3pPey|3$JT$x=*-jHr-?K#p0B`e# ziekP~NTrc2W8Pp4j~;FS4@z!ICX+om#A9|K*AEV5@8D1d;|Zl5=p<2a2ulVHL%6aB zcIp+n<-p?>@bPN9!B7+eMy8Sg0lYn zNmW9Qo(3Ba*v2lV(z(`dPI@2c_hYj)KVR@%BeslwyW5SjVeQ@t4z0HqoNow&>qBXd z5d)=EDQPk4ETkWW6YwbDVLLo0+v`+S zXvG=Ks-TFX-M{jyzxFGa%-kRFaal-z2*rvC(Fk~vD^aY!XuSE zA|@PLFe0s(_BrayyV2S_)ju(=LQAy(! z2sLAsDIf!LHrtaH={UBa4Mz_d$%S_Z0tK9;_V=#HXfUEtIy#$fwUQQOs9`VT;Yg;F zDQ83|ob>x`8-oOg)W>3uh=PkiaddSM{{wP^c9KEk)Gcbbx)@=J@G=+O-nxvAvqrct zg}y|*HNi~))Q1*xP0TunnJlDfH%taf?oF(r+Pz7lnt@s@qKiD7?#aP;DtjQp496^n zj6Xm(*tYgFEO6Y6C_I=T*<2U1z0qVQ<8CA4)l%n(mM6;1P`|Z#aUoNMP{q|XMMA_* ziE(IczPDo4g?S+^sU%`^_;S~6@8Vwc0x9W?KoHoICimWS%5@Qfog z^8z*ZP#Zz=#h=ls0)7URi@B&5h7Nku<|PK|X!rYjQGZX3xKcw!%Px5x8b&|t4+IMf*^ zW3I*%8I3!>X|Op1*`1LEa&Iz|z3EiOLpA;Gut>s4JSG|)pd-6}c#ZHTMfm6p0q>e) z6ZC>(xcQ`(HgteRG4n$HB(fr5NU+A@yWPmr(oZ&U{Q+|_>qJ|XnP~r@P6rjVuN|ot zQu@jc2PF6OgnD(M^iI98*Uc1_G*Cl~(9#F^;NVcM9URKRY>x&Ccn?ifi4d;E_Ix4p zlT*$T!RCd|5|+?m~bl;UC*89Et9Ylir}yUe1--rD0`m zax5F~AtQw$)(>62N|!n_9TCOwFCHdC+8OGFGOCxn4{US{Vdf8J_g(@Btb_FVXG}U{ z#-K@8uoyd2+YSeIp3Yt^TLSfoHK@=2*5|uTDjNxEHqlL>fUVau94-}_v!8?4g(8CU zHZ+E%7NJNP2@2&DR&=wO>`$ih%&lAU?Cslfan zySLPfDznt&KTXI4CC^Gt-VK_z((g^*=#@`{2b_C0Y)^#4la0`2I}bpMi)Di1IOpdG-j-h>|hDQytLIRJ@3ba+ixMhD8tR-@`Na#n)bY^Ku^gLp&}E z=@0q%N3Xxex#?$r@+W_xk@$tJbuew~Y(0m(Ql5qQ(d2DsH6OLFb190>bIPOGeYxmA zmKjv;9@HDSwV9w6Q1x-8gO7KnIcBSx*m^Nw)}+m&Dt4<_L{<5=YU^w}>r@vP>%bfP zL%nHGrsPV_&d*qK0k49UiF&nKZKPXm1U`D~iqLVdJL#G=;Zzjh(03#(q0_v1<%&Fe z^QL_K)-Abl28RNEjyNm@NLs;_9|J%K0|i#q0Jv#rqm2sP=OZk zKH`Q-S>g-Kj~_gg_wU`4hsP(}v|tl7;A1So3n{wcCdhKTmgD)EJUl&;lldtbyBj=L zw8h^Rc)Bk6fG;ZiEN*syNHWY>p%-ogH(DrMX{9->ULYNQ71PZcS1Tz8hbU@5QMjQelLzuG5Ybo#<-4C5jNuXaVEXL0ed}!BS-4 zjs-#%5D*kj%tUeipd}qzSc7^gH`Iu#_2q_8F-cHnoI%1>(oVFq;O>||&cQzK7JOhg zO^L$Gu@jHwJ?w-`?6mUruj%F2UwiA)WZ_3}To%$F(Q)U^H^2DLed^P{8AAAlCiYjG zz6yoD;D;-YZY9$mnnjq{jyc+lPHp-w7SXahb*V+}PHoZi?!h08S;U3>K`sd~nR&cX z6MhhNsBes0)%{tziTkONY_yX=(d73d)$eu^Y^q6)%V>2GOtM@>8sdXt3E2a!BI<>d=N5CVj-fGD zELutJSkeGLBM@R8HP8mnWIWuH@$g)xtA(7d7IF;PO@|t|GLKbVJRyf+`cCRqCIg*o zYOK&UEOZfbP`r*_;YPSDg-oc?-~pIcG_h5?KA7ZhwCj^r&HiyuAQ=1P{FJ8hC#OnU zL4pqEhLDIfqY(=zn64 ziHPn{>>lzk0TfaVg)lV3j5K(=Ho>xmbptx!dzr|1qTMI-sn`ghK$85EgvmsxikOdr zXauINO1nCnhbo+_zb_^XQEClzw!hMiRU>9KX`hjc9Kc+JtJ0cwKU4O(LnO@?-+be( z%X#RJ=(sGTKf>d;zy8iEKlRB^-U%^$IfU@pT(p{|>?<>rqu#1?{E4ybF+Kd-3TdBn zOVfo9Su$8G?LMd3zzsb+kw)S+m$MILDWpZhgLz?Ne!>GVC!;Rpuy*U56j8D7!y~)n za?~%g*2fmuI%WYs*`NJ};(QiTK(eAt%+zT|gGHL~DvJHGRqI7SbO!H^CsUaYM}%{= zfR?0{0X8d9A+`>YY0HiDkmqcA%OMTyJVKXfDj(X3jD{l9X^`n`E7R$|?5`HGznHU2 z1a=>nDlsD58&oO+`$&?@P!mHV9TI}D&?n3(gKP$>(?ua@QAB&oF!h;f@9_Lq2Iz|C za~YmZBq4SS5};wrncy)bEXNP!2!;jgCCNf-u#Y)5Xe6y#g>>=r0Y4&H1l_)L$~wj) z=&#IPO>w6qQpJ@8#+x?MncXlk03?cYh7Awc(_m1=wt0-sn z7CBo9NKB6@q`o%r+wKIBm%jey8<+FYAK`IXNPon~>)-t5oj>}*3ooXWej$YLb1b4} zd|wB1ix<#~=`HRbY70e*kI5C>{f<(pDu?qJhD%B)xM^xaQD6G(0YSZ$=&)^XJxb|v<(0VJ$s{( z#L1p^b(r~~lihYCJK@hXVP9`$JzvSZf@@-l6)+HbHc4cO^A5ub zXkPn--)g*B=23@CU}EU?W-ZO)T+$g5Zj$W9t+b;djVc}Kt9@fdvsTVF}j_MKv@zbb;_Q;d~D%7h~s|glV&-ju{&! z-ElU?GIzLDy`HsDN850!XET0&hgd||eCDwBsH|qpUoFLmPDW+`-=`9fSVxWfD5D6b zA3b(_v3I`40^#kqA$vy~o|EL2B=W_(Z(Ytqf7HiiA^m4?ym9v~ZuFOa;uD|vrI6B> zL(^QX1Gnp=jzJPHG%@DXn8(E@J@P!+XhAZ2)FIwdNb`3q94w`fD$7w92DNZ&2>EgL zM~ zi(wQonMK*_JC)|N0~Y)9#hIKfPNnHJP@Q20p%hX!n9xRoXarU>NN8Jhr$L73mMwSG z$wewb8mO$JX#@_lAU(-)PO{J@ZK(mpriPI2{ETx?ZhfFlZIp!L(xft%bkAVPNjAmj zIh7gj1+lT-A1M=iK)9hDBi?V5%zPkZ^rMY~ym1?_t8{xPWw^3Cm6)Y5z1>%O&9*At zNx^>g&7Ha|MU%6T=#?>2gHijK!_|RUplCK`#f8g{uAkt0<$sILu^*`Omd_vX3+^50 zL=oY}oMAdQ>FZz`PUrHRl1@}ZxTTO5YsGxuOPP!2QAesawEkI?!phIBt)36ACwJd@ z`+xiJta4A*aal4SH(emt%yKkjQD zEu@mE_Efn>$*f{h^SiC740OR$;*;;Q!}rpUegJ)*LTA$E&jUUhN0kio+Zo*R!fcHGuf4QYUzh zxAqsiFVto_J440`ha1lCILB1%T`{=oxYCnP;D|MxB<#gA8nJ5@In=;U#H8)o|8)f{=L%Wlrk5m{8qAw2b=F-FM#p z`48{v_T(Iwh4e#myz%b4KmQXiyZ~tCDl&?u5kud`>&$gmL37jxO4?$I)j+WsnVS!EMSpu)nALb~A`b|a~4 z$=)5KJ3T#@y@PYvUmj>@hi(ybSahYMk<2C&*`LnjU^0`_)tHixfCEt_StQ?2x%os9&tU$mtJ zrQR{{C=vQh%B&=ZRQvps1(?icJHPBcZ9HJRE9C?bVkMQl$M3Pz~+8z&>We^8!J59nG9jQN6n(?F#(%0fn_ME?Fj*5HpwFE z5}@tY9CCE#n$5yZYJv9vO)a`7WeJaD*bk&7xhG~99;x)D?(XE-t(?)ZYr>2+ayE>f zwj-Q7kO5$2(1uYk){wkzt-DbVUo|zC+|d^eaAPp9{!L>B1bKUvvDf09l`iCo=I*J| z4YL@6aFbRfXt9u(C$pQ|dvss62CT?r4nDZFM%mV82xUh3YPYBJ)RaomfqYzN4=lvu1DyK&BdjnLKE- zmo7EN#=;NTbRpRsbQjFcpNLA<;(xaH{jwza(!1|`{gP1hAv!J#>4)ri`&|-|zW5U_ zeDaq>fdLQ2zT6Sb=Ee!g)Qb(no_*WKZiUK-8m{oq5r-h z&$&H%tX9<~V&NYfI`H z33Dlt9gb3BLJMY`LuyouOH?uq zq}W6`Rp&ZcxOs0dw%P%5*_T!9Wr?{Vj2m#?hU&!A#DRsxI~16TjpWY#Q2yu1Ay~sP zBW%pqm>~+570co$WtLk-mSjXEID-`T5xj*V`)E35)V3B}@66m(8HjlC$+Pej%66lrYqn84}-tk;lCZOr|p!~jO0y^9$>z`B#KS4SE? zV#v>1eHK070l&h|ax$CJ(h@HSmW;A$cwIXua*<#a9qfEgH`#Hfi089k zuG9Ccz-FnQ_u^4ttBe00^5R}P(+`;I8UZF)N2(9)BvAN~`?#idP}KVtaI7tS$?HgV zPcm|n5u(sJ(Qa_FW-J?hb=v`bg!d*>+27lj`QBW!OgFtQz>UUm!OXzoTeSOuA$yE` zK2#t?jseDnNrk3=YzZB==A49Xk%ioiHEfgM#Icxd8_nZ5=RZeT_FFmMu4T4f$#kaL!-tM zFllI`cBPHv8G9YZ?pG*RCJ#}t|9W=~`O*m2hdI8j47{rrMGFS4JsJ;R(B~LXdea&b zp@}Z^#D%9d=Hk#lH?S|%4H(||wv4dz`}56@7fjb`*ODNA-8y|p?8w=bPR9CKYFaJI zNuloE=FILRTx}!reY=|}%%AmglJuo-y#3B)7y2PRE(__0_;~B?H`$&3osiL+yA9x2xX=K;MTg1wt%z{#A(v*F-tX_r z4DyEMS_6|)lS8HzvTUf!3?@l}$UiQZB5}Yu7)&dmHQYcRvF$9O#4Hza1(?24mf&dT zkV~s~RgH$4$ENU0;9fiLHgdXI$zX9Vo46HFdLrkemO8Rg(+bQ(Z;(B)8{F*|9ca)>>iDh^_)=TLzzqAEf3u&MZw2x^QdN;Emu?1HeZ{4+H+ejj`3mZbb*Yo8-hRg@sia^6? z8LuE5(V~vlbgEUwdD2BXD%qyBZAo7UWKITR0Z7i;^_Solllp7p8J$wjc`))!hF7C9 zVUxqi*6M{v?vKI`_P2}(I}}Aoi!f(Cn9k(t-X59I2p&L0-pEW6G{oB?{sx2G#R6@Z zj3+FlAdi7>h=j(exkm5vi#TB98Wh3wX?NcB128DD;%N6Dd#*|gk`rb?k{7`UyW+mt)7 ztK3SzGU2})HRK#hizuteJi!;Xs6N4vGBhsd=@Ol8Hj@<>>Vw&V&fBIVX(vNXWufhy z<+H-WH2^|h%WAuj)5WpKQIeDOnWRxGeH&!mZRG6iR31EdD5ob!vREx-n>G@WQ5vFJ zM;NpU0#PIsnX&^;pHFJY={PiL4@@_eb>A^{2F3s|;vXOt2Id$x_f1Gy>9vTGL6 zIX9jk3I=mD19;mwHOkygm5Y&NSW_~IDHqbF7)3PJPx*YZ$sLy8Afe`+<)DI;D&*2( z)Z}{yg}_HmE0f_!_Qn$}r27YQ_25trXM2Rfao7u*$=ZL~y~WiOksmgCJSZTV0{(b257D|S8$7zM1CoW*UMNb5amBWoy0 zM1Y1{^}9u(a#B}kOwrDqaUA4}9!i71BW&BLS1<}GW7nc;G>IN``g`l9)n*TDQVnT` z>kz5ijRp(=+HO!l=nYursg0&~=MG;Tu$0s^2xT5A76%tBN7YMahCmQE~?aSfbfgJAdGd6BIp0db-Z9QaGuG;twjNsG~?j5n%QinU-a=wj_ zfK8WVvEEACE|t9-J;Knm(k4h!qE(++$Hh)#w}gt1BZwrl#p@T+q^>J5gCwJMETkDd z$sKt%sXrD8UwZ4!H(vgztyxdPaal-zOpmwUz5BB1PJbaK`L|`4*qd1sH6YjstMWI6i4NMQxQqH@%3|2!f&|qV7J_;RY-(^U=C&M;LYE_uuSVY*6h7L2jBcXt! zs1kl&t!Nm5m^KiYlv!*NnZ`)ONg1_m()Wgrl&mYCXR83Sbb6xpge2p5$_b#|R*PsG zTRs|i@= zO~!HsknaAz9PI5eupP!1*j#A`I;8*Zz-QP&b4B?&2P0|Cix=oi({3}23*9kHI2g)~ z%}!JnHl2!q5SaX^Sp3DE`+Ap9UMDQ6Hnn$>SJXSyrBljYE*n{g|(AS zRS3PaEnTT=P77=s45Dls56`w)n}vweOO{=QcBMM|YDgGi$6-FP9iqC>ZJ?W@rJk3W z@{`@CH=4DeFMGY&@C7h7ndiBpLk%G0{euItVrNZ~;dCrlZeEoeX(P+Hkt+q)*x0Ghna+ZqT4^T4-2X(eQr$~O;s^d=7ZUu(-li@@TuUwHEx1N&2>(^v| z|3KQ|kc;}!@v*#j|9!cCbSx)e19#h;Pa6&UOm0ZPdg&mfx(3Bqzh^6Qe6LA^%Lk1# z!klA8QIWWuV^KK^YObh;TRS893PK}bV(Ei58W zPR``$_(YD6Pe?pltu=^SkpP`5yN;LHp$5B4QQbW9$#ODTFit?qL_OmoWN+iR^F20+ z#^?8?x88c=l1%hteq0vPkHGQvyYJ$I_{pDm;S-O*z2Al3t9^@o*c+P>iBzKZ3s02t zB3&r^<&k#&%4e5tt3|W*FmTR8TQ1H6i`Q~u5f}AVt>y-q)FN3%LRTL^rIy;^l|Gr! zpVX+l0NPB}JEf>lHRLUrfkNwdx;STs=YBkp;dCOiYX@?z>E(EJE)V8MvRSE?&~r=M zpztHr9Rn5N51XNkn=v;9c+c!yw=31Q!dPKAkkMo!SFRq)t=mt_$3FfsdFtt>X?9Z5AZ3OP9-qZ2Jutb1iR?B&EkPD3ZK+@HWStf^0@&2dz@P;oYdF;CIqjl7 zDGNzOw#f8;Yj`{Y%e8)ao~4grqYp2x!3tC`S0D9*EpW0wT;gC{nVrdKpJ#Lmbvis3 z@>=a~LXqSgWW>z)=Vvq7n~Y^L9HT0hsRirfR- z3IY#`l@?ObSUb^KGCOk0UsM8vjSj5}O-d7u<>u3DO|c7w^2*JU=|+*N!^fDc>Is6i zJ$xPTd<0An$xlx*QIA9*6w>LQ9IQ7oU2XWf;r9zB^}T!V$+zFTC-)ybVA%QjYAH*^ zq9Ogq^tWoxP-TW@ajoQg&aAh;Gvgo}?MIbgj91<%%30UZsJ;OufS{_artf;vGl*gL5s6N)|O;X7ep)m*#LYlz}WiHVVVTqcwCl{5?P z)r2C7b+TY!>$Qnyqu854gU^6tHe*ov6Htnw&tRjX2lU+ymKbA_CWZ~1tE^=UYr+66 z@Se4g)hGTjmyC8kK%DzNI#;-JHPY0_`tsSspmhT^V5`etOox; z@)arKy4}4x7W;<87M8Dz0phI{QxHW4%BZXhsq0I%EAF)sGqQ$MUa$El+H;Eu-$8!K z*_XLEZ+Ak_v*AGqxicCJwV<3Y=F&cRAm``jT%^yJb2&aeW|1K=2i9++f$Sgb$<6E6 z<M3Q>#ocp1gRyyiqeAaln4$NbX=#gI(@8vyZG4c)+S9!!vWQ4)=_{Rf?p{Pp(_%ig zrt8G)k((gRHC0={UKy{wr2_S8$;df0GilMmD)V~4;;S7R&h46cuu7;>qlR5Kpjk6FECSBcV$- zH)T@+M<}`+*A=6IolMt|yD7W|bc@R1J>qk?R0hSAA?Eh;W_vSs zlg~c$tUPo3wp_nJC`GZfT9QOtSHkLgd>`8G>RHf+7d12 zR5~LrDI2vhCUt9tj6V}!*C!Ty=vI@B1Sqi?25u?)oWgGVBymH!qRwpcO0-Jr5y*h8zSD5Q)C@wXeVV%9FkZ zJqgEUA$>xQufO{{_&~q%=@*{=LQ08*q>BkGetdW9zu>XZZt0Q>C>bYMXuv9MoK0Hr zSof1{s&16uR%2=w7@jQ0(o;Xw6ntp2*igtzCdLnDlAaCHqXCx2n(V81EnoZr38FZx zdVQTJr1Z>%4WUKK;raJaNUvR&r*1yQ2cX@_aIBG8){=k#lS9dEQO%32FT6NcM$&P~ z3p!yyl&huM{q@%I(V-}6t|*FVd!dk~dZSQV{7E^Lt|w*JNl6fj=TIioiHyc-WPsPb zwoFk88)}GCQns-c)53z4PE%Z9QXdg04&w?*G|*@a{spwU56KD)6s8kiGr$Z;&l%6h z?A)cYqTF~S8`#R*4a2kBsPSotGb3Xc*SHP%@v`3ZatfEC(=(EZwpK{hx^Xu|oby`? z8i;-^nvlJYL1-J8sWTzkJSVO1+cHMTKGt?0OT{-(|NU^BBz)-~z42R@M4~6?xGbbk z*zwNYcVGVW3(vn|R)c@#`!jUVBQMZ3n=ut4N%C-uUQHHyOOfHfrf8B0CGg}z>IKjk zw^_$W=N|nxFQkNvgF%iY`&bIfj=yl}%rxm{E1RtuyKlP;M{1U(#m0%*<@M2rdI|xz z4ZBZek?zTKG*Nku!XXA$g*Ab|(WPRzw1G11IPWA&P`Je_MWmxHXt4ce%OI1FlxPD2P3K73cNFfBT#1+&6_4meUEkZAhh%X4tywlq5G&fw`m3J_WONe}7+Y-MS^u zJbPOX4z92x$NX?Oe8`Q)VzH`l|-)@g#rnHYcM4{%g&h!RBK;rUAu`8#m zQQ#&=N1QX>fAElSHsEdAIe@VYf7rB@u-ts1Y>&j78Mv=#80Bq?WIf57WmcD{#>bIBZnl7LvjBx8h9W zK11(f_YsPFYp4ObT)qEd?oypKtjIw;jwyl}|MD;Y_GJNm(vQnRdU?njnsfN`Klz!@ zXh99~A6_IS)yww|fEphEMaj(Ru_!~s7;*q}pi@9(wAcl&RS!@$t3NV$2_f3t)rzB& zk3wd9YV_F9eO5tE0St)X@0&|K!V$~@*oF4Sf-Z$sJI_WP7h+wCc3IgarcCIpG#X80HrtcE{XJ?};jH9( zOUz9{&Vj6Cz1gyhR{iXj?>#u17acrICPcl1CABhS!pe$8v+t5_7Pt{g=64I-?f>82 zwe`kTUE#I&KAy1?#~A|j6-yAxt;H1;qA!j6fOsS?mHGyMpg)3t(5Qcay!8p0hpIvq z!cj$AQHs)1L5X{bff5=h9><9_|1@;T}K zK%T^8Ji!`JO`%}`*4=w7M(wmK4fcLw-(iXQj=EQmg^n}-j7xjVnAqCIsM{DtdYnkX{XZwGq%8s5%8=-_{HkqDuC9Ksz6#R)jMlz45$jKhq8PRFg)UNt{e&K zh>h4GB->BALttkj8tw)ZMrqkeN&cvf-po5T>L}Qy`$=(L=u&hSgA5j>cZjZpDC!<^HY_#j74w}HM{6CL23Q-Dr<$K+47k9rrcz!9m2I?LUu$c`G_TOzZPceZ!Avm0(+h2bVKV7D1WBkHI$LfX*+ z*F|I=vQ%VtG?R>S8j3tXKB+Q-nk(KCv5Tqm zBT!`UU@(n*yc>H-uW1@+J*NE7QtU4Tq`;>0&gE`7g=!l$71SglLXyEGAhnYTmGBUl z(Q6{P2uW_J``jCM>_hv>Cqo|3c3o6GsVhi3`ll>hexiaMXyOSQKydbJs{sW$x3oO@ z;TSnDnpheocZpb*gSGQX0VMdA|9SyaK5-C@ZaVWpeZM4-%uYka^fwQI3;zYVPub~* z7!8-7M}V_0y!LW6QmA#qsz6%nrs|!wHTpnVectH0q@$!!EPY`6am%yO z)&q=MiBThhj>Wx2%%<`QGa-|6%oN_4w$W>p8Cq9g5V^GDb=n=%Xmx9g3@6A0Vh29F zd>J-2HhDi9i!mtbNOd}M7PUi-#cy9H%|g`a6!bNNRX|d7zrK|iHUlpq_7os$jdr1j zonFJE+B@czfQ~UV6g@GRi{0sjWUELHa?Xq>n29^=5YISp&;ROozp0UCwQjm9kk7?4K5(TF?Kz(8r8YL_&Zt}ujPfDA%BB6lB07nGeUss$l;axAeB7P6(5 zu-;TNS!v(sRPI4BUet+tJ7%O=sO=d1-Y#clx+d`BjsRhIJcg?~+w9gu#ta0god!XR zh87EO!K4}GlM-jZr(K!(*YbKWkAy{sDtb_ojzrvH@ZQ+G0v~<+KiJ&5%6rnNe}@zw zhC;|X@b8QH1cp1jMB38FjS8e79i;avE%KU`i}`hRm_y9-0Jd0MDp=wKMCvHlTlkwx z(*ti=xy8s^Sw`vkn>mQ{{yaE$=7m4JRQI2?K2ud7t@WAf?X`dM*!RJc_bw@*o-XAx zInz=LHPVcL!Ixc#OFK!53qvnDP#S%b!8!p?nCUa1hGcTDhT)KblpTQ-Y{qUZU6>O> zQLFAY$(Fs?fiiHTf_Kylb*>vW81Whz$eVl#Ea01OO~(25^PW#u zgfirkX@+%}8ex{-D)M@)AND%IDEFcI9+1gI38c9@&(NIjOVZ@r&^y24y+8Bvo4>C{ z^0hu!T~9DrtJbHghfdx{qu$dF+%t~JNt16cuQ6ynCnH*lQEQAeq=xgM(Qt1b>CQl( z8Lcy7MoxelBp0;Nv%p}{YI-~>a59N0+QmMO6DLt;v-Mf}VE&cth2ItNO?^e#e`KKyhsr7|a1=3nyN7q8WeJT_&}%d$Bxdk0Xyhe6$&5)9UqT4-DJd`v1U3z<7|?L(EgKv zbWfwZ_ULP30&CP+r$+xq2>N( z7BNSDrR`(MT#g0EnPkc3L8~`G@Kh3ZHisyq$BOZ+E2gec9I72~a9#u7gO1{rgr#8t z(sagjpts>~6c80AE?jf~#JWB6>RWHr-Dj;Yyeg2^`qJy6llL3r_p}E$XjJ^(Q+;P+ zk_jU9ghr(rL4&{p$8m9vDM>=eUzg1s$azRQA!Fd8%0Uv4+Spb{f>~P`HTJ7jzg;bJpt0-*(~As@da2oHZQ)hh{`n0Y~H9$Ve0J2Y=D52az3d$rB0L>ssz;J zpKBSI1gi9Pi{jAJd6zOVg*B_}S;)>k@}dp`(|n?k^IF~1350aEow`nm6OeUmF?ED# zyqmNqrnSU$J;~=4vXe2W<(PC!0?ZOb?Ky#BuP^+9?HO@29=%7r04Jvhg^>J~CGiKc z4w&s7HCH#{5Mx}4F`ixh>z^z0w$_(gbw^t3ORu-qE->Sl0>>XddH?B%@N|sv+141T zn!JJh!6{M-XCI1)9Ky`N$L0>a0AtoB@93gxDRl%2and{hj9kQ{K+oQ=7B!ZP_MMQP z%rOGhU8!_tH5Vshtny=NG7D&jMu{l|#H7#M9qn;vI*u)mX=!B4K&pFM9^ax|ca}Di zh&QI0MA0-Bd*nQ%%q-q)8el9`{iy;>RrD!<-b+P1TgICO|B4)Dd7UjJj&eb)NQs&=Hc zzLr|L@4Ex<-09%`sV0Qep=kz24`^X36lu z_O&z?HgYF{8h4~4&ak8l%Ty@&<;WZyTbPIWqx0M;lUovZpz0aR=`sqWL=d8Jsdb_Z zq~lI^r%}33lpQHux8@J4(v4^qd62E{(skNd8om|VN-SwQSWIQz#J|LFPErs7)q-X; zv8&AYkI8d3N2}zP*wSeZs)M5Xrpqgs+G{cbRT}Zrq{25MfznBZjr3=ye^O)_WiOFkZN=t_za{yO3w*R8u2!v83xac+ZSJX?bX_O z*81A30%@&Vu732$qf3qV&-f6Qz4uGDTVt{k2wAC7K=eh}wU|4I8OH~EZTDNpP@yPcVo%cjmdfFi@ z6Im(fSe6;U8g?C=+4{MCKngJjh0|V?M#9pS>aod&P*|b9+{rPk*!FWSX+(j;sWm3f zfHYb91R2GuC13(l4eI7F88snbcCKnNjr?N?Cef80soy6Nv6G9mTs>eYYd|_($xI;` zCJ2;bzUztmvOR96CmCQTE^uQYjX1r5EuWwM%Ftd*x}TwUZnX*F#hIpAefz?N%C@a_ z%T@)_TDMg_{=g&49$+~@JQct#H-!(cNF-b_+Ra3qn4;Gr6O=p}kb=r9ihbOSu!iX( z@nu;XDW0~%@--l3=OO}9jEW56v=dbmnmbZVBt3H@b1$|NJ*k*3Z|otGpeyOW)(87o8sQm4Qr9cgCoW``fnOjSo8 z1K$j!HnyG;Y^Ew8u`rv5iP3JsNKRiFA<2yNApxm@Z!AZ{#^oe9PKTE;d3Z(3{ zU_ctDfRxy{)NPJi9^p#2miLzlNQtp4#sK29gPEmk?m@_4=_Wc;0a9Tt%N|wsthPgR z>Sllm>WUrX0YF;zq%ncqK|mU(05Fe?4M?#7QY=Qh`+yVE!_sJ$y3BKQed*%+6*y~s zW2ypat#5Qa`Gdy>h_DP8mjLk;MqF|j2PKdO_Fk0$Y6{lwYey=gf5;ta%;xya*yV0? ztl65ax#);Z;S`W|cAKIOM~~51n&Z~`5PCiK6^=zRNz_cx*0iW(@DR;USa!i!jD@kt zCdC7QbRRTg36L>8ChpUFmOqy}+KF2yfpl1cCUu^d*59wPlv>}|sz6%nTUS4M=z9Z? zaVY@OzV)8q-D2aza&M+5@n;649E1%32LUN{ha&>gk$@=!DJDxl8P`VDlXe+o6>+G0 zrTd?qI|9cRj>C~-$DlVm#}&Rc@`Ah5XRnV;Ut*Q#7wQ6bo z^oNfx_WCo6{a$amH#2iQgs|knaR-Y<#|LS&+v;dnS-WPzhoJ0S0a6?50{g}W9f=}$ zq6^0daOa(O!{E*nFu$+>vvYGWJJ)C8)OggvaB~Qk|9crOU;Y@bY;D5!&JL5D`2M_f zzw}tGK33P2U8@vM{41*1aV8mz8sty0fUU!%%ckx&FRrhzS0-((Z+$@p(pt4{u73X1 zQ%gvI8sico()FWV*A3cnyV$kkMUlS{ph41$Mm1j`fCVRHrv6M{oO!4lJ#qvFgA;J~ z-QR&b@45>HC+>jxg=28^=uu9(X-6$=Y;3>>mp+95y#E1w^zmhmJ=@*cm2hTdUSh)GuFp$pGb0 zlFZK@U0MRbfuhxNy1}`7dTiiKM~IzJDCJMMtNU;uXvj>Cx)C*b&C z0LSLZ9KXl@ymS3o$@LtyY_d-Vzgq|#$~}$}v!;%@5CapER^6m-le)(B;{W#ihZp{} hRzb2>tRV3002ovPDHLkV1m~6`f~sP literal 0 HcmV?d00001 diff --git a/tools/dial_converter_tool/instance/satellite/preview_satellite.png b/tools/dial_converter_tool/instance/satellite/preview_satellite.png new file mode 100644 index 0000000000000000000000000000000000000000..f984339437bc16bdfccdddcedcd4c4afaf6d4b4e GIT binary patch literal 213396 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

`tKM{|Wl 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 z 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 XfISO?;>Z55C7gg#pfTcx_OgxG+h*O%t`I-Hn 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�v#KV(=S_w;O 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Đ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 z∈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 tp{@sO0000ENkl - + - + diff --git a/tools/image_converter_tool/test/hert/Sleep/alarmicon.png b/tools/image_converter_tool/test/hert/Sleep/alarmicon.png new file mode 100644 index 0000000000000000000000000000000000000000..7e1b66c95aa556a9b29a840e444c6ac356194f5f GIT binary patch literal 511 zcmV00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP37Srz$`^*i`mQoLj$Pcz0pb6;H(1B zoQDIuM-2rMuf$Fo%H1p*jw3_Yh`TD>Qr0=`=74VT>^Y5cWGxUXk39`Pr-T~KrHsJenk)(;_x4@4RP?u-= z-w6NSpAX*F0sj{KF1AoH#n|AJio4Ip`hgkk{{gi4R~~mlFL(d|002ovPDHLkV1n=* B*bx8# literal 0 HcmV?d00001 diff --git a/tools/image_converter_tool/test/hert/Sleep/goodmorning.png b/tools/image_converter_tool/test/hert/Sleep/goodmorning.png new file mode 100644 index 0000000000000000000000000000000000000000..dc0c487bd6b87d1bb8c45525d3bf0cd395b31455 GIT binary patch literal 133331 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

cBCUx$Ov(nND|ePnsgGudWrJZ$o0dawet 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 M07*qoM6N<$f+qsdSpWb4 literal 0 HcmV?d00001 diff --git a/tools/image_converter_tool/test/hert/Sleep/sunny.png b/tools/image_converter_tool/test/hert/Sleep/sunny.png new file mode 100644 index 0000000000000000000000000000000000000000..e4796222f34c9d1865b38d379079a3f4f251aa0c GIT binary patch literal 6724 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 a!1n>k+{WTCDnAzh0000