From 7113efebed0a709365d7f01c47ba63eaefda5259 Mon Sep 17 00:00:00 2001 From: liuzhongming Date: Mon, 24 Feb 2025 10:33:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=BB=A3=E7=90=86=E7=BB=91?= =?UTF-8?q?=E5=AE=9A=20Signed-off-by:=20liuzhongming=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OAT.xml | 15 + common/include/dm_constants.h | 4 + common/src/dm_anonymous.cpp | 2 +- common/src/ipc/standard/ipc_model_codec.cpp | 1 + display/@ohos.distributedDeviceManager.d.ts | 10 +- display/AppScope/app.json | 4 +- .../picker/DeviceSelectAbility.ets | 62 ++ .../src/main/ets/pages/ConfirmDialog.ets | 4 + .../main/ets/pages/picker/DeviceSelect.ets | 590 ++++++++++++++++++ display/entry/src/main/module.json | 12 + .../main/resources/base/media/background.png | Bin 0 -> 57364 bytes .../base/media/background_picker.png | Bin 0 -> 43517 bytes .../src/main/resources/base/media/close.png | Bin 0 -> 1205 bytes .../main/resources/base/media/foreground.png | Bin 0 -> 12430 bytes .../resources/base/media/icon_background.png | Bin 0 -> 2445 bytes .../base/media/icon_background_light.png | Bin 0 -> 2700 bytes .../main/resources/base/media/icon_ball.png | Bin 0 -> 11052 bytes .../resources/base/media/icon_ball_online.png | Bin 0 -> 10876 bytes .../main/resources/base/media/icon_pad.png | Bin 0 -> 680 bytes .../src/main/resources/base/media/img.png | Bin 0 -> 9667 bytes .../main/resources/base/media/img_select.png | Bin 0 -> 14275 bytes .../resources/base/media/iocn_phone_self.png | Bin 0 -> 12639 bytes .../src/main/resources/base/media/phone.png | Bin 0 -> 725 bytes .../main/resources/base/media/startIcon.png | Bin 0 -> 20093 bytes .../src/main/resources/base/media/status.png | Bin 0 -> 302 bytes .../resources/base/profile/main_pages.json | 3 +- .../main/resources/es_US/element/string.json | 4 + .../main/resources/zh_CN/element/string.json | 4 + .../native_cpp/include/dm_device_info.h | 5 + .../kits/js4.0/include/dm_native_util.h | 3 +- .../js4.0/include/native_devicemanager_js.h | 4 +- interfaces/kits/js4.0/src/dm_native_util.cpp | 15 +- .../js4.0/src/native_devicemanager_js.cpp | 14 +- sa_profile/device_manager.cfg | 4 + services/implementation/BUILD.gn | 2 + .../include/authentication/dm_auth_manager.h | 3 +- .../dependency/softbus/softbus_connector.h | 7 + .../dependency/softbus/softbus_session.h | 2 +- .../include/i18n/dm_language_manager.h | 40 ++ .../src/authentication/dm_auth_manager.cpp | 47 +- .../dependency/softbus/softbus_connector.cpp | 12 + .../dependency/softbus/softbus_session.cpp | 4 +- .../src/i18n/dm_language_manager.cpp | 148 +++++ .../service/include/device_manager_service.h | 1 + .../include/softbus/softbus_listener.h | 5 + .../src/advertise/advertise_manager.cpp | 3 + .../service/src/device_manager_service.cpp | 58 +- .../src/device_manager_service_listener.cpp | 34 + .../src/discovery/discovery_manager.cpp | 16 +- .../src/ipc/standard/ipc_cmd_parser.cpp | 1 + .../service/src/softbus/softbus_listener.cpp | 80 ++- .../UTTest_dm_auth_manager_first.cpp | 12 +- .../UTTest_dm_auth_manager_second.cpp | 2 +- .../onsoftbusdevicefound_fuzzer/BUILD.gn | 1 + .../BUILD.gn | 1 + .../onsoftbusdeviceoffline_fuzzer/BUILD.gn | 1 + .../onsoftbusdeviceonline_fuzzer/BUILD.gn | 1 + .../BUILD.gn | 1 + .../publishsoftbuslnn_fuzzer/BUILD.gn | 1 + .../refreshsoftbuslnn_fuzzer/BUILD.gn | 1 + .../BUILD.gn | 1 + .../stoprefreshsoftbuslnn_fuzzer/BUILD.gn | 1 + test/unittest/BUILD.gn | 2 + 63 files changed, 1195 insertions(+), 53 deletions(-) create mode 100644 display/entry/src/main/ets/UIExtAbility/picker/DeviceSelectAbility.ets create mode 100644 display/entry/src/main/ets/pages/picker/DeviceSelect.ets create mode 100644 display/entry/src/main/resources/base/media/background.png create mode 100644 display/entry/src/main/resources/base/media/background_picker.png create mode 100644 display/entry/src/main/resources/base/media/close.png create mode 100644 display/entry/src/main/resources/base/media/foreground.png create mode 100644 display/entry/src/main/resources/base/media/icon_background.png create mode 100644 display/entry/src/main/resources/base/media/icon_background_light.png create mode 100644 display/entry/src/main/resources/base/media/icon_ball.png create mode 100644 display/entry/src/main/resources/base/media/icon_ball_online.png create mode 100644 display/entry/src/main/resources/base/media/icon_pad.png create mode 100644 display/entry/src/main/resources/base/media/img.png create mode 100644 display/entry/src/main/resources/base/media/img_select.png create mode 100644 display/entry/src/main/resources/base/media/iocn_phone_self.png create mode 100644 display/entry/src/main/resources/base/media/phone.png create mode 100644 display/entry/src/main/resources/base/media/startIcon.png create mode 100644 display/entry/src/main/resources/base/media/status.png create mode 100644 services/implementation/include/i18n/dm_language_manager.h create mode 100644 services/implementation/src/i18n/dm_language_manager.cpp diff --git a/OAT.xml b/OAT.xml index df03b803c..c44c80974 100644 --- a/OAT.xml +++ b/OAT.xml @@ -67,6 +67,21 @@ Note:If the text contains special characters, please escape them according to th + + + + + + + + + + + + + + + diff --git a/common/include/dm_constants.h b/common/include/dm_constants.h index c759db158..18191989d 100755 --- a/common/include/dm_constants.h +++ b/common/include/dm_constants.h @@ -153,6 +153,7 @@ constexpr const char* DM_CAPABILITY_CASTPLUS = "castPlus"; constexpr const char* DM_CAPABILITY_VIRTUAL_LINK = "virtualLink"; constexpr const char* DM_CAPABILITY_SHARE = "share"; constexpr const char* DM_CAPABILITY_WEAR = "wear"; +constexpr const char* DM_CAPABILITY_OOP = "oop"; constexpr const char* DM_CREDENTIAL_TYPE = "CREDENTIAL_TYPE"; constexpr const char* DM_CREDENTIAL_REQJSONSTR = "CREDENTIAL_REQJSONSTR"; constexpr const char* DM_CREDENTIAL_RETURNJSONSTR = "CREDENTIAL_RETURNJSONSTR"; @@ -264,6 +265,7 @@ constexpr const char* PARAM_CLOSE_SESSION_DELAY_SECONDS = "DM_CLOSE_SESSION_DELA constexpr const char* DM_AUTHENTICATION_TYPE = "DM_AUTHENTICATION_TYPE"; constexpr const char* PARAM_KEY_CONN_SESSIONTYPE = "connSessionType"; +constexpr const char* PARAM_KEY_HML_RELEASETIME = "hmlReleaseTime"; constexpr const char* PARAM_KEY_HML_ENABLE_160M = "hmlEnable160M"; constexpr const char* PARAM_KEY_HML_ACTIONID = "hmlActionId"; @@ -298,6 +300,8 @@ constexpr int32_t MAX_ICON_SIZE = 4 * 1024 * 1024; constexpr int32_t MAX_CONTAINER_SIZE = 500; // One year 365 * 24 * 60 * 60 constexpr int32_t MAX_ALWAYS_ALLOW_SECONDS = 31536000; + +const std::string PICKER_PROXY_SPLIT = "_pickerProxy_"; } // namespace DistributedHardware } // namespace OHOS #endif // OHOS_DM_CONSTANTS_H \ No newline at end of file diff --git a/common/src/dm_anonymous.cpp b/common/src/dm_anonymous.cpp index 1ae4cd2b3..8241a39bf 100644 --- a/common/src/dm_anonymous.cpp +++ b/common/src/dm_anonymous.cpp @@ -384,7 +384,7 @@ std::string GetSubStr(const std::string &rawStr, const std::string &separator, i while (end != std::string::npos) { strVec.push_back(rawStr.substr(start, end - start)); - start = end + 1; + start = end + separator.size(); end = rawStr.find(separator, start); } strVec.push_back(rawStr.substr(start)); diff --git a/common/src/ipc/standard/ipc_model_codec.cpp b/common/src/ipc/standard/ipc_model_codec.cpp index a411577b3..527699df0 100644 --- a/common/src/ipc/standard/ipc_model_codec.cpp +++ b/common/src/ipc/standard/ipc_model_codec.cpp @@ -51,6 +51,7 @@ void IpcModelCodec::DecodeDmDeviceBasicInfo(MessageParcel &parcel, DmDeviceBasic LOGE("strcpy_s networkId failed!"); return; } + devInfo.extraData = parcel.ReadString(); } bool IpcModelCodec::EncodePeerTargetId(const PeerTargetId &targetId, MessageParcel &parcel) diff --git a/display/@ohos.distributedDeviceManager.d.ts b/display/@ohos.distributedDeviceManager.d.ts index 22accf7a6..0aaaafef6 100644 --- a/display/@ohos.distributedDeviceManager.d.ts +++ b/display/@ohos.distributedDeviceManager.d.ts @@ -54,7 +54,7 @@ declare namespace distributedDeviceManager { * @syscap SystemCapability.DistributedHardware.DeviceManager * @since 10 */ - deviceType: number; + deviceType: string; /** * Device network id. @@ -62,6 +62,14 @@ declare namespace distributedDeviceManager { * @since 10 */ networkId?: string; + + /** + * Device extra data. + * @type { ?string } + * @syscap SystemCapability.DistributedHardware.DeviceManager + * @since 16 + */ + extraData?: string; } /** diff --git a/display/AppScope/app.json b/display/AppScope/app.json index b59a97e4d..c4e9d0b90 100644 --- a/display/AppScope/app.json +++ b/display/AppScope/app.json @@ -2,8 +2,8 @@ "app": { "bundleName": "com.ohos.devicemanagerui", "vendor": "example", - "versionCode": 1000034, - "versionName": "1.0.34", + "versionCode": 1000035, + "versionName": "1.0.35", "icon": "$media:app_icon", "label": "$string:app_name", "minAPIVersion": 10, diff --git a/display/entry/src/main/ets/UIExtAbility/picker/DeviceSelectAbility.ets b/display/entry/src/main/ets/UIExtAbility/picker/DeviceSelectAbility.ets new file mode 100644 index 000000000..472482bb2 --- /dev/null +++ b/display/entry/src/main/ets/UIExtAbility/picker/DeviceSelectAbility.ets @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import UIExtensionAbility from '@ohos.app.ability.UIExtensionAbility' +import UIExtensionContentSession from '@ohos.app.ability.UIExtensionContentSession' +import Want from '@ohos.app.ability.Want'; +const TAG = '[DeviceManagerUI:DeviceSelectAbility]==>'; + +export default class DeviceSelectAbility extends UIExtensionAbility { + onSessionCreate(want: Want, session: UIExtensionContentSession) { + console.log(TAG, `UIExtAbility onSessionCreate`) + if (want.parameters != undefined) { + if (want.parameters.title) { + AppStorage.setOrCreate('title', want.parameters.title); + } + if (want.parameters.customDescription) { + AppStorage.setOrCreate('customDescription', want.parameters.customDescription); + } + if (want.parameters.operation) { + AppStorage.setOrCreate('operation', want.parameters.operation); + } + if (want.parameters.bundleName) { + AppStorage.setOrCreate('bundleName', want.parameters.bundleName); + } + if (want.parameters.moduleName) { + AppStorage.setOrCreate('moduleName', want.parameters.moduleName); + } + if (want.parameters.abilityName) { + AppStorage.setOrCreate('abilityName', want.parameters.abilityName); + } + let callerBundleName: string = want.parameters?.['ohos.aafwk.param.callerBundleName'] as string; + AppStorage.setOrCreate('callerBundleName', callerBundleName); + } + let param: Record = { + 'session': session + } + let storage: LocalStorage = new LocalStorage(param); + session.loadContent('pages/picker/DeviceSelect', storage); + session.setWindowBackgroundColor('#00000000'); + let extensionHostWindow = session.getUIExtensionHostWindowProxy(); + extensionHostWindow.hideNonSecureWindows(true); + session.setWindowPrivacyMode(true); + AppStorage.setOrCreate('deviceSelectSession', session); + } + + onSessionDestroy(session: UIExtensionContentSession) { + let extensionHostWindow = session.getUIExtensionHostWindowProxy(); + extensionHostWindow.hideNonSecureWindows(false); + console.log(TAG, `UIExtAbility onSessionDestroy`) + } +} \ No newline at end of file diff --git a/display/entry/src/main/ets/pages/ConfirmDialog.ets b/display/entry/src/main/ets/pages/ConfirmDialog.ets index ff783b953..43a0bd10a 100644 --- a/display/entry/src/main/ets/pages/ConfirmDialog.ets +++ b/display/entry/src/main/ets/pages/ConfirmDialog.ets @@ -55,6 +55,7 @@ struct ConfirmCustomDialog { this.peerDeviceName = AppStorage.get('deviceName') as string; console.log('peerDeviceName is ' + this.peerDeviceName); } + let customDescriptionStr: string = AppStorage.get('customDescriptionStr') as string; let hostPkgLabel: string = AppStorage.get('hostPkgLabel') as string; if (hostPkgLabel === CAST_PKG_NAME) { this.title = @@ -63,6 +64,9 @@ struct ConfirmCustomDialog { this.title = context.resourceManager.getStringSync($r('app.string.dm_confirm_title_hap').id, hostPkgLabel, this.peerDeviceName); this.peerCustomDescription = context.resourceManager.getStringSync($r('app.string.dm_confirm_intention').id); + if (customDescriptionStr != undefined && customDescriptionStr != '') { + this.peerCustomDescription = this.peerDeviceName + customDescriptionStr; + } } else { let titleFirst: string = context.resourceManager.getStringSync($r('app.string.dm_connect_device').id, this.peerDeviceName); diff --git a/display/entry/src/main/ets/pages/picker/DeviceSelect.ets b/display/entry/src/main/ets/pages/picker/DeviceSelect.ets new file mode 100644 index 000000000..6b014010e --- /dev/null +++ b/display/entry/src/main/ets/pages/picker/DeviceSelect.ets @@ -0,0 +1,590 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import distributedDeviceManager from '@ohos.distributedDeviceManager'; +import { AsyncCallback, BusinessError, Callback, ErrorCallback } from '@ohos.base'; +import abilityAccessCtrl, { Context } from '@ohos.abilityAccessCtrl'; +import promptAction from '@ohos.promptAction'; +import UIExtensionContentSession from '@ohos.app.ability.UIExtensionContentSession'; +import mediaquery from '@ohos.mediaquery'; +import deviceInfo from '@ohos.deviceInfo'; +import Constant from '../../common/constant'; +import accessibility from '@ohos.accessibility'; +import common from '@ohos.app.ability.common'; +let anmDuration: number = 800; +let TAG = '[DeviceManagerUI:DeviceSelect]==>'; + +enum StatusType { + Unbound = 0, + TrustBinding = 1, + Binding = 2 +} + +let customData: Record = { + 'operation': '', + 'object': '', + 'qResp': 1 +}; + +let discoverParam: Record = { + 'discoverTargetType': 1, + 'CUSTOM_DATA': JSON.stringify(customData), + 'DISC_CAPABILITY': '' +}; +let filterOptions: Record = { + 'availableStatus': 0 +}; + +class Data { + public status?: StatusType = StatusType.Unbound + public device: distributedDeviceManager.DeviceBasicInfo = { + deviceId: '', + deviceName: '', + deviceType: '', + networkId: '', + extraData: '', + }; +} + +class DeviceStateData { + public action: distributedDeviceManager.DeviceStateChange = 0; + public device: distributedDeviceManager.DeviceBasicInfo = { + deviceId: '', + deviceName: '', + deviceType: '', + networkId: '', + extraData: '', + }; +} + +class Device { + public device: distributedDeviceManager.DeviceBasicInfo = { + deviceId: '', + deviceName: '', + deviceType: '', + networkId: '', + extraData: '', + } +} + +class CustomData { + public operation: string = ''; + public object: string = ''; + public displayName: string = ''; + public policyCode: number = 0; + public actionId: number = 0; +} + +class ExtraData { + public CUSTOM_DATA: string = '' +} + +class DeviceCallBack { + public deviceId: string = ''; + public deviceName: string = ''; + public bundlename: string = ''; + public moudlename: string = ''; + public ablityname: string = ''; +} + +class BindTargetData { + public deviceId: string = ''; +} + +@Entry +@Component +export struct Index { + @State showPhone: Visibility = Visibility.Visible; + @State showFlag: Visibility = Visibility.Visible; + @State deviceSelectSession : UIExtensionContentSession | undefined = undefined; + @State isAutoCancel: boolean = false; + @State deviceList: Data[] = []; + @State trustDeviceList: Data[] = []; + @State centerX: number = 0; + @State centerY: number = 0; + @State radius: number = 0; + @State deviceStateStatus: number = -1; + @State currentDevice: Data | undefined = undefined; + @State title: string | Resource = ''; + @State operation: string = ''; + @State customDescription: string | Resource = ''; + @State bundleName: string = ''; + @State moduleName: string = ''; + @State abilityName: string = ''; + @State isLandscape: boolean = true; + @State isListNum: number = 5; + @State discCapability: string = 'oop'; + @State networIdMatchLen: number = -1; + listener = mediaquery.matchMediaSync('(orientation: landscape)'); + dmInstance: distributedDeviceManager.DeviceManager | undefined = undefined; + context = getContext(this) as common.UIAbilityContext + bindParam: Record = {}; + scroller: Scroller = new Scroller() + + @Builder + CustomBuilder() { + Column() { + Stack() { + Image($r('app.media.iocn_phone_self')).width(54).draggable(false) + Image($r('app.media.phone')).width(30).draggable(false) + } + .width(54) + .height(54) + .borderRadius(54) + } + .width(68) + .height(92) + } + + cancel() { + this.dmInstance!.stopDiscovering(); + try { + console.log(TAG + 'terminateSelf'); + this.deviceSelectSession = AppStorage.get('deviceSelectSession'); + if (this.deviceSelectSession) { + this.deviceSelectSession.terminateSelf(); + } + } catch (err) { + console.log(TAG + 'dialog cancel failed: ' + JSON.stringify(err)); + } + } + + deviceStateChange() { + try { + this.dmInstance!.on('deviceStateChange', (data: DeviceStateData) => { + if (data.action == 0 || data.action == 1) { + let deviceInfoList: distributedDeviceManager.DeviceBasicInfo[] = + this.dmInstance!.getAvailableDeviceListSync(); + this.trustDeviceList = []; + deviceInfoList.forEach((item) => { + this.trustDeviceList.push({ device: item, status: StatusType.TrustBinding}) + for (let i = 0; i < this.deviceList.length; i++) { + let deviceItem = this.deviceList[i] + if (this.isDeviceBasicEqual(deviceItem, item)) { + this.deviceList[i].status = StatusType.TrustBinding + this.deviceList.push(new Data()) + this.deviceList.splice(this.deviceList.length - 1, 1) + } + } + }) + let currentItem = this.currentDevice as Data + if (currentItem && this.isDeviceEqual(currentItem, data)) { + this.sendData(data.device.deviceId, data.device.networkId, data.device.deviceName) + } + } + if (data.action == 2) { + this.deviceList = this.deviceList.filter((item) => !this.isDeviceEqual(item, data)) + } + }); + } catch (err) { + let e: BusinessError = err as BusinessError; + console.error('deviceStateChange errCode:' + e.code + ',errMessage:' + e.message); + } + } + + addProperty(data: Data) { + let extraDataStr: string = data.device.extraData == undefined ? '' : data.device.extraData + let extraData: ExtraData = JSON.parse(extraDataStr) + let customData: CustomData = JSON.parse(extraData.CUSTOM_DATA) + data.device.deviceName = customData.displayName + } + + devListInfo() { + try { + this.deviceStateChange() + let deviceInfoList: distributedDeviceManager.DeviceBasicInfo[] = + this.dmInstance!.getAvailableDeviceListSync(); + deviceInfoList.forEach((item) => { + this.trustDeviceList.push({ device: item, status: StatusType.TrustBinding }) + }) + + customData = { + 'operation': this.operation, + 'object': this.bundleName, + 'qResp': 1 + } + discoverParam = { + 'discoverTargetType': 1, + 'CUSTOM_DATA': JSON.stringify(customData), + 'DISC_CAPABILITY' : this.discCapability + } + this.dmInstance!.startDiscovering(discoverParam, filterOptions); + } catch (err) { + let e: BusinessError = err as BusinessError; + console.error('startDiscovering errCode:' + e.code + ',errMessage:' + e.message); + } + this.dmInstance!.on('discoverSuccess', (data: Data) => { + let arr: string[] = [] + let result = this.deviceList.find((item: Data) => { + return this.isDeviceDataEqual(item, data) + }) + if (!!result) { + return + } + this.deviceList.forEach((item) => { + arr.push(this.getMatchId(item.device.deviceId, item.device.networkId)) + }) + if (arr.indexOf(this.getMatchId(data.device.deviceId, data.device.networkId)) === -1) { + data.status = this.getStatusType(data) + this.deviceList.push(data) + } + }); + } + + getFullNetworkId(networkId: string | undefined): string { + let networkIdStr = networkId == undefined ? '' : networkId + let fullNetworkId = ''; + this.trustDeviceList.forEach((item) => { + if (this.getMatchId('', item.device.networkId) == this.getMatchId('', networkIdStr)) { + fullNetworkId = item.device.networkId; + } + }); + return fullNetworkId; + } + + getStatusType(data: Data): StatusType { + let isTrust = false; + this.trustDeviceList.forEach((item) => { + if (this.isDeviceDataEqual(item, data)) { + isTrust = true + } + }); + if (isTrust) { + return StatusType.TrustBinding + } + return StatusType.Unbound + } + + getMatchId(deviceId: string, networkId: string | undefined): string { + networkId = networkId == undefined ? '' : networkId; + if (this.discCapability == 'oop') { + this.networIdMatchLen = 8; + if (networkId.length > this.networIdMatchLen) { + return networkId.substring(0, this.networIdMatchLen) + } + return networkId + } + return deviceId; + } + + isDeviceEqual(device1: Data, device2: DeviceStateData): boolean { + return this.getMatchId(device1.device.deviceId, device1.device.networkId) == + this.getMatchId(device2.device.deviceId, device2.device.networkId); + } + + isDeviceBasicEqual(device1: Data, device2: distributedDeviceManager.DeviceBasicInfo): boolean { + return this.getMatchId(device1.device.deviceId, device1.device.networkId) == + this.getMatchId(device2.deviceId, device2.networkId); + } + + isDeviceDataEqual(device1: Data, device2: Data): boolean { + return this.getMatchId(device1.device.deviceId, device1.device.networkId) == + this.getMatchId(device2.device.deviceId, device2.device.networkId); + } + + initPickParms() { + if (AppStorage.get('title') != null) { + this.title = AppStorage.get('title') as string; + } + if (AppStorage.get('customDescription') != null) { + this.customDescription = AppStorage.get('customDescription') as string; + } + if (AppStorage.get('operation') != null) { + this.operation = AppStorage.get('operation') as string; + } + if (AppStorage.get('bundleName') != null) { + this.bundleName = AppStorage.get('callerBundleName') as string; + } + if (AppStorage.get('moduleName') != null) { + this.moduleName = AppStorage.get('moduleName') as string; + } + if (AppStorage.get('abilityName') != null) { + this.abilityName = AppStorage.get('abilityName') as string; + } + let bundleName = `com.ohos.devicemanagerui_pickerProxy_${this.bundleName}` + this.dmInstance = distributedDeviceManager.createDeviceManager(bundleName); + } + + calcPositionX(index: number): number { + let angle = -160 + (index * 160 / this.isListNum) + let radian = angle * Math.PI / 180 + return this.centerX + Math.cos(radian) * this.radius + } + + calcPositionY(index: number): number { + let angle = -160 + (index * 160 / this.isListNum) + let radian = angle * Math.PI / 180 + return this.centerY + Math.sin(radian) * this.radius + } + + sendData(deviceId: string, networkId: string | undefined, deviceName: string) { + this.deviceSelectSession = AppStorage.get('deviceSelectSession'); + let callBack: DeviceCallBack = { + deviceId: deviceId, + deviceName: deviceName, + bundlename: this.bundleName, + moudlename: this.moduleName, + ablityname: this.abilityName, + } + let fullNetworkId = this.getFullNetworkId(networkId) + console.info('sendData:' + JSON.stringify(callBack)); + this.deviceSelectSession.sendData({'deviceId' : deviceId, 'networkId' : fullNetworkId, 'deviceName' : deviceName}) + this.cancel() + } + + bindTarget(item: Data, index: number) { + this.currentDevice = item + if (item.status == 0) { + try { + this.bindParam = { + 'bindType': 1, + 'targetPkgName': 'xxxx', + 'appName': 'xxxx', + 'appOperation': 'xxxx', + 'customDescription': this.customDescription, + 'bundleName': this.bundleName, + 'context': this.context + }; + this.dmInstance!.bindTarget(item.device.deviceId, this.bindParam, + (err: BusinessError, data: BindTargetData) => { + if (err) { + console.error('======bindTarget errCode:' + err.code + ',errMessage:' + err.message); + return; + } + }); + } catch (err) { + let e: BusinessError = err as BusinessError; + console.error('bindTarget errCode:' + e.code + ',errMessage:' + e.message); + } + } else { + try { + this.dmInstance!.unbindTarget(item.device.deviceId); + this.deviceList[index].status = StatusType.Unbound + this.deviceList.push(new Data()) + this.deviceList.splice(this.deviceList.length - 1, 1) + } catch (err) { + let e: BusinessError = err as BusinessError; + console.error('unbindTarget errCode:' + e.code + ',errMessage:' + e.message); + } + } + } + + onPortrait(mediaQueryResult: mediaquery.MediaQueryResult) { + console.info('mediaQueryResult.matches:' + mediaQueryResult.matches) + if (mediaQueryResult.matches) { + this.isLandscape = true + this.isListNum = 8 + } else { + this.isLandscape = false + this.isListNum = 5 + } + } + + aboutToAppear(): void { + this.listener.on('change', this.onPortrait.bind(this)) + this.initPickParms() + this.deviceSelectSession = AppStorage.get('deviceSelectSession'); + this.devListInfo(); + } + + aboutToDisappear(): void { + this.listener.off('change', this.onPortrait) + } + + build() { + Column() { + Row() { + Text(this.title) + .fontSize(24) + .fontWeight(500) + .onClick(() => { + let arr: string[] = [] + this.deviceList.forEach((item) => { + arr.push(item.device.deviceId) + arr = Array.from(new Set(arr)) + }) + }) + Image($r('app.media.close')).width(40).height(40) + .onClick(() => { + this.cancel() + }) + }.justifyContent(FlexAlign.SpaceBetween) + .width('100%') + + if (this.deviceList.length <= this.isListNum) { + ForEach(this.deviceList, (item: Data, index: number) => { + Column() { + Stack() { + Image(item.status == StatusType.TrustBinding ? $r('app.media.icon_ball_online') : + $r('app.media.icon_ball')).width(54) + Image(item.device.deviceType == 'PHONE' ? $r('app.media.phone') : $r('app.media.icon_pad')).width(30) + } + .width(54) + .height(54) + .borderRadius(54) + + Text(item.device.deviceName) + .fontSize(12) + .textAlign(TextAlign.Center) + } + .width(68) + .height(92) + .position({ + x: this.calcPositionX(index) - 34, + y: this.calcPositionY(index) - 46 + }) + .onClick(() => { + if (item.status == StatusType.TrustBinding) { + this.sendData(item.device.deviceId, item.device.networkId, item.device.deviceName) + } + }) + .onDrop((event: DragEvent, extraParams?: string | undefined) => { + this.showPhone = Visibility.Visible + this.bindTarget(item, index) + console.info('======onDrop onDrop:' + JSON.stringify(event), JSON.stringify(extraParams)); + }) + }) + Column() { + Stack() { + Image($r('app.media.iocn_phone_self')).width(54).draggable(false) + Image($r('app.media.phone')).width(30).draggable(false) + } + .width(54) + .height(54) + .borderRadius(54) + + Text($r('app.string.local_machine')) + .fontSize(12) + .textAlign(TextAlign.Center) + } + .width(68) + .height(92) + .position({ + x: this.centerX - 34, + y: this.centerY - 46 + }) + .visibility(this.showPhone) + .draggable(true) + .onDragStart((event) => { + this.showPhone = Visibility.Hidden + console.info('======onDrop onDragStart:' + JSON.stringify(event)); + return this.CustomBuilder() + }) + .onDragEnter((event: DragEvent, extraParams?: string | undefined) => { + this.showPhone = Visibility.Hidden + console.info('======onDrop onDragEnter:' + JSON.stringify(event), JSON.stringify(extraParams)); + }) + .onDragMove((event: DragEvent, extraParams?: string | undefined) => { + console.info('======onDrop onDragMove:' + JSON.stringify(event), JSON.stringify(extraParams)); + }) + .onDrop((event: DragEvent, extraParams?: string | undefined) => { + console.info('======onDrop onDrop:' + JSON.stringify(event), JSON.stringify(extraParams)); + }) + .onDragEnd((event: DragEvent, extraParams?: string | undefined) => { + console.info('======onDrop onDragEnd:' + JSON.stringify(event), JSON.stringify(extraParams)); + }) + } else { + Grid(this.scroller) { + ForEach(this.deviceList, (item: Data, index: number) => { + GridItem() { + Column() { + Stack() { + Image(item.status == StatusType.TrustBinding ? $r('app.media.icon_ball_online') : + $r('app.media.icon_ball')).width(54).draggable(false) + Image(item.device.deviceType == 'PHONE' ? $r('app.media.phone') : $r('app.media.icon_pad')) + .width(30) + .draggable(false) + } + .width(54) + .height(54) + .borderRadius(54) + + Text(item.device.deviceName) + .fontSize(12) + .textAlign(TextAlign.Center) + } + .width(68) + .height(92) + .onClick(() => { + if (item.status == StatusType.TrustBinding) { + this.sendData(item.device.deviceId, item.device.networkId, item.device.deviceName) + } else { + this.bindTarget(item, index) + } + }) + } + .draggable(true) + .onDragStart((event) => { + console.info('======onDrop onDragStart:' + JSON.stringify(event)); + }) + .onDragEnter((event: DragEvent, extraParams?: string | undefined) => { + + console.info('======onDrop onDragEnter:' + JSON.stringify(event), JSON.stringify(extraParams)); + }) + .onDragMove((event: DragEvent, extraParams?: string | undefined) => { + console.info('======onDrop onDragMove:' + JSON.stringify(event), JSON.stringify(extraParams)); + }) + .onDrop((event: DragEvent, extraParams?: string | undefined) => { + console.info('======onDrop onDrop:' + JSON.stringify(event), JSON.stringify(extraParams)); + }) + .onDragEnd((event: DragEvent, extraParams?: string | undefined) => { + console.info('======onDrop onDragEnd:' + JSON.stringify(event), JSON.stringify(extraParams)); + }) + }) + } + .columnsTemplate('1fr 1fr 1fr 1fr 1fr') + .columnsGap(10) + .rowsGap(10) + .friction(0.6) + .enableScrollInteraction(true) + .supportAnimation(false) + .multiSelectable(false) + .edgeEffect(EdgeEffect.Spring) + .scrollBar(BarState.On) + .scrollBarColor(Color.Grey) + .scrollBarWidth(4) + .width('100%') + .layoutWeight(1) + } + } + .onDrop((event: DragEvent, extraParams?: string | undefined) => { + this.showPhone = Visibility.Visible + console.info('======onDrop onDrop:' + JSON.stringify(event), JSON.stringify(extraParams)); + }) + .width('100%') + .height('100%') + .backgroundColor(Color.White) + .borderRadius({ topLeft: 20, topRight: 20 }) + .padding({ bottom: 0, left: 10, right: 10 }) + .onClick(() => { + if (this.isAutoCancel) { + this.cancel(); + } + }) + .onAreaChange((oldValue, newValue) => { + this.centerX = Number(newValue.width) / 2 + if (this.isLandscape) { + this.radius = Number(newValue.height) - 90 + this.centerY = Number(newValue.height) - 20 + } else { + this.radius = Math.min(Number(newValue.width), Number(newValue.height)) * 0.4 + this.centerY = this.radius + 90 + } + }) + .visibility(this.showFlag) + .transition(TransitionEffect.OPACITY.animation({ duration: anmDuration }) + .combine(TransitionEffect.translate({ y: 100 }))) + + } +} \ No newline at end of file diff --git a/display/entry/src/main/module.json b/display/entry/src/main/module.json index a1e04e78e..c4d6963c4 100644 --- a/display/entry/src/main/module.json +++ b/display/entry/src/main/module.json @@ -67,6 +67,15 @@ "label": "$string:ServiceExtAbility_label", "exported": true, "type": "sysDialog/common" + }, + { + "name": "com.ohos.devicemanagerui.picker.DeviceSelectAbility", + "srcEntrance": "./ets/UIExtAbility/picker/DeviceSelectAbility.ets", + "description": "$string:ServiceExtAbility_desc", + "icon": "$media:icon", + "label": "$string:ServiceExtAbility_label", + "exported": true, + "type": "sysDialog/common" } ], "requestPermissions": [ @@ -78,6 +87,9 @@ }, { "name": "ohos.permission.PRIVACY_WINDOW" + }, + { + "name": "ohos.permission.DISTRIBUTED_DATASYNC" } ], "metadata": [ diff --git a/display/entry/src/main/resources/base/media/background.png b/display/entry/src/main/resources/base/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..f939c9fa8cc8914832e602198745f592a0dfa34d GIT binary patch literal 57364 zcmYIuc|6qL_rIk#Su&MMQlYU)cz{|$Qc0x~A^BEf( z`{n=HaSk>%wsfNM*uUkN^8dI{qxxW z*@b_`#>VlLWSG9 z0>QdPQ-&i_RCVdp2s$-u%S362^SHV0`EO6;@n(xK));G>#qwhPWrDXGk@OBMV}H!J za!48&`xhWJKj{_+f3ir<>Jg6Ax<&Xgn;)U7UJyAw{(u?zlf{oLsJTS-_o1?+lSg-j z8fcZj1*Ad(!X>WuuxM!H5t@V3*8vLL6`QnC!q!BwQjI{yk*;~@|3;B)`p$WYcDmnZ zt`R zr=oS6o-D$WZsYKh1PiOdhhX&YWGOzpc<6ITKzr^zi-#>z){t;yz3tu_a!>)(tTU9d zd}COuy~Tb}UIRNX@aVGJqEKUa)1#E-u}pl!sY)z4cu+Hu9==`6=0Ob#x-%q}t@jBp zmoiZDcfF1WL{PB0ZO**8yZ+%;LF6K*JDUoHrJkl0Wzak+Y%E( znUmuA^p@Jv6{%Y;MsiZ4O?#ID2b2ssEq6_KGL z8T%zdA3YhMnkBu19bNsa_$$_1^16jadx`0ZzPx`M%T>qZpYyNYOeDdmqLTNWpR5T% zOlRrW_xNCD+*3_WSxvt4P-@qQ9g_$aedDk-hcV~t>Oxw;UaAk1V?9m5<2k4%VrM$- z?{KH{)m_U~yJcBbX+vqVfq&4)Vf+FvAHd|s{V34=f#uJM!Tp?b32THmfzNn1unwY& zPNtaE{ZZ=OkZFh*xW2FT&fDF?64Q%l>dwdZ#Bg;^v;dAbU*QLEQG@_|ucNXFyx~H( z#h?kJKeI3jD^U~`e`*^zcm?PlIWj|tL_a8NC?HVl*gX%;5PW5Y%ZZ*G=jPn5#o+Sh zhnE>D@Wb!f*O>cZ0}ZT=HlEdoWVWk}5H1S;$vxe#Rv~;l5rJ=w--wPl621jCW}B|gxECKzT9 z3FKlD{=OfN5$J3?Ag0g4F5t8_D(RvO8W!*~?#q{Dhx(Sj=)^9ZlE|LyI?p1NXMWr| zGGbzFN^3)5?P^vfnD7XZo*8yf&O&>7XULUUvhJT@rHcF>PmjodH~u4RSmX4TH?v`IKg2cy7 z(T@e4&pPRHRczikEvwvO?jbblSVp z2qpyT+LHUFhHwcunP(^h)G#uA95vF`Gd&1k%F@wuCk3DnjNjw;b}*;dY{F5{7tNsg zLf4y|)RTV`PjQ^!NoWB3YA@S@Cw zUAr?mUcn7g)n!3J`D7*H`y{%TuT$wNY;))rP(y@kdFdPH#h|rjcW2#oRybxTchXlQ zwMW{bVcqRRc_2r^tI)Zav_+qLwdd|Bw=*pM!|pflbT%K&Eof^{6+|k{2_;HcrWd3? z#z;>@Y3dp#B^R5c9RhH8lT5MRr*;>xd<%C3sV2Y}>{On@a*oump`g#H<6V&DKeZ-?Zic$S$>ulEiZvJG8kHMeSzVE(R|E-<}cEG^n2E*Cp z-25-DQv_Mf+&WhT3r?23Phid$q`Z3HE($RgC{EJA0Yc1SP6(a(oZ4RU2L1~H6k0Q< zHY1Mj{)b(ll3Wr=HakbiEk13zYKN&f#9*}tMZiQ7h@Us+N(Jk`aWQHf)r!ObZAT>_STJuzjuO{qHMlTjN9^hPZ8sZBMl zl&MX}xk{d5VUEInRK9r^Tnx#HE2;hFoa7?NDufAxZV6Mj9B^NaAt4;oStAtWfVg8< zjQAfLPj#u>Xp*sALAi;M(f1>la|_-k(E*-1Sa_Vdt$KsCNAwAbm8CmvpDbwL$`Cx8 zkBC0&3#@q@7E3LVtGQcrGS=s-uh6FHuC)WTtU_@t5c_T~`Wv+F0Jd$a9s(?ucd&l{ zWThjQ*u4YqU6Wq{+^0sC%S;vXx~qO|+s%Am1m-N}zkd84>GT;5u}a1*p9&!g%3wk2 zl=rj+H9g>!z4_zdU1iItL}Zox?lwK^ykQ+_#Ym~p>s8CgcLQYV4wezL^K-_HzM$r! z1m$U&G13HqDckgHschNcoe73o=)$P$j46Y)SnaZK(U|F7d#{AGb%>@b+jX#5*Rf5x zq}@ejPTyyn&&@n|dDGl-o-=XF%6dndW+}@7JDd?6b}Mt-SX_GV^3{!3Yz5a~X@$Fw zyDIkaWq*rtn{8knumG6=yF(6lzQnq)&M@%8RzdC%{%-0Ey{v&0pp-aIPP$bTrF|=~!MvLftx2pd=0-86i#@A;;(b^r-TzBJn~W4d42|-V*)} zt}h95!TwDQ%xWD9TFS{BwGO@d9P>kia=+LQ@r>0>5VvEV8(&tEuw%+YP*Qm6KzZs9 z#qL6SPwl9DtPZ{0`)Vph`^ryNV|=I7r2Vf@LrX3<=$f6zv1^z*!<6j{f$|6Jw=%s2 zb)|d{?()1m_Xoab$B5r9#&taTI^E@0yTQ$UB1_f0nc<oQhFOi;b@!o=y6w&Tsrw|K5XXEJEA>@Eb?8hi( zlT-*bXZd6g*C+W9V6B5iF$2f(_-ek(ko^JW%$@}`#GJVV0S8A~FwzM(JdY)c1B&ls(qJ=bvy&S10cqD8@1Clbooq|3kmbD_she z@O#tu^ibgYfM#HD%WIF%%uf7+)sc&Dejs@WRQE+Q1jXlN2z>9dB;X9e>Y3a-&-A;T z>||D+o$j^$E>F`4y02DTELRMYH*biv(5+ed(cQq&82Gu z2~UNnOcNc&MwT3lD@S}nPJMsvOT%0L{`dN}DU&^Z#6?2^aE!5ulUV_Zct}2~K6R!_ z4ReuaX$@AP?M!XMpi&ZJwsY2up5F-xe0{ym`9#@pr%63v->d&@UoFthcC1`k$L=ze zYX1{xl49Q=z953h>NzyMc3UuH96t7)-k|lRw-P=T%Q`;dC7@r`uCOq8Eqi7gKC)~7 zb(*Q>H|T2(e>5DVf9nswM~C%V2G2 z#B|VOitZm{FlV>EydvsFF|Ue~ium0%0KOaFiMOLk(X}jHq@dI@*AM2G6XzCU zSpFR?#U4MPz~VZR>RA@a!CZu45#f<)^f#kJ+ULtRLJKzSj=cf+NxQ}Kw)Yme6wJz; zu3W=Jz<}rEm$g7sNy>yr-Z|OiI>qQ4m37~);`_~Xgr~N4wOAssk(HTh5er1XtFm+! zb`5FT&FoKA{ADaUP!Y#o^sGPb?mT2wBY9ZfQ}ujLk`C_dyTvT&)34sj!RXJcZ%lCzF?kE~i-xCSGh{ zy%iUR0+S_JP(#%W9!Npk=RL(8tFB7(up1ms-Q#8 z$-{dva97!EQB<5#@0KgW&2S|ddKN*<(?}37-=O@1bF668sG)3(D61=Ech&sJ;j|An zqu1a;`}bcMj;#tF3l~&Ue9ES7GRw~kIPKK&q&^No_3M#yjp?ygI;To&wcXbe%ju*z zpMI!gbi8@{AJVkgXR+py{dMSfko}H`^q^elZQ-5<2bG-K8tYq8Q@*4t)`Blvz!#v> zE;3kk_e^|Kew4?}eU;3n)q48yWgAm)d+F(;W(>jPB_glQLiH|IE=EDVFI*j_FBebS0vXyh5@x9LS?RNi7vXf?RckfXjvy^Pifki$9G zzwp&k7S+aNOI8%DUON~#xxv+a5rJDE+^6;@RcjnwKZ|%#%Ukq~@&vL#Pts;`f?jwYL)Y zDOROB^T8hlFfA@(=$bFYKWy{F^5$#{h*A1FG5GZZ1?>Y+!}UULap(oEekfHZCJkpC zppRS@+Uvrs>_Df!YT#HWpuaEwRq)V49)TgZ7Jf{A6@tpv&>tG)c9F&eZWo)(tDPDB z4Fkl6@ov*S4!gboeokhZ>My7@q%!Z93-zy>Y(_9axnH2W2Ie&#X2Z->o1A6ZoV(OgY z@PpdL`E%U}QN-vzdLCdkVX)Vp-z|CGg)^e06LvMfbj%1)ZdXNB>r>{Jk&ApwTkkLr z-2C5e31{3c{*xsm?)EItQ%pSW(%723B}AHgke#M{7KJW6TT*>9^+`FIe4;VHRwSF$ z9rBta7_>vwCuV;vFY=|NZ2KlX$A`EUk*phH=Pd~I8Kkr|v!j3sBAD^fPD!FoPpnHf zqP&jc&^s{jm0M&oBNXjUol2${7|G^u7UtOd2kxA0b?japS#xlwo_TaY+jh-`+$sfO zFLgfqb~kaemX{ErUn7}?_tb>g?G@UyT99HoY^;BG(5|gh>F3J!9J* zvrz6TP+;XdE$<41%Vony^Y}i*aCz@+4v^38p)5?Nhw`m%Cbg5Lpz%VOxaBnlA9P;N z9D=#{(>`$N_!?&CKf9eJGzIc>dhWes8XtpX`{gOhP;HMklZ8~@Yu~YT1bZZ{VwrAffDNiZ6Mh5vEzpq z=5A;0ff@>1MG@vbwRU!?7ZFD-SYng>JN(=>uwrkrl@4u6M^n6jl1shsk;DM`t#|F? z(H9W(@&~b(mmUR)30H=vAZdIrX%9iR7rMruZ_I4$Eq7YnBI4Z8T zj5;RTUu8?(ZsW>30%Hk#$^zfAtgZ&y!|p@5%e_4oe7)3{Y6c^x>zv=o_XPiF*wI1y zNe5L3p=L;8_D7-+5I+LfNgDYrOIUD_Iu_VJQD^=4v=Gd z_u%h$8{Lobyu6%VkeZI%T_vssgc#J4yD+&6pVkdLYl@3@NdcQbwl!J%4{RC80oF1z z`ksIXyrZT=Apq3kOR#m795+y}-8NizKBNESZCmBS#jqG`n4kCydp-4DZ^BF-zWD2# z1@F?p*^9m)EPrkd^E&cimk<1mN+iwSCVTHpqz^#`_Dj;-5xURqxK*!kp5asE##*=< zc{bFC-`m;q4VL3=| zKN6@)%XIu=yS*-K-9Bw`jN+-lWBttd77x>|g)~$UgPB_qH0h&bm}j3#sdLfV&xcR^ zQFk=d3;U8~YLqm@^61C zmaLbHw=dJ0oLP?>eyJ&=wgtZm!2mS9V!i~62x+n`%jyesf0bKruxRDH-)c2uF;&qT z4Z0drBbHg-G#ueH1vVaEJFTw$U))8mlUjFz?!PDqNpcIqZ%B6$Ju$CzrK@_na@?na5LpJODS}`)`8j7i#>C z0RNEb>nnQ8v$qXrgh)-(=VVRFwj4 zZKH}5T4rlZ$PiI2z3_*{`av5A0jPJY!Y*RQ?XbKPZmNdwp6ufAH4m~1%r{gYeOJBR zai+gl7I{Z35P0Q7EoGmkkLGHe5rR^{bdxWyMiC1~&kI@I-bYJrdGv{=O7!p&kKxN3 ztOoyzWj_asX!zA>`fa~&>#$n@3{c@VVcl3(1m5=dCI-~1uR+4s;@87ozKCU|Z(EhE z7~Csbr}e|&-zPK~*W}WcKqB+rv-rNRzvqfY299AvP zA5u^Rs->xN6b@MzP_f(M+}|~RxUHs#zO%D772V@B$F;5<%Jx|0#Oh_?#%yrHfV>}I z!Lfe59_VCjJ!pEQOWyUr;CdyL z-RzERMQjU_j%}N!Av?++44uVMc#r_KCTZxxSZL>4`xbm)#)*?4I#nFDOZLv10s^{6 zAyo6zfA)w8n^jk|KBb4J;|Gbx9)grFflY-Nyl_v8_@}gizDNn(Y2l6TqM&aN(+9Qg zTBo#J4N$h%f!;K&2NqBlT~J6aqHGy6HI`Xn*)UV$w2>iLk~P=l)VTdah9Ab`z%}dg zxIvG$xPG=H0NRw|6_-~Bzh+BPv9&C;z)58?`7t~$HupdHcF!F5dirrGrn3d}wAHr! z^@&!aoW@3sENjl#i@LzRYOZ4b#v|Jk_Mo$-VYlgbE3LQVKniS1mH)uO`90X{bc~{1 z*%Wm4$E_2-W__`4`mDu;Ld(wv8e147=mMu!AKSC=mw*4n^8S>~fm9mJgf4~8t(bb> z^_3WSK>aAZ6lK3OZ#_7g@)?z1#pZ zoR2>rm%_enbG!+Y34#Jmal)V9@-s8li+_Le^~z8cxHeF5vR%p~{93TJv%YmeTB|@^ zc=}q4Gofbju_Z#%Iv9|44|pawNvh^mFGBA_KZ5C^rx-l~Ytqf4;%SxezE8%O)aJh& z>2it7b`epB=P&=s^y`mJMjMq&9Jvpdhn}6sFHk)q%d zE_RV6%-}?H)w7yAW9TA)&7XbMyu=N}tRA-JTl2iG6u8;@?;!BW;ykyof{i+alo zJu1v~ITow6y^)5crWdi)&;yNs0d)3*vN+aSszJ%`1`(%9X-Hi}3gH#iRg@{Svm?cP zM}T*)U{A8FTQ7b@oc$7vr_EeTIj6N%Cr}VI5VcfZk+@1UFc>zpJkm3S%cb<~=~`BV ztbyjzOPJuDkTJJ!hL^nLk}*=2EXd?->%+3NWrq&5a$%1G{r2~cLQT2W>8!pd$9G;K ziQIDUErsVk$XQPRm)pDFYVuLFlx&eiFlnoixT|jvAoB)ryM_}euaYFXrdKLqi|4AL zG`rnvWi4Qa>Wvo=;Y+t@ecMjl{#37K;?VkYdoSbT(2m}8!k~RT{yv0l8cPp{jtiXr z$7KAJAvM_g4ak}0Yo*q!sO%PN_CK)Pv>lC7xoB~vG1hs?Wv>^kpOBU0WV@$|oL!cE z1FV3%^4Pjr5Fqc)|Sv+upxx8BCM z9*cYQYi3jY(^pUL8`I|3rHf+5>sq98e!hkPsfNMQ1@y7Tnf4{F2p zx9AO&@zYO;WpCQUf4G@!d<{t43@&RHh2Ukg^D-8_;De`dc{hz?yPS_7BzU!x^P-tj zBWt_uk{g94M1uo_&0l?m1qh!Q>=dKy5cx zRa7mv(}`xYKJOm)h3s8goQ*XK1OT<#&Ozf35uTB^VD8m)Z6Bnlal5r-bkso}J^TcM zo)ZSc#2@`h0Si}lrnCFt67JFa*e&}2avKCL|IIk<$R2*5sILkv4P( zesTX_tP#NqXN#>Q{4oe!N=G{SZ_I#~%^kq5ilGc=Q63_5uRt!D^j$k=&$`Ha&bGlAjZ2&hWa=M};Cw|5onME2e;8le z)-hK+mgNbGw-4puLN6g_q5p6T?0XM^dMo810rSBSw7Rrl(jt2JNVBwhB0o3``lZ1y zBr`Dy8LdVilxv`X5b0N8#{#(y<2vQrLj;qv`XA#RZ+@Q~*aYa^UY~;#F>6BL>75+E zeH2(L#HhLeI=Mz1#%^96zY$Se;@N)biYOvM6H1p6-4LcvA=&GP()#?u=_WXgAoZl* z+bR{6BA52?12Rex)v?(LMRsKvf9{KzP<^4&NISV{2!a;wEhr&E)EloHqSR9%ezb)? zl9X;qQSTg@es%UevGs9-KQk6RqJ;Ui(v@S0=JpkXQVYgXlRKQcfFLT2A%*#c?7(b} zjki==Q^Y#Qf}ZVpFtF6<4SbGKkkU>I6wY*Ps*EAzemS5Z0r!-oD>~r!<<+c~fHK+{ z`u4nWcW&4!()0%2>r>@zr$F6$;5*IAuq5bc>cn-IEZ+B|hkO&NPeBi&47YiU-<$w0 zq-j9aGH~K;Y%0{D&e90RZ(J_@o*`(e0TgqWM zz>V1_2|7MMg_6zbeK`A2oW6>`dUuDIll*?4hKaK{^>2t!B*N9o7_!iC51?A=hss#S zTOD48mGM}}JkMLeB>f0zNw|zPj8Efyx1Qh?QyT7Bp*PsC1%+$kgboSqDR=rTEs%8X z-t2|68n3XC`A-sBYO9tXuQqE7{}pE3mRASQTvScN7(%JH0{M|k4t%rE7xh`qUf4A- zgEE3f#zcuMyMYyiu;w=#PFC-_W0rb;u#{l@E}K0uMy~Ec1MBz-KglT}I_AG%m9nb!XAkpoW-`_85Umy)5g0j(3(>`;o1;w;CKp zLKdGc@@LrE*Y6B#H>jMeTcD6nZx;FZw zZ?8nd;T;sv#~t>9Stu`V2=$pLBHrDq3VNw9{KZU-50LlNLK@?o*hLF?1Kjl3op`;u z=nFLXc(CuUKp%gcxwwBm08`iDki>51cyobB9Eypc5@0Uv%$x+m$P}vtzJ@yXv2Y(6 z%G|Dfw#*GyPhoZ)9Obc;u$h*k0~W zv)EW8ChYvHNP~Ws5(MQk4JSGnG!l*4I-odrw$8E;u9uTN)1sDTSK-9%H|jqRi1XpO z_RLbdR5?V7FZiM9a@_RLzrIa?o8u(&ct}&dJFEmRO#py=1J(LW)$S@B$xLi6T)SOw|;fa7Myzv z?MOZ*b$o!rCg?J9&v6SsP#m&goHWvlC%0`IUKT~X&=s1cU$O`0Ea`_f|aU@(<=bXW{`6+7W#cu@H9t zagx-Usc&&vez&!Mjqpdk+Ol(}Uo_B;A&JhUaOe-iG9|*Z<)SYRZ;!m{$5X=V;9Cl+ zs(#H}WR`823f+9`wmRKF;(;wyt*?b3@Y`H^;&@1GipUF_{Gb_RzIV!3$qMq++{iyr8Th+msVi*eA69cY1K|TmaXNA-rCXT%k z%$21aDiQY_-+BI`52BI$rv}FI)tg7-CaaD7_O`l9ngVYH9#Xu44ly2flHy-xuzEyCWC^6c-^K*QrZW zNG1PL`B#xfh_CD57q**Q+=Ty9EEolHUwT`)Z`SWJPvsxa-f8_iHO;AQOj^^?v$Pd6 zy~3pjahT&?UwB@2zW1)s8+UfK$SFAL~tHHx3whuvPyW4mh3w z`_Q5~nHOsoDT0sx@+N~J<-Y&TvqV4MCkgXgo^ntecjdoSopR%@?wkEfAuHDOIVHQe z|K0}d$IAWT3jC{=QJCD$*L3=%k#f)T)tT7R=nTHqn)i5$Q)sm)53ZV1w&{swK_X#n zpD3;2Eb$r)$CDg__L8tv=0-5U5hB))B~SI2(6`QM95phAkktAVs0hU305vOGT{|^t zH`?>)3!24y5TBnjRfAJG|J9jjj_JYwB?gujfD3QwPf@~K(A2Z4KynC|m! zMt!}`yx4=~u?@-#ab5-T?In;dGAUlGajcN(yFF%ypy(av6(B6-=d(A}}k7wcgUJ%c_TA&p~<@ZA~EU-mvx5S_ykM?O8{R|mH|RE75BR5QQ#CTpy{;f{(N zFpFjUOJ}EEwov(%eX6wm&~H5dD|PO&*VQvG&6Br6eo1I>i7L)sk`T?{8}`lQfCB2R z@nDF(51Rl?^;uv9K%Wz-qpmyIoZjoO+tGhY)P>lU7U1Rpv;b{^)mu_I7=1e%POI7M zneWYe`!E(sG!D4Pm@9XD2!jhItDw15w=Vl)ioN}tjFK(3~fxy=!h!`6@!cQuCP6#aH;{{dyV2@O1#ZX{Zl4pLmD z7*{Ip)`V*gV-QVaE+>|4R`><5Z1*;n%pfkb3AiZ1s39)5f5khONJ{XZ5dEj{AwE^i zj6G1{WVlyMNlC3!_Nyk^Z0DjKo$ha)xbx}7UO*rnNj8he_fyO?v!so#$d4^uhxAXf zZNG(a)^5wM7^{-xB|`JITdre*!q^0$>^GMLKm@oauH?5G^;l>0Hp)xxzomAmYTE02 z+c%CPd*0$Be%v~(u%mMywt>EgIlKPOZH{Q%Y5c6=;F0usNLUPph9Xez1H1>s1YOPG zz|s4D9}W5qUuupaM_2#&;|@Jl=mK~Bc0i~OYb643=Gzqz>i%czm6IJ}e-nj~`8ZFe zGWf#c?5=VP0hlqMCIlRJj0p>6ob8O5e(*AYuP~QI>C$d^Yi`)_a|r1LwH(~NZ9P?Y ze?ts^N2upq=Br??YX8%HZ%xopU$9Z$(sjX zPFNIynnhW{IRi^L#G9#+Ew!gHJ%T1dibisJk2~6dM4r$&WR1@Yh3+PZbrp7G519Z>UKXw(mZMT+M-ozzkggshV_x`b zthj%~?f*E&m2-P{17aTUsk&fyuduoa3w}G`Ii-fByRE*XlORaY&Ax;2q^Y}9DeUiq zyMK?>G}eX;GkTjbS%GZr z5T&~;Y#yW|>Ep#W|B^P_r=X1$4uFNPGyw?zjr2lT?F6>ZQaaY;=%~?w4R^35Z=yWu z?(pW}`Hbg{7^L5u3abb48R>Wz-8&e~ld& zG34mkg*Nsz8LkANRe$e1~y0OAYcFkLVXfFw#0X3 z=EB)RkCjS-zhk?;_Eww$ZWCeYf2AIt@_v0+O&5H%+nUcKQQZ*-D#Mj9~nh zx&c!=`cApy)!}O~mTV6{@dbum`*7{`e8wKXQ$qf(L_&%pEl%&9Hz4Ua`%w=5(|{Fe zG=KtAxRHvVR%isJiC+qS)RMDX`xiqORyFg!x&NkABWs5}rYfi3W6r|&5P*I>{#$0n zSspPdl-FAPCWDVqU+`hp5SJ)}U4;QxQ*A|gM$`7-D_HnBBw1Px+%y8Fr*ZBkK&P(5 zLO)g}sM)3#vqJr|zOLiUYMzC)Ip0^+BMHE(YMU_d9|WolPeKCgmx*JYTE6;S>Wa~2 z4x7~9yMFQiL85QHvJtCUi;sWX->6#j?bP;4-B$$B=t*-7v~dwa7d_l5=?cxUgm6Cd zaZr_|B^X5;{k6{%BEZY5G{tgIXaw~PMvhi$_PDnHbyno3v;_gj5-=Qm12)lz+O@kglm5{q;M_RZxMCq-* znMrLfk)rYkS^lo@-6`Sd+^FUeRw9NYH^+}naYE(H+Zh38KI`SA9vUIYM`w7n(({Fc z<0<5oW06nE*}@UB$5AV7a^dI2srSJRcWrClmn7EQdBmJ6?_NrBl@wo_%pe-;K3ph= zN1j@y%^Bw-|7I#-OsQL<1zRV2i1N8h%Jz zJwR0GxN$z5cL7T2`h@=Nn-d!(GsG9!?+6zh=pQ$E{l5S3TiBHQ1&Bvy(*8{} z3j>EOJw+p*2|#VfcRh@u)N+@NMx-@QrQhRg>Tr5cY}aHl3CA*moGLkK0}rdRVR=E^ z{#;gyR7l*RccCrEo*H}%3X|@5YPQ+FM>u|=k#sp-M{J+EGRGl7LH4Z8UIUZqJ%O1S$-a-TXZC__K^ zV}HQ($I)a#fHDGwtEVN4+}*Rszq5|ewZGZEuA5Iw2OpA6%g^thr!`g2lSe?v{V!Zs zZR|Oezz_e)(WIs7nejBn3Q;m~{el(T15QaA3slu+pDiHa->pWfN1C6rVtf%}cuYmO zgKLKj2iNqdxC5nzUkN5bWkY7QyW{~Jm`(yqq=456x~COUo&to>DhmwrE0T1u8eLBX zmGKaO;crc6pm6&VjM@?bZCAXTbba*pRUvkbglVZYwEkF8YfO`T(Y8Hj5McaI z|C{H>yx3qKlRMuy-lc?Sc1!2)CVr8jr{HCfqbxH-_?m>w0h)fl`U3oh{a{=<4u=GG zzB1dSG{rJNtgG}nPU<2q1UPrW{mUkc8)_`L7OAnol7dZB_a(SX@-|yK8Wwm(0F1NEm_aN1wVsURw>% zPcJ-K`1h9E5@B%#7Tn`q0}2)m8v1N;72R}2#~JeoV=z!u6nMx5Hh%7WcQf@>B}s}j zpX2a$CtQcsC3W?=6QyG8m#bS^7MwKolNJR0blaxwZnvS?S;Zd`$Td4sdlY4B=DpVj z;GB--4WcwwL>bZgwia+-FoH)nTd?9m$)`kWfURntsPevI9OkDUq}At_Fhr2*m>J<7 z|K^#22*1UDq{{(|XIx*ulqtAAdQ3OrRygED^IBKe*@i}bZ9_@AZve0qu;T?J2LZ}j zw%cP}y=TD%H^Z>GUW2*063o&E!US9==;FnvZpXFNHRbelmmD_~T)}7{w z&e;xBEsak%$=pypJ3t9=dtnbS!6w40@X`hEdjEiR%*$gfB`8X5t54B?{Y@k+{O-C( zyWn|kD&H^1e6{Z}+mjH!-{_d1n-62-&sj0eAIe`j`?O4m+Khn*F7;(ko`grc}wJs-Gcu{X=-q9>JtlE}duQ+wL-kpryH@ zy?9QcUQwlU%a{$3@vO{6uEg-;vQ6$i3UQK;nO(8qR*T1<;wvvr-5aev6Kzq@WY?yI z8CkJ-_v2o5#Cy<>1tkp7W+umyd18ce*OX=Fs(i}ooB^lb_(Z+B(#0c+peWSQ7vamb z`z_V8WZ6ITb0VsHVCX3uI!$aMYq+2H_VJv|H+xOae}8%g0Ho5T!|3N(fPIQlqqpY} zehINqo%!U~bwZHmWWWQHbG6yOu;gWGMqLHRHz7_bwPG8clq4AvuJY+yO|fZb!!O?8 zu}-gsTJ7>_YGOwb9ZP{7Y~E_-54t0uZ3t;;kkys%#n||9@a5P2V=teS?-R*n9l4LU zX`b4bjK#bVZd&U8y01tpmu%od$DMxAMMv9l&MoL=#mqz@UrVGR_l0_DR1(?*60e1Gde-2*c+IsqkdsUBQplCu zbAh}kVEU~E+wWc#ljwacB1;-}=6;qO#+T9U6+R*7gTqwax52TW8BT?9baXZbe&3!{KI_6)y4?e%W{LkWI2jCl?{Trz8L**uH#O^Q>E0F; zvZVDQPmj+y3P_#pP5&8F;btP7L{R3-N@^b&z}P6C*IselB-bHG;@9&O))tmx7<0R@ zq~8V%kqZ)eZcoE~O~sQ8B8+i&1Ue*r4H|9dY8S&zqWooS;5LT2)V0emG9SEr9t7AM z08Kh_ER&MkZz||l>!~yU@mi`?QQ4AitwkZp6F1DCU$U*G8x922-bf6%3pYrD#i2*< zwpz(G$kV;(&?c|bI?kVkWtK(xu`&B#;UTMoJn+{-FXYMJH&~sfC%3D^A2%%pYB~Fx zYFb@KR!L)a;xpqnrzd^@O_;-5c!|es9)R%NkQ;Y{;h&+Ck8^jTn&jZ}P=M)n>!7A9 zbI=`ms%#Cn4 zcD|SP<@REH*!8~greM*drUAx|97aK~i?nk84xe+fW zZ{VZUt^WcR{^_IyCA?BgZ6gdxVu5?G1|-aEz1&EUsaWP+cJ~=7?fk17Km5W&X3{&= zr6*juZl+Xa>izM!qk7^<2X1*30KepqIdjyV2i+e+zNXSxbK7Tpa}Fm~tK0+5Cmz|g zd=qVePKdNVx^>DVw^plZ?2M6Lxb`!8Ti#RkyDG;^w5l=4mTJ7GuF?>G>j?|lQi82< zNSi&Ar21!4wJGm%haIm3(&qHRaalgKQ+Zo*VUmdvO3d*r$tQiZdevGg?sUI{@hBMB z#c4dG%$ziRt^bWNf~3wy9fsIN_Xz#^hwnqZ)3n%{%nU9mIShVGJbF@_aV%R@{2`Bd zRRV1z;iLf8vnhQhV!*)}h_XFiU+=HG5zruPk-I(^EEW2+SP43iUg88Ktt+fn{a3`C zxH5^rzt^)}NibifBptLnWW>O$q<;o81Ytp^|JHO2c^)R9nQizz@=pua-L?WcDwzsk zqLYg1NS}l0EoS1SEwfU_n>3wtIkq4r(>>1vzP9Z)u* z7!cFZk(y94Ta9;@KGI}VuVTz%OclFRP84+NBUYBAN9)j18h-Dk(N_YxRc+#$@;E!G zk3>;{dx`$+A4-y+OCDz=U?O~&oq10pF2=@SEP`h*hn*uC*BdqRBV;NUWL%7GQwvf+ zy^@Jg8oV=aF&&>FIZfBUhPx!`mVdKBuW_kcOjuX6o{4h~GUS(Oc#=*IhjnUUK6V>q z3|r^NJ1i%lyLPs-RMaW{5i$=F!>FC4M0Pj0<<@G%muXC?eGi&&ai*KS|^#9Ba>V z1r&49PJmi&clkkAhrws5!q)&@Ng2>63rG~VPQPfM6P3_7JQhw!k2;x7`97!rb;o&f zj*N+5e^fk>D^vzYxcBT!!vc`_!+5f!_>XV3z@oz}r2l;7v?ybOOoLg1yQEm1p==et z8!M{V&DaVz@Xg1^2sOzN<|B~4p!Qqom;IvMJuhY^iq(pcg1vcJBD)9j$F|MVwyRM%Pf=l_jD+NyPHL%YE6 z$(-O5y>IX=Oj2(?JA*YBgFzC#Ok z9`8k0Tqim&9(eUu$uOl3X@wSOFmmcm0q`1mIA64Ve_<%3$nNID@10j(FXICMN0-)z_1h!Y(wFt@%rzn&KWkzAN|(aV{DA=J;-G z#?ZdfVo{uhmv0)tmnXPt7NlYVPN%)+Ps(HATs zB#a;EeCAVi=f9W$o`(OvXpJzf;CLh}-04ibR;6BeF3%HSpb7P|@BS;Ns&;?bSOo4F z4DlH!B~h1(AX80$!u6fC-}OET`Dlw`(|?}OMDd~ z>qFr8tnPYIjcmoZtVUn^-ei%&OQA5Tc=Z`Iz9m6b8v)SNDYgGI z&ufpuaQSeQ_2BtH5K)eKXd4pr>O-P(?zf3-LUZVNwLsusL-~7SqM_*WS%%V#M4_TG z{P&M5x)q1sQS4zgx}C=u@Q?t@YU*P&n!}ih@#Hx{2kRN*I*QhP*keYtJ=k?c?y9!B$5bcgrQql3d(MDOE& z$&4)a62X+@f)63w)4wmU=x5`h3F6ai?c0HhJ~iZLYXK!aa#)hyA>2 z|mZaulq=2%a+*w}~-#`f<0;rmBC$8kUReVyk83I8Vz z9h*!SORnHE+X=(t1767g6#NDfz8iGC>whkQKj)G}l@4r;Kv22N_b&h+TX2u|j7#Oj z(K3uiNL1XY*yk@SMq0V^nF^C4tY7F%Xkl1!XVbIhi9k&fR@zT?lM-aSH@RdqE*fzT z0x=nU5YhN`oe2_Me7X&Slwrh-emZTam}o^KV=~utowP0%qBQVdeF^BBD(JrsnqT=g z0Kw~8J^_6p*PaLgV@w0$mjgf4%j*&bCxW;?u04g`wLQC{3<iiFFlUUNQ@-0`3U0PTr^* zMu`6+{ji*^jscj}HzT-Ix^mFBSE+}Zet434IpXr-z;GbHM|<6Z$ud>QLOHm$q>Yj? zi=X^?XVKh5dmh63E6q?c-(MkM>f(9y>kJ)X*W=($$*zh%V_IowxHcM_Px=q^tBS~D z^CNokYN*qIzqTFLw@*J|W1E6Y93dEjFM7bVH;omm!&C=Z%kF zDZ!5^rmEV)HlD6O6Tr*st_e4;^fb1cMxb2+e*K7{dMXd+lY~LT*&%qoG(^LQ;xu2U zlX&3i8OG86!Vntf_USh9iF4*U|J`}Z=mVM)PeAs{D4WZ*4$7P zB%t)P&$2Kr04o8Xy;J`g@KPzWe`1T}m6IZ9MOy`GPfato?=$ik(>JsouPv<{^B1k$GpotiH# zAFc}^jX-(p!24l8(M&7@pUe|Pfm=;J8d^`&7M`y}lC2ikiklLO3&7s(v`TZM_wLvp z)BGvu*V#(5myOg0-#f?hZM~gOm)pbI4r6l2`c;x+BoKN zlf8pTUa5LIE_z>y*IP(5Wwu|3hR`D}LJe2Z{OO%LwF75itx_bm2;*V*L_d!<^U`113iZ?AUR2fo{~@G!O7S z8ry*a+L@ya1s~1tUwKIw=9Y$~W4(^vWXYd@p8Pzd41rg5Et!ZFn)0i|BZzsFQS{Ma z45FpX$A2OpdxJDya+vhWuRX!EMr)~=G60EB#(9=Cm{yUH#1~9tH^>Jf<0R6m#c}G< zi(K*ezx7%l*|KrLE}7Nbi?ghND_o~9`pZ1q-*}Q*Q`{_{6rWZ;i3So3-$FI8e&&NC zWaY{pZS>)b>-mE2`c_1^jB#|!C|63e+q*hQFKyk1RQ#UTkJI!M6}>*G=VmpY(8bq{tn;^1f`?7^Zc-BLmxn4n zI7ms3JW&2@wCq%Iun#b{=0FF4fUU|6)~D`fAdrMDf-%qb7}(_}O-Q%nk`;V~i0&E` znTDr*@a5IOZ9_&vz`~lLmNpX8``JG1kxEJD;}0!4K|3<0TVqBa%r23*zlrBZWH4U0 z5PQ(DoTHN$fb7YEFYgjdU<)3`W~2TCFZR=#A)q&Z+nJ$iP35--s`>pS@B(Z1_+$t{8(iqnGXFSA(Eez$U z(rAcMIv(%#M&j7W?q4q*k#Rn$E zuip+NtT*wwH#{;4u5GD8u}hZ<6@&20Q`j4GxWAW}!MyTY;KIYKaj~9lLj|ADb-{w> zXQV5^!qH%Z=(nxMKm85L9tLs3cFQNel6fR6KmK|2x@yy>gzqqyx%l2?3(eDsLCocG zdslQ2dcLqbO%Nc`$|v^)KCTKql8YQ&?l90WQGtlNjj$*dWc`kau){M=;cMhq|fFjQ_6$TE)+((=L zN}9jU#9gO~MwryIRsj`Atd^e}?`()lD^;B%s>2xr9u$3Ux0maqBQ-M>|74?_%Xg7K z!Rj9hvpde``3walaYgh+!5Q07qw5!{qQ@py4<7ToKiaHbesEVf#mwc)!Ha{sUwaYR zYil{4w$X?jszTm52%aZddax+>6ZVji-I*L2fukc8YS$2F;Fp7qW|#QMx9#UKh&WC@ z@b|j|WKkGzxI%6W_|)$N(vBy^<2S&=M}T&+nZ~}8nxXRO<)lH7nb=UnCA)@o7GYXG zo3mta!~WY5Dh@By(QrLSG!7x6di% zS9=>}2G(da?F-j0X5}QM<)9<2P^&l*D$0iYCMgnRBFhgP;FHiQ{{xc#7njIn&F46G z?iOCDCSZ+j2-Bt2p^J`aBdnQ2?1U{L4m?WeF)8Z<2czjUtR`T$m;{Z_29g z>0R-hEnP?RcHD}C;UCvlJW`!Q#=eH%5m;&(#~y)~Xxx)!XmTP*e;VXL8x+aO(;`p| z^Y7W=lRA)%A&Qg4Ci82P=5l54I9(e#7KD~f&prgcc-_0=Y$*(6kGR#%a+Hj=nMsHH z{nStbI?Mq~mcO0m3g4GMOW%!sg=~(F zHo*;$bSAPDVg*dJd-V~f&<4;QrUGPQ6G10(WzW(3hbT`A_0#Y>R2$q%MZMcYywII% z>aI2%Lsu?S5d6~Z&+thwjJ}cHCua1T#4KIVsE)J)J~nf3t4Di|CU2=n)FGexBvJ*U zcqjy-l@EC24Xf1KX1_uW^(#D5hrp2oIs)xY*_=Xl}7sic0DaxuVQ;Vj(H8jl6{ ztl@;=7&sO8d1Gy79NJS|g5yuZoY}H4{hxfL0oDiPGb?VB&s?rXwe~sbb+Sdvx96Mi zf7XvCdY<~>#8qEs6=adRIh)T#cly&iVqloGZYgq2DE$sBY(0R;w#HyO5m{Xi|j`ryzeJhFvObXi}zQ$^dkUa z8-=*j7t{_XJ~$Hv+WXY=obm2O&HfejylNDi~KEqaO>WLW#z~4D&S_4?L?|I7O zd9bOA>y97h8sWz}k$zJxC8agx00PU z=&q>}m9ckFl0H+8hHU7@QXQTDL?Q5QW~dH6U!?M-P2yvDhHyR=*S$jlFb&0tEg}In&YcQjdt18>ST2pa1*s+G_eQ z$i_(cvP~<#>q^Bp?-6%4Xz=QHw?E&1dQfBsGqE1{N7)PW@SLg91&af=IdJ<2o23%I z=B3MHDwg?zEY+b7?2pWuog5RCD;Ts$p6L=wk|sWaAE$aA+6Z*uB?%5v$opCbw9)s| zLe|cu36WL79#gea+kAOY86xuP@wbA8`P>mQkI<_463)vU;mhz}ev%wYe9GJV8DG zsI*WsdD7gNyjS4W75N&vocg7{z5xOXo$IkwyV2@+8uJ0z_5FJ|yr3t0HolQ8DNX*! z@UtBrYSwpRoJm))>Ui-&I|GfHtg}9}+AglmSHBzP+5p0(>?gKNG`pAQ!o9wA#@CUV?kk=n|xk;NAC7^On%cCA6GUg(8h74Mx zmW0D{fTc@BUs1k3M=8z#svN%Ei)~)D$!SRh)g|_VkdkQiW;lkt?N}oDiND=P-Idjx zkXC>GUNXXJwB{;*6!`ng08u+T37|1I=G#2R0wvra0A!Sc!<9r=?}l{$d_EW{5PB5< zwUrHoXWjP(om^Xc&*V*LNj~HwO;dHpPQq`eu13BY+nHVMI=pjOlsk;VH~8AK#p3E# z1Ayw~&8+%!P<)FVQz)NqdGfTyNTcPU!_)~5lQhDRYkp zC_%1KG3Srg*YlBCiN@6Rz58(IAeQR&A_FooBDOZM83P*b{nB%0neKaT#g$Y7rGmbH zHMCz_Yq+w?u72_rRDz6F4}2GfvaFfx80_zu;fIdvk1$FYLSXCbPQ#V%gzb)_Nq(}y zU3ZOC)Aq>!)bT44i|W`IwFgrG;@_%k*I%D4G6?l|eYRk%UGdM|8h^+cnFz~LymyV5 z5h^5j|4ieG`CvT0^v)hdx>x$4e6v^czfVQlAfgj#Fy_(pxneG?yXsOU8$@^>PX-We zw`wab$am3g+C&Uz4)|>7a*fvwKsEZ&?Ybqt9)qDXf}-cC5E22Loax}F)rj@7O7$(2 z?!By3nfztcBnGSUa1VZ)041(8iYs;m!`C^1Tiyg?|0l^IwgFc*BSY;i+Ru*Uh}%B( zpGlO&;XTgsH^=xdf>7^jmsz*4(_pfM?Wj~cXnBx z$yXh{O^XBq{@qVmy!3{Fe;!W@={=aK2j2UzP5%pMBJj0CeFX*AMz0*|e5> z0wrQ0n97T;j_W9N+s3LX;fTC8`{qy)IZ0K9riL!D!5uE5b9WPVf&!-Q=RVOjTSwBi z;k8~2s=sRnuy~C3mJ|d`StNjPSpD|gN1T; zzn|xTg~NK#smNy7NR@gBtcTMt3~%0kdbzV9%NPq6P)tbZzz0`C{C#mdv%>;Ao>|XF z9T!uW%f{;V^q70#wi`Y&^GyCG4UkW@$`FG>2r$|+R>cng%Ay@aip@1NWmZ1+gcN$V zGh=iq+^Iy7a|>y}@#KfqSDsgM>yr($WF&@~n1*KGhMF{vmm|Fakd5mo!~zM$Gew zn{T}s^aD5dq_;fJQ%))f`$5s3r1`G7tNu9Cv_YzL=G)n86=SkQN(esj_>Q{^f$Q0l zj$sILcM@Rv$kp*t$s4ktEp{iiV&b;eWR+O7^3?$9y^dc_N(V^%wbpl*ZmZW}s~61t zC)3`KlBcpmunVa)|J8NwWr3e`izfB^AQkzeKpWXQY){k@)2p5_!R@8GcPFT#3p_sS zU2P7<-pWbsgYLk%M&LUO#ycYKV59bKe8nkHyyH-9+I^Gtsekp|x9$Vh6x$K2JW4MH z?B97keW}HJL>CBgaJvcIuqZwH&v0t{zp6rmOjcJdt=5#U0gz%O;r5BPbli`~bn-B~x)jPcuX;Qa4p=fVKCY!AcXB)_9R@svcMQ3a+3Qf#anpAW6c zy`hp8b*Np5O#tA*6rhnIK0?8wYULw21)NewAS@DQyw=aryfmQb0zC~6F(8jHAmH%yD&YeYF3g2R$mBpYO8RPkdMs{f+{XJILUCPEi(lE9^uM}al?6z}`_pj_)mbUDDEc^i26 z^#|94ClCxrF#PNB6U=hBSP%DQzhg!rc^sg`bNY4$x@IgCJ_Sk>1Ce0sp47kZzXIY9 z|7!cT`@e6#M>bl%n(^E0X@sPdj`Wk)&2m9A|eG&Uv*S&;NUT2*W&tD|}H=7Wpy5$Op4C z;lrxxFPj050yU58a@~5snJrO;gF|XTcxBFwrycmk?zoNvu6Cu}Gr@DrqBwXLlharC zl1vBO)RIe=mBUAV+QtI_*stF9v3zwjExdyrp!b|Em z^Qi{xZ+SxKi*%CxJR`=belBN2@N*NRaj@ydsNK{UIK2gkP!gwG=z;sfD^oQzTA#La zO5vBp_e3}q=cE4-Kbqa{n-PV-zF=n@csZ2&dJ< zfPr0T)65}Y8PR7?#2yb`jv;P)6TsvSoOqenNdzgKy#1i7h!>dojt|V;PIc}Z;55sXdP=l9(^p|759HpLCBthH#}Aa`oZ`9GAO=*n{lX#bRAm^gh`ld{8~~gycM6iYEUB7zn&$9I}i%`)4W;V0V(Jht>^f zV!k8yO{{Cv1jw`yBk8d85UqHM5mK#FpJ3fnn2WQtrDy9`CEQO68Kxw??(_}4`m&iQ zn>(Hh5S=F6y#FT24V9j|Trq(4`!-UVkr>`Hu!LD=3vz0ks3PQsHSoStgeYXiK=vGzZpKaR8a6rQN!4etGo|kBLTOdJzt8YADqF*68=L zY+4i#i9+9$xs`EF*s$V5G6!#;J-EZDvfDh2F4xfkUa^ny{IpzpCqRC?vPY5~C+HEo zw2A<6CfR4qiAr<&J`>#S`=sNLi@g%rg=i@z|;p+JN}{J+d~3!bwR|1_p_WZ*zFg8JdY2H&$(=>qm|h~`0d88 zWfyZh%%J_j4Dq6hl=rxTCAnU4frH$_ytGsCU*D1mn`Z+sw9>F*#!002LkOF@J|RgG z&VYXmonzYG{uD{CvS4 z2zvgHZG^kGrEZme_YMX^>Jp5Ekly?SG)UqM2$JF;2kQZuO3HlZJBAWt5XB?QAtk6p z;PZBUYmLv}O4#vA`t8Ta9W!j|LYfuO*R{kX~Gkj&k=x{OR zgyuxc7eyW4QKwM~Y;XaJ4k9|Rj;;=@E%@FF)P+@9Wx#6|HcbPs9Er>v%et4vJrx)Y z3O+mlAgaHtAg>Nf|0Z2za?+B6+hfpony5lDAE$d(o?L1}N0%V|tJR#e1J<;%&1W}W z4sdoDCj#!=VGrjHHMfK~!Aastb2s_g)o|qjTPwpxh%bS!912Ze_R1@tsT?0hUX>l= z0g~f3qq>IyyT|fEsc3UU%%e9f@6tYuSbu!PUgly3^o}%#>ptxjwWfP1pM1AwR0`_Q z%ul*q5UsD$nLPe0@(4Nfp56?GD!KCH8Cq7Ut-*bUr}KB^_liJCg=aP&2w@$IA|4wz z09gyWU?8N!5TMlMU;(rK)zk;6jObF@{cH>4aH;$*7AvDf@#!;Um?R*(8&!b z5TAj!VC4&7_>dCm<;$(+T{TeoPk0>2{Bi?uVfbTXN!yb(S#~8f2){1p713Ty*{jc_ zRf2HseOZT8+!fPXa&@%N3i994vCh!EtP(;}!4)kKE%-$Ir&(6wqjxugE|6~v?;rNi z^h=ZRn^;Nzm0U~}M7eO*=BYA-tWFv8ZnP1qe?Ete!mwVw)ZOGc|2qNyR1{vBFqdt9 zt8xG7xKiWPD||`~g42zB1A?)^}Kb zHZN&k&5<=QopZ~J#!ma`OZ1?J|EfUB-SQyjl4>N4fd(x7L!Tv?k{Xl|Zi zj!2NPdK#Lr$aN7wpAeRyx5Er=tJ$^W!M|(Z|tTlIzdC>lf3BIlUt5Nq<^Tm~-|%FF_W;5qeHfl!yrS z9V6$z>|&Do^kuvZw?FH)k}b0zXk(QJeS<=)fX#LP&{-( zR1mXZ<8?!2fYl{@0Ezi8RS2-g=bTa3d*Q&5p}B_RA`OEM>K{D%u@0Na==gQGyV{eE z-kFU(OR^Kv7pt2ORs?Lq@qv7IXi2vKqKf33 zR~4e`{tcY0mG_o&UQI&*yPiUi5dRcXr0|&)XZQi&;?5gVlgjsGONiCF!slVgk!>pJ ztZJM|yhmK~(d5AOK36q1cB9m~^hW}b?T;y(@{Wy2Pli96zt0DS-1xLeo%g87+w+(p z>nEs|=n}0MPb;Eh_?gkGvf)rv3^I(x!*_Q~yK^$LoJi7p0jnH_?F3AMe?u6qKfACz zxBXJe>2EQe*q$tu`?_BD9)1(HV@WigmKpH)8qa8vN?apP0c^wh78>C_RjVEiq^C_M ziLc~F=qyRnDrNWFk00VNCHidqC;&lO-YJo^ilZH&&-2-nnG7s%+mw0h_s~!K*O8R3 zdXceMp|+2$u<*a4dybOy{rsWgc1HcLhxIs2qQ3&MoFc#~p7=ka}> zSXC^xPkO?8?qUqhJM_C!S!&(m8G3Jwc`Rc0Lv(=16$e0NUMq zg&0AcMq)4ca){?MH15c7r++038WzbRm^di@BInT7Q-|RVTyl#F$ zN#cH-@iNC$)^ouQ!q6}$)J3U?09q+e;jv%7R-)S-Tg~Fv-s)g$Za{wkkBTK+0U;hs zJXGJte6PM&iTX!8$oZr`sB{db{2cefDoJ1AZ*D#m-oYZdmG{q?_rL4IK4v0^_kBK= z-j#xDpZt3e8`$7C&CK}3T!m8lU>~eN6kQ*41SgS%V5hKZw=j)Y0#FP)dY2(Th|uUH z*sKv>v8vZVEx?Sto1+TzzFaFnv5g#17WrL9fQ9+6OXt`vpdPYF5qWs`#godJitEns zqdqueW_c6LUNyQ!6e)bV(zIh${I@c-qB98Qqq!2VR${EvJCyR!=6RF<@y{hl_Qyl2 zRdh>gWyr&rj-TmBVa~l0g-EWuk#WqPgx0ure2V|klh;4=KQV%yBZ<&=`Hd`3vbOwb zM`EK7C~{MW#PqMwf&TJ@9#J1^mA=^L?)=LLp?z4} zz^fRs$dnB19)LxSBwkz09b)2&L~W|Jf5_!{@4+(syl>;jtxMRO)@!;>_C* zf|Li*srkh>E${4jGP6<;xw<_rokHRO<7G2pVd?P#keF5p9sPK4xZ#+U7-rMwnLkG= zQp}}lGrZ!*cZq-z186@_t{%;RgXMksAD(?aQ)6-CqZ=`L_M!Oh1Io|y@hP=8=Z;nE6WMYM!8hA-?f{1$b8cd%+$!rUIY(C?#tyd?@}8%cbPu%fuV zHmJ?qK(RGCn^1^sz0*lppm$UUzNT_2bypgib!{*TbgoE-8kMliGrE|*OR;L`nD~#8B-YU(wWNs_(+5Un**Ep zff5*To$NlVS%x59R8Luue(S12jXGt_L*fDL?dgaseG8>+IdO-~L@F|zkWY>U^Dh1x z0rk7Qi)kd!8?2c~1Fy)kWslqI^)fQSdt)j@1z`Z2M)M41OCzTRx}ZKg!ot(XDZH5;arI>LD3nB^1q++cv|OT~`i z8ZoAX%GydeBvt!>ee56IT-VRx%(otrPQUJ(00XuH?IE}$Y?tClldCSub+=SuqEB+D zkt!~vrgb*u#_nbS1i$a3D{OkQhQ9C*_ovEATl&}ISmP<2KAlQ_-Grxw;okhm`w5qK z$_!LEkAFQ2I`dNsF(z*}iya2}T2Gyy!JHg6a?(VNYQ-;G6|4Wf_7F}vyw!Qmqj_bZ z4>QdG;vN z=^|&NU-I7b*sajdJc@(!q=!6FXSTadlX49Q)nc-2%~l9^p=1bvHRosomH4qXkdb@k zwK%z;z?zgB&4?-P8#|sLzsT z%{Y;tU%0KwHCb3~$ktLakPPO$8i3d~dkjW@-}c&{roA_Xy008E#BLYgH~|6E5d|T5 z1-=~Mav%F2rjId+NmKW#&3}4tNTnvK&2WU!&Nh^Zcj&P(k)yJceJO~@ zoS%KO6uItbmOcCzhD!{lYhWV4@#fZO*oy7o-8*q#kz1lxvw;y#OF@^7UpH9N5Gr9D zYX;BMkr2>|+2vZuzwSUhgC&IIbE^sZG9UEj@$y~S&z<4_c`&!!@pbI=$YmMMAVTzP z!hhUsnCf~c_FROUC;_J{ehp==1oXfm^pPqb?6%TBxJWN{YB}-$xNgnc47!yy?)4~9 zW6^M%8DbP(-}y*_8Fcpo(^}Ga9~-mB)pA8)~?JOV4olI{h0(@B+Q$xC5d~le-8b& zY#`>{j%RNi=Y+3Q8JeK8lqc~AWDpn6ABE0bo)xBW^l5+iByDp*_AG z{a+ch7yxnh2-*Dy0ou!wH}(i)Tdy_C+LlrjNC}H6oR&W~t|{>)!iqZ@y6F z{Z9uEMXfon-58Px??G!D5oo{xn_qE58U8r<{UL@3iFJ7md=6aaM45`lyZE<6eG8P0 zM+Mung>esC$yKLmsfO4+x7~jV3cjMTb@*iwBQd_KiT~bVMD7G_Fp-i#3Ag3VvwvgJ zeDa^SDwA}O33bLZdDOqk{PT2>}^ZuiwC z;D=h{g{AxG60UoTEx_=y8X}RY`67bD=rAHwZ~`vs`Cl9+)W^D#c=^|MK^l0IzPS41 z>RH|V-K#!>g^OjYfWDh6G?-KFP~=n8*#jfad4nU}&x-_VP)ifu|NZ2NXLv%`xe)Rm zaN2*^Is&#*_a^vh`05^UOnY*g&NH5O**!7oW}4H9xfyUZnHgZ~0K+~v_b!(td%2#s zA|rICEg_#ru(Op_*H7m-p+vt=$fN zl0Qxne}1|j#4)x@(su-^ZXsUZ&0`U>#&wsB4sdxCkP>pfg9q8I)PzY^z-%`J?NJ5B#wAUF*E2Sh8%o4VuZNg zhn+rNdZLtMTj=$|uiVd*tJpT=#8*~vliD`09q3=`vI~SPiE2whwhMl##D7H+MK?>c z9qx91xPZQD#cTSpLwZk5pbp&Wau1%yZ&}IM+_TuhJ}t1BDZ>aUr;y5D*_dLM_>Nhu zW{83uG!i$muzqsesr7=fVVV|SlyYf&jCFxqiSH+5-I=A@KglOh93TnIQ06WWwkHLi z`0(;_E#OI;>y-BS` zRm|I);;aH=hTh%rn;-wey*2XFe+YF-UJX&cX5d(H!3o{=vw*t1xcbYe_}x`48RXm( z2qznisI9=Rd#nlMm0S%6sVZoNE5d{J7WmoU2tT+%aICh?!;F{08 zghazF>D0pG24#JQ)Ma6K)cNP>Qr8}e3zM4XO&dkAwC6^+Tqz0GK((Yks9PR52Y)ee zaK?{9Fh z1OzF{6Z6zi=_B4F_4tM&(p6ufcX59*0K|pS-EFRos`0#BxB7L5LxZ5_UPTdAX^u+4 zk$9hZ+`{9j{Wzi@62z>L9lE~Nu3YmmKinE@mFXWlux76q1Ml#$2J zy~IT%@vm!(DmvUe<1z?0uks9UEt46=ExfsnMMi5nUL=8;h@pbhLh_fZRqa!_-VAAd zZ4kcH@p+K$r|y5suWeCLiF|VN$gz@cGdn9NDaOHVBs;=*wIW}drsdk;6KY3lo`2{AI5+U$BDWJUFm)aqj6;(x(Lbi7|Yf6yphgBoS@~ z@&3jP+jYo3-s7Jh6Ll86nw__T=~6!L{6`!G;#on#%J<>gaa>pc!8nirBEEOvD83b2DkFGe}n&vL_Vt7~BYWb7J?oTY5-bIK) zp$Wj)JV^Tv$30cGG-B}zio@Xc`g9iODv@tv5F<*T9f*EXNsILj(&5p#`)vj&LmKE@ zJYK=(vAM@6xoIfSeNoq*%i(xKmjsrk_OgAueO~k`*L~Z7e zG3nQs*XWS(`E4m7!$u$_u$@tYTjlC(IjL@S==w_alVmiyuJ(^(Bk{5D*_u!pd?>(} z^uz1f=n5YEtRF!919q7GvVTZ946bY&zn`pou#&sWCoFn+UqEnf?{`r&uIVIm^~=t0jOnZog6W`^$>?)m1L z2WWq_QHkKRuh>q}4<3bzfY;F?HpDLG%OYwa7>9-nN+Ul$mb z)}d>ObXR{(Il?cG)(n0iFAyZ)9h^xvS4GnJ9BiMuw#9}|PnZ4``H#`sEItn+NY_H$ zMv-g$J)?uqt%56~B=5pwGp^d|uO2)V^?gePPWIHo$*p{ z6+>TaHo3+CrpMqvE_U%n%+Vyhm-mR_ATK2a?1MwQ%*mg=@YteVRT%l&W=yGK4z;hMYLiI-d7jH45`uo~Q7q7}y zfK7gF5dWbfX3pw)gOG;zXTO37mt-de`NkO^)!O{6<{4L)>i%1|53+~T9A(i`akJ^c zVFDALp43U8v>D_o9SpxwQi_`DP?%B&Ku-1){GRrlX=HAikQD)Me2ovR&?D%ca(EBy zc=&6#_LtuIsY!%%sA6fY@p~ziWhoQ=OCt;>AmG}gWuKyRHw+T%Zbbhx{2bgE2x;5! zB)Z951iOh|T-)vNQ3|j7e*I<$-p-u(XT(}{B8#*cX%1cNXeg+HS=?>T`tI0~hTw>N zhzHIt z-wJuuWFu!DV+jd3l5|wjKaQ|98RQ;JOz;H4ncj#z+^U` zrh{^b3RJ;17r6k%*gQr2UScJ8CD{Z1z(^5DtkdW}FR`S0=iBIWdp-)hfq8OYqaLfU z1j)d>Q8r|9uSww}e2xa&1zfFBm|-k`-&=jWhFe5At#mxI%{ zxjnzZQw#Kz8CyxCor{W>(GN?%*p)0Xv_PMTs$O2ZtL9|Ug4sOdsva*IZz%yyz6G$* z;-;YwJo=@9yjDSv?qfC`PdR~rF{7Wd);QPDwHYZ!7!Y7Gm~U! zPTv^s34I*{I?#&xv?sFNk?XNy@n%dg#LZ~za)Xn18G{%qTRd_Op)?D{3rivId@I6w zWO>o~SO{H*=eR5;{Z(3$xo3UK!SZcP9P99=JicQ3&^^Dw^?L%;Fj+G>Xe>|_dx)<~~ZxS{*H1P97@Za9mlfgC*wjU)~yV?`)M#>TrI1Q(tWCw*OwNV6^i5qdA5vX?j-LrqYfo7yX$8s?i zB&WcgzHzMi`pM*atDU{M*6tg4=^GUi0(f9>GJ;sxPN-fqYe^WAM3x@MzT=A*ViVp~YzR!-_9svJmMlBU;YuI& zB7T*I{Ix8mee5wL*+JO8dUtdMBbwX!t(~x2fO~qFx(8f*9Neeg4#bHB=YUKSmdzEziS6~iVSC^u(*farDs5R(tY^Xw6_y%; z^E>>!^z6x7;=2R?S(xHg#>*bjZ>y12AMNW>=vUWb> z{bfD^cEU>vj`kl$t;6MidWc4%E?U$wc+7wgbwC7g>^gFH1o2o@d(9PE>al6T6J;pAt)TKLm zG5w}$NZ@v)%JyIY?_6iiObOg2t$}0#g|R3~p0~x^h4LjU-918XT5Vz;XmRa@&Ycu3 z)(0M;zK)$F*|@oUcs1eSgQp#Fq&9Ykc^C_x)1XTA82F*U+S-Oo?Gl)RDsMpc70trd zg3{VgqdG=0Xlem!%O1q5_Fj|y<8stHbqkYdB(dUj%{tB8qLLJj^v^mPDp^~H?Yw_~ zkM}I-*RTA&g+nbnt+uww4yo;%)&wz0L)F6@1q$e>4xDKg-+Bjx9RRI7H`SOGIGhxG zD$V_3JanT!yi%WTyM-NfD8m|uru{+MME}-aT@wny`_(~~bd+yN1DR4@833DS?Yqm-|<5+gF7u)C>4f?f}&Xc{@vbRpcB?YG2!*^m1M)UieMh zw~N)&APr53HF6MxBukt?E$KQC zB6A}^=jseIY#R|bC#fB9q)U-tfj;U+X^&&GiiY3hT${ym`!k$>pSFA(8+*`kFHK2q zAzFTtdV4^C+7<0JROnyM>u0C_Dqx*`=y-KKDM-PGzwiTFX!XdJu=tEBfkT!=(Tl@2 zz!_e0q8m8?nYo!t_k9D{N*svv7bn9Y-9Y^K|9x=S6m#G$rc(wM0aXw+(%A(J6C`6S z+jY@&Q3v8v$9>(}aL&d)Mz+jc8?^qi8FJ|+3TS_^d-=vx zKFR8FKAp!#ex_PL&W?_3Fw~_S;9jSiqaVR=65uVF2ImC3+dre!&uGe7NGn>-_jI%g zj1)1_#*OVA*!_CK(Ido zaR)cL>XJ5VK%w3MpW!cuVY9{^!l)JzJDwr6Wt#I@(nF-1rw-P0a_b2_`=<8rYuS%R zn@fUwb*pJhgylPNKPBuoI=lT3=wNYD@S8PXU>Ng(7z5dny=~6v-k$-tPIftYNyJ>U z?xgCCsQddaz=^zurlg+=_-(qqp4(*B$J19*IALzYuZaQ`@11i_r(kQ$$XLPN?V5ul ztIh)9K-#Qb2YiJJQQ=e?GR;ixB86K%-GlKjt=0`kRqn(XMeM=VLhc}^&#Nrh!uS!Z z%=x8p;9w~NqLaz$`v-5wrJWwMoZfd%!M#ExN&m;a5sYxy|6BkR&5lBpR{mTh@@O&V_ar;XKeAZ*~?F4PEGzjal z(F_R1QT?90Le7%LUCR^%S*B;lk?&Xf}{r(5{mwO-Y zdtT=}pA~+SSKH!J@e;dPI{T-7&!;Mo) zhWCtZ*wr{k8#RuE|LSgxnf`TL;vhKSL}Fe|-fQT_#Hv^@r}wor1OAm;t{17?V|QkK!+JqCehFni7@_sOh_S3HiwgNHRV6>J%EwIQdXB>rIBo^_yCT zUx(?^>NTtUQtkCi*6#=vlTx4KDH0{p%lDMb9ehT3K$6PS-39q>{<>NR zm;Q?W6vAX|ck2|BQDgYMp<*klK(QoAYGrbq4=m$~a^5f-DqP;d0LZwv)>vdBEqUwF z?B35U0^_!80O1I<#q$a!MkU*&>y`J=Xe70qdF45 zLGzB#Blk3N57~M-L{F*;N60obdO(5`~06DL?qHL$^kx= zZ&>@B(*8Qimsl>B)(;P+#*q84%;u=Ek}`aI!aucI3mFLhzspI#YoT0@i0}~-nO3_E zDiu&ZT^j5Nw_7~R0Uc8X{;+!2{NSTvIC|ETwaxem?A9u;`||VXmc*7E#)F&*ATbHv zj?(kR-LL>|!!}D=?QFPEMFY&xYl<>o-kl9bfhoN-f55_9j3*M>KMa%&U+A6Q==?T8*J;%dbIRf-;pYA&M@X;-D*1i z7wouNogBnKFJa&IvY1vA|Np5K0%Y}@FW<8GM&%{p(haA776W?f?_Mv${1}+&Q zwqiY{_>6{XZd(sSnX*69BnIb?zu+cD?|-WnbeUiUiP=Cb7RpQ7%e7+5?s6eMIPGjU zMc(O&B1N##BW-b~)1~Ec+1X2sfFAAk)10mHJw|})SYZD6SK$eyt{$9OJ5RosaMzLJ z@qN0pgrW5!b4zH;U{o#0Oxkph2JD)ao%=C$+BD)s}q-aJI zRv_?_7i8^a!G8}&9D*%hrhKzbbt~5$gZ}tty!?XPp?@Ohg+sdgud6Z$evIBSgEkXT zFr1qTb2_M+kCX*=cE4qSxQO0Am%3QRI=FZmSq1WSmxnWwXg9UZ0pewPh_EQq!vT$B zr>S6+p;SF961n^rFJk%>Kj-21{K4c)iIG$o^~lR*fyyIkfmj4G*VJ3y?UlA;T)-*a zp=(PXBLDCBos+S9)o-U49|Q;`3cK>Etz7xJ!nSU!y1itzR) zcpaG+%B%9lU;Vz;WQ^FyHr(GW*FsyJg463D9G~_TC+so+tAqkWkS-!KHj40C#{`l* z@5g&wi85gFTWcxhtDn3UdjRJ}c5X`dE&Yc1j-vS8=yex>-1SUo&?YGzuD55o#H zqu;vsdRpMw`G`-_89A+FfdAZcJ#8dhXy?z`q?WOEW2f^zGR>T^p?i$2tA|TIzp;O|ZwINSoEoHpO z^E$(+rz@ycjUiyXPQaOd?C_wNPj;M@oP$EzWCn~|6`|sxu74>Hp}A~W7KefshCT8b zZY3YJ-}z8ieFhH&N5sk1=sqV?ZB@rFo&V9j>vNdAyGs^Q74Y-L^v3&7USa)(Vqo1c z*5zUw$Za=yStsg^)izn$fK4x%YT71W=E>mxKY;sf4vwrkY(SY|Fjp_e{IVOMcoOc4 zBYBhHpj_^?LjFoa*>utBiIsMyQ@V}ACt~Wz&p*Z=u2;$4=%K9uhU=K}T6fqD3qnt6 z_Ex4S8z@F5T&vv?+}y$Pn2+97bMc2P!)8rU9w8Cxm-=O^ca2HiO^SPZ^kHQ^N3RZ3 zn+W1i7W+E(TVr>>r?uQoQ+&+)4>A`&%0+8##oi0TZ_aEC^L|Y{j6LF*@&GQ_?5jab zrX%chQIWK&3O!ckoBz6*12;xW2*!MMe)utN14?lyz_flV^mn2PeyuvTZ{Pz~mkkIT zr1h;iH3P;wql4n|Ul-NJdh5LF(CquRW$szN&1zH7&!q73bRHo4>4p z_O*+feaIKIZv$l?2Gf&nBNkyB^&~l@1^Q3dG@yj|SgBE~sQi*olYapT+1;qP(E>bwc?=sSAhQrrN8%ey; zNyxa1bNH2;zzrQCM0=>y?ZDv?KUsMKm%@$IezQbo_@!-LrzN8t3G=a3T@0a zB$-^g`m+gnEBCoI_3mL7Ge;chmf}$BJqKzRDc}&e3`-1tvp#zpbex7`E>-kQ&?V5D zkWlr)w}l|sG0r8O`?1v#OT6>NiuRwlNoE}v9m?EtsD539S1<-JyAHOvGW(MOqtivR zUB4Q;sFYMLIFAKT=UC1#c(OsEMdN4}N(^Zq&Z8jZFUuikG9>Ico@N`*let@10Tl(Y zbC$~O7v0(M5vm4Z+oCkt{#_J(M)qFM`u(zL!U213*Zz$$hVRCbb0cVg#W#mI6)wKqz$W>3pn>%45liDw^ETFqD7 z546xl)PqV8>K3nyXIzRANr|LDRv#!*t^i_!J?iea6g7O!@%edv&-;)sX=PAuebbj` zqEpWYQty;ciJrz*|Kr#seFjl)C~TS#4Ih^8k$!_A#CeVY@@!>jZ)W&*(%Tsr zj}x5JkSy%X3G|Zv3HdEXj6+p>{_qyd{MmjZ&}@cJp*ncyy`D~b>q7W5c~WvGCw9fM zNaFDRu#5~pGjbzF*2{1>A|n}^zn6s)%u+y$fIS8t{yUziuPEmB=+Wsbg3aB z7EG(0D^^&jBrb;}6|ftWg^pzVYVDc%nzm8BlQE}zQ|mCG>KU!47Otu}X*KH-1R`I= z)4z;tRejDuKHRN1*B1fL1VwgZ1>nmmpSO?Uj~`49|M#bIj)$#W9C*c>`Gehk?07k3 z(78ie-MDA#y(o2*M|;+BX}7$By<(i*_Xa##+seuG+HG=eH~@&fcYSN5-FIlu17Y*E z2_$t8*(BR_X4rhuvp+MTs9+YP{dyvo@iNGa-Mj0JtCoB-U%~-nIqt-xB?*}=> z!Q#P-xyS<}D9beLe4L>Zi=$P4<WAFo; z1Ik5R)Fjxf^$CpT&ueiU_YIUm`pf}vDZx(8A?rVxK4=Z%cKEL`0Jb!>PqtJYjIaDU zKhpWjZNCpjXWg}=86)5t8vLDqA>N$7%Sv93V{7^s47ba;MVFoI!dtYzOY4lLLHraP z{Y=_C2O5OG>}6~fQ);n(y!*!8gOq}HM&!ixtpb$Ui+17W2$zX+P@)YbqD7#Z7Uli@ zrBaXv_3QPT8-_iLxvgY&SSEYQfAa%5S=n{6$~%?4+)tzrzwZw zT9oli5B}_tx8nw}EAYME$%7l6^~*guhP7_*+|&J@9zd?Oovw*1$7qxG=RtGV6y%}b6qBb!V$-MA|P^@|a`8a$7bdCBCyi!vY_bmgYLMRl- zC%-38_HuR~B;;GTrED8rcYHy6*lTVa5=s}rBqW=k4$G%54}G`g`D$(!UGVeLts>`b zX&YhX&u!-8X@r_$1o}hKG^WKrW+{s6UTu_zk{_)}+9&ZZBNJcpnF>HJ+NF+zPVTLe zC`gtFHJvxE2sR`!ej2t$xyiSg@JRH|BE{jX_t8Q(xkFmFyo|;i9QMH#1m1AM)~i*d zTIk_OMO#hM`sjLjqTltyON}R#ZZvArA>`cua+RDPrn%e+5=P(<;Ah-3Vz4Lp4N&LH zxFthC3Pd#R>3@5}O64(uVZdIEBcGWk?Am*;&Z*F>usHRkvBd0*jQpX1?*)E^vjYY= zYkft|Zv{4_FmNj5&HkCEYsu$5J_r{A>k~PO_(1dJ=7$%DC%FOgM1$sU>8Zo<+Fu~p z*Q=UeemyYo&W}*W8z@1xM?C8KxauaW<-h`Pe60YT8g1atirF9wY4CVa97`{%{wv=; z+1u@n&6OWdOYmOgoto`9nd0RuKd&>1RD4LX^hNVT`OKcfM`ZyXMh-4fLu=X}QIxi>8fhws)z>zwT2V&}Dp=ov zjwy#+!j2DK(OvKeb9YW=MOyD` zHn>&8`!8^(u#|n@{FCd6DQuAQf@-&t->L#BaUzQUxV@5`cr*+w1yMhf)*=x zoV}dHfw3C!V@7Bp$F7vZWsJ)HjZfH!C*S(Kb*aS}>Lp!YXOK!kJ0i_y`faDq(0{xD z2nKPgCy!f>tS;~fHvM>m#5OGT3{UYbx{Fk>IQ7+)$Du0qsu}JQUG(tfXy{piOu5-Z zkz?7d-zLm-Kx4tYk?-DXIZ15C5PGD`+vJw90ZrWZxLXgDeIEVWy`@oi_L45W?ta$< zBh=UUHB$jU0?W}v{okg+(3ZlKg*x%X zHC`?fE9u5v?B)a`JCmh5_IysX;t>_gig{wKP81wYO9{SBx$nUv9T}2xaDa9k!ka?4 z&DbUi4gv@;bRiJWVL>8jdxUYU;8Pfn1~cVN`R_?Xi*sJGfqsoCbiK(uHypUK1>z!A zzcac|az+3kG3G|YIh~iHUwuMQs#il7Q@XDR(`(c~9Ou#QwU7A)c>#D{mj$BI^UsQB z7xL;e-g|u2fw^<$3=5!k}S?Xg7AhdpF^JUM^F zOR=@eQ?P3G^fD@hAATp$c>}y|;(kFo=|N_TZQM!K*wUvt|5;ABU))UOa{#8T8=p!D_~U8%ME>V2Irm^m$HnxvYMmNC$e1*MOmbXBYvJt*bW`1 zZl%R~Z_QFf%3Y7re)wrsQgiulGeY6N<00;VjPvB;e+PpC|KLiUb1}b z`5L?bC0VV^IW?ALoblV0#V?F57jW(KJ=;y%-;bb&k6> z!0N^Gqu>83e#7WZ`$k6l-^*%8ft&a@uz!c;G_D;OsdUPuZW_44LXBQ__Q(5^QL|z` zWp=nMwRRArI5a*G1PRzqnKU?jGy=MOA_knp2fEImd2qC8-M1(B+qU9O?5FO@g~`q@ ziUEPRl!rvLu5hd`=J|ojU?xJ=48cAEcC|Hf09TKV^Gf?R((Vw{{i)&#Swe1@dF_ z8bF7y|FPH!Ep$bKrghtD#m02`dBkvBzdsx(W*XooPL!RJ!_^jDZTs&a*I7Gb9M)hs z+C!(PgGdydXSb=V;dd#1YTSeYb~XavtesuF`G()j_UAli_Q-qbh5glUxc|&{6hQ3r ziu39m5)Z6t@7`?stYxs<7WY~pqtLi#@IPZcv(q0}=kfO9b4hyKeyJRERpi3jWuj3Nkcbl$TzOQTl|+a_wH&*%phVtk^V1ad--#iLN77V8e-0e?YT^! zf-HP+q75i=@h@uR7aS)VE_}KBaxahk+X!O%uYwB^P94otejug)@7Z3Smk0BMn*B6v zpMV354hSh?c~e8_r?@Ejo{6}9f-5|!J>mlv-R*u)`J4n;0UmEd++l+HQ;B>mZ~mNFY%`>JuCWKvbnPFLrOAxRE)+Xt}yt4YA&DG`lK z`7y57u`AO?yx_);#vn&)v1!MO&1;9o=l0aOqYy5ZZ z1?$>YqV;%#ds``o!_hVxyXpE4JEWHC@kz#hhZ=;tt3%0+z@_d?|A=NJD&79wGWo%P z(%wYTgS3r(0p#bZS{*x`8XR_0`thirMoGNqs4H`L`5)xT!q;>7s9dL4xF;iAC0TT1 zfP|s#-gv}OAEIj?N;S^BZe_oQ_h$_6gddG{ndaFJ z{3p4o5Z?DIu-fPK8|mU4dE{&pq&$9x}{~okfwzMlJ+Tjnua5nC<(Ge85&_ z`64SI==z}c8cueu@#f|oSyG^N3$Z*1>-~;V3o7|LKNe0MKe6>STsPbFOuZRb!R}zz zcFz@_i*lB(^B|J6rrT@Ya8V-vq)2Z8opKVK%SxV@4qOB$aU7e~1|>Mrq)Wa2dn^4Y zm8tFab)!=tG_x3jYhEmbe+(G`QT}dF#Ib_W=%M`wM5y2}$XWzOR+r=3xSscSDy1VS zDMimsiD~n%qigf;X+yE6@gt_V4=(f55_A4Rmnnmf8;gu<3acYF1ky+6-Zngk4|cA2 zgyChD{@&=f@4)6atG(O8+w0Nk_yQW>Y0+t2cJu`UT%6RxzSLN`UK+No{D8}$MLe%5Z7xd$z7+H zq_va|EGiLjYcUH9xi5511H5|1&kfa(>s0t#1^eMm5GKyaD+bCw4xax^0m9a%1R|Dx zEd1+sv_CkVrIy+^Txtd5L(1wNn=$)c>tu4w8r|#J3dQK0&F{aK#t1+sat2(mH(;1Q z=zOg*e?=Bf-e6@4YPMFKD-$^Q3b89UL9_R&L9YmcuLzdv53gQJm9)qglViHSw&l#z+UO)(6kwwhneyUv$=c z4&H zwY{VMxu?@_;7*V#@Hh=vZCQaooPCl(v||t{?w>40S2k&S{SArw1YqczbymV#lKXp8 zO;TC^Am-wvjQs0`V5sUl1pWa6(N9_h5cXaCl0X|bH7VOGLpBu|aOXcb^mQZ7+-+O+ zWwZi4gZ&cX_w_olH|F?d*Hb|E#Gy?T0);5%b}ajZwBJS>ncnpO_Q~0L=a0qLSy%}6 zKkc>Y?byWMqTL(ATr`x@r>T2un1M1cX%EEnEFjYmBdkmmS(^Cx>j7!31XiitqVsOB znK0ILnxm(VD?VS(^6KJ7L{&UuPOlF8B2Xc6>l@8>FfMw~Uvb2lCe{AqC!Ooh5t5rw z?6#CBZdJhUx)B7p}ImJCvuH2<%YgQ3N zo3;Os4HJxYYtnS|nqq`9$%vK@+m|f!u`nE@_!nRDk6{iE<4Lln_nH_&dUJLNe^ zL;DS3P(xnN@w+W))Rb{=^V2_Wgn*P`Oc{ynf1NPseSdg(lk&Cq$u16Z{C6B}4U>3=a)uaH0tg_D4~#r!ql5;4_VtN_)sb_o6B0(t)Ip)X7Ov6~Dq6e|Fw zpYm&PP(C)k9UHm7pwz`QsMse}gOYyTPDS!=-)-zNft-h!2S@euiZm86!15SCeRqgi zAkLdX*>8Wb!fFq$uU!IE!FYLRwmBJy)UGoQI=ueX`R!K!#1H?To*UY^Ik_oELCR`bWUXv9zn_v)e@D^=;u0Ms9Y|P7MD&>*TsBrGq4f5OL)4i# za<~Qos`b*53M0X?HI$NQ_)#qByNegESw(?*Z%Redvh~ZU7g0#cDI!|kO^U&R=LX*= zTG+}T_B%aW@NOrL+x2`Bh@`rX5OjKM>X*evOD7%q`z6eZQ`95xMZO+mvc%^?7s2=+ z!->Ust<%q(IyNmoj7YCjk~I&ry+cA|ZVL@7r9>(`^UeL`qbxT7^y2LSD}RQfMNO`c z#C=y1FC}eK%I}%m?JBhm3KObP#m0}uF*F}I1WFWN=XPH!e-FF!W+ep-7Dv!#0PjVC zT><#uJsSup`*_0S$2BCogeM{au9gl!9Zx)o1ml%hpa0lQN{4Ix+Vz0K0`Mz6?3avC z>ly^H6DRA1-NqUA$~IB@9Y~D1zN!^nS|QBkxz*K$P5IuM>yqotF(dxh8LY3k$P~GC zJNQa~_+Jv;ALsBCMv{41_o~bJr1kzKu<+UsY#7$3PuDaIX$ljg1TP?&c8dun`b6f+fPmOfc3*voorAuD8!)ALz z9zmE=$M(#ucTl0&f)2S$r7i%;8K-AK7e{pAhX6C}_7JKR!Q>=*E zI>zmtr1{dOf&z64lKZJ(FOABJ;)6a+3FP~I1>%;DVV~|x*b@YHBXHT8xY8#0=_2|4#`FMq=gy>8??~k+8Sri<=(^<)lp~ z(x7CwP&6=LW~EkW(uA;#Ip)W4GFVCdNL+Q3??o6xP~>Ize#cgUbMRg&d~VEgZ>@8D zV(L#8Bhc`&8jhMSpM1rQNcvVm<^fNn(c$ZFC-Z^v6>d@A48ne63-!K&@ezQI0NjcM zIm4fR4GVL52{XdHDj*+Mi0hq&PoJWMUGxj7HFZVAh2mzd*24onvm)(=CwVs;vtHb! z8(Nivy(f5J`3QNSY_l+kQvB7(G}iQ}XWJw{Rh!dbV;UeCP(eyS67`9(AOJmjvm&>$ zlAFXdqog{#Zg&OlxK}*-bZC9|lgrsqFXM(dbfl$&EaITOcg2A1wRA9|>s;nH7B-A;3h7$0;GOCM$ke znTned0rm$g0EK;N zDLIeIf4j~~dU|lsmuP;r(3G|gn)sT}*`Ie{1`H*kkBYZo{Da0SjiJl}@#nQ4HCTB1 z*ev>vS@?e*4;J6$pUL4-F`U>sXSMh%;F!^83$qK*nu*H!Spn#m2K?M`f4VidAc z964PLdw}u+G{J)IihQ#->zC5Cz&0Sm4}6}{*YPi3uh?S!^rTi>QJdLk4=~-7{QmA} z4usypjbj8c)}WgdJTLz({aR44rW)!b=(}?l55%NpA?+XY-4xE%MgFjYyi~y_UIw_H z5f;U*%QgQZ#-w8p;=|WtO{BNd)`}++rUNwaSKbG&Uq?iAq6rm37QfK3Hf8u1>9F_H zlYwaAtw6VV1n%)D_54O9xasz%W13G#^IPnDh4W)$^XK&(Ev6=yoqx86hIr{(YcPjqnS0dIglTK*jWdpr!eLkr;J&p5gns&Hb zc`F#s{4_L?{o>36d(v#65)*xDXY-LoHT7<3=vBza)TTL!wa1d^=By(Cz%w;b;g1@kCc95U9Rn zzI~K%GFGB(eMqj~a2Qcv3U@wx$6heU2BCF-EJyNxnruGA;cvtJbL!tlfVM=#lN{#) z4NK}~@~oVa?IvH+2w=%!tB7+bc0Ee*R-HnwFCL5!!f)jKj##!_aB*J>ygA}LGXF%f zm=XTk={<~2?$JeLLi3HD@^Wr|%hso?!~gVcGA7=`l1|sItgZ>L3yXP8Nc+#4J6iXJ zsWA!cj3s*FHLRd{5VSdvK@CW8t@5YDi$txkKc5|{c6a>2`X01E~3MgRA3_ws31vt+DENJiEr8BW+} zv%`C)s0`sD&%b}}b6{5l48Ko^Zh%fS(lKeqLBrgy2^mt-T+2y*@(<3}+>2{?xG5DM zl;?E3zf_IlZYqD41VTr(;C)6-CQ6#s=#KRpn;D{z{zg3BuOx4NyF|>LU?^S$VXN>- zdX?KJMwNO6QJuj&m!|{tYVcod>XJWAmk%Qd<1UH3e z3yX0ru`B%}3b)_}wFbrGL}5hZ($ThKeV%>Ausf!PTlF-bto&kBN>u&Fn+@jK8Q`Bi zh>v(+Z<>M%m*Z3Mea=a?vKn_$s@RqKUf<~$?;eKRnQ9HnZ0sFa!>-JBuk4G?m90Ps zmS#h0s9c7=;?ab+m&LOS*PfgHK)>ZZrKfM|tgJ*70C&1t$SWOFxaPeaQZiW4^Ka8M zTEJtc2DL{C(F|^j5%Iss5ZM?>WSS1XfMRl7_RwT)BF8rWuaxl8t_;SO<7o*N-Q3X} zfEytr(d6EQpers`Lna?0+fgJ!GyPDmUu?q7{{@3EzvX(I)H{W9kwO+fW++hAtP7$`Y@-OyKm|JCJij8#Te4JE&w3oa+S1`XXN4^!2|7Wsq?~-;?vr=a7N|`_E-FE zEPE&={pK8g?mQ4v2GXJ{W&?+FOUA$Vj_rBh=H_%mg{v8p6!%D*2z3>!G*rJqni7A8z;wiCOhVZt;3!|9xfM-^RWFyi{)#7W_zr{q67dT1+DxI{BvNk%ok zo@Dd!DU`@dQZ}=Lr0kY3d;f{0EX&*+^g&uWFP%PCZJ1PlQ@G**JQmp`#Wh3Tu>ZwN zsXigqr9eOo7g?vBcP8B|Z22-m{hIlvsc-6xW4$@6{Fs z=eX>H3uwH*eUQjtLAm1cgY83?^BG#+@(*~RibD}UXfAp4(F4PvNukrBruIW22l-~v zd>6Bg56qE?YpbrcT%KPP%7Xz%WWjA;2O_ zzy0!a)Wkby1BaVnMdzVNz(TRWN9GO2E%WjB_8W|TxL|G(fjY<^1qm;4#Ci9(1a7}F z$qz(1QUUpOICJ_7R52-pMh6<93VAyj89U9(pc}4&nT?H~c#cy@ECDB_5||$G_#1L` z`{>zqRgXjx2+a!sQehS<8!*+oyt-=ESJU)=Xv_l{H-662Zj_NQfAV`Kmg?J*xPjXB z6ga{9RaE#UMt=Upy$J%3zq4<&r))&V=vd268jsvXDONCeRcq6{4k%0v>&7}vVvY8G zrvWEdqe^V9rEqzoiG%Z|1Rx}OsCtJL^u5-b8f}V4!P8EjDSpd-3-D_i`C4;P4pR7p zt4KrKxV^f#xB5dO!e>_%~x1xshps8f^f6`A1 zTP$J76FV&k@?A=>+lptg7~$S$;Mrzq?RJ+=nzCZ3rZwAtv>S7GQWA2m?tIcvk>WT_{TrDw+JD;PtZ$m!g7EYLiyx-oe z=3)h5oijW@*_^?OEaK!N=h~;WDdL9rviT=0aeU0oy-&fDO_Ol-!vOWFDpK-4KFHR6 z#Z;%K5Gn9ablk@?hF=p6Y7>TYFT~+}PG80Xu(hE6>)zt_H-B~&Q+&dPbeu=0McUr} z$ukJY2TB!Y+&+Ngh*a8R=j(J!rBt=cGIHTVi}xyHn9Iy#=yQj4-)8NxnMl?pP*%%| zCnc?1o9QvN`z4`zQ^r)`jb>JMRUX5=4y=zpl*Uq|TGZ17gu7oSa4_ql=LyWZB&{%i zV0|rDaygdKrEc*zDj6o8^W_nDyQ$uDBgKFd0SXY#{ZTDJ6M9loK!q~=z7T=Hx?dzh zm_#@H2s=}R>?8pu?3l+Ru5X&tVo<_0$cK>>7y$n|x=*F`Dr3SzeP0ZZ z(@N7Pw6(s}73u7Bz4l9;AC5kvUueD~vDG4!vZ5c9r^O)KN zAn0{r2(q$0=p2>DdGg_mOv-IT13Ev9cFsJx*$*fFb%#aw)XnVQbO#S=zy~*MhwY)jvcFvf|jPcZ%$FHf|o0N5lk7(0qZrGNHD?@@na2O-F zV>$x}+&H0tgn%LGbn4O&Iek@S^><|WIsoyx?#{11JnqKlIOm{_w_bl+G$A9IrUsiWgU3vh@d+TIWa}S(L+8$>>$^$Frv*N4q^1ZC^ zTY}4;1P?jawj$Z$KYzu&lub|2mcQ*gAz%sf5FWbJik5d^cI>>!ocPMp->1T>6PXZWh<7+ z%lLTajSwXwY5XvA+tCL28YY&^W7y~kWI-vjbHMYf(i zQ{4-7L=Wk$pbzGoefNMPmn2F+7QS6!lAID!LXO=$+YD6Z#G#1{Aid<-D_a9`xXMx4QI$7Q$r6eMcVaGxt!(Uv8QJcVl(dBX#_m%**6G=*M4z9ptE3%c=4X~fj?BfrFRI7fQ zXC2rX^LVjAySbJh!Ogh|z`L{ky^lH73F*n(7a4ot@Gq$z?+T_d!*d!u0<6YO$dawkN;1(go^0Fo2ffdmob*hx#)5N$(+N_T9 zKm`A&y^7Y+Mr|QqKG?I>KlaGw^6!7jCLx>aKWTfTMZ36kpq6p9jgGvsELP!AB#BF!)?Z6 ziHwYt!-vz0%dgb$6zDmHY>2`K`Y2sLjrfoDlSGkoVWq18JP^@X@DqX4?%`N@)bL*)5)V`W5u-@Ws6>w8h~w@iDAk~=Y&Dj+al}|F=3<~6 zf5izR$#$rhj`sE5YMGAnZt0Qg$#72BOt&JVl(LXYk@G&`kEZussaRJS3pms3_^lua zk}O7D5EdQN=0z1Vsu`En&P$sVZ&Z~ zuik`VN|eO&Db7)6YtB{?Ouh_2NaXCku*)j)jev!p7~a3(Z>g5I~{f4I?|d7 zWt>u6pM}H+J{Mc+8R=B~J%i?J(msew+X@XuD>f-qNv@B;`t{?upw5a#2Q_3xRbIo3 zL&y+sPi#q++PvA&MX2dwTX%6o>s$A%O-J@s&I+TIKDcwY-Si#JpyMnyE+d;ImUVjf z7oV~-0eXpPrfEzl}FPi=k8FEdXH|ARpw5J_+V_9vTtP#b35y z-F`r>nXm_b8S!_)(Z4xgP0`q3MV8oLJ%FFZNS#<$E#k3D%SIzeG&J5gk%ZZ4tbBcc z{S3a+vP(i!LVda6u=R2hX;_g`RLg5w6VX;eBB2!JyhFMNhj+7P^L>PcTAzebQG`=E zIGl~XzW5!1sf_+_>yi_%0bITNZ4#FlEbvKZsM~aq;m+o@z*@iM(bJdOdH0yZ>(|HW z{O{iqMm~`4u4hZ^5zxr>g<)URP_!;*&2~`4QPBNIG!5y~4Y@KHkOxO0^{TyqSZ&ri zh+m`#w!eUO*k2Nl6L4vpAP&X!U^Wf}(}Kz%>@{ge!}^~(-@!m_;;lID43G(S zmMc7-3+4RkO_d4+Gx5f#R-6^Sgg?BWo+#}z_!hmUY6y}~Bb|gE?`~)Ncj*lF zxm~F{8QZkI#ynizt0&GOr3J(}{8!NjeJFxG+nTDl{j&V%&?{!Y}a4 z-k=?%dL%~3X|3!Ujizd0W49PgiW@dx&<&#sMhU;gwznSSmAL~oaagI^4iJ_vZf^ZZ zsR0fNiWz>Db3GTbD&9y4I5pbR11{945~N_e8*j5t?oZva8-QS^LzL=H(f5#6=K}I2 ztzfJQ5;F7qR&6kT+_XISl_s1wWe`W!56|(zm_*%I@9z`)h5E=Nkn#DVYOdSj>~#@xg1do>VbZ3I&YPiX=G zsF3stE0q~1#!aADQwS@(`{X?%sFXa~U?8wU)0t)5N)?%+FT3YI9uz<^C?oak4+>pK zta-`Z!I7VJ6sgs_`A%m877UL*aw2|-BgADd8Ie@6qVTI&um?2X=y#4@YlUDj zNdUPKY@qT<86Qy2H?f){XVWtPDqj4Mk2STiQn>SRX5NzXpVV`uOR2Mv(A9vXiL9gKK&|P}GAM=|0^Aas_|a1xvpUdfwD!d|-FEB;lV|Fpu7>qR}qU$cKyILbUUp>{m5#j-_t zX!@`9!3)7e?1)FmT>xHZZ1KO560#`|moyt<&P5o}n_P8n=y)8xj+z&~H6iw$M+fzA zd(4!_%^U~?;a1v`KQX)tRl2PipwR<5lp}Rh*S7BtkZ4Hwp`uPKg^p9sdqtj zL(-LK9GOj7v+8(m3c*Kv`eXHq{Pw%}K6nY2SLxk3=<2rn;toGa&HB?Xqy0yveNuMd z`0^}zC`rQ*sAA`mNlEUT`BV8wF?3=$Ofh2<1@J--CF9(bjP4w8-39tdO=lK6;Zhtr zc+$o-)Nbzq&C^Or!x( z8A*)EpHX`0UDyRat$#0i{`QqD`Zv;4ix4$&O_J3OxABRpnF~06X=-K{Wc;)(bbR^K zzl}s1h+jIw9~_r}u_}l4+IBC)hNh;9V~$%S)6F;~iUV=&{M4g>9+@bf!G?uf*(^w0 zhGN=>#};(&jw>mE;1q$5z-7^^DCpeZ+tMPPDy!4&pMTmERlA_#U~|M#0S#tZPD$qz z6BrvLt@%(Y1&05;su^M?G7)l&p|KS?6w&Etwkz7{N^7Ti>3scv6`hGc6aF8^UBx#_ zCCa&!tCF))WGh1CsN99g8Oa>EXH#TuIYx+8lB-C`S(|(A$z6`wm}_E(W7Ce`exJYL z^LTtd@AvC?uC}?z!xkmbYed%L7^70p18+^m_q(UM#nKW%-OT>n+Bb+l zSqH8|`QAur+(M-);uX>tGc|kis&JCVLCiFTcIM*wLY%(W#b3b1A(PkVD65)K756nZ zU!1QDD_T(#ojel4xaZ=|lnA2wdcIZqO_-UrL~QZFOjIuJ=a4CWL+<4QMr#Lb=G>r} za}UK&8?CNGz1K^f!ekRokg5?WhAa*EQLe@kU$}BRBle zl~PIZkT17oV7f;I@M%24qOn&T#%ZhjPw0jl$xH3&1x5sALWow&=#7V%$|iVNEQO5p z4LqBiwQ&839J^6njLC@)M&JB)*hQr1dF<4ckKyN~1foa7T)D+A&o$9&94Y+h*=~x@ z%Hks#N{-F*wd0&ON;QE|2u(KiE8yby>4YE5&N$D|BXF_KlYo55o*(+2bx2|I4LB~^ z?5FKhc*p7S1e)v6Uy3V~x&nX&>BuW0ARwK5fJL9vPRPjbRbE|Ra*&*Ts-Ylh8sI^X zr9a8Sjk^6c^+DjZt=6CSeiMAPb}$oR6K{YWK2Q-qOU-;B4YhktnZHXPgXvpBeN^)^5%}xrU_rdc%d33*q;Y20HZM&X0bm zJO(=|)FlC&4kyHGrYO&qQ%GkcSR^c`9UIE@a&8g&rXT?Mm70nBFOpIC4Ila78t!Lrq{E!Q#_v*6R__?`ZP-ZeUz8`VfE{dGtsw#QMg;-0?0H%LxEK6Nt`L@w4?%v%Y=A~fpKd# zF@^&oS2_Jc#&&4l{aSvq-Yq({;}!Vx^8NV;pkgF#kiD8YREuKq*yTFv_#>$uRW=pU zjs6ku^j~5Z2{|^MN+M$%cg{<&9V`Gw60eyyf>9JT0q{M?J44f}8|zzX2BOWQU#jjZ zB|5_0pjSU-kG*~F#e#VC+6^e^FkE`V45_yi3TkvcnDI|#e4*6e*=pr$npT26OV;; zGS?{NSCyn1Zh!e;`expBc6$a~E;o63zh|YEaX{ixwL5FU_#t}BhAE>7bSv29=Dj6t z#O$Y|?9BgL2aqJR{Z~TWnY*W5sv;Rr4=TSMHuwnM;ST5jsN-2%ddJWIu+8{Bk$6S^ z5_Y#~rQQcf)|MCnZ{8HVUtRBU*uDLrdr@Skvl<@YL9;w=DwlVJ#;CqnPrzc2NtsoP zH=GQacFI{CS`dc6i8?w`Z2B3h_r=R=Z7eD8Umwa?I^W0M(72{;AX9NroIOx$J-avr z3D}0M39HmE%>&R&Mc|d$V{B3QMxV$WQPtcb`ZMSJ7MmfF18xNsRAHPfp3b*p7&*Ro zMN}7QMXfURQxwV$TNL>GLRc?+i3~Smjo99t80Ffn=MMKZ?9VnWTd&dYhy66ayIFY) z+=%5P4WG-Q<=}k^1N;BAtI|${GL#rSkb4uTFedDTJp78JN;b}Xy?!$ z_8rsf9Kt?ghHm#EMGY=|eHL8EIYn*925V#!w_+K(KezLZrq>}Svl%M|e_ z+2yZ3ak4Z&d?KjQzauYB0|ef0?|ty<4moc5Tf|7N(zpN9SdDl8@N!qF90VGQ8|yzK zd5hPFE@AOHJZ|{*q-aV$)O3-j2}|31_uf75-w$4bQpzvzCbi4iMtC^7Cn=>Gy!^#G z4^aK8RPL=auT;#@St{gdl%cUWXl^4!VG*@5_VMXn?=@RJ$zl=xNH4wcovlDccc#*8 zb=#*nMKzMh(w=y?!DqN7uR^Wp8S7;63ZEIv+S6(ZO{IQ8DV^D}jwueTTtE$N;LufxV^OO+#+psO~ocX-5I93%G6mctSgcFPGgxBzwLYI5NM1w_~nX{A%- zQ~=hgA4ezp@&>B)N8%dXPMo`!EA+VX8YxrY?LyLm5k|R7Q;J&c%a8+He}}Y*d+7ot z3jm=ZNO5QRf+MK_3&U9h!ZqQu;(&A7wl}{Fe^n91bm|caHnK^A4akvWjmIw- zR>sehuo(GwESIH_SFPuRA`b^K7W5VJZ6cUi4e!X-WiK9hBCHFF|Gk=*bQOK?{Dr{p#W(XqZOk*8qrS>u z=a;5ZQ9DH_5r&de032c*a?-p7T6f`b9elxdonok5a6mu#RJd4)vgSlZ`Td=nHyxP6 z*_#KuQqrJ9kiH}ES)RHw@yeYEJ7g!A+;4LN%5mv9^=Z?Qv+d7V7Q-ABzB_zFrRR$XL;n*&xnB?%ty0QwqX8=6`=H97Add5 zgEhoA+cZXOo_Rr4E#}}EZGF>C2PRo{4Zu~+J1M_6 z+B|+8Jhpp248{tsGq3Y>pI)@V>; zn&kyfS7nZdJPeDd1v%9~SaTIr=2<`o!O@uM!(F0RBCM#=>0R=5Nm;rzvuj5^YidNF zR``BOU+00>{Eb!e!mcB5>#Gp68Od{|L5Z^aqVUT<8SabV_M>tJuJE)WP7dbDL1ONc zVrhMivCHag8PMlW$Tz(z4(CqBszunvuvkSD?%TVrM2XFYhbQI!`?&Yd(^WH7>d)!< z{nN-d#(qJd$V1mT9cFja#ZgNe&LIl$?+Nu#BM8v!;>SfU5iv=uhBI!-aZ>>^(A&U$ zHh&XKymV0>zYo?0R)&CSuY~j#cxv) zI9T@!Jw=tz?c=Szwvt53?o_uPjImq+t2~L48}ewuEXCV%0ZgRBE|^l}vZI2)d7pXt z9%rO;7gnwd%f3oGaOd1+fcc5Zrpv-tC#><20gn{Or+$3Vv9rF|j1_?Aeg#6WO!RUd z>+nUWHMda35L=2@S%G)_nl!mh|FWTrHisA%6RK}J9SMXYVkR`s?l1D*oumUChlgSr z87&u&&8+F6UA5d9`kmOKK4Fxd^77`nwmOcJN2~vKy6J}4bbl4Q!#8;XVdJMp1;!H= zlbbX&P^%=tQ4^8*7-?N+G<}NRJyp>=+Yxm8r}NQ1cdRf-kaajIMtE*W9u%mj1bZCV58=2k zE_ORNGYs`vC#>wgbSV_ZlOPO&UMj~%5e<1LsXu|*=|qfOymXIPRHu7kQn?H?J*Fo6 zmF2{h2I}8NlEo4;4THSQ}dFv3UkI?<)NqdlxK@_#9ti2PrKLi%2 zaO*zEQiWN>(O=fO{uF#=(YIAyJrwNVslH3hQFi<*pKE7?MU1TBV%)U$E=R=V#n_m; z$i7*Vo}QqVOJ&#Mqk0TY7cUxfzg6OyLa*}UQc+A{e2C*w$h}KiFY)>QB#VSZ0wrgG z;>i+3J!SO(9#C%Qsi1E0A@JdR1W^P17T2A|*;3Fq=H1s52*~M|OZ(}ydlZ}ZUZn!` z5F5&xsid-4*m*Dz*lieL8WJg{6>kIlYlr4|@DMluPQzK2;5~`H8=nWtH&5}3OYWSj zXc4BFp+z&`D-p&{s;a*Z=rnB`IFBnk*MjD0FDg4@aQrdWGAYjj9$1Xu#pNiawx%+) z72r+Tv>&Yk$i)z9x(hlQ#QY&iLNk$Yy8Sn(l3m!Q(sqC6`s=g>beQXeXvB+Hbrdoc zyhm8{^D5Oj=PN^d=DrcE*LJDq&uc=fKJI(oYW`r{fJ=>s2MR9uZlp^l4#0C(w0qF<3R$nCK;ldd{ zlP=_V)gQ@d$EF&IRls|+6<}&70V>5YYmGBL32tu#`!&IjD+D-&05g~7bGQ$KOJfDc zz8}HR6%D6Wr-G<6Uwokb@(9NkYE%+;wik0!TSQdQ#MhSg8)WcVvb-kZgMR+EvtTx1 z=rU{5g=y$Us(m=sX>%UkT1^6TY(_HB6u~&HRp5ma;R4gfg9}kWj_h{A;>E+bznO;% z#LOz0{rRc%?ug%?91W~E6kU59#om^aM_;y)&mEXhS=KEZn{TaP?0=ZA`9y2flXk#B zWqmjV&|1>$Z?#XbEEF{V#h&B~BzQm0J!{M5PC!fX(0X_6UZ^IDa#t}F;4Zx5N;GQ` z-sXCBVR*&*N}_rZ$^}e|GWszC51zdRwJF`z9yDVT=^BEni%HT(76@%nv`2lO>kn=a z$tBk=3=Xx|XfnSCEK?Q*b+x^=j#{i?E|>c6NQhvHwRZ`)%&WcK{l0~<6CZL_ zBDeE#$JH3kt2Tpk;HpLYj%ui78J$s@f|>wxB; zV!n?%v@;e4kNmEKwod3BDn)&KN^wls}WE98?}`ogG~W7%*AbR-Xt7jhfh z#SZhfOyVPYs*AqSg?BQvajV2uHQmw_{XMbau*^&<$fJ#GM&Gowk*KWJdT3@}`F$qY zcOShO9^A252-M?~mBO|gXFI1FPtUyP5C={U zr9)lL_vbJvs)8-94qU%-fy3#QN2&nm3n$?cc0y&!gBLDfXy(T+|FG1R`FXi%WAxnH z-aknn@`?cS^&nt4KM}uRBU7;Fgr;uyJwXAIKY9HzOt^lVi;7`_E{&aB;uZgUdwm>}*NAV4eKUxa}N8$*BzCE}DS3MX>>eMm>eeYEy}#QXlt zX#Y-;I-odap3l4-13llvCJ6FP44l!i>s?B~Xxth_72%pV(}+y!p$8nGsyIz>sXE`2 zsbL=P%ssO1GLXRL!nVO7BZ;|V{eENNehua4>#T#1Y}!^B29^U%9z1yvkl#LhMGTZa z&rz0ARdx~F6zstom)bLkc4{6DbXh85}FxVEdkLi z$&Z_E!$W6Nxa})i>;>^%qF}fFbfT6#5720~gTxR{yR|%7m?!hX+T4Sf1Kb1Lvzc>& zfKX6;q)Bgq!#E9#{s2!dhkM7NyedKEh~fb~Y;y2Jx5a?)h*+zb_a6hV*c)x`;Q1#w z3xJ56(Thc9qEygNA%C!{`z+OlzSo;v0G3r3-5A8zt)@26_A}r>sl1)8n1%x_X+x?CwjqDxeM_(>kwQ?t zckV}7=1c^~J^588R}Yp}4M4jApk6l1qYv;FWwW93p6V})%ixtad8WyhYqet~1Gze~ z-tyxnHlIp#r#^oN1g}D_%%=DS%RY)@-3r~NPw+$kWIO+!f&R0I?>bH;3d468s({1B zXr@3jzvZZlCd}va-txmQ#mS?*+%=J;8yQy+ODkHXNTM4f38%IZ)hKKzkGPv^6r~^`$$~7=Cv38mE@XnbOb-2psK<3!<4&L|O{_KdwXGc%4-3eqSPFI>e zbKSrNYy76<*wnj%8JhrK%_RWj$LnccB>%+M*IQ(rY37Dw&lvoZNQ}~|Fkps(^Ouy- zc0*+%G#^z<8yYAdf?f6s@t#^S=KAKrhoZQ5GEN}DC%iOuZX*XDXp}u@u0xsYxW_ouBxwM}`0H_=wyA| zE8)_i>OKbmw$;eho9to8`su9p#>P@i{m>v!HYrMx`by5{s2fgqV%IN2u``G2{;S#} z7(C_JHL#g4!TVKzH-;cqyTWYUbYJYD51;o&OW{neeF^8u{&=>3MOrA~?FdpJV zSYd`@e7yIF=r>t}q62JMgr{OifCEZ+OqL@U0qnPCM~vzAVAWSinbTGsoAj%8aAv*o zuWD3^SdZJGJp`)nD#ZmjSqj)I^?gr($f>AJ$#J))lJ(;mu}!}FFX04CDff;uyZT$@ z44yzaWcc(;REg2B-keS7+|){0hao1Ky6u~P!(lZL$EGcIp3i^I>#mUn%_C6l5a^P! z>!#Rsp#cEt6KG$x)xQV)s9bQ9Udl5Q!j2ysPa78L&HdLqdHuyUL@dr}NJnn_or0#u z)ho3h3FLS-gf8mRizhfvtzM0;@IyPk-^a6h9oP}I+0o=6~N{Rb6BX3y4 z5iV4cW^ZW|en}IQMT+TnetP+OC=>YD9ENf2e>0Cg{8J!oHPOl6dW}=^aM*Unss)1+rbRF+Sba7% zS^dsY{r8^f?G9m8-(u)oUlX_hU>wvBfuHDZcJ$scFzxx_sGe>&>$_MnNuJCsS&yi* z?S#{Ys<=ZKzX4zFL(&!$TFy;eGq<}lHtC1pKHZ{AsJ|Suh|q}G&Hj5`YQ6kg>-TLH z@Kyi8(;^duC=6+%3mPF4l)6`@ir!|39??Zz7I ztV%vhgYW=#7VO2Wemv>Gq}*g@;q;+w3>`V;kYxK;6FPKtq`3YYe^ONz(}&E_>Aq4d zi=*$Z4@FD3K~IDg#yC21E&p50#uK=4t=!6S^zF}6jtF|OY2C#@@z}oC8anXk#M0LC zd+<`)JID$k59QE^GI&PGf^LN=Mk)-?G zAp#plve>m9P|9#iZEcyjfDFB2Y_A!F^9a*j3Pm!I-(LKYNI0 A4*&oF literal 0 HcmV?d00001 diff --git a/display/entry/src/main/resources/base/media/background_picker.png b/display/entry/src/main/resources/base/media/background_picker.png new file mode 100644 index 0000000000000000000000000000000000000000..4c7a3509d2610a3749ffefab527ad247277a5c3e GIT binary patch literal 43517 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%0DO0w*k!|tg@ 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 Cj~CSd literal 0 HcmV?d00001 diff --git a/display/entry/src/main/resources/base/media/close.png b/display/entry/src/main/resources/base/media/close.png new file mode 100644 index 0000000000000000000000000000000000000000..c72a52014d43419fc7330db489e9685c7f65748d GIT binary patch literal 1205 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r51|<6gKdoh8V5#wRaSW-5dpq~_)XP>Pt*kuf zxmiEVw|mi0^rD$-0YebOc3BMuErxvKSto1i<`kzKpXPHe>i(=qPnoxSk8eu3d2-2? zeA`zQmp*QJd{bB7I0vBQ3Xl z-uo(OMepI3%E{X}bGf$a@}8aA=WCUA@j{$Ow@GOHR#x{VYfr7y4b;CBP_Wh`+tktP z#A_3gNb5^`syk+N2S#L{IIMRyX!_O()6aSt|DVO)74+ogqjXcNv^SRPcbj}F+xU3V zKPz`WedT`fo5KA!a+goI9{SpYxo!GYwrR>fp z9qpI==s8+_XYqn-3+5XhI_|u7)d$~Y3qU+gr|QI%Q%)c?!8?|lP2B4r5RiT0yv#b+ znbyv~(s0ws<+N%l@lzhuM4x|Qv3g@o+H`O6=2 z+k&+Bv!|M_nDkB?r2Y8e1=7>Y;vF5u=3CX3*SxFP&LnTO@BSw{-rJiO$m{d(+L+h+ zfO}8Cgw{i+YkUtoC~54O|MK78FUJ$B#lAdtoq6}_B6OX*3)Lq)XYv=A}*V?>q zOU+qzWuTTb^Dk`@IDY7Ia#i2k$P4~0buaC!Ub$(UP--vmN>x19y1lgF@5;NEMANx8 zS@1uelB5{*Fjw}0ulvV8`p%AGJWr?8C{`W1ZFQi|Zbx~;Jb}Fr-wGv^d~FSwz{(q~ z=mwTiS*Lnnqrm>95f#zwH}vzT&O4N~tfdI*T5I3DKdc-X0*em+uh6G-O;|KxA;Jfa__`lYX*$vqM5%e&`Y_B?cT zN&yCt@IwBA^+#JWD((r~1R1>J<&9L!)h0In9XaQl>Xg2mj*Qk{p~rik3!-y(^~&iz zM?_LSD(mv+YaQv&1i7YSXY{4;+{!>r_8lgB&S<_Be$afoe*2y^KkfeRty(spXR!#Y z`WI_(Y&Gu|_VRxTiPi^)cC9M0^8lqBIk)_`8gGw@T#@?nIPpSl@zj!Jt}NbP8ztWE z+nIN%fSDW23vk;k8hdXMDAie>iLME~7;Fs^pLw`+@=mQy;z6KvC$es@et3$@GH}vV zbHBH8SKXD@^FFxm4Y|%Q{m)gh<@>&vdFy<@N!nshjCc5&=(LaQ>xwJ;+uf7C)RcR= zE;CyzJZn?M>t9>dwWsi{aOVrWC&n)o7Q6pf=2ELm2R8j`c(_*Cr!Z{xswvaH_bfFN zo13^MR_IdD^mVVa9nO0%%92X}=FkTbTWe>p-?Bs8Ia@2%{zmb=72D2cOXyD7)w_%< zx@D!=l`!GhtxHng{5sDOw(8G&gDYpZT<3UwKk>=+OzGU+FK;rx=5KcryVDhZ_Y<%< OV(@hJb6Mw<&;$SumPW<^ literal 0 HcmV?d00001 diff --git a/display/entry/src/main/resources/base/media/foreground.png b/display/entry/src/main/resources/base/media/foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..4483ddad1f079e1089d685bd204ee1cfe1d01902 GIT binary patch literal 12430 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 LNkvXXu0mjf;{lX4 literal 0 HcmV?d00001 diff --git a/display/entry/src/main/resources/base/media/icon_background_light.png b/display/entry/src/main/resources/base/media/icon_background_light.png new file mode 100644 index 0000000000000000000000000000000000000000..5c9344358225c1a9a30cace297ffa31fab0a5dd4 GIT binary patch literal 2700 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 JtaD0e0s!qDGNu3k literal 0 HcmV?d00001 diff --git a/display/entry/src/main/resources/base/media/img.png b/display/entry/src/main/resources/base/media/img.png new file mode 100644 index 0000000000000000000000000000000000000000..fb7633cf7c637d0631d04d2bfdb48947944298d0 GIT binary patch literal 9667 zcmZ9Sbx>SC*zXs2r#M|?af-FLE$&)ei?+B^++B(lY4OD!wz#{s6u07ZfyLeJ(%*aU z%scmwoJ>w;@+2pDa+2r!iB?yY!@;D$1ONay3i8sLFL~@sibO|!c``1QhrMJ7ZklqE zfa>2=yDtUgj}j^p06<*=)`J!0r2&5QdyeEni;Jy36RfOSxK^x!X87 z(rDQ@SOIvrczA`lxP^GQX}GzBxZVkI@vY7Negyz9uqjAOXnC0&8e`NO$$UFH>|jp} zL)Ib;K_;RJf+}*AvgbrQCz5|dq78}p(i|_u`j_u@g0s6j$)c<@RZ<@WF%kgzXqm)i zZHa*yMIoKo9|i^>VMHs?z_vWDAJ(4dO`9A&RvOw;u*mSJO6;}J+=iT)l%)cz*B|Mx(M6XC&`oeo);r?E zT%8+{;c0O;rfXzjW}?_z4dz^Sg#jftTh4oc&A(;}J_YC(s>q}3-&!$}$;WuiqRF_A zBx}t;0`k)RiS=D%R@(#U9bAnpw>)@95Qq=^0*JL=>eo$fgL(Xe9RGSJ^2!>Vp3~XI zK~L)gWbQ$C8Z?OvW$KStNLF{uXE5d%SenG2u-oAjLwBBFh(G47Mz@59u(~^;?-ttV zpb>0rpLB|GR>r{Oo8H<3^QS0wh47N zG0jR1o3fG)xQ`IBI%@WuZBxVlk}+r>?nk5zGyx`N#BQ?cONOhm z2CObS-n0EbOCs{DKL1(jSHPxma?F2XrWz(>{h+CFzU?W@mt8$I^5z)mY^b0zfnA0i9f5(^es(uOkN_I)tKsC-A+_(#OLg(VgPDI)?`SvU_tdKf+ghbvBEwDT zv`6v-4nlt{8Z0~FtTlPA{CW263rKO=spnem@dpjW+}!U;@%ll-FuSV!z{x;(l(E-F zQOb75{jZkL0@C>}4y~DTK1EZuyvGi>4xL*O zb^!v<=ef^t3e_)C5g7C=Bxg?Az~6ruVog;(_@1!{nJejvJXd27G3IC>NHCZ8ee@_>rY?%Cxbvpz5n?B3Lq8>m(;%S_jV03xqRRM@R_~+clDF@|!)-jXhhK;B4pgvL48a2<>O1AO5?qjf;PVFqe=D`-K+(%bc}6 z1ZAmJSv#>dM=6jhxdV2v<2S$l%+tprWCSoqj9iZNhIEISsrXI2i9RrqRVZM?F&}nV z@qA28e@yqvlWXlI6yruDAElv>=60XpQytf2=T4Tb z-~~B-Q#DuT?E;wwuGE;G>q}NN`AgAhLU-8C}zCKOeZfb_UjeI0t6ML(~8`E1D5m0#V#6Msp6oYvx z7}{Cw=A5SgG6qhz5@jIGwqb)Od?{Y`Z=3-R!b1=?fr9hvO3K`3NEX>Imd`hDgD|Yr zyKY$fdT$zn2{*&+-wLj~4I_#>Dz!o!{DkLwSeO8X1qF2NwPf@lFyG}-LN&6YQK zE3NBK{-5MgWQ5l5M`2-iH?@N5%c({1^-di3*^jrQyvG#c0lnT0LWe5DvPsH+GwvyybVXQPuU&=6Xa@rwi+*4eBj#)09WRlH*XPlQ(h{R%Sn2)KyTSO=3vi ztJ=8rJr;wnrVTG4tm)36^4#aq(I}Pjbk@xCeekcC$9v8*smVo-WS>PJ4I9lG-80`w zR}FWI8%tK>R7I3K#Ndj?RARj=3CRAW4nTm@An#w0(c=z*IPS?Nzk$eN9W=jJEtRM^ zW~qKhGy%S}>N%7nvyt9B&(|&1{u%1Ca-z0(NkM=TmItU|O>_^kcKQ%4Spp#V^S0LE zte(Zl^jmS%{g_)%P5f(1aY^omY>}*7QMu`vp~vQ$5pJI%6X6ZDamUUh%C(zg;}OL5 z%Z+;<2i?7yvjr$C74J=yQdkM_pvtfw4uc8+Znq%^XRq(gM0h(dvLb9b+5{|6f3(B3TR|ts= zNpA6I(Mh<2$+Hq<@NGfXhG_Dz(?f{-VZu6@2D!f4>f1~w(fGT`1`1390u-UOFJ6zl zd=-<009FLuWBw@}+P5p%W1;TXoD(#M6~LQe+I!+3PIcVgPN>{pDpqY*#6&Sd7k45MVaf6DiI5bH0}md2CU}=B}-Wt65VCx?`V_irr`+ch0 z*!meE{Z2nmC%fA{{N{dko)dA+)i=LEj?EPo3-RP=w%pw!0$mwDrsq5HqoS(q(O{BF z$3)qtu*ADIm&K#K#aN>7Q5NejVltC?5Ro5h*%N%LvHtdy?At_h7tFb0R#oq5C;vFP zJgANRp;MymU^JQ63!g1V|831G8JE-A`vSCd=Gr>hSk6%dBbKnm0Gc67Y$W9dkED>< zh;ywoMb@2YH{DGdM~o0{Y05*6TS*?lPgRP4>j#u{x*})r6F2F8{tinn$_#e9?AZF^ zYaIvd`gwb`muGu2i&Q3>!5pQ)RME$Eb%lMc_sSN!_Kqa6(l<;(g&CJp)0Hm!(Wg#> zQrK}bP~e#tkRHpvBx7wVP}`%T^oy!ro`$>8x-Sh4o;r?gV$i}&_|;q?81f1Q6f$O9 zrL~ZrvBZ5q>51ApVwJ6h+xJtbJSg6-em8zKZ+{tH{@V#w=j3%8w}OV-7ljIo?`fDe z2b)({vvb7!lB{0Vu2(D5-j^nB@d0CMVR&jl087Fe05Q%TuG@AkCK>a|mfjg{84j8< zxhc%hh!)tgqW^KxIIc0O8m{wrR@7Dqdy%m3iG{s*>obzMh5!ySd~url7>*&?4H?Di%$_o|CT7`{MlyovUeopKPm;{#v#xsX6Vo zmPe~L7TE4uIaZAomkBq24tO~OSyKz{kNQ;ck*x%5B5RyAgIuD6>6$$?viz?WQGpsMG;qcf*51=750@r=t-#lzPXgDNJhB%HMdxJrarT=?6ZFos&E2Pn>Ia zhb3fAx={AwfOS$ndDO9Cfp{BQ@Gh+P2X5z$15VNlOg|Jv$t2@~2D#pd=|7aQ68kzH z{xk)Wkv)*Dg}@PXkpg{IK+Ty33@9K~%}d9PWE9=U$LqE6yFNT|Dte73fyaw!w!ee% z73>D}rLKErB@|8pP=L>BQ28&scT?P_iM5y78qy?ghL9M=xU=>7fU5kT*O@|hZe%Gz zX2dTaIL2xvVygIeynY8amveEuFZr9KGk0kJT~JNB^l5NaJhCk2X;C_gw&lUhozb@SHS{qKh9#yV07QW{az)f#p@3pzxW=AHBKm{;vOYrCJ7OuYELV*yC0Ne$3uXEY4l z=AU8F{jg70W8T9(XgV9$(mAJC4;4HgO9uCduRzPO&VV8Z=s<>5~2lBxS+HBMMnLSZTbF=mi z^n0Xdo99ed@v{z?#6Gt^wP>RIe7iHSnksMiQw9xFPzwD(zg*%My^S(!BjM`&x%aO2 zKLQdJbzH`zo>SBWrPlI(VjWUTtuCq8{)nx!7|dZtV=0rwWr*{{tFsD|*gdh8=MBf5 zR=nzCRA?&JQyAgr;@XzBC<=~LkV+Dbr4#s6rBPy-NY(Be^8FW+)#gz#Nhblic@b9% zaQ3VFJB#!CR@E%ZfVg`CnAUY#Z+E1?6p^ zqo0V@k#9hB^XO1;1JvV3)ZX4)mM;Dk9jc*+MBA#sRH;prXi5UaH*Nhx{V&1X-WsyQKZ(7gC$i#e#tcZ#eLC2g z9@s4Silnoi(IKU=blsI4^vu>PM>Ve)lzb%I zak$s((B!`Jw;ps`BIvArMJ)BzoeHAAeEiZo~LmbSEX9m@K@JQrIoo^JuZy&cn7U#gml+Um+R^4kG z-3NiSoDigE_II;|pi|5CQe!f(CmkHcZVmS<)vA@{EQD&}8|eletJ4D? z@+>>+1377)PSqi&fn$I3#N{X?5oxyW??(nSRlML7Y6;X*>(XphKV*jR)sUbl<{+ak zuKu;bV^{ZJcBnfQ1kaC#O-K)n%bqO!`ee6#T2**V?-Bel{?dG=r4~z6Y_MC*cDo5M z3fWIBTCE;M(;%Wb<~h>K;CFi6v|3>FMuN(o=+Erc(O@d-^=LxA9drVkte8e%&qRY+ z|EFP|tb*95@uPw)orat`*~%QW?P(rPYu(eCYNR_;9%GbHK5d=FVkx2l1kkwt0F@L*gXgB^z{V1apK5`^Y zqE9Hyniv$i4NM!{9%P}1)4ohoO*P{~-@x2q5KQJ4@;Ua%N$TNKhQlg8p>X#V!3Dai z|0NE;ts+@C14fJ9abKouxYvShAw?avOR#;}XRXi1HXzcn z^0x+kGJ%tZzC5ia`UX|on1Yq118UvAg9Kkg{#&n2+l;9E_k{_uj1pguCUv~0ixk($Tzf9Djh^ysXZvPZ%yFn-#DuZJ-tyI z4*nLp&4{-1n(G@qGgi5AWtx$p%W%QW_srAi*GZUH_uHLTESbrgWHKX!e#zDq9$i$G zwL(H(qIz)EWm?=N`ValKX6S_fwiP>JUh8PDLi)u$aN8wi!RcT>rhJK+@)i>emjn7S!Gp8inG~2c4J(u< z4F$0r#hAm;g$OEeYPe3MFT-BhowyWG&3kU{o9I1aX~qJKEu2TD2!0_PxlIK4viBn( zT!GDg5L*wa>QIq%cF@ylrIhL@BI+xINoW{7J+LUm_l@83J#E%GW%;1_^g37)IOpjD=u(q--}=oY}knd$-)*RAT(P(e(mL50zke-Va<$qV`@O9L0 z=!EffuS_S(rv3WOQQdMC1KgLed*ApI47qnU&c9)!J`#*nHQn4sEJSnAh@Vv3R3wBi z-{c##Y{`i?2iMbq$8m2gF&M3a?)|o6Ki1eaE@9o=Jjmj?68g9%jmr&RE6PmWy1h5H zv-SfFDbsh7ZAv$8|BQ{>F!g)X-TYrRzrqaijoE;+OwnB7?5^YpVKVSf*j> z9O@Gz)^x4(9!ECi$5AK-r4UU(@QvxB^EkKW79x>wIRS+&IR=+%A$D=((z*XJB@3j0x<0KwE!5(>7E!`s-`T#FnZ$~oyGlPh~aeXF@%H9=B$3RKVRt@nN_YLt~tE3o2y)y-(&EX(2ine zSI~ffSp_rLXHFP!^;9mfUNHCA#^NY8e72+XdJTqd>RRCCDZ{Bzd- z@cxvFD^9D~Ghc75Q{C<0#^p2h)gXVi%mo=rQ!;qg|1R)$|2k-*=&fi=(g zA1F?6Du<{)XVoE#e8!!L8>Vd{n@j~kW4edd$}w}-1gt^4_^5nWtn;SV*(t|{UQ0jE zl)2Td>3A%dJF3~iL(60s#9u_OV0UUq?>u*En%R`%haslu9Bi=*@a{F&93|Q-bTFlid|3FJ8OOKC}2Ufpen`ONF zCq{pTMg{?+S_(N%E z;*wDaQ^qXKGKKOcT`&~Dq^AfvF;Nm0OB5L&fO}IJiAYn4C?AzIk67dD>N%M5BAeov*7p>^p~XO|t5<%CRe zNndbF`%ke_H={NUNfnVv^#oz?g670NdAT9!^EdJyi37<6Da4(4RVx%vPnG^?;sa_R zsW$l^ZabUyeo#PlHVKmJ)~2Uc&0kOAm6)$w8J6;kZOy(Jr5lOi*m~Z2yIwru7}wMp z%lI=@_ayXse`Gn@gS{k-*JfV@4PKHDJ|sW2hD`!QVD4FK!Moux!)8I9ya|9i%} zL?li0ekWzk5J&4R6#<5r#83=#&dOoZ22ZQ$2wtGjcCGH(u$rP2c^R|$$8Cta)i7e= zVsu^6ICl2@r*~qXt~r_+yq|FZA?W&4Q|hMCBLcG0jY8N9S87eVd3D@995aoY$V}DvpSBz=n?s>lJl74qEF&hq!mfOh)Lo^O+K+x5#9T$IW&+E)E1XingcyN|Rx{{*fx5v{Wr5!bnGLBgy?5WhC2i~YF0leJhs zyz+!qa-?y&$7v^qpRH)44&idTGssG##+0S3mx>}V8kwzm6$I`@!Uoa)F1ywe(tL?# z>{23T45m6FG^}7eJG#q!>a))!zwo6-F7eQFQ2TXfJ z3Gl#NN7xV3=u{=Vhnrq#rWTTO&J9TrY9Jpi5G>a{?1ThyI5u!ks)y0E>T2+y6MV&n zNI|eH{bV#C5AztLevfVnxn-CCLZo=mccr(f`%O4{y;SbQ1ZY|n9=FLA_{}%g4B*L; z@DKxaTJqudHh)i&f;(}&u%nR;b~acAr6bG7X_GUfSqS>&Qj{YUZ(6=l*+`>bl6MhG zE6g}HIx<4CzDa(?|DTxdmmfffLcFzkJIdNl1~oiW9jBS?R^PN{4m%~kKDM3SOtYKy zLUK*RJP;Av*$xt8Rxs^CB0>hbR~~}Qya4Enmfz$(%WBooqz7-X+DJZOyw9p%|HUAh zmotL5@cK(!`utlcdywfMJ0qsjRs&>d7>ST}|2)w_#8DAsYfu#_MLaKz;<MBMQQ!;y ziVwX5eF;_?G}Z^W>FeL{C8oYF#=}2c=7rHc#KwMU%3q19SWmDJCQp8TD0g!^d?Teh{$21- z$02}tH|Urx<$Wn0YqAVU_y5RZD~%@`QpJZqo{Qpr90JpsxqBy&Ktgq4l0*zblu0ml z!N6Q*%yh1ImvoCvQx_zfc}XZN_e2ZUC_I|cLDF+bmNvSEcp{H8Q-R()+;4%K8z{tw zV13hh!O}TqdgHM2g&HcF=_aqmLA5UwRF8`W)V}12NbeEO6$a9RjV~{tKvX+xwT|Ju!?Q%4Uyrq!$Rq!(AIpz8Fig#u2M zl-K{Mt{r$zVq;@EnA2S}m>oMw! z0DnO!8JAY%ZZ%gsq@InkqG~(7>-i88yT*ULutn?|JoBFnnsX&p^pzdl?wZY~K9}AE zO#Jy=#F@=+wyF<&o>}i+N0ay-1u7<|{-D61PU-AHnqiN!|FuL+zLcGs8Z+!jd)=b9 zmN>b-(Y|xDc)!zkGB9B4z~k#4qOlb7=Jh{)c-bP~$i@<(ktr8K@40rYlimKa(0Dv= zf{GDA6s!oTWcJj~53DQ>!sr&XX5hvZfsTqbL&n(c9br1aj*Hthk3jFI)+TDcMSt>2 zuq~lvox`4#pb-?1&*R7jd|?WN%x?xB-f#O~z_=|2J3|>`qYD($Xl&?PxvVTS!L33H z4ONAF%eIb{+6G-dHq%N?PvbbckIc0(0C;j(q26$pwm);G8VQZo?-%$W<}SE@!MMx& zZo!!G$kV;UB+#wMI5XVs`kF;UbThzM9c?>0a>vZeP5;h3+UbRrsQ@w?TulM(S5I5Z0`N}^v~7vYbS3>^JsLHkl1=J zO?EeP9G^WY?GsW*NfcF9pBD&Y=;g=(Hc(DtDgmOuT9Y$S{nryp;Katzj{ZcDx>>BU zx%l1x1~vW%2~lTf5&s8jaOelorDX6o$p_Mm;1v!8Ro*m8P8BjwZOSkbqpQ{@abR9w zk06F&npm3qCSiSzZyC;vgV*h#>DFi4>uLEt1eyQC#T zjH>OhsXKO_{YyVT8q&DYq1y<`SSZ{Y-=+*B5@#R005ec-Qt$J-@Is7}q%>W|Iezh| zkY{fWq5O`s|HaB^PD=e_WnBMbWmaAk;=)&#FV%pR!E+kBxO#=r*h=ov!RfnKhbi!D zCn*`Gw^iL82L;11Y-ih-lr|}FIyTNXChk-J1mEKn6!;b>eHZE9sGAcYw^m7f610|E zB?CYETla|QuoAVFp+rX3A~bBcu#uN==9A69?^qEF%PmV)dw`WWcOapD5D(FE!V4zz zSp)Rhj>aL`&vGm6n{%FWWnZo=Nggo8l&^R=SQ^yQ!f1R31j0|W^c+}%TPcZc9Qxcd+sf=hzCTX1(6T!Kq*x8?io?w?y* z_4;-7t9n(pZ_B-X`kY7=C22GiA`}1sfF>&=q4r*f{#TF?-`{S_`~vS4jEkDI7@%^3 z2~KQ&sx=1(pF+= zX%S$ox^N$em13l&jwpur5}6=@W}^_nE+tv_Kuv&_Bh?F$G>yRu%9rTdjh+r5P!y3w z4kXZ!HZsDqD7I`ZNj-dF*?7qLT9Wc~)Opuh;*)h2{r0cb?I`Q3o9#o_@76mOo>ZD) zXOyV?$l0M8xL7*`?7=Ap@~N?Z1=C(&lG3zh+#iZrp;EU}`_?~LM+dxfaKfWN(V}4s zvQrD$^2-{HwEgCxCe~g;)`rtR=SH~wSvIs~P>R}RQ9gd1*K=ET^Q_d8wFtKu{rXfU z>(ve!JI$2eqq7-UM$w@h78|ZP=u=T+rlZ8;!Em7Jfp7MWZo--j3a>jis6Q!N`TPH`rhJViV6o#7h9I_UzA40J1$ z4^&~wQAIR;?ZYZ0yd7l=emk{cbz)^S2LuN)QALfux`sZG<4<& zQ+FXcN`-{0LinAN9E(P z8@rE$iV*~aR@Orvq$`@o2d7HElgqE>3YNFm3%>2>LRCIqhB`Y~*yZy*TwA$D4pR*V zR(#z}440;sAAw*~D@GMjNcgRHV)LOe8MF(us`m{|b+-OE6ST-pIXmIVuw&+i(UJTh zG5oEBzRYwImA)?cMw5))*+_Qj<#a1%6bgO73ni#XFi}NT)pK+3cXj6_;NYbE;{*O% zgx|hd+KJ6we!K=Ad*n8;tb*lSw zKyhsz}I#!E|W( zH?tvhd+=JIdFS4AcQbTo(*PalBx}i1FqjbDHJ1@zS^kEPaYvjZRy~1G;O{|Ake6+dc)~A?aGE5G==g*mO zPiu?WSFN$O@-Iw2JVWW&y3ClZ&LiN;S2 zpc8hDBPq69peDqE+YbUy4k_3l-@f>K@?T7SjZqZh7#5`^^|Vl4o0l_NC`Fx~mwh3f zmZV11fzb8mW9B#i`xB_M|9Gxg*1D9}#?rMtH=iyq8HJjLyMC1^>@v@OoYJs+MSxF; zN+uB#QH(4Gn+TK5o<)c7c@s7s2_CgW8NH8z+`IHSD{C)7zVRPX_R|!7*V9Go5_K?1 zdm*YIN7@|SUW{A-KmYLh#$T zW!LjJe3B;@V$GYqD+EG>iBLGH0Bjube(BOaI-Mj30HG7yWrKAY9@f2?ipVVl!X1U; zc2}7fIU@YBGV9@Yuy?jftrN`fZg1jkL5f!1IX#+m8_*`LK9L5|s9<{dyk>{bEQDwl5pjWWtCzEJ z5$mznNZ&`@y6ziY3|#wa1U;LwY|{P~qfk;jnt_TSqK|zeFfhJ<=7NFQTfSzc=2Hm8 zdLIYrfo7(OoK$?(7{?UEZIPICC1t~K@#qd-vs{MGsr5D5)P@X;x5Cf9PSTv*rYEgF zl=8Bq>{BTOj3)3h$7&%~wc!BDN2MZ{A}Km9{#E~#WF9-c*>5VW63;e2KACGPd_qh2 z^K`2B%z@vwHNHVy-;9)u6GNn~3(pERWd&mJ9wQT}a%=R^eY`M*c~ir4okUa8VD;^- z(5y?!k0aR;d>pzR=(Dnp$IK*!B}Ft7=>r^M)RT}<{ui3nizIBteWg824Au&qpUCs*%=PU4Ke^|$bnCwmUaB=v>)B{@EiWT z4x~ipoUrkroVKl6Vej3COr>MH67CH2&wir`6X9y=GZ!;TP<48*&BD${`j6GIyH>dc zW~PMfM)vpn*Z>HgtlJOLhowOriA@>vW4RWYy>tnPtS)707I^#U@8qMQboOh%&(G%g z8+McWDy@{ck1oTjT6F9-^ER~Ugx7{I;}MvJs^bNcW}MXUn}{SHAAu7{mKoQm(|+x5 z>rvg*eJ?rS7c}C9>mg^+z`@y}0AkQL*%dQ3*T^XahlhlMKgSriW#QScgg@g|2U9Wn zAo%;Z+Cdhs*3+fPcWf$BMg{P4%U^iE3BIAdZKfm*2^DZ(6zKQR+S)MwLVX)_I-0Q5 zCk#1wg+)!rSPl5wfx6myo4781E*OC$Am;m4r@3y1EV{{vUt9bT;2@TuWQzMbHwjON z4NKn=&1KwEhrBI=WP!;ilieH#_uPAu3c|tZxNN%OH$C}BP zciB0A-6PYa!lY0k0q%RU7;$|?PMvH}62MD^k^ z=FO)a=g^s>+aoC6Taq3N3$3WoCh)T2+Y?i1#hlX@7>8d74 z-bKOsKynB5BkZ~8uc=>MZi9g_N4-Y6Y5y2;UGTHKP6#JYR-3qz2=t|0M>*8kgO49@ zSIltZj?5HTi@Eg+nS_&?d*(Y(1;0S|KM)};`V7yt;;JL9t&m4eZ zS|K;~=$XZGy2O{rtoHpWF;tpE*N;8%Pl4E+pn4d4nHU|GoHMO&zZFjjJ`;`XFRcKV zZR!eK`#Fxz7_;;TxG4~EDp-k|O_z+wdzva|JwA5aoKLQQ-#WW?mAjZ>EUxnm-gO0- zk=dcI3S*Unj*fy{MsFiS=^o4wqoG0dnvOQ;Nvpi2NY$v>sVUl%g|U@$Daw@{N9J9$ zI$}2QfkM(7nKX=IKE|gla0L8G@UZ-p1Xu5C1$3`qex8o>w&Pl)dS?)(`2ckA|EtLK zWDc9Cm_iM&+#aSy4l#|x!uyldhl>-eu05%X^Kt_uJ!9PFr%&u^v z4}|A=!@H;$YT_O8+WSt?{$>*@OZC|4d^zMXcMxhhvqn{b;QY)Uh#9PuER;pkO$khp*29WkdA`FPx3Be*cAHWKkFO!h|lz zmE?j+t|w=w1M8N2d7EZ?`+62BJ^98^IC{TilF&fv31Tt=u8^CR*m8w=@mPl_2D;XL zcVo)|YJHpRxixIV00DQ-Fgj#-FXV-VO9fS}SICLEY5%V>MeL*V_{FZH_&B|l@lF^@ zUVG52ciPxyO8oio+ zI0ILIttbw%ilyu*;L_hX#{bimOO2^sGwIj<4V*x3)+m#;$9zH%v8&yui}4Bqr-xzk zysJ$`Ye(;S#?-xELd$dx)F$<_G`v#F&@YOR$I=OM2E%YM6Yt30DOC11sMl`R#iJH! z38k(66vodrJFNzBPF9(SaprDm|1kD$+~H&YtwMQ)S}DRwC_QkhCi?DT{JSTu5sYA^R*h*R;{vzhVfVYhHMV;Bc$t$j4s1 z#9%Rw18aigzr+)EJ73hQtWP|!?z_gc(fZvD|3dryB)>Jmh8&m3?Y@FMHQjS~g#3r^ zb+&$4i{?HgkD71o!;$S(;VDGkPS0gB)!cNSdW0I;y|Jg4U)UsND`}<|mz~ztB`Q78 zl#gXF3!^50)p03}=2+8hSNL^Z^M#vOtq#F3c8Va~3_v#P)QAM=MW)h${)x6VSk^!0 zTV^4BWv;m_zv&6L?~r>rKhCNtsSNt-#)sHe3mule5H)7RLm9S+06Hz|#%f%Dta zkj4x(sitOn=V#SMw!rPZ>9A?MAl=9VEX@{CTEvWHwx5#o%y0=!m1n<&#wae%Elk!9 z0iSFXS?z&%iyW{-e2tb|N59O5@ceVoO~bI6O>0K`!92NtxE0cRrsXr`rr*YjHKg#| zE@?6@`EHfR7!pvY8j%F+6B%2jhpo>S5!mvY#9dv^R(Suo@iGEbUY|1*8y1jKcj*)G zl(NW_P?AyrCT}sNot^AyDFUE9%B*i#7y80-e3! zr6GTM+zm>vz0YlmDAkSEm&S&t_Xz1@9TI2kTPwR^pypV=ZB@S%P$|2K;s3FT{>hs+ z-5Vx0D@^)Y++>2+tBmKr`_)^Vdouw^@H6vBV@oOR#?ZnV;XcJ)4^8T~m)jNOPe@q#q= z7o|KDyI!Iu?ifB7T$))wI=`62wK)j|*@{W1h%94NS0x+cw}||G8q~}_a|rg?tQmpo zn#Hn5-K1g|%P*>)hH?qF1)1lDcEES`JuNUPJMaIHB+@$d8d) z>?DA;nF1!DSsaAqdV#EQpG*p2)^r$v1aTK~&++oWuM z4+2Face(WhjHz;GxzOydFa>HI1H+&hQZ}8MSb_ z#=yi3hmczaOyn*?G+CocCD!~m&MB<oo$ORe3t zZvTs{Bz^m0kjz~B=olO0%= zBzns)d1*tWLV6i7vjo`*CchV{H4XQ<0q-&yD)R9ak~i8dK?Lqr>xL`!+wgGQGXc!H zjWMIAr^kw&;JdYQIE@M&MNK-(q(Zj=m>$fuB z`L5CM>HOl@dwEwu%}bqxgQ~M}K%j)f_h1O@3i6kY9zWnkVh+$IYcOY0fy^j9ghL=GFY=)>4JYl;>p9A)xN!d3_j4J2ct7ngS`2NscF@04`p^0GP0eyf2h9(B|(2 zH$6;#?B6%LJ+HF@>JhkSF@FCI;FfXnF8J)lnRB3z`q&*D*jX4ct1+w;L#=t!>>>NY zgc+0lw$K`GGMU&Do-d}hiEc5VO#D}RFos}rLfB`Q+~}?h4c4yUI{qd?(TMz@ly=N} z=bNxNI(2lDHM{6_z%r4kJNL_1^yuJ|&ux4wt;^hULUD%_7Lx;fR;pq5#$m?9uUd>? zy~0p_&BTH2TZ|66XTE&V&Snnp2GwJ&>D`SjRN3hU_Gg0ZPoyokCJR+lq%L+FIu)hA zT7TsZly=Z(qQizDVa?H5bL)2W$+$>}lq|s?XS1N+SmR|-j!Mth@VR7`hi?EYJ4`gQ z4daIRbgS1v2u5u(8Xj|DKhG8A;K;=N3dXuDVLVMS)U>F_RQANK_^|pHB#7&OBV={5;b>#Gi`f;HB5$}HNTPWv!qP!!A$>53ojF26exV#qtFvC z9TDK)%o*g-`C4Mg`VDd}x(?1wmT#jIW#o51Om{9gRb^@c+-fmyZP#rsm%@Cl13)7vbzNcc7m=YBil4I6g- z`cIcGVbAojH?R<^QglY$I<1hC*NU2!b?IQENK$D(QuHO2sOGBP-GRpmR`%(19}4wt zlaFSm31EI*m^`CPDO!!SP3;#p|90S9c%BN1=~&X_Rr|pm@`Q}w;BEGta43?K{ypuc zSoBdEnYfM_Z7YM=UxesmEx>)=mMmaoUkzT#-)ia|JDB4BPGfJB%mZ!wrD5bmZY_0h zt2-V;!M!7@W9QyT!8KT(l4{cR@U5HE=05!>hFJRNb@I9PPzpC(N9wlsG2AC&%TI4>LV+yNn=15@I zF}v~Z4T0ZA|Ke$z{wAp|L;|y|8QLyC7JME$+SMoJ{h|p8QWyV7G=@bsw|K+|si&y+ zN>BoM{)=&aRLPzG^3n>sO6LGs{KN!F@J?)gWn<-lvkVqSU|HPr*cJKXVW)}iI@kpN zn)c{3cq?S!5`u#!l+kai0zZ1P_#p(|3hlwAE?SQRo&h?GJk&^0GT}arHp}oY;_Z?YZ%Go5)qn7VseqhpC`WbSg zsi2)(GFfkp&MR5?oHx_Hrn_~4H4)%iOM8`T_h4G zrH5x0XEE^zCbaRa0ywE0JSg~Iq>1gOx?Q2U+N8a=dCJdz+ED4G&mkE9IBmnf8T=@> zC_g%j>e~D~fcNg9F??6|%76-H09p`5J*L3++|p}!L8q{u;jfdYzQ;*=%-l77T@k~@ zBr4m5^V|(Lvx8w;8`%AuH)8g4>#9-KuGK<3#D7T#d#j(NsDnI3O+Q+*mzNW2(2xK8rJwQnsrw>`%u z0q0&M;yVe}z8e>@Z-vYue$V`ZjLv>SV-Nosrze8h$P+yX=R=^b%}I7kPIu4~P3vOR zVG24>5`|RjOaAsvumfV7c1hwPB^kZsmrLQ%e{3M=W?8O@@(eC7&@UJ zZSwr-`NsJ_4&$+bQZ;%FPnE|Rzk|@15Avc=>7G6IUg@i+T`F?O?~K_EJw<9$yB-8O z$x0%RAzGKM-f`4oiYnUWyNMNT@^$UAu73x1x=>rHoJr6{JlHdZ^OyHvI zIeU;OpC7~2K^9ma#sQmW*ftecc1lyI=LSQ>kGOv2jQ`LhZ2W8lvpZ+N=5ETp04ag1 zaWiNPXZPa%QuSw4?Flgc%o~gTnz$R6D|QpnspuK-;h~6+(hl{cQV$!`H^-Z|s~1L1 zvr7r=Q!k7&QOvhfVG+yg0X zga5v4Qpl6ML@~6;M31;i%^;$ksE?d`{!81=2T?Mq85a`p`SC$OKS#biRFAC?>8CGo{-37bM{G*+kcuDN5s+mD z^uY39+0Fs-1P%$j?tgr}67Yv?p|j*fo4&D=$OVm&)KRi*ib>C(PLWanQI8)qC0hcM z@V%LQxUnQBZQZqbV&Yzr*zpME_S@Bt$wK0RfI+8h<<8a%-V*0oxJN3 zX<&~0cuAEmnikxQF_1$E*EDx5!k$aEmKzQi->>E9PX>ToqTibH zjE$0#`!$1X;YElRn6wJ*e!I|p40l0kXLeK3rOx5pETjCO%{}juJ#F@dAWgJT92CP< zU59u2qyGBy@NXV4s2BS6w`{r^waj2hn<*A8-!EY0H>hnt^Dt14Q+fR=+Kn z6oB}JFcC%HmE8M~uSylK%1FH<^-Z;<{ZS77pP8YOL?eypGW^$|k*7h6#B$(3EjMOY zb=tC=E^H2t3w5%Y`wUuV*Mhob{@C)xbD(h+VPAJnS*fj62P(1UUWkoY)Pl5l%}5^I|pjDpD}T!z$QHu&%2g$|Q~K>kgM zdthD9iB}EeygR36tdhM%I{&s?Lf)>3_|^6=(YjWO09F~4V`+4+K#f^XJijLrFM1pB|PQ19ORQM1RXh0TUub|x+zHIYGIIcZO|v1U!kmB`F^P?nO(MD>lA+cn?eLoz^O0ZDFzlSHqN(feWyme-`#logO-f)n(DUE=^n*K};$IPGzq*5K>a6C6z!!Ves8?;ReC zn^iDweO!Lhqct(Y3|Z{)b1b?_$Bl7t%Ap-9v!qm)snc>t=}Qru>ENV9mGnb*qfw|x z*^L*{?FY(GQ-ih?|86nkPG*Q9c;INW#dwbgKa<$=%OOq%mXB77`<5$Dm);$%~F!^OE%)8CNUKQv1X94tCD7 zPtxTJaWFqW!dr6O+w}DG&Z^6Vf>cKdhTo0t9S!|YS1j3aot$EON5EMcn;TbW91vxQ0x|DFooy3cy)s9Vd}epCFr z4AOzZieUD(;Xl74TPf6T)0B%!tN$RDQrVZJK%`J=R$Xl0Y!%CBM2zI83HvVhzpc1y z?f=f1l7f;I$MSwQ!N51Jx2snkDpVXP^eiD3x);W7p{aS#=#1Zm~ifezC zp~;1x(W6TNu{)3PkvI=qmvp3Yr>{K73bMmXO67iYh){16@_kVpp8V+ngMmsk988bw zo?LHsWp0@ol!Y<#sp=C`MoPNa@^~eV=HbyotET;TF1lwDyi7*B$Pdo&E^(n>q#f487Y*;onzRRcCG6>%-)dy|0H8Z=CH+1?p z@~ZSIikhSvO4p}C?~^dZH7P-75j-UHh1;<+geMI{@Oo-nXhHPYSg8x#8@5yT=4t7? z?uB0~JGRASFhk{XGW-hugV-4QIhb605;p)HBiqz@4pQO~qv-n|TS0cNC$A3hmu!#d=kh;A7FobF`XeAWAA(U)uNF z1?XXp2{_-;C|t=rvZ6{cGmWp8Ro=+#h|^2!RDbWm;De7AOBh9L-2`7a&yT9+1FYY$ zUQ-XAO{x7BVn{0Y1k=Yo%GaV8ONH>J8QGFdLSO7 z!zdGs6MMXiHw#$7yX{_%f4$f%11DD zdMtB%pMd|OIwjZ7MH^PS+6UW=ad+x`A{d;)T}*VJVRMwiYz>pJ(&RdBl+Rx8CpxhE zjAvzL*@kX$15@E)ICy48=oY%ItF9EJ5pP||NamDJuh4kYCQ>;R&rg*0F&Y=~P^MP6 zGYO3ILZJul-m%J~wH^g=*)2zI*dOl%GWa?Lh@2~ZRors`H(PNS zW0uEm#o5n{{=ZWS!JNfL{EX3TuGOSLo4e+36!x&LMCya06M++Rpk-NHXx~OtucVlt z!9o(KIF@|0(;#S}hx|GLl&3g5H0TW}-nSW+bnN_A$$g|!_HD4SxoP5S9elhsw`c3( zAlXwL;sn#-5lICZ>AdgY??7>CQO{=)|Y2bay*DF1cJJxc0|~~L!+X0YK@N} zJ_}OAUx`#nq#tNvsOZWIpB~0nR)wfK?2J%3g#3q1 zrA@6MA_=KR_AHY)B3?UN)8&fv>nXdWRTxz>`}z;R%EF~erllKuB8omAn~RvCLI@d5 zgGo?>rX_EP1bmoFv-{M~BS27Ucw_P`-3bidj*%bni2ep4xi6!eox{s}JR3*rDT=Jb z2R?5V-~H{XTl%04NOqjxT}J4E-&kb|z>tCBIzFCMRxjl*w`Z;ss7ibM-0t)b?QLgU z_5w{p{H?n|b@4)F9ad2u@)h(+MrNzZQ-b7mk?%oTq!u;$$WAKG=vN(A$W@{<45`sq zI>gniuQx*0`h?ZQ#7Po6PPe^YoW;W8bo1<`EJ>f|cV7IjD&hs&T)OmB3z1bT6*Q&E zTyq-bScsDa@6hN!`}pY_(Ze&r%LJCpJkS7U`kXGuI_2^zn$qfhl(86Zz7L#jAgraA?hy(29kN$JbA%6X;ABk2s(*Ze;iT z5Do6H`4X-!Y7zk^GV&W4sEaE3s%?P;o!N~<71MK>74(0p0RD{h->X&o^v-RnPJ)j~ z?`~TjBK5SX<$JVx#F|@1K4b}|mCS$-$dRJt*3Vw$&OQ_B{DCvZ>fv37py}Y?`f;%( z!-B$*2G#`i?fhhxCu?bbI%O8Uls+JkQS?j)MW#`L&3Z?gPYxt98yiFn%H%eeUDG4o zjo^f(N1~!0hN&%nfexV|i(YglrXM{CU5>|_VFk6@{Ea_V7y;&MhBYrUoV{8+7Q7y6 z|4Ecpks5sok1ulc7Cs z@7!>0h=^2Eq#~kpWIo?@;Q`=K|3)>ymwjlHsn9nWM(L||ME}ka=m4tuoUK4fHF^^G ztOTS$q%^oV_V;hFLSh$-5vmou&yuhqPi##_D@0EGNy~dWiCEE%%g3Yk3-!fvNUTdu zeW{fRtJ`+tW`gno7Rv)wj6y!#nDmy%O@^sYbMa_sZxZ?~Oc3v&Ya$gcx!?Uq ztP4S#nCrx3QHS$TO3H55z~BJ|#d?EB`%D^WC%ki<3O;bKn4OX%Z#0~$BZkvJ!^&T^ zOoORs|I>4knS(FhSsl0cg1M^BPQ>} =xKwlEx`-Zn7ZZ~& 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

