From 0695791befc83e687124c89bc679354a7e386d3e Mon Sep 17 00:00:00 2001 From: Gloria Date: Thu, 3 Jul 2025 11:20:10 +0800 Subject: [PATCH] Update docs against 63828+91415+78312+78034+64891+72325+70256+69287+63828+67060+65676+65407+71691 Signed-off-by: wusongqing --- en/application-dev/reference/Readme-EN.md | 11 +- .../reference/development-intro-api.md | 18 +- .../reference/development-intro.md | 68 - .../reference/errorcode-universal.md | 18 + .../reference/litewearable-syscap-list.md | 28 + .../reference/native-lib/Readme-EN.md | 16 +- .../reference/native-lib/_vulkan.md | 113 +- .../reference/native-lib/cpp.md | 2 +- .../reference/native-lib/egl-symbol.md | 3 +- .../reference/native-lib/egl.md | 3 +- .../native-lib/figures/libuv-ffrt.jpg | Bin 0 -> 85031 bytes .../native-lib/figures/libuv-ffrt.png | Bin 64214 -> 0 bytes .../native-lib/figures/libuv-image-1.jpg | Bin 0 -> 81432 bytes .../native-lib/figures/libuv-image-3.jpg | Bin 0 -> 97895 bytes .../libuv-inter-thread-communication.png | Bin 77731 -> 0 bytes .../native-lib/figures/libuv-thread-pool.png | Bin 82381 -> 0 bytes ...libc-interfaces-affected-by-permissions.md | 367 +++- .../reference/native-lib/libuv.md | 877 ++++---- .../reference/native-lib/musl.md | 4 +- .../reference/native-lib/napi.md | 89 +- .../reference/native-lib/opengl-symbol.md | 228 ++ .../reference/native-lib/opengl.md | 65 + .../reference/native-lib/opengles.md | 115 +- .../reference/native-lib/openglesv3-symbol.md | 4 +- .../reference/native-lib/opensles.md | 4 +- .../reference/native-lib/vulkan-guidelines.md | 4 + .../reference/native-lib/vulkan.md | 29 +- .../reference/native-lib/vulkan__ohos_8h.md | 13 +- .../reference/phone-syscap-list.md | 245 +++ en/application-dev/reference/syscap-list.md | 1884 +---------------- .../reference/tablet-syscap-list.md | 236 +++ .../reference/tv-syscap-list.md | 206 ++ .../reference/wearable-syscap-list.md | 209 ++ 33 files changed, 2341 insertions(+), 2518 deletions(-) delete mode 100644 en/application-dev/reference/development-intro.md create mode 100644 en/application-dev/reference/litewearable-syscap-list.md create mode 100644 en/application-dev/reference/native-lib/figures/libuv-ffrt.jpg delete mode 100644 en/application-dev/reference/native-lib/figures/libuv-ffrt.png create mode 100644 en/application-dev/reference/native-lib/figures/libuv-image-1.jpg create mode 100644 en/application-dev/reference/native-lib/figures/libuv-image-3.jpg delete mode 100644 en/application-dev/reference/native-lib/figures/libuv-inter-thread-communication.png delete mode 100644 en/application-dev/reference/native-lib/figures/libuv-thread-pool.png create mode 100644 en/application-dev/reference/native-lib/opengl-symbol.md create mode 100644 en/application-dev/reference/native-lib/opengl.md create mode 100644 en/application-dev/reference/phone-syscap-list.md create mode 100644 en/application-dev/reference/tablet-syscap-list.md create mode 100644 en/application-dev/reference/tv-syscap-list.md create mode 100644 en/application-dev/reference/wearable-syscap-list.md diff --git a/en/application-dev/reference/Readme-EN.md b/en/application-dev/reference/Readme-EN.md index 8234a9c65b9..b448a9350f8 100644 --- a/en/application-dev/reference/Readme-EN.md +++ b/en/application-dev/reference/Readme-EN.md @@ -1,7 +1,14 @@ # Development References -- [API Reference Document Description](development-intro.md) +- [Development Description](development-intro-api.md) - [SystemCapability](syscap.md) -- [SystemCapability List](syscap-list.md) + +- SystemCapability List + - [Phone](phone-syscap-list.md) + - [Tablet](tablet-syscap-list.md) + - [LiteWearable](litewearable-syscap-list.md) + - [TV](tv-syscap-list.md) + - [Wearable](wearable-syscap-list.md) + - [Universal Error Codes](errorcode-universal.md) - [Ability Kit API Reference](apis-ability-kit/Readme-EN.md) - [Accessibility Kit API Reference](apis-accessibility-kit/Readme-EN.md) diff --git a/en/application-dev/reference/development-intro-api.md b/en/application-dev/reference/development-intro-api.md index b9913d22acc..6fbcb5a9b6b 100644 --- a/en/application-dev/reference/development-intro-api.md +++ b/en/application-dev/reference/development-intro-api.md @@ -1,4 +1,4 @@ -# API Reference Document Description +# Document Description API references provide the description of APIs used for application development. This topic describes common fields in the API references to help you better use the reference document. @@ -38,6 +38,22 @@ To call APIs to access these resources, you must apply for the corresponding per - If an application can call an API only after it has obtained a specific permission, the following description is provided for the API: "**Required permissions**: ohos.permission.xxxx" - If an application can call an API without any permission, no special description is provided. +## Error Code Description + +You may encounter errors when using ArkTS APIs. + +For each API where errors might occur, you can refer to the error code section in the documentation to understand the possible error code IDs and messages for that API and handle them as needed. + +ArkTS API includes both asynchronous and synchronous APIs, with the following error handling methods: + +- For synchronous APIs, errors are uniformly thrown as exceptions, and you need to handle potential exceptions using try-catch. + +- For asynchronous APIs, errors may include exceptions and rejections. If you use the await/async approach, you need to handle potential exceptions and rejections using try-catch. + +- For asynchronous APIs using the Promise approach, errors may include exceptions and rejections. You need to handle synchronous exceptions (usually 401 exceptions) using try-catch and handle rejections using the Promise's **catch()** method or the **onrejected** callback function in the **then()** method. + +- For asynchronous APIs using the callback approach (not recommended), errors may include exceptions and errors returned by the callback. If you use the callback approach, you need to handle synchronous exceptions (usually 401 exceptions) using try-catch and handle errors presented through callback parameters (for example, BusinessError objects). + ## Application Model Description Along its evolution, the system has provided two application models: FA model and stage model. diff --git a/en/application-dev/reference/development-intro.md b/en/application-dev/reference/development-intro.md deleted file mode 100644 index 1f59f3fb4cf..00000000000 --- a/en/application-dev/reference/development-intro.md +++ /dev/null @@ -1,68 +0,0 @@ -# API Reference Document Description - -API references provide the description of APIs used for application development. This topic describes common fields in the API references to help you better use the reference document. - -## Version Description - -In API references, the earliest versions of APIs and components are specified in the following ways: - -- For a new API or component, the version information is provided at the beginning of the reference document. Example: "The initial APIs of this module are supported since API version 7." -- For a new feature of an existing API or component, a superscript is added following the feature. For example, "uid8+" indicates that the **uid** attribute is supported since API version 8. - -## Application Model Description - -Along its evolution, the system has provided two application models: FA model and stage model. For their differences, see [Application Models](../application-models/application-models.md). - -- If all the APIs of a module support only one model, the following description is provided at the beginning of the reference document: "The APIs of this module can be used only in the FA model." or "The APIs of this module can be used only in the stage model." -- If certain APIs of a module support only one model, the following description is provided individually for these APIs: "This API can be used only in the FA model." or "This API can be used only in the stage model." -- If both models are supported, no special description is provided. - -## Available APIs - -Certain APIs provided by OpenHarmony are system APIs, which can be used only by original equipment manufacturers (OEMs) and cannot be used by common applications. - -A description regarding system APIs will be provided in the document. - -- If all the APIs of a module are system APIs, the following description is provided at the beginning of the reference document: "All the APIs of this module are system APIs." -- If a specific API of a module is a system API, the following description is provided individually for the API: "This is a system API." - -A common application is an application whose application type is **hos_normal_app** in the HarmonyAppProvision configuration file. **hos_normal_app** is the default value for project creation. - -The public SDK, which does not include system APIs, is provided as standard in DevEco Studio. To use the system APIs, you must: - -- Switch the public SDK to the full SDK by following the instructions provided in [Switching to Full SDK](../faqs/full-sdk-switch-guide.md). -- Change the value of **app-feature** in the HarmonyAppProvision configuration file to **hos_system_app** (indicating a system application). For details, see [HarmonyAppProvision Configuration File](../security/app-provision-structure.md). - -## Permission Description - -By default, applications can access limited system resources. However, in some cases, an application needs to access excess data (including personal data) and functions of the system or another application to implement extended functions. For details, see [Application Permission Management Overview](../security/AccessToken/app-permission-mgmt-overview.md). - -To call APIs to access these resources, you must apply for the corresponding permissions by following the instructions provided in [Workflow for Requesting Permissions](../security/AccessToken/determine-application-mode.md). - -- If an application can call an API only after it has obtained a specific permission, the following description is provided for the API: "**Required permissions**: ohos.permission.xxxx" -- If an application can call an API without any permission, no special description is provided. - - -## System Capability Description - -System capability refers to a relatively independent feature in the operating system. Different devices provide different system capabilities, and multiple APIs implement a system capability. You can determine whether an API can be used based on system capabilities. For details, see [SystemCapability](syscap.md). - -The following description is provided for each API in the reference document to describe the system capability of the API: "**System capability**: SystemCapability.xxx.xxx" - -You can use the [SystemCapability List](syscap-list.md) to query the devices supported by a specific capability set. - -## Deprecated API Description - -A deprecated API is an API no longer recommended and is marked with the deprecated superscript. - -While deprecated APIs can still be implemented in the five API levels immediately following the version when the API is deprecated, this is not recommended. - -- Do not use deprecated APIs in new code. If possible, rewrite old code by replacing the deprecated APIs with their substitutes. -- If no substitute is available, change the implementation mode by referring to the deprecation description and changelog. - -## Sample Code Language Description - -OpenHarmony supports two development languages: JS and TS. - -- When a code block is labeled with **js**, the sample code can be used in the JS and ArkTS projects. -- When a code block is labeled with **ts**, the sample code can be used only in the ArkTS project. diff --git a/en/application-dev/reference/errorcode-universal.md b/en/application-dev/reference/errorcode-universal.md index ac81c413417..5c5dbf22f3d 100644 --- a/en/application-dev/reference/errorcode-universal.md +++ b/en/application-dev/reference/errorcode-universal.md @@ -36,6 +36,24 @@ The API called by the application is a system API. Check whether any system API is called. Delete it if any. +## 203 System Function Prohibited by Enterprise Management Policies + +**Error Message** + +This function is prohibited by enterprise management policies. + +**Description** + +The enterprise management policies do not allow the use of this system function. + +**Possible Causes** + +You attempted to operate a system function that has been disabled by the device management application. + +**Solution** + +Use [getDisallowedPolicy](./apis-mdm-kit/js-apis-enterprise-restrictions.md#restrictionsgetdisallowedpolicy) to check whether the system function is disabled, and use [setDisallowedPolicy](./apis-mdm-kit/js-apis-enterprise-restrictions.md#restrictionssetdisallowedpolicy) to enable the system function. + ## 401 Parameter Check Failed **Error Message** diff --git a/en/application-dev/reference/litewearable-syscap-list.md b/en/application-dev/reference/litewearable-syscap-list.md new file mode 100644 index 00000000000..43369b135f7 --- /dev/null +++ b/en/application-dev/reference/litewearable-syscap-list.md @@ -0,0 +1,28 @@ +# SystemCapability List + +SystemCapability (SysCap) is a standalone feature in the operating system. + +Before using an API for development, you are advised to familiarize yourself with [SysCap](syscap.md), and then consult the following tables to see whether the SysCap set required for the API is supported by the target device type. + +> **NOTE** +> +> This list outlines the minimum system capabilities supported by the current version of lite wearables. You can refer to the **liteWearable.json** file in the SDK for details. +> When developing applications for the current version of lite wearables using the APIs corresponding to the system capabilities listed, you can call these APIs directly without needing to perform a **canIUse()** check beforehand. + +- SystemCapability.ArkUI.ArkUI.Lite +- SystemCapability.Base +- SystemCapability.Location.Location.Lite +- SystemCapability.PowerManager.BatteryManager.Lite +- SystemCapability.FileManagement.File.FileIO.Lite +- SystemCapability.Startup.SystemInfo.Lite +- SystemCapability.PowerManager.DisplayPowerManager.Lite +- SystemCapability.Communication.NFC.CardEmulation +- SystemCapability.Security.Huks.Core +- SystemCapability.DistributedDataManager.Preferences.Core.Lite +- SystemCapability.Sensors.Sensor.Lite +- SystemCapability.Sensors.MiscDevice.Lite +- SystemCapability.Communication.NetStack +- SystemCapability.MiscServices.ScreenLock +- SystemCapability.Security.CryptoFramework +- SystemCapability.Security.CryptoFramework.MessageDigest +- SystemCapability.Security.CryptoFramework.Rand diff --git a/en/application-dev/reference/native-lib/Readme-EN.md b/en/application-dev/reference/native-lib/Readme-EN.md index b70470c71d7..3b18d794df7 100644 --- a/en/application-dev/reference/native-lib/Readme-EN.md +++ b/en/application-dev/reference/native-lib/Readme-EN.md @@ -1,18 +1,19 @@ -# Native API Standard Libraries +# Native API Standard Libraries - [libc](musl.md) - [libc++](cpp.md) - [Node-API](napi.md) - [libuv](libuv.md) - [OpenSL ES](opensles.md) -- [OpenGL ES](opengles.md) +- [OpenGL ES](opengl.md) +- [OpenGL](opengles.md) - [EGL](egl.md) - [ICU4C](icu4c.md) - [Zlib](zlib.md) -- Vulkan +- Vulkan - [Vulkan Development](vulkan-guidelines.md) - [Vulkan Capabilities](vulkan.md) - - Vulkan Extensions + - Vulkan Extensions - [Vulkan Module](_vulkan.md) - [vulkan_ohos.h](vulkan__ohos_8h.md) - [VkExternalFormatOHOS](_vk_external_format_o_h_o_s.md) @@ -22,9 +23,10 @@ - [VkNativeBufferPropertiesOHOS](_vk_native_buffer_properties_o_h_o_s.md) - [VkNativeBufferUsageOHOS](_vk_native_buffer_usage_o_h_o_s.md) - [VkSurfaceCreateInfoOHOS](_vk_surface_create_info_o_h_o_s.md) -- Appendix - - [libc Symbols Not Exported](musl-peculiar-symbol.md) - - [Restricted musl libc APIs](guidance-on-ndk-libc-interfaces-affected-by-permissions.md) +- Appendix + - [Native API Symbols Not Exported](musl-peculiar-symbol.md) + - [NDK-Related musl libc Interface Usage Restrictions](guidance-on-ndk-libc-interfaces-affected-by-permissions.md) - [EGL Symbols Exported from Native APIs](egl-symbol.md) - [ICU4C Symbols Exported from Native APIs](icu4c-symbol.md) - [OpenGL ES 3.2 Symbols Exported from Native APIs](openglesv3-symbol.md) + - [OpenGL 3.0 Symbols Exported from Native APIs](opengl-symbol.md) diff --git a/en/application-dev/reference/native-lib/_vulkan.md b/en/application-dev/reference/native-lib/_vulkan.md index 786fd5028a8..84bca30f516 100644 --- a/en/application-dev/reference/native-lib/_vulkan.md +++ b/en/application-dev/reference/native-lib/_vulkan.md @@ -69,9 +69,12 @@ The **Vulkan** module provides Vulkan capabilities extended by OpenHarmony. It p | Name| Description| | -------- | -------- | -| [vkCreateSurfaceOHOS](#vkcreatesurfaceohos) (VkInstance instance, const VkSurfaceCreateInfoOHOS \*pCreateInfo, const VkAllocationCallbacks \*pAllocator, VkSurfaceKHR \*pSurface) | Creates a Vulkan surface.| -| [vkGetNativeBufferPropertiesOHOS](#vkgetnativebufferpropertiesohos) (VkDevice device, const struct OH_NativeBuffer \*buffer, VkNativeBufferPropertiesOHOS \*pProperties) | Obtains the properties of an **OH_NativeBuffer** instance.| -| [vkGetMemoryNativeBufferOHOS](#vkgetmemorynativebufferohos) (VkDevice device, const VkMemoryGetNativeBufferInfoOHOS \*pInfo, struct OH_NativeBuffer \*\*pBuffer) | Obtains an **OH_NativeBuffer** instance.| +| VKAPI_ATTR VkResult VKAPI_CALL [vkCreateSurfaceOHOS](#vkcreatesurfaceohos) (VkInstance instance, const [VkSurfaceCreateInfoOHOS](_vk_surface_create_info_o_h_o_s.md) \*pCreateInfo, const VkAllocationCallbacks \*pAllocator, VkSurfaceKHR \*pSurface) | Creates a Vulkan surface.| +| VKAPI_ATTR VkResult VKAPI_CALL [vkGetNativeBufferPropertiesOHOS](#vkgetnativebufferpropertiesohos) (VkDevice device, const struct OH_NativeBuffer \*buffer, [VkNativeBufferPropertiesOHOS](_vk_native_buffer_properties_o_h_o_s.md) \*pProperties) | Obtains the properties of an **OH_NativeBuffer** instance.| +| VKAPI_ATTR VkResult VKAPI_CALL [vkGetMemoryNativeBufferOHOS](#vkgetmemorynativebufferohos) (VkDevice device, const [VkMemoryGetNativeBufferInfoOHOS](_vk_memory_get_native_buffer_info_o_h_o_s.md) \*pInfo, struct OH_NativeBuffer \*\*pBuffer) | Obtains an **OH_NativeBuffer** instance.| +| VKAPI_ATTR VkResult VKAPI_CALL [vkGetSwapchainGrallocUsageOHOS](#vkgetswapchaingrallocusageohos) (VkDevice device, VkFormat format, VkImageUsageFlags imageUsage, uint64_t \*grallocUsage) | Returns the appropriate gralloc usage flag based on the given Vulkan device, image format, and image usage flag.| +| VKAPI_ATTR VkResult VKAPI_CALL [vkAcquireImageOHOS](#vkacquireimageohos) (VkDevice device, VkImage image, int32_t nativeFenceFd, VkSemaphore semaphore, VkFence fence) | Obtains the ownership of the swap chain image and imports the fence of the external signal to the VkSemaphore and VkFence objects.| +| VKAPI_ATTR VkResult VKAPI_CALL [vkQueueSignalReleaseImageOHOS](#vkqueuesignalreleaseimageohos) (VkQueue queue, uint32_t waitSemaphoreCount, const VkSemaphore \*pWaitSemaphores, VkImage image, int32_t \*pNativeFenceFd) | Sends a signal to the system hardware buffer to release an image once it is no longer needed so that other components can access it.| ### Variables @@ -378,6 +381,35 @@ Defines the parameters required for creating a Vulkan surface. ## Function Description +### vkAcquireImageOHOS() + +``` +VKAPI_ATTR VkResult VKAPI_CALL vkAcquireImageOHOS (VkDevice device, VkImage image, int32_t nativeFenceFd, VkSemaphore semaphore, VkFence fence ) +``` + +**Description** + +Obtains the ownership of the swap chain image and imports the fence of the external signal to the VkSemaphore and VkFence objects. + +**System capability**: SystemCapability.Graphic.Vulkan + +**Since**: 10 + +**Parameters** + +| Name| Description| +| -------- | -------- | +| device | **VkDevice** instance.| +| image | Vulkan image to obtain.| +| nativeFenceFd | File descriptor of the native fence.| +| semaphore | Vulkan semaphore indicating that the image is available.| +| fence | Vulkan fence used for synchronization when the image acquisition is complete.| + +**Returns** + +Returns an error code of the VkResult type. +- Returns **VK_SUCCESS** if the operation is successful. +- Returns **VK_ERROR_OUT_OF_HOST_MEMORY** if the host memory is insufficient. ### vkCreateSurfaceOHOS() @@ -402,7 +434,10 @@ Creates a Vulkan surface. **Returns** -Returns **VK_SUCCESS** if the execution is successful; returns an error code of the VkResult type otherwise. +Returns an error code of the VkResult type. +- Returns **VK_SUCCESS** if the operation is successful. +- Returns **VK_ERROR_OUT_OF_HOST_MEMORY** if the VkSurfaceKHR memory fails to be allocated. +- Returns **VK_ERROR_SURFACE_LOST_KHR** if the NativeWindow operation fails. ### vkGetMemoryNativeBufferOHOS() @@ -428,8 +463,9 @@ Obtains an **OH_NativeBuffer** instance. **Returns** -Returns **VK_SUCCESS** if the execution is successful; returns an error code of the VkResult type otherwise. - +Returns an error code of the VkResult type. +- Returns **VK_SUCCESS** if the operation is successful. +- Returns **VK_ERROR_OUT_OF_HOST_MEMORY** if the input parameter **pInfo** is abnormal or the obtained **pBuffer** is abnormal. ### vkGetNativeBufferPropertiesOHOS() @@ -454,8 +490,71 @@ Obtains the properties of an **OH_NativeBuffer** instance. **Returns** -Returns **VK_SUCCESS** if the execution is successful; returns an error code of the VkResult type otherwise. +Returns an error code of the VkResult type. +- Returns **VK_SUCCESS** if the operation is successful. +- Returns **VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR** if an input parameter is abnormal. +- Returns **VK_ERROR_OUT_OF_DEVICE_MEMORY** if the device memory is insufficient. + + +### vkGetSwapchainGrallocUsageOHOS() + +``` +VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainGrallocUsageOHOS (VkDevice device, VkFormat format, VkImageUsageFlags imageUsage, uint64_t* grallocUsage ) +``` + +**Description** + +Returns the appropriate gralloc usage flag based on the given Vulkan device, image format, and image usage flag. + +**System capability**: SystemCapability.Graphic.Vulkan + +**Since**: 10 + +**Parameters** + +| Name| Description| +| -------- | -------- | +| device | **VkDevice** instance.| +| format | Image format.| +| imageUsage | Image use flag.| +| grallocUsage | Pointer to the gralloc usage flag.| + +**Returns** + +Returns an error code of the VkResult type. +- Returns **VK_SUCCESS** if the operation is successful. +- Returns **VK_ERROR_INITIALIZATION_FAILED** if an input parameter is abnormal. + +### vkQueueSignalReleaseImageOHOS() + +``` +VKAPI_ATTR VkResult VKAPI_CALL vkQueueSignalReleaseImageOHOS (VkQueue queue, uint32_t waitSemaphoreCount, const VkSemaphore* pWaitSemaphores, VkImage image, int32_t* pNativeFenceFd ) +``` + +**Description** + +Sends a signal to the system hardware buffer to release an image once it is no longer needed so that other components can access it. + +**System capability**: SystemCapability.Graphic.Vulkan + +**Since**: 10 + +**Parameters** + +| Name| Description| +| -------- | -------- | +| queue | Handle to the Vulkan queue.| +| waitSemaphoreCount | Number of semaphores to wait on.| +| pWaitSemaphores | Pointer to the array of semaphores to wait on.| +| images | Handle to the Vulkan image to be released.| +| pNativeFenceFd | Pointer to the file descriptor of the fence.| + +**Returns** +Returns an error code of the VkResult type. +- Returns **VK_SUCCESS** if the operation is successful. +- Returns **VK_ERROR_DEVICE_LOST** if the Vulkan device link is lost. +- Returns **VK_ERROR_OUT_OF_HOST_MEMORY** if the host memory is insufficient. ## Variable Description diff --git a/en/application-dev/reference/native-lib/cpp.md b/en/application-dev/reference/native-lib/cpp.md index 799bdfdfb82..1a7838d7834 100644 --- a/en/application-dev/reference/native-lib/cpp.md +++ b/en/application-dev/reference/native-lib/cpp.md @@ -4,7 +4,7 @@ OpenHarmony uses [libc++](https://libcxx.llvm.org/) of the open-source LLVM proj ## libc++ Version -- Clang/LLVM 15.0.4 from OpenHarmony 4.0 to OpenHarmony 5.0 +- Clang/LLVM 15.0.4 for OpenHarmony 4.0 to OpenHarmony 6.0 - Clang/LLVM 12.0.1 from OpenHarmony 3.2 diff --git a/en/application-dev/reference/native-lib/egl-symbol.md b/en/application-dev/reference/native-lib/egl-symbol.md index 6a06663495b..690d38cf798 100644 --- a/en/application-dev/reference/native-lib/egl-symbol.md +++ b/en/application-dev/reference/native-lib/egl-symbol.md @@ -1,7 +1,7 @@ # EGL Symbols Exported from Native APIs |Type|Symbol| -| --- | --- | +| --- | --- | |FUNC|eglChooseConfig| |FUNC|eglCopyBuffers| |FUNC|eglCreateContext| @@ -53,3 +53,4 @@ |FUNC|eglGetFrameTimestampSupportedANDROID| |FUNC|eglPresentationTimeANDROID| |FUNC|eglGetNativeClientBufferANDROID| +|FUNC|eglSwapBuffersWithDamageKHR| diff --git a/en/application-dev/reference/native-lib/egl.md b/en/application-dev/reference/native-lib/egl.md index 8d8ebc61fbf..24908961108 100644 --- a/en/application-dev/reference/native-lib/egl.md +++ b/en/application-dev/reference/native-lib/egl.md @@ -1,7 +1,6 @@ - # EGL -EGL is an interface between Khronos rendering APIs (such as OpenGL ES and OpenVG) and the underlying native window system. OpenHarmony supports EGL. +[EGL](https://registry.khronos.org/EGL/sdk/docs/man/) is an interface between Khronos rendering APIs (such as [OpenGLES](https://registry.khronos.org/OpenGL-Refpages/es3/) or OpenVG) and the underlying window system. OpenHarmony supports EGL. ## Introducing EGL diff --git a/en/application-dev/reference/native-lib/figures/libuv-ffrt.jpg b/en/application-dev/reference/native-lib/figures/libuv-ffrt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a4ab28f4c6fcca26ba883b296fdacfdc8ab93b5e GIT binary patch literal 85031 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
Fj@an?f@#>%MsfNt$MFCX-1b_JV=EX_=iBevw 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 z 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

P#7UmT}FC8@BClC*{tyc86Xm zN>DuIzN{m{^Z89?!yaEV65RLP3S!s2i*H1i6V}bDuei21_0*x_1{2H+rVVeI9@EJl z0KnapJQ`6;0y~o&I~)APP>_8yQRG8ykbLav^mR3lA6HdJ9jUspTg-pmapB_c6Zp{jSXbg}XPS7z?n1+0&4`yYn-@m2MWj51N-j zdil@69bWN)+3VC|bT|2yxy1(68%@2f<= zK0VE#1oQuhO9qbUd$kDnH~w}D02c%jtO8)E{r5fRkd*(Zdh{#X;9nEF|HFxB8?T{e z1Sz)Ag+*QdsNI#81aHn+%?wJfZSk3$H?1lh^?pU(3H-U&S`zM7oF|@lvJ+eSMw4$2 zM1DIK&Q9<=aYdaVw4N2qz;RT7kBcG|rGy5C;P~lIiHS|#!B}q(x11y6&#TX$eck%} z^TP-6FeVC=!0NXUJy6lSO+BCngO9)oVvK0w%0bnSdgnR?yfQ*E4iQFEH@aThzG=E` zr|dXUk|zcs>GCWjM{P`+F%VCrD)p-Ll@n%?bVX;U+h2crJ5v9yF!b=c1B23Hx@XM; z%l}aF2x%}AD5yxBCr$_uH;kCTWkQxY5X+gX=5;War!Bqb@$PQ0<=X>^*_rFb6BF?Z z^~`_v0B4T;@pDUUQjGa-aSk)Ex2a_5@hqD-V`Sm(6LmcXR$FH^XI+hd$=JxRLg0@P zIOiDL-!(YgBDOitw(+*4WblIx6qpcxn%t|up*5~2^PHW*ONN<_AhXP7Ue>Ex zxu>Q)=2VOW{ge09>$t7qtaYi`O0UdOLn1|M~FDLHl*_T z*+<8B(e~cmL5WT^U$8Xz=>_l)t?e^oz&o@$d7Z)T*0!T1~t;RWPBhJ|iA=k$lqp0FX*E<_Ft_(o=*rNtZcP=}* zD*Jt=XR^LfzzOwanC$01*`zb3>+-i94oEH_M1KaQ=9kk1!{=um+8kP`52_9vOg&I; z@YZV>QaS^geJ=>L;*Fsw`umGmA>OD9Ku=s6XwH!a7JBz0IC?DP%u^S#4I7ntA06BA zk@Mb}9dbALz2bn0c@UmKMl2zYmvg`cY#@To9=!snmc%yLNB6EP4*r}lIm~k>mwaB4 zIH2D6_(&slGT{C$t>&Ubm@A3WmR)J~2cJItJQ=FPF>HB8nAbuI;~0b)e4=}2vWpy##H?zBN4RY2GH(oVwdw!- zV!ds}r(C1lw6^PmA-U&^6Qf$20)5zF7-4e};!0Dg=v6Rd=X>B%U-bbA+ek3KKCeNC z@Y?Q?(!Rkm>tca_^z%3#8r*0d(0dFodV`yT+k-YYGZ0oOgCQr*WN7dbY#LA;jX6-S zH?mlCHW&J2&Y!~NAR$pOy_5d_$U$P7gu#H^?wy_m15XhySO$^@4A}w@s-CCDkjrHX zS@hHz-1nXzh{GK75{f%BL&|^w?5wBiLIm6`ObIhF&nJ>lmcA1=KDAFu^!}G zu6OH8^$Es*GHp6lwx2jDU4LTyrS{=V!|8iFDM{vT=^Okz!^l>SL!;pC2P3x296S!7 zBglBHGNi`%V#h?qfA%qflZKS4tDiot_AP0MN-5Nnl0CZf^y#CvmaqtLF&62@0pEfK z+(>o!r?5-8>E)G7<;HBd--h?$?C|&Zfm;`hS4e`H9{s1zLyaWD`Krd-?�yLtN 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 literal 0 HcmV?d00001 diff --git a/en/application-dev/reference/native-lib/figures/libuv-ffrt.png b/en/application-dev/reference/native-lib/figures/libuv-ffrt.png deleted file mode 100644 index e42328bb321561e71fcff452fcc62b9dbd42e1e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64214 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 diff --git a/en/application-dev/reference/native-lib/figures/libuv-image-1.jpg b/en/application-dev/reference/native-lib/figures/libuv-image-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6dcc6886bda43880812b73814b671567c69f24e6 GIT binary patch literal 81432 zcmeFZ2|Sc-`#(G)k|bqGmZ_8_Ny$=KCKW;wimX!!Atu?^u|@XmMNGC-wya|r#xBIz zWn`PNuQQf0%$RvE_p{&6{d<1Tb3gb0T|S@p;{42IT+6u~$9Wvz<9nR+AM^>(5luA> zH4p;>1LzU(1ENoYj8)xjtUw@bZO}Oo2y_6npOFEyA2?$GiY6oDFQ0qoAl)N>I^X+4 zmlMPUd;q71n{5U41cJ_5Q4+Q-1K_xtCAaX;hU!OX|ODn9rQX7=Yf5h zOsR|vr$PHT85lVk=uIFnP}BWDPwaKZpAUw8j7w6xDO<^$^Zne)2Ma^&k)LalR90MMTBK z&&kNj$zQp8?dC02HTByXn)>%27#Kb@GPZbXX=VM)#@5N%#nsK-!!t1GRdC4b(6HFJ z_=Loyx9^fOGPANj=6w46rMRTDtQ=WUS=G?k)ZEhgt*yPcuYX{0=*KX25{I9fo|&DS zUm&inZ)}pb$lE)6?P35i{;64iZP~Bd#R;@)A20??EPL%@*yjcmMoy;vr!FxcRncX6 z?0D?7wEqFF8!_oc^{m2|^$6TgUiKX1IU_T9mbllnUt0F>H7wwFwd}7A`&+xPphLjK z+{ekt34(xjsTpBnjQ#}qWriH`D!w(!n-ON=aX5YA;d7Cy$~T2^FD~G1j))xgy_Y56 zKUlr6T}X1JgW{uUJ&;ZOBzpI3a&3IUcl+agpE5b7!?!Cw(m^~HA)jV>rbi1aOSyDa z9aHvm>0bZC3ik{hR4Nr+w#wW#nQOKW*FHFFTx(~YIKwFY<@NB+Q%}RobPy{?)A-JD zlsp|20MrMcFsid}dcSVhIg0u2a?fQ=wNK-@8?ehM|LUV(6eY^!5=N zwsCuRoS@^7fl~kVJH+Uqpb#8v_mDY19aOImC$>ZW_D)FoR~p=ndTiuVA?H6|H+hPj zLI>UC4W@$#_s6L(qnGHQ9S<-S_%eoLIS+yurGuDA3ldH6f4cIYnofbx($wi7pg*Q= z{{IdAt;z8JrV;HzTf>DG)8vYYOvW37ZoHn#9|yJ0mI`TJd)-qKk+x*lV;9G%cHj2e z%lVO2rE{{G1_!fTAFFa1i1?dZ5XMPCajoc5WK(p=a(1gd*l&5GEtYV{s8D(6*f*6s z?A5OL&s|=IIfk9^5+pSXP70-i3c>7vB%B`@ewEGFmn$w6EN_nLfyP;Jf9#(~GTf2# z5m)6hdw6^X- zNa2LE{9K!I`NSi0JIkb3r%e;iuNmKY;>NGB{V*b8J#00122DOYPK|-{!-sDX!L%eL zSG`QW#|!tpa`?Sh;on*woX9<%pA3H$oh_CThL<}imf?2=!A!kIhz_C2xOX&NyYogq z+*^e^*6tHB%_8F_zhv!Pu{Y}Ta{=~Ij{GM(9jU2-E7Sfo2~@f6G5kS= zC6?9)S-VVy&_Q2Oh@HEevNtJr=%8;H0v$waScA_i^bag*k-2KXw0KNRCwk0sjT#Up zmZu{F^a1GKEzu-XIw%?~NC*9>1C*S|wau_K_^=aAnd(LdSuoN;b8i<1&pAnLh0LKh z;(ZcLXv-YeGr}Z-Ru1A&0%I%?K9t37SQV5iGWH;edd7+yVk16{9QN+(j!Y@1SXCS2 z6#0mV#xW`K0A7mu$ITaMCkfsLdJC~K3>GmC7S-9iT68-qP%5D)U5J*Lwi%579CD^;l?fBqfow&X?;+;K~fb9Hvi7FiyX()Tbh3H9hOF76fjrH zKX)$Sy+%x+_B*~G9g&yI&;^sf$p0TP?4~+(h!9^+vdv_w9;QB4*`gV$$5XXGDpZhZ`BFJF?Z|xDRnkEACnH3c)>i+FKbuvZ^Vbk)_v;O ze)sd|)OwtWddhJ7Pgj8~Fo_!Z|Zg@9VG~&o`hr?*v^%jMpOhc<{ zrMCC=Le}cN`}N>q7aQvvB(IS-j$WFu)}x(BQb>j!yN|#<)`%z1B6@DhyqU^)cY=%IM`1dIoz~|mT2FzK#W78z zH}SHVCVP>V)p{ZB5S2>8N+!-;nI9R2H<8y|&a7hPV@hm2cGU3uwqxZw?{dea-0nwT zE-JX24zk3MHFznxRzW6pM5%;tCgG=rKW(G{X-z6i9ce9WQU#A`; zAI;|bI#6#TyO(8Ghv7KpXuAUHC9?1&lzCx?N!M2Bh!2c*M9?FRx=0cd^LWxz z;5=$RwjgMRGw?7N#lI90`?OTgdX77^j=2Ic!bZXoM3+nmhE3)&M7hrvj=aGu_UBie z7riLXD4P|dTaHXIL$jAkv`gRIajXViFHBIDqUw;LEKL}Hh>#-dWTd`289E6L_540| zelSl_(8ZFyZ`|E>q1nah_$$lAkxn~zEUMeVex=OIi{DOIsk01Kl=r>*F~W-1=@ZjFfu}Rw_X!>Eu9{<^t7Wyz zIz8Ycw0^`P)LBC9Nb3n?6KtQ2FB|GjBdl zhc#8XML4r58LIc6FEf+67iwLGDoM3QRz?Ot=;=?e6n>*}a%h%!S%Jvdh&Teb;|N0Y zmBP8SGpL;54JT?tvfV>yM{HcoE?*x^-Vu41Q=WX%p1tXu?gb-|vet)3XSQqK18#tc zw@f$f1ns*am=LijbY@Tyf&(A5t(p!UR8*vaBl$1p>pd4v_*?Om!Za$ncAIoYARuq;Q-5L{jwQw7<7;o@GTk@hWD=b`a*&@t-cJolOL zM!m+Id0$@gt1NG)zA_3O1e$}gIh?8@;5d%v*?%%!$T~XX&i~!3;B>0P30bpu!u=Dd zZrX8QtlW-hzy=*ez6(QX5EC|iyz0he$Q}xIX##0pn2kvI-2wc*Q`Y-tW<=gxuD(PTM|GL&`2IIIpz&5sT`q&%LPiLM1r-t;L}lMvONzZ{CQ%I zGr3{NtrRI6c{JfJc*M&9aCL+f(0q1d5=7Tb>z6x^lkQa{vT8kSV>tJ8o9_W`jeJ;3 z>b!>ccSLRj3FhU4u~?;p!oj6(jTpa@`6Bnl*0e(e)8zhIwY20FqPAPT-?TTL46Ntgp3ik(2kZ&Jmb4oWA3L?1j*|amI|x6jDEmQWQcx4$;AT8p zLqhPRPLDk!ynX!UY<;cWyX5hMy=-qWo&LyGoe)PGf;Xf)?so4~_eOl*@?eLy7o?~h z0gCjlICNY{SG8f=o!=GD2uvso1H@@)FD)h{*S8mZc!ML1l*U*~oDEn)IerrJf*!`? zkErLG2FUMA%)=QlIW?q7bO5SVXJo4Zew=zXYlK|gY|cm+ik4mFbPrMQQ@n<4lH0;Y z7`s-&b8ZnvIz&^26szSfBR9W z`q4`#AYTiYS@WoHveGAY+_&?~D4z)>&#n3~iKxzl#x51W$#e`p7sM z$-RJbut1RSOp#ZKJOf!U4yq=?x z+~4#-)NSlxI;f`WQg01UwS+;$C;fmid35Jn{lEvJq9uR!$6oyrc#!uHFfps?pjat9 zj3SmM4A@t*h1n8aXshU95_q_=9y=JroO9tzRqJb6c8{!BPR`JRS?RZROj8#e(`W(J z;s#-j_djkq$Zea`LGOYlMjy64kE1^KlmrIF3NVuIv0R=+v)ELrH=&Q(@$8hRyL`6o z8Ic@~sPa!9Yf^i4ua()6^@YY0Wg_3QnXLB^MFC9yv9)}R4l-Bf2P$KfJFmIWqUSu5 zF}nK$T`N8^?RC66Io=_m3?BFl=<4ZT9KZj`cKlDj|8H!~z1hp~cZJbdRR`5xIUlEu z3f2n0ni*wp?~Jf}1ul$MZZz$Mfwif(OOY!;S}P)<2Mbnr3|_2@lN2fNW7wSMG`0vw-Z`Q6-45 zXjzV_jM41ABa0$m2t-PD}Z1e*prF> z#_OblA5XkhmUeIOIianDvQad+*(Aj1ip`Pb3tLQIkveq^#CT@R5Sx)WM?{}dr->J6=t|_>YXpZvCT-y`+HlC&OgBe5j zvH%)+3q#fMWuSwG^?T79rkfktE(Te6wf7@qJFX>{ za%5)3M(li50Nh9X_txkiT48vZP*}eM3ng$2}ob zL6@~oXHwwLwYz|!8vPAwana8jW$mx+y5Q_JDjSpJcfIB<8KtXH^K!>lSb*!Gr$fSdU%~EI~=;QG5A8_(0_*YLz0-ggg z{0X2zkYY!rq%jRu0AfB=Ex*g*dyx)8f2D(nRglRfD>^8BwFSII0@LKxFMw&jg_U&B z8~9V4mlP^CEc(~=fHz*~1O|3I0)Zd~Y6?V9E}2-$KNJ?BLX+1&;F^T?qNni2p;ek4ng z`umhmAR`s;@9^ggyRhqbhVvlv)S9}!+w&b9d)1olHX)5J(9~_zde?kaNvLCb>q3sQ zFpFNm-TVZsmU-SzY*>VEM+t!33;(&Ys=w-?g2R8Qyl^H(^w_Y^)PFDxETp@l#gsO& zPjt|)`tVonp9XpXGq43&<5+sHW4RTpt4jy{V;@HUV-NIn0R4c-U4c)5|L+@V2mm8c zh~v8vz@*8rD12C;H7VMl1rJJgO+R!kIQ?_m=TZL3+3Isot*5D@pz$L0bGS())kFk_A-it4ix5Z1|e@dSB|oOd^as_aM3T_Kkll1(;D+7 z6TMG(zN}>z>)9`^Ygk}VuQto2m_T|mKl}xw0s%PHe_9w@0p~-<-*~8{Q)ki{t6+4F ztk6PIK82>-dL?giqd0`s?cCq5CIUjaKgNd z0--7pMUo0+<9;rTNe*mQXqN`79x*d5Eeg1O+&=56t5T=een2h{mny-p_rgvSfjXnz zBsbPgFx;`&*OKqr!j68qiwl1xHBj{a;28JQ&zh{cay8Di;~wub-uG8SH?IA)(#ml1 zF?^(j@or76!n360?9Hy|jNv(s$JS?>(@UgBG<%N^WvrY$7L{e#%{>8UR0c14ax700 zF;G_vpC3sq5;~ms#&WpIShSP2~PyW&%ns5GftDRZ`;)! z>yLpYjkOy<<3RtXi!M<$dlOJkWd~$BUgyj5U4m!K zBT89WlijYsNMU`LtrLPdu~#*yL=>iT3F}+9aMA~5b)l& zxpUG2mbQ1Z#H+oE6H`W2N1zgE4i-0#>BbLiYE5A)7l3G~;^kcT%ai5dS&PZ>o-Lnq zjI&W&pI+^6GiQ9Xb@C8pNL7`4^8Tk;`Ku126rrFencUpnfMFD{x18?#ty249H*Iwm zK|3f;xna^KgJI%P7P!>XrKz4` zmUZtQb`1`$ovHhzkYsmJz&~wZG${VTwRRo%`9%!xw&`p>&n$B_ErQf8mQiun?{~=B zo@_GC(m^B0))TD(n}~q$tOYl$?IQT7%&0Qi*)zRp`o~q8A~ldB}J$$LGsWWAdtbaj?nfh+95#5q9KjDut`iqG_TPj)@&xu#RH$}N;^*0j}JtfmSA6RN=J`tKal|48K)G82KArbRuNBw`EM(dYK+ z{Aa-#Y@>rh^=UO20I0VXQkaY;XKrVX7D(c&k+FQ48cz~5uU%U))URi9W9dapqaJ*s z8k0HjyLKdD!tQLSWi&2(sS4qT^6pb=8si~2uL>_Zb}Gb<+kHJVf{lF%FMZDX$if1e z!;SZq+f8&(G@-bA0H&{l{nT(1f)UH4SuoqHxk$^z2Hoc`@=nJ(ED&O%5dAGkQ$x!Ww zy0Dgb)Y;2we8Z{bJ%DKyFaY&7CxZQD=%7GfW%JXUzg^Z=%BJy>alTL&N43nLp$<-INJa} z>aJi+C=~(^*elu*W+Z0%qylcoEgHWlPum}c(-oOy3y4AK7GLvguLD1NW{5nI7;5e4 zW-XH9;t;8^6z`@f4MFuPdY%$Gve6_(1L8Mi%tig# z?WMbe`^%TH%*;+^``w}SI$_DcRH1_$I3j&{Yx}b*y1g&kq_=%E=Dt@Rsf3CaXF8Pn z{ll8h-AiU%HkvQqC)5nM!HH*cQpZP~uEpub>jO$y4KQX$0Ua^>yO-yybdaF!*y-Mx z9`%q7FC}AzR829L%Z?r-C(CCyJ>o>$y<7EoSzBIu;HnN1(bz>mSP9VkWW&Q@gJEe> z#O9EYO%7$L%W@@WvPm!Hkl!wP85SF=YU)K^(ayGpn}PMObY9hz_@JxG-SzB`SQ5E0 z)N2DM)jS*dSofscB|R`FexY)IiHStaq3rU=yu|>0vJRhYw_zj=Ko?{&(a^)* z8ei;|pA8v9!^?blI7*tQ3x}5rlEsRpUyfXFTd{N3kINR%%1hoHr1)UpwcBW`??sn} zfsU=)TeCm_eaX!LOwb+2o}8G>^Og^cLeG^L_9k?ay;>5hTAQFp=6dF;%2EfT1xq?V z=~zx<7xq0kpTP&8{(R?g2qAXAbHYHxmj!K&T(2UivmUx@=u-OOhr@x~Bd4 zAJH}c<1-$Z8Jd)I=NsFNGW zASSdeTO%N8jBX5vCyf`SYIcV-VQzmkHEp#!rg1)0z*gEQs+(mH6}8w3;Z(G2PK}D2 zG%=Xl;vnU|hgVhHgCDyeU4LbB-T-#Y&bamURM#D+t|v$qtV~@#E%z?CqWiVo@^ zUMBS>)$^|R(Ksetg+z9D%~D+W^H}zI@EOCJU`vtP@B+P5u)?8tR%uU_$0c$RKoVk z!WGxu2r1{jmp&&-iVcuB)jNs{XE72+IT;Hz@QEX23sN*8Db#^ywCvQ!F`;s70KW}@ zTlhaRbUZZgbQI-KEPNkLyzaichyuA}vVrnn5)D=E{AD9&<|G@^| zqZ(|FPjG~|utR7EIf#^d6-B5Jo&NJE#d4(djSluUEu))3FE5U0fF|Bs)xIu(-yj;~ zekO03^{$|lTyo|;pO};-e%azg8K=i+#ON}Nr5S+)8{ZSnu6Pz4`OH--HUeK&rIJQw zyW6w4vUzqOJ%#;qfEdll{!=~vP1=L(bkYAZz}i>7a*b3*2PwR5XYG$D1kU&c&jJqV$ND{3 zIfbgYo6ZX`uV77(5WJS16@lx-^Og-vg}G0$XdJ&>ur1&%AXEnP1PfSYyZu;+;mL7=ZOB8c=Hqwo9f_7^YyNxry6qx*Rs2=;^=O^DT zS^l>{f%}FL*XL=A-J9~>b6bYHSgnQL1Ii6n-&C}AFo=`lVp#6c$ zNtk)%L<%mV_{_X?kTU&wTc^O}3RObKA|!+;>V}orbfq2>#okY9_hP&h+TZBZJnz2{R` zP%M_nbujEpZnsz+*Mf4{0XTEAIcy9bh4Ay@)56DXKSN`PS8^f#CuERXPI($WIEk-L zGq&>VVl4flqhP;++D2_;Z~h>^iMu_{JoLnVUGl-?u-W|3Ttjj!Y>g5r-W#OM1!%n| zf3-KbnbWgJYzLRw2T<~t~rSO5f7Z8Lw;9EJ}=-3-_>qkBM=178+GZUa7q^ zyHhG3T|J*OSrlSH(fKi7d|p|kr!1Piv%5`3#Lj6WM*7lOhWR8 z9N%~8;N5FO3g;yhEuTJcaYzqVDbO(`gC|F=rhckhIgfmwGX3$*eu`yCB7$}`r}Gt} z={-0xcf}PR&SntRsWqfdgZeMsH;fpuQC1`vQUesVdCH#GNS3`uDl0MNVrGqb(4|)C zllYQmA+CY*+`gLw(L0vtq3E|9pE4INK&ao7wMOoTTo zE9&kh59KJ$vb0~`9>0JIt zcmvFd`wj7U@ROlaJaRm>w$=yb97gKCVT_k^LkX~E9X59aUOfUO^-&$!EOb1qUE7k@ zF}-Spw+`Gwto0qtZzXI1^uWUJS(Syw<7El81|#h)&dc_a)gwbY=(m6&8wwcuzbn4< z_t6}N82q@vJmL_Q@3VWLQH5NUL5#zYpcmOmyk*)?qHEK-dbNug=8;6!)*R^S_qW{7$K ziR4LY04Q|_N`c6`xOt0E)Y0Rrubb5L9PVDzP`?$o$Om-_&erVBUz#tC)mTVbpbl9y zcxzLvsEkBJBve>qPfkOX_;|D2PTu*XF zrqSy&aPlSiT5(O9#5Nw#wrJXIf;-$Ud=+e4JWu26U3z{dVp)38@HDRw?$kP5vqruV z;C6J(5JkhwSTlUJ3zGN0hun#NOLLhwzd$yc92aadH0W7^@t2@(erM^wI8#wwI9y;4 zN+J}7ZrXzd!tH`7X2?E{Z`8%xxUb8`AuHp_Ge8DHncY+jq6pA^QcBZP%Vc|U=w$RO zb1=bU)FK<(DzAUJ@SV7Fb&5#Uk&6;hmDK=wsc@T>>^s!N(=mwGNO>OQxvjIyej$d4 zY210$T~<|*qFys+zj-`)be#^`H$ijhFkuTttb)-q2ze^^x_pjtyw7+@Tdv?Mt`4ua zD;Y+oW6r4Y9m=l&w;;?tdfiv4T#(kP)`r3#jCe$tqQWPgEOKBYoTF@4|4wa)kY#HB z3HzoZ&B|{-3%)c8e=1ZWic+~^A&lgf*#=`sqf{7}OA2)?!^Rj9>B4cyc=#tf11v*| z`BCDGLQ16(XZ9s*vjo!|n|Ij)x_q{N*M#(HH$wRWnMK9!$|gp@UBZY!dq4E@`10V) zO3Sm;(ifS&z+zrrKXZuSY1ob^M=wbd_3`SjFPtJE{b>9*acq%?TkjAs&4Q3-w=sUA ze89)3vqxny!;{wir=l#Sn~%qEBDWpMkDkS@i-*y}6wNC)HxxP8_RJJ#)Dbw1unnC9?t9CTOx35lIRo!2P7W8HrAHasWXr zBNoO$j&3&IH@~AEVQ{4>WC=5KnL5|rv!YvL{pS^p>nF@oekx|b`{aL ziZ!f%2(Q0~V)s$h+2Z2-`(!84`_Ye~SbfrWatKA*7R+x+Hq54qlQ}G51vXpe{K?a0 zI>&#eT*)lAv3Qg*WV>IQ=~4C8t3!N>UpdSHj?BaaEXWhxBzf(Mw=hwQ#_d~(^Pi}e z3X{xeQ51Fgk|b7?M}s9lK7TM2Ra4255zq+1!>Iz737Co5aOJZ$a^q~YEAB`d*I3Pk zaJ=0pZ)3OV!?{ap?Ff61+8$(EOn4A`875BL@;U=75pInp%LleX_bH!zR?ApRh7&Hg zj z34Eef)&@dI^c{c_BIlEKyd4*Lk%LY%CO*y}&d=0@Kcu6S79UrO1=Gak9SWMwL`#p)-_2#nIwJGygfCvKfln zxQNe`>Q#k;RF*zFdcNz+hwAVjSQ(rbJfbahqt8hB8ezZH$Ue~pLHIm zcctS{Z)HLwf9a|AS%;0$Sl0J$f7H(y!M)|``^PPu}mYE+Opf!<+t zA88opRMe7-wzuDXXV3n%fB8Z=!x{d3kJt7wiQ>mkwLPnY0G<0tiY&(B56s&v2(zq| z5LLO1$c+rySaw~#KAJb2oi}uJ?KBsp9}u-mP3D9+=i8boH13>D_*^c}?vs&C(T@9r{-HLR#4nw~Z;0C< zafTm|kAI>Esqk?NcJ{kE%EW01=zeOme)Pdtw#^nTs0guiwSPXFVq7y%^0~%S@tl${ z;p1eY+c@xL`L5&+Usu*Cq5>~fhmZ+mR@iT0&2qK-wNGrn3|y>yVRr${;2u{W=oX@A z<|82ft!#h=JK6dX9}G^_wub;>g&-$Alk*iUgKfJHSdEJb_2g{IrrS_t+6unLHJghJ zY-aY4T&IJcmhaf#)tNOwi>vi*FET|og`9UTPTSQYek zCARwIFBP8ZS7c)k8gi4iUvt?1)BZG5J*J&2@Xa-%iC)Bet6on@my!ErD`jQX!yA|5 zV{Me_piBkqf0=%gZ0)}(fo27tkb7HVvN*U#hA+n*Z|kpvi?&ZW#PJhQvuP6L1){*j z(_!oeHTeugQ1I6sh5LH>PY+1;;K^a0hUTpk4-M2D6Hu8(}@r%p#pE?`Ax}HOPw-P|O#;4U znX31n;#LKldTqb23#yaMdhO5Jpss$l9piide!1*Diiy&)&Hc^^P}{F*fPIr_tP?J2 zh|(r$WhjT7)4@sncvgTZ?Du@2>6;5htCQdQm`hBcd>|dLI^u2LYxCv260ky}1z-Lu zMSC<-f^X-xbe0#<%pob?XwkJpHg%w;|Bkef=pl}2vu0Wf?8}IZyaD0ojZwY(hjR$B zb&Kc{j#r!f!Iga(RfJu<)2vP0+pC)rTRJ!~fKrWchfrC4BYjU%=155sbkKusZr{`1 z@`TmqRc0s|)|`Ae92b3f;k9s0@21!B!smrt7atYhJXd_>(3k6vJV2Y=IUj8ju_7rj zYirp4)YSJ{hmPDl9(Bdy9=GoO7hix3_qu(R9eWGr5kG)#sdtDg*E1I`ClQPhnL_|L;OFy10)JN-JzMls z*T`3pSRRA>!IbQfZS9_A&8f-8(U@;*D3C5zYb0^my-n5`7^~Y2s4aZXQW614LY#n8 z&qs$Svk+GS`6yOC*}YtL?Ac4!16FESe#Vn88Uqd#-pKG1C&L@D@Ssu!Z7I#7l0F~` zel}pRx0gGZ?OFe0UC!$d?p*j& z+2w(nJWXk1qkaC{Ll8ScAC4tL*FWL^iooX_7*| zP`227b$#<{vJ>K7&NSFB-?vZ=-253XmP@@@5i>w#+-x_@fIdP`eD7pozYnM;FgTJDuyqN!~Od$~L^m zt-SooxO`&5(B}gg2w#+C)PMY8{IH?s=z#!^-cqqVyC=C14Bn?!J5$PKULC*ruyC;- z(1L##@cYf&deM3`J4$$RJW@!SD3owU5{KbbeVUAuoPGQ4O-l#tZ3zYS+2Mt}%S;tv zApVqr)Uw+6wv0L2@$ZS?d--#JED_vPv}N3{3fd}xVeb4qI)+6CP;bI;5|DEKH{#r}akJ&M_*RnM*<^;s*& zHJB?Nmaw}0wmrqgLbh0kSTqU%Am4t8Z2zdR4^u(W_Yi1-!-^ms)FBymqM(lPrnF{t2;v$^S=i zLxuDyPVlx5R3Invt00EvXIDxF@^H`m9VTK5T?WXKB7wwXv^qD)4nsj7pz)}&P(UgF zINb+iCuDm9K3>dI_~I0L-w?2~D|nPAmfz_x0CHwRrKZl2e8cEFC^X1m4|C zUgq(|C?6$yFFVR52xd=CnGP2r--1mGE|X^}s}TXdl7yU2U=83-y|JHCp4?<^Efnye z(br}1zTs2Hf!OJ|8MCxp;>eW6c_q1(1Vkbt28V3&@EuSV zi6e~`kwdfQ9Xlu3*d*RIX&hOXDxI^sU2vhU<*p!7oVFk|TxciSKKZWQ_Tu!k_Pm71 zj;fiGS!&rF2Erea$f>qgGg@A)mD`IIUX*}=-BVhiQo&SV?;iQl>H+?xH@mKDt!w#g zP=A^P(XbOI#UuM(aV{Y|C>@-O)TK%2*OBey_-%Qpb`4A9+AC2-i-a5coL}r#!LPIxy4!2H* zEoDYNx&GzLmm1LVeW|K12lDkYYc%8+><>Byls*8AiM+7ijLqS^`3uQH6aW;=lX=jm z9+~%~So!oN6Rrv|Vo}-p9t+yPeC@^M-fG)_)RDW~mp z*?|Q|=I@P|sPT7|%e_H4n8rlE{VFV!urPp`Gw19tEfiX;DrrDPyS;Ty^s?mi)q8l(bet(Yo-%l*X zod38 z=zjp88MKay)zoGV1Zc?w4{i@z4Nt4&uukn^#d}RVDzC{cGLjW%F z+@+|^xqxThh-;5uMA z8^+Z6p6qpDTU5GXZ_#|>V>SOs@WGhTpE939UVx5DFXJ|NX(oV6Hhd3H@)HEVRz?|y0sEj20J6I=Xx(Hg+&GJ=Bfze0pqMFl}XqL z46h!xT1pC3A!>gN5qjtRRPRFa*x0SN`&nLKzq6dQRVuP$L#?Y|4@;6TU9Q{Ao- zK7Uf!N}6c^$dP{xlXMO7uLTnaFxg<+GT_$;5+gtq>}GdGumEZ|mJFrU^B{K4N(?4Z z!-eS}=vg3_u?Zhd83ABH>TnNWG)<-Y|6L{-!{48qv*Up{VQT z+Z4iWQmU@Tt{zgh+FU4LF8i*>+ulC2G3WKP3UFFB`(YdtxkoS_ z_NaA7w_Q#vHF$lDs)(fdzEGDR)GK~L|u9by;GwR*m z<=G?cJ=;C;2(cd!>Gy{MTe&wLxVtT96H=PMTxGDJqtC8+K}CaWPulEsW!-v>uqq7| z;W+hE?S+v$pW;TLW5Lp`48lh2_!xT3sZR&niI&%%8 zSNXJj+*~})K#wS@98_E@jd+bL;AS{8d41xrpJC5~$?>m{2KW(gAu<$~4{0*?vO#)= zM9S9ajmgD;zn7;iXNBGQEIgxkm_xXNdsI#Lp>gP{J1|Q`Dlxhcd!F)=T@J@Tp=1DU z=;|&j>Yle(L8OMW%H*3wz$9IEcuKLc&%vxWdcPe-T8#~NI& zLQz#r*+@flA^KJZYL#}PadK<-&^-VKR~)ATX-9)#4)olU5FmUGz(KfkfZ^c?UtfUk z1)om)B5!UFjr}|KiP1Wnfn1``@Chku;G#1m)n{%)Q=$t}H3HbkNeCn)$XkWyGg`HTkiYqU>j@Tm z;cA-u@I7kHZ6+G`!t@n^JJ$Ni?~^K(qqmJ(Bbs#`BeQD7HqClARk>&3zj`WwHU)nr z`v5dlE(n=Jo(|$PHzYYo(R{Rkaez;``Z$EF7uE=cs(Or5WkVWQcaEn6bV(01ISlfv z4&6-&2Qsqsfd4|bSqA6e*C;)6@rJ1Y!SJCs00F0mfvGGh0N9rK>wzDxKyPnKQTGE0 zb^o7wn*rF5c4iK7%z3_GLxH@>=H=o2PEa?=VnV>XPAJG=8lbRte5?#S;5(LsRJUj6iYmkA7c8FjDZ8JZAT@VX~e^HeVU**gZFhp>x{B{UOj zhtY8x{^=hB1My#(?ho ztf`yLT5W8I^!bIf-7b;+hiN@f0erI0J-svq*zITNmdPp-LxL`qoO+FgDXY;zml5(- z@)pyWyAmG?Id=nraC;zLz7fo2D|EV+)?M9)vd*`WTb(}RC7Hj1y%Kj2q;Q`hu5Crz zSwCA;?E&|%Y1<>8{sNCFzuZMQ=jKAmVj;`>UCx#@xgrge1&@61Nr=)bFAm0z9#+6- z`|tw^yLkR(lh&%0X!(#$Eq=+flGyPFZ*zvrZk~>9IDhGR%XRjO!?#=PJ{07c8S2?; zn~Vb1m>$)B?MF)lmxbjhP4X+SF2(=uJrjV%_^*+T|D$GB2(aOrU3JqqM?D`Hy9O-W zg>E^!X^`z1#8&6!f7*8{cPNPVGf4yl(tl~GG z%gcbUj;49!?5?Z-^`5@DjET!jL|_pCsD-u9{!$qqE>q^eyczuGn{+b5{V;!dbLL;~ zvDwgl@!waMlh$EjKNRIR0dKhezilXY<{$QxBY^#V83s$GMmq2xYdo^YOrBLur}-uO zEX8mK6En&aEDwzG+nf||?)2Jp+Tkh0NuY%m%RPgmZLB9L_mS7kKP06+9a?I?Q;)+c z)B*5!fkO)$qjg>y2^j0W7ZK=E?%vw{!NU( z2o{T*Frn)7&crwK!Nr-Jrc(sDp1yQ1%#;8;xd<5QtXx>RFL*$9dO%hz&)QDf&!*_g z69>zmjaznphkqi!Uz7mossIPOf!!Y7Ok=(npdVj7vd5$QQ-1xwv@ri2f3(&KutF{8 z-HdhWF(=erV2*ZY5J$Xkp35tWKOgBi{gClTl**jlT>C6d(7lDyQl&lJycM#kb6CS3 zu9TtTeeeHb?>(TJ-tzrX6cH5>73n1^DAGifCLpm=L_m;URX~~$kzQk?mq=Gyq)8Ky z8mXZpDj+owgph<@Lk}e6yv;c?cg{I;&dj|t^VWO+``%ix76~c8-~Rpf-rw>m?asVT zdNyX^%I%EbDyJA1=V+#sIr?+VtV+hR=5o2CiI(sFYnrd111-wfrVvnjNJ!nD zB&~8(DT%KxLAtg_f$Mz44+(+&jL*vo_sdV#>eM;xqyTm$5TMoC@g&0lFYFO0K$Y@o zUdV~%7<&1O_^k_ma$^6)sKw7JAH@GiWd2Xvd$Jp2f$GR19s;j(M!SHm$0Uc236O*EX=^xj4-!NdMY7~AikIC}wd^?vOO4k9zScyZ z1$mi_td0#wJRPNgcY5Y#EJKX3= zZ`=Y1Wd)#3KhaT`05&yq>7Kz0PnC@|5_$n%NIu)s$W$QFZ2Tx!z`|}-*jnp{oLKap zK+_$Ta-R_xq8`&I;wmZW9IZJ6xL3$akb$x#C;=>b8?PJ_qFwl4>X={a~Dw1aiMM3fCQg{e!v-yFF zUJ18MIOhz%StfT7R;d$T^Gz+vLGsj7p2OVnOh8oHQxpwwRj56r=@xBo!h{Zh4Ao0ARJU2@$?`dpHr`8dN!$%A32?+=*3nr zDQY{&?zb^%4~e`QqnUdNQkL?m{ob3Q2lr}IN6ifu{n33)dB%0=0}jr6s&B3u?>V{3 zb}6F8o2Y1$<^R;bt%6^KT)hkjRlL3H6Q627?Sx^sH8fYYEZPT(zG*q&jRrq%t!8yd ze|@ca#;|MOA(F*lHGTj=G=q+fX5~|Lz`;piMIbyT8U*3a09PDqIkT}skfXXf`nB0s z$qliGwn@HFYs1^}3|9jaF8Jv=c#yq^Nd{ZUlCGRh&S2r`?AKgP3ot1tVfPXC?$fvC0JY$grJp#3s2=p$Rx1{KLPBk09Ad5B|PesxM z?0Tu!UTQk*m^2PB7g^M|JAHj?Sx)a8eT(%pM8@D@W+{SWSu6O1uO#IP)t7{9*kQ!; zzxA?wM+Q-MbLvI1u$$Z2=YDDJxn&+-r30$r={WJ=Px03dmuQKXy2#zt!}1&nR|f16c_SM^Wkeb6+T^J8h?tNG@lMe^|@8`CscXFo0DFd2eJ^? zVt#CcJBg%$4D@H{hCcQwu*AcgVb3nvPBokscWAUY=xQXk_VxRwWO;msyUwgF`^?@h z?r3%!HKanE@@cSWCVL`4nWg%amfYfQr4K8$CU zZ|jVNl;7HLwR6&|Su;x4)8XXy#hN1Xi|pFrO>5Ar<$rv1dZAQ1(hW}o!sdJk<&tL* z!6t&nf}8V(Ja-%B0c>u&K)mneg5f6rld@6frjRv1hQiSDr zb*9c6DuvAD4Wp>C)Baf&77bZgHD?zo8Pd&*E4T5-7;}Z5YdQ?-eET8Q9rh&kLF~st z4z7{ZH*J@Tx-9m=8!p$-TT&kQ3X&~|DG;sY$+$7x%LJ6{Kvm{-q87%@NZLog5?%Sc zwLN7jo^W4~L2p7l;!Bn4b4ZsXY^7pr4wQ4VB_MO z$Q(y07Lg)PZqdEj5?RLP-)A_n_3C4{53~u><;OBGr!eToV>pG1zl@Lb5RCe0?L2#6 zEOZs%4s9tu5N!5cvV+?L=7KsTo(ayTR4hJyb7x_Gpzd0D4n4pA0%dC?B7;i~`f&o? zzyl4cI~6p>o5}}cXes)^6imG=suTqCw+#Lk|3GV~N9k?}mT*cyt^Vmch|Rdr*0?>i zUK~mPvbfSIPngDXBqEb~wmgv!q95Q?Hgwj{eBow~$tPjK;OZCbj5cq^U0yJ~RZjLw zjN8~kJ~W*@YGfq+t@j3VjYDmg$Dz==%v8xGoomi~eFw!fOH@t=s@$tI4S>Ph%%ntC5(0q6;99lZcKSs(rLGv$8CB@k70;eMJvTORJuJDIWbgE*Ck# z6LcVb@bwMlXGB^j_6TBmb;GHL%IM+tZq|HHFWkPryX8 zFP8TW>&UEpyLa?e#{Ns4uyv&Z8ib@Zctt_Cd_dfHPCfX1nqW>e*S=8IvG7Q_B2n^N zirz4papMip{8=1U57O5PWhqd`#v0(2W3g^|rfib0U>E8ZGGQ7($*%_h2j2Vhs#7kI zt2b&%kcKNFFnaPst-YR?nlawcfKv`Pi$l#cS8zsEB`=Oq-s03zPwt3tC7uvCzo!5} zZwoIygP^jRY*@!^ID--J?|z>`xK@bVr_NhtpFeXI%agI^LRf|Fn-}DiD8mX}VU{=A zP0Bxp^OcYzbyZtPPyerwGAl?~(0n&g+S`=(RpNfxtRLaNQ8F6R^X(wt1#6M#b&D=# zZbjFt`WGHc5xuVT*T{sXg)f~ntiN)E*m^`|$^s#22zR7j+(7^+Jm0JZ^BTaua+tGX z_NgzkYDR+wi-*4eM--Fik^t)sj$}uTc9iVldrx9dzdg`)O{f7G6h>mf|KLt&lXzYy zNOD9sLyy^yvV5m%qyhP!#^S!yl#4gcMixmoHKz|es*3NXwhQo#8>UA+Jf#z*)2K{Y z_v2Zjsm$5Se|{btsL!>J|3Fp|P~RMj^}qDJ#)WbO2#z)>v6hp}gB-ka2eC61+#j%o z2^D48+G2R`-Pv@oSff%ow_Z~tl*$0H_zg5yR*P@(b4_ZN}hj5WBJ#$ zLA)#$WGPoieHr_dc$;jpu{Z>eXI)p5%iENM`R>jV*3-m%=9hHK9o|{HB6kd|plY*J z52c8B8_>d1f!hLhjmUdNI131kwk*WUjpf14Xo1pU9uBFkXU zr5B7TTIIb~-BhhSTVdWK-%8G8HQg-X1+erz(ej7ZaLgG?dHcsUx9p2nK>d$Sb{Rxw(=j}>p$aggxLJ9+W! zp(sp7_-Ro66T=j$auw;OqnZeL-*fVMy$cFssB3E%bCuZy+QsXLQx-hFj3i_|fO%(m z8mN@_ECB6<@r&~3AAN$AqB{hTZ{KXkn3ey%)cOoTR5xEU<#xdr4Fy!b|EiMK#a9o4 zonMsnt{e&!J#ex*5q~N`=+mJyQFj?%pLY+uqIuCd^{uot+vg|8hK+7m39dYdgh+ow z6klJm?2nX>nKRm!ec=i_Qt1d)?U^^q@@hwwtA<3ia?$Q8J>q5U8^}7bhgbh@gR@w7 z6Sw-4YjOQo?Jiun=riWranItQoiIUpz(BpXwOH`_{yO&djrefa8)s!5xfE@H)E?ap zhF9#}YP?UHc%POk} ztVic`rR$!-^t;19(Xo)#)kv`}g>hLk+Yd)>+q^M05j<^ou-zTI-!P_KG10vo?|7*> z8rz;TQz5%z_(iC~A;~p%__Mq`JEMb7ICt%>Jsy>D`DBh8%lqH5#nBL17Df#x6Xni} z3q+s$!PoHO<4GB>&r{Ol7OZe??4*atGEIu{qz;Q zPDMI=?NvCK9x!f4j5vij?qwaa0$_ko(_duB@&(gc4%SdqVj$SPUJuPO{C`Y2f%uw` z{}oSRicp&EQRk5@uRZT{%2v1SG8|p&95{lzVn1=>xR**R%aDeWP(=(s0&MQVNalH0 z9~VcqpqE7jWfZj&$uGKVYhDVx8-B)UKTBhw3R}ENJ&Nj?TxJZeG4q1e@L4vqwz=fq z37=?G4B@?>H+5)lIGuc|!-w=2$>aUuBU%lKO63{t+2(fgj-$v+Zw1Q}`vn6AljF}R zAMCo^W}JFuZ!6o~c>PdzZMnT{oUhN_-BBXl-S0j2u%P>ztd;PCeI6yIA1)L$haQ_a zAX^na#@hEhrmgl~cMVqt+08k7M&2=)RqY8wZQiXAE6UQ!^Ho`wzRd!WbM#Pc())z` z>Em{?-cCrjtZ&tVrHLc_Bbdt#;SrfO$(99|?veB(3do*z9EqB5y)pw1h`ldY6K{-s z`BlJ)@x7>K=-&CqM^zm5-a0Pk+?u9+!cmX@8QnaCeCWBo(BFFlh=MfpcLHO%-_WCw zbfA=^yHMEHh7C&pIZqtSZdOpc|B1X`fcs zk3+s#H6q39S%T!~QVCxuH6t8pspiX{e_}j1d0~NT7GzkQ!p-<&(uU@H|~oJ%cQl+P0du&Mw=4*Yu*P=sO! zq)J`*Z{DtyZGs}8zg>yYnt(g^Ynv7UlIjiGD+CXG3G97wcNhvi8&MN6C@B~NYfs=PNK9H6=wh07$AQ+ zO344xAyfI?C7pGv_7|l#4ffFtHu+@d0U`wAuK>zk&w*>j9k)5Q35${eWX?4kLiN`L ziMu`Mvhw)K7owl<=$w#LzJ$n;o-J9~Ve?ilvu;+iw_w6A%c&ja6 zn&1OV#?NTyF;v9Ts)uB@MqYHx+|T+Xzxe!sGyh|;ssHZte-Ln6+%{k(3E?4ub%)6| zy1i6!sTd=B`Hsc>r{?3P$K0HSqaQ?lXB3)P=&70+2!FB)G_RonKhb?_)g8{~+5lkZ zzm1l&5_2U7B_9WEVHLbi2-*r>J7%|8`V3%34q_Yd$a%16?hf{6m7 z1G@wGDJ=Cy;T~Ks2KBguT3D17z-e4kKoq#|T8#ZprJ-u3r;gw4{F-xbM(rjg+*&~| z+$S6CH@m6r4S@YTN8h2u=ig;hZ&8M5wg`q`UyOThFv}dX9(SZb1__?4Xy=h?ckjcN zwcchfbr6!SH?$dg)Iq&qjw9OPpc5in%VW}LW>hC`KW8zeWa}$$N;AC~o1=L~a!gEJ zi2IOW!dKXpZ+}7ZKKPG?WdCgbnKKg*TWUhD!1j9s4FcuQ4xaSFJ=@d=St|OkMp2&Ge5niJtf$ATwr>d5Fjes+Xgek4zTv&Er!wDBwG} zOQO?w!!<4`BuIH!{e?&sdPlz9Mpz1yD67u*QZ({odxJTtJ{hm7eJr4E+T$3zZt*^m z#ko#Vd!6X;9++NHYQF#1^^#eebMJe>MOAhOLD;_zHuVB(g%l;(Hjw$#eUrZS9z<2g z2>DvaU*BK#$Bc`;Y^O9idF(7YN5;*#byBaAbp0aCwFP61?SaSnCZgVbMTGY`c9W+t@V#|da8r6r9&*2u1WWC87 zB*W-Z8Mnpy*Wx_88d+W#Z@z>-hJ}qv)kO}uLb;5myX^{N_D5j{4jwoA+W+L6WNP_* z|HvEN@H`<7xI5Ei+6fwv;Y}y*M|%11`f}~!8&@HSx^v6>lL$ozX5^22ka8c$sx+FU zT-0iI4&s$1ZVhN{FgCMnpM!2GzXbeKIq7ylJhtq}(@Lr~J5AwTES+=?H$i0==~t(= z-}1!$>czISdNPP*ZZZBuckVkp0-~1%^vW|fwE!W8#SuCV58C?w-|^Rh{r~P*+0}7k zs1NYy@KK%~HyA6keUoA6OlJ7tEm&C_=Yub+eY9BOi}0d$9r4VO+QrZ%&#V&0VEZ56 z9jto`Q@S33nF2WBe-!44cED{dPRvz_F9k^LFzIsN!4ACJ=;?Iq@jVxUTtxBRdI&hX zz5t$*{u21^+Cp2a1zws)CC{E)eTjcQ!N+ki3xH6i}!9 z98`f^fi_XQtkP>>6nX;V&It%L;~Gs0{+q8t{Gam<0Pa+wX2vwaH%{RI@y1Fzf9Lr! zJuQ@lru_~W_e?G+F?hbG5NZ=51eeF#OncXcTyw0rbrtpmta=L{PWJ_tDqod$<6!OgOq@#~@X(@&t%5F=39&HqKOp9GlVqR{fLqYVTHGZ!81 ztk#Hp>13B+cD~O7%9Q*zeV~68cseXgyVr@9YCjn}E8O-Lgm;FC47(OO@Gqc;V2j*d zCgEt&9U!xbrAm~pKV8`01B>xe!&LZ=Gf7npx?u5%`(iB9(d&7RQSvRbyC)B&p zVQ1=!T)DpE*3bOcf4zV7>uM6)DvWxZrk^m@77=zy5^_xO=6=m5N+=02-ret@#cxwzO+(!~R;#A*!JxdTgJSh51=6R&UyCMcM z-!hNsGULL~a#ItkDyzRU2v51fur@68xCIEC-tLLzLtWUnBRZO&!FF4BGDFmnBRlz? zg~AozZ#f;eWzBG7Sg=M`c4!HcLDBAv2fk~^0|;z%@2wJ<@>hVjn~?!H%xnq0cC|3H z+S#HpgT?`RPO4KG%UzhC=p3(sgZ}TU%dvf)MXxw3(F4&A`5;=T@mzjXKYX0v3*rD% zH0plEn`8FFYHF^PEir|Y<4=|&Kk^%y*EC-4l2lD$OzKSFKcTYUa} zfYI>KVn-+%HHTuQa+@Q5qPrc{r9wpJQD1{BtJ(E`!U5)lmfBDQ72&||mTA}THoq_b zEBsN{)?t9$q_u+4=$16dHE?=B^_YR|oZ$rqkUKxoC4oWx6!{Dwqe-b*SwPIazfkdp zUyfZ>x=F$NI6=t|+(r?q?h(&MM<1L_X&#G|G-L3cBhj1H)q=8IfG@l_ab?y)ltnE$8tR({zHmYPDZZvcYhW?rxp_cPScpaVrPg~Oid4KD_ zn)fq8iM6uLiQ!mb(nfZ+UGea&wt5~@^^MEbrF&{VXEZTKv!aeX-Os`ZNvZssFgc|Eg<5$&XiT?2M(PsKYvHEB;K(z|5-=Wr`6{s z>tnzN-Xa(~)ePK4#cD9?>IKHLU2WWp$bBg0%5+rVa?iOoipV>9Tv&^i#NJH0J&?#PAZawb<=F&SXZuHX&%Bbw$I8x&%1)ipoj4b?`M&YYDeC8W`0q8C#y2?kzP!5 ze%#=inOt5;uC%awXs=m%G_`zw?P3N4=a2_HY&RgElvd0pqNs7WAn5ui1@OlYP3Ncl z-IQHufgeHu(pa28DxwW)u~WXA$E#e`gB&AgXpsD4G1&5*)Fi9OoZgW;#mXPPv0Zy~ z(yExwJ6dGj7o_G4>k0EXl7__bJ0@07JYP2TeBO!TFf0{o-k{s7w)T#tsJ!UJOdU^r zhcxr`&X)Cq0kwHu7h9dqoO~S;vnsPkj(1sugbQ0M;>30+#pD{!-W|TP(Np_jPNYSI z^tnZ?>B!iMC{c?n(iXl}Njpz#*N?K-k2bYOo^U)bp00MyAvhqV;ru%{bCoNX*+9>Y zOGyq*J?^lPLEg%^!BZHvoN-G@l5{1fD?uojE564^wQVyqURAJud?NC~Ir_EIraIAH zMKcGnZT&Qx+#CD4V1n_zVtLW0nofyma`GRT6&@8_R!SOMI8M~*FPdNLQ0iCjaB;iX zbojPHsU#gsftLyubpAISzyfqh8m3}Z-a(qu7x9kG*81$Iuz+96zJe(@wLtr}D z;rzZKx9LpZDeuK_89XA(-@*Tz|IuZ}1{_(`AhL!v*A~uFchrcSF}5&}m22cFt7BL8 z`F-fD+=E(ITjH_XQJ;4z>3A^;B!jV05Y6tRLKx=j#C!!v9ARssh-1cfqkQDru?6)V zdD_OrkmE#cFu`EegF0arBlP|p{d!STszgtXMcUci%vpW;_@uK7DE;0KA1iupJcx~I z*ayk7LbswBTdbMCdS*Ax!JH4Hj@^b44hlLu3%smmFsS4`vcC1a$oFwSdMugSV}Xq# zKO=r|PD!NyRG-p`8;C?*%$XJQbJfRSm!m2oLm3O~sdhU-zC7vhhHL1D$QRok&-#6Z z(mXGjMXt1u)TC&dc%F)V`wUv6AImN>#8_ubzt)Dww7?JhT6FX1kcxt(ERNgFPRdmF z!UU>V<#I#aHBvUd^ok~J;3JRd<>+as#f?eB&)A-AooJ!UNSc8zgDEdkLX zp>08Qj26QZj)) zxh+%*d1MZ|fnuwx%_moE&ppaM`=KW&Ds}FOn|0Fo@TVhmEp+~Ym>9AwVJeiR4HsMm z3t@RNugHW?Qdf_-xQNrm&FyJ9X`O*;G{Gx~-lL+rdq`JziZ9V`?$EO@IZ| zeGiGR%6=uyX|-K}es==*yZ`V;Ac=1(yueq11?Y~Rul3_h#A#}1vR9=X_-u`ECmfhM zX>f`FkDv*VEEa_G?5aMb9xNt1WRdUNN1JQpA6U1lT0L+o4Jy)5#*&Xde z3?o(34(N>mjBg?&aN)7PpslxN7(pF&B3DSC0!uo09>XSgd+_LwIcbJ7W*zBaC`Nv;mGnHJ!nfaeY|pxK;!c z*F>DpU~VB~)hrx)lgB&%ct0Z_r$L>;)Do2k1HfQP96J%c&D-#RH6F+bQ2kLUoLRNM zJCttjC7h$WPi)KyyEg~xecxc3?PvD)|Eq$F6Ze5FhYNvg?ak8sc)$2VqscO(*p3s9 zuM69g1LWicT|zt1;n|yPk%#Rb_3Rsa+F-u8Xr*~)@C!V6^IeK}5ZVd67 zn7AYUZf_+t7|rj?N(x=+#I=~8C*gw5OYa|cY2lOGffQ=E^b4*Q_V8OviohGEOgrD8kdo zvW+Vai511~?W&|~1s&${V?#%D*AxZ=8ny?NpD%CL(?m(@sRi#no0^OR6LNlpDVS9I zDGQ(al)M(gDZ|yZsUp3lLXn}K0NS?&U>SU~lPYexEc8;sZD~JwSU0h)ktR~>C57fN z88S1!#`jWgYuu1{NV@{HT`u^r>N&}z30juW0NO7sc;%O*7q~G*8)9$UdveXpw#N3z z%v1A*I(42TeZ+w}oA~K^kqXW!sXg0SMV|S0NF~EESzx5+yeoNT9PM@V{l;UhWF+QGrch@-SwpP-T5=e^s&-G|u;qH*|l(@yOatQYZn zs;DnJQhW`U`IG4F?KT36gZzo(qRu>$m&HB_*{_1dDb>O=NuyVaz26Bozp(b1u!>z& zi+fkp&KelIJEkk_KJQt(C1YHw-mbE!;~ zec8QEoLP~TdBelaj`x$-eD}K_iwV3E3ARQXJg&v!Fx9kMGYfBV)OJ*$x4(iXLS{uF z=cTvPb!7*CG}ILxXwI<{iykXWr6+YYD)2y#%=pWa^wZpkP?j0h<1Gv|QDN$+5Y55y zuNUc`e`3Y3Z8Q9roxs17coZ>{MM=nJe)b)dlC)Jbbw@RNDGL zr^x6^DViM9+c~#bnerQ^)VqI`jk&tCKpYz}Y1zg!$n>lYFWho13X!*7$5#YovR6#U z1jdn+bh)@J>pvI01IibeVCjxSj%==G3~tSJed!f_oTFK&4Y&OLIOjmdZ^O@I4zpHc zs}9ZN8-0mAxe>9w>F2|B{h+3f*{-&f3wOXjYK{DN|K|%5ynRHHQ^6SGRqBO`0jc4I z^Mt9k#PxCQk?Y-3uiHHrc%NP1(!clG`#LMfGbrKwY^x=D=~~@Ut#%`=Zq*d0#)#wWPc6jVbyQBMah8E8Fo z61V1E$G^y22)tWCM&ecs`~lJwAMcmi%C3b;d0okPR|w|hd*;}@ji264<24-&@6#vZKNrfzyqPo zGzht<32meA&|%YZd_=PXmWce1Dt@(wLYnoTTW}1 zc-+x07wII1`c#ED)yzOm)y8!`m!7(4a0));Q{WV;$Py&_woQN0@6<~!&ICtw<)o|V zzV$1bQ+Gf0J)U&)5_t1%UaOhSspyRx_=-;&oWgTvbBFhjIp8M?->_qVwxUq+ck2wb+^Ul#vs4s>6L|4I3mnP+oWbi-QZo?b?vD$Od?NK|DH8bdj z1W6?n)5bj&TqD7Z4pEY@t=P7R5J2_WMDt{-hH`3`$mA`#9e%FHizx+WymkbzZPY7C z?j+*LDmk_V&}WYG?|Nf2DY|(#kH$$Bz2Si~7^Doz_BG;T#*$%8$*`Pd%3xQm$J$-SS5z)=Zq8J(9b}!-9OPJyK-O%cOl4ua;->!h zSqyaOy;0|km5B~brxYa^FsoMN{uj=%=2J3*t-bFWkf z-Q^T?tq?U&HPt%2-A?S8gdBoe!}j}sdrDq4AiLrHpm#8e9yw}-_Afi#G;Wh~nEs8X&V5jURH{2r!$n$ZGZ(8{zOqu7zO8$2uBtQbeCuFuyFkK9tIUdf;bMxztUNeq zBw1i{KFWn6OFgtK6e8Wl+=RE_^fg{)n+lV56sH?`FSf$UP~7H=WjjKdG|%y?AVcd1HW5zo~>zMJ=rF!QJq4NcO5zd|1ef>h%4c+FzGVPOp) z-tb}At)PXA1)Z@EIV13&m?twsSbPMs1A|{QbchYy;?2etl^-o; zt0LC0foZO}o7&lL-)=})?_;swu>YHb>0!uFDeVS76d>CIc9Cs*vw9Qgzbm$)F3=R# z5VYt>UkMWJC%O)>g@cloK`@nzj3%(K`(x2uH3EL#XTSRj*`=#z4ST7gZ5+b9_$@y% zcT~ng-Xy!X__+BJDN1$;GGIN0U=K~Idl6BU#iX%7{qR=_jvvx0QiJ%Gd#XQ1h3#6X z@LlmDZUfiTv)N1@J6vmS;QRh{NuqIRc~Dz~#~5TM?g|LxZ*_r&jQiJfR0(ZJkwqkqm_l; zo%Daw+x(+`=RbOG1v1z~tShEmqbe@5=NH_tWNwWibeP`%0Em>&VKCC$|z}cv&d=|TB-(Ghc-bYoTt6g-o@9v|DJMU`z#ty6v zEiC#n9zjZB9M9PzZ zH4GE^?=270ZZCoA&XON!;WD`DSrR-NMq~+PRgV)e##zbOd)32VEnUV{v+9{U4^E4w zfO?-%FLe6RavSXk4^_0=Dd4tlU$)JO0SrZBbM-RZi>p0nMAnZQy~CU*%0c6@0c!VY zNo^3a9E=3q+JF7j^C*Z$*=))^ZrGgC#J{DA#PemfA^!A}Gzdie1>6~8;#<>kS z*w)t1rd16rb_QEe2zh@$8`#$mm%fL8?;s+mys~721lngDGm>c2m|tLNyett`H*^G* zYd5#yr%lv4&y;&w^YWB^cEANv6p!6N!+WTj=+qRXq_S8qk#!*;f}VzbeY z-tKbryn+n>AW_>hfh>bkBhg0y;!IM47SnFB4kN%DHDn33b*TxP+;RCcF-c)wkF!^- zR77;CgI7Wd9e#V`7hPWy0WL#I24L3A;^3DOHlvc0^?Jdik@?4$HDeHuo|>Y8fM;LP zpWR^EzrEkI=bzwKS3$QD1OWU!MJxVL(m$P;zxtXhSr+3|_!y6_z6AAR=Ubo>B^wDP zJ;C8se)q7r3EtI3O`sj{xs7fo1H|S(ITeH@n5RhOmIU?a@9s~FzfFE$1QChlxkV~k zsI(ljUB_{&jeW9|F^X$1N`*0b1@6%p^k>TL&}NGvn7Z5Hy0gobjIWhTe$Zlnx7K)#{@3avqy;8D`ad=4 z|IfW9pbiNCY}p1nJr~flkkH!OmB>KIA=jk(B(NHR+nVy^PShYfqkiO=F4oVd zSJ{VKtM=thFqct}-?|$XemovXSX>AFzNN})VzG)dN zG-U4f^vvUzmCBtjQysp~*~gCOwrbceVf^6qa_yI;Ui>>EsC$1cR#ORoH7ed+W1WWk zVe4%+8siAd9WmBmYfT;y7hC?UueSFBPh3)zkP7cOM%&znB0~emTjudfI>H>IfmBDR zVAh!#GUByQMJ=3_lzR5;0%!PhY(==>%ojD=f+7c8T5@J=&-#@^e?4B7KXlcb+2uyy zB^c~1075_CcEu1CA#L~}p;?q~DB4Yx_`q@U)~7A_smHv`O{qVVm#lT{)quhk=8Ld@ zq8BHA49|}AAXha06|Ve;4eufVe|X^vZ%5+*Y@rwAa5KLBOKc$5Cut(KWI?Z&!tI9M zkw~n445fzU!$Xl1mm;$%->#h5YTgX}L%Hx>&hP*9w`r;Fr57#;`z<~I-G&~ShL@oOm3TD^{IW-V<@=&HCa+QEaz{7VeO|!pEG8K% z7_y)h zLR37J=XrjL$Pu>S>iPIytA4i;@~9eLZlu?-s0h^Cv)=_9omvlKP{ue#f8-SlG zDaNx^{Y26oOu>>Xq--SVDK;@fuFeA|^R0BXm|3GK=pTYTm z{r^9h8vi|L|AI4&Z=~jR2eZo1evoah6F7ss*Azd zB&_?W48+N|i)Trwm)TwrlSsQC@f5S?XGi;DVs9uo1p`^#nDlk#(O_AEV~(leowLWC8edV4F}SCUK6)zI73~gDpn?YFi{v5NHz<2~ z(F^!tS7gBEQ!0D6D{cWz*76r@!@DP|KR$!%omc#PUa+c4rtvbj(H&>u#0#C@7AhjT zsO)(Z!e%h_U^bP9B>QT;z2?CflSJ@qEE(5ohc~HxI67(cklQI9ZIg1o$kNlwNL}$s ztMN(Gr7znmt+2rxZCIOyOGIc0l98%S!riVSr#V=&gi7IfJa20_?W-<(Ise^W2Ep8X zB$~-BR5tK>_osjZ=RBO+c8cI*si0T_wM7TQNiT{JO049V1}rAv9f_82N3;l%w2*o0 zd;BKSxHq7TBxZ0tMD~E`i3mbORNsDmItu;u+E0CD>Iz}im!*dDgO95f2u2C|7>F<_ z8y(aaQQMb$lKA45@drqN`96yPBokE@|Ef=#*+}tn7IwzL&rj&BoA=3(hpW~wLe$2h z<&PMXzCThhrZZq3Lq}H0M%2lA_SSE>W1{Bx4+ge6Y-L8=yu_4)RoytMCU?l?wdAn$ z4@?KV6h+O1Z-A0P5d@@=Gh+RizznX&4_OMUQQB_U4SJsg(a*!wCP6s6Os`QxS{y0}4oIuG`p~1?-%UOnq5-2RU(D$@ zY^#C?ApT~vpa?>LWa)asGn$g;Qrq`g4g-!l#UQOfLVx#7{q!E0h}*~7fA9z?#Z9xd zlPwx){Jlydo*BBm>x`e4_h<2?&&CI7+r{^5b6&s65FGS0`soQ+t5=I#T)EvBon60x z@(MMHYHQq6;g&N%4|A7hbmmX{RR52!W4FBgjv(pPou!^AXNav_(1U~&GBqR1mR_xi z2BIozl8kH26(i&Yo(ydYOh9xT?B%@6&2n4NH{|2eG|U|ZzUT4{NQ*U#M5+m8dG`NA z*NWuzEE3I_mhon;cKy^hv3j`owp&&aMUC?Z zoWDHZ%+R~2=g6 zr91WDI|rpP89{fy+z=i=Hd?3$2I6Xt& zFfZJK{uFI5m8M)d5zy2%7K13vUoxgKI`Xb&8SdaFc8kP&Lzj~v5vekyG^P(^|6Ws+ zIf~n~`b=AH#5OXGt=H3GBZ(A`ep<1~(PO(A(KfWs8BuLBh+>>&wp6UEGVM0~TH{77 zw~+FVbvb-RE6{jr+M9umFKb+uB=%aJxBKIlsteWvgQ3x%+<(l2*y`_jvmh8I!J7d3 zpqD7YVYhmF^z^cozP5dLdA(Z%VDSeX?7#TId%Y0*3CXB2W<%~Gp6P~{0Fi20!w+b@ zz{)j>ewTRN*GZ&CQU&EvMdo1ar&1QsxF!W z4G84&OZc)%Po}v&96h*v1{HGhXgUgO_1yHp@RbuwmjzNqzl+9_)9`Q>&-ke($D-Ne zhDs?PnmpbI^ci<8$lCK*-Q3S_dlI$SdBZZT#m%i;t-W`bHTE7$JL?>(vx~?4583K< zff_q>i1u~kDJi}5wh= zE5Npe=#+lyKVRr1=yX1m2)t!=xTpj%d;1H!~e<&mvC_s|9}H9136N zQ8mA;SbvrNOyC7AK44cdJnsa~DO4P_md!eHSyWSArrm0EIc(IL=qzO|G*+zBmz>;EsMRLE8@DjJn&p1z|E?7 zzyOsz%*_)Ec}fsIuw^E^z1fNg!J??F@HR-rUBEup5NaLe>X-J@`PvXj*hebQDhSNK z67A{j1Ch9>CUX6>-B3Um@`9E19-U`U-RT^u>efD~VV{tb(fv~)R<>4@<>PxqMu}3f1K&|irE9AcSzdyp)6|>OvR+wEk}Hy-1CU;E6eRuS)<9NyroOh=lQv%MqCMKzpOX(oSAO=}!hoCzo5i-6#gL8^ToPr{bU6@_W+E*+rtf>6sZdz~$|1dAYRsCUn8DnRSkrYGNc zEiTM@*RqA-wSuu6k>UdyLi)vZ`U@xOKT_of`k!o9ddgVa7ni<0hZJoQjh3h{? zws;|%kV6Z==ts?0nf%P{R;2}h!}~_DS3DZXq0_%&fxADjZ#^;FYGE&9UegVae#G`} z;+%9hEy6$hJxK9dcinOR&`Ic@J^zOS7DWO(d3Ag3alGXcfi89)GBR^xXs#j8NRnx( zaQp%NyI8~ z^YRq?oU*zVa@u?3=UyzhE_;Aa7SBN067b22n+g_0cdws7nL%&MM735K-8!v&9FeGX z;q?=o2PfNigD#6bih6nWaME262bp!I`8mIzaW{uJD5wcN3hZll6n5ce4FE0xbXJiL z)5bF`I2J0omVe43`J>$aKVMY)wu}sS#RZMB^-0%0oDp-a zJeG|kP2Az}C--`8u&r)J!XI}HwGrI&@qRZ`}Va-}sYy*YPUZxSS1L)UY$2va z_NDCECdrl%%Fa~C7P4gVOyA4robx%K&pGG* zo%{aX_wV=kJ?_Wv4>io2x!%|Nx?b07c|KoH&83t{q||pDjDs?S1U^_REFypo|Fg2d z&NnnNfU9AG=x!9(ykfoxbF6msdlq?#-Q?m^{i1{g*H_0kC(U%pVG1hvAqp!`azL0D zc5(ae=-9&ueKVm3?OQ92eupBiiBSv2KEboA&`)gk_&1Q_9YJrts$Wz)D~Mp~Ta`2v z#iCzS>)-PTW45F{(8?p|5}<8%&4Oy90s;p}Q=Qx*;G77Vl4^|WYnBrm{}{OnDDZTT z3)ah%pb18erTCmE#HOx9^HS=$}zIp6X zm4LFz+1`0m%hv2fb3MH`x?Mh^c=JcR4`7bQ;59cmWEt=1fQBiP~UsM-L z=&C+AH#k>>DXb~pwxw4K#k(k@oRxa3yB$6ICnf~~?;s{0-yO|-ncj$&TT7Rj^W&z! zWe`*`WSOI>dQmo3Mc`!42d+iO$Zxwlgw0VG$tc7$$M~fAc+q^DllYV?b72}>t(Wxr zG32f0ohRO3xf9w+M?kXWC9#DNM$V`#qHdua#zj&XL1T~b5)xlt2)@vjSf}nNF77L z(}B|Q^FcN9oWAZIA;feF?Jk}Mo3tu3jb`!gZbve1`(MIE}

u%VR%d2%}O|t#54I4)ja)ukJm(q^o(qF(O7$X}m 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 V3lYw**_`c+&fkwejKPn-{{T^zyF~y1 literal 0 HcmV?d00001 diff --git a/en/application-dev/reference/native-lib/figures/libuv-image-3.jpg b/en/application-dev/reference/native-lib/figures/libuv-image-3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8cf204ebfe8e5c7fdb6a94f4ff8b04f78b99ed1f GIT binary patch literal 97895 zcmeFZ2V7I#wl5mGfQa-aM5Rg*QHm6asDOxwSg1l2MVf$sNRW^yNH3ADAVfNd5T#2C z9cdz6KuSXI2{k~*BbabHmz!!*y16k_A93O)~Mn)i65D0V##Kb@cVgjz{fOd_6;rIK&HOS=X->wgS zG2sF+0&l?OktP%Ff4e^D2cir500MnM(MCa+LG*NV2jBnlVqju8cri0FGBB|)v#=br zL#*tqhYqnFVqsz9U}IxH47^xak8pAvK5}q<@F54cAKV3eA3nr#=%B}6d(rAZT!-lI zGd42NodnTy(J^q*(V9SDV5Cd{B@T%3FE2WJ21X`kU`TB2K!?(!!0;Iu=z+m9F#^-2 z^8@}5V&r1tKB1(;%wzI^<)l0B*;mnNhr};^spq@ZLy$OU>*3GJ#xEc!BrGWBaE4q66R}HS+zH`^q%-q8A;Ul}p_709tp3l6Vd&7KQ1iTIm3JwVki;0bk zPe^?GE-5`DGb=kMH}7LnaY<=edBxYthQ_Ammey}=?Y({d1A{|9hevSusp*;7x%q`f z;`+ws*7go*ckf_cbRdSmP3vE0_NRGq0rR2<)_{@aU|w|e-aupEVq`j@#LTT@!t%hK z=j7Q}hj=eVr+uks6+d^2z-Q~x!^SV6jFTiDOzro~{<(?y|EFg5uM_*Xd5wS$1B^+} z#lQuEfGFhjFd5K)x4%Y%LdbRi3FS%foivW9wy<~O7?=p!bgsD}_*l9l9v7I&_H&N0 z@QB=Ji~^+sIo+i#i~O0BM*}U$$M*z=#l!ThRI%qYdYw25I~QwNNsCkX;Cd`8DPd92 zWfiWIG2(QqnIB$}>Tv5)e(F>9`;RNbHn772R3l?t4kc{Fo*L6?6M8!&EYd>vNiw-1 zF4^C$h)pK_i!$)z<$t$-j|PP|Hl|Di9uNyVaO6ZDP97)WD@ni3gqXLuWW?J(R{SB_ z$*eJ;_dbh|KMIXL8)KDX$7^!yrim^u$Q0bv(ZzX#+oSUN zlHHNFnu)F+XFN1bXYRxA5Glb8=pe*#qITY~KF3;c-(0_I3@@j6Gq2rG843EUw_jc@ zIF&scv)1Qfm+q1PXYk6HfC=a&H!jgToHK9O^Qaey7aomcKA!)o^tnr2U0s1w3(0HB z5E4QIac)A6F7$MXp$pA*a;+pj@(rp#G`m^HO-C1WQL4w#&ydCD zlTTiK>6lb!j?H_~ED3bp!X2|D8mRFeOn~Zdh9)Ug&_H+@8YrlOph#iFKnPauG*FW% zcDMq&yQTOwdg~+Pd+p|nyL_`)!jKpf4fG*?j>_%|A%#Ky_%L4NV>}Hs*Izpew#*5R{vmvX65p{CU1Ccc`n~-oy6(w=2Os}e zo6lMV4dkGy$c*R_VUw_S(iUZKCOIuB?(tT;&_Mn@G*C0pIIQhx zpi7C7Sb`;lR0$ofK+llPc7wNrM0R@?`_1A2NnvJz{E;=~M&?IRPow_)36$heDzq8- z7U}Q+n<7@A>tjq-@k*qy*{A|L+yM|R^MGh6ETVzZ3|l5h3ShD|_`jd=-?aM6e086! zObWIq8rN^{4Wjw_Rmx2zKa3RPY`+xMV>p*7(Qr@xGN*)59yr zOg^5n1u^3EuF{t|nkA(e7(5vzx86|Dk^U)@9`^0?f1&BX(1~>F-sLKR?h8JFY`VDE ze);3?W-e|!PKYAPkr&A3#Ez}QCSfv#;vbas0MvVM{egkkHjIcJeYjm;PKl@m!@Mor z4v}J8HG;#n4DE5&iuylB##~o1r(Xvh=V*#=kE=UA~VD~;Jh8h}ElU@zQyOB`<0E8@SWA~)4ZHKKiA?Xt{ zXrSJA-G-#tEock?`zxYe9xO(o96qNJ$_iU+PG#%Yx=JX_!WBUGFY9pnO!HT*r<}=; zo&_tQXXb{EnK|DxZZ>*Yw`U)&#Ul_dV5m_uiMuWCwt&qW1voPlU{7AqUu|YQcuY_&*APODWZX0o_XZQbDPlP4 zCuB62u)^E!KgDIg^Imo%pnOzi6zE!DU$>1FAxqompH8HKSO*5OmK>O^{Dv+u-Pt#b zBkh_osU40W4whwfb?&+qkCvuTO()uCy%bzrDkp|ER%V|Air3cR_YR7m!t8RZp!SGp z8c4U)Y0xYRJAHK!vebg4@DF5xBVVN36N+09?8r7L!Wspp3n0%S<9n_3Zo3lWqBIcZ z5Oz~|VX42F1`Nu7I&a=;xv%=)}$%qDGYd7K^g&NMUyvug>Maf^$!qm+2$MZax zR;r&iGa;Vajv-(gu&gj+%i8LM)z((wmXx&l$L$dHQugE>cDK)u;IFxtTLX0;Ycc3{ zY-ly)~CTwA4GtRKipK;&3Oz^i=IucU0aSi3>c_pgmaBpu9(HCCMplnCNIddrp?pJVG5 z^JTZ8-{0gqik;7}zyIM4`_UYsm|NRCo00)!E8+=Dr)9zzQ%PEbT!vr$j@hgMZRMLt_)v zI0Kt^Hun1`k!_q`fR(GlQew)Z$ZESnEhMCTEp5Ah)k$XrN6T zhu7qSMwEf3r2?hH?Omj!N0!$B*bvwp-~J}Hg8`XxxnEm!=?yHcAcOF0kVh(ahu-Ekwd@e1u9dXM@@PP8wB^7YvPhAfgl;t6=PT)^NJiCg z$HUh9+%WS;0EVHd?tcn{{yUge?BTvC@>^s&4fM0|0S%Pl?DW4E+W#h}4rCPu zz_pVl31TM)5MVfS86hewYo02VJY^QlbG^3z$;f)|;AD6KN?w*&62d8YIZr#iwi6>w z`3!jo2t(=!m~#`#NeZwe+6N}XWBp7)Y4*OZ5?ohf;`}N$1PSNfdtN-Y zQ|A_lE@3JUQE|{#gkK~1;xX)t!gmJUtzfqshEm1)6;`d^$T!SST)!iaaA;t9+8J@o zrJm%u?Mvz+isQ{z`UIAp3*qH%;n%#^oXWS%sBg7({3wb%!Gwf66*5q`Ah%g(VmktW-I`QIw3_MPmtjdkTwGuMq~*`h%EAB+19E( zr>cyPI7?q0(7KyjpQoSQ$XIUri1)SLgk!YA^v&+G{;IhQ3v1yM1Vhe4aD7r09x4Pw zwxR`U`4+|0+2D5_CsEwU$3IC4x)Hi_#_Y|<4LY4ZJ}zI+JmFy;WAKv%$Wz81k}nZj z58>P#6`_HINdlH6GlwTy(s=aYrJ|9gJ(ViGF9rf5b{lZg^p%SXPmA*7+ZZ=4f-g{e zpv+sCpT&6Saz4(89dF+RSoknx6Ii$*1g=xq=BH8+z93LQc|XL+TBy(zy&G1pc!~vd zO!n10TC^nL;Mq)ey;Pw^%bidKEkz8ReQ?$7lX8LU+zoe`p_128I7Ebau; zy{D&B>2U@V44}c<(v|=bMAj|b5RVEKQzb?F;fAY~kcA}7J>kG+%KJqAAvz0F z<){m&C&~Q0Q7RKBep+sdW_x&kJ3O!I|q0i-HIAss8uHI<5DYBbaH5*h8iN>&|xXgb1T^S^~RaGr^D1@ z_4Trl^CZA& zb|1`*oX>x;XIb6diZ1Se4Q;0qIGfy7bX;p$Klgu%L`7GvAf3&Jo>LlKCls@fc#c$^ zQOUUB;Yqc?B!?Rk9}9-4>&omHuR5l_)8#c2s`%}#`~#}Vx3JNmfuhCD0VOB|s4FYe zIE2b#D7v9rh@?ORNhCL7w{QZ~0P72$U?%KzEXyt{M{`RJkKV6x|s)Qt}xVLdA*GJoP^<%*Q5w{ZWdy)TNY%9i z6dEXp`n{ID7waHuh|j8hT#2G{i;?zp{y&R~d99;kuqO*W4B906JyMFA zrIN~xTl2|Caoh#A#uji14YXWOL~RH3Q`O-51kUhkZ~-apnW);eA>r*CUeZ|26Ym2mEP>9Bwn8mJt*;!McVAFB2wvg0ORlW!9^jfmS-xHYyV zp7~;fkH)Z#$jqyc_Pbe>5A&X!dn{_ zeYiolf)eD>d&e)vLLG^nW#zX(;TwiL{3B|vb*=fj1kHxea7So}`+{uh8KXlmJGVif zi`M6jw_kz6z2m9nvtz|bm!J43Q|_iqBk&SSA8?}0S<1(19YX&0H%glJv4t2|eqAj$ zF|mc?WJe2_SD|3Xigc-EPNy#|NHE71UX`DhzK-}&pU{7;NUf8Yv`GVvShZleYZU=U z%SA1BLXP1Ngf=Xo9>PXGmDZMHLDnKtP(g~PT@`Q5*HBi*2DVDO2DRcN`K+hLcq3&K z>=d?Jvi8AbwZRf_Xp;3>;ELO`wTRoL-4P0fr=^lE*y@#r{rGZtuAS1PB(q+2|HFfz z4l`+@8I`q^5IZHB7&v6wL)LN2g=tl=+ zwOSMH|7roX$nhP`!YX)M7tF&G0ml%SdSVRG20o0ChBdZAkCbBg@4;#tn|mEKy3(CS zwv!(ojcLyM`o-sD(Ck%H@L4PG@lPAPj~?$L_P&zTTomiilR3m{rr3SWpZ(ly9_X`5 zDXq!o;Kp zU}ku5qo^MmRY)<~d@b2BX?r@9s+tkdtB)m2q!1n40ZfaNUsmj4>%`~SW%aoRs(~-O* zJ0V^i-pd;BK=$F$g5~v3N0p+qG9P#|-W+BFshewE7mjg$zV~cl$PnHgO67!G66b;e z+v+>=sIunT$jPZju%Ommj>y%oQ{DWILzZgcB}=0s`5`u<{Bq^g?#IKt1QD3H+_CFL zuc~Gj9}~PoAx}^*(Iwu^$fNK_q{zt{&-%)>a5yA$e(y%r_63GURZD}UL-^{?;@>JA zGf>~(tun-vGju3{GX2gGmZ+>21Vfy6xR&N8$6C>$Y;?VM1K@7pAEL?)U_QZ5Po5cm z;G)uT*+po)u2q=v_^SxnS8n)3GLOI{rUe?dml#p4gVW59G`4Y=9xPDUs@gY_gT|=b z4KrL4%(imQ(bc8PiVOwWYnrjhox-2mu=d-w-k#Xoltz9|2ORH-%&@~CnbLQ(QQmT{{L%G@>QeI_~RF^Ks9}Zq&#v4}5-VzWTF1>NXGj(8D zrTf=>>hV~-S7DmiS2u8wcwZ`ONx-9Q1J`i>;?RwFIy&pO_1`_M1z!{e#D-s6D1Z;m z+TW5j#XfrmAQI2N1sB|Dpb~InI4S}{4}XZ$)C_TPtv1N8UU<`WM(TX3gXNj7sHg0Y z@KtPG#2}P69?a%s$}b$Zr?53s@}?en*jXasM*F4qkHfbB_ny`<)40qj70C=E9+`24 zb8?gDSN0?*!L0!yT$v=2jOLu*PI^+*bfnEj@YdOm)Th^`A6LG}!1xFQ0KG2m zfZaax6FEOJ@(DUpOugbFKy4A>q=;DE9krs2pg&y%5sy?k=~OL$1|6S$u} z&Y*OKAI$5-@8P6csX5+M8QAsdNuI<4otsj+-ZRsuSvq!%{<V~qgrB{Z_f9@Z=Dy<`dq9X&t!Ryq2vzxuOXR~l$)P(ALmQpv=6mpOwpVYakdcS-@=!0p(U?^NlU zu-A-t9Ax+Qc#}MuXlm!L(Bu{!f9&e+M%PBKCw8QsI{K!|#Ygyk-ag^;GN88n{oqfBAd@*0CFPA5Jew2L z_=mtn6G5)>WNR1qBR}ANo)RNZmICVcFO;VAX9$f_vV}#vW|rg8F3uQZzQT9P<dz{B=#6)N z(%BoDl7O;lpFj*l*rzBd%Whs*wLJHk7Am9C9CPEIswf_{ux2DgB!3AqP#*Oe3u2Yh zJ0w`ccTZ}x7w9UXy=o3FSO%r^2y5OEcnFYEDGMF7g(8bkuYW9i@( zo&8&|TN6$EgSDzZHaVFc4DCfIwS5iSw?{hgoCE>FCJ67 z5gdbnlYC?j&zy$q0^cOslI_rj0Vb8jQO@D#T}o0;!5cc_7Q}Ie4S{T%%JZxcW7%L#pR@6hgtl*EVnJ_nibQ-_w!J; ziRL50!IzMyE34vF{_3{RVovdDXo$8?t{=KkUnq`mUC||UPo6H%TBy|^g-$}57ArjHl7`a$fRm6>_<@n`waB1-ZKM0P|ud#zImXZUIsUU!qF2l{zv#W0Wjm}E~h zYtmNjFY(ocFu@Ip(4fgGO$C>gk}0LC?>Bloq;EjrHDam^q+u*2844or{UF8j+p5`FK@+?UiKgLc)^Kx@vs)qTjs4ZW zEaHV2Yo`ofeJYA85suY3OMXdi*T1Rj0)IqF(_+}ya8TXDG$|f~LF$sMe@)o?Z!~Fi z)h4Ky=k<(t-s{WUttFA^N>S7Eq!q+TvJt>vS@Qw{!b5eN{g_(zc{K#DTX?0yV7{IA zY;lTFNpsljp~2;j8KLg3QxUB_bl+IU(0~DyjW~p8F`9w|mA_C7t2Ua-?}9XH(sY7LGc9)-Tt8e$=$nrhEeUTRAszVDS~O?4lIjn<7z)RdC! zrjRS|xb+in)wF#cIy&id+KtZt&h439Zxb9#+#%9JExXaaI-*02kLU@%LUP8hF_JEC z7xcib3ocJGCUG8tT@sQM_M6FcZyBryQrT7{^Zx+zBEC-?(c-ih zkMzZ}G$UCTG%WQu3~Ci_$PGVg(HT9)UwpOoIOwayO_t#U|MEd|NAe)2kt81)=)o2Z z)N|IX#4P-PR?$En%p4_nhz7dSX47L`fttLviQK!bzJTOLjxI>fnc7xU?8 zeq%7-(@z)Ox7kxU3%u?xXvF*Ql%WVlZ-b#7%M$80e>`~k+v!Ud(A_k>-HaCNSl2t#52Y$)cQI30ouPo!Oo_xP{B7x2 z5@$%q@rR{f_-fC}<+B*{CmW28#qOt%)%pq!CPmzK{s{HGx_1lE;kWOn10LT`7*XW6 z=ugNY!1KGOkZ)R4?L`Bf)B{}fHs@%d`LY5Tvhx5BBrx?H!HR027K~hKP^2(dzL?ei zV^GE>TamP}g?vXi0g(3mK}Lm`@xDHFWSowYQ0fA{MpPL8>W2p()mH$5B{1ZrnjtUe z3fs}y?+Q=w2_|f=*1cz6GroFHyi1ne_a#db%MuB*`$ohko)%>Dnu`;04TL+uq=XHpZ%*6l_3 zs9ZBp;@jc8u*xT0vYwS-Xpt~=0)M&aY7|+HUa4AlUlI!I*ybuG=})5R$v1mTQBh*& ztBInkRa4!vMwjcJoDOWN+$^%>HCGgAGjRD}YQfRm+8t=&q@MEq=Z~EBWM3M{c$HeN zKa?s?siAU{Zr6>UBTBA?r=u6MUWk@o{ z`5phVHE(qIZaQ97vprTDv(Il${fT9+)pio&`AkV4Y8jU#924X1-GYYaA4wFe$a}t% zVQhswEfODL08Z#_4-0gA#O7YnJNt02M$T!EitW=bA_3}^$&@5Vyym?2d8rnNP_I0b z!}3~=IZ^oslt=yCu9aF32_$eEyZWz7+*4XtixE6}NM*qiy<#wFB+>{uQW~D(+0loP zhgv$;@+L2vaZvKzy&M&$SxfXQ6$m_w4FtI!y*Y$AL}(4u@*xg2OnjMm zHA#{tdNz84nX0YRe*uVPsKog5&xJMn^l@{Ix*606-ced!`n9soP1pP1^Nru4^P6|! zLl5V>hefDt-Zl1Fkc}&vO_px06C(kW)I4DBA;Rb2j|W$`){elw59!AsIkQTr zB7MsSzWwbwTAssK89g5Sj2k(mj!D7Vp@+S1VF`)#$k&jg)hhcoY9ZRkpz}d{T}f?l z&dhs`Pa^rYN_SuDE9AoXV$NqdN5(KdsPa1f82Tl1b-TxF{nx%9axxpsGBE`qA73hT zHu9lV!{sQ2TAI1Y1_O2@cKn!qqY8xihg$J;+u){51b|5@PEC!lBLh1+EV_ovi2Z06F>&_ zLmZ8VMViM&e^@*qdVNw_N)@OOPqu#Ca;N(9Qx7F-^x^yH)nYFeK7-;@z5a1#dR|m9 zN*0_QkBJadCUBrapt>|znMWV;^OmuqReln*?81y+pCyR+8w40r6)~YBBl)H zXFDe`?p^3wE@Lp@@2ysImzdAn4t;l(tx%%7QwepbA7VEVVxvL23kk#2f|rCLWChL< z=SIj;B#t|QF=^>a&;6>t4+*o|=Q}bz4EU0Nb$&g;_}123}!iEXJ6+z_VeYGqTaD6ucpIVOMfeD=elkn@+(O%&*ZLz)ZNZjuhQh^hkP&A~Vq!R%-4PcqR4Z=L?1sei zML9~FyL>X0S=9;5dQj^yo99!jkz(tFiTaP6?du!tA+IMgEKC+2POZdJf4m11@n+s{!nz ziP7N6f`URU-spB6l3%`1i`DNz{^E|to1y{vPcyZjYa=>WJLG$Gybmv{$44C5eWY*` zaKGJE)+5;0cLyQ4T%HVXLSI3SK0^sR4Gw;J)R?I&+8ntYDjcO-Q?OjTB8X=gO2h2m z8rRv^qmF}%QU1#683XcU4nHrVnN8~OPNTiEXy8Cll3`xUQh4}~QUtlpMSWVqG~3-| z#?;bxXdjFF|QzX47voW`YUh9<;?!2%%Kojoo@=zo#5PD0G#wpPJ319!aIArJ58x_KNKJ<8(uTG_5UhDU|JyCL0U6c2{j~@A$Srgz!JEg@dV~Zu zNf5$$9*fo(y?R;hhz`pe{gX9kt9Q0b3597>m|;)6RCwk{o8L#L@nhJMk}{OYT>Q$I z2{WwCmSxIXP&FQ=?&7ukZV+1>Uv<`a*z9J-0QRwBu(#Q5BTp|+T!Dtg?-Vs}o)%B;uCX4RgV3mu0P53WG%(=^<<@AKg{G zG6#o{Z%wc#v5x?#{I`^yzvJ%zr|&+f6$=1ps)hq;x*WmO$byf}l>GF!WX-rcgI_L#d`%`AfNNb%jW(z&4O>bP>gmoJ>GcrD}}x2l9i0i^HFLj841nn_v3$ zb*u!MH)e8Ak*v6)NPQ(H53ncD$VOlSwgkJ!2rCA{+CU?!1aG^_?Sg+fZheGyMlDug zqoBo!FCmUtR{alTT>>ZS?B;g9r{t}? z7OCJzE4^A=_*dIYcj<7vZ_dajR1pvt80rycgK?b*5fT!Q5in3qlPYBn;A=3*t9J6= zTV!&m9XQS^XuHmArz`T3feSFzsl5PD=fZcBxx0a^{T>>KecupBl+q7}5DWq2!2_h% zAIuhPnMMA#j($A>LOP-jll6L4I0X?ssqBD(?qbiG>&TC0OEgTPYJsC&ktJE{QBS>n zT>5fU)-2UtmOzfc5-kQxC;|qb2etGFZTZmA;a0xyxj$M?hUP?HbiAfVf6C)|F6h4d zy@~&b`pQ6!05+OZ|C{)+^|karsG=}iQJ%)V)3G1s%Vzb$8gCRw4GxNnm&EWzf=p`0 zhCi!6w)HSjX(mfhBB)$sdSXjH-i?8*MBsd_rCZ3qkI2fHHyt!Hvx=JKkZ=%T`YL{2 zIySb;0r{6`v!JCoslZ;hqftF_Iy`fJ1LjXDH8NTLG*#|$jTm!&WY*)Qkd#t0w-8v~ zR9UFu<=NIcGy^JdCzS=zPihTVLg3;_oa-j%ax!wcD$QN4>wL_pecbqyqN{81n#03U z1`>1suv!ByR@-k0)Bx9Fs0A#h_mqTr{A}-IUHgZDH?J-lgS>N&mGh3ptL?B1<`&$G zo)S)6#_StARz@~s1Cfs4V1y8%raDp#m620lF=H*&$$h-+NM$-RR}0@+F1pb-`9EIF zHDP~l;4mxna5X>Ty6;cV3-U?-6;6tj zL9mcyCvf+uOsIOQ0IFWibbZ7KH`Dt;_|E6{&fb>6QFwaP_nEjt!D62GNv))|eHpS6 zC0&avhveLfn^wHnNqHIe^@lT4Iecn=Wi%o1+xv2G zO(Jx8=_6b+wtkNT)tCako_IC+V&9YAmUc}?y2H`>hwg?8eUqUxtrrwmX(NHR1%7C$ z5Jhm^VO|(s*ifr*c>|iW?E}fZTF1*p{&}Qq$ZWsR1AoP{+gJG>I3^$0uX4&a5Qo_P z+G4s9nuS z@%@0MJJ@%k1AIU%>M!l1Dyav}Lf z(W{s=Sz_GGjd&R&i(%@M_gZl|>iW)@Ho%QwT6GH6n0Jp~Os4-BO@$~Ushes7xuUtH#nJg*t=7`e4829>ZWZXht$T@B}gyZh| zPdfE{j}e(mWS{nt5PhXHR`s-PimxXqU)IA_b;J;=+_$@w^Df2wlmz-2bV}-t9=+`K9!WQ5ljPxXHdDj zd67LAi28G!K=seB`PGdVJP8s{hnk1PJbOz|{!^1Hcmo zWQ}baaefbCcZ3u#+m=r7vd+{C{mhUPhUex4+Ay>5-Tvbo^#4TWy#93>s4j#0U|IG* zy%P5Sz?V<-zjqr~R>KCu`^{JcXpgatD8PZ)kTMN=jqg|81yDY0!V&M;~4K0yi%0og$E8 z8$A}f-BpXX`^AjDJQ4qBdpU!vV>0YrJXxMPk5ewT^tV z$O=7dH6!rOv6bP{P;sH|7ZaS}E&1SEAoUgJ!j! z7gmNvyC;XwH*i4Rjbt#9jhSh6P)*A5UxL7I(9R-+#0mwJz3i<6^XYiHQ!>le+IvXJ$3(1bWqD`%~DZ% z7-8woUD<1nlF!Ey+9?9j^S4p*cieov0Q0g~=0F?#drhtp;_Mc#eVpV;^qqX1oZ-Y_ zXNT_=OgVQqLN9W=3i+j5s==IF`_b+A`l$ln6!_Hs(*00$yq}fPD#mDjUy{LO{iNP^9=J|`@EyK8JKVj z{mR>9^p}CNTN*6X?%hMF^Wpk#CFhP{@T7q1~aeCZ=oPF0g)& zE?>j5e}-%LRA``GIv`(lhy}3uj9^1#9$zY;DB93} zUXzOz>dF{co8J;LI?`c7vY=Go8VJpt`23sH3DjQ<-pkI!+u%)EC+MD`Cm)@vxNdn%=$_iOx?C~)(?keDU4-sVl_1^TSPsQDc-kKz2D4%#2b9L0^ zZ9PFsytXjF=mpux1$nP|FEmc{F_;TxX4J2+;`+&Dt>9s*rt@2PXu&|-8GRH-G zAomv82-(({NA8)&FFiu8pUI#~xX*%D`!+8uhRI+gmj9mH^zXjUk?p6fucETlg|WQIHh{dXT$YAygC;e$CGf(OvlD*|04BABAAJKf~?SUyzc=J77z%D z3RcFPy8IYxpWvo+k;T39{{5)}m*5=P*qN|eAhJjmdDkBk;W}1E?!E;8K%R>S5xl?J z3XvAXg7J7Fr|yp_V30oc`8w|MBPFuvhkX$bu4QI^cIkZ-IKnxm-uw)xa6AfeutG6W z2cVn?(bnw73+0g|D>t^S2ID>@WcNJ0|FNRcbwgbu!nQ2!#_d=WvmWeMHDto9mqdEu z#9dNxe{OnM({Gsi?+K>A|2^-2yN$N3k<^Q3*ew7`Z1UIuJCbpn28xv;a8i5#WR}G} zRA5NejYlp`LpGCwkI_KmII0lB{X)Y(w``MJVAP0f%D%w@_Hfeotx^}`i^)w&V;op} zbK8^$GCpG!#Q}YSYt}RHK0JEY(Csylmi!J1$n*xFLbNARU*&Xk>~2;v>jFah zZ-wQ*Ws4_7xK<*k9{XBMhWI3*zz-bstSZH*Af8N#b5GQ-p)stw!uZ2A|EpMRLlC&Pc2hyOE2mdJHs zom@Oke$%R*07xyY>&xT z&mAi*_O&X{o5dH)+(Z}0JlScN1EStI<{|7nl9)(k%sDt5f_!{rhr&q(3dQQ;09!$} zHp7sLzMi%n47g=A`~{ zM1P_QDi`qLq4QUf)8J8Hn(9O8$o-HWJtBPSr{|nr>?hMO0h+IXnAskgx6- z1SSb^icr3%y;K=Z=uHc5zEr&^r<((KKgAE5y0Del8R?E?EQI~Xci!TJV9=UUQgq4;6JMim~-{snvB&6%at|GG7 zn1WiNfwK3L_ADzfVQ4}CvcYT;Lo(Ehr+lFR!3y5)k=8Zsu^Gr7dYcSzYLIg=gVpfh zT=5G-xAUbW*M}j&%Ia<|X0uU)K!V4)-w7UnRXt#m5SqyL8`|`MK4)n{@5zn>utTm{ zzixt1Reg$5K#2#e&WT|~scA^>S=XdF&e(tn_lZn za>I!tTeRtWRjg28ScCc&`<+zXs2SC~2eA=3*MMymXz>Y1^|?sQp)%Z`*x>t^m>{adc9>iPbj2NIg>v93NXxP8;hVM0W8!2N%1|#r~oB-64 z76V??^jA~HWH!`+?pfS~{Faz3|2IErV{JIV21^9jFNvgFTc5gFy|3G8q_tA1&w4Jm zZI8|-z}!}*@~)i$C1L27^Nk!W-l4ls0nEzXPyr~h*V;lglnvfCw|5x8#PkY_SL>a&$&^~Z9Jcw z;42l7m{8dEeZH~2YJY14ioIR>ufX^dI80b981ELex1EB2UJgA1b=;``C^Wln%isCh z@awv2VXw!q;8N1~LC5i690ur^h7T-vK$ z=W&YKu1~B&N?Wbif`<01Nd^Aa###O!PnPco+&I%Q+v1X-!sP-_X}o{$*!w6?D?Suq z$Fyf_jn1Kb9DKAez~=!YV8|)TDn04R3wOHjVjcMO%$f7ePww<%&(%_W$qkxv0C4=< zDQADhtoh&crJKQ)mXl+i1u!R(%J-{?=99Mp$WOoQ3;tU}56Mnsq6>Z~r-fZ+$6A$YrD(MeWznW9A5_!RdrSAjffH{$WTi?ugwOLg5d`DgA|F z(1ZNT3N#WUD`kaSepo;n-TzMjUT#R z@oi*QfW~S#^gas!Pd|h$$=$QxZvvDb4RlTmLdclM9?zY9Vw;&eM-`q`6{@K*5*h99 zHMz+Cf9UFZ&J6gPe~xj5b{wb#NUMDWl=ZD&0o3%;`o{12A47~XB?dAb3P{SKnYn}0 zAQG*=Chm_J6Cs^*K!k}|EPNe6M8KITm?ZdZpdQzSfTqOC(Lj{*m!XDciHj4(V?e2* ztpk99n6ubM9TEH$goV#%&}a1$W~8{+zJutLBD|NZD}=vf&(7{dBz6@XR^sxwHa0Z- zA`n0ydbk7h0a)EYB%>_}eg`m*jDg4WTFCY1zaB|SzMOUP;o#cmIL>OHa=p125XcUvEQ2+VS zjq0%C8$_sVosn@GS{c%Fo7tU`g@zz($Y2p@x~&GGen6I+JfZSX{GI%<=r&9kpL})b z>V|m3J|a#(UWKQ4ixJP}gr$#&?Q+v{lhBmr8z~Iff6k(4q6J(g7`U?_xhUgCy z27l7L-3rHG<%T2?ECl6gOgkGZNxXe5Bh~F;5xkfceaCE<5k6ryG4knld~Y}Tv&$=! z0WdM4({CX3jVcuFux3Bjh7$FX1qF8pJ{7*|&`rUU2o3m=lmv5znjrbwYr%mhBy?ZC zXHQUL+|8o0`}C8kj5CBp+;B8iU=cPB6I7G&actubq|5lKkSk{=&!RB)>C<-!tki>` zBlj)21hO=-rFkqQ_=rQsF@oYFs_<=}?$#7*t-7~rO#MsC zE8Gjr?HM9x^`U9WKu!;TS)FjPIq}TZ`Io%9N>b=sWqpA>%5fx7K!M?E943yC$_f0< zN~kc3Mjp(r@%$G#B&$A8Fc4PV$R0O0?`Frmduet`I!dJ}(<`EMHt>fteO)gLxC>T+ z`$*-uz;vuXgv%j;#od_NG$22WC%%S+d8%Hli8gC0s5sHD!>4iIvh47uoSTV{5Ktof z?rRU}(LCad-F!86#}tSSsd7d-N@*$@A%-1)E*4D+ZJ*Ju$e1+E9i3f*mwkvHe_OH- zmHJe%<0lO_(yqG~%n@b$heZ^BeE=F^{*GW0CRMM4PuIum=c2Mm3YSXEbVP1kkx(19 zOJ0gCblJN2kxVO5cGfyI8*=N(T&BG}X>%O@ZdWagnEN@9(Px|(MG%W^lq%Wd(S~{} zJxtj-kFR)(Y{o=v{E*_4RXJCY7M3BZvvtZ{2>%eaEPOH;8CwJo)2H(EHXU!Atig-T`NY@${ChE#yJWbY2u!%(s|) z`4MDQ9LiwEELqbX0}?Qt`^cuCm&8vg2dw z;Ef_9x{+7%+bLKQ^#sD6#Oz9jgTnGo35sBjWyNG_9EjymEVJ{IV6(xA`-Hl1f5(x{ zQ*T0^n~&cwHFHbU^ssAot@B%6_YbUwYBq`@n=S{kQI6rOW93nYeVX}|Az^-B)%b>< zn_6mjz0u!)qs@9>(ftX7zFziGXAxm9R;IT{k^3;yxkv`6U0g&O^6>`b@IrE<(%|db znz$Cf-mpy;v73?no)O=YO`VUc3)nn}&T8bo`u1|0fOMzY8IodgU=K(Dp*E#=ugw{9Ox~l`7B~v55&=pT z^og=>xRHN*Y$ZOA1Zhil^C?qRvXk)i`jmkiV$9Z9r}n-p=lpQGzTMk-pKog37p$#g zgHQuVE>x+uKZ+5(SPV(L_dSdoVK{)0w#F43T`F;y8c}*sOBEUv#;@e%^PGz^l~;IT zrX#Ff6jgQk=-`_K7q&hjsX=%}9Fs$epVRZfN^x_Y2Nf04<;zBIj>NAl*E~A9oJP?i zm6J8C0{ejcJk-R3G%>U6kDKU-tiRxiGkh`z4|0;*g*271xb^FtNIQO)Sa+rRzNdLu z?E%{nMw|HHn>qK+zVkHNTBBAWU+?%57O70-ctfHyDYXc=gH0YA<~PFEyL97DSD;xI zl!{YAjclflVrr^_w2R9jy%D^JQRiq58|ER7?dI1r5LVmOq(Ef&1T2(AjzaXw{esRD z$I^uDiTU(x<-sS;baTFaIxk@pAL`N?#4s1PTnCu?sB-C!)tI!77IdVL8cC0kZsbve zdatw7m) z{`~sug!1=Y_}*3_!3skeWeBGZZO!LwgsoS1?z@Tys_X;keRvPqq)=3~-?pU^7wX(3(@5I6Mn3gR!E83|{I|5npe& z`+o1Hy())4Kq-|2wfd%*k<%qGTB;1fppPQ`+NbbFf+2^M+Djmxw-OqZ*ia3ecRR%G z_vCYN#ft9RYYBq02F;^KcZ?d(?gD6JIu}Jxxr>#4f?=xgXJa=*T&^yy=vzT>HgY%U zt6V$lMREoa@JN9yIVmj11i z?C%J`I&vpA{Y^lYx)#RKT6OB#V&%27>#@yqcMqNabiT(a>{*s_TV>WLEK9b4b7qee z1d5vfVSwfmC{3cvA$8Bp1vehIu!3p5@sawp^PzuIrtwO*SAGdh*h{l1ntgCie$wPP z4#wgG)W0)qp`QAh3%r!ucb&Y2;^|-&a5;m+23PnWrO-&}+^AM9H^2TYOB6TOw_Gw$ zWkcH(ywuLET*1hq|CamycV%7ncrmK>R48&ukc}E7UQ}W@ZAgj7>{YFmAiMibZkx?O zC&hq2TPhZ$Z4ixZdMzk^FbR}cS}fXIJwT+7kj5Iuz$#6a=?FJwiica!TnOHQ4Ym-W z3-$Pn^jD;)7M`-6LSMdsq>**_>-tOF>%QeKAyrFX)mg;{8V@6zZmIE-3W;Y(w+V^u zwUwAhPSn$;TJo`p?%yY@^gKAX@#bv;4;&x!3%{HfVsdihJd5VpO~*{5yf6?o3F@Fp zpu&)vGzqCOM3sUa+z60v9SaT4StLS7l?+#-UF06zkAD&`7e3+{b@#lHxciJ+#4GB1 zNOkq&K;Z=|wjpbhSQbSRNozOYR-TjnC;G#we+^`xwqvzzkUnaWkTuXPn4$m12ke72q9 z2eMO10vs0@gP&?+CozB&PoQ3zAT)*jI;Ll~FnRLxM#aDkCVlCMldI&{p z36E1`=+&mCQ4v+BY8Ztx3kz#C3=`rfgv32*0*E)O`*7x+ zuhYCDwXLw7nz1J$>71WM(riwVL>ZP@aBO4hRK{LB8fO?Q{kopO6QQD%mQm=*ReOoQ zE9Gmm9PQ0J9@njGv4$k^xge+=<`IT}rJkX9z6w}41>}*EolZR^yiz%tPX!@UdXn145COcF5ZdR5rN6 ziAqQ|8i8D38ES+Rpv}eZ(@Rqoip|IfE4AIM3Qtnj%x__g0N%EF8QSUvJuJ6;eKgC_ zpV&XQHn(PZ*W+DnSf^cRe>m48hDGnz-Uu_Errxj}u(KN$nE#*(;&%(D92D2*K9oN` zFc*(!WO{YP;5l4`O!In#wNz)_ut^BGJhjw3X{dt!@M->KtBan1D=ejv zeK$=_`Vzj}m=uSTW+5eBC(JFGOQEnR8qGeH6sxmkeJdp*gC)~6jG{`pajKQ?-hVgM zZaLdYvnx)RTMoguV3ENH7!K%s#xM14Kxr4mvlfS|WtXB18|;9klTJsEtYoW*X8QBg zo3sf)YRFD@1R}It&j`6GI-dbu!hwSQN4{Fv6C#e+muqL7|F-@r-dOv#nQ7x~F7qSD z+j%(%s3___pTg;|C9tW;P_7Z6A)dXQ`dE0lB9bFe>__db=(L#4%I~H2fo98hqK`^J z%cZ36UMnqd<$8A}?+#ZT`7FW*KfDa;c=WZy_2yV83n}Vq-%2B63tR|YWXEGB(s+Ed zm~Kvse$dsRFBi+3aK*CCRO;5HW01R4kjn9Z-E7pPh1;y7m5tMWlCS)WG>_q1j@5*j z>os?DTlSwT)RTL%&#S%2g|YpBBSSN^I<9F7f{-DIMOVOqg63^NQyFGt#c0aq7IN5ojn5;~lf*n*l?~{Is00~#)Bl$OvZG}pgYy|Ml znWi*tZ6%EKaK9oBb%}gGeXlBQG&_d>Zv3V94~KjB9;A4ZAB-TI^dtj?NMe@#m240a zTsul*KwedTBYoG|_H)UR3q2Jd;+QRDX0LpRZc2K7+WHaOK!ELxSO`TG2V=C`8vBw| zQZUmc8r4Gl)T;BQ-niHEMEkieQ(<3L*R=w)A~5LW3FeDMJ0MUm~2DskR{1BAvvLCfsh5WVT#C3 zM)@>(SE%=LO=9y-Os$#j@bz{p*jX;g!#+uor=QBj7b0e`agS<;L)92a-5_u+B+wC` z4{XAZ_+**f1|)T4D4%md9;t-6$4u{erJki_MHh|Mkq+@LSAT)0N=lR04sD`*qp4zRY9wtdo8w3+%jR?eG zr)eZ-z3Y!O)bmgBsUj1z9gcj#B5Mjm$AyjWalW|2x1BjWb07IOkHQI^c}A7OV_J(n z5Ws<278-2xx&EAgF|t`tH7R zj&`RI&qj>FLzgwCWpQvCpF~4~LS%}OX}4;rjiY%u;rk^yXD(cl_vv$;Z{D93xf8iu z2=w(QZCiHFNvTO7GzRMR3EpkJ1b&N(ghf-raEKE{#xp|lVdfLd(NPUYhi1{}4i24@ z^-jX$9P6|-jqhIV+k*v@=nYUV0jFr~07-2YV{6E3Z$-bGaeT1y<>g+zx7D@v_F^^9 zwD{sGbiNMf`@ma`t)%h0$%VOJwY>8d&YtY4_~BO8J}vW>2-e&E6i~|xa&tshBAdD` ztIcJt{@y3b5IOC6HkzLxOfKtj)?3fgdebA;gXuISbmsLe`#p>i>@ zq+{TjN$(D7>5{8$?$@gr-bUG#NCj8a;pqGOkaI7c1Dk|IzNnax&)O-bwdVvBIULY? zo?Tb}tXuB2m?!=7&GY-}A8NvM&wGbwnYvb+jyXT;SqZMU@UBsC+OOc3IB zQli{w{1Dan$%VDi_SXjwndG{*J0>z~47%xz^}$y(zvN~nk+TCJfd6&+H~yC~EM|ij zabtSohJI~*{eaUZvyRhjZN)pX3h~2-OCE`UqV;qlyvM-=@WfcEi3+5AEe0yPzTRJ4 zaPjViykd?Om?LL&Kf^mWq#5l#lf0X2ol$U4&j9+EqH9|2?uswvo8N@6u2LRe>~jA0 zy+XVfdfyr~dIO6F9dqD&9dp8Nm`TZ>tUYYL_*<;M|vlHe-MP7x9Ol?nXb=Rk#|QI~gz*sdz@l z)m!V+6cY$~GLZN}wd3<@$3Yl9OTI#iBa6C1i4SUKpjGz6FWAfM>f;-HKgnF!*BFr* zslaGpG;|53Kq@Dyk%9?@#47x1WaDwtR?ALx3nZ*|fE3r9!8stuQ~pjV>?wY{JHTz= zUHVei~@+^zt*^EhT1Vt=& zW$stg7N=VFJSsI;1_bA%f2cC0Wzd*R|mS?vG zOH=jQvwVK_|1!b;ouA_0QL$5NiE)oGL|TFvHL@C=Q`i|OLZSOoZ%w{KktIEbyIKpy zPfy4KV~bGDyDDgpcnKRC-eV6hbP3iDd+p1Fnp9sfPz{_FB|35j&$dl3jl@uy;>vuk0=`Gy*D}bW3VMqtV;mq8WnIK zo~Tm~ua+WEHe~2{;PCg|3F?ENG%2grg5^Da@_6{1UH2B=^%(ED-Q zCybGs+rE1|JCmH@wEt4sDf!yHy8@Q1@9rR&W7F8?@|@b_I zhJy1C@o~oB6I*#u`0FrM5>8b$y@gwCe|^7b!#W3}$5wo2>GG$Q>pGphfV`aKz9j?H zDBPZJT7)71cgUOQo*wofk$lk#&c83NX7=GkLZH*gvc-A7{@iafPB+Z9(Y>X8MrU+j zwYGbc{lafVcoP<~fe+g?QV#io&uWXAu9j#4`iEj|KxQYFJtvvr3Vj@nvv9_juS4)? z$xS^Blf!j8Zv`*E!Q_6)=&kEV?}WPLSu5>hKK1Yj?f%IA=&xrq^*jbdUF*#r@GR|4 zFRq3m_W}E#T^(zEE%nb!MN&x+zoOEM;nPAhZW;c=u$u^J)+{G%v6|{Vf5&1oWxJs@ zN1u-_-Dj^i#Os{AS*5-I1yh5@?F;%{n|BY6ojwK%mp;c_=*mq8 zt!=1UA z5PVmy;qIXffSop#?&;IOW1-)V{Ba*JfLH)H#Gyr2q)?C~Hp=1uRU;hdprlhKF%^a* z!!33iW z@JftrC_7lxYtpl`O^~t2hY1;>B#W=ZJ)FN`~`|~iKE|e*jzv2qKCPv z0=ai^xv@R*Cyhf>X-enUuWjpGPTjrTv74VwdXZIO(VK8)%ER4^WseEno%Z3|gr*8i zBx9Ofeb|yB%WNlYi_|OwL-b=yQzfGUlLXa_1+wVJLVZo1Kv?R=Nl@L+efntK95F!7@xJ!LT2yAh*0~znP;JCfp(NKUaXJP*Nu`OK+Ef!Q8fn< zU{E-PqtB^Qd@%rWvrm2-E|K*znK>`^{Go?GSb0kf7zOSR8*o2+qm%!WMk3=4Spzd* zFrI1*tfvC{$zxidp8?-ZzTaY!KX0uE3i3J%=To@Lo!3e-?NIhjWAB6GKD~KSEHWzd z#dHn+r!CgK3R0#SmowS{cfv{YnU6QW7LHXlee+6?hSmqDb!8d>&q!S>7K(S7!div+ zVBg$)_C>1@j$PR`@N+J@lhs|e3gF|fucC(_zrI=P*TdUn0Y%C#fU05JNy}$`(n!yM zVdEpJ46~X|KcHs-JQr#*fc#-c=%BLlQ$Vf!mqX%t_%<1Yo|ttudy{P>gmhqXZh+x?Dw|;CNN}<@Kjj0_z6<6@Ih5`!O zpN~~z`Kf_mV?|S1#%@tz9aP%ty>T(Yp961!UGWe)7d+X0GjS9FMH0xSem!1tnOffh zkspy}JcrT>&y>HIqZ2S*l+OI2qE*=^*T_?+zqKa2(`IPDv@Kt` zMXk#y{%@b4u}}vnY(tT2Ce#NR|AS|E57{Cxn&V&+z;IyDUQI!Pd}%41xT5__tHN`|Ir0Ge!RT&i}^1ubFQ_iR#~-dD2VqKwP8SOT|b- zH!^iMYFkLI_?-?c@=5WA<%N>_mDRSM_EU&x%P4^tht~9+jZHt47Fc;6FLy%M*B*As z<8A2Iu=J*0OhNrF00D9Ket;w=8iC+?@%uU`58X#U7)E|$1VO3=1oXa?pMl~HFx&Ey zY}7_LbR$=HISZJLjA3TNW@VXBtJlDU$DGf=S_z{O_XzYU6i(TeNxE2qNej>9fx4jw zm1{R7Jq5qHim$d~pWHjkdI9Z>PDfmK1R!8gnU4Wn%J5_$AMACa{TM&_vXJb6+Lzu( z(Ke^orOU6pyA&m79dG*54&7k=Tp}OGN4iD-GF9Ehh|q()ih1O)7YuUolN2 z4Lez|EfwB%%?bPnV=Z=moi_G;szu4esO=1Af|$8olktttW6_8GOag91log9q)lr&b zwzv zY>k3HFiiC)?O%}sn^k4COX;1KvmV?JKcYkDDpnw0slhcfSa7=Qlk@Vz_{7W7$jI5) zCJoM;|C9sCH4UxOdL)lNim)Tm`RCYs*M{VUQ5@i&r|*Q1ELY%jM&n=Lo9;@6x`c9u;RKe4SdFk z{`0kVAO2uT(EcCo@K&^h#P@uYU|!Te*ENb;m;+7OsCn!t1p@s zwEImDV}_wci&iHpNnx2Iqjt%|R)V#m*iA`&^cA-e?bnEBrmm@U3Gbh3e)aD0xa;uY zMS4tC!f=lq)o*?x)i@|YXRqtUU)&S^J71MSoX`$0r|=T)hdoWx=!0&}7pCt5fZ_{+ z9wgCr&<(yHYES_{)C${uTmn>Idd83?SH|kyWR-n+)JIiwaUKU6KpxOp3iyO=KWVbd zV}8;!pz)X8HMD_Rq15Qc?dJ6>`UTJd|O92rb30n`_Y7v zEopY<#p6mcb2pl2sR`4&C{q;3U80rdBRM$^O#d4al_R(=lv5H;gc)1GYox zhs)U+%m+nGzcqLo8J~P`T>Tu)K7#|k#b>}qWG5ZI1z~8U_vvU$_QFq0_`o&m2C+f+ zuDI2olY49~FrC!YX0I!CG=*6egw(4l7{jE{9->nlfiadQ! zY9R41c^S907-_73Zy>al4 z0LNxXl`Wu@(TwH9f2Q2cS=dVXNJvy_cypz1>EZODnopN{1;s}S|BRQFEH%EcHPY3k zE=~1lR00Sr^?aNBBs5Je8La%j+m`(cMc{eNm?9N~F6~o9I)LExN#Dklu~E|I9wC<) z9047?&4xOL;-*0H)kJ@S(qdX=Zi-ZCj+L1y<2Zcm!PzQy94buh1oe{| zSJh`vJ$+q$4xNgMMpJ(8(Oh<^>ka&44ZXm}qKjCMP8oyS!b8V*e)v-RA(r22F;Y{q zBj5t!doTX8c~J<~kbTJsfb)xma2xl1d ze#-&O(cvDzR_?N@gluyImWlxM^b1eusy&g!Cu$%2BsG5Pz^Mad(4of<*w{Plq*j zC#qU{6N+pdM*&NDFlKrY{Mc-;usba~r*d5I{1~GznDw{0U29jD8K=>Q7J2vrU*q%@ zhSvHhHLtyuv*7A&H$l$xniK%itp|xeX^?CrlcV?R+T@|~g<-dLS<(!5 zDNw8yMV_r?b%!6I`6Og>BAKa!idaUje%NEAj2J`L=fE@zG@*#AJrrB(2E0BPCBmYT zyeAQTj=>K?*)TsI_9Iup1qE4Bejo(-c@)4JQ!P|Z)E`ElqBeuQ1f>ikuVJuS3LM)u zKr<#yy>h{EYfm?N4*Ba)WXm;*8i?1+b$-%d!YHSqZ;Oy~pN6RvH0k(-x<4y5EH+1Jx@?G}V(ao?FoM|LD%0`reF`0Fqnqe1=H|F0LTI zOaF4qLC0xG*wluCJ#-5XZo1enXY$7@-}8ie8#%29w85-qyTbr3{|NhaDCF1qVED&# z`Q@^wGg8Vx#+?Gv27&)Qb4mP0GlU-@HZuVuL$!vBkJ!JsdLm<+9Cg zkWW3tIIyvX-;F&yCb@F?m<5HfWBhC$`(|B}Nhf=nQGANBR68KFoUmJMZQH zmFoiF-qlcnE~aLIaTF98|NeSdd)DWp zlu*56`w?d;5PE@y<7#1Fv2l9tx5~Bu^szUA{%yG){{NSuzix>CUu|hNJq*Mrc$0|D zr~s%TK{Vad--Bv#w*6a0%#ZUWAL_MmqA%gL1P1J)I{eU8&)NN%^kQ2^ekRp7aRoP` z?<$#8Bu?a&J7#KJe=+{d)=Ak91RTGs#VtTj4W1urd<32lCr?0U8Sk++B1@%;__d|ph%VWe6+-#D=w8^SEfn@rWdlDOLl3Apf?YzRc3=f9N(wH1d1OpG^_CN?Gr?&! zLl-A=_CiHPEN}U4fs&`4GUPzu=Se1#w*tyjek~`u`{v<1a+KdcsGjkFMZJ0fN7E+renJOJx^pOm~DY?DF?o#>7Llr*gFbw!*&|Q zVzn?9T;XMg(6mpzS$a#*g+a8!F=RIv^X-vOHMOZ9d1i`P|7J0h+h|22(bml1teYi= zj0v$GAC+%ocv$9br?55(Me&LwIie1N$P9WI04u;c8SZa;i&q- zmo*S7J!ndSlHIKgUjs2i01V5C1yUL`O5t3VX=Q5#kO3e zm9iIiB~tn3nxX5xtq{^F)NdZizaHoR$Vy?PfXTJ*C(W`t*^zw~1dk#ho~^;hQPv3z zR3@?CE4{zG;GlGBwizi5A~Ov68g&emhkGeqP;3bTyre?81n}92zZjbS`IXqn3ofWm z(C9^)ItcwAJu{FaI`$sajQ-eo?AG-JgLpNXpEQjQO0RL~ZEkt#olOuzUX;I{_ry)_ z*I8y;Kr(Nw%8L?z$`I z;F%B1_s7Vo8-v-i^kQF5l+=MoRIhgj2->N zB`;wElHoK0iX;Z3q$LBi6sCyUxpC5u6Zy^DgyKTUbsq#+aTv*FyLF2Rhi(+}F&H2Q z4NxF*t{{VT^3BwHV-6jaX>JoW{pve1?Hi2|^<9iycKnXw{7Lh{90BgseUOa(q%k-= zEX5j`{|yBc(4AwITAalbe-vWB4LsumTBVR~;RjlUM88<4Imx!{Aa-KLETt&|wtFGj8zDaej|~`^ZtS`>vs@lM zd99>WkFPeA<|!-heL8dbzt?^}|K>B}u1Zqui}WBkpu=&++eRUzLC&y>%w4x+oQW`nGyq+D{5eNoD5-nFvr;u%2A1ziVAcLRt(LZJ1KnJPC^C zq<}&TEq;kKWRk0h5@I&Wnw7AGAf)o-&;+Dw__8e_2^|)@nTQLxIF2dv(Q%Tq;o*r9 z(*4$K9d~QzNu8Hn=bhHFL$u$I(Sx;Qi)>EHn(k=TV*`13yBg1DXCBRT2z4@Di=b9WQnWe$fU^QQ=;mR)h(glOt~mW$iYffsYf`;FB3h3=pD@ydwi!^am79;vlvHi|)oFm|iqVBz=d-3NRsTc!>z2D0EE zB;xd~7PfTL@P_^#iRES@_iizzzrJIUpm~6{mx~IaP5=(D;}*#p3kxd)swXuuf@08k zyV{AtO}*3dyb@dw%Oyzw_FyEYTMj>s^v%GpFuD45IEjL*{CWMB~m$j8WzqYbQB*F z7wJI`mn)EzsAP7G$_pu8k^EQ^sB>K8FeRG9SdG;Y#w`JCm{2h(1v4z%aONM4JpG=u znJl9Bn#C$>?e0CMel`{}zFyNTIL&(C6y4%7gcy#usw;Nj3#bnFAif)rzxnyQ1X);d zsV=1K!nT!#=Pi-g&^lep1fDw;o=a_llnG^*Nw!UeQ%~6Q5%b(IvX+(;@*fB4gmS7& zA$S3=l6Eq2hSc{4!8MGrlaw-~Z^P%c>=fZ4Oug2^K$IBJFj|%TZIW?ccE_PbNU|o) z{%@ZdCgn^zlsc9#5E6-@KrSB9cm%dbpA;Y&5yraUCG-83UwsnrV>tsIH8zIjSGccS zB;7MjjArWU$2egkQI+sk=};xM=Fxib=|!jzLPbcne$ca!QJ&FbRHHZHv(}L=-lyC% zuE%H?=Z;-t7=LCG5eT5r3ZC#rWrQk$3msj&F@mt3h8>>tu{BN9KUC$NX#Td9a6sfu ztxTzrLBDoao4?ag$a+Mk;=zS;f0x}dh zCSD*wnKl7=G4vmj7uO-bw$Y3t8zVboG64m(} zYbgVN05|_#fcx(@Xx}sGkilm(5HQVwrv@|R3EpAL(oP$mivCA4UtTi|FDHNE@@*Pl zPFrdky7_%psx*O&8(y#u&z<8;@t}TB9S2vt{ox*j!PQJ1fUR9rF$Z<0d1#XNtzVBl z?;t1bK>!nI*TGIX?Fa4rj`%e+E+F|+FLFaSS0U7(GqWByNvU{H0K56 z#m0r~EG<9|7h!g23pdrLW*87~dux`cEMN4yeVXw~tXl68+W!vU9Mc zzvdij6~y77qi$^r!1&an*3K;c(-6R4;a|lNPJhL{pZ_69Sl`tn29yqB?0aN!{ti5P z`SXE7sFtq#T!@s|+x^zZq5dwX4k+Cjeq|!=ixoTok0$zkOMB9d)0Rt>z?ShvNx&cW z7s`c>dkr0bB=q2G^o+_dN;5liO1vrt`CiFELm5`{Wv|$EcaOeg3gJ?N09_Wz7RScC zkf6_+juTW1P+HJ7m5AUheReN9h?X{%@j&$=8_qI0tN@`rEJ?XaB#^xP853_fMns>J zEWLbEVmhX<`oaZX;7aUNkXwz>?@BJng<^YymZYVLYy>y|2nq?7c#*M%?2HJA~S2omVZ^O!hs88Xr12A3hk_XfQik%^)WHVyIGI z^K1HD!6SPC#YrJaJcg=;35OBSVyKa^b!NCmkO6gW5tym%;FrGZ!;&-b@jNW5B`%D5 zo}f^J;~MZlg(KKXwCdC8TiQ>;aoj>T>+{-oh*JZ*=eZ-gvZi4y2P zCf6DyK~j}Fn0tzg|eQ>Xp<_)9Ba3W~oX#@?~vN}L;t|^#wYy^?+6H#6%c_*lO z--?9i!K{~6@8{`Cw)dmga^Jgs^~61rm)?-(4eU{)!J~o$IZ14KK=xN5D5FfTSUWb- zMH5YLG0RH4qsToYlJ*UuPv)MYAPJtBRu*eBf?+e7Z^7@{=gLJxmW8Jl>iHwtvGW}D z@d^hgM|_BHCpG1mB$>7TmV2(b1+rNmJHBjU9@auITTDCo2_<7?crxpPa zPQl{O@zHaUBcx)oJ3^5pp6`=6)v7d@jKqhea}9}@-#!`Jv#P`WLpM0ZxlU7iziVeF zL&gFUuUE{<7Sag8Bf~)BPhEUfRF<7}i}$(P4u?ByE8}{erP@S1)%IrpexmTsCi()< z5{TGC`7sXCK^ctwfe=!{z?`6gH%T5xRPOV>$r=9=i)I!s=;5gC9 z4Q`iu;8Du;N`eQl{ZQKgHVx9388*Qd zg;$<&{PxCvsvAxxw%J=8=X@W?k3a3`MI>mS7ht8{@&;UU$NWYT6OgMZL4 zEzaoCAls^BIe2+@`J~g@B>);4y}rZBDXnV+uS0&*9@f=pnTt{GSnd|BZ;|a%AP7RDCM-WF~Nj9(kozGcGal;=#dLH+m}8K z#k(oZh*i?KraeS*H}0D!HgbRoW71*9oyeDMwt~S;%kvZAsgu|G5?{9B&z^fk!^`zx zk$4!7iE^qmFE+At7$Ub$N)Axm^VPZfWt#HG!gX6?%Ac1r1u13t9z|bFA%^19e0rO9 z_WM1p8KijHDr9AK>~}i$t}23k^4`VfT#>6B(aG;i#vZBI&cK!~U?H(oQ9^QYk>%pG zuRb#^3X_}|?tv3UUT-aQTw-`nxgPiBJ>qsQR(VhnSt^yvuq+5CK(q-akrmJeIG0i$B zYWNMBH7{PE3GS}}o&aB=EPsA5Co2N-I#xS4!B^^B2VZ zFM|<=!TzM7?ZGkk@{;IuzGzHP_~d%?ehd%2Ro-^DklEJVrg@XNzE4$y#u;G) zKF7@t!in%NaZEFeMz~LFQ||6JZWMcq-&`{vTO@Qqk{j>bx8~ozbKEDg)Jk?h$ev(G z++RyzTdtW#lCHq(Z{z2hsmvt19ifzBA1~06&yD%BMxjLH{IPS7Tz>f7KkPUGwOt(x z)*$Tom^7C!7&&Ap)Zp84Yu=n}sFU-G5^-F=x}c!>sdd@t(lLQUOiOA?2rqoc5*9y3 zZp)Aw)J)GBd8X;guP4&4Odoq{=9-xfXc&HLe}Wy|2Z}hEZwkQyWs^hEkfJO~`#oX; z=PU`gW+!mnt~lc)$VakacdC#MuY%_1IzJcs07jS)1>_Myaq}pypEOQRH+15z4XG$j zV^|T;6pJCbRrYxqdqt&y=1F>v&hj(w)EPU4XN4yll&8HZoa)$)jwwNP?8F&EcKfv0 z*G?x_l6EUIE#^xdlL^!HRdF(BKE65}c;kh@3@7c%Gm}q&OyHyPC?^P8F&l#XhJz{> zho~nTsUHR^BRrJzE25%Sp9eg(lsQ z{^S7AGBGx%&|+bXEyCkG#R)s$E}bfhB4gp+4n@A_!p?ODzl{&OC_W5Ol*HHgsolqL zf6VOB`AG48jO?Fbshm`qqE4J{{*Wc-6b`)U7hIh~DuJ zn@;1U9lCRYa)IN+NI+P%Yp}+a#AEs64m)}Y9jGBBRdv6Hj9-;`$o=ZDOV4Pn2`Jb# zU2{^oj?W@KBheAiI(T?E!WBCernr-o7cSw!Z|#|HZa!%q-qw8O!c$@CW9~if&~jvq z3XE(3hMH!PP|__Beji2bB0?oyYXGgHo+n?lB0lSub9r6(LR!R}8;L;crd|w+>LhOtHdMEVC&F1coI7Ym84?L)hb(t{SDL zc$KhPy$83`*ra`U&rd|stWx=qO{Q|gBq$->m=uF$QGXBmv$Hr7dpUoIyQS2GWXh<^ z*B3q(aSJ)FL-S1_5{);ZGO-ila2&TM7GdR$#W{9XC;P>|AfWjpi&Z;MoQ>$@u1zd= zJncVpO4#L)i{p35i1jqFbQ&E6t(*(5Kt2jod54Easwlqhz)rFFwBJUoaN%bQIh-q+p|f4-20cDFVC7+v3g^=CKGr9i-t< zeQ4x`ezdO^eLy}P2)Ag#Tdz{YXCNdo)!}7k`Da5)&gr=p7L)VR#}v7@p4MF%x(`YK z>ZcB>dP^6(Ai1E^g&87vhIYd+C`-j^aP3xj;4y>_{xYemTd%4yR=)J<2lnC>kvsbx zqH0oiP3-o^!(>SuHgS!IKaobdIEKD^!5vXI$l88!fsYldbn$^xFQ&%kk0sSQ-4jH-hY_ zNv}~HVLFJA$LSf4cCaTBi@S1+BH^*IdI(WUFwrhUqk=hc&iN>=eC|Q>x zNxDSVr4CIB*Y-=-%Zfb`YF=+k>-m&*vQ;TE%GSf~wRQMg8HIfQC?>LsKqRG`khi2d z6F0`w{*$JqqkOxUfrp$n55 zX_HuP(+PuHgV8~1nHU+WG8N`;*Ck9;s39llE9AP9p~=BU@d>xAubm@(;BL9y9s zhwL9lKJ3!5W_t3<%3PRhM;YJJl!YB`37~6Pl(k^tFbwMGQN6!5bF+6Ql4jy}Mlf9z zDIK_z19nU=nGH>iNNC8chyA&e*m5g!UrN@VOt4pvl(-2?_={!a-hWXdhRZFS4uH00 zFvYbM=Df68G+Cp_67yBM=(nEDZHX~BZr|OWiC+Kv9-?uT#hv43dhk|KJd}-jMjFW{^*o|$3Cw&Dd;U!|EA@ibN9uEfBKtP&-jaRGfXPqldn|=N7x3!ldNWDB8+_(ZieD)q&MSFAGHQ3Vs`EUO1XKRcJamMCy|{L+M@_MH3Meb{F}ze;7g zjjtLYI`>gU)qP8*=BX#Xn752sML1>~iiJy8h9qml^z;rfHV!4IpRyaF$yB&^ndQs6 z^s*jV#iyekR>=bbTRZ;VFr*M#4$e*5*V~e|3KD%1wnCcI$Cx^~;Q!>vLFwXq^;PhS zT7}Vc>yGcI&U}k9Q(Usgp@TA5Nb&^OdkiDuTJ6+h6(_V$VXM%-p?Vvk8l0d3i`kI* zX*B)j$6{uOaUFFDx`v4(!@NP7GFFb_L(D=;fEhLp79B5g5D*F zmg7(?B(te@9zL(cT-9&uBfXxgMS;3#8C{#|ly3r$XjfrMfdgZhHsn~xG(1GbDUZTN zunluo{V=ccL3D5zG3@_;7QYN z$?w}$nG!Z5srLj{di?U1mdS1;TVg0F=8cammHj7;pbt-bnpHY?g@-hcU2)Fj#QYjG zS!$X;RU}-8Tn&i8Zd_kbCpN}4nVQDU(AeAms8#6 z#Mf&M>`jhX`mL#}5bB9lLooq9+>o!D-|x-8d-Ev!euRFCQIfb$$?BW!fVsgG2t-BI z_Wxn;J)@djyRBiYs0fHO0U;_)1VkxP1Y!e3#0V%=Km`Ph5RqP^AfnU_2uKj3bfiRj zCv*g)H>n}?PC^NRl>J_~&r{Fd`+3fLzA?@j@A!V;7)iX7yIf_hx#paUa^0AE0i~7h zbsve}R@Sx&+rzcx68=EAVpwR-GGsd7g)@`1z*U8H+#zI*hAJl+m^iyskUuBF<(1O> z?Yz{h*qIT}j3*{_JjqLE-YBfctc#$|ynfz%273n%ii^IP^bT{jDp4|D4PBaikvZQ> zpP>5L(IQQGO~RIj&NQxy_b`l5HN0K46?e6jU**byw-^;Ns95eF>ZddLjHtW2S8^mLZm6-d?W(2H-Ll`A_IAEl;K`Ks}M`QlnEYB(gk}PqeHh3t#FyPxA@A2 z2Qd^*RBH&J$Obt zWNKvpWw)EvKu2z1<*B4;O81;6KehK#pyhueBS7TPn{bNkKf!FGL6GuYst|OwNL?^N zX$xay8(oV6N3|dY+81xEC5?25-RFD9v(r;E2DaGOb+st_Y#KVl7CEFp|3YH(kXKy! z!-W$EeSmwxAFh}P9!s*3y@a(q$17q`?F=pJ(DPK#Kf6zkI% z(#+z`kLglOd5Zcq?fiFmT#9)b6mS`GlT4y4Ep%hS0NN)c0(+RcpB$~s%^E=Uo&=l1 z_0$mSyWPrspH;IRl72+A#BeK|%YDal@{GN-W^PdugSHo73qZ(X!We(-c#1x$h>0lP zn7~a;s|jJRH#Hh$D(d?pM(io8u2%eC;#vKji&C&yPRxm>X=Iaz-5Ms8M$ zk-U3&9^%Nj$Y8QqjZ}xh?0jHN`z8k*MKZmQ{I7{?EzvO}A&M>Qx%sgG!Jo2!RMpI&r(N--=VYfUhT zXBL<6hNLX%@-dahH%mHmZd_zlpsq-X?2oS#P?^LHYD|EjKhL_MBM=qv+TIDx|J0nT z02`uY;CmV+p7~AE$yRnE+WwLCyVbO!p6M64`BHJxBAWXLGC|dZ&B=V&50oL6IzaZk z7gvX|mFJ~}HPDRdgT-}LiSx}uMcN{&iw|&>dFt8C6qTBN7b7ywQeHIJ@)u%9X(rz( z0)c0MzK{$RFoffmfmJgAW~Bfd280Zaw;FmmB`ywxTHdn-#^=zgkiJ=O$1)#uct6WcKW* zkYX2q;u(3cr@lsN6YTo^&c(70G1td9d`~`qvH0o7kDJR6$h_fxXqm!E;dPrHHm+W~ zQ6KAEP%`)ryAgN9GFXj7Y>9gG1{K(@-3~@K2TFQPc5oyHjB5l}h*~=^XXD<ny{i|>=}yseNnAMwp>Pvqy``jJu)a>JuZp`5`x@;L<1>; zR&_CiiO%c>t25BM?%<543G`@38|F{95NgAtAFTTt2+H-|o7lA{H@O64yvZnESRM#~ zb7hrH@JMPH@)&mM5t7Eq@748lc~IUA3o$SHF28&bEno911FvDqYKX*?L)ENaUf|7V z-)>WDx*ba<>4u_(-ctWm6IuBV4W)tAC^-quM1^A4t!FWQ09i+wv&%{Sz)YyWnt-=m zqD;tb($VnGnsSYE=Qk>O-Egos);vuKf{(Z7ESpc>4{@Cg3o2wKpB<=yvU%Mh2xDqP zxNj1g-cGDLGaHXB*qZ9Lw!P>&p2^U%Br&LHQD88~=~#7+tck~*bi>>lkPG34^%iO$ z=L_-_TRDAPuEOy(`&q_dXml)O2~K8KjIAfOvCutU>TjVa*(DQN~`^oz4e0K0^7oT(e_&zxp>zH9$!V~z1L9FwvdfdIz zhcc0VfxTo$inQDMB$mpK( z1yJutZ%H}PQbV&7O?3!=4^sIA_SKq=zAAI~;{#Cq>B0zYvqg{3p}iujqjtitytD3b zh>29Cq_1S*tAbilXJ^8m+vR+IbM>2oN)1CN<6ECGC?oYMXeJ0BXBbl-qhtKk zh0EZ@A$_B9)MfuyxWpB)g5s;Fb*TUdtEz}kmwAySHWc6)GGR47ERognW84WX>-UQ* zOHuB#{>d!iGE&hkS={?S?)zwYgt9k~fs7{c(LPpOrSQX5&k~`H+SZ!+omBQ`RV)NG zTHC}gDBkw9CZTL}ga(eo@+4%0)p%zgov(O&fX2~r5De>fC=mneD}bx`G-M;P?J#!9 zjdRxTEJJd8&Q%A3WZoZ&m)hZ^UIqcw4OMHFnNL9 zhS#6U4WEt|*xt|U%gDHzWqC6xXWIBXnH5A(H0VJu9j?cTK4H9W=G&aJ!u$n~>FwD_9>H$%8d zdc>%JB^(9j=3P+k)JGSAkDaRO?0ld>kLBz&IrZcj{;=|+uNodZ{osC@lSF7As6aTj zzj`1++tI+(1m6)X3pZKifP0L6K2+K1T=F=Sz3iGs9OB%|FPY&ycNCtkLgC9WEn0yp zzYUU*p?npO=5x!$H@(}yozO^9%Sdd>kSqweaCwdWMZVpW6D*l%s8Nw)QP77>!uUzEY5upxYXQ9)-27@TVUIeYIlQD}YLy<3E<86g^UgBMu8j*nd`f-fHjZ$YOO| zDxZ9P2l*^E(8~ew$Qh0g3sB_@sxGsupKGOkc3Ec%N)7&cAVThD(r9O{mo?|gS7dW1 z89}cu#_pVS?jI0lq{g#?Ty=@b6KJ2BOn*Q^&G9kxh;}bnZKc6X*rPvG4JtR0vH-=7 z59~>~Z@?C(-rx85A93@XA>2wY=t*&M1GKW1`q`7hf&VAq-oMKjsj?=AgR%07Y)*tV zp^D!Ys_0F4dA!MeKA@L^4wbuX;_R}RC-mW*RNl)2-WP!{G1&509+R&F`f^whmi)XB zL5G@A2#n(b0hCKr#eiD60Qx~`kKK%W)TW)T_pPb?U+!4N#(tZ8dFOyj@7+B{K9{-+ z`4KfcDG6a2%zXFD3nRp}0OX=gQZ%}0^Oi0h$Rr;B7=B{uaY3G+$Yq<;x4)d9d7`}5B)1_45S;s)+Day(B`JXaKr)KCAk?_?L?hyMq|WKYBH3RkdVoqZh_EdA3fWFe|0u3#1&!$i{cQDPn41A3%yWe3DOLeCu#7)A&=sb%- zU(P3}3XoqehOqg4r`S-GzivOAvip_6=;L}%iieeBl^o%+TmA#W^28#lKav*UO{zm! zJUGP^09NV)@J~q;Yi_&bxvuu^XP=sA=~!NFBJG?Z#h-csnFePAkne zJ|BLdUR29>Tr&Fej6dH@7>|o~sqUf1$^N3xx_2WTT)Hroa)^X6bwI$+8n{oEN&KrJ zLJl_x1?0qgCU6u+O=@P@KfTV}M_-3gwbs=Y!th#MbPXB&>NbNRkdsy*cMfGn!Tu4D z6HiR5@9+mC(M_42=bE}As8?1Nr*4VRjEc3+FGp?v&<~A1`JzOHpttU zVA);YPO-RgHR5^tr{@e9!$jXCQGOkb+A;1PWmbIrWwkD+VSb2u*Ye}suU~VEwLDG4 z-F^{z-oVR{!F%S*m-IbX7#I$iB?cZol9^`XVtoBuf3!0a41xtDX?iVXwigEx1ik||P{}ab~ zsu5WMqr%oz7k@L!`|k*LO$+`)Znn^)EkN)wv+N_{=+Z8)YXGm#c0ROOZbOw4_(*^y z$DOi@o+}YoKr0?O#yJ>#+z~Y=UhSneNqag>KVpkVA8q<#h6z}yf|xBFpP$epxu56S z5i+{9F~Sj!zW%__ST}tt$?nWpmDaj^rZ5L)RDcF_ROa9XrrrZs*+kC?Yq@_zUzr|H;!yfV7m^tgFTyJ2_cfmR-I z59qowjLr+I!ESIy0=@bSNZii?-hU(kK|26a(P~93Igr$G8d`#l61awRK%NV;eNET= zsp|YiJi2&&S3$O|m@QHxD^}5(oM#61shu!LZ6glNsefk-}_nN_2~RE$JI< zMQU23pcX0go4%A$5;3!@YM2UR|K}ft;*+U-V7oAa5?BzROKtvd$Ns#UzdHvOW8C+u zS-`Xx5dEhc0Q`Rb{**kee>?QIOX)dGjrdJadg^2$HrBfXOospBjZjHt-v-$)P$gec zgd?RXKvyB;7K|-u@*NL}-*ma56aA#%186UDi=7lrc#xh|mJjqjXSyFB0)hnbR9fzt z`?U8yg1>w@M3~+>h3sL>Mhp&dLK&1<*D%zV5}wGOG6RF$T5p3ztI77RDr8%*9_&Q_aF@f#wonirck08a`{Dq!i+Q%j zP6^u9`R(ZqJ%UF3CNJLi|M-(Xhkm8(okG1vODRy?hu%)r-+?lI-3fl zUDWUi>0;O5fAA+u*h6wjuWXanL>S@-jinD5qWEU3uIa(?+*56J5cZ5!Lx^sBB88NG1=DFW`vwd6M%9WFkkJryX>Tcobep^$J?#*PskMQs%H5Z?si}m`V2GgzNjF#hNc3$u_ zT8Xosa~h|dFlNhqcdd$(z`6c?umhLdsjTWb`C=_BvBpMv4XM{W~9p4$~zCQsibgk()=5>c$ zOwhR3mDRt{T2m#Zl=EfA5|%$qi*Va|SpCgsv@(E7vv9G>g|s?eCX|dQAhi;BQG67;pI{vEq)q4)3>-0^|SR2 zC7G^aGhz0BOIs(QHr~>+#^lozK_&_!Wo0E_!vzC{B-So2F-)PB=CaTBIxVOt&h=2< zWeC`mY^geT`-nU+veo~JeO+N&b|Q+8S8MXr9(^bt4)U&RVIf$;UC_|S{Hl(bUz3hK z9qjrd$SF7MkLUC!UKGG%F-Gigc!3nkHvoXA|M@7r%@)Y|>d%89|L!pw180#PSSrYW ze?dN~+m2mdrApdj=X8k0^dk_e4S<@mJYFeJV#B9G_DF>|erK@Yq2d{1BuaZIj~zW2&pUFZHu zXO5K&5R`XN{U|Ju@9i4nB5@8$R4zhgcCYmC$nbn;a_-F(vr9*$4=MYZI&&DHjgvCu z<@<`a68aR@8Z>eZO#j?ee6a9OJ;~2O*CaFP3O;&@e^=+(o`4;E+5=_@jCv818s{~{ zkF9GR7L%%%u$zp>BwD?#x)gBkFw@6zgHGp;5kR~RnsCmEf&@@ISX$Fmz7GuyA9I&K zU7L-K+-jc|E)G3-@qwH1uIG5aBs_I-r*kapUIf;u-50EldUtmzOc)hfc7n)^}bia{Y!0Nn~g*)+JA=-z%H??!w4pI1FIT_C98GHLe z#|6Dy{%YV3zUS0QmcH!6CHI2+=To(Brg6o#(c1+0s|W#0^W!R_y2TM4Iz7rNkKoSx z(H=ayV{%Ta_*W2rmp+Z!EnfeDHwD|yo}QlC`dT(aYfSD(zt&yUsnmIU;Qgg5LPuW# zBdW;vBWV3vwgTO&pjoulE@$ZX{sa(|$6$#__qqu%Kl@#M@C_BXPdj!EL1zS#r2}E~ z$P`QZ4`5FPISySi!2(?jt1(a-P{Aa71u({4f>QFlSw6t8!1rLnKs8K*d)M=57@K+d z+}Xs6$bx^hd;B|}|KHoiaZX^1(w2R2xn}-&2q#>Ck2kEY9K6;bx>S|DeO1AOc;S^U z$8-8(xZKxLo21x^Z{M|~Vgrs;yNfGPvV$LlB`l;TCQC0}-rtT)oL5_JHfyA#yXG^&P4TG_gT6nDG%0kOEEx z=@j)iE7;HUj7%Mf6?|-=EO269%_o+Kz!@qdF|roIv08Z9{HR-IosVE?m(`lwiGs>I ze9aOQk6gc{nKROCVc{hSOjsE7PN)i zIlTZG)S_$0RYOS(04wVf*YoK~@Ahd|Rld*jq*LmO0Jg*)g`L8$3^P*nQ5x(Dh*_F1|Ji*yQugPTc5Q&)`iFjaiy#XKw=*Z!fwu5} z1JJ$|qQg9j;wcVuNao{X^>e5gzZI{mLenP8OvT;hjQ?{o?xH+YI7=Ww6BxEI^o`)-ZmzI87U1jY;?OOgEOzsNA1>WhE}A zYcR%|bx67?B z1atD)04g{mkU9QX1X0@jV}oq)@*8mR4sZH^EQfV&eQ6>G5P*3OId@zIUP~A1v2zY% zB?q?H$?N8pns$zvwD=2!1SE;Gk^39K$p%d0mO>~{xBd<~a}_Z=pzb~qLX}+Qb91fd zhCGX2(C^Z<;YeK|g-Oh4RjA|UoU3U4FTFHkRSB}&%n^W;OvK<%(kI#0lBh)6ZE)6&su% zohx&+6Q|^v76+O8)1SzFO5s57N~Jr&xNP|;mEM(0|Jk1dvH-EWdxv0`7~O%7hFLz+ z60$AV0k-}hETH=)YG9j=i0^$yTIv9_N!iM7R=AGVbaME)OP&vVqb z>c=>PCPPBQ<+3Cv6${+$vsZkozb{$}-*=*@kDQg}R5criJ#auRX8QH2LTx=HV7 z50zU)GLdEO_hKYg3YkopH0?zS3ybC1ADqc}{O-i`k5?}%n;V`Q$PkkzZX*wZwsT1h zk;au9W<1?1&hkYXKYHF;*d94}YCOKAo!R!zuBq>qW%H0^zCo>0z3OQ~YFxUB@yL&1 zoNZsK+X=N>umU6aA6p3h$LoCnxqD{5Eywx}LXrga%eepmHxKL@ z#a07C=`I<)+bIkEFP71MuJSnc5)>c1ldI5CtyFusg1)~4>-dz)$ z=5bKEdf{`CjK`brJzf@C_#~3#duja%BJsSoLkw_^NXVXGjj2=RsEFcQ8C|d=*;IXY ze=MGtaIj)PIwZz5kuun7!gDRANyvltn2ecF^&9te6v@ss{E;K`PIyn;TqSH={F~HL zh3({RuxGn{Ua}j`&WVIXT%5C1MAScyxlY#nG^e-S`ncG@sJW!fLOILZ^^*IJ!Hwrm zr>UB_7V%9ND!X#o;FSLRq^wcJ<=9%c;{kR{}Bn-G?B3ioc7bf*lFH!os0wUAS>S zlwI|-+vT84Q_%+fOsWnf@4@8Ui{yUYYIXA(ln-naIZaMTIl1t@ARR@8Jxi=;Rik~O zUY1=%WUHmS+0PM+@4n1(C;ejOu;O6mm$XPyJymG5gpkCXe)J3B8~;tJcytk0q11#L zrginlM#h9#Z~yVzrC?Yo0`dM|OXq(np)(l7_;f-FB%5jwZ_SwsZaRHK^h|KS4GoaM zT)h4SYaNZac!km7yIW0@@h0zf8fh66cD5+8V9BH7b`YgGBUSI8>QAA{3b2QYu@AA9J4kigInlO^TFG_9V>9ezTXP+NCYH=9v|wnDq`x zJmWZjVYs4QQ}6^v2ZQptjBL51x)+=eV?BE3+*tW@*(BW;dgf0MGl@ggJ6<Rpm*)Y}$$}mZP*@>K!TLg*btWR;1)m zaC{A{*m)9v6juB%h-w*US8Jfd9ZfhUK$%NIb5k!9c?srJb|Pc_dxGfe%_n!E_+$M8 z*Sisdc_sE2?Yv2ihK93t^|u3P9u}W=IdBIK#Nk=%!a{ks!g7>#Cbbr!p*sUFseGSp z^)p?+JVj6!JJRVT{%K(i&Ne^f<*IAi>fq?sSuI?GvcAi9 zX88EE3oE9%8_}8BpyyMz%5q=jNAbRyU(STp_h=Sdau;P4s=23@Q|^(Ubh{LH>w^lM zE4(Qtt=e?YmZLu;-f;`ZQFY3#ZaVjCH&yD{s8A`Q@PP%bYt3)7%~eA(yHZOH={`)r z5ftE03_UzsR$KLk&Yu@7c$XY~BUFw@V!42|u>`?E?@nMNRMwe-apt(y zuMkB83$=Rfi;Aq5qJL$$EhW01gCrqn$xBFERx-?|E_HMsOL*nhbeG`Vl&}DRxQ^CQ zX}h_QnWOu@HF(^IpM;4L9w*J^(6?N-4A&h_e7`aJMRNyPccO})?4C%zi~KZS^tHLS zIp68^PPB4=ALleOSAH2>AoDxQMc`y3PZFgHVhQ2inRH>?Gm7;fHK;WESBCzjFqc(P z*O3#Wp$?I+7jD_FyZTs5i5JUX?>n1gF)823%s9?n$86CkAW|C9akcX^`Y4Cbp>o;;8JPW+qxe3hd8f#Uf>0eK| zJGke(EB{FSuE3a4eM%TeM-od-Ai+cYs|_;*(O3u8z{i~vM2;c^TfKh7ZGxEe(a#8J zdEL)pw>M7p(0Qp3JAEV{kWu_BGg|MI1+%sBwA;#(kVtn9hnsWqdrA(VWJ)YgZjN^v zh%1S=o^U?Id-<&e>e52qSu5zPoX4}{{gIqqCEa7|SIgSHMpaz`(7H*}(6>2xfkO#r zQlPI2ZrNQe-4%U>`?zFRh+8<}fNjaUq+jiXS1 zmZvGUfn3|MV<*19N@6iGK~#F3CdZ~wod7n3L#p)>E9>D7HjRh(Y_?27LzEg>Pr6A#e$YkfJ;i3xWfeXM0bjK` zALsX9ovf*f!!25y22@>@BZ^aIQG$r;V`nj^ztU1RB^h4t_A_U?Z^pZL2MP~ZeDwwr z`dj2^P?@Aep#LV&YId-lXdPPyv9*s)YTYM`C#+x#5P-tr4o)Lw_ zlJ>tw@j2oXiDaG%qj3yb3z>&4;?@_fgTevDkF+ZGD?=}+vQ2NJ-@prj+!g~M4rVV| zqP4G6rH3NqF3~5)sq#ej*Z0C55o?yk1m?FmdHh(>r{r0iF_I@DpNe-?iICBca$_kkb?*#IRS28mOb_Jgn`5c-Hjff#6i0}Y--?v^3=H9$y5{_?3R za`Je^J^%oHz-D`N0esC8yEuj1h&>62aUMV8AKm|%_$TK)fT)fk$u>ZO1Q|3Z~^{1Dj@9rzTsy~!3%?@U6DP_c5`;d4>D}~AX)%1_z!b6KjL+x z&Wg(foLR5(-J)fDxumN5=2ZvQc($T@BBsrtYsJ2(ns1YwmA@A(J(E>jRA+wH&1?z~ z`8H$85PCHibmvY~9n>&J9c(=~+u)*stB`{CCC{WI{BU9l!Om zFx%rM?~IB-3%uXo1b$2K+VIuoj}~(HgyXcYRU&S)wL3ofDb#}l=L<%4N6%-2n(gb* zX0LA}2lZ=C1^X%mZki9l=-P`-5YpZXFh-^BAuSOAkO{z&q>PYrQ5ZPWlGwv|kN5AV z+oN-CwG2?C!zP~hlOl668tu;wbe*T$euPnFn;I}X@-#=__hZ6JOvNr=Bs$s-Q=p4+ z<<|8@3Uuey_xi}86NsGy0XPulMv5;KB4?MX=0HJNw9Q9`+($f(KuLNuPFC;0_fRNW z&|V>vY)cxl7h#!y8cU$yOkMZ;qHX`+EI z_@ak|6uiI3=zIt%J$J!im9;z;sR~;R`ebyBByqSXDe4$FXRo`}8W+ zhue%vR7UsQAa(_wKHYVG>g~3#m~ZTb&uje)M-+r%-8h2gvUx2E@kUh?_+?h@3Bu=m z9!GKpX(O(6SE%o-21w>S$tx<=?@m3fd)YP6aP+fb;>DJ=gIDgru;e(B9ocmfwtsPq zw~xv=zN}SOC06MTGwM0-1b3H|GbujT;iznNsr90zuH{3+D7}xb4CriLTm)n_>wXh5 zyn2iq0KtA#=+lOYo&xxxtn8>zdDU;dd)r<`3kt1iX5D+%{^f)JSx}HLAJ}xndz$;B z4P(fwGOSH=Qp zP(`{XvHAWhKypqN26-fs@MX5P2+LN;`nIg9P$bT30_26bRA4@I}-(_>Q;9JP9& zWL%(TcK_(GR~7QM>N%elAZb%_t5YMghWPN41slp%1NeMm(&40PMtMac|8; zD$BbI;H#V?wpHv2S|;)d7U{C$mrZ?hF#H+nMnd;33Pho1WDSxF89C0%xR4;w>BTfY z%6_GP!cdN1x=yXAC?6YQ*FC6f6TbIm;+Vq3o>zNi?@>POX>Fz)pt8q|f1xTMUSnB? zt93@>ugdQGWP-F#X)9w6#Jucxej4^U6tWL^z zjD;+g3bPu=9VT1XUUF3zK{0b{`PPaB-)-8j7A<_&j?aR6;02C78JTV}8Uvfl zqW7!1orXvCuDT2NNQo9|o|m1Ckl_en`YOreHW(flUaHA>Y65*eT4tw~6zT%@U2~M` z0Z=*cUK|r54-mI%pv+!csu>Q@CD+uaO3=6V_AiV6!{J)d0Cmr^X#Xi>YI7#~fX8gDIg5=8_Cy8i1S`9doBj|FO6%JLoBsTv>aY2i zrfg5JMJYBf`iigM0)cM_tPUGGG#ju9<0bRe`bhLvh&xHi!m~|o`L5ZWe|R0?Kc#zj z<-RgoOUA+{U&vq@eiYj{OOAoOst|?Li%I&_(}hgWv3-%f?6M@!=T&>@Wu?z5zd~Be zt$NQQ*Fg{49Y_>5SG3v=c`t}$O^(8wUvh78!KUvJve!wZ5%13yudTgLVHGz{bG^ctldd&`@&1-q4!!Ux7 zTkiRxXel=B{EY5+tbEbZRPP$E7SF1g{QUNk*E$hfjY?Za;30!sb#$SAr*G7KlN`KZ zp|SzJTQFxG<2E_89b8u2+wbyxo)m5}+;EbMa4J+`@@@w2 ztCycx81}t9;JA}kvwC>Z7~{X1LzVe7V&*111Y_+GeyuI?w(an%s_!l{C+iznzFWD? z9dL@WnfkaAaaGNrx6sp+ccj(Tfw{mUzFR?OXF%HLqTxa@#JV%9P>St=HG|=BbQsam zp9c4E^N5o3?ZLvZkB{38@;mTw`c0r2+>rG;1*oWyxC_5BMAy69V+p7Ic6ydTD@X1| zLrH-s{AK-BLGPR?)=#xzjm1uwL6|y9Ev}yTP3DAVSyb7_EXdaK^NX8pwgR`LQ1_qx z%21w3>5G|g?P?)%DjB)|%3z?J3gc}Xzl_Z%Yc%pU&}u&d{|Tj!mcKH%_W8v5dotEY z@w=@zJjYOl=qHN1@lD(UK1~RURWsyv;4)PO&o5Q$;>#=p%g=p#)Xw)*?9L=+(pWA* z{6d=k$v_lhI{{QduzU$5)_uBR4LaEK=n&xGzgulr0Xa2b>7bDIxNRw9K8zLyu-;S( zYR9+)3Iaw3CtPsCMS?&f(%lp805(r!rBT$?VypV9+rKPFo{BHG6b(N4%Jc(oSBgo3 zr?J**kQVWYLZJQgX@Cc(?pA>u;{LHz@o$zm{3+U96~mKA~Vu!;DACX=ZfS6A=L-BAbL$PWJfadHSINY zs?%#X4=M!2e^jLn@>?Eqa}Bz4J5&)_*+i9Ef4AtQqvkI9@b}R8|9EfDf0Oa`^e>Dr zg@wN=``ul#DJmmR&5JID5wASGo1GJbHwj}YeD!uaLb+J%!h6-{42Od)Dm_9Rw^W(R z(G%X7x7_u-1umC%9DfuArl{7*6uk1UV=k{~*k@B`v7cz>%^Tt8l{292O;fd2yP09U z_(cf-u(`6}pO;5wROP6b%!AR4R2{t7c~p(EcFKeKkQcezZ}!OA2@pzo8kZ&o6><{t zsCJ*~CeVyeQFaZ>GjRt$+X`32xJ1$tCI*de#e~Aft=g}<2+E}>Dzs@{Hi{H>D`-I; zt~iKg^5FukBC!_(LHK3qVQmxNxT6y%qE)6}IK-DW-jOjqU`^Ii538%<>Tx35=V0); zg`tO5?4PWsmfXMl8E_Wf#qmgvM8L15CVxzx+B}pg^b5%9g#T!O{x2bWO(1Qd+wz!` z$R9`60pF}rhZc^V8c-Dg)sNk>a-u%QryIG3FauHRSI$}bJC7uaAhJ1U*U~%JqZJ&H z?SWgD_?4jqO@aTFYI9?E^8b};!{Q2XkHgCHli!G6=1B6|L)T9jaqPS~>GwbqM6WfM z-fEG}>xUAe8PD`D(Q@c>7xaEtT z62>ojzZmrxv6ZI&097|=c)Bb$*n@KuH)wxesC!k3&y$QA1L%UcgBisrL2$QO0_8eO zM(QB05&6c=Z*m?r7b+bLgtJWU4Z{RibLX)0MVgG+iY5bk9jD{Z3o`Rb1djNoo$5*N zgIcMa8&Z#}L#1ZpOW%FFDY9<2zREYH&kv$~)iZ7~qDwpGf!PKXtR$0QWEoBj`Zn9* z&U>&X>Ucl_$t7mO-8rv9O*Lj?fPT1C?S&XI4A!%vR#gbkaC2EqZKb%}fND^ZJ!i`7 zp!W;=J{j5BpDqb0W#)UsxR#L-kO4DF#Y$l%XS1LF-QA;E)n{!!W!@aR{f<=BJ-{pki5Fhn(encN9IDgvSQ@2$}73Y zTGQ@0y7-p%>f2XNg2kP%je7GLZd1}O^vgl$)m}OWg>{h9ARtob7SN#H!bRyXyJ2Q7 z@J79vsxF>Qh*?_3Ll|%8Ur%mubz#wN!^AJ^d-!<0?dpQ0M$@#RkznO`Gq z&;tI$uQvBqCMZO690~lA^l2Z1UZ&!cBhVUOGsGA&6#Z(xt2w>Ns935-z!ASXh^Q^Q zUpr!6G7kMe=A{xErGe^zrl%-w5-6}S;v%?p^b34p?K!mwZucgvz~=3cp9x-1`OJu#RzH)b})_J1TLz_yUlsrRw>F|4|IC&mZV=kF(KN@ROk(a-n;#3r!M_m z$Nq$p@w=Z-d1>Lpn9QjU3GEr_W*U&d0t&ojBhE2hR$KPYu{$^TUdAv;3EvqZwK?~# z!&<*1 zi|9=}lpgeS9rJJL>h}z(2dxS0JrlD+ijaeI=4$l{rYFf<$p)a`Ul--9f+zKPH4h??2*Cj`iV9= zpZTrM!>rNma)+)wu9OLt>8}dKFb~k#-F(;SN2KsLK8>_|x5rJ@F{m2@Rgdko(kcVh z!t7mN1m3yQ#1BXBIoqf=LpSm!$<~Yf^ra~U3;y4HX{sBL7Kp&t&o%tzB-n;&ytg*b z;gPnhd!Ir%kk$}>GU8^aqMWwpmCByw;~H$4S`sX8nFJU{G(=OJ9tkCx9giLW3_Z(H zMd86HtmTtY$~mf>XoQz!DgbMSvz+Igzxi}ju~vc97-UKZQ^T7wY*3t0{@qCd_oL6U zo!qM+_#(k`z+CTLgtKM;0P=&b_EphAup1eo{{Jm$@82!6TIw@+T@O3Y*bu#n*V-XHAQuvn%R9edv4-OH~l0^Izv5P%{IA% zvx=-axq4{2U{p_=D3`YpxT)IV5N2)u9-YqVmqj&;t2vT6fnbFzNwhC=ShuWyj{SkZ z&+jIbz<6utOw|dHTQ|GKO$ax};#DBEWtXyK4LA8b-))|Kp4;lteW2*&$ypb=hlMbF zPFe{r4RmSu)f~MsZ*WN)g&q53tGhm5yFZ=~&y`kUC>2TtG2|%>b5qiAu~xj9X?B>- z@hQ4<;Umh$G5Bj>m8+BSl!3Mghiu$bMN550DlGtf56AB2*MMV`Wm@H!=Qf7CP3Y6R zn_t49>?qaJXw}FEmZKcp|Sz{ZdXcQ=+Y&lfN4G3@-5&)8cT4k zSv^WV#JW_;)i?&*Ua-K4sg}oyls&uvrussZsLr}}5w%12V(|UMEMKsZwfyd4x4Ss5 zL5B3kMKHvG2}CVFT)QOq%|Ny4S*5<6_9cu2)C$F)JATZ>>E-yih4KK#06Ga}g_nU& zaN8SU$B-6A^IKy+X?7%`5_+GXg;aQH=;Q6cqUqV`CJ!8|{=L~YZfk2S%BDT*UXu0n zcKq&y;QfaQ!O1^8;=&aHlgWBsn=<-=@acuN+uJ^>7O`u^S=`j|E}{LUQRE%13taFh zMge&4l0!9rW+tn@vtFcEu1WE1&z&??K~7#xbNwBGX*I86ytjBgju7>fm!)tL$#p%$ zn7+gKh9KekTp;*Uh9du=HYXebvl+GnQMLsv{!CCi9TgE`kfx#2$XBbq1}}kH2ip&w^CG6v4`P7uUxO-6v!Dlb@FK^b?)EG6 zRu7}n%pF;mTaYc_cX8>MJs{9QW+6MbCt*}(bGk?v*O? zt-w0(FNF%uDd_R4Jqz@Uw6Am?>Xo9BTy02A*^_K*caG3ncY*mchAj*iuKaL}xa^EE z%Rw3uR?0nztZKbk)T<nEj{%M+ri1hO)kOUiBf zt86npDq~{fZ)S+AE)uM-0(r;5SN~!^-2*-c9bOt&4?TUkrrNyQuBHVvS6?nCT_CU^ zXF;&M;S{wnCJi=DjeB5U)kJRWGt&X+=?W+nNP&&l4NDJ=sC){jen0|bej12AzE8$b zMv!$gg@A6P-rC&doEBlo`0d-18T3t7LhJgw70!;4)`?d{rM}Yv zARc%Pr6{)52d^P*nA#>E-f!#>f3g(eYTxv9PQ1QwH8|lE7{|W;Zpdnfu`}eyV4!Sy z^!AV4T7jpp3cfS-JJax?4M(;QJJP+11kFWAGb>b>l9-_?tEMLpOffM8KHpG60|t3o}IZ&+3N`$yK6; zWKK$d=RjEMYTlQO*dz4HAoCp!Mb-44gbWT>dlaQT-$F%a;1`+7GjM#V(OPbUKPH2t zg^0kf_*||-T+rN)YX*TfAlmuJAp z9gf1Ch26N-xBBOmvA-%VtRcT?jxy!|Lh~n}#BSxN<_2^sjBHJBG6m4B*73@P3U2xl zFrtN!bx@Mh9CF7nYS9w8b|Hx_Df?O_?H#mpZm)87O9<>lZ!`$AoG_~<1%oD z#*1e1mr$?o-tJ0Sf<7uioWH{Qz5M-20qFzY2h8?REXhp9#DK=Im)t0`7$BmsQN1Kz z7X0;wsl+D=XRUh#+m?aj+2$2BSF4ID9B!x^N0pduFdv*B^|9I7`K_7LH>}!7qi>&}!Zoyd9(8T}khJU7V6J#9tMg;es|UDX5ioI* zNKwA*>(}w|Qa;df*;&6|8N7}xEcRur=%i`7%=lmsHG(zu9SH?!JJnUP=trtgz8#xv z7)NbM%#G4}C4!kI->#KFuU*ZF5aY7xdp~Vx$u^clp1fktL5Aw~Oi_wmIv^_V7#Rt2 zOS>n9k-oLa)R-`^&805$gtW< z^$Hk%bAT!cDR2*4shcppFopCmyyFNikeAdVa~5N_%sr$@9RpnWj<2oap0|~-+N$Fq zJ?l{UIbASlRT=XCVeh@8n(DgsQ4|#g5k=`jlp+WM3Q|NMD$+zmM2OU=NDYWc$3R2` zq$?;W2$3e8NUst)BGOBw2?qHRu!)|5QsXYKG&QlvPK#ix<3dW;a z)g@^;W0PBHvtSkds#W>7IsIq5_SfHbVxQeq4?yS1vDZ8f9G_B{#FMY>k)|GoSX99Y z*G^#6is7sY0MXn1=&vFbN!DN9l5+uJ{)D&qZ9{3_e*AY+1fy011b1e+cF~u9=idPW zW93@izte}E|Hmaw`~SlF*zv5Wj}AXpuh|3L+P{@%XtXDdIwoOxjJaL2gvPV5-` zC|8WWlQ-t=)!-YKV*P#;r4(nO?2S6Gk|cSPK(o`)E2K z$-IPm6uXdVtsYN3O;ahW3O0Wfj@kdCr~OEl;p81>Udg(Zy{ZRMwK?iM1NRlW*c~>@ z;|@C@5OF;n3NOFpi=`Dk={aMOZ6o^RVv9DH@B5OsIadsFtuqBQkAdYV_av;YAJAdi zY2o7rSDRF%^S`i{>12G26q294c#eyOCKC;EHM@I=pa?QAI0~Ch+BuAKv+$K~sJFbd z^)=n#Pp+kPmgCthxH6<*Q zD(CTplUIG&!#-%Um(Y`xm2p5%eDc~`yAfUzy+Fvim=48j#y0T_x#V$5Us5CR!c>*n zJEvyVF64qu=fVak5}oM@?n&?)6s>Uj$J`y5tWXc$_R9-RI7&&lYXDw>-5#=yK;qjLf2-7rhW(AkB+Ow~U{(u`q$nlq}bAaDOG2^F`%gHAq?dv<{w)z&Zk8$-C0Z-^PBk>mxAH% zPZ9e6_aVk^mq0z2pG-%Pe)0N)Ye|=8959mKeu$zEWHQBu-Dn)RvLw4?ZG3D^U*P6n za&!LTcW7e#2LQ4aJsn8LZ#Av}GLq_|bFOP|XaSAX0s`{#?s_~U)NCC;ZTgeR6}~YD z?)ieGS8peW{+86To6Eq0!X6TQN_`;PYWS=99#)%*ms)Ss_UN`MfK~qw^I@EB-yc(R zcl^_vn_)f0|Kc{uVdR=`!A9HuM{lkFgpk1P23zYHrVU2!qDNK17;$30nST;Q2tX7I zibbH+Nbn#b!4Lz&*~A~Il;Fto={yc1ryM+k-ahu9JsR81y8cjA%{V%J6xmcIAALHT zB{)If$xrHElXi$#zpru6NA_MwpFTs2u0QnySU>+TmpA=P%2(i(A!Q*Rn@I})(vH<0 zKw(6vum8tCCEz{!Cb_c|!%D*`2+{IyC+>JCb>DK^l z-2EGL;l_|3q+Lv(w}OReb}z1@1m>5;O)6s6%*zs83ZviVTwJ|2k^A8`ZK#W@8xh6m zLkh0rp2Cl)bJ%ZNc*>$CyN)CY7|OSp4ssNA$XFkX%&$`TJ`+K)$qpam z)S1_B?KQQP-25x;=iT2NjoLo&p?tAehEIyir|T?{H04C98;K=K!FqLHsX@`@@rBC) zVAJ|>7xY$OhNe`#5nQcm&tF-Ic2=Kq>E3$%c|Nfg?|tZnl{q;H zQ?w30;-Iz%o2&Cljr)QqtrB+wccw3%DnB_MdV97!&XXXuq&4O8UGhU!Up7pXF^$*i zw79!zq%sH6;iG?JNdJ3ud5Y%jMh}|A?s06KqRQla(7}9tb>+nt>ElZ6BWSi3+1OSP zVyW(ZfAz=Ir+m89c*%Tp=?}90PbM{M1g*ufFrhnBmLl86$n3f2wrK}D3+(cW1YnAs z-F)&(H?E}HnNxOWHmPy9bZL}VlNU#MII4?p%}j z!~Uu$tAq5SS{`W6;Cb#I^qq{k&G;_Sd!0DP7iS*{C^O5rJ$GxpGR|?$ShW9!uM#fC znMN>>SBW)5`1Ml9qVEDtg!#f>6~oF(keYX8pDC*z#&8T;@{_#I)0r|E0 zzl7Nrdfs_l&5x`CyFY6Mf7UfH|65P3|LXJC**n;KqI>B})U)?IeAdxK1rku<^ygoX zZzz+|C}B`$GN450reCUss~#2k6@qVs)3E?Y-rq`EJn)TSe|7Nii46YN1&3dLSGwe_ z-b4t))Qd2LX0bceIgs;0qLc%%C=$CrF?OMEZeLaJ-mf_Yy`%S?JGKx##1%+2u4L*& zW*3|Gt9cul@)1Ozo_Y4vKvSDF@kqSvsZx9bV7%Sjg1P)_;?sB)``fJAW&iI}M*gd( z^*^J#8TXV{!w)%7#(r#?Y?c+--Rss7jr{Q7fwrLIz}>!UUwStOxIF${2AxF9f1iM7 zAPqQihw+mkQ}R)n)PDFcaIXUKW)5E><$y2kj3rl7Pszq+99LbhjP=qCemN#dzdI%;K}{vtvrQOF?QW>C zIWCU;&C=UNtGb``I&l-3QSYG?vRgy4SmhHb6sU-_k?`_EldevJ{f$ex$q(3W+gACm;)eh! zgaHvWGi=9*X|)P9dKMOGs_B$SYj~OX#O3!g3hHj%HR2fnqvS;UiESiW`v{{7a{4Y5 zofa~Cu#c-6V9A6={Myc5IGGbp&iO^;5EDXSW;8B?=!LX`)Q=0sj$s)ulY8dr{b(@^ zseOQ9D^8O_9spJv8z9=L10TTWU{VX*`R}-20A^P333BcM8Jf3pXSri z+r?j_C>bAsKA#Ca+DPb*Yxq3aaj$2Y?V0ecM!}x-x`NaXv~xe1#LojOhRO`!P1ixl zcR;K&eY{bo_Uc?crbc5xhzN9>r+&Wy6#pI8i;yMN%)HfyOw|pxAJj=FEF9`-nYw+i zewXhJOhZ1<%h|SN89TtL5nlx6kFX-JXsp>o7?JroYvLvk8v3T3QPQ>Ar|$3>zaqHw z1Jg6eoQU1#Swqrx{=TIC?o!G(Y-+p1Wg7EHapU?z?IiFfxddZokv$kPE1V40)!$v^ z&q@4#D~HX2_NCJpq6t7~gXjROU;;u3tmr>pe@l(d8)VpRe)#Wf_#N#Ox$P&@8w|i$ z>cIACD9=ipSHQoaFQ~mdFI({+4u*QM`4;wDxDi5FD+L*pUX@7y&q~jfIO3sMssH(91w0Xtk zya|s&r<}9*JIZ}AxXq$)A~t7azRI$6{cX>v>9@O;E^L96Q*t=vdi>H|c-EAXu!C`pDr zs(}9Xel3Bl)W}X~{}2VIes^ZP%5Z*=977|}m`6X2FN@Yh22zwRBSZ1z5PBt?D9q^K z$A8^O8n=<-t@$#^`z_u29H~5)I6eYFla1pggCFxD#c|7E9mdgH!=uO_WlO6g!%1%R z(+wBkcs(PjEIy~l7gQ0+bMS+uuZ3&M$unX8VwQj{j~wgJ+?QK3U zJM7=J@xrm7PO$nr(_`h8u5`Gr1g`y2SA>!S1yNT8kED4~^sYkMo(vH`;f;OwNj3co z$5DoMV*Sr*{ks<>(?0AD{xYLVH>QexL%UK8>Ns|fTRJAg%uPjJUsKh5KU$0Pa+Jy7 zUO9g%i(9+&U~Hv)MU0;W^N)#LENOS{^^3Z993Q~UjDSoNRWESH@1IKuJn@ladna>9!$ovOC&$=KYj5Vg zJ8v#}HazhijGSp2JJ3$j#|D0{)ueEzWa{UP3@x5dFALV0jJZ0=Ym#s#VrClGH3EN% zIasc7%BdCjcCk(@b`JehujfZkC={T(;KK3QtGSTgJdim;Z&&grMCoE=6+fozak4w~C zi2Ytl3F`44u3}T)e%O|3dp0*czV{+w0SMba9=HwkxA5=r8o>8oj@dR8^YZv%%Nv%< zWq1-Ey6)F$A+4-(##uW4`)zP4{+$+aMRq$tE@lNV0TMFY6|5(8)?kHM`$uz&o6%O6ga|JjYJ{^3>rH}(9F zlkh*a=b&1mD2k(w%4KY9TwTqy<1x#yDDEn#;1L7=9tsp&!qg1orLI-H`80Cb1KtGe zC{Nj>Nz}eA#9H>+W#eCUy6eS>KfXR=PeVP*&G=HVGVWz+|#m(++};O zrVv;jE_7-g(7bQL(F})y05DbtKZd}zy+?QYoJ;R*qS?dbmftb{z55G%PN zD13sQqlw>9PbjJ2)k{>LcW_oSeEW(zC!S&h6obVv!MGFq)lRTX1{-V1dxTP&MOz78_ujuei@1Ky?*oVu(P{b zLKu{agrqz=-;hW2DEYw6DH76vAs63QhoKNCZ#{=I`HkkyzFMb^(^*+JzDbSLp7bAl z=&ij`3hK~eFZU2k`)lqvc;(I^)Ln1(tU*UOlqViqX&GPF=~92C`lUQI5yuWF*1TtmP^0FRF^3;kG>fdc#(C>a zShi{G15xW;b|Y|vvG_wtqnCo|AOddJU&9*jKyHj{UX6f8ZVyOm@1D&6Oe)1b8|G+O z9%gRb&J0zERMP0f7Zs#Z_17C3xi{>|)vp6$16xZyZxc^`Hhfa;8W-M^#H%Yo2#h0W z_nbw%29-@5Xd(b%c{PEf34oTH!7;#|NseZOA)esLF2MQBWdR@Z?%GaUtiat`0|)Nbzy0#L-~EtP+()4#O`qsL-9{e9>;;Q7 z!&?e?T!CjBxLj=};WPbsG7sb8dKIj*cFos=Ya0Gf?)y{!>G2>P1bYLRlgKTW!C8z7 zwWpA(3s?+3dQURy5ZG<8x#)#R5Fk}a-efe-%hEYZ8)+Cij=?pLWk%nzv!k%pZz8EP3o(-|d^ZEo z9^_?Q;zADj% zU0Gaf9u9AAyYgOnkP;dg5gQjhMYnh>Bb?-LCF4XwpUW@D)MOG6CxA5Y7v=L$rbVam zLZI5Ja^%QFRS{?>gp_(!g{}IU41XlJ%)knGh zy@2i6h%8PljczhH2nh`fV2?Pe6y(wqGk)lw9^?A(Ag}jY`|9oe67%CsFmppI9_oJo z;cox0LfjO=+7u!czXzJH^L^8UHX@E>$2pvBe^>o77sqkrnTCkho@$q2?4-GWC#*Om zl7=o5F>+ybm^?LUu<-^u-!?Fxk4cB*2W}QD9be^aHB~jQ&im^b=-IL_F z`J~IBZ*BA>)u#XJ`Rj4UtUGMawO(P`j@#G}RQ!wz59JhihaT_M62gD4C4# zY8{f{H&CjTS}V%=W^bYrp(og!l-DM(6;^aPkE=MT?hrw3mU&ftGIJ3{kzBq({+2<4 zaXSj_qr`=0IGB|O)xg=`+9ylY#toZ1FL@}Unvt>ZQ0U$>!EN84sPX92Kd4%RO1wPZ zbSXwRVTVeP&j!teBFU?50mo`Tyvl2C@Uev}UdTSXIGuYJE@4;ekAtYWvsRoGgGRcw zC074Kao_rsw3oLb=O}MF%&&IwJkhI(BLD-Ot_P703{^6k;4d<0M-We#G%EKIPO#B@ z5cxKTq%b*emHxqF?s}%=gNG)MPHY#)C}g*!zf6xCDg7Et`q&E8FW~N{2)@S?k!vRo zB`Glu=KJ3&eRJY)W}L>S7wL}5c4A?R`}f|~QD>pJk>Xnn9>aE=wNxTuBhz}8YfMS7 zA_w1$SBv>ihiwwfYido>vUFiXgIXsaQ!XoU9(m}7yoG5*(tx~94FMrdH2z;_hq0gD zMmD68H~iW~)nnpOmTp^=vlfd5eP15D*cG!nhx}zZix}h^GCVfZR=et8<=RagJf<}H z0pMN>9S)Y|9M@M-k90*H$o7+R^x_VtA0f3rk!y-0>$fH;l}H z=2*F7&`o3G>r70(vDzE=Wf^{Yz$t+F4l_&pbrg1CxEM0tAb^Xbc?>~Z%Aja8GuQL* z7lbR~CZ#V*2LZMcnZ<%H)i#IrrbQM=6E7@#5^+9A|42^-GThP0`Qkk)Wx({Oy# z6s2!`wh9r-dkH-xQdaTCCe|@W=bdKx!vcZ8PYQGK*iuA;;3Yom3JM`$I?7{6xGk%$ z;o|H?)#!Y53Ki*{Mm&lwnW@7coMosKCSi#3CjG)8O_~c%$IMSYwh6(+?;SnD$<(Q{ zZ0UU}^N>nS>B%dDelVS~DzCyQ5x#4uYiw~I176zu;ERY!X(eKMJP+oO3yq5u&F(F5 zxgX6&3`e27iImdsgU#PH4r`hD_3eJzy3dH$iSk@~7+;Eupjl3g5BX2F2*KpdP|1Ae zmYyr0ML7l9y-h`{N?Xp2AAE7~=**sy`xu}j2bRZbh}J5SPsNx;Tw2UBj|-vqy~PnN z44%{&la=a{l`05}>L)ead|anpf~hSJ$INIm($DU_e78|IS^5xT3%s_!YY1B7zfVLb z@Wq#?pSE=5|2*I4_~A#sjR!@gbGq@G(OGrDM?Skt!*bbia-&Z_ISEGW1M~y=jBbBP zsF{d6=-?aQEPZ#fA(?MbRh(q1P_6Iyd28)e@>W_Ur$sYsQ&yn0+`-HD9(q!c8RO(Z zVEgL zHRcpJX?Y=@oY1OG9*;y{Bn9T9LA6$ViDUN#3{lY4&Bev_l#s=-Q>b0(iw}tC{LxjU zGtlw$XnfSGMwkYh3785mEo*#nkeX(&6qw9Xex(Sol|(m~vUE(2?<#MbTFt(=iK!-J zmcoWA@c*XtJ@<2r2C5tE5Sj&wr5KUAT4i^6pQYI+-XLGg&z-yGp~h@j){hen9yid9 z%mcttVVT(Rz+5qK$GLU)VEt3=a2xYa_*VlIFfGeN&7q z<~t|1lXuUqm%Pn>b~pwBvzNv^(Q#>053my1#_E+OOtYOghYr2BxioT+dEi+q^G6?M zO#MX$pMM`_=enLC_naE6>BcE*s^p47)ZMF}knJK<{xeaJURXsTVTQ!5y1vfaW*cU>s ztsdJWij>-)fsSuK@df)4nfeNwGOMU!T;hzfL*4&U{U$B+X5q1WF)T&_W?a+jsz0s} zt=uTl-=WY6A2pc*9{8=?p4`q_MfTb=WIbO;8T?z@>eH~6Eg(X4?G!~Irysz?oKb!E z*C3GJBb9dwUiA8U?W3E(et)ifs-!x|DdLBrPvvf1Ar;#Sq}-X?i{tABGA9Ll0AmyV zxXL-XFk3N&v^TP4?8GORims#+N*fpa43rm8-Hj8jyj3z${0DAKM};EO@wv%yh-aBv z>6s>1B***=*Qd@3KOHIc+_nx|LGEOX!uHpgPvnc=tfXWHxmQPC>6CioG(B*4Rob-s zOk^cYE;evU%ACOu&@3eV2pj~-P7J~rk~KeUyg#)y_r4-*BDY}rM=kdhysuqz=f^kb zb67ywG^l|zgazdY3eHk>y`E?9pW6QzrxDA);(NEsaTN=pfb7MrU8jLK&A?ljUvaTO z9|yc$8e|NE{SJt71%qi|o=+g}+PN&y+ka>i3lx9Mtx3Pk5>& z;ORZFm#_G-ISb!BfM2JSLpyR_X52SbOP-T1NLsKq=eu_1n!I^It}V!pV*X)Y%LFQO zSC6!A9(E)Qk9r1o_DUrVi5B<0_#k@v(zQ=R4OzC#qO40&otS^@3Furf9zuXDUk>2z zf)qeNaaaLzVH8Q*j%VxyNjf9*H!(?mvqMlmS+)T$ur~4te#CxbyYypTt-G#>+#=c< zep0X^AG;fp*M}Yv!_@?|OUs2d`-O!2j+v8K9^r!iX{_~LkZGew$55Q)SzH0o5 zC6aHMOca_TiU_7P0|)9la&t4~)e6yx*+7e-s%<@e2UM6|I78 z(}9D(H&m(`2dBT0J>Kts$jrk0Q>=!N)H<0V&F@#TJUVp&XhosV?%~NX;bS!=% zOU15boC|%du!amwybvdU`B|^+xKND3oIY=L$(tCx6Fam!t&NU3t;n5eK@F%gG5QsO z{SRxxg_^0yr;Tc)qt6c>zQ`arG-~EpK6|yqeU@2L*!HGqY%D0Da`@f)6{${;5`vAa z!qs6zLUZi>*#>KT@+`-+Z5-Y^tcV_~o|#Fo+d3Y4K`f~_O8Fd)g*-#!3TwOsxN*(q zNjw4Ta26<+cpzy{ZqDo=fjp=C$oYZ5!pg|#i9>-!MM+g=#fs_37e+?)I~%5Au6=Gc9O!?>J_+i-7x;nfm0(m_6oj z31%lvntULGf@m>&9|8*%FE8&G?ps)E-v=MiJ-f1#S;v2lNw>utyixB<1P_^+6qQX0 zC)y_BP*#TqYuIxwUG(yKZb}fiABu2^Jmf6MgmU+pc7WEk`E@`(sPR!>f?y$!Vk?kD~#vUBN6ID~oTk|pGsxxPg4kBj7L9URb@quaIUFCwq0J?nAJIfG&E+=$s zHsUw|+-_+-c?-QS4>DuRdSCqk|H@0t`h~x4+Jl?9J9n_hXt6W-mFg$Bmq*k@6sE4* zDg)Y8NE|%(V1H>>r0>jQbxHKOe)S`$ZT~>=FekIgn<3ZB`rT(ooC-uEn2Ijzj8-Uj znQa*`Sk=If4pY2Z@sPMdltMK}pw+2f5KNfLJJEwS8-A+po^@a3){TX^=d@Y9m5DhFi4g>-D+N3=5Ot6e*FvTf%e1a zm+K9#TSlTiK=(u`UO|jwV2593obXn<(PIt0!g=@U_R*9k^l#5~IlQN-4t!RJ-X{tx z+e(+YmJ}CWub6%ew+ratTJaB}KA6Q9BkIO?+gH7!6QX5mMDl;Y57eLvS~^%Ad?TJ~ z1+lP=52?UD4Bi%8yE(0CEd#xrkiOL`4jj|^MbJUA~T(0$k<*2srt$QCZ8cfSUc z7j;g=b0%$#_Z`PO3EXoT_(U$JcVYu$Z#ZByQ^0Y16G)fKS0T(r{Y&RP{1khQ`1ftb^ zZO1UEwFyr)mgSj49;`hHxzu5H)@V+ecRl4#G@UPgU%WfNy6J;xbBdisO}hLJURc9E zkq2D;-dF}}bjmlHC}f)F&C%dXh^jHAM2(Jmdo^C~5X`UB={~#cDl&CP$E`FGo5-|3 zfoWUMlu`x?Z`(VKutsWi!Z}a(H5)wP{$T%Y*AH)i^9XC}EJKx=-WEK{6U}T&d?A4@QXtqRetbVmRV!V5m z41H#OX_W9W{-*DHaGD*{>)HmE@Af_%h&g!zwn|&JJ!XB?=ON2D6*xk{=z+c zGXKyUqQ`Yn)fkRaBXHxx&*iWpWXN}`8>R(g*Hi*skMGI3rLrbBoIHF$>8-RoL3dLO zk!i#QvlFEcIV}&0S0XypPXZ{U3^HJ}y#iT3Z;#_La=S`phc?=8&@)T$VeDC!GAS95 zFNQfB_?8TwV{VWDJT}v{4sdb8b3&h>v-}j+_|QF z1DwyXXQ6D6qLG{lGLVZvl{=PZWXK?#+n)~#Y}ihZZF~=f7+|ke#c;C;Yo4;<%|7<{ zg7uS&TxI;JLH3>IC$J27{^r z1^i^Xvk7!TLxQ0N{!d;F9Ey*Ie2H0m`ENmicYfujJ^xEwJ7Q)!deY??=7a2FA7%On z;{dcu5)Wa>JC<1;BQr9HiT5hP&P^6a4J;P0schXk6FlnO_y{p8cqE}RL*;F`z9k%T zn}B_--Z()qXvRP%Hk-RbU|g!_l!83EguLUeYV{lr_F;WLd!=)Jk|j`c6%FJ1X3C*^=}|+uh?>;3)qnxr=t_SH&r`rghFO$l5e& z^IDS3ZBL3&D$#PUjhNY84v`dIT;@w>3tv}l^CB^c7MU}H43m-Ru6BGt@(HM(dV=u< z&k46vfCMISoZhLch7^{K19+SLn6FA@!x5`r;yEq2w-kMvjxZGtvly8Ti!T&X`1^=m zw8PWAE_+c(N60z5Ci&#W`xufAeh4S@17D?-RI{nDZK-+meHZtpE{b8IZUv2#u}uk^ zG%nc*e7Mt^ITg!p@6R`w@4>Ds((y69=ygqr=Yly4?8G2qQwu8|D47?$(MJ_tq$O5x+i$W&v!Hf@sGXcV_yJ5?Cxl_t5wP1wJqDh} zhQ~(HfC1cV+83xxc;eSHizTP1vH_1c@+ojF83O-*6Yz(y9a)c5 z6lMnVh{M`o3o-f-^RGP$6p;PxNkT2y6NqGIpT;;M9)OwE zBLg8V4eW=od5N@nASaSQ2wfz63hDZ(jm%sZ)AIQn8##H97fv}D2!53VC%2CufX`}? zaSXP*pu?z|)NE^4Hpdw15FC-d8Ag3k4}b$%v@&=rfd)Jz9S$HmoIE`Xe>WEvYPDNP zkcJ2gE-Zsy&5&3o!P1zQ!lQwWi6{6WmegE}2u9=^6evJm8d z{=n75@5Ktge_iqpdQ9!nStI*0xC>##@`G+Es<4W9xN$cPps z4{*VN!_k{VBev<=G3e2xGfzus+U0uN0g=LrRUzKCNgt!u0;#z<3Fg(rX6)hG6O1uf z+4#Z;DIY$8Z32!&9wMXC&oy@(it2GL*j4=XQ=rq8FPE=e*rU~ATF0D^023SG-vmEg zqf52H(WLZcNG?14drTAo6Yne61DAa-d&Z{G^9#G%ou@Cp7^O?C1&1-E5%C;D5WI0v ztw!w;VbXMOP1{Xi}Cll-)E0&DF23ko%ztT(tA3#PI`#pZR z!$XJFbN$O)eS&)jMa198Zwr6FM&`?xvYjvELV4i?K zMRK71s8$R@tup-u?6Zvwibkm1yb+hH0H+RK6L^U&D z{;l{UfMr^IW?b z$3Q^Oxw8&VWjRC%BE#sA39s)JPLy^rYEeG!EKxG{q3#@B)D=VSL;`eRRu@PaR?rN| z9$+00Aq3 z76v@tu|y<|3w+f?Z~(Qtn=q=i8$$nYznSts&iDk|TVqI)WgT;5@RG-prX#ccaC(u# zVP7o`rm7b1G5Iv2&U}5S+^Gy$W28v$GbSE!a6yuA?#NSfn=1HtBDS<~T1U1f9$u+@ z9@)<6*2KxRha!*QBpub@Kyg#{9y8F*vcypakrly zcy(u0L9b4%3iIv#gVvyJ8L2tP35?_3n(+XuV?e%gxwQ2Y(&BAjH{Up-mRBhzF=jcB zGm7O3OlgyR8~#Sz?ymWsacef;RBUfXPSvSo&q(|6Z$TUk70CftJ-2rA-9Cht#_AUJ zeMn2qk(CHSD&Z~d?sJQ*`e))O1U}{ukZuFaHjW zILY`ONm%*Gbb!%_0r?<~@S*W5z)c;k8R?;=BxIF|dR8#0?v8CzCvP|r-aASc8&p_# zYqhTBV}^|PV|JcB6=8D^{x%O)6(v{89he^y8}TwN$MccS+Dgumx&D`u=>ui{S>bhH z5M3Ul`6fEVbzE2>uj|e-ol-__uJ14Pjyhea9$lP@lJo0u{AY8xDi+=J`Pz+aDZHYe z>VvhIqA+Td?7y^TGUs1M&%}RgT{wx6q`m<2_@@yGqGf#%k$9c&^%Sq ze*i8}P{TnUH-G|&K2^~%!x)pq()CWM{V;(<=DAzy6KFcVmSghfN5%MBo0)xopM2_~e@-dVK~kob~& zF-y}!{&hq^*_NBeaiiD(z&W)%UMv(u#C&DmK$3AGG#?U{W7h0j%Jldg!8eHZKqe*o z+VrFMCJ&YTDI)+)7+4c@W2i!g#OSc==B*?Hj@j)s&pb1({!_igyW-i`CnnVg8r)$L zjPXGPvJC%(CLrG6XMP33636#KL9#X0ME%1}uET94HW9X*OSalf&d)=>eo5IN0o(5( zJ=9+etqQ%NUhr>ZSwe~$26uD*pKYmX06o6ew-P=Fta z{gR*?Fds#0A%_WpQa|dVW~09R%=;;$UAv;-54Ek4-ZT^>pGxzGJp725gBS;ljpOdC z_}ln|7R;+a_M(Q*^Pd*99N_`TooFel0_}7kT416>Mh(`ut#fC0Rkco2F}Ii3UDL7G zF{YuSF}m+KV$_fLH-Qe*WC5R61OVKVS9QyyTfRv|H|1uUhJQ*p7x}$dq4pkop%;tA zcS^FWKD-z>zPpClCZ}Ie^y(P9%b`fvGa5@eWZtyB->gItQRO%A^wHe}K2ddx7fE08 z-pxGLLM??!FgJmtn~;DBQsv2Pq+rd-9F15Zi{r`jKnHsIn9G5=$wg- zP}KB`o`erk>+pv>-uIXOWMY9(X8nAZ1QN$oPEJXxuzyLPFj;;|gQY_p8Xr|TJ zq1?Avk5rjP+{G!gEVY;ea%unYo(r&34B#&;+VhdJx-rnB(0IQPl5q(J8L>}G1*Vd? z^&W)}9b2ipx&)W3{KU(PO9VLUL3%dY1t$C!6?DUiI7MY1g%!5C(SD4Hd4A}XAs(fCb{av&w|hmefR!N$AK zOZ%toXR3{;Ysq^=*oAcWGAV33oYIq9^f2M;rBcvLU*edH@*~KYZpK{ZXJGMKx_mIw#R0Ktwc9?BatCY&;ZFK9& z^3@W0+LEe9@b@${sJfsxYGiu%@-u6)l{^nL>eH8^%lHx);52~I63W*Lq zg=R>J8E?e1i&v5HAx)lcbA@e!Pfu;`l$gRkb-2cxRP&IjQy!VlHC;Yl#L}3ABxQ!G z+GTlLHQprDm^+|sa@5F5r$?KeEE-fZPbf%QRriQvkdu>{tfFcw{xMsWrZ=LF<7<4&u*+g05%!F66yixo zi;$N?XeaZ2aE{EGZ9DStY!)}eUiPIwgfE55jD7YxT6oMA=?lRo44%~TITj%S`H;V0 z_wv1nhSjeQ6!TA?bj0)|10x>0E=c9QzT# z0(Tr|MrRP|)3+0bf*-@qu$tW{a+c?%5>+yp{;V8$`o#Ig zh8JM_{Rwz(h78({9-*o+fjNXeAJQNs54C4u8bpX4+<;w#dWkgL;=$(TK0WM0%fEVPo>pB-UxxQ12es=P?Mbft{32u0E0SpjJ5WN=&D~p{$~&jSk6T9p`dq z+x<+dir<+dRxORueI)Fbo(q7D7TzF1+2#iR@qN1e4|RuoT$aqyU*-*7Nvr%;`nHn& zH{|sLL+tCUFSfDc;doP*3oOL0FhNa!=5-_I$PwX7oqHv#-C|z^d@Gk~$J~c)$s2@W zH%`uBw)MoEgQL}MwQN)a{Z?KjrbJ-nd>7NOg9;{~1cl)!k+Z-4wIRVx<7Av-`QBYN z7O|C{)-2*8ZwE_##uos9b0U-6$7ptz2eAj%xXT$U`uPn+7?$XEzVVYroxN@T#9HPZg-z0Uu z51YahJt1vIu(T8d_`uQ zj$3wWrOO|>7X8PoY!W;M>Bg3%&()4;SR_Z&_nRT;fEMWw7kKiWGjRIONZ+pkWszAd&R8Uqu%XTC?Shy zQgt)txXb4cM0*zTB0U?-RBg-CLh^T?yCyATdLL`+K7s#sd@lN3R%+PR>LNho-tGK{ z562mLF8sSz4`$&G2q5SwExiRR?O0H8Y0Q@)ku-z%D$MhVdMe*EJfRD}coRO_d$={zvminUN*IJp28eA+qBe;54$!8_cI^h^ z){zFb`Go>Z76~&mT06tg!r#iEwJ(DO{SZ#ZtAbUop%@KfYIa8d@#p=n@YN-x8}ROI zH_J{VeO2b9UVu5;n!s=Km0)Ol!3v>~k@Wq;aK=%%;Gl^9 zLkGZGnRx>658EC9Cm%ChKWadu#*c!K4)sF4t@v*s`Sm;I@81*l$G-ig_ZQd0kY8%o zK*k2xMQp3}m^FEzRYM1VEuX)2%}@LAPbT%LP525&-VKJ$CLm4tcSk2}P8qwkDO(Bn zEBx-pugZQD^x*mgoZo+Y!9UCa%n&HXU6p=aw7~fz_&0vDAfrV4kMH-#&TU7DGyK|@ zK%C_N#Ib+o4|qDk>ylR)jq@Oi^&ZY1mkijUr7lo#O}LPa?Q8kgS^C@+MJg91Y>ija z`QS-@`^>FRb{@&ra>%r+#X7vWbj2t!yf$~`B5*k+y9XTs&>Fgr>Is}ykLU@Q1&j+_ zX_U}AFbx;N+hsz16lP*vMOEsLdGcnHxP^U$kll#(&{Rk}i-^nimzm@wsdCwTevitT z(hR6M1A2Y;_SChWCHz@m4^UTIi})8ZVhhaT4u_4dC&?048SX#ca(LXpWO#A`rQ;fd zKt56E2%jQ-zV(yotZ-SQUR;UI5bjH7p39z^H!aYCnZ;z5o~fTq$#K`qr=OJOzJiWp z=$Yi$##M}O2hYmnHp1BQ^|O_MmyeXTu;avRmyibz*qi_wO zDRXhWL?5W->~UcWes3~(>ARf+pmeGh@)h3bD1zLX^NZcL{jaW>e{<2u(@fz*Xz6U- zzV^~rcu|F~{+)4HYezT{doyZ^%Z0Ed~3`4O>{N7_Vu|g$A!9q$a8HS^f$P~UlodYpPkc`*fdyj zNKOJ1%vbRXZ@TVlc=5*tq2vFE3ViZsp;?f-f@nL-RH7>14~;eYc+{S>Wo>^m8WEjR z(D;Xag2;b;o5I=D?;2PxKTCbedw23jSW+5TJlr`&_zV)KBy z3j*h)T0QUqW`ikIuURCg2uc>xUK`(IX)l-klAgB6Y1t}Abd9XOxtjbj_iHY;vZv-U zu#WRR_O9pNqR9%qB^zW29J7s^t&md2o?|`8H58@WiAv)zx&F}A!BPR2K>ISMd4;eP z_3K%`(~1|sH-aEH4@%&Kc0`T1jVgC}vS`o!wNJK*>J|oPrFm^zuI+Go>t-2b3pMK0 zP*|R>O9{enBx>So%3?sxp;Xg*MK4|ky)v#fkc`TNRc@^pl&{BoAWk{4ghSeNfIv z<-fJ@w`@L?eB8^0e5H5r8Vj?6?B0wNb_DkUn?L=3$b6%j*(h_oPq2ucwmRX`9y5s)GvB?Rf! z2#As12_%Xl1QL`GNXUI#XXZ_Lv);V5X4YHptu=p~bpkn%_A*6Jj%>FEjYPo860$(g{&} zKtEeFwi#i6q?nO%TT8kWSQq{M#4*8{1;%E!jO{zYDdX&=WS;Wy=wblbqyXIgpll8h zunp+r4&;@nr}Q6pv7YJ!r88{+jGx*)1`7XT4uG$JduZtdtbyNwp^o|M3k*Vw{sJoA zdj>HyF=%^D(er;F_J8Mu9GOHpU#NcK8Dm}~<_{xPAW*B&B0VH9G)Fu+Ijz0(~YNrN*7}=B`O7Z{9NL13P3m-(t zV!rk7;athjyQ2#OvG)pd^eWv0$2aGRG7)l@l=e}dcFv4iR{M?M*Av=cVcT)?< zJYP`SA_Z5W7(BXSzXi+0hJ?*bgtfVO6yO=TghWx7KxZ9igdyX^HRQbV;QiJL6{ZQO zbYq;rwuwQeoe9;b`f5wj&e$!<~ z)sXIor@GzPYWb<+?H+!Mu43p(`uk;o&}R!F+vXf)9j<;r8@civC_iV%e7h3&wcRRE zejsT5D(4Fx`K0Wlhm*IOd3kXd_3(lcFhn&6bHvYe_1<|}bjp%rP1DKD1XHbU;)3aa z9oAdm`b#_W|Ekrq5E6@>XuJr8U$cAcfebidvfQTY%KqM(Es;SAT&O1@M7|% z7LBmotpD)o66iK7OGB^bPe1JiPy(^d2N6Lenzia)<`q3FI$AG~wz+PR0TYH)ci+VK zAL_9$oXy8>O0Iw1Sn15+AASM28Bdw+ZsuAWHD;KY;94v9Scyr3j{CV@A+!&_jj;I1 z*7BuYsu~+D>F!|(XhW)0uzTirIk1{lIQ`>>w9n#xU z!y!KNpo6vbeGsvn!vUjRwHa9@!IR-rbfodSzGWXmdW zajTSF)e>;xVwC)eKzXD>d@B}^Cv;XOD%wecINmL#K~v;Tv=Ln)^0HZo>cI5t2C)`S1q2MIDIkl(Rp8Y4VRgCvjY>5NQK2fVNQOJp9%#(Y4Y) zh-@u9JqcmXm6rg5D7=q5G;zE0V)}Jr*j#-6kl>L|6ls%|xD>x7rI81v1{H9v(c0yz zGl7ylSOE(o#BkBZm-Z5B&z2o2s+rQ(Wsp*n5r(PAG$YLX>b?i1Y%}CQSxSFT(R+Ua za=*3QY)&R_0yNO%cSA=t4#EA08rTHr6Lm`8XSS@ilWNpuoyT@{BGVCUEqYR4ZgFdQ zrl3)TeUxQ{Q}0yAk+sy8?&~18S^t>*lLp=&^yePn8p8GG&BFUO*2(CJ-q6zF=;^%) zgjYQBS>_D~)tjXz0Ct42jA8oPXXeV(uVFw`4d8}~QPbw3Riv0gJk55bDF~a9qfn0^ zOO>gCiIB{qU*P}K$XgV+suzw79&H%0NeU5 zs2Sq5+uiq%j~{J5KxBqc z(Ze+>lQ9O&Yw05jhC_`IfAVexCDL_Aa(#lBg+KnXoh;T%ZxOAhXx?laD$iLi43vG2 zST`;QAV1=#1G^m(dkkl$y2so4dQdukqSJ0b?*Z=J8wsyRiem}0!X?gJ+0y*O1%@XY zbnYHux=}0|z@qY484~GL((NPVc4m8_!?Q<4$6`Nn_edR--Wy?Glo!3cyvb1g@BXwa!QQCHOG)@CwSwc>IQ+=vd zqEATC#Q3z^uhOLkKDq-j($BEk5`DL|sa`B@kTh2(PkToat~p?BUq`!!5kc$B z#rHlocO!qr#AXFO(@qQJW5T7V?>=O_{$_GC5%TDl{iQ9{s!IqOfwSj6-HVY$k0DSs z8~s4kG~0HBEs{4e^VME!aW?EQOvw1^jpxRe2-$w}Lb>41nLA2P7)PjJu>pt^=y43{;kiar-ME^G_bO?E8hKC@~YZe4RZ-03j`EHWc4 z(7anE9C=sZ%seC1%pna^pI45QYlMYb^xJo)7yXvL8R=v$>}Ir!>w-kohClw$9jGQ- zfoyKZsN2c~zJn^e$XXsKx_y=T;}i3ySK_F_-fbp4cq($k`4% z2iHdivSqrAPpRH@7tdVIT88>!#-t3HBzgN7e8K}CCX>B%I4xI}@!8)vo zf%|X3?bq8>eI9-0R*W=~8U>%crKW-{LYc$FLuU&})v&g)ntlD@V%ITzx|h|N?q>B_ z?+KQ7+!y#5rtDh&5kOVxlcARPAGu_&6#jLq5TFAd&KPu8pz1cXLBF^g?R^ogPo=Id zeZ-+4+Av))FKeIam1J2%&j8QM33akE$XUYD0ovfKe)SxmwZWif!xKbnz3+>BxMX1k zS;fG%F^*(epRl}kHH93kzTYcOds?3S_-2$%(rKs$M;4_H+e+p9;3-=+^Rc1M75r>% z8YDskBg8}+MlajPoT(qyKzwdwsRhX&nK5&iI+P?9@4 z>?6#WBDPDzh^{iDH!)$tJST>d!5M5!WZil{u=^=Kp7)60jkpl|02ya3c8baNAa@b{ z?Mx8L*+w-0%-wihy+USuTRkpiVLi*79Uj=!$&2@X<$J5ZCi?wskA&c9K>B*jIuYJ8 zqrVl~f*|c>8xC-Gq7)b&OoL}kFSk_k#V2#5`>UvAw7JKQ_&#JntqNRV(-zlb%vwA8 zNx{=s%}wMbS_>HyzKyw?bq>Wlt4HX-FwJyB=gg*|R;I3}A6ZoZ(*EZa8N~?lMfhorYvj* zvfi^tc z)b2u%i+Y)1q--U3+T^~Cs8^zlbi)6HQ6=0B?}MAu$Z1Ol#acUH4iULr9v^kMPi={xsI}>=!Fy4NtNrJyn4`1`{v&& zam*&l5g*)QH>cmPth2u6*|CqQ%o$s5Bi~QmD{lQPu=;HSEcwPcv4WxDb zxt+Yz#kpWg*znNHjs?{!W z-}!zx3#gq-1>yoKq!bnEgSU<@`;&j`FTwSf7j2}rPk1FPv5kumPWXsGM4uHi_5;D6 zD`7%t-NU6etb4^3!dS;*zT_-onBqu4_8V=qbWKw?8OqQoHeLY~TGxIqsQ-D=hmG;F|Gl_IhIIWkpRtZy%ErAJO)S=@fE1N>do)K+$?+pvwD`(@tjTk zpZ{fIg#jn*53dRt3&3P@ARkfCzkYlDTTK+mrb0c5vtts>jDahnmTO-y#G)-gkp6g= z#h>^M+QClT#hIZeZi!5T55!Fc^JqQvZ{BwkIZnSxU}Fu^?9NWYT<+(1F)_)rAhLP} zfWW-aGEl&9ZTX!`{2W98ZA%Z|cGK_8g zH+jo>yB1_C!1#YRs*~pvaom^@M}G*u6$=l7X#OIp zP%C2tpI5zJB}UI2Eg!glUrmlg*6QR;~UC^vw_KfUg>_HH9dU=v{9kRdFbN z^6F~)_`}X;`P{C0+1>K<@?X%CK~Wzuv(0|YNk$MIaJb#Eq`fta*K`=R=84Cw=i)gv zz~1AV(0%9E?)){$XdL=&3M)KJ_@TIH-ph>P?CzuW&I;Ub-a7{K1F9SSZ;V?ePu+9Q z4d2+OCo@OPKb4lh*Yy2`&&7uiLX3dwfo54MB``+p#6ZHe!I%geK=V>CGTxNdNQA8M zT|?($6^-5#hw<3H5ZwiYT+f}V9x~-qPe}w7T1{k&8qAWYmUBo^@0nld`KKQ0@5c63 zOt`^Ev)l@v6DsqCVV;4a_G-@$RobahZ@z$^s7M7Ou!^YL0!ut}RfY^*zxu^=ODl4G znP>-sc#Ar&uiMQ?*F8R8TRo`hT$Jp1&*a0@;frU4G~WhY&K?CTzPRxHTeXhJMd=@u@Rn%H&suXB6=fGFVwR#k#t9FnCzpbHW>KCY4Bk|4mfQQ}cWvjCrRZC|( zk6f9u|Lpz-$vcKJ;P8o7*9`hxuEsx})la;=AQ@$sMeZ31$>nM2J^Wg)SHuZ0SwFq# zgpL_AnDmP=tTTvHkXW=A%ih62JF5AxLz@aNJ+pMOb&f3?HI3DxEvq{w3HD_MBOlJ4 z)_**TnXQCWBcq#-PoenN$zj-2pK{7IcpoPhkeVNO6$y(krFzG2dlh%7Q_(p4c;%kc zvU?_&fOWm&EK{6y91W|Z!LaC?H`t!uwN<9i#=g`?mlkaVD=QlwYJ+dD(ztq-m2Y7O zeR$Gpv4KuvU-Ggtl~tSqd=nIP+!H`cWF z_1!XFF_5=G=wK@9Am#gGhCI{DV=j@YJW4${pz$LjR!OJ?eNYSZD#fdmHD#g4i_|>O#@gBy`jCob14}|D{|fy zu*Gsa05==xP9PB&5wrqDd1d#PDz*)6CYkcM&%mVVgU=;g z)`)Zbm;d2O^b>f>z7xsRy4%^z%M86*OeRXBtly|P5_n^;4yl$SadLaEQs$GA zC63teW7>e+&I>v|NG^OfOA=?B;syho_FeZ`yB1?Qq#Cfr?`ZN% z#^|fljM^K)iigM!J<;1|1rgt@XA3?@V7!s{fL2b7d6&^cpD!zh*N?`KYnYaB8o>lN zsw-ClFO!lL7jhaapgy##I_HrxTc7vzWKyXxk~0daeL(DNiE6>Uh(W{Y1H{>tIG;eM z$d`SX9U4#`c!p$RypKoib)RJgZLQVmnWnXRg2F`E%#nfPQa4RjpF)aBI0fn&Es>!% zfYuA9i@&kk)Irr7#T!&tSJn^X_%7v@p2XKw$2rd1*jc?#PP6DS-M^onIL6DEsoJV+ zLBb{^P_Q?YE)rjWDnCk#ayC-;boR(nrfqf*aJaS|j_7ZkKhp z#q??YG(F(4YB3J4-Mo~sG(wx)Sk)K^@w@l!K=ZfkK#!>$bMrsc^Umzc^x472n+aPbDrlp=knUZ?Di=(el`#Y zbjrx^mK6weG!q13&OdPs_zmuKcndS7p?F6tCP!N;NRr?my z;FLXfeCAKVD6rJ4A%D5l3WtPC@5|eJ_BYqGH|DWc@_<0Dzl|?h)4J7NuxnF$122Ox(+*$KnnsOE z5hcct1GBw4Ho(Um&%P<>pb&OtW20LErpEMdHEqE!%>F%qehcQF{qN~X>L~TIJ3i#1 zcd9eJO4fz!)!MjhD&S~617!w{ImeJU(!2noZxOw)=C`m}iB>kCL>2p|5K9xJ<#! z@yoL2>7)L~Tvs+(FLSYt?Z%a3eiFBxSK2-;h`Bxx31E(w0n9EE?V(#_iJXT#e%uLX zsZtgg`BvVb>Fp_`zj)M@4(!nXysKfr+w3_w%h3m;C*~{@iFRl#CXAqC&Zsesp@FZN zje(v~voyT$-*Q{T{%<>*(A=B_n4-;f7P83A#&YEX+xjP9dqrf=oftcAKHe|4Gazbf ztMD6U#`HUSM{D_biPllj_?39goDwX`pK)zQ=Z-KO4tPxi zEB*J-7TgkLRV(M5XXJ0Mt-G@;&5x%9Zii6W2cSXUDfSVh+ zn{>z%*39?cllHf#E5}boJelIj0uKH;%KMTeje~Zp-Ea5U%khe<80Jo8G}Uri}LMKD2)k)M?v2szf@R+)3*FfMFa#7hQ?Moj10_<8XG>dLrP%pkqxIS6#EW2LhUA zYQH(?J3IxZFj{<=A3l&b7dX<}!wGUIFO-GV&R1drGaT_L2i+?)w}~WdRYUIN%u)SMth9U_~<1xKfPJZ&XO^{&o~yvDFdgOC2(yFlQ~aRI!|H6DU}kQ+vsCG6bX-;9yL!%tmc(>i5Ub2F1(!cOgyccO$df>+QnATqV3O^@uk6hYRuql1^)az%VZ zUb>A_`0NhbqD=F@t}bCdK!4B4kFV6ac%%z5KE%%mXU{(v#7a4-{c85drwFm-yt}z{ zYj-sJa0bIzwfak7^;KZiCv+qY6X)_{e?(6?`;KBU{f;V6UU+|!H`c|dL4EpB(%a?R zVTbPzF=7U>4@YmTefTxixc@w&wW*)~R-+&Ea^sUJnc4{>EqcpA3VG_$^iE#)R((KN zW&jc)p$GidNvqPKWd{ANVncRGP5O&$TG;5u5VAFNI@+f}c;|8VicfD!|Ks_Fu7QL5 zSajIH7BXXZsC#v+ixC~cx z>yNf>uQoZk`fp2U&5>?tRXVp!Kv9X|2g~2Ieln-qn52&H2T#pGYopu6hz4piFMds~ zk>~=gyJ5&bOP&+qP&#?KzO9@d=1$AUG;Aa2gk3dAert4=zs6|V!rqYilc9a8g694~ z?Zif5x7HT1vVO($;N8&3kWV7#&9+@C^|EQYyDS(yw)iBw5cI)Xo)WiK9 z7kYDGrtsk^N7JuQyXd^qE~qCYKmckdv0t8ebG;uqiH%rqnkHQ<%975cds7o zuT5^JD218o#M5*}N2zs(_~-KbPnM7OJxX0Fpsrlvb6WSHe?Z0=?vSai591nw5tp`q z`uY0fMt}89+@22#o_LU-Y-iiJTwB~*UC0hwd3=V&(&eBp z*$-N=vJ#Yb)l6mtLEV;@k_lYE>sTeSb2A8~dZ09erJ)ixvdobxKl6YQ%E(oGqZd)u{ojefse4cQOilBCOq%ZL6k(Ak(R&WE*Pkj*HZWJ7M68s@9mLTgaRki} z8d*0pSL}BEhG|X_S@PU6m|l$$k^I#lkrlAORuf8I-@dtCkl36Z>RyrEfX~WDNXad+ zW>?)?UtjleN2J9HI(X-v7H$A`^2e`k36Zd3Qt;ksb+4fl-El|pwjk|_?M_dvUnmIp z#@`$&+nYOQ7b98^q4Zi*9G=WQ?{l8n!>gcwX;=6MsuhE+tG7mlTOuK4>Z6Ndu_qnz zJ`Dofh3STDuW#kX+dgUfwIeXGmPV7+%NeRsSSxCwQZ|*rZ^%NBU3Cv%tw%jxsy0>f z0;3iF3*kqfKev=TSJfXedwO>&)vT_oMz@kjyW;hW=RvNG!b;w{XqNvn-drI|(BEMV zpW&)Um4$~u?%d2>Zm;F6@q04=Vbg3qmksnN0rhVLS-)nY;#urk=y5- zbhiF|zrxY?_Q#NCWzghYp6NRgMq>F&?^l}5T^6A=`%1bdPeKLT1)2Vl;Up4 zH!toFpY7Xp_BIpCFncnMoK{gVB5?AwGZF=q>5soA?b_OVYSEy5@WBoZmnC6oQ8(8W z0U?q6TjuVyY(4V-IetlQ@}!X1VFAU!-tkyui99(u>>!0 z?9|C)d+J#a-H(En3~l7uQn9vF+%VgUg{peK+znpY8q>ZypjYIs;1Th6^a6Qoz&Cq;AOLsqWaNbP=$KoolYi?e zVJn!O%cC0hY>h-Hypf9nKrD%L=-O_1syq>YfT%FlmP3TMPI!AqYmk=w|Erbo*&M9 zJ_4$G&aF@~fHV7tvbCrGacJP+{x2}C&2y5svK%+ci>R`{xr6~A=Sd-8$|ZMj_)QW& zaxcnbWSocY$OP)-U^~wB`b9^c<(rPXDW+Vfa}K!xva(ZQM>!1Nu2aSYgfiH*osye* zOMQ>?$0pL&8;}UZTehB6qFX;RTg0h5QRued}^v^u0`j? z?QP!Ix2~LXZ-D>R6Z@D~{erjZNPNB{IiL1MtJN!FhYpwXITq=Id4kA?Zj==v<|#bR zCWqT9c(ZA)qQAEo+J$R85OnlEG0i^9`jtk1!^yDCzt{hTmi=#7_icu;7_a|VZ=+m% z{P^)I!_4QldDWsm>i~I^AY9%IC>W7CR{+KuZJvFXFJjh0M&>(UzghmRh>J@t@jH5; z_+I9xH@o9rT;bmIdt&7roKD{`BV1*GCSGbzEwG{GqTF1!1gtuq5(s$#S65_GhQujvr0^A9npDd9+g#nVu z2Yc^RHB+{gp<}57Qfa2+!mAl@hJ>NGAmjsNcEHIasTfy}jNT7~#hOzmuRyB{Faej) zd6(Q1PCtKfoNHghOso0pOPf>815#OrBpy{wUzySW<>+tlCZJg^o~ivUs652uaY7iS z$GfFs=O}0mRahoK!O?rLXE_8tzX>b!G047d(XAalA`z!~uS`{mjB&X!4lDi3h!v$` z>2>qi7j%JRY+=a#o(ThFkaK=!U;rA-Zw+JGIeX;gF`hdqQODiS7021jj3_$*+R~r= zQhPJOPRlK@AT2gq1NIqaOo{0i^!$0cG7vQGz1n_?HtBNHZ6Q;$qfZ?X^IwD@>FW7M zcbt_HuySzM843ewzq7|wcl)+R#P&jm?tT-r@DNrHEU-zA!kaLGo@cgvEQb38hvh7< zU%bbp4jMOhNs=;@m+cFd(E4jjUC^yEjzvxOb}5YX2Fo)_1CX^y&AOmV zKJ(26aM&C2t8`}ItRprDm>~_-1Y+<|(j!+05DR1^`|2P4k3V37zoIc3FeyzNCQyyj z#c_mRg->lNuM)WhnKD+#T9_itF_y4v<7neO=4?OUZZZ;7H6${Xz+5yvp+T{Z^mS?K(J|BUY?Y!6*0k|p$_0xP>uCH_=Hec;Z%F> zP4)Y*WSI*UHbVx(vt-uewh*ZGL~PLVqG>1&bdb??U(UYqyYu5PbfxeV=;W1NS!fVZ zKC3F@V3RrDmB}3w)xARL*7}RnQ1Y)H9f|nPE-j1UKh&$NG;mcfveQjho1qI zkardJvW^aGwpAPK%7CJ|D4t?C-t2*}wc!PzUpcmY@37fMI0fIK(lIo7kU7eV-TK#PLsYtP1@9FBmcd!B8bMqyc;miun0|(uy2yz_AXH zoS4t3Rk!Vg`2W<}sAo*O6VaU2YtSdpY*P6C<&E%5UeT+q(csMMJwS8>GDD5IheNI) z@^_ZX{aaDME&$^2RR8{aQ4OSC4G4QaMMEI9tnC}HL@_ZCNHaq%uvFvEm$S6j=1=naU5%)uS~j|*ed^b$VOYQSSKIJU`$ROhV{wiD1^bS3BFMVnP*E93AZdTS zQr_X_CxFt7!w0)UcS(VqFuSs?G5>PC4$uzUh= zXR8ulWDrdn`QYo_6-o>e4S*>~%MP)!k@=TnuG~GqReaMk+b_p@scjDEK{F-X`OvG# z-N{-?x{KC5Fgg+v1F?ZqH<{RJ8x(pDVcglkKCljLc+`8jGckjSX$c zM81JYx%yk2OX^KW;@28k?Nt~&ZoG0ebo_ueaFb8vh&I--q2hb^IysFt@zLggprJ78 zuQm&)ErJ|89R`iPoJrRw%%{jfVX4lcC1K0f*^jm|d|S5f2d6zNN_7bzpFDVR*6acG z4WE1vfeHd0IT9ucYG_}(cb*Za$2zz#lo%xT;S9tw|y%b8e4 zx#}eM|EGuwNiYqBcq(}hhIGjaXBY-Sr01ZFNby6EAv6uVd4|IF6(D@xlHMx|(q;sD zu|fVtJiJGJdQozamRy30YDYN$RPO9F0-pixFiy?6O>Q9!kg#4;SW&Oz@Lk0PWfH-kpVF`m#4)VnbThWytuKhSg3DO66(j2W~8=AKck{|ObpQR_Y6DPHuO?b zza5tWwYBB#-Of*&dF=~_nT*XSQ)!fD10;Ysk#b?0oa3v{`pSF*T{fTGe}YXX8mNEK}Hs|HWjwi&bajEn}4Q}lbMR8}SpOMuLc z#)yquACEZ-vtT=Rgf>VAV=A9ePRPiE5A~Sh6Ne9_4C&8@g_$FLcu&qcSn7v4FyFeY)%c3jK~Oz!BBcOQVFr7Hk2eY^r+ z{|6-*r;xw5fH+TT;=(pun}^8}mA^S5ot<$!FOJw+3)ST&yOl|D)W=J4Q?~CHX>mVT z(p0-QIWm@B6$@r9^D}b1GMN(I6i8RBQ@H!Nl--zm1ec+Qe!b&t8;aE&qSEGf#dLq4L~O%G98JNBSTqLsF8Xi z?h61%dsx7)-Mft0m~EGdZbQYF`IMrVQRg|=XywQ8-Ke1j=wOm^9qnzn6^KYmsG$Ww zbS^ETen`D2m1BqK8%g5VL{UG01&FKwY)zaXypAc%(Hur1fLe@>-<{An%bWt91r^n= z2!H=!e#kGmfEaPBiZPslqLi!EgZyds_Qz|XoprLI7fP9k6A3k_&3oQnMvi*$AyVUe z-!7=W(O79$yGp^$yUIKXo4*!Wb0p8a4+Bbf`zx=bfE?{6tcK8%k?o_)F~yr~3MHGi za+aLsCQaoX=Hf+fD)AwDjA6k@2-izV|X&)|5N?D(9 z(n&=1AYd_${*ZQ_V{t{($gUV>TZmAQTVl9e*ILP7k}MN==cj|xh~i91p@v6B1`kSn za*aQ&P%4-$_odAod0^8>$MI^h_tO^^K65*ln-10q2*beYVAe>dp$U?Q z>fx4tnVdXOFZMtE38-~qLOk%3G`bySR_yYaQFI*LarYa*+Y(Gk%B|^ca1|9Y(M59{ zCjF+F;R)fPx2-;K#|1-7ZnyI=*^Lbk2?cMZHOhL3Z%cOyVo5Ra$=tLTrU@3b=&Pki z3eP|sPgOQ(EG=szV8-^Ib>uKY0r9uA$!A~jX168lhdNjH>yc~;XSGk6?!3a>zX#|K zMgkgn?W1$iOeZg#0(cf$K*&Tm!-SHNt)a5-=qc_88ehWb3s8ZY{E~rJHgY-q9}iaZ zJ_44_^d;%pJU$aB2?CM9Yr54TU1|iujT9OXU@5HW{N$Nc-6-h}mdC(e&OW;wOJgk} zKf2*FctSGvx7EPN@W@$hgjqJXc7tgDr^t+Fsx_CVVO?Ss$L_dYa&?PcU&k_mLV^p1 zjw8VNr;ah(TH1E<0Sw3%;OSpe%w(kA+CQ}X0&q^Y*GE88fuX+!>uN^c-7=3wp+2Df zUZJLEXMFV=+V^hC$ey$ZJ9NUj^lY8WlP7&F%wz~n0n+Jk2NTOdBiIkRTc*_bJ(Pf(qw56U58EM&ZN1tN? z@NVSfGe+gkWN}hoEI=u+qD9;{ga4lG=!IGowqD?8QflggZF-rMbu}f2JyWUCh%jHZ zf44M(SW@y@icgn_xda7E@?03LQ|GxT48*wHC2M`}v9bvL4|Lzx-x7Tr-7j63y#Z7n zpTG0VwT2^y(F%8LKdzC7LIIs9uaWmPaCi;%;5{QmedyTmNLrQGO^?STRD)}$&?g`s z-fcXe<=)N)g`tA=jBPpz=B_v0M$Vfwlmu_dYD9HrkdUY!j1XwWUE@YPBj9Y~$|Ejn z_o~@b`KF)V?_?PCVA-#7>}8|vZr8VWRbA`4Yh0j)TWev<>`V5L_p9s=4O!yRGq01> zvv_!4lwZ}NU}$mwNm_sWvM`toM@ngbwkxsR`8eqL%a#WN0hJXWP{vMEi`v$6a5k+3rIRB`}ITWZBhUFwt<_O^2cu4rDVAi~c)7<(4* z60cpV10e3&-HoPN`ygXGamzLFJae@@t<&$n7qI_T*qo3alaV`Nk9gckJD==#+e{jp zU&IXv0kaVOhiwcDGT&v3^s&Wj>=Zn zeL)?d=YUF*orBM)CNnx*bH;_TZT!qz9sRmTaS+M)nrnLP*uybq^+%7Y1+nG{;ByIUY|j^>&yUy1cqdt3 z9iywRg!b{Q^W0i@T2y@)w>j-;RV{d}r1Nr|R8;~|bj2+A!;}+op1D|p5YeAH?PGR0 z<-4+yKcWL-I7;R%06M8J{)`qD;ucHiR;pLy5oCo_=MwJA`(i!+0Vo0L_;xJzzJD~& zTn1HLZJJ}MY=C33sFTAuJ5IPFK}m-%pxE~G4MK&Tlao(^;g?;+$|i1L`W9jF4g@|^ z{3N3VN5^GYcp>9DajqgBCZkyL+fjZ>TEnTO*1*JGhoQS=s(}rIh@}Xw7ZyNJ7?T6Q zY1Q*S^|hO-dEToN4bI)zrN;DdI~SKV%t_OV(;+ov2FeS7Mr)|He$RSh^GPqCT}VYG z$id@bmf+QvHgKAH$l68KDBl3Ym#&y+zDj3n-n8owC-~K`+}(|nsajfUUHX|AgD~D% zE46so`;{XDUp#)l4<2yH>l~W@-PV^9kUzEQr!T|J=xhiB3doUy0e?F9$R$Ntu!WEQ zeJXmFqQHbAbDTE;H9mM-7@@4Jd<2%1G{ekt99o^EjQxuEL*mG|R{2TjaYJ8L1pYg3 zr8h2x_JNpmY{Kvy(Npa~r7jtHr{z>7n}fGoWR6s{WTdn_2dQ(piduWSg`FoZ(~2?G zx|;TzaIe=S0U5H-JUrHKU%;WIMRDJ+z%x*nCz;XvpulLLkeGO~(K|9Q;A-deFluyt zn%ht?V(-uDLZL}&I-ADfdTMJxet|E3%XYM-Nz!Y`Fu6DO8l)y|YfA+nVXn>P^z^|w@W6;9=f;IhEZI8Vr^j*QOKDjd&=a!uxF1S6?mweCgi!s{~KOW}e3Y-0+@dvXxy0dfoOaiJ(GY3>JO#2ZD zZj!UuI#jS2lcA1yxr?*)>&H*I`={15s#&DJENXNEtat7Lu(>(HEr3>Ho?{x<$#Mi4Ctc;1EGpB(d0OFH1h8pO2>o=2Paxit@ zprY%1d`byZke3`4qd!D!)n}Px?FtfJf4DBj2bh%{8PeY;O>*3C5tE01X7Wl)}PwzB$ zymo&_Yx&r@gkgfw)chPHlOebl@N*9K> ziox1}uo(Vf$8;?0*^;>co4U-MP~7KK&Z> zO~;xzq0h;7&fXGPA$c-v^3%Ihbf4|@Ia*@&-WTF}s4CjNx}A|o4?~@WAJ3j?0?yxL z`1czNA8R2rKhMRphSK}3_RVB|(tB*f4YyNhBlw!BgXa~GTDt;#w^2Wc zuMV0J)hP3$rvm6|@kp}Dm-i%4)keUrk>MNY>!Sl)xW@Sp>=~O)?`r1sb;=}J?LCY- zOO2n|W@$z}Z_;unSvfeQmH7w${TYpv9rx@WSlV95j({s=v=^DkHGJ9M^Bri}+bq(; zpin5BMkU)v&A*>G8~1Mj!WM!`!q8d|cUvp6>@Q1p^R9k2+=&K?Ro5)TGh&PnB5f*_)4A%AY^E06nSE9pw}^8fyf;-ql~K;??%Hg4Vy+CX%g?c zaH2e-Z;C(n=F*|LIk%aH$Exp5dgTW{H&FF<|Hv#6Wdw1oa(((w#$x(FGiOQ)2a?k_ zJlvggUvZ>$?wMiMsWP_lmV9sDQu(?!W^ozq;tK>nCQvo z@KC2M$|RTRdY~_IGt0Rse(8wt-$*t-uK)ik5l1Vm5s~N^b4C)2Us5j>FzwaxM{VqTXXxn`ThOjufcidvTR9r z0Zoi*NJ61rAWX9z)vZzt(~z<@DN%@9fdJ^~!gUQ*@ys6&?p`qzu2vbwINVIAJA?5U zehlR1=Vn>Lxrr*(Ui$bzgI_A%Ptf}Ixh&c#Lw9haDcG_8HRohalsMitLMnt`HLufP zl(#_r`=o7>aMi=lVk$LiKH^b2bR?DzMn;RJ^P*hmr;uxbVlTJ{Bp(beX12sYJ)d1* zQA|!w_T_2w=uT;9GeGp;+~|RjzaOSC-2jz4{gViSGd0W!qOeY8}N*OaEp?A8;X_KO{VCNqwxzI@x>id8I!~|+ zngLX!5>YMQN<;B6Pt*gfqSlH&OW2Kx?xv7utHo7dhPeX!RUzOWXNL*z4ZDExp)E`D zz=x`LUeXe%;~wpKJxNNjU&bAO3}@(ml*oQE#G;@!x+uz`+zJ4Y$vL))ONt~Tra0yc zgZ=oesT2bTqsuu%F%QzT4WGtV<_WJAPCJJuULfyTqGr&`6 zmQfp#ML>gkE3>dJliM-kO0!&`n&BCnt)Ojl;p%T$F3bNeLL{<*@e7N1%AO((H@Xk zwYBEy?j1|dn`@S%QgL6Kpt7Y;jg@1SYHqtF zqVOe`6AWY!a2}j&QKv_^UCwY5YLKt>ufD2>tRjX=Bm3cig4s}009k?Q1MJ$Cv%?xt zVxxsGXG8H}gC|N;Qh3*JlmZb9(47lL7^!w_c0>uP+zW5QW6QfohQG-Y1*@)oenTDe zP7YfCq#U%^GKcM7oY`Cvnu>kx!!mG3(elFx6V35vy<)z{oXXw6Zz^2Rd*e zKbqH3Xl~D)~uQekPj_!c|>E@nx3zQXxf!>eFmFG=3W&@eVh*m&tgU@6kJD_?r69U@a>| z@kn2RI3aUq5-gUWv~H-J$t}cy%f6TfgzQqK_ain~03`M;7ur6xA(Mm=1iS41iHo3w zk8WYqCa~B^$bIpfgZp0UY%dgYZ6iFemAW%{T%D~-BKTw6+I`CG9-A)}Fv?d&m6phv|p@7><^$C$IXV8=n8amdcP2_o5 zl9zl7_A9`B|LYQ%{a0$KyHiTO-{a`ki?CE*s`|qy8p|;OYM`ZVEw2iBD;Qlz7qo;g zWY4;s(a>7zM1KxODtT=6UL#L%*Y2d$1Cjwy=W$E0$g)X3hE@wJ9Vof()xomn91Rui z{POzjv~&fUNOXQY#{;Ro-%DnL(ZvNO%A1jI-K*Js zytBFFN5;xo?-%|29NiiSi9P06{~&j_A^3V>7$wZ5lu)peoRrjz>FqgD3Z(S}Y8jL~ zs&pOU!j#aipdp;jU$23E;*7MeDqJY5><&_80hj8dmU3bN2<-(fFgLPGEib?Bo?LjQ z45(Wm^uLsLiP@h1u1I%D;dGCYcu(8P)`ZE7sE~T?n)_dlBmsn>Q#=#;5NOmZv~~L6 z_sw)V(eeYRX5{OR3Uaw{&Ub6_`&k%%^H|r zw|`CL62w!TW-#~Vqrj?@0f_<$TZHU`P4s^S`ktWx^;oMeo*j$ah`3N$?^}teuo2v) z$z^}^QljlyyG}p^y-S>PE4#u9(SL1ljipx8oy3(L7x~G}U#|%oK*akJi?W>#gxL!Gl)N8}pj!*S0hCHgfx0SO&7%B0O<;fb#o@e+&X9s@FQ&|<+O9M=@kHAAjH z(~)Az;?seu?}d(d^viqU_@;bt`tW?;VIzRhP90W?45VV;@$(e6 z8CkC?C}-EC9Z-u;hbWC$XD{{IKxq>zOA(%a0b|W`P%KK$_mk@Y?YuQi0(A%#Qbl(G z%_pmz+%bG!a|4b*ajwUvzVG5HK^+ zicFKw*F6>FYHSds?(+RWS=N69ngozMi4;1LxvJ|6CDw8eAVVYl4DKkXvL1{ zQ7|y221YB;qYo(wcB1PsL-DaCvQ@yG8f@C$Y2|bQi@EF3aRyGMU{!5{#}zk7)NNHY zpP%W)2(Pz56{jnTZB2!!YBibf^uaMTmt~zPzW-PTYIOzx>##K)JEk<@vjA8 z(ndzUAwG4XpESVfpDaCf8z>>9RIf}7~ z9HrQjv&NHkH)8AAqfev*Lm!i2T(Ekfgf=Q$;Wl`tQiE#a7%Q6~jt?qqMN=Sdzix9w zf`i+5D`Lkt{5FqTRLW87I#%*3?wj8nq_&@!MfJQw#l}8_)T_a2Q-j9d_@T^~B96YGQB?ObFzlWxu;#Xi zL9b-diqnr11nYy-1inA&+7!he{#B5XKGCE*>sRrv@wXA7e7Q>gpNdDj4 z+^{d{Y){KH2_HQ&Rqi=w;G2u{Jv}~SlWdX32($#W%zH-RdE!R{<=@pm) zx`BI4#2}KWvPz(CgH4itxdsVgGV+bO%|cbV*TP&Z z2bmtQel-#M3>f&T)soiBWkqFNkxw8Ls00HUc^=h=CM8wbEA+p-!#%e7dTy!p&uK>E zAAm@P4el&7>HYvzO`I$+yeouZXRlKVx`kE_Rn&8)#I$ zdwbPx>DkFl`1TW?TxW88mBSmPt+w@~2>7$LtY~bzB}o4SW@B^0`<6Atv&$CoZoGLe zlV-JZBV20V2~Pafn364`hddUSMMY0Z-|Kk&Ff zS(DGmj2SXqCmQlT0t}sq?K84?^`xm@_s7ygDMrjgM#X@d+#yJt5TL3cjf!NQ&Vq5l z(6MklMf=Kh3mwM$gSu@c=MbK;_WFI`8i#x|>KIjT(LuXjmzu{GO*8VvS@x1O`H zw>z_g+$F+-22(p24QorS&8tdl3z;Zz`P6{Vp#2c-f`i-7_z3kAptZ}g0$OmlT4=?A0Cg{NEGv4IKaTa6f5dSzlJj+(E=OMYyXreLWs1LOOVO5Aa+Y zg|IOh?ci0ytVDl@w3o~5KLI))Chq7HyN9F$N;cAy|q5Uhl12LQ>m(ZlQb~ChsCnexk zBDO*5{>pM=dBu(UK>N`9@4oEOJ+SW2DnN~Ku0u!W)vQDKb-w`?3%2Dtwwz^G2mKlQ~H*E3^z))dyw*WY#VI z!6aY#E>1@yw@wz*&!y{V)J31DgdC}RY^Rj~MZy)tC;>U2$PCiL%M=bB`ZL|}?^#Zt zu^r{A1^PZPftO^p-g^=Y0r0WHnxn*4S|IWRwcw!`y9%S4I#};qQ^8!GtZR6QeIfq- zzK4Fg?>X%9dX>zGGnBWweJ@95rtiwTr?MMTZ(4z#*>i87uxHM&qBRSaPHPB1V-gWK zqju`%lGbZX@a6Ib=+>JVpj+m?Kt|rkDqyXT(tw}{<*!L!&*5n}V{rueJp%t{c~bSP z5)rp)ng;hZZ{S%}qEFBi#KdQ8{qz_Ov>&%Xpok zJ8%j1pWS&W5*Eo3ZI9;CrVa76mRc9}4~3&!R!o3vE+`7EwZG=n7J^n7Cv-pABkCXO zIgxoxg=feXAqH-O`@AWd4$i~oURyTM_D(oO46_2+SffDFv#6g-VC(#xpkUklUIi1HFhI1&JyHB;G)=ENNqQNq068__ZM^b?>8h z?kD4RQa;GsYALyPp9*Eg@n=mXmv%iY`;$LXjOo)tB;W*2U5=dWWO>H_pm z`8v8nO}b*eU@-Hw+dD06?Mu7zCmS#RaC~TnNuPlEe*!U`1-Xmjk1OK>8#FB(9x@Sf znA~M!hkSkCI0BtznS0v6pC(w08j#vuf`SQSdDU4Un4aG7a{4_+3lz4ZV9o(&lkByH zi?>NRimsD%?bv4G+oN2;C%^z;-Rs@xqz7+T!CgXM3#(WP6W15DOO&deak}iqR)D-5 zz(Az&Wk5p8;nOXe$PaF)_`ocJe#VE}ng2j6>c{YBEsLe_9G{d9u_<&EmGkn@e@f+N zDx`kpnjD#^*s;=Jvc8AxavW-vF)h8q-efZm>q6RQmR+$N;1+QQVt!kW4p8jIpH`bw z;nVI&93dst0qr0NUw}xwEQas^!nAFR^{Y@b2jG@JoCB9HM+!_+W!fenS( zB}+#|G5`-23Z+})fxiMU4tgNTBHoLE^I8uk$-_>+Iig|sc0bt1Kj!hE* z%QcK^F`dqT>g@<61Fh+1El>8-P5my`?mj6kCYY_Qe-KW5XzddmJmYr>{PN2Ei?A9RC1?mDQjcNzRcKXVr(f9 zvad6SL>ObpHexLQ-=&`WdEV!J-{bhdj^jS=(hM`#T-Wb9f9Lo6{hSoicfEr&oQLs? zv#}yO5v#Q5>kfw64xOP|J?CBzX|tMx|4d0+@DzOG7@s~~2tdksheCuAR&-r&s2R}T&Sx|`0sfZ3jtKlHJ$+3|hE z&XxdP#p>px&poWFupjmE#Ej9|*XwP<(jd&iAPkh7Ot`C|A4hL>-IJ7b$9>hi2nhSv-F-tB;QLf$WVX_fzl4*=Wkk?b5}Gu4Op34d^#5)Qu25sn5K&T1iTH{ z8cZx#ICyBV_f>Gp)*pjqXag?<3e|gPBxjgDk}-JoLoma)$gok))1u(3#qjs+Vd%F{ z^Fo1%n)6!SI!MXtk-HhsI0r8=%q`EHyeMvBZpeeyLll=QG{iYk3(inBNYTdT0ACyQ=h!Vb9yR4eZeDdT4mlB`HUC?z3q$B7_ z8W{;P@VT_-j&i8chx_-)ex|7Egg*u?);GXwcp7E130V}r)$Q1WbqyUlRs3f5GMcr8 z3QJ`svinw!HMf?Pe0(um<}~Nfbfcj3el*?)JRwaoz-SLsTD-kr2k@+ccDWa`u^ouZ zKz`HGchT@4qH61-nkh8dY$AQsKS8763OIcLMdv5fJ6KfDepw2l$xfjxr+$CCJ3K5^ zW!0WRcZ#YA|DDnnX=Wc<2#YLJ&zW-wVH&;0)NCvJM#F3Ul0QN6>&B}A^yKESB=MzO zd4*>vxC5UtCd>V|LhE7zdF|64g7;@lMt9{M_jQ#Y9x}iedLj>DcYXc<&)8n3p~5Mj zxUG(ykBOc=R7CLE`_SROIG8JN?b|;DxtC9NRNDop{a4h6J@-vYNCmHz`%sdm?inM< zd0zi*4CIIuf{G-E?n-vpxpm!Ya08vSWx}@BznkvH7Y`S&rWQw`HVSta zW}YAY{h~ml`mOOfQcj2RppGs8{!HY9hCGyO^O}6lu)KJEghK8dP6szi0KKZV2wvW)8X1dkE)(rIt6vqdj1D*Abc)}bvvl@=a(&qM5N>!>J zj~%sQS-?;UJQREd{6{u&c9$jDyPcN`(wA@gxg3#p;JE(+Sz8yEPOVfc*Px(ZNVoaF z0A>m71mewBH#h4h2MvN47YZ1=6bdt>J-k&HtCSaKkLqSKGytxp-_xUFbd-_*)#m+& z9hyqcT~WtX)tb(&`=ck_cJM&=mm5!_Zwlf;plsG)JH>5Pc`bW?GU&=|)^nmt7Q1&r(gjB39)^lHA z3g!p4XtN?u-2L;Q4;E+1ZwG}y`D`9om6bH+x9-POy@R@CcHO7=ZfPA7FME(7y6>Mn zqZ1e9$m~3_g)c!;-wf>gNh5diQTyLMeF~)yz}Ig$&7g+KW5K>{9gu8gviO4U6gg&K zDHC^J01N)UhX946Yqw=Vy(oF>kz4!@Rfv%h_&ewdVkOk@bJiGG9dwd}1tJH;=$lq4 zrP;?+Ou)kG{IsXx2U2b-Vg;cYambtz{DoORDN8l583J^H z%SAfXHE}0)4ALZjK$9v%MQ6 zPMI|z=Wlte-C`9gi9P2@;j@_dV^dbaS((gt^X{%c8UOz|-qEWHOu<@qRd}41jX>@h zGWU1BU23>+VWa;3BNYuB#at6%P*IG@Hr6)$)S|opUt!x^flSF!%0A}idt*22MO)dR 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 F{|9y6{PX|- diff --git a/en/application-dev/reference/native-lib/figures/libuv-thread-pool.png b/en/application-dev/reference/native-lib/figures/libuv-thread-pool.png deleted file mode 100644 index d5ee093c62c77fcc2e548197a0e474b05ce43e80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82381 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 AD*ylh diff --git a/en/application-dev/reference/native-lib/guidance-on-ndk-libc-interfaces-affected-by-permissions.md b/en/application-dev/reference/native-lib/guidance-on-ndk-libc-interfaces-affected-by-permissions.md index d6ed272ec59..3a3459a8bf0 100644 --- a/en/application-dev/reference/native-lib/guidance-on-ndk-libc-interfaces-affected-by-permissions.md +++ b/en/application-dev/reference/native-lib/guidance-on-ndk-libc-interfaces-affected-by-permissions.md @@ -1,128 +1,261 @@ -# Restricted musl libc APIs +# NDK-Related musl libc Interface Usage Restrictions ## Overview -You may need to use musl libc APIs when developing your app with the NDK. However, some musl libc APIs cannot be used due to system or environment restrictions. Errors may occur when some musl libc APIs are used with DevEco Studio. This topic helps you learn about the musl libc APIs that cannot be used with the NDK. +When developing an application using DevEco Studio or NDK, you may need to use the interface capabilities of musl libc. However, some interfaces of musl libc may be unavailable due to restrictions of multiple systems and environments. In this case, you can refer to this document to troubleshoot interface issues. -## Scenarios + -The use of musl libc APIs may be restricted by the following factors: +## Seccomp-Affected musl Interfaces + For details about the secure computing mode (Seccomp) mechanism, see [Seccomp Policy Development](../../../device-dev/subsystems/subsys-boot-init-seccomp.md). -1. The use of the musl libc API is restricted by the secure computing (seccomp) mechanism. - For details about the seccomp mechanism, see [Seccomp Policy Development](../../../device-dev/subsystems/subsys-boot-init-seccomp.md). +### Determining Process Termination Due to Seccomp - A common error caused by seccomp is as follows: - - Top function is the musl function in stacktrace. - - The reason is "signal:SIGSYS", as shown in the following example: - ``` - Process name:com.example.myapplication - Reason:Signal:SIGSYS(UNKNOWN) - Fault thread Info: - Tid:13893, Name:e.myapplication - #00 pc 000a5d30 /system/lib/ld-musl-arm.so.1(sethostname+16)(584c9d0a0e9000497bb0d66799a9526a) - #01 pc 00002f68 /data/storage/el1/bundle/libs/arm/libentry.so(test()+64) - ``` +- Check the process fault logs. If the error cause is **signal:SIGSYS** and the stack top is in the ld-musl-{architecture}.so.1 library, the process termination may be caused by the Seccomp mechanism. + ``` + cat /data/log/faultlog/faultlogger/cppcrash-xxxx + ``` + Incorrect example: + ``` + Process name:com.example.myapplication + Reason:Signal:SIGSYS(UNKNOWN) + Fault thread Info: + Tid:13893, Name:e.myapplication + #00 pc 000a5d30 /system/lib/ld-musl-arm.so.1(sethostname+16)(584c9d0a0e9000497bb0d66799a9526a) + #01 pc 00002f68 /data/storage/el1/bundle/libs/arm/libentry.so(test()+64) + ``` + +- Disable the Seccomp mechanism. If the process runs properly, the termination is caused by the Seccomp mechanism. + + When the device system version is an ENG version and the system is in root mode, execute the shell command to set the system parameter to disable the Seccomp mechanism. + ```shell + # Set the system parameter to disable Seccomp and restart the process. + param set persist.init.debug.seccomp.enable 0 + reboot + # Set the system parameter to enable Seccomp and restart the process. + param set persist.init.debug.seccomp.enable 1 + reboot + ``` + -2. The API cannot be used because it is a kernel API that is not exposed. +### Common Seccomp-Affected Interfaces -3. The use of the musl libc API is restricted by SELinux. +| Header File | musl Interface | +| ------------ | ----------------- | +| fcntl.h | name_to_handle_at | +| fcntl.h | open_by_handle_at | +| grp.h | initgroups | +| grp.h | setgroups | +| sched.h | setns | +| sched.h | unshare | +| sys/fanotify.h | fanotify_init | +| sys/fanotify.h | fanotify_mark | +| sys/fsuid.h | setfsgid | +| sys/fsuid.h | setfsuid | +| sys/klog.h | klogctl | +| sys/mount.h | mount | +| sys/mount.h | umount2 | +| sys/mount.h | umount | +| sys/msg.h | msgctl | +| sys/msg.h | msgget | +| sys/msg.h | msgrcv | +| sys/msg.h | msgsnd | +| sys/reboot.h | reboot | +| sys/sem.h | semctl | +| sys/sem.h | semget | +| sys/sem.h | semop | +| sys/sem.h | semtimedop | +| sys/shm.h | shmat | +| sys/shm.h | shmctl | +| sys/shm.h | shmdt | +| sys/shm.h | shmget | +| sys/stat.h | mkfifo | +| sys/stat.h | mkfifoat | +| sys/stat.h | mknod | +| sys/stat.h | mknodat | +| sys/swap.h | swapoff | +| sys/swap.h | swapon | +| time.h | clock_settime | +| sys/time.h | settimeofday | +| sys/timex.h | adjtimex | +| sys/timex.h | clock_adjtime | +| unistd.h | acct | +| unistd.h | chroot | +| unistd.h | pause | +| unistd.h | setdomainname | +| unistd.h | setegid | +| unistd.h | setgid | +| unistd.h | sethostname | +| unistd.h | setregid | +| unistd.h | setresgid | +| unistd.h | setreuid | +| unistd.h | setuid | +| None | pivot_root | +| None | init_module | +| None | delete_module | + + +## Kernel-Related musl Interfaces Not Opened to the Public + +| Header File | musl Interface | +| -------------- | -------------- | +| sys/fanotify.h | fanotify_init | +| sys/fanotify.h | fanotify_mark | +| unistd.h | acct | + +## SELinux-Affected musl Interfaces For details about SELinux, see [OpenHarmony SELinux Overview](../../../device-dev/subsystems/subsys-security-selinux-overview.md). -4. The use of the musl libc API is restricted by the sandbox mechanism. For details about the sandbox mechanism, see [Application Sandbox](../../file-management/app-sandbox-directory.md). - -5. The musl libc API is a null implementation or failed by default. - -6. The API can be executed after special permissions are granted. - -## Restricted musl libc APIs - -The following table lists the musl libc APIs that cannot be used. - -| Restricted By | Header File | Symbol | -| -------------------- | ------------ | ---------------- | -| seccomp | sys/fsuid.h | setfsgid | -| seccomp | sys/fsuid.h | setfsuid | -| seccomp | unistd.h | setgid | -| seccomp | unistd.h | setegid | -| seccomp | unistd.h | setreuid | -| seccomp | unistd.h | setregid | -| seccomp | unistd.h | setresgid | -| seccomp | unistd.h | setgroups | -| seccomp | unistd.h | chroot | -| seccomp | unistd.h | sethostname | -| seccomp | unistd.h | setdomainname | -| seccomp | unistd.h | acct | -| seccomp | sys/xattr.h | setxattr | -| seccomp | time.h | clock_settime | -| seccomp | time.h | settimeofday | -| seccomp | sys/stat.h | mknod | -| seccomp | sys/stat.h | mknodat | -| seccomp | sys/stat.h | mkfifo | -| seccomp | fcntl.h | name_to_handle_at | -| seccomp | fcntl.h | open_by_handle_at | -| seccomp | sys/klog.h | klogctl | -| seccomp | sys/swap.h | swapon | -| seccomp | sys/swap.h | swapoff | -| seccomp | sys/sem.h | semctl | -| seccomp | sys/sem.h | semop | -| seccomp | sys/sem.h | semtimedop | -| seccomp | sys/mount.h | mount | -| seccomp | sys/mount.h | umount2 | -| seccomp | sys/mount.h | umount | -| seccomp | sys/msg.h | msgctl | -| seccomp | sys/msg.h | msgget | -| seccomp | sys/msg.h | msgrcv | -| seccomp | sys/msg.h | msgsnd | -| seccomp | grp.h | initgroups | -| seccomp | grp.h | init_module | -| seccomp | sched.h | unshare | -| seccomp | sched.h | setns | -| seccomp | None | pivot_root | -| Kernel API not exposed| sys/fanotify.h | fanotify_init | -| Kernel API not exposed| sys/fanotify.h | fanotify_mark | -| Kernel API not exposed| syslog.h | syslog | -| Kernel API not exposed| syslog.h | vsyslog | -| SELinux | pty.h | forkpty | -| SELinux | pty.h | openpty | -| SELinux | stdlib.h | ptsname | -| SELinux | stdlib.h | ptsname_r | -| SELinux | stdlib.h | posix_openpt | -| SELinux | stdlib.h | unlockpt | -| SELinux | sys/shm.h | shmget | -| SELinux | sys/shm.h | shmat | -| SELinux | sys/shm.h | shmdt | -| SELinux | sys/shm.h | shmctl | -| SELinux | sys/sem.h | semget | -| SELinux | stdio.h | popen | -| SELinux | stdio.h | pclose | -| SELinux | unistd.h | tcgetpgrp | -| SELinux | unistd.h | tcsetpgrp | -| SELinux | unistd.h | link | -| SELinux | unistd.h | linkat | -| SELinux | unistd.h | readlink | -| SELinux | unistd.h | readlinkat | -| SELinux | unistd.h | symlink | -| SELinux | unistd.h | symlinkat | -| SELinux | sys/stat.h | mkfifoat | -| SELinux | termios | tcgetattr | -| SELinux | termios | tcsetattr | -| SELinux | termios | tcsendbreak | -| SELinux | termios | tcdrain | -| SELinux | termios | tcflush | -| SELinux | termios | tcflow | -| SELinux | termios | tcgetsid | -| SELinux | net/if.h | if_indextoname | -| SELinux | net/if.h | if_nametoindex | -| Sandbox | stdio.h | tmpfile | -| Sandbox | stdio.h | tmpfile64 | -| Sandbox | nl_type.h | catgets | -| Sandbox | nl_type.h | catclose | -| Null implementation or failed by default | utmp.h | setutent | -| Null implementation or failed by default | utmp.h | pututline | -| Null implementation or failed by default | utmp.h | getutent | -| Null implementation or failed by default | utmp.h | utmpname | -| Null implementation or failed by default | unistd.h | brk | -| Null implementation or failed by default | stdio_ext.h | __fsetlocking | -| Null implementation or failed by default | netdb.h | getnetbyaddr | -| Null implementation or failed by default | netdb.h | getnetbyname | -| **CAP_SYS_ADMIN** permission required| None | pivot_root | +### Determining Interface Errors Caused by SELinux +- Include the **errno.h** header file and check the errno error status code. If the error status code is EACCES, the interface error may be caused by the SELinux mechanism. + +- Check the kernel AVC logs for SELinux interception logs with type=1400 to determine whether the interface error is caused by the SELinux mechanism. + + ```shell + # Search for type=1400 kernel Selinux logs (Note: Due to execution efficiency, the kernel may discard some logs.) + dmesg -w | grep "pid=2854" | grep "type=1400" + # Example of a log affected by the SELinux mechanism + audit: type=1400 audit(1502785908.269:47562): avc: denied { ioctl } for pid=2854 comm="sh" path="/dev/tty" dev="tmpfs" ino=40 ioctlcmd=0x5403 scontext=u:r:su:s0 tcontext=u:object_r:tty_device:s0 tclass=chr_file permissive=0 + # Log interpretation + ioctl # Operation performed on the object + pid=2854 # Process ID of the subject + comm="sh" # Process name of the subject + path="/dev/tty" # Object being accessed + dev="tmpfs" # File system of the object + ino=40 # Inode number of the object + ioctlcmd=0x5403 # ioctl command + scontext=u:r:su:s0 # SELinux context of the subject + tcontext=u:object_r:tty_device:s0 # SELinux context of the object + tclass=chr_file # Permission category (character device file) + permissive=0 # 0: enforcing mode; 1: permissive mode + # Log conclusion + The process (2854) attempted to perform an ioctl operation on /dev/tty. Due to a lack of permission for the ioctlcmd=0x5403 command and SELinux being in enforcing mode, the kernel blocked the process operation and set errno to EACCES. + ``` + +- Disable the SELinux mechanism. If the interface call succeeds, the error is caused by the SELinux mechanism. + + When the device is in root mode, execute the shell command to set the system parameter to temporarily disable the SELinux mechanism. + ```shell + # Set the system parameter to disable the SELinux mechanism. + setenforce 0 + # Set the system parameter to enable the SELinux mechanism. + setenforce 1 + ``` + + +### Common SELinux-Affected Interfaces + +| Header File | musl Interface | +| -------------- | -------------- | +| net/if.h | if_indextoname | +| net/if.h | if_nametoindex | +| pty.h | forkpty | +| pty.h | openpty | +| semaphore.h | sem_open | +| semaphore.h | sem_unlink | +| stdlib.h | ptsname | +| stdlib.h | ptsname_r | +| stdlib.h | posix_openpt | +| stdlib.h | unlockpt | +| stdio.h | popen | +| stdio.h | pclose | +| sys/ioctl.h | ioctl | +| sys/mman.h | shm_open | +| sys/mman.h | shm_unlink | +| sys/mount.h | mount | +| sys/mount.h | umount | +| sys/mount.h | umount2 | +| sys/msg.h | msgctl | +| sys/msg.h | msgget | +| sys/msg.h | msgrcv | +| sys/msg.h | msgsnd | +| sys/sem.h | semget | +| sys/sem.h | semctl | +| sys/sem.h | semop | +| sys/sem.h | semtimedop | +| sys/shm.h | shmget | +| sys/shm.h | shmat | +| sys/shm.h | shmdt | +| sys/shm.h | shmctl | +| sys/stat.h | mkfifo | +| sys/stat.h | mkfifoat | +| sys/stat.h | mknod | +| sys/stat.h | mknodat | +| termios.h | tcgetattr | +| termios.h | tcsetattr | +| termios.h | tcsendbreak | +| termios.h | tcdrain | +| termios.h | tcflush | +| termios.h | tcflow | +| termios.h | tcgetsid | +| unistd.h | link | +| unistd.h | linkat | +| unistd.h | readlink | +| unistd.h | readlinkat | +| unistd.h | symlink | +| unistd.h | symlinkat | +| unistd.h | tcgetpgrp | +| unistd.h | tcsetpgrp | +| utmp.h | login_tty | + + +## Sandbox-Affected musl Interfaces + +For details about the sandbox mechanism, see [Application Sandbox](../../file-management/app-sandbox-directory.md). + +Include the **errno.h** header file and check the errno error status code. If the error status code is ENOENT, the interface error may be caused by the sandbox mechanism. + +### Common Sandbox-Affected Interfaces + +| Header File | musl Interface| +| -------------- | ----------- | +| fcntl.h | open | +| fcntl.h | openat | +| nl_types.h | catopen | +| stdio.h | fopen | +| stdio.h | freopen | +| stdio.h | rename | +| stdio.h | renameat | +| stdio.h | renameat2 | +| stdio.h | tmpfile | +| stdio.h | tmpfile64 | + + +## No-Op or Default-Failure musl Interfaces + +| Header File | musl Interface | +| -------------- | ------------- | +| netdb.h | getnetbyaddr | +| netdb.h | getnetbyname | +| stdio_ext.h | __fsetlocking | +| unistd.h | brk | +| utmp.h | getutent | +| utmp.h | pututline | +| utmp.h | setutent | +| utmp.h | pututline | +| utmp.h | utmpname | + + +## musl Interfaces Requiring Special Permissions + +Include the **errno.h** header file and check the errno error status code. If the error status code is EPERM, the interface error may be caused by the system capabilities security mechanism or other kernel security controls. + +### Common Capabilities-Affected Interfaces + +| Header File | musl Interface | Capabilities Permission | +| -------------- | ----------------- | -------------------- | +| None | pivot_root | CAP_SYS_ADMIN | +| None | init_module | CAP_SYS_MODULE | +| None | delete_module | CAP_SYS_MODULE | +| fcntl.h | open_by_handle_at | CAP_DAC_READ_SEARCH | +| sys/klog.h | klogctl | CAP_SYS_ADMIN | +| sys/mount.h | mount | CAP_SYS_ADMIN | +| sys/mount.h | umount | CAP_SYS_ADMIN | +| sys/mount.h | umount2 | CAP_SYS_ADMIN | +| sys/reboot.h | reboot | CAP_SYS_BOOT | +| sys/swap.h | swapon | CAP_SYS_ADMIN | +| sys/swap.h | swapoff | CAP_SYS_ADMIN | +| sys/time.h | settimeofday | CAP_SYS_TIME | +| unistd.h | setdomainname | CAP_SYS_ADMIN | +| unistd.h | sethostname | CAP_SYS_ADMIN | +| unistd.h | chroot | CAP_SYS_CHROOT | diff --git a/en/application-dev/reference/native-lib/libuv.md b/en/application-dev/reference/native-lib/libuv.md index 65c74b1d172..f69d948b613 100644 --- a/en/application-dev/reference/native-lib/libuv.md +++ b/en/application-dev/reference/native-lib/libuv.md @@ -34,17 +34,17 @@ OpenHarmony introduced Node-API of Node.js in its earlier versions to facilitate To address the scheduling issues caused when the application main thread has an event loop that contains **uvloop**, we plan to normalize the event loops in the application model to allow only one task queue in the application main loop with task priorities controlled. -Avoid using the libuv NDK to perform operations on the application main loop obtained by **napi_get_uv_event_loop** (deprecated in API version 12). This may cause various problems and increase the workload required to address compatibility issues. +You are advised not to use libuv NDK on the main loop of the application obtained by calling napi_get_uv_event_loop. Otherwise, various problems may occur, and a large amount of workload will be brought to future compatibility changes. If you want to implement interaction with the main thread cyclically, for example, insert a task, use [Node-API](../../napi/napi-data-types-interfaces.md). -We will continue to provide capabilities of interacting with the main thread and extend JS APIs through Node-API in the future for a long period of time, but shield the event loops in the implementation layer. Although **napi_get_uv_event_loop** is deprecated in API version 12, the main functional APIs of Node-API will be maintained for a long time and provide the same behaviors as native Node-API, so that the developers who are familiar with the node.js extension mechanism can easily use their code with OpenHarmony. +We will continue to provide capabilities of interacting with the main thread and extend JS APIs through Node-API in the future for a long period of time, but shield the event loops in the implementation layer. the main functional APIs of Node-API will be maintained for a long time and provide the same native behavior of Node-API, so that the developers who are familiar with the node.js extension mechanism can easily expand their code to OpenHarmony. If you are familiar with libuv and can handle memory management and multithreading problems, you can still use libuv to develop your services on OpenHarmony. Unless otherwise required, you do not need to import the libuv library to your application project. ### Current Problems and Solutions -According to the existing mechanism, only one event loop can exist in a thread. To ensure proper running of the main event loop of the system application, the main event loop listens for the FD events in the JS environment and executes `uv_run` only when an FD event is reported. As a result, certain functions that depend on **uvloop** cannot take effect. +According to the existing mechanism, only one event loop can exist in a thread. To ensure proper running of the main event loop of the system application, the main event loop listens for the FD events in the JS environment and executes uv_run only when an FD event is reported. As a result, certain functions that depend on the **uvloop** event cannot take effect. Common scenarios and solutions are as follows: @@ -54,31 +54,52 @@ Common scenarios and solutions are as follows: Call **napi_get_uv_event_loop()** to obtain the system loop, and use libuv NDK APIs to implement related functions. +ArkTS side: +```typescript +import { hilog } from '@kit.PerformanceAnalysisKit'; +import testNapi from 'libentry.so' + +@Entry +@Component +struct Index { + build() { + Row() { + Column() { + Button("test") + .width('40%') + .fontSize('14fp') + .onClick(() => { + testNapi.test(); + }).margin(20) + }.width('100%') + }.height('100%') + } +} +``` +Native side: ```cpp #include "napi/native_api.h" #include "uv.h" #define LOG_DOMAIN 0X0202 #define LOG_TAG "MyTag" #include -#include -#include -#include -static void execute(uv_work_t *work) { +static void execute(uv_work_t* work) +{ OH_LOG_INFO(LOG_APP, "ohos in execute"); } -static void complete(uv_work_t *work, int status) { +static void complete(uv_work_t* work, int status) +{ OH_LOG_INFO(LOG_APP, "ohos in complete"); delete work; } -static napi_value Add(napi_env env, napi_callback_info info) +static napi_value Test(napi_env env, napi_callback_info info) { - napi_value work_name; - uv_loop_s *loop = nullptr; + uv_loop_s* loop = nullptr; /* Obtain the uv_loop of the application JS main thread. */ napi_get_uv_event_loop(env, &loop); - uv_work_t *work = new uv_work_t; + uv_work_t* work = new uv_work_t; int ret = uv_queue_work(loop, work, execute, complete); if (ret != 0) { OH_LOG_INFO(LOG_APP, "delete work"); @@ -88,8 +109,9 @@ static napi_value Add(napi_env env, napi_callback_info info) } EXTERN_C_START -static napi_value Init(napi_env env, napi_value exports){ - napi_property_descriptor desc[] = {{"add", nullptr, Add, nullptr, nullptr, nullptr, napi_default, nullptr}}; +static napi_value Init(napi_env env, napi_value exports) +{ + napi_property_descriptor desc[] = {{"test", nullptr, Test, nullptr, nullptr, nullptr, napi_default, nullptr}}; napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); return exports; } @@ -105,49 +127,77 @@ static napi_module demoModule = { .reserved = {0}, }; -extern "C" __attribute__((constructor)) void RegisterEntryModule(void){ +extern "C" __attribute__((constructor)) void RegisterEntryModule(void) +{ napi_module_register(&demoModule); } ``` +Add the following code to the **index.d.ts** file: +``` +export const test:() => number; +``` + **Example (correct)**: Use **napi_create_async_work** and **napi_queue_async_work** together. +ArkTS side: +```typescript +import { hilog } from '@kit.PerformanceAnalysisKit'; +import testNapi from 'libentry.so' + +@Entry +@Component +struct Index { + build() { + Row() { + Column() { + Button("test") + .width('40%') + .fontSize('14fp') + .onClick(() => { + testNapi.test(); + }).margin(20) + }.width('100%') + }.height('100%') + } +} +``` +Native side: ```cpp #include "napi/native_api.h" #include "uv.h" #define LOG_DOMAIN 0X0202 #define LOG_TAG "MyTag" #include -#include -#include -#include -uv_loop_t *loop; +uv_loop_t* loop = nullptr; napi_value jsCb; int fd = -1; -static napi_value Add(napi_env env, napi_callback_info info) +static napi_value Test(napi_env env, napi_callback_info info) { napi_value work_name; napi_async_work work; napi_create_string_utf8(env, "ohos", NAPI_AUTO_LENGTH, &work_name); /* The fourth parameter specifies the work task of the asynchronous thread, and the fifth parameter is the callback of the main thread. */ - napi_create_async_work(env, nullptr, work_name, [](napi_env env, void* data){ - OH_LOG_INFO(LOG_APP, "ohos in execute"); - }, [](napi_env env, napi_status status, void *data){ - /* The specific implementation is skipped. */ - OH_LOG_INFO(LOG_APP, "ohos in complete"); - napi_delete_async_work(env, (napi_async_work)data); - }, nullptr, &work); + napi_create_async_work( + env, nullptr, work_name, [](napi_env env, void* data){OH_LOG_INFO(LOG_APP, "ohos in execute"); }, + [](napi_env env, napi_status status, void* data){ + /* The specific implementation is skipped. */ + OH_LOG_INFO(LOG_APP, "ohos in complete"); + napi_delete_async_work(env, (napi_async_work)data); + }, + nullptr, &work); /* Call napi_queue_async_work to trigger an async task. */ napi_queue_async_work(env, work); return 0; } EXTERN_C_START -static napi_value Init(napi_env env, napi_value exports){ - napi_property_descriptor desc[] = {{"add", nullptr, Add, nullptr, nullptr, nullptr, napi_default, nullptr}}; +static napi_value Init(napi_env env, napi_value exports) +{ + napi_property_descriptor desc[] = {{"test", nullptr, Test, nullptr, nullptr, nullptr, napi_default, nullptr}}; napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); return exports; } @@ -163,10 +213,15 @@ static napi_module demoModule = { .reserved = {0}, }; -extern "C" __attribute__((constructor)) void RegisterEntryModule(void){ +extern "C" __attribute__((constructor)) void RegisterEntryModule(void) +{ napi_module_register(&demoModule); } ``` +Add the following code to the **index.d.ts** file: +```index.d.ts +export const test:() => number; +``` #### Scenario 2: The libuv API does not work when throwing an FD event to the main loop of the application from the native side. @@ -176,6 +231,29 @@ The main loop of the application receives only FD events, and executes **uv_run* In the following example, calling **uv_poll_start** in the same way as in native libuv on HarmonyOS does not take effect. +ArkTS side: +```typescript +import { hilog } from '@kit.PerformanceAnalysisKit'; +import testNapi from 'libentry.so' + +@Entry +@Component +struct Index { + build() { + Row() { + Column() { + Button("testClose") + .width('40%') + .fontSize('14fp') + .onClick(() => { + testNapi.testClose(); + }).margin(20) + }.width('100%') + }.height('100%') + } +} +``` +Native side: ```cpp #include "napi/native_api.h" #include "uv.h" @@ -184,16 +262,20 @@ In the following example, calling **uv_poll_start** in the same way as in native #include #include #include -#include -uv_loop_t *loop; + +uv_loop_t* loop = nullptr; napi_value jsCb; int fd = -1; -void poll_handler(uv_poll_t* handle,int status, int events){ + +void poll_handler(uv_poll_t* handle,int status, int events) +{ OH_LOG_INFO(LOG_APP, "ohos poll print"); } -static napi_value TestClose(napi_env env, napi_callback_info info){ + +static napi_value TestClose(napi_env env, napi_callback_info info) +{ std::thread::id this_id = std::this_thread::get_id(); - OH_LOG_INFO(LOG_APP, "ohos thread id : %{public}ld\n", this_id); + OH_LOG_INFO(LOG_APP, "ohos thread id : %{public}ld", this_id); size_t argc = 1; napi_value workBname; @@ -204,7 +286,7 @@ static napi_value TestClose(napi_env env, napi_callback_info info){ napi_get_uv_event_loop(env, &loop); // Create an eventfd. fd = eventfd(0, 0); - OH_LOG_INFO(LOG_APP, "fd is %{public}d\n",fd); + OH_LOG_INFO(LOG_APP, "fd is %{public}d",fd); uv_poll_t* poll_handle = new uv_poll_t; // Initialize a poll handle and associate it with eventfd. uv_poll_init(loop, poll_handle, fd); @@ -216,7 +298,7 @@ static napi_value TestClose(napi_env env, napi_callback_info info){ int value = 10; int ret = eventfd_write(fd, value); if (ret == -1){ - OH_LOG_INFO(LOG_APP, "write failed!\n"); + OH_LOG_INFO(LOG_APP, "write failed!"); continue; } } @@ -224,8 +306,10 @@ static napi_value TestClose(napi_env env, napi_callback_info info){ mythread.detach(); return 0; } + EXTERN_C_START -static napi_value Init(napi_env env, napi_value exports){ +static napi_value Init(napi_env env, napi_value exports) +{ napi_property_descriptor desc[] = {{"testClose", nullptr, TestClose, nullptr, nullptr, nullptr, napi_default, nullptr}}; napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); return exports; @@ -242,11 +326,18 @@ static napi_module demoModule = { .reserved = {0}, }; -extern "C" __attribute__((constructor)) void RegisterEntryModule(void){ +extern "C" __attribute__((constructor)) void RegisterEntryModule(void) +{ napi_module_register(&demoModule); } ``` +Add the following code to **index.d.ts**: + +``` +export const testClose:() => number; +``` + The process is as follows: 1. Call **napi_get_uv_event_loop** to obtain **uvloop** of the application main thread. @@ -262,6 +353,29 @@ In the current system version, do not use **napi_get_uv_event_loop** to obtain * Modify the code as follows: +ArkTS side: +```typescript +import { hilog } from '@kit.PerformanceAnalysisKit'; +import testNapi from 'libentry.so' + +@Entry +@Component +struct Index { + build() { + Row() { + Column() { + Button("testClose") + .width('40%') + .fontSize('14fp') + .onClick(() => { + testNapi.testClose(); + }).margin(20) + }.width('100%') + }.height('100%') + } +} +``` +Native side: ```cpp #include "napi/native_api.h" #include "uv.h" @@ -270,16 +384,20 @@ Modify the code as follows: #include #include #include -#include -uv_loop_t *loop; + +uv_loop_t* loop = nullptr; napi_value jsCb; int fd = -1; -void poll_handler(uv_poll_t* handle,int status, int events){ + +void poll_handler(uv_poll_t* handle,int status, int events) +{ OH_LOG_INFO(LOG_APP, "ohos poll print"); } -static napi_value TestClose(napi_env env, napi_callback_info info){ + +static napi_value TestClose(napi_env env, napi_callback_info info) +{ std::thread::id this_id = std::this_thread::get_id(); - OH_LOG_INFO(LOG_APP, "ohos thread id : %{public}ld\n", this_id); + OH_LOG_INFO(LOG_APP, "ohos thread id : %{public}ld", this_id); size_t argc = 1; napi_value workBName; @@ -290,7 +408,7 @@ static napi_value TestClose(napi_env env, napi_callback_info info){ napi_get_uv_event_loop(env, &loop); fd = eventfd(0, 0); - OH_LOG_INFO(LOG_APP, "fd is %{public}d\n",fd); + OH_LOG_INFO(LOG_APP, "fd is %{public}d",fd); uv_poll_t* poll_handle = new uv_poll_t; uv_poll_init(loop, poll_handle, fd); uv_poll_start(poll_handle, UV_READABLE, poll_handler); @@ -303,7 +421,7 @@ static napi_value TestClose(napi_env env, napi_callback_info info){ int value = 10; int ret = eventfd_write(fd, value); if (ret == -1){ - OH_LOG_INFO(LOG_APP, "write failed!\n"); + OH_LOG_INFO(LOG_APP, "write failed!"); continue; } } @@ -313,7 +431,8 @@ static napi_value TestClose(napi_env env, napi_callback_info info){ } EXTERN_C_START -static napi_value Init(napi_env env, napi_value exports){ +static napi_value Init(napi_env env, napi_value exports) +{ napi_property_descriptor desc[] = {{"testClose", nullptr, TestClose, nullptr, nullptr, nullptr, napi_default, nullptr}}; napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); return exports; @@ -330,16 +449,22 @@ static napi_module demoModule = { .reserved = {0}, }; -extern "C" __attribute__((constructor)) void RegisterEntryModule(void){ +extern "C" __attribute__((constructor)) void RegisterEntryModule(void) +{ napi_module_register(&demoModule); } ``` +Add the following code to **index.d.ts**: + +``` +export const testClose:() => number; +``` ## Using libuv -In the libuv NDK, all the APIs that depend on **uv_run** do not work as expected in the application main loop of the current system, and may cause freezing or loss of frames. You are advised not to use libuv NDK APIs in the JS main thread. You can use Node-API to implement asynchronous task execution and communication with the main thread via thread-safe functions. +In the libuv NDK, all the APIs that depend on **uv_run** do not work as expected in the application main loop of the current system, and may cause freezing or loss of frames. You are advised not to directly use libuv NDK APIs in the JS main thread. You can use Node-API to implement asynchronous task execution and communication with the main thread via thread-safe functions. -### Mappings Between libuv APIs and Node-API APIs +### Mappings Between libuv APIs and Node-APIs Instead of using libuv APIs, you can use the equivalent Node-API provided by OpenHarmony, which includes asynchronous work APIs and thread-safe APIs. @@ -352,36 +477,45 @@ You can use [napi_async_work](../../napi/use-napi-asynchronous-task.md) APIs of The related Node-API interfaces are as follows: ```cpp -// Creates a work object that executes logic asynchronously. -// env: pointer to the current execution environment. -// async_resource: (optional) resource object used to trace asynchronous operations. -// async_resource_name: (optional) name of the resource object. The value is a string. -// execute: callback invoked to perform an asynchronous operation in another thread. -// complete: callback to be invoked when the asynchronous operation is complete. -// data: pointer to the customized data to be passed to the execute() and complete() callbacks. -// result: pointer to the asynchronous work object created. +/** +* @brief Creates a work object that executes logic asynchronously. +* +* @param env Pointer to the current execution environment. +* @param async_resource (Optional) Resource object used to trace asynchronous operations. +* @param async_resource_name (Optional) Name of the resource object. The value is a string. +* @param execute Callback invoked to perform an asynchronous operation in another thread. +* @param execute Callback to be invoked when the asynchronous operation is complete. +* @param data Pointer to the customized data to be passed to the execute() and complete() callbacks. +* @param result Pointer to the asynchronous work object created. +*/ napi_status napi_create_async_work(napi_env env, napi_value async_resource, napi_value async_resource_name, - napi_async_execute_callback execute, - napi_async_complete_callback complete, + napi_async_execute_callback execute, + napi_async_complete_callback complete, void* data, napi_async_work* result); -// Adds an asynchronous work object to the queue so that it can be scheduled for execution. -// env: pointer to the current execution environment. -// work: pointer to the asynchronous work object to add. +/** +* @brief Adds an asynchronous work object to the queue so that it can be scheduled for execution. +* +* @param env Pointer to the current execution environment. +* @param work Pointer to the asynchronous work object to add. +*/ napi_status napi_queue_async_work(napi_env env, napi_async_work work); -// Deletes an asynchronous work object. -// env: pointer to the current execution environment. -// work: pointer to the asynchronous work object to delete. +/** +* @brief Deletes an asynchronous work object. +* +* @param env Pointer to the current execution environment. +* @param work Pointer to the asynchronous work object to delete. +*/ napi_status napi_delete_async_work(napi_env env, napi_async_work work); ``` #### Thread-safe APIs for Cross-Thread Sharing and Invocation -When you want to pass a callback to the application main thread, you can use the libuv **uv_async_t** handle for inter-thread communication, and the following functions: +When you want to pass a callback from any child thread to the application main thread for execution, you can use the libuv **uv_async_t** handle for inter-thread communication, and the following functions: - uv_async_init() - uv_async_send() @@ -391,53 +525,72 @@ The equivalent Node-API interfaces are [napi_threadsafe_function](../../napi/use The related Node-API interfaces are as follows: ```cpp -// Creates a thread-safe function, which can be called in multiple threads without causing data contention or other thread-safe issues. -// env: pointer to the Node-API environment. It is used to create and operate JS values. -// func: pointer to the JavaScript function to create. -// resource_name: pointer to the resource name, which is used for logging and debugging. -// max_queue_size: an integer specifying the maximum size of a queue. When the queue is full, new calls will be discarded. -// initial_thread_count: an integer specifying the number of initial threads. These threads will be started when the function is created. -// context: pointer to the context, which is passed to call_js_func(). -// call_js_func: pointer to the callback to be invoked when the JS function is called. -// finalize: Pointer to the finalize() function to be called when the thread-safe function is destroyed. -// result: pointer to the napi_threadsafe_function struct, which will be constructed as the newly created thread-safe function. +/** +* @brief Creates a thread-safe function, which can be called in multiple threads without causing data contention or other thread-safe issues. +* +* @param env Pointer to the Node-API environment. It is used to create and operate JS values. +* @param func Pointer to the JavaScript function to create. +* @param async_resource Asynchronous resource, which is usually an object that indicates an asynchronous operation. +* @param async_resource_name Pointer to the resource name, which is used for logging and debugging. +* @param max_queue_size An integer specifying the maximum size of a queue. When the queue is full, new calls will be discarded. +* @param initial_thread_count An unsigned integer indicating the initial number of threads when a thread-safe function is created. +* @param thread_finalize_data Data to be cleared before all threads are created. +* @param napi_finalize Callback function thread_finalize_cb, which is called when all threads are complete and is used to clear resources +* @param context Pointer to the context, which is passed to call_js_func(). +* @param call_js_cb Pointer to the callback to be invoked when the JS function is called. +* @param result Pointer to the napi_threadsafe_function struct, which will be constructed as the thread-safe function created. +*/ napi_status napi_create_threadsafe_function(napi_env env, - napi_value func, - const char* resource_name, - size_t max_queue_size, - size_t initial_thread_count, - void* context, - napi_threadsafe_function_call_js call_js_func, - napi_threadsafe_function_finalize finalize, - napi_threadsafe_function* result); - -// Acquires a thread-safe function. -// function: pointer to the thread-safe function to acquire. -napi_status napi_acquire_threadsafe_function(napi_threadsafe_function function); + napi_value func, + napi_value async_resource, + napi_value async_resource_name, + size_t max_queue_size, + size_t initial_thread_count, + void* thread_finalize_data, + napi_finalize thread_finalize_cb, + void* context, + napi_threadsafe_function_call_js call_js_cb, + napi_threadsafe_function* result); -// Calls a thread-safe function. -// function: pointer to the thread-safe function to call. -// data: pointer to the user data. -napi_status napi_call_threadsafe_function(napi_threadsafe_function function, void* data); +/** +* @brief Acquires a thread-safe function. +* +* @param function Pointer to the thread-safe function to release. +*/ +napi_status napi_acquire_threadsafe_function(napi_threadsafe_function function); -// Releases a thread-safe function. -// function: pointer to the thread-safe function to release. -napi_status napi_release_threadsafe_function(napi_threadsafe_function function); +/** +* @brief Calls a thread-safe function. +* @param function Pointer to the thread-safe function to release. +* @param data Pointer to the user data. +* @param is_blocking Enumerated value that determines whether the JavaScript function call is blocking or non-blocking. +*/ +napi_status napi_call_threadsafe_function(napi_threadsafe_function function, + void* data, + napi_threadsafe_function_call_mode is_blocking); +/** +* @brief Releases a thread-safe function. +* +* @param function Pointer to the thread-safe function to release. +* @param is_blocking Enumerated value that determines whether the JavaScript function call is blocking or non-blocking. +*/ +napi_status napi_release_threadsafe_function(napi_threadsafe_function function, + napi_threadsafe_function_call_mode is_blocking); ``` -If you need to use other libuv APIs to implement service functions, read on to discover basic libuv concepts and common APIs to be used in OpenHarmony, which are helpful to prevent application crashes when using libuv APIs. The following also provides information about the APIs that can be used in the application main thread and those cannot. +If you need to use other libuv APIs to implement service functions, read on to discover basic libuv concepts and common APIs to be used in OpenHarmony, which are helpful to prevent application crashes when using libuv APIs. The following also provides information about the APIs that can be used in the application main thread and those cannot. ### Available APIs | API Type | API | | ---- | ---- | -| [Loop](#event-loops-in-libuv) | uv_loop_init | -| [Loop](#event-loops-in-libuv) | uv_loop_close | -| [Loop](#event-loops-in-libuv) | uv_default_loop | -| [Loop](#event-loops-in-libuv) | uv_run | -| [Loop](#event-loops-in-libuv) | uv_loop_alive | -| [Loop](#event-loops-in-libuv) | uv_stop | +| [Loop](#event-loops-in-libuv) | uv_loop_init | +| [Loop](#event-loops-in-libuv) | uv_loop_close | +| [Loop](#event-loops-in-libuv) | uv_default_loop | +| [Loop](#event-loops-in-libuv) | uv_run | +| [Loop](#event-loops-in-libuv) | uv_loop_alive | +| [Loop](#event-loops-in-libuv) | uv_stop | | [Handle](#handles-and-requests-in-libuv) | uv_poll\_\* | | [Handle](#handles-and-requests-in-libuv) | uv_timer\_\* | | [Handle](#handles-and-requests-in-libuv) | uv_async\_\* | @@ -465,9 +618,42 @@ The constraints vary depending on the source of the loop. Specifically, you can ##### Creating a Loop -You can call **uv_loop_new** to create a loop or call **uv_loop_init** to initialize a loop. (You need to manage the lifecycle of the loop.) In this case, ensure that **uv_run** is executed on the loop thread, that is, the thread where the loop is created or initialized. In addition, non-thread-safe operations, such as operations related to the timer and handle, must be performed on the loop thread. +You can call **uv_loop_new** to create a loop or call **uv_loop_init** to initialize a loop. You need to manage the lifecycle of the loop. In this case, ensure that **uv_run** is executed on the loop thread, that is, the thread where the loop is created or initialized. In addition, non-thread-safe operations, such as operations related to the timer, must be performed on the loop thread. + +If tasks have to be thrown from other threads to the loop thread, use **uv_async_send**. Specifically, register a callback when the async handle is initialized, and implement the corresponding operation in the callback. When **uv_async_send** is called, execute the registered callback on the main thread. + +ArkTS: + +```typescript +import { hilog } from '@kit.PerformanceAnalysisKit'; +import testNapi from 'libentry.so' + +@Entry +@Component +struct Index { + build() { + Row() { + Column() { + Button("TestTimerAsync") + .width('40%') + .fontSize('14fp') + .onClick(() => { + testNapi.testTimerAsync(); // Initialize the async handle. + }).margin(20) + + Button("TestTimerAsyncSend") + .width('40%') + .fontSize('14fp') + .onClick(() => { + testNapi.testTimerAsyncSend(); // Call uv_async_send from a child thread to submit the timer task. + }).margin(20) + }.width('100%') + }.height('100%') + } +} +``` -If tasks have to be thrown from other threads to the loop thread, use **uv_async_send**. Specifically, register a callback when the **async** handle is initialized. When **uv_async_send** is called, execute the registered callback on the main thread.
Example: +Native side: ```cpp #include @@ -476,65 +662,112 @@ If tasks have to be thrown from other threads to the loop thread, use **uv_async #define LOG_TAG "MyTag" #include "hilog/log.h" #include -#include + uv_async_t* async = new uv_async_t; +bool cond1 = false; +bool cond2 = false; + +// Tips: When using a loop, pay special attention to the uv_stop function. Before calling uv_stop, +// instruct all threads associated with the loop to close their handles. For details, see the implementation of the stop_loop function. +int stop_loop(uv_loop_t* loop) +{ + uv_stop(loop); + auto const ensure_close = [](uv_handle_t* handle, void*) { + if (uv_is_closing(handle)) { + return; + } else { + uv_close(handle, nullptr); + } + }; + // Iterate through all handles. If a handle is active, call ensure_close on it. + uv_walk(loop, ensure_close, nullptr); + // Continue to run uv_run until there is no active handle or request in the loop. + while(true) { + if (uv_run(loop, UV_RUN_DEFAULT) == 0) { + break; + } + } + + // Check the loop status. + if (uv_loop_alive(loop) != 0) { + return -1; + } + return 0; +} // Create a timer. -void timer_cb(uv_async_t* handle) { +void async_cb(uv_async_t* handle) { auto loop = handle->loop; uv_timer_t* timer = new uv_timer_t; uv_timer_init(loop, timer); - - uv_timer_start(timer, [](uv_timer_t* timer){ - uv_timer_stop(timer); - }, 1000, 0); + // Close the async handle at appropriate time. - if (cond) { + if (cond2) { uv_close((uv_handle_t*)handle, [](uv_handle_t* handle){ delete (uv_async_t*)handle; - }) + }); + return; } + + uv_timer_start(timer, + [](uv_timer_t* timer){ + // Do something. + // Stop the timer at the right time. + if (cond1) { + uv_timer_stop(timer); + uv_close((uv_handle_t*)timer, [](uv_handle_t* handle){ + delete(uv_timer_t*)handle; + }); + } + }, + 100, 100); } // Initialize the async handle and bind the corresponding callback. static napi_value TestTimerAsync(napi_env env, napi_callback_info info) { - std::thread t ([] () { // Thread A, loop thread - uv_loop_t* loop = new uv_lppo_t; + std::thread t([](){ // Thread A, loop thread + uv_loop_t* loop = new uv_loop_t; // Create a loop and manage the loop lifecycle. uv_loop_init(loop); // Initialize an async handle and register a callback. - uv_async_init(loop, async, timer_cb); + uv_async_init(loop, async, async_cb); // Start the loop. uv_run(loop, UV_RUN_DEFAULT); // Close all handles. - uv_walk( - loop, - [](uv_handle_t* handle, void* args) { - if (!uv_is_closing(handle)) { - uv_close(hendle, [](uv_handle_t* handle){delete handle;}); - } - }, - nullptr; - ); - while (uv_run(loop, UV_RUN_DEFAULT) != 0); + stop_loop(loop); // Release the loop. - uv_loop_delete(loop); - }) + uv_loop_close(loop); + delete loop; + }); t.detach(); return 0; } // Call uv_async_send on another thread. -static napi_value TestTimerAsyncSend(napi_env env, napi_callback_info info) { - std::thread t ([] () { // Thread B +static napi_value TestTimerAsyncSend(napi_env env, napi_callback_info info) +{ + std::thread t1([](){ // Thread B. uv_async_send (async); // Call uv_async_send to instruct the loop thread to call timer_cb bound to the async handle. + uv_sleep(500); + // Modify cond1 and disable the timer handle. + cond1 = true; }); - t.detach(); + + std::thread t2([](){ // Thread B. + uv_sleep(1000); + // Modify cond2 and disable the async handle. + cond2 = true; + uv_async_send(async); + }); + + t1.detach(); + t2.detach(); return 0; } EXTERN_C_START -static napi_value Init(napi_env env, napi_value exports) { +static napi_value Init(napi_env env, napi_value exports) +{ napi_property_descriptor desc[] = { {"testTimerAsync", nullptr, TestTimerAsync, nullptr, nullptr, nullptr, napi_default, nullptr}, {"testTimerAsyncSend", nullptr, TestTimerAsyncSend, nullptr, nullptr, nullptr, napi_default, nullptr}, @@ -554,18 +787,24 @@ static napi_module demoModule = { .reserved = {0}, }; -extern "C" __attribute__((constructor)) void RegisterEntryModule(void) { +extern "C" __attribute__((constructor)) void RegisterEntryModule(void) +{ napi_module_register(&demoModule); } ``` -In this example, a global task queue is used and tasks are submitted to the task queue from a non-loop thread. Then, **uv_async_send** is called at appropriate time to return to the loop thread to execute **async_cb**, which traverses and executes all tasks in the task queue. Note that the task queue operations must be thread-safe. A lock-free queue can be used in C++ implementation, and locks must be added in C implementation. +Add the following code to **index.d.ts**: + +``` +export const testTimerAsync:() => number; +export const testTimerAsyncSend:() => number; +``` ##### Obtaining a Loop from env -Generally, the loop obtained from **env** using **napi_get_uv_event_loop** is an event loop of a JS thread created by the system. Therefore, avoid calling non-thread-safe functions on its child threads. +Generally, the loop obtained from **env** by using **napi_get_uv_event_loop** is an event loop of a JS main thread created by the system. Therefore, avoid calling non-thread-safe functions on its child threads. -If a non-thread-safe function has to be called on a non-loop thread due to service requirements, use the thread-safe function **uv_async_send**. Specifically, define a handle of the **uv_async_t*** type. When initializing the handle, add the non-thread-safe function that needs to be called on a child thread in **async_cb**. Then, call **uv_async_send** in a non-loop thread, and execute **async_cb** on the loop thread. For details, see case 2 in [Correct Example](#correct-example). +If a non-thread-safe function has to be called on a non-loop thread due to service requirements, use the thread-safe function **uv_async_send** to submit the task to the loop thread. Specifically, define a handle of the **uv_async_t*** type. When initializing the handle, add the non-thread-safe function that needs to be called on a child thread in **async_cb**. Then, call **uv_async_send** in a non-loop thread, and execute **async_cb** on the loop thread. For details, see case 2 in [Correct Example](#correct-example). ### Thread-safe Functions @@ -608,9 +847,7 @@ As a core concept in libuv, an event loop manages all resources of the entire ev int uv_loop_init(uv_loop_t* loop); ``` - Initializes a loop. - - +Initializes a loop. ```cpp int uv_loop_close(uv_loop_t* loop); @@ -618,8 +855,6 @@ int uv_loop_close(uv_loop_t* loop); Closes a loop. The operation is successful only after all handles and requests in the loop are closed. Otherwise, **UV_EBUSY** is returned. - - ```cpp int uv_loop_delete(uv_loop_t* loop); ``` @@ -629,16 +864,11 @@ Releases a loop. This API calls **uv_loop_close** to release all internal resour > **NOTE** > > Exercise caution when using this API. You are advised not to use this API unless necessary. - - - ```cpp uv_loop_t* uv_default_loop(void); ``` -Creates a process-level loop. In OpenHarmony, libuv loops still exist in the application main loop and other JS worker threads. You are not advised to use this API to create loops and implement service functions. When the loop mechanism normalization is complete, you can use this API to create loops. - - +Creates a process-level loop. In OpenHarmony, libuv loops still exist in the application main loop and other JS worker threads. You are not advised to use this API to create loops and implement service functions. ```cpp int uv_run(uv_loop_t* loop, uv_run_mode mode); @@ -646,56 +876,18 @@ int uv_run(uv_loop_t* loop, uv_run_mode mode); Runs an event loop. For details about the running mode, see [Event Loop Running Modes](#event-loop-running-modes). - - ```cpp int uv_loop_alive(uv_loop_t loop); ``` Checks whether a loop is active. - - ```cpp void uv_stop(uv_loop_t* loop); ``` Stops an event loop. The event loop stops only in the next iteration of the loop. If this API is called before an I/O operation, **uv__io_poll** will be skipped instead of being blocked. -> **Tips** -> -> Pay special attention to the use of **uv_stop**. Before **uv_stop** is called, ensure that the handles of all threads related to the loop are closed. - -Example: - -```cpp -int stop_loop(uv_loop_t* loop) -{ - uv_stop(loop); - auto const ensure_close = [](uv_handle_t* handle, void*) { - if (uv_is_closing(handle)) { - return; - } else { - uv_close(handle, nullptr); - } - }; - // Traverse all handles. Call ensure_close to close the active handle. - uv_walk(loop, ensure_close, nullptr); - - // Continue to run uv_run until there is no active handle or request in the loop. - while(true) { - if (uv_run(loop, UV_RUN_DEFAULT) == 0) { - break; - } - } - - // Check the loop status. - if (uv_loop_alive(loop) != 0) { - return -1; - } - return 0; -} -``` ### Handles and Requests in libuv @@ -741,7 +933,7 @@ void uv_close(uv_handle_t* handle, uv_close_cb close_cb) After **uv_close** is called, the handle to be closed is added to the **closing_handles** queue in the loop, and waits for the loop thread to run **uv__run_closing_handles**. Finally, the **close_cb** callback is executed in the next iteration of the loop. Therefore, operations such as memory release should be performed in **close_cb**. Improper use of the **close** API that is executed asynchronously may cause multithreading issues. You need to ensure correct timing of **uv_close** and ensure that all the handles are closed before **close_cb** is executed. -> **Tips**
The following rule of thumb in the official libuv documentation (http://libuv.org/) needs to be observed.
If a handle of type **uv_foo_t** has a **uv_foo_start()** function, then it's active from the moment that function is called. Likewise, **uv_foo_stop()** deactivates the handle again. +> **Tips**
The following rule of thumb in the official libuv documentation (http://libuv.org/) needs to be observed.
If a handle of type **uv_foo_t** has a **uv_foo_start()** function, then it is active from the moment that function is called. Likewise, **uv_foo_stop()** deactivates the handle again. > **NOTE** > @@ -749,8 +941,6 @@ After **uv_close** is called, the handle to be closed is added to the **closing_ > > - All handle operations cannot be called on non-loop threads by obtaining the loop of other threads. -#### Submitting Asynchronous Tasks - When asynchronous tasks are submitted, the libuv requests that are dynamically acquired must be released in the **complete()** callback executed on the loop thread. The following uses **uv_work_t** as an example. ```cpp @@ -763,43 +953,6 @@ uv_queue_work(loop, work, [](uv_work_t* req) { }); ``` -In special cases, for example, in memory-sensitive cases, the same request can be used repeatedly when: - -- The sequence of the same type of tasks is ensured. -- The request can be successfully released when **uv_queue_work** is called the last time. - -```C -uv_work_t* work = new uv_work_t; -uv_queue_work(loop, work, [](uv_work_t* work) { - // Do something. - }, - [](uv_work_t* work, int status) { - // Do something. - uv_queue_work(loop, work, [](...) {/* do something*/}, [](...) { - // Do something. - if (last_task) { // Release the request after the last task is executed. - delete work; - } - }); - }, - ) -``` - -#### Precautions for Submitting Asynchronous Tasks -##### uv_queue_work process -In libuv, **uv_queue_work()** in a UI thread works as follows: - -1. Throw **work_cb** to the thread pool of the related priority of Function Flow Runtime (FFRT) and wait for FFRT to schedule and execute the task. -2. Throw **after_work_cb** to the event queue of **eventhandler**, wait for **eventhandler** to schedule, and return to the loop thread for execution. - -> **NOTE**
After **uv_queue_work()** is called, it does not mean any task is complete. It only means **work_cb()** is inserted into the thread pool of the related priority of FFRT. The workflow of the taskpool and jsworker threads is the same as that of libuv. - -##### Constraints on Using uv_queue_work() - -**uv_queue_work()** is only used to throw asynchronous tasks. The **execute()** callback of an asynchronous task added to the thread pool will be scheduled and executed. Therefore, the task execution sequence may be different from the task submission sequence. - -**uv_queue_work()** can be called only on the loop thread. This prevents multi-threading issues. Do not use **uv_queue_work()** as a means for inter-thread communication. Specifically, do not use **uv_queue_work** to throw an asynchronous task from thread A to thread B, setting the **execute()** callback to an empty task and executing the **complete()** callback on thread B. This approach is not only inefficient but increases the difficulty in locating faults. To avoid inefficient task submission, use [napi_threadsafe_function](#thread-safe-apis-for-cross-thread-sharing-and-invocation). - #### Using libuv Timers Observe the following when using the libuv timers: @@ -856,7 +1009,8 @@ Native C++: #include #include -static napi_value TestTimer(napi_env env, napi_callback_info info) { +static napi_value TestTimer(napi_env env, napi_callback_info info) +{ uv_loop_t* loop = nullptr; uv_timer_t* timer = new uv_timer_t; @@ -873,7 +1027,8 @@ static napi_value TestTimer(napi_env env, napi_callback_info info) { } EXTERN_C_START -static napi_value Init(napi_env env, napi_value exports) { +static napi_value Init(napi_env env, napi_value exports) +{ napi_property_descriptor desc[] = { {"testTimer", nullptr, TestTimer, nullptr, nullptr, nullptr, napi_default, nullptr}, }; @@ -892,7 +1047,8 @@ static napi_module demoModule = { .reserved = {0}, }; -extern "C" __attribute__((constructor)) void RegisterEntryModule(void) { +extern "C" __attribute__((constructor)) void RegisterEntryModule(void) +{ napi_module_register(&demoModule); } ``` @@ -905,10 +1061,11 @@ export const testTimer:() => number; ##### Correct Example -**Case 1**: Ensure that timer-related operations are performed on the native main thread. Modify the **TestTimer()** function used in the previous example as follows: +**Case 1**: Ensure that timer-related operations are performed on the JS main thread. Modify the **TestTimer()** function used in the previous example as follows: ```cpp -static napi_value TestTimer(napi_env env, napi_callback_info info) { +static napi_value TestTimer(napi_env env, napi_callback_info info) +{ uv_loop_t* loop = nullptr; uv_timer_t* timer = new uv_timer_t; @@ -925,17 +1082,10 @@ static napi_value TestTimer(napi_env env, napi_callback_info info) { **Case 2**: To throw a timer to a child thread, use the thread-safe function **uv_async_send**. ArkTS: - ```typescript import { hilog } from '@kit.PerformanceAnalysisKit'; import testNapi from 'libentry.so' -function waitforRunner(): number { - "use concurrent" - hilog.info(0xff, "testTag", "executed"); - return 0; -} - @Entry @Component struct Index { @@ -946,14 +1096,14 @@ struct Index { .width('40%') .fontSize('14fp') .onClick(() => { - testNapi.testTimerAsync (); // Initialize the async handle. + testNapi.testTimerAsync(); // Initialize the async handle. }).margin(20) Button("TestTimerAsyncSend") .width('40%') .fontSize('14fp') .onClick(() => { - testNapi.testTimerAsyncSend (); // The child thread calls uv_async_send to execute timer_cb. + testNapi.testTimerAsyncSend(); // Call uv_async_send from a child thread to submit the timer task. }).margin(20) }.width('100%') }.height('100%') @@ -961,7 +1111,7 @@ struct Index { } ``` -Native C++: +Native side: ```c++ #include @@ -974,7 +1124,8 @@ Native C++: uv_async_t* async = new uv_async_t; // Create a timer. -void timer_cb(uv_async_t* handle) { +void async_cb(uv_async_t* handle) +{ auto loop = handle->loop; uv_timer_t* timer = new uv_timer_t; uv_timer_init(loop, timer); @@ -985,23 +1136,26 @@ void timer_cb(uv_async_t* handle) { } // Initialize the async handle and bind the corresponding callback. -static napi_value TestTimerAsync(napi_env env, napi_callback_info info) { +static napi_value TestTimerAsync(napi_env env, napi_callback_info info) +{ uv_loop_t* loop = nullptr; napi_get_uv_event_loop(env, &loop); - uv_async_init(loop, async, timer_cb); + uv_async_init(loop, async, async_cb); return 0; } -static napi_value TestTimerAsyncSend(napi_env env, napi_callback_info info) { +static napi_value TestTimerAsyncSend(napi_env env, napi_callback_info info) +{ std::thread t([](){ - uv_async_send (async); // Call uv_async_send in any child thread to instruct the main thread to call timer_cb associated with async. + uv_async_send (async); // Call uv_async_send in a child thread to instruct the main thread to call timer_cb associated with async. }); t.detach(); return 0; } EXTERN_C_START -static napi_value Init(napi_env env, napi_value exports) { +static napi_value Init(napi_env env, napi_value exports) +{ napi_property_descriptor desc[] = { {"testTimerAsync", nullptr, TestTimerAsync, nullptr, nullptr, nullptr, napi_default, nullptr}, {"testTimerAsyncSend", nullptr, TestTimerAsyncSend, nullptr, nullptr, nullptr, napi_default, nullptr}, @@ -1021,14 +1175,22 @@ static napi_module demoModule = { .reserved = {0}, }; -extern "C" __attribute__((constructor)) void RegisterEntryModule(void) { +extern "C" __attribute__((constructor)) void RegisterEntryModule(void) +{ napi_module_register(&demoModule); } ``` +Add the following code to **index.d.ts**: + +``` +export const testTimerAsync:() => number; +export const testTimerAsyncSend:() => number; +``` + ### Inter-Thread Communication -So far, you have learnt about the basic concepts of libuv. Now let's dive into the inter-thread communication in libuv. +So far, you have acquainted yourself with the basic concepts of libuv. Now let's dive into the inter-thread communication in libuv. The inter-thread communication of libuv is implemented based on the **uv_async_t** handle. The related APIs are as follows: @@ -1036,64 +1198,47 @@ The inter-thread communication of libuv is implemented based on the **uv_async_t int uv_async_init(uv_loop_t* loop, uv_async_t* handle, uv_async_cb async_cb) ``` -**Description** - -Initializes a handle. - -**Parameters** - -- **loop**: pointer to the event loop. -- **handle**: pointer to the handle for inter-thread communication. - -- **async_cb**: callback to be invoked. - + Initializes a handle.
**loop**: pointer to the event loop. -**Return value** - -This API returns **0** if the operation is successful; returns an error code if the operation fails. + **handle**: pointer to the handle for inter-thread communication. + **async_cb**: callback to be invoked. + This API returns **0** if the operation is successful; returns an error code if the operation fails. ```cpp int uv_async_send(uv_async_t* handle) ``` -**Description** - -Wakes up the event loop and calls the async handle's callback. - -**Parameters** - -**handle**: pointer to the handle for inter-thread communication. - -**Return value** - -This API returns **0** if the operation is successful; returns an error code if the operation fails. + Wakes up the event loop and calls the async handle's callback.
**handle**: pointer to the handle for inter-thread communication. + This API returns **0** if the operation is successful; returns an error code if the operation fails. > **NOTE** > > - **uv_async_t** remains active after **uv_async_init** is called till it is closed by **uv_close**. > > - **uv_async_t** is executed in the sequence defined by **uv_async_init** instead of **uv_async_send**. Therefore, it is necessary to manage the timing according to the initialization sequence. -![](./figures/libuv-inter-thread-communication.png) +![Inter-thread communication principle](./figures/libuv-image-1.jpg) Example: ```cpp -#include +#include +#include #include "uv.h" uv_loop_t* loop = nullptr; uv_async_t* async = nullptr; int g_counter = 10; + void async_handler(uv_async_t* handle) { - printf("ohos async print\n"); + std::cout << "ohos async print" << std::endl; if (--g_counter == 0) { // Call uv_close to close the async handle and release the memory in the main loop. uv_close((uv_handle_t*)async, [](uv_handle_t* handle) { - printf("delete async\n"); + std::cout << "delete async" << std::endl; delete (uv_async_t*)handle; }); } @@ -1107,7 +1252,7 @@ int main() std::thread subThread([]() { for (int i = 0; i < 10; i++) { usleep (100); // Avoid multiple calls to uv_async_send being executed only once. - printf("%dth: subThread triggered\n", i); + std::cout << i << "th: subThread triggered" << std::endl; uv_async_send(async); } }); @@ -1159,20 +1304,47 @@ int uv_queue_work(uv_loop_t* loop, uv_after_work_cb after_work_cb) ``` -**Description** +Initializes a work request which will run the given **work_cb** in a thread from the thread pool.
**work_cb**: task submitted to the worker thread. + +**after_work_cb**: callback to be executed by the loop thread. + +**NOTE**
**after work_cb** is called after **work_cb** is complete. It is triggered by an FD event triggered by **uv_async_send(loop->wq_async)** and executed in the next iteration of the loop thread. The **uv_work_t** lifecycle ends only when **after_work_cb** is executed. + +#### Submitting Asynchronous Tasks + +The following figure illustrates a simplified workflow of the native libuv thread pool. The default pending flag of the handle is 1. The number of worker threads is an example only. + +![Working principle of the libuv thread pool](./figures/libuv-image-3.jpg) -Initializes a work request which will run the given **work_cb** in a thread from the thread pool. +#### Precautions for Submitting Asynchronous Tasks +##### Workflow of uv_queue_work + +In OpenHarmony, **uv_queue_work()** in a UI thread works as follows: Throw **work_cb** to the thread pool of the related priority of Function Flow Runtime (FFRT) and wait for FFRT to schedule and execute the task; throw **after_work_cb** to the event queue of **eventhandler** with the corresponding priority, wait for **eventhandler** to schedule, and return to the loop thread for execution.
**NOTE**
After **uv_queue_work()** is called, it does not mean any task is complete. It only means **work_cb()** is inserted into the thread pool of the related priority of FFRT. The workflow of the taskpool and jsworker threads is the same as that of native libuv. -**Parameters** +In special cases, for example, in memory-sensitive cases, the same request can be used repeatedly when:
- The sequence of the same type of tasks is ensured.
-The request can be successfully released when **uv_queue_work** is called the last time. -- **work_cb**: task submitted to the worker thread. -- **after_work_cb**: callback to be executed by the loop thread. +```C +uv_work_t* work = new uv_work_t; +uv_queue_work(loop, work, [](uv_work_t* work) { + // Do something. + }, + [](uv_work_t* work, int status) { + // Do something. + uv_queue_work(loop, work, [](...) {/* do something*/}, [](...) { + // Do something. + if (last_task) { // Release the request after the last task is executed. + delete work; + } + }); + }, + ) +``` -> **NOTE**
**after work_cb** is called after **work_cb** is complete. It is triggered by an FD event triggered by **uv_async_send(loop->wq_async)** and executed in the next iteration of the loop thread. The **uv_work_t** lifecycle ends only when **after_work_cb** is executed. +##### Constraints of Using uv_queue_work() -The following figure illustrates a simplified workflow of the libuv thread pool. The default pending flag of the handle is 1. The number of worker threads is an example only. +**uv_queue_work()** is only used to throw asynchronous tasks. The **execute()** callback of an asynchronous task added to the thread pool will be scheduled and executed. Therefore, it does not guarantee that tasks and their callbacks submitted multiple times will be executed in the order they were submitted. -![](./figures/libuv-thread-pool.png) +**uv_queue_work()** can be called only on the loop thread. This prevents multi-threading issues. Do not use **uv_queue_work()** as a means for inter-thread communication. Specifically, do not use **uv_queue_work** to throw an asynchronous task from thread A to thread B, setting **execute()** to an empty task and executing the **complete()** callback on thread B. This approach is not only inefficient but increases the difficulty in locating faults. To avoid inefficient task submission, use [napi_threadsafe_function](#thread-safe-apis-for-cross-thread-sharing-and-invocation). ### Use of libuv in OpenHarmony @@ -1180,9 +1352,9 @@ Currently, libuv threads are used in the main thread, JS Worker thread, TaskWork As a result, all the uv APIs that are not triggered by an FD event in the main thread are not responded in a timely manner. The uv APIs on the JS worker threads work as expected. -In addition, in the application main thread, all asynchronous tasks are eventually executed through libuv. However, in the current system, [the libuv thread pool has been incorporated to the FFRT](https://gitee.com/openharmony/third_party_libuv/wikis/06-Wiki- %E6%8A %80%E6%9C %AF %E8%B5%84%E6%BA %90/ %20libuv %E5%B7%A5%E4%BD %9C %E7%BA %BF %E7%A8%8B %E6%8E %A5%E5%85%A5FFRT %E6%96%B9%E6%A1%88%E5%88%86%E6%9E %90). Any asynchronous task thrown to the libuv thread will be scheduled by the FFRT thread. The callbacks of the application main thread are also inserted into the **eventhandler** queue by **PostTask()**. This means that after the asynchronous task in an FFRT thread is complete, the callback of the main thread is not triggered by **uv_async_send**. The following figure shows the process. +In addition, in the application main thread, all asynchronous tasks are eventually executed through libuv. However, in the current system, [the libuv thread pool has been incorporated to the FFRT](https://gitee.com/openharmony/third_party_libuv/wikis/06-Wiki- %E6%8A %80%E6%9C %AF %E8%B5%84%E6%BA %90/ %20libuv %E5%B7%A5%E4%BD %9C %E7%BA %BF %E7%A8%8B %E6%8E %A5%E5%85%A5FFRT %E6%96%B9%E6%A1%88%E5%88%86%E6%9E %90). Any asynchronous task thrown to the libuv thread will be scheduled by the FFRT thread. The callbacks of the application main thread are also inserted into the **eventhandler** queue by **PostTask()**. This means that after the async task in an FFRT thread is complete, the callback of the main thread is not triggered by **uv_async_send**. The following figure shows the process. -![](./figures/libuv-ffrt.png) +![Usage of the libuv asynchronous thread pool in OpenHarmony](./figures/libuv-ffrt.jpg) The following types of requests can be processed as expected in the application main loop: @@ -1192,14 +1364,14 @@ The following types of requests can be processed as expected in the application ```cpp /** -* Adds a work request to an event loop queue. +* @brief Adds a work request to an event loop queue. * -* @param loop indicates the pointer to the event loop. -* @param req indicates the pointer to the request. -* @param buf indicates the buffer for storing the random number. -* @param buflen indicates the length of the buffer. -* @param flags Indicates the options for generating a random number. The value is an unsigned integer. -* @param cb indicates the callback used to return the random number generated. +* @param loop Pointer to the event loop. +* @param req Pointer to the request. +* @param buf Buffer for storing the random number. +* @param buflen Length of the buffer. +* @param flags Options for generating a random number. The value is an unsigned integer. +* @param cb Callback used to return the random number generated. * * @return Returns 0 if the operation is successful; returns an error code otherwise. */ @@ -1217,15 +1389,12 @@ int uv_random(uv_loop_t* loop, ```cpp /** -* Adds a work request to an event loop queue. -* -* work_cb will be called by a new thread in the next iteration of the event loop. -* When work_cb is complete, after_work_cb will be called on the event loop thread. +* @brief Adds a work request to an event loop queue. **work_cb** will be called by a new thread in the next iteration of the event loop. When **work_cb** is complete, **after_work_cb** will be called on the event loop thread. * -* @param loop indicates the pointer to the event loop. -* @param req indicates the pointer to the work request. -* @param work_cb indicates the callback to be executed on a new thread. -* @param after_work_cb indicates the callback to be invoked on the event loop thread. +* @param loop Pointer to the event loop. +* @param req Pointer to the work request. +* @param work_cb Callback to be executed on a new thread. +* @param after_work_cb Callback to be invoked on the event loop thread. * * @return Returns 0 if the operation is successful; returns -1 otherwise. */ @@ -1241,15 +1410,15 @@ int uv_queue_work(uv_loop_t* loop, ```cpp /** -* Reads a file asynchronously. +* @brief Reads a file asynchronously. * -* @param loop indicates the pointer to the event loop. -* @param req indicates the pointer to the file operation request. -* @param file indicates the file descriptor. -* @param bufs indicates an array of buffers for storing the data read. -* @param nbufs indicates the number of buffers. -* @param off indicates the offset in the file from which data is read. -* @param cb indicates the callback to be invoked when the read operation is complete. +* @param loop Pointer to the event loop. +* @param req Pointer to the file operation request. +* @param file File descriptor. +* @param bufs An array of buffers for storing the data read. +* @param nbufs Number of buffers. +* @param off Offset in the file from which data is read. +* @param cb Callback to be invoked when the read operation is complete. * @return Returns 0 if the operation is successful; returns -1 otherwise. */ int uv_fs_read(uv_loop_t* loop, uv_fs_t* req, @@ -1260,14 +1429,14 @@ int uv_fs_read(uv_loop_t* loop, uv_fs_t* req, uv_fs_cb cb); /** -* Opens a file asynchronously. +* @brief Opens a file asynchronously. * -* @param loop indicates the pointer to the event loop. -* @param req indicates the pointer to the file operation request. -* * @param path indicates the pointer to the path of the file to open. -* @param flags indicates the modes for opening the file. -* * @param mode indicates the permission on the file. -* @param cb indicates the callback to be invoked when the file is opened. +* @param loop Pointer to the event loop. +* @param req Pointer to the file operation request. +* @param path Pointer to the path of the file to open. +* @param flags Modes for opening the file. +* @param mode Permission on the file. +* @param cb Callback to be invoked when the file is opened. * * @return Returns 0 if the operation is successful; returns -1 otherwise. */ @@ -1279,15 +1448,15 @@ int uv_fs_open(uv_loop_t* loop, uv_fs_cb cb); /** -* Sends data from a file to another asynchronously. +* @brief Sends data from a file to another asynchronously. * -* @param loop indicates the pointer to the event loop. -* @param req indicates the pointer to the file operation request. -* @param out_fd indicates the file descriptor of the destination file. -* @param in_fd indicates the file descriptor of the source file. -* @param off indicates the offset in the source file from which data is sent. -* @param len indicates the length of the data to be sent. -* @param cb indicates the callback to be invoked when the data is sent. +* @param loop Pointer to the event loop. +* @param req Pointer to the file operation request. +* @param out_fd File descriptor of the destination file. +* @param in_fd File descriptor of the source file. +* @param off Offset in the source file from which data is sent. +* @param len Length of the data to be sent. +* @param cb Callback to be invoked when the data is sent. * * @return Returns 0 if the operation is successful; returns -1 otherwise. */ @@ -1300,15 +1469,15 @@ int uv_fs_sendfile(uv_loop_t* loop, uv_fs_cb cb); /** -* Writes data to a file asynchronously. +* @brief Writes data to a file asynchronously. * -* @param loop indicates the pointer to the event loop. -* @param req indicates the pointer to the file operation request. -* @param file indicates the file descriptor. -* * @param data indicates an array of buffers for storing the data to be written. -* @param nbufs indicates the number of buffers. -* @param off indicates the offset in the file from which data is written. -* @param cb indicates the callback to be invoked when the read operation is complete. +* @param loop Pointer to the event loop. +* @param req Pointer to the file operation request. +* @param file File descriptor. +* * @param data An array of buffers for storing the data to be written. +* @param nbufs Number of buffers. +* @param off Offset in the file from which data is written. +* @param cb Callback to be invoked when the read operation is complete. * * @return Returns 0 if the operation is successful; returns -1 otherwise. */ @@ -1321,14 +1490,14 @@ int uv_fs_write(uv_loop_t* loop, uv_fs_cb cb); /** -* Copies a file asynchronously. +* @brief Copies a file asynchronously. * -* @param loop indicates the pointer to the event loop. -* @param req indicates the pointer to the file operation request. -* @param path indicates the pointer to the path of the file to copy. -* @param new_path indicates the pointer to the destination path. -* @param flags indicates the options for the copy operation. -* @param cb indicates the callback to be invoked when the copy operation is complete. +* @param loop Pointer to the event loop. +* @param req Pointer to the file operation request. +* @param path Pointer to the path of the file to copy. +* @param new_path Pointer to the destination path. +* @param flags Options for the copy operation. +* @param cb Callback to be invoked when the copy operation is complete. * * @return Returns 0 if the operation is successful; returns -1 otherwise. */ @@ -1346,14 +1515,14 @@ int uv_fs_copyfile(uv_loop_t* loop, ```cpp /** -* Obtains address information asynchronously. +* @brief Obtains address information asynchronously. * -* @param loop indicates the pointer to the event loop. -* @param req indicates the pointer to the request for obtaining address information. -* @param cb indicates the callback to be invoked when the address information is obtained. -* @param hostname indicates the pointer to the host name to resolve. -* @param service indicates the pointer to the service name. -* @param hints indicates the pointer to the address information with additional address type constraints. +* @param loop Pointer to the event loop. +* @param req Pointer to the request for obtaining address information. +* @param cb Callback to be invoked when the address information is obtained. +* @param hostname Pointer to the host name to resolve. +* @param service Pointer to the service name. +* @param hints Pointer to the address information with additional address type constraints. * * @return Returns 0 if the operation is successful; returns -1 otherwise. */ @@ -1371,13 +1540,13 @@ int uv_getaddrinfo(uv_loop_t* loop, ```cpp /** -* Obtains name information asynchronously. +* @brief Obtains name information asynchronously. * -* @param loop indicates the pointer to the event loop. -* @param req indicates the pointer to the request. -* @param cb indicates the callback to be invoked when the name information is obtained. -* @param addr indicates the pointer to the address information to resolve. -* @param flags indicates the flags for controlling the behavior of the lookup. +* @param loop Pointer to the event loop. +* @param req Pointer to the request. +* @param cb Callback to be invoked when the name information is obtained. +* @param addr Pointer to the address information to resolve. +* @param flags Flags for controlling the behavior of the lookup. * * @return Returns 0 if the operation is successful; returns -1 otherwise. */ diff --git a/en/application-dev/reference/native-lib/musl.md b/en/application-dev/reference/native-lib/musl.md index fad289d318a..5094f607e54 100644 --- a/en/application-dev/reference/native-lib/musl.md +++ b/en/application-dev/reference/native-lib/musl.md @@ -132,7 +132,7 @@ The following lists the character encoding formats and aliases supported by musl [Native API Symbols Not Exported](musl-peculiar-symbol.md) -[Restricted musl libc APIs](guidance-on-ndk-libc-interfaces-affected-by-permissions.md) - +[NDK-Related musl libc Interface Usage Restrictions](guidance-on-ndk-libc-interfaces-affected-by-permissions.md) +[NDK musl-libc Supplementary APIs](https://gitee.com/openharmony/third_party_musl/tree/master/docs) diff --git a/en/application-dev/reference/native-lib/napi.md b/en/application-dev/reference/native-lib/napi.md index 6a5939cbeda..a5b4fdfe5cc 100644 --- a/en/application-dev/reference/native-lib/napi.md +++ b/en/application-dev/reference/native-lib/napi.md @@ -256,7 +256,7 @@ The APIs exported from the native Node-API library feature usage and behaviors b **NOTE** -- In OpenHarmory, if the **napi_finalize** callback is registered when a strong reference is created, calling this API will trigger the **napi_finalize** callback. +- In OpenHarmony, if the **napi_finalize** callback is registered when a strong reference is created, calling this API will trigger the **napi_finalize** callback. ### napi_create_symbol @@ -714,8 +714,11 @@ The APIs exported from the native Node-API library feature usage and behaviors b |FUNC|napi_wrap_sendable | Wraps a native instance into an ArkTS object.|12| |FUNC|napi_wrap_sendable_with_size | Wraps a native instance into an ArkTS object with the specified size.|12| |FUNC|napi_unwrap_sendable | Unwraps the native instance from an ArkTS object.|12| -|FUNC|napi_remove_wrap_sendable | Removes the native instance from an ArkTS object.|12| +|FUNC|napi_remove_wrap_sendable | Removes and obtains the native instance wrapped by an ArkTS object. After removal, the callback will no longer be triggered and must be manually deleted to free memory.|12| |FUNC|napi_wrap_enhance | Wraps a Node-API instance into an ArkTS object and specifies the instance size. You can specify whether to execute the registered callback asynchronously (if asynchronous, it must be thread-safe).|18| +|FUNC|napi_create_ark_context|Creates a new runtime context environment.|20| +|FUNC|napi_switch_ark_context|Switches to the specified runtime context environment.|20| +|FUNC|napi_destroy_ark_context|Destroys a context environment created by **napi_create_ark_context**.|20| > **NOTE** > @@ -739,7 +742,7 @@ Enumerates the QoS levels, which determine the priority of thread scheduling. ```cpp typedef enum { - napi_event_mode_default = 0, // Run the underlying event loop while blocking the current thread, and exit the event loop only when there is no task in the loop. + napi_event_mode_default = 0, // Run the underlying event loop while blocking the current thread, and exit the event loop only when there is no task in the loop. napi_event_mode_nowait = 1, // Run the underlying event loop without blocking the current thread. Process a task and exit the event loop after the task is complete. If there is no task in the event loop, exit the event loop immediately. } napi_event_mode; ``` @@ -919,7 +922,7 @@ napi_status napi_create_ark_runtime(napi_env *env) **Description** -Creates an ArkTS runtime environment. A process allows up to 64 instances, and the total number of subthreads, including those created by [Worker](../../arkts-utils/worker-introduction.md), cannot exceed 80. +Creates a runtime environment. A process allows up to 64 instances, and the total number of child threads, including those created by [Worker](../../arkts-utils/worker-introduction.md), cannot exceed 80. **Parameters** @@ -1196,7 +1199,7 @@ Creates a sendable object with the given **napi_property_descriptor**. - **property_count**: number of properties of the class. This parameter is of the size_t type. -- **properties**: pointer to the properties of the sendable object to create. +- **properties**: pointer to the descriptors of the properties. This parameter of the const napi_property_descriptor* type. - **result**: pointer to the sendable class created. This parameter is of the napi_value type. @@ -1396,7 +1399,7 @@ napi_status napi_remove_wrap_sendable(napi_env env, napi_value js_object, void** **Description** -Removes the native instance from an ArkTS object. +Removes and obtains the native instance wrapped by an ArkTS object. After removal, the callback will no longer be triggered and must be manually deleted to free memory. **Parameters** @@ -1455,7 +1458,79 @@ Wraps a Node-API instance into an ArkTS object and specifies the instance size. - **napi_pending_exception**: An uncaught exception or an exception occurs during the execution. -#### **napi_finalize** description +### napi_create_ark_context + +```cpp +napi_status napi_create_ark_context(napi_env env, napi_env* newEnv); +``` + +**Description** + +Creates a new runtime context environment. + +Note the following when using this API: + +1. Only new context environments created through the initial context environment are supported. It is prohibited to create new context environments using the context environment created by this API. +2. Currently, this API cannot be called on ArkTS threads that are not the main thread. +3. Before calling this API, ensure that the current context environment is normal. Otherwise, the API call fails. +4. The context environment created by this API can only load some native.so files of ArkUI. Loading application-specific native .so files and common basic library native so files is not supported. +5. The multi-context runtime environment does not support the sendable feature. +6. The runtime context environment created through **napi_create_ark_context** does not support module capabilities such as console and timer. + +**Parameters** + +- **env**: environment, in which the API is invoked. + +- newEnv: pointer to the new runtime context environment. + +**Return value** + +**napi_ok** if the operation is successful. + +### napi_switch_ark_context + +```cpp +napi_status napi_switch_ark_context(napi_env env) +``` + +**Description** + +Switches to the specified runtime context environment. Note the following when using this API: + +1. Currently, this API does not support calls in ArkTS threads that are not the main thread. +2. Before calling this API, ensure that the current context environment is normal. Otherwise, the API call fails. + +**Parameters** + +- env: specified runtime context environment. + +**Return value** + +**napi_ok** if the operation is successful. + +### napi_destroy_ark_context + +```cpp +napi_status napi_destroy_ark_context(napi_env env) +``` + +**Description** + +Destroys a context environment created by **napi_create_ark_context**. Note the following when using this API: + +1. Currently, this API does not support calls in ArkTS threads that are not the main thread. +2. This API can only be used to destroy runtime context environments created by calling **napi_create_ark_context**. +3. You cannot use this API to destroy a context environment that is currently in use. + +**Parameters** + +- env: runtime context to be destroyed. + +**Return value** + +**napi_ok** if the operation is successful. + +### **napi_finalize** description ```cpp typedef void (*napi_finalize)(napi_env env, diff --git a/en/application-dev/reference/native-lib/opengl-symbol.md b/en/application-dev/reference/native-lib/opengl-symbol.md new file mode 100644 index 00000000000..bc842d894ce --- /dev/null +++ b/en/application-dev/reference/native-lib/opengl-symbol.md @@ -0,0 +1,228 @@ +# OpenGL 3.0 Symbols Exported from Native APIs + +|Type|Symbol| +| --- | --- | +|FUNC|glActiveTexture +|FUNC|glActiveTextureARB +|FUNC|glAttachShader +|FUNC|glBindAttribLocation +|FUNC|glBindBuffer +|FUNC|glBindBufferARB +|FUNC|glBindBufferBase +|FUNC|glBindBufferRange +|FUNC|glBindFramebuffer +|FUNC|glBindImageTexture +|FUNC|glBindRenderbuffer +|FUNC|glBindTexture +|FUNC|glBindVertexArray +|FUNC|glBindVertexBuffer +|FUNC|glBlendColor +|FUNC|glBlendEquation +|FUNC|glBlendEquationSeparate +|FUNC|glBlendFunc +|FUNC|glBlendFunci +|FUNC|glBlendFuncSeparate +|FUNC|glBlitFramebuffer +|FUNC|glBufferData +|FUNC|glBufferDataARB +|FUNC|glBufferStorage +|FUNC|glBufferSubData +|FUNC|glBufferSubDataARB +|FUNC|glCheckFramebufferStatus +|FUNC|glClampColor +|FUNC|glClear +|FUNC|glClearBufferfv +|FUNC|glClearBufferData +|FUNC|glClearBufferSubData +|FUNC|glClearColor +|FUNC|glClearDepth +|FUNC|glClearDepthf +|FUNC|glClearStencil +|FUNC|glClientWaitSync +|FUNC|glColor4f +|FUNC|glColorMask +|FUNC|glCompileShader +|FUNC|glCompressedTexImage2D +|FUNC|glCompressedTexSubImage2D +|FUNC|glCopyBufferSubData +|FUNC|glCopyTexSubImage2D +|FUNC|glCreateProgram +|FUNC|glCreateShader +|FUNC|glCullFace +|FUNC|glDebugMessageCallback +|FUNC|glDeleteBuffers +|FUNC|glDeleteBuffersARB +|FUNC|glDeleteFramebuffers +|FUNC|glDeleteProgram +|FUNC|glDeleteRenderbuffers +|FUNC|glDeleteShader +|FUNC|glDeleteSync +|FUNC|glDeleteTextures +|FUNC|glDeleteVertexArrays +|FUNC|glDepthFunc +|FUNC|glDepthMask +|FUNC|glDisable +|FUNC|glDepthRange +|FUNC|glDepthRangef +|FUNC|glDetachShader +|FUNC|glDisablevertexAttribArray +|FUNC|glDispatchCompute +|FUNC|glDrawArrays +|FUNC|glDrawArraysInstanced +|FUNC|glDrawBuffer +|FUNC|glDrawBuffers +|FUNC|glDrawBuffersARB +|FUNC|glDrawElements +|FUNC|glDrawElementsBaseVertex +|FUNC|glDrawElementsInstanced +|FUNC|glDrawElementsInstancedBaseVertex +|FUNC|glEnable +|FUNC|glEnableVertexAttribArray +|FUNC|glFenceSync +|FUNC|glFinish +|FUNC|glFlush +|FUNC|glFlushMappedBufferRange +|FUNC|glFramebufferRenderbuffer +|FUNC|glFramebufferTexture +|FUNC|glFramebufferTexture2D +|FUNC|glFrontFace +|FUNC|glGenBuffers +|FUNC|glGenBuffersARB +|FUNC|glGenerateMipmap +|FUNC|glGenFramebuffers +|FUNC|glGenRenderbuffers +|FUNC|glGenTextures +|FUNC|glGenVertexArrays +|FUNC|glGetActiveAttrib +|FUNC|glGetActiveUniform +|FUNC|glGetAttachedShaders +|FUNC|glGetAttribLocation +|FUNC|glGetBooleanv +|FUNC|glGetBufferParameteriv +|FUNC|glGetBufferSubData +|FUNC|glGetBufferSubDataARB +|FUNC|glGetError +|FUNC|glGetFramebufferAttachmentParameteriv +|FUNC|glGetIntegeri_v +|FUNC|glGetIntegerv +|FUNC|glGetProgramBinary +|FUNC|glGetProgramInfoLog +|FUNC|glGetProgramiv +|FUNC|glGetProgramResourceIndex +|FUNC|glGetRenderbufferParameteriv +|FUNC|glGetShaderInfoLog +|FUNC|glGetShaderiv +|FUNC|glGetShaderPrecisionFormat +|FUNC|glGetShaderSource +|FUNC|glGetString +|FUNC|glGetTexImage +|FUNC|glGetUniformfv +|FUNC|glGetUniformiv +|FUNC|glGetUniformLocation +|FUNC|glGetVertexAttribfv +|FUNC|glGetVertexAttribiv +|FUNC|glGetVertexAttribPointerv +|FUNC|glInvalidateBufferSubData +|FUNC|glIsBuffer +|FUNC|glIsFramebuffer +|FUNC|glIsProgram +|FUNC|glIsRenderbuffer +|FUNC|glIsShader +|FUNC|glLineWidth +|FUNC|glLinkProgram +|FUNC|glMapBuffer +|FUNC|glMapBufferRange +|FUNC|glMemoryBarrier +|FUNC|glMultiDrawArrays +|FUNC|glMultiDrawElements +|FUNC|glMultiDrawElementsIndirect +|FUNC|glPatchParameteri +|FUNC|glPixelStorei +|FUNC|glPointSize +|FUNC|glPolygonMode +|FUNC|glPolygonOffset +|FUNC|glPopDebugGroup +|FUNC|glPrimitiveRestartIndex +|FUNC|glProgramBinary +|FUNC|glProgramParameteri +|FUNC|glPushDebugGroup +|FUNC|glReadBuffer +|FUNC|glReadpixels +|FUNC|glReleaseShaderCompiler +|FUNC|glRenderbufferStorage +|FUNC|glRenderbufferStorageMultisample +|FUNC|glSampleCoverage +|FUNC|glScissor +|FUNC|glShadeModel +|FUNC|glShaderBinary +|FUNC|glShaderSource +|FUNC|glShaderStorageBlockBinding +|FUNC|glStencilFunc +|FUNC|glStencilFuncSeparate +|FUNC|glStencilMask +|FUNC|glStencilMaskSeparate +|FUNC|glStencilOp +|FUNC|glStencilOpSeparate +|FUNC|glTexBuffer +|FUNC|glTexImage1D +|FUNC|glTexImage2D +|FUNC|glTexImage2DMultisample +|FUNC|glTexParameterfv +|FUNC|glTexParameteri +|FUNC|glTexSubImage2D +|FUNC|glUniform1dv +|FUNC|glUniform1f +|FUNC|glUniform1fv +|FUNC|glUniform1fvARB +|FUNC|glUniform1i +|FUNC|glUniform1iARB +|FUNC|glUniform1iv +|FUNC|glUniform1ivARB +|FUNC|glUniform1ui +|FUNC|glUniform2dv +|FUNC|glUniform2f +|FUNC|glUniform2fv +|FUNC|glUniform2fvARB +|FUNC|glUniform2i +|FUNC|glUniform2iv +|FUNC|glUniform2ivARB +|FUNC|glUniform3dv +|FUNC|glUniform3f +|FUNC|glUniform3fv +|FUNC|glUniform3fvARB +|FUNC|glUniform3i +|FUNC|glUniform3iv +|FUNC|glUniform3ivARB +|FUNC|glUniform4dv +|FUNC|glUniform4f +|FUNC|glUniform4fv +|FUNC|glUniform4fvARB +|FUNC|glUniform4i +|FUNC|glUniform4iv +|FUNC|glUniform4ivARB +|FUNC|glUniformMatrix2fv +|FUNC|glUniformMatrix2fvARB +|FUNC|glUniformMatrix3dv +|FUNC|glUniformMatrix3fv +|FUNC|glUniformMatrix3fvARB +|FUNC|glUniformMatrix4dv +|FUNC|glUniformMatrix4fv +|FUNC|glUniformMatrix4fvARB +|FUNC|glUnmapBuffer +|FUNC|glUseProgram +|FUNC|glValidateProgram +|FUNC|glVertexAttribBinding +|FUNC|glVertexAttrib1f +|FUNC|glVertexAttrib1fv +|FUNC|glVertexAttrib2f +|FUNC|glVertexAttrib2fv +|FUNC|glVertexAttrib3f +|FUNC|glVertexAttrib3fv +|FUNC|glVertexAttrib4f +|FUNC|glVertexAttrib4fv +|FUNC|glVertexAttribDivisor +|FUNC|glVertexAttribIFormat +|FUNC|glVertexAttribIPointer +|FUNC|glVertexAttribLPointer +|FUNC|glVertexAttribPointer +|FUNC|glViewport diff --git a/en/application-dev/reference/native-lib/opengl.md b/en/application-dev/reference/native-lib/opengl.md new file mode 100644 index 00000000000..48a7680bebe --- /dev/null +++ b/en/application-dev/reference/native-lib/opengl.md @@ -0,0 +1,65 @@ +# OpenGL + +[OpenGL](https://www.khronos.org/opengl/) is a cross-platform graphics API that specifies a standard software interface for 3D graphics processing hardware. OpenHarmony supports OpenGL 3.0. + +## Supported Capabilities + +OpenGL 3.0 + +## Symbols Exported from the Standard Library + +[OpenGL 3.0 Symbols Exported from Native APIs](opengl-symbol.md) + +## OpenGL Extensions and Examples + +For details about the OpenGL extensions and their usage, see [OpenGL ES Extensions](opengles.md#opengl-es-extensions). + +For details about how to use these extensions, see [OpenGL ES Example](opengles.md#example). + +## Introducing OpenGL + +To use OpenGL capabilities, you must add related dynamic link libraries (DLLs) and header files. + +**Adding Dynamic Link Libraries** + +Add the following libraries to **CMakeLists.txt**. + +```txt +libace_ndk.z.so +libace_napi.z.so +libGLv4.so +libEGL.so +``` + +**Including Header Files** + +```c++ +#include +#include +#include +#include +#include +#include +``` +**Modifying the app.json5 Configuration File** +```c++ +"appEnvironments": [ + { + "name":"NEED_OPENGL", + "value": "1" + } +], +``` + + +## References + +To use the OpenGL API in your application development, familiarize yourself with the NDK development process and the **XComponent** usage, which are described in the following topics: + +- [Getting Started with the NDK](../../napi/ndk-development-overview.md) + +- [Node-API](./napi.md) + +- [XComponentNode](../apis-arkui/js-apis-arkui-xcomponentNode.md) + +- [XComponent](../apis-arkui/arkui-ts/ts-basic-components-xcomponent.md) diff --git a/en/application-dev/reference/native-lib/opengles.md b/en/application-dev/reference/native-lib/opengles.md index ccec72b13e8..caba8a93e55 100644 --- a/en/application-dev/reference/native-lib/opengles.md +++ b/en/application-dev/reference/native-lib/opengles.md @@ -232,7 +232,7 @@ EGLDisplay eglGetDisplay(EGLNativeDisplayType display_id); The **eglGetDisplay** function returns an **EGLDisplay** object, which represents the connection to an EGL display. If no connection is available, **EGL_NO_DISPLAY** is returned. -The **display_id** parameter indicates the local display type of the display. The **EGLNativeDisplayType** parameter is the native window display type, which has different definitions on different platforms. If you just want to use the default display, use **EGL_DEFAULT_DISPLAY** without explicitly specifying **display_id**. +The **display_id** parameter indicates the local display type of the display. The **EGLNativeDisplayType** parameter is the window display type, which has different definitions on different platforms. If you just want to use the default display, use **EGL_DEFAULT_DISPLAY** without explicitly specifying **display_id**. ### Using eglInitialize to Initialize the EGL Display Connection Call **eglInitialize** to initialize the EGL display connection obtained. @@ -263,14 +263,14 @@ Generally, you can use this method because it is easier to obtain the optimal co ```cpp // Here, the following attributes are used: - EGLint attribs[] = {EGL_RENDERABLE_TYPE, EGL_OPENGL_ES3_BIT, -// The renderable type is OpenGL ES 3. + EGLint attribs[] = {EGL_RENDERABLE_TYPE, EGL_OPENGL_ES3_BIT, // The renderable type is OpenGL ES 3. EGL_BLUE_SIZE, 6, // The number of bits in the blue buffer is 6. EGL_GREEN_SIZE, 8, // The number of bits in the green buffer is 8. EGL_RED_SIZE, 8, // The number of bits in the red buffer is 8. EGL_NONE}; eglChooseConfig(display, attribs, &config, 1, &numConfigs); ``` - In this example, the number of bits in the blue buffer is 6. To use six bits to represent the blue value 200 in the case of 8-bit RGB (ranging from 0 to 255), use the following formula for calculation: 64 x 200/256, where 64 is the maximum value that can be represented by six bits (2^6 = 64). After **eglChooseConfig** is called, the configurations that match the attributes are returned and stored in the **config** array. In the sample code, **config_size** is set to **1**, indicating that the size of the **config** array is 1. Only one set of configurations can be stored, but that's enough. **numconfigs** specifies the number of configurations that match the attributes. In this way, the desired **config** array is obtained. + In this example, the number of bits in the blue buffer is 6. To use six bits to represent the blue value 200 in the case of 8-bit RGB (ranging from 0 to 255), use the following formula for calculation: 64 x 200/256, where 64 is the maximum value that can be represented by six bits (2^6 = 64). After **eglChooseConfig** is called, the configurations that match the attributes are returned and stored in the **config** array. In the sample code, **config_size** is set to **1**, indicating that the size of the **config** array is 1. Only one set of configurations can be stored, but that's enough. **numconfigs** specifies the number of configurations that match the attributes. In this way, the desired **config** array is obtained. - Use **eglGetConfigs** to query all supported configurations and use **eglGetConfigAttrib** to filter the desired ones. The following describes how to use this method to obtain the desired configurations. @@ -355,7 +355,7 @@ After obtaining the EGL configurations that meet the rendering requirements, use ```cpp EGLSurface eglCreateWindowSurface(EGLDisplay dpy, // EGL display connection to be associated with the window surface. EGLConfig config, // EGL configuration of the window surface to create. - EGLNativeWindowType win, // Parameter of the EGLNativeWindowType type. It is the handle or identifier of the native window and is used to associate with the EGL surface. + EGLNativeWindowType win, // Parameter of the EGLNativeWindowType type. It is the handle or identifier of the window and is used to associate with the EGL surface. const EGLint *attrib_list); // Pointer to the EGL attribute list. It specifies the attributes of the window surface. It is an integer array terminating with EGL_NONE. ``` The following values can be passed in to **attrib_list** of **eglCreateWindowSurface**: @@ -368,13 +368,15 @@ EGL_BACK_BUFFER // There are a front buffer and a back buffer. After the renderi ``` The possible causes of a failure to call **eglCreateWindowSurface** are as follows: -- **EGL_BAD_MATCH**: The native window attributes do not match the EGL configuration. This may be because the EGL configuration does not support rendering to the window (the **EGL_SURFACE_TYPE** attribute is not set to **EGL_WINDOW_BIT**). +- **EGL_BAD_MATCH**: The window attributes do not match the EGL configuration. This may be because the EGL configuration does not support rendering to the window (the **EGL_SURFACE_TYPE** attribute is not set to **EGL_WINDOW_BIT**). - **EGL_BAD_CONFIG**: The EGL configuration is not supported by the system. -- **EGL_BAD_NATIVE_WINDOW**: The native window handle is invalid. +- **EGL_BAD_NATIVE_WINDOW**: The window handle is invalid. + +- **EGL_BAD_ALLOC**: Resources cannot be created for a new EGL window or there is already an EGL configuration associated with the window. + -- **EGL_BAD_ALLOC**: Resources cannot be created for a new EGL window or there is already an EGL configuration associated with the native window. ```cpp EGLint attribList[] = { EGL_RENDER_BUFFER, EGL_BACK_BUFFER, EGL_NONE }; @@ -400,61 +402,54 @@ if (surface == EGL_NO_SURFACE) { } ``` The process of using the **XComponent** to obtain a native window is as follows: -1. Define the **XComponent** and set the **XComponentController** in ArkTS. The **XComponent** is used to embed native rendering elements, such as OpenGL or Vulkan, into the UI. - - ```typescript - Column() { - XComponent({ - id: 'myXComponent', - type: XComponentType.SURFACE, - controller: this.xComponentController - }) - } - ``` - +1. Define the **XComponent** and set the **XComponentController** in ArkTS. The **XComponent** is used to embed rendering elements, such as OpenGL or Vulkan, into the UI. +```typescript +Column() { + XComponent({ + id: 'myXComponent', + type: XComponentType.SURFACE, + controller: this.xComponentController + }) +} +``` 2. Create an **XComponentController** subclass and implement its callbacks. +```typescript +class MyXComponentController extends XComponentController { + onSurfaceCreated(surfaceId: string): void { + console.log(`onSurfaceCreated surfaceId: ${surfaceId}`); + nativeRender.SetSurfaceId(BigInt(surfaceId)); + // The surface ID will be used to associate with the native window. + } - ```typescript - class MyXComponentController extends XComponentController { - onSurfaceCreated(surfaceId: string): void { - console.log(`onSurfaceCreated surfaceId: ${surfaceId}`); - nativeRender.SetSurfaceId(BigInt(surfaceId)); - // The surface ID will be used to associate with the native window. - } - - onSurfaceChanged(surfaceId: string, rect: SurfaceRect): void { - console.log(`onSurfaceChanged surfaceId: ${surfaceId}`); - } - - onSurfaceDestroyed(surfaceId: string): void { - console.log(`onSurfaceDestroyed surfaceId: ${surfaceId}`); - } - } - ``` - + onSurfaceChanged(surfaceId: string, rect: SurfaceRect): void { + console.log(`onSurfaceChanged surfaceId: ${surfaceId}`); + } + + onSurfaceDestroyed(surfaceId: string): void { + console.log(`onSurfaceDestroyed surfaceId: ${surfaceId}`); + } +} +``` 3. Use the surface ID to obtain a native window. - - The surface ID is generated during the creation of the **XComponent**. In the **onSurfaceCreated** callback, you can use **OH_NativeWindow_CreateNativeWindowFromSurfaceId** to obtain a native window based on the surface ID. - - ```cpp - napi_value PluginManager::SetSurfaceId(napi_env env, napi_callback_info info) - { - int64_t surfaceId = ParseId(env, info); - OHNativeWindow *nativeWindow; - PluginRender *pluginRender; - if (windowMap_.find(surfaceId) == windowMap_.end()) { - OH_NativeWindow_CreateNativeWindowFromSurfaceId(surfaceId, &nativeWindow); - windowMap_[surfaceId] = nativeWindow; - } - if (pluginRenderMap_.find(surfaceId) == pluginRenderMap_.end()) { - pluginRender = new PluginRender(surfaceId); - pluginRenderMap_[surfaceId] = pluginRender; - } - pluginRender->InitNativeWindow(nativeWindow); - return nullptr; - } - ``` - +The surface ID is generated during the creation of the **XComponent**. In the **onSurfaceCreated** callback, you can use **OH_NativeWindow_CreateNativeWindowFromSurfaceId** to obtain a native window based on the surface ID. +```cpp +napi_value PluginManager::SetSurfaceId(napi_env env, napi_callback_info info) +{ + int64_t surfaceId = ParseId(env, info); + OHNativeWindow *nativeWindow; + PluginRender *pluginRender; + if (windowMap_.find(surfaceId) == windowMap_.end()) { + OH_NativeWindow_CreateNativeWindowFromSurfaceId(surfaceId, &nativeWindow); + windowMap_[surfaceId] = nativeWindow; + } + if (pluginRenderMap_.find(surfaceId) == pluginRenderMap_.end()) { + pluginRender = new PluginRender(surfaceId); + pluginRenderMap_[surfaceId] = pluginRender; + } + pluginRender->InitNativeWindow(nativeWindow); + return nullptr; +} +``` For details about how to use the **XComponent**, see [ArkTS XComponent Usage Example](https://gitee.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Native/XComponent). ### Using eglCreateContext to Create a Rendering Context @@ -632,7 +627,7 @@ In the OpenGL ES rendering pipeline, the following steps describe the entire pro 6. Writing the frame to the buffer - After all the preceding tests and processing, the final fragment data is written into the frame buffer and displayed as an image on the screen. + After all the preceding tests and processing, the final fragment data is written into the frame buffer and displayed as an image on the screen. ### Creating and Using a Shader Program diff --git a/en/application-dev/reference/native-lib/openglesv3-symbol.md b/en/application-dev/reference/native-lib/openglesv3-symbol.md index 9d084add12c..cf11ed4761a 100644 --- a/en/application-dev/reference/native-lib/openglesv3-symbol.md +++ b/en/application-dev/reference/native-lib/openglesv3-symbol.md @@ -1,7 +1,7 @@ # OpenGL ES 3.2 Symbols Exported from Native APIs -|Type|Symbol|Remarks| -| --- | --- | --- | +|Type|Symbol| +| --- | --- | |FUNC|glActiveShaderProgram| |FUNC|glActiveTexture| |FUNC|glAttachShader| diff --git a/en/application-dev/reference/native-lib/opensles.md b/en/application-dev/reference/native-lib/opensles.md index 3654b4dcb41..d3c1c448593 100644 --- a/en/application-dev/reference/native-lib/opensles.md +++ b/en/application-dev/reference/native-lib/opensles.md @@ -1,8 +1,8 @@ # OpenSL ES > **NOTE** -> -> OpenHarmony provides the OpenSL ES APIs for audio development at the native layer since SDK 8. As the version evolves, these APIs fail to meet the capability expansion requirements of the audio system and therefore are no longer recommended. [Switch from OpenSL ES to OHAudio](../../media/audio/replace-opensles-by-ohaudio.md). +> OpenHarmony provides the OpenSL ES APIs for audio development at the native layer since SDK 8. As the version evolves, these APIs fail to meet the capability expansion requirements of the audio system and therefore are no longer recommended. +> [Switch from OpenSL ES to OHAudio](../../media/audio/replace-opensles-by-ohaudio.md). ## Introduction diff --git a/en/application-dev/reference/native-lib/vulkan-guidelines.md b/en/application-dev/reference/native-lib/vulkan-guidelines.md index 1f16ab6e42d..c0526312233 100644 --- a/en/application-dev/reference/native-lib/vulkan-guidelines.md +++ b/en/application-dev/reference/native-lib/vulkan-guidelines.md @@ -34,6 +34,10 @@ libnative_window.so libvulkan.so ``` +> **NOTE** +> +> When the **dlopen** function is used to link the **libvulkan.so** dynamic library in a program, you do not need to add dependencies in CMake. Otherwise, symbol conflicts occur. + **Including Header Files** ```c++ diff --git a/en/application-dev/reference/native-lib/vulkan.md b/en/application-dev/reference/native-lib/vulkan.md index 035436ca8f3..889d0a369f5 100644 --- a/en/application-dev/reference/native-lib/vulkan.md +++ b/en/application-dev/reference/native-lib/vulkan.md @@ -1,10 +1,10 @@ # Vulkan Capabilities -[Vulkan](https://www.vulkan.org/) is a set of 2D and 3D rendering APIs that feature cross-platform and high-performance. OpenHarmony now supports Vulkan v1.3.231. +[Vulkan](https://www.vulkan.org/) is a set of 2D and 3D rendering APIs that feature cross-platform and high-performance. OpenHarmony SDK now supports Vulkan v1.4.309, and the available version depends on the GPU driver implementation. ## Supported Standard APIs -The table below lists the supported APIs of Vulkan v1.3.231. +The table below lists the supported APIs of Vulkan v1.4.309. |Type|Symbol| | --- | --- | @@ -23,7 +23,9 @@ The table below lists the supported APIs of Vulkan v1.3.231. |FUNC|vkCmdBeginRenderPass| |FUNC|vkCmdBeginRenderPass2| |FUNC|vkCmdBindDescriptorSets| +|FUNC|vkCmdBindDescriptorSets2| |FUNC|vkCmdBindIndexBuffer| +|FUNC|vkCmdBindIndexBuffer2| |FUNC|vkCmdBindPipeline| |FUNC|vkCmdBindVertexBuffers| |FUNC|vkCmdBindVertexBuffers2| @@ -61,6 +63,11 @@ The table below lists the supported APIs of Vulkan v1.3.231. |FUNC|vkCmdPipelineBarrier| |FUNC|vkCmdPipelineBarrier2| |FUNC|vkCmdPushConstants| +|FUNC|vkCmdPushConstants2| +|FUNC|vkCmdPushDescriptorSet| +|FUNC|vkCmdPushDescriptorSet2| +|FUNC|vkCmdPushDescriptorSetWithTemplate| +|FUNC|vkCmdPushDescriptorSetWithTemplate2| |FUNC|vkCmdResetEvent| |FUNC|vkCmdResetEvent2| |FUNC|vkCmdResetQueryPool| @@ -79,10 +86,13 @@ The table below lists the supported APIs of Vulkan v1.3.231. |FUNC|vkCmdSetEvent| |FUNC|vkCmdSetEvent2| |FUNC|vkCmdSetFrontFace| +|FUNC|vkCmdSetLineStipple| |FUNC|vkCmdSetLineWidth| |FUNC|vkCmdSetPrimitiveRestartEnable| |FUNC|vkCmdSetPrimitiveTopology| |FUNC|vkCmdSetRasterizerDiscardEnable| +|FUNC|vkCmdSetRenderingAttachmentLocations| +|FUNC|vkCmdSetRenderingInputAttachmentIndices| |FUNC|vkCmdSetScissor| |FUNC|vkCmdSetScissorWithCount| |FUNC|vkCmdSetStencilCompareMask| @@ -97,6 +107,9 @@ The table below lists the supported APIs of Vulkan v1.3.231. |FUNC|vkCmdWaitEvents2| |FUNC|vkCmdWriteTimestamp| |FUNC|vkCmdWriteTimestamp2| +|FUNC|vkCopyImageToImage| +|FUNC|vkCopyImageToMemory| +|FUNC|vkCopyMemoryToImage| |FUNC|vkCreateBuffer| |FUNC|vkCreateBufferView| |FUNC|vkCreateCommandPool| @@ -111,6 +124,7 @@ The table below lists the supported APIs of Vulkan v1.3.231. |FUNC|vkCreateFence| |FUNC|vkCreateFramebuffer| |FUNC|vkCreateGraphicsPipelines| +|FUNC|vkCreateHeadlessSurfaceEXT| |FUNC|vkCreateImage| |FUNC|vkCreateImageView| |FUNC|vkCreateInstance| @@ -126,6 +140,7 @@ The table below lists the supported APIs of Vulkan v1.3.231. |FUNC|vkCreateShaderModule| |FUNC|vkCreateSharedSwapchainsKHR| |FUNC|vkCreateSwapchainKHR| +|FUNC|vkCreateWin32SurfaceKHR| |FUNC|vkDestroyBuffer| |FUNC|vkDestroyBufferView| |FUNC|vkDestroyCommandPool| @@ -175,6 +190,7 @@ The table below lists the supported APIs of Vulkan v1.3.231. |FUNC|vkGetDeviceGroupSurfacePresentModesKHR| |FUNC|vkGetDeviceImageMemoryRequirements| |FUNC|vkGetDeviceImageSparseMemoryRequirements| +|FUNC|vkGetDeviceImageSubresourceLayout| |FUNC|vkGetDeviceMemoryCommitment| |FUNC|vkGetDeviceMemoryOpaqueCaptureAddress| |FUNC|vkGetDeviceProcAddr| @@ -192,6 +208,7 @@ The table below lists the supported APIs of Vulkan v1.3.231. |FUNC|vkGetImageSparseMemoryRequirements| |FUNC|vkGetImageSparseMemoryRequirements2| |FUNC|vkGetImageSubresourceLayout| +|FUNC|vkGetImageSubresourceLayout2| |FUNC|vkGetInstanceProcAddr| |FUNC|vkGetPhysicalDeviceDisplayPlaneProperties2KHR| |FUNC|vkGetPhysicalDeviceDisplayPlanePropertiesKHR| @@ -222,14 +239,17 @@ The table below lists the supported APIs of Vulkan v1.3.231. |FUNC|vkGetPhysicalDeviceSurfacePresentModesKHR| |FUNC|vkGetPhysicalDeviceSurfaceSupportKHR| |FUNC|vkGetPhysicalDeviceToolProperties| +|FUNC|vkGetPhysicalDeviceWin32PresentationSupportKHR| |FUNC|vkGetPipelineCacheData| |FUNC|vkGetPrivateData| |FUNC|vkGetQueryPoolResults| |FUNC|vkGetRenderAreaGranularity| +|FUNC|vkGetRenderingAreaGranularity| |FUNC|vkGetSemaphoreCounterValue| |FUNC|vkGetSwapchainImagesKHR| |FUNC|vkInvalidateMappedMemoryRanges| |FUNC|vkMapMemory| +|FUNC|vkMapMemory2| |FUNC|vkMergePipelineCaches| |FUNC|vkQueueBindSparse| |FUNC|vkQueuePresentKHR| @@ -245,8 +265,10 @@ The table below lists the supported APIs of Vulkan v1.3.231. |FUNC|vkSetEvent| |FUNC|vkSetPrivateData| |FUNC|vkSignalSemaphore| +|FUNC|vkTransitionImageLayout| |FUNC|vkTrimCommandPool| |FUNC|vkUnmapMemory| +|FUNC|vkUnmapMemory2| |FUNC|vkUpdateDescriptorSets| |FUNC|vkUpdateDescriptorSetWithTemplate| |FUNC|vkWaitForFences| @@ -261,5 +283,8 @@ In addition to the standard APIs, OpenHarmony provides extended APIs for creatin |FUNC|vkCreateSurfaceOHOS| |FUNC|vkGetNativeBufferPropertiesOHOS| |FUNC|vkGetMemoryNativeBufferOHOS| +|FUNC|vkGetSwapchainGrallocUsageOHOS| +|FUNC|vkAcquireImageOHOS| +|FUNC|vkQueueSignalReleaseImageOHOS| For details about the extended APIs, see [Vulkan Module](_vulkan.md). diff --git a/en/application-dev/reference/native-lib/vulkan__ohos_8h.md b/en/application-dev/reference/native-lib/vulkan__ohos_8h.md index 1db45666340..3a55f32c3f5 100644 --- a/en/application-dev/reference/native-lib/vulkan__ohos_8h.md +++ b/en/application-dev/reference/native-lib/vulkan__ohos_8h.md @@ -3,7 +3,9 @@ ## Overview -The **vulkan_ohos.h** file declares the Vulkan interfaces extended by OpenHarmony. File to include: <vulkan/vulkan.h> +The **vulkan_ohos.h** file declares the Vulkan interfaces extended by OpenHarmony. + +**File to include**: <vulkan/vulkan.h> **Since** @@ -64,6 +66,9 @@ The **vulkan_ohos.h** file declares the Vulkan interfaces extended by OpenHarmon | Name| Description| | -------- | -------- | -| [vkCreateSurfaceOHOS](_vulkan.md#vkcreatesurfaceohos) (VkInstance instance, const [VkSurfaceCreateInfoOHOS](_vk_surface_create_info_o_h_o_s.md) \*pCreateInfo, const VkAllocationCallbacks \*pAllocator, VkSurfaceKHR \*pSurface) | Creates a Vulkan surface.| -| [vkGetNativeBufferPropertiesOHOS](_vulkan.md#vkgetnativebufferpropertiesohos) (VkDevice device, const struct OH_NativeBuffer \*buffer, [VkNativeBufferPropertiesOHOS](_vk_native_buffer_properties_o_h_o_s.md) \*pProperties) | Obtains the properties of an **OH_NativeBuffer** instance.| -| [vkGetMemoryNativeBufferOHOS](_vulkan.md#vkgetmemorynativebufferohos) (VkDevice device, const [VkMemoryGetNativeBufferInfoOHOS](_vk_memory_get_native_buffer_info_o_h_o_s.md) \*pInfo, struct OH_NativeBuffer \*\*pBuffer) | Obtains an **OH_NativeBuffer** instance.| +| VKAPI_ATTR VkResult VKAPI_CALL [vkCreateSurfaceOHOS](_vulkan.md#vkcreatesurfaceohos) (VkInstance instance, const [VkSurfaceCreateInfoOHOS](_vk_surface_create_info_o_h_o_s.md) \*pCreateInfo, const VkAllocationCallbacks \*pAllocator, VkSurfaceKHR \*pSurface) | Creates a Vulkan surface. | +| VKAPI_ATTR VkResult VKAPI_CALL [vkGetNativeBufferPropertiesOHOS](_vulkan.md#vkgetnativebufferpropertiesohos) (VkDevice device, const struct OH_NativeBuffer \*buffer, [VkNativeBufferPropertiesOHOS](_vk_native_buffer_properties_o_h_o_s.md) \*pProperties) | Obtains the properties of an **OH_NativeBuffer** instance. | +| VKAPI_ATTR VkResult VKAPI_CALL [vkGetMemoryNativeBufferOHOS](_vulkan.md#vkgetmemorynativebufferohos) (VkDevice device, const [VkMemoryGetNativeBufferInfoOHOS](_vk_memory_get_native_buffer_info_o_h_o_s.md) \*pInfo, struct OH_NativeBuffer \*\*pBuffer) | Obtains an **OH_NativeBuffer** instance. | +| VKAPI_ATTR VkResult VKAPI_CALL [vkGetSwapchainGrallocUsageOHOS](_vulkan.md#vkgetswapchaingrallocusageohos) (VkDevice device, VkFormat format, VkImageUsageFlags imageUsage, uint64_t \*grallocUsage) | Returns the appropriate gralloc usage flag based on the given Vulkan device, image format, and image usage flag. | +| VKAPI_ATTR VkResult VKAPI_CALL [vkAcquireImageOHOS](_vulkan.md#vkacquireimageohos) (VkDevice device, VkImage image, int32_t nativeFenceFd, VkSemaphore semaphore, VkFence fence) | Obtains the ownership of the swap chain image and imports the fence of the external signal to the VkSemaphore and VkFence objects. | +| VKAPI_ATTR VkResult VKAPI_CALL [vkQueueSignalReleaseImageOHOS](_vulkan.md#vkqueuesignalreleaseimageohos) (VkQueue queue, uint32_t waitSemaphoreCount, const VkSemaphore \*pWaitSemaphores, VkImage image, int32_t \*pNativeFenceFd) | Sends a signal to the system hardware buffer to release an image once it is no longer needed so that other components can access it. | diff --git a/en/application-dev/reference/phone-syscap-list.md b/en/application-dev/reference/phone-syscap-list.md new file mode 100644 index 00000000000..49520b19569 --- /dev/null +++ b/en/application-dev/reference/phone-syscap-list.md @@ -0,0 +1,245 @@ +# SystemCapability List + +SystemCapability (SysCap) is a standalone feature in the operating system. + +Before using an API for development, you are advised to familiarize yourself with [SysCap](syscap.md), and then consult the following tables to see whether the SysCap set required for the API is supported by the target device type. + +> **NOTE** +> +> This list outlines the minimum system capabilities supported by the current version of phones. You can refer to the **default.json** file in the SDK for details. +> When developing applications for the current version of phones using the APIs corresponding to the system capabilities listed, you can call these APIs directly without needing to perform a **canIUse()** check beforehand. + +- SystemCapability.ArkUI.ArkUI.Full +- SystemCapability.ArkUI.ArkUI.Napi +- SystemCapability.ArkUI.ArkUI.Libuv +- SystemCapability.ArkUI.ArkUI.Lite +- SystemCapability.ArkUI.UiAppearance +- SystemCapability.Base +- SystemCapability.BundleManager.BundleFramework +- SystemCapability.BundleManager.BundleFramework.Overlay +- SystemCapability.BundleManager.DistributedBundleFramework +- SystemCapability.BundleManager.Zlib +- SystemCapability.Graphic.Graphic2D.EGL +- SystemCapability.Graphic.Graphic2D.GLES2 +- SystemCapability.Graphic.Graphic2D.GLES3 +- SystemCapability.Graphic.Graphic2D.WebGL +- SystemCapability.Graphic.Graphic2D.WebGL2 +- SystemCapability.Window.SessionManager +- SystemCapability.WindowManager.WindowManager.Core +- SystemCapability.Notification.CommonEvent +- SystemCapability.Notification.Notification +- SystemCapability.Notification.ReminderAgent +- SystemCapability.Notification.NotificationSettings +- SystemCapability.Notification.Emitter +- SystemCapability.Communication.IPC.Core +- SystemCapability.Communication.SoftBus.Core +- SystemCapability.Communication.NetManager.Core +- SystemCapability.Communication.NetManager.Ethernet +- SystemCapability.Communication.NetManager.NetSharing +- SystemCapability.Communication.NetManager.MDNS +- SystemCapability.Communication.NetManager.Vpn +- SystemCapability.Communication.NetStack +- SystemCapability.Communication.WiFi.Core +- SystemCapability.Communication.WiFi.STA +- SystemCapability.Communication.WiFi.AP.Core +- SystemCapability.Communication.WiFi.P2P +- SystemCapability.Communication.Bluetooth.Core +- SystemCapability.Location.Location.Core +- SystemCapability.Location.Location.Geocoder +- SystemCapability.Location.Location.Geofence +- SystemCapability.Location.Location.Gnss +- SystemCapability.MultimodalInput.Input.Core +- SystemCapability.MultimodalInput.Input.InputDevice +- SystemCapability.MultimodalInput.Input.InputMonitor +- SystemCapability.MultimodalInput.Input.InputConsumer +- SystemCapability.MultimodalInput.Input.InputSimulator +- SystemCapability.MultimodalInput.Input.Pointer +- SystemCapability.MultimodalInput.Input.ShortKey +- SystemCapability.MultimodalInput.Input.InfraredEmitter +- SystemCapability.PowerManager.BatteryManager.Extension +- SystemCapability.PowerManager.DisplayPowerManager +- SystemCapability.PowerManager.ThermalManager +- SystemCapability.PowerManager.PowerManager.Core +- SystemCapability.PowerManager.BatteryManager.Core +- SystemCapability.PowerManager.PowerManager.Extension +- SystemCapability.Multimedia.Media.Core +- SystemCapability.Multimedia.Media.AudioPlayer +- SystemCapability.Multimedia.Media.AudioRecorder +- SystemCapability.Multimedia.Media.VideoPlayer +- SystemCapability.Multimedia.Media.VideoRecorder +- SystemCapability.Multimedia.Media.CodecBase +- SystemCapability.Multimedia.Media.AudioCodec +- SystemCapability.Multimedia.Media.AudioDecoder +- SystemCapability.Multimedia.Media.AudioEncoder +- SystemCapability.Multimedia.Media.VideoDecoder +- SystemCapability.Multimedia.Media.VideoEncoder +- SystemCapability.Multimedia.Media.Spliter +- SystemCapability.Multimedia.Media.Muxer +- SystemCapability.Multimedia.Media.AVPlayer +- SystemCapability.Multimedia.Media.AVRecorder +- SystemCapability.Multimedia.Media.AVMetadataExtractor +- SystemCapability.Multimedia.Media.AVImageGenerator +- SystemCapability.Multimedia.Media.AVTranscoder +- SystemCapability.Multimedia.AVSession.Core +- SystemCapability.Multimedia.AVSession.Manager +- SystemCapability.Multimedia.AVSession.AVCast +- SystemCapability.Multimedia.Audio.Core +- SystemCapability.Multimedia.Audio.Renderer +- SystemCapability.Multimedia.Audio.Capturer +- SystemCapability.Multimedia.Audio.Device +- SystemCapability.Multimedia.Audio.Volume +- SystemCapability.Multimedia.Audio.Communication +- SystemCapability.Multimedia.Audio.Interrupt +- SystemCapability.Multimedia.Audio.Tone +- SystemCapability.Multimedia.Audio.PlaybackCapture +- SystemCapability.Multimedia.Camera.Core +- SystemCapability.Multimedia.Drm.Core +- SystemCapability.Multimedia.Image.Core +- SystemCapability.Multimedia.Image.ImageSource +- SystemCapability.Multimedia.Image.ImagePacker +- SystemCapability.Multimedia.Image.ImageReceiver +- SystemCapability.Multimedia.ImageEffect.Core +- SystemCapability.Multimedia.MediaLibrary.Core +- SystemCapability.Multimedia.MediaLibrary.DistributedCore +- SystemCapability.Multimedia.SystemSound.Core +- SystemCapability.Telephony.CoreService +- SystemCapability.Telephony.CallManager +- SystemCapability.Telephony.CellularData +- SystemCapability.Telephony.SmsMms +- SystemCapability.Telephony.StateRegistry +- SystemCapability.Global.I18n +- SystemCapability.Global.ResourceManager +- SystemCapability.Customization.ConfigPolicy +- SystemCapability.Customization.CustomConfig +- SystemCapability.Customization.EnterpriseDeviceManager +- SystemCapability.BarrierFree.Accessibility.Core +- SystemCapability.BarrierFree.Accessibility.Vision +- SystemCapability.BarrierFree.Accessibility.Hearing +- SystemCapability.ResourceSchedule.WorkScheduler +- SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask +- SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask +- SystemCapability.ResourceSchedule.UsageStatistics.App +- SystemCapability.ResourceSchedule.UsageStatistics.AppGroup +- SystemCapability.Utils.Lang +- SystemCapability.HiviewDFX.HiLog +- SystemCapability.HiviewDFX.HiTrace +- SystemCapability.HiviewDFX.Hiview.FaultLogger +- SystemCapability.HiviewDFX.Hiview.LogLibrary +- SystemCapability.HiviewDFX.HiChecker +- SystemCapability.HiviewDFX.HiDumper +- SystemCapability.HiviewDFX.HiAppEvent +- SystemCapability.HiviewDFX.HiSysEvent +- SystemCapability.HiviewDFX.HiProfiler.HiDebug +- SystemCapability.HiviewDFX.HiCollie +- SystemCapability.Update.UpdateService +- SystemCapability.DistributedHardware.DeviceManager +- SystemCapability.Security.DeviceAuth +- SystemCapability.Security.DataTransitManager +- SystemCapability.Security.DeviceSecurityLevel +- SystemCapability.Security.Huks.Core +- SystemCapability.Security.Huks.Extension +- SystemCapability.Security.Asset +- SystemCapability.Security.AccessToken +- SystemCapability.Security.SecurityGuard +- SystemCapability.Security.ScreenLockFileManager +- SystemCapability.Account.OsAccount +- SystemCapability.Account.AppAccount +- SystemCapability.UserIAM.UserAuth.Core +- SystemCapability.UserIAM.UserAuth.PinAuth +- SystemCapability.MiscServices.InputMethodFramework +- SystemCapability.MiscServices.Pasteboard +- SystemCapability.MiscServices.Time +- SystemCapability.MiscServices.Wallpaper +- SystemCapability.MiscServices.ScreenLock +- SystemCapability.MiscServices.Upload +- SystemCapability.MiscServices.Download +- SystemCapability.FileManagement.StorageService.Backup +- SystemCapability.FileManagement.StorageService.SpatialStatistics +- SystemCapability.FileManagement.StorageService.Volume +- SystemCapability.FileManagement.StorageService.Encryption +- SystemCapability.FileManagement.File.FileIO +- SystemCapability.FileManagement.File.Environment +- SystemCapability.FileManagement.File.DistributedFile +- SystemCapability.FileManagement.AppFileService +- SystemCapability.FileManagement.UserFileService +- SystemCapability.FileManagement.UserFileManager.Core +- SystemCapability.FileManagement.PhotoAccessHelper.Core +- SystemCapability.FileManagement.DistributedFileService.CloudSyncManager +- SystemCapability.FileManagement.DistributedFileService.CloudSync.Core +- SystemCapability.USB.USBManager +- SystemCapability.Sensors.Sensor +- SystemCapability.Sensors.MiscDevice +- SystemCapability.Startup.SystemInfo +- SystemCapability.DistributedDataManager.RelationalStore.Core +- SystemCapability.DistributedDataManager.CommonType +- SystemCapability.DistributedDataManager.KVStore.Core +- SystemCapability.DistributedDataManager.KVStore.DistributedKVStore +- SystemCapability.DistributedDataManager.DataObject.DistributedObject +- SystemCapability.DistributedDataManager.Preferences.Core +- SystemCapability.DistributedDataManager.DataShare.Core +- SystemCapability.DistributedDataManager.DataShare.Consumer +- SystemCapability.DistributedDataManager.DataShare.Provider +- SystemCapability.DistributedDataManager.CloudSync.Config +- SystemCapability.DistributedDataManager.CloudSync.Client +- SystemCapability.DistributedDataManager.CloudSync.Server +- SystemCapability.Ability.AbilityBase +- SystemCapability.Ability.AbilityRuntime.Core +- SystemCapability.Ability.AbilityRuntime.FAModel +- SystemCapability.Ability.AbilityRuntime.AbilityCore +- SystemCapability.Ability.AbilityRuntime.Mission +- SystemCapability.Ability.AbilityTools.AbilityAssistant +- SystemCapability.Ability.Form +- SystemCapability.Ability.DistributedAbilityManager +- SystemCapability.Applications.CalendarData +- SystemCapability.Applications.ContactsData +- SystemCapability.Applications.Contacts +- SystemCapability.Applications.Settings.Core +- SystemCapability.Test.UiTest +- SystemCapability.Web.Webview.Core +- SystemCapability.Advertising.OAID +- SystemCapability.Advertising.Ads +- SystemCapability.Security.CertificateManager +- SystemCapability.Security.CertificateManagerDialog +- SystemCapability.Security.CryptoFramework +- SystemCapability.Security.CryptoFramework.Key +- SystemCapability.Security.CryptoFramework.Key.SymKey +- SystemCapability.Security.CryptoFramework.Key.AsymKey +- SystemCapability.Security.CryptoFramework.Signature +- SystemCapability.Security.CryptoFramework.Cipher +- SystemCapability.Security.CryptoFramework.KeyAgreement +- SystemCapability.Security.CryptoFramework.MessageDigest +- SystemCapability.Security.CryptoFramework.Mac +- SystemCapability.Security.CryptoFramework.Kdf +- SystemCapability.Security.CryptoFramework.Rand +- SystemCapability.Security.Cert +- SystemCapability.BundleManager.BundleFramework.Core +- SystemCapability.BundleManager.BundleFramework.FreeInstall +- SystemCapability.BundleManager.BundleFramework.Resource +- SystemCapability.BundleManager.BundleFramework.DefaultApp +- SystemCapability.BundleManager.BundleFramework.Launcher +- SystemCapability.BundleManager.BundleFramework.AppControl +- SystemCapability.BundleManager.AppDomainVerify +- SystemCapability.Ability.AbilityRuntime.QuickFix +- SystemCapability.Graphic.Graphic2D.ColorManager.Core +- SystemCapability.ResourceSchedule.BackgroundTaskManager.EfficiencyResourcesApply +- SystemCapability.XTS.DeviceAttest +- SystemCapability.Request.FileTransferAgent +- SystemCapability.ResourceSchedule.DeviceStandby +- SystemCapability.DistributedDataManager.UDMF.Core +- SystemCapability.Multimedia.Media.AVScreenCapture +- SystemCapability.Multimedia.Media.SoundPool +- SystemCapability.Multimedia.Audio.Spatialization +- SystemCapability.Multimedia.AudioHaptic.Core +- SystemCapability.ArkUi.Graphics3D +- SystemCapability.Graphics.Drawing +- SystemCapability.Graphic.Graphic2D.NativeDrawing +- SystemCapability.Developtools.Syscap +- SystemCapability.Resourceschedule.Ffrt.Core +- SystemCapability.Graphic.Graphic2D.NativeWindow +- SystemCapability.Graphic.Graphic2D.NativeBuffer +- SystemCapability.Graphic.Graphic2D.NativeImage +- SystemCapability.Graphic.Graphic2D.NativeVsync +- SystemCapability.Graphic.Vulkan +- SystemCapability.Multimedia.Image.ImageCreator +- SystemCapability.Ability.AppStartup +- SystemCapability.Ability.AppExtension.PhotoEditorExtension diff --git a/en/application-dev/reference/syscap-list.md b/en/application-dev/reference/syscap-list.md index 5336ba74b76..bd60830f724 100644 --- a/en/application-dev/reference/syscap-list.md +++ b/en/application-dev/reference/syscap-list.md @@ -1,1881 +1,7 @@ # SystemCapability List -SystemCapability (SysCap) is a standalone feature in the operating system. - -Before using an API for development, you are advised to familiarize yourself with [SysCap](syscap.md), and then consult the following tables to see whether the SysCap set required for the API is supported by the target device type. - -> **NOTE** -> -> The **default** device type represents an OpenHarmony device with comprehensive functionalities and most common capabilities. If you are not sure about the capability set of the target device, you can use the **default** type for development. - -## SystemCapability.ArkUI.ArkUI.Full - -ArkUI component capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.ArkUI.ArkUI.Napi - -NAPI functionality - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.ArkUI.ArkUI.Libuv - -libuv functionality - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.ArkUI.UiAppearance - -Appearance configuration - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Base - -General type - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | Yes | - -## SystemCapability.BundleManager.BundleFramework - -Bundle manager service - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.BundleManager.BundleFramework.Overlay - -Overlay capability of bundle management - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.BundleManager.DistributedBundleFramework - -Distributed bundle manager service - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.BundleManager.Zlib - -zlib compression and decompression tool - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Graphic.Graphic2D.EGL - -Interface between the rendering API and the bottom-layer platform window system - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Graphic.Graphic2D.GLES2 - -Capability for rendering advanced 2D and 3D graphics - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Graphic.Graphic2D.GLES3 - -Capability for rendering advanced 2D and 3D graphics - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Graphic.Graphic2D.WebGL - -WebGL 1.0 API - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Window.SessionManager - -Enhanced window management capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.WindowManager.WindowManager.Core - -Basic window management capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Notification.CommonEvent - -Common event - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Notification.Notification - -Notification - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Notification.ReminderAgent - -Agent-powered reminder - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Notification.Emitter - -Event emitter service - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Communication.IPC.Core - -Inter-process communication (IPC) - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Communication.SoftBus.Core - -DSoftBus - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Communication.NetManager.Core - -Basic network management service - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Communication.NetManager.Ethernet - -Ethernet connectivity - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Communication.NetManager.NetSharing - -Network sharing - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Communication.NetManager.MDNS - -mDNS service - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Communication.NetManager.Vpn - -VPN - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Communication.NetStack - -Basic network stack capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | Yes | - -## SystemCapability.Communication.WiFi.Core - -Basic Wi-Fi capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Communication.WiFi.STA - -Wi-Fi STA capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Communication.WiFi.AP.Core - -Wi-Fi AP capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Communication.WiFi.P2P - -Wi-Fi P2P capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Communication.Bluetooth.Core - -Bluetooth service and protocol stack - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Location.Location.Core - -Basic location capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Location.Location.Geocoder - -Geocoding capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Location.Location.Geofence - -Geofencing capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Location.Location.Gnss - -GNSS hardware capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.MultimodalInput.Input.Core - -Basic input capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.MultimodalInput.Input.InputDevice - -Input device management - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.MultimodalInput.Input.InputMonitor - -Input event listener - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.MultimodalInput.Input.InputConsumer - -Input event consumer - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.MultimodalInput.Input.InputSimulator - -Input event simulator - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.MultimodalInput.Input.Pointer - -Mouse pointer management module - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.MultimodalInput.Input.ShortKey - -Shortcut keys - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.PowerManager.BatteryManager.Extension - -Extended battery management capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.PowerManager.DisplayPowerManager - -Power management display - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.PowerManager.ThermalManager - -Temperature control - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.PowerManager.PowerManager.Core - -Basic power management capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.PowerManager.BatteryManager.Core - -Basic battery management capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.PowerManager.PowerManager.Extension - -Extended capability of the system power management service - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Media.Core - -Basic media capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Media.AudioPlayer - -Audio player capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Media.AudioRecorder - -Media audio recorder capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Media.VideoPlayer - -Video player capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Media.VideoRecorder - -Video recorder capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Media.CodecBase - -Basic media codec capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Media.AudioCodec - -Media audio codec capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Media.AudioDecoder - -Media audio decoding capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Media.AudioEncoder - -Media audio encoding capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Media.VideoDecoder - -Media video decoding capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Media.VideoEncoder - -Media video encoding capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Media.Spliter - -Media splitter capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Media.Muxer - -Media muxer capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Media.AVPlayer - -Audio and video player capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Media.AVRecorder - -Audio and video recorder capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Media.AVMetadataExtractor - -Capability of obtaining media cloud data - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Media.AVImageGenerator - -Capability of obtaining video thumbnails - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Media.AVTranscoder - -Capability of obtaining video transcoding - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.AVSession.Core - -Basic media session capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.AVSession.Manager - -Media session management capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.AVSession.AVCast - -Casting capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.AVSession.ExtendedDisplayDisplay - -Extended media projection capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Audio.Core - -Basic audio capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Audio.Renderer - -Audio output capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Audio.Capturer - -Audio input capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Audio.Device - -Audio device management capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Audio.Volume - -Audio volume management capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Audio.Communication - -Audio communication capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Audio.Interrupt - -Audio focus - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Audio.Tone - -Dialing tone and ringback tone playback - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Audio.PlaybackCapture - -System tone recording capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Camera.Core - -Basic camera capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Drm.Core - -Media digital rights management - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Image.Core - -Basic image capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Image.ImageSource - -Image source decoding and parsing capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Image.ImagePacker - -Image packaging capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Image.ImageReceiver - -Image receiving capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.MediaLibrary.Core - -Basic media library capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.MediaLibrary.DistributedCore - -Distributed media library capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.SystemSound.Core - -System sound management, covering ringtones, notifications, alarms, and more - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Telephony.CoreService - -Basic cellular service - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | No | No | - -## SystemCapability.Telephony.CallManager - -Call management service - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | No | No | - -## SystemCapability.Telephony.CellularCall - -Cellular call service - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | No | No | - -## SystemCapability.Telephony.CellularData - -Cellular data service - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | No | No | - -## SystemCapability.Telephony.SmsMms - -SMS and MMS services - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | No | No | - -## SystemCapability.Telephony.StateRegistry - -Cellular network status registration service - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | No | No | - -## SystemCapability.Global.I18n - -Internationalization - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Global.ResourceManager - -Resource management - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Customization.ConfigPolicy - -Customization framework - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Customization.CustomConfig - -Custom configurations - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Customization.EnterpriseDeviceManager - -Enterprise device management - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.BarrierFree.Accessibility.Core - -Basic accessibility capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.BarrierFree.Accessibility.Vision - -Visual accessibility capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.BarrierFree.Accessibility.Hearing - -Audio accessibility capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.ResourceSchedule.WorkScheduler - -Deferred task scheduling - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask - -Continuous task management - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask - -Transient task management - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.ResourceSchedule.UsageStatistics.App - -Application usage statistics - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.ResourceSchedule.UsageStatistics.AppGroup - -Application activity group - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Utils.Lang - -TS/JS language base library - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.HiviewDFX.HiLog - -HiLog functionality - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.HiviewDFX.HiTrace - -HiTrace for distributed tracing - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.HiviewDFX.Hiview.FaultLogger - -FaultLogger for event recording - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.HiviewDFX.Hiview.LogLibrary - -Log file management - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.HiviewDFX.HiChecker - -HiChecker mode - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.HiviewDFX.HiDumper - -HiDumper for system information exporting - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.HiviewDFX.HiAppEvent - -HiAppEvent for application event logging - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.HiviewDFX.HiSysEvent - -HiAppEvent for system event logging - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.HiviewDFX.HiProfiler.HiDebug - -Debugging and tuning - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Update.UpdateService - -Update - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.DistributedHardware.DeviceManager - -Distributed device management - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Security.DeviceAuth - -Mutual authentication between devices - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Security.DataTransitManager - -Library of data transmission management and control policies - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Security.DeviceSecurityLevel - -Device security level management - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Security.Huks.Core - -Basic capability of device key management - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | Yes | - -## SystemCapability.Security.Huks.Extension - -Extended capability of device key management - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Security.Asset - -Key asset storage capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Security.AccessToken - -Access control - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Account.OsAccount - -System account - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Account.AppAccount - -Application account - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.UserIAM.UserAuth.Core - -Unified user authentication - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.UserIAM.UserAuth.PinAuth - -PIN authentication - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.MiscServices.InputMethodFramework - -Input method framework - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.MiscServices.Pasteboard - -Pasteboard service - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.MiscServices.Time - -Time, time zone, and timing service - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.MiscServices.Wallpaper - -Wallpaper framework - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.MiscServices.ScreenLock - -Screen lock service - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.MiscServices.Upload - -Upload service - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.MiscServices.Download - -Download service - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.FileManagement.StorageService.Backup - -Backup and restore - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.FileManagement.StorageService.SpatialStatistics - -Spatial statistics - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.FileManagement.StorageService.Volume - -Volume management - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.FileManagement.StorageService.Encryption - -File encryption capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.FileManagement.File.FileIO - -Basic file I/O interface - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.FileManagement.File.Environment - -Environment-related interface - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.FileManagement.File.DistributedFile - -Distributed file extension - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.FileManagement.AppFileService - -Application file service - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.FileManagement.UserFileService - -User file service - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.FileManagement.UserFileManager.Core - -Basic capability of user file management - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.FileManagement.PhotoAccessHelper.Core - -Management of images and videos in public directories - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.FileManagement.DistributedFileService.CloudSyncManager - -Device-cloud file synchronization management - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.FileManagement.DistributedFileService.CloudSync.Core - -Device-cloud file synchronization capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.USB.USBManager - -USB service - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Sensors.Sensor - -Sensor service subscription - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Sensors.MiscDevice - -Miscellaneous devices – sensor - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Startup.SystemInfo - -Basic system information - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.DistributedDataManager.RelationalStore.Core - -Basic relational database capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.DistributedDataManager.CommonType - -Common types of distributed data management - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.DistributedDataManager.KVStore.Core - -Basic capability of key-value databases - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.DistributedDataManager.KVStore.DistributedKVStore - -Distributed key-value database - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.DistributedDataManager.DataObject.DistributedObject - -Distributed data object - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.DistributedDataManager.Preferences.Core - -Basic capability of preferences data storage - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.DistributedDataManager.DataShare.Core - -Basic capability of cross-process data sharing - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.DistributedDataManager.DataShare.Consumer - -Data consumer of cross-process data sharing - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.DistributedDataManager.DataShare.Provider - -Data provider of cross-process data sharing - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.DistributedDataManager.CloudSync.Config - -Device-cloud synchronization status configuration - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.DistributedDataManager.CloudSync.Client - -Device-cloud synchronization API manually invoked by the data side - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.DistributedDataManager.CloudSync.Server - -Interface required by the cloud space service - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Ability.AbilityBase - -Definition of basic component running data, including wants and system configuration - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Ability.AbilityRuntime.Core - -Core basic functional modules for component runtime, including application initialization and GUI-less component running - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Ability.AbilityRuntime.FAModel - -Feature Ability (FA) model - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Ability.AbilityRuntime.AbilityCore - -Universal components (with GUIs) - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Ability.AbilityRuntime.Mission - -Task management - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Ability.AbilityTools.AbilityAssistant - -CLI tool - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Ability.Form - -Widget management - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Ability.DistributedAbilityManager - -continuationManager for starting the device selection module and updating the continuation status - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Applications.CalendarData - -Calendar event management - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Applications.ContactsData - -Contacts database - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | No | No | - -## SystemCapability.Applications.Contacts - -Contacts - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | No | No | - -## SystemCapability.Applications.Settings.Core - -API setting - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Test.UiTest - -UI test framework - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Web.Webview.Core - -Webview component - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Advertising.OAID - -OAID management service - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Advertising.Ads - -Advertising - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Security.CertificateManager - -Certificate management - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Security.CryptoFramework - -Crypto framework - basics - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | Yes | - -## SystemCapability.Security.CryptoFramework.Key - -Crypto framework - basic key types - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Security.CryptoFramework.Key.SymKey - -Crypto framework - symmetric keys - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Security.CryptoFramework.Key.AsymKey - -Crypto framework - asymmetric keys - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Security.CryptoFramework.Signature - -Crypto framework - signing and signature verification - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Security.CryptoFramework.Cipher - -Crypto framework - symmetric and asymmetric encryption and decryption - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Security.CryptoFramework.KeyAgreement - -Crypto framework - key agreement - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Security.CryptoFramework.MessageDigest - -Crypto framework - message digest - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | Yes | - -## SystemCapability.Security.CryptoFramework.Mac - -Crypto framework - message authentication code - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Security.CryptoFramework.Kdf - -Crypto framework - key derivation - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Security.CryptoFramework.Rand - -Crypto framework - random number - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | Yes | - -## SystemCapability.Security.Cert - -Certificate algorithm library framework - certificate capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.BundleManager.BundleFramework.Core - -Core services of bundle management, including bundle information query, bundle installation, and bundle uninstall - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.BundleManager.BundleFramework.FreeInstall - -Installation-free capability provided by bundle management - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.BundleManager.BundleFramework.Resource - -Capability of obtaining icons and labels provided by bundle management - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.BundleManager.BundleFramework.DefaultApp - -Default application management capability provided by bundle management - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.BundleManager.BundleFramework.Launcher - -Query capability provided by bundle management for the home screen - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.BundleManager.BundleFramework.AppControl - -Interception capability provided by bundle management - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Ability.AbilityRuntime.QuickFix - -Quick fix - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Graphic.Graphic2D.ColorManager.Core - -Wide color gamut management - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.ResourceSchedule.BackgroundTaskManager.EfficiencyResourcesApply - -Efficiency resource application - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.XTS.DeviceAttest - -Device attestation - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Request.FileTransferAgent - -File transfer agent between applications and servers - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.ResourceSchedule.DeviceStandby - -Device standby mode when the screen is turned off - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.DistributedDataManager.UDMF.Core - -Distributed data management - basic capability of the Unified Data Management Framework (UDMF) - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Media.AVScreenCapture - -Screen recording capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Media.SoundPool - -Audio pool capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Audio.Spatialization - -Spatial audio management capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.AudioHaptic.Core - -Audio-haptic playback capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.ArkUi.Graphics3D - -3D capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Graphics.Drawing - -Custom drawing capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Graphic.Graphic2D.NativeDrawing - -2D drawing capability at the native layer - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Developtools.Syscap - -System capability encoding and decoding - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Resourceschedule.Ffrt.Core - -Concurrent programming framework - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Graphic.Graphic2D.NativeWindow - -Local windows for custom drawing (2D&3D) - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Graphic.Graphic2D.NativeBuffer - -Graphics buffer (independent of the local window) - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Graphic.Graphic2D.NativeImage - -Surface output to the OpenGLES texture - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Graphic.Graphic2D.NativeVsync - -Capability of providing vertical sync signals for the system - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Graphic.Vulkan - -Power management display - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Multimedia.Image.ImageCreator - -Image creation capability - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.Graphic.Graphic2D.WebGL2 - -WebGL 2.0 API - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | No | - -## SystemCapability.ArkUI.ArkUI.Lite - -ArkUI component for mini-system devices - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| Yes | Yes | Yes | - -## SystemCapability.Location.Location.Lite - -Location service for mini-system devices - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| No | No | Yes | - -## SystemCapability.PowerManager.BatteryManager.Lite - -Battery service for mini-system devices - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| No | No | Yes | - -## SystemCapability.FileManagement.File.FileIO.Lite - -Basic file I/O interface for mini-system devices - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| No | No | Yes | - -## SystemCapability.Startup.SystemInfo.Lite - -Basic system information for mini-system devices - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| No | No | Yes | - -## SystemCapability.PowerManager.DisplayPowerManager.Lite - -Power management display for mini-system devices - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| No | No | Yes | - -## SystemCapability.DistributedDataManager.Preferences.Core.Lite - -Basic capability of preference data storage for mini-system devices - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| No | No | Yes | - -## SystemCapability.Sensors.Sensor.Lite - -Sensor service subscription for mini-system devices - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| No | No | Yes | - -## SystemCapability.Sensors.MiscDevice.Lite - -Miscellaneous mini-system devices – sensor - -| Default | Tablet | Lite Wearable| -|---------|--------|--------------| -| No | No | Yes | +- [Phone](phone-syscap-list.md) +- [Tablet](tablet-syscap-list.md) +- [LiteWearable](litewearable-syscap-list.md) +- [TV](tv-syscap-list.md) +- [Wearable](wearable-syscap-list.md) diff --git a/en/application-dev/reference/tablet-syscap-list.md b/en/application-dev/reference/tablet-syscap-list.md new file mode 100644 index 00000000000..60d4847d36a --- /dev/null +++ b/en/application-dev/reference/tablet-syscap-list.md @@ -0,0 +1,236 @@ +# SystemCapability List + +SystemCapability (SysCap) is a standalone feature in the operating system. + +Before using an API for development, you are advised to familiarize yourself with [SysCap](syscap.md), and then consult the following tables to see whether the SysCap set required for the API is supported by the target device type. + +> **NOTE** +> +> This list outlines the minimum system capabilities supported by the current version of tablets. You can refer to the **tablet.json** file in the SDK for details. +> When developing applications for the current version of tablets using the APIs corresponding to the system capabilities listed, you can call these APIs directly without needing to perform a **canIUse()** check beforehand. + +- SystemCapability.ArkUI.ArkUI.Full +- SystemCapability.ArkUI.ArkUI.Napi +- SystemCapability.ArkUI.ArkUI.Libuv +- SystemCapability.ArkUI.ArkUI.Lite +- SystemCapability.ArkUI.UiAppearance +- SystemCapability.Base +- SystemCapability.BundleManager.BundleFramework +- SystemCapability.BundleManager.BundleFramework.Overlay +- SystemCapability.BundleManager.DistributedBundleFramework +- SystemCapability.BundleManager.Zlib +- SystemCapability.Graphic.Graphic2D.EGL +- SystemCapability.Graphic.Graphic2D.GLES2 +- SystemCapability.Graphic.Graphic2D.GLES3 +- SystemCapability.Graphic.Graphic2D.WebGL +- SystemCapability.Window.SessionManager +- SystemCapability.WindowManager.WindowManager.Core +- SystemCapability.Notification.CommonEvent +- SystemCapability.Notification.Notification +- SystemCapability.Notification.ReminderAgent +- SystemCapability.Notification.NotificationSettings +- SystemCapability.Notification.Emitter +- SystemCapability.Communication.IPC.Core +- SystemCapability.Communication.SoftBus.Core +- SystemCapability.Communication.NetManager.Core +- SystemCapability.Communication.NetManager.Ethernet +- SystemCapability.Communication.NetManager.NetSharing +- SystemCapability.Communication.NetManager.MDNS +- SystemCapability.Communication.NetManager.Vpn +- SystemCapability.Communication.NetStack +- SystemCapability.Communication.WiFi.Core +- SystemCapability.Communication.WiFi.STA +- SystemCapability.Communication.WiFi.AP.Core +- SystemCapability.Communication.WiFi.P2P +- SystemCapability.Communication.Bluetooth.Core +- SystemCapability.Location.Location.Core +- SystemCapability.Location.Location.Geocoder +- SystemCapability.Location.Location.Geofence +- SystemCapability.Location.Location.Gnss +- SystemCapability.MultimodalInput.Input.Core +- SystemCapability.MultimodalInput.Input.InputDevice +- SystemCapability.MultimodalInput.Input.InputMonitor +- SystemCapability.MultimodalInput.Input.InputConsumer +- SystemCapability.MultimodalInput.Input.InputSimulator +- SystemCapability.MultimodalInput.Input.Pointer +- SystemCapability.MultimodalInput.Input.ShortKey +- SystemCapability.PowerManager.BatteryManager.Extension +- SystemCapability.PowerManager.DisplayPowerManager +- SystemCapability.PowerManager.ThermalManager +- SystemCapability.PowerManager.PowerManager.Core +- SystemCapability.PowerManager.BatteryManager.Core +- SystemCapability.PowerManager.PowerManager.Extension +- SystemCapability.Multimedia.Media.Core +- SystemCapability.Multimedia.Media.AudioPlayer +- SystemCapability.Multimedia.Media.AudioRecorder +- SystemCapability.Multimedia.Media.VideoPlayer +- SystemCapability.Multimedia.Media.VideoRecorder +- SystemCapability.Multimedia.Media.CodecBase +- SystemCapability.Multimedia.Media.AudioCodec +- SystemCapability.Multimedia.Media.AudioDecoder +- SystemCapability.Multimedia.Media.AudioEncoder +- SystemCapability.Multimedia.Media.VideoDecoder +- SystemCapability.Multimedia.Media.VideoEncoder +- SystemCapability.Multimedia.Media.Spliter +- SystemCapability.Multimedia.Media.Muxer +- SystemCapability.Multimedia.Media.AVPlayer +- SystemCapability.Multimedia.Media.AVRecorder +- SystemCapability.Multimedia.Media.AVMetadataExtractor +- SystemCapability.Multimedia.Media.AVImageGenerator +- SystemCapability.Multimedia.Media.AVTranscoder +- SystemCapability.Multimedia.AVSession.Core +- SystemCapability.Multimedia.AVSession.Manager +- SystemCapability.Multimedia.AVSession.AVCast +- SystemCapability.Multimedia.Audio.Core +- SystemCapability.Multimedia.Audio.Renderer +- SystemCapability.Multimedia.Audio.Capturer +- SystemCapability.Multimedia.Audio.Device +- SystemCapability.Multimedia.Audio.Volume +- SystemCapability.Multimedia.Audio.Communication +- SystemCapability.Multimedia.Audio.Interrupt +- SystemCapability.Multimedia.Audio.Tone +- SystemCapability.Multimedia.Audio.PlaybackCapture +- SystemCapability.Multimedia.Camera.Core +- SystemCapability.Multimedia.Drm.Core +- SystemCapability.Multimedia.Image.Core +- SystemCapability.Multimedia.Image.ImageSource +- SystemCapability.Multimedia.Image.ImagePacker +- SystemCapability.Multimedia.Image.ImageReceiver +- SystemCapability.Multimedia.ImageEffect.Core +- SystemCapability.Multimedia.MediaLibrary.Core +- SystemCapability.Multimedia.MediaLibrary.DistributedCore +- SystemCapability.Multimedia.SystemSound.Core +- SystemCapability.Global.I18n +- SystemCapability.Global.ResourceManager +- SystemCapability.Customization.ConfigPolicy +- SystemCapability.Customization.CustomConfig +- SystemCapability.Customization.EnterpriseDeviceManager +- SystemCapability.BarrierFree.Accessibility.Core +- SystemCapability.BarrierFree.Accessibility.Vision +- SystemCapability.BarrierFree.Accessibility.Hearing +- SystemCapability.ResourceSchedule.WorkScheduler +- SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask +- SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask +- SystemCapability.ResourceSchedule.UsageStatistics.App +- SystemCapability.ResourceSchedule.UsageStatistics.AppGroup +- SystemCapability.Utils.Lang +- SystemCapability.HiviewDFX.HiLog +- SystemCapability.HiviewDFX.HiTrace +- SystemCapability.HiviewDFX.Hiview.FaultLogger +- SystemCapability.HiviewDFX.Hiview.LogLibrary +- SystemCapability.HiviewDFX.HiChecker +- SystemCapability.HiviewDFX.HiDumper +- SystemCapability.HiviewDFX.HiAppEvent +- SystemCapability.HiviewDFX.HiSysEvent +- SystemCapability.HiviewDFX.HiProfiler.HiDebug +- SystemCapability.HiviewDFX.HiCollie +- SystemCapability.Update.UpdateService +- SystemCapability.DistributedHardware.DeviceManager +- SystemCapability.Security.DeviceAuth +- SystemCapability.Security.DataTransitManager +- SystemCapability.Security.DeviceSecurityLevel +- SystemCapability.Security.Huks.Core +- SystemCapability.Security.Huks.Extension +- SystemCapability.Security.Asset +- SystemCapability.Security.AccessToken +- SystemCapability.Security.SecurityGuard +- SystemCapability.Security.ScreenLockFileManager +- SystemCapability.Account.OsAccount +- SystemCapability.Account.AppAccount +- SystemCapability.UserIAM.UserAuth.Core +- SystemCapability.UserIAM.UserAuth.PinAuth +- SystemCapability.MiscServices.InputMethodFramework +- SystemCapability.MiscServices.Pasteboard +- SystemCapability.MiscServices.Time +- SystemCapability.MiscServices.Wallpaper +- SystemCapability.MiscServices.ScreenLock +- SystemCapability.MiscServices.Upload +- SystemCapability.MiscServices.Download +- SystemCapability.FileManagement.StorageService.Backup +- SystemCapability.FileManagement.StorageService.SpatialStatistics +- SystemCapability.FileManagement.StorageService.Volume +- SystemCapability.FileManagement.StorageService.Encryption +- SystemCapability.FileManagement.File.FileIO +- SystemCapability.FileManagement.File.Environment +- SystemCapability.FileManagement.File.DistributedFile +- SystemCapability.FileManagement.AppFileService +- SystemCapability.FileManagement.UserFileService +- SystemCapability.FileManagement.UserFileManager.Core +- SystemCapability.FileManagement.PhotoAccessHelper.Core +- SystemCapability.FileManagement.DistributedFileService.CloudSyncManager +- SystemCapability.FileManagement.DistributedFileService.CloudSync.Core +- SystemCapability.USB.USBManager +- SystemCapability.Sensors.Sensor +- SystemCapability.Sensors.MiscDevice +- SystemCapability.Startup.SystemInfo +- SystemCapability.DistributedDataManager.RelationalStore.Core +- SystemCapability.DistributedDataManager.CommonType +- SystemCapability.DistributedDataManager.KVStore.Core +- SystemCapability.DistributedDataManager.KVStore.DistributedKVStore +- SystemCapability.DistributedDataManager.DataObject.DistributedObject +- SystemCapability.DistributedDataManager.Preferences.Core +- SystemCapability.DistributedDataManager.DataShare.Core +- SystemCapability.DistributedDataManager.DataShare.Consumer +- SystemCapability.DistributedDataManager.DataShare.Provider +- SystemCapability.DistributedDataManager.CloudSync.Config +- SystemCapability.DistributedDataManager.CloudSync.Client +- SystemCapability.DistributedDataManager.CloudSync.Server +- SystemCapability.Ability.AbilityBase +- SystemCapability.Ability.AbilityRuntime.Core +- SystemCapability.Ability.AbilityRuntime.FAModel +- SystemCapability.Ability.AbilityRuntime.AbilityCore +- SystemCapability.Ability.AbilityRuntime.Mission +- SystemCapability.Ability.AbilityTools.AbilityAssistant +- SystemCapability.Ability.Form +- SystemCapability.Ability.DistributedAbilityManager +- SystemCapability.Applications.CalendarData +- SystemCapability.Applications.Settings.Core +- SystemCapability.Test.UiTest +- SystemCapability.Web.Webview.Core +- SystemCapability.Advertising.OAID +- SystemCapability.Advertising.Ads +- SystemCapability.Security.CertificateManager +- SystemCapability.Security.CertificateManagerDialog +- SystemCapability.Security.CryptoFramework +- SystemCapability.Security.CryptoFramework.Key +- SystemCapability.Security.CryptoFramework.Key.SymKey +- SystemCapability.Security.CryptoFramework.Key.AsymKey +- SystemCapability.Security.CryptoFramework.Signature +- SystemCapability.Security.CryptoFramework.Cipher +- SystemCapability.Security.CryptoFramework.KeyAgreement +- SystemCapability.Security.CryptoFramework.MessageDigest +- SystemCapability.Security.CryptoFramework.Mac +- SystemCapability.Security.CryptoFramework.Kdf +- SystemCapability.Security.CryptoFramework.Rand +- SystemCapability.Security.Cert +- SystemCapability.BundleManager.BundleFramework.Core +- SystemCapability.BundleManager.BundleFramework.FreeInstall +- SystemCapability.BundleManager.BundleFramework.Resource +- SystemCapability.BundleManager.BundleFramework.DefaultApp +- SystemCapability.BundleManager.BundleFramework.Launcher +- SystemCapability.BundleManager.BundleFramework.AppControl +- SystemCapability.Ability.AbilityRuntime.QuickFix +- SystemCapability.Graphic.Graphic2D.ColorManager.Core +- SystemCapability.ResourceSchedule.BackgroundTaskManager.EfficiencyResourcesApply +- SystemCapability.Request.FileTransferAgent +- SystemCapability.ResourceSchedule.DeviceStandby +- SystemCapability.DistributedDataManager.UDMF.Core +- SystemCapability.Multimedia.Media.AVScreenCapture +- SystemCapability.Multimedia.Media.SoundPool +- SystemCapability.Multimedia.Audio.Spatialization +- SystemCapability.Multimedia.AudioHaptic.Core +- SystemCapability.ArkUi.Graphics3D +- SystemCapability.Graphics.Drawing +- SystemCapability.Graphic.Graphic2D.NativeDrawing +- SystemCapability.XTS.DeviceAttest +- SystemCapability.Developtools.Syscap +- SystemCapability.Resourceschedule.Ffrt.Core +- SystemCapability.Graphic.Graphic2D.NativeWindow +- SystemCapability.Graphic.Graphic2D.NativeBuffer +- SystemCapability.Graphic.Graphic2D.NativeImage +- SystemCapability.Graphic.Graphic2D.NativeVsync +- SystemCapability.Graphic.Vulkan +- SystemCapability.Multimedia.Image.ImageCreator +- SystemCapability.Graphic.Graphic2D.WebGL2 +- SystemCapability.Ability.AppStartup +- SystemCapability.Ability.AppExtension.PhotoEditorExtension diff --git a/en/application-dev/reference/tv-syscap-list.md b/en/application-dev/reference/tv-syscap-list.md new file mode 100644 index 00000000000..a3b2e0f0fb8 --- /dev/null +++ b/en/application-dev/reference/tv-syscap-list.md @@ -0,0 +1,206 @@ +# SystemCapability List + +SystemCapability (SysCap) is a standalone feature in the operating system. + +Before using an API for development, you are advised to familiarize yourself with [SysCap](syscap.md), and then consult the following tables to see whether the SysCap set required for the API is supported by the target device type. + +> **NOTE** +> +> This list outlines the minimum system capabilities supported by the current version of TVs. You can refer to the **tv.json** file in the SDK for details. +> When developing applications for the current version of TVs using the APIs corresponding to the system capabilities listed, you can call these APIs directly without needing to perform a **canIUse()** check beforehand. + +- SystemCapability.Ability.AbilityBase +- SystemCapability.Ability.AbilityRuntime.AbilityCore +- SystemCapability.Ability.AbilityRuntime.Core +- SystemCapability.Ability.AbilityRuntime.FAModel +- SystemCapability.Ability.AbilityRuntime.Mission +- SystemCapability.Ability.AbilityRuntime.QuickFix +- SystemCapability.Ability.AbilityTools.AbilityAssistant +- SystemCapability.Ability.AppExtension.PhotoEditorExtension +- SystemCapability.Ability.AppStartup +- SystemCapability.Security.AccessToken +- SystemCapability.Security.ScreenLockFileManager +- SystemCapability.BarrierFree.Accessibility.Core +- SystemCapability.BarrierFree.Accessibility.Hearing +- SystemCapability.BarrierFree.Accessibility.Vision +- SystemCapability.ArkUI.ArkUI.Full +- SystemCapability.FileManagement.AppFileService +- SystemCapability.FileManagement.AppFileService.FolderAuthorization +- SystemCapability.FileManagement.StorageService.Backup +- SystemCapability.Multimedia.Audio.Capturer +- SystemCapability.Multimedia.Audio.Communication +- SystemCapability.Multimedia.Audio.Core +- SystemCapability.Multimedia.Audio.Device +- SystemCapability.Multimedia.Audio.Interrupt +- SystemCapability.Multimedia.Audio.PlaybackCapture +- SystemCapability.Multimedia.Audio.Renderer +- SystemCapability.Multimedia.Audio.Spatialization +- SystemCapability.Multimedia.Audio.Tone +- SystemCapability.Multimedia.Audio.Volume +- SystemCapability.Multimedia.Media.AudioCodec +- SystemCapability.Multimedia.Media.AudioDecoder +- SystemCapability.Multimedia.Media.AudioEncoder +- SystemCapability.Multimedia.Media.CodecBase +- SystemCapability.Multimedia.Media.Muxer +- SystemCapability.Multimedia.Media.Spliter +- SystemCapability.Multimedia.Media.VideoDecoder +- SystemCapability.Multimedia.Media.VideoEncoder +- SystemCapability.Multimedia.AVSession.AVCast +- SystemCapability.Multimedia.AVSession.Core +- SystemCapability.Multimedia.AVSession.ExtendedDisplayCast +- SystemCapability.Multimedia.AVSession.Manager +- SystemCapability.Multimedia.AVSession.AVinputCast +- SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask +- SystemCapability.ResourceSchedule.BackgroundTaskManager.EfficiencyResourcesApply +- SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask +- SystemCapability.BundleManager.BundleFramework +- SystemCapability.BundleManager.BundleFramework.AppControl +- SystemCapability.BundleManager.BundleFramework.Core +- SystemCapability.BundleManager.BundleFramework.DefaultApp +- SystemCapability.BundleManager.BundleFramework.FreeInstall +- SystemCapability.BundleManager.BundleFramework.Launcher +- SystemCapability.BundleManager.BundleFramework.Overlay +- SystemCapability.BundleManager.BundleFramework.Resource +- SystemCapability.BundleManager.Zlib +- SystemCapability.Applications.CalendarData +- SystemCapability.Notification.CommonEvent +- SystemCapability.Customization.ConfigPolicy +- SystemCapability.Customization.CustomConfig +- SystemCapability.Security.CryptoFramework +- SystemCapability.Security.CryptoFramework.Cipher +- SystemCapability.Security.CryptoFramework.Kdf +- SystemCapability.Security.CryptoFramework.Key +- SystemCapability.Security.CryptoFramework.Key.AsymKey +- SystemCapability.Security.CryptoFramework.Key.SymKey +- SystemCapability.Security.CryptoFramework.KeyAgreement +- SystemCapability.Security.CryptoFramework.Mac +- SystemCapability.Security.CryptoFramework.MessageDigest +- SystemCapability.Security.CryptoFramework.Rand +- SystemCapability.Security.CryptoFramework.Signature +- SystemCapability.DistributedDataManager.DataObject.DistributedObject +- SystemCapability.DistributedDataManager.DataShare.Consumer +- SystemCapability.DistributedDataManager.DataShare.Core +- SystemCapability.DistributedDataManager.DataShare.Provider +- SystemCapability.XTS.DeviceAttest +- SystemCapability.DistributedHardware.DeviceManager +- SystemCapability.ResourceSchedule.DeviceStandby +- SystemCapability.ResourceSchedule.UsageStatistics.App +- SystemCapability.ResourceSchedule.UsageStatistics.AppGroup +- SystemCapability.FileManagement.DistributedFileService.CloudSync.Core +- SystemCapability.FileManagement.DistributedFileService.CloudSyncManager +- SystemCapability.Notification.Notification +- SystemCapability.Notification.NotificationSettings +- SystemCapability.Notification.ReminderAgent +- SystemCapability.Multimedia.Drm.Core +- SystemCapability.Utils.Lang +- SystemCapability.Notification.Emitter +- SystemCapability.Resourceschedule.Ffrt.Core +- SystemCapability.Graphic.Graphic2D.ColorManager.Core +- SystemCapability.Graphic.Graphic2D.EGL +- SystemCapability.Graphic.Graphic2D.GLES2 +- SystemCapability.Graphic.Graphic2D.GLES3 +- SystemCapability.Graphic.Graphic2D.HyperGraphicManager +- SystemCapability.Graphic.Graphic2D.NativeBuffer +- SystemCapability.Graphic.Graphic2D.NativeDrawing +- SystemCapability.Graphic.Graphic2D.NativeImage +- SystemCapability.Graphic.Graphic2D.NativeVsync +- SystemCapability.Graphic.Graphic2D.NativeWindow +- SystemCapability.Graphic.Graphic2D.WebGL +- SystemCapability.Graphic.Graphic2D.WebGL2 +- SystemCapability.Graphic.Vulkan +- SystemCapability.Graphics.Drawing +- SystemCapability.HiviewDFX.HiAppEvent +- SystemCapability.HiviewDFX.HiChecker +- SystemCapability.HiviewDFX.HiCollie +- SystemCapability.HiviewDFX.HiDumper +- SystemCapability.HiviewDFX.HiLog +- SystemCapability.HiviewDFX.HiProfiler.HiDebug +- SystemCapability.HiviewDFX.HiSysEvent +- SystemCapability.HiviewDFX.HiTrace +- SystemCapability.HiviewDFX.Hiview.LogLibrary +- SystemCapability.Global.I18n +- SystemCapability.Multimedia.Image.Core +- SystemCapability.Multimedia.Image.ImageCreator +- SystemCapability.Multimedia.Image.ImagePacker +- SystemCapability.Multimedia.Image.ImageReceiver +- SystemCapability.Multimedia.Image.ImageSource +- SystemCapability.MiscServices.InputMethodFramework +- SystemCapability.MultimodalInput.Input.Cooperator +- SystemCapability.MultimodalInput.Input.Core +- SystemCapability.MultimodalInput.Input.InfraredEmitter +- SystemCapability.MultimodalInput.Input.InputConsumer +- SystemCapability.MultimodalInput.Input.InputDevice +- SystemCapability.MultimodalInput.Input.InputMonitor +- SystemCapability.MultimodalInput.Input.InputSimulator +- SystemCapability.MultimodalInput.Input.Pointer +- SystemCapability.MultimodalInput.Input.ShortKey +- SystemCapability.DistributedDataManager.KVStore.Core +- SystemCapability.DistributedDataManager.KVStore.DistributedKVStore +- SystemCapability.ArkUI.ArkUI.Libuv +- SystemCapability.FileManagement.PhotoAccessHelper.Core +- SystemCapability.FileManagement.UserFileManager.Core +- SystemCapability.FileManagement.UserFileManager.DistributedCore +- SystemCapability.Multimedia.MediaLibrary.Core +- SystemCapability.Multimedia.MediaLibrary.DistributedCore +- SystemCapability.Sensors.MiscDevice +- SystemCapability.ArkCompiler.JSVM +- SystemCapability.ArkUI.ArkUI.Napi +- SystemCapability.Communication.NetStack +- SystemCapability.Account.AppAccount +- SystemCapability.Account.OsAccount +- SystemCapability.Multimedia.AudioHaptic.Core +- SystemCapability.Multimedia.Media.AVImageGenerator +- SystemCapability.Multimedia.Media.AVMetadataExtractor +- SystemCapability.Multimedia.Media.AVPlayer +- SystemCapability.Multimedia.Media.AVRecorder +- SystemCapability.Multimedia.Media.AVScreenCapture +- SystemCapability.Multimedia.Media.AVTranscoder +- SystemCapability.Multimedia.Media.AudioPlayer +- SystemCapability.Multimedia.Media.AudioRecorder +- SystemCapability.Multimedia.Media.SoundPool +- SystemCapability.Multimedia.Media.VideoPlayer +- SystemCapability.Multimedia.Media.VideoRecorder +- SystemCapability.Multimedia.SystemSound.Core +- SystemCapability.PowerManager.PowerManager.Core +- SystemCapability.PowerManager.PowerManager.Extension +- SystemCapability.DistributedDataManager.Preferences.Core +- SystemCapability.DistributedDataManager.CloudSync.Client +- SystemCapability.DistributedDataManager.CloudSync.Config +- SystemCapability.DistributedDataManager.CloudSync.Server +- SystemCapability.DistributedDataManager.CommonType +- SystemCapability.DistributedDataManager.RelationalStore.Core +- SystemCapability.MiscServices.Download +- SystemCapability.MiscServices.Upload +- SystemCapability.Request.FileTransferAgent +- SystemCapability.Global.ResourceManager +- SystemCapability.ResourceSchedule.SystemLoad +- SystemCapability.Resourceschedule.BackgroundProcessManager +- SystemCapability.Sensors.Sensor +- SystemCapability.Applications.Settings.Core +- SystemCapability.FileManagement.StorageService.Encryption +- SystemCapability.FileManagement.StorageService.SpatialStatistics +- SystemCapability.FileManagement.StorageService.Volume +- SystemCapability.Developtools.Syscap +- SystemCapability.MiscServices.Time +- SystemCapability.DistributedDataManager.UDMF.Core +- SystemCapability.FileManagement.UserFileService +- SystemCapability.FileManagement.UserFileService.FolderSelection +- SystemCapability.Web.Webview.Core +- SystemCapability.Communication.WiFi.AP.Core +- SystemCapability.Communication.WiFi.AP.Extension +- SystemCapability.Communication.WiFi.Core +- SystemCapability.Communication.WiFi.STA +- SystemCapability.Communication.WiFi.P2P +- SystemCapability.WindowManager.WindowManager.Core +- SystemCapability.ResourceSchedule.WorkScheduler +- SystemCapability.Communication.NetManager.MDNS +- SystemCapability.Communication.NetManager.NetSharing +- SystemCapability.Communication.NetManager.Ethernet +- SystemCapability.Communication.NetManager.Vpn +- SystemCapability.Communication.NetManager.NetFirewall +- SystemCapability.Communication.NetManager.Core +- SystemCapability.Security.Asset +- SystemCapability.Communication.Bluetooth.Core +- SystemCapability.Security.Cert +- SystemCapability.Update.UpdateService +- SystemCapability.Window.SessionManager diff --git a/en/application-dev/reference/wearable-syscap-list.md b/en/application-dev/reference/wearable-syscap-list.md new file mode 100644 index 00000000000..a74a3f95623 --- /dev/null +++ b/en/application-dev/reference/wearable-syscap-list.md @@ -0,0 +1,209 @@ +# SystemCapability List + +SystemCapability (SysCap) is a standalone feature in the operating system. + +Before using an API for development, you are advised to familiarize yourself with [SysCap](syscap.md), and then consult the following tables to see whether the SysCap set required for the API is supported by the target device type. + +> **NOTE** +> +> This list outlines the minimum system capabilities supported by the current version of wearables. You can refer to the **wearable.json** file in the SDK for details. +> When developing applications for the current version of wearables using the APIs corresponding to the system capabilities listed, you can call these APIs directly without needing to perform a **canIUse()** check beforehand. + +- SystemCapability.Ability.AbilityBase +- SystemCapability.Ability.AbilityRuntime.AbilityCore +- SystemCapability.Ability.AbilityRuntime.Core +- SystemCapability.Ability.AbilityRuntime.FAModel +- SystemCapability.Ability.AbilityRuntime.Mission +- SystemCapability.Ability.AbilityTools.AbilityAssistant +- SystemCapability.Ability.AppStartup +- SystemCapability.Security.AccessToken +- SystemCapability.BarrierFree.Accessibility.Core +- SystemCapability.BarrierFree.Accessibility.Hearing +- SystemCapability.BarrierFree.Accessibility.Vision +- SystemCapability.ArkUI.ArkUI.Circle +- SystemCapability.ArkUI.ArkUI.Full +- SystemCapability.FileManagement.AppFileService +- SystemCapability.FileManagement.StorageService.Backup +- SystemCapability.Security.Asset +- SystemCapability.Multimedia.Audio.Capturer +- SystemCapability.Multimedia.Audio.Communication +- SystemCapability.Multimedia.Audio.Core +- SystemCapability.Multimedia.Audio.Device +- SystemCapability.Multimedia.Audio.Interrupt +- SystemCapability.Multimedia.Audio.Renderer +- SystemCapability.Multimedia.Audio.Tone +- SystemCapability.Multimedia.Audio.Volume +- SystemCapability.Multimedia.Media.AudioCodec +- SystemCapability.Multimedia.Media.AudioDecoder +- SystemCapability.Multimedia.Media.AudioEncoder +- SystemCapability.Multimedia.Media.CodecBase +- SystemCapability.Multimedia.Media.Muxer +- SystemCapability.Multimedia.Media.Spliter +- SystemCapability.Multimedia.Media.VideoDecoder +- SystemCapability.Multimedia.Media.VideoEncoder +- SystemCapability.Multimedia.AVSession.Core +- SystemCapability.Multimedia.AVSession.Manager +- SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask +- SystemCapability.ResourceSchedule.BackgroundTaskManager.EfficiencyResourcesApply +- SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask +- SystemCapability.PowerManager.BatteryManager.Core +- SystemCapability.PowerManager.BatteryManager.Extension +- SystemCapability.PowerManager.BatteryStatistics +- SystemCapability.Communication.Bluetooth.Core +- SystemCapability.BundleManager.BundleFramework +- SystemCapability.BundleManager.BundleFramework.AppControl +- SystemCapability.BundleManager.BundleFramework.Core +- SystemCapability.BundleManager.BundleFramework.DefaultApp +- SystemCapability.BundleManager.BundleFramework.FreeInstall +- SystemCapability.BundleManager.BundleFramework.Launcher +- SystemCapability.BundleManager.BundleFramework.Overlay +- SystemCapability.BundleManager.BundleFramework.Resource +- SystemCapability.BundleManager.Zlib +- SystemCapability.Applications.CalendarData +- SystemCapability.Applications.Contacts +- SystemCapability.Telephony.CallManager +- SystemCapability.Telephony.CellularData +- SystemCapability.Security.Cert +- SystemCapability.Notification.CommonEvent +- SystemCapability.Customization.ConfigPolicy +- SystemCapability.Customization.CustomConfig +- SystemCapability.Telephony.CoreService +- SystemCapability.Security.CryptoFramework +- SystemCapability.Security.CryptoFramework.Cipher +- SystemCapability.Security.CryptoFramework.Kdf +- SystemCapability.Security.CryptoFramework.Key +- SystemCapability.Security.CryptoFramework.Key.AsymKey +- SystemCapability.Security.CryptoFramework.Key.SymKey +- SystemCapability.Security.CryptoFramework.KeyAgreement +- SystemCapability.Security.CryptoFramework.Mac +- SystemCapability.Security.CryptoFramework.MessageDigest +- SystemCapability.Security.CryptoFramework.Rand +- SystemCapability.Security.CryptoFramework.Signature +- SystemCapability.DistributedDataManager.DataObject.DistributedObject +- SystemCapability.DistributedDataManager.DataShare.Consumer +- SystemCapability.DistributedDataManager.DataShare.Core +- SystemCapability.DistributedDataManager.DataShare.Provider +- SystemCapability.XTS.DeviceAttest +- SystemCapability.DistributedHardware.DeviceManager +- SystemCapability.ResourceSchedule.DeviceStandby +- SystemCapability.ResourceSchedule.UsageStatistics.App +- SystemCapability.ResourceSchedule.UsageStatistics.AppGroup +- SystemCapability.PowerManager.DisplayPowerManager +- SystemCapability.BundleManager.DistributedBundleFramework +- SystemCapability.DistributedHardware.DistributedHardwareFWK +- SystemCapability.Notification.Notification +- SystemCapability.Notification.ReminderAgent +- SystemCapability.Ability.DistributedAbilityManager +- SystemCapability.Multimedia.Drm.Core +- SystemCapability.Utils.Lang +- SystemCapability.Notification.Emitter +- SystemCapability.Resourceschedule.Ffrt.Core +- SystemCapability.Ability.Form +- SystemCapability.Graphic.Graphic2D.EGL +- SystemCapability.Graphic.Graphic2D.GLES2 +- SystemCapability.Graphic.Graphic2D.GLES3 +- SystemCapability.Graphic.Graphic2D.NativeBuffer +- SystemCapability.Graphic.Graphic2D.NativeDrawing +- SystemCapability.Graphic.Graphic2D.NativeImage +- SystemCapability.Graphic.Graphic2D.NativeVsync +- SystemCapability.Graphic.Graphic2D.NativeWindow +- SystemCapability.Graphic.Graphic2D.WebGL +- SystemCapability.Graphic.Graphic2D.WebGL2 +- SystemCapability.Graphic.Vulkan +- SystemCapability.Graphics.Drawing +- SystemCapability.ArkUi.Graphics3D +- SystemCapability.HiviewDFX.HiAppEvent +- SystemCapability.HiviewDFX.HiChecker +- SystemCapability.HiviewDFX.HiCollie +- SystemCapability.HiviewDFX.HiDumper +- SystemCapability.HiviewDFX.HiLog +- SystemCapability.HiviewDFX.HiProfiler.HiDebug +- SystemCapability.HiviewDFX.HiSysEvent +- SystemCapability.HiviewDFX.HiTrace +- SystemCapability.HiviewDFX.Hiview.FaultLogger +- SystemCapability.HiviewDFX.Hiview.LogLibrary +- SystemCapability.Global.I18n +- SystemCapability.Multimedia.Image.Core +- SystemCapability.Multimedia.Image.ImageCreator +- SystemCapability.Multimedia.Image.ImagePacker +- SystemCapability.Multimedia.Image.ImageReceiver +- SystemCapability.Multimedia.Image.ImageSource +- SystemCapability.MiscServices.InputMethodFramework +- SystemCapability.MultimodalInput.Input.Core +- SystemCapability.MultimodalInput.Input.InputConsumer +- SystemCapability.MultimodalInput.Input.InputDevice +- SystemCapability.MultimodalInput.Input.InputMonitor +- SystemCapability.MultimodalInput.Input.InputSimulator +- SystemCapability.MultimodalInput.Input.ShortKey +- SystemCapability.DistributedDataManager.KVStore.Core +- SystemCapability.DistributedDataManager.KVStore.DistributedKVStore +- SystemCapability.ArkUI.ArkUI.Libuv +- SystemCapability.Sensors.MiscDevice +- SystemCapability.ArkCompiler.JSVM +- SystemCapability.ArkUI.ArkUI.Napi +- SystemCapability.Communication.NetManager.Core +- SystemCapability.Communication.NetManager.Ethernet +- SystemCapability.Communication.NetManager.MDNS +- SystemCapability.Communication.NetManager.NetSharing +- SystemCapability.Communication.NetManager.Vpn +- SystemCapability.Communication.NetStack +- SystemCapability.Account.AppAccount +- SystemCapability.Account.OsAccount +- SystemCapability.MiscServices.Pasteboard +- SystemCapability.UserIAM.UserAuth.PinAuth +- SystemCapability.Multimedia.AudioHaptic.Core +- SystemCapability.Multimedia.Media.AVImageGenerator +- SystemCapability.Multimedia.Media.AVMetadataExtractor +- SystemCapability.Multimedia.Media.AVPlayer +- SystemCapability.Multimedia.Media.AVRecorder +- SystemCapability.Multimedia.Media.AVScreenCapture +- SystemCapability.Multimedia.Media.AudioPlayer +- SystemCapability.Multimedia.Media.AudioRecorder +- SystemCapability.Multimedia.Media.SoundPool +- SystemCapability.Multimedia.Media.VideoPlayer +- SystemCapability.Multimedia.Media.VideoRecorder +- SystemCapability.Multimedia.SystemSound.Core +- SystemCapability.PowerManager.PowerManager.Core +- SystemCapability.PowerManager.PowerManager.Extension +- SystemCapability.DistributedDataManager.Preferences.Core +- SystemCapability.DistributedDataManager.CloudSync.Client +- SystemCapability.DistributedDataManager.CloudSync.Config +- SystemCapability.DistributedDataManager.CloudSync.Server +- SystemCapability.DistributedDataManager.CommonType +- SystemCapability.DistributedDataManager.RelationalStore.Core +- SystemCapability.MiscServices.Download +- SystemCapability.MiscServices.Upload +- SystemCapability.Request.FileTransferAgent +- SystemCapability.Global.ResourceManager +- SystemCapability.ResourceSchedule.SystemLoad +- SystemCapability.MiscServices.ScreenLock +- SystemCapability.Security.SecurityGuard +- SystemCapability.Sensors.Sensor +- SystemCapability.Applications.Settings.Core +- SystemCapability.Telephony.SmsMms +- SystemCapability.Telephony.StateRegistry +- SystemCapability.FileManagement.StorageService.Encryption +- SystemCapability.FileManagement.StorageService.SpatialStatistics +- SystemCapability.FileManagement.StorageService.Volume +- SystemCapability.Developtools.Syscap +- SystemCapability.PowerManager.ThermalManager +- SystemCapability.MiscServices.Time +- SystemCapability.DistributedDataManager.UDMF.Core +- SystemCapability.ArkUI.UiAppearance +- SystemCapability.Update.UpdateService +- SystemCapability.UserIAM.UserAuth.Core +- SystemCapability.FileManagement.UserFileService +- SystemCapability.Web.Webview.Core +- SystemCapability.WindowManager.WindowManager.Core +- SystemCapability.ResourceSchedule.WorkScheduler +- SystemCapability.Applications.ContactsData +- SystemCapability.Communication.NFC.Core +- SystemCapability.Communication.NFC.CardEmulation +- SystemCapability.Communication.WiFi.STA +- SystemCapability.Communication.WiFi.AP.Core +- SystemCapability.Communication.WiFi.P2P +- SystemCapability.Communication.WiFi.Core +- SystemCapability.Communication.WiFi.AP.Extension +- SystemCapability.Location.Location.Core +- SystemCapability.Location.Location.Gnss +- SystemCapability.Test.UiTest -- Gitee