From 04d373b84e69e0bda0fe271e59f4e45a6706553c Mon Sep 17 00:00:00 2001 From: 17792275749 <812100002@qq.com> Date: Tue, 25 Mar 2025 20:52:15 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.js | 31 + README.md | 1138 +++++++++++++++++ app.js | 46 + app.json | 52 + app.wxss | 43 + components/navigation-bar/navigation-bar.js | 107 ++ components/navigation-bar/navigation-bar.json | 5 + components/navigation-bar/navigation-bar.wxml | 47 + components/navigation-bar/navigation-bar.wxss | 98 ++ images/connectedDevice/device.png | Bin 0 -> 21821 bytes images/connectionSuccessful/icon.png | Bin 0 -> 16439 bytes images/deviceInfo/device.png | Bin 0 -> 15509 bytes images/familyMembers/add.png | Bin 0 -> 1703 bytes images/getWifiList/icon.png | Bin 0 -> 2977 bytes images/home/bg.jpg | Bin 0 -> 17574 bytes images/home/user.png | Bin 0 -> 2768 bytes images/my/1.png | Bin 0 -> 2189 bytes images/my/2.png | Bin 0 -> 2098 bytes images/my/3.png | Bin 0 -> 1847 bytes images/my/user.png | Bin 0 -> 2768 bytes images/searchDevice/icon.png | Bin 0 -> 6609 bytes images/setNetwork/icon.png | Bin 0 -> 119984 bytes images/setNetworkSuccessful/icon.png | Bin 0 -> 16439 bytes images/setNetworkSuccessful/success.png | Bin 0 -> 745 bytes images/setNetworkSuccessful/wifi.png | Bin 0 -> 2977 bytes images/setWifiPassword/close.png | Bin 0 -> 976 bytes images/setWifiPassword/icon.png | Bin 0 -> 1440 bytes images/setWifiPassword/open.png | Bin 0 -> 1717 bytes images/tabBar/home.png | Bin 0 -> 1192 bytes images/tabBar/home_.png | Bin 0 -> 1226 bytes images/tabBar/my.png | Bin 0 -> 1251 bytes images/tabBar/my_.png | Bin 0 -> 1277 bytes pages/connectedDevice/connectedDevice.js | 107 ++ pages/connectedDevice/connectedDevice.json | 5 + pages/connectedDevice/connectedDevice.wxml | 14 + pages/connectedDevice/connectedDevice.wxss | 68 + .../connectionSuccessful.js | 10 + .../connectionSuccessful.json | 5 + .../connectionSuccessful.wxml | 10 + .../connectionSuccessful.wxss | 49 + pages/deviceInfo/deviceInfo.js | 151 +++ pages/deviceInfo/deviceInfo.json | 5 + pages/deviceInfo/deviceInfo.wxml | 34 + pages/deviceInfo/deviceInfo.wxss | 94 ++ pages/familyMembers/familyMembers.js | 45 + pages/familyMembers/familyMembers.json | 5 + pages/familyMembers/familyMembers.wxml | 31 + pages/familyMembers/familyMembers.wxss | 128 ++ pages/getWifiList/getWifiList.js | 32 + pages/getWifiList/getWifiList.json | 4 + pages/getWifiList/getWifiList.wxml | 19 + pages/getWifiList/getWifiList.wxss | 64 + pages/home/home.js | 92 ++ pages/home/home.json | 5 + pages/home/home.wxml | 37 + pages/home/home.wxss | 118 ++ pages/index/index.js | 2 + pages/index/index.json | 5 + pages/index/index.wxml | 7 + pages/index/index.wxss | 10 + pages/my/my.js | 112 ++ pages/my/my.json | 5 + pages/my/my.wxml | 59 + pages/my/my.wxss | 165 +++ pages/searchDevice/searchDevice.js | 112 ++ pages/searchDevice/searchDevice.json | 5 + pages/searchDevice/searchDevice.wxml | 12 + pages/searchDevice/searchDevice.wxss | 78 ++ pages/setNetwork/setNetwork.js | 42 + pages/setNetwork/setNetwork.json | 5 + pages/setNetwork/setNetwork.wxml | 13 + pages/setNetwork/setNetwork.wxss | 54 + .../setNetworkSuccessful.js | 115 ++ .../setNetworkSuccessful.json | 5 + .../setNetworkSuccessful.wxml | 21 + .../setNetworkSuccessful.wxss | 93 ++ pages/setWifiPassword/setWifiPassword.js | 27 + pages/setWifiPassword/setWifiPassword.json | 5 + pages/setWifiPassword/setWifiPassword.wxml | 24 + pages/setWifiPassword/setWifiPassword.wxss | 81 ++ pages/userInfo/userInfo.js | 475 +++++++ pages/userInfo/userInfo.json | 6 + pages/userInfo/userInfo.wxml | 66 + pages/userInfo/userInfo.wxss | 96 ++ project.config.json | 29 + project.private.config.json | 10 + sitemap.json | 7 + utils/request.js | 94 ++ 88 files changed, 4539 insertions(+) create mode 100644 .eslintrc.js create mode 100644 README.md create mode 100644 app.js create mode 100644 app.json create mode 100644 app.wxss create mode 100644 components/navigation-bar/navigation-bar.js create mode 100644 components/navigation-bar/navigation-bar.json create mode 100644 components/navigation-bar/navigation-bar.wxml create mode 100644 components/navigation-bar/navigation-bar.wxss create mode 100644 images/connectedDevice/device.png create mode 100644 images/connectionSuccessful/icon.png create mode 100644 images/deviceInfo/device.png create mode 100644 images/familyMembers/add.png create mode 100644 images/getWifiList/icon.png create mode 100644 images/home/bg.jpg create mode 100644 images/home/user.png create mode 100644 images/my/1.png create mode 100644 images/my/2.png create mode 100644 images/my/3.png create mode 100644 images/my/user.png create mode 100644 images/searchDevice/icon.png create mode 100644 images/setNetwork/icon.png create mode 100644 images/setNetworkSuccessful/icon.png create mode 100644 images/setNetworkSuccessful/success.png create mode 100644 images/setNetworkSuccessful/wifi.png create mode 100644 images/setWifiPassword/close.png create mode 100644 images/setWifiPassword/icon.png create mode 100644 images/setWifiPassword/open.png create mode 100644 images/tabBar/home.png create mode 100644 images/tabBar/home_.png create mode 100644 images/tabBar/my.png create mode 100644 images/tabBar/my_.png create mode 100644 pages/connectedDevice/connectedDevice.js create mode 100644 pages/connectedDevice/connectedDevice.json create mode 100644 pages/connectedDevice/connectedDevice.wxml create mode 100644 pages/connectedDevice/connectedDevice.wxss create mode 100644 pages/connectionSuccessful/connectionSuccessful.js create mode 100644 pages/connectionSuccessful/connectionSuccessful.json create mode 100644 pages/connectionSuccessful/connectionSuccessful.wxml create mode 100644 pages/connectionSuccessful/connectionSuccessful.wxss create mode 100644 pages/deviceInfo/deviceInfo.js create mode 100644 pages/deviceInfo/deviceInfo.json create mode 100644 pages/deviceInfo/deviceInfo.wxml create mode 100644 pages/deviceInfo/deviceInfo.wxss create mode 100644 pages/familyMembers/familyMembers.js create mode 100644 pages/familyMembers/familyMembers.json create mode 100644 pages/familyMembers/familyMembers.wxml create mode 100644 pages/familyMembers/familyMembers.wxss create mode 100644 pages/getWifiList/getWifiList.js create mode 100644 pages/getWifiList/getWifiList.json create mode 100644 pages/getWifiList/getWifiList.wxml create mode 100644 pages/getWifiList/getWifiList.wxss create mode 100644 pages/home/home.js create mode 100644 pages/home/home.json create mode 100644 pages/home/home.wxml create mode 100644 pages/home/home.wxss create mode 100644 pages/index/index.js create mode 100644 pages/index/index.json create mode 100644 pages/index/index.wxml create mode 100644 pages/index/index.wxss create mode 100644 pages/my/my.js create mode 100644 pages/my/my.json create mode 100644 pages/my/my.wxml create mode 100644 pages/my/my.wxss create mode 100644 pages/searchDevice/searchDevice.js create mode 100644 pages/searchDevice/searchDevice.json create mode 100644 pages/searchDevice/searchDevice.wxml create mode 100644 pages/searchDevice/searchDevice.wxss create mode 100644 pages/setNetwork/setNetwork.js create mode 100644 pages/setNetwork/setNetwork.json create mode 100644 pages/setNetwork/setNetwork.wxml create mode 100644 pages/setNetwork/setNetwork.wxss create mode 100644 pages/setNetworkSuccessful/setNetworkSuccessful.js create mode 100644 pages/setNetworkSuccessful/setNetworkSuccessful.json create mode 100644 pages/setNetworkSuccessful/setNetworkSuccessful.wxml create mode 100644 pages/setNetworkSuccessful/setNetworkSuccessful.wxss create mode 100644 pages/setWifiPassword/setWifiPassword.js create mode 100644 pages/setWifiPassword/setWifiPassword.json create mode 100644 pages/setWifiPassword/setWifiPassword.wxml create mode 100644 pages/setWifiPassword/setWifiPassword.wxss create mode 100644 pages/userInfo/userInfo.js create mode 100644 pages/userInfo/userInfo.json create mode 100644 pages/userInfo/userInfo.wxml create mode 100644 pages/userInfo/userInfo.wxss create mode 100644 project.config.json create mode 100644 project.private.config.json create mode 100644 sitemap.json create mode 100644 utils/request.js diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..115cc02 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,31 @@ +/* + * Eslint config file + * Documentation: https://eslint.org/docs/user-guide/configuring/ + * Install the Eslint extension before using this feature. + */ +module.exports = { + env: { + es6: true, + browser: true, + node: true, + }, + ecmaFeatures: { + modules: true, + }, + parserOptions: { + ecmaVersion: 2018, + sourceType: 'module', + }, + globals: { + wx: true, + App: true, + Page: true, + getCurrentPages: true, + getApp: true, + Component: true, + requirePlugin: true, + requireMiniProgram: true, + }, + // extends: 'eslint:recommended', + rules: {}, +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..960990f --- /dev/null +++ b/README.md @@ -0,0 +1,1138 @@ +# 乐福蓝牙秤 +## 设备接入指南 +### 介绍 +本文档提供了小程序设备接入的指导,以确保秤设备能够成功连接到程序并正常工作。 +### 流程图 +#### 通过设备列表获取设备信息 + +![https://api.apifox.cn/api/v1/projects/2900435/resources/394147/image-preview](https://api.apifox.cn/api/v1/projects/2900435/resources/394147/image-preview) +#### 操作测量流程 + +![https://api.apifox.cn/api/v1/projects/2900435/resources/394148/image-preview](https://api.apifox.cn/api/v1/projects/2900435/resources/394148/image-preview) +#### 数据解析 + +![https://api.apifox.cn/api/v1/projects/2900435/resources/394149/image-preview](https://api.apifox.cn/api/v1/projects/2900435/resources/394149/image-preview) +### 准备工作 +在开始设备接入之前,请确保您已经完成以下准备工作 +确认设备已经按照制造商的说明正确组装和连接。 +确保设备所需的供电已经连接,并处于正常工作状态。 +准备好所需的网络连接信息,如Wi-Fi名称和密码。 +申请蓝牙插件和使用身体数据解析接口申请与使用步骤如下: +#### 申请与使用步骤 +1. 申请蓝牙插件:请访问蓝牙秤插件申请地址 [https://mp.weixin.qq.com/wxopen/plugindevdoc?appid=wx0ffb48417ce6345c](https://mp.weixin.qq.com/wxopen/plugindevdoc?appid=wx0ffb48417ce6345c),在该页面进行申请。 + +2. 申请身体数据解析AppId 和 AppSecret:请访问身体数据解析申请地址 [https://uniquehealth.lefuenergy.com/unique-open-web/index.html](https://uniquehealth.lefuenergy.com/unique-open-web/index.html),在该页面进行申请。 + +3. 申请蓝牙插件和开放官网注册账号:请访问开放官网注册页面,填写相关信息进行账号注册。 + +4. 生成 AppId 和 AppSecret:在注册成功后,登录开放官网,点击Appkey管理,生成你的 AppId 和 AppSecret。 + +5. 下载示例代码:请访问示例代码地址 [https://gitee.com/shenzhen-lfscale/bluetoothkit-webwidgetdemo.git](https://gitee.com/shenzhen-lfscale/bluetoothkit-webwidgetdemo.git),下载示例代码到本地。 + +6. 开发插件功能:根据你的需求,使用示例代码进行开发,将你的 AppId 和 AppSecret 配置到代码中。 + +以上是申请和使用蓝牙插件以及申请身体数据解析的流程。 +#### 导入插件 +将所申请的插件导入到你的应用程序中,确保插件可以正常使用。 + +### 获取设备列表 +#### 注册设备蓝牙列表获取回调 +在你的应用程序中注册回调函数,用于获取设备的蓝牙列表。当回调触发时,你可以获取到可用设备的列表。 +#### 调用开启start方法 +调用相应的方法来开启设备的蓝牙功能,以便进行蓝牙设备的连接和通信。 +#### 设备蓝牙列表获取 +通过设备蓝牙列表回调,获取到可用设备的蓝牙列表。这些设备通常是附近的蓝牙设备。 +#### 选择蓝牙列表中需要连接的设备 +根据你的需求,在蓝牙列表中选择需要连接的设备,记录选择的蓝牙对象。 + +### 选择连接蓝牙设备测量流程 +#### 进入设备详情页 +打开设备的详情页,显示设备的详细信息和配置选项。 +#### 注册监听相关回调 +- 注册蓝牙连接设备回调 +在你的应用程序中注册回调函数,用于处理设备的蓝牙连接事件。当设备成功连接时,回调函数将被触发。 +- 注册蓝牙监听秤端数据回调 +注册回调函数,用于监听来自秤端的数据。当踩秤有新的数据传输时,回调函数将被触发。 +- 注册蓝牙设备自动断连回调 +注册回调函数,用于处理设备自动断开连接的事件。当设备断开连接时,回调函数将被触。 +- 注册蓝牙锁定数据回调 +注册回调函数,用于处理来自秤端的锁定数据。当秤端锁定数据可用时,回调函数将被触发。 +- 注册蓝牙连接状态回调 +注册回调函数,用于处理蓝牙连接状态的变化。当蓝牙连接状态发生改变时,回调函数将被触发。 +- 注册蓝牙修改设备回调 +注册回调函数,用于处理对设备进行修改的事件。当设备配置发生改变时,回调函数将被触发。 +- 注册域名修改回调 +在域名修改的接口中,添加回调函数的参数。当域名修改成功后,调用回调函数,并传递修改成功的状态。 +- 注册WiFi配网SN回调 +在WiFi配网SN的接口中,添加回调函数的参数。当WiFi配网SN修改成功后,调用回调函数,并传递修改成功的SN数据。 +#### 踩秤 +用户踩上秤盘,使秤处于活跃状态。 +#### 调用开启方法 +调用相应的方法,开启设备的测量功能。 +#### 停止扫描 +停止扫描附近的蓝牙设备,以节省电力和资源。 +#### 连接蓝牙设备 +根据用户选择的设备,进行蓝牙设备的连接。连接设备回调开始处理开启过程数据监听。 +#### 蓝牙连接设备秤端相关配置操作 +- 设备单位修改方法 +秤端单位修改成功触发设备配置回调方法返回修改成功或失败状态 +- 设备域名修改方法 +秤端域名修改成功触发回调方法成功状态 +- 设备wifi配网ssid与passwd方法 +秤端wifi配网成功触发回调方法返回修改成功snData值 +#### 上秤测量 +在设备连接成功后,进行秤端的测量操作。 +#### 秤端数据回调方法返回秤端数据显示 +当秤端传输数据时,回调函数将被触发,将秤端数据显示给用户。 +#### 秤端锁定数据回调方法返回秤端锁定数据显示 +当秤端锁定数据可用时,回调函数将被触发,将锁定的数据显示给用户。 +#### 完成测量 +用户完成测量操作,准备进行数据解析和显示。 + +### 解析数据 +#### 根据申请的AppID与Key获取请求token +#### 拿锁定数据测量值请求数据解析接口 +将锁定的数据发送给数据解析接口,请求解析数据的结果。 +#### 得到身体数据解析值 +接收数据解析接口返回的解析结果,得到身体数据的解析值。 +#### 显示测量 +将解析得到的身体数据显示给用户,完成整个测量过程。 + + +## 方法说明 +### plugin.Blue + +plugin.Blue 是一系列控制蓝牙设备的命令和函数的封装,可以用于在项目中连接和通信蓝牙秤设备。以下是该插件所支持的命令和函数: + +**重要!插件1.0.5以上版本如无法扫描出设备 需要调用setDeviceSetting设置相应的蓝牙秤配置** +**setDeviceSetting**设置蓝牙设备搜索的设备数组列表 新名字的秤需向开发者注册设备项: +```setDeviceSetting(devicesList: array): void``` + +**start**开始蓝牙扫描,参数devicesName为设备名称的数组,autoFlag是否自动连接秤端 默认为是: +```start(devicesName: array, autoFlag: Boolean): void``` + +**stop**停止蓝牙扫描,关闭所有事件监听与关闭蓝牙秤连接,通常用于业务结束后需要调用: +```stop(): void``` + +**disconnect**关闭蓝牙秤连接: +```disconnect(fn: function): object``` + + +**createBLEConnection**接受一个蓝牙秤设备对象 连接后触发`deviceConnect`回调 +```createBLEConnection(device: object): object``` + + +**stopBluetoothDevicesDiscovery**停止扫描设备回调 +```stopBluetoothDevicesDiscovery(fn: function): object``` + +**visibleLog** 是否打印插件内部日志 +```visibleLog(flag: boolean):void``` + +### plugin.ScaleAction + +plugin.ScaleAction APP操作是蓝牙秤端的通用方法,切换蓝牙秤的单位和开启监听蓝牙秤数据 + + +**configWifi** 蓝牙配网 - 该功能用于蓝牙WiFi秤,在给秤配置网络时使用 +``` +// 首先确保已经绑定了蓝牙WiFi秤 2、用户输入Wifi账号和密码 3、发起连接设备 4、plugin.bus.subscribe("snData")方法返回sn码,此时秤上的WiFi图标会先闪烁(连接路由器中),再常量(连接路由器成功并获取到sn)将sn传给Server验证秤是否已经完成注册 7、Server返回成功,则配网成功,否则配网失败 +configWifi(ssid: string, password:string): void +``` + +**configDomain** 修改秤端服务器域名 修改后调用configWifi开始蓝牙配网 +``` +// 首先确保已经绑定了蓝牙WiFi秤 +发起蓝牙配网是先更新秤端服务器域名 防止域名调试篡改 +configDomain(domain: string): void +``` + + +**startDataProgress**蓝牙秤端发送数据 需要在设备连接成功后即`deviceConnect`回调中使用 +``` +startDataProgress(): void +// 示例 +plugin.bus.subscribe("deviceConnect", (res) => { + // 必须调用 不然无法获得秤端数据 + plugin.ScaleAction.startDataProgress() +}); + +``` + +**fetchDeviceHistoryData** +``` +fetchDeviceHistoryData(): void +// 示例 +plugin.bus.subscribe("syncDeviceHistorySuccess", (res) => { + //同步历史数据成功回调 +}); + +``` + +**deleteDeviceHistoryData** +``` +deleteDeviceHistoryData(): void +// 示例 +plugin.bus.subscribe("deleteDeviceHistoryDataSuccess", (res) => { + //删除历史数据成功回调 +}); +``` + +**syncDeviceSetting** +体重秤syncDeviceSetting 传入对象键值对 + +| Property | Value | Value | +| ---------------- | ------- | ------- | +| gender | 0 | 性别对应 Plugin.PPBluetoothDefine.PPDeviceGenderType| +| unit | 0 | 单位对应 Plugin.PPBluetoothDefine.PPDeviceUnit | +| isAthleteMode | false | 孕妇 | +| isPregnantMode | false | 运动员模式 | +| age | 23 | 年龄 | +| height | 123 | 身高 | + +**食物秤**syncDeviceSetting 传入对象键值对 + +| Property | Value | Value | +| ---------------- | ------- | ------- | +| unit | 0 | 单位对应 Plugin.PPBluetoothDefine.PPDeviceUnit | +| isBuzzerGateMode | false | 开启蜂鸣 | +| isToZeroMode | false | 食物称置零 | + +``` +syncDeviceSetting(): object +// 体重秤示例 +plugin.ScaleAction.syncDeviceSetting({ + gender:0, + unit:0, + isAthleteMode:false, + isPregnantMode:false, + age:23, + height:123, +}) + +// 食物秤示例 食物称只能修改单一项 +plugin.ScaleAction.syncDeviceSetting({ + isBuzzerGateMode: true, +}) +plugin.ScaleAction.syncDeviceSetting({ + unit: 0, +}) +plugin.ScaleAction.syncDeviceSetting({ + isToZeroMode: true, +}) + +``` + + +**historyData** 获取历史带历史过程数据 +其中res为对象键值为 + +| Property | Value | 描述 | +| -------------- | ------- | ------- | +| isPlus | true | 是否是正数 | +| isOverload | false | 是否超载 | +| weight | 0 | 重量放大了100倍 | +| resistance | 0 | 阻抗 | +| isEnd | false | 本次测量是否结束 | +| isHeartRating | false | 心律是否测量中 | +| heartRate | 0 | 心律 | +| unit | 0 | 设备单位 对应Plugin.PPBluetoothDefine.PPDeviceUnit | +``` + plugin.bus.subscribe("historyData", (res) => { + console.log("historyData", res); + }); +``` + + +**devicesModel** 获取设备模型设备模型可以根据Plugin.PPBluetoothDefine了解秤相关信息 + +``` + plugin.bus.subscribe("devicesModel", (res) => { + console.log("devicesModel", res); + }); +``` + + +**devicesInfo** 获取设备内置信息 + +``` + plugin.bus.subscribe("devicesInfo", (res) => { + console.log("devicesInfo", res); + }); +``` + + +**syncDeviceTimeSuccess** 时间同步 时间同步成功回调 + +``` + plugin.bus.subscribe("syncDeviceTimeSuccess", (res) => { + console.log("syncDeviceTimeSuccess", res); + }); +``` + + +**syncDeviceHistorySuccess** 同步历史数据回调 + +``` + plugin.bus.subscribe("syncDeviceHistorySuccess", (res) => { + console.log("syncDeviceHistorySuccess", res); + }); +``` + + +**deleteDeviceHistoryDataSuccess** 历史数据删除成功回调 + +``` + plugin.bus.subscribe("deleteDeviceHistoryDataSuccess", (res) => { + console.log("deleteDeviceHistoryDataSuccess", res); + }); +``` + + +**deviceWillDisconnect** 设备将要断连回调 + +``` + plugin.bus.subscribe("deviceWillDisconnect", (res) => { + console.log("deviceWillDisconnect", res); + }); +``` +### plugin.bus + plugin.bus通信蓝牙设备,用于监听蓝牙以及秤端的数据与状态,以下是该插件所支持的命令: + +**connectState** 蓝牙与蓝牙秤状态监听 + +``` + plugin.bus.subscribe("connectState", (res) => { + console.log("connectState", res); + }); +``` + +**unitChange** 蓝牙秤单位切换状态监听 + +``` + plugin.bus.subscribe("unitChange", (res) => { + console.log("unitChange", res); + }); +``` + +**devicesList** 获取过滤后的附近设备列表 + +``` + plugin.bus.subscribe("devicesList", (res) => { + console.log("devicesList", res); + }); +``` + +**getDeviceInfo** 获取附件所有附近设备信息 自动连接autoFlag不为false时有数据 + +``` + plugin.bus.subscribe("getDeviceInfo", (res) => { + console.log("getDeviceInfo", res); + }); +``` + +**deviceConnect** 蓝牙秤设备成功连接后连接中状态监听 + +``` + plugin.bus.subscribe("deviceConnect", (res) => { + plugin.ScaleAction.startDataProgress() + }); +``` + +**progressData** 蓝牙秤端过程数据,监听不稳定体重的实时状态 +其中res为对象键值为 + +| Property | Value | 描述 | +| -------------- | ------- | ------- | +| isPlus | true | 是否是正数 | +| isOverload | false | 是否超载 | +| weight | 0 | 重量放大了100倍 | +| resistance | 0 | 阻抗 | +| isEnd | false | 本次测量是否结束 | +| isHeartRating | false | 心律是否测量中 | +| heartRate | 0 | 心律 | +| unit | 0 | 设备单位 对应Plugin.PPBluetoothDefine.PPDeviceUnit | + +**食物秤**中res为对象键值为 + +| Property | Value | 描述 | +| -------------- | ------- | ------- | +| isPlus | true | 是否是正数 | +| isOverload | false | 是否超载 | +| weight | 0 | 重量放大了100倍 | +| isEnd | false | 本次测量是否结束 | +| unit | 0 | 设备单位 对应Plugin.PPBluetoothDefine.PPDeviceUnit | + +``` + plugin.bus.subscribe("progressData", (res) => { + console.log("progressData", res); + }); + +``` + + +**lockData** 蓝牙秤端完成测量锁定数据,锁定的体重和阻抗 + +``` + plugin.bus.subscribe("lockData", (res) => { + console.log("lockData", res); + }); +``` + + +**heartRate** 蓝牙秤端锁定心率值,必须根据已有秤功能调用 + +``` + plugin.bus.subscribe("heartRate", (res) => { + console.log("heartRate", res); + }); +``` + +**snData** 配网成功后返回sn码 sn码用于请求验证秤是否已经完成注册 + +``` + plugin.bus.subscribe("snData", (res) => { + console.log("snData", res); + }); +``` + +**domainChange** 修改域名成功后返回提示 + +``` + plugin.bus.subscribe("domainChange", (res) => { + console.log("domainChange", res); + }); +``` + + +### plugin.getDeviceSettingList + +**插件1.0.5以上版本新增api** + +***plugin.getDeviceSettingList*** 获取设置设备列表 +``` +//获取设备设置列表用于用户添加扫描设备 +plugin.getDeviceSettingList({ + url: baseUrl, + data: { + appKey: appInfo.appKey + }, + header: { + "token": bodyToken, + "Accept-Language": wx.getStorageSync("lang") || 'zh' + } +}).then((res)=>{ + if (res.data.code == 200) { + plugin.Blue.setDeviceSetting(res.data.data) + console.log("plugin==", plugin.PPBluetoothDefine) + } +}) +``` + +***plugin.getAcLfBodyData*** 交流秤数据解析 +``` +// 设备device 根据plugin.Blue.getDeviceModel 获取设备类型deviceConnectType 根据相应的类型请求解析 +var param = { + weightKg: 60, + impedance: 5076001, + sex: 1, 0(女) 1(男) + age: 22, + height: 170, + heartRate: 80, + token: '必传', + } + plugin.getAcLfBodyData({url:url,data:param,header:{ "token":res.data.data.token,"Accept-Language":"zh"}}).then(res => { + console.log('解析结果',res) +}) +``` + + +### plugin.getDcLfBodyData +***plugin.getDcLfBodyData*** 直流秤数据解析 +``` +// 设备device 根据plugin.Blue.getDeviceModel 获取设备类型deviceConnectType 根据相应的类型请求解析 +var param = { + "age":23, + "heartRate":0, + "height":123, + "impedance":0, + "peopleType":0, + "sex":0, + "weightKg":66.6, + } + plugin.getDcLfBodyData({url:url,data:param,header:{ "token":res.data.data.token,"Accept-Language":"zh"}}).then(res => { + console.log('解析结果',res) +}) +``` + + +### plugin.refreshToken +***plugin.refreshToken*** 刷新token +``` + +// 使用refreshToken与解析数据方法结合示例 +function refreshFn() { + this.refreshToken(() => { + callDcLfBodyData(param); + }, true); +} + +async function refreshToken(fn, flag) { + let bodyToken = localStorage.getItem('bodyToken'); + let bodyTokenTime = localStorage.getItem('bodyTokenTime'); + if (!bodyToken || bodyTokenTime * 1000 < +new Date() || flag) { + let res = await plugin.refreshToken({ + url: 'https://uniquehealth.lefuenergy.com', + data: { + "appSecret": "插件开发者申请", + "appKey": "插件开发者申请" + } + }); + console.log("res", res); + if (res.data.code == 200) { + localStorage.setItem('bodyToken', res.data.data.token); + localStorage.setItem('bodyTokenTime', res.data.data.expireTime); + fn(); + } + } else { + fn(); + } +} + +function handleResponse(res) { + console.log("res-=-=-|||", res.data.data); + if (res.data.code == 200) { + + // 获取解析数据操作 + + } else if (res.data.code == 401) { + this.refreshToken(() => { + callDcLfBodyData(param); + }, true); + } +} + +function handleResponseList(res) { + console.log("res-=-=-|||", res.data.data); + if (res.data.code == 200) { + // 获取解析数据操作 + } else if (res.data.code == 401) { + this.refreshToken(() => { + getDeviceSettingList(param); + }, true); + } +} + +function getDeviceSettingList(param){ + let bodyToken = localStorage.getItem('bodyToken'); + plugin.getDeviceSettingList({ + url: 'https://uniquehealth.lefuenergy.com', + data: param, + header: { + "token": bodyToken, + "Accept-Language": localStorage.getItem("lang") || 'zh' + } + }).then(handleResponseList); +} + + +function callDcLfBodyData(param) { + let bodyToken = localStorage.getItem('bodyToken'); + plugin.getDcLfBodyData({ + url: 'https://uniquehealth.lefuenergy.com', + data: param, + header: { + "token": bodyToken, + "Accept-Language": localStorage.getItem("lang") || 'zh' + } + }).then(handleResponse); +} + + + +``` + +## Torre协议测量 + +### Torre测量流程 + +连接设备后 必须先调用更新MTU接口 再调用开始测量接口后数据返回 +``` + +let getActiveProtocol = null +plugin.bus.subscribe("deviceConnect", (res) => { + console.log('成功连接设备') + // 获取协议调用方法 + getActiveProtocol = plugin.ScaleAction.getActiveProtocol() + // 更新MTU + getActiveProtocol.codeUpdateMTU((res) => { + console.log("codeUpdateMTU", res) + }) +}); +//开始测量 +activeProtocol.codeStartMeasure((res) => { + console.log("res", res) +}) +//监听到数据变化 +plugin.bus.subscribe("progressData", (res) => {console.log(res)}) +//获得测量结果 +plugin.bus.subscribe("lockData", (res) => {console.log(res)}) + +``` + +### 配网流程 + +配网需要先调用获取wifi列表接口 返回数据后再进行配网 + +``` +let getActiveProtocol = plugin.ScaleAction.getActiveProtocol() +activeProtocol.dataFindSurroundDevice((res) => { + console.log("wifiList", res) + activeProtocol.dataConfigNetWork({ + domain: "http://domain", + ssid: 'IT32', + password: 'whs123456' + }, (res) => { + console.log("dataConfigNetWork", res) + }) +}) + +``` + + +开始测量 +下发此指令后设备才会上报称重情况 +参数:无 +handler: 0设置成功 1设置失败 +``` +codeStartMeasure((status) => {}) +``` + +保活指令 +推荐首次连接成功后每10秒调用一次,可以保证设备不会主动断开连接 +``` +sendKeepAliveCode() +``` + +停止测量 +停止设备的测量操作 +参数:无 +handler: 0设置成功 1设置失败 +``` +codeStopMeasure((status) => {}) +``` + +获取设备单位 +获取设备当前的单位信息 +参数:无 +``` +codeFetchUnit((status) => {}) +``` + +修改设备单位 +修改设备的单位信息 +参数:无 +unit: 单位 +0x00:单位kg +0x01:单位lb +0x02:单位斤 +0x03:单位st +0x04:单位st:lb +handler: +0x00:设置成功 +0x01:设置失败 +``` +codeChangeUnit(unit,(status) => {}) +``` + +同步设备时间 +同步设备的时间 +参数:无 +``` +codeSyncTime((status) => {}) +``` + +获取设备屏幕亮度 +获取设备当前的屏幕亮度 +``` +codeFetchScreenLuminance((status)=>{}) +``` + +设置设备屏幕亮度 +设置设备的屏幕亮度 +``` +codeSetScreenLuminance(50,(status)=>{}) +``` + +清除设备数据 +清除设备中的不同类型的数据 +参数- +cmd: +0x00:清除所有设备数据(用户信息、历史数据、配网数据、设置信息) +0x01:清除用户信息 +0x02:清除历史数据 +0x03:清除配网状态 +0x04:清除设置信息 +handler: +0x00:成功 +0x01:失败 +``` +codeClearDeviceData("00",(status)=>{}) +``` + +获取心率开关状态 +获取设备当前的心率测量开关状态 +参数:无 +``` +codeFetchHeartRateSwitch((status)=>{}) +``` + +打开心率测量 +打开设备的心率测量功能 +参数:无 +``` +codeOpenHeartRateSwitch((status)=>{}) +``` + +关闭心率测量 +关闭设备的心率测量功能 +参数:无 +``` +codeCloseHeartRateSwitch((status)=>{}) +``` + +获取阻抗开关状态 +获取设备当前的阻抗测量开关状态 +参数:无 +``` +codeFetchImpedanceSwitch((status)=>{}) +``` + +打开阻抗测量 +打开设备的阻抗测量功能 +参数:无 +``` +codeOpenImpedanceSwitch((status)=>{}) +``` + +关闭阻抗测量 +关闭设备的阻抗测量功能 +参数:无 +``` +codeCloseImpedanceSwitch((status)=>{}) +``` + +获取设备配网状态 +获取设备当前的配网状态 +参数:无 +``` +codeFetchWifiConfig((status)=>{}) +``` + +退出配网模式 +退出设备的配网模式 +参数:无 +``` +dataExitWifiConfig((status)=>{}) +``` + +获取设备当前配置热点的ssid +获取设备当前配置的热点SSID名称 +参数:无 +handler: ssid名称 +``` +dataFetchConfigNetworkSSID((status)=>{}) +``` + +设置设备绑定状态 +设置设备的绑定状态 +参数:无 +handler: +0:设置成功 +1:设置失败 +``` +codeSetBindingState((status)=>{}) +``` + +设置设备未绑定状态 +设置设备的未绑定状态 +参数:无 +handler: +0:设置成功 +1:设置失败 +``` +codeSetUnbindingState((status)=>{}) +``` + +获取设备绑定状态 +获取设备当前的绑定状态 +参数:无 +``` +codeFetchBindingState((status)=>{}) +``` + +开启抱婴模式 +开启设备的抱婴模式 +参数: +step: 第几次上称(0/1) +weight: 上次上称时的重量(step为0时传0) +handler: +0:设置成功 +1:设置失败 + +``` +codeEnableBabyModel(0,0,fn) +``` +退出抱婴模式 +退出设备的抱婴模式 +参数:无 +handler: +0:设置成功 +1:设置失败 + +``` +codeExitBabyModel((status)=>{}) +``` + + +更新MTU +更新设备的MTU(最大传输单元) +参数:无 +handler: +0:设置成功 +1:设置失败 + +``` +codeUpdateMTU((status)=>{}) + +``` + +发现周围的可连接热点 +搜索周围的可连接WiFi热点 +参数:无 +handler: 返回结果,包含热点名称和强度的数组对象 + +``` +dataFindSurroundDevice((list)=>{}) + +``` + +获取WIFI MAC地址 +获取设备的WiFi MAC地址 +参数:无 +handler: WiFi MAC地址,示例:MAC 地址:01:02:03:04:05:06(当MAC地址为00:00:00:00:00:00时表示获取不到) + +``` +codeFetchWifiMac((mac)=>{}) + +``` + +通过WIFI进行OTA升级 +使用WiFi进行设备的OTA(空中固件升级) +参数:无 +handler: 进度和失败状态 + +``` +codeOtaUpdate((status)=>{}) + +``` + +获取设备端用户列表 +获取设备端的用户ID列表 +参数:无 +handler: 返回设备端所有用户的userId + +``` +dataFetchUserID((list)=>{}) + +``` + +删除用户 +删除设备端的用户信息 +参数:无 +userModel: 单个用户信息,包含userId和memberId +handler: +0:设置成功 +1:设置失败 + +``` +dataDeleteUser({userID: "15820440620", memberID: "1885639"},(status)=>{}) +``` + + +获取某个用户下所有成员的历史记录 +获取某个用户下所有成员的历史记录 +参数:无 +userModel: 用户对象,userId为必传项 +handler: 历史数据结果 + +``` +dataFetchHistoryData({userID: "15820440620"},(status)=>{}) +dataHistoricalDataStatusReport((res) => {console.log("历史数据", res)}) +``` + + +选中测量用户 +用于测量过程中指定测量用户,指定后不需要在设备端进行选择 +参数-userModel: 单个用户信息,包含userId和memberId +handler: +0:设置成功 +1:设置失败 + +``` +dataSelectUser({userID: "15820440620", memberID: "1885639", }, (status) => {}) +``` +同步单个用户给设备 +将单个用户信息同步给设备,如果设备中已存在该用户,则会更新用户信息;如果不存在,则会插入。 +参数-infos: 单个用户信息,包含各个属性的值(参考代码注释) +handler: +0:设置成功 +1:设置失败 +``` +dataSyncUserInfo({ + userID: "15820440621", + memberID: "1885629", + age: "25", + gender: 0, + height: "158", + isAthleteMode: 0, + currentWeight: "55", + deviceHeaderIndex: 0, + targetWeight: "54", + idealWeight: "52.8", + recentData: [{ + weightKg: 59.00, + timeStamp: 1677046795028 + }, + { + weightKg: 58.79, + timeStamp: 1692264965631 + }, + { + weightKg: 52.20, + timeStamp: 1693894960948 + }, + { + weightKg: 46.50, + timeStamp: 1694051103700 + }, + { + weightKg: 61.95, + timeStamp: 1694159727308 + }, + { + weightKg: 61.59, + timeStamp: 1694232070904 + }, + { + weightKg: 62.35, + timeStamp: 1694425016834 + }, + ], + userName: "名字", + },(status)=>{}) +``` +配置热点 +配置设备连接的WiFi热点信息 +参数-model: 包含用于连接热点的信息(domain, ssid, password) +handler: 配网过程中的状态和错误码 + +``` +dataConfigNetWork({domain:"domain", ssid:"ssid", password:"password"},(status)=>{}) +``` + +## 常量与枚举值 +### plugin.PPBluetoothDefine +以下是对给定的枚举类型介绍: + +### PPDeviceConnectType (设备连接类型) + +- `PPDeviceConnectTypeUnknow` (未知) +- `PPDeviceConnectTypeBleAdv` (蓝牙广播秤) +- `PPDeviceConnectTypeBleConnect` (蓝牙连接秤) + +### PPDeviceType (设备类型) + +- `PPDeviceTypeUnknow` (未知) +- `PPDeviceTypeCF` (体脂秤) +- `PPDeviceTypeCE` (体重秤) +- `PPDeviceTypeCB` (婴儿秤) +- `PPDeviceTypeCA` (厨房秤) + +### PPDeviceProtocolType (设备蓝牙协议版本) + +- `PPDeviceProtocolTypeUnknow` (未知) +- `PPDeviceProtocolTypeV2` (2.x版本) +- `PPDeviceProtocolTypeV3` (3.x版本) +- `PPDeviceProtocolTypeTorre` (torre版本) + +### PPDeviceCalcuteType (测脂计算方式) + +- `PPDeviceCalcuteTypeUnknow` (未知) +- `PPDeviceCalcuteTypeInScale` (秤端计算) +- `PPDeviceCalcuteTypeDirect` (直流算法) +- `PPDeviceCalcuteTypeAlternate` (交流算法) +- `PPDeviceCalcuteTypeAlternate8` (8电极交流算法) +- `PPDeviceCalcuteTypeAlternateNormal` (默认计算库直接用合泰返回的体脂率) +- `PPDeviceCalcuteTypeNeedNot` (无需计算) + +### PPDevicePowerType (设备供电方式) + +- `PPDevicePowerTypeUnknow` (未知) +- `PPDevicePowerTypeBattery` (电池) +- `PPDevicePowerTypeSolar` (太阳能) +- `PPDevicePowerTypeCharge` (充电) + +### PPDeviceFuncType (设备功能类型) + +- `PPDeviceFuncTypeWeight` (称重) +- `PPDeviceFuncTypeFat` (测脂) +- `PPDeviceFuncTypeHeartRate` (心律) +- `PPDeviceFuncTypeHistory` (历史) +- `PPDeviceFuncTypeSafe` (孕妇) +- `PPDeviceFuncTypeBMDJ` (闭目单脚) +- `PPDeviceFuncTypeBaby` (抱婴模式) +- `PPDeviceFuncTypeWifi` (wifi配网) + +### PPDeviceAccuracyType (设备精度) + +- `PPDeviceAccuracyTypeUnknow` (未知) +- `PPDeviceAccuracyTypePoint01` (0.1KG精度) +- `PPDeviceAccuracyTypePoint005` (0.05KG精度) +- `PPDeviceAccuracyTypePoint001` (0.01KG精度) +- `PPDeviceAccuracyTypePointG` (1G精度) +- `PPDeviceAccuracyTypePoint01G` (0.1G精度) + +### PPDeviceUnitType (设备具有的单位) + +- `PPDeviceUnitTypeKG(KG)` +- `PPDeviceUnitTypeLB(LB)` +- `PPDeviceUnitTypeSTLB(STLB)` +- `PPDeviceUnitTypeJin(Jin)` +- `PPDeviceUnitTypeG(G)` +- `PPDeviceUnitTypeLBOZ(LBOZ)` +- `PPDeviceUnitTypeOZ(FLOZ)` +- `PPDeviceUnitTypeMLWater(MLWater)` +- `PPDeviceUnitTypeMLMilk(MLMilk)` +- `PPDeviceUnitTypeFLOZWater(FLOZWater)` +- `PPDeviceUnitTypeFLOZMilk(FLOZMilk)` +- `PPDeviceUnitTypeST(ST)` + +### PPDeviceUnit (用户使用的单位) + +- `PPUnitKG(KG)` +- `PPUnitLB(LB)` +- `PPUnitST(ST)` +- `PPUnitJin(Jin)` +- `PPUnitSTLB(STLB)` +- `PPUnitG(G)` +- `PPUnitLBOZ(LBOZ)` +- `PPUnitOZ(OZ)` +- `PPUnitMLWater(MLWater)` +- `PPUnitMLMilk(MLMilk)` +- `PPUnitFLOZWater(FLOZWater)` +- `PPUnitFLOZMilk(FLOZMilk)` + +### PPDeviceGenderType (性别) + +- `PPDeviceGenderTypeFemale` (女性) +- `PPDeviceGenderTypeMale` (男性) + +### PPWIFIConfigState (配网错误状态) + +- `PPWIFIConfigStateUnknow` +- `PPWIFIConfigStateStart` +- `PPWIFIConfigStateStartSuccess` +- `PPWIFIConfigStateStartFailed` +- `PPWIFIConfigStateDomainSendStart` +- `PPWIFIConfigStateDomainSendSuccess` +- `PPWIFIConfigStateDomainSendFailed` +- `PPWIFIConfigStateDomainSendCode` +- `PPWIFIConfigStateDomainSendCodeSuccess` +- `PPWIFIConfigStateDomainSendCodeFailed` +- `PPWIFIConfigStateSSIDSendStart` +- `PPWIFIConfigStateSSIDSendSuccess` +- `PPWIFIConfigStateSSIDSendFailed` +- `PPWIFIConfigStateSSIDSendCode` +- `PPWIFIConfigStateSSIDSendCodeSuccess` +- `PPWIFIConfigStateSSIDSendCodeFailed` +- `PPWIFIConfigStatePasswordSendStart` +- `PPWIFIConfigStatePasswordSendSuccess` +- `PPWIFIConfigStatePasswordSendFailed` +- `PPWIFIConfigStatePasswordSendCode` +- `PPWIFIConfigStatePasswordSendCodeSuccess` +- `PPWIFIConfigStatePasswordSendCodeFailed` +- `PPWIFIConfigStateRegist` +- `PPWIFIConfigStateRegistSuccess` +- `PPWIFIConfigStateRegistFailedTimeOut` +- `PPWIFIConfigStateRegistFailedConnect` +- `PPWIFIConfigStateRegistFailedHTTP` +- `PPWIFIConfigStateRegistFailedHTTPS` +- `PPWIFIConfigStateRegistFailedRegist` +- `PPWIFIConfigStateRegistFailedCommand` + +### plugin.BLUE_STATE +connectState 状态 +BLUE_STATE对应值为 + +| 常量名 | 描述 | +| --- | --- | +| UNAVAILABLE | 蓝牙不可用 | +| READY | 蓝牙准备就绪 | +| SCANING | 正在搜索... | +| CONNECTSUCCESS | 连接成功 | +| CONNECTFAILED | 连接失败, 请重试! | +| WIFISUCCESS | 配网成功 | + +## 使用插件示例 + +https://gitee.com/shenzhen-lfscale/bluetoothkit-webwidgetdemo.git + +app.json 的 plugins 字段加入组件插件路径: +``` + "plugins": { + "ppScale-plugin": { + "version": "版本号", + "provider": "插件appid" + } + }, +``` + +index.json 的 usingComponents 字段加入组件插件路径: +``` + "ppScale": "plugin://ppScale-plugin/ppScale" +``` + +index.wxml 页面中使用: +``` + +``` + +## 常见问题 +### 开启扫描但不到设备 +需要确认系统蓝牙与应用权限蓝牙是否开启 +如果开启依旧无法扫描到蓝牙 需要开启位置信息 部分移动设备需要开启移动信息才能扫描到设备 +是否为真机调试 开发者工具部分版本真机调试蓝牙无法使用 需要换成预览模式调试开发 +### wifi配网后如何判断成功 +wifi配网需要确认路由器wi-Fi频段是否为2.4GHz +调用wifi配网api 如果wifi配网成功则snData会返回回调方法 如果30秒内snData监听没有回调则为配网失败 +### ios有数据返回 安卓无数据返回 +确认页面是否在上一层页调用了插件stop方法 安卓端stop方法执行满导致新注册测量页面回调被清空 需要延迟几百毫秒再注册回调方法 +### 如何获取ios真实mac地址 +注册秤模型回调 连接成功秤后 返回秤模型回调拥有设备真实mac地址 +### 传入设备对象获取到秤端模型 +秤端模型需要设备对象的advertisData 对象复制后advertisData里的二进制数据丢失导致无法计算出设备模型 +复制设备对象时需要记录advertisData的二进制值 advertisData有真实值才能获得真实的秤模型 +### ios无法配网成功 +**ios配网成功必须满足的选项 如iPhone11如下** +- 蓝牙秤确保配网时已经连接且里热点手机不远 +- iPhone11开启的热点可被其他手机扫描到 +- iPhone11为关闭wifi状态 +- 域名与wifi名密码正确 + + + + + + + + diff --git a/app.js b/app.js new file mode 100644 index 0000000..a1deaf8 --- /dev/null +++ b/app.js @@ -0,0 +1,46 @@ +App({ + onLaunch() { + this.initPpScale(); + }, + + globalData: { + // wx.request 请求的服务地址 + wxRequestUrl: "http://device.shuziweidao.com:8889/", + + // 秤的所有信息 + ppScale: { + plugin: null, + activeProtocol: null, + domain: "http://device.shuziweidao.com:8889", // http://192.168.10.173:8889 + wifi: { + ssid: "", + password: "" + }, + options: { + key: "lefudc91611833e18d94", + secret: "eQ50JYimMp0X7uhNLj6D3lTEk4TUUvEG7dvaqKM9t1U=" + }, + device: { + setting: [], // 即将要搜索周边秤的配置 + list: [], // 根据配置搜索到秤的列表 + mac: null, // 选中的设备mac地址/SN码 + name: "", // 设备名称 + connection: null, // 默认选中连接的设备 + } + } + }, + + initPpScale() { + this.globalData.ppScale.plugin = requirePlugin('ppScale-plugin'); + const plugin = this.globalData.ppScale.plugin; + + plugin.bus.subscribe("connectState", (res) => { + console.log("app.js ===> connectState", res); + }); + + plugin.bus.subscribe("devicesModel", (res) => { + console.log('app.js devicesModel', res); + this.globalData.ppScale.device.mac = res.deviceMac; + }); + }, +}) \ No newline at end of file diff --git a/app.json b/app.json new file mode 100644 index 0000000..4e066b2 --- /dev/null +++ b/app.json @@ -0,0 +1,52 @@ +{ + "pages": [ + "pages/home/home", + "pages/searchDevice/searchDevice", + "pages/connectedDevice/connectedDevice", + "pages/connectionSuccessful/connectionSuccessful", + "pages/getWifiList/getWifiList", + "pages/setWifiPassword/setWifiPassword", + "pages/setNetwork/setNetwork", + "pages/setNetworkSuccessful/setNetworkSuccessful", + "pages/my/my", + "pages/userInfo/userInfo", + "pages/deviceInfo/deviceInfo", + "pages/familyMembers/familyMembers", + "pages/index/index" + ], + "window": { + "navigationBarTitleText": "", + "navigationBarTextStyle": "black", + "navigationBarBackgroundColor": "#ffffff" + }, + "tabBar": { + "color": "#808080", + "selectedColor": "#1385FA", + "borderStyle": "white", + "list": [{ + "pagePath": "pages/home/home", + "iconPath": "/images/tabBar/home.png", + "selectedIconPath": "/images/tabBar/home_.png", + "text": "首页" + }, { + "pagePath": "pages/my/my", + "iconPath": "/images/tabBar/my.png", + "selectedIconPath": "/images/tabBar/my_.png", + "text": "我的" + }] + }, + "style": "v2", + "plugins": { + "ppScale-plugin": { + "version": "1.2.14", + "provider": "wx0ffb48417ce6345c" + } + }, + "permission": { + "scope.userLocation": { + "desc": "获取 WiFi 列表需要使用您的位置信息" + } + }, + "sitemapLocation": "sitemap.json", + "lazyCodeLoading": "requiredComponents" +} \ No newline at end of file diff --git a/app.wxss b/app.wxss new file mode 100644 index 0000000..5d4946a --- /dev/null +++ b/app.wxss @@ -0,0 +1,43 @@ +page { + width: 100%; + height: 100%; + box-sizing: border-box; + background-color: #F5F7FB; +} + +image { + width: 100%; + height: 100%; +} + +button { + all: unset; + display: inline-block; +} + +button::after { + display: none; +} + +.scrollView { + width: 100%; + height: 100%; +} + +.arrowAfter { + position: relative; +} + +.arrowAfter::after { + position: absolute; + right: 6rpx; + top: 0; + bottom: 0; + margin: auto; + content: ""; + width: 12rpx; + height: 12rpx; + border-left: 5rpx solid #b6b6b6; + border-top: 5rpx solid #b6b6b6; + transform: rotate(135deg); +} \ No newline at end of file diff --git a/components/navigation-bar/navigation-bar.js b/components/navigation-bar/navigation-bar.js new file mode 100644 index 0000000..66daae3 --- /dev/null +++ b/components/navigation-bar/navigation-bar.js @@ -0,0 +1,107 @@ +Component({ + options: { + multipleSlots: true // 在组件定义时的选项中启用多slot支持 + }, + /** + * 组件的属性列表 + */ + properties: { + extClass: { + type: String, + value: '' + }, + title: { + type: String, + value: '' + }, + background: { + type: String, + value: '' + }, + color: { + type: String, + value: '' + }, + back: { + type: Boolean, + value: true + }, + loading: { + type: Boolean, + value: false + }, + homeButton: { + type: Boolean, + value: false, + }, + animated: { + // 显示隐藏的时候opacity动画效果 + type: Boolean, + value: true + }, + show: { + // 显示隐藏导航,隐藏的时候navigation-bar的高度占位还在 + type: Boolean, + value: true, + observer: '_showChange' + }, + // back为true的时候,返回的页面深度 + delta: { + type: Number, + value: 1 + }, + }, + /** + * 组件的初始数据 + */ + data: { + displayStyle: '' + }, + lifetimes: { + attached() { + const rect = wx.getMenuButtonBoundingClientRect() + wx.getSystemInfo({ + success: (res) => { + const isAndroid = res.platform === 'android' + const isDevtools = res.platform === 'devtools' + this.setData({ + ios: !isAndroid, + innerPaddingRight: `padding-right: ${res.windowWidth - rect.left}px`, + leftWidth: `width: ${res.windowWidth - rect.left }px`, + safeAreaTop: isDevtools || isAndroid ? `height: calc(var(--height) + ${res.safeArea.top}px); padding-top: ${res.safeArea.top}px` : `` + }) + } + }) + }, + }, + /** + * 组件的方法列表 + */ + methods: { + _showChange(show) { + const animated = this.data.animated + let displayStyle = '' + if (animated) { + displayStyle = `opacity: ${ + show ? '1' : '0' + };transition:opacity 0.5s;` + } else { + displayStyle = `display: ${show ? '' : 'none'}` + } + this.setData({ + displayStyle + }) + }, + back() { + const data = this.data + if (data.delta) { + wx.navigateBack({ + delta: data.delta + }) + } + this.triggerEvent('back', { + delta: data.delta + }, {}) + } + }, +}) \ No newline at end of file diff --git a/components/navigation-bar/navigation-bar.json b/components/navigation-bar/navigation-bar.json new file mode 100644 index 0000000..2f56a9b --- /dev/null +++ b/components/navigation-bar/navigation-bar.json @@ -0,0 +1,5 @@ +{ + "component": true, + "styleIsolation": "apply-shared", + "usingComponents": {} +} \ No newline at end of file diff --git a/components/navigation-bar/navigation-bar.wxml b/components/navigation-bar/navigation-bar.wxml new file mode 100644 index 0000000..57a74ce --- /dev/null +++ b/components/navigation-bar/navigation-bar.wxml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{title}} + + + + + + + + + + + + \ No newline at end of file diff --git a/components/navigation-bar/navigation-bar.wxss b/components/navigation-bar/navigation-bar.wxss new file mode 100644 index 0000000..56e9c43 --- /dev/null +++ b/components/navigation-bar/navigation-bar.wxss @@ -0,0 +1,98 @@ +.weui-navigation-bar { + --weui-FG-0: rgba(0, 0, 0, .9); + --height: 44px; + --left: 16px; +} + +.weui-navigation-bar .android { + --height: 48px; +} + +.weui-navigation-bar { + overflow: hidden; + color: var(--weui-FG-0); + flex: none; +} + +.weui-navigation-bar__inner { + position: relative; + top: 0; + left: 0; + height: calc(var(--height) + env(safe-area-inset-top)); + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + padding-top: env(safe-area-inset-top); + width: 100%; + box-sizing: border-box; +} + +.weui-navigation-bar__left { + position: relative; + padding-left: var(--left); + display: flex; + flex-direction: row; + align-items: flex-start; + height: 100%; + box-sizing: border-box; +} + +.weui-navigation-bar__btn_goback_wrapper { + padding: 11px 18px 11px 16px; + margin: -11px -18px -11px -16px; +} + +.weui-navigation-bar__btn_goback_wrapper.weui-active { + opacity: 0.5; +} + +.weui-navigation-bar__btn_goback { + font-size: 12px; + width: 12px; + height: 24px; + -webkit-mask: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='24' viewBox='0 0 12 24'%3E %3Cpath fill-opacity='.9' fill-rule='evenodd' d='M10 19.438L8.955 20.5l-7.666-7.79a1.02 1.02 0 0 1 0-1.42L8.955 3.5 10 4.563 2.682 12 10 19.438z'/%3E%3C/svg%3E") no-repeat 50% 50%; + mask: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='24' viewBox='0 0 12 24'%3E %3Cpath fill-opacity='.9' fill-rule='evenodd' d='M10 19.438L8.955 20.5l-7.666-7.79a1.02 1.02 0 0 1 0-1.42L8.955 3.5 10 4.563 2.682 12 10 19.438z'/%3E%3C/svg%3E") no-repeat 50% 50%; + -webkit-mask-size: cover; + mask-size: cover; + background-color: var(--weui-FG-0); +} + +.weui-navigation-bar__center { + font-size: 17px; + text-align: center; + position: relative; + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + font-weight: bold; + flex: 1; + height: 100%; +} + +.weui-navigation-bar__loading { + margin-right: 4px; + align-items: center; +} + +.weui-loading { + font-size: 16px; + width: 16px; + height: 16px; + display: block; + background: transparent url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='80px' height='80px' viewBox='0 0 80 80' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3Eloading%3C/title%3E%3Cdefs%3E%3ClinearGradient x1='94.0869141%25' y1='0%25' x2='94.0869141%25' y2='90.559082%25' id='linearGradient-1'%3E%3Cstop stop-color='%23606060' stop-opacity='0' offset='0%25'%3E%3C/stop%3E%3Cstop stop-color='%23606060' stop-opacity='0.3' offset='100%25'%3E%3C/stop%3E%3C/linearGradient%3E%3ClinearGradient x1='100%25' y1='8.67370605%25' x2='100%25' y2='90.6286621%25' id='linearGradient-2'%3E%3Cstop stop-color='%23606060' offset='0%25'%3E%3C/stop%3E%3Cstop stop-color='%23606060' stop-opacity='0.3' offset='100%25'%3E%3C/stop%3E%3C/linearGradient%3E%3C/defs%3E%3Cg stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' opacity='0.9'%3E%3Cg%3E%3Cpath d='M40,0 C62.09139,0 80,17.90861 80,40 C80,62.09139 62.09139,80 40,80 L40,73 C58.2253967,73 73,58.2253967 73,40 C73,21.7746033 58.2253967,7 40,7 L40,0 Z' fill='url(%23linearGradient-1)'%3E%3C/path%3E%3Cpath d='M40,0 L40,7 C21.7746033,7 7,21.7746033 7,40 C7,58.2253967 21.7746033,73 40,73 L40,80 C17.90861,80 0,62.09139 0,40 C0,17.90861 17.90861,0 40,0 Z' fill='url(%23linearGradient-2)'%3E%3C/path%3E%3Ccircle id='Oval' fill='%23606060' cx='40.5' cy='3.5' r='3.5'%3E%3C/circle%3E%3C/g%3E%3C/g%3E%3C/svg%3E%0A") no-repeat; + background-size: 100%; + margin-left: 0; + animation: loading linear infinite 1s; +} + +@keyframes loading { + from { + transform: rotate(0); + } + + to { + transform: rotate(360deg); + } +} \ No newline at end of file diff --git a/images/connectedDevice/device.png b/images/connectedDevice/device.png new file mode 100644 index 0000000000000000000000000000000000000000..843faf3d9adc7844b0766d75c2d9d80dcf313a8a GIT binary patch literal 21821 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 literal 0 HcmV?d00001 diff --git a/images/connectionSuccessful/icon.png b/images/connectionSuccessful/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6c7a21e8a7ef52143e8ba333d156900041700bbb GIT binary patch literal 16439 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
fu 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 literal 0 HcmV?d00001 diff --git a/images/getWifiList/icon.png b/images/getWifiList/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a0882a8ca2b76eddb44c4841f12a30413d67d9ee GIT binary patch literal 2977 zcmV;S3tsezP)Px=TS-JgRCr$PU1@L>#})p1khIe)1mZr;VRK_n$A;Ko?g*?X9KpsQFc54|V$78U zuz|R!A_ffRvIv5JaUc~y<%&qaCYUoe=1^1|3Nc_VfjI>@2uVA$t7SX9$x4>c9<#f% ztCg%*rP7am{od=ZdwSl{-NR6Z^x(mR+EGzaT>!LpI2>&lW32%+0#FNp89-G4HUN15 z?h7IE7-QK&h;x!8ods~tX0x5BR;}9Ivg!s4rD7q3*=n`+1JKvuaP(n}bp#No4MGT! zDM``+0Q*fQ(>}(SB~<+i)OfFU3Lzw`)jB{3F%CcifM~Cc0%OPru!Ax7vB_lG!x(b} zCeCx~paCd^sH!N+>x{9f0Gb7}6CPw|2_aT;&et=>Xc;h^37381#& z7W*ggt`K4g=lny)nBt!Z*R2c%&|wA%v`|DgpP4 zKnw_jwi{(x{uN_P^~V;!0L;zJts4;$u^qsV{ZSf*ZI0OO_8~DbG1HsGJ$nw~lTZGR%*?Oha2QwfrdgSg5QiZ{UP8;3PX-&vd|8(3F~;&W0Q2+n zhe(o?7A&oKdHEV>Teqg+#*JISQd1;%@ZdohIy7FJp}``D!!a~EI(oYXprR;LlAL6; zGFrbr{d5mL_}~x7$)S)kv@~EqZ%m(_gvO17l0aX}IZrAC@EZUvjqKi~OII*|{t}!x zLHP*ZC^9kFX-J03j9#kq4AaO%{5 zwEySMoyWa<|MjLq`~A7+y5PO{=Av%hI=cAvFxl<)dQ4T-fkKE~dK!4+dHC=lmMvR@ z&6`ubv7&YB7UT3aVA?(*`L(@hUtiF9r^jOofa`b3Mk$wVi-MZyy*s#7Xo4hccB>?FSY*w zTJ=ZNs1b{ll%-x5Y;sQyA5O=SBmctQz5m3WJNG==OmF879ok~xz<%h~tt*-~eZnI@ z4d%jyE0CJ{H_abRP2HdktU;7b0Fs9rV~{{i3;{wxe}e|~+=`{yv3>h4q^0fD5()kg z#lvxNeYAD8OP3BHm&hF*IB*CZJGMuyS~dJp<*rR00qC1&8ld{Z=w#8Nm9SWh+ilyY zPY*5XXx1#Wl?VcmD(@jlW8A!XTU*%E(~k!@46d8gqd9fzM2r|QG$`_22_*n2k3*G>uZlN)j)!J41v;C{reBY-Mim;93)yZ+qZ9xXP@ng znl)=cmMNU0Sok4m%_KjQ+>?tJFT-l315EB|)~qQ=OdKB6NdZ86iBPoPA()yd0r18f z(_KEgj4^cX{4_?58m_$%^w6za+1Rvc8+Pp2?Q%wwzqx$*0=)QQ&^OR(Zj2$0w6~5^ zB4G05SvYy}bP+41>Fx$&EIud+ zRoxc2VI)71V(N^HlNv|8dUX&V{}W7{_!=m~94@3KRLK}cQO<|U{%6WIj~Vkzml*Zz z*&VA_m)M$8mRSBjrSAlAEr5w-X$|S7+6TR4&YYnVjcZ!BZW+3F|4~_+O8UPqDh0c& zskgW1&tJmWv2SYYo;#v4z={>W*DEq;d?m`7kIvFYtEx(AEyMCW{#Z_r?}Q0cvG%Yh-mgI7Ck#l<+9k>f>V!>O-sZ=>~s?DA2F|+%&BSRF$cE*>O1D(oP{G9 zV}A*+r>D%VNqiK#mBOU*sF%KR`J8j^^4Oav0Lh&>Re9JDR5$PJ?k)w7d2~fl#sJu) zZ;&c1*K3?}w?}@x79xz=y;V-({fKk!@vym90EG}HRaGgr`XL_q@9phE9%&EL| z!u|833qWU>N7tSlbY9U}PM=6!W?yHF^)~d{lR~x5i+AYeGtYa zcM7{}u~?p9jL|u~PEJnEsHmtN0G{{X-mq$U z*k-dORIgs$^X46+0CdL8CPh(}GR7u{6%;-iBZNriod3q#1v~D<`ZWWK3$s`(LnTT2 zNC*+@qwQtN{wS|^-{EjfFq_SP4aAUu0VL(lJ7%afT3)V6p%-Bi=bUn%0g)j97JI=^ z7H3fy-}ph7(9U*seTly)8VaCuZKP|E-+FYG_P1elc?DgAyp(gkDy*+TEFPwfn!fsZSzyb9jHVJrL?fy3dT4-(MF2xx0@po2&sBltIf1Ck`| zt8gD9@Pt1lDIy~y>2nyZTzn3LwwV-eHKENi^hd{-t{3|p#y1581t;{}G-=>GC?V>9 XUxfZZ(-}`&t`<_2$p6#5^=Y00_`J6NH$Ha3m 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 literal 0 HcmV?d00001 diff --git a/images/my/3.png b/images/my/3.png new file mode 100644 index 0000000000000000000000000000000000000000..ed9edac58021a09bbd4b8a760a8354fdec45ba92 GIT binary patch literal 1847 zcmV-72gvw|P)Px*@kvBMRA@upTU~4vRTTct%HXv-GOOOwb8VcgOZNUFCsgJ}zZCjrcKDOZ3#3gSabaN1$2sY$q$ zGs;#FKyGR(OG;7=2yX%?E7X`V{QY3;Rdl_DB9VT#vRwh>XtX353Pb>U3qYw`^S z0sdGSN;FY4dfO(Cdk?Cy*t10Z2|$aSDl3q_iy7O3;qbRki{NThuty%Pddo12$P5}jaR&J-JOOC151b)Bn%4GrgVG2{ezJ04#k zL;vM}2qw0`We{~~psJGk`W`DrOMu3~J#_n25$(Brpie8Ik~LO|fh9mS-n^GUZ{(9& zOy3#2FIe9o5{|4f4qze{dk%!d#bmr~TNs-I;qW(^^jQEo9-p2B{|TVNw$S1tyr_iK zho~lcBW+d|z(g#z3xr5<+3e67MpGahZX5^DNStM<(@AbAuipT9^=gL}I3wq4*D!ow zzZ0fGMbj6j6ZBCJCgROI0eaVoB>!u#gJzf|Ue?ewAdvtAAR1A@EdBuee!%B*q6W#` zaYyuE>g=U=Y6b z8z3!P21t@EkWK*_LPsKM8sL{8ykJXP29Xs&y{ija>yP0695t%X2f4Z$@`^`nFIATS zzY2uIFVaZX(&r?&q%m50u)7d%e73=v@6cb?O^2r4V3@V|LavF}s*6D=fPQ54S za{_E@g;=VVW9k4xB7GgH@#gIW`p`3gJv~SXfR``l02mnYVC7_c5Dcy*H6Ghfz^h&X zH1}XDxL>S#iy=H%RWNvI=HtNtg4Xa%>zOqQ>vyJfrk?+q`T%A zpzRK~9t3bxcu?dRu7)K*SCS@XDgYoR2cXDUL_RupWag#mZz2;Ko9>O_D*#|p02H;; zbT<>9bBSKK0KNAgkn97b9M?X&xp1hw95i<>peQ*_C;;G9?}NpoCP1pFfc)5M!;@YEG>!?c z4|-uF-?#zX8U&>5N+Sz^Q9`j1O{uhWTvd`u>(+zmgWl6r&COoU$KxI#*Lt38BbkKW z(`_c(V*gFF2Q?j3Rt9Oo0;5j!dWjmzw&&$iUmvuej#?MInFz%46g#w{0=~ze0Ewi) z+aP0>OG0KM7W1s&<(oI5ojL_Jt}Oi4$ApNkx^4!Uh4(;SwF)$QwzmKoX2ClG(A8yc zu1rQmQoeo-APJOXiJJE`44OF;G<~}FK_>IcLR>l}L&1wq-`SPgI@<|zzCbe3cc(#S z+@;fq7vBfr9VdnqZ7$0AAP^24SD>S(u$zlt|I1rJb0+!ekQvE6yPeGYpd$O0P;ISI zaTj!TFM@--VdJDOQ@(Tw!(SY<50DTG>6?+>A16QE)T32l(qacg85eS;TDG-T>C-N*syrWyW(o=IsH{)gc-)yJEr*3b<3kX<~+fJEjn9&d$3^syL{6S`=As zqPn_U4taB4dD)UP($f4k2%;-0cg1Q;+Bl-CVC++L{i7*wX&!5eQBMYgn?QI8jHleb zb(r1wXanP*qN?AECIWYJ^B*3SxnNhJUk7+FaYt6CQANZKtIP! lXC+xb?q9U@SFe9o@Glc9_S&O=zOeuR002ovPDHLkV1i&)NzVWP literal 0 HcmV?d00001 diff --git a/images/my/user.png b/images/my/user.png new file mode 100644 index 0000000000000000000000000000000000000000..8d7c532fb139b055dc5759292499c26a783dbccf GIT binary patch literal 2768 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 Wq~F}F^3W6j0000m1Pch&EY zHv`SsQ`KuNUGH;Fomr~8>vq@s_IvNX`|edr@9IU877BpTz?lA@Wk3;77;$6+!vF>F z1A+eMb^;+l2ReXWpf%!X0UCi_z|Q`kZE1f;9>j0A0U1CsPz6->A5}m(qTwe>AmaDJ z7@yMt)C09ZUBt032|GNG6i9sdfXP60|1kp?VXH+47zRx1KO$)WJ_6PO>w%3x*iy?} zj3S3vrj!H60kaW;2pB)y@pJe4Qne1yT%L4qO1_*lbIt(gQpPJO(t| zY)e|mM1d3l-$3*lZeO!-3!T6-z!PLx$V(;(Bn!9*SO^Ta*%q(T4m<=ri-;d{J(=Rc znG3uCd>1JWI~k6+2a6E*#Pzt{i&YN%5SVGVA(Dd_4cr5)0q(}d;Vf?LL43dhgcn7M z!@0~v+@l4Ed*(XaD3GbZ;Ch5haf;2hNaAM-;@*7| z7Y*&*B9QUG!@$+Jw5yf?;@&L;9zonw$KwWpoC!P$9A>v6l9VwGaZk^*+YmFH+|^|R zKR^T(N-~cC@N-}~@EaVuZsOD)WEAjMq&U35e8jyTWwRYoaiTzuL4+*GA(eMH3~|qo zvD=WrI87k)fj=Mu4JF>97;*3C+ib@{IAso^0N(#zEsy|kFYq;+?T|Q+uOiw;o}EV6DUbr-e&A>uZIC#dqk%t> zT$akDuuCAt2ysYHmBfr{L|ZAc~P@O?yEOAF}|$VlKW zj)_i*M zf*jOi#wmg6qm@8KiIO|MNXZ$IPgYT`;?MG-4$H>Zr=fTE5pM6*!(Dx7dphXdv`_Ee zv`_D;*{gT2uGfRXUNpPkO9pX1@a9k_mD0OLe?+v4W(x7*&-ln&|TBo(G+NuXrWv55c5$S?%s3_R;-&s6 zIsWu~(QIweyI9? z3#jSvug!Y%?^cC(zrS7YO!xINjNJ&2mOl8zP~U3RNO2^M0?Zh#SQ6Z+DsW1LQoL+| zf7+7&@mC%*PLW|ju``Mx(pC*6kWD-wEcsKHc7vg1hythhNhxK$^PkF zbZs~b@p;O+`p_1>7^?ecojvm-hch48KJdq2 zfm{guz+!_O&DScG;g6i>ugvxxJbqvDnbvsSlJK^WX04Yh8mCk!!*4smH)eVqF6EvO z+LbRzkwoDh;F*Cxe1Vhih&*`>a(K0$BgZIti!Sv~$x^>Kxt)555;%N>lC!i%Z`Ev; z$mV8xpZG{?YV4%Q9eDTyt?9T2`aXGUi{28;bMmrKA3e`s zIk`-cyG0LhBoVrZ6v$*`QU(C>vr(VD*jHJWZ=Q+INg@Gg>Lh&r-$R>z`Bu2TFNWb? zQ7-<+&hs6bpDkU${RD`pSP=Q4e93xSoXNds_{u9vl)P9U?=+F_iG=5SLV|#q+1BF=f1n#AzY{czJ`?cF{ATjji403zhSy zsb!bQ754%5Yavn~)2+9|Ssap&|ISl<2|FpAD3W)#>A}kvg<|SSesQvId|AHfCOR)L zec+b?ffNHHY%#?_{PI-a*rMFz8i*4`vT~~)yk>E@&TLLnoQMBcr~2d;YoUc=I3SQJ z`)qLrGs~60yaa|;(Qu+jme*?S_q-F{ZuYo&)6}w=m2jXB*QsKAfEMsPb^llkDs6v89nCTJM{Lyt<#zZ{&u@a zo?NFjf4I{)25aslrMRlp(<|)dAOuo?hl}DYJW4Gyn|u7~?eLDl|8u)Y?t1Hs?h zfvdlq8mEOz83q)nz-YTIu?qz_?{Kx$=rL<|=xuLpiN1Hj%_4bgiyr*<4&z?r%qeP# z?S|URXcZ3^6*g<8fl52GSKf97k zi{mDd{I|h4+4W?T&nkl{RPku_+VMrktHd>X_3mV^;TDm6+MstCogZ81*%kF%6_2i> z9}+NL|Jc@=npzu)h{WpcubWNkii{d&zBfNZ$yV`b1*yVZ#V|F_wie^{fp~~lBo`i` z9%5xQ?RJy2KLt6)pH&8vt>V#4Ci&UMxuaUT^&vewi4c!S6kzV5=`Xr7fZ2P^O;dF& z7od9ejWak?;$S*@QeP-D-k!uNTDymK^8&<@h%Q43cvc{0`?F)oDU}GZh(rfgY_={X zXtvM(xG<;US%Gx*8GmaQ<)-gj(@Z4K{a4$&c87I!1`ABytJ!Cj!E~yCCksAy_UVR0 zD6>g?vV=7BZ#);?a`)Te`ubMAJFKJEx9Z(@za6f>;id4lbY6Qfg*l4h7iD+Ivvt`u zKX~)acN&CO08A_;-Mh!QvGt$I9bz17wY}A|CEL1H zpv7)0>|kS)aVW`QBfOLL=7^ET@73(H%3xYmz;MG%rm}vwas1H{Bb9u+cl=p_Uqvx1 z;b!((WiZVuV7jF=6IoNQ2Q_`@wT}F3d?!rI{CyB7OjPoXq6#z}eNDY*3x2k#KwP`# zGKIDtv<;2MYYpcdmigrX=1ntxj~g2GuC_Ep6}W^J6=<~E3cFajRX6NCPpeW(GI^Cb zOVlYWF?!4@lg}u_X;gt-c3WW=%WIAIoEPWeKWl2{X7xCGnp#ktXI$>#m0IIH>lw~2 z6)?=Om&v@nMGug5gEKHH1H+sm#2FP7n^{Y>Ve541+JI_I~Y;2WE16Or3a zG_C=n>Eg4o${q*OLBAIZz%U(tCbO|o?^(IkxTwtZ(aNwZk20Rjx`|7x)#4eWjW=Yy zxkYc@*y!06bm-T_fI#YOG{koPv?gqrqZZ({6MW-J1Mc5AR2sndv#%KMc^74*!@Dgq z$*I(V6bJxsY}Py8+ivX6EXgD5{(1h1ZXashKhHn0G+-RP`|eh~bxpl>`%xUqK?13@ z(GW*)=Zf$Sv$@FJNlMYpvsKqt1HNUpI%4i5<6=RY4!?dUywf6+oJ=i9f$V2Zz23Rx zGxJI5_viS=omQn&JX&pa7$$xOZuOiDN__Dc+(Cx1oSDx|+4fF@`MsBtI$QDx^ z#NHsGpS@we-8GPf@3Hgzm2Rjfe%yE^@Ys3&%0LX6Nq+W5c-!8f@fU{V##S$+oX4X`(z(@lpmkuD_?YpzrqRYB&7j-&tKxN`0+`; za2TT5gU*+1RM}T(Kxr7i-F!6DKJ}tFOyC z{HmkusSK+CR~@C6tiCSm@RLkjxdU{E(5_e%s`L1Y`CvXIBGZpAaPl3ICkuetR$Js$ zwzbmtX#>GCr>e!i7`~13vhbZ+sTQAFsSe-OuJ>+kwk8|MDHY1F`{(&5E|{T?j5SSY zPYCVm7sGY`+H71r$Adfrd@}HdQhL`x_i!Ar*kXem&uLZa@W0IWRpw>Imx*%SZoT7= zYqZ@z_FN|l_)&-Wc_Rvp)fU@zg1 z_vpd(yY=9w4SLt+X1%wulTcHq9%}F3`#n4dwKSmk%L4chEmpD*8=>S?k5clF7-^hf z!Hl{lz3Z~)!<%ZGUt?An@ zhqp;@l_A$M$Waw-O#KlaPUK)luorFNi{Y)`Sr*>h)M=c))CuhCqVK!Q!ke#pA^f=% zhartbi6)6A5Dj=e-PX9Bzpc}nXFb^W$m-UPumR?j&W{O~?60&YqwYsTQvmYC5dis<+&?I=pAa7P+<&C%b{O ziPD1%6~v|k%YcPxG%Dj*u|@A#u_e?|QKDoon4y-QJyj_wFHCQi`1)48`=uIv-xD8c zO?6GFDP8SBmN7(~oS}LUfHA-l$lT0=R&e|TCI73HYQe1WO2OeHmHb%Zqm1a&&_CIu z2UpkY?XT8qtt;hvMzZLL#lfiiV2r|`cLMJLGgEJqcUZYq53bxA4g$OKvr%V_SMsNp zDY+G;N=`+wk~?}hIfc23FOY>V$B!D)(7XE3+I#g-cOTlG4th5=>)o50^q!hVz5Cs5 zdQf_!Qp$T6Bu_NkC-6K{ASol*i}qTb-u_yhbrozSraW(S(k!;<9XyhU?_lf(k0m;FDIkXgl1!r=(Y6hVMIfEPb4i;ckvNOzh+zk9tos|D z1!M%MBva@?v}sdf6-Xnp7m;KR&l6)nZah2W9tXTy?NpLEbODdW`rvp3vJbJLL?UrB zPb1oLOvJUv8h8Q^7u%7zo*<$P$4tBeX#*aP^EncUQ+No`hGQmPfq>|uWO{sw+t^70 zQ-nkW(hK}Pf#*pic5*MopQkJlfdH%k)+G2`iNtEw0BkKze~6 z05YSv#44H*Z7$`hSJNR75XpdVCq)w_iNpX6_z9xTrJQsL1Yj*m#K1@-G4dNk`p~qH zPJw{f9RFyVuOaa+k7ANKG+ELu5P&}cuUK#$iMMzK(YDfx6#~(LUm%8D5=kmpi)d46 zFMVf)KmhuHn~~utlH^$r+yd4VP_;@R0Nub%q#%Gy;#q1CZOF3xY*q>cM9QFV1Dh}ExVFTd)Bx9E!{W0Y0)Yb}ks&D(Gu8v&1X}F4xLpDP zk-+PE;NLddAaOQpfg7>0K8>9M0TH`@6Yx))?T|Q+e*)hjh8iB}#BPCr2r&CG@QB@p zNF2kXh&Ew+-FLGpw^pGeRz-IJKLULAnj^7^Fk-{gi*_3_fD?L_gTLc2)!+ij_0vX5UMm7RhBJQDUzU15_kO4kJcs%}qtWV+wdVoLT zQqQCt1p?w5=rQ18(zsz?k~Hrl?$M*TsMmILX2~V+iQ+zX-CA=Jwt{Jf0fd^Y>x*^H3h%|;6fl^vn^hs6L=PQ z0%*0_mXwl-0vVtf;qf{j$g$UyjHL&Wm+CQKpUt+Ug-jO6040ct;`xZ)MUp&i2w^+} zG}&xRTJeHF2FL@>My%kDwb>T8vIBSucnJ$Li`a>m1TugM%mL;DvvIGh+bT3*6=EyG zJ9sQ1d8T-=;z0x6>OV#xdX;&=XgiH^AiEHewl4tpFMl8b+5JV6;Hgrt{Nd89UcY-2BC(!vLOZr0D^&mc?rTn zevt#PmOXP2E&y$Z6karkBW~Jd><3 z{FYghJf@c+U$^hxNwZfi-m>Jduz)~-h_HV?)WQ@vkOv?qgP8yGWmFgmy#?sM73dEy zQ4k0rnO~b3{=d&f+%LiU|CjuKk&9qb7~QoL**OqXQGo>Y2pEMr`4pn=2@LQY9vtk#q*5e_Z>+piT@7msQ26)hub@ISBx&28pOVF%qx( zOe`Ps{7%Ow7LABPAmA}f7n<*w8Zih4v6R&+k|KmMv2mlbM%p-pd70+qm!+dnFkvpA z6!hvORu-fa0qZXt5(x_+#iBmuT~54Cgk|#iEWz{xGvinNkpK>gEC-Eid(iM=Nbf-oix(aZAC)!nX1A@7!*|zh9C8pD2*w@ z44>;w1c(_R4@8G3Yw^z2%EX8?-FHAOG%Okz*&4t^QMMyO)42c+@jkzO^;1=4sITCp zt`sk5O$x154@MsseUeUk;A0C=23}jFVi0+Tadn*=w^kS#t`3nt?^Uc}T}(HwVa8($ zR>?VUx1=^zV!p>$7008S=f}!_D-D1aREpVvO4>SvwuV`peb7X)x%CbsDI-V+2&Di9goSCrLVjdKkYRjliSV}}tF1i-ec=V;5+aBN@>y|-aore(6$e%) zgEVMgq(;=>u&mO*yMkEYG+VKC#k0KoA{|l7;Eny!&0>gUFe;p_@F~hTdS@k-Rj{t9&Ey=|YRdufp8nFnZOZXh(o(hA z-1%dsnn#SgJ6b4T>Mceefxfe|AXQCcS-jXlQAnIvcnPKEP&c>j+lex63S|QvjVP!7 z8U;YW@e%^|xFA1n0)8#US~f?MVJ)auP#BRUJhi7u8hIOS7SQpF~}Wp<^N5< z32C=t29N$J7+%eNtQl^2_%L}79KLU%{bpOPYdd=uhr2fl#jt~yDTfc}h(tqgb;#lg zDex-;rrZ2v+g`V6^Al?QH+(FUwwe9Pw6(dvCv#~qG!66nFwwwK{oV_pFNoVBzn~o z43X<1ji3JgmL(7bc#RGh1x9%;w4cXWXP>=HtOP%D?Nt3?RAy%of8_^tforkTv5{AZ zzT=`9#R?&?s{6<@C1+9yPq3b0Pe&CBK-nbA2-Kys#i!Bsr)1Sn4b-JZyTjMgKZU=s ztCc3ASUTSGVb}LYly9L#4GJ-7KS-q0K)yPLHAIb)(DV6v570-F%a*StIw&EoTIwhr zxZhe-r*tXa2>I;?qaCmyT4`x-SwIXtfQJYn<4S#uOH)E(t zBB6o~4TU=mleu~T%p6oImvQ43Z&Ms9wGxa6osF{jSp2eX5*o|cFWy%kgA#l-obNir zPNYFL@{28!6FlX|_JwAY6X|5MxG$%;bxn%4(%-)P>@o&GE2xp%YW{I=1jBlHI*@Hb z;mD!vyH`06#RDK>ReL~n z4cCmpVL^I#(x{Nh4?U87(-p;jw1wzsMS^yM4y+)6TATuR<9I#Z(lJ>A9Vc5&jBAUy zkX9U9daia4e;UYFEm}h)_RBHY5H-*;eg(HN%+%5}Q|9H1{?%Z`&cX^=IMC6=1-uSN zV|pR?8SQ>N>y{>LwjF1^M~In1(=8R*ES_nHUx;)`IEeqKE3OV>GgUEo$%~!JDYTzH zOe0=B#(jjCFP=8B<7(${=!_T~zc)RH>L)lsnxIZ(4B#6j_M+o-vA)617_kS;e3V3( zW0)0U-$4+vnceEuK=)PprqIk8512?1Px#~`DzgAFHXQH>ag=U-+Mgvbm|=;HsaSe% zAT1KWaCQ|8mk5oLRBFz}I;Tg~+}^G9hsJnDik%v`@r1);PlQC--i$Bd#1m?|lWF#2 zc+n%P_c_`TdEbp;RrgXm0o{AT?o;H{?W zQ-F+d6xT@N0O+s6Q*(Ea@#lm^OX-_*B?F6N;fMan@Fxc9|dz4^xAazI2%%Mm>jZG=0E4% zNKFf8@zMsxArEq$j7EJTK-aG!6GG?Y9FMpw$LE|o=WSFeQa_B6IyJL3Cgf|9S7)y} z@Sd3KQ%1`qMO>#*8xy(^q$=~I6^bUXBqPp5K)Pl*fJXtB&r0CaI>|4|k$X&Nci{X_ zbckm0ngw-^v!*SYLyb%|$>|?1=)MXo8OsFv8U@V;{A9vhu*0#oF>jY^BzPPXiBx@X zsx@AVe>+9{W``q2G?`_CbobCuF^_b;lI&|~PN|;_2}%SF?33jv^*~_w3s4eC0U0MG zAJsO`%m6^J_R%Wqr+vY-|G`7CzbI49p~3wJkXG<8=s?{swJj-+ybC#spVcb#qd>gC z@CgYCuw6|dZu*KwlQ3eCk!@BFmVjq#ovm*&YAi8z?1zDjDUW08Ri)ZjX#Alfj zUtL6)aO_Df zJuFoQaY|IzzE;QaW*W|qQEN=nNqSF1K@EnrEP}}jW`&s-JtvCOj;poUsf)JdS_D(C zDPp=WEz7Yi$?3^FZ3p|MSs`!QTtfDih6*w@37PG}iCW3&VnnR&7Q6|$RvChYNQE76 z+3DD8<5_iQpG&fRG%NX)j9N?jke5jU{Cbbu!0_(27ds%qkIv-u!RD4>D=mPWnofjO zQcDcK`)I_&rErshMUB$VLAe8tB)p4j5+<61Qm<=>ob=GDA}KAKvtC?o!%TuGi( zYSS8|8;1f{f4bv!#Go7-nzJ!KQ@Qbr0!h4?;!tunBB~VAcDF)AzS6XOT**mcPA)}s zbjypapG}iW+$uo(i06u5I428rxGS0P^C>hkw6KNu1~2b}B|$W)SjZUfr69K#N&F$;7^SgH1La}yHT&4x0@#ezwqqHqzG<8`z1?sTZFlQ z;Bx{Sy>Fd9hqwlV?{5Y?g7=}M(AHnPsnXct16G*N;{)h0wdIeV#-M0;;C}_Q z?5>4lAF2>6m3V!(#m-8;9R64^Qqosu5VXt5bSV9uI06N{hB=b&Va#b}mtHeMLKQQQG#|TyCO1eDu_MPHPFDNJ> zbWtS9y=O;~&KhWjj|H@P40YgT@X%#0h^fl${;?@mTwUV?O$+DbX>0>ML=1rf!0v$2 zd0^LsW3=yS8HTquWykS1EcBOkbASFK?_Y9$GDChXa$skRuFr%gbK;S__3TDCLFPvYUJoi=)0>pnGe|^ zp(5;k^2`HaBJgMyNIiq#T+&=WTIyj>FZX2Hs%P-;o} zm%#Vh*%dqNKQHsy`~Tj(3_QCC?xD`*+szkdHp+HcWswkEf8+KoRZR(MsD%yD4^Vym zVK?)o1})k%)7<+!2~{*lI8-V9i_y`M8cU|>%Gf1zm<`1(`g#Elx$ck=q~>D_who=(B(^S*D#Cr?Xv&1Wpu zsv#9>$QmSRPuMZWOC_Xc@9P6w0Y~icX*9iQl??EC%`%%u#~Oug-I7SgzHDx9%)g)x zqib2P3=NUbE4B>uTXc2p7J|yk%GbG$M+tD} z;}N=Q#GdIX=JbGf=#>vAgq!E$GK^TyN*#2=0kJ2`PqpeKD|nb#{*Y~61r}2&Er)ZO z?#rLo&FT0u0gu2XgOesN7whK_YjmO?(we%xNq6sI2whzcX-H|2 zil-W{UO>{mo2MT8#6oPoZ;MzjF0-VbbEEO{}Wc@BJHJzkCc?`^+l5 zW2Cac-ofdvURb&~dRBXzLsDSBhUuVv8;8DDXd&g%!Vrs~vMM(zrz5KPib%c)<&{KP zf})AoWgbz2Fh3NaV^>*F9jpSwN4(ldg_k~gnA!H$p3YcUxqlgF|Nbls3&^SQ*p=re z8C2wfI}ab|1m~Wf3>mme8UUq;jT&ofCMMpS2F)%TL)no|QV84;;7mrr6emPuZ*m{a zC=W+jM*5BJ0};>f`Rg+FSv8pct?|b!Qzd_{ZrFZoGULZIxfDw>YN@%`qy_pxWIvF9 zUypRKYd1@`Zv+Q_6>-mCsBKy=o<*`&TmQ6lF-eKi>^S1cn#IO~F2wpiJ8FJ5bAmi! z%~FObuT_;7sMQkv8Be{#2L#?Lwr9lVi5vjf9S7I2t>v9LnqCqkPwpmyE_7>=)0Zn0 z!wC)I6qWsTr%dzYpu1EjeI1d7xi+G5$|7+(&mWOiCg1kN!Nmn9<_0y{H|Ig}eqQr` zm{n&M*T9gN29jTo`F6Ogb0OqTw;*PCict|9R$x$!%tG?kN@^D zdC89W@P1F!v+~Ewoayz5C;atNiR@=jXd=>yt=CYS1Vx5cg(ZNyqXYtAMGWPNsk?I5 zR^{B*;=g_ft;*8RkkI-qy^?p03oJgxgUmxB%O-)fMn@3{Bgl<3y=Mk3Qnm}m3Q2ekaZ{} zl2Z%x{4+<9Qr5gADQb6_C&>Y=;CY&>G)X&5Gn1j37%jmL=I~xDATa7JhdlL1yC=a1 z=&SqArnf{4VgP6cVgQ$7$Z9S?QEg-#+}96$8K=|3myv82TA&qquoif&r636#z3Udh zNf<%d?rj&>p-T;SD`}(*IB3T}WM5pF^B@d^ya2>YM$zf?F0_a^xf@){;Php~VbGW8 za}Nt-yY%3DAh}HU8Ja$zBLP^^migXQrnIt!N~r_86LX%s$R7 zDi0FLqt9C?v`L1WqiYDjaF6?qC+;`KAfr#R+>Jsk8%*Eo!&$L9LPhCgZ&*v%_IRn$9LctfGdF(hIac zrybPmBf`*pgx-QEVlbIRf)Kh;HJVqqvaIa1O;*q!-%aQOUu~!QfPrzqDE5S>K&!V$ zz98wPnwC)=x_EGpUoNqAVN`+gR%bjMj_8$)DPTA?T3N5$&{4I!9e&ZrW*C-Nf+*fF zeI!nsx5f@)AV*6f*#+XrA9!DE6}lFeTp2qAw0CLr*@vFq^y|Qemtq~vIzCS7sDgi@ zQ!sR;zra3Uhjy~)p3V~7=_Fr;f*}FD{5`b&5ZXWHMc?|+DPS8~DeU!+Nl>Kd?MK7b z_MA7lppm;uw{$9!Woue-)2Ow{pAmzn=rZQPRdaTBG6VYP_T(WbWK1W)MPB=`#{b(A zC75%r5o0tFP6khU#`chH67$ELo0WG{t(1ED zB%)7q-;79mhfYjMFge6y10}=F*JeDkp}m3E$_6pI0hf+yJtIgb;6?KsV-laS3gbqh zRtk3bt_oUV7c-4XCq!r?T_C~I5-LY3n_F_e#--WZ{Ln< zt>cKnmn^eYimM34_YhMln(e?{K8DrgvA5m>d#Y$g@_!N=7ElyujTVtsO9J%34!6Tu ze-`>_x^;bi82MSZgruM=PU8jo0Tc)=Ao?M&_^B))Cd!YLUQ6?4>DB7%NBmt`y*_7i zJ@G_%h%Q{?DqZwqXVzx;KyGjAM8wKd;7uIi6>6R;=S|eH^IXgAzb?^(Bn&d5O77>R zq;mti&(v)xG+ihZOt8}O6KL?V%gJu!>TP_mTFuXuzFqLK@flosSkAs8yI@o}RyN+%`Q_*Dmnd%XRWLpd_>4VF*E3vnA zHGbJ(bkW^`HiJG#ri+~tx*&gs_8M1tsVo0Uf`|r_J>DgzRE49`wa!3_98p-4Ve8RsW&5609vDVbSEd8ii7R#9cfq+&<18EO9U_x4n7rIc&Qx?F~Mn zi`2Zz@V_J4D-713x{#XXihrjp3r+s6AWiM(v-5`DBN}Tjl{7)5aFDe&;XD)aeRL5tq zw+_?nQ!!Ogv}680p5cM+Qr-6)*Ffm{>KsGlilW|Ye*>~w9)0X8*LjY2X&2B0ObW6B zRK`5Z&=EVtk3?D(sqT?vAiVm~+_O#;=Y2X&Hf?%AR9up!|K(43sgFb!9zwFPE4>(9 zSo&vY06+kWb=VD0&(Dw3vB~C03y=Hpc&S<3j+Aholswg`ZQzZ}dy>+X+JzuJR?Ojc zDvP>t_@k~NFlRd&W~w=b6#p5JgaA6fima@LDs8v$mnrCRGy0|cPN(}pEbTojmez05q)QL+f+dw zU{^?&x!8b@{lX^PP;3F;op34>SyN<%l_Tks@e&%@=g{qdOH7MjkC!eH^KKcCJqaWe zU=$Ye)Lmaxjf2Z<|7S-LVXA{9^m`9!96YVdZ)#)e8hDBc3<4zfbjMf43b zawr?V;Z2a?Vs~3x{=$8*@2edlo5S%P_bj!5L<`s5_3>d(-|O7P=5qW<%$>ifdSy~y z__bKHP|R*|hD8$`_z20Yyln6P^dSL?0*=(B=sUGMq_p~sz2`_+m&_VZj+d(TaLuni zt;{Ry=0iLvw(@n#)b|XgZ$*!@jDZg7A=&Sm6)X>mnWhYqbr_HvROHas4kLC(@_&6> zrzG$uo)G6_&y1V-zB9izsUwRjF*g?#VH$m}Xoh}9UuiqDfl~SGfm&9W$CkRs43DO_ zco&+O$bL19{8trWEX`veKXUrarA*BR&1ex?d-Wv#W{^wb<8;lrMk zh`8jBferN$wmC93cG6sv)zSn0nATDLOGp1h&TX{9t-cx$0nS#>6Y4$O=qS~+lt7lV zLl#IbJUAnfv9p5}qWy-gip2oqnG3MO4 zTSTN@dO=_+?nb-S{B$TvS>p={{p)(PaThumLG6dn+<{R_)#Y^YaJF4L?d&{9()~Rc zw?!hV%{Q4@YYmEyfQ{fTjsG^&Cq2w)w1rNZB+t_&2`23%6J#dqE%2oZZRpeES(|UP zZ11C1kab{xiYpN~`}=v2p*X&Tn1iJ&*8#zU=67K@F}@;iZwT=a%U-hM?*CmlHeP|d zesF|JB#@fBkq576i|id^o{m#|Wtm%N$Klu0d|F>_MvuaD`|={fckSD{)wr6TZ13aN z+Ja|jq73;eio0o<>k4Y$%JQIn*kxCy&3`@&7N?LyR^8yry~Mfq-fQ+CTzp*7tr*L;za|4+rm#(1y)c+iGNHJM9=P*_EBb-TY$Pwft@XcLE*nRG0FDw)RHWGiTU14Kcl8 zDY+E6X)~s z+}$SVqG@kLor3moIlGf$YQqeWrO0ahY+TK1Dg>>O%W{AeJg>;(IqjI`l|;K|43QY} zb(YJ7ONM%)sg+o+optW32wzi913V2nH~*Z--Y*)m{kxRt+;=QY)Biu%^r)bll%2f9 zzWutTq#+I!)^Nkhh&lu8D$k_1tQrLCQ@vv(2hag;E51**$QtAhw4X4GKTe*?eHFJrp6U?b|g4x zc%NIKLn9hi1f&IBV!L^8hiYyCV(xpj9YhIPofza^%;!4t z-FR`^F0quAHV^zFW-*PLHYLw`rV*Q{JLj1<9?!uG8WF{O=`^hUXw(UbcCF@rlt~&G zQ~B^~;P#n+$%x@BBfpuMSf+_aR~hQSY&BUFos9`KzoyXO13(ul5`B1ue+GP%4fyht zgs@(|fbgdC?Igu7vs~g~W%+q?dhWP}RJY9#cd^x1vVE)baZjsG3dxW|dpMw2m)d`BQjLeRN9fkeE{z86e{9xL0b{-1`j+aZ z;HBThsA{1-+me@`?J+&2rty^b_>bIl5>kA;kh&0J-g2SFg#ZPp{kiw}CtOV!FFeva zKTxM3gF6Pq&OAoLKRYm*>Ft}1PKExd(ckAH!0;lr!Kld1GwUW-4iR;j`ZPt``|raf zq?1f5E0nj4f1NnQS9GfbIjqD#eRAwwFfC8QVJe2N5FRD?$p`STddE7&xrj*XnEDZU zL{^UOHI#F|pPqix-H5f>{;lcNRi@$Dhfzz9|EL{0*$=~59#sH-uTJ?o%u#0NZ$Mo; z_YO=(zo1yapC0*j+p$V=Td?!{DQSTRo`^2YBcTu`(kRzW%1I<9XO#cMhecVGSG9*; zHZE@QRg7}GPQho?ZXD97fHpJuKO1g;9A>POI~q14mUK7i`E|)-G=&ou4`=22dcl;Q z-Pm0{uE#utVr-NELl@ZMb!-*bMRsX9K6$nEXs~OJ4_-b*I;~Rj-H&zsLu-WqFr^WM zqyA$oA?8aM!AV^qOwGCqdx75U2D+#%chQ{r439NWFLiXE?~j5W7*aFpEo#5o_QGg^ zX9|`rnlFoH|rDo`yHA{Fy`PO(*F0Qdc2P1wX@0-s)iudHK!@%FZklt zvzBLoKNiNGZqe$}{|JZy7cg2roSOe6mZ;s8vvp)M8#!7xg!&MiVq-&y*aq%Riz(k+ zIpz_t@}Nudtl>3jP9J3OE|=@AIrs-pGTJqz zHZ(G!G}m~1>%LK3O2|SN)uY;Qx-*o(~XP1Awk7u4M)*r*lZLgZq{^v@rI!SB90@=@N?T3cdL zul=vrWELOA7EO*+5`=;!&zgICem?D&DMgp?1)Vh<8RDn81LpKMqUU;IYp7Bni~4?> z-koIh(sJ6ZsdOc0<07&I7m6siVXIdMP45_t~!fJMvELH4O zwj9ch$LvW$V|nCED-PDrB>t#8gEGN-^Y`y78R*IY24<`8PO_B=-WR-|pC`1AqmZNP zc6lq`(+b?9@`7U?5V+t@qJ+sHf2J8-wF-fqqczBL@<+HV1HQS|E$=D!Y?fs!cKb7m9_t&! ze;HA1eAx1bxyFJ@F^b;N0g8T4DQ1-)gro(sQK@m$NdEob39{97J-3QDiwmtLVw)G&iO4(>&vk>TV?C3JoSTX zZ#$5q=2Hc)bYd?&3HpjYi>2kYyiv?zcz{_YvUDvT16r7)hgR?%vPF$Lqt>)AMiXcp z@&OJ!u`j_c$uq`u5iqdl<5m zAQ~~4@6H+#f|kwL$w>%sF-}6yA?VacU&Ke2TV7}P_KjVi6E5L|5qB-sm~b1<@i+@g zR|eNHD5=RML8oTY2}}`Qw53NjGR!JjQ?AJn;2sYr{lhS7&)P?E57Mo6l4c~%&wwj0 zv0C!{4tG|FNVQU&4z+nO4?+mIQ7J!`EK+8mpLsnpPuEtj=m?|W)INuobzk|FrvMlY z2T1cHKq~TtLi0g3f20(Z!GQNIz!uS%cWe>bTArOQpWk9-Au~t)MsG69|21n#fE;4` zw}LWErXqik-C3WK(xb(Q5h8?%k4Mmr=Qu3K-Phea< zQ3MliKw1d4phDaT^J!B&~oD;GOT5m);g`u{v6zaG$7Z>rq^@fEsmclqhm4y!f zO4)MSAx&bkB_DbtCf4FIHSXB=9&C+3W@YLlqT&*DodGoZ+~KX4QSWtBF@LwE5nttJ zMyql{>?)%;4`hZK8w^Ryu(Wu(&gDPPjw68*7;d$RsIRxf9}hw=WDRw zCj=$WtyP!B2TY$JtJN6DCCBxM3sAs1Rx^h9N+**oJwiv5$hx*l&Iufb9SV&X5HSzj zeet_Yw@9WNl68u-6K?ZLp+W&N^Xi)HdGH+}qU)CmyTCuJ%8MJ+7N;|oxL206e}1!E z!RCS^ten_hWkn?*k7~SQz{bKv98t+=ACIkT!k)~zm`^Ci46D0pV)KcTsfJS6C0C?i zj(quHEdr%~TSr3>LL-v5J*ghRi? zYi(Y$8Ck80Pg%t+@Yq6Gf01-A6J4XlA&x7F`8_hKI+r!k^O>n&kMg6At_}XFn1A*= zuVR(vS;(}9*uskg^H}r@qb&v|yFej`O!6b-P5aEWQpzf_d%EYn=+MRUs-C)My`0t& zGZ<|ef?q-XGC!AYMY?uxt(#dPH%ThSJp1rK9hIMuhNrKu9G`j(5NdlhtZqN9O?c7` zUJWE){>y^StWp=Q>ZW}uDP9n&*eKRQYbd153(6z|rQ-&gj~ou0VUX~ZxO2^yIyfs zFnfQLMwNtkVavY^Bs}}WMEKoaos38>@7;AUK|CuYq4+TyWu~EW2Ho!*w%}v0Lzg5T z_0&CkZq2q`Edt#M)lNGRHgZ7)P?E}ncb>-@wrX!BewGBQ+pcSgut>*zBmSz zT&d{e1b?%=X@zWt?VL4$>0udV38|hn7up#yM>P9#^8^9qW zw?Os&Y4}F=CNZ52Pc1iESW_YgRHcJrkB7hbA^Jc)<0NW)+9DrNSMB9X*yOU%GCrIc ztVlUiYN)S8X?}C*{1fi9+WPj@G=o7jlx#;9<7Wf z3gsYW_`>3|B>u75oHsJZJ(4&WEUXRY#>q_nn?>xUHAYXrIq}~dI znha;)V?UC~8^YHU*mjv0z}jS{r+=%pD74S($X-I%O zV4Kg^TR#bikl)61HuJ=GB~fJGU3Gf_kug{HRa>ss`aW88tbMB9+{|XMWj4If@e*)D zVOfxxXP}SR)&cxMm?3wYX|s8ySHC*TaWi4Mc%Oko)gS@z-rMzJ;ys#N=2armhrKA%c(iuVAA&2A_3h74L%oWrz}o6xmN zwfvrRV7T2cY%<^8k1z9t#X_+T>SuU!pjn2H%SmxP2KG2%$4S}hIduMBC)N)(9}WrEU(bSOQlEM~zloB{c=$UY%J%_6NG(u&_<<^n zMCvkmnWJ+tUVz8(v0?D0X1)$Q`^ z0=!=#&~x6?fdn6Uj?nTL^=m~#e6Wow6B zjgm!2=R$jb-II>x2fbz`{kylII2{YDJr!)nAx|d>4@&x;LpwLcwS0(mkh|OOcybB~ z5zpGTq56c4Cky+0L)TZuzO)%%=U zPQCAixa!8CR=)VHXLFyys=+V4TLr%q9<_mB{f4QBCc{Mc69~F)s4b99KR_A zh|nPc8v6YaD*l8||7ru9UhXs8o%|Acz5^4S&*J|?NP5Ty$w)RdOX##)?duR@M1A*L z_KyWGiAQOCY89(mVcb0_M*Vqo^FSL$VieL--mv}x+r(vakGpF>O1xs)MJK0VJJZ4= zM+h0yA^UPt*;?KS@RWZleB@`m$4il<{fF?dp54~4N+Aaoqc%Q_=a(r1oa6XEvpimh6|V(<8)WNYW#r*YX4N`hUc6GM z8J)LT_oF{39=S70?{-taj6MJO4D;^BO>b!6l^yPf;*N1bxFyx$=>6*;G~HiEYMP|b z1AM@h+6h>|8(zGhDZPUnImu*<8iajW>n8ySL{A__%Cdc4TXP{}k1i7!A2RHqq`g_N z-PZLkPejHP_CRTufe4yZMIl_jMn`-S!Xs>*WV-o!r#=HNc%~hVs3_O6ooA zC=+MdX2cY3))SctuXnENIaruo{`52NuKMK=xHf%%)K(5F+cHh-%R606wU+s=C$r`k zN$I6q(+Ici7pK&>43i#3JAhSO;4i7(&TOi`tl4}*=3u;ss4IP9J=D@0^O-4etLg7| zjq6M5ob#y&RE8;*PtS%{qYUbjDIJ_mwh6JId~2@}vFRckpP{UF853Ml^+3pbL*l>> z`dMQ2!JYyqWP1sTv`o(rj-AM@S`Ng zRKCwo`DOgiGA^$zmVgT)HnP{f6nI-5#Jtx>Tp02e-)D9eFCf ztKohYVoF+>i+WcN2;KXBsLvN9Q`VhYC0SAgYyUdnx-;_Rd^DYL`hBQXLshtfJt(6) z-pvES(;d5L)evHoYo1(Lc5=t)<}`dIR^tK1C9Eq(*=sd1$Eq6yx1Al|(d`&5>Dx46 zEb(3MJcC}(FqaHH?eB~ln{y$Tppzu!{VAFq`{EAk3xEDN(&;6i&sZ_5;P0BK2A`Wq z|BTO9FJUb~E!&m2k0PvxwXp3V{3 z=psfto35k;I}a9KN|_att`rX6sP|5O93N*fmB2uA`{?-PMuV?FVbxEXlymg-q%4Wd zb5k?a9&e2m8?jI3jIs8_?7p;?{$t9tpAuTR3j6d)Qt(R4 zst6xzj6J^RN3CKZ$5p=9DJ7FzN51^4?*r*R7Rh|*xHMPii%?(&1Zu*3rXFN{($Au4 z0=Tq>s2*ZPdCJl${SJR&pKf?tDjxf>0DCcty= z;*k&X{9Cb}i|3;~q`g19abMM7)U{$)(n#jQbR~iwX+T7IY!zeMzp+V^5xM3Fu&WER ztI{&@)WT-1>7OdMIgnMQ7eyFNClbiA(ao-XXn%B4=U!FV_P}{&Z$oXsjm@5*$Y3H- znW!#*G{KH4+v4#D3;VVv!W03OdjF?{yWY8Qk?*6r@BN=X;+5btJKtHL{QYtAnX*T* z`Hl{D^FEpU78DxtS}#%bA;`8t;K$wc_Ut2sqRTX$yPM#Ipr#Bo*<$3=bnm5pqcr)8 zmFJjtCqz=FQ~kBB3BCDt=gs^v=f68;=>mOQ`NcK`0Z)Dy@?tYv9h^Tpvl@~gNE?wZ zsnj?ASsF&eo0(s#*Z>y$O_A0+BxhjSIf$3pUHv(kb~KE(-%b$Si9B_#A^bwGM&%*j z1M7r-Yj{T^61xa#=a!@QOKXecgm`cend%*njW@$pc@s8p#JoDO83Z2uFqYyjHE`Rt zS#Z!}E&p^_&QKxFSL@vo?_`d5xNPzQ+roNq;6+`8=RoF=_*1LFzD&p2gDM!>kJ8&{ zpzHZwWS})%1Z!+0o~?=3yw-}kpLTo!81hDU6Wm@X|0(yREcD{oiG8jbqptU;DxNL4 zKw`*B=Cq@`pv>oTj5F|r3qaHSwdj`b`l83|eB}YgnLIL13|~Up(&r`mCAwt6fJCwP z@37Weq<&GAQ-EK|Y+Cf9^7Tof%cS3N+zcpWIzR93pRs^UDJQd!tjcBnN(JFbfE&ZtKoLN34oqksd+{AnP z3#iegiyLmq2~kZ7r$3TD=V&vqgz)<^n?jk|`2qTi}nGd5*UKaGrr@)#vZBgz#Jud~pQ-J6cx#3oJSS5^&~ z3&u^2Lpt0>R^s4N-nju@&_nG7d<)}7a>EubXvZoGb2srm_U@5XJi5tQ8d!50@^eT&mbERT0A>OR~-4dp|)La=O6z`*V}y`NZe! z^OL?S5vp&!1y-Df9q5cVx9^O~!~o_U5ruw1%3EpQTK`HLi|O7UYrKdH)7&fh zcnPHRvSO#f(+8QJBkG-8pE5Z^MLKm|EGE9Qlgt~ovu;;VRnaj&m5X5ReSs_gizVi5 z5ZSx~CXZtwj-g`Op1~vRe7ms_xExj&K}J`*Qj>~P2XhtRm;jcpTL zUwj0PyvS}8)?WQB;l~tD`4M(vo|J%JC9kW!4=&byPw&@}#Lh_uo)R(1#vp#EdHttC z%&Lj+y=M`qF5yOmCn=BT$NsNB5WUNhJS@{hUc#*nR>qs1B#W8 z(wGLS17IKb#Q9V1Cl1zF0OGs|1m?WU=Tc?@HdSx8FLbVkN{Hu?_Dh`y5k1U5JmPgy zGC9so_WsP1ko@l00fy<|?0=;ZpLUvC6gc>wSpX@J5;5Y!W_2A8Jt_Or#ND)_C+N3@ z1F^J>%!TdmLpxmg;9b_=dn0smbstzI2V&Jkk>KG+*qI9+V=GHYXWzqkSHPAxpVJGU zhi-qa%jh~;xn@{TG+*Xl<_FKz@rO!Y_*t<KqV(`dZ}WK^L}kcQ7{@9i}cylHfbxzOwj1` z#`vZ7?&8p^cH33d6EQQiPrVFSvw!j{P$oM&oPU8xPU1o`9JJ9>vz2p3abD2DdtIZ> z`U-|Q&K6N=N@Cw>3neYB*f9X_w9fr-Ud@4)M5913qpu>`XJh>n{V1+pDj9aGGQ~ zqV$R`axK!vf(v?0*DjQ}rb`F_;@Yq&r|A?i4|(kL{PHNnccpPtx#IGCh-L83xeZCd z#(rc$5w2bhzFjsn0YtA@xHDR>N9voqwQBdeZbGYqA+yLvkJ(c zfq3Mn8Rzf4A_kjR^tM?gip8V)&l&;}3>YbN2j+m=pNZVqZnH;2^NB4@&Ab!8o=tDc z4y&hlcHXVuAgf{qCey{z6`)L zp?6;x(qS6?qss9H1Bwvt@bwsJL7j&+0mddS^Gf2h@irClkA=4eYzSnP2xaHyRVqk@ zWBbI}&WN9GLp+&Q(3x15s%^zjJj17DPjq{7Kh^9cvzwc#d*p64d;_>fTTGLKwGJP? zsp5TGP;EClGG`m%?ZFcJLC#>XqyHt&tBYuCnc^KAGg1pUOB#*%CD=w2A3)FAOp3_6 z{OUMSuG`1YH?afH3miA0c$Fj$@GlV`SY?B-2Ih;rkpxbZ( zcMAy`EZCjrUF*9)VAk|Gr@E?o_ujh}yHGMY|3 zCYp}8tQY(1dq6&pX30wY^mZnt zsC2VUA#hbqr)cIn1M`HzXNzckw>n5W{(e6+cYGY^2njP}b6r=WDv3+UEP2M|vn96#E+7V%_c-%<>JTEe5Cz?&Lu zJdA_OIjbG_9BLOMaNZupr7(3Vn3{95L8W#irvx7lpQDAoype^zol{8ksgzFUq!nwA z${+6@e{WvnLinRB(#(~R{4uS#he~6f8I_C<;AVE=HP1hFmVjGdf z$6U(eE~(Wy_Q!PxHvhYGbpN9th{4C37)twi)Tj9DTM{$~aMpYbTMDGfRUh?d?ZtG4v;SQ{0a`YY`R zo)$~AG>*~~oeTz>IUkzi_W8dkpa_(6**asmqps+xu1I1@y+Mo6KRl1eCq!2mRTjHb zzrS7U3SFR`*vIzu`ml$xW zev-h&b3R`g!cOZM4W@4QhF|t$UR}I0GF-#)PVdRl)@x@+HVuohk8T#*JR)h9)6aYM zJLwmOq(Wt)4nJ}O%>pb{^XsZYl5xLr{l+6V7F8!fR`u<4S1(4`(2HC48U>!PcPn3Q znYmaeBgM8=lwzhvvPZK?LJDS)6|g*EAv7uPfwE#I&Lw zF6x`vh3`o-i}JOH=a*LmuJ_8-8Z-Oj%G60AVc~J<%5w=*%|(TXA2peY2b6v95sBhm zTRy4*e4kjnOy@jR(uvZRpFaX|ocW0}*K}?F_ zjfySI-m1WRjg?>%20-^3sfWgV4}1cq$TUq8@i`h4BO!cQY&N(W9f7;~&0}cK!|{DX zkf@&9QJo%<=i59}WfOR`=$m>%vZ{w-Lh_Uzg@Vj1Y+-))A8aYuTaI}@v!775VADEA z0#UhQcZx6aSUABZNM>h^BwAuQV z6$;}um<#CV1>IPDzTz){xC;>g--|we`hxWM10d?hXS0{WrvM{(e#Bt#pjC;-zuf)~ znnVda5HuI?rry}GbPSxdIa)gE`!N;Ty%yZ%S2l*9Z?XHgY+}R?_3GP${?)LB*)THp z$4-@5T5(O*HS2x3=dW6LKOwT9>FOZV$6s}2gy-ugT0c_a($=|;p<<}9HhYZKZVJ+^ z+L4!DMqYI)L`AY?etacYlZ$P5^aW-seH}Sl?Stx2sxd__nK%Rb$E`whI}F{LX+N2IZf(52&z#ABWz(BkmkT8=XExG(Q^sDPJWz_y}G5tBI_k<-)--0z3z}+{U>HQdYCm>-*nE6y|bK?m{xm?J8zp%Vd{t}d8KsX(jd7`7vHo|MYb85 zF{nhF1H8XnkaADZd0#N}v-c1|n@7f80s+VpA<6vT0C^t)b)QrD25Q#ihS$XHLH@zP zM*udJUJDm{JA5S$YT*4( ztU8ZcNKc^2cSLPs_CJ-5oL$xSn8R9H0TP}f|IB9$b>QDwS@#$35{>GUv_ht2nFCxa z4drjHq*foOJG}I?yFcX?E?zXP|2FxgZt+h8^+CZ)#ZdreOEj=V7MLHhgMh+=2N!B0 zaL5$g;MdK)UMOZ#gkpLq@bVHx(f80m*z*p9I*qq*B+d&1%Juy*jHYBH(KGlq832*dKGK^NfJvtkFD52Ed!0tob6< ze7>@3%U0jbwvEd3d|E;j5VSk=1xaPv2_w{pS(&p<-{YDk?%W59QA7fa`Xj1R0Mfc-YBx36QXUw?x979UGu1Gj;NM(0!c5~|=HDZsM{<^qCBZ%qB+bnAS(fVnnq;7f;jA){l6QQI2FI)k z9jbJ0xh|l0w=TdXzsL%?L=!oqDlbl~AZPaTx72-5K&S{|@xYsPTD@3zU4)BTwM|I& za?A~VdccaZ#b+VA{=%+jbF1X7Z|4~drwq(=&VMRWkgc%_@~+~J5EbD)Tblp!Bhn%? zZCJ8D1k+tisVr%ZCebD^Z@?iHSe#XTf2zF5;QJdd0O1@mvnJQhcfc3LNT!_1b)if~ zVQr`H(hMFAA@MAVP7QYXgvuSZhd9^c@^4?jN(9HvGWl`hKCM!Uq1OtK zdQOpOX0{5=u;Gb%u5L|zV1ECWxvd&b-qRLX4K+UARez?Jvp#H zl23EqjWCKyM^y846Qq=QsR{(mJuXpgRWQKgApoSq833^aN5weIH)1_)35N_7wc1VPzJ=xfWCq;_so~eSRhyy;*-caD$PAX)@G3pB#m4 zJbe}eax-nyEy#Cm{hRVgm9nV7rR9QnHMMhmC22mlm;B6lc#U^aR0OXgl4M4%crDnV zz0oL;=}7m`<^Ob8Ej-1XmLHqjHF%{!6iRL6{1txnvBNLWbtl187|)70s139F^%R!3h#QK?M)b*pb!E+;JZt zSB%?BPq#JyAs*^OqrovJN&Su2 z)js~z!RFV2j_o1~>`a1!sp7{EtY9VrpUYTlA@RlDza7?Ly71PQM(C9;J+iu`(mlSE>CIdv}^>hO%hd z`K=7o{-VOXSo&tyzm4{ep_=O%8b1B!B~jI3lGQ+l&P47rdBAkl5cBkkiW!Pw1TEQ; zJiffnC3n+9mFjl|R4le1TOA0@?#k?qu(;G1@$r@LyMdTj9(qI2!;n771*=BbjNQ_N z~N1}CLT=qHXK}gv~RdT_O@4O?Pc-3R_^1W>h`!xxh7oOCS zz(7Gs)|ICF7ihS!cCyX;khtdHO)ksVCtNvtS9j!Xczj(X?%N`oOUPlu*dOOLqQglR zXkz+%xbHYT5-^wRVAd#F`PgUW>Q(^hJQ}XqWaN;u6M?0Z=daeYE%M zfw)!mR4ac7k1+h4f-iE_!_!PVQZ=J=S1f}EbQYJKvncLP$tM5WQ{b1_#bTxXb??c+ z#s98~@nr-Z-9LDc>y3%M(-uiGR$XS)gB;qefa+_Sc0bAhF{*OyHoWA(NMmz41(nwt zYuRdl07OsfZMZtWP`1zyP@1MtLSL1k*Ov~6&F@XIaU*aUBax9t`>>zeDSE+73@K3V zQEV?i!%(hKnO|Z0cz|m;X4*GoeuSbwO=1`GaFw#w2l2|W@t9}vf$XaQ3)#eaaeE7~DBVpMk6ae0wLTzRbtr?tQd(u- z-N+VS+6Zg@?uxh*Mjt2mt~E4F2dhM^Wh3H48Iaq1dhHf^TM|n9rF6Uy_CIe76%7#`Sr3SnO86K@9HaAE{(B;kOY9=<*o_ zC@=?`rN+N**lG*~3l)%hEAccCsqhM#NMtB!NvHV|+ub_*OK%>!5aJVE9)H!K`QIHe zzQmpIK2DRimofGqgsY%R?;ig5^lbpD3okxG>!^mqtOU#gQ7}#wYH7p~fJZ*%C}G$J z3AJoOe{py|5y&X9fd>lEKOlZ$%#XyWpiW zo8(&#m$ePH2EUE3W*{ODXQ*rm+`5>f?LlTs`}837S508783~dn@9!!H&<};%6<2feT_P)saW`35#z*jN8tQh8PU zCLtVnv%4)kcPKQ0vhDmQ@f5}M)qT!PA^Xo{q3MQZ&}!?tWjK-qgaHO)^mLbHr2+EHoRs~(@WI$itClg;%l$WP?anZhpx>D6fj zCe40Xn^2f$Z%}U#_Qm63pWqh?{Noci);zW+yCI&XO-%9Z$BFP!ADDoxlnpJuf&Fpl z8xQn8lQH-fS|lSV&{Q+?XVdRcL2LcuGJ)PTD1V`%frfin`<;_x`~o*dW&h(;%6yxh zjpX$)UsLXFP2lJTKY@D>VZTB9aT?@rQxeZ7z6c1!@1}2ZsKb>B;7?Nx^(Z0J_v^ao zaM|=gpHbD)xm~~XdVIDpA3VQ=JzORgyMH9Dp`CaC`!q_4gbOdvbrVwP^=vlul=>fdpyhs)qqRo5=qx7f=#7>{K0Y#JlfmxtFLV- zWyAIodsw7V?%19`{asx0bpj}DB!Y?-gSwFXa%i4ON1 z1NDAzmxzWK3Q=Uly3elb?N0l0lo2MOiECLFS`Yy zW&oVWj!0|((;y@5`pKS@m$(PF>(fP@BFwD{qO;jRfY|`LW|{Q0aPR>%{B!m@2od?^ z8aNLEw;$+4+SH+5MHKLG^GEAs*xj0cA@HrL3CY6n7^OC@sqp;?htWHs?cD&U4ioDr zvo!^4K6@LRF<}~zXHs4?M5x9p8o&?ZF5b9{+;23Tx-+vUT|D&kM0ylj?%4Hp!fWTS zO;XS6bL&jv`^%5Yf#kh?2~OkKiZ5x}AG9@1u+y^}$gsImMTJ|jErJ$=bE^}GK%Q>L zFuod!BJt{r%UIU3Ly5&T3r*`-3F>J(z@NhGSwQH)i`F+5oE|+{J;~x6u4wQQg*1}g zo<8WWSytbe3h4|vSF2C>fJZ3R+f-(3G5kdm{p#x%zQ<80dI`>WAV1W#ik$s(&-23s zM+k^e-q7aUQ+`ZxJ`VtjNzD}ZbAEuJOnpsxPd4uPTHt6~(AuMg$=ki?N{H|ys3a21 z6r6oIa53{t`0^mQa`nw`WAnc;Z_oDBFv|r1;8>F!f&P zT)1wGz9=^wd4&(nRbmK!S=U`pd~1&64=k+_YCPuXnJd?43`jrD54QgBs-U+hZd-c= zM&t)NRlZ2WxGc&os9xiqW)yUB|Rd z5lMH~UEmjrBQo=U-iXb8h3V{%e2!if$q5dU`=6p{JStJ-3{t?y+zB)3vq`jxPy>aq z$l+nZ+$cZl`{N$Iy7XS<_*GZgxY8nV>6RO4|?-ERd7+N2smBeo5&MV?Ltx9E0Ljh?xv%wGOEZk|hT@m!EE=Z>e zVh--#n;J4LtwUMWGod%w(=PsMU-!^8iLMMBwO(Y9G&x?3K)05FbWZa$xA(J5BE*QV zxIe)Pl3+f#tlz0%dl!uRj>tXYP36~O0(#EIx&W_xzunAqNN1d|)u1AOJ(&Zn9H5({_eJjF7s;=lSoz+_laiS| zcXI`UtDq~AfHcrof`S}T2}ie8=09XQO8<*qLS^7FKDi&{SeSAhh(%s4`s=lNA-`!N zj}PI`@s#_huf8@o&F|hfXnjO%l?l8k}vj{)Z$6I zbz@)B>_~OB5qx5(I0eA#`qAHXMdQ#znn0Cd>(*uFevW_oY;6>O;E^-q(&M2c2TRNq zk^)g0Qger8dpZ27zEhVeJbuO$eBahX@8Z#DInR;-1S)8zgiso2_8U{cSFyUhUL>+rGxm6u?FRMF?kPg~ zNZPpYg?24!M$$uKG3-1%j_Q>Jb5&i8h>r8oR7DZzgoNRj4AI_j2wo!)ss!g?!DAvc z&UXg`OuiyWDG195^~YV_%g5u}2=yVivbv_(cy;;Ym^cQS$r>lEsxiBm!86@gy zoDugu0x`p0$5MyG0ww4_ef)U&yOMh2AkeZq(fa`lCw>KyX>iG4H;<=7(gwBhWJR#< zrHEgo&H>r<6daFW%=TeR$RqU#`8eRnsa^c zS}Cx-H-)TQ@zarV`j{K-%WN!Ip*tZn>1(rd2zQ53i zXXT$}?)jtw^S#k$SpN`UU2HId&dxs!?&An)d`|XuZQ$}aW^r^i7z5{%BOTlx z%`nSSn*XD*h=mX3?Sm?zTHWZI!p=#*^0)ok4NNSX?Ogny+avu(yz_w3<@)bDz3LUs z9zl~gxVj&F@X5D)Y5rX2FF29c+UBB~!k^?&w<7aJ5@@LIav5gXKBD`70oyCR9?9bZ zj8&mK+G}5pK`@nzaAOmU3l?b*eIP=P%p0!8C+}dvBX5G2B4n)f!LoS47-;ywxjV-i zPo3#ld6H*~^hNv)41GRE`-kJi9kye1E^>jp7n6=SlfM=lHjt0-vHpUv2Q2XvZnOA6 zpj)GChdvKAS$}Wi-Wc=(IJKW+ujm<9?!h`-Ui~S;dYl5ArN(Afdglu91m^+kle?HK z)-+cLNKhbyx+awTbS^Aw{(h{N-?eP4NEx0w`gqzk^b%Way3#ow!XJbhXp{Fk@^{F9 zG1--}nsQNfqY(hPCmC0Ag~ym&kVD3fYMyAoX_S>!#`Lx2D}+g7e`E|&wfb(oRI~Te z(uVU!e6WS^x4q^ZGr^ZZU#W++FYB{aufEnH`{Sg8^W*F)AN1Z7L&8Tx+s%9Xi6`3q z&t66>LIk-Yjqw+NR7uHCx4;c3$*|h*ql$*S6g6Jfr^$2`29kpV$M|ISB1ib!>n}h$~ovc8p;vR`J#?rT`x$esn2z74s3O)Ay6zk zz*J%1>OWKMp#;snUI&C*45xWB0NImf787FLTIA7^Q?Qj`onVsLl9JQ6BvLMIUfpHe zQ_Z}rEM86pIqB&0%f8wRCIl=)#1mNaadqcDA5V{bfw}p`HF3TZLNqp?3WPTGclb6>J2v{ z_6L`nT)F~sH17%BB|Uk}JoNT*X+dhoG_9{O06}@w6A#QeakHTY3&}Y5&})oh;DVu( ztj8-&1$f+yjczfowZ3Ya_CJSg9Q(8O=TjW=)!L=Bg7j~D?LpnzL5;SH?yuh9E9t0= z{L9`D%$+dtxQDkinSYQ27$-FZ#`-h_5*xH>1KR~`5i^uLRVg4K8)Dc^8P<7h={lb2 z(sB-1Q3R3^ewQ8SVFEA<7CG04dmEj_lr(?FlQCAQ{qu1e8Q^I71?>1c{NmvkpO=dk zCZi}u`PZFB>I3+(_l)@_5WA+f3chTN^vloVV{J^k8D|zW)q~D{O=f`Yi=1WddwG#| zQavZ4R<>}~Is4;64J@<{Vf0-Ok&5*Wm^g=bEmfPM)}qM1U)$LUk&A15%A{#AK=}=2 zc`e6R@`=iaThu<$Nc&xaWNm7acP#CcfLCDz)Y0n`yP0i~m;HX2@2|{XuHIfTGJ;a2 zeVg!&^$TU9r^rBx$Yl6($mCYFvafLuWK{~Xz{047alD?)sZ5BYD!C%%{!MER@#F8O ztAvOe4HqQqP*f$kwDbZ@cTUiC#rh*9eJdYB_8CPSlZUZ7A1!?p6LGRlzl}E71!4ZH zt{j+Y24)g(cOP$S(53YUtzMSzgLPf14GCpZf5TLCZm7gOp_qbw^a34>;a3%{2K2|9 z8urKg5((6>`(UIw4tiVho;21ztTBEfYrY_>Da@c0s2QDjNvY^1)!Nc2g)HB`=Vm~^ zqR4$74-JTv1o+6dO$X?MjZrMf?P8y)jAuHkei)J!O~i6FfoUx)9J@?wGE{u9q@ zjGzMxYCY`dJF?kbGKqI@D8Fq%9C~1w+f!x`R9|w*{56kVol1*}?43dnM3=fAg2C6?Y!U`T>res+JJ~+Op;>Z6dM~ekYMl z0s=i+Z)(r#V=Rd;#pwOfM&V893>LH*+Tr@W;;PG*(yIzJD1&9IYkG-VMk#8?0+T2; ziz$C@5AZPo1T;FTWhNw7;d~?_?y`PhMwjpS7h0v32suTXuwfm7@T$!Xp)AYlYlqe?9QHzXs|GPkeoi!ansxbEXDf;@407JMkA^zN0|1T<2mxR0086{qU7VjYcfH}0- z$9Avq;vR4|F@B~h-s(wz!b4ShS;D{H&I6CSAP>VhTFYXLk&4f?-@31RKbp zOjZIG^Z7I4&3<*1Uo*o$=2|fe`w|bRJ&o%i(dX`AJGl9Ca)%1%VgKSR+dD< zNIJ<^0S~QU<#AAOh3KsDCwZIL!%IT7hQglD(9EAh;2MOYzVUhQ*+c!c4t6OAG~~@E z5xjK#c+nXE!}TmZTbksSOi}dMf^o$X^Z)oFI=+CE6`Z13_`61Ny1J`TwHV7flYICGe+AH)tH^M8EwnZ%vmpU z7}H}lHx)WTlGRw-$Ob)E-i7C7hL}3;b`;aJT?{&w z;XhZ>V6UzXTuK%YRF-n}>Wzr@c2opC!<3v{jWUyp>8QpNvod6*twGcrH=-nDHCD|> zLY{mqRti2+VE66O7nT3|MVBlR|5mIB{AYZo-|Bc4<3%QT=up|eiFMyufSQI7iv+G9 zqxW?knpX!>d|qw5^UMItyJtbt_5jGc2XCcQB6%p8#94Hn$yjrWhfI+a^aPoQ)zS6( zB2b-1N;DxfJj6}~J%K6`&CzE&p3%oR2B<_h?1X56$JT`52 zZ}C?G{=YxtW!O0~RQTKe0c(L+K*hOf_cAOLv)^A5X`CvG!Nk%ZSA^ymhn#YDbkr2J z4d?hpdiBZ-m%IXU$`i?R$ny91nZ86P)G;C;9)Vw{oOYeN2;yB=ZaN{G8@`YnyXi|Q z7{aSk?3B9TibHK_rIlY}X2CkB z0_GU%n9jQ?U42Gxj3BVtZ#sOd`E@Vs$r)oO;M%jZHH$sJ4q#Ie=9-}aB;WrCysVZ; zgs)1D@0N#BER5yw1L$8I64d8t{yuG?=^fM}#LCo0!{IcJF$%uc*Gg^JD2>G9s(qfQav8`>?#7@xWrnT=)fmgVYUJj$MP`+d}T3Txy$h*Rjr2}aN+@lYj^ zY+InKJz2YTWMwnbWqLCA3cENUgQGmX8P1Rp=3EceKpvBE1Z`T(;iAb5wuGD{ip{4kK1zQpf)={0MyHM+0 zHkO2iN;wmvt7|)~u!m;sz5Z7qV(Kpkn4H?kn;qkH)1P*lw63=2!J9sB&MW&xdD3vo zvRFoJm5i7gW?4!bPQ}}+$!J4JDxMj7Daye01_YaL*D;NgwVqw)XM(Lh6wWzjC@z2fT#j;&M25;*iGV+eQeJGr`t(%Qm815w`( z3}EJanQ6>8V6b6sS5)I{!nEQp#RoW_;}&qDDopr<7Vf&-d&fe+(k4<}sTY-HYDID$&W7+M0gEr88#o@-bXpV8$sm0Z>8lT#2H~YqFl$-#;(nS3shXLSRm~?%Q@ItvpibRS`MUh+XgGZ_+L2Jl!CNRXe(+`+hD{qS!zW3!difUu?joE>Dw(g_{tRFA+7 z1G}OMungoK(|1l!B3<1K&!Fe;f?_m)6m;8V?eXc4d^f=_@J}D$b@?k(Ja|=x zQvkwuQks+o$Bx5v(N;vLe#t7k9QOhm!&x6}&nv~6Do4r!d)CFT^`8exS~H7ffi3ov zIy<+&x7a}QhTNd}3-vA=mNr)BtaTQ{uPzxYoy2yCf}>;5PjAbd?Y2z>r_E@t-4Sy) z*gotYfxHwV#!Y5z(`&!eWij-Amx$K)Y>aRX6-VHaOKiY5H(M<)(hw9O_X5rszOZ@; zsscBsrg)avL8P~^tpe@6<()bfLKRy+Zjq3*`>Ip~M3#0h>3R9A2h{46W+PJ|c zsz7ca&8!xQ?{0Xp_gOv7&jhK;tj?gRbs-t(z@-Ym3&G2itFSjHKKI5JD>P$hZG!^- z>2wVCr>%@NEOrs!M3^5dcpTV&zGlXtjgPL76hB}BFE9fl@+W)*1Z}WMh6wa@Rfp!8 z)8|!EX>*4W%CQi+x93+vN0MD^W?~BYacA?Xj_Vec=hBeVQ}o3fA)b}iA`aO`Sfhui zA=y9Coz39Idf0aN$zGp5dPR6#1B3H|n?-Cche6))5V5w{_ZuJI2f*ksEx*jC6ps&L zgS4n1;X!4|1lsO=!mr2v2ccN+&{}S;84oFRvc}JdB}x$TwYDLW8y5*o_BWlJH&-`1 zjHwxTXW}?v9K@)quSd~b)1_W&Ftuu$io;>WU?4nOG$Rt zuRuW>#Cn!&nQv+3a-z6eUxb%ROl5q+2=#=k3swx2fTjm~`Xce+wu~vC(e3asL4%EI z$?k1#j+zO{gVHXtw98iEKij$^QJQYh-oopMSaQ@C{1=QsCGQ-m_yscfjwd_H@{a0VExh%h!e^goJm#6 zmA+;j=GpSLW(wV3lQQ26kvjZ7EG+bA^2JL%@Y-iQVYpTs<+Dj1<&)K6V05OH*AXR7 zgNctp5KIGapB}lkoxJ$fb?G&4ue_2udK)OKd-waDuk^mZp18W5bjGg0v6zGiZsbYhf*#%GW+uOThy5|K1QpneZbXa(zf0 zCcC8?*3W4_C$j?+ty+A0D~)G8 zf?x|MKen{15A_7X|DHK$Y1bV3MJ~~II&vCfg9CRtGt3z71w^`dM!(uAh#7OL5He@q zs)aL55k&%o;FwAL#Ql{Kk@0Z1k4eaanY&`Zw3rA(PnVn-n--p|I>028nB>pXayC@-MW`c{3#H=k>mlK~#5TK&RhO#l)W|xrE;MAub_Pxl+A6Y~Gk8BOy80tbp zDIEC%)aW!q-F?Q;w+nUrNBn?7)|XOHE*wOQb~={YvX5{OmEW;?34-BhaE=DVQIxM! zQCI#VWAjbMBHr3iR=X4iAe-Lc7(Ag>irx~S3qu}N7{}N$fh1y=re<1Xr1mD`2yFE> z$H=MAF5UT#dSA@RV$qFT^($UYg*YGCm};oPVUI#6;l6Cqqku|A52oQe?JHR896!#q z8N;%|A$&%LJ(B$Nr&>`|yL7@1Ebs*!Af)m0i~2+^*QCg4#b;kcM13+uG|O)b`jsSe zjx42AiZKMiUMqtYiow+&9t?83OfbS1AnV*`H3D6SzZy5nskT4P0>D_4H(v@pF4a)@ zsEPY4Tc{3uLO1lYE;mO9F@#@IVoTX8h~Wg9i(26OmUg)N&?>H29N) z8LI}B+u+Lp6B|E(Jt{jVK!Wz(+evy41aj(c6{9z zGDh$>51Y))7Y1CcTpQ!My~65(xjPEGw7FPcej2&gTo|lGBE~(6Pe3588#W*J&8!O)H%@21toDJ zt`1w07pHQ{Xl$L@^Gpr;F*L;&BJ{A#QJozsv2 zO8kK#9{~r!kZ&r#hKgsh+!3e+o**yFw8%S>)&qd4+I1xCDq7O&->1RD2GM4t%~qhh zw2vdbUMO|>#Ugz~Hx85Bvl*q07? z6Z$bwO*vSVfu;%v5IO!O4GTot&o7^MF8wcm4zm$?omNV5wa_N3qwk28SJW*_I(zW| z={_3{*pwT4m%QZ;*RQL7Z2`dMHvJ+DL+ZJ8nMyJ< z7V#yCor8EZ)<=RVg|GSLbkiO5{dK23! ztq>^0@%K#mhD=WAdj#F$NYQc&hnEw^!M9igz&!v?@S=RGKI&nrEAvc4vO4 z@8ZEMM>-bUM5E)6PF05ma;7rb0*&*!I;Z3RBA_BCvX_x!$ghgg`#8%3^#W~@=` zKy07=XBkvr4+`cNQEccpKRY-3+v59Q+_imMaRF8rjmO3XWsWMuxh9o4>$u@)5b06P zmkDPR3+Y)$sKGgXBsiyG2KKWFRo!P*K{_~9%w3p%EOq`<9 zLx;4P4{wQjZw6IGoO5-1(8OgtzdnB{H&St`Jm&jF0{c|n|gwqcB!MwORS1RopUfS|rL$5AY5+QbjyEX5LJ z|K(7AZ;n7CPl9p#@-i`i*yi&DJrYO7=g(GG+!aaROGQP|sTd>#*D~8he3ns#u_3mI zi?*o$Bp*>$%s^Q8pE5n(6L2*9arejEV}w502MF-07EN6wlS%Y^9P91&-u!O&bg)q; zHvE2fd;0R!PIS_nu9=;+Kd-Azkq$=n6rC^TTvSGt%Q!6s);;TkD{jph9^JbA?U?2?ns1pdF36~#z90fyOolR?5K{#Olq~CQK z(Do6!(;Gr!R)4=B!2^EdXyCGbMws&ZO!;;6m|j%-srh1H=@aK%w-+u|fWQDfvTR|! zMSeJwYJs`{W=X&F*h#Zsi|Z$nifIqsw-wlF@n@o^t;#KHe~Dig-=_uSS?`2c(CSM@ zt6>1cU-jm@N~NfvoAl$=2wRmDb4%H;?XZA>!OS?!Tzyi)#Go@?T-HN|=djehy#M0@ zFtc~_^6DZ=594U&*S)RJki5UN)na;Gmb#+;e39%&A*nqhYU6jbU~i+GFBzB#3q84k zEv!i?dm~1!K=e5~Ab?pYVUwlNv#B6D(%MTx05pD`^rsW9Xu3}Gx&e90eolhpQ`Qcw zC{tl0sIJYP>>KIif`Km43pU>F{jD5nsRj+O1i6QfwlV?<~ULM4*f}O10mEWHKIQ>E@I;5R6r<|GJ&Yi zOK!rC-i!QBDhb4@0xS9Z8{|i!Y=M}i?DvX=tiNW^?7+ZGIA`oiz!E;=Y%*^x5eX+u zR&a~;_7XnE56Cf-X_JdVj5(<8bomi6Lmi4(5L51G%YMiF0r9av3^#nJeRaRBseG@$ zb8(<~OJw~szI6QQWvHkKtCI@qP3Nr#wg|e9dEvbAzb)Gc_1~-6NVW*T)AC>2F{AdJ zpS*ZZwExTe6{XhmV`!C9R4tyuEy8jGqxJ&|`NgLeXG(>ft6A~I3=&KrtE!m7Q=TtW zwx9oXSPWDrEI2N7OFY=e?}V*51UP&~@3b}^-g%Et2x=lxx7FN|f85YisIj)hSCqd) z22_?M2=K9PRMmr&qsX=;Y)KRJk}+WmtMbc_?Qo~hWrBeQxP*E=9~uha5L=A4&bwnB zRuLh;v9AuTD63t|oNFR5aoIog8?TJxb}JkjN&Xw}`LG=hYTk)XsN%pl5_pmL%-EP#ns`+i5m*H9l$>mnf9gL7hTYNN>t!%b=EH9}AD-y2w=JCh zhvCGUDjx3^vCg0TfDkiTImy4;B+?bsP1m0x{jk~8T`0s(?x836Ol~{von!C&X8i9S z7D6>my+nAOmR{!)6;uPU>FUadxp9fgHnM8aX11*p8n?K)HU5W;n$Y!`-l!U?(Uic2 zgeNT3&P9~BLG1xiAJvNrt%u|#-jw7hqpR;x@uA$*FYSum62EuvYV{I?o+7L&ex zPj@au^0UvgJL3Ic@m|Kx%ONHI`)i*gSAkuw6e==6yvc2VDH}0^%|DSYm(uJSAtXAi zhX!vTHmzc`6%YG}?rQ=`BMJ*YU_|0a&i{(h_jMQNrd~B|B#cGtHG{lXX+$Q{K{;b& z)L?&EIEgH|P;>AKRcnD!$wRE6 zZrz{5H5L#~Hno(!otjPC{pd+Z(7D9=UmqBPn0W11CN&v9u-@ajJyOC)O&(QHu7+t0 zo?>knLDzd31gpv26C`->M?*ISO8NT65UlR8eZs1NQCVojTlFe35`e*I8 zqW-^9PfiK}=?c~Q3mXS^TdW27&1a_YvbZMQ)mG-cu=fJz0zoGthPwBIr$>b10|U^u zWLx@i6k~JMf$s8-Fa3FzB6#P-w}>Wk<=$$xZD_$%lmj0^TDlSO{{Ra?^uC)=Lcf3Y zB@35Nb=P@3^#&T>+K+h^kuq=>KShG&fghVR%+ch~NLY^wmXN?EBvX_h!SO?cEDB49 z7T4?O%?pz6cn#Rkv^+cK)suwhh zO9e9(8=frLNWkUB%_!~tfL7YQ5%y$x`AR&f^O$cVIC?g6_q`A2;Hk)2aHIzc6@QGZ z*)|6`^!q60PlYx~bCVY}^@lG6;g8Sw%;J)x) z)c)z)NM+<{xRG_X5maZIVTJs5mdf^j|Dz^;{WcB~NEt%DOaI>s0coqkt2bKbC(2r? zR+N0;Vlz(j@#bh*tdhT*(wm$)K>-hR3c{};#6dhV^Lb*91GP1xmyk#V*jR?aoUs_RFCsV}-b z^rp=^woU?vPe*v`e45rfr_H%d<3>lVs4ng^15T@RJsD6+k`l9i5+554zR=jDfQ@k3 z?&Z0i1vb<#tL{DF;?pXyVSqe?xGyfg9gvnqvw{M>DNq2LfxYDE!3-DDSaCRZAo~{SAr2?F8%)fcUsP9;3E~tJ|O9D0-hbv~{qUa~7 z*oz0kwSuIh2^g>m5D9ZB)7TWiW|i(&#k59Afdbf!lA1+dD~JLY0NCWrHlv)0H8j%i zbEe_f&NqYcQ4@+Ho7Po~`gGN3ieouwe<6CV5^Z(=)ZJZ*mMqQg~WCI_vBQHSo{nyd>^H-t;)ziicpr4!%YG)cj*XXh# zAH@NwhUm`AOL48JB>|g^j}5Vjk)yGZT+5Ohh7tTAKopWIvFhN?H9Fm{u0A%I%)^C` z&0@HsxaU%!Kmlwng;grXxCjbxhh8-c&9NB@_xADKLk0}XM#V}(mwF4WZbGCJJasF{ zAU}U+#@!TzYJl$|rY3Hw+Pbr0+?c1tc}Xu3ZvB8(`t@71iEWcB(}!m9Gv;@`KM((# zFGusQoP@(Z5X;bZBlEq5U}C`uOG|wQ-A@S$Z`)?awW5->9o}q7&gSYxeUSrsH%}^Z zYNjynAP88lBp#b3pW7SQFi<9tnWRs*aPK0I%_umf=wqc(pa3>2ZAFUljEDj`z~-Eb zZ!ut_!!!xlkg(_!Elhx=WY^Mw4L|<#F6WxT*!iZvq*_q~$EL@Og{i91h*O&YphS7U zaVy3@b(J}#Y&g#qnTH2nprYZbqCf#`R@HJAlTkGnc^aEPdzpZZ2Gc5`x(vWZ zNmHDTjEYauz}dP#S#Jl6sufkXGN`*dqisJbZh3fsNY#T)ilQxfnhu z?zuE6Pym}tbKQzj_oYC-De7Arz6ivraW)VA&{IrECKso^y3? zvfd7d0ym_kSyxS*S*5k%qdQUlTX$(wtHqb5@6u)(kUz>Fy@a`^UXPlx?1gM{Y9Xkd zm>yNc@G!}3_s{?ejA0cO+vnnO(%6*CsFar%*f5t*rm3O-gaX*eb2=}c zdA`n^UAy|kScc|ro-k*UBzwtn{q@_m@dvKGu%N~df%$fX_vRzCJg@?dZD9l|n}BHm z6${upp<$w|kpu1py&gLp)xWhL3)zP{eq_9H&Yz~@o81OIe1J08!AuDPL9xoq4#Z!pV4+T=A}g8m0z)iy2n${(MNaOiY| zS5AaDa)xK=op&No1@B&$Z32@e4VSOeaLon{H*VH((`F6ZdlaD@)m(n_k?7QdlUfGW zHRZi|>zuzXFKTL2&8Tmk(ieJxmyrXTj0H4aViByzfeqD);#K97t1v~4idTw$Rwo4t zV6!^cwU`yJGT0IBtpb~B$>5a`GC@#zW`aQp8fLr#P1?41t%D=(U%3-y!c*-=iUnO{P76;PpU9&P%3n9N2LsI->%`FojPvY zx;*Nf-+TlLu*t42@ZPLHaaPHBvt`1V-!yJCXwzBd7;I z_6}PA_UD*QKIsHD1X!rBrsGFu)zZAOmE-}6wK6&M?x>EMGu0RvWxo^7`fz{at~1Dvw*_X9TFMtUKE zjj)4u428gvEDj&~R8~RMl^-(oaX(#w~GL*;8BADKUV zF~A?c7+|h_VKg-Ts9GxlzkZvEZ|pTdK03o(ubqYadr#pUS#3Ct)H!9rQup~@FkmD6 zu5#zdSVV&sX)H3z4~532M;V2@ehOeS3LdC&z~#8qm5c3vNsG>zfFG6 zXl(ib&wiMs^ZUVo4R;bw?haYx9L0ZYh?FS0{`{EEJlq)-C5?53kIf*o?A@mOJ4K## zi6(K71Jcq*Q}jUDHKOSKf)E7-Rv!g=o1zHVl!Pftt((m0FpTieI3827lssZC1=w_v z)6zUe|9U}Wo?h_R`C(-K?q@9Ae{EvM`O5cw~%HwiLUKAztk3VVROE)HX?eW7Q z{?T_lPz2ewb>{hst@)Bny)-r|EF{kr=F1YVd8fuE1%d`~-tCI1@_|iuNx}|ypaR&e zET+xVy@*w0z?0{!;=70j($i{S@sRB5ulZeBv%OSDQvjPwb>)h2_n|;fm!Rwc@l4s8qjpZ^0|gTrACjFf6A2` zG`xB$!q4BiG)zzZSo(vP>$q-{#=_B`dow+!EfeP4x~kD+!lUn63hj&#KJvL->m$uT zqK$$)1~EnTZbRTE4P`ojOrAxPWd;~tBo;n4{Wxma?>SGfql;L^^m@zOR6bX-F+(D0 z#CWct;a70j@fGdkce&8m6wI(XDbPn_W0g@7z=jUuy@a7Q1TNs9CJ|m~vxnk4q4x$h z={4b~i0+m$TlRat6^t*mgQ8XxfOS=)v1P)X?+t9^`fzOxGZl!Xp!@QGO?=uOKx4CH zV3YSU7QkkOY*7N(sIR!L!y{E_1em%!fCK<|&Vd5hT%4sVG&UE9?!{A=odTl+HgR(P z98Ewc=*a*ZCG|`qGzp;$4s29msSaWGB7hnOu5^T^t_4(_lR*LDM!+>j5t+PnKa7m9 zGopRjSAD~nQQtIacGQZJ4~`37&_vjP(~EksflaQpkg?S8=lxENjjLoHmLcSYkIk@5 z88ILeu~SB;l*f%5SMPVQLt`<2pd;!C!fM z4(A&Ic5bTS@+li7gXqqgO37YT7^4Oy_z2n+z-B-qX3y6J`W}#Q7p>XiflWxZiP%qu zODhR{cs)WbFGph^g4RQ?YcXVrr?<4sw&f z^#dr~wOuP+R)e{&$`7NnErjpSNB+;>MSK6rh~+WP3ToGf)pWxW{j|MksHB2}vQkfA zBWi;&1qhj*vfxvBv9s__URi1K$?myr3rmv7X@womph z|AN0j7XWM#Yk?71gD$kpUYv7J=R(U{+{sKEpINWmFiXB&|&WZ2B#03fQo1 zfy_`5C=Bm}ujAXlJdXo!EZ~auHokDjG_GE+;`IX9^rP=`d|v>Y4yvj?5-L*~alL4| zr2sa|!H%Qsv%8PYqx*GeW*HTEvXT)?LXt<6>NP$xYY2sZ1B+;3+8d4hOt^@a_$LXI zNHNDKfK4}NWRk;Y7QFRt5G}e^6akv?veBR)U4(PR5gZD#A?^C#`-nF6;T;$XNIm~9 z+Q0v7H0$_+K%%%Lw_5QqSTbA9IYH%oE35@e061k+^DdvV&KcavA^+kjVd87`02?_a z!S`Ayw2VBN!TCmr9g{9TyF0?ic2!WZxxFy64)3aNG17NL&qa8 z*0Jws9ouTaSMHj`?K`RvR&HUE5_B%4#s%Yy0@!3o9s5@>8J6siJkb(AJBxGB1zV)z zL5rXOTd4GD>DW03-+alzxAz;+EMDE4AJaRNqVZ&CJgI#9B=N8iP3jr-i+ABcdl;2DJb6v)cMA7Flfb z%^7(A;IZf|r*(30&5-s zjKsaUW}^X4GhH9up|OzwM5TK=nOomUOP!iRLjkt|EnrzxcoUoXfDo{`e|LzF?y7QN z6Nu2|&O}Zr;Mac~tGh)EY{Yqo0YVdK2f$0`B0Rd^$G+Fw*kHBs>6>kQ^4cmk*GOxl za#|rZE+m%}z@`J(2m=J|tZdii;)naV^X;x+(F@6%H34iM?+0v1@P#4E z^eTZ33Hp!}_Zmk5QAmC`fT8J$|4q(NRR`35c~E$`ao)ux7w1G3wkMDnoSj`BqXB>Wifx(kIb`; zV1oQ`26<-1(wyz|Gr z(IUQ`P!zdFkt8NPqm9{x5SLH1@!4wweEh00R7j-|5JzhWiMiuEOKE^R?1% zN@FAWRRtzkY0 zBz$8*DRQ5%Md!eVhjAwTWT`PMu*nA+{ecbLcc$)7yMA{tKxU`OsySb?_1N#F*Xq$U z@7j*i?|ed=9>psEFF%TAe)$d@Mm}i?Q991zk$O9%YE*@+6?o;49U4b=2`eEyCaKDTEIlLF49wxUtINJSrg zDNq2L46u7 zZ$2EI>DE*B@ubZmpPLg4{yGX3&)!$Hwe|-ljPuMVh{c~15RITq2dJ(O%KL)TF%Q_p zOFD=tY5+1NfFVL8R93@lY^3fd|AAB$ocV+4I`b)-n{lyoyp7M^7~*4BO^9%B0zW46 zb&~Ia+FJo^I5j$ejd)GoIOF1xm*;R`ri!!eGTgQc->u_QH(U7X?UUG1;R*Zb{sCBL z0M03z3`&6l*yK=(wzvj>XJ0*uQ?nGtH;Fx4r%*K$_Eg2mpaN>pMJd{ifC62B%{O0g z@NEHXWaeR>R*tVIhcn#ql8FxH;F{?2n9fFiNoQf~-kcgU=Tbte zTg%uzZNWAO`p~@wcnQ(8pIPTPN67`3R$qCC*p?q+-|-f{^Ku>UG-_yI49#|c*+vt4 zwg&jxtrdKDX9*-S3XRQ$U+=XIY`Sn99cfPoz<>Pd3A}Ztj$3z4;J)iNV53OEUoh&0 zXVjse7z=JGv~(Oh>*7ydaPa5>9lEF$#kX|Y;Ax}hB1elON;HHa&tb!qb&)Vl=^8s} zlV*o}Y&eJ^p~{Z@F{%ukBMOE*oUZ!{RBh z=79|pP~x~EHxoAk-lzlL{Ml(7KH0!6J8Ssz-f3J_rS#)TdXvSIy|{B!6p+FzE5won zzzMK9de*_8zUbi5{RRxXf@+DPa=4Q)hc-$wJ|$}_H$!m&q-lmwGLU1jRG3KNBodj( zC=;IUBDoX?O%)uoCbFGC9I8<1CTk@qV>hdHj>HplwGYa8q;O5%fHa)=A3v$ByL0=} zoQAXO{L6Qv_U}Cvo@Yk7h<`yAq=oVTx0+|ee66oxrfl%+2zo*wH zgRU}z9~H1+^NkfGYVt*%c3;k2#eJMe+^;JpSQH_kwEhOqyF_1`ngK&M;CjGGGNm_W zv2_~w;s@8`Q@h8pk)>FnqZ`j*6Lyr8P$w;SMkW8yz%TCVfO zap-Li3tAPfWmAGmEHnaC!xrwo%EwneSjE*-7VM#&!UraD(Xa~z)-JFS8w3Fxrj(Tt zF3`~QBkVil;ae}%aqzt+c5gQD(4Et`V@nB47fw9By58GM@&!>bLoTq9=t1c8kIne_ zla~TK`mzSyvQV~pyc=6mmXVgw0Y!;$l|EO}kl2*bI|Lx;cd5FkO5VwLYz*`j>n5oH z%!$iW-V)d#7Z8>NFcq$=q^8ZtSE&)oU?kxKq%2*0%;)1%PyLE+B)&nGt783<=_0cM z|MUB`^}8>_NV5YUJsY|I?GxcSz9d3VugL0T2t?atZYt#Bw+i|aS?Sl1n-2{tWF;1& zDl$sHk*}n30MSL86fsL5bATN^&Y@~Tnjf!Jzlvy;MM~Qzy0FLpI0k{a!c6@jq z(ZPi0N0^&wp*c5;D=!Q1xw|LuiL1u3eN4JaCB_vN6{QR~0n37C<=S*ws`^ZGHEoa) z{8+z5et8;x`JRi%Uuxprb0&Pd497GXuxYgdz;ST><`56=E#vO(1}4Z+ySOeW1=c38 z;RkTGNrakU+9-gfky=*AY&*bnZ?*8m(GdGjw6L+-#{Dy`T&$ zm#*JK*-1PGHoP?fn?HWR$HOmbFe)}G%*9rmg2_Jy+|iN)8}TE74cq5Mf<7UA2^15s z;irC~_YgNSkf87e1J3~oUJZuDH4MxjM4};fUyQa>_j38hzmwJ{u06^~n=HChgmm0g zMLTLa2sRKtU^#5cU32}W(E^)SPs9C(-wn_4T!%`yx13MBu$^Tj)HRQbRS7I2tEzLl z=hile=cZzpSYyN{o&Xz31NHSDC9p~667i^P0g93+Iu0{qcP=(Q4rWMcNLLVsa04GL zH$=ho5-63ai))UO?@}z; z;Wh(o8H;ewRXV=3$HKNL zh2X1&B>gtvi~M~7Y_yQ0@hF6?(TPUKdrcodI7DH57LK0wV1{+vu@!je)@kh7O!*0l z>ta!WHd@u0Pu+OcF-c&!v3Tb@AQ9KF=7zw9c@fm4y?fBKOLJhW#F6su47dICVPF_M-mR+tGhtI$dq%;2KJ>4eU`DbR)a z`!U6e|6T$ce)u`l4)McRn|St+56>6}Yy<5m!fZ2u?}qSNI%)`U^?Db7?L#*1+9{Nt zA^Ak*=L}l$B)G%|xORaJ+YzO21>Z~vjZ>KSp;;GC?O(u=85_svGl@sbe0#`LjBXoi^ZTW2laa9B>jW zut=x)53cmdJajR@hVd7r_+^nhWHuqEWD+3U6iVDDotQama({~saFZPi!w3Asw7x~2 z%+*g5txVoJCOC-q_w}2!v2X0vCPumDfAkXOzx4_WI#k9ie(zBUq0>!4Aq2^axM->H zhEfWbb^r-c2TMj&rO2F8I0%6sV~ynjHrX^tQi(^OGY~J*3N)P%PTPm)2TXbB_&!2U zgBDr{$;ZPF5&BK+nrJge;m_Vw##J>PoUnqll-{A0V4evf;TxllpNH- zUkc%*_D5Y;m0GFP)_oXiCBh>bKgk9vqj2oBi)RkIc==r*vZ@Ge(w2o-sQd7}2%%@f z_5w^B^LXI)5`N{TD%OkgE!>|^(7jjW-Y8$XHQ3kM1UB(PQ^2FNSa7e31pv>VXyfTu z=5exB#Z1#eecnaYck$^xRXn)2f-P~-X%5HqmK|%5#g=!Srt zczC-V;>X7wJpGc3!|wu)R)$@*VHo`QO3uUv)7J~%4LZB_05-aCERHwy9-h7gY-lVL zg3BYVcz7|5k%j4s|1n{rn7C5*2BiLqF5S9F-QDoCXO+(&iTC^P))X#PpYi*U4zR zg^Q;Id-itb^vs{l_?fgb!o}D1BRD?bcoAIBhwFw+`@%9{Gi{#4tFl*ni^puB@I_>&P)a*lta)Bu3418MpB7V8VD6=a(`wW^FZsR z4s2*nv?feGyxC;H=B;x!tZE4%X>8m8jfMxWO|-UwAb{n};m)fKeDSt1+_;4wpu!*k z)6|-J|9nfMeDT&;Uj?uc-V}0kJJ}BL^qWom z?@@@j05*$$h4REje7fn)Qi_nY<%$cw-@Q+pzV!pzK&1`(E&R*x!}%Y+7bRJO z#SO70KnUC1e!2jgxUGUtH~`5f5+`FC6{Se4+!l8so5!dqAJ}l**ky6LVj)@2N#+#b zz=p60X=s{mgf@W|KjHz}j3;!)JLEv@hZ+MrXnDAH+QsK@G4Sb|E4XY-hZj)Vf50Ms zW=zHzjWmUFl=)ziN7>Ouct37S8Xab<cV|b z`^@PO_`$(Cesuw_GyOT7bj{=Mo!f-s*1K6mG5p%Ni z;HIpO97XsMP9}(eu%Y8cy$yUH`+eP z4E0tc!sD;Bu?XQxShIi<4p*g{cxX%a@W3 zxKV8teMr);>NK6eNf-oFoRC}~3@(&B*N0)4Opt|Shfvb+_XI0GMf@ucN`DxdJ~&# z0X}+j1rP2ijfKEA;fFxbn8n?f zyLjl%3a-Cw47R~bw6J|7kN1{&4r`_R0@$!kgN?NCfsNdJ8DLR%V#-rOC!P5F zjOK>E38a?-?dq%{g<@N50|~@VYElw2095~yYGJ?CjPT462jAb{#^KW@qUspT66J4= zppz|}0UO$c2;vBMkXq*+N_O^D5?0d>*htkr&66(acR^+diu57i!@(OrK{JCwhR;+= zOMeeO^>opQL4nP=y0_5}BlExixQVar>0yHH!Q5Jc|t&u%VUWu!9zwWebMJ{AuQ! z5$Y}OtQt|mLDD+1^$wZF(GLL6@!`~)*fs6pzMCxEcT){J*PF0Hz-@_0F*ZgZ5QADA zu<4%Ng1r~Hi^WZ-44|-lc4P)lKb?4;Kzkm5TuNP~9&h8KcVRik*;asO-fZDJ2OYfM zEMsz_3X`g+Ye37@QE!CYpGh+j**p-Xwa~=X;|<(@gN|Rhc?we{T4#|Su>dxUUXy+| z7QjZFXy^oVq7~waS6w{&T8PlFS!P<-)p2GXXotW|Bfyq*5k9>~$Cq~N*j^F9#uvaw zzLD~fRcIOo|Eb$eLKL>&tEQx6t51qc3L!$83UZc=d&;40KwGH<6LH=ba{kqs2;n(H z`463@EJ{ga0_S|-2QRnq*h?Oc%$U$?HZ044B?J;Bvg4b$cxWnAHggiq?yQPNr#G<4 z^uuzzaNh_PA}XHFjB4T;aju*$TBBS?)?^C&#F!OKim>s5$eL+*ajhrq6j_^vTvBTS3ZzbQq6tY$$G z-ih;Y_vy#LCSD`nHV)ci+6$iNn&m;Fzo`PZror6WeFQhlVyc&*L_T(j=Oex_}V?wxN3@Lua^M>F%1_p*-=bxmG)5p8}af5 zk%q%F4xZT8!VAZB*wrdZRg*dHot+10lRn=9#_RyMZx8TmcbK?+gJ5~pK0^H|C%;w7 zH$zP;#u|#2g-Ar3z0b5TNisHSOB*@g=MvjKBe4o>;t@zmEj2b76^0@|rHY%hH@*&# z_ND^Bwt@Fr5gyssz+e2lffG&%7^|ULGokr_8IaRtatfyPB_GOkGJNqM6{!hOCTG(R z*s$ho_ym;6(U|H{(J7s0)8%!LM7CqqUuPg-BPE9rH_Y!s*-f+N0_MCLj5pmNRV!-y zl!m`?hk;LAWniLdQd#aI8*_It9lPs_ie95`9^UAKVOgoUYWh!F6>rmbr=AWX0qMsVAfH@4i0VRq| zOn(Gwm}8O-IBjxDb+NwG#Aj}^@#R}exM7_E@-?H(!{kS-j%zv1Ivv0!tKJf5jsr-Z zyH{R>jhPmbnOn1Hl7Gf_SGG~`yCmh});VBc)WAmFP4>?;@%W2#I6PBAGpwRwTg)Mt z7N+fMs5dEsjUY?NoP!DAxK4iF65Cce9`iPui*7@wX%rD~$(0%zuU{(^=B=z)vNYi&GqR|%iE%ElD) z%**U@U1aN8V>AX*gg}m?ablksI<^oPNpfr?dzf-AXS*VWw(`Q03QkFrlfVWS7hSzS z<;jcXq#*l$08~PNrI@gRqq8o)cc6(U4?1|gZbPe%p=#Sq_8LBy!3OaQdlrpHan6nX zEHf%7g*o~I8{rF~T9{%mmqehDX@bo(wySWuB;?@?$rIHn6l0R1%h6CFn`|-P^w+t5 z$nrC1FG|4up&dH5O={RO&hI#}5aFHK2tR#0q#&K#t8D4*bz|mvHr|xotTX&v?LYz> z25^NoEB=1q)2^(=l$by|6l`g%*M*w|?9ND7X3!RZH}Uh98L5+wY5nMXGAj|Vp}J1Z zrjKUZgU5Wi%s9O;TNa%s*lW53Y#eN#aPhI-Iv%*Cj2ky{4M5u^5X_&U9weC99hg2# z+o5;_UvkOi<=L_+rYl)+IVKvKt}7MB1&hjvK~BdcrxP~_^LHW7jx{P^BS|LzZ36hk z@dm#8@;pwoD)6-`ESUmY5S4Ayp-r~4;v zF!7Z=W4Ll!VM+E@Nj>ld+D%pp8!7>2Y#$3Lxz#}BzUcHV+j8iQfkFiCYzB@rU-$wQ4P z$|@ddPhi8J+!xqLUx@gm%QtX8;0gW6nV6o7nXp(+}9>&s+e>46u)8PElrF#s5P5gLw*^%WN%zgEK+_f~NIv;k8CX4?d6 zcmdED#3&OR#`Lt5mF@;?7`W;<{jp<@cpQPVgaMhkmHo*zmn^hhv}8VSvb017gtC37 zizaQ@d1ZmkiDrZ!zR|>UM;llOsxWmM7Mp>AK-1wcU=zV52PpcKP%F(^*HCw;Tu%#o zHhcKWZDriOjr7DE*hmvOy<}@lVhp<^L$zPyz=of&TxfV>HpJtvw(;USJ{(WSWW`3+ zwy@x6IJ3a>N<;?WwOwefIoz}*z*p}a$47UmB^F3(bDJyQnAQ%fGQc8CG(60jhc)tx zZ)K=&fARd6^CY87Yf*8nwnO~9ENF4sUf#&D?Civ8q$7wE^1~QAG%7z z1Gkj0cbg5HTx}fMn@HGq2hPLHX(;KDX{-VpRT-BLY}A{j9aOH0qS+yBjWPl9JLB&H zS4CwVkmG~K2)15zCpmQ1#bZa>c=+sTu(hp5#q^F0aEaED;cTEEuxrVJE!v3=!9^LQY$SEDB zZh;EnR%`Sxyc^vv6cKz#|9d@x6TuIN?sfDod^JY}pwA{k)fI>IVXOYkFv z+c0~sR8^}IpJ71>8AWIDG!jhMX@W>$nYd?;F*5!UM56`ApK|<=A1_CAl`XwBSuuI7 zsLaKeIvJ!YSdzqoT=0_v?%;Gxw^U6t**=y60$5)nV|6mMh|`v>J%1V<=7WGh4Y1H8 zV=RYsJOWCLNaThg1;Bixjd8PqkMHI_HMf7jg6WglL*qU*ea=uznN$B|?{X*^A`Jo$ zN6$ZyF#IAO!F1~cYy^+6%+PVcTHc5ON|83fP@UrkXBIwXc9@WnZyJ95P7{wFY~!7U z5+dCKxtFoThla_4jh_WJ1_xxihGyWQ}^5V@@7JEC$%feq{Ds>CnsLQTfS~`JPCT!+c|SwQRNWKst%Nx-mwn7o0Y! zkpmkcJ4tZ!jgW-8bmL>yFi|!w7CQdwSr^}Xc^*$6jqv`$7%J5&Y}(Ptd=_vYk(3iF z!#ms=I^K+z3T$K*Y!wSC$cCN%rS(%TkOFqpweJ;1n*}yB{+1VvHQivOwW7w##{5{> zXz&DtX=yV!uu;vG0!<79a}*GlrAa??p-RtgfFbtD7P6XW{iX8`Hx>CF&~Ag}sbS`A zVL)L;DK(ut&XQxj2h7hepk_Dmp=(Th?T&GLaI1|<1hiX}AdcRTBw8vSTUHsjl=$hc z(xjV~RopNXuwiM8yFMuuRxWJW+@C38psoV|i>$~Z)0i;ZCf%#1$aqha!R?m%0 z*KhIg;9e6S*;&SfL9ZH#Lo#k$d{b1PZHEi>As3!!@l9^z(Muc@ zBp)Z$W#luMxhH;Db_0`N@E#=Kkf*QZ0ygQrUOEKxVFtR6vdKgFkDm|loflhp`mlzR ztqQcNfym~Ysu55D!URPyzllut_da1M80W8k4XCvp1+${05_ zG##oNCA@;g0M&Q7V<}ezu<1cb@_ka!Mu!y)sn7v}&62}-`I0!0 zko?t@QW5I*Bta6@jHC7xEql7{;n96fJa>$8UrjR5!t^as#503y6xEgh8^W0sw+8UwQHOD%lrdf*Ft$FSAVJ2Ti1xhEIR^C_@4H8xTTix>XLnHC;aYCnIX&)r8d`aevYer1A|nLT#f9^JJ>SS#=SQg_}rcvc9@jZO~!p+eE%91F7#vm zxNV28OR^cUs??P0UAgElbrVV(5#(zfry*0$M0q3Pi;~)dN#nB|dUP%s*~K+0WG+bN zO8F;fVkIiSpaXB53h>yAF1~vp#Hp}^aLj;R(U|g%?x(PE+UHmoGKwiqB9eeQsSOww zP_lt4W~}&xDmqfN_$l$B{LxSBXUWXFro1Ztv>${csTE}zx-(TZXQY!YGr%Zj!PFQs z!kEulIHNO>H5y=(<;1+)Kiz4UoVV3B%={=nh$STp0)*#BXtk-n6Zb=7HHEYY0Rd?y zFg2DrIBd3|J7;jmZVO-i;3V$3yux^mqMs;XqakfDnF+ARW*O{)0Gq6uC^HaIx}w`& z#PZq5FV!r`aoH-a2~92zY?514_hbHPS~Hy7$()f1RPd5lg45I56P|~M@B4?&Hu1zO zExhus3A;AMeSG9@Cf3>!{!+g0vvt-K2RAw>`ILMy2w;bExczbu58hV8p6M!Tl*)l; zzUfAq;`2pNVC?}LMdLu+#3FCn001BWNkl2@NP zgpVG@gS2eWV=9;NuBx=>rX%b*c!o z3Q86gb_-yYNPVbdhVs}@vS zRzeAu*^~hrRS>7Q1nDNgcMg$TCbNqq&sq$y5z?-My@wE5BX~8~rbfa;2oT!1#wwI~ zI>HO@x=bbg?6D9hT?^$g8+OTtN%fWk4sw`=I^JPr<_@l5NSpzNpHoNTH&s3h;lj`R z`M`#T)a&4$<&$KDR7}yYwY`vJ>!Pn}$(XO$Mk6)@vFJ3Bk3{sE!hH-xrw1*^#J}p5 z&ad|{Ra2CFjO;r%TXUv6Da+OThAFbkoJz8;r9t^;A~c#I9EY5Q&2Kvo8vIH0jaM&y%ji0>Sj!%tp!G1shMVtj%d z-&Mw;dTueWks2EgjTo>IppL+6bD@QGb_=&(Vd6`7jN!T|8i5C+05&7#&b0?@GUR)k z3LzeH@Uz1n9CGI}Y#0_r$ArwsrbWPJmS-MjCJKwQYY95)tpH`y!CkvTeDRhtZeDN3 zUhd0bjLOq#^y7wJz=lqgQWHakA7jIkJa(o!?>q}h_ma$EsAEV;NOix_Ufl0_1V#j1 zOiZ5OXm7GgysXC2(>@-3aSl(v*2G+3L90x_uqteWv?z(6m@EUqsVn3HNdm*Xsj8Aa zzMa(o5Q?&74YG;{*`3-&0&+OgqEOlNrLJinr*JSveKwt7()B}9N)COMEWKGPn{#Pt zoS30vl4OUY{GH;yC1jlIIKfL$CA`E`04YUrD$yLZkFjHZu_M-Ary{1jspIm98Hcja z$^ak5#eITl!vc;(8fnDx0p7rcY4YZEY}+A zV$B1a{U;nee$d6icgdlm%pAjX!-H-_uuCSIZKDI&FelegXB(EKySQ?_g9mT7@sS-i zYH>tRykm}xrPNok+ddYDVT)g~(Jt{|D3dQMG?}CVjupMJ%AwZ|C?YbH*>xM!r2=f2 zJQ8_sbMtAx_J1dIsD{E6SL7IwDLGgmLWm33H?SdT=y*Z3#iOJK6^&8FHWsS3-bmOa zeQO$sC9T+jSTvP)q(<9A0nl%7D&QmMZ`PhkPo4--U9e2m2`)%utsK|12pq$|5Lu~N zR$+1)^&%`ZsDLi_`esh0OhZHA-TYqC#I)yKl!7*HxkASSciH&p)fT3xtrLMtLy;*X zC5n|l*oX^Y!)V!Y{2I9020;s9CDja+Yyn|SPikM|bJ zC{gVXg8&6V`o08{4})oJEHqmN&dmXy)YupyBDM+Y@I8%XqFrY%;J&>U?%!R(R!VB4 zZZ!RN*+p_q=DflEe#CRx@8s;u!kAe6K+aQSTuHYbu_Gae=p&iXYSY+ABE@Dm@d2Yy z1lVMjBFzn@SAVySM_*~+$FGGr<AJPESjd+;J@sye|3M^AiM{N^x-%(fqlc|lkv_JnT$ulQC3lkpczo&HVN?z&`wSju z!zsamYA3Lv2pFEf1kA~o{4OYo9_6PIXLkl@cz&aZMcvHJHc<`RxOJP3`|qsc!`Il@ zR05(lFE_&S^Re7L3bb1+uo>BYBnB|3k4;>lwsS?eIVgwy#7D8lhDAap+w0OaHra7- zV8h=N3l*D+BD?tUv3dOHP#vdQ6DXJ0F%uPg5BdTdo^_aMYyy%KT+8DaR2riV-93*F zU#{cpdna()){&-)TBJl-UAL`SU_-BED+=-O3k^JZ7-(u^uq_I|qZ-j32$)-TC$Nba zu<;RU2Fp50;SClV_~11LzI;;|x2_jCB-NdGkvx+pYVx|Gb`sby+b`vmk-&z(h8?#_ z$F_Kr?l|rA2R2zj*-hB=5<-h4P2bx(XWaLexB=ZO_O0Y3ES!T0x0Y?75dhDh4)E{` z3;4+!Ks~6UR_1l3cm~;o0f=WpDrn6>4Hu6b*z}Sz>Ua6a&TI(tBknupi?SGC zBcqS9$v-q`o*$ONFfzl4UIZr414Gw*%ha5t5Jr~ng996RXJ^=YZ|U4Wr(?pAtfyG* zBI*#a2X}I<1UB(49RuTeRfzs%*=;)^+U*cgM53E#Rbd)HdZ->E@I5$g0Ik);-mPFh z7azR3g!SaB*W$p44q9Xar&>{|+Fw~lcG4pa3;`R9qG2o!Y-VO7xPittn22I~3E0qPLj~*n5Ju3%RU0CFX-^rSzLHAW z4{>!tFA}W8o4eAb`U1qM<>Ir|0tNmRML?D4R9*t+BH+dMU3~lb27dWkgwULz#3VfFpA7$Ixk>13?ujr_A>`Ns zWNF-IxE*M#%OgG`yE7$~6pL5pA7 zY`z?|r-WYo4M_{e^m?(;ijTMkhxf$NLHH3ImuKK+B}IhAmsN!)o(Nq8UIT&S;`+-> zeD&5b+;@GMr5K=W!yZ*;k(qC^Wxf_a_2KRul0AEMuI8u8wo@}BFb-40y}Ndrzk_kD z)?j;8`nf!QiK5M@OoL+s`%XCc;lX(vJwxWeF;wiaxZ-%swc>n2>)mVy!pDZN5ov75 z&xUJFnWH!>-b$LdHuT0htczxF-<~Pl|G{n8R8#7F4Yx`~>l_NKSzy!lBOEy4;JYt3 z@akCu=J*uD0$LQnh@hz-Dp#fk{CvA}u}zGSCU^=f|4(s~1}M>6-@T zsp@alW*R?Y0OA7@-c*Xgq)jsxfU;`nV4H9}+8A8qYZOvKS}oG42wwJU=5}sWNx*RI z`z-xq<6&~HPJ4W0;7r`M|J()vHd0Qh-S#|*4;5CQeiN93E}M>wkV(WO|0c1%#gCyb zgrhKl5=x#&`D*+?7J=2^3$vA6zIL+(E2?AHh6wlHTEl(URq=r`X=%964NHxrYGwM9 za&ZjZ>#o5uLf>bvd|<;hca++}wt=%Q@Z7OBo<7>fDbGY0*{En113ofa8L@-ReC)ar zn(csB_a*>i7%Z}qU1XQmbY_b3C=XF%0VQt+JH}i1)QwZP_lC=`X_87X^d)1_U_c72 zSzt5oM0n=4Hl9A@;CRDAX<|$`WKxC+4s1-zWEz|EIT{-&wFq1U#LV?M+_g2t*YBLd zjhibd+mv{zcZjXnKa-`(Ft&VwgmptPi||A%vEQ$#kj-8>_J1{2KsmlEOi=)v0pE~J zGYaXJ+5&PAt=K@Fa$UUH#jSPuZ{>n}nYZt_PvcQ0RfTReg?^3`f#h1eXn+%%Dl3akk_~UL)K=~}(^<2)f z%yzjHrBe)FcvE?{7RgN*HAE6XA)q+u$p9O%48#jmPp<7!pv63ty z)rgvPP>EW&X&Z3gEhT*Tni95GbObI>Gr+X4Bs3MR)KFM$aje~W*IEKLVnd`_aRhAM zoe%Kj!4{rA>Y{FyU|A(pb(5unV9}(4wMlbNWFo-QXp_b!V8BKv%`N5rV&+E!UKqh8 zw*|k2jb#^CY>aT*P7Akgt6=*?8C9F7J{agQJgW6w#r>>7V8dDGWFx?1ue9;gw=|r0 zZB)l78wtr9av&t}g^NU?XpqDfd-yAunv%3yc_blqT?jj0UnIxep{*t^5V-Yds({bmd6C?Y{_>(a7$G1q)~IO&4-x(0y_`9Fj>a>~QQ`&)SB zOc|}HjGE2mjm~O>_)N8InFiYJEU@86c1!%y#2?X}fxV@hw}j%^ygcF!bsPjOEh zmVH#nvXnhuS?Uz@5GM!rkH}ss3rO-hL?ZW$>WPw`z&36_DgGeWxnymiLjXKh_ zBY{9VPGqpP%S|q)ESr+$oogqR)$i`GDTQkm*rWkp^4H*e!sKR3x+HX<@sYlRKozB6 z2t-)+K!LG+hL8&Pjt8CrHaTwwUy}qHF`qn9VVWF;ofeOBlF?EU6KRG92VhxjHP6G& z2@hZ1YvOY^moZ5;8aIOHQ|^<+CmkH(MIOBAg#tDijM6K5uixN@z%_ZemX%qsjR-Bu zS#>_Z^T%DhezJwr^JF3{Lo-Uu%oH0e1&yc(W`mL_QVjr1xOOve z=PnC(ZMU&w!e(YK32I_q$-WZR;NgwdILlvC z6&h&rv4KW50|GXt05()fS88lHupzc35X8>1h6Tq9VK{B<2`EtjLz}!H2 zJ`!Fd4<3be(?YW}0TJdx4bQz6;PDq-96A+Y&b3gg*o?op+YK2h=v2pGbga?PG+vB@ z0~>NO4%WfD@9vMClQsdJBL^lZ7=**#(wUWYCYB$&mm^md#eZKl~NivA=9QJ3b zDtbR)lf;+FNPU^Z#PdV6nm+T7A)&`l>j`CODbF-~_<@HjH-xzV77GtvZ(&!3GMk6I zQasT>I_52sO_zRK20(Wp&&5BXmygZjd+oe)aA1?3t2|IpYzQ4*$b-0{11FmS-kouA z`27IKPHLEKnxG_mWNNZXCIhy#zAcY{4OL`kaGb5b8~D&P7dzJbxP6C)Teg*O)wGHA zC7tIP7TdTqJ@OragMD>$1A+Nb5^)vuwd#QlXAqudjk|6dIJ-bjVGDTjNQ5)d1nhE| zn+llFqOe?IT#W&nCezq(U_)w05@4jZCy_)i0KNNEww_MzUfaidtBo)1)$o~XEo`jX zTw@daEO2j971+eTi(i-%aKM3$lmKi?Wr@8qz($0Y<^vnaorT6`$?vHGY}CG3GCvC8 zWSTWXIw2~$fm4o#AHVJ62QNE#{_O}0p@pfcjgqdx2m*vrfRLT&MK$R8ugn%2Q^ z4N!21dU4GT>dUaNuKn?ihcZw;Tk!N#tt z#(Zkp9u>6YS&CWz11$BD`MGNcO9M8&1hDkkTJGsB1=ui_ktSnO-B=v7P*Ujk=K>r( z5#Wu}z#C^goN18HlntBIE~W;@Cy>gc*~t7vpuD6zxNfV4d#}}T`&J!WN(SfUkcaZe z`?laEk^YE-eT5ARU^6_&uWDe!;~MByqAeo#I>TOm5dDol zr@}ATZ-$OtROUWsU_+I7saDja$`sg0_%21c1Ym<46{(v?B{u6JZh!Xq+vjfZbv}q%TwSdPmS>pzud)x&z9(HY@?rb(W`UO+2j;eCmfCSG#RB} zQ!rb1kTHsGxk5saSrNeso1mc4gl+`BRSRNtW~V~mdfJ-P6{?(%felyM))S}w!j;Z7 z2!sv*7!Se z*^TEX9%&3?8elV%Khd_NnxAOtxKj6^#F*->P#K&@&^{i@OT2AFn+6`giA7oON2wiYa34s0yzFMjeGR%MPM^`_nx^tHtR76@}J2l zsalrf&2ff*`^_G{e*X^cf40Urr|hMh=yxP)#&QjD6@-jxpo_bCMp9MRc1A?C02=}U ztT`c?|et3N*PS9V}S8l1U*^t7gqjux7|-W0v#^rspKnRnWTl4Hm}P4A_RoGTh~8 z2-Blzga4!TpD09qGA=m*9|_s>}ijNoh z_)^<@74X`y#&2G$@W}HM{PvXzUfd~gYSPDeTA-W&CkGWe*%-H6HpKt*$t`^L21(jV zwdR=rt0~xMO!5;qCBseGNZMdC)6&m|GuNP+^_bV&=!4rG< zulMcX!I%0N76)+XP!D~QYlamV*f@;{;{st{s{tDWGoqc5mZF@)a)afhQRZr3!BW$Q z7urjmcBN4%#(fGQ(cu{dHh~it4Eha_c)u25)Y=(6z49kMF-yWS+H0fgd}ei+)!>JlJnzfiQ(Qv zlIT%(B8qw{YA%|{eWO$P?iiinF0Q|1ia-4D7QXc1ExhkY0g9fP5ThV1Kp}^rm9Dc6 zY?^gw`XdoQt6rxAZ2UXe#JlQCllxW&HVgD)!HHYxNcSN-GN`losS2p>8&!GHPO7Cv=-j{z@%BBC#vQK50&mSiDN+U7T^Mb^xo zEV;-$%e0%!&3-3ppYwa6Job(QHZPBAeEZP>zW>+=<9ri!r_aubw3!NaP?)R-Y@*6M zVv;zqcM2c5y25||ku7}sx}IdRq*U6pF<3P&YMR&+zVVb1=DtjIdeIcMXp_BF8XI;8 zCZ}?WgvtxfiSgoIiGO%}fUi9`#KSLlfZjH?yB%~@yArY#8>4f%a#jI0L@5FiOt04p zi3IHME#${VrXXS5d_wduN?#gB=rH#_TxgGQ5d&t{WA5!Zhj zN+|?-Ur}_qg)%QO$x1ogjBC^|LhBS+mnVtd%P64?86)Md$#g88%N+_^1DzTA|@!_kc_%EN` z!e`$rzLpeeMSDFcU2V@8xHliQ$PGb(I2C7h7FT}=5$)&2%g?~u6xam4hbGAq_e5fd zPrf?{6W?yIMGqkTR8&SLb1J^z3x7OFlLn>L=B#Nn;aEugsw3WX!}x zz7}PT*LQ|^&*2fi@}UmCeA_mtc9ABnRCA^*fEUKVcOTus*M2#|uU{$9-8hJ%SBM>*6b(uXK|QUX+knlSvo!ORo=Kf^*kqXI;DgD540v{2;s5-_6#w;yL}Oj-4ky^`jPTL- zl=z=Nw}sDKC%}fPwDTdxH21c?=4kIzT-hNfN%9)pAN2R2oHVzHHQ3zhy0|qOJx^|Z zn*tk}T@Iqt>c)b+r>OC7zuUvN9-rWeS32l!5U>%}CMU=k*mOD_>Uu7h~*rCmNH4pDLBRj10?IW%a<&jB%91UBbjk_otyC5lwe znzW4y-(?+1UWMnX|z9PJ`+%)X%yIm zB~M4StaxslaB2fRLF;2?E4@!JnE)_?a2)-p$qVy}-Jr#zf~1BwMUm1*g48&9-f)j{ zl5m_Ohx>-YLF8YT0Vl^(Ovih;qPvU#@PR(QeA@xM?`WUXVok@CpGb{`O}j{`N;?F6uG=?`M0s z?dmc9mp?p+&k@b4b^rh%07*naRH?>>67`XMu#katPe-{s=Kve(iSvusTq1HayIWZF z;|er&5!kFSN$1}!v%uyQYJB^lH}JzJD!eo}h~8FT>Uyvl>hyt)@kEMRo$l@6`XfVp z{-c}t+zp#}7v-!VZBSLAsJqB(sU@<4!Rd@l?L}a7My7FjBP1Vw+B+ zpWU6}`;U+D^@mD4@=Aem(Z}I_fi1P3OjLbC?2AidSaQeYbm!^DVEb-pkGskEt%q8U<;OUI;rzX`0wdL@A-oB)$M83UWfC!qz{s5+iB zR&0)9S*n^F&Vf&+H^Ny2UL;+EIPq9088Lwv*ogC{n3wkk6*~;`W0a?c`&OeSHCa|* zZ%|{jw}bZ_8sLvU(7`>oZQ}!%^jMG$$p%dViI;PqMuYPl*jO}?K}a#lHl5ZP*L7)# z$^p{lks|Gd{*t|L_@qgSmz~B6Ej8V0PoxKX%-2py+Ly7&G#+Wivp8;SKGoiTt2?f2d^0<^Rb8NIu`NBwXm^B5`eS_b#sc@=zJXhh162KdJP z6FmNEk2QzeHiOfXeWUSyu0T_q9 zbNG~sS+?EH0XDQ&UD3b}hb4wX%2Y+5hTOsnOlmSdl^pI{*98VA2DrL&3SamDaL=cY z;s(k*UIIHqHC8D|T1!i_kbu`Y617RWw&!QpvNfA^OTR>GrqAo&mWzeHt!j15PL{DP z%kUhl=Stgob?4!>qk+M)rjwkE!R@&K#K?y(1GWlarvm=lBd74c|L{$`aH5M7JHSRdmP@+z{ZmBwb62mDT;dH0f_C0Xfi@!H#rQjqp>deB7k!d*sMfS z=i5y&uo;vYo_KAFZ$0n^9(y@Q)jb4sx|(-FGQNAJo{)OWbfpiLZXLi@UBQ^j~69O;J|`GEP@};asN=jP^HHa>@)w9Ot1XjP8b+(P`J?5iFwWnTcBM2!4h)ikawFZ#LGz zbqeK+R47=KT>?~>Z0YrO{5k+{`AA}}E&yjHGlFV8X?{8yDfj5fF~0f4DctwSDI7mh zW=mea#|cn6;o z8{`i(2 zF6-qORTWD1uUT*VzSR?a5!kH10;I7K@vFdwz>S)mHhRGGZ&vu$uLk(WgJV3kyMbx1 z&)|kAl0vb)zlx9ZOi#2knm=cRZ;RGtV3Q0dv|(iz{O?I9df_G0OlRDK%!S42UX>^D z>9e-#*YXSF2={qJJiaM8M|d zy&6A!a)=*4QR0=oF1EJ&9B#=>S2gCMu_1Our?d4nHcYZ)lczt(e`YjBe|iF+dLQuR zj~u}Jk8OdXQpx{N^Lm{J^R!wQE&`j?=BfQIF?~>k1=YwS8rbe;*z5q$953)1koqJiCg<#-=^2B!NVlzXJHp@8855C&#$#k}X_+#TK^6@s`{SFA$B* zJYXZ=YsLVjQCjPsmdmlZCOI$~5x657?5ZQZ*9pz8%9#W%szH$5Rx;H}Ss92l(=x+xVj!F5wKvY;R3{C*Cp=Snb6Zfz4|3)P5Iv z%&;pk3q{h_mD3Dc6d}_CemAJ`fB)N?`1%85ys)!{t?g|TOlU2wsRZ`T^RtMsoIOXg!y(NKUXWg*}-J#}nG8Q!Yr$abqNuYc6REilnLr103z|;#0SD z@P*rt;FhBWwsK%Jjm<70e@-i5tY}6_`+7R0xa8Scb78yi)qHY6`@%^cE%{sr7!|;e zA9)o|zqo^IEd47it#x#HR)GOXD^*6@#=b8em_8iobJ?#_P@dStPY>kBg?zZ(+HTrrr5Og^(? zquOrb6J*oZd5L2KuyN1J8jG5I9z$=P1#cGO@agvVr^);xVB@*FYI@>#CA-Dz(R~`% zmJUkR@#f<4qX}5x{2=7-%Qc)TjK)*RIl_R4%wiqZLJY?xvf&7qW_$S5tvT-g=mFev zMPD*Wvz^8869L#pVzoQOt|*kxA+T9ig*ymVS5JvG)Kv4R2D((%s{fj~ z@DMMLD0j^UHbXrS0XC}XXN`?i_XhG_&QT4oF99}|@zuh&tG<}H%E1Wr&Pg1~cJc3S z-o(APAH~&23s%olnfnXrx(IAeceTjjTrv`ioGLJ(I!IJdHP3J`&++6dBmBcJ_VE2j zfoBGNOg1;z=cZRy?5s|S{wB(O$YX)1Ha_XuDm5%>Rba!Yi$iwShBYx`O;Q*{(N-ZV zjm+g+1#D#gNoyk@jzJ=40+wpq!%>MT+Yd4nMZw|SgmCCEGTIs8^6mhixe55;kL!?hFQCF`gU{{>OGYo8^<|quDHIr2MbwaU_Qh2$hV1OQScFLOdYqK`q zGGN1KhJcNDp)tPU$xr8Wy%jlKPI)Gte@6hDr%z4sohJtP*C(eqg###x9{NE?+-PgW zwTtZNlJkNzHUexaOo?)X#wI8r<$OzYOU3)NYAct!ugB<2cW^M@!wtu}_}q=#xZ|n= zxO|J$+Q29-;C&|6@~pOT5!jsm^h(%r4H5tZZYla{tbQJs^dwQ_W3Nx~-|jnwZ$CE0 zGkcrZICubgNf2g=N=nf436T88m~uVOQD+YJI^`U+h-v9nxb#eYmRGvH=Lp?n?#8#=(TB0@Db z+kJrQDBb^BiNE{h9)9`c4&J>r#l0Wh#=pDy0FG_-c)nUzG|bg{G`8X#t_f`1(O~(; z55R`}he%f=uH)on->Evt=|tk37t#jbYGA|WRkb+yJ=yegE&c8C`8o%8yiI|P61!$6 z{pIr`eDje39(}pMsK150Q)ta5VV9a*6y)ni&c-EcY%+AZId+FNUOQPjU_)72<)lXu zRm9Lt!$`G6s>u}7(GcBw7w^7wj9aho;;uh9f?JPm;1H#AAChp(K$eKW6wbjypYAIz z0-MvF!6tBr*&NktQu`%G;FQ2dSA4IYIx)rH{qu2r=iwU1t3${(`cinco}f!WpcdC+ zmUm5{MSRXuowg5zP~}0(K*Szpws>JpC76xJc=l`xLjL#sjIh{I821df6UJKL{zof%p z2N@3bGQ2*j@S|sj`1&JLJo?-OM|)Fz;<^f7`siWYa%>BGRAws*8H?v*Jz#S>`?Bp# zO-hT=Yzmj9pKZ4$79~~k@Wj|Dyl1|YD zQ7Q=>78p4?J#sXz@Y>E4Q$jE(c=OunlI+9;#_4V2vch0AMqLhZG#ldmSLL|#=1tsu zWe-;$>S3EADQdFMYxP#jUYdB(pOFz{1Wg zu;Jb626DE5jkwBH$jI3vuOy0*!m~#?%Cd{9q|gD$7+p4cTVT1Pbm?EbnPMxd`)E2As1F+FK48lg^-d8Db>&fjr0yZ9q6652;87rr1^r<*x zPT93f{P6KT{L9ldo_viW{HD16zySa8j%|GImV@YXUK{dTG$Oq)flbO0JSZ^Nh5!Z$ z1TJ79t0rqb8^ESv73zED83*qdDdTV<>22QDz{YUq@82BazTfWRp%*H=u(N@kX&+Tl zpz0KSG9!oJq9kxbz6=@#K`QDluro1WL(AVmr16j5V{wNz^hMtN36A*M+OGiSU*RYXUZuqNQJm#_@^Q#`x!lcJbJ&9sF*u z&&lZyOn30d6hQHj1Gw%`hEZ8#q?(LWgLR>3Y~}$Q+dYx;qwyY%OrDU z32YJVRlox;O!3X1AICpGTH^J+12}kio3#T|a#Uo)xQ{{-6KU}5Q0G|Q5sk7&y_Y5b z3wD{S?0 z^oxw6fQmwVlw?LTPU%2BwUIYz2zB5?rFl|$^%oH_~Z*dOk+t|Jizm(Ht@>0k5i)(<#39RUQ^@GKGMa-bCZB zVdf87hwXfgrFz=|8?*RZ=1=l_;rs#_+0SddGN|#u^JDz#nF)UXdX1Bl0_b(o>-G4) zoE!(q!80ou*qoY7@!F{pBMxKjqKgbYO{F~=j?k%haqY1hAHJ@K+pq28`Xe12?&J)9 zNT)3c`@~P)oH|*ITm&{N?ZLOAq=JY~$80s!dZiABo6OMJJVoJ`RCrQtosC|EBA&?n zL13AH%|uT91Yk%|JbiqOZ~p8g?t7xdv>;&9LrLX8I+R;UD^)X5k^h&ZP$%I~aSbK0 zn+vdMSQm$;>g7vFn96w`l$&L&Z5|^sf1>+X0BjPSrN1{7ZoWU_SCE9cE(%uVp-QN0 zr=PRgZ!)6jrwJ-bDn<3%@(LT9z`Ks-xaq1cJN#d^mGQsBJ>mx%!b=ac*}7oU3q`Gw zZxjnP-P6)nJLQT-Eb_TI4PYbSQ+%%XQ~F~Wu<_R@h!uvHTU#|dO*sE~g zZ%6pW6C=Dn*}{ow56AbWm<*@5_V5H>`e1>(KfH;pBID5dse-`ZKtQ~DLB5yu_TaL+ z0%y6T}%#w5uf3^1@EZHyNF zqcwVST;aE`Px0hS6Fl~OiRX@YFeJEAWGFf{hkqKd*%_C3?bK9(O^1CD$jP|Zsc`AW z5bwWYijUvW!%dfWadfj_(8E$hBL3JHg8t;BeQy1kw_QNCsCSaaCIvQDW$3(jGwqpmvW$4tiq8x!+# zN1MjSo^5I=&z{^C>Pn47}&v z9b9vH7uR1|;60b+II=;S*^HfB$sx0@CkzxDT@)3v1!s>w(96*8YH@HE?I>|kv^sIl zs{}VM=hseSb3OnY#cj=hND-a0@*7XQQR2IgPVne+B}V9DSaxu7r@~}1MIXoUi5n~2 z`|(R~-H|?eb%x2r^22NS5vs?P0GqQXHZKAjPkixg$N@jT=#(UmWF6Aj=>P|>e@OWm0XSTB`pGvG!Ykp&2ox5A2c>In_ELS=K>p|F)|hDkycKlHA*snkVcUH zsoABZqL-Bb-w6t-DMLTkl1qj7$l*g>Og1z8>cug>^^@ax?3o;|4Gy5*+(g!;3gS~% zV07vhV8cYIMJQd-$ECm~Y~mPkYuA7c zfe=Abl3kVf1eu&_u4yvCMqS~OUV+OGWw_z09PhiPgR3v=;n)FSBd2>Q`*4Qg*fd`f z9xj&vP}{eNp&?no&)X5$#LQOpP>NQw9&q1tV|?SG34VXP!$pS6X^z1T zFs(}L?Y)K@uNdK;JCEWM*KXn%)y|_RG_H~^8RA*RO`1oiUp#wa@*=QV3~W3gH^3ru zR#^Qh7hT2MP50b#&VF|9xL`Fl257O%DM4?o@?G zpB>}Z&kpgsmrCr7yXf{d(B0~RvKAAtp%BHo=wdRcG1whpvpc|l_lZ9K`pyG5q>&Jm zCZ98ClbB+CDs5CMoJa51Tp%7x=a$x1<|E01Mg3l&omVBu>Yej#r8O{CZ)N7r`8?3dmbg1Kr<*j= zd@m;M1TZEIFQdWJ7(#gTf(15Q)J`q=3?@9oq|>riz7bFn^dvm##QZsTje3X;Yv7Gx zg_n1xc=+it9(`tl<0lG~{XRzBE>28UboU}&H=O-{dsjbFNht3`wa`4!FYDR0LF?~(=$uJRjQ%fHN+*tr6h1`rr=;b49 z6ccQBOI*55J~SJ+@#-zS=U5MiHh|4;2Erm;HXpNH1QqQ~a-t5}D47h78ZqQ#g>z|} zGx)60?Eu}444s~=!8McDcbp^mYpPOZ664u$%w3h>b;skU6`PPs>*eio6zW4YJ zhk5T62Qftl73BunlRQnk19G~a;saOL`0~fPxc$l;y}HJv5@5p#2Wm=a=Z%u{dZ&I? z>CfD`b!Tp!891}|a&I+F!2ViZaii|9aot>$RXc6KGJrau?)Z}T6?6}QqBlVvM=uoKQD?25gcy5fRUYy{!uV;9Ar-Rq0 z1@=faJ?&y|uf$-mhs(E1{N*P%@mF_l;8F_rRA3{*MSx9p5!f*KT?oJ?+K53QtFU)J zdNLzxk^utI43fEtOp!IFbn;g}s$dSyDC@L%gNRO11gJ!oNXy&~n=eh6Dx0RzSTb=@ zv|SH);CEyE-R!rPe6pTU*yv%wz4rU+bVJF zaD{6w&2Y_SeOz@}AD15LvBNK4v{iY#l6H&|_Yt7+-c)YI)nU@W4P#jaHLPJEKGFrc zeTk?v*0Z*#J>P*1%^N$YXPhRZ+XbdYjmKXa;Cqkm;=z~5K6eO{tc%eg!&rgMWK7X* zQ(U&WgS$W0#~+uO5do@EcoKatnWTXODpmRct1W4cpb{0vmJq*}p03bj~6dH8%5!EyBg_Hq(5V zf>nb!1hkOJh+JkU<23!NE0k3Dj@0Xwxr}xsGKd?X|1;Hy(4c7@DRXNePcn5lEeJm4^O^{SgA{L@0-Kp33kBJ@nxC5)Fpv{tB0m$SfWoHAUQO+70+9NbU<#>#I`X+9_ImbP>Z{uUfHc*bGX4;gt zNloGM7d19ZX(Zh676Kb)Br$9!D@f{gcTr=LtmX`uF+M|%w|XxN7vp^MfK3v!7yzcJ z=k<_D;)IwIyT;Tt?t7)g-~Ma|-+XWkbPl4^*}#O8c@6QdgEju@<9!A;mykT+lez_U zN=z1=U-?w71=6f~vN#W~=3}$=X>Y-fxCm_8CxdyM+T5R;}z8FB_@ zvk`q3B_bPK)Qc(#gG)`%L5roiRm521V1~<78XRXC6v&el>b+9}FP)g+#IR(IVTWoP z1+V#bg?w6K!6{JYKp+JRAv|1E&$34->X4l2Y3B$sAkBsJS7xo`M0icptP#+q8_(MYlc*jV4hyzOX4&0otx zx>pyP^Y0Y1SB;()8G2;|{N$-2e){VnUOWl*Pb3rRc+$mqm|;peYsmL$JVrI%!8Mnc zxaW=o`1~JiVMF=vg!fO4%sC7Btr_=5O;P8e>1l=@7EHL&@BR<0XB*hGcRo%pYxZlo zH_aM818i2^2d6=(=e;RPPIzwdm`gTiDSxsJ^N{-Ig~#`mFgl$+s%eGsXoPodm-y?C_wd(u^>9Ri4MkGOr9L(hurZU2bVj10 zmXq^EU^6pEwwg;PZ`Ca?4&QPy_)CBe{VtY@8dLI}Au}j}8usmN&f+ApQ*DPes(DA6 zzAFuy1Mf0mLwkUrGBq%*G7hRD9~E{>H!oz4C~;<#sBTO%U1HPMzRu~ebaXaR9|0$B ziGU4_pEXq;dU$Rm{upLvqbIp{+7)xC=8v3gXF+l{dxxfYXS1BPLyoJ~Y+#}k4JApM z`65Sb()2JC<>$08A^G4bzo4%v2%r2$3>+*1HardLR}hFt=Z3SjW|jCoQK^BB{9EJ@ z?1^xZhUeS@n{*c$@1?b^+59=lGCXsl#f-{21NHavBh4N9+K&+6hVA)#oR8>?MQ?)h=G&Y8&5~Ys-E?W?y zrL0De%v0ThwKz+`&3UDvplRS!0A6d&3Nq zVG$DX@q7c=+a2QL*H!rH?Oojd?k;*+#+is2dR_!JYp}{yxZE1et$6F{0Gn{SbAb*k zzINr?&KqFUwmhOH7jY0KV?~V(KblTMq!TwT-f&@N!r2rZ`iBl4cy)yT?Wbe>e-9SO zI@{=WNYzh{p(U=^oZ_$U%<5Ej-kq)3TBOh<^vE zU~97#HSZ4Uj5y_$&;8qUU1;9STFuZH=%}5A`Xa_o)-SQ{#bjwl;VE``>7V%C(EYye z=F%L%lqN_PXJcoRVQ>5;+D3IL;@(AAkF-k-$yh9v^nE?uq$fNBB{po)#Yn7{C0P)* zAsQ1(VrZHp(mIfT2dz2XLe8s2rKLb^F>Ec#f51^$qaBJV)V}9;@S2f75}1E$V=U(q(yVpanM^R1{2Ez`Z+|kx|8pNub`Bx$=a@`Ol)HPl?&uW%9gJfRDo&&t5;$vd~+CU}0EJAuB!5!k{LWfB;+K1jva&< zR2zVy9}+av%5hu1G-A^}=+fJbJVg}vWTT+h1}jk|#vIC`T@iB1SwyH$k2H~G1xH-P zZkOsH&)p6pUhXF!FXb>yg+d&RVAw<}n~mS2>YHZvykiRg?6ghl|0ah7ai&cfIe%s| zp8RHl+Dmv3yyW>gQeGQ~OhyVm`3XS?HJO95I!*~lNfaAr8UY|wIh|^p>wGk-AfDqC z*fi+a{_>Gf240MU=zRom1l;7HdZzoi7J;7qv==|KC`etjPfVGl_2L{sT|B#2;|EWV z@uR0JymqpO?M?^Xti+@)F&O6q7~|egUV-;+(@_!( zZW!3_J68VmXJC~U)`Q^<1uORtrR)vVuXI8T9ZMzGDm^~4_p}2W=~r}~($X$%Zx>%2 zVLYNWo~=^1pLrJk_7-FwZU;8utQa|6%1O0hY-beMI1%gFCQULq{k>UN_{PIS{9ivF zlt`e@v9nM!^GY^!k2v&rG zRoX~F^kxbZP(G1+v%}>X=sA5htGIF_-#ZuBn64^S9XR=3OT$hL!w`cH+yZQx{wTI;vcn|O z%K#3uyMVQ9G${#r$;U5gZZP$XJxUl?L7!j~xz)5bs)OQh1-!V@6D^$82FpU;0aoG7 z%G@KsX6hIAI_DF5KQGYh1hO82|8rA6zgm1Dkh zIR`eP4TyO^ffbP*1X$#MqS;{Upk6Ez86=QHDFXzLdAvKQ;0NavEQlgB<)HC$2I*5wzA`6#B_ykc)(S7nWmv5va469-^nusKf-W!tUIgL#- zNOs(b2R8$30)nu32MNd~$KeFnxJ>M#f^wG^*fYL4$@DTvvy0_#Qv50oIu&3ep{Nen zP|NeuU_`)A-;F<#kPN}wr(0yPj=V|2AdRi8z1SASja(yQP8$FWBAwX5s zk{00t)!2AV4KwQKAU|6VKGb{h%ukf%4Np^Lxo7YTck%+=ft{RKDV@9P=G6f12TAMg=m_*#Df?p0qqR5wo zAJMf?SFtL)a)5*9-)mFkHxY2N-)l^)z9{vnY5VN^N3NC7LQdf1oM zmXtLbq}*UljM|o1`%w|#VT8#8mL$KSIRQ4l^=K{BOF}wC`!5PMTC@(Poe4f4@<#-4 zq|f4;Bl;6*KPZ>zJNbe^nxQhwjT78v<=N0n`J}_5NE6<1VURupFn7w&b2Jw%z{ZbR zv?Jkc(5Ug+t4~LHN>gCt{hngtPXHvDXC5!K%ZiClMBEhbBfV5=;#H+GPtR<}*0GgPbkc*l)=- z;yLge$OA)0PwV)>IJTP1awC))lalpEoP<08+Q;5tHOkE8Hm7P9+LkBCKAGC)lIV&i zZ3|5$h4hwYaWZEQra8gTCa`_Xv6*xh&_;T0T?lOaIy)y|8?E?pslrGAB@cokc*J{$ zeSI2{DP_jkilb02cvGq+r?D5v_%g=;$XeAn&}b{Xq%n|-d>Uq)R=sv)W{b`Oo92xR zJ!9zf@8MhIP3_%woLCKSZ$ik;4aU)vfGxkJ`ETMIIpqY5$Ve96B9%xJk&uTx>zWLt z5>FK0G9TE4rvy*&=B2`#+zf)lBUmW|R*_In*Xd8)#< z9v|XoPmVFc7P3wkMMj6aDWhrvHp5YlNu5aoK2j7?7(8l>CKOs<;_9tkeEFk2eD3B= z9LRG9HX*IRKKRYKcw}F|Mh+KI_Y82a2jAYNz{cYPoh3f9*ald`_J95Wn~2fc+P^ix zhTd-O7?cpKOG&|!AkC^CW1LaQBc&DZBG)W|EI-v}m`8D80Go7Qxf6KUhi%`jz(dG4 zBn37JTUZ8c6wz57NroyS8pHuu?M3vSioI)9GZIulWQ7sYrV=g^e8KH_&S=&GHrfWm zkO+y&50Xhm0;9VNtiVQ|)_5*C|EsHww5;~d#?3>>_yPeo5^B{f z0Bf6KEF00NSkjv8iFWGcrDsfQBBO~=VG7s>u%VW6tqGy7)JjJYe_8|Bi02b$X(lS> zJU1N_od(>r;HWVEw-ng0i+hfOLf5klKYwwEZ$2`_<1cnl6kEtUl>T7Mg+hq{WCHTQ(~JETjP`X+y@GL>9#H0bfm-knUbASdWH1_{tE2q4Bc`O*yusa zc#lK=sq?U(a?9J*d?zNyaPUh+zE5f?2e#EH;+z5-u`V~9zcEEw(Leh!40DDI&$`CO zy^$9ouQ<_Gr=;8#IlIkF@*1TE$B@05>ZNpOlTrahF_A=$wM#WNez6i?6~B}m$Z{GR zQw7E8G_mg6HG5Bs#>U&tRbw^ds%Uv*RESrlSd2v5C1+j@&=5Z+a}ZYG;B&n$+79~# zHmQ!0=U4Y=3$WpME3PM{@WqOGu&0OR#xcD`2($5<#>A>DVG|N-XZzVv&ILB!bYl@= z!RIDfW-*SX$3*$uXh)Q;q!^abTC%309ii(+_a#Uz26QPs_+F7ppQEZmz8QfwV$l;; zNiTECQh_>2B$6{lg{Y@gW20pexbF*q4Y%*}@wj(KmNFSf18k_PMNXmM1+s#CZnBKb zR9<7FW^(@OtpzqUiXvwKL)p5%``DZK&Ld;Iytjo;cZ;2&kxiufSCwPL8k-Cgawn#} z%gNZuVLxMVlTWCk`Yvv{61eBKK0bGSkE5fghABlzc@5UO%;#+0e-YT6Az%|eygvq?C-EDl_z4KkNOm*$sw?I#%f|w*paTRsb&iE z;c1p-F8Ql?LTCiIXmTw3o8On>TU@bm2!B^Uxm?W`r#EpqC#Ho#;Im2}B z4=3*<%?E{oQ*lu(V5J1^6&S2R(#t15L?Pa}WT7UvLp8~e(k-9XsK--WzE$Gx4|Q$^02daI_;Qfz<@|D*agXp7rP=ZZ$3dvu@vK z8K{+ENd0PgzbY3?6JfTFQ@e6jH8#eGjdPesBqu*hkk@$wZ2W8m(HtUUgP<~V2aTyH z*#S!Aa?WlOftN+VhHfCQxZr2B%6Vj6qG>1Va{z3@Y1|*ZWwgy0%z>4Ja)bFB1R(ij z;~vhKLH2f`&lEiiu9YeP-CT`;pov1$&seL@$;)F#4aF#zl+7cCm~M zOva>iMu>VyOOtw>%x>=>sROW)K6zjx+nn#zWH{nhtT|&8V5^v(0XB1(UJ7hvRBf9w zbrMJ#6j#9bve0&pHup*y2W(ofVkBZ`B7P0na2*S_TZs;jPYO*a7B7J+3`rTrHv0fx z8UvWbM`dKZ%-VoWB=Q3k3cXf16*M+d6;p;A0UJTLH^5P(fsgcSssYi&NTkrt!@Z5tV#NZVab$ecgK$KPAyE4OdpeU}vMfIOgT;HygMGjQLz05)Mi zN1*sZ1U9EL;fr>A{9AKSXxYOw*9!{R%sN4`q}5$V8k;6I zQ9VGLlc^;&74h^=12!gxLxfN*8M+!x21hMf9ymV3av?3DTK0Fr=!G1ZkuR0q#j^VA|=EO$9`RlGObSgV~^W_Ph?`l8)Z zr4Ub?rITww(E?V~25jc1zFpAJdcdZQ!L>IYRf;fspJf!3y=FxyRLv31w-lgs_8b8( zF|eVCD2tYB(|CvZULDxXNM^Ck(kw}dTs`GG?TYl9e#?uz?sW2u$}oft^Ogb|Mw405 z%W!gB;lXEj@Pl8yfoERtV&llWQ04_klh*7wOghy9qfrNY1KRSLXlt0nNij&{FS(L; zS>~AR?c%1RV|?M(K0fmYTexf^=L+nrQ^@HETIDq>dvLVBYZZ;nMPOr`Kb=F{0_lp& z_o?5`{1gl(H_l>$J`?`jRm!Z&8(J7j8r^(eYHVWOm-qFX}@=~?!DCfU(8k>d>2cHBz>2uh%YGb&VBpA`9h!}x zao{t2ki^DOt0qfym2JL^ zrW=xJ+4F7h6Pd2U-TbJGv00qH<%1T{>r7Lmf(f=7{=O#sVth#15x=)^Wr?-Dh`xgw zb{5z$Q=^;pgc;)6+8J;FHkJxGSP03vhF@A~7_4R~CJoLar_5%}_ocCMBr~(k^%Npe zoOzz3+sp9ksKSpQKZ&0_wu@JGdN^?CD9W7D@(Hk^Nw4cpJs1}l4C;)6#AyxLYRFc5 zi3-cB0(Dhjw6}-LHwL)#`W*M(c?dTgEZBi~YO2)r_}9Kr&P9#Q>eF_5%dwm%r9D|x zG2GvKb~QFy+sPQF0h>mhOj_;*Q!|&n%})Fo_pzC?w#iax=*?<`;5UrS$vT(M5fWpo zby`V%6!h77i?DnJjJZ2;XFe%BMz!A2-z@LBDz@G%Q9vs5#cxTyfhqA9mpHI#VjWE5 z3@nk)@*`^*yw#^^J;<39c!l0N5@r2*Vv34^Orj7^fQ<$+iOf{*X7jkQwAt~IV{UQ| zwp#?T=?;)7$?&+$dD+6lTdhQ~F+3s}L#@1CH0LT)EwOPNr=$?T+md7l_ zPcm)>4{3X=?LSl$G9!v9{%vYE5ANWX&rIr_aUTaa5Ab4^S(R1UQ~*p})WdOx!GO*zIpbwXR?1vK z%&Dx3%P<*D(W{5J>9Pv{!>115jw=iDTg2{2rjj*mZ5ct9O~-=YPZ!9fO)u5h@VJ#` zybAI(#&9~1u3(}J%`YXpwK}q%1f-_VKVahuSPHNaa$2aNSuR$?G+rpcCg$@iQGqg} za|�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%0DAxY2O=9sAnISd#T>;fDYL)-k91u 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 RFa)suEY71%OU~k={tpkG>#P6( literal 0 HcmV?d00001 diff --git a/images/setNetworkSuccessful/icon.png b/images/setNetworkSuccessful/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6c7a21e8a7ef52143e8ba333d156900041700bbb GIT binary patch literal 16439 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
fu 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 hRUsA`kPx%qe(gr|R@#Xuz z-_QK!{eF+Iz>5|*A9a9w1^!C~Qnq)L87Bys2o<{Mc8h1l%U^Q<-O61CsB=cQc^nT` zyPe4|`Muf!Fq3ZkR{@+ZZFM4LS0){QS~~z{(rmw9J_Uf36?8DdLR-vO%#1T`k9w`r;pJC&ap3t+ z0Bn|M90J-ihWh4jA5j2UdSPN!T!{?>h?R?}%P~Y>>Aq%iqayr41~!$QA^ZrLw~iT! zcTp9b9z-e2JI25b*>GZ_^KM%77R{Dk;-+}$=f~+r3Gi2hVViRrW@&3*R8N!O(8zl2u}kQc77x!H%;LQEr3(``0Tk-uOzW^>Wj0qPZ4 b@Cy6^Nx#`4jFLMe00000NkvXXu0mjfCM8jK literal 0 HcmV?d00001 diff --git a/images/setNetworkSuccessful/wifi.png b/images/setNetworkSuccessful/wifi.png new file mode 100644 index 0000000000000000000000000000000000000000..a0882a8ca2b76eddb44c4841f12a30413d67d9ee GIT binary patch literal 2977 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 XUxF;iS_sYHX`{liJ|JVGDf4%+Nt@aP| z^?#lJ-0c4$Ui}ScRa0O1f$b|EHw3+{Y+9*W6!U=7icjO}JoOn-O2=8}EkKuu3vBZB z^-Zp-t`^r?I?u$!#Kx!hn>fpvJyw%X#;jkv_N|tBO;Xd^wQHF--^}4|$Yo%A$}FGw zZ12;Ypm)}1_6QwFWiW46h=`7l|G(@?#D3KiXOvx@unC^^;V6?nAeB}Z`^s(UtHm0( zRFsx;-TTe(z(jB>yJNxXb?eq`Hc0dKKK&p@&wSygO`8@kTlVbn_jFHAJ4S=G9SgU+ zgvho%yc*RfTf}AZsszH``7$A+Y&40bzF;< z>Wt9$UOTmCrg-*dc7`*`i>w4A84^Sr6kVBY*bCyEEf1e5ufO`&!$AJe5<%gMb1nMr z3k0@xEPFXEHZRIJaWeZZ54FI}jyJWt7O5(2l0DE?GlBceo^yZFo&_oeEuAupDPcwj zM}t4ZJa)$q7H?z3)GT(cTJ_4cwDjwAmE~t_#1A+!Xba7=7oFJcwNhKDX#EYz-0W;_ zD=Vush8esE1dN(fUgb|!za`Q3aOS4f)2=KsJGe;WmZH+}u8e918)3oAjA;Th{xdVA zxTFXP_Fhj5`|*&6dskyJp_bt@*lK^QU*)%Xl2_=pPHhZmncI?=(>ZdtLa})mM*{~$=H#|<1c&DV4n07fU%|hqO^YUqR zW?~0s#Ir^49EiE1&oE>4u^8iJ9%*;epIP2NYi@4N|MuNGv*y&5o-zl%{F!O2qR+VF z*ctuY$y>bwf`hC6oMYb*I@^8~`+>jz%o3jUWI8UrQt)}A!12O$ixw?fy?*`s*oQy* z7G*@r9Dm-Cv7-IAv+@Kp#mwQ~$VdE?h7mR#+ptIi3ROzl~#?|)%i(7IPP d#7nGSKkuQa$F-Vc#=tDf;OXk;vd$@?2>=_U#lQdn literal 0 HcmV?d00001 diff --git a/images/setWifiPassword/icon.png b/images/setWifiPassword/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2999896d66be4baba33258443d21dd394ca08d29 GIT binary patch literal 1440 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 literal 0 HcmV?d00001 diff --git a/images/tabBar/my.png b/images/tabBar/my.png new file mode 100644 index 0000000000000000000000000000000000000000..52b531259ee5c8fc7a31c0b9b691f60d8895fc7a GIT binary patch literal 1251 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 literal 0 HcmV?d00001 diff --git a/pages/connectedDevice/connectedDevice.js b/pages/connectedDevice/connectedDevice.js new file mode 100644 index 0000000..8587778 --- /dev/null +++ b/pages/connectedDevice/connectedDevice.js @@ -0,0 +1,107 @@ +const app = getApp(); +import $ from "../../utils/request"; + +Page({ + data: { + name: "", + deviceSelect: null + }, + + onLoad(options) { + let name = app.globalData.ppScale.device.name; + let deviceSelect = app.globalData.ppScale.device.connection; + this.setData({ + name: name ? name : deviceSelect.name, + deviceSelect: deviceSelect + }) + + app.globalData.ppScale.plugin.bus.subscribe("deviceConnect", (res) => { + console.log('connectedDevice ===》deviceConnect', res); + + app.globalData.ppScale.plugin.ScaleAction.startDataProgress(); + app.globalData.ppScale.activeProtocol = app.globalData.ppScale.plugin.ScaleAction.getActiveProtocol(); + + app.globalData.ppScale.activeProtocol.codeUpdateMTU((res) => { + console.log("connectedDevice ===》codeUpdateMTU", res); + + app.globalData.ppScale.activeProtocol.codeFetchBindingState((res) => { + console.log("connectedDevice ===》codeFetchBindingState", res); + + wx.hideLoading(); + if (res === 1) { + wx.showModal({ + title: '提示', + content: '当前设备已被绑定,你确定要覆盖绑定吗?', + success: (res) => { + if (res.confirm) { + app.globalData.ppScale.activeProtocol.codeClearDeviceData("00", (res) => { + console.log("deviceInfo === codeClearDeviceData", res); + + let scaleDeviceId = app.globalData.ppScale.device.mac.replace(/:/g, ''); + let params = { + equipmentCode: scaleDeviceId, + }; + $.ajax("weighingScale/del/device", params, "POST", true, "正在初始化设备...").then(res => { + wx.showToast({ + icon: "none", + title: res.message, + }) + let pages = getCurrentPages(); + let prevPage = pages[pages.length - 2]; + prevPage.setData({ + getDeviceSetting: true + }) + setTimeout(() => { + wx.navigateBack({ + delta: 1 + }) + }, 1500); + }); + }) + } else if (res.cancel) { + app.globalData.ppScale.plugin.Blue.disconnect(); + } + } + }) + } else { + app.globalData.ppScale.device.name = this.data.name; + wx.navigateTo({ + url: "/pages/connectionSuccessful/connectionSuccessful" + }) + } + }) + }); + }); + }, + + nameInput(e) { + this.setData({ + name: e.detail.value + }) + }, + + // 配对 + openConnectionSuccessful() { + let deviceSelect = this.data.deviceSelect; + if (deviceSelect) { + let name = this.data.name; + if (name) { + wx.showLoading({ + title: "蓝牙配对中...", + mask: true + }); + app.globalData.ppScale.plugin.Blue.createBLEConnection(deviceSelect); + } else { + wx.showToast({ + icon: "none", + title: "设备名称不能为空" + }) + } + } else { + wx.showToast({ + icon: "none", + title: "配对设备不能为空" + }) + } + }, +}) \ No newline at end of file diff --git a/pages/connectedDevice/connectedDevice.json b/pages/connectedDevice/connectedDevice.json new file mode 100644 index 0000000..7c0a326 --- /dev/null +++ b/pages/connectedDevice/connectedDevice.json @@ -0,0 +1,5 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "设备命名", + "disableScroll": true +} \ No newline at end of file diff --git a/pages/connectedDevice/connectedDevice.wxml b/pages/connectedDevice/connectedDevice.wxml new file mode 100644 index 0000000..580c8b3 --- /dev/null +++ b/pages/connectedDevice/connectedDevice.wxml @@ -0,0 +1,14 @@ +型号:{{deviceSelect.name}} + + + + + + + 设备名称 + + + + + +配对 \ No newline at end of file diff --git a/pages/connectedDevice/connectedDevice.wxss b/pages/connectedDevice/connectedDevice.wxss new file mode 100644 index 0000000..5a64677 --- /dev/null +++ b/pages/connectedDevice/connectedDevice.wxss @@ -0,0 +1,68 @@ +page { + padding: 50rpx 60rpx 0; + background-color: #ffffff; +} + +.equipmentModel { + color: #252535; + width: 100%; + height: 48rpx; + font-size: 48rpx; + font-weight: bold; + line-height: 48rpx; + margin-bottom: 60rpx; +} + +.equipmentIcon { + width: 320rpx; + height: 320rpx; + margin: 0 auto 40rpx; +} + +.equipmentName { + width: 100%; + height: 126rpx; + display: flex; + flex-wrap: nowrap; + padding-right: 35rpx; + box-sizing: border-box; + margin-bottom: 550rpx; + justify-content: space-between; + border-bottom: 1rpx solid #EAECF1; +} + +.equipmentName>view:first-of-type { + color: #252535; + height: 126rpx; + line-height: 126rpx; + font-size: 36rpx; + font-weight: bold; +} + +.equipmentName>view:last-of-type { + flex: 1; + width: 0; + height: 126rpx; +} + +.equipmentName>view:last-of-type input { + color: #808080; + width: 100%; + height: 126rpx; + text-align: right; + font-size: 36rpx; + line-height: 126rpx; +} + +.btn { + color: #FFFFFF; + width: 580rpx; + height: 88rpx; + line-height: 88rpx; + margin: 0 auto; + font-size: 32rpx; + font-weight: bold; + border-radius: 44rpx; + text-align: center; + background-color: #1385FA; +} \ No newline at end of file diff --git a/pages/connectionSuccessful/connectionSuccessful.js b/pages/connectionSuccessful/connectionSuccessful.js new file mode 100644 index 0000000..bd48f97 --- /dev/null +++ b/pages/connectionSuccessful/connectionSuccessful.js @@ -0,0 +1,10 @@ +const app = getApp(); + +Page({ + // 获取wifi列表 + openGetWifiList() { + wx.navigateTo({ + url: "/pages/getWifiList/getWifiList" + }) + } +}) \ No newline at end of file diff --git a/pages/connectionSuccessful/connectionSuccessful.json b/pages/connectionSuccessful/connectionSuccessful.json new file mode 100644 index 0000000..84c4caf --- /dev/null +++ b/pages/connectionSuccessful/connectionSuccessful.json @@ -0,0 +1,5 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "绑定成功", + "disableScroll": true +} \ No newline at end of file diff --git a/pages/connectionSuccessful/connectionSuccessful.wxml b/pages/connectionSuccessful/connectionSuccessful.wxml new file mode 100644 index 0000000..b3cbcf3 --- /dev/null +++ b/pages/connectionSuccessful/connectionSuccessful.wxml @@ -0,0 +1,10 @@ + + + + + 绑定成功 + + +随时随地同步测量数据 + +配置网络 \ No newline at end of file diff --git a/pages/connectionSuccessful/connectionSuccessful.wxss b/pages/connectionSuccessful/connectionSuccessful.wxss new file mode 100644 index 0000000..a4e895d --- /dev/null +++ b/pages/connectionSuccessful/connectionSuccessful.wxss @@ -0,0 +1,49 @@ +page { + width: 100%; + padding: 200rpx 85rpx 0; + box-sizing: border-box; + background-color: #ffffff; +} + +.icon { + width: 100%; + margin-bottom: 540rpx; +} + +.icon>view:first-of-type { + width: 360rpx; + height: 295rpx; + margin: 0 auto 50rpx; +} + +.icon>view:last-of-type { + color: #252535; + width: 100%; + height: 40rpx; + font-size: 40rpx; + font-weight: bold; + line-height: 40rpx; + text-align: center; +} + +.describe { + color: #B6B6B6; + width: 100%; + height: 26rpx; + font-size: 28rpx; + line-height: 28rpx; + text-align: center; + margin-bottom: 46rpx; +} + +.btn { + color: #FFFFFF; + width: 100%; + height: 88rpx; + font-size: 32rpx; + font-weight: bold; + line-height: 88rpx; + text-align: center; + border-radius: 44rpx; + background-color: #1385FA; +} \ No newline at end of file diff --git a/pages/deviceInfo/deviceInfo.js b/pages/deviceInfo/deviceInfo.js new file mode 100644 index 0000000..9cfda1f --- /dev/null +++ b/pages/deviceInfo/deviceInfo.js @@ -0,0 +1,151 @@ +const app = getApp(); +import $ from "../../utils/request"; + +Page({ + data: { + deviceConnect: false, + + deviceInfo: null + }, + + onLoad(options) { + this.getDevice(); + this.initBluetooth(); + + app.globalData.ppScale.plugin.bus.subscribe("deviceConnect", (res) => { + console.log('deviceInfo ===》deviceConnect', res); + + app.globalData.ppScale.plugin.ScaleAction.startDataProgress(); + app.globalData.ppScale.activeProtocol = app.globalData.ppScale.plugin.ScaleAction.getActiveProtocol(); + + app.globalData.ppScale.activeProtocol.codeUpdateMTU((res) => { + console.log("deviceInfo ===》codeUpdateMTU", res); + + $.ajax("weighingScale/list/device", {}, "GET", false).then((res) => { + if(res.result && res.result.length) { + let deviceConnect = res.result.some(item => item.macAddress === app.globalData.ppScale.device.mac); + if(deviceConnect) { + this.setData({ + deviceConnect: true + }) + } else { + app.globalData.ppScale.plugin.Blue.disconnect(); + } + } + }) + }); + }); + }, + + // 初始化蓝牙 + initBluetooth() { + wx.openBluetoothAdapter({ + success: () => { + this.getDeviceSettingList(); + }, + fail: (err) => { + if (err.errCode === 10001) { + wx.showModal({ + title: "提示", + content: "请打开手机蓝牙", + }); + } + }, + }); + }, + + async refreshToken(fn, flag) { + let bodyToken = wx.getStorageSync('bodyToken'); + let bodyTokenTime = wx.getStorageSync('bodyTokenTime'); + if (!bodyToken || bodyTokenTime * 1000 < +new Date() || flag) { + let res = await app.globalData.ppScale.plugin.refreshToken({ + url: "https://uniquehealth.lefuenergy.com", + data: { + "appKey": app.globalData.ppScale.options.key, + "appSecret": app.globalData.ppScale.options.secret + } + }); + if (res.data.code == 200) { + wx.setStorageSync('bodyToken', res.data.data.token); + wx.setStorageSync('bodyTokenTime', res.data.data.expireTime); + fn(); + } + } else { + fn(); + } + }, + getDeviceSettingList() { + let bodyToken = wx.getStorageSync("bodyToken"); + app.globalData.ppScale.plugin.getDeviceSettingList({ + url: "https://uniquehealth.lefuenergy.com", + data: { + appKey: app.globalData.ppScale.options.key + }, + header: { + "token": bodyToken, + "Accept-Language": wx.getStorageSync("lang") || 'zh' + } + }).then((res) => { + if (res.data.code == 200) { + app.globalData.ppScale.plugin.Blue.setDeviceSetting(res.data.data); + app.globalData.ppScale.device.setting = res.data.data; + let deviceNames = res.data.data.map(item => item.deviceName); + app.globalData.ppScale.plugin.Blue.start(deviceNames, false); + app.globalData.ppScale.plugin.bus.subscribe("devicesList", (res_) => { + app.globalData.ppScale.plugin.Blue.stopBluetoothDevicesDiscovery(); + app.globalData.ppScale.plugin.Blue.createBLEConnection(res_[0]); + }); + } else if (res.data.code == 401 || res.data.code == 4008) { + // 401 token过期 / 4008 token为空 + // 重新请求token解析数据 + this.refreshToken(() => { + this.getDeviceSettingList(); + }, true); + } + }); + }, + + // 获取已经绑定的设备列表 + getDevice() { + let params = {}; + $.ajax("weighingScale/list/device", params, "GET", false).then((res) => { + this.setData({ + deviceInfo: res.result[0] + }) + }) + }, + + delDevice() { + if(this.data.deviceConnect) { + app.globalData.ppScale.activeProtocol.codeClearDeviceData("00", (res) => { + console.log("deviceInfo === codeClearDeviceData", res); + + let scaleDeviceId = app.globalData.ppScale.device.mac.replace(/:/g, ''); + let params = { + equipmentCode: scaleDeviceId, + }; + $.ajax("weighingScale/del/device", params, "POST", true, "正在解绑设备...").then(res_ => { + wx.showToast({ + icon: "none", + title: res_.message, + }) + setTimeout(() => { + wx.navigateBack({ + delta: 1 + }) + }, 1500); + }); + }) + } else { + wx.showToast({ + icon: "none", + title: "删除失败,请靠近设备并点亮后再试" + }) + this.initBluetooth(); + } + }, + + onUnload() { + app.globalData.ppScale.plugin.Blue.stop(); + } +}) \ No newline at end of file diff --git a/pages/deviceInfo/deviceInfo.json b/pages/deviceInfo/deviceInfo.json new file mode 100644 index 0000000..a1e80a4 --- /dev/null +++ b/pages/deviceInfo/deviceInfo.json @@ -0,0 +1,5 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "设备详情", + "disableScroll": true +} \ No newline at end of file diff --git a/pages/deviceInfo/deviceInfo.wxml b/pages/deviceInfo/deviceInfo.wxml new file mode 100644 index 0000000..97c33a5 --- /dev/null +++ b/pages/deviceInfo/deviceInfo.wxml @@ -0,0 +1,34 @@ + + + + + + {{deviceInfo.equipmentName}} + 型号:{{deviceInfo.type}} + + + + + + 设备名称 + {{deviceInfo.equipmentName}} + + + 设备SN + {{deviceInfo.equipmentCode}} + + + 配置Wi-Fi + {{deviceInfo.wifiName}} + + + 成员 + {{deviceInfo.subUserNum}}人 + + + MAC地址 + {{deviceInfo.macAddress}} + + + +删除设备 \ No newline at end of file diff --git a/pages/deviceInfo/deviceInfo.wxss b/pages/deviceInfo/deviceInfo.wxss new file mode 100644 index 0000000..88487ae --- /dev/null +++ b/pages/deviceInfo/deviceInfo.wxss @@ -0,0 +1,94 @@ +page { + padding: 30rpx 30rpx 0; +} + +.device { + width: 100%; + display: flex; + flex-wrap: nowrap; + align-items: center; + padding: 30rpx; + box-sizing: border-box; + border-radius: 24rpx; + margin-bottom: 24rpx; + background-color: #FFFFFF; +} + +.device>view:first-of-type { + width: 180rpx; + height: 180rpx; + margin-right: 20rpx; +} + +.device>view:last-of-type { + flex: 1; + width: 0; +} + +.device>view:last-of-type>view:first-of-type { + color: #252535; + width: 100%; + height: 40rpx; + font-weight: bold; + font-size: 40rpx; + line-height: 40rpx; + margin-bottom: 22rpx; +} + +.device>view:last-of-type>view:last-of-type { + color: #808080; + width: 100%; + height: 26rpx; + font-size: 26rpx; + line-height: 26rpx; +} + +.info { + width: 100%; + border-radius: 24rpx; + margin-bottom: 88rpx; + background-color: #FFFFFF; +} + +.info>view { + width: 100%; + height: 120rpx; + padding: 0 30rpx; + box-sizing: border-box; + display: flex; + flex-wrap: nowrap; + justify-content: space-between; + border-bottom: 1rpx solid #EAECF1; +} + +.info>view:last-of-type { + border-bottom: 0; +} + +.info>view>view { + height: 120rpx; + font-size: 30rpx; + line-height: 120rpx; +} + +.info>view>view:first-of-type { + color: #252535; + font-weight: bold; +} + +.info>view>view:last-of-type { + color: #808080; +} + +.btn { + color: #FFFFFF; + width: 580rpx; + height: 88rpx; + margin: 0 auto; + font-size: 32rpx; + font-weight: bold; + line-height: 88rpx; + text-align: center; + border-radius: 44rpx; + background-color: #1385FA; +} \ No newline at end of file diff --git a/pages/familyMembers/familyMembers.js b/pages/familyMembers/familyMembers.js new file mode 100644 index 0000000..8630a22 --- /dev/null +++ b/pages/familyMembers/familyMembers.js @@ -0,0 +1,45 @@ +import $ from "../../utils/request"; + +Page({ + data: { + userInfo: null, + + subUserList: [], + }, + + onShow() { + this.setData({ + userInfo: wx.getStorageSync("userInfo") || null + }) + this.getSubUser(); + }, + + // 获取家庭成员列表 + getSubUser() { + let params = {}; + $.ajax("weighingScale/list/subUser", params, "GET", true, "正在获取...").then(res => { + this.setData({ + subUserList: res.result + }) + }) + }, + + openUserInfo() { + wx.navigateTo({ + url: "/pages/userInfo/userInfo?initBluetooth=1&customerType=0" + }) + }, + + editMyInfo() { + wx.navigateTo({ + url: "/pages/userInfo/userInfo?initBluetooth=1&customerType=1" + }) + }, + + editUserInfo(e) { + let id = e.currentTarget.dataset.id; + wx.navigateTo({ + url: "/pages/userInfo/userInfo?id="+ id +"&initBluetooth=1&customerType=0" + }) + } +}) \ No newline at end of file diff --git a/pages/familyMembers/familyMembers.json b/pages/familyMembers/familyMembers.json new file mode 100644 index 0000000..2a8298a --- /dev/null +++ b/pages/familyMembers/familyMembers.json @@ -0,0 +1,5 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "家庭成员", + "disableScroll": true +} \ No newline at end of file diff --git a/pages/familyMembers/familyMembers.wxml b/pages/familyMembers/familyMembers.wxml new file mode 100644 index 0000000..944b486 --- /dev/null +++ b/pages/familyMembers/familyMembers.wxml @@ -0,0 +1,31 @@ + + + + + {{userInfo ? userInfo.realname : '-'}} + 修改我的档案 + + + + 家庭成员 + + + + + + + + {{item.realname}} + 修改档案 + + + + + + + + + + + 添加新成员 + \ No newline at end of file diff --git a/pages/familyMembers/familyMembers.wxss b/pages/familyMembers/familyMembers.wxss new file mode 100644 index 0000000..41d2062 --- /dev/null +++ b/pages/familyMembers/familyMembers.wxss @@ -0,0 +1,128 @@ +page { + padding: 30rpx 30rpx 0; +} + +.myInfo { + width: 100%; + height: 150rpx; + padding: 0 30rpx 0 38rpx; + box-sizing: border-box; + display: flex; + flex-wrap: nowrap; + align-items: center; + border-radius: 16rpx; + margin-bottom: 40rpx; + background-color: #FFFFFF; +} + +.myInfo>view:nth-of-type(1) { + width: 84rpx; + height: 84rpx; + border-radius: 50%; + margin-right: 24rpx; +} + +.myInfo>view:nth-of-type(2) { + color: #252535; + flex: 1; + height: 32rpx; + font-size: 32rpx; + font-weight: bold; + line-height: 32rpx; +} + +.myInfo>view:nth-of-type(3) { + color: #B6B6B6; + height: 28rpx; + font-size: 28rpx; + line-height: 28rpx; + padding-right: 30rpx; +} + +.familyMembers { + width: 100%; + margin-bottom: 24rpx; +} + +.familyMembers>view:first-of-type { + color: #252535; + width: 100%; + height: 32rpx; + font-size: 32rpx; + font-weight: bold; + line-height: 32rpx; + margin-bottom: 30rpx; +} + +.familyMembers>view:last-of-type { + width: 100%; + border-radius: 16rpx; +} + +.familyMembers>view:last-of-type>view { + width: 100%; + height: 150rpx; + padding: 0 30rpx 0 38rpx; + box-sizing: border-box; + display: flex; + flex-wrap: nowrap; + align-items: center; + background-color: #FFFFFF; + border-bottom: 1rpx solid #EAECF1; +} + +.familyMembers>view:last-of-type>view:last-of-type { + border-bottom: 0; +} + +.familyMembers>view:last-of-type>view>view:nth-of-type(1) { + width: 84rpx; + height: 84rpx; + border-radius: 50%; + margin-right: 24rpx; +} + +.familyMembers>view:last-of-type>view>view:nth-of-type(2) { + color: #252535; + flex: 1; + height: 32rpx; + font-size: 32rpx; + font-weight: bold; + line-height: 32rpx; +} + +.familyMembers>view:last-of-type>view>view:nth-of-type(3) { + color: #B6B6B6; + height: 28rpx; + font-size: 28rpx; + line-height: 28rpx; + padding-right: 30rpx; +} + +.btn { + width: 100%; + height: 150rpx; + padding: 0 38rpx; + box-sizing: border-box; + display: flex; + flex-wrap: nowrap; + align-items: center; + border-radius: 16rpx; + background-color: #FFFFFF; +} + +.btn>view:first-of-type { + width: 84rpx; + height: 84rpx; + border-radius: 50%; + margin-right: 24rpx; +} + +.btn>view:last-of-type { + color: #252535; + flex: 1; + height: 32rpx; + font-size: 32rpx; + font-weight: bold; + line-height: 32rpx; +} \ No newline at end of file diff --git a/pages/getWifiList/getWifiList.js b/pages/getWifiList/getWifiList.js new file mode 100644 index 0000000..9ddd513 --- /dev/null +++ b/pages/getWifiList/getWifiList.js @@ -0,0 +1,32 @@ +const app = getApp(); + +Page({ + data: { + wifiList: [] + }, + + onLoad() { + this.initWifi(); + }, + + initWifi() { + wx.showLoading({ + title: "正在获取Wi-Fi列表...", + mask: true + }); + app.globalData.ppScale.activeProtocol.dataFindSurroundDevice((res) => { + wx.hideLoading(); + console.log("wifiList", res); + this.setData({ + wifiList: res + }) + }) + }, + + openSetWifiPassword(e) { + let item = JSON.stringify(e.currentTarget.dataset.item); + wx.navigateTo({ + url: "/pages/setWifiPassword/setWifiPassword?item=" + item + }) + } +}) \ No newline at end of file diff --git a/pages/getWifiList/getWifiList.json b/pages/getWifiList/getWifiList.json new file mode 100644 index 0000000..47fb2f9 --- /dev/null +++ b/pages/getWifiList/getWifiList.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "disableScroll": true +} \ No newline at end of file diff --git a/pages/getWifiList/getWifiList.wxml b/pages/getWifiList/getWifiList.wxml new file mode 100644 index 0000000..98814b6 --- /dev/null +++ b/pages/getWifiList/getWifiList.wxml @@ -0,0 +1,19 @@ + + 可用Wi-Fi + 网络列表(设备暂不支持5GWi-Fi网络) + + + + + + + + + + + {{item.ssid}} + + + + + \ No newline at end of file diff --git a/pages/getWifiList/getWifiList.wxss b/pages/getWifiList/getWifiList.wxss new file mode 100644 index 0000000..66493d5 --- /dev/null +++ b/pages/getWifiList/getWifiList.wxss @@ -0,0 +1,64 @@ +page { + display: flex; + flex-direction: column; + background-color: #ffffff; +} + +.title { + width: 100%; + padding: 50rpx 55rpx 24rpx; + box-sizing: border-box; +} + +.title>view:first-of-type { + color: #252535; + width: 100%; + height: 48rpx; + font-size: 48rpx; + font-weight: bold; + line-height: 48rpx; + margin-bottom: 60rpx; +} + +.title>view:last-of-type { + color: #B6B6B6; + width: 100%; + height: 30rpx; + font-size: 30rpx; + line-height: 30rpx; +} + +.wifi { + flex: 1; + overflow: hidden; +} + +.content { + width: 100%; + padding: 0 55rpx; + box-sizing: border-box; +} + +.content>view { + width: 100%; + height: 80rpx; + margin: 30rpx 0; + display: flex; + flex-wrap: nowrap; +} + +.content>view>view:nth-of-type(1) { + width: 80rpx; + height: 80rpx; + margin-right: 24rpx; +} + +.content>view>view:nth-of-type(2) { + color: #252535; + flex: 1; + width: 0; + height: 80rpx; + font-size: 32rpx; + font-weight: bold; + line-height: 80rpx; +} \ No newline at end of file diff --git a/pages/home/home.js b/pages/home/home.js new file mode 100644 index 0000000..522b94f --- /dev/null +++ b/pages/home/home.js @@ -0,0 +1,92 @@ +import $ from "../../utils/request"; + +Page({ + data: { + token: null, + userInfo: null, + + deviceList: [] + }, + + onShow() { + let token = wx.getStorageSync("token") || null; + let userInfo = wx.getStorageSync("userInfo") || null; + this.setData({ + token: token, + userInfo: userInfo + }) + if(token && userInfo) { + this.getDevice(); + } + }, + + // 点击登录或注册 + openLoginOrReg() { + wx.login({ + success: (res) => { + if (res.code) { + this.checkOpenIdLogin(res.code); + } else { + wx.showToast({ + icon: "none", + title: "登录失败,请稍后再试!", + }) + } + } + }) + }, + + // 微信一键登录 + checkOpenIdLogin(code) { + let params = { + code: code + }; + $.ajax("weighingScale/checkOpenIdLogin", params, "POST", true, "登录中...").then((res) => { + wx.setStorageSync("userInfo", res.result.user); + wx.setStorageSync("token", res.result.token); + if(res.result.token && res.result.user) { + this.setData({ + token: res.result.token, + userInfo: res.result.user + }) + this.getDevice(); + } else { + wx.showToast({ + icon: "none", + title: "请先补全个人信息" + }) + setTimeout(() => { + wx.navigateTo({ + url: "/pages/userInfo/userInfo?initBluetooth=0&customerType=1" + }) + }, 1500) + } + }) + }, + + // 获取已经绑定的设备列表 + getDevice() { + let params = {}; + $.ajax("weighingScale/list/device", params, "GET", true, "获取设备列表").then((res) => { + this.setData({ + deviceList: res.result + }) + }) + }, + + // 添加设备 + openSearchDevice() { + let token = this.data.token; + let userInfo = this.data.userInfo; + if (token && userInfo) { + wx.navigateTo({ + url: "/pages/searchDevice/searchDevice" + }) + } else { + wx.showToast({ + icon: "none", + title: "请先登录" + }) + } + } +}) \ No newline at end of file diff --git a/pages/home/home.json b/pages/home/home.json new file mode 100644 index 0000000..7930213 --- /dev/null +++ b/pages/home/home.json @@ -0,0 +1,5 @@ +{ + "usingComponents": {}, + "navigationStyle": "custom", + "disableScroll": true +} \ No newline at end of file diff --git a/pages/home/home.wxml b/pages/home/home.wxml new file mode 100644 index 0000000..0acabd7 --- /dev/null +++ b/pages/home/home.wxml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + {{userInfo.realname}} + + + 登录/注册 + + + 智能体脂秤 + 注重更好的健康生活品质 + + + + 请添加设备 + 添加设备后,解锁更多体验 + + 添加设备 + + + 登录/注册 + + + \ No newline at end of file diff --git a/pages/home/home.wxss b/pages/home/home.wxss new file mode 100644 index 0000000..209f8f8 --- /dev/null +++ b/pages/home/home.wxss @@ -0,0 +1,118 @@ +.bg { + position: absolute; + z-index: 1; + top: 0; + left: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; +} + +.home { + position: relative; + z-index: 2; + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; + padding: 215rpx 60rpx 120rpx; + box-sizing: border-box; +} + +.title { + width: 100%; +} + +.title>view:nth-of-type(1) { + width: 100%; + height: 80rpx; + display: flex; + flex-wrap: nowrap; + margin-bottom: 56rpx; +} + +.title>view:nth-of-type(1)>view:first-of-type { + width: 80rpx; + height: 80rpx; + overflow: hidden; + border-radius: 50%; + margin-right: 20rpx; +} + +.title>view:nth-of-type(1)>view:last-of-type { + color: #FFFFFF; + height: 80rpx; + line-height: 80rpx; + font-size: 28rpx; + font-weight: bold; + padding-right: 26rpx; +} + +.title>view:nth-of-type(1)>view:last-of-type::after { + border-left: 5rpx solid #ffffff; + border-top: 5rpx solid #ffffff; +} + +.title>view:nth-of-type(2) { + color: #FFFFFF; + height: 58rpx; + font-size: 58rpx; + font-weight: bold; + line-height: 58rpx; + margin-bottom: 34rpx; +} + +.title>view:nth-of-type(3) { + color: #FFFFFF; + height: 32rpx; + font-size: 32rpx; + line-height: 32rpx; + margin-bottom: 48rpx; +} + +.title>view:nth-of-type(4) { + width: 120rpx; + height: 6rpx; + border-radius: 3rpx; + background-color: #FFFFFF; +} + +.device { + width: 580rpx; + margin: 0 auto; +} + +.device>view:nth-of-type(1) { + color: #FFFFFF; + width: 100%; + height: 36rpx; + font-size: 36rpx; + font-weight: bold; + text-align: center; + line-height: 36rpx; + margin-bottom: 30rpx; +} + +.device>view:nth-of-type(2) { + color: #FFFFFF; + width: 100%; + height: 30rpx; + font-size: 30rpx; + text-align: center; + line-height: 30rpx; + margin-bottom: 80rpx; +} + +.device>view:nth-of-type(3) { + color: #FFFFFF; + width: 100%; + height: 106rpx; + font-size: 32rpx; + font-weight: bold; + text-align: center; + line-height: 106rpx; + border-radius: 16rpx; + border: 1rpx solid #FFFFFF; +} diff --git a/pages/index/index.js b/pages/index/index.js new file mode 100644 index 0000000..2066c4f --- /dev/null +++ b/pages/index/index.js @@ -0,0 +1,2 @@ +// index.js +Page({}) diff --git a/pages/index/index.json b/pages/index/index.json new file mode 100644 index 0000000..aa3f1b0 --- /dev/null +++ b/pages/index/index.json @@ -0,0 +1,5 @@ +{ + "usingComponents": { + "navigation-bar": "/components/navigation-bar/navigation-bar" + } +} \ No newline at end of file diff --git a/pages/index/index.wxml b/pages/index/index.wxml new file mode 100644 index 0000000..57cc6da --- /dev/null +++ b/pages/index/index.wxml @@ -0,0 +1,7 @@ + + + + + Weixin + + diff --git a/pages/index/index.wxss b/pages/index/index.wxss new file mode 100644 index 0000000..8c2b75a --- /dev/null +++ b/pages/index/index.wxss @@ -0,0 +1,10 @@ +/**index.wxss**/ +page { + height: 100vh; + display: flex; + flex-direction: column; +} +.scrollarea { + flex: 1; + overflow-y: hidden; +} diff --git a/pages/my/my.js b/pages/my/my.js new file mode 100644 index 0000000..4b3cb79 --- /dev/null +++ b/pages/my/my.js @@ -0,0 +1,112 @@ +import $ from "../../utils/request"; + +Page({ + data: { + userInfo: null, + + deviceInfo: null + }, + + onShow() { + let token = wx.getStorageSync("token") || null; + let userInfo = wx.getStorageSync("userInfo") || null; + this.setData({ + userInfo: userInfo + }) + if(token && userInfo) { + this.getDevice(); + } + }, + + // 打开用户信息 + openUserInfo() { + if(this.data.userInfo) { + wx.navigateTo({ + url: "/pages/userInfo/userInfo?initBluetooth=1&customerType=1" + }) + } else { + wx.showToast({ + icon: "none", + title: "请先登录" + }) + } + }, + + // 打开设备详情 + openDeviceInfo() { + if(this.data.userInfo) { + let deviceInfo = this.data.deviceInfo; + if(deviceInfo) { + wx.navigateTo({ + url: "/pages/deviceInfo/deviceInfo" + }) + } else { + wx.showModal({ + title: "提示", + content: "当前暂未绑定设备,需要绑定吗?", + confirmText: "去绑定", + success: (res) => { + if (res.confirm) { + wx.navigateTo({ + url: "/pages/searchDevice/searchDevice" + }) + } + } + }) + } + } else { + wx.showToast({ + icon: "none", + title: "请先登录" + }) + } + }, + + // 打开成员管理 + openFamilyMembers() { + if(this.data.userInfo) { + wx.navigateTo({ + url: "/pages/familyMembers/familyMembers" + }) + } else { + wx.showToast({ + icon: "none", + title: "请先登录" + }) + } + }, + + // 获取已经绑定的设备列表 + getDevice() { + let params = {}; + $.ajax("weighingScale/list/device", params, "GET", false).then((res) => { + this.setData({ + deviceInfo: res.result && res.result.length ? res.result[0] : null + }) + }) + }, + + // 退出登录 + exitLogin() { + wx.showModal({ + title: "提示", + content: "你确定要退出登录吗?", + success: (res) => { + if (res.confirm) { + $.ajax("weighingScale/logout", {}, "POST", true, "正在退出登录...").then(res => { + wx.showToast({ + icon: "none", + title: res.message + }) + setTimeout(() => { + wx.clearStorageSync(); + wx.switchTab({ + url: "/pages/home/home" + }) + }, 1500) + }) + } + } + }) + } +}) \ No newline at end of file diff --git a/pages/my/my.json b/pages/my/my.json new file mode 100644 index 0000000..7930213 --- /dev/null +++ b/pages/my/my.json @@ -0,0 +1,5 @@ +{ + "usingComponents": {}, + "navigationStyle": "custom", + "disableScroll": true +} \ No newline at end of file diff --git a/pages/my/my.wxml b/pages/my/my.wxml new file mode 100644 index 0000000..608e284 --- /dev/null +++ b/pages/my/my.wxml @@ -0,0 +1,59 @@ + + + + + + {{userInfo && userInfo.realname ? userInfo.realname : '未登录'}} + + + + 身高(cm) + {{userInfo && userInfo.height ? userInfo.height : '--'}} + + + + 体重(kg) + {{userInfo && userInfo.weight ? userInfo.weight : '--'}} + + + + BMI + {{userInfo && userInfo.bmi ? userInfo.bmi : '--'}} + + + + + + + 我的服务 + + + + + 设备绑定 + {{deviceInfo ? '已绑定('+ deviceInfo.equipmentName +')' : '未绑定'}} + + + + + + 成员管理 + + + + + + + + + 隐私协议 + + + + + + + + 退出登录 + + diff --git a/pages/my/my.wxss b/pages/my/my.wxss new file mode 100644 index 0000000..d2133f7 --- /dev/null +++ b/pages/my/my.wxss @@ -0,0 +1,165 @@ +.userInfo { + width: 100%; + height: 488rpx; + margin-bottom: 24rpx; + box-sizing: border-box; + padding: 185rpx 40rpx 0; + background: linear-gradient(#F3F9FD 0%, #FFFFFF 100%); +} + +.user { + width: 100%; + height: 136rpx; + display: flex; + flex-wrap: nowrap; + margin-bottom: 46rpx; +} + +.user>view:first-of-type { + width: 126rpx; + height: 126rpx; + margin-right: 24rpx; + border-radius: 50%; + border: 5rpx solid #FFFFFF; +} + +.user>view:last-of-type { + color: #252536; + flex: 1; + height: 136rpx; + font-size: 40rpx; + font-weight: bold; + line-height: 136rpx; +} + +.info { + width: 100%; + display: flex; + flex-wrap: nowrap; + align-items: center; +} + +.info>view:nth-of-type(1), +.info>view:nth-of-type(3), +.info>view:nth-of-type(5) { + flex: 1; +} + +.info>view:nth-of-type(2n) { + width: 2rpx; + height: 52rpx; + background-color: #EAECF1; +} + +.info>view>view:first-of-type { + color: #394356; + width: 100%; + height: 28rpx; + font-size: 28rpx; + line-height: 28rpx; + text-align: center; + margin-bottom: 18rpx; +} + +.info>view>view:last-of-type { + color: #394356; + width: 100%; + height: 36rpx; + font-size: 36rpx; + font-weight: bold; + line-height: 36rpx; + text-align: center; +} + +.content { + width: 100%; + padding: 0 30rpx; + box-sizing: border-box; + margin-bottom: 360rpx; +} + +.content .arrowAfter::after { + right: 36rpx; +} + +.service { + width: 100%; + margin-bottom: 24rpx; + border-radius: 16rpx; + background-color: #FFFFFF; +} + +.title { + color: #394356; + width: 100%; + height: 96rpx; + line-height: 96rpx; + padding: 0 30rpx; + font-size: 30rpx; + font-weight: bold; + box-sizing: border-box; + border-bottom: 1rpx solid #EAECF1; +} + +.list { + width: 100%; + height: 96rpx; + padding: 0 30rpx; + display: flex; + flex-wrap: nowrap; + align-items: center; + box-sizing: border-box; + border-bottom: 1rpx solid #EAECF1; +} + +.list:last-of-type { + border-bottom: none; +} + +.list>view:nth-of-type(1) { + width: 56rpx; + height: 56rpx; + margin-right: 30rpx; +} + +.list>view:nth-of-type(2) { + flex: 1; + color: #394356; + height: 96rpx; + line-height: 96rpx; + font-size: 32rpx; + font-weight: bold; +} + +.list>view:nth-of-type(3) { + color: #77849E; + height: 96rpx; + font-size: 28rpx; + line-height: 96rpx; + padding-right: 34rpx; +} + +.agreement { + width: 100%; + border-radius: 16rpx; + background-color: #FFFFFF; +} + +.btn { + width: 100%; + padding: 0 85rpx; + box-sizing: border-box; +} + +.btn>view { + color: #1385FA; + width: 580rpx; + height: 88rpx; + line-height: 88rpx; + font-size: 32rpx; + border-radius: 44rpx; + text-align: center; + background-color: #F5F7FB; + border: 1rpx solid #1385FA; + +} \ No newline at end of file diff --git a/pages/searchDevice/searchDevice.js b/pages/searchDevice/searchDevice.js new file mode 100644 index 0000000..297099c --- /dev/null +++ b/pages/searchDevice/searchDevice.js @@ -0,0 +1,112 @@ +const app = getApp(); + +Page({ + data: { + getDeviceSetting: false, + + initText: "", + devicesList: [] + }, + + onLoad(options) { + this.initBluetooth(); + }, + + onShow() { + if (this.data.getDeviceSetting) { + this.getDeviceSettingList(); + } + }, + + // 初始化蓝牙 + initBluetooth() { + this.setData({ + initText: "正在初始化蓝牙..." + }) + wx.openBluetoothAdapter({ + success: () => { + this.setData({ + initText: "蓝牙初始化成功" + }) + this.getDeviceSettingList(); + }, + fail: (err) => { + this.setData({ + initText: "蓝牙初始化失败" + }) + if (err.errCode === 10001) { + wx.showModal({ + title: "提示", + content: "请打开手机蓝牙", + }); + } + }, + }); + }, + + async refreshToken(fn, flag) { + let bodyToken = wx.getStorageSync('bodyToken'); + let bodyTokenTime = wx.getStorageSync('bodyTokenTime'); + if (!bodyToken || bodyTokenTime * 1000 < +new Date() || flag) { + let res = await app.globalData.ppScale.plugin.refreshToken({ + url: "https://uniquehealth.lefuenergy.com", + data: { + "appKey": app.globalData.ppScale.options.key, + "appSecret": app.globalData.ppScale.options.secret + } + }); + if (res.data.code == 200) { + wx.setStorageSync('bodyToken', res.data.data.token); + wx.setStorageSync('bodyTokenTime', res.data.data.expireTime); + fn(); + } + } else { + fn(); + } + }, + getDeviceSettingList() { + this.setData({ + initText: "获取设备配置中..." + }) + let bodyToken = wx.getStorageSync("bodyToken"); + app.globalData.ppScale.plugin.getDeviceSettingList({ + url: "https://uniquehealth.lefuenergy.com", + data: { + appKey: app.globalData.ppScale.options.key + }, + header: { + "token": bodyToken, + "Accept-Language": wx.getStorageSync("lang") || 'zh' + } + }).then((res) => { + if (res.data.code == 200) { + this.setData({ + initText: "设备搜索中..." + }); + app.globalData.ppScale.plugin.Blue.setDeviceSetting(res.data.data); + app.globalData.ppScale.device.setting = res.data.data; + let deviceNames = res.data.data.map(item => item.deviceName); + app.globalData.ppScale.plugin.Blue.start(deviceNames, false); + app.globalData.ppScale.plugin.bus.subscribe("devicesList", (res_) => { + console.log("searchDevice ===> devicesList", res_); + this.setData({ + getDeviceSetting: false, + initText: "设备搜索完成" + }); + app.globalData.ppScale.plugin.Blue.stopBluetoothDevicesDiscovery(); + app.globalData.ppScale.device.list = res_; + app.globalData.ppScale.device.connection = res_[0]; + wx.navigateTo({ + url: "/pages/connectedDevice/connectedDevice" + }) + }); + } else if (res.data.code == 401 || res.data.code == 4008) { + // 401 token过期 / 4008 token为空 + // 重新请求token解析数据 + this.refreshToken(() => { + this.getDeviceSettingList(); + }, true); + } + }); + } +}) \ No newline at end of file diff --git a/pages/searchDevice/searchDevice.json b/pages/searchDevice/searchDevice.json new file mode 100644 index 0000000..58616d8 --- /dev/null +++ b/pages/searchDevice/searchDevice.json @@ -0,0 +1,5 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "搜索设备", + "disableScroll": true +} \ No newline at end of file diff --git a/pages/searchDevice/searchDevice.wxml b/pages/searchDevice/searchDevice.wxml new file mode 100644 index 0000000..0a6d437 --- /dev/null +++ b/pages/searchDevice/searchDevice.wxml @@ -0,0 +1,12 @@ + + + + + + + + + + {{initText}} + 请轻轻踩秤,保证屏幕亮起 + \ No newline at end of file diff --git a/pages/searchDevice/searchDevice.wxss b/pages/searchDevice/searchDevice.wxss new file mode 100644 index 0000000..f2149ff --- /dev/null +++ b/pages/searchDevice/searchDevice.wxss @@ -0,0 +1,78 @@ +page { + width: 100%; + height: 100%; + padding-top: 120rpx; + box-sizing: border-box; + background-color: #FFFFFF; +} + +.icon { + width: 556rpx; + height: 556rpx; + position: relative; + margin: 0 auto 120rpx; +} + +.icon>view:nth-of-type(1) { + position: absolute; + z-index: 3; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 200rpx; + height: 200rpx; + border-radius: 50%; +} + +.icon>view:nth-of-type(2), +.icon>view:nth-of-type(3) { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 200rpx; + height: 200rpx; + border-radius: 50%; + animation: expand 2s infinite; +} + +@keyframes expand { + 0% { + width: 200rpx; + height: 200rpx; + background-color: #3194FB; + } + 100% { + width: 556rpx; + height: 556rpx; + background-color: rgba(0, 0, 0, 0); + } +} + +.description { + width: 100%; +} + +.description>view:nth-of-type(1) { + color: #252535; + width: 100%; + height: 36rpx; + font-size: 36rpx; + font-weight: bold; + line-height: 36rpx; + text-align: center; + margin-bottom: 30rpx; +} + +.description>view:nth-of-type(2) { + color: #808080; + width: 100%; + height: 30rpx; + font-size: 30rpx; + line-height: 30rpx; + text-align: center; +} \ No newline at end of file diff --git a/pages/setNetwork/setNetwork.js b/pages/setNetwork/setNetwork.js new file mode 100644 index 0000000..8c79b80 --- /dev/null +++ b/pages/setNetwork/setNetwork.js @@ -0,0 +1,42 @@ +const app = getApp(); +import $ from "../../utils/request"; + +Page({ + onLoad(options) { + let ssid = options.ssid; + let password = options.password; + app.globalData.ppScale.activeProtocol.dataConfigNetWork({ + domain: app.globalData.ppScale.domain, + ssid: options.ssid, + password: options.password + }, (res) => { + app.globalData.ppScale.wifi.ssid = ssid; + app.globalData.ppScale.wifi.password = password; + + let scaleDeviceId = app.globalData.ppScale.device.mac.replace(/:/g, ''); + let params = { + equipmentName: app.globalData.ppScale.device.name, + scaleDeviceId: scaleDeviceId, + }; + $.ajax("weighingScale/binding/device", params, "POST").then(res => { + app.globalData.ppScale.activeProtocol.codeSetBindingState((res) => { + console.log("setNetwork.js codeSetBindingState", res); + + wx.navigateTo({ + url: "/pages/setNetworkSuccessful/setNetworkSuccessful" + }) + }) + }).catch(err => { + wx.showToast({ + icon: "none", + title: err.message + }) + setTimeout(() => { + wx.switchTab({ + url: "/pages/home/home" + }) + }, 1500) + }) + }) + } +}) \ No newline at end of file diff --git a/pages/setNetwork/setNetwork.json b/pages/setNetwork/setNetwork.json new file mode 100644 index 0000000..754b6a9 --- /dev/null +++ b/pages/setNetwork/setNetwork.json @@ -0,0 +1,5 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "正在配网", + "disableScroll": true +} \ No newline at end of file diff --git a/pages/setNetwork/setNetwork.wxml b/pages/setNetwork/setNetwork.wxml new file mode 100644 index 0000000..d5908ce --- /dev/null +++ b/pages/setNetwork/setNetwork.wxml @@ -0,0 +1,13 @@ + + + + + 已链接,配网中... + 请持续站在秤上,耐心等待 + + + + 手机尽量靠近设备(2米以内) + Wi-Fi指示灯闪烁,处于配网状态 + Wi-Fi指示灯长亮为已连接状态 + \ No newline at end of file diff --git a/pages/setNetwork/setNetwork.wxss b/pages/setNetwork/setNetwork.wxss new file mode 100644 index 0000000..d15b18d --- /dev/null +++ b/pages/setNetwork/setNetwork.wxss @@ -0,0 +1,54 @@ +page { + display: flex; + flex-direction: column; + justify-content: space-between; + padding: 90rpx 60rpx 120rpx; + background-color: #ffffff; +} + +.icon { + width: 100%; +} + +.icon>view:nth-of-type(1) { + width: 565rpx; + height: 500rpx; + margin: 0 auto; +} + +.icon>view:nth-of-type(2) { + color: #1385FA; + width: 100%; + height: 36rpx; + font-size: 36rpx; + font-weight: bold; + line-height: 36rpx; + text-align: center; + margin-bottom: 28rpx; +} + +.icon>view:nth-of-type(3) { + color: #808080; + width: 100%; + height: 30rpx; + font-size: 30rpx; + text-align: center; + line-height: 30rpx; +} + +.describe { + width: 100%; +} + +.describe>view { + color: #808080; + width: 100%; + font-size: 26rpx; + font-weight: bold; + line-height: 26rpx; + margin-bottom: 26rpx; +} + +.describe>view:last-of-type { + margin-bottom: 0; +} \ No newline at end of file diff --git a/pages/setNetworkSuccessful/setNetworkSuccessful.js b/pages/setNetworkSuccessful/setNetworkSuccessful.js new file mode 100644 index 0000000..bf4d50b --- /dev/null +++ b/pages/setNetworkSuccessful/setNetworkSuccessful.js @@ -0,0 +1,115 @@ +const app = getApp(); + +Page({ + data: { + userInfo: null, + subUser: { + i: 0, + data: [] + }, + + ssid: "" + }, + + onLoad(options) { + this.setData({ + userInfo: wx.getStorageSync("userInfo"), + ssid: app.globalData.ppScale.wifi.ssid + }); + }, + + completeClick() { + let userInfo = this.data.userInfo; + // 设置主用户时userID为小程序的用户ID,memberID为空 + app.globalData.ppScale.activeProtocol.dataSyncUserInfo({ + userID: userInfo.id, + userName: userInfo.realname, + memberID: "", + age: this.getAge(userInfo.birthday), // + gender: userInfo.sex, // + height: userInfo.height, // + isAthleteMode: 0, + currentWeight: userInfo.weight, // + deviceHeaderIndex: 0, + targetWeight: "", + idealWeight: "", + recentData: [], + }, (res) => { + console.log("dataSyncUserInfo", res); + + if(this.data.subUser.data && this.data.subUser.data.length) { + wx.showLoading({ + title: "正在同步用户信息,请稍等...", + mask: true + }); + setSubUser(); + } else { + app.globalData.ppScale.plugin.Blue.stop(); + wx.switchTab({ + url: "/pages/home/home" + }) + } + }) + }, + + setSubUser() { + let userInfo = this.data.userInfo; + let i = this.data.subUser.i; + let subUser = this.data.subUser.data; + app.globalData.ppScale.activeProtocol.dataSyncUserInfo({ + userID: userInfo.id, + userName: subUser[i].realname, + memberID: subUser[i].id, + age: this.getAge(subUser[i].birthday), // + gender: subUser[i].sex, // + height: subUser[i].height, // + isAthleteMode: 0, + currentWeight: subUser[i].weight, // + deviceHeaderIndex: 0, + targetWeight: "", + idealWeight: "", + recentData: [], + }, (res) => { + console.log("dataSyncSubUserInfo", res); + if(i < subUser.length) { + this.setData({ + ['subUser.i']: i + 1 + }) + setSubUser(); + } else { + app.globalData.ppScale.plugin.Blue.stop(); + wx.hideLoading(); + wx.switchTab({ + url: "/pages/home/home" + }) + } + }) + }, + + // 获取家庭成员列表 + getSubUser() { + let params = {}; + $.ajax("weighingScale/list/subUser", params, "GET", true, "正在获取成员列表...").then(res => { + this.setData({ + ['subUser.data']: res.result + }) + }) + }, + + // 根据生日获取年龄 + getAge(birthDateString) { + const birthDate = new Date(birthDateString); + const today = new Date(); + + let age = today.getFullYear() - birthDate.getFullYear(); + const monthDiff = today.getMonth() - birthDate.getMonth(); + const dayDiff = today.getDate() - birthDate.getDate(); + + // 如果当前月份小于出生月份,或者同月但当前日期小于出生日期,年龄需要减 1 + if (monthDiff < 0 || (monthDiff === 0 && dayDiff < 0)) { + age--; + } + + return age; + } +}) \ No newline at end of file diff --git a/pages/setNetworkSuccessful/setNetworkSuccessful.json b/pages/setNetworkSuccessful/setNetworkSuccessful.json new file mode 100644 index 0000000..84c4caf --- /dev/null +++ b/pages/setNetworkSuccessful/setNetworkSuccessful.json @@ -0,0 +1,5 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "绑定成功", + "disableScroll": true +} \ No newline at end of file diff --git a/pages/setNetworkSuccessful/setNetworkSuccessful.wxml b/pages/setNetworkSuccessful/setNetworkSuccessful.wxml new file mode 100644 index 0000000..25db03c --- /dev/null +++ b/pages/setNetworkSuccessful/setNetworkSuccessful.wxml @@ -0,0 +1,21 @@ + + + + + 配网成功 + + + + 当前设备配置Wi-Fi + + + + + {{ssid}} + + + + + + +完成 \ No newline at end of file diff --git a/pages/setNetworkSuccessful/setNetworkSuccessful.wxss b/pages/setNetworkSuccessful/setNetworkSuccessful.wxss new file mode 100644 index 0000000..ec46075 --- /dev/null +++ b/pages/setNetworkSuccessful/setNetworkSuccessful.wxss @@ -0,0 +1,93 @@ +page { + width: 100%; + padding: 200rpx 85rpx 0; + box-sizing: border-box; + background-color: #ffffff; +} + +.icon { + width: 100%; + margin-bottom: 120rpx; +} + +.icon>view:first-of-type { + width: 360rpx; + height: 295rpx; + margin: 0 auto 50rpx; +} + +.icon>view:last-of-type { + color: #252535; + width: 100%; + height: 40rpx; + font-size: 40rpx; + font-weight: bold; + line-height: 40rpx; + text-align: center; +} + +.info { + width: 100%; + margin-bottom: 380rpx; +} + +.info>view:first-of-type { + color: #B6B6B6; + width: 100%; + height: 30rpx; + font-size: 30rpx; + line-height: 30rpx; + margin-bottom: 40rpx; +} + +.info>view:last-of-type { + width: 100%; + height: 80rpx; + margin: 30rpx 0; + display: flex; + flex-wrap: nowrap; + align-items: center; +} + +.info>view:last-of-type>view:nth-of-type(1) { + width: 80rpx; + height: 80rpx; + margin-right: 24rpx; +} + +.info>view:last-of-type>view:nth-of-type(2) { + color: #252535; + flex: 1; + width: 0; + height: 80rpx; + font-size: 32rpx; + font-weight: bold; + line-height: 80rpx; +} + +.info>view:last-of-type>view:nth-of-type(3) { + width: 32rpx; + height: 32rpx; +} + +.describe { + color: #B6B6B6; + width: 100%; + height: 26rpx; + font-size: 28rpx; + line-height: 28rpx; + text-align: center; + margin-bottom: 46rpx; +} + +.btn { + color: #FFFFFF; + width: 100%; + height: 88rpx; + font-size: 32rpx; + font-weight: bold; + line-height: 88rpx; + text-align: center; + border-radius: 44rpx; + background-color: #1385FA; +} \ No newline at end of file diff --git a/pages/setWifiPassword/setWifiPassword.js b/pages/setWifiPassword/setWifiPassword.js new file mode 100644 index 0000000..895e02d --- /dev/null +++ b/pages/setWifiPassword/setWifiPassword.js @@ -0,0 +1,27 @@ +const app = getApp(); + +Page({ + data: { + wifiInfo: null, + password: "mimahaojige8" + }, + + onLoad(options) { + this.setData({ + wifiInfo: JSON.parse(options.item) + }) + }, + + passwordInput(e) { + this.setData({ + password: e.detail.value + }) + }, + + // 打开配网 + openSetNetwork() { + wx.navigateTo({ + url: "/pages/setNetwork/setNetwork?ssid=" + this.data.wifiInfo.ssid + "&password=" + this.data.password + }) + } +}) \ No newline at end of file diff --git a/pages/setWifiPassword/setWifiPassword.json b/pages/setWifiPassword/setWifiPassword.json new file mode 100644 index 0000000..4200326 --- /dev/null +++ b/pages/setWifiPassword/setWifiPassword.json @@ -0,0 +1,5 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "输入Wi-Fi密码", + "disableScroll": true +} \ No newline at end of file diff --git a/pages/setWifiPassword/setWifiPassword.wxml b/pages/setWifiPassword/setWifiPassword.wxml new file mode 100644 index 0000000..4ca529d --- /dev/null +++ b/pages/setWifiPassword/setWifiPassword.wxml @@ -0,0 +1,24 @@ + + + + + + {{wifiInfo.ssid}} + + + 密码 + + + + + + + + + +连接 \ No newline at end of file diff --git a/pages/setWifiPassword/setWifiPassword.wxss b/pages/setWifiPassword/setWifiPassword.wxss new file mode 100644 index 0000000..ebd4598 --- /dev/null +++ b/pages/setWifiPassword/setWifiPassword.wxss @@ -0,0 +1,81 @@ +page { + padding: 55rpx 55rpx 0; + background-color: #ffffff; +} + +.form { + width: 100%; + margin-bottom: 64rpx; +} + +.form>view { + width: 100%; + height: 96rpx; + display: flex; + flex-wrap: nowrap; + align-items: center; + padding: 0 24rpx; + box-sizing: border-box; + border-radius: 16rpx; + background-color: #F6F6F6; +} + +.form>view:first-of-type { + margin-bottom: 32rpx; +} + +.form>view>view:nth-of-type(1) { + color: #252535; + width: 100rpx; + height: 96rpx; + line-height: 96rpx; + font-size: 32rpx; + font-weight: bold; +} + +.form>view:first-of-type>view:nth-of-type(1) { + padding: 24rpx 45rpx 24rpx 7rpx; + box-sizing: border-box; + display: flex; + align-items: center; +} + +.form>view>view:nth-of-type(2) { + color: #252535; + flex: 1; + width: 0; + height: 96rpx; + font-size: 32rpx; + line-height: 96rpx; +} + +.form>view>view:nth-of-type(2) input { + color: #252535; + width: 100%; + height: 96rpx; + font-size: 32rpx; + line-height: 96rpx; +} + +.placeholderClass { + color: #B6B6B6; + font-size: 32rpx; +} + +.form>view>view:nth-of-type(3) { + width: 56rpx; + height: 56rpx; +} + +.btn { + color: #FFFFFF; + width: 580rpx; + height: 88rpx; + font-size: 32rpx; + font-weight: bold; + line-height: 88rpx; + margin: 0 auto; + text-align: center; + border-radius: 44rpx; + background-color: #1385FA; +} \ No newline at end of file diff --git a/pages/userInfo/userInfo.js b/pages/userInfo/userInfo.js new file mode 100644 index 0000000..4bd57e1 --- /dev/null +++ b/pages/userInfo/userInfo.js @@ -0,0 +1,475 @@ +const app = getApp(); +import $ from "../../utils/request"; + +Page({ + data: { + deviceConnect: false, + + initBluetooth: "0", + customerType: "1", + + id: "", + realname: "", + sex: { + index: null, + data: [{ + id: 1, + name: '男' + }, { + id: 2, + name: '女' + }] + }, + birthday: { + label: "1980年01月01日", + value: "1980-01-01" + }, + phone: "", + height: { + index: 50, + data: Array.from({ length: 200 - 120 + 1 }, (_, i) => i + 120) + }, + weight: { + index: 20, + data: Array.from({ length: 100 - 50 + 1 }, (_, i) => i + 50) + }, + }, + + onLoad(options) { + // initBluetooth 是否初始化蓝牙和设备 1 是 / 0 否 + // customerType 用户类型 1 自己 / 0 他人 + // id 用户ID 当customerType为0时,家庭成员的用户ID / 为1时始终为空字符串 + this.setData({ + id: options.id ? options.id : null, + initBluetooth: options.initBluetooth, + customerType: options.customerType, + }) + if(options.customerType === "0") { + wx.setNavigationBarTitle({ + title: options.id ? '编辑成员档案' : '新增成员档案' + }) + if(options.id) { + this.subUserInfo() + } + } else { + let userInfo = wx.getStorageSync("userInfo") || null; + if (userInfo && options.initBluetooth === "1") { + let [year, month, day] = userInfo.birthday.split("-"); + this.setData({ + realname: userInfo.realname, + ["sex.index"]: this.data.sex.data.findIndex(item => {return item.name === userInfo.sex_dictText}), + birthday: { + label: year + "年" + month + "月" + day + "日", + value: userInfo.birthday + }, + phone: userInfo.phone, + ["height.index"]: this.data.height.data.findIndex(item => {return item === userInfo.height}), + ["weight.index"]: this.data.weight.data.findIndex(item => {return item === userInfo.weight}), + }) + } + } + if(options.initBluetooth === "1") { + this.initBluetooth(); + + app.globalData.ppScale.plugin.bus.subscribe("deviceConnect", (res) => { + console.log('deviceInfo ===》deviceConnect', res); + + + app.globalData.ppScale.plugin.ScaleAction.startDataProgress(); + app.globalData.ppScale.activeProtocol = app.globalData.ppScale.plugin.ScaleAction.getActiveProtocol(); + + app.globalData.ppScale.activeProtocol.codeUpdateMTU((res) => { + console.log("deviceInfo ===》codeUpdateMTU", res); + + $.ajax("weighingScale/list/device", {}, "GET", false).then((res) => { + if(res.result && res.result.length) { + let deviceConnect = res.result.some(item => item.macAddress === app.globalData.ppScale.device.mac); + if(deviceConnect) { + this.setData({ + deviceConnect: true + }) + } else { + app.globalData.ppScale.plugin.Blue.disconnect(); + } + } + }) + }); + }); + } + }, + + // 初始化蓝牙 + initBluetooth() { + wx.openBluetoothAdapter({ + success: () => { + this.getDeviceSettingList(); + }, + fail: (err) => { + if (err.errCode === 10001) { + wx.showModal({ + title: "提示", + content: "请打开手机蓝牙", + }); + } + }, + }); + }, + + async refreshToken(fn, flag) { + let bodyToken = wx.getStorageSync('bodyToken'); + let bodyTokenTime = wx.getStorageSync('bodyTokenTime'); + if (!bodyToken || bodyTokenTime * 1000 < +new Date() || flag) { + let res = await app.globalData.ppScale.plugin.refreshToken({ + url: "https://uniquehealth.lefuenergy.com", + data: { + "appKey": app.globalData.ppScale.options.key, + "appSecret": app.globalData.ppScale.options.secret + } + }); + if (res.data.code == 200) { + wx.setStorageSync('bodyToken', res.data.data.token); + wx.setStorageSync('bodyTokenTime', res.data.data.expireTime); + fn(); + } + } else { + fn(); + } + }, + getDeviceSettingList() { + let bodyToken = wx.getStorageSync("bodyToken"); + app.globalData.ppScale.plugin.getDeviceSettingList({ + url: "https://uniquehealth.lefuenergy.com", + data: { + appKey: app.globalData.ppScale.options.key + }, + header: { + "token": bodyToken, + "Accept-Language": wx.getStorageSync("lang") || 'zh' + } + }).then((res) => { + if (res.data.code == 200) { + app.globalData.ppScale.plugin.Blue.setDeviceSetting(res.data.data); + app.globalData.ppScale.device.setting = res.data.data; + let deviceNames = res.data.data.map(item => item.deviceName); + app.globalData.ppScale.plugin.Blue.start(deviceNames, false); + app.globalData.ppScale.plugin.bus.subscribe("devicesList", (res_) => { + app.globalData.ppScale.plugin.Blue.stopBluetoothDevicesDiscovery(); + app.globalData.ppScale.plugin.Blue.createBLEConnection(res_[0]); + }); + } else if (res.data.code == 401 || res.data.code == 4008) { + // 401 token过期 / 4008 token为空 + // 重新请求token解析数据 + this.refreshToken(() => { + this.getDeviceSettingList(); + }, true); + } + }); + }, + + // 姓名输入 + realnameInput(e) { + let realname = e.detail.value.replace(/\s+/g, ''); + this.setData({ + realname: realname + }) + }, + + // 性别选择 + sexChange(e) { + let sex = e.detail.value; + console.log(sex); + this.setData({ + ['sex.index']: e.detail.value + }) + if(this.data.height.index === null) { + this.setData({ + ['height.index']: sex == 0 ? 50 : 40 + }) + } + if(this.data.weight.index === null) { + this.setData({ + ['weight.index']: sex == 0 ? 20 : 10 + }) + } + }, + + // 生日选择 + birthdayChange(e) { + let v = e.detail.value; + let [year, month, day] = v.split("-"); + this.setData({ + birthday: { + label: year + "年" + month + "月" + day + "日", + value: v + } + }) + }, + + // 获取手机号 + getPhoneNumber(e) { + let params = { + code: e.detail.code, + thirdId: wx.getStorageSync("userInfo").thirdId + }; + $.ajax("weighingScale/getPhone", params, "POST").then(res => { + wx.setStorageSync("userInfo", res.result.user); + wx.setStorageSync("token", res.result.token); + this.setData({ + phone: res.result.user.phone + }) + }) + }, + + // 身高选择 + heightChange(e) { + this.setData({ + ['height.index']: e.detail.value + }) + }, + + // 体重选择 + weightChange(e) { + this.setData({ + ['weight.index']: e.detail.value + }) + }, + + // 提交判断 + submit() { + let realname = this.data.realname; + let sex = this.data.sex; + let birthday = this.data.birthday; + let phone = this.data.phone; + let height = this.data.height; + let weight = this.data.weight; + if(this.data.initBluetooth === "1" && !this.data.deviceConnect) { + wx.showToast({ + icon: "none", + title: "请靠近设备并点亮后再试" + }) + this.initBluetooth(); + return false; + } + if(!realname) { + wx.showToast({ + icon: "none", + title: "姓名不能为空" + }) + return false; + } + if(sex.index === null) { + wx.showToast({ + icon: "none", + title: "性别不能为空" + }) + return false; + } + if(!birthday.value) { + wx.showToast({ + icon: "none", + title: "生日不能为空" + }) + return false; + } + if(this.data.customerType === "1" && !phone) { + wx.showToast({ + icon: "none", + title: "手机号不能为空" + }) + return false; + } + if(height.index === null) { + wx.showToast({ + icon: "none", + title: "身高不能为空" + }) + return false; + } + if(weight.index === null) { + wx.showToast({ + icon: "none", + title: "体重不能为空" + }) + return false; + } + if(this.data.customerType === "1") { + this.submitMe({ + realname: realname, + sex: sex.data[sex.index].id, + birthday: birthday.value, + phone: phone, + height: height.data[height.index], + weight: weight.data[weight.index] + }); + } else { + this.submitUser({ + id: this.data.id, + realname: realname, + sex: sex.data[sex.index].id, + birthday: birthday.value, + height: height.data[height.index], + weight: weight.data[weight.index] + }); + } + }, + + // 提交自己的信息 + submitMe(params) { + $.ajax("weighingScale/edit/user", params, "POST", true, "保存中...").then(res => { + $.ajax("weighingScale/select/user", {}, "GET", true, "更新用户信息中...").then(res_ => { + wx.setStorageSync("userInfo", res_.result); + wx.showToast({ + icon: "none", + title: res.message + }) + if(this.data.initBluetooth === "1") { + app.globalData.ppScale.activeProtocol.dataSyncUserInfo({ + userID: res_.result.id, + userName: res_.result.realname, + memberID: "", + age: this.getAge(res_.result.birthday), // + gender: res_.result.sex, // + height: res_.result.height, // + isAthleteMode: 0, + currentWeight: res_.result.weight, // + deviceHeaderIndex: 0, + targetWeight: "", + idealWeight: "", + recentData: [], + }, (res) => { + console.log("dataSyncUserInfo", res) + app.globalData.ppScale.plugin.Blue.stop(); + setTimeout(() => { + wx.navigateBack({ + delta: 1 + }) + }, 1500) + }) + } else { + setTimeout(() => { + wx.navigateBack({ + delta: 1 + }) + }, 1500) + } + }) + }) + }, + + // 提交家庭成员的信息 + submitUser(params) { + $.ajax("weighingScale/edit/subUser", params, "POST", true, "保存中...").then(res => { + wx.showToast({ + icon: "none", + title: res.message + }) + app.globalData.ppScale.activeProtocol.dataSyncUserInfo({ + userID: wx.getStorageSync("userInfo").id, + userName: params.realname, + memberID: res.result, + age: this.getAge(params.birthday), // + gender: params.sex, // + height: params.height, // + isAthleteMode: 0, + currentWeight: params.weight, // + deviceHeaderIndex: 0, + targetWeight: "", + idealWeight: "", + recentData: [], + }, (res) => { + console.log("dataSyncUserInfo", res) + app.globalData.ppScale.plugin.Blue.stop(); + setTimeout(() => { + wx.navigateBack({ + delta: 1 + }) + }, 1500) + }) + }) + }, + + // 删除家庭成员 + delUser() { + if(this.data.deviceConnect) { + wx.showModal({ + title: "提示", + content: "你要定要删除此成员吗?", + success: (res) => { + if (res.confirm) { + let params = { + id: this.data.id + }; + console.log(params); + $.ajax("weighingScale/del/subUser", params, "POST", true, "删除中...").then(res => { + wx.showToast({ + icon: "none", + title: res.message + }) + app.globalData.ppScale.activeProtocol.dataDeleteUser({ + userID: wx.getStorageSync("userInfo").id, + memberID: this.data.id, + }, (res) => { + console.log("dataDeleteUser", res); + app.globalData.ppScale.plugin.Blue.stop(); + setTimeout(() => { + wx.navigateBack({ + delta: 1 + }) + }, 1500); + }) + }) + } + } + }) + } else { + wx.showToast({ + icon: "none", + title: "删除失败,请靠近设备并点亮后再试" + }) + this.initBluetooth(); + } + }, + + // 获取家庭成员信息详情 + subUserInfo() { + let params = { + userId: this.data.id + }; + $.ajax("weighingScale/select/subUser", params, "GET", false).then(res => { + let [year, month, day] = res.result.birthday.split("-"); + this.setData({ + realname: res.result.realname, + ["sex.index"]: this.data.sex.data.findIndex(item => {return item.name === res.result.sex_dictText}), + birthday: { + label: year + "年" + month + "月" + day + "日", + value: res.result.birthday + }, + ["height.index"]: this.data.height.data.findIndex(item => {return item === res.result.height}), + ["weight.index"]: this.data.weight.data.findIndex(item => {return item === res.result.weight}), + }) + }) + }, + + // 根据生日获取年龄 + getAge(birthDateString) { + const birthDate = new Date(birthDateString); + const today = new Date(); + + let age = today.getFullYear() - birthDate.getFullYear(); + const monthDiff = today.getMonth() - birthDate.getMonth(); + const dayDiff = today.getDate() - birthDate.getDate(); + + // 如果当前月份小于出生月份,或者同月但当前日期小于出生日期,年龄需要减 1 + if (monthDiff < 0 || (monthDiff === 0 && dayDiff < 0)) { + age--; + } + + return age; + }, + + onUnload() { + if(this.data.initBluetooth === "1") { + app.globalData.ppScale.plugin.Blue.stop(); + } + } +}) \ No newline at end of file diff --git a/pages/userInfo/userInfo.json b/pages/userInfo/userInfo.json new file mode 100644 index 0000000..6becaf9 --- /dev/null +++ b/pages/userInfo/userInfo.json @@ -0,0 +1,6 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "用户档案", + "navigationBarBackgroundColor": "#F5F7FB", + "disableScroll": true +} \ No newline at end of file diff --git a/pages/userInfo/userInfo.wxml b/pages/userInfo/userInfo.wxml new file mode 100644 index 0000000..bf1eb72 --- /dev/null +++ b/pages/userInfo/userInfo.wxml @@ -0,0 +1,66 @@ +请填写和完善您家人的健康信息,将用于计算身体数据及运动卡路里消耗等,以便准确的分析数据。我们会严格保护您的家庭信息安全。 + + + + 姓名 + + + + + + 性别 + + + {{sex.index === null ? '请选择性别' : sex.data[sex.index].name}} + + + + + 生日 + + + {{birthday.value ? birthday.label : '请选择生日'}} + + + + + + 手机号 + + + {{phone}} + + + + + + + + + 身高 + + + {{height.index === null ? '请选择身高' : height.data[height.index] + ' cm'}} + + + + + 体重 + + + {{weight.index === null ? '请选择体重' : weight.data[weight.index] + ' kg'}} + + + + + +确定 + + + 删除该档案 + \ No newline at end of file diff --git a/pages/userInfo/userInfo.wxss b/pages/userInfo/userInfo.wxss new file mode 100644 index 0000000..c8823f2 --- /dev/null +++ b/pages/userInfo/userInfo.wxss @@ -0,0 +1,96 @@ +page { + padding: 30rpx 30rpx 0; +} + +.tips { + color: #77849E; + width: 100%; + font-size: 26rpx; + line-height: 40rpx; + margin-bottom: 40rpx; + padding: 0 30rpx; + box-sizing: border-box; +} + +.form { + width: 100%; + padding: 0 30rpx; + border-radius: 16rpx; + box-sizing: border-box; + background-color: #FFFFFF; + margin-bottom: 80rpx; +} + +.form>view { + width: 100%; + height: 120rpx; + padding: 0 10rpx; + display: flex; + flex-wrap: nowrap; + box-sizing: border-box; + border-bottom: 1rpx solid #EAECF1; +} + +.form>view>view:first-of-type { + color: #252535; + height: 120rpx; + font-size: 32rpx; + font-weight: bold; + line-height: 120rpx; +} + +.form>view>view:last-of-type { + flex: 1; + width: 0; + color: #B6B6B6; + font-size: 28rpx; + height: 120rpx; + line-height: 120rpx; + text-align: right; +} + +.form>view>view:last-of-type.arrowAfter { + padding-right: 30rpx; +} + +.form>view>view:last-of-type input { + color: #252535; + width: 100%; + height: 120rpx; + line-height: 120rpx; + text-align: right; +} + +.placeholderClass { + color: #B6B6B6; + font-size: 28rpx; +} + +.form>view { + border-bottom: 0; +} + +.btn { + color: #FFFFFF; + width: 580rpx; + height: 88rpx; + font-size: 32rpx; + font-weight: bold; + line-height: 88rpx; + text-align: center; + border-radius: 44rpx; + margin: 0 auto 50rpx; + background-color: #1385FA; +} + +.delBtn { + color: #1385FA; + width: 580rpx; + height: 88rpx; + font-size: 32rpx; + font-weight: bold; + line-height: 88rpx; + text-align: center; + border-radius: 44rpx; + margin: 0 auto; +} \ No newline at end of file diff --git a/project.config.json b/project.config.json new file mode 100644 index 0000000..0868a6f --- /dev/null +++ b/project.config.json @@ -0,0 +1,29 @@ +{ + "appid": "wx6c71f3ebcdcddffd", + "compileType": "miniprogram", + "libVersion": "3.7.11", + "packOptions": { + "ignore": [], + "include": [] + }, + "setting": { + "coverView": true, + "es6": true, + "postcss": true, + "minified": true, + "enhance": true, + "showShadowRootInWxmlPanel": true, + "packNpmRelationList": [], + "babelSetting": { + "ignore": [], + "disablePlugins": [], + "outputPath": "" + } + }, + "condition": {}, + "editorSetting": { + "tabIndent": "tab", + "tabSize": 4 + }, + "simulatorPluginLibVersion": {} +} \ No newline at end of file diff --git a/project.private.config.json b/project.private.config.json new file mode 100644 index 0000000..cc1267e --- /dev/null +++ b/project.private.config.json @@ -0,0 +1,10 @@ +{ + "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html", + "projectname": "weightScaleMini", + "setting": { + "compileHotReLoad": true, + "urlCheck": false, + "bigPackageSizeSupport": true + }, + "libVersion": "3.7.10" +} \ No newline at end of file diff --git a/sitemap.json b/sitemap.json new file mode 100644 index 0000000..cd24f35 --- /dev/null +++ b/sitemap.json @@ -0,0 +1,7 @@ +{ + "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html", + "rules": [{ + "action": "allow", + "page": "*" + }] +} \ No newline at end of file diff --git a/utils/request.js b/utils/request.js new file mode 100644 index 0000000..cfbc780 --- /dev/null +++ b/utils/request.js @@ -0,0 +1,94 @@ +const app = getApp(); +let loadingCount = 0; + +const showLoading = (title) => { + if (loadingCount === 0) { + wx.showLoading({ + title: title, + mask: true + }); + } + loadingCount++; +}; + +const hideLoading = () => { + if (loadingCount > 0) { + loadingCount--; + } + if (loadingCount === 0) { + wx.hideLoading(); + } +} + +const ajax = (url, params, methos, loading = true, title = "加载中...") => { + let requestUrl = app.globalData.wxRequestUrl + url; + if (loading) { + showLoading(title); + } + + return new Promise((resolve, reject) => { + let header = { + "content-type": "application/json" + }; + + let token = wx.getStorageSync("token"); + if (Boolean(token)) { + header['X-Access-Token'] = token; + } + wx.request({ + url: requestUrl, + data: params, + method: methos, + header: header, + success: (res) => { + if (loading) { + hideLoading(); + } + console.log("↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 开始 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓"); + switch (res.data.code) { + case 200: + resolve(res.data); + console.log("接口【 " + url + " 】请求成功!状态码为:200(正常)"); + break; + case 400: + reject(res.data); + console.error("接口【 " + url + " 】请求错误!状态码为:400(报错)"); + break; + case 401: + wx.clearStorageSync(); + reject(res.data); + console.error("接口【 " + url + " 】请求错误!状态码为:401(未登录)"); + break; + case 500: + reject(res.data); + console.error("接口【 " + url + " 】请求错误!状态码为:500(服务器错误)"); + break; + default: + reject(res.data); + console.error("接口【 " + url + " 】请求错误!状态码为:未知"); + } + console.log("Header参数为 ↓↓↓"); + console.log(header); + console.log("请求参数为 ↓↓↓"); + console.log(params); + console.log("返回参数为 ↓↓↓") + console.log(res.data); + console.log("↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 结束 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"); + }, + fail: (error) => { + if (loading) { + hideLoading(); + } + wx.showToast({ + title: "请求失败,请重试!", + icon: "none" + }) + reject(error); + } + }) + }) +} + +export default { + ajax +} \ No newline at end of file