PWhq&} zw=aYTSpLA}R|c^CU0)bn(yG4`74j;xNe3=aEmQ^oSFY+>_n~(*R)K>yU|dsfSvFu- zvkdS-4gLuZO!AfiA!t1`29{#g7{Gpri@dVXF-kd2p>*I_w{un*(7jd2LiOf0Rk>i9lYnBDA!*1!R||o0u3Pp;K6-*Q^Q75m}ml!jqP$! zLoYXHvOVy&04xbuCc1p;S(2j-Lv|P#!4V&PQ$W(Y}bG2hy!o{Y>FA!FRRM7+>9(> zK-HV!!#`(L=cFa%f(U`=1J?o?0ZS*CI@cZm_}y;mzwC>{D_ZrAfc}A-dskLG7!zU# z9JoMr@Sc03T>JUUxA0Gt49utr$s12=ZK z5d5~EfmZcDnI296mV)N*8^mv}{MyjYRxGQ#IH^upz8O=*s)82)u6Re+?H@j;ae+Sp zAz-q{ICu@YFXJ5=Y^ zZYplSal^<3Ejxt+r)N_(Wq@m}9RPpw-HlD}Keg*jBLk#xw?A4?h7KG28!fYP0pkl? zULMPY7@Vfv<<6PU&`xf+<<0?w_x*)eX!Dg{8^%i|2{N`1Q$QMoHsyc|vkV+!AcM2nRz>F3)zYVp;;jwsMRlyq$#YxsnlzGECFJpE6Ta`klE#gvzfr#N!jt4O7flEga)fiz^m2;}Kfhr29z6818wQ)t?nX6+RhycUEX!@m z1J_u)00w}MoY%Pf(zkb=Z8UJKXWfHFlF#5R18&H$YW-ze@QEshc6wtjifT#kwJ25rG>7>>tFF zpZ@mH?%%y626pc$%JXDX)&a60WgQ7zV`BmEyjis6!jrmRxcKzOF^A5?62q!-4A-Hp zJ>UWcyb)k6NP*Cq@}dM@nbWp=_G8D79vFW7_WxTP-i{QoZ29PO5ti(Jm8UK#RE zn)y9AB%a(egx}rvQ1gWizZhB2Rx}`E(+RM~rWJ6F^{pPb1^~tj#M~CnlUq-Fv;5Dw zz3A(kL4C`YG!E_VMqfjsS3>mk&A`HfAPi#)0Spe~c|eR5prMfh14BdDH`1h+?|P&; zuxSU57#Kuz=dNn;)pl$;0@m2H1TMFU1o2d~=?qqG(;m3o##2g6B{R;JEYLsQ0c-4_ z0}+=OvPCc<(6m@Gh( zel>vsDR6KyYAdUO+lI})WMBmVSeXF_Y-1^aQ|3JxLcevU259^C{{h?{RjblvKUV+% N002ovPDHLkV1is)Q)d7G literal 0 HcmV?d00001 diff --git a/display/entry/src/main/resources/base/media/phone.png b/display/entry/src/main/resources/base/media/phone.png new file mode 100644 index 0000000000000000000000000000000000000000..7f0e68f30a71c577223e3c3fd114afae5b399221 GIT binary patch literal 725 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

c)ijgxDm}8EsRXFt3h@+Ufr7@DN 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 literal 0 HcmV?d00001 diff --git a/display/entry/src/main/resources/base/media/status.png b/display/entry/src/main/resources/base/media/status.png new file mode 100644 index 0000000000000000000000000000000000000000..fff3a2d0045dafea80ffd0b85027edcea0ac3383 GIT binary patch literal 302 zcmV+}0nz@6P)NklXuFv$8 zm-416*%-ElA4ga>U;`f4@nTMM0qV=M>IL|ZyNogMSm&=&qYt1!r7An9iTkvbXy(b!Or5AK-4YoDmFV6ao3CU0kHUIzs07*qoM6N<$f>!5t AYXATM literal 0 HcmV?d00001 diff --git a/display/entry/src/main/resources/base/profile/main_pages.json b/display/entry/src/main/resources/base/profile/main_pages.json index cfe70b342..4b73c7b4f 100644 --- a/display/entry/src/main/resources/base/profile/main_pages.json +++ b/display/entry/src/main/resources/base/profile/main_pages.json @@ -6,6 +6,7 @@ "pages/BluetoothDialog", "pages/ConfirmDialogWearable", "pages/PinDialogWearable", - "pages/InputPinDialogWearable" + "pages/InputPinDialogWearable", + "pages/picker/DeviceSelect" ] } diff --git a/display/entry/src/main/resources/es_US/element/string.json b/display/entry/src/main/resources/es_US/element/string.json index b09c22c07..15b5fab8d 100644 --- a/display/entry/src/main/resources/es_US/element/string.json +++ b/display/entry/src/main/resources/es_US/element/string.json @@ -48,6 +48,10 @@ "attr":{ "priority":"translate" } + }, + { + "name":"local_machine", + "value":"local machine" } ] } \ No newline at end of file diff --git a/display/entry/src/main/resources/zh_CN/element/string.json b/display/entry/src/main/resources/zh_CN/element/string.json index 90d642d9e..eee4e696c 100644 --- a/display/entry/src/main/resources/zh_CN/element/string.json +++ b/display/entry/src/main/resources/zh_CN/element/string.json @@ -104,6 +104,10 @@ { "name":"dm_password_error", "value":"密码错误,连接失败。" + }, + { + "name":"local_machine", + "value":"本机" } ] } \ No newline at end of file diff --git a/interfaces/inner_kits/native_cpp/include/dm_device_info.h b/interfaces/inner_kits/native_cpp/include/dm_device_info.h index b98d58895..aa21ac17b 100644 --- a/interfaces/inner_kits/native_cpp/include/dm_device_info.h +++ b/interfaces/inner_kits/native_cpp/include/dm_device_info.h @@ -208,6 +208,11 @@ DmDeviceBasicInfo { * NetworkId of the device. */ char networkId[DM_MAX_DEVICE_ID_LEN] = {0}; + /** + * Extra data of the device. + * include json keys: "CUSTOM_DATA" + */ + std::string extraData; } DmDeviceBasicInfo; /** diff --git a/interfaces/kits/js4.0/include/dm_native_util.h b/interfaces/kits/js4.0/include/dm_native_util.h index 68d0edb9a..38a4158e3 100644 --- a/interfaces/kits/js4.0/include/dm_native_util.h +++ b/interfaces/kits/js4.0/include/dm_native_util.h @@ -87,7 +87,8 @@ void DmDeviceIconInfoToJs(const napi_env &env, const DmDeviceIconInfo &deviceIco void DmDeviceProfileInfoToJsArray(const napi_env &env, const std::vector &devInfos, napi_value &arrayResult); bool JsToDmDeviceProfileInfos(const napi_env &env, const napi_value &jsObj, std::vector &devInfos); - +void JsToDiscoveryParam(const napi_env &env, const napi_value &object, + std::map &discParam); } // namespace DistributedHardware } // namespace OHOS #endif // OHOS_DM_NATIVE_UTIL_H diff --git a/interfaces/kits/js4.0/include/native_devicemanager_js.h b/interfaces/kits/js4.0/include/native_devicemanager_js.h index 0bd52b05d..02c473977 100644 --- a/interfaces/kits/js4.0/include/native_devicemanager_js.h +++ b/interfaces/kits/js4.0/include/native_devicemanager_js.h @@ -334,8 +334,8 @@ public: private: static void ReleasePublishCallback(std::string &bundleName); static void ReleaseDiscoveryCallback(std::string &bundleName); - static void LockDiscoveryCallbackMutex(napi_env env, std::string &bundleName, std::string &extra, - uint32_t subscribeId); + static void LockDiscoveryCallbackMutex(napi_env env, std::string &bundleName, + std::map discParam, std::string &extra, uint32_t subscribeId); static void ClearBundleCallbacks(std::string &bundleName); static napi_value JsOffFrench(napi_env env, int32_t num, napi_value thisVar, napi_value argv[]); static napi_value JsOnFrench(napi_env env, int32_t num, napi_value thisVar, napi_value argv[]); diff --git a/interfaces/kits/js4.0/src/dm_native_util.cpp b/interfaces/kits/js4.0/src/dm_native_util.cpp index 711ebe4c5..91d06911d 100644 --- a/interfaces/kits/js4.0/src/dm_native_util.cpp +++ b/interfaces/kits/js4.0/src/dm_native_util.cpp @@ -47,7 +47,8 @@ const int32_t MAX_OBJECT_LEN = 4096; void JsObjectToString(const napi_env &env, const napi_value &object, const std::string &fieldStr, char *dest, const int32_t destLen) { - if (dest == nullptr || destLen < 0 || destLen > MAX_OBJECT_LEN) { + if (dest == nullptr || destLen < 0 || (destLen > MAX_OBJECT_LEN && fieldStr != CUSTOM_DESCRIPTION) || + destLen > DM_NAPI_DESCRIPTION_BUF_LENGTH) { return; } bool hasProperty = false; @@ -292,6 +293,7 @@ void DmDeviceBasicToJsObject(napi_env env, const DmDeviceBasicInfo &devInfo, nap SetValueUtf8String(env, "deviceName", devInfo.deviceName, result); std::string deviceType = GetDeviceTypeById(static_cast(devInfo.deviceTypeId)); SetValueUtf8String(env, "deviceType", deviceType.c_str(), result); + SetValueUtf8String(env, "extraData", devInfo.extraData.c_str(), result); } void JsToDmPublishInfo(const napi_env &env, const napi_value &object, DmPublishInfo &info) @@ -431,6 +433,17 @@ void JsToDmDiscoveryExtra(const napi_env &env, const napi_value &object, std::st LOGI("JsToDmDiscoveryExtra, extra :%{public}s", extra.c_str()); } +void JsToDiscoveryParam(const napi_env &env, const napi_value &object, + std::map &discParam) +{ + char customData[DM_NAPI_BUF_LENGTH] = ""; + JsObjectToString(env, object, "CUSTOM_DATA", customData, sizeof(customData)); + discParam.insert(std::pair(PARAM_KEY_CUSTOM_DATA, customData)); + char capability[DM_NAPI_BUF_LENGTH] = ""; + JsObjectToString(env, object, "DISC_CAPABILITY", capability, sizeof(capability)); + discParam.insert(std::pair(PARAM_KEY_DISC_CAPABILITY, capability)); +} + void InsertMapParames(nlohmann::json &bindParamObj, std::map &bindParamMap) { LOGI("Insert map parames start"); diff --git a/interfaces/kits/js4.0/src/native_devicemanager_js.cpp b/interfaces/kits/js4.0/src/native_devicemanager_js.cpp index ed6317237..48fe2775b 100644 --- a/interfaces/kits/js4.0/src/native_devicemanager_js.cpp +++ b/interfaces/kits/js4.0/src/native_devicemanager_js.cpp @@ -1482,8 +1482,8 @@ napi_value DeviceManagerNapi::GetDeviceType(napi_env env, napi_callback_info inf return result; } -void DeviceManagerNapi::LockDiscoveryCallbackMutex(napi_env env, std::string &bundleName, std::string &extra, - uint32_t subscribeId) +void DeviceManagerNapi::LockDiscoveryCallbackMutex(napi_env env, std::string &bundleName, + std::map discParam, std::string &extra, uint32_t subscribeId) { std::shared_ptr discoveryCallback = nullptr; { @@ -1497,7 +1497,10 @@ void DeviceManagerNapi::LockDiscoveryCallbackMutex(napi_env env, std::string &bu } } uint64_t tokenId = OHOS::IPCSkeleton::GetSelfTokenID(); - int32_t ret = DeviceManager::GetInstance().StartDeviceDiscovery(bundleName, tokenId, extra, discoveryCallback); + discParam.insert(std::pair(PARAM_KEY_SUBSCRIBE_ID, std::to_string(tokenId))); + std::map filterOps; + filterOps.insert(std::pair(PARAM_KEY_FILTER_OPTIONS, extra)); + int32_t ret = DeviceManager::GetInstance().StartDiscovering(bundleName, discParam, filterOps, discoveryCallback); if (ret != 0) { LOGE("Discovery failed, bundleName %{public}s, ret %{public}d", bundleName.c_str(), ret); CreateBusinessError(env, ret); @@ -1510,6 +1513,7 @@ napi_value DeviceManagerNapi::StartDeviceDiscover(napi_env env, napi_callback_in { LOGI("StartDeviceDiscover in"); std::string extra = ""; + std::map discParam; napi_value result = nullptr; napi_value thisVar = nullptr; size_t argcNum = 0; @@ -1526,11 +1530,13 @@ napi_value DeviceManagerNapi::StartDeviceDiscover(napi_env env, napi_callback_in if (!JsToDiscoverTargetType(env, argv[DM_NAPI_ARGS_ZERO], discoverTargetType) || discoverTargetType != 1) { return nullptr; } + JsToDiscoveryParam(env, argv[DM_NAPI_ARGS_ZERO], discParam); } else if (argcNum == DM_NAPI_ARGS_TWO) { GET_PARAMS(env, info, DM_NAPI_ARGS_TWO); if (!JsToDiscoverTargetType(env, argv[DM_NAPI_ARGS_ZERO], discoverTargetType) || discoverTargetType != 1) { return nullptr; } + JsToDiscoveryParam(env, argv[DM_NAPI_ARGS_ZERO], discParam); napi_valuetype objectType = napi_undefined; napi_typeof(env, argv[DM_NAPI_ARGS_ONE], &objectType); if (!(CheckArgsType(env, objectType == napi_object, "filterOptions", "object or undefined"))) { @@ -1538,7 +1544,7 @@ napi_value DeviceManagerNapi::StartDeviceDiscover(napi_env env, napi_callback_in } JsToDmDiscoveryExtra(env, argv[DM_NAPI_ARGS_ONE], extra); } - LockDiscoveryCallbackMutex(env, deviceManagerWrapper->bundleName_, extra, subscribeId); + LockDiscoveryCallbackMutex(env, deviceManagerWrapper->bundleName_, discParam, extra, subscribeId); napi_get_undefined(env, &result); return result; } diff --git a/sa_profile/device_manager.cfg b/sa_profile/device_manager.cfg index 4a495502f..f99cf2b50 100644 --- a/sa_profile/device_manager.cfg +++ b/sa_profile/device_manager.cfg @@ -30,6 +30,7 @@ "ohos.permission.ACCESS_BLUETOOTH", "ohos.permission.MANAGE_BLUETOOTH", "ohos.permission.MANAGE_SETTINGS", + "ohos.permission.MANAGE_SOFTBUS_NETWORK", "ohos.permission.START_SYSTEM_DIALOG", "ohos.permission.INTERACT_ACROSS_LOCAL_ACCOUNTS", "ohos.permission.GET_BUNDLE_RESOURCES", @@ -40,6 +41,9 @@ "ohos.permission.ACCESS_SERVICE_DP", "ohos.permission.ACCESS_SENSING_WITH_ULTRASOUND" ], + "permission_acls" : [ + "ohos.permission.MANAGE_SOFTBUS_NETWORK" + ], "jobs" : { "on-start" : "service:device_manager" }, diff --git a/services/implementation/BUILD.gn b/services/implementation/BUILD.gn index 3b442952c..6d20598cf 100644 --- a/services/implementation/BUILD.gn +++ b/services/implementation/BUILD.gn @@ -124,6 +124,7 @@ if (defined(ohos_lite)) { "include/dependency/multipleuser", "include/dependency/hichain", "include/dependency/softbus", + "include/i18n", "${common_path}/include", "${common_path}/include/dfx", "${common_path}/include/dfx/standard", @@ -190,6 +191,7 @@ if (defined(ohos_lite)) { "src/dependency/softbus/softbus_session.cpp", "src/device_manager_service_impl.cpp", "src/devicestate/dm_device_state_manager.cpp", + "src/i18n/dm_language_manager.cpp", ] public_configs = [ ":devicemanagerserviceimpl_config" ] diff --git a/services/implementation/include/authentication/dm_auth_manager.h b/services/implementation/include/authentication/dm_auth_manager.h index 3aa067a63..aef138cdf 100644 --- a/services/implementation/include/authentication/dm_auth_manager.h +++ b/services/implementation/include/authentication/dm_auth_manager.h @@ -499,7 +499,7 @@ private: void JoinLnn(const std::string &deviceId); int32_t CheckAuthParamVaild(const std::string &pkgName, int32_t authType, const std::string &deviceId, const std::string &extra); - int32_t CheckAuthParamVaildExtra(const std::string &extra); + int32_t CheckAuthParamVaildExtra(const std::string &extra, const std::string &deviceId); bool CheckProcessNameInWhiteList(const std::string &processName); void ProcessSourceMsg(); void ProcessSinkMsg(); @@ -582,6 +582,7 @@ private: bool IsSinkMsgValid(); bool IsSourceMsgValid(); void ProcessReqPublicKey(); + int32_t GetTokenIdByBundleName(int32_t userId, std::string &bundleName, int64_t &tokenId); private: std::shared_ptr softbusConnector_; diff --git a/services/implementation/include/dependency/softbus/softbus_connector.h b/services/implementation/include/dependency/softbus/softbus_connector.h index a12651e1e..293c28562 100644 --- a/services/implementation/include/dependency/softbus/softbus_connector.h +++ b/services/implementation/include/dependency/softbus/softbus_connector.h @@ -84,6 +84,13 @@ public: * @tc.type: FUNC */ static void JoinLnnByHml(int32_t sessionId, int32_t sessionKeyId, int32_t remoteSessionKeyId); + + /** + * @tc.name: SoftbusConnector::JoinLnnByHml + * @tc.desc: join lnn by session id + * @tc.type: FUNC + */ + static void JoinLnnByHml(const int32_t sessionId); public: SoftbusConnector(); ~SoftbusConnector(); diff --git a/services/implementation/include/dependency/softbus/softbus_session.h b/services/implementation/include/dependency/softbus/softbus_session.h index 2e7be8f57..289a9cd60 100644 --- a/services/implementation/include/dependency/softbus/softbus_session.h +++ b/services/implementation/include/dependency/softbus/softbus_session.h @@ -65,7 +65,7 @@ public: * @tc.desc: Open HML AuthSession of the Softbus Session * @tc.type: FUNC */ - int32_t OpenAuthSessionWithPara(const std::string &deviceId, int32_t actionId, bool enable160m); + int32_t OpenAuthSessionWithPara(const std::string &deviceId, int32_t actionId, bool isEnable160m); /** * @tc.name: SoftbusSession::CloseAuthSession diff --git a/services/implementation/include/i18n/dm_language_manager.h b/services/implementation/include/i18n/dm_language_manager.h new file mode 100644 index 000000000..9cbc36243 --- /dev/null +++ b/services/implementation/include/i18n/dm_language_manager.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef OHOS_DM_LANGUAGE_MANAGER_H +#define OHOS_DM_LANGUAGE_MANAGER_H + +#include +#include + +#include "cJSON.h" +#include "dm_single_instance.h" +namespace OHOS { +namespace DistributedHardware { + +class DmLanguageManager { + DM_DECLARE_SINGLE_INSTANCE_BASE(DmLanguageManager); + +public: + DmLanguageManager() {} + ~DmLanguageManager() {} + std::string GetSystemParam(const std::string &key); + void GetLocaleByLanguage(const std::string &language, std::set &localeSet); + std::string GetTextBySystemLocale(const cJSON *const textObj, const std::set &localeSet); + std::string GetTextBySystemLanguage(const std::string &text); +}; +} // namespace DistributedHardware +} // namespace OHOS +#endif // OHOS_DM_LANGUAGE_MANAGER_H diff --git a/services/implementation/src/authentication/dm_auth_manager.cpp b/services/implementation/src/authentication/dm_auth_manager.cpp index 6bae0a4a8..00c4eb376 100644 --- a/services/implementation/src/authentication/dm_auth_manager.cpp +++ b/services/implementation/src/authentication/dm_auth_manager.cpp @@ -37,6 +37,7 @@ #include "dm_constants.h" #include "dm_crypto.h" #include "dm_dialog_manager.h" +#include "dm_language_manager.h" #include "dm_log.h" #include "dm_radar_helper.h" #include "dm_random.h" @@ -168,14 +169,6 @@ int32_t DmAuthManager::CheckAuthParamVaild(const std::string &pkgName, int32_t a return ERR_DM_AUTH_BUSINESS_BUSY; } - if (!softbusConnector_->HaveDeviceInMap(deviceId)) { - LOGE("CheckAuthParamVaild failed, the discoveryDeviceInfoMap_ not have this device."); - listener_->OnAuthResult(processInfo_, peerTargetId_.deviceId, "", STATUS_DM_AUTH_DEFAULT, - ERR_DM_INPUT_PARA_INVALID); - listener_->OnBindResult(processInfo_, peerTargetId_, ERR_DM_INPUT_PARA_INVALID, STATUS_DM_AUTH_DEFAULT, ""); - return ERR_DM_INPUT_PARA_INVALID; - } - if ((authType == AUTH_TYPE_IMPORT_AUTH_CODE) && (!IsAuthCodeReady(pkgName))) { LOGE("Auth code not exist."); listener_->OnAuthResult(processInfo_, peerTargetId_.deviceId, "", STATUS_DM_AUTH_DEFAULT, @@ -186,9 +179,18 @@ int32_t DmAuthManager::CheckAuthParamVaild(const std::string &pkgName, int32_t a return DM_OK; } -int32_t DmAuthManager::CheckAuthParamVaildExtra(const std::string &extra) +int32_t DmAuthManager::CheckAuthParamVaildExtra(const std::string &extra, const std::string &deviceId) { nlohmann::json jsonObject = nlohmann::json::parse(extra, nullptr, false); + if ((jsonObject.is_discarded() || !IsString(jsonObject, PARAM_KEY_CONN_SESSIONTYPE) || + jsonObject[PARAM_KEY_CONN_SESSIONTYPE].get() != CONN_SESSION_TYPE_HML) && + !softbusConnector_->HaveDeviceInMap(deviceId)) { + LOGE("CheckAuthParamVaild failed, the discoveryDeviceInfoMap_ not have this device."); + listener_->OnAuthResult(processInfo_, peerTargetId_.deviceId, "", STATUS_DM_AUTH_DEFAULT, + ERR_DM_INPUT_PARA_INVALID); + listener_->OnBindResult(processInfo_, peerTargetId_, ERR_DM_INPUT_PARA_INVALID, STATUS_DM_AUTH_DEFAULT, ""); + return ERR_DM_INPUT_PARA_INVALID; + } if (jsonObject.is_discarded()) { return DM_OK; } @@ -251,8 +253,10 @@ void DmAuthManager::GetAuthParam(const std::string &pkgName, int32_t authType, char localDeviceId[DEVICE_UUID_LENGTH] = {0}; GetDevUdid(localDeviceId, DEVICE_UUID_LENGTH); std::string localUdid = static_cast(localDeviceId); - authRequestContext_->hostPkgName = pkgName; - authRequestContext_->hostPkgLabel = GetBundleLable(pkgName); + std::string realPkgName = GetSubStr(pkgName, PICKER_PROXY_SPLIT, 1); + realPkgName = realPkgName.empty() ? pkgName : realPkgName; + authRequestContext_->hostPkgName = realPkgName; + authRequestContext_->hostPkgLabel = GetBundleLable(realPkgName); authRequestContext_->authType = authType; authRequestContext_->localDeviceName = softbusConnector_->GetLocalDeviceName(); authRequestContext_->localDeviceTypeId = softbusConnector_->GetLocalDeviceTypeId(); @@ -263,6 +267,9 @@ void DmAuthManager::GetAuthParam(const std::string &pkgName, int32_t authType, uint32_t tokenId = 0 ; MultipleUserConnector::GetTokenIdAndForegroundUserId(tokenId, authRequestContext_->localUserId); authRequestContext_->tokenId = static_cast(tokenId); + if (realPkgName != pkgName) { + GetTokenIdByBundleName(authRequestContext_->localUserId, realPkgName, authRequestContext_->tokenId); + } authRequestContext_->localAccountId = MultipleUserConnector::GetOhosAccountIdByUserId(authRequestContext_->localUserId); authRequestContext_->isOnline = false; @@ -288,7 +295,8 @@ void DmAuthManager::ParseJsonObject(nlohmann::json jsonObject) authRequestContext_->appOperation = jsonObject[APP_OPERATION_KEY].get(); } if (IsString(jsonObject, CUSTOM_DESCRIPTION_KEY)) { - authRequestContext_->customDesc = jsonObject[CUSTOM_DESCRIPTION_KEY].get(); + authRequestContext_->customDesc = DmLanguageManager::GetInstance(). + GetTextBySystemLanguage(jsonObject[CUSTOM_DESCRIPTION_KEY].get()); } if (IsString(jsonObject, APP_THUMBNAIL)) { authRequestContext_->appThumbnail = jsonObject[APP_THUMBNAIL].get(); @@ -398,7 +406,7 @@ int32_t DmAuthManager::AuthenticateDevice(const std::string &pkgName, int32_t au LOGE("DmAuthManager::AuthenticateDevice failed, param is invaild."); return ret; } - ret = CheckAuthParamVaildExtra(extra); + ret = CheckAuthParamVaildExtra(extra, deviceId); if (ret != DM_OK) { LOGE("CheckAuthParamVaildExtra failed, param is invaild."); return ret; @@ -3213,5 +3221,18 @@ void DmAuthManager::JoinLnn(const std::string &deviceId) } softbusConnector_->JoinLnn(deviceId); } + +int32_t DmAuthManager::GetTokenIdByBundleName(int32_t userId, std::string &bundleName, int64_t &tokenId) +{ + int32_t ret = AppManager::GetInstance().GetNativeTokenIdByName(bundleName, tokenId); + if (ret == DM_OK) { + return DM_OK; + } + ret = AppManager::GetInstance().GetHapTokenIdByName(userId, bundleName, 0, tokenId); + if (ret != DM_OK) { + LOGE("get tokenId by bundleName failed %{public}s", GetAnonyString(bundleName).c_str()); + } + return ret; +} } // namespace DistributedHardware } // namespace OHOS diff --git a/services/implementation/src/dependency/softbus/softbus_connector.cpp b/services/implementation/src/dependency/softbus/softbus_connector.cpp index f93432802..aa13c06f4 100644 --- a/services/implementation/src/dependency/softbus/softbus_connector.cpp +++ b/services/implementation/src/dependency/softbus/softbus_connector.cpp @@ -116,6 +116,18 @@ void SoftbusConnector::JoinLnnByHml(int32_t sessionId, int32_t sessionKeyId, int } } +void SoftbusConnector::JoinLnnByHml(const int32_t sessionId) +{ + LOGI("start, JoinLnnByHml sessionId: %{public}d.", sessionId); + ConnectionAddr addrInfo; + addrInfo.type = CONNECTION_ADDR_SESSION; + addrInfo.info.session.sessionId = sessionId; + int32_t ret = ::JoinLNN(DM_PKG_NAME, &addrInfo, OnSoftbusJoinLNNResult); + if (ret != DM_OK) { + LOGE("[SOFTBUS]JoinLNN failed, ret: %{public}d.", ret); + } +} + int32_t SoftbusConnector::GetUdidByNetworkId(const char *networkId, std::string &udid) { LOGI("start, networkId: %{public}s.", GetAnonyString(std::string(networkId)).c_str()); diff --git a/services/implementation/src/dependency/softbus/softbus_session.cpp b/services/implementation/src/dependency/softbus/softbus_session.cpp index 4c17ce3ae..76d008140 100644 --- a/services/implementation/src/dependency/softbus/softbus_session.cpp +++ b/services/implementation/src/dependency/softbus/softbus_session.cpp @@ -114,7 +114,7 @@ int32_t SoftbusSession::OpenAuthSession(const std::string &deviceId) return sessionId; } -int32_t SoftbusSession::OpenAuthSessionWithPara(const std::string &deviceId, int32_t actionId, bool enable160m) +int32_t SoftbusSession::OpenAuthSessionWithPara(const std::string &deviceId, int32_t actionId, bool isEnable160m) { #ifdef DEVICE_MANAGER_COMMON_FLAG LOGE("[SOFTBUS] OpenAuthSessionWithPara no implement"); @@ -124,7 +124,7 @@ int32_t SoftbusSession::OpenAuthSessionWithPara(const std::string &deviceId, int LinkPara para; para.type = PARA_ACTION; para.action.actionId = actionId; - para.enable160M = enable160m; + para.enable160M = isEnable160m; para.accountInfo = false; int32_t sessionId = ::OpenAuthSessionWithPara(DM_SESSION_NAME, ¶); if (sessionId < 0) { diff --git a/services/implementation/src/i18n/dm_language_manager.cpp b/services/implementation/src/i18n/dm_language_manager.cpp new file mode 100644 index 000000000..77f080ee5 --- /dev/null +++ b/services/implementation/src/i18n/dm_language_manager.cpp @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "dm_language_manager.h" + +#include "cJSON.h" +#include + +#include "dm_constants.h" +#include "dm_log.h" +#include "parameter.h" + +namespace OHOS { +namespace DistributedHardware { +DM_IMPLEMENT_SINGLE_INSTANCE(DmLanguageManager); +const int32_t MAX_LEN = 128; +const std::string SYSTEM_LANGUAGE_KEY = "persist.global.language"; +const std::string SYSTEM_LANGUAGE_LOCALE_KEY = "persist.global.locale"; +const std::string DEFAULT_LANGUAGE = "zh-Hans"; +const std::string LANGUAGE_EN = "en-Latn_US"; +const std::string LANGUAGE_AND_LOCALE_STR = + R"({ + "zh-Hant": [ + { + "persist.global.locale": "zh-Hant-HK" + }, + { + "persist.global.locale": "zh-Hant-TW" + } + ] +})"; + +std::string DmLanguageManager::GetSystemParam(const std::string &key) +{ + char value[MAX_LEN] = {0}; + int32_t ret = GetParameter(key.c_str(), "", value, MAX_LEN); + if (ret <= 0) { + LOGE("GetSystemParam %{public}s failed", key.c_str()); + return ""; + } + return std::string(value); +} + +void DmLanguageManager::GetLocaleByLanguage(const std::string &language, std::set &localeSet) +{ + cJSON *languageAndLocaleObj = cJSON_Parse(LANGUAGE_AND_LOCALE_STR.c_str()); + if (languageAndLocaleObj == NULL) { + LOGE("parse languageAndLocaleObj failed"); + return; + } + cJSON *languageObj = cJSON_GetObjectItem(languageAndLocaleObj, language.c_str()); + if (languageObj == NULL || !cJSON_IsArray(languageObj)) { + cJSON_Delete(languageAndLocaleObj); + return; + } + cJSON *item = NULL; + cJSON_ArrayForEach(item, languageObj) { + if (!cJSON_IsObject(item)) { + LOGE("item is not object!"); + continue; + } + cJSON* localeObj = cJSON_GetObjectItemCaseSensitive(item, SYSTEM_LANGUAGE_LOCALE_KEY.c_str()); + if (!cJSON_IsString(localeObj) || localeObj->valuestring == NULL) { + LOGE("Get localeObj fail!"); + continue; + } + localeSet.insert(localeObj->valuestring); + } + cJSON_Delete(languageAndLocaleObj); +} + +std::string DmLanguageManager::GetTextBySystemLanguage(const std::string &text) +{ + if (text.empty()) { + return ""; + } + cJSON *textObj = cJSON_Parse(text.c_str()); + if (textObj == NULL) { + LOGE("parse text failed"); + return text; + } + std::string resultText = text; + std::string language = GetSystemParam(SYSTEM_LANGUAGE_KEY); + language = language.empty() ? DEFAULT_LANGUAGE : language; + std::set localeSet; + GetLocaleByLanguage(language, localeSet); + if (localeSet.size() > 0) { + resultText = GetTextBySystemLocale(textObj, localeSet); + if (!resultText.empty()) { + cJSON_Delete(textObj); + return resultText; + } + } + cJSON *languageJson = cJSON_GetObjectItem(textObj, language.c_str()); + if (languageJson != NULL && cJSON_IsString(languageJson)) { + resultText = std::string(languageJson->valuestring); + cJSON_Delete(textObj); + return resultText; + } + cJSON *defaultJson = cJSON_GetObjectItem(textObj, DEFAULT_LANGUAGE.c_str()); + if (defaultJson != NULL && cJSON_IsString(defaultJson)) { + resultText = std::string(defaultJson->valuestring); + cJSON_Delete(textObj); + return resultText; + } + cJSON *enJson = cJSON_GetObjectItem(textObj, LANGUAGE_EN.c_str()); + if (enJson != NULL && cJSON_IsString(enJson)) { + resultText = std::string(enJson->valuestring); + cJSON_Delete(textObj); + return resultText; + } + cJSON_Delete(textObj); + return ""; +} + +std::string DmLanguageManager::GetTextBySystemLocale(const cJSON *const textObj, + const std::set &localeSet) +{ + std::string resultText = ""; + std::string languageLocale = GetSystemParam(SYSTEM_LANGUAGE_LOCALE_KEY); + cJSON *languageLocaleson = cJSON_GetObjectItem(textObj, languageLocale.c_str()); + if (languageLocaleson != NULL && cJSON_IsString(languageLocaleson)) { + resultText = std::string(languageLocaleson->valuestring); + return resultText; + } + for (std::string locale : localeSet) { + cJSON *localesonObj = cJSON_GetObjectItem(textObj, locale.c_str()); + if (localesonObj != NULL && cJSON_IsString(localesonObj)) { + resultText = std::string(localesonObj->valuestring); + return resultText; + } + } + return ""; +} +} // namespace DistributedHardware +} // namespace OHOS \ No newline at end of file diff --git a/services/service/include/device_manager_service.h b/services/service/include/device_manager_service.h index b4ad67f6a..3e9718169 100644 --- a/services/service/include/device_manager_service.h +++ b/services/service/include/device_manager_service.h @@ -273,6 +273,7 @@ private: std::vector backgroundUserIds); void ProcessCheckSumByBT(std::string networkId, std::vector foregroundUserIds, std::vector backgroundUserIds); + void AddHmlInfoToBindParam(int32_t actionId, std::string &bindParam); #if !(defined(__LITEOS_M__) || defined(LITE_DEVICE)) void SubscribeAccountCommonEvent(); diff --git a/services/service/include/softbus/softbus_listener.h b/services/service/include/softbus/softbus_listener.h index 9745804c1..e6f8f1dcb 100644 --- a/services/service/include/softbus/softbus_listener.h +++ b/services/service/include/softbus/softbus_listener.h @@ -25,6 +25,7 @@ #include #include +#include "cJSON.h" #include "softbus_bus_center.h" #include "dm_device_info.h" #include "dm_publish_info.h" @@ -114,6 +115,7 @@ public: int32_t GetAllTrustedDeviceList(const std::string &pkgName, const std::string &extra, std::vector &deviceList); int32_t GetUdidFromDp(const std::string &udidHash, std::string &udid); + static void GetActionId(const std::string &deviceId, int32_t &actionId); private: static int32_t FillDeviceInfo(const DeviceInfo &device, DmDeviceInfo &dmDevice); static void ParseConnAddrInfo(const ConnectionAddr *addrInfo, nlohmann::json &jsonObj); @@ -121,6 +123,9 @@ private: #if !(defined(__LITEOS_M__) || defined(LITE_DEVICE)) void ConvertAclToDeviceInfo(DistributedDeviceProfile::AccessControlProfile &profile, DmDeviceInfo &dmDevice); #endif + static int32_t GetAttrFromCustomData(const cJSON *const customDataJson, DmDeviceInfo &dmDevInfo, + int32_t &actionId); + static int32_t GetAttrFromExtraData(DmDeviceInfo &dmDevInfo, int32_t &actionId); private: static std::string hostName_; static bool isRadarSoLoad_; diff --git a/services/service/src/advertise/advertise_manager.cpp b/services/service/src/advertise/advertise_manager.cpp index 172f0565b..ef2abd1e9 100644 --- a/services/service/src/advertise/advertise_manager.cpp +++ b/services/service/src/advertise/advertise_manager.cpp @@ -51,6 +51,9 @@ int32_t AdvertiseManager::StartAdvertising(const std::string &pkgName, if (capability == DM_CAPABILITY_APPROACH || capability == DM_CAPABILITY_TOUCH) { dmPubInfo.mode = DmDiscoverMode::DM_DISCOVER_MODE_ACTIVE; } + if (capability == DM_CAPABILITY_OOP) { + dmPubInfo.ranging = false; + } std::string customData = ""; if (advertiseParam.find(PARAM_KEY_CUSTOM_DATA) != advertiseParam.end()) { customData = advertiseParam.find(PARAM_KEY_CUSTOM_DATA)->second; diff --git a/services/service/src/device_manager_service.cpp b/services/service/src/device_manager_service.cpp index e60267060..3375acca0 100644 --- a/services/service/src/device_manager_service.cpp +++ b/services/service/src/device_manager_service.cpp @@ -15,6 +15,7 @@ #include "device_manager_service.h" +#include "cJSON.h" #include #include @@ -303,11 +304,13 @@ int32_t DeviceManagerService::GetTrustedDeviceList(const std::string &pkgName, c return DM_OK; } if (!onlineDeviceList.empty() && IsDMServiceImplReady()) { + std::string queryPkgName = GetSubStr(pkgName, PICKER_PROXY_SPLIT, 1); + queryPkgName = queryPkgName.empty() ? pkgName : queryPkgName; std::unordered_map udidMap; - if (PermissionManager::GetInstance().CheckWhiteListSystemSA(pkgName)) { + if (PermissionManager::GetInstance().CheckWhiteListSystemSA(queryPkgName)) { udidMap = dmServiceImpl_->GetAppTrustDeviceIdList(std::string(ALL_PKGNAME)); } else { - udidMap = dmServiceImpl_->GetAppTrustDeviceIdList(pkgName); + udidMap = dmServiceImpl_->GetAppTrustDeviceIdList(queryPkgName); } for (auto item : onlineDeviceList) { #if !(defined(__LITEOS_M__) || defined(LITE_DEVICE)) @@ -648,16 +651,24 @@ int32_t DeviceManagerService::BindDevice(const std::string &pkgName, int32_t aut } #endif PeerTargetId targetId; - ConnectionAddrType addrType; - int32_t ret = SoftbusListener::GetTargetInfoFromCache(queryDeviceId, targetId, addrType); - if (ret != DM_OK) { - LOGE("BindDevice failed, cannot get target info from cached discovered device map."); - return ERR_DM_BIND_INPUT_PARA_INVALID; - } std::map bindParamMap; + std::string bindParamStr = bindParam; + int32_t actionId = 0; + SoftbusListener::GetActionId(queryDeviceId, actionId); + if (actionId > 0) { + targetId.deviceId = queryDeviceId; + AddHmlInfoToBindParam(actionId, bindParamStr); + } else { + ConnectionAddrType addrType; + int32_t ret = SoftbusListener::GetTargetInfoFromCache(queryDeviceId, targetId, addrType); + if (ret != DM_OK) { + LOGE("BindDevice failed, cannot get target info from cached discovered device map."); + return ERR_DM_BIND_INPUT_PARA_INVALID; + } + bindParamMap.insert(std::pair(PARAM_KEY_CONN_ADDR_TYPE, std::to_string(addrType))); + } bindParamMap.insert(std::pair(PARAM_KEY_AUTH_TYPE, std::to_string(authType))); - bindParamMap.insert(std::pair(PARAM_KEY_BIND_EXTRA_DATA, bindParam)); - bindParamMap.insert(std::pair(PARAM_KEY_CONN_ADDR_TYPE, std::to_string(addrType))); + bindParamMap.insert(std::pair(PARAM_KEY_BIND_EXTRA_DATA, bindParamStr)); return dmServiceImpl_->BindTarget(pkgName, targetId, bindParamMap); } @@ -692,13 +703,15 @@ int32_t DeviceManagerService::UnBindDevice(const std::string &pkgName, const std char localUdid[DEVICE_UUID_LENGTH] = {0}; GetDevUdid(localUdid, DEVICE_UUID_LENGTH); uint64_t tokenId = 0; - int32_t bindLevel = dmServiceImpl_->GetBindLevel(pkgName, std::string(localUdid), udid, tokenId); + std::string unbindPkgName = GetSubStr(pkgName, PICKER_PROXY_SPLIT, 1); + unbindPkgName = unbindPkgName.empty() ? pkgName : unbindPkgName; + int32_t bindLevel = dmServiceImpl_->GetBindLevel(unbindPkgName, std::string(localUdid), udid, tokenId); LOGI("UnAuthenticateDevice get bindlevel %{public}d.", bindLevel); if (bindLevel == INVALIED_BIND_LEVEL) { LOGE("UnAuthenticateDevice failed, Acl not contain the bindLevel %{public}d.", bindLevel); return ERR_DM_FAILED; } - if (dmServiceImpl_->UnBindDevice(pkgName, udid, bindLevel) != DM_OK) { + if (dmServiceImpl_->UnBindDevice(unbindPkgName, udid, bindLevel) != DM_OK) { LOGE("dmServiceImpl_ UnBindDevice failed."); return ERR_DM_FAILED; } @@ -2916,5 +2929,26 @@ std::vector DeviceManagerService::GetDeviceNamePrefixs() } return dmServiceImplExtResident_->GetDeviceNamePrefixs(); } + +void DeviceManagerService::AddHmlInfoToBindParam(int32_t actionId, std::string &bindParam) +{ + cJSON *bindParamObj = cJSON_Parse(bindParam.c_str()); + if (bindParamObj == NULL) { + bindParamObj = cJSON_CreateObject(); + if (bindParamObj == NULL) { + LOGE("Create bindParamObj object failed."); + return; + } + } + cJSON_AddStringToObject(bindParamObj, PARAM_KEY_CONN_SESSIONTYPE, CONN_SESSION_TYPE_HML.c_str()); + cJSON_AddNumberToObject(bindParamObj, PARAM_KEY_HML_ACTIONID, actionId); + char *str = cJSON_PrintUnformatted(bindParamObj); + if (str == nullptr) { + cJSON_Delete(bindParamObj); + return; + } + bindParam = std::string(str); + cJSON_Delete(bindParamObj); +} } // namespace DistributedHardware } // namespace OHOS \ No newline at end of file diff --git a/services/service/src/device_manager_service_listener.cpp b/services/service/src/device_manager_service_listener.cpp index 6b48b0d93..f8b25f8de 100644 --- a/services/service/src/device_manager_service_listener.cpp +++ b/services/service/src/device_manager_service_listener.cpp @@ -14,6 +14,7 @@ */ #include +#include "cJSON.h" #include "device_manager_service_listener.h" @@ -83,6 +84,33 @@ void DeviceManagerServiceListener::ConvertDeviceInfoToDeviceBasicInfo(const std: } deviceBasicInfo.deviceTypeId = info.deviceTypeId; + cJSON *extraDataJsonObj = cJSON_Parse(info.extraData.c_str()); + if (extraDataJsonObj == NULL) { + return; + } + cJSON *customDataJson = cJSON_GetObjectItem(extraDataJsonObj, PARAM_KEY_CUSTOM_DATA); + if (customDataJson == NULL || !cJSON_IsString(customDataJson)) { + cJSON_Delete(extraDataJsonObj); + return; + } + char *customData = cJSON_PrintUnformatted(customDataJson); + if (customData == nullptr) { + cJSON_Delete(extraDataJsonObj); + return; + } + cJSON_Delete(extraDataJsonObj); + cJSON *basicExtraDataJsonObj = cJSON_CreateObject(); + if (basicExtraDataJsonObj == NULL) { + return; + } + cJSON_AddStringToObject(basicExtraDataJsonObj, PARAM_KEY_CUSTOM_DATA, customData); + char *basicExtraData = cJSON_PrintUnformatted(basicExtraDataJsonObj); + if (basicExtraData == nullptr) { + cJSON_Delete(basicExtraDataJsonObj); + return; + } + deviceBasicInfo.extraData = std::string(basicExtraData); + cJSON_Delete(basicExtraDataJsonObj); } void DeviceManagerServiceListener::SetDeviceInfo(std::shared_ptr pReq, @@ -194,6 +222,12 @@ void DeviceManagerServiceListener::ProcessAppStateChange(const ProcessInfo &proc std::vector processInfoVec = GetWhiteListSAProcessInfo(DmCommonNotifyEvent::REG_DEVICE_STATE); ProcessInfo bindProcessInfo = DealBindProcessInfo(processInfo); processInfoVec.push_back(bindProcessInfo); + std::vector allProcessInfos = ipcServerListener_.GetAllProcessInfo(); + for (auto item : allProcessInfos) { + if (item.pkgName.find(PICKER_PROXY_SPLIT + processInfo.pkgName) != std::string::npos) { + processInfoVec.push_back(item); + } + } switch (static_cast(state)) { case static_cast(DmDeviceState::DEVICE_STATE_ONLINE): ProcessAppOnline(processInfoVec, processInfo, state, info, deviceBasicInfo); diff --git a/services/service/src/discovery/discovery_manager.cpp b/services/service/src/discovery/discovery_manager.cpp index a68fe4667..a70e688e0 100644 --- a/services/service/src/discovery/discovery_manager.cpp +++ b/services/service/src/discovery/discovery_manager.cpp @@ -235,8 +235,14 @@ int32_t DiscoveryManager::StartDiscovering4MineLibary(const std::string &pkgName int32_t DiscoveryManager::StartDiscoveringNoMetaType(const std::string &pkgName, DmSubscribeInfo &dmSubInfo, const std::map ¶m) { - (void)param; - if (strcpy_s(dmSubInfo.capability, DM_MAX_DEVICE_CAPABILITY_LEN, DM_CAPABILITY_OSD) != EOK) { + if (param.find(PARAM_KEY_DISC_CAPABILITY) != param.end() && + !param.find(PARAM_KEY_DISC_CAPABILITY)->second.empty()) { + if (strcpy_s(dmSubInfo.capability, DM_MAX_DEVICE_CAPABILITY_LEN, + param.find(PARAM_KEY_DISC_CAPABILITY)->second.c_str()) != EOK) { + LOGE("capability copy err."); + return ERR_DM_START_DISCOVERING_FAILED; + } + } else if (strcpy_s(dmSubInfo.capability, DM_MAX_DEVICE_CAPABILITY_LEN, DM_CAPABILITY_OSD) != EOK) { LOGE("capability copy err."); return ERR_DM_START_DISCOVERING_FAILED; } @@ -247,7 +253,11 @@ int32_t DiscoveryManager::StartDiscoveringNoMetaType(const std::string &pkgName, std::lock_guard capLock(capabilityMapLocks_); capabilityMap_[pkgName] = std::string(dmSubInfo.capability); } - int32_t ret = softbusListener_->RefreshSoftbusLNN(DM_PKG_NAME, dmSubInfo, LNN_DISC_CAPABILITY); + std::string customData = LNN_DISC_CAPABILITY; + if (param.find(PARAM_KEY_CUSTOM_DATA) != param.end() && !param.find(PARAM_KEY_CUSTOM_DATA)->second.empty()) { + customData = param.find(PARAM_KEY_CUSTOM_DATA)->second; + } + int32_t ret = softbusListener_->RefreshSoftbusLNN(DM_PKG_NAME, dmSubInfo, customData); if (ret != DM_OK) { LOGE("StartDiscoveringNoMetaType failed, softbus refresh lnn ret: %{public}d.", ret); } diff --git a/services/service/src/ipc/standard/ipc_cmd_parser.cpp b/services/service/src/ipc/standard/ipc_cmd_parser.cpp index ad0544c4d..d263c5663 100644 --- a/services/service/src/ipc/standard/ipc_cmd_parser.cpp +++ b/services/service/src/ipc/standard/ipc_cmd_parser.cpp @@ -84,6 +84,7 @@ bool EncodeDmDeviceBasicInfo(const DmDeviceBasicInfo &devInfo, MessageParcel &pa bRet = (bRet && parcel.WriteUint16(devInfo.deviceTypeId)); std::string networkIdStr(devInfo.networkId); bRet = (bRet && parcel.WriteString(networkIdStr)); + bRet = (bRet && parcel.WriteString(devInfo.extraData)); return bRet; } diff --git a/services/service/src/softbus/softbus_listener.cpp b/services/service/src/softbus/softbus_listener.cpp index 6876a5b3c..3c2330151 100644 --- a/services/service/src/softbus/softbus_listener.cpp +++ b/services/service/src/softbus/softbus_listener.cpp @@ -58,6 +58,10 @@ constexpr static uint16_t ARRAY_DOUBLE_SIZE = 2; constexpr static uint16_t BIN_HIGH_FOUR_NUM = 4; constexpr uint32_t SOFTBUS_MAX_RETRY_TIME = 10; +constexpr const char* CUSTOM_DATA_ACTIONID = "actionId"; +constexpr const char* CUSTOM_DATA_NETWORKID = "networkId"; +constexpr const char* CUSTOM_DATA_DISPLAY_NAME = "displayName"; + static std::mutex g_deviceMapMutex; static std::mutex g_lnnCbkMapMutex; static std::mutex g_radarLoadLock; @@ -73,6 +77,7 @@ static std::mutex g_credentialAuthStatus; static std::map>>> discoveredDeviceMap; static std::map> lnnOpsCbkMap; +static std::map discoveredDeviceActionIdMap; static std::set deviceIdSet; bool SoftbusListener::isRadarSoLoad_ = false; IDmRadarHelper* SoftbusListener::dmRadarHelper_ = nullptr; @@ -482,8 +487,14 @@ void SoftbusListener::OnSoftbusDeviceFound(const DeviceInfo *device) "isOnline=%{public}d, capability=%{public}u", GetAnonyString(dmDevInfo.deviceId).c_str(), GetAnonyString(dmDevInfo.deviceName).c_str(), dmDevInfo.deviceTypeId, dmDevInfo.range, device->isOnline, device->capabilityBitmap[0]); - + int32_t actionId = 0; + int32_t ret = GetAttrFromExtraData(dmDevInfo, actionId); + if (ret != DM_OK) { + LOGE("GetAttrFromExtraData failed"); + return; + } std::lock_guard lock(g_lnnCbkMapMutex); + discoveredDeviceActionIdMap[dmDevInfo.deviceId] = actionId; CacheDiscoveredDevice(device); for (auto &iter : lnnOpsCbkMap) { iter.second->OnDeviceFound(iter.first, dmDevInfo, device->isOnline); @@ -1331,5 +1342,72 @@ int32_t SoftbusListener::GetUdidFromDp(const std::string &udidHash, std::string #endif return ERR_DM_FAILED; } + +int32_t SoftbusListener::GetAttrFromExtraData(DmDeviceInfo &dmDevInfo, int32_t &actionId) +{ + cJSON *extraDataJsonObj = cJSON_Parse(dmDevInfo.extraData.c_str()); + if (extraDataJsonObj == NULL) { + return DM_OK; + } + cJSON *customData = cJSON_GetObjectItem(extraDataJsonObj, PARAM_KEY_CUSTOM_DATA); + if (customData == NULL) { + cJSON_Delete(extraDataJsonObj); + return DM_OK; + } + cJSON *customDataJson = cJSON_Parse(customData->valuestring); + if (customDataJson == NULL) { + cJSON_Delete(extraDataJsonObj); + return DM_OK; + } + int32_t ret = GetAttrFromCustomData(customDataJson, dmDevInfo, actionId); + cJSON_Delete(customDataJson); + cJSON_Delete(extraDataJsonObj); + return ret; +} + +int32_t SoftbusListener::GetAttrFromCustomData(const cJSON *const customDataJson, DmDeviceInfo &dmDevInfo, + int32_t &actionId) +{ + cJSON *actionIdJson = cJSON_GetObjectItem(customDataJson, CUSTOM_DATA_ACTIONID); + if (actionIdJson == NULL || !cJSON_IsNumber(actionIdJson)) { + return DM_OK; + } + actionId = actionIdJson->valueint; + cJSON *networkIdJson = cJSON_GetObjectItem(customDataJson, CUSTOM_DATA_NETWORKID); + if (networkIdJson == NULL || !cJSON_IsString(networkIdJson)) { + return DM_OK; + } + std::string networkId = networkIdJson->valuestring; + if (memcpy_s(dmDevInfo.deviceId, sizeof(dmDevInfo.deviceId), networkId.c_str(), + std::min(sizeof(dmDevInfo.deviceId), sizeof(networkId))) != DM_OK) { + LOGE("copy deviceId failed."); + return ERR_DM_FAILED; + } + if (memcpy_s(dmDevInfo.networkId, sizeof(dmDevInfo.networkId), networkId.c_str(), + std::min(sizeof(dmDevInfo.networkId), sizeof(networkId))) != DM_OK) { + LOGE("copy networkId failed."); + return ERR_DM_FAILED; + } + cJSON *displayNameJson = cJSON_GetObjectItem(customDataJson, CUSTOM_DATA_DISPLAY_NAME); + if (displayNameJson == NULL || !cJSON_IsString(displayNameJson)) { + return DM_OK; + } + std::string displayName = displayNameJson->valuestring; + if (memcpy_s(dmDevInfo.deviceName, sizeof(dmDevInfo.deviceName), displayName.c_str(), + std::min(sizeof(dmDevInfo.deviceName), sizeof(displayName))) != DM_OK) { + LOGE("copy deviceName failed."); + return ERR_DM_FAILED; + } + return DM_OK; +} + +void SoftbusListener::GetActionId(const std::string &deviceId, int32_t &actionId) +{ + std::lock_guard lock(g_lnnCbkMapMutex); + if (discoveredDeviceActionIdMap.find(deviceId) == discoveredDeviceActionIdMap.end()) { + return; + } + actionId = discoveredDeviceActionIdMap.find(deviceId)->second; +} } // namespace DistributedHardware } // namespace OHOS \ No newline at end of file diff --git a/test/commonunittest/UTTest_dm_auth_manager_first.cpp b/test/commonunittest/UTTest_dm_auth_manager_first.cpp index 7c563bde9..637235394 100644 --- a/test/commonunittest/UTTest_dm_auth_manager_first.cpp +++ b/test/commonunittest/UTTest_dm_auth_manager_first.cpp @@ -1382,21 +1382,21 @@ HWTEST_F(DmAuthManagerTest, CheckAuthParamVaildExtra_001, testing::ext::TestSize std::string extra = R"({"extra": {"bindLevel": "123"}})"; nlohmann::json jsonObject; jsonObject["bindLevel"] = 1; - int32_t ret = authManager_->CheckAuthParamVaildExtra(extra); - EXPECT_EQ(ret, DM_OK); + int32_t ret = authManager_->CheckAuthParamVaildExtra(extra, ""); + EXPECT_EQ(ret, ERR_DM_INPUT_PARA_INVALID); extra = SafetyDump(jsonObject); EXPECT_CALL(*appManagerMock_, IsSystemSA()).WillOnce(Return(false)); - ret = authManager_->CheckAuthParamVaildExtra(extra); + ret = authManager_->CheckAuthParamVaildExtra(extra, ""); EXPECT_EQ(ret, ERR_DM_INPUT_PARA_INVALID); EXPECT_CALL(*appManagerMock_, IsSystemSA()).WillOnce(Return(true)); - ret = authManager_->CheckAuthParamVaildExtra(extra); - EXPECT_EQ(ret, DM_OK); + ret = authManager_->CheckAuthParamVaildExtra(extra, ""); + EXPECT_EQ(ret, ERR_DM_INPUT_PARA_INVALID); jsonObject["bindLevel"] = 15; extra = SafetyDump(jsonObject); - ret = authManager_->CheckAuthParamVaildExtra(extra); + ret = authManager_->CheckAuthParamVaildExtra(extra, ""); EXPECT_EQ(ret, ERR_DM_INPUT_PARA_INVALID); } diff --git a/test/commonunittest/UTTest_dm_auth_manager_second.cpp b/test/commonunittest/UTTest_dm_auth_manager_second.cpp index 2416020c8..5e8f303f3 100644 --- a/test/commonunittest/UTTest_dm_auth_manager_second.cpp +++ b/test/commonunittest/UTTest_dm_auth_manager_second.cpp @@ -1263,7 +1263,7 @@ HWTEST_F(DmAuthManagerTest, CheckAuthParamVaild_0013, testing::ext::TestSize.Lev authManager_->authResponseState_ = nullptr; authManager_->softbusConnector_->discoveryDeviceInfoMap_.clear(); int32_t ret = authManager_->CheckAuthParamVaild(pkgName, authType, deviceId, extra); - ASSERT_EQ(ret, ERR_DM_INPUT_PARA_INVALID); + ASSERT_EQ(ret, DM_OK); } HWTEST_F(DmAuthManagerTest, CheckAuthParamVaild_0014, testing::ext::TestSize.Level0) diff --git a/test/softbusfuzztest/onsoftbusdevicefound_fuzzer/BUILD.gn b/test/softbusfuzztest/onsoftbusdevicefound_fuzzer/BUILD.gn index d2195a85e..f960bcba3 100644 --- a/test/softbusfuzztest/onsoftbusdevicefound_fuzzer/BUILD.gn +++ b/test/softbusfuzztest/onsoftbusdevicefound_fuzzer/BUILD.gn @@ -50,6 +50,7 @@ ohos_fuzztest("OnSoftbusDeviceFoundFuzzTest") { ] external_deps = [ + "cJSON:cjson", "c_utils:utils", "dsoftbus:softbus_client", "safwk:system_ability_fwk", diff --git a/test/softbusfuzztest/onsoftbusdeviceinfochanged_fuzzer/BUILD.gn b/test/softbusfuzztest/onsoftbusdeviceinfochanged_fuzzer/BUILD.gn index 0cb1e7b21..420e8426c 100644 --- a/test/softbusfuzztest/onsoftbusdeviceinfochanged_fuzzer/BUILD.gn +++ b/test/softbusfuzztest/onsoftbusdeviceinfochanged_fuzzer/BUILD.gn @@ -45,6 +45,7 @@ ohos_fuzztest("OnSoftbusDeviceInfoChangedFuzzTest") { ] external_deps = [ + "cJSON:cjson", "c_utils:utils", "device_auth:deviceauth_sdk", "device_info_manager:distributed_device_profile_common", diff --git a/test/softbusfuzztest/onsoftbusdeviceoffline_fuzzer/BUILD.gn b/test/softbusfuzztest/onsoftbusdeviceoffline_fuzzer/BUILD.gn index ecf137944..877101702 100644 --- a/test/softbusfuzztest/onsoftbusdeviceoffline_fuzzer/BUILD.gn +++ b/test/softbusfuzztest/onsoftbusdeviceoffline_fuzzer/BUILD.gn @@ -46,6 +46,7 @@ ohos_fuzztest("OnSoftbusDeviceOfflineFuzzTest") { ] external_deps = [ + "cJSON:cjson", "c_utils:utils", "device_auth:deviceauth_sdk", "device_info_manager:distributed_device_profile_common", diff --git a/test/softbusfuzztest/onsoftbusdeviceonline_fuzzer/BUILD.gn b/test/softbusfuzztest/onsoftbusdeviceonline_fuzzer/BUILD.gn index 049ffdb53..72332df3e 100644 --- a/test/softbusfuzztest/onsoftbusdeviceonline_fuzzer/BUILD.gn +++ b/test/softbusfuzztest/onsoftbusdeviceonline_fuzzer/BUILD.gn @@ -46,6 +46,7 @@ ohos_fuzztest("OnSoftbusDeviceOnlineFuzzTest") { ] external_deps = [ + "cJSON:cjson", "c_utils:utils", "device_auth:deviceauth_sdk", "device_info_manager:distributed_device_profile_common", diff --git a/test/softbusfuzztest/onsoftbuslistenerdevicefound_fuzzer/BUILD.gn b/test/softbusfuzztest/onsoftbuslistenerdevicefound_fuzzer/BUILD.gn index 6bc275719..5682d0b4b 100644 --- a/test/softbusfuzztest/onsoftbuslistenerdevicefound_fuzzer/BUILD.gn +++ b/test/softbusfuzztest/onsoftbuslistenerdevicefound_fuzzer/BUILD.gn @@ -45,6 +45,7 @@ ohos_fuzztest("OnSoftbusListenerDeviceFoundFuzzTest") { ] external_deps = [ + "cJSON:cjson", "c_utils:utils", "device_auth:deviceauth_sdk", "device_info_manager:distributed_device_profile_common", diff --git a/test/softbusfuzztest/publishsoftbuslnn_fuzzer/BUILD.gn b/test/softbusfuzztest/publishsoftbuslnn_fuzzer/BUILD.gn index 8a1a5e385..31e0254e8 100644 --- a/test/softbusfuzztest/publishsoftbuslnn_fuzzer/BUILD.gn +++ b/test/softbusfuzztest/publishsoftbuslnn_fuzzer/BUILD.gn @@ -46,6 +46,7 @@ ohos_fuzztest("PublishSoftbusLnnFuzzTest") { ] external_deps = [ + "cJSON:cjson", "c_utils:utils", "device_auth:deviceauth_sdk", "device_info_manager:distributed_device_profile_common", diff --git a/test/softbusfuzztest/refreshsoftbuslnn_fuzzer/BUILD.gn b/test/softbusfuzztest/refreshsoftbuslnn_fuzzer/BUILD.gn index 731f97cc5..2c12dd74e 100644 --- a/test/softbusfuzztest/refreshsoftbuslnn_fuzzer/BUILD.gn +++ b/test/softbusfuzztest/refreshsoftbuslnn_fuzzer/BUILD.gn @@ -46,6 +46,7 @@ ohos_fuzztest("RefreshSoftbusLnnFuzzTest") { ] external_deps = [ + "cJSON:cjson", "c_utils:utils", "device_auth:deviceauth_sdk", "device_info_manager:distributed_device_profile_common", diff --git a/test/softbusfuzztest/softbuslistenergetlocaldeviceinfo_fuzzer/BUILD.gn b/test/softbusfuzztest/softbuslistenergetlocaldeviceinfo_fuzzer/BUILD.gn index caea4d6ff..208f4dd31 100644 --- a/test/softbusfuzztest/softbuslistenergetlocaldeviceinfo_fuzzer/BUILD.gn +++ b/test/softbusfuzztest/softbuslistenergetlocaldeviceinfo_fuzzer/BUILD.gn @@ -49,6 +49,7 @@ ohos_fuzztest("SoftbusListenerGetLocalDeviceInfoFuzzTest") { external_deps = [ "access_token:libaccesstoken_sdk", "access_token:libtokenid_sdk", + "cJSON:cjson", "c_utils:utils", "device_auth:deviceauth_sdk", "device_info_manager:distributed_device_profile_common", diff --git a/test/softbusfuzztest/stoprefreshsoftbuslnn_fuzzer/BUILD.gn b/test/softbusfuzztest/stoprefreshsoftbuslnn_fuzzer/BUILD.gn index b69e49882..23dbd11b3 100644 --- a/test/softbusfuzztest/stoprefreshsoftbuslnn_fuzzer/BUILD.gn +++ b/test/softbusfuzztest/stoprefreshsoftbuslnn_fuzzer/BUILD.gn @@ -46,6 +46,7 @@ ohos_fuzztest("StopRefreshSoftbusLnnFuzzTest") { ] external_deps = [ + "cJSON:cjson", "c_utils:utils", "device_auth:deviceauth_sdk", "device_info_manager:distributed_device_profile_common", diff --git a/test/unittest/BUILD.gn b/test/unittest/BUILD.gn index 22097e37c..925139f7a 100644 --- a/test/unittest/BUILD.gn +++ b/test/unittest/BUILD.gn @@ -536,6 +536,7 @@ ohos_unittest("UTTest_mine_softbus_listener") { external_deps = [ "ability_base:want", "ability_runtime:ability_manager", + "cJSON:cjson", "device_auth:deviceauth_sdk", "device_info_manager:distributed_device_profile_common", "device_info_manager:distributed_device_profile_sdk", @@ -1431,6 +1432,7 @@ ohos_unittest("UTTest_discovery_manager") { deps = [ ":device_manager_test_common" ] external_deps = [ + "cJSON:cjson", "device_auth:deviceauth_sdk", "device_info_manager:distributed_device_profile_common", "device_info_manager:distributed_device_profile_sdk", -- Gitee